[Reproducible-commits] [pyqt5] 01/03: imported from pyqt5_5.3.2+dfsg.orig.tar.gz

Holger Levsen holger at moszumanska.debian.org
Fri Mar 20 21:42:03 UTC 2015


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

holger pushed a commit to branch pu/reproducible_builds
in repository pyqt5.

commit 2664ce7525a3989fa4dccbdacf2042496891b3f2
Author: Holger Levsen <holger at layer-acht.org>
Date:   Fri Mar 20 22:39:38 2015 +0100

    imported from pyqt5_5.3.2+dfsg.orig.tar.gz
---
 AddToPath.nsh                                      |   227 +
 LICENSE                                            |   685 ++
 NEWS                                               |    82 +
 PyQt5-Qt5.nsi                                      |   581 +
 README                                             |    59 +
 StrSlash.nsh                                       |    41 +
 __init__.py                                        |    16 +
 configure.py                                       |  2741 +++++
 dbus/dbus.cpp                                      |   433 +
 dbus/helper.h                                      |    71 +
 designer/pluginloader.cpp                          |   318 +
 designer/pluginloader.h                            |    56 +
 designer/python.pro-in                             |    23 +
 doc/sphinx/api/enginio.rst                         |     8 +
 doc/sphinx/api/enginioclient.rst                   |     8 +
 doc/sphinx/api/enginioclientconnection.rst         |     8 +
 doc/sphinx/api/enginioidentity.rst                 |     8 +
 doc/sphinx/api/enginiomodel.rst                    |     8 +
 doc/sphinx/api/enginiooauth2authentication.rst     |     8 +
 doc/sphinx/api/enginioreply.rst                    |     8 +
 doc/sphinx/api/qabstractanimation.rst              |     8 +
 doc/sphinx/api/qabstractbutton.rst                 |     8 +
 doc/sphinx/api/qabstracteventdispatcher.rst        |     8 +
 doc/sphinx/api/qabstractextensionfactory.rst       |     8 +
 doc/sphinx/api/qabstractextensionmanager.rst       |     8 +
 doc/sphinx/api/qabstractformbuilder.rst            |     8 +
 doc/sphinx/api/qabstractgraphicsshapeitem.rst      |     8 +
 doc/sphinx/api/qabstractitemdelegate.rst           |     8 +
 doc/sphinx/api/qabstractitemmodel.rst              |     8 +
 doc/sphinx/api/qabstractitemview.rst               |     8 +
 doc/sphinx/api/qabstractlistmodel.rst              |     8 +
 doc/sphinx/api/qabstractmessagehandler.rst         |     8 +
 doc/sphinx/api/qabstractnativeeventfilter.rst      |     8 +
 doc/sphinx/api/qabstractnetworkcache.rst           |     8 +
 doc/sphinx/api/qabstractprintdialog.rst            |     8 +
 doc/sphinx/api/qabstractproxymodel.rst             |     8 +
 doc/sphinx/api/qabstractscrollarea.rst             |     8 +
 doc/sphinx/api/qabstractslider.rst                 |     8 +
 doc/sphinx/api/qabstractsocket.rst                 |     8 +
 doc/sphinx/api/qabstractspinbox.rst                |     8 +
 doc/sphinx/api/qabstractstate.rst                  |     8 +
 doc/sphinx/api/qabstracttablemodel.rst             |     8 +
 doc/sphinx/api/qabstracttextdocumentlayout.rst     |     8 +
 doc/sphinx/api/qabstracttransition.rst             |     8 +
 doc/sphinx/api/qabstracturiresolver.rst            |     8 +
 doc/sphinx/api/qabstractvideobuffer.rst            |     8 +
 doc/sphinx/api/qabstractvideosurface.rst           |     8 +
 doc/sphinx/api/qabstractxmlnodemodel.rst           |     8 +
 doc/sphinx/api/qabstractxmlreceiver.rst            |     8 +
 doc/sphinx/api/qaccelerometer.rst                  |     8 +
 doc/sphinx/api/qaccelerometerfilter.rst            |     8 +
 doc/sphinx/api/qaccelerometerreading.rst           |     8 +
 doc/sphinx/api/qaction.rst                         |     8 +
 doc/sphinx/api/qactionevent.rst                    |     8 +
 doc/sphinx/api/qactiongroup.rst                    |     8 +
 doc/sphinx/api/qaltimeter.rst                      |     8 +
 doc/sphinx/api/qaltimeterfilter.rst                |     8 +
 doc/sphinx/api/qaltimeterreading.rst               |     8 +
 doc/sphinx/api/qambientlightfilter.rst             |     8 +
 doc/sphinx/api/qambientlightreading.rst            |     8 +
 doc/sphinx/api/qambientlightsensor.rst             |     8 +
 doc/sphinx/api/qambienttemperaturefilter.rst       |     8 +
 doc/sphinx/api/qambienttemperaturereading.rst      |     8 +
 doc/sphinx/api/qambienttemperaturesensor.rst       |     8 +
 doc/sphinx/api/qanimationgroup.rst                 |     8 +
 doc/sphinx/api/qapplication.rst                    |     8 +
 doc/sphinx/api/qaudio.rst                          |     8 +
 doc/sphinx/api/qaudiobuffer.rst                    |     8 +
 doc/sphinx/api/qaudiodecoder.rst                   |     8 +
 doc/sphinx/api/qaudiodeviceinfo.rst                |     8 +
 doc/sphinx/api/qaudioencodersettings.rst           |     8 +
 doc/sphinx/api/qaudioformat.rst                    |     8 +
 doc/sphinx/api/qaudioinput.rst                     |     8 +
 doc/sphinx/api/qaudiooutput.rst                    |     8 +
 doc/sphinx/api/qaudioprobe.rst                     |     8 +
 doc/sphinx/api/qaudiorecorder.rst                  |     8 +
 doc/sphinx/api/qauthenticator.rst                  |     8 +
 doc/sphinx/api/qaxbase.rst                         |     8 +
 doc/sphinx/api/qaxobject.rst                       |     8 +
 doc/sphinx/api/qaxwidget.rst                       |     8 +
 doc/sphinx/api/qbackingstore.rst                   |     8 +
 doc/sphinx/api/qbasictimer.rst                     |     8 +
 doc/sphinx/api/qbitarray.rst                       |     8 +
 doc/sphinx/api/qbitmap.rst                         |     8 +
 doc/sphinx/api/qbluetoothaddress.rst               |     8 +
 doc/sphinx/api/qbluetoothdevicediscoveryagent.rst  |     8 +
 doc/sphinx/api/qbluetoothdeviceinfo.rst            |     8 +
 doc/sphinx/api/qbluetoothhostinfo.rst              |     8 +
 doc/sphinx/api/qbluetoothlocaldevice.rst           |     8 +
 doc/sphinx/api/qbluetoothserver.rst                |     8 +
 doc/sphinx/api/qbluetoothservicediscoveryagent.rst |     8 +
 doc/sphinx/api/qbluetoothserviceinfo.rst           |     8 +
 doc/sphinx/api/qbluetoothsocket.rst                |     8 +
 doc/sphinx/api/qbluetoothtransfermanager.rst       |     8 +
 doc/sphinx/api/qbluetoothtransferreply.rst         |     8 +
 doc/sphinx/api/qbluetoothtransferrequest.rst       |     8 +
 doc/sphinx/api/qbluetoothuuid.rst                  |     8 +
 doc/sphinx/api/qboxlayout.rst                      |     8 +
 doc/sphinx/api/qbrush.rst                          |     8 +
 doc/sphinx/api/qbuffer.rst                         |     8 +
 doc/sphinx/api/qbuttongroup.rst                    |     8 +
 doc/sphinx/api/qbytearray.rst                      |     8 +
 doc/sphinx/api/qbytearraymatcher.rst               |     8 +
 doc/sphinx/api/qcalendarwidget.rst                 |     8 +
 doc/sphinx/api/qcamera.rst                         |     8 +
 doc/sphinx/api/qcameraexposure.rst                 |     8 +
 doc/sphinx/api/qcamerafocus.rst                    |     8 +
 doc/sphinx/api/qcamerafocuszone.rst                |     8 +
 doc/sphinx/api/qcameraimagecapture.rst             |     8 +
 doc/sphinx/api/qcameraimageprocessing.rst          |     8 +
 doc/sphinx/api/qcamerainfo.rst                     |     8 +
 doc/sphinx/api/qcameraviewfinder.rst               |     8 +
 doc/sphinx/api/qcheckbox.rst                       |     8 +
 doc/sphinx/api/qchildevent.rst                     |     8 +
 doc/sphinx/api/qclipboard.rst                      |     8 +
 doc/sphinx/api/qcloseevent.rst                     |     8 +
 doc/sphinx/api/qcollator.rst                       |     8 +
 doc/sphinx/api/qcollatorsortkey.rst                |     8 +
 doc/sphinx/api/qcolor.rst                          |     8 +
 doc/sphinx/api/qcolordialog.rst                    |     8 +
 doc/sphinx/api/qcolumnview.rst                     |     8 +
 doc/sphinx/api/qcombobox.rst                       |     8 +
 doc/sphinx/api/qcommandlineoption.rst              |     8 +
 doc/sphinx/api/qcommandlineparser.rst              |     8 +
 doc/sphinx/api/qcommandlinkbutton.rst              |     8 +
 doc/sphinx/api/qcommonstyle.rst                    |     8 +
 doc/sphinx/api/qcompass.rst                        |     8 +
 doc/sphinx/api/qcompassfilter.rst                  |     8 +
 doc/sphinx/api/qcompassreading.rst                 |     8 +
 doc/sphinx/api/qcompleter.rst                      |     8 +
 doc/sphinx/api/qconicalgradient.rst                |     8 +
 doc/sphinx/api/qcontextmenuevent.rst               |     8 +
 doc/sphinx/api/qcoreapplication.rst                |     8 +
 doc/sphinx/api/qcryptographichash.rst              |     8 +
 doc/sphinx/api/qcursor.rst                         |     8 +
 doc/sphinx/api/qdatastream.rst                     |     8 +
 doc/sphinx/api/qdatawidgetmapper.rst               |     8 +
 doc/sphinx/api/qdate.rst                           |     8 +
 doc/sphinx/api/qdateedit.rst                       |     8 +
 doc/sphinx/api/qdatetime.rst                       |     8 +
 doc/sphinx/api/qdatetimeedit.rst                   |     8 +
 doc/sphinx/api/qdbus.rst                           |     8 +
 doc/sphinx/api/qdbusabstractadaptor.rst            |     8 +
 doc/sphinx/api/qdbusabstractinterface.rst          |     8 +
 doc/sphinx/api/qdbusargument.rst                   |     8 +
 doc/sphinx/api/qdbusconnection.rst                 |     8 +
 doc/sphinx/api/qdbusconnectioninterface.rst        |     8 +
 doc/sphinx/api/qdbuserror.rst                      |     8 +
 doc/sphinx/api/qdbusinterface.rst                  |     8 +
 doc/sphinx/api/qdbusmessage.rst                    |     8 +
 doc/sphinx/api/qdbusobjectpath.rst                 |     8 +
 doc/sphinx/api/qdbuspendingcall.rst                |     8 +
 doc/sphinx/api/qdbuspendingcallwatcher.rst         |     8 +
 doc/sphinx/api/qdbuspendingreply.rst               |     8 +
 doc/sphinx/api/qdbusreply.rst                      |     8 +
 doc/sphinx/api/qdbusservicewatcher.rst             |     8 +
 doc/sphinx/api/qdbussignature.rst                  |     8 +
 doc/sphinx/api/qdbusunixfiledescriptor.rst         |     8 +
 doc/sphinx/api/qdbusvariant.rst                    |     8 +
 doc/sphinx/api/qdesigneractioneditorinterface.rst  |     8 +
 doc/sphinx/api/qdesignercontainerextension.rst     |     8 +
 .../qdesignercustomwidgetcollectioninterface.rst   |     8 +
 doc/sphinx/api/qdesignercustomwidgetinterface.rst  |     8 +
 doc/sphinx/api/qdesignerformeditorinterface.rst    |     8 +
 .../api/qdesignerformwindowcursorinterface.rst     |     8 +
 doc/sphinx/api/qdesignerformwindowinterface.rst    |     8 +
 .../api/qdesignerformwindowmanagerinterface.rst    |     8 +
 doc/sphinx/api/qdesignermembersheetextension.rst   |     8 +
 .../api/qdesignerobjectinspectorinterface.rst      |     8 +
 .../api/qdesignerpropertyeditorinterface.rst       |     8 +
 doc/sphinx/api/qdesignerpropertysheetextension.rst |     8 +
 doc/sphinx/api/qdesignertaskmenuextension.rst      |     8 +
 doc/sphinx/api/qdesignerwidgetboxinterface.rst     |     8 +
 doc/sphinx/api/qdesktopservices.rst                |     8 +
 doc/sphinx/api/qdesktopwidget.rst                  |     8 +
 doc/sphinx/api/qdial.rst                           |     8 +
 doc/sphinx/api/qdialog.rst                         |     8 +
 doc/sphinx/api/qdialogbuttonbox.rst                |     8 +
 doc/sphinx/api/qdir.rst                            |     8 +
 doc/sphinx/api/qdiriterator.rst                    |     8 +
 doc/sphinx/api/qdirmodel.rst                       |     8 +
 doc/sphinx/api/qdnsdomainnamerecord.rst            |     8 +
 doc/sphinx/api/qdnshostaddressrecord.rst           |     8 +
 doc/sphinx/api/qdnslookup.rst                      |     8 +
 doc/sphinx/api/qdnsmailexchangerecord.rst          |     8 +
 doc/sphinx/api/qdnsservicerecord.rst               |     8 +
 doc/sphinx/api/qdnstextrecord.rst                  |     8 +
 doc/sphinx/api/qdockwidget.rst                     |     8 +
 doc/sphinx/api/qdoublespinbox.rst                  |     8 +
 doc/sphinx/api/qdoublevalidator.rst                |     8 +
 doc/sphinx/api/qdrag.rst                           |     8 +
 doc/sphinx/api/qdragenterevent.rst                 |     8 +
 doc/sphinx/api/qdragleaveevent.rst                 |     8 +
 doc/sphinx/api/qdragmoveevent.rst                  |     8 +
 doc/sphinx/api/qdropevent.rst                      |     8 +
 doc/sphinx/api/qdynamicpropertychangeevent.rst     |     8 +
 doc/sphinx/api/qeasingcurve.rst                    |     8 +
 doc/sphinx/api/qelapsedtimer.rst                   |     8 +
 doc/sphinx/api/qenterevent.rst                     |     8 +
 doc/sphinx/api/qerrormessage.rst                   |     8 +
 doc/sphinx/api/qevent.rst                          |     8 +
 doc/sphinx/api/qeventloop.rst                      |     8 +
 doc/sphinx/api/qeventlooplocker.rst                |     8 +
 doc/sphinx/api/qeventtransition.rst                |     8 +
 doc/sphinx/api/qexposeevent.rst                    |     8 +
 doc/sphinx/api/qextensionfactory.rst               |     8 +
 doc/sphinx/api/qextensionmanager.rst               |     8 +
 doc/sphinx/api/qfile.rst                           |     8 +
 doc/sphinx/api/qfiledevice.rst                     |     8 +
 doc/sphinx/api/qfiledialog.rst                     |     8 +
 doc/sphinx/api/qfileiconprovider.rst               |     8 +
 doc/sphinx/api/qfileinfo.rst                       |     8 +
 doc/sphinx/api/qfileopenevent.rst                  |     8 +
 doc/sphinx/api/qfileselector.rst                   |     8 +
 doc/sphinx/api/qfilesystemmodel.rst                |     8 +
 doc/sphinx/api/qfilesystemwatcher.rst              |     8 +
 doc/sphinx/api/qfinalstate.rst                     |     8 +
 doc/sphinx/api/qfocusevent.rst                     |     8 +
 doc/sphinx/api/qfocusframe.rst                     |     8 +
 doc/sphinx/api/qfont.rst                           |     8 +
 doc/sphinx/api/qfontcombobox.rst                   |     8 +
 doc/sphinx/api/qfontdatabase.rst                   |     8 +
 doc/sphinx/api/qfontdialog.rst                     |     8 +
 doc/sphinx/api/qfontinfo.rst                       |     8 +
 doc/sphinx/api/qfontmetrics.rst                    |     8 +
 doc/sphinx/api/qfontmetricsf.rst                   |     8 +
 doc/sphinx/api/qformbuilder.rst                    |     8 +
 doc/sphinx/api/qformlayout.rst                     |     8 +
 doc/sphinx/api/qframe.rst                          |     8 +
 doc/sphinx/api/qgenericargument.rst                |     8 +
 doc/sphinx/api/qgenericreturnargument.rst          |     8 +
 doc/sphinx/api/qgeoaddress.rst                     |     8 +
 doc/sphinx/api/qgeoareamonitorinfo.rst             |     8 +
 doc/sphinx/api/qgeoareamonitorsource.rst           |     8 +
 doc/sphinx/api/qgeocircle.rst                      |     8 +
 doc/sphinx/api/qgeocoordinate.rst                  |     8 +
 doc/sphinx/api/qgeolocation.rst                    |     8 +
 doc/sphinx/api/qgeopositioninfo.rst                |     8 +
 doc/sphinx/api/qgeopositioninfosource.rst          |     8 +
 doc/sphinx/api/qgeorectangle.rst                   |     8 +
 doc/sphinx/api/qgeosatelliteinfo.rst               |     8 +
 doc/sphinx/api/qgeosatelliteinfosource.rst         |     8 +
 doc/sphinx/api/qgeoshape.rst                       |     8 +
 doc/sphinx/api/qgesture.rst                        |     8 +
 doc/sphinx/api/qgestureevent.rst                   |     8 +
 doc/sphinx/api/qgesturerecognizer.rst              |     8 +
 doc/sphinx/api/qgl.rst                             |     8 +
 doc/sphinx/api/qglcontext.rst                      |     8 +
 doc/sphinx/api/qglformat.rst                       |     8 +
 doc/sphinx/api/qglwidget.rst                       |     8 +
 doc/sphinx/api/qglyphrun.rst                       |     8 +
 doc/sphinx/api/qgradient.rst                       |     8 +
 doc/sphinx/api/qgraphicsanchor.rst                 |     8 +
 doc/sphinx/api/qgraphicsanchorlayout.rst           |     8 +
 doc/sphinx/api/qgraphicsblureffect.rst             |     8 +
 doc/sphinx/api/qgraphicscolorizeeffect.rst         |     8 +
 doc/sphinx/api/qgraphicsdropshadoweffect.rst       |     8 +
 doc/sphinx/api/qgraphicseffect.rst                 |     8 +
 doc/sphinx/api/qgraphicsellipseitem.rst            |     8 +
 doc/sphinx/api/qgraphicsgridlayout.rst             |     8 +
 doc/sphinx/api/qgraphicsitem.rst                   |     8 +
 doc/sphinx/api/qgraphicsitemgroup.rst              |     8 +
 doc/sphinx/api/qgraphicslayout.rst                 |     8 +
 doc/sphinx/api/qgraphicslayoutitem.rst             |     8 +
 doc/sphinx/api/qgraphicslinearlayout.rst           |     8 +
 doc/sphinx/api/qgraphicslineitem.rst               |     8 +
 doc/sphinx/api/qgraphicsobject.rst                 |     8 +
 doc/sphinx/api/qgraphicsopacityeffect.rst          |     8 +
 doc/sphinx/api/qgraphicspathitem.rst               |     8 +
 doc/sphinx/api/qgraphicspixmapitem.rst             |     8 +
 doc/sphinx/api/qgraphicspolygonitem.rst            |     8 +
 doc/sphinx/api/qgraphicsproxywidget.rst            |     8 +
 doc/sphinx/api/qgraphicsrectitem.rst               |     8 +
 doc/sphinx/api/qgraphicsrotation.rst               |     8 +
 doc/sphinx/api/qgraphicsscale.rst                  |     8 +
 doc/sphinx/api/qgraphicsscene.rst                  |     8 +
 doc/sphinx/api/qgraphicsscenecontextmenuevent.rst  |     8 +
 doc/sphinx/api/qgraphicsscenedragdropevent.rst     |     8 +
 doc/sphinx/api/qgraphicssceneevent.rst             |     8 +
 doc/sphinx/api/qgraphicsscenehelpevent.rst         |     8 +
 doc/sphinx/api/qgraphicsscenehoverevent.rst        |     8 +
 doc/sphinx/api/qgraphicsscenemouseevent.rst        |     8 +
 doc/sphinx/api/qgraphicsscenemoveevent.rst         |     8 +
 doc/sphinx/api/qgraphicssceneresizeevent.rst       |     8 +
 doc/sphinx/api/qgraphicsscenewheelevent.rst        |     8 +
 doc/sphinx/api/qgraphicssimpletextitem.rst         |     8 +
 doc/sphinx/api/qgraphicssvgitem.rst                |     8 +
 doc/sphinx/api/qgraphicstextitem.rst               |     8 +
 doc/sphinx/api/qgraphicstransform.rst              |     8 +
 doc/sphinx/api/qgraphicsvideoitem.rst              |     8 +
 doc/sphinx/api/qgraphicsview.rst                   |     8 +
 doc/sphinx/api/qgraphicswebview.rst                |     8 +
 doc/sphinx/api/qgraphicswidget.rst                 |     8 +
 doc/sphinx/api/qgridlayout.rst                     |     8 +
 doc/sphinx/api/qgroupbox.rst                       |     8 +
 doc/sphinx/api/qguiapplication.rst                 |     8 +
 doc/sphinx/api/qgyroscope.rst                      |     8 +
 doc/sphinx/api/qgyroscopefilter.rst                |     8 +
 doc/sphinx/api/qgyroscopereading.rst               |     8 +
 doc/sphinx/api/qhboxlayout.rst                     |     8 +
 doc/sphinx/api/qheaderview.rst                     |     8 +
 doc/sphinx/api/qhelpcontentitem.rst                |     8 +
 doc/sphinx/api/qhelpcontentmodel.rst               |     8 +
 doc/sphinx/api/qhelpcontentwidget.rst              |     8 +
 doc/sphinx/api/qhelpengine.rst                     |     8 +
 doc/sphinx/api/qhelpenginecore.rst                 |     8 +
 doc/sphinx/api/qhelpevent.rst                      |     8 +
 doc/sphinx/api/qhelpindexmodel.rst                 |     8 +
 doc/sphinx/api/qhelpindexwidget.rst                |     8 +
 doc/sphinx/api/qhelpsearchengine.rst               |     8 +
 doc/sphinx/api/qhelpsearchquery.rst                |     8 +
 doc/sphinx/api/qhelpsearchquerywidget.rst          |     8 +
 doc/sphinx/api/qhelpsearchresultwidget.rst         |     8 +
 doc/sphinx/api/qhideevent.rst                      |     8 +
 doc/sphinx/api/qhistorystate.rst                   |     8 +
 doc/sphinx/api/qholsterfilter.rst                  |     8 +
 doc/sphinx/api/qholsterreading.rst                 |     8 +
 doc/sphinx/api/qholstersensor.rst                  |     8 +
 doc/sphinx/api/qhostaddress.rst                    |     8 +
 doc/sphinx/api/qhostinfo.rst                       |     8 +
 doc/sphinx/api/qhoverevent.rst                     |     8 +
 doc/sphinx/api/qhttpmultipart.rst                  |     8 +
 doc/sphinx/api/qhttppart.rst                       |     8 +
 doc/sphinx/api/qicon.rst                           |     8 +
 doc/sphinx/api/qicondragevent.rst                  |     8 +
 doc/sphinx/api/qiconengine.rst                     |     8 +
 doc/sphinx/api/qidentityproxymodel.rst             |     8 +
 doc/sphinx/api/qimage.rst                          |     8 +
 doc/sphinx/api/qimageencodersettings.rst           |     8 +
 doc/sphinx/api/qimageiohandler.rst                 |     8 +
 doc/sphinx/api/qimagereader.rst                    |     8 +
 doc/sphinx/api/qimagewriter.rst                    |     8 +
 doc/sphinx/api/qinputdialog.rst                    |     8 +
 doc/sphinx/api/qinputevent.rst                     |     8 +
 doc/sphinx/api/qinputmethod.rst                    |     8 +
 doc/sphinx/api/qinputmethodevent.rst               |     8 +
 doc/sphinx/api/qinputmethodqueryevent.rst          |     8 +
 doc/sphinx/api/qintvalidator.rst                   |     8 +
 doc/sphinx/api/qiodevice.rst                       |     8 +
 doc/sphinx/api/qirproximityfilter.rst              |     8 +
 doc/sphinx/api/qirproximityreading.rst             |     8 +
 doc/sphinx/api/qirproximitysensor.rst              |     8 +
 doc/sphinx/api/qitemdelegate.rst                   |     8 +
 doc/sphinx/api/qitemeditorcreatorbase.rst          |     8 +
 doc/sphinx/api/qitemeditorfactory.rst              |     8 +
 doc/sphinx/api/qitemselection.rst                  |     8 +
 doc/sphinx/api/qitemselectionmodel.rst             |     8 +
 doc/sphinx/api/qitemselectionrange.rst             |     8 +
 doc/sphinx/api/qjsengine.rst                       |     8 +
 doc/sphinx/api/qjsonarray.rst                      |    11 +
 doc/sphinx/api/qjsondocument.rst                   |     8 +
 doc/sphinx/api/qjsonobject.rst                     |    11 +
 doc/sphinx/api/qjsonparseerror.rst                 |     8 +
 doc/sphinx/api/qjsonvalue.rst                      |    24 +
 doc/sphinx/api/qjsvalue.rst                        |     8 +
 doc/sphinx/api/qjsvalueiterator.rst                |     8 +
 doc/sphinx/api/qkeyevent.rst                       |     8 +
 doc/sphinx/api/qkeyeventtransition.rst             |     8 +
 doc/sphinx/api/qkeysequence.rst                    |     8 +
 doc/sphinx/api/qkeysequenceedit.rst                |     8 +
 doc/sphinx/api/qlabel.rst                          |     8 +
 doc/sphinx/api/qlayout.rst                         |     8 +
 doc/sphinx/api/qlayoutitem.rst                     |     8 +
 doc/sphinx/api/qlcdnumber.rst                      |     8 +
 doc/sphinx/api/qlibrary.rst                        |     8 +
 doc/sphinx/api/qlibraryinfo.rst                    |     8 +
 doc/sphinx/api/qlightfilter.rst                    |     8 +
 doc/sphinx/api/qlightreading.rst                   |     8 +
 doc/sphinx/api/qlightsensor.rst                    |     8 +
 doc/sphinx/api/qline.rst                           |     8 +
 doc/sphinx/api/qlineargradient.rst                 |     8 +
 doc/sphinx/api/qlineedit.rst                       |     8 +
 doc/sphinx/api/qlinef.rst                          |     8 +
 doc/sphinx/api/qlistview.rst                       |     8 +
 doc/sphinx/api/qlistwidget.rst                     |     8 +
 doc/sphinx/api/qlistwidgetitem.rst                 |     8 +
 doc/sphinx/api/qlocale.rst                         |     8 +
 doc/sphinx/api/qlocalserver.rst                    |     8 +
 doc/sphinx/api/qlocalsocket.rst                    |     8 +
 doc/sphinx/api/qlockfile.rst                       |     8 +
 doc/sphinx/api/qmacpasteboardmime.rst              |     8 +
 doc/sphinx/api/qmagnetometer.rst                   |     8 +
 doc/sphinx/api/qmagnetometerfilter.rst             |     8 +
 doc/sphinx/api/qmagnetometerreading.rst            |     8 +
 doc/sphinx/api/qmainwindow.rst                     |     8 +
 doc/sphinx/api/qmargins.rst                        |     8 +
 doc/sphinx/api/qmarginsf.rst                       |     8 +
 doc/sphinx/api/qmaskgenerator.rst                  |     8 +
 doc/sphinx/api/qmatrix2x2.rst                      |     8 +
 doc/sphinx/api/qmatrix2x3.rst                      |     8 +
 doc/sphinx/api/qmatrix2x4.rst                      |     8 +
 doc/sphinx/api/qmatrix3x2.rst                      |     8 +
 doc/sphinx/api/qmatrix3x3.rst                      |     8 +
 doc/sphinx/api/qmatrix3x4.rst                      |     8 +
 doc/sphinx/api/qmatrix4x2.rst                      |     8 +
 doc/sphinx/api/qmatrix4x3.rst                      |     8 +
 doc/sphinx/api/qmatrix4x4.rst                      |     8 +
 doc/sphinx/api/qmdiarea.rst                        |     8 +
 doc/sphinx/api/qmdisubwindow.rst                   |     8 +
 doc/sphinx/api/qmediabindableinterface.rst         |     8 +
 doc/sphinx/api/qmediacontent.rst                   |     8 +
 doc/sphinx/api/qmediacontrol.rst                   |     8 +
 doc/sphinx/api/qmediametadata.rst                  |     8 +
 doc/sphinx/api/qmediaobject.rst                    |     8 +
 doc/sphinx/api/qmediaplayer.rst                    |     8 +
 doc/sphinx/api/qmediaplaylist.rst                  |     8 +
 doc/sphinx/api/qmediarecorder.rst                  |     8 +
 doc/sphinx/api/qmediaresource.rst                  |     8 +
 doc/sphinx/api/qmediaservice.rst                   |     8 +
 doc/sphinx/api/qmediatimeinterval.rst              |     8 +
 doc/sphinx/api/qmediatimerange.rst                 |     8 +
 doc/sphinx/api/qmenu.rst                           |     8 +
 doc/sphinx/api/qmenubar.rst                        |     8 +
 doc/sphinx/api/qmessageauthenticationcode.rst      |     8 +
 doc/sphinx/api/qmessagebox.rst                     |     8 +
 doc/sphinx/api/qmessagelogcontext.rst              |     8 +
 doc/sphinx/api/qmessagelogger.rst                  |     8 +
 doc/sphinx/api/qmetaclassinfo.rst                  |     8 +
 doc/sphinx/api/qmetaenum.rst                       |     8 +
 doc/sphinx/api/qmetamethod.rst                     |     8 +
 doc/sphinx/api/qmetaobject.rst                     |     8 +
 doc/sphinx/api/qmetaproperty.rst                   |     8 +
 doc/sphinx/api/qmetatype.rst                       |     8 +
 doc/sphinx/api/qmimedata.rst                       |     8 +
 doc/sphinx/api/qmimedatabase.rst                   |     8 +
 doc/sphinx/api/qmimetype.rst                       |     8 +
 doc/sphinx/api/qmodelindex.rst                     |     8 +
 doc/sphinx/api/qmouseevent.rst                     |     8 +
 doc/sphinx/api/qmouseeventtransition.rst           |     8 +
 doc/sphinx/api/qmoveevent.rst                      |     8 +
 doc/sphinx/api/qmovie.rst                          |     8 +
 doc/sphinx/api/qmultimedia.rst                     |     8 +
 doc/sphinx/api/qmutex.rst                          |     8 +
 doc/sphinx/api/qmutexlocker.rst                    |     8 +
 doc/sphinx/api/qnetworkaccessmanager.rst           |     8 +
 doc/sphinx/api/qnetworkaddressentry.rst            |     8 +
 doc/sphinx/api/qnetworkcachemetadata.rst           |     8 +
 doc/sphinx/api/qnetworkconfiguration.rst           |     8 +
 doc/sphinx/api/qnetworkconfigurationmanager.rst    |     8 +
 doc/sphinx/api/qnetworkcookie.rst                  |     8 +
 doc/sphinx/api/qnetworkcookiejar.rst               |     8 +
 doc/sphinx/api/qnetworkdiskcache.rst               |     8 +
 doc/sphinx/api/qnetworkinterface.rst               |     8 +
 doc/sphinx/api/qnetworkproxy.rst                   |     8 +
 doc/sphinx/api/qnetworkproxyfactory.rst            |     8 +
 doc/sphinx/api/qnetworkproxyquery.rst              |     8 +
 doc/sphinx/api/qnetworkreply.rst                   |     8 +
 doc/sphinx/api/qnetworkrequest.rst                 |     8 +
 doc/sphinx/api/qnetworksession.rst                 |     8 +
 doc/sphinx/api/qnmeapositioninfosource.rst         |     8 +
 doc/sphinx/api/qobject.rst                         |     8 +
 doc/sphinx/api/qobjectcleanuphandler.rst           |     8 +
 doc/sphinx/api/qoffscreensurface.rst               |     8 +
 doc/sphinx/api/qopenglbuffer.rst                   |     8 +
 doc/sphinx/api/qopenglcontext.rst                  |     8 +
 doc/sphinx/api/qopenglcontextgroup.rst             |     8 +
 doc/sphinx/api/qopengldebuglogger.rst              |     8 +
 doc/sphinx/api/qopengldebugmessage.rst             |     8 +
 doc/sphinx/api/qopenglframebufferobject.rst        |     8 +
 doc/sphinx/api/qopenglframebufferobjectformat.rst  |     8 +
 doc/sphinx/api/qopenglpaintdevice.rst              |     8 +
 doc/sphinx/api/qopenglshader.rst                   |     8 +
 doc/sphinx/api/qopenglshaderprogram.rst            |     8 +
 doc/sphinx/api/qopengltexture.rst                  |     8 +
 doc/sphinx/api/qopengltimemonitor.rst              |     8 +
 doc/sphinx/api/qopengltimerquery.rst               |     8 +
 doc/sphinx/api/qopenglvertexarrayobject.rst        |     8 +
 doc/sphinx/api/qorientationfilter.rst              |     8 +
 doc/sphinx/api/qorientationreading.rst             |     8 +
 doc/sphinx/api/qorientationsensor.rst              |     8 +
 doc/sphinx/api/qpagedpaintdevice.rst               |     8 +
 doc/sphinx/api/qpagelayout.rst                     |     8 +
 doc/sphinx/api/qpagesetupdialog.rst                |     8 +
 doc/sphinx/api/qpagesize.rst                       |     8 +
 doc/sphinx/api/qpaintdevice.rst                    |     8 +
 doc/sphinx/api/qpaintengine.rst                    |     8 +
 doc/sphinx/api/qpaintenginestate.rst               |     8 +
 doc/sphinx/api/qpainter.rst                        |     8 +
 doc/sphinx/api/qpainterpath.rst                    |     8 +
 doc/sphinx/api/qpainterpathstroker.rst             |     8 +
 doc/sphinx/api/qpaintevent.rst                     |     8 +
 doc/sphinx/api/qpalette.rst                        |     8 +
 doc/sphinx/api/qpangesture.rst                     |     8 +
 doc/sphinx/api/qparallelanimationgroup.rst         |     8 +
 doc/sphinx/api/qpauseanimation.rst                 |     8 +
 doc/sphinx/api/qpdfwriter.rst                      |     8 +
 doc/sphinx/api/qpen.rst                            |     8 +
 doc/sphinx/api/qpersistentmodelindex.rst           |     8 +
 doc/sphinx/api/qpicture.rst                        |     8 +
 doc/sphinx/api/qpictureio.rst                      |     8 +
 doc/sphinx/api/qpinchgesture.rst                   |     8 +
 doc/sphinx/api/qpixmap.rst                         |     8 +
 doc/sphinx/api/qpixmapcache.rst                    |     8 +
 doc/sphinx/api/qplaintextdocumentlayout.rst        |     8 +
 doc/sphinx/api/qplaintextedit.rst                  |     8 +
 doc/sphinx/api/qpluginloader.rst                   |     8 +
 doc/sphinx/api/qpoint.rst                          |     8 +
 doc/sphinx/api/qpointf.rst                         |     8 +
 doc/sphinx/api/qpolygon.rst                        |     8 +
 doc/sphinx/api/qpolygonf.rst                       |     8 +
 doc/sphinx/api/qpressurefilter.rst                 |     8 +
 doc/sphinx/api/qpressurereading.rst                |     8 +
 doc/sphinx/api/qpressuresensor.rst                 |     8 +
 doc/sphinx/api/qprintdialog.rst                    |     8 +
 doc/sphinx/api/qprintengine.rst                    |     8 +
 doc/sphinx/api/qprinter.rst                        |     8 +
 doc/sphinx/api/qprinterinfo.rst                    |     8 +
 doc/sphinx/api/qprintpreviewdialog.rst             |     8 +
 doc/sphinx/api/qprintpreviewwidget.rst             |     8 +
 doc/sphinx/api/qprocess.rst                        |     8 +
 doc/sphinx/api/qprocessenvironment.rst             |     8 +
 doc/sphinx/api/qprogressbar.rst                    |     8 +
 doc/sphinx/api/qprogressdialog.rst                 |     8 +
 doc/sphinx/api/qpropertyanimation.rst              |     8 +
 doc/sphinx/api/qproximityfilter.rst                |     8 +
 doc/sphinx/api/qproximityreading.rst               |     8 +
 doc/sphinx/api/qproximitysensor.rst                |     8 +
 doc/sphinx/api/qpushbutton.rst                     |     8 +
 doc/sphinx/api/qqmlabstracturlinterceptor.rst      |     8 +
 doc/sphinx/api/qqmlapplicationengine.rst           |     8 +
 doc/sphinx/api/qqmlcomponent.rst                   |     8 +
 doc/sphinx/api/qqmlcontext.rst                     |     8 +
 doc/sphinx/api/qqmlengine.rst                      |     8 +
 doc/sphinx/api/qqmlerror.rst                       |     8 +
 doc/sphinx/api/qqmlexpression.rst                  |     8 +
 doc/sphinx/api/qqmlextensionplugin.rst             |     8 +
 doc/sphinx/api/qqmlfileselector.rst                |     8 +
 doc/sphinx/api/qqmlimageproviderbase.rst           |     8 +
 doc/sphinx/api/qqmlincubator.rst                   |     8 +
 doc/sphinx/api/qqmlincubatorcontrol.rst            |     8 +
 doc/sphinx/api/qqmllistproperty.rst                |     8 +
 doc/sphinx/api/qqmllistreference.rst               |     8 +
 doc/sphinx/api/qqmlnetworkaccessmanagerfactory.rst |     8 +
 doc/sphinx/api/qqmlparserstatus.rst                |     8 +
 doc/sphinx/api/qqmlproperty.rst                    |     8 +
 doc/sphinx/api/qqmlpropertymap.rst                 |     8 +
 doc/sphinx/api/qqmlpropertyvaluesource.rst         |     8 +
 doc/sphinx/api/qqmlscriptstring.rst                |     8 +
 doc/sphinx/api/qquaternion.rst                     |     8 +
 doc/sphinx/api/qquickframebufferobject.rst         |     8 +
 doc/sphinx/api/qquickimageprovider.rst             |     8 +
 doc/sphinx/api/qquickitem.rst                      |     8 +
 doc/sphinx/api/qquickpainteditem.rst               |     8 +
 doc/sphinx/api/qquicktextdocument.rst              |     8 +
 doc/sphinx/api/qquicktexturefactory.rst            |     8 +
 doc/sphinx/api/qquickview.rst                      |     8 +
 doc/sphinx/api/qquickwidget.rst                    |     8 +
 doc/sphinx/api/qquickwindow.rst                    |     8 +
 doc/sphinx/api/qradialgradient.rst                 |     8 +
 doc/sphinx/api/qradiobutton.rst                    |     8 +
 doc/sphinx/api/qradiodata.rst                      |     8 +
 doc/sphinx/api/qradiotuner.rst                     |     8 +
 doc/sphinx/api/qrawfont.rst                        |     8 +
 doc/sphinx/api/qreadlocker.rst                     |     8 +
 doc/sphinx/api/qreadwritelock.rst                  |     8 +
 doc/sphinx/api/qrect.rst                           |     8 +
 doc/sphinx/api/qrectf.rst                          |     8 +
 doc/sphinx/api/qregexp.rst                         |     8 +
 doc/sphinx/api/qregexpvalidator.rst                |     8 +
 doc/sphinx/api/qregion.rst                         |     8 +
 doc/sphinx/api/qregularexpression.rst              |     8 +
 doc/sphinx/api/qregularexpressionmatch.rst         |     8 +
 doc/sphinx/api/qregularexpressionmatchiterator.rst |     8 +
 doc/sphinx/api/qregularexpressionvalidator.rst     |     8 +
 doc/sphinx/api/qresizeevent.rst                    |     8 +
 doc/sphinx/api/qresource.rst                       |     8 +
 doc/sphinx/api/qrotationfilter.rst                 |     8 +
 doc/sphinx/api/qrotationreading.rst                |     8 +
 doc/sphinx/api/qrotationsensor.rst                 |     8 +
 doc/sphinx/api/qrubberband.rst                     |     8 +
 doc/sphinx/api/qrunnable.rst                       |     8 +
 doc/sphinx/api/qsavefile.rst                       |     8 +
 doc/sphinx/api/qscreen.rst                         |     8 +
 doc/sphinx/api/qscrollarea.rst                     |     8 +
 doc/sphinx/api/qscrollbar.rst                      |     8 +
 doc/sphinx/api/qscroller.rst                       |     8 +
 doc/sphinx/api/qscrollerproperties.rst             |     8 +
 doc/sphinx/api/qscrollevent.rst                    |     8 +
 doc/sphinx/api/qscrollprepareevent.rst             |     8 +
 doc/sphinx/api/qsemaphore.rst                      |     8 +
 doc/sphinx/api/qsensor.rst                         |     8 +
 doc/sphinx/api/qsensorfilter.rst                   |     8 +
 doc/sphinx/api/qsensorreading.rst                  |     8 +
 doc/sphinx/api/qsequentialanimationgroup.rst       |     8 +
 doc/sphinx/api/qserialport.rst                     |     8 +
 doc/sphinx/api/qserialportinfo.rst                 |     8 +
 doc/sphinx/api/qsessionmanager.rst                 |     8 +
 doc/sphinx/api/qsettings.rst                       |     8 +
 doc/sphinx/api/qsgbasicgeometrynode.rst            |     8 +
 doc/sphinx/api/qsgclipnode.rst                     |     8 +
 doc/sphinx/api/qsgdynamictexture.rst               |     8 +
 doc/sphinx/api/qsgflatcolormaterial.rst            |     8 +
 doc/sphinx/api/qsggeometry.rst                     |     8 +
 doc/sphinx/api/qsggeometrynode.rst                 |     8 +
 doc/sphinx/api/qsgmaterial.rst                     |     8 +
 doc/sphinx/api/qsgmaterialshader.rst               |     8 +
 doc/sphinx/api/qsgmaterialtype.rst                 |     8 +
 doc/sphinx/api/qsgnode.rst                         |     8 +
 doc/sphinx/api/qsgopacitynode.rst                  |     8 +
 doc/sphinx/api/qsgopaquetexturematerial.rst        |     8 +
 doc/sphinx/api/qsgsimplerectnode.rst               |     8 +
 doc/sphinx/api/qsgsimpletexturenode.rst            |     8 +
 doc/sphinx/api/qsgtexture.rst                      |     8 +
 doc/sphinx/api/qsgtexturematerial.rst              |     8 +
 doc/sphinx/api/qsgtextureprovider.rst              |     8 +
 doc/sphinx/api/qsgtransformnode.rst                |     8 +
 doc/sphinx/api/qsgvertexcolormaterial.rst          |     8 +
 doc/sphinx/api/qsharedmemory.rst                   |     8 +
 doc/sphinx/api/qshortcut.rst                       |     8 +
 doc/sphinx/api/qshortcutevent.rst                  |     8 +
 doc/sphinx/api/qshowevent.rst                      |     8 +
 doc/sphinx/api/qsignalblocker.rst                  |     8 +
 doc/sphinx/api/qsignalmapper.rst                   |     8 +
 doc/sphinx/api/qsignalspy.rst                      |     8 +
 doc/sphinx/api/qsignaltransition.rst               |     8 +
 doc/sphinx/api/qsimplexmlnodemodel.rst             |     8 +
 doc/sphinx/api/qsize.rst                           |     8 +
 doc/sphinx/api/qsizef.rst                          |     8 +
 doc/sphinx/api/qsizegrip.rst                       |     8 +
 doc/sphinx/api/qsizepolicy.rst                     |     8 +
 doc/sphinx/api/qslider.rst                         |     8 +
 doc/sphinx/api/qsocketnotifier.rst                 |     8 +
 doc/sphinx/api/qsortfilterproxymodel.rst           |     8 +
 doc/sphinx/api/qsound.rst                          |     8 +
 doc/sphinx/api/qsoundeffect.rst                    |     8 +
 doc/sphinx/api/qsourcelocation.rst                 |     8 +
 doc/sphinx/api/qspaceritem.rst                     |     8 +
 doc/sphinx/api/qspinbox.rst                        |     8 +
 doc/sphinx/api/qsplashscreen.rst                   |     8 +
 doc/sphinx/api/qsplitter.rst                       |     8 +
 doc/sphinx/api/qsplitterhandle.rst                 |     8 +
 doc/sphinx/api/qsql.rst                            |     8 +
 doc/sphinx/api/qsqldatabase.rst                    |     8 +
 doc/sphinx/api/qsqldriver.rst                      |     8 +
 doc/sphinx/api/qsqldrivercreatorbase.rst           |     8 +
 doc/sphinx/api/qsqlerror.rst                       |     8 +
 doc/sphinx/api/qsqlfield.rst                       |     8 +
 doc/sphinx/api/qsqlindex.rst                       |     8 +
 doc/sphinx/api/qsqlquery.rst                       |     8 +
 doc/sphinx/api/qsqlquerymodel.rst                  |     8 +
 doc/sphinx/api/qsqlrecord.rst                      |     8 +
 doc/sphinx/api/qsqlrelation.rst                    |     8 +
 doc/sphinx/api/qsqlrelationaldelegate.rst          |     8 +
 doc/sphinx/api/qsqlrelationaltablemodel.rst        |     8 +
 doc/sphinx/api/qsqlresult.rst                      |     8 +
 doc/sphinx/api/qsqltablemodel.rst                  |     8 +
 doc/sphinx/api/qssl.rst                            |     8 +
 doc/sphinx/api/qsslcertificate.rst                 |     8 +
 doc/sphinx/api/qsslcertificateextension.rst        |     8 +
 doc/sphinx/api/qsslcipher.rst                      |     8 +
 doc/sphinx/api/qsslconfiguration.rst               |     8 +
 doc/sphinx/api/qsslerror.rst                       |     8 +
 doc/sphinx/api/qsslkey.rst                         |     8 +
 doc/sphinx/api/qsslsocket.rst                      |     8 +
 doc/sphinx/api/qstackedlayout.rst                  |     8 +
 doc/sphinx/api/qstackedwidget.rst                  |     8 +
 doc/sphinx/api/qstandarditem.rst                   |     8 +
 doc/sphinx/api/qstandarditemmodel.rst              |     8 +
 doc/sphinx/api/qstandardpaths.rst                  |     8 +
 doc/sphinx/api/qstate.rst                          |     8 +
 doc/sphinx/api/qstatemachine.rst                   |     8 +
 doc/sphinx/api/qstatictext.rst                     |     8 +
 doc/sphinx/api/qstatusbar.rst                      |     8 +
 doc/sphinx/api/qstatustipevent.rst                 |     8 +
 doc/sphinx/api/qstringlistmodel.rst                |     8 +
 doc/sphinx/api/qstyle.rst                          |     8 +
 doc/sphinx/api/qstyleditemdelegate.rst             |     8 +
 doc/sphinx/api/qstylefactory.rst                   |     8 +
 doc/sphinx/api/qstylehintreturn.rst                |     8 +
 doc/sphinx/api/qstylehintreturnmask.rst            |     8 +
 doc/sphinx/api/qstylehintreturnvariant.rst         |     8 +
 doc/sphinx/api/qstylehints.rst                     |     8 +
 doc/sphinx/api/qstyleoption.rst                    |     8 +
 doc/sphinx/api/qstyleoptionbutton.rst              |     8 +
 doc/sphinx/api/qstyleoptioncombobox.rst            |     8 +
 doc/sphinx/api/qstyleoptioncomplex.rst             |     8 +
 doc/sphinx/api/qstyleoptiondockwidget.rst          |     8 +
 doc/sphinx/api/qstyleoptionfocusrect.rst           |     8 +
 doc/sphinx/api/qstyleoptionframe.rst               |     8 +
 doc/sphinx/api/qstyleoptiongraphicsitem.rst        |     8 +
 doc/sphinx/api/qstyleoptiongroupbox.rst            |     8 +
 doc/sphinx/api/qstyleoptionheader.rst              |     8 +
 doc/sphinx/api/qstyleoptionmenuitem.rst            |     8 +
 doc/sphinx/api/qstyleoptionprogressbar.rst         |     8 +
 doc/sphinx/api/qstyleoptionrubberband.rst          |     8 +
 doc/sphinx/api/qstyleoptionsizegrip.rst            |     8 +
 doc/sphinx/api/qstyleoptionslider.rst              |     8 +
 doc/sphinx/api/qstyleoptionspinbox.rst             |     8 +
 doc/sphinx/api/qstyleoptiontab.rst                 |     8 +
 doc/sphinx/api/qstyleoptiontabbarbase.rst          |     8 +
 doc/sphinx/api/qstyleoptiontabwidgetframe.rst      |     8 +
 doc/sphinx/api/qstyleoptiontitlebar.rst            |     8 +
 doc/sphinx/api/qstyleoptiontoolbar.rst             |     8 +
 doc/sphinx/api/qstyleoptiontoolbox.rst             |     8 +
 doc/sphinx/api/qstyleoptiontoolbutton.rst          |     8 +
 doc/sphinx/api/qstyleoptionviewitem.rst            |     8 +
 doc/sphinx/api/qstylepainter.rst                   |     8 +
 doc/sphinx/api/qsurface.rst                        |     8 +
 doc/sphinx/api/qsurfaceformat.rst                  |     8 +
 doc/sphinx/api/qsvggenerator.rst                   |     8 +
 doc/sphinx/api/qsvgrenderer.rst                    |     8 +
 doc/sphinx/api/qsvgwidget.rst                      |     8 +
 doc/sphinx/api/qswipegesture.rst                   |     8 +
 doc/sphinx/api/qsyntaxhighlighter.rst              |     8 +
 doc/sphinx/api/qsysinfo.rst                        |     8 +
 doc/sphinx/api/qsystemsemaphore.rst                |     8 +
 doc/sphinx/api/qsystemtrayicon.rst                 |     8 +
 doc/sphinx/api/qt.rst                              |     8 +
 doc/sphinx/api/qtabbar.rst                         |     8 +
 doc/sphinx/api/qtabletevent.rst                    |     8 +
 doc/sphinx/api/qtableview.rst                      |     8 +
 doc/sphinx/api/qtablewidget.rst                    |     8 +
 doc/sphinx/api/qtablewidgetitem.rst                |     8 +
 doc/sphinx/api/qtablewidgetselectionrange.rst      |     8 +
 doc/sphinx/api/qtabwidget.rst                      |     8 +
 doc/sphinx/api/qtapandholdgesture.rst              |     8 +
 doc/sphinx/api/qtapfilter.rst                      |     8 +
 doc/sphinx/api/qtapgesture.rst                     |     8 +
 doc/sphinx/api/qtapreading.rst                     |     8 +
 doc/sphinx/api/qtapsensor.rst                      |     8 +
 doc/sphinx/api/qtcpserver.rst                      |     8 +
 doc/sphinx/api/qtcpsocket.rst                      |     8 +
 doc/sphinx/api/qtemporarydir.rst                   |     8 +
 doc/sphinx/api/qtemporaryfile.rst                  |     8 +
 doc/sphinx/api/qtest.rst                           |     8 +
 doc/sphinx/api/qtextblock.rst                      |     8 +
 doc/sphinx/api/qtextblockformat.rst                |     8 +
 doc/sphinx/api/qtextblockgroup.rst                 |     8 +
 doc/sphinx/api/qtextblockuserdata.rst              |     8 +
 doc/sphinx/api/qtextboundaryfinder.rst             |     8 +
 doc/sphinx/api/qtextbrowser.rst                    |     8 +
 doc/sphinx/api/qtextcharformat.rst                 |     8 +
 doc/sphinx/api/qtextcodec.rst                      |     8 +
 doc/sphinx/api/qtextcursor.rst                     |     8 +
 doc/sphinx/api/qtextdecoder.rst                    |     8 +
 doc/sphinx/api/qtextdocument.rst                   |     8 +
 doc/sphinx/api/qtextdocumentfragment.rst           |     8 +
 doc/sphinx/api/qtextdocumentwriter.rst             |     8 +
 doc/sphinx/api/qtextedit.rst                       |     8 +
 doc/sphinx/api/qtextencoder.rst                    |     8 +
 doc/sphinx/api/qtextformat.rst                     |     8 +
 doc/sphinx/api/qtextfragment.rst                   |     8 +
 doc/sphinx/api/qtextframe.rst                      |     8 +
 doc/sphinx/api/qtextframeformat.rst                |     8 +
 doc/sphinx/api/qtextimageformat.rst                |     8 +
 doc/sphinx/api/qtextinlineobject.rst               |     8 +
 doc/sphinx/api/qtextitem.rst                       |     8 +
 doc/sphinx/api/qtextlayout.rst                     |     8 +
 doc/sphinx/api/qtextlength.rst                     |     8 +
 doc/sphinx/api/qtextline.rst                       |     8 +
 doc/sphinx/api/qtextlist.rst                       |     8 +
 doc/sphinx/api/qtextlistformat.rst                 |     8 +
 doc/sphinx/api/qtextobject.rst                     |     8 +
 doc/sphinx/api/qtextobjectinterface.rst            |     8 +
 doc/sphinx/api/qtextoption.rst                     |     8 +
 doc/sphinx/api/qtextstream.rst                     |     8 +
 doc/sphinx/api/qtextstreammanipulator.rst          |     8 +
 doc/sphinx/api/qtexttable.rst                      |     8 +
 doc/sphinx/api/qtexttablecell.rst                  |     8 +
 doc/sphinx/api/qtexttablecellformat.rst            |     8 +
 doc/sphinx/api/qtexttableformat.rst                |     8 +
 doc/sphinx/api/qthread.rst                         |     8 +
 doc/sphinx/api/qthreadpool.rst                     |     8 +
 doc/sphinx/api/qtiltfilter.rst                     |     8 +
 doc/sphinx/api/qtiltreading.rst                    |     8 +
 doc/sphinx/api/qtiltsensor.rst                     |     8 +
 doc/sphinx/api/qtime.rst                           |     8 +
 doc/sphinx/api/qtimeedit.rst                       |     8 +
 doc/sphinx/api/qtimeline.rst                       |     8 +
 doc/sphinx/api/qtimer.rst                          |     8 +
 doc/sphinx/api/qtimerevent.rst                     |     8 +
 doc/sphinx/api/qtimezone.rst                       |     8 +
 doc/sphinx/api/qtoolbar.rst                        |     8 +
 doc/sphinx/api/qtoolbox.rst                        |     8 +
 doc/sphinx/api/qtoolbutton.rst                     |     8 +
 doc/sphinx/api/qtooltip.rst                        |     8 +
 doc/sphinx/api/qtouchdevice.rst                    |     8 +
 doc/sphinx/api/qtouchevent.rst                     |     8 +
 doc/sphinx/api/qtransform.rst                      |     8 +
 doc/sphinx/api/qtranslator.rst                     |     8 +
 doc/sphinx/api/qtreeview.rst                       |     8 +
 doc/sphinx/api/qtreewidget.rst                     |     8 +
 doc/sphinx/api/qtreewidgetitem.rst                 |     8 +
 doc/sphinx/api/qtreewidgetitemiterator.rst         |     8 +
 doc/sphinx/api/qtwin.rst                           |     8 +
 doc/sphinx/api/qudpsocket.rst                      |     8 +
 doc/sphinx/api/qundocommand.rst                    |     8 +
 doc/sphinx/api/qundogroup.rst                      |     8 +
 doc/sphinx/api/qundostack.rst                      |     8 +
 doc/sphinx/api/qundoview.rst                       |     8 +
 doc/sphinx/api/qurl.rst                            |     8 +
 doc/sphinx/api/qurlquery.rst                       |     8 +
 doc/sphinx/api/quuid.rst                           |     8 +
 doc/sphinx/api/qvalidator.rst                      |     8 +
 doc/sphinx/api/qvariant.rst                        |     8 +
 doc/sphinx/api/qvariantanimation.rst               |     8 +
 doc/sphinx/api/qvboxlayout.rst                     |     8 +
 doc/sphinx/api/qvector2d.rst                       |     8 +
 doc/sphinx/api/qvector3d.rst                       |     8 +
 doc/sphinx/api/qvector4d.rst                       |     8 +
 doc/sphinx/api/qvideoencodersettings.rst           |     8 +
 doc/sphinx/api/qvideoframe.rst                     |     8 +
 doc/sphinx/api/qvideoprobe.rst                     |     8 +
 doc/sphinx/api/qvideosurfaceformat.rst             |     8 +
 doc/sphinx/api/qvideowidget.rst                    |     8 +
 doc/sphinx/api/qwaitcondition.rst                  |     8 +
 doc/sphinx/api/qwebdatabase.rst                    |     8 +
 doc/sphinx/api/qwebelement.rst                     |     8 +
 doc/sphinx/api/qwebelementcollection.rst           |     8 +
 doc/sphinx/api/qwebframe.rst                       |     8 +
 doc/sphinx/api/qwebhistory.rst                     |     8 +
 doc/sphinx/api/qwebhistoryinterface.rst            |     8 +
 doc/sphinx/api/qwebhistoryitem.rst                 |     8 +
 doc/sphinx/api/qwebhittestresult.rst               |     8 +
 doc/sphinx/api/qwebinspector.rst                   |     8 +
 doc/sphinx/api/qwebpage.rst                        |     8 +
 doc/sphinx/api/qwebpluginfactory.rst               |     8 +
 doc/sphinx/api/qwebsecurityorigin.rst              |     8 +
 doc/sphinx/api/qwebsettings.rst                    |     8 +
 doc/sphinx/api/qwebsocket.rst                      |     8 +
 doc/sphinx/api/qwebsocketcorsauthenticator.rst     |     8 +
 doc/sphinx/api/qwebsocketprotocol.rst              |     8 +
 doc/sphinx/api/qwebsocketserver.rst                |     8 +
 doc/sphinx/api/qwebview.rst                        |     8 +
 doc/sphinx/api/qwhatsthis.rst                      |     8 +
 doc/sphinx/api/qwhatsthisclickedevent.rst          |     8 +
 doc/sphinx/api/qwheelevent.rst                     |     8 +
 doc/sphinx/api/qwidget.rst                         |     8 +
 doc/sphinx/api/qwidgetaction.rst                   |     8 +
 doc/sphinx/api/qwidgetitem.rst                     |     8 +
 doc/sphinx/api/qwindow.rst                         |     8 +
 doc/sphinx/api/qwindowstatechangeevent.rst         |     8 +
 doc/sphinx/api/qwinjumplist.rst                    |     8 +
 doc/sphinx/api/qwinjumplistcategory.rst            |     8 +
 doc/sphinx/api/qwinjumplistitem.rst                |     8 +
 doc/sphinx/api/qwintaskbarbutton.rst               |     8 +
 doc/sphinx/api/qwintaskbarprogress.rst             |     8 +
 doc/sphinx/api/qwinthumbnailtoolbar.rst            |     8 +
 doc/sphinx/api/qwinthumbnailtoolbutton.rst         |     8 +
 doc/sphinx/api/qwizard.rst                         |     8 +
 doc/sphinx/api/qwizardpage.rst                     |     8 +
 doc/sphinx/api/qwritelocker.rst                    |     8 +
 doc/sphinx/api/qx11info.rst                        |     8 +
 doc/sphinx/api/qxmlformatter.rst                   |     8 +
 doc/sphinx/api/qxmlitem.rst                        |     8 +
 doc/sphinx/api/qxmlname.rst                        |     8 +
 doc/sphinx/api/qxmlnamepool.rst                    |     8 +
 doc/sphinx/api/qxmlnodemodelindex.rst              |     8 +
 doc/sphinx/api/qxmlquery.rst                       |     8 +
 doc/sphinx/api/qxmlresultitems.rst                 |     8 +
 doc/sphinx/api/qxmlschema.rst                      |     8 +
 doc/sphinx/api/qxmlschemavalidator.rst             |     8 +
 doc/sphinx/api/qxmlserializer.rst                  |     8 +
 doc/sphinx/api/qxmlstreamattribute.rst             |     8 +
 doc/sphinx/api/qxmlstreamattributes.rst            |     8 +
 doc/sphinx/api/qxmlstreamentitydeclaration.rst     |     8 +
 doc/sphinx/api/qxmlstreamentityresolver.rst        |     8 +
 doc/sphinx/api/qxmlstreamnamespacedeclaration.rst  |     8 +
 doc/sphinx/api/qxmlstreamnotationdeclaration.rst   |     8 +
 doc/sphinx/api/qxmlstreamreader.rst                |     8 +
 doc/sphinx/api/qxmlstreamwriter.rst                |     8 +
 doc/sphinx/api_metadata.cfg                        |   886 ++
 doc/sphinx/class_reference.rst                     |    12 +
 doc/sphinx/conf.py                                 |   200 +
 doc/sphinx/dbus.rst                                |    90 +
 doc/sphinx/deploy_commercial.rst                   |    21 +
 doc/sphinx/designer.rst                            |   374 +
 doc/sphinx/extension_api.rst                       |   212 +
 doc/sphinx/gotchas.rst                             |   167 +
 doc/sphinx/i18n.rst                                |    95 +
 doc/sphinx/incompatibilities.rst                   |    41 +
 doc/sphinx/index.rst                               |    29 +
 doc/sphinx/installation.rst                        |   418 +
 doc/sphinx/introduction.rst                        |   331 +
 doc/sphinx/metaobjects.rst                         |    59 +
 doc/sphinx/multiinheritance.rst                    |   111 +
 doc/sphinx/opengl.rst                              |    20 +
 doc/sphinx/pickle.rst                              |    22 +
 doc/sphinx/pyqt4_differences.rst                   |   292 +
 doc/sphinx/pyqt_qsettings.rst                      |    70 +
 doc/sphinx/pyqt_qvariant.rst                       |    40 +
 doc/sphinx/python_shell.rst                        |    26 +
 doc/sphinx/qml.rst                                 |   294 +
 doc/sphinx/qt_interfaces.rst                       |    17 +
 doc/sphinx/qt_properties.rst                       |    94 +
 doc/sphinx/resources.rst                           |    23 +
 doc/sphinx/signals_slots.rst                       |   349 +
 doc/sphinx/static/default.css                      |   252 +
 doc/sphinx/static/logo.png                         |   Bin 0 -> 3979 bytes
 doc/sphinx/static/logo_tn.ico                      |   Bin 0 -> 1150 bytes
 examples/README                                    |    25 +
 examples/activeqt/README                           |    24 +
 examples/activeqt/webbrowser/icons/image0.xpm      |    38 +
 examples/activeqt/webbrowser/icons/image1.xpm      |   177 +
 examples/activeqt/webbrowser/icons/image2.xpm      |   177 +
 examples/activeqt/webbrowser/icons/image3.xpm      |    30 +
 examples/activeqt/webbrowser/icons/image4.xpm      |    38 +
 examples/activeqt/webbrowser/icons/image5.xpm      |   246 +
 examples/activeqt/webbrowser/icons/image6.xpm      |   190 +
 examples/activeqt/webbrowser/mainwindow.qrc        |    11 +
 examples/activeqt/webbrowser/mainwindow.ui         |   215 +
 examples/activeqt/webbrowser/mainwindow_rc.py      |   863 ++
 examples/activeqt/webbrowser/ui_mainwindow.py      |   143 +
 examples/activeqt/webbrowser/webbrowser.py         |   147 +
 examples/animation/README                          |    24 +
 examples/animation/animatedtiles/animatedtiles.py  |   263 +
 examples/animation/animatedtiles/animatedtiles.qrc |    11 +
 .../animation/animatedtiles/animatedtiles_rc.py    |  6103 ++++++++++
 .../animatedtiles/images/Time-For-Lunch-2.jpg      |   Bin 0 -> 32471 bytes
 .../animation/animatedtiles/images/centered.png    |   Bin 0 -> 892 bytes
 .../animation/animatedtiles/images/ellipse.png     |   Bin 0 -> 10767 bytes
 .../animation/animatedtiles/images/figure8.png     |   Bin 0 -> 14050 bytes
 .../animation/animatedtiles/images/kinetic.png     |   Bin 0 -> 6776 bytes
 examples/animation/animatedtiles/images/random.png |   Bin 0 -> 14969 bytes
 examples/animation/animatedtiles/images/tile.png   |   Bin 0 -> 16337 bytes
 .../appchooser/accessories-dictionary.png          |   Bin 0 -> 5396 bytes
 examples/animation/appchooser/akregator.png        |   Bin 0 -> 4873 bytes
 examples/animation/appchooser/appchooser.py        |   139 +
 examples/animation/appchooser/appchooser.qrc       |     8 +
 examples/animation/appchooser/appchooser_rc.py     |  1423 +++
 examples/animation/appchooser/digikam.png          |   Bin 0 -> 3334 bytes
 examples/animation/appchooser/k3b.png              |   Bin 0 -> 8220 bytes
 examples/animation/easing/easing.py                |   267 +
 examples/animation/easing/easing.qrc               |     5 +
 examples/animation/easing/easing_rc.py             |   362 +
 examples/animation/easing/form.ui                  |   270 +
 examples/animation/easing/images/qt-logo.png       |   Bin 0 -> 5149 bytes
 examples/animation/easing/ui_form.py               |   136 +
 examples/animation/moveblocks.py                   |   233 +
 .../animation/states/accessories-dictionary.png    |   Bin 0 -> 5396 bytes
 examples/animation/states/akregator.png            |   Bin 0 -> 4873 bytes
 examples/animation/states/digikam.png              |   Bin 0 -> 3334 bytes
 examples/animation/states/help-browser.png         |   Bin 0 -> 6984 bytes
 examples/animation/states/k3b.png                  |   Bin 0 -> 8220 bytes
 examples/animation/states/kchart.png               |   Bin 0 -> 4887 bytes
 examples/animation/states/states.py                |   272 +
 examples/animation/states/states.qrc               |    10 +
 examples/animation/states/states_rc.py             |  2180 ++++
 examples/animation/stickman/animations/chilling    |   Bin 0 -> 6508 bytes
 examples/animation/stickman/animations/dancing     |   Bin 0 -> 2348 bytes
 examples/animation/stickman/animations/dead        |   Bin 0 -> 268 bytes
 examples/animation/stickman/animations/jumping     |   Bin 0 -> 1308 bytes
 examples/animation/stickman/stickman.py            |   657 +
 examples/animation/stickman/stickman.qrc           |     8 +
 examples/animation/stickman/stickman_rc.py         |   714 ++
 examples/dbus/chat/chat.py                         |   200 +
 examples/dbus/chat/chatmainwindow.ui               |   185 +
 examples/dbus/chat/chatsetnickname.ui              |   149 +
 examples/dbus/chat/ui_chatmainwindow.py            |    99 +
 examples/dbus/chat/ui_chatsetnickname.py           |    68 +
 examples/dbus/listnames.py                         |    98 +
 examples/dbus/pingpong/ping.py                     |    75 +
 examples/dbus/pingpong/pong.py                     |    77 +
 examples/dbus/remotecontrolledcar/car/car.py       |   198 +
 .../remotecontrolledcar/controller/controller.py   |   111 +
 .../remotecontrolledcar/controller/controller.ui   |    64 +
 .../controller/ui_controller.py                    |    48 +
 examples/designer/README                           |    23 +
 examples/designer/calculatorform/calculatorform.py |    74 +
 examples/designer/calculatorform/calculatorform.ui |   284 +
 .../designer/calculatorform/ui_calculatorform.py   |    94 +
 examples/designer/plugins/plugins.py               |    86 +
 .../designer/plugins/python/analogclockplugin.py   |   195 +
 .../designer/plugins/python/bubbleswidgetplugin.py |   194 +
 .../designer/plugins/python/counterlabelplugin.py  |   105 +
 .../designer/plugins/python/datetimeeditplugin.py  |   126 +
 .../designer/plugins/python/helloglwidgetplugin.py |   105 +
 .../plugins/python/multipagewidgetplugin.py        |   142 +
 .../designer/plugins/python/polygonwidgetplugin.py |   175 +
 examples/designer/plugins/python/pydemoplugin.py   |   168 +
 .../designer/plugins/python/pythonconsoleplugin.py |   143 +
 examples/designer/plugins/widgets/analogclock.py   |   189 +
 examples/designer/plugins/widgets/bubbleswidget.py |   335 +
 examples/designer/plugins/widgets/counterlabel.py  |   177 +
 examples/designer/plugins/widgets/datetimeedit.py  |   371 +
 examples/designer/plugins/widgets/helloglwidget.py |   254 +
 .../designer/plugins/widgets/multipagewidget.py    |   104 +
 examples/designer/plugins/widgets/polygonwidget.py |   192 +
 examples/designer/plugins/widgets/pydemo.py        |   156 +
 .../plugins/widgets/pythonconsolewidget.py         |    98 +
 examples/desktop/README                            |    27 +
 examples/desktop/screenshot.py                     |   173 +
 examples/desktop/systray/images/bad.png            |   Bin 0 -> 2496 bytes
 examples/desktop/systray/images/heart.png          |   Bin 0 -> 25780 bytes
 examples/desktop/systray/images/trash.png          |   Bin 0 -> 12128 bytes
 examples/desktop/systray/systray.py                |   237 +
 examples/desktop/systray/systray.qrc               |     7 +
 examples/desktop/systray/systray_rc.py             |  2580 ++++
 examples/dialogs/README                            |    26 +
 examples/dialogs/classwizard/classwizard.py        |   403 +
 examples/dialogs/classwizard/classwizard.qrc       |    11 +
 examples/dialogs/classwizard/classwizard_rc.py     |  3887 ++++++
 examples/dialogs/classwizard/images/background.png |   Bin 0 -> 22578 bytes
 examples/dialogs/classwizard/images/banner.png     |   Bin 0 -> 3947 bytes
 examples/dialogs/classwizard/images/logo1.png      |   Bin 0 -> 1619 bytes
 examples/dialogs/classwizard/images/logo2.png      |   Bin 0 -> 1619 bytes
 examples/dialogs/classwizard/images/logo3.png      |   Bin 0 -> 1619 bytes
 examples/dialogs/classwizard/images/watermark1.png |   Bin 0 -> 14516 bytes
 examples/dialogs/classwizard/images/watermark2.png |   Bin 0 -> 14912 bytes
 examples/dialogs/configdialog/configdialog.py      |   244 +
 examples/dialogs/configdialog/configdialog.qrc     |     7 +
 examples/dialogs/configdialog/configdialog_rc.py   |  1157 ++
 examples/dialogs/configdialog/images/config.png    |   Bin 0 -> 7059 bytes
 examples/dialogs/configdialog/images/query.png     |   Bin 0 -> 2269 bytes
 examples/dialogs/configdialog/images/update.png    |   Bin 0 -> 8296 bytes
 examples/dialogs/extension.py                      |   117 +
 examples/dialogs/findfiles.py                      |   215 +
 examples/dialogs/standarddialogs.py                |   322 +
 examples/dialogs/tabdialog.py                      |   205 +
 examples/dialogs/trivialwizard.py                  |   114 +
 examples/draganddrop/README                        |    26 +
 .../draganddrop/delayedencoding/delayedencoding.py |   136 +
 .../delayedencoding/delayedencoding.qrc            |     6 +
 .../delayedencoding/delayedencoding_rc.py          |   278 +
 .../draganddrop/delayedencoding/images/drag.png    |   Bin 0 -> 977 bytes
 .../draganddrop/delayedencoding/images/example.svg |    59 +
 .../draganddrop/draggableicons/draggableicons.py   |   163 +
 .../draganddrop/draggableicons/draggableicons.qrc  |     7 +
 .../draggableicons/draggableicons_rc.py            |   620 +
 .../draganddrop/draggableicons/images/boat.png     |   Bin 0 -> 2772 bytes
 examples/draganddrop/draggableicons/images/car.png |   Bin 0 -> 2963 bytes
 .../draganddrop/draggableicons/images/house.png    |   Bin 0 -> 3292 bytes
 .../draganddrop/draggabletext/draggabletext.py     |   155 +
 .../draganddrop/draggabletext/draggabletext.qrc    |     5 +
 .../draganddrop/draggabletext/draggabletext_rc.py  |    56 +
 examples/draganddrop/draggabletext/words.txt       |    41 +
 examples/draganddrop/dropsite.py                   |   180 +
 .../draganddrop/fridgemagnets/fridgemagnets.py     |   196 +
 .../draganddrop/fridgemagnets/fridgemagnets.qrc    |     5 +
 .../draganddrop/fridgemagnets/fridgemagnets_rc.py  |    58 +
 examples/draganddrop/fridgemagnets/words.txt       |    48 +
 examples/draganddrop/puzzle/example.jpg            |   Bin 0 -> 42654 bytes
 examples/draganddrop/puzzle/puzzle.py              |   367 +
 examples/draganddrop/puzzle/puzzle.qrc             |     5 +
 examples/draganddrop/puzzle/puzzle_rc.py           |  2706 +++++
 examples/effects/README                            |    25 +
 examples/effects/lighting.py                       |   149 +
 examples/graphicsview/README                       |    26 +
 examples/graphicsview/anchorlayout.py              |   130 +
 .../graphicsview/collidingmice/collidingmice.py    |   221 +
 .../graphicsview/collidingmice/images/cheese.jpg   |   Bin 0 -> 3029 bytes
 examples/graphicsview/collidingmice/mice.qrc       |     5 +
 examples/graphicsview/collidingmice/mice_rc.py     |   230 +
 examples/graphicsview/diagramscene/diagramscene.py |   832 ++
 .../graphicsview/diagramscene/diagramscene.qrc     |    20 +
 .../graphicsview/diagramscene/diagramscene_rc.py   |   404 +
 .../diagramscene/images/background1.png            |   Bin 0 -> 112 bytes
 .../diagramscene/images/background2.png            |   Bin 0 -> 114 bytes
 .../diagramscene/images/background3.png            |   Bin 0 -> 116 bytes
 .../diagramscene/images/background4.png            |   Bin 0 -> 96 bytes
 examples/graphicsview/diagramscene/images/bold.png |   Bin 0 -> 274 bytes
 .../diagramscene/images/bringtofront.png           |   Bin 0 -> 293 bytes
 .../graphicsview/diagramscene/images/delete.png    |   Bin 0 -> 831 bytes
 .../graphicsview/diagramscene/images/floodfill.png |   Bin 0 -> 282 bytes
 .../graphicsview/diagramscene/images/italic.png    |   Bin 0 -> 247 bytes
 .../graphicsview/diagramscene/images/linecolor.png |   Bin 0 -> 145 bytes
 .../diagramscene/images/linepointer.png            |   Bin 0 -> 141 bytes
 .../graphicsview/diagramscene/images/pointer.png   |   Bin 0 -> 173 bytes
 .../diagramscene/images/sendtoback.png             |   Bin 0 -> 318 bytes
 .../diagramscene/images/textpointer.png            |   Bin 0 -> 753 bytes
 .../graphicsview/diagramscene/images/underline.png |   Bin 0 -> 250 bytes
 .../graphicsview/dragdroprobot/dragdroprobot.py    |   289 +
 .../graphicsview/dragdroprobot/dragdroprobot.qrc   |     5 +
 .../graphicsview/dragdroprobot/dragdroprobot_rc.py |   976 ++
 .../graphicsview/dragdroprobot/images/head.png     |   Bin 0 -> 14972 bytes
 examples/graphicsview/elasticnodes.py              |   430 +
 .../embeddeddialogs/No-Ones-Laughing-3.jpg         |   Bin 0 -> 30730 bytes
 .../graphicsview/embeddeddialogs/embeddeddialog.py |    62 +
 .../graphicsview/embeddeddialogs/embeddeddialog.ui |    87 +
 .../embeddeddialogs/embeddeddialogs.py             |   237 +
 .../embeddeddialogs/embeddeddialogs.qrc            |     5 +
 .../embeddeddialogs/embeddeddialogs_rc.py          |  1957 +++
 examples/graphicsview/padnavigator/form.ui         |   208 +
 .../padnavigator/images/artsfftscope.png           |   Bin 0 -> 1294 bytes
 .../padnavigator/images/blue_angle_swirl.jpg       |   Bin 0 -> 11826 bytes
 .../padnavigator/images/kontact_contacts.png       |   Bin 0 -> 4382 bytes
 .../padnavigator/images/kontact_journal.png        |   Bin 0 -> 3261 bytes
 .../padnavigator/images/kontact_mail.png           |   Bin 0 -> 3202 bytes
 .../padnavigator/images/kontact_notes.png          |   Bin 0 -> 3893 bytes
 .../padnavigator/images/kopeteavailable.png        |   Bin 0 -> 2380 bytes
 .../padnavigator/images/metacontact_online.png     |   Bin 0 -> 2545 bytes
 .../graphicsview/padnavigator/images/minitools.png |   Bin 0 -> 2087 bytes
 examples/graphicsview/padnavigator/padnavigator.py |   398 +
 .../graphicsview/padnavigator/padnavigator.qrc     |    14 +
 .../graphicsview/padnavigator/padnavigator_rc.py   |  3029 +++++
 examples/graphicsview/padnavigator/ui_form.py      |   109 +
 examples/ipc/README                                |    21 +
 examples/ipc/localfortuneclient.py                 |   155 +
 examples/ipc/localfortuneserver.py                 |   122 +
 examples/ipc/sharedmemory/dialog.py                |    39 +
 examples/ipc/sharedmemory/dialog.ui                |    47 +
 examples/ipc/sharedmemory/image.png                |   Bin 0 -> 10199 bytes
 examples/ipc/sharedmemory/qt.png                   |   Bin 0 -> 2383 bytes
 examples/ipc/sharedmemory/sharedmemory.py          |   181 +
 examples/itemviews/README                          |    25 +
 examples/itemviews/basicsortfiltermodel.py         |   226 +
 examples/itemviews/chart/chart.py                  |   582 +
 examples/itemviews/chart/chart.qrc                 |     5 +
 examples/itemviews/chart/chart_rc.py               |    65 +
 examples/itemviews/chart/mydata.cht                |     8 +
 examples/itemviews/chart/qtdata.cht                |    14 +
 examples/itemviews/coloreditorfactory.py           |   128 +
 examples/itemviews/combowidgetmapper.py            |   136 +
 examples/itemviews/customsortfiltermodel.py        |   248 +
 examples/itemviews/dirview.py                      |    65 +
 examples/itemviews/editabletreemodel/default.txt   |    40 +
 .../editabletreemodel/editabletreemodel.py         |   422 +
 .../editabletreemodel/editabletreemodel.qrc        |     5 +
 .../editabletreemodel/editabletreemodel_rc.py      |   159 +
 examples/itemviews/editabletreemodel/mainwindow.ui |   125 +
 .../itemviews/editabletreemodel/ui_mainwindow.py   |    85 +
 examples/itemviews/fetchmore.py                    |   151 +
 examples/itemviews/pixelator/images/qt.png         |   Bin 0 -> 656 bytes
 examples/itemviews/pixelator/pixelator.py          |   301 +
 examples/itemviews/pixelator/pixelator.qrc         |     5 +
 examples/itemviews/pixelator/pixelator_rc.py       |    81 +
 examples/itemviews/puzzle/example.jpg              |   Bin 0 -> 42654 bytes
 examples/itemviews/puzzle/puzzle.py                |   431 +
 examples/itemviews/puzzle/puzzle.qrc               |     5 +
 examples/itemviews/puzzle/puzzle_rc.py             |  2706 +++++
 examples/itemviews/simpledommodel.py               |   224 +
 examples/itemviews/simpletreemodel/default.txt     |    40 +
 .../itemviews/simpletreemodel/simpletreemodel.py   |   212 +
 .../itemviews/simpletreemodel/simpletreemodel.qrc  |     5 +
 .../simpletreemodel/simpletreemodel_rc.py          |   159 +
 examples/itemviews/simplewidgetmapper.py           |   130 +
 examples/itemviews/spinboxdelegate.py              |    93 +
 .../itemviews/spreadsheet/images/interview.png     |   Bin 0 -> 174 bytes
 examples/itemviews/spreadsheet/printview.py        |    53 +
 examples/itemviews/spreadsheet/spreadsheet.py      |   543 +
 examples/itemviews/spreadsheet/spreadsheet.qrc     |     5 +
 examples/itemviews/spreadsheet/spreadsheet_rc.py   |    51 +
 .../itemviews/spreadsheet/spreadsheetdelegate.py   |    85 +
 examples/itemviews/spreadsheet/spreadsheetitem.py  |   159 +
 examples/itemviews/spreadsheet/util.py             |    51 +
 examples/itemviews/stardelegate.py                 |   252 +
 examples/layouts/README                            |    27 +
 examples/layouts/basiclayouts.py                   |   137 +
 examples/layouts/borderlayout.py                   |   240 +
 examples/layouts/flowlayout.py                     |   159 +
 examples/mainwindows/README                        |    26 +
 examples/mainwindows/application/application.py    |   278 +
 examples/mainwindows/application/images/copy.png   |   Bin 0 -> 1338 bytes
 examples/mainwindows/application/images/cut.png    |   Bin 0 -> 1323 bytes
 examples/mainwindows/application/images/new.png    |   Bin 0 -> 852 bytes
 examples/mainwindows/application/images/open.png   |   Bin 0 -> 2073 bytes
 examples/mainwindows/application/images/paste.png  |   Bin 0 -> 1645 bytes
 examples/mainwindows/application/images/save.png   |   Bin 0 -> 1187 bytes
 examples/mainwindows/dockwidgets/dockwidgets.py    |   303 +
 examples/mainwindows/dockwidgets/dockwidgets.qrc   |     8 +
 examples/mainwindows/dockwidgets/dockwidgets_rc.py |   462 +
 examples/mainwindows/dockwidgets/images/new.png    |   Bin 0 -> 977 bytes
 examples/mainwindows/dockwidgets/images/print.png  |   Bin 0 -> 1732 bytes
 examples/mainwindows/dockwidgets/images/save.png   |   Bin 0 -> 1894 bytes
 examples/mainwindows/dockwidgets/images/undo.png   |   Bin 0 -> 1768 bytes
 examples/mainwindows/mdi/images/copy.png           |   Bin 0 -> 1338 bytes
 examples/mainwindows/mdi/images/cut.png            |   Bin 0 -> 1323 bytes
 examples/mainwindows/mdi/images/new.png            |   Bin 0 -> 852 bytes
 examples/mainwindows/mdi/images/open.png           |   Bin 0 -> 2073 bytes
 examples/mainwindows/mdi/images/paste.png          |   Bin 0 -> 1645 bytes
 examples/mainwindows/mdi/images/save.png           |   Bin 0 -> 1187 bytes
 examples/mainwindows/mdi/mdi.py                    |   446 +
 examples/mainwindows/mdi/mdi.qrc                   |    10 +
 examples/mainwindows/mdi/mdi_rc.py                 |   604 +
 examples/mainwindows/menus.py                      |   286 +
 examples/mainwindows/recentfiles.py                |   236 +
 examples/mainwindows/sdi/images/copy.png           |   Bin 0 -> 1338 bytes
 examples/mainwindows/sdi/images/cut.png            |   Bin 0 -> 1323 bytes
 examples/mainwindows/sdi/images/new.png            |   Bin 0 -> 852 bytes
 examples/mainwindows/sdi/images/open.png           |   Bin 0 -> 2073 bytes
 examples/mainwindows/sdi/images/paste.png          |   Bin 0 -> 1645 bytes
 examples/mainwindows/sdi/images/save.png           |   Bin 0 -> 1187 bytes
 examples/mainwindows/sdi/sdi.py                    |   317 +
 examples/mainwindows/sdi/sdi.qrc                   |    10 +
 examples/mainwindows/sdi/sdi_rc.py                 |   604 +
 examples/mainwindows/separations.py                |   486 +
 examples/multimedia/README                         |    22 +
 examples/multimedia/audiodevices/audiodevices.py   |   279 +
 .../multimedia/audiodevices/audiodevicesbase.ui    |   390 +
 .../multimedia/audiodevices/ui_audiodevicesbase.py |   252 +
 examples/multimedia/audiooutput.py                 |   295 +
 examples/multimediawidgets/README                  |    24 +
 examples/multimediawidgets/camera/camera.py        |   512 +
 examples/multimediawidgets/camera/camera.ui        |   492 +
 examples/multimediawidgets/camera/imagesettings.ui |   123 +
 examples/multimediawidgets/camera/ui_camera.py     |   182 +
 .../multimediawidgets/camera/ui_imagesettings.py   |    63 +
 .../multimediawidgets/camera/ui_videosettings.py   |   117 +
 examples/multimediawidgets/camera/videosettings.ui |   211 +
 examples/multimediawidgets/player.py               |   691 ++
 examples/multimediawidgets/videographicsitem.py    |   156 +
 examples/multimediawidgets/videowidget.py          |   143 +
 examples/network/README                            |    26 +
 examples/network/blockingfortuneclient.py          |   224 +
 examples/network/broadcastreceiver.py              |    96 +
 examples/network/broadcastsender.py                |    97 +
 examples/network/fortuneclient.py                  |   227 +
 examples/network/fortuneserver.py                  |   166 +
 examples/network/http/authenticationdialog.ui      |   129 +
 examples/network/http/http.py                      |   244 +
 examples/network/lightmaps.py                      |   482 +
 examples/network/loopback.py                       |   174 +
 examples/network/threadedfortuneserver.py          |   151 +
 examples/opengl/2dpainting.py                      |   166 +
 examples/opengl/README                             |    27 +
 examples/opengl/grabber.py                         |   429 +
 examples/opengl/hellogl.py                         |   279 +
 examples/opengl/openglwindow.py                    |   220 +
 examples/opengl/overpainting.py                    |   371 +
 examples/opengl/samplebuffers.py                   |   193 +
 examples/opengl/textures/images/side1.png          |   Bin 0 -> 935 bytes
 examples/opengl/textures/images/side2.png          |   Bin 0 -> 1622 bytes
 examples/opengl/textures/images/side3.png          |   Bin 0 -> 2117 bytes
 examples/opengl/textures/images/side4.png          |   Bin 0 -> 1222 bytes
 examples/opengl/textures/images/side5.png          |   Bin 0 -> 1806 bytes
 examples/opengl/textures/images/side6.png          |   Bin 0 -> 2215 bytes
 examples/opengl/textures/textures.py               |   267 +
 examples/opengl/textures/textures.qrc              |    10 +
 examples/opengl/textures/textures_rc.py            |   698 ++
 examples/painting/README                           |    28 +
 examples/painting/basicdrawing/basicdrawing.py     |   349 +
 examples/painting/basicdrawing/basicdrawing.qrc    |     6 +
 examples/painting/basicdrawing/basicdrawing_rc.py  |   326 +
 examples/painting/basicdrawing/images/brick.png    |   Bin 0 -> 767 bytes
 examples/painting/basicdrawing/images/qt-logo.png  |   Bin 0 -> 3696 bytes
 examples/painting/concentriccircles.py             |   146 +
 examples/painting/painterpaths.py                  |   298 +
 examples/painting/svgviewer/files/bubbles.svg      |   215 +
 examples/painting/svgviewer/files/cubic.svg        |    77 +
 examples/painting/svgviewer/files/spheres.svg      |    72 +
 examples/painting/svgviewer/svgviewer.py           |   298 +
 examples/painting/svgviewer/svgviewer.qrc          |     8 +
 examples/painting/svgviewer/svgviewer_rc.py        |   250 +
 examples/painting/transformations.py               |   249 +
 examples/pyuic/compile-on-the-fly.py               |    67 +
 examples/pyuic/demo.ui                             |   146 +
 examples/pyuic/load_ui1.py                         |    51 +
 examples/pyuic/load_ui2.py                         |    64 +
 examples/qml/referenceexamples/adding.py           |   102 +
 examples/qml/referenceexamples/attached.py         |   232 +
 examples/qml/referenceexamples/binding.py          |   335 +
 examples/qml/referenceexamples/coercion.py         |   154 +
 examples/qml/referenceexamples/default.py          |   155 +
 examples/qml/referenceexamples/grouped.py          |   225 +
 examples/qml/referenceexamples/methods.py          |   150 +
 examples/qml/referenceexamples/properties.py       |   141 +
 examples/qml/referenceexamples/signal.py           |   250 +
 examples/qml/referenceexamples/valuesource.py      |   333 +
 examples/qtdemo/colors.py                          |   279 +
 examples/qtdemo/demoitem.py                        |   236 +
 examples/qtdemo/demoitemanimation.py               |   124 +
 examples/qtdemo/demotextitem.py                    |   113 +
 examples/qtdemo/examplecontent.py                  |   151 +
 examples/qtdemo/guide.py                           |   140 +
 examples/qtdemo/guidecircle.py                     |    90 +
 examples/qtdemo/guideline.py                       |    75 +
 examples/qtdemo/headingitem.py                     |   105 +
 examples/qtdemo/imageitem.py                       |   118 +
 examples/qtdemo/images/demobg.png                  |   Bin 0 -> 20675 bytes
 examples/qtdemo/images/qtlogo_small.png            |   Bin 0 -> 3546 bytes
 examples/qtdemo/images/trolltech-logo.png          |   Bin 0 -> 23547 bytes
 examples/qtdemo/itemcircleanimation.py             |   392 +
 examples/qtdemo/letteritem.py                      |    85 +
 examples/qtdemo/mainwindow.py                      |   389 +
 examples/qtdemo/menucontent.py                     |   133 +
 examples/qtdemo/menumanager.py                     |   828 ++
 examples/qtdemo/qtdemo.py                          |    91 +
 examples/qtdemo/qtdemo.qrc                         |     8 +
 examples/qtdemo/qtdemo_rc.py                       |  3217 +++++
 examples/qtdemo/scanitem.py                        |    78 +
 examples/qtdemo/score.py                           |   109 +
 examples/qtdemo/textbutton.py                      |   345 +
 examples/qtdemo/xml/examples.xml                   |   203 +
 examples/quick/README                              |    22 +
 examples/quick/animation/animation.py              |    69 +
 examples/quick/animation/animation.qml             |    63 +
 examples/quick/animation/animation.qrc             |    22 +
 examples/quick/animation/animation_rc.py           |  5071 ++++++++
 .../quick/animation/basics/color-animation.qml     |   123 +
 .../quick/animation/basics/images/face-smile.png   |   Bin 0 -> 15408 bytes
 examples/quick/animation/basics/images/moon.png    |   Bin 0 -> 2433 bytes
 examples/quick/animation/basics/images/shadow.png  |   Bin 0 -> 425 bytes
 examples/quick/animation/basics/images/star.png    |   Bin 0 -> 349 bytes
 examples/quick/animation/basics/images/sun.png     |   Bin 0 -> 8153 bytes
 .../quick/animation/basics/property-animation.qml  |   107 +
 examples/quick/animation/behaviors/SideRect.qml    |    62 +
 .../quick/animation/behaviors/behavior-example.qml |   120 +
 examples/quick/animation/behaviors/tvtennis.qml    |   111 +
 examples/quick/animation/behaviors/wigglytext.qml  |   112 +
 examples/quick/animation/easing/easing.qml         |   156 +
 .../animation/pathanimation/pathanimation.qml      |   107 +
 .../pathinterpolator/pathinterpolator.qml          |   113 +
 examples/quick/animation/states/qt-logo.png        |   Bin 0 -> 5149 bytes
 examples/quick/animation/states/states.qml         |   103 +
 examples/quick/animation/states/transitions.qml    |   132 +
 examples/quick/canvas/bezierCurve/bezierCurve.qml  |   123 +
 examples/quick/canvas/canvas.py                    |    69 +
 examples/quick/canvas/canvas.qml                   |    60 +
 examples/quick/canvas/canvas.qrc                   |    32 +
 examples/quick/canvas/canvas_rc.py                 | 11837 +++++++++++++++++++
 examples/quick/canvas/clip/clip.qml                |   150 +
 examples/quick/canvas/contents/Button.qml          |    87 +
 examples/quick/canvas/contents/ScrollBar.qml       |    74 +
 examples/quick/canvas/contents/Slider.qml          |   115 +
 examples/quick/canvas/contents/TitleBar.qml        |    70 +
 examples/quick/canvas/contents/ToolBar.qml         |    69 +
 .../canvas/contents/images/button-pressed.png      |   Bin 0 -> 571 bytes
 examples/quick/canvas/contents/images/button.png   |   Bin 0 -> 564 bytes
 examples/quick/canvas/contents/images/default.svg  |    82 +
 examples/quick/canvas/contents/images/gloss.png    |   Bin 0 -> 1236 bytes
 examples/quick/canvas/contents/images/lineedit.png |   Bin 0 -> 1415 bytes
 examples/quick/canvas/contents/images/lineedit.sci |     5 +
 examples/quick/canvas/contents/images/quit.png     |   Bin 0 -> 2369 bytes
 examples/quick/canvas/contents/images/stripes.png  |   Bin 0 -> 257 bytes
 examples/quick/canvas/contents/images/titlebar.png |   Bin 0 -> 1436 bytes
 examples/quick/canvas/contents/images/titlebar.sci |     5 +
 .../quick/canvas/contents/images/toolbutton.png    |   Bin 0 -> 2550 bytes
 .../quick/canvas/contents/images/toolbutton.sci    |     5 +
 examples/quick/canvas/contents/qt-logo.png         |   Bin 0 -> 23519 bytes
 .../canvas/quadraticCurveTo/quadraticCurveTo.qml   |   130 +
 examples/quick/canvas/roundedrect/roundedrect.qml  |   123 +
 examples/quick/canvas/smile/smile.qml              |   126 +
 examples/quick/canvas/squircle/squircle.png        |   Bin 0 -> 771 bytes
 examples/quick/canvas/squircle/squircle.qml        |   153 +
 examples/quick/canvas/tiger/tiger.js               |   721 ++
 examples/quick/canvas/tiger/tiger.qml              |   128 +
 .../models/abstractitemmodel/abstractitemmodel.py  |   120 +
 .../models/abstractitemmodel/abstractitemmodel.qrc |     6 +
 .../abstractitemmodel/abstractitemmodel_rc.py      |   170 +
 examples/quick/models/abstractitemmodel/view.qml   |    50 +
 .../models/objectlistmodel/objectlistmodel.py      |   102 +
 .../models/objectlistmodel/objectlistmodel.qrc     |     5 +
 .../models/objectlistmodel/objectlistmodel_rc.py   |   175 +
 examples/quick/models/objectlistmodel/view.qml     |    55 +
 .../models/stringlistmodel/stringlistmodel.py      |    64 +
 .../models/stringlistmodel/stringlistmodel.qrc     |     5 +
 .../models/stringlistmodel/stringlistmodel_rc.py   |   173 +
 examples/quick/models/stringlistmodel/view.qml     |    54 +
 .../scenegraph/customgeometry/customgeometry.py    |   188 +
 .../scenegraph/customgeometry/customgeometry.qrc   |     5 +
 .../scenegraph/customgeometry/customgeometry_rc.py |   216 +
 examples/quick/scenegraph/customgeometry/main.qml  |    74 +
 examples/quick/shared/Button.qml                   |    91 +
 examples/quick/shared/LauncherList.qml             |   153 +
 examples/quick/shared/SimpleLauncherDelegate.qml   |    89 +
 examples/quick/shared/images/back.png              |   Bin 0 -> 1590 bytes
 examples/quick/shared/images/next.png              |   Bin 0 -> 1371 bytes
 examples/quick/shared/shared.qrc                   |     9 +
 examples/quick/shared/shared_rc.py                 |   996 ++
 .../tutorials/extending/chapter1-basics/app.qml    |    59 +
 .../extending/chapter1-basics/chapter1-basics.py   |    97 +
 .../tutorials/extending/chapter2-methods/app.qml   |    65 +
 .../extending/chapter2-methods/chapter2-methods.py |   106 +
 .../tutorials/extending/chapter3-bindings/app.qml  |    73 +
 .../chapter3-bindings/chapter3-bindings.py         |   107 +
 .../extending/chapter4-customPropertyTypes/app.qml |    59 +
 .../chapter4-customPropertyTypes.py                |   115 +
 .../extending/chapter5-listproperties/app.qml      |    69 +
 .../chapter5-listproperties.py                     |   128 +
 .../chapter6-plugins/Charts/chartsplugin.py        |    51 +
 .../extending/chapter6-plugins/Charts/piechart.py  |    66 +
 .../extending/chapter6-plugins/Charts/pieslice.py  |    84 +
 .../extending/chapter6-plugins/Charts/qmldir       |     2 +
 .../tutorials/extending/chapter6-plugins/app.qml   |    69 +
 examples/richtext/README                           |    28 +
 examples/richtext/calendar.py                      |   190 +
 examples/richtext/orderform.py                     |   303 +
 examples/richtext/syntaxhighlighter.py             |   204 +
 examples/richtext/textedit/example.html            |    79 +
 examples/richtext/textedit/images/logo.png         |   Bin 0 -> 632 bytes
 examples/richtext/textedit/images/logo32.png       |   Bin 0 -> 1410 bytes
 examples/richtext/textedit/images/mac/editcopy.png |   Bin 0 -> 1468 bytes
 examples/richtext/textedit/images/mac/editcut.png  |   Bin 0 -> 1512 bytes
 .../richtext/textedit/images/mac/editpaste.png     |   Bin 0 -> 1906 bytes
 examples/richtext/textedit/images/mac/editredo.png |   Bin 0 -> 1752 bytes
 examples/richtext/textedit/images/mac/editundo.png |   Bin 0 -> 1746 bytes
 .../richtext/textedit/images/mac/exportpdf.png     |   Bin 0 -> 1215 bytes
 examples/richtext/textedit/images/mac/filenew.png  |   Bin 0 -> 1172 bytes
 examples/richtext/textedit/images/mac/fileopen.png |   Bin 0 -> 2168 bytes
 .../richtext/textedit/images/mac/fileprint.png     |   Bin 0 -> 2087 bytes
 examples/richtext/textedit/images/mac/filesave.png |   Bin 0 -> 1206 bytes
 examples/richtext/textedit/images/mac/textbold.png |   Bin 0 -> 1611 bytes
 .../richtext/textedit/images/mac/textcenter.png    |   Bin 0 -> 1404 bytes
 .../richtext/textedit/images/mac/textitalic.png    |   Bin 0 -> 1164 bytes
 .../richtext/textedit/images/mac/textjustify.png   |   Bin 0 -> 1257 bytes
 examples/richtext/textedit/images/mac/textleft.png |   Bin 0 -> 1235 bytes
 .../richtext/textedit/images/mac/textright.png     |   Bin 0 -> 1406 bytes
 .../richtext/textedit/images/mac/textunder.png     |   Bin 0 -> 1183 bytes
 examples/richtext/textedit/images/mac/zoomin.png   |   Bin 0 -> 1696 bytes
 examples/richtext/textedit/images/mac/zoomout.png  |   Bin 0 -> 1662 bytes
 examples/richtext/textedit/images/win/editcopy.png |   Bin 0 -> 1325 bytes
 examples/richtext/textedit/images/win/editcut.png  |   Bin 0 -> 1896 bytes
 .../richtext/textedit/images/win/editpaste.png     |   Bin 0 -> 1482 bytes
 examples/richtext/textedit/images/win/editredo.png |   Bin 0 -> 1787 bytes
 examples/richtext/textedit/images/win/editundo.png |   Bin 0 -> 1768 bytes
 .../richtext/textedit/images/win/exportpdf.png     |   Bin 0 -> 1059 bytes
 examples/richtext/textedit/images/win/filenew.png  |   Bin 0 -> 768 bytes
 examples/richtext/textedit/images/win/fileopen.png |   Bin 0 -> 1662 bytes
 .../richtext/textedit/images/win/fileprint.png     |   Bin 0 -> 1456 bytes
 examples/richtext/textedit/images/win/filesave.png |   Bin 0 -> 1205 bytes
 examples/richtext/textedit/images/win/textbold.png |   Bin 0 -> 1134 bytes
 .../richtext/textedit/images/win/textcenter.png    |   Bin 0 -> 627 bytes
 .../richtext/textedit/images/win/textitalic.png    |   Bin 0 -> 829 bytes
 .../richtext/textedit/images/win/textjustify.png   |   Bin 0 -> 695 bytes
 examples/richtext/textedit/images/win/textleft.png |   Bin 0 -> 673 bytes
 .../richtext/textedit/images/win/textright.png     |   Bin 0 -> 677 bytes
 .../richtext/textedit/images/win/textunder.png     |   Bin 0 -> 971 bytes
 examples/richtext/textedit/images/win/zoomin.png   |   Bin 0 -> 1208 bytes
 examples/richtext/textedit/images/win/zoomout.png  |   Bin 0 -> 1226 bytes
 examples/richtext/textedit/textedit.py             |   656 +
 examples/richtext/textedit/textedit.qrc            |    45 +
 examples/richtext/textedit/textedit_rc.py          |  3767 ++++++
 examples/richtext/textobject/files/heart.svg       |    55 +
 examples/richtext/textobject/textobject.py         |   139 +
 examples/sql/README                                |    26 +
 examples/sql/cachedtable.py                        |   110 +
 examples/sql/connection.py                         |   115 +
 examples/sql/querymodel.py                         |   157 +
 examples/sql/relationaltablemodel.py               |   114 +
 examples/sql/tablemodel.py                         |    89 +
 examples/threads/README                            |    26 +
 examples/threads/mandelbrot.py                     |   347 +
 examples/threads/semaphores.py                     |    84 +
 examples/threads/waitconditions.py                 |   106 +
 examples/tools/README                              |    26 +
 examples/tools/codecs/codecs.py                    |   253 +
 examples/tools/codecs/encodedfiles/iso-8859-1.txt  |     6 +
 examples/tools/codecs/encodedfiles/iso-8859-15.txt |     8 +
 examples/tools/codecs/encodedfiles/utf-16.txt      |   Bin 0 -> 162 bytes
 examples/tools/codecs/encodedfiles/utf-16be.txt    |   Bin 0 -> 160 bytes
 examples/tools/codecs/encodedfiles/utf-16le.txt    |   Bin 0 -> 160 bytes
 examples/tools/codecs/encodedfiles/utf-8.txt       |     6 +
 examples/tools/customcompleter/customcompleter.py  |   206 +
 examples/tools/customcompleter/customcompleter.qrc |     5 +
 .../tools/customcompleter/customcompleter_rc.py    |   734 ++
 .../tools/customcompleter/resources/wordlist.txt   |  1454 +++
 examples/tools/i18n/i18n.py                        |   217 +
 examples/tools/i18n/i18n.qrc                       |    18 +
 examples/tools/i18n/i18n_rc.py                     |   824 ++
 examples/tools/i18n/translations/i18n_ar.qm        |   Bin 0 -> 736 bytes
 examples/tools/i18n/translations/i18n_ar.ts        |    57 +
 examples/tools/i18n/translations/i18n_cs.qm        |   Bin 0 -> 796 bytes
 examples/tools/i18n/translations/i18n_cs.ts        |    57 +
 examples/tools/i18n/translations/i18n_de.qm        |   Bin 0 -> 848 bytes
 examples/tools/i18n/translations/i18n_de.ts        |    57 +
 examples/tools/i18n/translations/i18n_el.qm        |   Bin 0 -> 804 bytes
 examples/tools/i18n/translations/i18n_el.ts        |    57 +
 examples/tools/i18n/translations/i18n_en.qm        |   Bin 0 -> 810 bytes
 examples/tools/i18n/translations/i18n_en.ts        |    57 +
 examples/tools/i18n/translations/i18n_eo.qm        |   Bin 0 -> 806 bytes
 examples/tools/i18n/translations/i18n_eo.ts        |    57 +
 examples/tools/i18n/translations/i18n_fr.qm        |   Bin 0 -> 844 bytes
 examples/tools/i18n/translations/i18n_fr.ts        |    57 +
 examples/tools/i18n/translations/i18n_it.qm        |   Bin 0 -> 808 bytes
 examples/tools/i18n/translations/i18n_it.ts        |    57 +
 examples/tools/i18n/translations/i18n_jp.qm        |   Bin 0 -> 722 bytes
 examples/tools/i18n/translations/i18n_jp.ts        |    57 +
 examples/tools/i18n/translations/i18n_ko.qm        |   Bin 0 -> 690 bytes
 examples/tools/i18n/translations/i18n_ko.ts        |    57 +
 examples/tools/i18n/translations/i18n_no.qm        |   Bin 0 -> 804 bytes
 examples/tools/i18n/translations/i18n_no.ts        |    57 +
 examples/tools/i18n/translations/i18n_pt.qm        |   Bin 0 -> 838 bytes
 examples/tools/i18n/translations/i18n_pt.ts        |    57 +
 examples/tools/i18n/translations/i18n_ru.qm        |   Bin 0 -> 806 bytes
 examples/tools/i18n/translations/i18n_ru.ts        |    57 +
 examples/tools/i18n/translations/i18n_sv.qm        |   Bin 0 -> 814 bytes
 examples/tools/i18n/translations/i18n_sv.ts        |    57 +
 examples/tools/i18n/translations/i18n_zh.qm        |   Bin 0 -> 700 bytes
 examples/tools/i18n/translations/i18n_zh.ts        |    57 +
 examples/tools/regexp.py                           |   193 +
 .../tools/settingseditor/inifiles/licensepage.ini  |    46 +
 examples/tools/settingseditor/inifiles/qsa.ini     |    26 +
 examples/tools/settingseditor/settingseditor.py    |   725 ++
 examples/tutorials/addressbook/README              |    21 +
 examples/tutorials/addressbook/part1.py            |    79 +
 examples/tutorials/addressbook/part2.py            |   186 +
 examples/tutorials/addressbook/part3.py            |   252 +
 examples/tutorials/addressbook/part4.py            |   306 +
 examples/tutorials/addressbook/part5.py            |   366 +
 examples/tutorials/addressbook/part6.py            |   430 +
 examples/tutorials/addressbook/part7.py            |   482 +
 examples/webkit/README                             |    23 +
 examples/webkit/domtraversal/domtraversal.py       |    89 +
 examples/webkit/domtraversal/ui_window.py          |    57 +
 examples/webkit/domtraversal/window.ui             |    89 +
 examples/webkit/fancybrowser/fancybrowser.py       |   211 +
 examples/webkit/fancybrowser/jquery.qrc            |     5 +
 examples/webkit/formextractor/form.html            |    46 +
 examples/webkit/formextractor/formextractor.py     |   143 +
 examples/webkit/formextractor/formextractor.qrc    |     5 +
 examples/webkit/formextractor/formextractor.ui     |   159 +
 examples/webkit/formextractor/formextractor_rc.py  |    99 +
 examples/webkit/formextractor/ui_formextractor.py  |    87 +
 examples/webkit/framecapture.py                    |   157 +
 examples/webkit/previewer/previewer.py             |   178 +
 examples/webkit/previewer/previewer.ui             |    99 +
 examples/webkit/previewer/ui_previewer.py          |    62 +
 examples/webkit/simpleselector/simpleselector.py   |    85 +
 examples/webkit/simpleselector/ui_window.py        |    50 +
 examples/webkit/simpleselector/window.ui           |    72 +
 examples/widgets/README                            |    30 +
 examples/widgets/analogclock.py                    |   122 +
 examples/widgets/calculator.py                     |   357 +
 examples/widgets/calendarwidget.py                 |   417 +
 examples/widgets/charactermap.py                   |   281 +
 examples/widgets/digitalclock.py                   |    80 +
 examples/widgets/groupbox.py                       |   169 +
 examples/widgets/icons/icons.py                    |   475 +
 examples/widgets/icons/images/designer.png         |   Bin 0 -> 4205 bytes
 examples/widgets/icons/images/find_disabled.png    |   Bin 0 -> 501 bytes
 examples/widgets/icons/images/find_normal.png      |   Bin 0 -> 838 bytes
 .../widgets/icons/images/monkey_off_128x128.png    |   Bin 0 -> 7045 bytes
 examples/widgets/icons/images/monkey_off_16x16.png |   Bin 0 -> 683 bytes
 examples/widgets/icons/images/monkey_off_32x32.png |   Bin 0 -> 1609 bytes
 examples/widgets/icons/images/monkey_off_64x64.png |   Bin 0 -> 3533 bytes
 .../widgets/icons/images/monkey_on_128x128.png     |   Bin 0 -> 6909 bytes
 examples/widgets/icons/images/monkey_on_16x16.png  |   Bin 0 -> 681 bytes
 examples/widgets/icons/images/monkey_on_32x32.png  |   Bin 0 -> 1577 bytes
 examples/widgets/icons/images/monkey_on_64x64.png  |   Bin 0 -> 3479 bytes
 .../widgets/icons/images/qt_extended_16x16.png     |   Bin 0 -> 834 bytes
 .../widgets/icons/images/qt_extended_32x32.png     |   Bin 0 -> 1892 bytes
 .../widgets/icons/images/qt_extended_48x48.png     |   Bin 0 -> 3672 bytes
 examples/widgets/imageviewer.py                    |   216 +
 examples/widgets/lineedits.py                      |   207 +
 examples/widgets/movie/animation.mng               |   Bin 0 -> 5464 bytes
 examples/widgets/movie/movie.py                    |   211 +
 examples/widgets/scribble.py                       |   321 +
 examples/widgets/shapedclock.py                    |   149 +
 examples/widgets/sliders.py                        |   195 +
 examples/widgets/spinboxes.py                      |   213 +
 examples/widgets/styles.py                         |   243 +
 .../widgets/stylesheet/images/checkbox_checked.png |   Bin 0 -> 263 bytes
 .../stylesheet/images/checkbox_checked_hover.png   |   Bin 0 -> 266 bytes
 .../stylesheet/images/checkbox_checked_pressed.png |   Bin 0 -> 425 bytes
 .../stylesheet/images/checkbox_unchecked.png       |   Bin 0 -> 159 bytes
 .../stylesheet/images/checkbox_unchecked_hover.png |   Bin 0 -> 159 bytes
 .../images/checkbox_unchecked_pressed.png          |   Bin 0 -> 320 bytes
 examples/widgets/stylesheet/images/down_arrow.png  |   Bin 0 -> 175 bytes
 .../stylesheet/images/down_arrow_disabled.png      |   Bin 0 -> 174 bytes
 examples/widgets/stylesheet/images/frame.png       |   Bin 0 -> 253 bytes
 examples/widgets/stylesheet/images/pagefold.png    |   Bin 0 -> 1545 bytes
 examples/widgets/stylesheet/images/pushbutton.png  |   Bin 0 -> 533 bytes
 .../widgets/stylesheet/images/pushbutton_hover.png |   Bin 0 -> 525 bytes
 .../stylesheet/images/pushbutton_pressed.png       |   Bin 0 -> 513 bytes
 .../stylesheet/images/radiobutton_checked.png      |   Bin 0 -> 355 bytes
 .../images/radiobutton_checked_hover.png           |   Bin 0 -> 532 bytes
 .../images/radiobutton_checked_pressed.png         |   Bin 0 -> 599 bytes
 .../stylesheet/images/radiobutton_unchecked.png    |   Bin 0 -> 240 bytes
 .../images/radiobutton_unchecked_hover.png         |   Bin 0 -> 492 bytes
 .../images/radiobutton_unchecked_pressed.png       |   Bin 0 -> 556 bytes
 examples/widgets/stylesheet/images/sizegrip.png    |   Bin 0 -> 129 bytes
 examples/widgets/stylesheet/images/spindown.png    |   Bin 0 -> 276 bytes
 .../widgets/stylesheet/images/spindown_hover.png   |   Bin 0 -> 268 bytes
 .../widgets/stylesheet/images/spindown_off.png     |   Bin 0 -> 249 bytes
 .../widgets/stylesheet/images/spindown_pressed.png |   Bin 0 -> 264 bytes
 examples/widgets/stylesheet/images/spinup.png      |   Bin 0 -> 283 bytes
 .../widgets/stylesheet/images/spinup_hover.png     |   Bin 0 -> 277 bytes
 examples/widgets/stylesheet/images/spinup_off.png  |   Bin 0 -> 274 bytes
 .../widgets/stylesheet/images/spinup_pressed.png   |   Bin 0 -> 277 bytes
 examples/widgets/stylesheet/images/up_arrow.png    |   Bin 0 -> 197 bytes
 .../stylesheet/images/up_arrow_disabled.png        |   Bin 0 -> 172 bytes
 examples/widgets/stylesheet/mainwindow.ui          |   356 +
 examples/widgets/stylesheet/qss/coffee.qss         |   112 +
 examples/widgets/stylesheet/qss/default.qss        |     1 +
 examples/widgets/stylesheet/qss/pagefold.qss       |   299 +
 examples/widgets/stylesheet/stylesheet.py          |    88 +
 examples/widgets/stylesheet/stylesheet.qrc         |    37 +
 examples/widgets/stylesheet/stylesheet_rc.py       |  1224 ++
 examples/widgets/stylesheet/stylesheeteditor.py    |   115 +
 examples/widgets/stylesheet/stylesheeteditor.ui    |   176 +
 examples/widgets/stylesheet/ui_mainwindow.py       |   191 +
 examples/widgets/stylesheet/ui_stylesheeteditor.py |    88 +
 examples/widgets/tetrix.py                         |   504 +
 examples/widgets/tooltips/images/circle.png        |   Bin 0 -> 165 bytes
 examples/widgets/tooltips/images/square.png        |   Bin 0 -> 94 bytes
 examples/widgets/tooltips/images/triangle.png      |   Bin 0 -> 170 bytes
 examples/widgets/tooltips/tooltips.py              |   278 +
 examples/widgets/tooltips/tooltips.qrc             |     7 +
 examples/widgets/tooltips/tooltips_rc.py           |    82 +
 examples/widgets/wiggly.py                         |   123 +
 examples/widgets/windowflags.py                    |   283 +
 examples/xmlpatterns/README                        |    24 +
 examples/xmlpatterns/schema/files/contact.xsd      |    25 +
 .../xmlpatterns/schema/files/invalid_contact.xml   |    11 +
 .../xmlpatterns/schema/files/invalid_order.xml     |    13 +
 .../xmlpatterns/schema/files/invalid_recipe.xml    |    14 +
 examples/xmlpatterns/schema/files/order.xsd        |    23 +
 examples/xmlpatterns/schema/files/recipe.xsd       |    40 +
 .../xmlpatterns/schema/files/valid_contact.xml     |    11 +
 examples/xmlpatterns/schema/files/valid_order.xml  |    18 +
 examples/xmlpatterns/schema/files/valid_recipe.xml |    13 +
 examples/xmlpatterns/schema/schema.py              |   275 +
 examples/xmlpatterns/schema/schema.qrc             |    13 +
 examples/xmlpatterns/schema/schema.ui              |    71 +
 examples/xmlpatterns/schema/schema_rc.py           |   388 +
 examples/xmlpatterns/schema/ui_schema.py           |    63 +
 pylupdate/fetchtr.cpp                              |   927 ++
 pylupdate/main.cpp                                 |   317 +
 pylupdate/merge.cpp                                |   216 +
 pylupdate/metatranslator.cpp                       |   803 ++
 pylupdate/metatranslator.h                         |   183 +
 pylupdate/numberh.cpp                              |   257 +
 pylupdate/proparser.cpp                            |   226 +
 pylupdate/proparser.h                              |    50 +
 pylupdate/sametexth.cpp                            |   104 +
 pylupdate/simtexth.cpp                             |   273 +
 pylupdate/simtexth.h                               |    94 +
 pylupdate/translator.cpp                           |  1214 ++
 pylupdate/translator.h                             |   448 +
 pyrcc/main.cpp                                     |   195 +
 pyrcc/rcc.cpp                                      |   565 +
 pyrcc/rcc.h                                        |   168 +
 pyuic/uic/Compiler/__init__.py                     |    20 +
 pyuic/uic/Compiler/compiler.py                     |   122 +
 pyuic/uic/Compiler/indenter.py                     |    77 +
 pyuic/uic/Compiler/misc.py                         |    69 +
 pyuic/uic/Compiler/proxy_metaclass.py              |   100 +
 pyuic/uic/Compiler/qobjectcreator.py               |   167 +
 pyuic/uic/Compiler/qtproxies.py                    |   463 +
 pyuic/uic/Loader/__init__.py                       |    20 +
 pyuic/uic/Loader/loader.py                         |    72 +
 pyuic/uic/Loader/qobjectcreator.py                 |   149 +
 pyuic/uic/__init__.py                              |   228 +
 pyuic/uic/driver.py                                |   127 +
 pyuic/uic/exceptions.py                            |    49 +
 pyuic/uic/icon_cache.py                            |   164 +
 pyuic/uic/objcreator.py                            |   146 +
 pyuic/uic/port_v2/__init__.py                      |    20 +
 pyuic/uic/port_v2/as_string.py                     |    40 +
 pyuic/uic/port_v2/ascii_upper.py                   |    33 +
 pyuic/uic/port_v2/invoke.py                        |    48 +
 pyuic/uic/port_v2/load_plugin.py                   |    39 +
 pyuic/uic/port_v2/proxy_base.py                    |    31 +
 pyuic/uic/port_v2/string_io.py                     |    27 +
 pyuic/uic/port_v3/__init__.py                      |    20 +
 pyuic/uic/port_v3/as_string.py                     |    40 +
 pyuic/uic/port_v3/ascii_upper.py                   |    30 +
 pyuic/uic/port_v3/invoke.py                        |    48 +
 pyuic/uic/port_v3/load_plugin.py                   |    39 +
 pyuic/uic/port_v3/proxy_base.py                    |    29 +
 pyuic/uic/port_v3/string_io.py                     |    24 +
 pyuic/uic/properties.py                            |   528 +
 pyuic/uic/pyuic.py                                 |    70 +
 pyuic/uic/uiparser.py                              |  1005 ++
 pyuic/uic/widget-plugins/qaxcontainer.py           |    33 +
 pyuic/uic/widget-plugins/qscintilla.py             |    33 +
 pyuic/uic/widget-plugins/qtprintsupport.py         |    33 +
 pyuic/uic/widget-plugins/qtwebkit.py               |    51 +
 qmlscene/pluginloader.cpp                          |   407 +
 qmlscene/pluginloader.h                            |    57 +
 qmlscene/python.pro-in                             |    22 +
 qpy/QtCore/qpycore_api.h                           |   108 +
 qpy/QtCore/qpycore_chimera.cpp                     |  1723 +++
 qpy/QtCore/qpycore_chimera.h                       |   281 +
 qpy/QtCore/qpycore_chimera_signature.cpp           |   113 +
 qpy/QtCore/qpycore_chimera_storage.cpp             |   120 +
 qpy/QtCore/qpycore_classinfo.cpp                   |    65 +
 qpy/QtCore/qpycore_classinfo.h                     |    36 +
 qpy/QtCore/qpycore_decorators.cpp                  |   161 +
 qpy/QtCore/qpycore_enums_flags.cpp                 |   132 +
 qpy/QtCore/qpycore_enums_flags.h                   |    45 +
 qpy/QtCore/qpycore_init.cpp                        |    74 +
 qpy/QtCore/qpycore_misc.cpp                        |    57 +
 qpy/QtCore/qpycore_misc.h                          |    33 +
 qpy/QtCore/qpycore_namespace.h                     |    35 +
 qpy/QtCore/qpycore_objectified_strings.h           |    35 +
 qpy/QtCore/qpycore_post_init.cpp.in                |   139 +
 qpy/QtCore/qpycore_public_api.cpp                  |   230 +
 qpy/QtCore/qpycore_public_api.h                    |   104 +
 qpy/QtCore/qpycore_pyqtboundsignal.cpp             |   982 ++
 qpy/QtCore/qpycore_pyqtboundsignal.h               |    68 +
 qpy/QtCore/qpycore_pyqtconfigure.cpp               |   269 +
 qpy/QtCore/qpycore_pyqtmethodproxy.cpp             |   286 +
 qpy/QtCore/qpycore_pyqtmethodproxy.h               |    63 +
 qpy/QtCore/qpycore_pyqtproperty.cpp                |   563 +
 qpy/QtCore/qpycore_pyqtproperty.h                  |    79 +
 qpy/QtCore/qpycore_pyqtpyobject.cpp                |   208 +
 qpy/QtCore/qpycore_pyqtpyobject.h                  |    57 +
 qpy/QtCore/qpycore_pyqtsignal.cpp                  |   761 ++
 qpy/QtCore/qpycore_pyqtsignal.h                    |    84 +
 qpy/QtCore/qpycore_pyqtslot.cpp                    |   326 +
 qpy/QtCore/qpycore_pyqtslot.h                      |    77 +
 qpy/QtCore/qpycore_pyqtslotproxy.cpp               |   380 +
 qpy/QtCore/qpycore_pyqtslotproxy.h                 |   112 +
 qpy/QtCore/qpycore_qjsonvalue.cpp                  |   165 +
 qpy/QtCore/qpycore_qmessagelogger.cpp              |   111 +
 qpy/QtCore/qpycore_qmetaobject.cpp                 |   199 +
 qpy/QtCore/qpycore_qmetaobject_helpers.cpp         |   162 +
 qpy/QtCore/qpycore_qmetaobjectbuilder.h            |   121 +
 qpy/QtCore/qpycore_qobject_getattr.cpp             |   132 +
 qpy/QtCore/qpycore_qobject_helpers.cpp             |   303 +
 qpy/QtCore/qpycore_qobject_helpers.h               |    40 +
 qpy/QtCore/qpycore_qstring.cpp                     |   179 +
 qpy/QtCore/qpycore_qvariant.cpp                    |    44 +
 qpy/QtCore/qpycore_qvariant_value.cpp              |   222 +
 qpy/QtCore/qpycore_types.cpp                       |   642 +
 qpy/QtCore/qpycore_types.h                         |    93 +
 qpy/QtDBus/qpydbus_api.h                           |    29 +
 qpy/QtDBus/qpydbus_chimera_helpers.cpp             |   257 +
 qpy/QtDBus/qpydbus_chimera_helpers.h               |    37 +
 qpy/QtDBus/qpydbus_post_init.cpp                   |    37 +
 qpy/QtDBus/qpydbuspendingreply.cpp                 |    66 +
 qpy/QtDBus/qpydbuspendingreply.h                   |    41 +
 qpy/QtDBus/qpydbusreply.cpp                        |   145 +
 qpy/QtDBus/qpydbusreply.h                          |    60 +
 qpy/QtDesigner/qpydesignercontainerextension.h     |    42 +
 .../qpydesignercustomwidgetcollectionplugin.h      |    42 +
 qpy/QtDesigner/qpydesignercustomwidgetplugin.h     |    42 +
 qpy/QtDesigner/qpydesignermembersheetextension.h   |    42 +
 qpy/QtDesigner/qpydesignerpropertysheetextension.h |    42 +
 qpy/QtDesigner/qpydesignertaskmenuextension.h      |    42 +
 qpy/QtGui/qpyopengl_add_constants.cpp              |  5132 ++++++++
 qpy/QtGui/qpyopengl_api.h                          |    79 +
 qpy/QtGui/qpyopengl_array_convertors.cpp           |   200 +
 qpy/QtGui/qpyopengl_attribute_array.cpp            |   295 +
 qpy/QtGui/qpyopengl_data_cache.cpp                 |   286 +
 qpy/QtGui/qpyopengl_data_cache.h                   |   106 +
 qpy/QtGui/qpyopengl_init.cpp                       |    57 +
 qpy/QtGui/qpyopengl_uniform_value_array.cpp        |   446 +
 qpy/QtGui/qpyopengl_value_array.cpp                |   434 +
 qpy/QtGui/qpyopengl_version_functions.cpp          |   157 +
 qpy/QtQml/qpyqml_api.h                             |    60 +
 qpy/QtQml/qpyqml_listdata.cpp                      |    52 +
 qpy/QtQml/qpyqml_listdata.h                        |    50 +
 qpy/QtQml/qpyqml_post_init.cpp                     |    57 +
 qpy/QtQml/qpyqml_qjsvalue.cpp                      |   119 +
 qpy/QtQml/qpyqml_register_singleton_type.cpp       |   168 +
 qpy/QtQml/qpyqml_register_type.cpp                 |   411 +
 qpy/QtQml/qpyqmllistproperty.cpp                   |   395 +
 qpy/QtQml/qpyqmllistproperty.h                     |    36 +
 qpy/QtQml/qpyqmlobject.cpp                         |   446 +
 qpy/QtQml/qpyqmlobject.h                           |   164 +
 qpy/QtQml/qpyqmlsingletonobject.cpp                |   110 +
 qpy/QtQml/qpyqmlsingletonobject.h                  |   100 +
 qpy/QtQuick/qpyquick_api.h                         |    29 +
 qpy/QtQuick/qpyquick_chimera_helpers.cpp           |   157 +
 qpy/QtQuick/qpyquick_chimera_helpers.h             |    42 +
 qpy/QtQuick/qpyquick_post_init.cpp                 |    46 +
 qpy/QtQuick/qpyquick_register_type.cpp             |    40 +
 qpy/QtQuick/qpyquick_register_type.h               |    39 +
 qpy/QtQuick/qpyquickitem.cpp                       |   175 +
 qpy/QtQuick/qpyquickitem.h                         |    97 +
 qpy/QtQuick/qpyquickpainteditem.cpp                |   176 +
 qpy/QtQuick/qpyquickpainteditem.h                  |    97 +
 sip/Enginio/Enginiomod.sip                         |    55 +
 sip/Enginio/enginio.sip                            |    68 +
 sip/Enginio/enginioclient.sip                      |    83 +
 sip/Enginio/enginioclientconnection.sip            |    52 +
 sip/Enginio/enginioidentity.sip                    |    32 +
 sip/Enginio/enginiomodel.sip                       |    53 +
 sip/Enginio/enginiooauth2authentication.sip        |    44 +
 sip/Enginio/enginioreply.sip                       |    55 +
 sip/QAxContainer/QAxContainermod.sip               |    48 +
 sip/QAxContainer/qaxbase.sip                       |   153 +
 sip/QAxContainer/qaxobject.sip                     |    66 +
 sip/QAxContainer/qaxwidget.sip                     |    52 +
 sip/QtBluetooth/QtBluetoothmod.sip                 |    61 +
 sip/QtBluetooth/qbluetooth.sip                     |    44 +
 sip/QtBluetooth/qbluetoothaddress.sip              |    46 +
 sip/QtBluetooth/qbluetoothdevicediscoveryagent.sip |    70 +
 sip/QtBluetooth/qbluetoothdeviceinfo.sip           |   205 +
 sip/QtBluetooth/qbluetoothhostinfo.sip             |    41 +
 sip/QtBluetooth/qbluetoothlocaldevice.sip          |    87 +
 sip/QtBluetooth/qbluetoothserver.sip               |    98 +
 .../qbluetoothservicediscoveryagent.sip            |    74 +
 sip/QtBluetooth/qbluetoothserviceinfo.sip          |    95 +
 sip/QtBluetooth/qbluetoothsocket.sip               |   133 +
 sip/QtBluetooth/qbluetoothtransfermanager.sip      |    40 +
 sip/QtBluetooth/qbluetoothtransferreply.sip        |    68 +
 sip/QtBluetooth/qbluetoothtransferrequest.sip      |    51 +
 sip/QtBluetooth/qbluetoothuuid.sip                 |   158 +
 sip/QtBluetooth/qpybluetooth_qlist.sip             |   234 +
 sip/QtBluetooth/qpybluetooth_quint128.sip          |   115 +
 sip/QtCore/QtCoremod.sip                           |   214 +
 sip/QtCore/qabstractanimation.sip                  |    85 +
 sip/QtCore/qabstracteventdispatcher.sip            |    73 +
 sip/QtCore/qabstractitemmodel.sip                  |   304 +
 sip/QtCore/qabstractnativeeventfilter.sip          |    36 +
 sip/QtCore/qabstractproxymodel.sip                 |    68 +
 sip/QtCore/qabstractstate.sip                      |    46 +
 sip/QtCore/qabstracttransition.sip                 |    87 +
 sip/QtCore/qanimationgroup.sip                     |    46 +
 sip/QtCore/qbasictimer.sip                         |    37 +
 sip/QtCore/qbitarray.sip                           |    88 +
 sip/QtCore/qbuffer.sip                             |    91 +
 sip/QtCore/qbytearray.sip                          |   418 +
 sip/QtCore/qbytearraymatcher.sip                   |    37 +
 sip/QtCore/qchar.sip                               |    71 +
 sip/QtCore/qcollator.sip                           |    76 +
 sip/QtCore/qcommandlineoption.sip                  |    47 +
 sip/QtCore/qcommandlineparser.sip                  |    69 +
 sip/QtCore/qcoreapplication.sip                    |   304 +
 sip/QtCore/qcoreevent.sip                          |   253 +
 sip/QtCore/qcryptographichash.sip                  |    64 +
 sip/QtCore/qdatastream.sip                         |   427 +
 sip/QtCore/qdatetime.sip                           |   538 +
 sip/QtCore/qdir.sip                                |   184 +
 sip/QtCore/qdiriterator.sip                        |    58 +
 sip/QtCore/qeasingcurve.sip                        |   289 +
 sip/QtCore/qelapsedtimer.sip                       |    59 +
 sip/QtCore/qeventloop.sip                          |    80 +
 sip/QtCore/qeventtransition.sip                    |    45 +
 sip/QtCore/qfile.sip                               |    64 +
 sip/QtCore/qfiledevice.sip                         |   184 +
 sip/QtCore/qfileinfo.sip                           |    89 +
 sip/QtCore/qfileselector.sip                       |    41 +
 sip/QtCore/qfilesystemwatcher.sip                  |    43 +
 sip/QtCore/qfinalstate.sip                         |    40 +
 sip/QtCore/qglobal.sip                             |   230 +
 sip/QtCore/qhistorystate.sip                       |    51 +
 sip/QtCore/qidentityproxymodel.sip                 |    52 +
 sip/QtCore/qiodevice.sip                           |   303 +
 sip/QtCore/qitemselectionmodel.sip                 |   289 +
 sip/QtCore/qjsonarray.sip                          |   130 +
 sip/QtCore/qjsondocument.sip                       |    97 +
 sip/QtCore/qjsonobject.sip                         |   135 +
 sip/QtCore/qjsonvalue.sip                          |    71 +
 sip/QtCore/qlibrary.sip                            |    65 +
 sip/QtCore/qlibraryinfo.sip                        |    58 +
 sip/QtCore/qline.sip                               |   195 +
 sip/QtCore/qlocale.sip                             |  1119 ++
 sip/QtCore/qlockfile.sip                           |    57 +
 sip/QtCore/qlogging.sip                            |   191 +
 sip/QtCore/qmargins.sip                            |   186 +
 sip/QtCore/qmessageauthenticationcode.sip          |    46 +
 sip/QtCore/qmetaobject.sip                         |   212 +
 sip/QtCore/qmetatype.sip                           |   138 +
 sip/QtCore/qmimedata.sip                           |    59 +
 sip/QtCore/qmimedatabase.sip                       |    54 +
 sip/QtCore/qmimetype.sip                           |    50 +
 sip/QtCore/qmutex.sip                              |    74 +
 sip/QtCore/qnamespace.sip                          |  1560 +++
 sip/QtCore/qnumeric.sip                            |    35 +
 sip/QtCore/qobject.sip                             |   719 ++
 sip/QtCore/qobjectcleanuphandler.sip               |    36 +
 sip/QtCore/qobjectdefs.sip                         |   170 +
 sip/QtCore/qparallelanimationgroup.sip             |    42 +
 sip/QtCore/qpauseanimation.sip                     |    42 +
 sip/QtCore/qpluginloader.sip                       |    46 +
 sip/QtCore/qpoint.sip                              |   207 +
 sip/QtCore/qprocess.sip                            |   240 +
 sip/QtCore/qpropertyanimation.sip                  |    45 +
 sip/QtCore/qpycore_qhash.sip                       |   249 +
 sip/QtCore/qpycore_qlist.sip                       |   927 ++
 sip/QtCore/qpycore_qmap.sip                        |   350 +
 sip/QtCore/qpycore_qpair.sip                       |   220 +
 sip/QtCore/qpycore_qset.sip                        |   242 +
 sip/QtCore/qpycore_qvector.sip                     |   417 +
 sip/QtCore/qreadwritelock.sip                      |   104 +
 sip/QtCore/qrect.sip                               |   334 +
 sip/QtCore/qregexp.sip                             |   134 +
 sip/QtCore/qregularexpression.sip                  |   185 +
 sip/QtCore/qresource.sip                           |    68 +
 sip/QtCore/qrunnable.sip                           |    35 +
 sip/QtCore/qsavefile.sip                           |    52 +
 sip/QtCore/qsemaphore.sip                          |    40 +
 sip/QtCore/qsequentialanimationgroup.sip           |    48 +
 sip/QtCore/qsettings.sip                           |   107 +
 sip/QtCore/qsharedmemory.sip                       |    78 +
 sip/QtCore/qsignalmapper.sip                       |    56 +
 sip/QtCore/qsignaltransition.sip                   |    61 +
 sip/QtCore/qsize.sip                               |   180 +
 sip/QtCore/qsocketnotifier.sip                     |    54 +
 sip/QtCore/qsortfilterproxymodel.sip               |   102 +
 sip/QtCore/qstandardpaths.sip                      |    77 +
 sip/QtCore/qstate.sip                              |    83 +
 sip/QtCore/qstatemachine.sip                       |   141 +
 sip/QtCore/qstring.sip                             |    79 +
 sip/QtCore/qstringlist.sip                         |   135 +
 sip/QtCore/qstringlistmodel.sip                    |    46 +
 sip/QtCore/qsysinfo.sip                            |   127 +
 sip/QtCore/qsystemsemaphore.sip                    |    58 +
 sip/QtCore/qtemporarydir.sip                       |    41 +
 sip/QtCore/qtemporaryfile.sip                      |    49 +
 sip/QtCore/qtextboundaryfinder.sip                 |    71 +
 sip/QtCore/qtextcodec.sip                          |   121 +
 sip/QtCore/qtextstream.sip                         |   149 +
 sip/QtCore/qthread.sip                             |    90 +
 sip/QtCore/qthreadpool.sip                         |    66 +
 sip/QtCore/qtimeline.sip                           |   100 +
 sip/QtCore/qtimer.sip                              |    86 +
 sip/QtCore/qtimezone.sip                           |   111 +
 sip/QtCore/qtranslator.sip                         |    40 +
 sip/QtCore/qurl.sip                                |   297 +
 sip/QtCore/qurlquery.sip                           |    57 +
 sip/QtCore/quuid.sip                               |   100 +
 sip/QtCore/qvariant.sip                            |   180 +
 sip/QtCore/qvariantanimation.sip                   |    60 +
 sip/QtCore/qwaitcondition.sip                      |    39 +
 sip/QtCore/qwineventnotifier.sip                   |    51 +
 sip/QtCore/qxmlstream.sip                          |   456 +
 sip/QtDBus/QtDBusmod.sip                           |    61 +
 sip/QtDBus/qdbusabstractadaptor.sip                |    38 +
 sip/QtDBus/qdbusabstractinterface.sip              |   156 +
 sip/QtDBus/qdbusargument.sip                       |   184 +
 sip/QtDBus/qdbusconnection.sip                     |   245 +
 sip/QtDBus/qdbusconnectioninterface.sip            |    70 +
 sip/QtDBus/qdbuserror.sip                          |    68 +
 sip/QtDBus/qdbusextratypes.sip                     |    82 +
 sip/QtDBus/qdbusinterface.sip                      |    32 +
 sip/QtDBus/qdbusmessage.sip                        |    68 +
 sip/QtDBus/qdbuspendingcall.sip                    |    54 +
 sip/QtDBus/qdbusservicewatcher.sip                 |    64 +
 sip/QtDBus/qdbusunixfiledescriptor.sip             |    39 +
 sip/QtDBus/qpydbuspendingreply.sip                 |    44 +
 sip/QtDBus/qpydbusreply.sip                        |   238 +
 sip/QtDesigner/QtDesignermod.sip                   |    72 +
 sip/QtDesigner/abstractactioneditor.sip            |    38 +
 sip/QtDesigner/abstractformbuilder.sip             |    40 +
 sip/QtDesigner/abstractformeditor.sip              |    46 +
 sip/QtDesigner/abstractformwindow.sip              |   106 +
 sip/QtDesigner/abstractformwindowcursor.sip        |    64 +
 sip/QtDesigner/abstractformwindowmanager.sip       |    88 +
 sip/QtDesigner/abstractobjectinspector.sip         |    36 +
 sip/QtDesigner/abstractpropertyeditor.sip          |    44 +
 sip/QtDesigner/abstractwidgetbox.sip               |    36 +
 sip/QtDesigner/container.sip                       |    40 +
 sip/QtDesigner/customwidget.sip                    |    54 +
 sip/QtDesigner/default_extensionfactory.sip        |    36 +
 sip/QtDesigner/extension.sip                       |    45 +
 sip/QtDesigner/formbuilder.sip                     |    37 +
 sip/QtDesigner/membersheet.sip                     |    45 +
 sip/QtDesigner/propertysheet.sip                   |    47 +
 sip/QtDesigner/qextensionmanager.sip               |    77 +
 sip/QtDesigner/qpydesignercontainerextension.sip   |    32 +
 .../qpydesignercustomwidgetcollectionplugin.sip    |    33 +
 sip/QtDesigner/qpydesignercustomwidgetplugin.sip   |    32 +
 sip/QtDesigner/qpydesignermembersheetextension.sip |    32 +
 .../qpydesignerpropertysheetextension.sip          |    33 +
 sip/QtDesigner/qpydesignertaskmenuextension.sip    |    32 +
 sip/QtDesigner/taskmenu.sip                        |    33 +
 sip/QtGui/QtGuimod.sip                             |   136 +
 sip/QtGui/opengl_types.sip                         |    43 +
 sip/QtGui/qabstracttextdocumentlayout.sip          |    96 +
 sip/QtGui/qbackingstore.sip                        |    43 +
 sip/QtGui/qbitmap.sip                              |    46 +
 sip/QtGui/qbrush.sip                               |   227 +
 sip/QtGui/qclipboard.sip                           |    95 +
 sip/QtGui/qcolor.sip                               |   180 +
 sip/QtGui/qcursor.sip                              |    77 +
 sip/QtGui/qdesktopservices.sip                     |    61 +
 sip/QtGui/qdrag.sip                                |    59 +
 sip/QtGui/qevent.sip                               |   825 ++
 sip/QtGui/qfont.sip                                |   210 +
 sip/QtGui/qfontdatabase.sip                        |   109 +
 sip/QtGui/qfontinfo.sip                            |    47 +
 sip/QtGui/qfontmetrics.sip                         |   177 +
 sip/QtGui/qgenericmatrix.sip                       |  1214 ++
 sip/QtGui/qglyphrun.sip                            |    72 +
 sip/QtGui/qguiapplication.sip                      |   271 +
 sip/QtGui/qicon.sip                                |    88 +
 sip/QtGui/qiconengine.sip                          |    60 +
 sip/QtGui/qimage.sip                               |   235 +
 sip/QtGui/qimageiohandler.sip                      |    70 +
 sip/QtGui/qimagereader.sip                         |    90 +
 sip/QtGui/qimagewriter.sip                         |    66 +
 sip/QtGui/qinputmethod.sip                         |    75 +
 sip/QtGui/qkeysequence.sip                         |   233 +
 sip/QtGui/qmatrix4x4.sip                           |   311 +
 sip/QtGui/qmovie.sip                               |    90 +
 sip/QtGui/qoffscreensurface.sip                    |    52 +
 sip/QtGui/qopenglbuffer.sip                        |    84 +
 sip/QtGui/qopenglcontext.sip                       |   141 +
 sip/QtGui/qopengldebug.sip                         |   156 +
 sip/QtGui/qopenglframebufferobject.sip             |   108 +
 sip/QtGui/qopenglpaintdevice.sip                   |    60 +
 sip/QtGui/qopenglpixeltransferoptions.sip          |    56 +
 sip/QtGui/qopenglshaderprogram.sip                 |   343 +
 sip/QtGui/qopengltexture.sip                       |   434 +
 sip/QtGui/qopengltimerquery.sip                    |    81 +
 sip/QtGui/qopenglversionfunctions.sip              |    36 +
 sip/QtGui/qopenglvertexarrayobject.sip             |    74 +
 sip/QtGui/qpagedpaintdevice.sip                    |   391 +
 sip/QtGui/qpagelayout.sip                          |   103 +
 sip/QtGui/qpagesize.sip                            |   226 +
 sip/QtGui/qpaintdevice.sip                         |    70 +
 sip/QtGui/qpaintengine.sip                         |   200 +
 sip/QtGui/qpainter.sip                             |   560 +
 sip/QtGui/qpainterpath.sip                         |   168 +
 sip/QtGui/qpalette.sip                             |   128 +
 sip/QtGui/qpdfwriter.sip                           |    56 +
 sip/QtGui/qpen.sip                                 |   105 +
 sip/QtGui/qpicture.sip                             |   191 +
 sip/QtGui/qpixmap.sip                              |   109 +
 sip/QtGui/qpixmapcache.sip                         |    74 +
 sip/QtGui/qpolygon.sip                             |   524 +
 sip/QtGui/qpygui_qlist.sip                         |   104 +
 sip/QtGui/qpygui_qpair.sip                         |   216 +
 sip/QtGui/qpygui_qvector.sip                       |   440 +
 sip/QtGui/qquaternion.sip                          |   116 +
 sip/QtGui/qrawfont.sip                             |   100 +
 sip/QtGui/qregion.sip                              |   106 +
 sip/QtGui/qrgb.sip                                 |    42 +
 sip/QtGui/qscreen.sip                              |    76 +
 sip/QtGui/qsessionmanager.sip                      |    62 +
 sip/QtGui/qstandarditemmodel.sip                   |   207 +
 sip/QtGui/qstatictext.sip                          |    55 +
 sip/QtGui/qstylehints.sip                          |    53 +
 sip/QtGui/qsurface.sip                             |    58 +
 sip/QtGui/qsurfaceformat.sip                       |   127 +
 sip/QtGui/qsyntaxhighlighter.sip                   |    89 +
 sip/QtGui/qtextcursor.sip                          |   155 +
 sip/QtGui/qtextdocument.sip                        |   199 +
 sip/QtGui/qtextdocumentfragment.sip                |    41 +
 sip/QtGui/qtextdocumentwriter.sip                  |    48 +
 sip/QtGui/qtextformat.sip                          |   548 +
 sip/QtGui/qtextlayout.sip                          |   169 +
 sip/QtGui/qtextlist.sip                            |    44 +
 sip/QtGui/qtextobject.sip                          |   307 +
 sip/QtGui/qtextoption.sip                          |   101 +
 sip/QtGui/qtexttable.sip                           |    78 +
 sip/QtGui/qtouchdevice.sip                         |    68 +
 sip/QtGui/qtransform.sip                           |   122 +
 sip/QtGui/qvalidator.sip                           |   144 +
 sip/QtGui/qvector2d.sip                            |   107 +
 sip/QtGui/qvector3d.sip                            |   119 +
 sip/QtGui/qvector4d.sip                            |   119 +
 sip/QtGui/qwindow.sip                              |   225 +
 sip/QtGui/qwindowdefs.sip                          |    24 +
 sip/QtHelp/QtHelpmod.sip                           |    56 +
 sip/QtHelp/qhelpcontentwidget.sip                  |    76 +
 sip/QtHelp/qhelpengine.sip                         |    37 +
 sip/QtHelp/qhelpenginecore.sip                     |   102 +
 sip/QtHelp/qhelpindexwidget.sip                    |    59 +
 sip/QtHelp/qhelpsearchengine.sip                   |    70 +
 sip/QtHelp/qhelpsearchquerywidget.sip              |    51 +
 sip/QtHelp/qhelpsearchresultwidget.sip             |    35 +
 sip/QtMacExtras/QtMacExtrasmod.sip                 |    46 +
 sip/QtMacExtras/qmacpasteboardmime.sip             |    60 +
 sip/QtMultimedia/QtMultimediamod.sip               |    87 +
 sip/QtMultimedia/qabstractvideobuffer.sip          |    80 +
 sip/QtMultimedia/qabstractvideosurface.sip         |   116 +
 sip/QtMultimedia/qaudio.sip                        |    51 +
 sip/QtMultimedia/qaudiobuffer.sip                  |    44 +
 sip/QtMultimedia/qaudiodecoder.sip                 |    83 +
 sip/QtMultimedia/qaudiodeviceinfo.sip              |    49 +
 sip/QtMultimedia/qaudioformat.sip                  |    69 +
 sip/QtMultimedia/qaudioinput.sip                   |    61 +
 sip/QtMultimedia/qaudiooutput.sip                  |    63 +
 sip/QtMultimedia/qaudioprobe.sip                   |    39 +
 sip/QtMultimedia/qaudiorecorder.sip                |    46 +
 sip/QtMultimedia/qcamera.sip                       |   161 +
 sip/QtMultimedia/qcameraexposure.sip               |   121 +
 sip/QtMultimedia/qcamerafocus.sip                  |   109 +
 sip/QtMultimedia/qcameraimagecapture.sip           |    98 +
 sip/QtMultimedia/qcameraimageprocessing.sip        |    63 +
 sip/QtMultimedia/qcamerainfo.sip                   |    47 +
 sip/QtMultimedia/qmediabindableinterface.sip       |    35 +
 sip/QtMultimedia/qmediacontent.sip                 |    46 +
 sip/QtMultimedia/qmediacontrol.sip                 |    34 +
 sip/QtMultimedia/qmediaencodersettings.sip         |   110 +
 sip/QtMultimedia/qmediametadata.sip                |   120 +
 sip/QtMultimedia/qmediaobject.sip                  |    53 +
 sip/QtMultimedia/qmediaplayer.sip                  |   134 +
 sip/QtMultimedia/qmediaplaylist.sip                |    96 +
 sip/QtMultimedia/qmediarecorder.sip                |   119 +
 sip/QtMultimedia/qmediaresource.sip                |    62 +
 sip/QtMultimedia/qmediaservice.sip                 |    36 +
 sip/QtMultimedia/qmediatimerange.sip               |    82 +
 sip/QtMultimedia/qmultimedia.sip                   |    61 +
 sip/QtMultimedia/qpymultimedia_qlist.sip           |   321 +
 sip/QtMultimedia/qradiodata.sip                    |   120 +
 sip/QtMultimedia/qradiotuner.sip                   |   114 +
 sip/QtMultimedia/qsound.sip                        |    47 +
 sip/QtMultimedia/qsoundeffect.sip                  |    78 +
 sip/QtMultimedia/qvideoframe.sip                   |   127 +
 sip/QtMultimedia/qvideoprobe.sip                   |    39 +
 sip/QtMultimedia/qvideosurfaceformat.sip           |    75 +
 sip/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip |    52 +
 sip/QtMultimediaWidgets/qcameraviewfinder.sip      |    39 +
 sip/QtMultimediaWidgets/qgraphicsvideoitem.sip     |    70 +
 sip/QtMultimediaWidgets/qvideowidget.sip           |    93 +
 sip/QtNetwork/QtNetworkmod.sip                     |    80 +
 sip/QtNetwork/qabstractnetworkcache.sip            |    85 +
 sip/QtNetwork/qabstractsocket.sip                  |   309 +
 sip/QtNetwork/qauthenticator.sip                   |    44 +
 sip/QtNetwork/qdnslookup.sip                       |   178 +
 sip/QtNetwork/qhostaddress.sip                     |   161 +
 sip/QtNetwork/qhostinfo.sip                        |    85 +
 sip/QtNetwork/qhttpmultipart.sip                   |    67 +
 sip/QtNetwork/qlocalserver.sip                     |    74 +
 sip/QtNetwork/qlocalsocket.sip                     |   136 +
 sip/QtNetwork/qnetworkaccessmanager.sip            |   107 +
 sip/QtNetwork/qnetworkconfigmanager.sip            |    67 +
 sip/QtNetwork/qnetworkconfiguration.sip            |   101 +
 sip/QtNetwork/qnetworkcookie.sip                   |    61 +
 sip/QtNetwork/qnetworkcookiejar.sip                |    45 +
 sip/QtNetwork/qnetworkdiskcache.sip                |    53 +
 sip/QtNetwork/qnetworkinterface.sip                |    85 +
 sip/QtNetwork/qnetworkproxy.sip                    |   139 +
 sip/QtNetwork/qnetworkreply.sip                    |   147 +
 sip/QtNetwork/qnetworkrequest.sip                  |   117 +
 sip/QtNetwork/qnetworksession.sip                  |   101 +
 sip/QtNetwork/qpynetwork_qhash.sip                 |   129 +
 sip/QtNetwork/qpynetwork_qmap.sip                  |   159 +
 sip/QtNetwork/qssl.sip                             |    94 +
 sip/QtNetwork/qsslcertificate.sip                  |    79 +
 sip/QtNetwork/qsslcertificateextension.sip         |    43 +
 sip/QtNetwork/qsslcipher.sip                       |    53 +
 sip/QtNetwork/qsslconfiguration.sip                |   115 +
 sip/QtNetwork/qsslerror.sip                        |    75 +
 sip/QtNetwork/qsslkey.sip                          |    51 +
 sip/QtNetwork/qsslsocket.sip                       |   185 +
 sip/QtNetwork/qtcpserver.sip                       |    61 +
 sip/QtNetwork/qtcpsocket.sip                       |    35 +
 sip/QtNetwork/qudpsocket.sip                       |    79 +
 sip/QtOpenGL/QtOpenGLmod.sip                       |    50 +
 sip/QtOpenGL/qgl.sip                               |   343 +
 sip/QtPositioning/QtPositioningmod.sip             |    58 +
 sip/QtPositioning/qgeoaddress.sip                  |    60 +
 sip/QtPositioning/qgeoareamonitorinfo.sip          |    63 +
 sip/QtPositioning/qgeoareamonitorsource.sip        |    73 +
 sip/QtPositioning/qgeocircle.sip                   |    49 +
 sip/QtPositioning/qgeocoordinate.sip               |    82 +
 sip/QtPositioning/qgeolocation.sip                 |    46 +
 sip/QtPositioning/qgeopositioninfo.sip             |    71 +
 sip/QtPositioning/qgeopositioninfosource.sip       |   118 +
 sip/QtPositioning/qgeorectangle.sip                |    69 +
 sip/QtPositioning/qgeosatelliteinfo.sip            |    74 +
 sip/QtPositioning/qgeosatelliteinfosource.sip      |    66 +
 sip/QtPositioning/qgeoshape.sip                    |    82 +
 sip/QtPositioning/qnmeapositioninfosource.sip      |    69 +
 sip/QtPrintSupport/QtPrintSupportmod.sip           |    57 +
 sip/QtPrintSupport/qabstractprintdialog.sip        |   171 +
 sip/QtPrintSupport/qpagesetupdialog.sip            |    86 +
 sip/QtPrintSupport/qprintdialog.sip                |    98 +
 sip/QtPrintSupport/qprintengine.sip                |    86 +
 sip/QtPrintSupport/qprinter.sip                    |   213 +
 sip/QtPrintSupport/qprinterinfo.sip                |    81 +
 sip/QtPrintSupport/qprintpreviewdialog.sip         |    59 +
 sip/QtPrintSupport/qprintpreviewwidget.sip         |    85 +
 sip/QtPrintSupport/qpyprintsupport_qlist.sip       |   121 +
 sip/QtQml/QtQmlmod.sip                             |    71 +
 sip/QtQml/qjsengine.sip                            |    94 +
 sip/QtQml/qjsvalue.sip                             |    83 +
 sip/QtQml/qjsvalueiterator.sip                     |    39 +
 sip/QtQml/qmlattachedpropertiesobject.sip          |    46 +
 sip/QtQml/qmlregistertype.sip                      |    91 +
 sip/QtQml/qpyqmllistproperty.sip                   |    74 +
 sip/QtQml/qqmlabstracturlinterceptor.sip           |    45 +
 sip/QtQml/qqmlapplicationengine.sip                |    50 +
 sip/QtQml/qqmlcomponent.sip                        |    77 +
 sip/QtQml/qqmlcontext.sip                          |    48 +
 sip/QtQml/qqmlengine.sip                           |   157 +
 sip/QtQml/qqmlerror.sip                            |    49 +
 sip/QtQml/qqmlexpression.sip                       |    55 +
 sip/QtQml/qqmlextensionplugin.sip                  |    40 +
 sip/QtQml/qqmlfileselector.sip                     |    42 +
 sip/QtQml/qqmlincubator.sip                        |    84 +
 sip/QtQml/qqmllist.sip                             |    47 +
 sip/QtQml/qqmlnetworkaccessmanagerfactory.sip      |    32 +
 sip/QtQml/qqmlparserstatus.sip                     |    34 +
 sip/QtQml/qqmlproperty.sip                         |   120 +
 sip/QtQml/qqmlpropertymap.sip                      |    50 +
 sip/QtQml/qqmlpropertyvaluesource.sip              |    33 +
 sip/QtQml/qqmlscriptstring.sip                     |    39 +
 sip/QtQuick/QtQuickmod.sip                         |    66 +
 sip/QtQuick/qquickframebufferobject.sip            |    62 +
 sip/QtQuick/qquickimageprovider.sip                |    52 +
 sip/QtQuick/qquickitem.sip                         |   259 +
 sip/QtQuick/qquickpainteditem.sip                  |    85 +
 sip/QtQuick/qquicktextdocument.sip                 |    39 +
 sip/QtQuick/qquickview.sip                         |    77 +
 sip/QtQuick/qquickwindow.sip                       |   197 +
 sip/QtQuick/qsgflatcolormaterial.sip               |    36 +
 sip/QtQuick/qsggeometry.sip                        |   342 +
 sip/QtQuick/qsgmaterial.sip                        |   228 +
 sip/QtQuick/qsgnode.sip                            |   347 +
 sip/QtQuick/qsgsimplerectnode.sip                  |    37 +
 sip/QtQuick/qsgsimpletexturenode.sip               |    65 +
 sip/QtQuick/qsgtexture.sip                         |    74 +
 sip/QtQuick/qsgtexturematerial.sip                 |    55 +
 sip/QtQuick/qsgtextureprovider.sip                 |    34 +
 sip/QtQuick/qsgvertexcolormaterial.sip             |    36 +
 sip/QtQuickWidgets/QtQuickWidgetsmod.sip           |    52 +
 sip/QtQuickWidgets/qquickwidget.sip                |   100 +
 sip/QtSensors/QtSensorsmod.sip                     |    64 +
 sip/QtSensors/qaccelerometer.sip                   |    84 +
 sip/QtSensors/qaltimeter.sip                       |    67 +
 sip/QtSensors/qambientlightsensor.sip              |    77 +
 sip/QtSensors/qambienttemperaturesensor.sip        |    67 +
 sip/QtSensors/qcompass.sip                         |    69 +
 sip/QtSensors/qgyroscope.sip                       |    71 +
 sip/QtSensors/qholstersensor.sip                   |    67 +
 sip/QtSensors/qirproximitysensor.sip               |    67 +
 sip/QtSensors/qlightsensor.sip                     |    72 +
 sip/QtSensors/qmagnetometer.sip                    |    78 +
 sip/QtSensors/qorientationsensor.sip               |    78 +
 sip/QtSensors/qpressuresensor.sip                  |    73 +
 sip/QtSensors/qproximitysensor.sip                 |    67 +
 sip/QtSensors/qrotationsensor.sip                  |    74 +
 sip/QtSensors/qsensor.sip                          |   241 +
 sip/QtSensors/qtapsensor.sip                       |    91 +
 sip/QtSensors/qtiltsensor.sip                      |    70 +
 sip/QtSerialPort/QtSerialPortmod.sip               |    49 +
 sip/QtSerialPort/qserialport.sip                   |   328 +
 sip/QtSerialPort/qserialportinfo.sip               |    56 +
 sip/QtSql/QtSqlmod.sip                             |    61 +
 sip/QtSql/qsql.sip                                 |    66 +
 sip/QtSql/qsqldatabase.sip                         |    94 +
 sip/QtSql/qsqldriver.sip                           |   144 +
 sip/QtSql/qsqlerror.sip                            |    65 +
 sip/QtSql/qsqlfield.sip                            |    68 +
 sip/QtSql/qsqlindex.sip                            |    41 +
 sip/QtSql/qsqlquery.sip                            |    85 +
 sip/QtSql/qsqlquerymodel.sip                       |    63 +
 sip/QtSql/qsqlrecord.sip                           |    63 +
 sip/QtSql/qsqlrelationaldelegate.sip               |    34 +
 sip/QtSql/qsqlrelationaltablemodel.sip             |    72 +
 sip/QtSql/qsqlresult.sip                           |    90 +
 sip/QtSql/qsqltablemodel.sip                       |    97 +
 sip/QtSvg/QtSvgmod.sip                             |    53 +
 sip/QtSvg/qgraphicssvgitem.sip                     |    60 +
 sip/QtSvg/qsvggenerator.sip                        |    52 +
 sip/QtSvg/qsvgrenderer.sip                         |    90 +
 sip/QtSvg/qsvgwidget.sip                           |    45 +
 sip/QtTest/QtTestmod.sip                           |    54 +
 sip/QtTest/qsignalspy.sip                          |   100 +
 sip/QtTest/qtestcase.sip                           |    30 +
 sip/QtTest/qtestkeyboard.sip                       |    53 +
 sip/QtTest/qtestmouse.sip                          |    51 +
 sip/QtTest/qtestsystem.sip                         |    44 +
 sip/QtTest/qtesttouch.sip                          |    62 +
 sip/QtWebKit/QtWebKitmod.sip                       |    57 +
 sip/QtWebKit/qwebdatabase.sip                      |    40 +
 sip/QtWebKit/qwebelement.sip                       |   137 +
 sip/QtWebKit/qwebhistory.sip                       |    80 +
 sip/QtWebKit/qwebhistoryinterface.sip              |    36 +
 sip/QtWebKit/qwebkitglobal.sip                     |    29 +
 sip/QtWebKit/qwebpluginfactory.sip                 |   109 +
 sip/QtWebKit/qwebsecurityorigin.sip                |    62 +
 sip/QtWebKit/qwebsettings.sip                      |   156 +
 sip/QtWebKitWidgets/QtWebKitWidgetsmod.sip         |    55 +
 sip/QtWebKitWidgets/qgraphicswebview.sip           |   130 +
 sip/QtWebKitWidgets/qwebframe.sip                  |   160 +
 sip/QtWebKitWidgets/qwebinspector.sip              |    42 +
 sip/QtWebKitWidgets/qwebpage.sip                   |   432 +
 sip/QtWebKitWidgets/qwebview.sip                   |   140 +
 sip/QtWebSockets/QtWebSocketsmod.sip               |    53 +
 sip/QtWebSockets/qmaskgenerator.sip                |    41 +
 sip/QtWebSockets/qwebsocket.sip                    |   132 +
 sip/QtWebSockets/qwebsocketcorsauthenticator.sip   |    41 +
 sip/QtWebSockets/qwebsocketprotocol.sip            |    62 +
 sip/QtWebSockets/qwebsocketserver.sip              |    87 +
 sip/QtWidgets/QtWidgetsmod.sip                     |   169 +
 sip/QtWidgets/qabstractbutton.sip                  |    82 +
 sip/QtWidgets/qabstractitemdelegate.sip            |    58 +
 sip/QtWidgets/qabstractitemview.sip                |   286 +
 sip/QtWidgets/qabstractscrollarea.sip              |    96 +
 sip/QtWidgets/qabstractslider.sip                  |   101 +
 sip/QtWidgets/qabstractspinbox.sip                 |   131 +
 sip/QtWidgets/qaction.sip                          |   130 +
 sip/QtWidgets/qactiongroup.sip                     |    54 +
 sip/QtWidgets/qapplication.sip                     |   345 +
 sip/QtWidgets/qboxlayout.sip                       |   154 +
 sip/QtWidgets/qbuttongroup.sip                     |    59 +
 sip/QtWidgets/qcalendarwidget.sip                  |   118 +
 sip/QtWidgets/qcheckbox.sip                        |    54 +
 sip/QtWidgets/qcolordialog.sip                     |    90 +
 sip/QtWidgets/qcolumnview.sip                      |    68 +
 sip/QtWidgets/qcombobox.sip                        |   154 +
 sip/QtWidgets/qcommandlinkbutton.sip               |    46 +
 sip/QtWidgets/qcommonstyle.sip                     |    53 +
 sip/QtWidgets/qcompleter.sip                       |    99 +
 sip/QtWidgets/qdatawidgetmapper.sip                |    72 +
 sip/QtWidgets/qdatetimeedit.sip                    |   155 +
 sip/QtWidgets/qdesktopwidget.sip                   |    55 +
 sip/QtWidgets/qdial.sip                            |    56 +
 sip/QtWidgets/qdialog.sip                          |   101 +
 sip/QtWidgets/qdialogbuttonbox.sip                 |   122 +
 sip/QtWidgets/qdirmodel.sip                        |    82 +
 sip/QtWidgets/qdockwidget.sip                      |    80 +
 sip/QtWidgets/qdrawutil.sip                        |    39 +
 sip/QtWidgets/qerrormessage.sip                    |    44 +
 sip/QtWidgets/qfiledialog.sip                      |   350 +
 sip/QtWidgets/qfileiconprovider.sip                |    75 +
 sip/QtWidgets/qfilesystemmodel.sip                 |    97 +
 sip/QtWidgets/qfocusframe.sip                      |    43 +
 sip/QtWidgets/qfontcombobox.sip                    |    66 +
 sip/QtWidgets/qfontdialog.sip                      |    98 +
 sip/QtWidgets/qformlayout.sip                      |   100 +
 sip/QtWidgets/qframe.sip                           |    79 +
 sip/QtWidgets/qgesture.sip                         |   191 +
 sip/QtWidgets/qgesturerecognizer.sip               |    54 +
 sip/QtWidgets/qgraphicsanchorlayout.sip            |    70 +
 sip/QtWidgets/qgraphicseffect.sip                  |   206 +
 sip/QtWidgets/qgraphicsgridlayout.sip              |   103 +
 sip/QtWidgets/qgraphicsitem.sip                    |   734 ++
 sip/QtWidgets/qgraphicslayout.sip                  |    48 +
 sip/QtWidgets/qgraphicslayoutitem.sip              |    75 +
 sip/QtWidgets/qgraphicslinearlayout.sip            |    82 +
 sip/QtWidgets/qgraphicsproxywidget.sip             |    91 +
 sip/QtWidgets/qgraphicsscene.sip                   |   172 +
 sip/QtWidgets/qgraphicssceneevent.sip              |   246 +
 sip/QtWidgets/qgraphicstransform.sip               |    87 +
 sip/QtWidgets/qgraphicsview.sip                    |   201 +
 sip/QtWidgets/qgraphicswidget.sip                  |   123 +
 sip/QtWidgets/qgridlayout.sip                      |   148 +
 sip/QtWidgets/qgroupbox.sip                        |    65 +
 sip/QtWidgets/qheaderview.sip                      |   177 +
 sip/QtWidgets/qinputdialog.sip                     |   134 +
 sip/QtWidgets/qitemdelegate.sip                    |    54 +
 sip/QtWidgets/qitemeditorfactory.sip               |    49 +
 sip/QtWidgets/qkeyeventtransition.sip              |    44 +
 sip/QtWidgets/qkeysequenceedit.sip                 |    55 +
 sip/QtWidgets/qlabel.sip                           |    93 +
 sip/QtWidgets/qlayout.sip                          |   173 +
 sip/QtWidgets/qlayoutitem.sip                      |   111 +
 sip/QtWidgets/qlcdnumber.sip                       |    85 +
 sip/QtWidgets/qlineedit.sip                        |   161 +
 sip/QtWidgets/qlistview.sip                        |   139 +
 sip/QtWidgets/qlistwidget.sip                      |   194 +
 sip/QtWidgets/qmainwindow.sip                      |   121 +
 sip/QtWidgets/qmdiarea.sip                         |   134 +
 sip/QtWidgets/qmdisubwindow.sip                    |   126 +
 sip/QtWidgets/qmenu.sip                            |   153 +
 sip/QtWidgets/qmenubar.sip                         |    96 +
 sip/QtWidgets/qmessagebox.sip                      |   179 +
 sip/QtWidgets/qmouseeventtransition.sip            |    46 +
 sip/QtWidgets/qplaintextedit.sip                   |   208 +
 sip/QtWidgets/qprogressbar.sip                     |    75 +
 sip/QtWidgets/qprogressdialog.sip                  |    88 +
 sip/QtWidgets/qpushbutton.sip                      |    62 +
 sip/QtWidgets/qpywidgets_qlist.sip                 |   120 +
 sip/QtWidgets/qradiobutton.sip                     |    45 +
 sip/QtWidgets/qrubberband.sip                      |    54 +
 sip/QtWidgets/qscrollarea.sip                      |    55 +
 sip/QtWidgets/qscrollbar.sip                       |    49 +
 sip/QtWidgets/qscroller.sip                        |    88 +
 sip/QtWidgets/qscrollerproperties.sip              |    80 +
 sip/QtWidgets/qshortcut.sip                        |   101 +
 sip/QtWidgets/qsizegrip.sip                        |    48 +
 sip/QtWidgets/qsizepolicy.sip                      |   109 +
 sip/QtWidgets/qslider.sip                          |    60 +
 sip/QtWidgets/qspinbox.sip                         |   110 +
 sip/QtWidgets/qsplashscreen.sip                    |    55 +
 sip/QtWidgets/qsplitter.sip                        |   103 +
 sip/QtWidgets/qstackedlayout.sip                   |   116 +
 sip/QtWidgets/qstackedwidget.sip                   |    54 +
 sip/QtWidgets/qstatusbar.sip                       |    58 +
 sip/QtWidgets/qstyle.sip                           |   675 ++
 sip/QtWidgets/qstyleditemdelegate.sip              |    49 +
 sip/QtWidgets/qstylefactory.sip                    |    32 +
 sip/QtWidgets/qstyleoption.sip                     |  1056 ++
 sip/QtWidgets/qstylepainter.sip                    |    44 +
 sip/QtWidgets/qsystemtrayicon.sip                  |    76 +
 sip/QtWidgets/qtabbar.sip                          |   150 +
 sip/QtWidgets/qtableview.sip                       |   119 +
 sip/QtWidgets/qtablewidget.sip                     |   237 +
 sip/QtWidgets/qtabwidget.sip                       |   133 +
 sip/QtWidgets/qtextbrowser.sip                     |    80 +
 sip/QtWidgets/qtextedit.sip                        |   220 +
 sip/QtWidgets/qtoolbar.sip                         |   114 +
 sip/QtWidgets/qtoolbox.sip                         |    67 +
 sip/QtWidgets/qtoolbutton.sip                      |    76 +
 sip/QtWidgets/qtooltip.sip                         |    44 +
 sip/QtWidgets/qtreeview.sip                        |   157 +
 sip/QtWidgets/qtreewidget.sip                      |   245 +
 sip/QtWidgets/qtreewidgetitemiterator.sip          |    73 +
 sip/QtWidgets/qundogroup.sip                       |    60 +
 sip/QtWidgets/qundostack.sip                       |    95 +
 sip/QtWidgets/qundoview.sip                        |    44 +
 sip/QtWidgets/qwhatsthis.sip                       |    38 +
 sip/QtWidgets/qwidget.sip                          |   443 +
 sip/QtWidgets/qwidgetaction.sip                    |    46 +
 sip/QtWidgets/qwizard.sip                          |   249 +
 sip/QtWinExtras/QtWinExtrasmod.sip                 |    53 +
 sip/QtWinExtras/qwinfunctions.sip                  |   122 +
 sip/QtWinExtras/qwinjumplist.sip                   |    84 +
 sip/QtWinExtras/qwinjumplistcategory.sip           |    69 +
 sip/QtWinExtras/qwinjumplistitem.sip               |    59 +
 sip/QtWinExtras/qwintaskbarbutton.sip              |    53 +
 sip/QtWinExtras/qwintaskbarprogress.sip            |    64 +
 sip/QtWinExtras/qwinthumbnailtoolbar.sip           |    49 +
 sip/QtWinExtras/qwinthumbnailtoolbutton.sip        |    58 +
 sip/QtX11Extras/QtX11Extrasmod.sip                 |    46 +
 sip/QtX11Extras/qx11info_x11.sip                   |    61 +
 sip/QtXmlPatterns/QtXmlPatternsmod.sip             |    62 +
 sip/QtXmlPatterns/qabstractmessagehandler.sip      |    68 +
 sip/QtXmlPatterns/qabstracturiresolver.sip         |    36 +
 sip/QtXmlPatterns/qabstractxmlnodemodel.sip        |   131 +
 sip/QtXmlPatterns/qabstractxmlreceiver.sip         |    47 +
 sip/QtXmlPatterns/qsimplexmlnodemodel.sip          |    38 +
 sip/QtXmlPatterns/qsourcelocation.sip              |    47 +
 sip/QtXmlPatterns/qxmlformatter.sip                |    44 +
 sip/QtXmlPatterns/qxmlname.sip                     |    45 +
 sip/QtXmlPatterns/qxmlnamepool.sip                 |    33 +
 sip/QtXmlPatterns/qxmlquery.sip                    |   116 +
 sip/QtXmlPatterns/qxmlresultitems.sip              |    38 +
 sip/QtXmlPatterns/qxmlschema.sip                   |    50 +
 sip/QtXmlPatterns/qxmlschemavalidator.sip          |    59 +
 sip/QtXmlPatterns/qxmlserializer.sip               |    46 +
 .../_QOpenGLFunctions_2_0mod.sip                   |    46 +
 sip/_QOpenGLFunctions_2_0/qopenglfunctions_2_0.sip |  3043 +++++
 .../_QOpenGLFunctions_ES2mod.sip                   |    46 +
 sip/_QOpenGLFunctions_ES2/qopenglfunctions_es2.sip |   947 ++
 sip/pyqt-gpl.sip                                   |     1 +
 2397 files changed, 255824 insertions(+)

diff --git a/AddToPath.nsh b/AddToPath.nsh
new file mode 100644
index 0000000..ac78783
--- /dev/null
+++ b/AddToPath.nsh
@@ -0,0 +1,227 @@
+;----------------------------------------
+; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02"
+;----------------------------------------
+!verbose 3
+!include "WinMessages.NSH"
+!verbose 4
+;----------------------------------------------------
+!define NT_current_env 'HKCU "Environment"'
+!define NT_all_env     'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
+;====================================================
+; IsNT - Returns 1 if the current system is NT, 0
+;        otherwise.
+;     Output: head of the stack
+;====================================================
+!macro IsNT UN
+Function ${UN}IsNT
+  Push $0
+  ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+  StrCmp $0 "" 0 IsNT_yes
+  ; we are not NT.
+  Pop $0
+  Push 0
+  Return
+ 
+  IsNT_yes:
+    ; NT!!!
+    Pop $0
+    Push 1
+FunctionEnd
+!macroend
+!insertmacro IsNT ""
+!insertmacro IsNT "un."
+;====================================================
+; AddToPath - Adds the given dir to the search path.
+;        Input - head of the stack
+;        Note - Win9x systems requires reboot
+;====================================================
+Function AddToPath
+   Exch $0
+   Push $1
+   Push $2
+ 
+   Call IsNT
+   Pop $1
+   StrCmp $1 1 AddToPath_NT
+      ; Not on NT
+      StrCpy $1 $WINDIR 2
+      FileOpen $1 "$1\autoexec.bat" a
+      FileSeek $1 0 END
+      GetFullPathName /SHORT $0 $0
+      FileWrite $1 "$\r$\nSET PATH=$0;%PATH%$\r$\n"
+      FileClose $1
+      Goto AddToPath_done
+ 
+   AddToPath_NT:
+      Push $4
+      ; Try to set PATH for all.
+      StrCpy $4 "all"
+ 
+      AddToPath_NT_selection_done:
+      StrCmp $4 "current" read_path_NT_current
+         ReadRegStr $1 ${NT_all_env} "PATH"
+         Goto read_path_NT_resume
+      read_path_NT_current:
+         ReadRegStr $1 ${NT_current_env} "PATH"
+      read_path_NT_resume:
+      StrCpy $2 $0
+      StrCmp $1 "" AddToPath_NTdoIt
+         StrCpy $2 "$0;$1"
+      AddToPath_NTdoIt:
+         StrCmp $4 "current" write_path_NT_current
+            ClearErrors
+            WriteRegExpandStr ${NT_all_env} "PATH" $2
+            IfErrors 0 write_path_NT_resume
+            ; Try again for the current user.
+            StrCpy $4 "current"
+            Goto AddToPath_NT_selection_done
+         write_path_NT_current:
+            ClearErrors
+            WriteRegExpandStr ${NT_current_env} "PATH" $2
+            IfErrors 0 write_path_NT_resume
+            MessageBox MB_OK|MB_ICONINFORMATION "PATH could not be updated for all users or the current user."
+            Goto write_path_NT_failed
+         write_path_NT_resume:
+         SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+         DetailPrint "added path for user ($4), $0"
+         write_path_NT_failed:
+ 
+      Pop $4
+   AddToPath_done:
+   Pop $2
+   Pop $1
+   Pop $0
+FunctionEnd
+ 
+;====================================================
+; RemoveFromPath - Remove a given dir from the path
+;     Input: head of the stack
+;====================================================
+Function un.RemoveFromPath
+   Exch $0
+   Push $1
+   Push $2
+   Push $3
+   Push $4
+   Push $5
+ 
+   Call un.IsNT
+   Pop $1
+   StrCmp $1 1 unRemoveFromPath_NT
+      ; Not on NT
+      StrCpy $1 $WINDIR 2
+      FileOpen $1 "$1\autoexec.bat" r
+      GetTempFileName $4
+      FileOpen $2 $4 w
+      GetFullPathName /SHORT $0 $0
+      StrCpy $0 "SET PATH=%PATH%;$0"
+      SetRebootFlag true
+      Goto unRemoveFromPath_dosLoop
+ 
+      unRemoveFromPath_dosLoop:
+         FileRead $1 $3
+         StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoop
+         StrCmp $3 "$0$\n" unRemoveFromPath_dosLoop
+         StrCmp $3 "$0" unRemoveFromPath_dosLoop
+         StrCmp $3 "" unRemoveFromPath_dosLoopEnd
+         FileWrite $2 $3
+         Goto unRemoveFromPath_dosLoop
+ 
+      unRemoveFromPath_dosLoopEnd:
+         FileClose $2
+         FileClose $1
+         StrCpy $1 $WINDIR 2
+         Delete "$1\autoexec.bat"
+         CopyFiles /SILENT $4 "$1\autoexec.bat"
+         Delete $4
+         Goto unRemoveFromPath_done
+ 
+   unRemoveFromPath_NT:
+      StrLen $2 $0
+      ; Try to unset PATH for all.
+      StrCpy $4 "all"
+      ReadRegStr $1 ${NT_all_env} "PATH"
+ 
+   unRemoveFromPath_find:
+      Push $1
+      Push $0
+      Call un.StrStr ; Find $0 in $1
+      Pop $5 ; pos of our dir
+      IntCmp $5 -1 unRemoveFromPath_next
+         ; else, it is in path
+         StrCpy $3 $1 $5 ; $3 now has the part of the path before our dir
+         IntOp $2 $2 + $5 ; $2 now contains the pos after our dir in the path (';')
+         IntOp $2 $2 + 1 ; $2 now containts the pos after our dir and the semicolon.
+         StrLen $5 $1
+         StrCpy $1 $1 $5 $2
+         StrCpy $3 "$3$1"
+ 
+         StrCmp $4 "current" un_write_path_NT_current
+            WriteRegExpandStr ${NT_all_env} "PATH" $3
+            Goto unRemoveFromPath_next
+         un_write_path_NT_current:
+            WriteRegExpandStr ${NT_current_env} "PATH" $3
+      unRemoveFromPath_next:
+         StrCmp $4 "current" unRemoveFromPath_done
+	    ; Go round again for the current user.
+            StrCpy $4 "current"
+            ReadRegStr $1 ${NT_current_env} "PATH"
+            Goto unRemoveFromPath_find
+      unRemoveFromPath_done:
+         SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+   Pop $5
+   Pop $4
+   Pop $3
+   Pop $2
+   Pop $1
+   Pop $0
+FunctionEnd
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Uninstall sutff
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 
+ 
+;====================================================
+; StrStr - Finds a given string in another given string.
+;               Returns -1 if not found and the pos if found.
+;          Input: head of the stack - string to find
+;                      second in the stack - string to find in
+;          Output: head of the stack
+;====================================================
+Function un.StrStr
+  Push $0
+  Exch
+  Pop $0 ; $0 now have the string to find
+  Push $1
+  Exch 2
+  Pop $1 ; $1 now have the string to find in
+  Exch
+  Push $2
+  Push $3
+  Push $4
+  Push $5
+ 
+  StrCpy $2 -1
+  StrLen $3 $0
+  StrLen $4 $1
+  IntOp $4 $4 - $3
+ 
+  unStrStr_loop:
+    IntOp $2 $2 + 1
+    IntCmp $2 $4 0 0 unStrStrReturn_notFound
+    StrCpy $5 $1 $3 $2
+    StrCmp $5 $0 unStrStr_done unStrStr_loop
+ 
+  unStrStrReturn_notFound:
+    StrCpy $2 -1
+ 
+  unStrStr_done:
+    Pop $5
+    Pop $4
+    Pop $3
+    Exch $2
+    Exch 2
+    Pop $0
+    Pop $1
+FunctionEnd
+;====================================================
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8995112
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,685 @@
+
+ PyQt5 is Copyright (C) 2014 Riverbank Computing Limited
+                                            <info at riverbankcomputing.com>
+
+ You may use, distribute and copy PyQt5 under the terms of GNU General
+ Public License version 3, which is displayed below.
+
+-------------------------------------------------------------------------
+
+                    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/NEWS b/NEWS
new file mode 100644
index 0000000..a5fe15e
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,82 @@
+v5.3.2 11th September 2014
+  - Added the Enginio module.
+  - Added the QJsonDocument and QJsonValue classes.
+  - QJsonObject is implemented as a Python dict.
+  - QJsonArray is implemented as a Python list.
+  - Added setUnifiedTitleAndToolBarOnMac() and unifiedTitleAndToolBarOnMac() to
+    QWidget.
+  - Added windowHandle() to QWidget.
+
+v5.3.1 4th July 2014
+  - Added support for Qt v5.3.1.
+  - Added the -tr-function and -translate-function command line options to
+    pylupdate5.
+
+v5.3 26th May 2014
+  - By default a Python slot is only invoked if the underlying C++ instance
+    still exists.
+  - Added the no_receiver_check argument to connect().
+  - Added support for Qt v5.3.0.
+  - Added the QtQuickWidgets module.
+  - Added the QtWebSockets module.
+  - Added the --target_py_version, --sysroot and --no-tools option to
+    configure.py.
+  - Cross-compilation (specifically to iOS and Android) is now supported.
+
+v5.2.1 14th March 2014
+  - Added full support for Qt v5.2.1.
+  - Properties, signals and slots can now be defined in mixins (i.e.
+    non-QObject classes).
+  - Added support for creating QSGGeometry.AttributeSet instances.
+  - A fundamental value may now be given whenever a QJSValue is expected.
+  - Building PyQt5 as static libraries now works.
+  - Added support for building without OpenGL.
+
+v5.2 8th January 2014
+  - Added full support for Qt v5.2.
+  - Added the QtBluetooth module.
+  - Added the QtPositioning module.
+  - Added the QtMacExtras module.
+  - Added the QtWinExtras module.
+  - Added the QtX11Extras module.
+  - Improved the conversion of Python objects to Qt collection types (e.g.
+    QList, QSet).  Iterators (rather than just sequences) are accepted and
+    failed conversions now raise much more informative exceptions.
+  - QtCore.Q_ENUMS() and QtCore.Q_FLAGS() now populate the meta-object.
+  - The QML debugger is automatically enabled when --debug is passed to
+    configure.py.
+
+v5.1.1 16th October 2013
+  - This is a bug fix release.
+
+v5.1 2nd October 2013
+  - Added full support for Qt v5.1.
+  - Added the QtSensors module.
+  - Added the QtSerialPort module.
+  - A (nearly) complete set of OpenGL v2.0 and OpenGL ES/2 bindings are
+    included.
+  - Cross-compilation is now supported. A configuration file for Python3 on the
+    Raspberry Pi is included.
+
+v5.0.1 21st August 2013
+  - Added the QtQuick module including the ability to create Python Quick items
+    from QML.
+  - Added the QtQml module including the ability to create Python objects from
+    QML.
+  - Added the QtMultimediaWidgets module.
+  - Completed the implementation of the QtMultimedia module including support
+    for cameras and radios.
+  - Added the remaining OpenGL classes to the QtGui module.
+  - Added the 'revision' keyword argument to pyqtProperty().
+  - Added the 'revision' and 'arguments' keyword arguments to pyqtSignal().
+  - Added the 'revision' keyword argument to pyqtSlot().
+  - Added the 'pyqt5qmlplugin' plugin for qmlscene.
+  - The DBus main loop module has been renamed to dbus.mainloop.pyqt5 from
+    dbus.mainloop.qt.
+  - Added the --no-qml-plugin and --qml-plugindir options to configure.py.
+  - Added many QtMultimedia, QML and QtQuick related examples.
+  - Classes now support co-operative multi-inheritance.  (This may introduce
+    incompatibilities with PyQt v5.0.)
+
+v5.0 16th June 2013
+  - The first release of PyQt5.
diff --git a/PyQt5-Qt5.nsi b/PyQt5-Qt5.nsi
new file mode 100644
index 0000000..9986bd5
--- /dev/null
+++ b/PyQt5-Qt5.nsi
@@ -0,0 +1,581 @@
+# PyQt5 NSIS installer script.
+# 
+# Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+# 
+# This file is part of PyQt5.
+# 
+# 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 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.
+# 
+# If you do not wish to use this file under the terms of the GPL version 3.0
+# then you may purchase a commercial license.  For more information contact
+# info at riverbankcomputing.com.
+# 
+# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+# These will change with different releases.
+!define PYQT_VERSION        "5.3.2"
+!define PYQT_INSTALLER      ""
+#!define PYQT_INSTALLER      "-2"
+!define PYQT_LICENSE        "GPL"
+!define PYQT_LICENSE_LC     "gpl"
+!define PYQT_PYTHON_MAJOR   "3"
+!define PYQT_PYTHON_MINOR   "4"
+!define PYQT_ARCH           "x64"
+!define PYQT_QT_VERS        "5.3.1"
+!define PYQT_QT_DOC_VERS    "5"
+
+# These are all derived from the above.
+!define PYQT_PYTHON_DIR     "C:\Python${PYQT_PYTHON_MAJOR}${PYQT_PYTHON_MINOR}"
+!define PYQT_PYTHON_VERS    "${PYQT_PYTHON_MAJOR}.${PYQT_PYTHON_MINOR}"
+!define PYQT_PYTHON_HK      "Software\Python\PythonCore\${PYQT_PYTHON_VERS}\InstallPath"
+!define PYQT_NAME           "PyQt ${PYQT_LICENSE} v${PYQT_VERSION} for Python v${PYQT_PYTHON_VERS} (${PYQT_ARCH})"
+!define PYQT_HK_ROOT        "Software\PyQt5\Py${PYQT_PYTHON_VERS}"
+!define PYQT_HK             "${PYQT_HK_ROOT}\InstallPath"
+!define PYQT4_HK            "Software\PyQt4\Py${PYQT_PYTHON_VERS}\InstallPath"
+!define QT_SRC_DIR          "C:\Qt\${PYQT_QT_VERS}"
+!define ICU_SRC_DIR         "C:\icu"
+!define OPENSSL_SRC_DIR     "C:\OpenSSL"
+!define MYSQL_SRC_DIR       "C:\MySQL"
+
+
+# Include the tools we use.
+!include MUI2.nsh
+!include LogicLib.nsh
+!include AddToPath.nsh
+!include StrSlash.nsh
+
+
+# Tweak some of the standard pages.
+!define MUI_WELCOMEPAGE_TEXT \
+"This wizard will guide you through the installation of ${PYQT_NAME}.$\r$\n\
+$\r$\n\
+This copy of PyQt includes a subset of Qt v${PYQT_QT_VERS} Open Source \
+Edition needed by PyQt. It also includes MySQL, ODBC, PostgreSQL and SQLite \
+drivers and the required OpenSSL DLLs.$\r$\n\
+$\r$\n\
+Any code you write must be released under a license that is compatible with \
+the GPL.$\r$\n\
+$\r$\n\
+Click Next to continue."
+
+!define MUI_FINISHPAGE_LINK "Get the latest news of PyQt here"
+!define MUI_FINISHPAGE_LINK_LOCATION "http://www.riverbankcomputing.com"
+
+
+# Define the product name and installer executable.
+Name "PyQt"
+Caption "${PYQT_NAME} Setup"
+OutFile "PyQt5-${PYQT_VERSION}-${PYQT_LICENSE_LC}-Py${PYQT_PYTHON_MAJOR}.${PYQT_PYTHON_MINOR}-Qt${PYQT_QT_VERS}-${PYQT_ARCH}${PYQT_INSTALLER}.exe"
+
+
+# This is done (along with the use of SetShellVarContext) so that we can remove
+# the shortcuts when uninstalling under Vista and Windows 7.  Note that we
+# don't actually check if it is successful.
+RequestExecutionLevel admin
+
+
+# The different installation types.  "Full" is everything.  "Minimal" is the
+# runtime environment.
+InstType "Full"
+InstType "Minimal"
+
+
+# Maximum compression.
+SetCompressor /SOLID lzma
+
+
+# We want the user to confirm they want to cancel.
+!define MUI_ABORTWARNING
+
+Function .onInit
+    ${If} ${PYQT_ARCH} == "x64"
+        SetRegView 64
+    ${Endif}
+
+    # Check if there is already a version of PyQt4 installed for this version
+    # of Python.
+    ReadRegStr $0 HKCU "${PYQT4_HK}" ""
+
+    ${If} $0 == ""
+        ReadRegStr $0 HKLM "${PYQT4_HK}" ""
+    ${Endif}
+
+    ${If} $0 != ""
+        MessageBox MB_OK \
+"A copy of PyQt4 for Python v${PYQT_PYTHON_VERS} is already installed in $0 \
+and must be uninstalled first."
+            Abort
+    ${Endif}
+
+    # Check if there is already a version of PyQt5 installed for this version
+    # of Python.
+    ReadRegStr $0 HKCU "${PYQT_HK}" ""
+
+    ${If} $0 == ""
+        ReadRegStr $0 HKLM "${PYQT_HK}" ""
+    ${Endif}
+
+    ${If} $0 != ""
+        MessageBox MB_YESNO|MB_DEFBUTTON2|MB_ICONQUESTION \
+"A copy of PyQt5 for Python v${PYQT_PYTHON_VERS} is already installed in $0 \
+and should be uninstalled first.$\r$\n \
+$\r$\n\
+Do you wish to uninstall it?" IDYES Uninstall
+            Abort
+Uninstall:
+        ExecWait '"$0\Lib\site-packages\PyQt5\Uninstall.exe" /S'
+    ${Endif}
+
+    # Check the right version of Python has been installed.
+    ReadRegStr $INSTDIR HKCU "${PYQT_PYTHON_HK}" ""
+
+    ${If} $INSTDIR == ""
+        ReadRegStr $INSTDIR HKLM "${PYQT_PYTHON_HK}" ""
+    ${Endif}
+
+    ${If} $INSTDIR == ""
+        MessageBox MB_YESNO|MB_ICONQUESTION \
+"This copy of PyQt has been built against Python v${PYQT_PYTHON_VERS} \
+(${PYQT_ARCH}) which doesn't seem to be installed.$\r$\n\
+$\r$\n\
+Do you wish to continue with the installation?" IDYES GotPython
+            Abort
+GotPython:
+        StrCpy $INSTDIR "${PYQT_PYTHON_DIR}"
+    ${Endif}
+FunctionEnd
+
+
+# Define the different pages.
+!insertmacro MUI_PAGE_WELCOME
+!insertmacro MUI_PAGE_LICENSE ".\LICENSE"
+!insertmacro MUI_PAGE_COMPONENTS
+
+!define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Python installation folder"
+!define MUI_DIRECTORYPAGE_TEXT_TOP \
+"PyQt will be installed in the site-packages folder of your Python \
+installation."
+!insertmacro MUI_PAGE_DIRECTORY
+
+!insertmacro MUI_PAGE_INSTFILES
+!insertmacro MUI_PAGE_FINISH
+
+!insertmacro MUI_UNPAGE_CONFIRM
+!insertmacro MUI_UNPAGE_INSTFILES
+
+ 
+# Other settings.
+!insertmacro MUI_LANGUAGE "English"
+
+
+# Installer sections.
+
+Section "Extension modules" SecModules
+    SectionIn 1 2 RO
+
+    SetOverwrite on
+
+    # We have to take the SIP files from where they should have been installed.
+    SetOutPath $INSTDIR\Lib\site-packages
+    File "${PYQT_PYTHON_DIR}\Lib\site-packages\sip.pyd"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File .\LICENSE
+    File .\__init__.py
+    File /r .\pyuic\uic
+
+    File .\build\Qt\Qt.pyd
+    File .\build\QtCore\QtCore.pyd
+    File .\build\QtDesigner\QtDesigner.pyd
+    File .\build\QtGui\QtGui.pyd
+    File .\build\QtHelp\QtHelp.pyd
+    File .\build\QtMultimedia\QtMultimedia.pyd
+    File .\build\QtMultimediaWidgets\QtMultimediaWidgets.pyd
+    File .\build\QtNetwork\QtNetwork.pyd
+    File .\build\QtOpenGL\QtOpenGL.pyd
+    File .\build\QtPositioning\QtPositioning.pyd
+    File .\build\QtPrintSupport\QtPrintSupport.pyd
+    File .\build\QtQml\QtQml.pyd
+    File .\build\QtQuick\QtQuick.pyd
+    File .\build\QtQuickWidgets\QtQuickWidgets.pyd
+    File .\build\QtSensors\QtSensors.pyd
+    File .\build\QtSerialPort\QtSerialPort.pyd
+    File .\build\QtSql\QtSql.pyd
+    File .\build\QtSvg\QtSvg.pyd
+    File .\build\QtTest\QtTest.pyd
+    File .\build\QtWebKit\QtWebKit.pyd
+    File .\build\QtWebKitWidgets\QtWebKitWidgets.pyd
+    File .\build\QtWebSockets\QtWebSockets.pyd
+    File .\build\QtWinExtras\QtWinExtras.pyd
+    File .\build\QtWidgets\QtWidgets.pyd
+    File .\build\QtXmlPatterns\QtXmlPatterns.pyd
+    File .\build\QAxContainer\QAxContainer.pyd
+    File .\build\Enginio\Enginio.pyd
+    File .\build\_QOpenGLFunctions_ES2\_QOpenGLFunctions_ES2.pyd
+SectionEnd
+
+Section "QScintilla" SecQScintilla
+    SectionIn 1
+
+    SetOverwrite on
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File "${PYQT_PYTHON_DIR}\Lib\site-packages\PyQt5\Qsci.pyd"
+    File /r "${QT_SRC_DIR}\qsci"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File "${QT_SRC_DIR}\lib\qscintilla2.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\translations
+    File "${QT_SRC_DIR}\translations\qscintilla*.qm"
+SectionEnd
+
+Section "Qt runtime" SecQt
+    SectionIn 1 2
+
+    SetOverwrite on
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\PyQt5
+    File .\build\qmlscene\release\pyqt5qmlplugin.dll
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File "${QT_SRC_DIR}\bin\Enginio.dll"
+    File "${QT_SRC_DIR}\bin\qmlscene.exe"
+    File "${QT_SRC_DIR}\bin\Qt5CLucene.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Core.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Designer.dll"
+    File "${QT_SRC_DIR}\bin\Qt5DesignerComponents.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Gui.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Help.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Multimedia.dll"
+    File "${QT_SRC_DIR}\bin\Qt5MultimediaQuick_p.dll"
+    File "${QT_SRC_DIR}\bin\Qt5MultimediaWidgets.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Network.dll"
+    File "${QT_SRC_DIR}\bin\Qt5OpenGL.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Positioning.dll"
+    File "${QT_SRC_DIR}\bin\Qt5PrintSupport.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Qml.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Quick.dll"
+    File "${QT_SRC_DIR}\bin\Qt5QuickParticles.dll"
+    File "${QT_SRC_DIR}\bin\Qt5QuickWidgets.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Sensors.dll"
+    File "${QT_SRC_DIR}\bin\Qt5SerialPort.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Sql.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Svg.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Test.dll"
+    File "${QT_SRC_DIR}\bin\Qt5WebKit.dll"
+    File "${QT_SRC_DIR}\bin\Qt5WebKitWidgets.dll"
+    File "${QT_SRC_DIR}\bin\Qt5WebSockets.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Widgets.dll"
+    File "${QT_SRC_DIR}\bin\Qt5WinExtras.dll"
+    File "${QT_SRC_DIR}\bin\Qt5Xml.dll"
+    File "${QT_SRC_DIR}\bin\Qt5XmlPatterns.dll"
+    File "${QT_SRC_DIR}\bin\QtWebProcess.exe"
+
+    File "${QT_SRC_DIR}\bin\libEGL.dll"
+    File "${QT_SRC_DIR}\bin\libGLESv2.dll"
+
+    File "${ICU_SRC_DIR}\bin\icudt49.dll"
+    File "${ICU_SRC_DIR}\bin\icuin49.dll"
+    File "${ICU_SRC_DIR}\bin\icuuc49.dll"
+
+    File "${OPENSSL_SRC_DIR}\bin\libeay32.dll"
+    File "${OPENSSL_SRC_DIR}\bin\ssleay32.dll"
+
+    File "${MYSQL_SRC_DIR}\lib\libmysql.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File /r "${QT_SRC_DIR}\qml"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\accessible
+    File "${QT_SRC_DIR}\plugins\accessible\qtaccessiblequick.dll"
+    File "${QT_SRC_DIR}\plugins\accessible\qtaccessiblewidgets.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\bearer
+    File "${QT_SRC_DIR}\plugins\bearer\qgenericbearer.dll"
+    File "${QT_SRC_DIR}\plugins\bearer\qnativewifibearer.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\iconengines
+    File "${QT_SRC_DIR}\plugins\iconengines\qsvgicon.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\imageformats
+    File "${QT_SRC_DIR}\plugins\imageformats\qgif.dll"
+    File "${QT_SRC_DIR}\plugins\imageformats\qico.dll"
+    File "${QT_SRC_DIR}\plugins\imageformats\qjpeg.dll"
+    File "${QT_SRC_DIR}\plugins\imageformats\qmng.dll"
+    File "${QT_SRC_DIR}\plugins\imageformats\qsvg.dll"
+    File "${QT_SRC_DIR}\plugins\imageformats\qtga.dll"
+    File "${QT_SRC_DIR}\plugins\imageformats\qtiff.dll"
+    File "${QT_SRC_DIR}\plugins\imageformats\qwbmp.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\mediaservice
+    File "${QT_SRC_DIR}\plugins\mediaservice\dsengine.dll"
+    File "${QT_SRC_DIR}\plugins\mediaservice\qtmedia_audioengine.dll"
+    File "${QT_SRC_DIR}\plugins\mediaservice\wmfengine.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\platforms
+    File "${QT_SRC_DIR}\plugins\platforms\qminimal.dll"
+    File "${QT_SRC_DIR}\plugins\platforms\qoffscreen.dll"
+    File "${QT_SRC_DIR}\plugins\platforms\qwindows.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\playlistformats
+    File "${QT_SRC_DIR}\plugins\playlistformats\qtmultimedia_m3u.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\printsupport
+    File "${QT_SRC_DIR}\plugins\printsupport\windowsprintersupport.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\sqldrivers
+    File "${QT_SRC_DIR}\plugins\sqldrivers\qsqlite.dll"
+    File "${QT_SRC_DIR}\plugins\sqldrivers\qsqlmysql.dll"
+    File "${QT_SRC_DIR}\plugins\sqldrivers\qsqlodbc.dll"
+    File "${QT_SRC_DIR}\plugins\sqldrivers\qsqlpsql.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\translations
+    File "${QT_SRC_DIR}\translations\qt_*.qm"
+    File "${QT_SRC_DIR}\translations\qtbase_*.qm"
+
+    # Tell Python and the Qt tools where to find Qt.
+    Push $INSTDIR
+    Push "\"
+    Call StrSlash
+    Pop $R0
+
+    FileOpen $0 $INSTDIR\qt.conf w
+    FileWrite $0 "[Paths]$\r$\n"
+    FileWrite $0 "Prefix = $R0/Lib/site-packages/PyQt5$\r$\n"
+    FileWrite $0 "Binaries = $R0/Lib/site-packages/PyQt5$\r$\n"
+    FileClose $0
+
+    FileOpen $0 $INSTDIR\Lib\site-packages\PyQt5\qt.conf w
+    FileWrite $0 "[Paths]$\r$\n"
+    FileWrite $0 "Prefix = $R0/Lib/site-packages/PyQt5$\r$\n"
+    FileWrite $0 "Binaries = $R0/Lib/site-packages/PyQt5$\r$\n"
+    FileClose $0
+SectionEnd
+
+Section "Developer tools" SecTools
+    SectionIn 1
+
+    SetOverwrite on
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File .\build\pylupdate\release\pylupdate5.exe
+    File .\build\pyrcc\release\pyrcc5.exe
+
+    FileOpen $0 $INSTDIR\Lib\site-packages\PyQt5\pyuic5.bat w
+    FileWrite $0 "@$\"$INSTDIR\python$\" -m PyQt5.uic.pyuic %1 %2 %3 %4 %5 %6 %7 %8 %9$\r$\n"
+    FileClose $0
+SectionEnd
+
+Section "Qt developer tools" SecQtTools
+    SectionIn 1
+
+    SetOverwrite on
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File "${QT_SRC_DIR}\bin\assistant.exe"
+    File "${QT_SRC_DIR}\bin\designer.exe"
+    File "${QT_SRC_DIR}\bin\linguist.exe"
+    File "${QT_SRC_DIR}\bin\lrelease.exe"
+    File "${QT_SRC_DIR}\bin\qcollectiongenerator.exe"
+    File "${QT_SRC_DIR}\bin\qhelpgenerator.exe"
+    File "${QT_SRC_DIR}\bin\qmake.exe"
+    File "${QT_SRC_DIR}\bin\xmlpatterns.exe"
+    File /r "${QT_SRC_DIR}\mkspecs"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\plugins\designer
+    File "${QT_SRC_DIR}\plugins\designer\qwebview.dll"
+
+    File .\build\designer\release\pyqt5.dll
+    File "${QT_SRC_DIR}\plugins\designer\qscintillaplugin.dll"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\translations
+    File "${QT_SRC_DIR}\translations\assistant_*.qm"
+    File "${QT_SRC_DIR}\translations\designer_*.qm"
+    File "${QT_SRC_DIR}\translations\linguist_*.qm"
+SectionEnd
+
+Section "SIP developer tools" SecSIPTools
+    SectionIn 1
+
+    SetOverwrite on
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File /r "${PYQT_PYTHON_DIR}\Lib\site-packages\PyQt5\sip"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File "${PYQT_PYTHON_DIR}\Lib\site-packages\PyQt5\sip.exe"
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5\include
+    File "${PYQT_PYTHON_DIR}\Lib\site-packages\PyQt5\include\sip.h"
+SectionEnd
+
+Section "Documentation" SecDocumentation
+    SectionIn 1
+
+    SetOverwrite on
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File /r .\doc
+SectionEnd
+
+Section "Examples" SecExamples
+    SectionIn 1
+
+    SetOverwrite on
+
+    SetOutPath $INSTDIR\Lib\site-packages\PyQt5
+    File /r .\examples
+
+    Rename $INSTDIR\Lib\site-packages\PyQt5\examples\qtdemo\qtdemo.py $INSTDIR\Lib\site-packages\PyQt5\examples\qtdemo\qtdemo.pyw
+
+    # Tell the QtQuick plugins example to find the plugin.
+    Push $INSTDIR
+    Push "\"
+    Call StrSlash
+    Pop $R0
+
+    FileOpen $0 $INSTDIR\Lib\site-packages\PyQt5\examples\quick\tutorials\extending\chapter6-plugins\Charts\qmldir w
+    FileWrite $0 "module Charts$\r$\n" 
+    FileWrite $0 "plugin pyqt5qmlplugin $R0/Lib/site-packages/PyQt5/plugins/PyQt5$\r$\n"
+    FileClose $0
+SectionEnd
+
+Section "Start Menu shortcuts" SecShortcuts
+    SectionIn 1
+
+    SetShellVarContext all
+
+    # Make sure this is clean and tidy.
+    RMDir /r "$SMPROGRAMS\${PYQT_NAME}"
+    CreateDirectory "$SMPROGRAMS\${PYQT_NAME}"
+
+    IfFileExists "$INSTDIR\Lib\site-packages\PyQt5\assistant.exe" 0 +4
+        CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Assistant.lnk" "$INSTDIR\Lib\site-packages\PyQt5\assistant.exe"
+        CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Designer.lnk" "$INSTDIR\Lib\site-packages\PyQt5\designer.exe"
+        CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Linguist.lnk" "$INSTDIR\Lib\site-packages\PyQt5\linguist.exe"
+
+    IfFileExists "$INSTDIR\Lib\site-packages\PyQt5\doc" 0 +5
+        CreateDirectory "$SMPROGRAMS\${PYQT_NAME}\Documentation"
+        CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Documentation\PyQt Reference Guide.lnk" "$INSTDIR\Lib\site-packages\PyQt5\doc\html\index.html"
+	CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Documentation\Qt Documentation.lnk" "http://qt-project.org/doc/qt-${PYQT_QT_DOC_VERS}/"
+
+    IfFileExists "$INSTDIR\Lib\site-packages\PyQt5\examples" 0 +6
+        CreateDirectory "$SMPROGRAMS\${PYQT_NAME}\Examples"
+	SetOutPath $INSTDIR\Lib\site-packages\PyQt5\examples\qtdemo
+        CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Examples\PyQt Examples.lnk" "$INSTDIR\Lib\site-packages\PyQt5\examples\qtdemo\qtdemo.pyw"
+	SetOutPath $INSTDIR
+        CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Examples\PyQt Examples Source.lnk" "$INSTDIR\Lib\site-packages\PyQt5\examples"
+
+    CreateDirectory "$SMPROGRAMS\${PYQT_NAME}\Links"
+    CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Links\PyQt Book.lnk" "http://www.qtrac.eu/pyqtbook.html"
+    CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Links\PyQt Homepage.lnk" "http://www.riverbankcomputing.com/software/pyqt/"
+    CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Links\Qt Homepage.lnk" "http://qt.digia.com"
+    CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Links\QScintilla Homepage.lnk" "http://www.riverbankcomputing.com/software/qscintilla/"
+    CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Links\eric Homepage.lnk" "http://eric-ide.python-projects.org/index.html"
+
+    CreateShortCut "$SMPROGRAMS\${PYQT_NAME}\Uninstall PyQt.lnk" "$INSTDIR\Lib\site-packages\PyQt5\Uninstall.exe"
+SectionEnd
+
+Section -post
+    # Add the bin directory to PATH.
+    Push $INSTDIR\Lib\site-packages\PyQt5
+    Call AddToPath
+
+    # Tell Windows about the package.
+    WriteRegExpandStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PYQT_NAME}" "UninstallString" '"$INSTDIR\Lib\site-packages\PyQt5\Uninstall.exe"'
+    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PYQT_NAME}" "DisplayName" "${PYQT_NAME}"
+    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PYQT_NAME}" "DisplayVersion" "${PYQT_VERSION}${PYQT_INSTALLER}"
+    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PYQT_NAME}" "NoModify" "1"
+    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PYQT_NAME}" "NoRepair" "1"
+
+    # Save the installation directories for the uninstaller.
+    ClearErrors
+    WriteRegStr HKLM "${PYQT_HK}" "" $INSTDIR
+    IfErrors 0 +2
+        WriteRegStr HKCU "${PYQT_HK}" "" $INSTDIR
+
+    # Create the uninstaller.
+    WriteUninstaller "$INSTDIR\Lib\site-packages\PyQt5\Uninstall.exe"
+SectionEnd
+
+
+# Section description text.
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+!insertmacro MUI_DESCRIPTION_TEXT ${SecModules} \
+"The PyQt and sip extension modules."
+!insertmacro MUI_DESCRIPTION_TEXT ${SecQScintilla} \
+"QScintilla and its extension module."
+!insertmacro MUI_DESCRIPTION_TEXT ${SecQt} \
+"The Qt DLLs, plugins and translations."
+!insertmacro MUI_DESCRIPTION_TEXT ${SecQtTools} \
+"The Qt developer tools: Assistant, Designer, Linguist etc."
+!insertmacro MUI_DESCRIPTION_TEXT ${SecTools} \
+"The PyQt developer tools: pyuic5, pyrcc5 and pylupdate5."
+!insertmacro MUI_DESCRIPTION_TEXT ${SecSIPTools} \
+"The SIP developer tools and .sip files."
+!insertmacro MUI_DESCRIPTION_TEXT ${SecDocumentation} \
+"The PyQt and related documentation."
+!insertmacro MUI_DESCRIPTION_TEXT ${SecExamples} \
+"Ports to Python of the standard Qt v5 examples."
+!insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} \
+"This adds shortcuts to your Start Menu."
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+
+Function un.onInit
+    ${If} ${PYQT_ARCH} == "x64"
+        SetRegView 64
+    ${Endif}
+
+    # Get the PyQt installation directory.
+    ReadRegStr $INSTDIR HKCU "${PYQT_HK}" ""
+
+    ${If} $INSTDIR == ""
+        ReadRegStr $INSTDIR HKLM "${PYQT_HK}" ""
+
+        ${If} $INSTDIR == ""
+            # Try where Python was installed.
+            ReadRegStr $INSTDIR HKCU "${PYQT_PYTHON_HK}" ""
+
+            ${If} $INSTDIR == ""
+                ReadRegStr $INSTDIR HKLM "${PYQT_PYTHON_HK}" ""
+
+                ${If} $INSTDIR != ""
+                    # Default to where Python should be installed.
+                    StrCpy $INSTDIR "${PYQT_PYTHON_DIR}\"
+                ${Endif}
+            ${Endif}
+        ${Endif}
+    ${Endif}
+FunctionEnd
+
+
+Section "Uninstall"
+    SetShellVarContext all
+
+    # Remove the bin directory from PATH.
+    Push $INSTDIR\Lib\site-packages\PyQt5
+    Call un.RemoveFromPath
+
+    # The Qt path file.
+    Delete $INSTDIR\qt.conf
+
+    # The modules section.
+    Delete $INSTDIR\Lib\site-packages\sip.pyd
+    RMDir /r $INSTDIR\Lib\site-packages\PyQt5
+
+    # The shortcuts section.
+    RMDir /r "$SMPROGRAMS\${PYQT_NAME}"
+
+    # Clean the registry.
+    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PYQT_NAME}"
+    DeleteRegKey HKLM "${PYQT_HK_ROOT}"
+    DeleteRegKey HKCU "${PYQT_HK_ROOT}"
+SectionEnd
diff --git a/README b/README
new file mode 100644
index 0000000..6d4bcb8
--- /dev/null
+++ b/README
@@ -0,0 +1,59 @@
+                  PyQt5 - Python Bindings for the Qt v5 Toolkit
+
+
+INTRODUCTION
+
+These are the Python bindings for Qt v5.  Python v2.6 or later is required.
+You must also have the SIP Python bindings generator installed.  PyQt4 is also
+available which supports earlier versions of Python, and Qt v4 and the
+compatible subset of Qt v5.
+
+The homepage is http://www.riverbankcomputing.com/software/pyqt/.
+
+The homepage of SIP is http://www.riverbankcomputing.com/software/sip/.
+
+
+COMMERCIAL VERSION
+
+If you have the Commercial version of PyQt5 then you should also have a
+license file that you downloaded separately.  The license file must be copied
+to the "sip" directory before starting to build PyQt5.
+
+
+INSTALLATION
+
+Check for any other README files in this directory that relate to your
+particular platform.  Feel free to contribute a README for your platform or to
+provide updates to any existing documentation.
+
+The first step is to configure PyQt5 by running the following command.
+
+	python configure.py
+
+This assumes that the correct Python interpreter is on your path.  Something
+like the following may be appropriate on Windows.
+
+	c:\python33\python configure.py
+
+If you have multiple versions of Python installed then make sure you use the
+interpreter for which you wish to generate bindings for.
+
+The configure.py script takes many options.  Use the "--help" command line
+option to display a full list of the available options.
+
+The next step is to build PyQt5 using your platform's make command.
+
+	make
+
+The final step is to install PyQt5 by running the following command.
+(Depending on your system you may require root or administrator privileges.)
+
+	make install
+
+
+THE REST OF THE DISTRIBUTION
+
+The "examples" directory contain some examples of Python scripts, including
+versions of the standard Qt tutorials and examples.
+
+The "doc" directory contains HTML documentation for the bindings.
diff --git a/StrSlash.nsh b/StrSlash.nsh
new file mode 100644
index 0000000..43b1fdb
--- /dev/null
+++ b/StrSlash.nsh
@@ -0,0 +1,41 @@
+!ifndef _StrSlash_nsh
+!define _StrSlash_nsh
+
+; Push $filenamestring (e.g. 'c:\this\and\that\filename.htm')
+; Push "\"
+; Call StrSlash
+; Pop $R0
+; ;Now $R0 contains 'c:/this/and/that/filename.htm'
+Function StrSlash
+  Exch $R3 ; $R3 = needle ("\" or "/")
+  Exch
+  Exch $R1 ; $R1 = String to replacement in (haystack)
+  Push $R2 ; Replaced haystack
+  Push $R4 ; $R4 = not $R3 ("/" or "\")
+  Push $R6
+  Push $R7 ; Scratch reg
+  StrCpy $R2 ""
+  StrLen $R6 $R1
+  StrCpy $R4 "\"
+  StrCmp $R3 "/" loop
+  StrCpy $R4 "/"  
+loop:
+  StrCpy $R7 $R1 1
+  StrCpy $R1 $R1 $R6 1
+  StrCmp $R7 $R3 found
+  StrCpy $R2 "$R2$R7"
+  StrCmp $R1 "" done loop
+found:
+  StrCpy $R2 "$R2$R4"
+  StrCmp $R1 "" done loop
+done:
+  StrCpy $R3 $R2
+  Pop $R7
+  Pop $R6
+  Pop $R4
+  Pop $R2
+  Pop $R1
+  Exch $R3
+FunctionEnd
+
+!endif
diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..ce6ae9d
--- /dev/null
+++ b/__init__.py
@@ -0,0 +1,16 @@
+# Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+# 
+# This file is part of PyQt5.
+# 
+# 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 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.
+# 
+# If you do not wish to use this file under the terms of the GPL version 3.0
+# then you may purchase a commercial license.  For more information contact
+# info at riverbankcomputing.com.
+# 
+# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/configure.py b/configure.py
new file mode 100644
index 0000000..cedfaaa
--- /dev/null
+++ b/configure.py
@@ -0,0 +1,2741 @@
+# This script generates the Makefiles for building PyQt5.
+#
+# Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+# 
+# This file is part of PyQt5.
+# 
+# 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 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.
+# 
+# If you do not wish to use this file under the terms of the GPL version 3.0
+# then you may purchase a commercial license.  For more information contact
+# info at riverbankcomputing.com.
+# 
+# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+import glob
+import optparse
+import os
+import shutil
+import stat
+import sys
+
+try:
+    import sysconfig
+except ImportError:
+    from distutils import sysconfig
+
+
+# Initialise the constants.
+PYQT_VERSION_STR = "5.3.2"
+
+SIP_MIN_VERSION = '4.16'
+
+
+class ModuleMetadata:
+    """ This class encapsulates the meta-data about a PyQt5 module. """
+
+    def __init__(self, qmake_QT=None, qmake_TARGET='', qpy_lib=False):
+        """ Initialise the meta-data. """
+
+        # The values to update qmake's QT variable.
+        self.qmake_QT = [] if qmake_QT is None else qmake_QT
+
+        # The value to set qmake's TARGET variable to.  It defaults to the name
+        # of the module.
+        self.qmake_TARGET = qmake_TARGET
+
+        # Set if there is a qpy support library.
+        self.qpy_lib = qpy_lib
+
+
+# The module meta-data.
+MODULE_METADATA = {
+    'dbus':                 ModuleMetadata(qmake_QT=['-gui'],
+                                    qmake_TARGET='pyqt5'),
+    'QAxContainer':         ModuleMetadata(qmake_QT=['axcontainer']),
+    'Qt':                   ModuleMetadata(qmake_QT=['-core', '-gui']),
+    'QtBluetooth':          ModuleMetadata(qmake_QT=['bluetooth']),
+    'QtCore':               ModuleMetadata(qmake_QT=['-gui'], qpy_lib=True),
+    'QtDBus':               ModuleMetadata(qmake_QT=['dbus', '-gui'],
+                                    qpy_lib=True),
+    'QtDesigner':           ModuleMetadata(qmake_QT=['designer'],
+                                    qpy_lib=True),
+    'Enginio':              ModuleMetadata(qmake_QT=['enginio']),
+    'QtGui':                ModuleMetadata(qpy_lib=True),
+    'QtHelp':               ModuleMetadata(qmake_QT=['help']),
+    'QtMacExtras':          ModuleMetadata(qmake_QT=['macextras']),
+    'QtMultimedia':         ModuleMetadata(qmake_QT=['multimedia']),
+    'QtMultimediaWidgets':  ModuleMetadata(
+                                    qmake_QT=['multimediawidgets',
+                                            'multimedia']),
+    'QtNetwork':            ModuleMetadata(qmake_QT=['network', '-gui']),
+    'QtOpenGL':             ModuleMetadata(qmake_QT=['opengl']),
+    'QtPositioning':        ModuleMetadata(qmake_QT=['positioning']),
+    'QtPrintSupport':       ModuleMetadata(qmake_QT=['printsupport']),
+    'QtQml':                ModuleMetadata(qmake_QT=['qml'], qpy_lib=True),
+    'QtQuick':              ModuleMetadata(qmake_QT=['quick'], qpy_lib=True),
+    'QtQuickWidgets':       ModuleMetadata(qmake_QT=['quickwidgets']),
+    'QtSensors':            ModuleMetadata(qmake_QT=['sensors']),
+    'QtSerialPort':         ModuleMetadata(qmake_QT=['serialport']),
+    'QtSql':                ModuleMetadata(qmake_QT=['sql', 'widgets']),
+    'QtSvg':                ModuleMetadata(qmake_QT=['svg']),
+    'QtTest':               ModuleMetadata(qmake_QT=['testlib', 'widgets']),
+    'QtWebKit':             ModuleMetadata(qmake_QT=['webkit', 'network']),
+    'QtWebKitWidgets':      ModuleMetadata(qmake_QT=['webkitwidgets']),
+    'QtWebSockets':         ModuleMetadata(qmake_QT=['websockets']),
+    'QtWidgets':            ModuleMetadata(qmake_QT=['widgets']),
+    'QtWinExtras':          ModuleMetadata(qmake_QT=['winextras', 'widgets']),
+    'QtX11Extras':          ModuleMetadata(qmake_QT=['x11extras']),
+    'QtXmlPatterns':        ModuleMetadata(
+                                    qmake_QT=['xmlpatterns', '-gui',
+                                            'network']),
+
+    # The OpenGL wrappers.
+    '_QOpenGLFunctions_1_0':                ModuleMetadata(),
+    '_QOpenGLFunctions_1_1':                ModuleMetadata(),
+    '_QOpenGLFunctions_1_2':                ModuleMetadata(),
+    '_QOpenGLFunctions_1_3':                ModuleMetadata(),
+    '_QOpenGLFunctions_1_4':                ModuleMetadata(),
+    '_QOpenGLFunctions_1_5':                ModuleMetadata(),
+    '_QOpenGLFunctions_2_0':                ModuleMetadata(),
+    '_QOpenGLFunctions_2_1':                ModuleMetadata(),
+    '_QOpenGLFunctions_3_0':                ModuleMetadata(),
+    '_QOpenGLFunctions_3_1':                ModuleMetadata(),
+    '_QOpenGLFunctions_3_2_Compatibility':  ModuleMetadata(),
+    '_QOpenGLFunctions_3_2_Core':           ModuleMetadata(),
+    '_QOpenGLFunctions_3_3_Compatibility':  ModuleMetadata(),
+    '_QOpenGLFunctions_3_3_Core':           ModuleMetadata(),
+    '_QOpenGLFunctions_4_0_Compatibility':  ModuleMetadata(),
+    '_QOpenGLFunctions_4_0_Core':           ModuleMetadata(),
+    '_QOpenGLFunctions_4_1_Compatibility':  ModuleMetadata(),
+    '_QOpenGLFunctions_4_1_Core':           ModuleMetadata(),
+    '_QOpenGLFunctions_4_2_Compatibility':  ModuleMetadata(),
+    '_QOpenGLFunctions_4_2_Core':           ModuleMetadata(),
+    '_QOpenGLFunctions_4_3_Compatibility':  ModuleMetadata(),
+    '_QOpenGLFunctions_4_3_Core':           ModuleMetadata(),
+    '_QOpenGLFunctions_ES2':                ModuleMetadata()
+}
+
+
+# The component modules that make up the composite Qt module.  SIP is broken in
+# its handling of composite module in that a component module must be %Included
+# before it is first %Imported.  In other words, a module must appear before
+# any modules that depend on it.
+COMPOSITE_COMPONENTS = (
+    'QtCore',
+    'QtDBus', 'QtGui', 'QtNetwork', 'QtSensors', 'QtSerialPort',
+    'QtMultimedia', 'QtQml', 'QtWebKit', 'QtWidgets', 'QtXmlPatterns',
+    'QtAxContainer', 'QtDesigner', 'QtHelp', 'QtMultimediaWidgets', 'QtOpenGL',
+        'QtPrintSupport', 'QtQuick', 'QtSql', 'QtSvg', 'QtTest',
+    'QtWebKitWidgets', 'QtBluetooth', 'QtMacExtras', 'QtPositioning',
+    'QtWinExtras', 'QtX11Extras', 'QtQuickWidgets', 'QtWebSockets', 'Enginio'
+)
+
+
+def error(msg):
+    """ Display an error message and terminate.  msg is the text of the error
+    message.
+    """
+
+    sys.stderr.write(format("Error: " + msg) + "\n")
+    sys.exit(1)
+
+
+def inform(msg):
+    """ Display an information message.  msg is the text of the error message.
+    """
+
+    sys.stdout.write(format(msg) + "\n")
+
+
+def format(msg, left_margin=0, right_margin=78):
+    """ Format a message by inserting line breaks at appropriate places.  msg
+    is the text of the message.  left_margin is the position of the left
+    margin.  right_margin is the position of the right margin.  Returns the
+    formatted message.
+    """
+
+    curs = left_margin
+    fmsg = " " * left_margin
+
+    for w in msg.split():
+        l = len(w)
+        if curs != left_margin and curs + l > right_margin:
+            fmsg = fmsg + "\n" + (" " * left_margin)
+            curs = left_margin
+
+        if curs > left_margin:
+            fmsg = fmsg + " "
+            curs = curs + 1
+
+        fmsg = fmsg + w
+        curs = curs + l
+
+    return fmsg
+
+
+def version_to_sip_tag(version):
+    """ Convert a version number to a SIP tag.  version is the version number.
+    """
+
+    # Anything after Qt v5 is assumed to be Qt v6.0.
+    if version > 0x060000:
+        version = 0x060000
+
+    major = (version >> 16) & 0xff
+    minor = (version >> 8) & 0xff
+    patch = version & 0xff
+
+    return 'Qt_%d_%d_%d' % (major, minor, patch)
+
+
+def version_to_string(version, parts=3):
+    """ Convert an n-part version number encoded as a hexadecimal value to a
+    string.  version is the version number.  Returns the string.
+    """
+
+    part_list = [str((version >> 16) & 0xff)]
+
+    if parts > 1:
+        part_list.append(str((version >> 8) & 0xff))
+
+        if parts > 2:
+            part_list.append(str(version & 0xff))
+
+    return '.'.join(part_list)
+
+
+class ConfigurationFileParser:
+    """ A parser for configuration files. """
+
+    def __init__(self, config_file):
+        """ Read and parse a configuration file. """
+
+        self._config = {}
+        self._extrapolating = []
+
+        cfg = open(config_file)
+        line_nr = 0
+        last_name = None
+
+        section = ''
+        section_config = {}
+        self._config[section] = section_config
+
+        for l in cfg:
+            line_nr += 1
+
+            # Strip comments.
+            l = l.split('#')[0]
+
+            # See if this might be part of a multi-line.
+            multiline = (last_name is not None and len(l) != 0 and l[0] == ' ')
+
+            l = l.strip()
+
+            if l == '':
+                last_name = None
+                continue
+
+            # See if this is a new section.
+            if l[0] == '[' and l[-1] == ']':
+                section = l[1:-1].strip()
+                if section == '':
+                    error(
+                            "%s:%d: Empty section name." % (
+                                    config_file, line_nr))
+
+                if section in self._config:
+                    error(
+                            "%s:%d: Section '%s' defined more than once." % (
+                                    config_file, line_nr, section))
+
+                section_config = {}
+                self._config[section] = section_config
+
+                last_name = None
+                continue
+
+            parts = l.split('=', 1)
+            if len(parts) == 2:
+                name = parts[0].strip()
+                value = parts[1].strip()
+            elif multiline:
+                name = last_name
+                value = section_config[last_name]
+                value += ' ' + l
+            else:
+                name = value = ''
+
+            if name == '' or value == '':
+                error("%s:%d: Invalid line." % (config_file, line_nr))
+
+            section_config[name] = value
+            last_name = name
+
+        cfg.close()
+
+    def sections(self):
+        """ Return the list of sections, excluding the default one. """
+
+        return [s for s in self._config.keys() if s != '']
+
+    def preset(self, name, value):
+        """ Add a preset value to the configuration. """
+
+        self._config[''][name] = value
+
+    def get(self, section, name, default=None):
+        """ Get a configuration value while extrapolating. """
+
+        # Get the name from the section, or the default section.
+        value = self._config[section].get(name)
+        if value is None:
+            value = self._config[''].get(name)
+            if value is None:
+                if default is None:
+                    error(
+                            "Configuration file references non-existent name "
+                            "'%s'." % name)
+
+                return default
+
+        # Handle any extrapolations.
+        parts = value.split('%(', 1)
+        while len(parts) == 2:
+            prefix, tail = parts
+
+            parts = tail.split(')', 1)
+            if len(parts) != 2:
+                error(
+                        "Configuration file contains unterminated "
+                        "extrapolated name '%s'." % tail)
+
+            xtra_name, suffix = parts
+
+            if xtra_name in self._extrapolating:
+                error(
+                        "Configuration file contains a recursive reference to "
+                        "'%s'." % xtra_name)
+
+            self._extrapolating.append(xtra_name)
+            xtra_value = self.get(section, xtra_name)
+            self._extrapolating.pop()
+
+            value = prefix + xtra_value + suffix
+
+            parts = value.split('%(', 1)
+
+        return value
+
+    def getboolean(self, section, name, default):
+        """ Get a boolean configuration value while extrapolating. """
+
+        value = self.get(section, name, default)
+
+        # In case the default was returned.
+        if isinstance(value, bool):
+            return value
+
+        if value in ('True', 'true', '1'):
+            return True
+
+        if value in ('False', 'false', '0'):
+            return False
+
+        error(
+                "Configuration file contains invalid boolean value for "
+                "'%s'." % name)
+
+    def getlist(self, section, name, default):
+        """ Get a list configuration value while extrapolating. """
+
+        value = self.get(section, name, default)
+
+        # In case the default was returned.
+        if isinstance(value, list):
+            return value
+
+        return value.split()
+
+
+class HostPythonConfiguration:
+    """ A container for the host Python configuration. """
+
+    def __init__(self):
+        """ Initialise the configuration. """
+
+        self.platform = sys.platform
+        self.version = sys.hexversion >> 8
+
+        if hasattr(sysconfig, 'get_path'):
+            # The modern API.
+            self.inc_dir = sysconfig.get_path('include')
+            self.module_dir = sysconfig.get_path('platlib')
+        else:
+            # The legacy distutils API.
+            self.inc_dir = sysconfig.get_python_inc(plat_specific=1)
+            self.module_dir = sysconfig.get_python_lib(plat_specific=1)
+
+        if sys.platform == 'win32':
+            self.bin_dir = sys.exec_prefix
+            self.data_dir = sys.prefix
+            self.lib_dir = sys.prefix + '\\libs'
+        else:
+            self.bin_dir = sys.exec_prefix + '/bin'
+            self.data_dir = sys.prefix + '/share'
+            self.lib_dir = sys.prefix + '/lib'
+
+        # The name of the interpreter used by the pyuic5 wrapper.
+        if sys.platform == 'darwin':
+            # The installation of MacOS's python is a mess that changes from
+            # version to version and where sys.executable is useless.
+
+            py_major = self.version >> 16
+            py_minor = (self.version >> 8) & 0xff
+
+            # In Python v3.4 and later there is no pythonw.
+            if (py_major == 3 and py_minor >= 4) or py_major >= 4:
+                exe = "python"
+            else:
+                exe = "pythonw"
+
+            self.pyuic_interpreter = '%s%d.%d' % (exe, py_major, py_minor)
+        else:
+            self.pyuic_interpreter = sys.executable
+
+
+class TargetQtConfiguration:
+    """ A container for the target Qt configuration. """
+
+    def __init__(self, qmake):
+        """ Initialise the configuration.  qmake is the full pathname of the
+        qmake executable that will provide the configuration.
+        """
+
+        inform("Querying qmake about your Qt installation...")
+
+        pipe = os.popen(' '.join([qmake, '-query']))
+
+        for l in pipe:
+            l = l.strip()
+
+            tokens = l.split(':', 1)
+            if isinstance(tokens, list):
+                if len(tokens) != 2:
+                    error("Unexpected output from qmake: '%s'\n" % l)
+
+                name, value = tokens
+            else:
+                name = tokens
+                value = None
+
+            name = name.replace('/', '_')
+
+            setattr(self, name, value)
+
+        pipe.close()
+
+
+class TargetConfiguration:
+    """ A container for configuration information about the target. """
+
+    def __init__(self):
+        """ Initialise the configuration with default values. """
+
+        # Values based on the host Python configuration.
+        py_config = HostPythonConfiguration()
+        self.py_inc_dir = py_config.inc_dir
+        self.py_lib_dir = py_config.lib_dir
+        self.py_platform = py_config.platform
+        self.py_version = py_config.version
+        self.pyqt_bin_dir = py_config.bin_dir
+        self.pyqt_module_dir = py_config.module_dir
+        self.pyqt_sip_dir = os.path.join(py_config.data_dir, 'sip', 'PyQt5')
+        self.pyuic_interpreter = py_config.pyuic_interpreter
+
+        # The qmake spec we want to use.
+        if self.py_platform == 'win32':
+            if self.py_version >= 0x030300:
+                self.qmake_spec = 'win32-msvc2010'
+            elif self.py_version >= 0x020600:
+                self.qmake_spec = 'win32-msvc2008'
+            elif self.py_version >= 0x020400:
+                self.qmake_spec = 'win32-msvc.net'
+            else:
+                self.qmake_spec = 'win32-msvc'
+        else:
+            # Use the Qt default.  (We may update it for OS/X later.)
+            self.qmake_spec = ''
+
+        self.default_qmake_spec = ''
+
+        # Remaining values.
+        self.dbus_inc_dirs = []
+        self.dbus_lib_dirs = []
+        self.dbus_libs = []
+        self.debug = False
+        self.designer_plugin_dir = ''
+        self.no_designer_plugin = False
+        self.no_docstrings = False
+        self.no_qml_plugin = False
+        self.no_tools = False
+        self.prot_is_public = (self.py_platform.startswith('linux') or self.py_platform == 'darwin')
+        self.qmake = self._find_exe('qmake')
+        self.qmake_variables = []
+        self.py_pylib_dir = ''
+        self.py_pylib_lib = ''
+        self.py_pyshlib = ''
+        self.pydbus_inc_dir = ''
+        self.pydbus_module_dir = ''
+        self.pyqt_disabled_features = []
+        self.pyqt_modules = []
+        self.qml_plugin_dir = ''
+        self.qsci_api = False
+        self.qsci_api_dir = ''
+        self.qt_licensee = ''
+        self.qt_shared = False
+        self.qt_version = 0
+        self.sip = self._find_exe('sip')
+        self.sip_inc_dir = ''
+        self.static = False
+        self.sysroot = ''
+        self.vend_enabled = False
+        self.vend_inc_dir = ''
+        self.vend_lib_dir = ''
+
+    def from_configuration_file(self, config_file):
+        """ Initialise the configuration with values from a file.  config_file
+        is the name of the configuration file.
+        """
+
+        inform("Reading configuration from %s..." % config_file)
+
+        parser = ConfigurationFileParser(config_file)
+
+        # Populate some presets from the command line.
+        version = version_to_string(self.py_version).split('.')
+        parser.preset('py_major', version[0])
+        parser.preset('py_minor', version[1])
+
+        parser.preset('sysroot', self.sysroot)
+
+        # Find the section corresponding to the version of Qt.
+        qt_major = self.qt_version >> 16
+        section = None
+        latest_section = -1
+
+        for name in parser.sections():
+            parts = name.split()
+            if len(parts) != 2 or parts[0] != 'Qt':
+                continue
+
+            section_qt_version = version_from_string(parts[1])
+            if section_qt_version is None:
+                continue
+
+            # Major versions must match.
+            if section_qt_version >> 16 != self.qt_version >> 16:
+                continue
+
+            # It must be no later that the version of Qt.
+            if section_qt_version > self.qt_version:
+                continue
+
+            # Save it if it is the latest so far.
+            if section_qt_version > latest_section:
+                section = name
+                latest_section = section_qt_version
+
+        if section is None:
+            error("%s does not define a section that covers Qt v%s." % (config_file, version_to_string(self.qt_version)))
+
+        self.py_platform = parser.get(section, 'py_platform', self.py_platform)
+        self.py_inc_dir = parser.get(section, 'py_inc_dir', self.py_inc_dir)
+        self.py_pylib_dir = parser.get(section, 'py_pylib_dir',
+                self.py_pylib_dir)
+        self.py_pylib_lib = parser.get(section, 'py_pylib_lib',
+                self.py_pylib_lib)
+        self.py_pyshlib = parser.get(section, 'py_pyshlib', self.py_pyshlib)
+
+        self.qt_shared = parser.getboolean(section, 'qt_shared',
+                self.qt_shared)
+
+        self.pyqt_disabled_features = parser.getlist(section,
+                'pyqt_disabled_features', self.pyqt_disabled_features)
+        self.pyqt_modules = parser.getlist(section, 'pyqt_modules',
+                self.pyqt_modules)
+        self.pyqt_module_dir = parser.get(section, 'pyqt_module_dir',
+                self.pyqt_module_dir)
+        self.pyqt_bin_dir = parser.get(section, 'pyqt_bin_dir',
+                self.pyqt_bin_dir)
+        self.pyqt_sip_dir = parser.get(section, 'pyqt_sip_dir',
+                self.pyqt_sip_dir)
+        self.pyuic_interpreter = parser.get(section, 'pyuic_interpreter',
+                self.pyuic_interpreter)
+ 
+    def from_introspection(self, verbose, debug):
+        """ Initialise the configuration by introspecting the system. """
+
+        inform("Determining the details of your Qt installation...")
+
+        out_file = 'qtdetail.out'
+
+        source = '''#include <QCoreApplication>
+#include <QFile>
+#include <QLibraryInfo>
+#include <QTextStream>
+
+int main(int argc, char **argv)
+{
+    QCoreApplication app(argc, argv);
+    QFile outf("%s");
+
+    if (!outf.open(QIODevice::WriteOnly|QIODevice::Truncate|QIODevice::Text))
+        return 1;
+
+    QTextStream out(&outf);
+
+    out << QLibraryInfo::licensee() << '\\n';
+
+#if defined(QT_SHARED) || defined(QT_DLL)
+    out << "shared\\n";
+#else
+    out << "static\\n";
+#endif
+
+    // Determine which features should be disabled.
+
+#if defined(QT_NO_ACCESSIBILITY)
+    out << "PyQt_Accessibility\\n";
+#endif
+
+#if defined(QT_NO_SESSIONMANAGER)
+    out << "PyQt_SessionManager\\n";
+#endif
+
+#if defined(QT_NO_SSL)
+    out << "PyQt_SSL\\n";
+#endif
+
+#if defined(QT_NO_PRINTDIALOG)
+    out << "PyQt_PrintDialog\\n";
+#endif
+
+#if defined(QT_NO_PRINTER)
+    out << "PyQt_Printer\\n";
+#endif
+
+#if defined(QT_NO_PRINTPREVIEWDIALOG)
+    out << "PyQt_PrintPreviewDialog\\n";
+#endif
+
+#if defined(QT_NO_PRINTPREVIEWWIDGET)
+    out << "PyQt_PrintPreviewWidget\\n";
+#endif
+
+#if defined(QT_NO_RAWFONT)
+    out << "PyQt_RawFont\\n";
+#endif
+
+#if defined(QT_NO_OPENGL)
+    out << "PyQt_OpenGL\\n";
+    out << "PyQt_Desktop_OpenGL\\n";
+#elif defined(QT_OPENGL_ES_2)
+    out << "PyQt_Desktop_OpenGL\\n";
+#endif
+
+#if QT_VERSION < 0x050200
+// This is the test used in qglobal.h in Qt prior to v5.2.  In v5.2 and later
+// qreal is always double.
+#if defined(QT_NO_FPU) || defined(Q_PROCESSOR_ARM) || defined(Q_OS_WINCE)
+    out << "PyQt_qreal_double\\n";
+#endif
+#endif
+
+    return 0;
+}
+''' % out_file
+
+        cmd = compile_qt_program(self, verbose, 'qtdetail', source, 'QtCore',
+                debug=debug)
+
+        if cmd is None:
+            error("Failed to determine the detail of your Qt installation. Try again using the --verbose flag to see more detail about the problem.")
+
+        # Create the output file, first making sure it doesn't exist.
+        remove_file(out_file)
+        run_command(cmd, verbose)
+
+        if not os.access(out_file, os.F_OK):
+            error("%s failed to create %s. Make sure your Qt installation is correct." % (cmd, out_file))
+
+        # Read the details.
+        f = open(out_file)
+        lines = f.read().strip().split('\n')
+        f.close()
+
+        self.qt_licensee = lines[0]
+        self.qt_shared = (lines[1] == 'shared')
+        self.pyqt_disabled_features = lines[2:]
+
+        # Get the details of the Python interpreter library.
+        py_major = self.py_version >> 16
+        py_minor = (self.py_version >> 8) & 0x0ff
+
+        if sys.platform == 'win32':
+            debug_suffix = get_win32_debug_suffix(debug)
+            pylib_lib = 'python%d%d%s' % (py_major, py_minor, debug_suffix)
+
+            pylib_dir = self.py_lib_dir
+
+            # Assume Python is a DLL on Windows.
+            pyshlib = pylib_lib
+        else:
+            abi = getattr(sys, 'abiflags', '')
+            pylib_lib = 'python%d.%d%s' % (py_major, py_minor, abi)
+
+            # Use distutils to get the additional configuration.
+            from distutils.sysconfig import get_config_vars
+            ducfg = get_config_vars()
+
+            config_args = ducfg.get('CONFIG_ARGS', '')
+
+            if sys.platform == 'darwin':
+                dynamic_pylib = '--enable-framework' in config_args
+            else:
+                dynamic_pylib = '--enable-shared' in config_args
+
+            if dynamic_pylib:
+                pyshlib = ducfg.get('LDLIBRARY', '')
+
+                exec_prefix = ducfg['exec_prefix']
+                multiarch = ducfg.get('MULTIARCH', '')
+                libdir = ducfg['LIBDIR']
+
+                if glob.glob('%s/lib/libpython%d.%d*' % (exec_prefix, py_major, py_minor)):
+                    pylib_dir = exec_prefix + '/lib'
+                elif multiarch != '' and glob.glob('%s/lib/%s/libpython%d.%d*' % (exec_prefix, multiarch, py_major, py_minor)):
+                    pylib_dir = exec_prefix + '/lib/' + multiarch
+                elif glob.glob('%s/libpython%d.%d*' % (libdir, py_major, py_minor)):
+                    pylib_dir = libdir
+                else:
+                    pylib_dir = ''
+            else:
+                pyshlib = ''
+
+        self.py_pylib_dir = pylib_dir
+        self.py_pylib_lib = pylib_lib
+        self.py_pyshlib = pyshlib
+
+        # Apply sysroot where necessary.
+        if self.sysroot != '':
+            self.py_inc_dir = self._apply_sysroot(self.py_inc_dir)
+            self.py_pylib_dir = self._apply_sysroot(self.py_pylib_dir)
+            self.pyqt_bin_dir = self._apply_sysroot(self.pyqt_bin_dir)
+            self.pyqt_module_dir = self._apply_sysroot(self.pyqt_module_dir)
+            self.pyqt_sip_dir = self._apply_sysroot(self.pyqt_sip_dir)
+
+    def _apply_sysroot(self, dir_name):
+        """ Replace any leading sys.prefix of a directory name with sysroot.
+        """
+
+        if dir_name.startswith(sys.prefix):
+            dir_name = self.sysroot + dir_name[len(sys.prefix):]
+
+        return dir_name
+
+    def get_qt_configuration(self):
+        """ Get the Qt configuration that can be extracted from qmake. """
+
+        # Query qmake.
+        qt_config = TargetQtConfiguration(self.qmake)
+
+        self.qt_version = 0
+        try:
+            qt_version_str = qt_config.QT_VERSION
+            for v in qt_version_str.split('.'):
+                self.qt_version *= 256
+                self.qt_version += int(v)
+        except AttributeError:
+            qt_version_str = "3"
+
+        # Check the Qt version number as soon as possible.
+        if self.qt_version < 0x050000:
+            if sys.platform == 'win32':
+                error(
+                        "PyQt5 requires Qt v5.0 or later. You seem to be "
+                        "using v%s. Make sure the correct version of qmake is "
+                        "on your PATH." % qt_version_str)
+            else:
+                error(
+                        "PyQt5 requires Qt v5.0 or later. You seem to be "
+                        "using v%s. Use the --qmake flag to specify the "
+                        "correct version of qmake." % qt_version_str)
+
+        self.designer_plugin_dir = qt_config.QT_INSTALL_PLUGINS + '/designer'
+        self.qml_plugin_dir = qt_config.QT_INSTALL_PLUGINS + '/PyQt5'
+
+        if self.sysroot == '':
+            self.sysroot = qt_config.QT_SYSROOT
+
+        # By default, install the API file if QScintilla seems to be installed
+        # in the default location.
+        self.qsci_api_dir = os.path.join(qt_config.QT_INSTALL_DATA, 'qsci')
+        self.qsci_api = os.path.isdir(self.qsci_api_dir)
+
+        # Save the default qmake spec. and finalise the value we want to use.
+        self.default_qmake_spec = qt_config.QMAKE_SPEC
+
+        if self.qmake_spec == '':
+            self.qmake_spec = self.default_qmake_spec
+
+        # The binary OS/X Qt installer defaults to XCode.  If this is what we
+        # might have then use macx-clang.
+        if self.qmake_spec == 'macx-xcode':
+            # This will exist (and we can't check anyway).
+            self.qmake_spec = 'macx-clang'
+
+    def post_configuration(self):
+        """ Handle any remaining default configuration after having read a
+        configuration file or introspected the system.
+        """
+
+        # The platform may have changed so update the default.
+        if self.py_platform.startswith('linux') or self.py_platform == 'darwin':
+            self.prot_is_public = True
+
+        self.sip_inc_dir = self.py_inc_dir
+        self.vend_inc_dir = self.py_inc_dir
+        self.vend_lib_dir = self.py_lib_dir
+
+    def apply_pre_options(self, opts):
+        """ Apply options from the command line that influence subsequent
+        configuration.  opts are the command line options.
+        """
+
+        # Get the target Python version.
+        if opts.target_py_version is not None:
+            self.py_version = opts.target_py_version
+
+        # Get the system root.
+        if opts.sysroot is not None:
+            self.sysroot = opts.sysroot
+
+        # Determine how to run qmake.
+        try:
+            qmake = opts.qmake
+        except AttributeError:
+            # Windows.
+            qmake = None
+
+        if qmake is not None:
+            self.qmake = qmake
+        elif self.qmake is None:
+            # Under Windows qmake and the Qt DLLs must be on the system PATH
+            # otherwise the dynamic linker won't be able to resolve the
+            # symbols.  On other systems we assume we can just run qmake by
+            # using its full pathname.
+            if sys.platform == 'win32':
+                error("Make sure you have a working Qt qmake on your PATH.")
+            else:
+                error(
+                        "Use the --qmake argument to explicitly specify a "
+                        "working Qt qmake.")
+
+        if opts.qmakespec is not None:
+            self.qmake_spec = opts.qmakespec
+
+    def apply_post_options(self, opts):
+        """ Apply options from the command line that override the previous
+        configuration.  opts are the command line options.
+        """
+
+        if opts.assumeshared:
+            self.qt_shared = True
+
+        if opts.bindir is not None:
+            self.pyqt_bin_dir = opts.bindir
+
+        if opts.debug:
+            self.debug = True
+
+        if opts.designerplugindir is not None:
+            self.designer_plugin_dir = opts.designerplugindir
+
+        if opts.destdir is not None:
+            self.pyqt_module_dir = opts.destdir
+
+        if len(opts.modules) > 0:
+            self.pyqt_modules = opts.modules
+
+        if opts.nodesignerplugin:
+            self.no_designer_plugin = True
+
+        if opts.nodocstrings:
+            self.no_docstrings = True
+
+        if opts.noqmlplugin:
+            self.no_qml_plugin = True
+
+        if opts.notools:
+            self.no_tools = True
+
+        if opts.protispublic is not None:
+            self.prot_is_public = opts.protispublic
+
+        if opts.pydbusincdir is not None:
+            self.pydbus_inc_dir = opts.pydbusincdir
+
+        if opts.pyuicinterpreter is not None:
+            self.pyuic_interpreter = opts.pyuicinterpreter
+
+        if opts.qsciapidir is not None:
+            self.qsci_api_dir = opts.qsciapidir
+
+            # Assume we want to install the API file if we have provided an
+            # installation directory.
+            self.qsci_api = True
+
+        if opts.qsciapi is not None:
+            self.qsci_api = opts.qsciapi
+
+        if opts.qsciapidir is not None:
+            self.qsci_api_dir = opts.qsciapidir
+
+        if opts.sip is not None:
+            self.sip = opts.sip
+
+        if opts.sipdir is not None:
+            self.pyqt_sip_dir = opts.sipdir
+        elif not opts.install_sipfiles:
+            self.pyqt_sip_dir = ''
+
+        if opts.sipincdir is not None:
+            self.sip_inc_dir = opts.sipincdir
+
+        if opts.static:
+            self.static = True
+
+        if opts.vendenabled:
+            self.vend_enabled = True
+
+        if opts.vendincdir is not None:
+            self.vend_inc_dir = opts.vendincdir
+
+        if opts.vendlibdir is not None:
+            self.vend_lib_dir = opts.vendlibdir
+
+        # Handle any conflicts.
+        if not self.qt_shared:
+            if not self.static:
+                error(
+                        "Qt has been built as static libraries so the "
+                        "--static argument should be used.")
+
+        if self.vend_enabled and self.static:
+            error(
+                    "Using the VendorID package when building static "
+                    "libraries makes no sense.")
+
+    def get_pylib_link_arguments(self):
+        """ Return a string to append to qmake's LIBS macro to link against the
+        Python interpreter library.
+        """
+
+        return qmake_quote('-L' + self.py_pylib_dir) + ' -l' + self.py_pylib_lib
+
+    @staticmethod
+    def _find_exe(exe):
+        """ Find an executable, ie. the first on the path. """
+
+        try:
+            path = os.environ['PATH']
+        except KeyError:
+            path = ''
+
+        if sys.platform == 'win32':
+            exe = exe + '.exe'
+
+        for d in path.split(os.pathsep):
+            exe_path = os.path.join(d, exe)
+
+            if os.path.isfile(exe_path) and os.access(exe_path, os.X_OK):
+                return exe_path
+
+        return None
+
+
+def create_optparser(target_config):
+    """ Create the parser for the command line.  target_config is the target
+    configuration containing default values.
+    """
+
+    def store_abspath(option, opt_str, value, parser):
+        setattr(parser.values, option.dest, os.path.abspath(value))
+
+    def store_abspath_dir(option, opt_str, value, parser):
+        if not os.path.isdir(value):
+            raise optparse.OptionValueError("'%s' is not a directory" % value)
+        setattr(parser.values, option.dest, os.path.abspath(value))
+
+    def store_abspath_exe(option, opt_str, value, parser):
+        if not os.access(value, os.X_OK):
+            raise optparse.OptionValueError("'%s' is not an executable" % value)
+        setattr(parser.values, option.dest, os.path.abspath(value))
+
+    def store_abspath_file(option, opt_str, value, parser):
+        if not os.path.isfile(value):
+            raise optparse.OptionValueError("'%s' is not a file" % value)
+        setattr(parser.values, option.dest, os.path.abspath(value))
+
+    def store_version(option, opt_str, value, parser):
+        version = version_from_string(value)
+        if version is None:
+            raise optparse.OptionValueError(
+                    "'%s' is not a valid version number" % value)
+        setattr(parser.values, option.dest, version)
+
+    p = optparse.OptionParser(usage="python %prog [opts] [name=value] "
+            "[name+=value]", version=PYQT_VERSION_STR)
+
+    # Note: we don't use %default to be compatible with Python 2.3.
+    p.add_option("--static", "-k", dest='static', default=False,
+            action='store_true',
+            help="build modules as static libraries")
+    p.add_option("--no-docstrings", dest='nodocstrings', default=False,
+            action='store_true',
+            help="disable the generation of docstrings")
+    p.add_option("--trace", "-r", dest='tracing', default=False,
+            action='store_true',
+            help="build modules with tracing enabled")
+    p.add_option("--debug", "-u", dest='debug', default=False,
+            action='store_true',
+            help="build modules with debugging symbols")
+    p.add_option("--verbose", "-w", dest='verbose', default=False,
+            action='store_true',
+            help="enable verbose output during configuration")
+
+    p.add_option("--concatenate", "-c", dest='concat', default=False,
+            action='store_true',
+            help="concatenate each module's C++ source files")
+    p.add_option("--concatenate-split", "-j", dest='split', type='int',
+            default=1, metavar="N",
+            help="split the concatenated C++ source files into N pieces "
+                    "[default: 1]")
+
+    # Configuration.
+    g = optparse.OptionGroup(p, title="Configuration")
+    g.add_option("--confirm-license", dest='license_confirmed', default=False,
+            action='store_true',
+            help="confirm acceptance of the license")
+    g.add_option("--target-py-version", dest='target_py_version',
+            type='string', action='callback', callback=store_version,
+            metavar="VERSION",
+            help="the major.minor version of the target Python [default: "
+                    "%s]" % version_to_string(target_config.py_version,
+                            parts=2))
+    g.add_option("--sysroot", dest='sysroot', type='string', action='callback',
+            callback=store_abspath_dir, metavar="DIR",
+            help="DIR is the target system root directory")
+    g.add_option("--spec", dest='qmakespec', default=None, action='store',
+            metavar="SPEC",
+            help="pass -spec SPEC to qmake [default: %s]" % "don't pass -spec" if target_config.qmake_spec == '' else target_config.qmake_spec)
+    g.add_option("--enable", "-e", dest='modules', default=[], action='append',
+            metavar="MODULE",
+            help="enable checks for the specified MODULE [default: checks for "
+                    "all modules will be enabled]")
+    g.add_option("--no-designer-plugin", dest='nodesignerplugin',
+            default=False, action='store_true',
+            help="disable the building of the Python plugin for Qt Designer "
+                    "[default: enabled]")
+    g.add_option("--no-qml-plugin", dest='noqmlplugin', default=False,
+            action='store_true',
+            help="disable the building of the Python plugin for qmlscene "
+                    "[default: enabled]")
+    g.add_option("--assume-shared", dest='assumeshared', default=False,
+            action='store_true',
+            help="assume that the Qt libraries have been built as shared "
+                    "libraries [default: check]")
+    g.add_option("--no-timestamp", "-T", dest='notimestamp', default=False,
+            action='store_true',
+            help="suppress timestamps in the header comments of generated "
+                    "code [default: include timestamps]")
+    g.add_option("--configuration", dest='config_file', type='string',
+            action='callback', callback=store_abspath_file, metavar="FILE",
+            help="FILE contains the target configuration")
+
+    g.add_option("--protected-is-public", dest='protispublic', default=None,
+            action='store_true',
+            help="enable building with 'protected' redefined as 'public' "
+                    "[default: %s]" %
+                            "enabled" if target_config.prot_is_public
+                            else "disabled")
+    g.add_option("--protected-not-public", dest='protispublic', default=None,
+            action='store_false',
+            help="disable building with 'protected' redefined as 'public'")
+
+    g.add_option("--pyuic5-interpreter", dest='pyuicinterpreter',
+            type='string', default=None, action='callback',
+            callback=store_abspath_exe, metavar="FILE",
+            help="the name of the Python interpreter to run the pyuic5 "
+                    "wrapper is FILE [default: %s]" %
+                            target_config.pyuic_interpreter)
+
+    if sys.platform != 'win32':
+        g.add_option("--qmake", "-q", dest='qmake', type='string',
+                default=None, action='callback', callback=store_abspath_exe,
+                metavar="FILE",
+                help="the pathname of qmake is FILE [default: "
+                        "%s]" % (target_config.qmake or "search PATH"))
+
+    g.add_option("--sip", dest='sip', type='string', default=None,
+            action='callback', callback=store_abspath_exe, metavar="FILE",
+            help="the pathname of sip is FILE [default: "
+                    "%s]" % (target_config.sip or "None"))
+    g.add_option("--sip-incdir", dest='sipincdir', type='string',
+            default=None, action='callback', callback=store_abspath_dir,
+            metavar="DIR",
+            help="the directory containing the sip.h header file is DIR "
+                    "[default: %s]" % target_config.sip_inc_dir)
+
+    g.add_option("--dbus", "-s", dest='pydbusincdir', type='string',
+            default=None, action='callback', callback=store_abspath_dir,
+            metavar="DIR",
+            help="the directory containing the dbus/dbus-python.h header is "
+            "DIR [default: supplied by pkg-config]")
+    p.add_option_group(g)
+
+    # Installation.
+    g = optparse.OptionGroup(p, title="Installation")
+    g.add_option("--bindir", "-b", dest='bindir', type='string', default=None,
+            action='callback', callback=store_abspath, metavar="DIR",
+            help="install pyuic5, pyrcc5 and pylupdate5 in DIR [default: "
+                    "%s]" % target_config.pyqt_bin_dir)
+    g.add_option("--destdir", "-d", dest='destdir', type='string',
+            default=None, action='callback', callback=store_abspath,
+            metavar="DIR",
+            help="install the PyQt5 Python package in DIR [default: "
+                    "%s]" % target_config.pyqt_module_dir)
+    g.add_option("--designer-plugindir", dest='designerplugindir',
+            type='string', default=None, action='callback',
+            callback=store_abspath, metavar="DIR",
+            help="install the Python plugin for Qt Designer in DIR "
+                    "[default: QT_INSTALL_PLUGINS/designer]")
+    g.add_option("--qml-plugindir", dest='qmlplugindir', type='string',
+            default=None, action='callback', callback=store_abspath,
+            metavar="DIR",
+            help="install the Python plugin for qmlscene in DIR "
+                    "[default: QT_INSTALL_PLUGINS/PyQt5]")
+    g.add_option("--no-sip-files", action="store_false", default=True,
+            dest="install_sipfiles", help="disable the installation of the "
+            ".sip files [default: enabled]")
+    g.add_option("--sipdir", "-v", dest='sipdir', type='string', default=None,
+            action='callback', callback=store_abspath, metavar="DIR",
+            help="install the PyQt5 .sip files in DIR [default: %s]" %
+                    target_config.pyqt_sip_dir)
+    g.add_option("--no-tools", action="store_true", default=False,
+            dest="notools",
+            help="disable the building of pyuic5, pyrcc5 and pylupdate5 "
+                    "[default: enabled]")
+    p.add_option_group(g)
+
+    # Vendor ID.
+    g = optparse.OptionGroup(p, title="VendorID support")
+    g.add_option("--vendorid", "-i", dest='vendenabled', default=False,
+            action='store_true',
+            help="enable checking of signed interpreters using the VendorID "
+                    "package [default: %s]" %
+                    "enabled" if target_config.vend_enabled else "disabled")
+    g.add_option("--vendorid-incdir", "-l", dest='vendincdir', type='string',
+            default=None, action='callback', callback=store_abspath_dir,
+            metavar="DIR",
+            help="the VendorID header file is installed in DIR [default: "
+                    "%s]" % target_config.vend_inc_dir)
+    g.add_option("--vendorid-libdir", "-m", dest='vendlibdir', type='string',
+            default=None, action='callback', callback=store_abspath_dir,
+            metavar="DIR",
+            help="the VendorID library is installed in DIR [default: "
+                    "%s]" % target_config.vend_lib_dir)
+    p.add_option_group(g)
+
+    # QScintilla.
+    g = optparse.OptionGroup(p, title="QScintilla support")
+    g.add_option("--qsci-api", "-a", dest='qsciapi', default=None,
+            action='store_true',
+            help="always install the PyQt API file for QScintilla [default: "
+                    "install only if QScintilla installed]")
+    g.add_option("--no-qsci-api", dest='qsciapi', default=None,
+            action='store_false',
+            help="do not install the PyQt API file for QScintilla [default: "
+                    "install only if QScintilla installed]")
+    g.add_option("--qsci-api-destdir", "-n", dest='qsciapidir', type='string',
+            default=None, action='callback', callback=store_abspath,
+            metavar="DIR",
+            help="install the PyQt5 API file for QScintilla in DIR [default: "
+                    "QT_INSTALL_DATA/qsci]")
+    p.add_option_group(g)
+
+    return p
+
+
+def check_modules(target_config, verbose):
+    """ Check which modules can be built and update the target configuration
+    accordingly.  target_config is the target configuration.  verbose is set if
+    the output is to be displayed.
+    """
+
+    target_config.pyqt_modules.append('QtCore')
+
+    check_module(target_config, verbose, 'QtGui', 'qfont.h', 'new QFont()')
+    check_module(target_config, verbose, 'QtHelp', 'qhelpengine.h',
+            'new QHelpEngine("foo")')
+    check_module(target_config, verbose, 'QtMultimedia', 'QAudioDeviceInfo',
+            'new QAudioDeviceInfo()')
+    check_module(target_config, verbose, 'QtMultimediaWidgets', 'QVideoWidget',
+            'new QVideoWidget()')
+    check_module(target_config, verbose, 'QtNetwork', 'qhostaddress.h',
+            'new QHostAddress()')
+    check_module(target_config, verbose, 'QtOpenGL', 'qgl.h',
+            'new QGLWidget()')
+    check_module(target_config, verbose, 'QtPrintSupport', 'qprinter.h',
+            'new QPrinter()')
+    check_module(target_config, verbose, 'QtQml', 'qjsengine.h',
+            'new QJSEngine()')
+    check_module(target_config, verbose, 'QtQuick', 'qquickwindow.h',
+            'new QQuickWindow()')
+    check_module(target_config, verbose, 'QtSql', 'qsqldatabase.h',
+            'new QSqlDatabase()')
+    check_module(target_config, verbose, 'QtSvg', 'qsvgwidget.h',
+            'new QSvgWidget()')
+    check_module(target_config, verbose, 'QtTest', 'QtTest',
+            'QTest::qSleep(0)')
+    check_module(target_config, verbose, 'QtWebKit', 'qwebkitglobal.h',
+            'qWebKitVersion()')
+    check_module(target_config, verbose, 'QtWebKitWidgets', 'qwebpage.h',
+            'new QWebPage()')
+    check_module(target_config, verbose, 'QtWidgets', 'qwidget.h',
+            'new QWidget()')
+    check_module(target_config, verbose, 'QtXmlPatterns', 'qxmlname.h',
+            'new QXmlName()')
+
+    if target_config.qt_shared:
+        check_module(target_config, verbose, 'QtDesigner', 'QExtensionFactory',
+                'new QExtensionFactory()')
+    else:
+        inform("QtDesigner module disabled with static Qt libraries.")
+
+    check_module(target_config, verbose, 'QAxContainer', 'qaxobject.h',
+            'new QAxObject()')
+
+    check_module(target_config, verbose, 'QtDBus', 'qdbusconnection.h',
+            'QDBusConnection::systemBus()')
+    check_dbus(target_config, verbose)
+
+    if target_config.qt_version >= 0x050100:
+        check_5_1_modules(target_config, verbose)
+
+    if target_config.qt_version >= 0x050200:
+        check_5_2_modules(target_config, verbose)
+
+    if target_config.qt_version >= 0x050300:
+        check_5_3_modules(target_config, verbose)
+
+
+def check_5_1_modules(target_config, verbose):
+    """ Check which modules introduced in Qt v5.1 can be built and update the
+    target configuration accordingly.  target_config is the target
+    configuration.  verbose is set if the output is to be displayed.
+    """
+
+    # Check the OpenGL functions.
+    if 'PyQt_OpenGL' in target_config.pyqt_disabled_features:
+        pass
+    elif 'PyQt_Desktop_OpenGL' in target_config.pyqt_disabled_features:
+        check_module(target_config, verbose, '_QOpenGLFunctions_ES2',
+                'qopenglfunctions_es2.h', 'new QOpenGLFunctions_ES2()')
+    else:
+        desktop_versions = (
+                '1_0', '1_1', '1_2', '1_3', '1_4', '1_5',
+                '2_0', '2_1',
+                '3_0', '3_1',
+                '3_2_Compatibility', '3_2_Core',
+                '3_3_Compatibility', '3_3_Core',
+                '4_0_Compatibility', '4_0_Core',
+                '4_1_Compatibility', '4_1_Core',
+                '4_2_Compatibility', '4_2_Core',
+                '4_3_Compatibility', '4_3_Core')
+
+        for ogl in desktop_versions:
+            ogl_module = '_QOpenGLFunctions_' + ogl
+            ogl_h = 'qopenglfunctions_' + ogl.lower() + '.h'
+            ogl_ctor = 'new QOpenGLFunctions_' + ogl + '()'
+
+            check_module(target_config, verbose, ogl_module, ogl_h, ogl_ctor)
+
+    check_module(target_config, verbose, 'QtSensors', 'qsensor.h',
+            'new QSensor(QByteArray())')
+    check_module(target_config, verbose, 'QtSerialPort', 'qserialport.h',
+            'new QSerialPort()')
+    check_module(target_config, verbose, 'QtX11Extras', 'QX11Info',
+            'QX11Info::display()')
+
+
+def check_5_2_modules(target_config, verbose):
+    """ Check which modules introduced in Qt v5.2 can be built and update the
+    target configuration accordingly.  target_config is the target
+    configuration.  verbose is set if the output is to be displayed.
+    """
+
+    check_module(target_config, verbose, 'QtBluetooth', 'qbluetoothaddress.h',
+            'new QBluetoothAddress()')
+    check_module(target_config, verbose, 'QtMacExtras', 'qmacpasteboardmime.h',
+            'class Foo : public QMacPasteboardMime {}')
+    check_module(target_config, verbose, 'QtPositioning', 'qgeoaddress.h',
+            'new QGeoAddress()')
+    check_module(target_config, verbose, 'QtWinExtras', 'QtWin',
+            'QtWin::isCompositionEnabled()')
+
+
+def check_5_3_modules(target_config, verbose):
+    """ Check which modules introduced in Qt v5.3 can be built and update the
+    target configuration accordingly.  target_config is the target
+    configuration.  verbose is set if the output is to be displayed.
+    """
+
+    check_module(target_config, verbose, 'QtQuickWidgets', 'qquickwidget.h',
+            'new QQuickWidget()')
+    check_module(target_config, verbose, 'QtWebSockets', 'qwebsocket.h',
+            'new QWebSocket()')
+    check_module(target_config, verbose, 'Enginio', 'enginioclient.h',
+            'new EnginioClient()')
+
+
+def generate_makefiles(target_config, verbose, no_timestamp, parts, tracing):
+    """ Generate the makefiles to build everything.  target_config is the
+    target configuration.  verbose is set if the output is to be displayed.
+    no_timestamp is set if the .sip files should exclude the timestamp.  parts
+    is the number of parts the generated code should be split into.  tracing is
+    set if the generated code should include tracing calls.
+    """
+
+    # For the top-level .pro file.
+    toplevel_pro = 'PyQt5.pro'
+    subdirs = []
+
+    # Set the SIP platform, version and feature flags.
+    sip_flags = get_sip_flags(target_config)
+
+    # Go through the modules.
+    for mname in target_config.pyqt_modules:
+        metadata = MODULE_METADATA[mname]
+
+        if metadata.qpy_lib:
+            sp_qpy_dir = source_path('qpy', mname)
+
+            qpy_c_sources = [os.path.relpath(f, mname)
+                    for f in glob.glob(os.path.join(sp_qpy_dir, '*.c'))]
+            qpy_cpp_sources = [os.path.relpath(f, mname)
+                    for f in glob.glob(os.path.join(sp_qpy_dir, '*.cpp'))]
+            qpy_headers = [os.path.relpath(f, mname)
+                    for f in glob.glob(os.path.join(sp_qpy_dir, '*.h'))]
+
+            qpy_sources = qpy_c_sources + qpy_cpp_sources
+        else:
+            qpy_sources = []
+            qpy_headers = []
+
+        generate_sip_module_code(target_config, verbose, no_timestamp, parts,
+                tracing, mname, sip_flags, qpy_sources, qpy_headers)
+        subdirs.append(mname)
+
+    # Generate the composite module.
+    qtmod_sipdir = os.path.join('sip', 'Qt')
+    mk_clean_dir(qtmod_sipdir)
+
+    qtmod_sipfile = os.path.join(qtmod_sipdir, 'Qtmod.sip')
+    f = open_for_writing(qtmod_sipfile)
+
+    f.write('''%CompositeModule PyQt5.Qt
+
+''')
+
+    for mname in COMPOSITE_COMPONENTS:
+        if mname in target_config.pyqt_modules:
+            f.write('%%Include %s/%smod.sip\n' % (mname, mname))
+
+    f.close()
+
+    generate_sip_module_code(target_config, verbose, no_timestamp, parts,
+            tracing, 'Qt', sip_flags)
+    subdirs.append('Qt')
+
+    if not target_config.no_tools:
+        # Generate pylupdate5 and pyrcc5.
+        for tool in ('pylupdate', 'pyrcc'):
+            generate_application_makefile(target_config, verbose, tool)
+            subdirs.append(tool)
+
+        # Generate the pyuic5 wrapper.
+        pyuic_wrapper = generate_pyuic5_wrapper(target_config)
+
+    # Generate the Qt Designer plugin.
+    if not target_config.no_designer_plugin and 'QtDesigner' in target_config.pyqt_modules:
+        if generate_plugin_makefile(target_config, verbose, 'designer', target_config.designer_plugin_dir, "Qt Designer"):
+            subdirs.append('designer')
+
+    # Generate the qmlscene plugin.
+    if not target_config.no_qml_plugin and 'QtQml' in target_config.pyqt_modules:
+        if generate_plugin_makefile(target_config, verbose, 'qmlscene', target_config.qml_plugin_dir, "qmlscene"):
+            subdirs.append('qmlscene')
+
+            rewrite_qmldir(target_config, 'Charts',
+                    source_path('examples', 'quick', 'tutorials', 'extending',
+                            'chapter6-plugins'))
+
+    # Generate the QScintilla API file.
+    if target_config.qsci_api:
+        inform("Generating the QScintilla API file...")
+        f = open_for_writing('PyQt5.api')
+
+        for mname in target_config.pyqt_modules:
+            api = open(mname + '.api')
+
+            for l in api:
+                f.write('PyQt5.' + l)
+
+            api.close()
+            os.remove(mname + '.api')
+
+        f.close()
+
+    # Generate the Python dbus module.
+    if target_config.pydbus_module_dir != '':
+        mname = 'dbus'
+
+        mk_dir(mname)
+        sp_src_dir = source_path(mname)
+
+        includepath = ' '.join(target_config.dbus_inc_dirs)
+
+        lib_dirs = ['-L' + l for l in target_config.dbus_lib_dirs]
+        lib_names = ['-l' + l for l in target_config.dbus_libs]
+        libs = ' '.join(lib_dirs + lib_names)
+
+        generate_module_makefile(target_config, verbose, mname,
+                includepath=includepath, libs=libs,
+                install_path=target_config.pydbus_module_dir,
+                src_dir=sp_src_dir)
+
+        subdirs.append(mname)
+
+    # Generate the top-level .pro file.
+    inform("Generating the top-level .pro file...")
+    out_f = open_for_writing(toplevel_pro)
+
+    out_f.write('''TEMPLATE = subdirs
+CONFIG += ordered
+SUBDIRS = %s
+
+init_py.files = %s
+init_py.path = %s/PyQt5
+INSTALLS += init_py
+''' % (' '.join(subdirs), source_path('__init__.py'), target_config.pyqt_module_dir))
+
+    # Install the uic module and the pyuic5 wrapper.
+    out_f.write('''
+uic_package.files = %s
+uic_package.path = %s/PyQt5
+INSTALLS += uic_package
+''' % (source_path('pyuic', 'uic'), target_config.pyqt_module_dir))
+
+    if not target_config.no_tools:
+        out_f.write('''
+pyuic5.files = %s
+pyuic5.path = %s
+INSTALLS += pyuic5
+''' % (pyuic_wrapper, target_config.pyqt_bin_dir))
+
+    # Install the QScintilla .api file.
+    if target_config.qsci_api:
+        out_f.write('''
+qscintilla_api.files = PyQt5.api
+qscintilla_api.path = %s/api/python
+INSTALLS += qscintilla_api
+''' % target_config.qsci_api_dir)
+
+    out_f.close()
+
+    # Make the pyuic5 wrapper executable on platforms that support it.  This
+    # means that qmake will try and strip it after installing it resulting in
+    # an (ignored) error.  However if we did it after running qmake then (on
+    # Linux) the execute bits would be stripped on installation.
+    if not target_config.no_tools and target_config.py_platform != 'win32':
+        inform("Making the %s wrapper executable..." % pyuic_wrapper)
+
+        sbuf = os.stat(pyuic_wrapper)
+        mode = sbuf.st_mode
+        mode |= (stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
+        os.chmod(pyuic_wrapper, mode)
+
+    # Generate the top-level makefile.
+    inform("Generating the top-level Makefile...")
+    run_qmake(target_config, verbose, toplevel_pro)
+
+
+def generate_plugin_makefile(target_config, verbose, plugin_dir, install_dir, plugin_name):
+    """ Generate the makefile for a plugin that embeds the Python interpreter.
+    target_config is the target configuration.  verbose is set if the output is
+    to be displayed.  plugin_dir is the name of the directory containing the
+    plugin implementation.  install_dir is the name of the directory that the
+    plugin will be installed in.  plugin_name is a descriptive name of the
+    plugin to be used in user messages.  Returns True if the makefile could be
+    generated.
+    """
+
+    # Check we have a shared interpreter library.
+    if target_config.py_pyshlib == '':
+        inform("The %s plugin was disabled because a dynamic Python library couldn't be found." % plugin_name)
+        return False
+
+    # Create the qmake project file.
+    inform("Generating the %s plugin .pro file..." % plugin_name)
+
+    sp_plugin_dir = source_path(plugin_dir)
+
+    fin = open(os.path.join(sp_plugin_dir, 'python.pro-in'))
+    prj = fin.read()
+    fin.close()
+
+    prj = prj.replace('@QTCONFIG@',
+            'debug' if target_config.debug else 'release')
+    prj = prj.replace('@PYINCDIR@', qmake_quote(target_config.py_inc_dir))
+    prj = prj.replace('@SIPINCDIR@', qmake_quote(target_config.sip_inc_dir))
+    prj = prj.replace('@PYLINK@', target_config.get_pylib_link_arguments())
+    prj = prj.replace('@PYSHLIB@', target_config.py_pyshlib)
+    prj = prj.replace('@QTPLUGINDIR@', qmake_quote(install_dir))
+
+    pro_name = os.path.join(plugin_dir, 'python.pro')
+
+    mk_dir(plugin_dir)
+    fout = open_for_writing(pro_name)
+    fout.write(prj)
+
+    if sp_plugin_dir != plugin_dir:
+        fout.write('''
+INCLUDEPATH += %s
+VPATH = %s
+''' % (qmake_quote(sp_plugin_dir), qmake_quote(sp_plugin_dir)))
+
+    fout.write('\n'.join(target_config.qmake_variables) + '\n')
+
+    fout.close()
+
+    # Create the makefile.
+    inform("Generating the %s plugin Makefile..." % plugin_name)
+
+    run_qmake(target_config, verbose, pro_name)
+
+    return True
+
+
+def generate_application_makefile(target_config, verbose, src_dir):
+    """ Create the makefile for a QtXml based application.  target_config is
+    the target configuration.  verbose is set if the output is to be displayed.
+    src_dir is the name of the directory containing the source files.
+    """
+
+    mk_dir(src_dir)
+    sp_src_dir = source_path(src_dir)
+
+    # The standard naming convention.
+    app = src_dir + '5'
+
+    inform("Generating the .pro file for %s..." % app)
+
+    pro_lines = ['TEMPLATE = app', 'QT -= gui', 'QT += xml']
+    pro_lines.append(
+            'CONFIG += warn_on %s' %
+                    ('debug' if target_config.debug else 'release'))
+
+    if target_config.py_platform == 'win32':
+        pro_lines.append('CONFIG += console')
+    elif target_config.py_platform == 'darwin':
+        pro_lines.append('CONFIG -= app_bundle')
+
+    # Work around QTBUG-39300.
+    pro_lines.append('CONFIG -= android_install')
+
+    pro_lines.append('target.path = %s' % target_config.pyqt_bin_dir)
+    pro_lines.append('INSTALLS += target')
+
+    if sp_src_dir != src_dir:
+        pro_lines.append('INCLUDEPATH += %s' % qmake_quote(sp_src_dir))
+        pro_lines.append('VPATH = %s' % qmake_quote(sp_src_dir))
+
+    pro_lines.extend(pro_sources(sp_src_dir))
+    pro_lines.extend(target_config.qmake_variables)
+
+    pro_name = os.path.join(src_dir, app + '.pro')
+
+    pro = open_for_writing(pro_name)
+    pro.write('\n'.join(pro_lines))
+    pro.close()
+
+    inform("Generating the Makefile for %s..." % app)
+    run_qmake(target_config, verbose, pro_name)
+
+
+def pro_sources(src_dir, other_headers=None, other_sources=None):
+    """ Return the HEADERS and SOURCES variables for a .pro file by
+    introspecting a directory.  src_dir is the name of the directory.
+    other_headers is an optional list of other header files.  other_sources is
+    an optional list of other source files.
+    """
+
+    if other_headers is None:
+        other_headers = []
+
+    if other_sources is None:
+        other_sources = []
+
+    pro_lines = []
+
+    headers = [os.path.basename(f) for f in glob.glob('%s/*.h' % src_dir)]
+    if len(headers) != 0:
+        pro_lines.append('HEADERS = %s' % ' '.join(headers + other_headers))
+
+    c_sources = [os.path.basename(f) for f in glob.glob('%s/*.c' % src_dir)]
+    cpp_sources = [os.path.basename(f) for f in glob.glob('%s/*.cpp' % src_dir)]
+    pro_lines.append(
+            'SOURCES = %s' % ' '.join(c_sources + cpp_sources + other_sources))
+
+    return pro_lines
+
+
+def generate_pyuic5_wrapper(target_config):
+    """ Create a platform dependent executable wrapper for the pyuic.py script.
+    target_config is the target configuration.  Returns the platform specific
+    name of the wrapper.
+    """
+
+    wrapper = 'pyuic5.bat' if target_config.py_platform == 'win32' else 'pyuic5'
+
+    inform("Generating the %s wrapper..." % wrapper)
+
+    exe = quote(target_config.pyuic_interpreter)
+
+    wf = open_for_writing(wrapper)
+
+    if target_config.py_platform == 'win32':
+        wf.write('@%s -m PyQt5.uic.pyuic %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9\n' % exe)
+    else:
+        wf.write('#!/bin/sh\n')
+        wf.write('exec %s -m PyQt5.uic.pyuic ${1+"$@"}\n' % exe)
+
+    wf.close()
+
+    return wrapper
+
+
+def rewrite_qmldir(target_config, module, module_dir):
+    """ Re-write a qmldir file for a module that used the qmlscene plugin.
+    target_config is the target configuration.  module is the name of the QML
+    module.  module_dir is the name of the directory containing the QML module.
+    """
+
+    qmldir_fn = os.path.join(module_dir, module, 'qmldir')
+
+    inform("Re-writing %s..." % qmldir_fn)
+
+    qmldir = open_for_writing(qmldir_fn)
+    qmldir.write('module %s\nplugin pyqt5qmlplugin %s\n' % (module, target_config.qml_plugin_dir))
+    qmldir.close()
+
+
+def quote(path):
+    """ Return a path with quotes added if it contains spaces.  path is the
+    path.
+    """
+
+    if ' ' in path:
+        path = '"%s"' % path
+
+    return path
+
+
+def qmake_quote(path):
+    """ Return a path quoted for qmake if it contains spaces.  path is the
+    path.
+    """
+
+    if ' ' in path:
+        path = '$$quote(%s)' % path
+
+    return path
+
+
+def inform_user(target_config, sip_version):
+    """ Tell the user the values that are going to be used.  target_config is
+    the target configuration.  sip_version is the SIP version string.
+    """
+
+    if target_config.qt_licensee == '':
+        detail = ''
+    elif target_config.qt_licensee == 'Open Source':
+        detail = " (Open Source)"
+    else:
+        detail = " licensed to %s" % target_config.qt_licensee
+
+    inform("Qt v%s%s is being used." % (
+            version_to_string(target_config.qt_version), detail))
+
+    inform("The qmake executable is %s." % target_config.qmake)
+
+    inform(
+            "Qt is built as a %s library." % (
+                    "shared" if target_config.qt_shared else "static"))
+
+    if target_config.sysroot != '':
+        inform("The system root directory is %s." % target_config.sysroot)
+
+    inform("SIP %s is being used." % sip_version)
+    inform("The sip executable is %s." % target_config.sip)
+    inform("These PyQt5 modules will be built: %s." % ', '.join(target_config.pyqt_modules))
+    inform("The PyQt5 Python package will be installed in %s." % target_config.pyqt_module_dir)
+
+    if target_config.no_docstrings:
+        inform("PyQt5 is being built without generated docstrings.")
+    else:
+        inform("PyQt5 is being built with generated docstrings.")
+
+    if target_config.prot_is_public:
+        inform("PyQt5 is being built with 'protected' redefined as 'public'.")
+
+    if target_config.no_designer_plugin:
+        inform("The Designer plugin will not be built.")
+    else:
+        inform("The Designer plugin will be installed in %s." %
+                target_config.designer_plugin_dir)
+
+    if target_config.no_qml_plugin:
+        inform("The qmlscene plugin will not be built.")
+    else:
+        inform("The qmlscene plugin will be installed in %s." %
+                target_config.qml_plugin_dir)
+
+    if target_config.qsci_api:
+        inform(
+                "The QScintilla API file will be installed in %s." %
+                        os.path.join(
+                                target_config.qsci_api_dir, 'api', 'python'))
+
+    if target_config.pydbus_module_dir:
+        inform(
+                "The dbus support module will be installed in %s." %
+                        target_config.pydbus_module_dir)
+
+    if target_config.pyqt_sip_dir:
+        inform("The PyQt5 .sip files will be installed in %s." %
+                target_config.pyqt_sip_dir)
+
+    if target_config.no_tools:
+        inform("pyuic5, pyrcc5 and pylupdate5 will not be built.")
+    else:
+        inform("pyuic5, pyrcc5 and pylupdate5 will be installed in %s." %
+                target_config.pyqt_bin_dir)
+
+        inform("The interpreter used by pyuic5 is %s." %
+                target_config.pyuic_interpreter)
+
+    if target_config.vend_enabled:
+        inform("PyQt5 will only be usable with signed interpreters.")
+
+
+def run_qmake(target_config, verbose, pro_name, makefile_name='', fatal=True):
+    """ Run qmake against a .pro file.  target_config is the target
+    configuration.  verbose is set if the output is to be displayed.  pro_name
+    is the name of the .pro file.  makefile_name is the name of the makefile
+    to generate (and defaults to Makefile).  fatal is set if a qmake failure is
+    considered a fatal error, otherwise False is returned if qmake fails.
+    """
+
+    # qmake doesn't behave consistently if it is not run from the directory
+    # containing the .pro file - so make sure it is.
+    pro_dir, pro_file = os.path.split(pro_name)
+    if pro_dir != '':
+        cwd = os.getcwd()
+        os.chdir(pro_dir)
+    else:
+        cwd = None
+
+    mf = makefile_name if makefile_name != '' else 'Makefile'
+
+    remove_file(mf)
+
+    args = [quote(target_config.qmake)]
+
+    if target_config.qmake_spec != target_config.default_qmake_spec:
+        args.append('-spec')
+        args.append(target_config.qmake_spec)
+
+    if makefile_name != '':
+        args.append('-o')
+        args.append(makefile_name)
+
+    args.append(pro_file)
+
+    run_command(' '.join(args), verbose)
+
+    if not os.access(mf, os.F_OK):
+        if fatal:
+            error(
+                    "%s failed to create a makefile from %s." %
+                            (target_config.qmake, pro_name))
+
+        return False
+
+    # Restore the current directory.
+    if cwd is not None:
+        os.chdir(cwd)
+
+    return True
+
+
+def run_make(target_config, verbose, exe, makefile_name):
+    """ Run make against a makefile to create an executable.  target_config is
+    the target configuration.  verbose is set if the output is to be displayed.
+    exe is the platform independent name of the executable that will be
+    created.  makefile_name is the name of the makefile.  Returns the platform
+    specific name of the executable, or None if an executable wasn't created.
+    """
+
+    # Guess the name of make and set the default target and platform specific
+    # name of the executable.
+    if target_config.py_platform == 'win32':
+        if target_config.qmake_spec == 'win32-borland':
+            make = 'bmake'
+        elif target_config.qmake_spec == 'win32-g++':
+            make = 'mingw32-make'
+        else:
+            make = 'nmake'
+
+        if target_config.debug:
+            makefile_target = 'debug'
+            platform_exe = os.path.join('debug', exe + '.exe')
+        else:
+            makefile_target = 'release'
+            platform_exe = os.path.join('release', exe + '.exe')
+    else:
+        make = 'make'
+        makefile_target = ''
+
+        if target_config.py_platform == 'darwin':
+            platform_exe = os.path.join(exe + '.app', 'Contents', 'MacOS', exe)
+        else:
+            platform_exe = os.path.join('.', exe)
+
+    remove_file(platform_exe)
+
+    args = [make, '-f', makefile_name]
+
+    if makefile_target != '':
+        args.append(makefile_target)
+
+    run_command(' '.join(args), verbose)
+
+    return platform_exe if os.access(platform_exe, os.X_OK) else None
+
+
+def run_command(cmd, verbose):
+    """ Run a command and display the output if requested.  cmd is the command
+    to run.  verbose is set if the output is to be displayed.
+    """
+
+    if verbose:
+        sys.stdout.write(cmd + "\n")
+
+    fout = get_command_output(cmd, and_stderr=True)
+
+    # Read stdout and stderr until there is no more output.
+    lout = fout.readline()
+    while lout:
+        if verbose:
+            if sys.hexversion >= 0x03000000:
+                sys.stdout.write(str(lout, encoding=sys.stdout.encoding))
+            else:
+                sys.stdout.write(lout)
+
+        lout = fout.readline()
+
+    fout.close()
+
+    try:
+        os.wait()
+    except:
+        pass
+
+
+def remove_file(fname):
+    """ Remove a file which may or may not exist.  fname is the name of the
+    file.
+    """
+
+    try:
+        os.remove(fname)
+    except OSError:
+        pass
+
+
+def check_vendorid(target_config):
+    """ See if the VendorID library and include file can be found.
+    target_config is the target configuration.
+    """
+
+    if target_config.py_version >= 0x030000:
+        # VendorID doesn't support Python v3.
+        target_config.vend_enabled = False
+    elif target_config.vend_enabled:
+        if os.access(os.path.join(target_config.vend_inc_dir, 'vendorid.h'), os.F_OK):
+            if glob.glob(os.path.join(target_config.vend_lib_dir, '*vendorid*')):
+                inform("The VendorID package was found.")
+            else:
+                target_config.vend_enabled = False
+                inform(
+                        "The VendorID library could not be found in %s and so "
+                        "signed interpreter checking will be disabled. If the "
+                        "VendorID package is installed then use the "
+                        "--vendorid-libdir argument to explicitly specify the "
+                        "correct directory." % target_config.vend_lib_dir)
+        else:
+            target_config.vend_enabled = False
+            inform(
+                    "vendorid.h could not be found in %s and so signed "
+                    "interpreter checking will be disabled. If the VendorID "
+                    "package is installed then use the --vendorid-incdir "
+                    "argument to explicitly specify the correct directory." %
+                            target_config.vend_inc_dir)
+
+
+def get_command_output(cmd, and_stderr=False):
+    """ Return a pipe from which a command's output can be read.  cmd is the
+    command.  and_stderr is set if the output should include stderr as well as
+    stdout.
+    """
+
+    try:
+        import subprocess
+    except ImportError:
+        if and_stderr:
+            _, sout = os.popen4(cmd)
+        else:
+            _, sout, _ = os.popen3(cmd)
+
+        return sout
+
+    if and_stderr:
+        stderr = subprocess.STDOUT
+    else:
+        stderr = subprocess.PIPE
+
+    p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE,
+            stdout=subprocess.PIPE, stderr=stderr)
+
+    return p.stdout
+
+
+def source_path(*names):
+    """ Return the native path for a list of components rooted at the directory
+    containing this script.  names is the sequence of component names.
+    """
+
+    path = [os.path.dirname(os.path.abspath(__file__))] + list(names)
+
+    return os.path.join(*path)
+
+
+def check_dbus(target_config, verbose):
+    """ See if the DBus support module should be built and update the target
+    configuration accordingly.  target_config is the target configuration.
+    verbose is set if the output is to be displayed.
+    """
+
+    if not os.path.isdir(source_path('dbus')):
+        return
+
+    inform("Checking to see if the dbus support module should be built...")
+
+    cmd = 'pkg-config --cflags-only-I --libs dbus-1'
+
+    if verbose:
+        sys.stdout.write(cmd + "\n")
+
+    sout = get_command_output(cmd)
+    iflags = sout.read().strip()
+
+    if not iflags:
+        inform("DBus v1 does not seem to be installed.")
+        return
+
+    if sys.hexversion >= 0x03000000:
+        iflags = iflags.decode()
+
+    for f in iflags.split():
+        if f.startswith('-I'):
+            target_config.dbus_inc_dirs.append(f[2:])
+        elif f.startswith('-L'):
+            target_config.dbus_lib_dirs.append(f[2:])
+        elif f.startswith('-l'):
+            target_config.dbus_libs.append(f[2:])
+
+    try:
+        import dbus.mainloop
+    except:
+        inform("The Python dbus module doesn't seem to be installed.")
+        return
+
+    target_config.pydbus_module_dir = dbus.mainloop.__path__[0]
+
+    # Try and find dbus-python.h.  We don't use pkg-config because it is broken
+    # for dbus-python (at least for versions up to and including v0.81.0).
+    # Instead we look where DBus itself is installed - which in most cases will
+    # be where dbus-python is also installed.
+    if target_config.pydbus_inc_dir != '':
+        dlist = [target_config.pydbus_inc_dir]
+    else:
+        dlist = target_config.dbus_inc_dirs
+
+    for d in dlist:
+        if os.access(os.path.join(d, 'dbus', 'dbus-python.h'), os.F_OK):
+            if d not in target_config.dbus_inc_dirs:
+                target_config.dbus_inc_dirs.append(d)
+
+            break
+    else:
+        inform(
+                "dbus/dbus-python.h could not be found and so the DBus "
+                "support module will be disabled. If dbus-python v0.80 or "
+                "later is installed then use the --dbus argument to "
+                "explicitly specify the directory containing "
+                "dbus/dbus-python.h.")
+        target_config.pydbus_module_dir = ''
+
+
+def check_module(target_config, verbose, mname, incfile, test):
+    """ See if a module can be built and, if so, add it to the target
+    configurations list of modules.  target_config is the target configuration.
+    verbose is set if the output is to be displayed.  mname is the name of the
+    module.  incfile is the name of the include file needed for the test.  test
+    is a C++ statement being used for the test.
+    """
+
+    # Check the module's main .sip file exists.
+    if not os.access(source_path('sip', mname, mname + 'mod.sip'), os.F_OK):
+        return
+
+    inform("Checking to see if the %s module should be built..." % mname)
+
+    source = '''#include <%s>
+
+int main(int, char **)
+{
+    %s;
+}
+''' % (incfile, test)
+
+    if compile_qt_program(target_config, verbose, 'cfgtest_' + mname, source, mname) is not None:
+        target_config.pyqt_modules.append(mname)
+
+
+def compile_qt_program(target_config, verbose, name, source, mname, debug=None):
+    """ Compile the source of a Qt program and return the name of the
+    executable or None if it couldn't be created.  target_config is the target
+    configuration.  verbose is set if the output is to be displayed.  name is
+    the root name of the program from which all program-specific file names
+    will be derived.  source is the C++ source of the program.  mname is the
+    name of the Qt module that the program uses.  debug is set if debug, rather
+    than release, mode is to be used.  If it is None then the mode is taken
+    from the target configuration.
+    """
+
+    metadata = MODULE_METADATA[mname]
+
+    # The derived file names.
+    name_pro = name + '.pro'
+    name_makefile = name + '.mk'
+    name_source = name + '.cpp'
+
+    # Create the .pro file.
+    pro_lines = []
+    pro_add_qt_dependencies(target_config, metadata, pro_lines, debug)
+    pro_lines.append('TARGET = %s' % name)
+    pro_lines.append('SOURCES = %s' % name_source)
+
+    f = open_for_writing(name_pro)
+    f.write('\n'.join(pro_lines))
+    f.close()
+
+    # Create the source file.
+    f = open_for_writing(name_source)
+    f.write(source)
+    f.close()
+
+    if not run_qmake(target_config, verbose, name_pro, name_makefile, fatal=False):
+        return None
+
+    return run_make(target_config, verbose, name, name_makefile)
+
+
+def pro_add_qt_dependencies(target_config, metadata, pro_lines, debug=None):
+    """ Add the Qt dependencies of a module to a .pro file.  target_config is
+    the target configuration.  metadata is the module's meta-data.  pro_lines
+    is the list of lines making up the .pro file that is updated.  debug is set
+    if debug, rather than release, mode is to be used.  If it is None then the
+    mode is taken from the target configuration.
+    """
+
+    if debug is None:
+        debug = target_config.debug
+
+    add = []
+    remove = []
+    for qt in metadata.qmake_QT:
+        if qt.startswith('-'):
+            remove.append(qt[1:])
+        else:
+            add.append(qt)
+
+    if len(remove) != 0:
+        pro_lines.append('QT -= %s' % ' '.join(remove))
+
+    if len(add) != 0:
+        pro_lines.append('QT += %s' % ' '.join(add))
+
+    pro_lines.append(
+            'CONFIG += %s' % ('debug qml_debug' if debug else 'release'))
+
+    pro_lines.extend(target_config.qmake_variables)
+
+
+def get_sip_flags(target_config):
+    """ Return the SIP platform, version and feature flags.  target_config is
+    the target configuration.
+    """
+
+    sip_flags = []
+
+    # If we don't check for signed interpreters, we exclude the 'VendorID'
+    # feature
+    if target_config.py_version < 0x030000 and not target_config.vend_enabled:
+        sip_flags.append('-x')
+        sip_flags.append('VendorID')
+
+    # Handle the platform tag.
+    if target_config.py_platform == 'win32':
+        plattag = 'WS_WIN'
+    elif target_config.py_platform == 'darwin':
+        plattag = 'WS_MACX'
+    else:
+        plattag = 'WS_X11'
+
+    sip_flags.append('-t')
+    sip_flags.append(plattag)
+
+    # Handle the Qt version tag.
+    sip_flags.append('-t')
+    sip_flags.append(version_to_sip_tag(target_config.qt_version))
+
+    # Handle any feature flags.
+    for xf in target_config.pyqt_disabled_features:
+        sip_flags.append('-x')
+        sip_flags.append(xf)
+
+    # Handle the version specific Python features.
+    if target_config.py_version < 0x030000:
+        sip_flags.append('-x')
+        sip_flags.append('Py_v3')
+
+    return ' '.join(sip_flags)
+
+
+def mk_clean_dir(name):
+    """ Create a clean (ie. empty) directory.  name is the name of the
+    directory.
+    """
+
+    try:
+        shutil.rmtree(name)
+    except:
+        pass
+
+    try:
+        os.makedirs(name)
+    except:
+        error("Unable to create the %s directory." % name)
+
+
+def mk_dir(name):
+    """ Ensure a directory exists, creating it if necessary.  name is the name
+    of the directory.
+    """
+
+    try:
+        os.makedirs(name)
+    except:
+        pass
+
+
+def generate_sip_module_code(target_config, verbose, no_timestamp, parts, tracing, mname, sip_flags, qpy_sources=None, qpy_headers=None):
+    """ Generate the code for a module.  target_config is the target
+    configuration.  verbose is set if the output is to be displayed.
+    no_timestamp is set if the .sip files should exclude the timestamp.  parts
+    is the number of parts the generated code should be split into.  tracing is
+    set if the generated code should include tracing calls.  mname is the name
+    of the module to generate the code for.  sip_flags is the string of flags
+    to pass to sip.  qpy_sources is the optional list of QPy support code
+    source files.  qpy_headers is the optional list of QPy support code header
+    files.
+    """
+
+    inform("Generating the C++ source for the %s module..." % mname)
+
+    mk_clean_dir(mname)
+
+    # Build the SIP command line.
+    argv = [quote(target_config.sip), '-w', sip_flags]
+
+    # Make sure any unknown Qt version gets treated as the latest Qt v5.
+    argv.append('-B')
+    argv.append('Qt_6_0_0')
+
+    if no_timestamp:
+        argv.append('-T')
+
+    if not target_config.no_docstrings:
+        argv.append('-o');
+
+    if target_config.prot_is_public:
+        argv.append('-P');
+
+    if parts != 0:
+        argv.append('-j')
+        argv.append(str(parts))
+
+    if tracing:
+        argv.append('-r')
+
+    if target_config.qsci_api and mname != 'Qt':
+        argv.append('-a')
+        argv.append(mname + '.api')
+
+    # Pass the absolute pathname so that #line files are absolute.
+    argv.append('-c')
+    argv.append(os.path.abspath(mname))
+
+    argv.append('-I')
+    argv.append('sip')
+
+    sp_sip_dir = source_path('sip')
+    if sp_sip_dir != 'sip':
+        # SIP assumes POSIX style separators.
+        sp_sip_dir = sp_sip_dir.replace(os.pathsep, '/')
+        argv.append('-I')
+        argv.append(sp_sip_dir)
+
+    # The .sip files for the Qt modules will be in the out-of-tree directory.
+    if mname == 'Qt':
+        sip_dir = 'sip'
+    else:
+        sip_dir = sp_sip_dir
+
+    # Add the name of the .sip file.
+    argv.append('%s/%s/%smod.sip' % (sip_dir, mname, mname))
+
+    run_command(' '.join(argv), verbose)
+
+    # Check the result.
+    if mname == 'Qt':
+        file_check = 'sip%scmodule.c' % mname
+    else:
+        file_check = 'sipAPI%s.h' % mname
+
+    if not os.access(os.path.join(mname, file_check), os.F_OK):
+        error("Unable to create the C++ code.")
+
+    # Embed the sip flags.
+    if mname == 'QtCore':
+        inform("Embedding sip flags...")
+
+        in_f = open(source_path('qpy', 'QtCore', 'qpycore_post_init.cpp.in'))
+        out_f = open_for_writing(
+                os.path.join('QtCore', 'qpycore_post_init.cpp'))
+
+        for line in in_f:
+            line = line.replace('@@PYQT_SIP_FLAGS@@', sip_flags)
+            out_f.write(line)
+
+        in_f.close()
+        out_f.close()
+
+    # Generate the makefile.
+    includepath = libs = ''
+    if target_config.vend_enabled:
+        if mname == 'QtCore':
+            includepath = target_config.vend_inc_dir
+            libs = '-L%s -lvendorid' % target_config.vend_lib_dir
+
+    generate_module_makefile(target_config, verbose, mname,
+            includepath=includepath, libs=libs, qpy_sources=qpy_sources,
+            qpy_headers=qpy_headers)
+
+
+def generate_module_makefile(target_config, verbose, mname, includepath='', libs='', install_path='', src_dir='', qpy_sources=None, qpy_headers=None):
+    """ Generate the makefile for a module.  target_config is the target
+    configuration.  verbose is set if the output is to be displayed.  mname is
+    the name of the module.  includepath is an optional additional value of
+    INCLUDEPATH.  libs is an optional additional value of LIBS.  install_path
+    is the optional name of the directory that the module will be installed in.
+    src_dir is the optional source directory (by default the sources are
+    assumed to be in the module directory).  qpy_sources is the optional list
+    of QPy support code source files.  qpy_headers is the optional list of QPy
+    support code header files.
+    """
+
+    inform("Generating the .pro file for the %s module..." % mname)
+
+    if src_dir == '':
+        src_dir = mname
+
+    target_name = mname
+
+    metadata = MODULE_METADATA[mname]
+
+    if metadata.qmake_TARGET != '':
+        target_name = metadata.qmake_TARGET
+
+    pro_lines = ['TEMPLATE = lib']
+
+    pro_lines.append('CONFIG += warn_on %s' % ('staticlib' if target_config.static else 'plugin'))
+
+    pro_add_qt_dependencies(target_config, metadata, pro_lines)
+
+    # Work around QTBUG-39300.
+    pro_lines.append('CONFIG -= android_install')
+
+    if not target_config.static:
+        debug_suffix = get_win32_debug_suffix(target_config.debug)
+        link = target_config.get_pylib_link_arguments()
+
+        shared = '''
+win32 {
+    PY_MODULE = %s%s.pyd
+    target.files = %s%s.pyd
+    LIBS += %s
+} else {
+    PY_MODULE = %s.so
+    target.files = %s.so
+}
+''' % (target_name, debug_suffix, target_name, debug_suffix, link, target_name, target_name)
+
+        pro_lines.extend(shared.split('\n'))
+
+        # Without the 'no_check_exist' magic the target.files must exist when
+        # qmake is run otherwise the install and uninstall targets are not
+        # generated.
+        pro_lines.append('target.CONFIG = no_check_exist')
+
+    if install_path == '':
+        install_path = target_config.pyqt_module_dir + '/PyQt5'
+
+    pro_lines.append('target.path = %s' % install_path)
+    pro_lines.append('INSTALLS += target')
+
+    if target_config.pyqt_sip_dir:
+        sip_files = [os.path.relpath(f, mname)
+                for f in glob.glob(source_path('sip', mname, '*.sip'))]
+        if len(sip_files) != 0:
+            pro_lines.append('sip.path = %s/%s' % (target_config.pyqt_sip_dir, mname))
+            pro_lines.append('sip.files = %s' % ' '.join(sip_files))
+            pro_lines.append('INSTALLS += sip')
+
+    if 'g++' in target_config.qmake_spec or 'clang' in target_config.qmake_spec:
+        pro_lines.append('QMAKE_CXXFLAGS += -fno-exceptions')
+
+    # This optimisation could apply to other platforms.
+    if 'linux' in target_config.qmake_spec and not target_config.static:
+        if target_config.py_version >= 0x030000:
+            entry_point = 'PyInit_%s' % target_name
+        else:
+            entry_point = 'init%s' % target_name
+
+        exp = open_for_writing(os.path.join(mname, target_name + '.exp'))
+        exp.write('{ global: %s; local: *; };' % entry_point)
+        exp.close()
+
+        pro_lines.append('QMAKE_LFLAGS += -Wl,--version-script=%s.exp' % target_name)
+
+    if target_config.prot_is_public:
+        pro_lines.append('DEFINES += SIP_PROTECTED_IS_PUBLIC protected=public')
+
+    # This is needed for Windows.
+    pro_lines.append('INCLUDEPATH += .')
+
+    # Make sure the SIP include directory is searched before the Python include
+    # directory if they are different.
+    pro_lines.append('INCLUDEPATH += %s' % target_config.sip_inc_dir)
+    if target_config.py_inc_dir != target_config.sip_inc_dir:
+        pro_lines.append('INCLUDEPATH += %s' % target_config.py_inc_dir)
+
+    pro_add_qpy(mname, metadata, pro_lines)
+
+    if includepath != '':
+        pro_lines.append('INCLUDEPATH += %s' % includepath)
+
+    if libs != '':
+        pro_lines.append('LIBS += %s' % libs)
+
+    if not target_config.static:
+        shared = '''
+win32 {
+    QMAKE_POST_LINK = $(COPY_FILE) $(DESTDIR_TARGET) $$PY_MODULE
+} else {
+    QMAKE_POST_LINK = $(COPY_FILE) $(TARGET) $$PY_MODULE
+}
+macx {
+    QMAKE_LFLAGS += "-undefined dynamic_lookup"
+    QMAKE_LFLAGS += "-install_name $$absolute_path($$PY_MODULE, $$target.path)"
+}
+'''
+
+        pro_lines.extend(shared.split('\n'))
+
+    pro_lines.append('TARGET = %s' % target_name)
+
+    if src_dir != mname:
+        pro_lines.append('INCLUDEPATH += %s' % qmake_quote(src_dir))
+        pro_lines.append('VPATH = %s' % qmake_quote(src_dir))
+
+    pro_lines.extend(pro_sources(src_dir, qpy_headers, qpy_sources))
+
+    pro_name = os.path.join(mname, mname + '.pro')
+
+    pro = open_for_writing(pro_name)
+    pro.write('\n'.join(pro_lines))
+    pro.write('\n')
+    pro.close()
+
+    inform("Generating the Makefile for the %s module..." % target_name)
+    run_qmake(target_config, verbose, pro_name)
+
+
+def pro_add_qpy(mname, metadata, pro_lines):
+    """ Add the qpy dependencies of a module to a .pro file.  mname is the
+    module's name.  metadata is the module's meta-data.  pro_lines is the list
+    of lines making up the .pro file that is updated.
+    """ 
+
+    if metadata.qpy_lib:
+        pro_lines.append('INCLUDEPATH += %s' %
+                qmake_quote(os.path.relpath(source_path('qpy', mname), mname)))
+
+
+def fix_license(src_lfile, dst_lfile):
+    """ Fix the license file, if there is one, so that it conforms to the SIP
+    v5 syntax.  src_lfile is the name of the license file.  dst_lfile is the
+    name of the fixed license file.
+    """
+
+    f = open(src_lfile)
+    f5 = open_for_writing(dst_lfile)
+
+    for line in f:
+        if line.startswith('%License'):
+            anno_start = line.find('/')
+            anno_end = line.rfind('/')
+
+            if anno_start < 0 or anno_end < 0 or anno_start == anno_end:
+                error("%s has missing annotations." % name)
+
+            annos = line[anno_start + 1:anno_end].split(', ')
+            annos5 = [anno[0].lower() + anno[1:] for anno in annos]
+
+            f5.write('%License(')
+            f5.write(', '.join(annos5))
+            f5.write(')\n')
+        else:
+            f5.write(line)
+
+    f5.close()
+    f.close()
+
+
+def check_license(target_config, license_confirmed, introspecting):
+    """ Handle the validation of the PyQt5 license.  target_config is the
+    target configuration.  license_confirmed is set if the user has already
+    accepted the license.  introspecting is set if the configuration is being
+    determined by introspection.
+    """
+
+    try:
+        import license
+        ltype = license.LicenseType
+        lname = license.LicenseName
+
+        try:
+            lfile = license.LicenseFile
+        except AttributeError:
+            lfile = None
+    except ImportError:
+        ltype = None
+
+    if ltype is None:
+        ltype = 'GPL'
+        lname = "GNU General Public License"
+        lfile = 'pyqt-gpl.sip'
+
+    inform(
+            "This is the %s version of PyQt %s (licensed under the %s) for "
+            "Python %s on %s." %
+                    (ltype, PYQT_VERSION_STR, lname, sys.version.split()[0],
+                            sys.platform))
+
+    # Common checks.
+    if introspecting and target_config.qt_licensee != 'Open Source' and ltype == 'GPL':
+        error(
+                "This version of PyQt5 and the commercial version of Qt have "
+                "incompatible licenses.")
+
+    # Confirm the license if not already done.
+    if not license_confirmed:
+        loptions = """
+Type 'L' to view the license.
+"""
+
+        sys.stdout.write(loptions)
+        sys.stdout.write("""Type 'yes' to accept the terms of the license.
+Type 'no' to decline the terms of the license.
+
+""")
+
+        while 1:
+            sys.stdout.write("Do you accept the terms of the license? ")
+            sys.stdout.flush()
+
+            try:
+                resp = sys.stdin.readline()
+            except KeyboardInterrupt:
+                raise SystemExit
+            except:
+                resp = ""
+
+            resp = resp.strip().lower()
+
+            if resp == "yes":
+                break
+
+            if resp == "no":
+                sys.exit(0)
+
+            if resp == 'l':
+                os.system('more LICENSE')
+
+    # Check that the license file exists and fix its syntax.
+    sip_dir = 'sip'
+    mk_dir(sip_dir)
+
+    sp_sip_dir = source_path(sip_dir)
+    src_lfile = os.path.join(sp_sip_dir, lfile)
+
+    if os.access(src_lfile, os.F_OK):
+        inform("Found the license file %s." % lfile)
+        fix_license(src_lfile, os.path.join(sip_dir, lfile + '5'))
+    else:
+        error("Please copy the license file %s to %s." % (lfile, sp_sip_dir))
+
+
+def check_qt(target_config):
+    """ Check the Qt installation.  target_config is the target configuration.
+    """
+
+    # Starting with v4.7, Qt (when built with MinGW) assumes that stack frames
+    # are 16 byte aligned because it uses SSE.  However the Python Windows
+    # installers are built with 4 byte aligned stack frames.  We therefore need
+    # to tweak the g++ flags to deal with it.
+    if target_config.qmake_spec == 'win32-g++':
+        target_config.qmake_variables.append('QMAKE_CFLAGS += -mstackrealign')
+        target_config.qmake_variables.append('QMAKE_CXXFLAGS += -mstackrealign')
+
+
+def check_python(target_config):
+    """ Check the Python installation.  target_config is the target
+    configuration.
+    """
+
+    # Check the Python version number.  This allows us to assume relative
+    # imports and ElemenTree are available.
+    if target_config.py_version < 0x020600:
+        error("PyQt5 requires Python v2.6 or later.")
+
+
+def check_sip(target_config):
+    """ Check that the version of sip is good enough and return its version.
+    target_config is the target configuration.
+    """
+
+    if target_config.sip is None:
+        error(
+                "Make sure you have a working sip on your PATH or use the "
+                "--sip argument to explicitly specify a working sip.")
+
+    pipe = os.popen(' '.join([target_config.sip, '-V']))
+
+    for l in pipe:
+        version_str = l.strip()
+        break
+    else:
+        error("'%s -V' did not generate any output." % target_config.sip)
+
+    pipe.close()
+
+    if 'snapshot' not in version_str:
+        version = version_from_string(version_str)
+        if version is None:
+            error(
+                    "'%s -V' generated unexpected output: '%s'." % (
+                            target_config.sip, version_str))
+
+        min_version = version_from_string(SIP_MIN_VERSION)
+        if version < min_version:
+            error(
+                    "This version of PyQt5 requires sip %s or later." %
+                            SIP_MIN_VERSION)
+
+    return version_str
+
+
+def version_from_string(version_str):
+    """ Convert a version string of the form m.n or m.n.o to an encoded version
+    number (or None if it was an invalid format).  version_str is the version
+    string.
+    """
+
+    parts = version_str.split('.')
+    if not isinstance(parts, list):
+        return None
+
+    if len(parts) == 2:
+        parts.append('0')
+
+    if len(parts) != 3:
+        return None
+
+    version = 0
+
+    for part in parts:
+        try:
+            v = int(part)
+        except ValueError:
+            return None
+
+        version = (version << 8) + v
+
+    return version
+
+
+def open_for_writing(fname):
+    """ Return a file opened for writing while handling the most common problem
+    of not having write permission on the directory.  fname is the name of the
+    file to open.
+    """
+    try:
+        return open(fname, 'w')
+    except IOError:
+        error(
+                "There was an error creating %s.  Make sure you have write "
+                "permission on the parent directory." % fname)
+
+
+def get_win32_debug_suffix(debug):
+    """ Return the debug-dependent suffix appended to the name of Windows
+    libraries.  debug is set if the debug version is to be used.
+    """
+
+    return '_d' if debug else ''
+
+
+def main(argv):
+    """ Create the configuration module module.  argv is the list of command
+    line arguments.
+    """
+
+    # Create the default target configuration.
+    target_config = TargetConfiguration()
+
+    # Parse the command line.
+    parser = create_optparser(target_config)
+    opts, target_config.qmake_variables = parser.parse_args()
+
+    target_config.apply_pre_options(opts)
+
+    # Query qmake for the basic configuration information.
+    target_config.get_qt_configuration()
+
+    # Update the target configuration.
+    if opts.config_file is not None:
+        target_config.from_configuration_file(opts.config_file)
+    else:
+        target_config.from_introspection(opts.verbose, opts.debug)
+
+    target_config.post_configuration()
+
+    target_config.apply_post_options(opts)
+
+    # Check the licenses are compatible.
+    check_license(target_config, opts.license_confirmed,
+            (opts.config_file is None))
+
+    # Check Python is what we need.
+    check_python(target_config)
+
+    # Check SIP is what we need.
+    sip_version = check_sip(target_config)
+
+    # Check Qt is what we need.
+    check_qt(target_config)
+
+    # Check for the VendorID package.
+    check_vendorid(target_config)
+
+    # Check which modules to build if we haven't been told.
+    if len(target_config.pyqt_modules) == 0:
+        check_modules(target_config, opts.verbose)
+
+    # Tell the user what's been found.
+    inform_user(target_config, sip_version)
+
+    # Generate the makefiles.
+    generate_makefiles(target_config, opts.verbose, opts.notimestamp,
+            opts.split if opts.concat else 0, opts.tracing)
+
+
+###############################################################################
+# The script starts here.
+###############################################################################
+
+if __name__ == '__main__':
+    try:
+        main(sys.argv)
+    except SystemExit:
+        raise
+    except:
+        sys.stderr.write(
+"""An internal error occured.  Please report all the output from the program,
+including the following traceback, to support at riverbankcomputing.com.
+""")
+        raise
diff --git a/dbus/dbus.cpp b/dbus/dbus.cpp
new file mode 100644
index 0000000..7183d92
--- /dev/null
+++ b/dbus/dbus.cpp
@@ -0,0 +1,433 @@
+// This is the SIP interface definition for the Qt support for the standard
+// Python DBus bindings.
+//
+// Copyright (c) 2014 Riverbank Computing Limited
+//
+// 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 <dbus/dbus-python.h>
+
+#include <QCoreApplication>
+#include <QSocketNotifier>
+#include <QTimer>
+#include <QTimerEvent>
+
+#include "helper.h"
+
+
+// The callback to add a watch.
+extern "C" {static dbus_bool_t add_watch(DBusWatch *watch, void *data);}
+static dbus_bool_t add_watch(DBusWatch *watch, void *data)
+{
+    pyqt5DBusHelper *hlp = reinterpret_cast<pyqt5DBusHelper *>(data);
+
+    int fd = dbus_watch_get_fd(watch);
+    unsigned int flags = dbus_watch_get_flags(watch);
+    dbus_bool_t enabled = dbus_watch_get_enabled(watch);
+
+    pyqt5DBusHelper::Watcher watcher;
+    watcher.watch = watch;
+
+    if (flags & DBUS_WATCH_READABLE)
+    {
+        watcher.read = new QSocketNotifier(fd, QSocketNotifier::Read, hlp);
+        watcher.read->setEnabled(enabled);
+        hlp->connect(watcher.read, SIGNAL(activated(int)), SLOT(readSocket(int)));
+    }
+
+    if (flags & DBUS_WATCH_WRITABLE)
+    {
+        watcher.write = new QSocketNotifier(fd, QSocketNotifier::Write, hlp);
+        watcher.write->setEnabled(enabled);
+        hlp->connect(watcher.write, SIGNAL(activated(int)), SLOT(writeSocket(int)));
+    }
+
+    hlp->watchers.insertMulti(fd, watcher);
+
+    return true;
+}
+
+
+// The callback to remove a watch.
+extern "C" {static void remove_watch(DBusWatch *watch, void *data);}
+static void remove_watch(DBusWatch *watch, void *data)
+{
+    pyqt5DBusHelper *hlp = reinterpret_cast<pyqt5DBusHelper *>(data);
+
+    int fd = dbus_watch_get_fd(watch);
+
+    pyqt5DBusHelper::Watchers::iterator it = hlp->watchers.find(fd);
+
+    while (it != hlp->watchers.end() && it.key() == fd)
+    {
+        pyqt5DBusHelper::Watcher &watcher = it.value();
+
+        if (watcher.watch == watch)
+        {
+            if (watcher.read)
+                delete watcher.read;
+
+            if (watcher.write)
+                delete watcher.write;
+
+            hlp->watchers.erase(it);
+
+            return;
+        }
+
+        ++it;
+    }
+}
+
+
+// The callback to toggle a watch.
+extern "C" {static void toggle_watch(DBusWatch *watch, void *data);}
+static void toggle_watch(DBusWatch *watch, void *data)
+{
+    pyqt5DBusHelper *hlp = reinterpret_cast<pyqt5DBusHelper *>(data);
+
+    int fd = dbus_watch_get_fd(watch);
+    unsigned int flags = dbus_watch_get_flags(watch);
+    dbus_bool_t enabled = dbus_watch_get_enabled(watch);
+
+    pyqt5DBusHelper::Watchers::const_iterator it = hlp->watchers.find(fd);
+
+    while (it != hlp->watchers.end() && it.key() == fd)
+    {
+        const pyqt5DBusHelper::Watcher &watcher = it.value();
+
+        if (watcher.watch == watch)
+        {
+            if (flags & DBUS_WATCH_READABLE && watcher.read)
+                watcher.read->setEnabled(enabled);
+
+            if (flags & DBUS_WATCH_WRITABLE && watcher.write)
+                watcher.write->setEnabled(enabled);
+
+            return;
+        }
+
+        ++it;
+    }
+}
+
+
+// The callback to add a timeout.
+extern "C" {static dbus_bool_t add_timeout(DBusTimeout *timeout, void *data);}
+static dbus_bool_t add_timeout(DBusTimeout *timeout, void *data)
+{
+    // Nothing to do if the timeout is disabled.
+    if (!dbus_timeout_get_enabled(timeout))
+        return true;
+
+    // Pretend it is successful if there is no application instance.  This can
+    // happen if the global application gets garbage collected before the
+    // dbus-python main loop does.
+    if (!QCoreApplication::instance())
+        return true;
+
+    pyqt5DBusHelper *hlp = reinterpret_cast<pyqt5DBusHelper *>(data);
+
+    int id = hlp->startTimer(dbus_timeout_get_interval(timeout));
+
+    if (!id)
+        return false;
+
+    hlp->timeouts[id] = timeout;
+
+    return true;
+}
+
+
+// The callback to remove a timeout.
+extern "C" {static void remove_timeout(DBusTimeout *timeout, void *data);}
+static void remove_timeout(DBusTimeout *timeout, void *data)
+{
+    pyqt5DBusHelper *hlp = reinterpret_cast<pyqt5DBusHelper *>(data);
+
+    pyqt5DBusHelper::Timeouts::iterator it = hlp->timeouts.begin();
+
+    while (it != hlp->timeouts.end())
+        if (it.value() == timeout)
+        {
+            hlp->killTimer(it.key());
+            it = hlp->timeouts.erase(it);
+        }
+        else
+            ++it;
+}
+
+
+// The callback to toggle a timeout.
+extern "C" {static void toggle_timeout(DBusTimeout *timeout, void *data);}
+static void toggle_timeout(DBusTimeout *timeout, void *data)
+{
+    remove_timeout(timeout, data);
+    add_timeout(timeout, data);
+}
+
+
+// The callback to delete a helper instance.
+extern "C" {static void dbus_qt_delete_helper(void *data);}
+static void dbus_qt_delete_helper(void *data)
+{
+    delete reinterpret_cast<pyqt5DBusHelper *>(data);
+}
+
+
+// The callback to wakeup the event loop.
+extern "C" {static void wakeup_main(void *data);}
+static void wakeup_main(void *data)
+{
+    pyqt5DBusHelper *hlp = reinterpret_cast<pyqt5DBusHelper *>(data);
+
+    QTimer::singleShot(0, hlp, SLOT(dispatch()));
+}
+
+
+// The callback to set up a DBus connection.
+extern "C" {static dbus_bool_t dbus_qt_conn(DBusConnection *conn, void *data);}
+static dbus_bool_t dbus_qt_conn(DBusConnection *conn, void *data)
+{
+    bool rc;
+
+    Py_BEGIN_ALLOW_THREADS
+
+    pyqt5DBusHelper *hlp = reinterpret_cast<pyqt5DBusHelper *>(data);
+
+    hlp->connections.append(conn);
+
+    if (!dbus_connection_set_watch_functions(conn, add_watch, remove_watch,
+            toggle_watch, data, 0))
+        rc = false;
+    else if (!dbus_connection_set_timeout_functions(conn, add_timeout,
+            remove_timeout, toggle_timeout, data, 0))
+        rc = false;
+    else
+        rc = true;
+
+    dbus_connection_set_wakeup_main_function(conn, wakeup_main, hlp, 0);
+
+    Py_END_ALLOW_THREADS
+
+    return rc;
+}
+
+
+// The callback to set up a DBus server.
+extern "C" {static dbus_bool_t dbus_qt_srv(DBusServer *srv, void *data);}
+static dbus_bool_t dbus_qt_srv(DBusServer *srv, void *data)
+{
+    bool rc;
+
+    Py_BEGIN_ALLOW_THREADS
+
+    if (!dbus_server_set_watch_functions(srv, add_watch, remove_watch,
+            toggle_watch, data, 0))
+        rc = false;
+    else if (!dbus_server_set_timeout_functions(srv, add_timeout,
+            remove_timeout, toggle_timeout, data, 0))
+        rc = false;
+    else
+        rc = true;
+
+    Py_END_ALLOW_THREADS
+
+    return rc;
+}
+
+
+// Create a new helper instance.
+pyqt5DBusHelper::pyqt5DBusHelper() : QObject()
+{
+}
+
+
+// Handle a socket being ready to read.
+void pyqt5DBusHelper::readSocket(int fd)
+{
+    Watchers::const_iterator it = watchers.find(fd);
+
+    while (it != watchers.end() && it.key() == fd)
+    {
+        const Watcher &watcher = it.value();
+
+        if (watcher.read && watcher.read->isEnabled())
+        {
+            watcher.read->setEnabled(false);
+            dbus_watch_handle(watcher.watch, DBUS_WATCH_READABLE);
+
+            // The notifier could have just been destroyed.
+            if (watcher.read)
+                watcher.read->setEnabled(true);
+
+            break;
+        }
+
+        ++it;
+    }
+
+    dispatch();
+}
+
+
+// Handle a socket being ready to write.
+void pyqt5DBusHelper::writeSocket(int fd)
+{
+    Watchers::const_iterator it = watchers.find(fd);
+
+    while (it != watchers.end() && it.key() == fd)
+    {
+        const Watcher &watcher = it.value();
+
+        if (watcher.write && watcher.write->isEnabled())
+        {
+            watcher.write->setEnabled(false);
+            dbus_watch_handle(watcher.watch, DBUS_WATCH_WRITABLE);
+
+            // The notifier could have just been destroyed.
+            if (watcher.write)
+                watcher.write->setEnabled(true);
+
+            break;
+        }
+
+        ++it;
+    }
+}
+
+
+// Handoff to the connection dispatcher while there is data.
+void pyqt5DBusHelper::dispatch()
+{
+    for (Connections::const_iterator it = connections.constBegin(); it != connections.constEnd(); ++it)
+        while (dbus_connection_dispatch(*it) == DBUS_DISPATCH_DATA_REMAINS)
+            ;
+}
+
+
+// Reimplemented to handle timer events.
+void pyqt5DBusHelper::timerEvent(QTimerEvent *e)
+{
+    DBusTimeout *timeout = timeouts.value(e->timerId());
+
+    if (timeout)
+        dbus_timeout_handle(timeout);
+}
+
+
+PyDoc_STRVAR(DBusQtMainLoop__doc__,
+"DBusQtMainLoop([set_as_default=False]) -> NativeMainLoop\n"
+"\n"
+"Return a NativeMainLoop object.\n"
+"\n"
+"If the keyword argument set_as_default is given and is True, set the new\n"
+"main loop as the default for all new Connection or Bus instances.\n");
+
+extern "C" {static PyObject *DBusQtMainLoop(PyObject *, PyObject *args, PyObject *kwargs);}
+static PyObject *DBusQtMainLoop(PyObject *, PyObject *args, PyObject *kwargs)
+{
+    if (PyTuple_Size(args) != 0)
+    {
+        PyErr_SetString(PyExc_TypeError, "DBusQtMainLoop() takes no positional arguments");
+        return 0;
+    }
+
+    int set_as_default = 0;
+    static char *argnames[] = {"set_as_default", 0};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", argnames, &set_as_default))
+        return 0;
+
+    pyqt5DBusHelper *hlp = new pyqt5DBusHelper;
+
+    PyObject *mainloop = DBusPyNativeMainLoop_New4(dbus_qt_conn, dbus_qt_srv,
+                dbus_qt_delete_helper, hlp);
+
+    if (!mainloop)
+    {
+        delete hlp;
+        return 0;
+    }
+
+    if (set_as_default)
+    {
+        PyObject *func = PyObject_GetAttrString(_dbus_bindings_module, "set_default_main_loop");
+
+        if (!func)
+        {
+            Py_DECREF(mainloop);
+            return 0;
+        }
+
+        PyObject *res = PyObject_CallFunctionObjArgs(func, mainloop, 0);
+        Py_DECREF(func);
+
+        if (!res)
+        {
+            Py_DECREF(mainloop);
+            return 0;
+        }
+
+        Py_DECREF(res);
+    }
+
+    return mainloop;
+}
+
+
+// The table of module functions.
+static PyMethodDef module_functions[] = {
+    {"DBusQtMainLoop", (PyCFunction)DBusQtMainLoop, METH_VARARGS|METH_KEYWORDS,
+    DBusQtMainLoop__doc__},
+    {0, 0, 0, 0}
+};
+
+
+// The module entry point.
+#if PY_MAJOR_VERSION >= 3
+PyMODINIT_FUNC PyInit_pyqt5()
+{
+    static PyModuleDef module_def = {
+        PyModuleDef_HEAD_INIT,
+        "pyqt5",
+        NULL,
+        -1,
+        module_functions,
+    };
+
+    // Import the generic part of the Python DBus bindings.
+    if (import_dbus_bindings("dbus.mainloop.pyqt5") < 0)
+        return 0;
+
+    return PyModule_Create(&module_def);
+}
+#else
+PyMODINIT_FUNC initpyqt5()
+{
+    // Import the generic part of the Python DBus bindings.
+    if (import_dbus_bindings("dbus.mainloop.pyqt5") < 0)
+        return;
+
+    Py_InitModule("pyqt5", module_functions);
+}
+#endif
diff --git a/dbus/helper.h b/dbus/helper.h
new file mode 100644
index 0000000..0f70cd3
--- /dev/null
+++ b/dbus/helper.h
@@ -0,0 +1,71 @@
+// This is the declaration of the helper class for the Qt specific support for
+// the standard Python DBus bindings.
+//
+// Copyright (c) 2014 Riverbank Computing Limited
+//
+// 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 <QHash>
+#include <QList>
+#include <QMultiHash>
+#include <QObject>
+#include <QPointer>
+#include <QSocketNotifier>
+
+#include <dbus/dbus.h>
+
+
+class QTimerEvent;
+
+
+class pyqt5DBusHelper : public QObject
+{
+    Q_OBJECT
+
+public:
+    struct Watcher
+    {
+        Watcher() : watch(0), read(0), write(0) {}
+
+        DBusWatch *watch;
+        QPointer<QSocketNotifier> read;
+        QPointer<QSocketNotifier> write;
+    };
+
+    typedef QMultiHash<int, Watcher> Watchers;
+    typedef QHash<int, DBusTimeout *> Timeouts;
+    typedef QList<DBusConnection *>Connections;
+
+    pyqt5DBusHelper();
+
+    Watchers watchers;
+    Timeouts timeouts;
+    Connections connections;
+
+public slots:
+    void readSocket(int fd);
+    void writeSocket(int fd);
+    void dispatch();
+
+protected:
+    void timerEvent(QTimerEvent *e);
+};
diff --git a/designer/pluginloader.cpp b/designer/pluginloader.cpp
new file mode 100644
index 0000000..5e9bd2a
--- /dev/null
+++ b/designer/pluginloader.cpp
@@ -0,0 +1,318 @@
+/*
+ * This is the Qt Designer plugin that collects all the Python plugins it can
+ * find as a widget collection to Designer.
+ *
+ * Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+ * 
+ * This file is part of PyQt5.
+ * 
+ * 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 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.
+ * 
+ * If you do not wish to use this file under the terms of the GPL version 3.0
+ * then you may purchase a commercial license.  For more information contact
+ * info at riverbankcomputing.com.
+ * 
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+
+#include "pluginloader.h"
+
+#include <stdlib.h>
+
+#include <QtGlobal>
+#include <QtPlugin>
+#include <QCoreApplication>
+#include <QDesignerCustomWidgetInterface>
+#include <QDir>
+#include <QLibrary>
+#include <QStringList>
+#include <QVector>
+
+#include "../qpy/QtDesigner/qpydesignercustomwidgetplugin.h"
+
+
+// Construct the collection of Python widgets.
+PyCustomWidgets::PyCustomWidgets(QObject *parent) : QObject(parent)
+{
+    // Get the default list of directories to search.  These correspond to a
+    // standard "python" subdirectory of all the places that Designer looks for
+    // its own plugins.
+    QStringList default_dirs;
+
+    QStringList path_list = QCoreApplication::libraryPaths();
+    foreach (const QString &path, path_list)
+        default_dirs.append(path + QDir::separator() +
+                QLatin1String("designer") + QDir::separator() +
+                QLatin1String("python"));
+
+    default_dirs.append(QDir::homePath() + QDir::separator() +
+            QLatin1String(".designer") + QDir::separator() +
+            QLatin1String("plugins") + QDir::separator() +
+            QLatin1String("python"));
+
+    // Get the list of directories to search.
+    QStringList dirs;
+    char *pyqt_path = getenv("PYQTDESIGNERPATH");
+
+    if (pyqt_path)
+    {
+#if defined(Q_OS_WIN)
+        QLatin1Char sep(';');
+#else
+        QLatin1Char sep(':');
+#endif
+
+        QStringList pyqt_dirs = QString::fromLatin1(pyqt_path).split(sep);
+
+        for (QStringList::const_iterator it = pyqt_dirs.constBegin(); it != pyqt_dirs.constEnd(); ++it)
+            if ((*it).isEmpty())
+                dirs << default_dirs;
+            else
+                dirs.append(QDir(*it).canonicalPath());
+    }
+    else
+        dirs = default_dirs;
+
+    // The sys.path object if we need it.
+    PyObject *sys_path = 0;
+
+    // The sip.unwrapinstance object if we need it.
+    PyObject *sip_unwrapinstance = 0;
+
+    // The PyQt5.QtDesigner.QPyDesignerCustomWidgetPlugin object if we need it.
+    PyObject *qtdesigner_custom = 0;
+
+    // Go through each directory.
+    for (int i = 0; i < dirs.size(); ++i)
+    {
+        QString dir = dirs.at(i);
+
+        // Get a list of all candidate plugin modules.  We sort by name to
+        // provide control over the order they are imported.
+        QStringList candidates = QDir(dir).entryList(QDir::Files, QDir::Name);
+        QStringList plugins;
+
+        for (int p = 0; p < candidates.size(); ++p)
+        {
+            QStringList parts = candidates.at(p).split('.');
+
+            if (parts.size() != 2)
+                continue;
+
+            if (!parts.at(1).startsWith("py"))
+                continue;
+
+            const QString &plugin = parts.at(0);
+
+            if (!plugin.endsWith("plugin"))
+                continue;
+
+            if (plugins.contains(plugin))
+                continue;
+
+            plugins.append(plugin);
+        }
+
+        // Skip if there is nothing of interest in this directory.
+        if (!plugins.size())
+            continue;
+
+        // Make sure the interpreter is initialised.  Leave this as late as
+        // possible.
+        if (!Py_IsInitialized())
+        {
+            QLibrary library(PYTHON_LIB);
+
+            library.setLoadHints(QLibrary::ExportExternalSymbolsHint);
+
+            if (!library.load())
+                return;
+
+            Py_Initialize();
+        }
+
+        // Make sure we have sys.path.
+        if (!sys_path)
+        {
+            sys_path = getModuleAttr("sys", "path");
+
+            if (!sys_path)
+                return;
+        }
+
+        // Make sure we have sip.unwrapinstance.
+        if (!sip_unwrapinstance)
+        {
+            sip_unwrapinstance = getModuleAttr("sip", "unwrapinstance");
+
+            if (!sip_unwrapinstance)
+                return;
+        }
+
+        // Convert the directory to a Python object with native separators.
+        dir = QDir::toNativeSeparators(dir);
+
+#if PY_VERSION_HEX >= 0x03030000
+        PyObject *dobj = PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND, dir.constData(), dir.length());
+
+        if (!dobj)
+        {
+            PyErr_Print();
+            continue;
+        }
+#elif PY_VERSION_HEX >= 0x03000000
+#if defined(Py_UNICODE_WIDE)
+        QVector<uint> ucs4 = dir.toUcs4();
+
+        PyObject *dobj = PyUnicode_FromUnicode(0, ucs4.size());
+
+        if (!dobj)
+        {
+            PyErr_Print();
+            continue;
+        }
+
+        memcpy(PyUnicode_AS_UNICODE(dobj), ucs4.constData(),
+                ucs4.size() * sizeof (Py_UNICODE));
+#else
+        PyObject *dobj = PyUnicode_FromUnicode(0, dir.length());
+
+        if (!dobj)
+        {
+            PyErr_Print();
+            continue;
+        }
+
+        memcpy(PyUnicode_AS_UNICODE(dobj), dir.utf16(),
+                dir.length() * sizeof (Py_UNICODE));
+#endif
+#else
+        PyObject *dobj = PyString_FromString(dir.toLatin1().constData());
+
+        if (!dobj)
+        {
+            PyErr_Print();
+            continue;
+        }
+#endif
+
+        // Add the directory to sys.path.
+        int rc = PyList_Append(sys_path, dobj);
+        Py_DECREF(dobj);
+
+        if (rc < 0)
+        {
+            PyErr_Print();
+            continue;
+        }
+
+        // Import each plugin.
+        for (int plug = 0; plug < plugins.size(); ++plug)
+        {
+            PyObject *plug_mod = PyImport_ImportModule(plugins.at(plug).toLatin1().data());
+
+            if (!plug_mod)
+            {
+                PyErr_Print();
+                continue;
+            }
+
+            // Make sure we have QPyDesignerCustomWidgetPlugin.  We make sure
+            // this is after the import of the first plugin to allow that
+            // plugin to change any API versions.
+            if (!qtdesigner_custom)
+            {
+                qtdesigner_custom = getModuleAttr("PyQt5.QtDesigner", "QPyDesignerCustomWidgetPlugin");
+
+                if (!qtdesigner_custom)
+                    return;
+            }
+
+            // Go through the module looking for types that implement
+            // QDesignerCustomWidgetInterface (ie. by deriving from
+            // QPyDesignerCustomWidgetPlugin).
+            PyObject *mod_dict = PyModule_GetDict(plug_mod);
+            PyObject *key, *value;
+            Py_ssize_t pos = 0;
+
+            while (PyDict_Next(mod_dict, &pos, &key, &value))
+            {
+                if (!PyType_Check(value))
+                    continue;
+
+                if (value == qtdesigner_custom)
+                    continue;
+
+                if (!PyType_IsSubtype((PyTypeObject *)value, (PyTypeObject *)qtdesigner_custom))
+                    continue;
+
+                // Create the plugin instance.  Note that we don't give it a
+                // parent, which make things easier.  It also means that Python
+                // owns the instance so we don't decrement the reference count
+                // so that it doesn't get garbage collected.
+                PyObject *plugobj = PyObject_CallObject(value, NULL);
+
+                if (!plugobj)
+                {
+                    PyErr_Print();
+                    continue;
+                }
+
+                // Get the address of the C++ instance.
+                PyObject *plugaddr = PyObject_CallFunctionObjArgs(sip_unwrapinstance, plugobj, NULL);
+
+                if (!plugaddr)
+                {
+                    Py_DECREF(plugobj);
+                    PyErr_Print();
+                    continue;
+                }
+
+                void *addr = PyLong_AsVoidPtr(plugaddr);
+                Py_DECREF(plugaddr);
+
+                widgets.append(reinterpret_cast<QPyDesignerCustomWidgetPlugin *>(addr));
+            }
+
+            Py_DECREF(plug_mod);
+        }
+    }
+}
+
+
+// Return the list of custom widgets.
+QList<QDesignerCustomWidgetInterface *> PyCustomWidgets::customWidgets() const
+{
+    return widgets;
+}
+
+
+// Return the named attribute object from the named module.
+PyObject *PyCustomWidgets::getModuleAttr(const char *module, const char *attr)
+{
+    PyObject *mod = PyImport_ImportModule(module);
+
+    if (!mod)
+    {
+        PyErr_Print();
+        return 0;
+    }
+
+    PyObject *obj = PyObject_GetAttrString(mod, attr);
+
+    Py_DECREF(mod);
+
+    if (!obj)
+    {
+        PyErr_Print();
+        return 0;
+    }
+
+    return obj;
+}
diff --git a/designer/pluginloader.h b/designer/pluginloader.h
new file mode 100644
index 0000000..01acc54
--- /dev/null
+++ b/designer/pluginloader.h
@@ -0,0 +1,56 @@
+/*
+ * This is the interface of the Qt Designer plugin.
+ *
+ * Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+ * 
+ * This file is part of PyQt5.
+ * 
+ * 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 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.
+ * 
+ * If you do not wish to use this file under the terms of the GPL version 3.0
+ * then you may purchase a commercial license.  For more information contact
+ * info at riverbankcomputing.com.
+ * 
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+
+#ifndef _PLUGINLOADER_H
+#define _PLUGINLOADER_H
+
+#include <Python.h>
+
+#include <QDesignerCustomWidgetCollectionInterface>
+#include <QList>
+#include <QObject>
+
+
+QT_BEGIN_NAMESPACE
+class QDesignerCustomWidgetInterface;
+QT_END_NAMESPACE
+
+
+class PyCustomWidgets
+    : public QObject, public QDesignerCustomWidgetCollectionInterface
+{
+    Q_OBJECT
+    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetCollectionInterface")
+    Q_INTERFACES(QDesignerCustomWidgetCollectionInterface)
+
+public:
+    PyCustomWidgets(QObject *parent = 0);
+
+    virtual QList<QDesignerCustomWidgetInterface *> customWidgets() const;
+
+private:
+    static PyObject *getModuleAttr(const char *module, const char *attr);
+
+    QList<QDesignerCustomWidgetInterface *> widgets;
+};
+
+#endif
diff --git a/designer/python.pro-in b/designer/python.pro-in
new file mode 100644
index 0000000..3a154ad
--- /dev/null
+++ b/designer/python.pro-in
@@ -0,0 +1,23 @@
+CONFIG      += plugin @QTCONFIG@ warn_on
+QT          += designer
+
+# Work around QTBUG-39300.
+CONFIG -= android_install
+
+TARGET      = pyqt5
+TEMPLATE    = lib
+
+INCLUDEPATH += @PYINCDIR@
+LIBS        += @PYLINK@
+DEFINES     += PYTHON_LIB=\\\"@PYSHLIB@\\\"
+
+SOURCES     = pluginloader.cpp
+HEADERS     = pluginloader.h
+
+# Install.
+target.path = @QTPLUGINDIR@
+
+python.path = @QTPLUGINDIR@
+python.files = python
+
+INSTALLS    += target python
diff --git a/doc/sphinx/api/enginio.rst b/doc/sphinx/api/enginio.rst
new file mode 100644
index 0000000..e48f353
--- /dev/null
+++ b/doc/sphinx/api/enginio.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.Enginio
+
+Enginio
+-------
+
+.. class:: Enginio
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/enginio.html>`_
diff --git a/doc/sphinx/api/enginioclient.rst b/doc/sphinx/api/enginioclient.rst
new file mode 100644
index 0000000..3acc375
--- /dev/null
+++ b/doc/sphinx/api/enginioclient.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.Enginio
+
+EnginioClient
+-------------
+
+.. class:: EnginioClient
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/enginioclient.html>`_
diff --git a/doc/sphinx/api/enginioclientconnection.rst b/doc/sphinx/api/enginioclientconnection.rst
new file mode 100644
index 0000000..f5c31cc
--- /dev/null
+++ b/doc/sphinx/api/enginioclientconnection.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.Enginio
+
+EnginioClientConnection
+-----------------------
+
+.. class:: EnginioClientConnection
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/enginioclientconnection.html>`_
diff --git a/doc/sphinx/api/enginioidentity.rst b/doc/sphinx/api/enginioidentity.rst
new file mode 100644
index 0000000..2b99711
--- /dev/null
+++ b/doc/sphinx/api/enginioidentity.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.Enginio
+
+EnginioIdentity
+---------------
+
+.. class:: EnginioIdentity
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/enginioidentity.html>`_
diff --git a/doc/sphinx/api/enginiomodel.rst b/doc/sphinx/api/enginiomodel.rst
new file mode 100644
index 0000000..8fdf504
--- /dev/null
+++ b/doc/sphinx/api/enginiomodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.Enginio
+
+EnginioModel
+------------
+
+.. class:: EnginioModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/enginiomodel.html>`_
diff --git a/doc/sphinx/api/enginiooauth2authentication.rst b/doc/sphinx/api/enginiooauth2authentication.rst
new file mode 100644
index 0000000..7f9fa1e
--- /dev/null
+++ b/doc/sphinx/api/enginiooauth2authentication.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.Enginio
+
+EnginioOAuth2Authentication
+---------------------------
+
+.. class:: EnginioOAuth2Authentication
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/enginiooauth2authentication.html>`_
diff --git a/doc/sphinx/api/enginioreply.rst b/doc/sphinx/api/enginioreply.rst
new file mode 100644
index 0000000..19a6d8a
--- /dev/null
+++ b/doc/sphinx/api/enginioreply.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.Enginio
+
+EnginioReply
+------------
+
+.. class:: EnginioReply
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/enginioreply.html>`_
diff --git a/doc/sphinx/api/qabstractanimation.rst b/doc/sphinx/api/qabstractanimation.rst
new file mode 100644
index 0000000..9bd1a98
--- /dev/null
+++ b/doc/sphinx/api/qabstractanimation.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QAbstractAnimation
+------------------
+
+.. class:: QAbstractAnimation
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractanimation.html>`_
diff --git a/doc/sphinx/api/qabstractbutton.rst b/doc/sphinx/api/qabstractbutton.rst
new file mode 100644
index 0000000..b639b19
--- /dev/null
+++ b/doc/sphinx/api/qabstractbutton.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QAbstractButton
+---------------
+
+.. class:: QAbstractButton
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractbutton.html>`_
diff --git a/doc/sphinx/api/qabstracteventdispatcher.rst b/doc/sphinx/api/qabstracteventdispatcher.rst
new file mode 100644
index 0000000..c59cfe9
--- /dev/null
+++ b/doc/sphinx/api/qabstracteventdispatcher.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QAbstractEventDispatcher
+------------------------
+
+.. class:: QAbstractEventDispatcher
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstracteventdispatcher.html>`_
diff --git a/doc/sphinx/api/qabstractextensionfactory.rst b/doc/sphinx/api/qabstractextensionfactory.rst
new file mode 100644
index 0000000..ad1913a
--- /dev/null
+++ b/doc/sphinx/api/qabstractextensionfactory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QAbstractExtensionFactory
+-------------------------
+
+.. class:: QAbstractExtensionFactory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractextensionfactory.html>`_
diff --git a/doc/sphinx/api/qabstractextensionmanager.rst b/doc/sphinx/api/qabstractextensionmanager.rst
new file mode 100644
index 0000000..a343e03
--- /dev/null
+++ b/doc/sphinx/api/qabstractextensionmanager.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QAbstractExtensionManager
+-------------------------
+
+.. class:: QAbstractExtensionManager
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractextensionmanager.html>`_
diff --git a/doc/sphinx/api/qabstractformbuilder.rst b/doc/sphinx/api/qabstractformbuilder.rst
new file mode 100644
index 0000000..af7fe0a
--- /dev/null
+++ b/doc/sphinx/api/qabstractformbuilder.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QAbstractFormBuilder
+--------------------
+
+.. class:: QAbstractFormBuilder
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractformbuilder.html>`_
diff --git a/doc/sphinx/api/qabstractgraphicsshapeitem.rst b/doc/sphinx/api/qabstractgraphicsshapeitem.rst
new file mode 100644
index 0000000..426f397
--- /dev/null
+++ b/doc/sphinx/api/qabstractgraphicsshapeitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QAbstractGraphicsShapeItem
+--------------------------
+
+.. class:: QAbstractGraphicsShapeItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractgraphicsshapeitem.html>`_
diff --git a/doc/sphinx/api/qabstractitemdelegate.rst b/doc/sphinx/api/qabstractitemdelegate.rst
new file mode 100644
index 0000000..3f5f270
--- /dev/null
+++ b/doc/sphinx/api/qabstractitemdelegate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QAbstractItemDelegate
+---------------------
+
+.. class:: QAbstractItemDelegate
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractitemdelegate.html>`_
diff --git a/doc/sphinx/api/qabstractitemmodel.rst b/doc/sphinx/api/qabstractitemmodel.rst
new file mode 100644
index 0000000..f36111b
--- /dev/null
+++ b/doc/sphinx/api/qabstractitemmodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QAbstractItemModel
+------------------
+
+.. class:: QAbstractItemModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractitemmodel.html>`_
diff --git a/doc/sphinx/api/qabstractitemview.rst b/doc/sphinx/api/qabstractitemview.rst
new file mode 100644
index 0000000..6492f30
--- /dev/null
+++ b/doc/sphinx/api/qabstractitemview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QAbstractItemView
+-----------------
+
+.. class:: QAbstractItemView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractitemview.html>`_
diff --git a/doc/sphinx/api/qabstractlistmodel.rst b/doc/sphinx/api/qabstractlistmodel.rst
new file mode 100644
index 0000000..2cfb9a7
--- /dev/null
+++ b/doc/sphinx/api/qabstractlistmodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QAbstractListModel
+------------------
+
+.. class:: QAbstractListModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractlistmodel.html>`_
diff --git a/doc/sphinx/api/qabstractmessagehandler.rst b/doc/sphinx/api/qabstractmessagehandler.rst
new file mode 100644
index 0000000..be5df92
--- /dev/null
+++ b/doc/sphinx/api/qabstractmessagehandler.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QAbstractMessageHandler
+-----------------------
+
+.. class:: QAbstractMessageHandler
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractmessagehandler.html>`_
diff --git a/doc/sphinx/api/qabstractnativeeventfilter.rst b/doc/sphinx/api/qabstractnativeeventfilter.rst
new file mode 100644
index 0000000..4c9b859
--- /dev/null
+++ b/doc/sphinx/api/qabstractnativeeventfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QAbstractNativeEventFilter
+--------------------------
+
+.. class:: QAbstractNativeEventFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractnativeeventfilter.html>`_
diff --git a/doc/sphinx/api/qabstractnetworkcache.rst b/doc/sphinx/api/qabstractnetworkcache.rst
new file mode 100644
index 0000000..c7cbae6
--- /dev/null
+++ b/doc/sphinx/api/qabstractnetworkcache.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QAbstractNetworkCache
+---------------------
+
+.. class:: QAbstractNetworkCache
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractnetworkcache.html>`_
diff --git a/doc/sphinx/api/qabstractprintdialog.rst b/doc/sphinx/api/qabstractprintdialog.rst
new file mode 100644
index 0000000..750b62c
--- /dev/null
+++ b/doc/sphinx/api/qabstractprintdialog.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPrintSupport
+
+QAbstractPrintDialog
+--------------------
+
+.. class:: QAbstractPrintDialog
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractprintdialog.html>`_
diff --git a/doc/sphinx/api/qabstractproxymodel.rst b/doc/sphinx/api/qabstractproxymodel.rst
new file mode 100644
index 0000000..9bcf649
--- /dev/null
+++ b/doc/sphinx/api/qabstractproxymodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QAbstractProxyModel
+-------------------
+
+.. class:: QAbstractProxyModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractproxymodel.html>`_
diff --git a/doc/sphinx/api/qabstractscrollarea.rst b/doc/sphinx/api/qabstractscrollarea.rst
new file mode 100644
index 0000000..ff6d903
--- /dev/null
+++ b/doc/sphinx/api/qabstractscrollarea.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QAbstractScrollArea
+-------------------
+
+.. class:: QAbstractScrollArea
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractscrollarea.html>`_
diff --git a/doc/sphinx/api/qabstractslider.rst b/doc/sphinx/api/qabstractslider.rst
new file mode 100644
index 0000000..7aac814
--- /dev/null
+++ b/doc/sphinx/api/qabstractslider.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QAbstractSlider
+---------------
+
+.. class:: QAbstractSlider
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractslider.html>`_
diff --git a/doc/sphinx/api/qabstractsocket.rst b/doc/sphinx/api/qabstractsocket.rst
new file mode 100644
index 0000000..a66a7b4
--- /dev/null
+++ b/doc/sphinx/api/qabstractsocket.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QAbstractSocket
+---------------
+
+.. class:: QAbstractSocket
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractsocket.html>`_
diff --git a/doc/sphinx/api/qabstractspinbox.rst b/doc/sphinx/api/qabstractspinbox.rst
new file mode 100644
index 0000000..8503fcd
--- /dev/null
+++ b/doc/sphinx/api/qabstractspinbox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QAbstractSpinBox
+----------------
+
+.. class:: QAbstractSpinBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractspinbox.html>`_
diff --git a/doc/sphinx/api/qabstractstate.rst b/doc/sphinx/api/qabstractstate.rst
new file mode 100644
index 0000000..6204356
--- /dev/null
+++ b/doc/sphinx/api/qabstractstate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QAbstractState
+--------------
+
+.. class:: QAbstractState
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractstate.html>`_
diff --git a/doc/sphinx/api/qabstracttablemodel.rst b/doc/sphinx/api/qabstracttablemodel.rst
new file mode 100644
index 0000000..4d35879
--- /dev/null
+++ b/doc/sphinx/api/qabstracttablemodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QAbstractTableModel
+-------------------
+
+.. class:: QAbstractTableModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstracttablemodel.html>`_
diff --git a/doc/sphinx/api/qabstracttextdocumentlayout.rst b/doc/sphinx/api/qabstracttextdocumentlayout.rst
new file mode 100644
index 0000000..fdefa95
--- /dev/null
+++ b/doc/sphinx/api/qabstracttextdocumentlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QAbstractTextDocumentLayout
+---------------------------
+
+.. class:: QAbstractTextDocumentLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstracttextdocumentlayout.html>`_
diff --git a/doc/sphinx/api/qabstracttransition.rst b/doc/sphinx/api/qabstracttransition.rst
new file mode 100644
index 0000000..d3b8add
--- /dev/null
+++ b/doc/sphinx/api/qabstracttransition.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QAbstractTransition
+-------------------
+
+.. class:: QAbstractTransition
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstracttransition.html>`_
diff --git a/doc/sphinx/api/qabstracturiresolver.rst b/doc/sphinx/api/qabstracturiresolver.rst
new file mode 100644
index 0000000..ad3bfc0
--- /dev/null
+++ b/doc/sphinx/api/qabstracturiresolver.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QAbstractUriResolver
+--------------------
+
+.. class:: QAbstractUriResolver
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstracturiresolver.html>`_
diff --git a/doc/sphinx/api/qabstractvideobuffer.rst b/doc/sphinx/api/qabstractvideobuffer.rst
new file mode 100644
index 0000000..cb7efaf
--- /dev/null
+++ b/doc/sphinx/api/qabstractvideobuffer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAbstractVideoBuffer
+--------------------
+
+.. class:: QAbstractVideoBuffer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractvideobuffer.html>`_
diff --git a/doc/sphinx/api/qabstractvideosurface.rst b/doc/sphinx/api/qabstractvideosurface.rst
new file mode 100644
index 0000000..e0e9336
--- /dev/null
+++ b/doc/sphinx/api/qabstractvideosurface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAbstractVideoSurface
+---------------------
+
+.. class:: QAbstractVideoSurface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractvideosurface.html>`_
diff --git a/doc/sphinx/api/qabstractxmlnodemodel.rst b/doc/sphinx/api/qabstractxmlnodemodel.rst
new file mode 100644
index 0000000..721da08
--- /dev/null
+++ b/doc/sphinx/api/qabstractxmlnodemodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QAbstractXmlNodeModel
+---------------------
+
+.. class:: QAbstractXmlNodeModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractxmlnodemodel.html>`_
diff --git a/doc/sphinx/api/qabstractxmlreceiver.rst b/doc/sphinx/api/qabstractxmlreceiver.rst
new file mode 100644
index 0000000..e83475c
--- /dev/null
+++ b/doc/sphinx/api/qabstractxmlreceiver.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QAbstractXmlReceiver
+--------------------
+
+.. class:: QAbstractXmlReceiver
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qabstractxmlreceiver.html>`_
diff --git a/doc/sphinx/api/qaccelerometer.rst b/doc/sphinx/api/qaccelerometer.rst
new file mode 100644
index 0000000..3198170
--- /dev/null
+++ b/doc/sphinx/api/qaccelerometer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAccelerometer
+--------------
+
+.. class:: QAccelerometer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaccelerometer.html>`_
diff --git a/doc/sphinx/api/qaccelerometerfilter.rst b/doc/sphinx/api/qaccelerometerfilter.rst
new file mode 100644
index 0000000..13d29db
--- /dev/null
+++ b/doc/sphinx/api/qaccelerometerfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAccelerometerFilter
+--------------------
+
+.. class:: QAccelerometerFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaccelerometerfilter.html>`_
diff --git a/doc/sphinx/api/qaccelerometerreading.rst b/doc/sphinx/api/qaccelerometerreading.rst
new file mode 100644
index 0000000..91e8f82
--- /dev/null
+++ b/doc/sphinx/api/qaccelerometerreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAccelerometerReading
+---------------------
+
+.. class:: QAccelerometerReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaccelerometerreading.html>`_
diff --git a/doc/sphinx/api/qaction.rst b/doc/sphinx/api/qaction.rst
new file mode 100644
index 0000000..bbc3a54
--- /dev/null
+++ b/doc/sphinx/api/qaction.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QAction
+-------
+
+.. class:: QAction
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaction.html>`_
diff --git a/doc/sphinx/api/qactionevent.rst b/doc/sphinx/api/qactionevent.rst
new file mode 100644
index 0000000..9bd3590
--- /dev/null
+++ b/doc/sphinx/api/qactionevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QActionEvent
+------------
+
+.. class:: QActionEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qactionevent.html>`_
diff --git a/doc/sphinx/api/qactiongroup.rst b/doc/sphinx/api/qactiongroup.rst
new file mode 100644
index 0000000..d33a1c1
--- /dev/null
+++ b/doc/sphinx/api/qactiongroup.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QActionGroup
+------------
+
+.. class:: QActionGroup
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qactiongroup.html>`_
diff --git a/doc/sphinx/api/qaltimeter.rst b/doc/sphinx/api/qaltimeter.rst
new file mode 100644
index 0000000..bc0f5ab
--- /dev/null
+++ b/doc/sphinx/api/qaltimeter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAltimeter
+----------
+
+.. class:: QAltimeter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaltimeter.html>`_
diff --git a/doc/sphinx/api/qaltimeterfilter.rst b/doc/sphinx/api/qaltimeterfilter.rst
new file mode 100644
index 0000000..7ce8082
--- /dev/null
+++ b/doc/sphinx/api/qaltimeterfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAltimeterFilter
+----------------
+
+.. class:: QAltimeterFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaltimeterfilter.html>`_
diff --git a/doc/sphinx/api/qaltimeterreading.rst b/doc/sphinx/api/qaltimeterreading.rst
new file mode 100644
index 0000000..2c90cfa
--- /dev/null
+++ b/doc/sphinx/api/qaltimeterreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAltimeterReading
+-----------------
+
+.. class:: QAltimeterReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaltimeterreading.html>`_
diff --git a/doc/sphinx/api/qambientlightfilter.rst b/doc/sphinx/api/qambientlightfilter.rst
new file mode 100644
index 0000000..6a96f61
--- /dev/null
+++ b/doc/sphinx/api/qambientlightfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAmbientLightFilter
+-------------------
+
+.. class:: QAmbientLightFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qambientlightfilter.html>`_
diff --git a/doc/sphinx/api/qambientlightreading.rst b/doc/sphinx/api/qambientlightreading.rst
new file mode 100644
index 0000000..a3cc47b
--- /dev/null
+++ b/doc/sphinx/api/qambientlightreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAmbientLightReading
+--------------------
+
+.. class:: QAmbientLightReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qambientlightreading.html>`_
diff --git a/doc/sphinx/api/qambientlightsensor.rst b/doc/sphinx/api/qambientlightsensor.rst
new file mode 100644
index 0000000..b5348b8
--- /dev/null
+++ b/doc/sphinx/api/qambientlightsensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAmbientLightSensor
+-------------------
+
+.. class:: QAmbientLightSensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qambientlightsensor.html>`_
diff --git a/doc/sphinx/api/qambienttemperaturefilter.rst b/doc/sphinx/api/qambienttemperaturefilter.rst
new file mode 100644
index 0000000..5891c6d
--- /dev/null
+++ b/doc/sphinx/api/qambienttemperaturefilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAmbientTemperatureFilter
+-------------------------
+
+.. class:: QAmbientTemperatureFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qambienttemperaturefilter.html>`_
diff --git a/doc/sphinx/api/qambienttemperaturereading.rst b/doc/sphinx/api/qambienttemperaturereading.rst
new file mode 100644
index 0000000..68ae9b6
--- /dev/null
+++ b/doc/sphinx/api/qambienttemperaturereading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAmbientTemperatureReading
+--------------------------
+
+.. class:: QAmbientTemperatureReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qambienttemperaturereading.html>`_
diff --git a/doc/sphinx/api/qambienttemperaturesensor.rst b/doc/sphinx/api/qambienttemperaturesensor.rst
new file mode 100644
index 0000000..6714901
--- /dev/null
+++ b/doc/sphinx/api/qambienttemperaturesensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QAmbientTemperatureSensor
+-------------------------
+
+.. class:: QAmbientTemperatureSensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qambienttemperaturesensor.html>`_
diff --git a/doc/sphinx/api/qanimationgroup.rst b/doc/sphinx/api/qanimationgroup.rst
new file mode 100644
index 0000000..b09ce51
--- /dev/null
+++ b/doc/sphinx/api/qanimationgroup.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QAnimationGroup
+---------------
+
+.. class:: QAnimationGroup
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qanimationgroup.html>`_
diff --git a/doc/sphinx/api/qapplication.rst b/doc/sphinx/api/qapplication.rst
new file mode 100644
index 0000000..8f28f1a
--- /dev/null
+++ b/doc/sphinx/api/qapplication.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QApplication
+------------
+
+.. class:: QApplication
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qapplication.html>`_
diff --git a/doc/sphinx/api/qaudio.rst b/doc/sphinx/api/qaudio.rst
new file mode 100644
index 0000000..774b837
--- /dev/null
+++ b/doc/sphinx/api/qaudio.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAudio
+------
+
+.. class:: QAudio
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaudio.html>`_
diff --git a/doc/sphinx/api/qaudiobuffer.rst b/doc/sphinx/api/qaudiobuffer.rst
new file mode 100644
index 0000000..5182a93
--- /dev/null
+++ b/doc/sphinx/api/qaudiobuffer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAudioBuffer
+------------
+
+.. class:: QAudioBuffer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaudiobuffer.html>`_
diff --git a/doc/sphinx/api/qaudiodecoder.rst b/doc/sphinx/api/qaudiodecoder.rst
new file mode 100644
index 0000000..7c1348a
--- /dev/null
+++ b/doc/sphinx/api/qaudiodecoder.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAudioDecoder
+-------------
+
+.. class:: QAudioDecoder
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaudiodecoder.html>`_
diff --git a/doc/sphinx/api/qaudiodeviceinfo.rst b/doc/sphinx/api/qaudiodeviceinfo.rst
new file mode 100644
index 0000000..4135827
--- /dev/null
+++ b/doc/sphinx/api/qaudiodeviceinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAudioDeviceInfo
+----------------
+
+.. class:: QAudioDeviceInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaudiodeviceinfo.html>`_
diff --git a/doc/sphinx/api/qaudioencodersettings.rst b/doc/sphinx/api/qaudioencodersettings.rst
new file mode 100644
index 0000000..a875cf8
--- /dev/null
+++ b/doc/sphinx/api/qaudioencodersettings.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAudioEncoderSettings
+---------------------
+
+.. class:: QAudioEncoderSettings
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaudioencodersettings.html>`_
diff --git a/doc/sphinx/api/qaudioformat.rst b/doc/sphinx/api/qaudioformat.rst
new file mode 100644
index 0000000..6529d30
--- /dev/null
+++ b/doc/sphinx/api/qaudioformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAudioFormat
+------------
+
+.. class:: QAudioFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaudioformat.html>`_
diff --git a/doc/sphinx/api/qaudioinput.rst b/doc/sphinx/api/qaudioinput.rst
new file mode 100644
index 0000000..a557a53
--- /dev/null
+++ b/doc/sphinx/api/qaudioinput.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAudioInput
+-----------
+
+.. class:: QAudioInput
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaudioinput.html>`_
diff --git a/doc/sphinx/api/qaudiooutput.rst b/doc/sphinx/api/qaudiooutput.rst
new file mode 100644
index 0000000..0aef23c
--- /dev/null
+++ b/doc/sphinx/api/qaudiooutput.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAudioOutput
+------------
+
+.. class:: QAudioOutput
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaudiooutput.html>`_
diff --git a/doc/sphinx/api/qaudioprobe.rst b/doc/sphinx/api/qaudioprobe.rst
new file mode 100644
index 0000000..11650f6
--- /dev/null
+++ b/doc/sphinx/api/qaudioprobe.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAudioProbe
+-----------
+
+.. class:: QAudioProbe
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaudioprobe.html>`_
diff --git a/doc/sphinx/api/qaudiorecorder.rst b/doc/sphinx/api/qaudiorecorder.rst
new file mode 100644
index 0000000..cae1b9d
--- /dev/null
+++ b/doc/sphinx/api/qaudiorecorder.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QAudioRecorder
+--------------
+
+.. class:: QAudioRecorder
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaudiorecorder.html>`_
diff --git a/doc/sphinx/api/qauthenticator.rst b/doc/sphinx/api/qauthenticator.rst
new file mode 100644
index 0000000..9b426a2
--- /dev/null
+++ b/doc/sphinx/api/qauthenticator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QAuthenticator
+--------------
+
+.. class:: QAuthenticator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qauthenticator.html>`_
diff --git a/doc/sphinx/api/qaxbase.rst b/doc/sphinx/api/qaxbase.rst
new file mode 100644
index 0000000..f86dec0
--- /dev/null
+++ b/doc/sphinx/api/qaxbase.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QAxContainer
+
+QAxBase
+-------
+
+.. class:: QAxBase
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaxbase.html>`_
diff --git a/doc/sphinx/api/qaxobject.rst b/doc/sphinx/api/qaxobject.rst
new file mode 100644
index 0000000..4496249
--- /dev/null
+++ b/doc/sphinx/api/qaxobject.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QAxContainer
+
+QAxObject
+---------
+
+.. class:: QAxObject
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaxobject.html>`_
diff --git a/doc/sphinx/api/qaxwidget.rst b/doc/sphinx/api/qaxwidget.rst
new file mode 100644
index 0000000..a684ace
--- /dev/null
+++ b/doc/sphinx/api/qaxwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QAxContainer
+
+QAxWidget
+---------
+
+.. class:: QAxWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qaxwidget.html>`_
diff --git a/doc/sphinx/api/qbackingstore.rst b/doc/sphinx/api/qbackingstore.rst
new file mode 100644
index 0000000..622c797
--- /dev/null
+++ b/doc/sphinx/api/qbackingstore.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QBackingStore
+-------------
+
+.. class:: QBackingStore
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbackingstore.html>`_
diff --git a/doc/sphinx/api/qbasictimer.rst b/doc/sphinx/api/qbasictimer.rst
new file mode 100644
index 0000000..7bd39ec
--- /dev/null
+++ b/doc/sphinx/api/qbasictimer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QBasicTimer
+-----------
+
+.. class:: QBasicTimer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbasictimer.html>`_
diff --git a/doc/sphinx/api/qbitarray.rst b/doc/sphinx/api/qbitarray.rst
new file mode 100644
index 0000000..5c48709
--- /dev/null
+++ b/doc/sphinx/api/qbitarray.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QBitArray
+---------
+
+.. class:: QBitArray
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbitarray.html>`_
diff --git a/doc/sphinx/api/qbitmap.rst b/doc/sphinx/api/qbitmap.rst
new file mode 100644
index 0000000..d3882eb
--- /dev/null
+++ b/doc/sphinx/api/qbitmap.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QBitmap
+-------
+
+.. class:: QBitmap
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbitmap.html>`_
diff --git a/doc/sphinx/api/qbluetoothaddress.rst b/doc/sphinx/api/qbluetoothaddress.rst
new file mode 100644
index 0000000..b17d200
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothaddress.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothAddress
+-----------------
+
+.. class:: QBluetoothAddress
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothaddress.html>`_
diff --git a/doc/sphinx/api/qbluetoothdevicediscoveryagent.rst b/doc/sphinx/api/qbluetoothdevicediscoveryagent.rst
new file mode 100644
index 0000000..524b2ae
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothdevicediscoveryagent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothDeviceDiscoveryAgent
+------------------------------
+
+.. class:: QBluetoothDeviceDiscoveryAgent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothdevicediscoveryagent.html>`_
diff --git a/doc/sphinx/api/qbluetoothdeviceinfo.rst b/doc/sphinx/api/qbluetoothdeviceinfo.rst
new file mode 100644
index 0000000..1b385ba
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothdeviceinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothDeviceInfo
+--------------------
+
+.. class:: QBluetoothDeviceInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothdeviceinfo.html>`_
diff --git a/doc/sphinx/api/qbluetoothhostinfo.rst b/doc/sphinx/api/qbluetoothhostinfo.rst
new file mode 100644
index 0000000..657f713
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothhostinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothHostInfo
+------------------
+
+.. class:: QBluetoothHostInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothhostinfo.html>`_
diff --git a/doc/sphinx/api/qbluetoothlocaldevice.rst b/doc/sphinx/api/qbluetoothlocaldevice.rst
new file mode 100644
index 0000000..1b16a91
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothlocaldevice.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothLocalDevice
+---------------------
+
+.. class:: QBluetoothLocalDevice
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothlocaldevice.html>`_
diff --git a/doc/sphinx/api/qbluetoothserver.rst b/doc/sphinx/api/qbluetoothserver.rst
new file mode 100644
index 0000000..eb31415
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothserver.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothServer
+----------------
+
+.. class:: QBluetoothServer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothserver.html>`_
diff --git a/doc/sphinx/api/qbluetoothservicediscoveryagent.rst b/doc/sphinx/api/qbluetoothservicediscoveryagent.rst
new file mode 100644
index 0000000..da7a8bc
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothservicediscoveryagent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothServiceDiscoveryAgent
+-------------------------------
+
+.. class:: QBluetoothServiceDiscoveryAgent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothservicediscoveryagent.html>`_
diff --git a/doc/sphinx/api/qbluetoothserviceinfo.rst b/doc/sphinx/api/qbluetoothserviceinfo.rst
new file mode 100644
index 0000000..0a5e762
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothserviceinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothServiceInfo
+---------------------
+
+.. class:: QBluetoothServiceInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothserviceinfo.html>`_
diff --git a/doc/sphinx/api/qbluetoothsocket.rst b/doc/sphinx/api/qbluetoothsocket.rst
new file mode 100644
index 0000000..e14a299
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothsocket.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothSocket
+----------------
+
+.. class:: QBluetoothSocket
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothsocket.html>`_
diff --git a/doc/sphinx/api/qbluetoothtransfermanager.rst b/doc/sphinx/api/qbluetoothtransfermanager.rst
new file mode 100644
index 0000000..434acd2
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothtransfermanager.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothTransferManager
+-------------------------
+
+.. class:: QBluetoothTransferManager
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothtransfermanager.html>`_
diff --git a/doc/sphinx/api/qbluetoothtransferreply.rst b/doc/sphinx/api/qbluetoothtransferreply.rst
new file mode 100644
index 0000000..50a4415
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothtransferreply.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothTransferReply
+-----------------------
+
+.. class:: QBluetoothTransferReply
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothtransferreply.html>`_
diff --git a/doc/sphinx/api/qbluetoothtransferrequest.rst b/doc/sphinx/api/qbluetoothtransferrequest.rst
new file mode 100644
index 0000000..41cf986
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothtransferrequest.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothTransferRequest
+-------------------------
+
+.. class:: QBluetoothTransferRequest
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothtransferrequest.html>`_
diff --git a/doc/sphinx/api/qbluetoothuuid.rst b/doc/sphinx/api/qbluetoothuuid.rst
new file mode 100644
index 0000000..892258f
--- /dev/null
+++ b/doc/sphinx/api/qbluetoothuuid.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtBluetooth
+
+QBluetoothUuid
+--------------
+
+.. class:: QBluetoothUuid
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbluetoothuuid.html>`_
diff --git a/doc/sphinx/api/qboxlayout.rst b/doc/sphinx/api/qboxlayout.rst
new file mode 100644
index 0000000..9c7a582
--- /dev/null
+++ b/doc/sphinx/api/qboxlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QBoxLayout
+----------
+
+.. class:: QBoxLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qboxlayout.html>`_
diff --git a/doc/sphinx/api/qbrush.rst b/doc/sphinx/api/qbrush.rst
new file mode 100644
index 0000000..8ca4e05
--- /dev/null
+++ b/doc/sphinx/api/qbrush.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QBrush
+------
+
+.. class:: QBrush
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbrush.html>`_
diff --git a/doc/sphinx/api/qbuffer.rst b/doc/sphinx/api/qbuffer.rst
new file mode 100644
index 0000000..1336f6a
--- /dev/null
+++ b/doc/sphinx/api/qbuffer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QBuffer
+-------
+
+.. class:: QBuffer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbuffer.html>`_
diff --git a/doc/sphinx/api/qbuttongroup.rst b/doc/sphinx/api/qbuttongroup.rst
new file mode 100644
index 0000000..1aa4422
--- /dev/null
+++ b/doc/sphinx/api/qbuttongroup.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QButtonGroup
+------------
+
+.. class:: QButtonGroup
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbuttongroup.html>`_
diff --git a/doc/sphinx/api/qbytearray.rst b/doc/sphinx/api/qbytearray.rst
new file mode 100644
index 0000000..0c95366
--- /dev/null
+++ b/doc/sphinx/api/qbytearray.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QByteArray
+----------
+
+.. class:: QByteArray
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbytearray.html>`_
diff --git a/doc/sphinx/api/qbytearraymatcher.rst b/doc/sphinx/api/qbytearraymatcher.rst
new file mode 100644
index 0000000..9953ac4
--- /dev/null
+++ b/doc/sphinx/api/qbytearraymatcher.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QByteArrayMatcher
+-----------------
+
+.. class:: QByteArrayMatcher
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qbytearraymatcher.html>`_
diff --git a/doc/sphinx/api/qcalendarwidget.rst b/doc/sphinx/api/qcalendarwidget.rst
new file mode 100644
index 0000000..33ce311
--- /dev/null
+++ b/doc/sphinx/api/qcalendarwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QCalendarWidget
+---------------
+
+.. class:: QCalendarWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcalendarwidget.html>`_
diff --git a/doc/sphinx/api/qcamera.rst b/doc/sphinx/api/qcamera.rst
new file mode 100644
index 0000000..e4b785d
--- /dev/null
+++ b/doc/sphinx/api/qcamera.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QCamera
+-------
+
+.. class:: QCamera
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcamera.html>`_
diff --git a/doc/sphinx/api/qcameraexposure.rst b/doc/sphinx/api/qcameraexposure.rst
new file mode 100644
index 0000000..aa14b08
--- /dev/null
+++ b/doc/sphinx/api/qcameraexposure.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QCameraExposure
+---------------
+
+.. class:: QCameraExposure
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcameraexposure.html>`_
diff --git a/doc/sphinx/api/qcamerafocus.rst b/doc/sphinx/api/qcamerafocus.rst
new file mode 100644
index 0000000..3871994
--- /dev/null
+++ b/doc/sphinx/api/qcamerafocus.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QCameraFocus
+------------
+
+.. class:: QCameraFocus
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcamerafocus.html>`_
diff --git a/doc/sphinx/api/qcamerafocuszone.rst b/doc/sphinx/api/qcamerafocuszone.rst
new file mode 100644
index 0000000..ed12b9b
--- /dev/null
+++ b/doc/sphinx/api/qcamerafocuszone.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QCameraFocusZone
+----------------
+
+.. class:: QCameraFocusZone
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcamerafocuszone.html>`_
diff --git a/doc/sphinx/api/qcameraimagecapture.rst b/doc/sphinx/api/qcameraimagecapture.rst
new file mode 100644
index 0000000..281b848
--- /dev/null
+++ b/doc/sphinx/api/qcameraimagecapture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QCameraImageCapture
+-------------------
+
+.. class:: QCameraImageCapture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcameraimagecapture.html>`_
diff --git a/doc/sphinx/api/qcameraimageprocessing.rst b/doc/sphinx/api/qcameraimageprocessing.rst
new file mode 100644
index 0000000..29b4126
--- /dev/null
+++ b/doc/sphinx/api/qcameraimageprocessing.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QCameraImageProcessing
+----------------------
+
+.. class:: QCameraImageProcessing
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcameraimageprocessing.html>`_
diff --git a/doc/sphinx/api/qcamerainfo.rst b/doc/sphinx/api/qcamerainfo.rst
new file mode 100644
index 0000000..34d542e
--- /dev/null
+++ b/doc/sphinx/api/qcamerainfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QCameraInfo
+-----------
+
+.. class:: QCameraInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcamerainfo.html>`_
diff --git a/doc/sphinx/api/qcameraviewfinder.rst b/doc/sphinx/api/qcameraviewfinder.rst
new file mode 100644
index 0000000..18ef307
--- /dev/null
+++ b/doc/sphinx/api/qcameraviewfinder.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimediaWidgets
+
+QCameraViewFinder
+-----------------
+
+.. class:: QCameraViewFinder
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcameraviewfinder.html>`_
diff --git a/doc/sphinx/api/qcheckbox.rst b/doc/sphinx/api/qcheckbox.rst
new file mode 100644
index 0000000..f848515
--- /dev/null
+++ b/doc/sphinx/api/qcheckbox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QCheckBox
+---------
+
+.. class:: QCheckBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcheckbox.html>`_
diff --git a/doc/sphinx/api/qchildevent.rst b/doc/sphinx/api/qchildevent.rst
new file mode 100644
index 0000000..c27ab25
--- /dev/null
+++ b/doc/sphinx/api/qchildevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QChildEvent
+-----------
+
+.. class:: QChildEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qchildevent.html>`_
diff --git a/doc/sphinx/api/qclipboard.rst b/doc/sphinx/api/qclipboard.rst
new file mode 100644
index 0000000..3a3b439
--- /dev/null
+++ b/doc/sphinx/api/qclipboard.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QClipboard
+----------
+
+.. class:: QClipboard
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qclipboard.html>`_
diff --git a/doc/sphinx/api/qcloseevent.rst b/doc/sphinx/api/qcloseevent.rst
new file mode 100644
index 0000000..ad7c5e1
--- /dev/null
+++ b/doc/sphinx/api/qcloseevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QCloseEvent
+-----------
+
+.. class:: QCloseEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcloseevent.html>`_
diff --git a/doc/sphinx/api/qcollator.rst b/doc/sphinx/api/qcollator.rst
new file mode 100644
index 0000000..921b99c
--- /dev/null
+++ b/doc/sphinx/api/qcollator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QCollator
+---------
+
+.. class:: QCollator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcollator.html>`_
diff --git a/doc/sphinx/api/qcollatorsortkey.rst b/doc/sphinx/api/qcollatorsortkey.rst
new file mode 100644
index 0000000..574fcaf
--- /dev/null
+++ b/doc/sphinx/api/qcollatorsortkey.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QCollatorSortKey
+----------------
+
+.. class:: QCollatorSortKey
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcollatorsortkey.html>`_
diff --git a/doc/sphinx/api/qcolor.rst b/doc/sphinx/api/qcolor.rst
new file mode 100644
index 0000000..5accc2d
--- /dev/null
+++ b/doc/sphinx/api/qcolor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QColor
+------
+
+.. class:: QColor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcolor.html>`_
diff --git a/doc/sphinx/api/qcolordialog.rst b/doc/sphinx/api/qcolordialog.rst
new file mode 100644
index 0000000..5e5313b
--- /dev/null
+++ b/doc/sphinx/api/qcolordialog.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QColorDialog
+------------
+
+.. class:: QColorDialog
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcolordialog.html>`_
diff --git a/doc/sphinx/api/qcolumnview.rst b/doc/sphinx/api/qcolumnview.rst
new file mode 100644
index 0000000..820b5e2
--- /dev/null
+++ b/doc/sphinx/api/qcolumnview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QColumnView
+-----------
+
+.. class:: QColumnView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcolumnview.html>`_
diff --git a/doc/sphinx/api/qcombobox.rst b/doc/sphinx/api/qcombobox.rst
new file mode 100644
index 0000000..aa12b39
--- /dev/null
+++ b/doc/sphinx/api/qcombobox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QComboBox
+---------
+
+.. class:: QComboBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcombobox.html>`_
diff --git a/doc/sphinx/api/qcommandlineoption.rst b/doc/sphinx/api/qcommandlineoption.rst
new file mode 100644
index 0000000..f0c037c
--- /dev/null
+++ b/doc/sphinx/api/qcommandlineoption.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QCommandLineOption
+------------------
+
+.. class:: QCommandLineOption
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcommandlineoption.html>`_
diff --git a/doc/sphinx/api/qcommandlineparser.rst b/doc/sphinx/api/qcommandlineparser.rst
new file mode 100644
index 0000000..c189c15
--- /dev/null
+++ b/doc/sphinx/api/qcommandlineparser.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QCommandLineParser
+------------------
+
+.. class:: QCommandLineParser
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcommandlineparser.html>`_
diff --git a/doc/sphinx/api/qcommandlinkbutton.rst b/doc/sphinx/api/qcommandlinkbutton.rst
new file mode 100644
index 0000000..0206ebc
--- /dev/null
+++ b/doc/sphinx/api/qcommandlinkbutton.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QCommandLinkButton
+------------------
+
+.. class:: QCommandLinkButton
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcommandlinkbutton.html>`_
diff --git a/doc/sphinx/api/qcommonstyle.rst b/doc/sphinx/api/qcommonstyle.rst
new file mode 100644
index 0000000..d79c2a3
--- /dev/null
+++ b/doc/sphinx/api/qcommonstyle.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QCommonStyle
+------------
+
+.. class:: QCommonStyle
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcommonstyle.html>`_
diff --git a/doc/sphinx/api/qcompass.rst b/doc/sphinx/api/qcompass.rst
new file mode 100644
index 0000000..70dd59e
--- /dev/null
+++ b/doc/sphinx/api/qcompass.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QCompass
+--------
+
+.. class:: QCompass
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcompass.html>`_
diff --git a/doc/sphinx/api/qcompassfilter.rst b/doc/sphinx/api/qcompassfilter.rst
new file mode 100644
index 0000000..5eb6437
--- /dev/null
+++ b/doc/sphinx/api/qcompassfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QCompassFilter
+--------------
+
+.. class:: QCompassFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcompassfilter.html>`_
diff --git a/doc/sphinx/api/qcompassreading.rst b/doc/sphinx/api/qcompassreading.rst
new file mode 100644
index 0000000..ba63318
--- /dev/null
+++ b/doc/sphinx/api/qcompassreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QCompassReading
+---------------
+
+.. class:: QCompassReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcompassreading.html>`_
diff --git a/doc/sphinx/api/qcompleter.rst b/doc/sphinx/api/qcompleter.rst
new file mode 100644
index 0000000..9b3d12c
--- /dev/null
+++ b/doc/sphinx/api/qcompleter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QCompleter
+----------
+
+.. class:: QCompleter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcompleter.html>`_
diff --git a/doc/sphinx/api/qconicalgradient.rst b/doc/sphinx/api/qconicalgradient.rst
new file mode 100644
index 0000000..7315e2c
--- /dev/null
+++ b/doc/sphinx/api/qconicalgradient.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QConicalGradient
+----------------
+
+.. class:: QConicalGradient
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qconicalgradient.html>`_
diff --git a/doc/sphinx/api/qcontextmenuevent.rst b/doc/sphinx/api/qcontextmenuevent.rst
new file mode 100644
index 0000000..520a2ea
--- /dev/null
+++ b/doc/sphinx/api/qcontextmenuevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QContextMenuEvent
+-----------------
+
+.. class:: QContextMenuEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcontextmenuevent.html>`_
diff --git a/doc/sphinx/api/qcoreapplication.rst b/doc/sphinx/api/qcoreapplication.rst
new file mode 100644
index 0000000..ce29ed8
--- /dev/null
+++ b/doc/sphinx/api/qcoreapplication.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QCoreApplication
+----------------
+
+.. class:: QCoreApplication
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcoreapplication.html>`_
diff --git a/doc/sphinx/api/qcryptographichash.rst b/doc/sphinx/api/qcryptographichash.rst
new file mode 100644
index 0000000..c42da48
--- /dev/null
+++ b/doc/sphinx/api/qcryptographichash.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QCryptographicHash
+------------------
+
+.. class:: QCryptographicHash
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcryptographichash.html>`_
diff --git a/doc/sphinx/api/qcursor.rst b/doc/sphinx/api/qcursor.rst
new file mode 100644
index 0000000..3ae4ac2
--- /dev/null
+++ b/doc/sphinx/api/qcursor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QCursor
+-------
+
+.. class:: QCursor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qcursor.html>`_
diff --git a/doc/sphinx/api/qdatastream.rst b/doc/sphinx/api/qdatastream.rst
new file mode 100644
index 0000000..c344cea
--- /dev/null
+++ b/doc/sphinx/api/qdatastream.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QDataStream
+-----------
+
+.. class:: QDataStream
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdatastream.html>`_
diff --git a/doc/sphinx/api/qdatawidgetmapper.rst b/doc/sphinx/api/qdatawidgetmapper.rst
new file mode 100644
index 0000000..5f13d3f
--- /dev/null
+++ b/doc/sphinx/api/qdatawidgetmapper.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QDataWidgetMapper
+-----------------
+
+.. class:: QDataWidgetMapper
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdatawidgetmapper.html>`_
diff --git a/doc/sphinx/api/qdate.rst b/doc/sphinx/api/qdate.rst
new file mode 100644
index 0000000..a408377
--- /dev/null
+++ b/doc/sphinx/api/qdate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QDate
+-----
+
+.. class:: QDate
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdate.html>`_
diff --git a/doc/sphinx/api/qdateedit.rst b/doc/sphinx/api/qdateedit.rst
new file mode 100644
index 0000000..29e5520
--- /dev/null
+++ b/doc/sphinx/api/qdateedit.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QDateEdit
+---------
+
+.. class:: QDateEdit
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdateedit.html>`_
diff --git a/doc/sphinx/api/qdatetime.rst b/doc/sphinx/api/qdatetime.rst
new file mode 100644
index 0000000..a66d693
--- /dev/null
+++ b/doc/sphinx/api/qdatetime.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QDateTime
+---------
+
+.. class:: QDateTime
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdatetime.html>`_
diff --git a/doc/sphinx/api/qdatetimeedit.rst b/doc/sphinx/api/qdatetimeedit.rst
new file mode 100644
index 0000000..f53e5c7
--- /dev/null
+++ b/doc/sphinx/api/qdatetimeedit.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QDateTimeEdit
+-------------
+
+.. class:: QDateTimeEdit
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdatetimeedit.html>`_
diff --git a/doc/sphinx/api/qdbus.rst b/doc/sphinx/api/qdbus.rst
new file mode 100644
index 0000000..22a85f0
--- /dev/null
+++ b/doc/sphinx/api/qdbus.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBus
+-----
+
+.. class:: QDBus
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbus.html>`_
diff --git a/doc/sphinx/api/qdbusabstractadaptor.rst b/doc/sphinx/api/qdbusabstractadaptor.rst
new file mode 100644
index 0000000..b586a27
--- /dev/null
+++ b/doc/sphinx/api/qdbusabstractadaptor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusAbstractAdaptor
+--------------------
+
+.. class:: QDBusAbstractAdaptor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusabstractadaptor.html>`_
diff --git a/doc/sphinx/api/qdbusabstractinterface.rst b/doc/sphinx/api/qdbusabstractinterface.rst
new file mode 100644
index 0000000..55066f3
--- /dev/null
+++ b/doc/sphinx/api/qdbusabstractinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusAbstractInterface
+----------------------
+
+.. class:: QDBusAbstractInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusabstractinterface.html>`_
diff --git a/doc/sphinx/api/qdbusargument.rst b/doc/sphinx/api/qdbusargument.rst
new file mode 100644
index 0000000..b36a0de
--- /dev/null
+++ b/doc/sphinx/api/qdbusargument.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusArgument
+-------------
+
+.. class:: QDBusArgument
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusargument.html>`_
diff --git a/doc/sphinx/api/qdbusconnection.rst b/doc/sphinx/api/qdbusconnection.rst
new file mode 100644
index 0000000..eb51787
--- /dev/null
+++ b/doc/sphinx/api/qdbusconnection.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusConnection
+---------------
+
+.. class:: QDBusConnection
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusconnection.html>`_
diff --git a/doc/sphinx/api/qdbusconnectioninterface.rst b/doc/sphinx/api/qdbusconnectioninterface.rst
new file mode 100644
index 0000000..87b3723
--- /dev/null
+++ b/doc/sphinx/api/qdbusconnectioninterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusConnectionInterface
+------------------------
+
+.. class:: QDBusConnectionInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusconnectioninterface.html>`_
diff --git a/doc/sphinx/api/qdbuserror.rst b/doc/sphinx/api/qdbuserror.rst
new file mode 100644
index 0000000..9ce5995
--- /dev/null
+++ b/doc/sphinx/api/qdbuserror.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusError
+----------
+
+.. class:: QDBusError
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbuserror.html>`_
diff --git a/doc/sphinx/api/qdbusinterface.rst b/doc/sphinx/api/qdbusinterface.rst
new file mode 100644
index 0000000..6d2908c
--- /dev/null
+++ b/doc/sphinx/api/qdbusinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusInterface
+--------------
+
+.. class:: QDBusInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusinterface.html>`_
diff --git a/doc/sphinx/api/qdbusmessage.rst b/doc/sphinx/api/qdbusmessage.rst
new file mode 100644
index 0000000..2c64e5a
--- /dev/null
+++ b/doc/sphinx/api/qdbusmessage.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusMessage
+------------
+
+.. class:: QDBusMessage
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusmessage.html>`_
diff --git a/doc/sphinx/api/qdbusobjectpath.rst b/doc/sphinx/api/qdbusobjectpath.rst
new file mode 100644
index 0000000..22ad0cd
--- /dev/null
+++ b/doc/sphinx/api/qdbusobjectpath.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusObjectPath
+---------------
+
+.. class:: QDBusObjectPath
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusobjectpath.html>`_
diff --git a/doc/sphinx/api/qdbuspendingcall.rst b/doc/sphinx/api/qdbuspendingcall.rst
new file mode 100644
index 0000000..14f8645
--- /dev/null
+++ b/doc/sphinx/api/qdbuspendingcall.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusPendingCall
+----------------
+
+.. class:: QDBusPendingCall
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbuspendingcall.html>`_
diff --git a/doc/sphinx/api/qdbuspendingcallwatcher.rst b/doc/sphinx/api/qdbuspendingcallwatcher.rst
new file mode 100644
index 0000000..19cc228
--- /dev/null
+++ b/doc/sphinx/api/qdbuspendingcallwatcher.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusPendingCallWatcher
+-----------------------
+
+.. class:: QDBusPendingCallWatcher
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbuspendingcallwatcher.html>`_
diff --git a/doc/sphinx/api/qdbuspendingreply.rst b/doc/sphinx/api/qdbuspendingreply.rst
new file mode 100644
index 0000000..35dfb02
--- /dev/null
+++ b/doc/sphinx/api/qdbuspendingreply.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusPendingReply
+-----------------
+
+.. class:: QDBusPendingReply
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbuspendingreply.html>`_
diff --git a/doc/sphinx/api/qdbusreply.rst b/doc/sphinx/api/qdbusreply.rst
new file mode 100644
index 0000000..3882fa4
--- /dev/null
+++ b/doc/sphinx/api/qdbusreply.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusReply
+----------
+
+.. class:: QDBusReply
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusreply.html>`_
diff --git a/doc/sphinx/api/qdbusservicewatcher.rst b/doc/sphinx/api/qdbusservicewatcher.rst
new file mode 100644
index 0000000..0dd4757
--- /dev/null
+++ b/doc/sphinx/api/qdbusservicewatcher.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusServiceWatcher
+-------------------
+
+.. class:: QDBusServiceWatcher
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusservicewatcher.html>`_
diff --git a/doc/sphinx/api/qdbussignature.rst b/doc/sphinx/api/qdbussignature.rst
new file mode 100644
index 0000000..7568ce2
--- /dev/null
+++ b/doc/sphinx/api/qdbussignature.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusSignature
+--------------
+
+.. class:: QDBusSignature
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbussignature.html>`_
diff --git a/doc/sphinx/api/qdbusunixfiledescriptor.rst b/doc/sphinx/api/qdbusunixfiledescriptor.rst
new file mode 100644
index 0000000..cb83d3c
--- /dev/null
+++ b/doc/sphinx/api/qdbusunixfiledescriptor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusUnixFileDescriptor
+-----------------------
+
+.. class:: QDBusUnixFileDescriptor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusunixfiledescriptor.html>`_
diff --git a/doc/sphinx/api/qdbusvariant.rst b/doc/sphinx/api/qdbusvariant.rst
new file mode 100644
index 0000000..b6b7738
--- /dev/null
+++ b/doc/sphinx/api/qdbusvariant.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDBus
+
+QDBusVariant
+------------
+
+.. class:: QDBusVariant
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdbusvariant.html>`_
diff --git a/doc/sphinx/api/qdesigneractioneditorinterface.rst b/doc/sphinx/api/qdesigneractioneditorinterface.rst
new file mode 100644
index 0000000..07b1d1e
--- /dev/null
+++ b/doc/sphinx/api/qdesigneractioneditorinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerActionEditorInterface
+------------------------------
+
+.. class:: QDesignerActionEditorInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesigneractioneditorinterface.html>`_
diff --git a/doc/sphinx/api/qdesignercontainerextension.rst b/doc/sphinx/api/qdesignercontainerextension.rst
new file mode 100644
index 0000000..fc10bc1
--- /dev/null
+++ b/doc/sphinx/api/qdesignercontainerextension.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerContainerExtension
+---------------------------
+
+.. class:: QDesignerContainerExtension
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignercontainerextension.html>`_
diff --git a/doc/sphinx/api/qdesignercustomwidgetcollectioninterface.rst b/doc/sphinx/api/qdesignercustomwidgetcollectioninterface.rst
new file mode 100644
index 0000000..e0a5a44
--- /dev/null
+++ b/doc/sphinx/api/qdesignercustomwidgetcollectioninterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerCustomWidgetCollectionInterface
+----------------------------------------
+
+.. class:: QDesignerCustomWidgetCollectionInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignercustomwidgetcollectioninterface.html>`_
diff --git a/doc/sphinx/api/qdesignercustomwidgetinterface.rst b/doc/sphinx/api/qdesignercustomwidgetinterface.rst
new file mode 100644
index 0000000..9de6d6a
--- /dev/null
+++ b/doc/sphinx/api/qdesignercustomwidgetinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerCustomWidgetInterface
+------------------------------
+
+.. class:: QDesignerCustomWidgetInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignercustomwidgetinterface.html>`_
diff --git a/doc/sphinx/api/qdesignerformeditorinterface.rst b/doc/sphinx/api/qdesignerformeditorinterface.rst
new file mode 100644
index 0000000..c418c75
--- /dev/null
+++ b/doc/sphinx/api/qdesignerformeditorinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerFormEditorInterface
+----------------------------
+
+.. class:: QDesignerFormEditorInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignerformeditorinterface.html>`_
diff --git a/doc/sphinx/api/qdesignerformwindowcursorinterface.rst b/doc/sphinx/api/qdesignerformwindowcursorinterface.rst
new file mode 100644
index 0000000..440d1a4
--- /dev/null
+++ b/doc/sphinx/api/qdesignerformwindowcursorinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerFormWindowCursorInterface
+----------------------------------
+
+.. class:: QDesignerFormWindowCursorInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignerformwindowcursorinterface.html>`_
diff --git a/doc/sphinx/api/qdesignerformwindowinterface.rst b/doc/sphinx/api/qdesignerformwindowinterface.rst
new file mode 100644
index 0000000..073a049
--- /dev/null
+++ b/doc/sphinx/api/qdesignerformwindowinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerFormWindowInterface
+----------------------------
+
+.. class:: QDesignerFormWindowInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignerformwindowinterface.html>`_
diff --git a/doc/sphinx/api/qdesignerformwindowmanagerinterface.rst b/doc/sphinx/api/qdesignerformwindowmanagerinterface.rst
new file mode 100644
index 0000000..9ce52a5
--- /dev/null
+++ b/doc/sphinx/api/qdesignerformwindowmanagerinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerFormWindowManagerInterface
+-----------------------------------
+
+.. class:: QDesignerFormWindowManagerInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignerformwindowmanagerinterface.html>`_
diff --git a/doc/sphinx/api/qdesignermembersheetextension.rst b/doc/sphinx/api/qdesignermembersheetextension.rst
new file mode 100644
index 0000000..b7dab3a
--- /dev/null
+++ b/doc/sphinx/api/qdesignermembersheetextension.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerMemberSheetExtension
+-----------------------------
+
+.. class:: QDesignerMemberSheetExtension
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignermembersheetextension.html>`_
diff --git a/doc/sphinx/api/qdesignerobjectinspectorinterface.rst b/doc/sphinx/api/qdesignerobjectinspectorinterface.rst
new file mode 100644
index 0000000..c2788f0
--- /dev/null
+++ b/doc/sphinx/api/qdesignerobjectinspectorinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerObjectInspectorInterface
+---------------------------------
+
+.. class:: QDesignerObjectInspectorInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignerobjectinspectorinterface.html>`_
diff --git a/doc/sphinx/api/qdesignerpropertyeditorinterface.rst b/doc/sphinx/api/qdesignerpropertyeditorinterface.rst
new file mode 100644
index 0000000..a01df01
--- /dev/null
+++ b/doc/sphinx/api/qdesignerpropertyeditorinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerPropertyEditorInterface
+--------------------------------
+
+.. class:: QDesignerPropertyEditorInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignerpropertyeditorinterface.html>`_
diff --git a/doc/sphinx/api/qdesignerpropertysheetextension.rst b/doc/sphinx/api/qdesignerpropertysheetextension.rst
new file mode 100644
index 0000000..3531653
--- /dev/null
+++ b/doc/sphinx/api/qdesignerpropertysheetextension.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerPropertySheetExtension
+-------------------------------
+
+.. class:: QDesignerPropertySheetExtension
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignerpropertysheetextension.html>`_
diff --git a/doc/sphinx/api/qdesignertaskmenuextension.rst b/doc/sphinx/api/qdesignertaskmenuextension.rst
new file mode 100644
index 0000000..c5b3740
--- /dev/null
+++ b/doc/sphinx/api/qdesignertaskmenuextension.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerTaskMenuExtension
+--------------------------
+
+.. class:: QDesignerTaskMenuExtension
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignertaskmenuextension.html>`_
diff --git a/doc/sphinx/api/qdesignerwidgetboxinterface.rst b/doc/sphinx/api/qdesignerwidgetboxinterface.rst
new file mode 100644
index 0000000..ebe0165
--- /dev/null
+++ b/doc/sphinx/api/qdesignerwidgetboxinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QDesignerWidgetBoxInterface
+---------------------------
+
+.. class:: QDesignerWidgetBoxInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesignerwidgetboxinterface.html>`_
diff --git a/doc/sphinx/api/qdesktopservices.rst b/doc/sphinx/api/qdesktopservices.rst
new file mode 100644
index 0000000..4a7e121
--- /dev/null
+++ b/doc/sphinx/api/qdesktopservices.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QDesktopServices
+----------------
+
+.. class:: QDesktopServices
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesktopservices.html>`_
diff --git a/doc/sphinx/api/qdesktopwidget.rst b/doc/sphinx/api/qdesktopwidget.rst
new file mode 100644
index 0000000..c823dd5
--- /dev/null
+++ b/doc/sphinx/api/qdesktopwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QDesktopWidget
+--------------
+
+.. class:: QDesktopWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdesktopwidget.html>`_
diff --git a/doc/sphinx/api/qdial.rst b/doc/sphinx/api/qdial.rst
new file mode 100644
index 0000000..59e33cb
--- /dev/null
+++ b/doc/sphinx/api/qdial.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QDial
+-----
+
+.. class:: QDial
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdial.html>`_
diff --git a/doc/sphinx/api/qdialog.rst b/doc/sphinx/api/qdialog.rst
new file mode 100644
index 0000000..5787433
--- /dev/null
+++ b/doc/sphinx/api/qdialog.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QDialog
+-------
+
+.. class:: QDialog
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdialog.html>`_
diff --git a/doc/sphinx/api/qdialogbuttonbox.rst b/doc/sphinx/api/qdialogbuttonbox.rst
new file mode 100644
index 0000000..0bf2e23
--- /dev/null
+++ b/doc/sphinx/api/qdialogbuttonbox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QDialogButtonBox
+----------------
+
+.. class:: QDialogButtonBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdialogbuttonbox.html>`_
diff --git a/doc/sphinx/api/qdir.rst b/doc/sphinx/api/qdir.rst
new file mode 100644
index 0000000..918afe4
--- /dev/null
+++ b/doc/sphinx/api/qdir.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QDir
+----
+
+.. class:: QDir
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdir.html>`_
diff --git a/doc/sphinx/api/qdiriterator.rst b/doc/sphinx/api/qdiriterator.rst
new file mode 100644
index 0000000..87bd604
--- /dev/null
+++ b/doc/sphinx/api/qdiriterator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QDirIterator
+------------
+
+.. class:: QDirIterator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdiriterator.html>`_
diff --git a/doc/sphinx/api/qdirmodel.rst b/doc/sphinx/api/qdirmodel.rst
new file mode 100644
index 0000000..de1ecea
--- /dev/null
+++ b/doc/sphinx/api/qdirmodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QDirModel
+---------
+
+.. class:: QDirModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdirmodel.html>`_
diff --git a/doc/sphinx/api/qdnsdomainnamerecord.rst b/doc/sphinx/api/qdnsdomainnamerecord.rst
new file mode 100644
index 0000000..5584f8f
--- /dev/null
+++ b/doc/sphinx/api/qdnsdomainnamerecord.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QDnsDomainNameRecord
+--------------------
+
+.. class:: QDnsDomainNameRecord
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdnsdomainnamerecord.html>`_
diff --git a/doc/sphinx/api/qdnshostaddressrecord.rst b/doc/sphinx/api/qdnshostaddressrecord.rst
new file mode 100644
index 0000000..c5410ef
--- /dev/null
+++ b/doc/sphinx/api/qdnshostaddressrecord.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QDnsHostAddressRecord
+---------------------
+
+.. class:: QDnsHostAddressRecord
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdnshostaddressrecord.html>`_
diff --git a/doc/sphinx/api/qdnslookup.rst b/doc/sphinx/api/qdnslookup.rst
new file mode 100644
index 0000000..e126a30
--- /dev/null
+++ b/doc/sphinx/api/qdnslookup.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QDnsLookup
+----------
+
+.. class:: QDnsLookup
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdnslookup.html>`_
diff --git a/doc/sphinx/api/qdnsmailexchangerecord.rst b/doc/sphinx/api/qdnsmailexchangerecord.rst
new file mode 100644
index 0000000..28fc1ee
--- /dev/null
+++ b/doc/sphinx/api/qdnsmailexchangerecord.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QDnsMailExchangeRecord
+----------------------
+
+.. class:: QDnsMailExchangeRecord
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdnsmailexchangerecord.html>`_
diff --git a/doc/sphinx/api/qdnsservicerecord.rst b/doc/sphinx/api/qdnsservicerecord.rst
new file mode 100644
index 0000000..4689d6c
--- /dev/null
+++ b/doc/sphinx/api/qdnsservicerecord.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QDnsServiceRecord
+-----------------
+
+.. class:: QDnsServiceRecord
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdnsservicerecord.html>`_
diff --git a/doc/sphinx/api/qdnstextrecord.rst b/doc/sphinx/api/qdnstextrecord.rst
new file mode 100644
index 0000000..dbb2694
--- /dev/null
+++ b/doc/sphinx/api/qdnstextrecord.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QDnsTextRecord
+--------------
+
+.. class:: QDnsTextRecord
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdnstextrecord.html>`_
diff --git a/doc/sphinx/api/qdockwidget.rst b/doc/sphinx/api/qdockwidget.rst
new file mode 100644
index 0000000..386968d
--- /dev/null
+++ b/doc/sphinx/api/qdockwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QDockWidget
+-----------
+
+.. class:: QDockWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdockwidget.html>`_
diff --git a/doc/sphinx/api/qdoublespinbox.rst b/doc/sphinx/api/qdoublespinbox.rst
new file mode 100644
index 0000000..8d9942c
--- /dev/null
+++ b/doc/sphinx/api/qdoublespinbox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QDoubleSpinBox
+--------------
+
+.. class:: QDoubleSpinBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdoublespinbox.html>`_
diff --git a/doc/sphinx/api/qdoublevalidator.rst b/doc/sphinx/api/qdoublevalidator.rst
new file mode 100644
index 0000000..7df6be8
--- /dev/null
+++ b/doc/sphinx/api/qdoublevalidator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QDoubleValidator
+----------------
+
+.. class:: QDoubleValidator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdoublevalidator.html>`_
diff --git a/doc/sphinx/api/qdrag.rst b/doc/sphinx/api/qdrag.rst
new file mode 100644
index 0000000..48b709c
--- /dev/null
+++ b/doc/sphinx/api/qdrag.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QDrag
+-----
+
+.. class:: QDrag
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdrag.html>`_
diff --git a/doc/sphinx/api/qdragenterevent.rst b/doc/sphinx/api/qdragenterevent.rst
new file mode 100644
index 0000000..741069f
--- /dev/null
+++ b/doc/sphinx/api/qdragenterevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QDragEnterEvent
+---------------
+
+.. class:: QDragEnterEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdragenterevent.html>`_
diff --git a/doc/sphinx/api/qdragleaveevent.rst b/doc/sphinx/api/qdragleaveevent.rst
new file mode 100644
index 0000000..0e9ced0
--- /dev/null
+++ b/doc/sphinx/api/qdragleaveevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QDragLeaveEvent
+---------------
+
+.. class:: QDragLeaveEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdragleaveevent.html>`_
diff --git a/doc/sphinx/api/qdragmoveevent.rst b/doc/sphinx/api/qdragmoveevent.rst
new file mode 100644
index 0000000..d610401
--- /dev/null
+++ b/doc/sphinx/api/qdragmoveevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QDragMoveEvent
+--------------
+
+.. class:: QDragMoveEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdragmoveevent.html>`_
diff --git a/doc/sphinx/api/qdropevent.rst b/doc/sphinx/api/qdropevent.rst
new file mode 100644
index 0000000..eeef6a7
--- /dev/null
+++ b/doc/sphinx/api/qdropevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QDropEvent
+----------
+
+.. class:: QDropEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdropevent.html>`_
diff --git a/doc/sphinx/api/qdynamicpropertychangeevent.rst b/doc/sphinx/api/qdynamicpropertychangeevent.rst
new file mode 100644
index 0000000..46ed287
--- /dev/null
+++ b/doc/sphinx/api/qdynamicpropertychangeevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QDynamicPropertyChangeEvent
+---------------------------
+
+.. class:: QDynamicPropertyChangeEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qdynamicpropertychangeevent.html>`_
diff --git a/doc/sphinx/api/qeasingcurve.rst b/doc/sphinx/api/qeasingcurve.rst
new file mode 100644
index 0000000..bcbefa3
--- /dev/null
+++ b/doc/sphinx/api/qeasingcurve.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QEasingCurve
+------------
+
+.. class:: QEasingCurve
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qeasingcurve.html>`_
diff --git a/doc/sphinx/api/qelapsedtimer.rst b/doc/sphinx/api/qelapsedtimer.rst
new file mode 100644
index 0000000..97b99c4
--- /dev/null
+++ b/doc/sphinx/api/qelapsedtimer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QElapsedTimer
+-------------
+
+.. class:: QElapsedTimer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qelapsedtimer.html>`_
diff --git a/doc/sphinx/api/qenterevent.rst b/doc/sphinx/api/qenterevent.rst
new file mode 100644
index 0000000..59ca35a
--- /dev/null
+++ b/doc/sphinx/api/qenterevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QEnterEvent
+-----------
+
+.. class:: QEnterEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qenterevent.html>`_
diff --git a/doc/sphinx/api/qerrormessage.rst b/doc/sphinx/api/qerrormessage.rst
new file mode 100644
index 0000000..629dfc0
--- /dev/null
+++ b/doc/sphinx/api/qerrormessage.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QErrorMessage
+-------------
+
+.. class:: QErrorMessage
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qerrormessage.html>`_
diff --git a/doc/sphinx/api/qevent.rst b/doc/sphinx/api/qevent.rst
new file mode 100644
index 0000000..f26831f
--- /dev/null
+++ b/doc/sphinx/api/qevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QEvent
+------
+
+.. class:: QEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qevent.html>`_
diff --git a/doc/sphinx/api/qeventloop.rst b/doc/sphinx/api/qeventloop.rst
new file mode 100644
index 0000000..24ee4ac
--- /dev/null
+++ b/doc/sphinx/api/qeventloop.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QEventLoop
+----------
+
+.. class:: QEventLoop
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qeventloop.html>`_
diff --git a/doc/sphinx/api/qeventlooplocker.rst b/doc/sphinx/api/qeventlooplocker.rst
new file mode 100644
index 0000000..2292ce2
--- /dev/null
+++ b/doc/sphinx/api/qeventlooplocker.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QEventLoopLocker
+----------------
+
+.. class:: QEventLoopLocker
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qeventlooplocker.html>`_
diff --git a/doc/sphinx/api/qeventtransition.rst b/doc/sphinx/api/qeventtransition.rst
new file mode 100644
index 0000000..6851259
--- /dev/null
+++ b/doc/sphinx/api/qeventtransition.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QEventTransition
+----------------
+
+.. class:: QEventTransition
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qeventtransition.html>`_
diff --git a/doc/sphinx/api/qexposeevent.rst b/doc/sphinx/api/qexposeevent.rst
new file mode 100644
index 0000000..e0672b2
--- /dev/null
+++ b/doc/sphinx/api/qexposeevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QExposeEvent
+------------
+
+.. class:: QExposeEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qexposeevent.html>`_
diff --git a/doc/sphinx/api/qextensionfactory.rst b/doc/sphinx/api/qextensionfactory.rst
new file mode 100644
index 0000000..6eb0727
--- /dev/null
+++ b/doc/sphinx/api/qextensionfactory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QExtensionFactory
+-----------------
+
+.. class:: QExtensionFactory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qextensionfactory.html>`_
diff --git a/doc/sphinx/api/qextensionmanager.rst b/doc/sphinx/api/qextensionmanager.rst
new file mode 100644
index 0000000..7e98557
--- /dev/null
+++ b/doc/sphinx/api/qextensionmanager.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QExtensionManager
+-----------------
+
+.. class:: QExtensionManager
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qextensionmanager.html>`_
diff --git a/doc/sphinx/api/qfile.rst b/doc/sphinx/api/qfile.rst
new file mode 100644
index 0000000..17c18ec
--- /dev/null
+++ b/doc/sphinx/api/qfile.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QFile
+-----
+
+.. class:: QFile
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfile.html>`_
diff --git a/doc/sphinx/api/qfiledevice.rst b/doc/sphinx/api/qfiledevice.rst
new file mode 100644
index 0000000..694bb16
--- /dev/null
+++ b/doc/sphinx/api/qfiledevice.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QFileDevice
+-----------
+
+.. class:: QFileDevice
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfiledevice.html>`_
diff --git a/doc/sphinx/api/qfiledialog.rst b/doc/sphinx/api/qfiledialog.rst
new file mode 100644
index 0000000..bbd365f
--- /dev/null
+++ b/doc/sphinx/api/qfiledialog.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QFileDialog
+-----------
+
+.. class:: QFileDialog
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfiledialog.html>`_
diff --git a/doc/sphinx/api/qfileiconprovider.rst b/doc/sphinx/api/qfileiconprovider.rst
new file mode 100644
index 0000000..eeb92db
--- /dev/null
+++ b/doc/sphinx/api/qfileiconprovider.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QFileIconProvider
+-----------------
+
+.. class:: QFileIconProvider
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfileiconprovider.html>`_
diff --git a/doc/sphinx/api/qfileinfo.rst b/doc/sphinx/api/qfileinfo.rst
new file mode 100644
index 0000000..c771d54
--- /dev/null
+++ b/doc/sphinx/api/qfileinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QFileInfo
+---------
+
+.. class:: QFileInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfileinfo.html>`_
diff --git a/doc/sphinx/api/qfileopenevent.rst b/doc/sphinx/api/qfileopenevent.rst
new file mode 100644
index 0000000..f789421
--- /dev/null
+++ b/doc/sphinx/api/qfileopenevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QFileOpenEvent
+--------------
+
+.. class:: QFileOpenEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfileopenevent.html>`_
diff --git a/doc/sphinx/api/qfileselector.rst b/doc/sphinx/api/qfileselector.rst
new file mode 100644
index 0000000..f108ae4
--- /dev/null
+++ b/doc/sphinx/api/qfileselector.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QFileSelector
+-------------
+
+.. class:: QFileSelector
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfileselector.html>`_
diff --git a/doc/sphinx/api/qfilesystemmodel.rst b/doc/sphinx/api/qfilesystemmodel.rst
new file mode 100644
index 0000000..ed05ce4
--- /dev/null
+++ b/doc/sphinx/api/qfilesystemmodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QFileSystemModel
+----------------
+
+.. class:: QFileSystemModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfilesystemmodel.html>`_
diff --git a/doc/sphinx/api/qfilesystemwatcher.rst b/doc/sphinx/api/qfilesystemwatcher.rst
new file mode 100644
index 0000000..eeabbb3
--- /dev/null
+++ b/doc/sphinx/api/qfilesystemwatcher.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QFileSystemWatcher
+------------------
+
+.. class:: QFileSystemWatcher
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfilesystemwatcher.html>`_
diff --git a/doc/sphinx/api/qfinalstate.rst b/doc/sphinx/api/qfinalstate.rst
new file mode 100644
index 0000000..71ea666
--- /dev/null
+++ b/doc/sphinx/api/qfinalstate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QFinalState
+-----------
+
+.. class:: QFinalState
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfinalstate.html>`_
diff --git a/doc/sphinx/api/qfocusevent.rst b/doc/sphinx/api/qfocusevent.rst
new file mode 100644
index 0000000..609baed
--- /dev/null
+++ b/doc/sphinx/api/qfocusevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QFocusEvent
+-----------
+
+.. class:: QFocusEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfocusevent.html>`_
diff --git a/doc/sphinx/api/qfocusframe.rst b/doc/sphinx/api/qfocusframe.rst
new file mode 100644
index 0000000..184e646
--- /dev/null
+++ b/doc/sphinx/api/qfocusframe.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QFocusFrame
+-----------
+
+.. class:: QFocusFrame
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfocusframe.html>`_
diff --git a/doc/sphinx/api/qfont.rst b/doc/sphinx/api/qfont.rst
new file mode 100644
index 0000000..fa5bdbc
--- /dev/null
+++ b/doc/sphinx/api/qfont.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QFont
+-----
+
+.. class:: QFont
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfont.html>`_
diff --git a/doc/sphinx/api/qfontcombobox.rst b/doc/sphinx/api/qfontcombobox.rst
new file mode 100644
index 0000000..06a79fd
--- /dev/null
+++ b/doc/sphinx/api/qfontcombobox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QFontComboBox
+-------------
+
+.. class:: QFontComboBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfontcombobox.html>`_
diff --git a/doc/sphinx/api/qfontdatabase.rst b/doc/sphinx/api/qfontdatabase.rst
new file mode 100644
index 0000000..939695d
--- /dev/null
+++ b/doc/sphinx/api/qfontdatabase.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QFontDatabase
+-------------
+
+.. class:: QFontDatabase
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfontdatabase.html>`_
diff --git a/doc/sphinx/api/qfontdialog.rst b/doc/sphinx/api/qfontdialog.rst
new file mode 100644
index 0000000..d8ba94c
--- /dev/null
+++ b/doc/sphinx/api/qfontdialog.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QFontDialog
+-----------
+
+.. class:: QFontDialog
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfontdialog.html>`_
diff --git a/doc/sphinx/api/qfontinfo.rst b/doc/sphinx/api/qfontinfo.rst
new file mode 100644
index 0000000..e3fbf90
--- /dev/null
+++ b/doc/sphinx/api/qfontinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QFontInfo
+---------
+
+.. class:: QFontInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfontinfo.html>`_
diff --git a/doc/sphinx/api/qfontmetrics.rst b/doc/sphinx/api/qfontmetrics.rst
new file mode 100644
index 0000000..a1b8ce3
--- /dev/null
+++ b/doc/sphinx/api/qfontmetrics.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QFontMetrics
+------------
+
+.. class:: QFontMetrics
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfontmetrics.html>`_
diff --git a/doc/sphinx/api/qfontmetricsf.rst b/doc/sphinx/api/qfontmetricsf.rst
new file mode 100644
index 0000000..5cccdbd
--- /dev/null
+++ b/doc/sphinx/api/qfontmetricsf.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QFontMetricsF
+-------------
+
+.. class:: QFontMetricsF
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qfontmetricsf.html>`_
diff --git a/doc/sphinx/api/qformbuilder.rst b/doc/sphinx/api/qformbuilder.rst
new file mode 100644
index 0000000..523ed79
--- /dev/null
+++ b/doc/sphinx/api/qformbuilder.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtDesigner
+
+QFormBuilder
+------------
+
+.. class:: QFormBuilder
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qformbuilder.html>`_
diff --git a/doc/sphinx/api/qformlayout.rst b/doc/sphinx/api/qformlayout.rst
new file mode 100644
index 0000000..0eea2e4
--- /dev/null
+++ b/doc/sphinx/api/qformlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QFormLayout
+-----------
+
+.. class:: QFormLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qformlayout.html>`_
diff --git a/doc/sphinx/api/qframe.rst b/doc/sphinx/api/qframe.rst
new file mode 100644
index 0000000..8b05d72
--- /dev/null
+++ b/doc/sphinx/api/qframe.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QFrame
+------
+
+.. class:: QFrame
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qframe.html>`_
diff --git a/doc/sphinx/api/qgenericargument.rst b/doc/sphinx/api/qgenericargument.rst
new file mode 100644
index 0000000..485fb7d
--- /dev/null
+++ b/doc/sphinx/api/qgenericargument.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QGenericArgument
+----------------
+
+.. class:: QGenericArgument
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgenericargument.html>`_
diff --git a/doc/sphinx/api/qgenericreturnargument.rst b/doc/sphinx/api/qgenericreturnargument.rst
new file mode 100644
index 0000000..2047455
--- /dev/null
+++ b/doc/sphinx/api/qgenericreturnargument.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QGenericReturnArgument
+----------------------
+
+.. class:: QGenericReturnArgument
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgenericreturnargument.html>`_
diff --git a/doc/sphinx/api/qgeoaddress.rst b/doc/sphinx/api/qgeoaddress.rst
new file mode 100644
index 0000000..605a603
--- /dev/null
+++ b/doc/sphinx/api/qgeoaddress.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoAddress
+-----------
+
+.. class:: QGeoAddress
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeoaddress.html>`_
diff --git a/doc/sphinx/api/qgeoareamonitorinfo.rst b/doc/sphinx/api/qgeoareamonitorinfo.rst
new file mode 100644
index 0000000..d02b7ea
--- /dev/null
+++ b/doc/sphinx/api/qgeoareamonitorinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoAreaMonitorInfo
+-------------------
+
+.. class:: QGeoAreaMonitorInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeoareamonitorinfo.html>`_
diff --git a/doc/sphinx/api/qgeoareamonitorsource.rst b/doc/sphinx/api/qgeoareamonitorsource.rst
new file mode 100644
index 0000000..f4c3371
--- /dev/null
+++ b/doc/sphinx/api/qgeoareamonitorsource.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoAreaMonitorSource
+---------------------
+
+.. class:: QGeoAreaMonitorSource
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeoareamonitorsource.html>`_
diff --git a/doc/sphinx/api/qgeocircle.rst b/doc/sphinx/api/qgeocircle.rst
new file mode 100644
index 0000000..4f9262b
--- /dev/null
+++ b/doc/sphinx/api/qgeocircle.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoCircle
+----------
+
+.. class:: QGeoCircle
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeocircle.html>`_
diff --git a/doc/sphinx/api/qgeocoordinate.rst b/doc/sphinx/api/qgeocoordinate.rst
new file mode 100644
index 0000000..bcb60a2
--- /dev/null
+++ b/doc/sphinx/api/qgeocoordinate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoCoordinate
+--------------
+
+.. class:: QGeoCoordinate
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeocoordinate.html>`_
diff --git a/doc/sphinx/api/qgeolocation.rst b/doc/sphinx/api/qgeolocation.rst
new file mode 100644
index 0000000..b8b8298
--- /dev/null
+++ b/doc/sphinx/api/qgeolocation.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoLocation
+------------
+
+.. class:: QGeoLocation
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeolocation.html>`_
diff --git a/doc/sphinx/api/qgeopositioninfo.rst b/doc/sphinx/api/qgeopositioninfo.rst
new file mode 100644
index 0000000..e918073
--- /dev/null
+++ b/doc/sphinx/api/qgeopositioninfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoPositionInfo
+----------------
+
+.. class:: QGeoPositionInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeopositioninfo.html>`_
diff --git a/doc/sphinx/api/qgeopositioninfosource.rst b/doc/sphinx/api/qgeopositioninfosource.rst
new file mode 100644
index 0000000..e5467c5
--- /dev/null
+++ b/doc/sphinx/api/qgeopositioninfosource.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoPositionInfoSource
+----------------------
+
+.. class:: QGeoPositionInfoSource
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeopositioninfosource.html>`_
diff --git a/doc/sphinx/api/qgeorectangle.rst b/doc/sphinx/api/qgeorectangle.rst
new file mode 100644
index 0000000..c0d46cc
--- /dev/null
+++ b/doc/sphinx/api/qgeorectangle.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoRectangle
+-------------
+
+.. class:: QGeoRectangle
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeorectangle.html>`_
diff --git a/doc/sphinx/api/qgeosatelliteinfo.rst b/doc/sphinx/api/qgeosatelliteinfo.rst
new file mode 100644
index 0000000..9232dc7
--- /dev/null
+++ b/doc/sphinx/api/qgeosatelliteinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoSatelliteInfo
+-----------------
+
+.. class:: QGeoSatelliteInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeosatelliteinfo.html>`_
diff --git a/doc/sphinx/api/qgeosatelliteinfosource.rst b/doc/sphinx/api/qgeosatelliteinfosource.rst
new file mode 100644
index 0000000..361c8d3
--- /dev/null
+++ b/doc/sphinx/api/qgeosatelliteinfosource.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoSatelliteInfoSource
+-----------------------
+
+.. class:: QGeoSatelliteInfoSource
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeosatelliteinfosource.html>`_
diff --git a/doc/sphinx/api/qgeoshape.rst b/doc/sphinx/api/qgeoshape.rst
new file mode 100644
index 0000000..b69653e
--- /dev/null
+++ b/doc/sphinx/api/qgeoshape.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QGeoShape
+---------
+
+.. class:: QGeoShape
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgeoshape.html>`_
diff --git a/doc/sphinx/api/qgesture.rst b/doc/sphinx/api/qgesture.rst
new file mode 100644
index 0000000..d631c8a
--- /dev/null
+++ b/doc/sphinx/api/qgesture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGesture
+--------
+
+.. class:: QGesture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgesture.html>`_
diff --git a/doc/sphinx/api/qgestureevent.rst b/doc/sphinx/api/qgestureevent.rst
new file mode 100644
index 0000000..300473b
--- /dev/null
+++ b/doc/sphinx/api/qgestureevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGestureEvent
+-------------
+
+.. class:: QGestureEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgestureevent.html>`_
diff --git a/doc/sphinx/api/qgesturerecognizer.rst b/doc/sphinx/api/qgesturerecognizer.rst
new file mode 100644
index 0000000..916ff05
--- /dev/null
+++ b/doc/sphinx/api/qgesturerecognizer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGestureRecognizer
+------------------
+
+.. class:: QGestureRecognizer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgesturerecognizer.html>`_
diff --git a/doc/sphinx/api/qgl.rst b/doc/sphinx/api/qgl.rst
new file mode 100644
index 0000000..47aec0d
--- /dev/null
+++ b/doc/sphinx/api/qgl.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtOpenGL
+
+QGL
+---
+
+.. class:: QGL
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgl.html>`_
diff --git a/doc/sphinx/api/qglcontext.rst b/doc/sphinx/api/qglcontext.rst
new file mode 100644
index 0000000..ceb532a
--- /dev/null
+++ b/doc/sphinx/api/qglcontext.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtOpenGL
+
+QGLContext
+----------
+
+.. class:: QGLContext
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qglcontext.html>`_
diff --git a/doc/sphinx/api/qglformat.rst b/doc/sphinx/api/qglformat.rst
new file mode 100644
index 0000000..6f6cc3a
--- /dev/null
+++ b/doc/sphinx/api/qglformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtOpenGL
+
+QGLFormat
+---------
+
+.. class:: QGLFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qglformat.html>`_
diff --git a/doc/sphinx/api/qglwidget.rst b/doc/sphinx/api/qglwidget.rst
new file mode 100644
index 0000000..616706e
--- /dev/null
+++ b/doc/sphinx/api/qglwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtOpenGL
+
+QGLWidget
+---------
+
+.. class:: QGLWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qglwidget.html>`_
diff --git a/doc/sphinx/api/qglyphrun.rst b/doc/sphinx/api/qglyphrun.rst
new file mode 100644
index 0000000..ee3362f
--- /dev/null
+++ b/doc/sphinx/api/qglyphrun.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QGlyphRun
+---------
+
+.. class:: QGlyphRun
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qglyphrun.html>`_
diff --git a/doc/sphinx/api/qgradient.rst b/doc/sphinx/api/qgradient.rst
new file mode 100644
index 0000000..45f5379
--- /dev/null
+++ b/doc/sphinx/api/qgradient.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QGradient
+---------
+
+.. class:: QGradient
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgradient.html>`_
diff --git a/doc/sphinx/api/qgraphicsanchor.rst b/doc/sphinx/api/qgraphicsanchor.rst
new file mode 100644
index 0000000..94604f2
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsanchor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsAnchor
+---------------
+
+.. class:: QGraphicsAnchor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsanchor.html>`_
diff --git a/doc/sphinx/api/qgraphicsanchorlayout.rst b/doc/sphinx/api/qgraphicsanchorlayout.rst
new file mode 100644
index 0000000..f3a18aa
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsanchorlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsAnchorLayout
+---------------------
+
+.. class:: QGraphicsAnchorLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsanchorlayout.html>`_
diff --git a/doc/sphinx/api/qgraphicsblureffect.rst b/doc/sphinx/api/qgraphicsblureffect.rst
new file mode 100644
index 0000000..10264a8
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsblureffect.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsBlurEffect
+-------------------
+
+.. class:: QGraphicsBlurEffect
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsblureffect.html>`_
diff --git a/doc/sphinx/api/qgraphicscolorizeeffect.rst b/doc/sphinx/api/qgraphicscolorizeeffect.rst
new file mode 100644
index 0000000..665e31d
--- /dev/null
+++ b/doc/sphinx/api/qgraphicscolorizeeffect.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsColorizeEffect
+-----------------------
+
+.. class:: QGraphicsColorizeEffect
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicscolorizeeffect.html>`_
diff --git a/doc/sphinx/api/qgraphicsdropshadoweffect.rst b/doc/sphinx/api/qgraphicsdropshadoweffect.rst
new file mode 100644
index 0000000..fbe3b45
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsdropshadoweffect.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsDropShadowEffect
+-------------------------
+
+.. class:: QGraphicsDropShadowEffect
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsdropshadoweffect.html>`_
diff --git a/doc/sphinx/api/qgraphicseffect.rst b/doc/sphinx/api/qgraphicseffect.rst
new file mode 100644
index 0000000..b17245f
--- /dev/null
+++ b/doc/sphinx/api/qgraphicseffect.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsEffect
+---------------
+
+.. class:: QGraphicsEffect
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicseffect.html>`_
diff --git a/doc/sphinx/api/qgraphicsellipseitem.rst b/doc/sphinx/api/qgraphicsellipseitem.rst
new file mode 100644
index 0000000..e2b2db6
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsellipseitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsEllipseItem
+--------------------
+
+.. class:: QGraphicsEllipseItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsellipseitem.html>`_
diff --git a/doc/sphinx/api/qgraphicsgridlayout.rst b/doc/sphinx/api/qgraphicsgridlayout.rst
new file mode 100644
index 0000000..f2852f0
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsgridlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsGridLayout
+-------------------
+
+.. class:: QGraphicsGridLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsgridlayout.html>`_
diff --git a/doc/sphinx/api/qgraphicsitem.rst b/doc/sphinx/api/qgraphicsitem.rst
new file mode 100644
index 0000000..5a4c13f
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsItem
+-------------
+
+.. class:: QGraphicsItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsitem.html>`_
diff --git a/doc/sphinx/api/qgraphicsitemgroup.rst b/doc/sphinx/api/qgraphicsitemgroup.rst
new file mode 100644
index 0000000..8a2bceb
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsitemgroup.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsItemGroup
+------------------
+
+.. class:: QGraphicsItemGroup
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsitemgroup.html>`_
diff --git a/doc/sphinx/api/qgraphicslayout.rst b/doc/sphinx/api/qgraphicslayout.rst
new file mode 100644
index 0000000..837ed8f
--- /dev/null
+++ b/doc/sphinx/api/qgraphicslayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsLayout
+---------------
+
+.. class:: QGraphicsLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicslayout.html>`_
diff --git a/doc/sphinx/api/qgraphicslayoutitem.rst b/doc/sphinx/api/qgraphicslayoutitem.rst
new file mode 100644
index 0000000..30f0a1d
--- /dev/null
+++ b/doc/sphinx/api/qgraphicslayoutitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsLayoutItem
+-------------------
+
+.. class:: QGraphicsLayoutItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicslayoutitem.html>`_
diff --git a/doc/sphinx/api/qgraphicslinearlayout.rst b/doc/sphinx/api/qgraphicslinearlayout.rst
new file mode 100644
index 0000000..7c243f5
--- /dev/null
+++ b/doc/sphinx/api/qgraphicslinearlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsLinearLayout
+---------------------
+
+.. class:: QGraphicsLinearLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicslinearlayout.html>`_
diff --git a/doc/sphinx/api/qgraphicslineitem.rst b/doc/sphinx/api/qgraphicslineitem.rst
new file mode 100644
index 0000000..c3b196a
--- /dev/null
+++ b/doc/sphinx/api/qgraphicslineitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsLineItem
+-----------------
+
+.. class:: QGraphicsLineItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicslineitem.html>`_
diff --git a/doc/sphinx/api/qgraphicsobject.rst b/doc/sphinx/api/qgraphicsobject.rst
new file mode 100644
index 0000000..cfedad4
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsobject.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsObject
+---------------
+
+.. class:: QGraphicsObject
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsobject.html>`_
diff --git a/doc/sphinx/api/qgraphicsopacityeffect.rst b/doc/sphinx/api/qgraphicsopacityeffect.rst
new file mode 100644
index 0000000..f411a82
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsopacityeffect.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsOpacityEffect
+----------------------
+
+.. class:: QGraphicsOpacityEffect
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsopacityeffect.html>`_
diff --git a/doc/sphinx/api/qgraphicspathitem.rst b/doc/sphinx/api/qgraphicspathitem.rst
new file mode 100644
index 0000000..2760fbc
--- /dev/null
+++ b/doc/sphinx/api/qgraphicspathitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsPathItem
+-----------------
+
+.. class:: QGraphicsPathItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicspathitem.html>`_
diff --git a/doc/sphinx/api/qgraphicspixmapitem.rst b/doc/sphinx/api/qgraphicspixmapitem.rst
new file mode 100644
index 0000000..63ab3fe
--- /dev/null
+++ b/doc/sphinx/api/qgraphicspixmapitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsPixmapItem
+-------------------
+
+.. class:: QGraphicsPixmapItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicspixmapitem.html>`_
diff --git a/doc/sphinx/api/qgraphicspolygonitem.rst b/doc/sphinx/api/qgraphicspolygonitem.rst
new file mode 100644
index 0000000..3ba2b77
--- /dev/null
+++ b/doc/sphinx/api/qgraphicspolygonitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsPolygonItem
+--------------------
+
+.. class:: QGraphicsPolygonItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicspolygonitem.html>`_
diff --git a/doc/sphinx/api/qgraphicsproxywidget.rst b/doc/sphinx/api/qgraphicsproxywidget.rst
new file mode 100644
index 0000000..a7bca5a
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsproxywidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsProxyWidget
+--------------------
+
+.. class:: QGraphicsProxyWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsproxywidget.html>`_
diff --git a/doc/sphinx/api/qgraphicsrectitem.rst b/doc/sphinx/api/qgraphicsrectitem.rst
new file mode 100644
index 0000000..1dd2133
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsrectitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsRectItem
+-----------------
+
+.. class:: QGraphicsRectItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsrectitem.html>`_
diff --git a/doc/sphinx/api/qgraphicsrotation.rst b/doc/sphinx/api/qgraphicsrotation.rst
new file mode 100644
index 0000000..21d1a08
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsrotation.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsRotation
+-----------------
+
+.. class:: QGraphicsRotation
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsrotation.html>`_
diff --git a/doc/sphinx/api/qgraphicsscale.rst b/doc/sphinx/api/qgraphicsscale.rst
new file mode 100644
index 0000000..7eae829
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsscale.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsScale
+--------------
+
+.. class:: QGraphicsScale
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsscale.html>`_
diff --git a/doc/sphinx/api/qgraphicsscene.rst b/doc/sphinx/api/qgraphicsscene.rst
new file mode 100644
index 0000000..868b9a4
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsscene.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsScene
+--------------
+
+.. class:: QGraphicsScene
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsscene.html>`_
diff --git a/doc/sphinx/api/qgraphicsscenecontextmenuevent.rst b/doc/sphinx/api/qgraphicsscenecontextmenuevent.rst
new file mode 100644
index 0000000..5b07f5c
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsscenecontextmenuevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsSceneContextMenuEvent
+------------------------------
+
+.. class:: QGraphicsSceneContextMenuEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsscenecontextmenuevent.html>`_
diff --git a/doc/sphinx/api/qgraphicsscenedragdropevent.rst b/doc/sphinx/api/qgraphicsscenedragdropevent.rst
new file mode 100644
index 0000000..fa2065c
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsscenedragdropevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsSceneDragDropEvent
+---------------------------
+
+.. class:: QGraphicsSceneDragDropEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsscenedragdropevent.html>`_
diff --git a/doc/sphinx/api/qgraphicssceneevent.rst b/doc/sphinx/api/qgraphicssceneevent.rst
new file mode 100644
index 0000000..449826a
--- /dev/null
+++ b/doc/sphinx/api/qgraphicssceneevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsSceneEvent
+-------------------
+
+.. class:: QGraphicsSceneEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicssceneevent.html>`_
diff --git a/doc/sphinx/api/qgraphicsscenehelpevent.rst b/doc/sphinx/api/qgraphicsscenehelpevent.rst
new file mode 100644
index 0000000..0463f48
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsscenehelpevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsSceneHelpEvent
+-----------------------
+
+.. class:: QGraphicsSceneHelpEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsscenehelpevent.html>`_
diff --git a/doc/sphinx/api/qgraphicsscenehoverevent.rst b/doc/sphinx/api/qgraphicsscenehoverevent.rst
new file mode 100644
index 0000000..0e8bf05
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsscenehoverevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsSceneHoverEvent
+------------------------
+
+.. class:: QGraphicsSceneHoverEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsscenehoverevent.html>`_
diff --git a/doc/sphinx/api/qgraphicsscenemouseevent.rst b/doc/sphinx/api/qgraphicsscenemouseevent.rst
new file mode 100644
index 0000000..4e99db4
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsscenemouseevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsSceneMouseEvent
+------------------------
+
+.. class:: QGraphicsSceneMouseEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsscenemouseevent.html>`_
diff --git a/doc/sphinx/api/qgraphicsscenemoveevent.rst b/doc/sphinx/api/qgraphicsscenemoveevent.rst
new file mode 100644
index 0000000..d797c26
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsscenemoveevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsSceneMoveEvent
+-----------------------
+
+.. class:: QGraphicsSceneMoveEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsscenemoveevent.html>`_
diff --git a/doc/sphinx/api/qgraphicssceneresizeevent.rst b/doc/sphinx/api/qgraphicssceneresizeevent.rst
new file mode 100644
index 0000000..87b5123
--- /dev/null
+++ b/doc/sphinx/api/qgraphicssceneresizeevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsSceneResizeEvent
+-------------------------
+
+.. class:: QGraphicsSceneResizeEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicssceneresizeevent.html>`_
diff --git a/doc/sphinx/api/qgraphicsscenewheelevent.rst b/doc/sphinx/api/qgraphicsscenewheelevent.rst
new file mode 100644
index 0000000..a026e4b
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsscenewheelevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsSceneWheelEvent
+------------------------
+
+.. class:: QGraphicsSceneWheelEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsscenewheelevent.html>`_
diff --git a/doc/sphinx/api/qgraphicssimpletextitem.rst b/doc/sphinx/api/qgraphicssimpletextitem.rst
new file mode 100644
index 0000000..d0fdb0b
--- /dev/null
+++ b/doc/sphinx/api/qgraphicssimpletextitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsSimpleTextItem
+-----------------------
+
+.. class:: QGraphicsSimpleTextItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicssimpletextitem.html>`_
diff --git a/doc/sphinx/api/qgraphicssvgitem.rst b/doc/sphinx/api/qgraphicssvgitem.rst
new file mode 100644
index 0000000..c60c52c
--- /dev/null
+++ b/doc/sphinx/api/qgraphicssvgitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSvg
+
+QGraphicsSvgItem
+----------------
+
+.. class:: QGraphicsSvgItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicssvgitem.html>`_
diff --git a/doc/sphinx/api/qgraphicstextitem.rst b/doc/sphinx/api/qgraphicstextitem.rst
new file mode 100644
index 0000000..3116c84
--- /dev/null
+++ b/doc/sphinx/api/qgraphicstextitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsTextItem
+-----------------
+
+.. class:: QGraphicsTextItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicstextitem.html>`_
diff --git a/doc/sphinx/api/qgraphicstransform.rst b/doc/sphinx/api/qgraphicstransform.rst
new file mode 100644
index 0000000..88df6e9
--- /dev/null
+++ b/doc/sphinx/api/qgraphicstransform.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsTransform
+------------------
+
+.. class:: QGraphicsTransform
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicstransform.html>`_
diff --git a/doc/sphinx/api/qgraphicsvideoitem.rst b/doc/sphinx/api/qgraphicsvideoitem.rst
new file mode 100644
index 0000000..0b8a322
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsvideoitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimediaWidgets
+
+QGraphicsVideoItem
+------------------
+
+.. class:: QGraphicsVideoItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsvideoitem.html>`_
diff --git a/doc/sphinx/api/qgraphicsview.rst b/doc/sphinx/api/qgraphicsview.rst
new file mode 100644
index 0000000..dfb2ab1
--- /dev/null
+++ b/doc/sphinx/api/qgraphicsview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsView
+-------------
+
+.. class:: QGraphicsView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicsview.html>`_
diff --git a/doc/sphinx/api/qgraphicswebview.rst b/doc/sphinx/api/qgraphicswebview.rst
new file mode 100644
index 0000000..7f0dbf2
--- /dev/null
+++ b/doc/sphinx/api/qgraphicswebview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKitWidgets
+
+QGraphicsWebView
+----------------
+
+.. class:: QGraphicsWebView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicswebview.html>`_
diff --git a/doc/sphinx/api/qgraphicswidget.rst b/doc/sphinx/api/qgraphicswidget.rst
new file mode 100644
index 0000000..4f4ff11
--- /dev/null
+++ b/doc/sphinx/api/qgraphicswidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGraphicsWidget
+---------------
+
+.. class:: QGraphicsWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgraphicswidget.html>`_
diff --git a/doc/sphinx/api/qgridlayout.rst b/doc/sphinx/api/qgridlayout.rst
new file mode 100644
index 0000000..c2a2179
--- /dev/null
+++ b/doc/sphinx/api/qgridlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGridLayout
+-----------
+
+.. class:: QGridLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgridlayout.html>`_
diff --git a/doc/sphinx/api/qgroupbox.rst b/doc/sphinx/api/qgroupbox.rst
new file mode 100644
index 0000000..65be460
--- /dev/null
+++ b/doc/sphinx/api/qgroupbox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QGroupBox
+---------
+
+.. class:: QGroupBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgroupbox.html>`_
diff --git a/doc/sphinx/api/qguiapplication.rst b/doc/sphinx/api/qguiapplication.rst
new file mode 100644
index 0000000..f785e36
--- /dev/null
+++ b/doc/sphinx/api/qguiapplication.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QGuiApplication
+---------------
+
+.. class:: QGuiApplication
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qguiapplication.html>`_
diff --git a/doc/sphinx/api/qgyroscope.rst b/doc/sphinx/api/qgyroscope.rst
new file mode 100644
index 0000000..2b808c3
--- /dev/null
+++ b/doc/sphinx/api/qgyroscope.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QGyroscope
+----------
+
+.. class:: QGyroscope
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgyroscope.html>`_
diff --git a/doc/sphinx/api/qgyroscopefilter.rst b/doc/sphinx/api/qgyroscopefilter.rst
new file mode 100644
index 0000000..9bf3bc8
--- /dev/null
+++ b/doc/sphinx/api/qgyroscopefilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QGyroscopeFilter
+----------------
+
+.. class:: QGyroscopeFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgyroscopefilter.html>`_
diff --git a/doc/sphinx/api/qgyroscopereading.rst b/doc/sphinx/api/qgyroscopereading.rst
new file mode 100644
index 0000000..af3db96
--- /dev/null
+++ b/doc/sphinx/api/qgyroscopereading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QGyroscopeReading
+-----------------
+
+.. class:: QGyroscopeReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qgyroscopereading.html>`_
diff --git a/doc/sphinx/api/qhboxlayout.rst b/doc/sphinx/api/qhboxlayout.rst
new file mode 100644
index 0000000..9b7c068
--- /dev/null
+++ b/doc/sphinx/api/qhboxlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QHBoxLayout
+-----------
+
+.. class:: QHBoxLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhboxlayout.html>`_
diff --git a/doc/sphinx/api/qheaderview.rst b/doc/sphinx/api/qheaderview.rst
new file mode 100644
index 0000000..bec6890
--- /dev/null
+++ b/doc/sphinx/api/qheaderview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QHeaderView
+-----------
+
+.. class:: QHeaderView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qheaderview.html>`_
diff --git a/doc/sphinx/api/qhelpcontentitem.rst b/doc/sphinx/api/qhelpcontentitem.rst
new file mode 100644
index 0000000..010934b
--- /dev/null
+++ b/doc/sphinx/api/qhelpcontentitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpContentItem
+----------------
+
+.. class:: QHelpContentItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpcontentitem.html>`_
diff --git a/doc/sphinx/api/qhelpcontentmodel.rst b/doc/sphinx/api/qhelpcontentmodel.rst
new file mode 100644
index 0000000..211416d
--- /dev/null
+++ b/doc/sphinx/api/qhelpcontentmodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpContentModel
+-----------------
+
+.. class:: QHelpContentModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpcontentmodel.html>`_
diff --git a/doc/sphinx/api/qhelpcontentwidget.rst b/doc/sphinx/api/qhelpcontentwidget.rst
new file mode 100644
index 0000000..e69f9fb
--- /dev/null
+++ b/doc/sphinx/api/qhelpcontentwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpContentWidget
+------------------
+
+.. class:: QHelpContentWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpcontentwidget.html>`_
diff --git a/doc/sphinx/api/qhelpengine.rst b/doc/sphinx/api/qhelpengine.rst
new file mode 100644
index 0000000..13df79f
--- /dev/null
+++ b/doc/sphinx/api/qhelpengine.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpEngine
+-----------
+
+.. class:: QHelpEngine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpengine.html>`_
diff --git a/doc/sphinx/api/qhelpenginecore.rst b/doc/sphinx/api/qhelpenginecore.rst
new file mode 100644
index 0000000..2f4c5ec
--- /dev/null
+++ b/doc/sphinx/api/qhelpenginecore.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpEngineCore
+---------------
+
+.. class:: QHelpEngineCore
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpenginecore.html>`_
diff --git a/doc/sphinx/api/qhelpevent.rst b/doc/sphinx/api/qhelpevent.rst
new file mode 100644
index 0000000..f494ab1
--- /dev/null
+++ b/doc/sphinx/api/qhelpevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QHelpEvent
+----------
+
+.. class:: QHelpEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpevent.html>`_
diff --git a/doc/sphinx/api/qhelpindexmodel.rst b/doc/sphinx/api/qhelpindexmodel.rst
new file mode 100644
index 0000000..83a02c7
--- /dev/null
+++ b/doc/sphinx/api/qhelpindexmodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpIndexModel
+---------------
+
+.. class:: QHelpIndexModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpindexmodel.html>`_
diff --git a/doc/sphinx/api/qhelpindexwidget.rst b/doc/sphinx/api/qhelpindexwidget.rst
new file mode 100644
index 0000000..a1000cf
--- /dev/null
+++ b/doc/sphinx/api/qhelpindexwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpIndexWidget
+----------------
+
+.. class:: QHelpIndexWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpindexwidget.html>`_
diff --git a/doc/sphinx/api/qhelpsearchengine.rst b/doc/sphinx/api/qhelpsearchengine.rst
new file mode 100644
index 0000000..69b4c75
--- /dev/null
+++ b/doc/sphinx/api/qhelpsearchengine.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpSearchEngine
+-----------------
+
+.. class:: QHelpSearchEngine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpsearchengine.html>`_
diff --git a/doc/sphinx/api/qhelpsearchquery.rst b/doc/sphinx/api/qhelpsearchquery.rst
new file mode 100644
index 0000000..c2ac5de
--- /dev/null
+++ b/doc/sphinx/api/qhelpsearchquery.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpSearchQuery
+----------------
+
+.. class:: QHelpSearchQuery
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpsearchquery.html>`_
diff --git a/doc/sphinx/api/qhelpsearchquerywidget.rst b/doc/sphinx/api/qhelpsearchquerywidget.rst
new file mode 100644
index 0000000..b3b4ca8
--- /dev/null
+++ b/doc/sphinx/api/qhelpsearchquerywidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpSearchQueryWidget
+----------------------
+
+.. class:: QHelpSearchQueryWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpsearchquerywidget.html>`_
diff --git a/doc/sphinx/api/qhelpsearchresultwidget.rst b/doc/sphinx/api/qhelpsearchresultwidget.rst
new file mode 100644
index 0000000..b2f58a7
--- /dev/null
+++ b/doc/sphinx/api/qhelpsearchresultwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtHelp
+
+QHelpSearchResultWidget
+-----------------------
+
+.. class:: QHelpSearchResultWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhelpsearchresultwidget.html>`_
diff --git a/doc/sphinx/api/qhideevent.rst b/doc/sphinx/api/qhideevent.rst
new file mode 100644
index 0000000..ac844bb
--- /dev/null
+++ b/doc/sphinx/api/qhideevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QHideEvent
+----------
+
+.. class:: QHideEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhideevent.html>`_
diff --git a/doc/sphinx/api/qhistorystate.rst b/doc/sphinx/api/qhistorystate.rst
new file mode 100644
index 0000000..fbe6623
--- /dev/null
+++ b/doc/sphinx/api/qhistorystate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QHistoryState
+-------------
+
+.. class:: QHistoryState
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhistorystate.html>`_
diff --git a/doc/sphinx/api/qholsterfilter.rst b/doc/sphinx/api/qholsterfilter.rst
new file mode 100644
index 0000000..aa62ed8
--- /dev/null
+++ b/doc/sphinx/api/qholsterfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QHolsterFilter
+--------------
+
+.. class:: QHolsterFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qholsterfilter.html>`_
diff --git a/doc/sphinx/api/qholsterreading.rst b/doc/sphinx/api/qholsterreading.rst
new file mode 100644
index 0000000..977d2cd
--- /dev/null
+++ b/doc/sphinx/api/qholsterreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QHolsterReading
+---------------
+
+.. class:: QHolsterReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qholsterreading.html>`_
diff --git a/doc/sphinx/api/qholstersensor.rst b/doc/sphinx/api/qholstersensor.rst
new file mode 100644
index 0000000..818a5b5
--- /dev/null
+++ b/doc/sphinx/api/qholstersensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QHolsterSensor
+--------------
+
+.. class:: QHolsterSensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qholstersensor.html>`_
diff --git a/doc/sphinx/api/qhostaddress.rst b/doc/sphinx/api/qhostaddress.rst
new file mode 100644
index 0000000..99d9bfd
--- /dev/null
+++ b/doc/sphinx/api/qhostaddress.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QHostAddress
+------------
+
+.. class:: QHostAddress
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhostaddress.html>`_
diff --git a/doc/sphinx/api/qhostinfo.rst b/doc/sphinx/api/qhostinfo.rst
new file mode 100644
index 0000000..ea1532a
--- /dev/null
+++ b/doc/sphinx/api/qhostinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QHostInfo
+---------
+
+.. class:: QHostInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhostinfo.html>`_
diff --git a/doc/sphinx/api/qhoverevent.rst b/doc/sphinx/api/qhoverevent.rst
new file mode 100644
index 0000000..bff3cd4
--- /dev/null
+++ b/doc/sphinx/api/qhoverevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QHoverEvent
+-----------
+
+.. class:: QHoverEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhoverevent.html>`_
diff --git a/doc/sphinx/api/qhttpmultipart.rst b/doc/sphinx/api/qhttpmultipart.rst
new file mode 100644
index 0000000..03a3331
--- /dev/null
+++ b/doc/sphinx/api/qhttpmultipart.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QHttpMultiPart
+--------------
+
+.. class:: QHttpMultiPart
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhttpmultipart.html>`_
diff --git a/doc/sphinx/api/qhttppart.rst b/doc/sphinx/api/qhttppart.rst
new file mode 100644
index 0000000..f6b43d9
--- /dev/null
+++ b/doc/sphinx/api/qhttppart.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QHttpPart
+---------
+
+.. class:: QHttpPart
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qhttppart.html>`_
diff --git a/doc/sphinx/api/qicon.rst b/doc/sphinx/api/qicon.rst
new file mode 100644
index 0000000..9de311a
--- /dev/null
+++ b/doc/sphinx/api/qicon.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QIcon
+-----
+
+.. class:: QIcon
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qicon.html>`_
diff --git a/doc/sphinx/api/qicondragevent.rst b/doc/sphinx/api/qicondragevent.rst
new file mode 100644
index 0000000..3a32097
--- /dev/null
+++ b/doc/sphinx/api/qicondragevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QIconDragEvent
+--------------
+
+.. class:: QIconDragEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qicondragevent.html>`_
diff --git a/doc/sphinx/api/qiconengine.rst b/doc/sphinx/api/qiconengine.rst
new file mode 100644
index 0000000..7535e89
--- /dev/null
+++ b/doc/sphinx/api/qiconengine.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QIconEngine
+-----------
+
+.. class:: QIconEngine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qiconengine.html>`_
diff --git a/doc/sphinx/api/qidentityproxymodel.rst b/doc/sphinx/api/qidentityproxymodel.rst
new file mode 100644
index 0000000..e280450
--- /dev/null
+++ b/doc/sphinx/api/qidentityproxymodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QIdentityProxyModel
+-------------------
+
+.. class:: QIdentityProxyModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qidentityproxymodel.html>`_
diff --git a/doc/sphinx/api/qimage.rst b/doc/sphinx/api/qimage.rst
new file mode 100644
index 0000000..401b738
--- /dev/null
+++ b/doc/sphinx/api/qimage.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QImage
+------
+
+.. class:: QImage
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qimage.html>`_
diff --git a/doc/sphinx/api/qimageencodersettings.rst b/doc/sphinx/api/qimageencodersettings.rst
new file mode 100644
index 0000000..eb3985b
--- /dev/null
+++ b/doc/sphinx/api/qimageencodersettings.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QImageEncoderSettings
+---------------------
+
+.. class:: QImageEncoderSettings
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qimageencodersettings.html>`_
diff --git a/doc/sphinx/api/qimageiohandler.rst b/doc/sphinx/api/qimageiohandler.rst
new file mode 100644
index 0000000..ff55e64
--- /dev/null
+++ b/doc/sphinx/api/qimageiohandler.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QImageIOHandler
+---------------
+
+.. class:: QImageIOHandler
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qimageiohandler.html>`_
diff --git a/doc/sphinx/api/qimagereader.rst b/doc/sphinx/api/qimagereader.rst
new file mode 100644
index 0000000..f2fce98
--- /dev/null
+++ b/doc/sphinx/api/qimagereader.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QImageReader
+------------
+
+.. class:: QImageReader
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qimagereader.html>`_
diff --git a/doc/sphinx/api/qimagewriter.rst b/doc/sphinx/api/qimagewriter.rst
new file mode 100644
index 0000000..c646555
--- /dev/null
+++ b/doc/sphinx/api/qimagewriter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QImageWriter
+------------
+
+.. class:: QImageWriter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qimagewriter.html>`_
diff --git a/doc/sphinx/api/qinputdialog.rst b/doc/sphinx/api/qinputdialog.rst
new file mode 100644
index 0000000..3caf3bf
--- /dev/null
+++ b/doc/sphinx/api/qinputdialog.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QInputDialog
+------------
+
+.. class:: QInputDialog
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qinputdialog.html>`_
diff --git a/doc/sphinx/api/qinputevent.rst b/doc/sphinx/api/qinputevent.rst
new file mode 100644
index 0000000..93d7787
--- /dev/null
+++ b/doc/sphinx/api/qinputevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QInputEvent
+-----------
+
+.. class:: QInputEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qinputevent.html>`_
diff --git a/doc/sphinx/api/qinputmethod.rst b/doc/sphinx/api/qinputmethod.rst
new file mode 100644
index 0000000..8004631
--- /dev/null
+++ b/doc/sphinx/api/qinputmethod.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QInputMethod
+------------
+
+.. class:: QInputMethod
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qinputmethod.html>`_
diff --git a/doc/sphinx/api/qinputmethodevent.rst b/doc/sphinx/api/qinputmethodevent.rst
new file mode 100644
index 0000000..7ad70de
--- /dev/null
+++ b/doc/sphinx/api/qinputmethodevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QInputMethodEvent
+-----------------
+
+.. class:: QInputMethodEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qinputmethodevent.html>`_
diff --git a/doc/sphinx/api/qinputmethodqueryevent.rst b/doc/sphinx/api/qinputmethodqueryevent.rst
new file mode 100644
index 0000000..3b65fc1
--- /dev/null
+++ b/doc/sphinx/api/qinputmethodqueryevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QInputMethodQueryEvent
+----------------------
+
+.. class:: QInputMethodQueryEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qinputmethodqueryevent.html>`_
diff --git a/doc/sphinx/api/qintvalidator.rst b/doc/sphinx/api/qintvalidator.rst
new file mode 100644
index 0000000..0a31f94
--- /dev/null
+++ b/doc/sphinx/api/qintvalidator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QIntValidator
+-------------
+
+.. class:: QIntValidator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qintvalidator.html>`_
diff --git a/doc/sphinx/api/qiodevice.rst b/doc/sphinx/api/qiodevice.rst
new file mode 100644
index 0000000..ba4c8ac
--- /dev/null
+++ b/doc/sphinx/api/qiodevice.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QIODevice
+---------
+
+.. class:: QIODevice
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qiodevice.html>`_
diff --git a/doc/sphinx/api/qirproximityfilter.rst b/doc/sphinx/api/qirproximityfilter.rst
new file mode 100644
index 0000000..2da399b
--- /dev/null
+++ b/doc/sphinx/api/qirproximityfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QIRProximityFilter
+------------------
+
+.. class:: QIRProximityFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qirproximityfilter.html>`_
diff --git a/doc/sphinx/api/qirproximityreading.rst b/doc/sphinx/api/qirproximityreading.rst
new file mode 100644
index 0000000..55b7d30
--- /dev/null
+++ b/doc/sphinx/api/qirproximityreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QIRProximityReading
+-------------------
+
+.. class:: QIRProximityReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qirproximityreading.html>`_
diff --git a/doc/sphinx/api/qirproximitysensor.rst b/doc/sphinx/api/qirproximitysensor.rst
new file mode 100644
index 0000000..af73fa4
--- /dev/null
+++ b/doc/sphinx/api/qirproximitysensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QIRProximitySensor
+------------------
+
+.. class:: QIRProximitySensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qirproximitysensor.html>`_
diff --git a/doc/sphinx/api/qitemdelegate.rst b/doc/sphinx/api/qitemdelegate.rst
new file mode 100644
index 0000000..66d3781
--- /dev/null
+++ b/doc/sphinx/api/qitemdelegate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QItemDelegate
+-------------
+
+.. class:: QItemDelegate
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qitemdelegate.html>`_
diff --git a/doc/sphinx/api/qitemeditorcreatorbase.rst b/doc/sphinx/api/qitemeditorcreatorbase.rst
new file mode 100644
index 0000000..62d3f24
--- /dev/null
+++ b/doc/sphinx/api/qitemeditorcreatorbase.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QItemEditorCreatorBase
+----------------------
+
+.. class:: QItemEditorCreatorBase
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qitemeditorcreatorbase.html>`_
diff --git a/doc/sphinx/api/qitemeditorfactory.rst b/doc/sphinx/api/qitemeditorfactory.rst
new file mode 100644
index 0000000..8d78db1
--- /dev/null
+++ b/doc/sphinx/api/qitemeditorfactory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QItemEditorFactory
+------------------
+
+.. class:: QItemEditorFactory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qitemeditorfactory.html>`_
diff --git a/doc/sphinx/api/qitemselection.rst b/doc/sphinx/api/qitemselection.rst
new file mode 100644
index 0000000..c4c9a2b
--- /dev/null
+++ b/doc/sphinx/api/qitemselection.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QItemSelection
+--------------
+
+.. class:: QItemSelection
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qitemselection.html>`_
diff --git a/doc/sphinx/api/qitemselectionmodel.rst b/doc/sphinx/api/qitemselectionmodel.rst
new file mode 100644
index 0000000..1e3f133
--- /dev/null
+++ b/doc/sphinx/api/qitemselectionmodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QItemSelectionModel
+-------------------
+
+.. class:: QItemSelectionModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qitemselectionmodel.html>`_
diff --git a/doc/sphinx/api/qitemselectionrange.rst b/doc/sphinx/api/qitemselectionrange.rst
new file mode 100644
index 0000000..bce1178
--- /dev/null
+++ b/doc/sphinx/api/qitemselectionrange.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QItemSelectionRange
+-------------------
+
+.. class:: QItemSelectionRange
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qitemselectionrange.html>`_
diff --git a/doc/sphinx/api/qjsengine.rst b/doc/sphinx/api/qjsengine.rst
new file mode 100644
index 0000000..f76750c
--- /dev/null
+++ b/doc/sphinx/api/qjsengine.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QJSEngine
+---------
+
+.. class:: QJSEngine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qjsengine.html>`_
diff --git a/doc/sphinx/api/qjsonarray.rst b/doc/sphinx/api/qjsonarray.rst
new file mode 100644
index 0000000..7cc7626
--- /dev/null
+++ b/doc/sphinx/api/qjsonarray.rst
@@ -0,0 +1,11 @@
+.. currentmodule:: PyQt5.QtCore
+
+QJsonArray
+----------
+
+.. class:: QJsonArray
+
+    :class:`QJsonArray` is implemented as a Python list of :class:`QJsonValue`
+    instances.
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qjsonarray.html>`_
diff --git a/doc/sphinx/api/qjsondocument.rst b/doc/sphinx/api/qjsondocument.rst
new file mode 100644
index 0000000..7943084
--- /dev/null
+++ b/doc/sphinx/api/qjsondocument.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QJsonDocument
+-------------
+
+.. class:: QJsonDocument
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qjsondocument.html>`_
diff --git a/doc/sphinx/api/qjsonobject.rst b/doc/sphinx/api/qjsonobject.rst
new file mode 100644
index 0000000..394547e
--- /dev/null
+++ b/doc/sphinx/api/qjsonobject.rst
@@ -0,0 +1,11 @@
+.. currentmodule:: PyQt5.QtCore
+
+QJsonObject
+-----------
+
+.. class:: QJsonObject
+
+    :class:`QJsonObject` is implemented as a Python dict of str keys and
+    :class:`QJsonValue` values.
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qjsonobject.html>`_
diff --git a/doc/sphinx/api/qjsonparseerror.rst b/doc/sphinx/api/qjsonparseerror.rst
new file mode 100644
index 0000000..62b281f
--- /dev/null
+++ b/doc/sphinx/api/qjsonparseerror.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QJsonParseError
+---------------
+
+.. class:: QJsonParseError
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qjsonparseerror.html>`_
diff --git a/doc/sphinx/api/qjsonvalue.rst b/doc/sphinx/api/qjsonvalue.rst
new file mode 100644
index 0000000..00a8a93
--- /dev/null
+++ b/doc/sphinx/api/qjsonvalue.rst
@@ -0,0 +1,24 @@
+.. currentmodule:: PyQt5.QtCore
+
+QJsonValue
+----------
+
+.. class:: QJsonValue
+
+    Any of the following can also be given when a :class:`QJsonValue` is expected:
+
+    - a :class:`QJsonValue.Type`
+
+    - a bool
+
+    - an int
+
+    - a float
+
+    - a str
+
+    - a :class:`QJsonObject`
+
+    - a :class:`QJsonArray`.
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qjsonvalue.html>`_
diff --git a/doc/sphinx/api/qjsvalue.rst b/doc/sphinx/api/qjsvalue.rst
new file mode 100644
index 0000000..82fbdcd
--- /dev/null
+++ b/doc/sphinx/api/qjsvalue.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QJSValue
+--------
+
+.. class:: QJSValue
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qjsvalue.html>`_
diff --git a/doc/sphinx/api/qjsvalueiterator.rst b/doc/sphinx/api/qjsvalueiterator.rst
new file mode 100644
index 0000000..db54bba
--- /dev/null
+++ b/doc/sphinx/api/qjsvalueiterator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QJSValueIterator
+----------------
+
+.. class:: QJSValueIterator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qjsvalueiterator.html>`_
diff --git a/doc/sphinx/api/qkeyevent.rst b/doc/sphinx/api/qkeyevent.rst
new file mode 100644
index 0000000..e16d142
--- /dev/null
+++ b/doc/sphinx/api/qkeyevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QKeyEvent
+---------
+
+.. class:: QKeyEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qkeyevent.html>`_
diff --git a/doc/sphinx/api/qkeyeventtransition.rst b/doc/sphinx/api/qkeyeventtransition.rst
new file mode 100644
index 0000000..ce04a83
--- /dev/null
+++ b/doc/sphinx/api/qkeyeventtransition.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QKeyEventTransition
+-------------------
+
+.. class:: QKeyEventTransition
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qkeyeventtransition.html>`_
diff --git a/doc/sphinx/api/qkeysequence.rst b/doc/sphinx/api/qkeysequence.rst
new file mode 100644
index 0000000..749dfc8
--- /dev/null
+++ b/doc/sphinx/api/qkeysequence.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QKeySequence
+------------
+
+.. class:: QKeySequence
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qkeysequence.html>`_
diff --git a/doc/sphinx/api/qkeysequenceedit.rst b/doc/sphinx/api/qkeysequenceedit.rst
new file mode 100644
index 0000000..6f21ef5
--- /dev/null
+++ b/doc/sphinx/api/qkeysequenceedit.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QKeySequenceEdit
+----------------
+
+.. class:: QKeySequenceEdit
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qkeysequenceedit.html>`_
diff --git a/doc/sphinx/api/qlabel.rst b/doc/sphinx/api/qlabel.rst
new file mode 100644
index 0000000..2c1f5f0
--- /dev/null
+++ b/doc/sphinx/api/qlabel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QLabel
+------
+
+.. class:: QLabel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlabel.html>`_
diff --git a/doc/sphinx/api/qlayout.rst b/doc/sphinx/api/qlayout.rst
new file mode 100644
index 0000000..eebf37a
--- /dev/null
+++ b/doc/sphinx/api/qlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QLayout
+-------
+
+.. class:: QLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlayout.html>`_
diff --git a/doc/sphinx/api/qlayoutitem.rst b/doc/sphinx/api/qlayoutitem.rst
new file mode 100644
index 0000000..4f2bf5a
--- /dev/null
+++ b/doc/sphinx/api/qlayoutitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QLayoutItem
+-----------
+
+.. class:: QLayoutItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlayoutitem.html>`_
diff --git a/doc/sphinx/api/qlcdnumber.rst b/doc/sphinx/api/qlcdnumber.rst
new file mode 100644
index 0000000..bb24683
--- /dev/null
+++ b/doc/sphinx/api/qlcdnumber.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QLCDNumber
+----------
+
+.. class:: QLCDNumber
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlcdnumber.html>`_
diff --git a/doc/sphinx/api/qlibrary.rst b/doc/sphinx/api/qlibrary.rst
new file mode 100644
index 0000000..47b81bf
--- /dev/null
+++ b/doc/sphinx/api/qlibrary.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QLibrary
+--------
+
+.. class:: QLibrary
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlibrary.html>`_
diff --git a/doc/sphinx/api/qlibraryinfo.rst b/doc/sphinx/api/qlibraryinfo.rst
new file mode 100644
index 0000000..d610168
--- /dev/null
+++ b/doc/sphinx/api/qlibraryinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QLibraryInfo
+------------
+
+.. class:: QLibraryInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlibraryinfo.html>`_
diff --git a/doc/sphinx/api/qlightfilter.rst b/doc/sphinx/api/qlightfilter.rst
new file mode 100644
index 0000000..2b9db7d
--- /dev/null
+++ b/doc/sphinx/api/qlightfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QLightFilter
+------------
+
+.. class:: QLightFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlightfilter.html>`_
diff --git a/doc/sphinx/api/qlightreading.rst b/doc/sphinx/api/qlightreading.rst
new file mode 100644
index 0000000..5a224bb
--- /dev/null
+++ b/doc/sphinx/api/qlightreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QLightReading
+-------------
+
+.. class:: QLightReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlightreading.html>`_
diff --git a/doc/sphinx/api/qlightsensor.rst b/doc/sphinx/api/qlightsensor.rst
new file mode 100644
index 0000000..cd4bcd2
--- /dev/null
+++ b/doc/sphinx/api/qlightsensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QLightSensor
+------------
+
+.. class:: QLightSensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlightsensor.html>`_
diff --git a/doc/sphinx/api/qline.rst b/doc/sphinx/api/qline.rst
new file mode 100644
index 0000000..9f170ec
--- /dev/null
+++ b/doc/sphinx/api/qline.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QLine
+-----
+
+.. class:: QLine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qline.html>`_
diff --git a/doc/sphinx/api/qlineargradient.rst b/doc/sphinx/api/qlineargradient.rst
new file mode 100644
index 0000000..22d08fb
--- /dev/null
+++ b/doc/sphinx/api/qlineargradient.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QLinearGradient
+---------------
+
+.. class:: QLinearGradient
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlineargradient.html>`_
diff --git a/doc/sphinx/api/qlineedit.rst b/doc/sphinx/api/qlineedit.rst
new file mode 100644
index 0000000..cac156c
--- /dev/null
+++ b/doc/sphinx/api/qlineedit.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QLineEdit
+---------
+
+.. class:: QLineEdit
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlineedit.html>`_
diff --git a/doc/sphinx/api/qlinef.rst b/doc/sphinx/api/qlinef.rst
new file mode 100644
index 0000000..ad4515f
--- /dev/null
+++ b/doc/sphinx/api/qlinef.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QLineF
+------
+
+.. class:: QLineF
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlinef.html>`_
diff --git a/doc/sphinx/api/qlistview.rst b/doc/sphinx/api/qlistview.rst
new file mode 100644
index 0000000..7ed6e0f
--- /dev/null
+++ b/doc/sphinx/api/qlistview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QListView
+---------
+
+.. class:: QListView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlistview.html>`_
diff --git a/doc/sphinx/api/qlistwidget.rst b/doc/sphinx/api/qlistwidget.rst
new file mode 100644
index 0000000..ddb1c48
--- /dev/null
+++ b/doc/sphinx/api/qlistwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QListWidget
+-----------
+
+.. class:: QListWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlistwidget.html>`_
diff --git a/doc/sphinx/api/qlistwidgetitem.rst b/doc/sphinx/api/qlistwidgetitem.rst
new file mode 100644
index 0000000..8c7efe2
--- /dev/null
+++ b/doc/sphinx/api/qlistwidgetitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QListWidgetItem
+---------------
+
+.. class:: QListWidgetItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlistwidgetitem.html>`_
diff --git a/doc/sphinx/api/qlocale.rst b/doc/sphinx/api/qlocale.rst
new file mode 100644
index 0000000..52dc0ef
--- /dev/null
+++ b/doc/sphinx/api/qlocale.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QLocale
+-------
+
+.. class:: QLocale
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlocale.html>`_
diff --git a/doc/sphinx/api/qlocalserver.rst b/doc/sphinx/api/qlocalserver.rst
new file mode 100644
index 0000000..9456325
--- /dev/null
+++ b/doc/sphinx/api/qlocalserver.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QLocalServer
+------------
+
+.. class:: QLocalServer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlocalserver.html>`_
diff --git a/doc/sphinx/api/qlocalsocket.rst b/doc/sphinx/api/qlocalsocket.rst
new file mode 100644
index 0000000..9e56cee
--- /dev/null
+++ b/doc/sphinx/api/qlocalsocket.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QLocalSocket
+------------
+
+.. class:: QLocalSocket
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlocalsocket.html>`_
diff --git a/doc/sphinx/api/qlockfile.rst b/doc/sphinx/api/qlockfile.rst
new file mode 100644
index 0000000..d5e7e19
--- /dev/null
+++ b/doc/sphinx/api/qlockfile.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QLockFile
+---------
+
+.. class:: QLockFile
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qlockfile.html>`_
diff --git a/doc/sphinx/api/qmacpasteboardmime.rst b/doc/sphinx/api/qmacpasteboardmime.rst
new file mode 100644
index 0000000..b8ba1dd
--- /dev/null
+++ b/doc/sphinx/api/qmacpasteboardmime.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMacExtras
+
+QMacPasteboardMime
+------------------
+
+.. class:: QMacPasteboardMime
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmacpasteboardmime.html>`_
diff --git a/doc/sphinx/api/qmagnetometer.rst b/doc/sphinx/api/qmagnetometer.rst
new file mode 100644
index 0000000..3ffe532
--- /dev/null
+++ b/doc/sphinx/api/qmagnetometer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QMagnetometer
+-------------
+
+.. class:: QMagnetometer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmagnetometer.html>`_
diff --git a/doc/sphinx/api/qmagnetometerfilter.rst b/doc/sphinx/api/qmagnetometerfilter.rst
new file mode 100644
index 0000000..8d4473c
--- /dev/null
+++ b/doc/sphinx/api/qmagnetometerfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QMagnetometerFilter
+-------------------
+
+.. class:: QMagnetometerFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmagnetometerfilter.html>`_
diff --git a/doc/sphinx/api/qmagnetometerreading.rst b/doc/sphinx/api/qmagnetometerreading.rst
new file mode 100644
index 0000000..2c3f99e
--- /dev/null
+++ b/doc/sphinx/api/qmagnetometerreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QMagnetometerReading
+--------------------
+
+.. class:: QMagnetometerReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmagnetometerreading.html>`_
diff --git a/doc/sphinx/api/qmainwindow.rst b/doc/sphinx/api/qmainwindow.rst
new file mode 100644
index 0000000..5186e14
--- /dev/null
+++ b/doc/sphinx/api/qmainwindow.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QMainWindow
+-----------
+
+.. class:: QMainWindow
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmainwindow.html>`_
diff --git a/doc/sphinx/api/qmargins.rst b/doc/sphinx/api/qmargins.rst
new file mode 100644
index 0000000..bc34aaf
--- /dev/null
+++ b/doc/sphinx/api/qmargins.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMargins
+--------
+
+.. class:: QMargins
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmargins.html>`_
diff --git a/doc/sphinx/api/qmarginsf.rst b/doc/sphinx/api/qmarginsf.rst
new file mode 100644
index 0000000..3c0c952
--- /dev/null
+++ b/doc/sphinx/api/qmarginsf.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMarginsF
+---------
+
+.. class:: QMarginsF
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmarginsf.html>`_
diff --git a/doc/sphinx/api/qmaskgenerator.rst b/doc/sphinx/api/qmaskgenerator.rst
new file mode 100644
index 0000000..71d7d9f
--- /dev/null
+++ b/doc/sphinx/api/qmaskgenerator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebSockets
+
+QMaskGenerator
+--------------
+
+.. class:: QMaskGenerator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmaskgenerator.html>`_
diff --git a/doc/sphinx/api/qmatrix2x2.rst b/doc/sphinx/api/qmatrix2x2.rst
new file mode 100644
index 0000000..69375d7
--- /dev/null
+++ b/doc/sphinx/api/qmatrix2x2.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMatrix2x2
+----------
+
+.. class:: QMatrix2x2
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmatrix2x2.html>`_
diff --git a/doc/sphinx/api/qmatrix2x3.rst b/doc/sphinx/api/qmatrix2x3.rst
new file mode 100644
index 0000000..1eee46e
--- /dev/null
+++ b/doc/sphinx/api/qmatrix2x3.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMatrix2x3
+----------
+
+.. class:: QMatrix2x3
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmatrix2x3.html>`_
diff --git a/doc/sphinx/api/qmatrix2x4.rst b/doc/sphinx/api/qmatrix2x4.rst
new file mode 100644
index 0000000..bd46629
--- /dev/null
+++ b/doc/sphinx/api/qmatrix2x4.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMatrix2x4
+----------
+
+.. class:: QMatrix2x4
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmatrix2x4.html>`_
diff --git a/doc/sphinx/api/qmatrix3x2.rst b/doc/sphinx/api/qmatrix3x2.rst
new file mode 100644
index 0000000..2c28c1d
--- /dev/null
+++ b/doc/sphinx/api/qmatrix3x2.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMatrix3x2
+----------
+
+.. class:: QMatrix3x2
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmatrix3x2.html>`_
diff --git a/doc/sphinx/api/qmatrix3x3.rst b/doc/sphinx/api/qmatrix3x3.rst
new file mode 100644
index 0000000..5f699f4
--- /dev/null
+++ b/doc/sphinx/api/qmatrix3x3.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMatrix3x3
+----------
+
+.. class:: QMatrix3x3
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmatrix3x3.html>`_
diff --git a/doc/sphinx/api/qmatrix3x4.rst b/doc/sphinx/api/qmatrix3x4.rst
new file mode 100644
index 0000000..2f0b558
--- /dev/null
+++ b/doc/sphinx/api/qmatrix3x4.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMatrix3x4
+----------
+
+.. class:: QMatrix3x4
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmatrix3x4.html>`_
diff --git a/doc/sphinx/api/qmatrix4x2.rst b/doc/sphinx/api/qmatrix4x2.rst
new file mode 100644
index 0000000..b980b3a
--- /dev/null
+++ b/doc/sphinx/api/qmatrix4x2.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMatrix4x2
+----------
+
+.. class:: QMatrix4x2
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmatrix4x2.html>`_
diff --git a/doc/sphinx/api/qmatrix4x3.rst b/doc/sphinx/api/qmatrix4x3.rst
new file mode 100644
index 0000000..5db2983
--- /dev/null
+++ b/doc/sphinx/api/qmatrix4x3.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMatrix4x3
+----------
+
+.. class:: QMatrix4x3
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmatrix4x3.html>`_
diff --git a/doc/sphinx/api/qmatrix4x4.rst b/doc/sphinx/api/qmatrix4x4.rst
new file mode 100644
index 0000000..25213c1
--- /dev/null
+++ b/doc/sphinx/api/qmatrix4x4.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMatrix4x4
+----------
+
+.. class:: QMatrix4x4
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmatrix4x4.html>`_
diff --git a/doc/sphinx/api/qmdiarea.rst b/doc/sphinx/api/qmdiarea.rst
new file mode 100644
index 0000000..e14aa35
--- /dev/null
+++ b/doc/sphinx/api/qmdiarea.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QMdiArea
+--------
+
+.. class:: QMdiArea
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmdiarea.html>`_
diff --git a/doc/sphinx/api/qmdisubwindow.rst b/doc/sphinx/api/qmdisubwindow.rst
new file mode 100644
index 0000000..23938fa
--- /dev/null
+++ b/doc/sphinx/api/qmdisubwindow.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QMdiSubWindow
+-------------
+
+.. class:: QMdiSubWindow
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmdisubwindow.html>`_
diff --git a/doc/sphinx/api/qmediabindableinterface.rst b/doc/sphinx/api/qmediabindableinterface.rst
new file mode 100644
index 0000000..63af609
--- /dev/null
+++ b/doc/sphinx/api/qmediabindableinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaBindableInterface
+-----------------------
+
+.. class:: QMediaBindableInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediabindableinterface.html>`_
diff --git a/doc/sphinx/api/qmediacontent.rst b/doc/sphinx/api/qmediacontent.rst
new file mode 100644
index 0000000..08bf42a
--- /dev/null
+++ b/doc/sphinx/api/qmediacontent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaContent
+-------------
+
+.. class:: QMediaContent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediacontent.html>`_
diff --git a/doc/sphinx/api/qmediacontrol.rst b/doc/sphinx/api/qmediacontrol.rst
new file mode 100644
index 0000000..2073430
--- /dev/null
+++ b/doc/sphinx/api/qmediacontrol.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaControl
+-------------
+
+.. class:: QMediaControl
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediacontrol.html>`_
diff --git a/doc/sphinx/api/qmediametadata.rst b/doc/sphinx/api/qmediametadata.rst
new file mode 100644
index 0000000..4ca1a48
--- /dev/null
+++ b/doc/sphinx/api/qmediametadata.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaMetaData
+--------------
+
+.. class:: QMediaMetaData
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediametadata.html>`_
diff --git a/doc/sphinx/api/qmediaobject.rst b/doc/sphinx/api/qmediaobject.rst
new file mode 100644
index 0000000..d544310
--- /dev/null
+++ b/doc/sphinx/api/qmediaobject.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaObject
+------------
+
+.. class:: QMediaObject
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediaobject.html>`_
diff --git a/doc/sphinx/api/qmediaplayer.rst b/doc/sphinx/api/qmediaplayer.rst
new file mode 100644
index 0000000..037973c
--- /dev/null
+++ b/doc/sphinx/api/qmediaplayer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaPlayer
+------------
+
+.. class:: QMediaPlayer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediaplayer.html>`_
diff --git a/doc/sphinx/api/qmediaplaylist.rst b/doc/sphinx/api/qmediaplaylist.rst
new file mode 100644
index 0000000..1145c31
--- /dev/null
+++ b/doc/sphinx/api/qmediaplaylist.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaPlaylist
+--------------
+
+.. class:: QMediaPlaylist
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediaplaylist.html>`_
diff --git a/doc/sphinx/api/qmediarecorder.rst b/doc/sphinx/api/qmediarecorder.rst
new file mode 100644
index 0000000..f4ea9e1
--- /dev/null
+++ b/doc/sphinx/api/qmediarecorder.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaRecorder
+--------------
+
+.. class:: QMediaRecorder
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediarecorder.html>`_
diff --git a/doc/sphinx/api/qmediaresource.rst b/doc/sphinx/api/qmediaresource.rst
new file mode 100644
index 0000000..686cfbb
--- /dev/null
+++ b/doc/sphinx/api/qmediaresource.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaResource
+--------------
+
+.. class:: QMediaResource
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediaresource.html>`_
diff --git a/doc/sphinx/api/qmediaservice.rst b/doc/sphinx/api/qmediaservice.rst
new file mode 100644
index 0000000..0f39a8f
--- /dev/null
+++ b/doc/sphinx/api/qmediaservice.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaService
+-------------
+
+.. class:: QMediaService
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediaservice.html>`_
diff --git a/doc/sphinx/api/qmediatimeinterval.rst b/doc/sphinx/api/qmediatimeinterval.rst
new file mode 100644
index 0000000..35bd8d3
--- /dev/null
+++ b/doc/sphinx/api/qmediatimeinterval.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaTimeInterval
+------------------
+
+.. class:: QMediaTimeInterval
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediatimeinterval.html>`_
diff --git a/doc/sphinx/api/qmediatimerange.rst b/doc/sphinx/api/qmediatimerange.rst
new file mode 100644
index 0000000..cad8981
--- /dev/null
+++ b/doc/sphinx/api/qmediatimerange.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMediaTimeRange
+---------------
+
+.. class:: QMediaTimeRange
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmediatimerange.html>`_
diff --git a/doc/sphinx/api/qmenu.rst b/doc/sphinx/api/qmenu.rst
new file mode 100644
index 0000000..e178f76
--- /dev/null
+++ b/doc/sphinx/api/qmenu.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QMenu
+-----
+
+.. class:: QMenu
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmenu.html>`_
diff --git a/doc/sphinx/api/qmenubar.rst b/doc/sphinx/api/qmenubar.rst
new file mode 100644
index 0000000..89d45d4
--- /dev/null
+++ b/doc/sphinx/api/qmenubar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QMenuBar
+--------
+
+.. class:: QMenuBar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmenubar.html>`_
diff --git a/doc/sphinx/api/qmessageauthenticationcode.rst b/doc/sphinx/api/qmessageauthenticationcode.rst
new file mode 100644
index 0000000..9b24801
--- /dev/null
+++ b/doc/sphinx/api/qmessageauthenticationcode.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMessageAuthenticationCode
+--------------------------
+
+.. class:: QMessageAuthenticationCode
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmessageauthenticationcode.html>`_
diff --git a/doc/sphinx/api/qmessagebox.rst b/doc/sphinx/api/qmessagebox.rst
new file mode 100644
index 0000000..818e070
--- /dev/null
+++ b/doc/sphinx/api/qmessagebox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QMessageBox
+-----------
+
+.. class:: QMessageBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmessagebox.html>`_
diff --git a/doc/sphinx/api/qmessagelogcontext.rst b/doc/sphinx/api/qmessagelogcontext.rst
new file mode 100644
index 0000000..740dfd8
--- /dev/null
+++ b/doc/sphinx/api/qmessagelogcontext.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMessageLogContext
+------------------
+
+.. class:: QMessageLogContext
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmessagelogcontext.html>`_
diff --git a/doc/sphinx/api/qmessagelogger.rst b/doc/sphinx/api/qmessagelogger.rst
new file mode 100644
index 0000000..9532cea
--- /dev/null
+++ b/doc/sphinx/api/qmessagelogger.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMessageLogger
+--------------
+
+.. class:: QMessageLogger
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmessagelogger.html>`_
diff --git a/doc/sphinx/api/qmetaclassinfo.rst b/doc/sphinx/api/qmetaclassinfo.rst
new file mode 100644
index 0000000..685fcfa
--- /dev/null
+++ b/doc/sphinx/api/qmetaclassinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMetaClassInfo
+--------------
+
+.. class:: QMetaClassInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmetaclassinfo.html>`_
diff --git a/doc/sphinx/api/qmetaenum.rst b/doc/sphinx/api/qmetaenum.rst
new file mode 100644
index 0000000..bcb1d67
--- /dev/null
+++ b/doc/sphinx/api/qmetaenum.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMetaEnum
+---------
+
+.. class:: QMetaEnum
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmetaenum.html>`_
diff --git a/doc/sphinx/api/qmetamethod.rst b/doc/sphinx/api/qmetamethod.rst
new file mode 100644
index 0000000..fd87cdd
--- /dev/null
+++ b/doc/sphinx/api/qmetamethod.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMetaMethod
+-----------
+
+.. class:: QMetaMethod
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmetamethod.html>`_
diff --git a/doc/sphinx/api/qmetaobject.rst b/doc/sphinx/api/qmetaobject.rst
new file mode 100644
index 0000000..9dd5559
--- /dev/null
+++ b/doc/sphinx/api/qmetaobject.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMetaObject
+-----------
+
+.. class:: QMetaObject
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmetaobject.html>`_
diff --git a/doc/sphinx/api/qmetaproperty.rst b/doc/sphinx/api/qmetaproperty.rst
new file mode 100644
index 0000000..216cd36
--- /dev/null
+++ b/doc/sphinx/api/qmetaproperty.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMetaProperty
+-------------
+
+.. class:: QMetaProperty
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmetaproperty.html>`_
diff --git a/doc/sphinx/api/qmetatype.rst b/doc/sphinx/api/qmetatype.rst
new file mode 100644
index 0000000..ab80efc
--- /dev/null
+++ b/doc/sphinx/api/qmetatype.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMetaType
+---------
+
+.. class:: QMetaType
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmetatype.html>`_
diff --git a/doc/sphinx/api/qmimedata.rst b/doc/sphinx/api/qmimedata.rst
new file mode 100644
index 0000000..5e6c845
--- /dev/null
+++ b/doc/sphinx/api/qmimedata.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMimeData
+---------
+
+.. class:: QMimeData
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmimedata.html>`_
diff --git a/doc/sphinx/api/qmimedatabase.rst b/doc/sphinx/api/qmimedatabase.rst
new file mode 100644
index 0000000..32f0d8c
--- /dev/null
+++ b/doc/sphinx/api/qmimedatabase.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMimeDatabase
+-------------
+
+.. class:: QMimeDatabase
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmimedatabase.html>`_
diff --git a/doc/sphinx/api/qmimetype.rst b/doc/sphinx/api/qmimetype.rst
new file mode 100644
index 0000000..25c823e
--- /dev/null
+++ b/doc/sphinx/api/qmimetype.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMimeType
+---------
+
+.. class:: QMimeType
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmimetype.html>`_
diff --git a/doc/sphinx/api/qmodelindex.rst b/doc/sphinx/api/qmodelindex.rst
new file mode 100644
index 0000000..d17711b
--- /dev/null
+++ b/doc/sphinx/api/qmodelindex.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QModelIndex
+-----------
+
+.. class:: QModelIndex
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmodelindex.html>`_
diff --git a/doc/sphinx/api/qmouseevent.rst b/doc/sphinx/api/qmouseevent.rst
new file mode 100644
index 0000000..a62bb12
--- /dev/null
+++ b/doc/sphinx/api/qmouseevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMouseEvent
+-----------
+
+.. class:: QMouseEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmouseevent.html>`_
diff --git a/doc/sphinx/api/qmouseeventtransition.rst b/doc/sphinx/api/qmouseeventtransition.rst
new file mode 100644
index 0000000..f1bd5e7
--- /dev/null
+++ b/doc/sphinx/api/qmouseeventtransition.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QMouseEventTransition
+---------------------
+
+.. class:: QMouseEventTransition
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmouseeventtransition.html>`_
diff --git a/doc/sphinx/api/qmoveevent.rst b/doc/sphinx/api/qmoveevent.rst
new file mode 100644
index 0000000..8ac0a4a
--- /dev/null
+++ b/doc/sphinx/api/qmoveevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMoveEvent
+----------
+
+.. class:: QMoveEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmoveevent.html>`_
diff --git a/doc/sphinx/api/qmovie.rst b/doc/sphinx/api/qmovie.rst
new file mode 100644
index 0000000..e564e4a
--- /dev/null
+++ b/doc/sphinx/api/qmovie.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QMovie
+------
+
+.. class:: QMovie
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmovie.html>`_
diff --git a/doc/sphinx/api/qmultimedia.rst b/doc/sphinx/api/qmultimedia.rst
new file mode 100644
index 0000000..066988a
--- /dev/null
+++ b/doc/sphinx/api/qmultimedia.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QMultimedia
+-----------
+
+.. class:: QMultimedia
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmultimedia.html>`_
diff --git a/doc/sphinx/api/qmutex.rst b/doc/sphinx/api/qmutex.rst
new file mode 100644
index 0000000..b8b21cb
--- /dev/null
+++ b/doc/sphinx/api/qmutex.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMutex
+------
+
+.. class:: QMutex
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmutex.html>`_
diff --git a/doc/sphinx/api/qmutexlocker.rst b/doc/sphinx/api/qmutexlocker.rst
new file mode 100644
index 0000000..580ce35
--- /dev/null
+++ b/doc/sphinx/api/qmutexlocker.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QMutexLocker
+------------
+
+.. class:: QMutexLocker
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qmutexlocker.html>`_
diff --git a/doc/sphinx/api/qnetworkaccessmanager.rst b/doc/sphinx/api/qnetworkaccessmanager.rst
new file mode 100644
index 0000000..73aad3a
--- /dev/null
+++ b/doc/sphinx/api/qnetworkaccessmanager.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkAccessManager
+---------------------
+
+.. class:: QNetworkAccessManager
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkaccessmanager.html>`_
diff --git a/doc/sphinx/api/qnetworkaddressentry.rst b/doc/sphinx/api/qnetworkaddressentry.rst
new file mode 100644
index 0000000..f00ebdf
--- /dev/null
+++ b/doc/sphinx/api/qnetworkaddressentry.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkAddressEntry
+--------------------
+
+.. class:: QNetworkAddressEntry
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkaddressentry.html>`_
diff --git a/doc/sphinx/api/qnetworkcachemetadata.rst b/doc/sphinx/api/qnetworkcachemetadata.rst
new file mode 100644
index 0000000..b277cd8
--- /dev/null
+++ b/doc/sphinx/api/qnetworkcachemetadata.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkCacheMetaData
+---------------------
+
+.. class:: QNetworkCacheMetaData
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkcachemetadata.html>`_
diff --git a/doc/sphinx/api/qnetworkconfiguration.rst b/doc/sphinx/api/qnetworkconfiguration.rst
new file mode 100644
index 0000000..c025152
--- /dev/null
+++ b/doc/sphinx/api/qnetworkconfiguration.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkConfiguration
+---------------------
+
+.. class:: QNetworkConfiguration
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkconfiguration.html>`_
diff --git a/doc/sphinx/api/qnetworkconfigurationmanager.rst b/doc/sphinx/api/qnetworkconfigurationmanager.rst
new file mode 100644
index 0000000..8436d8f
--- /dev/null
+++ b/doc/sphinx/api/qnetworkconfigurationmanager.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkConfigurationManager
+----------------------------
+
+.. class:: QNetworkConfigurationManager
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkconfigurationmanager.html>`_
diff --git a/doc/sphinx/api/qnetworkcookie.rst b/doc/sphinx/api/qnetworkcookie.rst
new file mode 100644
index 0000000..45f125d
--- /dev/null
+++ b/doc/sphinx/api/qnetworkcookie.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkCookie
+--------------
+
+.. class:: QNetworkCookie
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkcookie.html>`_
diff --git a/doc/sphinx/api/qnetworkcookiejar.rst b/doc/sphinx/api/qnetworkcookiejar.rst
new file mode 100644
index 0000000..a5f7fe8
--- /dev/null
+++ b/doc/sphinx/api/qnetworkcookiejar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkCookieJar
+-----------------
+
+.. class:: QNetworkCookieJar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkcookiejar.html>`_
diff --git a/doc/sphinx/api/qnetworkdiskcache.rst b/doc/sphinx/api/qnetworkdiskcache.rst
new file mode 100644
index 0000000..1606652
--- /dev/null
+++ b/doc/sphinx/api/qnetworkdiskcache.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkDiskCache
+-----------------
+
+.. class:: QNetworkDiskCache
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkdiskcache.html>`_
diff --git a/doc/sphinx/api/qnetworkinterface.rst b/doc/sphinx/api/qnetworkinterface.rst
new file mode 100644
index 0000000..eb68f41
--- /dev/null
+++ b/doc/sphinx/api/qnetworkinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkInterface
+-----------------
+
+.. class:: QNetworkInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkinterface.html>`_
diff --git a/doc/sphinx/api/qnetworkproxy.rst b/doc/sphinx/api/qnetworkproxy.rst
new file mode 100644
index 0000000..1960bfe
--- /dev/null
+++ b/doc/sphinx/api/qnetworkproxy.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkProxy
+-------------
+
+.. class:: QNetworkProxy
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkproxy.html>`_
diff --git a/doc/sphinx/api/qnetworkproxyfactory.rst b/doc/sphinx/api/qnetworkproxyfactory.rst
new file mode 100644
index 0000000..830ae9f
--- /dev/null
+++ b/doc/sphinx/api/qnetworkproxyfactory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkProxyFactory
+--------------------
+
+.. class:: QNetworkProxyFactory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkproxyfactory.html>`_
diff --git a/doc/sphinx/api/qnetworkproxyquery.rst b/doc/sphinx/api/qnetworkproxyquery.rst
new file mode 100644
index 0000000..e1c13e3
--- /dev/null
+++ b/doc/sphinx/api/qnetworkproxyquery.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkProxyQuery
+------------------
+
+.. class:: QNetworkProxyQuery
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkproxyquery.html>`_
diff --git a/doc/sphinx/api/qnetworkreply.rst b/doc/sphinx/api/qnetworkreply.rst
new file mode 100644
index 0000000..aff5ac1
--- /dev/null
+++ b/doc/sphinx/api/qnetworkreply.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkReply
+-------------
+
+.. class:: QNetworkReply
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkreply.html>`_
diff --git a/doc/sphinx/api/qnetworkrequest.rst b/doc/sphinx/api/qnetworkrequest.rst
new file mode 100644
index 0000000..40b4e6a
--- /dev/null
+++ b/doc/sphinx/api/qnetworkrequest.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkRequest
+---------------
+
+.. class:: QNetworkRequest
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworkrequest.html>`_
diff --git a/doc/sphinx/api/qnetworksession.rst b/doc/sphinx/api/qnetworksession.rst
new file mode 100644
index 0000000..2a014ed
--- /dev/null
+++ b/doc/sphinx/api/qnetworksession.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QNetworkSession
+---------------
+
+.. class:: QNetworkSession
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnetworksession.html>`_
diff --git a/doc/sphinx/api/qnmeapositioninfosource.rst b/doc/sphinx/api/qnmeapositioninfosource.rst
new file mode 100644
index 0000000..8da2596
--- /dev/null
+++ b/doc/sphinx/api/qnmeapositioninfosource.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPositioning
+
+QNmeaPositionInfoSource
+-----------------------
+
+.. class:: QNmeaPositionInfoSource
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qnmeapositioninfosource.html>`_
diff --git a/doc/sphinx/api/qobject.rst b/doc/sphinx/api/qobject.rst
new file mode 100644
index 0000000..0fb70a1
--- /dev/null
+++ b/doc/sphinx/api/qobject.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QObject
+-------
+
+.. class:: QObject
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qobject.html>`_
diff --git a/doc/sphinx/api/qobjectcleanuphandler.rst b/doc/sphinx/api/qobjectcleanuphandler.rst
new file mode 100644
index 0000000..56018f7
--- /dev/null
+++ b/doc/sphinx/api/qobjectcleanuphandler.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QObjectCleanupHandler
+---------------------
+
+.. class:: QObjectCleanupHandler
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qobjectcleanuphandler.html>`_
diff --git a/doc/sphinx/api/qoffscreensurface.rst b/doc/sphinx/api/qoffscreensurface.rst
new file mode 100644
index 0000000..fa353df
--- /dev/null
+++ b/doc/sphinx/api/qoffscreensurface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOffscreenSurface
+-----------------
+
+.. class:: QOffscreenSurface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qoffscreensurface.html>`_
diff --git a/doc/sphinx/api/qopenglbuffer.rst b/doc/sphinx/api/qopenglbuffer.rst
new file mode 100644
index 0000000..7c18f16
--- /dev/null
+++ b/doc/sphinx/api/qopenglbuffer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLBuffer
+-------------
+
+.. class:: QOpenGLBuffer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopenglbuffer.html>`_
diff --git a/doc/sphinx/api/qopenglcontext.rst b/doc/sphinx/api/qopenglcontext.rst
new file mode 100644
index 0000000..255b0ee
--- /dev/null
+++ b/doc/sphinx/api/qopenglcontext.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLContext
+--------------
+
+.. class:: QOpenGLContext
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopenglcontext.html>`_
diff --git a/doc/sphinx/api/qopenglcontextgroup.rst b/doc/sphinx/api/qopenglcontextgroup.rst
new file mode 100644
index 0000000..bdfc46c
--- /dev/null
+++ b/doc/sphinx/api/qopenglcontextgroup.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLContextGroup
+-------------------
+
+.. class:: QOpenGLContextGroup
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopenglcontextgroup.html>`_
diff --git a/doc/sphinx/api/qopengldebuglogger.rst b/doc/sphinx/api/qopengldebuglogger.rst
new file mode 100644
index 0000000..ea05d6c
--- /dev/null
+++ b/doc/sphinx/api/qopengldebuglogger.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLDebugLogger
+------------------
+
+.. class:: QOpenGLDebugLogger
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopengldebuglogger.html>`_
diff --git a/doc/sphinx/api/qopengldebugmessage.rst b/doc/sphinx/api/qopengldebugmessage.rst
new file mode 100644
index 0000000..2d27664
--- /dev/null
+++ b/doc/sphinx/api/qopengldebugmessage.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLDebugMessage
+-------------------
+
+.. class:: QOpenGLDebugMessage
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopengldebugmessage.html>`_
diff --git a/doc/sphinx/api/qopenglframebufferobject.rst b/doc/sphinx/api/qopenglframebufferobject.rst
new file mode 100644
index 0000000..6d8775a
--- /dev/null
+++ b/doc/sphinx/api/qopenglframebufferobject.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLFramebufferObject
+------------------------
+
+.. class:: QOpenGLFramebufferObject
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopenglframebufferobject.html>`_
diff --git a/doc/sphinx/api/qopenglframebufferobjectformat.rst b/doc/sphinx/api/qopenglframebufferobjectformat.rst
new file mode 100644
index 0000000..ad5383f
--- /dev/null
+++ b/doc/sphinx/api/qopenglframebufferobjectformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLFramebufferObjectFormat
+------------------------------
+
+.. class:: QOpenGLFramebufferObjectFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopenglframebufferobjectformat.html>`_
diff --git a/doc/sphinx/api/qopenglpaintdevice.rst b/doc/sphinx/api/qopenglpaintdevice.rst
new file mode 100644
index 0000000..c60b97a
--- /dev/null
+++ b/doc/sphinx/api/qopenglpaintdevice.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLPaintDevice
+------------------
+
+.. class:: QOpenGLPaintDevice
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopenglpaintdevice.html>`_
diff --git a/doc/sphinx/api/qopenglshader.rst b/doc/sphinx/api/qopenglshader.rst
new file mode 100644
index 0000000..ba1e780
--- /dev/null
+++ b/doc/sphinx/api/qopenglshader.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLShader
+-------------
+
+.. class:: QOpenGLShader
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopenglshader.html>`_
diff --git a/doc/sphinx/api/qopenglshaderprogram.rst b/doc/sphinx/api/qopenglshaderprogram.rst
new file mode 100644
index 0000000..2028ebf
--- /dev/null
+++ b/doc/sphinx/api/qopenglshaderprogram.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLShaderProgram
+--------------------
+
+.. class:: QOpenGLShaderProgram
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopenglshaderprogram.html>`_
diff --git a/doc/sphinx/api/qopengltexture.rst b/doc/sphinx/api/qopengltexture.rst
new file mode 100644
index 0000000..bfe66f0
--- /dev/null
+++ b/doc/sphinx/api/qopengltexture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLTexture
+--------------
+
+.. class:: QOpenGLTexture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopengltexture.html>`_
diff --git a/doc/sphinx/api/qopengltimemonitor.rst b/doc/sphinx/api/qopengltimemonitor.rst
new file mode 100644
index 0000000..3a4ffd1
--- /dev/null
+++ b/doc/sphinx/api/qopengltimemonitor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLTimeMonitor
+------------------
+
+.. class:: QOpenGLTimeMonitor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopengltimemonitor.html>`_
diff --git a/doc/sphinx/api/qopengltimerquery.rst b/doc/sphinx/api/qopengltimerquery.rst
new file mode 100644
index 0000000..a85976c
--- /dev/null
+++ b/doc/sphinx/api/qopengltimerquery.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLTimerQuery
+-----------------
+
+.. class:: QOpenGLTimerQuery
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopengltimerquery.html>`_
diff --git a/doc/sphinx/api/qopenglvertexarrayobject.rst b/doc/sphinx/api/qopenglvertexarrayobject.rst
new file mode 100644
index 0000000..f2c6d04
--- /dev/null
+++ b/doc/sphinx/api/qopenglvertexarrayobject.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QOpenGLVertexArrayObject
+------------------------
+
+.. class:: QOpenGLVertexArrayObject
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qopenglvertexarrayobject.html>`_
diff --git a/doc/sphinx/api/qorientationfilter.rst b/doc/sphinx/api/qorientationfilter.rst
new file mode 100644
index 0000000..0d49329
--- /dev/null
+++ b/doc/sphinx/api/qorientationfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QOrientationFilter
+------------------
+
+.. class:: QOrientationFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qorientationfilter.html>`_
diff --git a/doc/sphinx/api/qorientationreading.rst b/doc/sphinx/api/qorientationreading.rst
new file mode 100644
index 0000000..7d37b4f
--- /dev/null
+++ b/doc/sphinx/api/qorientationreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QOrientationReading
+-------------------
+
+.. class:: QOrientationReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qorientationreading.html>`_
diff --git a/doc/sphinx/api/qorientationsensor.rst b/doc/sphinx/api/qorientationsensor.rst
new file mode 100644
index 0000000..8805bb2
--- /dev/null
+++ b/doc/sphinx/api/qorientationsensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QOrientationSensor
+------------------
+
+.. class:: QOrientationSensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qorientationsensor.html>`_
diff --git a/doc/sphinx/api/qpagedpaintdevice.rst b/doc/sphinx/api/qpagedpaintdevice.rst
new file mode 100644
index 0000000..b4c8a96
--- /dev/null
+++ b/doc/sphinx/api/qpagedpaintdevice.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPagedPaintDevice
+-----------------
+
+.. class:: QPagedPaintDevice
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpagedpaintdevice.html>`_
diff --git a/doc/sphinx/api/qpagelayout.rst b/doc/sphinx/api/qpagelayout.rst
new file mode 100644
index 0000000..c8fbfde
--- /dev/null
+++ b/doc/sphinx/api/qpagelayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPageLayout
+-----------
+
+.. class:: QPageLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpagelayout.html>`_
diff --git a/doc/sphinx/api/qpagesetupdialog.rst b/doc/sphinx/api/qpagesetupdialog.rst
new file mode 100644
index 0000000..141e6b1
--- /dev/null
+++ b/doc/sphinx/api/qpagesetupdialog.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPrintSupport
+
+QPageSetupDialog
+----------------
+
+.. class:: QPageSetupDialog
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpagesetupdialog.html>`_
diff --git a/doc/sphinx/api/qpagesize.rst b/doc/sphinx/api/qpagesize.rst
new file mode 100644
index 0000000..349d235
--- /dev/null
+++ b/doc/sphinx/api/qpagesize.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPageSize
+---------
+
+.. class:: QPageSize
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpagesize.html>`_
diff --git a/doc/sphinx/api/qpaintdevice.rst b/doc/sphinx/api/qpaintdevice.rst
new file mode 100644
index 0000000..4e1b8ca
--- /dev/null
+++ b/doc/sphinx/api/qpaintdevice.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPaintDevice
+------------
+
+.. class:: QPaintDevice
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpaintdevice.html>`_
diff --git a/doc/sphinx/api/qpaintengine.rst b/doc/sphinx/api/qpaintengine.rst
new file mode 100644
index 0000000..18482ed
--- /dev/null
+++ b/doc/sphinx/api/qpaintengine.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPaintEngine
+------------
+
+.. class:: QPaintEngine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpaintengine.html>`_
diff --git a/doc/sphinx/api/qpaintenginestate.rst b/doc/sphinx/api/qpaintenginestate.rst
new file mode 100644
index 0000000..068866d
--- /dev/null
+++ b/doc/sphinx/api/qpaintenginestate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPaintEngineState
+-----------------
+
+.. class:: QPaintEngineState
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpaintenginestate.html>`_
diff --git a/doc/sphinx/api/qpainter.rst b/doc/sphinx/api/qpainter.rst
new file mode 100644
index 0000000..8092b08
--- /dev/null
+++ b/doc/sphinx/api/qpainter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPainter
+--------
+
+.. class:: QPainter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpainter.html>`_
diff --git a/doc/sphinx/api/qpainterpath.rst b/doc/sphinx/api/qpainterpath.rst
new file mode 100644
index 0000000..e026232
--- /dev/null
+++ b/doc/sphinx/api/qpainterpath.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPainterPath
+------------
+
+.. class:: QPainterPath
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpainterpath.html>`_
diff --git a/doc/sphinx/api/qpainterpathstroker.rst b/doc/sphinx/api/qpainterpathstroker.rst
new file mode 100644
index 0000000..e0caf8e
--- /dev/null
+++ b/doc/sphinx/api/qpainterpathstroker.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPainterPathStroker
+-------------------
+
+.. class:: QPainterPathStroker
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpainterpathstroker.html>`_
diff --git a/doc/sphinx/api/qpaintevent.rst b/doc/sphinx/api/qpaintevent.rst
new file mode 100644
index 0000000..3fc02d4
--- /dev/null
+++ b/doc/sphinx/api/qpaintevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPaintEvent
+-----------
+
+.. class:: QPaintEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpaintevent.html>`_
diff --git a/doc/sphinx/api/qpalette.rst b/doc/sphinx/api/qpalette.rst
new file mode 100644
index 0000000..4ff1ff7
--- /dev/null
+++ b/doc/sphinx/api/qpalette.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPalette
+--------
+
+.. class:: QPalette
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpalette.html>`_
diff --git a/doc/sphinx/api/qpangesture.rst b/doc/sphinx/api/qpangesture.rst
new file mode 100644
index 0000000..bef6f1c
--- /dev/null
+++ b/doc/sphinx/api/qpangesture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QPanGesture
+-----------
+
+.. class:: QPanGesture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpangesture.html>`_
diff --git a/doc/sphinx/api/qparallelanimationgroup.rst b/doc/sphinx/api/qparallelanimationgroup.rst
new file mode 100644
index 0000000..d692e93
--- /dev/null
+++ b/doc/sphinx/api/qparallelanimationgroup.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QParallelAnimationGroup
+-----------------------
+
+.. class:: QParallelAnimationGroup
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qparallelanimationgroup.html>`_
diff --git a/doc/sphinx/api/qpauseanimation.rst b/doc/sphinx/api/qpauseanimation.rst
new file mode 100644
index 0000000..f81a8b3
--- /dev/null
+++ b/doc/sphinx/api/qpauseanimation.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QPauseAnimation
+---------------
+
+.. class:: QPauseAnimation
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpauseanimation.html>`_
diff --git a/doc/sphinx/api/qpdfwriter.rst b/doc/sphinx/api/qpdfwriter.rst
new file mode 100644
index 0000000..523b610
--- /dev/null
+++ b/doc/sphinx/api/qpdfwriter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPdfWriter
+----------
+
+.. class:: QPdfWriter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpdfwriter.html>`_
diff --git a/doc/sphinx/api/qpen.rst b/doc/sphinx/api/qpen.rst
new file mode 100644
index 0000000..022ce29
--- /dev/null
+++ b/doc/sphinx/api/qpen.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPen
+----
+
+.. class:: QPen
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpen.html>`_
diff --git a/doc/sphinx/api/qpersistentmodelindex.rst b/doc/sphinx/api/qpersistentmodelindex.rst
new file mode 100644
index 0000000..93a173a
--- /dev/null
+++ b/doc/sphinx/api/qpersistentmodelindex.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QPersistentModelIndex
+---------------------
+
+.. class:: QPersistentModelIndex
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpersistentmodelindex.html>`_
diff --git a/doc/sphinx/api/qpicture.rst b/doc/sphinx/api/qpicture.rst
new file mode 100644
index 0000000..1a5e97d
--- /dev/null
+++ b/doc/sphinx/api/qpicture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPicture
+--------
+
+.. class:: QPicture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpicture.html>`_
diff --git a/doc/sphinx/api/qpictureio.rst b/doc/sphinx/api/qpictureio.rst
new file mode 100644
index 0000000..f8f1ca6
--- /dev/null
+++ b/doc/sphinx/api/qpictureio.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPictureIO
+----------
+
+.. class:: QPictureIO
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpictureio.html>`_
diff --git a/doc/sphinx/api/qpinchgesture.rst b/doc/sphinx/api/qpinchgesture.rst
new file mode 100644
index 0000000..d033d37
--- /dev/null
+++ b/doc/sphinx/api/qpinchgesture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QPinchGesture
+-------------
+
+.. class:: QPinchGesture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpinchgesture.html>`_
diff --git a/doc/sphinx/api/qpixmap.rst b/doc/sphinx/api/qpixmap.rst
new file mode 100644
index 0000000..7f07636
--- /dev/null
+++ b/doc/sphinx/api/qpixmap.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPixmap
+-------
+
+.. class:: QPixmap
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpixmap.html>`_
diff --git a/doc/sphinx/api/qpixmapcache.rst b/doc/sphinx/api/qpixmapcache.rst
new file mode 100644
index 0000000..7bf0ac8
--- /dev/null
+++ b/doc/sphinx/api/qpixmapcache.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPixmapCache
+------------
+
+.. class:: QPixmapCache
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpixmapcache.html>`_
diff --git a/doc/sphinx/api/qplaintextdocumentlayout.rst b/doc/sphinx/api/qplaintextdocumentlayout.rst
new file mode 100644
index 0000000..cf9d7a1
--- /dev/null
+++ b/doc/sphinx/api/qplaintextdocumentlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QPlainTextDocumentLayout
+------------------------
+
+.. class:: QPlainTextDocumentLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qplaintextdocumentlayout.html>`_
diff --git a/doc/sphinx/api/qplaintextedit.rst b/doc/sphinx/api/qplaintextedit.rst
new file mode 100644
index 0000000..cf47121
--- /dev/null
+++ b/doc/sphinx/api/qplaintextedit.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QPlainTextEdit
+--------------
+
+.. class:: QPlainTextEdit
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qplaintextedit.html>`_
diff --git a/doc/sphinx/api/qpluginloader.rst b/doc/sphinx/api/qpluginloader.rst
new file mode 100644
index 0000000..f5a738b
--- /dev/null
+++ b/doc/sphinx/api/qpluginloader.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QPluginLoader
+-------------
+
+.. class:: QPluginLoader
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpluginloader.html>`_
diff --git a/doc/sphinx/api/qpoint.rst b/doc/sphinx/api/qpoint.rst
new file mode 100644
index 0000000..94ae1a2
--- /dev/null
+++ b/doc/sphinx/api/qpoint.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QPoint
+------
+
+.. class:: QPoint
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpoint.html>`_
diff --git a/doc/sphinx/api/qpointf.rst b/doc/sphinx/api/qpointf.rst
new file mode 100644
index 0000000..1b57156
--- /dev/null
+++ b/doc/sphinx/api/qpointf.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QPointF
+-------
+
+.. class:: QPointF
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpointf.html>`_
diff --git a/doc/sphinx/api/qpolygon.rst b/doc/sphinx/api/qpolygon.rst
new file mode 100644
index 0000000..d5e6b32
--- /dev/null
+++ b/doc/sphinx/api/qpolygon.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPolygon
+--------
+
+.. class:: QPolygon
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpolygon.html>`_
diff --git a/doc/sphinx/api/qpolygonf.rst b/doc/sphinx/api/qpolygonf.rst
new file mode 100644
index 0000000..2868043
--- /dev/null
+++ b/doc/sphinx/api/qpolygonf.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QPolygonF
+---------
+
+.. class:: QPolygonF
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpolygonf.html>`_
diff --git a/doc/sphinx/api/qpressurefilter.rst b/doc/sphinx/api/qpressurefilter.rst
new file mode 100644
index 0000000..dce37f4
--- /dev/null
+++ b/doc/sphinx/api/qpressurefilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QPressureFilter
+---------------
+
+.. class:: QPressureFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpressurefilter.html>`_
diff --git a/doc/sphinx/api/qpressurereading.rst b/doc/sphinx/api/qpressurereading.rst
new file mode 100644
index 0000000..fac83c8
--- /dev/null
+++ b/doc/sphinx/api/qpressurereading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QPressureReading
+----------------
+
+.. class:: QPressureReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpressurereading.html>`_
diff --git a/doc/sphinx/api/qpressuresensor.rst b/doc/sphinx/api/qpressuresensor.rst
new file mode 100644
index 0000000..386ba4e
--- /dev/null
+++ b/doc/sphinx/api/qpressuresensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QPressureSensor
+---------------
+
+.. class:: QPressureSensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpressuresensor.html>`_
diff --git a/doc/sphinx/api/qprintdialog.rst b/doc/sphinx/api/qprintdialog.rst
new file mode 100644
index 0000000..ebf4b2b
--- /dev/null
+++ b/doc/sphinx/api/qprintdialog.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPrintSupport
+
+QPrintDialog
+------------
+
+.. class:: QPrintDialog
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qprintdialog.html>`_
diff --git a/doc/sphinx/api/qprintengine.rst b/doc/sphinx/api/qprintengine.rst
new file mode 100644
index 0000000..4d22d23
--- /dev/null
+++ b/doc/sphinx/api/qprintengine.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPrintSupport
+
+QPrintEngine
+------------
+
+.. class:: QPrintEngine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qprintengine.html>`_
diff --git a/doc/sphinx/api/qprinter.rst b/doc/sphinx/api/qprinter.rst
new file mode 100644
index 0000000..36c9028
--- /dev/null
+++ b/doc/sphinx/api/qprinter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPrintSupport
+
+QPrinter
+--------
+
+.. class:: QPrinter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qprinter.html>`_
diff --git a/doc/sphinx/api/qprinterinfo.rst b/doc/sphinx/api/qprinterinfo.rst
new file mode 100644
index 0000000..748209b
--- /dev/null
+++ b/doc/sphinx/api/qprinterinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPrintSupport
+
+QPrinterInfo
+------------
+
+.. class:: QPrinterInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qprinterinfo.html>`_
diff --git a/doc/sphinx/api/qprintpreviewdialog.rst b/doc/sphinx/api/qprintpreviewdialog.rst
new file mode 100644
index 0000000..e55ee8b
--- /dev/null
+++ b/doc/sphinx/api/qprintpreviewdialog.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPrintSupport
+
+QPrintPreviewDialog
+-------------------
+
+.. class:: QPrintPreviewDialog
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qprintpreviewdialog.html>`_
diff --git a/doc/sphinx/api/qprintpreviewwidget.rst b/doc/sphinx/api/qprintpreviewwidget.rst
new file mode 100644
index 0000000..8726af3
--- /dev/null
+++ b/doc/sphinx/api/qprintpreviewwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtPrintSupport
+
+QPrintPreviewWidget
+-------------------
+
+.. class:: QPrintPreviewWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qprintpreviewwidget.html>`_
diff --git a/doc/sphinx/api/qprocess.rst b/doc/sphinx/api/qprocess.rst
new file mode 100644
index 0000000..9ef2179
--- /dev/null
+++ b/doc/sphinx/api/qprocess.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QProcess
+--------
+
+.. class:: QProcess
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qprocess.html>`_
diff --git a/doc/sphinx/api/qprocessenvironment.rst b/doc/sphinx/api/qprocessenvironment.rst
new file mode 100644
index 0000000..a25ca2e
--- /dev/null
+++ b/doc/sphinx/api/qprocessenvironment.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QProcessEnvironment
+-------------------
+
+.. class:: QProcessEnvironment
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qprocessenvironment.html>`_
diff --git a/doc/sphinx/api/qprogressbar.rst b/doc/sphinx/api/qprogressbar.rst
new file mode 100644
index 0000000..95836f4
--- /dev/null
+++ b/doc/sphinx/api/qprogressbar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QProgressBar
+------------
+
+.. class:: QProgressBar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qprogressbar.html>`_
diff --git a/doc/sphinx/api/qprogressdialog.rst b/doc/sphinx/api/qprogressdialog.rst
new file mode 100644
index 0000000..d611ac7
--- /dev/null
+++ b/doc/sphinx/api/qprogressdialog.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QProgressDialog
+---------------
+
+.. class:: QProgressDialog
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qprogressdialog.html>`_
diff --git a/doc/sphinx/api/qpropertyanimation.rst b/doc/sphinx/api/qpropertyanimation.rst
new file mode 100644
index 0000000..8caa4ac
--- /dev/null
+++ b/doc/sphinx/api/qpropertyanimation.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QPropertyAnimation
+------------------
+
+.. class:: QPropertyAnimation
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpropertyanimation.html>`_
diff --git a/doc/sphinx/api/qproximityfilter.rst b/doc/sphinx/api/qproximityfilter.rst
new file mode 100644
index 0000000..9bc5680
--- /dev/null
+++ b/doc/sphinx/api/qproximityfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QProximityFilter
+----------------
+
+.. class:: QProximityFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qproximityfilter.html>`_
diff --git a/doc/sphinx/api/qproximityreading.rst b/doc/sphinx/api/qproximityreading.rst
new file mode 100644
index 0000000..192995e
--- /dev/null
+++ b/doc/sphinx/api/qproximityreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QProximityReading
+-----------------
+
+.. class:: QProximityReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qproximityreading.html>`_
diff --git a/doc/sphinx/api/qproximitysensor.rst b/doc/sphinx/api/qproximitysensor.rst
new file mode 100644
index 0000000..d6b026c
--- /dev/null
+++ b/doc/sphinx/api/qproximitysensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QProximitySensor
+----------------
+
+.. class:: QProximitySensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qproximitysensor.html>`_
diff --git a/doc/sphinx/api/qpushbutton.rst b/doc/sphinx/api/qpushbutton.rst
new file mode 100644
index 0000000..62f9d7d
--- /dev/null
+++ b/doc/sphinx/api/qpushbutton.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QPushButton
+-----------
+
+.. class:: QPushButton
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qpushbutton.html>`_
diff --git a/doc/sphinx/api/qqmlabstracturlinterceptor.rst b/doc/sphinx/api/qqmlabstracturlinterceptor.rst
new file mode 100644
index 0000000..9234965
--- /dev/null
+++ b/doc/sphinx/api/qqmlabstracturlinterceptor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlAbstractUrlInterceptor
+--------------------------
+
+.. class:: QQmlAbstractUrlInterceptor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlabstracturlinterceptor.html>`_
diff --git a/doc/sphinx/api/qqmlapplicationengine.rst b/doc/sphinx/api/qqmlapplicationengine.rst
new file mode 100644
index 0000000..e7ab14d
--- /dev/null
+++ b/doc/sphinx/api/qqmlapplicationengine.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlApplicationEngine
+---------------------
+
+.. class:: QQmlApplicationEngine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlapplicationengine.html>`_
diff --git a/doc/sphinx/api/qqmlcomponent.rst b/doc/sphinx/api/qqmlcomponent.rst
new file mode 100644
index 0000000..774bb4c
--- /dev/null
+++ b/doc/sphinx/api/qqmlcomponent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlComponent
+-------------
+
+.. class:: QQmlComponent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlcomponent.html>`_
diff --git a/doc/sphinx/api/qqmlcontext.rst b/doc/sphinx/api/qqmlcontext.rst
new file mode 100644
index 0000000..ac0570d
--- /dev/null
+++ b/doc/sphinx/api/qqmlcontext.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlContext
+-----------
+
+.. class:: QQmlContext
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlcontext.html>`_
diff --git a/doc/sphinx/api/qqmlengine.rst b/doc/sphinx/api/qqmlengine.rst
new file mode 100644
index 0000000..c8e9b5a
--- /dev/null
+++ b/doc/sphinx/api/qqmlengine.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlEngine
+----------
+
+.. class:: QQmlEngine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlengine.html>`_
diff --git a/doc/sphinx/api/qqmlerror.rst b/doc/sphinx/api/qqmlerror.rst
new file mode 100644
index 0000000..bde9ee5
--- /dev/null
+++ b/doc/sphinx/api/qqmlerror.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlError
+---------
+
+.. class:: QQmlError
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlerror.html>`_
diff --git a/doc/sphinx/api/qqmlexpression.rst b/doc/sphinx/api/qqmlexpression.rst
new file mode 100644
index 0000000..e4c68f3
--- /dev/null
+++ b/doc/sphinx/api/qqmlexpression.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlExpression
+--------------
+
+.. class:: QQmlExpression
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlexpression.html>`_
diff --git a/doc/sphinx/api/qqmlextensionplugin.rst b/doc/sphinx/api/qqmlextensionplugin.rst
new file mode 100644
index 0000000..10c2950
--- /dev/null
+++ b/doc/sphinx/api/qqmlextensionplugin.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlExtensionPlugin
+-------------------
+
+.. class:: QQmlExtensionPlugin
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlextensionplugin.html>`_
diff --git a/doc/sphinx/api/qqmlfileselector.rst b/doc/sphinx/api/qqmlfileselector.rst
new file mode 100644
index 0000000..5f56d4b
--- /dev/null
+++ b/doc/sphinx/api/qqmlfileselector.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlFileSelector
+----------------
+
+.. class:: QQmlFileSelector
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlfileselector.html>`_
diff --git a/doc/sphinx/api/qqmlimageproviderbase.rst b/doc/sphinx/api/qqmlimageproviderbase.rst
new file mode 100644
index 0000000..3458f29
--- /dev/null
+++ b/doc/sphinx/api/qqmlimageproviderbase.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlImageProviderBase
+---------------------
+
+.. class:: QQmlImageProviderBase
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlimageproviderbase.html>`_
diff --git a/doc/sphinx/api/qqmlincubator.rst b/doc/sphinx/api/qqmlincubator.rst
new file mode 100644
index 0000000..c549b6c
--- /dev/null
+++ b/doc/sphinx/api/qqmlincubator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlIncubator
+-------------
+
+.. class:: QQmlIncubator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlincubator.html>`_
diff --git a/doc/sphinx/api/qqmlincubatorcontrol.rst b/doc/sphinx/api/qqmlincubatorcontrol.rst
new file mode 100644
index 0000000..9f66c08
--- /dev/null
+++ b/doc/sphinx/api/qqmlincubatorcontrol.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlIncubatorControl
+--------------------
+
+.. class:: QQmlIncubatorControl
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlincubatorcontrol.html>`_
diff --git a/doc/sphinx/api/qqmllistproperty.rst b/doc/sphinx/api/qqmllistproperty.rst
new file mode 100644
index 0000000..0bd9b5c
--- /dev/null
+++ b/doc/sphinx/api/qqmllistproperty.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlListProperty
+----------------
+
+.. class:: QQmlListProperty
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmllistproperty.html>`_
diff --git a/doc/sphinx/api/qqmllistreference.rst b/doc/sphinx/api/qqmllistreference.rst
new file mode 100644
index 0000000..406c3a1
--- /dev/null
+++ b/doc/sphinx/api/qqmllistreference.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlListReference
+-----------------
+
+.. class:: QQmlListReference
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmllistreference.html>`_
diff --git a/doc/sphinx/api/qqmlnetworkaccessmanagerfactory.rst b/doc/sphinx/api/qqmlnetworkaccessmanagerfactory.rst
new file mode 100644
index 0000000..3599f89
--- /dev/null
+++ b/doc/sphinx/api/qqmlnetworkaccessmanagerfactory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlNetworkAccessManagerFactory
+-------------------------------
+
+.. class:: QQmlNetworkAccessManagerFactory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlnetworkaccessmanagerfactory.html>`_
diff --git a/doc/sphinx/api/qqmlparserstatus.rst b/doc/sphinx/api/qqmlparserstatus.rst
new file mode 100644
index 0000000..86af47b
--- /dev/null
+++ b/doc/sphinx/api/qqmlparserstatus.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlParserStatus
+----------------
+
+.. class:: QQmlParserStatus
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlparserstatus.html>`_
diff --git a/doc/sphinx/api/qqmlproperty.rst b/doc/sphinx/api/qqmlproperty.rst
new file mode 100644
index 0000000..fc5e3d7
--- /dev/null
+++ b/doc/sphinx/api/qqmlproperty.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlProperty
+------------
+
+.. class:: QQmlProperty
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlproperty.html>`_
diff --git a/doc/sphinx/api/qqmlpropertymap.rst b/doc/sphinx/api/qqmlpropertymap.rst
new file mode 100644
index 0000000..fa42c4d
--- /dev/null
+++ b/doc/sphinx/api/qqmlpropertymap.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlPropertyMap
+---------------
+
+.. class:: QQmlPropertyMap
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlpropertymap.html>`_
diff --git a/doc/sphinx/api/qqmlpropertyvaluesource.rst b/doc/sphinx/api/qqmlpropertyvaluesource.rst
new file mode 100644
index 0000000..d627cee
--- /dev/null
+++ b/doc/sphinx/api/qqmlpropertyvaluesource.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlPropertyValueSource
+-----------------------
+
+.. class:: QQmlPropertyValueSource
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlpropertyvaluesource.html>`_
diff --git a/doc/sphinx/api/qqmlscriptstring.rst b/doc/sphinx/api/qqmlscriptstring.rst
new file mode 100644
index 0000000..2dba709
--- /dev/null
+++ b/doc/sphinx/api/qqmlscriptstring.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQml
+
+QQmlScriptString
+----------------
+
+.. class:: QQmlScriptString
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qqmlscriptstring.html>`_
diff --git a/doc/sphinx/api/qquaternion.rst b/doc/sphinx/api/qquaternion.rst
new file mode 100644
index 0000000..8a803c7
--- /dev/null
+++ b/doc/sphinx/api/qquaternion.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QQuaternion
+-----------
+
+.. class:: QQuaternion
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qquaternion.html>`_
diff --git a/doc/sphinx/api/qquickframebufferobject.rst b/doc/sphinx/api/qquickframebufferobject.rst
new file mode 100644
index 0000000..5df6e77
--- /dev/null
+++ b/doc/sphinx/api/qquickframebufferobject.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QQuickFramebufferObject
+-----------------------
+
+.. class:: QQuickFramebufferObject
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qquickframebufferobject.html>`_
diff --git a/doc/sphinx/api/qquickimageprovider.rst b/doc/sphinx/api/qquickimageprovider.rst
new file mode 100644
index 0000000..c299cc6
--- /dev/null
+++ b/doc/sphinx/api/qquickimageprovider.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QQuickImageProvider
+-------------------
+
+.. class:: QQuickImageProvider
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qquickimageprovider.html>`_
diff --git a/doc/sphinx/api/qquickitem.rst b/doc/sphinx/api/qquickitem.rst
new file mode 100644
index 0000000..8d6afd5
--- /dev/null
+++ b/doc/sphinx/api/qquickitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QQuickItem
+----------
+
+.. class:: QQuickItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qquickitem.html>`_
diff --git a/doc/sphinx/api/qquickpainteditem.rst b/doc/sphinx/api/qquickpainteditem.rst
new file mode 100644
index 0000000..1726fd6
--- /dev/null
+++ b/doc/sphinx/api/qquickpainteditem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QQuickPaintedItem
+-----------------
+
+.. class:: QQuickPaintedItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qquickpainteditem.html>`_
diff --git a/doc/sphinx/api/qquicktextdocument.rst b/doc/sphinx/api/qquicktextdocument.rst
new file mode 100644
index 0000000..2d012bd
--- /dev/null
+++ b/doc/sphinx/api/qquicktextdocument.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QQuickTextDocument
+------------------
+
+.. class:: QQuickTextDocument
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qquicktextdocument.html>`_
diff --git a/doc/sphinx/api/qquicktexturefactory.rst b/doc/sphinx/api/qquicktexturefactory.rst
new file mode 100644
index 0000000..3aff2e7
--- /dev/null
+++ b/doc/sphinx/api/qquicktexturefactory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QQuickTextureFactory
+--------------------
+
+.. class:: QQuickTextureFactory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qquicktexturefactory.html>`_
diff --git a/doc/sphinx/api/qquickview.rst b/doc/sphinx/api/qquickview.rst
new file mode 100644
index 0000000..7b1966b
--- /dev/null
+++ b/doc/sphinx/api/qquickview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QQuickView
+----------
+
+.. class:: QQuickView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qquickview.html>`_
diff --git a/doc/sphinx/api/qquickwidget.rst b/doc/sphinx/api/qquickwidget.rst
new file mode 100644
index 0000000..92fa183
--- /dev/null
+++ b/doc/sphinx/api/qquickwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuickWidgets
+
+QQuickWidget
+------------
+
+.. class:: QQuickWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qquickwidget.html>`_
diff --git a/doc/sphinx/api/qquickwindow.rst b/doc/sphinx/api/qquickwindow.rst
new file mode 100644
index 0000000..d798686
--- /dev/null
+++ b/doc/sphinx/api/qquickwindow.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QQuickWindow
+------------
+
+.. class:: QQuickWindow
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qquickwindow.html>`_
diff --git a/doc/sphinx/api/qradialgradient.rst b/doc/sphinx/api/qradialgradient.rst
new file mode 100644
index 0000000..19fe6f7
--- /dev/null
+++ b/doc/sphinx/api/qradialgradient.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QRadialGradient
+---------------
+
+.. class:: QRadialGradient
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qradialgradient.html>`_
diff --git a/doc/sphinx/api/qradiobutton.rst b/doc/sphinx/api/qradiobutton.rst
new file mode 100644
index 0000000..268934a
--- /dev/null
+++ b/doc/sphinx/api/qradiobutton.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QRadioButton
+------------
+
+.. class:: QRadioButton
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qradiobutton.html>`_
diff --git a/doc/sphinx/api/qradiodata.rst b/doc/sphinx/api/qradiodata.rst
new file mode 100644
index 0000000..6251b92
--- /dev/null
+++ b/doc/sphinx/api/qradiodata.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QRadioData
+----------
+
+.. class:: QRadioData
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qradiodata.html>`_
diff --git a/doc/sphinx/api/qradiotuner.rst b/doc/sphinx/api/qradiotuner.rst
new file mode 100644
index 0000000..1c95984
--- /dev/null
+++ b/doc/sphinx/api/qradiotuner.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QRadioTuner
+-----------
+
+.. class:: QRadioTuner
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qradiotuner.html>`_
diff --git a/doc/sphinx/api/qrawfont.rst b/doc/sphinx/api/qrawfont.rst
new file mode 100644
index 0000000..05c764d
--- /dev/null
+++ b/doc/sphinx/api/qrawfont.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QRawFont
+--------
+
+.. class:: QRawFont
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qrawfont.html>`_
diff --git a/doc/sphinx/api/qreadlocker.rst b/doc/sphinx/api/qreadlocker.rst
new file mode 100644
index 0000000..a68c54c
--- /dev/null
+++ b/doc/sphinx/api/qreadlocker.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QReadLocker
+-----------
+
+.. class:: QReadLocker
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qreadlocker.html>`_
diff --git a/doc/sphinx/api/qreadwritelock.rst b/doc/sphinx/api/qreadwritelock.rst
new file mode 100644
index 0000000..4925cf1
--- /dev/null
+++ b/doc/sphinx/api/qreadwritelock.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QReadWriteLock
+--------------
+
+.. class:: QReadWriteLock
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qreadwritelock.html>`_
diff --git a/doc/sphinx/api/qrect.rst b/doc/sphinx/api/qrect.rst
new file mode 100644
index 0000000..bbf727d
--- /dev/null
+++ b/doc/sphinx/api/qrect.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QRect
+-----
+
+.. class:: QRect
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qrect.html>`_
diff --git a/doc/sphinx/api/qrectf.rst b/doc/sphinx/api/qrectf.rst
new file mode 100644
index 0000000..70b543f
--- /dev/null
+++ b/doc/sphinx/api/qrectf.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QRectF
+------
+
+.. class:: QRectF
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qrectf.html>`_
diff --git a/doc/sphinx/api/qregexp.rst b/doc/sphinx/api/qregexp.rst
new file mode 100644
index 0000000..0717369
--- /dev/null
+++ b/doc/sphinx/api/qregexp.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QRegExp
+-------
+
+.. class:: QRegExp
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qregexp.html>`_
diff --git a/doc/sphinx/api/qregexpvalidator.rst b/doc/sphinx/api/qregexpvalidator.rst
new file mode 100644
index 0000000..d53323c
--- /dev/null
+++ b/doc/sphinx/api/qregexpvalidator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QRegExpValidator
+----------------
+
+.. class:: QRegExpValidator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qregexpvalidator.html>`_
diff --git a/doc/sphinx/api/qregion.rst b/doc/sphinx/api/qregion.rst
new file mode 100644
index 0000000..8997c00
--- /dev/null
+++ b/doc/sphinx/api/qregion.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QRegion
+-------
+
+.. class:: QRegion
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qregion.html>`_
diff --git a/doc/sphinx/api/qregularexpression.rst b/doc/sphinx/api/qregularexpression.rst
new file mode 100644
index 0000000..485165c
--- /dev/null
+++ b/doc/sphinx/api/qregularexpression.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QRegularExpression
+------------------
+
+.. class:: QRegularExpression
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qregularexpression.html>`_
diff --git a/doc/sphinx/api/qregularexpressionmatch.rst b/doc/sphinx/api/qregularexpressionmatch.rst
new file mode 100644
index 0000000..e4fe0f6
--- /dev/null
+++ b/doc/sphinx/api/qregularexpressionmatch.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QRegularExpressionMatch
+-----------------------
+
+.. class:: QRegularExpressionMatch
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qregularexpressionmatch.html>`_
diff --git a/doc/sphinx/api/qregularexpressionmatchiterator.rst b/doc/sphinx/api/qregularexpressionmatchiterator.rst
new file mode 100644
index 0000000..1b408ce
--- /dev/null
+++ b/doc/sphinx/api/qregularexpressionmatchiterator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QRegularExpressionMatchIterator
+-------------------------------
+
+.. class:: QRegularExpressionMatchIterator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qregularexpressionmatchiterator.html>`_
diff --git a/doc/sphinx/api/qregularexpressionvalidator.rst b/doc/sphinx/api/qregularexpressionvalidator.rst
new file mode 100644
index 0000000..463f76e
--- /dev/null
+++ b/doc/sphinx/api/qregularexpressionvalidator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QRegularExpressionValidator
+---------------------------
+
+.. class:: QRegularExpressionValidator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qregularexpressionvalidator.html>`_
diff --git a/doc/sphinx/api/qresizeevent.rst b/doc/sphinx/api/qresizeevent.rst
new file mode 100644
index 0000000..0bf4f55
--- /dev/null
+++ b/doc/sphinx/api/qresizeevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QResizeEvent
+------------
+
+.. class:: QResizeEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qresizeevent.html>`_
diff --git a/doc/sphinx/api/qresource.rst b/doc/sphinx/api/qresource.rst
new file mode 100644
index 0000000..668dbb2
--- /dev/null
+++ b/doc/sphinx/api/qresource.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QResource
+---------
+
+.. class:: QResource
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qresource.html>`_
diff --git a/doc/sphinx/api/qrotationfilter.rst b/doc/sphinx/api/qrotationfilter.rst
new file mode 100644
index 0000000..a7ff10e
--- /dev/null
+++ b/doc/sphinx/api/qrotationfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QRotationFilter
+---------------
+
+.. class:: QRotationFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qrotationfilter.html>`_
diff --git a/doc/sphinx/api/qrotationreading.rst b/doc/sphinx/api/qrotationreading.rst
new file mode 100644
index 0000000..1a1df8a
--- /dev/null
+++ b/doc/sphinx/api/qrotationreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QRotationReading
+----------------
+
+.. class:: QRotationReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qrotationreading.html>`_
diff --git a/doc/sphinx/api/qrotationsensor.rst b/doc/sphinx/api/qrotationsensor.rst
new file mode 100644
index 0000000..270bd1b
--- /dev/null
+++ b/doc/sphinx/api/qrotationsensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QRotationSensor
+---------------
+
+.. class:: QRotationSensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qrotationsensor.html>`_
diff --git a/doc/sphinx/api/qrubberband.rst b/doc/sphinx/api/qrubberband.rst
new file mode 100644
index 0000000..9c4c5ea
--- /dev/null
+++ b/doc/sphinx/api/qrubberband.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QRubberBand
+-----------
+
+.. class:: QRubberBand
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qrubberband.html>`_
diff --git a/doc/sphinx/api/qrunnable.rst b/doc/sphinx/api/qrunnable.rst
new file mode 100644
index 0000000..5ed4529
--- /dev/null
+++ b/doc/sphinx/api/qrunnable.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QRunnable
+---------
+
+.. class:: QRunnable
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qrunnable.html>`_
diff --git a/doc/sphinx/api/qsavefile.rst b/doc/sphinx/api/qsavefile.rst
new file mode 100644
index 0000000..2884ed1
--- /dev/null
+++ b/doc/sphinx/api/qsavefile.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSaveFile
+---------
+
+.. class:: QSaveFile
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsavefile.html>`_
diff --git a/doc/sphinx/api/qscreen.rst b/doc/sphinx/api/qscreen.rst
new file mode 100644
index 0000000..b3f7d2a
--- /dev/null
+++ b/doc/sphinx/api/qscreen.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QScreen
+-------
+
+.. class:: QScreen
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qscreen.html>`_
diff --git a/doc/sphinx/api/qscrollarea.rst b/doc/sphinx/api/qscrollarea.rst
new file mode 100644
index 0000000..55a6636
--- /dev/null
+++ b/doc/sphinx/api/qscrollarea.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QScrollArea
+-----------
+
+.. class:: QScrollArea
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qscrollarea.html>`_
diff --git a/doc/sphinx/api/qscrollbar.rst b/doc/sphinx/api/qscrollbar.rst
new file mode 100644
index 0000000..77e15ee
--- /dev/null
+++ b/doc/sphinx/api/qscrollbar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QScrollBar
+----------
+
+.. class:: QScrollBar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qscrollbar.html>`_
diff --git a/doc/sphinx/api/qscroller.rst b/doc/sphinx/api/qscroller.rst
new file mode 100644
index 0000000..e50a0a6
--- /dev/null
+++ b/doc/sphinx/api/qscroller.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QScroller
+---------
+
+.. class:: QScroller
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qscroller.html>`_
diff --git a/doc/sphinx/api/qscrollerproperties.rst b/doc/sphinx/api/qscrollerproperties.rst
new file mode 100644
index 0000000..ee25ef1
--- /dev/null
+++ b/doc/sphinx/api/qscrollerproperties.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QScrollerProperties
+-------------------
+
+.. class:: QScrollerProperties
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qscrollerproperties.html>`_
diff --git a/doc/sphinx/api/qscrollevent.rst b/doc/sphinx/api/qscrollevent.rst
new file mode 100644
index 0000000..3e0e72d
--- /dev/null
+++ b/doc/sphinx/api/qscrollevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QScrollEvent
+------------
+
+.. class:: QScrollEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qscrollevent.html>`_
diff --git a/doc/sphinx/api/qscrollprepareevent.rst b/doc/sphinx/api/qscrollprepareevent.rst
new file mode 100644
index 0000000..ecfba28
--- /dev/null
+++ b/doc/sphinx/api/qscrollprepareevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QScrollPrepareEvent
+-------------------
+
+.. class:: QScrollPrepareEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qscrollprepareevent.html>`_
diff --git a/doc/sphinx/api/qsemaphore.rst b/doc/sphinx/api/qsemaphore.rst
new file mode 100644
index 0000000..dc0e45f
--- /dev/null
+++ b/doc/sphinx/api/qsemaphore.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSemaphore
+----------
+
+.. class:: QSemaphore
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsemaphore.html>`_
diff --git a/doc/sphinx/api/qsensor.rst b/doc/sphinx/api/qsensor.rst
new file mode 100644
index 0000000..781f4b8
--- /dev/null
+++ b/doc/sphinx/api/qsensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QSensor
+-------
+
+.. class:: QSensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsensor.html>`_
diff --git a/doc/sphinx/api/qsensorfilter.rst b/doc/sphinx/api/qsensorfilter.rst
new file mode 100644
index 0000000..f0f06f4
--- /dev/null
+++ b/doc/sphinx/api/qsensorfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QSensorFilter
+-------------
+
+.. class:: QSensorFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsensorfilter.html>`_
diff --git a/doc/sphinx/api/qsensorreading.rst b/doc/sphinx/api/qsensorreading.rst
new file mode 100644
index 0000000..1ab82e0
--- /dev/null
+++ b/doc/sphinx/api/qsensorreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QSensorReading
+--------------
+
+.. class:: QSensorReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsensorreading.html>`_
diff --git a/doc/sphinx/api/qsequentialanimationgroup.rst b/doc/sphinx/api/qsequentialanimationgroup.rst
new file mode 100644
index 0000000..58d5159
--- /dev/null
+++ b/doc/sphinx/api/qsequentialanimationgroup.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSequentialAnimationGroup
+-------------------------
+
+.. class:: QSequentialAnimationGroup
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsequentialanimationgroup.html>`_
diff --git a/doc/sphinx/api/qserialport.rst b/doc/sphinx/api/qserialport.rst
new file mode 100644
index 0000000..39fc891
--- /dev/null
+++ b/doc/sphinx/api/qserialport.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSerialPort
+
+QSerialPort
+-----------
+
+.. class:: QSerialPort
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qserialport.html>`_
diff --git a/doc/sphinx/api/qserialportinfo.rst b/doc/sphinx/api/qserialportinfo.rst
new file mode 100644
index 0000000..e5c470a
--- /dev/null
+++ b/doc/sphinx/api/qserialportinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSerialPort
+
+QSerialPortInfo
+---------------
+
+.. class:: QSerialPortInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qserialportinfo.html>`_
diff --git a/doc/sphinx/api/qsessionmanager.rst b/doc/sphinx/api/qsessionmanager.rst
new file mode 100644
index 0000000..fb2a0ad
--- /dev/null
+++ b/doc/sphinx/api/qsessionmanager.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QSessionManager
+---------------
+
+.. class:: QSessionManager
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsessionmanager.html>`_
diff --git a/doc/sphinx/api/qsettings.rst b/doc/sphinx/api/qsettings.rst
new file mode 100644
index 0000000..704b34c
--- /dev/null
+++ b/doc/sphinx/api/qsettings.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSettings
+---------
+
+.. class:: QSettings
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsettings.html>`_
diff --git a/doc/sphinx/api/qsgbasicgeometrynode.rst b/doc/sphinx/api/qsgbasicgeometrynode.rst
new file mode 100644
index 0000000..d9621a2
--- /dev/null
+++ b/doc/sphinx/api/qsgbasicgeometrynode.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGBasicGeometryNode
+--------------------
+
+.. class:: QSGBasicGeometryNode
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgbasicgeometrynode.html>`_
diff --git a/doc/sphinx/api/qsgclipnode.rst b/doc/sphinx/api/qsgclipnode.rst
new file mode 100644
index 0000000..901a18a
--- /dev/null
+++ b/doc/sphinx/api/qsgclipnode.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGClipNode
+-----------
+
+.. class:: QSGClipNode
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgclipnode.html>`_
diff --git a/doc/sphinx/api/qsgdynamictexture.rst b/doc/sphinx/api/qsgdynamictexture.rst
new file mode 100644
index 0000000..26463d0
--- /dev/null
+++ b/doc/sphinx/api/qsgdynamictexture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGDynamicTexture
+-----------------
+
+.. class:: QSGDynamicTexture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgdynamictexture.html>`_
diff --git a/doc/sphinx/api/qsgflatcolormaterial.rst b/doc/sphinx/api/qsgflatcolormaterial.rst
new file mode 100644
index 0000000..c5b686e
--- /dev/null
+++ b/doc/sphinx/api/qsgflatcolormaterial.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGFlatColorMaterial
+--------------------
+
+.. class:: QSGFlatColorMaterial
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgflatcolormaterial.html>`_
diff --git a/doc/sphinx/api/qsggeometry.rst b/doc/sphinx/api/qsggeometry.rst
new file mode 100644
index 0000000..11b64e6
--- /dev/null
+++ b/doc/sphinx/api/qsggeometry.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGGeometry
+-----------
+
+.. class:: QSGGeometry
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsggeometry.html>`_
diff --git a/doc/sphinx/api/qsggeometrynode.rst b/doc/sphinx/api/qsggeometrynode.rst
new file mode 100644
index 0000000..999d071
--- /dev/null
+++ b/doc/sphinx/api/qsggeometrynode.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGGeometryNode
+---------------
+
+.. class:: QSGGeometryNode
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsggeometrynode.html>`_
diff --git a/doc/sphinx/api/qsgmaterial.rst b/doc/sphinx/api/qsgmaterial.rst
new file mode 100644
index 0000000..63d968d
--- /dev/null
+++ b/doc/sphinx/api/qsgmaterial.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGMaterial
+-----------
+
+.. class:: QSGMaterial
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgmaterial.html>`_
diff --git a/doc/sphinx/api/qsgmaterialshader.rst b/doc/sphinx/api/qsgmaterialshader.rst
new file mode 100644
index 0000000..03e92b7
--- /dev/null
+++ b/doc/sphinx/api/qsgmaterialshader.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGMaterialShader
+-----------------
+
+.. class:: QSGMaterialShader
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgmaterialshader.html>`_
diff --git a/doc/sphinx/api/qsgmaterialtype.rst b/doc/sphinx/api/qsgmaterialtype.rst
new file mode 100644
index 0000000..3f154e1
--- /dev/null
+++ b/doc/sphinx/api/qsgmaterialtype.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGMaterialType
+---------------
+
+.. class:: QSGMaterialType
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgmaterialtype.html>`_
diff --git a/doc/sphinx/api/qsgnode.rst b/doc/sphinx/api/qsgnode.rst
new file mode 100644
index 0000000..6114939
--- /dev/null
+++ b/doc/sphinx/api/qsgnode.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGNode
+-------
+
+.. class:: QSGNode
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgnode.html>`_
diff --git a/doc/sphinx/api/qsgopacitynode.rst b/doc/sphinx/api/qsgopacitynode.rst
new file mode 100644
index 0000000..7b62228
--- /dev/null
+++ b/doc/sphinx/api/qsgopacitynode.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGOpacityNode
+--------------
+
+.. class:: QSGOpacityNode
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgopacitynode.html>`_
diff --git a/doc/sphinx/api/qsgopaquetexturematerial.rst b/doc/sphinx/api/qsgopaquetexturematerial.rst
new file mode 100644
index 0000000..2dc87db
--- /dev/null
+++ b/doc/sphinx/api/qsgopaquetexturematerial.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGOpaqueTextureMaterial
+------------------------
+
+.. class:: QSGOpaqueTextureMaterial
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgopaquetexturematerial.html>`_
diff --git a/doc/sphinx/api/qsgsimplerectnode.rst b/doc/sphinx/api/qsgsimplerectnode.rst
new file mode 100644
index 0000000..a56005e
--- /dev/null
+++ b/doc/sphinx/api/qsgsimplerectnode.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGSimpleRectNode
+-----------------
+
+.. class:: QSGSimpleRectNode
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgsimplerectnode.html>`_
diff --git a/doc/sphinx/api/qsgsimpletexturenode.rst b/doc/sphinx/api/qsgsimpletexturenode.rst
new file mode 100644
index 0000000..f6f3ba6
--- /dev/null
+++ b/doc/sphinx/api/qsgsimpletexturenode.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGSimpleTextureNode
+--------------------
+
+.. class:: QSGSimpleTextureNode
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgsimpletexturenode.html>`_
diff --git a/doc/sphinx/api/qsgtexture.rst b/doc/sphinx/api/qsgtexture.rst
new file mode 100644
index 0000000..9f73d19
--- /dev/null
+++ b/doc/sphinx/api/qsgtexture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGTexture
+----------
+
+.. class:: QSGTexture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgtexture.html>`_
diff --git a/doc/sphinx/api/qsgtexturematerial.rst b/doc/sphinx/api/qsgtexturematerial.rst
new file mode 100644
index 0000000..3baea3b
--- /dev/null
+++ b/doc/sphinx/api/qsgtexturematerial.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGTextureMaterial
+------------------
+
+.. class:: QSGTextureMaterial
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgtexturematerial.html>`_
diff --git a/doc/sphinx/api/qsgtextureprovider.rst b/doc/sphinx/api/qsgtextureprovider.rst
new file mode 100644
index 0000000..f2cd683
--- /dev/null
+++ b/doc/sphinx/api/qsgtextureprovider.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGTextureProvider
+------------------
+
+.. class:: QSGTextureProvider
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgtextureprovider.html>`_
diff --git a/doc/sphinx/api/qsgtransformnode.rst b/doc/sphinx/api/qsgtransformnode.rst
new file mode 100644
index 0000000..34c87ed
--- /dev/null
+++ b/doc/sphinx/api/qsgtransformnode.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGTransformNode
+----------------
+
+.. class:: QSGTransformNode
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgtransformnode.html>`_
diff --git a/doc/sphinx/api/qsgvertexcolormaterial.rst b/doc/sphinx/api/qsgvertexcolormaterial.rst
new file mode 100644
index 0000000..1498fdc
--- /dev/null
+++ b/doc/sphinx/api/qsgvertexcolormaterial.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtQuick
+
+QSGVertexColorMaterial
+----------------------
+
+.. class:: QSGVertexColorMaterial
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsgvertexcolormaterial.html>`_
diff --git a/doc/sphinx/api/qsharedmemory.rst b/doc/sphinx/api/qsharedmemory.rst
new file mode 100644
index 0000000..bd374c6
--- /dev/null
+++ b/doc/sphinx/api/qsharedmemory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSharedMemory
+-------------
+
+.. class:: QSharedMemory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsharedmemory.html>`_
diff --git a/doc/sphinx/api/qshortcut.rst b/doc/sphinx/api/qshortcut.rst
new file mode 100644
index 0000000..0c7e6cd
--- /dev/null
+++ b/doc/sphinx/api/qshortcut.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QShortcut
+---------
+
+.. class:: QShortcut
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qshortcut.html>`_
diff --git a/doc/sphinx/api/qshortcutevent.rst b/doc/sphinx/api/qshortcutevent.rst
new file mode 100644
index 0000000..0af028e
--- /dev/null
+++ b/doc/sphinx/api/qshortcutevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QShortcutEvent
+--------------
+
+.. class:: QShortcutEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qshortcutevent.html>`_
diff --git a/doc/sphinx/api/qshowevent.rst b/doc/sphinx/api/qshowevent.rst
new file mode 100644
index 0000000..2ce5f45
--- /dev/null
+++ b/doc/sphinx/api/qshowevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QShowEvent
+----------
+
+.. class:: QShowEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qshowevent.html>`_
diff --git a/doc/sphinx/api/qsignalblocker.rst b/doc/sphinx/api/qsignalblocker.rst
new file mode 100644
index 0000000..58ca125
--- /dev/null
+++ b/doc/sphinx/api/qsignalblocker.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSignalBlocker
+--------------
+
+.. class:: QSignalBlocker
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsignalblocker.html>`_
diff --git a/doc/sphinx/api/qsignalmapper.rst b/doc/sphinx/api/qsignalmapper.rst
new file mode 100644
index 0000000..a434823
--- /dev/null
+++ b/doc/sphinx/api/qsignalmapper.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSignalMapper
+-------------
+
+.. class:: QSignalMapper
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsignalmapper.html>`_
diff --git a/doc/sphinx/api/qsignalspy.rst b/doc/sphinx/api/qsignalspy.rst
new file mode 100644
index 0000000..74e7b32
--- /dev/null
+++ b/doc/sphinx/api/qsignalspy.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtTest
+
+QSignalSpy
+----------
+
+.. class:: QSignalSpy
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsignalspy.html>`_
diff --git a/doc/sphinx/api/qsignaltransition.rst b/doc/sphinx/api/qsignaltransition.rst
new file mode 100644
index 0000000..a42f56c
--- /dev/null
+++ b/doc/sphinx/api/qsignaltransition.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSignalTransition
+-----------------
+
+.. class:: QSignalTransition
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsignaltransition.html>`_
diff --git a/doc/sphinx/api/qsimplexmlnodemodel.rst b/doc/sphinx/api/qsimplexmlnodemodel.rst
new file mode 100644
index 0000000..5d285cf
--- /dev/null
+++ b/doc/sphinx/api/qsimplexmlnodemodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QSimpleXmlNodeModel
+-------------------
+
+.. class:: QSimpleXmlNodeModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsimplexmlnodemodel.html>`_
diff --git a/doc/sphinx/api/qsize.rst b/doc/sphinx/api/qsize.rst
new file mode 100644
index 0000000..c023d13
--- /dev/null
+++ b/doc/sphinx/api/qsize.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSize
+-----
+
+.. class:: QSize
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsize.html>`_
diff --git a/doc/sphinx/api/qsizef.rst b/doc/sphinx/api/qsizef.rst
new file mode 100644
index 0000000..758ddf8
--- /dev/null
+++ b/doc/sphinx/api/qsizef.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSizeF
+------
+
+.. class:: QSizeF
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsizef.html>`_
diff --git a/doc/sphinx/api/qsizegrip.rst b/doc/sphinx/api/qsizegrip.rst
new file mode 100644
index 0000000..8a17a7b
--- /dev/null
+++ b/doc/sphinx/api/qsizegrip.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QSizeGrip
+---------
+
+.. class:: QSizeGrip
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsizegrip.html>`_
diff --git a/doc/sphinx/api/qsizepolicy.rst b/doc/sphinx/api/qsizepolicy.rst
new file mode 100644
index 0000000..70e5fe1
--- /dev/null
+++ b/doc/sphinx/api/qsizepolicy.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QSizePolicy
+-----------
+
+.. class:: QSizePolicy
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsizepolicy.html>`_
diff --git a/doc/sphinx/api/qslider.rst b/doc/sphinx/api/qslider.rst
new file mode 100644
index 0000000..ec865c7
--- /dev/null
+++ b/doc/sphinx/api/qslider.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QSlider
+-------
+
+.. class:: QSlider
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qslider.html>`_
diff --git a/doc/sphinx/api/qsocketnotifier.rst b/doc/sphinx/api/qsocketnotifier.rst
new file mode 100644
index 0000000..c81618c
--- /dev/null
+++ b/doc/sphinx/api/qsocketnotifier.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSocketNotifier
+---------------
+
+.. class:: QSocketNotifier
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsocketnotifier.html>`_
diff --git a/doc/sphinx/api/qsortfilterproxymodel.rst b/doc/sphinx/api/qsortfilterproxymodel.rst
new file mode 100644
index 0000000..c483b77
--- /dev/null
+++ b/doc/sphinx/api/qsortfilterproxymodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSortFilterProxyModel
+---------------------
+
+.. class:: QSortFilterProxyModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsortfilterproxymodel.html>`_
diff --git a/doc/sphinx/api/qsound.rst b/doc/sphinx/api/qsound.rst
new file mode 100644
index 0000000..7f758cf
--- /dev/null
+++ b/doc/sphinx/api/qsound.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QSound
+------
+
+.. class:: QSound
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsound.html>`_
diff --git a/doc/sphinx/api/qsoundeffect.rst b/doc/sphinx/api/qsoundeffect.rst
new file mode 100644
index 0000000..795b3c6
--- /dev/null
+++ b/doc/sphinx/api/qsoundeffect.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QSoundEffect
+------------
+
+.. class:: QSoundEffect
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsoundeffect.html>`_
diff --git a/doc/sphinx/api/qsourcelocation.rst b/doc/sphinx/api/qsourcelocation.rst
new file mode 100644
index 0000000..132d957
--- /dev/null
+++ b/doc/sphinx/api/qsourcelocation.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QSourceLocation
+---------------
+
+.. class:: QSourceLocation
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsourcelocation.html>`_
diff --git a/doc/sphinx/api/qspaceritem.rst b/doc/sphinx/api/qspaceritem.rst
new file mode 100644
index 0000000..96cd32f
--- /dev/null
+++ b/doc/sphinx/api/qspaceritem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QSpacerItem
+-----------
+
+.. class:: QSpacerItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qspaceritem.html>`_
diff --git a/doc/sphinx/api/qspinbox.rst b/doc/sphinx/api/qspinbox.rst
new file mode 100644
index 0000000..ec08aea
--- /dev/null
+++ b/doc/sphinx/api/qspinbox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QSpinBox
+--------
+
+.. class:: QSpinBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qspinbox.html>`_
diff --git a/doc/sphinx/api/qsplashscreen.rst b/doc/sphinx/api/qsplashscreen.rst
new file mode 100644
index 0000000..ab5a751
--- /dev/null
+++ b/doc/sphinx/api/qsplashscreen.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QSplashScreen
+-------------
+
+.. class:: QSplashScreen
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsplashscreen.html>`_
diff --git a/doc/sphinx/api/qsplitter.rst b/doc/sphinx/api/qsplitter.rst
new file mode 100644
index 0000000..d7d833a
--- /dev/null
+++ b/doc/sphinx/api/qsplitter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QSplitter
+---------
+
+.. class:: QSplitter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsplitter.html>`_
diff --git a/doc/sphinx/api/qsplitterhandle.rst b/doc/sphinx/api/qsplitterhandle.rst
new file mode 100644
index 0000000..bca4cee
--- /dev/null
+++ b/doc/sphinx/api/qsplitterhandle.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QSplitterHandle
+---------------
+
+.. class:: QSplitterHandle
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsplitterhandle.html>`_
diff --git a/doc/sphinx/api/qsql.rst b/doc/sphinx/api/qsql.rst
new file mode 100644
index 0000000..2a1aaa5
--- /dev/null
+++ b/doc/sphinx/api/qsql.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSql
+----
+
+.. class:: QSql
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsql.html>`_
diff --git a/doc/sphinx/api/qsqldatabase.rst b/doc/sphinx/api/qsqldatabase.rst
new file mode 100644
index 0000000..8b2f1b9
--- /dev/null
+++ b/doc/sphinx/api/qsqldatabase.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlDatabase
+------------
+
+.. class:: QSqlDatabase
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqldatabase.html>`_
diff --git a/doc/sphinx/api/qsqldriver.rst b/doc/sphinx/api/qsqldriver.rst
new file mode 100644
index 0000000..836bb9c
--- /dev/null
+++ b/doc/sphinx/api/qsqldriver.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlDriver
+----------
+
+.. class:: QSqlDriver
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqldriver.html>`_
diff --git a/doc/sphinx/api/qsqldrivercreatorbase.rst b/doc/sphinx/api/qsqldrivercreatorbase.rst
new file mode 100644
index 0000000..624822f
--- /dev/null
+++ b/doc/sphinx/api/qsqldrivercreatorbase.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlDriverCreatorBase
+---------------------
+
+.. class:: QSqlDriverCreatorBase
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqldrivercreatorbase.html>`_
diff --git a/doc/sphinx/api/qsqlerror.rst b/doc/sphinx/api/qsqlerror.rst
new file mode 100644
index 0000000..ea97888
--- /dev/null
+++ b/doc/sphinx/api/qsqlerror.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlError
+---------
+
+.. class:: QSqlError
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqlerror.html>`_
diff --git a/doc/sphinx/api/qsqlfield.rst b/doc/sphinx/api/qsqlfield.rst
new file mode 100644
index 0000000..8d4d326
--- /dev/null
+++ b/doc/sphinx/api/qsqlfield.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlField
+---------
+
+.. class:: QSqlField
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqlfield.html>`_
diff --git a/doc/sphinx/api/qsqlindex.rst b/doc/sphinx/api/qsqlindex.rst
new file mode 100644
index 0000000..cd69321
--- /dev/null
+++ b/doc/sphinx/api/qsqlindex.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlIndex
+---------
+
+.. class:: QSqlIndex
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqlindex.html>`_
diff --git a/doc/sphinx/api/qsqlquery.rst b/doc/sphinx/api/qsqlquery.rst
new file mode 100644
index 0000000..7b5b9c4
--- /dev/null
+++ b/doc/sphinx/api/qsqlquery.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlQuery
+---------
+
+.. class:: QSqlQuery
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqlquery.html>`_
diff --git a/doc/sphinx/api/qsqlquerymodel.rst b/doc/sphinx/api/qsqlquerymodel.rst
new file mode 100644
index 0000000..a2b8ab0
--- /dev/null
+++ b/doc/sphinx/api/qsqlquerymodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlQueryModel
+--------------
+
+.. class:: QSqlQueryModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqlquerymodel.html>`_
diff --git a/doc/sphinx/api/qsqlrecord.rst b/doc/sphinx/api/qsqlrecord.rst
new file mode 100644
index 0000000..78649f1
--- /dev/null
+++ b/doc/sphinx/api/qsqlrecord.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlRecord
+----------
+
+.. class:: QSqlRecord
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqlrecord.html>`_
diff --git a/doc/sphinx/api/qsqlrelation.rst b/doc/sphinx/api/qsqlrelation.rst
new file mode 100644
index 0000000..e819ec9
--- /dev/null
+++ b/doc/sphinx/api/qsqlrelation.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlRelation
+------------
+
+.. class:: QSqlRelation
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqlrelation.html>`_
diff --git a/doc/sphinx/api/qsqlrelationaldelegate.rst b/doc/sphinx/api/qsqlrelationaldelegate.rst
new file mode 100644
index 0000000..3a1eb3c
--- /dev/null
+++ b/doc/sphinx/api/qsqlrelationaldelegate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlRelationalDelegate
+----------------------
+
+.. class:: QSqlRelationalDelegate
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqlrelationaldelegate.html>`_
diff --git a/doc/sphinx/api/qsqlrelationaltablemodel.rst b/doc/sphinx/api/qsqlrelationaltablemodel.rst
new file mode 100644
index 0000000..5d04f91
--- /dev/null
+++ b/doc/sphinx/api/qsqlrelationaltablemodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlRelationalTableModel
+------------------------
+
+.. class:: QSqlRelationalTableModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqlrelationaltablemodel.html>`_
diff --git a/doc/sphinx/api/qsqlresult.rst b/doc/sphinx/api/qsqlresult.rst
new file mode 100644
index 0000000..bdb8bf5
--- /dev/null
+++ b/doc/sphinx/api/qsqlresult.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlResult
+----------
+
+.. class:: QSqlResult
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqlresult.html>`_
diff --git a/doc/sphinx/api/qsqltablemodel.rst b/doc/sphinx/api/qsqltablemodel.rst
new file mode 100644
index 0000000..841432c
--- /dev/null
+++ b/doc/sphinx/api/qsqltablemodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSql
+
+QSqlTableModel
+--------------
+
+.. class:: QSqlTableModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsqltablemodel.html>`_
diff --git a/doc/sphinx/api/qssl.rst b/doc/sphinx/api/qssl.rst
new file mode 100644
index 0000000..8881015
--- /dev/null
+++ b/doc/sphinx/api/qssl.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QSsl
+----
+
+.. class:: QSsl
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qssl.html>`_
diff --git a/doc/sphinx/api/qsslcertificate.rst b/doc/sphinx/api/qsslcertificate.rst
new file mode 100644
index 0000000..70364fe
--- /dev/null
+++ b/doc/sphinx/api/qsslcertificate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QSslCertificate
+---------------
+
+.. class:: QSslCertificate
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsslcertificate.html>`_
diff --git a/doc/sphinx/api/qsslcertificateextension.rst b/doc/sphinx/api/qsslcertificateextension.rst
new file mode 100644
index 0000000..bf65861
--- /dev/null
+++ b/doc/sphinx/api/qsslcertificateextension.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QSslCertificateExtension
+------------------------
+
+.. class:: QSslCertificateExtension
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsslcertificateextension.html>`_
diff --git a/doc/sphinx/api/qsslcipher.rst b/doc/sphinx/api/qsslcipher.rst
new file mode 100644
index 0000000..5e71933
--- /dev/null
+++ b/doc/sphinx/api/qsslcipher.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QSslCipher
+----------
+
+.. class:: QSslCipher
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsslcipher.html>`_
diff --git a/doc/sphinx/api/qsslconfiguration.rst b/doc/sphinx/api/qsslconfiguration.rst
new file mode 100644
index 0000000..92a35ca
--- /dev/null
+++ b/doc/sphinx/api/qsslconfiguration.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QSslConfiguration
+-----------------
+
+.. class:: QSslConfiguration
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsslconfiguration.html>`_
diff --git a/doc/sphinx/api/qsslerror.rst b/doc/sphinx/api/qsslerror.rst
new file mode 100644
index 0000000..6bb7ba1
--- /dev/null
+++ b/doc/sphinx/api/qsslerror.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QSslError
+---------
+
+.. class:: QSslError
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsslerror.html>`_
diff --git a/doc/sphinx/api/qsslkey.rst b/doc/sphinx/api/qsslkey.rst
new file mode 100644
index 0000000..ea9f6fb
--- /dev/null
+++ b/doc/sphinx/api/qsslkey.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QSslKey
+-------
+
+.. class:: QSslKey
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsslkey.html>`_
diff --git a/doc/sphinx/api/qsslsocket.rst b/doc/sphinx/api/qsslsocket.rst
new file mode 100644
index 0000000..87847cf
--- /dev/null
+++ b/doc/sphinx/api/qsslsocket.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QSslSocket
+----------
+
+.. class:: QSslSocket
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsslsocket.html>`_
diff --git a/doc/sphinx/api/qstackedlayout.rst b/doc/sphinx/api/qstackedlayout.rst
new file mode 100644
index 0000000..59b4cb9
--- /dev/null
+++ b/doc/sphinx/api/qstackedlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStackedLayout
+--------------
+
+.. class:: QStackedLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstackedlayout.html>`_
diff --git a/doc/sphinx/api/qstackedwidget.rst b/doc/sphinx/api/qstackedwidget.rst
new file mode 100644
index 0000000..2f87bc6
--- /dev/null
+++ b/doc/sphinx/api/qstackedwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStackedWidget
+--------------
+
+.. class:: QStackedWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstackedwidget.html>`_
diff --git a/doc/sphinx/api/qstandarditem.rst b/doc/sphinx/api/qstandarditem.rst
new file mode 100644
index 0000000..79cda48
--- /dev/null
+++ b/doc/sphinx/api/qstandarditem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QStandardItem
+-------------
+
+.. class:: QStandardItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstandarditem.html>`_
diff --git a/doc/sphinx/api/qstandarditemmodel.rst b/doc/sphinx/api/qstandarditemmodel.rst
new file mode 100644
index 0000000..a501f8e
--- /dev/null
+++ b/doc/sphinx/api/qstandarditemmodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QStandardItemModel
+------------------
+
+.. class:: QStandardItemModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstandarditemmodel.html>`_
diff --git a/doc/sphinx/api/qstandardpaths.rst b/doc/sphinx/api/qstandardpaths.rst
new file mode 100644
index 0000000..9fc3951
--- /dev/null
+++ b/doc/sphinx/api/qstandardpaths.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QStandardPaths
+--------------
+
+.. class:: QStandardPaths
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstandardpaths.html>`_
diff --git a/doc/sphinx/api/qstate.rst b/doc/sphinx/api/qstate.rst
new file mode 100644
index 0000000..7b45e7e
--- /dev/null
+++ b/doc/sphinx/api/qstate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QState
+------
+
+.. class:: QState
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstate.html>`_
diff --git a/doc/sphinx/api/qstatemachine.rst b/doc/sphinx/api/qstatemachine.rst
new file mode 100644
index 0000000..b5a490e
--- /dev/null
+++ b/doc/sphinx/api/qstatemachine.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QStateMachine
+-------------
+
+.. class:: QStateMachine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstatemachine.html>`_
diff --git a/doc/sphinx/api/qstatictext.rst b/doc/sphinx/api/qstatictext.rst
new file mode 100644
index 0000000..1be11fe
--- /dev/null
+++ b/doc/sphinx/api/qstatictext.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QStaticText
+-----------
+
+.. class:: QStaticText
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstatictext.html>`_
diff --git a/doc/sphinx/api/qstatusbar.rst b/doc/sphinx/api/qstatusbar.rst
new file mode 100644
index 0000000..e5af317
--- /dev/null
+++ b/doc/sphinx/api/qstatusbar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStatusBar
+----------
+
+.. class:: QStatusBar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstatusbar.html>`_
diff --git a/doc/sphinx/api/qstatustipevent.rst b/doc/sphinx/api/qstatustipevent.rst
new file mode 100644
index 0000000..19e6ec9
--- /dev/null
+++ b/doc/sphinx/api/qstatustipevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QStatusTipEvent
+---------------
+
+.. class:: QStatusTipEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstatustipevent.html>`_
diff --git a/doc/sphinx/api/qstringlistmodel.rst b/doc/sphinx/api/qstringlistmodel.rst
new file mode 100644
index 0000000..1666cad
--- /dev/null
+++ b/doc/sphinx/api/qstringlistmodel.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QStringListModel
+----------------
+
+.. class:: QStringListModel
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstringlistmodel.html>`_
diff --git a/doc/sphinx/api/qstyle.rst b/doc/sphinx/api/qstyle.rst
new file mode 100644
index 0000000..615656b
--- /dev/null
+++ b/doc/sphinx/api/qstyle.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyle
+------
+
+.. class:: QStyle
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyle.html>`_
diff --git a/doc/sphinx/api/qstyleditemdelegate.rst b/doc/sphinx/api/qstyleditemdelegate.rst
new file mode 100644
index 0000000..dde5b9b
--- /dev/null
+++ b/doc/sphinx/api/qstyleditemdelegate.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyledItemDelegate
+-------------------
+
+.. class:: QStyledItemDelegate
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleditemdelegate.html>`_
diff --git a/doc/sphinx/api/qstylefactory.rst b/doc/sphinx/api/qstylefactory.rst
new file mode 100644
index 0000000..7e6f0f9
--- /dev/null
+++ b/doc/sphinx/api/qstylefactory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleFactory
+-------------
+
+.. class:: QStyleFactory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstylefactory.html>`_
diff --git a/doc/sphinx/api/qstylehintreturn.rst b/doc/sphinx/api/qstylehintreturn.rst
new file mode 100644
index 0000000..5852191
--- /dev/null
+++ b/doc/sphinx/api/qstylehintreturn.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleHintReturn
+----------------
+
+.. class:: QStyleHintReturn
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstylehintreturn.html>`_
diff --git a/doc/sphinx/api/qstylehintreturnmask.rst b/doc/sphinx/api/qstylehintreturnmask.rst
new file mode 100644
index 0000000..25da199
--- /dev/null
+++ b/doc/sphinx/api/qstylehintreturnmask.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleHintReturnMask
+--------------------
+
+.. class:: QStyleHintReturnMask
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstylehintreturnmask.html>`_
diff --git a/doc/sphinx/api/qstylehintreturnvariant.rst b/doc/sphinx/api/qstylehintreturnvariant.rst
new file mode 100644
index 0000000..5b27d39
--- /dev/null
+++ b/doc/sphinx/api/qstylehintreturnvariant.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleHintReturnVariant
+-----------------------
+
+.. class:: QStyleHintReturnVariant
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstylehintreturnvariant.html>`_
diff --git a/doc/sphinx/api/qstylehints.rst b/doc/sphinx/api/qstylehints.rst
new file mode 100644
index 0000000..54775c1
--- /dev/null
+++ b/doc/sphinx/api/qstylehints.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QStyleHints
+-----------
+
+.. class:: QStyleHints
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstylehints.html>`_
diff --git a/doc/sphinx/api/qstyleoption.rst b/doc/sphinx/api/qstyleoption.rst
new file mode 100644
index 0000000..e2abacf
--- /dev/null
+++ b/doc/sphinx/api/qstyleoption.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOption
+------------
+
+.. class:: QStyleOption
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoption.html>`_
diff --git a/doc/sphinx/api/qstyleoptionbutton.rst b/doc/sphinx/api/qstyleoptionbutton.rst
new file mode 100644
index 0000000..f5545dc
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionbutton.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionButton
+------------------
+
+.. class:: QStyleOptionButton
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionbutton.html>`_
diff --git a/doc/sphinx/api/qstyleoptioncombobox.rst b/doc/sphinx/api/qstyleoptioncombobox.rst
new file mode 100644
index 0000000..dba9d1d
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptioncombobox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionComboBox
+--------------------
+
+.. class:: QStyleOptionComboBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptioncombobox.html>`_
diff --git a/doc/sphinx/api/qstyleoptioncomplex.rst b/doc/sphinx/api/qstyleoptioncomplex.rst
new file mode 100644
index 0000000..2f0c3bf
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptioncomplex.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionComplex
+-------------------
+
+.. class:: QStyleOptionComplex
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptioncomplex.html>`_
diff --git a/doc/sphinx/api/qstyleoptiondockwidget.rst b/doc/sphinx/api/qstyleoptiondockwidget.rst
new file mode 100644
index 0000000..e2271a7
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptiondockwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionDockWidget
+----------------------
+
+.. class:: QStyleOptionDockWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptiondockwidget.html>`_
diff --git a/doc/sphinx/api/qstyleoptionfocusrect.rst b/doc/sphinx/api/qstyleoptionfocusrect.rst
new file mode 100644
index 0000000..f47f490
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionfocusrect.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionFocusRect
+---------------------
+
+.. class:: QStyleOptionFocusRect
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionfocusrect.html>`_
diff --git a/doc/sphinx/api/qstyleoptionframe.rst b/doc/sphinx/api/qstyleoptionframe.rst
new file mode 100644
index 0000000..1283e7a
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionframe.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionFrame
+-----------------
+
+.. class:: QStyleOptionFrame
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionframe.html>`_
diff --git a/doc/sphinx/api/qstyleoptiongraphicsitem.rst b/doc/sphinx/api/qstyleoptiongraphicsitem.rst
new file mode 100644
index 0000000..dded95c
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptiongraphicsitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionGraphicsItem
+------------------------
+
+.. class:: QStyleOptionGraphicsItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptiongraphicsitem.html>`_
diff --git a/doc/sphinx/api/qstyleoptiongroupbox.rst b/doc/sphinx/api/qstyleoptiongroupbox.rst
new file mode 100644
index 0000000..3a575c3
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptiongroupbox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionGroupBox
+--------------------
+
+.. class:: QStyleOptionGroupBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptiongroupbox.html>`_
diff --git a/doc/sphinx/api/qstyleoptionheader.rst b/doc/sphinx/api/qstyleoptionheader.rst
new file mode 100644
index 0000000..45a50e0
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionheader.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionHeader
+------------------
+
+.. class:: QStyleOptionHeader
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionheader.html>`_
diff --git a/doc/sphinx/api/qstyleoptionmenuitem.rst b/doc/sphinx/api/qstyleoptionmenuitem.rst
new file mode 100644
index 0000000..9f59bea
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionmenuitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionMenuItem
+--------------------
+
+.. class:: QStyleOptionMenuItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionmenuitem.html>`_
diff --git a/doc/sphinx/api/qstyleoptionprogressbar.rst b/doc/sphinx/api/qstyleoptionprogressbar.rst
new file mode 100644
index 0000000..f3f269c
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionprogressbar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionProgressBar
+-----------------------
+
+.. class:: QStyleOptionProgressBar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionprogressbar.html>`_
diff --git a/doc/sphinx/api/qstyleoptionrubberband.rst b/doc/sphinx/api/qstyleoptionrubberband.rst
new file mode 100644
index 0000000..859a7f2
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionrubberband.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionRubberBand
+----------------------
+
+.. class:: QStyleOptionRubberBand
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionrubberband.html>`_
diff --git a/doc/sphinx/api/qstyleoptionsizegrip.rst b/doc/sphinx/api/qstyleoptionsizegrip.rst
new file mode 100644
index 0000000..347fdf6
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionsizegrip.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionSizeGrip
+--------------------
+
+.. class:: QStyleOptionSizeGrip
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionsizegrip.html>`_
diff --git a/doc/sphinx/api/qstyleoptionslider.rst b/doc/sphinx/api/qstyleoptionslider.rst
new file mode 100644
index 0000000..0d171a9
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionslider.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionSlider
+------------------
+
+.. class:: QStyleOptionSlider
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionslider.html>`_
diff --git a/doc/sphinx/api/qstyleoptionspinbox.rst b/doc/sphinx/api/qstyleoptionspinbox.rst
new file mode 100644
index 0000000..3825328
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionspinbox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionSpinBox
+-------------------
+
+.. class:: QStyleOptionSpinBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionspinbox.html>`_
diff --git a/doc/sphinx/api/qstyleoptiontab.rst b/doc/sphinx/api/qstyleoptiontab.rst
new file mode 100644
index 0000000..ef9168d
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptiontab.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionTab
+---------------
+
+.. class:: QStyleOptionTab
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptiontab.html>`_
diff --git a/doc/sphinx/api/qstyleoptiontabbarbase.rst b/doc/sphinx/api/qstyleoptiontabbarbase.rst
new file mode 100644
index 0000000..e83ee68
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptiontabbarbase.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionTabBarBase
+----------------------
+
+.. class:: QStyleOptionTabBarBase
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptiontabbarbase.html>`_
diff --git a/doc/sphinx/api/qstyleoptiontabwidgetframe.rst b/doc/sphinx/api/qstyleoptiontabwidgetframe.rst
new file mode 100644
index 0000000..da474ea
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptiontabwidgetframe.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionTabWidgetFrame
+--------------------------
+
+.. class:: QStyleOptionTabWidgetFrame
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptiontabwidgetframe.html>`_
diff --git a/doc/sphinx/api/qstyleoptiontitlebar.rst b/doc/sphinx/api/qstyleoptiontitlebar.rst
new file mode 100644
index 0000000..716179b
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptiontitlebar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionTitleBar
+--------------------
+
+.. class:: QStyleOptionTitleBar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptiontitlebar.html>`_
diff --git a/doc/sphinx/api/qstyleoptiontoolbar.rst b/doc/sphinx/api/qstyleoptiontoolbar.rst
new file mode 100644
index 0000000..843e961
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptiontoolbar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionToolBar
+-------------------
+
+.. class:: QStyleOptionToolBar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptiontoolbar.html>`_
diff --git a/doc/sphinx/api/qstyleoptiontoolbox.rst b/doc/sphinx/api/qstyleoptiontoolbox.rst
new file mode 100644
index 0000000..88baa5e
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptiontoolbox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionToolBox
+-------------------
+
+.. class:: QStyleOptionToolBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptiontoolbox.html>`_
diff --git a/doc/sphinx/api/qstyleoptiontoolbutton.rst b/doc/sphinx/api/qstyleoptiontoolbutton.rst
new file mode 100644
index 0000000..34d1bbe
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptiontoolbutton.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionToolButton
+----------------------
+
+.. class:: QStyleOptionToolButton
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptiontoolbutton.html>`_
diff --git a/doc/sphinx/api/qstyleoptionviewitem.rst b/doc/sphinx/api/qstyleoptionviewitem.rst
new file mode 100644
index 0000000..b8f33f7
--- /dev/null
+++ b/doc/sphinx/api/qstyleoptionviewitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStyleOptionViewItem
+--------------------
+
+.. class:: QStyleOptionViewItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstyleoptionviewitem.html>`_
diff --git a/doc/sphinx/api/qstylepainter.rst b/doc/sphinx/api/qstylepainter.rst
new file mode 100644
index 0000000..6c288b8
--- /dev/null
+++ b/doc/sphinx/api/qstylepainter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QStylePainter
+-------------
+
+.. class:: QStylePainter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qstylepainter.html>`_
diff --git a/doc/sphinx/api/qsurface.rst b/doc/sphinx/api/qsurface.rst
new file mode 100644
index 0000000..1e6c517
--- /dev/null
+++ b/doc/sphinx/api/qsurface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QSurface
+--------
+
+.. class:: QSurface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsurface.html>`_
diff --git a/doc/sphinx/api/qsurfaceformat.rst b/doc/sphinx/api/qsurfaceformat.rst
new file mode 100644
index 0000000..38d3267
--- /dev/null
+++ b/doc/sphinx/api/qsurfaceformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QSurfaceFormat
+--------------
+
+.. class:: QSurfaceFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsurfaceformat.html>`_
diff --git a/doc/sphinx/api/qsvggenerator.rst b/doc/sphinx/api/qsvggenerator.rst
new file mode 100644
index 0000000..88ac8ac
--- /dev/null
+++ b/doc/sphinx/api/qsvggenerator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSvg
+
+QSvgGenerator
+-------------
+
+.. class:: QSvgGenerator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsvggenerator.html>`_
diff --git a/doc/sphinx/api/qsvgrenderer.rst b/doc/sphinx/api/qsvgrenderer.rst
new file mode 100644
index 0000000..e10966b
--- /dev/null
+++ b/doc/sphinx/api/qsvgrenderer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSvg
+
+QSvgRenderer
+------------
+
+.. class:: QSvgRenderer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsvgrenderer.html>`_
diff --git a/doc/sphinx/api/qsvgwidget.rst b/doc/sphinx/api/qsvgwidget.rst
new file mode 100644
index 0000000..89b7ae5
--- /dev/null
+++ b/doc/sphinx/api/qsvgwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSvg
+
+QSvgWidget
+----------
+
+.. class:: QSvgWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsvgwidget.html>`_
diff --git a/doc/sphinx/api/qswipegesture.rst b/doc/sphinx/api/qswipegesture.rst
new file mode 100644
index 0000000..12df7ea
--- /dev/null
+++ b/doc/sphinx/api/qswipegesture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QSwipeGesture
+-------------
+
+.. class:: QSwipeGesture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qswipegesture.html>`_
diff --git a/doc/sphinx/api/qsyntaxhighlighter.rst b/doc/sphinx/api/qsyntaxhighlighter.rst
new file mode 100644
index 0000000..5c8ba2c
--- /dev/null
+++ b/doc/sphinx/api/qsyntaxhighlighter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QSyntaxHighlighter
+------------------
+
+.. class:: QSyntaxHighlighter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsyntaxhighlighter.html>`_
diff --git a/doc/sphinx/api/qsysinfo.rst b/doc/sphinx/api/qsysinfo.rst
new file mode 100644
index 0000000..9afdeaf
--- /dev/null
+++ b/doc/sphinx/api/qsysinfo.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSysInfo
+--------
+
+.. class:: QSysInfo
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsysinfo.html>`_
diff --git a/doc/sphinx/api/qsystemsemaphore.rst b/doc/sphinx/api/qsystemsemaphore.rst
new file mode 100644
index 0000000..a86c2db
--- /dev/null
+++ b/doc/sphinx/api/qsystemsemaphore.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QSystemSemaphore
+----------------
+
+.. class:: QSystemSemaphore
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsystemsemaphore.html>`_
diff --git a/doc/sphinx/api/qsystemtrayicon.rst b/doc/sphinx/api/qsystemtrayicon.rst
new file mode 100644
index 0000000..2980854
--- /dev/null
+++ b/doc/sphinx/api/qsystemtrayicon.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QSystemTrayIcon
+---------------
+
+.. class:: QSystemTrayIcon
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qsystemtrayicon.html>`_
diff --git a/doc/sphinx/api/qt.rst b/doc/sphinx/api/qt.rst
new file mode 100644
index 0000000..e5a3551
--- /dev/null
+++ b/doc/sphinx/api/qt.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+Qt
+--
+
+.. class:: Qt
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qt.html>`_
diff --git a/doc/sphinx/api/qtabbar.rst b/doc/sphinx/api/qtabbar.rst
new file mode 100644
index 0000000..52c912a
--- /dev/null
+++ b/doc/sphinx/api/qtabbar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTabBar
+-------
+
+.. class:: QTabBar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtabbar.html>`_
diff --git a/doc/sphinx/api/qtabletevent.rst b/doc/sphinx/api/qtabletevent.rst
new file mode 100644
index 0000000..de58c24
--- /dev/null
+++ b/doc/sphinx/api/qtabletevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTabletEvent
+------------
+
+.. class:: QTabletEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtabletevent.html>`_
diff --git a/doc/sphinx/api/qtableview.rst b/doc/sphinx/api/qtableview.rst
new file mode 100644
index 0000000..f2f2e6e
--- /dev/null
+++ b/doc/sphinx/api/qtableview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTableView
+----------
+
+.. class:: QTableView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtableview.html>`_
diff --git a/doc/sphinx/api/qtablewidget.rst b/doc/sphinx/api/qtablewidget.rst
new file mode 100644
index 0000000..7911add
--- /dev/null
+++ b/doc/sphinx/api/qtablewidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTableWidget
+------------
+
+.. class:: QTableWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtablewidget.html>`_
diff --git a/doc/sphinx/api/qtablewidgetitem.rst b/doc/sphinx/api/qtablewidgetitem.rst
new file mode 100644
index 0000000..8baff96
--- /dev/null
+++ b/doc/sphinx/api/qtablewidgetitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTableWidgetItem
+----------------
+
+.. class:: QTableWidgetItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtablewidgetitem.html>`_
diff --git a/doc/sphinx/api/qtablewidgetselectionrange.rst b/doc/sphinx/api/qtablewidgetselectionrange.rst
new file mode 100644
index 0000000..dbe3dc0
--- /dev/null
+++ b/doc/sphinx/api/qtablewidgetselectionrange.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTableWidgetSelectionRange
+--------------------------
+
+.. class:: QTableWidgetSelectionRange
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtablewidgetselectionrange.html>`_
diff --git a/doc/sphinx/api/qtabwidget.rst b/doc/sphinx/api/qtabwidget.rst
new file mode 100644
index 0000000..c0c6610
--- /dev/null
+++ b/doc/sphinx/api/qtabwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTabWidget
+----------
+
+.. class:: QTabWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtabwidget.html>`_
diff --git a/doc/sphinx/api/qtapandholdgesture.rst b/doc/sphinx/api/qtapandholdgesture.rst
new file mode 100644
index 0000000..e8dacf5
--- /dev/null
+++ b/doc/sphinx/api/qtapandholdgesture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTapAndHoldGesture
+------------------
+
+.. class:: QTapAndHoldGesture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtapandholdgesture.html>`_
diff --git a/doc/sphinx/api/qtapfilter.rst b/doc/sphinx/api/qtapfilter.rst
new file mode 100644
index 0000000..139f3ff
--- /dev/null
+++ b/doc/sphinx/api/qtapfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QTapFilter
+----------
+
+.. class:: QTapFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtapfilter.html>`_
diff --git a/doc/sphinx/api/qtapgesture.rst b/doc/sphinx/api/qtapgesture.rst
new file mode 100644
index 0000000..f159018
--- /dev/null
+++ b/doc/sphinx/api/qtapgesture.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTapGesture
+-----------
+
+.. class:: QTapGesture
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtapgesture.html>`_
diff --git a/doc/sphinx/api/qtapreading.rst b/doc/sphinx/api/qtapreading.rst
new file mode 100644
index 0000000..d7be54f
--- /dev/null
+++ b/doc/sphinx/api/qtapreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QTapReading
+-----------
+
+.. class:: QTapReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtapreading.html>`_
diff --git a/doc/sphinx/api/qtapsensor.rst b/doc/sphinx/api/qtapsensor.rst
new file mode 100644
index 0000000..160fbc2
--- /dev/null
+++ b/doc/sphinx/api/qtapsensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QTapSensor
+----------
+
+.. class:: QTapSensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtapsensor.html>`_
diff --git a/doc/sphinx/api/qtcpserver.rst b/doc/sphinx/api/qtcpserver.rst
new file mode 100644
index 0000000..2c3c46e
--- /dev/null
+++ b/doc/sphinx/api/qtcpserver.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QTcpServer
+----------
+
+.. class:: QTcpServer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtcpserver.html>`_
diff --git a/doc/sphinx/api/qtcpsocket.rst b/doc/sphinx/api/qtcpsocket.rst
new file mode 100644
index 0000000..a6834ed
--- /dev/null
+++ b/doc/sphinx/api/qtcpsocket.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QTcpSocket
+----------
+
+.. class:: QTcpSocket
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtcpsocket.html>`_
diff --git a/doc/sphinx/api/qtemporarydir.rst b/doc/sphinx/api/qtemporarydir.rst
new file mode 100644
index 0000000..3fe1fca
--- /dev/null
+++ b/doc/sphinx/api/qtemporarydir.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTemporaryDir
+-------------
+
+.. class:: QTemporaryDir
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtemporarydir.html>`_
diff --git a/doc/sphinx/api/qtemporaryfile.rst b/doc/sphinx/api/qtemporaryfile.rst
new file mode 100644
index 0000000..a8bea62
--- /dev/null
+++ b/doc/sphinx/api/qtemporaryfile.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTemporaryFile
+--------------
+
+.. class:: QTemporaryFile
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtemporaryfile.html>`_
diff --git a/doc/sphinx/api/qtest.rst b/doc/sphinx/api/qtest.rst
new file mode 100644
index 0000000..725212a
--- /dev/null
+++ b/doc/sphinx/api/qtest.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtTest
+
+QTest
+-----
+
+.. class:: QTest
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtest.html>`_
diff --git a/doc/sphinx/api/qtextblock.rst b/doc/sphinx/api/qtextblock.rst
new file mode 100644
index 0000000..fe17002
--- /dev/null
+++ b/doc/sphinx/api/qtextblock.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextBlock
+----------
+
+.. class:: QTextBlock
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextblock.html>`_
diff --git a/doc/sphinx/api/qtextblockformat.rst b/doc/sphinx/api/qtextblockformat.rst
new file mode 100644
index 0000000..dad1aa6
--- /dev/null
+++ b/doc/sphinx/api/qtextblockformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextBlockFormat
+----------------
+
+.. class:: QTextBlockFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextblockformat.html>`_
diff --git a/doc/sphinx/api/qtextblockgroup.rst b/doc/sphinx/api/qtextblockgroup.rst
new file mode 100644
index 0000000..8a2e099
--- /dev/null
+++ b/doc/sphinx/api/qtextblockgroup.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextBlockGroup
+---------------
+
+.. class:: QTextBlockGroup
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextblockgroup.html>`_
diff --git a/doc/sphinx/api/qtextblockuserdata.rst b/doc/sphinx/api/qtextblockuserdata.rst
new file mode 100644
index 0000000..a412849
--- /dev/null
+++ b/doc/sphinx/api/qtextblockuserdata.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextBlockUserData
+------------------
+
+.. class:: QTextBlockUserData
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextblockuserdata.html>`_
diff --git a/doc/sphinx/api/qtextboundaryfinder.rst b/doc/sphinx/api/qtextboundaryfinder.rst
new file mode 100644
index 0000000..9e8def5
--- /dev/null
+++ b/doc/sphinx/api/qtextboundaryfinder.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTextBoundaryFinder
+-------------------
+
+.. class:: QTextBoundaryFinder
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextboundaryfinder.html>`_
diff --git a/doc/sphinx/api/qtextbrowser.rst b/doc/sphinx/api/qtextbrowser.rst
new file mode 100644
index 0000000..dad2f9c
--- /dev/null
+++ b/doc/sphinx/api/qtextbrowser.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTextBrowser
+------------
+
+.. class:: QTextBrowser
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextbrowser.html>`_
diff --git a/doc/sphinx/api/qtextcharformat.rst b/doc/sphinx/api/qtextcharformat.rst
new file mode 100644
index 0000000..82beff5
--- /dev/null
+++ b/doc/sphinx/api/qtextcharformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextCharFormat
+---------------
+
+.. class:: QTextCharFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextcharformat.html>`_
diff --git a/doc/sphinx/api/qtextcodec.rst b/doc/sphinx/api/qtextcodec.rst
new file mode 100644
index 0000000..2b4cb8c
--- /dev/null
+++ b/doc/sphinx/api/qtextcodec.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTextCodec
+----------
+
+.. class:: QTextCodec
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextcodec.html>`_
diff --git a/doc/sphinx/api/qtextcursor.rst b/doc/sphinx/api/qtextcursor.rst
new file mode 100644
index 0000000..39216f4
--- /dev/null
+++ b/doc/sphinx/api/qtextcursor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextCursor
+-----------
+
+.. class:: QTextCursor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextcursor.html>`_
diff --git a/doc/sphinx/api/qtextdecoder.rst b/doc/sphinx/api/qtextdecoder.rst
new file mode 100644
index 0000000..62c3f66
--- /dev/null
+++ b/doc/sphinx/api/qtextdecoder.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTextDecoder
+------------
+
+.. class:: QTextDecoder
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextdecoder.html>`_
diff --git a/doc/sphinx/api/qtextdocument.rst b/doc/sphinx/api/qtextdocument.rst
new file mode 100644
index 0000000..6d48dd4
--- /dev/null
+++ b/doc/sphinx/api/qtextdocument.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextDocument
+-------------
+
+.. class:: QTextDocument
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextdocument.html>`_
diff --git a/doc/sphinx/api/qtextdocumentfragment.rst b/doc/sphinx/api/qtextdocumentfragment.rst
new file mode 100644
index 0000000..56ac484
--- /dev/null
+++ b/doc/sphinx/api/qtextdocumentfragment.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextDocumentFragment
+---------------------
+
+.. class:: QTextDocumentFragment
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextdocumentfragment.html>`_
diff --git a/doc/sphinx/api/qtextdocumentwriter.rst b/doc/sphinx/api/qtextdocumentwriter.rst
new file mode 100644
index 0000000..70a9e61
--- /dev/null
+++ b/doc/sphinx/api/qtextdocumentwriter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextDocumentWriter
+-------------------
+
+.. class:: QTextDocumentWriter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextdocumentwriter.html>`_
diff --git a/doc/sphinx/api/qtextedit.rst b/doc/sphinx/api/qtextedit.rst
new file mode 100644
index 0000000..cd31b9a
--- /dev/null
+++ b/doc/sphinx/api/qtextedit.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTextEdit
+---------
+
+.. class:: QTextEdit
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextedit.html>`_
diff --git a/doc/sphinx/api/qtextencoder.rst b/doc/sphinx/api/qtextencoder.rst
new file mode 100644
index 0000000..39e4a35
--- /dev/null
+++ b/doc/sphinx/api/qtextencoder.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTextEncoder
+------------
+
+.. class:: QTextEncoder
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextencoder.html>`_
diff --git a/doc/sphinx/api/qtextformat.rst b/doc/sphinx/api/qtextformat.rst
new file mode 100644
index 0000000..7e2f234
--- /dev/null
+++ b/doc/sphinx/api/qtextformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextFormat
+-----------
+
+.. class:: QTextFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextformat.html>`_
diff --git a/doc/sphinx/api/qtextfragment.rst b/doc/sphinx/api/qtextfragment.rst
new file mode 100644
index 0000000..73e9481
--- /dev/null
+++ b/doc/sphinx/api/qtextfragment.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextFragment
+-------------
+
+.. class:: QTextFragment
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextfragment.html>`_
diff --git a/doc/sphinx/api/qtextframe.rst b/doc/sphinx/api/qtextframe.rst
new file mode 100644
index 0000000..63cbedf
--- /dev/null
+++ b/doc/sphinx/api/qtextframe.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextFrame
+----------
+
+.. class:: QTextFrame
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextframe.html>`_
diff --git a/doc/sphinx/api/qtextframeformat.rst b/doc/sphinx/api/qtextframeformat.rst
new file mode 100644
index 0000000..6334b10
--- /dev/null
+++ b/doc/sphinx/api/qtextframeformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextFrameFormat
+----------------
+
+.. class:: QTextFrameFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextframeformat.html>`_
diff --git a/doc/sphinx/api/qtextimageformat.rst b/doc/sphinx/api/qtextimageformat.rst
new file mode 100644
index 0000000..f763d07
--- /dev/null
+++ b/doc/sphinx/api/qtextimageformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextImageFormat
+----------------
+
+.. class:: QTextImageFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextimageformat.html>`_
diff --git a/doc/sphinx/api/qtextinlineobject.rst b/doc/sphinx/api/qtextinlineobject.rst
new file mode 100644
index 0000000..f294528
--- /dev/null
+++ b/doc/sphinx/api/qtextinlineobject.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextInlineObject
+-----------------
+
+.. class:: QTextInlineObject
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextinlineobject.html>`_
diff --git a/doc/sphinx/api/qtextitem.rst b/doc/sphinx/api/qtextitem.rst
new file mode 100644
index 0000000..102ed52
--- /dev/null
+++ b/doc/sphinx/api/qtextitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextItem
+---------
+
+.. class:: QTextItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextitem.html>`_
diff --git a/doc/sphinx/api/qtextlayout.rst b/doc/sphinx/api/qtextlayout.rst
new file mode 100644
index 0000000..1326cd5
--- /dev/null
+++ b/doc/sphinx/api/qtextlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextLayout
+-----------
+
+.. class:: QTextLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextlayout.html>`_
diff --git a/doc/sphinx/api/qtextlength.rst b/doc/sphinx/api/qtextlength.rst
new file mode 100644
index 0000000..23e80b9
--- /dev/null
+++ b/doc/sphinx/api/qtextlength.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextLength
+-----------
+
+.. class:: QTextLength
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextlength.html>`_
diff --git a/doc/sphinx/api/qtextline.rst b/doc/sphinx/api/qtextline.rst
new file mode 100644
index 0000000..452181c
--- /dev/null
+++ b/doc/sphinx/api/qtextline.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextLine
+---------
+
+.. class:: QTextLine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextline.html>`_
diff --git a/doc/sphinx/api/qtextlist.rst b/doc/sphinx/api/qtextlist.rst
new file mode 100644
index 0000000..c47c8d2
--- /dev/null
+++ b/doc/sphinx/api/qtextlist.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextList
+---------
+
+.. class:: QTextList
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextlist.html>`_
diff --git a/doc/sphinx/api/qtextlistformat.rst b/doc/sphinx/api/qtextlistformat.rst
new file mode 100644
index 0000000..8792e8e
--- /dev/null
+++ b/doc/sphinx/api/qtextlistformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextListFormat
+---------------
+
+.. class:: QTextListFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextlistformat.html>`_
diff --git a/doc/sphinx/api/qtextobject.rst b/doc/sphinx/api/qtextobject.rst
new file mode 100644
index 0000000..f90d5b4
--- /dev/null
+++ b/doc/sphinx/api/qtextobject.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextObject
+-----------
+
+.. class:: QTextObject
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextobject.html>`_
diff --git a/doc/sphinx/api/qtextobjectinterface.rst b/doc/sphinx/api/qtextobjectinterface.rst
new file mode 100644
index 0000000..d6dde21
--- /dev/null
+++ b/doc/sphinx/api/qtextobjectinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextObjectInterface
+--------------------
+
+.. class:: QTextObjectInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextobjectinterface.html>`_
diff --git a/doc/sphinx/api/qtextoption.rst b/doc/sphinx/api/qtextoption.rst
new file mode 100644
index 0000000..8a929bc
--- /dev/null
+++ b/doc/sphinx/api/qtextoption.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextOption
+-----------
+
+.. class:: QTextOption
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextoption.html>`_
diff --git a/doc/sphinx/api/qtextstream.rst b/doc/sphinx/api/qtextstream.rst
new file mode 100644
index 0000000..f14f649
--- /dev/null
+++ b/doc/sphinx/api/qtextstream.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTextStream
+-----------
+
+.. class:: QTextStream
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextstream.html>`_
diff --git a/doc/sphinx/api/qtextstreammanipulator.rst b/doc/sphinx/api/qtextstreammanipulator.rst
new file mode 100644
index 0000000..c480a96
--- /dev/null
+++ b/doc/sphinx/api/qtextstreammanipulator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTextStreamManipulator
+----------------------
+
+.. class:: QTextStreamManipulator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtextstreammanipulator.html>`_
diff --git a/doc/sphinx/api/qtexttable.rst b/doc/sphinx/api/qtexttable.rst
new file mode 100644
index 0000000..9085151
--- /dev/null
+++ b/doc/sphinx/api/qtexttable.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextTable
+----------
+
+.. class:: QTextTable
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtexttable.html>`_
diff --git a/doc/sphinx/api/qtexttablecell.rst b/doc/sphinx/api/qtexttablecell.rst
new file mode 100644
index 0000000..5783bca
--- /dev/null
+++ b/doc/sphinx/api/qtexttablecell.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextTableCell
+--------------
+
+.. class:: QTextTableCell
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtexttablecell.html>`_
diff --git a/doc/sphinx/api/qtexttablecellformat.rst b/doc/sphinx/api/qtexttablecellformat.rst
new file mode 100644
index 0000000..ed1c1aa
--- /dev/null
+++ b/doc/sphinx/api/qtexttablecellformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextTableCellFormat
+--------------------
+
+.. class:: QTextTableCellFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtexttablecellformat.html>`_
diff --git a/doc/sphinx/api/qtexttableformat.rst b/doc/sphinx/api/qtexttableformat.rst
new file mode 100644
index 0000000..a613705
--- /dev/null
+++ b/doc/sphinx/api/qtexttableformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTextTableFormat
+----------------
+
+.. class:: QTextTableFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtexttableformat.html>`_
diff --git a/doc/sphinx/api/qthread.rst b/doc/sphinx/api/qthread.rst
new file mode 100644
index 0000000..5c9acc8
--- /dev/null
+++ b/doc/sphinx/api/qthread.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QThread
+-------
+
+.. class:: QThread
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qthread.html>`_
diff --git a/doc/sphinx/api/qthreadpool.rst b/doc/sphinx/api/qthreadpool.rst
new file mode 100644
index 0000000..1f8ef15
--- /dev/null
+++ b/doc/sphinx/api/qthreadpool.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QThreadPool
+-----------
+
+.. class:: QThreadPool
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qthreadpool.html>`_
diff --git a/doc/sphinx/api/qtiltfilter.rst b/doc/sphinx/api/qtiltfilter.rst
new file mode 100644
index 0000000..900cdec
--- /dev/null
+++ b/doc/sphinx/api/qtiltfilter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QTiltFilter
+-----------
+
+.. class:: QTiltFilter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtiltfilter.html>`_
diff --git a/doc/sphinx/api/qtiltreading.rst b/doc/sphinx/api/qtiltreading.rst
new file mode 100644
index 0000000..d3e9c0d
--- /dev/null
+++ b/doc/sphinx/api/qtiltreading.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QTiltReading
+------------
+
+.. class:: QTiltReading
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtiltreading.html>`_
diff --git a/doc/sphinx/api/qtiltsensor.rst b/doc/sphinx/api/qtiltsensor.rst
new file mode 100644
index 0000000..462257d
--- /dev/null
+++ b/doc/sphinx/api/qtiltsensor.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtSensors
+
+QTiltSensor
+-----------
+
+.. class:: QTiltSensor
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtiltsensor.html>`_
diff --git a/doc/sphinx/api/qtime.rst b/doc/sphinx/api/qtime.rst
new file mode 100644
index 0000000..7adb22a
--- /dev/null
+++ b/doc/sphinx/api/qtime.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTime
+-----
+
+.. class:: QTime
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtime.html>`_
diff --git a/doc/sphinx/api/qtimeedit.rst b/doc/sphinx/api/qtimeedit.rst
new file mode 100644
index 0000000..9c99abf
--- /dev/null
+++ b/doc/sphinx/api/qtimeedit.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTimeEdit
+---------
+
+.. class:: QTimeEdit
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtimeedit.html>`_
diff --git a/doc/sphinx/api/qtimeline.rst b/doc/sphinx/api/qtimeline.rst
new file mode 100644
index 0000000..763598a
--- /dev/null
+++ b/doc/sphinx/api/qtimeline.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTimeLine
+---------
+
+.. class:: QTimeLine
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtimeline.html>`_
diff --git a/doc/sphinx/api/qtimer.rst b/doc/sphinx/api/qtimer.rst
new file mode 100644
index 0000000..5580fe3
--- /dev/null
+++ b/doc/sphinx/api/qtimer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTimer
+------
+
+.. class:: QTimer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtimer.html>`_
diff --git a/doc/sphinx/api/qtimerevent.rst b/doc/sphinx/api/qtimerevent.rst
new file mode 100644
index 0000000..2d1de9e
--- /dev/null
+++ b/doc/sphinx/api/qtimerevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTimerEvent
+-----------
+
+.. class:: QTimerEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtimerevent.html>`_
diff --git a/doc/sphinx/api/qtimezone.rst b/doc/sphinx/api/qtimezone.rst
new file mode 100644
index 0000000..c7e478d
--- /dev/null
+++ b/doc/sphinx/api/qtimezone.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTimeZone
+---------
+
+.. class:: QTimeZone
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtimezone.html>`_
diff --git a/doc/sphinx/api/qtoolbar.rst b/doc/sphinx/api/qtoolbar.rst
new file mode 100644
index 0000000..9607fb3
--- /dev/null
+++ b/doc/sphinx/api/qtoolbar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QToolBar
+--------
+
+.. class:: QToolBar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtoolbar.html>`_
diff --git a/doc/sphinx/api/qtoolbox.rst b/doc/sphinx/api/qtoolbox.rst
new file mode 100644
index 0000000..a40f083
--- /dev/null
+++ b/doc/sphinx/api/qtoolbox.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QToolBox
+--------
+
+.. class:: QToolBox
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtoolbox.html>`_
diff --git a/doc/sphinx/api/qtoolbutton.rst b/doc/sphinx/api/qtoolbutton.rst
new file mode 100644
index 0000000..631d067
--- /dev/null
+++ b/doc/sphinx/api/qtoolbutton.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QToolButton
+-----------
+
+.. class:: QToolButton
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtoolbutton.html>`_
diff --git a/doc/sphinx/api/qtooltip.rst b/doc/sphinx/api/qtooltip.rst
new file mode 100644
index 0000000..d36476a
--- /dev/null
+++ b/doc/sphinx/api/qtooltip.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QToolTip
+--------
+
+.. class:: QToolTip
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtooltip.html>`_
diff --git a/doc/sphinx/api/qtouchdevice.rst b/doc/sphinx/api/qtouchdevice.rst
new file mode 100644
index 0000000..2870b54
--- /dev/null
+++ b/doc/sphinx/api/qtouchdevice.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTouchDevice
+------------
+
+.. class:: QTouchDevice
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtouchdevice.html>`_
diff --git a/doc/sphinx/api/qtouchevent.rst b/doc/sphinx/api/qtouchevent.rst
new file mode 100644
index 0000000..1a09517
--- /dev/null
+++ b/doc/sphinx/api/qtouchevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTouchEvent
+-----------
+
+.. class:: QTouchEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtouchevent.html>`_
diff --git a/doc/sphinx/api/qtransform.rst b/doc/sphinx/api/qtransform.rst
new file mode 100644
index 0000000..42b90c4
--- /dev/null
+++ b/doc/sphinx/api/qtransform.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QTransform
+----------
+
+.. class:: QTransform
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtransform.html>`_
diff --git a/doc/sphinx/api/qtranslator.rst b/doc/sphinx/api/qtranslator.rst
new file mode 100644
index 0000000..6cf43d7
--- /dev/null
+++ b/doc/sphinx/api/qtranslator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QTranslator
+-----------
+
+.. class:: QTranslator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtranslator.html>`_
diff --git a/doc/sphinx/api/qtreeview.rst b/doc/sphinx/api/qtreeview.rst
new file mode 100644
index 0000000..3372f13
--- /dev/null
+++ b/doc/sphinx/api/qtreeview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTreeView
+---------
+
+.. class:: QTreeView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtreeview.html>`_
diff --git a/doc/sphinx/api/qtreewidget.rst b/doc/sphinx/api/qtreewidget.rst
new file mode 100644
index 0000000..a2cb29a
--- /dev/null
+++ b/doc/sphinx/api/qtreewidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTreeWidget
+-----------
+
+.. class:: QTreeWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtreewidget.html>`_
diff --git a/doc/sphinx/api/qtreewidgetitem.rst b/doc/sphinx/api/qtreewidgetitem.rst
new file mode 100644
index 0000000..836cdef
--- /dev/null
+++ b/doc/sphinx/api/qtreewidgetitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTreeWidgetItem
+---------------
+
+.. class:: QTreeWidgetItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtreewidgetitem.html>`_
diff --git a/doc/sphinx/api/qtreewidgetitemiterator.rst b/doc/sphinx/api/qtreewidgetitemiterator.rst
new file mode 100644
index 0000000..dc707e7
--- /dev/null
+++ b/doc/sphinx/api/qtreewidgetitemiterator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QTreeWidgetItemIterator
+-----------------------
+
+.. class:: QTreeWidgetItemIterator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtreewidgetitemiterator.html>`_
diff --git a/doc/sphinx/api/qtwin.rst b/doc/sphinx/api/qtwin.rst
new file mode 100644
index 0000000..bf01980
--- /dev/null
+++ b/doc/sphinx/api/qtwin.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWinExtras
+
+QtWin
+-----
+
+.. class:: QtWin
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qtwin.html>`_
diff --git a/doc/sphinx/api/qudpsocket.rst b/doc/sphinx/api/qudpsocket.rst
new file mode 100644
index 0000000..f324bce
--- /dev/null
+++ b/doc/sphinx/api/qudpsocket.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtNetwork
+
+QUdpSocket
+----------
+
+.. class:: QUdpSocket
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qudpsocket.html>`_
diff --git a/doc/sphinx/api/qundocommand.rst b/doc/sphinx/api/qundocommand.rst
new file mode 100644
index 0000000..ae6479a
--- /dev/null
+++ b/doc/sphinx/api/qundocommand.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QUndoCommand
+------------
+
+.. class:: QUndoCommand
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qundocommand.html>`_
diff --git a/doc/sphinx/api/qundogroup.rst b/doc/sphinx/api/qundogroup.rst
new file mode 100644
index 0000000..17ccd03
--- /dev/null
+++ b/doc/sphinx/api/qundogroup.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QUndoGroup
+----------
+
+.. class:: QUndoGroup
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qundogroup.html>`_
diff --git a/doc/sphinx/api/qundostack.rst b/doc/sphinx/api/qundostack.rst
new file mode 100644
index 0000000..26568a8
--- /dev/null
+++ b/doc/sphinx/api/qundostack.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QUndoStack
+----------
+
+.. class:: QUndoStack
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qundostack.html>`_
diff --git a/doc/sphinx/api/qundoview.rst b/doc/sphinx/api/qundoview.rst
new file mode 100644
index 0000000..a3888f3
--- /dev/null
+++ b/doc/sphinx/api/qundoview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QUndoView
+---------
+
+.. class:: QUndoView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qundoview.html>`_
diff --git a/doc/sphinx/api/qurl.rst b/doc/sphinx/api/qurl.rst
new file mode 100644
index 0000000..97eb395
--- /dev/null
+++ b/doc/sphinx/api/qurl.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QUrl
+----
+
+.. class:: QUrl
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qurl.html>`_
diff --git a/doc/sphinx/api/qurlquery.rst b/doc/sphinx/api/qurlquery.rst
new file mode 100644
index 0000000..ad0832e
--- /dev/null
+++ b/doc/sphinx/api/qurlquery.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QUrlQuery
+---------
+
+.. class:: QUrlQuery
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qurlquery.html>`_
diff --git a/doc/sphinx/api/quuid.rst b/doc/sphinx/api/quuid.rst
new file mode 100644
index 0000000..25ddfdd
--- /dev/null
+++ b/doc/sphinx/api/quuid.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QUuid
+-----
+
+.. class:: QUuid
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/quuid.html>`_
diff --git a/doc/sphinx/api/qvalidator.rst b/doc/sphinx/api/qvalidator.rst
new file mode 100644
index 0000000..ccacbb1
--- /dev/null
+++ b/doc/sphinx/api/qvalidator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QValidator
+----------
+
+.. class:: QValidator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvalidator.html>`_
diff --git a/doc/sphinx/api/qvariant.rst b/doc/sphinx/api/qvariant.rst
new file mode 100644
index 0000000..0a1deb1
--- /dev/null
+++ b/doc/sphinx/api/qvariant.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QVariant
+--------
+
+.. class:: QVariant
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvariant.html>`_
diff --git a/doc/sphinx/api/qvariantanimation.rst b/doc/sphinx/api/qvariantanimation.rst
new file mode 100644
index 0000000..4474547
--- /dev/null
+++ b/doc/sphinx/api/qvariantanimation.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QVariantAnimation
+-----------------
+
+.. class:: QVariantAnimation
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvariantanimation.html>`_
diff --git a/doc/sphinx/api/qvboxlayout.rst b/doc/sphinx/api/qvboxlayout.rst
new file mode 100644
index 0000000..4a61884
--- /dev/null
+++ b/doc/sphinx/api/qvboxlayout.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QVBoxLayout
+-----------
+
+.. class:: QVBoxLayout
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvboxlayout.html>`_
diff --git a/doc/sphinx/api/qvector2d.rst b/doc/sphinx/api/qvector2d.rst
new file mode 100644
index 0000000..ea6a7fd
--- /dev/null
+++ b/doc/sphinx/api/qvector2d.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QVector2D
+---------
+
+.. class:: QVector2D
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvector2d.html>`_
diff --git a/doc/sphinx/api/qvector3d.rst b/doc/sphinx/api/qvector3d.rst
new file mode 100644
index 0000000..4d780e8
--- /dev/null
+++ b/doc/sphinx/api/qvector3d.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QVector3D
+---------
+
+.. class:: QVector3D
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvector3d.html>`_
diff --git a/doc/sphinx/api/qvector4d.rst b/doc/sphinx/api/qvector4d.rst
new file mode 100644
index 0000000..b35fb80
--- /dev/null
+++ b/doc/sphinx/api/qvector4d.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QVector4D
+---------
+
+.. class:: QVector4D
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvector4d.html>`_
diff --git a/doc/sphinx/api/qvideoencodersettings.rst b/doc/sphinx/api/qvideoencodersettings.rst
new file mode 100644
index 0000000..45e2bd7
--- /dev/null
+++ b/doc/sphinx/api/qvideoencodersettings.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QVideoEncoderSettings
+---------------------
+
+.. class:: QVideoEncoderSettings
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvideoencodersettings.html>`_
diff --git a/doc/sphinx/api/qvideoframe.rst b/doc/sphinx/api/qvideoframe.rst
new file mode 100644
index 0000000..7675d5c
--- /dev/null
+++ b/doc/sphinx/api/qvideoframe.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QVideoFrame
+-----------
+
+.. class:: QVideoFrame
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvideoframe.html>`_
diff --git a/doc/sphinx/api/qvideoprobe.rst b/doc/sphinx/api/qvideoprobe.rst
new file mode 100644
index 0000000..6f723a3
--- /dev/null
+++ b/doc/sphinx/api/qvideoprobe.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QVideoProbe
+-----------
+
+.. class:: QVideoProbe
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvideoprobe.html>`_
diff --git a/doc/sphinx/api/qvideosurfaceformat.rst b/doc/sphinx/api/qvideosurfaceformat.rst
new file mode 100644
index 0000000..2fceba3
--- /dev/null
+++ b/doc/sphinx/api/qvideosurfaceformat.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimedia
+
+QVideoSurfaceFormat
+-------------------
+
+.. class:: QVideoSurfaceFormat
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvideosurfaceformat.html>`_
diff --git a/doc/sphinx/api/qvideowidget.rst b/doc/sphinx/api/qvideowidget.rst
new file mode 100644
index 0000000..a0d9c93
--- /dev/null
+++ b/doc/sphinx/api/qvideowidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtMultimediaWidgets
+
+QVideoWidget
+------------
+
+.. class:: QVideoWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qvideowidget.html>`_
diff --git a/doc/sphinx/api/qwaitcondition.rst b/doc/sphinx/api/qwaitcondition.rst
new file mode 100644
index 0000000..a075370
--- /dev/null
+++ b/doc/sphinx/api/qwaitcondition.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QWaitCondition
+--------------
+
+.. class:: QWaitCondition
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwaitcondition.html>`_
diff --git a/doc/sphinx/api/qwebdatabase.rst b/doc/sphinx/api/qwebdatabase.rst
new file mode 100644
index 0000000..10ddf8b
--- /dev/null
+++ b/doc/sphinx/api/qwebdatabase.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKit
+
+QWebDatabase
+------------
+
+.. class:: QWebDatabase
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebdatabase.html>`_
diff --git a/doc/sphinx/api/qwebelement.rst b/doc/sphinx/api/qwebelement.rst
new file mode 100644
index 0000000..30bce5a
--- /dev/null
+++ b/doc/sphinx/api/qwebelement.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKit
+
+QWebElement
+-----------
+
+.. class:: QWebElement
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebelement.html>`_
diff --git a/doc/sphinx/api/qwebelementcollection.rst b/doc/sphinx/api/qwebelementcollection.rst
new file mode 100644
index 0000000..ae0e3da
--- /dev/null
+++ b/doc/sphinx/api/qwebelementcollection.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKit
+
+QWebElementCollection
+---------------------
+
+.. class:: QWebElementCollection
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebelementcollection.html>`_
diff --git a/doc/sphinx/api/qwebframe.rst b/doc/sphinx/api/qwebframe.rst
new file mode 100644
index 0000000..a42b3f9
--- /dev/null
+++ b/doc/sphinx/api/qwebframe.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKitWidgets
+
+QWebFrame
+---------
+
+.. class:: QWebFrame
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebframe.html>`_
diff --git a/doc/sphinx/api/qwebhistory.rst b/doc/sphinx/api/qwebhistory.rst
new file mode 100644
index 0000000..1504a91
--- /dev/null
+++ b/doc/sphinx/api/qwebhistory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKit
+
+QWebHistory
+-----------
+
+.. class:: QWebHistory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebhistory.html>`_
diff --git a/doc/sphinx/api/qwebhistoryinterface.rst b/doc/sphinx/api/qwebhistoryinterface.rst
new file mode 100644
index 0000000..b039d57
--- /dev/null
+++ b/doc/sphinx/api/qwebhistoryinterface.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKit
+
+QWebHistoryInterface
+--------------------
+
+.. class:: QWebHistoryInterface
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebhistoryinterface.html>`_
diff --git a/doc/sphinx/api/qwebhistoryitem.rst b/doc/sphinx/api/qwebhistoryitem.rst
new file mode 100644
index 0000000..4c0ad9e
--- /dev/null
+++ b/doc/sphinx/api/qwebhistoryitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKit
+
+QWebHistoryItem
+---------------
+
+.. class:: QWebHistoryItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebhistoryitem.html>`_
diff --git a/doc/sphinx/api/qwebhittestresult.rst b/doc/sphinx/api/qwebhittestresult.rst
new file mode 100644
index 0000000..281bbeb
--- /dev/null
+++ b/doc/sphinx/api/qwebhittestresult.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKitWidgets
+
+QWebHitTestResult
+-----------------
+
+.. class:: QWebHitTestResult
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebhittestresult.html>`_
diff --git a/doc/sphinx/api/qwebinspector.rst b/doc/sphinx/api/qwebinspector.rst
new file mode 100644
index 0000000..372f73f
--- /dev/null
+++ b/doc/sphinx/api/qwebinspector.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKitWidgets
+
+QWebInspector
+-------------
+
+.. class:: QWebInspector
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebinspector.html>`_
diff --git a/doc/sphinx/api/qwebpage.rst b/doc/sphinx/api/qwebpage.rst
new file mode 100644
index 0000000..67526b0
--- /dev/null
+++ b/doc/sphinx/api/qwebpage.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKitWidgets
+
+QWebPage
+--------
+
+.. class:: QWebPage
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebpage.html>`_
diff --git a/doc/sphinx/api/qwebpluginfactory.rst b/doc/sphinx/api/qwebpluginfactory.rst
new file mode 100644
index 0000000..d83a499
--- /dev/null
+++ b/doc/sphinx/api/qwebpluginfactory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKit
+
+QWebPluginFactory
+-----------------
+
+.. class:: QWebPluginFactory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebpluginfactory.html>`_
diff --git a/doc/sphinx/api/qwebsecurityorigin.rst b/doc/sphinx/api/qwebsecurityorigin.rst
new file mode 100644
index 0000000..35af9ca
--- /dev/null
+++ b/doc/sphinx/api/qwebsecurityorigin.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKit
+
+QWebSecurityOrigin
+------------------
+
+.. class:: QWebSecurityOrigin
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebsecurityorigin.html>`_
diff --git a/doc/sphinx/api/qwebsettings.rst b/doc/sphinx/api/qwebsettings.rst
new file mode 100644
index 0000000..90a3b4f
--- /dev/null
+++ b/doc/sphinx/api/qwebsettings.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKit
+
+QWebSettings
+------------
+
+.. class:: QWebSettings
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebsettings.html>`_
diff --git a/doc/sphinx/api/qwebsocket.rst b/doc/sphinx/api/qwebsocket.rst
new file mode 100644
index 0000000..a6d1883
--- /dev/null
+++ b/doc/sphinx/api/qwebsocket.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebSockets
+
+QWebSocket
+----------
+
+.. class:: QWebSocket
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebsocket.html>`_
diff --git a/doc/sphinx/api/qwebsocketcorsauthenticator.rst b/doc/sphinx/api/qwebsocketcorsauthenticator.rst
new file mode 100644
index 0000000..1cd633d
--- /dev/null
+++ b/doc/sphinx/api/qwebsocketcorsauthenticator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebSockets
+
+QWebSocketCorsAuthenticator
+---------------------------
+
+.. class:: QWebSocketCorsAuthenticator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebsocketcorsauthenticator.html>`_
diff --git a/doc/sphinx/api/qwebsocketprotocol.rst b/doc/sphinx/api/qwebsocketprotocol.rst
new file mode 100644
index 0000000..35e3dad
--- /dev/null
+++ b/doc/sphinx/api/qwebsocketprotocol.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebSockets
+
+QWebSocketProtocol
+------------------
+
+.. class:: QWebSocketProtocol
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebsocketprotocol.html>`_
diff --git a/doc/sphinx/api/qwebsocketserver.rst b/doc/sphinx/api/qwebsocketserver.rst
new file mode 100644
index 0000000..a7040df
--- /dev/null
+++ b/doc/sphinx/api/qwebsocketserver.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebSockets
+
+QWebSocketServer
+----------------
+
+.. class:: QWebSocketServer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebsocketserver.html>`_
diff --git a/doc/sphinx/api/qwebview.rst b/doc/sphinx/api/qwebview.rst
new file mode 100644
index 0000000..15bef1c
--- /dev/null
+++ b/doc/sphinx/api/qwebview.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWebKitWidgets
+
+QWebView
+--------
+
+.. class:: QWebView
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwebview.html>`_
diff --git a/doc/sphinx/api/qwhatsthis.rst b/doc/sphinx/api/qwhatsthis.rst
new file mode 100644
index 0000000..3a316ed
--- /dev/null
+++ b/doc/sphinx/api/qwhatsthis.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QWhatsThis
+----------
+
+.. class:: QWhatsThis
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwhatsthis.html>`_
diff --git a/doc/sphinx/api/qwhatsthisclickedevent.rst b/doc/sphinx/api/qwhatsthisclickedevent.rst
new file mode 100644
index 0000000..d7c91a1
--- /dev/null
+++ b/doc/sphinx/api/qwhatsthisclickedevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QWhatsThisClickedEvent
+----------------------
+
+.. class:: QWhatsThisClickedEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwhatsthisclickedevent.html>`_
diff --git a/doc/sphinx/api/qwheelevent.rst b/doc/sphinx/api/qwheelevent.rst
new file mode 100644
index 0000000..84f90f9
--- /dev/null
+++ b/doc/sphinx/api/qwheelevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QWheelEvent
+-----------
+
+.. class:: QWheelEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwheelevent.html>`_
diff --git a/doc/sphinx/api/qwidget.rst b/doc/sphinx/api/qwidget.rst
new file mode 100644
index 0000000..76011da
--- /dev/null
+++ b/doc/sphinx/api/qwidget.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QWidget
+-------
+
+.. class:: QWidget
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwidget.html>`_
diff --git a/doc/sphinx/api/qwidgetaction.rst b/doc/sphinx/api/qwidgetaction.rst
new file mode 100644
index 0000000..ef15874
--- /dev/null
+++ b/doc/sphinx/api/qwidgetaction.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QWidgetAction
+-------------
+
+.. class:: QWidgetAction
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwidgetaction.html>`_
diff --git a/doc/sphinx/api/qwidgetitem.rst b/doc/sphinx/api/qwidgetitem.rst
new file mode 100644
index 0000000..39dec31
--- /dev/null
+++ b/doc/sphinx/api/qwidgetitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QWidgetItem
+-----------
+
+.. class:: QWidgetItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwidgetitem.html>`_
diff --git a/doc/sphinx/api/qwindow.rst b/doc/sphinx/api/qwindow.rst
new file mode 100644
index 0000000..7172ccf
--- /dev/null
+++ b/doc/sphinx/api/qwindow.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QWindow
+-------
+
+.. class:: QWindow
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwindow.html>`_
diff --git a/doc/sphinx/api/qwindowstatechangeevent.rst b/doc/sphinx/api/qwindowstatechangeevent.rst
new file mode 100644
index 0000000..e794c4c
--- /dev/null
+++ b/doc/sphinx/api/qwindowstatechangeevent.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtGui
+
+QWindowStateChangeEvent
+-----------------------
+
+.. class:: QWindowStateChangeEvent
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwindowstatechangeevent.html>`_
diff --git a/doc/sphinx/api/qwinjumplist.rst b/doc/sphinx/api/qwinjumplist.rst
new file mode 100644
index 0000000..a2b2a58
--- /dev/null
+++ b/doc/sphinx/api/qwinjumplist.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWinExtras
+
+QWinJumpList
+------------
+
+.. class:: QWinJumpList
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwinjumplist.html>`_
diff --git a/doc/sphinx/api/qwinjumplistcategory.rst b/doc/sphinx/api/qwinjumplistcategory.rst
new file mode 100644
index 0000000..ed4dda3
--- /dev/null
+++ b/doc/sphinx/api/qwinjumplistcategory.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWinExtras
+
+QWinJumpListCategory
+--------------------
+
+.. class:: QWinJumpListCategory
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwinjumplistcategory.html>`_
diff --git a/doc/sphinx/api/qwinjumplistitem.rst b/doc/sphinx/api/qwinjumplistitem.rst
new file mode 100644
index 0000000..fe999c3
--- /dev/null
+++ b/doc/sphinx/api/qwinjumplistitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWinExtras
+
+QWinJumpListItem
+----------------
+
+.. class:: QWinJumpListItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwinjumplistitem.html>`_
diff --git a/doc/sphinx/api/qwintaskbarbutton.rst b/doc/sphinx/api/qwintaskbarbutton.rst
new file mode 100644
index 0000000..5a60e37
--- /dev/null
+++ b/doc/sphinx/api/qwintaskbarbutton.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWinExtras
+
+QWinTaskbarButton
+-----------------
+
+.. class:: QWinTaskbarButton
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwintaskbarbutton.html>`_
diff --git a/doc/sphinx/api/qwintaskbarprogress.rst b/doc/sphinx/api/qwintaskbarprogress.rst
new file mode 100644
index 0000000..a8a9b8b
--- /dev/null
+++ b/doc/sphinx/api/qwintaskbarprogress.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWinExtras
+
+QWinTaskbarProgress
+-------------------
+
+.. class:: QWinTaskbarProgress
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwintaskbarprogress.html>`_
diff --git a/doc/sphinx/api/qwinthumbnailtoolbar.rst b/doc/sphinx/api/qwinthumbnailtoolbar.rst
new file mode 100644
index 0000000..437d0ac
--- /dev/null
+++ b/doc/sphinx/api/qwinthumbnailtoolbar.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWinExtras
+
+QWinThumbnailToolBar
+--------------------
+
+.. class:: QWinThumbnailToolBar
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwinthumbnailtoolbar.html>`_
diff --git a/doc/sphinx/api/qwinthumbnailtoolbutton.rst b/doc/sphinx/api/qwinthumbnailtoolbutton.rst
new file mode 100644
index 0000000..c390241
--- /dev/null
+++ b/doc/sphinx/api/qwinthumbnailtoolbutton.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWinExtras
+
+QWinThumbnailToolButton
+-----------------------
+
+.. class:: QWinThumbnailToolButton
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwinthumbnailtoolbutton.html>`_
diff --git a/doc/sphinx/api/qwizard.rst b/doc/sphinx/api/qwizard.rst
new file mode 100644
index 0000000..b0ad549
--- /dev/null
+++ b/doc/sphinx/api/qwizard.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QWizard
+-------
+
+.. class:: QWizard
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwizard.html>`_
diff --git a/doc/sphinx/api/qwizardpage.rst b/doc/sphinx/api/qwizardpage.rst
new file mode 100644
index 0000000..13d8f4c
--- /dev/null
+++ b/doc/sphinx/api/qwizardpage.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtWidgets
+
+QWizardPage
+-----------
+
+.. class:: QWizardPage
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwizardpage.html>`_
diff --git a/doc/sphinx/api/qwritelocker.rst b/doc/sphinx/api/qwritelocker.rst
new file mode 100644
index 0000000..3e40f19
--- /dev/null
+++ b/doc/sphinx/api/qwritelocker.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QWriteLocker
+------------
+
+.. class:: QWriteLocker
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qwritelocker.html>`_
diff --git a/doc/sphinx/api/qx11info.rst b/doc/sphinx/api/qx11info.rst
new file mode 100644
index 0000000..cabbdb6
--- /dev/null
+++ b/doc/sphinx/api/qx11info.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtX11Extras
+
+QX11Info
+--------
+
+.. class:: QX11Info
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qx11info.html>`_
diff --git a/doc/sphinx/api/qxmlformatter.rst b/doc/sphinx/api/qxmlformatter.rst
new file mode 100644
index 0000000..84d06d0
--- /dev/null
+++ b/doc/sphinx/api/qxmlformatter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QXmlFormatter
+-------------
+
+.. class:: QXmlFormatter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlformatter.html>`_
diff --git a/doc/sphinx/api/qxmlitem.rst b/doc/sphinx/api/qxmlitem.rst
new file mode 100644
index 0000000..4053369
--- /dev/null
+++ b/doc/sphinx/api/qxmlitem.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QXmlItem
+--------
+
+.. class:: QXmlItem
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlitem.html>`_
diff --git a/doc/sphinx/api/qxmlname.rst b/doc/sphinx/api/qxmlname.rst
new file mode 100644
index 0000000..57ed3ef
--- /dev/null
+++ b/doc/sphinx/api/qxmlname.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QXmlName
+--------
+
+.. class:: QXmlName
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlname.html>`_
diff --git a/doc/sphinx/api/qxmlnamepool.rst b/doc/sphinx/api/qxmlnamepool.rst
new file mode 100644
index 0000000..67668cf
--- /dev/null
+++ b/doc/sphinx/api/qxmlnamepool.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QXmlNamePool
+------------
+
+.. class:: QXmlNamePool
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlnamepool.html>`_
diff --git a/doc/sphinx/api/qxmlnodemodelindex.rst b/doc/sphinx/api/qxmlnodemodelindex.rst
new file mode 100644
index 0000000..ecaba4d
--- /dev/null
+++ b/doc/sphinx/api/qxmlnodemodelindex.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QXmlNodeModelIndex
+------------------
+
+.. class:: QXmlNodeModelIndex
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlnodemodelindex.html>`_
diff --git a/doc/sphinx/api/qxmlquery.rst b/doc/sphinx/api/qxmlquery.rst
new file mode 100644
index 0000000..ac5a6ff
--- /dev/null
+++ b/doc/sphinx/api/qxmlquery.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QXmlQuery
+---------
+
+.. class:: QXmlQuery
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlquery.html>`_
diff --git a/doc/sphinx/api/qxmlresultitems.rst b/doc/sphinx/api/qxmlresultitems.rst
new file mode 100644
index 0000000..4e02e18
--- /dev/null
+++ b/doc/sphinx/api/qxmlresultitems.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QXmlResultItems
+---------------
+
+.. class:: QXmlResultItems
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlresultitems.html>`_
diff --git a/doc/sphinx/api/qxmlschema.rst b/doc/sphinx/api/qxmlschema.rst
new file mode 100644
index 0000000..737ed37
--- /dev/null
+++ b/doc/sphinx/api/qxmlschema.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QXmlSchema
+----------
+
+.. class:: QXmlSchema
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlschema.html>`_
diff --git a/doc/sphinx/api/qxmlschemavalidator.rst b/doc/sphinx/api/qxmlschemavalidator.rst
new file mode 100644
index 0000000..b8f2ead
--- /dev/null
+++ b/doc/sphinx/api/qxmlschemavalidator.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QXmlSchemaValidator
+-------------------
+
+.. class:: QXmlSchemaValidator
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlschemavalidator.html>`_
diff --git a/doc/sphinx/api/qxmlserializer.rst b/doc/sphinx/api/qxmlserializer.rst
new file mode 100644
index 0000000..218ccb6
--- /dev/null
+++ b/doc/sphinx/api/qxmlserializer.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtXmlPatterns
+
+QXmlSerializer
+--------------
+
+.. class:: QXmlSerializer
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlserializer.html>`_
diff --git a/doc/sphinx/api/qxmlstreamattribute.rst b/doc/sphinx/api/qxmlstreamattribute.rst
new file mode 100644
index 0000000..00bf700
--- /dev/null
+++ b/doc/sphinx/api/qxmlstreamattribute.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QXmlStreamAttribute
+-------------------
+
+.. class:: QXmlStreamAttribute
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlstreamattribute.html>`_
diff --git a/doc/sphinx/api/qxmlstreamattributes.rst b/doc/sphinx/api/qxmlstreamattributes.rst
new file mode 100644
index 0000000..14a4b6d
--- /dev/null
+++ b/doc/sphinx/api/qxmlstreamattributes.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QXmlStreamAttributes
+--------------------
+
+.. class:: QXmlStreamAttributes
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlstreamattributes.html>`_
diff --git a/doc/sphinx/api/qxmlstreamentitydeclaration.rst b/doc/sphinx/api/qxmlstreamentitydeclaration.rst
new file mode 100644
index 0000000..f2cd94f
--- /dev/null
+++ b/doc/sphinx/api/qxmlstreamentitydeclaration.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QXmlStreamEntityDeclaration
+---------------------------
+
+.. class:: QXmlStreamEntityDeclaration
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlstreamentitydeclaration.html>`_
diff --git a/doc/sphinx/api/qxmlstreamentityresolver.rst b/doc/sphinx/api/qxmlstreamentityresolver.rst
new file mode 100644
index 0000000..d34daf8
--- /dev/null
+++ b/doc/sphinx/api/qxmlstreamentityresolver.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QXmlStreamEntityResolver
+------------------------
+
+.. class:: QXmlStreamEntityResolver
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlstreamentityresolver.html>`_
diff --git a/doc/sphinx/api/qxmlstreamnamespacedeclaration.rst b/doc/sphinx/api/qxmlstreamnamespacedeclaration.rst
new file mode 100644
index 0000000..36d33a9
--- /dev/null
+++ b/doc/sphinx/api/qxmlstreamnamespacedeclaration.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QXmlStreamNamespaceDeclaration
+------------------------------
+
+.. class:: QXmlStreamNamespaceDeclaration
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlstreamnamespacedeclaration.html>`_
diff --git a/doc/sphinx/api/qxmlstreamnotationdeclaration.rst b/doc/sphinx/api/qxmlstreamnotationdeclaration.rst
new file mode 100644
index 0000000..444b17e
--- /dev/null
+++ b/doc/sphinx/api/qxmlstreamnotationdeclaration.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QXmlStreamNotationDeclaration
+-----------------------------
+
+.. class:: QXmlStreamNotationDeclaration
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlstreamnotationdeclaration.html>`_
diff --git a/doc/sphinx/api/qxmlstreamreader.rst b/doc/sphinx/api/qxmlstreamreader.rst
new file mode 100644
index 0000000..0245d09
--- /dev/null
+++ b/doc/sphinx/api/qxmlstreamreader.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QXmlStreamReader
+----------------
+
+.. class:: QXmlStreamReader
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlstreamreader.html>`_
diff --git a/doc/sphinx/api/qxmlstreamwriter.rst b/doc/sphinx/api/qxmlstreamwriter.rst
new file mode 100644
index 0000000..c43b3d3
--- /dev/null
+++ b/doc/sphinx/api/qxmlstreamwriter.rst
@@ -0,0 +1,8 @@
+.. currentmodule:: PyQt5.QtCore
+
+QXmlStreamWriter
+----------------
+
+.. class:: QXmlStreamWriter
+
+    `C++ documentation <http://qt-project.org/doc/qt-5/qxmlstreamwriter.html>`_
diff --git a/doc/sphinx/api_metadata.cfg b/doc/sphinx/api_metadata.cfg
new file mode 100644
index 0000000..1383b3b
--- /dev/null
+++ b/doc/sphinx/api_metadata.cfg
@@ -0,0 +1,886 @@
+# Python Module     Python Class
+# -------------     ------------
+
+QAxContainer        QAxBase
+QAxContainer        QAxObject
+QAxContainer        QAxWidget
+
+QtBluetooth         QBluetoothAddress
+QtBluetooth         QBluetoothDeviceDiscoveryAgent
+QtBluetooth         QBluetoothDeviceInfo
+QtBluetooth         QBluetoothHostInfo
+QtBluetooth         QBluetoothLocalDevice
+QtBluetooth         QBluetoothServer
+QtBluetooth         QBluetoothServiceDiscoveryAgent
+QtBluetooth         QBluetoothServiceInfo
+QtBluetooth         QBluetoothSocket
+QtBluetooth         QBluetoothTransferManager
+QtBluetooth         QBluetoothTransferReply
+QtBluetooth         QBluetoothTransferRequest
+QtBluetooth         QBluetoothUuid
+
+QtCore              QAbstractAnimation
+QtCore              QAbstractEventDispatcher
+QtCore              QAbstractItemModel
+QtCore              QAbstractListModel
+QtCore              QAbstractNativeEventFilter
+QtCore              QAbstractProxyModel
+QtCore              QAbstractState
+QtCore              QAbstractTableModel
+QtCore              QAbstractTransition
+QtCore              QAnimationGroup
+QtCore              QBasicTimer
+QtCore              QBitArray
+QtCore              QBuffer
+QtCore              QByteArray
+QtCore              QByteArrayMatcher
+QtCore              QChildEvent
+QtCore              QCollator
+QtCore              QCollatorSortKey
+QtCore              QCommandLineOption
+QtCore              QCommandLineParser
+QtCore              QCoreApplication
+QtCore              QCryptographicHash
+QtCore              QDataStream
+QtCore              QDate
+QtCore              QDateTime
+QtCore              QDir
+QtCore              QDirIterator
+QtCore              QDynamicPropertyChangeEvent
+QtCore              QEasingCurve
+QtCore              QElapsedTimer
+QtCore              QEvent
+QtCore              QEventLoop
+QtCore              QEventLoopLocker
+QtCore              QEventTransition
+QtCore              QFile
+QtCore              QFileDevice
+QtCore              QFileInfo
+QtCore              QFileSelector
+QtCore              QFileSystemWatcher
+QtCore              QFinalState
+QtCore              QGenericArgument
+QtCore              QGenericReturnArgument
+QtCore              QHistoryState
+QtCore              QIODevice
+QtCore              QIdentityProxyModel
+QtCore              QItemSelection
+QtCore              QItemSelectionModel
+QtCore              QItemSelectionRange
+QtCore              QJsonArray
+QtCore              QJsonDocument
+QtCore              QJsonObject
+QtCore              QJsonParseError
+QtCore              QJsonValue
+QtCore              QLibrary
+QtCore              QLibraryInfo
+QtCore              QLine
+QtCore              QLineF
+QtCore              QLocale
+QtCore              QLockFile
+QtCore              QMargins
+QtCore              QMarginsF
+QtCore              QMessageAuthenticationCode
+QtCore              QMessageLogContext
+QtCore              QMessageLogger
+QtCore              QMetaClassInfo
+QtCore              QMetaEnum
+QtCore              QMetaMethod
+QtCore              QMetaObject
+QtCore              QMetaProperty
+QtCore              QMetaType
+QtCore              QMimeData
+QtCore              QMimeDatabase
+QtCore              QMimeType
+QtCore              QModelIndex
+QtCore              QMutex
+QtCore              QMutexLocker
+QtCore              QObject
+QtCore              QObjectCleanupHandler
+QtCore              QParallelAnimationGroup
+QtCore              QPauseAnimation
+QtCore              QPersistentModelIndex
+QtCore              QPluginLoader
+QtCore              QPoint
+QtCore              QPointF
+QtCore              QProcess
+QtCore              QProcessEnvironment
+QtCore              QPropertyAnimation
+QtCore              QReadLocker
+QtCore              QReadWriteLock
+QtCore              QRect
+QtCore              QRectF
+QtCore              QRegExp
+QtCore              QRegularExpression
+QtCore              QRegularExpressionMatch
+QtCore              QRegularExpressionMatchIterator
+QtCore              QResource
+QtCore              QRunnable
+QtCore              QSaveFile
+QtCore              QSemaphore
+QtCore              QSequentialAnimationGroup
+QtCore              QSettings
+QtCore              QSharedMemory
+QtCore              QSignalBlocker
+QtCore              QSignalMapper
+QtCore              QSignalTransition
+QtCore              QSize
+QtCore              QSizeF
+QtCore              QSocketNotifier
+QtCore              QSortFilterProxyModel
+QtCore              QStandardPaths
+QtCore              QState
+QtCore              QStateMachine
+QtCore              QStringListModel
+QtCore              QSysInfo
+QtCore              QSystemSemaphore
+QtCore              Qt
+QtCore              QTemporaryDir
+QtCore              QTemporaryFile
+QtCore              QTextBoundaryFinder
+QtCore              QTextCodec
+QtCore              QTextDecoder
+QtCore              QTextEncoder
+QtCore              QTextStream
+QtCore              QTextStreamManipulator
+QtCore              QThread
+QtCore              QThreadPool
+QtCore              QTime
+QtCore              QTimeLine
+QtCore              QTimer
+QtCore              QTimerEvent
+QtCore              QTimeZone
+QtCore              QTranslator
+QtCore              QUrl
+QtCore              QUrlQuery
+QtCore              QUuid
+QtCore              QVariant
+QtCore              QVariantAnimation
+QtCore              QWaitCondition
+QtCore              QWriteLocker
+QtCore              QXmlStreamAttribute
+QtCore              QXmlStreamAttributes
+QtCore              QXmlStreamEntityDeclaration
+QtCore              QXmlStreamEntityResolver
+QtCore              QXmlStreamNamespaceDeclaration
+QtCore              QXmlStreamNotationDeclaration
+QtCore              QXmlStreamReader
+QtCore              QXmlStreamWriter
+
+QtDBus              QDBus
+QtDBus              QDBusAbstractAdaptor
+QtDBus              QDBusAbstractInterface
+QtDBus              QDBusArgument
+QtDBus              QDBusConnection
+QtDBus              QDBusConnectionInterface
+QtDBus              QDBusError
+QtDBus              QDBusInterface
+QtDBus              QDBusMessage
+QtDBus              QDBusObjectPath
+QtDBus              QDBusPendingCall
+QtDBus              QDBusPendingCallWatcher
+QtDBus              QDBusPendingReply
+QtDBus              QDBusReply
+QtDBus              QDBusServiceWatcher
+QtDBus              QDBusSignature
+QtDBus              QDBusUnixFileDescriptor
+QtDBus              QDBusVariant
+
+QtDesigner          QAbstractExtensionFactory
+QtDesigner          QAbstractExtensionManager
+QtDesigner          QAbstractFormBuilder
+QtDesigner          QDesignerActionEditorInterface
+QtDesigner          QDesignerContainerExtension
+QtDesigner          QDesignerCustomWidgetCollectionInterface
+QtDesigner          QDesignerCustomWidgetInterface
+QtDesigner          QDesignerFormEditorInterface
+QtDesigner          QDesignerFormWindowCursorInterface
+QtDesigner          QDesignerFormWindowInterface
+QtDesigner          QDesignerFormWindowManagerInterface
+QtDesigner          QDesignerMemberSheetExtension
+QtDesigner          QDesignerObjectInspectorInterface
+QtDesigner          QDesignerPropertyEditorInterface
+QtDesigner          QDesignerPropertySheetExtension
+QtDesigner          QDesignerTaskMenuExtension
+QtDesigner          QDesignerWidgetBoxInterface
+QtDesigner          QExtensionFactory
+QtDesigner          QExtensionManager
+QtDesigner          QFormBuilder
+#QtDesigner          QPyDesignerContainerExtension
+#QtDesigner          QPyDesignerCustomWidgetCollectionPlugin
+#QtDesigner          QPyDesignerCustomWidgetPlugin
+#QtDesigner          QPyDesignerMemberSheetExtension
+#QtDesigner          QPyDesignerPropertySheetExtension
+#QtDesigner          QPyDesignerTaskMenuExtension
+
+Enginio             Enginio
+Enginio             EnginioClient
+Enginio             EnginioClientConnection
+Enginio             EnginioIdentity
+Enginio             EnginioModel
+Enginio             EnginioOAuth2Authentication
+Enginio             EnginioReply
+
+QtGui               QAbstractTextDocumentLayout
+QtGui               QActionEvent
+QtGui               QBackingStore
+QtGui               QBitmap
+QtGui               QBrush
+QtGui               QClipboard
+QtGui               QCloseEvent
+QtGui               QColor
+QtGui               QConicalGradient
+QtGui               QContextMenuEvent
+QtGui               QCursor
+QtGui               QDesktopServices
+QtGui               QDoubleValidator
+QtGui               QDrag
+QtGui               QDragEnterEvent
+QtGui               QDragLeaveEvent
+QtGui               QDragMoveEvent
+QtGui               QDropEvent
+QtGui               QEnterEvent
+QtGui               QExposeEvent
+QtGui               QFileOpenEvent
+QtGui               QFocusEvent
+QtGui               QFont
+QtGui               QFontDatabase
+QtGui               QFontInfo
+QtGui               QFontMetrics
+QtGui               QFontMetricsF
+QtGui               QGlyphRun
+QtGui               QGradient
+QtGui               QGuiApplication
+QtGui               QHelpEvent
+QtGui               QHideEvent
+QtGui               QHoverEvent
+QtGui               QIcon
+QtGui               QIconDragEvent
+QtGui               QIconEngine
+QtGui               QImage
+QtGui               QImageIOHandler
+QtGui               QImageReader
+QtGui               QImageWriter
+QtGui               QInputEvent
+QtGui               QInputMethod
+QtGui               QInputMethodEvent
+QtGui               QInputMethodQueryEvent
+QtGui               QIntValidator
+QtGui               QKeyEvent
+QtGui               QKeySequence
+QtGui               QLinearGradient
+QtGui               QMatrix2x2
+QtGui               QMatrix2x3
+QtGui               QMatrix2x4
+QtGui               QMatrix3x2
+QtGui               QMatrix3x3
+QtGui               QMatrix3x4
+QtGui               QMatrix4x2
+QtGui               QMatrix4x3
+QtGui               QMatrix4x4
+QtGui               QMouseEvent
+QtGui               QMoveEvent
+QtGui               QMovie
+QtGui               QOffscreenSurface
+QtGui               QOpenGLBuffer
+QtGui               QOpenGLContext
+QtGui               QOpenGLContextGroup
+QtGui               QOpenGLDebugLogger
+QtGui               QOpenGLDebugMessage
+QtGui               QOpenGLFramebufferObject
+QtGui               QOpenGLFramebufferObjectFormat
+QtGui               QOpenGLPaintDevice
+QtGui               QOpenGLShader
+QtGui               QOpenGLShaderProgram
+QtGui               QOpenGLTexture
+QtGui               QOpenGLTimeMonitor
+QtGui               QOpenGLTimerQuery
+QtGui               QOpenGLVertexArrayObject
+QtGui               QPageLayout
+QtGui               QPageSize
+QtGui               QPagedPaintDevice
+QtGui               QPaintDevice
+QtGui               QPaintEngine
+QtGui               QPaintEngineState
+QtGui               QPaintEvent
+QtGui               QPainter
+QtGui               QPainterPath
+QtGui               QPainterPathStroker
+QtGui               QPalette
+QtGui               QPdfWriter
+QtGui               QPen
+QtGui               QPicture
+QtGui               QPictureIO
+QtGui               QPixmap
+QtGui               QPixmapCache
+QtGui               QPolygon
+QtGui               QPolygonF
+QtGui               QQuaternion
+QtGui               QRadialGradient
+QtGui               QRawFont
+QtGui               QRegExpValidator
+QtGui               QRegion
+QtGui               QRegularExpressionValidator
+QtGui               QResizeEvent
+QtGui               QScreen
+QtGui               QScrollEvent
+QtGui               QScrollPrepareEvent
+QtGui               QSessionManager
+QtGui               QShortcutEvent
+QtGui               QShowEvent
+QtGui               QStandardItem
+QtGui               QStandardItemModel
+QtGui               QStaticText
+QtGui               QStatusTipEvent
+QtGui               QStyleHints
+QtGui               QSurface
+QtGui               QSurfaceFormat
+QtGui               QSyntaxHighlighter
+QtGui               QTabletEvent
+QtGui               QTextBlock
+QtGui               QTextBlockFormat
+QtGui               QTextBlockGroup
+QtGui               QTextBlockUserData
+QtGui               QTextCharFormat
+QtGui               QTextCursor
+QtGui               QTextDocument
+QtGui               QTextDocumentFragment
+QtGui               QTextDocumentWriter
+QtGui               QTextFormat
+QtGui               QTextFragment
+QtGui               QTextFrame
+QtGui               QTextFrameFormat
+QtGui               QTextImageFormat
+QtGui               QTextInlineObject
+QtGui               QTextItem
+QtGui               QTextLayout
+QtGui               QTextLength
+QtGui               QTextLine
+QtGui               QTextList
+QtGui               QTextListFormat
+QtGui               QTextObject
+QtGui               QTextObjectInterface
+QtGui               QTextOption
+QtGui               QTextTable
+QtGui               QTextTableCell
+QtGui               QTextTableCellFormat
+QtGui               QTextTableFormat
+QtGui               QTouchDevice
+QtGui               QTouchEvent
+QtGui               QTransform
+QtGui               QValidator
+QtGui               QVector2D
+QtGui               QVector3D
+QtGui               QVector4D
+QtGui               QWhatsThisClickedEvent
+QtGui               QWheelEvent
+QtGui               QWindow
+QtGui               QWindowStateChangeEvent
+
+QtHelp              QHelpContentItem
+QtHelp              QHelpContentModel
+QtHelp              QHelpContentWidget
+QtHelp              QHelpEngine
+QtHelp              QHelpEngineCore
+QtHelp              QHelpIndexModel
+QtHelp              QHelpIndexWidget
+QtHelp              QHelpSearchEngine
+QtHelp              QHelpSearchQuery
+QtHelp              QHelpSearchQueryWidget
+QtHelp              QHelpSearchResultWidget
+
+QtMacExtras         QMacPasteboardMime
+
+QtMultimedia        QAbstractVideoBuffer
+QtMultimedia        QAbstractVideoSurface
+QtMultimedia        QAudio
+QtMultimedia        QAudioBuffer
+QtMultimedia        QAudioDecoder
+QtMultimedia        QAudioDeviceInfo
+QtMultimedia        QAudioEncoderSettings
+QtMultimedia        QAudioFormat
+QtMultimedia        QAudioInput
+QtMultimedia        QAudioOutput
+QtMultimedia        QAudioProbe
+QtMultimedia        QAudioRecorder
+QtMultimedia        QCamera
+QtMultimedia        QCameraExposure
+QtMultimedia        QCameraFocus
+QtMultimedia        QCameraFocusZone
+QtMultimedia        QCameraInfo
+QtMultimedia        QCameraImageCapture
+QtMultimedia        QCameraImageProcessing
+QtMultimedia        QImageEncoderSettings
+QtMultimedia        QMediaBindableInterface
+QtMultimedia        QMediaContent
+QtMultimedia        QMediaControl
+QtMultimedia        QMediaMetaData
+QtMultimedia        QMediaObject
+QtMultimedia        QMediaPlayer
+QtMultimedia        QMediaPlaylist
+QtMultimedia        QMediaRecorder
+QtMultimedia        QMediaResource
+QtMultimedia        QMediaService
+QtMultimedia        QMediaTimeInterval
+QtMultimedia        QMediaTimeRange
+QtMultimedia        QMultimedia
+QtMultimedia        QRadioData
+QtMultimedia        QRadioTuner
+QtMultimedia        QSound
+QtMultimedia        QSoundEffect
+QtMultimedia        QVideoEncoderSettings
+QtMultimedia        QVideoFrame
+QtMultimedia        QVideoProbe
+QtMultimedia        QVideoSurfaceFormat
+
+QtMultimediaWidgets QCameraViewFinder
+QtMultimediaWidgets QGraphicsVideoItem
+QtMultimediaWidgets QVideoWidget
+
+QtNetwork           QAbstractNetworkCache
+QtNetwork           QAbstractSocket
+QtNetwork           QAuthenticator
+QtNetwork           QDnsDomainNameRecord
+QtNetwork           QDnsHostAddressRecord
+QtNetwork           QDnsLookup
+QtNetwork           QDnsMailExchangeRecord
+QtNetwork           QDnsServiceRecord
+QtNetwork           QDnsTextRecord
+QtNetwork           QHostAddress
+QtNetwork           QHostInfo
+QtNetwork           QHttpMultiPart
+QtNetwork           QHttpPart
+QtNetwork           QLocalServer
+QtNetwork           QLocalSocket
+QtNetwork           QNetworkAccessManager
+QtNetwork           QNetworkAddressEntry
+QtNetwork           QNetworkCacheMetaData
+QtNetwork           QNetworkConfiguration
+QtNetwork           QNetworkConfigurationManager
+QtNetwork           QNetworkCookie
+QtNetwork           QNetworkCookieJar
+QtNetwork           QNetworkDiskCache
+QtNetwork           QNetworkInterface
+QtNetwork           QNetworkProxy
+QtNetwork           QNetworkProxyFactory
+QtNetwork           QNetworkProxyQuery
+QtNetwork           QNetworkReply
+QtNetwork           QNetworkRequest
+QtNetwork           QNetworkSession
+QtNetwork           QSsl
+QtNetwork           QSslCertificate
+QtNetwork           QSslCertificateExtension
+QtNetwork           QSslCipher
+QtNetwork           QSslConfiguration
+QtNetwork           QSslError
+QtNetwork           QSslKey
+QtNetwork           QSslSocket
+QtNetwork           QTcpServer
+QtNetwork           QTcpSocket
+QtNetwork           QUdpSocket
+
+QtOpenGL            QGL
+QtOpenGL            QGLContext
+QtOpenGL            QGLFormat
+QtOpenGL            QGLWidget
+
+QtPositioning       QGeoAddress
+QtPositioning       QGeoAreaMonitorInfo
+QtPositioning       QGeoAreaMonitorSource
+QtPositioning       QGeoCircle
+QtPositioning       QGeoCoordinate
+QtPositioning       QGeoLocation
+QtPositioning       QGeoPositionInfo
+QtPositioning       QGeoPositionInfoSource
+QtPositioning       QGeoRectangle
+QtPositioning       QGeoSatelliteInfo
+QtPositioning       QGeoSatelliteInfoSource
+QtPositioning       QGeoShape
+QtPositioning       QNmeaPositionInfoSource
+
+QtPrintSupport      QAbstractPrintDialog
+QtPrintSupport      QPageSetupDialog
+QtPrintSupport      QPrintDialog
+QtPrintSupport      QPrintEngine
+QtPrintSupport      QPrintPreviewDialog
+QtPrintSupport      QPrintPreviewWidget
+QtPrintSupport      QPrinter
+QtPrintSupport      QPrinterInfo
+
+QtQml               QJSEngine
+QtQml               QJSValue
+QtQml               QJSValueIterator
+QtQml               QQmlAbstractUrlInterceptor
+QtQml               QQmlApplicationEngine
+QtQml               QQmlComponent
+QtQml               QQmlContext
+QtQml               QQmlEngine
+QtQml               QQmlError
+QtQml               QQmlExpression
+QtQml               QQmlExtensionPlugin
+QtQml               QQmlFileSelector
+QtQml               QQmlIncubator
+QtQml               QQmlIncubatorControl
+QtQml               QQmlImageProviderBase
+QtQml               QQmlListProperty
+QtQml               QQmlListReference
+QtQml               QQmlNetworkAccessManagerFactory
+QtQml               QQmlParserStatus
+QtQml               QQmlProperty
+QtQml               QQmlPropertyMap
+QtQml               QQmlPropertyValueSource
+QtQml               QQmlScriptString
+
+QtQuick             QQuickFramebufferObject
+QtQuick             QQuickImageProvider
+QtQuick             QQuickItem
+QtQuick             QQuickPaintedItem
+QtQuick             QQuickTextDocument
+QtQuick             QQuickTextureFactory
+QtQuick             QQuickView
+QtQuick             QQuickWindow
+QtQuick             QSGBasicGeometryNode
+QtQuick             QSGClipNode
+QtQuick             QSGDynamicTexture
+QtQuick             QSGFlatColorMaterial
+QtQuick             QSGGeometry
+QtQuick             QSGGeometryNode
+QtQuick             QSGMaterial
+QtQuick             QSGMaterialShader
+QtQuick             QSGMaterialType
+QtQuick             QSGNode
+QtQuick             QSGOpacityNode
+QtQuick             QSGOpaqueTextureMaterial
+QtQuick             QSGSimpleRectNode
+QtQuick             QSGSimpleTextureNode
+QtQuick             QSGTexture
+QtQuick             QSGTextureMaterial
+QtQuick             QSGTextureProvider
+QtQuick             QSGTransformNode
+QtQuick             QSGVertexColorMaterial
+
+QtQuickWidgets      QQuickWidget
+
+QtSensors           QAccelerometer
+QtSensors           QAccelerometerFilter
+QtSensors           QAccelerometerReading
+QtSensors           QAltimeter
+QtSensors           QAltimeterFilter
+QtSensors           QAltimeterReading
+QtSensors           QAmbientLightFilter
+QtSensors           QAmbientLightReading
+QtSensors           QAmbientLightSensor
+QtSensors           QAmbientTemperatureFilter
+QtSensors           QAmbientTemperatureReading
+QtSensors           QAmbientTemperatureSensor
+QtSensors           QCompass
+QtSensors           QCompassFilter
+QtSensors           QCompassReading
+QtSensors           QGyroscope
+QtSensors           QGyroscopeFilter
+QtSensors           QGyroscopeReading
+QtSensors           QHolsterFilter
+QtSensors           QHolsterReading
+QtSensors           QHolsterSensor
+QtSensors           QIRProximityFilter
+QtSensors           QIRProximityReading
+QtSensors           QIRProximitySensor
+QtSensors           QLightFilter
+QtSensors           QLightReading
+QtSensors           QLightSensor
+QtSensors           QMagnetometer
+QtSensors           QMagnetometerFilter
+QtSensors           QMagnetometerReading
+QtSensors           QOrientationFilter
+QtSensors           QOrientationReading
+QtSensors           QOrientationSensor
+QtSensors           QPressureFilter
+QtSensors           QPressureReading
+QtSensors           QPressureSensor
+QtSensors           QProximityFilter
+QtSensors           QProximityReading
+QtSensors           QProximitySensor
+QtSensors           QSensor
+QtSensors           QSensorFilter
+QtSensors           QSensorReading
+QtSensors           QTapFilter
+QtSensors           QTapReading
+QtSensors           QTapSensor
+QtSensors           QTiltFilter
+QtSensors           QTiltReading
+QtSensors           QTiltSensor
+QtSensors           QRotationFilter
+QtSensors           QRotationReading
+QtSensors           QRotationSensor
+
+QtSerialPort        QSerialPort
+QtSerialPort        QSerialPortInfo
+
+QtSql               QSql
+QtSql               QSqlDatabase
+QtSql               QSqlDriver
+QtSql               QSqlDriverCreatorBase
+QtSql               QSqlError
+QtSql               QSqlField
+QtSql               QSqlIndex
+QtSql               QSqlQuery
+QtSql               QSqlQueryModel
+QtSql               QSqlRecord
+QtSql               QSqlRelation
+QtSql               QSqlRelationalDelegate
+QtSql               QSqlRelationalTableModel
+QtSql               QSqlResult
+QtSql               QSqlTableModel
+
+QtSvg               QGraphicsSvgItem
+QtSvg               QSvgGenerator
+QtSvg               QSvgRenderer
+QtSvg               QSvgWidget
+
+QtTest              QSignalSpy
+QtTest              QTest
+
+QtWebKit            QWebDatabase
+QtWebKit            QWebElement
+QtWebKit            QWebElementCollection
+QtWebKit            QWebHistory
+QtWebKit            QWebHistoryInterface
+QtWebKit            QWebHistoryItem
+QtWebKit            QWebPluginFactory
+QtWebKit            QWebSecurityOrigin
+QtWebKit            QWebSettings
+
+QtWebKitWidgets     QGraphicsWebView
+QtWebKitWidgets     QWebFrame
+QtWebKitWidgets     QWebHitTestResult
+QtWebKitWidgets     QWebInspector
+QtWebKitWidgets     QWebPage
+QtWebKitWidgets     QWebView
+
+QtWebSockets        QMaskGenerator
+QtWebSockets        QWebSocket
+QtWebSockets        QWebSocketCorsAuthenticator
+QtWebSockets        QWebSocketProtocol
+QtWebSockets        QWebSocketServer
+
+QtWidgets           QAbstractButton
+QtWidgets           QAbstractGraphicsShapeItem
+QtWidgets           QAbstractItemDelegate
+QtWidgets           QAbstractItemView
+QtWidgets           QAbstractScrollArea
+QtWidgets           QAbstractSlider
+QtWidgets           QAbstractSpinBox
+QtWidgets           QAction
+QtWidgets           QActionGroup
+QtWidgets           QApplication
+QtWidgets           QBoxLayout
+QtWidgets           QButtonGroup
+QtWidgets           QCalendarWidget
+QtWidgets           QCheckBox
+QtWidgets           QColorDialog
+QtWidgets           QColumnView
+QtWidgets           QComboBox
+QtWidgets           QCommandLinkButton
+QtWidgets           QCommonStyle
+QtWidgets           QCompleter
+QtWidgets           QDataWidgetMapper
+QtWidgets           QDateEdit
+QtWidgets           QDateTimeEdit
+QtWidgets           QDesktopWidget
+QtWidgets           QDial
+QtWidgets           QDialog
+QtWidgets           QDialogButtonBox
+QtWidgets           QDirModel
+QtWidgets           QDockWidget
+QtWidgets           QDoubleSpinBox
+QtWidgets           QErrorMessage
+QtWidgets           QFileDialog
+QtWidgets           QFileIconProvider
+QtWidgets           QFileSystemModel
+QtWidgets           QFocusFrame
+QtWidgets           QFontComboBox
+QtWidgets           QFontDialog
+QtWidgets           QFormLayout
+QtWidgets           QFrame
+QtWidgets           QGesture
+QtWidgets           QGestureEvent
+QtWidgets           QGestureRecognizer
+QtWidgets           QGraphicsAnchor
+QtWidgets           QGraphicsAnchorLayout
+QtWidgets           QGraphicsBlurEffect
+QtWidgets           QGraphicsColorizeEffect
+QtWidgets           QGraphicsDropShadowEffect
+QtWidgets           QGraphicsEffect
+QtWidgets           QGraphicsEllipseItem
+QtWidgets           QGraphicsGridLayout
+QtWidgets           QGraphicsItem
+QtWidgets           QGraphicsItemGroup
+QtWidgets           QGraphicsLayout
+QtWidgets           QGraphicsLayoutItem
+QtWidgets           QGraphicsLineItem
+QtWidgets           QGraphicsLinearLayout
+QtWidgets           QGraphicsObject
+QtWidgets           QGraphicsOpacityEffect
+QtWidgets           QGraphicsPathItem
+QtWidgets           QGraphicsPixmapItem
+QtWidgets           QGraphicsPolygonItem
+QtWidgets           QGraphicsProxyWidget
+QtWidgets           QGraphicsRectItem
+QtWidgets           QGraphicsRotation
+QtWidgets           QGraphicsScale
+QtWidgets           QGraphicsScene
+QtWidgets           QGraphicsSceneContextMenuEvent
+QtWidgets           QGraphicsSceneDragDropEvent
+QtWidgets           QGraphicsSceneEvent
+QtWidgets           QGraphicsSceneHelpEvent
+QtWidgets           QGraphicsSceneHoverEvent
+QtWidgets           QGraphicsSceneMouseEvent
+QtWidgets           QGraphicsSceneMoveEvent
+QtWidgets           QGraphicsSceneResizeEvent
+QtWidgets           QGraphicsSceneWheelEvent
+QtWidgets           QGraphicsSimpleTextItem
+QtWidgets           QGraphicsTextItem
+QtWidgets           QGraphicsTransform
+QtWidgets           QGraphicsView
+QtWidgets           QGraphicsWidget
+QtWidgets           QGridLayout
+QtWidgets           QGroupBox
+QtWidgets           QHBoxLayout
+QtWidgets           QHeaderView
+QtWidgets           QInputDialog
+QtWidgets           QItemDelegate
+QtWidgets           QItemEditorCreatorBase
+QtWidgets           QItemEditorFactory
+QtWidgets           QKeyEventTransition
+QtWidgets           QKeySequenceEdit
+QtWidgets           QLCDNumber
+QtWidgets           QLabel
+QtWidgets           QLayout
+QtWidgets           QLayoutItem
+QtWidgets           QLineEdit
+QtWidgets           QListView
+QtWidgets           QListWidget
+QtWidgets           QListWidgetItem
+QtWidgets           QMainWindow
+QtWidgets           QMdiArea
+QtWidgets           QMdiSubWindow
+QtWidgets           QMenu
+QtWidgets           QMenuBar
+QtWidgets           QMessageBox
+QtWidgets           QMouseEventTransition
+QtWidgets           QPanGesture
+QtWidgets           QPinchGesture
+QtWidgets           QPlainTextDocumentLayout
+QtWidgets           QPlainTextEdit
+QtWidgets           QProgressBar
+QtWidgets           QProgressDialog
+QtWidgets           QPushButton
+QtWidgets           QRadioButton
+QtWidgets           QRubberBand
+QtWidgets           QScrollArea
+QtWidgets           QScrollBar
+QtWidgets           QScroller
+QtWidgets           QScrollerProperties
+QtWidgets           QShortcut
+QtWidgets           QSizeGrip
+QtWidgets           QSizePolicy
+QtWidgets           QSlider
+QtWidgets           QSpacerItem
+QtWidgets           QSpinBox
+QtWidgets           QSplashScreen
+QtWidgets           QSplitter
+QtWidgets           QSplitterHandle
+QtWidgets           QStackedLayout
+QtWidgets           QStackedWidget
+QtWidgets           QStatusBar
+QtWidgets           QStyle
+QtWidgets           QStyleFactory
+QtWidgets           QStyleHintReturn
+QtWidgets           QStyleHintReturnMask
+QtWidgets           QStyleHintReturnVariant
+QtWidgets           QStyleOption
+QtWidgets           QStyleOptionButton
+QtWidgets           QStyleOptionComboBox
+QtWidgets           QStyleOptionComplex
+QtWidgets           QStyleOptionDockWidget
+QtWidgets           QStyleOptionFocusRect
+QtWidgets           QStyleOptionFrame
+QtWidgets           QStyleOptionGraphicsItem
+QtWidgets           QStyleOptionGroupBox
+QtWidgets           QStyleOptionHeader
+QtWidgets           QStyleOptionMenuItem
+QtWidgets           QStyleOptionProgressBar
+QtWidgets           QStyleOptionRubberBand
+QtWidgets           QStyleOptionSizeGrip
+QtWidgets           QStyleOptionSlider
+QtWidgets           QStyleOptionSpinBox
+QtWidgets           QStyleOptionTab
+QtWidgets           QStyleOptionTabBarBase
+QtWidgets           QStyleOptionTabWidgetFrame
+QtWidgets           QStyleOptionTitleBar
+QtWidgets           QStyleOptionToolBar
+QtWidgets           QStyleOptionToolBox
+QtWidgets           QStyleOptionToolButton
+QtWidgets           QStyleOptionViewItem
+QtWidgets           QStylePainter
+QtWidgets           QStyledItemDelegate
+QtWidgets           QSwipeGesture
+QtWidgets           QSystemTrayIcon
+QtWidgets           QTabBar
+QtWidgets           QTabWidget
+QtWidgets           QTableView
+QtWidgets           QTableWidget
+QtWidgets           QTableWidgetItem
+QtWidgets           QTableWidgetSelectionRange
+QtWidgets           QTapAndHoldGesture
+QtWidgets           QTapGesture
+QtWidgets           QTextBrowser
+QtWidgets           QTextEdit
+QtWidgets           QTimeEdit
+QtWidgets           QToolBar
+QtWidgets           QToolBox
+QtWidgets           QToolButton
+QtWidgets           QToolTip
+QtWidgets           QTreeView
+QtWidgets           QTreeWidget
+QtWidgets           QTreeWidgetItem
+QtWidgets           QTreeWidgetItemIterator
+QtWidgets           QUndoCommand
+QtWidgets           QUndoGroup
+QtWidgets           QUndoStack
+QtWidgets           QUndoView
+QtWidgets           QVBoxLayout
+QtWidgets           QWhatsThis
+QtWidgets           QWidget
+QtWidgets           QWidgetAction
+QtWidgets           QWidgetItem
+QtWidgets           QWizard
+QtWidgets           QWizardPage
+
+QtWinExtras         QtWin
+QtWinExtras         QWinJumpList
+QtWinExtras         QWinJumpListCategory
+QtWinExtras         QWinJumpListItem
+QtWinExtras         QWinTaskbarButton
+QtWinExtras         QWinTaskbarProgress
+QtWinExtras         QWinThumbnailToolBar
+QtWinExtras         QWinThumbnailToolButton
+
+QtX11Extras         QX11Info
+
+QtXmlPatterns       QAbstractMessageHandler
+QtXmlPatterns       QAbstractUriResolver
+QtXmlPatterns       QAbstractXmlNodeModel
+QtXmlPatterns       QAbstractXmlReceiver
+QtXmlPatterns       QSimpleXmlNodeModel
+QtXmlPatterns       QSourceLocation
+QtXmlPatterns       QXmlFormatter
+QtXmlPatterns       QXmlItem
+QtXmlPatterns       QXmlName
+QtXmlPatterns       QXmlNamePool
+QtXmlPatterns       QXmlNodeModelIndex
+QtXmlPatterns       QXmlQuery
+QtXmlPatterns       QXmlResultItems
+QtXmlPatterns       QXmlSchema
+QtXmlPatterns       QXmlSchemaValidator
+QtXmlPatterns       QXmlSerializer
diff --git a/doc/sphinx/class_reference.rst b/doc/sphinx/class_reference.rst
new file mode 100644
index 0000000..687db42
--- /dev/null
+++ b/doc/sphinx/class_reference.rst
@@ -0,0 +1,12 @@
+PyQt5 Class Reference
+=====================
+
+This section contains the reference documentation for the classes and functions
+implemented by :mod:`PyQt5`.  At the moment most of this consists of links to
+the corresponding C++ documentation.  Future versions will include more
+Pythonic documentation.
+
+.. toctree::
+    :glob:
+
+    api/*
diff --git a/doc/sphinx/conf.py b/doc/sphinx/conf.py
new file mode 100644
index 0000000..58ebaf2
--- /dev/null
+++ b/doc/sphinx/conf.py
@@ -0,0 +1,200 @@
+# -*- coding: utf-8 -*-
+#
+# PyQt documentation build configuration file, created by
+# sphinx-quickstart on Sat May 30 14:28:55 2009.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.append(os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+#extensions = []
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'PyQt'
+copyright = u'2014 Riverbank Computing Limited'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '5.3.2'
+# The full version, including alpha/beta/rc tags.
+release = '5.3.2'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+#unused_docs = []
+
+# List of directories, relative to source directory, that shouldn't be searched
+# for source files.
+#exclude_trees = []
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+modindex_common_prefix = ['PyQt5.']
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+html_theme = 'default'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+html_title = "PyQt 5.3.2 Reference Guide"
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+html_logo = 'static/logo.png'
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+html_favicon = 'static/logo_tn.ico'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_use_modindex = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+html_show_sourcelink = False
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'PyQtdoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'PyQt.tex', u'PyQt Documentation',
+   u'Riverbank Computing Limited', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_use_modindex = True
+
+
+def setup(app):
+    """ Define roles specific to PyQt. """
+
+    pass
diff --git a/doc/sphinx/dbus.rst b/doc/sphinx/dbus.rst
new file mode 100644
index 0000000..8d6d492
--- /dev/null
+++ b/doc/sphinx/dbus.rst
@@ -0,0 +1,90 @@
+.. _ref-dbus:
+
+DBus Support
+============
+
+PyQt5 provides two different modules that implement support for DBus.  The
+:mod:`~PyQt5.QtDBus` module provides wrappers for the standard Qt DBus classes.
+The :mod:`dbus.mainloop.pyqt5` module add support for the Qt event loop to the
+standard ``dbus-python`` Python module.
+
+
+:mod:`~PyQt5.QtDBus`
+--------------------
+
+The :mod:`~PyQt5.QtDBus` module is used in a similar way to the C++ library it
+wraps.  The main difference is in the way it supports the demarshalling of
+DBus structures.  C++ relies on the template-based registration of types using
+``qDBusRegisterMetaType()`` which isn't possible from Python.  Instead a slot
+that accepts a DBus structure in an argument should specify a slot with a
+single :class:`~PyQt5.QtDBus.QDBusMessage` argument.  The implementation of the
+slot should then extract the arguments from the message using its
+:meth:`~PyQt5.QtDBus.QDBusMessage.arguments` method.
+
+For example, say we have a DBus method called ``setColors()`` that has a single
+argument that is an array of structures of three integers (red, green and
+blue).  The DBus signature of the argument would then be ``a(iii)``.  In C++
+you would typically define a class to hold the red, green and blue values and
+so your code would include the following (incomplete) fragments::
+
+    struct Color
+    {
+        int red;
+        int green;
+        int blue;
+    };
+    Q_DECLARE_METATYPE(Color)
+
+    qDBusRegisterMetaType<Color>();
+
+    class ServerAdaptor : public QDBusAbstractAdaptor
+    {
+        Q_OBJECT
+
+    public slots:
+        void setColors(QList<const Color &> colors);
+    };
+
+The Python version is, of course, much simpler::
+
+    class ServerAdaptor(QDBusAbstractAdaptor):
+
+        @pyqtSlot(QDBusMessage)
+        def setColors(self, message):
+            # Get the single argument.
+            colors = message.arguments()[0]
+
+            # The argument will be a list of 3-tuples of ints.
+            for red, green, blue in colors:
+                print("RGB:", red, green, blue)
+
+Note that this technique can be used for arguments of any type, it is only
+require if DBus structures are involved.
+
+
+:mod:`dbus.mainloop.pyqt5`
+--------------------------
+
+The :mod:`dbus.mainloop.pyqt5` module provides support for the Qt event loop to
+``dbus-python``.  The module's API is almost identical to that of the
+:mod:`dbus.mainloop.glib` modules that provides support for the GLib event
+loop.
+
+The :mod:`dbus.mainloop.pyqt5` module contains the following function.
+
+.. function:: DBusQtMainLoop(set_as_default=False)
+
+    Create a ``dbus.mainloop.NativeMainLoop`` object that uses the the Qt event
+    loop.
+
+    :param set_as_default:
+        is optionally set to make the main loop instance the default for all
+        new Connection and Bus instances.  It may only be specified as a
+        keyword argument, and not as a positional argument.
+
+The following code fragment is all that is normally needed to set up the
+standard ``dbus-python`` language bindings package to be used with PyQt5::
+
+    from dbus.mainloop.pyqt5 import DBusQtMainLoop
+
+    DBusQtMainLoop(set_as_default=True)
diff --git a/doc/sphinx/deploy_commercial.rst b/doc/sphinx/deploy_commercial.rst
new file mode 100644
index 0000000..6b731b9
--- /dev/null
+++ b/doc/sphinx/deploy_commercial.rst
@@ -0,0 +1,21 @@
+Deploying Commercial PyQt5 Applications
+=======================================
+
+Deploying commercial PyQt5 applications can be a complicated process for a
+number of reasons:
+
+- It is usually better not to rely on pre-requisite packages being already
+  installed on the user's system.  This means that as well as your application
+  code, you also need to include the Python interpreter, the standard library,
+  third-pary packages and extension modules, and Qt itself.
+
+- Some target platforms (iOS for example) have restrictions on how an 
+  application is built in order for it to be included in app stores.
+
+- It is necessary to discourage users from accessing the underlying PyQt5
+  modules for themselves.  A user that used the modules shipped with your
+  application to develop new applications would themselves be considered a
+  developer and would need their own commercial PyQt5 license.
+
+The recommended solution to all of these issues is to use `pyqtdeploy 
+<http://www.riverbankcomputing.com/software/pyqtdeploy/>`__.
diff --git a/doc/sphinx/designer.rst b/doc/sphinx/designer.rst
new file mode 100644
index 0000000..7bf3263
--- /dev/null
+++ b/doc/sphinx/designer.rst
@@ -0,0 +1,374 @@
+Using Qt Designer
+=================
+
+Qt Designer is the Qt tool for designing and building graphical user
+interfaces.  It allows you to design widgets, dialogs or complete main windows
+using on-screen forms and a simple drag-and-drop interface.  It has the ability
+to preview your designs to ensure they work as you intended, and to allow you
+to prototype them with your users, before you have to write any code.
+
+Qt Designer uses XML ``.ui`` files to store designs and does not generate any
+code itself.  Qt includes the ``uic`` utility that generates the C++ code that
+creates the user interface.  Qt also includes the ``QUiLoader`` class that
+allows an application to load a ``.ui`` file and to create the corresponding
+user interface dynamically.
+
+PyQt5 does not wrap the ``QUiLoader`` class but instead includes the
+:mod:`~PyQt5.uic` Python module.  Like ``QUiLoader`` this module can load
+``.ui`` files to create a user interface dynamically.  Like the :program:`uic`
+utility it can also generate the Python code that will create the user
+interface.  PyQt5's :program:`pyuic5` utility is a command line interface to
+the :mod:`~PyQt5.uic` module.  Both are described in detail in the following
+sections.
+
+
+Using the Generated Code
+------------------------
+
+The code that is generated has an identical structure to that generated by Qt's
+``uic`` and can be used in the same way.
+
+The code is structured as a single class that is derived from the Python
+``object`` type.  The name of the class is the name of the toplevel object set
+in Designer with ``Ui_`` prepended.  (In the C++ version the class is defined
+in the ``Ui`` namespace.)  We refer to this class as the *form class*.
+
+The class contains a method called ``setupUi()``.  This takes a single argument
+which is the widget in which the user interface is created.  The type of this
+argument (typically :class:`~PyQt5.QtWidgets.QDialog`,
+:class:`~PyQt5.QtWidgets.QWidget` or :class:`~PyQt5.QtWidgets.QMainWindow`) is
+set in Designer.  We refer to this type as the *Qt base class*.
+
+In the following examples we assume that a ``.ui`` file has been created
+containing a dialog and the name of the :class:`~PyQt5.QtWidgets.QDialog`
+object is ``ImageDialog``.  We also assume that the name of the file containing
+the generated Python code is :file:`ui_imagedialog.py`.  The generated code can
+then be used in a number of ways.
+
+The first example shows the direct approach where we simply create a simple
+application to create the dialog::
+
+    import sys
+    from PyQt5.QtWidgets import QApplication, QDialog
+    from ui_imagedialog import Ui_ImageDialog
+
+    app = QApplication(sys.argv)
+    window = QDialog()
+    ui = Ui_ImageDialog()
+    ui.setupUi(window)
+
+    window.show()
+    sys.exit(app.exec_())
+
+The second example shows the single inheritance approach where we sub-class
+:class:`~PyQt5.QtWidgets.QDialog` and set up the user interface in the
+``__init__()`` method::
+
+    from PyQt5.QtWidgets import QDialog
+    from ui_imagedialog import Ui_ImageDialog
+
+    class ImageDialog(QDialog):
+        def __init__(self):
+            super(ImageDialog, self).__init__()
+
+            # Set up the user interface from Designer.
+            self.ui = Ui_ImageDialog()
+            self.ui.setupUi(self)
+
+            # Make some local modifications.
+            self.ui.colorDepthCombo.addItem("2 colors (1 bit per pixel)")
+
+            # Connect up the buttons.
+            self.ui.okButton.clicked.connect(self.accept)
+            self.ui.cancelButton.clicked.connect(self.reject)
+
+The third example shows the multiple inheritance approach::
+
+    from PyQt5.QtGui import QDialog
+    from ui_imagedialog import Ui_ImageDialog
+
+    class ImageDialog(QDialog, Ui_ImageDialog):
+        def __init__(self):
+            super(ImageDialog, self).__init__()
+
+            # Set up the user interface from Designer.
+            self.setupUi(self)
+
+            # Make some local modifications.
+            self.colorDepthCombo.addItem("2 colors (1 bit per pixel)")
+
+            # Connect up the buttons.
+            self.okButton.clicked.connect(self.accept)
+            self.cancelButton.clicked.connect(self.reject)
+
+It is also possible to use the same approach used in PyQt v3.  This is shown in
+the final example::
+
+    from ui_imagedialog import ImageDialog
+
+    class MyImageDialog(ImageDialog):
+        def __init__(self):
+            super(MyImageDialog, self).__init__()
+
+            # Make some local modifications.
+            self.colorDepthCombo.addItem("2 colors (1 bit per pixel)")
+
+            # Connect up the buttons.
+            self.okButton.clicked.connect(self.accept)
+            self.cancelButton.clicked.connect(self.reject)
+
+For a full description see the Qt Designer Manual in the Qt Documentation.
+
+
+The :mod:`~PyQt5.uic` Module
+----------------------------
+
+The :mod:`~PyQt5.uic` module contains the following functions and objects.
+
+.. currentmodule:: PyQt5.uic
+
+.. data:: widgetPluginPath
+
+    The list of the directories that are searched for widget plugins.
+    Initially it contains the name of the directory that contains the widget
+    plugins included with PyQt5.
+
+.. function:: compileUi(uifile, pyfile[, execute=False[, indent=4[, from_imports=False[, resource_suffix='_rc']]]])
+
+    Generate a Python module that will create a user interface from a Qt
+    Designer ``.ui`` file.
+
+    :param uifile:
+        the file name or file-like object containing the ``.ui`` file.
+    :param pyfile:
+        the file-like object to which the generated Python code will be written
+        to.
+    :param execute:
+        is optionally set if a small amount of additional code is to be
+        generated that will display the user interface if the code is run as a
+        standalone application.
+    :param indent:
+        the optional number of spaces used for indentation in the generated
+        code.  If it is zero then a tab character is used instead.
+    :param from_imports:
+        is optionally set to generate import statements that are relative to
+        ``'.'``.  At the moment this only applies to the import of resource
+        modules.
+    :resource_suffix:
+        is the suffix appended to the basename of any resource file specified
+        in the ``.ui`` file to create the name of the Python module generated
+        from the resource file by ``pyrcc5``.  The default is ``'_rc'``, i.e.
+        if the ``.ui`` file specified a resource file called ``foo.qrc`` then
+        the corresponding Python module is ``foo_rc``.
+
+.. function:: compileUiDir(dir[, recurse=False[, map=None[, \*\*compileUi_args]]])
+
+    Create Python modules from Qt Designer ``.ui`` files in a directory or
+    directory tree.
+
+    :param dir:
+        the name of the directory to scan for files whose name ends with
+        ``.ui``.  By default the generated Python module is created in the same
+        directory ending with ``.py``.
+    :param recurse:
+        is optionally set if any sub-directories should be scanned.
+    :param map:
+        an optional callable that is passed the name of the directory
+        containing the ``.ui`` file and the name of the Python module that will
+        be created.  The callable should return a tuple of the name of the
+        directory in which the Python module will be created and the (possibly
+        modified) name of the module.
+    :param compileUi_args:
+        are any additional keyword arguments that are passed to
+        :func:`~PyQt5.uic.compileUi` that is called to create each Python
+        module.
+
+.. function:: loadUiType(uifile[, from_imports=False[, resource_suffix='_rc']])
+
+    Load a Qt Designer ``.ui`` file and return a tuple of the generated
+    *form class* and the *Qt base class*.  These can then be used to
+    create any number of instances of the user interface without having to
+    parse the ``.ui`` file more than once.
+
+    :param uifile:
+        the file name or file-like object containing the ``.ui`` file.
+    :param from_imports:
+        is optionally set to use import statements that are relative to
+        ``'.'``.  At the moment this only applies to the import of resource
+        modules.
+    :resource_suffix:
+        is the suffix appended to the basename of any resource file specified
+        in the ``.ui`` file to create the name of the Python module generated
+        from the resource file by ``pyrcc5``.  The default is ``'_rc'``, i.e.
+        if the ``.ui`` file specified a resource file called ``foo.qrc`` then
+        the corresponding Python module is ``foo_rc``.
+    :rtype:
+        the *form class* and the *Qt base class*.
+
+.. function:: loadUi(uifile[, baseinstance=None[, package=''[, resource_suffix='_rc']]])
+
+    Load a Qt Designer ``.ui`` file and returns an instance of the user
+    interface.
+
+    :param uifile:
+        the file name or file-like object containing the ``.ui`` file.
+    :param baseinstance:
+        the optional instance of the *Qt base class*.  If specified then the
+        user interface is created in it.  Otherwise a new instance of the base
+        class is automatically created.
+    :param package:
+        the optional package that is the base package for any relative imports
+        of custom widgets.
+    :resource_suffix:
+        is the suffix appended to the basename of any resource file specified
+        in the ``.ui`` file to create the name of the Python module generated
+        from the resource file by ``pyrcc5``.  The default is ``'_rc'``, i.e.
+        if the ``.ui`` file specified a resource file called ``foo.qrc`` then
+        the corresponding Python module is ``foo_rc``.
+    :rtype:
+        the ``QWidget`` sub-class that implements the user interface.
+
+
+:program:`pyuic5`
+-----------------
+
+The :program:`pyuic5` utility is a command line interface to the
+:mod:`~PyQt5.uic` module.  The command has the following syntax::
+
+    pyuic5 [options] .ui-file
+
+The full set of command line options is:
+
+.. program:: pyuic5
+
+.. cmdoption:: -h, --help
+
+    A help message is written to ``stdout``.
+
+.. cmdoption:: --version
+
+    The version number is written to ``stdout``.
+
+.. cmdoption:: -i <N>, --indent <N>
+
+    The Python code is generated using an indentation of ``<N>`` spaces.  If
+    ``<N>`` is 0 then a tab is used.  The default is 4.
+
+.. cmdoption:: -o <FILE>, --output <FILE>
+
+    The Python code generated is written to the file ``<FILE>``.
+
+.. cmdoption:: -p, --preview
+
+    The GUI is created dynamically and displayed.  No Python code is generated.
+
+.. cmdoption:: -x, --execute
+
+    The generated Python code includes a small amount of additional code that
+    creates and displays the GUI when it is executes as a standalone
+    application.
+
+.. cmdoption:: --from-imports
+
+    Resource modules are imported using ``from . import`` rather than a simple
+    ``import``.
+
+.. cmdoption:: --resource-suffix <SUFFIX>
+
+    The suffix ``<SUFFIX>`` is appended to the basename of any resource file
+    specified in the ``.ui`` file to create the name of the Python module
+    generated from the resource file by :program:`pyrcc5`.  The default is
+    ``_rc``.  For example if the ``.ui`` file specified a resource file called
+    ``foo.qrc`` then the corresponding Python module is ``foo_rc``.
+
+Note that code generated by :program:`pyuic5` is not guaranteed to be
+compatible with earlier versions of PyQt5.  However, it is guaranteed to be
+compatible with later versions.  If you have no control over the version of
+PyQt5 the users of your application are using then you should run
+:program:`pyuic5`, or call :func:`~PyQt5.uic.compileUi()`, as part of your
+installation process.  Another alternative would be to distribute the ``.ui``
+files (perhaps as part of a resource file) and have your application load them
+dynamically.
+
+
+.. _ref-designer-plugins:
+
+Writing Qt Designer Plugins
+---------------------------
+
+Qt Designer can be extended by writing plugins.  Normally this is done using
+C++ but PyQt5 also allows you to write plugins in Python.  Most of the time a
+plugin is used to expose a custom widget to Designer so that it appears in
+Designer's widget box just like any other widget.  It is possibe to change the
+widget's properties and to connect its signals and slots.
+
+It is also possible to add new functionality to Designer.  See the Qt
+documentation for the full details.  Here we will concentrate on describing
+how to write custom widgets in Python.
+
+The process of integrating Python custom widgets with Designer is very similar
+to that used with widget written using C++.  However, there are particular
+issues that have to be addressed.
+
+- Designer needs to have a C++ plugin that conforms to the interface defined by
+  the ``QDesignerCustomWidgetInterface`` class.  (If the plugin exposes more
+  than one custom widget then it must conform to the interface defined by the
+  ``QDesignerCustomWidgetCollectionInterface`` class.)  In addition the plugin
+  class must sub-class :class:`~PyQt5.QtCore.QObject` as well as the interface
+  class.  PyQt5 does not allow Python classes to be sub-classed from more than
+  one Qt class.
+
+- Designer can only connect Qt signals and slots.  It has no understanding of
+  Python signals or callables.
+
+- Designer can only edit Qt properties that represent C++ types.  It has no
+  understanding of Python attributes or Python types.
+
+PyQt5 provides the following components and features to resolve these issues as
+simply as possible.
+
+- PyQt5's QtDesigner module includes additional classes (all of which have a
+  ``QPy`` prefix) that are already sub-classed from the necessary Qt classes.
+  This avoids the need to sub-class from more than one Qt class in Python.  For
+  example, where a C++ custom widget plugin would sub-class from
+  :class:`~PyQt5.QtCore.QObject` and ``QDesignerCustomWidgetInterface``, a
+  Python custom widget plugin would instead sub-class from
+  :class:`~PyQt5.QtDesigner.QPyDesignerCustomWidgetPlugin`.
+
+- PyQt5 installs a C++ plugin in Designer's plugin directory.  It conforms to
+  the interface defined by the ``QDesignerCustomWidgetCollectionInterface``
+  class.  It searches a configurable set of directories looking for Python
+  plugins that implement a class sub-classed from
+  :class:`~PyQt5.QtDesigner.QPyDesignerCustomWidgetPlugin`.  Each class that is
+  found is instantiated and the instance created is added to the custom widget
+  collection.
+
+  The :envvar:`PYQTDESIGNERPATH` environment variable specifies the set of
+  directories to search for plugins.  Directory names are separated by a path
+  separator (a semi-colon on Windows and a colon on other platforms).  If a
+  directory name is empty (ie. there are consecutive path separators or a
+  leading or trailing path separator) then a set of default directories is
+  automatically inserted at that point.  The default directories are the
+  :file:`python` subdirectory of each directory that Designer searches for its
+  own plugins.  If the environment variable is not set then only the default
+  directories are searched.  If a file's basename does not end with ``plugin``
+  then it is ignored.
+
+- A Python custom widget may define new Qt signals using
+  :func:`~PyQt5.QtCore.pyqtSignal`.
+
+- A Python method may be defined as a new Qt slot by using the
+  :func:`~PyQt5.QtCore.pyqtSlot` decorator.
+
+- A new Qt property may be defined using the :func:`~PyQt5.QtCore.pyqtProperty`
+  function.
+
+Note that the ability to define new Qt signals, slots and properties from
+Python is potentially useful to plugins conforming to any plugin interface and
+not just that used by Designer.
+
+For a simple but complete and fully documented example of a custom widget that
+defines new Qt signals, slots and properties, and its plugin, look in the
+:file:`examples/designer/plugins` directory of the PyQt5 source package.  The
+:file:`widgets` subdirectory contains the :file:`pydemo.py` custom widget and
+the :file:`python` subdirectory contains its :file:`pydemoplugin.py` plugin.
diff --git a/doc/sphinx/extension_api.rst b/doc/sphinx/extension_api.rst
new file mode 100644
index 0000000..f1a19b1
--- /dev/null
+++ b/doc/sphinx/extension_api.rst
@@ -0,0 +1,212 @@
+.. _ref-build-system:
+
+The PyQt5 Extension API
+=======================
+
+An important feature of PyQt5 (and SIP generated modules in general) is the
+ability for other extension modules to build on top of it.
+`QScintilla <http://www.riverbankcomputing.com/software/qscintilla/>`__ is
+such an example.
+
+PyQt5 provides an extension API that can be used by other modules.  This has
+the advantage of sharing code and also enforcing consistent behaviour.  Part of
+the API is accessable from Python and part from C++.
+
+
+Python API
+----------
+
+The Python part of the API is accessible via the :mod:`~PyQt5.QtCore` module
+and is typically used by an extension module's equivalent of PyQt5's
+:program:`configure.py`.
+
+The API consists of :attr:`PyQt5.QtCore.PYQT_CONFIGURATION` which is a dict
+that describes how PyQt5 was configured.  At the moment it contains a single
+value called ``sip_flags`` which is a string containing the ``-t`` and ``-x``
+flags that were passed to the :program:`sip` executable by
+:program:`configure.py`.  Other extension modules must use the same flags in
+their configuration.
+
+This information is also provided by SIP v4's :mod:`~sip.sipconfig` module.
+However this module will not be implemented by SIP v5.
+
+
+C++ API
+-------
+
+The C++ API is a set of functions.  The addresses of each function is obtained
+by calling SIP's :c:func:`sipImportSymbol` function with the name of the
+function required.
+
+Several of the functions are provided as a replacement for SIP v4 features
+(i.e. ``SIP_ANYSLOT``, ``SIP_QOBJECT``, ``SIP_RXOBJ_CON``, ``SIP_RXOBJ_DIS``,
+``SIP_SIGNAL``, ``SIP_SLOT``, ``SIP_SLOT_CON`` and ``SIP_SLOT_DIS``) that will
+not be supported by SIP v5.
+
+The functions exported by PyQt5 are as follows:
+
+
+.. cpp:function:: char **pyqt5_from_argv_list(PyObject *argv_list, int &argc)
+
+    Convert a Python list to a standard C array of command line arguments and
+    an argument count.
+
+    :param argv_list:
+        is the Python list of arguments.
+    :param argc:
+        is updated with the number of arguments in the list.
+    :return:
+        an array of pointers to the arguments on the heap.
+
+
+.. cpp:function:: PyObject *pyqt5_from_qvariant_by_type(QVariant &value, PyObject *type)
+
+    Convert a :class:`~PyQt5.QtCore.QVariant` to a Python object according to
+    an optional Python type.
+
+    :param value:
+        is the value to convert.
+    :param type:
+        is the Python type.
+    :return:
+        the converted value.  If it is ``0`` then a Python exception will have
+        been raised.
+
+.. cpp:function:: sipErrorState pyqt5_get_connection_parts(PyObject *slot, QObject *transmitter, const char *signal_signature, bool single_shot, QObject **receiver, QByteArray &slot_signature)
+
+    Get the receiver object and slot signature to allow a signal to be
+    connected to an optional transmitter.
+
+    :param slot:
+        is the slot and should be a callable or a bound signal.
+    :param transmitter:
+        is the optional :class:`~PyQt5.QtCore.QObject` transmitter.
+    :param signal_signature:
+        is the signature of the signal to be connected.
+    :param single_shot:
+        is ``true`` if the signal will only ever be emitted once.
+    :param receiver:
+        is updated with the :class:`~PyQt5.QtCore.QObject` receiver.  This may
+        be a proxy if the slot requires it.
+    :param slot_signature:
+        is updated with the signature of the slot.
+    :return:
+        the error state.  If this is :c:data:`sipErrorFail` then a Python
+        exception will have been raised.
+
+.. cpp:function:: const QMetaObject *pyqt5_get_qmetaobject(PyTypeObject *type)
+
+    Get the QMetaObject instance for a Python type.  The Python type must be a
+    sub-type of :class:`~PyQt5.QtCore.QObject`'s Python type.
+
+    :param type:
+        is the Python type object.
+    :return:
+        the :class:`~PyQt5.QtCore.QMetaObject`.
+
+.. cpp:function:: sipErrorState pyqt5_get_pyqtsignal_parts(PyObject *signal, QObject **transmitter, QByteArray &signal_signature)
+
+    Get the transmitter object and signal signature from a bound signal.
+
+    :param signal:
+        is the bound signal.
+    :param transmitter:
+        is updated with the :class:`~PyQt5.QtCore.QObject` transmitter.
+    :param signal_signature:
+        is updated with the signature of the signal.
+    :return:
+        the error state.  If this is :c:data:`sipErrorFail` then a Python
+        exception will have been raised.
+
+
+.. cpp:function:: sipErrorState pyqt5_get_pyqtslot_parts(PyObject *slot, QObject **receiver, QByteArray &slot_signature)
+
+    Get the receiver object and slot signature from a callable decorated with
+    :func:`~PyQt5.QtCore.pyqtSlot`.
+
+    :param slot:
+        is the callable slot.
+    :param receiver:
+        is updated with the :class:`~PyQt5.QtCore.QObject` receiver.
+    :param slot_signature:
+        is updated with the signature of the slot.
+    :return:
+        the error state.  If this is :c:data:`sipErrorFail` then a Python
+        exception will have been raised.
+
+
+.. cpp:function:: sipErrorState pyqt5_get_signal_signature(PyObject *signal, const QObject *transmitter, QByteArray &signal_signature)
+
+    Get the signature string for a bound or unbound signal.  If the signal is
+    bound then it must be bound to the given transmitter.
+
+    :param signal:
+        is the signal.
+    :param transmitter:
+        is the :class:`~PyQt5.QtCore.QObject` transmitter.
+    :param signal_signature:
+        is updated with the signature of the signal.
+    :return:
+        the error state.  If this is :c:data:`sipErrorFail` then a Python
+        exception will have been raised.
+
+
+.. cpp:function:: void pyqt5_register_from_qvariant_convertor(bool (*convertor)(const QVariant &, PyObject **))
+
+    Register a convertor function that converts a
+    :class:`~PyQt5.QtCore.QVariant` value to a Python object.
+
+    :param convertor:
+        is the convertor function.  This takes two arguments.  The first
+        argument is the :class:`~PyQt5.QtCore.QVariant` value to be converted.
+        The second argument is updated with a reference to the result of the
+        conversion and it will be ``0``, and a Python exception raised, if
+        there was an error.  The convertor will return ``true`` if the value
+        was handled so that no other convertor will be tried.
+
+
+.. cpp:function:: void pyqt5_register_to_qvariant_convertor(bool (*convertor)(PyObject *, QVariant &, bool *))
+
+    Register a convertor function that converts a Python object to a
+    :class:`~PyQt5.QtCore.QVariant` value.
+
+    :param convertor:
+        is the convertor function.  This takes three arguments.  The first
+        argument is the Python object to be converted. The second argument is a
+        pointer to :class:`~PyQt5.QtCore.QVariant` value that is updated with
+        the result of the conversion.  The third argument is updated with an
+        error flag which will be ``false``, and a Python exception raised, if
+        there was an error.  The convertor will return ``true`` if the value
+        was handled so that no other convertor will be tried.
+
+
+.. cpp:function:: void pyqt5_register_to_qvariant_data_convertor(bool (*convertor)(PyObject *, void *, int, bool *))
+
+    Register a convertor function that converts a Python object to the
+    pre-allocated data of a :class:`~PyQt5.QtCore.QVariant` value.
+
+    :param convertor:
+        is the convertor function.  This takes four arguments.  The first
+        argument is the Python object to be converted. The second argument is a
+        pointer to the pre-allocated data of a :class:`~PyQt5.QtCore.QVariant`
+        value that is updated with the result of the conversion.  The third
+        argument is the meta-type of the value.  The fourth argument is updated
+        with an error flag which will be ``false``, and a Python exception
+        raised, if there was an error.  The convertor will return ``true`` if
+        the value was handled so that no other convertor will be tried.
+
+
+.. cpp:function:: void pyqt5_update_argv_list(PyObject *argv_list, int argc, char **argv)
+
+    Update a Python list from a standard C array of command line arguments and
+    an argument count.  This is used in conjunction with
+    :cpp:func:`pyqt5_from_argv_list` to handle the updating of argument lists
+    after calling constructors of classes such as
+    :class:`~PyQt5.QtCore.QCoreApplication`.
+
+    :param argv_list:
+        is the Python list of arguments that will be updated.
+    :param argc:
+        is the number of command line arguments.
+    :param argv:
+        is the array of pointers to the arguments on the heap.
diff --git a/doc/sphinx/gotchas.rst b/doc/sphinx/gotchas.rst
new file mode 100644
index 0000000..c2cecac
--- /dev/null
+++ b/doc/sphinx/gotchas.rst
@@ -0,0 +1,167 @@
+Things to be Aware Of
+=====================
+
+Keyword Arguments
+-----------------
+
+PyQt5 supports the use of keyword arguments for optional arguments.  Although
+the PyQt5 and Qt documentation may indicate that an argument has a particular
+name, you may find that PyQt5 actually uses a different name.  This is because
+the name of an argument is not part of the Qt API and there is some
+inconsistency in the way that similar arguments are named.  Different versions
+of Qt may use a different name for an argument which wouldn't affect the C++
+API but would break the Python API.
+
+The docstrings that PyQt5 generates for all classes, functions and methods will
+contain the correct argument names.  In a future version of PyQt5 the
+documentation will also be guaranteed to contain the correct argument names.
+
+
+Python Strings, Qt Strings and Unicode
+--------------------------------------
+
+Qt uses the ``QString`` class to represent Unicode strings, and the
+``QByteArray`` to represent byte arrays or strings.  In Python v3 the
+corresponding native object types are ``str`` and ``bytes``.  In Python v2 the
+corresponding native object types are ``unicode`` and ``str``.
+
+PyQt5 does its best to automatically convert between objects of the various
+types.  Explicit conversions can be easily made where necessary.
+
+In some cases PyQt5 will not perform automatic conversions where it is
+necessary to distinguish between different overloaded methods.
+
+For Python v3 the following conversions are done by default.
+
+- If Qt expects a ``char *`` (or a ``const`` version) then PyQt5 will accept a
+  ``str`` that contains only ASCII characters, a ``bytes``, a ``QByteArray``,
+  or a Python object that implements the buffer protocol.
+
+- If Qt expects a ``char`` (or a ``const`` version) then PyQt5 will accept the
+  same types as for ``char *`` and also require that a single character is
+  provided.
+
+- If Qt expects a ``signed char *`` or an ``unsigned char *`` (or a ``const``
+  version) then PyQt5 will accept a ``bytes``.
+
+- If Qt expects a ``signed char`` or an ``unsigned char`` (or a ``const``
+  version) then PyQt5 will accept a ``bytes`` of length 1.
+
+- If Qt expects a ``QString`` then PyQt5 will accept a ``str``, a ``bytes``
+  that contains only ASCII characters or a ``QByteArray``.
+
+- If Qt expects a ``QByteArray`` then PyQt5 will also accept a ``str`` that
+  contains only Latin-1 characters, or a ``bytes``.
+
+For Python v2 the following conversions are done by default.
+
+- If Qt expects a ``char *``, ``signed char *`` or an ``unsigned char *`` (or a
+  ``const`` version) then PyQt5 will accept a ``unicode`` that contains only
+  ASCII characters, a ``str``, a ``QByteArray``, or a Python object that
+  implements the buffer protocol.
+
+- If Qt expects a ``char``, ``signed char`` or an ``unsigned char`` (or a
+  ``const`` version) then PyQt5 will accept the same types as for ``char *``,
+  ``signed char *`` and ``unsigned char *`` and also require that a single
+  character is provided.
+
+- If Qt expects a ``QString`` then PyQt5 will accept a ``unicode``, a ``str``
+  that contains only ASCII characters or a ``QByteArray``.
+
+- If Qt expects a ``QByteArray`` then PyQt5 will accept a ``unicode`` that
+  contains only Latin-1 characters, or a ``str``.
+
+Note that the different behaviour between Python v2 and v3 is due to v3's
+reduced support for the buffer protocol.
+
+
+Garbage Collection
+------------------
+
+C++ does not garbage collect unreferenced class instances, whereas Python does.
+In the following C++ fragment both colours exist even though the first can no
+longer be referenced from within the program::
+
+    col = new QColor();
+    col = new QColor();
+
+In the corresponding Python fragment, the first colour is destroyed when the
+second is assigned to ``col``::
+
+    col = QColor()
+    col = QColor()
+
+In Python, each colour must be assigned to different names.  Typically this is
+done within class definitions, so the code fragment would be something like::
+
+    self.col1 = QColor()
+    self.col2 = QColor()
+
+Sometimes a Qt class instance will maintain a pointer to another instance and
+will eventually call the destructor of that second instance.  The most common
+example is that a :class:`~PyQt5.QtCore.QObject` (and any of its sub-classes)
+keeps pointers to its children and will automatically call their destructors.
+In these cases, the corresponding Python object will also keep a reference to
+the corresponding child objects.
+
+So, in the following Python fragment, the first
+:class:`~PyQt5.QtWidgets.QLabel` is not destroyed when the second is assigned
+to ``lab`` because the parent :class:`~PyQt5.QtWidgets.QWidget` still has a
+reference to it::
+
+    parent = QWidget()
+    lab = QLabel("First label", parent)
+    lab = QLabel("Second label", parent)
+
+
+Multiple Inheritance
+--------------------
+
+It is not possible to define a new Python class that sub-classes from more than
+one Qt class.  The exception is classes specifically intended to act as mixin
+classes such as those (like :class:`~PyQt5.QtQml.QQmlParserStatus`) that
+implement Qt interfaces.
+
+
+Access to Protected Member Functions
+------------------------------------
+
+When an instance of a C++ class is not created from Python it is not possible
+to access the protected member functions of that instance.  Attempts to do so
+will raise a Python exception.  Also, any Python methods corresponding to the
+instance's virtual member functions will never be called.
+
+
+``None`` and ``NULL``
+---------------------
+
+Throughout PyQt5, the ``None`` value can be specified wherever ``NULL`` is
+acceptable to the underlying C++ code.
+
+Equally, ``NULL`` is converted to ``None`` whenever it is returned by the
+underlying C++ code.
+
+
+Support for ``void *``
+----------------------
+
+PyQt5 (actually SIP) represents ``void *`` values as objects of type
+:class:`sip.voidptr`.  Such values are often used to pass the addresses of
+external objects between different Python modules.  To make this easier, a
+Python integer (or anything that Python can convert to an integer) can be used
+whenever a :class:`sip.voidptr` is expected.
+
+A :class:`sip.voidptr` may be converted to a Python integer by using the
+``int()`` builtin function.
+
+A :class:`sip.voidptr` may be converted to a Python string by using its
+:meth:`~sip.voidptr.asstring` method.  The :meth:`~sip.voidptr.asstring` method
+takes an optional integer argument which is the length of the data in bytes.
+
+A :class:`sip.voidptr` may also be given a size (ie. the size of the block of
+memory that is pointed to) by calling its :meth:`~sip.voidptr.setsize` method.
+If it has a size then it is also able to support Python's buffer protocol and
+behaves like a Python ``memoryview`` object so that the block of memory can be
+treated as a mutable list of bytes.  It also means that the Python
+:mod:`struct` module can be used to unpack and pack binary data structures in
+memory, memory mapped files or shared memory.
diff --git a/doc/sphinx/i18n.rst b/doc/sphinx/i18n.rst
new file mode 100644
index 0000000..6fb9234
--- /dev/null
+++ b/doc/sphinx/i18n.rst
@@ -0,0 +1,95 @@
+Internationalisation of PyQt5 Applications
+==========================================
+
+PyQt5 and Qt include a comprehensive set of tools for translating applications
+into local languages.  For a full description, see the Qt Linguist Manual in
+the Qt documentation.
+
+The process of internationalising an application comprises the following
+steps.
+
+- The programmer uses :program:`pylupdate5` to create or update a ``.ts``
+  translation file for each language that the application is to be translated
+  into.  A ``.ts`` file is an XML file that contains the strings to be
+  translated and the corresponding translations that have already been made.
+  :program:`pylupdate5` can be run any number of times during development to
+  update the ``.ts`` files with the latest strings for translation.
+
+- The translator uses Qt Linguist to update the ``.ts`` files with translations
+  of the strings.
+
+- The release manager then uses Qt's :program:`lrelease` utility to convert the
+  ``.ts`` files to ``.qm`` files which are compact binary equivalents used by
+  the application.  If an application cannot find an appropriate ``.qm`` file,
+  or a particular string hasn't been translated, then the strings used in the
+  original source code are used instead.
+
+- The release manage may optionally use :program:`pyrcc5` to embed the ``.qm``
+  files, along with other application resources such as icons, in a Python
+  module.  This may make packaging and distribution of the application easier.
+
+
+:program:`pylupdate5`
+---------------------
+
+.. program:: pylupdate5
+
+:program:`pylupdate5` is PyQt5's equivalent to Qt's :program:`lupdate` utility
+and is used in exactly the same way.  A Qt ``.pro`` project file is read that
+specifies the Python source files and Qt Designer interface files from which
+the text that needs to be translated is extracted.  The ``.pro`` file also
+specifies the ``.ts`` translation files that :program:`pylupdate5` updates (or
+creates if necessary) and are subsequently used by Qt Linguist.
+
+
+Differences Between PyQt5 and Qt
+--------------------------------
+
+Qt implements internationalisation support through the
+:class:`~PyQt5.QtCore.QTranslator` class, and the
+:meth:`~PyQt5.QtCore.QCoreApplication.translate` and
+:meth:`~PyQt5.QtCore.QObject.tr` methods.  Usually
+:meth:`~PyQt5.QtCore.QObject.tr` is used to obtain the correct translation of a
+message.  The translation process uses a message context to allow the same
+message to be translated differently.  In Qt :meth:`~PyQt5.QtCore.QObject.tr`
+is actually generated by ``moc`` and uses the hardcoded class name as the
+context.  On the other hand, :meth:`~PyQt5.QtCore.QApplication.translate`
+allows the context to be specified explicitly.
+
+Unfortunately, because of the way Qt implements
+:meth:`~PyQt5.QtCore.QObject.tr` it is not possible for PyQt5 to exactly
+reproduce its behaviour.  The PyQt5 implementation of
+:meth:`~PyQt5.QtCore.QObject.tr` uses the class name of the instance as the
+context.  The key difference, and the source of potential problems, is that the
+context is determined dynamically in PyQt5, but is hardcoded in Qt.  In other
+words, the context of a translation may change depending on an instance's class
+hierarchy.  For example::
+
+    class A(QObject):
+        def hello(self):
+            return self.tr("Hello")
+
+    class B(A):
+        pass
+
+    a = A()
+    a.hello()
+
+    b = B()
+    b.hello()
+
+In the above the message is translated by ``a.hello()`` using a context of
+``A``, and by ``b.hello()`` using a context of ``B``.  In the equivalent C++
+version the context would be ``A`` in both cases.
+
+The PyQt5 behaviour is unsatisfactory and may be changed in the future.  It is
+recommended that :meth:`~PyQt5.QtCore.QCoreApplication.translate` be used in
+preference to :meth:`~PyQt5.QtCore.QObject.tr`.  This is guaranteed to work
+with current and future versions of PyQt5 and makes it much easier to share
+message files between Python and C++ code.  Below is the alternative
+implementation of ``A`` that uses
+:meth:`~PyQt5.QtCore.QCoreApplication.translate`::
+
+    class A(QObject):
+        def hello(self):
+            return QCoreApplication.translate('A', "Hello")
diff --git a/doc/sphinx/incompatibilities.rst b/doc/sphinx/incompatibilities.rst
new file mode 100644
index 0000000..3c6a647
--- /dev/null
+++ b/doc/sphinx/incompatibilities.rst
@@ -0,0 +1,41 @@
+Potential Incompatibilities with Earlier Versions
+=================================================
+
+PyQt5 v5.3
+----------
+
+Execution of Python Slots
+*************************
+
+In previous versions, when a signal was emitted to a Python slot
+that was not decorated with :func:`~PyQt5.QtCore.pyqtSlot`, it would not check
+that the underlying C++ receiver instance still existed.  This matched the
+PyQt4 behaviour at the time that PyQt5 v5.0 was released, but doesn't reflect
+the standard C++ behaviour.
+
+The lack of a check meant that an object could connect its
+:func:`~PyQt5.QtCore.QObject.destroyed` signal to itself so that it could
+monitor when its underlying C++ instance was destroyed.  Unfortunately this
+turned out to be a potential source of obscure bugs for more common code.
+
+In this version the check has been introduced - hence creating an
+incompatibility for any code that relies on the earlier behaviour.  As a
+workaround for this the ``no_receiver_check`` argument has been added to
+:func:`~PyQt5.QtCore.QObject.connect` which allows the check to be suppressed
+on a per connection basis.
+
+
+Qt Signals with Default Arguments
+*********************************
+
+In previous versions Qt signals with default arguments were exposed as multiple
+signals each with one additional default argument.  For example
+``QAbstractButton::clicked(bool checked = false)`` was exposed as
+``QAbstractButton::clicked(bool checked)`` and ``QAbstractButton::clicked()``
+where the former was the default signal.  It was therefore possible to index
+the latter by using an empty tuple as the key - although there was no benefit
+in doing so.
+
+In this version only the signal with all arguments supplied is exposed.
+However the signal's ``emit()`` method still supports the default argument,
+i.e. when used normally the change should not be noticed.
diff --git a/doc/sphinx/index.rst b/doc/sphinx/index.rst
new file mode 100644
index 0000000..d55ddf7
--- /dev/null
+++ b/doc/sphinx/index.rst
@@ -0,0 +1,29 @@
+PyQt5 Reference Guide
+=====================
+
+.. toctree::
+    :maxdepth: 2
+
+    introduction
+    incompatibilities
+    installation
+    pyqt4_differences
+    class_reference
+    signals_slots
+    qt_properties
+    metaobjects
+    opengl
+    qt_interfaces
+    pyqt_qvariant
+    pyqt_qsettings
+    qml
+    multiinheritance
+    gotchas
+    designer
+    resources
+    pickle
+    python_shell
+    i18n
+    dbus
+    deploy_commercial
+    extension_api
diff --git a/doc/sphinx/installation.rst b/doc/sphinx/installation.rst
new file mode 100644
index 0000000..2582f82
--- /dev/null
+++ b/doc/sphinx/installation.rst
@@ -0,0 +1,418 @@
+Installing PyQt5
+================
+
+Downloading SIP
+---------------
+
+SIP must be installed before building and using PyQt5.  You can get the latest
+release of the SIP source code from
+http://www.riverbankcomputing.com/software/sip/download.
+
+The SIP documentation can be found at http://pyqt.sourceforge.net/Docs/sip4/.
+
+
+Downloading PyQt5
+-----------------
+
+You can get the latest release of the GPL version of the PyQt5 source code from
+http://www.riverbankcomputing.com/software/pyqt/download5.
+
+If you are using the commercial version of PyQt5 then you should use the
+download instructions which were sent to you when you made your purchase.  You
+must also download your license file.
+
+
+Configuring PyQt5
+-----------------
+
+After unpacking the source package (either a ``.tar.gz`` or a ``.zip`` file
+depending on your platform) you should then check for any :file:`README` files
+that relate to your platform.
+
+If you are using the commercial version of PyQt5 then you must copy your
+license file to the :file:`sip` directory.
+
+You need to make sure your environment variables are set properly for your
+development environment.
+
+In order to configure the build of PyQt5 you need to run the
+:program:`configure.py` script as follows::
+
+    python configure.py
+
+This assumes that the Python interpreter is on your path.  Something like the
+following may be appropriate on Windows::
+
+    c:\Python34\python configure.py
+
+If you have multiple versions of Python installed then make sure you use the
+interpreter for which you wish to build PyQt5 for.
+
+The full set of command line options is:
+
+.. program:: configure.py
+
+.. cmdoption:: --assume-shared
+
+    Normally Qt is checked to see if it has been built as shared libraries.
+    Some Linux distributions configure their Qt builds to make this check
+    unreliable.  This option ignores the result of the check and assumes that
+    Qt has been built as shared libraries.
+
+.. cmdoption:: --bindir <DIR>
+
+    The :program:`pyuic5`, :program:`pyrcc5` and :program:`pylupdate5`
+    utilities will be installed in the directory ``<DIR>``.
+
+.. cmdoption:: --concatenate
+
+    The C++ source files for a Python module will be concatenated.  This
+    results in significantly reduced compilation times.  Most, but not all,
+    C++ compilers can handle the large files that result.  See also the
+    :option:`--concatenate-split` option.
+
+.. cmdoption:: --concatenate-split <N>
+
+    If the :option:`--concatenate` option is used to concatenate the C++ source
+    files then this option determines how many files are created.  The default
+    is 1.
+
+.. cmdoption:: --configuration <FILE>
+
+    ``<FILE>`` contains the configuration of the PyQt5 build to be used instead
+    of dynamically introspecting the system and is typically used when
+    cross-compiling.  See :ref:`ref-configuration-files`.
+
+.. cmdoption:: --confirm-license
+
+    Using this confirms that you accept the terms of the PyQt5 license.  If it
+    is omitted then you will be asked for confirmation during configuration.
+
+.. cmdoption:: --dbus <DIR>
+
+    The :file:`dbus-python.h` header file of the dbus-python package can be
+    found in the directory ``<DIR>/dbus``.
+
+.. cmdoption:: --debug
+
+    The PyQt5 modules will be built with debugging symbols.  On Windows this
+    requires that a debug version of Python is installed.
+
+.. cmdoption:: --designer-plugindir <DIR>
+
+    The Python plugin for Qt Designer will be installed in the directory
+    ``<DIR>``.
+
+.. cmdoption:: --destdir <DIR>
+
+    The PyQt5 Python package will be installed in the directory ``<DIR>``.  The
+    default is the Python installation's :file:`site-packages` directory.  If
+    you use this option then the :envvar:`PYTHONPATH` environment variable must
+    include ``<DIR>``.
+
+.. cmdoption:: --enable <MODULE>
+
+    Normally all PyQt5 modules are enabled and are built if the corresponding
+    Qt library can be found.  Using this option only those modules specifically
+    enabled will be checked for and built.  The option may be specified any
+    number of times.
+
+.. cmdoption:: --help, -h
+
+    Display a help message.
+
+.. cmdoption:: --no-designer-plugin
+
+    The Qt Designer plugin will not be built.
+
+.. cmdoption:: --no-docstrings
+
+    The PyQt5 modules will not contain automatically generated docstrings.
+
+.. cmdoption:: --no-qml-plugin
+
+    The :program:`qmlscene` plugin will not be built.
+
+.. cmdoption:: --no-qsci-api
+
+    The :file:`PyQt5.api` QScintilla API file is not installed even if
+    QScintilla does appear to be installed.
+
+.. cmdoption:: --no-sip-files
+
+    The ``.sip`` files for the PyQt5 modules will not be installed.
+
+.. cmdoption:: --no-tools
+
+    .. versionadded:: 5.3
+
+    The ``pyuic5``, ``pyrcc5`` and ``pylupdate5`` tools will not be built.
+
+.. cmdoption:: --no-timestamp
+
+    Normally the header comments of each generated C/C++ source file includes
+    a timestamp corresponding to when the file was generated.  This option
+    suppresses the inclusion of the timestamp.
+
+.. cmdoption:: --protected-is-public
+
+    On certain platforms the size of PyQt5 modules can be significantly reduced
+    by redefining the C++ ``protected`` keyword as ``public`` during
+    compilation.  This option enables this behaviour and is the default on
+    Linux and MacOS/X.
+
+.. cmdoption:: --protected-not-public
+
+    The default redefinition of ``protected`` to ``public`` during compilation
+    on Linux and MacOS/X is disabled.
+
+.. cmdoption:: --pyuic5-interpreter <FILE>
+
+    ``<FILE>`` is the name of the Python interpreter used in the pyuic5
+    wrapper.  The default is platform dependent.
+
+.. cmdoption:: --qmake <FILE>
+
+    Qt's :program:`qmake` program is used to determine how your Qt installation
+    is laid out.  Normally :program:`qmake` is found on your :envvar:`PATH`.
+    This option can be used to specify a particular instance of
+    :program:`qmake` to use.  This option is not available on Windows where
+    :program:`qmake` must be on :envvar:`PATH`.
+
+.. cmdoption:: --qml-plugindir <DIR>
+
+    The Python plugin for :program:`qmlscene` will be installed in the
+    directory ``<DIR>``.
+
+.. cmdoption:: --qsci-api
+
+    The :file:`PyQt5.api` QScintilla API file is installed even if QScintilla
+    does not appear to be installed.  This option is implied if the
+    :option:`--qsci-api-destdir` option is specified.
+
+.. cmdoption:: --qsci-api-destdir <DIR>
+
+    The QScintilla API file will be installed in the :file:`python`
+    subdirectory of the :file:`api` subdirectory of the directory ``<DIR>``.
+
+.. cmdoption:: --sip <FILE>
+
+    The :program:`sip` program is used to generate PyQt5's C++ source code.
+    Normally :program:`sip` is found on your :envvar:`PATH`.  This option can
+    be used to specify a particular instance of :program:`sip` to use.
+
+.. cmdoption:: --sip-incdir <DIR>
+
+    The ``sip.h`` header file can be found in the directory ``<DIR>``.
+
+.. cmdoption:: --sipdir <DIR>
+
+    The ``.sip`` files for the PyQt5 modules will be installed in the directory
+    ``<DIR>``.
+
+.. cmdoption:: --spec <SPEC>
+
+    The argument ``-spec SPEC`` will be passed to :program:`qmake`.  The
+    default behaviour is platform specific.  On Windows :program:`configure.py`
+    will choose the value that is correct for the version of Python that is
+    being used.  (However if you have built Python yourself then you may need
+    to explicitly specify ``<SPEC>``.)  On MacOS :program:`configure.py` will
+    try and avoid ``macx-xcode`` if possible.)
+
+.. cmdoption:: --static
+
+    The PyQt5 modules will be built as static libraries.  This is useful when
+    building a custom interpreter with the PyQt5 modules built in to the
+    interpreter.
+
+.. cmdoption:: --sysroot <DIR>
+
+    .. versionadded:: 5.3
+
+    ``<DIR>`` is the name of an optional directory that replaces ``sys.prefix``
+    in the names of other directories (specifically those specifying where the
+    various PyQt5 components will be installed and where the Python include and
+    library directories can be found).  It is typically used when
+    cross-compiling or when building a static version of PyQt5.  See
+    :ref:`ref-configuration-files`.
+
+.. cmdoption:: --target-py-version <VERSION>
+
+    .. versionadded:: 5.3
+
+    ``<VERSION>`` is the major and minor version (e.g. ``3.4``) of the version
+    of Python being targetted.  By default the version of Python being used to
+    run the :program:`configure.py` script is used.  It is typically used when
+    cross-compiling.  See :ref:`ref-configuration-files`.
+
+.. cmdoption:: --trace
+
+    The generated PyQt5 modules contain additional tracing code that is enabled
+    using SIP's :func:`sip.settracemask` function.
+
+.. cmdoption:: --verbose
+
+    Compiler commands and any output issued during configuration is displayed
+    instead of being suppressed.  Use this if :program:`configure.py` is having
+    problems to see what exactly is going wrong.
+
+.. cmdoption:: --version
+
+    Display the PyQt5 version number.
+
+Any remaining command line arguments are expected to be in the form
+``name=value`` or ``name+=value``.  Such arguments are added to any
+:program:`qmake` ``.pro`` file created by :program:`configure.py`.
+
+
+Building PyQt5
+--------------
+
+The next step is to build PyQt5 by running your platform's :program:`make`
+command.  For example::
+
+    make
+
+The final step is to install PyQt5 by running the following command::
+
+    make install
+
+(Depending on your system you may require root or administrator privileges.)
+
+This will install the various PyQt5 components.
+
+
+Co-existence with PyQt4
+-----------------------
+
+PyQt5 can be installed alongside PyQt4 using the same Python interpreter
+without any problems so long as they are built with the same version of SIP.
+
+
+.. _ref-configuration-files:
+
+Configuring with Configuration Files
+------------------------------------
+
+The :program:`configure.py` script normally introspects the Python installation
+of the interpreter running it in order to determine the names of the various
+files and directories it needs.  This is fine for a native build of PyQt5 but
+isn't appropriate when cross-compiling.  In this case it is possible to supply
+a configuration file, specified using the :option:`--configuration` option,
+which contains definitions of all the required values.
+
+A configuration file is made up of a number of named sections each of which
+contains a number of configuration items.  The format of a configuration file
+is as follows:
+
+- a section name is a single line with the name enclosed between ``[`` and
+  ``]``
+
+- a configuration item is a single line containing a name/value pair separated
+  by ``=``
+
+- values may be extended to lines immediately following if they are indented by
+  at least one space
+
+- a value may include another value by embedding the name of that value
+  enclosed between ``%(`` and ``)``
+
+- comments begin with ``#`` and continue to the end of the line
+
+- blank lines are ignored.
+
+Those configuration items that appear before the first section name are
+automatically added to all sections.
+
+A configuration file defines a section for each version of Qt that requires a
+different configuration.  :program:`configure.py` will choose the most
+appropriate section according to the version of Qt you are actually using.  For
+example, if a configuration file contains sections for Qt v5.3 and Qt v5.1 and
+you are using Qt v5.2.1 then the section for Qt v5.1 will be chosen.
+
+:program:`configure.py` provides the following preset values for a
+configuration:
+
+``py_major``
+    is the major version number of the target Python installation.
+
+``py_minor``
+    is the minor version number of the target Python installation.
+
+``sysroot``
+    is the name of the system root directory.  This is specified with the
+    :option:`--sysroot` option.
+
+The following is an example configuration file::
+
+    # The target Python installation.
+    py_platform = linux
+    py_inc_dir = %(sysroot)/usr/include/python%(py_major).%(py_minor)
+    py_pylib_dir = %(sysroot)/usr/lib/python%(py_major).%(py_minor)/config
+    py_pylib_lib = python%(py_major).%(py_minor)mu
+
+    # The target PyQt installation.
+    pyqt_module_dir = %(sysroot)/usr/lib/python%(py_major)/dist-packages
+    pyqt_bin_dir = %(sysroot)/usr/bin
+    pyqt_sip_dir = %(sysroot)/usr/share/sip/PyQt5
+    pyuic_interpreter = /usr/bin/python%(py_major).%(py_minor)
+    pyqt_disabled_features = PyQt_Desktop_OpenGL PyQt_qreal_double
+
+    # Qt configuration common to all versions.
+    qt_shared = True
+
+    [Qt 5.1]
+    pyqt_modules = QtCore QtDBus QtDesigner QtGui QtHelp QtMultimedia
+        QtMultimediaWidgets QtNetwork QtOpenGL QtPrintSupport QtQml QtQuick
+        QtSensors QtSerialPort QtSql QtSvg QtTest QtWebKit QtWebKitWidgets
+        QtWidgets QtXmlPatterns _QOpenGLFunctions_ES2
+
+This example contains a section for Qt v5.1.  We have defined a number of
+values before the start of the section as they are not specific to any
+particular version of Qt.  Note that if you use this configuration with a
+version of Qt earlier than v5.1 then you will get an error.
+
+The following values can be specified in the configuration file:
+
+``qt_shared``
+    is set if Qt has been built as shared libraries.  The default value is
+    ``False``.
+
+``py_platform``
+    is the target Python platform.
+
+``py_inc_dir``
+    is the target Python include directory, i.e. the directory containing the
+    ``Python.h`` file.
+
+``py_pylib_dir``
+    is the target Python library directory.
+
+``py_pylib_lib``
+    is the target Python interpreter library.  It should not include any
+    platform-specific prefix or suffix.
+
+``pyqt_disabled_features``
+    is the space separated list of features (as defined by SIP's ``%Feature``
+    directive) that should be disabled.
+
+``pyqt_module_dir``
+    is the target directory where the PyQt5 modules will be installed.  It can
+    be overridden by the :option:`--destdir` option.
+
+``pyqt_modules``
+    is the space separated list of PyQt5 modules that will be built.  It can be
+    overridden by the :option:`--enable` option.
+
+``pyqt_bin_dir``
+    is the name of the target directory where the PyQt5 related executables
+    will be installed.  It can be overridden by the :option:`--bindir` option.
+
+``pyqt_sip_dir``
+    is the name of the target directory where the PyQt5 ``.sip`` files will be
+    installed.  It can be overridden by the :option:`--sipdir` option.
+
+``pyuic_interpreter``
+    is the name of the Python interpreter (as it would be called from the
+    target system) that will be used to run :program:`pyuic5`.  It can be
+    overridden by the :option:`--pyuic5-interpreter` option.
diff --git a/doc/sphinx/introduction.rst b/doc/sphinx/introduction.rst
new file mode 100644
index 0000000..8b2646d
--- /dev/null
+++ b/doc/sphinx/introduction.rst
@@ -0,0 +1,331 @@
+Introduction
+============
+
+This is the reference guide for PyQt5 5.3.2.  PyQt5 is a set of
+`Python <http://www.python.org>`__ bindings for v5 of the Qt application
+framework from `Digia <http://qt.digia.com>`__.
+
+Qt is a set of C++ libraries and development tools that includes platform
+independent abstractions for graphical user interfaces, networking, threads,
+regular expressions, SQL databases, SVG, OpenGL, XML, and user and application
+settings.  PyQt5 implements over 620 of these classes as a set of Python
+modules.
+
+PyQt5 supports the Windows, Linux, UNIX, Android, OS X and iOS platforms.
+
+PyQt5 does not include Qt itself - you must obtain it separately.
+
+The homepage for PyQt5 is http://www.riverbankcomputing.com/software/pyqt/.
+Here you will always find the latest stable version, current development
+snapshots, and the latest version of this documentation.
+
+PyQt5 is built using the `SIP bindings generator
+<http://www.riverbankcomputing.com/software/sip/>`__.  SIP must be installed in
+order to build and use PyQt5.
+
+Earlier versions of Qt are supported by PyQt4.
+
+
+License
+-------
+
+PyQt5 is licensed on all platforms under a commercial license and the GPL v3.
+Your PyQt5 license must be compatible with your Qt license.  If you use the GPL
+version then your own code must also use a compatible license.
+
+PyQt5, unlike Qt, is not available under the LGPL.
+
+You can purchase a commercial PyQt5 license `here
+<http://www.riverbankcomputing.com/commercial/buy>`__.
+
+
+PyQt5 Components
+----------------
+
+.. module:: PyQt5
+
+PyQt5 comprises a number of different components.  First of all there are a
+number of Python extension modules.  These are all installed in the
+:mod:`PyQt5` Python package.
+
+.. module:: PyQt5.QAxContainer
+    :platform:  Windows
+
+- :mod:`~PyQt5.QAxContainer` contains classes that allow access to ActiveX
+  controls and COM objects.  It does not support the ability to write ActiveX
+  servers in Python.  It is only available under Windows.
+
+.. module:: PyQt5.QtBluetooth
+
+- :mod:`~PyQt5.QtBluetooth` contains classes that enables an application to
+  scan for devices and connect and interact with them.
+
+.. module:: PyQt5.QtCore
+
+- :mod:`~PyQt5.QtCore` contains the core classes, including the event loop and
+  Qt's signal and slot mechanism.  It also includes platform independent
+  abstractions for animations, state machines, threads, mapped files, shared
+  memory, regular expressions, and user and application settings.
+
+.. module:: PyQt5.QtDBus
+    :platform:  UNIX
+
+- :mod:`~PyQt5.QtDBus` contains classes that support Inter-Process
+  Communication using the D-Bus protocol.  It is not available under Windows.
+
+.. module:: PyQt5.QtDesigner
+
+- :mod:`~PyQt5.QtDesigner` contains classes that allow Qt Designer to be
+  extended using PyQt5.  See :ref:`ref-designer-plugins` for a full description
+  of how to do this.
+
+.. module:: PyQt5.QtGui
+
+- :mod:`~PyQt5.QtGui` contains classes for windowing system integration, event
+  handling, 2D graphics, basic imaging, fonts and text.  It also containes a
+  complete set of OpenGL and OpenGL ES bindings (see :ref:`ref-opengl`).
+  Application developers would normally use this with higher level APIs such as
+  those contained in the :mod:`~PyQt5.QtWidgets` module.
+
+.. module:: PyQt5.QtHelp
+
+- :mod:`~PyQt5.QtHelp` contains classes for creating and viewing searchable
+  documentation.
+
+.. module:: PyQt5.QtMacExtras
+    :platform:  OS X, iOS
+
+- :mod:`~PyQt5.QtMacExtras` contains additional classes that are specific to
+  OS X and iOS.
+
+.. module:: PyQt5.QtMultimedia
+
+- :mod:`~PyQt5.QtMultimedia` contains classes to handle multimedia content and
+  APIs to access camera and radio functionality.
+
+.. module:: PyQt5.QtMultimediaWidgets
+
+- :mod:`~PyQt5.QtMultimediaWidgets` contains classes to handle multimedia
+  content in :mod:`~PyQt5.QtWidgets` based applications.
+
+.. module:: PyQt5.QtNetwork
+
+- :mod:`~PyQt5.QtNetwork` contains classes for writing UDP and TCP clients and
+  servers.  It includes classes that implement HTTP clients and support DNS
+  lookups.
+
+.. module:: PyQt5.QtOpenGL
+
+- :mod:`~PyQt5.QtOpenGL` contains classes that allow the use of OpenGL in
+  rendering 3D graphics in :mod:`~PyQt5.QtWidgets` based applications.
+
+.. module:: PyQt5.QtPositioning
+
+- :mod:`~PyQt5.QtPositioning` contains classes to determine a position by using
+  a variety of possible sources, including satellite, or Wi-Fi, or a text file,
+  and so on.  That information can then be used to, for example, determine a
+  position on a map.  In addition satellite information can be retrieved and
+  area based monitoring can be performed.
+
+.. module:: PyQt5.QtPrintSupport
+
+- :mod:`~PyQt5.QtPrintSupport` contains classes to allow applications to print
+  to locally attached and remote printers.  It also enables the generation of
+  PostScript and PDF files.
+
+.. module:: PyQt5.QtQml
+
+- :mod:`~PyQt5.QtQml` contains classes to allow applications to integrate
+  support for QML and JavaScript.  Python objects can be exported to QML or be
+  created from QML in the same way that Qt allows the same with C++ instances.
+  See :ref:`ref-integrating-qml` for a fuller description of how to do this.
+
+.. module:: PyQt5.QtQuick
+
+- :mod:`~PyQt5.QtQuick` contains classes that provide the basic elements
+  necessary for creating user interfaces with QML.
+
+.. module:: PyQt5.QtQuickWidgets
+
+- :mod:`~PyQt5.QtQuickWidgets` contains classes that support the display of a
+  QML scene in a traditional widget.
+
+.. module:: PyQt5.QtSensors
+
+- :mod:`~PyQt5.QtSensors` contains classes that provide access to a system's
+  hardware sensors including accelerometers, altimeters, ambient light and
+  temperature sensors, gyroscopes and magnetometers.  Note that sensor gestures
+  are not currently supported.
+
+.. module:: PyQt5.QtSerialPort
+
+- :mod:`~PyQt5.QtSerialPort` contains classes that provide access to a system's
+  serial ports.
+
+.. module:: PyQt5.QtSql
+
+- :mod:`~PyQt5.QtSql` contains classes that integrate with SQL databases.  It
+  includes editable data models for database tables that can be used with GUI
+  classes.  It also includes an implementation of
+  `SQLite <http://www.sqlite.org>`__.
+
+.. module:: PyQt5.QtSvg
+
+- :mod:`~PyQt5.QtSvg` contains classes for displaying the contents of SVG
+  files.
+
+.. module:: PyQt5.QtTest
+
+- :mod:`~PyQt5.QtTest` contains functions that enable unit testing of PyQt5
+  applications.  (PyQt5 does not implement the complete Qt unit test framework.
+  Instead it assumes that the standard Python unit test framework will be used
+  and implements those functions that simulate a user interacting with a GUI.)
+  In addition the :class:`~PyQt5.QtTest.QSignalSpy` class provides easy
+  introspection of Qt's signals and slots.
+
+.. module:: PyQt5.QtWebKit
+
+- :mod:`~PyQt5.QtWebKit` contains classes for a WebKit2 based implementation of
+  a web browser.
+
+.. module:: PyQt5.QtWebKitWidgets
+
+- :mod:`~PyQt5.QtWebKitWidgets` contains classes for a WebKit1 based
+  implementation of a web browser for use in :mod:`~PyQt5.QtWidgets` based
+  applications.
+
+.. module:: PyQt5.QtWebSockets
+
+- :mod:`~PyQt5.QtWebSockets` contains classes that implement the WebSocket
+  protocol described in RFC 6455.
+
+.. module:: PyQt5.QtWidgets
+
+- :mod:`~PyQt5.QtWidgets` contains classes that provide a set of UI elements to
+  create classic desktop-style user interfaces.
+
+.. module:: PyQt5.QtWinExtras
+    :platform:  Windows
+
+- :mod:`~PyQt5.QtWinExtras` contains additional classes that are specific to
+  Windows, for example providing access to Jump Lists, a progress indicator on
+  a taskbar button, and a thumbnail toolbar.
+
+.. module:: PyQt5.QtX11Extras
+    :platform:  X11
+
+- :mod:`~PyQt5.QtX11Extras` contains additional classes that are specific to
+  X11.
+
+.. module:: PyQt5.QtXmlPatterns
+
+- :mod:`~PyQt5.QtXmlPatterns` contains classes that provide support for XPath,
+  XQuery, XSLT and XML Schema validation.
+
+.. module:: PyQt5.Enginio
+
+- :mod:`~PyQt5.Enginio` implements the client-side library for accessing the Qt
+  Cloud Services Managed Application Runtime.
+
+.. module:: PyQt5.Qt
+
+- :mod:`~PyQt5.Qt` consolidates the classes contained in all of the modules
+  described above into a single module.  This has the advantage that you don't
+  have to worry about which underlying module contains a particular class.  It
+  has the disadvantage that it loads the whole of the Qt framework, thereby
+  increasing the memory footprint of an application.  Whether you use this
+  consolidated module, or the individual component modules is down to personal
+  taste.
+
+.. module:: PyQt5.uic
+
+- :mod:`~PyQt5.uic` contains classes for handling the ``.ui`` files created by
+  Qt Designer that describe the whole or part of a graphical user interface.
+  It includes classes that load a ``.ui`` file and render it directly, and
+  classes that generate Python code from a ``.ui`` file for later execution.
+
+PyQt5 contains plugins that enable Qt Designer and :program:`qmlscene` to be
+extended using Python code.  See :ref:`ref-designer-plugins` and
+:ref:`ref-integrating-qml` respectively for the details.
+
+PyQt5 also contains a number of utility programs.
+
+- :program:`pyuic5` corresponds to the Qt :program:`uic` utility.  It converts
+  :mod:`~PyQt5.QtWidgets` based GUIs created using Qt Designer to Python code.
+
+- :program:`pyrcc5` corresponds to the Qt :program:`rcc` utility.  It embeds
+  arbitrary resources (eg. icons, images, translation files) described by a
+  resource collection file in a Python module.
+
+- :program:`pylupdate5` corresponds to the Qt :program:`lupdate` utility.  It
+  extracts all of the translatable strings from Python code and creates or
+  updates ``.ts`` translation files.  These are then used by Qt Linguist to
+  manage the translation of those strings.
+
+The `DBus <http://www.freedesktop.org/wiki/Software/DBusBindings>`__ support
+module is installed as :mod:`dbus.mainloop.pyqt5`.  This module provides
+support for the Qt event loop in the same way that the
+:mod:`dbus.mainloop.glib` included with the standard ``dbus-python`` bindings
+package provides support for the GLib event loop.  The API is described in
+:ref:`ref-dbus`.  It is only available if the ``dbus-python`` v0.80 (or later)
+bindings package is installed.  The :mod:`~PyQt5.QtDBus` module provides a more
+Qt-like interface to DBus.
+
+When PyQt5 is configured a file called :file:`PyQt5.api` is generated.  This
+can be used by the
+`QScintilla <http://www.riverbankcomputing.com/software/qscintilla/>`_
+editor component to enable the use of auto-completion and call tips when
+editing PyQt5 code.  The API file is installed automatically if
+`QScintilla <http://www.riverbankcomputing.com/software/qscintilla/>`_
+is already installed.
+
+PyQt5 includes a large number of examples.  These are ports to Python of many
+of the C++ examples provided with Qt.  They can be found in the
+:file:`examples` directory.
+
+Finally, PyQt5 contains the ``.sip`` files used by SIP to generate PyQt5
+itself.  These can be used by developers of bindings of other Qt based class
+libraries.
+
+
+An Explanation of Version Numbers
+---------------------------------
+
+Historically the version number of PyQt bears no relation to the version of Qt
+supported.  It's no longer even true that PyQt4 requires Qt v4 as it will also
+build against Qt v5.  People sometimes mistakenly believe that, for example,
+PyQt4 v4.8 is needed when building against Qt v4.8.
+
+When refering to a version number we assume it consists of three numbers
+separated by a dot.  These are the major number, the minor number and the
+maintenance number.  The major number will always be ``5``.  The maintenance
+number may be omitted if it is ``0``.
+
+Starting with PyQt5 the version number of PyQt5 is tied, to a certain extent,
+to the version of Qt v5.  This is based on the following assumptions.
+
+- All parts of the Qt API will be supported throughout the life of Qt v5 even
+  though some may be marked as deprecated or obsolete at some point.
+
+- When new parts of the Qt API are introduced the minor number of the version
+  will be increased and the maintenance number will be reset to ``0``.
+
+Therefore, for PyQt5 v5.n.* the following are true.
+
+- It will build against any version of Qt v5, but will not support any new
+  features introduced in Qt v5.n+1 or later.
+
+- It will support all the features of supported modules of Qt v5.n or earlier.
+
+- Support for new modules may be added to PyQt5 at any time.  This would result
+  in a change of maintenance number only.
+
+The maintenance numbers of PyQt5 and Qt v5 are entirely unrelated to each
+other.
+
+So, for example, PyQt5 v5.1 will build against Qt v5.2 but will not support any
+new features introduced in Qt v5.2.  PyQt5 v5.1 will support all the features
+of supported modules of Qt v5.0 and those new features introduced in Qt v5.1.
+
+In summary, just as with PyQt4, you should always try and use the latest
+version of PyQt5 no matter what version of Qt v5 you are using.
diff --git a/doc/sphinx/metaobjects.rst b/doc/sphinx/metaobjects.rst
new file mode 100644
index 0000000..496425c
--- /dev/null
+++ b/doc/sphinx/metaobjects.rst
@@ -0,0 +1,59 @@
+Other Support for Dynamic Meta-objects
+======================================
+
+PyQt5 creates a :class:`~PyQt5.QtCore.QMetaObject` instance for any Python
+sub-class of :class:`~PyQt5.QtCore.QObject` without the need for the equivalent
+of Qt's ``Q_OBJECT`` macro.  Most of a :class:`~PyQt5.QtCore.QMetaObject` is
+populated automatically by defining signals, slots and properties as described
+in previous sections.  In this section we cover the ways in which the remaining
+parts of a :class:`~PyQt5.QtCore.QMetaObject` are populated.
+
+
+:func:`~PyQt5.QtCore.Q_ENUMS` and :func:`~PyQt5.QtCore.Q_FLAGS`
+---------------------------------------------------------------
+
+.. versionadded:: 5.2
+
+The :func:`~PyQt5.QtCore.Q_ENUMS` and :func:`~PyQt5.QtCore.Q_FLAGS` functions
+declare enumerated types and flag types respectively that are published in the
+:class:`~PyQt5.QtCore.QMetaObject`.  The typical use in PyQt5 is to declare
+symbolic constants that can be used by QML.
+
+Each function takes a number of Python type objects that implement the
+enumerated or flag type.  For example::
+
+    from PyQt5.QtCore import Q_ENUMS, Q_FLAGS, QObject
+
+
+    class Instruction(QObject):
+
+        class Direction:
+            Up, Down, Left, Right = range(4)
+
+        Q_ENUMS(Direction)
+
+        class Status:
+            Null = 0x00
+            Urgent = 0x01
+            Acknowledged = 0x02
+            Completed = 0x04
+
+        Q_FLAGS(Status)
+
+
+:func:`~PyQt5.QtCore.Q_CLASSINFO`
+---------------------------------
+
+The :func:`~PyQt5.QtCore.Q_CLASSINFO` function is used in the same way as Qt's
+macro of the same name, i.e. it is called from a class's definition in order to
+specify a name/value pair that is placed in the class's
+:class:`~PyQt5.QtCore.QMetaObject`.
+
+For example it is used by QML to define the default property of a class::
+
+    from PyQt5.QtCore import Q_CLASSINFO, QObject
+
+
+    class BirthdayParty(QObject):
+
+        Q_CLASSINFO('DefaultProperty', 'guests')
diff --git a/doc/sphinx/multiinheritance.rst b/doc/sphinx/multiinheritance.rst
new file mode 100644
index 0000000..a86d16d
--- /dev/null
+++ b/doc/sphinx/multiinheritance.rst
@@ -0,0 +1,111 @@
+.. _ref-cooperative-multiinheritance:
+
+Support for Cooperative Multi-inheritance
+=========================================
+
+.. note::
+
+    This section is not about sub-classing from more that one Qt class.
+
+Cooperative multi-inheritance is a technique for implementing classes that
+inherit multiple super-classes - typically a main super-class and one or more
+mixin classes that add additional behaviour.  It makes it easy to add new
+mixins at a later date to further extend the behavior, without needing to
+change either the implementation of the class or any existing code that creates
+an instance of the class.
+
+The technique requires that all the super-class's ``__init__`` methods follow
+the same pattern in the way that they handle unrecognised keyword arguments and
+use ``super()`` to invoke their own super-class's ``__init__`` methods.
+
+PyQt5's classes follow this pattern.
+
+See Raymond Hettinger's `Python's super() considered super!
+<http://rhettinger.wordpress.com/2011/05/26/super-considered-super/>`__ blog
+post for some more background on the subject.
+
+As an example, let's say we have a class that represents a person, and that a
+person has a name.  The following might be an initial implementation::
+
+    class Person(QObject):
+        def __init__(self, name, parent=None)
+            QObject.__init__(self, parent)
+
+            self.name = name
+
+An instance would normally be created in one of the following ways::
+
+    person = Person("Joe")
+    person = Person("Joe", some_parent)
+
+This approach has some limitations:
+
+- Only a sub-set of the :class:`~PyQt5.QtCore.QObject` API is exposed.  For
+  example you cannot set the value of a Qt property or connect a signal by
+  passing appropriate keyword arguments to ``Person.__init__``.
+
+- Adding another class to ``Person``'s list of super-classes means that its
+  ``__init__`` implementation needs to be changed.  If the new mixin takes
+  non-optional arguments then every call to create a ``Person`` instance will
+  need changing.
+
+Consider this alternative implementation::
+
+    class Person(QObject):
+        def __init__(self, name, **kwds):
+            super().__init__(**kwds)
+
+            self.name = name
+
+The difference is that we only handle arguments that are used by the ``Person``
+class itself and we punt all the other arguments to the super-classes by
+calling ``super()``.
+
+With this implementation an instance would normally created in one of the
+following ways::
+
+    person = Person("Joe")
+    person = Person("Joe", parent=some_parent)
+
+Here the difference is that we are using keyword arguments to specify any
+arguments that are not handled by the ``Person`` class itself.  Note that we
+could use keyword arguments for all arguments - whether or not you do so is
+down to personal choice.
+
+The limitations of the first implementation no longer apply.  For example,
+without any further changes we can also do this::
+
+    person = Person("Joe", destroyed=some_callable)
+
+Let's say we now want to extend the behaviour of the ``Person`` class by adding
+a mixin that handles a person's age.  The implementation of the mixin would be
+as follows::
+
+    class Age(object):
+        def __init__(self, age=0, **kwds):
+            super().__init__(**kwds)
+
+            self.age = age
+
+This follows a similar pattern to our ``Person`` implementation, but notice
+that we have provided the ``age`` argument with a default value.
+
+The following is our new ``Person`` implementation::
+
+    class Person(QObject, Age):
+        def __init__(self, name, **kwds):
+            super().__init__(**kwds)
+
+            self.name = name
+
+The only change we have had to make is to add ``Age`` to ``Person``'s list of
+super-classes.  More importantly we do not need to change any call to create a
+``Person`` instance.
+
+If we do want to create a ``Person`` instance with a non-default age then we
+simply pass it as a keyword argument as follows::
+
+    person = Person("Joe", age=38)
+
+This technique increases the use of keyword arguments - while this means a bit
+more typing, it significantly increases the readability of application code.
diff --git a/doc/sphinx/opengl.rst b/doc/sphinx/opengl.rst
new file mode 100644
index 0000000..9844ec7
--- /dev/null
+++ b/doc/sphinx/opengl.rst
@@ -0,0 +1,20 @@
+.. _ref-opengl:
+
+Support for OpenGL
+==================
+
+When compiled against Qt v5.1 or later, PyQt5 implements a set of either
+desktop QOpenGL bindings or OpenGL ES v2 bindings depending on how Qt was
+configured.  This removes the dependency on any third-party OpenGL bindings
+such as :mod:`PyOpenGL`.
+
+At the moment the desktop bindings are for OpenGL v2.0 and are mostly complete.
+Other versions will be added in later releases.  If there are calls which you
+need, but are currently unsupported, then please ask for the support to be
+added.
+
+Obtaining an object that implements the bindings for a particular OpenGL
+version and profile is done in the same way as it is done from C++, i.e. by
+calling :meth:`~PyQt5.QtGui.QOpenGLContext.versionFunctions`.  In addition, the
+bindings object also contains attributes corresponding to all of the OpenGL
+constants.
diff --git a/doc/sphinx/pickle.rst b/doc/sphinx/pickle.rst
new file mode 100644
index 0000000..c2ce80b
--- /dev/null
+++ b/doc/sphinx/pickle.rst
@@ -0,0 +1,22 @@
+Support for Pickling
+====================
+
+The following PyQt5 classes may be pickled.
+
+- :class:`~PyQt5.QtCore.QByteArray`
+- :class:`~PyQt5.QtGui.QColor`
+- :class:`~PyQt5.QtCore.QDate`
+- :class:`~PyQt5.QtCore.QDateTime`
+- :class:`~PyQt5.QtGui.QKeySequence`
+- :class:`~PyQt5.QtCore.QLine`
+- :class:`~PyQt5.QtCore.QLineF`
+- :class:`~PyQt5.QtCore.QPoint`
+- :class:`~PyQt5.QtCore.QPointF`
+- :class:`~PyQt5.QtGui.QPolygon`
+- :class:`~PyQt5.QtCore.QRect`
+- :class:`~PyQt5.QtCore.QRectF`
+- :class:`~PyQt5.QtCore.QSize`
+- :class:`~PyQt5.QtCore.QSizeF`
+- :class:`~PyQt5.QtCore.QTime`
+
+Also all named enums (:attr:`PyQt5.QtCore.Qt.Key` for example) may be pickled.
diff --git a/doc/sphinx/pyqt4_differences.rst b/doc/sphinx/pyqt4_differences.rst
new file mode 100644
index 0000000..5734268
--- /dev/null
+++ b/doc/sphinx/pyqt4_differences.rst
@@ -0,0 +1,292 @@
+Differences Between PyQt4 and PyQt5
+===================================
+
+PyQt5 is not compatibile with PyQt4 (although experience shows that the effort
+in porting applications from PyQt4 to PyQt5 is not great).  This section
+describes the main differences between the two.
+
+
+Supported Python Versions
+-------------------------
+
+Versions of Python earlier than v2.6 are not supported.
+
+
+Deprecated Features
+-------------------
+
+PyQt5 does not support any parts of the Qt API that are marked as deprecated or
+obsolete in Qt v5.0.  However it is possible that some of these have been
+included accidentaly.  These are considered bugs and will be removed if found.
+
+
+Multiple APIs
+-------------
+
+PyQt4 supports a number of different API versions (``QString``,
+:class:`~PyQt5.QtCore.QVariant` etc.).  With the exception of
+:class:`~PyQt5.QtCore.QVariant`, PyQt5 only implements v2 of those APIs for all
+versions of Python.  The changed support for :class:`~PyQt5.QtCore.QVariant`,
+including the removal of ``QPyNullVariant``, is described in
+:ref:`ref-qvariant`.
+
+
+Old-style Signals and Slots
+---------------------------
+
+PyQt4's old-style signals and slots are not supported.  Therefore the following
+are not implemented in PyQt5:
+
+- ``QObject.connect()``
+
+- ``QObject.emit()``
+
+- ``SIGNAL()``
+
+- ``SLOT()``
+
+All methods that had arguments that are usually the results of calls to
+``SIGNAL()`` or ``SLOT()`` are no longer supported.  There will always be an
+equivalent that takes a bound signal or callable respectively.
+
+In addition the following methods have differences:
+
+- :meth:`~PyQt5.QtCore.QObject.disconnect` takes no arguments and disconnects
+  all connections to the :class:`~PyQt5.QtCore.QObject` instance.
+
+
+New-style Signals and Slots
+---------------------------
+
+Qt implements signals with an optional argument as two separate signals, one
+with the argument and one without it.  PyQt4 exposed both of these allowing you
+to connect to each of them.  However, when emitting the signal, you had to use
+the signal appropriate to the number of arguments being emitted.
+
+PyQt5 exposes only the signal where all arguments are specified.  However it
+allows any optional arguments to be omitted when emitting the signal.
+
+Unlike PyQt4, PyQt5 supports the definition of properties, signals and slots in
+classes not sub-classed from :class:`~PyQt5.QtCore.QObject` (i.e. in mixins).
+
+
+``QtDeclarative``, ``QtScript`` and ``QtScriptTools`` Modules
+-------------------------------------------------------------
+
+PyQt4's ``QtDeclarative``, ``QtScript`` and ``QtScriptTools`` modules are not
+supported.  These have been replaced by PyQt5's :mod:`~PyQt5.QtQml` and
+:mod:`~PyQt5.QtQuick` modules.  Unlike PyQt4, PyQt5 supports the creation of
+Python objects from QML.
+
+
+``QtGui`` Module
+----------------
+
+PyQt4's ``QtGui`` module has been split into PyQt5's :mod:`~PyQt5.QtGui`,
+:mod:`~PyQt5.QtPrintSupport` and :mod:`~PyQt5.QtWidgets` modules.
+
+
+``QtOpenGL`` Module
+-------------------
+
+Only the :class:`~PyQt5.QtOpenGL.QGLContext`,
+:class:`~PyQt5.QtOpenGL.QGLFormat` and :class:`~PyQt5.QtOpenGL.QGLWidget`
+classes are supported by PyQt5.
+
+
+``QtWebKit`` Module
+-------------------
+
+PyQt4's ``QtWebKit`` module has been split into PyQt5's :mod:`~PyQt5.QtWebKit`
+and :mod:`~PyQt5.QtWebKitWidgets` modules.
+
+
+``QtXml`` Module
+----------------
+
+PyQt4's ``QtXml`` module is not supported.  Use either the
+:class:`~PyQt5.QtCore.QXMLStreamReader` and
+:class:`~PyQt5.QtCore.QXMLStreamWriter` classes or Python's standard XML
+modules.
+
+
+``pyqtconfig`` Module
+---------------------
+
+PyQt4's ``pyqtconfig`` module is not supported.  The section
+:ref:`ref-build-system` describes the support that PyQt5 provides to
+third-party packages (e.g.
+`QScintilla <http://www.riverbankcomputing.com/software/qscintilla/>`__) that
+want to build on top of PyQt5.
+
+
+``dbus.mainloop.qt`` Module
+---------------------------
+
+PyQt4's ``dbus.mainloop.qt`` module is called :mod:`dbus.mainloop.pyqt5` in
+PyQt5.  This allows them to be installed side by side.  Their functionality is
+identical.
+
+
+``QDataStream``
+---------------
+
+The :meth:`~PyQt5.QtCore.QDataStream.readUInt8`,
+:meth:`~PyQt5.QtCore.QDataStream.readInt8`,
+:meth:`~PyQt5.QtCore.QDataStream.writeUInt8` and
+:meth:`~PyQt5.QtCore.QDataStream.writeInt8` methods all interpret the values
+being read and written as numeric values.  In PyQt4 they are interpreted as
+single character strings.
+
+
+``QFileDialog``
+---------------
+
+The ``getOpenFileNameAndFilter()``, ``getOpenFileNamesAndFilter()`` and
+``getSaveFileNameAndFilter()`` methods of PyQt4's ``QFileDialog`` have now been
+renamed :meth:`~PyQt5.QtWidgets.QFileDialog.getOpenFileName`,
+:meth:`~PyQt5.QtWidgets.QFileDialog.getOpenFileNames` and
+:meth:`~PyQt5.QtWidgets.QFileDialog.getSaveFileName` respectively in PyQt5.
+PyQt4's implementations of ``getOpenFileName()``, ``getOpenFileNames()`` and
+``getSaveFileName()`` are not supported in PyQt5.
+
+
+``QGraphicsItemAnimation``
+--------------------------
+
+Support for the deprecated ``QGraphicsItemAnimation`` class has been removed.
+If porting an existing PyQt4 application then consider first updating it to use
+:class:`~PyQt5.QtCore.QPropertyAnimation` instead.
+
+
+``QMatrix``
+-----------
+
+Support for the deprecated ``QMatrix`` class has been removed.  If porting an
+existing PyQt4 application then consider first updating it to use
+:class:`~PyQt5.QtGui.QTransform` instead.
+
+
+``QPyTextObject``
+-----------------
+
+PyQt4 implements the ``QPyTextObject`` as a workaround for the inability to
+define a Python class that is sub-classed from more than one Qt class.  PyQt5
+does support the ability to define a Python class that is sub-classed from more
+than one Qt class so long as all but one of the Qt classes are interfaces, i.e.
+they have been declared in C++ as such using ``Q_DECLARE_INTERFACE``.
+Therefore ``QPyTextObject`` is not implemented in PyQt5.
+
+
+``QSet``
+--------
+
+In PyQt4, ``QSet`` was implemented as a list in Python v2 and a set in Python
+v3.  In PyQt5 ``QSet`` is always implemented as a set.
+
+
+``pyuic5``
+----------
+
+:program:`pyuic5` does not support the ``--pyqt3-wrapper`` flag of ``pyuic4``.
+
+
+``pyrcc5``
+----------
+
+:program:`pyrcc5` does not support the ``-py2`` and ``-py3`` flags of
+``pyrcc4``.  The output of :program:`pyrcc5` is compatible with all versions of
+Python starting with Python v2.6.
+
+
+Cooperative Multi-inheritance
+-----------------------------
+
+Unlike PyQt4, PyQt5 classes implement cooperative multi-inheritance.  In other
+words PyQt5 classes always do the equivalent of the following Python v3 code
+in their ``__init__`` methods (where ``kwds`` is a dictionary of unused keyword
+arguments)::
+
+    super().__init__(**kwds)
+
+This means that those unused keyword arguments are passed to the ``__init__``
+methods of any mixin classes.  Those mixin classes must cooperate, i.e. they
+must make a similar call if they have their own ``__init__`` implementations.
+
+When using multiple inheritance in PyQt4 it is common to call the ``__init__``
+methods of the super-classes explicitly, for example::
+
+    class MyQObject(QObject, MyMixin):
+        def __init__(self, parent, mixin_arg):
+            QObject.__init__(self, parent)
+            MyMixin.__init__(self, mixin_arg)
+
+            # Other initialisation...
+
+In PyQt5 the above would cause ``MyMixin.__init__`` to be called twice.
+Instead it should be implemented as follows::
+
+    class MyQObject(QObject, MyMixin):
+        def __init__(self, **kwds):
+            super().__init__(**kwds)
+
+            # Other initialisation...
+
+Note that if there is no other initialisation to do then the ``__init__``
+method isn't actually needed.
+
+The mixin class should be implemented as follows::
+
+    class MyMixin:
+        def __init__(self, mixin_arg, **kwds):
+            super().__init__(**kwds)
+
+            # Other initialisation...
+
+If a class only inherits from a single class then it can still call the
+super-class's ``__init__`` method explicitly (although it is recommended to use
+``super()``).
+
+See :ref:`ref-cooperative-multiinheritance`.
+
+
+Releasing the GIL
+-----------------
+
+The GIL is only released when it is known to be needed.  PyQt4 always released
+the GIL when calling Qt.
+
+
+Object Destruction on Exit
+--------------------------
+
+When the Python interpreter exits PyQt4 (by default) calls the C++ destructor
+of all wrapped instances that it owns.  This happens in a random order and can
+therefore cause the interpreter to crash.  This behavior can be disabled by
+calling the :func:`sip.setdestroyonexit` function.
+
+PyQt5 always calls :func:`sip.setdestroyonexit` automatically.  However if the
+wrapped instances have not been created at the module level and have instead
+been created in a function then the problem will still exist.  For example, do
+not do the following::
+
+    def main():
+        app = QApplication(sys.argv)
+
+        w = QWidget()
+        w.show()
+
+        app.exec()
+
+    if __name__ == '__main__':
+        main()
+
+Instead, do the following::
+
+    if __name__ == '__main__':
+        app = QApplication(sys.argv)
+
+        w = QWidget()
+        w.show()
+
+        app.exec()
diff --git a/doc/sphinx/pyqt_qsettings.rst b/doc/sphinx/pyqt_qsettings.rst
new file mode 100644
index 0000000..e871389
--- /dev/null
+++ b/doc/sphinx/pyqt_qsettings.rst
@@ -0,0 +1,70 @@
+Support for :class:`~PyQt5.QtCore.QSettings`
+============================================
+
+Qt provies the :class:`~PyQt5.QtCore.QSettings` class as a platform independent
+API for the persistent storage and retrieval of application settings.  Settings
+are retrieved using the :meth:`~PyQt5.QtCore.QSettings.value` method.  However
+the type of the value returned may not be what is expected.  Some platforms
+only ever store string values which means that the type of the original value
+is lost.  Therefore a setting with an integer value of ``42`` may be retrieved
+(on some platforms) as a string value of ``'42'``.
+
+As a solution to this problem PyQt5's implementation of
+:meth:`~PyQt4.QtCore.QSettings.value` takes an optional third argument called
+``type``.  This is either a Python type object, e.g. ``int``, or a string that
+is the name of a C++ type, e.g. ``'QStringList'``.  The value returned will be
+an object of the requested type.
+
+For example::
+
+    from PyQt5.QtCore import QSettings, QPoint
+
+    settings = QSettings('foo', 'foo')
+
+    settings.setValue('int_value', 42)
+    settings.setValue('point_value', QPoint(10, 12))
+
+    # This will write the setting to the platform specific storage.
+    del settings
+
+    settings = QSettings('foo', 'foo')
+
+    int_value = settings.value('int_value', type=int)
+    print("int_value: %s" % repr(int_value))
+
+    point_value = settings.value('point_value', type=QPoint)
+    print("point_value: %s" % repr(point_value))
+
+When this is executed then the following will be displayed for all platforms::
+
+    int_value: 42
+    point_value: PyQt5.QtCore.QPoint(10, 20)
+
+If the value of the setting is a container (corresponding to either
+``QVariantList``, ``QVariantMap`` or ``QVariantHash``) then the type is applied
+to the contents of the container.
+
+For example::
+
+    from PyQt5.QtCore import QSettings
+
+    settings = QSettings('foo', 'foo')
+
+    settings.setValue('list_value', [1, 2, 3])
+    settings.setValue('dict_value', {'one': 1, 'two': 2})
+
+    # This will write the setting to the platform specific storage.
+    del settings
+
+    settings = QSettings('foo', 'foo')
+
+    list_value = settings.value('list_value', type=int)
+    print("list_value: %s" % repr(list_value))
+
+    dict_value = settings.value('dict_value', type=int)
+    print("dict_value: %s" % repr(dict_value))
+
+When this is executed then the following will be displayed for all platforms::
+
+    list_value: [1, 2, 3]
+    dict_value: {'one': 1, 'two': 2}
diff --git a/doc/sphinx/pyqt_qvariant.rst b/doc/sphinx/pyqt_qvariant.rst
new file mode 100644
index 0000000..b29f5d2
--- /dev/null
+++ b/doc/sphinx/pyqt_qvariant.rst
@@ -0,0 +1,40 @@
+.. _ref-qvariant:
+
+Support for :class:`~PyQt5.QtCore.QVariant`
+===========================================
+
+PyQt4 implements two APIs for :class:`~PyQt5.QtCore.QVariant`.  v1 (the default
+for Python v2) exposes the :class:`~PyQt5.QtCore.QVariant` class to Python and
+requires applications to explicitly convert a :class:`~PyQt5.QtCore.QVariant`
+to the actual value.  v2 (the default for Python v3) does not expose the
+:class:`~PyQt5.QtCore.QVariant` class to Python and automatically converts a
+:class:`~PyQt5.QtCore.QVariant` to the actual value.  While this is usually the
+best thing to do, it does raise problems of its own:
+
+- Information is lost when converting between a C++
+  :class:`~PyQt5.QtCore.QVariant` and the corresponding Python object.  For
+  example a :class:`~PyQt5.QtCore.QVariant` distinguishes between signed and
+  unsigned integers but Python doesn't.  Normally this doesn't matter but some
+  applications may need to make the distinction.
+
+- There is no obvious way to represent a null :class:`~PyQt5.QtCore.QVariant`
+  as a standard Python object.  PyQt4 introduced the ``QPyNullVariant`` class
+  to address this problem.
+
+Multiple APIs are intended to help manage an application's use of an old API to
+a newer, incompatible API.  They cannot be used to temporarily change the
+behaviour - modules that rely on different API versions cannot be used in the
+same application.
+
+In PyQt5 the implementation of :class:`~PyQt5.QtCore.QVariant` is different to
+those of PyQt4.  By default the behaviour is the same as PyQt4's v2 API.
+However it is possible to temporarily suppress the automatic conversion of a
+C++ :class:`~PyQt5.QtCore.QVariant` to a Python object and to return a wrapped
+Python :class:`~PyQt5.QtCore.QVariant` instead - behaviour similar to PyQt4's
+v1 API - by calling the :func:`sip.enableautoconversion` function.
+
+The actual value of a wrapped Python :class:`~PyQt5.QtCore.QVariant` is
+obtained by calling its :meth:`~PyQt5.QtCore.QVariant.value` method.  (Note
+that in PyQt4's v1 API this method is called ``toPyObject()``.)
+
+PyQt5 does not support the ``QPyNullVariant`` class as it is no longer needed.
diff --git a/doc/sphinx/python_shell.rst b/doc/sphinx/python_shell.rst
new file mode 100644
index 0000000..7d67709
--- /dev/null
+++ b/doc/sphinx/python_shell.rst
@@ -0,0 +1,26 @@
+Using PyQt5 from the Python Shell
+=================================
+
+PyQt5 installs an input hook (using ``PyOS_InputHook``) that processes events
+when an interactive interpreter is waiting for user input.  This means that
+you can, for example, create widgets from the Python shell prompt, interact
+with them, and still being able to enter other Python commands.
+
+For example, if you enter the following in the Python shell::
+
+    >>> from PyQt5.QtWidgets import QApplication, QWidget
+    >>> a = QApplication([])
+    >>> w = QWidget()
+    >>> w.show()
+    >>> w.hide()
+    >>>
+
+The widget would be displayed when ``w.show()`` was entered and hidden as soon
+as ``w.hide()`` was entered.
+
+The installation of an input hook can cause problems for certain applications
+(particularly those that implement a similar feature using different means).
+The :mod:`~PyQt5.QtCore` module contains the
+:func:`~PyQt5.QtCore.pyqtRemoveInputHook` and
+:func:`~PyQt5.QtCore.pyqtRestoreInputHook` functions that remove and restore
+the input hook respectively.
diff --git a/doc/sphinx/qml.rst b/doc/sphinx/qml.rst
new file mode 100644
index 0000000..40835d7
--- /dev/null
+++ b/doc/sphinx/qml.rst
@@ -0,0 +1,294 @@
+.. _ref-integrating-qml:
+
+Integrating Python and QML
+==========================
+
+Qt includes QML as a means of declaratively describing a user interface and
+using JavaScript as a scripting language within it.  It is possible to write
+complete standalone QML applications, or to combine them with C++.  PyQt5
+allows QML to be integrated with Python in exactly the same way.  In
+particular:
+
+- Python types that are sub-classed from :class:`~PyQt5.QtCore.QObject` can be
+  registered with QML.
+
+- Instances of registered Python types can be created and made available to QML
+  scripts.
+
+- Instances of registered Python types can be created by QML scripts.
+
+- Singleton instances of registered Python types can be created automatically
+  by a QML engine and made available to QML scripts.
+
+- QML scripts interact with Python objects through their properties, signals
+  and slots.
+
+- Python properties, signals and slots can be given revision numbers that only
+  those implemented by a specific version are made available to QML.
+
+
+Registering Python Types
+------------------------
+
+Registering Python types with QML is done in the same way is it is done with
+C++ classes, i.e. using the :func:`~PyQt5.QtQml.qmlRegisterType`,
+:func:`~PyQt5.QtQml.qmlRegisterSingletonType`,
+:func:`~PyQt5.QtQml.qmlRegisterUncreatableType` and
+:func:`~PyQt5.QtQml.qmlRegisterRevision` functions.
+
+In C++ these are template based functions that take the C++ class, and
+sometimes a revision, as template arguments.  In the Python implementation
+these are simply passed as the first arguments to the respective functions.
+
+
+A Simple Example
+----------------
+
+The following simple example demonstates the implementation of a Python class
+that is registered with QML.  The class defines two properties.  A QML script
+is executed which creates an instance of the class and sets the values of the
+properties.  That instance is then returned to Python which then prints the
+values of those properties.
+
+Hopefully the comments are self explanatory::
+
+    import sys
+
+    from PyQt5.QtCore import pyqtProperty, QCoreApplication, QObject, QUrl
+    from PyQt5.QtQml import qmlRegisterType, QQmlComponent, QQmlEngine
+
+
+    # This is the type that will be registered with QML.  It must be a
+    # sub-class of QObject.
+    class Person(QObject):
+        def __init__(self, parent=None):
+            super().__init__(parent)
+
+            # Initialise the value of the properties.
+            self._name = ''
+            self._shoeSize = 0
+
+        # Define the getter of the 'name' property.  The C++ type of the
+        # property is QString which Python will convert to and from a string.
+        @pyqtProperty('QString')
+        def name(self):
+            return self._name
+
+        # Define the setter of the 'name' property.
+        @name.setter
+        def name(self, name):
+            self._name = name
+
+        # Define the getter of the 'shoeSize' property.  The C++ type and
+        # Python type of the property is int.
+        @pyqtProperty(int)
+        def shoeSize(self):
+            return self._shoeSize
+
+        # Define the setter of the 'shoeSize' property.
+        @shoeSize.setter
+        def shoeSize(self, shoeSize):
+            self._shoeSize = shoeSize
+
+
+    # Create the application instance.
+    app = QCoreApplication(sys.argv)
+
+    # Register the Python type.  Its URI is 'People', it's v1.0 and the type
+    # will be called 'Person' in QML.
+    qmlRegisterType(Person, 'People', 1, 0, 'Person')
+
+    # Create a QML engine.
+    engine = QQmlEngine()
+
+    # Create a component factory and load the QML script.
+    component = QQmlComponent(engine)
+    component.loadUrl(QUrl('example.qml'))
+
+    # Create an instance of the component.
+    person = component.create()
+
+    if person is not None:
+        # Print the value of the properties.
+        print("The person's name is %s." % person.name)
+        print("They wear a size %d shoe." % person.shoeSize)
+    else:
+        # Print all errors that occurred.
+        for error in component.errors():
+            print(error.toString())
+
+The following is the ``example.qml`` QML script that is executed::
+
+    import People 1.0
+
+    Person {
+        name: "Bob Jones"
+        shoeSize: 12
+    }
+
+
+Using :class:`~PyQt5.QtQml.QQmlListProperty`
+--------------------------------------------
+
+Defining list-based properties in Python that can be updated from QML is done
+using the :class:`~PyQt5.QtQml.QQmlListProperty` class.  However the way it is
+used in Python is slightly different to the way it is used in C++.
+
+The following code fragment is taken from the ``chapter5-listproperties.py``
+example included with PyQt5::
+
+    class PieChart(QQuickItem):
+
+        @pyqtProperty(QQmlListProperty)
+        def slices(self):
+            return QQmlListProperty(PieSlice, self,
+                    append=lambda pie_ch, pie_sl: pie_sl.setParentItem(pie_ch))
+
+``PieChart`` and ``PieSlice`` are Quick items that are registered using
+:func:`~PyQt5.QtQml.qmlRegisterType`.  Instances of both can be created from
+QML.  ``slices`` is a property of ``PieChart`` that, as far as QML is
+concerned, is a list of ``PieSlice`` instances.
+
+The :func:`~PyQt5.QtCore.pyqtProperty` decorator specifies that the property is
+a :class:`~PyQt5.QtQml.QQmlListProperty`, that its name is ``slices`` and that
+the ``slices()`` function is its getter.
+
+The getter returns an instance of :class:`~PyQt5.QtQml.QQmlListProperty`.  This
+specifies that elements of the list should be of type ``PieSlice``, that the
+``PieChart`` instance (i.e. ``self``) has the property, and defines the
+callable that will be invoked in order to append a new element to the list.
+
+The ``append`` callable is passed two arguments: the object whose property is
+to be updated (i.e. the ``PyChart`` instance), and the element to be appended
+(i.e. a ``PieSlice`` instance).  Here we simply set the chart as the slice's
+parent item.  Note that there isn't actually a list anywhere - this is because,
+in this particular example, one isn't needed.
+
+The signature of the ``append`` callable is slightly different to that of the
+corresponding C++ function.  In C++ the first argument is the
+:class:`~PyQt5.QtQml.QQmlListProperty` instance rather than the ``PyChart``
+instance.  The signatures of the ``at``, ``clear`` and ``count`` callables are
+different in the same way.
+
+
+Using Attached Properties
+-------------------------
+
+In order to use attached properties in C++, three steps need to be taken.
+
+- A type that has attached properties must implement a static function called
+  ``qmlAttachedProperties``.  This is a factory that creates an instance of the
+  properties object to attach.
+
+- A type that has attached properties needs to be defined as such using the
+  ``QML_DECLARE_TYPEINFO`` macro with the ``QML_HAS_ATTACHED_PROPERTIES``
+  argument.
+
+- The instance of an attached properties object is retrieved using the
+  ``qmlAttachedPropertiesObject()`` template function.  The template type is
+  the type that has the attached properties.
+
+PyQt5 uses similar, but slightly simpler steps to achieve the same thing.
+
+- When calling :func:`~PyQt5.QtQml.qmlRegisterType` to register a type that
+  has attached properties the type of the properties object is passed as the
+  ``attachedProperties`` argument.  This type will be used as the factory for
+  creating an instance of the properties object.
+
+- The instance of an attached properties object is retrieved using the
+  :func:`~PyQt5.QtQml.qmlAttachedPropertiesObject` function in the same way
+  that you would from C++.  Just like :func:`~PyQt5.QtQml.qmlRegisterType`,
+  :func:`~PyQt5.QtQml.qmlAttachedPropertiesObject` takes an additional first
+  argument that is the type that, in C++, would be the template argument.
+
+See the ``attach.py`` example included with PyQt5 for a complete example
+showing the use of attached properties.
+
+
+Using Property Value Sources
+----------------------------
+
+Property values sources are implemented in PyQt5 in the same way as they are
+implemented in C++.  Simply sub-class from both :class:`~PyQt5.QtCore.QObject`
+and :class:`~PyQt5.QtQml.QQmlPropertyValueSource` and provide an implementation
+of the :meth:`~PyQt5.QtQml.QQmlPropertyValueSource.setTarget` method.
+
+
+Using :class:`~PyQt5.QtQml.QQmlParserStatus`
+--------------------------------------------
+
+Monitoring the QML parser status is implemented in PyQt5 in the same way as it
+is implemented in C++.  Simply sub-class from both
+:class:`~PyQt5.QtCore.QObject` and :class:`~PyQt5.QtQml.QQmlParserStatus` and
+provide implementations of the :meth:`~PyQt5.QtQml.QQmlParserStatus.classBegin`
+and :meth:`~PyQt5.QtQml.QQmlParserStatus.componentComplete` methods.
+
+
+Writing Python Plugins for :program:`qmlscene`
+----------------------------------------------
+
+Qt allows plugins that implement QML modules to be written that can be
+dynamically loaded by a C++ application (e.g. :program:`qmlscene`).  These
+plugins are sub-classes of :class:`~PyQt5.QtQml.QQmlExtensionPlugin`.  PyQt5
+supports exactly the same thing and allows those plugin to be written in
+Python.  In other words it is possible to provide QML extensions written in
+Python to a C++ application, and to provide QML extensions written in C++ to a
+Python application.
+
+PyQt5 provides a QML plugin called ``pyqt5qmlplugin``.  This acts as a wrapper
+around the Python code that implements the plugin.  It handles the loading of
+the Python interpreter, locating and importing the Python module that contains
+the implementation of :class:`~PyQt5.QtQml.QQmlExtensionPlugin`, creating an
+instance of that class, and calling the instance's
+:meth:`~PyQt5.QtQml.QQmlExtensionPlugin.registerTypes` method.  By default the
+``pyqt5qmlplugin`` is installed in the ``PyQt5`` sub-directory of your Qt
+installation's ``plugin`` directory.
+
+.. note::
+
+    ``pyqt5qmlplugin`` is the name of the plugin as seen by QML.  Its actual
+    filename will be different and operating system dependent.
+
+A QML extension module is a directory containing a file called ``qmldir``.  The
+file contains the name of the module and the name of the plugin that implements
+the module.  It may also specify the directory containing the plugin.  Usually
+this isn't needed because the plugin is installed in the same directory.
+
+Therefore, for a QML extension module called ``Charts``, the contents of the
+``qmldir`` file might be::
+
+    module Charts
+    plugin pyqt5qmlplugin /path/to/qt/plugins/PyQt5
+
+The ``pyqt5qmlplugin`` expects to find a Python module in the same directory
+with a filename ending with ``plugin.py`` or ``plugin.pyw``.  In this case the
+name ``chartsplugin.py`` would be a sensible choice.  Before importing this
+module ``pyqt5qmlplugin`` first places the name of the directory at the start
+of :attr:`sys.path`.
+
+.. note::
+
+    ``pyqt5qmlplugin`` has to locate the directory containing the ``qmldir``
+    file itself.  It does this using the same algorithm used by QML, i.e. it
+    searches some standard locations and locations specified by the
+    :envvar:`QML2_IMPORT_PATH` environment variable.  When using
+    :program:`qmlscene`, ``pyqt5qmlplugin`` will not know about any additional
+    locations specified by its :option:`-I` option.  Therefore,
+    :envvar:`QML2_IMPORT_PATH` should always be used to specify additional
+    locations to search.
+
+Due to a limitation in QML it is not possible for multiple QML modules to use
+the same C++ plugin.  In C++ this is not a problem as there is a one-to-one
+relationship between a module and the plugin.  However, when using Python,
+``pyqt5qmlplugin`` is used by every module.  There are two solutions to this:
+
+- on operating systems that support it, place a symbolic link in the directory
+  containing the ``qmldir`` file that points to the actual ``pyqt5qmlplugin``
+
+- make a copy of ``pyqt5qmlplugin`` in the directory containing the ``qmldir``
+  file.
+
+In both cases the contents of the ``qmldir`` file can be simplifed to::
+
+    module Charts
+    plugin pyqt5qmlplugin
diff --git a/doc/sphinx/qt_interfaces.rst b/doc/sphinx/qt_interfaces.rst
new file mode 100644
index 0000000..c2b8971
--- /dev/null
+++ b/doc/sphinx/qt_interfaces.rst
@@ -0,0 +1,17 @@
+Support for Qt Interfaces
+=========================
+
+PyQt5 does not, generally, support defining a class that inherits from more
+than one Qt class.  The exception is when inheriting from classes that Qt
+defines as *interfaces*, for example
+:class:`~PyQt5.QtGui.QTextObjectInterface`.
+
+A Qt interface is an abstract class contains only pure virtual methods and is
+used as a mixin with (normally) a :class:`~PyQt5.QtCore.QObject` sub-class.  It
+is often used to define the interface that a plugin must implement.
+
+Note that PyQt5 does not need an equivalent of Qt's ``Q_INTERFACES`` macro in
+order to use an interface class.
+
+The ``textobject.py`` example includedd with PyQt5 demonstrates the use of an
+interface.
diff --git a/doc/sphinx/qt_properties.rst b/doc/sphinx/qt_properties.rst
new file mode 100644
index 0000000..7eaddfe
--- /dev/null
+++ b/doc/sphinx/qt_properties.rst
@@ -0,0 +1,94 @@
+Support for Qt Properties
+=========================
+
+PyQt5 does not support the setting and getting of Qt properties as if they were
+normal instance attributes.  This is because the name of a property often
+conflicts with the name of the property's getter method.
+
+However, PyQt5 does support the initial setting of properties using keyword
+arguments passed when an instance is created.  For example::
+
+    act = QAction("&Save", self, shortcut=QKeySequence.Save,
+            statusTip="Save the document to disk", triggered=self.save)
+
+The example also demonstrates the use of a keyword argument to connect a
+signal to a slot.
+
+PyQt5 also supports setting the values of properties (and connecting a signal
+to a slot) using the :meth:`~PyQt5.QtCore.QObject.pyqtConfigure()` method.  For
+example, the following gives the same results as above::
+
+    act = QAction("&Save", self)
+    act.pyqtConfigure(shortcut=QKeySequence.Save,
+            statusTip="Save the document to disk", triggered=self.save)
+
+
+Defining New Qt Properties
+--------------------------
+
+A new Qt property may be defined using the :func:`~PyQt5.QtCore.pyqtProperty`
+function.  It is used in the same way as the standard Python ``property()``
+function.  In fact, Qt properties defined in this way also behave as Python
+properties.
+
+.. function:: PyQt5.QtCore.pyqtProperty(type[, fget=None[, fset=None[, freset=None[, fdel=None[, doc=None[, designable=True[, scriptable=True[, stored=True[, user=False[, constant=False[, final=False[, notify=None[, revision=0]]]]]]]]]]]]])
+
+    Create a property that behaves as both a Python property and a Qt property.
+
+    :param type:
+        the type of the property.  It is either a Python type object or a
+        string that is the name of a C++ type.
+    :param fget:
+        the optional callable used to get the value of the property.
+    :param fset:
+        the optional callable used to set the value of the property.
+    :param freset:
+        the optional callable used to reset the value of the property to its
+        default value.  It is ignored by Python
+    :param fdel:
+        the optional callable used to delete the property.  It is ignored by
+        Qt.
+    :param doc:
+        the optional docstring of the property.  It is ignored by Qt.
+    :param designable:
+        optionally sets the Qt ``DESIGNABLE`` flag.  It is ignored by Python
+    :param scriptable:
+        optionally sets the Qt ``SCRIPTABLE`` flag.  It is ignored by Python
+    :param stored:
+        optionally sets the Qt ``STORED`` flag.  It is ignored by Python
+    :param user:
+        optionally sets the Qt ``USER`` flag.  It is ignored by Python
+    :param constant:
+        optionally sets the Qt ``CONSTANT`` flag.  It is ignored by Python
+    :param final:
+        optionally sets the Qt ``FINAL`` flag.  It is ignored by Python
+    :param notify:
+        the optional unbound notify signal.  It is ignored by Python
+    :param revision:
+        the revision exported to QML.  It is ignored by Python
+    :rtype:
+        the property object.
+      
+It is also possible to use :func:`~PyQt5.QtCore.pyqtProperty` as a decorator in
+the same way as the standard Python ``property()`` function.  The following
+example shows how to define an ``int`` property with a getter and setter::
+
+    from PyQt5.QtCore import QObject, pyqtProperty
+
+    class Foo(QObject):
+
+        def __init__(self):
+            QObject.__init__(self)
+
+            self._total = 0
+
+        @pyqtProperty(int)
+        def total(self):
+            return self._total
+
+        @total.setter
+        def total(self, value):
+            self._total = value
+
+If you prefer the Qt terminology you may also use ``write`` instead of
+``setter`` (and ``read`` instead of ``getter``).
diff --git a/doc/sphinx/resources.rst b/doc/sphinx/resources.rst
new file mode 100644
index 0000000..196f40e
--- /dev/null
+++ b/doc/sphinx/resources.rst
@@ -0,0 +1,23 @@
+The PyQt5 Resource System
+=========================
+
+PyQt5 supports Qt's resource system.  This is a facility for embedding
+resources such as icons and translation files in an application.  This makes
+the packaging and distribution of those resources much easier.
+
+A ``.qrc`` resource collection file is an XML file used to specify which
+resource files are to be embedded.  The application then refers to the resource
+files by their original names but preceded by a colon.
+
+For a full description, including the format of the ``.qrc`` files, see the Qt
+Resource System in the Qt documentation.
+
+
+:program:`pyrcc5`
+-----------------
+
+:program:`pyrcc5` is PyQt5's equivalent to Qt's :program:`rcc` utility and is
+used in exactly the same way.  :program:`pyrcc5` reads the ``.qrc`` file, and
+the resource files, and generates a Python module that only needs to be
+``import``\ ed by the application in order for those resources to be made
+available just as if they were the original files.
diff --git a/doc/sphinx/signals_slots.rst b/doc/sphinx/signals_slots.rst
new file mode 100644
index 0000000..de85b39
--- /dev/null
+++ b/doc/sphinx/signals_slots.rst
@@ -0,0 +1,349 @@
+Support for Signals and Slots
+=============================
+
+One of the key features of Qt is its use of signals and slots to communicate
+between objects.  Their use encourages the development of reusable components.
+
+A signal is emitted when something of potential interest happens.  A slot is a
+Python callable.  If a signal is connected to a slot then the slot is called
+when the signal is emitted.  If a signal isn't connected then nothing happens.
+The code (or component) that emits the signal does not know or care if the
+signal is being used.
+
+The signal/slot mechanism has the following features.
+
+- A signal may be connected to many slots.
+
+- A signal may also be connected to another signal.
+
+- Signal arguments may be any Python type.
+
+- A slot may be connected to many signals.
+
+- Connections may be direct (ie. synchronous) or queued (ie. asynchronous).
+
+- Connections may be made across threads.
+
+- Signals may be disconnected.
+
+
+Unbound and Bound Signals
+-------------------------
+
+A signal (specifically an unbound signal) is a class attribute.  When a signal
+is referenced as an attribute of an instance of the class then PyQt5
+automatically binds the instance to the signal in order to create a *bound
+signal*.  This is the same mechanism that Python itself uses to create bound
+methods from class functions.
+
+A bound signal has ``connect()``, ``disconnect()`` and ``emit()`` methods that
+implement the associated functionality.  It also has a ``signal`` attribute
+that is the signature of the signal that would be returned by Qt's ``SIGNAL()``
+macro.
+
+A signal may be overloaded, ie. a signal with a particular name may support
+more than one signature.  A signal may be indexed with a signature in order to
+select the one required.  A signature is a sequence of types.  A type is either
+a Python type object or a string that is the name of a C++ type.  The name of a
+C++ type is automatically normalised so that, for example, ``QVariant`` can be
+used instead of the non-normalised ``const QVariant &``.
+
+If a signal is overloaded then it will have a default that will be used if no
+index is given.
+
+When a signal is emitted then any arguments are converted to C++ types if
+possible.  If an argument doesn't have a corresponding C++ type then it is
+wrapped in a special C++ type that allows it to be passed around Qt's meta-type
+system while ensuring that its reference count is properly maintained.
+
+
+Defining New Signals with :func:`~PyQt5.QtCore.pyqtSignal`
+----------------------------------------------------------
+
+PyQt5 automatically defines signals for all Qt's built-in signals.  New signals
+can be defined as class attributes using the :func:`~PyQt5.QtCore.pyqtSignal`
+factory.
+
+.. function:: PyQt5.QtCore.pyqtSignal(types[, name[, revision=0[, arguments=[]]]])
+
+    Create one or more overloaded unbound signals as a class attribute.
+
+    :param types:
+        the types that define the C++ signature of the signal.  Each type may
+        be a Python type object or a string that is the name of a C++ type.
+        Alternatively each may be a sequence of type arguments.  In this case
+        each sequence defines the signature of a different signal overload.
+        The first overload will be the default.
+    :param name:
+        the name of the signal.  If it is omitted then the name of the class
+        attribute is used.  This may only be given as a keyword argument.
+    :param revision:
+        the revision of the signal that is exported to QML.  This may only be
+        given as a keyword argument.
+    :param arguments:
+        the sequence of the names of the signal's arguments that is exported to
+        QML.  This may only be given as a keyword argument.
+    :rtype:
+        an unbound signal
+
+The following example shows the definition of a number of new signals::
+
+    from PyQt5.QtCore import QObject, pyqtSignal
+
+    class Foo(QObject):
+
+        # This defines a signal called 'closed' that takes no arguments.
+        closed = pyqtSignal()
+
+        # This defines a signal called 'rangeChanged' that takes two
+        # integer arguments.
+        range_changed = pyqtSignal(int, int, name='rangeChanged')
+
+        # This defines a signal called 'valueChanged' that has two overloads,
+        # one that takes an integer argument and one that takes a QString
+        # argument.  Note that because we use a string to specify the type of
+        # the QString argument then this code will run under Python v2 and v3.
+        valueChanged = pyqtSignal([int], ['QString'])
+
+New signals should only be defined in sub-classes of
+:class:`~PyQt5.QtCore.QObject`.  They must be part of the class definition and
+cannot be dynamically added as class attributes after the class has been
+defined.
+
+New signals defined in this way will be automatically added to the class's
+:class:`~PyQt5.QtCore.QMetaObject`.  This means that they will appear in Qt
+Designer and can be introspected using the :class:`~PyQt5.QtCore.QMetaObject`
+API.
+
+Overloaded signals should be used with care when an argument has a Python type
+that has no corresponding C++ type.  PyQt5 uses the same internal C++ class to
+represent such objects and so it is possible to have overloaded signals with
+different Python signatures that are implemented with identical C++ signatures
+with unexpected results.  The following is an example of this::
+
+    class Foo(QObject):
+
+        # This will cause problems because each has the same C++ signature.
+        valueChanged = pyqtSignal([dict], [list])
+
+
+Connecting, Disconnecting and Emitting Signals
+----------------------------------------------
+
+Signals are connected to slots using the :meth:`connect` method of a bound
+signal.
+
+.. method:: connect(slot[, type=PyQt5.QtCore.Qt.AutoConnection[, no_receiver_check=False]])
+
+    Connect a signal to a slot.  An exception will be raised if the connection
+    failed.
+
+    :param slot:
+        the slot to connect to, either a Python callable or another bound
+        signal.
+    :param type:
+        the type of the connection to make.
+    :param no_receiver_check:
+        suppress the check that the underlying C++ receiver instance still
+        exists and deliver the signal anyway.
+
+Signals are disconnected from slots using the :meth:`disconnect` method of a
+bound signal.
+
+.. method:: disconnect([slot])
+
+    Disconnect one or more slots from a signal.  An exception will be raised if
+    the slot is not connected to the signal or if the signal has no connections
+    at all.
+
+    :param slot:
+        the optional slot to disconnect from, either a Python callable or
+        another bound signal.  If it is omitted then all slots connected to the
+        signal are disconnected.
+
+Signals are emitted from using the :meth:`emit` method of a bound signal.
+
+.. method:: emit(\*args)
+
+    Emit a signal.
+
+    :param args:
+        the optional sequence of arguments to pass to any connected slots.
+
+The following code demonstrates the definition, connection and emit of a
+signal without arguments::
+
+    from PyQt5.QtCore import QObject, pyqtSignal
+
+    class Foo(QObject):
+
+        # Define a new signal called 'trigger' that has no arguments.
+        trigger = pyqtSignal()
+
+        def connect_and_emit_trigger(self):
+            # Connect the trigger signal to a slot.
+            self.trigger.connect(self.handle_trigger)
+
+            # Emit the signal.
+            self.trigger.emit()
+
+        def handle_trigger(self):
+            # Show that the slot has been called.
+
+            print "trigger signal received"
+
+The following code demonstrates the connection of overloaded signals::
+
+    from PyQt5.QtWidgets import QComboBox
+
+    class Bar(QComboBox):
+
+        def connect_activated(self):
+            # The PyQt5 documentation will define what the default overload is.
+            # In this case it is the overload with the single integer argument.
+            self.activated.connect(self.handle_int)
+
+            # For non-default overloads we have to specify which we want to
+            # connect.  In this case the one with the single string argument.
+            # (Note that we could also explicitly specify the default if we
+            # wanted to.)
+            self.activated[str].connect(self.handle_string)
+
+        def handle_int(self, index):
+            print "activated signal passed integer", index
+
+        def handle_string(self, text):
+            print "activated signal passed QString", text
+
+
+Connecting Signals Using Keyword Arguments
+------------------------------------------
+
+It is also possible to connect signals by passing a slot as a keyword argument
+corresponding to the name of the signal when creating an object, or using the
+:meth:`~PyQt5.QtCore.QObject.pyqtConfigure` method.  For example the following
+three fragments are equivalent::
+
+    act = QAction("Action", self)
+    act.triggered.connect(self.on_triggered)
+
+    act = QAction("Action", self, triggered=self.on_triggered)
+
+    act = QAction("Action", self)
+    act.pyqtConfigure(triggered=self.on_triggered)
+
+
+The :func:`~PyQt5.QtCore.pyqtSlot` Decorator
+--------------------------------------------
+
+Although PyQt5 allows any Python callable to be used as a slot when connecting
+signals, it is sometimes necessary to explicitly mark a Python method as being
+a Qt slot and to provide a C++ signature for it.  PyQt5 provides the
+:func:`~PyQt5.QtCore.pyqtSlot` function decorator to do this.
+
+.. function:: PyQt5.QtCore.pyqtSlot(types[, name[, result[, revision=0]]])
+
+    Decorate a Python method to create a Qt slot.
+
+    :param types:
+        the types that define the C++ signature of the slot.  Each type may be
+        a Python type object or a string that is the name of a C++ type.
+    :param name:
+        the name of the slot that will be seen by C++.  If omitted the name of
+        the Python method being decorated will be used.  This may only be given
+        as a keyword argument.
+    :param revision:
+        the revision of the slot that is exported to QML.  This may only be
+        given as a keyword argument.
+    :param result:
+        the type of the result and may be a Python type object or a string that
+        specifies a C++ type.  This may only be given as a keyword argument.
+
+Connecting a signal to a decorated Python method also has the advantage of
+reducing the amount of memory used and is slightly faster.
+
+For example::
+
+    from PyQt5.QtCore import QObject, pyqtSlot
+
+    class Foo(QObject):
+
+        @pyqtSlot()
+        def foo(self):
+            """ C++: void foo() """
+
+        @pyqtSlot(int, str)
+        def foo(self, arg1, arg2):
+            """ C++: void foo(int, QString) """
+
+        @pyqtSlot(int, name='bar')
+        def foo(self, arg1):
+            """ C++: void bar(int) """
+
+        @pyqtSlot(int, result=int)
+        def foo(self, arg1):
+            """ C++: int foo(int) """
+
+        @pyqtSlot(int, QObject)
+        def foo(self, arg1):
+            """ C++: int foo(int, QObject *) """
+
+It is also possible to chain the decorators in order to define a Python method
+several times with different signatures.  For example::
+
+    from PyQt5.QtCore import QObject, pyqtSlot
+
+    class Foo(QObject):
+
+        @pyqtSlot(int)
+        @pyqtSlot('QString')
+        def valueChanged(self, value):
+            """ Two slots will be defined in the QMetaObject. """
+
+
+Connecting Slots By Name
+------------------------
+
+PyQt5 supports the :meth:`~Pyt5.QtCore.QMetaObject.connectSlotsByName` function
+that is most commonly used by :program:`pyuic5` generated Python code to
+automatically connect signals to slots that conform to a simple naming
+convention.  However, where a class has overloaded Qt signals (ie. with the
+same name but with different arguments) PyQt5 needs additional information in
+order to automatically connect the correct signal.
+
+For example the :class:`~PyQt5.QtWidgets.QSpinBox` class has the following
+signals::
+
+    void valueChanged(int i);
+    void valueChanged(const QString &text);
+
+When the value of the spin box changes both of these signals will be emitted.
+If you have implemented a slot called ``on_spinbox_valueChanged`` (which
+assumes that you have given the :class:`~PyQt5.QtCore.QSpinBox` instance the
+name ``spinbox``) then it will be connected to both variations of the signal.
+Therefore, when the user changes the value, your slot will be called twice -
+once with an integer argument, and once with a string argument.
+
+The :func:`~PyQt5.QtCore.pyqtSlot` decorator can be used to specify which of
+the signals should be connected to the slot.
+
+For example, if you were only interested in the integer variant of the signal
+then your slot definition would look like the following::
+
+    @pyqtSlot(int)
+    def on_spinbox_valueChanged(self, i):
+        # i will be an integer.
+        pass
+
+If you wanted to handle both variants of the signal, but with different Python
+methods, then your slot definitions might look like the following::
+
+    @pyqtSlot(int, name='on_spinbox_valueChanged')
+    def spinbox_int_value(self, i):
+        # i will be an integer.
+        pass
+
+    @pyqtSlot(str, name='on_spinbox_valueChanged')
+    def spinbox_qstring_value(self, s):
+        # s will be a Python string object (or a QString if they are enabled).
+        pass
diff --git a/doc/sphinx/static/default.css b/doc/sphinx/static/default.css
new file mode 100644
index 0000000..8a26eae
--- /dev/null
+++ b/doc/sphinx/static/default.css
@@ -0,0 +1,252 @@
+/*
+ * The stylesheet (based on the Sphinx default).
+ */
+
+ at import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+    font-family: 100% Verdana, Arial, Helvetica, sans-serif;
+    font-size: 12px;
+    background-color: white;
+    color: black;
+    margin: 0;
+    padding: 0;
+}
+
+div.document {
+    background-color: white;
+}
+
+div.documentwrapper {
+    float: left;
+    width: 100%;
+}
+
+div.bodywrapper {
+    margin: 0 0 0 230px;
+}
+
+div.body {
+    background-color: white;
+    color: black;
+    padding: 0 20px 30px 20px;
+}
+
+/* "footer" contains the copyright notice and the Sphinx link. */
+div.footer {
+    color: black;
+    background-color: white;
+    width: 100%;
+    padding: 9px 0 9px 0;
+    text-align: center;
+    font-size: 75%;
+}
+
+div.footer a {
+    color: black;
+    text-decoration: underline;
+}
+
+/* "related" contains the title and the previous/next/modules/index links. */
+div.related {
+    background-color: white;
+    line-height: 30px;
+    color: black;
+}
+
+div.related a {
+    color: #4186cb;
+}
+
+div.sphinxsidebar {
+}
+
+div.sphinxsidebar h3 {
+    font-family: 'Trebuchet MS', sans-serif;
+    color: black;
+    font-size: 1.4em;
+    font-weight: normal;
+    margin: 0;
+    padding: 0;
+}
+
+div.sphinxsidebar h3 a {
+    color: black;
+}
+
+div.sphinxsidebar h4 {
+    font-family: 'Trebuchet MS', sans-serif;
+    color: black;
+    font-size: 1.3em;
+    font-weight: normal;
+    margin: 5px 0 0 0;
+    padding: 0;
+}
+
+div.sphinxsidebar p {
+    color: black;
+}
+
+div.sphinxsidebar p.topless {
+    margin: 5px 10px 10px 10px;
+}
+
+div.sphinxsidebar ul {
+    margin: 10px;
+    padding: 0;
+    color: black;
+}
+
+div.sphinxsidebar a {
+    color: #4186cb;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #4186cb;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+a {
+    color: #4186cb;
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: underline;
+}
+
+div.body p, div.body dd, div.body li {
+    text-align: justify;
+    line-height: 130%;
+}
+
+div.body h1 {
+    font-size: 180%;
+    font-weight: bold;
+    border-left-width: 1px;
+    border-right-width: 1px;
+    border-top-width: 1px;
+    border-bottom-width: 2px;
+    color: white;
+    background-color: #4186cb;
+    padding: 5px;
+    margin-top: 20px;
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    -khtml-border-radius: 5px;
+}
+
+div.body h2 {
+    font-size: 140%;
+    font-weight: normal;
+    border-left-width: 1px;
+    border-right-width: 1px;
+    border-top-width: 1px;
+    border-bottom-width: 2px;
+    color: white;
+    background-color: #4186cb;
+    padding: 5px;
+    margin-top: 20px;
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+    -khtml-border-radius: 5px;
+}
+
+h1 a, h2 a {
+    color: white;
+    text-decoration: none;
+}
+
+div.body h3 {
+    font-size: 130%;
+    font-weight: bold;
+    color: black;
+}
+
+a.headerlink {
+    color: white;
+    font-size: 0.8em;
+    padding: 0 4px 0 4px;
+    text-decoration: none;
+}
+
+div.body p, div.body dd, div.body li {
+    text-align: justify;
+    line-height: 130%;
+}
+
+div.admonition p.admonition-title + p {
+    display: inline;
+}
+
+div.admonition p {
+    margin-bottom: 5px;
+}
+
+div.admonition pre {
+    margin-bottom: 5px;
+}
+
+div.admonition ul, div.admonition ol {
+    margin-bottom: 5px;
+}
+
+div.note {
+    background-color: #eee;
+    border: 1px solid #ccc;
+}
+
+div.seealso {
+    background-color: #ffc;
+    border: 1px solid #ff6;
+}
+
+div.topic {
+    background-color: #eee;
+}
+
+div.warning {
+    background-color: #ffe4e4;
+    border: 1px solid #f66;
+}
+
+p.admonition-title {
+    display: inline;
+}
+
+p.admonition-title:after {
+    content: ":";
+}
+
+pre {
+    padding: 5px;
+    /*
+     * Note that this isn't our standard "sun" colour which doesn't contrast
+     * too well with the pygments defaults.
+     */
+    background-color: #fff4c0;
+    color: black;
+    line-height: 120%;
+    border: 1px solid #ac9;
+    border-left: none;
+    border-right: none;
+}
+
+tt {
+    background-color: #ecf0f3;
+    padding: 0 1px 0 1px;
+    font-size: 0.95em;
+}
+
+.warning tt {
+    background: #efc2c2;
+}
+
+.note tt {
+    background: #d6d6d6;
+}
diff --git a/doc/sphinx/static/logo.png b/doc/sphinx/static/logo.png
new file mode 100644
index 0000000..42f2eb6
Binary files /dev/null and b/doc/sphinx/static/logo.png differ
diff --git a/doc/sphinx/static/logo_tn.ico b/doc/sphinx/static/logo_tn.ico
new file mode 100644
index 0000000..4f3d72a
Binary files /dev/null and b/doc/sphinx/static/logo_tn.ico differ
diff --git a/examples/README b/examples/README
new file mode 100644
index 0000000..bc1ac67
--- /dev/null
+++ b/examples/README
@@ -0,0 +1,25 @@
+PyQt is supplied with a number of example applications and demonstrations that
+have been written to provide developers with examples of the Qt API in use,
+highlight good programming practise, and showcase features found in each of
+Qt's core technologies.
+
+The example and demo launcher can be used to explore the different categories
+available. It provides an overview of each example, lets you view the
+documentation in Qt Assistant, and is able to launch examples and demos.
+
+Documentation for these examples can be found in the Tutorial and Examples
+section of the Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/activeqt/README b/examples/activeqt/README
new file mode 100644
index 0000000..97ff42f
--- /dev/null
+++ b/examples/activeqt/README
@@ -0,0 +1,24 @@
+On Windows PyQt provides support for integration with ActiveX controls.
+
+These examples demonstrate the basic techniques used to take advantage of
+ActiveX in PyQt applications.
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/activeqt/webbrowser/icons/image0.xpm b/examples/activeqt/webbrowser/icons/image0.xpm
new file mode 100644
index 0000000..0eb3a23
--- /dev/null
+++ b/examples/activeqt/webbrowser/icons/image0.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *image0[]={
+"32 32 3 1",
+". c None",
+"a c #000080",
+"# c #808080",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+".......#aaaaaaaaa...............",
+"......#aaaaaaaaaaa.........a....",
+".....#aaa.......aaa.......aa....",
+"....#aaa.........aaaa....aaa....",
+"....aaa...........aaaa..aaaa....",
+"....aa..............aaaaaaaa....",
+"....aa...............aaaaaaa....",
+"....aa...............aaaaaaa....",
+"....aa..............aaaaaaaa....",
+"....aa.............aaaaaaaaa....",
+"....#aa...........aaaaaaaaaa....",
+".....#aa.........aaaaaaaaaaa....",
+"......aa#.......................",
+".......aa#......................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................"};
diff --git a/examples/activeqt/webbrowser/icons/image1.xpm b/examples/activeqt/webbrowser/icons/image1.xpm
new file mode 100644
index 0000000..7808a87
--- /dev/null
+++ b/examples/activeqt/webbrowser/icons/image1.xpm
@@ -0,0 +1,177 @@
+/* XPM */
+static char *image1[]={
+"32 32 142 2",
+"Qt c None",
+"#O c #0010f7",
+"#P c #0021ef",
+"#R c #0021f7",
+"#S c #0021ff",
+"#T c #0029ff",
+"ah c #0031ff",
+"#N c #0829f7",
+"#x c #0831ff",
+"#C c #0839ff",
+"#E c #1029e7",
+"#r c #1039ff",
+"#o c #1042ff",
+"#Q c #1831de",
+"ak c #1831e7",
+"#k c #1842ff",
+"#H c #184aff",
+"aj c #2139e7",
+"#s c #2142de",
+"#G c #214aff",
+".9 c #2152ff",
+"#2 c #2939c6",
+"ag c #2939d6",
+"a# c #2942ce",
+"#p c #2942de",
+"#U c #2952ff",
+"ae c #295aff",
+"#y c #3152de",
+".2 c #3152e7",
+"#I c #315aff",
+"#z c #3163ff",
+"#1 c #394abd",
+"#L c #394ade",
+"#B c #3963ff",
+"#w c #396bff",
+"#V c #4252d6",
+"#l c #4252de",
+"#W c #4263ef",
+"#q c #426bff",
+".1 c #4273ff",
+"#5 c #4a5ad6",
+"#J c #4a73ff",
+"#K c #4a7bff",
+"ac c #4a84ff",
+"ab c #5263c6",
+".T c #5263ce",
+".M c #5273d6",
+".c c #5273e7",
+".U c #527bde",
+"#t c #527bf7",
+"#A c #5284ff",
+"#X c #5a63ad",
+".V c #5a84ef",
+"#F c #5a84ff",
+"#v c #5a8cff",
+"ad c #636bbd",
+".e c #637bc6",
+".W c #637bce",
+".3 c #637bd6",
+".Q c #6384de",
+".5 c #638cef",
+"#b c #638cff",
+"#j c #6394ff",
+"af c #6b73bd",
+"#0 c #6b73c6",
+".S c #6b84ce",
+"#u c #6b94ff",
+".C c #6b9cff",
+"ai c #737bce",
+".z c #7384b5",
+".j c #7384c6",
+"#6 c #738cce",
+".4 c #738cd6",
+".b c #739ce7",
+".I c #73a5ff",
+"#n c #73adff",
+"#Z c #7b84b5",
+".R c #7b8cbd",
+".J c #7b94bd",
+".n c #7ba5e7",
+".P c #7badff",
+"#c c #7bb5ff",
+"#M c #84849c",
+"#3 c #8484ad",
+".i c #848cc6",
+"al c #8494bd",
+"aa c #849cc6",
+".y c #84adff",
+".O c #84b5ff",
+"#a c #84bdff",
+".t c #8c94ad",
+".a c #8c94b5",
+".D c #8c9cbd",
+".m c #8c9cce",
+".A c #8ca5ef",
+".f c #8cadf7",
+".H c #8cbdff",
+"#D c #9494a5",
+"#8 c #9494bd",
+"#9 c #9494c6",
+"a. c #949cbd",
+".r c #94c6ff",
+"#d c #94ceff",
+"#4 c #9ca5ad",
+"#7 c #9ca5b5",
+".u c #9cbdf7",
+".6 c #9cc6ff",
+".0 c #9cceff",
+".x c #9cd6ff",
+".L c #a5a5b5",
+"#Y c #a5a5bd",
+"#e c #a5ceff",
+"## c #a5d6ff",
+".X c #adadb5",
+".k c #adc6ff",
+"#i c #add6ff",
+".E c #b5b5b5",
+".d c #b5b5bd",
+".K c #b5bdc6",
+".F c #b5ceff",
+".N c #b5d6ff",
+".B c #b5deff",
+".s c #bdbdbd",
+".# c #bdbdc6",
+"#. c #bdd6ff",
+".G c #bde7ff",
+"#h c #c6e7ff",
+"#f c #c6efff",
+".w c #c6f7ff",
+".h c #ced6ff",
+".Y c #cee7ff",
+".q c #ceefff",
+".Z c #cef7ff",
+".l c #d6efff",
+".8 c #d6f7ff",
+".o c #deefff",
+".7 c #def7ff",
+"#m c #deffff",
+"#g c #e7ffff",
+".v c #efffff",
+".p c #f7ffff",
+".g c #ffffff",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQt.#.a.b.c.aQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQt.d.e.f.g.h.iQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt.d.j.k.g.g.l.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQt.a.n.o.g.p.q.r.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQt.s.t.u.g.g.v.w.x.y.mQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQt.z.A.g.g.v.B.x.r.C.DQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQt.E.a.F.g.g.v.G.r.H.H.I.JQtQtQtQtQtQtQtQtQtQt.s.s.K.K.KQtQt",
+"QtQt.L.M.N.g.g.q.x.H.O.y.P.P.Q.LQtQtQt.s.s.K.a.R.S.T.U.V.V.Q.W.X",
+"Qt.#.Q.Y.g.g.Z.0.O.y.P.P.P.P.1.2.3.4.S.e.c.5.f.6.N.l.7.8.Z.0.9.T",
+".s.W#..g.p.Z###a.O.P.P.I.I.P#b#c#d#e.B#f#g.7.8.8.q#h#i.r.H#j#k#l",
+".e#e.g#m.G#d.O.y.P.I.I.I.I.I.I.H.6####.0.r.H#a.O#c.I#n.I#j.1#o#p",
+".5.p#f.x.0.O.y.P.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.C.C.C#b#q#r#s",
+"#t##.r.H.O#c.P.I.I.I.I.I.I.C.I.C.C.I.C.I.C.C.C.C#u.C#j#j#v#w#x#p",
+"#y#z#j.I.I.P.I.I.C.C.C.I.I.C.C#j#b#v#v#b#j#j#j#b#j#v#b#v#A#B#C#p",
+"#D#E#k#q#A#j.C.I.C.I.C.C.C.I#F#G#k#k#H#G#I#B.1.1#J#K#K.1#q#z#x#L",
+".s#M#N#r#z#K#b#u.C#u.C.C.I.I#B#O#P#Q#E#P#R#S#T#x#r#r#H.9#U#G#T#V",
+"QtQt.z#N#r#I.1#v#j#u#j.C#u.I#W#X#D.s#Y#D#Z#0#1#2#Q#P#P#N#N#T#E#3",
+"QtQt.s#4#5#x#H#B#K#v#j#j#j#j#6QtQtQtQtQtQtQt.s.s.d.X#7#8#9a..X.s",
+"QtQtQtQt.da##S#k#z#J#v#b#j#vaaQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQt.Eab#x#o#I#K#v#vac.iQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQt.sad#E#rae#q#K#wafQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQt.#.Lagah#k#U#kafQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQt#4#Q#T#xahaiQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQt#4adajakalQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"};
diff --git a/examples/activeqt/webbrowser/icons/image2.xpm b/examples/activeqt/webbrowser/icons/image2.xpm
new file mode 100644
index 0000000..83612c2
--- /dev/null
+++ b/examples/activeqt/webbrowser/icons/image2.xpm
@@ -0,0 +1,177 @@
+/* XPM */
+static char *image2[]={
+"32 32 142 2",
+"Qt c None",
+"#Y c #0018e7",
+"aa c #0018ef",
+"#E c #0018ff",
+"#Q c #0021ef",
+"#K c #0021ff",
+"a# c #0029ff",
+"a. c #0829ff",
+"#P c #0831ff",
+"#4 c #1021d6",
+"#R c #1021de",
+"#L c #1029d6",
+"#V c #1029e7",
+"#n c #1039f7",
+"#W c #1039ff",
+"#O c #1042ff",
+"ah c #1831ce",
+"#y c #1842ff",
+"aj c #2131c6",
+"#S c #2131ce",
+"#z c #2139de",
+".0 c #2142de",
+"ai c #2142e7",
+".t c #214aef",
+"#D c #214aff",
+".x c #2152ff",
+"al c #2939de",
+"#d c #294ae7",
+"#I c #2952ff",
+"#J c #295aff",
+"#T c #3142bd",
+"#N c #315aff",
+"#s c #3163ff",
+"#F c #394ac6",
+"#G c #3952d6",
+"ag c #395ae7",
+".B c #3963f7",
+"ae c #3963ff",
+".g c #396bff",
+"#U c #424ab5",
+"#2 c #4252b5",
+".J c #425ace",
+"#A c #4263de",
+".b c #426be7",
+"#p c #426bef",
+"#x c #426bff",
+".n c #4273ff",
+".o c #4a63ce",
+"#t c #4a6be7",
+".Q c #4a73de",
+"#3 c #4a73ff",
+"#C c #4a7bff",
+"#Z c #525abd",
+".1 c #526bbd",
+".W c #526bc6",
+".R c #526bce",
+".P c #527be7",
+"#w c #5284ff",
+"#m c #528cff",
+"ac c #5a63bd",
+"ak c #5a6bbd",
+".O c #5a7bf7",
+"#H c #5a84ff",
+"#9 c #5a8cff",
+"af c #636bb5",
+".h c #636bbd",
+"ab c #6384ef",
+"#v c #638cff",
+".w c #6394ff",
+".s c #639cff",
+"#M c #6b73b5",
+".C c #6b73bd",
+"#u c #6b9cff",
+".c c #737bb5",
+".S c #7384ce",
+".N c #738ce7",
+".a c #7394de",
+".8 c #7394ef",
+"#8 c #739cf7",
+"#B c #739cff",
+".A c #73a5ff",
+"#0 c #7b84b5",
+".T c #7b8cbd",
+".9 c #7b94c6",
+"#. c #7b94d6",
+".7 c #7ba5ff",
+".X c #7badff",
+".I c #7bb5ff",
+"#5 c #848ca5",
+".y c #848cad",
+".M c #8494b5",
+"## c #849cd6",
+"#c c #84adff",
+".G c #84b5ff",
+".Z c #84bdff",
+"#o c #8c8cad",
+"#a c #8ca5ce",
+".Y c #8cb5ff",
+".H c #8cbdff",
+"#1 c #9494a5",
+".U c #9494ad",
+"#7 c #949cad",
+"#b c #94ade7",
+".z c #94c6ff",
+".v c #94ceff",
+".j c #9c9cad",
+".u c #9ca5ad",
+"#r c #9cc6ff",
+".m c #9cceff",
+".d c #a5a5a5",
+"#6 c #a5a5ad",
+".V c #a5a5b5",
+".K c #a5adb5",
+".2 c #a5ceff",
+".r c #a5d6ff",
+".L c #adadad",
+".i c #adadb5",
+".p c #adadbd",
+".q c #addeff",
+"#e c #ade7ff",
+"#X c #b5b5b5",
+".D c #b5b5bd",
+".E c #b5b5c6",
+".F c #b5bdc6",
+".f c #b5deff",
+"#q c #b5efff",
+".# c #bdbdbd",
+"ad c #bdbdc6",
+".6 c #bddeff",
+"#i c #bde7ff",
+"#h c #bdefff",
+"#g c #c6f7ff",
+"#l c #cee7ff",
+"#j c #cef7ff",
+"#f c #ceffff",
+".k c #d6efff",
+"#k c #d6f7ff",
+".l c #d6ffff",
+".e c #deefff",
+".5 c #e7ffff",
+".4 c #efffff",
+".3 c #f7ffff",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.a.b.c.#QtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.d.e.f.g.h.iQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.j.k.l.m.n.o.pQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.d.f.q.r.m.s.t.cQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.u.q.v.m.r.m.w.x.y.#QtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.u.z.z.z.z.m.m.A.B.C.DQtQtQtQt",
+"QtQt.#.E.F.#.#QtQtQtQtQtQtQtQtQtQt.j.G.H.z.H.z.m.m.I.n.J.KQtQtQt",
+".L.M.N.O.P.Q.R.S.T.U.E.#.#QtQtQt.V.W.X.H.Y.H.H.z.z.z.Z.g.0.VQtQt",
+".1.2.3.4.5.k.6.2.Y.7.8.a.9#.###a#b.Y.G.G.G.G.Y.G.Y.H.z#c.n#d.u.#",
+".b#e#f#g#h#i.f#h#g#g#j#k#k#k.e.4.4#l#c.X.G.G.G.G.G.G.G.H.H#m#n#o",
+"#p.m#q.r.m.m.m.z#r.m.z.m.r.q.q.q.m.H.G.G.X#c.G.G.G.X.X.X.X.7#s.J",
+"#t.v.q.m.z.H.H.H.H.H.Z.Y.G.G.G.G.G.G.G.X#c.I#c.X.X.X.A.A#u#u.n#d",
+"#t.H.r.z.Y.G#c.X.X.X.7.X.X.X.X.X.X.X.X.X.X.X.X.X.7.A#u#v#w#x#y#z",
+"#A.I.m.H.X.X.X.A.A#B.A#B#u#u#u#u#B.X#c.X.X.X.X.A.A#u.w#C.g#D#E#F",
+"#G.s.G.A.w#v#H#w#C.n#x#s#I#y#y#y#J#H.X.7.X.X.7.A#u.w#w#J#y#K#L.U",
+"#M.x.n#N#D#O#P#K#K#Q#Q#R#S#T#U#U#V#W.A.X.A.A#B#u.w.n#D#P#E#L.VQt",
+"#X.h#V#Q#Y#R#S#U#Z#0#1.p.#.#.#.#.V#2.s.7.A#u#u.w#3#D#P#E#4#5QtQt",
+"QtQt#6#1#7.D.#.#QtQtQtQtQtQtQtQtQt#6#8#B#u.w#9#s#ya.#E#F.V.#QtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.8#9#H#w#s#Wa#aa#2#XQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#ab#w#C#N#W#K#Eac.#QtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtad.Pae#J#Wa##Vaf#XQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#ag#W#P#Eah#6QtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#ai#K#Eaj.jQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#akalak.iQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"};
diff --git a/examples/activeqt/webbrowser/icons/image3.xpm b/examples/activeqt/webbrowser/icons/image3.xpm
new file mode 100644
index 0000000..d7ed631
--- /dev/null
+++ b/examples/activeqt/webbrowser/icons/image3.xpm
@@ -0,0 +1,30 @@
+/* XPM */
+static char *image3[]={
+"25 25 2 1",
+"# c #000000",
+". c #ffffff",
+".........................",
+".........................",
+".........................",
+".........######..........",
+".......##########........",
+"......####....####.......",
+".....###........###......",
+"....#####........###.....",
+"....##.###........##.....",
+"...###..###.......###....",
+"...##....###.......##....",
+"...##.....###......##....",
+"...##......###.....##....",
+"...##.......###....##....",
+"...###.......###..###....",
+"....##........###.##.....",
+"....###........#####.....",
+".....###........###......",
+"......####....####.......",
+".......##########........",
+".........######..........",
+".........................",
+".........................",
+".........................",
+"........................."};
diff --git a/examples/activeqt/webbrowser/icons/image4.xpm b/examples/activeqt/webbrowser/icons/image4.xpm
new file mode 100644
index 0000000..7dde165
--- /dev/null
+++ b/examples/activeqt/webbrowser/icons/image4.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *image4[]={
+"32 32 3 1",
+". c None",
+"# c #000080",
+"a c #808080",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"...............#########a.......",
+"....#.........###########a......",
+"....##.......###.......###a.....",
+"....###....####.........###a....",
+"....####..####...........###....",
+"....########..............##....",
+"....#######...............##....",
+"....#######...............##....",
+"....########..............##....",
+"....#########.............##....",
+"....##########...........##a....",
+"....###########.........##a.....",
+".......................a##......",
+"......................a##.......",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................"};
diff --git a/examples/activeqt/webbrowser/icons/image5.xpm b/examples/activeqt/webbrowser/icons/image5.xpm
new file mode 100644
index 0000000..ec72a8a
--- /dev/null
+++ b/examples/activeqt/webbrowser/icons/image5.xpm
@@ -0,0 +1,246 @@
+/* XPM */
+static char *image5[]={
+"32 32 211 2",
+"Qt c None",
+"aJ c #000000",
+"#W c #080800",
+"#N c #100800",
+"#V c #101000",
+"#E c #101008",
+"#M c #181000",
+"#L c #181800",
+"#D c #181808",
+"#F c #181810",
+"as c #211800",
+"#K c #211808",
+"#J c #212110",
+"#G c #212118",
+"#q c #212121",
+"an c #292100",
+"#I c #292110",
+"aN c #292910",
+"#H c #292918",
+"#y c #292921",
+"aF c #312900",
+"#C c #312918",
+"#i c #312929",
+".0 c #313131",
+"#7 c #393100",
+"#U c #393108",
+"aG c #393931",
+".M c #393939",
+"#u c #423939",
+"#c c #424a42",
+"aE c #4a4200",
+"aY c #4a4210",
+".V c #4a4239",
+"#B c #4a4a39",
+".m c #4a4a42",
+"aP c #4a5218",
+".G c #4a5252",
+".z c #4a5a52",
+"aO c #524200",
+"am c #524a00",
+"#T c #524a08",
+"#p c #524a4a",
+".s c #525252",
+"#a c #525a52",
+".7 c #52635a",
+"#b c #526363",
+"az c #5a4a00",
+"#6 c #5a5208",
+"aw c #5a5210",
+".Z c #5a524a",
+".L c #5a5a52",
+".y c #5a5a5a",
+".F c #5a635a",
+"#S c #635208",
+"ax c #635a10",
+".U c #635a52",
+".r c #635a5a",
+"aZ c #636321",
+"## c #63635a",
+".A c #636363",
+"#h c #636b6b",
+"aL c #637329",
+"af c #6b5a00",
+".6 c #6b635a",
+"#o c #6b6363",
+".E c #6b6b63",
+"a4 c #6b7321",
+"aS c #6b7329",
+"aR c #6b7331",
+"aX c #736300",
+"al c #736308",
+"#R c #736b10",
+".T c #736b63",
+"a5 c #737329",
+".i c #73736b",
+".K c #737373",
+"a7 c #737b29",
+"#g c #737b73",
+"a9 c #7b7318",
+"#A c #7b7373",
+"a8 c #7b7b21",
+"aV c #7b7b29",
+"aQ c #7b7b5a",
+".J c #7b7b73",
+".1 c #7b7b7b",
+"b# c #7b8431",
+"a3 c #7b844a",
+".8 c #7b847b",
+"ay c #847308",
+"#5 c #847310",
+"aT c #847b21",
+"b. c #847b29",
+".S c #847b73",
+".d c #847b7b",
+"aW c #848421",
+"a1 c #848429",
+"a0 c #848431",
+"bq c #84844a",
+".H c #848484",
+"ae c #8c7b08",
+"ak c #8c7b10",
+"#j c #8c8484",
+"ba c #8c8c63",
+"a2 c #8c8c7b",
+".x c #8c8c84",
+".2 c #8c948c",
+".9 c #8cada5",
+"aC c #947b08",
+".Y c #947b73",
+"aK c #948c10",
+"#Q c #948c18",
+"a6 c #948c29",
+"#m c #948c84",
+"bp c #949442",
+"aH c #949484",
+".D c #94948c",
+".n c #949494",
+"bn c #949c4a",
+"bl c #949c5a",
+"bj c #949c63",
+".u c #949c94",
+".v c #94a59c",
+"aI c #9c8c10",
+"#4 c #9c8c18",
+"#O c #9c8c29",
+"aM c #9c9418",
+"#r c #9c948c",
+"bo c #9c9c4a",
+"bm c #9c9c52",
+"bk c #9c9c5a",
+"bh c #9c9c6b",
+".k c #9c9c94",
+".a c #9c9c9c",
+"bi c #9ca56b",
+"bf c #9ca573",
+".h c #9ca59c",
+"#f c #9ca5a5",
+".B c #9cbdb5",
+"#P c #a59400",
+"aB c #a59418",
+"#k c #a5948c",
+"ar c #a59c29",
+".N c #a59c8c",
+".P c #a59c94",
+".W c #a59c9c",
+"bg c #a5a573",
+"bd c #a5a584",
+".q c #a5a59c",
+".c c #a5a5a5",
+"be c #a5ad7b",
+".o c #a5ada5",
+".C c #a5adad",
+".I c #a5b5ad",
+"#d c #a5bdb5",
+".w c #a5c6bd",
+"ad c #ad9c10",
+"aj c #ad9c18",
+"#w c #ad9c94",
+".f c #ada59c",
+"bc c #adad7b",
+"bb c #adad84",
+".# c #adada5",
+".t c #adadad",
+".4 c #adb5ad",
+"ai c #b5a518",
+"aq c #b5a529",
+"aD c #b5a542",
+"ao c #b5a54a",
+".O c #b5a594",
+"#v c #b5a59c",
+"at c #b5ad52",
+"#z c #b5ad9c",
+".5 c #b5ada5",
+".j c #b5b5ad",
+".e c #b5b5b5",
+".3 c #b5bdb5",
+".Q c #b5bdbd",
+"#e c #b5cec6",
+"#8 c #bda539",
+"#x c #bda59c",
+"#3 c #bdad29",
+"#X c #bdad31",
+"ag c #bdad42",
+"#n c #bdb5ad",
+".b c #bdbdbd",
+".X c #bdcec6",
+"aU c #c6b510",
+"#. c #c6c6bd",
+".p c #c6cece",
+".g c #c6ded6",
+"ac c #cebd31",
+"#l c #ced6ce",
+"#s c #ced6d6",
+"#t c #cedede",
+"#9 c #d6c610",
+"#2 c #d6c631",
+"ap c #dec608",
+"ah c #dece10",
+"ab c #dece31",
+".l c #deefe7",
+".R c #deefef",
+"au c #e7ce08",
+"a. c #e7d621",
+"a# c #e7d631",
+"aa c #e7d639",
+"#1 c #e7de39",
+"#Y c #efde10",
+"av c #efde21",
+"aA c #efde29",
+"#Z c #f7e729",
+"#0 c #f7e739",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQt.#.aQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQt.b.c.d.eQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQt.f.g.h.i.bQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQt.j.k.l.e.m.nQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQt.b.a.o.p.q.r.s.tQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQt.u.v.w.k.x.y.z.A.bQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQt.t.k.B.C.k.D.E.F.G.HQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQt.b.#.#.o.I.b.c.J.K.L.M.tQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQt.a.N.O.P.Q.R.o.S.T.U.V.s.bQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQt.t.N.P.W.k.X.R.P.Y.i.A.Z.0.1QtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt.b.x.2.w.3.4.I.j.#.5.6.L.F.7.0.cQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt.n.8.9.p#..o.4.x.x.x##.s#a#b.s#c.bQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQt.t.D.##d#e.h#f.o.P.2.2#g###h.A.z#i.KQtQtQtQtQtQtQt",
+"QtQtQtQtQtQt.b#j.P.f.P#k.q.4.X#l#m#n.n#o.J.6#p#i#q.cQtQtQtQtQtQt",
+"QtQtQtQtQtQt.W#m#k.O#m#r.5.k#s#t#m.q#r.U.E.T#p#u#i.M.eQtQtQtQtQt",
+"QtQtQtQtQt.b.x#r.o.t#v.f.o.4.l#l#w#x.f.i#o.E###a.m#y.nQtQtQtQtQt",
+"QtQtQtQtQt.b.e.c#d.o#z.u.q#f.I.q.#.#.2#A.U.m#B#h.h.j.bQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt.b#C#D#E#F#G#G#G#H#I#J#K#L#M#N.iQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt.b#O#P#Q#R#S#T#U#L#M#V#W#N#V#V.iQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt.b#X#Y#Z#0#0#1#2#3#4#5#6#7#M#V#AQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt.b#8#9a.a#aaaaabac#3adaeaf#7#M.JQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt.bagaha.a##1aaaa#2aiajakalaman#AQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtaoapa.a#aaaqaraq#3aj#5afamas.JQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtatauava#aw#V#W#Max#4ayafazan.JQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtatahaAaB#W#N#M#V#V#RaCalazas.JQtQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQt.baDap#Z#Q#N#M#V#M#N#6akafaEaFaG.E#h.JQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtaHaIahaAaB#W#W#N#WaJ#6aKalamaF#WaJaJ#yQtQtQtQtQt",
+"QtQtQtQtQtQtQt.qaLaIahavaM#WaJ#W#DaN#RaealaOan#NaNaPaQQtQtQtQtQt",
+"QtQtQtQtQtQt.jaRaSaTaUavaB#WaNaPaLaVaWaeaX#6aYaZa0a1a2QtQtQtQtQt",
+"QtQtQtQtQt.ba3a4a5a5aVa6a1aZa7aSaSa5a8a9a4a5b.b#a5a5.kQtQtQtQtQt",
+"QtQtQtQtQtbaa7a7aVa0b.b#a7b#a0a7a7a7aSaSa7b.aVa0aVaR.#QtQtQtQtQt",
+"QtQtQtQtQtbbbcbdbebebfbgbhbhbibjbjbkbkblbmbmbnbobpbq.bQtQtQtQtQt"};
diff --git a/examples/activeqt/webbrowser/icons/image6.xpm b/examples/activeqt/webbrowser/icons/image6.xpm
new file mode 100644
index 0000000..8507aef
--- /dev/null
+++ b/examples/activeqt/webbrowser/icons/image6.xpm
@@ -0,0 +1,190 @@
+/* XPM */
+static char *image6[]={
+"22 22 165 2",
+"Qt c None",
+".h c #000000",
+".o c #010101",
+"aF c #030303",
+"#n c #060606",
+".H c #080808",
+".r c #0c0c0c",
+".q c #121212",
+"#V c #124e7f",
+"#m c #131313",
+".G c #161615",
+"aI c #172cac",
+".6 c #181818",
+"aH c #1841b2",
+".p c #191919",
+"#8 c #1928ba",
+"#W c #1929ba",
+"aj c #192aba",
+"av c #1a31c2",
+"aE c #1b1b1b",
+"aD c #1b2bc8",
+"at c #1c79d2",
+"ah c #1c7dd4",
+"aA c #1d1d1d",
+"aC c #1d7ad7",
+"#6 c #1d7eda",
+".5 c #1e1e1e",
+"#7 c #1e8ae0",
+"ai c #1e8de0",
+"au c #1e90e0",
+".g c #242424",
+"#5 c #313b6c",
+"aB c #343d8d",
+"#3 c #393939",
+".f c #3d3d3d",
+"ak c #433967",
+"#C c #434442",
+"aw c #443c6e",
+"#l c #454643",
+"as c #454fa3",
+".4 c #474845",
+"#R c #474846",
+".e c #484848",
+"aG c #4856a0",
+".d c #4a4a4a",
+"#9 c #4c416a",
+".c c #4c4c4c",
+"ag c #4c5cae",
+"#X c #4d4669",
+"#z c #4dc2b2",
+"#P c #4e445a",
+"#G c #53504e",
+".l c #545454",
+".b c #555555",
+"#Q c #595274",
+"#i c #62b2a2",
+".a c #676767",
+"#j c #69b6a3",
+".F c #6f6f6a",
+".K c #6f8b89",
+"ax c #747474",
+"#a c #76a1a0",
+".# c #797979",
+"#A c #7bd7e8",
+"ay c #7d7d7d",
+"#U c #7e7d73",
+".I c #808080",
+".O c #81a3b8",
+"az c #828282",
+"#y c #82d1c0",
+"#S c #848484",
+"#O c #857e7c",
+"#F c #86add2",
+"#k c #86cdda",
+"#N c #89b1bd",
+"#h c #8acec3",
+"#o c #8c8c8c",
+"#L c #8cbbca",
+"al c #8d8d8d",
+".s c #8f8f8f",
+"#H c #909090",
+"#K c #90bac9",
+"#M c #91c4cf",
+"#t c #929292",
+".X c #94c2cf",
+".N c #94c2d0",
+".W c #959595",
+"#B c #96b9cb",
+".3 c #97bede",
+".L c #98c2ce",
+".P c #9b9b9b",
+"a. c #9c9c9c",
+"am c #9d9d9d",
+"#s c #9dbdc4",
+"#b c #9e9e9e",
+"#Y c #a0a0a0",
+"an c #a6a6a6",
+"#v c #a6d1d6",
+".Z c #a7a1a1",
+"#I c #a7a7a7",
+"#D c #a7edde",
+".M c #a8d8e5",
+"#u c #aeaeae",
+"ac c #b1b1b1",
+"a# c #b2b2b2",
+".2 c #b5cbd6",
+".V c #b6b6b6",
+"ar c #b7b7b7",
+"#Z c #b8b8b8",
+"#2 c #bababa",
+".Q c #babbb9",
+"aq c #bbbbbb",
+"#c c #bcbcbc",
+".8 c #bfbfbf",
+"ap c #c0c0c0",
+".1 c #c1d9d2",
+"aa c #c8c8c8",
+"ab c #cacaca",
+"ao c #cbcbcb",
+".Y c #ccf8f1",
+"#J c #cdcdcd",
+".R c #cecece",
+"#p c #d1f9f4",
+"#4 c #d5d5d5",
+"#w c #d5ece4",
+".9 c #d5f6f5",
+"#0 c #d6d6d6",
+".U c #d7d7d7",
+"af c #d8d8d8",
+".x c #dadada",
+".y c #dbdbdb",
+".w c #dcdcdc",
+"#e c #dcf7f4",
+"#1 c #dddddd",
+"ae c #dedede",
+".E c #dfdfdf",
+".z c #e0e0e0",
+"#g c #e0ebe4",
+"#q c #e1edea",
+"#d c #e2e2e2",
+"#x c #e2ebe2",
+".0 c #e2eee5",
+".v c #e3e3e3",
+"## c #e3e7d5",
+"#r c #e4ebd9",
+"#E c #e4f2ec",
+".u c #e5e5e5",
+".S c #e7e7e7",
+".k c #e9e9e9",
+".A c #ebebeb",
+".D c #ededed",
+".t c #f0f0f0",
+"#T c #f4f4f4",
+".n c #f6f6f6",
+".C c #f7f7f7",
+"#f c #f8f5f2",
+".m c #f8f8f8",
+".7 c #f9f9f9",
+"ad c #fafafa",
+"#. c #fbf0eb",
+".J c #fbfbfb",
+".T c #fcfcfc",
+".B c #fdfdfd",
+".j c #fefefe",
+".i c #ffffff",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt",
+"QtQtQtQtQt.#.a.b.c.d.d.e.f.g.hQtQtQtQtQtQtQt",
+"QtQtQtQt.#.i.i.i.i.i.i.i.i.i.h.hQtQtQtQtQtQt",
+"QtQtQtQt.a.j.j.j.j.j.j.i.i.i.h.k.hQtQtQtQtQt",
+"QtQtQtQt.l.m.n.o.p.q.r.s.j.i.h.t.u.hQtQtQtQt",
+"QtQtQtQt.e.v.w.x.y.z.A.n.B.B.h.C.D.E.hQtQtQt",
+"QtQtQt.h.h.h.h.h.F.G.H.I.n.J.h.h.h.h.h.hQtQt",
+"QtQt.h.K.L.M.N.O.h.P.Q.R.S.n.T.j.U.V.W.hQtQt",
+"Qt.h.X.Y.Z.0.1.2.3.h.4.5.6.q.r.s.7.v.8.hQtQt",
+"Qt.h.9#..###.F.F.F#a.h#b#c#d.m.j.7.v#c.hQtQt",
+"Qt.h#e#f.a#g#h#i#j#k.h#l#m.r#n#o.7.v#c.hQtQt",
+"Qt.h#p#q.a#r.F.F.F#s.h#t#u.x.n.j.7.v#c.hQtQt",
+"Qt.h#v#w.##x#y#z#A#B.h#C#m#m.q#o.7.v#c.hQtQt",
+"QtQt.h#D.Z#E.F.F#F.h#G#H#I#J.A.7.m.v#c.hQtQt",
+"QtQtQt.h#K#L#M#N.h#O#P#Q#R#m.q#S#T#d#c.hQtQt",
+"QtQtQtQt.h.h.h.h.Z#U#V#W#X#Y#Z#0.S#1#2.hQtQt",
+"QtQtQtQt#3.t.v.x#4#5#6#7#8#9a.a#aaabac.hQtQt",
+"QtQtQtQt.6ad.kae.yafagahaiajakalamana..oQtQt",
+"QtQtQtQt.haeaoapaqaqarasatauavawaxayaz.oQtQt",
+"QtQtQtQtQt.h.h.h.h.haA.oaBaCaiaD.HaEaFQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtaGaHaIQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"};
diff --git a/examples/activeqt/webbrowser/mainwindow.qrc b/examples/activeqt/webbrowser/mainwindow.qrc
new file mode 100644
index 0000000..b95d874
--- /dev/null
+++ b/examples/activeqt/webbrowser/mainwindow.qrc
@@ -0,0 +1,11 @@
+<RCC>
+    <qresource prefix="/" >
+        <file>icons/image0.xpm</file>
+        <file>icons/image1.xpm</file>
+        <file>icons/image2.xpm</file>
+        <file>icons/image3.xpm</file>
+        <file>icons/image4.xpm</file>
+        <file>icons/image5.xpm</file>
+        <file>icons/image6.xpm</file>
+    </qresource>
+</RCC>
diff --git a/examples/activeqt/webbrowser/mainwindow.ui b/examples/activeqt/webbrowser/mainwindow.ui
new file mode 100644
index 0000000..5f80470
--- /dev/null
+++ b/examples/activeqt/webbrowser/mainwindow.ui
@@ -0,0 +1,215 @@
+<ui version="4.0" >
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>812</width>
+    <height>605</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Qt WebBrowser</string>
+  </property>
+  <widget class="QWidget" name="centralWidget" >
+   <layout class="QHBoxLayout" >
+    <property name="margin" >
+     <number>0</number>
+    </property>
+    <property name="spacing" >
+     <number>6</number>
+    </property>
+    <item>
+     <widget class="QFrame" name="Frame3" >
+      <property name="frameShape" >
+       <enum>QFrame::StyledPanel</enum>
+      </property>
+      <property name="frameShadow" >
+       <enum>QFrame::Sunken</enum>
+      </property>
+      <layout class="QVBoxLayout" >
+       <property name="margin" >
+        <number>1</number>
+       </property>
+       <property name="spacing" >
+        <number>0</number>
+       </property>
+       <item>
+        <widget class="QAxWidget" name="WebBrowser" >
+         <property name="focusPolicy" >
+          <enum>Qt::StrongFocus</enum>
+         </property>
+         <property name="control" >
+          <string notr="true">{8856F961-340A-11D0-A96B-00C04FD705A2}</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QToolBar" name="tbNavigate" >
+   <property name="windowTitle" >
+    <string>Navigation</string>
+   </property>
+   <property name="orientation" >
+    <enum>Qt::Horizontal</enum>
+   </property>
+   <attribute name="toolBarArea" >
+    <number>4</number>
+   </attribute>
+   <addaction name="actionBack" />
+   <addaction name="actionForward" />
+   <addaction name="actionStop" />
+   <addaction name="actionRefresh" />
+   <addaction name="actionHome" />
+   <addaction name="separator" />
+   <addaction name="actionSearch" />
+  </widget>
+  <widget class="QToolBar" name="tbAddress" >
+   <property name="windowTitle" >
+    <string>Address</string>
+   </property>
+   <property name="orientation" >
+    <enum>Qt::Horizontal</enum>
+   </property>
+   <attribute name="toolBarArea" >
+    <number>4</number>
+   </attribute>
+   <addaction name="actionGo" />
+  </widget>
+  <widget class="QMenuBar" name="menubar" >
+   <property name="geometry" >
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>812</width>
+     <height>26</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="PopupMenu" >
+    <property name="title" >
+     <string>&File</string>
+    </property>
+    <widget class="QMenu" name="FileNewGroup_2" >
+     <property name="title" >
+      <string>New</string>
+     </property>
+     <addaction name="actionNewWindow" />
+    </widget>
+    <addaction name="FileNewGroup" />
+    <addaction name="FileNewGroup_2" />
+    <addaction name="separator" />
+    <addaction name="actionFileClose" />
+   </widget>
+   <widget class="QMenu" name="unnamed" >
+    <property name="title" >
+     <string>&Help</string>
+    </property>
+    <addaction name="actionAbout" />
+    <addaction name="actionAboutQt" />
+   </widget>
+   <addaction name="PopupMenu" />
+   <addaction name="unnamed" />
+  </widget>
+  <action name="actionGo" >
+   <property name="icon" >
+    <iconset resource="mainwindow.qrc" >:/icons/image0.xpm</iconset>
+   </property>
+   <property name="iconText" >
+    <string>Go</string>
+   </property>
+  </action>
+  <action name="actionBack" >
+   <property name="icon" >
+    <iconset resource="mainwindow.qrc" >:/icons/image1.xpm</iconset>
+   </property>
+   <property name="iconText" >
+    <string>Back</string>
+   </property>
+   <property name="shortcut" >
+    <string>Backspace</string>
+   </property>
+  </action>
+  <action name="actionForward" >
+   <property name="icon" >
+    <iconset resource="mainwindow.qrc" >:/icons/image2.xpm</iconset>
+   </property>
+   <property name="iconText" >
+    <string>Forward</string>
+   </property>
+  </action>
+  <action name="actionStop" >
+   <property name="icon" >
+    <iconset resource="mainwindow.qrc" >:/icons/image3.xpm</iconset>
+   </property>
+   <property name="iconText" >
+    <string>Stop</string>
+   </property>
+  </action>
+  <action name="actionRefresh" >
+   <property name="icon" >
+    <iconset resource="mainwindow.qrc" >:/icons/image4.xpm</iconset>
+   </property>
+   <property name="iconText" >
+    <string>Refresh</string>
+   </property>
+  </action>
+  <action name="actionHome" >
+   <property name="icon" >
+    <iconset resource="mainwindow.qrc" >:/icons/image5.xpm</iconset>
+   </property>
+   <property name="iconText" >
+    <string>Home</string>
+   </property>
+  </action>
+  <action name="actionFileClose" >
+   <property name="text" >
+    <string>C&lose</string>
+   </property>
+   <property name="iconText" >
+    <string>Close</string>
+   </property>
+  </action>
+  <action name="actionSearch" >
+   <property name="icon" >
+    <iconset resource="mainwindow.qrc" >:/icons/image6.xpm</iconset>
+   </property>
+   <property name="iconText" >
+    <string>Search</string>
+   </property>
+  </action>
+  <action name="actionAbout" >
+   <property name="iconText" >
+    <string>About</string>
+   </property>
+  </action>
+  <action name="actionAboutQt" >
+   <property name="iconText" >
+    <string>About Qt</string>
+   </property>
+  </action>
+  <actiongroup name="FileNewGroup" >
+   <action name="actionNewWindow" >
+    <property name="iconText" >
+     <string>Window</string>
+    </property>
+    <property name="shortcut" >
+     <string>Ctrl+N</string>
+    </property>
+   </action>
+  </actiongroup>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <customwidgets>
+  <customwidget>
+   <class>QAxWidget</class>
+   <extends>QWidget</extends>
+   <header>qaxwidget.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <connections/>
+</ui>
diff --git a/examples/activeqt/webbrowser/mainwindow_rc.py b/examples/activeqt/webbrowser/mainwindow_rc.py
new file mode 100644
index 0000000..63109c7
--- /dev/null
+++ b/examples/activeqt/webbrowser/mainwindow_rc.py
@@ -0,0 +1,863 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Thu May 2 15:37:04 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x00\xa7\
+\x00\
+\x00\x03\x23\x78\x9c\xd3\xd7\x52\x88\x08\xf0\x55\xd0\xd2\xe7\x2a\
+\x2e\x49\x2c\xc9\x4c\x56\x48\xce\x48\x2c\x52\xd0\xca\xcc\x4d\x4c\
+\x4f\x35\x8e\x8e\xb5\xad\xe6\x52\x32\x32\x55\x00\x21\x05\x43\x25\
+\x1d\x2e\x25\x65\x85\x64\x05\x65\x03\x30\x00\x71\xf5\x40\xdc\x34\
+\x30\x00\x73\x71\x01\x2a\x49\x2a\x83\x01\x56\x49\x65\x38\xc0\x94\
+\x84\x89\x22\xc9\xc2\x25\x91\x34\xc0\x99\x30\x49\x14\xe3\x60\x4c\
+\x84\x24\xaa\x5e\x64\x49\xb0\x04\x42\x16\xca\x82\x4b\xa2\xda\x8b\
+\x45\x12\x21\x8b\x4d\x12\x2e\x8b\x55\x52\x0f\xee\x59\x74\x07\x21\
+\x64\x51\x1d\xa4\x87\xea\x49\x0c\x7f\x22\xcb\xa2\x49\xe2\x0d\x3e\
+\xfc\x01\x8f\x3f\xca\xe0\xd2\x70\x2e\xb5\xd2\x10\x69\x92\xb5\xd6\
+\x5c\x00\xe0\x4d\x89\x7e\
+\x00\x00\x05\x19\
+\x00\
+\x00\x11\x8f\x78\x9c\xe5\x96\x5b\x4f\x23\x47\x10\x85\xdf\xf9\x15\
+\xd6\xd6\xdb\x2a\xaa\xc5\xe3\xb9\x2a\xca\x03\x77\x03\xcb\xc5\x5c\
+\x8c\x21\xca\x43\xcf\x8c\x6f\x80\xcd\xc5\x06\x83\xa3\xfc\xf7\x54\
+\xf7\xa9\xee\x45\xbb\xfb\xb0\x6c\xa4\x48\x51\x54\x80\xf8\x5c\x5d\
+\xa7\x4e\xd7\xf4\x8c\xe7\xd3\xc7\x46\xef\xf8\xa0\xf1\xf1\xd3\xca\
+\x6c\x6e\xe6\xe3\xaa\x51\x8d\xcc\x63\xe3\xe3\x78\x62\x86\xfd\xe8\
+\xf7\x3f\x7e\xfb\x73\xe5\x43\x2b\x6a\xc8\x4f\x33\x8e\x1a\xd1\x87\
+\x5f\x56\x3e\x74\xe6\x8d\xaa\x71\x78\x37\xed\x5b\xa0\x4b\x01\x5a\
+\x5d\x6d\xe6\xfd\xcc\xb2\x31\x81\x07\x2e\xbf\xe5\x79\x00\xee\x80\
+\xa3\xa6\xe6\xf7\x3d\x23\x6f\x48\xb9\x50\x66\xc7\xb9\x67\x3a\x06\
+\xb7\x74\x3d\xc5\x96\x9b\x52\x5f\xa7\x8e\x4f\x02\xc3\xdf\x67\xe5\
+\x42\xf3\x5d\xcf\xf0\x4b\x53\x70\xab\x18\x80\x2f\x02\x43\xff\x08\
+\x1c\x47\xea\x67\xe4\x58\xfa\x57\xd0\x7f\x05\x87\xfc\xb5\xe5\xa8\
+\x29\x79\xf4\x3b\x0d\x8c\xf5\x4b\xe5\x02\xfe\x78\x15\x1c\x47\x60\
+\x33\xf6\x0c\x7f\x3c\x57\x36\x3a\xaf\x4d\xcf\xe8\xc7\x2f\xe0\xc4\
+\xf7\xbf\x75\x5c\x78\x7d\xaa\xc1\x52\x8f\xfd\xed\x82\xfd\x7a\xda\
+\x53\x56\x3d\x3a\xb3\xdc\x92\xfe\x65\xed\xf8\x10\x1c\xf2\x33\x70\
+\xda\x52\xde\x76\x2c\xfa\xba\xdf\x1d\x70\x12\x61\xde\x66\xa8\xac\
+\xfd\x79\x1d\x2c\xf5\x38\x2f\xfd\xc0\xd8\x8f\xae\x4f\x4b\xd5\x3f\
+\xb7\x1c\x47\xb1\x29\x13\xc7\x11\x38\x89\xc0\xbc\xa7\x6c\x74\xbe\
+\x6b\xe0\xb4\xa5\xf3\x2d\x95\x4b\xdd\xff\x7d\x60\xe8\xbf\x78\xd6\
+\xfe\x53\x70\xe6\xfd\xdc\x39\x36\x69\x4b\xf5\xe7\xca\xaa\xc7\x1d\
+\x70\xa6\xfd\xa8\xe5\x59\xfd\x6f\x28\xfb\xfd\x5c\x59\x4e\xc4\x2f\
+\xe6\xcb\x4d\x70\x5a\x2a\x5f\x78\xc6\x3c\xf9\x24\x30\xf6\x73\x0c\
+\xce\xfc\x7e\x16\xe0\x3c\x56\xfd\x89\x72\xa5\xe7\xa1\x72\x2c\xfe\
+\xa1\x6f\x6e\x94\x7d\xbf\x23\xb0\xf8\x83\x5e\x1b\x1c\xf4\x0a\x65\
+\xaf\x37\xb0\x9c\xb6\xa4\x1e\xf3\x1f\x05\x86\x7e\x09\xce\x63\x9d\
+\xef\xb3\xb2\xd6\xf3\x02\x5c\xa8\x3e\xcf\x94\x35\x4f\x07\x8e\xcb\
+\xac\xa5\xfa\x1b\x81\x71\x1e\x9f\xc0\x7e\x3d\xbb\xfd\x65\xad\xcc\
+\xfb\x39\x05\xe7\xb1\xce\xeb\x50\xb9\xd2\xeb\x65\xc0\x45\xac\xe7\
+\x23\xf7\xac\x7e\x3d\x57\x3a\x8f\xf5\xc0\xe8\xb7\x06\x36\x89\xfa\
+\x75\xf7\x6f\x56\xe6\xb1\xf6\x3f\x53\xae\x74\xbe\x05\xb8\x88\xf5\
+\xfe\x60\xcf\xb8\x3f\x38\x03\x7b\x3d\xee\x29\xd7\xca\xbb\xe0\xd2\
+\xf7\x4b\x2c\xe7\x71\x5e\x19\xf4\x7b\x0d\x8c\x7e\x07\xe0\x42\xfd\
+\x10\x29\x57\xfa\xfc\xab\xc0\x41\x7f\x07\xec\xf5\xf9\x4a\x59\xf3\
+\xe4\xce\x7f\x5e\x79\x7d\x32\x60\x93\xe8\x7c\x2f\xc1\xa1\xbe\xad\
+\xec\xeb\xdd\xf9\x2e\xc4\x8f\xfa\x3d\x0f\x0c\xbd\x4c\xd9\xeb\x97\
+\x60\x53\xeb\xf5\x5a\x82\xab\x54\xf5\x9f\x95\xfb\xca\xee\x79\x5b\
+\x54\xbe\x9e\x9f\xc0\x26\x51\xbd\x47\x70\xa8\x9f\x28\xfb\x7a\xf7\
+\x7c\x94\xd5\x09\xfc\x51\x1a\x18\x7a\x5d\xcf\x7a\x7d\xf7\x95\x6b\
+\xe5\x08\x1c\xf4\x1e\xc1\xb5\xef\xe7\xbe\x7f\x4c\x6d\xc3\xf1\xd8\
+\xb3\xd6\xdf\x07\x46\xfe\x01\x5c\xab\x1e\xf5\xc1\xfd\x4c\xd9\x9d\
+\x8f\x32\x29\xbd\x9f\xcd\xc0\xa8\xdf\xf2\xac\xcf\x8f\x6d\xe5\x5a\
+\x79\x00\x0e\xfa\x0f\x60\x41\xf8\x75\xe7\xa5\xac\x4b\xf5\x63\x6a\
+\xcf\x5a\x9f\x82\x43\xfd\x18\x1c\xfc\x8d\x94\x55\x8f\xdc\xf3\x5c\
+\xa6\xef\xf3\xee\xfb\xa9\xea\x87\xf5\xd7\xe0\x90\x1f\x28\x7b\x3f\
+\xee\x79\x55\xa7\x41\x4f\xd9\xaf\xe7\x5b\x65\xbf\xde\xcd\xab\xee\
+\x87\xfd\xb8\xfb\xc5\x76\x53\x76\xef\x0b\x4e\x1e\xec\x9e\xd7\x83\
+\x90\xef\xcc\xff\x59\xfc\xff\x34\x98\xd8\x70\xc9\x15\xd3\x3f\xd0\
+\xa8\xb9\xcf\x03\x1e\xf2\x88\xc7\x3f\xad\x71\xcd\x37\x7c\xcb\x13\
+\x9e\xf2\x1d\xdf\xff\xb4\x8f\x01\x3f\xf0\xa3\xa8\xcc\x78\xce\xd5\
+\x4f\x69\x3c\x89\xc2\xb3\x28\x58\x95\x05\xbf\xf0\xeb\xdb\xc9\xfc\
+\xb0\xc6\x52\x63\x22\xb1\xc6\xeb\xbc\xc1\x9b\x5f\x6b\xc8\xe4\xb7\
+\x78\x5b\xfe\x7e\x77\xf2\x32\x8f\x1d\x6e\x8b\x42\x5b\x55\x76\x65\
+\x32\x7b\xbc\xff\x45\x83\x3f\xf3\x01\x1f\xf2\x11\x1f\x73\x87\x4f\
+\xf8\x94\xcf\xf8\x5c\x14\x83\x1e\x77\xf9\x82\x7b\x52\x7f\x29\xbf\
+\x6d\xf5\x73\x25\x57\x69\x95\xbb\x41\xa3\xc9\x11\xb7\x38\xe6\x44\
+\xa6\x9f\xca\xff\x97\x9c\x71\x2e\x27\xa2\x10\x19\x22\x43\xa5\x7c\
+\xb2\xa3\x71\xe9\x7e\x45\x89\x2a\x9e\x52\x2d\xbb\x24\xbc\xa3\x51\
+\x9f\x06\x34\xa4\x11\x8d\x79\x20\x7f\x87\x12\xd7\x74\x63\x43\xce\
+\x45\xcc\x31\xdd\x4a\x45\x2f\xe8\x20\xc4\x13\x4d\x68\x4a\x77\x78\
+\xaf\xe3\x09\xe1\xca\xd9\x58\x92\xfd\x6f\xe9\xae\xc2\x83\x8b\x89\
+\xac\xb7\x55\x3d\x51\x42\x7d\x4f\x23\xa3\x19\xef\xe1\xdd\x4e\xae\
+\xdb\x83\xab\x6b\x87\xb8\x7a\xe3\x7f\x27\x28\xec\x3a\x3f\x36\xd6\
+\x78\x8d\x9e\xe8\xc9\xee\x47\x35\xda\xd2\x73\x69\xab\xc2\x9a\x2c\
+\xf4\xfa\x36\x32\x57\xff\x4c\x0b\x7a\xa1\x57\x5a\xe2\x1d\x56\xae\
+\x95\xf5\xfb\xa5\xc3\xba\xfd\xb5\x7d\x5c\xac\x3b\x0f\xbd\xb7\x0e\
+\x78\x41\x1b\x3c\xa4\x4d\xda\xa2\x6d\xbc\x87\xcb\x09\xde\x91\xdc\
+\x42\xb4\xdb\x64\xb3\x53\xe9\x30\xa3\x5d\xe9\x62\x63\x8f\xda\xc1\
+\x59\xa6\x0a\x0b\xf9\xf4\x95\xf6\xe9\x33\x9f\xe3\x5d\x4c\x4e\xef\
+\x94\x0e\x45\xf5\x88\x8e\xe5\xf3\x7d\xea\x48\x9c\xd0\x29\x9d\xd1\
+\xb9\x44\x97\x2e\xa4\x83\x3a\xb4\x0a\xb2\x7a\x53\x56\x6e\x89\x42\
+\x17\xe7\x83\x7a\x3c\x92\x75\x1d\xba\x74\x75\xe7\x74\x45\xab\xd4\
+\xe4\x7b\x7b\xca\x5c\x74\x29\x12\xa7\x99\x4e\x71\x41\x2d\x55\x88\
+\x29\x79\x7b\xd6\x29\xa5\x26\x65\xbc\xf9\xfd\xd3\x2e\xd9\x1c\x0e\
+\xa8\x90\x3d\xbe\x1a\xb6\x73\x90\xf3\x4b\xef\xb8\xe7\x88\x73\xa9\
+\xb6\xb3\x9a\xd1\x85\x21\x63\x28\xa2\xde\x3b\xef\x5b\x32\xa5\x9d\
+\xb5\xcc\xec\x42\xa6\xb5\x65\xaa\xf7\xdf\xfb\xa6\xe6\x63\xd3\x97\
+\x2b\x21\x1e\xa8\x6b\x06\x5f\x3c\xbc\xcb\xc7\x50\x1c\xc8\x1c\xcd\
+\x88\xd2\xaf\xb3\x3f\xac\x31\x76\x7b\xb8\xe6\xeb\x6f\xb3\x3f\xac\
+\x71\x63\x6e\xcd\xcd\xf7\x9e\xea\xff\xb5\xef\xb9\x7f\x41\xe3\xaf\
+\x5f\x57\xfe\x06\xf5\x23\xb8\x71\
+\x00\x00\x0e\x9f\
+\x2f\
+\x2a\x20\x58\x50\x4d\x20\x2a\x2f\x0a\x73\x74\x61\x74\x69\x63\x20\
+\x63\x68\x61\x72\x20\x2a\x69\x6d\x61\x67\x65\x36\x5b\x5d\x3d\x7b\
+\x0a\x22\x32\x32\x20\x32\x32\x20\x31\x36\x35\x20\x32\x22\x2c\x0a\
+\x22\x51\x74\x20\x63\x20\x4e\x6f\x6e\x65\x22\x2c\x0a\x22\x2e\x68\
+\x20\x63\x20\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x22\x2e\x6f\
+\x20\x63\x20\x23\x30\x31\x30\x31\x30\x31\x22\x2c\x0a\x22\x61\x46\
+\x20\x63\x20\x23\x30\x33\x30\x33\x30\x33\x22\x2c\x0a\x22\x23\x6e\
+\x20\x63\x20\x23\x30\x36\x30\x36\x30\x36\x22\x2c\x0a\x22\x2e\x48\
+\x20\x63\x20\x23\x30\x38\x30\x38\x30\x38\x22\x2c\x0a\x22\x2e\x72\
+\x20\x63\x20\x23\x30\x63\x30\x63\x30\x63\x22\x2c\x0a\x22\x2e\x71\
+\x20\x63\x20\x23\x31\x32\x31\x32\x31\x32\x22\x2c\x0a\x22\x23\x56\
+\x20\x63\x20\x23\x31\x32\x34\x65\x37\x66\x22\x2c\x0a\x22\x23\x6d\
+\x20\x63\x20\x23\x31\x33\x31\x33\x31\x33\x22\x2c\x0a\x22\x2e\x47\
+\x20\x63\x20\x23\x31\x36\x31\x36\x31\x35\x22\x2c\x0a\x22\x61\x49\
+\x20\x63\x20\x23\x31\x37\x32\x63\x61\x63\x22\x2c\x0a\x22\x2e\x36\
+\x20\x63\x20\x23\x31\x38\x31\x38\x31\x38\x22\x2c\x0a\x22\x61\x48\
+\x20\x63\x20\x23\x31\x38\x34\x31\x62\x32\x22\x2c\x0a\x22\x2e\x70\
+\x20\x63\x20\x23\x31\x39\x31\x39\x31\x39\x22\x2c\x0a\x22\x23\x38\
+\x20\x63\x20\x23\x31\x39\x32\x38\x62\x61\x22\x2c\x0a\x22\x23\x57\
+\x20\x63\x20\x23\x31\x39\x32\x39\x62\x61\x22\x2c\x0a\x22\x61\x6a\
+\x20\x63\x20\x23\x31\x39\x32\x61\x62\x61\x22\x2c\x0a\x22\x61\x76\
+\x20\x63\x20\x23\x31\x61\x33\x31\x63\x32\x22\x2c\x0a\x22\x61\x45\
+\x20\x63\x20\x23\x31\x62\x31\x62\x31\x62\x22\x2c\x0a\x22\x61\x44\
+\x20\x63\x20\x23\x31\x62\x32\x62\x63\x38\x22\x2c\x0a\x22\x61\x74\
+\x20\x63\x20\x23\x31\x63\x37\x39\x64\x32\x22\x2c\x0a\x22\x61\x68\
+\x20\x63\x20\x23\x31\x63\x37\x64\x64\x34\x22\x2c\x0a\x22\x61\x41\
+\x20\x63\x20\x23\x31\x64\x31\x64\x31\x64\x22\x2c\x0a\x22\x61\x43\
+\x20\x63\x20\x23\x31\x64\x37\x61\x64\x37\x22\x2c\x0a\x22\x23\x36\
+\x20\x63\x20\x23\x31\x64\x37\x65\x64\x61\x22\x2c\x0a\x22\x2e\x35\
+\x20\x63\x20\x23\x31\x65\x31\x65\x31\x65\x22\x2c\x0a\x22\x23\x37\
+\x20\x63\x20\x23\x31\x65\x38\x61\x65\x30\x22\x2c\x0a\x22\x61\x69\
+\x20\x63\x20\x23\x31\x65\x38\x64\x65\x30\x22\x2c\x0a\x22\x61\x75\
+\x20\x63\x20\x23\x31\x65\x39\x30\x65\x30\x22\x2c\x0a\x22\x2e\x67\
+\x20\x63\x20\x23\x32\x34\x32\x34\x32\x34\x22\x2c\x0a\x22\x23\x35\
+\x20\x63\x20\x23\x33\x31\x33\x62\x36\x63\x22\x2c\x0a\x22\x61\x42\
+\x20\x63\x20\x23\x33\x34\x33\x64\x38\x64\x22\x2c\x0a\x22\x23\x33\
+\x20\x63\x20\x23\x33\x39\x33\x39\x33\x39\x22\x2c\x0a\x22\x2e\x66\
+\x20\x63\x20\x23\x33\x64\x33\x64\x33\x64\x22\x2c\x0a\x22\x61\x6b\
+\x20\x63\x20\x23\x34\x33\x33\x39\x36\x37\x22\x2c\x0a\x22\x23\x43\
+\x20\x63\x20\x23\x34\x33\x34\x34\x34\x32\x22\x2c\x0a\x22\x61\x77\
+\x20\x63\x20\x23\x34\x34\x33\x63\x36\x65\x22\x2c\x0a\x22\x23\x6c\
+\x20\x63\x20\x23\x34\x35\x34\x36\x34\x33\x22\x2c\x0a\x22\x61\x73\
+\x20\x63\x20\x23\x34\x35\x34\x66\x61\x33\x22\x2c\x0a\x22\x2e\x34\
+\x20\x63\x20\x23\x34\x37\x34\x38\x34\x35\x22\x2c\x0a\x22\x23\x52\
+\x20\x63\x20\x23\x34\x37\x34\x38\x34\x36\x22\x2c\x0a\x22\x2e\x65\
+\x20\x63\x20\x23\x34\x38\x34\x38\x34\x38\x22\x2c\x0a\x22\x61\x47\
+\x20\x63\x20\x23\x34\x38\x35\x36\x61\x30\x22\x2c\x0a\x22\x2e\x64\
+\x20\x63\x20\x23\x34\x61\x34\x61\x34\x61\x22\x2c\x0a\x22\x23\x39\
+\x20\x63\x20\x23\x34\x63\x34\x31\x36\x61\x22\x2c\x0a\x22\x2e\x63\
+\x20\x63\x20\x23\x34\x63\x34\x63\x34\x63\x22\x2c\x0a\x22\x61\x67\
+\x20\x63\x20\x23\x34\x63\x35\x63\x61\x65\x22\x2c\x0a\x22\x23\x58\
+\x20\x63\x20\x23\x34\x64\x34\x36\x36\x39\x22\x2c\x0a\x22\x23\x7a\
+\x20\x63\x20\x23\x34\x64\x63\x32\x62\x32\x22\x2c\x0a\x22\x23\x50\
+\x20\x63\x20\x23\x34\x65\x34\x34\x35\x61\x22\x2c\x0a\x22\x23\x47\
+\x20\x63\x20\x23\x35\x33\x35\x30\x34\x65\x22\x2c\x0a\x22\x2e\x6c\
+\x20\x63\x20\x23\x35\x34\x35\x34\x35\x34\x22\x2c\x0a\x22\x2e\x62\
+\x20\x63\x20\x23\x35\x35\x35\x35\x35\x35\x22\x2c\x0a\x22\x23\x51\
+\x20\x63\x20\x23\x35\x39\x35\x32\x37\x34\x22\x2c\x0a\x22\x23\x69\
+\x20\x63\x20\x23\x36\x32\x62\x32\x61\x32\x22\x2c\x0a\x22\x2e\x61\
+\x20\x63\x20\x23\x36\x37\x36\x37\x36\x37\x22\x2c\x0a\x22\x23\x6a\
+\x20\x63\x20\x23\x36\x39\x62\x36\x61\x33\x22\x2c\x0a\x22\x2e\x46\
+\x20\x63\x20\x23\x36\x66\x36\x66\x36\x61\x22\x2c\x0a\x22\x2e\x4b\
+\x20\x63\x20\x23\x36\x66\x38\x62\x38\x39\x22\x2c\x0a\x22\x61\x78\
+\x20\x63\x20\x23\x37\x34\x37\x34\x37\x34\x22\x2c\x0a\x22\x23\x61\
+\x20\x63\x20\x23\x37\x36\x61\x31\x61\x30\x22\x2c\x0a\x22\x2e\x23\
+\x20\x63\x20\x23\x37\x39\x37\x39\x37\x39\x22\x2c\x0a\x22\x23\x41\
+\x20\x63\x20\x23\x37\x62\x64\x37\x65\x38\x22\x2c\x0a\x22\x61\x79\
+\x20\x63\x20\x23\x37\x64\x37\x64\x37\x64\x22\x2c\x0a\x22\x23\x55\
+\x20\x63\x20\x23\x37\x65\x37\x64\x37\x33\x22\x2c\x0a\x22\x2e\x49\
+\x20\x63\x20\x23\x38\x30\x38\x30\x38\x30\x22\x2c\x0a\x22\x2e\x4f\
+\x20\x63\x20\x23\x38\x31\x61\x33\x62\x38\x22\x2c\x0a\x22\x61\x7a\
+\x20\x63\x20\x23\x38\x32\x38\x32\x38\x32\x22\x2c\x0a\x22\x23\x79\
+\x20\x63\x20\x23\x38\x32\x64\x31\x63\x30\x22\x2c\x0a\x22\x23\x53\
+\x20\x63\x20\x23\x38\x34\x38\x34\x38\x34\x22\x2c\x0a\x22\x23\x4f\
+\x20\x63\x20\x23\x38\x35\x37\x65\x37\x63\x22\x2c\x0a\x22\x23\x46\
+\x20\x63\x20\x23\x38\x36\x61\x64\x64\x32\x22\x2c\x0a\x22\x23\x6b\
+\x20\x63\x20\x23\x38\x36\x63\x64\x64\x61\x22\x2c\x0a\x22\x23\x4e\
+\x20\x63\x20\x23\x38\x39\x62\x31\x62\x64\x22\x2c\x0a\x22\x23\x68\
+\x20\x63\x20\x23\x38\x61\x63\x65\x63\x33\x22\x2c\x0a\x22\x23\x6f\
+\x20\x63\x20\x23\x38\x63\x38\x63\x38\x63\x22\x2c\x0a\x22\x23\x4c\
+\x20\x63\x20\x23\x38\x63\x62\x62\x63\x61\x22\x2c\x0a\x22\x61\x6c\
+\x20\x63\x20\x23\x38\x64\x38\x64\x38\x64\x22\x2c\x0a\x22\x2e\x73\
+\x20\x63\x20\x23\x38\x66\x38\x66\x38\x66\x22\x2c\x0a\x22\x23\x48\
+\x20\x63\x20\x23\x39\x30\x39\x30\x39\x30\x22\x2c\x0a\x22\x23\x4b\
+\x20\x63\x20\x23\x39\x30\x62\x61\x63\x39\x22\x2c\x0a\x22\x23\x4d\
+\x20\x63\x20\x23\x39\x31\x63\x34\x63\x66\x22\x2c\x0a\x22\x23\x74\
+\x20\x63\x20\x23\x39\x32\x39\x32\x39\x32\x22\x2c\x0a\x22\x2e\x58\
+\x20\x63\x20\x23\x39\x34\x63\x32\x63\x66\x22\x2c\x0a\x22\x2e\x4e\
+\x20\x63\x20\x23\x39\x34\x63\x32\x64\x30\x22\x2c\x0a\x22\x2e\x57\
+\x20\x63\x20\x23\x39\x35\x39\x35\x39\x35\x22\x2c\x0a\x22\x23\x42\
+\x20\x63\x20\x23\x39\x36\x62\x39\x63\x62\x22\x2c\x0a\x22\x2e\x33\
+\x20\x63\x20\x23\x39\x37\x62\x65\x64\x65\x22\x2c\x0a\x22\x2e\x4c\
+\x20\x63\x20\x23\x39\x38\x63\x32\x63\x65\x22\x2c\x0a\x22\x2e\x50\
+\x20\x63\x20\x23\x39\x62\x39\x62\x39\x62\x22\x2c\x0a\x22\x61\x2e\
+\x20\x63\x20\x23\x39\x63\x39\x63\x39\x63\x22\x2c\x0a\x22\x61\x6d\
+\x20\x63\x20\x23\x39\x64\x39\x64\x39\x64\x22\x2c\x0a\x22\x23\x73\
+\x20\x63\x20\x23\x39\x64\x62\x64\x63\x34\x22\x2c\x0a\x22\x23\x62\
+\x20\x63\x20\x23\x39\x65\x39\x65\x39\x65\x22\x2c\x0a\x22\x23\x59\
+\x20\x63\x20\x23\x61\x30\x61\x30\x61\x30\x22\x2c\x0a\x22\x61\x6e\
+\x20\x63\x20\x23\x61\x36\x61\x36\x61\x36\x22\x2c\x0a\x22\x23\x76\
+\x20\x63\x20\x23\x61\x36\x64\x31\x64\x36\x22\x2c\x0a\x22\x2e\x5a\
+\x20\x63\x20\x23\x61\x37\x61\x31\x61\x31\x22\x2c\x0a\x22\x23\x49\
+\x20\x63\x20\x23\x61\x37\x61\x37\x61\x37\x22\x2c\x0a\x22\x23\x44\
+\x20\x63\x20\x23\x61\x37\x65\x64\x64\x65\x22\x2c\x0a\x22\x2e\x4d\
+\x20\x63\x20\x23\x61\x38\x64\x38\x65\x35\x22\x2c\x0a\x22\x23\x75\
+\x20\x63\x20\x23\x61\x65\x61\x65\x61\x65\x22\x2c\x0a\x22\x61\x63\
+\x20\x63\x20\x23\x62\x31\x62\x31\x62\x31\x22\x2c\x0a\x22\x61\x23\
+\x20\x63\x20\x23\x62\x32\x62\x32\x62\x32\x22\x2c\x0a\x22\x2e\x32\
+\x20\x63\x20\x23\x62\x35\x63\x62\x64\x36\x22\x2c\x0a\x22\x2e\x56\
+\x20\x63\x20\x23\x62\x36\x62\x36\x62\x36\x22\x2c\x0a\x22\x61\x72\
+\x20\x63\x20\x23\x62\x37\x62\x37\x62\x37\x22\x2c\x0a\x22\x23\x5a\
+\x20\x63\x20\x23\x62\x38\x62\x38\x62\x38\x22\x2c\x0a\x22\x23\x32\
+\x20\x63\x20\x23\x62\x61\x62\x61\x62\x61\x22\x2c\x0a\x22\x2e\x51\
+\x20\x63\x20\x23\x62\x61\x62\x62\x62\x39\x22\x2c\x0a\x22\x61\x71\
+\x20\x63\x20\x23\x62\x62\x62\x62\x62\x62\x22\x2c\x0a\x22\x23\x63\
+\x20\x63\x20\x23\x62\x63\x62\x63\x62\x63\x22\x2c\x0a\x22\x2e\x38\
+\x20\x63\x20\x23\x62\x66\x62\x66\x62\x66\x22\x2c\x0a\x22\x61\x70\
+\x20\x63\x20\x23\x63\x30\x63\x30\x63\x30\x22\x2c\x0a\x22\x2e\x31\
+\x20\x63\x20\x23\x63\x31\x64\x39\x64\x32\x22\x2c\x0a\x22\x61\x61\
+\x20\x63\x20\x23\x63\x38\x63\x38\x63\x38\x22\x2c\x0a\x22\x61\x62\
+\x20\x63\x20\x23\x63\x61\x63\x61\x63\x61\x22\x2c\x0a\x22\x61\x6f\
+\x20\x63\x20\x23\x63\x62\x63\x62\x63\x62\x22\x2c\x0a\x22\x2e\x59\
+\x20\x63\x20\x23\x63\x63\x66\x38\x66\x31\x22\x2c\x0a\x22\x23\x4a\
+\x20\x63\x20\x23\x63\x64\x63\x64\x63\x64\x22\x2c\x0a\x22\x2e\x52\
+\x20\x63\x20\x23\x63\x65\x63\x65\x63\x65\x22\x2c\x0a\x22\x23\x70\
+\x20\x63\x20\x23\x64\x31\x66\x39\x66\x34\x22\x2c\x0a\x22\x23\x34\
+\x20\x63\x20\x23\x64\x35\x64\x35\x64\x35\x22\x2c\x0a\x22\x23\x77\
+\x20\x63\x20\x23\x64\x35\x65\x63\x65\x34\x22\x2c\x0a\x22\x2e\x39\
+\x20\x63\x20\x23\x64\x35\x66\x36\x66\x35\x22\x2c\x0a\x22\x23\x30\
+\x20\x63\x20\x23\x64\x36\x64\x36\x64\x36\x22\x2c\x0a\x22\x2e\x55\
+\x20\x63\x20\x23\x64\x37\x64\x37\x64\x37\x22\x2c\x0a\x22\x61\x66\
+\x20\x63\x20\x23\x64\x38\x64\x38\x64\x38\x22\x2c\x0a\x22\x2e\x78\
+\x20\x63\x20\x23\x64\x61\x64\x61\x64\x61\x22\x2c\x0a\x22\x2e\x79\
+\x20\x63\x20\x23\x64\x62\x64\x62\x64\x62\x22\x2c\x0a\x22\x2e\x77\
+\x20\x63\x20\x23\x64\x63\x64\x63\x64\x63\x22\x2c\x0a\x22\x23\x65\
+\x20\x63\x20\x23\x64\x63\x66\x37\x66\x34\x22\x2c\x0a\x22\x23\x31\
+\x20\x63\x20\x23\x64\x64\x64\x64\x64\x64\x22\x2c\x0a\x22\x61\x65\
+\x20\x63\x20\x23\x64\x65\x64\x65\x64\x65\x22\x2c\x0a\x22\x2e\x45\
+\x20\x63\x20\x23\x64\x66\x64\x66\x64\x66\x22\x2c\x0a\x22\x2e\x7a\
+\x20\x63\x20\x23\x65\x30\x65\x30\x65\x30\x22\x2c\x0a\x22\x23\x67\
+\x20\x63\x20\x23\x65\x30\x65\x62\x65\x34\x22\x2c\x0a\x22\x23\x71\
+\x20\x63\x20\x23\x65\x31\x65\x64\x65\x61\x22\x2c\x0a\x22\x23\x64\
+\x20\x63\x20\x23\x65\x32\x65\x32\x65\x32\x22\x2c\x0a\x22\x23\x78\
+\x20\x63\x20\x23\x65\x32\x65\x62\x65\x32\x22\x2c\x0a\x22\x2e\x30\
+\x20\x63\x20\x23\x65\x32\x65\x65\x65\x35\x22\x2c\x0a\x22\x2e\x76\
+\x20\x63\x20\x23\x65\x33\x65\x33\x65\x33\x22\x2c\x0a\x22\x23\x23\
+\x20\x63\x20\x23\x65\x33\x65\x37\x64\x35\x22\x2c\x0a\x22\x23\x72\
+\x20\x63\x20\x23\x65\x34\x65\x62\x64\x39\x22\x2c\x0a\x22\x23\x45\
+\x20\x63\x20\x23\x65\x34\x66\x32\x65\x63\x22\x2c\x0a\x22\x2e\x75\
+\x20\x63\x20\x23\x65\x35\x65\x35\x65\x35\x22\x2c\x0a\x22\x2e\x53\
+\x20\x63\x20\x23\x65\x37\x65\x37\x65\x37\x22\x2c\x0a\x22\x2e\x6b\
+\x20\x63\x20\x23\x65\x39\x65\x39\x65\x39\x22\x2c\x0a\x22\x2e\x41\
+\x20\x63\x20\x23\x65\x62\x65\x62\x65\x62\x22\x2c\x0a\x22\x2e\x44\
+\x20\x63\x20\x23\x65\x64\x65\x64\x65\x64\x22\x2c\x0a\x22\x2e\x74\
+\x20\x63\x20\x23\x66\x30\x66\x30\x66\x30\x22\x2c\x0a\x22\x23\x54\
+\x20\x63\x20\x23\x66\x34\x66\x34\x66\x34\x22\x2c\x0a\x22\x2e\x6e\
+\x20\x63\x20\x23\x66\x36\x66\x36\x66\x36\x22\x2c\x0a\x22\x2e\x43\
+\x20\x63\x20\x23\x66\x37\x66\x37\x66\x37\x22\x2c\x0a\x22\x23\x66\
+\x20\x63\x20\x23\x66\x38\x66\x35\x66\x32\x22\x2c\x0a\x22\x2e\x6d\
+\x20\x63\x20\x23\x66\x38\x66\x38\x66\x38\x22\x2c\x0a\x22\x2e\x37\
+\x20\x63\x20\x23\x66\x39\x66\x39\x66\x39\x22\x2c\x0a\x22\x61\x64\
+\x20\x63\x20\x23\x66\x61\x66\x61\x66\x61\x22\x2c\x0a\x22\x23\x2e\
+\x20\x63\x20\x23\x66\x62\x66\x30\x65\x62\x22\x2c\x0a\x22\x2e\x4a\
+\x20\x63\x20\x23\x66\x62\x66\x62\x66\x62\x22\x2c\x0a\x22\x2e\x54\
+\x20\x63\x20\x23\x66\x63\x66\x63\x66\x63\x22\x2c\x0a\x22\x2e\x42\
+\x20\x63\x20\x23\x66\x64\x66\x64\x66\x64\x22\x2c\x0a\x22\x2e\x6a\
+\x20\x63\x20\x23\x66\x65\x66\x65\x66\x65\x22\x2c\x0a\x22\x2e\x69\
+\x20\x63\x20\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x23\x2e\x61\x2e\x62\x2e\x63\
+\x2e\x64\x2e\x64\x2e\x65\x2e\x66\x2e\x67\x2e\x68\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x2e\x23\x2e\x69\x2e\x69\x2e\x69\x2e\x69\
+\x2e\x69\x2e\x69\x2e\x69\x2e\x69\x2e\x69\x2e\x68\x2e\x68\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x2e\x61\x2e\x6a\x2e\x6a\x2e\x6a\x2e\x6a\
+\x2e\x6a\x2e\x6a\x2e\x69\x2e\x69\x2e\x69\x2e\x68\x2e\x6b\x2e\x68\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x2e\x6c\x2e\x6d\x2e\x6e\x2e\x6f\x2e\x70\
+\x2e\x71\x2e\x72\x2e\x73\x2e\x6a\x2e\x69\x2e\x68\x2e\x74\x2e\x75\
+\x2e\x68\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x2e\x65\x2e\x76\x2e\x77\x2e\x78\x2e\x79\
+\x2e\x7a\x2e\x41\x2e\x6e\x2e\x42\x2e\x42\x2e\x68\x2e\x43\x2e\x44\
+\x2e\x45\x2e\x68\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x2e\x68\x2e\x68\x2e\x68\x2e\x68\x2e\x68\x2e\x46\
+\x2e\x47\x2e\x48\x2e\x49\x2e\x6e\x2e\x4a\x2e\x68\x2e\x68\x2e\x68\
+\x2e\x68\x2e\x68\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x2e\x68\x2e\x4b\x2e\x4c\x2e\x4d\x2e\x4e\x2e\x4f\x2e\x68\
+\x2e\x50\x2e\x51\x2e\x52\x2e\x53\x2e\x6e\x2e\x54\x2e\x6a\x2e\x55\
+\x2e\x56\x2e\x57\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x2e\x68\x2e\x58\x2e\x59\x2e\x5a\x2e\x30\x2e\x31\x2e\x32\x2e\x33\
+\x2e\x68\x2e\x34\x2e\x35\x2e\x36\x2e\x71\x2e\x72\x2e\x73\x2e\x37\
+\x2e\x76\x2e\x38\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x2e\x68\x2e\x39\x23\x2e\x2e\x23\x23\x23\x2e\x46\x2e\x46\x2e\x46\
+\x23\x61\x2e\x68\x23\x62\x23\x63\x23\x64\x2e\x6d\x2e\x6a\x2e\x37\
+\x2e\x76\x23\x63\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x2e\x68\x23\x65\x23\x66\x2e\x61\x23\x67\x23\x68\x23\x69\x23\x6a\
+\x23\x6b\x2e\x68\x23\x6c\x23\x6d\x2e\x72\x23\x6e\x23\x6f\x2e\x37\
+\x2e\x76\x23\x63\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x2e\x68\x23\x70\x23\x71\x2e\x61\x23\x72\x2e\x46\x2e\x46\x2e\x46\
+\x23\x73\x2e\x68\x23\x74\x23\x75\x2e\x78\x2e\x6e\x2e\x6a\x2e\x37\
+\x2e\x76\x23\x63\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x2e\x68\x23\x76\x23\x77\x2e\x23\x23\x78\x23\x79\x23\x7a\x23\x41\
+\x23\x42\x2e\x68\x23\x43\x23\x6d\x23\x6d\x2e\x71\x23\x6f\x2e\x37\
+\x2e\x76\x23\x63\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x2e\x68\x23\x44\x2e\x5a\x23\x45\x2e\x46\x2e\x46\x23\x46\
+\x2e\x68\x23\x47\x23\x48\x23\x49\x23\x4a\x2e\x41\x2e\x37\x2e\x6d\
+\x2e\x76\x23\x63\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x2e\x68\x23\x4b\x23\x4c\x23\x4d\x23\x4e\x2e\x68\
+\x23\x4f\x23\x50\x23\x51\x23\x52\x23\x6d\x2e\x71\x23\x53\x23\x54\
+\x23\x64\x23\x63\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x2e\x68\x2e\x68\x2e\x68\x2e\x68\x2e\x5a\
+\x23\x55\x23\x56\x23\x57\x23\x58\x23\x59\x23\x5a\x23\x30\x2e\x53\
+\x23\x31\x23\x32\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x23\x33\x2e\x74\x2e\x76\x2e\x78\x23\x34\
+\x23\x35\x23\x36\x23\x37\x23\x38\x23\x39\x61\x2e\x61\x23\x61\x61\
+\x61\x62\x61\x63\x2e\x68\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x2e\x36\x61\x64\x2e\x6b\x61\x65\x2e\x79\
+\x61\x66\x61\x67\x61\x68\x61\x69\x61\x6a\x61\x6b\x61\x6c\x61\x6d\
+\x61\x6e\x61\x2e\x2e\x6f\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x2e\x68\x61\x65\x61\x6f\x61\x70\x61\x71\
+\x61\x71\x61\x72\x61\x73\x61\x74\x61\x75\x61\x76\x61\x77\x61\x78\
+\x61\x79\x61\x7a\x2e\x6f\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x68\x2e\x68\x2e\x68\x2e\x68\
+\x2e\x68\x61\x41\x2e\x6f\x61\x42\x61\x43\x61\x69\x61\x44\x2e\x48\
+\x61\x45\x61\x46\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x61\x47\x61\x48\x61\x49\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x7d\x3b\x0a\
+\x00\x00\x05\x1a\
+\x00\
+\x00\x11\x8f\x78\x9c\xe5\x96\x49\x73\x32\x47\x0c\x86\xef\xfe\x15\
+\x94\x75\x73\xa5\xf4\xc1\xcc\x30\xcc\x54\x2a\x07\xef\x60\xbc\x80\
+\x8d\xd7\x54\x0e\x3d\x1b\x06\xbc\xb1\x18\x2f\xa9\xfc\xf7\xa8\x5b\
+\x52\xdb\xf9\xca\x17\x93\x5b\x52\x32\x86\x07\x49\xaf\xa4\xee\x9e\
+\x19\x7e\x6c\xd4\xae\x7a\x47\xb5\x8d\x1f\x6b\xf3\x85\x59\x8c\xf2\
+\x5a\x7e\x6b\x66\xb5\x8d\xd1\xbd\x19\x96\x8d\xdf\xff\xf8\xed\xcf\
+\xb5\xf5\x30\xa8\xd1\x5f\x23\x0a\x6a\xc1\xfa\x2f\x6b\xeb\xfd\x45\
+\x2d\xaf\x1d\x3f\x3e\x94\x16\xe0\x84\x00\xea\xf5\x46\xbd\x6a\x39\
+\xee\x31\x07\x8d\xb2\x72\x7c\xaa\x2c\xfe\x33\xcf\xec\x1f\x08\xa7\
+\xcc\xe6\x96\x39\x54\xff\xb1\xe3\x84\xfc\x9c\xff\xca\xec\xfd\xdb\
+\xc2\x92\x0f\xbb\x96\x1b\xa4\x57\x72\xfc\x8c\xd9\xfb\x1f\x99\xa3\
+\x40\xb8\xef\x98\xf4\x0a\x37\x8f\x99\x28\x4b\xbe\xb0\x8f\x6f\x0b\
+\x1b\xe9\x77\x6c\x39\x68\x84\x5a\x6f\xce\x1c\x05\xac\x07\xfb\xc2\
+\x12\x8f\x29\x73\x53\xf5\x02\xc7\x69\x98\xe6\xb1\xd3\x1b\x2a\x17\
+\xcc\xc0\x1c\x05\x39\xeb\x3d\x29\x8b\xfe\x39\xb3\xea\x99\x52\x58\
+\xea\xc1\x9b\xe5\x90\xea\x71\x3c\x06\xca\xd2\x6f\x47\x58\xe3\xdf\
+\x99\xe3\x50\xb8\xe1\x38\x8d\x4c\x56\x38\x3e\x54\x96\xfa\x5b\xcc\
+\x3e\xfe\x45\x38\x13\xbe\xb0\x1c\x05\x54\xdf\xcd\x03\x77\x9e\x39\
+\xff\x92\x39\x0e\xe5\xbc\x4c\x85\x25\x1f\x1b\xcc\x2d\xd5\x6f\x3a\
+\x36\x4d\x23\x7a\x07\xcc\xde\xdf\x15\x96\x7c\x93\x33\x27\x91\x70\
+\x66\xb9\x49\xf5\x78\xbd\x71\xe0\x99\xd7\xe7\x88\xb9\x15\xb2\x3e\
+\xe6\xca\xbc\x5e\x78\x2e\x9c\x49\xff\x0b\x65\x39\x9f\x9b\xcc\x5a\
+\x0f\xae\x1c\x9b\x38\x34\x6e\xfd\xf0\x82\x39\x89\x64\xde\x3d\x65\
+\x89\x5f\x0a\xe7\xd2\x6f\x61\x39\x0e\xe3\x8c\xd7\x1f\x4b\xe6\x56\
+\x26\xfd\x5f\x7a\xe6\xfe\x43\x65\xe9\xbf\xcf\x9c\x44\xb2\xff\x4d\
+\xe1\x5c\xea\x67\xca\x52\x7f\xcc\x9c\xea\x7a\x55\x8e\xb3\x56\x28\
+\xfb\x5f\x57\x96\xfa\x67\xcc\x49\x24\xe7\xf3\x99\x59\xf3\x71\x5b\
+\x58\xe7\x19\x59\x6e\x7d\xf4\xfb\xce\x9c\x44\x59\xd3\xf1\x58\x99\
+\xf5\x21\x16\xce\x25\x3e\x52\x96\xf9\x32\xe6\x34\x97\xfd\xe9\x30\
+\x9b\xa6\xcc\xf3\x20\x5c\x08\xdf\x38\xce\x7c\xbd\x53\xe1\x5c\xd6\
+\xf7\x80\x39\x8d\x84\x39\x3f\x33\x4d\xd1\xef\x09\xab\x5e\xce\x9c\
+\x69\x3d\x77\x7e\x92\x28\x89\xd2\xdc\x71\xa8\x2c\xfb\x3f\x12\xce\
+\xe5\x7a\xbf\x63\xd6\x7a\xc6\x08\x8b\x1f\xdf\x98\xb5\x1e\x9e\x30\
+\xfb\x7a\x12\x9f\xa9\xdf\x9d\xc7\x24\x4f\xb5\x9e\x51\x96\x79\x77\
+\x84\x75\xde\x7b\x65\x59\xdf\x4d\x66\x9a\x97\xf5\x2a\xe1\x82\xcf\
+\x37\xb6\x99\xb5\x1e\x38\xbd\x94\xfa\x37\x4e\x1f\x12\x65\x39\x2f\
+\xa9\xb2\xcc\x8b\xc2\x5a\x7f\xc6\x9c\xc7\xa2\x57\x08\x97\xc2\x6e\
+\xbf\xd3\xdc\x5e\xf0\x8e\x5b\xca\x32\xcf\x33\x73\xa6\xfd\xc5\xcc\
+\xaa\x87\x75\x61\xd1\xc3\x57\xe6\x42\xfd\xee\x7e\x46\xea\xa2\x07\
+\xd7\x9e\xb9\x5e\xc9\xec\xfb\x01\x66\x9f\xef\xae\x6f\x53\x98\x42\
+\xfa\x99\x30\xfb\x79\x46\xcc\x3e\xde\x3d\x9f\xb2\x66\xa6\xfd\x17\
+\x9e\x79\x3d\xba\xc2\x85\xec\xff\x1e\xb3\xef\xff\x98\xd9\xeb\x6d\
+\x09\xab\xdf\x3d\x7f\xb2\xc2\x9a\x63\x50\x96\xeb\x09\x99\x7d\xfe\
+\x3e\x73\xd9\x92\x7e\xdd\xf3\x37\x8f\x3d\x57\xc2\x95\xc4\xbf\x30\
+\x57\xe2\x47\x8e\x2f\xbd\xde\x35\xb3\xe6\xe3\x54\x58\xf3\x6f\x98\
+\x7d\xbe\x3b\xff\xc5\x87\x7e\xc2\xec\xfd\xee\x79\x5d\x7c\xe4\xb7\
+\x98\xd5\x0f\xf7\xc2\xe2\x07\xf7\xfc\xb4\xd5\x25\xde\xdd\x4f\x9d\
+\x9b\xd9\x3d\x3f\xab\x0f\xbf\x8b\xaf\xbc\xbf\xbf\xf8\x77\xf6\x7f\
+\xd0\x40\x40\x83\x19\xe6\x68\x56\xd5\xc0\x02\x4b\xac\x70\x88\xb7\
+\x38\x5a\x4d\x83\x14\xc6\x38\x21\x85\x21\xde\xe1\xfd\x2a\x1a\x34\
+\xc3\x03\x3e\x52\xfe\x13\x4e\x71\xf6\x7d\x0d\x9c\xe3\x02\x9f\x5d\
+\x07\x4b\x7c\xc1\x57\x7c\x5b\x41\xe3\x1d\x37\x45\x61\x8b\x14\x66\
+\xb8\x8d\x3b\xdf\xd1\xc0\x5d\x9a\x62\x4f\x14\xf6\x29\xbf\x4d\xd6\
+\xc1\x83\xaf\xb2\xa8\xdf\x39\x76\xad\x7d\xd6\xc0\x43\x3c\xc2\x63\
+\xa7\x30\xa5\x0e\xda\x78\x42\x73\xf4\xc8\xfa\x78\xf8\x8f\x3c\x83\
+\xa7\x78\x86\x03\x3c\xc7\x0b\xb2\x3e\x5e\xe2\x15\x6b\xd0\x69\xe8\
+\xe3\xb5\x53\xb8\xc1\xba\xcf\xb7\xd6\xc0\x00\x43\x8c\x28\xaf\xa4\
+\xd3\xd2\xa4\x1d\x8f\xa9\xd6\x1d\xb6\x30\x71\xb1\x29\x0e\xf8\x9e\
+\x85\x97\x80\x6e\x27\x6e\x00\xc0\x90\x86\xcd\xee\x90\xf5\x20\x83\
+\x1c\x0a\x28\x71\x0b\x2a\x18\xba\xcc\x04\xa7\x70\x0b\x23\x3b\x2d\
+\x8c\x61\x02\x77\xfc\xbb\x88\x62\x86\x70\x8f\xfb\x50\x48\x0f\x9d\
+\x4f\xd6\xc6\x98\x94\x81\x6a\xda\x2c\xaa\x00\x39\x76\xe0\x81\x5e\
+\x63\x6c\xc0\x23\x3c\xf1\x6f\x23\x7c\x82\x8a\x56\xa1\xfe\x85\xc2\
+\xd7\xb6\x6d\x8d\x7a\x9c\xc2\x0c\xe6\xfc\x7b\x90\xaa\xd8\x7d\xb0\
+\x15\x7a\x3f\xc5\x72\xfc\xc7\x27\x9b\xfb\x4c\xaf\x31\xd9\x12\x5e\
+\xe0\x95\xfb\x80\x37\x78\xa7\xbe\xdc\xfc\x1f\x55\xf4\x13\xc5\x66\
+\x14\xbd\xa4\xff\x63\x67\x99\xcb\xb6\xdf\x6d\xc2\x16\x6c\x8b\xc6\
+\x0e\xec\xd2\xda\x4c\xe9\xbb\xf1\x4f\x35\x3b\xb0\x07\xfb\xe4\x9b\
+\x40\x9b\xde\x3b\xb0\x45\xfb\xd4\x80\x03\xe8\x42\x97\xde\xa7\x54\
+\xfb\x15\x0e\x79\x5f\xe0\x08\x8e\x69\xb2\x77\xf2\x65\xae\xd3\x67\
+\xed\x84\x2a\x9d\x40\x0f\xfa\x54\xa5\x07\xa7\x70\x06\x03\xca\x9a\
+\x91\xb5\x31\x85\x73\xd2\x1d\xc0\x85\x3f\x63\xef\x4e\xa5\x43\xea\
+\x4b\xea\xf5\xd9\x76\x44\x4a\x1d\xb8\x84\x2b\xd8\xa1\x2a\xd7\xd4\
+\xed\x0d\xd4\xa1\x01\x01\x29\xf6\xc8\x8e\xc9\x06\xa4\x1d\x7a\x8d\
+\x39\x44\xd0\xa4\x1a\x6d\xaa\xdc\x75\x3a\x6c\xf1\x17\xa7\xbc\xc0\
+\x2b\x68\x41\x02\xa9\x41\xbc\xc2\xf9\xe7\x6b\x0e\x0b\x03\xd4\xed\
+\x84\x66\x3a\x90\x35\x5c\x9a\x6f\xdf\xc7\x70\xd7\x64\xd4\xcb\x23\
+\xad\x9e\xed\x65\x69\xf2\x55\xee\x63\x38\x37\x05\xcd\x38\x33\x25\
+\xad\x7a\x17\x5e\x4c\xf5\x7d\x0d\x77\xfd\x1d\x9a\xa1\xb9\xa5\x99\
+\xce\x61\xb2\x9a\x86\x35\x5a\xdf\xbe\xdd\x45\x73\x6b\x56\xbc\x27\
+\xb3\x0a\xfd\x16\x1a\x9b\x89\xb9\x5b\x5d\xe3\x3b\xf6\x9f\xd2\xf8\
+\xeb\xd7\xb5\xbf\x01\xda\x3f\xb9\x0e\
+\x00\x00\x15\xdf\
+\x2f\
+\x2a\x20\x58\x50\x4d\x20\x2a\x2f\x0a\x73\x74\x61\x74\x69\x63\x20\
+\x63\x68\x61\x72\x20\x2a\x69\x6d\x61\x67\x65\x35\x5b\x5d\x3d\x7b\
+\x0a\x22\x33\x32\x20\x33\x32\x20\x32\x31\x31\x20\x32\x22\x2c\x0a\
+\x22\x51\x74\x20\x63\x20\x4e\x6f\x6e\x65\x22\x2c\x0a\x22\x61\x4a\
+\x20\x63\x20\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x22\x23\x57\
+\x20\x63\x20\x23\x30\x38\x30\x38\x30\x30\x22\x2c\x0a\x22\x23\x4e\
+\x20\x63\x20\x23\x31\x30\x30\x38\x30\x30\x22\x2c\x0a\x22\x23\x56\
+\x20\x63\x20\x23\x31\x30\x31\x30\x30\x30\x22\x2c\x0a\x22\x23\x45\
+\x20\x63\x20\x23\x31\x30\x31\x30\x30\x38\x22\x2c\x0a\x22\x23\x4d\
+\x20\x63\x20\x23\x31\x38\x31\x30\x30\x30\x22\x2c\x0a\x22\x23\x4c\
+\x20\x63\x20\x23\x31\x38\x31\x38\x30\x30\x22\x2c\x0a\x22\x23\x44\
+\x20\x63\x20\x23\x31\x38\x31\x38\x30\x38\x22\x2c\x0a\x22\x23\x46\
+\x20\x63\x20\x23\x31\x38\x31\x38\x31\x30\x22\x2c\x0a\x22\x61\x73\
+\x20\x63\x20\x23\x32\x31\x31\x38\x30\x30\x22\x2c\x0a\x22\x23\x4b\
+\x20\x63\x20\x23\x32\x31\x31\x38\x30\x38\x22\x2c\x0a\x22\x23\x4a\
+\x20\x63\x20\x23\x32\x31\x32\x31\x31\x30\x22\x2c\x0a\x22\x23\x47\
+\x20\x63\x20\x23\x32\x31\x32\x31\x31\x38\x22\x2c\x0a\x22\x23\x71\
+\x20\x63\x20\x23\x32\x31\x32\x31\x32\x31\x22\x2c\x0a\x22\x61\x6e\
+\x20\x63\x20\x23\x32\x39\x32\x31\x30\x30\x22\x2c\x0a\x22\x23\x49\
+\x20\x63\x20\x23\x32\x39\x32\x31\x31\x30\x22\x2c\x0a\x22\x61\x4e\
+\x20\x63\x20\x23\x32\x39\x32\x39\x31\x30\x22\x2c\x0a\x22\x23\x48\
+\x20\x63\x20\x23\x32\x39\x32\x39\x31\x38\x22\x2c\x0a\x22\x23\x79\
+\x20\x63\x20\x23\x32\x39\x32\x39\x32\x31\x22\x2c\x0a\x22\x61\x46\
+\x20\x63\x20\x23\x33\x31\x32\x39\x30\x30\x22\x2c\x0a\x22\x23\x43\
+\x20\x63\x20\x23\x33\x31\x32\x39\x31\x38\x22\x2c\x0a\x22\x23\x69\
+\x20\x63\x20\x23\x33\x31\x32\x39\x32\x39\x22\x2c\x0a\x22\x2e\x30\
+\x20\x63\x20\x23\x33\x31\x33\x31\x33\x31\x22\x2c\x0a\x22\x23\x37\
+\x20\x63\x20\x23\x33\x39\x33\x31\x30\x30\x22\x2c\x0a\x22\x23\x55\
+\x20\x63\x20\x23\x33\x39\x33\x31\x30\x38\x22\x2c\x0a\x22\x61\x47\
+\x20\x63\x20\x23\x33\x39\x33\x39\x33\x31\x22\x2c\x0a\x22\x2e\x4d\
+\x20\x63\x20\x23\x33\x39\x33\x39\x33\x39\x22\x2c\x0a\x22\x23\x75\
+\x20\x63\x20\x23\x34\x32\x33\x39\x33\x39\x22\x2c\x0a\x22\x23\x63\
+\x20\x63\x20\x23\x34\x32\x34\x61\x34\x32\x22\x2c\x0a\x22\x61\x45\
+\x20\x63\x20\x23\x34\x61\x34\x32\x30\x30\x22\x2c\x0a\x22\x61\x59\
+\x20\x63\x20\x23\x34\x61\x34\x32\x31\x30\x22\x2c\x0a\x22\x2e\x56\
+\x20\x63\x20\x23\x34\x61\x34\x32\x33\x39\x22\x2c\x0a\x22\x23\x42\
+\x20\x63\x20\x23\x34\x61\x34\x61\x33\x39\x22\x2c\x0a\x22\x2e\x6d\
+\x20\x63\x20\x23\x34\x61\x34\x61\x34\x32\x22\x2c\x0a\x22\x61\x50\
+\x20\x63\x20\x23\x34\x61\x35\x32\x31\x38\x22\x2c\x0a\x22\x2e\x47\
+\x20\x63\x20\x23\x34\x61\x35\x32\x35\x32\x22\x2c\x0a\x22\x2e\x7a\
+\x20\x63\x20\x23\x34\x61\x35\x61\x35\x32\x22\x2c\x0a\x22\x61\x4f\
+\x20\x63\x20\x23\x35\x32\x34\x32\x30\x30\x22\x2c\x0a\x22\x61\x6d\
+\x20\x63\x20\x23\x35\x32\x34\x61\x30\x30\x22\x2c\x0a\x22\x23\x54\
+\x20\x63\x20\x23\x35\x32\x34\x61\x30\x38\x22\x2c\x0a\x22\x23\x70\
+\x20\x63\x20\x23\x35\x32\x34\x61\x34\x61\x22\x2c\x0a\x22\x2e\x73\
+\x20\x63\x20\x23\x35\x32\x35\x32\x35\x32\x22\x2c\x0a\x22\x23\x61\
+\x20\x63\x20\x23\x35\x32\x35\x61\x35\x32\x22\x2c\x0a\x22\x2e\x37\
+\x20\x63\x20\x23\x35\x32\x36\x33\x35\x61\x22\x2c\x0a\x22\x23\x62\
+\x20\x63\x20\x23\x35\x32\x36\x33\x36\x33\x22\x2c\x0a\x22\x61\x7a\
+\x20\x63\x20\x23\x35\x61\x34\x61\x30\x30\x22\x2c\x0a\x22\x23\x36\
+\x20\x63\x20\x23\x35\x61\x35\x32\x30\x38\x22\x2c\x0a\x22\x61\x77\
+\x20\x63\x20\x23\x35\x61\x35\x32\x31\x30\x22\x2c\x0a\x22\x2e\x5a\
+\x20\x63\x20\x23\x35\x61\x35\x32\x34\x61\x22\x2c\x0a\x22\x2e\x4c\
+\x20\x63\x20\x23\x35\x61\x35\x61\x35\x32\x22\x2c\x0a\x22\x2e\x79\
+\x20\x63\x20\x23\x35\x61\x35\x61\x35\x61\x22\x2c\x0a\x22\x2e\x46\
+\x20\x63\x20\x23\x35\x61\x36\x33\x35\x61\x22\x2c\x0a\x22\x23\x53\
+\x20\x63\x20\x23\x36\x33\x35\x32\x30\x38\x22\x2c\x0a\x22\x61\x78\
+\x20\x63\x20\x23\x36\x33\x35\x61\x31\x30\x22\x2c\x0a\x22\x2e\x55\
+\x20\x63\x20\x23\x36\x33\x35\x61\x35\x32\x22\x2c\x0a\x22\x2e\x72\
+\x20\x63\x20\x23\x36\x33\x35\x61\x35\x61\x22\x2c\x0a\x22\x61\x5a\
+\x20\x63\x20\x23\x36\x33\x36\x33\x32\x31\x22\x2c\x0a\x22\x23\x23\
+\x20\x63\x20\x23\x36\x33\x36\x33\x35\x61\x22\x2c\x0a\x22\x2e\x41\
+\x20\x63\x20\x23\x36\x33\x36\x33\x36\x33\x22\x2c\x0a\x22\x23\x68\
+\x20\x63\x20\x23\x36\x33\x36\x62\x36\x62\x22\x2c\x0a\x22\x61\x4c\
+\x20\x63\x20\x23\x36\x33\x37\x33\x32\x39\x22\x2c\x0a\x22\x61\x66\
+\x20\x63\x20\x23\x36\x62\x35\x61\x30\x30\x22\x2c\x0a\x22\x2e\x36\
+\x20\x63\x20\x23\x36\x62\x36\x33\x35\x61\x22\x2c\x0a\x22\x23\x6f\
+\x20\x63\x20\x23\x36\x62\x36\x33\x36\x33\x22\x2c\x0a\x22\x2e\x45\
+\x20\x63\x20\x23\x36\x62\x36\x62\x36\x33\x22\x2c\x0a\x22\x61\x34\
+\x20\x63\x20\x23\x36\x62\x37\x33\x32\x31\x22\x2c\x0a\x22\x61\x53\
+\x20\x63\x20\x23\x36\x62\x37\x33\x32\x39\x22\x2c\x0a\x22\x61\x52\
+\x20\x63\x20\x23\x36\x62\x37\x33\x33\x31\x22\x2c\x0a\x22\x61\x58\
+\x20\x63\x20\x23\x37\x33\x36\x33\x30\x30\x22\x2c\x0a\x22\x61\x6c\
+\x20\x63\x20\x23\x37\x33\x36\x33\x30\x38\x22\x2c\x0a\x22\x23\x52\
+\x20\x63\x20\x23\x37\x33\x36\x62\x31\x30\x22\x2c\x0a\x22\x2e\x54\
+\x20\x63\x20\x23\x37\x33\x36\x62\x36\x33\x22\x2c\x0a\x22\x61\x35\
+\x20\x63\x20\x23\x37\x33\x37\x33\x32\x39\x22\x2c\x0a\x22\x2e\x69\
+\x20\x63\x20\x23\x37\x33\x37\x33\x36\x62\x22\x2c\x0a\x22\x2e\x4b\
+\x20\x63\x20\x23\x37\x33\x37\x33\x37\x33\x22\x2c\x0a\x22\x61\x37\
+\x20\x63\x20\x23\x37\x33\x37\x62\x32\x39\x22\x2c\x0a\x22\x23\x67\
+\x20\x63\x20\x23\x37\x33\x37\x62\x37\x33\x22\x2c\x0a\x22\x61\x39\
+\x20\x63\x20\x23\x37\x62\x37\x33\x31\x38\x22\x2c\x0a\x22\x23\x41\
+\x20\x63\x20\x23\x37\x62\x37\x33\x37\x33\x22\x2c\x0a\x22\x61\x38\
+\x20\x63\x20\x23\x37\x62\x37\x62\x32\x31\x22\x2c\x0a\x22\x61\x56\
+\x20\x63\x20\x23\x37\x62\x37\x62\x32\x39\x22\x2c\x0a\x22\x61\x51\
+\x20\x63\x20\x23\x37\x62\x37\x62\x35\x61\x22\x2c\x0a\x22\x2e\x4a\
+\x20\x63\x20\x23\x37\x62\x37\x62\x37\x33\x22\x2c\x0a\x22\x2e\x31\
+\x20\x63\x20\x23\x37\x62\x37\x62\x37\x62\x22\x2c\x0a\x22\x62\x23\
+\x20\x63\x20\x23\x37\x62\x38\x34\x33\x31\x22\x2c\x0a\x22\x61\x33\
+\x20\x63\x20\x23\x37\x62\x38\x34\x34\x61\x22\x2c\x0a\x22\x2e\x38\
+\x20\x63\x20\x23\x37\x62\x38\x34\x37\x62\x22\x2c\x0a\x22\x61\x79\
+\x20\x63\x20\x23\x38\x34\x37\x33\x30\x38\x22\x2c\x0a\x22\x23\x35\
+\x20\x63\x20\x23\x38\x34\x37\x33\x31\x30\x22\x2c\x0a\x22\x61\x54\
+\x20\x63\x20\x23\x38\x34\x37\x62\x32\x31\x22\x2c\x0a\x22\x62\x2e\
+\x20\x63\x20\x23\x38\x34\x37\x62\x32\x39\x22\x2c\x0a\x22\x2e\x53\
+\x20\x63\x20\x23\x38\x34\x37\x62\x37\x33\x22\x2c\x0a\x22\x2e\x64\
+\x20\x63\x20\x23\x38\x34\x37\x62\x37\x62\x22\x2c\x0a\x22\x61\x57\
+\x20\x63\x20\x23\x38\x34\x38\x34\x32\x31\x22\x2c\x0a\x22\x61\x31\
+\x20\x63\x20\x23\x38\x34\x38\x34\x32\x39\x22\x2c\x0a\x22\x61\x30\
+\x20\x63\x20\x23\x38\x34\x38\x34\x33\x31\x22\x2c\x0a\x22\x62\x71\
+\x20\x63\x20\x23\x38\x34\x38\x34\x34\x61\x22\x2c\x0a\x22\x2e\x48\
+\x20\x63\x20\x23\x38\x34\x38\x34\x38\x34\x22\x2c\x0a\x22\x61\x65\
+\x20\x63\x20\x23\x38\x63\x37\x62\x30\x38\x22\x2c\x0a\x22\x61\x6b\
+\x20\x63\x20\x23\x38\x63\x37\x62\x31\x30\x22\x2c\x0a\x22\x23\x6a\
+\x20\x63\x20\x23\x38\x63\x38\x34\x38\x34\x22\x2c\x0a\x22\x62\x61\
+\x20\x63\x20\x23\x38\x63\x38\x63\x36\x33\x22\x2c\x0a\x22\x61\x32\
+\x20\x63\x20\x23\x38\x63\x38\x63\x37\x62\x22\x2c\x0a\x22\x2e\x78\
+\x20\x63\x20\x23\x38\x63\x38\x63\x38\x34\x22\x2c\x0a\x22\x2e\x32\
+\x20\x63\x20\x23\x38\x63\x39\x34\x38\x63\x22\x2c\x0a\x22\x2e\x39\
+\x20\x63\x20\x23\x38\x63\x61\x64\x61\x35\x22\x2c\x0a\x22\x61\x43\
+\x20\x63\x20\x23\x39\x34\x37\x62\x30\x38\x22\x2c\x0a\x22\x2e\x59\
+\x20\x63\x20\x23\x39\x34\x37\x62\x37\x33\x22\x2c\x0a\x22\x61\x4b\
+\x20\x63\x20\x23\x39\x34\x38\x63\x31\x30\x22\x2c\x0a\x22\x23\x51\
+\x20\x63\x20\x23\x39\x34\x38\x63\x31\x38\x22\x2c\x0a\x22\x61\x36\
+\x20\x63\x20\x23\x39\x34\x38\x63\x32\x39\x22\x2c\x0a\x22\x23\x6d\
+\x20\x63\x20\x23\x39\x34\x38\x63\x38\x34\x22\x2c\x0a\x22\x62\x70\
+\x20\x63\x20\x23\x39\x34\x39\x34\x34\x32\x22\x2c\x0a\x22\x61\x48\
+\x20\x63\x20\x23\x39\x34\x39\x34\x38\x34\x22\x2c\x0a\x22\x2e\x44\
+\x20\x63\x20\x23\x39\x34\x39\x34\x38\x63\x22\x2c\x0a\x22\x2e\x6e\
+\x20\x63\x20\x23\x39\x34\x39\x34\x39\x34\x22\x2c\x0a\x22\x62\x6e\
+\x20\x63\x20\x23\x39\x34\x39\x63\x34\x61\x22\x2c\x0a\x22\x62\x6c\
+\x20\x63\x20\x23\x39\x34\x39\x63\x35\x61\x22\x2c\x0a\x22\x62\x6a\
+\x20\x63\x20\x23\x39\x34\x39\x63\x36\x33\x22\x2c\x0a\x22\x2e\x75\
+\x20\x63\x20\x23\x39\x34\x39\x63\x39\x34\x22\x2c\x0a\x22\x2e\x76\
+\x20\x63\x20\x23\x39\x34\x61\x35\x39\x63\x22\x2c\x0a\x22\x61\x49\
+\x20\x63\x20\x23\x39\x63\x38\x63\x31\x30\x22\x2c\x0a\x22\x23\x34\
+\x20\x63\x20\x23\x39\x63\x38\x63\x31\x38\x22\x2c\x0a\x22\x23\x4f\
+\x20\x63\x20\x23\x39\x63\x38\x63\x32\x39\x22\x2c\x0a\x22\x61\x4d\
+\x20\x63\x20\x23\x39\x63\x39\x34\x31\x38\x22\x2c\x0a\x22\x23\x72\
+\x20\x63\x20\x23\x39\x63\x39\x34\x38\x63\x22\x2c\x0a\x22\x62\x6f\
+\x20\x63\x20\x23\x39\x63\x39\x63\x34\x61\x22\x2c\x0a\x22\x62\x6d\
+\x20\x63\x20\x23\x39\x63\x39\x63\x35\x32\x22\x2c\x0a\x22\x62\x6b\
+\x20\x63\x20\x23\x39\x63\x39\x63\x35\x61\x22\x2c\x0a\x22\x62\x68\
+\x20\x63\x20\x23\x39\x63\x39\x63\x36\x62\x22\x2c\x0a\x22\x2e\x6b\
+\x20\x63\x20\x23\x39\x63\x39\x63\x39\x34\x22\x2c\x0a\x22\x2e\x61\
+\x20\x63\x20\x23\x39\x63\x39\x63\x39\x63\x22\x2c\x0a\x22\x62\x69\
+\x20\x63\x20\x23\x39\x63\x61\x35\x36\x62\x22\x2c\x0a\x22\x62\x66\
+\x20\x63\x20\x23\x39\x63\x61\x35\x37\x33\x22\x2c\x0a\x22\x2e\x68\
+\x20\x63\x20\x23\x39\x63\x61\x35\x39\x63\x22\x2c\x0a\x22\x23\x66\
+\x20\x63\x20\x23\x39\x63\x61\x35\x61\x35\x22\x2c\x0a\x22\x2e\x42\
+\x20\x63\x20\x23\x39\x63\x62\x64\x62\x35\x22\x2c\x0a\x22\x23\x50\
+\x20\x63\x20\x23\x61\x35\x39\x34\x30\x30\x22\x2c\x0a\x22\x61\x42\
+\x20\x63\x20\x23\x61\x35\x39\x34\x31\x38\x22\x2c\x0a\x22\x23\x6b\
+\x20\x63\x20\x23\x61\x35\x39\x34\x38\x63\x22\x2c\x0a\x22\x61\x72\
+\x20\x63\x20\x23\x61\x35\x39\x63\x32\x39\x22\x2c\x0a\x22\x2e\x4e\
+\x20\x63\x20\x23\x61\x35\x39\x63\x38\x63\x22\x2c\x0a\x22\x2e\x50\
+\x20\x63\x20\x23\x61\x35\x39\x63\x39\x34\x22\x2c\x0a\x22\x2e\x57\
+\x20\x63\x20\x23\x61\x35\x39\x63\x39\x63\x22\x2c\x0a\x22\x62\x67\
+\x20\x63\x20\x23\x61\x35\x61\x35\x37\x33\x22\x2c\x0a\x22\x62\x64\
+\x20\x63\x20\x23\x61\x35\x61\x35\x38\x34\x22\x2c\x0a\x22\x2e\x71\
+\x20\x63\x20\x23\x61\x35\x61\x35\x39\x63\x22\x2c\x0a\x22\x2e\x63\
+\x20\x63\x20\x23\x61\x35\x61\x35\x61\x35\x22\x2c\x0a\x22\x62\x65\
+\x20\x63\x20\x23\x61\x35\x61\x64\x37\x62\x22\x2c\x0a\x22\x2e\x6f\
+\x20\x63\x20\x23\x61\x35\x61\x64\x61\x35\x22\x2c\x0a\x22\x2e\x43\
+\x20\x63\x20\x23\x61\x35\x61\x64\x61\x64\x22\x2c\x0a\x22\x2e\x49\
+\x20\x63\x20\x23\x61\x35\x62\x35\x61\x64\x22\x2c\x0a\x22\x23\x64\
+\x20\x63\x20\x23\x61\x35\x62\x64\x62\x35\x22\x2c\x0a\x22\x2e\x77\
+\x20\x63\x20\x23\x61\x35\x63\x36\x62\x64\x22\x2c\x0a\x22\x61\x64\
+\x20\x63\x20\x23\x61\x64\x39\x63\x31\x30\x22\x2c\x0a\x22\x61\x6a\
+\x20\x63\x20\x23\x61\x64\x39\x63\x31\x38\x22\x2c\x0a\x22\x23\x77\
+\x20\x63\x20\x23\x61\x64\x39\x63\x39\x34\x22\x2c\x0a\x22\x2e\x66\
+\x20\x63\x20\x23\x61\x64\x61\x35\x39\x63\x22\x2c\x0a\x22\x62\x63\
+\x20\x63\x20\x23\x61\x64\x61\x64\x37\x62\x22\x2c\x0a\x22\x62\x62\
+\x20\x63\x20\x23\x61\x64\x61\x64\x38\x34\x22\x2c\x0a\x22\x2e\x23\
+\x20\x63\x20\x23\x61\x64\x61\x64\x61\x35\x22\x2c\x0a\x22\x2e\x74\
+\x20\x63\x20\x23\x61\x64\x61\x64\x61\x64\x22\x2c\x0a\x22\x2e\x34\
+\x20\x63\x20\x23\x61\x64\x62\x35\x61\x64\x22\x2c\x0a\x22\x61\x69\
+\x20\x63\x20\x23\x62\x35\x61\x35\x31\x38\x22\x2c\x0a\x22\x61\x71\
+\x20\x63\x20\x23\x62\x35\x61\x35\x32\x39\x22\x2c\x0a\x22\x61\x44\
+\x20\x63\x20\x23\x62\x35\x61\x35\x34\x32\x22\x2c\x0a\x22\x61\x6f\
+\x20\x63\x20\x23\x62\x35\x61\x35\x34\x61\x22\x2c\x0a\x22\x2e\x4f\
+\x20\x63\x20\x23\x62\x35\x61\x35\x39\x34\x22\x2c\x0a\x22\x23\x76\
+\x20\x63\x20\x23\x62\x35\x61\x35\x39\x63\x22\x2c\x0a\x22\x61\x74\
+\x20\x63\x20\x23\x62\x35\x61\x64\x35\x32\x22\x2c\x0a\x22\x23\x7a\
+\x20\x63\x20\x23\x62\x35\x61\x64\x39\x63\x22\x2c\x0a\x22\x2e\x35\
+\x20\x63\x20\x23\x62\x35\x61\x64\x61\x35\x22\x2c\x0a\x22\x2e\x6a\
+\x20\x63\x20\x23\x62\x35\x62\x35\x61\x64\x22\x2c\x0a\x22\x2e\x65\
+\x20\x63\x20\x23\x62\x35\x62\x35\x62\x35\x22\x2c\x0a\x22\x2e\x33\
+\x20\x63\x20\x23\x62\x35\x62\x64\x62\x35\x22\x2c\x0a\x22\x2e\x51\
+\x20\x63\x20\x23\x62\x35\x62\x64\x62\x64\x22\x2c\x0a\x22\x23\x65\
+\x20\x63\x20\x23\x62\x35\x63\x65\x63\x36\x22\x2c\x0a\x22\x23\x38\
+\x20\x63\x20\x23\x62\x64\x61\x35\x33\x39\x22\x2c\x0a\x22\x23\x78\
+\x20\x63\x20\x23\x62\x64\x61\x35\x39\x63\x22\x2c\x0a\x22\x23\x33\
+\x20\x63\x20\x23\x62\x64\x61\x64\x32\x39\x22\x2c\x0a\x22\x23\x58\
+\x20\x63\x20\x23\x62\x64\x61\x64\x33\x31\x22\x2c\x0a\x22\x61\x67\
+\x20\x63\x20\x23\x62\x64\x61\x64\x34\x32\x22\x2c\x0a\x22\x23\x6e\
+\x20\x63\x20\x23\x62\x64\x62\x35\x61\x64\x22\x2c\x0a\x22\x2e\x62\
+\x20\x63\x20\x23\x62\x64\x62\x64\x62\x64\x22\x2c\x0a\x22\x2e\x58\
+\x20\x63\x20\x23\x62\x64\x63\x65\x63\x36\x22\x2c\x0a\x22\x61\x55\
+\x20\x63\x20\x23\x63\x36\x62\x35\x31\x30\x22\x2c\x0a\x22\x23\x2e\
+\x20\x63\x20\x23\x63\x36\x63\x36\x62\x64\x22\x2c\x0a\x22\x2e\x70\
+\x20\x63\x20\x23\x63\x36\x63\x65\x63\x65\x22\x2c\x0a\x22\x2e\x67\
+\x20\x63\x20\x23\x63\x36\x64\x65\x64\x36\x22\x2c\x0a\x22\x61\x63\
+\x20\x63\x20\x23\x63\x65\x62\x64\x33\x31\x22\x2c\x0a\x22\x23\x6c\
+\x20\x63\x20\x23\x63\x65\x64\x36\x63\x65\x22\x2c\x0a\x22\x23\x73\
+\x20\x63\x20\x23\x63\x65\x64\x36\x64\x36\x22\x2c\x0a\x22\x23\x74\
+\x20\x63\x20\x23\x63\x65\x64\x65\x64\x65\x22\x2c\x0a\x22\x23\x39\
+\x20\x63\x20\x23\x64\x36\x63\x36\x31\x30\x22\x2c\x0a\x22\x23\x32\
+\x20\x63\x20\x23\x64\x36\x63\x36\x33\x31\x22\x2c\x0a\x22\x61\x70\
+\x20\x63\x20\x23\x64\x65\x63\x36\x30\x38\x22\x2c\x0a\x22\x61\x68\
+\x20\x63\x20\x23\x64\x65\x63\x65\x31\x30\x22\x2c\x0a\x22\x61\x62\
+\x20\x63\x20\x23\x64\x65\x63\x65\x33\x31\x22\x2c\x0a\x22\x2e\x6c\
+\x20\x63\x20\x23\x64\x65\x65\x66\x65\x37\x22\x2c\x0a\x22\x2e\x52\
+\x20\x63\x20\x23\x64\x65\x65\x66\x65\x66\x22\x2c\x0a\x22\x61\x75\
+\x20\x63\x20\x23\x65\x37\x63\x65\x30\x38\x22\x2c\x0a\x22\x61\x2e\
+\x20\x63\x20\x23\x65\x37\x64\x36\x32\x31\x22\x2c\x0a\x22\x61\x23\
+\x20\x63\x20\x23\x65\x37\x64\x36\x33\x31\x22\x2c\x0a\x22\x61\x61\
+\x20\x63\x20\x23\x65\x37\x64\x36\x33\x39\x22\x2c\x0a\x22\x23\x31\
+\x20\x63\x20\x23\x65\x37\x64\x65\x33\x39\x22\x2c\x0a\x22\x23\x59\
+\x20\x63\x20\x23\x65\x66\x64\x65\x31\x30\x22\x2c\x0a\x22\x61\x76\
+\x20\x63\x20\x23\x65\x66\x64\x65\x32\x31\x22\x2c\x0a\x22\x61\x41\
+\x20\x63\x20\x23\x65\x66\x64\x65\x32\x39\x22\x2c\x0a\x22\x23\x5a\
+\x20\x63\x20\x23\x66\x37\x65\x37\x32\x39\x22\x2c\x0a\x22\x23\x30\
+\x20\x63\x20\x23\x66\x37\x65\x37\x33\x39\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x23\x2e\x61\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\
+\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x62\
+\x2e\x63\x2e\x64\x2e\x65\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x2e\x66\x2e\x67\x2e\x68\x2e\x69\x2e\x62\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x2e\x6a\x2e\x6b\x2e\x6c\x2e\x65\x2e\x6d\x2e\x6e\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x2e\x62\x2e\x61\x2e\x6f\x2e\x70\x2e\x71\
+\x2e\x72\x2e\x73\x2e\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\
+\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x75\x2e\x76\x2e\x77\
+\x2e\x6b\x2e\x78\x2e\x79\x2e\x7a\x2e\x41\x2e\x62\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x74\x2e\x6b\
+\x2e\x42\x2e\x43\x2e\x6b\x2e\x44\x2e\x45\x2e\x46\x2e\x47\x2e\x48\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x62\
+\x2e\x23\x2e\x23\x2e\x6f\x2e\x49\x2e\x62\x2e\x63\x2e\x4a\x2e\x4b\
+\x2e\x4c\x2e\x4d\x2e\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x2e\x61\x2e\x4e\x2e\x4f\x2e\x50\x2e\x51\x2e\x52\x2e\x6f\
+\x2e\x53\x2e\x54\x2e\x55\x2e\x56\x2e\x73\x2e\x62\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\
+\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x2e\x74\x2e\x4e\x2e\x50\x2e\x57\x2e\x6b\x2e\x58\
+\x2e\x52\x2e\x50\x2e\x59\x2e\x69\x2e\x41\x2e\x5a\x2e\x30\x2e\x31\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x2e\x62\x2e\x78\x2e\x32\x2e\x77\x2e\x33\
+\x2e\x34\x2e\x49\x2e\x6a\x2e\x23\x2e\x35\x2e\x36\x2e\x4c\x2e\x46\
+\x2e\x37\x2e\x30\x2e\x63\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x6e\x2e\x38\x2e\x39\
+\x2e\x70\x23\x2e\x2e\x6f\x2e\x34\x2e\x78\x2e\x78\x2e\x78\x23\x23\
+\x2e\x73\x23\x61\x23\x62\x2e\x73\x23\x63\x2e\x62\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x74\x2e\x44\
+\x2e\x23\x23\x64\x23\x65\x2e\x68\x23\x66\x2e\x6f\x2e\x50\x2e\x32\
+\x2e\x32\x23\x67\x23\x23\x23\x68\x2e\x41\x2e\x7a\x23\x69\x2e\x4b\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\
+\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x62\
+\x23\x6a\x2e\x50\x2e\x66\x2e\x50\x23\x6b\x2e\x71\x2e\x34\x2e\x58\
+\x23\x6c\x23\x6d\x23\x6e\x2e\x6e\x23\x6f\x2e\x4a\x2e\x36\x23\x70\
+\x23\x69\x23\x71\x2e\x63\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x2e\x57\x23\x6d\x23\x6b\x2e\x4f\x23\x6d\x23\x72\x2e\x35\
+\x2e\x6b\x23\x73\x23\x74\x23\x6d\x2e\x71\x23\x72\x2e\x55\x2e\x45\
+\x2e\x54\x23\x70\x23\x75\x23\x69\x2e\x4d\x2e\x65\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x2e\x62\x2e\x78\x23\x72\x2e\x6f\x2e\x74\x23\x76\
+\x2e\x66\x2e\x6f\x2e\x34\x2e\x6c\x23\x6c\x23\x77\x23\x78\x2e\x66\
+\x2e\x69\x23\x6f\x2e\x45\x23\x23\x23\x61\x2e\x6d\x23\x79\x2e\x6e\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x62\x2e\x65\x2e\x63\x23\x64\
+\x2e\x6f\x23\x7a\x2e\x75\x2e\x71\x23\x66\x2e\x49\x2e\x71\x2e\x23\
+\x2e\x23\x2e\x32\x23\x41\x2e\x55\x2e\x6d\x23\x42\x23\x68\x2e\x68\
+\x2e\x6a\x2e\x62\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\
+\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x2e\x62\x23\x43\x23\x44\x23\x45\x23\x46\x23\x47\x23\x47\
+\x23\x47\x23\x48\x23\x49\x23\x4a\x23\x4b\x23\x4c\x23\x4d\x23\x4e\
+\x2e\x69\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x2e\x62\x23\x4f\x23\x50\x23\x51\x23\x52\
+\x23\x53\x23\x54\x23\x55\x23\x4c\x23\x4d\x23\x56\x23\x57\x23\x4e\
+\x23\x56\x23\x56\x2e\x69\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x62\x23\x58\x23\x59\
+\x23\x5a\x23\x30\x23\x30\x23\x31\x23\x32\x23\x33\x23\x34\x23\x35\
+\x23\x36\x23\x37\x23\x4d\x23\x56\x23\x41\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x62\
+\x23\x38\x23\x39\x61\x2e\x61\x23\x61\x61\x61\x61\x61\x62\x61\x63\
+\x23\x33\x61\x64\x61\x65\x61\x66\x23\x37\x23\x4d\x2e\x4a\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\
+\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x2e\x62\x61\x67\x61\x68\x61\x2e\x61\x23\x23\x31\x61\x61\
+\x61\x61\x23\x32\x61\x69\x61\x6a\x61\x6b\x61\x6c\x61\x6d\x61\x6e\
+\x23\x41\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x61\x6f\x61\x70\x61\x2e\x61\x23\
+\x61\x61\x61\x71\x61\x72\x61\x71\x23\x33\x61\x6a\x23\x35\x61\x66\
+\x61\x6d\x61\x73\x2e\x4a\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x61\x74\x61\x75\
+\x61\x76\x61\x23\x61\x77\x23\x56\x23\x57\x23\x4d\x61\x78\x23\x34\
+\x61\x79\x61\x66\x61\x7a\x61\x6e\x2e\x4a\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x61\x74\x61\x68\x61\x41\x61\x42\x23\x57\x23\x4e\x23\x4d\x23\x56\
+\x23\x56\x23\x52\x61\x43\x61\x6c\x61\x7a\x61\x73\x2e\x4a\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\
+\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x2e\x62\x61\x44\x61\x70\x23\x5a\x23\x51\x23\x4e\x23\x4d\
+\x23\x56\x23\x4d\x23\x4e\x23\x36\x61\x6b\x61\x66\x61\x45\x61\x46\
+\x61\x47\x2e\x45\x23\x68\x2e\x4a\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x61\x48\x61\x49\x61\x68\x61\x41\x61\x42\
+\x23\x57\x23\x57\x23\x4e\x23\x57\x61\x4a\x23\x36\x61\x4b\x61\x6c\
+\x61\x6d\x61\x46\x23\x57\x61\x4a\x61\x4a\x23\x79\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x71\x61\x4c\x61\x49\x61\x68\
+\x61\x76\x61\x4d\x23\x57\x61\x4a\x23\x57\x23\x44\x61\x4e\x23\x52\
+\x61\x65\x61\x6c\x61\x4f\x61\x6e\x23\x4e\x61\x4e\x61\x50\x61\x51\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x6a\x61\x52\x61\x53\
+\x61\x54\x61\x55\x61\x76\x61\x42\x23\x57\x61\x4e\x61\x50\x61\x4c\
+\x61\x56\x61\x57\x61\x65\x61\x58\x23\x36\x61\x59\x61\x5a\x61\x30\
+\x61\x31\x61\x32\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x2c\
+\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x2e\x62\x61\x33\
+\x61\x34\x61\x35\x61\x35\x61\x56\x61\x36\x61\x31\x61\x5a\x61\x37\
+\x61\x53\x61\x53\x61\x35\x61\x38\x61\x39\x61\x34\x61\x35\x62\x2e\
+\x62\x23\x61\x35\x61\x35\x2e\x6b\x51\x74\x51\x74\x51\x74\x51\x74\
+\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\
+\x62\x61\x61\x37\x61\x37\x61\x56\x61\x30\x62\x2e\x62\x23\x61\x37\
+\x62\x23\x61\x30\x61\x37\x61\x37\x61\x37\x61\x53\x61\x53\x61\x37\
+\x62\x2e\x61\x56\x61\x30\x61\x56\x61\x52\x2e\x23\x51\x74\x51\x74\
+\x51\x74\x51\x74\x51\x74\x22\x2c\x0a\x22\x51\x74\x51\x74\x51\x74\
+\x51\x74\x51\x74\x62\x62\x62\x63\x62\x64\x62\x65\x62\x65\x62\x66\
+\x62\x67\x62\x68\x62\x68\x62\x69\x62\x6a\x62\x6a\x62\x6b\x62\x6b\
+\x62\x6c\x62\x6d\x62\x6d\x62\x6e\x62\x6f\x62\x70\x62\x71\x2e\x62\
+\x51\x74\x51\x74\x51\x74\x51\x74\x51\x74\x22\x7d\x3b\x0a\
+\x00\x00\x00\xad\
+\x00\
+\x00\x04\xda\x78\x9c\xd3\xd7\x52\x88\x08\xf0\x55\xd0\xd2\xe7\x2a\
+\x2e\x49\x2c\xc9\x4c\x56\x48\xce\x48\x2c\x52\xd0\xca\xcc\x4d\x4c\
+\x4f\x35\x88\x8e\xb5\xad\xe6\x52\x32\x36\x52\x00\x21\x05\x43\x25\
+\x1d\x2e\x25\x3d\x85\x64\x05\xbf\xfc\xbc\x54\x10\x3b\x11\xc8\x56\
+\x36\x00\x02\x0b\x03\x10\x57\x19\xc4\xb5\x30\xb0\x80\x72\xf5\x08\
+\x80\x51\x35\x60\xa0\x9c\x08\x03\x38\xd5\x20\x94\x20\x29\x4a\x44\
+\x51\xa3\x8c\x90\x42\x66\x21\xab\x51\x46\xd1\x0d\xe5\x24\xa2\xaa\
+\x41\x75\x05\x44\x51\x22\x86\x1a\x54\x77\x22\xbb\x0c\x97\x1a\x3d\
+\x2a\xa9\x21\xc2\xae\x44\x6c\x6a\x94\x31\xfc\x85\xa9\x06\x45\x51\
+\x22\x0e\x35\x40\x09\x65\x3d\xec\x00\x29\x4e\x71\x2a\x1a\xc4\xe9\
+\x70\x78\xa9\xa9\xb5\xe6\x02\x00\x3d\x48\xf5\x6a\
+\x00\x00\x00\xad\
+\x00\
+\x00\x04\xda\x78\x9c\xd3\xd7\x52\x88\x08\xf0\x55\xd0\xd2\xe7\x2a\
+\x2e\x49\x2c\xc9\x4c\x56\x48\xce\x48\x2c\x52\xd0\xca\xcc\x4d\x4c\
+\x4f\x35\x89\x8e\xb5\xad\xe6\x52\x32\x36\x52\x00\x21\x05\x43\x25\
+\x1d\x2e\x25\x3d\x85\x64\x05\xbf\xfc\xbc\x54\x10\x5b\x19\xc8\x56\
+\x36\x00\x02\x0b\x03\x10\x37\x11\xc4\xb5\x30\xb0\x80\x72\xf5\x08\
+\x80\x51\x35\x24\xab\x51\x86\x81\x44\x34\x35\xca\x98\x4a\xe0\x8a\
+\xe0\x6a\x94\x11\x4a\x10\xac\x44\x34\x35\xca\x30\x43\x90\x4d\x4c\
+\x44\x53\xa3\x8c\xa6\x04\xae\x11\x59\x0d\x9a\x0a\xb8\x0b\xd0\xd4\
+\x60\x78\x91\x4c\x35\xc4\xd8\x85\xa6\x08\x87\x1a\x54\x7f\x61\xf8\
+\x1d\x5d\x11\x7a\x18\x62\x01\x89\x30\xe5\xb8\xd5\xc0\x95\x0c\x74\
+\x1a\x1b\x1e\x6a\x6a\xad\xb9\x00\xc3\x36\xd8\x5e\
+"
+
+qt_resource_name = b"\
+\x00\x05\
+\x00\x6f\xa6\x53\
+\x00\x69\
+\x00\x63\x00\x6f\x00\x6e\x00\x73\
+\x00\x0a\
+\x0d\x8c\x59\x8d\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x33\x00\x2e\x00\x78\x00\x70\x00\x6d\
+\x00\x0a\
+\x0d\x8b\x59\x8d\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x32\x00\x2e\x00\x78\x00\x70\x00\x6d\
+\x00\x0a\
+\x0d\x87\x59\x8d\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x36\x00\x2e\x00\x78\x00\x70\x00\x6d\
+\x00\x0a\
+\x0d\x8e\x59\x8d\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x31\x00\x2e\x00\x78\x00\x70\x00\x6d\
+\x00\x0a\
+\x0d\x8a\x59\x8d\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x35\x00\x2e\x00\x78\x00\x70\x00\x6d\
+\x00\x0a\
+\x0d\x8d\x59\x8d\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x30\x00\x2e\x00\x78\x00\x70\x00\x6d\
+\x00\x0a\
+\x0d\x89\x59\x8d\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x34\x00\x2e\x00\x78\x00\x70\x00\x6d\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x02\
+\x00\x00\x00\x44\x00\x00\x00\x00\x00\x01\x00\x00\x05\xc8\
+\x00\x00\x00\xac\x00\x01\x00\x00\x00\x01\x00\x00\x30\x1d\
+\x00\x00\x00\x78\x00\x00\x00\x00\x00\x01\x00\x00\x19\x89\
+\x00\x00\x00\x2a\x00\x01\x00\x00\x00\x01\x00\x00\x00\xab\
+\x00\x00\x00\x10\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x92\x00\x01\x00\x00\x00\x01\x00\x00\x2f\x6c\
+\x00\x00\x00\x5e\x00\x01\x00\x00\x00\x01\x00\x00\x14\x6b\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/activeqt/webbrowser/ui_mainwindow.py b/examples/activeqt/webbrowser/ui_mainwindow.py
new file mode 100644
index 0000000..971eb45
--- /dev/null
+++ b/examples/activeqt/webbrowser/ui_mainwindow.py
@@ -0,0 +1,143 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'mainwindow.ui'
+#
+# Created: Fri Jul 26 06:46:58 2013
+#      by: PyQt5 UI code generator 5.0.1-snapshot-2a99e59669ee
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_MainWindow(object):
+    def setupUi(self, MainWindow):
+        MainWindow.setObjectName("MainWindow")
+        MainWindow.resize(812, 605)
+        self.centralWidget = QtWidgets.QWidget(MainWindow)
+        self.centralWidget.setObjectName("centralWidget")
+        self.hboxlayout = QtWidgets.QHBoxLayout(self.centralWidget)
+        self.hboxlayout.setContentsMargins(0, 0, 0, 0)
+        self.hboxlayout.setSpacing(6)
+        self.hboxlayout.setObjectName("hboxlayout")
+        self.Frame3 = QtWidgets.QFrame(self.centralWidget)
+        self.Frame3.setFrameShape(QtWidgets.QFrame.StyledPanel)
+        self.Frame3.setFrameShadow(QtWidgets.QFrame.Sunken)
+        self.Frame3.setObjectName("Frame3")
+        self.vboxlayout = QtWidgets.QVBoxLayout(self.Frame3)
+        self.vboxlayout.setContentsMargins(1, 1, 1, 1)
+        self.vboxlayout.setSpacing(0)
+        self.vboxlayout.setObjectName("vboxlayout")
+        self.WebBrowser = QAxContainer.QAxWidget(self.Frame3)
+        self.WebBrowser.setFocusPolicy(QtCore.Qt.StrongFocus)
+        self.WebBrowser.setControl("{8856F961-340A-11D0-A96B-00C04FD705A2}")
+        self.WebBrowser.setObjectName("WebBrowser")
+        self.vboxlayout.addWidget(self.WebBrowser)
+        self.hboxlayout.addWidget(self.Frame3)
+        MainWindow.setCentralWidget(self.centralWidget)
+        self.tbNavigate = QtWidgets.QToolBar(MainWindow)
+        self.tbNavigate.setOrientation(QtCore.Qt.Horizontal)
+        self.tbNavigate.setObjectName("tbNavigate")
+        MainWindow.addToolBar(4, self.tbNavigate)
+        self.tbAddress = QtWidgets.QToolBar(MainWindow)
+        self.tbAddress.setOrientation(QtCore.Qt.Horizontal)
+        self.tbAddress.setObjectName("tbAddress")
+        MainWindow.addToolBar(4, self.tbAddress)
+        self.menubar = QtWidgets.QMenuBar(MainWindow)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 812, 26))
+        self.menubar.setObjectName("menubar")
+        self.PopupMenu = QtWidgets.QMenu(self.menubar)
+        self.PopupMenu.setObjectName("PopupMenu")
+        self.FileNewGroup_2 = QtWidgets.QMenu(self.PopupMenu)
+        self.FileNewGroup_2.setObjectName("FileNewGroup_2")
+        self.unnamed = QtWidgets.QMenu(self.menubar)
+        self.unnamed.setObjectName("unnamed")
+        MainWindow.setMenuBar(self.menubar)
+        self.actionGo = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon()
+        icon.addFile(":/icons/image0.xpm")
+        self.actionGo.setIcon(icon)
+        self.actionGo.setObjectName("actionGo")
+        self.actionBack = QtWidgets.QAction(MainWindow)
+        icon1 = QtGui.QIcon()
+        icon1.addFile(":/icons/image1.xpm")
+        self.actionBack.setIcon(icon1)
+        self.actionBack.setObjectName("actionBack")
+        self.actionForward = QtWidgets.QAction(MainWindow)
+        icon2 = QtGui.QIcon()
+        icon2.addFile(":/icons/image2.xpm")
+        self.actionForward.setIcon(icon2)
+        self.actionForward.setObjectName("actionForward")
+        self.actionStop = QtWidgets.QAction(MainWindow)
+        icon3 = QtGui.QIcon()
+        icon3.addFile(":/icons/image3.xpm")
+        self.actionStop.setIcon(icon3)
+        self.actionStop.setObjectName("actionStop")
+        self.actionRefresh = QtWidgets.QAction(MainWindow)
+        icon4 = QtGui.QIcon()
+        icon4.addFile(":/icons/image4.xpm")
+        self.actionRefresh.setIcon(icon4)
+        self.actionRefresh.setObjectName("actionRefresh")
+        self.actionHome = QtWidgets.QAction(MainWindow)
+        icon5 = QtGui.QIcon()
+        icon5.addFile(":/icons/image5.xpm")
+        self.actionHome.setIcon(icon5)
+        self.actionHome.setObjectName("actionHome")
+        self.actionFileClose = QtWidgets.QAction(MainWindow)
+        self.actionFileClose.setObjectName("actionFileClose")
+        self.actionSearch = QtWidgets.QAction(MainWindow)
+        icon6 = QtGui.QIcon()
+        icon6.addFile(":/icons/image6.xpm")
+        self.actionSearch.setIcon(icon6)
+        self.actionSearch.setObjectName("actionSearch")
+        self.actionAbout = QtWidgets.QAction(MainWindow)
+        self.actionAbout.setObjectName("actionAbout")
+        self.actionAboutQt = QtWidgets.QAction(MainWindow)
+        self.actionAboutQt.setObjectName("actionAboutQt")
+        self.FileNewGroup = QtWidgets.QActionGroup(MainWindow)
+        self.FileNewGroup.setObjectName("FileNewGroup")
+        self.actionNewWindow = QtWidgets.QAction(self.FileNewGroup)
+        self.actionNewWindow.setObjectName("actionNewWindow")
+        self.tbNavigate.addAction(self.actionBack)
+        self.tbNavigate.addAction(self.actionForward)
+        self.tbNavigate.addAction(self.actionStop)
+        self.tbNavigate.addAction(self.actionRefresh)
+        self.tbNavigate.addAction(self.actionHome)
+        self.tbNavigate.addSeparator()
+        self.tbNavigate.addAction(self.actionSearch)
+        self.tbAddress.addAction(self.actionGo)
+        self.FileNewGroup_2.addAction(self.actionNewWindow)
+        self.PopupMenu.addAction(self.FileNewGroup_2.menuAction())
+        self.PopupMenu.addSeparator()
+        self.PopupMenu.addAction(self.actionFileClose)
+        self.unnamed.addAction(self.actionAbout)
+        self.unnamed.addAction(self.actionAboutQt)
+        self.menubar.addAction(self.PopupMenu.menuAction())
+        self.menubar.addAction(self.unnamed.menuAction())
+
+        self.retranslateUi(MainWindow)
+        QtCore.QMetaObject.connectSlotsByName(MainWindow)
+
+    def retranslateUi(self, MainWindow):
+        _translate = QtCore.QCoreApplication.translate
+        MainWindow.setWindowTitle(_translate("MainWindow", "Qt WebBrowser"))
+        self.tbNavigate.setWindowTitle(_translate("MainWindow", "Navigation"))
+        self.tbAddress.setWindowTitle(_translate("MainWindow", "Address"))
+        self.PopupMenu.setTitle(_translate("MainWindow", "&File"))
+        self.FileNewGroup_2.setTitle(_translate("MainWindow", "New"))
+        self.unnamed.setTitle(_translate("MainWindow", "&Help"))
+        self.actionGo.setIconText(_translate("MainWindow", "Go"))
+        self.actionBack.setIconText(_translate("MainWindow", "Back"))
+        self.actionBack.setShortcut(_translate("MainWindow", "Backspace"))
+        self.actionForward.setIconText(_translate("MainWindow", "Forward"))
+        self.actionStop.setIconText(_translate("MainWindow", "Stop"))
+        self.actionRefresh.setIconText(_translate("MainWindow", "Refresh"))
+        self.actionHome.setIconText(_translate("MainWindow", "Home"))
+        self.actionFileClose.setText(_translate("MainWindow", "C&lose"))
+        self.actionFileClose.setIconText(_translate("MainWindow", "Close"))
+        self.actionSearch.setIconText(_translate("MainWindow", "Search"))
+        self.actionAbout.setIconText(_translate("MainWindow", "About"))
+        self.actionAboutQt.setIconText(_translate("MainWindow", "About Qt"))
+        self.actionNewWindow.setIconText(_translate("MainWindow", "Window"))
+        self.actionNewWindow.setShortcut(_translate("MainWindow", "Ctrl+N"))
+
+from PyQt5 import QAxContainer
diff --git a/examples/activeqt/webbrowser/webbrowser.py b/examples/activeqt/webbrowser/webbrowser.py
new file mode 100755
index 0000000..2c8afff
--- /dev/null
+++ b/examples/activeqt/webbrowser/webbrowser.py
@@ -0,0 +1,147 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import pyqtSlot
+from PyQt5.QtWidgets import (QApplication, QLabel, QLineEdit, QMainWindow,
+        QMessageBox, QProgressBar)
+
+import mainwindow_rc
+from ui_mainwindow import Ui_MainWindow
+
+
+class MainWindow(QMainWindow, Ui_MainWindow):
+    # Maintain the list of browser windows so that they do not get garbage
+    # collected.
+    _window_list = []
+
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        MainWindow._window_list.append(self)
+
+        self.setupUi(self)
+
+        # Qt Designer (at least to v4.2.1) can't handle arbitrary widgets in a
+        # QToolBar - even though uic can, and they are in the original .ui
+        # file.  Therefore we manually add the problematic widgets.
+        self.lblAddress = QLabel("Address", self.tbAddress)
+        self.tbAddress.insertWidget(self.actionGo, self.lblAddress)
+        self.addressEdit = QLineEdit(self.tbAddress)
+        self.tbAddress.insertWidget(self.actionGo, self.addressEdit)
+
+        self.addressEdit.returnPressed.connect(self.actionGo.trigger)
+        self.actionBack.triggered.connect(self.WebBrowser.GoBack)
+        self.actionForward.triggered.connect(self.WebBrowser.GoForward)
+        self.actionStop.triggered.connect(self.WebBrowser.Stop)
+        self.actionRefresh.triggered.connect(self.WebBrowser.Refresh)
+        self.actionHome.triggered.connect(self.WebBrowser.GoHome)
+        self.actionSearch.triggered.connect(self.WebBrowser.GoSearch)
+
+        self.pb = QProgressBar(self.statusBar())
+        self.pb.setTextVisible(False)
+        self.pb.hide()
+        self.statusBar().addPermanentWidget(self.pb)
+
+        self.WebBrowser.dynamicCall('GoHome()')
+
+    def closeEvent(self, e):
+        MainWindow._window_list.remove(self)
+        e.accept()
+
+    def on_WebBrowser_TitleChange(self, title):
+        self.setWindowTitle("Qt WebBrowser - " + title)
+
+    def on_WebBrowser_ProgressChange(self, a, b):
+        if a <= 0 or b <= 0:
+            self.pb.hide()
+            return
+
+        self.pb.show()
+        self.pb.setRange(0, b)
+        self.pb.setValue(a)
+
+    def on_WebBrowser_CommandStateChange(self, cmd, on):
+        if cmd == 1:
+            self.actionForward.setEnabled(on)
+        elif cmd == 2:
+            self.actionBack.setEnabled(on)
+
+    def on_WebBrowser_BeforeNavigate(self):
+        self.actionStop.setEnabled(True)
+
+    def on_WebBrowser_NavigateComplete(self, _):
+        self.actionStop.setEnabled(False)
+
+    @pyqtSlot()
+    def on_actionGo_triggered(self):
+        self.WebBrowser.dynamicCall('Navigate(const QString&)',
+                self.addressEdit.text())
+
+    @pyqtSlot()
+    def on_actionNewWindow_triggered(self):
+        window = MainWindow()
+        window.show()
+        if self.addressEdit.text().isEmpty():
+            return;
+
+        window.addressEdit.setText(self.addressEdit.text())
+        window.actionStop.setEnabled(True)
+        window.on_actionGo_triggered()
+
+    @pyqtSlot()
+    def on_actionAbout_triggered(self):
+        QMessageBox.about(self, "About WebBrowser",
+                "This Example has been created using the ActiveQt integration into Qt Designer.\n"
+                "It demonstrates the use of QAxWidget to embed the Internet Explorer ActiveX\n"
+                "control into a Qt application.")
+
+    @pyqtSlot()
+    def on_actionAboutQt_triggered(self):
+        QMessageBox.aboutQt(self, "About Qt")
+
+
+if __name__ == "__main__":
+    a = QApplication(sys.argv)
+    w = MainWindow()
+    w.show()
+    sys.exit(a.exec_())
diff --git a/examples/animation/README b/examples/animation/README
new file mode 100644
index 0000000..efac411
--- /dev/null
+++ b/examples/animation/README
@@ -0,0 +1,24 @@
+The animation framework aims to provide an easy way for creating animated and
+smooth GUI's. By animating PyQt properties, the framework provides great
+freedom for animating widgets and other QObjects. The framework can also be
+used with the Graphics View framework.
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/animation/animatedtiles/animatedtiles.py b/examples/animation/animatedtiles/animatedtiles.py
new file mode 100755
index 0000000..4416d36
--- /dev/null
+++ b/examples/animation/animatedtiles/animatedtiles.py
@@ -0,0 +1,263 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (pyqtProperty, pyqtSignal, QEasingCurve, QObject,
+        QParallelAnimationGroup, QPointF, QPropertyAnimation, qrand, QRectF,
+        QState, QStateMachine, Qt, QTimer)
+from PyQt5.QtGui import (QBrush, QLinearGradient, QPainter, QPainterPath,
+        QPixmap)
+from PyQt5.QtWidgets import (QApplication, QGraphicsItem, QGraphicsPixmapItem,
+        QGraphicsRectItem, QGraphicsScene, QGraphicsView, QGraphicsWidget,
+        QStyle)
+
+import animatedtiles_rc
+
+
+# PyQt doesn't support deriving from more than one wrapped class so we use
+# composition and delegate the property.
+class Pixmap(QObject):
+    def __init__(self, pix):
+        super(Pixmap, self).__init__()
+
+        self.pixmap_item = QGraphicsPixmapItem(pix)
+        self.pixmap_item.setCacheMode(QGraphicsItem.DeviceCoordinateCache)
+
+    def _set_pos(self, pos):
+        self.pixmap_item.setPos(pos)
+
+    pos = pyqtProperty(QPointF, fset=_set_pos)
+
+
+class Button(QGraphicsWidget):
+    pressed = pyqtSignal()
+
+    def __init__(self, pixmap, parent=None):
+        super(Button, self).__init__(parent)
+
+        self._pix = pixmap
+
+        self.setAcceptHoverEvents(True)
+        self.setCacheMode(QGraphicsItem.DeviceCoordinateCache)
+
+    def boundingRect(self):
+        return QRectF(-65, -65, 130, 130)
+
+    def shape(self):
+        path = QPainterPath()
+        path.addEllipse(self.boundingRect())
+
+        return path
+
+    def paint(self, painter, option, widget):
+        down = option.state & QStyle.State_Sunken
+        r = self.boundingRect()
+
+        grad = QLinearGradient(r.topLeft(), r.bottomRight())
+        if option.state & QStyle.State_MouseOver:
+            color_0 = Qt.white
+        else:
+            color_0 = Qt.lightGray
+
+        color_1 = Qt.darkGray
+
+        if down:
+            color_0, color_1 = color_1, color_0
+
+        grad.setColorAt(0, color_0)
+        grad.setColorAt(1, color_1)
+
+        painter.setPen(Qt.darkGray)
+        painter.setBrush(grad)
+        painter.drawEllipse(r)
+
+        color_0 = Qt.darkGray
+        color_1 = Qt.lightGray
+
+        if down:
+            color_0, color_1 = color_1, color_0
+
+        grad.setColorAt(0, color_0)
+        grad.setColorAt(1, color_1)
+
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(grad)
+
+        if down:
+            painter.translate(2, 2)
+
+        painter.drawEllipse(r.adjusted(5, 5, -5, -5))
+        painter.drawPixmap(-self._pix.width() / 2, -self._pix.height() / 2,
+                self._pix)
+
+    def mousePressEvent(self, ev):
+        self.pressed.emit()
+        self.update()
+
+    def mouseReleaseEvent(self, ev):
+        self.update()
+
+
+class View(QGraphicsView):
+    def resizeEvent(self, event):
+        super(View, self).resizeEvent(event)
+        self.fitInView(self.sceneRect(), Qt.KeepAspectRatio)
+
+
+if __name__ == '__main__':
+
+    import sys
+    import math
+
+    app = QApplication(sys.argv)
+
+    kineticPix = QPixmap(':/images/kinetic.png')
+    bgPix = QPixmap(':/images/Time-For-Lunch-2.jpg')
+
+    scene = QGraphicsScene(-350, -350, 700, 700)
+
+    items = []
+    for i in range(64):
+        item = Pixmap(kineticPix)
+        item.pixmap_item.setOffset(-kineticPix.width() / 2,
+                -kineticPix.height() / 2)
+        item.pixmap_item.setZValue(i)
+        items.append(item)
+        scene.addItem(item.pixmap_item)
+
+    # Buttons.
+    buttonParent = QGraphicsRectItem()
+    ellipseButton = Button(QPixmap(':/images/ellipse.png'), buttonParent)
+    figure8Button = Button(QPixmap(':/images/figure8.png'), buttonParent)
+    randomButton = Button(QPixmap(':/images/random.png'), buttonParent)
+    tiledButton = Button(QPixmap(':/images/tile.png'), buttonParent)
+    centeredButton = Button(QPixmap(':/images/centered.png'), buttonParent)
+
+    ellipseButton.setPos(-100, -100)
+    figure8Button.setPos(100, -100)
+    randomButton.setPos(0, 0)
+    tiledButton.setPos(-100, 100)
+    centeredButton.setPos(100, 100)
+
+    scene.addItem(buttonParent)
+    buttonParent.setScale(0.75)
+    buttonParent.setPos(200, 200)
+    buttonParent.setZValue(65)
+
+    # States.
+    rootState = QState()
+    ellipseState = QState(rootState)
+    figure8State = QState(rootState)
+    randomState = QState(rootState)
+    tiledState = QState(rootState)
+    centeredState = QState(rootState)
+
+    # Values.
+    for i, item in enumerate(items):
+        # Ellipse.
+        ellipseState.assignProperty(item, 'pos',
+                QPointF(math.cos((i / 63.0) * 6.28) * 250,
+                        math.sin((i / 63.0) * 6.28) * 250))
+
+        # Figure 8.
+        figure8State.assignProperty(item, 'pos',
+                QPointF(math.sin((i / 63.0) * 6.28) * 250,
+                        math.sin(((i * 2)/63.0) * 6.28) * 250))
+
+        # Random.
+        randomState.assignProperty(item, 'pos',
+                QPointF(-250 + qrand() % 500, -250 + qrand() % 500))
+
+        # Tiled.
+        tiledState.assignProperty(item, 'pos',
+                QPointF(((i % 8) - 4) * kineticPix.width() + kineticPix.width() / 2,
+                        ((i // 8) - 4) * kineticPix.height() + kineticPix.height() / 2))
+
+        # Centered.
+        centeredState.assignProperty(item, 'pos', QPointF())
+
+    # Ui.
+    view = View(scene)
+    view.setWindowTitle("Animated Tiles")
+    view.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
+    view.setBackgroundBrush(QBrush(bgPix))
+    view.setCacheMode(QGraphicsView.CacheBackground)
+    view.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
+    view.show()
+
+    states = QStateMachine()
+    states.addState(rootState)
+    states.setInitialState(rootState)
+    rootState.setInitialState(centeredState)
+
+    group = QParallelAnimationGroup()
+    for i, item in enumerate(items):
+        anim = QPropertyAnimation(item, 'pos')
+        anim.setDuration(750 + i * 25)
+        anim.setEasingCurve(QEasingCurve.InOutBack)
+        group.addAnimation(anim)
+
+    trans = rootState.addTransition(ellipseButton.pressed, ellipseState)
+    trans.addAnimation(group)
+
+    trans = rootState.addTransition(figure8Button.pressed, figure8State)
+    trans.addAnimation(group)
+
+    trans = rootState.addTransition(randomButton.pressed, randomState)
+    trans.addAnimation(group)
+
+    trans = rootState.addTransition(tiledButton.pressed, tiledState)
+    trans.addAnimation(group)
+
+    trans = rootState.addTransition(centeredButton.pressed, centeredState)
+    trans.addAnimation(group)
+
+    timer = QTimer()
+    timer.start(125)
+    timer.setSingleShot(True)
+    trans = rootState.addTransition(timer.timeout, ellipseState)
+    trans.addAnimation(group)
+
+    states.start()
+
+    sys.exit(app.exec_())
diff --git a/examples/animation/animatedtiles/animatedtiles.qrc b/examples/animation/animatedtiles/animatedtiles.qrc
new file mode 100644
index 0000000..c43a979
--- /dev/null
+++ b/examples/animation/animatedtiles/animatedtiles.qrc
@@ -0,0 +1,11 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>images/Time-For-Lunch-2.jpg</file>
+    <file>images/centered.png</file>
+    <file>images/ellipse.png</file>
+    <file>images/figure8.png</file>
+    <file>images/kinetic.png</file>
+    <file>images/random.png</file>
+    <file>images/tile.png</file>
+</qresource>
+</RCC>
diff --git a/examples/animation/animatedtiles/animatedtiles_rc.py b/examples/animation/animatedtiles/animatedtiles_rc.py
new file mode 100644
index 0000000..aba415e
--- /dev/null
+++ b/examples/animation/animatedtiles/animatedtiles_rc.py
@@ -0,0 +1,6103 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Thu May 2 15:49:03 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x36\xe2\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x64\x00\x00\x00\x64\x08\x06\x00\x00\x00\x70\xe2\x95\x54\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\
+\x95\x2b\x0e\x1b\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\
+\x0e\x1c\x24\x7c\x1a\xa6\xff\x00\x00\x20\x00\x49\x44\x41\x54\x78\
+\xda\xed\x9d\x77\x98\x9d\x65\x9d\xf7\x3f\xf7\x53\x4e\x9f\x99\x33\
+\x33\x99\x4c\x66\x12\x32\xa9\xa4\x03\x91\x90\x10\x6a\xe8\x48\xd9\
+\x05\xa5\x88\xc8\xba\xeb\xcb\xb2\xae\x04\x51\x57\x5f\x57\x5d\x5d\
+\x76\x5d\x45\x51\x56\x50\x71\x59\x75\xa5\x59\xc0\x12\x3a\x16\x88\
+\x94\x00\x09\x29\xa4\x4d\xea\xb4\x4c\xa6\xcf\x9c\x39\xbd\x3d\xf5\
+\x7e\xff\x38\xf3\x3c\x99\x41\x94\x34\x7d\xdf\xeb\xbd\xb8\xaf\x2b\
+\x57\x32\xc9\xc9\x79\xca\xf7\xfe\xb5\xef\xaf\xdc\xf0\xee\x7a\x77\
+\xbd\xbb\xde\x5d\xef\xae\x77\xd7\xbb\xeb\xdd\xf5\xee\x7a\x77\xfd\
+\x7f\xbf\xc4\xb1\xfc\xe7\xba\xba\xba\xab\x0c\xc3\x08\x4e\x99\x32\
+\xe5\x73\x2b\x57\xae\x3c\x51\x51\x14\xb6\x6d\xdb\x46\x6d\x6d\xed\
+\xa1\x0b\xb8\x02\x09\x20\xe4\x1f\x5c\x4d\x55\xd5\x94\xa2\x28\xf9\
+\x72\xb9\xac\xbf\xfa\xea\xab\xb3\xfe\x6f\xbf\x8c\xda\xda\xda\x9f\
+\x5d\x77\xdd\x75\x57\x97\xcb\x65\x17\x40\x41\xe0\x48\x89\xf8\x23\
+\x6f\xc9\x71\x1c\x02\x81\x00\xaf\xbf\xfe\xba\xb3\x60\xc1\x82\xc2\
+\xc0\xc0\x40\x6c\xcb\x96\x2d\xd3\x2d\xcb\x4a\x1e\xed\x3d\x68\xc7\
+\xf2\x00\x8b\x16\x2d\xfa\xe1\xcc\x99\x33\xeb\x37\x6f\xde\x4c\xa9\
+\x54\xc2\xb6\x6d\xea\xeb\xeb\x69\x68\x68\x40\x08\x41\xbf\x95\x62\
+\xda\x05\x45\xaa\xa2\x3a\x4e\x3a\x88\x93\xd1\x71\x73\x3a\x76\x4a\
+\x43\x16\x35\x80\xb0\x94\xf2\x0f\xbe\x77\xda\xb4\x69\xa2\xb7\xb7\
+\x57\xfe\x25\x40\xa8\xaa\xaa\xba\x60\xc5\x8a\x15\x6b\x74\x5d\x37\
+\x1d\xc7\xa9\xe9\xef\xed\xd3\x6d\x0b\x84\x22\x31\x30\x09\xc5\x04\
+\xb2\xa0\x4d\xd8\x4c\x42\x08\xf6\xee\xdd\xcb\xd2\xa5\x4b\xbd\x8d\
+\x85\xa6\x69\xb1\x58\x2c\x86\xeb\xba\xa7\x85\x42\xa1\x6c\x6d\x6d\
+\xed\xae\x81\x81\x81\xec\x9f\x1d\x90\x45\x8b\x16\xb1\x77\xef\xde\
+\x90\xe3\x38\x28\x8a\xe2\x94\x4a\x25\x5c\xd7\xc5\x34\x4d\x6c\xdb\
+\xc6\xb2\x2c\xca\xe5\x32\x42\x08\x8a\xdd\x09\xba\xba\xc3\x48\x69\
+\x22\x30\x91\xaa\x8b\x40\x80\xa8\x3c\xf0\x38\x19\x95\x67\x9c\x71\
+\x86\x04\xc8\x66\xb3\xb4\xb6\xb6\x8a\xbf\x94\x54\x94\xcb\xe5\xe6\
+\xc9\x93\x27\x57\x9b\xa6\x89\x82\xe0\x60\xb8\x87\x85\x17\x2a\xd8\
+\xc3\x41\xec\x44\x10\x67\x34\x88\x8c\x0a\xa4\xa9\x20\x2d\xa5\xf2\
+\xd2\x34\x0d\x55\x55\x31\x4d\x13\x45\x51\x70\x5d\x17\xc3\x30\x30\
+\x4d\x53\x5e\x75\xd5\x55\xbf\x11\x42\xf0\xda\x6b\xaf\x5d\x00\xfc\
+\xfe\xcf\x0e\x48\x47\x47\xc7\x9c\xd3\x4e\x3b\xad\xad\xb6\xb6\x96\
+\x42\xa1\x80\x69\x9a\x13\x00\xf1\x6e\x4e\x51\x14\xa6\x4c\x6d\x22\
+\x1c\x0e\xa3\x08\x41\xab\x71\x80\xe5\x1f\x82\x40\x40\xc1\x1e\xd5\
+\xb1\x7a\xa3\x98\x83\x01\x9c\xe1\x20\x42\xa9\x28\x05\x29\x25\xc1\
+\x60\xf0\x2f\xab\xb3\x85\xf0\x37\x92\x86\x8a\x3b\x3f\x43\x20\x5e\
+\x43\x20\x5e\x82\x13\x4b\x13\x3e\x3b\xf4\xe8\x24\xdc\xa2\x8a\xeb\
+\xba\x48\x29\x31\x0c\x03\x21\x04\x52\x4a\x2c\xcb\xc2\x75\x5d\x61\
+\x18\x06\x9a\xa6\x01\xb8\x7f\x11\x95\x55\x2e\x97\x1b\x1a\x1a\x1a\
+\x08\x85\x42\xe4\xf3\x79\x0c\xc3\xf0\x6f\xce\x71\x1c\x1c\xc7\xf1\
+\x6f\x34\x10\x08\x54\xc0\x11\x82\x5e\x7b\x84\xf3\x62\x4d\xb8\x46\
+\x90\x25\x4b\x4e\x61\xe7\xe4\x57\x89\x08\x89\xa2\xe8\xa4\x5f\xae\
+\xa2\xb0\x27\x8c\x94\x12\xd7\x75\xff\xec\x20\x44\xa3\xd1\xb3\xae\
+\xb9\xe6\x9a\x75\xa5\x52\xa9\xf2\x42\x5d\x29\x43\xf5\x42\xb8\x29\
+\x9d\x19\xbb\x4e\x61\x74\x97\xac\x48\xf0\x5b\xe4\xb4\x6d\xef\x2e\
+\x66\xcc\x98\xe1\x03\x32\x5e\x42\xca\xe5\xb2\xbf\x31\xa5\x94\x94\
+\xcb\xe5\x8f\x57\x55\x55\x5d\x57\x55\x55\xf5\x40\x7f\x7f\xff\xa6\
+\x3f\xab\x0d\xb1\x6d\x1b\xc3\x30\x7c\x69\xf0\x6e\xc4\x71\x1c\x7f\
+\xb7\x09\x21\x50\x55\x15\xcb\xb2\x90\xae\x4b\x7d\x3a\xc4\xc1\xa7\
+\x15\x4e\x08\x2e\x26\x57\x3f\x05\x3b\x31\x17\xac\x30\x49\x3a\x29\
+\x0c\x98\x38\x79\xc7\x07\xe4\xec\xb3\xcf\xfe\x1f\x29\x65\x20\x99\
+\x4c\x86\x7b\x7b\x7b\xff\x36\x9b\xcd\xe6\x8f\x27\x20\x52\xca\xb0\
+\xaa\xaa\x15\x89\x96\x92\x5d\x93\x77\x8a\xf3\xaf\xac\xc3\x95\x36\
+\x76\x56\x43\x64\xc3\xd8\x59\x0d\x27\xab\x51\xde\x1f\x41\x3a\xc2\
+\x97\xa6\x72\xb9\x8c\xa2\x54\x54\x97\x07\x88\x27\x21\x8e\xe3\x54\
+\x9e\x57\x4a\xb9\x6a\xd5\xaa\xab\x9b\x9b\x9b\x79\xf0\xc1\x07\xd7\
+\x03\x7f\x1e\x40\xa6\x4d\x9b\xb6\xb0\x54\x2a\xcd\xb7\x6d\x1b\x29\
+\x25\x8e\xe3\x4c\x50\x59\x8e\xe3\x00\xf8\x2a\x4b\xd3\x34\xff\x33\
+\x0b\x1b\x66\x13\x4d\x55\x91\x24\x41\x77\x7f\x37\xf1\xf7\x14\xd0\
+\xcc\x00\xd1\x44\x9c\x48\xbd\x86\xac\x11\x48\x43\x01\x57\x80\xe0\
+\x23\x00\xe1\x70\x98\xdd\xbb\x77\x7f\x14\x38\x26\x40\x9a\x9a\x9a\
+\x18\x18\x18\x18\x0f\x88\x34\x4d\x13\xd3\x34\x31\x5d\x9b\x58\xb5\
+\x0e\xb6\xc2\xf2\xc9\xef\xa7\xaa\x25\xc4\x4b\x9d\xbf\x62\xfa\xbc\
+\x26\x86\x8c\x2e\xf2\x1d\x2a\x4e\xa9\x02\x80\xf7\x9c\xe3\xed\x86\
+\xf7\x67\x4f\x32\xc6\xde\x87\xc8\x66\xb3\x44\xa3\x51\x14\x45\x91\
+\x7f\x36\x95\x55\x5b\x5b\xbb\x66\xd9\xb2\x65\xf3\xd2\xe9\xb4\x6f\
+\x2f\x1c\xa7\xb2\xb3\x3d\x2f\x2b\x18\x0c\x32\x66\xf0\x09\x06\x83\
+\xb8\xae\x8b\x65\x59\xbe\xb1\x57\x51\xd8\x17\xee\xe0\xc2\x05\xd5\
+\x40\xf1\x2d\x0a\x5d\x92\x5e\x57\x43\xb9\x2d\x02\x80\x65\x59\xc7\
+\x45\x22\x06\x06\x06\x68\x6a\x6a\x9a\x04\x2c\x01\x1c\xc3\x30\x4e\
+\x4e\x24\x12\x64\xb3\x59\x6c\x5c\xec\x11\x9b\x9d\xcf\x17\xb8\xf2\
+\x7d\xf3\x79\xfa\xd5\x35\xcc\x6b\xbe\x82\xf7\xd4\xaf\xe4\xbf\xb6\
+\x7f\x8a\x6c\x2a\x87\x2e\xc3\xbe\x9b\xeb\x01\x02\x50\x28\x14\x70\
+\x1c\x07\xd7\x75\x29\x95\x4a\x9e\xed\xc0\xf3\x1c\x3d\x4d\xf1\x67\
+\x03\x44\x4a\xa9\x14\x0a\x05\x1f\x08\xdb\xb6\xc9\xe5\x72\xd8\xb6\
+\x4d\x3e\x9f\xf7\x75\x6b\xa9\x54\x42\x51\x14\xc2\xe1\x30\xb6\x6d\
+\x63\xdb\xf6\xa1\x87\x91\x02\xc2\x15\xf1\xff\xc8\xc2\xbb\x91\x8a\
+\x4b\xda\xed\x64\xe3\xd6\x2e\x92\x55\xeb\x18\x1d\xfb\x9c\xb7\x23\
+\x8f\xd7\x2a\x95\x4a\x37\x9f\x7f\xfe\xf9\x77\xaa\xaa\x8a\x40\x90\
+\x30\x33\x4c\x3f\xbd\x1a\x77\x38\x8c\x33\xda\x82\x48\xc3\x8f\xbe\
+\xf3\x53\x14\x55\xf0\x1a\x5b\x78\x55\x6e\x26\xa0\xcd\x27\x9f\x6c\
+\x27\x1a\x55\x91\x52\x7a\xb6\xc1\x07\xa4\x58\x2c\xfa\xef\x22\x9b\
+\xcd\x12\x8b\xc5\x7c\x30\xc6\x49\x4b\x63\x2c\x16\x9b\x95\xcf\xe7\
+\x3b\xff\x1c\x80\xf8\x2f\xd8\xb2\x2c\x6c\xdb\xf6\x5f\x9e\xa6\x69\
+\x3e\x10\xaa\xaa\xfa\xde\x4b\xb1\x58\xf4\x8d\xbd\x27\x21\x58\x92\
+\xd1\x5e\x83\xa9\xef\x99\xcb\x75\x3f\x5a\xca\xcf\x3e\xb2\x81\xa6\
+\x93\xd2\xac\xed\xc9\xb2\x27\xfb\x2a\xf9\x9c\xe9\xab\x3e\xa0\xce\
+\xbb\xfe\xf4\xe9\xd3\x93\x07\x0f\x1e\x74\x8f\xd2\x6e\x44\xbd\x0d\
+\x53\x74\x4d\xb4\x73\xfa\xa9\x9d\x1f\xc1\x92\x83\x48\x1b\x44\x36\
+\x86\x9d\x51\x71\x52\x3a\xf9\x2d\xd5\xa0\x48\x1c\x69\xfb\xb6\xc2\
+\x93\x90\x54\x2a\x85\xaa\xaa\x38\x8e\xe3\xc5\x1f\x08\x21\xd0\x34\
+\x0d\x45\x51\xc8\xe5\x72\x04\x83\x41\x22\x91\x08\xa6\x69\xca\x93\
+\x4f\x3e\xf9\x9b\xaa\xaa\xde\xf1\xca\x2b\xaf\x54\xfd\x39\x00\x91\
+\x1e\x10\xde\x4e\x51\x14\x05\xdb\xb6\x99\x34\x69\x12\x37\xdd\x74\
+\x13\xdf\xf9\xce\x77\xa8\xad\xad\x65\xfa\xf4\xe9\x74\x75\x75\x91\
+\xcd\x66\x7d\x63\xed\x38\x0e\x96\x10\xa8\xdb\x5c\x8a\xf9\xa9\xdc\
+\xf4\xab\x0f\x50\x1b\x38\x95\x9b\xd6\xdd\x88\xae\xa9\xa8\x76\x08\
+\x4d\x6b\x24\x5e\xe3\xc7\x28\xf2\xca\x2b\xaf\xdc\xe7\xfd\xff\xf5\
+\xeb\xd7\xcf\x07\xf6\x1d\xad\x94\x78\x2a\xc4\x74\x4d\xe2\xe1\x00\
+\x85\x8c\xcb\x4d\x27\xdf\x81\xab\x16\x59\xb3\xf7\x5e\x26\x37\x34\
+\x32\x9c\xef\x65\xf4\xd5\x30\x4a\x40\x4e\x50\xc9\xde\x86\x54\x55\
+\xd5\x07\x24\x16\x8b\x21\x84\xf0\x37\xa1\xa2\x28\xfe\x35\x02\x81\
+\x00\x96\x65\x09\x21\x04\xe1\x70\xb8\x70\xb8\xf7\xa8\x1c\xce\x87\
+\xa6\x4c\x99\x32\x69\xca\x94\x29\x2f\xb9\xae\x3b\xcd\xb3\x05\xd9\
+\x6c\x25\x08\xbd\xea\xaa\xab\x68\x6c\x6c\xe4\x57\xbf\xfa\x15\xcd\
+\xcd\xcd\x00\xac\x5d\xbb\x96\xdb\x6f\xbf\x9d\x50\x28\x84\xa6\x69\
+\xbe\x71\x37\x0c\x83\x72\xa9\x84\xd0\x04\xa1\x58\x90\xda\xda\x5a\
+\xba\xd5\x21\x16\x7c\xbc\xcc\xac\x8f\x16\x69\xb9\x75\x94\xc9\xd7\
+\x24\x89\x9f\x6e\x10\x69\x16\x04\x83\x01\x11\x0c\x06\x09\x06\x83\
+\xd4\xd7\xd7\xe3\x38\xce\x31\xe9\x30\xc3\x30\xbc\x00\x0e\x45\x28\
+\x9c\x14\x7e\x3f\xa1\x6a\x9b\xe7\xdf\x78\x9d\x45\xda\xf5\xac\x3e\
+\xe3\x6e\x6a\x42\xf5\x94\xcb\xe5\xca\xbd\x96\xcb\x98\xa6\x49\x36\
+\x9b\xf5\x37\x56\x20\x10\xf0\xa5\xe1\xb2\xcb\x2e\x23\x12\x89\x50\
+\x5f\x5f\xcf\xdc\xb9\x73\x7d\x60\x34\x4d\xf3\xb5\x87\xe7\x7d\x1d\
+\x57\x40\x92\xc9\x64\xed\x05\x17\x5c\x70\x6e\x28\x14\x8a\x58\x96\
+\xe5\x5f\xb8\x5c\x2e\xf3\xe1\x0f\x7f\x18\xc3\x30\xb8\xff\xfe\xfb\
+\x59\xbe\x7c\xb9\xaf\x3b\xbd\x1b\x5f\xb0\x60\x01\xb7\xdd\x76\xdb\
+\x04\xe3\xee\xc5\x2d\xa6\x61\xe2\x04\x4c\x34\x4d\x25\x9b\x74\xb8\
+\x6a\xe1\xc7\xa8\x9b\x1a\x23\xb2\x38\x4b\xed\x15\xc3\xe8\x0b\x52\
+\x18\xa5\x31\x6f\xc8\x34\x8f\xd8\x40\x36\x34\x34\x5c\x1e\x8d\x46\
+\x6f\x8a\xc5\x62\x37\x4a\x29\x97\x0c\x0d\x0d\x31\x38\x38\x48\x62\
+\x68\x84\x81\x37\xb3\xf4\xed\x18\xe0\xb9\x35\x6b\xd9\xf1\xfa\x0e\
+\xf6\x6d\xda\xc3\xfd\x0f\x7c\x97\x9d\x2f\x76\x91\x2f\x64\x7d\xe0\
+\x3c\x0f\xca\xf3\xa2\xce\x3e\xfb\x6c\xaa\xab\xab\x91\x52\x92\x48\
+\x24\x7c\xa3\x9e\x48\x24\x18\x93\x06\x5f\x75\x65\xb3\x59\x5f\x5d\
+\x1f\x57\xa3\xee\xf9\xdf\xde\xc5\x15\x45\xe1\xfc\xf3\xcf\xa7\xb5\
+\xb5\x95\xc7\x1f\x7f\x9c\xba\xba\x3a\x9e\x7a\xea\x29\x9e\x79\xe6\
+\x19\x42\xa1\x10\x57\x5d\x75\x15\xa7\x9f\x7e\x3a\xa9\x54\x8a\xfb\
+\xef\xbf\x9f\xbe\xbe\x3e\x0c\xc3\x20\x99\x4c\xfa\xd1\xb8\x69\x9a\
+\x20\x41\x6a\x92\x72\xc9\xe1\xae\xf7\x3e\xc5\xa3\xad\xdf\xe0\xa6\
+\xf9\x5f\x65\xed\x8e\x17\x50\x1b\xfa\x78\xcd\xde\x56\xb1\x23\x4a\
+\x65\x67\x1e\xe9\x9a\x3c\x79\xf2\xb7\x97\x2d\x5b\x36\xcb\xb2\x2c\
+\x54\xa1\x50\xac\x4e\xcb\x58\xb5\x26\xdc\xac\x8e\x9d\xd4\xe9\xdb\
+\x36\x0c\x02\xea\xb5\x69\x8c\xa6\x73\x24\x64\x96\xa6\xc0\x0a\xf6\
+\x8f\xbe\x44\x53\xa0\xc9\x7f\x91\x9e\x4d\xb4\x2c\x8b\x48\x24\xe2\
+\x7b\x91\x1b\x37\x6e\x24\x16\x8b\x91\x48\x24\xa8\xae\xae\x46\x08\
+\xc1\xb4\x69\xd3\x18\x1e\x1e\x26\x9f\xcf\xfb\x31\xdb\x91\x48\xb6\
+\x72\xb8\x80\x78\x60\x14\x8b\x45\xa6\x4d\x9b\xc6\xbf\xfc\xcb\xbf\
+\xa0\x69\x1a\xcf\x3d\xf7\x1c\x7d\x7d\x7d\xc4\x62\x31\x82\xc1\xa0\
+\xef\xee\x6e\xdb\xb6\x0d\x4d\xd3\x26\xf8\xff\x9e\xcd\x39\x24\x21\
+\x95\x28\x3f\xa0\x46\x98\xd6\x38\x85\x84\xd8\x85\xb4\x42\x48\x09\
+\x8e\xb4\x70\x1d\x07\xc3\x34\x7c\xd1\xb7\xde\xe2\x07\x37\x35\x35\
+\xbd\xd3\x7d\x3b\xe5\x72\x99\x72\xb9\xcc\xee\x6c\x17\x91\x73\x07\
+\x45\xe8\xac\x7e\x42\x97\x75\x50\xf5\xe1\x7d\xd4\x7c\xf0\x00\xa1\
+\x73\xfb\x11\x33\x93\x95\xeb\x58\x26\x96\x7b\x28\x9e\xf0\x24\xbd\
+\xbe\xbe\x1e\x4d\xd3\xd0\x75\x9d\x97\x5e\x7a\xc9\xb7\x29\xba\xae\
+\xfb\x52\x14\x0e\x87\x31\x0c\xc3\x07\xcf\xb3\x35\x63\x80\x34\xad\
+\x5c\xb9\x52\xd6\xd7\xd7\xcf\x3f\x6e\x46\xdd\x8b\x3b\x4c\xd3\xa4\
+\x54\x2a\x31\x30\x30\x40\x24\x12\x61\x68\x68\x08\xc7\x71\xe8\xef\
+\xef\xf7\xe9\xe8\xd1\xd1\xd1\x0a\x97\x35\x65\x0a\x9f\xfd\xec\x67\
+\x71\x1c\x87\x60\x30\x88\xaa\x1e\x72\x1f\xbd\x77\xeb\xb4\x97\xd8\
+\xf0\xef\x2a\xa7\xfe\xdb\xa9\x00\x3c\xcf\x87\xde\xf6\xfa\xd9\x6c\
+\x96\xf9\xf3\xe7\x77\x79\xee\xf0\xd0\xd0\xd0\xbf\x0d\x0c\x0c\xdc\
+\xf1\x4e\x5e\xa1\x07\xa6\x29\x2d\x14\x14\xc8\x4c\xe6\x8e\xcb\xbf\
+\x47\x7b\x7a\x33\xdf\x7b\xf9\xdf\x58\xbc\x64\x0e\xdd\x75\x9d\x64\
+\x77\x69\xbe\x34\x18\x86\x41\x2a\x95\xf2\x8d\xf3\xf5\xd7\x5f\xcf\
+\x9a\x35\x6b\xc8\x64\x32\xd4\xd5\x55\x9c\xbe\xd1\xd1\x51\xff\x1a\
+\xf5\xf5\xf5\x98\xa6\x49\x38\x1c\x66\x68\x68\x08\x55\x55\x89\xc7\
+\xe3\xe8\xba\x4e\x2e\x97\x03\x60\xee\xdc\xb9\xec\xda\xb5\xcb\x39\
+\x2e\x80\x58\x96\x55\xf0\x5e\xa0\xa2\x28\x14\x8b\x45\x3e\xf3\x99\
+\xcf\x50\x5d\x5d\xed\xe7\x3e\xc6\x7b\x22\xde\x9f\x93\xc9\x24\x81\
+\x40\xc0\x07\xe4\x87\x3f\xfc\x21\x86\x61\xf0\xf1\x8f\x7f\xdc\xe7\
+\xbb\x54\x54\x96\x2c\x59\x52\x51\x89\xd2\x21\x39\xf7\x00\x73\x16\
+\x46\x70\x72\x2a\xd6\x70\x08\x7b\x28\x88\x35\x18\x44\x48\x05\xa1\
+\xbb\xfe\x35\x86\x86\x86\x0e\xdb\x90\xdb\x96\x8d\xab\x3a\x08\x45\
+\x70\xdd\x82\x4f\xb3\xbe\xf7\x49\x9c\x91\x69\x5c\x37\xf7\x4b\x9c\
+\x7f\xea\x99\xdc\xfe\xe8\xe5\xbe\x6b\xab\xaa\xaa\x1f\x03\x79\x6c\
+\xc3\x96\x2d\x5b\x2a\xe4\xe3\x98\x73\x32\x69\xd2\x24\xa4\x94\x08\
+\x21\x28\x95\x4a\xfe\xc6\x54\x55\x95\x50\x28\x44\xb1\x58\x24\x12\
+\x89\xf8\xa1\x80\x65\x59\xfe\xf7\x1f\x33\x20\xb5\xb5\xb5\xb7\x2c\
+\x5d\xba\xf4\x2e\x8f\x2e\x39\xe1\x84\x13\x48\xa5\x52\x04\x02\x01\
+\xd2\xe9\xb4\xaf\x82\xa4\x94\x28\x8a\xe2\xb3\x9f\xde\xee\x1a\xa3\
+\x16\x5c\x65\x2c\x9a\x9a\x36\x6d\x1a\x8e\xe3\x50\x28\x14\x10\x08\
+\x6c\x69\x51\x2c\x16\x29\x97\xcb\xf4\x59\x49\x5a\xa6\x3b\xc8\x48\
+\x89\xc6\x49\xd3\x49\x4d\xed\x43\x0a\x07\xd3\x35\x51\x4a\x61\x86\
+\x1e\x99\x5c\x49\x74\x1d\x01\x45\x62\x59\x16\xb6\x65\x21\x15\x89\
+\xa2\x09\x1a\xaa\x9b\x39\x58\xfa\x3d\xc9\x24\x64\xdd\x7e\xea\x4e\
+\x30\x08\x07\x23\x5e\xcc\x33\x41\xe5\x78\x2a\xb6\xa7\xa7\x87\x50\
+\x28\x84\xeb\xba\xac\x5e\xbd\x9a\xad\x5b\xb7\xd2\xd9\xd9\xe9\x7b\
+\x52\xaa\x5a\x61\x80\x6b\x6a\x6a\xc8\x66\xb3\xa8\xaa\x4a\x2c\x16\
+\xf3\xd5\x9e\x17\xbb\x1d\x8e\x53\xf2\x8e\x80\x98\xa6\x39\xb5\xa9\
+\xa9\xa9\xa6\xa7\xa7\x07\xd3\x34\xb9\xe7\x9e\x7b\xd8\xb3\x67\x0f\
+\x37\xde\x78\x23\x3f\xf8\xc1\x0f\x48\x24\x12\xd4\xd6\xd6\x12\x0c\
+\x06\x79\xe9\xa5\x97\x58\xb8\x70\x21\xbb\x76\xed\xa2\xa7\xa7\x87\
+\xb9\x73\xe7\xb2\x6d\xdb\x36\xf6\xef\xdf\x7f\xfb\x82\x05\x0b\xbe\
+\xf3\xec\xb3\xcf\x72\xd1\x45\x17\x51\x2e\x97\x7d\x95\x25\x74\xc5\
+\xf7\xbe\x5c\xc7\x45\x55\x04\xa1\xec\x7c\x3e\x71\xd1\x9d\x68\x32\
+\xca\x17\x9e\xf8\x08\x1f\x3e\xfb\x46\x7e\xb6\xfd\x6e\x2c\xcb\xac\
+\xe4\x52\xfe\xc8\x83\x0d\x0c\x0c\x30\x6b\xd6\xac\x3b\xa3\xd1\xe8\
+\x54\x00\xe9\xca\x29\xc9\xd1\x14\xd2\x75\x41\xb7\xe9\xfc\xa5\xc2\
+\x77\x5f\xf8\x16\x69\xf7\x20\x46\x36\x88\x4d\x89\xee\x75\x9d\x74\
+\x0d\xe6\x30\xcd\xb0\x0f\x48\x38\x1c\x66\xc6\x8c\x19\x0c\x0e\x0e\
+\x62\x9a\x66\xaa\x54\x2a\xf5\x38\x8e\xb3\x44\x51\x14\x71\xd7\x5d\
+\x77\x49\xd7\x75\x85\xb7\x01\x3d\x1b\x0b\xf8\x86\x1c\x20\x95\x4a\
+\x11\x8b\xc5\xfc\x4d\x7a\xb8\x34\x8a\x76\x38\x06\xdd\x34\x4d\x0a\
+\x85\x02\xaa\xaa\xf2\xa3\x1f\xfd\x88\x6f\x7f\xfb\xdb\xfc\xf4\xa7\
+\x3f\x65\xfd\xfa\xf5\xa8\xaa\x8a\xae\xeb\x68\x9a\x46\x2a\x95\x62\
+\xef\xde\xbd\xe4\xf3\x79\xca\xe5\x32\x89\x44\xc2\x53\x5f\x21\x55\
+\x55\xd9\xb0\x61\x03\xaf\xbf\xfe\xba\xef\xab\x8f\xbd\x34\xdf\xdf\
+\xb7\xb1\x71\x71\x59\xd6\x70\x19\x8f\x6c\xfb\x2a\xb3\xb4\xf3\xb9\
+\xf6\xa4\xd5\xb4\xd4\x4c\x41\xa0\x54\xd4\x9c\x22\xde\xc9\xb3\xfa\
+\xfb\xe9\xd3\xa7\xd7\x0b\x21\x28\x38\x65\x58\x38\x4c\x7d\x3c\x8c\
+\xd3\x1f\xc1\xea\x0b\x93\x19\x4d\x22\x88\x11\xaa\x98\x65\x8a\x43\
+\x92\x46\x71\x22\x1d\x66\x87\xcf\x38\x54\x57\x57\x13\x8f\xc7\x49\
+\xa5\x52\x98\xa6\xf9\xec\x9e\x3d\x7b\x6e\x8a\xc7\xe3\xd7\x5a\x96\
+\x35\xcb\xb2\xac\xaf\x5d\x70\xc1\x05\xac\x58\xb1\x82\x47\x1f\x7d\
+\xd4\xb7\xab\x5e\x10\xe9\x51\x4a\x8a\xa2\x30\x3c\x3c\x4c\x34\x1a\
+\x3d\x22\x5e\xeb\xb0\x00\xf1\xbe\xcc\x73\xf5\x4e\x3b\xed\x34\x5f\
+\x2d\x8d\xb7\x1f\x42\x08\x7a\x7b\x7b\xfd\x3f\x1f\x38\x70\xc0\xf3\
+\xbc\xd2\xfb\xf7\xef\xff\xab\xb1\xe8\x95\x50\x28\xf4\xf8\x89\x27\
+\x9e\xa8\x7e\xf1\x8b\x5f\xe4\x73\x9f\xfb\x1c\xa6\x69\x56\xf2\x29\
+\xaa\x8d\x10\x10\xd0\x22\x38\xae\x8d\x61\x9a\x64\x64\x8a\xae\x4c\
+\xe2\x10\x85\x21\xf0\x77\xe6\xdb\x2d\x8f\x85\x05\x78\x23\xbf\x9f\
+\xeb\x4f\xaf\xc1\xb2\x73\x94\x5a\x06\xa9\xd6\xc2\x08\x47\x45\x1a\
+\x2a\xc5\x3d\x51\xf2\xdb\x62\x20\x2a\x3b\x3d\x95\x4a\xf9\xd7\x28\
+\x95\x4a\xa4\x52\xa9\x09\xcf\x98\x4e\xa7\x7f\x01\x9c\xb8\x6a\xd5\
+\xaa\xaf\xdd\x79\xe7\x9d\xe8\xba\x8e\x61\x18\x74\x75\x75\xb1\x74\
+\xe9\x52\x7e\xf9\xcb\x5f\xf2\xbe\xf7\xbd\x8f\x2d\x5b\xb6\xb0\x67\
+\xcf\x1e\x2e\xbd\xf4\x52\x86\x86\x86\x58\xbb\x76\xad\xbf\xa9\x17\
+\x2c\x58\xf0\x66\x6b\x6b\xeb\xaa\x6c\x36\xbb\xe5\x98\x25\xc4\x33\
+\x70\x93\x27\x4f\x66\x68\x68\xc8\xb7\x15\xde\x4d\xbb\xae\xeb\xff\
+\xf2\x78\xac\xb1\x07\x7c\x42\xd7\xf5\xbd\xc3\xc3\xc3\xaf\x7a\xdf\
+\xd9\xd2\xd2\x22\x9f\x7b\xee\x39\x5e\x7c\xf1\x45\x96\x2f\x5f\xce\
+\x86\x0d\x1b\x2a\xbb\x2c\xe4\x32\xb4\xce\xe2\xf9\xf8\xd3\xc8\xc8\
+\x28\xfd\xca\x1b\x18\x56\x89\xaa\x1a\x9d\x83\x43\x06\x85\xa2\xed\
+\xdf\x53\x2c\x16\x3b\x77\xf1\xe2\xc5\x5f\x02\x84\x61\x18\x76\x5b\
+\x5b\xdb\x57\x3c\xbe\xc9\xf7\x8e\x85\x44\x22\x59\x20\xae\x67\xc5\
+\x7b\x4e\x21\x6d\xf6\xb3\x61\xdf\x6b\x64\x42\xfb\x29\x06\x6c\x2c\
+\xcb\x44\x22\xd1\x34\xcd\x27\x32\x5d\xd7\x95\xaa\xaa\x0a\xc7\x71\
+\x88\xc7\xe3\x24\x12\x89\xf1\xe8\x2b\x43\x43\x43\xec\xde\xbd\x9b\
+\xe6\xe6\x66\x3c\x97\x7a\xe3\xc6\x8d\x00\xbc\xf6\xda\x6b\x94\xcb\
+\x65\x74\x5d\xe7\xb5\xd7\x5e\xa3\xa1\xa1\xc1\xbf\x5f\xc3\x30\xa8\
+\xa9\xa9\x89\x59\x96\xa5\x1f\xab\x97\x25\x6d\xdb\x46\x55\x55\x1e\
+\x7e\xf8\x61\xa6\x4e\x9d\xca\x23\x8f\x3c\xc2\xce\x9d\x3b\x09\x85\
+\x42\x24\x93\x49\xa2\xd1\x28\x83\x83\x83\x04\x02\x01\x62\xb1\x18\
+\x23\x23\x23\x64\x32\x19\xd2\xe9\x34\x6d\x6d\x6d\x57\xbf\xdd\x2e\
+\x7e\xf6\xd9\x67\xa9\xad\xad\x25\x97\xcb\xf9\x34\x45\xa9\x54\xa4\
+\x2e\xb9\x08\x07\x0b\x91\xa9\xa1\xcf\x19\x22\x34\xbd\x8c\x99\x0d\
+\xd0\xc8\x3c\x26\xaf\xa8\xe4\xb5\xa5\x25\x40\x61\x95\x10\xac\x1a\
+\x8b\x69\x4a\x1e\x20\xe3\x25\x44\x00\x03\xfd\x79\xfe\xf3\x6f\x3e\
+\xce\xc7\x7f\x7d\x36\x5f\x3e\xe7\x69\x6a\xec\x79\xa8\x35\x29\xbe\
+\xb5\xe9\xab\x18\x86\x09\xa2\xc2\x59\x79\x2a\x54\xd3\x34\x31\x38\
+\x38\xd8\x39\x38\x38\xb8\x4d\x08\xe1\x06\x02\x81\xb5\x6f\xdd\xa0\
+\xab\x57\xaf\xc6\xb6\x6d\x42\xa1\xd0\x04\x35\x74\xf0\xe0\xc1\x09\
+\x3f\x1f\x38\x70\xc0\xb7\x21\x85\x42\xe1\x0f\x3e\x7f\x54\x80\x28\
+\x8a\x32\xc7\xb2\x2c\x54\x55\xa5\x54\x2a\x51\x2c\x16\x99\x3b\x77\
+\x2e\x6f\xbe\xf9\x26\x4b\x96\x2c\x61\x78\x78\x98\xda\xda\x5a\xb2\
+\xd9\x2c\xe5\x72\x99\x48\x24\xc2\x39\xe7\x9c\xc3\x33\xcf\x3c\xf3\
+\x47\x2f\xae\x69\x1a\x5f\xfa\xd2\x97\x7c\x43\xe8\xc5\x0b\x05\xa5\
+\x4c\xa9\x54\x42\xa4\x05\x42\x08\x76\xe8\xfb\x78\xef\x19\x35\xd8\
+\xd6\x78\xcf\x4a\xe2\x18\x0a\x99\x17\xea\x30\x87\x03\x80\xfc\x03\
+\xb0\x7d\x9a\x45\x07\xc7\x86\x80\xae\xa3\x29\x01\x10\x90\xc8\x0f\
+\xf2\x46\xff\x03\x48\x57\x8e\xa9\xc0\x8a\x94\x37\x34\x34\xf8\x36\
+\x40\x51\x94\x5f\x67\x32\x99\xd5\x6f\x17\x8e\x79\xae\xbc\xb7\xeb\
+\x0f\x33\xed\xed\x7f\xff\xb1\x02\x32\xbd\xb6\xb6\xf6\x46\xc3\x30\
+\xa4\xa6\x69\xe2\xee\xbb\xef\xa6\xb1\xb1\x91\xbd\x7b\xf7\xe2\xba\
+\x2e\x83\x83\x83\x18\x86\x41\x38\x1c\xa6\x50\x28\x20\xa5\x64\x74\
+\x74\x94\x5d\xbb\x76\xfd\x49\xee\xa9\x58\x2c\xe6\xa5\x94\xde\xb5\
+\x83\xe1\x70\x58\x77\x1c\x07\xdd\x52\x71\xdc\x43\x2a\x47\x09\x09\
+\x2c\xc7\x66\x45\xf4\x16\x16\xcf\x5c\xc0\x96\xe4\xe3\xe4\x92\x1a\
+\xbb\xdd\xe7\x70\xb4\x18\x96\x09\x12\x39\xc1\xa6\xb8\xae\x2b\x7d\
+\x03\x1a\x12\xc4\x27\x85\x28\x18\x65\x02\x21\x95\x9a\xaa\x5a\x4c\
+\xa5\x88\x16\xd2\x40\xa9\x00\x22\x91\xbe\xfa\x6d\x6e\x6e\x66\x68\
+\x68\x88\xb7\x2b\x4d\x02\x08\x04\x02\xed\x1d\x1d\x1d\x8d\xf3\xe7\
+\xcf\x1f\x9a\x32\x65\x0a\x37\xdc\x70\x03\x8f\x3d\xf6\x98\x6f\x7b\
+\xbc\x80\xd7\xdb\x60\x1e\xc3\xa1\xeb\xba\xcf\x8a\x1f\x2b\x20\x11\
+\x21\x04\xb9\x5c\x4e\xd4\xd7\xd7\x33\x3c\x3c\xcc\xe0\xc0\x10\x20\
+\x10\x02\x1f\xf1\x72\xb9\xec\x07\x54\xde\x36\x8e\xc5\x62\xa2\x54\
+\x2a\xbd\x6d\xf4\x2c\x84\xf0\x2b\xe9\x66\xce\x9c\xf9\xa0\xaa\xaa\
+\x1f\xbe\xfc\xf2\xcb\xfd\x00\xec\x90\x2b\x29\x49\x0d\x0a\xfe\xee\
+\xe6\x9b\xb9\xe9\x67\x4b\xf9\x97\xb3\x1f\xa3\x18\x2f\x30\xd3\x6c\
+\xe6\x27\xbf\x79\x02\xc3\x90\x9e\x0d\x08\x5d\x74\xd1\x45\x23\x80\
+\x14\x8e\xa8\xb3\x2c\x89\xa2\xc0\x22\x3b\xc2\xf0\xc3\x0a\xd7\x3f\
+\x74\x2d\x52\x09\x71\xfd\x7f\x5d\x83\x65\x5b\x04\xb5\x08\xdb\x5b\
+\x7b\xa9\x8a\xc4\x7d\x4a\xdd\x23\x3f\xff\x18\x18\xe3\xf2\x22\x32\
+\x16\x8b\xf1\xe2\x8b\x2f\xb2\x71\xe3\x46\x5a\x5a\x5a\xd8\xba\x75\
+\x2b\xe1\x70\x98\xf5\xeb\xd7\xfb\x36\x31\x12\x89\xd0\xd2\xd2\xc2\
+\xae\x5d\xbb\x18\x1d\x1d\xf5\x93\x74\xc7\xac\xb2\xa4\x94\xe8\xba\
+\xce\xbe\x7d\xfb\x90\xae\xa4\x66\xb1\x4e\x24\xac\x92\xeb\xb7\x29\
+\x0e\x39\x48\xf7\x6d\xd5\x9c\x28\x97\xcb\x9d\x8a\xa2\x7c\xf3\xed\
+\x9c\x84\xb7\xb0\x00\xfa\x07\x3e\xf0\x01\xe6\xcc\x99\xc3\x07\x3f\
+\xf8\x41\x6e\xbd\xf5\x56\x3f\xcf\x20\x10\x54\x05\xe3\xd8\xb2\x44\
+\xbc\xaa\x8a\xe6\xda\xa9\x3c\xbf\xe3\xd7\x3c\xd1\x77\x1f\xb6\xd5\
+\x88\x69\xb9\x50\xd9\xe1\xa2\xa6\xa6\x66\x92\x40\xd0\x35\x6d\x0f\
+\xa7\x5d\x14\xc6\x18\xac\xd4\x55\xd9\x83\x01\x9c\xac\x06\x96\x8e\
+\x5b\x52\x50\x75\x0d\x4d\x53\x29\xe5\x4d\x6c\x23\xe5\x25\xdd\x64\
+\x34\x1a\x15\x23\x23\x23\x84\x42\xa1\x77\xe4\xf8\x1c\xc7\xe1\x95\
+\x57\x5e\x21\x1e\x8f\xe3\xba\x2e\xfd\xfd\xfd\x7e\xa2\xca\x4b\xc8\
+\x79\xec\x6f\x5d\x5d\x1d\x03\x03\x03\x68\x9a\xe6\x05\x91\xb1\xe3\
+\x02\xc8\xec\xd9\xb3\x2b\x14\x40\xb2\x22\x9a\x51\x29\x89\xd4\xcb\
+\x09\xa5\x3b\x9e\x97\x35\xb6\xe3\x7a\x06\x06\x06\xfe\xeb\x70\xe9\
+\x8d\xb9\x73\xe7\xfa\x51\xed\x21\x75\x27\xb0\x5d\x13\x45\x68\x80\
+\xa0\x64\x15\xd1\x54\x8d\xa0\x16\xc5\x71\x5c\x4c\xd3\xf2\x83\x39\
+\xcb\xb2\x28\x38\x65\x6a\xa7\x29\x48\x5b\x25\x5a\x1f\x46\x99\x62\
+\x61\xcc\x4f\xf8\x9b\x60\xe0\xa1\x49\x48\x5b\xf1\x3d\x41\x8f\x5b\
+\x53\x55\x55\x74\x75\x75\x3d\xe0\xed\x11\x5d\xd7\x7f\xfd\xa7\xee\
+\xd7\x75\x5d\x3e\xf9\xc9\x4f\xfa\xdf\x33\x7e\xed\xdb\x77\x28\x7f\
+\xd6\xdf\xdf\xef\x7b\xa1\xf1\x78\x1c\xc7\x71\xa8\xaa\xaa\xfa\x72\
+\x3a\x9d\x7e\xe1\x98\x00\x59\xb1\x62\x05\x97\x5d\x76\x19\x67\x9f\
+\x7d\x36\xdf\xfb\xde\xf7\x68\x6d\x6d\xe5\xe4\x93\x4f\xe6\xf5\xd7\
+\x5f\x67\xee\xdc\xb9\x64\x32\x19\x5a\x5b\x5b\x09\x87\xc3\xcc\x9c\
+\x39\x93\x37\xde\x78\xe3\xb0\x29\xf2\x40\x20\xc0\x0b\x2f\xbc\xc0\
+\xde\xbd\x7b\xe9\xed\xed\xf5\x19\x54\x21\x04\x85\xd6\x1c\x43\x46\
+\x23\xff\xeb\xa5\x5b\x18\xcc\xea\x7c\xea\xb1\x4f\x60\x18\x36\x79\
+\x27\x8e\x5d\x14\x44\x22\x87\xa4\xae\xa2\x1e\x25\xca\xeb\x93\x39\
+\xf8\x86\xe0\xc1\x07\x7e\xc4\xfe\x9e\x2e\x7e\xbb\xf7\xa7\xfc\xed\
+\xaa\x8f\x72\xf7\xba\x5b\x31\x4d\x0b\x69\x1f\x02\x42\xd7\x75\x9f\
+\x4a\x1f\x19\x19\xf9\xc8\xe1\xde\x73\x3e\x9f\x27\x12\x89\x1c\x02\
+\xc3\x01\xcb\x74\xc7\xee\x05\x84\x2a\x50\xd4\x31\x6d\x30\xf6\x91\
+\xd1\xd1\x51\x5f\x3d\x1e\x8b\x84\xb8\xde\x2e\x88\xc7\xe3\x84\xc3\
+\x61\x9f\x74\x0b\x04\x02\x2c\x5d\xba\x94\xee\xee\x6e\xaa\xab\xab\
+\x7d\xa3\xa5\xeb\xfa\x3b\x5e\xf4\x2d\x2a\x2b\xa0\x28\x0a\x07\x0f\
+\x1e\xf4\x8a\x06\x64\xb9\x5c\x16\x00\xe5\x62\x91\x69\x2b\x66\x92\
+\xcb\xe5\x88\x69\x75\xa4\x67\x1c\xa0\x69\x46\x80\xaa\xb4\x8e\x93\
+\x1d\xfb\x95\xd6\x70\x73\x1a\x62\xec\x49\xc2\xe1\x30\xe9\x54\x9a\
+\xf5\x3d\xcf\xb2\xe9\xcd\x2e\x2e\x3e\xf9\x06\x1a\x63\xd3\x11\x28\
+\x95\x58\xc7\xaa\x48\xd4\xbc\x79\xf3\xfc\x6c\xe6\xe1\x12\x95\x00\
+\x35\x35\x35\x23\x1d\x1d\x1d\x4d\xa7\x9c\x72\xca\x40\x2a\x95\x42\
+\x48\x70\x67\x0b\x96\x5f\x59\x43\x7e\xc0\xa1\x38\x6c\x93\x1b\x70\
+\x28\x0e\xd9\x18\x19\x17\xcf\x24\x79\xef\xf0\x4f\xd9\xa8\x77\x04\
+\x24\x1a\x8d\x2e\x07\xd8\xb6\x6d\x1b\x89\x44\x82\xe1\xe1\x61\x8a\
+\xc5\x4a\xe9\xce\xee\xdd\xbb\xfd\xc0\xd0\x03\xcd\x75\x5d\x5e\x7e\
+\xf9\xe5\x23\x4a\x26\x25\x93\xc9\x2f\x0e\x0d\x0d\x7d\x77\xcc\x8d\
+\x9c\xbe\x60\xc1\x82\x87\x0f\x79\x23\x95\x0a\x96\x72\xb9\x4c\xca\
+\xcd\x31\x75\xae\x89\xa8\xb2\x69\x9c\xd6\x44\xd9\xcd\x51\x72\x12\
+\x28\x0a\xd8\x79\x95\xe1\x9f\x4e\xf6\x1f\x5c\x4a\x89\x57\xb2\x9e\
+\x29\x8d\x92\x35\x12\x08\x45\x4c\x00\x24\x93\xc9\x70\xf5\xd5\x57\
+\xf3\xf4\xd3\x4f\xfb\x31\xc8\xe1\xac\x4c\x26\x83\xae\xeb\x52\xd3\
+\x34\x9a\x9a\x9a\x2a\x36\xa2\x7f\x80\x8e\x07\x15\x2c\xc7\x45\x28\
+\x3a\xae\xab\xa2\x11\x40\x09\xbb\x7e\x4e\xc4\x53\xe5\xc7\x04\x88\
+\xae\xeb\x7f\xe3\x65\xf8\xfa\xfa\xfa\xfc\xa4\xcc\xf8\xdf\x8f\x75\
+\x15\x0a\x85\xbd\xc0\xde\xb1\x1f\xe7\x7b\x8c\x80\x10\x02\xa5\x50\
+\x79\x89\xa6\x61\x62\x2b\x0e\xaa\xaa\xd0\xa2\xae\xe2\xef\x56\xde\
+\x4a\x4d\xa0\x9e\x0f\x7c\xef\x7c\x6e\xbb\xea\x56\x7e\xb1\xfe\xfb\
+\x13\xe8\x73\xdb\xb1\x59\x30\xe9\x34\x92\x53\x54\x06\x72\xdd\x04\
+\xd5\xd3\x51\x50\x30\xcd\x32\xae\x55\x89\x83\x32\x99\x0c\x4f\x3f\
+\xfd\xb4\xef\x96\x1e\xe9\x52\x14\x85\x07\x1e\x78\x80\xe1\xe1\x61\
+\x84\x10\x3c\xfe\xf8\xe3\xc4\xe3\x71\x3a\x3b\x3b\x69\x6e\x6e\x66\
+\xcb\x96\x2d\xcc\x9a\x35\x0b\xc7\x71\xd8\xb7\x6f\x1f\xcd\xcd\xcd\
+\x74\x74\x74\x1c\x1b\x97\x25\xa5\x54\x63\xb1\x18\x7b\xf6\xec\x41\
+\x08\x41\xf4\x7c\x9d\x15\x17\xd5\x20\x01\x23\x27\x49\xee\x35\x18\
+\x6d\xb7\xc8\x74\x98\x98\x85\x43\xf9\x90\x9a\x9a\x9a\x11\xe0\x7d\
+\x47\x5b\xa6\xfa\xd3\x9f\xfe\x94\x42\xa1\xc0\xe7\x3f\xff\x79\xbf\
+\x30\xc1\x52\x4d\x84\x90\x9c\x3c\xe5\x6c\x7e\xd7\xfe\x00\xa9\xce\
+\x06\xae\x58\xf8\xb7\xcc\xa8\x59\x84\xed\x54\xaa\x60\x3c\x09\xe9\
+\xee\xee\xe6\x6b\xff\xfb\xbb\x95\xc4\x56\x29\xc5\xc6\x9f\xec\xe2\
+\xc0\x20\x64\x53\x79\x8f\x02\x92\x8a\xa2\x08\xaf\x8e\xea\x9d\x76\
+\xed\xdb\xd9\x55\x8f\x5d\x9e\x3f\x7f\x3e\x5d\x5d\x5d\x8c\x8c\x8c\
+\x78\xcf\xce\xc9\x27\x9f\xcc\xe6\xcd\x9b\x19\x19\x19\x61\xd1\xa2\
+\x45\xa4\x52\x29\x46\x47\x47\xd1\x34\xed\xd8\x24\xc4\x8b\xaa\x3d\
+\xef\xc9\xd9\xa9\xf1\x66\x47\x96\x7c\xbf\x83\x55\x94\x28\x9e\xf1\
+\x52\x55\x54\x55\xfa\xb9\x91\x40\x20\xe0\x0e\x0c\x0c\x1c\x55\xd3\
+\xca\xbc\x79\xf3\x68\x6e\x6e\x66\x74\x74\x94\xe6\xe6\xe6\x4a\x85\
+\xbd\x65\xe2\xe0\x00\x02\x4d\x09\x60\x4b\x0b\xdb\xb1\x18\x48\x0f\
+\xd3\x95\x0e\xa3\x09\xdd\x8f\x5f\x34\x4d\x03\xcd\xa1\xa4\xa6\x70\
+\xb2\x1a\x8a\xd4\xc9\xe6\xb2\xc4\xf4\x38\xb9\x5c\x07\x8a\xa2\xa0\
+\xeb\xba\x28\x14\x0a\x3b\x37\x6d\xda\xf4\x4f\x42\x08\x55\x51\x94\
+\x23\x2e\x91\x54\x55\x95\xaf\x7c\xe5\x2b\xcc\x9f\x3f\x9f\xcd\x9b\
+\x37\xa3\xeb\x3a\x1d\x1d\x1d\xb8\xae\xcb\xab\xaf\xbe\x8a\xa6\x69\
+\x24\x93\x49\xda\xdb\xdb\xc7\x9b\x00\xa4\x94\x35\xc7\x22\x21\x48\
+\x29\xf9\xd1\x8f\x7e\xc4\xac\x59\xb3\xb8\xf7\xde\x7b\x2b\x65\x93\
+\x73\x4a\x7e\x92\xaa\x58\x2c\x22\xa5\x64\xd2\xa4\x49\x74\x75\x75\
+\x91\xc9\x64\x8e\xb8\x3a\x64\x42\x85\x79\x5b\x1b\x2f\xbd\xf4\x12\
+\x2d\x2d\x2d\x1c\x38\x70\x80\x78\x3c\x5e\x49\xc3\x62\xa3\x6b\x21\
+\x52\xc6\x20\xd3\xa7\xcc\xa3\x7e\x5a\x1d\x9b\x7a\xba\xa9\x8d\x4c\
+\x1e\x8b\xba\x0f\xb9\xc0\x7a\x5c\x52\xf7\xfe\x01\x46\x9e\xae\xc3\
+\xe8\xad\xd0\x2b\x8e\xe3\xf8\xe5\x3b\x63\xbf\x27\x8b\xc5\xe2\xf3\
+\x47\x73\x8f\x63\x84\xab\xab\xeb\xba\xb2\x73\xe7\xce\x4a\x0b\x85\
+\x00\x55\x55\x90\x12\x62\x91\x18\x96\x6b\x55\x1c\x2c\x81\x1f\xab\
+\x8d\xd5\x78\x2d\x38\x26\x09\x99\x37\x6f\x1e\xb3\x67\xcf\xe6\x84\
+\x13\x4e\x60\xd9\xb2\x65\x6c\xdd\xba\x95\x65\xcb\x96\xf1\xe4\x93\
+\x4f\x72\xf1\xc5\x17\xb3\x7b\xf7\x6e\x36\x6c\xd8\xc0\x99\x67\x9e\
+\x49\x73\x73\x33\xcf\x3e\xfb\xec\x9f\xa4\xc7\xdf\x69\x45\x22\x11\
+\xbe\xf5\xad\x6f\x21\x84\x60\x68\x68\xa8\x52\x01\x68\x98\xd8\xaa\
+\xcb\x86\xff\x1e\x64\x93\xf9\x55\xe6\x35\x2e\xc1\x95\x2e\x3b\xfa\
+\x36\xd1\xfa\x68\x1b\x1d\x23\xbd\x14\x86\x0e\xbd\x2c\x4d\x53\x59\
+\xf7\xb5\x61\x8c\xd1\x51\x9c\x92\x64\xc6\x8c\x19\xe8\xba\xce\xd1\
+\xaa\xa8\xb7\xf1\x0c\x87\x76\xee\xdc\x79\xf1\xac\x59\xb3\x5e\x28\
+\x95\x4a\xb8\x2a\x4c\xbd\x21\xca\xc9\xcb\x63\xd8\x8e\x43\x53\x78\
+\x1e\xc3\x46\x3b\x8e\xe1\x72\xf0\xd5\x12\xfb\x9e\xc8\xa3\xa8\x15\
+\xa7\x27\xe2\xf9\xea\x47\x0b\x48\x67\x67\x27\xbf\xfc\xe5\x2f\x39\
+\xe5\x94\x53\x78\xe5\x95\x57\xc8\xe5\x72\xf4\xf4\xf4\x60\x18\x06\
+\x4f\x3e\xf9\xa4\x5f\x99\xf1\x9b\xdf\xfc\x86\x40\x20\xe0\xa7\x3e\
+\x8f\x72\x8d\x0e\x0d\x0d\x7d\x43\xd7\x75\x6b\xec\xc1\x3f\x98\x4a\
+\xa5\x66\xe4\xf3\x79\x2c\x53\x32\x2b\x3c\x83\x19\x33\xa6\x57\xa4\
+\x54\x1a\x2c\xbb\x7e\x16\x55\x91\x32\x0d\xc3\x27\x63\x0d\x06\x71\
+\x46\x2b\x69\x27\xa1\x48\x50\x24\x4c\x83\x5c\x2e\xc7\xc8\xc8\x08\
+\xd1\x68\x94\x78\x3c\xce\x69\xa7\x9d\xc6\xcb\x2f\xbf\x7c\x5c\x1c\
+\x12\x3f\xcd\x2b\xa1\xd4\x6a\xb3\x63\x7f\x8e\x7c\xaf\x83\x6d\x6c\
+\xc4\x2e\x4a\xec\x72\xa5\x3f\x51\x0f\x68\xbe\x23\x70\xac\xd4\x49\
+\x34\x1a\x8d\xf2\xf4\xd3\x4f\xf3\xc4\xe3\x4f\x1c\xf2\x46\x84\xc7\
+\x49\x29\x7e\x4f\x8b\x50\x2a\x89\xac\xea\xea\x6a\x69\xdb\xf6\xd1\
+\xea\xac\x91\xde\xde\xde\xff\xed\xfd\x50\x5f\x5f\xbf\x5c\x51\x94\
+\x19\xaa\xa2\x80\x03\xae\xe3\x92\xcf\xe7\x11\xc0\x66\xab\x8d\x4b\
+\x5a\xa2\xb8\x4a\x8e\xe0\xd4\x22\x8a\x2c\xa1\x6a\x0a\x76\x5a\xa7\
+\xbc\x2f\x46\x7e\x5b\xd4\x67\x01\xbc\xea\xc1\x7c\x3e\x5f\xc9\xe5\
+\x8b\xe3\xd3\x31\x67\x59\x16\xb7\xdc\x72\x0b\x00\x2f\xae\x7d\x11\
+\x51\x56\xd0\xb4\x02\x42\x17\x18\xba\x81\xac\x96\x7e\x6c\x94\x48\
+\x24\x0e\x2b\x6b\xa8\xbd\x83\x41\xaf\xf7\x92\xf9\xae\x0a\x93\xe6\
+\x05\xd0\x75\x81\xb4\x75\xe6\x4e\x5e\x48\x47\x6a\x07\x28\x50\x4e\
+\x39\xa4\xbb\x7c\x1d\x2e\x6c\xdb\xee\xe0\xf8\x2c\x25\x10\x08\x30\
+\x7d\xe1\xc2\x4a\x46\xcf\x1a\xa3\xd6\xbd\x88\x58\x11\xac\xac\xbe\
+\x85\xf7\x9d\x7e\x2d\x3b\x86\x5f\xe6\x85\x2d\x2f\xa1\x35\x0f\xd3\
+\xd6\x37\xe0\x13\x85\x5e\xc2\xca\x8b\x05\xd6\xaf\x5f\xef\xf1\x55\
+\xc7\xbc\xce\x3e\xfb\x6c\x2e\xb8\xe0\x02\xe6\xcc\x99\x43\xa1\x50\
+\xa0\xb7\xb7\x97\x8b\x2f\xbe\x98\xc7\x1f\x7f\x9c\xf3\xce\x3b\x8f\
+\x62\xb1\xc8\xab\xaf\xbe\xca\xfc\xf9\xf3\x89\xc5\x62\x3c\xf5\xd4\
+\x53\x7e\x09\xee\x51\x01\xa2\x28\x8a\xa8\xaf\xaf\xa7\x90\x2f\x60\
+\x45\x24\x4b\x3f\x52\x47\x75\x8d\x86\x74\x25\xc9\xb6\x7e\xea\xf6\
+\x55\x31\xbc\xdd\xc0\x1a\x75\x88\xc5\x82\xbe\x27\x31\x34\x34\xf4\
+\xe6\xf1\x78\x60\xd7\x75\xb9\xfd\xf6\xdb\xa9\xae\xae\xe6\x8a\x2b\
+\xae\xe0\xa2\x8b\x2e\xaa\xe4\x20\x24\x10\x82\x4c\xba\xc4\x65\x67\
+\x5c\xcf\x2d\xbf\x3c\x93\x9f\xff\xcd\x2e\x4e\x08\x2d\x25\xe1\xec\
+\x67\xf7\xfa\x3b\x30\x0c\xcd\x0f\x5a\xcb\xe5\x32\xd1\x68\x94\x60\
+\x30\x78\x58\xae\xe7\xe1\xae\x6d\xdb\xb6\x31\x75\xea\x54\x06\x06\
+\x06\x50\x55\x95\xda\xda\x5a\x76\xec\xd8\x81\x10\x82\x8e\x8e\x0e\
+\xbf\x16\x78\xe7\xce\x9d\xac\x5c\xb9\xf2\xd8\xe9\x77\x8f\x7b\x29\
+\x95\x4b\xe8\x8e\xce\x9b\x77\xa7\x91\x16\x58\xc5\x43\x39\x74\xa1\
+\x4c\xd4\x8d\x47\x42\x9b\x1c\xce\x32\x4d\x93\xfa\xfa\x7a\xbf\xe2\
+\xdc\xb2\xac\x4a\x27\x6f\x08\x0c\xc3\x25\x14\x0c\xe0\x52\xa9\x3f\
+\xeb\x1e\x3a\xc8\xc6\xfc\x63\x28\xa8\x13\x92\x47\x1e\xf7\xd4\xd6\
+\xd6\x36\xb7\x58\x2c\x8e\x00\xb2\xa1\xa1\xc1\x38\x1e\x36\xe4\xea\
+\xab\xaf\x46\xd3\xb4\x3f\x48\x56\xb5\xb7\xb7\xfb\xc4\xa2\x94\x92\
+\x5f\xfc\xe2\x17\x95\xf7\x75\xac\xf4\xfb\x25\x97\x5c\xc2\x87\x3e\
+\xf4\x21\x5c\xd7\xe5\xc9\x27\x9f\xa4\xab\xab\x8b\x68\x34\xca\xc1\
+\x83\x07\x89\xc5\x62\x54\x55\x55\x71\xe0\xc0\x01\x72\xb9\x1c\x8d\
+\x8d\x8d\xf4\xf4\xf4\x1c\xb7\x1d\x28\x84\xe0\x87\x3f\xfc\x21\xcb\
+\x96\x2d\xe3\x3f\xfe\xe3\x3f\x0e\x05\x7f\x08\xa4\x0b\xf1\x78\x88\
+\x64\x26\x4d\x4d\xa0\xbe\xe2\x56\x4a\x9b\x80\x88\x20\x5d\x89\x65\
+\xd9\x7e\xad\x98\x57\xd6\xa9\xeb\x7a\xce\x75\xdd\x0c\x70\x44\xfc\
+\xd5\x1f\x91\x5e\x73\x7c\xbe\xc7\x09\x40\x75\x5c\xc5\x71\x5d\x26\
+\x87\x67\x50\x72\xd3\x14\xac\x2c\x42\x48\x8c\xac\x8b\x5b\x92\x7e\
+\xf6\xf0\xa8\x01\x19\x6b\xc0\xa4\xb5\xb5\x95\x1b\x6e\xb8\x81\x6d\
+\xdb\xb6\x51\x2a\x95\xa8\xab\xab\x63\xd9\xb2\x65\x6c\xdc\xb8\x91\
+\x60\x30\x48\x38\x1c\x26\x93\xc9\x1c\xf7\xb6\x66\x29\xa5\x5b\x55\
+\x55\x25\x77\xec\xd8\x51\x29\x59\xf0\x4a\x50\x25\x48\x21\x89\x45\
+\xc2\x3c\xbe\xfb\x7e\xbe\x75\xe5\x6f\xf8\xcd\xfe\x87\x78\xa9\xe3\
+\x65\xce\x3a\xe9\x74\x5e\x73\x37\x62\x18\xa6\xcf\xe8\x7a\x54\x8c\
+\x6d\xdb\xb3\xea\xeb\xeb\x03\xa3\xa3\xa3\x3d\xc7\x7a\x6f\xb6\x6d\
+\xb7\x09\x21\x2a\xc5\x82\x08\x46\x96\x48\xfe\xee\xf6\x66\x24\x2e\
+\x51\x33\x42\x50\x0f\x72\x70\xb8\x80\x55\x90\xbc\x7e\x57\x0a\xe9\
+\x54\x34\xce\x31\xb9\xbd\x42\x08\xbe\xf9\xcd\x6f\x72\xfb\xed\xb7\
+\xf3\xc9\x4f\x7e\x92\xb6\xb6\x36\x5c\xd7\x9d\xd0\x5f\x38\xd6\x9f\
+\x8d\x94\x92\x9e\x9e\x9e\xe3\x0a\x48\x2a\x95\xba\xe8\xf9\xe7\x9f\
+\xa7\xa5\xa5\xa5\x7d\xce\x9c\x39\xb3\xb3\xd9\x6c\xa5\x6e\x58\x28\
+\x14\x6a\x24\x25\x33\xca\x7e\xf9\x1c\xdf\x79\x56\x67\xd5\xe9\xa7\
+\x90\x50\x76\xf0\xcc\xbe\x5d\x0c\xb5\xe5\x48\xa5\x2a\x01\x6b\x28\
+\x14\xa2\xa5\xa5\x85\x52\xa9\xc4\xb5\xd7\x5e\xfb\x7a\x5b\x5b\xdb\
+\x86\x75\xeb\xd6\xad\x3c\x1e\x0e\x87\xef\xfa\x0a\x85\xba\x83\x92\
+\x7d\x4f\x15\x18\xda\x6e\x90\xef\xdb\x38\x41\x35\xa9\x42\x03\x8d\
+\xb7\xcd\x9f\x1c\xb1\x0d\x89\xc7\xe3\xdc\x77\xdf\x7d\x7e\xc2\xc8\
+\x2b\x34\x00\xd0\x35\x1d\x5d\x3b\xe4\x0a\x7b\xe5\xa3\xfb\xf7\xef\
+\x9f\x71\x3c\xed\x88\x57\x2d\xef\xbd\x00\x81\x40\x35\x5c\xb4\x30\
+\xe4\x7b\xe1\xf5\xce\x9f\xf3\xe4\x4f\x7e\x4c\x79\x44\x62\x95\x5c\
+\xca\x69\xd7\x8f\x85\x54\x55\x25\x9d\x4e\x13\x0a\x85\x18\x19\x19\
+\x39\xa2\x5e\x8d\xc3\x21\x18\x2f\xbc\xf0\x42\x6e\xbc\xf1\x46\xbe\
+\xf5\xad\x6f\xa1\xf6\xa9\x10\xcc\xd1\x38\x1b\xbf\x7f\xbf\x5c\x2e\
+\x53\x55\x55\x45\x2a\x95\xc2\xeb\x8b\x3f\x6a\x40\x62\xb1\x98\xdc\
+\xb4\x69\x53\xa5\x92\x23\x06\x0b\xcf\x8f\xa1\x07\x04\x4a\xa9\x9e\
+\x0b\x16\x5f\xca\xef\x3a\x1f\x41\x0b\xa8\x8c\xee\x33\x19\xd8\x5c\
+\xf6\x12\x4e\x52\xd7\xf5\x29\xc7\x13\x10\xd7\x75\x1d\x2f\x69\xa5\
+\xaa\x2a\x8b\x17\x2f\xa6\xb3\xbd\x83\xd7\xfe\xa9\x5c\xd9\x1b\x0a\
+\xa0\x54\x28\x12\xe1\xba\x84\x42\xd2\xa7\x2a\xbc\x11\x18\x63\x3d\
+\x7f\xc7\xb5\x91\xb4\x58\x2c\xf2\xe9\x4f\x7f\x9a\x54\x2a\xc5\x27\
+\x3f\xf9\x49\x1e\x7a\xe8\x21\x4e\x5f\x79\x3a\xdd\xdd\xdd\xcc\x9b\
+\x37\x8f\xdf\xfe\xf6\xb7\xac\x5c\xb9\x12\x5d\xd7\xc9\x66\xb3\xec\
+\xd8\xb1\xc3\xaf\x9a\x3f\x2a\x40\x42\x63\x4f\x66\xdb\x36\xb2\xda\
+\x65\xc6\x39\x35\x68\x08\xac\xb2\xc1\xeb\x23\x3f\x43\xb5\xc3\x24\
+\x5a\x0d\x92\xfb\x2b\xc1\xcf\x98\xdb\x2b\x86\x87\x87\x8f\xc9\xaa\
+\xc7\xe3\xf1\x96\xb9\x73\xe7\x1e\x08\x04\x02\x15\x4f\x4f\x51\x71\
+\x84\x4d\xa9\x54\xe2\xdb\xdf\xfe\x36\x4d\x4d\x4d\x24\x12\x09\x7e\
+\xf7\xbb\xdf\xf9\x05\x04\x00\x23\x23\x23\x4c\x9d\x3a\x95\x64\x32\
+\xc9\xc8\xc8\x08\xaa\xaa\x92\x4c\x26\x09\x85\x42\x94\xcb\x65\x02\
+\x81\xc0\x71\x05\x24\x14\x0a\xb1\x63\xc7\x0e\x66\xcf\x9e\xcd\x0b\
+\x2f\xbc\xe0\xf7\xd0\x8c\x8e\x8e\xfa\x95\x90\x83\x83\x83\xc4\xe3\
+\x71\xbf\x78\xf0\x9d\x58\x8c\x77\xb4\x21\x9e\x1b\x5b\x9d\x83\x0d\
+\x77\x64\xdf\x32\xaa\xa8\xa2\x46\x82\x11\x7d\x82\x18\x1f\x87\x9d\
+\x17\x98\x3d\x7b\x36\xb6\x6d\xa3\x0a\x95\x56\x75\x3f\x67\xdd\x10\
+\x64\xfd\x7f\x38\xbe\x2b\x3c\x6f\xde\x3c\x1e\x7b\xec\x31\x9a\x9b\
+\x9b\xa9\xad\xad\x65\xde\xbc\x79\xdc\x73\xcf\x3d\x68\x9a\xc6\xc2\
+\x85\x0b\xd1\x75\x9d\x5f\xff\xfa\xd7\x7e\x56\xd0\xab\x5e\x3f\x9e\
+\x80\x84\xc3\x61\xbe\xfa\xd5\xaf\x4e\x50\x43\xad\xad\xad\x00\xec\
+\xdf\xbf\xdf\xa7\xe8\xc7\xab\xde\x63\x02\x44\x4a\xc9\x3f\xfe\xe3\
+\x3f\x32\x77\xee\x5c\x6a\x6b\x6b\x79\xe2\x89\x27\x38\x78\xf0\x20\
+\x9a\xa6\xf9\x85\xd4\x73\xe7\xce\xa5\xbd\xbd\x9d\x44\x22\x41\x73\
+\x73\x33\x07\x0e\x1c\x38\x2e\xee\xae\xd7\x68\xa3\x09\x95\x4c\x3c\
+\x03\x72\x32\x91\x48\x84\xaf\x7f\xfd\xeb\x9c\x7a\xea\xa9\x7e\xed\
+\x97\xc7\x24\xe8\xba\x4e\xb1\x58\x64\xd7\xae\x5d\x7e\x4f\xbc\xe7\
+\xf7\x8f\xa7\x2c\x8e\x17\x20\xf1\x78\xfc\x1b\x5e\x40\x08\x20\x15\
+\x89\xa6\x09\x5c\x17\xa2\xa1\x28\x05\x23\x57\x69\x10\x12\xe0\xda\
+\x87\x18\xdf\x77\xba\xbe\xf6\x4e\x5c\xcd\xfc\xf9\xf3\xc9\xe5\x72\
+\x5c\x7a\xe9\xa5\xfc\xfe\xf7\xbf\x67\xce\x9c\x39\xd4\xd7\xd7\x33\
+\x73\xe6\x4c\x1e\x7a\xe8\x21\x74\x5d\x67\xd2\xa4\x49\x78\xcd\xa0\
+\xc7\xc3\xcb\x1a\x3f\xa1\x47\x52\x29\x42\x28\x17\x25\xf9\xb4\x41\
+\x44\x53\x59\xbb\xb6\x52\xdd\xa9\xab\x41\x14\xad\x52\x23\xe6\x35\
+\x00\x79\x76\xc2\x8b\xc8\xbd\xde\x72\x2f\x4d\x6b\x59\xd6\xa4\x50\
+\x28\x74\x9d\x10\x22\x00\x88\xba\xba\xba\x57\xfb\xfa\xfa\xba\x8e\
+\xc2\xae\x4d\xaf\xaf\xaf\xaf\xd8\x04\x45\xa0\x9d\xaf\x73\xe9\xb5\
+\x93\x28\x96\x0d\x2e\x3b\xf1\x66\xb6\x8c\x3e\x45\x62\x28\x49\xae\
+\xdf\x61\xc3\x37\x93\x3e\xcb\x1c\x8d\x46\x87\x8f\x1a\x90\x60\x30\
+\xc8\xbd\xf7\xde\xcb\xe7\x3e\xf7\x39\x3e\xf6\xb1\x8f\xd1\xdf\xdf\
+\xef\x8b\xbd\x37\xdb\x24\x95\x4a\x61\x59\x16\xa5\x52\xc9\xcf\x85\
+\xc8\xb1\xc8\xf0\xad\x0d\x34\x47\x0a\x88\x61\x18\x38\x28\xa8\xaa\
+\x42\x6f\xa7\xc1\xdd\xf7\x7e\x95\x6f\x3c\xfb\x2f\x7c\xe1\xfc\x2f\
+\x13\x8f\xc4\xf9\x9f\xad\x5f\xa4\xfd\x37\x39\x8c\x11\xc5\xaf\xec\
+\x38\xe1\x84\x13\x68\x6c\x6c\x64\xfb\xf6\xed\xd4\x35\x55\x71\xc2\
+\xcc\x46\x96\x4f\x5a\x86\xea\xea\x15\x07\x40\x30\x47\x22\x1f\xf3\
+\xd2\xd0\x3f\xfc\xe1\x0f\xff\x06\xe8\x3a\x8a\x7b\x94\xe3\x55\xb4\
+\x18\x81\xe1\x5d\x65\x12\x7b\x2d\xbe\xfa\xdd\x7b\x49\xee\xb3\x70\
+\x4d\x89\xa2\x0b\x14\x4d\xf1\x35\x8e\x10\x42\x39\x26\x1b\x92\x48\
+\x24\xb8\xfd\xf6\xdb\x0f\xeb\x26\xbd\x1e\x43\x21\xc4\xa2\xa6\x43\
+\x9e\x9f\xf6\x00\x00\x16\x56\x49\x44\x41\x54\xa6\xa6\x53\x06\x06\
+\x06\xb6\x1d\x43\xe0\x55\x01\x5d\x2a\xa8\x42\x05\x14\x96\x2e\x3b\
+\x85\x86\xb6\x2a\x96\xaf\x38\x8d\x29\xb5\x4d\xac\x29\xa9\x54\x6d\
+\x8c\xa0\xe4\x85\xaf\xd3\x67\xcc\x98\xe1\x79\x88\x4c\x3a\xdd\xa5\
+\xf9\xec\x34\xd2\x4d\xe3\x00\xc6\x40\x00\xa3\x2d\x42\xb9\x33\x82\
+\x10\x15\xde\x4d\x55\xd5\xa3\x76\x40\x54\x55\x65\xe1\xc2\x85\x9c\
+\x74\xd2\x49\x6c\xd8\xb0\x81\x81\x35\x15\xa3\x1e\x70\x1c\x26\x37\
+\xba\x7e\xac\xe6\x6d\x62\x6f\xb0\xdb\x51\x03\x32\x3c\x3c\xdc\xe5\
+\xba\xee\x5c\xaf\x80\xa0\xe9\xac\x30\x91\x88\x82\xb4\x75\xde\x77\
+\xd2\x2d\x3c\xb3\xef\x87\xd8\x18\xd8\x86\xe4\xc0\xef\x8b\x7e\x0a\
+\xb5\xaa\xaa\x2a\x52\x2c\x16\xe3\x47\xf2\x70\x53\xa6\x4c\x79\x5f\
+\xb1\x58\xbc\x10\x70\xa5\x94\xf1\xce\xce\xce\x8a\xee\x97\x82\xb2\
+\x61\x32\xd0\x53\xe2\xab\x89\x6f\xb2\xa7\x6d\x98\x3b\xb6\xfd\x2b\
+\xb1\x50\x35\x1b\x0e\x1e\xc4\xee\x8b\xa2\x58\x41\x7f\x07\xb6\xb6\
+\xb6\xfa\x6d\x69\x81\x62\x33\x77\x5e\xf4\x23\x36\xf6\xfe\x96\x1f\
+\xbc\xf8\x9f\xcc\x9c\x51\xc7\x50\x39\x4f\x76\x77\xa5\xb6\x57\xd7\
+\xf5\x63\xa2\xe2\x83\xc1\x20\xdf\xfc\xe6\x37\x89\xc5\x62\x34\x35\
+\x35\xb1\x63\xc7\x0e\xce\x3d\xf7\x5c\xd6\xac\x59\xc3\xca\x95\x2b\
+\x69\x6b\x6b\x43\x08\xc1\xac\x59\xb3\xc8\x64\x32\xbc\xf2\xca\x2b\
+\xc7\xc6\xf6\x5a\x96\xd5\x16\x0c\x06\x2f\xf6\xf2\xd5\xd3\x2f\x09\
+\x13\x8f\x6b\xe4\xfa\x6d\x7e\x33\x70\x1f\xb6\x22\x28\x0c\x38\xa4\
+\xbb\x0f\x19\x4d\x5d\xd7\x7d\x37\xf4\x08\x49\xc4\x5b\xaf\xbb\xee\
+\xba\xf3\xa5\x94\xb8\x48\x32\x55\xa3\x34\x4d\x0f\xe0\x66\xbc\xfa\
+\x2b\x9d\x74\x22\xc7\xa9\x0d\xe7\x60\x16\x6d\x92\xc5\x24\xa7\x37\
+\x5d\xc9\xb3\x5b\x9f\x21\x18\x74\x7c\x09\x55\x14\x05\xe9\x4a\xa4\
+\x25\xb8\x76\xf9\x87\xf8\xef\x0d\xff\xca\xf2\xd8\x87\x58\xd9\x70\
+\x23\x2b\x17\x2c\xe0\x3b\xad\x5f\x99\xd0\xfb\x7e\xb4\x80\x48\x29\
+\x9d\xf1\x05\xe5\x9e\x93\xe3\xb9\xd9\x5e\xc7\x59\x77\x77\x37\x81\
+\x40\x80\xda\xda\x5a\x7f\x9c\xd3\xb1\x90\x8b\x0a\x40\x75\x75\x35\
+\xb6\x6d\xb3\xe3\x6b\x45\xac\x9c\x44\x68\x20\x14\x10\xaa\x57\x81\
+\xa1\xa2\x69\x87\x22\xe3\xa3\x1c\xab\xa4\x27\x93\x49\x5c\xd7\x25\
+\x63\x17\x99\x73\x45\x06\x5b\xad\xa8\x7d\x29\x6c\x74\x4d\x85\xa4\
+\x82\x71\x20\x4a\xfe\x8d\xb1\xe1\x30\x63\xde\xd4\xf8\x12\xa0\x48\
+\x38\x4c\x32\x98\xe3\xcc\x8f\x45\x38\xff\xfc\x0b\xf8\xd1\xce\xe7\
+\x18\x4a\x8d\xb0\xb7\x7f\x27\xc5\x9a\xed\xa8\x54\x6a\x6c\x85\x7a\
+\x74\xe3\x93\x00\x1a\x1b\x1b\x4f\x94\x52\xae\x08\x85\x42\x5c\x73\
+\xcd\x35\xc4\x62\x31\x7f\x13\x6e\xdd\xba\x15\x45\x51\xd8\xb3\x67\
+\x8f\x5f\xf4\x31\x30\x30\xe0\x17\x18\x1e\x2b\x20\x9c\x7c\xf2\xc9\
+\x7c\xe9\x4b\x5f\xc2\xb6\x6d\x1e\x7e\xf8\x61\x0e\x1c\x38\x30\x61\
+\x8e\x47\x3c\x1e\x67\x70\x70\xd0\x8f\x46\xbd\xc1\x34\x47\x9b\x81\
+\x73\x5d\x17\xcb\xb1\x51\x84\x42\xba\x27\xcc\x23\x7f\xff\x3b\xfa\
+\x0b\xfb\xb9\xe3\xb7\x7f\xc7\xec\xc6\x79\x74\x96\xdb\x30\xca\x21\
+\x14\xfd\xd0\x44\x37\xdf\xf5\xf4\x8a\xf6\x14\x85\x40\x40\xc7\xb2\
+\x0c\x34\x25\x88\xaa\x68\x04\xb4\x20\x21\xad\x42\x85\x1b\xa6\x81\
+\xa2\x8a\xa3\x9e\xc7\x55\x2a\x95\x5a\x9a\x9b\x9b\xc3\x85\x42\x81\
+\xaa\xaa\x2a\x9f\x32\x1a\xbf\xfe\x58\xb1\xa0\x17\x30\x1e\x35\x20\
+\x2b\x56\xac\x60\xf7\xee\xdd\xfc\xf5\x5f\xff\x35\x67\x9c\x71\x06\
+\x42\x08\x22\x91\x4a\x1b\xb1\x97\x0e\x2d\x16\x8b\x0c\x0f\x0f\xd3\
+\xdc\xdc\xcc\xe0\xe0\xa0\x6f\x97\x8f\xf4\x41\xbd\xb9\x8d\x16\x15\
+\x55\xb0\x7a\xd5\xbf\xf2\xf3\x3d\x5f\x27\x79\xa0\x9a\x05\xda\x55\
+\xdc\x72\xc6\xdf\xf3\x99\x9e\xf7\x57\x5c\x5c\xa7\xa2\x72\x82\xc1\
+\xa0\x3f\xdb\xd1\x75\x5d\x0c\xd3\xc4\x2a\x18\x64\xd7\x2c\xe6\x8b\
+\xbf\xfa\x22\x8e\xb4\xd9\xcb\xe3\x94\x0d\x8b\xcc\xcb\x02\xe4\x0c\
+\x66\xcf\x96\x20\x2a\xb9\x8a\xcb\x2f\xbf\xfc\x7f\x84\x10\xdf\x07\
+\xd8\xbc\x79\x73\xc7\xde\xbd\x7b\x97\x1c\xae\x27\x98\x4e\xa7\x2b\
+\x1d\xc4\x01\xb8\xe4\xdf\x1a\x50\x54\x01\xa8\x34\xd7\x9f\x40\x7f\
+\xea\x00\xa3\xfb\x4c\x0e\xbc\x58\x24\xd5\x5e\x91\xe0\xaa\xaa\x2a\
+\xf2\xf9\xfc\xfd\xc7\x14\x18\xfe\xfc\xe7\x3f\xe7\x03\x1f\xf8\x00\
+\x77\xdf\x7d\x37\xeb\xd7\xaf\xf7\xfd\xfd\x7c\x3e\xef\xd3\x25\xa9\
+\x54\x6a\x42\xaa\x54\x4a\x49\x63\x63\xe3\x97\x14\x45\xb9\xa5\xaf\
+\xaf\xef\xc0\x91\x4a\x88\x83\x83\x22\x55\xa6\xd4\x4d\x61\xff\x40\
+\x91\xa2\x05\x1d\xc3\xfb\x79\x72\xef\x7d\xd8\xb6\x85\x65\x55\x74\
+\xa9\x69\x9a\x04\x83\x41\x4e\x3d\xf5\x54\xf6\xee\xdd\x4b\x22\x91\
+\x20\x9d\x4e\x63\xba\x26\x56\xd9\xc6\x30\x2a\x53\x91\x76\xd7\x6e\
+\xe6\x9c\x6b\x63\x38\xb9\xca\x1c\x45\x37\x13\xc4\xc9\x6a\x38\x19\
+\x0d\x6b\x20\x18\x40\xfa\x33\x15\x83\x47\x60\x43\xd0\xf5\x4a\x3d\
+\x98\xee\x2a\x0c\x6c\x36\x29\x0e\x3b\x14\x86\x1c\x5e\x1d\x48\x50\
+\x4e\xb9\x95\xba\x35\x4d\xf8\xb5\x08\x63\x36\xcb\x3e\x26\x1b\xe2\
+\xba\x2e\x0f\x3c\xf0\xc0\xa1\x1b\xf1\x02\x4d\x01\x99\x74\x06\xcf\
+\xad\x16\xa2\xc2\xdb\x78\x63\xfd\xe6\xcc\x99\x73\x51\x26\x93\xa9\
+\x07\xfe\x28\x20\xf3\xe6\xcd\x7b\x8f\xae\xeb\x42\x51\x14\x67\x78\
+\x78\x38\x56\x2e\x55\x26\x7b\x5a\x8a\x4d\xbe\x3f\xc0\xae\x5d\xbb\
+\x48\xe4\x0a\xa4\x07\x6c\xb2\x89\x2c\xa3\x07\x8b\xe4\x07\x2d\x4c\
+\x4b\xa2\xc8\x0a\x80\x86\x61\xd0\xdc\xdc\xcc\x8e\x1d\x3b\x50\x94\
+\x4a\xeb\xb4\x23\x0f\x4d\x1e\x32\x5c\x8b\x70\x2d\x28\x8e\xc6\xb4\
+\xfa\x05\xc4\x67\x54\xb1\x73\x70\x03\x75\x91\xc9\x64\xe5\x10\x03\
+\x0f\x36\xe0\x14\x0e\xa9\xbc\x23\x49\x2f\x57\x55\x55\xb1\x7a\xf5\
+\x6a\xf6\xec\xd9\xc3\x81\x7d\x07\x08\x18\x65\x54\xc7\x21\x56\xef\
+\x62\xd7\xd8\xfe\x98\x0e\x2f\x6e\xf3\xbc\xbf\x63\x89\x43\xfe\xfb\
+\xe0\xc1\x83\x17\xdb\xb6\x3d\x53\x08\x41\x31\x26\x39\xf5\xf2\x6a\
+\xf4\x80\xa0\x30\x52\xc5\xfb\xcf\xb8\x9e\x67\xf6\xfd\x00\x4d\xd5\
+\x19\xda\x6e\x30\xb8\xb5\x84\x50\x84\x3f\xed\xe7\x1d\x1e\xb0\xe1\
+\xb4\xd3\x4e\xdb\xac\xaa\xaa\x10\x42\x20\x91\x50\x5b\x82\x6c\x10\
+\xe1\xa8\xb0\x11\x9e\xd8\xf8\xd4\x21\xde\x88\x1a\x76\x1c\x18\x64\
+\xf4\x60\x0c\x47\xe6\xb0\x4d\xe9\x1b\x73\xaf\x16\xcc\x9b\xec\xe6\
+\x9a\xae\xdf\x6a\x6d\x49\x07\x45\x55\xe8\xde\x6f\xf3\x95\x5b\xbf\
+\xc2\x0f\xd6\x7e\x97\x4b\x5a\x6e\xe1\x8a\x25\x1f\xe4\x53\xcf\x5f\
+\x80\x65\x5a\xd8\xa6\x73\x44\x80\x78\x69\xd9\x6f\x7f\xfb\xdb\x24\
+\x12\x09\x6e\xbe\xf9\x66\x9e\x7b\xee\x39\xbf\x72\xb1\xbd\xbd\x9d\
+\x65\xcb\x96\x11\x0e\x87\xd9\xb6\x6d\x1b\xdb\xb6\x6d\x63\xe9\xd2\
+\xa5\x6c\xd8\xb0\xe1\x1d\xbf\xfb\x4f\x02\x92\xcb\xe5\xb6\x36\x37\
+\x37\x0f\x1b\x86\x31\x53\x08\x81\xa1\x3b\xb4\x9c\x57\x8d\x9d\x92\
+\xa4\x3b\x0c\x1e\xfd\xed\x03\x14\x07\x04\x56\xd1\xa2\x9c\x92\x84\
+\xc2\x21\xdf\xf5\x7d\xa7\xf6\x30\x40\x2f\x97\xcb\xc2\xb6\x6d\x10\
+\xb0\x35\xb2\x8b\xf7\x9e\x5f\x87\x2b\x5d\x1c\xc3\x45\xb1\x83\x48\
+\x4b\xc1\xc9\xab\xe4\x5e\xab\xc1\x29\xaa\x3e\xb1\x98\x4c\x26\xfd\
+\xe0\xd1\xa3\x47\x5c\xd7\xa5\xb3\xb3\x53\xbe\xf1\xc6\x1b\xe2\xd1\
+\x47\x1f\x65\xdb\xb6\x6d\x15\xc7\x43\x3a\xa8\x9a\xc2\x09\xd5\x4b\
+\x38\x98\xdf\xcd\x48\xf9\x20\xff\xeb\xc4\xdb\x09\x6a\x21\x42\xa1\
+\x20\x96\x63\x63\x99\xbe\x1a\x7a\x47\x44\x6a\x6a\x6a\x3e\x71\xde\
+\x79\xe7\x7d\xa3\xb5\xb5\x95\x47\x1e\x79\x84\x2f\x7f\xf9\xcb\xf4\
+\xf5\xf5\xb1\x77\xef\x5e\x72\xb9\x9c\x4f\xd3\xac\x5d\xbb\x96\x99\
+\x33\x67\xd2\xd3\xd3\x83\xe3\x38\x8c\x8e\x8e\x1e\x9f\xc1\x01\x95\
+\x0d\x21\x38\xe9\xa4\x93\xe8\xee\xea\x66\xe3\xe7\xca\x48\x7b\xcc\
+\x21\x16\x1a\x08\x15\xe9\x38\x84\x42\xba\xff\x72\xbc\x12\xfc\x77\
+\xba\x01\xbf\x3c\x07\x49\xa0\xae\xd2\xd9\x74\xd6\xa4\x0f\xd3\x32\
+\xb9\x85\xa7\x3b\xbe\xc7\xcc\xaa\x53\xd8\x9a\xfa\x0d\xf6\xc6\x30\
+\xb6\x75\xa8\x8a\x64\x7c\x1b\x44\xa1\x50\xb8\x63\xff\xfe\xfd\xff\
+\x3e\x69\xd2\xa4\x81\x91\x91\x91\xc6\xb5\x6b\xd7\xb2\x68\xd1\x22\
+\x36\x6e\xdc\x58\xe9\xc8\x52\x5d\x92\xbf\x2f\xd3\x3b\x75\x90\x7b\
+\x36\x3f\x40\x32\x97\xe0\x0b\xbf\xfb\x12\xaa\xa2\xd2\x9d\x05\x2b\
+\x7f\x48\x32\x26\x4f\x9e\x7c\xc2\xb4\x69\xd3\x5e\x05\x54\xc7\x71\
+\xd8\xb9\x73\xe7\x75\xc9\x64\xb2\xe7\x2d\x6c\x44\xad\xa2\x28\x9a\
+\x94\x92\x4d\x9b\x36\x71\xd1\x45\x17\xf9\xe4\xe6\x5b\xd7\xfe\xfd\
+\xfb\x7d\x82\x73\xeb\xd6\xad\xc4\xe3\xf1\x63\x07\xc4\xb2\x2c\x6e\
+\xbd\xf5\x56\xce\x3b\xef\x3c\x0c\xc3\xe0\xb1\xc7\x1e\xf3\x07\x41\
+\x7a\x9e\xd6\x9c\x39\x73\xd8\xbb\x77\xaf\x4f\x0d\x0c\x0c\x0c\x78\
+\x37\xb9\x70\xda\xb4\x69\xc9\xde\xde\xde\xb7\xe3\x8a\x1c\x8f\xaf\
+\x92\x02\x14\x45\xd0\xbd\xcf\xe6\xdb\x7f\x75\x13\xff\xf0\xe3\x2b\
+\xf8\xe2\xc5\xdf\x27\x1e\x6e\x60\x74\x7b\x27\x83\xd6\x08\x86\xe1\
+\xf8\x80\x7b\xc4\xe1\xb8\x2a\x49\xa9\xaa\x2a\xb7\xde\x7a\x2b\x9f\
+\xff\xfc\xe7\xb9\xff\xfe\xfb\xfd\x09\x3c\xb6\x70\xd1\x8a\x1a\xb1\
+\x13\xaa\x28\x65\x2c\x0a\x96\x60\x64\xd9\x56\xe2\xb1\x10\x93\x46\
+\xc2\xd8\xf5\x41\xdc\xb2\x8a\x34\x14\xa4\xa9\x84\x91\xe2\x4c\x2f\
+\xf7\xfd\xe6\x9b\x6f\x86\xde\x4e\x5d\x8d\x4f\x5b\x2b\xaa\x4a\xb8\
+\x4a\x23\x10\x14\x87\x3a\xa6\x04\xd8\x25\x17\xbb\xa4\xf8\x36\x57\
+\x51\x14\x4a\xa5\x92\x65\x9a\x66\xe2\x98\x00\x71\x1c\x87\xd9\xb3\
+\x67\x93\x4c\x26\x39\xe5\x94\x53\x08\x85\x42\x9c\x72\xca\x29\x44\
+\xa3\x51\xa2\xd1\x28\x3f\xf9\xc9\x4f\xa8\xa9\xa9\xe1\xcc\x33\xcf\
+\x24\x9d\x4e\xb3\x6e\xdd\x3a\x02\x81\x00\xb6\x6d\xf3\x9e\xf7\xbc\
+\xe7\xe1\xf6\xf6\xf6\x1f\xf7\xf6\xf6\xde\x34\x46\x36\x36\x01\xab\
+\x01\xd3\x75\xdd\xea\xde\xde\xde\x4a\x01\x32\x60\x5a\x26\xf9\x6c\
+\x8c\x3b\xef\xfc\x1a\x3d\xed\x59\x1e\x1f\x7a\x86\x4c\x21\xc3\x2b\
+\x7d\x6f\x52\xe8\x0a\x13\xd3\x6b\x3d\xb6\x94\xaa\xaa\x2a\x72\xb9\
+\xdc\x84\xd1\x17\x42\x08\xda\xda\xda\xb8\xe9\xa6\x9b\xc8\xe5\x72\
+\x54\x55\x55\x55\x66\x09\x0b\x17\xdc\xb1\x39\xed\xc0\x90\x36\xc2\
+\xc2\x85\x01\x6c\xcb\x84\xa6\x89\x23\x93\xb2\x9b\xc7\x2a\x1e\x85\
+\xf4\x0b\x23\xfe\x18\xf1\xd9\xd0\xd0\x30\xd6\x82\x00\xb5\xe7\x04\
+\x59\x7c\x5a\x8c\xa1\xed\x65\x46\xf7\x59\x8c\xee\x36\x71\xed\xb7\
+\x75\x04\x0e\x0c\x0e\x0e\xde\x77\x4c\x80\x44\x22\x11\xee\xbc\xf3\
+\x4e\xce\x3c\xf3\x4c\xee\xb9\xe7\x1e\x8a\xc5\xe2\x84\xec\x97\x69\
+\x9a\xac\x5d\xbb\x16\xdb\xae\x64\xf4\x82\xc1\xa0\xff\xef\xde\xf0\
+\x2e\x6f\x8d\x8c\x8c\xac\xba\xf2\xca\x2b\x3f\xef\x51\xf4\x19\xb3\
+\x28\x6b\x67\x3b\x42\x26\xc3\xb8\xc9\x00\xd8\x92\x3d\x6f\x76\x32\
+\x59\x59\xc0\xa6\x8d\x95\xe9\xdc\xd3\xb4\xe5\x74\xba\x1d\x7e\x8e\
+\x3a\x12\x89\x10\x0c\x06\xfd\x91\x47\xe3\xa8\x97\x7b\x86\x87\x87\
+\xab\x84\x10\x6e\xb9\x5c\x5e\x2e\x84\xb8\xb8\x5c\x2e\xe3\x28\x2e\
+\xa1\x50\x78\xac\xe2\x51\x80\x2a\x31\x4d\x87\x0f\xcc\xbc\x93\xee\
+\xec\x2e\x4e\x9a\xb5\x98\xff\x7a\xee\x3e\xec\xba\x76\x1c\x27\x82\
+\x65\x5a\xa0\xc8\xb7\x8d\xe2\x03\x81\xc0\x6c\x29\x65\x9d\x37\x48\
+\x61\xd1\xa2\x45\x04\x02\x01\xfa\x5e\xeb\x65\xe7\xcb\x12\x49\x00\
+\x29\x75\x62\x91\x90\xaf\x52\xbd\x5f\x5e\x61\xc8\x31\xab\x2c\xdb\
+\xb6\x83\x8a\xa2\xf0\xda\x6b\xaf\x55\xf4\xa1\x64\xc2\x64\x05\x21\
+\xc0\xb6\x1c\x84\x52\x31\xe6\x5e\x2e\xa2\x50\x28\x4c\x18\x2c\xec\
+\x3d\x93\x33\x6e\x50\x72\x76\x61\xa7\x98\x79\x46\x14\xcb\x35\x71\
+\x1c\x17\x25\x17\xab\xc4\x07\xde\xec\xdc\x31\xf7\xd2\x9b\x17\x2c\
+\xa5\xf4\xe9\xfe\xfa\xfa\x7a\x12\x89\x43\xd2\x9f\x4c\x26\xbf\xe6\
+\x19\xfb\xc9\x93\x27\x7f\x4c\xd3\xb4\x8b\xa5\x94\x08\x1b\xb0\x5d\
+\xff\x50\x00\xcb\x34\x48\xec\x93\x54\x35\x57\xf3\xfc\x9b\x3f\xc6\
+\x3a\xf0\x31\x16\x28\x67\x12\x53\x56\xf0\x58\xef\x4f\xc9\x8d\x06\
+\x40\x48\x6f\xf0\xd8\x29\x81\x40\xa0\x5e\x55\x55\x51\x2a\x95\x76\
+\x5f\x72\xc9\x25\xed\x3d\x3d\x3d\x58\x96\x25\x6b\x6b\x6b\xc5\x3f\
+\xff\xf3\x3f\xb3\x78\xf1\x62\xee\xbd\xf7\x5e\xf6\xed\xdb\xc7\xe2\
+\xc5\x8b\x79\xf3\xcd\x37\x69\x69\x69\xa1\xbf\xbf\x9f\x74\x3a\xcd\
+\x94\x29\x53\x90\x52\xb2\x7d\xfb\x76\xd2\xe9\xf4\xb1\x03\x72\xe0\
+\xc0\x81\xbf\xcb\xe5\x72\x9b\xd4\x31\x7e\x22\x1f\x72\x39\xff\x96\
+\x3a\xca\x59\x07\xbb\x24\x29\xa5\x5c\xd2\x5d\x16\x99\x03\x36\xee\
+\x38\xa0\x26\x4d\x9a\xe4\xd1\x2b\x55\xb1\x58\x6c\x46\x3e\x9f\x3f\
+\x00\xb8\xe3\x77\x4a\x38\xa2\x61\x14\x25\x97\xcf\xfc\x27\x26\xd7\
+\xd5\xf2\xf3\x3d\xdf\x20\x56\xd7\x48\xa2\xf9\x00\xc9\xf5\x21\x5f\
+\xf7\x3a\x8e\x43\x3a\x9d\x46\x4a\x49\x38\x1c\xc6\xb2\x2c\x06\x06\
+\x06\xbc\x06\x98\xb7\xf3\x1c\x54\x4d\xd3\x58\xbd\x7a\x35\xf9\x7c\
+\x9e\x1f\xff\xf8\xc7\x7e\x02\xad\xae\x5c\x45\x68\xeb\x1c\xee\xda\
+\x7c\x17\xaa\x32\x87\xdf\x06\x9e\x20\xa4\xeb\x48\x43\x65\x8a\xb3\
+\x98\xa6\x13\xbd\x9d\x26\xb9\xfa\xea\xab\x7f\xee\x55\x8e\xac\x59\
+\xb3\x66\xaa\x57\x13\x6c\xdb\xb6\x37\x8f\xd7\x1f\x36\xe3\xba\x2e\
+\x93\x27\x4f\x66\xfa\xf4\xe9\x94\xcb\x65\x66\xcc\x98\xc1\xba\x75\
+\xeb\xfc\x64\xde\xce\x9d\x3b\x8f\x8f\x97\x65\x59\xd6\xd6\x40\x20\
+\x20\x3d\x35\x13\x01\x76\xfe\xc0\x7c\x4b\x6e\x5d\x27\xa4\xeb\xa0\
+\x1f\x8a\x62\x35\x4d\xc3\xb2\x2c\x1a\x1b\x1b\xff\x7a\xc9\x92\x25\
+\x97\xbd\xf8\xe2\x8b\x5f\xb5\x2c\xeb\xe4\xbe\xbe\xbe\x43\x63\x9d\
+\xde\x28\xa0\xb5\x57\xb3\xeb\xc4\x36\xbe\xb1\xf9\x19\x66\x4e\x99\
+\x89\x1e\x9f\x42\xdb\xe0\x4e\xf2\x43\xae\x5f\x1c\xf0\x16\xd1\x2f\
+\x77\x74\x74\x3c\x34\x96\xf1\x33\x34\x4d\x7b\xe5\xed\x72\x29\xef\
+\x7b\xdf\xfb\xa8\xaf\xaf\xe7\xb6\xdb\x6e\xe3\xd1\x47\x1f\xf5\x53\
+\xba\xae\x74\x29\x9b\x15\xb5\xbb\x21\xdd\xca\x7b\x6f\x0d\x4f\x18\
+\x33\x65\x0d\x07\x30\x7b\xc2\x98\x07\xc3\x38\x39\x8d\xf1\xb3\x54\
+\xbc\x2a\x7a\x2f\xc6\xb9\xed\xb6\xdb\x08\x06\x83\x94\x4a\x25\xa4\
+\x94\x7c\xff\xfb\xdf\x9f\xd0\x7f\x22\xa5\x64\xf7\xee\xdd\xb4\xb6\
+\xb6\x1e\x36\x89\x79\x58\xed\xa7\xae\xeb\xf2\xd1\x8f\x7e\x94\x73\
+\xce\x39\x87\x8e\x8e\x0e\x76\xee\xdc\x49\x67\x67\xa7\x3f\xdb\xc3\
+\x34\x4d\x4e\x3f\xfd\x74\xf6\xef\xdf\xcf\x9e\x3d\x7b\x98\x3d\x7b\
+\x36\x1d\x1d\x1d\x7e\x26\xb1\x5c\x2e\xeb\xe7\x9e\x7b\xee\xbf\x2a\
+\x42\x61\x58\x1b\x96\xd3\x4f\x12\xc2\x1c\x0c\x63\x0f\x07\x71\x53\
+\x3a\x3b\x36\xee\xa5\x45\x3d\x11\x67\xc4\xa5\x77\x78\x90\x26\x6d\
+\x29\xeb\x13\xaf\xfb\xbd\xe0\x5e\x71\xc0\x18\x91\x98\x4f\x24\x12\
+\x1f\xfd\x93\x0f\xa5\x69\xbc\xf2\xca\x2b\xac\x59\xb3\x86\x91\x91\
+\x11\x8a\xc5\xa2\x3f\x4f\xd7\x2b\x0b\x02\x28\x0a\x93\x68\x6d\x0c\
+\x92\xd3\xb8\xfd\x92\x2f\xf1\x8b\xd6\xff\x64\x24\x32\x82\x3d\x37\
+\x4b\x62\xb3\x45\xea\xe5\x2a\x54\xad\xd2\xb2\x7d\xd6\x59\x67\xad\
+\xf3\x00\x29\x95\x4a\x84\xc3\x95\xf3\x4e\x8a\xb9\x4a\x39\xa9\x50\
+\x15\x94\x3f\x5e\xd6\x2c\x01\x91\x4a\xa5\xa2\xc7\x05\x10\x29\x25\
+\xd7\x5c\x73\x0d\x5b\xb6\x6c\x61\xd5\xaa\x55\x24\x12\x09\x16\x2d\
+\x5a\xc4\xf6\xed\xdb\x69\x68\x68\xa0\xb3\xb3\x93\x9a\x9a\x1a\x16\
+\x2e\x5c\x48\x20\x10\xa0\xbd\xbd\xdd\x1f\x00\xe9\xbd\x80\xfe\xfe\
+\x7e\x1c\x29\xa9\xbe\x3e\x2f\xc2\x8b\x63\x84\x97\x66\x41\x91\x48\
+\x53\xc1\x4e\x6b\xb8\x59\x9d\xd4\xf3\xb5\x38\x96\x8b\xe6\x1e\xaa\
+\x2e\xf1\x06\xa7\xd5\xd5\xd5\x4d\x98\x35\xff\x4e\x91\x74\xb1\x58\
+\xe4\x9c\x73\xce\xf1\xc1\xf4\xf4\x77\x5d\x5d\x9d\xff\xbd\x4d\x3d\
+\x2a\x7b\xbf\x5c\x87\xed\x66\xf8\x9b\xff\xfc\x18\x02\x9d\x40\x40\
+\x45\x1a\x51\x14\x5d\x22\x74\x13\xd5\x55\xbc\xd1\xb8\xb3\x0c\xc3\
+\xc0\xb6\x6d\xaa\xab\xab\x2b\xc9\x27\x04\xb5\x4b\x82\xe8\x08\xf2\
+\x03\x0e\x46\xc6\x9d\x30\x9c\xc8\x93\x0a\x4d\xd3\x44\x36\x9b\x7d\
+\xc3\xb6\xed\xf7\x1e\x17\x40\x74\x5d\xe7\xfa\xeb\xaf\xe7\xae\xbb\
+\xee\xe2\xeb\x5f\xff\x3a\xdd\xdd\xdd\x13\x4e\xd2\x29\x16\x8b\x74\
+\x75\x75\x91\xcb\xe5\xfc\x29\x9d\xaa\xaa\x92\xcd\x66\xa9\xad\xad\
+\xc5\x75\x5d\x7f\xc8\xc0\xc0\x03\x36\x6f\x28\xde\xb0\x49\x65\x1c\
+\x65\x61\x52\xb4\xda\x68\x69\x69\x99\x90\xb7\xf7\x26\xea\x7c\xf4\
+\xa3\x1f\xe5\xfe\xfb\xef\x3f\xac\x32\x23\xc3\x30\x72\xb6\x6d\x77\
+\x7b\x75\x5d\x42\x88\xe9\xaa\xaa\x0a\x4f\xda\xfd\x89\xa8\x01\x8d\
+\x9a\x49\x31\x2c\xcb\x62\xb4\x6c\x53\x7d\xe9\x10\xb5\x93\x74\x64\
+\x49\xc3\x1c\x0a\x52\xec\x08\x40\x22\xea\x57\x4e\x7a\xf1\x47\x28\
+\x14\xe2\x13\x9f\xf8\x04\xc9\x64\x92\xed\xdb\xb7\x57\x1a\x95\x6a\
+\x2d\x64\xfc\x90\xf3\xe1\xfd\xee\x15\x5d\x94\x4a\xa5\x72\x22\x91\
+\x48\x1d\x17\x40\xbc\xb9\x8a\x5f\xf8\xc2\x17\xfe\xe8\x67\xf2\xf9\
+\xbc\x4f\xcd\x4b\x29\x19\x3b\xb1\xcc\x67\x81\x87\x86\x86\x2a\x85\
+\xda\x93\xe3\xa8\xaa\x4a\x5b\x5b\x9b\x3f\xcb\x77\xf1\xe2\xc5\x63\
+\xd4\x47\xd9\xcf\x71\xd8\xb6\xed\xe7\x0e\xaa\xaa\xaa\xfc\xf9\x86\
+\x87\x03\x48\x3a\x9d\x7e\x70\xd3\xa6\x4d\x0f\x7a\x3f\x4f\x9f\x3e\
+\xdd\x52\x55\x55\x3b\xf1\xc4\x13\xe9\xee\xee\xf6\x81\xf6\x5e\x98\
+\x61\x18\x24\x7b\x46\x68\x5e\x7f\x12\xd9\x52\x89\x75\xeb\xd6\xa1\
+\x69\x1a\xcb\x97\x2f\xa7\xa1\xa1\x81\x36\xa5\x7d\xc2\x09\x3a\x17\
+\x5e\x78\x21\x93\x27\x4f\xe6\x33\x9f\xf9\x0c\x8f\x3c\xf2\x08\x2f\
+\xbf\xfc\x32\x97\x5d\x76\x19\xbf\xff\xfd\xef\x99\x35\x6b\x16\xc3\
+\xc3\xc3\x6c\xd8\xb0\x81\x58\x2c\xc6\xa9\xa7\x9e\xca\x73\xcf\x3d\
+\x77\xd8\xa4\xe5\x61\x01\x92\x4a\xa5\xfe\x2a\x9b\xcd\x7e\xa3\xa6\
+\xa6\x66\x51\x3e\x9f\xf7\xcb\xfb\xc7\x1b\xaa\xb7\x1a\x2d\xaf\xc8\
+\xce\x03\xc5\xcb\x75\x54\x55\x55\x11\x08\x04\x68\x6a\x6a\x62\xe6\
+\xcc\x99\x0c\x0c\x0c\x4c\x38\xbf\x6a\xfc\x31\x42\xe3\x8b\x93\xbd\
+\xe1\x68\x47\x93\xfc\x92\x52\xb2\x6e\xdd\x3a\x86\x86\x86\x58\xbd\
+\x7a\xb5\x1f\x4b\x79\x52\xe8\x79\x4a\xb6\x6d\x93\x4e\xa7\x39\xeb\
+\xac\xb3\x88\xc5\x62\x24\x93\x49\x32\x99\xcc\xf8\x53\xd8\x30\x4d\
+\x93\xbd\x7b\xf7\x72\xdb\x6d\xb7\x31\x32\x32\xc2\x8e\x1d\x3b\x70\
+\x5d\x97\xed\xdb\xb7\xe3\xba\x2e\xfb\xf6\xed\xf3\x9f\xbd\x50\x28\
+\x30\x38\x38\x78\x44\x2c\xf2\x61\x01\x92\x4c\x26\x7f\x5d\x57\x57\
+\xf7\xcf\xcb\x97\x2f\x67\xf5\xea\xd5\x74\x77\x77\xb3\x79\xf3\x66\
+\xba\xba\xba\x08\x04\x02\x7e\xe2\x7e\xea\xd4\xa9\xf4\xf5\xf5\x91\
+\x4e\xa7\x99\x34\x69\x92\xcf\x7e\xfa\x25\x3d\xe3\x62\x10\xcb\xb2\
+\xc8\xe7\xf3\x3e\x4d\x3e\xfe\x40\xb1\xf1\xb3\x73\xc7\x5e\x5c\x6a\
+\x60\x60\xe0\xe1\xb1\xff\x37\x72\x34\x65\x45\x86\x61\xf8\x52\x9b\
+\xcd\x66\xfd\xef\x1f\x3f\x74\xdf\x53\x4b\xa6\x69\xfa\x07\xd5\x78\
+\xff\xe6\xfd\xbd\xe3\x38\x8c\x8c\x8c\xb0\x6a\xd5\x2a\x5f\x9d\x43\
+\xa5\x9b\xca\x1f\xeb\x31\x6e\x83\xbe\xf1\xc6\x1b\x47\xd4\x42\x77\
+\x24\xe7\x87\x88\x8f\x7f\xfc\xe3\x0c\x0e\x0e\x72\xed\xb5\xd7\x62\
+\xdb\x36\xb3\x67\xcf\xa6\xaf\xaf\x0f\xdb\xb6\xa9\xab\xab\x43\x88\
+\x4a\x32\xa6\xbd\xbd\x9d\x62\xb1\x48\x30\x18\xf4\x87\x24\x7b\xb6\
+\xc0\x03\xc4\x2f\xf3\x19\x03\x61\xbc\x24\xa9\xaa\x4a\x20\x10\xa0\
+\xa5\xa5\xc5\x9b\x3b\x35\xd2\xd9\xd9\xf9\x89\xf1\x31\xce\xf8\xa0\
+\xf0\x70\x54\xee\xc5\x17\x5f\xcc\x45\x17\x5d\xc4\xf0\xf0\xb0\xaf\
+\xb2\x42\xa1\x90\x9f\x8a\xf6\xd4\xd7\x78\x06\x60\xfc\xe1\x67\xde\
+\xdc\xc9\xb1\x0d\x3a\x81\x4c\x1c\x5f\x72\xfb\x76\xd7\x96\x52\x76\
+\x49\x29\xfb\x8e\x37\x20\x7c\xfa\xd3\x9f\xe6\xa1\x87\x1e\xe2\x67\
+\x3f\xfb\x19\x2f\xbe\xf8\xe2\x84\xf3\x38\x0c\xc3\x20\x1a\x8d\xfa\
+\x65\xf7\xde\x91\x0e\x9e\x6b\xec\xa9\xaf\xf1\xa7\xd5\x8c\x3f\xe9\
+\xcd\x7b\x21\xc5\x62\xd1\xaf\x32\x9c\x3a\x75\x2a\xe9\x74\xfa\x0f\
+\x28\x87\x23\x01\xc3\x53\x59\x4d\x4d\x4d\xec\xde\xbd\xdb\x57\xb7\
+\x9e\x5a\x1c\x7f\x14\x85\xf7\x67\x4f\x5a\xc7\xd7\x54\x99\xa6\x89\
+\xae\xeb\xdc\x71\xc7\x1d\x5c\x70\xc1\x05\xfc\xfb\xbf\xff\xbb\x97\
+\x5f\xf7\x59\x6b\x4f\xda\xab\xaa\xaa\xfc\x41\x3d\x52\x4a\x76\xed\
+\xda\x35\xeb\xb8\x4b\x88\xe7\x3e\x7e\xf0\x83\x1f\x9c\xd0\x53\x38\
+\xde\x76\x78\x93\x9d\x3d\xfd\x59\x55\x55\xe5\x9f\xc4\xe3\xed\x4a\
+\x8f\x23\xf2\xa4\xc5\xf3\x46\x3c\x8a\xc4\xa3\xab\xa5\x94\x13\x06\
+\x80\x1d\xcb\x4a\xa7\xd3\xb3\x36\x6f\xde\x8c\x65\x59\xf9\xe9\xd3\
+\xa7\x77\xac\x5a\xb5\xaa\xf6\x53\x9f\xfa\x14\x37\xdf\x7c\x33\xf9\
+\x7c\xde\xef\xb5\xf7\xdc\x5a\x6f\x1c\xdf\x78\x9a\x3f\x93\xc9\x30\
+\x7b\xf6\x6c\xce\x3d\xf7\x5c\xa2\xd1\x28\xe7\x9c\x73\x0e\x1b\x36\
+\x6c\xe0\x92\x4b\x2e\x61\xcd\x9a\x35\x5c\x79\xe5\x95\x3c\xf9\xe4\
+\x93\x2c\x5c\xb8\x90\xda\xda\x5a\x54\x55\xe5\xb9\xe7\x9e\x9b\x30\
+\xed\xfa\x78\x03\xf2\x8b\xee\xee\xee\xed\x8a\xa2\xac\x7e\xef\x7b\
+\xdf\x8b\xa2\x28\xb4\xb7\xb7\x63\x18\x86\x3f\xef\xdc\xd3\xb7\x35\
+\x35\x35\x38\x8e\xe3\x0f\x94\x14\x42\x90\x4a\xa5\xfc\x01\xf5\xe3\
+\x55\x96\x57\xd1\xe7\x7d\x6e\xac\x5a\x5d\x3a\x8e\x23\x6c\xdb\xa6\
+\xa6\xa6\x86\x4c\x26\xa3\x1e\x23\x20\x7e\x4e\xa3\x58\x2c\xba\x77\
+\xdd\x75\x17\xeb\xd7\xaf\xa7\xba\xba\x9a\x91\x91\x11\x7f\xf7\x8f\
+\xb7\x67\x1e\xd5\x32\x3e\xd1\x96\xcb\xe5\xd8\xbd\x7b\x37\x0d\x0d\
+\x0d\x78\xe7\xff\x7a\x6e\xef\xd6\xad\x5b\xb1\x6d\x9b\x9e\x9e\x1e\
+\x7f\x10\x8d\x37\x92\xe9\x88\xec\xdd\xe1\x7c\xc8\x3b\xab\x0f\xd0\
+\x96\x2c\x59\x62\x6d\xdd\xba\x95\x9d\x3b\x77\xd2\xd3\xd3\xc3\x96\
+\x2d\x5b\x58\xb1\x62\x05\x3f\xf8\xc1\x0f\xb8\xf0\xc2\x0b\xe9\xec\
+\xec\x24\x18\x0c\x32\x7f\xfe\x7c\x3a\x3b\x3b\x79\xf5\xd5\x57\xc9\
+\x66\xb3\x0c\x0f\x0f\x13\x8b\xc5\xfc\x72\x53\xef\x04\x01\x29\xa5\
+\xdf\x9f\x18\x8d\x46\xfd\x03\x51\x06\x07\x07\x13\xe5\x72\xf9\xe5\
+\x31\xbb\xb4\x67\x64\x64\xe4\x8b\x1c\x87\x75\xe2\x89\x27\x26\x6e\
+\xbc\xf1\xc6\xfa\x4b\x2f\xbd\x94\xcf\x7e\xf6\xb3\x0c\x0c\x0c\x50\
+\x2a\x95\xfc\x39\xed\x85\x42\x81\x29\x53\xa6\xf8\x07\x9c\x79\xe3\
+\x6f\x55\x55\x65\xe6\xcc\x99\x64\x32\x19\xff\xb4\x87\xb7\x73\x1e\
+\xde\x9a\xe6\xb5\x6d\x9b\x37\xdf\x7c\x53\x1c\x57\x09\x19\xa7\xc3\
+\x15\xcb\xb2\x78\xf8\xe1\x87\xb9\xec\xb2\xcb\x78\xf4\xd1\x47\x49\
+\x26\x93\xbc\xf0\xc2\x0b\x48\x29\x19\x1c\x1c\x64\xdf\xbe\x7d\x95\
+\xb3\xa5\xba\xbb\x27\x64\x10\xbd\xc1\x2f\xe9\x74\x9a\x60\x30\xe8\
+\x0f\x4f\x8e\x46\xa3\xbe\xd4\x18\x86\xc1\xec\xd9\xb3\xc9\x64\x32\
+\x28\x8a\xb2\x2b\x93\xc9\x5c\xc3\x71\x5e\xba\xae\xf3\xe4\x93\x4f\
+\xf2\xd4\x53\x4f\x91\xcf\xe7\x99\x3c\x79\x32\x9f\xfd\xec\x67\xf9\
+\xf4\xa7\x3f\xed\x0f\x4b\xf3\x46\x8d\xc7\xe3\x71\x9f\x36\xff\xfc\
+\xe7\x3f\xcf\x7d\xf7\xdd\xe7\x8f\x05\xf4\xc8\x4e\x4f\x9d\xd7\xd5\
+\xd5\x91\xcf\xe7\x49\xa5\x52\x34\x36\x36\x32\x3c\x3c\x8c\x65\x59\
+\x7d\x8a\xa2\xe4\xff\x2c\x2a\xcb\x5b\xa1\x50\x88\x7b\xee\xb9\x87\
+\xfb\xee\xbb\xcf\x8f\x13\x3c\x75\xd3\xdd\xdd\x8d\x10\xc2\x1f\x76\
+\xe6\xdd\x6c\x55\x55\x95\x4f\xc5\x7b\x27\x2d\x7b\xb6\xc6\x3b\xef\
+\xd0\x8b\x3f\xf6\xec\xd9\x73\x5c\xfb\x00\xdf\xba\x46\x47\x47\x5f\
+\x09\x87\xc3\xd5\x63\xf7\xb6\xf2\x1b\xdf\xf8\x46\xe4\xb5\xd7\x5e\
+\xf3\xef\xcd\xb3\x61\xe3\x8f\xde\x70\x5d\x97\x55\xab\x56\x31\x75\
+\xea\x54\x96\x2d\x5b\xc6\xd3\x4f\x3f\x4d\x75\x75\x35\x5b\xb6\x6c\
+\xa1\xb9\xb9\x99\xad\x5b\xb7\xb2\x72\xe5\x4a\x0a\x85\x02\xed\xed\
+\xed\x1c\x3c\x78\x90\x68\x34\x4a\x6f\x6f\xef\xe5\xdd\xdd\xdd\xdb\
+\x8f\xa4\x0b\xe0\x48\xad\xa5\x36\x73\xe6\xcc\x27\xa3\xd1\x68\x40\
+\xd7\xf5\x0b\x4f\x3c\xf1\x44\x42\xa1\x10\xaa\xaa\xb2\x6f\xdf\x3e\
+\xbf\x05\x39\x1c\x0e\xfb\xd3\x0d\x42\xa1\x90\x7f\x1c\x50\x26\x93\
+\x21\x97\xcb\x4d\xe0\xb9\x82\xc1\x20\x17\x5e\x78\x21\x2f\xbf\xfc\
+\x32\xde\xbc\x75\x21\x04\xed\xed\xed\xaf\x0f\x0c\x0c\x9c\x79\x3c\
+\xc1\x18\xb3\x47\xfe\xcf\x73\xe7\xce\xdd\x7b\xed\xb5\xd7\xce\xbb\
+\xf9\xe6\x9b\xb9\xfc\xf2\xcb\x59\xb6\x6c\x19\x2d\x2d\x2d\x3c\xf9\
+\xe4\x93\xbe\x6a\xfd\x87\x7f\xf8\x07\x1e\x79\xe4\x11\x0c\xc3\xe0\
+\x86\x1b\x6e\x60\xd3\xa6\x4d\x8c\x8e\x8e\xfa\xae\xb0\xd7\x93\xa2\
+\xeb\xba\x7f\x0c\x47\x30\x18\x44\xd7\x75\xba\xbb\xbb\x97\x1d\x3c\
+\x78\x70\xcb\x91\xdc\xe3\x91\xf6\x9f\xd9\x5d\x5d\x5d\x97\xb7\xb6\
+\xb6\x5e\x17\x0a\x85\x38\xf3\xcc\x33\xf9\xc2\x17\xbe\x40\x34\x1a\
+\xa5\xb9\xb9\x99\xa9\x53\xa7\x52\x55\x55\xc5\x8c\x19\x33\xa8\xa9\
+\xa9\xa1\xae\xae\x8e\x48\x24\x82\xeb\xba\x7e\xa0\xb5\x72\xe5\x4a\
+\x02\x81\x00\x0d\x0d\x0d\xc4\xe3\x71\x82\xc1\x20\xd1\x68\x94\xb1\
+\x81\xcd\x6f\x6e\xdf\xbe\xfd\x9f\xb6\x6f\xdf\xfe\x19\xe0\x2b\xc7\
+\x5b\x3a\xc6\x83\x31\x26\xa1\xca\x0b\x2f\xbc\xc0\x25\x97\x5c\x82\
+\x10\x82\x7b\xee\xb9\xc7\x3f\x9f\x70\xc3\x86\x0d\x18\x86\xc1\x15\
+\x57\x5c\x41\x22\x91\x40\xd7\x75\x7e\xf9\xcb\x5f\xd2\xdd\xdd\x4d\
+\xa1\x50\xa0\x58\x2c\x4e\x38\x39\xc7\x73\xed\x43\xa1\x90\xf4\xcb\
+\x91\x5c\xf7\x88\xdd\xc3\xa3\x3a\x2d\x5a\xd3\xb4\x80\x10\x82\x07\
+\x1f\x7c\x90\x87\x1e\x7a\xe8\x0f\xfe\xfd\xe0\xc1\x83\x7f\xd4\x39\
+\x78\xab\x1b\xeb\x38\x0e\xbf\xfd\xed\x6f\xbd\x49\x6f\xbb\x72\xb9\
+\xdc\x7f\x02\xef\x58\xb6\x7f\x3c\x56\x36\x9b\x95\x9e\x8a\x12\x42\
+\xf0\xfc\xf3\xcf\x73\xfa\xe9\xa7\xb3\x63\xc7\x0e\x36\x6c\xd8\x40\
+\x7d\x7d\x3d\x0f\x3e\xf8\x20\x0f\x3e\xf8\x20\x77\xdf\x7d\xb7\xef\
+\xba\x7b\x41\xaf\x77\xc2\x90\x97\xbe\x1e\x53\x6f\xa2\xad\xad\xed\
+\x5c\xc7\x71\xf6\xd4\xd5\xd5\x25\x8e\xf4\x9e\x8e\xca\xc1\x0f\x85\
+\x42\xb1\xba\xba\xba\xcf\x85\x42\x21\x17\xb8\x2a\x1c\x0e\x2f\x3e\
+\x1c\xbd\xef\x4d\x7a\xf0\xa6\x3c\x7b\x99\x36\xcf\xdf\x4f\xa7\xd3\
+\x6b\x7a\x7a\x7a\xde\xcf\x5f\x7e\x45\x16\x2f\x5e\x5c\xf0\xfa\x45\
+\x74\x5d\x67\xe9\xd2\xa5\xec\xdb\xb7\xcf\x77\xc9\x0f\xc7\x7d\xf5\
+\xf8\xb1\xed\xdb\xb7\xcf\x2d\x14\x0a\xed\x47\x73\x23\xc7\x3c\x38\
+\xaa\xb9\xb9\xf9\xe7\x4d\x4d\x4d\xd7\x1e\xce\x5c\x73\x0f\x14\x8f\
+\xce\xae\xa9\xa9\xa1\x50\x28\x14\x5b\x5b\x5b\xa3\xe3\xbe\x8f\xfe\
+\xfe\xfe\xbf\x34\x20\xc1\x96\x96\x96\x6d\xf1\x78\x5c\xe4\xf3\xf9\
+\x48\x63\x63\xe3\x09\x52\x4a\x0a\x85\xc2\x61\x8f\x90\x2d\x14\x0a\
+\x98\xa6\x79\x9f\xeb\xba\x56\xb9\x5c\xfe\x8f\xa1\xa1\xa1\xd1\xff\
+\x2b\x80\x00\x81\xb1\xef\x09\x86\x42\xa1\xa5\x87\x1b\xd7\x78\x51\
+\x7b\x38\x1c\x4e\x64\x32\x99\x5d\xfc\x3f\xb2\x82\xc1\x60\x6d\x38\
+\x1c\xfe\x47\xd7\x75\x9d\x23\x60\x08\x64\x20\x10\x48\x9e\x7c\xf2\
+\xc9\xff\xf3\xc2\x0b\x2f\x48\xde\x5d\xef\xae\x77\xd7\xbb\xeb\xdd\
+\xf5\xee\x7a\x77\xbd\xbb\xde\x5d\xff\x8f\xad\xff\x03\x21\xf6\x70\
+\xa0\xc1\x03\x97\x85\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x3a\x79\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x64\x00\x00\x00\x64\x08\x06\x00\x00\x00\x70\xe2\x95\x54\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\
+\x95\x2b\x0e\x1b\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\
+\x0e\x1c\x1e\xba\x16\x7f\x4d\x00\x00\x20\x00\x49\x44\x41\x54\x78\
+\xda\xed\xbd\x79\x9c\x5c\x55\x99\xff\xff\x3e\x77\xa9\x5b\xd5\xd5\
+\xdd\xd5\xdd\xe9\x2d\x49\x77\xd2\x21\x1b\x09\x59\x00\x59\x02\x81\
+\x08\x88\x40\x40\x10\x46\x5c\x66\x1c\xc1\x19\x01\xf9\x02\x83\xdf\
+\x41\xe7\x0b\xe3\x38\x83\xc8\x57\x04\x74\x5c\x58\x64\x40\x51\x91\
+\x4d\x04\xd9\x05\x21\x04\x08\x09\xd9\x43\x3a\x0b\x4d\xd6\x4e\xa7\
+\xf7\xa5\xba\xf6\xed\xae\xe7\xf7\xc7\xed\xba\x49\x00\x35\x60\xc0\
+\xef\xcc\x8f\xf3\x7a\xd5\xab\xb7\xea\x53\xf7\x9e\xe7\x9c\x67\xf9\
+\x3c\x9f\xe7\xb9\xf0\xd1\xf8\x68\x7c\x34\x3e\x1a\x1f\x8d\x8f\xc6\
+\x47\xe3\xa3\xf1\xd1\xf8\x68\xfc\x8f\x1f\xe2\x7f\xf2\xcd\x9d\x74\
+\xd2\x49\x3b\xa7\x4c\x99\x32\x51\x4a\x89\x00\xa4\xad\x20\x25\xa0\
+\x48\x50\x24\x42\xbc\x73\x05\x4a\xa5\x52\x78\xc9\x92\x25\x5f\x4c\
+\xa7\xd3\x0f\xff\x35\xae\x59\xfb\x20\x26\xad\xaf\xaf\x5f\x94\xcf\
+\xe7\x27\x1d\xf4\xae\x10\x02\xcf\xf3\xa8\xa9\xa9\x79\x6e\x70\x70\
+\x30\x71\xa8\xae\x43\x55\xd5\xea\x42\xa1\x10\x01\xd8\x63\x0f\x32\
+\xf3\x73\x05\x2a\xa3\x3a\x4e\x4a\xc3\x4b\x87\xf0\x72\xfe\xf7\x6e\
+\x4a\xc3\x4d\x86\x00\xf0\x3c\x0f\x29\xa5\xf6\xd7\xda\x44\x1f\xc8\
+\x07\xd7\xd5\xd5\xdd\xf5\xd9\xcf\x7e\x76\x36\x80\x27\x3d\xdc\x0a\
+\x8b\xb0\xa1\x20\xad\xb1\x97\xad\x80\x1c\xdb\x9d\x63\x3b\xd4\x30\
+\x0c\x1e\x7f\xfc\xf1\x63\x81\x43\x26\x10\x29\xa5\xb4\x2c\x0b\x01\
+\x8c\xb8\x29\x3e\x16\xa9\x24\x24\xab\x38\xf6\x88\x05\x6c\x1f\x5d\
+\x4f\x22\x93\xa4\xae\x2a\x42\x6e\xd8\x66\xf8\x77\x75\x07\x6c\x90\
+\xff\x51\x02\xb1\x6d\xdb\x18\x1a\x1a\x02\x60\x67\xbe\x9f\x85\x57\
+\x81\xed\xed\xbf\x50\x60\x0f\x86\x28\xee\x8c\x62\xee\x8e\x80\x90\
+\x54\x55\x55\x81\x2f\xa6\x43\x36\x5c\xd7\xc5\xb2\x2c\x90\x20\x74\
+\xf0\x84\xc3\x45\x33\xbe\xcf\x73\x3d\xb7\x71\xeb\x99\xbf\xe7\x47\
+\x4f\xfe\x90\x89\xad\x1e\x4b\x06\x9e\xf1\xdf\x37\x26\x8c\xbf\xa6\
+\x40\x94\x0f\x68\x5e\xcf\x34\x4d\x4c\xd3\xc4\x76\x5d\x74\x5d\x21\
+\x37\x50\xc5\xb7\x3f\xfe\x5b\xce\x9e\x71\x31\x8a\x13\x61\xdc\xe4\
+\x0a\x42\x93\xf3\x98\x25\x0b\xcb\xb2\x30\x4d\xf3\xa0\x17\xa2\xa5\
+\xa5\xe5\xe0\x2e\xc2\xf3\xa4\x65\x59\xd8\xb6\x8d\x87\x24\x95\x31\
+\x39\xfa\xf0\x23\xe9\x48\xaf\x40\x11\x0a\x9f\x38\xfa\x93\x54\x55\
+\xc5\x50\x42\x12\xc7\x71\x30\x4d\x13\xc7\x71\xfe\xaa\x76\x4f\x7b\
+\x1f\xea\xe8\xc2\x63\x8e\x39\xe6\x5f\x1c\xc7\xf1\x24\x12\x55\xaa\
+\xb8\xb6\xf4\x45\xab\x48\x34\x5d\x75\x3b\x3b\x3b\x5b\x4d\xd3\xf4\
+\x77\xa9\xe7\x62\x96\x14\xfe\xed\xcc\x3b\xf8\xe9\xfa\x6b\x38\xab\
+\xf9\x1b\x4c\x51\xe2\x9c\x34\xeb\x28\xee\xde\x7e\xab\x2f\x08\x55\
+\x12\x0a\x85\x90\xf2\xe0\x0e\x48\x6f\x6f\x2f\x6d\x6d\x6d\xab\x1a\
+\x1b\x1b\x29\x1b\x6c\x3c\x05\x89\x24\x95\x4e\xd6\x4d\x39\x6c\xca\
+\x0c\x45\x51\x40\x08\xa4\x2b\x11\x86\xcb\xdc\xfc\x14\x72\xbf\x84\
+\xd3\x7e\xf6\x71\x2a\x42\xd3\x39\xf9\x8e\x93\xd1\x55\x0d\x81\x46\
+\x28\x54\xc3\xce\x9d\x5b\x68\x6d\x6d\x45\x4a\x89\xeb\xba\x53\x43\
+\xa1\xd0\x82\xf7\xb2\x2e\x15\x15\x15\x54\x57\x57\xaf\xe9\xee\xee\
+\x96\x1f\xaa\x40\x2c\xcb\x9a\x7b\xd8\x61\x87\x1d\x97\x48\xf8\xaa\
+\xbe\xaf\xae\x8b\xd9\x0b\x75\xac\x81\x08\xce\x48\x18\x91\x8b\xd0\
+\xdd\xa3\x62\xdb\xb6\xbf\x4b\x85\x87\x6b\x4b\x66\xb5\xcd\x40\xd9\
+\x03\x45\x3b\x4b\xb6\x98\xe3\xa5\xdd\x0f\xe0\x79\xbe\x4a\x11\xaa\
+\x0c\xde\x7f\x90\x23\x5c\x5f\x5f\xbf\x60\xda\xb4\x69\x78\x9e\x47\
+\x51\x9a\x68\x87\xa7\xa8\x0c\x87\xe8\x5c\xe1\x31\xae\xba\x1e\xcb\
+\x32\xd1\x84\xca\xf6\xf1\x5b\x39\xe1\xec\x4a\x5c\xd7\xc3\x1e\xd1\
+\x71\x07\xa3\x58\xc3\x50\x93\x19\x87\x9d\x52\x28\x16\x4a\xa8\xaa\
+\x40\xd3\x34\x72\xb9\x1c\xae\xeb\xca\x93\x4e\x3a\xe9\xfa\xda\xda\
+\xda\xeb\x01\x1c\xe9\xa2\x57\x79\xe0\x28\x60\x8f\xd9\xbf\xc0\xf6\
+\xc9\x40\xcd\xed\xde\xbd\x9b\xb5\x6b\xd7\x46\x80\xd2\x87\x6e\x43\
+\x4a\xa5\x12\xa6\x69\x92\x73\x4b\x44\x8e\x2d\xa2\x56\x2b\x44\xaa\
+\x73\x30\x33\x87\x66\x08\xc4\x5a\x27\xd0\xc9\x9e\xe6\xa1\xaa\x2a\
+\xa9\x5c\x1a\x45\x51\x51\x15\x1d\xdb\x33\xa9\xd2\x2b\xf1\x24\x58\
+\xa6\x89\xd0\x08\xde\x7f\xb0\x8e\x99\xe7\x79\x94\x4a\x25\xf0\x24\
+\x9d\x7a\x37\x0b\x8f\xd6\x81\x22\x46\x3c\x83\xbd\xc7\xc2\xb2\x2d\
+\x3c\x54\x8c\x98\xc4\x35\x05\xf5\xea\x6c\x1a\x67\xd6\xd0\x51\xb3\
+\x8a\x8a\xd9\x2a\x20\xd8\xf4\x23\x9b\xa9\x2d\x87\x53\x55\x55\x45\
+\x6b\x6b\x2b\x00\x83\x83\x83\xa2\xac\x42\x55\x14\x76\x36\x6e\x63\
+\xc1\xd9\x51\xbc\x31\x1b\xe8\x59\x02\x7b\xd0\xc0\xea\x89\x60\x76\
+\x85\xc1\xf5\xb5\xbe\xae\xeb\x78\x9e\xf7\xe1\xdb\x10\x21\x04\x96\
+\xe5\xeb\x7d\xc7\x71\x50\x55\x05\x37\x5d\xcf\x4d\xa7\x3f\xc3\x95\
+\x47\xfd\x17\x7a\xb1\x85\xd6\xd8\xd4\xe0\x3d\x9e\xe7\x11\x8d\x86\
+\xb8\xe5\xf1\xef\xf2\x37\xd3\xaf\x61\x7c\x53\x2d\x49\xaf\x93\x73\
+\x66\x5c\x82\x22\xf7\xcd\xf5\x1e\x4f\x08\x52\xca\x31\xdb\x63\x21\
+\x3d\xdf\x65\x3b\xa7\xf5\x1b\x2c\x9e\xf6\x0f\x98\xb6\x3f\xa7\x65\
+\x9a\xa8\xaa\x82\x9a\x6f\xe2\xfa\xb3\xfe\x0b\x37\x3e\x81\x93\x9b\
+\xbe\xcc\x37\x4f\x7a\x88\x90\x6a\x50\x32\x4b\x64\x32\x19\x86\x86\
+\x86\x18\x1a\x1a\x62\x53\xec\x75\xe4\xc2\x1d\x38\xa6\x87\x69\x9a\
+\x58\xa6\x85\xa2\x4b\x1c\xc7\x65\x6e\xf4\x5c\xbe\x76\xe2\x8f\x89\
+\x44\x42\xd4\xb4\x54\x52\x7d\x52\x12\xcf\xf0\x37\x66\xf9\x3e\xff\
+\x6a\x46\xbd\xbc\x83\x2c\xcb\x42\x08\x98\xa0\x1e\xc5\x8a\x9e\x27\
+\xf9\xed\xf2\xdf\xf0\xa5\x23\xbf\x89\xeb\x3a\xa4\xd3\x69\x52\xa9\
+\x14\xf9\x42\x1e\xc7\xb3\x49\xd6\x2e\x63\xeb\xee\xdd\xf4\xe4\x36\
+\x43\x6d\x3f\x3f\x5a\x7b\x39\xe9\x64\x8e\x54\x3a\x4d\x3a\x9d\x26\
+\x93\xc9\x20\x84\xf8\xb3\xc7\x64\xfc\xf8\xf1\x41\xbc\xe0\x0b\xd2\
+\x02\x21\xd1\xc3\x1a\x9f\x9c\x73\x3e\xab\x07\x9f\x41\x7a\xbe\x0a\
+\xb4\x6c\x1b\x3d\xac\x23\xac\x18\xbd\xc5\x1d\xb4\xf7\xaf\xe0\xb0\
+\xfa\x79\x34\xd5\x34\xa1\x0a\x1d\xd7\x75\x71\x1c\x27\xd8\x14\x91\
+\x2a\x81\xaa\x8a\xe0\xf7\xb6\x6d\x23\x74\x41\x85\xde\xc0\x95\x9f\
+\xf8\x26\x3f\x7c\xf6\x07\x5c\x7a\xec\xad\x5c\xb3\xe8\x1e\xda\x1a\
+\x67\xe0\xb8\x0e\x8e\xe3\xbf\x3c\xcf\x43\x51\x94\x0f\xdf\xa8\x97\
+\x4f\x88\x6d\xdb\x38\xd8\x08\xa1\x10\xd6\x23\xb8\x9e\x8d\x2b\x5d\
+\x92\xc5\x61\x14\x45\x0b\xbc\x15\xd7\x71\x91\x8a\x87\x6b\x49\x9e\
+\xeb\xba\x85\xd2\x56\x97\xe2\x80\x20\xdf\xa5\x31\xb4\xb1\x88\x11\
+\xd1\x41\x82\x65\xda\x54\x46\xab\x6e\x9e\x3b\x67\xee\xe8\x1f\xc3\
+\x0f\x52\xa9\xd4\xeb\x3d\x3d\x3d\x77\x97\x05\x32\x38\x38\xe8\x7b\
+\x66\xa3\x2e\xab\x6f\xca\x70\xfe\x0f\xcf\x63\x30\x91\x43\x9a\x05\
+\x24\x1e\x02\x81\x7c\xda\x65\xad\xda\xc1\xe5\x8f\x5c\xc3\x68\x36\
+\xc1\xe5\x77\x5f\xc1\x9a\x37\x5e\xc3\x74\x8b\xbe\x5d\xd9\xef\x64\
+\x6a\x86\xc2\xf6\x9f\xbb\x54\xc7\x72\x60\xfa\x66\x42\x5f\x51\xc5\
+\xea\x57\x93\xcc\xbd\x76\x1e\xd5\x91\x18\x5f\xfa\xd1\x57\x71\xa5\
+\x8b\xa1\x46\xd0\x23\x1a\x42\xf8\x1b\x54\x55\xd5\x43\xe2\x2e\x6b\
+\xef\xf7\x84\x58\x96\x85\x2d\x1c\x34\x45\x63\x30\xbf\x97\x33\x62\
+\x0b\xe8\x89\x99\x24\x0a\x7e\xfc\xa1\x69\xfe\xd4\x75\x05\x95\xa5\
+\xd7\x8d\x62\x67\x64\x10\x04\xda\xb6\xcd\xa2\x45\x8b\x68\x98\x6d\
+\xa2\x0a\x85\x4e\x6d\x2f\x47\x2c\xd2\xb1\xfb\x2a\xce\xb6\x07\x22\
+\xc8\x74\xe8\x5d\x41\x9d\x2d\x5b\xb6\x00\xdc\x5d\x56\x59\x93\x27\
+\x4f\x26\x12\x89\x20\x84\xa0\xcf\x19\xa1\xee\xfc\x21\x26\xca\x2a\
+\x9c\xfe\x0a\xac\xde\x0a\xdc\x78\x08\xe4\xbe\x89\x6a\xaa\xc6\xb1\
+\x77\xef\x5e\x22\x54\x51\x1b\x6e\xc4\x73\x07\x71\x1c\x27\xf0\xee\
+\xd4\x9c\x47\x7d\x63\x3d\xe3\xea\xc6\xa1\x28\x0a\x3b\x0b\xfd\xcc\
+\xfc\x5c\x91\x58\x4c\xc7\x4d\xc7\xb0\x7a\x23\x38\x83\x35\x58\xfd\
+\x61\x14\x45\x04\xaa\x13\xa0\xbb\xbb\xfb\xaf\x2b\x90\x52\xa9\x84\
+\xad\x49\xa4\x0c\x63\xd7\x6c\x27\x31\xec\x70\xd2\xc7\x8e\xe4\x57\
+\x9b\x6e\xa0\x2f\xd9\xc7\x59\x67\x9d\xc5\xa5\x97\x5e\xca\xf2\xe5\
+\xcb\x69\x6f\x6f\x67\x68\x68\x08\xd7\x75\x71\x5d\x97\x81\x81\x01\
+\xca\x71\x4a\xca\x29\x10\x3d\x39\x4b\xa8\x39\x8a\xd7\x90\x44\x3b\
+\x4a\x10\x12\x15\x38\x25\x0f\x55\x68\x0c\x3d\xd0\xe8\x63\x4f\xfb\
+\xdd\x7c\xf9\xfb\x72\xec\xa0\x08\x85\x2d\xd6\x1e\xe6\xd5\x36\x53\
+\xb2\x0a\xd4\xcc\x0b\x51\x98\xdd\x0b\x48\x84\x13\x22\xbd\xaa\x9a\
+\xe2\x8e\x30\x00\x21\x11\xe6\xba\x57\xcf\x23\x5b\xca\x60\xd9\x56\
+\xa0\x72\x00\x2a\x84\x82\x3b\x36\xa7\x10\x82\xbe\xd2\x28\x27\x37\
+\xd6\x51\x2c\xba\x1c\x39\xe3\x38\xb6\xd6\xac\x40\xce\x75\x11\xa8\
+\xe4\x36\x45\xc9\xac\xa9\x02\x21\x51\x14\x05\xcf\xf3\x3e\x78\x81\
+\x8c\x1f\x3f\x9e\x81\x81\x81\x03\x8d\x8e\xa2\x38\xc9\x64\x92\x54\
+\x2a\x85\xad\x79\x94\xac\x18\x8e\x90\xdc\xf5\xc6\xd7\xf9\xc6\x19\
+\x37\x23\xc3\x26\x96\x5b\xe0\xfa\xeb\xaf\x67\xd9\xb2\x65\x7c\xfe\
+\xf3\x9f\x47\xd7\x75\x22\x91\x08\x3b\x76\xec\xa0\xb2\xb2\x92\xf6\
+\xf6\x76\x5f\xa0\xb6\x8d\xed\xda\x18\x9a\x4a\x6a\x48\xe5\x07\x17\
+\x3e\xcd\x60\x7a\x80\xfb\x36\x5d\xcf\xe2\x79\x7f\xc3\xf3\x5d\xf7\
+\x8e\xb9\xc5\xbc\x43\x20\x65\xe1\x5a\x96\x85\x22\x04\x8a\xa2\x60\
+\xd9\x36\x5f\x3d\xfc\x67\x64\x44\x17\x9a\xe1\x91\x1c\x75\x58\x91\
+\xf8\x39\x49\x7c\x7b\x20\xa5\xc4\x93\x1e\xdd\xdb\x06\x48\xec\xb4\
+\xc9\xc6\x4b\x38\xd5\xfb\x3c\xc2\xa8\x50\x02\x35\x26\x84\x00\x01\
+\x25\xd3\xe4\x82\xe6\xef\x31\xaa\xb7\x73\xcd\x82\x7b\x78\x65\xf3\
+\xcb\x64\x22\x1d\xb4\xb3\x0b\xdb\xb6\x90\x48\x34\x4d\xc3\xb6\x6d\
+\x54\x55\x7d\xcf\xce\xc9\x7b\x12\xc8\xc0\xc0\x00\x6d\x6d\x6d\xff\
+\xbb\xba\xba\xfa\x68\x3f\x00\x13\x8c\x26\x46\xe7\xab\xaa\x8a\xa2\
+\x28\xe8\x52\xc1\xc9\x48\x72\x03\x2e\x76\x9f\xe0\xeb\xff\xf2\xcf\
+\xa4\x77\x49\x4a\xa3\x82\xaf\x7c\xe5\x2b\x7c\xfb\xdb\xdf\xe6\x57\
+\xbf\xfa\x15\xdb\xb7\x6f\x47\x4a\x49\x22\x91\x20\x16\x8b\xd1\xd9\
+\xd9\x49\x7d\x7d\xbd\x1f\x19\x4b\x1b\x01\x1c\x1e\x5e\xcc\x9a\xc1\
+\xa7\xd9\xd3\x35\xca\x39\xe3\xff\x0f\x0b\x0f\x3b\x96\x35\x43\xcf\
+\xb2\xd3\x2c\xbd\xab\x40\xca\x27\xc4\x71\x1c\x14\x04\x4a\xa5\xa0\
+\x73\x67\x96\x23\xcf\x9b\xcd\x65\xbf\xbd\x9c\xfb\xfe\x76\x1d\xc3\
+\x75\x23\x78\x03\x23\x3c\xe4\xfc\x0e\xd3\x1c\xfb\x7f\xcd\x63\xe5\
+\x77\x53\xa8\xba\x40\x11\x0a\xc5\x62\x91\x62\xb1\x08\x40\x95\x1b\
+\xc2\x75\x55\xff\xd4\x29\x0a\x42\x48\x46\x86\x4a\x9c\xfd\xe9\x4f\
+\x72\xe5\xd3\x37\x70\xe6\xd4\x8b\x99\xde\x30\x8f\x94\x6e\xb0\xc1\
+\xdd\x8e\x69\xfa\x0e\x85\x94\xfe\xeb\x43\x31\xea\xe3\xc6\x8d\xfb\
+\xc2\xb4\x69\xd3\x8e\x07\x70\xa5\xc7\xfa\x3d\x6f\xa0\x0a\x95\x89\
+\x13\x27\x62\xdb\x36\xe9\x67\x2d\x52\xd2\x43\x4a\x81\x94\x61\x34\
+\x40\xd3\x2d\xfa\xfa\xfa\xb8\xf4\xd2\x4b\xdf\x75\xce\x5c\x2e\x47\
+\x2c\x16\xf3\x5d\x67\xe1\x20\x84\x42\xa5\x51\x83\xe5\x16\x71\x3d\
+\x97\xba\x86\x10\x5d\xa9\xad\x64\xac\x04\x96\xa5\xa1\x68\xe2\x1d\
+\x02\x51\x14\x25\x38\x25\x02\x81\xa2\xa8\xb8\x2e\x68\xaa\x8a\x10\
+\xfe\xc2\x38\x8e\xc3\xea\x9e\xdf\xe3\xb9\x2e\x96\xe5\x05\xae\xf2\
+\x9c\xf9\xb3\xe9\xe8\xe8\x20\x16\x8b\x05\xaa\x13\xc0\xf1\x94\x7d\
+\xa7\x4e\x51\xc0\xd8\x87\x7e\x0a\x45\x41\x08\x41\xb6\x94\x65\xc3\
+\xc8\x92\x60\x2e\xc4\xbe\xe0\xf0\x60\x91\x86\xbf\x48\x20\x9e\xe7\
+\x09\xd3\x34\x91\x52\xf2\x96\xd9\x4b\xed\x14\x97\xe3\x9a\x8e\xe7\
+\x9c\x73\xce\xe6\xe4\x93\x4f\xe6\xa7\x3f\xfd\x29\x5b\xb7\x6e\x65\
+\xfe\xfc\xf9\xac\x5c\xb9\x92\x99\x33\x67\xb2\x66\xcd\x1a\xe2\xf1\
+\x38\xe1\x70\x98\x7c\x3e\x1f\xec\x9c\x8c\x52\x62\xfc\x1c\x85\xfa\
+\xc4\x54\x8a\xd9\x9c\xef\x18\x28\x0e\x8a\xa2\x32\x9c\xeb\x61\x7e\
+\x74\x2e\x03\xc2\x64\xb4\xd0\xcf\x84\xc8\x44\x84\x14\x58\xa6\x85\
+\x70\xdf\x79\x42\xf6\x07\x0f\x05\x02\x01\x34\x35\x45\xc8\x65\x1c\
+\xa4\xeb\xab\x26\x17\x9b\xb0\x52\x85\xeb\x66\x30\x4d\xb7\x0c\x8b\
+\x80\x84\x49\x93\x26\xa1\x69\x1a\xae\xeb\x06\xf3\x2a\x1b\x24\x39\
+\x27\x03\x58\xbe\xca\x0a\x43\x7d\x7d\x84\xcd\x3b\x77\x20\x2d\x1d\
+\x45\x51\x48\x17\xe3\x1c\x56\x7d\x34\x3b\xdc\x17\xb0\x2c\x5f\x65\
+\x95\x6d\xc7\x87\x22\x10\x29\xe5\x3e\xfd\xeb\xf9\xae\xa4\x10\x82\
+\x9a\x9a\x1a\x22\x91\x48\xe0\x7f\x87\x42\x21\x8e\x3a\xea\x28\xf6\
+\xee\xdd\xcb\xd1\x47\x1f\xcd\xba\x75\xeb\x30\x0c\x83\x9a\x9a\x1a\
+\xd2\xe9\x34\x42\x08\x52\x86\xc7\xb4\x4f\x45\x08\xaf\x9e\xc6\x96\
+\xd5\xeb\x7c\xf0\x51\xf7\x50\x44\x98\x41\x63\x39\x13\xf5\x8b\x68\
+\x9a\x3f\x9d\x7b\xd6\xff\x1b\xe7\x86\xfe\x91\xaa\x70\x2d\x25\xab\
+\x0f\xe5\x5d\x04\x22\x84\x1f\x2f\x94\x4a\x25\x94\x31\x2c\x63\xc2\
+\xc4\x6a\x7e\xf2\xca\xb7\xb8\xeb\xc2\x65\xdc\xf4\xda\xc5\x48\x33\
+\x42\x63\x4d\x33\xb6\xd3\x45\xa9\x64\xf9\xaa\xc5\x15\x8c\x3f\x5d\
+\x62\x0e\x55\xe1\x66\x75\x9c\xa4\x06\xb6\x82\x50\xfd\x13\x35\xe2\
+\x24\x82\x13\xe2\x54\xba\x54\x55\x86\xb9\x73\xdd\xff\xe6\xa7\x9f\
+\x5b\xca\x7f\x6d\xb8\x86\x1d\x99\x0e\x5a\xf4\x56\x6c\xd7\x22\x9f\
+\x2f\x80\xf0\x05\xa2\x28\xca\x87\x76\x42\x28\x9f\x10\x4f\x78\x28\
+\x42\xa1\xbd\xbd\x9d\xd1\xd1\x38\xc3\xc3\xc3\x14\x0a\x05\x00\x3a\
+\x3a\x3a\x02\x5d\xea\xba\x6e\xb0\x6b\x4a\xa5\x12\x86\x61\xf8\x49\
+\x28\xdd\xa3\xc2\x30\xd8\x34\xf4\x3a\x89\x44\x8e\x62\xb1\x88\x19\
+\x92\x14\xad\x18\x46\x34\xc2\xb5\xbf\xbb\x98\xbb\xbf\xf2\x5b\x32\
+\xde\x20\x8f\x75\xfc\x88\x52\xca\x63\x74\x64\x14\xcd\x50\xca\x6a\
+\xca\xdb\x5f\x20\xc5\x62\x91\x54\x2a\x85\x40\x50\x30\x25\x25\xcb\
+\xa4\xcb\x7b\x85\x5f\x2f\xbf\x87\x86\xda\x09\xac\x8b\x2f\xc5\x4b\
+\x08\xba\x37\x26\xc9\xa7\x7d\xf7\x56\xc3\xa0\x75\x41\x05\xfd\xf1\
+\xbd\xfe\x42\x86\x24\x89\x57\x63\x14\x3b\xa2\x41\x90\x58\x2c\x16\
+\xfd\xf9\xab\x3c\x2c\xd7\x82\xaa\x38\x5f\xfb\xed\xe7\x39\x72\xc6\
+\x0c\x52\xb9\x61\x92\xf1\x38\x3b\x96\x24\xc9\xe7\xfd\x39\x85\x10\
+\x18\x86\xf1\xe1\xa0\xbd\xe5\x88\x18\x40\xea\x12\x90\xd4\x8f\x1b\
+\x47\x3c\x1e\x47\x51\x14\x2a\x2b\x2b\xff\x64\x10\xd9\xdf\xdf\x4f\
+\x32\x99\x44\x51\x14\x72\xc2\xa1\x64\x57\x10\xad\xcf\x93\x56\x55\
+\x54\x55\x45\x43\x82\x10\x08\x45\x50\x69\x48\x2e\xfa\xe6\xa7\x19\
+\xed\xb0\x49\xed\x2e\x20\x14\x81\x51\xa1\x07\xf3\x19\x86\x71\xf1\
+\x84\x09\x13\xf6\xf4\xf7\xf7\xdf\x2a\x84\x40\x1d\x9b\x43\x11\x0a\
+\x46\xc1\x45\xba\x92\x64\x07\x3c\xbc\xfd\x1e\x86\x37\x5b\x98\x69\
+\x17\x31\x16\x2f\x68\x9a\xe6\x67\x03\x3d\x97\xd3\x26\xfc\x23\x62\
+\xa2\x43\x7a\x58\xf0\x4a\xf2\x36\x46\x6c\x5f\xf5\xb9\xae\x8b\xa2\
+\x28\x68\x9a\x86\xa2\x28\x44\xd3\x2e\xe9\x5e\x87\xfe\x0d\x26\x89\
+\x1d\x9b\x78\x7e\xef\xfa\xfd\x5c\x5b\x81\xae\xeb\x48\x29\x83\xa0\
+\xf0\x50\x9c\x10\xf5\xcf\xbd\xa1\xa1\xa1\xe1\x52\x55\x55\x27\xba\
+\xae\x4b\x56\xb5\x98\xff\xe9\x28\x67\x1c\xfd\x0f\x94\x66\x6c\xe2\
+\xb2\xcf\x5c\x87\xd1\xa2\x30\xfe\x38\x41\x32\xba\x87\xee\x35\x19\
+\xf2\x85\x3c\x85\x42\x81\x81\x81\x01\x2b\x9b\xcd\x5a\xb6\x6d\xab\
+\x8e\xe3\x08\x29\x25\xc5\x88\xc7\xec\x8f\x57\x92\xed\xb5\x29\xec\
+\xd1\x88\x44\x22\x18\x42\xa3\xd8\x01\x5d\x2f\x9a\x0c\xac\xb4\xc9\
+\x74\x4a\x9c\xac\x8f\xbe\xaa\xaa\x5a\x4e\xc5\x22\x84\x60\xe2\xc4\
+\x89\x24\x12\x89\x64\x38\x1c\x56\x33\x99\xcc\xce\x58\x2c\x76\x7c\
+\xb1\x58\x54\x9a\x9b\x9b\x09\x25\x25\x7b\x5f\xb2\x19\xdd\xec\x52\
+\xe8\x07\x5c\x05\x4d\x53\xc7\xbc\x25\x7f\x3e\x21\x04\x9a\x30\xc8\
+\x1f\xdd\xce\xff\x3a\xf6\x7b\x44\x8d\x2a\x06\x0a\xbb\xd9\xbd\xb9\
+\x97\x5c\x9f\x87\xe3\x38\x14\x0a\x05\xc6\x8f\x1f\xcf\x55\x57\x5d\
+\x45\xba\x6f\x84\xe4\x46\x0d\x67\x28\x44\xc8\xad\x20\x52\x11\xa1\
+\xa2\xa2\x02\x45\x51\x08\x87\xc3\x01\xa0\x68\x18\x06\xf1\x78\xfc\
+\x51\x55\x55\x1f\x2b\x14\x0a\xde\x07\x2e\x10\x60\xa2\xe7\x79\xe4\
+\x0d\x87\x39\xa7\x56\x93\x74\x07\xb9\xee\x9c\x3b\x18\x12\x6f\xb1\
+\x31\xf5\x02\x0b\xe7\x9c\xca\x9e\xc4\x56\x06\xd6\xfa\xd8\x96\xa2\
+\x28\x4c\x9f\x32\x53\x9d\x75\xf8\x6c\x3d\x91\x4a\x88\x52\xa9\x44\
+\xa9\x54\xa2\xca\x32\xc8\x74\xb9\xf4\xaf\xcb\x33\x67\xd6\x3c\x6e\
+\xbd\xf5\x56\xae\xb8\xe2\x0a\xf6\xee\xe9\x26\x16\x8b\xb1\x60\xc1\
+\xf1\x84\x42\x21\xe6\xcc\x99\xc3\xcc\x99\x33\x31\x4d\x93\x29\x53\
+\xa6\x30\x69\xd2\x24\xe2\xf1\x38\x91\x48\x84\xda\x58\xdd\x2c\x4f\
+\xba\x17\xcc\x99\x33\x67\x61\x32\x99\x54\xee\xbe\xfb\x6e\x2e\xbf\
+\xfc\x72\x6a\x6a\x6b\xd1\x43\x3a\xf3\xe6\xcf\xa3\xb2\xaa\x92\xb9\
+\x73\xe7\x00\x30\x6f\xde\x3c\xa6\x4d\x9b\x86\x94\x92\x48\x24\x42\
+\x3e\x5b\x64\xea\xe2\x6a\xce\x9e\x71\x31\xd9\x42\x8e\xe7\x3a\xef\
+\x22\xb1\xdd\x09\x04\x52\x2c\x16\x79\xf9\xe5\x97\x91\x52\x72\xd2\
+\xc9\x27\x91\x2f\xe4\x99\x35\x7b\x16\x55\x55\x55\xcc\x9b\x37\x0f\
+\x80\x73\xce\x39\x87\xe9\xd3\xa7\x07\x73\x16\x8b\x45\xb6\x6d\xdb\
+\x36\xe7\x2f\x15\xc6\x41\x81\x8b\x8e\xe3\x30\x3a\x3a\xca\xe8\xe8\
+\x28\xe9\x4c\x86\xa2\x55\xa4\x10\xd9\xc5\xf7\x9f\xfa\x2e\x9a\xae\
+\x90\x55\xba\x79\xea\xad\xbb\xe9\xeb\x48\x92\x4c\x26\x48\x24\x12\
+\xa4\x53\x19\xd4\xd3\x76\x23\x3e\xbe\x1d\x19\x29\x71\xc2\x09\x27\
+\xb0\x7e\xfd\x7a\x3e\x76\xcc\xd1\xc4\xec\xf1\x54\x68\xd5\x4c\x99\
+\x32\x85\x64\x32\x49\x73\x73\x33\xe3\xc7\x8f\xa7\xb6\xb6\x96\xa9\
+\x53\xa7\x32\x7d\xfa\x74\x14\x45\x61\xf2\xe4\xc9\x68\x9a\x46\x38\
+\x1c\xa6\xb1\xb1\x31\xd8\x8d\xea\xcc\x38\x42\x11\x54\x54\x54\xe0\
+\x79\x1e\x8d\x8d\x8d\xc4\xe3\x71\x26\x4d\x9a\x84\xeb\xba\x4c\x98\
+\x30\x81\x86\x86\x06\x66\xce\x9c\x19\xc0\x34\x75\x75\x75\x9c\x7e\
+\xfa\xe9\x14\x0a\x05\x54\x45\xa1\x52\xaf\xc5\x76\x4d\x2c\xcf\xa4\
+\xda\x68\x08\xbc\xb5\xb2\xda\xea\xea\xea\xc2\x75\x5d\x86\x87\x87\
+\xf1\x3c\x8f\xda\xda\x5a\xf2\xf9\x3c\x9a\xa6\x91\x4c\x26\xe9\xeb\
+\xeb\xc3\x71\x1c\x9a\x9b\x9b\x29\x95\x4a\xc1\x49\xfe\x50\x68\x40\
+\x33\x67\xce\x5c\x63\x9a\xe6\x71\x8a\xa2\x90\xaa\x74\xf8\xd4\x37\
+\x1b\x31\x0c\x41\x6a\xb7\xc3\xf0\x16\x93\xf8\x5b\x16\xf9\x61\xf7\
+\x00\x6c\x47\x55\x35\xce\xb9\xe2\x54\xf4\x79\x7b\x78\xf1\x3b\x7b\
+\xf8\xc9\x0d\x3f\x23\x9d\x4e\x73\xef\xbd\xf7\x52\x53\x53\x43\x67\
+\x67\x27\xae\xeb\x72\xec\xb1\xc7\x92\x4c\x26\xe9\xef\xef\x0f\x9c\
+\x01\xcf\xf3\xde\xf1\x2a\xbb\xa6\x95\x95\x95\x0c\x65\x7a\x50\x4c\
+\x83\x19\x33\x66\x32\x3c\x3c\x4c\x65\x65\x25\x0b\x16\x2c\x60\xcd\
+\x9a\x35\x7f\xf6\xff\x1d\xc7\x21\x97\xcb\xb1\x6b\xd7\x2e\xae\x7f\
+\xf9\x73\x14\xf3\x50\x5d\xa3\xb1\xf2\x81\xdd\x0c\xac\xdd\x67\x43\
+\xde\x4b\x5e\xbd\x7c\x4a\x56\xad\x5a\x25\x3e\x14\xa3\x5e\x1e\xcd\
+\xcd\xcd\x18\x89\x24\x1b\x6f\x2e\xe2\x94\xe4\x18\x6b\x44\x22\xd1\
+\x30\x0c\x35\xb8\x38\xcf\xf3\x50\x04\x7c\xe6\xd8\xbf\x27\xde\xb4\
+\x89\x57\x42\x77\xf2\xfd\xef\x7f\x9f\x6f\x7e\xf3\x9b\x64\x32\x19\
+\x22\x91\x08\xb6\x6d\x53\x55\x55\x45\x7b\x7b\xbb\x7f\xf3\x08\x3c\
+\x57\xe2\x49\x17\x21\x14\xdf\xb0\x2a\x1a\x9e\x94\x28\x42\x09\x22\
+\x75\xcb\xb2\x68\xaa\x6e\x65\x64\x64\xc4\x8f\x01\xa4\xc4\xb1\x1d\
+\x96\xbd\xf2\x1a\xae\x74\xd0\x14\x1d\x4f\xfa\x71\x8d\x82\x8a\x16\
+\xd2\x82\x6d\x27\x3c\x81\xeb\x4a\x9c\xa2\xc7\xcf\x97\xdf\x49\x63\
+\xb4\x85\xcd\x85\xe5\x14\x6d\x95\x3d\x6f\xc4\x29\x26\xfd\x20\x33\
+\x1c\x36\xd0\x09\x53\x74\xf2\x44\x42\x11\x2c\xdb\xf6\x6d\x11\x3a\
+\x8a\x2e\x0f\xd8\xc2\x41\x7c\x95\xc9\x7c\x78\x39\x75\xdb\xb6\xb9\
+\xfa\xea\xab\x59\xb4\x68\x11\x8e\xe3\xf0\xe8\xa3\x8f\x92\xc9\x64\
+\x82\xa0\xaf\x50\x28\x30\x7d\xfa\x74\xde\x7c\xf3\x4d\x12\x89\x04\
+\xf5\xf5\xf5\x6c\xdd\xba\x15\x4d\xd5\x58\xd3\xf3\x1c\x21\xcd\x20\
+\x97\xcb\xf1\xf5\xaf\x7f\x9d\x42\xa1\x40\x4d\x4d\x0d\xd1\x68\x94\
+\xad\x5b\xb7\xd2\xd8\xd8\xe8\xab\x0b\xc5\x65\xce\xe7\x22\x1c\x3b\
+\xee\x42\xcc\x70\x1f\xa9\xbe\x30\xeb\x7b\x5e\xe5\xf4\x63\x4e\x66\
+\xdd\x8e\x57\xd9\xf3\x8c\x83\xa2\x41\x43\x43\x03\xc5\x62\x31\xf0\
+\xfc\x5c\xc7\xa1\xdb\xeb\x67\xde\x19\x95\x5c\x71\xc2\xcd\xfc\x62\
+\xe3\xb7\x38\xa5\xf1\x32\x56\xed\x7a\x95\x7c\xc5\x36\xb6\x3c\x90\
+\x21\x9f\x2d\x20\x10\xe4\xc6\x79\x2c\x38\x3b\x86\x18\xf6\x78\xfc\
+\xf9\x9f\x92\xee\x76\x31\x47\x20\xdb\xe7\x60\xe7\xf7\x79\x4a\x9e\
+\xa5\x70\xfa\x1d\x2d\xfc\xe8\xec\xdf\xf3\x99\xff\xfc\x24\xff\xf2\
+\xe9\x7f\x47\x91\x21\x36\x24\x7f\xc7\x0b\xff\xf5\x06\xa5\x3e\x3d\
+\x10\xca\x4b\x2f\xbd\xd4\x0c\x0c\x1f\x4a\xb6\xcc\x41\xb9\xbd\x93\
+\x27\x4f\xa6\x58\x2c\x32\x73\xe6\x4c\x14\x45\x61\xda\xb4\x69\x54\
+\x56\x56\x52\x55\x55\xc5\x53\x4f\x3d\x15\x18\xe2\x4c\x26\xc3\xc6\
+\x8d\x1b\x09\x85\x42\x08\x04\xba\x88\x50\x74\xf2\xec\xdd\x35\xe2\
+\xbb\x91\xd1\x68\x80\x13\x95\xed\x83\x6d\xdb\x48\xcd\x63\xe2\x91\
+\xd5\xbc\x35\xf8\x2a\x3f\xb8\xe0\x01\x4c\x25\xc5\x7f\x3c\xbb\x86\
+\xc5\x27\x9f\x4d\x9f\xda\x4e\xef\xf3\x69\xd4\x90\x4f\xa6\x2b\xc3\
+\xe5\x96\x65\x11\x0e\x47\x30\xea\x1c\x5a\xe6\xd7\x70\xc6\x19\x67\
+\xb0\x54\xf9\x21\xc7\xb7\x9e\xc8\x50\xa4\x8b\xe1\xe8\x5e\xba\xaa\
+\x3c\x0c\x3d\x4c\x43\x43\x03\xc3\x83\x43\x74\x3d\x06\x42\x11\xc4\
+\x55\x90\x63\xe6\x53\x78\x1a\x46\x58\x04\x2a\x53\x95\x1a\x8a\x5d\
+\x85\xc4\x25\x4b\x2f\x4d\x35\xcd\x3c\xbf\xfa\x55\x76\x2a\x1b\xf1\
+\xc6\xd4\x1e\xc2\xf7\xfc\xaa\xaa\xaa\xc8\x66\xb3\x87\x94\xba\xf4\
+\x67\x05\x12\x89\x44\xb8\xe9\xa6\x9b\x38\xf7\xdc\x73\xf9\xde\xf7\
+\xbe\x47\xa9\x54\x0a\x74\x72\x59\x3f\xf7\xf6\xf6\x1e\x60\x03\x14\
+\xa1\xb0\xec\xad\xa5\xcc\x3d\xfe\x44\xd6\xb6\x75\xe3\x0c\x86\x89\
+\x46\xa3\xa4\xd3\xe9\x03\xd2\xb5\x89\x44\xc2\x0f\xc6\x42\x12\xcb\
+\x0d\x53\xd1\x58\xe2\x7b\x7f\xb8\x86\x1b\x3f\xf3\x13\x8c\x4a\x87\
+\x5f\x6e\xfc\x0f\xe2\x03\x26\xa9\x74\x12\x45\x13\xd8\xb6\x1d\xc4\
+\x13\x65\xbe\x95\x94\xe0\x78\x26\xb9\x62\x0e\x2b\x6b\xa0\x1a\x16\
+\xaa\xaa\x53\x1f\x6a\xa3\x64\x6e\xe0\xb6\x1f\xdf\x41\x7d\x7d\x3d\
+\xab\x56\xad\x62\xe3\xc6\x8d\x84\xc3\x61\x7a\x7a\x7a\x68\x6c\x6c\
+\xa4\xab\xab\x8b\xd9\xb3\x67\x63\x59\x16\x1b\x36\x6c\xa0\xa2\xa2\
+\x82\xbe\xae\x01\x14\x0d\x54\x55\xc7\x71\x05\xae\x74\x89\xe8\x61\
+\xa4\xe7\xe1\xd8\x0e\xa6\xe5\x93\x1b\xca\xc1\xee\x87\x4e\x03\x72\
+\x5d\x57\xaf\xac\xac\x64\xe9\xd2\xa5\xc1\x05\x94\x8d\x5e\x39\x30\
+\x13\x12\xf6\x4f\x29\x3b\xb6\xc7\xda\xc4\x23\x74\xf7\x45\x48\x0d\
+\x65\x49\xa7\x0b\x54\x55\x55\x51\x57\x57\x17\x08\xa4\x1c\x50\x79\
+\x9e\x87\x82\x44\x0b\x0b\x8a\x09\x97\xc1\x9d\x5b\x39\xeb\xcb\x27\
+\x91\xeb\xf5\xb0\xf3\x12\x2b\xe3\xa2\x85\xf6\xc5\x23\xe5\xcd\x50\
+\x2a\x95\x90\x9e\xc4\x71\x3c\x22\x51\x95\x6b\x9f\xfd\x2c\x37\x9e\
+\xf9\x30\xbf\xd8\x72\x1d\x83\xfa\x4e\x1a\xf4\x06\xa4\x84\x71\xe3\
+\xc6\x91\xcd\x66\x69\x6d\x6d\x65\xdd\xba\x75\xcc\x9f\x3f\x1f\xcf\
+\xf3\x98\x3d\x7b\x36\x43\x43\x43\xe4\xf3\x79\xda\xda\xda\x98\x35\
+\x6b\x16\x0f\x3c\xf0\x00\x42\x51\x70\x34\x3f\xfa\xff\xdb\xa3\xff\
+\x89\xbc\xec\x47\xa2\x72\xc6\x94\x7f\x60\xab\x73\x27\xd6\x98\x40\
+\x0e\x55\x86\xf0\x3d\x7b\x59\x55\x55\x55\x0b\x3c\xcf\xab\x79\x9b\
+\x67\x51\xdb\xda\xda\xfa\x50\x2e\x97\x43\x48\x70\xa7\x08\x8e\x3b\
+\xb7\x9a\xfc\x90\x4b\x7e\xd8\xa5\x30\xe4\x11\xa9\xd2\x29\xa5\x3d\
+\x92\xbb\x6c\x3c\xe9\x32\x79\xf2\x64\x74\x5d\x27\x97\xcb\x61\xdb\
+\x36\xc3\xc3\xc3\x84\x42\x21\xe6\xcd\x9b\x47\x5f\x6f\x1f\x96\x6d\
+\xe3\x99\x72\x8c\x08\xed\x3b\x0c\xae\xeb\x1e\xa0\x3a\xa3\xd1\x28\
+\xa5\x52\x89\x7c\x3e\xef\x5f\xbc\x04\x73\x9a\xe0\x6f\xbe\xd1\x84\
+\xeb\x42\x4b\xf8\x28\xc6\x37\xd7\xb2\x7a\xd7\x4b\xe4\xfa\x5d\xba\
+\x1e\x0c\xd1\x32\xb1\x95\x63\x8f\x3d\x96\x17\x5e\x78\x21\x88\xa6\
+\x2d\xcb\xc2\x30\x7c\xdb\x56\xce\x65\xf8\xfc\x00\x81\x5d\xf0\x38\
+\xed\xce\x4a\xf2\x43\x06\x3f\xff\xfc\x52\x6e\x5a\xf1\x65\xba\xd2\
+\x6f\x22\xf1\xd8\xfc\xd3\x12\xc9\x4e\x07\x90\xd4\xd6\xd6\xb2\x73\
+\xe7\xce\xe6\x64\x32\x39\xf4\xa1\x0a\xe4\xdd\x86\xae\xeb\x4d\xf3\
+\xe7\xcf\x1f\x4c\xa5\x52\xd4\xd4\xd4\x90\xcb\x66\x71\x2c\x3f\x5f\
+\x82\x02\x8a\xcf\xb2\x39\x00\xdb\x6a\x69\x69\x61\x60\x60\x00\xcf\
+\xf3\x13\x40\xa6\x69\x72\xdf\x7d\xf7\xd1\xd2\xd2\x82\xa2\x28\x3c\
+\xf9\xe4\x93\xec\xde\xbd\x1b\xd7\x75\x03\x6f\x6c\xc2\x84\x09\x74\
+\x76\x76\x92\x4c\x26\xd1\x34\x8d\x74\x3a\x4d\x22\x91\xc0\x34\xcd\
+\x40\x75\x79\x8d\x82\x93\xff\xb1\x96\xf8\x0e\x9b\x54\xa7\xcd\xe8\
+\x36\x0b\x33\xe5\xa1\x68\x82\xc6\xf1\xf5\x41\x2a\xf9\xcf\x79\xaf\
+\xe5\xb5\xc8\xa5\x0a\x1c\xf5\x8d\x10\x4e\x49\x52\xa1\xd6\xa1\xaa\
+\x1e\x59\x33\x49\xba\xc7\x61\xfb\x13\x39\x3c\xc7\x37\x19\xd5\xd5\
+\xd5\xe4\xf3\xf9\x33\xc3\xe1\xf0\x68\x2a\x95\x32\x7b\x7a\x7a\xb6\
+\xfe\x55\xb9\xbd\x42\x08\x1e\x7d\xf4\x51\xa4\x94\xac\x5c\xb9\x92\
+\xdd\xbb\x77\xd3\xdb\xdb\xeb\x67\x01\xc7\x5e\xaa\xaa\x62\x18\x06\
+\x9d\x9d\x9d\x44\x22\x11\x74\x5d\x3f\x80\xa1\x31\x7d\xfa\x74\x5e\
+\x7f\xfd\x75\x3e\xfb\xd9\xcf\xd2\xda\xda\x4a\x24\x12\xa1\xbf\xbf\
+\x9f\x19\x33\x66\xd0\xde\xde\x8e\x61\x18\x34\x34\x34\x90\xcd\x66\
+\x49\xa5\x52\xe8\xba\xee\xa3\xbb\x8a\x82\x61\x18\x7c\xf1\x8b\x5f\
+\xe4\xe5\x97\x5f\xa6\xe7\xa1\xb1\x39\x5d\x97\x71\x31\x0f\xb7\xd2\
+\xb7\x65\xfb\x7b\x64\xb1\x58\x8c\xed\xdb\xb7\x9f\x52\x2a\x95\xf6\
+\xbc\xed\x56\x8e\x3e\xfc\xf0\xc3\x9f\xc8\xe5\x72\x14\x0a\x05\x16\
+\x2d\x5a\x84\xb2\xbc\x92\x10\x50\xf0\x6c\xb4\x3a\x0b\x2d\x35\x91\
+\x06\x04\x0d\x27\xbe\x63\x19\x5e\x50\x55\x95\x8e\x8e\x8e\x1d\x3d\
+\x3d\x3d\x33\xff\x6a\x27\x44\xd3\xb4\xa6\xa3\x8f\x3e\x7a\xf0\x96\
+\x5b\x6e\xa1\xa9\xa9\x09\xc3\x30\xb8\xe1\x86\x1b\x68\x68\x68\x40\
+\x55\x55\x16\x2c\x58\xc0\x5d\x77\xdd\x45\x55\x55\x15\x4d\x4d\x4d\
+\x84\xc3\x61\x5e\x78\xe1\x85\x20\xc3\xd7\xd0\xd0\xc0\xde\xbd\x7b\
+\x99\x3e\x7d\x3a\x47\x1e\x79\x24\x83\x83\x83\x24\x93\xc9\x20\xe1\
+\x34\x56\x12\x80\xae\xeb\x14\x8b\x45\x1c\xc7\x21\x12\x89\x04\x64\
+\x02\x45\x51\x78\xf3\xcd\x37\xd9\xbc\x79\x33\x00\x1b\x36\x6c\x40\
+\xd3\x34\x56\xae\x5c\xc9\xe4\xc9\x93\xc9\x66\xb3\x4c\x99\x32\x85\
+\x62\xb1\xc8\xfa\xf5\xeb\x91\x52\x32\x34\x34\xc4\x5b\x6f\xbd\x35\
+\x7d\x74\x74\x74\x57\xf9\x3e\x1a\x1b\x1b\xaf\x2d\x14\x0a\xc7\xd4\
+\xd6\xd6\x5e\x58\xbe\xf6\x6c\x36\x1b\x44\xde\x83\xc5\x61\x2a\x23\
+\x3e\xac\x2e\xed\x31\xe6\xbe\x23\x98\x34\x69\x12\x55\xd5\x55\x3e\
+\x89\x5b\x08\x1c\xc7\xb1\x84\x10\x5d\x63\xea\x5c\xdb\xb4\x69\xd3\
+\x7d\xf1\x78\xfc\x3b\x1f\xea\x09\x51\x14\x85\x47\x1f\x7d\x94\xe3\
+\x8f\x3f\x9e\x67\x9f\x7d\x96\x5c\x2e\x17\xa8\x93\xce\xce\xce\x20\
+\x67\x1e\x8f\xc7\xf1\x3c\x8f\x48\x24\x42\x26\x93\xe1\x86\x1b\x6e\
+\x60\xca\x94\x29\x5c\x7c\xf1\xc5\x98\xa6\xc9\xca\x95\x2b\x03\x1b\
+\x51\x86\x47\xca\xc6\xb2\x9c\xdb\xd6\x75\x1d\xdb\xb6\x09\x87\xc3\
+\x41\x00\xba\x71\xe3\x46\x9a\x9a\x9a\xd8\xb1\x63\x07\xa3\xa3\xa3\
+\x81\x0b\x5d\x59\x59\xc9\xc6\x8d\x1b\x19\x1a\x1a\xa2\xa1\xa1\x01\
+\x5d\xd7\xe9\xed\xed\x45\x55\x55\xa4\x94\xe2\x6d\xc1\xee\x25\x0b\
+\x17\x2e\x9c\x66\xdb\xb6\x44\x22\x8a\xd5\x69\xaa\x62\x1a\x5e\x2a\
+\x84\x9b\xd6\x11\x52\x01\x05\x84\x90\x01\xc8\x64\x95\x2c\x7a\xd8\
+\x4c\xf3\x94\x5a\xdc\x8c\x8e\x9b\xd2\xf0\xb2\x5a\x48\x68\xcc\x00\
+\x08\x87\xc3\x6c\xd8\xb0\xa1\xf1\xc3\x88\xd4\xeb\x92\xc9\xa4\x3e\
+\x56\x5c\xd3\xe0\xba\x2e\x6b\xd6\xac\x61\xf5\xea\xd5\xef\xf0\x36\
+\xca\xbc\xdf\xb2\x6a\xdb\x3f\xc5\x59\x55\x55\x45\xa9\x54\xe2\x17\
+\xbf\xf8\x05\xf7\xde\x7b\x2f\xb6\x6d\x53\x53\x53\x43\x63\x63\x23\
+\x2f\xbc\xf0\x02\xad\xad\xad\xe4\xf3\x79\xb2\xd9\x2c\x9e\xe7\x91\
+\x4e\xa7\xc9\x66\xb3\xc4\x62\x31\x52\xc9\x14\x55\x95\xd5\x14\x4b\
+\x05\x2e\xbb\xec\x32\x62\xb1\x98\x8f\x4f\x8d\xed\x68\x21\x04\x6f\
+\xbd\xf5\x56\x90\xde\xdd\x1f\xde\x18\x37\x6e\xdc\xbb\xb2\xe3\x13\
+\x89\x04\xb6\x6d\x8b\xbd\xf6\x10\xb3\x3f\x69\x22\xa3\x0a\x1e\x0e\
+\xaa\xa6\xe0\xa5\x74\xac\x01\x03\xbb\x2f\x4c\xa9\xd3\x3f\xa1\xd2\
+\x85\xda\x79\x61\xea\x16\x94\x28\xba\x71\x14\x05\x9c\x9c\xca\xf0\
+\x43\x8d\xef\xb8\xe7\x0f\x54\x20\x8a\xa2\xac\xb9\xf0\xc2\x0b\xa7\
+\xbd\x17\xca\x64\x28\x14\xe2\xc5\x17\x5f\x7c\xc2\x34\xcd\x27\x01\
+\xea\xeb\xeb\x6f\xbd\xe9\xa6\x9b\x9a\xce\x3a\xeb\x2c\x56\xad\x5a\
+\x15\xa8\xa7\x72\x1c\xa3\x28\x0a\xbd\xbd\xbd\x07\xe0\x50\xd1\x68\
+\x94\xfa\xfa\x7a\xc6\x35\xd7\xc3\xbc\x21\xaa\x23\x21\x5e\xb9\x6d\
+\x37\xb1\x58\x2c\x60\x9d\x1f\xcc\xd8\x3f\x95\xfc\x76\x3a\xaa\x6d\
+\xdb\x58\xd2\x46\x41\x41\xcf\x4d\xe4\xe6\xf3\xee\xe1\x85\xdd\xbf\
+\xe6\xf9\xd1\xc7\x99\x3c\xbf\x9e\xbe\xd8\x20\xd9\xed\x5a\x70\x6a\
+\x3f\x31\xe1\x5c\xae\x38\xf5\x6a\xbe\xf0\xd3\xd3\xf8\xa7\xf3\xaf\
+\xe4\xd1\x55\xf7\x04\x39\xa3\xbf\x94\xe8\x70\xd0\x02\xf1\x3c\xaf\
+\xaa\x4c\xb1\x1c\x75\x33\x4c\xbc\x20\x4d\xa4\x42\x01\x4b\xc1\xb3\
+\x15\xdc\x94\x86\x35\x60\xe0\x0c\x19\xb8\x19\x1d\x21\xfc\xaa\xa8\
+\x50\x28\xd4\x3e\x30\x30\xf0\xeb\x31\x28\xff\x3f\xea\xeb\xeb\x1b\
+\x57\xae\x5c\x29\xf6\x8f\x63\x74\x5d\xff\x93\xe0\x5d\x3e\x97\x67\
+\x43\x7e\x07\x67\xcc\xaa\x40\xd5\x2d\x16\xde\x58\x81\xa6\x14\xd0\
+\x55\x1d\xd7\x96\x38\x71\x83\xd4\xd2\xda\xe0\x7f\x5e\x7b\xed\xb5\
+\xaf\xe6\xf3\xf9\x47\xde\xb6\xa1\xdc\xa6\xa6\xa6\xfc\xdb\xe7\x37\
+\x4d\x13\xc7\x76\xf0\x54\x3f\x99\xf5\x99\xe9\xd7\xf0\x5f\xab\xff\
+\x9d\x2f\xcc\xfa\x57\x66\x2d\xfc\x04\x7a\xb4\xc4\xcd\xbb\xaf\xde\
+\x47\x06\xf7\x04\xaf\x74\x3f\x88\xf6\x6c\x8c\x4f\xcd\xfe\x32\x6d\
+\xb1\x23\x70\x5c\xc7\x27\x7e\x8f\x09\xe4\x43\x39\x21\x65\x70\xcf\
+\xb1\x1d\xb2\x4a\x9e\xca\x6a\x41\x36\x67\x72\xce\x11\x7f\xcf\xa8\
+\xd9\xcd\x9b\x43\xab\xa9\x9a\xe6\x51\x18\xcd\x30\xf4\x70\x3d\x42\
+\x0b\x6a\x3e\x82\xab\x8b\xc7\xe3\x09\xdb\xb6\xa7\x9a\xa6\x19\x40\
+\x31\xe5\x2c\x5b\x52\x49\xd1\x38\x51\xc7\x4d\xeb\x78\x59\x1d\x69\
+\xa9\x64\x0b\x29\x8c\xb0\xc1\xb8\xba\x71\x40\x06\x45\x15\xcc\x33\
+\xbe\xc0\xe2\xc5\x67\x63\x91\xe3\x7b\x4f\xfd\x3b\xf3\x67\x4f\x66\
+\xab\xb3\x35\x98\x67\x2c\xbf\x5d\xf4\x3c\x2f\xbd\xff\xb5\x47\xa3\
+\xd1\xfa\xbe\xbe\xbe\xf0\xdb\x84\xa1\x96\xe3\x22\xcb\x30\x29\xa6\
+\x15\xbc\x82\x4a\xef\xd0\x1e\x36\x29\x5b\x78\xab\xe7\x4d\x1a\x0e\
+\xcf\xa1\x29\xa1\x80\x99\xa2\xa0\xa2\x22\x71\x5c\x9b\x81\xd4\x30\
+\x7b\x52\x11\x34\xa1\x07\xe8\x43\x39\x9e\xf9\xf0\x04\xe2\x38\x78\
+\xba\x8b\x50\x14\x3e\x5e\x7f\x19\xcd\xb1\x3a\x1a\x12\x47\xb1\x6e\
+\x68\x3b\x9f\x3d\xf9\x42\x1e\x1f\xf4\xc9\x6d\x8a\xa4\x1c\x91\xef\
+\x8f\xf5\x64\xc3\xe1\x30\xae\xeb\xa2\x69\x1a\x13\x27\x4e\xc4\x75\
+\x5d\xd2\x4e\x81\x59\x17\xb9\x18\x61\x05\x17\x1b\xa1\x38\x78\x79\
+\x85\xed\x77\xd7\x60\x88\x0a\x3f\x4a\xf0\x20\x95\x2a\x72\xfe\xf1\
+\x17\x71\xdb\xda\xcb\xf8\xfc\xf4\xff\xe0\xdf\x17\xdf\x81\xad\x8f\
+\xd2\xbe\xf5\xaa\x60\xc1\xfe\x48\x04\xad\xb4\xb4\xb4\x8c\x94\x13\
+\x55\x00\x9e\xea\xa2\x69\x2a\x9e\x29\x10\x52\xd0\x20\x1a\xc8\x3d\
+\x06\x37\x7b\xd7\xa3\x2b\x06\x3f\xf5\x6e\x43\x41\xc5\x99\xbb\x9b\
+\x49\xb3\x9a\xf6\x95\xbc\xa1\xd0\x1a\x69\xe5\xb0\xe6\xc3\x58\xdf\
+\xbb\x97\x1a\xa3\x11\x89\xc4\xb2\xec\x03\x28\xb4\x1f\x8a\x40\xca\
+\xc7\xdb\x15\x0e\x0a\x61\x16\xcd\x5d\xc4\xca\xa1\x87\x19\xe9\xaa\
+\xc0\x70\xea\xb1\xbd\x12\x48\xe1\x03\x88\x1e\xe5\x9c\xf3\xa9\xe3\
+\xc7\x8f\x1f\x1c\x18\x18\xb8\xa7\x7c\xc1\xe5\x8b\x2e\xd3\xf8\x6d\
+\xd7\x26\xa4\x6b\x24\x06\x5d\x7e\x70\xc1\xe3\x74\x66\xd6\xf1\xe0\
+\xc6\xff\x44\x7a\xc2\x27\x19\x48\xc0\x00\xab\x24\x89\x46\x2a\xf0\
+\x84\x43\xb6\x90\x67\xdd\xce\x0d\x54\xb4\xf4\xa3\x29\xa1\x7d\x05\
+\x42\xef\x4e\xe9\x34\x2a\x2a\x2a\x88\x44\x22\x48\xcf\xa3\x47\x0e\
+\x33\xff\x22\x6b\x1f\xe1\x6e\x34\x84\x33\x10\xa1\xd4\x6d\x10\x4e\
+\x54\x8f\x91\x8a\xc2\x84\x8d\x30\xf3\xa7\x9f\xc4\x26\xf7\x09\x2c\
+\x6b\xdf\xbe\x3a\xa5\xed\x52\x26\x4f\x8f\xf0\xfc\xf0\x2a\x56\x74\
+\xd9\x50\xe6\x68\x8d\xdd\xdf\x5f\x72\x42\x0e\xda\x02\x95\x0d\xa0\
+\x65\x59\x78\xae\x07\x63\xa5\xcc\x08\x51\xa6\x92\x51\x72\x72\x63\
+\xef\x33\x83\x72\x85\xc3\x0f\x3f\xfc\x14\xc3\x30\xbe\x5a\x9e\x23\
+\x16\x8b\x71\xd7\x5d\x77\x31\x7e\xfc\xf8\x7d\x75\x26\xb6\x83\x10\
+\x82\xaf\x1c\xf3\x6d\xd6\x0c\x3d\xce\xce\x6d\x19\x66\xa9\x9f\xa5\
+\xd2\xa8\x0e\xe6\x41\x42\xac\xc6\x60\x24\x35\x4a\xb5\x5e\xcf\xf8\
+\xba\x46\x5c\xcf\xc6\x76\x6c\x84\x54\x02\xc2\xdb\x1f\xa3\x72\x4a\
+\x29\xc7\x6a\x3e\x6c\xf2\x22\x0f\x12\x0a\x29\x95\x0b\x66\xff\x2f\
+\xaa\x9b\x43\x18\xb3\xd3\x8c\x3b\x37\x4e\x78\x7e\x22\x98\xcb\x71\
+\x5c\x96\x74\xdd\x87\x63\x7b\x24\x93\x49\x92\xc9\x24\xa5\x82\xc9\
+\xa3\x9b\xee\xc2\x94\x39\x42\x95\x92\xce\xe2\x5a\x86\x77\xe7\x82\
+\xbf\x8f\x51\x9e\x9c\x0f\xd5\x86\xb8\xae\x8b\x82\xc2\x8b\xed\x7f\
+\xe0\xe4\x8f\x9d\x4c\x4a\xea\xbc\xd6\xf5\x34\x47\x36\x7e\x8d\x97\
+\xc5\x73\x58\x56\x1e\x45\xfa\xe8\xec\x98\x57\xe6\x95\x77\xef\x75\
+\xd7\x5d\x47\x3c\x1e\xa7\xa5\xa5\x85\x42\xa1\xe0\x9f\x10\x61\xa3\
+\x48\x95\xc3\x9a\xa6\xf2\xda\xe0\x4a\x46\x0b\x25\x76\x0d\x75\x20\
+\xf0\x17\x5a\x20\x90\x48\x2a\x2b\x22\x3c\xb2\xe5\x87\x7c\x79\xc1\
+\x77\xe8\xcc\xad\xe6\xcd\xfc\xf3\x9c\x11\x39\x1b\x5b\xee\x63\x1f\
+\xfe\x31\xb7\xb3\x1c\xb1\x4b\x57\xe2\x85\x7c\xa4\xe0\xc6\x33\x1f\
+\xe6\xa9\xad\x3f\xe7\xba\x85\x0f\xb0\x64\xe3\x12\xcc\xea\x9d\x2c\
+\x59\xff\x2a\xa6\xe9\x73\x03\x8c\x90\x4d\xff\x6a\x8b\x3d\x23\xa9\
+\xa0\x20\xc7\x71\x6d\x92\x9b\x2c\x6e\xf8\xfa\xad\x28\xd2\x20\xdf\
+\xef\x61\xe7\x75\x26\x8e\xaf\x06\x21\x51\x35\x85\x9a\x9a\x9a\xcf\
+\xcf\x9d\x3b\xf7\xf8\xfd\x3f\x7f\x70\x70\x90\xee\xee\xee\x8f\xe7\
+\x72\x39\xeb\x90\x09\xa4\x50\x28\xe0\xd8\x36\x66\xc4\xc3\xc3\x65\
+\xb3\xf5\x30\x87\xf5\x4d\xa5\xae\x51\xa1\x6d\x96\xca\x7f\xae\xba\
+\x04\xcb\x09\x91\xcb\xe5\x51\x74\x7f\x61\xca\xc1\x5c\xd9\x03\x59\
+\xb9\x72\x25\x9f\xf9\xcc\x67\x02\x40\xcf\xf3\x3c\x6c\xc5\x46\x28\
+\x1a\x99\x62\x86\x90\x6a\xa0\x8b\x10\x96\x6b\xe2\x38\x36\xa3\xa3\
+\xa3\x28\x42\x21\x5b\xe5\x51\xb4\x2a\xe8\x0e\xbd\xc6\x0f\x9e\x4b\
+\xf1\xa5\x4f\x7e\x11\x33\xd2\xc3\xb3\xdb\x7f\xce\x68\x57\x91\x64\
+\x32\x1b\xb8\xc1\xef\xe6\x7a\x06\xfc\x32\x57\x42\x54\x22\xa4\x42\
+\x4d\x64\x1c\x9b\xe3\xaf\x70\xf2\xf0\x67\xf0\x2c\x15\xd7\x75\x70\
+\x5d\x89\x65\xfa\xc5\x21\x86\x61\x90\xee\x74\x31\x0c\x0d\x4d\xf3\
+\xe7\xb4\x1d\x9b\xa6\xca\x49\x18\xd2\x40\x00\xb9\x89\x83\xcc\x3a\
+\xcb\x81\x4c\x08\x37\x6e\xe0\x0c\x87\x91\xb6\xd2\x2c\x4d\xa5\x59\
+\xda\x3e\x81\xaf\x4c\xea\xeb\xe8\xe8\x50\x0e\xe9\x09\xc9\xe7\xf3\
+\x7e\x4e\xa0\x42\x62\xbb\x16\x9a\xaa\xf2\x78\xe7\x77\x39\xa2\x74\
+\x0c\x96\x6d\x61\xa5\x15\xb6\xfd\x3e\x49\xc9\xb6\x10\xce\x81\xf6\
+\xa2\x3c\x96\x2f\x5f\xce\xf3\xcf\x3f\xcf\xe0\xe0\x20\x2d\x2d\x2d\
+\x7e\xb5\x92\xea\xa7\x6e\xef\x5b\x76\x0f\xff\x72\xc1\xb5\x94\x1a\
+\x3c\x56\xfc\xee\x51\x2c\x3b\x12\xf0\xae\x34\xd7\x57\x8b\x9e\x25\
+\xe8\x1b\x6e\xe7\x9a\x7f\x5d\xcb\xe8\x36\x93\xc2\xa0\x8b\x50\xc5\
+\x01\x94\xa1\x77\xe3\x47\x05\x5c\x5c\x4f\xe2\x49\x89\x50\xfc\x53\
+\xa7\x08\x05\x55\x55\x49\x66\x53\xa4\x43\x5d\xe0\x81\x65\xdb\x41\
+\x21\x4e\x4b\x4b\x0b\xd1\x68\xb4\x5c\x10\x4a\x32\x99\x0c\xd4\xa2\
+\x8a\x42\x69\x72\x82\xc8\xb8\x4a\x64\x5d\x11\xda\x8a\x07\x7c\xe6\
+\xf0\xef\xc6\xe1\xa6\xb5\x80\xf6\x7a\xc8\x55\x56\x99\x0b\x1b\xc9\
+\x29\xec\x7e\x31\x4f\x6a\xb7\x83\x99\xf6\x58\x55\x58\x82\x5b\x02\
+\xd7\x94\x08\x55\xa0\x69\xfb\x16\x67\xff\x82\x18\xa0\xd0\xd3\xd3\
+\x93\x97\x52\x4a\xdb\xb6\x23\xe9\x74\x5a\xb5\x6d\xdb\x4f\x50\x39\
+\x06\xb2\xae\x9d\x47\x56\x3e\xc4\xe7\x4f\xfe\x3c\x8d\x93\xa0\xc7\
+\x49\xe1\x38\x0e\x93\x26\x4d\xc2\x48\x24\x58\x7b\x63\x1e\xb7\x34\
+\x06\xce\x0a\x90\x68\x84\xc2\xfb\xf2\xf9\x7f\x8a\x81\x5e\x16\x88\
+\x74\x25\xd2\xf3\x91\xe9\x54\x21\xce\xec\xda\x53\x98\x32\x71\x02\
+\x2f\xae\xf7\x38\xbe\xf9\x53\xbc\xe1\xfe\x38\x30\xe0\xe1\x70\x98\
+\x68\x45\x94\xa6\xba\x09\x34\xd6\x4a\xde\xdc\xbe\x85\xb6\xb6\xb6\
+\x7d\xf9\x1c\x1f\x57\xc1\x73\x42\x7c\xef\x93\x4f\xf2\xd2\x96\x17\
+\x70\xaa\xf7\x92\xd8\x1b\x61\x93\xfd\x80\x5f\x16\x67\x79\x41\xeb\
+\x90\x83\x21\xd3\xbd\x27\x81\xb4\xb5\xb5\x71\xe1\x85\x17\xb2\x7e\
+\xfd\x7a\x06\x7a\x06\xf1\xac\x0c\x6e\xc8\x41\xea\x12\x2b\x62\x05\
+\x09\x27\xcf\xf3\xc8\xe5\x72\xc1\xcf\x80\x33\x06\xa9\x9c\x5b\x86\
+\x55\x62\xb1\xd8\x8b\xae\xeb\x7e\xd2\xcf\x3a\x7a\x28\x86\xbf\x6b\
+\xdb\x47\x7e\x47\xc7\xfd\xaf\x30\xd8\x53\xc0\x2a\x48\xee\xbc\xf3\
+\x4e\x26\x4f\x9e\xcc\xf0\xf0\x30\x4b\x96\x2c\xc1\x34\x4d\x5c\xd7\
+\xa5\x50\x28\x90\xc9\x64\x98\x30\x61\x02\x7b\xf6\xec\x61\x64\x64\
+\x84\xe6\xe6\x66\xba\xbb\xbb\xff\x68\x2a\x3a\x9f\xcf\x23\x5d\x0f\
+\xcb\xf6\x09\x15\xdf\x7d\xf5\x62\xae\x3f\xf5\x11\x1e\xda\x74\x0b\
+\x3b\xb4\x65\xf4\x77\x56\xe2\xd8\x2e\xb9\x5c\xa1\x9c\x66\xa0\xc7\
+\x1b\xa1\xf9\xb2\x51\x22\xba\x8e\xbc\x67\x14\xe1\x34\x04\x20\xa8\
+\x8a\x82\x22\x04\x21\x6b\x1c\xb1\x68\x8c\x1f\xbd\x74\x1d\xf7\x5e\
+\xfc\x07\xea\x4f\xaa\x23\xd7\xbe\x85\x1e\x6b\x17\x96\xa9\x7c\x70\
+\x02\xf9\xf5\xaf\x7f\xcd\xab\xaf\xbe\xca\x2d\xb7\xdc\xc2\xb2\x65\
+\xcb\xd8\xb8\x71\x23\x42\x08\xba\xbb\xbb\x99\x34\x69\x12\x93\x27\
+\x4f\x66\xf5\xea\xd5\x74\x74\x74\x70\xec\xb1\xc7\xb2\x71\xe3\x46\
+\x8a\xc5\x22\xaa\xaa\x2e\x38\xf1\xc4\x13\x65\x40\x92\xf6\x3c\x34\
+\x5d\x05\x47\x48\x84\xdf\x94\xa7\xfd\x5b\x1e\x12\x50\x14\x1d\xa1\
+\xda\xa8\x7a\x2d\x8e\x19\x0f\xa2\xf8\xa9\x53\xa7\xf2\xc8\x23\x5f\
+\x1c\x22\x28\x00\x00\x19\xed\x49\x44\x41\x54\x8f\x50\x57\x57\x47\
+\x73\x73\x33\x8d\x8d\x8d\xdc\x7f\xff\xfd\x14\x0a\x05\xc2\xe1\x30\
+\xb1\x58\xac\x5c\x38\x8a\xe7\x79\x6d\xb5\xb5\xb5\x1f\xdb\x8f\xa8\
+\x11\x76\x5d\x37\xb0\x21\xb6\x09\x8e\xb4\x51\x2b\x6d\x7e\xb0\xfa\
+\x2b\xb4\xd5\xcc\xa0\x94\xb6\xc9\x0f\x27\xe8\x7c\x2d\x45\xb1\xe8\
+\xab\x97\x48\x38\x8c\x5d\x6d\x51\x53\x15\xc6\xce\x87\x69\xac\x99\
+\x88\x3d\x60\xe3\x49\x1f\x8d\x76\xa5\x40\x11\x02\xe9\x29\x38\x9e\
+\x0d\x02\x14\xdd\x65\xf7\xc0\x2e\xba\xd3\xdb\x70\x6c\xb0\x6d\x11\
+\x6c\x88\x72\xa5\xd5\x21\x13\xc8\x13\x4f\x3c\xc1\x69\xa7\x9d\xc6\
+\x9e\x3d\x7b\x18\x1a\x1a\xc2\xb6\x7d\xa3\xab\x69\x1a\x5b\xb7\x6e\
+\xc5\xb2\x2c\x92\xc9\x64\x40\xb0\x03\x02\xe2\xf2\xc4\x89\x13\x7d\
+\x6f\xa3\x94\xa2\x6e\xf1\x30\x13\x26\x86\x71\xb2\xaa\xb0\xfb\x22\
+\x38\x03\x61\xac\xbe\x08\x65\x07\xba\xcc\xc1\x2a\x6c\xc9\x73\xe3\
+\x8d\x37\x72\xc6\x19\x67\xf0\xfa\xeb\xaf\xe3\x79\x1e\xbb\x76\xed\
+\xc2\xb6\x6d\x74\x5d\x67\xc2\x84\x09\x14\x0a\x05\x74\x5d\x0f\xc0\
+\xc3\xe6\xe6\x66\x66\xce\x9c\xf9\x1d\xe0\x3b\xfb\x93\xfd\xb6\x6c\
+\xd9\x82\xa6\x69\x48\x45\xa2\xc7\x61\xef\xcb\x45\x46\xb6\x9a\xa4\
+\xba\x46\x11\x6c\x3b\x20\x23\x51\xb6\x7b\xaa\xea\x17\x75\x96\x8a\
+\x2e\xb7\x9c\xf9\x3b\xfe\xfe\xa9\xf3\x28\x39\x2e\x12\x9f\x6c\x21\
+\x3c\x40\x0a\xf4\x88\x43\x48\x35\x68\x8c\x4e\x22\x59\x1c\x42\x11\
+\x51\xf0\x14\x6c\xc7\x0a\xd4\x5f\x99\x94\x7d\x48\x6d\xc8\x3d\xf7\
+\xdc\xc3\x43\x0f\x3d\x44\x2e\x97\x7b\x87\x7e\x06\xd8\xb9\x73\x67\
+\xf0\xbb\x35\x6b\xd6\x50\x5d\x5d\x1d\xfc\xbd\x8c\xf5\x8c\x94\x52\
+\x1c\x39\xa5\x82\x62\xc9\x66\xf6\xe4\xe3\xd8\x53\xb3\x09\x67\x76\
+\x16\xcf\x93\x98\x7b\x2a\x18\x7d\x31\x86\x50\x65\x90\xcc\x8a\x46\
+\xa3\x41\x3e\x5f\x08\xe1\x97\xd2\xd9\x36\x93\x27\x4f\xc6\xb6\x6d\
+\x14\x04\x3b\xd4\x3d\x1c\x73\xa1\x86\x90\x0a\xd2\x12\x78\x25\x15\
+\x27\x1e\xc2\xea\x37\x70\x86\x0d\x9c\xb1\xce\x37\xc7\x1c\x73\x0c\
+\x97\x5e\x7a\x29\xf7\xfd\xea\x3e\xe4\x28\x48\x75\x90\xba\x29\x5e\
+\x60\x13\x4c\xd3\x24\x1a\x8d\x32\x86\x00\xa3\x69\x2a\x02\xbf\xe6\
+\xb1\xae\xaa\x96\x82\x95\xc3\x71\xfc\x66\x39\xa5\x52\x09\x45\x0a\
+\x42\x02\x6c\x2d\xc1\x8f\xff\xf0\x7f\xf9\xe5\xa5\x4f\x70\xd3\xeb\
+\x17\x61\x78\x31\xaa\x23\x31\x4c\xb3\x97\x52\xc9\x0b\xec\xe9\xc1\
+\x00\x8f\xef\x05\x5c\xdc\x65\x9a\xa6\x61\x59\x56\xcd\x3e\x86\xe2\
+\x81\x30\xc5\xdb\x4b\xce\xb2\xd9\xec\x01\xb9\x0d\xff\xf7\x1e\x9e\
+\x27\x39\x2e\x74\x39\x2d\x0d\x1a\x67\x4c\xba\x84\x5f\xbc\xfe\x9f\
+\xcc\x98\xda\xcc\xaa\x3d\xab\xb0\x2d\x1b\xa1\xf9\x35\x29\x75\x8d\
+\x31\x42\x5e\xa5\xaf\xd3\x14\x49\xae\x90\x65\xfc\xf8\xf1\x44\xa3\
+\x51\xb2\xd9\x6c\xd0\x6d\x21\x57\x59\x40\xd3\xab\x89\x29\x93\x58\
+\x38\xf7\x14\x5e\xda\xfd\x30\xce\x38\x17\x31\x2f\x41\xfc\xd5\x28\
+\xf9\x2d\x7e\xb1\xcd\x1d\x77\xdc\xc1\x8a\x15\x2b\xf8\xc1\x7f\xfe\
+\x80\x5f\xfd\xea\x57\xcc\x91\x47\xd0\xdd\xdd\xcd\xac\x59\xb3\x78\
+\xe1\x85\x17\x98\x34\x69\x12\x96\x65\xa1\x69\x1a\xa1\x50\x88\x54\
+\x32\x35\x56\x6b\x28\xf6\xab\x49\x71\xb0\x6c\xcb\x2f\x83\x70\xa1\
+\xb2\x14\xc2\xf6\x74\x3a\xcc\x27\x59\xdd\x73\x18\x55\x15\x55\x0c\
+\xe6\x77\x93\x1f\x74\x89\xf7\x25\xb1\x0b\xfb\x52\xbe\x07\x43\x39\
+\x3d\x68\x81\x8c\x8c\x8c\x9c\x54\x2c\x16\x7f\x72\xce\x39\xe7\x5c\
+\x7d\xdb\x6d\xb7\x91\xcd\x66\x79\xf8\xe1\x87\xd9\xb5\x6b\x17\x8a\
+\xa2\x90\x4c\x26\x89\x44\x22\x28\x8a\xc2\xe8\xe8\x68\x90\xf5\x4b\
+\xa5\x52\x94\x4a\xa5\x00\x5a\x70\xa5\x47\xa9\xe8\x71\xf1\x79\x7f\
+\xcf\x4d\x2b\xfe\x1e\xad\x66\x02\x53\xab\x8e\x61\x76\x43\x2b\x2b\
+\xe5\x2a\x4c\xcb\x44\xb8\x3e\x30\xd9\x74\x41\x96\xaa\x89\x05\xec\
+\x11\x03\x77\x30\x02\x1d\x02\x67\xd8\x0b\xa8\x48\xb6\x6d\xe3\x4a\
+\xdf\x08\x49\x04\xdf\x3c\xe5\x5e\x7e\xf4\xf2\xbf\xf2\xef\x67\x3c\
+\xc4\xea\x8d\x6f\xb2\xc9\xf9\x35\x43\x76\x1f\xb6\xed\x2f\xe6\xd3\
+\x4f\x3f\xcd\x82\x05\x0b\x68\x6f\x6f\x67\xe7\xce\x9d\xc1\x02\x25\
+\x12\x09\x4a\xa5\x12\x89\x44\x22\x48\x3b\x17\x0a\x05\xca\x0d\x6c\
+\x5c\x69\x32\x9a\x1e\xa5\xda\xa8\x23\xed\x24\x02\xc6\x0d\x02\x94\
+\xbc\xa0\x30\xe2\x91\x1b\x76\xb9\xf5\xd9\x1b\x49\xec\x70\x49\x75\
+\x3a\x20\xfd\xba\xf7\xb2\x0c\x0e\xb6\xa0\xe7\x3d\xa9\x2c\x21\x84\
+\xbe\x70\xe1\x42\xd6\xad\x5b\xc7\x39\xe7\x9c\xc3\xe1\x87\x1f\x4e\
+\x3e\x9f\xc7\xf3\x3c\x5a\x5b\x5b\x29\x14\x0a\x98\xa6\x49\x3a\x9d\
+\x26\x1e\x8f\x53\x5b\x5b\x1b\x64\x01\x83\x1a\x13\xc5\x1b\xd3\xd3\
+\xba\x8f\xcc\x0a\x85\xa1\xec\x00\xb9\xde\x4d\xfe\xfb\x4c\x2b\x38\
+\x21\xb8\x82\x29\x91\xe3\x08\x1d\xee\xb2\xab\x61\x33\x66\x2c\xcf\
+\xf0\x23\x3a\x20\x83\x40\x4f\x91\x3e\x15\x35\x1d\xf7\x88\x86\x2b\
+\x58\xd6\xf9\x04\xd7\x6a\x37\xd3\x50\x57\x83\xd5\x6f\xe1\x38\x2e\
+\xa6\xe9\x43\x33\x77\xde\x79\x27\x77\xdc\x71\xc7\x1f\xbd\xbf\xd1\
+\xd1\xd1\x03\x7e\x8e\x55\x8f\xe5\x5c\xa2\x3a\xff\xe7\xf7\x9f\xa5\
+\x36\x34\x89\xed\xc5\x5e\xa2\xd1\x28\x86\x61\xd0\xd4\xd4\x44\x6a\
+\x73\x8a\x2d\x9b\xdd\x31\xb7\xdb\xef\x68\x54\x15\xf3\x0e\xa0\xd6\
+\x96\x0b\x98\x0e\xb9\x40\xa4\x94\xfc\xf6\xb7\xbf\xa5\x9c\x60\xea\
+\xe8\xe8\x08\x20\x8b\xb2\x8d\x10\x42\x50\x28\x14\x70\x5d\x37\x10\
+\x56\x59\x3f\x03\xb8\x61\x8f\x48\x58\xe7\xe5\x0d\xcb\x09\x51\x4d\
+\x6d\xb4\x9e\x81\x4c\x17\x67\x55\x7f\x9c\xad\x72\x07\xa6\x55\x42\
+\xf1\x7c\x20\xb3\x3a\x7d\x2c\xe7\x1f\xfd\x45\x5e\x5a\xbd\x8e\x71\
+\xd2\xe3\xf4\xd9\xa7\xf0\x7d\xeb\x76\xc2\xaa\xb1\x8f\x94\x37\x56\
+\x61\xa8\x28\x82\x03\x6d\xa6\xc0\xf6\x8a\x63\x27\xc9\x25\x95\x4a\
+\xf9\xe9\x80\xb1\x60\x50\x4a\xe9\x7f\xaf\xf9\x7c\xa2\xb0\x16\xa5\
+\x60\x67\x51\x84\x8a\x6b\xfa\x0b\x97\x4e\xa5\x70\x5a\x1c\x4c\xa7\
+\x84\x16\xf5\xd8\x38\xb4\x02\xd7\x11\x34\x36\x36\x72\xf7\xdd\x77\
+\xe3\x79\x1e\xab\x57\xaf\x66\xd5\xaa\x55\xb4\xb6\xb6\xb2\x66\xcd\
+\x1a\x8e\x3c\xf2\x48\x36\x6d\xf2\x37\x57\x5d\x5d\x1d\xf9\x7c\x9e\
+\xde\xde\xde\x83\xe6\xff\xbe\x57\xac\x58\xd5\x34\x8d\x67\x9e\x79\
+\x46\x0a\x21\x84\x22\x94\x80\x3d\xe8\x4a\x9f\xaf\xa4\x29\x21\x3f\
+\x3f\xae\x86\x70\x1c\x87\x8a\x8a\x0a\xa4\x94\x41\xe9\xb1\xa5\xd8\
+\x68\xba\xe0\xc1\xed\xff\xce\x2d\x67\x3f\xce\xda\xe1\x27\x08\x35\
+\xf7\xd3\x93\xdf\x82\xed\x59\x14\xf2\x05\x14\xdd\x8f\x01\x8e\x9b\
+\xbe\x80\xee\xd4\x76\xde\xec\x5f\xc7\xc2\x19\xa7\x11\x56\x8c\xb1\
+\xb2\x33\x11\xb4\xf8\x50\xa4\x40\x22\xa8\xad\x0f\x91\xce\x67\x38\
+\xf7\x88\x7f\x20\x51\x1c\x20\x97\x2b\x31\xb5\xf6\x28\xda\x9d\x3f\
+\xe0\xba\xd2\xf7\xf2\x5c\x41\xa9\x26\xc1\xb4\xd8\x5c\x4a\xa5\x12\
+\x03\x6e\x8a\x19\x5f\x34\x99\x56\xb1\x90\x8b\xcf\xf8\x12\x35\x6a\
+\x2b\x37\x3d\x7e\x0d\xcf\x5e\xbf\x0e\x0f\x5f\xe0\x91\xa2\xce\xc0\
+\x1b\x26\x99\x5e\x87\xd4\x9e\x02\xba\x5a\x5d\xce\xed\x30\x77\xee\
+\x5c\xaa\xaa\xaa\xc8\xe5\x72\x74\x74\x74\xa0\xeb\x3a\xb1\x58\x0c\
+\x29\x25\xc9\x64\x12\xd3\x34\x69\x6b\x6b\x63\xdb\xb6\x6d\x1f\x8c\
+\xca\x52\x14\xe5\xd1\x37\xde\x78\x63\xda\xac\x59\xb3\x4e\x2b\x14\
+\x0a\x58\xd2\x45\x9f\x9e\xa7\xae\xaa\x96\xb3\xe7\x7e\x8e\x92\x69\
+\xb1\x74\xfb\x13\x9c\x39\xfb\x1c\x96\xee\xfe\x2d\xe9\xf5\x61\x0a\
+\x85\x02\x42\x88\x60\x87\xe4\x85\x87\xed\x5a\x84\xaa\x3c\xfe\xed\
+\xf7\x17\xb1\x78\xfe\xd9\x64\xf3\x29\xd6\xc7\x57\xb2\xf3\xe5\x2c\
+\xd9\x82\x19\xec\xf4\x92\x69\xe2\x58\x2a\xae\xe3\x91\x2b\xa5\xf0\
+\x1c\x1f\xcd\x95\x78\x68\x9a\xe6\xcf\x2d\xfd\xb8\x06\xe1\x71\xcd\
+\xd3\xe7\xf3\xc3\xf3\x9e\xe2\xc6\xd7\x2f\x24\x53\x8a\xa3\xe9\x1a\
+\x56\xc9\x22\x97\xdb\x97\x2b\x99\x14\x9d\x46\x3e\x9f\xf7\x53\xb7\
+\xd8\xd8\xa6\xcb\xac\xc6\x45\x3c\xd9\xfe\x33\x0e\x53\x3f\xc1\x31\
+\x0d\x8b\x79\x46\xae\xa6\xbe\xa1\x9e\xe3\x8f\x3f\x9e\xad\x5b\xb6\
+\x12\xff\x83\x83\xe5\x98\xb8\x99\x0c\xd1\x6a\x9d\x64\x32\xc9\xd7\
+\xbe\xf6\x35\x5a\x5b\x5b\xe9\xec\xec\xdc\x57\x2e\x27\x25\x3b\x76\
+\xec\x08\x16\x3f\x95\x4a\x05\x2c\x99\x3f\x06\xe9\xfc\x45\x02\xc9\
+\x64\x32\x2f\x55\x55\x55\x9d\xdc\xda\xda\x7a\x5a\x32\x99\xa4\x88\
+\x45\xf5\xc9\x3a\xc7\x34\x9e\xc9\xdc\x63\x9a\x59\xb7\xb1\x93\xef\
+\x7f\xe6\x6e\x8e\x9b\x79\x0c\x43\xcf\x2c\x63\x47\x4f\x08\xe1\xaa\
+\xa4\x52\xa9\xc0\x80\x46\x4a\x2e\xd9\x21\x87\xc1\x8d\x16\xa3\xdb\
+\xf6\xb0\xfa\x96\xbb\x83\x5e\x55\x4d\xa2\x99\xa6\xb9\xfb\x3e\xef\
+\xf7\x0f\x3f\x05\x63\xcd\x5a\xfb\x78\x09\x80\x09\x13\xc7\x53\x2c\
+\x16\xc9\x66\xb3\xe4\xf3\x79\x84\x14\x38\xa6\xf0\x85\x5c\x6d\x71\
+\xe3\x6b\x7f\x47\x24\x5c\x41\x41\xd5\x48\x76\xda\x74\xae\x4c\x21\
+\x9d\x80\xe0\xc7\xb8\xea\x71\xf4\xf7\xf7\xfb\xec\x79\xd5\x19\xab\
+\xf8\xf2\xf1\x32\xd7\xf3\x48\x17\x13\xa8\xaa\xc6\xaa\x55\xab\x78\
+\xf1\xc5\x17\xf9\xd2\x97\xbe\xc4\xb2\x65\xcb\xa8\xa8\xa8\xe0\xfe\
+\xfb\xef\xa7\xad\xad\x8d\xae\xae\xae\xc0\x3d\xae\xa9\xa9\x39\xa8\
+\xb5\x8b\xc7\xe3\x1f\x0c\x0d\x48\x55\xd5\x69\xe5\xf6\x4c\xb6\xf0\
+\x6f\xa8\x52\x8f\x61\xba\x45\x4c\xa7\xc4\x50\xa6\x97\xbe\x6c\x2c\
+\x80\xeb\x71\xf6\xf9\xde\xd7\x5e\x7b\x2d\x4b\x96\x2c\xa1\xe7\xbe\
+\x04\xae\x6b\x13\x05\xf4\x4a\x2b\x28\x1c\xdd\x59\xe8\xe7\x88\xcf\
+\x38\x54\x84\x35\xa4\xa9\x62\x27\x74\xdc\x11\x03\xab\x3f\x8c\x97\
+\xd5\x10\x9a\x0c\x82\xc6\x6c\x36\xeb\xef\x4c\xd7\x23\xdc\x2d\xd8\
+\xf6\xbb\x1c\xe9\xbd\x0e\x4e\x21\x81\x5d\x90\x38\x45\x89\x94\xa0\
+\xa8\x6a\x50\xb8\x67\x84\x22\x6c\xea\x5a\x45\xb5\x6c\xf6\xf3\x1d\
+\x86\x87\xae\x18\xec\x18\xdd\xc8\xf1\x47\x9f\xc0\x78\xed\x70\x36\
+\xed\x5e\x13\x70\xbd\xda\xda\xda\xe8\xee\xee\xf6\x05\x3f\x86\xd8\
+\x0e\x0c\x0c\x70\xc3\x0d\x37\x30\x3a\x3a\xca\x93\x4f\x3e\x19\x54\
+\x28\xe7\x72\xb9\xe0\x24\x94\x49\xe5\xb5\xb5\xb5\xe5\x62\xa4\xd1\
+\xe1\xe1\xe1\x85\x8d\x8d\x8d\x66\x6f\x6f\xef\xa1\x15\x88\x94\xf2\
+\xb0\x80\x9d\xa8\xb8\xa8\x42\x63\xb4\x38\x40\x53\x74\x2e\x35\x15\
+\x69\xb2\x56\x1a\x5d\x0d\xa3\xa0\x60\x5b\x26\xd2\x11\x38\x8e\xc3\
+\x33\xcf\x3c\xc3\xe8\xe8\x28\x27\x9f\x7c\x32\xbf\xff\xfd\xef\x03\
+\x2c\x6a\xd9\xb2\x65\x81\xc1\xef\x2d\xc5\x59\x34\x7e\x1c\x85\xac\
+\xc7\x71\xd3\x3f\xce\xa6\xc1\x65\x38\x33\x72\x54\xa9\x92\xec\xe6\
+\x0a\x32\xaf\x57\xfb\x86\x58\xf1\x8b\x7a\x16\x2f\x5e\xcc\xec\xd9\
+\xb3\x79\x69\xc9\x4b\x78\x19\x09\x8c\x42\x05\x58\x9a\x85\x88\xf9\
+\x0b\xa8\xeb\x3a\x99\x4c\x06\xc7\x71\xd0\x74\x85\x64\xb7\x83\x5e\
+\x5f\xf4\x93\x55\x38\x78\x9e\xc1\x40\xe8\x55\xc2\xc5\xd3\xc9\xd7\
+\xf6\xb0\xdb\x7a\x19\x5d\x35\xb8\xe8\xa2\x8b\x98\x3d\x7b\x76\xd0\
+\xe5\xc7\xf3\x3c\x86\x86\x86\x98\x3a\x75\x2a\xdf\xf8\xc6\x37\x10\
+\x42\x10\x0a\x85\xde\x35\x07\x53\x2e\x32\xcd\x64\x32\xd4\xd4\xd4\
+\x50\x28\x14\x9c\xd1\xd1\xd1\xed\x1f\x14\x51\x4e\x09\x1a\x98\xa9\
+\x7e\x6e\xb5\x50\xb9\x8d\xb6\xca\xeb\x38\x62\xf1\x09\x5c\xf3\xe4\
+\x05\xb4\x4d\x6c\x06\x01\x96\x65\xe2\x8d\x61\x39\x6f\xbe\xf9\x26\
+\x8d\x8d\x8d\x64\x32\x99\x72\xd3\x64\x86\x87\x87\x0f\xf0\xc0\x84\
+\x10\x94\x6c\x93\x0b\x5a\x6e\x65\xc4\xdb\xc0\x3f\x2f\xb8\x9b\x97\
+\xda\x97\x90\x8e\x6c\xa5\xdd\xde\x15\xf4\x16\x29\x0b\xe4\xf2\xcb\
+\x2f\x27\x97\xcb\x71\xda\x69\xa7\x71\xfb\xed\xb7\x73\xc2\x89\x0b\
+\xe8\xee\xee\xe6\xc8\x23\x8f\xe4\xd1\x47\x1f\x65\xf2\xe4\xc9\x7e\
+\x7b\xc1\x54\x8a\x54\x2a\xc5\xe0\xe0\x20\x95\x95\x51\x32\x99\x0c\
+\xa6\x69\x52\xf0\xfc\x32\x08\x4f\x95\xfc\xf4\x8d\x7f\xe2\xaa\x53\
+\xbf\x8d\xed\x94\x30\x4d\x18\xd7\x54\x4b\x5f\x5f\x5f\xa0\x6a\x35\
+\x4d\xc3\x30\x0c\x7a\x7a\x7a\x10\x9a\x40\xd5\xfc\x66\x01\x39\x33\
+\x43\xa5\x51\xed\x57\x69\x45\x4d\xec\x3c\x63\x88\xf4\x81\xbd\xc5\
+\x3e\x30\xe6\xa2\x10\x82\x44\x22\xe1\xe7\x05\x34\x49\xc9\x8a\x61\
+\xab\x70\xe5\x6f\xcf\xe6\xd1\xaf\x6c\x44\x8b\x58\xdc\xb7\xe9\xdb\
+\x78\x2e\xc4\x87\x92\x41\x50\x74\xeb\xad\xb7\xbe\x23\xdf\xbd\x3f\
+\x1b\xdd\x87\x46\x60\x78\xa0\xc4\xd9\xe7\x9e\xc6\x95\xcf\x5c\xcf\
+\xe2\x19\x17\x33\xa9\x76\x06\x03\xa4\x91\xde\xce\xa0\xb7\x48\xb9\
+\x8e\xbc\xbb\xbb\x9b\x13\x4f\x3c\x91\xdf\xfc\xe6\x37\x01\x15\xb5\
+\xdc\x4c\x40\x4a\x19\xb4\xf7\xd0\x75\xdd\x8f\xac\xc7\x3e\xaf\x6c\
+\x84\x2b\x8a\x1e\xa5\xb8\x47\xcf\xae\x12\xf1\xad\x16\xff\xf0\xdd\
+\xaf\xfb\xf9\x7b\x05\x46\x46\x46\x0e\x70\xf7\xcb\xc5\xa4\x0a\x82\
+\xf8\x94\x0c\xc7\x9e\x59\xc5\xaf\xfe\x76\x25\x67\xde\x39\x85\x67\
+\xae\x58\xc1\xe6\xce\x0e\x9e\xea\xbd\x91\xad\x8f\x8f\x32\xba\xc9\
+\x37\xde\x86\x61\xb0\x7d\xfb\x76\x1a\x1b\x1b\x3f\x38\x81\x94\x17\
+\x58\x51\x14\x34\x4f\xa2\xea\x02\xd7\xf1\x60\x54\x72\xca\xa5\x87\
+\x93\xeb\xf2\xb0\xf2\x12\x33\xe3\x05\x1c\xa5\x62\xb1\x28\xcb\xb5\
+\xea\x6f\x17\xae\x10\x62\xdf\x0e\x32\x7c\x17\x7a\xff\xbf\xdb\x8e\
+\xcd\xae\xec\xc6\x31\xd6\xbc\x15\xb0\x91\x15\x45\xe1\x5b\xdf\xfa\
+\x16\xd1\x68\x34\x20\xc1\x95\xe7\xdf\xbc\x79\x73\x80\x18\xec\xff\
+\x99\xe5\xfa\x12\xc3\x30\xb8\xfa\xea\xab\x59\xbe\x7c\x39\x83\x2f\
+\x0e\xe2\x7a\x1e\x21\xc7\xa6\xa9\x51\xee\x6b\xed\x37\xa6\xa6\xca\
+\xbd\x7c\xcb\xc1\xad\x22\x05\x52\x08\x6a\xea\x74\xe2\x99\x11\xae\
+\x38\xe9\x46\xfa\xb3\xbb\x18\x49\xa4\x38\x7e\xe2\xd9\xbc\x61\xff\
+\x9c\x32\x85\xab\x6c\x53\xde\x0b\xe9\xe1\x7d\x09\x44\x08\xc1\xb4\
+\x69\xd3\x48\xa5\x52\x0c\xdc\x6b\xd2\x63\x9a\x08\x45\xe2\xe7\x6d\
+\xfd\xc0\x24\xa4\x4a\xa4\x22\xcb\xa4\x69\x31\x30\x30\xb0\x6c\x64\
+\x64\xe4\x94\xb7\xcf\x35\x67\xce\x9c\xb8\x69\x9a\xe3\x84\x10\x60\
+\x40\x4d\x4d\x98\x3d\x7d\x7d\x78\x8e\x82\xa6\xe8\x64\xcd\x24\x4d\
+\x91\x36\x76\xba\x71\x4c\xd3\x0e\xba\xef\xd8\xb6\x4d\x34\x1a\x0d\
+\xd2\xb6\xfb\x7b\x72\x65\xb8\xfb\x80\x93\xe8\x82\x65\xfa\xc4\xed\
+\xab\xae\xba\x0a\x21\x04\x0f\x3e\xf8\x20\xdf\xfe\xf6\xb7\xe9\xea\
+\xea\x62\xe6\xcc\x99\x8c\x8c\x8c\x60\xdb\x36\x4d\x4d\x4d\xbc\xf2\
+\xca\x2b\x84\x42\x21\xc6\x8f\x1f\xcf\xba\x75\xeb\xb0\x6d\xdb\xc7\
+\xe6\x3c\xb0\x2c\x70\xa5\xcd\xb5\x2f\x9e\xc7\xff\x3d\xf5\x29\xee\
+\xdd\xfc\xcf\xf4\xa4\xde\x42\x4b\xa8\x94\x0a\x26\x99\x8c\x79\xc0\
+\x26\x78\x2f\x6c\xc6\xf7\x63\xd4\x39\xf2\xc8\x23\xb9\xec\xb2\xcb\
+\x38\xe2\x88\x23\xb8\xf9\xe6\x9b\xe9\xec\xec\xa4\xa6\xa6\x86\x91\
+\x91\x11\x74\xdd\x6f\x2e\x39\x38\x38\x88\xae\xeb\x68\x9a\xc6\xe0\
+\xe0\x20\xe9\x74\xda\xfb\x63\x89\xa3\x52\xa9\xe4\xef\xc8\x2a\xc9\
+\xb8\x71\x95\xfc\x68\xd9\xbf\x70\xd7\xdf\x2d\xe3\x97\x6f\x5c\xcf\
+\x9b\xa9\x2d\x1c\x31\x69\x0e\xae\x37\xc6\x0e\x1c\xb3\x21\x53\xa7\
+\x4e\x0b\xe2\x15\x55\x55\x59\xb1\x62\x05\xcd\xcd\xcd\xef\xea\xeb\
+\xab\x21\x08\xcd\x4d\xd2\xb7\xb2\x48\x21\xe9\xb0\x6b\xd7\x2e\xae\
+\xbc\xf2\x4a\xf6\xee\xdd\x4b\xb1\x58\xa4\xb1\xb1\x91\xca\xca\x4a\
+\x74\x5d\x67\xd9\xb2\x65\xd4\xd5\xd5\xd1\xda\xda\x4a\x4f\x4f\x4f\
+\x50\x4e\x5d\x2c\x16\x83\xb8\xc7\x49\x0b\x92\xfd\x7e\x31\xe9\xbf\
+\x3e\x79\x3e\x15\x46\x98\x6c\xce\x25\xdd\x63\xd2\xb9\x22\x8b\xaa\
+\xa8\x07\x6c\x9a\xb1\xcd\x11\x06\x98\x34\x69\x92\xdd\xdd\xdd\xed\
+\x1e\xb2\x72\x84\xda\xda\xda\x35\x4d\x4d\x4d\xc7\x1d\x2c\xa7\xb6\
+\x3c\x5c\xd7\xa5\xbf\xbf\x7f\xc6\xc8\xc8\xc8\xce\xfd\x7f\x3f\x7d\
+\xfa\xf4\x78\xa9\x54\x1a\xa7\x28\x0a\xc3\x13\x5c\xfe\xf1\x5b\x13\
+\xb1\x2c\x97\x9a\xc2\xb1\x1c\x35\x67\x0a\x4b\x77\xff\x06\x4d\xd3\
+\x58\xf5\x83\x04\xa9\x2e\x5f\x17\x54\x56\x54\xb1\xe8\x96\x2a\x86\
+\xee\x6f\x44\x3a\xbe\x5a\x58\xbb\x76\x2d\xd1\x68\x94\x70\x38\x1c\
+\x30\xef\xcb\x69\x5d\xc7\xb5\x31\xa2\x21\xdc\x92\x0c\x9a\x0b\xec\
+\xcf\x52\xf9\x53\x19\xd2\xe6\xe6\xe6\xfd\xaa\x7a\x64\x90\xb3\xf9\
+\x63\x9b\xb5\xa7\xa7\x87\x6d\xdb\xb6\x21\x84\xa0\xb2\xb2\x32\x28\
+\x8e\x2d\x6f\xbe\xb5\x6b\xd7\x7e\x29\x99\x4c\x3e\x70\x48\x4f\x88\
+\x61\x18\xcc\x98\x31\x03\x80\x7e\x33\xc1\xe4\xb3\xf3\x44\xc2\x1a\
+\xc2\x34\xb0\x87\x42\x38\xc3\x61\x9c\xe1\x03\x1b\x59\x46\x22\x11\
+\xee\xbd\xf7\xde\xf4\xbb\x4d\x59\x26\x97\x85\x73\x50\xca\x78\x0c\
+\x6d\xb1\xe8\xd8\xf3\x0a\xcf\xdf\xb9\x04\xcf\x14\xd8\x79\x0f\xd7\
+\xf4\x8d\xf1\xbe\xbc\xb9\xc0\x76\x1c\xa4\xed\xeb\xfa\x39\x73\xe6\
+\xd0\xda\xda\x4a\x2c\x16\x63\xdb\xb6\x6d\x8c\x8e\x8e\xd2\xd4\xd4\
+\xc4\xd0\xd0\x10\xfd\xfd\xfd\x78\xa6\xaf\xba\x4c\xd3\x0c\xe8\x47\
+\x0a\x02\xc7\x94\xd8\xb2\x84\x42\x08\xcb\x2d\xa1\xab\x1a\x48\x05\
+\x4d\xd5\x28\x95\x8a\x0c\x0d\x0d\x21\x10\xac\x2c\x6d\xe5\x9c\xcb\
+\x62\x28\x52\xe0\x9a\x80\xa5\xfb\xd7\x36\x60\x50\xda\x5d\x81\x97\
+\xf5\xaf\xad\x50\x28\x50\x5b\x5b\x1b\x54\x1b\x47\x8c\x8a\x20\xce\
+\x8a\x46\xa3\x7f\xd6\xe3\x7a\x5f\x02\x29\xe7\xb4\x15\x04\xa3\x5a\
+\x9c\xf9\x2d\x61\x32\xd9\x34\xed\x77\x58\x4c\xac\x99\x82\xeb\x65\
+\x11\x8a\xc0\x72\x1d\x74\x5d\x20\x4d\x0d\x44\x82\xb3\xce\x5c\x3c\
+\x54\xb6\x01\x65\xa3\xd7\xd5\xd5\x45\x28\x14\xe2\xf4\xd3\x4f\x67\
+\xfd\xda\x75\xb4\xdf\xec\x20\x85\x0e\x42\x47\x93\x6e\xd9\xd1\xc6\
+\x88\x2a\x81\x8b\x5c\x66\xa2\x58\xa6\xef\x56\xab\xaa\xca\xc0\xc0\
+\x00\xae\xeb\x52\x59\x59\x49\x26\x93\x09\x58\x1e\x8e\xe3\x10\x0e\
+\x87\x39\xef\xbc\xf3\x48\xa7\xd3\x2c\x5f\xbe\x3c\xc8\x08\x0e\x47\
+\x8b\x9c\x7e\x55\x15\xc7\x1a\x57\xd1\x30\xc5\x64\x51\xeb\x17\xb8\
+\x7f\xc5\x4f\xf9\xf8\x91\x0b\xb9\xf3\xb9\x6f\xd3\xff\x98\x87\xa5\
+\xfa\x0d\xd2\x0a\x58\x18\xba\x42\x23\x47\x72\xfa\x51\xe7\xf0\xe4\
+\xb6\xbb\x50\x9d\x4a\x72\x2d\xbd\x8c\xe4\x25\xa5\xd1\x48\xe0\x31\
+\x1e\x73\xcc\x31\x6c\xdf\xbe\x9d\x7c\xa6\x80\x31\x37\x49\x69\x57\
+\x04\xa1\xec\xf3\x0e\x0f\xa9\x40\xaa\xab\xab\x03\x86\xa0\x82\x00\
+\x4d\x62\x3b\x2e\x7f\x33\xf1\x26\x12\x8d\x77\x05\xbb\x20\xe5\x66\
+\x19\x77\x41\x9c\x71\x0d\x3a\x4e\x1e\xec\xa1\x0a\xdc\x11\x03\x7b\
+\xd0\x40\x16\x55\xdc\xbc\x8a\xa6\x69\x94\x4a\x25\x7e\xf3\x9b\xdf\
+\x00\x70\xc6\x19\x67\xb0\x7c\xf9\x72\x1c\xc7\x21\x1e\x8f\x53\x53\
+\x53\x43\x4f\x4f\x0f\x8b\x16\x2d\x62\x64\x64\x84\x35\x6b\xd6\x10\
+\x8d\x46\xd9\xbb\xa7\x1b\x81\xc0\xb2\x6c\x3c\x9b\x20\x3a\x0e\x87\
+\xc3\xa4\x52\xa9\xe0\x5a\xfb\xfa\xfa\x08\x87\xc3\x58\x96\x45\x22\
+\x91\x60\xca\x94\x29\x81\x6b\x2c\x84\xc0\x0d\xbb\xa8\x8a\xc6\x26\
+\xef\x7e\x2e\x09\xdd\xce\x53\xbb\x7f\xc4\x4e\x6f\x29\x3b\xdf\x78\
+\x0e\x4f\x2a\x7e\x1a\xda\x94\x7e\x4f\x47\x43\x30\x38\x94\xe3\x3b\
+\x17\xdc\xca\xff\x7e\xf6\x0c\xee\xfe\xfc\x12\xf6\xf4\xf7\xf0\x74\
+\xef\xad\x0c\xda\x5d\x81\x0a\xf4\x3c\x8f\x78\x3c\x3e\x86\xe1\x29\
+\x78\x8e\x87\x6b\x9a\x08\x95\x03\x02\xc9\xbf\x98\x4a\x1a\x90\x64\
+\x0d\x23\xd8\x09\x25\xd3\xf4\xdb\x7c\xdb\x06\xe7\x9d\xb8\x98\xbc\
+\x99\x09\xe8\xa1\x23\x4e\x9a\x8a\x50\x08\x33\xab\xb0\x70\xca\xf9\
+\xd4\x4e\xd1\x88\x1e\x95\xa1\xf6\xec\x11\x2a\x4f\x89\x07\xdd\xb1\
+\xcb\x5e\xd0\xc8\xc8\x08\xe1\x70\x18\x45\x51\x98\x33\x67\x0e\x86\
+\x61\x30\x69\xd2\x24\x6c\xdb\x0e\x3a\x44\x9c\x78\xe2\x89\xa4\xd3\
+\xe9\x31\x57\x52\x39\xa0\x4d\xb9\xeb\xba\x41\xcb\xf0\x72\xb3\x9c\
+\x78\x3c\x1e\xd4\x3d\x76\x74\x74\xf0\xec\xb3\xcf\xa2\xaa\x6a\xd0\
+\x81\xa2\x50\x2c\x62\x3b\x16\x28\x36\x77\xb4\x5f\xc6\x70\xb6\x0f\
+\x89\x24\x3f\xe2\xb2\xfe\xde\x38\xae\xb7\xaf\xeb\xb5\xa2\x28\x8c\
+\x0c\x98\xc4\x6a\x42\x28\xaa\x4b\x44\xaf\xa4\xa6\xb2\x86\x78\xae\
+\x2f\x48\x96\x95\x89\x7f\x5d\x5d\x5d\x7e\x73\x4e\x55\x41\xba\xde\
+\x01\x34\xd7\x3f\xe7\x02\xbf\x2f\xb7\xb7\xac\x3a\x04\x7e\xa0\x55\
+\xf6\x2a\xf6\xb5\xff\xb6\x71\x15\x17\x45\x15\x7c\x7a\xd2\x37\xc9\
+\xc8\x5d\x5c\xbf\xe8\x31\x1e\x5d\xfd\x20\xcd\x93\x74\x9e\x58\x71\
+\x5f\x70\x93\xd1\x68\x94\x2b\xaf\xbc\x92\xc9\x93\x27\xd3\xdf\xdf\
+\x8f\xeb\xba\x2c\x5d\xba\x14\xcf\xf3\x68\x6f\x6f\xc7\x71\x9c\x40\
+\x1d\x95\x03\xcb\x90\x66\x04\xf1\x8b\x6b\xf9\x49\xa0\x50\x28\x44\
+\x5d\x5d\x1d\x42\x08\x6a\x6b\x6b\xdf\x76\xc1\x63\x24\x03\x45\x04\
+\xa5\xd0\x9e\xe7\x51\x9d\x51\xe9\x5a\x52\x20\xd7\xed\x62\x65\x3d\
+\xd6\x14\x56\xe2\x14\xc1\xb3\x25\x8a\x2a\x70\x0d\x77\x5f\x5b\x43\
+\x14\x74\x5d\xc1\x19\xe3\x35\x83\xff\xf4\x20\x04\xb8\xae\x87\x69\
+\xfa\xfc\x33\xd7\x71\xa8\x6d\xae\x27\x99\x8f\x13\x8a\x99\x84\x2a\
+\x55\xd2\xb6\xdf\x37\xf2\x60\x4a\x15\xde\x57\xa4\x5e\x5e\x78\x81\
+\xdf\x30\xc0\xf1\x6c\x4a\xa6\x89\xa6\xe8\xfb\x0a\x60\x0c\x0f\x4f\
+\x0a\x5a\xab\x67\xf0\x9b\x3d\xbf\xa0\x2d\x74\x22\xf5\x91\x16\x0c\
+\x25\x83\xf4\x08\x04\x52\x2a\x95\x64\x28\x14\x12\x9d\x9d\x9d\xfb\
+\x47\xef\x52\x08\x21\x5c\xd7\x45\xda\x60\x7b\xde\x98\x43\xa8\x82\
+\x02\x96\x63\x63\x3a\x92\xd1\x91\x04\x72\x8c\x65\x5f\xce\x4c\xe6\
+\xf3\xf9\x75\x1d\x1d\x1d\x0f\xd6\xd7\xd7\xff\x58\xd3\x34\xbf\x0f\
+\x7c\x9d\xc7\xe1\x0b\x2b\xc0\xae\xa2\x32\x57\x45\x75\x75\x35\x97\
+\x5c\x72\x09\xcb\x97\x2f\x67\x78\x70\x18\xc5\xc9\xe1\x86\x5c\x3c\
+\xcd\xc3\x8d\xba\x01\xe4\x51\xde\x78\xca\x58\x43\x9c\xa9\xd3\x6b\
+\xd8\xd1\xb5\x97\xd3\x0f\xfb\x3b\xde\x1c\x5e\x4d\x32\x51\x64\x76\
+\xc3\x09\xbc\xe5\xfc\x01\xcb\xf2\xb3\x86\x85\x7c\x81\x07\x7f\xf9\
+\x30\x3f\x79\xea\xfb\xfc\xcd\x27\x4e\xe5\x67\x8f\xfd\xc4\xcf\x82\
+\xaa\x7c\x30\x27\x44\x4a\xa9\x4a\x29\x65\xa9\x54\x12\x02\x81\xe7\
+\xb9\x54\x44\x15\xfe\xf9\xe1\x8b\x91\x9e\xc0\xb6\x7d\x42\xb6\xa7\
+\xb9\x08\x11\x02\x24\xaa\xe2\x1b\xb3\x91\x54\x9c\x5c\x65\x7f\xa0\
+\x6e\x00\x1a\x1b\x1b\xc5\x1b\x6f\xbc\xf1\x95\x62\xb1\xf8\x10\xe0\
+\x45\xa3\xd1\xeb\xa7\x4d\x9b\xf6\xcd\x64\x32\x89\xa3\x48\xa6\x7f\
+\xa5\x92\xd6\x96\x30\x76\x41\x62\x17\x3d\x52\x9d\x36\x99\x6e\x87\
+\x25\xff\x6c\x07\x5e\xfb\xd8\xb3\xa6\x44\x2c\x16\x43\xd3\xb4\x5d\
+\xf9\x7c\xfe\xce\x96\x96\x96\x1f\x97\x79\x58\x6e\xb5\xa0\xed\xd4\
+\x28\x5a\x58\xf2\xd2\xfa\x7e\x7e\xf6\xfd\x5f\xb1\x77\xef\x5e\x6e\
+\xbf\xfd\x76\x6e\xb8\xe1\x06\x74\x5d\xa7\xbe\xbe\x9e\x62\xb1\xc8\
+\xee\xdd\xbb\x59\xb4\x68\x11\xeb\xd6\xad\x63\xfd\xfa\xf5\xe4\x72\
+\x39\xc4\x98\x47\xa7\xeb\x2a\xdf\x79\xf5\x0b\xdc\x7e\xc1\x0b\x7c\
+\x7f\xcd\x97\xc8\x5a\x09\x14\x5d\x90\xcf\x9a\x64\xb3\x3e\xea\xeb\
+\x58\x2e\x23\x72\x33\x4e\xdd\x56\x96\xed\x4e\x21\x5d\x49\xb1\x54\
+\x44\x28\x3e\x13\xf2\x90\x0b\x64\xd7\xae\x5d\x9f\x6a\x69\x69\x19\
+\x48\xa7\xd3\x7e\x13\xfd\x71\x02\xd3\x89\xe2\xd5\xee\x61\xb4\x90\
+\x25\x22\x6b\x7c\x81\x44\x20\xa4\x84\xe8\x4a\x77\x30\xbf\xfe\x34\
+\x8e\x9e\x3e\x8f\xd7\x77\xbc\xc2\x11\xb1\xa3\x59\xea\x3d\x8f\x65\
+\x39\x41\x8e\x22\x12\x89\xd8\xc5\x62\xb1\x34\xf6\xb3\x13\x0e\x87\
+\x31\x0c\x03\x03\xe8\xff\x95\x43\xbf\x92\x7b\x17\x5a\xab\xbe\x3f\
+\xc5\x55\x64\xb3\xd9\x6d\xbb\x76\xed\xba\x41\xd7\xf5\x37\x01\xb5\
+\x4c\x44\x90\x42\xe2\xb9\x3e\x27\xca\x35\x21\x6a\x84\x79\xfa\xe9\
+\xa7\xb9\xf6\xda\x6b\x79\xe9\xa5\x97\x28\x95\x4a\x44\xa3\x51\xfa\
+\xfb\xfb\x89\xc5\x62\x0c\x0f\x0f\xd3\xd9\xd9\x49\x38\xec\x27\xd7\
+\x4a\xa5\x12\x8a\x50\xb0\x5d\x0f\xc7\xb3\xa9\xab\x37\xb8\xfe\xb5\
+\x4f\xfb\xea\xaf\x4f\x32\xb4\xb9\xc8\x9e\x65\x79\x14\x6d\x8c\x9d\
+\xe8\x29\x24\xf2\x43\xa0\xba\x0c\x15\xf6\xb2\x77\x6d\x9a\x5c\xae\
+\x04\x82\x43\xef\x65\x8d\x31\xef\x06\x03\xd6\x05\x10\xb2\xa0\x98\
+\xf6\x18\x79\xd3\xc4\xca\x7b\xb8\x5e\x0e\xc7\x71\x28\x19\x2e\xb6\
+\x5b\xc1\x92\xa1\x9f\x70\x4e\xe3\xb7\x78\x78\xeb\x2d\xec\x16\x2f\
+\x92\xd8\xbe\x02\x4f\xba\x64\xb3\xd9\x20\x3e\x79\x3b\x95\xa8\xad\
+\xad\x8d\x1b\x6f\xbc\x91\x89\x13\x27\xf2\xcb\x5f\xfe\x92\xae\xae\
+\x2e\xc6\x8f\x1f\xcf\xb6\x6d\xdb\xa8\xaf\xf7\xbb\x33\x74\x75\x75\
+\x61\x18\x06\x91\x48\x84\xae\xae\x2e\x84\x10\x83\x89\x44\xe2\x37\
+\xe5\xb0\xa7\x5c\x60\x34\x61\xc2\x04\xd2\xc3\x69\x5e\xbf\x3e\xe7\
+\xc7\x22\x8a\xca\xcb\x2f\xbf\xcc\x86\x0d\x1b\x82\x16\x1d\xe5\xe8\
+\xbe\xfc\xb5\x9c\xb3\x28\x63\x76\xae\xeb\x52\xdb\xa9\xb1\xe6\xc7\
+\x29\xac\x8c\x87\x53\x92\x38\x79\x89\xf4\x7c\xb7\xa8\xdc\x8b\x45\
+\x51\x14\x8c\x90\xc1\x75\x5f\xf8\x21\x6e\xc1\x8f\x9f\x24\xa0\xee\
+\xc7\x75\x3e\xa4\xd0\xc9\xfe\xf8\x90\xae\xeb\x2c\x5e\xbc\x98\x75\
+\x6b\xd6\xb1\xe9\x66\x0b\x94\x10\x6e\xd1\xc4\x74\x0b\x38\xb6\x43\
+\xa9\x52\xe2\x48\x0b\x43\x53\x79\x76\xe8\x26\x4e\x98\x72\x1a\xf9\
+\x64\x89\x91\xb7\x7a\xd9\xf3\x72\x81\x62\xf1\xdd\x9f\x8a\xe6\xba\
+\x2e\x33\x66\xcc\x20\x1e\x8f\xf3\xc9\x4f\x7e\x92\x19\x33\x66\x90\
+\x4a\xa5\x38\xee\xb8\xe3\x68\x6b\x6b\xa3\xbf\xbf\x9f\x50\x28\x14\
+\xa4\x46\xcb\x4d\x64\xde\x8e\x3a\x94\x69\x3f\xe5\xf4\xf1\xaa\x55\
+\xab\x48\xa5\x52\xbc\xfa\xea\xab\x18\x86\x41\xb1\x58\x0c\xc0\xbf\
+\x72\x92\x69\x2c\x6e\x19\x50\x14\xa5\xcc\x48\x98\xfe\xb9\xcf\x7d\
+\x4e\x39\xf5\xd4\x53\x79\xf8\xe1\x87\xc9\x66\xb3\xe4\xd4\x5c\x60\
+\x43\xcb\x0d\x30\x5d\xd7\x27\x51\x94\x89\xe5\xd5\x4a\x03\x4e\xd8\
+\xc1\x52\x2c\x22\x91\x08\x85\x42\x21\xe8\x6c\x71\x48\xb9\xbd\xfb\
+\x0b\x66\xcd\x9a\x35\x6c\xd8\xb0\x81\x4f\x7d\xea\x53\x6c\xde\xbc\
+\x99\x81\x81\x01\x96\x2e\x5d\x4a\x3e\x9f\xc7\x75\x5c\xa2\x49\x85\
+\xa1\x0d\x16\x85\x3e\x87\xe4\xce\x04\xcf\x75\xdf\x87\xa2\x0b\x14\
+\x15\x14\x6d\x7f\xba\xa6\xfa\x0e\x44\x76\xd5\xaa\x55\x2c\x58\xb0\
+\x80\xdb\x6e\xbb\x8d\xa5\x4b\x97\x22\xa5\xe4\x91\x47\x1e\x21\x9f\
+\xcf\x13\x0e\x87\x83\xee\x0e\xa5\x52\x89\xe5\xcb\x97\xbf\x2b\xd5\
+\xbf\x0c\xb5\x4b\x29\x39\xec\xb0\xc3\x58\xb2\x64\x09\xba\xae\x73\
+\xe2\x89\x27\xb2\x70\xe1\x42\xee\xbd\xf7\x5e\x2a\x2b\x2b\xa9\xaf\
+\xaf\x27\x9f\xcf\xb3\x67\x8f\xdf\x71\x63\xeb\xd6\xad\x57\x27\x12\
+\x89\xc7\x00\x66\xcc\x98\x51\xb8\xe4\x92\x4b\x22\xa3\xa3\xa3\x5c\
+\x7e\xf9\xe5\xdc\x7b\xef\xbd\x9c\x7f\xfe\xf9\xb4\xb7\xb7\x33\x67\
+\xce\x1c\x9e\x7b\xee\x39\x66\xce\x9c\x49\x43\x43\x03\xc9\x64\x92\
+\x55\xab\x56\xd1\xdb\xdb\x1b\xb8\xe7\x1f\xfb\xd8\xc7\x58\xbb\x76\
+\x2d\xbb\x77\xef\xe6\xb0\xc3\x0e\x63\xd7\xae\x5d\x1f\x8c\x40\xca\
+\x5e\x48\x2e\x97\xa3\xa1\xa1\x01\x21\x04\xb3\x66\xcd\xe2\xd5\x57\
+\x5f\xa5\xb1\xb1\x91\xeb\xaf\xbf\x9e\x07\x1f\x7c\x90\xc4\x8e\x04\
+\x8a\x69\x12\x8e\x39\x34\xce\xf6\x4b\xaa\xcb\xcc\xf1\x72\xd3\xe2\
+\x77\xab\x1d\x0f\x87\xc3\xdc\x7c\xf3\xcd\xef\xfa\xd9\x65\x1a\x6b\
+\xb9\x9b\x36\x10\x60\x45\x6f\xbf\xc6\x2b\xae\xb8\x82\x33\xcf\x3c\
+\x93\xe5\xcb\x97\x07\xde\x61\xb9\xe1\x81\x94\x92\xd1\xd1\x51\xf6\
+\xec\xd9\x13\x08\x74\x6c\x9e\xa0\xc2\xa8\xb2\xb2\x52\xbc\xfe\xfa\
+\xeb\x9c\x7b\xee\xb9\xdc\x70\xc3\x0d\x58\x96\xc5\xe6\xcd\x9b\xe9\
+\xea\xea\xa2\xae\xae\x8e\x5c\x2e\xc7\xde\xbd\x7b\xe9\xec\xec\xc4\
+\xb2\x2c\x0a\x85\x02\x52\x4a\x8e\x38\xe2\x08\x1e\x7b\xec\x31\x74\
+\x5d\x27\x1a\x8d\x52\x51\x51\x41\x22\x91\x38\x28\xd4\xf7\x7d\x55\
+\x27\xb6\xb5\xb5\xc9\xa6\xa6\x26\x26\x4f\x9e\xcc\xc0\xc0\x40\xe0\
+\x31\xc5\xe3\x71\x1e\x7c\xf0\x41\xde\x78\xe3\x0d\xbe\xfa\xd5\xaf\
+\x72\xfb\xed\xb7\x33\x38\x38\x48\x24\x12\xa1\xbe\xbe\x9e\x95\x2b\
+\x57\xd2\xdc\xdc\xcc\xae\x5d\xbb\x18\x1d\x1d\xa5\xae\xae\x8e\x81\
+\x81\x01\x76\xef\xde\x7d\x51\x22\x91\xb8\x7f\x6c\x51\x66\x56\x55\
+\x55\xcd\x14\x42\xbc\x97\x4e\x6d\x9e\xeb\xba\x5d\x83\x83\x83\x6f\
+\x96\x6d\xc8\xe1\x87\x1f\x5e\x68\x6e\x6e\x3e\xa0\xcb\xf6\x1f\x2b\
+\x77\xdb\x5f\x0d\x6f\xd8\xb0\xe1\xcb\xc9\x64\xf2\x3e\x80\x13\x4e\
+\x38\xa1\x58\x28\x14\xc2\x65\x0c\x6d\x7f\xd2\xf4\xfe\x5f\xdf\x4e\
+\xa5\x0d\x85\x42\x41\xcc\x54\xee\xef\x55\x6e\x3a\xbd\x65\xcb\x96\
+\x2f\x25\x12\x89\x07\x0e\xb9\xca\xca\x64\x32\x74\x74\x74\x04\x79\
+\xeb\x32\xd7\xf7\xe9\xa7\x9f\xe6\xea\xab\xaf\xe6\xb5\xd7\x5e\x63\
+\xc7\x8e\x1d\x81\x5d\x28\x43\x0a\xa1\x50\x28\xc8\xe2\xbd\xdb\x43\
+\x1c\xb3\xd9\xec\xf6\x6c\x36\xbb\xfd\xfd\x5c\x57\x7d\x7d\x7d\x99\
+\xdd\x61\x0e\x0d\x0d\x2d\xee\xe9\xe9\x79\xaf\x53\xd8\x35\x35\x35\
+\x9b\xcb\x0c\xfe\xe1\xe1\xe1\xe7\xa3\xd1\xa8\x5a\x2c\x16\x8f\x55\
+\x14\x65\x3c\x80\xab\x42\xdd\x14\x8d\xe1\xad\x05\xa4\x2b\x29\xd9\
+\x25\xc2\x5a\x05\x20\xc7\xf0\xbb\x12\x4d\x4d\x4d\x07\x08\x6f\xff\
+\xb6\xeb\x42\x08\xfd\x90\x9f\x90\xfa\xfa\xfa\xdd\xab\x56\xad\x3a\
+\xac\xbd\xbd\x9d\xa3\x8f\x3e\x9a\x27\x9f\x7c\xb2\x8c\xe6\x06\x39\
+\xec\x70\x38\xfc\x0e\xaf\xe2\xdd\x76\xaa\x61\x18\x6c\xdb\xb6\x2d\
+\x38\x21\xff\x2f\x8e\xf1\xe3\xc7\x3f\x1a\x0a\x85\x2e\x04\xc8\x55\
+\x78\x9c\xf1\xcd\x46\x22\x06\xe4\x87\xab\xf8\xfa\x79\xff\xc6\xed\
+\x2b\xaf\x81\x92\xce\xc0\x86\x22\x6f\x3d\x96\xf5\x1f\xb0\xe9\x37\
+\x46\x7b\xa8\xbf\xbf\xff\x8b\xfb\xa9\xc1\xd2\x21\xf5\xb2\xf6\xc3\
+\xb3\xe4\x4d\x37\xdd\xc4\x2d\xb7\xdc\xc2\x4b\x2f\xbd\x44\x6f\x6f\
+\xaf\xff\x28\x87\x74\x1a\x5d\xd7\x83\x27\xcd\x1c\x4c\x72\x3f\x9b\
+\xcd\xfe\xc9\xd6\x1a\xff\x8f\x0c\x25\x70\xf3\x6d\x81\xe7\x49\x4a\
+\x49\x41\x72\x47\x9c\xcb\xbe\x7c\x15\x99\x2e\x2b\xd8\xdb\x46\x24\
+\x14\xe4\xed\x85\x28\x3f\x68\xe3\xe0\x1f\x36\xf9\xbe\x73\xea\xed\
+\xed\xed\x2c\x5e\xbc\x38\x68\x3e\x2c\xa5\xa4\xba\xba\xfa\x8f\x16\
+\x5c\xc6\x62\x31\x76\xee\xdc\x79\x6c\x7f\x7f\xff\x7a\xfe\x9b\x8e\
+\x53\x4e\x39\x85\xae\xae\x2e\xf6\xdc\x99\xc3\x73\x25\x52\x1a\x08\
+\xa9\x53\x5d\x1d\xf1\x0b\x78\xc6\x6c\x46\x39\x3c\xb0\x6d\xfb\x3d\
+\xb7\xbc\x7e\x5f\x02\x31\x4d\xf3\x65\xd7\x75\xb7\x95\xbd\x93\x83\
+\xe9\x10\x94\x4a\xa5\x6c\xcf\xf3\x46\xff\x3b\x0a\x42\x4a\x69\x5e\
+\x72\xc9\x25\x9c\x72\xca\x29\xb4\xb4\xb4\x70\xc7\x1d\x77\x90\x4a\
+\xa5\x68\x68\x68\xa0\xb7\xb7\x97\x9a\x9a\x1a\xda\xda\xda\x58\xb1\
+\x62\x45\x90\xa2\xd8\xb0\x61\x03\xb6\x6d\xaf\xfb\xc0\x05\x52\x5d\
+\x5d\xcd\xf0\xf0\xf0\x65\xc3\xc3\xc3\xfc\xff\x68\xc8\x32\x0e\x15\
+\x0e\xfb\x7d\x80\xcb\x7d\xbd\xa6\x4c\x99\xc2\xe6\xcd\x9b\x99\x30\
+\x61\x02\x53\xa7\x4e\xa5\xa7\xa7\x87\xee\xee\xee\x32\xb9\xc1\xfe\
+\xc0\x05\x72\x28\xdb\x6a\xff\x77\x19\x9a\xa6\x71\xff\xfd\xf7\xf3\
+\xc2\x0b\x2f\x90\xcd\x66\x83\xb8\xa5\x1c\x78\x4a\x29\xe9\xee\xee\
+\x0e\xbe\xf7\x3c\xef\x7d\x37\xe8\xd7\xf8\x68\xfc\xd9\xe1\x38\x4e\
+\xc8\x30\x0c\xd2\xe9\xf4\x01\x1e\xe2\x9f\x8a\x69\xc6\x82\xe7\xf7\
+\xec\xad\x88\x8f\x96\xfb\xcf\x8f\x48\x24\xd2\x54\x2a\x95\xaa\xde\
+\xe3\xba\xba\x75\x75\x75\x83\xa3\xa3\xa3\x85\x8f\x56\xf0\xa3\xf1\
+\xd1\xf8\x68\x7c\x34\x3e\x1a\x1f\x8d\x8f\xc6\x47\xe3\xa3\xf1\xd1\
+\x38\x60\xfc\x7f\xa7\x8c\x4b\xc9\xd0\xc3\x6c\x1c\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x1a\x78\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x64\x00\x00\x00\x69\x08\x06\x00\x00\x00\xcc\x7c\x86\x8a\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x88\x26\x00\x00\x88\x26\x01\
+\xac\x91\x9d\x06\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\
+\x0e\x04\x3a\x04\x0e\x03\xc5\x00\x00\x19\xf8\x49\x44\x41\x54\x78\
+\xda\xed\x9d\x7b\x74\x54\xf5\xbd\xe8\x3f\xbf\xbd\x67\xcf\x64\x92\
+\x0c\x79\x12\xc2\x23\x01\x4a\x28\x8f\x4a\x90\xa2\x16\x6b\xc3\xa9\
+\xa0\x02\xf5\xd4\x2e\xbd\xda\x2e\x5b\xee\xa5\x85\x7a\xb4\x75\xf5\
+\xae\x16\xef\x83\xf6\xf6\x9c\x73\x5b\xd0\x7a\x7b\xaf\x4b\xaf\xbd\
+\xb4\x97\xd5\x7a\x3d\x2a\xb7\xd6\x1e\x3d\xe7\xd4\x5a\xa1\x2a\x78\
+\x05\x0f\x4a\x00\x51\x08\xa4\x09\xaf\xc8\x23\x04\xf2\x9a\x24\x33\
+\x99\xcc\xec\xc7\xef\xfe\x31\xcc\x66\x1e\x7b\x87\x09\x4c\x12\x70\
+\xe5\x3b\x6b\xaf\x64\xf6\xfe\xfd\x7e\xfb\xf7\xfb\xbe\xbf\xdf\xdf\
+\x63\x04\x40\x65\x65\x65\x9d\x10\x62\x07\x63\x30\xea\xa0\x00\xaa\
+\x65\x59\xda\x18\x2a\xae\x0e\xf0\x00\x85\xa6\x69\x16\xaa\xaa\x0a\
+\x80\x94\x12\xcb\xb2\xc6\x30\x33\x42\x20\x84\x40\x51\x94\x14\x82\
+\x94\x1b\x86\x51\xe6\xf5\x7a\x01\xc8\xcf\xcf\x67\xe5\xca\x95\x63\
+\x98\x1a\x21\xd8\xbf\x7f\x3f\x7b\xf7\xee\x4d\x21\xc8\x44\xc3\x30\
+\x2a\xd3\x0b\x9a\xa6\x89\xae\xeb\x63\x18\x1b\x46\xc9\xf0\xf9\x7c\
+\x08\x21\x32\x54\xd6\xf8\x0b\x97\x0d\x52\x4a\xfa\xfb\xfb\x69\x6b\
+\x6b\x1b\xc3\xdc\x30\x41\x5e\x5e\x1e\x53\xa6\x4c\x41\x4a\x99\x41\
+\x90\x80\x65\x59\x81\xf4\x0a\xc3\x65\x4b\x84\x10\x28\x28\x08\x40\
+\x20\x88\x19\x26\x31\xcb\x40\xf5\x9b\xf1\x3b\x31\x0f\xaa\xa5\x82\
+\x00\xa1\x48\x10\x20\x91\x9f\x38\x82\xa4\x13\x22\x99\x20\x5e\x21\
+\x84\xe6\x54\x30\x5d\x9c\x72\x01\x41\xa3\x8f\x93\xfa\x39\xba\x8d\
+\x10\x03\x32\xc6\x67\x6e\xc8\x67\x76\x6d\x01\x49\x76\x8d\xfe\x1e\
+\x89\x6c\xcf\x27\x76\xce\x87\xd5\xee\xc7\x33\x90\x17\x27\x90\xdd\
+\xb1\x4f\x36\x41\x14\xcb\xb2\xd4\x64\x22\x58\x96\x95\x53\x09\x11\
+\x40\x8f\x19\xa6\x61\xe0\x04\x1d\x66\x0f\x42\x2a\x4c\x9d\x9e\xc7\
+\x8a\xa5\x65\xe4\xe5\x29\x98\x26\x48\x09\xe2\x82\x34\x14\x94\x0a\
+\x28\xeb\x47\xcc\x09\x83\x02\xb1\x01\x89\xec\xd3\x30\x7a\x35\x64\
+\x9f\x86\x19\xf2\x60\x85\x34\xac\xb0\x07\x2b\xa4\xa2\xe8\x9a\x2d\
+\x4d\xf1\x4b\x5e\x13\x04\x49\xe0\x39\x9d\x20\xc2\x49\x12\xdc\x28\
+\x78\x39\x10\xb2\x22\xfc\x6b\x7f\x03\x52\x4a\x54\xa9\x52\x31\xc9\
+\xcb\x17\xbf\x54\x8a\xb4\xc0\x30\x24\x42\x08\x12\x5d\x10\x71\x1d\
+\x05\x52\x20\x11\x60\x48\x34\x55\x81\x62\x13\x6f\xb1\x09\x0c\x10\
+\xef\xda\x85\x72\xc0\x40\x48\x62\x9c\xcf\xc3\x68\xf7\xa1\xb7\xf9\
+\xf0\x84\xf3\x6d\x4e\x10\x57\xa9\x44\x0d\x26\x21\xae\x94\xcb\x85\
+\x84\x18\xd2\x64\x57\xff\xa1\x0b\x12\x20\xf0\xe5\x09\x6e\xbb\xab\
+\x0c\x69\x65\xa9\x16\xed\xe7\xc2\xf1\x96\x04\xfc\x45\x02\x8a\x07\
+\x10\xb3\x07\x40\x01\x3d\x66\x61\xf6\x7a\xb0\x7a\xbd\x18\xbd\x2a\
+\xb2\xcf\x8b\x19\x56\x91\x21\x0f\x46\x48\x41\x89\x7a\x11\x42\xc6\
+\xc3\xe2\x51\x92\xa8\xc1\x24\xc4\xb5\x42\x2e\xa4\xe4\xa4\x7e\x0e\
+\x43\x9a\x28\x17\xb0\x58\x33\xb7\x00\x45\x11\xc8\x1c\x31\xae\xdd\
+\x86\x14\x48\x13\xa4\x09\x1e\xa1\xe0\x29\x92\x50\x14\xbd\x30\x96\
+\xfe\x14\x89\xd2\xa3\x92\x81\x36\x0d\xeb\x9c\x9f\x48\x9b\x07\x4f\
+\x77\xbe\xad\xee\x46\x4a\xa2\xb2\x96\x90\x64\x62\xe4\x82\x20\xed\
+\x46\x4f\x8a\x14\x54\x4e\xf6\x0e\xab\x5d\x16\x4e\xff\x25\x4b\x94\
+\x94\x78\xfd\x02\xef\x0c\x1d\x51\xa3\x53\xa2\x48\x4c\xab\x83\x58\
+\x8f\x02\x3d\x5e\x62\x3d\x2a\xf4\x7a\x31\xc2\x0a\x84\x35\x62\x21\
+\x81\x12\xd1\x10\x6a\x6e\x25\xc9\x0d\xbf\xc3\x4e\x90\x90\x8c\xa4\
+\x7c\x2f\x2c\x52\x47\x3d\x20\x03\xc0\x8a\x4b\xa9\x34\x40\x11\x0a\
+\x79\x85\x12\x0a\x63\xe4\x4d\x06\x49\x04\x64\xc2\x96\x81\x65\x40\
+\xd7\x9f\x4b\x90\x5d\x79\x39\x27\x48\x56\x2a\x2b\x97\x04\x31\x30\
+\xe3\x86\xfa\x02\xf8\x7c\xa3\x4b\x10\x57\x02\xa5\xcb\x56\xc2\x63\
+\x93\xa0\xfa\x40\xd1\xc0\x90\x72\xe4\x09\x92\x4b\xef\x8a\xf8\x78\
+\x6c\xfb\x01\xa0\x88\x6b\x2c\x8c\x10\x49\x03\x19\x01\x18\x54\x42\
+\xc6\xb2\xbe\xc3\x97\xb9\x18\x92\x0d\xc9\xb5\xa4\x64\xb6\x25\x87\
+\x50\xf7\x82\x5a\x11\xf1\x7a\x71\xc4\x48\x5b\xdd\x08\x2e\xc6\x30\
+\xc3\x4a\x90\x1c\x8b\xc8\x90\xbc\xac\x04\x27\xe4\x82\x23\x84\x88\
+\x1b\xcd\x54\x50\xb2\xaa\xab\xa8\xd0\xd5\xae\x73\xea\x64\x1f\x35\
+\x15\x73\xb8\x61\xc6\x4d\x54\x96\x4e\x60\x7a\xe5\xa7\x50\x15\xe8\
+\xec\x6f\xe3\x64\xf0\x2f\xb4\x85\x3e\xe6\x78\x77\x03\x8a\x50\x1d\
+\xde\x95\x33\x0c\xe6\x5c\x42\x86\x1c\x87\x0c\xb7\x63\x7a\x29\xc9\
+\x78\xfb\x4f\xdd\xf4\xb4\xc3\xab\x3f\xfb\xbf\xcc\x9f\x3e\x1f\x8f\
+\xea\x71\xec\xa7\x29\x0d\xce\xf4\x1e\xe5\xd7\x7b\xff\x96\xf3\xa1\
+\x93\xa8\x8a\x73\xb9\x44\x46\xc0\x92\x56\x5c\xf2\x10\x59\xe7\xeb\
+\xe4\x30\xa8\x40\x27\x3c\x2b\xd9\x78\x01\x57\x72\x5d\x0e\xc4\x06\
+\x2c\x5e\x7d\xb1\x0d\x2d\x56\xc6\x47\xcf\xec\x60\x61\xcd\x42\x54\
+\x45\x75\xf5\x92\x3c\x8a\xc6\xd4\xe2\x39\x6c\xb8\xed\x65\x6e\xfd\
+\xd4\x7d\x18\x96\xee\x58\x2e\xd4\x6b\xb0\xed\x4f\xed\x4c\xb6\xea\
+\xb8\xbf\x76\x2d\x4b\x3e\xf5\x55\xe6\x8c\xff\x5c\xd6\x0c\x92\x2b\
+\x9c\x0c\x86\x97\x61\x77\x7b\x11\x82\xf4\x66\x06\x6b\xd7\xb2\xe0\
+\xf5\x7f\xec\x24\xe0\x2f\xe5\xfd\x5f\xbe\x89\xdf\xeb\xcf\x2a\xc5\
+\x92\x90\x80\xfb\x6b\xff\x23\xc5\x79\x15\xfc\x63\xc3\xff\xc4\xab\
+\xfa\xec\xe7\xaa\x47\xd0\x72\x64\x80\xe6\xc3\x3d\xdc\xff\xf7\x7f\
+\x43\xcd\xc4\x99\x00\xb4\x74\x1f\xe6\xf0\xf9\xf7\xb3\xa0\x88\x95\
+\x53\xad\xe1\xa4\xae\x06\x55\x59\xb9\xf3\xf3\xe3\xae\x6e\x32\xa7\
+\x2a\x8a\x3b\x72\x0f\x7f\xd0\x47\xa4\xdf\xe4\xe7\x0f\x3e\x62\x13\
+\x23\x1d\xa2\x46\x84\xf7\xff\xb2\x1b\x4d\xf8\xb9\x61\xd6\x02\xbc\
+\x1e\x6f\x0a\x61\x56\x7c\x7a\x15\x4d\x1d\x7b\x69\xee\xfc\xe0\x22\
+\x41\x54\xc1\xc9\x63\x03\x54\x56\x94\x50\x33\x71\xa6\x4d\x40\x04\
+\x29\x73\xda\x57\xaa\x6a\x73\xee\xf6\xe6\x42\xe5\x5c\xb6\x1f\x23\
+\x05\x87\x3f\x0c\x51\x5e\x12\xe0\xdf\xde\x76\xbf\x63\xa9\x73\xa1\
+\x53\xfc\xb7\x9d\xab\xe9\xe9\x0b\xb3\xf5\xe5\x4e\xaa\x27\x54\xf1\
+\xde\x2f\xde\xca\x08\xf4\xfe\xcd\x67\xfe\x3d\x8f\xbd\xb3\xca\xfe\
+\x1e\x09\x5b\xf4\xf5\x98\xdc\x3c\x6f\x61\x76\x49\xcd\x61\xca\xed\
+\x5d\x4a\x0b\x29\x83\x89\x93\x65\x59\x57\x7c\x25\x5c\xc6\xc4\x27\
+\xfd\x7b\xe2\xa3\xa8\x82\x86\x7d\x7d\x74\xf7\x84\xf9\xdf\x8f\x3c\
+\xe1\x6a\x04\x5f\xf8\xf0\x51\x22\x46\x98\xbc\x7c\xc1\xed\x77\x97\
+\x70\xf0\x48\x13\x77\xfe\xf8\xde\x0c\x04\x57\x15\xcd\xa4\xa6\x74\
+\x3e\xa6\x65\x20\x91\x74\x77\xe8\x48\x24\xd7\xd7\x5c\xe7\xe8\xd2\
+\x5e\xf2\x93\x23\x7c\x24\x2e\x37\x2f\x4b\x71\x32\x7e\xb9\xe4\x06\
+\x91\xf6\x71\xba\x27\x10\x28\x42\xa1\xf9\x60\x3f\x15\xe5\x45\x2c\
+\xb9\x7e\x89\xa3\x51\xee\x8e\x9c\xa3\xb1\xbd\x1e\x81\x40\x5a\x50\
+\x50\xa8\x32\x73\xf6\x38\xde\xfb\x70\x3f\xef\x37\xd6\x67\xd4\x59\
+\xb3\xf0\xa7\x58\xc4\xd0\x54\x85\x73\x6d\x61\xf4\x98\xc1\xbc\x4f\
+\xcd\xc9\x70\x9f\x84\x14\x5c\xea\x93\x6b\x37\x2b\xeb\xc0\x30\xd9\
+\x1d\xcb\xdd\x8c\xa1\xc8\x20\x51\x3a\x74\xb4\xc5\xd0\x63\xb0\xe2\
+\xe6\xbf\x72\x8d\x25\xde\x39\xf1\x4f\xa8\xc2\x13\xaf\x7f\xa1\x89\
+\x09\x93\x7d\x9c\x3c\x16\xe5\x9d\x8f\xfe\x95\x45\x73\x6e\x4a\x19\
+\x47\xb1\x7f\x3c\x4d\x3b\x4b\x68\x3a\x76\x8a\xed\xbf\x78\x99\xfe\
+\xaf\xc7\x98\x33\x25\x95\x20\x01\x5f\x09\x9f\xab\x5a\xce\x80\x11\
+\x41\x37\x23\xb4\x87\x5b\xe9\xe8\x3f\xe3\x28\x45\xb9\x8e\x43\x46\
+\xc7\xcb\xca\x12\xba\xda\x75\x84\x80\x05\x33\xe7\xb9\x96\x69\xee\
+\xfc\x00\x55\xa4\xba\xbf\x25\x65\xf1\xe5\x00\x07\x8e\x35\x38\x26\
+\x0d\xe7\x55\xcd\xa7\xe1\x2f\x1f\x33\xa9\x64\x32\x25\x53\xca\x33\
+\xda\x2c\xcb\x9f\xc8\xaa\x05\x7f\x1b\x4f\xec\x4a\x8b\xff\x77\xe2\
+\x65\x5e\x39\xf4\xf4\xd5\x65\x43\x86\x23\x0f\x94\xfa\x72\x99\x71\
+\x85\x7a\x4d\xa4\x94\x54\x55\x4c\x74\x6d\xe7\x74\x4f\x33\x42\x28\
+\x29\xf5\x0a\x02\x2a\x52\x4a\xce\x76\xb6\x3b\xd6\x99\x3b\xf5\x33\
+\x59\x05\x76\x82\x78\x46\x41\x49\x6b\xff\xe2\x75\x15\x24\x17\x73\
+\xc1\x11\x8a\x48\x55\x51\xc2\xc5\x7d\x0c\xf7\x59\x08\x21\xa8\x99\
+\x3c\xd3\xb5\x2d\xc3\x32\x33\x8c\xb7\x3f\x5f\x41\x08\x41\x6b\xc7\
+\x19\xc7\x3a\xd3\x26\x4d\xc6\x32\xa1\xc0\xe7\x4f\x89\x57\x06\x57\
+\xaf\xc2\xd9\xf0\xcb\x51\x9a\xa0\x4a\xcf\x69\x5d\x79\x2c\x22\x2e\
+\xe9\xd3\x87\x43\x71\x64\x57\x96\x95\x39\x47\xef\x66\xd4\x11\x91\
+\xaa\x27\x9e\xfe\x08\x47\x23\xce\x12\x32\xb3\x9a\xaf\xfd\x4d\x25\
+\x13\xef\x9b\x45\x59\x51\x11\x47\xfe\xe1\x50\xaa\x1b\xdd\x77\x8a\
+\x7f\x3e\xf8\x0c\x9a\xe2\xa3\xc0\x57\x48\x47\xf4\x63\x67\x82\x58\
+\x57\x81\x0d\x19\x49\xd0\x63\xf1\xc1\x96\x14\x16\x3b\x3f\x37\x07\
+\x5c\x93\x4c\x9a\x4f\x10\x89\x39\x3f\x2f\xce\x1b\x8f\xc7\xa3\x90\
+\xe7\xc9\xc7\x32\x32\x35\x74\xc4\xe8\xe3\x40\xc7\x9b\xa9\x32\xe2\
+\xb4\x0a\x67\xd8\xd5\xf8\x20\x5e\x56\x6e\xd7\x65\x65\x17\x80\x99\
+\x46\xbc\x63\xf9\xde\x80\xab\x84\xb8\x81\xd7\xab\x10\xee\x77\x5e\
+\x87\xec\x55\xf3\x2e\xa6\x0c\x84\x73\xf7\x44\x36\x19\xe2\xd1\xcc\
+\xf6\x26\x62\x91\x5c\xac\x5c\x8c\xe3\x41\xa4\x7d\x77\x20\x88\x39\
+\x78\xf4\xac\x9b\x51\x57\xd2\xfa\x7c\x0a\xba\x61\x3a\x3e\xd3\x54\
+\xef\xc5\xf5\x73\x0e\xed\x0b\x57\xab\x96\x8d\xea\xcd\xb5\x2a\x1f\
+\x64\x3e\x64\xa4\x67\x0c\x0d\x43\x0e\x3a\xdf\x1e\x1b\x54\x65\x29\
+\x18\xba\x85\x69\x99\x19\x59\x61\x4d\xf1\x5d\x94\x84\x2b\xc8\x47\
+\xe5\x1a\x1f\xc9\x11\xfb\x88\x67\x7b\xb3\x51\xc0\x8a\x10\xf6\x4c\
+\xe0\x50\xb8\x53\x42\xea\xaa\xc7\x61\xe2\xea\x38\x3e\x86\x3f\x52\
+\x57\x46\x42\x34\xb3\x01\x55\x15\xe8\x86\x3b\x07\xda\xb6\xc0\x81\
+\xde\x7a\xcc\x42\x55\xe3\x3b\x91\xd2\x07\x69\x5a\xc6\x05\x0c\x08\
+\x57\x09\x1b\x2d\xc8\x5a\x65\xb9\xcd\x66\x5d\x49\x2e\x2b\xcd\x8a\
+\x3a\xbb\xaf\x03\xee\x8c\xa0\xa9\x3e\xc7\x7a\x08\x81\x11\x13\x68\
+\x9a\xc7\x71\x90\xba\x15\x03\x71\x31\x8b\xe6\x4a\xd5\x51\xca\xf6\
+\x66\x6d\x43\x92\xb3\xb5\x23\x25\x21\x08\x88\x9a\x11\x7c\x6a\xe6\
+\x3c\x88\x6d\x0b\x5c\x5c\x66\xaf\xe6\x71\x71\x06\x62\xb9\x41\x20\
+\x16\xb9\x44\x47\xd6\xd9\xde\x5c\x4a\x87\x9b\x4d\x72\x4a\x6f\xfb\
+\xfc\x71\x75\x73\xae\xfb\xbc\x8b\xca\xf2\x39\xd6\x13\x02\x62\x31\
+\x49\x9e\xe6\x75\xce\x00\xc4\x82\x17\xd3\xfe\xd2\x0d\xd9\x97\xfe\
+\x0c\x47\xb6\x77\x48\x81\x61\xee\x88\x92\x39\x43\xa8\x38\x98\xae\
+\xfc\x02\x15\x45\x51\xe8\xea\x09\x52\x5d\x3e\xd5\x51\x65\x09\xe9\
+\x10\xb4\x49\xe2\xa9\x91\x7c\x67\x1b\xd3\x1b\xed\x8e\xef\xd8\x12\
+\x02\xb7\x89\x41\x25\x8b\x94\x9e\xcc\xf1\x14\xee\x90\x92\x8b\x39\
+\x9d\x0f\x11\xd9\x39\x0c\xfe\xfc\xb8\xbb\xda\xda\xd9\x36\x88\x1d\
+\xf1\x66\x1a\x6d\x23\xfe\x8e\xc2\xbc\x80\x0b\x41\x3a\x93\xe2\x53\
+\x71\x45\x4a\x2b\xd7\x30\x6a\xb9\xac\x6c\xa0\x70\x5c\x9c\x20\xc7\
+\x5b\x5b\x5c\xcb\x54\x17\xcf\xe2\x48\xc7\x47\x29\x29\xf8\x70\x28\
+\x1e\x10\x56\x8f\x9f\xe2\x58\xa7\x2d\xd4\x92\x23\xe4\x31\xba\xb9\
+\x2c\xb7\x55\x11\x97\x3d\x9a\x34\x9d\x9d\x0e\x25\xe5\x1a\x48\xc9\
+\xfe\xa3\x07\x5c\x9b\x99\x51\x32\x9f\xa6\xf6\x0f\x52\x54\x4c\x7f\
+\xc8\x02\x29\x19\x5f\x52\xea\x58\xe7\x6c\xdf\x09\xdb\x06\x38\x8e\
+\x27\xcb\x4d\xa5\x72\x98\x56\x9d\x64\x6d\xd4\x73\x16\x8b\x08\x01\
+\x8a\x62\x5f\x82\xf8\x2e\xdc\xf4\x4f\x69\xb9\x06\x8a\xc2\xa1\x13\
+\xcd\xae\x1c\xf4\xb9\xaa\xe5\x58\xd2\x4c\xa9\x17\xec\x34\x40\x51\
+\x58\x38\x6b\x81\xe3\x38\x4e\x06\x9b\xe2\x04\x54\x04\xc2\x61\xb5\
+\x8b\xa6\xe6\xa1\xc8\xe4\x16\x9d\xfb\x37\x12\x69\x93\x41\x6d\x48\
+\x32\x05\x47\x62\xa1\x9c\xd7\x27\x98\x32\xcd\xc7\xc1\xa3\xcd\x1c\
+\x3d\xdb\x9c\xd1\x61\x29\x25\x13\x0a\xab\xa9\x2c\x9c\x9a\x82\xf0\
+\xf3\xad\x31\x2c\xcb\xa2\xae\xf6\x73\x19\x03\x6e\x09\x1e\xe6\x7c\
+\xe8\x54\xdc\xad\x56\x04\xb1\x68\x66\x02\x72\x42\x41\x15\xba\x15\
+\x45\x37\x74\x4e\x9f\xee\xa3\x37\xe8\x9c\x13\x93\x96\xcc\xe9\x42\
+\xb9\xac\x25\xc4\x2d\x1e\xb9\xa2\x55\x27\xe9\x04\x72\x98\x90\x33\
+\x0d\x58\xb0\x28\x80\x47\xd5\xf8\xbb\xff\xf3\xb8\x2b\x47\xdd\x32\
+\xf5\x2e\x4c\xcb\x44\x51\x05\xbd\x41\x83\xa3\xcd\xbd\x2c\xbd\x71\
+\x11\xb5\xd3\x6b\x33\xea\xbc\xd6\xf8\x1b\x3c\x8a\x06\x12\xbc\x3e\
+\x85\x48\x34\x13\xd9\xaa\xe2\xe1\x3f\xd7\x3d\xcb\xd4\xe8\xdd\xac\
+\xb9\xfe\x67\xac\xff\xeb\x67\x1d\xfb\x37\x1c\xab\x4e\xb2\xb6\x21\
+\x09\x24\xe6\x26\xdb\xeb\xb0\x3a\x5d\x38\xc7\x02\xf9\x85\x2a\x53\
+\xa7\x17\xb0\x6d\xdf\x7b\x1c\x6d\x3d\x4a\xcd\xa4\x9a\x8c\x72\x77\
+\xd4\xac\xa4\xab\xff\x2c\xbf\xdd\xf9\x02\x3b\xdf\xe8\xe3\xcb\x75\
+\xb7\xf3\xcc\x7f\xf8\x5f\x19\xe5\x4e\x74\x1f\xa2\xa9\x73\x9f\xbd\
+\xce\xb7\xb8\xd4\x43\x4f\xb7\x41\xd3\xe9\x26\x66\x4d\x99\x95\x32\
+\xce\x69\xa5\xb3\x59\xf7\xb5\xd9\x00\x9c\xea\x69\x1a\x24\xa0\x1f\
+\xfe\x94\x92\x32\x98\x77\x95\x2b\x09\x89\x13\x45\x5c\xdc\x56\xe0\
+\x70\xd9\x8b\x12\x6e\x28\x04\x09\x3f\xfb\xed\x53\xae\xb6\xe4\xfe\
+\xf9\xff\x89\x8d\x5f\x7b\x9d\xc3\xcf\xed\x64\xf3\x0f\x7f\x8d\x4f\
+\xf3\x65\x38\x0c\x6f\x1c\x7d\x21\xe5\x7d\x53\x6b\xf2\x40\xc2\x3f\
+\xed\x7c\x6d\x50\x5b\x29\x50\x1c\xfb\x97\x58\x75\x32\xe2\xeb\xb2\
+\x46\xc3\xe5\x4d\x86\xf2\x4a\x8d\x1b\x6e\x19\xc7\x2b\xdb\xff\xcc\
+\xaf\xfe\xb4\x29\x13\x61\x17\xbe\x57\x8f\xaf\x62\x52\x49\x55\xc6\
+\x80\x04\x82\x57\x0e\xfd\x82\x03\x6d\xef\xa6\xdc\x9f\x54\xed\xe3\
+\xc6\xc5\xe3\x78\xea\xa5\x67\xf8\xf5\x96\xe7\x1c\x6d\xd4\xbb\x2d\
+\x7f\xe0\xf9\x0f\x1f\xcd\xc6\x51\xcc\x99\xdb\x9b\x55\xfa\x3d\x97\
+\xfb\x43\x86\xec\x0e\x9a\x92\x9a\xb9\x7e\x06\x06\x8a\xf9\x2f\x9b\
+\xfe\x3b\x05\xbe\x00\xff\xee\xb6\xfb\x5d\x83\xba\x64\xc4\x1a\x96\
+\xce\x96\xe6\x7f\x60\xdb\xf1\xdf\xc5\x6d\x47\xca\x98\x24\x33\x66\
+\xfb\x99\x3e\xd3\xcf\x96\x8f\x7f\xc1\x9f\x36\x6e\xe4\xf3\x73\x6f\
+\xa4\xbc\xa8\x9c\x96\xee\xc3\x9c\xed\x6b\xc1\xa3\x78\xf0\x28\x5e\
+\x67\xd5\x34\x4c\x33\x86\x23\x1e\x87\x88\xcb\xb0\x39\x52\xc2\xdc\
+\xeb\xf3\x99\x5c\xed\xe3\xd1\x17\x1f\xe7\xb7\x6f\xfc\x0b\xcf\xae\
+\x7b\x8a\x89\xa5\x93\x5c\xeb\xed\x6f\x7d\x9b\xd7\x9b\x9f\xe5\x6c\
+\xa8\x25\x83\x18\xc9\xed\x0a\x05\xa6\x54\x15\x02\x92\x93\xe1\x83\
+\x9c\x0c\x4b\x04\xf1\x39\xf7\xc1\x6c\x84\x35\x42\xab\x4e\x94\x6c\
+\xf3\x2d\x23\xb9\x3f\x24\x81\xc0\xe2\x32\x0f\x7f\xfd\xb5\x32\x2a\
+\xae\x3b\xc3\xc2\x87\x3f\xcf\xb2\x75\x77\xd3\xda\x75\xd6\xb1\xfc\
+\xef\x0e\x3e\xc1\xb9\xf0\xc9\x21\xec\xa0\x12\x17\xd6\x61\xa9\x17\
+\xed\xdb\x10\x82\xdb\x2b\xc5\x99\x5b\xc4\x7e\xc9\x19\x43\xd3\x34\
+\x87\x1c\xfe\xa7\xa4\xbf\x0d\x23\x65\xbf\xbd\x69\x19\x08\x4b\xb8\
+\xe7\x8b\x64\x6a\xe6\xc8\x30\xa1\xb0\x04\x66\xce\x2e\x66\xf7\x9e\
+\x8f\x78\x63\xef\x36\xbe\x79\x47\xe6\x89\x77\x9f\xa9\x58\xc4\xfb\
+\xa7\x5e\xbf\x44\xe6\x49\x66\x9d\xaa\x92\x69\x37\x23\xfd\x11\xfa\
+\xfb\x8d\xdc\x79\x53\x8a\x92\xbd\xca\xb2\x2c\x0b\x5d\xd7\x09\x87\
+\xc3\x57\x2c\xa6\x51\xdd\x40\x58\xa9\xf3\x13\xf2\x32\xdc\xc7\x92\
+\xf1\x60\x18\x06\xef\x35\xec\xe5\x9b\x77\xac\x8c\xa7\xde\x93\x14\
+\xe2\x8a\x4f\x7f\x93\xe6\x8e\x0f\xe8\x8b\x06\x31\xa4\x8e\x31\xc8\
+\x2a\x95\x6c\x74\x6b\xfa\x84\x56\xb4\xdf\xc0\x30\x72\x47\x10\xc3\
+\x30\x18\x18\x18\xc8\x38\xb5\xcf\x51\xbe\x63\xb1\x18\xb1\x58\x2c\
+\x67\x36\x24\xd9\xed\x4d\xec\xeb\x1b\xea\x35\xb1\xca\x87\xd7\xab\
+\xf0\xcf\x17\xdc\xd6\x74\x8e\x1e\x5f\x30\x85\xbf\xbb\xf5\xb7\xfc\
+\xd7\x25\xbf\xe3\xce\x4f\xaf\xc6\xb0\x62\x43\x7b\x47\xc6\x2a\x7d\
+\x71\x31\x1e\x53\xa0\xaf\x2d\x77\xc4\x18\x72\x1c\x62\x9a\x66\x4e\
+\xf7\x87\xe4\x2a\x3f\x79\xcb\xed\xc5\xb4\x77\xf5\xf1\xf7\x2f\x6c\
+\x70\xd4\xf9\x5e\x4f\x1e\x25\xf9\x15\x14\xfa\x8a\x73\xb6\x8d\x59\
+\x51\x05\x67\x0f\x45\x31\x42\x66\x4e\xe3\x10\xb7\x88\x5d\x19\x2e\
+\x63\x6e\x1b\xaf\x1c\x05\xb7\x96\x25\x99\x54\xed\xa3\xf6\xb3\x25\
+\xfc\x8f\xcd\x9b\x78\x6b\xff\xf6\xac\xed\xd8\x15\x31\x82\x80\xc3\
+\x2f\xf6\xa2\x78\x73\x8b\x97\xcb\xf2\xb2\xae\x26\x48\x48\xc4\xe7\
+\x97\x14\x31\x77\x41\x80\x6f\x3c\xb6\x9a\x97\x77\xbd\x44\x7b\xef\
+\x79\x42\x03\xbd\xe8\x66\x94\xa8\x11\x21\xa2\x87\xe9\x8f\xf5\x72\
+\xa5\x9c\x90\x60\xa6\x13\x6f\xf7\x13\x0b\x9a\x23\x36\x4e\x8f\x7b\
+\xfe\x49\xe4\x26\x77\x93\x63\x0e\xb6\x2c\x58\x78\x4b\x80\x79\x0b\
+\x0b\xf8\x7d\xf3\x63\xfc\xf9\xf4\x46\x4a\x03\x25\xf8\x7d\x7e\x4c\
+\xcb\x24\x66\x46\x08\xc7\x7a\xd1\x14\xef\x15\xbd\x47\xf3\x2b\x9c\
+\xd8\xd5\xcf\x91\x7f\x09\x0d\x4b\x0e\xcb\x0d\xbf\x1e\xae\x41\x90\
+\x16\x68\x5e\x85\x12\x6f\x1e\x10\x25\x18\x6b\x23\x18\xbb\xcc\x44\
+\xe0\x85\x55\x49\x52\x82\x11\x95\x98\x31\x0b\x23\x22\x39\xb6\xbd\
+\x9f\x33\x3b\x22\xa8\x9a\x18\x56\x89\x77\x3a\xb7\x77\x78\x25\xe4\
+\x6a\x52\x7b\x0a\x08\x35\x6e\xa8\x0d\x43\xd2\x73\x46\xa7\xb7\xc5\
+\xa0\xe7\xb4\x4e\xff\x19\x13\xbd\x5f\xa2\xf7\x5b\xc4\xfa\x2c\xa4\
+\x89\x4d\x8c\xe1\xc2\x43\x62\x0d\xf5\x35\x2f\x21\xd9\xc6\x13\x66\
+\x4c\xda\x57\x34\x64\x11\x3c\x65\xd0\x73\x4c\xa7\xfb\x63\x9d\xc8\
+\x19\x23\xce\x74\x4a\x9c\x50\xe9\xd6\x54\x0c\xb3\x75\x1d\x35\x09\
+\x91\x62\xf8\xce\x98\xb4\x39\x5e\x11\x98\x52\xd2\x7b\xd6\xa0\xaf\
+\xc5\xa0\xe7\x8c\x41\xf8\xb4\x41\x2c\x2c\x31\xc2\x16\xb1\x7e\x89\
+\x19\x89\xaf\xe1\x4a\xa8\x28\x4f\xde\xe8\xfb\x33\x59\xdb\x90\x5c\
+\x8a\x68\x7e\x97\x42\xa4\xd8\xe2\xb2\xd7\x9e\x27\x73\xbc\x2e\xb1\
+\x62\x12\x53\x97\xc4\xfa\x25\xc1\xd3\x3a\xbd\xc7\x0c\xba\x3e\xd6\
+\xe9\x3f\x69\xc6\xc3\x39\x9b\xe3\x45\x4a\xf4\xa8\x5c\x65\xba\xc0\
+\x8d\xe9\x3d\x43\xa5\xe0\x50\x61\xdc\x79\x15\x8f\x2e\xe8\xad\x30\
+\x11\x52\x64\xc5\xf1\x42\x11\x48\x24\xbd\xe7\x4d\x42\x1f\x27\x38\
+\xde\x24\xd6\x67\xd9\x1c\x6f\xf4\x4b\x7b\xa9\x95\x10\xe0\xf1\x89\
+\x1c\xe4\x9a\x47\x1f\x5c\x93\x8b\xb9\x5b\x75\x02\x05\xdd\xf1\xb3\
+\xdc\x43\x65\x16\xc9\x7b\x2a\x2d\x23\xae\xdf\x2d\x5d\xa2\x0f\x48\
+\x7a\x5a\x8d\x38\xc7\x9f\xd4\x09\xb7\x98\x60\xe2\xaa\xe3\x15\x95\
+\x6b\x1e\xb2\x5e\x28\xe7\x66\x70\xae\x84\x28\x85\xdd\x2a\xaa\x2e\
+\x68\xff\x4b\x8c\x70\x9b\x49\xf8\x94\x49\xb4\xcf\x42\x0f\x49\xf4\
+\xb0\x85\x1e\x96\x71\x5b\xa3\xc4\x39\x5e\xf5\x88\x4f\xa2\xcb\x91\
+\xa1\xb2\xb2\xf6\xb2\x72\xed\xea\x49\x01\xfe\x90\xca\xa1\x5f\x87\
+\x3e\xb1\x1c\x9f\x0b\xc3\x3e\xb2\x71\x88\x00\x45\x13\x8c\x81\x7b\
+\xa4\xae\x8c\xa1\xe6\x1a\x30\xea\x39\xb7\x21\x63\x70\x65\x6e\xaf\
+\xc8\x72\x8b\x17\x80\xaa\xaa\x68\x9a\x86\x65\x59\xf6\x74\x6f\x2e\
+\x37\x5a\x5e\x6d\x5e\x50\x2e\xeb\x0d\x29\xb9\xe8\xa6\xe3\x2c\xcb\
+\x62\x60\x60\x80\x3b\xef\xbc\x93\x3b\xef\xbc\x93\xf1\xe3\xc7\x13\
+\x08\x04\x88\xc5\x62\x04\x83\x41\x76\xef\xde\xcd\xee\xdd\xbb\xd1\
+\x34\x2d\xc5\x8b\x70\xfa\x9b\xed\xb3\xa1\x96\x4b\xf4\x33\x19\x41\
+\x6e\xe5\xae\xf4\x5d\x4e\x7f\x13\x53\xe0\xb1\x58\xcc\x95\x39\xdd\
+\xee\x7b\xb2\x49\x78\x25\xc3\x67\x3f\xfb\x59\x7e\xf9\xcb\x5f\x52\
+\x96\x76\x26\x49\x22\x76\xb9\xf5\xd6\x5b\xe9\xed\xed\xe5\xe9\xa7\
+\x9f\xe6\xe8\xd1\xa3\x19\x03\x4f\xb4\x9d\x3e\x5b\x96\x3e\xd8\xc1\
+\xbe\x67\x5b\x6e\xb0\xff\xdd\xbe\x5b\x96\x95\x72\x88\xdb\x60\xfd\
+\x75\xeb\x97\xc7\xe3\xc1\xeb\xf5\xe2\xf7\xfb\xe9\xef\xef\xb7\x67\
+\x60\xb3\x91\x24\xe5\x52\xfa\x2d\x71\x19\x86\xc1\x8f\x7e\xf4\x23\
+\x5e\x7a\xe9\x25\x9b\x18\xe9\xcb\x45\x13\x10\x08\x04\x58\xb7\x6e\
+\x1d\x5f\xff\xfa\xd7\x5d\x17\x06\xe4\xe7\xe7\x53\x57\x57\x47\xe2\
+\x07\x2d\xaf\xc6\x20\x2d\x5d\x33\xdc\x7a\xeb\xad\x8c\x1f\x3f\x3e\
+\x2b\x35\x24\xa5\x44\x51\x14\x0a\x0a\x0a\xc8\xcb\xcb\x73\x9d\xcb\
+\x1f\xb2\x97\x95\xa8\xf4\xfd\xef\x7f\x9f\x55\xab\x56\xd9\x1d\xaf\
+\xaf\xaf\x67\xf5\xea\xd5\x6c\xdd\xba\xd5\x2e\x6b\x18\x06\x3f\xff\
+\xf9\xcf\x59\xb3\x66\x0d\x07\x0e\x1c\xe0\x8e\x3b\xee\xe0\x9e\x7b\
+\xee\x71\x1c\xec\x8a\x15\x2b\xf8\xce\x77\xbe\xc3\x4d\x37\xdd\x34\
+\xea\x84\x50\x14\x85\x69\xd3\xa6\x0d\x5a\x6e\xee\xdc\xb9\x6c\xd8\
+\xb0\x81\x87\x1e\x7a\x68\xc8\xf6\xc1\xe7\xf3\xe1\xf3\xf9\x2e\xcf\
+\xcb\xba\x78\x02\xb4\xb0\x7f\x20\x6c\xce\x9c\x39\x7c\xef\x7b\xdf\
+\x4b\x79\xd1\xb9\x73\xe7\xf0\xf9\x7c\x4c\x99\x32\xc5\xae\xf7\xf4\
+\xd3\x4f\xd3\xd8\xd8\xc8\xda\xb5\x6b\x99\x37\x2f\x7e\x32\xdc\x3d\
+\xf7\xdc\xc3\xfe\xfd\xfb\x69\x69\x69\x49\xe9\xe4\xce\x9d\x3b\x89\
+\x46\xa3\x1c\x3c\x78\x70\x54\x09\x12\x8d\x46\x79\xe8\xa1\x87\xb8\
+\xf9\xe6\x9b\x79\xe0\x81\x07\x5c\xcb\x1d\x3f\x7e\x9c\x27\x9f\x7c\
+\x92\x03\x07\x0e\x5c\x56\xe0\xe7\xf3\xf9\x30\x0c\xc3\x79\x01\xfa\
+\x50\x24\xc4\x30\x0c\x36\x6d\xda\x94\x71\xff\xdc\xb9\x73\x48\x29\
+\xa9\xac\xac\x44\x4a\xc9\x0b\x2f\xbc\x40\x53\x53\x13\xab\x57\xaf\
+\x66\xde\xbc\x79\x29\x52\xb1\x76\xed\xda\x94\x05\x77\x7e\xbf\x9f\
+\x50\x28\xc4\x5b\x6f\xbd\x45\x38\x1c\x76\x7c\xaf\xa6\x69\x68\x9a\
+\x86\x94\x92\xbc\xbc\x3c\x02\x81\x00\xf9\xf9\xf9\x59\x9e\xb1\x1b\
+\x7f\x47\x20\x10\xa0\xa0\xa0\xc0\x9d\x1b\x3d\x1e\xaa\xab\xab\x59\
+\xb9\x72\x25\xcd\xcd\xcd\xe4\xe7\xe7\xe3\xf7\x67\xee\x91\xf7\xf9\
+\x7c\x78\xbd\x5e\xb6\x6c\xd9\xc2\xf1\xe3\xc7\x07\x95\x36\x55\x55\
+\x29\x2c\x2c\x64\xdc\xb8\x71\x14\x16\x16\xda\x2a\x59\x08\xe1\xd8\
+\x76\x56\x46\x3d\xf9\x5a\xb4\x68\x11\x13\x26\x4c\xc8\x48\x38\xb6\
+\xb5\xb5\x21\x84\xa0\xa2\xa2\x82\x17\x5f\x7c\x91\x37\xdf\x7c\x93\
+\x07\x1e\x78\x80\xba\xba\xba\x0c\x5d\x5a\x52\x52\xc2\xdc\xb9\x73\
+\x69\x6e\x6e\xa6\xa4\xa4\x84\xa7\x9e\x7a\xca\x26\xc4\xb7\xbf\xfd\
+\x6d\x47\x3b\x72\xef\xbd\xf7\xe2\xf1\x78\xe8\xea\xea\xe2\xab\x5f\
+\xfd\x2a\x7e\xbf\x9f\x48\x24\xc2\x9b\x6f\xbe\xc9\xb3\xcf\x3e\x3b\
+\x28\x92\x1f\x7e\xf8\x61\x6e\xb9\xe5\x16\x2c\xcb\xc2\xe3\xf1\xb0\
+\x67\xcf\x1e\x1e\x7d\x34\x75\x55\x7b\x2c\x16\xe3\xc1\x07\x1f\xe4\
+\xde\x7b\xef\xb5\x55\xe8\xb2\x65\xcb\xa8\xaf\xaf\xe7\x87\x3f\xfc\
+\xa1\x5d\x2e\x12\x89\xb0\x71\xe3\x46\x6a\x6a\x6a\x88\x46\xa3\xfc\
+\xf8\xc7\x3f\x66\xff\xfe\xfd\x19\xef\xd5\x75\x9d\xeb\xae\xbb\x8e\
+\x47\x1e\x79\x84\xda\xda\x5a\x2c\xcb\x42\x55\x55\x36\x6c\xd8\xc0\
+\x1f\xff\xf8\x47\x9b\x58\xaa\xaa\xda\x8e\xc3\x65\x49\x48\x42\xc7\
+\x27\x57\x94\x52\xd2\xda\xda\x4a\x75\x75\x35\x3b\x76\xec\x60\xfb\
+\xf6\xed\xdc\x77\xdf\x7d\x2c\x5e\xbc\x38\x73\x7b\xc0\x85\x7a\xb3\
+\x67\xc7\x37\xc4\x74\x77\x77\xb3\x6a\xd5\x2a\xf2\xf3\xf3\xe9\xec\
+\xec\x74\xfd\xbd\xdd\xea\xea\x6a\x96\x2c\x59\xc2\xf2\xe5\xcb\x79\
+\xf0\xc1\x07\x59\xbe\x7c\x39\x67\xce\x9c\xe1\xae\xbb\xee\xc2\xe3\
+\xf1\xb8\x7a\x2d\x6b\xd7\xae\xe5\xb6\xdb\x6e\x63\xe3\xc6\x8d\x7c\
+\xe5\x2b\x5f\x61\xf3\xe6\xcd\xd4\xd5\xd5\xb1\x64\x49\xea\xd1\xb3\
+\x5e\xaf\x97\x4d\x9b\x36\xb1\x79\xf3\x66\x00\xd6\xad\x5b\xc7\xd2\
+\xa5\x4b\x59\xb7\x6e\x5d\x86\xa4\x3d\xfc\xf0\xc3\xd4\xd7\xd7\x53\
+\x5c\x5c\xcc\xd9\xb3\xce\x6b\x8b\x67\xcf\x9e\xcd\xf3\xcf\x3f\x4f\
+\x51\x51\x11\x2b\x56\xac\xa0\xb6\xb6\x96\x65\xcb\x96\xd9\x2a\x2e\
+\x81\x87\x4b\x39\x31\x97\xf4\xb2\x26\x4c\x98\x90\xf1\x3c\x18\x0c\
+\xd2\xd7\xd7\xc7\xc0\xc0\x00\x9b\x37\x6f\x66\xd9\xb2\x65\xdc\x75\
+\xd7\x5d\x83\xfa\xd7\x25\x25\x25\x36\xd2\x4a\x4b\x4b\x51\x55\x95\
+\x8f\x3e\xfa\xc8\xb5\x83\x93\x26\x4d\xa2\xa0\xa0\x80\xf5\xeb\xd7\
+\x13\x0e\x87\xf1\x7a\xbd\xec\xde\xbd\x1b\x80\xb2\xb2\xb2\x0c\x82\
+\x18\x86\xc1\x82\x05\x0b\x58\xbc\x78\x31\x7f\xf8\xc3\x1f\xd8\xb2\
+\x65\x0b\x3e\x9f\xcf\x56\x31\x45\x45\x45\x8e\x04\xac\xae\xae\x06\
+\xe0\xe4\xc9\x93\x83\xaa\xa2\xa9\x53\xa7\x62\x9a\xa6\x63\x39\x29\
+\x25\x3f\xf8\xc1\x0f\x6c\xf5\xdc\xd9\xd9\x49\x61\x61\x21\x5d\x5d\
+\x5d\x9c\x38\x71\x22\x15\xe1\x8a\x32\x74\x2f\x2b\xb9\xe0\xb8\x71\
+\xe3\x32\x9e\x1f\x3a\x74\x28\xbe\xd1\xb2\xae\x8e\x68\x34\x3a\xe8\
+\x82\xec\x04\x24\x74\xb9\x69\x9a\xd4\xd6\xc6\xf7\x03\x1e\x3c\x78\
+\x30\x83\x20\x09\x44\x4f\x9c\x38\x91\x96\x96\x16\x4e\x9c\x38\x61\
+\x3b\x17\x55\x55\x55\x00\xb4\xb7\xb7\x67\x1e\x32\xa3\xeb\xb6\xe3\
+\xf1\xcc\x33\xcf\x50\x58\x58\x48\x5e\x5e\x1e\xb7\xdf\x7e\x3b\x96\
+\x65\xd1\xd8\xd8\xe8\x38\xce\xaa\xaa\x2a\x2c\xcb\xe2\xd4\xa9\x53\
+\x83\x06\x71\xd3\xa6\x4d\xe3\xd0\xa1\x43\x19\x63\x95\x52\x52\x54\
+\x54\xc4\x8d\x37\xde\xc8\x87\x1f\x7e\x48\x73\x73\xb3\x6d\xe7\x14\
+\x45\xc9\xb0\x79\xc9\xef\xb8\xac\x19\xc3\x60\x30\x98\x71\xbf\xb1\
+\xb1\x11\x55\x55\x59\xba\x74\x29\x07\x0e\x1c\x60\xdb\xb6\x6d\x2c\
+\x5d\xba\x94\xf2\xf2\x72\xd7\xb6\x42\xa1\x90\x4d\x90\x84\x07\x96\
+\xdc\xf9\x74\x6e\x04\xd8\xb1\x63\x07\x9a\xa6\xd9\xf5\xae\xbf\xfe\
+\x7a\x82\xc1\x60\x4a\xf0\x96\x80\xc9\x93\x27\x53\x51\x51\x41\x24\
+\x12\xe1\x27\x3f\xf9\x09\x81\x40\x80\xea\xea\x6a\xda\xda\xda\xd8\
+\xb0\x61\x03\x0d\x0d\x0d\x78\x3c\x9e\x8c\xd8\x62\xfa\xf4\xe9\x34\
+\x36\x36\xa2\xeb\xba\xfd\xae\xf4\x32\x09\x29\xaa\xaf\xaf\xcf\x60\
+\x20\xc3\x30\x58\xbe\x7c\x39\x00\x2f\xbd\xf4\x12\x89\xdf\xa5\x1f\
+\x4c\xda\x06\x4b\x2d\x79\x2e\x15\x24\x39\xe9\xcc\xc3\x87\x0f\x53\
+\x59\x59\x89\xaa\xaa\x2c\x5e\xbc\x98\xe6\xe6\x66\xde\x7e\xfb\x6d\
+\xee\xbb\xef\x3e\xd7\x17\x76\x74\x74\xd8\x03\xbc\xee\xba\xeb\xe8\
+\xea\xea\xc2\x34\xcd\x0c\xc4\x26\x10\x0f\xa4\xa8\xb4\xd2\xd2\x52\
+\xc6\x8d\x1b\x47\x43\x43\x83\x63\x36\x21\xc1\x0c\x67\xce\x9c\x61\
+\xd7\xae\x5d\x74\x74\x74\xd0\xd0\xd0\x40\x30\x18\xc4\xe3\xf1\x64\
+\x10\x43\x4a\xc9\xc4\x89\xf1\x33\x82\xf7\xec\xd9\x93\xf1\x3c\xb9\
+\x3f\x8b\x16\x2d\x02\x60\xf7\xee\xdd\x19\x04\x31\x4d\x93\x19\x33\
+\x66\x00\x70\xe2\xc4\x89\x4b\x7a\x81\xc9\x7b\x1b\x2f\x2b\x52\xaf\
+\xaf\xaf\x4f\x69\x28\x12\x89\x10\x0e\x87\xed\xc1\xdc\x74\xd3\x4d\
+\x04\x02\x01\xde\x79\xe7\x1d\x0c\xc3\x70\xdc\xbb\x97\x20\x62\x42\
+\xff\xe7\xe7\xe7\xd3\xda\xda\xea\x8a\x80\xf9\xf3\xe7\x03\xa4\xa8\
+\x91\xc9\x93\x27\xdb\x08\x1f\x6c\xa0\x47\x8e\x1c\xe1\xb5\xd7\x5e\
+\xe3\xbd\xf7\xde\x23\x1c\x0e\x3b\x72\x7d\xfa\x7b\xf6\xec\xd9\xe3\
+\x6a\xcb\x0c\xc3\xb0\x1d\x9b\xa6\xa6\xa6\x8c\x72\x42\x08\xa2\xd1\
+\xa8\xad\x36\x5d\x4f\xbe\x4b\x4b\xcd\xb8\xd9\x5b\xe5\x52\xe9\xf7\
+\x7d\xfb\xf6\x71\xe4\xc8\x11\xfb\x5e\xc2\xdd\x4d\x36\xf6\xab\x56\
+\xad\x22\x18\x0c\xf2\xfb\xdf\xff\xde\xb1\xad\xd3\xa7\x4f\xd3\xd4\
+\xd4\x64\x1b\x6b\x37\xc9\x4b\xc0\x9c\x39\x73\x6c\x82\x25\xde\x9b\
+\x08\x40\xdd\x08\x72\xfe\xfc\x79\x5b\x05\x79\xbd\x5e\x54\x35\x7e\
+\xba\x50\x79\x79\x39\x85\x85\x85\x99\x87\xd6\x98\x26\x73\xe7\xce\
+\x4d\x41\xb4\xdb\x8f\x34\x2f\x58\xb0\x80\xd6\xd6\x56\xc7\xd5\xfc\
+\xaa\xaa\xda\xc1\xed\x97\xbe\xf4\x25\x3b\x6f\xa5\x69\x1a\xaa\xaa\
+\xa6\x48\x44\xe2\xd9\x60\x46\xfd\x92\x33\x86\x7e\xbf\x9f\xef\x7e\
+\xf7\xbb\x6c\xdd\xba\x15\x55\x55\x39\x75\xea\x14\x91\x48\x84\x8a\
+\x8a\x0a\xbb\xc3\xb5\xb5\xb5\x4c\x9f\x3e\x9d\xad\x5b\xb7\xb2\x64\
+\xc9\x12\x2a\x2b\x2b\x53\x74\xf0\x13\x4f\x3c\x61\xeb\xd6\x04\x62\
+\xdd\x08\x32\x69\xd2\x24\x54\x55\xa5\xad\x2d\xf5\x54\xa0\x84\x41\
+\x77\x23\x48\x7b\x7b\x3b\xcf\x3d\xf7\x1c\xdf\xfa\xd6\xb7\x78\xfc\
+\xf1\xc7\x39\x73\xe6\x0c\xe5\xe5\xe5\xcc\x9e\x3d\x9b\x35\x6b\xd6\
+\x64\x72\xa2\xa2\xd8\x1e\xd8\x4f\x7f\xfa\x53\x0c\xc3\xe0\xf5\xd7\
+\x5f\x67\xe7\xce\x9d\x29\xea\x6b\xca\x94\x29\xf8\x7c\x3e\x4e\x9f\
+\x3e\xed\x1a\xf7\xbc\xf1\xc6\x1b\x7c\xe3\x1b\xdf\x60\xcd\x9a\x35\
+\xcc\x98\x31\x83\x48\x24\xc2\xc2\x85\x0b\x59\xbf\x7e\x3d\xbb\x76\
+\xed\xb2\xdd\x74\x5d\xd7\x6d\x95\xe6\x46\x10\x15\xb8\x41\xd3\xb4\
+\xea\xbc\xbc\xbc\xda\x44\x47\xa7\x4d\x9b\xc6\xc0\xc0\x00\x3d\x3d\
+\xf1\xdf\xb1\x0d\x87\xc3\x74\x76\x76\x52\x57\x57\x47\x69\x69\x29\
+\x5f\xf8\xc2\x17\x98\x35\x6b\x96\x9d\x62\x07\x58\xb8\x70\x21\x75\
+\x75\x75\x04\x02\x01\x3b\x6f\x23\xa5\xe4\xf9\xe7\x9f\xa7\xb1\xb1\
+\xd1\x2e\x57\x54\x54\x44\x5f\x5f\x1f\xf5\xf5\xf5\xf4\xf6\xf6\x66\
+\x74\x28\x10\x08\x20\xa5\xa4\xbe\xbe\x3e\x05\xf9\xa5\xa5\xa5\x74\
+\x74\x74\xf0\xee\xbb\xef\xda\x2a\x22\x9d\x53\x0f\x1d\x3a\xc4\xbe\
+\x7d\xfb\x28\x2b\x2b\x23\x10\x08\xd0\xd0\xd0\xc0\x63\x8f\x3d\x46\
+\x5f\x5f\x5f\x66\x00\xa6\x28\x34\x36\x36\xd2\xd7\xd7\x47\x55\x55\
+\x15\x67\xcf\x9e\x65\xfb\xf6\xed\x0c\x0c\x0c\xa4\x94\x4d\xb8\xcb\
+\x3b\x76\xec\xa0\xa5\xa5\xc5\xd5\xf9\x79\xe5\x95\x57\x08\x87\xc3\
+\x4c\x98\x30\x81\x68\x34\xca\xaf\x7e\xf5\x2b\xf6\xee\xdd\x6b\x4b\
+\x89\xae\xeb\x29\x52\xaa\x69\x1a\xa5\xa5\xa5\x04\x83\x41\xba\xbb\
+\xbb\x2f\xb6\x05\x3c\xe8\xf7\xfb\xbf\x50\x5c\x5c\xbc\x32\x41\xf1\
+\x2f\x7e\xf1\x8b\x04\x83\xc1\x14\x9f\xdb\x30\x0c\xee\xbe\xfb\x6e\
+\xd6\xaf\x5f\x9f\x75\xd2\xee\x37\xbf\xf9\x0d\x3b\x76\xec\xb0\x3b\
+\x25\xa5\xc4\x30\x0c\x4c\xd3\x4c\x51\x11\xc9\x69\x6c\xd3\x34\x6d\
+\x4e\x4a\xae\xa7\xeb\xba\x1d\x79\x3b\xa5\xc7\x93\xf7\x44\x26\x72\
+\x46\x42\x08\x9b\xdb\xdd\xd2\xed\xb1\x58\xcc\xb6\x7d\x89\x54\x4d\
+\x72\xfb\x96\x65\x11\x8b\xc5\x52\xfa\xe3\x96\x7e\x8f\xc5\x62\x29\
+\xef\x4d\xd8\x1b\x5d\xd7\x6d\x07\x26\x39\xdb\x5d\x53\x53\xc3\xf1\
+\xe3\xc7\x53\xd2\x31\x9e\x6c\x53\xd2\x1e\x8f\x87\x57\x5f\x7d\x95\
+\xfa\xfa\x7a\x36\x6e\xdc\xc8\xf4\xe9\xd3\x1d\x0d\xa1\x65\x59\xb4\
+\xb6\xb6\xf2\xe4\x93\x4f\xd2\xd9\xd9\x99\x51\x26\x91\x3e\x70\xdd\
+\xb0\xa2\x28\x78\xbd\x99\x07\x95\xa5\x23\xd6\x35\xd2\x4d\xaa\x9f\
+\xcd\xc9\x78\x9a\xa6\xa5\x44\xfe\x4e\x99\x06\x9f\xcf\x97\xd5\xae\
+\xe2\x64\x97\x37\x79\xa2\x6a\x28\x27\xf4\x0d\x69\xc6\x50\x08\xc1\
+\xd9\xb3\x67\xf9\xf2\x97\xbf\x4c\x6d\x6d\x2d\xb5\xb5\xb5\x4c\x9a\
+\x34\x89\x8a\x8a\x0a\x42\xa1\x10\xed\xed\xed\x1c\x3b\x76\x8c\x63\
+\xc7\x8e\x39\xba\x99\x83\xcd\xd4\x39\xfd\xbd\xd4\x0c\xa3\x5b\xbb\
+\x43\xbd\x7f\xb9\xe5\x2e\x35\xbb\xe8\x34\x57\x74\xd9\x04\x71\x6b\
+\x28\xc1\xe1\xcd\xcd\xcd\xb6\xe7\x94\xf3\x33\xb6\x3e\x01\x0b\x18\
+\x2e\x85\x8f\x21\x4d\xe1\x66\xbb\x2e\x6b\x8c\x00\x57\x4e\xb8\x21\
+\x67\x7b\xc7\x60\x78\xa5\x68\xc8\x71\xc8\x18\x8c\x2c\x51\xc6\x24\
+\x64\x4c\x42\xc6\x60\x4c\x42\xae\x21\x4f\xcc\x55\x42\xc6\x8d\x1b\
+\xc7\xac\x59\xb3\xc6\x30\x37\x4c\x90\x98\x39\x74\x54\x59\xe9\x01\
+\x8f\x53\xae\x68\x0c\x72\x0b\x96\x65\x11\x8d\x46\x33\x16\x12\x7a\
+\x00\x4b\x88\x8b\xfb\x64\x0d\xc3\x60\xdb\xb6\x6d\x63\x18\x1b\xa5\
+\x58\xc4\x03\xe8\x40\x2c\x5d\x9c\xc6\x60\x94\x54\x19\x10\x16\x42\
+\x0c\x8c\x79\x54\xa3\x0f\x52\xc6\x77\x16\x2f\x05\x26\x6a\x9a\x56\
+\x21\xa5\xf4\x70\x2d\xee\x25\xbe\x76\xc0\x14\x42\xc4\x80\x5e\x45\
+\x51\x3a\x54\x55\x3d\xa7\x69\x5a\x50\xd3\xb4\x88\xc7\xe3\x31\x00\
+\xf9\xff\x01\xfa\x90\x4b\xa0\xc0\x4f\x7e\x35\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x3f\xd1\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x50\x00\x00\x00\x50\x08\x06\x00\x00\x00\x8e\x11\xf2\xad\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\
+\x95\x2b\x0e\x1b\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\
+\x0e\x36\x08\x21\xa9\x06\x34\x00\x00\x20\x00\x49\x44\x41\x54\x78\
+\xda\x9c\xbc\x69\x98\x24\x57\x79\xe7\xfb\x3b\xb1\xe6\x9e\x59\x99\
+\x59\x5b\xd7\xd2\x55\x5d\xbd\xaa\x17\x49\x2d\xb5\xf6\xd6\x0e\x12\
+\x12\x18\x8c\x6d\x60\x7c\x19\x6c\x23\x1b\xcc\xb0\x08\xcf\x18\xdb\
+\x63\x3f\x9e\xe5\xde\x67\xbc\x8c\xf1\x78\x7b\xbc\x8c\x3d\x36\xc6\
+\xf6\x18\x06\x63\x1b\x0c\xd8\x80\x05\x5a\x11\x12\xdd\x48\xa8\x5b\
+\xea\x7d\x51\x55\xd7\xbe\xe4\x16\xfb\x7a\xee\x87\xac\xcc\xae\x06\
+\xc6\x73\x9f\x9b\x1f\xba\xb3\x9e\x38\x71\xe2\x8d\x13\x27\x22\xce\
+\xef\xfd\xff\xdf\x14\xef\x7a\xd7\xbb\xa4\xe3\x38\xd4\x6a\x35\x5e\
+\x7f\xfd\x75\x7c\xdf\x67\x61\x61\xc1\xfa\xe8\x47\x3f\x5a\x2c\x97\
+\xcb\x84\x61\xc8\x8b\x2f\xbe\x88\xaa\xaa\x84\x61\x48\x18\x86\x74\
+\x3a\x1d\xd6\xd7\xd7\xa9\xd5\x6a\x9c\x39\x73\x66\x75\x68\x68\xa8\
+\xf8\xfe\xf7\xbf\x3f\x5b\xab\xd5\xf8\xf4\xa7\x3f\xcd\xf0\xf0\x30\
+\x17\x2f\x5e\x64\x68\x68\x88\xf9\xf9\x79\x4c\xd3\xc4\x34\x4d\x4e\
+\x9e\x3c\x19\x25\x49\x12\xfc\xe2\x2f\xfe\x62\x61\x78\x78\x98\x67\
+\x9e\x79\x06\xc7\x71\xb8\x72\xe5\x0a\x83\x83\x83\x34\x1a\x0d\x86\
+\x87\x87\xd9\xd8\xd8\x60\x6e\x6e\x0e\xdb\xb6\x3b\xb7\xdf\x7e\xbb\
+\x78\xc3\x1b\xde\x50\xac\xd7\xeb\x3c\xf3\xcc\x33\xac\xac\xac\x90\
+\xa6\x29\x8e\xe3\x50\x2a\x95\xb8\x7c\xf9\x32\x51\x14\xe1\xba\x2e\
+\xf3\xf3\xf3\xb3\xef\x79\xcf\x7b\xb6\x3f\xf0\xc0\x03\x7c\xe9\x4b\
+\x5f\xe2\xca\x95\x2b\x14\x0a\x05\x82\x20\x20\x8a\x22\x66\x67\x67\
+\xa9\x56\xab\x34\x9b\x4d\x2e\x5d\xba\x74\xee\xae\xbb\xee\xda\xf9\
+\xb3\x3f\xfb\xb3\xca\x73\xcf\x3d\xc7\x4b\x2f\xbd\xc4\xf4\xf4\x34\
+\x97\x2f\x5f\x46\xd3\x34\x6c\xdb\x66\x72\x72\x92\x73\xe7\xce\xb1\
+\xb8\xb8\xb8\xb4\xb2\xb2\xb2\xfc\xeb\xbf\xfe\xeb\x37\x66\xb3\x59\
+\x4e\x9c\x38\xc1\xfa\xfa\x3a\xb6\x6d\xa3\x0c\x0d\x0d\x91\xcb\xe5\
+\x10\x42\x30\x39\x39\x89\xa6\x69\x08\x21\xc8\xe7\xf3\xfc\xc8\x8f\
+\xfc\x08\x83\x83\x83\x54\xab\x55\xa6\xa6\xa6\xd8\xb1\x63\x07\xc5\
+\x62\x91\x52\xa9\x84\xae\xeb\x8c\x8d\x8d\x01\x10\x86\x21\x0f\x3c\
+\xf0\x00\xd7\x5f\x7f\x3d\xa6\x69\x32\x35\x35\xc5\xe0\xe0\x20\xdb\
+\xb7\x6f\xa7\x5e\xaf\x63\x9a\x26\xfb\xf7\xef\x47\x08\x81\xef\xfb\
+\xec\xdf\xbf\xbf\xbf\x6d\x6c\x6c\x8c\x52\xa9\xc4\xbe\x7d\xfb\xc8\
+\xe7\xf3\x14\x0a\x05\x76\xee\xdc\x49\xa1\x50\x40\x55\x55\x56\x57\
+\x57\xb9\xfd\xf6\xdb\x29\x95\x4a\xa4\x69\x4a\x26\x93\xa1\x54\x2a\
+\x11\x04\x01\xba\xae\x23\x84\xa0\x5e\xaf\xa3\x69\x1a\x52\x4a\xf6\
+\xee\xdd\xcb\x7d\xf7\xdd\x47\xb1\x58\x64\x70\x70\x90\xe9\xe9\x69\
+\x06\x06\x06\x98\x9c\x9c\xc4\x30\x0c\x86\x87\x87\xc9\xe5\x72\x00\
+\x68\x9a\xc6\xbe\x7d\xfb\x30\x0c\x83\x5c\x2e\xd7\xdf\x5e\x28\x14\
+\x30\x0c\x83\x28\x8a\x28\x16\x8b\xa8\xaa\x8a\x10\x82\xc1\xc1\x41\
+\x6e\xbe\xf9\x66\xc6\xc6\xc6\xd8\xbb\x77\x6f\x77\xdc\x0e\x1f\x3e\
+\x2c\x01\xa4\x94\xfd\x00\x3b\x9d\x8e\x95\xcf\xe7\x8b\x99\x4c\x06\
+\xd7\x75\x11\x42\x20\xa5\xa4\xf7\x91\x52\x22\x84\x40\x08\x41\xa7\
+\xd3\x59\x1d\x1c\x1c\x2c\xa6\x69\x9a\x05\x88\xa2\xa8\xbf\x3d\x4d\
+\xd3\xfe\xbe\x52\x4a\xe2\x38\x8e\xa2\x28\x0a\xf2\xf9\x7c\xa1\x58\
+\x2c\x62\xdb\xf6\xf7\xf4\xbb\xf5\x7f\x4d\xd3\x3a\xed\x76\x5b\x94\
+\x4a\xa5\x62\x92\x24\x28\x8a\x72\xcd\xf1\xb7\xf6\x5f\xad\x56\x79\
+\xed\xb5\xd7\x66\xaf\xbb\xee\xba\xed\x8e\xe3\x90\xa6\x69\xff\x9c\
+\x7a\x6d\x7a\xfb\xe8\xba\xce\xec\xec\xec\xb9\x3d\x7b\xf6\xec\x6c\
+\xb7\xdb\x8a\xa6\x69\xd7\x1c\x77\xeb\x47\x4a\x89\xa2\x28\x4b\x6b\
+\x6b\x6b\xcb\x43\x43\x43\x37\x9a\xa6\x89\xef\xfb\x08\x21\xba\x31\
+\xa6\x89\x6c\x08\x01\x08\x50\x14\x05\xcf\xf3\x52\xcb\xb2\x2e\x67\
+\xb3\x59\xdd\xb6\x6d\x04\x82\x34\x95\x80\x40\x08\x09\x9b\x6d\x7b\
+\x07\x8b\xe3\x78\xa5\xd3\xe9\xec\xd1\x34\xad\x24\x10\x9b\x07\xdd\
+\xfc\x47\x00\x9b\xfb\x6c\x1e\x30\xf4\x3c\x6f\x31\x93\xc9\x28\xed\
+\x76\x1b\x05\xe5\xfb\xf6\xdd\x0b\xae\xd3\xe9\x34\x92\x24\xd1\xd3\
+\x34\x2d\x0a\x04\x71\x9c\x76\x8f\x20\x05\x42\xa4\xdd\x38\xe8\xc6\
+\xb1\xbe\xbe\x1e\x03\x8d\x76\xbb\x5d\x4d\xd3\x34\x12\x88\xee\x96\
+\x14\xa4\x90\x88\xcd\xb6\x42\x08\x92\x24\x51\x84\x10\xad\x8d\x8d\
+\x8d\xbf\x35\x0c\xc3\x90\x69\x4a\x9a\x00\xdd\x50\xba\x31\x28\xb2\
+\x7b\x0a\x42\x08\xd7\x75\x97\xc2\x30\x2c\x48\x29\x35\xcf\x75\x13\
+\xa4\x42\x2a\x53\x40\xa0\xed\xb9\x7b\xb4\x9a\xac\x99\xc8\x50\x41\
+\x28\x82\x28\x8a\x08\xc3\x30\xbb\x6d\xdb\xb6\x7c\x1c\xc7\xc4\x15\
+\x87\xc2\x64\x44\xe2\x81\x6c\xe6\x88\x1b\x3a\x32\x50\x51\x0c\x89\
+\xa2\x28\x44\x51\xb4\x32\x33\x33\x53\x52\x55\x35\x1b\x11\x11\x4f\
+\x34\xa9\xd6\x35\x22\x4f\x22\x5a\x05\xa2\x0d\x1d\x02\x15\xa1\x82\
+\xeb\xba\xe1\xdc\xdc\x5c\x6e\x64\x64\xa4\xa4\x28\x0a\x6b\xe6\x3a\
+\x3b\xae\xd3\x08\xda\x02\xd9\xca\x10\x37\x0d\x64\xa0\xa0\x18\xdd\
+\x19\xdb\x6a\xb5\xbc\x34\x4d\xe3\xed\xdb\xb7\x17\x9d\xc8\xa3\x7c\
+\xd8\x41\x20\x49\x5c\x05\xda\x39\xa2\x75\x1d\x22\x05\x54\x89\xa1\
+\x1b\xac\xac\xac\xfc\xf3\xae\x5d\xbb\x8a\x32\x96\xac\x15\x97\x99\
+\xdc\xab\x13\x78\x09\x58\x19\xd2\xa6\x49\xdc\xd2\x11\x0a\x18\x86\
+\x4e\xa7\xd3\xb9\x65\x64\x64\xe4\xfa\x8c\x99\x31\x37\x42\x8b\xa1\
+\xeb\x43\x14\x14\xe2\xa6\x4e\xda\xcc\x90\xb6\x55\x84\x01\x42\x01\
+\xcb\xb2\x08\x82\xe0\x89\xd1\xd1\xd1\x83\x41\x18\x11\x8d\xb6\xa9\
+\x8d\x2a\x44\x36\x68\xf9\xbb\x56\x21\x51\x69\x7f\xad\x4a\xb8\x6a\
+\x20\x14\xd0\x34\x2d\xcd\x66\xb3\xd8\x9e\x8b\x32\x1d\x92\xbf\xa9\
+\xc3\x9e\xea\x11\x4e\x2f\x1e\xc3\x4c\xf3\xd0\xc9\xd1\xfc\xe7\x01\
+\x54\x55\x45\xd3\x34\xd1\xbb\x75\x6d\xcd\xc1\xd8\xb5\xc1\xd4\xae\
+\x03\x8c\x57\xb7\xf3\xe4\xe9\xcf\x53\xd2\xca\xd8\x4f\xd7\x09\x16\
+\x75\xa2\x28\x12\x9a\xa6\x29\xa6\x69\x22\x84\xc0\x38\xe0\x33\x70\
+\xab\xc6\xb6\xdc\x1e\x2e\x2f\x9f\x45\xa4\x90\xce\xd6\xb0\x5e\xce\
+\x23\x63\xc8\xe5\x72\x51\xa7\xd3\x11\x69\x9c\xb2\x21\x5b\x6c\x3b\
+\xec\x30\x6a\xec\x43\xd3\x53\xe6\xd6\x2e\x10\x77\x34\xdc\x63\x55\
+\xfc\x05\x0d\xd3\x30\x91\x52\x66\xd2\x34\x45\x06\x12\x6b\xef\x2a\
+\xc5\x43\x75\x0e\x97\x8f\x70\x6e\xfd\x18\xad\xe6\x32\xb9\x76\x85\
+\xc6\xd7\x4a\x28\x8a\xe8\x3d\xe7\x43\x53\xd5\xcd\x97\xc3\x59\x0e\
+\xdf\x5f\x24\x8d\x15\x0a\x6a\x9e\xc5\x8d\xd7\xc9\xca\x2a\xd6\xf3\
+\x65\xc2\x15\x83\x5c\x2e\x01\x28\x9b\xa6\x49\x33\x08\x98\xba\x1b\
+\xcc\x41\x9b\x1d\x85\x9b\x50\x7e\x74\xdf\xaf\x70\xc3\x8e\x3b\x89\
+\x65\x80\xe7\xf9\x04\x41\x80\x94\x12\xdf\xf7\xf1\x83\x80\x50\xba\
+\xdc\x51\xf9\x71\xee\xdb\xfe\x4e\x7e\xe5\xc1\x2f\x71\xf3\xe4\x0f\
+\x50\x1b\xeb\x3e\xc4\x83\x20\x20\x49\x12\xc2\x30\xc4\xf7\x7d\xa2\
+\x24\xa4\xb1\x16\xf2\x8e\xeb\xfe\x1d\x39\x6f\x86\xf7\xdf\xfc\x9b\
+\xbc\xe7\x9e\x9f\x21\x90\x6e\xbf\x7d\x9a\xa6\x5b\xf6\x8d\x79\x74\
+\xfb\x87\xd9\xad\x3f\xcc\x8f\xdd\xf2\x4b\xdc\xbf\xe3\x31\x44\xd1\
+\x27\x08\x7c\x7c\xdf\x27\x8e\x63\xa2\x38\xc2\x73\x5d\xa2\x24\x66\
+\xbc\xb0\x9b\xa3\xa3\xef\xe4\x07\xa7\x7e\x81\x01\xef\x76\xee\xbf\
+\xe1\xcd\xb8\x49\x1b\xdf\xf3\x89\xa2\x08\x00\x3f\xf0\x71\x5d\x17\
+\x5d\xd3\x98\xd2\x6f\xe7\x81\xf1\x9f\xe0\x86\xf2\xdb\xf9\xaf\x6f\
+\xf9\x12\xb2\xe0\xe1\xfb\x3e\x9e\xeb\x91\xa6\x69\x37\x6e\x2f\x20\
+\x11\x09\xae\x1b\xf0\xa1\x83\x7f\xc2\x1b\x76\xbd\x9b\x8f\xde\xfe\
+\xe7\x4c\x4c\x8f\x12\xe2\xe1\x7b\x3e\x61\x18\xf6\xc7\x24\x08\x03\
+\xa4\xf0\xb9\x5d\x7b\x9c\x5b\x27\xde\x80\xa2\xc4\x3a\x6e\xe0\x10\
+\x04\x11\xbe\xe7\xf5\x1b\x7b\x9e\xd7\x7d\xfd\x27\x01\xfb\x87\x6e\
+\xe3\xb3\xaf\xfd\x2e\xf3\x4b\xeb\x1c\x1c\xb9\x15\x05\xa5\x3b\xc0\
+\xbe\x4f\x92\x24\x44\x51\x84\xe7\x79\x84\x41\xc8\x80\x3e\xc1\xb2\
+\x35\xcb\x8b\xb3\x4f\x70\xc7\xf4\x43\x78\x91\x43\x14\x84\xfd\xfe\
+\x92\x24\xe9\xef\x6b\xaa\x79\x06\x72\x75\x9e\x5f\xfa\x1b\x6e\xa8\
+\xbf\x81\x5a\x6e\x84\x92\x5e\xc7\xf3\xaf\x0e\x60\x12\x27\x78\xbe\
+\x4f\x1c\x45\xe4\xf4\x02\x4a\xc6\xe5\x5b\xe7\xbe\x85\x48\x55\x6c\
+\xbf\x49\x1c\x26\x78\x7e\x77\x60\x00\x02\x3f\xc0\x75\x3d\x34\x55\
+\xc5\x69\x09\xbe\x7e\xfe\xf3\x28\x71\x9e\x6a\xa5\x40\x92\x24\x78\
+\x9e\x87\xe7\x79\xf4\xee\x1a\xcf\x73\x51\x15\xc1\xc5\xb3\x16\x03\
+\x43\x2a\x1b\xce\x32\xd7\x4f\xde\x4c\x35\x33\x46\x10\x76\xe3\x88\
+\xa2\xa8\x7b\xe1\x37\xbf\xb7\x3a\x1e\x3f\xf5\xc8\x63\xfc\xd3\xf9\
+\x4f\xa0\x24\x32\x25\xa3\x94\x88\xe2\x88\x20\x08\xfa\x03\xd8\x9b\
+\x25\x0a\x2a\x7e\xe2\x50\xcf\x8e\x33\x50\xa8\x32\xb7\x3e\x8b\x84\
+\xef\x19\xc0\x30\x0c\x89\x93\x18\x3f\xb1\x19\x2c\x6c\x43\x13\x59\
+\x5a\xde\x1a\x59\x2d\x47\x14\xc7\x84\x61\x78\x35\x90\x20\xc0\xf7\
+\x7d\x24\x29\x0a\x1a\x9e\x03\xa9\xea\xd1\x72\xdb\xac\xdb\x2b\x84\
+\x9b\xdb\x93\x24\x21\x8e\xe3\xcd\x81\x4f\x49\x64\x42\x1a\x19\xcc\
+\x8c\xee\xa2\xe3\xd8\x94\x33\x43\x84\x71\xd0\x8f\x15\x20\x08\x43\
+\x7c\xdf\x43\x51\x14\xf2\x45\x9d\xbd\x43\x37\x62\xf9\x4d\x32\x4a\
+\x09\x4d\x18\xdd\xb6\x61\xf7\x2e\x8b\xa2\x08\xcf\xf7\x91\x52\x50\
+\x19\x30\x49\x02\x1d\x29\x05\x48\x85\x86\xbb\x4c\x12\xa7\xfd\x01\
+\x94\x52\xe2\xf9\x3e\x61\x14\x62\xe8\x1a\x73\xcb\xcb\x18\x4a\x16\
+\xed\x58\xfb\xd3\x78\x4a\x03\xdf\xf3\xb0\xec\x88\x6c\x9a\x41\x4a\
+\x89\xe3\x38\xf8\x71\x44\x11\x83\x2f\xbf\xfe\x47\xbc\xf7\xd0\xaf\
+\x72\xb2\xf3\x0f\x5c\x72\x4f\x10\x8b\x00\xc7\x71\x50\x55\xb5\x3f\
+\x78\xae\xeb\x92\x1a\x30\x52\x57\xf8\xc6\x99\xe7\xf8\xf9\x47\xff\
+\x1f\x7e\xeb\x9b\x1f\x64\x7c\x74\x9c\x34\x49\x71\x9c\xcd\x19\xb5\
+\x39\x0b\xa4\x94\x0c\x68\x82\xa7\x2e\xfd\x1d\x3f\xff\xc6\xdf\xe4\
+\x53\xaf\xfd\x1a\x96\xef\x50\xca\x54\x70\xdd\x79\xe2\x40\x62\x18\
+\x06\x61\x18\x62\x5b\x16\xbe\x1e\xb3\x64\x5f\x62\x89\x45\xf6\x6f\
+\xaf\x21\x07\x2f\x70\xa9\xd1\x5d\x20\x5b\x96\x8f\x61\xea\x00\xb8\
+\x8e\x83\xdb\x71\xd1\x52\x9d\xa5\xe8\x3b\xdc\x9b\x7d\x2b\x51\x71\
+\x8e\x8f\x3f\xfd\x41\x14\x15\x6c\xdb\x46\xd3\xf4\xab\x93\xc4\xf1\
+\x89\xf2\x31\xdb\xb7\x0f\xf2\xd4\xa9\xaf\x32\xb3\x7d\x86\xdf\x7b\
+\xf1\x71\x32\x46\x86\x30\x0e\xb0\xed\x18\xdd\xd4\x48\xd3\x14\x77\
+\x73\x4c\xca\xf9\x22\xbf\xf5\xcc\xe3\x7c\xec\xc1\x3f\x40\x5b\x5c\
+\x9b\xa5\xd1\x59\x63\xf9\x6c\x9b\xc8\x4d\x91\xa4\xa4\x69\x4a\xab\
+\xd5\x22\x48\x22\x8a\x41\x1e\x57\x5b\xe4\xf7\xbe\xf5\x38\x8f\x5e\
+\xff\xc3\x9c\x5d\x3d\xc6\xea\x0b\x92\x76\xdb\x46\x51\x14\xd2\x34\
+\xc5\xb6\x6d\xda\xed\x36\x52\x15\x08\xa5\xc2\xf3\x8d\x4f\x30\x3e\
+\x37\xca\x6a\x67\x8e\xc5\xd5\x39\x16\xce\x34\xf1\xda\x49\x7f\x0d\
+\x16\x86\x21\x69\x9a\x52\x48\xf2\xcc\x06\xdf\xe2\xd9\x85\xcf\x62\
+\xf9\x4d\x4e\x2f\xbc\xc2\xec\x31\x9f\x8d\x15\x07\x04\x94\x4a\xa5\
+\x2e\xf9\x44\x29\x41\x26\x25\x51\x4a\x3c\xb3\xfa\x57\xb4\xd3\xa3\
+\xf8\x9e\xc5\x4b\x17\x4f\xb0\x72\xda\xc1\x77\x62\x32\x59\x13\xe8\
+\x0e\x90\x6d\xd9\x14\x92\x02\x8e\x58\xe5\x8b\xb3\xbf\x8d\x65\x59\
+\x2c\xaf\x2d\xb0\xf2\x4a\x40\xbb\x61\x61\x64\xb5\xfe\x24\xb1\x1a\
+\x6d\x9c\xa2\x24\x91\x15\xbe\xd5\xfc\x14\xcb\xfe\x8d\x5c\x6e\xbd\
+\x8c\xe3\xb8\x5c\xfa\x66\x03\x99\xa6\xe4\x92\x1c\x69\x9a\xd2\x68\
+\x34\xe9\xc8\x84\x30\x32\x71\x33\x97\xf9\x95\xaf\x7c\x04\x31\x3d\
+\xb1\x53\x0a\x04\x66\x5e\x23\x8c\x42\xb2\xd9\x2c\x51\x14\x59\x69\
+\x9a\x16\x6b\xd5\x3a\x72\xac\x43\x69\x58\x67\xe5\x3b\x1e\xeb\x17\
+\x5d\x4c\xc3\x44\xa8\xa0\x1a\xdd\x37\x59\x10\x04\xab\x03\x03\x03\
+\x45\x45\x51\xb2\x52\x4f\x29\xdd\x2c\x89\x97\x52\x16\x5e\xe9\x80\
+\xa7\x21\x14\x81\x6a\x76\xd7\x60\x69\x9a\x46\x42\x88\xc0\x30\x8c\
+\x42\xa5\x52\x41\xee\xb1\x28\x19\x3a\x57\x8e\x5b\x38\x4b\x09\x9a\
+\xa6\x81\x2a\x51\x75\x41\x92\x24\x14\x0a\x85\x4e\xb3\xd9\x14\x3b\
+\x67\x76\x16\x1b\x9d\x06\xa3\x37\x1b\xcc\xbf\x68\x63\x37\x42\x34\
+\x45\x43\x92\xa2\x67\x54\xe2\x24\xa6\x52\xa9\x30\x3b\x3b\xfb\xec\
+\xce\x9d\x3b\x8f\x2a\xa8\x24\x43\x16\x6a\x2a\x58\x7e\xd5\x21\x8d\
+\x25\xaa\xa2\x22\x34\x50\xba\x6b\x66\xc2\x30\xa4\x5c\x2e\x5b\x02\
+\x51\x6c\xe2\x73\xe3\x5b\x0a\x2c\x1c\x77\x59\x3f\xe7\x21\x43\x15\
+\x64\x8a\x96\xed\x4e\x10\xc3\x30\xe8\x74\x3a\xc7\xf2\xf9\xfc\x11\
+\x33\x5b\x64\xfb\x23\x12\x67\x21\x61\xfd\x9c\x8f\x76\xc7\xdd\xb7\
+\xd2\x6c\x36\x19\x1d\x1d\xe5\xc2\x85\x0b\x78\x9e\xc7\xca\xca\x0a\
+\x3f\xf6\x63\x3f\xc6\xbe\x7d\x7b\x99\xbb\x3c\xcf\xcb\x2f\xbf\x42\
+\x7d\xbb\x24\x9d\xec\xbe\x00\x3c\xcf\xa3\xd1\x68\x50\x2c\x16\xb9\
+\x74\xe9\x12\x9a\xa6\xf1\xd3\x3f\xfd\xd3\x0c\x54\x06\xf8\xab\x4f\
+\xfe\x35\x95\x6a\x85\xf2\x9e\x25\x6a\xb5\x1a\x0b\x0b\x0b\x18\x86\
+\x81\xa2\x28\x5c\xb8\x70\x81\x30\x0c\xf9\xc0\x07\x3e\xc0\xc1\x83\
+\x07\xf9\xe4\x9f\xfe\x05\xaa\xd4\x30\x46\x97\x19\xbc\xbe\xce\xc6\
+\xc6\x06\x03\x03\x03\x34\x9b\x4d\x16\x16\x16\x08\x82\x80\x3b\xef\
+\xbc\x93\xc7\x1e\x7b\x8c\x30\x0c\x79\xe6\xc9\xe7\x18\xbd\x71\x19\
+\x55\x53\xe9\x74\x3a\x14\x0a\x05\x16\x16\x16\x70\x5d\x97\x24\x49\
+\x50\x55\x95\x87\x1e\x7a\x88\xb7\xbf\xfd\xed\x7c\xe1\x73\x5f\xe4\
+\x95\x13\x27\x98\xbe\x53\x23\x9f\xcf\xb3\xb0\xb0\x80\xe3\x38\x64\
+\xb3\x59\x9a\xcd\x26\xcb\xcb\xcb\x54\xab\x55\x3e\xf2\xf8\x47\xb8\
+\x7c\xf1\x12\xcf\x3e\xf5\x4d\xf6\x0c\x64\xd9\x7d\x5b\xca\xfa\xc6\
+\x3a\x85\x42\x01\x21\x04\x4b\x4b\x4b\x58\x96\x45\x92\x24\x7c\xe0\
+\x03\x1f\x60\x6a\x6a\x3b\x4f\x7f\xed\x1b\x34\xd3\x06\x83\x13\x2e\
+\xda\xe0\xe0\x20\x8e\xe3\x60\x18\x06\x53\x53\x53\x9c\x3b\x77\x8e\
+\x24\x49\x98\x99\x99\xe1\xe8\xd1\xbb\x39\x55\x3b\xc5\x5a\x63\x95\
+\xc1\xc1\x41\x14\x45\xe1\x95\x57\x5e\x61\x74\x74\x14\x80\xe1\xe1\
+\x61\x2e\x5d\xba\x44\x9a\xa6\xdc\x76\xdb\x6d\x64\xb3\x59\xbe\xfc\
+\x95\x2f\x73\xfd\xf5\xd7\x73\xe6\x4c\x16\xc3\x30\xfa\x57\xfb\xc0\
+\x81\x03\x5c\xbc\x78\x11\x80\xc3\x87\x0f\x33\x3e\x3e\xce\x2d\x77\
+\x1c\x61\x65\x65\x05\x2f\xb2\xd9\xb1\x63\x07\x69\x9a\x32\x34\x34\
+\xc4\xae\x5d\xbb\xf8\xca\x57\xbe\xd2\x9b\x25\x94\x4a\x25\x86\x86\
+\x86\x78\xf5\xd5\x57\x11\x9a\x24\x9f\xcf\x73\xfc\xf8\x71\xc6\xc6\
+\xc6\x68\x36\x9b\xe4\xf3\x79\xd6\xd6\xd6\x10\x42\x50\x2a\x95\xd8\
+\xbd\x7b\x37\x03\xf5\x0a\x95\x6a\x89\x72\xb9\x8c\x94\x92\x5a\xad\
+\x86\x65\x59\x0c\x0d\x0d\x11\x04\x01\x42\x08\x0a\x85\x02\x37\x5c\
+\x7f\x03\x19\x33\xc3\x99\xb3\x67\xd9\xbb\x77\x2f\x6b\x6b\x6b\x20\
+\xa0\x50\x28\x30\x3a\x3a\x4a\x36\x9b\xe5\xe4\xc9\x93\x00\xdc\x71\
+\xc7\x1d\x94\x4a\x25\x3a\x1d\x0b\xcf\xf3\x38\x79\xf2\x24\xe2\xc6\
+\x1b\x6f\xec\x03\x60\x8f\x85\xdb\xed\xb6\x55\x2a\x95\x8a\x41\x10\
+\xf4\xf9\xf3\xfb\x7d\x14\x45\xa1\xd3\xe9\xac\x0e\x0d\x0d\x15\x1d\
+\xc7\xc9\xf6\x10\xec\x7f\xf7\x89\xe3\x38\x0a\xc3\x30\xc8\xe7\xf3\
+\x85\xef\xc7\x9d\xdf\xcd\xda\x8a\xa2\x74\x3a\x9d\x8e\x28\x95\x4a\
+\xc5\xff\x53\xfb\x72\xb9\xcc\xa9\x53\xa7\x9e\xdd\xb9\x73\xe7\x51\
+\xcf\xf3\xf8\xdf\xc5\x22\xa5\x44\xd3\x34\x36\x36\x36\x18\x1c\x1c\
+\xb4\x82\x20\x28\xfe\x4b\x71\xf7\x62\x59\x5b\x5b\x3b\x36\x34\x34\
+\x74\xa4\xc7\xd6\xbd\x8f\xb6\x35\xae\x4d\x16\xc6\xb2\xac\x20\x9f\
+\xcf\x67\x15\x45\x91\x48\x90\x89\xd8\xc2\xb4\x9b\x8d\x05\xa4\x69\
+\x2a\xe2\x38\x8e\x3b\x9d\x0e\x3d\x20\x47\x0a\x64\x17\x53\x41\x91\
+\xfd\xb6\x9b\xc1\x48\xdf\xf7\xe3\x4c\x26\x13\x2b\x8a\x22\x85\x14\
+\x5d\x06\x15\x12\x94\xcd\x66\x5b\x58\xd8\xb2\x2c\xdf\xf7\xfd\x0d\
+\x21\x44\x19\x90\x24\xa2\xcb\xd9\xca\xb5\xb1\x48\x29\x85\xe7\x79\
+\x91\x94\x72\x61\x63\x63\x63\x5d\x4a\x19\x90\x8a\x2e\x27\xa7\x02\
+\x94\x2e\x0b\x6f\xc6\x21\x36\x9f\xdd\x0d\xcb\xb2\xb6\x9b\xa6\x19\
+\x0b\x90\x69\xb2\xd9\xd9\x26\x37\xb3\x25\x96\x20\x08\x94\x24\xe9\
+\x36\x50\xc4\x26\xbf\xcb\xcd\x64\xc2\xf8\xae\x21\xa4\xa7\x76\x0f\
+\xd4\x1d\x14\x96\x96\x96\x2e\xed\xd8\xb1\xe3\x80\xe7\x7a\x69\x98\
+\x73\xc9\xef\x08\x10\xae\x46\xd2\x36\x49\x2d\x1d\x19\x75\x77\x56\
+\x55\x55\x00\x72\x78\x78\x58\x64\x32\x19\x02\x11\xc2\x74\x8b\x52\
+\x41\x25\xee\xe8\xd0\xce\x90\x5a\x1a\x32\x51\x40\x82\xe7\x79\x72\
+\x71\x71\x31\x1a\x1b\x1b\x0b\x14\x45\x91\x8d\xcc\x06\x63\xbb\x35\
+\xa2\xa6\x86\x6c\x9b\x24\x8e\x0a\x49\xff\xea\x8a\x76\xbb\x1d\x04\
+\x41\x30\x36\x39\x31\x59\xf2\x93\x10\x75\x47\x9b\xac\xae\x93\x34\
+\x0d\x12\x4b\x47\x06\xdd\x7e\x01\x4c\xd3\xe4\xc9\x27\x9f\xbc\x70\
+\xe8\xd0\xa1\xba\x8c\x25\xab\xb9\x65\xb6\x1f\xd0\x08\xda\x20\xdb\
+\x19\x92\x8e\x01\xbe\x8a\x4c\xc1\x30\x0c\x8e\x1f\x3f\xbe\x6d\x62\
+\x62\x62\xde\x34\x4c\xa5\x15\xda\x72\xe0\x90\x8f\x96\xea\xc4\x0d\
+\x9d\xb4\xd3\x65\xf2\x6e\x92\x03\x61\x59\x56\x9c\x24\xc9\xc4\xf4\
+\xf4\x34\x96\xef\x93\xd9\x63\x51\xa8\x28\x04\x9d\x14\xad\xfe\x03\
+\x1b\xe8\x8a\x49\xf3\xc9\x2e\xf7\x19\x86\x40\x55\xd5\x01\xd3\x34\
+\x73\x9e\xe7\xa3\x6e\xf7\xa9\xdc\xee\xa0\x87\x45\xc2\x78\x0d\x25\
+\x36\x90\x81\x46\xe3\x8b\xdd\x1c\xdc\xe6\x2d\xae\x26\x49\x82\x9d\
+\xb1\x19\xbc\xbe\xc3\xee\xf1\xfd\x90\xa6\xcc\xad\x5c\x44\x55\x54\
+\x3a\xcf\xd4\x09\x17\x75\xd2\x34\x55\x54\x55\xcd\x69\x9a\x96\x17\
+\x42\xc0\x1e\x8b\x81\xdb\x35\x72\x69\x9d\x56\x7b\x1d\x21\x15\xc2\
+\x73\x15\xac\x13\x39\x84\x90\x68\x9a\x96\x7a\x9e\x07\x52\xb2\x21\
+\x5b\xec\xbf\xdf\x46\x4b\x32\x04\x6e\x03\x3d\xcd\x10\xb9\x02\xfb\
+\x78\x99\x60\x51\x47\xc9\x2a\x48\x29\x37\x1f\xba\xe0\xee\x5d\xa7\
+\x74\xc3\x00\x55\x75\x8a\x75\x6b\x0e\xcb\xb2\xd1\x3a\x55\x1a\x4f\
+\x14\xe9\xa5\xc6\x0c\xc3\xa8\xe8\xaa\x9e\xbf\x98\xac\xf2\xe6\xbb\
+\x73\x44\x81\x4f\x96\x12\x1d\x7b\x03\x43\xe4\xe8\x7c\xa3\x4c\xb8\
+\x6c\xf4\x72\x8d\x91\x4c\x25\x56\xea\x30\x7a\x38\xc0\x53\xda\xbc\
+\x71\xe7\x0f\xa2\x3c\xba\xfb\x71\x8a\xd5\x22\xb1\xec\xf2\xec\x26\
+\x0b\x4b\xdf\xf7\xf1\x7c\x9f\x54\x84\x4c\x72\x37\x1f\xbc\xf3\xbf\
+\xf2\xaf\xaf\xfb\x0d\xf6\x0c\x1d\x65\x78\xdb\x60\x9f\x26\x92\x24\
+\x91\xbd\x4c\x75\x9c\x46\x24\xcd\x0a\xf7\x8e\xbf\x93\x43\x85\xb7\
+\x72\xcf\xf6\x77\xf3\xa6\x5b\xde\x41\x78\x2d\x0b\xcb\xde\x71\xe2\
+\x34\xe1\xd1\xed\x1f\x61\x52\x79\x80\x07\x0f\xbc\x8b\xa3\x33\xef\
+\xc2\x11\x1b\x5b\x29\x47\xc6\x71\x8c\xe7\xfa\x84\x49\xc8\x48\x76\
+\x9a\x47\x26\x3e\xca\xcf\xdd\xfd\x49\xbc\x66\x9d\x1d\xd3\x53\x84\
+\xd2\xed\xf3\x6a\x8f\x85\x3d\xcf\xc5\x30\x54\xa6\xd5\xbb\x78\xcb\
+\xd4\xe3\x1c\xaa\xbc\x95\x5f\x79\xcb\xdf\x93\xe6\xec\xcd\x55\x84\
+\x8f\x94\x92\x30\x0c\xa5\xef\x7a\x44\x32\xc2\x73\x23\x3e\x7c\xfd\
+\x27\xb8\x7f\xf7\xbb\xf8\xd0\x1d\x7f\x48\x65\x34\x47\x24\x83\x3e\
+\x67\x4b\x29\xf1\x3d\x8f\x38\x89\x68\x76\x5a\xfc\xee\x43\x4f\xb3\
+\xb4\xbe\x86\x32\x5e\xd8\xc3\xc1\x91\x3b\x37\x07\xa4\xcb\xc2\x42\
+\x08\x3c\xcf\xc3\x0f\x7c\xc2\x38\xe0\xba\xa1\x5b\x79\x7e\xe1\xef\
+\x79\xe1\xe4\x09\x6e\x9f\x7a\x08\x4d\xd1\xfb\x4c\x99\x24\x09\x41\
+\x10\x74\x59\x38\x0a\x19\x2b\xee\x66\xb1\x73\x91\xf3\x6b\x27\xb9\
+\x6d\xfa\x01\x92\x34\x21\x0e\x63\x7c\xbf\x7b\x92\x5b\xdb\x67\xd4\
+\x3c\x95\xcc\x20\xaf\x7b\x2f\xb0\xbf\x7c\x3f\x3b\x87\x0e\x50\xd2\
+\xeb\xf8\xbe\x8b\xe7\x79\xc4\x71\x4c\x1c\xc7\xf8\x7e\xf7\x7b\x29\
+\x53\x21\x57\x4c\x78\xf6\xc4\xf3\x1c\x1c\xbd\x83\xdd\xb5\x9b\x70\
+\x03\xe7\x7b\x59\xd8\xf3\x51\x55\x15\xa7\x2d\x78\x71\xee\x9f\xc9\
+\x8a\x2a\x43\x03\x43\xa4\x49\x17\x41\x03\xdf\xef\x27\x13\x3c\xcf\
+\x43\x51\x15\x2e\x9f\xb3\x18\x1a\xc9\xe2\x47\x2e\x37\x4c\xdc\xc2\
+\x64\xe9\x3a\xfc\xb0\x1b\x47\x0f\x41\x3d\xdf\x27\x0a\x23\x34\x99\
+\x61\xb8\x3a\xc4\x46\x7a\x06\xcd\x09\x6c\xce\xae\xbc\x4a\x14\xc5\
+\xf8\x5e\xda\x7d\xa0\x43\x77\xc6\xf8\x01\x86\x14\xb8\xa1\xc5\x60\
+\x69\x02\x59\xc8\xf3\xfa\xfa\xb9\xfe\x76\x55\x55\xfb\x2c\x1c\xc7\
+\x31\x69\x92\xd2\xf4\xd7\x18\x2d\x3f\x4c\x73\x3d\x65\xc5\x9d\xc5\
+\x54\xb3\x44\x51\x44\x10\x24\x7d\x02\xe9\x65\x74\x75\x52\x14\x45\
+\xc1\x77\x25\x46\xce\x67\xfe\xd2\x02\x1b\xf6\x0a\x81\x6f\xf6\x5f\
+\x3c\x71\x1c\x77\x93\x09\x5a\xd2\x7d\x46\x27\x0a\x23\x03\x23\xbc\
+\x7c\xf9\x18\xb2\xa2\x40\xd2\x1d\xb4\x1e\xc3\x87\x61\x48\xe0\xfb\
+\x18\x42\xa5\x50\x30\x98\xa9\xed\xe7\xcc\xc2\x59\x4c\x91\x45\x11\
+\x4a\x3f\x23\xd4\xeb\x3b\xf6\x23\xc8\x40\xa9\x62\x92\x84\xda\x66\
+\xf6\x1a\x96\x3a\x97\x49\xe2\x6e\x06\x46\x8a\xb4\x8f\x7e\xb1\x1a\
+\x23\x45\x42\xe0\xc7\x04\xae\x8e\xf2\xcd\xf5\xbf\xc2\xc8\x4a\x82\
+\xd0\xef\xb2\xde\xe6\x95\xec\xcd\x30\x91\x6a\x1c\x6f\xfc\x2d\x39\
+\x6f\x86\xfc\xf8\x3a\x67\xed\x67\x71\x93\x36\x8e\xe3\xe0\x38\x4e\
+\xf7\x04\x3d\x0f\xdb\xb6\x09\xfc\x90\x38\xbf\xc8\x2b\xe7\xcf\xf0\
+\xc0\xf5\xf7\xf1\x77\x67\x7e\x9b\xb3\xad\x6f\x11\xc6\x21\x96\x65\
+\xe1\x38\x4e\x3f\x1b\xe3\xba\x2e\x8a\x96\xf0\xb5\x8b\x9f\xe1\x67\
+\xee\xff\x35\x3e\xf3\xea\x6f\x73\x39\x78\x8e\xac\x56\xc0\x71\x5d\
+\x1c\xc7\xe9\x5f\x18\xcf\x75\x09\xc3\x88\x65\xfb\x75\xd6\x5b\x2d\
+\x28\xb4\x48\xab\xb3\x04\x69\x17\xee\x1d\xc7\xe9\x67\x58\x1c\xc7\
+\xc1\xea\x58\x24\x69\xca\x7c\xf4\x6d\x34\x91\xc1\xcf\x5d\xe4\x77\
+\xbe\xf9\x33\xa8\x9a\x8a\x65\x59\x58\x1d\xab\x3f\xd8\xae\xe3\x12\
+\xc7\x29\x53\x53\x15\xbe\xfc\xca\xe7\x19\x2a\x8d\xf0\x3b\x2f\xfe\
+\x9b\xae\x26\x12\xfb\x38\x8e\xd3\xcf\x22\x59\x9d\x0e\xae\xeb\x91\
+\xcf\x65\xf9\xb5\xa7\xdf\xcf\x2f\xdd\xf3\xe7\x68\xae\xb2\xce\xdc\
+\x85\x39\x96\xce\xb5\x08\xac\x84\x84\x04\x80\x66\xb3\x49\xab\xd3\
+\x21\xef\xe6\x09\x55\x95\xbf\xbb\xfc\x6b\xbc\xe5\xf0\x3b\x99\xbb\
+\xf8\x1a\x6b\x2f\x49\xda\xed\x4e\x7f\x8d\xd8\x9b\x85\x94\x14\x14\
+\xd5\xe0\x78\xe7\x53\xd4\xd7\x14\xda\xd1\x32\xf3\x5f\xd9\x60\xfe\
+\x44\x9b\xc8\x4e\xbf\x2f\x0b\x2f\xf8\xdf\xe1\xb9\xa5\xff\x45\xa0\
+\xd9\x5c\x7a\xfd\x3c\x57\x4e\x3b\xb4\x9a\x1e\x42\xe9\xb2\xb0\xef\
+\xfb\xc4\x41\x44\xa0\x4b\xfc\x34\xc7\xb3\x4b\x7f\xcd\xbd\x7b\x7e\
+\x00\x99\x6b\xf1\x9d\x6f\xaf\xb0\x7c\xce\xc2\xe9\x44\xe8\x66\x77\
+\xf6\xd8\xb6\x8d\xdd\xb1\xc9\xa5\x05\x7c\x75\x9d\x63\xf6\x5f\xd3\
+\xf1\x2c\x5e\xfe\xce\x2c\xcb\xaf\x04\x74\x5a\x0e\xba\xa9\xf6\x19\
+\xde\x6a\xb6\xb1\x4b\x92\x58\x96\xf9\x8e\xfd\xf7\x74\x16\x6f\x60\
+\xae\xf3\x2a\xeb\xb3\x0e\x97\xbf\xd5\x20\x89\x52\xb2\xd9\x2c\x69\
+\x9a\xd2\xb1\x2c\xbc\x44\x92\x92\x65\x39\x7e\x95\x3f\x7c\xf9\xe7\
+\x10\xe3\x43\x53\x52\x48\x05\xbd\xd0\x5d\xf7\xe4\xf3\x79\xd6\xd7\
+\xd7\xcf\x55\xab\xd5\xdd\xaa\xa2\x62\x4e\x47\xd4\x76\x1a\x6c\x9c\
+\x0e\x58\x3e\xe5\x90\x76\x34\xf4\x9c\x82\x96\xed\xb2\x70\x1c\xc7\
+\xb6\xaa\xaa\x66\x2e\x97\xd3\x63\x23\x62\xec\x1e\x83\x60\x21\x61\
+\xe9\x94\x83\x73\x05\xb4\x8c\x40\xcf\x8a\x3e\x0b\x2b\x8a\x12\xa8\
+\xaa\x5a\xc8\xe5\x72\x18\x87\x22\x6a\x15\x9d\xc5\x93\x0e\x1b\xa7\
+\x62\x44\x22\xd0\x73\x02\x61\x80\x4c\x25\x85\x42\xa1\xb3\xb1\xb1\
+\x21\x86\x86\x86\x8a\x9d\xd8\xe6\xd0\x0f\x17\x59\x3b\x15\xb2\x7c\
+\xd2\xc6\x5f\x56\x50\x0c\x30\xf2\x5d\x7d\xa2\x5a\xad\x32\x3b\x3b\
+\xfb\xec\x8e\x1d\x3b\x8e\x8a\x54\x90\x4e\x38\xe4\x32\x1a\x8b\x2f\
+\x3b\x78\xeb\x09\xba\xa9\xa2\x1a\x20\xb4\xee\xda\x2e\x0c\x43\x4a\
+\xa5\x92\x15\x87\x71\xb1\x63\x46\xdc\xfc\xd6\x22\xab\xaf\xf9\xac\
+\x9e\xf6\xf0\x57\xba\xed\x8c\x42\x97\x85\x4d\xd3\xc4\x75\xdd\xf5\
+\x7c\x3e\x5f\xcf\x97\x8b\x54\x0e\x44\x74\xe6\x23\x5a\x97\x43\xb4\
+\x3b\xee\xbd\x05\xc7\x71\xa8\x56\xab\x5c\xb9\x72\xa5\xa7\x0b\xf3\
+\xe0\x83\x0f\x72\xf0\xe0\x41\x3a\x2d\x8b\x63\xdf\x3a\xce\xd8\x48\
+\x96\xf1\x4c\x83\x62\xa9\xc0\xd2\xe2\x12\xcd\x66\xb3\xa7\x0b\x33\
+\x3d\x3d\xcd\x23\x8f\x3c\xc2\xf0\xd0\x30\xff\xf3\x2f\x3f\xc5\xde\
+\xc9\x09\x4a\x13\x0b\x8c\xde\x3a\xca\xca\xca\x0a\x61\x18\x92\xcb\
+\xe5\x38\x79\xf2\x24\x69\x9a\xf2\xde\xf7\xbe\x97\x83\x07\x0f\xf2\
+\x99\x4f\xfd\x0d\x19\x37\x8b\x9a\x9b\xe7\xae\x1f\x9e\xdc\xd4\x90\
+\x0d\x54\x55\xe3\xdc\xb9\x73\x84\x61\xc8\xe1\xc3\x87\x79\xdb\xdb\
+\xde\x46\x12\x27\x9c\x78\xf9\x55\x0a\x6a\x8b\x6d\xfb\x7d\xb4\x1b\
+\xbb\x69\xfc\xd7\x5f\x7f\x1d\x45\x51\x70\x5d\x17\x55\x55\x79\xe3\
+\x1b\xdf\xc8\xdb\x7f\xa8\xcb\xc2\xaf\x9e\x7c\x95\xd1\x1b\x54\x86\
+\x86\x07\x39\x77\xf6\x1c\xae\xeb\x92\xcb\xe5\x68\xb5\x5a\x7d\x16\
+\xfe\xc9\x9f\xfc\x49\x56\x96\x57\x78\xfa\xc9\xe7\xd8\x3b\x58\x65\
+\xfb\xf5\x1e\xcd\x56\x83\x72\xb9\x8c\xa0\xcb\xc2\x8d\x46\x03\x21\
+\x04\x1f\xff\xf8\xc7\x11\x42\xf0\xd4\xd7\x9e\x21\x2d\x27\x5c\xc8\
+\x9c\x47\x1b\x1b\x1b\xe3\xd2\xa5\x4b\x14\x8b\x45\xb6\x6d\xdb\xc6\
+\xe5\xcb\x97\x49\x92\x84\x3d\x7b\xf6\xf0\xf6\xb7\xbf\x9d\xb9\xb9\
+\x39\x56\xd7\x57\xa8\x54\x2a\xb8\xae\xcb\xf2\xf2\x32\x03\x03\x03\
+\x58\x96\x45\xa5\x52\xe9\xeb\xab\xef\x78\xc7\x3b\x50\x14\x85\x63\
+\xc7\x8f\x31\x3d\x3d\x4d\xa1\x9c\x47\xd7\x75\xb2\xd9\x2c\xcb\xcb\
+\xcb\xec\xd9\xb3\x87\xd7\x5e\x7b\x8d\x28\x8a\xb8\xe7\x9e\x7b\xb8\
+\xe9\xa6\x9b\x38\x7f\xfe\x3c\xcd\x66\x13\xcb\x6d\x33\x39\x39\xd9\
+\xcf\x5a\x6f\xdf\xbe\xbd\xcf\xcd\xdb\xb7\x6f\xef\xeb\xbc\xae\xe7\
+\xb2\xb6\xb6\x46\xa5\x52\xe1\xc5\x17\x5f\x64\x68\x70\x88\x6a\xb5\
+\xda\x17\xfc\x01\x6a\xb5\x1a\x07\xf6\x1f\xe0\xf9\x6f\x3c\x4f\xb9\
+\x5a\xa2\x58\x2c\x02\x30\x30\x30\x80\xeb\xba\x94\xcb\x65\x7a\xa8\
+\x57\x2e\x97\x79\xd3\x9b\xde\xc4\xf1\xe3\xc7\x39\x7b\xee\x2c\x3b\
+\x77\xee\xc4\x75\x5d\x2e\x5c\xb8\x40\x3e\x9f\xa7\x56\xab\x21\x84\
+\xa0\xd5\x6a\x91\xa6\x29\x53\x53\x53\x84\x61\xc8\xd0\x68\x1d\x29\
+\x25\x8b\x4b\x0b\x88\x1b\x6e\xb8\xe1\x1a\x16\xce\x66\xb3\xcc\xce\
+\xce\x9e\x9b\x9e\x9e\xde\xdd\x4b\x7c\xaa\xaa\xfa\x3d\x9a\x6d\x0f\
+\xb7\x3c\xcf\xb3\x33\x99\x8c\xa9\xaa\xaa\xbe\xb5\xcd\xa6\x7c\xd8\
+\x6f\x9b\x24\x09\x52\xca\x28\x8a\xa2\x40\x55\xd5\x42\x3e\x9f\x27\
+\x8e\xe3\x7e\x3f\xbd\x37\x63\xef\x99\xaa\x28\x0a\xba\xae\x77\x1a\
+\x8d\x86\xa8\xd5\x6a\x45\xdf\xf7\xd1\x75\xbd\xdf\x56\x51\x14\xe2\
+\x38\x46\x51\x14\x92\x24\xa1\x56\xab\x71\xea\xd4\xa9\x67\xa7\xa6\
+\xa6\x8e\xb6\xdb\x6d\xb2\xd9\xec\x35\xcc\xba\xf5\xbb\x61\x18\xac\
+\xae\xae\x52\xaf\xd7\xad\x30\x0c\x8b\x3d\x51\xbe\xa7\x25\xf7\x74\
+\xe4\x5e\x4c\x9b\xcc\xbf\x5e\x2c\x16\xeb\x61\x18\x62\x18\x46\x5f\
+\x17\xd7\x0a\x85\x62\x2a\xb6\xf0\x6a\x18\x86\x8a\x10\x42\xc9\xe5\
+\x72\x64\x32\x19\xc4\x26\xdb\xf6\xf4\xd2\x4d\x61\xb6\x1f\x94\xeb\
+\xba\x81\xa6\x69\x6a\x26\x93\x51\x85\x10\x90\x6e\x8a\xf0\xdf\xc5\
+\xcd\x9b\x4b\x9f\x68\x7d\x7d\xdd\xaf\xd7\xeb\x79\x21\x84\xcc\x9a\
+\x59\xd2\x64\x53\x0f\xde\xc2\xc2\xbd\xcf\xfa\xfa\x7a\x92\xcd\x66\
+\xf5\x4c\x26\x93\x66\x32\x99\x2e\x93\xb3\x45\x3f\xde\xd2\x7e\x73\
+\xad\x16\x46\x51\x44\xbe\x90\x4f\x45\xda\xe3\x6c\xfa\x4b\xb3\x5e\
+\x2c\x9b\x59\x74\x99\x24\x49\x52\x2c\x16\xbb\x2a\xf6\xbf\xd0\xb7\
+\x65\x59\x22\x08\x02\xaf\x54\x2a\xc5\xa6\x69\x4a\x52\x90\x49\x57\
+\x6f\xd6\x46\x76\x97\x93\xc4\xd2\x20\xee\xbf\x14\x12\xdb\xb6\x6b\
+\x13\x13\x13\x84\x51\x44\x52\xf4\xc8\x8d\xc4\xa4\xbe\x02\xbe\x4e\
+\xea\xa8\xa4\xae\xda\xbf\xa2\xb6\x6d\xaf\xd7\xeb\xf5\x9a\x69\x9a\
+\x5a\x24\x62\xc4\xa8\x4d\x2e\xab\x75\xb5\x5b\xd7\x20\xb1\x55\x44\
+\xd2\x1d\x1d\xcf\xf3\x9c\x20\x08\xd6\xea\xf5\xfa\x80\xaa\xaa\x69\
+\x3b\xd3\x64\x68\x52\x25\x76\x14\xf0\x74\x12\x57\x45\xfa\x2a\x3d\
+\x81\x3e\x0c\xc3\x28\x9b\xcd\x16\x6b\xb5\x5a\xe2\xa4\x1e\xa5\x5d\
+\x01\x24\x0a\xa9\xab\x76\xdb\xdb\x2a\x24\x0a\x20\x31\x4d\x53\x5c\
+\xba\x74\x29\x3e\x78\xf0\x20\x69\x94\x26\x8d\xfc\x2a\xdb\x76\x69\
+\x84\x36\xe0\x99\xa4\xae\x42\xea\xe8\xc8\x50\x60\x9a\x26\xed\x76\
+\x3b\x19\x1e\x1e\x8e\x73\x99\x6c\xd2\x0c\x6d\x59\xdb\x17\x23\xd2\
+\x6e\xdf\xd2\xd3\x49\x6d\x15\x19\x2b\x28\xaa\xc0\x30\x0c\xc5\xf7\
+\x7d\x67\xef\x9e\xbd\x81\x1f\x86\xa9\x1c\xb6\x29\xd6\x15\x12\x4f\
+\xa2\x95\x1e\x5c\xd5\x55\x55\xa5\xf1\x85\x1a\xb1\xd5\x65\x5b\x21\
+\x84\x6e\xdb\x36\x96\xef\x92\x8c\xad\x91\xd9\x1f\xb1\x2d\x3f\xcd\
+\x4a\xeb\x75\x34\xa9\x90\xba\x3a\x8d\x2f\xd6\x7a\x6f\xb3\x2c\x90\
+\x49\xd3\x54\xef\x18\x16\x43\x47\x9a\x8c\x56\x07\x51\x11\x34\x3a\
+\xcb\xe8\x19\x95\x8d\x2f\xd6\x88\x9b\x1a\x49\x92\x64\x85\x10\x85\
+\x34\x4d\x55\x40\xf5\x77\xac\x53\xbe\x25\x4b\x4d\x1f\x67\xa9\x79\
+\x05\x45\xa8\x78\xa7\x0b\xd8\xaf\x14\x00\x89\xae\xeb\x39\x40\x13\
+\x09\x2c\x69\xeb\x6c\xbf\x4b\x62\xa4\x25\x64\x9a\x10\x04\x6d\xd2\
+\x40\xa1\xf3\x62\x89\x60\xde\x40\xcd\xa9\x24\x49\x92\xf3\x3c\x8f\
+\xd4\x4d\xf5\xd5\xa9\x39\xa6\x0f\x0e\x30\xae\x4d\xb3\x62\xcd\x11\
+\x79\x29\x71\x5b\x63\xe3\xcb\x15\xc2\x30\x42\x08\xa1\xab\xaa\x1a\
+\x93\xa2\x9d\xf2\x17\x78\xeb\xd1\x3c\x22\x36\x30\x44\x86\xb6\xbd\
+\x8e\xae\x99\xb4\x9e\x2a\x13\x2e\x19\xbd\x5b\xba\x1e\x45\x51\x7e\
+\xd5\xea\x30\xfd\x88\x8d\x5a\xf6\x98\x2a\xed\x46\x79\x64\xe7\xe3\
+\x0c\x54\x86\x08\x93\xb0\xbf\xa2\x07\x64\x10\x04\x84\x41\x48\xac\
+\xfa\xdc\x5e\x7b\x37\x77\x6f\x7f\x27\xff\xe9\x0d\x7f\xcb\x74\xe5\
+\x36\x06\xea\xa5\xfe\x83\xbb\xc7\x94\x41\x10\x10\xcb\x90\xd6\x1a\
+\xbc\xeb\xe0\xcf\xf3\xd0\xc4\xe3\x1c\x9a\x38\xca\xdd\x07\x1f\xc6\
+\x0f\x9d\x5e\x7b\xd9\xd3\x91\xc3\x30\x24\x8c\x23\xde\x3c\xf3\x41\
+\x86\xd2\xdb\x79\xd3\x0d\xef\xe2\xc8\xe8\x0f\xe1\xd2\xc2\xdf\x8c\
+\xa3\xc7\xc2\xbe\x1f\x90\xc8\x88\x89\x81\xdd\xfc\xc8\xde\x7f\xcf\
+\xbf\x3b\xfa\xdf\x59\x9e\xd7\xd9\x31\x39\x43\x94\xfa\x04\xfe\x55\
+\x55\xae\xcb\xc2\x1e\xba\xa1\x32\x63\x1c\xe5\x8d\x13\xff\x86\xbd\
+\x85\x87\xf8\xc5\x37\x7e\x92\xd8\xb0\xfb\x9a\xf3\xa6\x2a\x27\x7d\
+\xcf\x27\x25\xc6\x0f\x42\xde\x77\xf0\x0f\xb9\x77\xe7\x3b\xf9\xe0\
+\xad\x7f\x40\xa9\x96\x23\x96\x5d\x1a\xbb\xaa\x26\xfa\x04\x51\x48\
+\xa2\x7a\xdc\x5b\xfa\x59\xf6\x0e\xde\x8a\xb2\x7f\xe4\x30\x23\x95\
+\xb1\x2e\x1d\x78\x2e\xfe\x26\x27\xf6\xde\x88\x71\x1c\xb0\xb7\x7e\
+\x84\xaf\x5c\xfc\x73\x2e\x5f\x59\xe4\xd0\xb6\xdb\x50\x64\x77\xd9\
+\xd0\xe3\xd5\x3e\x0b\x87\x21\xbb\xaa\x37\x71\x7e\xfd\x15\x8e\xcd\
+\x3d\xc9\x1b\xa6\xff\x35\xba\x92\x21\x0c\xbb\xf6\xb3\x5e\xdf\x3d\
+\x12\xc9\xe9\x45\x8a\x66\x95\x0b\xce\xb3\x5c\x57\xb8\x9f\xd1\xca\
+\x24\x06\x19\x3c\xcf\xed\xaa\x7c\x69\xda\xd7\x6e\xd3\x24\x25\xa3\
+\x64\x49\xf4\x16\x4f\x7c\xfb\x49\x0e\x8d\xdc\x41\x2d\xb3\x0d\x3f\
+\xf0\xfa\x71\xf7\x58\xd8\x73\x5d\x34\x55\xc5\x6a\xc2\x4b\x8b\x4f\
+\x52\x54\x87\x19\xa9\x0e\x41\x2a\xf0\x3d\x1f\xdf\xef\x0a\xeb\x41\
+\x18\xe0\x79\x2e\x42\x11\x5c\x3c\x63\x31\x34\x6a\xe0\x86\x1d\x0e\
+\x8e\xdf\x44\xc5\x1c\xee\x8a\xf4\x5b\x58\xd8\x75\x5d\xc2\x30\xa0\
+\xdd\xf6\xf8\xf1\x87\xde\xcd\x4b\xcb\x5f\x41\xf1\x43\x1f\x3f\xec\
+\x66\x1c\xc2\x4d\x1f\xdd\x56\x5d\x18\x54\xfc\xd8\x61\xa8\x30\xc1\
+\x40\x7e\x80\xa6\xdd\x04\xa1\x74\x99\x73\x13\x71\xba\xac\x1b\x90\
+\xc6\x29\x4e\xd8\x61\x20\x37\x48\xd1\xac\xd2\x8e\x56\x51\x95\xab\
+\xbe\xc2\x28\x8a\xfa\xc9\x84\xee\xec\x4d\x11\x08\x94\x24\x4b\xa2\
+\xdb\xb8\x5e\x80\x17\xba\x84\xc1\xb5\x7d\xf7\x66\x8c\x50\x54\x34\
+\x91\x65\x64\x60\x94\x75\x6b\x0d\x2f\xb2\x49\xe2\x84\x30\xb8\xba\
+\x8c\x09\xc2\x00\xcf\xf7\x51\x84\x4a\xbe\xa0\x33\x53\x3f\x84\x15\
+\x36\x50\x31\x00\x05\x7f\x73\x06\x02\x44\x61\x57\x17\x46\x42\xa9\
+\x6c\x92\x04\x1a\x9a\xa2\x23\x53\x08\x22\x97\x24\x4e\xfa\x62\x7a\
+\x6f\x4c\xa2\x28\xc2\xd4\x35\xae\x2c\x2f\x51\xcc\x54\xd1\x3e\x77\
+\xf1\xe3\x78\xda\x3a\x41\xe0\xe3\xba\x29\x19\x99\x5e\x75\x26\xc4\
+\x11\x65\x25\xcb\x17\x2e\xff\x2e\x3f\x7d\xf8\xe3\x3c\xb9\xf8\xdf\
+\x99\xeb\x9c\xc7\x4f\xec\x2e\xcb\x6e\x2e\x21\x7a\x59\x16\x19\x43\
+\x98\x9f\xc3\xee\x24\x1c\xd9\x73\x23\x7f\x73\xea\xb7\xa8\x0c\x16\
+\x88\xa2\x18\xd7\x0d\x89\xe3\xb8\x6f\x91\x00\xc8\x18\x0a\x4f\x5c\
+\xf8\x5f\x7c\xe4\xde\xff\xc2\x5f\x9c\xfa\x45\xe2\x58\xa2\xa2\xe1\
+\xba\x5d\x59\x53\xd7\xf5\x6e\xf0\x91\x24\x4d\x25\x0b\xed\x0b\x2c\
+\x8a\x55\x4a\x25\x03\x6d\x78\x8e\x85\xb6\x4e\x1c\x77\x6d\x19\x99\
+\x9c\xd9\x8d\xdb\xf5\x70\x2d\x17\x43\x6a\x5c\x09\x5f\x62\xc6\xbb\
+\x81\x96\xf6\x1a\xbf\xf9\x8d\x0f\xa0\xeb\x1a\xb6\xd3\x46\x57\xf5\
+\xbe\xb0\x1e\xba\x01\x69\x51\x32\x35\x35\xc0\x57\x4f\x7e\x81\x99\
+\xc9\x51\x7e\xfd\xf9\x1f\x27\x10\x36\x51\x1c\xe1\xba\x11\xaa\xae\
+\x5c\xbd\x2b\xe3\x88\x72\xa1\xcc\xef\x7c\xf3\x71\x3e\x72\xf4\xd7\
+\xd1\x6c\x7d\x99\xf5\xc5\x16\x2b\xaf\x37\x89\x83\x94\x5c\xd4\xd5\
+\x40\x9b\xcd\x26\x7e\x12\x91\x77\x73\x84\xea\x3a\x7f\xf0\xed\x8f\
+\x72\xc3\xcc\x8d\xb4\x5a\x57\x38\xff\x4f\x01\xad\x96\xdb\xd7\x85\
+\xdb\xed\x36\x71\x1c\x43\x4e\x20\x45\x95\xcf\x5f\xfe\x6f\x3c\x9c\
+\xf9\x57\x34\xd3\x79\x16\x8f\xe9\xac\xce\x36\x89\x9c\xee\xba\x4a\
+\xd3\xb4\xbe\xff\x26\x17\xe5\x58\x8e\x5e\xe5\xef\xce\xfe\x0e\x8e\
+\x6c\xd2\xf6\x9a\x2c\x5d\xb4\x68\x6e\x61\x61\xcf\xf3\x48\xfc\x98\
+\x70\x50\xe0\xcb\x0c\x5f\x5f\xf8\x53\x0e\x6b\x47\x49\x0b\x1d\xe6\
+\x2f\x84\x2c\x9c\x6e\xe1\xb5\x63\x34\xa3\xbb\x32\xb0\x2c\xab\xcb\
+\xc2\x71\x81\x40\x59\xe3\x45\xfb\x2f\x48\x8c\x80\x85\x53\xeb\xbc\
+\xfe\xb4\x4b\xa7\xe9\x7e\x17\x0b\x77\xe8\x14\x52\x62\x4a\x1c\x6b\
+\x7e\x86\xf9\x78\x27\x4d\xed\x32\xeb\x97\x5c\x2e\x7c\xa3\x2b\x30\
+\x65\x32\x19\x92\x24\x61\x63\xa3\x41\x47\x26\x04\xa1\x8e\xa5\xbc\
+\xce\xc7\x9f\xfe\x08\x62\xfb\xc4\xb4\x4c\x3c\xc8\x54\xba\x9d\xe6\
+\x72\x39\xa2\x28\xb2\xa4\x94\x45\xdd\x30\x30\x27\x13\x8a\x83\x2a\
+\xf6\x52\x44\x63\xd6\x23\x6a\xa8\x68\x86\x82\x9a\xe9\x2f\x90\xe7\
+\x34\x4d\x1b\x30\x4d\xb3\x18\xeb\x11\x43\x87\x0d\xe2\x46\xc2\xc6\
+\x15\x07\x7f\x59\x25\xf1\x25\x66\x59\x25\x4d\x13\x00\x0b\x68\x1a\
+\x86\x31\xa9\x69\x1a\xe6\x9e\x84\x72\x51\xa7\x31\xe7\x61\xcf\x27\
+\xf8\x1b\xa0\xe7\x15\x14\xbd\x6b\x6f\x2b\x16\x8b\x96\xe7\x79\xc5\
+\x8c\x61\xe2\x19\x01\x33\x77\xe6\x68\xcf\x85\x34\xe7\x5d\xfc\x55\
+\x95\xd8\x97\x64\x4a\x57\x59\x78\x6e\x6e\xee\xd9\x89\x89\x89\xa3\
+\x49\x94\xa2\x8c\x85\xe4\x73\x2a\x8d\xd7\x03\xac\x85\x10\x81\x8a\
+\x66\x8a\x4d\x5b\x9e\x4a\x10\x04\x94\xcb\x65\x2b\x0a\xc2\xa2\x65\
+\xc4\xec\xbf\xa7\x40\x73\x36\xc0\x5a\x0a\x70\x16\x24\x69\x04\x66\
+\x45\x21\x4d\xba\xba\xb0\xe7\x79\xeb\x86\x61\xd4\x51\x75\x26\xef\
+\xd6\x88\xec\x14\x77\x2d\x46\x3b\x72\xcb\x4d\x34\x5b\x4d\x0a\x85\
+\x02\xed\x76\x9b\x20\x08\x58\x58\x58\xe0\xb1\xc7\x1e\x23\x9f\xcf\
+\x93\x84\x29\x2f\xbd\xfc\x32\x5a\x4d\xc5\xcd\x39\x28\xaa\x82\xe3\
+\x38\xac\xae\xae\x52\xad\x56\x39\x7b\xf6\x2c\x33\x33\x33\xdc\x7f\
+\xff\xfd\x0c\x0f\x0d\xf3\xe9\xff\xf9\x19\x76\x4d\x4d\xb0\xe0\x2e\
+\xb0\xed\xe0\x28\x1b\x8d\x0d\x6c\xdb\xa6\x52\xa9\xf0\xca\x2b\xaf\
+\x20\xa5\xe4\x7d\xef\x7b\x1f\xf5\x7a\x9d\x27\xbe\xf2\x35\x74\x0c\
+\x32\xc6\x22\xe3\xf7\x8c\xb1\xba\xb6\x82\xd1\xb5\xa9\xf5\xfd\xda\
+\x77\xde\x79\x27\x37\x1e\x3e\x8c\xa1\xe9\x7c\xfb\x5b\x2f\x33\x5c\
+\x0a\x68\x8f\xb7\xd1\xa6\x55\xaa\xd5\x2a\x67\xce\x9c\x21\x93\xc9\
+\x6c\x5a\x36\x34\xee\xbb\xef\x3e\x1e\x7d\xf3\xa3\xbc\xf0\x8d\x17\
+\x79\xe9\xa5\x97\x98\xda\x97\xa1\x7c\x7b\x89\xd9\xd9\x59\x2c\xcb\
+\xa2\x5c\x2e\xb3\xbe\xbe\xce\xd2\xd2\x12\xd5\x6a\x95\x77\xbf\xfb\
+\xdd\x34\x36\x36\x78\xe6\xa9\xe7\xd9\x57\x1f\xc0\xcf\x7a\x34\x06\
+\x1a\x0c\x0e\x0e\x12\x86\x21\x2b\x2b\x2b\xb4\xdb\x6d\x3c\xcf\xe3\
+\xc3\x1f\xfe\x30\x99\x4c\x86\x57\x5f\x39\x4d\x4b\x69\xe2\x97\x3d\
+\xb4\xa9\xe9\x29\xdc\x53\x2e\x9a\xa6\x31\x33\x33\xc3\x99\x33\x67\
+\x48\xd3\x94\x5d\xbb\x76\xf1\xc8\x23\x8f\xf0\xe2\x8b\x2f\xb2\xde\
+\x5c\xa3\x56\xab\x21\xa5\xe4\xfc\xf9\xf3\xd4\xeb\x75\x3c\xcf\x63\
+\x60\x60\xa0\x6f\x9b\x7d\xec\xb1\xc7\xf0\x7d\x9f\x13\x27\x4f\x30\
+\x33\x33\x43\xa1\x94\xa7\x5c\x2e\x53\x1f\xac\x73\xfa\xf4\x69\x6e\
+\xba\xe9\x26\x4e\x9c\x38\x41\x10\x04\xdc\x7f\xff\xfd\x4c\x4d\x4d\
+\xd1\x6e\xb7\xd9\xd8\xd8\xc0\x0b\x1d\xf6\xee\xdb\x0b\x02\x5c\xd7\
+\x65\xf7\xee\xdd\xcc\xcf\xcf\x03\xb0\x6d\xdb\x36\xde\xf9\x8e\x77\
+\xe0\x79\x1e\x17\x2e\x5e\x40\xd7\xab\xec\x1f\xb8\x8e\x6f\x7f\xfb\
+\xdb\xd4\x6a\x35\xea\xf5\x3a\xba\xae\xf7\xb3\xe3\xbb\x77\xef\xe6\
+\xbe\x7b\xef\xe3\xe4\x89\x93\xd4\x06\xab\x98\xa6\x49\xb9\x5c\xa6\
+\xd5\x6a\xf5\x2f\xa4\x65\x59\x00\x94\xcb\x65\xde\xf6\xb6\xb7\xf1\
+\xc2\x0b\x2f\x70\xfe\xc2\x05\xf6\xee\xdd\x8b\x65\x59\x5c\xbc\x78\
+\x91\x81\x81\x01\x4a\xa5\x12\xa6\x69\xf2\xda\x6b\xaf\x21\xa5\xe4\
+\xc8\x91\x23\x4c\x4c\x4c\xf4\x66\x24\xaf\xbd\xf6\x5a\xd7\x23\xdd\
+\x63\xbf\x28\x8a\xc8\x66\xb3\x58\x96\x65\x65\x32\x99\xe2\xb6\x6d\
+\xdb\x58\x5a\x5a\x42\xd3\xb4\x1e\xcb\xf6\x59\xb4\xb7\x8f\xeb\xba\
+\x73\xd9\x6c\x76\x60\x64\x64\xa4\xd8\x4b\x3e\xf6\xb6\xa7\x69\xda\
+\xff\xbe\xe9\xdf\xb3\xc2\x30\x6c\xe6\xf3\xf9\xc9\xf1\xf1\x71\x16\
+\x17\x17\x7b\x0b\xf7\xee\x33\x74\x93\xa3\x7b\x8c\xab\x69\x9a\xe5\
+\xba\x6e\x71\x66\x66\xa6\xef\x70\x48\xd3\xb4\xcf\xca\x3d\x96\x4e\
+\x92\x84\x6a\xb5\xda\x67\xe1\x9e\x51\x60\x2b\xe3\xf7\x72\x97\xbd\
+\x9c\x64\xa3\xd1\x60\x68\x68\xc8\xca\xe5\x72\xc5\xad\x2b\x84\xad\
+\xb1\xf7\x58\x5e\x51\x14\xda\xed\xf6\x7a\xb5\x5a\xad\xd7\x6a\x35\
+\x9a\xcd\x66\x9f\x99\xb5\x6c\x26\x1b\xf4\x98\x6f\xf3\xf9\x27\x6d\
+\xdb\x6e\xd4\xeb\x75\xa3\xd1\x68\x90\xcd\xe6\x20\x05\x5d\xdd\xc2\
+\xc1\x5b\x18\xdd\xb6\x6d\x3f\x93\xc9\x48\xc7\x71\x10\x42\x90\x35\
+\x73\x7d\xdf\x72\x9f\x27\xaf\xb2\xb0\xf0\x3c\x8f\x4c\x26\x13\xae\
+\xaf\xaf\xcb\x6c\x26\x4b\x9a\x82\x40\xa2\x6b\xc6\x35\xcc\x2a\x13\
+\x6a\x82\x26\x00\x00\x1f\x45\x49\x44\x41\x54\x84\x60\x75\x75\xd5\
+\xca\xe5\x72\x99\x76\xbb\xad\x17\x8b\xc5\x2e\x93\x7f\x9f\x7e\x7b\
+\x03\x93\xa6\x69\x1b\xe8\x14\x8b\xc5\x10\x49\xbf\xfd\x77\xf3\xb0\
+\xaa\xaa\x04\x41\x10\x85\x61\xa8\xab\xaa\x6a\x02\x52\x53\x74\x34\
+\x45\xbf\xf6\x1c\x05\x08\x04\xb6\x6d\x8b\x24\x49\x56\x72\xb9\x5c\
+\xd9\xb6\xed\xd4\xd0\xcd\xbe\x9c\xaa\x8d\xec\x2d\x99\xf1\x86\x81\
+\x48\x05\xa8\x5d\x9d\xe0\xf2\xe5\xcb\xcd\xb1\xb1\xb1\xed\x9e\xe7\
+\x93\x16\x3d\xb2\x63\x11\x69\x92\x82\xab\x93\xb4\x32\x24\x2d\xad\
+\xef\x91\x76\x1c\xa7\x30\x31\x31\xa1\xaa\xaa\x4a\xac\x24\x24\xdb\
+\xda\x94\xcb\x2a\x49\x24\x51\x82\x0c\x51\x43\x43\x3a\x3a\x02\x81\
+\xe3\x38\xba\xe7\x79\xa5\x7a\xbd\x6e\xa8\xaa\x4a\x33\xdb\x60\x62\
+\x87\x4e\xe4\x27\xc8\x4e\x96\xa4\xad\x21\x5d\xb5\x9f\xf4\x74\x5d\
+\x37\xc9\x64\x32\xf6\xf6\xc9\xc9\x01\x37\x0e\xc8\xef\x75\x50\x84\
+\x20\x75\x55\xd2\x8e\x49\xd2\xd4\x21\xa5\xeb\x91\x36\x0c\xce\x9c\
+\x39\xa3\x4f\x4c\x4c\x94\x64\x22\x69\xe6\x36\x18\x99\xd6\x88\xfc\
+\x14\x6c\x93\xa4\xad\x93\x74\xba\x71\x1b\x86\xce\xca\xca\x0a\x43\
+\x43\x43\xcd\x5c\x36\x67\xac\x07\x1d\x86\x0f\x74\x0d\xec\xa9\xab\
+\x20\x2d\x93\x68\xa3\x1b\xb3\xa2\x77\x97\x53\xed\x76\x7b\x6e\x68\
+\x70\x70\xbf\x17\x46\x88\x6d\x36\xc5\xaa\x42\x1c\x26\x68\xe5\x37\
+\xae\xa2\x48\x9d\xd6\xd7\xab\x44\x2b\x46\xaf\xf6\x22\xaf\x69\x1a\
+\x71\x9a\x20\x47\x6d\xb4\xc3\x2d\xf6\xd5\x6e\x66\xc5\xbe\x8c\xed\
+\x36\x50\xbc\x0c\x8d\x2f\x0c\xf6\xec\x17\x5a\x1c\xc7\x4a\x18\x86\
+\x58\x9a\x83\xb9\x63\x89\xfd\x3b\x0f\x32\x59\x9d\xe6\xe9\x73\xff\
+\x40\x25\x57\x63\xfd\xab\x39\x82\x05\x13\xd7\x75\x15\x45\x51\xb4\
+\xde\xed\x14\xef\x6c\x52\xbc\x39\xc3\x74\xe9\x00\xe7\x57\x4e\x92\
+\xa6\x92\xe8\x74\x15\xfb\x44\xbe\x97\x20\x50\xa3\x28\xd2\x7d\x37\
+\x60\x21\x5d\xe1\xe0\x4d\x0e\x25\x31\x8c\x24\xc0\xf6\x56\x89\x2c\
+\x81\x73\xac\x4a\xb0\xa0\xf7\x6e\xd1\x9c\xaa\xa9\xc8\x50\x62\x4f\
+\xad\x31\x70\x7b\x99\xaa\x36\xc1\xba\x33\x8f\x65\x3b\x18\xd6\x00\
+\x8d\x7f\x2e\x03\xa2\x97\x2e\xd3\x55\x29\x38\x1f\x2e\xb2\xff\x68\
+\x19\x2d\xc9\x92\x33\xb2\xcc\x6f\xbc\x4e\x45\x14\xe8\x3c\x3b\x40\
+\xb8\x64\xf4\xd2\x68\x75\x10\xb4\x02\x8f\x1d\xb7\xfa\x50\x6c\x73\
+\xd3\xf0\x3d\x28\x6f\xde\xf1\xb3\x8c\x0c\x4e\x11\xa7\x61\xdf\x23\
+\x0d\x48\xdf\xf7\xf1\x3d\x9f\x98\x80\x5d\xc6\x03\xfc\xab\x1b\x3e\
+\xc6\x8f\x5d\xf7\x9b\x5c\x3f\xf8\x28\xa3\x63\xa3\x7d\xed\x36\xde\
+\x74\x9f\x06\x41\x40\x9c\x44\xac\xaf\x06\xfc\xe8\xc1\x9f\x43\xb6\
+\x07\xf9\xa9\x23\xbf\xce\x0f\x1d\x79\x1f\x41\xe2\x5f\xe3\x50\xf5\
+\x3c\xaf\xef\xfc\x7c\xf3\xcc\x87\xd8\xa1\x3f\xc8\xdd\x3b\x7f\x90\
+\x37\xed\xfc\x20\xa1\x66\xe3\x79\x57\xfb\xee\x89\x56\x51\x1a\x31\
+\x9c\x9f\xe2\xa1\x89\x0f\xf1\x73\x77\xfd\x19\xf6\xd2\x20\x37\xee\
+\xb9\x95\x20\xb5\xaf\xd5\x85\xfd\x00\xd7\x75\xd1\x74\xc1\x8e\xdc\
+\xed\x7c\xf8\xc8\x1f\x70\xa0\xfa\x46\x7e\xe9\xbe\x4f\x11\x67\xba\
+\x6d\xb7\x78\xa4\xa5\xeb\x7a\x24\xa4\x78\x81\xcf\xfb\x0e\xfc\x01\
+\xf7\xed\xf8\x51\x7e\xe6\x96\x4f\x32\x36\xbe\x8d\x30\xbd\xd6\x23\
+\xed\xf9\x1e\x7e\x10\x10\x0b\x97\xbb\x73\x1f\xe3\xc0\xf0\x9d\x28\
+\x35\x73\x9c\xa1\xfc\x58\x9f\x67\x7b\xce\xa5\xfe\x49\xc6\x01\xd7\
+\x0d\x1f\xe1\x89\x4b\x7f\xc1\x97\x5f\x78\x8a\xbd\x43\x37\xf4\x6c\
+\x1a\xfd\x37\x5f\xdf\x23\x1d\xfa\xd4\x8c\x49\xe6\xdb\x17\x78\x75\
+\xe5\x05\x6e\x99\x78\x00\x3f\xb6\xfb\xfa\xeb\x56\x8f\xb4\xe7\x79\
+\x64\xf5\x22\xe5\x4c\x95\x67\x16\x3e\xcd\x91\x91\x47\x29\x64\x4a\
+\x68\xa9\x89\xe7\x79\xb8\xae\xbb\xc5\xc7\xec\x11\x47\x11\xe5\xec\
+\x00\x4a\xa1\xcd\x17\x5f\xfc\x12\x3b\x6b\x07\x29\x68\x15\xfc\x20\
+\xc0\xf3\xbd\xab\x16\x5f\xdf\xbf\xea\x91\x6e\xe8\x7c\xe6\xe5\x3f\
+\x24\x9f\x8e\x33\x33\x3e\x09\xa9\x8a\xe7\x5f\xf5\x48\x77\xe3\xea\
+\x7a\xa4\x2f\x9c\xb6\xa8\x0d\x2b\xac\x3b\x8b\xec\x9f\x38\x44\x4e\
+\x2d\x6f\xb2\xb2\x77\xcd\x85\x8f\xc2\x90\x76\xdb\xe3\xa7\x1e\xfd\
+\x71\xbe\x7a\xe9\x93\x28\x61\x1c\x63\x79\x9d\x4d\x16\xbe\xea\x76\
+\xef\x79\x89\x91\x02\x27\xb4\x19\x2e\x6c\x67\xa8\x32\x44\xcb\x6d\
+\xf5\xf5\xd5\xad\xbc\x1a\x86\x21\x71\x94\x12\xa4\x0e\xb5\xdc\x08\
+\x05\x7d\x80\x8e\xdf\x24\x6f\x94\xfb\x09\x87\x9e\x1a\xd7\x9b\xb1\
+\xa9\x4c\x10\x28\x68\x69\x9e\x58\xb3\xf0\xbc\x08\x3f\xf2\x09\x43\
+\xbf\xdf\x77\x92\x24\x04\xa1\x4f\x12\xa7\xa4\x52\x22\x63\x9d\xb1\
+\xda\x04\xab\xad\x35\xc2\x34\xd8\xe4\xd5\x2d\x1e\xe9\x4d\x83\x80\
+\xa2\xa8\x64\xb3\x1a\xe3\xe5\x19\x2c\xbf\x89\x21\xf2\x48\xb9\xe9\
+\xcf\x0e\xba\x49\x8d\x5e\xa6\x47\x4a\x28\x57\x4c\xe2\x40\x43\x57\
+\x0c\x04\x0a\x61\xe2\x13\x47\xc9\x35\x1e\xe9\x1e\x17\x1b\xba\xc6\
+\xdc\xd2\x12\x45\xa3\x8a\x72\xac\xf9\x69\x7c\xd1\xda\xf4\x39\x7b\
+\xdf\x57\x17\xfe\xc6\xca\xa7\xd9\x6e\xdc\xce\xf8\x4e\x85\x13\xcd\
+\x7f\xc2\x89\xdb\xb8\x6e\x37\x63\xd2\xbb\x85\x5d\xd7\x25\x08\x43\
+\x0a\xb5\x90\x97\x5f\xff\x36\x8f\x3f\xfc\x4b\x7c\xfc\xf9\xf7\xf1\
+\xed\xc5\x27\x49\x93\xf4\x9a\x6c\x4c\xaf\x6f\xd5\x48\xf9\xfa\x85\
+\xcf\xf2\xf8\xbd\xbf\xc2\xe7\x4e\xfd\x01\x67\xec\xaf\xa1\xa2\xe2\
+\xba\xd7\xce\x6e\xd7\xf5\x88\xe2\x88\x25\xeb\x12\xed\x8e\x4d\x6d\
+\xd8\x40\xd6\x2f\xb2\x61\xaf\x10\x27\xdd\x4c\x4f\x3f\x9d\xe5\xfb\
+\xb8\x8e\x8b\x94\xd0\xe0\x2c\x7b\x86\x6e\xc0\xcb\x5f\xe4\x77\x9e\
+\xf9\x18\xba\xa6\x5f\x33\xbb\xbb\x71\x3b\x24\x49\xca\xd4\xd4\x00\
+\x4f\x9d\xfe\x67\xc6\x6b\x93\xfc\xc6\x73\xef\x07\x91\xf4\xfb\xee\
+\x5d\x78\xd7\xeb\xde\xc2\x95\x7c\x99\xdf\x78\xe6\x83\x7c\xf0\xa6\
+\xdf\x41\x6b\x27\x8b\xb4\xa3\x15\x96\xce\x35\xf0\x3b\x29\x71\x9a\
+\x47\x08\x41\xb3\xd9\xa4\xdd\xb1\x28\xb8\x39\x84\xa9\xf2\x47\x2f\
+\x3f\xce\x1b\xf6\xfe\x10\xab\xf1\x79\xd6\xbf\xd3\xe5\xdf\x5e\x32\
+\xc1\xb6\x6d\x5a\xad\x56\x37\x87\x2f\x2a\x3c\xbb\xf6\x67\xa8\xaf\
+\x25\xb4\xc3\x65\x5a\x97\x57\x59\x38\xd3\xc0\x6f\xa7\xdf\xc3\xc2\
+\xf9\x28\xc7\x42\xf8\x32\x9f\x3f\xf3\x87\x58\x41\x93\x96\x7f\x9e\
+\xd5\x79\x9b\x56\xd3\x05\x21\xb7\xe8\xc2\x31\x81\x96\x12\x93\xe7\
+\x2b\xaf\xff\x0f\xee\xd1\xde\x02\x19\x87\xb3\xf3\x27\x58\x39\xdb\
+\xd5\x85\x35\x43\x05\xa0\xdd\x6e\x63\x37\x6d\x32\x51\x81\x66\xf2\
+\x3a\x5f\xb8\xf4\xbb\xb8\x71\x93\x8b\xce\x4b\x6c\x2c\xf8\x6c\x2c\
+\x37\x31\xf2\x5d\x0d\xc4\xb6\x6d\xac\x46\x07\xbb\xd8\xd5\x85\x9f\
+\x5f\xfb\x4b\x2e\xd9\x7b\x58\x8b\xcf\x11\x58\x3e\xe7\x9f\x5e\x43\
+\xd1\xe9\xeb\xc2\xcd\x66\x93\x4e\x9a\x10\x44\x06\xe6\xc0\x02\xbf\
+\xfc\xa5\x9f\x40\xec\xd8\xb9\x43\xc6\xb6\xc4\x2c\x68\x24\x69\x42\
+\x2e\x97\x63\x7d\x7d\xfd\xdc\xe0\xe0\xe0\x6e\x5d\xd3\xd1\xb6\x85\
+\xe4\xea\x82\x8d\xb3\x3e\x76\x23\x40\x7a\x3a\xc8\xae\xde\xbb\x99\
+\x91\x5e\xad\x54\x2a\x45\x20\x8b\x2e\xc9\x5f\x97\x12\x2d\xa7\xb4\
+\x96\x1c\x12\x57\x23\xf1\x40\xcf\x0a\x52\x99\xf6\x3d\xd2\xa6\x69\
+\x16\x72\xb9\x1c\xca\x8c\x4f\x5e\x55\x59\x39\xef\x10\x75\x20\xf1\
+\xe8\x56\x11\xe9\xdd\x75\x5d\x3e\x9f\x5f\x6c\xb5\x5a\xa5\x91\xe1\
+\x91\x82\x15\x5a\xcc\x3c\x98\x63\xf9\x84\x47\x6b\xc9\x45\x09\x0c\
+\x02\x27\xc1\xc8\x77\x39\xfb\x1a\x16\x0e\x12\xf4\xbd\x31\x85\xac\
+\xca\xca\x69\x9b\xd0\x92\xa4\x9e\x82\x4c\x41\xcb\x82\xd8\x4c\xc7\
+\x55\x2a\x15\x4b\xa6\xb2\xd8\xc1\x67\xef\xbd\x79\x56\x4e\xba\xd8\
+\xab\x21\xa9\xaf\x10\x3a\x29\x66\x49\x25\x89\x93\x9e\xe9\xf4\x58\
+\x3e\x9f\x3f\x62\x98\x59\xc6\xee\x56\xb0\x97\x23\xda\x73\x21\xda\
+\xa1\x03\x87\x7a\x86\x6e\xe6\xe6\xe6\x48\xd3\x94\x85\x85\x05\x1e\
+\x7e\xf8\x61\x0e\x1c\x38\x40\x6b\xa3\xcd\x73\xcf\x7e\x83\xc9\x5d\
+\x19\x36\x1a\x1b\x14\x8b\x05\x36\x36\x36\x68\x34\x1a\x54\xab\x55\
+\xce\x9d\x3b\x87\xa6\x69\xbc\xef\x7d\xef\xa3\x90\x2f\xf0\x99\x4f\
+\x7d\x96\xda\xb6\x2a\x57\xd2\x39\x86\x86\x87\x58\x5a\x5a\xc2\x34\
+\xbb\x0e\xfa\x8b\x17\x2f\x12\x86\x21\x8f\x3f\xfe\x38\xf5\x7a\x9d\
+\x2f\x7e\xfe\x1f\xbb\x25\x57\x43\xcb\x8c\x1c\x1a\x61\x75\x75\x95\
+\x6c\x2e\xdb\xd7\xa6\x3d\xcf\xe3\xd6\x5b\x6f\xe5\x91\x47\x1e\xc1\
+\xd0\x0d\x9e\x7d\xea\x79\x0a\x03\x0d\xe2\x52\x44\x14\xc7\x0c\x0e\
+\xd6\xb9\x70\xe1\x02\xaa\xaa\x76\x4d\x42\x8a\xc2\xbd\xf7\xde\xcb\
+\xfd\xf7\xdf\xcf\xd3\x5f\x7f\x86\xd3\xa7\xce\x50\x9b\xd4\x31\x32\
+\x26\xcd\x46\x03\xdb\xb5\xc9\x66\xb2\x74\x3a\x1d\x56\x56\x56\xa8\
+\xd5\x6a\xbc\xef\xfd\xef\x63\x7e\x6e\x9e\xe7\x9e\x7a\x9e\xeb\x46\
+\xf3\x44\x83\x01\x8d\x66\x93\x5a\xad\x4a\x14\x45\x2c\x2f\x2f\xf7\
+\x2d\x29\x1f\xfa\xd0\x87\xa8\xd7\x6b\x7c\xeb\xf9\x97\x58\xd5\x57\
+\x88\xb6\x07\x68\x3b\x76\xec\xe8\x83\x75\xa1\x50\xe0\xf4\xe9\xd3\
+\x24\x49\xc2\xde\xbd\x7b\xb9\xfb\xee\xbb\x09\x82\x80\x95\xf5\x65\
+\x06\x07\x07\xd9\xd8\xd8\xe8\xdf\xba\x96\x65\x5d\xe3\xa9\x7e\xe0\
+\x81\x07\x50\x55\x95\xaf\x3f\xf5\x75\x6e\xbb\xf5\x36\xf4\xe3\x1a\
+\xa3\xa3\xa3\xfd\x5b\xf6\xe6\x9b\x6f\xe6\xd2\xa5\x4b\x24\x49\xc2\
+\xad\xb7\xde\x4a\xa1\xd0\xbd\x10\xcb\xcb\xcb\xf8\x91\xcb\xee\x3d\
+\xbb\x31\x33\x26\x8e\xe3\x70\xd3\x4d\x37\xf1\xb9\xcf\x7d\x0e\xdf\
+\xf7\xd9\xb1\x63\x07\x87\x0e\x1d\x62\xdf\xbe\x7d\xb4\xda\x2d\xd6\
+\xd7\xd7\x29\x16\x8b\x3c\xf7\xdc\x73\x8c\x8d\x8d\xd1\xe9\x74\xd0\
+\x75\x9d\x2b\x57\xae\xa0\x28\x0a\xd3\xd3\xd3\x3c\xfa\xe8\xa3\x34\
+\x9b\x4d\x6c\xcf\xa2\x56\xab\x01\xb0\x52\xc8\x73\xee\xdc\x39\x66\
+\x66\x66\xb8\x70\xe1\x02\xab\xab\xab\x14\x0a\x05\xee\xb8\xfd\x0e\
+\x4e\x16\x4e\x72\xf6\xfc\x59\x0e\x1d\x3c\xc4\xfa\xfa\x3a\x97\x2e\
+\x5d\xa2\x5e\xaf\x53\xad\x56\xb9\x78\xf1\x22\x27\x4e\x9c\x00\xd8\
+\x52\xb7\xdc\x4d\xae\xbe\xf4\xd2\x4b\x57\x3d\xd2\x3d\x1d\xb4\xa7\
+\x0b\xcf\xcc\xcc\xec\xce\xe7\xf3\x7d\xee\xdb\xaa\xdb\x6e\xf5\x09\
+\x5b\x96\xb5\x3a\x38\x38\x58\xcc\x64\x32\xd9\x5e\x8e\x6d\x6b\x6d\
+\xee\xd6\xbe\x93\x24\x89\xc2\x30\x0c\xaa\xd5\x6a\xa1\x52\xa9\xf4\
+\x8d\xe1\x5b\x75\xe1\xad\x35\xbe\x42\x88\xc5\x4e\xa7\x53\xda\xb5\
+\x6b\x57\xa1\xd5\x6a\x5d\xc3\xcb\x5b\x75\xe7\x34\x4d\x19\x18\x18\
+\xe0\xd4\xa9\x53\xcf\x1e\x38\x70\xe0\xa8\xa2\x28\xdd\x67\xf2\x16\
+\x9f\xf3\x56\x8e\xd7\x34\x8d\x66\xb3\xc9\xd0\xd0\x90\x95\xc9\x64\
+\x8a\xbd\xaa\xa8\xad\xbc\xdf\xd3\xa7\x7b\xe8\xb7\xb6\xb6\x76\x6c\
+\x64\x64\xe4\x48\xb9\x5c\xee\xd6\xc4\xf4\x6a\x9a\xd3\x44\x6e\x28\
+\xaa\x10\x42\x88\x1e\x23\xca\x34\x4d\xd7\x3d\xcf\x2b\xb6\xdb\xed\
+\x54\x11\x8a\x90\xa9\xb8\xea\x1d\xde\xc2\x9f\x42\x08\x91\x24\xc9\
+\x7c\xa7\xd3\xa9\xd8\xb6\x9d\xef\x5a\x8c\x95\x6e\x9d\xad\x72\x0d\
+\x33\xf7\x4e\xc4\x0f\xc3\xd0\x75\x5d\xb7\xe6\x38\x8e\x54\x85\x4a\
+\x9a\xf2\x7d\xfb\xde\xac\x17\x5e\x54\x14\x45\xac\xac\xac\x44\x02\
+\x21\xb7\xb2\xad\x10\xb2\x3f\xf8\xaa\xaa\x62\xdb\xb6\x04\x56\x1a\
+\x8d\xc6\x46\x92\x24\xc1\xbf\xd4\xf7\xe6\x52\xca\x71\x1c\x27\xef\
+\xfb\x7e\xac\x20\x64\x2a\xaf\xd6\x0b\xf7\xda\xab\xaa\x0a\x20\xa2\
+\x28\x0a\xe3\x38\x76\xd3\x34\x6d\x6f\x6c\x6c\x24\x48\x01\x12\x54\
+\x4d\xd5\xb4\xf1\xbd\x83\xb5\xa4\xa9\x23\xd4\x6e\x6d\x6c\x77\x6d\
+\xe4\x8f\x0e\x0e\x0e\xc6\x49\x9c\x10\x16\x1d\x72\xdb\x03\x68\x65\
+\x48\xd6\x4d\x92\x8e\xd6\x7d\xd9\x1a\x12\x40\x49\x92\xc4\xa9\xd5\
+\x6a\x59\x4d\xd3\x32\x31\x09\xd1\x78\x83\x81\x5c\x96\x68\xcd\x20\
+\xd9\x30\x91\x91\x82\x62\x76\x5d\xe7\x41\x10\xb8\xc0\xda\xe0\xe0\
+\xe0\x80\xa2\x28\xe9\xba\xba\xce\xe4\x75\x2a\xc9\x86\x49\xbc\x62\
+\x92\x3a\x3a\x42\x93\x08\xad\x3b\x63\x72\xb9\xdc\x36\x45\x51\x46\
+\x2b\x95\x0a\x7e\x1c\x92\xb9\xae\x83\xa1\x2a\xc4\x2d\x83\xb4\xd1\
+\xe5\x5b\xa1\x4b\x50\x24\xba\xd6\xbd\x8d\x47\x46\x46\x22\x99\xa4\
+\xc9\x9a\xb2\xc1\xf6\xeb\x15\xc2\x55\x83\x68\xd5\x44\xda\x3a\x42\
+\x91\x08\xbd\xeb\xd2\x6f\x34\x1a\xb9\xc9\xc9\xc9\x11\x24\xca\x62\
+\xd0\x60\xea\x66\x20\x12\x24\x4d\x9d\xa4\x91\x21\xb1\x34\x54\x53\
+\x22\x14\x41\xb3\xd9\x5c\x0f\xc3\x70\xdf\xb6\x6d\xdb\xca\x8e\xef\
+\x63\xee\xb4\xc9\x55\x14\xc2\x0e\x68\xf5\xb7\xae\xa3\xa5\x19\xda\
+\x4f\x55\x89\xd6\x34\x0c\xc3\x40\xd7\xf5\xc1\x72\xb9\x5c\xb0\x3d\
+\x0f\x65\x8f\xc5\xe8\x6d\x11\x78\x0a\x9e\xdf\x22\x27\xca\xa4\x6d\
+\x93\xd6\x53\x15\x14\x45\xa1\xd1\x68\xa4\x85\x42\xa1\xaa\xeb\x7a\
+\xbe\x6d\xb4\xd9\x76\x9f\x4a\x21\x17\x90\x84\x1e\x7a\x9c\x27\x49\
+\x13\x9c\xa7\x46\x88\x3b\x0a\xaa\xaa\x56\x2d\xcb\x2a\x17\x8b\xc5\
+\x31\x21\x04\xde\x75\xab\x8c\xde\x2e\x49\x5d\x41\xea\xc7\xc8\x58\
+\x12\x9f\xaf\xe1\x9c\xc9\xf4\x3c\x37\x51\x18\x86\x64\x74\x93\x0d\
+\xdd\x62\xc7\x83\x21\x39\x59\xc5\xf7\x3d\x48\x23\xbc\x86\xc4\x7f\
+\xa9\x8a\xbf\xa4\x53\x2c\x16\x10\x42\x8c\x54\x06\x2a\x23\xd2\x95\
+\x34\xf7\x2e\xb2\xed\xee\x0c\x8d\x8d\x0d\x0a\x4a\x85\xc0\x0b\xd1\
+\xdb\x55\x5a\xdf\x28\x62\x9a\x26\x9a\xa6\x91\xcb\xe5\xc2\xc8\x8f\
+\x0c\xbb\x6a\x33\x7e\x6f\x91\xd8\x57\x29\x68\x05\xe6\xd6\x2e\x52\
+\x52\x86\xd8\xf8\xc7\x32\x32\x50\x31\x0c\x43\x13\x42\xa4\xa6\x61\
+\xd0\x4c\x5c\x26\xef\x04\x4f\x5f\xe3\xd6\xd1\x7b\x51\xde\xb6\xeb\
+\xe7\x19\x1f\x9b\x21\xc6\xc7\xf7\xaf\xf5\x31\x7b\x81\x47\xa4\x78\
+\xec\xd2\xdf\xc4\x2f\x3c\xf0\xa7\xfc\xc2\x83\x9f\x60\x62\xf0\x20\
+\xe5\x09\xf3\xbb\x3d\xd2\xa9\xef\xfb\x04\x49\x40\xa7\x19\xf1\xe1\
+\x5b\x7f\x9f\x8f\xde\xf1\xa7\x4c\x8c\xec\xe6\xae\x5b\xee\xc1\x4b\
+\xec\x1e\xb9\xa4\x49\x92\x5c\xf5\x48\x13\x71\xef\xc8\x7b\x79\xd7\
+\xae\x5f\xe5\xd6\xbd\xf7\x73\x64\xe6\x51\x3c\x63\x03\xdf\x0b\x7a\
+\x04\x20\xbb\xb5\xc8\x01\x51\x12\x32\x94\x99\xe6\xd1\xc9\x9f\xe1\
+\xe7\x8f\xfe\x05\x71\x73\x82\x9b\xf6\x1f\xc1\xc7\xea\x7b\xbb\xbb\
+\x0c\xdf\x95\x35\xd5\x0c\x4c\x67\x6e\xe7\x4f\xde\xf6\x1d\xae\x1b\
+\x3d\xca\x8f\xdf\xf9\x9f\x89\x2b\xad\x2e\x0b\x7b\x5e\xbf\x6a\xd4\
+\xf3\x7d\x34\x1d\xe6\xe7\x3a\xfc\xf2\x5d\x9f\x61\x6f\xf5\x28\xff\
+\xe5\x4d\x9f\x23\x3b\x92\x12\xc4\xdd\xed\x71\x1c\xcb\xae\x47\xda\
+\x27\x4c\x43\x3a\x5e\x87\x5f\xb8\xf1\xb3\x8c\x99\x07\x51\x46\xf2\
+\xd3\x4c\x0d\xec\x25\x08\xc2\x6b\x0a\xae\xbb\x2c\x1c\x10\xc6\x3e\
+\x77\x6c\x7f\x94\xdf\x7f\xe1\x63\x84\x56\x86\x1f\xb9\xe1\x03\x64\
+\xd4\x5c\x9f\x95\x7b\x32\xa5\xbf\x59\x0a\x3a\x5d\xb8\x99\x53\x6b\
+\xcf\xf3\xe5\x93\x7f\xc3\x3b\xf7\xfe\x7b\x26\x2a\x7b\x88\xa3\xb8\
+\xcf\xc2\x3d\x5d\xd8\xf3\x3c\x4c\x25\xc7\xc4\xc0\x0e\x3e\x77\xfe\
+\xb7\xb9\xa1\xf8\x83\x3c\xb0\xf7\xad\x0c\x66\x27\x71\xbd\xab\x9a\
+\x73\x4f\x17\x8e\xa3\x84\x72\x76\x00\x91\xed\xf0\xc4\x4b\x4f\xb0\
+\xb3\x76\x3d\xa3\x85\x1d\x78\x81\xb7\xd5\x1c\x4f\xe0\xfb\x38\xae\
+\x87\xae\x29\x04\xad\x3c\x9f\x3c\xf6\x1b\x4c\x9a\x47\x78\xf0\xba\
+\xb7\x60\xaa\x79\x5c\xdf\xc5\x73\xb7\xb2\xb0\x07\x48\xf2\xe1\x14\
+\xeb\xe9\x19\x2a\xf9\x12\xdb\x4a\x3b\xa8\x67\xc7\xf1\x7d\xaf\x8f\
+\x6f\x5b\x3d\xd2\x44\x1a\x37\xee\x3e\xc4\xf3\xeb\x9f\x42\x73\x7c\
+\x97\xb9\xe6\x25\xa2\x28\x26\xf0\x23\x24\x7a\x5f\x7a\x0c\xc3\x80\
+\x2c\x0a\x71\x12\x52\xd0\x2b\xe8\x8a\xc9\x8b\x17\xbf\x42\x9c\x76\
+\x1d\xfd\x5b\x65\x4d\x80\x24\x9f\x10\x24\x1e\x05\xa3\x8c\x2a\x3a\
+\x38\x2c\xd3\x70\x97\xf1\x7d\x97\xc0\xd7\xae\xa9\x17\x06\x30\x00\
+\x55\xa8\x04\x5e\x42\x75\x50\xe5\xc5\xb3\xc7\x98\x6b\x9c\x25\x08\
+\xba\xd6\x0e\x4d\xd3\x7a\xcf\x64\x12\x23\x46\x00\x32\x51\xa8\x97\
+\x07\x79\xe9\xf2\x4b\xc4\x25\x1f\x91\x76\x8b\xbf\x33\x81\xb9\xe9\
+\x4c\x08\x08\xbc\x00\x43\x68\x98\x19\x9d\x4a\x66\x88\xe5\xf6\x3c\
+\x31\x1e\x4e\x60\x11\xf8\x06\x32\x95\x57\xb5\x6f\xdf\x47\x20\xf0\
+\xd2\x0e\x25\x7d\x90\x86\xf3\x3c\x0a\x0a\xeb\xce\x12\x51\x18\x11\
+\xf9\xd1\x35\x72\x6c\xac\xc5\xa4\xa4\x90\x82\x63\xa5\x28\xc7\x5b\
+\x9f\xc5\xc8\x48\x82\xc0\xc3\x71\x9d\xfe\xf4\xee\x95\xfc\x6b\x22\
+\xcb\x57\x5f\xff\x33\xde\x73\xf0\x3f\x73\xca\xfd\x12\x1b\xf1\xe5\
+\x9e\x51\xa8\xcf\xab\xbd\x92\xff\x24\x4a\xe9\x68\x17\xc8\xc8\x41\
+\xee\x3b\x78\x2f\x9f\x3f\xfb\x47\xf8\xa9\x4d\x12\x5f\x4d\x61\x6d\
+\x2d\xb8\x16\x5a\xc2\x8b\x73\x4f\xf0\x33\xf7\xfe\x06\x7f\x7f\xfa\
+\xf7\xb1\xb8\x42\x35\x3b\x8a\xe7\x5d\x75\xc7\xf7\x06\x30\x8a\x62\
+\x96\xad\x39\x9c\x4e\xc2\xe8\xb6\x02\x71\x61\x96\x91\xe2\x76\xbc\
+\xa0\x3b\xa3\xae\x26\x13\x7c\x7c\xcf\x45\x22\xb0\xb5\xcb\x1c\x1e\
+\x3f\x4a\x47\x3f\xc3\x17\x4f\xfe\x15\x05\xb3\xd8\xcd\xc6\xb8\x5e\
+\x7f\x40\xba\x3e\xef\x94\xfa\x64\xc4\x4b\xe7\x5e\x65\xa2\x3e\xce\
+\x9f\xbc\xfc\x0b\x54\x8b\x75\xdc\xc0\xc1\xb6\x9d\xbe\xee\xed\x38\
+\x0e\x81\xef\x53\x2a\x64\xf9\xbf\xff\xf1\x23\xfc\xe6\xa3\x5f\x44\
+\x6b\xf9\x8b\x2c\x2e\xcd\xb2\x7c\xb1\x8d\xdf\x8e\x89\x93\x3c\x52\
+\x4a\x36\x36\x36\xf0\xe3\x88\x82\x97\xa7\xa5\x9e\xe3\xb7\x9f\xfc\
+\x25\x7e\xe2\xc1\xc7\xf8\xc7\x8b\xff\x83\xd6\x49\x95\x66\xb3\xeb\
+\x91\x96\x52\x5e\xf5\x48\x67\x04\x46\xb6\xc6\xef\x3e\xf7\x6f\xf9\
+\xa3\x1f\xfd\x27\xce\x36\xbe\xc9\x95\xd5\xf3\xac\xce\x37\xf0\x5b\
+\x57\x3d\xd2\x3d\xa7\x41\x2e\xc9\x73\xb2\xf5\x55\x0e\x78\xb7\xe1\
+\x26\x1d\xce\x2e\x7d\x89\xb9\x4b\x0e\x8d\x75\x17\xa1\x42\xa5\x52\
+\xe9\x9e\x60\x10\x13\x69\xe0\xc9\x0c\x4f\xcc\x7d\x92\xf7\x8c\x7c\
+\x0c\x51\x6a\xf0\xf5\x57\xbe\x48\x63\xde\xa1\xd5\x0c\x51\xf5\x6e\
+\x92\xb6\xd9\x68\x62\xaf\xdb\xe8\x51\x91\xa5\xe0\x14\xc7\xd6\xfe\
+\x81\x62\x31\xcb\x17\xce\xfc\x31\x8d\xc5\x90\x8d\x95\x26\x7a\xa6\
+\x2b\xe1\x5a\x96\x45\xb3\xd9\xea\x96\xe5\xaa\x79\x9e\x5c\xfe\x63\
+\x26\x9d\x43\x9c\x59\xf9\x06\x7e\x27\x61\xe1\xd5\x26\x7a\x01\x4c\
+\xb3\xab\x0b\x37\x9b\x4d\xfc\xbc\x24\x4e\x4d\x16\xd2\x17\xf8\xcd\
+\xaf\xfd\x1c\x62\xfb\xd8\x0e\x29\x10\xa8\x99\xae\x3f\xae\x57\x2f\
+\x1c\x45\x51\x31\x9b\xcd\x91\xbf\x21\x66\x6c\x6f\x8e\xd5\x93\x1e\
+\x57\x5e\xea\x80\x65\xa2\xe8\xa0\x9a\xe2\x1a\x5d\x58\xd7\xf5\x62\
+\x92\x8f\xd8\xfd\xf6\x02\xe1\x7c\xca\xe5\xe3\x1b\xf8\xb3\x5d\x9d\
+\x43\xcb\xf4\xcb\xc8\x2c\x45\x51\x9a\x52\xca\xc9\x7c\x3e\x4f\xfe\
+\x68\xca\xd8\x68\x86\xd9\xe3\x6d\xd6\xbf\x93\x90\x86\x02\xd5\x00\
+\x45\xeb\x2e\xc2\x2b\x95\x4a\xd8\x6e\xb7\x8d\x5c\x36\x87\xad\xb8\
+\xdc\xf5\xc1\x1a\x2b\x27\x7c\x66\x8f\xb5\x09\xe6\x75\x10\x29\x5a\
+\x46\x45\x72\x55\x17\x1e\x1d\x1d\x3d\xea\x5b\x01\x95\x37\x2a\x4c\
+\x4e\xe5\x98\x7d\xb1\xcd\xda\x89\x08\xe9\x75\x7f\x7a\x45\x35\xe9\
+\xeb\xc2\xb5\x5a\x2d\x94\x89\x34\xa2\x91\x88\xe9\x1b\x33\x2c\x1e\
+\x77\x68\x5e\x0c\x20\x56\x91\x48\xb4\xac\x20\x4d\x52\x74\x5d\x6f\
+\x7a\x9e\x27\x33\x99\x4c\x35\x57\x2e\xb0\xed\x5e\x89\x75\x25\x66\
+\xe3\x9c\x8f\x76\xe4\xf6\xc3\x58\x56\x17\x79\x66\x67\x67\x09\xc3\
+\x6e\xd9\xc0\x5b\xde\xf2\x16\x76\xed\xda\xc5\xc2\xdc\x22\xa7\xbf\
+\x79\x96\xba\x22\x29\xed\xf4\x51\x54\xa5\x5f\x2f\x5c\x28\x14\xb8\
+\x72\xe5\x0a\xd5\x6a\x95\x77\xbc\xe3\x1d\x68\xaa\xc6\xe7\xff\xf6\
+\x8b\x54\x6b\x03\x4c\xe4\x1b\x54\x8f\x0e\xd0\x6e\xb7\x09\xc3\x10\
+\xd3\x34\xb9\x70\xe1\x02\x71\x1c\xf3\xde\xf7\xbe\x97\x1d\x3b\x76\
+\xf0\x0f\x7f\xf7\x05\x94\x15\x8d\xaa\xbd\xce\xce\xdb\x06\x68\xb5\
+\x5b\x18\x86\x41\x92\x24\x2c\x2e\x2e\x22\xa5\x64\xdf\xbe\x7d\x3c\
+\xf2\xe8\x23\xf8\xae\xcf\x77\x9e\x7a\x95\x9c\xd5\x66\xa6\xea\xa3\
+\x8f\x6a\x64\xb3\x59\x16\x16\x16\xfa\xd4\x20\x84\xe0\x8e\x3b\xee\
+\xe0\xce\xbb\xee\xe4\xb9\xa7\xbe\xc1\xe5\xaf\xce\x52\xd7\x87\x99\
+\xbc\x21\x4b\xb3\xd5\xec\xfe\xd0\x85\x69\x62\x59\x16\x2b\x2b\x2b\
+\x8c\x8d\x8d\xf1\xe1\x0f\x7f\x98\xe7\x9e\x7e\x8e\x57\x4f\x9e\xe2\
+\xfa\xf1\x32\xd6\x40\x87\x30\x0a\x49\xe2\x84\x62\xb1\xc8\xfc\xfc\
+\x3c\xcd\x66\x13\x80\xff\xf8\x1f\xff\x23\x00\x2f\x3c\x77\x0c\x37\
+\x63\xb3\x3c\xb2\x8c\xb6\x6d\xdb\x36\x66\x67\x67\x19\x18\xe8\xfe\
+\x0e\xcc\x85\x0b\x17\x08\x82\x80\xfb\xee\xbb\x8f\xc3\x87\x0f\x33\
+\x3b\x3b\x4b\x2c\x23\x86\x86\x86\x30\x4d\x93\x6f\x7e\xf3\x9b\x8c\
+\x8e\x8e\x62\x9a\x66\xdf\x12\x3b\x3e\x3e\xce\x43\x0f\x3d\xc4\xd0\
+\xd0\x10\x17\x2f\x5d\xec\x0e\xfc\x66\x32\x60\x6c\x6c\x8c\xa5\xa5\
+\x25\x46\x46\x46\xb8\x7c\xf9\x32\x00\x0f\x3f\xfc\x30\x7b\xf6\xec\
+\xa1\xd3\xe9\xb0\xb6\xb6\xc6\xb9\x73\xb0\x6f\xdf\x3e\x2e\x5f\xbe\
+\x8c\xef\xfb\x8c\x8f\x8f\xb3\xb2\xb2\x42\x1c\xc7\xdc\x7c\xf3\xcd\
+\xdc\x79\xc7\x9d\xec\xdc\xb9\x93\xbf\xfc\xcb\xbf\x64\x7e\x61\x9e\
+\xd1\x91\x51\x9e\x78\xe2\x09\xea\xf5\x3a\x00\x6b\x6b\x6b\x44\x51\
+\x84\xa6\x69\x1c\x3c\x78\x90\x77\xff\x5f\xef\xc6\x34\x4c\x9e\x78\
+\xe2\x09\x86\x86\x86\x48\x92\x84\xf9\xf9\x79\xae\x5c\xb9\x42\x4f\
+\xaa\xed\xb1\xf0\x2d\xb7\xdc\xc2\xdc\xdc\x1c\x4b\xab\x4b\xdc\x78\
+\xe3\x8d\xbc\xf2\xca\x2b\x54\x2a\x15\xce\x9c\x39\xc3\xc1\x83\x07\
+\xc9\x64\x32\x1c\x3f\x7e\x9c\x34\x4d\x79\xf8\xe1\x87\xb9\x70\xf1\
+\x42\x3f\xb9\xf0\xfc\xf3\xcf\x7f\xff\x7a\xe1\x4e\xa7\x63\xe5\x72\
+\xb9\x62\xad\x56\xa3\xdd\x6e\xf7\xb7\xf5\x98\x72\xab\x17\xda\xb6\
+\xed\xb9\x7c\x3e\x3f\x50\xad\x56\x8b\x5b\xcd\xde\x5b\xf9\xb9\xf7\
+\x3d\x8e\x63\x2b\x0c\xc3\x66\xb1\x58\x9c\x1c\x18\x18\xa0\xd3\xe9\
+\x5c\xc3\xab\x3d\x1d\xb9\xf7\xb7\x61\x18\xa1\xe3\x38\xc6\xf0\xf0\
+\x30\xb6\x6d\x7f\x8f\x77\x79\xeb\xef\x63\x55\x2a\x15\x4e\x9f\x3e\
+\xfd\xec\xee\xdd\xbb\x8f\x6e\xb1\xfc\x5e\xb3\x4f\xef\x7f\x4d\xd3\
+\x58\x5b\x5b\x63\x7c\x7c\x3c\xb4\x6d\xdb\xf8\x97\x6a\xa2\x37\xcf\
+\xb7\x69\x59\x96\x2c\x97\xcb\xd5\xef\xde\xae\xa5\x49\x1a\x6d\xf5\
+\x31\x3b\x8e\x83\x65\x59\x5e\xb5\x5a\xcd\xb4\x5a\xdd\xf4\xbd\x4c\
+\x05\x8a\x10\x08\xe5\x7b\x78\x55\x58\x96\x95\x68\x9a\xd6\xcd\x5e\
+\x23\xd0\x84\xde\xd5\x85\x95\xab\x35\x19\x5b\xfc\xd7\xd2\x75\xdd\
+\x50\xd7\x75\x1c\xc7\x41\x57\xf5\x6b\xea\x85\x15\x5d\x5c\xd3\x7f\
+\xa7\xd3\x91\x8a\xa2\x44\xbe\xef\x6b\x9a\xa6\x09\x12\x81\x14\xa0\
+\x6a\x12\x45\xb9\xb6\xed\x26\xf8\xcb\x24\x49\x64\x9a\xa6\xb1\x82\
+\xd2\x35\x5e\x23\x51\x94\x3e\xd7\xf6\xab\x0a\xe2\x38\x4e\x2c\xcb\
+\x4a\x55\x55\x15\x02\xf8\x17\xea\x85\xc5\xe6\x7a\x37\xca\x66\xb3\
+\x71\x9a\xa6\x52\xc8\xcd\xba\x65\x40\xdb\x36\x39\x12\xc8\x48\xd9\
+\x2c\x90\xee\x16\x2f\xaf\xae\xae\x5e\xaa\xd7\xeb\x07\x7d\xcf\x97\
+\xa1\xd1\xd5\x85\x71\x4d\xd2\x4e\xb7\x46\x57\x46\x0a\x42\x93\xbd\
+\x3c\x9c\x51\x2a\x95\xf4\x4c\x26\x43\x44\x44\x3a\xde\xa6\x98\x35\
+\x48\x5a\xbd\xba\xdb\xab\x81\x87\x61\x18\xb8\xae\xbb\x5a\x2c\x16\
+\x67\x74\x5d\x17\x2d\xb5\xc5\xf0\x1e\x48\x6d\x8d\xb4\x65\x22\x1d\
+\x6d\xd3\x48\xde\xbf\xfa\x9e\xeb\xb9\xb2\x5a\xad\x0e\x04\x49\x88\
+\xb2\xa3\x4d\x4e\x33\x88\x5b\x3a\x69\x5b\x47\x46\x6a\xf7\xc7\xc5\
+\x90\x64\x32\x19\x2e\x5e\xbc\x58\x19\x1e\x1e\x0e\x7c\xd7\x8f\xdb\
+\x99\x16\x23\x13\x2a\xe1\x86\x41\x6a\x6b\xdd\x1a\xe7\x44\x20\x54\
+\xd0\x75\x5d\x18\x86\xe1\x8f\x8c\x8c\x04\x19\x33\x53\xfe\x3f\xd4\
+\x0b\x63\xdb\xb6\x7e\xe5\xca\x95\xb5\x72\xb9\x5c\x0c\xe3\x38\x0d\
+\xca\x16\x95\xba\x4a\xda\xd1\xd1\x46\x7e\xa4\x55\xd0\x35\x9d\xe6\
+\x53\x15\xa2\x55\x1d\x45\x15\x08\x21\x6a\xa5\x52\x29\x9f\x4a\x50\
+\x76\x39\x8c\xde\x11\x11\x05\x2e\x22\xd2\xd0\x45\x86\x34\x50\x68\
+\xfe\x63\x1d\x55\x55\xd1\x75\x5d\x98\xa6\xa9\xea\xba\x8e\x63\xb8\
+\x0c\xde\xe5\x53\x2f\x6a\x10\x87\x84\x9e\x0b\xba\xa4\xfd\xe5\x21\
+\xe2\x96\x8a\x94\x52\x68\x9a\xa6\x1b\x86\x21\x34\x4d\xc3\x1d\xeb\
+\x30\x7c\xbf\x46\x51\x8e\xb2\xda\x58\x41\x93\x1a\xf1\x42\x91\xce\
+\xf1\x02\x32\x06\xd3\x34\xd5\x3e\x0b\xab\x1d\xf6\xbf\x29\x42\x4b\
+\x54\x7c\xc7\xc1\x24\x47\xe4\x82\x75\xac\x44\xb0\x68\xf4\x7e\x03\
+\xb1\x52\x2e\x97\x33\x41\x94\x90\xb9\xc5\x65\xdb\x21\x13\xab\x6d\
+\x91\xa1\x40\x10\x06\xe8\x4e\x99\xc6\xd7\xcb\x98\x86\x81\xa6\x69\
+\x79\xd3\x34\xed\xff\x2f\xf5\xc2\xaa\xaa\xa2\xaa\x6a\xb5\x90\xcf\
+\xe7\x96\xfd\x16\x13\x6f\x94\x14\x06\x7d\x22\xcf\x47\xb9\x63\xea\
+\x1d\x88\x3c\xc4\xd2\xff\x2e\xa6\xec\xfe\x9d\xaa\x01\x35\x79\x80\
+\xff\xf0\xe0\xa7\x78\xef\x91\x5f\xa5\x56\xdc\x41\x7d\xdb\xc0\x35\
+\x35\xbd\x7d\x94\x4b\x03\xec\x35\x9d\x77\x1f\xfa\x65\xde\xbc\xe3\
+\x63\x1c\x9c\xb8\x87\x7b\x6e\x78\x23\x5e\xe4\x5c\xf3\xdb\x59\xbd\
+\xe3\xf8\x49\xc0\x7d\x23\x3f\xc1\xb0\x72\x23\x8f\xdd\xf1\x1f\xb8\
+\x65\xf2\xed\x78\x7a\xa3\xef\x22\x4d\x92\x44\x76\x51\x31\x24\x4c\
+\x23\x6a\xe6\x36\x1e\x19\xfb\xb7\xfc\xa7\x87\x3f\xcd\xeb\xf3\x1e\
+\xa3\xe3\xc3\xc4\xe2\xaa\x8f\x59\x76\xa7\x2c\x9e\xe7\x63\xe4\x04\
+\xdb\x94\xdb\xf9\xbd\x1f\x7c\x9a\x4a\x66\x86\x5f\x7e\xdb\x1f\xe3\
+\x65\x1a\x04\x9b\x75\xd0\xff\x7f\xea\x85\x3d\xcf\x27\x88\x02\x94\
+\x4c\xc0\xee\xf4\x9d\xfc\xe8\x4d\x3f\x87\x72\x78\xf8\x41\xee\x99\
+\xf9\x81\x4d\x16\xbe\x56\x17\xf6\x3c\x9f\x28\x0a\x38\x3c\x7a\x3f\
+\xff\xfc\xfa\x27\x78\xe1\xe5\xd3\xbc\xfd\xc0\xfb\x31\x14\xb3\x4f\
+\x22\x3d\x55\xae\x27\xff\x4d\x57\x0e\x71\xb9\xf9\x1a\x27\x16\xbe\
+\xc9\x43\x33\xef\xa1\x9c\x19\x24\xde\xd4\x76\xb7\x92\x88\xe7\x79\
+\xa8\xe8\xd4\xf3\x63\xf8\xb9\x8b\xec\x1f\xb8\x97\x89\xca\x2e\x86\
+\x72\x93\xf8\x5b\xfa\xee\x09\xeb\x71\x14\x51\xcb\x0f\x93\xad\x44\
+\x7c\xe5\x85\xaf\xf3\x96\x7d\x3f\xc1\x8d\xa3\xf7\x62\x7b\x9d\xfe\
+\xc5\x04\xfa\xb5\xc3\x42\x40\x31\xdd\xce\x27\x9e\xff\x6f\xfc\xbf\
+\x6d\x9c\x6b\x8c\x5c\x65\x01\x86\x9f\x73\xbe\x73\xce\x5c\x76\xe7\
+\xbe\xd3\xdd\x2e\xdd\xb2\xbd\xb0\xad\x6d\xb7\x58\x4b\xa9\x6c\xb1\
+\x36\xa4\x0d\x26\x1a\x8c\x25\x26\x18\x2d\x58\x8c\x3f\x08\x5a\x34\
+\x81\x5f\x68\x22\x09\xff\x88\x09\x09\x4a\x82\x09\x68\x34\x40\x0c\
+\x8a\x60\x0c\x72\x91\x16\x50\xda\x02\x52\x2b\x4b\xaf\x3b\xed\x76\
+\x2f\xdd\xeb\xcc\xec\xcc\xec\xcc\xb9\x5f\xfc\x71\x66\x4e\x97\xe2\
+\xef\x99\x39\xf9\xe6\x3b\x97\xef\xbc\xdf\xfb\xbc\xef\x57\x6e\xf8\
+\x36\x6b\x33\x43\xc4\xe5\x64\x5b\x67\xeb\x11\x4c\x65\x9a\x06\xe2\
+\x73\x79\xe1\x5d\xdc\x98\xde\x82\x69\x1b\xd7\x3a\xbc\xda\x8d\x4b\
+\x8e\xe3\xb0\x54\xd3\x79\xf8\xe0\x23\xbc\x56\xfa\x0d\x4a\xb5\x59\
+\xe1\xa3\xb9\x77\x71\x1d\x17\xcb\x0c\x08\xb8\x96\x8d\xb5\x6d\x0b\
+\x15\x70\x7c\x9b\x94\x56\xc0\x50\x54\xce\xcc\xfd\x1b\x9f\xd0\xdb\
+\x15\x42\x44\x20\xb8\xe3\x38\x78\xdd\x5e\xc8\x48\x27\x7a\x58\x10\
+\x26\x35\xf7\x2a\xb6\xdf\x6e\x81\xb3\x44\x98\x29\x6e\x4f\x60\xf8\
+\x50\x0f\xda\x09\x4b\x07\x4f\x36\xa9\x2c\x2f\x32\x5b\x9f\xc4\xb2\
+\x63\xf8\x76\x54\xf0\x88\x69\x99\x78\x8a\x87\x24\xc9\x48\xbe\x20\
+\x9f\xca\xf3\xf6\xe8\x1b\x94\x63\x2d\x64\x5f\x44\x57\x77\xb8\x99\
+\x60\x61\x5b\x16\x42\x56\xf0\x71\xe9\xe9\xea\x65\xb1\x35\x83\xe5\
+\xe9\x18\x4e\x0b\xdb\x4e\x46\xab\xb1\xe3\x38\x04\xb6\x07\x71\x48\
+\x74\xa9\x04\x6e\x48\xb9\x4a\xc8\x8c\xd7\x3e\x05\x2f\x9c\x07\x1f\
+\xaf\x3d\x27\x26\x8e\xec\xa0\x08\xc1\x52\xbd\x81\x2a\x62\xc8\xa7\
+\xea\x2f\x93\xee\x4e\x61\xbb\x76\x44\xda\xaf\x34\xa8\x45\xa0\x72\
+\x72\xfe\xcf\x6c\x49\x1d\xa0\x6f\x83\xcb\x44\xeb\x54\x38\x98\xff\
+\x93\x58\x77\x2c\x17\x23\x3e\xc1\xd2\x92\xc9\xce\xa1\x61\x5e\x39\
+\xff\x2b\x26\x97\xcf\xe2\xd8\x4e\x94\xe9\x5d\x49\xe9\xab\x9a\xe0\
+\xed\xcb\x2f\x72\xf8\x4b\x8f\xf1\xfb\xd1\xc7\xb8\x6c\x1e\x27\x9d\
+\xc8\xa3\x5f\x97\x17\x36\x8d\x70\xd7\x67\x6e\xf9\x0a\xf5\x86\x45\
+\xae\x28\x90\xf2\x33\xa8\x52\x02\xdb\xb5\x3e\x33\x6e\xd3\x34\x30\
+\x6d\x0b\x09\x41\x5d\xb9\xc8\x70\xff\x97\x99\xf2\x4e\xf0\xd7\x33\
+\xcf\xd1\xa5\x75\x87\xe3\xd6\x8d\x08\xb9\x33\x4c\x13\xcf\x87\x8d\
+\x1b\xf3\xbc\x7f\xee\x7d\xfa\xb2\xfd\x3c\xfd\xe1\x23\x64\xe2\x85\
+\x68\x4e\xae\x91\x09\x61\x8b\x5c\x21\x93\xe1\x89\xa3\x3f\xe5\x81\
+\x9d\xbf\x44\x69\x2a\xd3\xcc\x2e\x4d\x33\x5b\xaa\xa0\xd7\x3c\xba\
+\xdd\xd0\x17\x2e\x97\xcb\xd4\x1b\xcb\xc4\x9b\x49\x6c\x15\x9e\x3a\
+\xf1\x30\xf7\xec\xb9\x8f\xe9\xb9\xd3\x2c\x9d\x81\x6a\xb5\x1e\x69\
+\xe1\xce\x15\x48\x52\x42\xa8\x05\xfe\x78\xe6\x09\x7e\xb1\xfe\x19\
+\x66\xec\xb3\xcc\x8d\x66\x29\x5f\xad\x61\xd5\xfd\xce\xbb\x5d\x84\
+\x56\x74\xdb\x31\xaa\xfe\x25\x5e\x3d\xfb\x0c\x6e\xa2\xce\xe5\x85\
+\xb3\x94\x3e\x30\xa8\xce\x1b\x91\x2f\x6c\x18\x06\x8e\xe9\x60\xc9\
+\x3e\x86\x1f\xe3\xd8\xe4\x1f\xd8\xbf\xf9\x6e\xc8\x54\x38\x37\x39\
+\xcf\xfc\xe5\x3a\x8d\x25\x07\x49\x84\xef\x6c\xe5\x72\x99\x4a\xbd\
+\x41\xbf\x9d\x63\xd2\xf8\x98\x77\x27\xff\x44\x90\x68\xf2\xaf\x99\
+\x97\x59\x98\x32\x29\xcf\xd7\x50\xe3\x4a\xa4\x85\x97\xab\x0d\x1a\
+\x09\x1f\x2f\x48\xf1\xce\xdc\x73\x6c\xf5\xf7\x30\xee\x7c\x40\x63\
+\xd1\xe0\xca\xa9\x32\x8e\xee\x13\x4f\x84\x5a\xb8\x5c\x2e\x63\x24\
+\x7c\x4c\x5b\x50\xe9\x1e\xe5\xb9\xe3\x4f\xa2\x3c\xff\xc3\xd3\x98\
+\x8b\x10\xcb\x48\xa8\xaa\x12\x35\xd6\xca\xb2\x4c\x4c\xd3\x70\x17\
+\x02\xe6\xff\xe3\xd1\x98\x9a\xe3\xc7\x4f\x3d\x8a\x3e\xae\x41\x10\
+\x10\x4b\x2b\x91\xb1\xd3\x6e\xc0\xc0\xb7\x7c\x96\xce\xb9\xc8\xad\
+\x6e\xee\x7b\xe9\xfb\xe8\x25\x0d\xb3\x5e\x26\x91\x15\x88\x70\x75\
+\x8f\x8e\x9d\xcf\xe7\xb1\x67\x5b\x4c\xbd\x1d\xf0\xe1\xe8\x9b\x2c\
+\x8e\xda\xf8\x96\x84\x92\x04\x2d\xa6\x46\x50\x64\x10\x04\x68\x09\
+\x0d\xcf\xb0\x99\x3f\xed\xb2\x3c\x3b\xc3\xb1\x5f\x3f\x8e\x7e\x59\
+\xc5\x5c\x72\x89\x67\x15\x14\x45\x44\x81\x48\xa1\x28\xc4\x64\x15\
+\x7d\xdc\xa7\x5a\x87\x17\x2f\xbe\xc4\xd2\x79\x9f\xc6\x15\x1f\x2d\
+\x29\xa3\x25\xd5\xa8\xd2\x59\x08\x81\x1a\x53\xe9\xd6\x7d\x16\x47\
+\x1d\x96\xe7\x17\x39\x7e\xee\x05\x96\xce\x05\xb8\x7a\x40\x3c\x2b\
+\x50\x54\x39\x82\x33\x25\x49\x22\x21\x69\xd4\x2e\xb8\x34\x15\x9f\
+\xb3\x93\xef\xa0\x6c\xda\xb0\x05\xe9\x26\xd0\xd4\x30\xc1\xe8\xfb\
+\x3e\x33\x33\x33\xec\xd9\xb3\x87\x81\x81\x01\x2c\xdd\xe6\xf4\x07\
+\x9f\xb0\x2a\x19\x43\x4a\x2c\x52\xdc\xd7\xc3\xfc\xc2\x3c\x8d\x7a\
+\x83\x42\xa1\xc0\xd8\xd8\x18\xbd\xbd\xbd\xec\xdb\xb7\x8f\x54\x77\
+\x8a\xbf\xff\xed\x0d\x7a\xfb\x7a\x59\xe5\xcc\xd3\xbb\x7b\x15\xf5\
+\x46\x8d\x56\x4b\x27\x9d\x4e\x73\xe1\xc2\x05\x0c\xc3\xe0\xfe\xfb\
+\xef\x67\xe7\xce\x9d\xbc\xf5\xfa\x3f\xb0\xaa\x36\x92\x32\xc3\xb6\
+\x03\x39\x9a\xcd\x26\xb9\x5c\x8e\x5a\xad\xc6\xf4\xf4\x34\xad\x56\
+\x8b\xe1\xe1\x61\x46\x46\x46\x88\x69\x31\x3e\x39\xf5\x29\x9e\xd1\
+\xe2\x06\xa9\x45\x6c\xab\x46\x26\x97\xe1\x52\xe9\x12\xf1\x78\x3c\
+\x4c\x27\xa9\x2a\x23\x23\x23\xdc\x7c\xf3\xcd\x9c\xf8\xe7\x49\x16\
+\x2f\x56\x28\x6a\x82\xbe\x41\x19\x77\xad\x43\xb5\x52\xed\x10\xb8\
+\x51\x6c\xf6\xd0\xa1\x43\x2c\x55\xaa\x7c\x7c\xec\x34\x99\x54\x8a\
+\x78\xcc\x24\x7f\xd3\x32\xb9\x7c\x0e\xcb\xb2\xa8\x54\x2a\xb4\x5a\
+\x2d\x74\x5d\xe7\xc8\x43\x47\x68\x35\x9b\x8c\x97\x26\x59\xaa\xd5\
+\xc8\x3a\x16\xca\xf0\xf0\x36\xce\x9f\x3f\xcf\xe0\xe0\x20\xa9\x54\
+\x2a\x12\xfc\x7b\xf7\xee\xe5\xf6\xdb\x6f\x0f\x21\x1f\x7e\x47\x2e\
+\x97\xc3\xb6\xed\x08\xcb\xb5\x4c\x8b\x62\xb1\xc8\xd8\xd8\x18\xf9\
+\x7c\x9e\x43\x87\x0e\x91\xcf\xe7\xb9\x3a\x73\x95\xa1\xa1\x21\x26\
+\x26\x26\xe8\xd4\x28\x5f\xb9\x72\x85\xad\x5b\xb7\x52\x2a\x95\x30\
+\x4d\x93\x3b\xee\xb8\x83\x4d\x9b\x36\x31\x31\x31\x11\x2e\x00\x9e\
+\xc1\xf6\xed\xdb\x39\x7d\xfa\x34\xe9\x74\x9a\xfe\xfe\x7e\xe6\xe6\
+\xe6\x00\xd8\xb1\x63\x07\x07\x0f\x1e\x64\xfd\xfa\xf5\x3c\xfb\xec\
+\xb3\x2c\x2c\x2c\x50\x28\x14\x38\x79\xf2\x24\x7d\xbd\x7d\xed\xc6\
+\xca\x90\xd1\x51\x14\x85\x91\x91\x11\xee\xbd\xf7\x5e\x1c\xc7\xa1\
+\x54\x2a\x31\x34\x34\xc4\xa5\x4b\x97\xc8\x66\xb3\x1c\x3d\x7a\x94\
+\xb5\x6b\xd7\x32\x35\x35\x45\xb9\x5c\x26\x97\xcb\x71\xf8\xf0\x61\
+\x46\x47\x47\x29\x57\x2b\x6c\xde\xbc\x19\x5d\xd7\xb9\x70\xe1\x02\
+\x99\x4c\x86\x62\xb1\x48\xa9\x54\x8a\x7c\xe1\x23\x47\x8e\x70\xee\
+\xdc\x39\xc6\xc7\xc7\x99\x9d\x9d\x0d\x19\xe9\x5d\xbb\x76\x05\x1d\
+\x9d\xe8\x38\x0e\xc9\x64\x92\xc9\xc9\xc9\x8b\x6b\xd6\xac\x19\xda\
+\xbc\x79\x33\x63\x63\x63\xd1\xce\xf3\xf5\xdd\xcc\xed\xf8\x53\x53\
+\xd3\xb4\xd8\xd6\xad\x5b\xd5\x6a\xb5\xca\xf2\xf2\x72\xa4\x55\x3b\
+\x5e\x6b\x27\x62\x2f\x49\x52\xd9\x75\xdd\x71\x60\x57\x36\x9b\x8d\
+\x68\x82\x95\xbb\x29\x2b\xfd\x67\x55\x55\x1b\xb3\xb3\xb3\xd2\xfe\
+\xfd\xfb\x53\x63\x63\x63\x91\x36\xed\x3c\x36\x3a\x15\x2d\xae\xeb\
+\x76\x18\xe9\x89\x91\x91\x91\x1b\x6d\xdb\x8e\xbc\xdb\xce\x6e\xf2\
+\xca\xa6\x8e\x95\xbe\x70\x87\xed\x5e\xb9\x58\xac\x1c\xbb\xef\xfb\
+\x08\x21\xa8\xd7\xeb\xe5\x62\xb1\xd8\x33\x38\x38\xc8\xe4\xe4\x64\
+\x74\x4b\x2b\xa9\xee\x74\xa4\x29\xa5\x76\x96\xd6\x75\x5d\xaf\xbd\
+\xbf\x46\x32\xd1\x15\x62\xb4\xda\xf5\x5c\x72\x88\xf8\x5a\x96\xe5\
+\xa6\x52\x29\x75\x76\x76\x16\x59\x96\xdb\x8c\xf4\xf5\x1c\x73\xd0\
+\x99\x44\x79\x66\x66\x46\x5a\xbd\x7a\xb5\x27\x84\x90\x62\x5a\xec\
+\xb3\x59\x64\xae\x79\xbd\xed\x1a\xe4\xa0\x58\x2c\x2a\x53\x53\x53\
+\x24\x12\x09\x3a\x5a\x58\x6a\x7f\xb7\xab\xab\x3b\xfa\x4d\xfb\x8f\
+\x9a\xba\xae\x63\x3b\x36\x71\x2d\x8e\xef\x43\x5c\xfb\xfc\xf1\x85\
+\x10\x94\xcb\x65\x84\x10\x52\xbd\x5e\x47\x42\x42\x15\x31\x34\x25\
+\xb6\x82\x91\x96\x22\x4d\xdc\x68\x34\xf0\x7d\xbf\x99\x4e\xa7\x7b\
+\x16\x16\x16\xe8\x4a\x74\x11\xf8\x61\x7d\x96\x92\x1b\x8c\x47\x5a\
+\xb1\x73\x36\x65\x59\x76\xf3\xf9\x3c\x86\x6e\xe0\x74\x99\x24\xfb\
+\xed\xb0\x94\xd0\x10\xf8\xba\x1a\xe6\x85\xdb\x98\x6c\xa5\x52\x69\
+\x15\x0a\x05\x55\x08\x11\xf3\xf0\xf0\x56\x2d\xd3\x9d\x52\x42\xd6\
+\xb8\x93\xe9\x75\xe5\x4e\x0d\x7c\x22\x16\x8b\xe5\x93\xc9\xa4\xa3\
+\x28\x8a\x68\xca\x4d\x72\x03\x12\xbe\x29\x11\xb4\x54\x7c\x5d\x21\
+\xb0\xe4\xd0\xeb\x0d\xaf\x02\x21\x84\x48\xe6\x72\x39\x5a\xbe\x41\
+\x7a\xa3\x05\xae\x4c\xa0\x2b\x04\xa6\xd2\xee\xda\x92\x91\xa4\x10\
+\x6b\x53\x14\x65\xb2\xa7\xa7\x67\x93\xa9\x9b\xd4\xe2\x55\xfa\x06\
+\x05\x4e\xb3\x9d\x73\xd6\xc3\x9c\x73\x27\xb1\x2e\xcb\x32\x7d\x7d\
+\x7d\x6a\xe0\x07\x94\x9d\x3a\x7d\x5b\x20\xb0\x24\x7c\x43\x21\x30\
+\x04\x7e\x33\xe4\xaf\x65\x21\x77\x56\xf7\x4b\x99\x4c\x66\xd0\xb2\
+\x1d\xfc\x55\x4d\x52\x05\x19\x57\x07\x25\x7b\xa0\x8c\x2c\x04\x4b\
+\x6f\x65\x71\xe6\xb5\x4e\x0b\x5b\x5c\x08\x81\xe3\x7b\xf8\xfd\xcb\
+\x24\x77\xb7\xe8\x4d\x0c\xd0\x34\xeb\x21\x74\x69\x2b\x54\x5e\x29\
+\x46\x77\x9a\xa2\x28\xb2\xe7\x79\xe8\xaa\x41\x6c\x7b\x95\xe2\x9a\
+\x1c\x29\x35\xcb\x4c\x75\x8a\x58\x5c\xa5\x7e\x2c\x8f\x3d\x13\xc3\
+\xf7\x7d\x59\x51\x94\x64\x2c\x16\xd3\x14\x45\x91\xe7\x56\x4f\xb3\
+\xe5\x4e\x8d\x44\x50\x60\xa9\x59\x41\xc8\x02\x77\xaa\x9b\xe5\x8f\
+\x52\xf8\x6e\xd8\x20\x62\x59\x16\xb2\x2f\x05\x73\x4a\x45\x1a\xdc\
+\x1b\x10\x0f\xb2\x58\x76\x0b\xd7\xb1\x09\x0c\x95\xfa\xf1\x0c\xce\
+\xa2\x8a\xa6\x69\x04\x41\x10\x97\x65\x19\xd9\x95\x59\x5e\xb7\xc0\
+\xe6\x3d\x69\x12\x41\x9e\xa6\x5e\xc3\xb6\x1d\x68\x24\xa9\xbe\x99\
+\x5d\x59\xaf\x27\x39\xb6\xc3\x7c\x72\x91\xe1\xbd\x49\x02\x2b\x8e\
+\x2a\x4b\x34\x5a\x15\x54\x45\x63\xf1\x95\x3c\xbe\x11\xed\xe4\xa4\
+\x09\xa0\x6a\xe8\xac\xbb\x4d\x47\xc9\x18\x0c\xa4\x86\x90\x0f\xac\
+\x7b\x80\x64\x57\xbb\x3b\xcb\xba\x96\x17\x0e\x2b\x92\x2c\x3c\xd9\
+\x66\x7d\xec\xab\x7c\x6f\xc7\xa3\x7c\xe7\x0b\x8f\xb3\x2e\xb3\x3b\
+\x2a\x31\xec\xd8\x9a\x51\xfe\xd7\x73\x58\xa8\x34\xf8\xd1\xee\x27\
+\x19\xce\xde\xc5\x37\xb7\x3f\xc0\xb7\x6e\xfd\x01\xa6\xdb\x5a\x49\
+\xa8\x06\x1d\x59\x67\x05\x06\xbb\x7a\xef\x66\x77\xf1\xbb\xdc\xb3\
+\xfb\x41\xbe\xb8\xea\x1b\xe8\xa2\x82\x71\xad\x47\xba\x93\x17\x96\
+\xbc\xc0\x61\x6d\x6e\x13\x5f\x1f\x7c\x88\x9f\xdf\xf9\x5b\x32\xe6\
+\x6d\xac\xea\xed\xc1\xf6\xcc\x28\x45\x19\xf5\x5f\x1b\x26\x8a\x26\
+\xb1\x31\xb9\x87\x07\x6f\x79\x9a\xa1\xfc\x5e\x7e\xb2\xf7\x19\x6c\
+\x6d\xf9\x33\x34\x6b\xc7\x73\x96\x55\xb8\x32\x51\xe3\xd1\x7d\xcf\
+\xb3\x21\xbb\x9b\x9f\xed\x7f\x01\x27\xd9\x88\x3e\xbf\x96\xd6\x6c\
+\xe7\x85\x65\x83\x7d\xa9\x76\x5e\x78\x4d\x6a\x13\xeb\x0b\xdb\xb0\
+\xed\x50\x79\x74\xb4\x70\x28\xf8\x4d\x5c\xd7\x64\x53\xe1\x16\x8e\
+\xcf\xfc\x85\xf7\x4e\x7d\xc4\xce\x35\xfb\xc2\x64\xf9\x0a\x6d\x1b\
+\x69\x61\xdb\x22\x2b\x06\x98\xaa\x95\x38\x71\xf9\x75\xbe\x36\x74\
+\x08\x81\xc0\x75\xbd\x48\x67\x77\x1a\x83\x0c\xc3\x20\x70\x15\x06\
+\x73\x37\x71\xd6\x7c\x95\x1d\xf9\xbb\xd8\x58\xdc\x46\x5f\xd7\x7a\
+\xcc\xeb\x7c\x61\xd3\x34\xc2\xbc\xb0\x92\xa4\xea\x4c\xf3\xdf\xd2\
+\x28\xb7\xae\xdb\x4b\x3e\xbe\x1a\xd3\x32\xae\x53\x22\xa1\xe7\xac\
+\x08\x41\x73\x49\xf0\xda\xd9\xe7\x59\xad\x6d\x63\xfb\xda\xed\x68\
+\x52\x22\xd4\xca\xc6\x0a\x4d\x6e\x1a\x04\x81\x47\xd6\xdb\x40\xd5\
+\x2b\xd1\x97\xed\xa7\xb7\x7b\x80\xde\xe4\x40\x14\xde\xee\x48\x50\
+\xbd\xcd\x48\x37\xda\x79\xe1\x33\x95\xf7\xf8\x1f\xcb\xb6\x8e\xf6\
+\x8f\xf1\xef\x16\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x2a\x0f\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x64\x00\x00\x00\x64\x08\x06\x00\x00\x00\x70\xe2\x95\x54\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\
+\x95\x2b\x0e\x1b\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\
+\x0e\x1c\x2b\xec\xa5\xbb\x6e\x00\x00\x20\x00\x49\x44\x41\x54\x78\
+\xda\xed\x9d\x79\x94\x5d\x55\x9d\xef\x3f\xfb\x0c\x77\xae\x39\x35\
+\xa5\x06\x2a\x21\x21\x09\x14\x15\x84\x88\xd1\x00\x09\x08\xad\x08\
+\x1d\x5b\xec\x36\x60\x0b\x48\xd3\xf0\x1c\x68\xc4\xf5\xda\xd5\x4f\
+\x78\x48\x83\xda\x93\xad\x48\xab\x4b\xb4\x15\x51\x40\x9f\xd8\x34\
+\xad\x08\xd8\x0e\xc8\x20\x24\x81\x8c\x18\x92\x9a\x92\xaa\x54\xaa\
+\xea\xd6\x70\xab\xea\xce\xc3\x99\xf6\xfb\xe3\xd6\x3e\xb9\xc9\x13\
+\x03\x61\xce\xcb\x5e\x2b\x8b\x5b\xdc\xe1\x9c\xbb\xbf\xfb\x37\x7d\
+\x7f\xc3\x85\xe3\xeb\xf8\x3a\xbe\x8e\xaf\xe3\xeb\xf8\x3a\xbe\x8e\
+\xaf\xe3\xeb\xf8\x3a\xe6\x97\x78\x33\xdd\x4c\x75\x75\x75\x57\x26\
+\x93\x31\xa5\x94\x5e\x5d\x5d\xdd\xfb\xd6\xac\x59\xf3\x39\xd3\x34\
+\x5d\xd7\x75\xe5\xfe\xfd\xfb\x5b\x56\xac\x58\x81\xe7\x79\x24\x93\
+\x49\x5a\x5b\x5b\x29\x95\x4a\x68\x9a\xc6\xae\x5d\xbb\xb0\x6d\xbb\
+\xfc\x85\x84\x40\xd3\xb4\x83\x5f\x50\x08\x0b\x70\xd5\x63\xc3\x30\
+\xfa\x00\x0d\x20\x1e\x8f\x7f\x30\x1e\x8f\x8f\xa8\xd7\xb6\xb6\xb6\
+\x12\x8f\xc7\xdf\xd0\x3d\x30\xde\xc8\x8b\xb7\xb5\xb5\x2d\x9d\x9b\
+\x9b\x7b\xa7\x94\xd2\x03\x58\xbe\x7c\xf9\xb7\xdb\xdb\xdb\xc3\x52\
+\x4a\x86\xf6\x0d\x11\x0c\x06\xa5\xa6\x69\xc2\x95\x2e\x86\x61\xe0\
+\x38\x0e\x48\xc9\x44\x3e\x41\x87\xd1\x41\x26\x93\x01\x5d\x90\x76\
+\xf2\x9c\xbd\xea\x9d\x00\x4c\x27\xa6\xd1\x84\x86\xae\xeb\x00\xe8\
+\xba\x1e\x90\x12\x44\xf9\xe8\x85\x81\x33\xd5\xf5\x1b\x1b\x1b\x77\
+\xae\x5c\xb9\xd2\x11\x42\xb0\x67\xcf\x1e\x86\x87\x87\x1b\xdf\xe8\
+\x43\xf9\xba\x03\x52\x55\x55\x65\x66\x32\x19\x1d\x60\x76\x76\xf6\
+\xba\x8f\x7e\xf4\xa3\xd7\xab\xe7\xfa\xfb\xfb\xcb\x27\x5c\x08\xf2\
+\x94\xb0\x4a\x96\x10\x9a\x20\xe7\x14\xf0\x3c\x0f\xcb\xb2\xc0\x83\
+\x9c\x5b\xc4\xb2\x2c\x2c\xcb\xc2\xd6\x5d\x1c\xd7\x26\x9d\x4e\x03\
+\x70\x60\x7a\x9c\xd3\x4e\xea\xa6\x58\x2a\xa1\xeb\x3a\x3b\x76\x3f\
+\x4f\x55\x93\xc0\x9b\x0b\x21\x84\x00\x49\xf9\x9f\x00\x04\xb5\xea\
+\xda\xd1\x68\x94\xee\xee\xee\x3e\x40\xb8\xae\x6b\xee\xd9\xb3\x67\
+\xd1\xff\x17\x80\xb4\xb5\xb5\x3d\xb8\x78\xf1\xe2\x8b\xa4\x94\xf4\
+\xf7\xf7\x33\x33\x33\x53\x3e\xf9\x40\xc9\x2e\x6f\xb2\x00\x8a\x9e\
+\x85\xed\xd8\x08\x21\x70\x1c\x07\x29\x25\x96\x65\x21\x3d\x89\x94\
+\x1e\xb6\x6d\x63\x59\x16\x8e\x21\x91\xe0\x7f\x86\xf4\x3c\x6c\xdb\
+\xc1\xb6\x6d\xa4\xe7\x11\xa9\x8a\xb2\xb8\x61\x31\x62\x81\x20\x91\
+\x99\xc3\x3a\x69\x94\x05\x75\x61\x9c\xb1\x28\xf6\x58\x08\xe1\xea\
+\x95\x8a\xfb\x24\x29\x25\x52\x4a\x92\xc9\xe4\xba\x0a\xb5\x3e\x1a\
+\x8f\xc7\x07\x8e\x19\x40\x1a\x1b\x1b\x3f\x58\x28\x14\x22\x80\x15\
+\x0c\x06\x97\xc7\x62\x31\xa4\x94\x98\x01\xd3\xdf\x58\x00\xc7\x73\
+\x28\x95\x4a\xfe\xc6\x5a\x96\x55\x06\x42\x5a\x78\x9e\x57\x7e\xce\
+\x03\x29\x25\xa5\x52\xa9\x0c\x88\xe7\x95\x01\x2c\x16\x01\x70\x1d\
+\xd7\xff\x4c\x57\xd3\x91\xea\x7d\x40\x7f\x6f\x1f\xe7\x37\x9e\x47\
+\x6e\x34\x87\x29\xa0\x14\x4d\xb3\xa0\x43\xc3\x89\x87\x90\x39\x13\
+\x74\x09\x9a\x44\x68\xc8\xb3\xce\x3a\xeb\xb7\x00\xa6\x69\xf2\xe8\
+\xa3\x8f\xde\x09\x7c\xfc\x98\x01\x64\xc1\x82\x05\xf7\xbf\xed\x6d\
+\x6f\xd3\x34\x4d\x63\xef\xde\xbd\x94\x4a\xa5\xf2\xa6\xba\x36\xb6\
+\x65\x57\x80\x50\xde\x68\x81\x40\x4a\xcf\x07\xca\x96\xb6\x2f\x21\
+\x78\x12\xcf\x93\x07\x37\x7d\xfe\x44\xab\xd7\xba\x5e\x59\x7a\x4a\
+\xa5\x12\xba\xa6\xfb\xcf\x09\x21\x90\x9e\x87\x87\x87\x2b\x5d\x12\
+\xb3\x33\x88\x25\x33\xa4\xa4\x09\x0b\x25\xd2\x16\x38\xc9\x00\x6e\
+\xca\xc0\x4b\x1b\xa2\x6c\xd5\xc0\x30\x0c\xea\xea\xea\x4e\x6f\x6b\
+\x6b\xbb\x45\x08\xc1\xec\xec\xec\xf3\x63\x63\x63\x0f\xbe\xe5\x00\
+\xe9\xe8\xe8\x38\xa3\xa6\xa6\x86\x52\xa9\x84\xe7\x79\x5e\xa1\x50\
+\xd0\x74\x5d\xc7\x75\xdd\x83\x00\x48\x0f\xcb\xb6\x7c\x0f\x49\xd9\
+\x09\x21\x04\x9e\x47\x59\xed\x48\x89\x8d\x8d\x37\xbf\xd1\xd2\xf5\
+\x90\x42\xfa\x9b\xee\x49\x81\x40\x1c\x04\xc4\x3d\x28\x21\xba\xa6\
+\xf9\xd2\x24\x84\xf0\xc1\xb1\x6d\x9b\x03\xc3\x23\x9c\xbb\xe8\x5c\
+\x64\x52\xe2\x49\x49\x36\x92\xa2\x61\xa9\x8e\x37\x17\x42\xda\x02\
+\x69\x69\x48\xab\xec\xad\x75\x76\x76\x9e\x09\x9c\x69\x18\x06\x3b\
+\x76\xec\xb8\xa7\x12\x90\x57\xdb\x33\x7b\xad\x00\x09\x34\x37\x37\
+\x6f\xe9\xe9\xe9\xc1\x71\x1c\x36\x6f\xde\x8c\x6d\xdb\xb8\xae\x7b\
+\x50\xf5\xcc\x03\x60\x5b\x07\x55\x96\xe7\x79\x58\xae\x5b\x36\xbe\
+\xa0\xc0\xc4\x16\x0e\x42\x42\x3a\x9d\x2e\x4b\x51\xb0\x44\xb1\x58\
+\x24\x9f\xcf\x23\x1d\x81\x44\x56\x7c\xc6\x41\x40\x34\xa1\xe1\x79\
+\x15\x12\x32\x0f\x88\xfa\xdc\x54\x2a\x85\xe7\x79\x4c\xa7\x66\xd1\
+\x16\x4d\x32\x33\x72\x58\x14\x60\x78\xd8\x89\x00\xd6\x81\x30\x42\
+\x2b\xbb\xd4\xb3\xb3\xb3\x2b\x5b\x5b\x5b\x6f\x06\x74\xe0\xe1\x78\
+\x3c\xfe\xdc\x9b\x56\x42\xda\xda\xda\x9a\xc7\xc6\xc6\x6a\x80\xa0\
+\xfa\xc2\xae\xeb\xfa\x1b\xa1\x69\x1a\xae\xeb\xfa\x9b\x27\x3d\x89\
+\xed\x1c\x04\xc4\xc5\x23\x9b\xca\xa0\x09\x0d\xdb\xb3\xc8\xd8\x19\
+\x1c\xc7\xc1\xd1\x3d\x62\x66\xc4\x57\x59\x8e\x61\x93\xcd\x66\xc9\
+\xe5\x72\x48\x47\xe0\x78\x2e\x73\x73\x73\x00\xe4\xbd\x22\xb6\x6d\
+\x51\x28\x14\xd0\x84\x40\x9a\x07\xc1\x92\xe0\x7b\x67\xbe\xd7\x06\
+\xe4\xe6\xd2\x2c\x6b\x3c\xcd\xb7\xe1\xe3\xc1\x71\x16\xad\x08\xe2\
+\x4c\x86\x71\x73\x41\x64\xa7\x31\x6f\x5b\x24\x8b\x16\x2d\xea\x01\
+\x7a\x34\x4d\x63\xfb\xf6\xed\x89\x37\x35\x20\x85\x42\xe1\x9e\x4b\
+\x2f\xbd\xf4\x82\x5c\x2e\xc7\xe8\xe8\x28\xb6\x6d\xfb\x1e\x92\x0a\
+\xe2\x2a\x37\xc2\x93\x92\x5c\x2e\x47\x2e\x97\x2b\x8b\x55\x38\xe8\
+\x9f\x66\x57\x73\x31\x4c\x1d\xcf\xf3\x30\xe4\xc1\x80\xaf\x50\x2a\
+\x10\x4c\x6b\x18\x55\xe5\x5b\x17\x36\xe8\x9e\x40\x33\xca\xea\x45\
+\x77\x05\x99\x4c\x96\x74\x3a\x8d\x40\x10\xaa\x8f\x50\xb4\x8b\xf3\
+\x12\xe2\xf9\xce\x80\xef\xb5\xc9\xb2\xfa\x2b\x96\xca\xaf\xd9\x9f\
+\x9d\xa2\xed\xe2\x14\xd4\x07\x30\x3a\x25\x86\x06\x5e\x51\xc3\x4d\
+\x1a\x38\x33\x01\x32\xcf\x55\x81\x26\xd1\x34\x8d\x7c\x3e\x1f\x01\
+\x6a\xe7\xf7\x31\xf1\xa6\x03\xc4\xf3\x3c\x2d\x18\x0c\x52\x28\x14\
+\x7c\xd5\xe4\x38\xce\x61\xb6\xc1\xa3\x50\x28\xcc\x3f\x76\xfd\x13\
+\x0b\x10\x8c\x84\xd0\xe6\xf5\x7e\x20\xaf\x21\xea\x34\xce\x3d\xf7\
+\x5c\x66\x67\x67\xe9\xeb\xeb\xe3\x82\x0b\x2e\xe0\xf2\xcb\x2f\xe7\
+\xce\x3b\xef\x64\x70\x70\x90\xcb\x2f\xbf\x9c\x58\x2c\xc6\x9d\x77\
+\xde\x89\xa6\x69\x74\x76\x76\x72\xe0\xc0\x01\x74\x43\xc7\x30\x0c\
+\x04\xe0\x14\x6c\x72\xb9\x4c\x59\x3a\x1d\xd7\x57\x91\xea\x9e\x3c\
+\xcf\xf3\xed\x13\x80\x91\xb4\xf1\x1e\x5d\x44\x42\x96\x25\xca\xd3\
+\x9d\xb2\x2d\xb2\x34\x04\x02\xdd\xf4\x7c\x37\xb9\xa7\xa7\xe7\x9f\
+\x4f\x3d\xf5\xd4\x7f\x2e\x95\x4a\xfc\xea\x57\xbf\x12\x6f\x0a\x40\
+\x9a\x9b\x9b\x9b\x84\x10\x0f\x01\x05\xcb\xb2\x7a\xd4\x06\x2b\xa9\
+\xa8\x54\x59\x2a\xa6\xc8\x66\xb3\x68\x9a\x86\x65\x59\x18\xba\x81\
+\x61\x94\x6f\x43\x93\x82\xf7\xbc\xe7\x3d\xdc\x74\xd3\x4d\x5c\x7b\
+\xed\xb5\x9c\x7b\xee\xb9\xbc\xfd\xed\x6f\xa7\xbb\xbb\x9b\x75\xeb\
+\xd6\x71\xcb\x2d\xb7\xf0\xfc\xf3\xcf\x73\xe5\x95\x57\xf2\x9d\xef\
+\x7c\x87\x77\xbc\xe3\x1d\x5c\x70\xc1\x05\xdc\x7f\xff\xfd\xdc\x78\
+\xe3\x8d\x74\x76\x76\xf2\xcc\x33\xcf\x70\xcf\x3d\xf7\x50\x53\x53\
+\x43\x34\x1a\x65\x7a\x7a\x1a\xd7\x30\xd0\x34\x0d\xcd\x12\x64\xb2\
+\x19\xb2\xd9\xac\xaf\x3a\x3d\xcf\xf3\x1f\x3b\x8e\x43\x38\x12\x26\
+\x18\x31\xd1\x34\x8d\x67\x8b\x7b\x78\xef\x35\x31\x04\xe5\x80\xd2\
+\x4a\x98\x38\x13\x61\xac\x91\x10\xee\x6c\x60\xde\x31\x91\x04\x83\
+\xc1\x37\x8f\xca\x9a\x9c\x9c\x5c\xf4\xfe\xf7\xbf\xff\xcc\x58\x2c\
+\xc6\xe6\xcd\x9b\x29\x16\x8b\xb2\x54\x2a\x09\x05\x82\xeb\xba\x38\
+\x8e\xc3\xdc\xdc\x1c\x42\x08\x74\x7d\xfe\xf4\x0a\x81\xe6\x69\x48\
+\x24\x77\xdd\x75\x17\x89\x44\x82\x5b\x6f\xbd\x95\xab\xae\xba\x8a\
+\xbe\xbe\x3e\xce\x39\xe7\x1c\x76\xec\xd8\xc1\x65\x97\x5d\x86\xe7\
+\x95\x7d\xd0\x6f\x7d\xeb\x5b\xdc\x70\xc3\x0d\x7c\xe1\x0b\x5f\x20\
+\x91\x48\xd0\xd3\xd3\x43\xb1\x58\x64\x66\x66\x86\x93\x4f\x3e\x99\
+\xde\xde\x5e\x3a\x3b\x3b\x59\xbc\x78\x31\x9f\xfa\xd4\xa7\x58\xb5\
+\x6a\x15\x67\x9f\x7d\x36\xae\xeb\xf2\x9e\xf7\xbc\x87\x87\x1e\x7a\
+\x88\x52\xa9\x74\xd0\x59\x38\xcc\xd1\x70\xe7\x1d\x0a\xdb\xb6\x49\
+\x26\x93\x94\x92\x73\xec\xb8\x37\x87\xe7\x49\x14\xfd\x22\xca\x11\
+\x3e\xd6\x8c\x81\x35\x11\xf0\xf9\xb3\xea\xea\xea\xaf\x4b\x29\x09\
+\x87\xc3\xcf\x4d\x4d\x4d\x7d\xff\x75\x05\xa4\xb9\xb9\x99\xc9\xc9\
+\x49\xf5\x67\xde\xb6\xed\xca\x53\x27\xd4\xc9\x53\x5f\x58\x79\x50\
+\x0a\x90\xaa\xaa\x2a\x2e\xbd\xf4\x52\x7e\xfc\xe3\x1f\xf3\xde\xf7\
+\xbe\x17\x21\x04\x17\x5d\x74\x11\xdf\xf8\xc6\x37\x78\xf0\xc1\x07\
+\xf9\xc8\x47\x3e\xc2\xf6\xed\xdb\xe9\xef\xef\xe7\xea\xab\xaf\xa6\
+\x58\x2c\xa2\x69\x1a\x0f\x3e\xf8\x20\x3f\xfc\xe1\x0f\xf1\x3c\x8f\
+\x45\x8b\x16\x71\xf1\xc5\x17\x63\x9a\xe5\xd3\x7c\xc5\x15\x57\x70\
+\xd9\x65\x97\xf1\xe8\xa3\x8f\xb2\x60\xc1\x02\xaa\xaa\xaa\x08\x85\
+\x42\xe4\x72\x39\xee\xbd\xf7\x5e\x22\x91\x08\x23\x23\x23\xec\xdf\
+\xbf\xdf\x77\xa7\x93\xc9\x24\x8e\xe3\xf8\xae\xb2\xeb\xba\x68\x9a\
+\x46\xa9\x54\xe2\xc0\x81\x03\xac\x3f\xff\xa2\x32\x18\x48\xa6\xf4\
+\x04\x9d\x2b\x4c\xbc\x94\x89\x9b\x31\xf1\xaa\x4d\x64\x87\x86\xd0\
+\x24\x18\x52\x22\xf9\xa4\x61\x18\x6c\xdd\xba\xf5\x47\xaf\x3b\x20\
+\x93\x93\x93\x34\x36\x36\xfe\xd5\x89\x27\x9e\xf8\xdd\x7c\x3e\x8f\
+\xeb\xba\x12\x10\x95\x7e\x7e\xa5\x97\x25\x84\x40\x08\x81\xb2\x2f\
+\xb7\xdf\x7e\x3b\xd9\x6c\x96\xb5\x6b\xd7\xf2\xf4\xd3\x4f\xb3\x7e\
+\xfd\x7a\xf6\xec\xd9\x83\xe3\x38\x3c\xf6\xd8\x63\x3c\xfa\xe8\xa3\
+\xe4\xf3\x79\x5a\x5a\x5a\xfc\xd3\x5c\x28\x14\x58\xb0\x60\x01\xa1\
+\x50\x88\x42\xa1\x40\x2a\x95\x22\x1a\x8d\xfa\x6a\x23\x10\x08\xf0\
+\xc0\x03\x0f\x30\x37\x37\x47\xa9\x54\x92\x37\xdd\x74\x93\x08\x04\
+\x02\x65\x6f\x4b\xd3\x48\xa5\x52\xe8\xba\xce\xc2\x85\x0b\xf9\xb7\
+\x7f\xfb\x37\x3e\xf3\x99\xcf\x90\x4c\x26\xfd\xf7\x2b\x69\x0e\x04\
+\x02\xbe\xb4\xcc\xcc\xce\x20\xa5\x24\xe7\x96\x08\x5f\x18\x47\x76\
+\x04\xd1\x84\x86\xa6\x79\x48\xcd\xc3\xc9\xe8\xd8\xe3\x21\x52\xbf\
+\xae\x13\xe8\x12\xc3\x30\x90\x52\xda\xaf\x24\x46\x39\x6a\x95\x65\
+\x59\x56\x57\x5b\x5b\x1b\x73\x73\x73\xd8\xb6\x2d\x94\xf1\x56\x31\
+\x80\x94\xd2\x3f\x7d\xae\xeb\x72\xdd\x75\xd7\x71\xf5\xd5\x57\xb3\
+\x61\xc3\x06\x76\xed\xda\xc5\xfa\xf5\xeb\x79\xf2\xc9\x27\x71\x1c\
+\x87\xeb\xaf\x2f\xf3\x8b\x13\x13\x13\x48\x29\xfd\x6b\xec\xdb\xb7\
+\xef\x90\x6b\x1e\x38\x70\x40\x6d\xa0\xed\x38\xce\x01\x29\x25\xba\
+\xae\x5b\xf9\x7c\xfe\xf2\xb1\xb1\xb1\x29\x80\x40\x20\x70\x49\x73\
+\x73\xf3\xed\xb9\x5c\x8e\x42\xa1\x40\x2c\x16\xe3\xda\x6b\xaf\xa5\
+\xa3\xa3\x83\x6d\xdb\xb6\xf1\xdd\xef\x7e\x97\x91\x91\x11\x9a\x9a\
+\x9a\x7c\x42\xd2\x71\x1c\x92\xc9\x24\xae\xeb\xd2\xd0\xd0\x70\x30\
+\x20\x9d\x97\xfc\xfd\x07\x46\x30\xa7\x1c\x06\x83\xd0\x12\x5c\x4a\
+\x20\x28\x38\x90\x1e\x44\x22\x11\x1e\x94\xe2\x63\x88\x79\xc6\x3f\
+\x9f\xcf\xff\x49\x73\x73\xf3\x63\x9a\xa6\x69\xf1\x78\x7c\xdd\xeb\
+\x66\x43\xa4\x94\x56\xa9\x54\xc2\xb6\x6d\x3f\xbe\x80\x72\xf0\x96\
+\x4e\xa7\x31\x4d\x13\x21\x04\xa5\x52\x89\x70\x38\xcc\xdf\xfe\xed\
+\xdf\xf2\xf4\xd3\x4f\xd3\xdc\xdc\xcc\x8f\x7e\xf4\x23\x1e\x7f\xfc\
+\x71\x06\x07\x07\x0f\x01\x20\x12\x89\xfc\xe1\xa4\x8d\x10\x58\x96\
+\xb5\x4f\xd3\xb4\x21\x40\x3a\x8e\xb3\x2b\x1e\x8f\x7f\xfa\x0f\xbd\
+\x36\x12\x89\x7c\x7b\xeb\xd6\xad\xff\x09\x48\xdb\xb6\xb3\x8b\x17\
+\x2f\x1e\x6d\x68\x68\x88\x28\x09\xb9\xef\xbe\xfb\xe4\x97\xbe\xf4\
+\x25\xf1\xbd\xef\x7d\x8f\x0f\x7c\xe0\x03\x7c\xe8\x43\x1f\xe2\xf3\
+\x9f\xff\x3c\xdb\xb7\x6f\xf7\x3d\xae\x4a\xa7\x24\x91\x48\x70\xf6\
+\x9a\xb3\x70\x1c\x07\x81\x60\xd4\x1c\xe3\x84\xf3\xa0\x6d\x7a\x39\
+\x4e\x22\x84\x1d\x0f\x21\x5b\xe6\xe3\x14\x43\x02\xb4\x18\x86\xd1\
+\xb2\x71\xe3\xc6\xa3\x8a\xe0\x5f\x36\x20\x75\x75\x75\xd7\xae\x59\
+\xb3\xe6\x1f\x07\x07\x07\x43\x8e\x53\x66\x55\x75\x5d\x3f\x24\xde\
+\xb0\x2c\x8b\x40\x20\xc0\x0d\x37\xdc\xc0\x8a\x15\x2b\xb8\xe6\x9a\
+\x6b\xb8\xfe\xfa\xeb\xb9\xf0\xc2\x0b\x19\x1e\x1e\x66\x3e\x39\x44\
+\x2c\x16\x3b\x12\xe8\x2e\x20\x85\x10\x64\x32\x99\x6f\xc4\xe3\xf1\
+\xaf\x1c\xe9\xfe\xd2\xe9\x74\x1e\xf0\x93\x4e\xa3\xa3\xa3\xeb\x47\
+\x46\x46\xcc\x79\xe9\xf9\xc7\xf1\xf1\xf1\xd3\x2e\xb8\xe0\x02\x12\
+\x89\x04\xb7\xdd\x76\x1b\x13\x13\x13\x2c\x5e\xbc\x98\xe7\x9f\x7f\
+\x9e\x7c\x3e\x8f\x6d\xdb\x14\x0a\x05\xd4\x77\x73\x5d\x97\x42\xa1\
+\x50\xfe\x4e\xc2\xa0\xd0\x33\x81\xb6\xa0\x16\xad\x36\x47\xf4\x14\
+\x0d\xa9\x49\xa4\x0d\x4e\x32\xc0\xec\xcf\xeb\xf1\x8a\x9a\x52\x5d\
+\x1c\x8d\xea\x32\x8e\x42\x55\xb5\x2d\x5c\xb8\xb0\x7e\x6c\x6c\xcc\
+\xb7\x17\x95\x34\x87\x4a\x0c\x01\xac\x5f\xbf\x9e\xbe\xbe\x3e\x4c\
+\xd3\x64\xf3\xe6\xcd\x3c\xf5\xd4\x53\x04\x83\x41\x82\xc1\xa0\x4f\
+\x8f\x1c\x8e\x81\xb2\x45\x55\x55\x55\x6c\xd9\xb2\xa5\x3d\x99\x4c\
+\x4e\xbc\x12\x9d\x9c\xc9\x64\x7e\xa3\x1e\x87\xc3\xe1\x4b\x0e\x1c\
+\x38\x60\x00\x9e\xeb\xba\x27\xde\x70\xc3\x0d\xd1\xaf\x7c\xe5\x2b\
+\xf4\xf6\xf6\xd2\xd1\xd1\xc1\x9d\x77\xde\xc9\xfa\xf5\xeb\x29\x14\
+\x0a\xbe\x5d\x71\x1c\x07\xc7\x71\x98\x9d\x9d\xc5\x2e\x59\x94\x4a\
+\x3a\x2f\xf4\xe7\x79\xfb\xc2\x0b\x89\x85\xa3\x3c\xbe\xef\x3f\x08\
+\xe9\xd5\xd8\x64\xc9\x1f\xb0\x91\x0e\x68\x9a\x86\x69\x9a\xf4\xf4\
+\xf4\xdc\x9d\x4c\x26\x37\x8d\x8c\x8c\xdc\xf9\x9a\x49\x88\x52\x43\
+\x95\xbe\xbb\xd2\xc1\xb6\x6d\xb3\x70\xe1\x42\xee\xb9\xe7\x1e\x3e\
+\xfc\xe1\x0f\xf3\xaf\xff\xfa\xaf\xfc\xdd\xdf\xfd\x1d\xc1\x60\xb0\
+\xcc\x3b\xcd\x4b\x90\xe7\x79\xa8\xbc\x83\x52\x13\xf3\xf6\x40\xa4\
+\x52\xa9\x87\x80\x84\xae\xeb\xe9\x70\x38\x6c\x2b\xc3\xab\xa4\xea\
+\x95\xac\x44\x22\x71\x6d\x22\x51\x0e\xa8\xeb\xeb\xeb\x9f\x8c\xc5\
+\x62\x67\xdf\x7c\xf3\xcd\x8c\x8f\x8f\x73\xfb\xed\xb7\xb3\x73\xe7\
+\x4e\x02\x81\x80\x4f\x5c\x56\x7e\xbf\xe9\xe9\x69\xba\xbb\xbb\xcb\
+\x81\xab\x2b\x79\x7c\xfc\x71\xba\xcf\x09\xd2\xae\xb5\xe2\x4e\x84\
+\xf0\x52\x0b\xa1\xed\x10\x72\x15\x5d\xd7\xaf\xec\xef\xef\xd7\x5f\
+\x2b\x40\x42\xef\x7b\xdf\xfb\xf6\x1e\x38\x70\xa0\x5a\x89\xb2\xa2\
+\x46\x94\xeb\x29\xa5\xe4\xd3\x9f\xfe\x34\x4f\x3d\xf5\x14\xf3\x5c\
+\x0f\x1f\xfc\xe0\x07\xa9\xa9\xa9\x79\x49\x17\x30\x4d\x93\x2d\x5b\
+\xb6\x7c\x3e\x93\xc9\xbc\xaa\xfc\xd0\x8b\x48\xfa\x8d\x03\x03\x03\
+\xf5\x9a\xa6\x59\x52\xca\xff\xf5\x4f\xff\xf4\x4f\x6b\x6f\xba\xe9\
+\x26\x2c\xcb\x62\xdd\xba\x75\xec\xdb\xb7\x8f\xb1\xb1\x31\x5f\x8d\
+\x39\x8e\xe3\xb3\xc6\x39\xaf\x44\xdb\x7b\x4a\x84\xdb\xa1\xd0\x3c\
+\x8b\x01\x04\xb5\x08\x6e\x09\x28\x98\x4c\xfd\xa4\x11\x61\x78\x18\
+\x86\xe1\xc7\x50\xaf\x05\x20\xf5\xd5\xd5\xd5\x0b\x75\x5d\xf7\x25\
+\xa4\x50\x28\x50\x2c\x16\x09\x04\x02\x84\xc3\x61\x34\x4d\xe3\x27\
+\x3f\xf9\x09\x57\x5c\x71\x05\xb5\xb5\xb5\x14\x8b\x45\xdf\x5b\x39\
+\x5c\x1a\xd4\xdf\xba\xae\x93\x4e\xa7\x77\x1a\x86\xf1\xb8\xeb\xba\
+\x4e\x24\x12\x89\x67\x32\x99\xd7\x14\x0c\x4d\xd3\xc8\x66\xb3\xbf\
+\xcb\x66\xb3\xea\x34\x5f\x61\x18\x06\xb7\xdc\x72\x0b\x86\x61\xc8\
+\xbb\xee\xba\x4b\xac\x5e\xbd\xda\x7f\xbd\x72\xe3\x95\x26\xc8\x14\
+\x73\x44\xb6\xe7\x98\xfa\x7d\x9a\xcb\xcf\xf8\x5b\x5c\xbd\xc0\x43\
+\xbd\xdf\xa6\x29\xdc\xc5\x44\x66\x88\xb9\xb1\x22\xc2\x28\x5f\x67\
+\x66\x66\x66\x51\x34\x1a\xfd\xcb\x5c\x2e\x77\xdf\xab\x02\x48\x85\
+\xde\x76\x95\xaf\xae\x44\xd9\xb2\x2c\xf2\xf9\x3c\xed\xed\xed\x3c\
+\xf4\xd0\x43\xbc\xff\xfd\xef\x67\xdf\xbe\x7d\x5c\x77\xdd\x75\x04\
+\x02\x01\x34\x4d\xfb\x43\x55\x20\x87\x7c\x7e\x38\x1c\x26\x1e\x8f\
+\x3f\x35\x33\x33\x73\xc3\xeb\x95\x46\x3e\xfc\xd4\xa6\xd3\xe9\xcd\
+\x3b\x76\xec\x08\x7a\x9e\xa7\xb7\xb4\xb4\xbc\xff\xe9\xa7\x9f\x46\
+\xd7\x75\x84\x10\x84\xc3\xe1\x43\x54\x97\x69\x9a\x9c\x7d\xda\x1a\
+\xa4\x07\xae\x74\xd9\xd6\xbb\x11\xd3\xd0\x59\xea\x9c\x83\x3b\x23\
+\x58\x6a\x2f\x86\xd5\xaa\x9e\x47\x02\xac\x29\x14\x0a\x6b\xee\xbe\
+\xfb\xee\x57\x07\x90\x78\x3c\x4e\x6b\x6b\xeb\x59\xb6\x6d\x7f\x40\
+\xc5\x15\x2a\x12\x37\x8c\x32\x0f\x55\x53\x53\xc3\xe6\xcd\x9b\x31\
+\x4d\x93\x9d\x3b\x77\x1e\x02\xc0\x4b\x4a\x9e\x04\x02\x6f\x68\x39\
+\x52\x2a\x95\xba\x03\xb8\x03\x08\x2c\x5e\xbc\xb8\xf4\x37\x7f\xf3\
+\x37\x4c\x4e\x4e\xb2\x61\xc3\x06\xba\xba\xba\xf8\xee\x77\xbf\x4b\
+\xb1\x58\x2c\xb3\xc2\xc5\x22\xf1\x78\x1c\x21\x04\x1b\x53\xbd\xfc\
+\xd9\xa7\xab\xf1\x5c\xf0\x7c\xb0\xc1\x1a\x0b\x52\xe8\x8d\x61\x8d\
+\x05\x01\xf9\x62\x0e\xcc\xd1\xab\xac\x50\x28\xf4\xd7\x67\x9e\x79\
+\xe6\x95\x96\x65\x49\xd7\x75\x85\xba\x39\xcf\xf3\x38\xef\xbc\xf3\
+\xd8\xbd\x7b\x37\xdf\xf8\xc6\x37\xe8\xea\xea\xf2\x6d\x8b\x0a\xb8\
+\x0c\xc3\xf0\xa3\x60\x29\xcb\xd1\xac\xa2\x42\xb6\x6d\xdb\x16\x01\
+\x0a\xbc\x79\x96\x4c\x24\x12\x39\xd3\x34\xa5\x6d\xdb\xe1\x0d\x1b\
+\x36\xe8\x3f\xf8\xc1\x0f\x7c\x49\xaf\xe4\xe6\x00\x2c\xcd\x25\x54\
+\x25\x88\x26\x4f\xe7\x86\x0b\x3f\xcb\x23\x83\xdf\x61\x60\x6c\x90\
+\xd2\xa9\x93\x4c\xe4\x0b\xe4\x86\x34\x10\xf2\x65\x1d\xd0\x97\x04\
+\x5d\x57\x57\xd7\x7d\x2b\x56\xac\xf8\xb0\x6d\xdb\xec\xdf\xbf\x9f\
+\x68\x34\x4a\x3c\x1e\xe7\x93\x9f\xfc\x24\x1d\x1d\x1d\xfc\xcb\xbf\
+\xfc\x0b\xe1\x70\xd8\x57\x49\xca\xc0\x7b\x9e\x57\x66\x59\xe7\xf3\
+\x20\x95\x2e\x71\x3e\x9f\x67\xef\xde\xbd\xe1\x7c\x3e\x5f\xe4\x4d\
+\xb8\xea\xea\xea\x1e\x3b\xe5\x94\x53\xce\x5d\xbe\x7c\x39\x5b\xb7\
+\x6e\x65\x7a\x7a\x9a\xd6\xd6\x56\xa4\x94\x64\x32\x19\x16\x2d\x5a\
+\x84\x8e\x86\x53\x82\xa2\x57\xc4\xa5\x84\x69\x47\xd0\x8d\x79\x35\
+\x6d\x82\x30\xfc\x78\x4a\x9a\xa6\x29\xb6\x6f\xdf\xbe\x7a\x6c\x6c\
+\x6c\xf3\x2b\xb5\x21\x31\xcf\xf3\xaa\xd4\xe9\x70\x5d\xd7\x67\x6b\
+\xe3\xf1\x38\xe7\x9c\x73\x0e\x37\xdd\x74\x13\xdb\xb6\x6d\x23\x97\
+\xcb\x31\x37\x37\x47\x2a\x95\x22\x10\x08\xd0\xda\xda\xca\xd8\xd8\
+\x18\x63\x63\x63\xac\x58\xb1\x82\x6d\xdb\xb6\x51\x2c\x16\x7f\x35\
+\x3e\x3e\x7e\x6b\x2c\x16\x4b\xd7\xd7\xd7\x97\xf2\xf9\xfc\x9b\x11\
+\x0f\x84\x10\x01\xdb\xb6\x79\xe2\x89\x27\xe8\xee\xee\x96\x97\x5c\
+\x72\x89\xb8\xeb\xae\xbb\xa8\xad\xad\xc5\xf3\x3c\x9f\x47\x1b\xd5\
+\x67\x68\xff\x8b\x59\x16\x34\x06\x70\xf2\x56\x39\xcb\x38\x15\xc2\
+\x9a\x08\x22\x0b\x3a\x5e\x5e\x07\x10\xd1\x68\x14\xc3\x30\x9c\x57\
+\xac\xb2\xea\xeb\xeb\x6f\x6f\x6c\x6c\xfc\x53\xe5\xea\x2a\x40\xba\
+\xba\xba\x78\xf6\xd9\x67\xd9\xb4\x69\xd3\x8b\xbe\x77\x74\x74\xd4\
+\x97\x9a\xde\xde\x5e\x62\xb1\x18\x81\x40\x60\x72\xff\xfe\xfd\x4f\
+\xcf\xcd\xcd\xf9\x69\xd7\x37\xe3\x72\x1c\xe7\xf3\x03\x03\x03\xcd\
+\xb6\x6d\xaf\x59\xb3\x66\xcd\xb5\x43\x43\x43\x18\x86\x71\x48\x7e\
+\x07\x20\x65\xe5\x38\xb3\x39\x4a\x21\x2f\x79\xd7\x09\xef\xa3\xaf\
+\x6a\x33\xe9\x8e\x19\x40\x50\x18\x36\x99\xf9\x45\x0d\xe8\x65\xf2\
+\xf3\x55\xb1\x21\xae\xeb\x46\x94\xfb\xaa\x0a\x0b\xde\xfd\xee\x77\
+\x33\x3a\x3a\xca\x63\x8f\x3d\x46\x38\x1c\xf6\xcb\x3c\x15\xbd\xae\
+\x0c\x7e\x85\x6b\x5b\x2e\x09\x75\x5d\xd2\xe9\x74\x94\x37\xf9\xaa\
+\xae\xae\x26\x9d\x4e\xff\xf7\x3c\x37\xe6\x0e\x0d\x0d\x5d\x9b\x4c\
+\x26\x51\x55\x33\x9e\xe7\xd1\xdf\xdf\x4f\x55\x55\x15\x86\x67\xb3\
+\xed\x6b\x36\x94\xa2\xcc\xd5\xed\x44\x0a\x93\x78\xca\x21\x60\xea\
+\x14\x0b\x19\x9c\x54\x39\x3d\x3d\x35\x35\x45\x2c\x16\xfb\x61\x53\
+\x53\xd3\x0d\x53\x53\x53\x8f\x1e\x35\x20\x52\x4a\x57\x49\x86\xb2\
+\x07\x13\x13\x13\xdc\x78\xe3\x8d\x7c\xf5\xab\x5f\xe5\xf6\xdb\x6f\
+\x67\x78\x78\x98\x93\x4f\x3e\x99\x99\x99\x19\xe2\xf1\x38\x35\x35\
+\x35\x3c\xff\xfc\xf3\x68\x9a\xc6\x49\x27\x9d\xc4\x96\x2d\x5b\xc4\
+\xe8\xe8\xe8\x13\xd3\xd3\xd3\xeb\x00\x16\x2e\x5c\xc8\xf8\xf8\xf8\
+\x9b\x16\x10\xc5\x02\xcf\x4b\xb7\xa9\xb2\x9c\xab\x56\xad\x92\xa3\
+\xa3\xa3\x22\x99\x4c\xd2\xd0\xd0\xc0\xc9\x27\x9f\x5c\x26\x23\x3d\
+\x1b\x4e\x9a\xa1\xa6\xae\x80\x97\x0e\x50\x93\x5a\x84\x97\x36\x71\
+\x53\x06\xb4\x80\xd0\xa5\x22\x3e\x4f\xba\xf7\xde\x7b\x1b\x8e\x5a\
+\x42\x9a\x9a\x9a\x16\xbb\xae\xfb\x6e\xe5\x39\x05\x02\x01\x02\x81\
+\x00\x43\x43\x43\x6c\xd8\xb0\xc1\xf7\x9a\x00\x7e\xff\xfb\xdf\xfb\
+\x39\xf3\xca\x78\x63\xd3\xa6\x4d\x84\x42\x21\xff\x75\xc0\x9b\x1a\
+\x8c\x3f\x10\x44\x3e\xba\x65\xcb\x96\xb5\x81\x40\xe0\xea\xf3\xce\
+\x3b\xef\x8a\x1f\xfc\xe0\x07\x7e\x6a\x21\x93\xc9\x20\x3d\x8f\x31\
+\x99\xe0\x8c\xb7\x39\xd8\x8e\x4b\x55\xa8\x86\x82\x9b\x41\xe8\xe5\
+\x82\xbe\xfc\xae\x18\xe9\x67\x6a\x40\x1c\x74\x72\xfe\xe8\xf5\x8e\
+\x40\xcc\xad\x89\x44\x22\x0b\x5d\xd7\x25\x99\x4c\x22\xa5\xe4\xfa\
+\xeb\xaf\xa7\x58\x2c\x12\x0e\x87\x89\x44\x22\x3e\x48\xa1\x50\x88\
+\x60\x30\x48\x38\x1c\x26\x1c\x0e\x13\x0a\x85\x08\x85\x42\xc4\x62\
+\xb1\x43\xbc\xab\xb7\xda\xca\x64\x32\x93\xa5\x52\xe9\x49\x4d\xd3\
+\x46\xbe\xf5\xad\x6f\x1d\x22\x3d\x7e\x32\x4e\xba\x80\xc6\x62\x79\
+\x11\x9f\x59\x7d\x37\x7f\x7f\xee\x8f\x18\xde\xe3\xd2\x11\x5b\x8e\
+\x08\x96\x6b\xcf\x14\x7b\x7c\xa4\x98\xe4\x8f\x3e\x1b\x0e\x87\xaf\
+\x5c\xb2\x64\xc9\xdd\x00\xc9\x64\x92\xa6\xa6\x26\x7e\xf2\x93\x9f\
+\x30\x3d\x3d\xcd\x43\x0f\x3d\xc4\xfe\xfd\xfb\x59\xb7\x6e\x1d\x8f\
+\x3c\xf2\x08\x2b\x57\xae\x24\x91\x48\x30\x38\x38\x48\x4f\x4f\x0f\
+\x8d\x8d\x8d\xfc\xf0\x87\x3f\xa4\x58\x2c\xce\xbc\xf0\xc2\x0b\x8d\
+\xcd\xcd\xcd\x81\xc9\xc9\xc9\xd2\x5b\x15\x98\x9a\x9a\x9a\x2f\xac\
+\x5e\xbd\xfa\xa6\xd1\xd1\x51\x92\xc9\x24\xa1\x50\x88\xd3\x4f\x3f\
+\x9d\x40\x20\x80\x04\x02\x86\x86\x74\x02\x38\x5e\x09\xc3\x30\x71\
+\xa4\x8d\xa6\x97\x6b\xcf\x64\x05\x31\x30\x3c\x3c\x1c\x7f\xfa\xe9\
+\xa7\x17\x1e\x95\xca\xd2\x34\x2d\xac\x54\x90\xae\xeb\x84\x42\x21\
+\x3e\xf9\xc9\x4f\xd2\xd9\xd9\xc9\x0b\x2f\xbc\x80\x94\x92\xde\xde\
+\x5e\x74\x5d\xf7\xf3\x1c\x00\x8f\x3c\xf2\x08\xae\xeb\xaa\x82\x06\
+\x09\xc8\xb7\x32\x18\xf3\x74\xcb\xcf\x9e\x79\xe6\x99\xfd\x0b\x17\
+\x2e\xbc\xbd\xbd\xbd\x3d\x3a\x3a\x3a\xea\xf3\x79\x1e\x1e\xdb\xeb\
+\xfb\x38\xeb\x2f\x22\x18\x19\x13\x37\x6d\xa0\xa7\x82\xb8\x29\x03\
+\x37\x6d\x60\x8d\x85\x10\x02\xc5\x68\x9b\x47\x6d\x43\x42\xa1\xd0\
+\xa7\x65\xd9\xaa\x8b\x25\x4b\x96\xe0\x38\x0e\xf9\x7c\x9e\x3d\x7b\
+\xf6\xf8\xd1\xab\xe2\x7c\x82\xc1\xa0\x9f\x94\x51\x65\x9b\x80\x4c\
+\xa5\x52\x36\xc7\xc0\xca\x64\x32\xcf\x02\xcf\x1a\x86\xf1\x8f\x23\
+\x23\x23\x51\x4d\xd3\x0e\x26\xe5\xa4\x43\xfd\x42\x03\xe1\xea\x2c\
+\x6a\x3c\x85\x9a\x45\x55\xbc\x30\xb5\x89\x58\xa0\x96\xbc\x3e\xc5\
+\xc8\x57\x5b\x11\x5a\x99\x50\x55\x99\xd5\xa3\x02\x44\x4a\x29\xa4\
+\x94\xa2\x54\x2a\xf1\x89\x4f\x7c\x02\xc3\x30\xb8\xe8\xa2\x8b\xf8\
+\xf2\x97\xbf\x8c\x69\x9a\x18\x86\x41\x2a\x95\x62\x64\x64\x84\xee\
+\xee\x6e\x86\x87\x87\x49\xa7\xd3\xf4\xf7\xf7\x93\xcd\x66\xc9\x64\
+\x32\x7f\x33\x30\x30\xf0\x0d\x8e\xa1\xa5\x3c\x4d\x28\xe7\xf8\xa5\
+\x94\xb8\x48\x3c\xf2\x3c\xbb\xab\xc8\xa2\x77\x76\xf1\xf0\xf3\x4f\
+\x10\xab\x8f\x12\x88\x2e\x66\xd7\xcc\x5e\x52\xa3\x36\x9a\x56\x3e\
+\xa4\x85\x42\xa1\xee\xa8\x6d\x48\x7d\x7d\x7d\x7f\x53\x53\xd3\x52\
+\xd7\x75\xa9\xab\xab\xe3\x8a\x2b\xae\xa0\xb7\xb7\xd7\x2f\x36\xf0\
+\xdb\x0a\x4a\x25\x42\xa1\x10\xa5\x52\x89\x6c\x36\x4b\x34\x1a\x25\
+\x95\x4a\x91\xcd\x66\xaf\x3b\xd6\x00\x69\x69\x69\xf9\x8c\x10\xe2\
+\xb3\x42\x88\xba\x95\x2b\x57\xfa\xb9\x9e\xa2\x67\x11\x3a\x39\x85\
+\xe1\x18\x78\xd3\x11\x9c\xc9\x30\x68\x1e\x42\x13\x2a\xd7\x8e\x94\
+\x92\xe9\xe9\x69\x1e\x7b\xec\x31\x71\xb4\x71\x88\x50\x74\xb5\xae\
+\xeb\xdc\x75\xd7\x5d\x87\x24\xa3\x2a\xdd\x5b\x15\xb9\x9a\xa6\x89\
+\x6d\xdb\x32\x16\x8b\x89\x74\x3a\xad\x1f\x4b\x60\x54\x57\x57\x33\
+\x31\x31\xf1\xa5\xd6\xd6\xd6\x6b\x81\x3a\xcf\xf3\xca\x44\xa9\xd0\
+\x78\xac\xb8\x9d\xbf\x5c\xd5\x84\x23\x6d\x2c\xb7\x44\xcc\x08\xe3\
+\x66\x74\xbc\x54\x90\xdc\xce\x18\x56\x3c\xf0\x07\xa9\xff\x97\xe5\
+\xf6\x02\xa6\x6d\xdb\x5c\x70\xc1\x05\x34\x36\x36\x72\xf5\xd5\x57\
+\xd3\xd4\xd4\x84\x69\x9a\x2c\x5e\xbc\x98\x8e\x8e\x0e\x4c\xd3\xa4\
+\xb1\xb1\x91\x64\x32\x49\x2e\x97\x43\xd7\x75\xe2\xf1\xb8\xd8\xbd\
+\x7b\xf7\x2f\x32\x99\xcc\x2f\x8f\x25\x40\x94\xcb\x2b\xe6\x4f\xa1\
+\x4a\x45\x58\x96\x85\xd0\xca\xe5\xa6\xef\x8c\xfd\x35\x5f\x5c\xf7\
+\x30\xcb\x6a\xcf\x64\x79\xc3\xd9\x44\x3b\x25\xc4\x4a\x07\x1b\x8c\
+\x5e\x89\x0d\x01\xc4\x7c\x76\x8d\x7b\xef\xbd\x97\xa1\xa1\x21\xf6\
+\xec\xd9\x83\x69\x9a\xd4\xd7\xd7\x93\xcd\x66\xd1\x75\x9d\xce\xce\
+\x4e\x6a\x6b\x6b\xd9\xbb\x77\x2f\x3d\x3d\x3d\x64\x32\x19\x0a\x85\
+\xc2\xe6\x78\x3c\xde\xcb\x31\xb8\x1c\xc7\x91\x7e\x57\x30\xa0\x21\
+\xd0\x43\x82\x7d\x7b\x93\xfc\xcb\xff\xb8\x9c\xeb\x1e\x7c\x37\x77\
+\x5f\xb6\x99\xc9\xb9\x69\x9e\x4b\xfc\x17\xdf\xfb\xd5\xbd\x58\x96\
+\xe6\x07\x94\xaf\x88\xcb\xd2\x34\x8d\x81\x81\x01\x2e\xba\xe8\x22\
+\x0a\x85\x82\xaf\x0b\x2b\xcb\x5c\xfa\xfa\xfa\xfc\xc7\x4f\x3f\xfd\
+\xf4\x21\x51\xf9\xb1\xb8\x66\x66\x66\xde\xd5\xd2\xd2\x32\xa5\x78\
+\x2d\x81\x40\x84\x05\x85\x9c\x47\x38\x74\xd0\xab\x75\x5c\x87\xc7\
+\x87\xfe\x03\xcf\x95\xbe\xbd\x7d\xa5\x12\x42\x20\x10\xa0\xbe\xbe\
+\x9e\x40\x20\xa0\xaa\x14\x09\x06\x83\x64\x32\x19\x6a\x6a\x6a\xfc\
+\xbc\xba\xca\xa9\x67\x32\x19\x2c\xcb\xb2\x81\xb1\x63\x15\x10\xd7\
+\x75\xb3\xf3\x92\x52\xa6\x43\x28\xe7\x80\x62\x31\x13\xdb\x02\xd7\
+\x9b\xef\x08\xc6\xc5\xf5\x1c\x3c\xd7\xc5\xb2\xbc\x57\x0e\x88\xe7\
+\x79\xac\x5b\xb7\x8e\x2b\xaf\xbc\x92\x33\xce\x38\x83\x87\x1f\x7e\
+\x98\xdf\xfd\xee\x77\xe4\xf3\x79\x26\x26\x26\x38\xe3\x8c\x33\x98\
+\x9c\x9c\xa4\xaf\xaf\x0f\xcf\xf3\x68\x6c\x6c\xe4\x85\x17\x5e\xc0\
+\xf3\xbc\x7d\xf1\x78\xfc\xdf\xdf\x0c\x93\x11\x5e\xab\x35\xcf\x64\
+\x4b\xcb\xb2\x84\x40\x20\x34\x9d\xa5\xcb\xea\x79\x64\xeb\xcf\xf9\
+\xcc\x39\xdf\xe2\xbf\xf6\x7c\x13\x27\x17\xe6\xbc\xc5\x1b\xe8\x75\
+\xbe\x43\xa9\xe4\x1c\xa2\x55\x8e\x5a\x42\x36\x6e\xdc\xc8\xf4\xf4\
+\x34\x35\x35\x35\x0c\x0c\x0c\xf8\x28\x4b\x29\xf9\xe9\x4f\x7f\xea\
+\x57\x92\x78\x9e\xc7\xd4\xd4\x94\x2a\xae\x16\xc0\x31\x0b\x06\x60\
+\x15\x0a\x85\xd9\x42\xa1\x50\x9f\x4c\x26\xd1\x84\x46\xbe\xd9\xa3\
+\x68\x55\xf1\x1f\x43\x7f\xcf\x27\x63\xdf\xe3\x40\xae\x9f\xe7\x27\
+\x7e\x87\x11\xd0\x98\x19\x4b\x31\x37\x57\xae\x43\x50\x99\xd5\xa3\
+\x06\xc4\x30\x0c\x46\x47\x47\x19\x1e\x1e\x46\xd7\x75\xdf\xe5\xd5\
+\x34\xcd\xff\x5b\x45\xed\x2a\x0f\x32\x39\x39\xd9\xd2\xda\xda\xfa\
+\xbe\x78\x3c\xfe\xc8\xb1\xaa\xb5\x84\x10\x96\x4a\x57\xab\x86\x1e\
+\x23\x28\xa8\x22\xc2\x1d\x8f\x5d\x4b\xb2\xcf\x63\x66\x6f\x81\x52\
+\xd2\x23\x37\xe9\x22\x34\xe1\xef\xd3\x51\x03\x12\x8d\x46\xf9\xc8\
+\x47\x3e\x42\x7f\x7f\x3f\x17\x5f\x7c\x31\x4f\x3c\xf1\x04\x43\x43\
+\x43\xd4\xd5\xd5\xe1\x38\x8e\xef\x06\x8e\x8c\x8c\x90\x4c\x26\x69\
+\x69\x69\x61\x72\x72\x92\x5c\x2e\x57\x4d\xb9\x18\xe6\x98\x03\xa4\
+\xa5\xa5\x45\x55\xe9\x4b\x75\x08\x6b\x6b\x6b\x31\x87\x8b\x3c\x71\
+\x63\x9a\x42\xc2\x2d\x77\xec\x6a\x20\xf4\xb2\x0f\x66\x98\xf8\x07\
+\xf6\x48\xf4\xfb\x1f\x05\x24\x12\x89\x30\x35\x35\xc5\xa7\x3e\xf5\
+\x29\xa4\x94\x6c\xdc\xb8\x91\xba\xba\x3a\x6a\x6b\x6b\x71\x5d\x97\
+\xd1\xd1\x51\xba\xba\xba\xfc\xc6\x97\xb6\xb6\x36\x72\xb9\x9c\x02\
+\xca\x3b\x16\x45\x63\x62\x62\x82\xf6\xf6\xf6\xef\x06\x02\x81\x46\
+\xd7\x75\xb9\xe3\x8e\x3b\x58\xb7\x6e\x1d\x5f\xfb\xda\xd7\x38\x70\
+\xe0\x00\x9e\xe7\x91\xc9\x64\x30\x0c\x83\xd9\xd9\x59\xaa\xab\xab\
+\x09\x85\x42\x0c\x0f\x0f\x53\x28\x14\x38\x52\x0d\xc1\x91\xd8\x5e\
+\x7e\xf1\x8b\x5f\xf0\xf3\x9f\xff\xfc\x45\x5f\x53\x69\x27\x76\xed\
+\xda\x45\x24\x12\x79\x49\xc6\xeb\xad\xbc\x02\x81\xc0\xda\x55\xab\
+\x56\x19\xbf\xff\xfd\xef\x59\xb1\x62\x05\x7d\x7d\x7d\xac\x5d\xbb\
+\x96\xef\x7f\xff\xfb\xf4\xf4\xf4\x30\x36\x36\x46\x57\x57\x17\x8f\
+\x3c\xf2\x08\xd5\xd5\xd5\xb4\xb7\xb7\x73\xda\x69\xa7\x71\xdf\x7d\
+\xf7\x1d\x31\x37\xf4\x47\x15\x5a\x6b\x6b\xeb\x70\x55\x55\xd5\x09\
+\x95\x84\x5a\xa9\x54\x22\x12\x89\xf8\x95\x25\x91\x48\x84\x5c\x2e\
+\x87\xe7\x79\xd4\xd5\xd5\xf9\xd2\xd2\xde\xde\x6e\xcf\xcd\xcd\xdd\
+\xb3\x67\xcf\x9e\xab\x8f\x35\x40\x16\x2d\x5a\x34\x78\xea\xa9\xa7\
+\x9e\x38\x31\x31\xc1\x92\x25\x4b\x58\xb3\x66\x0d\xbf\xfc\xe5\x2f\
+\x29\x95\x4a\x04\x02\x01\xb2\xd9\x2c\xe1\x70\x98\x74\x3a\xed\xef\
+\x9b\xe7\x79\xe4\x72\x39\x5c\xd7\x65\xe7\xce\x9d\x47\xc7\x65\x45\
+\xa3\x51\xeb\x9b\xdf\xfc\x26\xa9\x54\x8a\x0f\x7c\xe0\x03\xdc\x7f\
+\xff\xfd\xf4\xf6\xf6\xd2\xd0\xd0\x40\x55\x55\x15\xcf\x3d\xf7\x1c\
+\x55\x55\x55\xf4\xf5\xf5\x31\x31\x31\x41\x57\x57\x17\x23\x23\x23\
+\x0c\x0f\x0f\xe3\x38\x8e\x29\x84\x30\x8f\x41\x30\xfe\x2a\x10\x08\
+\xd4\xcd\xcc\xcc\x20\x84\x60\x68\xdf\x10\x03\x03\x83\x18\xc6\xa1\
+\x27\xdf\x1f\x86\x33\x1f\x77\x08\x21\x08\x85\x42\xfe\xff\x3f\x2a\
+\x40\x74\x5d\xe7\x73\x9f\xfb\x1c\x5f\xfc\xe2\x17\xb9\xf5\xd6\x5b\
+\xd9\xb1\x63\x87\x5f\x75\x91\xcf\xe7\xd1\x75\xdd\xaf\x46\x71\x1c\
+\x87\xe1\xe1\x61\x3f\x8a\x9f\x77\x8d\xbd\x79\x49\x3b\x66\x5c\xe0\
+\xb6\xb6\xb6\x7f\x5c\xba\x74\x69\x3d\xc0\x8e\x5d\xcf\xe3\x35\xa5\
+\x89\x04\x4c\x64\x26\x80\xb4\x34\x3c\x4b\x43\xda\x1a\x42\x48\x5f\
+\xff\x48\x29\xc9\xe7\xf3\x94\x4a\x25\x7f\x48\xc2\x2b\x8a\xd4\x6f\
+\xbe\xf9\xe6\x17\xe3\x74\x7c\x5b\xa3\x7a\xb5\x43\xa1\x90\x7f\x32\
+\x34\x4d\xbb\x72\xe9\xd2\xa5\x17\x0d\x0c\x0c\x34\x1e\x2b\x12\x62\
+\x59\x96\xae\x5a\xbc\xc7\xab\xf3\xfc\xf9\x27\x1a\x70\x0f\xa3\xa7\
+\x3c\x07\xb2\x5b\xaa\xc9\xef\x89\xa2\x6a\x7b\x67\x67\x67\xc9\x66\
+\xb3\x94\x4a\xa5\xc4\x51\xb3\xbd\x63\x63\x63\xf7\x37\x35\x35\x71\
+\xe9\xa5\x97\x72\xd3\x4d\x37\x71\xd6\x59\x67\xd1\xda\xda\x8a\x2a\
+\xd5\x3f\xef\xbc\xf3\x68\x6f\x6f\x07\xca\xad\xd2\x4b\x96\x2c\x61\
+\x72\x72\xd2\x77\x8b\xab\xab\xab\xe9\xe8\xe8\x38\x56\x24\x23\x02\
+\x2c\xcc\xe7\xf3\x7a\x32\x99\x2c\x37\x28\x15\x2c\x32\x13\x25\xc4\
+\xd0\x32\x3e\xdc\xf6\x45\x4e\x64\x0d\xda\x44\x3b\x6e\xca\x24\x53\
+\x4a\x91\x9c\x2b\x33\xe0\xaa\xb7\xe4\xa5\xd4\xf8\xfe\x51\x09\xb1\
+\x6d\xbb\xdf\xb2\x2c\xd6\xae\x5d\xcb\xb2\x65\xcb\x18\x1f\x1f\xa7\
+\x54\x2a\x31\x37\x37\x47\x73\x73\x33\xe9\x74\x9a\xda\xda\x5a\x52\
+\xa9\x14\x93\x93\x93\x54\x57\x57\xa3\xeb\x3a\xaa\x87\xc4\xb6\x6d\
+\x4c\xd3\x94\x15\x4e\xc2\x5b\x56\x75\xe5\xf3\xf9\x8f\xfd\xe9\x9f\
+\xfe\xe9\x97\x4d\xd3\x04\x29\xc9\xd8\x45\xde\xbd\x68\x39\xa9\x9f\
+\x19\xcc\x15\x53\xfc\xc3\xc3\x5f\xc6\xd0\x0d\x34\x43\x20\x58\x80\
+\xae\xc1\x82\x46\x9d\xa1\xa1\x21\x1a\x1b\x1b\x29\x16\x8b\x04\x83\
+\x41\xe9\x79\x5e\xf8\x15\xd1\xef\x63\x63\x63\x6c\xd8\xb0\x01\xc3\
+\x30\xfc\xfc\xb9\x5a\x83\x83\x83\xbe\xc1\x02\x78\xee\xb9\xe7\x30\
+\x4d\x93\x4a\xe2\xcd\x75\xdd\xaa\x95\x2b\x57\xde\x35\x35\x35\x35\
+\x18\x8f\xc7\xff\xe1\xad\x2a\x21\x9e\xe7\xd5\x29\x16\xbb\x20\x6d\
+\xec\x35\x23\x2c\xe8\x89\xe1\xe2\x22\x6d\x70\x27\xa2\x58\x93\x01\
+\x9c\xc9\x20\x56\xdc\xf0\xab\xde\x55\x43\x6c\x2a\x95\xa2\xb9\xb9\
+\x59\x14\x8b\xc5\xab\xda\xda\xda\x18\x1b\x1b\x7b\xf9\x2a\x4b\xd3\
+\x34\x4f\xa9\x9e\x48\x24\x42\x30\x18\xf4\xeb\xb0\x54\xd7\xd4\xe1\
+\x35\x58\x6a\x7a\x82\x6a\x03\x03\x42\x3d\x3d\x3d\x57\x01\x7f\x72\
+\x0c\xd8\x8f\x72\xff\xa1\x65\x51\x57\x13\xa2\x54\x70\x38\x77\xc1\
+\x5f\xf3\xde\x25\x57\x10\x68\xb5\xa8\x7f\x9b\x43\xd5\x79\x09\x4a\
+\x79\xfb\xe0\x4c\xc8\xf9\x7a\x2c\x55\xa0\x2e\x84\x08\xbe\x18\x18\
+\x47\x94\x90\xaa\xaa\xaa\x7b\xc7\xc6\xc6\xd6\x7f\xf6\xb3\x9f\xfd\
+\xf3\x9a\x9a\x1a\x2e\xbd\xf4\x52\x6e\xbb\xed\x36\x92\xc9\x24\x2b\
+\x57\xae\xc4\xf3\x3c\x7e\xf9\xcb\x5f\xb2\x72\xe5\x4a\x76\xec\xd8\
+\x01\x40\x30\x18\xa4\x58\x2c\x92\xcd\x66\xfd\xc1\x01\xf3\xae\x9e\
+\xfb\x56\x54\x5d\xa1\x50\xe8\x2f\xd6\xaf\x5f\x7f\xff\x7c\x25\x8d\
+\x74\x5d\x29\xc2\x55\x3a\xde\x2f\x1a\xc8\x08\xc9\x03\xda\x6f\x40\
+\x80\xa6\x75\xfa\xef\xa9\xae\xd7\xd8\xbc\x79\x33\xcb\x96\x2d\xf3\
+\x5b\xe1\x94\x2a\x3f\x52\xd0\xfc\x47\x01\x99\x9a\x9a\x92\x8b\x16\
+\x2d\xb2\x1e\x78\xe0\x01\x3e\xfe\xf1\x8f\x73\xf3\xcd\x37\xd3\xd7\
+\xd7\x87\xa6\x69\xc4\xe3\x71\x3f\x25\xb9\x65\xcb\x16\x0a\x85\x02\
+\xc9\x64\x92\xe6\xe6\x66\x9f\x7c\x54\xee\xaf\x6d\xdb\x84\xc3\xe1\
+\x33\x2e\xbc\xf0\xc2\x67\x06\x06\x06\xfe\x7b\x70\x70\xf0\xd6\xb7\
+\x90\xaa\x0a\x29\x9b\x68\x08\x5d\x0c\x9d\xb0\x8b\x77\x9c\x5f\x85\
+\xeb\xb9\xd8\x29\x0d\xd2\x11\xdc\xb4\x81\x9b\x34\x29\x0e\x86\x91\
+\xae\x00\xb7\xac\xde\x2b\xa7\xd7\x05\x02\x01\x12\x89\xc4\xf3\x86\
+\x61\xec\x7b\x45\x6e\xaf\x94\x52\x73\x5d\x97\x2f\x7d\xe9\x4b\x7e\
+\xbd\x95\xf2\x16\xa4\x3c\xb4\x5d\x4b\xd3\x34\xa6\xa7\xa7\x7d\xf1\
+\x54\xdd\x46\xf3\x11\x6c\x4d\x7d\x7d\xfd\x3b\x6b\x6b\x6b\xf7\xbe\
+\x45\x48\xc4\xda\xfa\xfa\xfa\x25\x89\x44\x62\xd1\x7c\xd2\x0d\x5d\
+\x6a\xe8\x96\x20\x35\x24\xa9\xd3\x4e\xa4\xb5\xae\x9a\x01\x6f\x3b\
+\xa2\x4a\x43\x54\x0b\x72\x2f\x54\xe3\x15\x35\x7f\x22\xc5\xc1\xd9\
+\x92\x52\xb5\x32\x7c\x73\x6a\x6a\xea\x99\x57\x04\xc8\xec\xec\xec\
+\x57\xb3\xd9\x6c\xe7\x35\xd7\x5c\xf3\xae\x42\xa1\xc0\xbb\xde\xf5\
+\x2e\x1e\x78\xe0\x01\x3c\xcf\x63\xc1\x82\x05\x8c\x8f\x8f\x13\x0e\
+\x87\x89\xc5\x62\x3c\xf3\xcc\x33\xb4\xb7\xb7\xd3\xd2\xd2\x42\xb1\
+\x58\xf4\x49\xb6\xca\x51\x15\x2f\xb7\x4d\xf8\x8d\x5a\xc5\x62\xf1\
+\xe3\xa7\x9f\x7e\xfa\x3f\x28\x43\x5e\x92\x16\xc1\x06\x87\xa6\xd9\
+\xb7\x23\x9e\x13\xe4\x80\x1c\x0e\x01\x4e\xf5\xdf\xd3\xde\x64\xb0\
+\x7b\xf7\x6e\xbf\x15\x43\x55\xe2\xa8\x34\x05\xe5\x39\x8d\x47\xaf\
+\xb2\x0c\xc3\x20\x9d\x4e\x6f\x5e\xb8\x70\xe1\xd0\xbe\x7d\xfb\xde\
+\xf5\xef\xff\xfe\xef\xf4\xf7\xf7\xb3\x74\xe9\x52\x0c\xc3\xf0\xdb\
+\xa3\x0d\xc3\x20\x1a\x8d\x72\xca\x29\xa7\x30\x37\x37\x47\x43\x43\
+\xc3\x21\x05\x65\xaa\x49\x74\x9e\x07\xfb\xe0\x25\x97\x5c\x72\xfe\
+\xcc\xcc\x8c\xd8\xbe\x7d\x7b\x77\x3a\x9d\x4e\xbc\x59\x40\xa8\xb4\
+\x6d\x9e\xe7\x99\xf9\x7c\x1e\x21\x04\x79\xb7\x04\xe7\x1e\x60\xf1\
+\xb2\x30\xd2\x03\x69\xcf\x47\xe4\x96\x86\x3d\x6d\x92\x7a\xbc\x0e\
+\x29\x5c\xbf\xa1\x47\x1d\xc0\x64\x32\x49\x30\x18\x44\xd3\x34\x19\
+\x08\x04\x84\x65\x59\xe6\x2b\x02\xa4\x22\x12\x17\x7d\x7d\x7d\xac\
+\x5b\xb7\xce\x37\x50\x87\x97\x8d\x2a\xf5\x25\x84\xe0\xd7\xbf\xfe\
+\xf5\xc1\x21\x65\x9a\x46\xb1\x58\xf4\x01\x11\x42\x84\x0d\xc3\x08\
+\xd7\xd6\xd6\x62\x59\xd6\x9b\x8a\x16\x8e\xc7\xe3\x9c\x72\xca\x29\
+\xff\xa7\xb9\xb9\xb9\xb3\x54\x2a\x75\x64\xd2\x69\xf0\x34\x1c\xcf\
+\xc3\x78\xb2\x96\xa1\xcd\x82\xf9\x56\xe7\x0a\x5e\xd6\x25\x3b\x33\
+\x4d\x75\x4d\x95\xdf\x61\xe6\xcf\x1b\xb6\x6d\x42\xa1\x10\xba\xae\
+\x8b\x4d\x9b\x36\x9d\x58\x5f\x5f\x3f\xf1\x8a\x00\x51\xab\x54\x2a\
+\x4d\x99\xa6\x39\xaa\xeb\x7a\x7b\x53\x53\x13\x86\x61\xf8\xdc\x8c\
+\x9a\x5f\x15\x0a\x85\x7c\x23\xaf\x8a\xe9\xd4\x00\x80\xd9\xd9\x59\
+\x7f\xca\x8e\x9a\xdb\xeb\x38\x0e\x5d\x5d\x5d\xd7\x04\x02\x81\xec\
+\xc4\xc4\xc4\xf3\x53\x53\x53\x4f\xbe\xd1\x52\x31\xef\x59\x5e\xb0\
+\x60\xc1\x82\x7a\x80\x84\x9d\xa6\x7a\xcd\x2c\xf5\xd5\x21\x9c\xc9\
+\x30\xce\x64\x08\x59\xd2\xf1\x4a\xe5\xb9\xbe\x78\xe5\xc3\x18\x6d\
+\x29\x77\x07\x54\x4e\x5d\x55\xd9\x53\x55\x74\x2e\xa5\xdc\x37\x33\
+\x33\x73\xc4\xfb\x79\x49\x95\x85\xf9\x7c\xfe\xbf\xc7\xc7\xc7\x7f\
+\xdc\xd4\xd4\xf4\x3f\xef\xbe\xfb\x6e\x56\xad\x5a\xe5\xab\xa3\x0f\
+\x7d\xe8\x43\x4c\x4e\x4e\xb2\x7c\xf9\x72\xba\xba\xba\x98\x99\x99\
+\x61\xed\xda\xb5\xac\x5e\xbd\xda\x1f\x4a\xa6\x5a\xdb\x22\x91\x88\
+\x3f\x24\xcc\xf3\x3c\x5a\x5b\x5b\xcf\xef\xea\xea\x7a\xdf\xee\xdd\
+\xbb\xf3\xc5\x62\xf1\x0d\xc9\x2e\x66\xb3\x59\x5a\x5b\x5b\x3b\xab\
+\xaa\xaa\xde\x56\x5d\x5d\xdd\x68\x9a\xe6\x47\xa5\x94\xc1\x42\xa1\
+\xc0\xae\xe4\x10\x4b\x4f\x35\x28\x16\x2c\x1c\x23\x87\x57\x9b\xc2\
+\x6b\x48\x22\x9b\x67\x29\x58\x79\x72\xe3\xf8\x55\xed\x2a\x05\x91\
+\x4e\xa7\x7d\xb2\x55\x0d\xda\x89\xc5\x62\x0c\x0f\x0f\xbf\x24\xcf\
+\xf2\x65\x15\x50\x85\x42\x21\xae\xbd\xf6\x5a\x6a\x6a\x6a\x18\x1f\
+\x1f\x47\x4a\xc9\xee\xdd\xbb\xf1\x3c\x8f\x7d\xfb\xf6\xf9\x0d\x29\
+\x3f\xfd\xe9\x4f\x7d\x35\xa6\x69\x9a\x6f\x6f\x94\x28\x2b\x5e\xa7\
+\x62\x60\x66\x8d\xa6\x69\x4b\x01\xb1\x70\xe1\xc2\xf8\xe8\xe8\x68\
+\xe6\xf5\x04\x25\x14\x0a\xdd\xb2\x6a\xd5\xaa\xbf\x2a\x47\xca\x1a\
+\x33\xcc\xb1\xa0\x5d\x67\xdd\x64\x0f\xf6\x6f\xcc\x72\x4b\x9a\x06\
+\x68\x07\x35\x6c\x58\xc0\xc4\xec\x10\x4d\x4d\x4d\xfe\x58\xc0\xca\
+\x31\xb8\xaa\xa0\x21\x9f\xcf\x3f\x3e\x3d\x3d\x7d\xdb\x4b\xbd\x97\
+\x97\x05\x88\xda\xd4\x44\x22\x21\x3d\xcf\x13\xf3\x5c\x15\xba\xae\
+\x53\x2c\x16\x0f\xe9\x51\x57\x34\x8b\x4a\x68\x25\x93\x49\x66\x66\
+\x66\xa8\xa9\xa9\xc1\xb2\x2c\x4c\xd3\x54\x80\xc8\xce\xce\xce\x8f\
+\x2c\x59\xb2\xe4\x23\xba\xae\xf3\xab\x5f\xfd\xea\x2a\xe0\xee\xd7\
+\x41\x55\xb5\xa5\xd3\xe9\xf3\x3c\xcf\x2b\xe5\x72\xb9\xe5\xaa\x63\
+\x38\x65\xe7\x09\xaf\x4c\xa1\x05\x83\xd0\x25\x91\x96\xc0\x4d\x99\
+\x38\x49\x03\x37\x69\x10\xf6\x6a\xa9\xae\xa9\x46\x7a\xd2\xb7\x8b\
+\xba\xae\xfb\x83\xdc\x94\x33\x54\x31\x28\xe1\xc0\xe8\xe8\xe8\x6f\
+\x5f\x0b\x40\xe2\x5b\xb7\x6e\x0d\x06\x83\xc1\x5b\x3e\xf1\x89\x4f\
+\xdc\x78\xf6\xd9\x67\x73\xfe\xf9\xe7\xf3\xed\x6f\x7f\x9b\xed\xbb\
+\x25\x5f\xa5\x00\x00\x09\x83\x49\x44\x41\x54\xdb\xb7\xf3\x8e\x77\
+\xbc\x83\x74\x3a\xcd\xe0\xe0\x20\x35\x35\x35\x3e\xaf\xb5\x7a\xf5\
+\x6a\x9e\x7b\xee\x39\x1f\xac\xc3\x67\xf8\x5a\x96\x25\x94\x73\x30\
+\xdf\x22\xd7\xd1\xdd\xdd\x7d\x86\x94\x92\x99\x99\x99\x3d\x13\x13\
+\x13\xaf\x49\x23\x7b\xa1\x50\xf8\xcb\xcb\x2e\xbb\xec\x9f\x55\xbb\
+\x72\x51\x2b\x12\xad\x13\x60\xe9\x78\x25\x0d\x99\x2e\xdb\x88\xb2\
+\x62\x97\xc8\x06\x30\x9a\x0d\xb6\xef\xd8\x46\xc8\x3a\x98\x62\x50\
+\x87\x2b\x99\x4c\x22\x84\xf0\x0f\x9c\x65\x59\x04\x83\x41\x6c\xdb\
+\x7e\x59\x73\x46\x5e\x0e\x20\x92\xf2\xcf\x4d\x38\xdb\xb7\x6f\x47\
+\x4a\xc9\x8f\x7f\xfc\x63\xa6\xa7\xa7\xf1\x3c\x8f\x07\x1e\x78\xc0\
+\x4f\x5e\x55\x8e\xca\xdb\xb4\x69\x93\x5f\xfe\xa2\x4e\x4e\xa1\x50\
+\x38\xc4\x45\xac\x9c\xd5\x78\xea\xa9\xa7\xde\xd6\xd1\xd1\x71\x5b\
+\x24\x12\xe1\xe1\x87\x1f\x5e\x05\x6c\x7d\x15\xa5\xe2\x03\xc0\x69\
+\xe5\xbd\x74\xdf\xbd\x73\xe7\xce\xf2\xc8\x0c\xcf\x41\x9c\x90\xa6\
+\xa6\x74\xa8\x57\x6a\x27\x75\xec\xf1\x20\x26\x21\x9a\x9b\x9b\x39\
+\xfc\xc7\x04\x0e\x3f\x5c\xca\x33\x8d\xc5\x62\x64\xb3\x59\x06\x07\
+\x07\xfb\x75\x5d\x1f\x78\xad\x00\xf1\x1d\x81\x50\x28\xc4\xb6\x6d\
+\xdb\xfc\x69\xa4\xaa\x5d\x41\x75\x54\x55\x26\xf2\x95\x64\xa8\xea\
+\x8b\x5c\x2e\x47\xb1\x58\xf4\xd9\xe3\x4a\xcf\x4b\x4d\x11\x4d\xa7\
+\xd3\x78\x9e\x47\x47\x47\xc7\x7f\x9e\x74\xd2\x49\x45\xd7\x75\xf5\
+\xde\xde\xde\x3b\xe2\xf1\xf8\xd7\x5e\xce\x8d\x1e\x36\xce\x96\x6c\
+\x36\x7b\xcd\x65\x97\x5d\x76\x61\x36\x9b\x45\x08\x41\xa2\x76\x5c\
+\x76\x2e\x33\x85\x15\x0f\xe3\xcc\x04\x91\x19\xd3\xf7\x68\xa5\xe7\
+\x21\x35\x49\x78\x69\x98\x8d\x9b\x36\x52\x5b\x5b\xeb\x03\x52\x39\
+\xe4\x53\x4d\xe9\x56\x71\x57\x30\x78\x70\x5c\xfa\xf4\xf4\xf4\xb2\
+\x97\xcb\xdd\xbd\x6c\x40\x74\x5d\xbf\xfb\xc9\x27\x9f\x7c\x4a\xd7\
+\xf5\x2b\x2f\xba\xe8\xa2\xcb\xd6\xae\x5d\x4b\x5b\x5b\x1b\x9b\x36\
+\x6d\x22\x9d\x4e\x93\x4c\x26\x99\x9b\x9b\x43\xd7\x75\x4e\x38\xe1\
+\x04\x86\x87\x87\x99\x98\x98\xe0\xf4\xd3\x4f\xe7\x85\x17\x5e\x38\
+\x04\x34\xdb\xb6\xfd\x21\x36\xa5\x52\x89\x60\x30\xe8\x7f\x61\xdb\
+\xb6\xa9\xab\xab\xeb\x54\x3f\xfe\xb2\x6b\xd7\xae\x75\xe1\x70\x78\
+\x06\xd0\x82\xc1\x60\x21\x99\x4c\x3e\x70\xa4\x7b\x9d\x9c\x9c\xe4\
+\xe4\x93\x4f\x7e\x7c\xd1\xa2\x45\x6b\x95\x5d\xdb\x37\xb6\x57\x06\
+\x82\x9a\x90\x05\x03\x7d\x26\x22\x0e\xf4\x83\xd0\x6c\x84\x66\xe3\
+\x7a\xae\x1f\x3f\x00\xd4\xd4\xd4\xa0\xe9\x07\x8b\x3b\x2a\x01\x51\
+\x01\xaf\x2a\x5c\x38\xf1\xc4\x13\x89\xc7\xe3\x94\x4a\x25\xaa\xaa\
+\xaa\x0e\x99\x52\xf1\x72\x88\xd4\x97\x0d\xc8\xdc\xdc\xdc\x20\x30\
+\x58\x53\x53\x73\xd6\xce\x9d\x3b\x59\xbe\x7c\x39\x03\x03\x03\xfe\
+\x54\x4f\x25\xca\xae\xeb\x32\x36\x36\xe6\x73\x5d\x3b\x76\xec\xf0\
+\xdb\xe0\x54\x10\x39\x37\x37\xc7\xe1\xe3\x65\x2b\xb8\x2f\x7f\x13\
+\x00\xd9\xdd\xdd\x7d\xc9\x8a\x15\x2b\x2e\x01\xd8\xbf\x7f\x7f\x7e\
+\x74\x74\xb4\x65\x5e\x45\xe8\x53\x53\x53\x4f\xba\xae\x1b\x9f\xe7\
+\x8d\x16\xb5\xb5\xb5\x6d\xac\x2c\xd9\xac\xdc\x10\xe9\x49\xa1\xa4\
+\x40\x49\x29\xc0\xf4\xf4\x34\x3d\x3d\x3d\x7e\x2c\x31\x3b\x3b\x5b\
+\xe6\xaf\xe6\x27\x53\x54\x8e\x16\x51\x80\x54\xd2\x22\x4b\x96\x2c\
+\x61\x7a\x7a\x9a\x52\xa9\x34\x37\x35\x35\x35\x52\x2c\x16\x9d\xa3\
+\x51\xab\xaf\xa8\x6f\xa0\xad\xad\x8d\x8d\x1b\x37\x02\xfc\xc1\x59\
+\x1e\x55\x55\x55\x87\xe7\x57\x08\x85\x42\xb8\xae\xcb\xd4\xd4\x94\
+\x1f\xd9\x2b\x5d\xac\x86\x84\x29\x09\x51\x7f\x03\x22\x97\xcb\x31\
+\x31\x31\xa1\xf4\x74\x64\xc5\x8a\x15\x5f\x57\xc4\xdd\xd6\xad\x5b\
+\xa9\xae\xae\xf6\x83\xd0\xe9\xe9\xe9\x3f\x58\xb2\xe9\x38\x0e\x17\
+\x5e\x78\xa1\xef\x11\x8d\x8f\x8f\xd3\xd8\xd8\xe8\xdf\xbf\x72\x5d\
+\x95\x3a\x52\x3f\xb1\xa1\xa6\xe2\x29\x57\x5d\x55\x8e\xa8\x61\x97\
+\xba\xae\x33\x32\x32\xa2\x00\x7a\x78\xf7\xee\xdd\x97\x1f\xed\x9e\
+\x1e\x35\x20\x9e\xe7\x7d\xed\xd9\x67\x9f\xfd\xb1\x65\x59\x2b\x7b\
+\x7a\x7a\xee\xbd\xf5\xd6\x5b\x69\x6b\x6b\xe3\x67\x3f\xfb\x19\x3b\
+\x76\xec\x40\x08\x41\x36\x9b\x65\xd9\xb2\x65\xf4\xf6\xf6\xfa\xcd\
+\x3d\x8d\x8d\x8d\xec\xdb\xb7\xcf\xd7\xbb\x8a\xda\x3e\x3c\xd2\x55\
+\x29\x60\xe5\x4e\xab\x0d\x52\x41\xa6\xda\x14\x29\x25\xad\xad\xad\
+\xb4\xb5\xb5\x21\x84\x60\x72\x72\x92\xd6\xd6\x56\x3f\x0e\xd8\xbb\
+\x77\xaf\x9f\xd7\xdf\xb5\x6b\x97\xcf\xbf\xa9\x93\x7f\xb8\x81\x56\
+\xb4\x90\xf2\x9e\x0e\xf7\x0c\xd5\xf5\x01\x9f\x48\x1d\x1c\x1c\x64\
+\x6e\x6e\x8e\xaa\xaa\x2a\x2a\x87\x76\xbe\xae\x80\x64\x32\x99\x29\
+\x60\x4a\xd7\xf5\x2a\x4d\xd3\xf8\xdc\xe7\x3e\x47\x43\x43\x03\x89\
+\x44\xc2\xff\x52\x52\x4a\x26\x26\x26\x0e\xa1\xeb\x15\x58\xb1\x58\
+\x8c\xee\xee\x6e\xe2\xf1\xb8\xaf\x12\x2a\x87\x6b\xaa\x7f\x4a\x8a\
+\x94\xe1\xaf\xcc\xb1\x54\x66\xf2\x14\x11\xa8\x0c\xad\x72\x34\x14\
+\xeb\xac\xdc\x54\xc5\x38\x2b\xf0\xd5\xe7\xa8\x83\xa0\x3c\xc2\xca\
+\xc2\x84\xf9\xa1\x39\xfe\xf7\x50\x0e\xcc\xb2\x65\xcb\xe8\xeb\xeb\
+\xc3\x30\x0c\xe2\xf1\xf8\x1d\x42\x08\xaf\x50\x28\x3c\xf3\x86\x00\
+\x52\xa1\x86\x9c\x52\xa9\x54\x0c\x87\xc3\xc5\x64\x32\x19\x8d\x46\
+\xa3\x66\x30\x18\x44\xd7\x75\x7f\x34\xac\x3a\x65\xca\xb0\xaa\x4d\
+\x53\xd5\x8f\x2a\x9a\xd7\x75\xdd\x4f\xff\x56\x66\xd6\x54\x4f\xb8\
+\x92\x10\x21\x84\x2f\x21\x95\x3a\x5e\x01\xa7\x1c\x05\xe5\xc1\xa9\
+\x4d\x57\xaa\x47\x01\xa2\xc6\xc1\x56\x3e\xa7\x0e\x40\x25\x20\x95\
+\x3f\xb7\x51\x55\x55\xe5\x17\x5c\xff\xf6\xb7\xbf\x25\x12\x89\x10\
+\x89\x44\xd8\xb7\x6f\x9f\x3f\x33\xb2\xa9\xa9\x89\xa9\xa9\xa9\x37\
+\x06\x10\xdb\xb6\x9f\xdb\xbe\x7d\x7b\x18\xa0\xbe\xbe\xfe\x37\xdd\
+\xdd\xdd\xe7\x7d\xec\x63\x1f\xe3\xc9\x27\x9f\x64\x60\x60\xc0\x4f\
+\x61\x2a\x43\xaf\x36\x44\xd7\x75\xb2\xd9\xac\xcf\xf7\xd4\xd4\xd4\
+\xf8\x06\x5f\xc5\x33\x2a\xda\xad\x54\x1b\x2a\xd9\xa3\x00\x3b\x7c\
+\xde\x7c\xa5\x24\x05\x02\x01\x7f\x63\xd5\xa6\x2b\xe6\xf9\x70\x8f\
+\x49\x5d\x4f\x79\x81\x4a\x22\x54\x1b\x9f\xca\x8b\x74\x76\x76\xb2\
+\x7c\xf9\x72\x1e\x7b\xec\x31\x3c\xcf\xa3\xa5\xa5\xe5\xff\xe9\x1b\
+\x3c\x5a\x30\x5e\x15\x40\x0e\xcb\x2e\x8a\xba\xba\x3a\xbe\xfe\xf5\
+\xaf\x2b\xf1\x9e\xaf\xda\x2f\x9f\x3a\xd3\x34\xfd\xaa\x14\xb5\x02\
+\x81\x00\x96\x65\x11\x8d\x46\xfd\xd3\xaf\x3c\x17\x55\x90\x66\xcc\
+\xff\x20\x8b\xda\x74\xb5\xb9\xea\xfd\x95\x9b\x5e\x19\x6c\x2a\x37\
+\xfa\x70\x3b\xa1\x24\x44\x49\x9d\x7a\x4e\xc5\x27\x6a\xf3\x95\x9d\
+\x33\x0c\x83\x70\x38\x8c\xe3\x38\xc4\xe3\x71\x9f\x3c\xcc\x66\xb3\
+\x0f\x0d\x0c\x0c\xfc\x4f\xf3\xf0\x2f\xf5\x46\xaa\xac\xc3\xd4\xd7\
+\x1d\xbf\xf9\xcd\x6f\x1e\x14\x42\xc8\x40\x20\xf0\xc5\xf6\xf6\xf6\
+\xea\x8b\x2f\xbe\x98\x1d\x3b\x76\xf8\x11\xbd\x3a\x89\xea\x34\x3a\
+\x8e\x43\x6d\x6d\xad\x5f\xf7\x1a\x0a\x85\x58\xba\x74\x29\xd3\xd3\
+\xd3\x87\x8c\x99\x2d\x16\x8b\xbe\xc4\xd4\xd6\xd6\x1e\x12\x78\x56\
+\x06\x6b\x95\x12\x52\x59\xf5\xa1\x40\x54\xaf\x53\x00\xab\xc1\x6b\
+\xa6\x69\xfa\x41\x9e\x72\xcf\x55\xb0\x17\x0e\x87\x59\xbd\x7a\x35\
+\xdb\xb6\x6d\xf3\x55\x5b\x5d\x5d\x1d\x85\x42\x21\x93\xcb\xe5\x5e\
+\xd5\x5f\x00\x7d\x55\x01\x99\x99\x99\xf9\x69\x45\x94\xfc\xbf\x63\
+\xb1\x58\xf5\x43\x0f\x3d\xe4\x7b\x2b\x95\xbf\xb0\x73\x98\xc7\x46\
+\x2a\x95\xa2\xaa\xaa\x8a\x33\xcf\x3c\x93\xfd\xfb\xf7\xfb\x9b\x52\
+\x39\xa5\x4e\x01\xe2\xba\x2e\xa9\x54\x0a\x28\xf7\xb0\x28\x6f\x4c\
+\x6d\xb4\x02\xa4\x72\x22\xb5\x02\x24\x9b\xcd\x1e\x32\x1d\x55\x1d\
+\x8c\xea\xea\xea\x43\xae\x57\x5d\x5d\x4d\x43\x43\x03\x73\x73\x73\
+\xa4\xd3\x69\xa2\xd1\x28\xae\xeb\x92\xcb\xe5\x0e\xec\xdd\xbb\xf7\
+\x59\x21\x84\x0c\x06\x83\xbf\x79\xb5\x39\xb6\xd7\xac\x7f\xd9\x75\
+\xdd\xe1\xfe\xfe\xfe\x1c\xe0\x09\x21\x4e\xd0\x75\xdd\xac\xae\xae\
+\xf6\x0d\x7d\xc5\x80\x9a\x43\x0c\x78\x22\x91\xa0\xbe\xbe\x1e\xdb\
+\xb6\x89\xc5\x62\x2c\x5d\xba\x94\xdd\xbb\x77\xfb\xaa\x43\xa9\x1b\
+\x15\x67\x08\x21\xfc\x71\xe0\x6a\x38\x65\x65\x85\x79\x3e\x9f\xf7\
+\xd5\x92\x4a\x03\x54\xb2\xd1\x4a\xdb\x68\x9a\x46\x4d\x4d\x8d\xff\
+\x39\xea\xf5\x81\x40\x00\xd7\x75\x79\xea\xa9\xa7\x30\x0c\x83\x50\
+\x28\xf4\x44\x2a\x95\xba\xfc\xb5\xda\xb7\xd7\x0c\x90\x44\x22\xe1\
+\xcf\xea\xee\xec\xec\x1c\xe8\xec\xec\x5c\xf2\x12\xed\x90\x4f\x3f\
+\x78\x9e\xc7\xc2\x85\x0b\x19\x1c\x1c\x24\x12\x89\xf8\x53\xa6\xfd\
+\xde\xbe\x0a\x1a\x46\xd9\x1d\x65\xaf\x14\x58\x87\x4f\xd6\x56\x91\
+\xb9\xa6\x69\xbe\x87\xa7\x24\xa8\xb3\xb3\x13\xc3\x30\x18\x1c\x1c\
+\xf4\x27\x1f\xcd\x57\xce\xa4\x67\x67\x67\x9f\x13\x42\x78\x96\x65\
+\x6d\x7e\x2d\xd3\x02\xaf\x4b\x87\x7f\x2e\x97\xfb\xfe\xf8\xf8\xf8\
+\x02\xca\x6d\x6e\xef\x0b\x87\xc3\xcb\x8e\xd4\xaf\x3d\x33\x33\x43\
+\x20\x10\xe0\x99\x67\x9e\xf1\x37\xf0\xec\xb3\xcf\x66\xe3\xc6\x8d\
+\x68\x9a\xe6\xf7\xa8\x24\x12\x09\xbf\x92\x52\xd9\x0a\xd3\x34\x0f\
+\x99\xbc\x1d\x0c\x06\x7d\x4f\xaf\xb5\xb5\x95\xd9\xd9\xd9\x72\xea\
+\x35\x1a\x65\xe9\xd2\xa5\x0c\x0f\x0f\x93\xcb\xe5\xd0\x34\x4d\xfd\
+\x57\x0a\x21\x84\xe3\x38\xaa\x23\x6c\xdf\xd0\xd0\xd0\xf9\x2f\x96\
+\xf6\x7d\x4b\x01\x32\x3f\x90\xfe\x0b\x2a\x9f\x7c\xc2\x09\x27\xb4\
+\x2e\x58\xb0\x60\x59\x45\xe4\x2b\xc5\x1f\xe0\x39\x2a\xd5\x98\x8a\
+\x69\x2a\xf3\xf8\xd1\x68\xd4\x1f\x31\x58\x5f\x5f\xcf\xf2\xe5\xcb\
+\xd9\xb3\x67\x0f\x75\x75\x75\xe4\x72\x39\x82\xc1\x20\xb9\x5c\x8e\
+\x13\x4f\x3c\x11\x21\x04\xa9\x54\x8a\x44\x22\x41\x47\x47\x07\xef\
+\x7c\xe7\x3b\xf9\xf5\xaf\x7f\x4d\xa1\x50\xa0\xa1\xa1\x81\xde\xde\
+\x5e\x34\x4d\x63\xff\xfe\xfd\x4a\x8d\x89\xc1\xc1\xc1\x6f\x39\x8e\
+\xb3\x0f\x70\x23\x91\xc8\xc0\xe1\xc5\x10\xaf\xd5\x7a\xdd\x67\xae\
+\x6b\x9a\xb6\x40\xd3\xb4\xc8\xfc\xe3\x0f\x76\x77\x77\x7f\xe5\x48\
+\xf3\x3f\x94\x3e\x57\x76\x27\x10\x08\xf8\x86\xd9\xb2\xca\x3f\xb3\
+\x7a\xd5\x55\x57\x71\xdf\x7d\xf7\x11\x0e\x87\xa9\xad\xad\x65\x7a\
+\x7a\xda\x9f\x3e\xb1\x61\xc3\x06\x7e\xfe\xf3\x9f\x33\x37\x37\x47\
+\x57\x57\x17\xdd\xdd\xdd\x3c\xfe\xf8\xe3\xaa\x3a\xdf\x57\x6d\xea\
+\xf7\x15\x5d\xd7\x25\x93\xc9\x9c\x1b\x8f\xc7\x1f\x7f\xbd\xf7\xe7\
+\x0d\x1d\x82\x1f\x0e\x87\x4f\x6b\x6c\x6c\xbc\x4c\xd7\x75\x07\x20\
+\x1a\x8d\x7e\x2a\x18\x0c\x1e\x71\xae\xaf\x9a\x60\xa7\xd4\xd3\xd8\
+\xd8\x18\xd5\xd5\xd5\x38\x8e\xe3\xe7\x24\x14\xf1\x37\x31\x31\x41\
+\x5d\x5d\x9d\x3f\x73\x38\x16\x8b\xf9\x81\x61\xa1\x50\xf0\x6d\xca\
+\xfc\xe8\xf3\x43\x66\xd1\xbf\x11\xe3\x6c\xdf\xd0\x29\x31\x85\x42\
+\x61\xc7\xc8\xc8\xc8\x8e\x0a\xdd\xec\x45\xa3\xd1\x2a\x29\xa5\xb4\
+\x6d\xbb\xcb\x30\x8c\x3f\x3b\x52\xa3\xbd\xb2\x05\xca\x63\x2a\x16\
+\x8b\x7e\x90\xa9\x62\x09\xf5\x6b\x9c\xd9\x6c\x16\xcf\xf3\x76\x4b\
+\x29\x75\xd7\x75\xdd\x64\x32\xf9\xf7\xe3\xe3\xe3\x3f\x79\xb1\xcf\
+\x7e\x23\xc6\xd9\xbe\xa1\x12\x72\x24\xed\x06\xf8\x9c\x7e\x2c\x16\
+\xbb\x5a\xd3\xb4\xd8\x8b\x81\xa2\x96\x69\x9a\x3e\x95\x21\x84\x28\
+\x00\x7b\x8b\xc5\x62\x56\x4a\x29\x63\xb1\x58\x66\x76\x76\x76\xfb\
+\x61\x69\xdd\x63\x79\x04\xc8\xf1\x75\x7c\x1d\x5f\xc7\xd7\xf1\x75\
+\x7c\x1d\x5f\xc7\xd7\xf1\x05\xc0\xff\x05\xf4\xe6\xb0\x9e\xc6\x6e\
+\xd0\xb8\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\x7c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x64\x00\x00\x00\x64\x08\x06\x00\x00\x00\x70\xe2\x95\x54\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0e\xc4\x00\x00\x0e\xc4\x01\
+\x95\x2b\x0e\x1b\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x03\
+\x0e\x1c\x0e\xa7\xa1\x6f\x29\x00\x00\x02\xfc\x49\x44\x41\x54\x78\
+\xda\xed\xd6\xbf\x6f\x1c\x45\x18\xc6\xf1\xef\xcc\xed\xda\xb1\x0f\
+\x9b\x93\x85\x90\x2d\xb0\x38\x12\x09\x77\x6e\xac\x14\x6e\x10\xe0\
+\x8b\x90\x4b\x37\x14\xc8\x7f\x03\xfc\x01\x54\x27\x51\x42\x81\x28\
+\xdd\xd0\x90\x36\x6d\x30\x8e\x70\x2a\x44\x44\x94\x20\x17\xc8\x0e\
+\x06\x64\x90\xec\xe4\x02\xde\xf3\xde\x9e\xf7\xd7\xec\x50\x1c\x39\
+\x89\x32\x52\xae\x58\xf1\x7c\xa4\xed\x76\xa4\x9d\x7d\xe7\x79\xdf\
+\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\
+\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\
+\x11\x79\x31\x4c\x9d\x3e\x76\x71\x71\xf1\x13\x63\x4c\xf8\x9c\xcb\
+\xa6\x80\xcf\x4e\x4f\x4f\xff\x56\x41\x5e\xb0\xf5\xf5\x75\xdf\x6e\
+\xb7\xf1\xde\x53\x51\x51\xbe\xf9\x94\x97\xae\x4c\x53\x3e\x99\xc6\
+\x9d\xcd\x8c\x5e\xb2\x60\xac\x1f\xef\x2c\x8e\x63\xf6\xf6\xf6\x56\
+\xb2\x2c\x3b\xaa\xc3\x1e\x83\xba\x45\x3a\x4d\x53\x0c\x70\x3f\xff\
+\x85\xce\xf5\x19\x1a\xe1\x05\x99\xbb\xa4\x19\x5e\x81\x24\xa0\x3c\
+\x9f\x22\xfb\x75\x86\xe1\xe1\x2c\x00\x65\x59\x62\x8c\xf1\x75\xd9\
+\x9f\xad\x53\x31\xaa\xaa\x22\xcf\x73\xf2\xbc\xc0\x53\x61\x8d\xe1\
+\xaa\x79\x9f\xcf\x3b\x77\x78\xe7\xf5\x0f\x98\xe7\x1a\x8b\x57\x5b\
+\xd8\x57\x32\x8a\xa2\xa0\x28\x0a\x9c\x73\xb5\x3a\x70\xb5\x4a\x88\
+\x73\x8e\x3c\xcf\xc1\x8f\x26\xc3\x60\x90\xf2\xe1\x7b\x1f\xf3\xd1\
+\xad\x1b\x7c\xbd\xfd\x90\x77\x5f\x3b\xe3\x24\x7d\xc0\x17\xf7\x3f\
+\x25\xcf\x73\xbc\xf7\xcf\x12\xa2\x82\x4c\x82\xf7\x9e\x2c\xcb\x30\
+\x18\x98\x82\xe1\xc0\x31\xd7\x6c\x92\x57\x29\x00\x87\x7f\x1e\xf2\
+\x63\x72\x0b\xe3\x2d\x59\x96\x8d\x53\xa5\x82\x4c\xb8\x65\x19\x00\
+\x0f\x73\xf3\x53\x0c\x86\x43\xa6\x1b\xa3\x79\x51\xe1\x29\x5d\x81\
+\xf7\x8c\x92\xf4\xec\xe6\x52\xa3\x82\xd8\x3a\x26\x24\xcb\x72\x2a\
+\x3c\x2f\xcf\x37\xb9\xfd\xf3\x4d\xba\x37\x6e\xf2\xe0\xf4\x2e\xf7\
+\xfe\xf8\x96\xb7\xdf\xd8\xa2\x28\xf3\x7f\xdf\xcb\xd4\xb2\x26\xa9\
+\x28\x0a\xe2\x38\xc6\x1a\x4b\x32\x57\x71\x99\x35\xf9\xc1\x7d\x45\
+\x75\x6f\x8e\x57\xaf\x65\x1c\x97\xdf\xf0\xfb\x4f\x7b\x44\x8f\x13\
+\xce\xcf\x13\xbc\xf7\xcc\xce\xce\x62\xad\x55\x41\x26\x16\x69\x6b\
+\x31\x18\x4c\x05\x8d\x69\x43\xc3\x86\x7c\xf7\xdb\x97\x5c\xdc\x31\
+\x3c\x79\x94\x90\xfe\xe5\x48\x1e\x3b\x8c\x31\xb5\x4a\x46\x6d\x0b\
+\xe2\x9c\x63\x61\x61\x81\xf0\x6c\xc8\xf7\xdd\x0b\x2e\x9f\x56\x18\
+\x03\xc6\x8e\x1e\x6f\x0c\x41\x10\x8c\x67\x4e\x9d\xd2\x51\xcb\x5b\
+\x56\xb7\xdb\x65\x63\x63\x83\xfd\xfd\x7d\x0e\x0e\x0e\xe8\xf5\x7a\
+\x94\x65\x49\x55\x55\x44\x51\x44\xab\xd5\x22\x49\x12\x7a\xbd\x1e\
+\x8d\x46\x83\x7e\xbf\x8f\xf7\xbe\x3e\x1d\xa0\x6e\x33\xa4\xdd\x6e\
+\x73\x72\x72\xc2\xe6\xe6\x26\x51\x14\xb1\xb4\xb4\xc4\xda\xda\x1a\
+\xdb\xdb\xdb\x78\xef\x69\xb5\x5a\xac\xac\xac\xd0\xe9\x74\x28\xcb\
+\x92\x30\x0c\x6b\x95\x90\x5a\x35\xd9\xd5\xd5\x55\xbf\xbc\xbc\xcc\
+\xd6\xd6\x16\xbb\xbb\xbb\xa3\x01\x6f\xed\xf8\xc7\x47\x51\x44\x18\
+\x86\x78\xef\x49\xd3\x14\xe7\x1c\xce\x39\x8e\x8e\x8e\xde\x1a\x0c\
+\x06\x8f\xd4\xb2\x26\xa0\xdf\xef\xb3\xb3\xb3\x33\x9e\x13\xff\x39\
+\x5d\xc6\x50\x14\xc5\x68\x63\x41\x40\x10\x04\x14\x45\xa1\x6b\xef\
+\xa4\x1c\x1f\x1f\x3f\x04\xca\xe7\x59\x13\x86\xe1\x4c\xb3\xd9\x4c\
+\xe3\x38\x46\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\
+\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\
+\x44\x44\x44\xfe\x4f\xfe\x01\xd1\xc0\x51\x25\xbd\x25\x7f\x60\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x7e\xd7\
+\xff\
+\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x00\x00\x01\x00\
+\x01\x00\x00\xff\xdb\x00\x43\x00\x04\x02\x03\x03\x03\x02\x04\x03\
+\x03\x03\x04\x04\x04\x04\x05\x09\x06\x05\x05\x05\x05\x0b\x08\x08\
+\x06\x09\x0d\x0b\x0d\x0d\x0d\x0b\x0c\x0c\x0e\x10\x14\x11\x0e\x0f\
+\x13\x0f\x0c\x0c\x12\x18\x12\x13\x15\x16\x17\x17\x17\x0e\x11\x19\
+\x1b\x19\x16\x1a\x14\x16\x17\x16\xff\xdb\x00\x43\x01\x04\x04\x04\
+\x05\x05\x05\x0a\x06\x06\x0a\x16\x0f\x0c\x0f\x16\x16\x16\x16\x16\
+\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\
+\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\
+\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\xff\xfe\x00\
+\x10\x54\x69\x6d\x65\x20\x66\x6f\x72\x20\x4c\x75\x6e\x63\x68\xff\
+\xc0\x00\x11\x08\x02\x00\x02\x00\x03\x01\x22\x00\x02\x11\x01\x03\
+\x11\x01\xff\xc4\x00\x1b\x00\x00\x02\x03\x01\x01\x01\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x02\x03\x01\x04\x05\x00\x06\x08\xff\
+\xc4\x00\x44\x10\x00\x02\x01\x02\x04\x04\x04\x03\x07\x02\x04\x05\
+\x04\x01\x05\x01\x01\x02\x03\x00\x11\x04\x12\x21\x31\x05\x41\x51\
+\x61\x13\x22\x32\x71\x42\x81\x91\x14\x23\x52\xa1\xb1\xc1\xd1\x62\
+\xe1\x06\x33\x72\xf0\x24\x43\x82\x92\xf1\x15\x53\x73\xa2\x25\x34\
+\x35\x54\x63\x93\xa3\xff\xc4\x00\x19\x01\x01\x01\x01\x01\x01\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x02\x03\x04\x05\
+\xff\xc4\x00\x21\x11\x01\x01\x01\x00\x03\x01\x01\x01\x00\x03\x01\
+\x01\x00\x00\x00\x00\x00\x01\x11\x02\x21\x31\x41\x12\x51\x22\x32\
+\x61\x71\x42\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00\x3f\
+\x00\xfa\x73\xfc\x3c\xe0\xa6\x23\x07\x32\x67\x92\x16\xcc\xb9\xc5\
+\xcd\xbf\x5a\xb1\x32\xca\xaa\x5e\x17\xce\xa0\x7a\x1f\x5b\x0e\xd5\
+\x9f\x23\xb2\xc9\xf6\x98\x6e\x1c\xa8\x0c\x47\x50\x74\x3f\x3a\xbd\
+\x82\xc5\x26\x29\x43\x0b\x09\x47\xa9\x3a\xfb\x57\xca\x97\xe3\xd5\
+\x7f\xae\x86\x48\xa6\x8b\x35\x95\x18\x1b\x10\x4f\xe9\x44\x6e\x0d\
+\x8d\xfe\xa6\xaa\x4e\xf2\x61\x84\xb0\xe5\xf2\x48\x6e\x1a\x9b\x83\
+\x90\xcb\x85\xbb\x6a\x50\xe5\xbf\x5a\x74\x58\x6f\x97\xa0\xa9\x0a\
+\x0d\xb5\x00\x93\x61\xae\xe6\x80\x9a\xe6\xf3\x44\xc8\x5b\x2d\xfd\
+\x27\xa1\xa8\x0d\x49\xd8\xb1\xa6\x21\x1c\xd4\x30\x3b\x83\xad\xe9\
+\x7e\x73\x1a\x99\x4a\x99\x2d\xe6\x20\xef\xd0\xd0\x7d\xe6\x6b\xf4\
+\xfa\x54\x8d\xc3\x48\x22\x95\xf0\xb9\xf2\xe5\x6f\x21\xd8\x51\xba\
+\x46\xc7\xcf\x18\xbe\xf7\x53\x63\x59\xf8\xec\xdf\x6b\x7c\xdb\x93\
+\x7a\xbb\x87\xb8\xc2\x47\x98\xdc\x90\x48\x3d\xa9\x94\x9f\x11\x44\
+\x16\x8d\x42\xdf\x73\xcc\xfc\xe8\x89\x04\x52\x41\xa9\x56\x07\x4b\
+\xfb\x53\xa0\xdc\xce\x08\x2a\xda\x8a\xcb\xe2\x03\xc3\xc7\x4a\x8a\
+\x6c\x03\x6d\xbd\x68\xc6\x0b\x38\x51\xcc\xda\xb2\xb8\x8c\x82\x4c\
+\x7c\xae\xb7\xb1\x6e\x74\x72\xf0\xc0\xec\x6f\x7b\x93\xce\x8b\x0d\
+\x27\x85\x88\x49\x00\x00\xab\x5e\xf6\xab\x58\x3c\x22\x18\x95\xe6\
+\x04\x97\xf4\xa8\x36\xb0\xea\x6a\x31\x78\x03\x94\xbe\x1d\xf3\x00\
+\x2e\x55\xb7\x1f\xcd\x67\x29\xd6\x93\x32\xba\x87\x8d\xae\x8d\xa8\
+\xa5\x3b\x00\x7a\x9e\x95\x9d\xc3\x71\xde\x00\xf0\xa6\x1f\x76\x5a\
+\xc4\x73\x53\xd6\xb4\xbd\x3a\x83\x70\xda\x86\x1c\xeb\x72\xeb\x38\
+\x15\xb0\xf4\xef\x52\xa1\x6c\x43\x2a\xb0\x3b\xdc\x57\x7c\xbe\x94\
+\x24\xf7\x1f\x5a\x90\xd4\x42\xa3\xcb\x12\x0f\x6b\xff\x00\x35\x24\
+\xa9\x50\xa0\x00\x06\xc0\x0d\xa9\x57\x27\x9d\xba\x69\x44\xa4\xfc\
+\xc5\x5a\x85\x1a\x90\xf7\x36\xb5\x54\xe3\x99\x1b\x18\x3c\x48\xd1\
+\xfe\xed\x75\x61\xda\xae\x29\xaa\x1c\x70\xff\x00\xc6\x8f\xfe\x35\
+\xfd\x2a\xe5\xe1\x9e\xab\xc6\x17\x35\x91\x42\x03\xba\x8d\x98\x7e\
+\xc6\xb5\x78\xba\x80\xd1\x95\xd8\x2e\x5b\xf5\xaa\xbc\x12\x11\x28\
+\x92\x47\x51\xa7\x95\x75\xd2\xe6\xac\xe3\xbe\xf3\x02\x8e\x3e\x12\
+\x2e\x2f\xce\xd6\xfd\xa8\x93\xa5\x7d\x54\xb8\x03\x7a\xec\xca\x7e\
+\x21\x4b\xf8\x87\x6a\x25\xbd\x0b\x13\xb9\x04\xec\x3b\x6e\x6b\x9a\
+\x8a\xd4\x2c\x39\xd4\x80\x47\x31\xbd\x06\x30\xe6\xc0\xca\xed\x9b\
+\x3a\x5b\xce\xbb\x81\xad\xff\x00\x6a\x61\xa8\x55\x0c\x59\x1a\xd9\
+\x64\x52\xa6\xf5\x12\x7f\xc3\xae\x35\x8d\xe4\x42\xc6\x45\x60\xca\
+\x2d\x98\x58\xef\xde\xb4\x25\x5b\x12\x1b\x4d\x6d\x58\x5c\x2d\x12\
+\x3e\x26\x60\x9d\x6d\x73\x6c\xc7\x4d\x79\x56\xfc\x8b\x93\x10\x63\
+\x72\x58\x91\x74\x66\xdc\xf6\xa3\x87\x70\x5f\x55\x9f\x43\x61\xa9\
+\xed\x43\x6b\x6f\xb9\xab\x24\x03\x4b\x75\xa5\x69\x40\x51\x90\x0a\
+\x65\x62\x74\x37\x52\x37\x53\xd4\x57\x05\xae\x22\xf5\x2d\x49\xb6\
+\xed\x6b\x7e\x35\x1f\xa8\xe5\x43\xe2\xc4\x08\x50\xfe\x23\x1d\x95\
+\x2b\x85\xd4\xdc\x13\x7a\x25\x20\x12\x42\x28\x62\x2c\x58\x0d\x6a\
+\x43\x65\x2f\x13\xa8\x8a\x40\x59\x2d\xc8\xfe\x95\x9a\x3c\xad\x60\
+\xac\xec\x3e\x1c\xa4\x0f\x99\x35\x78\x12\x0d\xc6\xe2\xaa\x71\x04\
+\x64\x93\x30\x27\xc3\x7d\x46\xba\x03\x45\x51\xc1\xb7\xbb\x06\x62\
+\x2c\x48\x16\x00\x74\x02\xac\xf0\xd9\x15\x49\x85\x8e\x8e\x7c\xbd\
+\x8d\x67\x83\x46\xad\x6a\x25\x6a\xc6\xb9\x1a\xd7\x0b\x83\x71\xca\
+\xab\xe1\xb1\x4b\x22\x65\x93\xd6\x07\xab\xf1\x7f\x7a\x31\x20\x2c\
+\x43\xe9\x6d\x81\xad\xeb\x18\xa1\xc7\x11\x17\x1c\x4c\x7a\x19\x14\
+\x35\xba\x13\x56\x38\x2c\xb7\x8d\xb0\xa7\x65\x05\x90\xfe\xb4\x9e\
+\x3f\x28\x6c\x4c\x68\x2d\x71\x18\xd7\x99\xbd\x17\x04\x04\x45\x34\
+\xa7\x73\x65\x1d\x7a\xd6\x3f\xfa\x6b\xe2\xe3\x9a\x84\x01\x89\x42\
+\x4d\x9f\x43\x42\x58\x5e\xd7\xd7\xa5\x09\x6e\x95\xa6\x41\x26\x26\
+\x31\x03\x86\x3f\x7c\x01\x51\xa6\xe7\xad\x23\x86\xe1\x8c\x83\xc6\
+\x95\x88\x04\xd8\x2d\xae\x5a\x83\x8a\xa9\x13\x78\xc0\x8b\x4a\x6f\
+\x6e\x95\x67\x0f\x2f\x8d\x1a\xac\x4a\xd0\xaa\x8b\x33\xff\x00\x15\
+\x9f\x6f\x6d\x7c\x5c\x67\x55\xd6\x42\x16\xda\x05\x1a\x9f\xa5\x04\
+\x99\xe7\x50\xa6\xf1\x45\xbe\xbb\xb5\x02\x14\x8c\x5a\x21\x6e\xad\
+\xf1\x1f\x9d\x71\x90\x03\xa9\x37\xf6\xad\xeb\x23\x48\x9a\x31\xf7\
+\x13\x1e\xeb\x20\xd0\xd1\x78\xae\x83\xfe\x22\x2c\xa3\xf1\xa6\xd4\
+\xb5\x95\x76\xd4\x7b\x8a\x62\xb8\xea\xba\xf2\x3c\xea\x46\x73\xd0\
+\xdc\x1d\x88\xe7\x52\x80\xad\xd0\x00\x5c\x1b\x12\x76\x5f\x7f\xe2\
+\x94\x09\x51\x68\xe6\x55\x5e\x4b\x6b\x95\xf6\x34\x48\x6c\x81\x40\
+\xb2\x8b\x9b\x53\xa8\xdb\xc9\xcb\x10\x49\xfc\x2c\xa3\x2d\x03\x62\
+\x10\x3e\x49\x94\xc4\xdd\xb5\x53\x42\x5a\xba\x40\x25\x89\xa3\x6d\
+\xac\x48\x3d\x2d\x56\xa3\x1a\x45\x44\x32\x31\xba\x81\x7d\x39\xd5\
+\x19\xe6\x97\x13\x32\x85\x51\xd1\x54\x1d\xaa\xd4\x66\xd8\x78\xd4\
+\x8f\xf9\x60\x10\x45\x70\xc8\xa6\xe9\x1a\x21\x3a\x5c\x51\x50\x62\
+\xc3\x28\x60\x1d\xf3\xb3\x68\x75\xda\xf5\x54\x48\xfe\x3e\x43\x2b\
+\x65\x24\xa9\x3f\x95\x5d\x8c\xfd\xea\xfb\x8a\xcc\x9c\xda\x57\xff\
+\x00\x51\xa2\xd3\x1d\xc3\x6d\xf6\x93\x98\x5c\x05\x3a\x75\xa5\x63\
+\x70\x46\x3b\xe2\x30\xac\x4a\x83\x7c\xbc\xd6\xbb\x86\xb9\x18\xc5\
+\x5f\xc4\x32\x9f\xa5\x5e\x85\xf2\xbd\xef\xd4\x1a\xcc\xee\x35\x55\
+\xa1\xe2\x90\xa2\x78\x38\xe9\x14\xc8\x79\xef\xcb\xe2\xa7\x60\xd3\
+\x26\x0e\xf9\x95\x83\xbd\xee\xa7\x41\x61\xfd\xeb\x17\xfc\x49\xc3\
+\x8c\x0e\x31\x50\xa9\x31\xc9\x7c\xd6\x37\xb1\xae\xe0\xd8\x99\xe1\
+\xe1\xb6\x8a\x42\xa1\x24\xb6\x52\x34\x37\xd7\x5a\xcc\xe5\x65\xca\
+\xb3\xae\x9b\x6e\xf6\xd1\x6c\x68\x4e\x6b\xf9\xaf\x7a\xa0\x9c\x4b\
+\x12\x18\x1f\x0e\x0f\xfb\x05\x13\x71\x4c\x4b\x10\x7c\x38\x7f\xec\
+\x15\xaf\xd4\x18\xd3\x43\x70\x0f\x5a\x2b\x58\xd5\x7c\x06\x26\x3c\
+\x62\x15\x0b\xe1\xc8\x2e\x72\x03\x70\x45\x34\xe7\xb5\x81\xd2\xb4\
+\x30\x73\x42\x93\x15\x2e\x4a\x95\xd2\xe0\x6e\x28\xa2\x8d\xa2\x4c\
+\xb1\x48\x1d\x7f\x03\x8b\x7d\x0d\x04\x57\x53\xae\xa0\xfe\x54\x38\
+\xfc\x60\xc3\x1f\x0e\x34\x57\x92\xda\x96\xd4\x2f\x6a\x91\xe4\x82\
+\xac\x40\x2a\x40\xf3\x29\xdc\x7f\x6a\x35\x46\x71\x70\x85\x87\x61\
+\x58\xd2\x71\x0c\x49\x95\x9f\xc4\xc8\xea\x97\x19\x74\x02\xda\xdb\
+\xfd\xf5\xa3\xc5\x62\x67\x32\x12\xd3\x39\xb0\x07\xd5\xf3\xab\xf5\
+\x17\xe6\xb4\x71\xb8\x85\xc1\xc4\x4b\x79\xe4\x20\x80\xb7\xf4\xf2\
+\xd6\xb2\xf8\x72\x3e\x27\x14\x91\x90\x3c\xcd\xa9\xb5\x01\xbb\xef\
+\x7d\x79\x5f\x53\x5a\x9c\x1f\x0c\x70\xf0\x99\x9a\xf9\xdc\x59\x54\
+\xe9\x61\xd6\x8f\xf6\xa7\xc8\xb6\xe5\x73\x1c\xa2\xc3\x61\xed\x50\
+\x09\x0d\x70\x6c\x6a\x06\xdb\x1f\xa5\x4d\xbb\x37\xd2\xb6\xca\x8f\
+\x19\xc3\x02\x46\x2a\x35\x16\xd9\xc0\x1e\x93\xd6\x83\x84\xe3\x15\
+\x41\x86\x66\x61\x1b\x7a\x58\x8d\x14\xd6\x88\x3b\x82\x0d\x98\x59\
+\xae\x39\x56\x46\x3b\x0c\xd8\x69\xb2\xda\xe8\x7d\x27\xa8\xac\xde\
+\xae\xc6\xa7\x7d\x35\x9d\x48\xb0\xb8\x20\xf3\x06\xe0\x8a\xeb\x5a\
+\xb1\xf0\x38\xa9\xb0\xc0\x04\x71\x6e\x68\xfb\x1a\xbb\x17\x16\xc3\
+\xb8\x1e\x2c\x45\x49\x3a\xe5\x3b\x55\x39\x41\x8b\x55\x23\x71\xdb\
+\x5f\xf7\xfe\xf9\x50\xc5\x2e\x1e\x60\x0c\x53\x29\xec\x74\x34\x44\
+\x32\xee\x08\x27\x5a\xd0\x48\x36\xac\xfe\x38\x6f\x8d\x5f\xfe\x35\
+\xfd\x2a\xfa\x02\xcc\x00\xdc\x9a\xcd\xe2\xb2\x2c\xb8\xd3\x93\x50\
+\xa0\x28\x3d\x6d\x47\x2f\x0c\xf5\x7f\x84\xa8\x5e\x1c\x08\xbd\xdd\
+\xc9\x3f\x2f\xfc\xd3\xb1\x0b\x9e\x1c\x42\x87\xf4\xb6\x6b\x5b\x9f\
+\x4a\x5f\x0e\x42\x9c\x3e\x3c\xc4\xf9\xae\xc0\x76\xd3\xf8\xa6\xb2\
+\x33\x33\x34\x4c\x15\xdd\x6c\x41\xd8\xd6\xa7\x81\x9a\xa0\x58\x7b\
+\x5e\x8d\x45\x71\x8d\x94\x90\x45\x99\x7c\xae\xbc\xd4\xd4\x81\x58\
+\x29\x14\x2d\x72\x3c\xba\x5f\x99\xa2\x61\xa8\x53\xcf\x5a\x83\x50\
+\x2d\x87\xbf\xd6\x81\xb5\xdf\x5e\xc6\x98\xfb\xd4\x11\x65\x66\xcb\
+\x98\xa8\xbe\x51\xce\xa3\x15\x78\xa6\x1c\xe2\x62\x13\x46\x01\x96\
+\x31\x66\x00\xea\xc3\x91\xab\x03\x12\x24\x68\x0b\xb1\x19\x72\x80\
+\xe0\xe9\xca\xd7\xe9\xd2\x83\x0d\x24\xf2\x44\x25\xcf\x0c\x77\x24\
+\x0f\xbb\xd6\xba\x7c\x1e\x21\xf0\x4c\xf0\xe4\x66\x6b\xa9\xfa\xdf\
+\x4a\x3f\xec\x2d\x19\x90\xac\x84\x11\x6e\x63\xda\x82\xb3\xb8\x57\
+\x11\x95\x30\x82\x2c\x4a\x67\x11\xbe\x43\x7d\xc0\xde\xb4\xe3\xc9\
+\x2c\x62\x48\x5b\x3a\x1f\x91\x1e\xf4\xcb\xbe\x0b\x30\x04\x0a\x16\
+\x02\xd4\xc6\x68\xc7\xc4\x5b\xba\xad\xc7\xd6\xa0\xa8\xb0\x20\x82\
+\x0e\xc7\xad\x40\xa2\x05\x08\xb5\x31\x96\x84\x8b\x54\x90\x68\x5d\
+\x16\x58\x8c\x6c\x6d\xcc\x1e\x95\xcd\xa6\xa6\x87\x29\x27\x36\xa0\
+\xde\xf5\x15\x29\x50\xc7\x21\x46\xdd\x4d\xa8\x41\xe9\x57\xb1\x11\
+\x89\xd4\x5c\x59\xc6\xc7\xaf\x6a\xa2\xc0\xab\x15\x61\x62\x37\xac\
+\x59\x8d\x4a\x90\x4d\x3e\x2c\x49\xf4\xcb\xa8\xda\xe3\x71\x55\x6f\
+\x5d\x7a\x34\xa7\x8f\xc8\x3e\xd0\xb6\xd4\x78\x6a\x01\x1b\x5e\xd5\
+\x73\x87\x00\x38\x54\x40\xf3\x66\xfd\xab\x33\x8a\xbb\xae\x1e\x2c\
+\x4a\x00\x42\xf9\x25\x16\xf5\x74\xbd\x68\xf0\xf9\x23\x6e\x15\x1f\
+\x86\x49\x0a\xc7\x97\x5a\x65\xff\x00\x2a\x3e\x1a\xd6\xe5\xa1\xa8\
+\x0e\x08\x25\xae\x00\xde\x96\xcf\x6e\xbf\x4a\x28\x88\xf2\x86\x1a\
+\xb4\x83\xf2\xb9\xfd\x85\x68\x25\xd5\x64\x70\xf3\x29\x27\xe1\x4b\
+\xe8\xa3\xa5\x10\x60\x14\x28\x00\x01\xb0\x14\xbb\xeb\x5d\x7a\xba\
+\x43\x2c\x6d\xa5\x72\x30\xca\x29\x6c\x6d\xef\xca\xb8\x69\xa5\x5a\
+\x8e\x06\x89\x5a\x92\x0d\x12\xb5\x29\x65\x5a\x8c\x30\x35\x5d\x4d\
+\x12\x35\x4c\x9f\x5c\x40\x24\xa6\xe0\x7a\xf5\xff\x00\xeb\xfc\xd0\
+\x17\x2a\x42\x8b\x67\x6f\x48\x3c\xbb\xd4\x82\x15\x02\x8f\x48\xff\
+\x00\x77\xa9\x08\x9b\x9b\xd4\x11\xde\x84\x3d\xf6\xd6\xa0\xbd\xb7\
+\x23\xeb\x52\x31\x48\x5b\xb1\x36\x0a\x09\x27\xa5\x63\x3b\x8b\xeb\
+\x7b\x9e\xd5\x7f\x1d\x2e\x5c\x26\x50\x48\x69\x3f\x21\x59\x6e\xc1\
+\x98\xef\xd0\x56\x79\x56\xb8\xc1\xe0\x64\xf0\xf1\x68\xcc\x35\x0c\
+\x34\xeb\x5a\x39\x7c\xe5\x17\x5d\x6d\x59\x4e\x03\x32\xdb\x42\x35\
+\xbd\x6a\xc2\x56\x58\xf3\xa9\xf5\x8b\x36\xba\x8e\xbf\x90\xfc\xea\
+\xe2\x68\x64\x4f\x1a\x42\xc5\xc0\x86\xd9\x00\x23\xd6\x3a\x8a\xa7\
+\x2f\x0c\xf0\x30\xe5\x70\x65\xa5\x42\xd9\x9a\xfe\xa1\xa7\x4a\xba\
+\xc7\x31\xe9\xd2\xdc\xaa\x23\x2c\xb2\x7a\x8f\x63\x4d\x92\x86\x3b\
+\xa3\xa7\xad\x19\x7d\xc5\xa8\x49\xb0\xbd\x6f\x78\xae\x48\x56\x39\
+\xb9\xf9\x85\xff\x00\x5a\x5c\x98\x4c\x14\xda\x98\x8c\x6d\xf8\x90\
+\xfe\x76\xac\xfe\x3f\x87\x59\x38\x49\x64\xc3\xe2\x04\xcb\xb8\x37\
+\xb5\x6c\x61\xf1\x98\x4c\x42\x66\x0f\xe0\xb7\x30\xfb\x7c\x8d\x52\
+\x9f\x86\x4c\x83\x3c\x4c\x26\x5e\x76\xdc\x7c\xaa\xab\x2b\x29\x21\
+\x94\xa9\xee\x2d\x54\xde\x2b\x25\x6c\x4b\x8c\x82\x05\xbc\x72\x2c\
+\xb2\x7c\x39\x76\x15\x9a\x03\x4b\x29\x21\x49\x66\xd7\x4d\xeb\xb0\
+\x78\x69\xb1\x0f\x68\xd0\x91\xcc\xf2\x15\xb1\x82\x85\x30\x89\x64\
+\x21\xa4\x3e\xa7\xfe\x29\x9b\xc8\x75\x08\x83\x85\x46\xb1\xb0\x9d\
+\xdb\x33\xa9\xba\x0f\xad\x89\xf9\x55\xb6\x83\x0c\x14\x2f\xd9\xe3\
+\x6f\x28\xd5\xb5\x3b\x51\x2f\x99\x48\xe6\xde\x50\x7d\xcd\xbf\x9a\
+\x97\x20\xb9\x23\x6a\xdc\x92\x33\xb4\x2a\xb0\x2b\x02\x30\xd1\x29\
+\x1b\x10\x2f\x4d\xb9\x66\x24\x9b\x93\x4b\x8f\xcc\xc4\x8e\x5b\x53\
+\x29\x89\x1a\xe5\xa9\xb1\xae\x16\xe6\x6b\x98\xd9\x49\xed\xa5\x29\
+\xd6\xa8\x3a\xae\x56\x50\xc3\x7b\x11\x7a\x9b\x2d\xb6\xbf\x73\x5c\
+\xbb\x91\xc8\x54\x83\x68\xb6\xf0\x22\x3f\xf4\xd4\x18\xb0\xcc\x7c\
+\xf8\x48\x4f\xfd\x34\xc0\xb6\xa8\x22\xf5\x62\x55\x93\x87\xe1\x1e\
+\x5f\xba\xcd\x13\x5b\xad\xc7\xf6\xa0\x64\xe2\x38\x4d\x98\xbc\x63\
+\x6f\x89\x4d\x5a\x37\x0d\x99\x45\x3a\x37\x36\x0c\xa4\x8b\xd1\x91\
+\x6b\x2a\x4c\x76\x25\x90\xa5\xd5\x2f\xbe\x55\xb1\xaa\xca\x09\x6b\
+\x0d\x49\x35\xb9\x2c\x30\x4b\xfe\x64\x22\xfd\x57\x43\x41\x87\xc2\
+\x61\xe1\x93\xc4\x5c\xce\xc3\x60\xc0\x58\x51\xf9\xa7\x4e\x2a\x11\
+\x55\x00\xb0\x55\x02\xdd\x2b\x80\xa9\x00\x93\x73\xb9\xa3\x51\x6a\
+\xd8\x0c\xd8\x78\xe7\x00\xb1\x2b\x22\x8b\x07\x53\x62\x7b\x1a\xa2\
+\xd1\x49\x1b\xb2\x4c\xcc\x59\x45\xc3\x6d\x98\x75\xf7\xad\x20\x34\
+\xa9\x75\x57\xc8\x19\x43\x00\xd6\xb1\xe8\x7f\xf1\x55\xe3\xa2\x56\
+\x4b\x58\x68\x05\xaa\x37\x15\xa3\x26\x16\x17\x37\x19\x93\xdb\x51\
+\x48\x93\x04\xc3\xd0\xe8\x7d\xf4\xb5\x66\xf1\xa7\x54\x9c\x54\x29\
+\x20\xdc\x55\x87\xc2\xce\x2f\x78\xc9\x03\x98\xda\x97\xe1\x3d\xfd\
+\x24\x77\x22\xb3\x94\xe9\x4e\xa1\x73\x46\xa2\xc0\x79\xd7\x4e\x47\
+\x7f\xce\xad\xe0\x98\xae\x0d\x2c\x6d\xe6\x6f\xda\xab\x61\xe1\x97\
+\x13\x8a\x92\x65\x5b\x46\xab\x91\x6f\xa0\x35\x71\x63\x11\xc2\xb1\
+\x83\x7b\x5e\xe7\xbd\x31\x52\x78\x86\x14\x62\x90\x98\xc0\x59\x46\
+\xb6\x03\x47\xfe\xf5\x9d\x83\x90\xc3\x8b\x11\x9f\xf2\xd4\x5e\x71\
+\xd7\xb5\x6c\x00\xf9\x08\x8d\x82\xbf\x22\x6b\x27\x1b\x1f\x87\x2b\
+\x8c\x99\x4b\xbe\x63\xf4\x1f\xbd\xe8\xe5\xfd\x53\xf8\xd7\x39\xd5\
+\x82\xa3\x10\xb6\xf2\xdb\x41\x6a\x5a\x15\x71\x29\x4b\x65\x12\x79\
+\x6c\x3a\xd2\x70\x38\x94\x7c\x11\x85\x9b\x2c\x80\x64\x43\xd6\xfc\
+\xbf\x5a\xbb\xe1\xd9\x02\x46\xb9\x94\x6d\x93\x51\x7a\xd4\xec\x2a\
+\xc8\x72\xe9\x6b\x93\xb5\x09\x4e\xac\x6a\xc1\x85\xef\x72\x8d\x7e\
+\xca\x68\x1d\x0a\x9b\x10\x47\xb8\xa3\x11\x05\x05\xef\xb9\xee\x76\
+\xa8\x2b\x4d\x22\x81\x8e\xb4\x22\x8a\xd2\xe7\x84\x4c\x08\x26\xce\
+\x3d\x2d\xd7\xb5\x3c\xda\xd7\xa0\x61\xa5\xf9\xd4\x65\x66\x3a\xb2\
+\x39\x56\xb8\x23\x7b\xd0\x93\x57\x38\xa2\x66\x8c\x4c\x37\x1e\x56\
+\xfd\xaa\x8b\x1b\x0a\xe7\x7a\x6e\x09\x54\x4b\x14\xb0\x1d\x9d\x0f\
+\xc8\x8d\x69\x5f\xe1\x59\xbe\xe9\xa1\x61\xe5\x67\xca\x3b\x5c\x51\
+\xc6\xc1\x23\x9a\x46\xf4\xa4\x64\x9e\xf5\x47\x81\xb6\x48\xd5\x94\
+\xf9\xbc\x71\x6a\xcf\x96\x26\xe3\x1b\x1a\x82\xcc\x27\xc3\x00\x37\
+\x72\x68\xa6\x53\xe3\xb2\x81\xf1\x1a\x01\x63\x2f\x8a\x0f\x96\x21\
+\x95\x3b\x9e\x66\xba\x32\x33\xbf\x5a\x82\x75\xb0\xff\x00\xc5\x0d\
+\xeb\x97\x46\x6d\x77\xa9\x27\xda\xbb\x9d\x75\x70\xde\xa4\x2a\x90\
+\x6a\x39\x54\xd3\x10\xd0\xd3\x03\x64\x42\xf6\xb9\x1a\x28\xea\x4e\
+\xd4\x90\x69\x80\xda\x4d\xae\x22\xd0\x77\x63\xfc\x0a\x52\x63\xfb\
+\xbb\x82\x09\x63\xbb\x6e\x4d\x48\x24\xea\x7e\x40\xd0\x83\x7a\x9a\
+\x90\x89\x07\x71\x52\x2c\x06\x77\xb2\xa8\xde\x84\x15\x55\x2e\xe6\
+\xca\x39\xd5\x3c\x5e\x20\xcc\xd6\x02\xc8\x36\x14\x5b\x83\x03\x89\
+\x93\xc6\x94\xb9\x03\xa0\x1d\x05\x21\x92\xcd\x75\x36\xa3\x35\x04\
+\x8a\xc3\x65\x5f\xcc\xb5\x67\x0d\x2b\xc3\x2c\x65\x6d\xac\x4e\x4d\
+\xc6\xf5\x5d\x56\xee\x14\x6a\x49\xb7\xbd\x4c\x72\x07\xc4\x62\x82\
+\x6a\x11\x15\x45\xba\x03\x44\xa9\x7e\x3c\x5c\x0f\xeb\x56\x43\xdb\
+\x51\x4f\x50\x1c\x5e\x36\x57\x1d\x8d\x64\x0a\x62\x31\x06\xe0\xdb\
+\xda\xb5\x39\x0c\x69\x6c\xda\xe9\x71\x61\x44\x06\x97\xa4\x61\xf1\
+\x80\x8c\xb3\xeb\xfd\x7c\xfe\x75\x64\xa8\xdc\x5a\xc4\x68\x46\x97\
+\xad\xb3\x5c\xb7\x07\x43\x63\x4d\x12\x39\xd4\xe5\x3d\xca\x82\x69\
+\x2c\x72\xdb\x98\xa9\x57\x61\xa9\x1e\x53\x50\xc3\x73\xb1\x16\x26\
+\xc3\xa0\x16\x15\x22\x81\x5b\x37\xa4\x7c\xcd\x18\xbf\x36\x3f\x41\
+\x4a\x74\x8f\x92\x48\x17\xf1\x3d\xea\x09\x62\xd6\x1a\x8e\x75\x2c\
+\xa0\xcb\x19\x37\x25\x41\x35\x23\x7a\x90\xb3\x05\xd0\x2d\x16\xb7\
+\xd5\x8f\xca\x84\x6d\x5c\x09\x02\xd7\x07\xde\x94\xe2\xa4\x9b\x96\
+\xa8\x28\xdb\x02\x2a\x6f\xad\x10\xd4\x8d\x0d\xc9\xe9\x52\x72\xa8\
+\x55\xb5\x16\x8a\x73\x3b\x2a\x29\x1b\xb1\xb5\x04\xf8\xa8\x20\x66\
+\x4d\x65\x91\x77\x51\xa0\x53\xd0\x9f\xda\xb3\xb1\x12\xc9\x34\x85\
+\xdd\xd2\xe7\x90\x52\x40\xf9\xdc\x55\x6e\x26\xce\x42\x40\x2b\x66\
+\x07\x62\xa6\xf4\x8c\x77\x88\x90\x06\x8c\xb2\xea\x73\x5a\x83\x84\
+\x43\x7c\x33\xb3\xb4\x85\x58\xf9\x47\xa7\xf4\xa7\xcb\x87\x71\x1b\
+\x08\xe5\xf2\x91\xaa\xb6\xa4\x53\xec\x4a\x8b\x8e\x21\x72\xcb\x15\
+\xcd\xbd\x6b\xa7\xe5\x56\x70\xe7\x34\x21\x85\xf2\x9d\x45\x72\x44\
+\x90\xc2\x2d\xe6\x2c\x75\xa6\x40\xb9\x70\xca\xa3\x93\x35\xbd\xaf\
+\x54\xd4\xe1\x44\x05\xeb\x82\xd1\x28\x26\xf6\xd0\x6d\x7a\xd2\x48\
+\x5b\x0b\xd4\x8e\xc0\x9e\xfb\x57\x05\x51\xc8\x5f\xa9\xd4\xd4\xee\
+\x69\x65\xda\xfe\x1f\xfe\xd5\xd7\xfb\xc4\x5d\x8e\x62\x6c\x7b\x0f\
+\xef\x47\x6b\x0d\x28\x5e\xe6\x64\x51\xba\xdc\xb5\xb9\x02\x2a\x48\
+\xa8\x22\x8f\x27\xf5\x1f\xca\xa0\xa1\xe4\x7e\xa2\xa4\x00\x0d\xe9\
+\x38\xec\x49\x45\x31\x2b\x12\xe7\x43\xae\xd5\x65\x6e\x1b\x6d\x7d\
+\xeb\x39\x22\x95\x66\x0e\xf0\x3b\x00\x6e\x47\x5a\xcd\xff\x00\x86\
+\x1f\x02\xb2\xe1\x54\x35\xee\x4d\xcd\xeb\x88\xa3\x12\xac\xad\x65\
+\xb8\x6e\x61\x86\xd5\x05\x3a\xde\xa2\x56\xec\x40\xb0\xb6\xe6\x93\
+\x89\xc2\xfd\xa4\x12\x08\xf1\x53\x4d\x46\x8e\x3a\x1a\xb4\x16\xc2\
+\xc0\x0a\x12\x32\xb6\x61\x7d\x4e\xb4\x62\x62\x48\x0a\xb5\x8d\xee\
+\xa7\x40\x16\xc0\x1b\x5a\xfd\x4d\x44\x5e\x3d\xad\x11\x7d\x39\x29\
+\x35\xbe\x58\x93\x72\x17\xe6\xa2\xa4\x3b\x0f\x4d\x97\xb8\x00\x7e\
+\x95\x9f\xc1\xd6\x03\x3c\xe0\x0c\xcf\x28\xbf\x22\x48\xa6\x61\xf1\
+\xf3\xc5\xe5\x73\xe2\x25\xad\x95\x8d\x6b\xc8\x24\x2d\x7b\x86\x1d\
+\x1e\xc6\xdf\x5a\xcc\xe2\xf0\x2a\x05\x96\x34\x20\x31\xb3\x0e\x86\
+\xb3\x65\x9d\xc3\x2e\xae\x12\xaf\x1a\xc8\x9e\x97\x17\x1d\xbb\x50\
+\x30\xa4\xf0\x96\x27\x0d\x24\x7f\x81\x81\x1e\xd4\xf7\x36\x17\xa7\
+\xde\xd9\xa4\xbe\x8e\xbf\x33\x42\xe6\xf4\xc6\x16\xd4\xee\x69\x46\
+\xa3\x09\xc7\xe9\x82\x3d\xd8\x56\x73\x5c\xe8\x35\x26\xae\x71\x77\
+\xb1\x48\x47\xc2\x2e\xde\xe6\xa9\x62\xa7\x4c\x14\x1e\x2b\x1b\xca\
+\xeb\xf7\x4b\x6d\xbb\xd7\x3e\x57\xb6\xa2\xaf\x1d\x9b\xc2\x85\x70\
+\x68\xd7\x6b\xde\x50\x0e\xe7\x90\xa3\xc3\x44\x62\x96\x08\x94\x5d\
+\xa3\x21\x9d\xbb\x92\x0d\x67\x60\x95\xe7\xc6\x78\xb2\x02\xe1\x4e\
+\x76\xef\x5b\x5c\x31\x95\xf1\xf9\xdf\x51\x18\x2d\x6f\xc4\xfc\xcf\
+\xcb\x6a\xe7\x3b\xba\x6a\xd3\xc8\x71\x39\xb2\x02\x88\xc6\xee\xe7\
+\x7f\x61\x52\xcc\x2c\x15\x45\x94\x0b\x01\xd2\x82\xe5\x9c\xb9\xe7\
+\xb5\x41\x35\xd7\x46\x08\xb5\x85\xcd\x70\x3a\x77\x26\x80\xea\x40\
+\x3c\xb5\x35\x20\xd5\xab\x0c\x06\xa6\xf4\xbb\xd4\x83\x56\xac\x30\
+\x1a\x9b\xd0\x03\x5c\xc7\xc8\x6d\x48\x36\x36\xf3\x02\x3e\xa6\xa3\
+\x0e\x4f\x84\x62\x63\x77\x8d\x89\x3a\xef\x7e\x74\x31\x9c\xc4\x5b\
+\x9d\x4a\x10\x59\xa6\xe6\xf6\x0b\xfe\x91\xce\xa4\x60\x34\x59\x95\
+\x10\xbc\x86\xca\x3f\x3a\x05\xb6\xb7\x36\x00\x5c\x9e\x95\x4b\x19\
+\x3f\x8b\x2d\x97\xd0\xbe\x9a\x6d\xc4\x3c\x4e\x21\xa6\x6e\x8a\x36\
+\x14\xb0\x69\x63\x7a\x9a\xe7\xad\x0c\xb5\x01\x3a\xd4\x1a\x83\xb6\
+\xd5\x27\x2b\x59\xb4\xb8\x3c\xaf\x4c\xb2\x87\x18\x85\x40\xa7\x30\
+\x59\x00\xf8\x81\xa1\xf0\xbc\xb6\xbe\xbd\x68\xd5\x5d\xa0\x75\x00\
+\x06\xb8\x61\x7e\x76\x35\x62\x73\xa6\x59\x19\x46\xb6\x24\x5e\xba\
+\xf6\xda\xb9\x87\x89\x69\xd5\x8f\x9c\x93\xa8\xdb\xb5\x72\x86\xce\
+\x41\xb1\xef\x6a\x52\x41\xab\x7c\x3e\x7c\xad\xe1\x39\xf2\x36\xdd\
+\x8d\x55\xd3\x99\x14\x2e\x5c\x37\x31\xd2\xad\xc5\x5b\x0e\x32\xdc\
+\x30\xfa\xd1\x0b\x5a\xd5\x53\x09\x29\x9a\x1b\x31\xf3\xa0\xb6\xa7\
+\x71\x56\x86\x80\x03\x5d\x18\xb0\x43\xb5\x4d\xc2\xa9\x63\xb2\x8b\
+\xd4\x0a\x56\x39\x98\x61\xec\xa2\xe1\x8f\x98\xda\xa0\x6c\x0d\x9e\
+\x1f\x14\xee\xe4\xdf\xb5\xb6\x14\x42\xa8\xe1\xa7\x96\x2f\x2a\xea\
+\xa7\xe1\x3b\x56\x83\x03\x60\x76\xd3\x50\x29\x9d\x9a\xe0\x6a\x75\
+\xa0\x37\xb5\xaf\xad\x12\x85\x03\xaf\xb9\xa4\x08\x0b\xd3\x10\x12\
+\xac\x01\xb3\x5b\xca\x6f\xce\x81\x4f\x73\x44\x46\x9b\x9f\xad\x31\
+\x31\xf1\x0a\xd0\x49\xe1\xce\xad\xab\x12\xb2\x01\xa1\xbe\xb6\x3d\
+\x0d\x5d\xc0\x60\x1d\x8a\xc9\x88\x5c\x89\xbd\xb9\xb5\x5c\x8f\xcc\
+\xb9\x5c\x93\xd6\xfa\xdb\xda\x8a\x16\x24\x34\x6e\xc1\x9a\x33\x6b\
+\xf5\x1c\xa8\x9c\x61\xd1\x46\xd7\x94\x20\x00\x28\x16\x00\x72\xa7\
+\x0d\x28\x10\x5b\x5b\x6b\x46\x2b\x71\x9a\x15\x48\xd5\x8b\x91\x60\
+\x35\x3d\xab\x91\x6d\x1a\x8b\x58\xda\xf6\xe9\x7d\x69\x8c\xb7\x0a\
+\xa7\x62\x75\xee\x00\xbf\xeb\x6a\xe6\x1a\x9d\x75\xa4\x16\xe3\xc8\
+\x7a\xda\xa4\x0b\x00\x3a\x57\x38\xf2\xdb\xae\x82\x8c\x81\x7a\x92\
+\x02\xde\x88\x0b\x54\xd7\x54\x9c\xc4\x2a\x96\x3b\x28\xb9\xa8\x41\
+\x65\xd7\xd4\x75\x63\xd4\xd4\x4d\xfe\x4b\xdc\x5c\x65\x35\x26\xe0\
+\xdb\xa6\xf5\x24\xd4\x13\x6a\x16\xbd\xea\x00\x26\xa4\xe3\xbd\x71\
+\x2d\xc8\xfe\x75\x39\x4d\x2e\x50\xd2\x44\x52\x3b\x00\x77\x73\xb7\
+\xb0\xeb\x52\x55\xe2\x52\xa3\x32\x84\x37\x65\xdd\x87\xe9\x44\x98\
+\xd4\xca\x03\xa3\x16\xe7\x6e\x74\xa9\x30\x53\x2f\xa4\x07\x03\xf0\
+\xd4\x70\xf4\x07\x17\xe6\xf8\x41\x36\x35\xcf\x6e\x95\xb5\x67\x71\
+\x75\x80\x01\xcb\x3b\xd8\x9a\x0c\xe9\x98\xa4\x9f\x76\xdf\x85\xb9\
+\xd3\x8e\xa6\xe6\xb9\x80\x6b\x66\x45\x6b\x6d\x71\xb5\x69\x00\x45\
+\xa6\x9f\x91\xa9\x29\x6e\x67\xf2\xa9\x78\xe3\x65\x39\xa3\x5d\xb7\
+\x02\xc4\x50\xc4\xd9\xe0\x46\xce\x3d\x3e\x6b\x9a\x52\x0a\xeb\xea\
+\x34\xb9\x21\x57\x86\x44\x37\x62\xca\x48\xbf\x5a\x6a\xb2\x35\xc2\
+\x48\xac\x57\x70\x2a\x50\x0c\xe3\xbe\x94\x16\x3f\x0a\x39\x71\x4c\
+\xa6\xde\x64\x23\x5e\xb5\x66\xe0\xc9\xa6\xc2\xa8\xc8\x4c\x38\x9b\
+\x8b\x82\x8f\x71\x7a\xbe\xb9\x58\x67\x8c\xdd\x48\xbd\xeb\x9c\x34\
+\x12\x52\x98\x84\x46\x91\xfd\x2b\xaf\xbf\x6a\x73\x8b\xd6\x6f\x13\
+\x9c\x3b\x78\x69\xe8\x53\xf5\xef\x45\xb9\x14\x21\x4f\x8d\x8c\xcc\
+\xfa\xdc\x96\x3e\xc3\x5a\xc1\xe2\x18\x89\x31\x78\xb2\xe7\x5b\x9b\
+\x28\xe8\x39\x0a\xdb\xc3\xb0\x13\x1c\xc6\xc0\xa9\x1f\x95\x52\x8b\
+\x87\x4d\x83\x66\xc4\x4c\x97\x0a\x6d\x19\xe4\x4f\x5a\xe3\xca\x5b\
+\x1b\x82\xc2\xa1\xc3\x44\xaa\x06\xb1\x83\x24\x96\xeb\xc8\x55\xbe\
+\x10\xa0\x49\x3e\x97\x29\x18\x5b\xdf\xbe\xbf\x9d\x54\x04\x29\x8a\
+\x36\xf5\x4a\x73\xb0\xe7\x94\x6d\xf9\xd5\xae\x18\x24\x2d\x3a\x44\
+\xe3\xc4\xca\x0b\xb7\x25\x37\xda\x9e\x3e\xaa\xb2\xc0\x8f\x50\x23\
+\xde\x84\xef\x40\x1a\x68\x0d\xb1\x0d\x9e\x36\x3a\x38\xd6\xd4\x63\
+\x23\x1f\x2c\xa8\x49\xd8\x66\xad\x00\x8b\x8b\xe9\x7b\x9a\x91\xf4\
+\xa2\x64\x65\x17\x2a\x6d\xd6\xa3\x42\x2a\x28\x6b\x01\x52\xa7\xad\
+\x44\xa6\x28\x55\x5a\x5c\xde\x6d\x94\x6f\x45\x04\xb1\xcf\x71\x1e\
+\x60\x47\x23\xce\xa0\x91\x6e\xf5\xc4\x12\x35\x36\xed\x53\xb5\x48\
+\xda\xb4\x10\x54\x88\x88\x5d\x59\xfc\x8b\xee\x69\xae\x6e\xe6\xdb\
+\x00\x05\x40\x03\xc6\x4e\xaa\x85\x80\xbf\x3b\xef\x43\x23\xac\x51\
+\xf8\x8d\xaf\x41\xd6\xa4\x5f\x10\x97\x22\x78\x2a\x75\x6d\x5b\xf8\
+\xaa\x60\x9a\xe7\x66\x77\x2e\xc6\xe4\x9b\x93\x52\x39\x56\x6b\x43\
+\x02\xa7\x95\x08\x3a\x51\x0d\xeb\x29\x04\x50\xb0\x60\xd7\xb5\xc0\
+\xa6\xd8\x74\xa8\x75\xb8\x22\xfb\xd3\x88\xef\x05\xf9\x21\x3d\xc6\
+\xb5\x24\xac\x0c\x1a\x56\xb3\x0f\x4a\x0d\xc9\xac\xd7\x5c\x4c\x1e\
+\x4b\x48\x8c\xdb\x00\x77\xab\x98\x18\x4e\x1d\x3c\x59\x35\x95\x87\
+\x97\x36\xa5\x7b\xd3\x2a\x31\x87\x84\x8b\x13\x0b\x11\x76\x3e\xe7\
+\x95\x72\x6a\x5a\xdf\x2a\xeb\xf5\xe7\xbd\x4d\xea\x4e\x51\x94\x00\
+\x45\x8f\x5e\xb5\x22\xba\xbb\x2e\x9b\x9f\xad\x21\x31\xb9\x49\x43\
+\x8d\xc7\x3a\xd2\x84\x89\x22\xce\x9a\x8b\xed\xcc\x56\x51\x36\x36\
+\x3a\x53\x20\x91\xd1\xcb\x46\xc4\x5a\x99\x55\x8d\x4b\x54\xa1\x00\
+\x12\xc7\xcb\x6b\x9b\xf3\x15\x49\x71\x92\x81\x62\x15\xbd\xc5\x41\
+\xc4\xcb\x23\x58\x90\x01\xd0\xe5\x00\x56\xb5\x9c\x58\xc2\x61\x85\
+\xbc\x56\x0d\x72\x6e\xa8\x3e\x1e\x97\xa7\x15\xb1\x25\x9e\xc7\x9d\
+\xda\xb3\x56\x79\x64\x46\x57\x91\x89\x89\xb2\x93\xd7\xa5\x40\xd7\
+\x5b\xd1\x2c\x58\xd4\x02\xfa\x06\x53\xff\x00\x50\xae\x60\x41\xda\
+\xb3\x05\x36\x09\xe4\x8d\xb4\x37\x1f\x84\xed\x4f\xe9\x62\xfa\xd3\
+\x06\xd4\xb8\xd8\x3a\x07\x5d\x9b\xf2\xa6\x2e\xd5\xa0\x20\x01\xde\
+\xa0\x69\xc4\xd4\x2e\xc6\x31\x71\xf2\xa2\x5d\xaa\x20\xb1\xe2\x33\
+\x5f\x70\x2c\xbe\xd5\xa4\xb1\xa0\x52\x49\xb0\x1b\x93\x47\x1d\x9a\
+\xc5\x48\x61\xd4\x1a\x4e\x25\x4b\x61\xca\xdf\x42\xcb\x7f\xad\x48\
+\xc3\xc6\x8f\x65\x2c\x17\x9a\xdf\x46\xa5\x91\xe6\x2e\xf7\x43\xa6\
+\xc0\xf6\xbe\xff\x00\xef\xb5\x1e\x45\xb6\xda\xf5\xe7\x5d\x1f\xa6\
+\xf6\xde\x8a\x94\x05\x8d\x43\x66\xd4\x9e\xf4\x43\x7a\x16\x34\x4a\
+\x74\xd6\xa4\x9a\xea\xeb\x8a\x1c\xc2\x94\xe9\x54\xb2\x15\x07\x5e\
+\x55\xc0\xb1\x17\x68\xf5\xff\x00\x58\xa1\x2c\x7a\xd4\x66\xd6\x84\
+\x98\x9d\x1e\xfb\x02\x0e\xa0\x9d\xa8\xb3\x0b\x79\x6c\xdd\xf6\x1f\
+\x5f\xe2\x80\xb2\x8f\x31\x03\xdf\x2d\xeb\xb3\x12\x6e\xdf\x2e\xd5\
+\x21\x9b\x11\xad\xdf\xb5\xac\xbf\xef\xde\xf4\x2e\xe6\xfe\x60\x2d\
+\xd6\xf5\xd7\xbd\x0b\x79\xc6\x50\x7d\xcf\x4a\x92\x6f\xad\x03\xa8\
+\xfb\x44\x72\x58\x5c\xdd\x4f\x7d\x28\xc0\x00\x58\x72\xa8\x27\xfe\
+\x2a\x34\xe8\xa4\x9a\xaa\x75\xaa\x40\xa3\xcb\x50\xc2\xc6\xa4\x5c\
+\xc8\xcd\x19\x55\x60\xb9\xb4\x24\xf4\xa4\xc7\x87\x85\x37\x5c\xe7\
+\xab\x6d\x56\x0d\x09\xd2\x8b\x09\x5e\x16\x49\x43\xc4\xaa\x0d\xac\
+\xcb\x7b\x5c\x51\x33\x0c\xc0\x15\x74\x27\x6b\xda\xc7\xe6\x2a\x49\
+\xa8\x60\x0a\x95\x61\x70\x68\x2a\x7c\x4f\x04\x66\x63\x34\x63\xcd\
+\x6f\x32\xdb\x53\x59\x2a\xf3\xe1\xa5\x25\x4b\x46\xdb\x11\xd2\xb7\
+\x46\x60\xc6\x27\x60\x40\x17\x43\x6d\xfb\x52\x78\x94\x69\x36\x19\
+\xdd\x96\xef\x18\xba\xd8\x7a\x8f\x4a\xc7\x2e\x3b\xdc\x32\xa8\xcb\
+\x8e\x57\x87\xc1\xb8\x49\xd8\x02\x75\xdc\x7f\x35\x9d\x38\x2a\x6c\
+\x45\x88\xe5\x59\xf8\xa9\x1d\xe5\x69\x09\xb3\x5f\x97\x2a\xbd\x04\
+\x87\x11\x82\x59\x08\xf3\x29\xc8\xdd\xfa\x57\x1f\xd7\xe9\xbc\xc1\
+\x61\x20\x32\xbd\xce\x8a\x37\x35\x7c\xb9\x06\xc0\x0c\xbb\x65\x23\
+\x4a\xe5\x8c\x43\x08\x8c\x6f\xbb\x77\x34\x27\x7a\xde\x63\x2c\xdf\
+\xf1\x07\x0e\xcf\x3a\xe2\xa2\x94\x45\x1e\x50\xa7\xa8\xf6\xa6\x70\
+\x22\x82\x39\xa1\x8c\x10\xa1\x6f\x73\xbb\x1b\xef\x57\x27\x8f\xc6\
+\xc2\xcb\x0d\xae\x4a\xdd\x7d\xc5\x65\xf0\x79\x44\x38\xd0\x1b\x69\
+\x01\x43\xaf\x5a\xc5\x92\x72\xd3\xf1\xa2\x48\xca\x54\x8b\xa9\xd0\
+\x8a\x50\x83\x0a\x3f\xe4\x9f\xfb\xcd\x36\x45\x2a\xc5\x48\xb5\x42\
+\x0b\xb0\x1d\x6b\x55\x17\x88\xfb\x98\x0c\xb0\xb3\x26\x52\x01\x52\
+\xd7\x06\x81\x31\x98\x72\x2e\xca\xea\x7a\x0d\x41\xa1\xc5\xbb\xcf\
+\x29\xc3\xc2\x9a\x29\xd7\xa9\x34\x71\x61\x22\x44\xfb\xe0\x5d\x8f\
+\x20\x6c\x05\x1d\xef\x49\x59\xd9\xf1\x78\xbf\x28\xb6\x6d\x85\xf6\
+\x14\xd9\x60\x6c\x32\x89\x92\x4b\xd8\xd8\xe9\x6a\x60\xc3\x45\x71\
+\xe1\x33\xc6\xc0\xe8\x77\xae\xc7\x44\xde\x5f\x1b\x13\x7e\x8b\x60\
+\x09\xa3\x3e\xa3\xa1\x94\x4d\x00\x93\x2e\x53\x7b\x1a\x9b\xda\xa8\
+\xe0\x38\xa6\x0f\x33\x61\x56\x17\x36\x37\x52\xc6\xc4\x9a\x62\xf1\
+\x34\xcc\x73\x61\x11\x11\x7d\x44\xb1\xbd\x33\x94\xfe\xac\x5a\x9a\
+\xcb\x87\x33\x92\x57\xc2\x20\x83\xfb\x55\x4c\x64\xad\x24\xd7\x61\
+\x6b\x01\xa7\x4a\xa9\x8d\xe3\x4d\x89\x4f\x0f\x09\x04\x6a\x11\xae\
+\xaa\xe7\xd5\xdf\x5e\x74\x2f\xc5\x1d\x90\xc9\x16\x1a\x1c\xc3\xd6\
+\x18\x6a\xa7\xb8\xac\xde\x70\xc9\x56\x2a\x41\xe5\x49\xc0\x71\x11\
+\x89\xc4\x24\x32\xe1\xa3\x05\xcd\x8b\x2e\x96\xf9\x53\xf2\x9f\x10\
+\xa2\x82\x4d\xed\xa5\x32\xcb\xe2\x12\xd1\xa8\xa7\xc1\x83\x00\x03\
+\x33\x5b\xfa\x56\xad\x45\x1e\x1d\x76\x88\x1f\xf5\x1b\xd3\x38\x8d\
+\x51\x14\x68\x8c\xc2\xe0\x6d\xb9\xab\x86\x08\x1e\xf6\x4c\xa6\xc4\
+\xe8\x74\xdb\xa5\x67\x62\xa2\xc5\x62\x2f\xe1\x36\x74\x1b\x22\xe9\
+\x6f\x95\x36\x62\xd5\xec\x3c\xb1\x4a\xf3\x0c\xa1\x4b\x1b\xc7\xdb\
+\xda\xa8\xc6\xcd\x98\xa9\xdc\x1a\xb3\xe2\x69\x1e\x1c\xc5\x95\xa2\
+\x6d\x5c\x0e\x55\x5d\x47\x9d\x18\x1b\xe6\x4b\x93\xd6\x8a\xa0\xc5\
+\x10\xa8\x5a\x9a\x88\xb4\xb5\xed\x52\x37\xb6\x95\x0a\x68\x59\x19\
+\xd8\xb0\xd8\x9d\x29\x64\x65\x14\x9b\x9b\xd7\x01\xc8\x0a\x88\x83\
+\xa9\xf3\x03\x6f\xd2\x8c\x6a\x34\x37\xa5\x04\xae\xc3\xa9\xa2\x16\
+\x45\xcf\x6d\x07\xa4\x75\x3d\x05\x43\x0b\x2e\x7b\x85\x09\xa9\x27\
+\xa5\x70\x60\xe0\x4a\xc4\xa9\x22\xc8\xbf\x84\x75\xf7\x35\x27\x22\
+\xf8\x51\xe5\x24\x66\x26\xec\x7b\xd7\x66\x3c\x87\xd6\xac\x43\x84\
+\x77\x50\xc6\xc8\xa7\x9b\x6e\x69\xc9\x84\x81\x46\xa5\x98\xfd\x29\
+\xca\xb5\x48\x13\xf8\x4f\xca\xb9\x58\xb3\x10\x45\xb4\xab\xb2\x61\
+\x52\xc4\xc6\xc4\x11\xc8\xd5\x2d\x4c\x9a\x82\x32\xe8\x6f\x56\x25\
+\xae\x1f\x29\x56\x31\x9d\x9b\x6f\x7a\xbd\x01\xba\xeb\x58\xf9\xd8\
+\x3f\x90\x6c\x77\xad\xa5\xb1\x01\x80\xd0\x80\x45\xab\x5c\x45\x31\
+\x05\xcd\xaa\xb9\x97\x2e\x3d\xa6\xb1\x2b\x9a\xd7\xb7\x2a\xb5\x0f\
+\xa8\x77\xa1\x89\x8a\xc0\x97\x50\x57\x28\xfe\xf5\xb0\x31\x22\x3b\
+\xaa\x23\x06\xbf\x98\xf6\x03\x5f\xd6\x8c\x6b\xf3\xaa\x39\xbe\xcf\
+\x8b\xce\x05\xc1\x1b\x7b\xd5\xd6\x60\xa0\x1e\xa0\x10\x29\x94\x25\
+\x5a\xea\x3d\xa8\xae\x6d\xbd\x2d\x76\xb7\x4d\x28\x81\xa4\x26\x88\
+\x11\x6a\x1b\xd0\x96\xb5\x48\x4c\x45\x09\x34\x2c\xff\x00\x2a\x0c\
+\xe3\x6b\x8f\xad\x1a\x70\xcb\xf7\xae\x2c\x05\x29\x9a\xc3\x5a\x12\
+\xe4\xec\x3e\xb4\x69\xc1\xca\xcd\x75\x03\xad\xea\x73\x6b\x4b\x5d\
+\xfa\x93\xce\x88\x54\x86\x4f\x97\xb5\xf5\x34\xd4\x17\x00\x2e\xdc\
+\xad\x42\x8a\x58\x58\x0b\xde\x80\x2c\xda\xc5\x19\xd7\x62\xdf\x86\
+\x90\x99\xa7\x0a\x08\x89\x73\x11\xbb\x72\x14\x58\x24\x60\x8d\x2c\
+\x9e\xb9\x3f\x4a\x88\xb0\x8c\x8b\xe6\x90\x38\xbd\xec\x05\x81\xf7\
+\xa6\xc6\x7c\xbb\x9b\x8a\x64\xbb\xda\x15\x03\xef\xbe\xd4\x67\x6a\
+\x5c\x84\x09\x3c\xc7\x4b\x5c\x55\x40\x49\xb8\xb8\x04\xd0\x33\x5d\
+\x8a\xda\xdf\x3a\xe9\x65\xb9\xb2\x7d\x6b\x88\x0a\x2c\x3e\x66\x83\
+\x11\x41\x23\x85\x5b\xd4\xbb\x59\x49\xe9\x55\xee\xce\xf7\x35\x9b\
+\x49\x81\x6e\xa4\x1d\x58\x8b\xdf\xa1\xaa\x78\xec\x40\x66\x40\x9b\
+\x2f\xab\xdf\x9d\x5b\x53\xf7\x83\xde\xb2\xb1\x0d\x7c\x64\xeb\x71\
+\x96\xf9\x94\x74\xbe\xf5\x9e\x57\xa3\x18\xdc\x6a\x1f\x07\x18\xf6\
+\x5b\x23\x1b\xaf\x71\x45\xfe\x1c\x90\x0e\x21\xe1\xc8\x7e\xed\x81\
+\x2c\x3a\x5b\x9d\x5e\xc5\xc2\xb8\xb8\x7c\x22\x40\x75\xf4\x13\xfa\
+\x56\x56\x0d\x5a\x0e\x20\x61\x95\x4a\xb3\x02\xba\xf2\xbd\x70\xb3\
+\x39\x6b\x7f\x1e\x8a\x60\x44\x87\x36\xf4\xa3\xbd\x55\xc1\xe3\x8a\
+\x0f\x03\x11\x72\xb7\xd1\x8e\xeb\x57\x19\x48\x20\x8d\x41\xd8\x8e\
+\x75\xd3\x75\x90\x83\x95\x83\x0e\x55\x9d\xc5\xb0\x6c\x92\x36\x22\
+\x11\x78\x98\xdf\x4f\x84\xd6\x8b\x29\x1a\x10\x45\x72\x12\xbb\x73\
+\xde\xfc\xe8\xb3\x54\xac\xfc\x16\x39\x72\x88\xb1\x37\x2a\x36\x7e\
+\x62\xad\x23\xc0\xd6\x29\x89\x8c\xdf\x5d\x4d\x88\xa8\xc4\x61\x30\
+\xb3\xfa\x94\xc4\xdd\x50\x68\x7e\x55\x56\x4e\x16\x6f\xf7\x58\x88\
+\xdb\xb3\x79\x68\xff\x00\x28\x57\xd7\xcc\x09\x59\xa2\xb7\x36\x0c\
+\x29\x12\x62\xb0\x48\x4e\x69\xcb\x11\xc9\x53\x7f\x9d\x51\x7e\x1d\
+\x8b\x52\x09\x8b\x32\xdf\x52\xa6\xf5\x57\x1c\x78\x96\x1f\x10\x50\
+\x61\x7e\xef\xe1\x1e\x1d\xc5\xa8\xbc\xac\xf8\xa4\x5d\xc4\x71\x57\
+\x23\x26\x1a\x31\x10\x23\x56\xdd\xbe\xb5\x51\xdd\x84\xb9\x14\xe7\
+\xc4\xb0\xcc\x4b\x1d\x10\x75\x34\x98\xb1\x2c\x49\x69\xf0\x91\x8c\
+\xbb\xe5\x26\xff\x00\x41\x54\x31\x3c\x59\xa2\xe2\x06\x58\xf0\xec\
+\x88\xde\xa2\x41\x0c\x47\x6e\x95\xca\xf2\xfb\x6b\x58\xb1\x89\xc2\
+\xa6\x1d\xd5\xdf\x10\xac\xc4\xde\xda\xaf\xf2\x68\x31\xf8\xb9\x31\
+\x01\x54\xbe\x60\xa3\x5b\x0b\x02\x7a\xda\x93\x2a\xf8\x89\xe3\xc4\
+\xe6\x44\x6d\xcf\x31\xef\x4a\xbd\x62\xdf\xe1\xc1\x03\x56\xa3\x2e\
+\x71\x38\x42\xba\xc9\x21\x2a\x6d\xbb\x27\x7a\xa8\x0d\x6d\xff\x00\
+\x87\x11\x15\xd3\x13\x3a\x80\x21\xd1\x6f\xbe\xa6\xf4\xf1\x9b\x55\
+\xab\x5c\x23\x87\x36\x1f\x33\x31\xb4\x8c\x37\xe4\x83\xf9\xad\x18\
+\x55\x21\x5c\xb1\xdf\xbb\x1d\xcd\x40\x91\x65\x17\x8e\x55\x23\xa5\
+\xec\x6a\x76\xd2\xbd\x32\x49\xe3\x14\x60\xd1\x03\x4b\x06\x8d\x01\
+\x63\x60\x09\x34\x83\x22\x60\x1a\xe7\x60\x09\x3e\xd5\xd8\x13\x93\
+\x04\xad\xac\x62\xec\xcd\xd6\xdc\xa9\x32\x9c\xc5\x70\xe8\x41\x67\
+\x20\xc9\x6d\x40\x14\xeb\xac\x85\x93\x65\x71\x94\x76\x1c\xa9\x4a\
+\x98\xb9\xd2\x46\x00\x2a\xbe\x5d\xd9\x86\xff\x00\x2a\x59\x66\x73\
+\x76\x37\xa5\xa0\x14\xc1\x58\x68\x42\xa4\x50\xd7\x7c\x27\xda\xa4\
+\x33\xf8\x79\x9e\x42\x8f\x9d\x00\xd0\xd8\x68\x28\x97\x6a\x60\xa2\
+\xe7\x50\x45\xcf\x7a\xea\x95\x3e\x60\x06\xa7\x90\x1b\xd2\x02\xaa\
+\xb2\xe2\x0c\x24\xb3\xac\x76\x39\x07\xc4\xd5\xa1\x87\xc3\xa4\x07\
+\xc5\x94\x03\x21\xe5\xc9\x6a\xbc\x90\x7d\x90\x7d\xa8\x00\x25\x63\
+\x62\x06\xb9\x68\xf0\xb3\x4f\x89\x3e\x75\x40\xa3\x98\x16\xb5\x33\
+\xaa\xaa\xcb\x48\xa4\xdc\xb1\xd7\x99\x15\xc4\x81\xb9\x1f\x5a\x51\
+\x56\x67\x0a\x4d\xc0\xfc\xaa\x7c\x21\x9a\xf7\xb0\xe9\x4b\x26\xd5\
+\x7c\x72\x82\x4c\x80\x00\x6d\xaf\x7a\x70\x04\x68\x18\xfc\xea\x55\
+\x41\x3e\x7d\x6f\xa1\x1d\xaa\x4c\xf1\x7a\xd2\xe1\x6d\x9b\x0c\xc2\
+\xf7\x28\x74\xf6\xac\xe9\x30\xec\x98\x96\x41\x7c\xbc\xb5\xb5\xe9\
+\xd8\x1c\xd0\xe2\x75\x07\x2b\x0b\x1a\xb8\xf5\x5a\xad\x50\xc5\x41\
+\x3d\x05\xc5\x14\x63\x2d\xd0\xdb\xf1\x0f\xdc\x7d\x7f\x5a\x50\x0f\
+\x7c\xad\x6b\x5f\x53\x45\x24\x81\x02\x3b\x1b\x0c\xc5\x49\xec\x45\
+\x74\x64\xae\x27\x1d\xd2\x36\x52\x6f\xaa\xfc\xea\xc3\x00\xa7\x28\
+\xdc\x00\x09\xf9\x50\x0c\xb3\x48\x1a\xf7\x8e\x3d\x8f\x26\x34\x4e\
+\x75\x26\xa4\x90\x6d\x5c\x1a\x80\x1a\xea\x92\x58\x96\xbd\xc9\x02\
+\xfb\x50\xb5\xed\xeb\x6f\xad\x40\x3e\x51\xdc\x57\x1a\x90\x6c\x4f\
+\xa8\xde\xd5\x24\x0e\x82\xba\xf5\x0c\x68\x48\x20\x03\xa5\x75\xea\
+\x2a\x54\x5c\xda\x84\x25\x37\x15\x18\xcc\x4a\xe1\x80\x45\x01\xe5\
+\x22\xf6\x3b\x20\xea\x6b\x95\xd4\x11\x93\xef\x09\x3c\x81\xb0\xf9\
+\xd6\x5c\xce\xcf\x33\xb3\x1b\xb3\x31\x2c\x7a\x9a\xad\xc8\xa2\xcb\
+\x62\xf1\x32\x8b\x3e\x25\xb2\xfe\x18\xd7\x2d\xe8\xb0\xb8\x89\x62\
+\x23\xc3\x62\x00\x37\xb7\x5a\xab\x1d\x59\xc1\x46\x65\x9d\x63\x51\
+\xab\x1b\x51\xde\x9a\xdd\x27\xee\xc3\x81\xba\x83\x6a\x15\x4d\x2f\
+\x7d\x4e\xa6\x9c\x40\xd8\x6c\x05\x85\x01\x16\x3a\x6d\xd2\xbb\xb0\
+\x5b\xf9\x54\x9b\x6c\x2f\x4b\x68\xc1\xf5\x6a\x7a\xd3\x24\x04\xe8\
+\x4e\x9d\x05\x41\xd3\x5a\x2a\x21\xa2\x50\x41\x51\xa8\xeb\x40\xf9\
+\xb7\x16\x14\xe6\xa5\x3d\x66\x98\x53\x82\x7d\x76\xf6\x14\x04\xd3\
+\x1c\xd2\x98\xd6\x69\x46\x62\x1a\xfd\x2b\x37\x8a\x2f\x83\x2f\x8e\
+\x6f\xb8\x52\x79\x32\x9a\xd0\xaa\xdc\x4d\x5a\x54\x11\x78\x25\xd2\
+\xd7\x24\x75\xac\x5f\x0c\x50\x93\x46\x20\x6d\x43\x3c\x29\x8c\x8c\
+\x24\xa1\x83\x29\xf2\xc8\xa3\x51\xef\x44\xe2\x64\x16\x43\x13\x90\
+\x2c\x33\x8b\x11\x55\x27\x4e\x22\xe4\xdc\x48\x47\xf4\x9f\xe2\xb9\
+\xd6\x88\xc4\x1c\x46\x1d\x8a\xe2\x62\xf1\x50\x68\x24\x1b\xfd\x69\
+\xf8\x3e\x27\x04\x70\x18\xb3\xba\x03\xb1\x61\x7c\xbf\x3a\x94\xc1\
+\xe2\xda\x2f\xbe\x25\x54\xf2\x60\x49\x34\xb1\xc3\xb0\xef\x7f\x0a\
+\x44\x27\x98\x91\x8a\x5b\xf5\xac\xf7\x3c\x3d\x35\xb0\xc6\x29\x30\
+\xaa\xd1\xe2\x52\x4b\x5e\xe6\xfa\xd7\x1c\x9c\xe4\x4f\xfb\xab\xcf\
+\x62\x70\xf8\x9c\x0c\x99\xd6\xe8\x2f\xa3\x2b\xdc\x1f\xca\x8a\x3e\
+\x2d\x36\xd8\x80\xb3\x2f\x32\x56\xcd\xf5\xa7\xf7\x3e\x8c\x6e\xbf\
+\x87\x6b\xf8\xd1\xe9\xfd\x54\x99\x24\x85\x75\x69\x47\xfd\x3a\xd5\
+\x28\x24\xc3\x62\x85\xb0\xf2\x15\x7b\x5f\xc3\x7d\x3f\x3a\x19\x94\
+\xa9\xb3\x0b\x11\x4d\xe5\xd2\xc5\xa6\xc5\xc2\x86\xe8\xae\xc7\xbe\
+\x82\x82\x6e\x21\x24\xa9\xe1\x95\xca\x84\x58\x8c\xc4\xfe\xb5\x50\
+\xd4\x56\x3f\x54\x86\x4c\x34\xa4\xfd\xd6\x3a\xea\x0e\xce\x4a\xda\
+\x97\x34\x18\xd4\x5c\xca\xe9\x32\x0d\xf6\x20\x8e\xf7\xa7\x57\x2b\
+\x14\x60\x54\xd8\xd1\x90\xeb\x35\x22\x84\xc8\x64\xc3\x01\x0c\x84\
+\x1c\xd1\x1f\x44\x9e\xdd\x0d\x56\xc4\xc7\x97\x12\x63\x41\xec\x08\
+\xd6\xb6\x71\x18\x13\x8b\x9d\x1a\x01\x95\x9f\x57\xe8\x2b\x51\x70\
+\xf8\x68\xe1\x10\x01\xaa\x8b\x09\x40\xd5\x4d\x13\x86\xad\x79\xdc\
+\x26\x0f\xc3\x0b\x2e\x24\x58\x9d\x55\x39\x9f\x7a\xbe\xb3\xc4\x8c\
+\xa9\x3b\x64\x59\xd0\x59\xc0\xd8\x82\x77\xfa\xd0\x63\xf0\xd2\xe1\
+\xe6\xb4\x87\x30\x6d\x43\xfe\x2a\x56\x2b\x0e\xf8\x98\x62\x58\x99\
+\x3c\x80\xdf\x33\x58\xd1\xe7\x8b\xd6\xa6\x0b\x08\xe6\x70\xe5\xbc\
+\x8b\x66\x0c\xba\xde\xae\x66\x0f\x3b\x2a\x87\x76\xbf\x9b\x28\x00\
+\x2f\xcc\xd6\x3f\x0a\x3c\x4f\x02\xa5\x22\x78\x24\x43\xbc\x65\xef\
+\x7f\x6a\xd6\xc0\xbc\x72\x42\x23\xb1\x8a\x76\xf3\x34\x64\xdf\xf3\
+\xae\xbc\x2f\x4c\xd3\x4a\x91\x6b\x42\xef\xfe\x97\x1a\x7b\xd4\xa3\
+\x5e\xe2\x42\x07\xff\x00\xd6\x87\x4f\x99\xe7\x42\x47\x6a\x95\x51\
+\x7b\x90\x0d\x6c\x08\xb1\x0b\x95\x55\x54\x74\x51\x52\x80\x93\x43\
+\x94\x11\x6d\x7e\xb4\x8c\x6b\x65\xfb\x95\x63\x7f\x8f\xf8\xab\x71\
+\x2b\x83\xde\xd4\xc0\x53\x28\x2d\x2a\x29\x23\x66\x3a\xd2\x63\x8c\
+\xbf\x94\x31\xa6\xaa\xa0\x3e\x33\x59\xf4\x01\x01\x1c\x86\x99\xab\
+\x11\xa3\x4a\x84\x17\x91\x85\xb9\x65\x20\x93\xec\x2b\xac\x4a\x12\
+\x30\xb3\xda\xdb\xdc\x54\x09\x5b\x93\x28\xee\x00\x15\xd7\xb9\xb9\
+\x37\xfc\xe9\x06\xd9\xef\xe5\x85\x35\xe4\xf2\x58\xd4\x48\xd9\x06\
+\x66\xc3\x4e\x07\x5b\x83\x40\xb7\xb0\x06\xa5\x4b\x03\x71\x71\x4a\
+\xc0\x7d\xa8\xb7\x97\x0d\x03\xbb\x75\x61\x7a\xbf\xc3\x9a\x35\x16\
+\x95\x44\x53\x30\xbd\x8e\xdf\xf9\xa8\xe1\xea\xce\xc5\xdf\xd2\xbc\
+\x86\x97\x35\x66\x78\xa3\x9c\x5a\x54\xb9\xea\x34\x35\xa9\x2f\xa2\
+\xd0\xca\xab\x88\x21\x33\x5e\x34\xd5\xcf\xe2\x3d\x05\x1a\xe8\x32\
+\x8d\x14\x6c\x06\xc2\xb8\x21\x48\xc2\x20\xb2\x8d\xaf\x5d\x66\x3a\
+\x11\x61\xce\x96\x51\x1f\xa3\xe7\x44\x05\x48\x15\xd6\xa9\x38\x54\
+\xaa\xdc\xf4\x00\x5c\x9e\x82\x88\x21\x22\xf6\xd3\xa9\xaa\xdc\x47\
+\x12\x91\x44\x61\x8d\x83\x3b\x8b\x31\x07\xd2\x29\xea\x7a\x99\x7f\
+\xe2\x39\xde\x5c\x44\x6f\x1b\x11\x1b\x0c\xaa\x3a\x5a\x91\xc3\xb1\
+\x72\xe1\xa5\xf5\x96\x46\xf5\x03\xaf\x3a\x2c\x59\xcf\x85\x0d\x63\
+\xf7\x6c\x0f\xd7\x4a\xaa\xbe\xab\x74\xae\x36\xf7\xad\xe3\xd9\x42\
+\xe2\x58\x04\x8b\xb7\xed\xca\xa2\x64\x12\xc2\x63\x26\xda\x82\x0d\
+\x66\x7f\x87\xb1\x36\xc2\x80\x7f\xe5\xb1\x56\x17\xe4\x79\xd6\xa9\
+\xec\x6e\x0e\xc6\xbd\x12\xec\x61\x2b\x65\x01\x57\x45\x5d\xab\x98\
+\xde\xa2\xba\x94\xea\xe1\xb8\xae\xae\xa9\x05\x3d\x03\xda\xa1\x88\
+\x02\xa2\x43\x96\xe7\x91\xde\x96\x5c\x6f\x63\x6e\xb4\x6a\x13\x35\
+\xea\x2f\x43\x7b\xed\xad\x70\xa1\x08\x7f\x73\x40\x5c\xca\xb9\x22\
+\x46\x2a\x4d\x99\xf9\x5a\x8b\x42\xac\xa4\x8f\x30\x22\x81\xa6\x8e\
+\x1c\x22\xc8\xdb\x81\x60\xbd\xea\x49\xc7\x62\x57\x0d\x0e\x55\x3e\
+\x72\x2c\x8b\xd0\x75\xac\xe4\x6b\xeb\x49\x9e\x57\x9a\x63\x23\x9b\
+\x93\x4d\x48\xe4\x45\x0c\xc8\xc0\x75\x22\xb1\xfa\xda\xd6\x61\xa9\
+\xbd\x6e\x70\x7c\x3f\x81\x17\x88\xe3\xef\x1f\x6e\xc2\xb0\xe1\xb6\
+\x71\x7d\xaf\xad\x7a\x53\xea\x1d\x2c\x2d\xf4\xae\x9c\x27\x6c\xf2\
+\x30\x1d\x2a\x0d\x4a\x54\x91\x5d\x59\x29\xc5\x03\xfa\x69\xac\x29\
+\x6c\x39\x51\x51\x47\x7a\x5c\x83\xa9\x03\xdc\x8a\x29\xdf\xc2\x89\
+\xa4\x3c\xb6\xf7\xac\xa4\xbc\xd8\x91\x9c\x17\xcc\x75\xb5\x63\x95\
+\x31\x79\xd7\x4b\xdd\x6d\xfe\xa1\x49\x25\x4e\xc7\x37\xfa\x05\xff\
+\x00\x3d\xa8\xca\x46\x86\xe9\x1a\x2d\xb9\xda\x85\x89\x3b\x92\x68\
+\x20\x21\xef\xea\x11\x8e\xde\x66\xfe\x28\x48\xb1\x37\x79\x1b\xdc\
+\x81\xfb\x51\x31\xa0\x63\x59\xa8\xb3\x06\x1b\x35\xfc\x22\x4f\x3b\
+\xb5\x42\xbc\x71\xe9\x1a\xe4\xf6\x1a\xd4\xb1\xa0\x26\x82\x23\x3b\
+\x6f\xe2\x3d\xfd\xcd\x04\x92\x17\x5b\x00\xbe\xf9\x05\x4e\x9d\x3f\
+\x2a\x06\x00\xf2\xb7\xb5\x45\xca\xea\x17\x21\x8a\x36\x5e\x61\x96\
+\xa9\x71\x0c\x0c\x0e\x9e\x26\x1f\x07\x11\xfc\x48\x14\xdc\x77\xab\
+\x7a\xdb\xad\x40\x24\x1b\x8b\x82\x3a\x51\x64\xa9\x84\xcb\x00\x24\
+\x1c\x32\x0e\xb6\xb8\x22\xb4\x70\x03\x0f\x89\x83\x2b\x02\x64\x5d\
+\x02\x97\xd6\xdf\x4a\xb3\x89\x86\x1c\x40\x1e\x34\x76\x61\xf1\x2d\
+\x81\xaa\x72\xf0\xdb\x31\x31\x62\x00\x3c\x83\x0b\x7e\x75\xcf\xf3\
+\x65\x6b\x61\xcd\x86\xc3\x29\xb3\x40\xe0\x8e\xae\x69\x58\x98\x70\
+\x91\x2e\x62\x18\x5f\x61\x7b\xd4\x88\xf8\xbc\x63\x2c\x72\x19\x07\
+\xf4\xb0\x6b\x50\xcb\x3e\x35\x7c\x98\x8c\x1e\x7d\x39\x2d\xbf\x4a\
+\x7a\xfe\x01\x61\xa3\xc2\x4b\x19\x61\x1b\x12\xbb\xdd\xad\x4e\x8d\
+\x63\x12\x00\xb0\xc6\xba\xda\xe0\x6b\x55\x63\xe2\x10\x44\x32\x36\
+\x19\x96\xfe\xa0\x0d\xa8\xcf\x11\xc1\x5e\xf9\x27\xfa\x8a\xb6\x21\
+\xc4\xa0\x33\xce\x45\x99\xd8\x81\xfd\x20\x69\x52\x8a\xcc\xc0\x0d\
+\x49\xa0\x18\xec\x26\x63\xe4\x93\x2b\xea\xb7\x61\x6c\xdd\x3b\x5e\
+\xaa\x62\xf8\x94\x85\x5a\x28\xa2\x10\x83\xa1\xeb\x46\xc8\x85\xc6\
+\xa6\x8d\x82\x40\x87\x31\x8c\x9c\xcd\xcb\xda\xa9\x28\xa1\x07\x5a\
+\x35\x3a\x57\x3d\xde\xda\xc4\x93\x6a\xe4\x62\xae\x19\x4d\x88\xd8\
+\xd7\x1a\x8e\x75\x44\xdd\xc3\x4d\xf6\x9c\x1a\x4c\x4f\x9c\x79\x5f\
+\xdf\xad\x1a\x9a\xce\xe0\xb8\x85\x8e\x46\x86\x56\xb4\x72\x0d\xfa\
+\x1e\x46\xb4\x8a\x95\x6b\x1a\xed\xc6\xec\x66\xa5\x9f\xc3\x85\xe5\
+\xe6\xa3\x4f\x7a\xce\x04\x93\x73\xa9\x35\x77\x19\xff\x00\xed\xf2\
+\x7f\xa9\x6b\x3f\x52\xb6\x1b\xde\xae\x4a\x2c\x46\xaa\x50\xeb\x9a\
+\x31\xff\x00\xfd\x0f\xf1\xfa\xd1\x31\x2c\xd7\x63\x44\xe1\xcb\xf9\
+\xc5\x8f\x4b\x5a\xd5\x39\x68\x41\x17\xe5\xa5\x4d\x8f\x3b\x9a\x20\
+\xbd\x68\x82\xd3\x8b\x42\xa2\x8a\xd4\x40\x57\x01\x48\x5e\xc1\xae\
+\x5c\x2a\xdb\xe2\x24\xd3\x00\x3a\xd8\x6b\x6d\x2f\xd6\x87\x00\x73\
+\x61\xb2\xde\xe5\x0e\xdd\xa8\xe5\x0c\x19\x55\x05\xdc\xec\xbf\xb9\
+\xad\xb2\xab\x84\x5c\x44\xa5\x9b\xc6\x65\x50\x75\x37\xe7\x56\x82\
+\xb8\xf8\x8c\xab\xce\xfa\x30\xfe\x68\xa0\x87\xc2\x84\x25\xee\x49\
+\xbb\x7b\xd1\xaa\xda\x99\x10\x14\x06\x17\x53\x7b\x6e\x2d\x62\x3d\
+\xe8\x71\x32\xc7\x86\x8c\x33\x82\xcc\xde\x95\x15\x60\xda\xe1\xc8\
+\xdb\x46\x3d\x8f\xf0\x6a\x97\x1e\x53\x68\x4d\xb4\x00\x8f\xce\xab\
+\xd4\x4a\x38\xbc\x44\xb3\xb9\x2c\x48\x5e\x4a\x36\x15\x56\x6b\x86\
+\x03\x91\xa6\xb6\xf4\x32\x8c\xc9\xa6\xe0\xd7\x2b\xdb\x63\x2b\x9a\
+\x39\x13\x7c\xc8\x6c\x2b\x32\x31\x6a\xd6\xc3\xa4\x84\x24\x99\x18\
+\xaf\x33\x6a\xcd\x99\x32\x4c\xeb\xd1\x88\xac\xf2\x89\x77\x80\x37\
+\xdf\xc9\x17\xfe\xe2\x7e\x63\x51\x5b\x38\x2c\x46\x82\x29\x2d\x6f\
+\x84\xf4\xaf\x3d\xc3\xa4\xf0\xb1\xd1\x49\x6d\x98\x56\xcc\xca\x15\
+\xca\x8e\x46\xba\x70\xbd\x0a\xd2\x20\x8f\xe6\xa2\xb3\xe2\x9a\x58\
+\xfd\x0e\x40\xe9\x4e\x18\xd9\x00\xf3\x22\x37\xca\xd5\xd3\xf5\x19\
+\xc5\xaa\x83\xb5\x57\x18\xdd\x75\x85\x7e\x44\xd7\x1c\x62\x69\xf7\
+\x47\xbf\x9a\xad\x8b\x0c\x7d\xe8\x0d\x29\xf1\x84\xe8\xb0\xaf\xd4\
+\x9a\x53\xe3\xa4\x07\x41\x18\xed\x96\x8d\x87\x0f\xc8\x3b\xfd\x6a\
+\x42\xad\xf6\xaa\x9f\x6c\x97\xf1\xaf\xd0\x51\x2e\x32\x41\xba\xa3\
+\x0f\x6a\x36\x2c\x5b\x05\x63\x46\x91\xb4\x54\x17\xf7\xac\x8c\x4c\
+\xad\x2c\xcd\x2d\xaf\x7d\xd0\x73\x1d\xbb\xd6\x9a\x62\x20\x91\x1a\
+\x39\x03\x28\x75\xb1\xe9\x59\x93\xc4\x62\x90\xad\xee\xa7\xd2\x7a\
+\xd6\x79\x18\xb1\xc2\x70\xcb\x2c\xa6\x56\xf3\x46\x9a\xfb\x9e\x95\
+\xab\x9f\x30\x2a\xe0\x32\x9f\x84\xed\x59\x3c\x3b\x10\xd0\xc8\xc0\
+\x65\xcb\x26\xe0\xec\x4f\x7a\xd5\x4b\x32\x07\x5f\x49\xfc\x8f\x4a\
+\xd7\x0f\x05\x51\xc7\x41\xe0\x4a\x0a\xff\x00\x96\xfa\xaf\x6e\xd5\
+\xb1\x80\x98\x4f\x83\x47\xbe\xaa\x32\xb5\x52\xc7\x28\x6c\x03\xdf\
+\xe1\x21\x85\x07\xf8\x7e\x52\x27\x78\x4e\xce\xb7\x1e\xe2\xb5\x3a\
+\xa2\xf8\xd8\x8d\xb5\xb1\xa6\x83\xa5\x57\x06\xfa\xd3\x11\xb4\xae\
+\xac\x8d\xe9\x2f\xbd\x30\x9b\xd0\xb6\xba\x54\x95\xf1\x68\x1e\x02\
+\xa4\x68\x59\x7f\x5a\x51\x45\x40\x42\x22\xa8\xec\x2a\xcc\x80\x98\
+\xd8\x0d\xed\x71\xdf\x9d\x2d\xc0\x3a\x8d\x8e\xa2\xb1\x61\x55\x90\
+\x69\x6a\x5b\x69\x56\x1d\x75\xa4\xc8\xa4\x56\x69\x25\xa8\x1f\x4a\
+\x61\x14\xb7\x15\x84\x5b\x9d\x68\x68\xce\xf5\x0c\x2a\x32\x80\xef\
+\x43\xa5\xe8\x88\xd2\x84\xd4\x50\x68\x6b\x89\xa8\xbd\x1a\x93\x42\
+\xdb\x57\x72\xa8\x6b\x05\x2c\xcc\xaa\xa3\x99\x34\x20\x10\x2f\xb5\
+\x48\x69\x14\x59\x64\x70\x3b\x35\x46\x68\x7f\xf7\xd0\x7b\xd1\x32\
+\x90\x3b\x75\x07\x4a\x93\xbc\x57\x1b\x90\x7d\xd4\x1f\xda\x93\x24\
+\x78\x69\x2e\x24\xc3\x47\xee\x83\x29\xa3\x61\xce\x85\xa8\xa6\x14\
+\xd8\x4c\x13\x23\x28\x59\x10\x1d\xfc\xc1\x81\xf9\x50\xae\x0b\x09\
+\x75\x52\xf2\xca\x3e\x1c\xda\x11\xfd\x34\xeb\x50\xca\xa4\x02\x14\
+\x7d\xe3\x8f\x20\xef\xd6\xb3\x90\x99\x19\x48\x85\xa1\x85\x23\xe5\
+\xe9\xb9\xa3\xce\x24\x19\x65\x8e\x37\x1d\x0a\x8f\xda\x97\x23\x03\
+\x26\xfa\xf3\xf7\xa9\x43\xad\x86\xf5\xa0\xa7\xc5\x70\x89\x08\x59\
+\xa1\x2d\xe1\xb9\x37\x07\xe1\x3d\x2a\x90\xad\x4e\x35\x2a\xc7\x85\
+\x18\x60\xc0\xbb\x36\x67\x03\x90\xe5\x59\x43\x38\x37\xbe\x9d\xab\
+\x9f\x39\x34\xc3\x2d\xa5\x5a\xc3\x71\x0c\x4c\x4a\x13\x30\x74\x02\
+\xc1\x5c\x5c\x0a\xa6\xcc\x2e\x32\xde\xe3\xad\x19\x3a\x5f\x29\x17\
+\xa2\x74\xbd\x6b\xc5\x8a\x87\x17\x87\x92\x30\x9e\x1c\x85\x7d\x37\
+\xd0\xfb\x55\x58\xe3\x66\x6c\x80\x6b\xfa\x52\x38\x79\x61\x89\x89\
+\x81\xd4\xb8\xd6\xb5\xf1\x50\x09\x99\xd6\x18\xec\xaa\x7c\xe8\x3e\
+\x3d\x34\x1e\xdd\xab\xa4\xff\x00\x28\x3c\x5e\x6c\xad\xe4\x91\x03\
+\x0e\xa7\x7a\x54\xd8\x20\x7c\xd0\xb5\xff\x00\xa4\xef\x56\x05\x88\
+\x2d\x96\xc6\xe4\x10\x77\x16\xa9\xb7\x3d\x2f\x5d\x71\x86\x6b\x23\
+\x23\x65\x60\x41\x1b\x83\x51\x6a\xd2\x9d\x12\x58\xfc\xe8\x73\x5b\
+\x46\xb6\xd5\x9f\x30\x68\xc9\x52\x3c\xc3\x4b\x56\x6c\x6a\x22\xa4\
+\x0a\x08\xcb\xde\xe7\x5f\x7a\x60\x64\x04\x29\x0e\xcc\x75\x08\xa3\
+\x5a\x91\x98\x67\x68\x98\x32\x9b\x66\x60\xbf\xef\xe5\x5a\x3e\x81\
+\x68\xc5\xc1\xd7\x37\x36\xee\x6b\x32\xc7\x38\x67\x00\x65\xf4\x20\
+\x37\xd7\xa9\xab\x58\x09\xf4\xf0\xa4\x3a\x7c\x24\xf2\xad\x71\xa2\
+\xac\x80\x48\xe9\x5d\x62\x07\x5a\x3b\x5b\x43\x5d\x5b\x08\x16\x23\
+\x5d\x54\x8b\x1a\x46\x22\x29\xe6\x84\xc2\x02\xb8\x02\xea\xd7\xb1\
+\x27\xa5\x3f\x28\xde\xd5\x0c\x0a\xea\x9a\x1d\xed\x45\x4c\x09\x4b\
+\x47\x7f\xf8\x69\x49\x1c\x88\xfe\x2b\x94\x87\x85\x64\x00\x8b\xe8\
+\x47\x42\x2b\x5f\x88\x61\x9a\x71\xe2\xc1\xfe\x67\xc4\x2f\xbf\x71\
+\x54\x57\x0f\x2b\x4c\x10\xc6\x47\x8b\xdb\x98\xfe\x47\xe9\x5c\xef\
+\x1c\xad\x4a\xd2\xc2\x1f\x0f\x86\x21\x51\xb4\x45\x88\xeb\xad\x60\
+\x71\xa8\xc0\xc5\x78\xaa\x34\x70\x09\xf7\xb5\x7a\x0c\x53\x2a\xe0\
+\xce\x5d\xb2\x84\x51\x59\xfc\x6b\x0c\x17\xc2\x4b\x82\x64\x8c\xe5\
+\x27\xad\xf4\xfe\x29\xe7\x36\x08\xc4\xad\xd5\x7f\x17\x0f\x14\xa3\
+\xe2\x40\x0f\xb8\xac\x47\x5f\x2e\x70\x08\x04\x90\x41\xf8\x4f\x31\
+\x5a\x7c\x20\x93\xc3\x98\x1f\x86\x4d\x3e\x95\x8e\x3e\xe3\x55\x61\
+\x45\xc8\x02\xa4\xa9\xcb\x7d\x0d\xba\x1b\xd0\x48\xc5\x30\xee\xe3\
+\x70\x2c\x3e\x75\x21\x12\x28\xe3\x91\x17\xd3\x6c\xdf\xd4\x0d\x6c\
+\x3a\xb9\xb4\x15\x2c\x32\xb1\x1d\x2a\x18\x12\x45\xad\x61\xca\xf5\
+\x00\x15\x36\xd7\x5a\x19\x0a\xc7\x11\x76\x07\x28\x36\xd0\x53\x09\
+\x6c\xd9\x42\xeb\xef\x43\x32\x13\x86\x93\x31\xbf\x97\x6b\x54\x41\
+\x19\x49\x14\xb4\x6c\x0d\xb7\x16\xd4\x57\x65\xe9\x4a\xc1\xe1\xa4\
+\xc8\x25\x49\x42\x13\xe9\x16\xde\xac\x44\xfe\x20\x60\xcb\x96\x44\
+\xf5\x2f\xef\x44\xff\x00\xa8\x20\x75\x15\x24\x02\x2c\x45\xc5\x16\
+\x95\x1f\x5a\x51\x7f\x67\x66\x04\xa0\xcc\x2d\xa8\x1b\xd1\xe0\xb1\
+\x72\xe1\x9f\x2c\x77\x65\xb8\xcf\x13\x7c\x5e\xdd\x0d\x1c\x32\x34\
+\x52\x07\x4d\xc5\x5c\x9e\x1c\x3e\x2e\x21\x29\x05\x5b\x9b\x2f\x2f\
+\x7a\xa4\xfe\x2d\x51\xe2\x1c\x60\x3e\x58\x63\x8c\x04\x27\xef\x05\
+\x8d\xea\xd7\x03\x8f\x36\x29\x67\x43\x78\xd0\x5e\xff\x00\xb5\x4a\
+\x70\x9c\x37\xda\x04\xcd\x3b\x16\x03\x5f\x2e\xe7\xad\x5c\x8a\x35\
+\x89\x6d\x0e\x97\xd4\x92\x3d\x5e\xe2\xb5\x25\xdd\xa2\xe7\xc5\x85\
+\x24\x53\x01\xb8\xa4\x23\x66\x21\x6d\x95\xed\xe9\xeb\xdc\x75\xa3\
+\x0d\x63\xa9\xb5\x74\x60\xca\xeb\xd7\x02\x0d\x56\x9b\x14\xd1\x4a\
+\xc8\xf1\x03\x6d\x88\x3b\xd5\x6e\x25\x9b\xeb\x42\xe2\xde\x65\x17\
+\xe6\x54\x73\xf6\xef\x41\x87\xc4\x47\x30\xb0\xf2\xb7\xe1\x3c\xe8\
+\xf3\x6b\x56\xea\x29\x80\x6f\x4d\xc8\x3b\x11\x48\x11\xda\xf9\x97\
+\xe7\x56\x25\xba\x13\x2c\x6a\x48\xf8\xd0\x7e\xa2\xa1\xca\x90\x19\
+\x48\x65\x3b\x11\xce\x8b\x0c\x54\x91\x2d\xb5\x2d\x94\xf2\xb5\x5a\
+\x75\x06\x94\xc9\x58\xb0\xab\x32\x91\xc8\x7c\x8d\x03\xe6\x03\xd2\
+\x6a\xc3\x2d\xa8\x6d\x59\x4a\xb9\x81\xed\x42\xe5\x6d\xbd\x14\xb1\
+\x95\x6b\x5b\x4a\xe0\x05\xb6\x15\x34\x43\xb0\x1d\x6a\x01\xb8\xb8\
+\xd0\x51\xca\x97\x3a\x69\x4b\x54\x65\x3b\xdc\x56\x6a\x49\x02\xdb\
+\x5f\xde\x86\x50\x81\xa2\x76\x00\x05\x72\x09\xe9\x71\x44\x76\xae\
+\xd0\x82\xad\xaa\xb0\xb1\x15\x20\xc8\x5b\x35\x9c\x66\x1c\xc1\xd6\
+\x80\x8f\x08\xf8\x90\x6a\xa7\xd7\x1f\xf1\x44\x97\xcf\xe0\xbe\xac\
+\xa2\xea\xdf\x8c\x54\xae\x8c\x0e\x97\x15\x17\x2b\x24\xa9\x9e\x32\
+\x48\xe6\x08\xda\x84\xad\x74\x51\x04\xc4\x4d\x97\x45\x75\x0c\xa0\
+\x1e\xf5\x24\x74\x63\x42\x27\x15\x2b\x40\xea\x88\x80\x16\xb7\x9d\
+\x85\xc5\x31\x62\x60\xe5\x54\x34\x92\x36\xef\xcc\xfb\x76\xa9\x0c\
+\x1a\x3c\xb2\x00\x50\xee\x0d\x54\xe3\x12\xcd\x87\x85\x30\xb8\x7c\
+\x59\x8d\x59\x73\x12\x45\xcd\x8d\x17\xae\xd2\xd4\x91\x88\x96\xf3\
+\xba\xc6\xbd\xcd\xef\x55\x66\xe2\x49\x1d\xd7\x0a\xa4\x9b\x7a\xdf\
+\x97\xb5\x50\x88\xb1\xf2\xac\xcc\xe3\xf0\xcc\x74\x6f\x63\xca\xad\
+\xe1\x38\x78\x95\x81\x93\x34\x00\x9d\x15\xac\x4b\x7b\x56\x76\xdf\
+\x0a\xb2\xe6\x91\xaf\x62\xce\x4e\xbc\xcd\x5e\xc3\x70\xc9\x99\x33\
+\x4a\xcb\x08\x23\x4c\xda\x93\xf2\xab\xf8\x68\xe2\xc3\x8c\x98\x68\
+\x80\x6e\x6e\xda\xb7\xf6\xae\x79\x61\x56\x39\xe5\x24\x8d\xca\xae\
+\x6b\x7c\xe9\x9c\x27\xd1\xaa\x91\xf0\x60\xe4\x01\x8c\x4b\x9d\x00\
+\xc8\x75\xaa\x33\x06\x8e\x46\x8d\xac\x72\x92\x2f\xd6\xb7\xf0\xcd\
+\x1e\x51\x88\x0d\x78\xd2\xec\x49\x16\xda\xb1\x1c\x78\xd2\xb1\x03\
+\xd6\xd7\x03\xde\x9e\x5c\x64\xf1\x4a\x77\x02\x84\xcb\x8d\x0c\x7d\
+\x11\xf9\x9e\xb7\x20\x8c\x04\x90\xa9\xd5\xa4\xd7\xb5\xa9\x38\x5c\
+\x32\xe1\x30\x8b\x11\xf5\xb6\xb2\x69\xf9\x55\xc4\x06\xf9\x94\x8b\
+\x91\x62\x1b\x66\xe9\xec\x6b\x7c\x78\xe4\xc6\x6d\x42\x92\x54\x16\
+\x3e\x66\x25\x9b\xb5\xff\x00\xd8\xa9\x06\x93\x01\xcf\x96\x55\x1e\
+\x52\xa3\xf4\xb5\x36\xb4\x04\x0d\x74\xa8\x26\x8f\x21\xb6\x61\xe9\
+\x6e\x86\x86\xf5\x20\xd2\x99\xec\x0a\xb1\x07\x71\x52\x4f\xfc\x4b\
+\x8d\x8f\x82\xb6\xfa\xd5\xae\x20\x83\xc3\x38\x83\xb2\x0f\x38\xeb\
+\x58\xf1\x4e\xff\x00\x6b\x38\x86\x42\x55\xae\x0e\x9a\x5a\xb1\x7a\
+\x6a\x2e\x8a\x35\xa1\x4c\xae\x99\xa3\x60\xcb\xfa\x51\x8e\x94\xa6\
+\x86\x0a\x6f\x16\x3c\xac\x46\x75\x1a\x77\x14\xda\xce\x81\xcc\x72\
+\x87\x07\x63\x5a\x4c\x3c\xda\x6c\x75\x15\xb9\x59\xa9\xa8\x22\xa4\
+\x6d\x5c\x69\x45\x95\x2a\x6e\xbf\x4f\xe2\xa6\xe5\xd3\x29\x73\x66\
+\xd8\xf4\x3d\x68\x88\xa0\x65\x20\xdd\x34\x3d\x3a\xd4\x95\xe3\x49\
+\x65\xc4\x2a\x4a\xbe\x55\x62\x49\xb6\xfa\xd4\x7f\x88\xd4\xb6\x06\
+\x39\x47\xc2\xf6\x3d\xaa\xcc\x57\x08\x01\xb8\xae\xc6\x28\x7c\x04\
+\x88\xcb\x71\xa1\xac\xe7\x49\x82\xf8\x49\x64\x8f\xed\x09\x18\x39\
+\xc7\xde\xa0\xdd\xba\x30\xef\x56\xb0\x91\x78\x18\x35\x8c\x9b\xb3\
+\x9c\xe7\xf6\xa6\x66\x21\x81\x5d\x2d\xa5\xab\xac\x02\x15\x1b\x29\
+\xba\xff\x00\xa4\xff\x00\xb3\x58\x93\x1a\xd7\x05\x0e\x8c\x8c\x6c\
+\x18\x5a\xfd\x2a\xa3\x62\x4c\x70\x18\x0a\xdc\xdb\x2a\x91\xef\x56\
+\x74\xcc\x09\xda\xd5\x2e\xb0\xbc\xaa\xcd\x18\x62\x39\xd5\x40\x97\
+\x3b\x46\xac\xc1\x41\x65\x04\xde\xa0\x82\x39\xaf\xbd\xa8\x9d\xff\
+\x00\x2e\x54\x05\xa9\x4e\x1a\x0b\x0b\xf7\x35\x28\x03\x5d\x18\x68\
+\xc2\xc6\x82\xfa\xd7\x4a\xe6\x38\x19\xc6\xe3\x41\xda\xf5\x27\x46\
+\x2d\x87\x41\xcc\x5c\x7e\x74\x13\xab\xf8\xab\x88\x8c\xdd\x90\x79\
+\xd7\xa8\xa6\x40\x19\xf0\xf1\x04\x17\x25\x2d\xa7\x5a\xb5\x86\xc2\
+\x28\x23\xc6\x24\x96\xd3\x28\x36\xb5\xea\xcd\x4a\x6e\x41\x01\x94\
+\xdd\x58\x5c\x50\xd5\xfc\x3a\xe1\x9e\x20\x82\x38\x83\x47\x71\x66\
+\x3c\xaf\x4a\xc4\xc3\x87\x22\xf0\xc8\xa5\xbf\x00\xd6\x9c\x5a\xab\
+\x4d\xc3\xca\x62\x7b\xee\xa7\x42\x3a\xd2\xb5\x04\x82\x2c\x6a\x77\
+\x34\x16\x9c\x46\xf1\xa9\x06\xe0\xec\x68\xef\x54\xb8\x7b\xb3\x46\
+\x50\x1f\x49\x24\x03\xd2\xad\x8a\xdc\xac\x98\x32\xba\xe5\x71\x71\
+\xf9\x8e\xe2\x97\x2c\xb2\xc5\x20\x49\xc9\x92\x36\xd5\x5f\x98\xf7\
+\xa2\x5a\x62\x3e\x53\x72\x74\x3a\x1a\x50\xa3\x7f\x28\x2b\xe6\x1e\
+\xf5\xd8\x88\xd7\x11\x1f\xf5\x0d\x8f\xec\x6a\xbe\x2c\xf8\x0c\xb3\
+\xc4\x72\x82\x6c\x40\xf4\x9a\x6e\x16\x5f\x19\x4b\x65\xca\xcb\xbd\
+\xb9\x8a\xb7\xe5\x0a\x48\xae\xd2\x05\x4f\x55\xf4\xab\xe2\x56\x5b\
+\x2e\x23\xca\xc7\x66\xf8\x5b\xe7\xd6\x95\x2c\x46\x2c\x40\xc4\x47\
+\x72\xb7\xf3\x2d\xef\x6a\x6b\x32\x11\x63\x62\x0e\xd7\xe7\x54\x98\
+\x85\x72\x06\x61\xb7\x51\x49\x90\xe4\x6c\xcb\xa2\xc8\x6c\x47\x2c\
+\xdd\x6a\x56\x24\x56\xcc\x85\x93\xfd\x26\xd4\xbc\x44\x02\x4d\x4c\
+\xd2\x5f\x95\xf5\x15\x5d\x43\x06\xf4\x2f\x42\x09\x03\x5f\x50\x16\
+\x36\xd9\xbb\xd4\x92\x0a\xdf\xad\x04\x04\xde\x81\x85\x11\xde\x85\
+\xa8\x41\x61\xa5\x25\xc6\xb4\xe6\x34\xa6\x35\x94\x4c\x82\x96\x69\
+\xce\x39\x52\xd8\x6b\x53\x40\x61\x42\x45\x19\xa1\xac\xa2\xe7\x42\
+\xf1\x66\x53\x69\x22\xd5\x4f\xed\x52\xb9\x65\x8d\x65\x5d\x2f\xbd\
+\xb9\x1a\x35\xd1\xae\x39\x52\x9e\x19\x52\x63\x26\x1e\x40\x81\x86\
+\xa0\x9d\x8d\x45\xd3\x12\x98\xac\x39\x20\x9c\xca\x41\x15\xd7\x63\
+\x7b\x0f\x9d\x32\x30\x14\x16\xbe\x79\x1b\xd4\xe7\xf4\x1d\xa8\x58\
+\x00\x2e\x36\xe9\x42\x2c\x29\x1b\xd5\x4f\xf1\x08\x6f\x16\x27\x03\
+\xca\x63\x02\xfe\xd5\x7c\xed\x4a\xe2\x31\x78\xbc\x3d\xf6\xcd\x17\
+\x98\x1e\xdc\xe8\xb3\xa5\xac\xfe\x0b\x1a\xcb\x8e\x51\x20\xb8\x00\
+\x9b\x56\xb3\xbf\x8a\x32\xc9\xe9\xf8\x6d\xf0\xfb\x56\x67\x04\x36\
+\xc7\x82\x7f\x09\xfd\x2a\xfa\x99\x5d\xc8\x81\x63\xc8\x86\xc5\x9f\
+\x99\xa3\x87\x8a\x8d\x56\x76\x19\x67\x99\x5a\x3f\xe9\xf5\x37\x63\
+\x4d\x57\xd3\x2e\x55\xc9\xf8\x6d\xa5\x0a\xa9\x63\x94\x80\xaf\xbe\
+\x50\x6e\x1b\xb8\x35\xda\x83\x62\x2d\x5b\x05\x71\x29\x46\x1f\x02\
+\xd8\x54\x56\x19\x9a\xe0\xf2\x2a\x75\xa5\xff\x00\x87\xe2\x0d\x88\
+\x69\x98\x5d\x62\x17\x00\xf3\x3c\xa9\x9c\x63\xcc\x72\x58\xe9\x11\
+\x00\xf2\xba\x9f\xe2\x8f\x81\x9f\xff\x00\x1d\x25\xbf\xf7\x47\xe9\
+\x47\xff\x00\x47\xe2\xf0\x39\xef\x7e\x74\xd8\x90\x0f\x88\xe9\xa9\
+\xa4\x47\x47\x88\x7c\x98\x29\x9b\x63\x96\xc0\xf7\x35\xb6\x04\xa5\
+\x40\x01\x54\x01\xca\xc2\x8a\x92\x9a\x0f\x2e\x9d\xb9\x1a\x60\x61\
+\x60\x7a\xd4\x85\x7a\x91\x40\x0d\xe8\x85\x49\xd3\x58\xe0\xe6\x56\
+\x1a\x3a\x65\xff\x00\x7f\x4a\xa2\x80\xc5\x12\x46\x0e\xca\x2f\xde\
+\xae\x62\xce\x5c\x04\xff\x00\x89\x92\xca\x3b\xd5\x18\x24\x12\xc4\
+\xac\xcc\xaa\xca\x2c\xe0\x9b\x5a\xab\xe9\x89\xca\xab\x8b\x81\x96\
+\xca\x5e\xf9\x80\xd8\xd3\x4e\xf4\x99\xd1\xe6\x64\x31\xb0\x44\x4d\
+\x9c\xf3\xee\x05\x1f\x88\x43\x85\x94\x7a\x8d\x84\x8b\xb1\xf7\xa2\
+\x13\x2b\x4f\x0c\xd9\xb0\xc8\xda\x6d\x63\x59\x7b\x1b\x1d\xc5\x5f\
+\xe1\xcc\x0e\x19\x97\x9a\x9b\xd6\xb8\xfa\x29\xe4\xd7\x03\x51\x5d\
+\x5b\x02\xae\x35\xc2\xba\xa4\x1a\x92\x33\x44\xeb\xd5\x48\xa9\x22\
+\xba\x2f\x58\x1d\x74\xa9\x32\x69\x8b\xa8\xf7\x4d\xbd\x8f\xf7\xa8\
+\x98\x65\x91\x97\xa1\x22\xa0\xb8\x46\x88\x9d\x03\x12\xa7\xe7\x5c\
+\xcb\x98\xe9\x60\x37\xae\xf4\x8b\x57\x35\xd5\x85\xc5\xb7\xa1\x26\
+\xf5\x24\x31\xae\xd0\x2b\x33\x1b\x2a\x8b\x9a\x93\x50\x50\x3c\x61\
+\x0e\xcc\xd7\x3e\xc0\x5f\xf8\xa8\x82\x19\xe1\x95\xb2\xa1\x60\x79\
+\x06\xe7\x57\x70\xf8\x4c\xe8\x7c\x6d\x10\xfc\x36\xd4\xd0\x43\x85\
+\x18\x84\x0e\x55\x54\x21\xf2\x5b\x4f\x95\x5b\xc3\xc8\xef\x9d\x25\
+\x5b\x3c\x7c\xfa\x8a\x64\xfe\x8b\x5d\x0c\x71\x61\x80\x48\x97\x2c\
+\x6f\xb1\x26\xe5\x5b\xdf\xbd\x17\xa5\xae\x46\xa0\xd4\x92\x2c\x41\
+\x17\x07\x71\xd6\xa2\xc4\x28\x55\x90\x10\x3f\x1a\xdf\x4e\x97\xde\
+\xb6\x19\xb8\xf8\x72\x62\x2c\xb7\x21\xc5\xc5\x0e\x59\xb0\xd2\xab\
+\xb2\x15\x23\x51\x71\x57\xd2\x39\x3c\x7f\x1a\x56\x4b\x80\x42\x2a\
+\xeb\x6a\x31\x7b\x65\x36\x20\xee\x0e\xd5\x9c\x3a\xcb\xc5\xe2\x13\
+\xc4\x0e\xf1\x39\x32\x0b\xf9\x0d\xea\x22\x78\xe5\x04\xc6\x4e\x61\
+\xba\xb0\xd4\x53\xf8\xb8\x5c\x2c\xb0\xcf\x1a\xdd\x42\x90\xca\x0e\
+\xab\x7a\xcd\x77\x93\x11\x8e\x0f\x87\x52\xad\x6e\x7f\xa9\xac\x5b\
+\x94\xc5\xfc\x1b\x14\xc4\xa9\x02\xe0\x9b\x69\x57\xa3\xf1\x33\x9b\
+\xdc\x0e\xf5\x47\x0e\x59\x5d\x5a\x50\x8d\x62\x09\x68\xf9\x7c\xab\
+\x51\xc7\x98\x90\x41\x5b\xe8\x45\x6f\x88\xa1\x19\xba\x8f\xa5\x12\
+\xb6\xe0\x8a\x8a\xe5\xf5\x8f\x7a\xd0\x06\x28\x2c\xa5\x70\xcb\xa1\
+\xbd\xd8\x81\xb5\x33\x0f\x14\x31\xae\x58\xc3\x2b\x1d\xc9\x35\x53\
+\x0d\x37\x87\x8d\x71\x29\x23\x35\xc1\x35\x70\xd8\xe8\x75\xf6\x34\
+\x4f\xea\x10\x72\x0d\x8e\xff\x00\xad\x0e\x89\xa0\x07\xc3\xfa\xe4\
+\xfe\xd4\x19\x6e\xc7\x33\x1d\x0e\x95\x20\x10\x74\x66\xa5\x08\xf9\
+\x40\x20\xdd\x08\xd0\x8d\xa8\x58\xd0\xc8\x59\x15\x98\x05\x2a\x7d\
+\x63\xf7\x15\xce\x6c\x05\x8d\xc1\xd8\xf5\xa9\x21\xbd\x54\x27\x7f\
+\x7a\xe6\x3a\x7b\xd0\xb1\x36\xd3\x71\x59\x4e\x34\x2d\x44\x35\x17\
+\x1b\x50\xbd\x15\x16\xc7\x7a\x07\xda\x88\xef\x40\xf4\x20\x9a\x17\
+\xa2\xa1\x6a\x9a\x03\x0a\x13\x47\x42\x45\x15\x06\xd5\xc4\x03\xa5\
+\x49\xd0\x57\x0c\xdd\x85\x08\x20\x11\xa0\xd4\x54\x10\x49\xd6\xd6\
+\xa9\x62\x46\xeb\xf4\xa3\x58\x99\x97\x35\xac\xb6\xf5\x1d\x05\x48\
+\xa5\x60\xd5\x18\x86\x58\xb0\x92\xbb\x91\xe6\x52\xaa\x0f\x33\x4a\
+\xc4\x62\x20\xc3\x7c\x42\x57\xe4\x14\xe9\xf5\xaa\x38\xa9\xe7\xc5\
+\x38\x0e\x6f\xaf\x95\x40\xd2\xb3\x79\x61\xc1\xf0\x78\xd9\xf1\x7a\
+\x72\x46\xb9\xe9\xa5\x68\xc2\x99\x21\x64\xb5\x8a\xc9\xaf\x7b\xed\
+\x43\x81\x80\xe1\x70\xc5\x5a\xde\x24\x9e\xa1\xd0\x53\x88\x62\x33\
+\xa2\xe6\x60\x2c\xcb\xf8\x87\xf2\x29\xe3\x32\x2b\x43\xe5\x65\xc8\
+\xe2\xeb\x7f\x98\xf6\xa9\x80\x3b\x19\x22\x63\x9a\x48\x9a\xda\x6e\
+\x45\x28\xca\x89\xe6\x6c\xe0\x77\x4b\x52\x10\xc9\x89\xc7\xb1\x52\
+\x63\xce\x6e\x48\x3b\x0a\xb5\x62\xdf\x12\x2a\x20\x45\x76\xca\xea\
+\x49\x23\xaa\xda\xc6\xff\x00\x2d\x7e\x55\x5f\x81\x4e\x23\x99\xb0\
+\xf2\x1b\x24\x9a\x7b\x1e\x55\x6e\x18\xa0\x89\x83\x14\xce\x79\xb3\
+\x9d\x4d\x63\x71\xbc\x46\x27\x09\xc5\xa5\x82\x19\x59\x62\x43\x74\
+\x17\xe5\xca\x8e\x5d\x76\xa7\xf1\xbc\x64\xcb\x70\x07\x9a\xfc\xc6\
+\xd4\x67\x58\xd5\x5c\x96\x56\x7b\x9b\x74\x03\x5f\xda\xab\xae\x35\
+\x25\x8e\x27\x92\x36\x66\x96\x30\xc0\x82\x2f\xd3\x5f\xa5\x58\x52\
+\xe0\x16\x75\xc8\x58\x65\x55\xe6\xa3\xbd\x74\x96\x56\x52\xba\x0a\
+\xeb\xdb\x6d\xb9\x8a\x59\x6b\x30\x1c\x88\xa9\x27\x43\x52\xc3\x97\
+\xda\x8a\xe1\x53\x33\x9b\x2f\x7a\xab\x2c\xa2\x30\x19\xda\xec\x46\
+\x8b\xfc\xd5\x77\x9a\x49\x48\x32\x1d\x46\x80\x0d\x80\xa3\x62\xc3\
+\xa6\x99\xa5\x92\xe3\x45\x1b\x0e\x94\x24\x86\x3e\x75\x56\x3d\xc5\
+\x2c\x1a\x2b\xd1\xa4\x45\xae\x75\xa0\xc6\x10\x30\x4f\x7e\xa2\xde\
+\xf4\x57\x19\x80\xe6\x6a\x9f\x13\xc4\x23\x48\xb0\xa9\x39\x57\x9f\
+\x22\x6a\xb7\xa5\x17\x60\x72\xf8\x68\xdd\x8d\xc9\x1a\x9a\xbb\xc2\
+\x5b\xef\x99\x09\xf5\x2e\xdd\x4d\x64\xf0\xb7\xf2\x3c\x6c\x74\x1a\
+\x8b\x9a\xb9\x0c\x85\x5c\x3a\x5e\xe3\x9e\xd5\xae\x35\x56\xbe\xbc\
+\xaa\x6c\x29\x65\x54\xd9\x94\xe8\xc2\xe0\xde\x89\x43\x03\x7c\xd5\
+\xd1\x91\x8a\x9a\x81\xa8\xb8\xa9\xa9\x22\xbb\xbd\x71\xae\xa9\x28\
+\xf1\x24\xcb\x89\x2d\xc9\xf5\x15\x5d\xd1\x64\x88\xc6\xe6\xc0\xea\
+\x0f\x43\x5a\x18\xf4\xcf\x86\xcc\x37\x8f\x5f\x95\x67\xd6\x39\x4e\
+\xcc\x20\x26\x36\x26\xf2\xdd\xd5\x76\xd6\xe0\xd3\xc3\x23\xb9\x0a\
+\x0a\xb8\xdd\x1b\x7a\xe3\xa8\xf9\xd0\x63\x43\x18\x44\xab\xeb\x8d\
+\xb7\xea\x2b\x3e\x11\xda\xf4\xd8\x21\x69\x65\x65\x03\x45\xb2\xdf\
+\xa7\x33\xfb\x7d\x2a\x93\x62\xe7\xd1\x44\x4a\x19\xb4\x0d\x6a\xd9\
+\xe1\xd1\x78\x58\x04\x51\xab\x90\x4b\x9d\xf5\xa7\x8f\x74\x51\x80\
+\xaa\xa1\x14\x59\x57\x6a\xed\x06\x20\x72\x2f\x1f\xd6\xc6\xa4\x82\
+\x37\x04\x50\x49\xa6\x2b\x0c\x7b\x91\x5d\x00\x8e\xd4\x35\x26\xd6\
+\x24\x9b\x00\x2e\x4f\x4a\xa3\x89\xe2\x45\x5e\xd0\x22\x65\x1f\x13\
+\x0b\x93\x45\xb2\x25\xda\xe1\xa9\xb5\x56\xe1\xf8\xdf\xb4\x4a\x21\
+\x95\x50\x33\x7a\x59\x45\xb5\xe9\x6a\xb2\x18\x28\x2e\x4d\x82\x82\
+\x6f\x54\xb2\xa5\x0e\x34\x7c\x44\x9d\x41\x16\x4b\x58\xf5\x02\x93\
+\x1c\x6b\x04\x62\x34\xdc\x80\x59\xb9\x9a\x94\x39\x99\xcb\x5a\xc5\
+\x49\x6b\xed\x40\xaf\xe2\x43\x1c\x82\xc7\x32\xeb\x6e\xda\x56\x3e\
+\xeb\x46\x43\xa4\xab\xee\x2b\x46\x42\xb0\xe2\x80\xd5\x63\x92\xe0\
+\xf4\x06\xa8\x60\x54\x3e\x32\x35\x61\x70\x5a\xaf\xe2\x54\xc9\x87\
+\x71\xf1\x0f\x30\xd2\xb5\x3c\x14\x6c\x08\x36\x3c\xab\x85\xb5\x63\
+\xb2\x8b\x9a\xa7\x1e\x2e\x61\x95\x06\x56\x3b\x00\x56\xe6\x9b\x8a\
+\x13\xb4\x2a\xc5\x95\x90\x1b\xba\xa0\xb5\xbd\xe9\xd0\x08\xf0\xc6\
+\x60\x66\x95\xca\x97\x24\x81\x6a\xb6\x00\x3e\x5b\x82\xca\x35\xbe\
+\xf5\xce\x41\x20\x8f\x49\x1e\x5f\x6a\x16\x8d\x1e\x65\x94\xb3\x06\
+\x51\x6f\x2f\x3a\xb1\x05\x1a\xc4\x8b\x12\x29\x9b\xeb\x41\x89\xb7\
+\xa8\x69\x73\xad\x44\x4c\x72\xdb\x29\x20\x73\x15\x21\x5e\xc6\x84\
+\x00\xb9\xd1\x76\x04\x38\x16\xd8\x1a\x92\x45\xed\x7d\x68\x26\x57\
+\x62\xad\x1b\x5a\x44\xd0\x03\xb3\x0e\x95\x54\x82\x68\x49\xa5\x7d\
+\xad\x09\x2a\xf0\xb0\x6b\xec\xa6\x8f\xc4\x87\xf1\x38\xee\xc8\x40\
+\x15\x9d\x43\x24\x8b\xb5\xc1\x52\x06\x9d\x08\xff\x00\xcd\x09\x52\
+\x76\xd6\x85\xf1\x18\x74\xff\x00\x98\x58\x8e\x40\x68\x7e\x75\x4a\
+\x58\xf1\x0e\xc6\x61\xa6\x6d\x40\x07\x51\x55\xa7\x16\xa4\xb2\x30\
+\x56\x04\xb3\x6c\xa3\x7a\x16\x23\x36\x42\xa5\x09\xf4\xdc\xdc\x37\
+\xce\xab\x0c\x54\x58\x58\x8e\x70\x5e\x56\xe5\x7f\xd6\xb9\x38\x84\
+\x33\x44\xe9\x24\x45\x34\x26\xe0\xdc\x0a\xce\xac\x3c\x8b\x1b\x1a\
+\x83\x41\x0c\xa1\x80\x49\x18\x6b\xe8\x93\x93\x0a\x36\x04\x0b\xee\
+\x3b\x6b\x49\x06\x80\x16\x3b\x28\xb9\xaa\xd8\x7c\x53\xc9\x89\xc9\
+\x27\xa1\xcd\x80\xfc\x35\x65\xf2\xb4\x4e\xa4\xd8\x32\x91\x7e\x95\
+\x99\x2e\x1e\x78\x4e\x7f\x84\x1f\x50\x3a\x56\x79\x69\x8d\x09\x06\
+\x51\xdc\x1a\xe1\x72\x2e\x45\xa9\x31\xe3\x22\x68\xc3\x4a\xcd\x9c\
+\x0b\x1b\x0d\xe9\xb0\x49\x2c\xaa\x1d\x63\x8e\x38\xfa\xb6\xa5\xa9\
+\xd0\x0c\x7c\xc7\x0d\x84\x56\x50\x0b\xbb\x58\x5f\x5b\x0a\xc9\x96\
+\x59\x24\xbe\x77\x2d\x7d\xee\x6b\x5b\x89\x2b\xbe\x04\x93\x87\x8d\
+\xb2\x38\xb5\xa4\xeb\xde\xb2\x64\x31\x89\x04\x72\x2b\x42\xcd\xe9\
+\xb9\xba\x9f\x9d\x73\xe7\xe9\x85\xac\x2d\x2c\x81\x62\x42\x49\xe5\
+\x5b\x38\x2c\x32\x61\x63\x1b\x3c\xbc\xd8\x8d\xbd\xa9\x7c\x16\x33\
+\x16\x1e\x49\x34\xcc\x5b\x28\xed\x4f\x7b\x8d\x47\x3a\x78\xcc\xed\
+\x54\x9d\xf5\x3a\x9a\x9f\x6a\xe5\x51\x6d\x45\xfb\xd7\x59\xbb\x56\
+\xc0\x96\x47\x3e\x5d\x5a\xdc\x9b\x51\x55\xe7\x88\x41\x8f\x8d\x97\
+\x28\x0f\x6b\xad\xce\x9d\x45\x3e\x30\x55\xee\x0d\xef\xbf\xf3\x54\
+\x4a\x48\xb8\xc0\xa4\x33\x30\x6d\xba\xd1\x4c\x5f\x58\x4a\xcd\x96\
+\xf7\x0a\x4d\xcf\x40\x2b\x17\x8d\x83\x8f\xe3\xea\xb1\x82\x04\x81\
+\x7e\x55\xa3\xc5\x78\xb6\x0e\x0c\xf0\xa5\xe4\x91\xbf\xcc\x03\x61\
+\xda\xaa\xe1\x63\x68\x10\xe2\x26\x00\x62\x27\xd4\x0b\xea\x8a\x6b\
+\x3c\xb2\xf4\xa2\xfe\x04\xab\x63\xce\x50\x32\xa4\x64\x2e\x9d\x06\
+\xf5\x64\x58\xef\x54\x78\x41\xff\x00\x89\x6f\xfe\x36\xfd\x2a\xe0\
+\x35\xae\x3e\x0a\x00\x33\x35\xce\xc3\x6e\xf4\x5e\x55\x46\x76\x1e\
+\x55\x17\xb7\x53\x45\x90\xa9\x0a\x75\x3f\xad\x56\xe2\x32\x02\xc2\
+\x25\x20\x85\xde\xdc\xcd\x37\xa4\x44\xae\xd2\x39\x66\x37\x26\xb8\
+\x54\x0a\x90\x2b\x0d\x0d\x4d\xa9\x80\xd2\x41\xb5\x4e\x6a\x74\x60\
+\xb1\x12\x98\x85\x94\x5d\xdc\x59\x47\xef\x54\x1b\x09\x89\x92\x75\
+\x41\x13\x0d\x37\x23\x41\x57\xdc\xf9\xe6\x6b\xf9\xae\x32\xf5\x0b\
+\x6d\x28\x92\x46\x0b\x94\xb1\xef\xad\x16\x6a\xd0\x88\xca\x20\x45\
+\x4d\xb7\x6e\xb4\xf0\x75\xa0\x0d\x44\x0d\x6e\x05\xac\x1e\x27\xc3\
+\x19\x1c\x5d\x39\x5b\x71\x5a\x09\x62\xb9\x94\xdd\x7a\xd6\x3a\xd3\
+\x60\x95\xe2\x37\x46\x23\xb5\x6a\x51\x8d\x45\xd3\xdb\xf4\xa2\x1b\
+\x8a\x46\x1f\x15\x1c\x9a\x3f\x91\xbf\x23\x4e\x22\xde\xd5\xb8\x04\
+\x45\xe8\x48\xa2\x5d\xaa\x6d\x7a\x40\x2d\x7d\x0e\xaa\x74\x22\xb3\
+\x71\x31\x18\xa5\x2b\xcb\x91\xeb\x5a\x85\x74\xa0\x91\x12\x44\xcb\
+\x20\xb8\xe5\xd4\x56\x6c\xd3\x2b\x2f\x99\xed\x52\x85\xaf\x65\xd4\
+\x9a\xb8\xd8\x38\x80\xb8\x77\xbd\xf4\xd2\x9d\x1c\x51\x45\xe8\x5d\
+\x7f\x11\xde\x8f\xcd\x3a\xa7\x88\x85\xd2\x14\x91\xf5\x60\x79\xfc\
+\x34\xcc\x2c\x4e\x22\x25\xdd\x95\x5b\x65\x06\xd7\xa7\xcc\x03\x64\
+\x8d\xbe\x23\x98\x8e\xc2\x86\x47\x24\xf7\xab\x02\x02\x5b\x44\x96\
+\x45\xf9\xde\x97\x1c\x32\x7d\xa5\x64\x92\x5c\xc1\x75\xbf\x3a\x2c\
+\xda\x5c\x9a\x25\x34\xa2\xf8\xab\x95\xc0\x1b\x7f\xcc\x6b\x56\x39\
+\x17\xda\xb6\xb1\xe9\xe2\xe0\x1d\x46\xe9\xe7\x15\x8c\x6b\x1c\xfd\
+\x31\x38\x42\xcb\x8a\x8d\x94\x90\x43\x8d\x6b\x6b\x88\x9c\xb0\xcd\
+\x61\xb9\xcb\xf9\xd6\x18\x62\x08\x23\x71\x5b\x78\xe1\x9f\x08\xc4\
+\x10\x6e\xaa\xd7\xbe\xfa\x6b\xf9\xd5\xc7\xca\xaf\xac\xb2\x85\xe0\
+\x96\x30\x45\xd9\x0d\xbf\x5f\xda\x87\x0e\x99\x70\x71\x03\xcc\x16\
+\x16\xe8\x69\xd1\x30\x52\x58\xe8\xa1\x4d\xc9\xe5\xa5\x09\x37\xca\
+\xb6\xb1\x08\x05\xbe\x55\x13\x78\x71\xb6\x36\x22\xd6\xdf\x7a\xd2\
+\xbe\x53\x73\xcb\x7a\xc9\x43\x96\x45\x27\x91\xb9\xad\x49\x08\x63\
+\x9b\x93\x6b\x5a\xe2\x2a\xa3\xdb\x0d\x8f\x59\x00\x39\x0b\x66\x1e\
+\xd5\x61\xb1\x10\xa4\x6c\x43\x86\x26\xf6\x51\xce\xf4\x18\xb4\xcd\
+\x11\x1b\x91\xaa\xf5\x15\x45\x2d\x9d\x73\x6d\x7e\x74\x78\x9a\x58\
+\x5c\xdf\x64\x8f\x36\xfa\xdb\xda\x8a\xe6\xf6\x16\xbf\x7e\x54\x33\
+\x92\x24\xb2\xb5\x94\xed\xd8\x57\x0b\x28\xb0\xf9\xd6\x82\x58\x66\
+\xf5\x12\x7d\xb4\xa9\x16\x0b\x61\x43\x9a\xa4\x1b\xd4\x9c\xe7\x63\
+\xd0\xd0\xb0\x37\xbd\x49\x60\x7c\xa3\x73\xa5\x11\xb0\x1a\x9b\x7b\
+\xd4\x80\x59\xaf\x7d\x01\xeb\x6d\x7e\xb5\x05\xd8\x0f\x33\x5c\x73\
+\x07\x51\x52\x59\x3a\x8e\xe7\x61\x49\x9f\x11\x85\x45\x39\xde\x4d\
+\xb4\xfb\xb2\x2f\xf3\xa1\x2a\x71\x18\xd5\x66\x53\x10\xb8\x93\x60\
+\x39\x1a\x64\xb8\x94\x8a\x20\xcb\xe6\x90\x2d\x89\xbf\x95\x2c\x39\
+\x9a\xab\x89\xc6\x99\x2f\x1a\xa6\x44\xe5\x66\xd4\xfc\xeb\x37\x1d\
+\x02\x2a\xc7\xe1\x33\x2a\xc8\xd6\x2a\x5a\xff\x00\x3a\xe7\x79\x67\
+\x8d\x48\x63\xa9\x99\xcb\xa4\x89\x2b\x1d\xf2\x9b\xd0\xba\xb4\x78\
+\x69\x8b\xa9\x19\x93\x28\xb8\xb5\xc9\xa3\xc9\x0c\x0f\x91\x20\x43\
+\x94\xd8\xb1\xbd\xcd\x41\x2a\xba\xac\x44\x13\xb1\x72\x5b\xe9\x7a\
+\xcb\x48\xe1\xe2\x4c\x3c\x19\x27\x70\x50\x9b\x15\xdc\xa5\xf6\x35\
+\x77\xc3\xc4\x61\xe3\xf1\x95\xac\x2f\x6b\x75\xaa\x31\x0f\x10\xbc\
+\x6d\x7f\x3a\x9b\x9b\xfc\xe9\xff\x00\xe1\xe9\xc6\x30\x0c\x3c\xcd\
+\xe6\x88\x5d\x6e\x7d\x42\xa9\xfc\x15\x78\xd9\x91\x58\x8b\x07\x50\
+\x48\xe9\x42\x9e\x47\x22\xe3\x5e\xb4\xd9\x83\x03\x66\x16\x3d\x29\
+\x6c\x9d\xf5\xae\x81\x5e\x7c\x28\x7c\x75\x94\x05\x52\xa1\x9b\xb5\
+\x58\x36\xb0\x55\x16\x55\x16\x15\x28\xa0\x48\x0d\xcd\xda\x36\xbf\
+\xc8\x8b\x7e\xf5\xce\xcb\x04\x46\x69\x6c\x00\xf4\x83\xf1\x1a\x27\
+\x49\x5b\x8c\xb8\x8f\x06\x20\xbf\x9a\x43\x98\x8e\xd5\x9b\x2c\x26\
+\x60\x98\x7b\xfa\x48\x77\x62\x3d\x3d\x05\x14\xaf\x26\x27\x11\x99\
+\xdb\xcc\xc6\xde\xd5\xab\x81\x81\x53\x0e\x31\x0e\xbe\x77\x76\x65\
+\x53\xf9\x13\xf2\xae\x7f\xed\x4f\x82\x0a\x23\x88\x26\x97\x3e\x66\
+\xb5\x75\xaf\x44\x41\x2d\x73\xa9\x34\x4a\x2d\xef\x5d\x70\x01\x12\
+\xc6\xf7\xd3\xa5\x11\x14\x56\xae\xa9\x04\x21\x24\x00\x09\x27\xa5\
+\x54\xe3\x73\x5b\x0c\xeb\x86\x65\x33\xc6\x9f\x78\xc3\x9a\xf4\x1e\
+\xd5\x67\x1f\x2b\x41\x81\x2c\x9a\x34\x8d\x92\xfd\x05\xab\x37\x05\
+\x1f\x8d\x21\x42\x33\x07\xd1\x87\x51\xbf\xec\x07\xce\xb3\xca\xfc\
+\x30\x8f\xf0\xde\x03\xc5\xc5\x7d\xa7\x14\xb6\x46\x6f\x28\x27\x57\
+\x35\xb4\xf1\x45\x33\xf9\xb0\xeb\x72\x7e\x0d\x0d\x09\xc2\xb7\x88\
+\xae\x31\x08\x85\x3d\x2a\xaa\x6c\xbd\xab\xa6\x4c\x63\xbe\x51\x2a\
+\x88\xce\xec\xa2\xc2\x8e\x33\xf3\x33\x15\xba\xad\x12\x18\xf8\xa0\
+\x8e\x27\x06\xcf\x60\x6a\xe3\x6a\xc7\x2e\xd7\xd2\x97\x1e\x12\x34\
+\x90\x3c\x53\xb2\xba\x9b\xdd\xd7\x4f\xca\x98\xd2\xb4\x6c\x7c\x40\
+\x8e\x83\x76\x45\xca\x57\xe5\x4c\xe8\x16\x71\x1e\x1e\x0d\x2d\x6f\
+\x13\x2d\x87\x61\xfc\xd5\x46\x94\xa6\x2e\x38\x40\x41\x9c\x02\xcc\
+\xc2\xfb\xd5\x63\xc4\x30\xb8\x62\x13\x19\x88\x46\x3b\xd9\x63\x24\
+\x8d\x7a\xd0\xe3\xf1\xb8\x39\x22\x47\x11\x4a\x1d\x96\xe1\xae\x34\
+\x1c\x85\x66\xf2\xff\x00\xad\x62\xfc\x8c\x06\x29\x60\x70\x2e\xe2\
+\xea\x42\x80\x54\xf7\xa0\xbd\x67\xe0\xb1\xf8\x48\xdb\x34\x89\x2b\
+\x39\xd0\x35\xc6\x95\x64\x62\xb8\x7b\x35\x97\x18\xc2\xfb\x66\x8c\
+\x80\x3d\xcd\x13\x94\xa8\xeb\xd7\x5e\x83\x36\x1f\xff\x00\xe7\x61\
+\xbf\xef\xfe\xd4\x48\x82\x40\x7c\x19\xe2\x97\x5d\x91\xbf\x9a\x50\
+\xc3\x31\x65\xcb\x6c\xc0\x11\xae\xcc\x3a\x54\xab\x44\xf6\x2b\x2a\
+\xad\xfe\x16\xdc\x52\xb5\x56\x01\xb4\x20\xd3\x16\x57\x1a\x83\xaf\
+\x5b\x6b\xf5\xa8\x05\xf1\x29\x19\xb2\xc3\x23\x0e\x6c\x45\x85\x58\
+\x56\x0c\xa1\xd0\x92\xad\xb1\xa5\x09\x5f\xf1\x93\xf3\xa9\x8e\xc0\
+\xdd\x0e\x42\x4e\xb6\xd5\x4f\xb8\xa6\x2a\x78\x34\x6a\x69\x2a\x7c\
+\xd9\x48\xca\xc7\x61\x7b\x86\xf6\x34\x52\xc8\x21\x8f\x3c\x8a\xc7\
+\x5b\x58\x69\x5a\xd0\x70\x37\xab\x38\x4c\x51\x8c\x64\x71\x99\x7d\
+\xf5\x15\x4e\x09\x23\x99\x43\x44\xc2\xfc\xd5\x8e\xa2\x9b\x91\xaf\
+\xcb\x5e\x57\xa6\x54\xd4\x56\x05\x43\xa1\xba\x9a\x35\x70\x45\x67\
+\x60\x24\x29\x88\x08\x76\x6d\x08\xab\xbb\x1b\x8a\xdc\xac\xd8\x63\
+\x1d\x28\x76\xa8\x56\xbd\x71\x34\xa0\xb9\x6c\xe0\x1f\x4d\xea\x24\
+\x9a\x14\x62\xae\xe7\x30\xdc\x01\x45\x7b\x29\xbf\x4a\xce\xc2\xc6\
+\x65\x66\x67\xf3\x2a\xeb\x6e\x67\xde\x8b\x52\xea\x31\x75\x32\x95\
+\xb1\x7b\x65\xec\x05\x2d\x8d\xc9\x00\xd4\xa1\x24\x90\x4f\xf6\xa0\
+\xcc\x10\x1b\xee\x0d\x15\x25\x88\x28\x00\x3b\xd1\x03\xad\x21\x49\
+\xce\x0f\x7a\x60\x27\xa5\x11\x2c\x42\xc2\xfa\xec\x74\x3e\xc6\xb1\
+\x31\x89\xe1\x62\x5e\x3f\xc2\x48\xad\x68\xc9\x3e\xe4\xda\xb2\xf8\
+\xc3\x2b\x71\x19\x8a\x9b\x8c\xd4\x72\xf0\xf1\xf5\x5e\xf5\x73\x07\
+\xc4\x0c\x71\x78\x32\xa0\x74\xd8\x1e\x6a\x2a\x8d\xcd\x1e\x1f\x0f\
+\x34\xe6\xd1\xa5\xc7\x53\xb0\xac\x4b\x67\x8d\x55\x9c\xd0\xb3\x08\
+\xcb\xe4\xcb\x62\xca\xfa\x66\x27\x61\x7e\x95\x0e\xcc\x65\x21\xd4\
+\x8b\xeb\x73\xce\x87\x89\x70\xb7\x91\x51\xc4\xd1\x99\x32\x65\x65\
+\x23\x47\xb6\xc2\xfc\xa9\x38\x61\xc4\x70\xa9\x67\xc2\x46\xd1\x74\
+\x12\xde\xfe\xd7\xa7\x6e\xf6\x16\x01\xab\xfc\x3e\x6c\xf1\xf8\x2d\
+\x6b\xaf\xa3\xbf\x6a\xce\x8f\x11\x85\x90\xd9\xcb\xe1\xdf\xa3\xa9\
+\xb5\x19\x93\x0c\x84\x13\x8c\x86\xfc\x80\x7b\x7e\xb6\xad\x4a\x9a\
+\xc0\xd8\x82\x37\x06\x96\xf8\x6c\x33\x36\x6c\xac\xb7\x37\x21\x4e\
+\x87\xf8\xa4\x47\xc4\xb0\xf2\x58\x11\x63\xd4\x87\xf3\x7b\x1b\x5a\
+\x8f\xed\x98\x5b\x5e\xed\xed\x63\x7f\xa5\xab\x5b\x19\xca\x73\xaa\
+\x93\xd3\x4b\x6f\x51\xcb\xb8\xa5\x2e\x26\x16\xbd\x96\x40\x06\xec\
+\x08\x36\xa1\x97\x13\x02\x59\xbc\x4c\xf7\xdc\x2e\xf5\x6c\x47\x0a\
+\x25\x22\x90\xb3\xc6\xe2\xe8\x49\x1c\xef\xb8\xa3\x92\x68\x61\x8b\
+\xc4\x95\xec\x0e\xca\x06\xa6\xad\x46\xb1\x5f\x9f\x6a\x8b\x80\x6f\
+\xcf\xa9\xac\xe9\xb8\xab\xe6\xfb\x98\xa3\x55\xfe\xa1\x72\x6b\x93\
+\x8a\x3d\x8f\x89\x04\x6f\xd2\xde\x5f\xd2\x8f\xd4\x39\x57\xa5\x62\
+\xaf\x98\x12\x3b\x8a\x57\x15\x7f\x17\x86\xc8\x49\xb9\x0e\xb9\x6f\
+\xb8\xaa\xe7\x89\x86\x5b\x7d\x95\x07\xfd\x66\x93\x8a\x9e\x4c\x51\
+\x16\x50\xaa\xa3\xd2\x0e\x9e\xf4\x5e\x53\xe2\x92\xaa\x85\x2c\x40\
+\x1b\xdc\x55\x9c\x16\x08\xe2\xe4\x13\xb0\x0b\x1c\x77\x11\xe6\x1a\
+\x7b\xf7\xa8\xc2\x44\xcf\x32\xf8\x56\x77\xbe\x83\x5b\x03\xdc\xed\
+\x5a\xcf\x00\x8e\x34\x89\x1a\xe2\x35\x03\xdc\xf3\x35\x9e\x3c\x74\
+\xda\x4a\x43\x87\x87\x58\xe2\x52\xc3\xe3\x71\x72\x6b\x9a\x42\x56\
+\xed\x1a\xb2\x5b\x62\xa2\x89\xa3\x76\xdc\xfd\x68\x5a\x0d\x34\x6a\
+\xdb\x2c\xfc\x7e\x13\xec\xee\x31\x10\x8c\xd1\x13\xa8\xfc\x3d\xab\
+\x23\xec\xf3\x41\xc4\x55\xa1\x52\x54\xb5\xd5\x80\xe5\x5e\x9d\x15\
+\xd4\xda\xde\x52\x3c\xc1\xb6\x34\xac\x46\x02\x27\xb9\x86\x66\x86\
+\xff\x00\x0e\xb9\x6b\x1c\xb8\x6f\x8d\x4e\x4c\xd6\xc6\xe2\x61\x93\
+\x2a\x38\x65\x04\x80\x18\x66\x00\x51\xe2\x78\xba\x43\x87\x0e\xf8\
+\x54\x66\x7f\x48\x0c\x45\xfb\xd5\x96\xe1\x98\x60\xb6\x33\x4a\x48\
+\xd6\xe1\x45\xa9\x27\x85\xc5\x36\x30\x93\x3a\xe5\x85\x00\x0a\xea\
+\x4d\x8f\x5f\xad\x59\xc9\x6c\x26\x2e\x29\x24\x90\x1c\x40\x82\x38\
+\xcb\x9c\xaa\x2e\x58\x58\x55\x77\x79\x31\x58\x90\x65\x62\xd9\x88\
+\xf9\x55\xfc\x47\x0f\xf0\xd0\x49\xf6\x88\x88\x26\xcd\xf7\x66\xdd\
+\xb4\xe4\x7b\xd4\xe0\x61\xc8\x59\xe0\x88\xc8\xdc\x98\x0d\x17\xeb\
+\x46\x5f\x29\xd8\x8c\x06\x10\x78\x4c\xf2\xbe\x53\xb0\x55\xf8\x3f\
+\xbd\x59\xb0\x0a\x15\x6f\x65\x16\xd6\x8e\x08\x7c\x28\x8a\x12\x0b\
+\x33\x5d\x88\xda\x88\xad\x6a\x4c\x66\xd2\x80\xa9\x02\x8e\xd5\xda\
+\x52\xb4\x36\xee\x2a\x00\xd6\x8c\x81\x5c\x05\x43\x55\xb8\xc2\x16\
+\xe1\xaa\x40\xf4\x49\x73\xf3\x15\x4b\x84\x3a\xc7\x8c\x57\x7f\x40\
+\x23\x31\xb6\xdc\xbf\x5b\x56\x9c\xf2\xc5\x10\x31\x3a\x97\x2e\x2c\
+\xca\x0e\xd5\x56\x6e\x1b\x30\xb1\x8c\x2b\x20\x20\xf8\x69\xea\x3d\
+\x2f\x59\xb3\xbd\x6a\x78\xb5\x20\x21\xf2\x8d\xaf\xa3\x6e\x0f\xb5\
+\x09\x17\xde\xe6\xb3\x44\xb8\xcc\x2c\x8c\x4a\xba\xdc\xea\xac\x34\
+\x26\xad\xc5\xc4\x70\xf2\x1f\xbd\x8d\xa3\x3d\x57\x51\xf4\xa6\x72\
+\x8b\x0e\x39\x86\xda\xfb\xf2\xae\xd3\x0f\x19\x92\x43\x61\x63\xbf\
+\xc5\xda\xa7\xc6\xc3\x88\x5a\x54\xc4\x26\xd6\x01\xae\x0d\xea\xa6\
+\x27\xec\xeb\x08\x92\x4c\x6a\x34\xcc\x2e\x11\x8f\x3a\xad\x4a\x32\
+\xf0\xfc\x1c\xb3\x45\x23\x46\xf2\x85\x16\x32\x33\xd8\xad\xba\x8e\
+\x74\xc9\xdb\x0e\xcf\x98\x60\xa0\x37\x3a\x0c\xa6\xf6\xfa\xd0\x1b\
+\xf2\xb1\xf9\xd0\xb6\xe7\xb5\x85\x73\x68\x77\xc3\x5b\x5c\x0e\x1c\
+\x7f\xd1\xfd\xe9\x72\x61\xb8\x74\xb7\xfb\xb7\x89\x89\xff\x00\x96\
+\xd7\xfc\x8d\x75\x45\x81\x7c\xdd\x3f\x3a\x2e\x22\xcf\x0b\x81\x89\
+\x30\xe3\x2d\xa6\x8b\x22\x9b\xfd\x76\xaa\x78\xac\x3e\x27\x07\x20\
+\x12\x29\x53\xf0\xb0\x3a\x1f\x63\x5a\x20\xda\x98\xcb\xf6\x9c\x1c\
+\xb8\x63\xa9\xca\x5a\x3d\x79\x8f\xf7\xf9\x51\x78\x4f\x8b\x41\xc3\
+\x71\x5f\x6b\xc3\xb4\x52\xff\x00\x9b\x1a\xdd\x5b\x9b\x0a\x76\x6a\
+\xc4\xc1\x4e\x70\xf8\x94\x94\x7c\x27\x5e\xe2\xb7\x4a\xab\xc2\xb3\
+\xc5\xac\x6d\xff\x00\xd7\xb1\xab\x8d\xd8\xab\x81\xa3\x53\x4b\x5d\
+\xef\x44\x34\xad\xa3\x95\xc6\x5c\xac\x2e\x0e\xe2\x95\x89\x86\x49\
+\x2d\xe1\xc8\xce\xa3\xe1\x66\xd4\x7b\x57\x5e\xa4\x1e\x86\xa1\x83\
+\xc1\x26\x1e\x4c\x3e\x52\x80\xc8\xbe\xa1\xb3\x54\x4f\x86\x60\x33\
+\xc2\xec\xd6\xd4\x83\xb8\xa2\x46\x25\xc3\x05\xbb\x01\x60\x46\xf5\
+\x6f\x0b\x0b\xe6\x0f\x25\xd4\x74\xe7\x5a\x93\x55\xe8\x1c\x17\x14\
+\xf9\xb3\x4f\xe6\x45\xd0\x13\xb8\xad\x65\x65\x65\xcc\xac\x18\x1e\
+\x62\xb3\xe7\x84\x36\x28\x22\x79\x55\x85\xfb\x0a\x38\xe2\x9e\x07\
+\xcd\x13\x09\x07\x30\x39\xfc\xab\x7c\x76\x33\x57\x74\xb5\x0b\xca\
+\xaa\xf9\x0c\x8b\x7e\xe3\x6a\x1c\xd7\x50\xc0\x11\x7e\x47\x71\x5d\
+\x98\x2c\xb7\x36\x02\x40\x06\x63\xc8\x8e\x47\xde\xb5\xa0\xac\x76\
+\x20\x78\x5e\x1a\x4a\xad\x9b\x72\xbc\xa9\x1e\x22\xc4\xaa\x60\x91\
+\xb3\x11\x67\xb8\xa9\xe2\x51\xa2\x15\x65\x00\x16\xbd\xc7\x2a\x3e\
+\x1c\x88\x22\xf1\x48\x05\xb3\x5b\x5e\x55\x9f\xa5\x6a\x26\x49\x23\
+\x0f\x1f\x31\xa8\xe9\x49\x9d\x6f\xa8\x1a\x93\x46\xde\x6f\x32\xd9\
+\x5c\x6c\x6d\x6f\x91\xed\x49\xc6\x49\x29\x4f\x0d\x21\x65\x6f\x88\
+\x8d\x40\x1d\xa9\xa1\x31\x80\x07\x23\x7a\x23\xf9\xf2\xa4\xe1\x6f\
+\xe0\xa5\x81\xf2\x5c\x1f\xf7\xf3\xa6\xa1\x0c\xc4\xd1\x10\xd0\x88\
+\xa3\x69\x0e\xbe\x1a\x96\xac\x29\x1b\x33\x96\x3b\x93\x7a\xd6\xe2\
+\x72\x78\x7c\x39\xb6\xbc\x87\x27\xef\x55\xf8\x54\x28\xb0\xfd\xa1\
+\xd4\x16\x63\x65\xbf\x2a\xcf\x2e\xee\x35\x3a\x80\xc1\x60\x4c\x8a\
+\x24\x95\xb2\x2d\xf4\x5b\x6a\x6b\x44\x65\x54\x08\x8b\x95\x06\xc2\
+\x96\xce\x49\xb9\x35\x19\xe9\x9d\x0b\x74\xc0\xd6\xda\xdf\x31\x43\
+\x2a\x89\x2e\xca\xc5\x24\xfc\x43\x9f\xbd\x0e\x6d\x2a\x03\x54\x15\
+\xe7\x52\x3c\x93\x46\x3b\x15\x39\x4f\xc8\x8a\x57\x85\x87\xfc\x33\
+\x7f\xfe\xe6\xae\xbb\x23\xa6\x57\x19\x87\x6e\x55\x56\x48\x98\x5c\
+\xa0\x2c\x3f\x31\x45\x87\x49\x38\x6c\x16\x6c\xc2\x19\x2f\xd7\xc5\
+\x34\x66\x34\x90\x91\xe2\xba\x5f\x6b\xd8\x8f\x9d\xa8\x0b\xdb\x90\
+\x34\x25\xbb\x0a\x3a\x21\x6f\xb4\x61\x58\x30\x24\x03\xb1\x1b\x1a\
+\xbb\x82\xe2\x10\xc8\xbe\x1c\xa1\x22\x70\x3d\x45\x46\x53\x55\xc4\
+\xc4\xc7\xe1\xbd\x99\x3a\x1a\x19\x70\x0e\xcb\x9f\x0f\xf7\x8b\xd3\
+\x9d\x53\x67\x87\xff\x00\x56\xf1\x73\xc1\x14\x82\x68\xd9\x64\xcc\
+\x9a\xaa\x6c\x75\xb5\x67\xcf\x3b\xca\xe5\xdc\xdd\x8d\x48\x56\x55\
+\x55\x70\x54\x32\xb2\x6a\x39\xdc\x11\xfb\xd5\x76\x24\x12\x0e\x96\
+\xa3\x95\xaa\x41\x86\xa2\x07\xa5\x29\x4e\xb4\x6b\x59\x26\x03\xf9\
+\xd5\x84\x8c\xbc\x82\x30\xb9\xb2\x90\x15\x6d\xa3\x36\xe4\x9e\xb6\
+\xa4\x44\x06\x60\x5b\xd2\x35\x3e\xd5\xab\xc2\xa3\x29\x84\x18\x89\
+\x57\xef\x24\x62\xc9\x71\xa8\x07\x9d\x6f\x8c\xd1\x6a\xd4\x00\xe1\
+\xe1\x11\x83\xe6\xb7\x9c\x8e\xbd\x2a\x43\x03\x4b\x1b\xd1\xa0\xd6\
+\xba\x30\xe2\x0f\x4a\x13\xa1\xa6\x69\x7d\xea\x1b\x28\xd4\x91\xf2\
+\xab\x11\x7a\x54\x15\xa6\x05\x0c\x2e\x2a\x4a\x91\x52\x21\x85\x01\
+\x8b\xef\x3c\x48\xd8\x23\x9f\x50\x23\x46\xab\x05\x6f\x49\xc5\x32\
+\xc7\x26\x42\xe7\x35\xb5\x55\x17\xb7\xbd\x18\x8a\x92\x39\xe5\x53\
+\x13\xa2\xc4\x81\x86\x63\x9a\xf9\xbd\xa9\xb9\x54\x28\x44\x16\x45\
+\xd8\x52\x92\x78\x90\xf9\xd2\x40\x4f\x33\x4d\x61\xa5\xc1\xb8\x3b\
+\x1e\xb4\x17\x1b\x0a\x12\xdd\xab\xac\xc4\x5e\x84\x9a\x82\x49\xa8\
+\x2d\x42\x4d\xe8\x6a\x38\x3c\xc2\x97\x8d\x96\x48\xa0\x46\x89\xca\
+\xdd\x88\x36\xe7\x53\x7a\x5e\x30\xd8\x43\x21\x52\xd1\xa1\x39\x87\
+\x7a\xaf\x8b\x15\x15\x99\x66\x56\x7b\x8d\x41\xd6\xb4\xa7\xbe\x72\
+\x79\x31\xf2\x9e\xb7\xaa\x78\x89\x5b\x1b\x32\xaa\x29\x55\x1f\x11\
+\xd6\xde\xf4\x79\x9f\x0a\xaa\x4b\x09\x62\x2d\xb1\x16\x3b\x72\xac\
+\xc3\x56\x04\x8f\xcd\xb3\x0e\x8c\x2e\x3f\x3a\x07\xc3\x61\x5d\x73\
+\x49\x87\x54\x1b\xdd\x5b\x2d\xff\x00\x9a\x4b\xe3\xa2\x0b\xf7\x71\
+\x31\x6f\xeb\x3a\x55\x69\x25\x92\x46\x0e\xe4\x34\x92\x1b\x46\xa7\
+\x6f\x7b\x74\xa6\xf2\x8b\x1d\x88\x8b\x0d\xe2\x59\x1e\x45\x54\x37\
+\x16\x50\x48\xbe\xd7\xd7\x7a\xab\x26\x0b\x07\x23\x97\x79\xb1\x04\
+\x9f\xe9\x5a\x6c\xac\x01\xc8\xa6\xea\x0e\xe7\xe2\x3c\xc9\xa5\xb3\
+\xa8\x6c\xa4\xd8\xfe\x95\xce\xb4\xe8\xf0\xef\x31\xb4\x71\x13\xa6\
+\xe2\x82\x58\x65\xc3\xf9\x64\x52\xa4\xeb\xad\x6b\xb8\x1a\xa2\x59\
+\x63\x4f\xa0\xee\x6b\x3f\x1f\x30\x96\x50\x17\xd0\x82\xcb\x7f\xd6\
+\xab\xc7\x04\xaa\xeb\x7d\xcd\x72\xe9\xa7\x4d\xaa\x6b\xbb\xf4\xa0\
+\xba\x9d\x82\x36\xc5\xa0\x3b\x31\xca\x7e\x7a\x7e\xf4\xa0\x2f\xd7\
+\xe9\x44\xa2\xcd\x71\x7d\x3a\x5b\xf9\xa6\x26\x3e\x21\x04\x78\x99\
+\x10\x03\x65\x72\x07\xb5\x3b\x05\x8a\x9f\x0a\xf7\x8a\x4c\xb9\xbe\
+\x13\xb1\xad\x2c\x46\x1f\x0b\x8b\x9c\xcd\x2f\x8b\x1b\x9f\x51\x40\
+\x0e\x63\xd7\x5a\x98\xb0\xbc\x3e\x16\x0c\xb0\x34\xac\x07\xaa\x56\
+\xd3\xe9\x58\x9c\x6c\xa7\x4a\x8b\x8b\x21\xb0\x9b\x08\x84\xfc\x45\
+\x09\x1f\x96\xd4\xf4\xc6\xf0\xf7\x5b\xf8\xb2\xc6\x7a\x32\x66\xfd\
+\x2a\x5a\x3c\x24\x82\xcf\x83\x8c\x5c\xef\x1d\xd4\xd4\x45\xc1\xe0\
+\xc4\x4b\x9b\x0f\x23\x28\x06\xe5\x1f\x6f\x60\x6b\x73\xf4\x0f\x89\
+\x23\x98\x06\x86\x65\x65\x3d\x74\x35\x6d\x30\xf8\x44\x8d\x5e\x59\
+\x90\xdf\xab\x7f\x15\x9b\x8b\x86\x68\x9f\x2c\x91\x14\x03\x61\x6d\
+\x00\xa4\xd3\xb9\xf0\x36\x86\x33\x05\x18\xca\xb3\x10\x07\x25\x8f\
+\x7f\x9d\x70\xc7\xe0\xd5\x0c\x85\xa4\xb2\xf3\x22\xb2\xe0\xc3\x4b\
+\x2a\x66\x58\xe4\x61\x7b\x79\x56\xac\x37\x09\x92\x58\x8c\x52\xc8\
+\x89\x73\x71\xe6\xd4\x7b\x8a\xd6\xf2\xf9\x06\x45\xa8\x31\xf0\x29\
+\x2d\x20\x92\xf2\x0b\xdf\xa0\xa7\x47\x8f\xc0\xb7\xfc\xe6\x07\xba\
+\x55\x01\xc3\x8c\x91\xae\x7c\x42\x29\x5f\x21\xb0\x3a\xda\xa3\xff\
+\x00\x4d\x60\x72\xa6\x22\x33\x61\xbe\xa2\xf5\x4b\xc9\x64\x6c\xa1\
+\x59\x17\x34\x52\x2c\x83\xaa\x9b\xd7\x5f\x75\x22\xe0\xee\x0d\x62\
+\x9c\x16\x36\x23\x9e\x3f\x31\xe6\x63\x6b\xfd\x69\x90\xf1\x4c\x44\
+\x44\x47\x89\x84\x32\xed\x98\x8b\x1f\xad\x3f\xaf\xe8\xc6\x89\x86\
+\x03\xae\x43\xa7\xf5\x69\x53\x9e\x35\x5c\xaa\x00\x1d\xa9\x11\x62\
+\xb0\xf8\x96\xc8\xb2\x80\xc0\x5e\xcd\xa7\xe7\x4f\x58\xd9\x45\xd5\
+\x2e\x3a\x8d\x69\x9f\xf1\x09\x1e\xe3\x45\x35\x21\x9f\x36\x6b\xdb\
+\xe7\x4b\xcf\x6a\x8c\xf7\xab\x40\xda\x45\x8a\x47\x32\x12\x16\x42\
+\x18\x10\x36\x36\xb5\xa8\x23\x99\x1a\x7b\x05\x74\xcd\xe9\xcd\xb3\
+\x51\x26\x76\xf4\x82\x7e\x57\xa5\x62\xe4\x48\x94\xb4\xee\x3b\x28\
+\x3a\xdf\x95\x45\x5f\xfc\x44\xf7\x58\xa0\xda\xc3\x31\xf7\x34\xdc\
+\x3c\x80\x60\x60\x04\x58\xe4\xe5\xef\x59\x53\x62\xa6\x93\x16\x44\
+\x90\xab\x48\x41\x2a\xf9\xb4\xb7\x5a\xd2\x0d\x96\x18\x45\xf3\x11\
+\x18\xcd\xde\xb3\x2e\xdb\x4e\x74\x66\x75\xfc\x55\x19\xd6\xfa\x30\
+\xa5\xdd\x4d\xed\x6a\x02\x7c\xd6\x14\xea\x58\xcd\x6a\xe7\x63\x94\
+\xd8\xda\x96\x49\xa8\x6b\xe5\x34\xa3\x81\xb0\x16\xe9\x50\x5c\x82\
+\x08\xde\x96\xad\x71\x53\x98\xdc\x5e\xa4\x99\x60\x8e\x7f\x31\x39\
+\x1f\xa8\xd8\xfb\xd5\x3c\x42\x3c\x4d\x66\x5f\xa5\x5d\x06\xa5\xb2\
+\xb2\xe5\x71\x99\x7a\x1a\x2c\xd4\xce\x07\x9d\x33\x0f\x88\x78\x5a\
+\xe8\x74\xe6\x0e\xd5\x38\xac\x2b\x20\x2f\x11\x2c\xbc\xc7\x31\x55\
+\x43\x9b\xd8\xd6\x3c\x6b\xd6\xbc\x58\xb5\x99\x4d\x88\x70\x47\x99\
+\x1b\x5f\xa5\xe8\x13\x3d\xf2\xc3\xe1\x15\xfe\xa1\x62\x2b\x2d\x49\
+\x49\x33\xa1\xb1\x15\x7b\x01\x8a\x59\x49\x0e\x32\xbf\x23\xc8\xd6\
+\xa5\xd6\x71\x63\xec\xf1\x6a\x71\x11\xa3\x06\x3a\xc8\xba\x65\xfe\
+\x28\x26\xe1\x8b\x7b\xc3\x25\xbf\xa5\xbf\x9a\xb1\x11\x21\xec\x47\
+\xb8\xeb\x54\x9a\x79\x17\x34\x71\xb9\xc8\x09\xb7\xb5\x37\x14\xd0\
+\x47\x10\x17\x59\x2c\x56\xfa\x80\x77\xfe\xd5\xae\x1b\x3c\x51\xb5\
+\xad\x74\x1a\x74\xac\x85\x37\xad\x4c\x3b\xe7\xc2\xc6\xcb\xf0\x8c\
+\xa6\x9e\x22\x9a\xa3\x5a\x25\xb9\x24\x03\x60\x37\x22\x97\x7b\x0a\
+\x6c\x43\x2a\x81\x5a\x80\x59\x53\xf0\x0a\x90\x00\xf4\x80\x3d\xab\
+\xaa\x6c\x6b\x49\x04\x03\xb8\x07\xdc\x54\x65\x53\xf0\x8f\xa5\x15\
+\xab\x97\x46\x07\xa1\xa9\x05\x97\xc3\x06\x46\x19\x02\x8b\xde\xd6\
+\xaa\xd8\x51\x6c\x32\xb1\xb8\x67\x62\x49\xe6\x69\x8b\x08\xf1\xe5\
+\xf1\x49\x65\x46\xd0\x13\xa5\x11\x60\xcc\x06\x5b\x0e\x5c\xa8\x40\
+\x7c\xb2\x0c\xb2\x8c\xc2\xd6\xb9\x1a\x8a\xa4\x9e\x3c\x38\xaf\xb3\
+\x29\x04\x16\xb0\xb8\xd3\xde\xae\xb5\x81\xb7\x3e\x82\xab\xe3\xd5\
+\xef\x0c\xab\xa1\x0d\x97\xde\xb3\x4c\x1b\x95\x0f\xa6\x5d\x09\x2b\
+\x7e\x54\x82\xc4\x9b\x20\xbd\xb7\x35\x62\x45\x01\x99\x40\xd2\xfb\
+\x52\x9b\xca\xa4\xa8\x1a\x50\x00\x7a\x8a\x8a\x30\xa0\x0d\x2e\x7b\
+\xd0\xb0\x00\x5c\x9d\x2a\x3a\x12\x2b\x90\x90\x74\xf9\xd4\xfb\x6b\
+\x50\xdb\x5b\xad\x45\x25\xcb\x02\xa2\xd6\xe7\x61\x6b\xd0\xe2\x23\
+\x59\xa1\x11\xb3\xe5\xb3\x5c\x1b\x5e\xa4\xda\xdd\x85\x42\x92\x58\
+\x00\x37\xa9\x13\x26\x0b\x0e\xb1\xb4\x9e\x24\x96\x51\xcc\x00\x0d\
+\x50\x9c\x5b\x13\xf6\x8f\x13\x33\x0f\x4d\x86\x8b\xf5\xab\x5c\x52\
+\x6c\xcf\xe0\xaf\xa5\x37\x23\x99\xaa\x65\xac\x6b\x9d\xcd\xe8\xc0\
+\xe7\x62\x7d\x63\xfe\x91\x40\xcc\x11\xb4\xdc\x8d\x6f\x44\xc0\x36\
+\xbb\x1e\x44\x0a\xe8\xa1\x69\xb1\x48\xa4\x8b\x31\x02\xb3\x49\xf3\
+\x4f\x3c\xa9\x95\xa4\x25\x7f\x08\xa4\x53\x0d\x71\x53\xae\x97\xf9\
+\xd3\xa8\xba\x90\x28\x97\x53\x63\xa1\xa2\x0a\x4e\x9c\xea\x40\xb5\
+\x10\x5a\x24\x0d\x94\x92\x01\xb1\xd4\x73\xa3\xca\x4a\x82\x96\xf9\
+\xd4\x8b\x17\xa9\xa6\x15\xe9\x50\x16\xac\x41\x15\xa9\x87\x4f\x0b\
+\x0e\xa9\xf1\x37\x99\xbf\x6a\xa5\x84\x88\x49\x89\x44\xd8\x13\xad\
+\x68\xb0\xbb\x93\xca\xf5\xbe\x30\x5a\xe5\x77\xcb\x96\xf7\x1d\x0e\
+\xa3\xf3\xa8\x6c\x84\xdd\xa1\x88\x91\xcc\xad\x48\xf6\xae\x22\xf5\
+\xa6\x50\x5d\xed\x60\xc4\x0e\x83\x4a\x53\x13\x7a\x32\x2d\x42\xd5\
+\x17\x06\x3e\x21\x1f\x0c\x9a\x8e\xcd\xd2\x96\x58\xe7\x35\x33\x06\
+\x31\xa2\x25\xb3\x3c\x82\xd7\xed\xad\x74\xa6\xf2\x16\x1d\x68\x42\
+\x0c\x46\xa0\xda\x8f\xc5\x63\xeb\xb3\x8f\xea\x17\xa4\x13\x5d\x9a\
+\xad\x4e\x97\x0b\x81\x94\xdc\xc1\x90\xf5\x8c\xd8\x0f\x95\x25\x70\
+\x53\xc4\x6f\x85\xc7\x01\x6d\x81\x25\x69\xad\x73\xb3\x11\x50\xb9\
+\xc1\xd4\x82\x28\xe9\x25\x5f\x8c\xaf\x34\x9b\xd8\x83\x4b\x9b\x1b\
+\xc4\xd1\xb2\xb4\x45\x4f\x68\xe9\xd7\xa2\x59\x64\x51\x65\x91\x80\
+\xe8\x1a\xac\xff\x00\xa9\x49\xa6\xe2\x73\xe8\x7c\x73\x7d\xbc\xa4\
+\x52\x8e\x0f\x1c\xce\x41\x85\xef\xcc\x9a\xd1\x92\x57\x6f\x29\x76\
+\x6f\x73\xb5\x43\x3d\x97\x56\x36\x14\x7e\x67\xf4\xea\xb4\x78\x27\
+\x45\x47\x9d\xd0\x04\x24\x35\xbc\xc7\x29\xdf\x6d\xaa\xd6\x21\x46\
+\x7f\x2e\xd6\xf2\xf7\x1c\xa9\x62\x51\x7d\x14\x91\xb1\xa8\x88\xe4\
+\x2f\x16\x62\x46\x50\xe9\x7e\x5d\x45\x33\x27\x81\x39\x0d\xaf\x7b\
+\x1a\x94\x52\x0d\xc9\xbd\x0e\x6a\x82\xd7\x39\x41\xf7\xa9\x19\x7a\
+\xeb\xd2\x55\x9b\x35\x81\xd0\x75\xa3\x2c\xdf\x87\xe9\x56\xac\x1d\
+\xec\x6f\xf5\xae\xbf\x2a\x58\x25\xb4\x0b\xda\x89\x4a\x33\x65\x59\
+\x55\x98\x7c\x20\xeb\x56\xa1\x23\xdc\x5e\xf4\x79\xcd\x27\x55\x3b\
+\x7b\x8a\x95\x6b\x8a\x75\x1a\x1a\xc6\xe3\x43\x49\xc5\x61\xd2\x62\
+\x5d\x3c\xaf\xd3\x91\xa2\x26\xc2\xf5\x19\x88\x3b\x1a\x92\x83\x02\
+\xad\x94\x82\x08\xe4\x6b\x81\xf3\x5c\x68\x6a\xf4\xea\xb3\x80\x18\
+\x59\x86\xcd\x54\xa5\x56\x8e\x42\xae\xba\x8e\x87\x7a\xc5\x8d\x2e\
+\xe0\xb1\x6c\x06\x49\x2e\xc3\x61\xd4\x55\xdc\x19\x5f\xb1\x21\x4c\
+\xac\xba\x86\xd3\x9f\x7a\xc5\x8c\xd9\x89\xd7\x5a\xb9\x86\x9d\xe3\
+\x7c\xc8\xd6\x63\xa1\xbe\xa1\xbb\x1f\xe6\x99\xc8\x58\xb9\x2e\x16\
+\x27\x6c\xc8\xde\x19\x3c\xad\x71\x52\x15\xf0\x6a\x64\x57\x12\x27\
+\xc4\xb6\xb5\x0f\xdb\x20\x24\x28\x56\x59\x0f\xfc\xb6\x3f\xa1\xe7\
+\x51\x36\x22\x16\x56\x5b\x3d\xd9\x6d\x62\x2b\x5d\x33\xda\xe4\x6c\
+\xae\xe0\xc7\x72\xac\x34\xa7\xa5\xf9\x8d\x6a\xa6\x15\x55\xb0\x28\
+\x14\x58\xe5\x20\x1e\x60\xd3\xb8\x79\x90\xc0\xa5\xe5\x62\x0e\xc0\
+\x80\x6b\x70\x2c\x2d\x10\x17\xa8\x19\xbf\x1c\x7f\xf6\x1f\xe6\x8c\
+\x1b\x0f\x30\x00\x7e\x25\x3a\x7c\xfa\x56\x83\x80\xa9\x2b\x70\x45\
+\x15\xba\xd4\xd8\xf4\xad\x05\x59\x62\x65\xfb\xc3\x72\xa0\x59\xc0\
+\xdc\x8e\xbf\x2b\xd7\x10\xac\xb7\x52\x19\x7a\x8a\xb5\x1f\xac\x03\
+\xb5\xf5\xaa\x78\x38\xb2\x89\x7f\xd6\x40\x17\xe5\x7a\xcd\x87\x5c\
+\x14\x0d\x86\xf4\xa6\x2a\xd8\xd0\x83\xfe\x52\x93\xf3\xab\x25\x7b\
+\x81\xef\xa5\x56\x96\x48\x53\x1b\xe2\x86\x04\x37\x95\xc8\x1a\x5c\
+\xf3\xa2\x94\x30\xa0\x2b\x4d\x0f\x13\x1b\x2b\x8b\xf4\x3a\x57\x3a\
+\xdb\x71\x59\xc4\x41\x45\x1b\x28\xa0\x74\x0c\x2d\x76\xfd\x69\xe4\
+\x50\xb2\xd0\x88\xc8\x14\x69\x70\x6a\x08\xf3\x5c\x9b\xd3\x1a\x81\
+\xad\x7a\x8c\x09\x1a\x5a\x82\x67\xf0\x30\xed\x27\xc4\x7c\xab\x4d\
+\x51\x73\x6f\xf6\x2a\x87\x11\x97\xc5\x94\x85\xf4\x26\x8b\x47\x2b\
+\x90\xab\x7b\xd0\x91\xda\x8a\xa2\xb9\x34\x1b\x0a\xe4\xcc\xac\x18\
+\x1b\x11\xb1\xa2\xa9\xb5\x3a\x9c\x6c\x05\xe8\xe3\xb3\x0f\x28\x27\
+\xf2\xa2\xcb\xe5\x3a\x5f\x4d\xa9\x9c\x3a\x13\x23\x14\xb5\x94\x6a\
+\x5b\xa5\x32\x22\x63\xc2\xcf\x34\xb9\x51\x33\x13\xae\x9c\xaa\xf4\
+\x3c\x3f\x28\x02\x59\x46\x9b\xe5\xd6\xaf\x22\x24\x71\x84\x41\x61\
+\x6d\x7a\x9a\x12\x40\xd8\x5e\xb7\x38\xc6\x6f\x25\x77\xc0\x46\xc2\
+\xf1\xcc\xca\xc3\xf1\x0d\xea\xab\xc0\xd0\x93\x1b\xea\x6f\xca\xb5\
+\x14\xad\xaf\x7b\x54\xcb\x08\x9e\x1c\xbf\x16\xe8\x6d\xf9\x55\xf9\
+\x83\x59\x16\xed\x5d\x96\xfc\xa9\xe5\x2c\x6c\x46\xb5\x19\x68\xc6\
+\xb4\x7c\x2d\x7f\xe2\x4e\x9f\x01\xab\x65\x6d\xca\xf5\x5f\x87\x69\
+\x8a\x02\xde\xa0\x54\x55\xb3\xbd\x33\xc6\x69\x2c\x2b\x81\xeb\x4d\
+\x65\xa5\x95\xa4\x3a\xc2\xc4\xda\xf9\x45\xec\x39\xd5\x27\xc6\x81\
+\x70\x60\x1f\xf7\x1a\xba\x2e\x0d\xc6\xf5\x9d\xc5\x54\x2e\x36\x50\
+\x05\x80\x34\x72\xdc\x6a\x1b\x0b\xb6\x21\x84\xec\x02\xa4\x67\xc8\
+\xa3\x99\xa9\x3b\xd4\xe1\xd1\x93\x09\x1a\xb0\x00\xea\x48\xf7\xa1\
+\x7c\xdc\x80\xab\xe2\x76\xde\xd5\x07\xf2\xa1\x0c\xe4\x1b\x28\xa0\
+\x05\x96\xf9\x86\x9d\xb9\x50\x70\xc9\x1e\x28\x80\x32\xbe\x5b\xec\
+\x00\xb9\x35\x1e\x2c\x44\x5f\x39\x5e\xee\x84\x0a\x5c\xca\xb3\x2a\
+\x82\xc1\x59\x4d\xd5\x88\xa9\x94\xcf\x24\x45\x24\x68\x54\x11\xa9\
+\x04\xb7\xe5\x46\xa3\x58\xd8\x03\x7b\x83\xb1\x1b\x1a\x8b\xd2\x60\
+\x41\x0a\x14\x59\x1d\xef\xca\xd6\x14\x46\xe0\xea\x08\xab\x56\x25\
+\x9b\x29\xb8\x3b\xef\x52\x1e\xe3\x51\x4a\x66\xf3\x0b\xf2\xa6\x01\
+\xa6\x62\x42\x8e\xa4\xd8\x55\xa9\x0c\xf4\xac\x54\xe6\x17\x8d\x86\
+\xae\x01\x05\x4e\xd9\x7b\xd1\xea\x5f\x42\x51\x7f\x15\xac\xcd\xed\
+\xd0\x54\xfd\xd2\x5e\xd1\xae\xbb\xe6\xd4\x9a\x12\x19\xae\x15\x97\
+\x40\xe2\xe0\x57\x2f\x99\xb5\xa8\x6d\x40\xb0\xb2\x8d\x00\x14\x4a\
+\x54\x0d\xef\x51\x12\xd9\x5b\x53\xbd\x49\x7f\xc3\xad\x05\xb3\x0b\
+\x93\xf2\xa8\xd5\x45\xd7\x7e\x94\x83\x12\xeb\x20\x20\xea\x75\xa0\
+\x91\x62\x86\xee\xca\x0c\x4e\x75\x36\xb9\x53\x5c\xa4\xde\xe7\x7f\
+\xd2\x88\xe5\x74\x68\xdf\xd2\xfb\xf6\xa9\x07\x0d\x3f\x8d\x19\xd4\
+\xe7\x8c\x6a\x4f\xc4\x3a\xd1\x0b\xdf\xcb\x54\x07\x8b\x83\xc4\x66\
+\x2b\xdb\x5d\x88\xa6\xcf\x8d\x56\x8b\x2c\x28\xca\xcd\x6b\x92\x76\
+\xf6\xac\xfe\xbf\xa9\x6a\xe6\xfa\xd1\x66\x14\xac\x3c\xab\x88\x4e\
+\x62\x45\x1e\x60\x79\xf7\xa2\xb9\xad\x6a\x15\xea\x64\x55\x95\x32\
+\x3f\xc8\xf4\xa0\xa9\x53\x6a\xb5\x62\xa4\x8a\xd1\x49\x95\xfe\x47\
+\xad\x10\x6b\x55\xa9\x51\x66\x4c\x87\xd4\x3d\x26\xa8\x6a\xa4\x83\
+\xc8\xd8\xd1\x61\x58\xba\xc9\x1e\x47\x06\xdc\x88\xdc\x51\x0f\x17\
+\x25\x83\x24\xd6\xda\xfa\x30\xaa\xea\xda\xd3\x15\xaa\xd4\xb1\x0f\
+\x15\x38\x7b\xc6\x20\x36\x3b\x86\x3b\x1a\xd2\xe1\xb8\xc8\x64\xc1\
+\xc6\x58\x14\xb1\x23\xa8\x15\x98\x72\x3d\xbc\x6f\x0c\xdc\x69\x9b\
+\x7f\x95\x16\x09\x44\x73\x4d\x02\x9b\xa6\x50\xc0\x74\x35\xa9\x6e\
+\xb3\x63\xd0\xae\xa9\x98\x10\xc0\xf3\x14\x71\x9a\xc7\xc2\xce\xf0\
+\xb5\xc3\x58\x74\x3b\x1a\xd3\xc2\xcc\x93\x26\x75\x20\x11\xea\x17\
+\xda\xba\xca\xcd\x8b\x08\x0a\xd8\x25\xad\xf8\x4f\x2f\x63\xca\x8d\
+\x5d\x49\xb1\xf2\xb0\xf8\x5b\x4a\x5a\x3a\xdf\x9f\xbd\x14\xae\xa6\
+\xca\x40\x61\xdf\x5a\xdb\x26\x01\x67\x06\xd6\xd6\x90\xb1\xa1\x8d\
+\x6c\x0e\xbd\x34\xbe\xb4\xc3\x1a\x15\x39\x4b\x2d\xc7\x23\xa7\xd2\
+\x82\x72\x21\xc3\x31\x5d\x32\x2d\x85\x49\x9d\x8e\x25\xa5\x31\x86\
+\xba\x2f\xe6\x6a\x9e\xd2\x18\xed\xe5\x7f\x2d\xaa\xc3\x1b\x9d\x69\
+\x2f\xa1\xcd\xcc\x57\x1a\xdc\x00\x6c\xf1\xab\x5f\x5b\x59\xbd\xc6\
+\x94\xc8\x71\x0f\x19\xb1\xf3\x2f\x43\x4b\x72\xa1\x09\x1b\x2b\xb5\
+\xfe\x7a\x8f\xd6\x95\x09\x25\x0d\xce\xc6\x8d\x2d\x28\xa4\x49\x41\
+\xc8\x6c\x7f\x09\xa2\x61\xae\xa2\xb3\x01\x21\xb4\x36\xa7\x47\x8a\
+\x99\x16\xd7\x0c\x3f\xa8\x5e\x9d\x18\xb0\xe3\x5a\x0c\xa5\x8e\x9f\
+\xf8\xa5\x49\x8e\xd3\xfc\x95\xbf\xb9\xaa\xd3\xe2\x65\x94\x59\x98\
+\x01\xd1\x45\x85\x1b\x14\x94\xcc\x74\xea\x23\xf0\xa2\x37\x27\xd4\
+\xc3\xf4\xaa\x4f\xb5\x1d\xa8\x5c\x69\x58\xb7\x5b\x2a\xa6\x8b\x2d\
+\x48\x5a\xce\x20\x5b\x5a\x9a\x92\x2a\x42\xd3\x89\x66\x38\xc9\x60\
+\x06\xf5\xaa\xb0\xac\x71\x08\x80\xbd\xbd\x47\xa9\xa4\xf0\xa8\xaf\
+\x39\x73\xff\x00\x2c\x5e\xae\x85\xae\xdc\x63\x16\x91\x94\x07\x00\
+\xb5\xc5\xa9\x80\x0e\xab\xf5\x14\x52\x45\x98\xdc\x1b\x1a\x01\x11\
+\xce\x14\xd3\x80\x56\x1b\x58\x37\x60\x2a\x51\x32\xa8\x1f\xbd\x31\
+\x50\x01\x60\x2a\x72\xd3\x89\x47\x89\xc3\xaf\x8e\xa3\xd5\xea\xec\
+\x6a\x99\x15\xb5\x94\x10\x55\x85\xd5\x85\x8d\x66\xe2\xe1\x68\x64\
+\xca\x57\x36\x6f\x4d\xb9\x8a\x2c\x31\x5d\x09\x57\x0c\xa7\x50\x6e\
+\x2b\x47\x47\x41\x22\xec\xc2\xfe\xd5\x9e\x79\xf9\x0e\x9f\x95\x5a\
+\xe1\xf2\x00\x3c\x26\x3e\x56\xd5\x49\x3b\x1a\x22\xa6\x91\x6a\x12\
+\x2f\x4e\x28\x79\xd0\x32\xda\xac\x05\x65\x25\xac\x06\xa6\xab\x49\
+\x0f\x8b\x8b\x92\x72\x2f\x18\x6b\x8b\xfc\x56\xab\x8c\x0e\x5d\x3d\
+\x4f\x75\x5d\x3e\xa7\xe5\x42\xea\x2d\x94\x68\xa0\x58\x0e\xd4\x58\
+\x62\xbc\x9a\xb1\x26\x94\xe2\xd4\xf9\x01\x51\xa8\xbd\xb9\x8e\x74\
+\xa3\xe6\xd2\xd6\xa8\x93\x6d\x49\xa1\x61\x4d\x22\xd4\x2c\x2b\x28\
+\x86\x16\x3d\x8d\x0d\xc5\xed\x4e\x65\x14\x21\x2d\xb5\x18\x74\x9c\
+\x54\xb2\x46\xd1\xaa\x3f\x86\x8e\x35\x7b\x52\xb1\x38\x86\x81\xc0\
+\x8f\x11\xe3\xa1\x1a\x83\xad\x5a\x9a\x21\x2c\x26\x36\x6c\xba\xdc\
+\x35\xb6\xa4\xe0\xe0\xf0\x26\x3e\x2d\xb3\x7c\x04\xec\x68\xba\x81\
+\x0c\x92\xcd\xac\x78\x5b\x13\xbb\x35\xec\x29\xc4\xfd\xe7\xa8\xb1\
+\x03\x56\xfe\x3a\x53\x24\x67\x6d\x19\x8f\xb7\x2a\x5a\x7a\x6d\x51\
+\x71\x37\x37\x22\xf5\xc2\xd6\xb5\x87\xd2\xa6\xd5\xd5\x27\x0e\xd4\
+\x5a\xda\x86\xe0\x1d\x6a\x0b\x12\x6c\x34\xa9\x08\xd4\x57\x1a\xea\
+\x93\xaa\x49\xbd\x09\x35\x17\xbd\x48\x77\x05\x72\xba\x86\x5e\x86\
+\x96\x23\x8e\x07\xfb\x44\x6a\x4a\x8f\x52\x9d\x6c\x3a\x8a\x20\x6a\
+\x64\x91\x61\x81\xa4\x61\x7c\xc3\x28\x5e\xb5\x22\x31\xb3\xc4\x65\
+\x8a\x48\xdb\x33\x29\xf3\x10\x2d\xa5\x5a\x70\x58\xe7\x40\x4a\xb6\
+\xa0\x8a\xcf\xc1\xe1\x9e\x6f\x31\x39\x50\x6e\xc6\x9f\x8a\x85\x70\
+\xf0\xe7\x8e\x69\x03\x5f\x40\x4d\xaf\x44\xb7\xd4\xb1\x66\x02\xe5\
+\x48\x1d\x6d\x51\x71\x55\x70\x12\x62\x1f\x14\xa3\x3b\x30\x3e\xab\
+\x9b\x8b\x55\xa2\x2e\xf6\x51\x7d\x74\xa6\x76\x84\xa7\xa1\xaa\xdc\
+\x4b\x49\xd5\xbf\x12\xeb\x56\x42\x30\x17\x20\x7d\x6a\xb7\x12\x20\
+\xca\x88\x06\xa8\xba\x9a\xaf\x80\x9a\x34\x3a\x50\x81\x73\x47\x10\
+\xf3\x00\x39\x6a\x68\x22\x96\x3f\x16\x48\x16\xf6\x24\x35\x58\xc0\
+\x42\x60\x8d\xf3\x90\x5d\x8d\xbe\x54\x97\x76\x8e\x48\x1d\x23\x2e\
+\xc0\x36\x80\x55\x9c\x39\x12\x47\x9d\x41\x52\x0d\x99\x4e\xe2\x99\
+\xe8\xa6\xaf\xad\x47\x7a\xbb\xc3\x74\xc5\xa8\x03\x46\xd0\xd5\x35\
+\xbe\x60\x40\x27\xda\xb4\xb8\x7c\x3e\x18\xf1\x18\xf9\x88\xb2\x8e\
+\x95\xd7\x8f\xac\xd5\xc8\xb6\xa3\x74\x04\x5c\x0d\x4d\x25\xa4\xf0\
+\xec\xc7\x61\xbd\x14\x18\x98\xa4\x75\x4d\x54\x93\xa5\xf9\xd7\x4d\
+\x9e\x32\x72\x5c\x79\x4f\x2a\xaf\xc5\x0d\xa1\x09\xf8\x8d\xea\xd1\
+\x03\x37\x7a\xa3\xc5\x9b\xef\x55\x7a\x2d\x5c\xba\x8a\x28\xb5\x2d\
+\xbb\xd1\xb9\x16\xde\x96\xfb\x57\x26\xa1\x13\xa3\x11\x9e\x3d\x5c\
+\x0d\x54\xec\xc2\xa3\x0f\x66\x80\xb0\x04\x10\xd6\x65\xe8\x68\xce\
+\xfa\x53\x06\x1a\x56\x1f\x68\x44\xd6\xde\x60\x74\x12\x0f\xe6\x8c\
+\x24\xf3\xa8\x6a\xb0\x70\x93\x11\x99\x56\xe0\xea\x35\xd6\x97\x26\
+\x1e\x70\x0f\xdd\x9d\x2a\xca\x95\x9c\xd0\xd3\x1a\x19\x83\x10\x62\
+\x6d\x3b\x50\x15\x60\x2e\x54\x81\xd4\x8a\xc3\x48\xae\x22\xbb\xf2\
+\xfd\x68\x80\xf7\xff\x00\xb8\xd4\x83\x96\xb8\x8a\x62\x8f\xea\x3f\
+\x3d\x6b\xb2\x83\xb9\x3f\x2d\x29\xc1\xa5\x65\xa9\x00\x02\x37\xb9\
+\xda\x9b\x91\x4f\x23\xef\x7a\xe8\xe3\xc8\x73\x6e\x3f\x4a\xb1\x6b\
+\x63\x86\xa6\x5c\x1e\x6b\x83\x98\xe8\x47\x41\x56\x00\xa4\x70\xf5\
+\xb6\x15\x5a\x32\x10\x96\x3e\x5f\x84\xf6\x23\xf7\xa7\x86\x05\x73\
+\x00\x45\x8d\x88\x3b\xa9\xe8\x6b\xb4\xf1\x87\x5a\xba\x50\x91\x47\
+\xe2\xc8\xe1\x00\xd0\x5f\xe2\xed\x51\x34\xb1\xe1\xe2\xf1\x24\xd4\
+\x9f\x4a\xf5\xac\xdc\x64\xef\x89\x6c\xd2\x01\x61\xb2\xf2\x15\x5b\
+\x89\x6e\x4e\x25\x1a\xbd\xa2\x83\x30\x1c\xdc\xd0\x2f\x13\x7c\xb6\
+\x78\x51\xbb\x8d\x3f\x4a\xa4\xaa\xc4\x90\x01\x6b\x7d\x68\x95\x24\
+\xbf\xf9\x6f\x6e\xb9\x4d\xab\x3f\xaa\x72\x34\x62\xc6\xe1\xa4\xd1\
+\xb3\x44\x7b\xea\x28\xe4\x48\xf1\x29\x95\x24\x46\xc9\xb1\x53\xad\
+\xfa\x56\x77\x81\x27\xfe\xd3\xff\x00\xda\x68\x4c\x52\x03\x70\x8e\
+\x08\xe6\x06\xd4\xea\xc3\x9a\x09\x6e\x54\xc6\xe6\xda\x6d\x40\x90\
+\xc8\xad\x90\x8c\xa4\x6d\x98\x81\x7f\xad\x54\xc6\x89\xe4\x52\x22\
+\x95\xc4\x8a\x2f\xe5\x3e\xa1\xfc\xd6\x6e\x20\x4a\x04\x71\xbb\x33\
+\x3c\xc6\xc0\x9b\x9b\x0b\xf2\xae\x77\x96\x7c\x32\x3d\x5c\x0e\x1d\
+\x0f\x88\xea\x19\x46\xa7\x91\xae\x70\x48\x3e\x12\x67\x3b\x66\x3a\
+\x28\xaf\x3d\x04\x86\x2c\x6c\x62\x2b\x00\xac\x00\x36\xf5\x0b\xd7\
+\xa2\xf1\xd6\x59\x99\x0e\x8e\x09\x00\x72\x35\xd3\x8f\x2d\x16\x61\
+\x79\x4a\x82\x5d\x83\x3b\x68\x48\xd8\x0e\x82\x81\x85\x39\xc6\x96\
+\xa4\xc8\x72\xa7\x7d\x85\x54\x16\xe5\x7a\x8a\x43\xaa\xf8\x83\x21\
+\xf7\xa7\x20\x19\x4d\xc8\xd7\xf2\xa1\xb0\x58\xaf\xd7\x7a\xc9\x85\
+\x3a\xeb\x4b\x6b\x03\x6e\x74\xf6\x04\x8e\x42\x96\xc8\x09\xd6\xf7\
+\xeb\x51\x28\x8a\x82\xb4\xc6\xd3\x7f\xad\x0d\x18\x80\x45\x04\xca\
+\x0e\x16\x55\x22\xf6\x52\x47\xbd\x3a\xb9\x00\x2c\x57\xf1\x02\x28\
+\xc4\x54\xc3\xcc\x17\x9d\x85\xf5\xed\x50\x16\x89\x98\x30\x43\x6b\
+\x12\xa2\xff\x00\x4a\x86\x20\x0b\x93\x41\x09\x1a\xd0\x9b\x57\x3c\
+\x82\xfb\x50\x9b\x9d\x49\xb7\x61\x41\x71\x55\xbd\xcd\x4a\x82\x4d\
+\x95\x6f\xec\x2a\x15\x03\x30\x5e\xa6\xab\x4f\x88\x91\xa4\xf0\x60\
+\x2c\x17\x6d\x0e\xad\x45\xb8\x96\xe4\xc9\x18\xbc\xb2\x2a\x76\xbd\
+\xcf\xd2\x85\xed\x94\x32\xe6\x21\x86\x84\xad\xa8\x70\xf0\x24\x3e\
+\x67\x01\xe5\x3b\xdf\x50\xb4\x6e\x4b\x35\xc9\xb9\xa5\x16\x73\x54\
+\x44\x18\x9b\x93\xa5\x18\x17\xf6\xfd\x68\xd5\x49\x36\x03\xd8\x54\
+\x83\x6a\xaf\xc5\x3f\xcd\x45\xbe\xcb\xb7\x4a\xba\x88\xc4\x7d\xd2\
+\xab\x9e\x6c\x7d\x2b\xfc\xd4\xa4\x10\xc6\xe5\xdb\xef\x64\x3b\xb3\
+\x6d\xf2\x15\x66\x8d\x66\xc3\x2e\x22\x24\xb4\x6c\xca\xb4\xdc\x3e\
+\x1e\x4c\x43\x78\xb3\x31\xc9\xd4\x9d\x4f\xb5\x68\x34\x84\xef\x6f\
+\x6b\x50\xc8\xdb\x17\xb9\xcd\xa2\xa8\xe7\xfc\x55\xf9\x5a\x04\x50\
+\x13\x24\x4a\x11\x79\xff\x00\x73\x48\x9a\x62\x5b\xc1\xc3\x0b\xb1\
+\xd0\xb7\xf1\x56\x99\x54\xaf\xde\x6a\xa3\x52\xa3\x44\x1e\xfd\x69\
+\x18\x63\x0c\x0c\xee\x54\xdd\xbd\x23\x98\x14\xd4\xe8\x50\x61\x22\
+\x2e\xde\x67\x6f\xd7\xa5\x55\xb3\xbc\x85\xc9\xb9\x63\x73\x7a\x6c\
+\xce\xf3\x49\x99\xb4\x1c\x80\xe5\x5c\xab\x61\xa5\x66\x90\xaa\x91\
+\xfd\xaa\xce\x0f\x0c\xd2\xb5\x94\x58\x0d\xcf\x21\x4c\xc1\x60\xda\
+\x4f\x3c\x9e\x54\xeb\xd6\xb4\x11\x00\x50\xaa\x2c\xa3\xf3\xad\x4e\
+\x3f\x68\xb5\x38\x60\x21\x5c\xb1\x0b\x77\xb6\xa6\x8c\x24\x47\x16\
+\x19\xa3\x5c\xd2\x21\xbf\x42\x46\xd5\x2a\xb6\xda\x83\x17\x13\xb2\
+\x2c\x88\x7d\x1c\xbf\x7a\xe8\xc1\xe9\x1a\x81\x65\x40\xbe\xc2\x99\
+\x15\x93\x36\x76\xb0\x1a\xde\x86\x09\x63\x68\x95\xd9\xc6\x6b\x6a\
+\xa3\x7b\xfb\x54\x82\x64\x90\x31\x1a\x8f\x48\xe4\xbf\xde\xb4\x83\
+\x8b\x49\x5c\x09\x32\xd9\x57\x40\xbc\xc7\xbd\x06\x10\x67\xc4\x22\
+\xf5\x61\x57\xa3\xf2\x8b\x6f\x4b\x8a\x20\x98\xd2\xc0\x79\x42\xe6\
+\x1d\xb9\x55\x78\xf6\x34\xf6\xca\x75\xb7\x3a\xa1\xc5\x54\x78\xe0\
+\xda\xfe\x51\xbe\xb5\x74\x1a\xa5\xc5\x35\xc4\xfb\x28\xa7\x97\x8a\
+\x2a\xb1\xd2\x90\x49\x00\x8e\x86\xd4\xd9\x0d\x28\x9b\xfc\xcd\xeb\
+\x9b\x50\xec\x04\x41\x98\xc8\xc2\xea\xbb\x0e\xa6\x9f\x8a\x62\x30\
+\xce\xc4\xea\xde\x51\x53\x87\x19\x30\x88\x3a\xdd\xab\xa4\xb1\x78\
+\x94\x81\x60\x0b\xeb\xcc\xed\x5a\xf8\x91\x7c\xa0\x06\x16\xd0\x7e\
+\x94\x12\x1e\x94\x52\x90\xd7\xcc\x6f\x7a\x51\x1d\xcd\x14\x27\x33\
+\x6c\x09\xd3\xbd\x48\x91\x8e\xfb\x0e\x47\x5a\x0b\x80\x2c\x2b\x94\
+\x92\x6c\x01\x26\x84\xe9\x62\x86\x4f\x52\x05\x27\xe2\x5a\xa7\x3c\
+\x4d\x0b\xe5\x61\x70\x76\x23\x63\x57\xb4\x0c\x14\xba\x06\x3b\x02\
+\xd4\x18\xb0\x87\x0c\x44\x92\x22\x95\xd5\x75\xbf\xe9\x45\x86\x29\
+\x0b\x72\xa2\x50\x49\xb0\xd4\xd0\x23\xc1\xcf\x13\x17\xd4\xd0\x89\
+\x96\x69\xd3\x0f\x09\x21\x5c\xf9\xda\xda\x9f\xed\x46\x93\x90\xa6\
+\x6c\xab\x9a\x46\x1f\x0a\x0b\xfe\x74\xc1\x95\x45\xe4\x8a\x48\x87\
+\xe2\x6b\x11\xf9\x54\x02\x02\xe5\x40\x15\x7a\x0a\x34\x62\xbb\x73\
+\xe5\x4c\x4b\xdc\x39\xc3\x61\x32\xf3\x46\xbe\xfb\xde\x8f\x15\x30\
+\x86\x45\x7b\x5c\xb2\x80\x41\x36\x04\xea\x45\xfe\x42\xa8\x60\x24\
+\x11\x62\xb3\x92\x6c\xe3\x2b\x0e\xd4\x7f\xe2\x58\x25\x93\x04\x92\
+\x46\x0b\x04\x7f\x35\xba\x01\x5a\xdf\xf1\x1f\x49\x96\x79\xb1\x38\
+\x96\x58\xbc\xf2\xf3\x6b\xf9\x53\xda\xb4\x21\xc1\xb4\x08\x1b\x13\
+\x31\x9d\x86\xad\x1d\xb6\xf9\xd5\x5f\xf0\x8a\x34\x65\xf3\xad\x89\
+\xbb\x2d\xc6\xfa\x6f\x5a\xc4\x02\xc1\xb9\x8e\x74\xf1\x9b\x35\x5b\
+\xf0\x11\x95\xb2\xac\x2a\xa8\x1b\x50\x40\xb1\xa6\x80\xe1\x6e\x25\
+\x72\x07\x22\x69\x2a\x8f\x1b\x05\x6d\x81\x25\x1f\x71\x6e\x86\x9d\
+\x1b\x07\x25\x43\xad\xf9\x81\xbd\x6e\x32\x3f\x12\x66\x5f\x29\x20\
+\x1e\xad\x43\x92\x5b\x1b\xc8\x75\xdc\x5e\xf7\xa6\x0a\x25\x50\x6b\
+\x58\x08\x58\x54\x91\xe2\x47\x1b\x01\xa8\xf2\xdb\xf4\xac\x2f\xf1\
+\x06\x0d\x61\xe2\x8f\x2c\x60\xe5\xf0\x96\xc3\x90\x26\xbd\x13\x34\
+\x48\x49\x79\x05\x97\x53\x6d\x4d\xab\x23\x12\xed\x89\x9d\x8b\xaf\
+\xf9\xc7\xd3\xd0\x72\x15\xcf\x9c\x99\x8d\x4b\xdb\x1f\x83\x61\xdc\
+\xce\x64\x91\x09\x8e\x3d\x4d\xfa\xf2\x15\xa4\xcd\x9c\x97\xd8\xdf\
+\x5a\xb4\xf8\x6f\xb1\xc6\xb0\x0b\xdb\x72\x7a\x9a\x44\x82\xcf\xee\
+\x2b\x19\x9d\x1d\xd1\xc1\x8a\x01\x42\x4d\xa8\x1b\x30\xde\x9a\xea\
+\x08\xb8\xb3\x29\xd8\xf2\xaa\x4e\x35\xae\x8e\x57\x88\xdd\x0f\xb8\
+\x3b\x1a\x75\x62\xd3\x28\xbd\xec\x3e\x94\x0f\x72\xc0\x5b\x63\x72\
+\x68\xe3\x92\x39\x63\x2c\xba\x11\xea\x1d\x2a\x06\xe4\xf5\xab\x01\
+\x4c\x2c\x68\x1c\x53\xa4\xda\x96\xda\x8a\x11\x46\x94\xc2\xcc\x7a\
+\x1a\x75\x2e\x41\x53\x41\xa8\xcd\x91\x1d\xf9\xaa\x93\x5d\x6e\xe6\
+\xa0\xd8\x5c\x1d\x98\x10\x6b\x28\xb4\x92\x03\x02\x31\x99\x14\x05\
+\x02\xd7\xd4\x50\xab\xc3\x2d\xc4\x66\x59\x0f\x50\x9a\x55\x7f\xb1\
+\x44\x8f\x98\xb9\x71\xf8\x6d\x6a\x79\x26\xc0\x1d\x00\xd9\x46\xc2\
+\xb3\xb7\xe9\x10\x8a\xdf\x04\x97\xf6\x5f\xe6\xa3\x28\xd6\xe0\xff\
+\x00\xd4\xc0\x7e\x97\xa1\x35\x16\xbd\x25\x33\x06\x28\x56\x29\x23\
+\x42\x45\x8d\x81\xfd\x6a\xae\x12\x29\x60\xc7\x20\x65\x07\x36\xc4\
+\x1d\x3d\xea\xd2\xad\xcd\x80\xd4\xd1\xaf\x99\x83\x28\xb8\x00\xaa\
+\x77\xea\x68\xcd\xed\x00\xee\x40\xae\xb6\x94\x41\x2c\x2e\xcc\xa0\
+\x75\x2c\x29\x89\x16\x72\x08\x05\x97\xae\x81\x4f\xcc\xef\x56\x22\
+\xe3\x17\x51\xa5\x31\x14\x0d\x6c\x3e\x62\xa3\x10\x71\x10\xa0\x65\
+\x48\x72\xed\xa1\xcd\x4c\xb1\x08\xb9\xc8\x2f\x6f\x35\x86\xd5\xa0\
+\xe6\x62\xdb\x9d\xb6\xed\x42\x75\xa2\xae\xb7\x5d\x6a\x01\x02\xf4\
+\x6b\x14\x9f\x6b\xf1\x33\x47\x95\x54\xaa\x0d\xcd\xbe\x55\x20\x00\
+\xa5\x98\x85\x51\xb9\x35\x5f\x11\x89\xcd\x74\x8b\xca\x9c\xcf\x33\
+\x55\xc8\x85\x8a\x91\x41\xca\xa7\x3b\x0e\xde\x51\xfe\xfe\x7e\xf5\
+\x57\x29\x26\xe7\x73\x46\x05\xa9\x98\x78\x9e\x56\xb2\x0d\x39\x9e\
+\x95\x9f\x5a\xf0\xb4\x42\x4e\x55\x04\x93\x57\xf0\xb8\x05\x5b\x34\
+\xda\xb7\xe0\x1f\xbd\x3b\x0f\x1c\x70\x0b\x26\xad\xcd\xbf\x8a\x66\
+\x6a\xdc\x98\xcd\xa9\xb5\xed\xca\xdc\x85\x12\x8a\x1b\x82\x2c\x6a\
+\x56\xca\xb6\x17\xa5\x91\x8b\x5e\xd7\xa6\xa1\x51\xcc\x77\xaa\xac\
+\x75\x00\x6e\x68\xe3\x00\x6e\x6f\x5a\x95\x1b\x68\xd4\xe5\x8d\x40\
+\xbe\xe7\xad\x14\x5e\x49\x6d\x7b\xe9\x42\xac\x2d\x63\x4c\x52\x00\
+\xd3\x4a\x50\xc3\x50\xcb\x23\x27\xde\x04\xcc\xa1\x6c\xc0\x1d\x46\
+\xb5\x05\xa8\x59\xc8\x46\x23\x73\xe5\x1e\xe7\x4a\x75\x1d\x04\xa9\
+\x2a\x07\x50\x40\x26\xda\xd6\x7e\x2e\x5f\x12\x77\x6e\xa6\xac\x4a\
+\xe2\x0c\x29\x50\x76\x19\x57\xbf\x7a\xce\x26\xe3\x53\xf2\xac\xf2\
+\xaa\x44\x3b\x5f\x40\x68\x4b\x54\x33\x5a\x82\x23\x9e\x74\x51\xcd\
+\x85\x63\x5a\x6a\x31\xb2\xaa\xdf\x40\xa0\x7e\x54\x8c\x63\x95\x30\
+\xba\x9d\x43\xe5\xa2\x99\xc6\x63\x6d\xaf\x49\x91\x81\x40\xcc\x2e\
+\x23\x70\xde\xc3\x9d\x36\x88\x37\x6f\x39\xe9\x7a\x16\x7a\x17\xbe\
+\x72\x07\xd6\x96\x59\x7f\x18\x62\x3e\x14\x37\x35\x23\x01\x19\x4b\
+\x31\xca\xa3\x73\x55\x71\x18\xdb\xdd\x61\x05\x57\xaf\x33\x4d\x6f\
+\x31\x0d\x20\x04\x8d\x97\x92\xff\x00\x26\x97\x26\x1e\x29\x1f\x35\
+\xca\x75\x00\x69\x59\xbb\xf0\xac\x41\x1c\x22\x04\x26\x35\x72\xeb\
+\x98\x96\xde\x8e\x3c\x3e\x1a\xe7\xc8\xc2\xea\x6f\xe6\xed\x42\x18\
+\x58\x28\x16\x0a\x2c\x28\xe2\xdc\xff\x00\xa4\xfe\x95\xa4\xcc\x8b\
+\x0f\x85\x51\xe8\x67\xff\x00\x51\xb5\xa9\xb0\xc5\x04\x73\x2c\xb1\
+\x87\x05\x76\x17\xb8\xa0\x5a\x25\x22\xf5\x89\x84\xe5\x34\x57\xa5\
+\xa9\xa2\x06\xb5\x00\x85\x68\x60\x1d\x71\x18\x76\xc3\x48\x75\xb7\
+\x94\xed\x59\xe0\x12\x36\x34\x50\xb3\x23\x86\x06\xc4\x1a\xd4\xaa\
+\x8e\x09\x64\xc3\x63\x41\x63\x66\x43\x95\x81\x35\xab\x81\x99\xb1\
+\x31\x34\x99\x57\x2d\x81\x16\xf8\x4f\x30\x7d\xa9\x18\xec\x32\x63\
+\xb0\xeb\x22\x0b\x4b\x6b\x82\x39\xf5\x15\x9d\x85\x69\x30\xf2\x96\
+\x89\xca\xb6\xc7\xca\x35\xf7\xeb\x4e\xde\x35\x9f\x5b\xea\x48\xd8\
+\x91\xed\x51\x1a\x83\x8b\x92\x4f\xc2\x32\xfb\x9b\x6a\x6a\x84\x3c\
+\x4e\x41\x61\x2a\x44\xfa\xea\x40\x20\xd5\xdc\x06\x25\x31\x39\xc0\
+\x39\x5f\x31\x60\x87\x72\x39\xfb\xd6\xe5\x94\x61\xf4\x9c\x74\xb2\
+\x20\x54\x5f\x2a\xb6\xed\xd7\xb5\x3a\xab\xf1\x17\x55\x54\x56\xb1\
+\x0a\x0b\x9d\x7f\x2a\x6f\x82\x3b\x8a\x4c\x90\x61\x7c\x08\xf7\x90\
+\x0b\x91\xd2\x93\xc2\x21\xb1\xfb\x4b\xec\xa7\xc8\x2d\xb9\xeb\x54\
+\x73\x34\x85\x09\xdd\xc5\xfe\x64\xff\x00\x7a\xda\x08\x22\x81\x63\
+\x03\xd1\x61\xf3\xac\xce\xee\x9f\x11\x32\x78\xb1\x95\x36\xd7\x6b\
+\xf2\x35\x97\x2a\x14\x25\x4f\xa8\x1d\x6b\x58\x9a\xa3\xc5\x96\xcc\
+\xae\x3e\x21\xad\x5c\xe7\xd5\x14\x5f\x6a\x51\xfd\xe9\x8f\x4b\xae\
+\x6d\x40\xe1\xdc\xa6\x2d\x6e\x6f\xae\xa3\xad\x5f\x7d\x18\xdb\xad\
+\x67\x46\xb9\xa5\x04\xef\x9a\xb4\x64\xd6\x43\xef\x54\xf1\x52\xdf\
+\x51\x4b\x90\xe9\x6a\x63\x02\x74\x1a\xd2\x64\x68\xc1\xb7\x88\x3e\
+\x40\x90\x3e\x75\x00\xd0\xbe\xd4\x4b\x94\x93\x96\x45\x6b\x6e\x06\
+\xe2\x84\x82\xc4\xdb\xff\x00\x15\x34\x59\xde\x85\xaa\x25\x95\x82\
+\xe6\x8a\x02\xe8\x37\x73\xcf\xda\xa6\xe1\x91\x5c\x02\x03\x0b\xd8\
+\xd6\x51\x4e\x35\xa8\x6a\x63\x2d\xec\x6f\x50\x10\x66\x1c\xfa\xd1\
+\x87\x40\x14\x9a\x2c\xb6\xa6\x65\xa9\xcb\x56\x2d\x28\x28\x2a\xca\
+\x4b\x2e\x61\x6b\x8d\xc5\x14\x71\xc6\xb1\xf8\x65\xe5\x75\xe8\x4e\
+\x5b\x7d\x29\x81\x68\x82\xd3\x80\x0a\xa9\x18\xb4\x51\x2a\x9e\x46\
+\xd7\x35\x2c\x5e\xd7\x73\x6e\x57\x34\xc8\x94\x5c\xb1\x04\xf6\x1c\
+\xea\x70\xe2\x62\xec\xf3\x46\xca\x76\x4f\x29\x21\x7e\x94\xe2\x05\
+\xac\xc1\x9d\x48\xb7\xa1\x5b\xf5\x3f\xc5\x47\x3a\x6b\x5b\x35\x83\
+\x02\x77\xb6\xb4\x06\x94\x1d\x7a\x57\x3b\xc7\x12\xe7\x96\xe3\xf0\
+\x8e\xb5\x2e\xc9\x14\x5e\x23\xeb\xf8\x47\x53\x54\x26\x91\xe5\x90\
+\xbb\x1b\x9f\xd2\xb3\x6e\x24\xe2\x71\x0d\x33\x6f\xec\xa3\x61\x4b\
+\x42\xc3\x73\xf2\xa8\xb6\xba\x1a\x76\x16\x23\x2b\x1b\x90\xaa\x37\
+\x35\x8e\xeb\x46\xe1\x30\xe6\x5f\x3b\x9c\xa8\x39\xf5\xf6\xab\xc0\
+\x85\x5c\x88\x32\xa8\xe5\x4a\x04\x9b\x6b\x60\x05\x80\xa2\x26\xba\
+\x48\xc8\xf3\x1a\xec\xc6\x97\x9a\xba\xe6\x95\x86\x86\xa9\xce\x00\
+\xb9\x34\x9c\xe3\xdf\xb0\xa8\x05\xcb\x5e\xd6\xa8\x62\xc4\x6d\xb9\
+\xe6\x69\x81\xc5\x56\xbd\x10\x6e\xf5\x2c\x59\x06\x8c\x3d\x56\x57\
+\xa6\x23\x16\x36\x02\xe6\x9d\x06\xe6\xbd\x0e\x22\x41\x14\x51\xb9\
+\x22\xe6\x41\x61\x7d\x4d\x26\x6c\x54\x10\x86\xbb\x66\x2b\xea\xb6\
+\xcb\x54\xa7\x9d\xe7\x91\x66\x94\xda\xc2\xf1\xa7\xe1\xee\x7b\xd1\
+\x79\x19\x0e\xc5\x4e\xd3\x49\xad\x85\xb4\x03\xa0\xa4\xbb\xd2\xf3\
+\x80\x34\x34\xb7\x92\xb3\x79\x35\x83\x76\xbd\x1e\x00\xdf\x12\x0f\
+\xe1\x05\xaa\xa3\xc9\xad\x85\xc9\xab\x1c\x3a\xe2\x39\x1e\xfb\xd9\
+\x45\x12\xf6\xbe\x2d\x96\xd2\xe7\x41\xd4\xd0\x19\x54\x5e\xec\x08\
+\x22\xc6\xd4\xb6\x60\x35\xa0\x2d\x7d\x6b\x5a\x12\x4b\x15\xca\x5d\
+\xdd\x47\x27\x3a\x7f\x7a\x92\xee\x45\x89\xb0\xe8\x28\x0b\x50\x93\
+\x59\xd3\x86\x73\x05\x4d\xa8\x81\x6b\x5e\xff\x00\x51\x48\xbb\x5c\
+\x5b\xe7\x46\x49\x23\x4f\x9d\x5a\xb0\xe5\x62\x45\xf2\xe9\x4f\x84\
+\xf9\x88\xec\x7f\x4a\xac\x5c\x11\xe5\x3b\xd3\x62\x62\xa6\xd6\xb9\
+\xca\x7f\x4a\xd4\xa1\x48\x1a\x90\x75\xa5\x67\xca\x2e\x41\x3e\xd4\
+\x68\xc1\xb5\x17\xac\x34\x7c\x66\x8c\x52\xe3\xa6\x2d\x69\x94\x8b\
+\x74\xbf\x7a\x24\x37\x72\x37\xb5\x56\x92\x6b\x68\x01\x04\xef\x7a\
+\x98\x4b\x13\xa5\xea\xd3\x8d\x9e\x17\x29\xb1\x88\x9e\xeb\xef\x43\
+\xc4\x70\x8c\xef\xe3\xc0\xb7\xbf\xad\x40\xd8\xf5\xaa\x51\x4b\x6b\
+\x16\x24\x30\x3d\x2b\x57\x0f\x88\x59\x62\xf1\x43\x00\xc3\xd4\x01\
+\xfc\xeb\xa4\xb2\xcc\x65\x93\xa8\x36\x3a\x1a\x38\x5d\xd2\x55\x78\
+\xdb\x2b\xae\xa1\xbb\xd6\xb4\xc9\x16\x25\x2d\x2a\xef\xa8\x60\x2c\
+\x45\x65\xe3\x30\xef\x87\x97\x2b\x6a\x0e\xaa\xc3\x63\x45\x98\xa5\
+\x6c\xc5\x8c\x8a\x58\x83\x94\x71\x26\xcc\x80\x73\xa8\xc4\x44\xad\
+\x85\x99\xe6\x5b\xb9\x5c\xc7\x5d\xba\x0a\xcb\xe1\xb8\xaf\xb3\x4c\
+\x49\x17\x56\x16\x60\x37\xab\xd8\xbc\x76\x1d\xb0\xae\x91\xbb\x33\
+\x38\xb5\x8a\xda\xd5\xb9\xcb\x67\x63\x19\xc8\xe4\x48\xad\xa6\x84\
+\x56\xec\xad\xf7\x82\xfc\xc6\x6a\xc0\x17\x2c\x15\x45\xc9\xda\xb7\
+\x4a\x02\x40\x3a\x9c\xa2\xe4\xfb\x51\xc1\x72\x43\x30\x2e\x14\x1d\
+\x46\xa6\xaa\xf1\x66\x45\x85\x03\xba\xa9\xb9\xde\x89\x8b\x16\x26\
+\x2b\xaa\xde\xc2\x43\xcf\xda\xa3\x1e\x8a\x30\xcc\xc8\x35\x0d\xb9\
+\xd4\x9b\xf5\xa6\xdd\x81\x9d\x2d\x94\xf9\x9d\x47\x4d\x6e\x4f\xb5\
+\x2d\x8a\x9f\x2a\x2c\x8c\xd6\xbf\xa6\xc0\x7c\xcd\x1e\x6c\xb7\x2a\
+\x02\xf5\xb0\xb5\x2d\xdd\x8a\x9b\xb1\xd7\xbd\x73\x6c\x58\x50\xfe\
+\x38\x26\x38\xd9\x13\x52\x15\xae\x6a\xdb\x32\x9b\x95\x0e\xc7\xba\
+\xe5\xfc\xcd\x27\x00\xb6\x89\x9f\xf1\x1b\x0f\x95\x35\xc3\x91\xa2\
+\xb1\xaa\x0a\x53\x9b\xe8\xd6\x61\xf8\x7e\x1f\xef\x40\xee\xd6\xd1\
+\x88\xf6\xa9\x9d\xa2\x89\x6f\x34\xca\xbd\x86\xa6\x93\x16\x27\x0b\
+\x34\xa2\x24\x66\x0c\x76\x2c\x34\x35\x6a\x82\x36\x76\xb9\x16\x61\
+\xb3\x8d\xc5\x57\xc4\x3c\xc9\x2a\xa6\x22\x4b\xc4\xc7\x52\x39\x8a\
+\xb6\x14\xe6\x20\xe9\x61\xaf\x6a\xad\x28\x49\xe5\x12\xbd\xcc\x6b\
+\xa4\x6b\xf8\xbb\xd1\x48\x89\x12\x21\x0b\x70\x84\x58\xb5\xad\xa7\
+\x45\x1f\xbd\x73\x9b\x9b\xec\x06\xc3\xa0\xae\x66\xb9\xeb\xd0\x74\
+\xae\xb5\xf7\xa9\x04\x02\x7b\x0a\x35\x4b\x6c\x2a\x54\x51\x9d\x2a\
+\xc4\x10\x95\xd9\x45\x10\xa9\x03\xa5\x28\x39\x6a\x72\xf7\xa3\x60\
+\x91\xae\x69\xa4\x58\xc7\x7d\xea\xac\xfc\x4a\x24\x16\x82\x3c\xc7\
+\xf1\x3e\xdf\x4a\x91\xc1\x09\x16\x5b\x9e\x82\xa5\xad\x10\x1e\x34\
+\x89\x1f\x42\xc6\xb3\xe5\xe2\x38\xa7\x5b\x66\x54\xff\x00\x42\xda\
+\xa8\xcd\x21\x24\xdc\x96\x27\x72\x6b\x17\x9c\x87\x1b\x6f\x8a\xc2\
+\xb9\x03\xc6\x67\x2a\xe2\xc7\x2e\xda\xf2\xa2\x4c\x92\xdd\xa2\x91\
+\x58\x73\xed\x59\x31\x00\x11\x46\x9f\x11\x07\xbd\x80\x1f\xa9\xaa\
+\xd2\xe3\x0e\x1a\x4c\x98\x7f\x33\x83\xe6\x6f\xda\x8f\xde\x7a\xb1\
+\xa3\x8f\x90\x4b\x3f\x94\xdd\x54\x58\x55\x72\x47\x33\xf2\x14\x42\
+\x48\xf1\x10\x09\xe1\x16\xbe\x8e\xbf\x84\xd0\x5f\xf2\xa3\xd2\xe2\
+\xdd\xad\xf3\xad\x28\x50\x47\x02\x27\xc5\x6b\x9a\xcf\xc3\x29\x93\
+\x10\x8b\xd5\xab\x49\xc8\x2e\x48\xeb\x5a\xe3\xd0\xa8\x2e\x41\xf4\
+\xde\x84\xca\x2f\xb5\xaa\x76\xa5\x4c\x09\x7e\x80\xd3\xa0\xdc\xeb\
+\xd6\xa6\xf7\xdf\xe9\x48\x45\xb3\x5c\x9d\xa8\xcb\x81\xdc\xf4\x15\
+\x6a\x30\x9e\xa6\xbb\x38\xef\xf4\xa5\xa9\x20\x6b\xa9\xa3\x8c\x33\
+\x9b\x28\xf7\xed\x4e\xa1\x06\x1d\x0f\xd2\x89\x6e\x4e\x83\xf3\xa5\
+\x3c\xd8\x74\x62\xa2\x68\xe4\x90\x7c\x0a\x6a\x9e\x23\x19\x2b\xdd\
+\x41\xc8\xbf\x84\x51\xfa\x4b\xf2\xcc\x90\xfa\x9d\x58\xfe\x10\x75\
+\xaa\xf3\xe3\x65\x71\x95\x3e\xed\x7a\x2f\xf3\x54\x73\x1a\x90\xd5\
+\x9b\x6d\x38\xb0\x35\x55\x46\x17\x04\x97\x3d\xc0\xe5\xf5\x35\xd9\
+\xd9\x98\x93\x49\x6c\x42\xa6\x3c\xc5\x21\xb2\xb2\x00\x1a\xf7\xb5\
+\x1b\x5c\x3e\x5d\x49\xed\xce\x8d\x29\x73\x40\x4f\x7a\x62\xe1\xe7\
+\x71\x70\x84\x03\xcd\xb4\x14\x47\x0a\x8b\xeb\x72\xe4\xf2\x5d\x05\
+\x59\x52\xbc\x28\xd3\x4a\x72\xe8\x0f\x33\xc8\x55\xdb\x85\x40\x89\
+\xb2\x8a\x92\x48\x50\xa0\x05\x1d\x05\x2c\x9a\x7c\x0e\x26\xb8\x9a\
+\x12\x7b\x9f\x6a\x16\x63\x7d\xf4\xa8\xa5\x9a\xa0\x35\x05\x48\x1a\
+\xd1\xa8\xc5\xa6\x21\x03\x52\x69\x4b\xbd\x1a\xd2\x8c\x50\x73\x66\
+\x5b\x0e\x97\xa6\x40\xcc\x24\xcc\xc2\x96\xa7\x4a\x34\xad\x46\x55\
+\x71\xe8\xd0\xb9\x16\xf2\xb6\xc7\xb5\x0e\x18\x31\xd4\x5b\x5d\x35\
+\xad\x06\x41\x34\x46\x33\xbd\xbc\xa6\xa8\x94\x78\xd8\xad\xac\x6f\
+\xb1\xe5\x45\x98\x62\x52\x56\x0d\x6b\x0d\xfa\x53\x73\xbd\xaf\x6b\
+\x52\x61\x42\xad\x99\x88\xf6\xa3\xbd\xee\x3a\xd1\x0a\x74\x61\x63\
+\xa8\xa7\x42\x86\xde\x45\x36\xa5\xa2\xd8\xd8\x00\x5b\x73\x7d\x97\
+\xdf\xf8\xa2\x96\x35\x93\x43\x34\x99\xb9\x36\xc0\x7c\xa9\x82\x9a\
+\x8a\x19\x8e\x6d\x02\xe9\x4e\x85\xbc\x39\x03\x28\xb6\xba\xf7\xa4\
+\xa3\x1b\x28\x60\x3c\x45\x16\x65\xfc\x43\xa8\xa2\x57\xcc\x6c\x10\
+\x83\xdf\x95\x6a\x06\xb6\x1d\x95\x96\xe8\x6e\xbb\xdb\x9a\xf6\xa6\
+\x90\xb2\x46\x63\x91\x43\x29\xfa\x8f\x6a\xcf\xe1\xb2\x78\x73\x65\
+\x63\xe5\x7d\x0d\x68\x01\x63\xde\xba\xca\xcd\x66\x63\x30\x92\x40\
+\xd9\x87\x99\x0e\xcc\x29\x1a\x1d\x6f\xad\x6e\x03\xa5\xb7\x07\x71\
+\xd6\x90\xd8\x3c\x2b\xbe\x6c\xac\xa4\xf2\x07\x4a\x2f\x1f\xe2\x95\
+\x5b\x83\x42\x5a\x63\x3b\xdc\xaa\x0d\x3b\x9a\xd1\x94\x93\x0c\x86\
+\xe7\xd2\x4d\x72\x85\x54\x08\x83\x2a\x8d\x85\x73\x6b\x1b\x8e\xaa\
+\x7f\x4a\xd4\x99\x06\xf6\x06\x8f\x2b\x80\x1a\xea\xb4\x38\xd7\x8a\
+\x3c\x3b\xac\xa7\x56\x5b\x85\x1b\xd3\x66\x91\x62\x8d\xa6\x6d\x94\
+\x5c\x77\x35\x8a\x5a\x4c\x46\x2f\x31\xbb\x16\x3a\xfb\x51\xca\xe2\
+\x9d\xa9\xcd\xc4\xe3\x5d\x23\xc3\x82\x35\x3e\x76\xaa\xf2\x71\x59\
+\xb4\xcb\x14\x40\xff\x00\xa6\xf5\x64\xe0\x30\xe9\x33\x09\x5d\x9c\
+\x8b\xf9\x46\x80\x51\xa2\x41\x1b\x7d\xd4\x08\xa7\xa9\x17\x35\xc3\
+\x39\x37\xd1\x7f\x6d\xc5\xa4\x68\x04\xa5\x5b\x28\x2d\x6e\xa6\x91\
+\x36\x27\x11\x26\x8f\x33\x90\x4d\xce\xb5\xbc\xd6\x51\x91\x51\x00\
+\xb0\xd3\x28\xa4\xcb\x0e\x1d\xc1\xcd\x87\x8c\x9e\xa0\x58\xd6\xaf\
+\x1b\xfd\x5a\xf3\x6e\xec\x58\xe9\xa9\xe7\x51\x77\x8c\x82\xa7\x5b\
+\xd6\xe8\xc3\xe1\x51\x48\x18\x54\xee\x49\xbd\x56\xc5\x70\xe8\xe5\
+\xf3\xe1\xce\x56\xff\x00\xdb\x3c\xfd\xab\x17\x85\x3a\x9c\x3e\x39\
+\x71\x11\xa4\x78\x80\x10\x1d\x59\xaf\xea\x02\xdb\xfd\x45\x58\x90\
+\x66\x5b\xa1\x42\x08\xf2\xd9\x86\xd5\x91\x30\x29\x9e\x33\xff\x00\
+\x2d\x55\x2d\xdc\x9b\x9a\x47\x85\x26\x5c\xd9\x18\x0e\xb6\xab\xf5\
+\x62\xc6\xc1\x78\x21\x07\xc6\x9d\x10\xf4\x1a\x9a\x4b\xf1\x28\x14\
+\xda\x28\x19\xf5\xdd\xcd\xbf\x4a\xcc\xb5\x12\xa8\xe9\x47\xee\xfc\
+\x58\xd2\x4e\x27\x11\xd2\x4c\x3e\x5e\x99\x5b\xf9\xa7\xae\x23\x06\
+\xc3\x37\xda\x32\xf6\x23\x5a\xce\x87\x05\x3c\xab\x9a\x38\x0b\x03\
+\xce\xd4\xd4\xe1\x78\x92\xd6\x78\x84\x63\xab\x5a\xb5\x2f\x25\xd2\
+\xeb\x63\x30\x6a\x09\x12\xbb\x9e\x81\x6d\xf9\xd2\xbe\xdd\x88\x98\
+\xe4\xc2\x41\x97\x4d\xed\x73\xf5\xae\xc2\xf0\xec\x34\x63\x34\x8e\
+\xd2\x37\x41\xa2\x8a\xb6\x32\x85\xca\x8a\x15\x7a\x0a\xd7\x63\xa5\
+\x13\x82\x9a\x43\x9f\x11\x38\x56\x3b\x86\xb9\x34\x63\x87\x41\x94\
+\x03\x33\x5c\x6e\x72\xe8\x7d\xaa\xdd\x8d\x71\x01\x57\x33\xb0\x51\
+\xd4\xd5\x91\x6a\xaf\xfe\x99\x87\x2c\x2d\x3c\x84\x7e\x1c\xbb\xfd\
+\x28\xfc\x3e\x1d\x85\xda\x10\xcd\xd0\x9c\xc7\xfb\x52\xf1\x58\x92\
+\xde\x58\xae\xab\xd7\x99\xaa\xc0\x58\x97\x63\xa2\xea\x4d\x66\xd9\
+\x3c\x38\x6c\xd3\x34\xae\x5b\x2e\x51\x1a\x8b\x5b\x99\x27\xfb\x52\
+\x25\xc3\xe1\xf1\x6b\x91\xd3\x24\x9f\x0b\x8d\x01\xf7\x15\xcc\xc5\
+\x57\x33\x7a\xa4\x39\x98\x74\x1c\x85\x75\xae\x34\xac\xd2\xcd\xc1\
+\xcb\x27\x0f\xc7\x94\x9c\x30\x53\xa3\xaf\x51\x5a\x33\x20\x52\x0a\
+\x9c\xca\xc2\xe0\xf5\x15\x5f\x8f\xa6\x7c\x3c\x13\x5b\xcd\xaa\x13\
+\x6d\xfa\x55\x8e\x03\x1c\xb3\xe1\x4c\x33\x02\xa1\x35\x46\x6d\xed\
+\xcc\x51\x3d\xc5\xff\x00\x4e\xe1\x91\xfd\xe9\x97\x92\x0f\xce\xad\
+\x11\x52\x02\xaa\x04\x41\x65\x1f\x9d\x41\xda\xba\x66\x46\x50\x45\
+\x0b\x0b\xd4\x9a\x83\x52\x09\x5d\x2c\x49\xb5\x47\x6d\xbe\x54\x44\
+\x8a\x8b\x83\x52\x71\xd0\x0d\x0b\x13\xb2\x8e\x75\x57\x17\x8d\x77\
+\x06\x3d\x90\x1f\x42\xe8\x3e\x7a\xdc\xd3\xf1\x44\xae\x14\xb8\x36\
+\x28\x41\x07\x6f\x7a\xcc\x7b\xe6\x37\xde\xf5\x9e\x57\x0c\x11\x48\
+\xe5\xb6\x48\xd2\x39\x14\xdd\x4a\x8b\x03\xd8\xd3\x24\x1e\x21\x32\
+\x2a\x90\x6f\xe7\x5e\x6a\x69\x17\x14\x78\x9c\x40\xc3\xe1\x52\x6b\
+\xa8\x99\x89\x11\xb1\x1b\x0e\xf5\x82\x91\x7b\x5e\xc6\xdd\x6a\xcc\
+\x18\x57\x70\x19\xce\x45\x3c\xce\xe6\xa8\x60\x31\xbc\x52\x66\x76\
+\x9b\x13\x85\xc8\x8b\xba\x1e\x7c\xaf\x57\xb0\xdc\x4e\x53\x88\x48\
+\x31\x30\xc4\xcb\x26\x89\x2a\x8b\x0b\xf7\xa7\x8d\x95\x76\xb4\x70\
+\xf8\x36\xb6\x78\x33\x30\x16\xce\xc6\xe7\xe9\x4c\x8d\xb2\x05\x88\
+\x15\x03\x64\x60\xb6\xbf\x63\xde\x80\x99\xd4\x5a\x48\x23\x24\x6e\
+\x11\xac\xdf\x4a\x15\x9b\x0f\x22\xb2\x34\x99\x3a\xac\x9a\x11\x5d\
+\x3a\x64\xc6\x24\x9d\x77\xef\x40\xc6\xe7\xd8\xeb\x4a\x93\x17\x1a\
+\x49\x91\x88\x91\x46\xce\xa7\x5f\x9d\x13\x9d\x99\x4e\x65\x61\x71\
+\xde\x8d\x38\x96\x6a\x02\xd5\x04\xdf\x9d\xbb\x50\xb9\xb7\x3b\x50\
+\x5c\xcd\x50\x6a\x2e\x2f\xa0\xbf\xb5\x46\x60\x76\xbe\xb4\x24\xeb\
+\x7a\x82\x58\x5b\x4b\x51\xc8\x22\x8d\x7e\xf1\x82\x9e\x97\xb9\xa8\
+\xc3\x78\x53\x12\x15\xce\x6e\x4a\x74\xbd\x48\x71\x5b\x2e\x9b\xf3\
+\xa3\x03\x5a\x0f\x0b\x5d\xed\xef\x46\xa2\xca\x05\xef\x4a\x1a\xd3\
+\x12\x82\x31\x4c\x02\xd5\xa8\xc8\xd2\x98\xf1\xac\xcb\x95\xf4\x3c\
+\x9b\xa5\x29\x69\xe9\xbd\x69\x33\xe6\x8d\xe2\x72\x8e\x35\x1f\x9d\
+\x08\xad\x39\x23\x59\x93\x23\xef\xf0\xb7\x4a\xce\x91\x19\x24\x28\
+\xc0\x82\x0d\x62\xcc\x32\xe9\xae\xb9\x4f\x87\xbd\x8e\xa4\x9d\xcf\
+\x33\x5c\x05\x1c\xdf\xe7\x37\xb9\xb5\x0d\xe9\x02\x53\x70\x15\xaf\
+\x61\xb7\x51\xdc\x53\x16\xec\x72\x9f\x58\x17\xb0\xd9\x87\x51\xfc\
+\x52\x81\xa9\x92\xed\x87\x70\x2f\x75\x19\x92\xdb\x83\x4c\x47\x29\
+\x37\x16\xde\xb5\x0c\xf1\x05\x52\xee\x01\x20\x68\x35\xaf\x3f\x06\
+\x2b\x17\x31\x11\xa1\x05\x8f\xc5\x6d\x7e\xb5\xbd\x87\x89\x61\x85\
+\x50\x85\x66\xb0\xcc\x6d\x7a\xd7\x1b\xa2\x9a\x45\x8e\x86\xa4\x5c\
+\xd2\xd4\xaa\x7d\xd9\xd1\x6f\xe4\x27\x6f\x6a\x60\x16\xde\xb6\x04\
+\x2a\x31\x04\x58\x44\x0d\x8b\xee\x7a\x0a\x0c\x54\xf1\xe1\x94\x67\
+\xbb\x3b\x0b\xac\x60\x6a\x47\x5e\xd5\x9d\x36\x26\x69\x59\x89\x01\
+\x2e\x2c\x15\x4d\xc9\xf7\xaa\xf2\x90\x48\x77\x10\x99\xb1\x58\x85\
+\x82\x1b\x95\x1a\x0e\xe6\x9b\x0c\x71\xe1\x90\xc6\x08\xb9\x1e\x66\
+\xeb\x4b\xc1\xc0\x62\x87\x3b\x2b\x09\x1f\x6e\xc2\x98\xca\xbb\x9d\
+\x7d\xe8\xff\x00\xa5\x4b\x8a\x80\x31\x02\x40\x2c\x24\x17\xf9\xf3\
+\xaa\x97\xd6\xb4\x31\xe9\x9f\x0d\xa0\xd6\x33\x7f\x95\x67\x1d\xeb\
+\x1c\xbd\x31\xa6\x5b\x32\x2b\x8f\x89\x45\x2c\x92\xca\x6d\xa5\xff\
+\x00\x3a\x5e\x0d\xf3\x41\x97\x9a\x7e\x94\x43\xa0\x36\xa8\x16\x49\
+\x36\xb8\xd3\xad\x14\x7a\x4a\xa7\xa1\xa2\x2b\xe4\xca\x35\xcd\xce\
+\xb8\x47\x76\x00\x54\x75\x8f\xc4\x6e\xb8\xa6\x70\x80\x17\x21\x9b\
+\xb9\x06\xa8\xe2\x23\x9d\x65\xf1\xf0\xec\xc7\x5b\x94\xbd\xed\xf2\
+\xad\x4e\x2d\x22\xc9\x8a\x7c\xa3\xc9\x1a\xe4\xbd\xb7\x6e\x75\x44\
+\xe6\x04\x10\x6c\x6f\xbd\x72\xe5\x3b\x6e\x22\x71\x63\x72\x02\x92\
+\xb7\x20\x72\x34\xce\x16\x10\xe3\x61\x32\x80\xc9\x9b\x51\x4b\x75\
+\xcf\xb9\xf9\xd0\x46\x5a\x39\x01\x53\xa8\x34\x79\x53\xd1\x4a\x49\
+\x94\x8e\x9a\x1d\x2d\x51\x63\x41\x81\xc4\x2e\x2e\x30\x09\x02\x65\
+\x1a\x8b\x7a\xbb\xd3\xc2\x9b\x5f\x61\xde\xbb\x30\x55\xad\xca\x89\
+\x41\x27\x4a\x87\x96\x04\xde\x4c\xc7\xa2\x8b\xd5\x79\xb1\x2e\xc3\
+\x2c\x63\x20\xeb\xce\x8d\x5d\xac\xcb\x24\x71\x03\x9d\x81\x6f\xc2\
+\x37\xaa\x38\xdc\x43\x34\x2d\x29\x4c\xd9\x48\x01\x6f\xa0\x14\x36\
+\x24\xde\x89\x55\x4a\x95\x7f\x4b\x0b\x1a\x2d\xb4\xe4\x84\x47\x39\
+\x91\x6e\x30\x8f\x6e\x45\x4d\xe9\x18\x99\x64\x98\x18\xa3\x85\x94\
+\x73\x16\xb9\xad\x08\xd4\xa4\x69\x11\x36\x2a\x2c\xa4\x1d\x1b\xfb\
+\xd4\xb1\x6b\xdc\x92\x1b\x6b\xf3\xac\xe6\xc3\xaa\xb6\x26\x24\x2e\
+\x2c\xc5\x7c\xc2\xd5\xd1\xa3\x19\x02\xa0\x27\x31\xb5\xa9\xae\x09\
+\x37\x26\x9f\x80\x0a\xaa\x64\xb7\x9a\xf6\x14\xc8\x8a\xe2\x31\x24\
+\x18\x35\xcd\xe6\x7f\x13\x4b\x8d\x2f\x6a\xa9\x81\x91\xd7\x88\x46\
+\xd9\x89\x25\xad\xa9\xab\xdc\x6e\xc7\x07\x10\x36\xf5\x1a\xad\xc1\
+\xe2\x0f\x8a\xf1\x18\x79\x62\x19\xbe\x7c\xa8\xbf\xec\xa7\x8b\xd2\
+\x8c\xb2\x30\x1b\x03\x42\x68\x98\xdd\x89\x3c\xe8\x6b\xa0\x41\xa1\
+\x22\x8c\xd4\x11\x59\x40\xcb\xda\xba\xdd\xa8\xab\x8e\xd5\x24\x04\
+\x8e\x55\xf0\xa4\x24\x03\xcc\x72\xd2\xb3\x71\x11\x15\x95\xa3\x60\
+\x04\xa9\xb8\xe4\xc3\xa8\xad\x2a\xab\xc4\xcf\xdf\xea\xc4\x1d\x19\
+\x1b\xa7\x6f\x6a\xcf\x29\xd1\x8c\xf2\x29\x7c\x62\x31\x2f\x08\x12\
+\x58\xe6\x81\xec\x35\xe4\x6a\xd4\xaa\xa4\x16\x5d\x34\xb9\x43\xb8\
+\xfe\x47\x71\x4a\xc5\xdb\xff\x00\x47\xc4\xdc\x1b\x1c\xb6\xb8\xef\
+\x5c\xec\xe8\xb3\xb8\x3b\x5e\x39\xe3\xfe\x90\xdf\x4a\xb2\x8c\xa5\
+\x32\x48\x09\x5b\xdc\x58\xd8\x83\xd4\x56\x7e\x12\x53\x06\x21\x64\
+\x1b\x0d\xfb\x8a\xd0\x9d\x02\xbf\x94\xf9\x48\xba\x9e\xd5\x89\x7a\
+\x6a\xb4\xe3\xc7\x4c\x70\xba\xb2\xbb\x47\x6b\x31\x1e\xa5\xeb\xd8\
+\xd5\x59\x1c\xc9\x31\x77\xe6\x6e\x6d\x4e\xe0\x20\x3a\x4e\x8e\x33\
+\x28\x50\x6d\x56\xc4\x38\x61\xa8\x83\x5e\xec\x48\xae\xb3\x6c\xd6\
+\x4a\x9a\x2c\x33\xe1\xcb\x40\x09\x60\x34\x02\xe4\xfc\xc5\x27\x0d\
+\x8a\x68\x87\x87\x22\x66\x5e\x9b\x11\x57\x73\x90\x00\x5f\x28\x1b\
+\x05\xd0\x0a\x09\x95\x66\x89\xfc\x45\x04\xaa\x92\x18\x0d\x69\xb3\
+\xf8\x80\xb8\x8c\x33\x9d\x59\x90\xf5\x23\xf8\xae\x02\x37\x92\xd1\
+\xb7\x88\x6d\x7d\x36\x1e\xe4\xd5\x48\xb0\xd3\x49\x1e\x74\x8c\x95\
+\xeb\x57\x30\x51\x34\x38\x76\x0e\xb6\x77\x23\x9e\xb6\xa2\x5b\x7d\
+\x54\x72\x00\xab\x72\x83\x2f\x36\x46\xbd\xbd\xc5\xab\x92\x10\x40\
+\x28\x33\x03\xb1\x06\xf7\xa3\x8c\x95\x37\x06\xb9\xa2\x85\xbe\x12\
+\x87\xf1\x21\xb5\x6f\x02\xb6\x32\x0f\x1b\x1a\xa9\x18\xf3\x10\x33\
+\xdb\x61\x56\x06\x1a\x0b\x04\x55\x0a\x57\xd3\x27\x3b\xd3\x22\x48\
+\xe2\x8f\x24\x40\xd8\xfa\x98\xee\xd4\x56\xaa\x45\xa8\x61\x71\x98\
+\x80\x1a\xf9\x5c\x03\xb1\xa5\xa6\x6c\xf6\xb0\xbf\x7a\xb1\xb8\xcc\
+\x6e\x54\x8b\x35\xb5\xb5\xb6\x3f\x4b\x83\x5c\x22\xb9\x00\x26\x6b\
+\xec\x46\xb7\xfa\x53\x80\x2a\xa7\xf1\x0f\xa5\x15\xb5\xb5\x19\x8e\
+\x45\x5b\xb2\xb0\x1f\xd4\xbf\xbd\x42\x03\x7b\x90\x05\xb6\xad\x27\
+\x20\xa6\xa0\xa8\x51\x46\x2a\x16\x8d\x57\x4a\x4f\x10\x8e\xea\xb3\
+\x00\x09\x0a\x46\xbc\xcf\x2f\xd6\x9e\x9b\x0a\xec\x55\x86\x02\x52\
+\x76\x16\xf9\x6b\x50\x8c\xcc\x44\x8d\x98\xe4\x5b\xd8\x74\xd8\x54\
+\x07\xba\x86\x1c\xe8\x1c\xb2\x5c\xdb\x51\xb8\x35\x03\x45\x03\xe7\
+\x58\xd6\xf0\xd5\x6a\x34\x62\x0d\xc1\xd6\x90\x0d\x1a\xb6\xb5\x6a\
+\xc5\xcc\x10\xf1\x27\x55\xb0\x00\x9b\xb5\x85\x69\x06\xb9\xbd\x53\
+\xc0\xc7\xe1\x45\x99\xbd\x6e\x3e\x82\xac\x29\xae\x93\xa8\xcd\x3d\
+\x4e\x96\x3a\x83\xc8\xd2\xf1\x52\xb6\x16\x0c\xf1\xc8\x00\x26\xca\
+\xac\x2f\x63\x52\xa6\xa9\xf1\x32\xd3\x71\x05\x81\x6e\x42\xd9\x40\
+\xef\xce\xb5\x6f\x41\xd8\x3c\x3c\x98\x96\x32\x3b\xb6\x52\x7c\xce\
+\xdb\xb1\xab\xf0\xc7\x0c\x2b\x68\xd0\x7f\xa8\xee\x6b\x88\x54\x02\
+\x34\x16\x55\xd0\x5a\xa2\xe6\xa9\x31\x22\x46\xcb\xa1\xbd\xb9\x1a\
+\x02\x74\xa9\x90\xe9\x40\x08\xd8\xde\xfb\x55\x52\x01\xf3\x6a\x2e\
+\x0e\xe2\xb3\x71\x91\x18\xa6\x2a\x76\xdc\x1e\xa2\xb4\x89\xd7\x63\
+\x49\xc5\xc4\x26\x87\x2f\xc6\xba\xaf\x7e\xd5\x9b\x34\xc6\x7c\x32\
+\x98\xa5\x0e\x35\x1b\x11\xd6\xae\xdd\x4a\x86\x53\x75\x3b\x56\x71\
+\xd0\xdb\xa5\x1e\x12\x73\x11\xca\xd7\x28\x77\x1d\x2b\x12\x9b\x17\
+\xc6\xa2\xa5\xe5\xf0\x20\x79\x88\xcd\x94\x69\xf3\xa1\x5b\x10\x1d\
+\x4d\xd4\xd2\xe7\x99\xfc\x76\xc2\xb2\xab\x2b\xec\x6d\xaf\x6a\xd0\
+\x8c\xb9\x41\x22\xda\x79\x18\x83\xae\xf7\xd4\x1f\xce\x94\xa3\x3b\
+\x65\x22\xc0\x9d\x7b\x55\x8c\x4c\x18\x88\x03\x09\xf5\x77\x6c\xd7\
+\x1b\x6d\xa5\x20\xdc\x6a\x2d\x5c\xab\x6d\x75\xe1\xd8\x45\xb4\x6d\
+\x03\x35\xc7\xac\x36\xf5\x9d\xc5\xf0\x70\xe0\x98\x66\x72\x43\x6a\
+\xa2\xda\xfc\xe8\xb0\xf8\x9c\x42\x59\x44\xec\x14\x6b\x60\x6b\x37\
+\x13\x3c\xb3\xc9\x9a\x59\x19\xcd\xf9\xd3\xcb\x94\xcf\x04\x94\xc8\
+\x31\xd2\xc2\xe1\xa1\x0a\xb6\xfe\x9b\x9a\xd4\x79\x8e\x22\x24\x9e\
+\xe4\x86\x1a\x8b\xec\x79\xd6\x22\x29\x76\x0a\xa2\xe4\xec\x05\x6d\
+\x61\x22\x68\x70\x29\x13\xfa\xae\x49\x1d\x2f\xca\x8e\x16\xd3\x62\
+\x10\x86\x17\x15\x36\x14\x4a\x8a\xa6\xe0\x57\x11\x5b\x64\x26\xf5\
+\xd5\x35\xd6\xa9\x39\x4e\x99\x48\x0c\xa7\x91\x1b\xd1\x7c\x36\xb9\
+\x60\x36\x3f\x10\xf7\xeb\xef\x43\x6a\xed\x8d\x48\x2e\xba\x66\x04\
+\x10\x76\x20\xdc\x1a\xb1\x82\x17\xc3\x9e\xaa\xd4\xab\x82\x6e\x49\
+\x04\xee\x47\x3f\x71\xb1\xa6\xe0\x0d\xa7\x31\xb6\x50\x59\x74\xe8\
+\xdd\xc5\x53\xd5\x7c\x27\x8e\x1f\xf8\x58\x56\xda\x96\x26\xbb\x85\
+\x47\x93\x04\xd2\x5f\x59\x1a\xdf\x4a\x57\x18\x94\x4d\x89\x58\xa3\
+\x20\xaa\x0b\x0f\x7a\xbc\x23\xf0\xa1\x48\x41\x07\x22\xd8\xfb\xd5\
+\x3f\xdb\x57\xc2\xce\xf5\x07\x6a\x93\x73\x7d\x28\x4e\xf4\xd4\xeb\
+\x9a\xed\xeb\xaa\x39\x50\x9c\x4d\x09\x35\x26\x84\xd4\x90\x5b\xa5\
+\x56\xe2\xba\xf8\x6d\xd5\x48\xab\x06\x91\xc5\x01\xf0\x22\x16\x3a\
+\xdc\xd6\x6f\x85\x55\x1b\x41\x1b\x6c\x0d\xc1\xe6\x3b\x8a\x2c\x52\
+\x99\x70\x18\x88\x55\x7e\xf1\x6d\x70\x36\x24\x6b\xa7\xb8\xa4\xb0\
+\x24\xe5\xda\xd4\xd4\x6b\x62\x1a\x3b\xe5\x91\x95\x5d\x0f\xca\xd6\
+\xac\x42\xc0\x65\x60\xcd\x71\x6d\x76\x3b\xd6\x86\x05\xbc\x5c\x0d\
+\x89\xf3\x42\x6d\xff\x00\x49\xab\xf3\x47\x06\x20\x9f\xb4\xc1\x67\
+\xe6\xe9\xa1\xfa\x50\x61\xb8\x77\x85\x24\x86\x09\x44\xa8\xe8\x46\
+\x5d\x9a\xfc\xb4\xac\xce\x16\x53\xa7\x70\x01\xac\xe7\x96\x4f\xde\
+\xae\x1d\xa9\x5c\x26\x16\x8b\x0b\x23\x3a\x95\x32\x10\xa0\x11\x6d\
+\xa9\xc4\x76\xae\xb3\xc0\x00\x09\x36\x02\xf4\x38\xb7\x10\xe1\xdf\
+\x31\xb3\xb8\xb0\x1c\xed\x5d\x88\x38\x87\xc5\x88\x22\x93\x22\xb2\
+\x06\xf6\x16\xa1\x9f\x06\x83\x0e\xef\x79\x0b\x28\xbe\x76\xd8\xf6\
+\xab\xff\x00\x01\x18\x2c\x48\x48\xc4\x72\x29\x28\x35\x04\x6e\x2a\
+\xca\xcb\x86\x94\x12\x98\x80\x00\x3f\x10\xb5\xeb\x39\x04\x92\x9f\
+\x06\x25\x2c\x58\xed\x6a\xb6\x9c\x39\x96\xe0\xcc\x99\xbf\x09\x16\
+\xfc\xeb\x32\xdc\x2b\x48\x84\x0c\xc0\x82\xa7\x40\x41\xbd\xe8\xd4\
+\x69\x4b\xc2\x44\xd0\x21\x8d\xca\x92\xc7\x37\x94\xdf\x91\xa6\xd6\
+\xe0\xa9\x14\x4c\x52\x38\xcc\xb2\xb6\x54\x1c\xed\x72\x7d\xaa\x10\
+\x28\x53\x24\x87\x2a\x2f\xa8\xfe\xd5\x99\x8b\x9e\x4c\x5e\x23\x41\
+\xa0\x36\x45\x1c\x85\x56\xe0\x5b\x6e\x26\x43\xe5\xc2\xc0\x2f\xc9\
+\x9b\xcc\x4f\xca\x8a\x57\xc7\xaa\x91\x24\xb9\x21\x91\x6f\x90\xb8\
+\x56\x53\xda\x9f\x84\xc3\x47\x83\x50\x02\x86\x9b\x76\x72\x3d\x3d\
+\x85\x76\x35\x4c\xd8\x62\xbe\xa6\x53\x98\x5c\xdf\xde\x9c\xb9\xda\
+\x26\x0c\x37\x14\x8c\xf8\x89\x88\x1a\x8f\x4f\x8b\x76\xb7\xb5\x1a\
+\x63\xe6\x89\xc4\x78\xc8\x73\x10\x6c\x58\xe8\xc3\xf9\xa6\xc3\x89\
+\x56\x44\x56\x8e\x42\xcb\x60\xc5\x75\xfc\xaa\xc3\x2c\x73\xc6\x52\
+\x4b\x4a\x9f\x46\x5a\x64\xfe\x55\xbf\xd4\xc2\x63\x9d\x73\x41\x20\
+\x71\xd0\xe8\x47\xca\xa4\x82\xa6\xc4\x5b\xde\xa9\x62\x78\x6c\x89\
+\xf7\x98\x66\x2e\xa0\x7b\x30\xae\x83\x88\x4b\x1d\x93\x10\x9e\x22\
+\x8e\xba\x30\xf9\xd5\xbf\xd1\x9f\xc5\xe5\x26\x97\xc4\xcf\xfc\x1a\
+\xc2\x0f\x9a\x76\x20\xff\x00\xa7\x99\xa6\x46\xd1\xcd\x1e\x78\x5b\
+\x30\x03\x51\xcd\x6a\xb7\x13\x90\x7d\xa5\x23\x3b\x04\x28\x18\xf2\
+\x6b\xde\xd4\xdf\x14\xf5\x51\x81\x92\x14\x63\x60\x59\x75\xb7\x22\
+\x34\xa5\xc4\xc4\xa5\xb2\x93\x97\x4d\x28\xf1\x09\x96\x49\x63\x24\
+\x8b\x36\x70\x0e\xe0\x1f\xef\x53\x83\x86\x59\x17\xd2\x04\x77\xf5\
+\x1a\xe7\xf5\xa4\x00\x4f\x23\xfa\xd5\xdc\x16\x16\xd6\x92\x51\x71\
+\xb8\x5e\xbe\xf4\xdc\x2c\x70\x44\x40\x52\xa2\x53\x7b\x16\x3a\xff\
+\x00\x6a\x64\x88\x54\x16\x98\x65\x03\x76\x23\x5a\xdc\xe2\x2d\x33\
+\x52\x46\xd7\x3b\x0a\xec\xc0\x10\x0d\x66\xcf\x36\x69\xfc\x41\x7c\
+\xab\x6c\xa7\xb7\x7a\xd1\x23\xc4\x54\x90\x69\x9d\x73\x53\x28\xc3\
+\x90\xf4\x35\x4e\x56\xf0\xf8\xe1\x3c\x84\xb5\x66\x25\xd4\x29\x27\
+\x53\xb5\x66\x62\x8e\x6e\x2e\xcd\x60\x4f\x8a\x36\xe7\xad\x36\xf4\
+\xa3\x66\x4d\x24\x60\x39\x1a\x8b\xe9\x43\x35\x8c\xcf\xa0\xdc\xf2\
+\xa8\x0c\x47\x7f\x9d\x6b\x42\x0b\x5c\x91\x44\xbc\xe8\x52\xc4\x74\
+\x23\xad\x70\x37\xed\x6d\xe8\x48\x7e\x7d\x28\x2f\xa5\xea\x64\x36\
+\x5d\x4d\x46\xf4\x54\xa9\xc4\x60\xce\xa6\x64\x1a\x8f\x58\x1f\xad\
+\x51\xb0\xad\x70\x1b\x3d\xd4\x12\x7b\x55\x7c\x56\x0f\x31\xbc\x6b\
+\x91\xb9\xa9\xe7\xed\x59\xb3\xeb\x52\xaa\x61\xe5\x78\x49\xca\x6e\
+\x0e\xe0\xec\x6a\xdc\x13\x47\x26\x24\x16\x21\x18\xc7\xe5\xbe\xdb\
+\xf5\xaa\x45\x48\x36\x3b\xd4\xb0\x6f\x23\x80\x4e\x4b\x86\x03\x7b\
+\x1a\x25\xa6\xb4\x58\x39\x1e\x19\x4c\xea\x77\x04\x5c\x52\xfe\xc3\
+\x85\x63\x7f\xb2\xb0\x3c\xf2\x35\x87\xd2\xa8\xea\x23\x0f\x1c\xbe\
+\x5e\xa0\xfe\xa2\xa0\x4f\x23\xe8\x5d\xaf\xef\x57\xea\x7d\x18\x6e\
+\x22\x0c\x34\x2e\x55\x73\x3d\xc5\x8f\x9b\x6a\x54\x71\xe1\xd1\xc1\
+\x8f\x0a\xa0\xff\x00\x56\xb5\xc0\x51\xa8\xd2\x82\x2c\xc4\x9d\x95\
+\x40\xfc\x20\x54\x85\x5b\xfa\x45\x08\xa9\xbd\x20\x56\xf7\xfa\xd4\
+\x1f\x7a\x8b\xd7\x6a\x6a\x4e\x3b\xee\x3e\x95\xd6\x3d\x45\x4d\xab\
+\xaa\x48\x1b\xdb\x63\x5c\x74\xa9\xde\xba\xc7\xb1\xa9\x20\x94\x48\
+\x8c\xb2\xb6\x54\x1c\xfa\xd5\x29\xf8\x89\x91\xbc\x28\x07\x86\x3e\
+\x16\x27\x5b\xf7\xae\xe3\xce\xde\x2c\x71\x0d\x15\x50\x1b\x77\x34\
+\xee\x19\x86\x8e\x2c\x32\xe2\x24\x50\x59\x86\x60\x4f\xc0\xbd\x7d\
+\xeb\x3b\x6d\xc8\x73\xad\x3b\x04\xb0\x9c\x42\xe2\x66\x5f\x0f\x38\
+\xcc\xaa\xdb\x5e\xad\xcb\x7c\xc6\xfb\xd2\xf0\x91\xc6\xf0\x09\x64\
+\x19\x9f\x31\x39\x49\xd1\x6f\xa8\xa6\x4a\xda\x92\x6b\x70\x7d\x2f\
+\xe1\x14\x24\x54\xee\x2f\xb0\xae\x53\x7d\x41\x20\x76\xa5\x04\x8e\
+\xd4\x07\xc4\xbe\xc2\xdd\xa8\xc9\x39\xf2\xef\x50\xc6\xc4\x0e\xb4\
+\x20\x9a\x13\x46\x68\x1b\x40\x4f\x4a\x10\x4e\xa6\xf5\x53\x8a\x13\
+\x26\x24\x22\x7c\x20\x00\x07\x33\x57\xa1\x1e\x23\x6a\x3c\xab\xa9\
+\x17\xde\xa8\x46\xc1\xb1\x99\xdb\x7b\x97\xfa\x6b\x59\xe4\xd4\x2a\
+\x00\x7c\x67\x48\x99\x57\xc2\xb6\x79\x48\xbe\xbd\x05\x0e\x23\x06\
+\x26\x97\xc4\x8f\x16\xc5\xfa\xca\x2c\x4f\xcc\x69\x4f\x2b\xe1\x40\
+\xa9\x6b\x34\x87\xc4\x93\xdc\xf2\xa8\x55\xbe\xf5\x9c\xeb\xb4\x98\
+\xe3\x9f\xc1\x3f\x68\x42\x19\x3d\x2e\x35\x0c\x2a\xc7\x0b\x4f\xf3\
+\x24\x3f\x08\xb0\x3d\xea\xae\xe0\xe5\x1b\x75\x35\xa3\xc3\x93\xfe\
+\x04\x58\x80\x59\x89\x60\xcc\x05\xad\xa5\x6a\x0a\x8c\x6e\x21\x20\
+\x11\x19\x95\x9f\xc4\x04\xe6\xcd\xa8\xd6\xd4\x50\xaa\x4e\xb9\xb0\
+\xce\x24\xed\xb3\x0f\x95\x27\x8b\x64\x64\x80\x85\x0f\x95\x4f\x99\
+\x9b\x2a\x03\x7f\xce\xa9\x78\xe1\x08\xfb\xc7\x62\x0e\x9e\x19\xc8\
+\xa3\xdb\xad\x57\x96\x5e\xd6\x74\x6f\x13\x90\x8c\x68\x31\xbd\x8a\
+\x28\x17\x1d\x45\x36\x18\x04\x98\x70\xf8\x89\x24\xcd\x26\xa3\x5d\
+\x87\xb5\x57\x82\x07\xc6\x67\x95\x0a\xa9\x07\xcc\x09\xb7\xce\xb4\
+\x25\x3e\x7d\x35\xb0\x00\x77\xa2\x77\xda\x56\xc0\xe1\xcc\x12\x34\
+\x99\xd7\x2e\x56\x02\xc7\x52\x4d\x34\x0f\x95\x48\x50\xa2\xc3\xf3\
+\xa1\x93\x53\x6e\x94\xe6\x21\x8b\x16\xd3\x97\x3a\x62\x85\x08\x5e\
+\x46\xca\x8b\xbb\x54\x44\xaa\x22\xcf\x21\xca\x8a\x35\x35\x43\x15\
+\x34\xb8\xe9\x84\x50\xa1\xc8\x0d\x95\x47\xea\x69\xb7\x10\x71\xd8\
+\x97\xc5\x4a\x23\x8d\x48\x8c\x1b\x22\x0e\x7d\xeb\x43\x87\xe1\x57\
+\x06\xa1\x9e\xc6\x73\xff\x00\xd3\xfb\xd1\x61\x30\xf1\xe0\xd0\x65\
+\x0a\xf3\x73\x7f\xc3\xd8\x53\x54\x5c\xdc\xd3\x38\xfd\xa3\x5c\x54\
+\xb0\xef\xde\xa7\x0c\x72\xb9\x16\xbe\x61\x6a\x34\x5a\x60\x5c\xdf\
+\xcd\x68\x6b\xa2\x51\x1d\xfc\x24\x09\x7d\xed\xbd\x0e\x25\x0a\xa3\
+\x4e\xac\x55\x97\x9f\x5e\xd4\xe8\xc1\x2a\x6f\xb8\x36\x35\x18\x98\
+\xcc\xb6\x86\xf6\x55\x37\x76\xfd\xaa\xc4\x4e\x0f\x16\x24\x60\xae\
+\xb6\x63\xa0\x75\xda\x9b\x8a\x82\x2c\x52\xda\x51\x67\xd6\xce\x34\
+\xd7\xbd\x28\x60\xa3\x59\x96\x45\x9a\xca\x1a\xe4\x15\xd4\xd5\x96\
+\x39\x98\x9b\x6e\x6f\x54\xdc\xed\x7f\xe3\x28\x24\xfc\x36\x76\x95\
+\x80\x20\x21\x3d\x43\x0a\x87\x03\x11\x11\x64\x24\xa4\xea\x4a\xf6\
+\x3d\x3d\xeb\x47\x89\x46\xb3\x70\xf3\x03\xb1\x1e\x23\x59\x48\xe5\
+\xfd\xab\x0b\x86\xca\xd8\x4c\x63\x61\xa5\xd1\x59\xac\x6f\xf0\x91\
+\xb1\xac\x5e\xae\x19\xda\xc7\x09\x55\x9e\x73\x1c\xce\x49\x78\xd4\
+\xa9\x36\xb1\xb0\x1e\x5b\xf5\xb8\x3f\xec\x56\x8a\x07\x13\x08\x94\
+\x05\x7c\xb7\xb7\xe0\x15\x93\x82\x85\x5e\x18\x62\x11\x96\x77\xb3\
+\x02\xbb\x8d\x6b\x68\x44\x90\xca\xcc\xac\x59\x88\xb1\xd0\x00\x4f\
+\x33\x4f\x1f\x15\x23\x11\x83\x52\xb7\x80\x5c\x8d\xc1\x1a\x9e\xe2\
+\xaa\x9f\x14\xb0\x46\x2e\xdc\xac\x4e\xbf\x4a\xd1\x04\x8a\x89\x50\
+\x4c\xca\xf9\x8a\x48\x9b\x35\xaf\x7a\x6c\x12\xa9\x34\x6d\x1d\xbc\
+\x45\x2b\x7f\xc5\xa5\x68\x70\xe9\x56\x4c\x3a\x44\x74\x74\x04\x2d\
+\xf9\x8a\x5e\x26\x19\xe6\x20\x2f\x85\x65\xd7\x43\x6b\x9e\xba\xd2\
+\xf0\x0a\xc9\x8f\x8d\x58\x10\x43\x73\xa6\x75\x53\x46\x1f\xf3\x54\
+\x9d\x81\xbf\xd2\xb1\x61\x19\xf1\xe0\xa9\xd1\xa5\xba\xdf\x90\xbd\
+\x6c\xc2\x7e\xf5\x7d\xed\x58\xa2\xe9\x8e\x00\x5b\xcb\x26\x97\x36\
+\xb6\xb5\x72\xf8\xa3\x66\x7d\x66\x6f\xf5\x1a\x85\x15\x33\x5f\xc5\
+\x7d\x47\xa8\xf2\xef\x43\xaf\x61\xf9\xd6\x80\xd4\x29\x2c\x58\x79\
+\x46\xa7\xe4\x2b\x29\xb8\x96\x20\x4c\xe2\x30\x42\x83\xa0\xab\x9c\
+\x4d\xcc\x7c\x38\xda\xf7\x76\x00\xd6\x41\x3a\xdf\xeb\x58\xe5\x73\
+\xc6\xa4\x5f\x87\x88\x2c\x8d\x7c\x4c\x36\xe4\x0a\xff\x00\x15\x2f\
+\xc4\xa0\x53\x95\x61\x76\x3f\xd4\x6c\x2b\x38\x11\xf8\x87\xd6\xb8\
+\xe6\x3b\x58\x0e\x57\xa3\xf5\x4e\x43\xf1\x38\xcc\x44\xd7\x19\xb2\
+\x2f\x45\xd2\x82\x1c\x6e\x2a\x11\x65\x94\x95\xfc\x2d\xa8\xa0\xe5\
+\xb8\xbf\xb5\x5f\xc0\xe1\xa2\x38\x41\x23\xc6\x24\x67\x26\xdd\xa8\
+\x9b\x6a\xb9\x0b\x18\xcc\x36\x20\x85\x99\x7c\x37\xfc\x43\x6a\x39\
+\x30\x6e\x14\x34\x6c\x24\x07\xf0\x9d\x68\xce\x03\x0d\x20\xb9\x56\
+\x8c\xff\x00\x4e\xb4\xb5\xc0\xe2\xf0\xe7\x3e\x12\x51\x27\x60\x6c\
+\x7e\x9c\xeb\x5d\xfd\x1d\x2b\x4f\x01\x2d\x9d\x33\x2c\xab\xea\x1b\
+\x67\x14\xa5\x4c\xc7\x32\x03\x6b\xfd\x3d\xea\xf2\xe3\xca\x9c\x98\
+\xbc\x31\xb8\x3b\x81\x63\x53\x2b\x60\xe6\x91\x1e\x19\x32\x3b\x1c\
+\xad\x71\x6c\xda\x6d\x46\x45\xb5\x5d\x52\xdc\xc9\xf7\x34\x40\x5a\
+\x9c\xf8\x59\x46\xa9\x67\x07\x9a\x9a\x53\xab\x21\xb3\x29\x1e\xf5\
+\x62\x45\x75\x45\xeb\xaa\x4e\x22\xe6\xa4\x57\x0a\x9a\x92\x40\xae\
+\xae\xae\xa5\x3a\xdd\xab\xad\xad\x4d\x75\xaa\xc4\xa7\xc7\x63\xce\
+\xb1\x4e\xa2\xc4\xae\x46\x37\xe6\x36\xd3\xfd\xef\x4d\xc1\xb1\x97\
+\x0e\x80\x90\x52\x15\xd1\x6d\xcc\x31\x02\xff\x00\x91\xa7\x49\x1f\
+\x8f\x87\x93\x0f\xcd\x85\xd7\xdc\x55\x6e\x1e\xcc\x85\xe0\x73\x6c\
+\xe8\x96\x1c\xb3\x6a\x7e\x5a\x00\x2b\x39\xda\xf8\xbd\xc3\xc9\x2b\
+\x2a\x12\x2f\xa3\x0b\xf3\xa2\x90\x5c\x58\xfe\x54\x8e\x1c\xc0\x63\
+\x2c\x7e\x20\x54\x55\x87\xb1\xad\x4f\x05\xf5\x5d\x94\x96\xcb\x5c\
+\x17\x21\x1a\xe8\x69\x84\x73\x1b\xfe\xb5\x04\xa8\x4c\xee\xe1\x54\
+\x73\x35\x12\xda\xec\xd7\x5e\x5b\x9a\x9c\xba\xdc\xb5\xcd\x4c\x6f\
+\x0c\xa4\x84\x97\x6e\x45\x6d\x45\x94\x13\x65\x74\x24\x6e\x2f\x6f\
+\xd6\xa4\x59\x15\xd9\x46\x52\x58\x85\x51\xb9\x3b\x53\x0c\x4d\xb8\
+\x1a\x75\xbe\x9f\x5a\x8b\x2b\x1b\xe8\xc2\x2d\x06\xb7\x05\x8d\x58\
+\x95\xe4\x56\x4c\x24\x8c\x8c\xb6\x60\x00\x21\xc0\x1a\xf3\xfc\xaa\
+\x9c\x30\x9c\x99\x94\x11\x9b\x43\x2b\x68\x00\xe7\x6e\xb5\x7f\x1f\
+\xe4\x81\x5d\x15\x43\x33\x58\xf9\x46\xba\x55\x2b\x97\x62\x59\x8b\
+\x1e\x75\x8e\x53\xb3\x13\x29\x0f\x29\x61\xb6\xc2\x84\x81\x6d\x6a\
+\x76\xae\x35\x92\x18\x90\x34\x81\x54\x1b\x13\xa8\xbe\xf4\xec\x04\
+\x0a\xd2\x33\x38\xba\xc5\xa1\x1d\x5b\xff\x00\x34\xdc\x36\x1c\xa6\
+\x11\xe7\x26\xcd\x94\x95\x16\xe5\x56\x32\x2c\x68\xb1\xa0\xd2\xc0\
+\x93\xd4\x91\x5b\x9c\x46\x93\xc4\xd0\xe2\x38\x79\x03\x78\x9b\x30\
+\x00\x72\xac\x60\x3a\x0a\xf4\x11\xb1\x57\xb8\x17\xb6\xe3\xf6\x35\
+\x9b\xc5\xb0\x9e\x0c\xbe\x2a\x29\x31\xbe\xa0\x9e\x47\xa5\x1c\xf8\
+\xfd\x52\x87\x82\x39\x18\xf5\x8c\x1b\x2c\xbe\x53\xde\xae\x85\x02\
+\x52\x3a\x0e\x75\x9b\xc3\xe3\x69\x31\xf1\x22\x9b\x12\xe3\x5a\xd8\
+\x97\x2b\x48\xc5\x45\x81\x26\xd5\x70\x9d\x2a\x55\xaa\x5a\x35\xf0\
+\xcc\x8d\xe5\x55\xdc\xd1\x48\xd1\x41\x18\x92\x72\x40\x3e\x95\x1b\
+\xb5\x51\x69\x26\xe2\x38\x85\x88\x2d\x90\x1d\x15\x74\x0a\x29\xb4\
+\x47\x4c\xd3\xf1\x0c\x42\xc3\x12\x15\x8c\x6c\x39\x7b\x9a\xd0\x82\
+\x38\xf0\xb0\xf8\x50\x9d\x4f\xad\xc6\xed\xfd\xaa\x62\x54\x81\x0c\
+\x30\x8b\x20\xe7\xcd\xbb\x9a\x9b\x53\x26\x76\x82\x06\xb4\xd8\xd7\
+\x95\x42\x8b\x53\x10\x56\x85\x12\x8d\x6d\x4c\x41\x50\x83\x4a\x35\
+\x14\xc0\x9b\x84\x90\x30\x17\xd2\xe4\x75\xa3\x28\x42\x05\x3a\x93\
+\xe6\x63\xd4\x9d\x6b\x94\x03\xa3\x6c\x41\x14\x69\x73\x18\xcf\xeb\
+\x5f\x2b\x58\x74\xd8\xfd\x2b\x51\x14\x56\xc0\x9b\x6c\x2a\x02\xe5\
+\x50\x29\xd7\x5b\xdb\xf2\xb5\x00\x07\x2e\xa3\x51\x46\x25\x3e\x28\
+\x40\x78\xd3\xa2\xdc\xfc\xeb\x23\x8f\xc7\x71\x16\x25\x45\x8b\x79\
+\x58\xf7\x15\xaf\xc5\x74\xc4\x8f\xf4\x0f\xd2\xb3\xb8\xbe\x5f\xfd\
+\x28\xe6\xdf\xc4\x19\x3d\xf9\xfe\x55\xcf\x9c\xf5\xae\x2d\x3c\x1c\
+\x0b\x86\xc3\xa1\x0b\x69\x1d\x05\xcf\xe1\x16\xda\xb8\xdc\x9a\x7e\
+\x28\x7d\xe6\x51\xb0\x00\x7d\x00\x14\x83\xa5\x69\x97\x0a\x25\x34\
+\x35\x2b\x52\x18\xda\x89\x81\x91\x40\x06\xce\xba\xa3\x5f\x63\x42\
+\xb4\x40\xeb\x4c\x43\x0d\x9d\x44\x83\x42\x77\xec\x79\xd6\x6f\x1b\
+\x8d\x93\x18\x66\x1b\x4b\xe6\x06\xb4\x09\xca\xcc\xe1\x4b\x2b\x6a\
+\xe0\x6e\x0f\x5a\x99\x16\x39\x22\xc9\x20\x12\x46\x76\x20\xed\xed\
+\x55\x9b\x0c\xea\xab\x61\xb1\xf0\xc8\x80\x62\x2e\x8e\x05\xb3\x01\
+\x7b\xd3\xda\x6c\x28\x5c\xc7\x13\x19\x03\xa6\xff\x00\x4a\xac\xfc\
+\x32\x26\x6b\xc7\x88\xca\x3a\x32\x9b\xfe\x54\xa9\xb8\x64\xf1\xdc\
+\x96\x8f\x2f\x22\x5a\xd7\xa3\x79\x45\xd0\x78\xa6\x29\x67\xcb\x1c\
+\x57\xc8\x97\xd4\xf3\xaa\x95\x63\xec\x73\x88\x4c\x9e\x04\xae\xa3\
+\xf0\x2e\x9f\x5a\x42\x14\x75\x25\x43\x02\xbe\xa5\x61\xa8\xac\x5d\
+\xfa\xd4\xc7\x0b\xd7\x58\xd4\x8a\x90\x3c\xb7\xa0\x86\xc6\xb5\x78\
+\x6d\x9f\x87\x2d\xbe\x06\x20\xfc\xeb\x2f\xe5\x57\xf8\x1c\x83\xc4\
+\x78\x0f\xfc\xc0\x32\xfb\xd6\xb8\xfa\x2f\x8b\x56\xae\xb5\x19\x17\
+\x14\x24\x6b\x5d\x18\x43\xda\x45\xc9\x2a\x89\x01\xd2\xcc\x2f\x55\
+\x8e\x0b\x0e\xf2\xfd\xde\x68\xc2\x12\x49\xbd\xc5\xc8\xb5\xaa\xd1\
+\x16\x89\x8e\x6c\xbb\x00\x7d\xcd\xaa\x5d\x42\x9c\x8a\x3c\xab\xa0\
+\xa3\x16\xb3\x1f\x0b\x8b\xc1\xfd\xec\x12\xe6\x41\xbd\x8e\xde\xe2\
+\xad\x60\x31\x23\x15\xf7\x4e\xa0\x48\x06\x9a\x68\xd5\x65\x09\x56\
+\xb8\xff\x00\xcd\x51\xe2\x78\x51\x1f\xfc\x4c\x07\x28\xbf\x99\x7f\
+\x09\xa3\x33\xc3\xba\xb0\xf8\x58\xe4\xbe\x51\xe1\xb7\x3e\x9f\xda\
+\xa9\xcc\x8b\x13\x65\x92\x44\x53\xca\xe7\x7a\xb5\x83\x91\xf1\x8e\
+\xc9\x2c\x8c\x72\x0c\xc5\x41\xb6\x70\x76\x3f\xcf\xb5\x49\xc2\xc6\
+\xd8\x93\x11\x04\xc2\x10\x31\x07\x52\x2f\xd2\xac\xdf\x12\x93\x29\
+\x53\x63\xf9\x57\x0a\xb1\x8d\x84\xc5\x2f\x55\x61\xe5\xb7\x4a\x4f\
+\xb5\x18\x5c\x05\x75\xaa\x46\x82\xa0\x1b\xd2\x93\x50\x6a\x6b\x8e\
+\xa2\xa4\x10\x4a\xb0\x61\xb8\x3a\x55\x3e\x34\x1a\x2c\x44\x8e\x9e\
+\x51\x94\x49\x19\x07\xa6\x9f\xb8\xab\x6d\x53\x2c\x51\x62\x03\x44\
+\xe3\xcc\x51\x42\xb5\xbd\x37\xfe\xe0\x56\x6c\xde\x90\x38\x64\x8b\
+\x89\x9a\x29\xd2\xd9\x81\xb4\x8a\x39\x1e\xb5\x64\xd7\x9e\xc1\xb4\
+\xf8\x4e\x26\xa2\x13\x66\x12\x65\x3a\xdb\x4a\xf4\x12\x32\xb4\xbe\
+\x22\xb7\x92\x41\x99\x7d\xaa\xe1\x76\x1a\x9b\xd2\x38\x92\x5f\x07\
+\x98\x35\xad\x25\xed\xd7\x4a\x2b\xf9\xf3\x0d\x40\xa6\xe4\xf1\x3c\
+\x10\xc3\xca\x25\x24\xdc\x5e\xfa\x53\xe8\x27\x0c\x7c\x18\x11\x14\
+\x10\xc4\x5d\x88\xef\x4c\x2c\x58\x11\x20\x0e\x3f\xa8\x5e\x80\x7f\
+\x9b\xf3\xe7\x4c\x37\xbd\x51\x06\xd1\x65\xcb\xe0\x47\x6e\x9a\xff\
+\x00\x35\x20\x8b\x05\x00\x28\x1b\x28\xda\xa6\xc6\xa4\x0b\xd2\x89\
+\xe2\x5a\x60\xd0\x85\xbd\xa4\x3f\xa5\x66\xc6\x72\xb5\xcf\x3d\xeb\
+\x57\x1e\x3f\xe1\x93\xff\x00\x90\xfe\x95\x9c\xa8\x19\xcf\x6a\xc7\
+\x2f\x4c\x41\xd7\x50\x34\xef\x45\x86\x88\xcb\x88\x58\xee\x06\x63\
+\xc8\x5e\x8a\xd5\x6b\x85\xc6\x73\x3b\x80\x6e\x05\x87\xce\x89\x36\
+\x9a\x9e\x20\xfe\x1e\x1f\x22\x9d\x24\xd0\x0b\x6b\x94\x54\x60\x09\
+\x93\x0c\x55\x8d\xcc\x67\x4b\xf4\xa8\xe2\x65\x4f\x86\x80\xdd\x94\
+\x1b\xd8\xde\xd5\x30\xc5\x2e\x12\xd2\xba\x82\x8e\x2c\x40\x35\xaf\
+\xac\xfc\x37\x2d\x2f\x89\x18\xd3\x07\xe0\xc8\xda\xca\xea\x6d\xd0\
+\x75\xab\x12\xbc\x50\xe1\x8e\x20\xd9\xd7\xe1\x1d\x4d\x63\x62\xa5\
+\x79\xe6\x32\x48\x75\x3f\x95\x36\xa8\x4c\x38\xf9\x30\x9c\x5c\x09\
+\x11\x04\x71\xb7\xa4\x0d\xbb\xd6\x8c\xdc\x45\x50\x0c\xb8\x54\x37\
+\x17\x0d\x98\x91\xee\x2b\x33\x8a\xa7\x89\x83\x49\x88\xbb\x23\x65\
+\x27\xb7\x2a\x77\x0e\xe1\xdc\x56\xc1\x51\x13\xc3\xb5\xfe\xf0\xf9\
+\x47\xf7\xae\x72\xf2\x97\x23\x5d\x02\x77\x9b\x15\x88\xcc\xe7\x33\
+\xb6\x80\x01\xfa\x56\xbe\x12\x0f\xb2\x61\x7c\x2f\xf9\x8f\xac\x9d\
+\xbb\x51\xe0\xe0\x4c\x39\x20\x46\x04\xfb\xdc\xdf\x6f\xe9\xa2\xb5\
+\xeb\x7c\x78\xe7\x75\x9b\x41\x6b\x58\xd1\x01\x53\x96\xed\x6f\x99\
+\xa3\x55\xad\x0d\x42\xad\x35\x56\xb9\x16\x98\x05\x41\xca\x28\xd4\
+\x6b\x50\xbb\xda\x88\x9b\x68\xba\xb7\xb6\xd5\xa4\x24\x5a\x6a\x8f\
+\x30\xe8\xfe\x53\xd8\x8d\x8f\xed\x49\x89\xb3\x1f\x31\xdb\x96\xd4\
+\xd8\x8f\xde\x2a\x83\xe5\xcc\x48\xee\x40\xdb\xf3\xad\x44\xe3\x7b\
+\x6e\x68\x5a\x9a\x46\x9a\xd0\x30\xa9\x33\x78\xb7\xff\x00\xaa\x1f\
+\xe8\x5f\xd2\xb2\xb8\xf3\x11\x85\x82\x3b\x68\xc4\xb9\xf7\xda\xb6\
+\x78\xba\x7d\xea\x3d\xfd\x4b\xfa\x69\x59\x3c\x69\x03\x3e\x0d\x0e\
+\xcd\x70\x7f\xee\xae\x5c\xe7\x55\xae\x2d\xc9\xbc\xc1\x5f\x6c\xea\
+\x1b\xda\x90\xc0\xde\x8b\x87\x16\x9f\x85\xc0\x43\x67\x65\x05\x0d\
+\xbb\x7f\xe6\x89\x81\x07\x51\xaf\xb5\x6a\xff\x00\x59\x2c\x2f\x5a\
+\x21\x5d\x51\x7e\xd4\x21\x0f\x7a\x9a\x10\x6a\x41\x35\x21\x02\x41\
+\x04\x6e\x29\x44\x4d\x16\x2b\x2c\x00\x15\x94\x66\x00\x8b\x81\x4c\
+\x15\x32\x5c\x46\xd2\xa5\xc3\xc6\xbe\xe0\x8e\x96\xa5\x03\x10\xf8\
+\xc8\xe2\x2d\x9a\x35\x00\xea\x63\xb5\x1e\x19\x32\xc2\xae\x7c\xce\
+\xe2\xe4\xb6\xb6\xaa\x32\x4b\x88\x9d\x6e\x73\xba\x83\xf0\x8d\x05\
+\x5d\x49\x84\xa1\x72\x02\x0a\xd8\x15\x3b\xe9\x54\xa4\xd0\xd2\x66\
+\xcd\x98\xdf\xad\xea\xbc\xb0\x26\x23\x89\x4a\x19\x72\xda\xf7\x75\
+\x1a\xfc\xea\xc6\x66\x12\x00\xaa\x73\x7c\x2b\xd7\xdf\xb5\x74\x71\
+\xac\x20\x85\x39\x8b\x1f\x33\x1e\x67\xb7\x6a\x7d\x0c\x9c\x66\x19\
+\xf0\xf2\xe5\x3a\xa9\xd5\x58\x6c\x69\x56\x35\xbb\x3c\x5e\x3e\x19\
+\xa2\xe7\xba\x7b\xd6\x31\x5b\x12\x08\x37\x15\x8e\x5c\x71\xa9\x41\
+\x6d\x2d\x56\x38\x40\xff\x00\xf2\x50\xff\x00\xaa\x92\x6c\x37\x20\
+\x7b\xd5\x8e\x12\x3f\xfc\x8c\x27\xfa\xaa\x9e\xa6\x89\x02\xda\x52\
+\xcd\x31\x98\x6c\x01\x27\xda\x81\xae\x01\xd0\x56\xd9\x71\x00\xca\
+\xa9\x73\x64\x5f\x10\x81\xcc\xec\x2a\x05\xed\x6d\xed\xce\xa1\x81\
+\x2a\xac\x1a\xef\x6b\x65\x3b\x30\xe9\xd8\xd3\x22\x0a\x45\x95\x80\
+\x23\x70\xda\x11\x52\x0d\x8d\x12\x73\xd0\x32\x9d\x18\x72\x34\xc5\
+\x8c\xf2\x19\xbd\x8d\xe9\x25\x6c\xe5\x46\x52\x06\xec\x4e\x9e\xda\
+\x6e\x6a\x4c\xfe\x2a\x92\x60\x18\x62\xa0\x3e\x54\x6b\x2e\xbb\x83\
+\xc8\xfc\xe9\xdc\x1b\x1d\x1e\x36\x49\x73\x30\x49\x99\x75\x52\x74\
+\x36\x3c\x8d\x59\x9a\x05\xc4\xc2\xd8\x76\x94\x80\xe2\xd6\x0a\x00\
+\xbf\x5a\xf3\x85\x25\xc0\x63\xd9\x1d\x7c\xcb\x70\xc3\x91\x15\x8b\
+\x6f\x1b\xbf\x0c\xed\xe9\xa7\x89\x9e\x06\x46\x1c\xae\xa6\xb3\x2d\
+\x47\x82\xc5\xbc\x79\x64\x8d\xd8\xc4\xc7\x55\x34\xdc\x5a\x05\x9c\
+\xd8\x68\xda\x8a\xd6\xea\x22\xc6\xbb\x2d\x34\x2d\x71\x5a\x16\xaa\
+\xe3\xe6\x92\x08\xd0\x44\x72\x97\xb9\x27\xb7\x4a\x94\xc5\x61\xde\
+\x30\xce\xf9\x5a\xde\x60\x16\xfa\xd3\xa7\x8e\x39\x23\xfb\xc4\x24\
+\xa0\xd0\x83\x6a\x4b\xe0\x62\x71\xe4\x63\x1b\x7f\x56\xa2\x8e\xf7\
+\xa3\xd3\x96\x48\x24\x6c\xb1\xcb\x73\xfd\x42\xd4\x4a\xd9\xe5\x31\
+\x23\x03\x95\x2c\x4f\x72\x74\xb5\x56\x7e\x1f\x38\x04\xfd\xd3\x76\
+\x56\xd7\xe9\x4e\xc0\x14\x83\x06\xce\x48\x56\x8e\xec\xc0\xef\xdb\
+\x4a\x3b\xde\xd3\x3b\x10\x56\x4f\xf1\x31\xc8\x43\x5e\x4f\xae\x95\
+\xb2\x61\x11\xc3\x1c\x6d\xea\x44\x00\xf6\x35\x99\xfe\x1e\x84\xcb\
+\xc6\x17\x12\xea\x08\x4d\x4d\xf9\x9a\xd6\x93\x31\xb9\x2a\x6e\x68\
+\xe1\xe6\xaa\x51\xb2\xad\x42\xc8\x4a\x94\x07\x29\x24\x10\x7a\x11\
+\xb5\x11\x40\x39\x6b\xd6\x81\xd4\x12\x2c\x35\xad\x23\x34\x20\x48\
+\xab\x6c\xdb\x8e\x87\x98\xa1\x66\xb1\xb5\xa8\x92\xd7\x24\x79\x49\
+\xdf\x4b\x86\xf7\x1f\xb8\xa9\xb5\xcd\xad\x66\x1a\xe5\xbe\xfd\xc7\
+\x5a\x52\x28\xd4\x50\xae\xf4\x6b\x50\xa0\xc7\x2e\x6c\x18\x23\xe1\
+\x7d\x7e\x75\x9c\x10\x2e\xa0\xed\xbd\x69\xe2\x41\x6c\x1c\x80\x6e\
+\x2c\x4f\xb5\x51\x50\x2d\x59\xbe\x99\x42\x12\xe6\xdb\x73\x27\xa5\
+\x5c\xc0\x25\xf0\xcc\xc4\xb2\x29\x60\x02\x8d\x0b\x0b\x1d\x4f\x4a\
+\x42\x80\x14\x2b\x5a\xce\x72\xfc\x86\xa7\xf2\x1f\x9d\x5c\xc0\xdd\
+\xa0\x91\x8e\xe6\x4b\xfe\x55\x48\xa8\xac\xa5\x72\x18\xd3\x2f\xe1\
+\xcb\x50\xd8\x44\x98\x04\xf1\x64\x50\x3d\x2a\x75\x02\x99\x61\x4c\
+\x87\xd6\x47\x55\x20\x7d\x0d\x69\x96\x0e\x35\xc3\x48\x51\x49\xca\
+\xa4\xdb\xa0\x1b\x0f\xd2\xff\x00\x3a\xb1\xc3\xb8\x78\x78\x84\xd8\
+\x82\xc1\x0f\xa5\x46\xed\x54\x9c\x10\xc5\x48\xd4\x1b\x1a\xdf\x6d\
+\x42\x64\xb6\x4c\x82\xc4\x7b\x56\x38\xf7\x75\xaa\x52\x41\x86\x8d\
+\x72\x24\x00\x5c\xdf\x31\x39\x88\x34\xb4\x79\x12\x5f\xb3\xce\xd7\
+\x0d\xe8\x6e\x5f\xf8\xa7\xb0\x23\x98\x3f\x95\x2d\xf2\x99\x21\x72\
+\x40\xc9\x25\x89\x27\x60\x7f\xbd\x6c\x39\x94\x98\xd8\x0d\x59\x7c\
+\xcb\xae\xc4\x57\x40\xc9\x32\xe7\x42\x01\xf8\x94\x9d\xa8\xe2\x17\
+\x97\x2f\x33\x70\x79\xf6\xac\xf8\x96\x21\x23\xac\x8c\xde\x51\xe5\
+\xcb\x45\xaa\x34\x02\x1b\x92\x74\x27\xb7\x2a\x25\x5b\x54\x61\x03\
+\x8c\x22\x67\x37\x27\x51\x7e\x42\x9a\x10\x9f\xee\x6d\x5a\xc0\x85\
+\x14\x5c\xab\x88\x23\x71\xa7\x23\xd6\xa4\x52\x9c\xbe\xaa\x38\xf4\
+\x5b\x03\xcc\xdf\xeb\x41\x6d\x6b\xae\x43\x79\x4d\x89\x3a\x8a\x90\
+\xa6\xb6\x9d\x4d\x1c\x79\x64\x87\x2b\x72\xe6\x39\x1e\xb5\x20\x8e\
+\x82\xb8\x1c\xa4\xe5\x1a\x1d\xc5\x69\x25\x24\x61\x27\x85\x3d\xae\
+\x7d\x2f\xc9\xa8\xd9\x4d\xed\x6f\x95\x2d\x99\x5d\x32\xb4\x64\xaf\
+\x7d\xc5\x04\x73\x98\xdf\xc2\x98\x92\xa7\xd0\xc7\x97\x6a\x90\x78\
+\x9a\x5f\x0c\xad\x6f\x4b\x6b\x58\xfc\x60\x5b\x09\x0c\xd9\x6f\xe1\
+\x4b\xa9\xe8\x37\xfd\x6b\x73\x1a\xc8\x20\x78\xdd\xd4\x31\x17\x00\
+\x9e\x95\x95\x8c\x48\xdf\x01\x34\x66\x45\x37\x00\x8b\x1e\x63\x6f\
+\xd6\xb1\xce\x18\xff\xd9\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0b\
+\x08\x52\xaa\xc7\
+\x00\x66\
+\x00\x69\x00\x67\x00\x75\x00\x72\x00\x65\x00\x38\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x0b\x53\x47\xc7\
+\x00\x72\
+\x00\x61\x00\x6e\x00\x64\x00\x6f\x00\x6d\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x0a\x12\x5e\xc7\
+\x00\x6b\
+\x00\x69\x00\x6e\x00\x65\x00\x74\x00\x69\x00\x63\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x00\x28\x58\x27\
+\x00\x74\
+\x00\x69\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x07\x50\x31\x47\
+\x00\x65\
+\x00\x6c\x00\x6c\x00\x69\x00\x70\x00\x73\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x05\x8f\xe2\xc7\
+\x00\x63\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x14\
+\x00\x22\x00\x47\
+\x00\x54\
+\x00\x69\x00\x6d\x00\x65\x00\x2d\x00\x46\x00\x6f\x00\x72\x00\x2d\x00\x4c\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x2d\x00\x32\x00\x2e\
+\x00\x6a\x00\x70\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x02\
+\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x01\x00\x00\xf9\x47\
+\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x8b\xdf\
+\x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\xf5\xc7\
+\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x01\x00\x00\xcb\xb4\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x48\x00\x00\x00\x00\x00\x01\x00\x00\x71\x63\
+\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x36\xe6\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/animation/animatedtiles/images/Time-For-Lunch-2.jpg b/examples/animation/animatedtiles/images/Time-For-Lunch-2.jpg
new file mode 100644
index 0000000..c57a555
Binary files /dev/null and b/examples/animation/animatedtiles/images/Time-For-Lunch-2.jpg differ
diff --git a/examples/animation/animatedtiles/images/centered.png b/examples/animation/animatedtiles/images/centered.png
new file mode 100644
index 0000000..e416156
Binary files /dev/null and b/examples/animation/animatedtiles/images/centered.png differ
diff --git a/examples/animation/animatedtiles/images/ellipse.png b/examples/animation/animatedtiles/images/ellipse.png
new file mode 100644
index 0000000..2c3ba88
Binary files /dev/null and b/examples/animation/animatedtiles/images/ellipse.png differ
diff --git a/examples/animation/animatedtiles/images/figure8.png b/examples/animation/animatedtiles/images/figure8.png
new file mode 100644
index 0000000..6b05804
Binary files /dev/null and b/examples/animation/animatedtiles/images/figure8.png differ
diff --git a/examples/animation/animatedtiles/images/kinetic.png b/examples/animation/animatedtiles/images/kinetic.png
new file mode 100644
index 0000000..55cfa55
Binary files /dev/null and b/examples/animation/animatedtiles/images/kinetic.png differ
diff --git a/examples/animation/animatedtiles/images/random.png b/examples/animation/animatedtiles/images/random.png
new file mode 100644
index 0000000..415d96f
Binary files /dev/null and b/examples/animation/animatedtiles/images/random.png differ
diff --git a/examples/animation/animatedtiles/images/tile.png b/examples/animation/animatedtiles/images/tile.png
new file mode 100644
index 0000000..c8f39d8
Binary files /dev/null and b/examples/animation/animatedtiles/images/tile.png differ
diff --git a/examples/animation/appchooser/accessories-dictionary.png b/examples/animation/appchooser/accessories-dictionary.png
new file mode 100644
index 0000000..e9bd55d
Binary files /dev/null and b/examples/animation/appchooser/accessories-dictionary.png differ
diff --git a/examples/animation/appchooser/akregator.png b/examples/animation/appchooser/akregator.png
new file mode 100644
index 0000000..a086f45
Binary files /dev/null and b/examples/animation/appchooser/akregator.png differ
diff --git a/examples/animation/appchooser/appchooser.py b/examples/animation/appchooser/appchooser.py
new file mode 100755
index 0000000..68ac35b
--- /dev/null
+++ b/examples/animation/appchooser/appchooser.py
@@ -0,0 +1,139 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (pyqtSignal, QPointF, QPropertyAnimation, QRect,
+        QRectF, QState, QStateMachine, Qt)
+from PyQt5.QtGui import QPixmap
+from PyQt5.QtWidgets import (QApplication, QGraphicsScene, QGraphicsView,
+        QGraphicsWidget)
+
+import appchooser_rc
+
+
+class Pixmap(QGraphicsWidget):
+    clicked = pyqtSignal()
+
+    def __init__(self, pix, parent=None):
+        super(Pixmap, self).__init__(parent)
+
+        self.orig = QPixmap(pix)
+        self.p = QPixmap(pix)
+
+    def paint(self, painter, option, widget):
+        painter.drawPixmap(QPointF(), self.p)
+
+    def mousePressEvent(self, ev):
+        self.clicked.emit()
+
+    def setGeometry(self, rect):
+        super(Pixmap, self).setGeometry(rect)
+
+        if rect.size().width() > self.orig.size().width():
+            self.p = self.orig.scaled(rect.size().toSize())
+        else:
+            self.p = QPixmap(self.orig)
+
+
+def createStates(objects, selectedRect, parent):
+    for obj in objects:
+        state = QState(parent)
+        state.assignProperty(obj, 'geometry', selectedRect)
+        parent.addTransition(obj.clicked, state)
+
+
+def createAnimations(objects, machine):
+    for obj in objects:
+        animation = QPropertyAnimation(obj, 'geometry', obj)
+        machine.addDefaultAnimation(animation)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    p1 = Pixmap(QPixmap(':/digikam.png'))
+    p2 = Pixmap(QPixmap(':/akregator.png'))
+    p3 = Pixmap(QPixmap(':/accessories-dictionary.png'))
+    p4 = Pixmap(QPixmap(':/k3b.png'))
+
+    p1.setGeometry(QRectF(0.0, 0.0, 64.0, 64.0))
+    p2.setGeometry(QRectF(236.0, 0.0, 64.0, 64.0))
+    p3.setGeometry(QRectF(236.0, 236.0, 64.0, 64.0))
+    p4.setGeometry(QRectF(0.0, 236.0, 64.0, 64.0))
+
+    scene = QGraphicsScene(0, 0, 300, 300)
+    scene.setBackgroundBrush(Qt.white)
+    scene.addItem(p1)
+    scene.addItem(p2)
+    scene.addItem(p3)
+    scene.addItem(p4)
+
+    window = QGraphicsView(scene)
+    window.setFrameStyle(0)
+    window.setAlignment(Qt.AlignLeft | Qt.AlignTop)
+    window.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+    window.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+
+    machine = QStateMachine()
+    machine.setGlobalRestorePolicy(QStateMachine.RestoreProperties)
+
+    group = QState(machine)
+    selectedRect = QRect(86, 86, 128, 128)
+
+    idleState = QState(group)
+    group.setInitialState(idleState)
+
+    objects = [p1, p2, p3, p4]
+    createStates(objects, selectedRect, group)
+    createAnimations(objects, machine)
+
+    machine.setInitialState(group)
+    machine.start()
+
+    window.resize(300, 300)
+    window.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/animation/appchooser/appchooser.qrc b/examples/animation/appchooser/appchooser.qrc
new file mode 100644
index 0000000..28a3e1c
--- /dev/null
+++ b/examples/animation/appchooser/appchooser.qrc
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>accessories-dictionary.png</file>
+    <file>akregator.png</file>
+    <file>digikam.png</file>
+    <file>k3b.png</file>
+</qresource>
+</RCC>
diff --git a/examples/animation/appchooser/appchooser_rc.py b/examples/animation/appchooser/appchooser_rc.py
new file mode 100644
index 0000000..ebe093f
--- /dev/null
+++ b/examples/animation/appchooser/appchooser_rc.py
@@ -0,0 +1,1423 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Thu May 2 16:14:11 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x13\x09\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\
+\x1b\xaf\x01\x5e\x1a\x91\x1c\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
+\xd7\x09\x17\x17\x15\x19\x49\x86\x70\x41\x00\x00\x12\x96\x49\x44\
+\x41\x54\x78\xda\xed\x5b\x09\x74\x5c\xd5\x79\xfe\xee\x7b\xb3\x6b\
+\xb4\x5a\xb2\x25\xd9\x96\x64\x63\x6c\x83\x31\x36\xb6\x81\x00\xe1\
+\xb0\x34\x14\xc2\xda\x94\x86\x04\xd2\x90\x42\x72\x20\x5d\x20\x14\
+\x68\x08\x4b\x48\x09\x87\xda\xad\x73\x52\x52\x02\x24\xad\x7b\x20\
+\xe4\xb0\x95\xcd\x40\xb0\x1b\x56\x2f\x80\xb1\x2d\xdb\xd8\xb2\x6c\
+\x6c\xd9\xb2\x2c\xc9\x1a\x4b\x1a\x69\xf6\xe5\x6d\xf7\xf6\x7f\x33\
+\xef\xf0\xf4\x3a\x9a\x19\x1b\x26\x3d\xc9\x69\x7e\x9d\x4f\xf7\xbd\
+\xfb\xee\x9b\x79\xdf\x77\xff\xe5\xbe\x2b\x1b\x7f\xb4\x3f\xda\xff\
+\x6f\x63\x38\x0e\x1b\xbb\x05\x75\x52\xed\xf4\x8b\x5d\x33\x97\x5c\
+\x06\xb7\xef\x3c\xa1\xa4\x3c\xd0\xb3\xc3\x42\xcd\x0c\x71\x35\x15\
+\x12\x4a\x22\xc4\x53\xe3\x21\x91\x8d\x85\x84\xc0\x10\x80\x10\xe1\
+\xe8\xd4\x9f\x43\xf9\x83\x16\x40\xfc\xd8\x7f\x95\x68\x5d\x76\x37\
+\xe7\x58\xc6\xd3\x51\x99\x08\x42\x70\x01\xe1\x0e\x12\xaa\xc0\x65\
+\x3f\x84\xec\x81\x60\x6e\x82\x0b\x90\x5c\x10\x82\x03\xdc\x00\xd7\
+\xd2\x02\xba\x32\x2e\x0c\x6d\x48\xe8\x6a\x48\x68\x4a\x48\xe8\xd9\
+\x10\x57\xd3\x24\x54\x7c\x48\x68\xd9\x90\x30\x85\x12\x08\x4d\x7f\
+\x0c\x99\xdf\x3b\x01\xc4\x03\x9e\x3f\xc7\xf9\xf7\xbf\x88\xe6\x45\
+\xcc\x24\x04\xae\x03\x26\x39\x43\x05\x32\x11\x80\xc4\x80\x9a\xcc\
+\x43\xcf\x40\x68\x19\xf0\x6c\x82\x90\x02\x57\x92\xe0\xa6\x50\xb2\
+\x0f\x5c\x48\x04\x53\x13\x4e\xd0\xc1\x75\x2d\x27\x14\x40\xd7\x0d\
+\x03\x24\x0a\x41\x8d\x0a\xae\x87\x08\x43\xc2\xa0\x36\x07\x95\x04\
+\x33\xa1\x0c\x09\x6e\x84\x00\x84\x3a\x1e\x47\xf2\xff\x4e\x80\xa7\
+\x2e\xee\xc4\x99\xb7\x2c\x85\xb0\xc8\x73\x23\x07\xc7\xb9\x28\xd6\
+\xa7\xe7\xa1\x98\xe2\x64\xed\x3e\xd3\x84\x00\x57\x33\xa4\xa3\x42\
+\xc8\x82\x73\x0e\x03\x6e\x70\x12\xd6\x50\x32\x39\x01\x0d\x12\x52\
+\xcf\xc4\x01\xba\x26\xcc\x1f\x6e\x80\x3c\x89\xa0\x27\x68\x60\x4e\
+\x90\x1c\x04\x0f\x01\x3c\xc4\x64\x98\xd8\xd9\x71\x29\xba\xd9\xc5\
+\x10\x95\x11\xe0\x85\x6b\x53\x58\x78\x6d\x20\x3f\xf3\x46\x09\x01\
+\x9c\x62\x38\xc6\x8b\xdc\x35\x1b\xa2\xc8\x58\xf2\x1e\x40\x00\x14\
+\x4e\x90\xdc\x80\xcb\x47\xf0\xe7\x3c\x46\xd7\x75\x18\x9a\x96\xf3\
+\x20\x9d\x33\x12\x27\x09\x3d\x35\x06\x75\xa4\x07\x7a\xa2\x0f\xae\
+\x00\x03\xf3\xe4\x6f\x37\x14\xf1\x3a\x35\xdf\xe8\x58\x81\x04\xca\
+\x98\x0b\x65\x8d\xb9\x72\x0f\x97\x8b\x69\x82\x63\xc6\xb9\x89\x82\
+\x63\xc7\x78\x61\x58\x2d\xb7\xfa\x8b\x8c\x35\x21\xc9\xf9\x3e\xcd\
+\xf4\x96\xd4\xa7\xe2\x48\x34\xc6\x63\x0b\x95\x0f\x3f\xd9\x0b\xd4\
+\xd7\x00\xb3\x2e\x85\xde\x34\x97\x9c\xec\x03\xe8\x43\xab\xc1\xb3\
+\x06\xd4\x38\xae\xc8\x8c\x88\x55\xa2\x1b\x5f\x63\x0b\x50\xd2\x24\
+\x94\x35\x0e\x88\x89\x04\x78\x01\x81\xa2\xd7\x45\x31\x91\x8a\x7c\
+\xd6\xb1\x7e\xb6\x69\x5a\x1a\x48\x1c\x01\x0e\xbf\x0f\xd7\xbe\x35\
+\xa8\x5a\xba\x02\x9e\xe9\xcb\x00\x96\x1f\x0a\xce\xbe\xda\xf3\x38\
+\x4e\x00\x3e\xaf\x00\x42\x4c\x70\xdd\x22\x33\x69\x79\x44\xd9\x87\
+\xe7\xe5\xbd\x80\x50\xfe\xb3\xed\x6b\x79\x11\x0e\xbc\x09\xac\xbd\
+\x13\x7a\x66\x16\x52\x43\x02\xe9\x61\x01\x35\x29\x98\xa1\x62\x49\
+\x25\x04\x28\x7c\x38\xce\x8b\xcc\x6c\x31\x61\x8e\x91\x38\x2f\x15\
+\x5a\x93\x08\x13\x27\xf2\xe9\x31\xe4\xec\x93\xd5\x30\x12\x5e\xa4\
+\x8f\x9a\xe4\xf3\xb7\x42\xc0\x5f\x81\x1c\x20\x0a\xc9\xd8\x84\x4a\
+\x92\x71\x1e\x97\x0a\x25\x5e\x46\x9c\x42\xf1\x6c\xf2\xf6\x44\x31\
+\xdd\x2c\xaf\xd6\x23\xc3\xb2\xcf\x2d\x40\xa1\xdb\x15\x78\x41\xb1\
+\xd8\x75\x1e\x17\x0f\x95\xc2\x44\x59\xc6\xc3\xe2\x83\x44\x3e\x8c\
+\x02\xe3\x1a\x84\xc5\xbc\x72\x02\x40\x14\xcd\xe8\x36\x81\xe3\x4d\
+\x88\x45\xae\x17\x92\x2d\x1c\x1f\x1b\x70\x90\x77\x98\xa1\x43\xa0\
+\xd2\x02\x08\x41\x30\x8e\x3d\xa3\x17\x86\x4a\xf9\x24\xc8\x8f\x31\
+\x29\xc6\x4b\x90\x27\x13\xa6\x07\x4c\x9c\xb7\x0a\x09\xe0\x24\x5b\
+\xbe\xd4\x95\x5f\x03\x94\xff\xac\x42\x0f\x8b\xf5\x03\xa9\x51\x94\
+\x34\x43\xb7\x89\x57\x38\x04\x2c\x18\x05\x0f\x57\x9e\x4c\x91\x6b\
+\x28\xa8\x26\xc5\x45\x8d\x1d\x2e\x4f\x1e\xc8\x2f\x93\xe1\x14\xa0\
+\x12\x65\xd0\x41\xb6\x10\x45\x32\x36\x6c\xa2\xb9\x7e\x10\x98\x75\
+\x0e\x6e\x9d\x13\x60\xf7\x4d\x9a\x10\xcb\xcf\xbc\x33\x09\x02\x36\
+\x44\x25\x04\x40\xc9\x44\x35\xb9\x10\xb0\x88\xb1\x63\x24\x6e\xc2\
+\x3e\xb6\xbf\x27\x6a\xce\xfc\x08\x8e\xd5\x04\xd7\x2d\xe2\x16\x2a\
+\xe4\x01\x65\x56\x7a\x0e\x22\xc5\x88\x95\x12\xc3\xea\x73\x0a\x87\
+\x58\x5f\x01\xf9\xb2\x66\x38\xca\x60\x25\x05\x28\x1f\xdb\x4e\x21\
+\x9c\x64\x0a\x3d\xc2\x26\x6e\x0b\x64\x58\xe0\x40\x9c\xc8\x67\x88\
+\xbc\x54\xe4\x7d\xb5\x74\x15\x70\xa0\xd2\x2b\xc1\x82\x38\xb7\x60\
+\x93\x13\xff\xdb\x0b\x2c\x62\xc2\xe1\xe6\x36\x59\x82\xe3\x38\x7e\
+\x88\xc8\x0f\x03\xb2\x35\x54\x58\xe0\x28\x67\xf6\x3a\xc0\xf6\x82\
+\x0a\xaf\x04\x3d\x55\x40\xfd\x09\xf9\xa7\xd1\xd3\x40\x26\x0c\x24\
+\x8f\x02\x5a\xd2\x99\xe8\xec\x58\x2e\x14\x88\x39\x12\xa3\x53\xa8\
+\x78\x6f\x9e\xbc\x64\x3d\x3d\xb3\x45\xb0\xfd\xba\x74\x15\xb0\xcb\
+\x60\xe5\xd6\x01\xb6\x08\xfe\x29\xc0\xdc\x4b\xe1\x34\x91\x17\x61\
+\x6c\x2f\x10\xfa\x28\xe7\xbe\x85\xee\x4f\x10\x13\xfa\x84\xc3\xe5\
+\xf3\x6d\xe2\x90\x93\xbc\x4d\xd6\xd9\xf2\x12\xcc\xac\x24\x58\xe9\
+\x75\x80\x23\xbb\x17\x1a\x03\x82\x2d\x79\xb4\x5f\x98\x17\xe0\xe0\
+\x6b\xc0\x48\xa7\x33\x1c\x18\x01\x36\x79\xb3\xb5\xc9\x9b\x33\x7f\
+\xd4\x72\xfb\x32\x02\xc0\x1e\x53\x72\x1d\x20\x08\x15\x4d\x82\xb0\
+\x50\xce\x6a\x3a\x80\xd3\x6e\x05\xce\xb8\x17\xa8\x9e\x3e\x21\xce\
+\xed\x7c\x60\x9f\x5b\xe4\xb3\x16\x79\x09\xd4\x5a\x90\xca\x80\xa1\
+\xf8\xcb\x90\xa8\x64\x15\xc0\x24\x19\xdf\x50\xca\xaf\x32\xea\xe7\
+\x01\xe7\x2c\x07\x3a\x2e\x73\x84\x84\x0d\x93\xfc\x41\x22\x1f\xb2\
+\x49\x95\x03\x2b\x2d\x82\x30\xf4\xca\x57\x01\x22\x6a\x27\xaa\x48\
+\x0f\xb0\xee\x6e\x40\xe8\xf9\x73\x6f\x35\x10\x6c\x26\xb2\x27\x02\
+\xd3\x96\xd1\x79\x7d\xc1\x76\x22\x4e\xba\x01\xa8\x9b\x03\xec\x5c\
+\x09\x18\x9a\x95\x00\x09\x89\x03\x80\x62\x91\x17\x93\x00\x8e\x44\
+\x68\x1b\xb7\xa7\xad\x20\x1c\xb8\xe6\x8c\x16\x51\xe9\x32\x88\x89\
+\xe5\x4f\x07\xb2\x61\xc2\x30\x30\xba\x1d\xe8\x79\x16\x68\x5c\x04\
+\xcc\xfe\x33\xa0\xba\x1d\x0e\x6b\x39\x17\xf0\x90\x58\x9d\x14\x16\
+\x9a\x0a\x24\x7b\xec\x99\x17\x25\x92\x9c\x70\x10\x76\x92\x66\x13\
+\x20\x9c\x1e\x90\xfb\x55\xb1\x10\x60\x02\xce\x9a\x3f\x59\x19\xb3\
+\xb6\xba\x47\xb6\x00\x9b\x7f\x00\x7c\xb2\x8a\xba\xb2\x70\xd8\x94\
+\xc5\xc0\x92\xfb\x81\x74\x9f\x49\xbe\x78\xcc\xdb\xfd\xc7\x17\x1a\
+\xa6\xd9\x65\x90\x50\xa9\x24\x08\x51\x58\xd7\x6d\xf2\x85\xab\x3e\
+\x53\x88\x81\x35\x24\xc4\x1d\x40\x6a\x10\x0e\x6b\x3a\x13\x38\xf5\
+\xfb\x05\x64\xcb\x82\x4d\x1a\xff\xce\x7e\xf6\x3b\x5d\x09\x5a\x04\
+\xfd\x8d\x40\xfb\x05\x80\xbb\x2a\x17\x6f\x48\x0f\x01\xf1\x83\xc0\
+\x78\x17\x60\xa8\x13\x44\xa0\x36\x75\x18\xd8\x4a\x22\x2c\x79\x10\
+\xa8\x99\x8b\x4f\x6d\xfe\xdf\x00\xa3\x1f\x00\x87\x9e\x01\x50\x26\
+\xfe\x51\xc2\xf5\x25\x47\x9e\xc8\x83\xeb\xf6\xed\xa2\x32\xeb\x00\
+\xe7\xcc\xfb\xea\x80\xd6\xb3\x60\xdb\x52\x02\xf2\x2b\xc1\xa1\x77\
+\x80\xbe\xd5\x74\x1c\xb1\x17\x3b\x5a\x14\xd8\x7e\x17\x89\xf0\xcf\
+\x4e\x11\xce\x7c\x04\x18\x79\xd7\xac\xfd\xc5\xe3\x9f\x17\xf5\x4f\
+\x27\x69\xc9\x3e\x17\x10\x16\xf1\x8a\x87\x80\xed\xee\x93\x9a\x3b\
+\x08\xb4\x5f\x05\x9c\xf5\x53\xa0\x71\xa9\xf3\xe5\x66\x7c\x2b\xb0\
+\xfe\x72\x40\x8b\xd9\xe3\x3d\x0d\xa4\xdd\x4f\xca\xd7\x7c\x66\xb7\
+\x36\x8a\x84\x06\x9b\xc4\xa1\x2a\x23\x80\x73\x25\x58\xd2\x3c\xf5\
+\xc0\xe2\xfb\x80\xb6\x2b\xf2\x5e\x90\xd8\x07\x28\x47\x80\x54\x0f\
+\xb0\xfd\x56\x38\xac\xfd\x5a\xa0\xe1\xb4\xcf\x50\xfb\x4b\xc2\xb1\
+\x12\x14\xa2\x62\x02\x70\x0b\x02\x50\x62\x40\x78\x17\x30\xb2\x0d\
+\x48\x0e\x4e\xf2\x2d\x0c\x98\xfb\x5d\xa0\xf1\x4c\x20\x3b\x68\x3f\
+\x78\xff\x53\x74\xcf\x3b\x13\x86\x51\xe7\x29\xf7\x1d\x67\x22\x2c\
+\x71\xcc\x9c\xc4\x05\x2a\x97\x03\xec\xfa\x3f\xbe\x17\xd8\x70\x1b\
+\x00\xdd\x0a\x09\xeb\x05\xa9\xe3\x4a\x60\xc6\xc5\xce\xa5\xd9\xc2\
+\x1f\x11\xe1\xdf\x02\x91\x4e\xfb\x41\x77\xdf\x05\x5c\xb8\xd5\x1e\
+\xd7\x4a\x61\x13\x6c\x03\x92\xfd\xce\xd8\x67\x36\x0a\x63\xbd\x04\
+\x80\xcf\xb6\x27\xf8\xe0\x7d\x37\x2d\xdc\xf2\xf6\x4f\xa5\xd2\x55\
+\x80\xc0\x55\xe7\x92\x18\x84\x4c\x08\xd8\xfb\x18\xb0\xfd\x87\x80\
+\x91\x99\xf0\xc9\x6e\xe0\x0b\xbf\x06\x5c\x2e\x7b\x16\xe3\xdb\x80\
+\xd1\x89\x5e\x20\x03\xed\xdf\x2c\x3b\xf3\x4e\x14\xef\x17\xec\x33\
+\xe6\x80\xb7\x37\xf7\xae\x7e\x6b\xc3\xbe\x5f\x90\x08\xac\x68\x0e\
+\x28\xdc\xf3\x73\x2e\x90\xc6\x3a\x81\x0f\x6f\xb4\xfa\x2c\xab\x9e\
+\x0f\xb4\x5d\xe7\x8c\xe3\xfe\x5f\xc2\x61\xd3\xaf\x2e\x41\xba\x4c\
+\xdc\xa3\xe0\xdc\x0e\x83\xe3\xc9\x01\xe3\x8a\x9e\xed\xdc\x35\x38\
+\x7f\xc7\xee\xc1\x7f\x25\x11\x4a\x6f\x89\x81\x3b\x84\xb0\x77\x6f\
+\xf7\x00\x87\x9f\x03\xf6\xac\x84\xc3\xe6\xdd\xe5\x24\x37\xba\x06\
+\x30\xd2\xf6\xf5\xda\xc5\x80\x7f\x6a\x01\xe9\xe3\x24\x6e\x0b\x20\
+\x3e\x83\x07\x24\x33\x19\x43\x81\xfb\xce\xd7\xdf\xec\xba\xe6\x50\
+\xff\xd8\x43\xc5\xdf\x06\x09\x81\x16\xe0\x8c\x1f\x03\x17\x3d\x4f\
+\xed\x0a\x20\x38\x33\x4f\x3e\x3d\x80\x9c\xed\xa5\x9a\xaf\xc5\x27\
+\x78\xc1\xc9\x40\xcd\x7c\x9b\x94\x20\xf2\xd1\x0f\x9d\x49\x73\xca\
+\xd9\x85\xa4\x51\x36\xde\x0b\xc9\x33\x27\x71\x21\xb9\xe5\x63\x12\
+\x20\x95\xc9\x1a\x29\xdd\xc8\x8e\x45\x92\xb7\x3c\xbb\x7a\xeb\x3d\
+\x6b\x5f\x78\xf0\x9e\xc2\x3f\x8d\xf1\x7c\xe6\x5e\x72\x27\x50\x6f\
+\x12\x72\x01\x75\xd4\x9e\xbe\xc2\x76\x7b\x86\xfc\xe2\xe7\xc8\xab\
+\x70\xd8\xd4\x8b\x9d\x33\x1b\xdb\x0c\x87\xd5\x2e\x3a\x0e\xa2\x65\
+\x44\x80\x05\xfa\xb5\xcb\x77\xfa\x2f\x96\x3f\x70\xeb\xeb\x8f\x3d\
+\xfc\xc3\xef\xfc\xec\x27\xf7\x4e\x2f\x5a\x05\x32\x8a\xa2\x27\xd2\
+\x19\xff\xf6\x4d\x9b\x5e\x5a\xba\x74\xe9\x6b\xcf\xbc\xbc\xf9\xa1\
+\x0f\xff\x7b\xe5\xc8\xd9\x97\xfc\xc3\x2a\x47\x12\xac\x99\x0d\x54\
+\xb5\xc0\x61\xee\x1a\xe0\xe4\xef\x01\xdb\xbf\x6f\xf7\x8d\x6e\x00\
+\x3a\xbe\x39\xc1\x0b\x4e\x71\xba\x77\x66\x1f\x1c\x56\x75\xc2\xf1\
+\x91\x47\x89\xbe\x09\x25\x70\xe3\xa6\x2e\xcf\x86\xa1\xfd\x97\x37\
+\xd4\xd7\x5e\x3e\x73\x66\x8b\xf8\xea\xd5\x57\xec\x9a\x36\x6d\xda\
+\x7b\x55\x55\x35\xeb\x33\x59\xf5\x83\x7f\x7b\xe4\xe7\xa3\x39\x01\
+\x14\x4d\xe3\x14\x06\x7e\x90\x71\xce\xff\x76\x67\x77\xff\xb9\x2f\
+\xbd\xb1\xed\x71\xca\x07\xc3\x38\xfc\xa4\x2d\x80\x96\x29\xb2\xf9\
+\x71\x0a\x1c\x96\x19\x80\xc3\x7c\xcd\xce\x87\x56\x87\xe0\x30\x6f\
+\x4b\x59\x82\xe5\xc9\x3b\x63\x9f\x83\x61\x6a\x9d\xf7\xad\xda\x54\
+\xed\x02\x26\xb9\x5a\x87\x47\xa2\x6c\x6c\x3c\xb9\xa8\xb7\x6f\x68\
+\x91\x2c\xcb\xb7\xa9\xaa\xca\xe7\xcc\x99\x73\x7b\x4e\x00\x5d\xd7\
+\x59\x3a\x9b\x0d\x80\x6c\xc7\x8e\x1d\x83\x0b\x16\x2c\xf8\xbb\x35\
+\x6f\xef\x7c\xba\x65\x5a\xed\x73\x27\x9d\x30\x53\x0e\x72\xc3\xda\
+\xc1\xe9\x07\xd2\x47\x81\x40\x33\x1c\x96\x3c\x0c\xe7\x02\x5c\x86\
+\xc3\x5c\xb5\xce\x35\xbf\x91\x82\xc3\xe4\x2a\x1c\x97\xb1\xc9\xfb\
+\x46\xb2\x3e\xbc\x1f\xa9\xc3\xc1\x4c\x2d\x0e\x67\x6b\x30\x1e\x4b\
+\x5f\xa4\xeb\x49\xc4\x62\x31\x28\xe4\xe5\x84\x7d\xc4\xb5\x95\x73\
+\x5e\x6f\xf9\xe2\x2c\xf3\x17\xb8\x10\x8c\xf2\x40\x10\x96\x75\x77\
+\x77\x3f\x63\x18\xc6\xd3\xff\xf9\xf4\xba\xc0\x6b\x91\xb9\x72\x5a\
+\x78\x00\x6e\xfd\xe3\xc8\xf5\xb7\xe5\x57\x83\xb0\x2c\x3b\x0a\xec\
+\x7c\xc8\x49\xb0\xaa\x03\x0e\xd3\xe3\x70\xee\xef\x7b\x50\x60\xf6\
+\xfd\xc7\x65\xe3\x59\x37\x7e\xb5\xb7\x19\xd7\xbf\xbd\x00\xcb\xfb\
+\xcf\xc5\x7b\xb1\x99\xd8\xdc\xaf\xe0\xc0\xde\x2e\xd4\x25\xba\x51\
+\xa7\xf4\x3f\x5a\x53\x53\x73\xe1\xca\x95\x2b\x67\x90\x00\x4b\x67\
+\xcf\x9e\xdd\x23\x49\x12\xac\x6f\x7a\xcb\x05\xb2\x80\xcf\xd3\x94\
+\x55\x95\x46\x4c\x30\x12\xe0\x26\x55\x35\x4e\x5e\xfe\xd8\xda\xd3\
+\x3c\xb7\x5c\x86\xcb\x9b\xfa\xe0\x33\x5f\x7b\x93\x7d\x24\xf5\x26\
+\x60\xee\xd7\xf3\x1a\xf6\x3c\x01\xa8\x24\x82\x3c\xe1\xe1\x5b\x2e\
+\x83\xc3\x52\xbd\x36\x79\x46\x90\xeb\xe1\x30\x6d\x1c\x10\xc7\x21\
+\x82\x99\xe0\x46\xaa\xf0\xec\xee\xa9\xd8\x12\x9e\x06\x4d\xd7\x10\
+\x8f\x8f\x43\x44\xdf\xc3\xe5\x73\x0d\xcc\x59\xe4\xc3\x89\xb3\xda\
+\xe0\xad\x6d\xa6\x3c\x7d\x41\x5f\xfb\x95\xf7\x0c\x03\x10\x0f\x3f\
+\xfc\x30\x23\x5b\x2c\x44\x2e\x6b\x5f\x4d\x78\xc3\x75\xcf\xdf\x5f\
+\x83\xc7\xd6\xee\x6c\x4a\xa6\xd5\x16\xcb\x2d\x38\x01\x07\x0f\x1e\
+\x4c\xb7\xb5\xb5\x7d\x25\x1a\x49\x6c\x5d\xf1\xcb\xdf\x36\xc9\x37\
+\x7e\x11\x97\x64\x87\xe0\x96\x00\x16\xeb\x07\xdb\xfe\x2f\x80\x79\
+\x2c\xe3\xd3\xed\x6c\xc6\xac\x87\xdf\xf9\x03\xe0\xc0\xa3\x66\xc9\
+\xcc\x23\xfc\x2e\xc0\x27\xb8\xaf\x6f\x0e\x1c\xa6\x5a\x02\x38\x45\
+\x98\xb4\x6f\xf3\x60\x10\xab\xb6\x35\x63\xd3\x61\x2f\xa2\xd1\x08\
+\x62\x91\x8f\xf1\xa5\x39\x0a\x7e\x74\x9e\x84\xf3\x17\xce\x04\xab\
+\x9b\x87\x3d\x83\x40\x64\xe8\x10\xa2\x07\x3b\x11\xee\xdd\x79\xf0\
+\x9d\x70\xf3\x01\x00\x7c\xc5\x8a\x15\xcb\xc8\x1b\x3c\x24\xc0\xeb\
+\x00\x72\xa5\xca\xd5\xd8\x58\x23\x65\x15\xad\xdf\xd0\x35\x0e\xa0\
+\x86\x90\x26\x68\x04\x31\xbb\xbf\xff\x70\xf4\x84\xa6\xeb\x87\x8e\
+\x8c\xac\x59\xf1\xe4\x26\x96\xb9\xfa\x6a\x9c\x6f\xbc\x08\x8f\xac\
+\x41\x96\xcd\x4a\x48\xa0\x56\xa6\x96\x59\xe7\x8c\x13\xc2\x5d\x60\
+\x11\x82\x9c\xaf\x9c\x29\x5d\xc6\xa1\xb1\x00\x8e\xc4\x3c\x18\x8a\
+\x7a\x10\x7a\xf5\xbf\x10\xd3\xd7\x21\xcd\xa6\x23\x65\xd4\x01\x24\
+\x6c\x2d\xef\x40\x8d\xcf\xc0\xd4\x6a\x0d\x73\x9b\x32\x58\x36\x23\
+\x85\x29\x7e\x1d\xa6\x0d\x27\xdc\xd8\x70\xb0\x1a\x2f\x75\x4d\xc1\
+\xc7\x83\x12\xc2\xe1\x30\x22\xe3\xe3\xf8\x8b\xa5\xc0\x03\x37\x07\
+\x70\xe2\xbc\x2f\xe4\x12\xb1\x88\x1d\x81\x31\xb4\x1d\x91\x7d\x31\
+\xa4\x14\x91\x4f\x37\x6e\xb7\x35\x45\x60\x2d\x2d\x2d\x17\x9b\xf9\
+\x80\xec\x79\x58\xe6\xba\xfd\xde\x55\x1c\x5e\xff\x12\xa8\x59\x93\
+\xfc\x14\x42\x15\x21\x46\xc8\x10\xf8\x99\xd3\x47\xd7\x6d\x3c\x5c\
+\xf7\x60\x6f\xdf\x91\xfb\x1f\x7e\x49\x42\xf4\x4f\xaf\xc2\x32\x75\
+\x35\x3c\x2e\x1d\x2e\x57\x9e\xbc\xcb\x12\x81\x13\xdb\x50\xda\x8b\
+\xc1\xb8\x17\xfd\x51\x1f\x8e\x24\x83\xd8\x3f\xec\x42\x6f\x48\x43\
+\x3a\x93\x45\x36\x9b\x85\xaa\x66\x20\x44\x1a\x3e\x5f\x06\x81\xc0\
+\x28\x82\xf2\x18\x3c\x48\x23\x6f\x12\x09\xe4\x42\x46\xf7\xc0\xef\
+\xaf\xc7\xec\x66\x2f\x3d\x5a\x35\x14\xe1\x43\x86\xee\x1f\x0a\x8d\
+\x20\x3c\x36\x86\xa0\x17\x78\xed\x8e\x7a\x5c\xf2\x27\xe7\x03\xb5\
+\x27\x43\x28\x29\x18\x07\xd7\xe6\x04\x10\x06\xc0\x49\x79\xc1\x04\
+\x84\xe0\x74\xec\xca\x15\x5f\xf3\xbb\xeb\xeb\xeb\xaf\xef\xeb\xeb\
+\xcb\x80\x6e\x77\xbe\x0d\x2a\xf4\xe9\x00\xb7\x50\x47\xf0\x13\xa2\
+\x9b\x81\x44\xbb\x0e\x76\x61\x7b\xf4\xb9\xf7\x0e\xd7\xce\x3e\xd4\
+\x37\xf0\x97\x4f\xbc\xc9\xb0\xff\xa4\xf3\x35\x79\x74\x4b\xca\x60\
+\xae\xa0\xaf\xaa\xc6\xe5\xae\x9e\x82\x81\xa8\x84\x81\x31\x8e\x68\
+\x3c\x8d\x54\x2a\x83\x44\x32\x8d\x80\x34\x88\x93\x5a\x75\x5c\xbb\
+\x54\xc2\xbc\x19\x40\x5b\xb3\x84\xf6\xd6\x20\x9a\xbf\xf4\x22\x24\
+\x33\x51\xba\x48\xf3\x9d\x37\x83\x99\x9b\x26\xba\x02\x28\x49\x30\
+\x35\x85\xa7\xd6\xeb\xb8\xf1\x3f\x52\x18\x19\xe1\x85\xc9\x9e\x01\
+\xab\x6f\x0b\xe0\xbc\x2b\xbe\x05\xe1\x69\x82\x48\x0e\x43\xdb\xf7\
+\x12\x90\x49\x12\x61\x19\x0c\xc8\x91\xe7\xd6\x96\x92\x90\x68\xa6\
+\x00\xf6\xca\x2b\xaf\xdc\x10\x08\x04\x66\x47\xa3\xd1\x55\x20\x5e\
+\xc5\x0a\x8a\x8b\x10\x24\x34\x10\xbc\x84\x64\x73\x10\x89\xf3\xe7\
+\x81\x35\x04\x51\xfb\x9b\xfd\x0d\x77\x29\xdc\xfd\xdd\xd6\xd6\x56\
+\xf4\xf7\xf7\xa1\x2a\xe0\x05\x37\x34\x84\x86\x23\x30\x0c\x8e\x69\
+\xb5\x14\x87\xf3\x25\x9c\x3b\x8f\xe1\x82\xa5\x4d\x68\x9f\x3d\x8b\
+\x2a\x5c\x13\x98\xbf\x01\xcc\x5b\x0b\xe6\x0e\x82\x41\x03\xb8\x92\
+\x03\x33\xb2\x10\x6a\x14\x2c\x3d\x08\xa4\x87\x73\xdb\xec\x4c\xcb\
+\xe2\xd0\x51\x81\xb3\x97\xd7\x62\x24\x1c\x01\x59\x6e\xc6\x3b\x1a\
+\x25\xec\x09\x01\xa7\xb5\x09\x7c\xf0\xb3\x0b\x20\xd1\xeb\x37\x4f\
+\x47\xa0\xed\x79\x06\x22\x9b\xb4\x37\xaa\x75\x81\x4d\x07\x38\x14\
+\x8d\x83\x09\xae\x27\x1b\x16\x2f\x7c\xba\xa7\x4e\x27\xf2\x5b\x3e\
+\xfa\xe8\x23\xcf\xc0\xc0\xc0\xa9\x00\x7a\x8b\xed\x07\xe8\x84\x38\
+\x41\xb5\x44\xa8\x1d\x4e\x22\xf0\x7a\x17\xa2\x27\x35\x23\x7c\xde\
+\xac\xc8\x9d\xef\xf6\x35\xb3\xde\xde\xde\x9b\xcd\x58\x22\x6f\xb4\
+\x66\x85\xe1\x9c\x39\xae\xc8\xbd\x5f\x9f\xe5\x9f\xb5\xe8\x42\x6f\
+\xb0\x75\x21\x73\xfb\x82\x48\x0b\x05\xc4\x90\xa0\x10\x31\x82\xaa\
+\xd0\x61\x14\x3c\xd9\x9f\xdb\x2c\x91\x94\x10\x24\x3d\x01\x99\x09\
+\xc8\x42\x40\x12\x66\xcb\xd0\x3d\x5c\x0d\x0e\x39\x37\xdb\x37\x9e\
+\x03\x7c\xeb\x6c\x50\x68\x00\x7f\xfd\x42\x2d\x66\x34\x24\x10\x97\
+\xdb\xe0\x4a\x2b\x48\xed\x5a\x0d\x91\xce\xd0\x7d\x66\xfc\x09\x08\
+\x9d\x23\x95\x11\x54\x1a\x01\xb3\x27\x65\xf8\x1e\x79\x64\x7d\xba\
+\xba\x75\x7a\xfd\xbf\xf7\xf4\xf4\xd4\x11\xf9\x1b\x4c\xf2\xe5\x36\
+\x44\xb8\x15\xff\x23\x04\x45\x00\x8d\x29\x15\x53\x3b\xfb\x11\xdb\
+\xd6\x2f\xc6\x5b\x1b\x95\xef\x69\x9a\x36\x04\xe0\xdb\x84\x36\x02\
+\xbc\x6e\xb9\x77\xd9\x89\x35\xf7\xb6\x5f\xf9\xe8\x75\x35\x53\x5a\
+\xda\x54\x25\x2d\xa5\x33\x09\xb7\xa6\xa6\x5d\x4a\x72\x14\xa3\xfd\
+\xbd\x99\x70\xff\xc7\x6e\x23\xbe\xbf\x5a\x36\xe2\xbe\x80\x57\x54\
+\x79\x3d\xc2\x13\xf0\x08\x29\xe0\x61\xb9\xca\xe2\x22\xb8\x19\xc0\
+\x0d\xe0\xdd\x81\x39\x48\x24\xba\x30\xb3\x1e\x5b\x82\x6e\xec\x79\
+\x6d\x07\x6a\x3d\x2e\x51\x27\x04\x3f\xef\x70\x18\xfa\xc7\x3d\x11\
+\xc9\x88\xbf\x2a\xf3\x78\x04\x01\xb7\xcc\x3c\x4c\x80\x71\x01\x45\
+\x15\x62\xdf\x30\xd4\xa3\x09\x36\x7a\x28\xea\xde\xf8\xe1\xa0\xdf\
+\x35\xeb\xc4\xa6\xd5\x54\xd1\x9a\xf7\xee\xdd\x7b\x37\x80\x5f\x1d\
+\xeb\x8e\x90\xb0\xbc\x60\xdc\x6a\x1b\x09\x0d\x02\x08\x1c\x09\x8f\
+\x87\x01\xac\x90\x65\xf9\x9f\x7c\x3e\xdf\xf6\x54\x2a\xb5\xd0\xe3\
+\xf5\xbe\xdc\x71\xfa\xd5\xef\xcf\x3e\xe5\xec\xaf\x09\x2e\x06\x0c\
+\x43\x53\xe2\x91\x70\xf7\xde\x1d\x1b\x77\x6f\xfc\xcd\x93\xa3\xaa\
+\x9a\xf6\x41\x57\x7d\x86\x11\x0c\x08\xdd\x5b\x25\xb8\x56\x45\xa1\
+\x13\x64\x42\xaf\x97\x99\xde\xe0\x96\x8c\xda\x6a\x9f\x41\x2d\x0f\
+\xc6\xa4\x99\xf3\x3b\xfb\xa4\x2a\x55\x51\xe2\x0b\xe6\xe0\x0e\x83\
+\x23\xab\xab\xf0\x65\x54\xe1\xf3\xbb\xb8\xa7\xfb\x88\xb1\x64\xcd\
+\x3b\x9d\xcf\xca\x2e\xd6\x00\x78\x83\x0c\xc2\xc7\x60\xb8\x05\x87\
+\x94\x48\xc3\x08\xa7\xb8\x72\x24\x2a\xbc\x9a\x67\xda\x17\x3b\xe6\
+\xcc\x98\xd1\xd5\xd5\x95\x08\x85\x42\xf7\x00\x78\xf4\xb3\x6c\x89\
+\x19\x84\x84\x25\xc2\x14\x0b\x33\x08\x11\xc3\x30\xc6\x1a\x1a\x1a\
+\xb6\x64\x32\x99\x85\xfe\x40\x70\xd7\x57\x6e\xbc\x77\x9a\xcb\xed\
+\x35\xb3\xed\xfb\x5d\xbb\xf7\xbc\xb1\xa3\x73\x6b\x94\x43\x97\x1a\
+\x4f\xfa\x32\xe3\x5c\x65\xa4\x89\xc4\xf5\x2c\x33\xd4\xb4\xa4\x2b\
+\x29\x49\x57\x93\x32\x65\x6f\x59\xa3\x96\x67\x53\xee\x31\x2d\xed\
+\x19\x1c\x63\x0b\xdd\xcd\xcb\x1e\xdd\xd9\xf5\x3a\x24\x86\x07\x3b\
+\xa6\x62\x9b\x00\x1d\x6a\x90\xb8\x4c\xe9\xc4\xa5\xde\x3e\x2c\xd8\
+\x5b\x4f\xae\x1f\x9b\x75\xe1\xb2\x59\xcf\xb7\x34\xf8\xd3\xe3\xb1\
+\xd4\xb4\xd1\x68\xfa\x84\x70\x4c\x9f\x6f\x48\xfe\x99\x9e\x40\x5d\
+\xa3\xab\xc6\x1f\x8c\x86\xc3\xea\xce\xee\xf7\x5e\xd6\x75\x7d\x39\
+\x80\x5d\x04\xed\xf3\xfc\xaf\x31\x66\x89\x55\x4b\x98\x6a\x95\xca\
+\x24\xd5\xd5\x9b\xa8\x26\xdf\xd6\xdc\xdc\xfc\x0d\x7a\x87\x50\xd2\
+\xe9\x74\xe2\x8d\x37\xde\xd8\x3d\xc9\x96\x86\x80\x05\xd3\x98\x10\
+\x9c\xc3\xe0\x42\x37\xe8\x48\xe5\x86\x9a\x11\xdb\xb6\xed\xa8\x86\
+\xb7\x7a\xed\xde\xbd\x9f\xcc\xeb\xec\xec\xdc\x0e\xe0\x4c\x82\xfe\
+\x8f\x00\xd6\x2d\x06\x4b\x8d\x83\x45\x63\x90\x7b\x13\xec\x2c\xba\
+\xf3\x79\xb7\xdb\xdd\xec\xf5\x7a\x55\x6a\x99\xcb\xe5\x72\x93\x81\
+\xc8\x1a\xf1\x78\x7c\xbf\xa2\x28\x6b\x01\xfc\x5a\x08\xd1\x5d\x40\
+\xbc\x9c\x07\x94\x08\x09\x8d\x10\x21\x28\x84\x26\xc2\x14\x55\x55\
+\xe3\xe6\xba\x9a\xda\xa6\x97\xc9\xc8\x2b\x38\x00\x97\x53\x00\xe7\
+\x9f\x3d\x18\x63\x1c\x8c\x41\xa2\x1f\x78\xdc\x02\xf0\xf1\x77\x37\
+\x7c\xd4\xee\xf7\x57\x3d\x91\x88\xc6\xe6\x6d\xdb\xb6\x6d\x14\xc0\
+\x35\xd6\x78\x99\x04\x90\xf0\x31\x64\xab\x2a\xd5\xe4\x77\x54\x70\
+\x0b\xe5\xa1\xb3\x08\xb5\xd6\x73\x85\x09\xfb\x09\xa6\x70\x7d\xd6\
+\x62\x4e\x54\x66\x57\xb8\x30\x24\x92\xd6\x97\x66\x69\xc6\x37\x92\
+\x00\x4a\x22\x91\x38\xe3\xc0\x81\x03\xaf\x51\x79\xe4\x74\x2e\x13\
+\x49\x13\x92\x55\x21\x72\xe4\xf3\x13\x2f\x0c\xab\x95\x48\x2c\xb1\
+\x6e\xdd\xba\x36\xba\x7e\x3d\x2d\x4f\xbf\x73\xe8\xd0\x21\xff\xa6\
+\x4d\x9b\xc6\xe9\xda\x5f\x01\xc8\x12\xda\x26\x7c\xa7\x36\xc1\x0b\
+\x93\x84\xdd\x84\x4e\x42\x8a\x90\xb1\x26\x45\x2f\x47\xba\x74\x08\
+\x1c\xff\x7d\x32\x21\xe0\xf1\x78\xbe\x4d\x1e\xb0\x9c\xc2\x60\xe5\
+\xa9\xa7\x9e\xba\x9e\x92\xa3\x9b\x5c\x93\x51\x82\xe4\xe4\x9a\x3a\
+\x09\xa2\x72\xce\x0d\x1a\x23\x28\x5f\xc8\xe3\xe3\xe3\x33\xfc\x7e\
+\xff\x29\x34\xe6\x22\x6a\x97\x51\x82\x62\x94\xa1\x0d\xea\xff\x10\
+\xc0\x2a\xc2\x51\x8b\x50\xc2\x2a\xc9\xb1\x1c\x51\x27\x41\x6e\x41\
+\xe0\x73\x1a\xab\xc0\xfd\x26\xae\x63\x8c\x3d\x4c\xa4\x6a\xab\xaa\
+\xaa\x86\x89\x58\x8a\xda\x0c\x09\x20\x3c\x79\xf3\xd1\xf5\x06\x42\
+\x8d\x39\xfb\xe4\x39\x88\x44\x22\xc6\xd0\xd0\x50\x2f\x79\xc2\x06\
+\x6b\x69\x3a\x60\x11\x4d\x12\xd2\x96\x08\x9a\x4d\xf6\x77\x63\x0c\
+\x95\xb3\x2a\xc2\x97\x09\xa7\x13\xda\x2c\xc2\x75\x04\x37\xe7\x5c\
+\xb2\x5e\x41\x23\x84\x83\x84\x6e\xc2\xfb\x84\x7e\x6b\xa6\x8d\x72\
+\x7f\xd6\xfb\x03\x10\xa0\xf0\xf3\x1c\xff\x0a\xc0\xf9\x17\x56\x81\
+\xdf\x13\xfb\x1f\x84\xaf\xe2\x02\x22\xe6\xe9\x93\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x20\x1c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\
+\x1b\xaf\x01\x5e\x1a\x91\x1c\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
+\xd7\x08\x12\x14\x39\x28\x29\x91\x7c\x0e\x00\x00\x1f\xa9\x49\x44\
+\x41\x54\x78\xda\xe5\x9b\x09\xb0\x5c\x57\x99\xdf\xff\xb7\xf7\xbd\
+\x5f\xbf\xfd\xe9\xe9\x3d\x49\xd6\x2e\xd9\xda\x2c\x79\xc1\x78\xc0\
+\x76\x42\x81\xc1\x03\x64\x0c\x13\x1c\x42\x65\x02\x4e\xb1\x84\x78\
+\x5c\xc5\x14\x55\x49\x2a\x54\x48\x05\x2a\x03\xc3\x14\x03\x55\x33\
+\x13\x43\x2a\xae\x21\x9e\x01\x26\x05\x43\x80\xd8\xb2\x0d\x78\xc3\
+\x96\x25\x6b\xb1\xf5\xb4\x3d\x6b\x7d\xd2\xdb\xb7\xde\xb7\xdb\xb7\
+\xf3\x3b\xa7\xbb\x35\x12\x1a\x0a\x18\xb0\x81\x4a\xcb\x9f\xcf\xed\
+\xbb\x9c\x77\xbe\xed\xff\x2d\xf7\xb4\xfe\x7f\xff\x38\xaf\xe7\xdf\
+\x59\xb3\x66\x8d\xaf\xab\xab\xcb\xd7\xdb\xdb\x6b\x29\x91\x48\x38\
+\xd5\x6a\x55\xb9\x5c\xce\x5b\x58\x58\xf0\x96\x97\x97\xbd\x0b\x17\
+\x2e\x78\xd9\x6c\xb6\x29\x09\xfa\x2d\x16\x40\x24\x12\xf1\x6d\xdd\
+\xba\x35\xb0\x7b\xf7\xee\xf8\xdd\x77\xdf\xbd\xb5\xaf\xaf\x6f\x67\
+\x34\x1a\x5d\xcf\xf9\x75\x7e\xbf\xbf\xd7\x71\x9c\x04\x14\x6f\xf2\
+\x69\x34\x1a\x05\x43\x08\x63\xa6\x5c\x2e\x9f\x2a\x16\x8b\xe3\xd3\
+\xd3\xd3\xfb\xbf\xfd\xed\x6f\x9f\x3c\x70\xe0\x40\x0d\xa1\x34\x8c\
+\x40\x7e\x1b\x04\xe0\x6c\xda\xb4\x29\x74\xef\xbd\xf7\xf6\xbe\xf5\
+\xad\x6f\xbd\x07\x2d\xbf\x3d\x16\x8b\xdd\x1c\x0e\x87\xfb\x60\x5a\
+\xf0\x2a\xd7\x75\x2d\xc1\xb0\x3c\xcf\xb3\x0f\xf9\x7c\x3e\x4b\xc1\
+\x60\x50\xdc\x67\xcf\x57\x2a\x15\x15\x0a\x85\x49\xac\xe1\xd9\xa9\
+\xa9\xa9\x6f\x3d\xca\xe7\x5b\xdf\xfa\x56\xde\x58\xca\xaf\x52\x18\
+\xce\xaf\x4a\xdb\xd7\x5f\x7f\x7d\xf4\x13\x9f\xf8\xc4\xae\x6d\xdb\
+\xb6\x7d\x34\x9d\x4e\xdf\x0d\xd3\x29\xc3\x08\x1a\x15\x1a\x55\xa9\
+\x54\x52\x15\xa6\x6a\xb5\x9a\xdc\x7a\xbd\x25\x00\x08\xa1\x40\xad\
+\x95\xc0\xbc\x15\x42\x38\x1a\x55\x2a\x95\xb2\x14\xe5\xb8\xce\xfd\
+\x8b\x8b\x8b\xf3\x33\x33\x33\xff\x7b\x6c\x6c\xec\xcf\x3e\xf7\xb9\
+\xcf\x8d\x4f\x4e\x4e\xba\x46\x10\xbf\x6e\x01\x38\x1b\x37\x6e\x8c\
+\x7e\xfa\xd3\x9f\xbe\x79\xc7\x8e\x1d\x7f\x94\xc9\x64\xde\xe2\xe7\
+\x03\xd3\xc6\xaf\x55\x2c\x14\x54\xe1\xd8\x50\x15\x2a\x23\x04\xc8\
+\x0a\xa2\x8e\x20\x1a\x58\x82\xe1\xde\xe7\x38\xf2\x07\x02\x0a\x05\
+\x43\x0a\x86\x42\x0a\x84\x43\xf2\x9b\x63\xc6\x68\x3c\xae\x9e\xbe\
+\x3e\xf5\x41\x21\xae\x2d\x2d\x2d\xd5\x2f\x5d\xba\xf4\xcd\x23\x47\
+\x8e\x7c\x96\xbf\x7b\x22\x9f\xcf\xbb\xbf\x16\x01\xa0\x9d\xe0\x87\
+\x3f\xfc\xe1\x91\xf7\xbf\xff\xfd\xff\x7e\x68\x68\xe8\x03\x98\x70\
+\x10\x4d\x5b\xc6\x4b\x30\x6e\x28\xbb\xbc\xac\x85\xb9\x79\xcd\xce\
+\xcd\x6a\x6e\x76\x56\x4b\x8b\x4b\xca\xe6\xb2\xd6\x1a\x3a\x02\xf0\
+\x49\x0a\xfa\xfc\x8a\x84\x82\x4a\x18\xcd\x27\x12\xea\x4a\xa7\xd5\
+\x95\xe9\x56\x2a\xd3\xa5\x68\x2a\xad\x50\x22\xae\x70\x2c\xa6\x6e\
+\x84\x30\xbc\x72\xa5\x62\x1c\xcf\xce\xce\x96\xcf\x9c\x39\xf3\xc5\
+\x6f\x7c\xe3\x1b\x9f\xfb\xfa\xd7\xbf\xbe\x2c\xc9\x7b\xbd\x04\xe0\
+\x8c\x8e\x8e\xc6\xbe\xf4\xa5\x2f\xbd\x63\xcf\x9e\x3d\x7f\x8a\x89\
+\x0e\x5d\xd6\x78\x3e\xaf\x1c\x4c\x4f\x4f\x4d\xe9\xfc\xb9\xf3\x3a\
+\x73\xf6\x8c\x26\x26\x26\x34\x03\xf3\xf8\x72\x87\x71\x6b\xfa\xc2\
+\x3d\x1c\xa3\x7d\x49\x01\xc7\xa7\x00\x18\x10\x0a\xf8\x15\x45\xcb\
+\x89\x48\x54\x19\xcc\xbf\xaf\xa7\x5b\x83\x83\x83\xea\x5f\xb1\x42\
+\xe9\x81\x01\x45\x33\x19\x85\xcd\x79\xce\xad\x5a\xb5\x4a\xc2\x72\
+\xce\x9d\x3b\xf7\xea\xc1\x83\x07\xff\xf5\x27\x3f\xf9\xc9\xe7\x5d\
+\x3e\xaf\xb5\x00\x7c\xb7\xdc\x72\x4b\xf7\x97\xbf\xfc\xe5\xff\x40\
+\x48\xfb\xb7\x66\xed\x98\xa0\x0a\x50\x76\x71\x51\x13\x17\x2e\xe8\
+\xc4\xf1\x13\x1a\x3b\x7e\x4c\x68\xc7\x32\x5e\x2e\x96\xd4\xdb\xdb\
+\xa3\x95\x2b\x86\xd5\xc7\xd8\xdd\xd5\xa5\x58\x24\xa2\x30\xbe\xde\
+\x6c\x78\x06\x0f\xb8\xa7\xa0\x02\x02\x5c\x5a\x58\xd0\xfc\xf4\x0c\
+\x34\x8d\x60\x9a\x8a\xe0\x06\x29\x5c\xa0\xbf\xa7\x47\x2b\x56\x0e\
+\x6b\xc5\xea\xd5\xca\x8c\x8c\x2a\xda\xdb\xab\x38\xc2\x19\xe5\x7b\
+\x5f\x7f\xbf\xc0\x86\x2a\xd8\xf0\x1f\x1f\x7c\xf0\xc1\x2f\xe3\x22\
+\x95\xd7\x4a\x00\xfe\xb7\xbf\xfd\xed\x2b\x3e\xff\xf9\xcf\xff\x05\
+\x5a\xb9\x1b\x60\xb2\x8c\xe7\xd0\xec\xe4\xc5\x8b\x3a\xfa\xca\x2b\
+\x3a\xf0\xd2\x4b\x3a\x7e\xf2\xa4\x66\xa6\xa6\xf1\xd9\x5e\x6d\xdb\
+\xba\x55\x9b\x37\x6d\x52\x22\x1c\x91\xaf\xe9\xc9\xef\xb5\xc8\x31\
+\x04\xf3\x62\x84\xac\x45\x34\x0c\x71\xec\x72\x5f\xb5\x5a\xb3\x73\
+\x9e\x3e\x76\x4c\x0b\x08\xd1\x80\x63\x12\xb3\xef\x87\xf1\x95\x30\
+\xbd\x62\xfd\x7a\xa5\x56\x8d\x2a\xc2\xf7\x01\x5c\x62\xf5\x75\xd7\
+\x59\xa0\x45\x08\x5f\xf9\xd4\xa7\x3e\xf5\xe0\xc9\x93\x27\x8b\x3f\
+\x2f\x40\xfa\x7f\x5e\xe6\x3f\xf0\x81\x0f\xac\xf9\xcc\x67\x3e\xf3\
+\x48\x7f\x7f\xff\x9d\x26\x44\xe5\xdb\x1a\x3b\x31\x36\xa6\x1f\xfe\
+\xf0\x87\x7a\xe2\x07\x3f\xd0\xcb\x2f\xbf\xac\x01\x16\xf5\xce\x77\
+\xdc\xa3\xbb\x6e\xbf\x5d\xd7\xa1\xf5\x0c\xbe\x9d\xc4\x54\xd3\x6a\
+\x51\xaa\x43\x9c\x4b\x4a\x4a\x74\x88\x73\x71\xc6\x18\x6e\x11\xe7\
+\x5a\x6f\x32\xa5\x75\x1b\xd6\x69\x04\x06\x6b\x08\xb9\xb0\xb0\xa8\
+\x12\x02\x2f\xf2\x37\x6b\x4b\x4b\xf2\x55\xaa\x0a\x20\x98\x4a\xdd\
+\x55\xae\x84\x95\x81\x0f\x03\x03\x03\xbb\x6e\xb8\xe1\x86\xad\x58\
+\xc4\x63\xe7\xcf\x9f\xaf\xfe\xaa\x04\xe0\xbf\xf3\xce\x3b\x57\x7e\
+\xf6\xb3\x9f\xfd\x5f\xc4\xf5\x5b\x0d\x8a\x1b\xb3\x9f\xc3\x4c\x5f\
+\xda\x7f\x40\x8f\x3d\xbe\x57\xcf\x3e\xfb\xac\x5c\x7c\xfb\xbd\xbf\
+\xf7\x7b\xba\xe3\x8d\x6f\xd4\x20\xc0\x95\xc2\xa7\xd3\x4e\x87\xe9\
+\x0e\xb3\x0e\x0c\xc2\xa4\xa4\xa8\x31\xf1\x26\x24\x99\x11\xe2\x9c\
+\x19\xa1\x98\xbd\xc6\x79\xac\x22\x01\x26\x5c\xb7\x6e\xbd\xba\x01\
+\xc4\xfc\xf4\x94\xaa\x68\xba\x9c\xcb\xab\xba\xbc\x24\x87\xb5\x84\
+\x88\x1e\x0d\x9f\xa3\x3c\xc7\x19\x5c\x05\x21\x6c\x02\xa3\x36\xee\
+\xdb\xb7\xef\xbb\xe0\x52\xfd\x97\x15\x80\x8f\x30\xd7\xff\xd0\x43\
+\x0f\x7d\x85\x89\xef\x00\xc4\xac\xd9\x4f\x5d\xba\xa4\xe7\x9f\x7f\
+\x5e\xff\xf7\xb1\x47\x75\xe8\xe0\x41\xed\xda\xb1\x43\xff\xfc\xde\
+\x7b\xb5\xb2\xa7\x57\xe9\x0e\xe3\x57\x68\x38\x0a\x85\x61\x0c\xaf\
+\x57\x00\xc6\x02\x8c\xfe\xa6\x20\x46\xaf\x75\xec\x33\xc7\xf6\xba\
+\x21\x29\xc8\x18\x16\xe4\xf1\x9c\x5b\x07\x3b\x12\x1a\xc1\x22\xaa\
+\x33\x73\xaa\xb1\x86\x5a\x89\xd0\x4a\x44\xb1\x42\xf0\x33\x23\x96\
+\x96\x03\x8c\xbb\x00\x4a\x42\xe6\x26\xb2\xd0\x81\xef\x7f\xff\xfb\
+\x8f\xe3\x5a\xee\x3f\x56\x00\x0e\x79\x7b\xea\xe1\x87\x1f\xfe\xcf\
+\x6b\xd7\xae\xbd\x8f\x58\x6e\x32\x33\x4d\xc3\xfc\x8f\x9f\x7b\x4e\
+\x8f\xed\xdd\xab\xb3\xa7\x4f\xeb\xdd\xef\x7c\xa7\x6e\xdb\xbd\x47\
+\x5d\x80\x5a\x86\x85\x74\x18\x8f\x59\xa6\x61\xb6\xcd\xa4\x45\x7c\
+\x33\x1a\xbf\x6f\x42\x1c\x37\x6d\x24\x68\x8d\x6a\x9f\x77\xec\xbd\
+\x8c\x1d\xe1\x58\x30\x6c\x32\x59\xdd\x5a\xcf\xf0\x9a\x0d\x6a\x10\
+\x4e\xdd\x42\x8e\x30\x5a\x53\x3d\x57\x40\x08\x65\x2c\x21\x88\xa4\
+\x23\x2a\xd6\x6a\xd6\x1d\x58\xfb\x2e\x92\xb3\x65\x84\xb0\x5f\xcc\
+\xfe\x0b\x0b\x80\xb8\x1e\xf9\xc2\x17\xbe\x70\xef\x6d\xb7\xdd\xf6\
+\x5f\x00\x3c\x1f\xcc\x5b\xb3\x7f\xe1\xf9\x17\xb4\xf7\xf1\xc7\x75\
+\x11\xc4\xbf\xef\xf7\x7f\x5f\x1b\x09\x47\x5d\xf8\x62\x06\xcd\xe3\
+\xd7\x76\x91\x21\x18\x68\x69\xb5\xcd\x58\x9b\xa9\xa6\x65\x9a\xb1\
+\x7d\xac\xf6\xb1\xda\xc7\xba\xea\xd8\x8e\xac\xc3\x53\x20\x0d\x40\
+\x3a\x9e\x42\x45\xc9\x29\xd7\x35\xb4\xf6\x3a\x35\x96\xc1\x02\x37\
+\x27\xa7\xee\x22\x84\xa2\xfc\x60\x42\x08\xb0\x6d\x1a\x21\x10\x0d\
+\x07\x08\x95\xe4\x0b\xbf\x43\x8e\xf2\x14\x2e\x3a\x21\x66\xfc\x45\
+\x04\xe0\xa7\x80\xd9\xf4\x91\x8f\x7c\xe4\xaf\x40\xe0\xa4\xc9\xe8\
+\x96\x09\x73\x07\x0f\x1c\x40\xf3\x8f\xeb\x3c\x21\xce\x30\xbf\x66\
+\x60\x00\xcd\xfb\xd4\xed\xf7\x29\xe9\x39\xd6\x7f\x03\x2d\x2d\x42\
+\xad\x58\xaf\x0e\xa3\x57\x33\x79\x95\x15\xa8\x6d\x05\x96\x38\xee\
+\x8c\x1c\x28\x18\xa7\x2e\xe8\x8a\x28\x56\x73\xe5\xe5\x4c\xf4\x80\
+\x88\x40\xfd\x6b\x56\x03\x86\x17\xb9\xa7\x2a\xaf\x84\x80\x8a\x65\
+\xf9\x39\x1f\x8a\xc7\xd4\x20\xcc\xba\x92\x86\x56\xac\x08\x90\xa7\
+\xdc\x76\xe2\xc4\x89\x47\x00\xc6\xf2\xcf\x2d\x00\x24\xd7\xf5\xc5\
+\x2f\x7e\xf1\xb3\x84\xbb\x5b\x08\x2f\x36\xc1\x39\x41\x48\x7a\xfc\
+\x89\x27\x34\x06\xd2\xbf\xfb\x77\xef\xd1\xda\xa1\x15\xea\x86\xf9\
+\x54\x44\xea\x92\x8f\xe4\x25\x2e\x11\xbe\x3a\xcc\x59\x26\x1a\x10\
+\x82\x40\xcb\x57\x6a\xfe\xaa\x31\x68\xb4\xe6\xba\xc4\xf7\x11\xad\
+\xba\x79\x8f\xfa\xd6\xae\x55\x1f\xbe\xde\x47\xa8\xeb\xdf\xb8\x56\
+\xf1\x35\xbd\x0a\xf7\xf4\x6b\xd5\x75\x5b\xd4\xbf\xe1\x06\x0d\x6e\
+\xde\xac\x9e\xd1\x51\x2d\x9c\x1a\x57\xdf\x48\x9f\x16\x16\x27\x14\
+\xab\x53\x64\x95\x5d\x35\x89\x4e\x01\x39\x0a\xa6\x92\xaa\x01\x9e\
+\x41\x04\xd1\xc3\x07\x2b\xf0\xbe\xf7\xbd\xef\x3d\x2d\xa9\x71\x8d\
+\xa5\xeb\xda\x4f\xf0\x81\x07\x1e\x78\x13\x7e\xff\x1e\xc2\x9d\xcd\
+\xe3\xa7\x88\xc9\xa0\xaa\x8e\x1e\x79\x59\xb7\xec\xd9\xad\x75\xc3\
+\xc3\x4a\x4b\x84\x38\xc1\x78\x40\x41\x98\x1b\x20\x16\xa7\x07\xfb\
+\x5b\x0c\x37\x5a\xc4\xf1\x15\x82\xb8\x96\x12\x84\xcc\x55\x37\xed\
+\x91\x83\xfb\xa8\x69\xdc\xe4\xea\xcc\xc4\xf1\xd7\x55\x27\x19\x8a\
+\x45\xc3\xdc\x1f\x30\x67\x3a\xff\xc9\x2b\x57\x14\x4b\x74\x6b\x64\
+\xeb\xf5\x44\x08\xbf\xe2\xc2\x32\x4c\x74\xc0\x3a\x6b\x27\x4e\xca\
+\x9b\x5f\xd0\x0c\x19\x29\x25\xb7\xe0\xe5\x81\x0f\x7e\xf0\x83\x9b\
+\xcd\x04\x3f\x4b\x00\x0e\xda\xcf\x50\xca\xfe\x21\x26\x18\xb0\xf1\
+\x9e\xd4\x76\xec\xe8\x98\x8e\x1c\x3a\xa4\x34\xfe\x75\xeb\xce\x5d\
+\x4a\x35\x05\xd8\x11\xaf\xc3\x3e\x28\x24\xc7\x6d\x58\x06\x52\x83\
+\x43\x56\x83\xfc\x55\xc3\x34\x74\x25\xf3\x8d\xd6\xb1\x71\x11\x09\
+\x0d\xaf\xd3\x10\x89\x12\xcc\x9b\x73\x96\x3c\xa8\xf3\x8c\xb8\xbf\
+\xd1\x2c\x2b\x90\xea\x95\xcf\x0a\x51\x10\xff\xb3\xd7\x20\xc6\xfa\
+\x72\x4e\xab\x6f\xbc\x49\xc9\xe1\x5e\x25\x03\xb8\x20\xcf\x08\x57\
+\x75\x4f\x9f\x55\x1d\x41\xd4\xb3\x39\xcd\xce\xcc\xa8\xbb\xbb\x3b\
+\x7a\xeb\xad\xb7\xfe\x91\xa4\xf0\xcf\x12\x40\xe0\x43\x1f\xfa\xd0\
+\x1b\x30\x99\xdb\x0d\xf3\xb5\x72\x19\xb0\x9b\xd0\x91\xc3\x87\x34\
+\x4b\x4e\xff\x4f\xde\x7c\x87\x92\x86\x51\x28\x0e\x85\x78\x9a\xe5\
+\x4b\x56\xe3\xae\x65\x32\x92\x4c\x6a\x68\xcb\x66\x05\x11\x56\xc7\
+\x0a\x3a\xcc\x73\xc0\xf9\x80\x86\x77\x6e\x53\x7a\x68\xa8\xe3\x16\
+\x1d\x21\x5d\x1e\xbd\xf6\x33\x35\xaf\xa6\x68\xba\x5b\xf8\xc8\x35\
+\x56\x64\x05\x56\xab\x2a\x46\x6a\xdd\x7b\xfd\x76\xd2\xeb\x16\x77\
+\x81\x5a\x5d\x4d\xc0\xba\x81\x00\x3c\xb2\xc8\x02\x0a\x34\x25\xf8\
+\xca\x95\x2b\xdf\x73\xdf\x7d\xf7\x6d\x90\xe4\xfc\x54\x01\x50\x8b\
+\x27\xdf\xf6\xb6\xb7\xdd\x4f\x1d\xef\x33\x0f\xe5\xc9\xc0\xc6\x4f\
+\x9e\xd0\x19\xd2\xdb\x35\xc3\x2b\xb5\xb2\x3b\xa3\x64\x87\x79\x16\
+\xe4\x73\x01\xa6\x96\x6a\x34\x73\xfc\x24\x7e\x58\xb1\x4c\x53\xda\
+\xe2\xab\xa4\xc0\x7d\xbd\x57\xb9\x43\x72\x20\xad\xe4\x86\x21\x85\
+\x13\x21\xfb\xbd\x01\x68\x4d\x1d\x79\x45\x2e\xc2\xbe\xc6\x6d\x9a\
+\x8c\x12\xf7\xa6\x25\xe6\x6b\xaa\x7e\xf9\x9a\xd7\x06\x53\x5f\x90\
+\x68\x43\xe1\xd4\xbd\x79\xbb\xc2\x71\x8a\x29\x2c\x2f\x64\xc2\x2d\
+\xb9\x81\x26\xa7\xe4\x52\x8c\x09\x25\x2e\x92\x3d\xd2\xa3\x08\xdd\
+\x7e\xfb\xed\x1f\x35\x6c\xfe\x14\x01\xd8\xa4\x67\xd5\xf0\xf0\xf0\
+\x9b\x6d\xd3\x02\x9a\x45\x92\xe3\xc7\x8f\x2b\x37\x33\xab\x3d\xdb\
+\xb7\x2b\xe1\xb5\x98\x0f\x7b\x6d\x34\xae\xd4\x44\x1b\x0b\x33\x6e\
+\xa8\x92\x5d\xd6\xa5\x23\x47\x54\x5e\x5a\x6a\x23\xbb\xd4\x43\xde\
+\xde\x0b\x36\x38\x8e\x0f\xd7\x58\xad\xae\xf5\x83\x72\x9d\x96\x36\
+\x2b\xa4\xd2\xe7\x5f\x78\x41\x59\xf2\x8a\x2b\x35\xeb\x59\x17\x60\
+\x6c\x0b\xc3\x4f\x7c\x0f\xf6\xad\x92\x17\xc8\x09\x6e\x38\x57\x63\
+\xee\x9a\x82\x31\x4f\x91\x95\x09\xa5\x46\x37\x2a\x3e\x30\xc2\xf7\
+\xa0\x65\xc6\x2f\x59\xc5\x80\x8e\x6a\x5e\xbc\x64\xb1\xa0\x8a\x40\
+\x5c\xce\x01\xea\xef\x06\x13\xd3\x3f\x4d\x00\xa1\xfb\xef\xbf\xff\
+\x1e\xc2\x5e\xcc\xdc\x5c\x06\xfd\x2f\x9e\x3b\xa7\x4b\x50\x17\x68\
+\xba\xb2\xaf\xcf\x32\x1f\x31\xc9\x89\xf5\x41\x34\x58\xc2\x02\xaa\
+\x2c\xca\x6f\x17\x6b\x35\x39\x05\x5e\x2c\x9d\xbf\x60\x90\xdd\x32\
+\x11\x27\x3d\x1d\xdd\xbd\x4b\xc9\x15\x5d\x2a\xe3\xef\x31\xc2\xd4\
+\xf2\xc4\xa4\x2e\xec\xdb\xaf\x6a\xbe\xd0\x36\xfd\x46\x27\x62\x40\
+\xae\x25\xbe\x5b\x6c\xa9\x15\x73\xea\x1e\xdd\x2c\x67\x78\xbd\x6a\
+\xf1\xaa\xea\xe1\x05\x79\xf1\xac\xba\x6e\x5a\xa3\xfe\x37\xbf\x13\
+\xdc\x59\x05\x58\xc2\x38\x40\xe9\x48\x90\xcd\x2a\xad\xe6\x1d\x98\
+\xaf\x9d\x3f\x2f\x1f\xf3\x93\xbe\x1b\x2b\xe8\xff\xd8\xc7\x3e\xf6\
+\x96\x2b\xf9\x0e\x74\x0e\x4c\xbc\x5f\xb7\x6e\xdd\x3f\xb5\xfd\x3a\
+\xc8\x80\xdf\xc4\xd9\x73\xca\xcf\xcd\x69\x23\x05\x89\x61\x3e\x6a\
+\xd2\x52\x99\x2c\xcd\x11\xff\xc1\xb0\xf1\x39\x4f\x35\xbf\x83\x96\
+\x1b\x62\xdd\x36\x7e\x2f\xf2\x5c\x79\x69\x59\x7d\xeb\xd6\xca\x47\
+\x8d\x2f\x01\x58\x2a\x29\xda\xb7\x5a\x0b\x2f\x3d\xa5\xec\x89\x39\
+\xee\xbd\x3a\x3a\x74\xa2\x87\xeb\x95\xe4\x73\x4c\x1e\x11\x56\x80\
+\x46\x49\x61\xfa\xac\x62\x3d\x03\xea\xb9\xee\x06\x35\x86\xd7\xa9\
+\x5e\x29\xda\x7b\xd3\x3c\xeb\x0f\x84\x54\x2f\xcd\x6b\xf9\xcc\x01\
+\xf9\x38\xbe\xaa\xbc\x75\x11\x22\x19\x63\x63\x72\x52\x3e\x5c\xb3\
+\x1a\x29\x8b\x2e\xb4\x46\x46\x46\xee\x91\xf4\xb7\x50\xf5\x4a\x01\
+\xf8\xe8\xeb\xf5\x51\xec\x6c\x43\x00\xb6\x46\x5f\x9a\x9f\xd7\x0c\
+\xc0\xe7\x15\x8a\x1a\x1d\x18\x84\x79\x4f\xe0\x7d\x0b\xf4\xd4\x12\
+\x00\xa7\x14\x2a\x4b\x95\x4c\x42\x3d\x23\x61\x92\x91\x90\xb8\x6c\
+\x85\x20\xa8\x00\x08\x25\xfa\xfb\x59\x5c\x55\x0d\xe2\x7d\x94\x92\
+\x36\x68\xd2\x65\xaa\x44\x0b\x1d\xed\x4c\x11\x8b\x69\x9b\xbd\xcb\
+\xbc\xf4\x06\xca\x05\x25\x82\x43\x6a\x54\x29\x74\x66\x2f\xa8\xd0\
+\x33\xc8\x3c\x2b\x69\x93\x05\x99\x2b\x6d\x05\x40\x6f\x0d\x21\x56\
+\x55\xbc\xf4\x8c\xca\xf3\x17\x98\x2c\x70\x75\xaa\x67\xc0\xb5\x84\
+\x30\x97\xb3\xaa\xd3\x91\x0a\x66\xba\x2c\x18\x92\x22\xdf\x2a\x29\
+\x7e\x8d\x00\xde\xf7\xbe\xf7\xed\xa4\xe7\x96\x32\x75\x7e\x1d\xbf\
+\x5e\x64\xf1\xb9\xf9\x39\x85\x78\xa8\x2f\x95\xb4\xa6\x1f\xb8\x42\
+\xfb\x12\xa3\x44\x4e\x8e\x65\xf4\xd3\xcc\x1c\x1a\x54\xaa\xe6\x80\
+\xcc\x2d\x21\x48\x56\x10\x2d\xcd\x3a\x15\x85\x32\xd7\x59\xbb\x4b\
+\x76\xf7\x90\xae\x26\x61\xfc\xef\x05\xb5\x6c\x05\xd0\x10\x12\xc0\
+\xd7\xc1\x1f\xa7\x2e\xa9\xc6\x5c\x01\x42\x20\x45\xce\xd8\x8f\xd1\
+\xf4\x0d\x4a\xaf\x24\xc4\xca\x69\x27\x57\x2e\x65\xf2\x69\x15\x27\
+\x9e\x43\x18\x01\x6b\x8d\x57\x49\x80\x63\x38\x96\x43\x16\x5b\xa3\
+\x3f\x11\xdb\xb8\xd1\xe2\x55\x32\x99\x1c\x7d\xef\x7b\xdf\xbb\x96\
+\x56\xda\x92\xb9\xab\xe3\x0b\xc1\xcd\x9b\x37\xef\x68\x58\xe0\xf1\
+\x6c\x03\x73\x79\x76\x4e\x55\xe2\x68\x8c\xef\x69\x90\x36\xc8\x1f\
+\xf5\x75\x90\xda\x35\xe4\x5a\x72\x2b\x1c\x67\xb3\x30\x38\x48\xd2\
+\xe2\x5a\xc1\xe2\xfb\x68\xc7\xf8\xb1\xa1\xba\xdc\x26\x85\x4c\x77\
+\x9f\xd5\x78\xc7\xd4\xbd\xcb\x73\xb9\x1d\x74\x87\x60\x3c\x88\x30\
+\x09\x7d\xcc\x63\xae\x63\x05\x7e\xf9\xf2\x21\x95\x4f\x1d\xd0\xc2\
+\xab\x87\x39\xc7\xf9\xa6\xc1\x9e\x25\x15\xce\x3f\xa6\xc2\x1c\xbd\
+\x01\x04\x5f\xcf\x5f\x5b\xf9\xda\x39\xc1\x19\x17\x6b\x0e\x4a\x82\
+\x3f\xdb\x7e\xa7\x48\xba\xd1\x28\xfd\x4a\x0b\x08\x63\x1a\xd7\x99\
+\xf0\x02\x59\xd4\x2c\x90\x50\x08\x41\x24\xda\xa5\x6c\x80\xf3\x72\
+\x98\x54\x90\x73\xd9\xd3\x6c\xde\xdf\x58\x32\xa5\xe9\x9c\xa2\x83\
+\x6b\x94\x3d\xf4\x8c\x2a\x97\x6a\x1d\x3c\xb0\xc5\x4c\x78\x75\x4c\
+\x99\x70\x54\x24\x16\x5a\x9a\x9c\xe0\xba\x07\xe3\xcd\xcb\xe9\xb0\
+\x5b\xad\xd1\xe8\x98\x57\xe0\x62\x45\xd1\xeb\xd7\x60\xe6\x61\x2d\
+\x1e\x3b\xa2\xca\x82\x1f\x86\x5b\xf7\xf8\xfc\x35\x85\xce\x9d\x56\
+\xa3\x56\x51\xd7\xaa\xf5\x98\xfe\xb3\xaa\xcc\x8f\xa9\xb4\x80\x5b\
+\x16\xa5\x7a\xe1\xda\xfe\x07\xcc\xd8\xf4\x98\x57\x4e\x56\x79\x00\
+\x9d\x3d\x0d\x18\xae\x6f\x0b\xa0\x61\x05\x40\xba\x18\xe5\xe4\x68\
+\x5b\x00\x36\x01\x2a\xe7\x73\xf2\xd7\xea\xb6\x3b\x13\x70\xeb\x98\
+\x62\xf8\x1f\x2c\xa8\x3c\xa8\x56\xc0\xdf\x27\x4e\xab\x67\xe3\x0e\
+\xe5\x87\x46\xc9\xc2\x9e\x57\x79\xc1\x33\x8b\x87\x19\x68\x68\xc0\
+\x40\x33\xa1\x2a\x8e\x35\xc0\x2c\x9d\xe2\x46\xa5\x53\x00\x59\x37\
+\xc1\xda\x96\x54\xca\xe4\x94\x19\xb8\x9d\x67\x69\xa2\x5e\xbc\xa0\
+\xfc\xc5\xc6\x55\x40\x19\x8c\x73\x5f\xed\xbb\xf2\x6e\xbd\x59\x95\
+\xc9\xa7\x54\x5e\xac\xa9\x59\x8c\xaa\x3c\x57\x27\xa7\xa8\xf2\xb7\
+\xac\x17\x5d\xbd\x4c\x5c\x5a\x46\x08\xf4\x26\xa9\x8c\xac\x52\x00\
+\xc3\x75\x6d\xe5\xd7\x6d\x82\xcd\xc9\x08\xfe\xdf\xdd\xa9\xc4\xea\
+\xa0\xa6\xcb\x03\x41\xd3\x91\x09\x88\x73\x39\x72\x11\x34\x68\x7c\
+\xfc\x27\xd2\x69\x66\xc4\x4c\x9b\xf4\xec\x12\xe4\xe7\x45\x0d\x6c\
+\xd8\xae\xd2\xf8\x51\x98\x58\xb4\x02\x18\xde\xb3\x4b\x4e\xb7\x2b\
+\x07\x21\x86\x58\x40\x64\xc5\x88\x4a\xaf\xce\x6a\x74\xcf\x1b\x25\
+\xaf\x85\x01\x67\x9e\x79\x56\x7e\xea\xfd\x08\x7d\xbe\xee\x61\x22\
+\x45\x31\xcf\xf5\x9b\x55\xdf\x1c\x63\x0e\x33\x7f\x15\x4d\x2f\x68\
+\xe1\xf4\xb8\x8a\x67\xa6\x34\xe1\xfe\x9d\x32\x83\x39\x84\x44\xb4\
+\x28\x86\x55\x99\xcb\x2b\x10\xa9\xcb\x09\xb3\xf6\x25\x3f\x56\x72\
+\x79\x6d\xd6\x0d\x7d\x75\x97\x90\x5d\xc4\x00\xfa\xad\x1b\xc0\x6b\
+\x7f\xc7\xfa\x2f\x63\x00\xbe\x11\x45\x00\xd6\x02\xdc\x3a\x92\x05\
+\x40\xa8\xeb\x61\xcc\x91\x8b\xf9\x05\x42\x36\x5e\x5f\x4d\xae\x6b\
+\x47\xaf\x8e\x58\x08\x87\x15\x6a\xf4\x10\x5a\x0e\x0f\x0e\x81\xd8\
+\xd6\xcf\x6d\xb8\x13\x0c\xd4\x8b\x59\xeb\x42\x19\xac\x24\x3c\x14\
+\x15\x27\x3b\x58\x80\xe6\x5c\xc5\x46\x42\xea\xd9\x76\x8b\xfc\xa1\
+\x20\xf3\x56\xed\x73\x16\x6b\xcc\x75\x4c\x37\xde\xdf\xa7\x91\x9b\
+\x6e\x26\x5b\xcd\xc0\x64\x5e\xf9\x19\xae\xe5\xfd\x58\x4e\x90\x28\
+\xb0\x48\x32\x86\x9b\x76\xb9\x8a\x64\x58\xcb\x95\x3a\x6a\x97\xe6\
+\x5e\x0d\x1e\x02\x81\x4e\xc8\x8f\x9b\xe1\x2a\x01\x70\x32\x72\xb9\
+\x16\x77\x5b\x80\x17\x96\x14\x89\xf9\x31\xdd\x28\x8b\xd4\x15\x49\
+\xcb\xb5\x82\xf0\x4c\x49\x5a\x5a\xb6\xb1\x21\xdc\x3d\x80\x46\xdb\
+\x80\xe7\x1a\xe1\x34\x31\xfb\x49\xc1\x15\x89\xcb\x0a\x65\x76\xdd\
+\x22\x5f\x2c\xcb\x12\x4a\x24\x31\x45\x25\x56\x39\xca\xec\xbe\x55\
+\x99\xd5\x6b\xdb\x00\x57\x62\xc1\xb8\xa3\x4d\xa6\xda\x64\xc1\xd2\
+\x53\xff\xa6\x75\xd6\x2a\x4a\x53\x92\x9b\x8d\x20\xd8\xba\xaa\x26\
+\xde\x57\x1d\x18\xa4\x14\xee\x62\xed\xc1\xab\x2c\x14\x62\xe4\x79\
+\x9a\xa8\x1d\x01\xc4\x7e\x12\x04\x1d\x4c\xc3\xf1\x0c\x83\xf6\x4a\
+\xd3\x5e\x08\x3a\x52\x18\xb2\xe8\x0f\x98\xd9\x30\xe5\x75\x26\xbe\
+\x3a\xe6\x34\xeb\x46\xca\x06\xa1\xeb\x36\x7d\xc5\x96\xda\xd6\x01\
+\x92\x97\x7d\xf2\xa6\xcf\xab\xb1\x9a\x50\x18\x0a\xab\xff\x86\xdd\
+\xca\x12\x59\x34\x77\xc6\x3c\x49\x65\x78\x17\xf8\xb1\x0d\x2d\x8a\
+\x79\xd0\x7e\x39\xaf\x06\x02\x38\xfd\xa3\xa7\x2c\xd3\xe1\x78\x5c\
+\x83\x37\x5c\x8f\x55\x31\xab\x93\xc5\x22\x82\x6a\xe4\x04\x78\x86\
+\x55\x26\x5a\x79\xf8\x39\x38\x06\xcc\x98\x05\x7b\xf8\x7a\x93\xe7\
+\x9d\x2b\x85\x60\xad\x08\x2b\xef\x84\xe7\x4e\xd2\xd8\x11\x00\x42\
+\xe7\xc3\x85\x76\x3b\xcc\x4f\xa3\x11\x62\x45\x7e\x18\xf0\xe1\x54\
+\x75\xb7\x80\xb6\x42\x52\xbd\x3d\xe7\x55\x42\x68\xb6\x42\x98\x5a\
+\x3e\xe7\x96\x0b\xb8\x90\x09\x93\x56\x8b\x00\x1e\x52\x07\x89\x0b\
+\x53\x17\x94\x1a\x59\x85\x80\x7c\xea\xdd\xb8\x55\x8d\x35\x68\x5c\
+\x20\xbc\x31\x7b\xeb\xaf\x35\x35\x8c\xf6\x4b\x05\xc6\x20\xb1\xbf\
+\x64\x05\x50\xcb\x17\x48\x84\x7a\x94\x59\x13\xa3\x29\x7b\x09\x2c\
+\xc1\xdd\x96\x22\xcc\x5b\x47\x00\xb3\xed\x90\x07\xb9\x0e\x2e\xd4\
+\xb4\x02\xa8\xe6\x6c\xc8\xb2\x82\x11\x14\x08\x87\x6d\xe9\xcd\x77\
+\x53\x17\x94\x0c\xcf\x57\xba\x80\x0b\xff\x95\x8e\x00\x02\xc1\x80\
+\xc2\xc1\x90\x15\x40\xb3\xcc\x12\x17\xa7\xd4\xe0\x38\x94\x34\x3c\
+\xa3\xd5\x2b\xfc\x1f\xe2\x24\xa3\x9f\x3e\x7d\x2c\x69\x05\x51\x5b\
+\x9c\x36\xa6\xd9\xbe\xee\xb6\xcc\xb9\xe8\xd3\xd2\xf1\x83\x68\xc6\
+\x30\x55\x13\x92\xc4\x4d\x70\x2f\x88\x63\x90\xd8\x16\x39\x30\x4b\
+\x31\x55\x2a\xa3\xd5\xcb\xee\x86\xe6\xfd\xa4\xc3\x21\x55\xaa\x13\
+\xe4\x13\x45\x04\xd0\x24\x22\x04\x40\xff\x29\xee\xab\xb5\x75\xd0\
+\xae\x03\x1c\xc1\x2c\x7e\xcf\xd8\xd6\x26\x6b\xf3\x29\x9c\x4c\x5e\
+\x16\x00\xd6\x5e\x96\xe4\x5d\x69\x01\x55\x8a\x85\x2c\x17\xe4\xf0\
+\x2f\x88\xb4\xa2\xd4\xf3\x05\x53\x86\x56\x1c\x55\x2f\x4d\x2a\x0a\
+\x6a\xbb\x4b\x53\x0a\xa7\x43\xaa\x2e\xb9\x1d\xe5\x63\x15\x14\x48\
+\x5d\x52\x33\x19\x55\xbc\xb7\x4f\x75\xb4\x5f\x9e\xba\x88\x00\x0c\
+\x00\x36\x21\xd7\x2c\x02\x01\x38\x2a\x2d\x9e\x52\x61\xc3\x46\xac\
+\x60\xd4\x6a\x85\xa7\xda\xeb\x68\xf9\x37\x44\xec\x9f\x46\x0e\x4d\
+\x0b\x82\xa3\xb7\xdc\x6c\x05\x10\x8c\xfa\x15\x88\xcf\xca\xf5\x16\
+\x50\x42\x59\x71\x94\x51\x9e\xe1\x38\x32\xaf\x6a\x10\x86\xea\x6a\
+\x15\x44\x30\x6e\x4a\x82\x9a\x8d\x6d\x86\xe0\x06\x1e\x3c\x53\x84\
+\x51\x94\x75\xde\x99\xa1\xec\x79\x06\xb7\x63\x01\x4d\x88\x28\xb3\
+\x30\xe9\xb5\x93\x9d\x40\x84\xbc\x9d\xc2\x21\x84\x69\xca\x63\xc2\
+\x19\xfa\x82\x17\x4f\x29\xb3\x69\xbb\xe2\x1b\x57\x28\x71\x5d\x58\
+\xb1\x15\x94\xc6\x2b\xa5\xd4\xfa\xa8\xd2\x3b\x37\x72\x6d\x27\x9a\
+\x0a\xa8\x34\x37\xad\xda\xec\x02\xe6\xd9\xd2\x1e\x02\x80\x18\xb1\
+\x82\xf2\xa5\xa2\x96\x8e\x1e\xe0\xb8\x24\x54\x67\x1b\x9a\x6a\x6b\
+\xbe\x69\xc8\xa5\x09\x33\x8f\xb5\x95\x1c\x2e\x5b\xf4\xc7\xa4\x03\
+\x54\x7a\xa4\xb3\xd5\x29\x3a\x3f\xe4\x23\x7c\x0f\xc5\x68\x84\xa4\
+\x27\x94\x1c\xad\xaa\x6b\x6d\x43\xd1\x6e\x62\xfb\x30\x58\x91\xa0\
+\x44\x4e\x19\x16\x3a\xd6\x60\x5c\x22\x24\x7f\x3c\x81\xe2\xd2\xea\
+\x58\x38\xca\x3e\xcb\xe0\x5e\x69\x01\x15\x5e\x37\x5f\x68\xa7\x8a\
+\x56\x00\x71\x3a\x2d\x61\x80\xca\x71\x72\xaa\x2e\x37\x95\x3b\xfa\
+\x8a\x86\x6e\xbc\x59\xdd\xeb\x37\xca\xb9\x7e\x37\xfe\x99\x67\x81\
+\xb8\x45\x22\x69\xcd\x2b\xc4\xbd\x1e\x0c\x94\x2e\x9e\xc5\x05\x4c\
+\x62\xd2\xb0\x21\xc8\x46\x08\x00\x94\x0f\x7e\x4b\x59\xfa\xea\xb8\
+\x4a\x37\x6c\x53\x6a\x68\x58\xb0\x29\x62\x94\x05\x4e\xdb\xe2\x22\
+\x6f\xaf\x13\x4a\xdd\x52\xc8\x0a\x8e\x05\x83\x17\x75\xc6\x59\xc5\
+\x7a\xa9\x27\xd2\x31\xd6\xd3\x24\xaf\x99\x50\x62\x10\x54\xc7\xdf\
+\xb3\xb1\xba\x92\x83\x8e\x55\x54\xac\xdf\xa3\x36\xc1\xcc\xc9\xf0\
+\xf9\x87\xc9\x1b\xcb\x89\xcb\x47\x63\xc6\x6f\x92\x20\xe6\xe7\x63\
+\x36\x5b\x9c\x66\x68\x5c\x89\x01\xb5\x31\x3e\x6e\xfb\x8f\xfa\x90\
+\x5a\x82\xfa\x3f\xc2\xc3\x4c\x62\x4d\xac\x7c\x3e\xaf\xe9\xe7\x7f\
+\x04\x43\x25\xf9\x9d\x0a\x85\xc9\x08\x4c\x0c\x21\x71\xee\x71\x6c\
+\x1e\x4f\x3c\x9e\x21\xef\x9e\xc5\x8f\x6d\x28\x6d\xbd\xf4\xb4\x16\
+\x00\xd5\x4d\xdd\x40\x9a\x3d\x57\x50\x69\xf2\x02\xf7\x57\xed\x33\
+\x1e\xd4\x74\x49\x9d\x99\xb7\x78\xe1\x04\xe8\x5e\x36\xf7\xd9\x6e\
+\xd1\xf9\x67\x9f\xd3\xf4\xb1\x1f\xab\xb4\x7c\x46\xd1\x01\x3f\x16\
+\x66\xc2\xd5\x8c\x22\xe9\xb8\x42\xa9\xa8\x62\x03\x41\xf5\x6d\x75\
+\xd4\xb3\xc9\x53\xcf\x96\x06\x02\x90\x4d\xd6\x1c\xd7\x47\x04\xf3\
+\xb5\x36\x5c\xa0\x9c\x38\x1d\x67\xe1\x0a\x9d\x4c\xf7\xa5\x97\x5e\
+\x3a\x72\x0d\x08\x3e\xf9\xe4\x93\x87\x79\x97\x56\x32\x37\x38\x94\
+\x9d\x71\x04\x10\xc5\x0a\x8c\x09\x35\x25\xea\x7b\x29\x77\xf8\xa8\
+\xe6\xc7\x0e\x61\xde\x79\x62\xef\x84\x8d\xd9\x96\xbc\x9a\x05\xb7\
+\xfc\xe9\x63\xc4\xe6\x26\xd7\x3d\xcb\x7c\xc7\x05\x3a\x84\x50\xb8\
+\x86\x20\xb0\x1e\x98\xb7\x66\xcf\x09\xc2\x24\xf5\xc1\xf4\x5e\xcd\
+\xef\x7f\xc2\x6a\xd0\xab\x59\x90\x45\x08\x15\x18\x68\xd0\xf1\x09\
+\x71\xef\x12\xe7\x2f\xe2\xe7\x30\x97\x48\x51\x7c\xf5\x70\x2d\x4e\
+\xe1\x14\xa2\x90\xf1\x81\xfc\xed\x30\x58\x43\xf7\x35\xbf\x22\x4e\
+\x00\x1c\x8b\xc9\x0b\x85\x08\xbb\xf4\x12\x4c\x94\x81\x30\xff\x69\
+\xb6\x1b\x9d\xfc\x49\x10\xf4\xf8\x5c\x64\x33\xc3\xab\xd4\x04\xdb\
+\x48\x15\x49\x66\x32\x4a\x50\xe2\xe6\xe9\xa8\xd8\x5c\xda\xe5\xe1\
+\x0b\x35\xcd\x3d\xff\x14\xdd\x9d\x21\xc5\xfa\xfa\x55\x5d\x30\x66\
+\x69\xea\xfd\x10\xe0\x35\xa7\x3a\x55\x57\x2d\x17\x31\xcc\xb6\xa3\
+\x83\xc9\x0f\x60\x1e\x57\x41\x8a\x9c\x73\xad\xc9\xe3\x9b\x30\x58\
+\x80\xa1\x79\x79\x95\x33\xb8\xd8\x51\xac\x62\x99\xe2\x86\x34\x35\
+\xe0\xb4\xdc\x47\x02\xe9\x23\x58\x98\x41\xf5\x79\x70\x61\x49\xa1\
+\xae\x1e\x1a\x17\x71\x14\x94\xa0\x59\x02\x40\xc3\xa4\x70\x51\xb1\
+\x36\x61\x31\x6e\x1d\xed\x57\xc0\x8c\x0a\xd1\x05\x73\xf1\x27\x53\
+\xaa\x74\xa5\x71\xdb\xf5\xca\xb6\x37\x66\xcd\xcf\xcf\x1f\x94\x94\
+\xfd\xc9\x96\x58\x13\x9a\xc7\x0b\x9e\x05\x21\xad\x99\xf8\x31\x9d\
+\xf4\x9a\x35\x0a\xa6\x52\xed\xa6\xa4\xd0\x9c\xa3\xfc\x49\x1a\x25\
+\xfb\x9e\x46\x71\x86\x81\x32\x42\xb8\x00\xd3\x33\xaa\x2d\x2f\x81\
+\x65\xa1\xab\xc2\x97\x07\xb5\xcd\x1f\x42\xe3\x6a\xa0\x41\x97\x89\
+\x2e\xaa\x3a\xbf\x17\xac\xd8\x8b\xc6\x8f\x32\x4f\x56\x45\x84\x0b\
+\xd6\xd8\x8c\xce\x41\x60\xe4\x06\x3c\x5f\x67\xfe\xf3\xcc\x3b\x4b\
+\x68\x0e\xc2\x78\x44\x0e\xc2\xf6\x05\xad\x10\xf0\xeb\x2e\xe6\x8b\
+\xf3\xbd\xdd\xaa\xc9\xe1\xf7\x65\x42\x78\x1d\xed\x93\x70\x05\x33\
+\x19\xa5\xae\xdf\x2a\x5f\x3c\x66\x9b\x21\xa6\xd7\xc1\xde\x81\xc7\
+\x84\x4a\xff\xa1\x9e\x60\xe9\x3b\xdf\xf9\xce\xf7\x30\x91\xaa\xc1\
+\x02\x87\x50\x18\xe7\x0d\x4c\x64\x90\xb4\x36\x16\xb5\x21\x05\xb9\
+\x80\xf2\xd2\xf2\xe1\x63\x5a\x3a\x31\x66\x72\x76\xa8\x26\x37\x3f\
+\xa7\xe5\xb1\x7d\x2a\x4d\x2f\xb0\xc0\xa0\x01\x1c\x8b\x1d\x3c\x70\
+\xd9\xfc\x1b\x90\xcf\xef\xa2\x4d\x63\xf6\x27\x08\xaf\x17\x44\xc5\
+\xc5\xb1\xc9\x14\x49\x6d\x67\xc8\xeb\x0b\x71\xc1\x91\x15\x58\x85\
+\x0c\xaf\x1b\x8c\x49\xf6\x0d\x12\x96\xbb\x15\x80\xe9\x96\x19\xc9\
+\xb6\xcd\x85\xf6\x1d\x5f\x08\x0e\x18\x9b\x30\x8e\xe9\x8b\x42\xc8\
+\x57\xc0\xfc\x3d\x08\xe4\x5f\x0e\xfa\xb4\xfa\xce\x3b\x55\x67\x1d\
+\xed\x0d\x1d\xcb\xff\xf3\xab\x5f\x7d\x54\x92\x7b\x4d\x4f\x50\x2c\
+\x85\xed\x25\x63\x48\xe8\x50\x3c\x1e\xbf\x85\x92\x51\x41\xd0\x33\
+\x45\x27\x25\x4b\x77\x55\x24\x27\xcc\x62\x2b\xad\xdc\xb9\x3a\xfe\
+\xba\x4f\x09\x5c\x21\x94\x4e\x09\x75\x63\xa2\x05\x15\xcf\x03\x82\
+\xe5\x59\xe5\xa7\xd1\x98\x79\x3e\x81\x76\x22\x61\xae\xdb\x82\x04\
+\x90\x42\x33\x69\xa8\x2f\x20\xc0\xc5\x76\x8b\xb9\x04\xb3\x2e\x89\
+\x48\x85\x50\x9b\x27\xf5\xbe\x84\x15\xd4\x5a\xcf\xf8\x4d\x76\x88\
+\x40\x8a\x97\x6b\x14\xdc\xa3\x6c\xdd\x11\x0d\xb5\xdc\xac\x0e\x55\
+\xb8\x37\x8f\xd5\x2c\x04\x14\xc8\x13\x26\x11\x8c\x47\xdc\x0f\x6c\
+\xda\xa0\x24\x2f\x6f\xe7\x0a\x79\xdb\x0d\x62\xd3\xc4\xe3\xf9\x62\
+\x71\xca\x4a\xf2\x5a\x01\xd8\x93\xb3\x7b\xf7\xee\x7d\x84\xf6\xb8\
+\xd9\xdc\xe8\x04\x89\x02\x49\x04\x50\xe4\xbd\xa0\x72\x79\x28\x67\
+\xb5\x5a\x2b\x38\xca\x9d\x9e\xd7\x12\xe7\xfb\xf7\xec\x84\x11\x59\
+\x8d\x37\x1d\x17\x01\xd5\x29\x54\xa6\x68\x5e\x56\x6c\x1c\x0f\x63\
+\xce\x84\x22\x50\x1b\xad\x24\x73\x8a\x0f\x61\x5d\x32\x61\xcf\xb1\
+\x59\x9c\xc7\xc2\xb2\x2f\x5f\xd2\xfc\xcb\x0d\x30\xc6\xa7\x64\x66\
+\xb0\x53\x9e\xd8\x66\x4b\xad\x14\xc6\x5d\x7c\x8a\x90\x03\x78\x80\
+\x26\x21\x02\xa1\x76\xf3\xf7\x10\x08\x2e\xa8\xb2\xd1\x08\xb8\x32\
+\x8b\xf6\x97\x30\xff\x32\x18\x80\xdb\x9e\x25\xc3\xdc\xf0\xcf\xde\
+\xad\xba\xcf\xe9\xec\x55\x74\xbf\xff\xdd\xef\x7e\x05\x26\x4b\xe2\
+\x73\x8d\x00\x3a\x49\xd2\xfe\xfd\xfb\x1f\xc7\x0a\x5e\xd9\xbe\x7d\
+\xfb\x36\xfa\x67\x0a\x00\x84\x5d\xbb\x76\x69\x79\x0e\xf3\x86\xa9\
+\x26\xa4\x86\x30\x59\x72\x83\x53\xa7\xd4\xbd\x69\x2d\x0c\x46\xf0\
+\xd7\x12\x3d\xfe\x57\xb4\x34\x0e\x63\x2d\x03\xb3\xa6\x7f\xfe\x99\
+\xe7\x8c\x55\xab\x7b\xa3\xc7\xcb\x4d\x97\x4c\x2e\x88\xb5\xa0\x79\
+\x00\x8b\x66\x08\x02\x80\xc9\x2c\xe9\x33\x9a\xf3\xc8\x00\x27\x5e\
+\xdc\x7f\xe5\x0e\x26\xee\x97\x46\x76\x01\x8e\xfd\x54\x99\x7d\x30\
+\x69\xe6\x75\x0a\x08\x1d\xa0\x2d\x92\x3c\x65\x6b\xf2\x2f\x32\xd7\
+\x14\x82\xce\x05\x01\xbf\xa8\xf2\x7d\xdd\x8a\xdc\xb2\x5b\x29\xc0\
+\x6f\x1e\xed\x9b\x8d\x1d\x67\x4e\x9f\x7e\xe2\x99\xa7\x9e\x3a\x20\
+\x56\xff\x53\xdf\x0e\x77\xb2\x42\x5e\x8b\xf9\xb6\x6c\xd9\xf2\x16\
+\x3a\xc5\x8e\x49\x8a\x82\x50\x9d\xee\x6a\x93\x56\xb7\x8c\x00\x6c\
+\xda\xea\x90\xa2\xd6\xd0\x68\x17\x3e\x38\x21\x77\xf9\x15\xb0\xa0\
+\x2c\x8c\x11\x80\x74\xac\x69\x63\xe1\x24\x55\x52\x7a\xb5\xa7\xde\
+\x55\xae\x7a\x77\x05\x40\x72\x98\x08\xf9\xb0\x0e\x23\x00\x21\x08\
+\xfc\xff\xac\xa7\xec\xb4\x0f\x30\x75\xae\x69\x3a\xe1\x5d\x60\x90\
+\xa3\x44\xcc\x53\xa8\xa7\xfd\x72\xd4\xb6\xa1\x58\xc3\x32\xda\x9f\
+\x02\x57\x26\xb9\xe7\x22\x20\x59\x00\x24\xfb\x07\x75\xaa\x2f\xa5\
+\x1d\x0f\xfe\xa1\x6a\x91\x90\x49\x7a\x44\x92\x57\xfb\xc6\x23\x8f\
+\x3c\x38\x7e\xf6\xec\x31\x33\xe5\xcf\x7a\x3d\xee\xb2\x0d\x75\x86\
+\x77\x69\xdb\xd9\x6a\xb2\x26\x12\x8d\xb2\x80\x98\xc2\x50\x69\x6e\
+\x16\x90\xa1\x2f\x8f\xd9\xa2\x3d\x00\xad\x81\xc4\x27\x15\x0c\x9d\
+\xc5\xa5\x2b\x80\x95\x09\x18\xd4\x06\xa4\xa6\x80\x34\xcd\x89\xa6\
+\xba\x60\xbe\x67\x65\x83\x66\x87\x0f\x40\x0d\x60\xbe\x41\x9b\x5b\
+\xd8\xac\xa6\x2d\x80\xfa\x82\x47\xb2\xe3\x53\x69\xde\x0a\xa5\xa3\
+\xfd\x4e\x25\x6b\x29\xc1\x5c\xb1\x3e\xb5\xdc\xad\xc1\x89\x3c\x37\
+\xce\x50\xfa\xe2\xd1\xc1\x69\x7c\x3f\x6b\x36\x47\xf4\xea\x04\x09\
+\xd2\xba\x7f\xf7\x51\x45\x79\xf9\xba\x48\x64\x9a\x9b\x9b\x63\x2f\
+\xd3\xfe\xaf\xfd\xcd\xc3\x0f\x3f\x64\xf2\xb9\x9f\x77\x83\x44\x89\
+\x0d\x88\xb3\xec\xb8\x7a\x07\x1b\x0c\xc2\x30\x6f\x22\x01\x42\x88\
+\xab\x44\xf9\xe9\x00\x88\x04\x5d\x5b\x76\xc6\xd3\x15\x16\xd6\x80\
+\x29\x07\x40\x74\x38\x86\xf1\x98\xc7\xf9\xa6\x52\x7d\x9e\xd2\xc3\
+\x4d\xa5\xb7\xf8\x31\x5f\x7c\x33\x12\x82\xa2\x58\x40\xbc\x85\xe0\
+\x4d\x59\x60\x13\x0c\xb9\xcb\x9e\x0a\x0b\x3e\xac\x47\xd7\x7e\x9a\
+\xcc\xdb\x83\x10\x98\xd3\x66\x83\x26\xdd\x5d\xa0\xc4\x9d\x26\xde\
+\xcf\x60\x55\xb9\x30\x80\x99\xd1\x59\xf2\xfd\xf0\xbb\xde\xae\x91\
+\xb7\xbd\x55\xd9\x72\xc9\x68\xde\x00\xdf\xe4\x9f\xfd\xf1\x1f\x7f\
+\x14\x0c\xb8\xe4\x32\xd3\xcf\x2b\x80\x06\x7e\x33\x07\x72\x3a\xec\
+\xc8\xbc\xdd\xb8\x42\x10\x21\x18\x30\x0b\x43\x65\xfa\x73\xbe\x4a\
+\x99\xa2\xa4\xa6\x44\x0f\x9d\xa3\x5e\x13\x8d\xa0\xa0\x6c\x46\x16\
+\xee\xf6\x51\x2c\xf9\x14\x1d\xf6\xa3\x75\x3f\x11\xc1\x68\x3e\x0c\
+\xf3\x09\xf0\x20\x45\x0c\xa7\x34\x05\xc5\x65\x30\xc0\xad\xdb\xf6\
+\x99\x93\x6d\x08\x78\xa4\xd1\x69\x31\xe4\xca\x8f\x2d\x61\xa3\xcc\
+\x99\x49\xca\xbe\x2d\xf2\x2d\xa2\xf1\x59\xfc\x7d\x0e\xca\x86\xb9\
+\x9e\xd6\x85\x44\x46\xb9\x9b\x76\x6b\xcb\x07\xff\x40\x45\x22\xce\
+\x2c\x9a\x27\xb3\x73\xbf\xfd\xcd\xbf\x7d\x60\xec\xd0\xa1\xa7\x8b\
+\x92\xfb\x8b\x6e\x92\x32\xfb\xf4\xcf\xd0\x2e\x5f\xcb\x0b\xc5\x8d\
+\xc6\x15\x82\x26\xb4\x25\x13\xb6\xf8\xa9\xd0\xc5\x4d\xc6\x4b\x8a\
+\x67\xaa\x14\x44\x4d\x2b\x00\x27\xe0\x20\x04\x53\x81\xf9\x18\x61\
+\x3a\x1c\xe0\xd8\x6a\x1d\x4a\xf2\x3d\x0d\xf3\x90\x2f\x81\x2a\x5a\
+\x4d\x10\xe2\x9a\xb5\x82\x00\x56\x13\x2c\x21\x04\x62\x77\x35\x27\
+\xce\x31\x9f\x98\xcb\x41\xd3\xe0\x45\x17\x00\x98\x89\xa0\xf1\x3a\
+\xf9\xfd\x42\x58\x21\x28\x98\x37\xf9\x46\x5a\xe7\x48\x17\x67\xe8\
+\x18\xed\x78\xe0\xe3\xaa\x04\xfc\x2d\xe6\xd9\xd4\xf1\xdc\xd3\xcf\
+\xfc\xf9\xb7\xbe\xf6\x57\x7f\xce\x74\xc5\x7f\xcc\x2e\xb1\x26\x54\
+\x38\x76\xec\xd8\x89\x15\x2b\x56\xec\x21\x22\x0c\x21\x04\x6b\x05\
+\x81\x54\xca\x36\x29\x6b\xe5\x9c\x52\xdd\xe6\x5d\x5e\xcd\x34\x25\
+\x21\x41\x7e\xcc\xd1\x6f\xb2\x33\x98\x07\x94\xc2\x31\x4c\x3e\xc1\
+\xf7\x14\xe7\x93\x5c\x8f\x73\x53\xa8\x95\x83\xd9\x1e\xa3\x6b\xdd\
+\xc9\x71\xc0\x93\x18\x7e\x5e\x47\x10\x29\x1f\x58\x40\x37\x0a\x0a\
+\xd3\x0c\x49\x67\x82\x1a\xec\x0e\x28\x19\x20\x45\x07\xe8\x42\xf8\
+\x7b\xa0\x4c\xc7\x38\xd8\xa3\x13\xfe\x08\x9a\xbf\x49\x3b\x3e\xfe\
+\x31\x55\x10\xfa\x0c\xcc\xa3\x38\xb3\x9f\xe9\xd1\xbf\xfc\x93\x2f\
+\x7c\xb2\x5b\x9a\x5b\xfe\x25\xf6\x09\x7a\x68\x69\xe1\xf8\xf1\xe3\
+\x63\xbc\x36\xbf\x0d\x3c\xe8\x09\x1b\x50\x8c\xc7\xa1\x24\x05\xd3\
+\xb0\xf2\x4b\xa0\x30\xd5\xa1\xdf\xd6\xf6\x08\x41\x62\x0c\x30\xfa\
+\xa1\x90\x80\x3e\x04\x84\x20\xcc\xc8\x79\x35\xfc\x26\x77\x87\xcc\
+\x66\xa7\x06\x63\x83\xb1\x2e\x51\x00\xc1\x36\xd6\xe4\x28\xe9\x49\
+\x5d\x34\x63\xbb\x32\x01\xf5\x76\xc3\x3c\x05\x4f\x97\x2f\xac\x70\
+\x93\x88\x54\x04\x43\xdc\x84\xaa\x80\xcd\x8b\x3c\x1f\x7d\xd7\xbb\
+\xb4\xf9\x5f\xfd\x4b\x15\xb1\x94\xe9\x99\x19\xcb\xfc\xcb\x87\x0f\
+\xbf\xf0\x97\x9f\xff\xc2\xbf\x49\x36\xea\x13\xe7\xe0\xe1\x97\xdd\
+\x29\x4a\x16\xeb\xce\x8c\x8f\x8f\x1f\x23\x2a\x98\x04\xa9\x27\x1c\
+\x89\xd8\x4c\xaf\x19\x89\x53\xa7\xaf\x22\xcb\x4a\xab\x9c\xaf\x90\
+\x81\xd5\x2d\x53\x0c\xb6\x2a\x73\xaa\x50\x05\x43\x2e\x0b\xe0\x84\
+\xd9\xa2\x2b\x15\xb0\x96\x62\x95\xe3\x0a\x54\x6b\x51\xc1\x05\xd8\
+\x1a\x8c\xb8\x50\x09\xcc\x00\xe9\xa2\x50\x02\x9c\x48\xf9\xe8\x4d\
+\x40\xa1\x26\xd6\x57\x8f\x23\xdb\x8c\x26\x7c\x51\x1d\x66\x0d\x9b\
+\x1f\x7c\x50\x43\x77\xdd\xa1\x2c\x51\x69\x6a\x7a\xda\x00\x1e\xbb\
+\x59\x0e\xbf\xf8\xb5\xbf\xf8\xef\xf7\x47\xf2\xd9\xf1\xb3\xac\xfd\
+\x57\xb9\x59\x3a\x82\x05\xdc\xc4\xcf\x61\xfe\x94\x24\x69\x17\xdb\
+\x68\x44\xe5\x68\x37\x48\x85\xca\x00\x62\x7e\x5e\xc5\xf1\x17\x15\
+\x29\x8f\x29\x1d\x98\x57\xa8\x51\x6d\xed\x0a\x35\x8d\x55\xfe\xf9\
+\x9a\x10\xff\x1c\x4b\x9d\xfd\x4e\xed\x37\xc4\xed\x1e\x23\x9e\xd4\
+\x29\x67\xa1\x20\xc2\x0c\xa2\x6d\x46\x2f\x2c\x4c\x4e\x34\xc1\x34\
+\x56\xa6\x17\x71\xd7\x5d\xda\xf8\x9e\x7b\xd5\xc0\x12\x17\xb3\xcb\
+\x76\x57\x3a\x95\xac\x8e\x1c\x3c\xf4\xf8\x5f\x3f\xf4\x95\x8f\x77\
+\x57\x4a\xa7\x8f\x4b\xee\x6b\xb1\x5d\x3e\x44\xc7\x68\x2b\x7b\x08\
+\x3f\xc5\x6f\x05\x7e\x97\x5c\xc1\x61\x03\x92\x22\x21\x80\x09\x33\
+\x8e\x19\x7f\xa6\xa7\x57\x3e\x7d\x08\x3f\x3d\xa5\x1e\x65\x11\x48\
+\x49\x81\x6a\xc3\xee\x23\xf0\xd7\x01\x4b\x5b\x11\x43\xcd\x76\xba\
+\x6b\x81\xc3\x69\x63\x82\x9f\xf3\x86\x60\xda\xe4\xfa\x68\xde\xa3\
+\x08\xba\x58\x71\x75\xae\xe1\xd1\x97\xdc\xa3\x4d\xec\x47\x0e\xb2\
+\x1b\x2d\x47\x42\xb6\x40\x92\xc3\xfe\x3f\xa3\xf9\xc6\x81\x7d\xfb\
+\xfe\xc7\xf7\xfe\xfa\x6f\xfe\xeb\x48\xd3\xbb\x78\x04\x91\xbe\x96\
+\x3f\x98\x08\x40\xc3\x3b\x77\xee\xfc\x83\x37\xbd\xe9\x4d\x0f\x12\
+\x26\x53\xec\x20\x17\x20\xa9\xb0\xc9\xfd\x59\x68\xdc\x41\x61\xc5\
+\x9c\x0a\xaf\x9e\x94\x26\xc7\x15\x9a\xbf\xa4\x1e\x9a\x1b\x09\xf2\
+\xf6\x40\x89\xd4\xb5\x4a\xee\x6e\x84\xc0\x3f\xf1\x8c\x7c\x50\x20\
+\x88\x79\x87\x60\x38\xa2\x1a\xe3\x54\xa9\xaa\x59\xee\xa9\x62\x69\
+\x03\x6f\x78\x83\x46\xd8\x7d\xee\x74\xa5\xf1\xa0\xaa\x96\xb2\x59\
+\x9b\xe1\x4d\x63\xf6\x67\xcf\x9c\x99\x7b\xe6\xc9\x1f\xfc\xa7\xa3\
+\xcf\x3d\xff\xcd\x95\xd4\x73\x07\x25\xef\xf5\xf8\xc9\x8c\x03\xa5\
+\xf9\xdc\x7a\xc7\x1d\x77\x7c\x82\xd7\xcd\x6f\xc6\x25\x7c\x84\x4b\
+\xc5\x63\x31\xbb\x83\x3b\x2c\x29\xee\x0f\x28\xe6\x43\xb3\xe4\xe3\
+\x45\x4c\xb4\x3a\x35\xa9\xe6\xec\x8c\x7c\x30\xa0\x82\x79\x77\x50\
+\xb7\x55\x5e\xc3\x54\x85\xe1\x88\x5c\x00\xd6\x4b\x53\xe3\x0f\xf4\
+\xab\x7f\xcb\x56\xf5\x6e\xdd\x22\x1f\x6e\x46\xd9\xa0\x3c\x6e\x96\
+\xe3\x99\x2c\xcf\xd2\xd4\x10\xd9\xaa\xcb\xa6\xcd\xbf\xfb\xc1\xf7\
+\x1f\xfd\x6f\xde\xe2\xe2\xd1\xf5\xf2\x2a\x3f\x92\x9a\xaf\xf7\x8f\
+\xa6\x82\xd0\x8a\x0d\x1b\x36\xdc\x73\xe3\x8d\x37\xde\xbf\x7e\xfd\
+\xfa\x1b\x00\x4a\xb3\xc9\xda\x6e\x47\x09\xe3\x1a\x21\x63\x15\x50\
+\x14\x0d\x47\x8c\x60\x10\x4a\xc0\x74\x6b\x3b\x11\x83\x63\x87\xeb\
+\xe2\x9a\x82\x41\x46\xbf\x5c\x47\xb6\x86\x2f\x03\x6e\x14\x26\x2a\
+\x96\x4a\xc8\xab\xd0\xc9\xeb\xbd\xd3\xe3\xe3\x2f\x1c\xdc\xf7\xe2\
+\x97\xce\x1d\x1d\x7b\x22\xd3\x6c\x2c\x8d\x4b\x8d\x5f\xe7\xcf\xe6\
+\x1c\x28\x02\x0d\xaf\x5b\xbb\xf6\x2d\x3b\x76\xee\xfc\x17\xb8\xc5\
+\x6e\x04\x11\xc2\x42\xac\x20\x00\x4f\x11\x3d\x14\x0c\xc0\x3c\xcc\
+\xf2\xfb\x20\x2c\x3f\x00\x01\x78\x68\x9f\xff\xd9\xa4\xa8\xe1\x79\
+\x96\xea\x00\x62\x0d\xe6\xcb\x30\x6f\x18\xe7\x17\xa5\x26\xa7\x2f\
+\x4f\x9c\x3f\xff\xdc\xe1\xfd\x07\xbe\x7a\xe1\xd4\xf8\xd3\x51\xcf\
+\x9d\x0f\x49\xb5\x73\xbf\x41\x3f\x9c\x74\xa0\x30\xec\xf4\x26\x62\
+\xb1\x2d\xdb\x77\xee\x7c\xc7\xc8\xe8\xe8\xef\x80\x0f\x1b\x32\xec\
+\xd4\x64\x07\xea\xdf\x0b\x02\x4d\x07\x10\x46\xe7\x5d\x9d\xda\xbb\
+\x37\x08\xb7\xb6\x75\x45\x35\x6a\x4b\xd8\xa5\xc5\xc5\xc2\xfc\xdc\
+\xdc\x31\x36\x6b\x3e\x79\xe4\xc5\x17\xff\x4f\xad\x54\x79\x35\xe8\
+\xd5\x97\x03\xa6\x60\x93\x9a\xbf\xa9\x3f\x9d\x75\xd4\x2a\x0d\xa2\
+\xb0\xd7\x8d\x81\x0f\xaf\xdd\xb0\xfe\xc6\x15\xc3\xc3\xd7\x03\x94\
+\xab\x12\xc9\xd4\xca\x70\x24\x9c\xa6\xf1\x8a\x57\x04\xc3\xdc\x6c\
+\x18\xaf\xd0\xb2\x2a\xc1\xfc\x32\x6d\xab\x0b\xec\x4e\x3f\x37\x39\
+\x31\x71\xf8\xec\xa9\xf1\x83\x5c\x9f\xa6\xfa\xcb\x8a\x3e\xd1\xb2\
+\xe4\xfd\x36\xfe\x78\x9a\xba\x0f\xb7\x97\xc8\xf2\x15\x91\x15\x8c\
+\xc3\xe8\x84\x9a\x9c\xc7\xfc\x3d\x47\xb8\x3d\x90\xc8\xf5\x32\x9b\
+\x54\xcb\xa0\x80\xcd\x08\x0c\xd7\xaf\xf5\x8f\xa8\x9d\xdf\xb0\x5f\
+\xad\x37\xf5\x3a\x7f\xfe\x1f\x5f\xbc\xdd\xe6\x1a\x53\x0c\xc2\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x0d\x06\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\
+\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x0c\x83\x49\x44\
+\x41\x54\x78\xda\xed\x9b\x5b\x68\x55\xd9\x19\xc7\xd7\x49\x4e\xa2\
+\x26\x26\x1a\xe3\x35\x31\x5e\xc6\x54\xad\x97\x4a\x95\x29\x38\x14\
+\xc4\x22\xb6\xcc\x73\x9f\x2a\xf4\x61\x5e\x7c\x10\xc4\xc2\x0c\x08\
+\x7d\x28\xf8\x54\x4a\x1f\x15\xa4\x4f\xf6\x51\x0a\x52\x90\x4e\x07\
+\x41\x94\xfa\xe0\xfd\xd6\xaa\x03\x5e\xc6\xfb\x35\x51\x63\x2e\x46\
+\xcd\xc5\x7e\xbf\x0d\xbf\x61\xcf\x31\x92\x8c\x1c\x83\xc1\x2c\x58\
+\xec\xbd\xd7\x59\x7b\xad\xef\xfb\x7f\xf7\xb5\x93\xc2\xeb\xd7\xaf\
+\xd3\xc7\xdc\x2a\xa2\x8f\x03\x30\x0e\xc0\x38\x00\xe3\x00\x8c\x03\
+\x30\x0e\xc0\x47\xda\x8a\x1f\x1a\x41\xc7\x8e\x1d\xdb\x53\x5d\x5d\
+\xfd\xb3\x69\xd3\xa6\x7d\xe1\x98\xad\xad\xad\xed\x8f\x95\x95\x95\
+\xf3\x57\xaf\x5e\xfd\x8b\x72\xed\xf7\x41\x24\x42\xdb\xb6\x6d\x5b\
+\x50\x2c\x16\xff\x10\xb7\x9f\xcd\x9e\x3d\xbb\x65\xf2\xe4\xc9\x93\
+\x18\x87\x36\xaf\xb6\x81\x81\x81\xc1\x4b\x97\x2e\xdd\x1a\x1c\x1c\
+\xbc\xd4\xd1\xd1\xf1\xb7\xbd\x7b\xf7\x1e\x1a\xd3\x00\x6c\xd9\xb2\
+\xe5\xb3\xfa\xfa\xfa\xc3\x21\xf5\xaa\x21\x09\x2c\x14\xd2\xdb\xc6\
+\x03\x84\x74\xfd\xfa\xf5\x43\x15\x15\x15\xbf\xd9\xb3\x67\xcf\xab\
+\xb1\x64\x02\x32\xff\xcb\x9a\x9a\x9a\x43\x21\x84\xe2\xcb\x97\x2f\
+\x87\x63\x78\xc8\xb1\x96\x96\x96\xf5\xd7\xae\x5d\xfb\x26\x1e\x7f\
+\x35\x96\x9c\xa0\x0c\xfc\xb3\xbf\xbf\x3f\x13\x42\x00\x91\xaa\xaa\
+\xaa\x52\x98\x02\x3d\xbb\xb7\x3b\x6e\x9f\x38\x71\x62\xc6\x3c\xa0\
+\xd1\x9b\x9a\x9a\xd6\x6f\xd8\xb0\x61\xdd\x98\xd2\x80\xcd\x9b\x37\
+\xff\x39\x98\x69\xec\xeb\xeb\x4b\xcf\x9e\x3d\x4b\x0f\x1e\x3c\x40\
+\xa5\x47\x0a\x5c\x0a\x27\x99\x1a\x1b\x1b\x93\xad\xae\xae\xee\xaf\
+\x71\xf9\x74\xac\x00\x00\xb3\x5f\x04\xf3\x48\x10\xef\x9e\x16\x2d\
+\x5a\x94\xc2\xf9\xa5\xe7\xcf\x9f\x23\x65\xe7\xa4\xce\xce\xce\xd4\
+\xd0\xd0\x90\x31\xfc\xf4\xe9\xd3\x34\x69\xd2\xa4\x74\xfa\xf4\xe9\
+\xf4\xe4\xc9\x93\x44\x0b\xff\x91\x68\x53\xa6\x4c\xf9\xf9\xc6\x8d\
+\x1b\x8b\x07\x0e\x1c\xe8\xff\xe0\x01\xd8\xb4\x69\x53\x75\xb4\xe9\
+\x71\x0b\xc3\x78\xf6\xb4\x6a\xd5\xaa\x34\x61\xc2\x84\x74\xe3\xc6\
+\x8d\x34\x6b\xd6\xac\x74\xea\xd4\xa9\xd4\xda\xda\x9a\xe6\xcf\x9f\
+\x8f\x9d\xc3\x60\xba\x7a\xf5\x6a\x5a\xb8\x70\x61\x3a\x7b\xf6\x6c\
+\xf6\x4e\x77\x77\xb7\xe6\x00\x68\x95\x2f\x5e\xbc\xd8\x14\x4b\xfe\
+\xfd\x83\x88\x02\xdb\xb7\x6f\x6f\x7c\xf4\xe8\xd1\xba\x20\xbc\x3f\
+\x88\x9d\x17\xd2\x5b\x31\x73\xe6\xcc\xdf\xde\xb9\x73\xa7\x2b\x88\
+\x9e\x1c\x63\xd3\x83\xe0\x84\x16\x00\x42\xc4\xf7\x77\xd1\xa2\x4c\
+\x33\x02\xcc\x0c\x84\x5b\xb7\x6e\xed\x0b\x8d\xd9\x4f\x38\x8d\x7e\
+\x34\xd6\xfc\xf7\x89\x13\x27\x1e\xbc\x17\x00\x7e\x1d\x6d\xc5\x8a\
+\x15\x95\xc1\x54\x6d\x30\xd3\x7a\xe6\xcc\x99\xdf\xaf\x59\xb3\xa6\
+\x39\x18\x7d\x10\xd2\x68\xba\x70\xe1\x42\xed\xb2\x65\xcb\xd2\xdd\
+\xbb\x77\xd3\xd4\xa9\x53\x53\x57\x57\x57\x7a\xfc\xf8\x71\x46\x6c\
+\x84\xad\xc4\xbe\xd8\x3e\x12\x0c\xa0\x90\xa8\x9e\x7e\xc4\x0d\x4d\
+\x61\x1d\x1c\x28\x66\xc3\xfd\xe5\xcb\x97\xf1\x07\x98\x13\xfb\xbc\
+\x0e\xad\xba\x1c\x4e\xf4\x1f\x3d\x3d\x3d\xff\xda\xbf\x7f\xff\x89\
+\x98\x33\x38\x62\x00\x76\xec\xd8\xb1\xf4\xe6\xcd\x9b\x5f\xc5\x6d\
+\xcb\xe2\xc5\x8b\x6f\xd6\xd6\xd6\xd6\x04\xa1\x8b\x7a\x7b\x7b\x5b\
+\xcf\x9f\x3f\xdf\xc8\x26\xa8\x24\x92\x84\x51\x18\xc0\x63\xf3\x8c\
+\x6d\xbf\x7a\xf5\xca\xae\x27\x77\x69\xa4\xce\x38\x44\xd2\x99\xcf\
+\x18\x4c\x0c\x1b\x0e\x01\x2d\x68\x51\x0b\x78\x3f\x63\xd8\xe7\x90\
+\x7a\x8a\xe8\x82\xf9\x00\x3e\x7e\x22\xdb\x3b\xe8\xee\x6c\x6f\x6f\
+\xff\x26\xf6\xfd\x32\xe6\xdc\x1e\x12\x80\xdd\xbb\x77\xa3\x8b\xbf\
+\x7b\xf8\xf0\xe1\x5f\x8e\x1f\x3f\x3e\x3b\xd4\x88\x97\x0d\x37\x10\
+\x08\xe1\x79\x06\x91\x1e\x1b\xdb\xdf\x78\x46\x42\x74\x1b\x6b\xe0\
+\xd0\x64\x9e\x3d\x60\x8c\x7b\xae\xf9\x6e\xf3\x3d\xaf\xac\xeb\x95\
+\x0e\x00\x79\xe7\x19\x1a\x09\x08\x00\xc5\xfa\x38\x4f\xfc\x48\xe6\
+\x67\x42\x1b\xae\x1f\x3d\x7a\xf4\x93\x37\x00\xd8\xb5\x6b\x57\x4d\
+\xd8\xd0\xd7\xa1\xaa\xeb\x62\x92\x4c\xb2\x10\x1d\xc6\xd8\x14\xbb\
+\x85\x38\x09\x18\x16\x00\x36\x86\x39\x1b\xce\x0b\x2d\x81\x30\xc6\
+\xed\x23\x01\x80\x2e\x93\x79\x10\x58\xcb\x88\xe0\xef\x87\x0f\x1f\
+\x66\x1f\x98\x56\x08\xdc\xd3\xfb\xc3\x24\xeb\x6f\xdf\xbe\xdd\x5b\
+\xf4\x85\x9d\x3b\x77\xb6\x44\x38\xfa\x36\x54\xb9\x96\xd0\x93\x27\
+\x02\x64\x91\x18\xe3\x61\xf3\x69\xee\xdc\xb9\x29\x5e\x06\x08\x36\
+\x96\x30\x89\xcb\xe6\x00\x60\xe4\xea\x3f\x20\xd6\xe6\xfa\x00\x25\
+\x08\x6a\x80\xfb\x39\xce\x9a\x39\x40\x87\xd4\x00\x3b\xcc\xf1\x1e\
+\xfe\x06\x8d\x20\x7a\x60\x56\x08\x12\x20\x42\xab\x11\x24\xeb\x17\
+\xc3\x17\xfd\x09\x5f\x9d\x01\xb0\x6f\xdf\xbe\xc6\x90\xca\xb5\x28\
+\x32\xaa\x64\x3a\xcf\x3c\x49\xca\xca\x95\x2b\x13\xed\xc8\x91\x23\
+\x20\x9d\x81\x10\x7e\x00\xe9\xe6\x01\xc8\x88\x8e\x82\x86\x8d\x01\
+\x8d\x35\xb2\x4d\x6d\x6a\x14\x8d\xb9\x30\xc7\x1e\xd3\xa7\x4f\xc7\
+\x79\xf1\x9b\x1a\x02\xe1\x43\x81\x24\x20\xa5\x20\xc8\x38\xe0\x2b\
+\x79\xd6\xc0\x0c\xe8\xd6\x0f\xfc\x86\xe3\xfd\x2a\x9e\xf7\x64\x00\
+\xdc\xbb\x77\xef\x3f\x11\x77\xab\x54\x53\x99\xd7\xfe\xc9\xb8\x02\
+\x31\x9c\x48\x46\xa4\xf3\x24\x16\xfb\x82\x10\xcd\x23\x22\x00\x8c\
+\xf2\x2c\x00\xae\x9b\xad\x41\x13\x00\x12\x20\xd6\x46\xa3\xc8\x01\
+\xf2\x4e\x50\xa6\x35\x3d\x9b\x29\x71\xe9\x6f\xac\x8d\x83\xc4\xe1\
+\x42\x07\xeb\xd2\xb6\x6e\xdd\x9a\xdd\x9f\x3b\x77\x0e\x67\x4d\xa4\
+\x40\x0b\x2b\x02\x88\x4f\x8b\x21\xfd\xda\x50\x8d\x9f\xe6\xbd\xac\
+\xc4\xa9\x8a\x84\x29\x50\x43\xa2\x80\x81\x84\x4f\x9e\x3c\xc9\x34\
+\xc6\xd9\x54\x00\x40\x18\x86\x95\x8e\x25\xec\x0f\x34\x80\x36\x6f\
+\xde\x3c\x9c\x2a\x5a\x04\x31\xec\x07\xb8\x86\x34\x9e\x5d\x03\x1a\
+\x74\xb6\xec\x87\x76\x71\xcd\xfb\x09\xe6\xb0\xaf\xeb\x93\x1f\x08\
+\x36\x91\x20\xfb\x7d\xce\x9c\x39\x19\x38\x57\xae\x5c\x31\x5a\x4d\
+\x2b\xc6\x4b\xad\x11\x8f\x0b\xbc\xa8\x63\x73\x41\x91\x9e\x31\x63\
+\x46\xb6\xb0\xa9\xea\xc1\x83\x07\x9d\x87\x8a\xb1\xd1\x1b\x6a\xc9\
+\x06\xda\xbf\x44\x0a\xc4\xf2\xe5\xcb\x49\x65\x31\x27\x18\x05\x54\
+\xcc\x0a\xa2\x19\xd7\x9e\x95\x24\xb4\x20\x41\x34\x0d\x3a\x98\x03\
+\xb3\xa8\x3c\x57\x23\x13\x82\x50\x20\x8c\xab\x45\xf8\x37\xae\xbc\
+\x57\xea\x5c\x0b\xc5\xd8\xa0\x10\x8d\x7c\x9b\x8d\xf3\x5e\x7f\x48\
+\xc6\x68\x10\xc6\x6f\x3c\x03\x00\x0b\x43\x30\x44\xd2\x35\x0d\x43\
+\x9f\xef\x31\x8e\x2f\x21\xa5\x25\x09\x82\x69\xf6\x05\x60\xd6\x40\
+\xc3\xb8\xc2\xb4\x0e\xcf\x7d\xd5\x4a\xf6\x31\x17\xc0\xff\xb0\x26\
+\x6b\x01\x12\x7b\xd2\xa0\x01\x3e\xbc\xd7\x17\xd9\xf3\x0d\x0d\xe0\
+\x65\x88\xd0\x86\xe9\x82\x90\x0f\x7f\x02\x61\x1e\xfe\x86\x5d\x6a\
+\x7f\x02\xa0\x59\xd8\xc8\xed\x2f\x5e\xbc\x08\x68\x48\x1d\x89\x03\
+\x00\x3e\x08\x69\xb2\x2f\x84\xeb\x00\xe9\x32\x8b\xf4\x55\x5b\xe6\
+\x40\x07\x6b\xe0\xf0\x58\x83\x88\xc3\x3c\x0b\x26\x53\xeb\x61\x53\
+\xec\xa2\x2a\xf4\xae\x4d\x2f\x9d\x6b\x10\x85\xa4\x4a\xd3\x56\x9c\
+\x1c\x0c\x10\x26\x91\x0c\x73\xd0\x06\x00\x83\x01\x1c\x14\x6b\xe1\
+\xb1\xd1\x1e\xf3\x07\x01\x61\x5d\x68\x45\x73\xb8\x47\x0b\x99\x03\
+\xe3\x80\x00\xf3\xbc\x8b\x43\x25\x04\x1a\xc5\xb8\xda\x87\x01\xa0\
+\x4c\x0d\xc2\x60\xc0\x06\x51\x48\x18\x55\x85\x50\x7d\x47\x14\x46\
+\x5c\x61\x1c\x8d\xc1\x31\xf2\x1e\x0c\xb3\x06\x0c\x41\x1b\x0c\xd2\
+\x01\x4d\xed\x83\x31\xd6\xa5\x94\xc6\x79\x5a\x1a\xb3\x47\x36\x7e\
+\xff\xfe\x7d\x9c\xec\xb0\xf5\x05\x3e\x20\x95\xbb\x69\x32\x46\x15\
+\x98\x8a\x63\x2b\x33\x31\x4d\x0b\x46\xa8\xe0\x32\x82\x97\x2c\x59\
+\x42\xb1\xc4\x19\x5f\x69\x46\x88\xb4\x61\x1e\xa6\x59\x03\x86\x01\
+\x8e\xe8\x01\xd3\x5c\x71\xd0\xac\xc9\x95\x75\x19\xc3\x54\x4c\xb3\
+\x05\xe2\xfd\x6b\x80\x9b\xda\xb0\x47\xc2\x28\x04\x40\xac\x21\x92\
+\x2b\xb6\x8f\x39\x00\x00\xe6\x01\xe1\xe6\x0d\xe6\x21\x26\x2f\xfa\
+\x03\x7d\x92\x76\x0e\x38\x80\x82\xc6\xa8\x25\x8c\x13\xfa\x58\x1f\
+\xad\x1a\xd6\x07\x94\xb3\x11\x26\x21\x02\x50\xb5\x41\xd4\xbf\x94\
+\x79\x54\x17\x82\x91\x26\x7e\x40\x4d\xe4\x1d\x23\x8a\x79\x88\xe9\
+\x30\x73\x60\xd4\xb9\xcc\x43\x5b\xe4\x81\x39\x00\x05\x20\x79\xc7\
+\x6d\x1b\x15\x0d\x30\x03\x63\x63\x25\x44\x83\x59\x01\x80\x09\xa4\
+\x4d\xb9\x8a\xad\x32\x66\x4a\x8c\x64\x35\x15\xcf\x0e\x64\xce\x08\
+\x01\xc8\x98\x0b\x8e\xd5\x04\x88\xf7\xd4\x06\x43\x26\x9a\x85\x1f\
+\x61\x9d\xd1\xd2\x00\xe3\x36\x1d\x86\x70\x4a\x84\xaf\x7c\xa6\x08\
+\xf1\x84\x5d\x3d\x39\x0c\xe8\xd4\xb0\x61\xa3\x00\xa0\x31\x6e\x78\
+\x86\x79\xde\xb1\xe0\xa1\x13\x05\x04\x3e\x9f\x00\xc1\xb4\x7b\x51\
+\x67\x70\xff\x56\x27\x58\x56\x0d\x90\x51\x9a\xea\x8e\x9a\xe7\x55\
+\xd2\x3a\x9d\x28\xc0\xb8\x67\x06\x8c\x31\x17\xa6\xb8\x1a\xfb\xcd\
+\xf4\x90\x3c\xcf\xfa\x05\x8b\x1f\x9a\xd9\xa2\x69\x35\x60\xd0\x0c\
+\x9b\x68\x1c\xfb\x8e\xaa\x06\x68\xab\x4a\xd1\x31\x98\x70\x1e\xfb\
+\x43\x38\x04\xeb\xe1\x71\x60\xf3\x66\x2c\x49\x4d\xd3\x3e\x49\x03\
+\x13\x42\xdd\xbb\x6f\xa3\x29\x30\x6c\x8d\x60\xde\x6f\xea\xab\x84\
+\x87\xca\x1e\xc9\x31\x00\xd5\x7c\xe2\xfd\xfa\x80\x3c\x21\x82\x9b\
+\xaf\xda\x54\x55\x88\xb7\xb4\x05\x00\x41\x50\x0b\xe6\xcf\x5c\x9a\
+\xfa\x6b\x1f\xa7\xe6\xa6\x96\x54\xdd\x96\x85\x4c\xed\x1d\x46\x74\
+\xb6\xac\xc7\x3b\xae\x6f\x04\x92\x27\xfd\x0a\xa6\x88\x29\x00\x40\
+\x59\x35\x60\xd8\x23\x2b\x01\xb0\xa9\x01\xee\x2b\xd1\x8c\xe5\x35\
+\xa1\x50\xf7\x32\x2d\x58\xb4\x34\x15\xeb\xfa\x52\xb1\xba\x39\x75\
+\x90\x2a\xc7\x3b\x66\x99\x9e\x31\xa2\x19\xac\xaf\x29\x5b\xd0\xe5\
+\xa3\x10\xe1\xd0\xcc\xb3\xb4\x55\x94\xd3\x07\xc8\xa8\x04\x20\x95\
+\x52\x60\xf2\x67\x0e\xf9\x7b\x9f\x3d\x23\x7c\xde\xdf\x1e\xcc\x3e\
+\x4a\xb5\x55\xf5\xa9\x3e\xca\xd8\x89\x75\x93\x53\xfd\xec\xc8\x19\
+\x1a\xa6\x38\xcf\xf7\x5c\xc3\xee\xfe\x76\x35\x0d\xb0\xde\x04\xa0\
+\xdc\x3e\x20\x4f\x40\xbe\xa2\xf3\xde\x4c\xd0\xef\x7f\x30\xeb\x5c\
+\xfb\xf7\x31\xbf\xa7\x37\x75\x84\xea\x77\xb5\xb7\xa5\xee\xb6\xf6\
+\xd4\x1b\x6a\x3c\x21\xbe\x9c\x0f\xe6\x34\x8c\xf5\x2c\x99\x05\x54\
+\xe9\x6b\x86\x66\x93\xac\x5b\xda\x8a\x12\x53\x6e\x00\x8c\xdd\x3a\
+\x2d\x9a\xa1\xd1\x33\x02\x55\x9f\x79\x3a\x35\xed\x1b\x6f\x5e\xc5\
+\x07\x8f\xfa\xba\xd4\xf7\xbc\x27\x3d\x8d\x32\xb9\xb3\xa7\x3b\xf5\
+\x15\x99\xfb\x7d\xc5\x0a\x00\xbc\x83\xa7\x57\xd2\xa5\x25\x38\x7b\
+\x50\x83\x70\x1d\x1d\x00\x24\x40\x00\x2c\xb9\x75\x4a\x82\xc2\xbd\
+\x85\x92\xcc\x6b\xe3\xcc\xc9\xca\xe3\xca\x42\x7a\x45\x32\x55\x5d\
+\x91\xba\xba\x3b\x23\xb7\x4e\xa9\xab\xb3\xcb\x13\x6b\x22\x06\x60\
+\x19\xf7\x65\xdc\xc6\x98\xc5\xd2\x90\xad\xa8\x57\x2e\x57\xf3\x24\
+\x57\x42\xcc\xe3\x21\x42\x7f\x03\xb1\x66\x7e\x48\x0e\xdb\xa4\x9b\
+\xfe\xe6\x6d\x96\x10\x56\x37\xb3\x21\x4d\xa8\x9c\x98\xba\x7a\xbb\
+\xd2\xa3\x2b\x0f\x01\x0c\x2d\x61\x4d\xee\xcd\x1a\x3d\x87\x54\xab\
+\xbc\x1f\xdd\x54\x18\x06\xf2\x84\xc0\x84\xa0\xd0\x4c\x7a\x90\x9a\
+\x80\x51\x10\x91\x12\x23\xfd\x7c\xf1\x83\x60\x3c\x95\xce\x67\x82\
+\xda\x33\x8c\x73\x82\xb4\x60\xc1\x02\xcf\x27\x05\xd8\xc4\x89\x44\
+\x69\x74\x8b\x21\x9d\x9a\xcd\xb3\x3a\x80\x80\x60\x6d\x14\xd5\x67\
+\x0c\x66\x01\x8a\xda\x3d\x3e\x5b\x65\xc0\x18\xeb\xad\x05\xb4\x65\
+\x41\xf0\x9c\x32\x3e\xdb\x71\x40\x2b\xd0\xcc\xc9\x3b\x42\xb5\x84\
+\x3d\x47\x4f\x03\x4c\x47\x05\x82\x67\x08\xf1\x68\x8b\x31\x99\xf6\
+\xd0\xd3\x12\x1a\x10\x50\x79\x6b\x04\xab\x41\xdf\xf1\xec\x12\x9a\
+\xa9\x20\x39\x12\xf3\x5c\xd0\x33\x4a\x80\xf5\xd3\x1d\xe6\x05\xf3\
+\xa3\x75\x20\x62\xfd\xaf\xf3\xd3\x0c\x60\xca\x6a\x4d\x02\x21\x1a\
+\x40\xf2\x1f\x47\x19\x83\x21\x8b\x17\xa4\xed\x3c\xc3\x27\x5f\x77\
+\x00\x94\x4a\x12\x06\xd9\x03\xe6\x35\x09\xfd\x0f\x42\xe0\x58\x8c\
+\xdf\x46\xd7\x07\x58\xcf\xeb\x84\x54\x77\x2b\x40\x98\x32\x13\xb4\
+\x74\x36\x1c\xf2\x9b\x45\x8b\x15\x9d\x1f\x52\x61\x44\x8f\x1e\x5f\
+\xaa\xd1\x0e\x4f\x95\x00\x8f\xf7\x33\xa0\x3c\x29\x6a\x6e\x6e\x36\
+\xed\x1d\x55\x1f\x20\xc3\x1e\x45\xeb\x18\x01\x85\x7c\xdc\x83\x4e\
+\xf3\x7a\x01\x31\xf4\xe1\x20\x61\x54\xd3\x00\x00\xde\xa1\xf6\x67\
+\x1d\xd7\xd4\x21\x5a\x4c\xb1\x27\x63\x74\xd6\xc0\xf9\x01\xfa\x88\
+\x00\xe0\x0b\x71\xb9\x01\xc0\xa1\x69\xbf\x66\x6c\x48\x0b\xf5\xd5\
+\x57\xc0\xb8\xde\xde\x52\xd7\x44\x4a\xa6\x4a\x73\x0b\x55\xde\x22\
+\x27\x9f\x0c\x79\x62\x84\xf4\x31\xbb\x11\x29\x6c\x31\x50\xae\x61\
+\xd1\x72\x54\x7f\x36\x88\xb3\x04\x2e\x05\x06\x10\x20\x54\xe7\x05\
+\x13\xac\x81\xdd\x23\x71\xa5\x6a\x6d\x60\x46\x49\xb7\xb6\x27\xf9\
+\xf1\x54\x29\xff\x75\x8a\x77\xf9\xd6\xc0\xbc\xb5\x6b\xd7\x72\xec\
+\xa6\x06\xe9\x24\xf9\x2e\x21\xdd\x00\xde\x87\x06\x34\xf0\xf0\x0e\
+\xcd\x8c\xee\x6d\x5a\x80\x2d\x2a\x39\xbb\xc7\xde\x10\xe7\x87\x0d\
+\x08\xf1\x4b\x8e\xa7\xba\x1e\x8c\x70\xc6\x0f\x53\x00\xc5\xf1\x39\
+\x6b\xc8\x98\xef\x20\x6d\x00\x63\x3d\x2b\x4e\x2a\x40\xd6\xf6\x3d\
+\x40\xf5\xbc\x01\xba\xa0\x01\x20\x6f\x15\xf9\xdb\x5b\xff\x14\xed\
+\xc7\xb6\x7c\xf5\xa5\xbd\xea\xfd\xd9\xc0\xdf\x4a\x9b\x4e\x12\x8f\
+\x0e\x51\x48\x15\xa2\xf3\x69\x33\x34\xd1\x79\x9f\x64\xc7\x46\xe6\
+\x67\x68\x33\x29\xe2\x7d\x4b\x5d\x01\xf8\xee\xbb\xef\x86\x22\x59\
+\x00\xd1\xd0\xb3\x11\x49\xfe\x5b\x8c\x81\x9b\x64\x5a\x6c\xca\x22\
+\xf9\xd8\x9b\xaf\xeb\xed\x2c\x6e\x4d\x0f\x61\x7e\xa8\x90\x28\x8f\
+\xb8\xec\x6e\xea\xb5\xa4\x79\x86\xef\x91\xd8\x70\x69\xb9\x66\x82\
+\xcf\xf0\x0b\xb6\xe7\x83\x23\x31\x57\xfd\xc7\x85\xf8\xfb\x86\x2f\
+\x63\xa8\xad\x18\x52\xea\x08\x6f\x79\x28\x08\x5f\xef\x5f\x58\x04\
+\x83\x32\xe2\x55\xe2\x65\x12\x2f\x3f\x10\x44\x7c\x1b\x8f\xcf\xf2\
+\x69\xae\xcd\xf8\x3e\x82\x26\x38\x95\x01\xe8\xd4\x58\x63\x7a\xd0\
+\x50\x13\x9d\xbf\x57\x80\x3e\xf6\x1b\x88\xf1\xbe\xb8\xbc\x88\xa9\
+\x8f\xc3\x41\x3e\x09\xa0\x7e\x6c\x02\x83\xd0\x3a\xc2\x9c\x2e\x45\
+\x38\xfe\x3a\xd6\xbb\xc0\x29\x7e\x21\xfe\xf6\x7e\x52\x2c\xbc\x3a\
+\x54\xf6\xf3\x40\x77\x59\xfc\xf0\x13\xfe\xcc\x8d\xf9\x79\xc9\x4b\
+\x67\x34\xa0\xbe\x1d\xb6\x74\x24\x88\xf8\x5f\xbc\xdb\x99\xde\x4f\
+\x73\xc3\x42\xb4\xd7\x65\xc8\x4f\x90\x0e\xb4\x12\x1b\xef\x45\x7f\
+\x12\x7f\x71\xfa\x3a\x0b\x81\xf1\xf7\x7d\xd3\x02\xed\x96\x60\x66\
+\x6e\x3c\x83\x7e\x7d\x00\x41\xfd\xca\xef\x48\xb2\x10\x9d\x7b\xfa\
+\x60\xdc\xb3\x50\x7b\xcc\xb9\x16\xd7\xa7\x69\x6c\x34\x40\xec\x23\
+\x68\x04\xe3\x7d\x0e\x9a\x03\x00\x42\x15\x99\x6c\xf4\x9a\xe8\x18\
+\xa2\xfa\xeb\xb5\x40\x67\x21\x54\x07\x7f\x44\x07\xc5\x34\x86\xdb\
+\xf8\xbf\xce\xa6\x34\xfe\x5f\x63\xe3\x00\x8c\x03\xf0\x11\xb7\xff\
+\x03\x7f\x19\x0a\xe4\xd7\x62\x63\xda\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x15\x14\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\
+\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x14\x91\x49\x44\
+\x41\x54\x78\xda\xe5\x5b\x79\x8c\x64\xc5\x7d\xfe\xbd\xa3\x8f\xe9\
+\xee\x39\x76\xa6\x97\xdd\xb9\x96\x3d\x66\x61\xef\x05\x61\x6c\xae\
+\xa0\x38\xb6\x20\x4e\x2c\x22\x27\x32\x09\x92\x0f\x14\x20\xc6\x81\
+\x18\x84\x92\x08\x59\x8a\x30\x7f\x18\x04\x09\xe0\xf8\x08\x47\x24\
+\xa2\x24\x76\x14\x9b\x80\xf3\x4f\x0e\x27\x86\x80\xc3\x61\x60\x31\
+\xe6\xb0\x21\xbb\xec\xb2\xf7\xce\xf4\x4c\xcf\xf4\xdd\xfd\xae\xaa\
+\x7c\xbf\x7a\x5d\xf3\xfa\x98\x49\xef\xb4\x90\x65\x29\x65\x7d\x54\
+\xbd\x7a\x47\xd7\xf7\xbb\xab\x66\x6d\x48\x29\xe9\xff\x73\xb3\xe9\
+\x97\xb8\xbd\x74\xed\xb5\x03\x9e\xeb\x66\x09\xf0\x84\x18\x23\xe9\
+\x67\xa5\x2f\xb3\x42\x88\xac\x14\x18\x63\x4e\x04\x22\x2d\xfd\xe0\
+\xdf\x7f\xf3\x95\x57\xfe\x8a\xfa\x68\xbf\x30\x0b\x78\xef\x4b\x5f\
+\x4a\x54\x3d\x2f\xeb\x48\x37\x6b\xf8\x41\x96\x04\x88\x04\x04\x02\
+\x41\x56\x92\xc8\x52\x20\x43\x52\x52\x8c\xc9\x40\xe0\x9e\x60\x82\
+\x29\x89\x87\x70\x4d\x18\x87\x08\x02\x12\xd1\xb8\xd9\x8b\xc6\x46\
+\x21\x86\x2e\x3a\x70\xc0\xfb\x85\x58\xc0\xcf\xef\xbe\x3b\x6e\xd5\
+\x6a\x59\xd7\xf3\xc6\x4c\xc3\xc8\x0a\x62\x12\x06\x2f\x18\x3d\x8d\
+\x19\x22\xc8\x0a\x49\x59\x92\x4c\x42\x86\x7d\x20\xd3\x20\x47\x06\
+\x6e\xa0\x03\xd0\xf3\x80\x00\x26\x21\x19\x12\x64\x00\xdc\x23\xd9\
+\x84\x7a\xae\x1d\xb4\x0c\xd2\x73\xc9\x63\x52\xee\xbc\x88\xe8\xcd\
+\x0f\x44\x00\xef\xdc\x79\xe7\xed\xe5\xb8\xbd\x29\x79\xe2\xe4\x88\
+\xb1\x6e\x24\x26\x0d\xca\x1a\x64\x8c\x11\x48\x12\x49\x80\x06\x7d\
+\xe2\x26\xa1\x38\xee\x42\x32\x7a\x61\x22\xec\x43\xed\xf0\x98\xfb\
+\xe6\x75\x04\xb9\x32\xa4\x86\x88\xde\xd7\x08\xaf\x43\x88\xf6\xdf\
+\x34\xa4\x7f\x01\x7d\x10\x02\x78\xec\xc2\x0b\xbf\x72\xc5\x95\x97\
+\xdf\xe5\x98\x43\x94\x1a\x18\xa0\x40\x88\x90\xaa\xc1\xff\x55\xff\
+\xa1\x50\xf4\x7a\x28\xc3\x61\xa4\x9d\x88\x74\x34\x56\xef\x5a\xa9\
+\x34\x05\x8d\x3a\x5c\x99\xcd\xda\x65\x33\x50\x30\x63\x36\xe6\x1b\
+\xe1\xb5\xd0\xc4\xf1\x46\x32\x41\xa4\x85\x55\xa9\xb4\x0b\xa3\xc3\
+\x2a\x84\x30\x2e\x30\x0c\xe3\xef\x25\x5a\x5f\x02\x30\xd0\xee\x98\
+\x9e\x4e\xce\x0c\x0f\xdf\x5e\x2f\x95\xa9\x54\x2c\x53\x76\x7c\x9c\
+\xfc\x72\x89\xc8\x34\x69\xb5\x66\x26\x12\x24\xea\xf5\x48\x10\xe1\
+\xe2\x99\x8c\xd6\x54\x48\xcc\x60\x01\x0c\xa0\xc7\x3b\x98\x0b\x6a\
+\xfc\xb2\xa5\xe6\xfc\x5a\x83\xac\xc1\x21\xf4\x35\xb2\x86\x06\xc9\
+\xcd\xcd\x13\xa5\x53\xca\xf7\x85\x03\xc1\x60\x5e\x13\xee\xd6\xbe\
+\xb6\x00\xb1\xbf\xa9\xa1\xb5\x0b\x80\xc9\xf3\x72\x3c\xa2\x6d\x41\
+\x10\x0c\xd7\xf0\x83\x85\xa5\x22\xc5\x76\xee\xa4\x5a\x6e\x8e\xcc\
+\x64\x52\x4b\x49\x6b\x5d\x75\xf1\x6c\x96\xbc\x42\x81\x12\x1b\x36\
+\x52\x50\xad\x84\x6b\xf1\x3d\x32\x62\x31\xe2\x4f\x06\x9e\x47\xd6\
+\x40\x4a\x09\xa8\x31\x3f\xaf\x34\xeb\xd7\x41\x36\x99\xc4\x3b\x1b\
+\xc8\xc9\xe5\x48\xb2\x65\xc0\xd2\xbc\x7a\x95\xc8\x32\xc9\xaf\xd6\
+\xc8\x84\x50\x02\xd7\xa3\x00\xe4\xf9\x5d\xe9\xba\x91\xf6\x05\xf7\
+\x1d\xae\x80\x1e\x2a\xda\xcb\x2b\xec\xd7\x05\x0c\x20\x31\x57\xaf\
+\xaf\x9f\x49\xa5\xa8\x86\x1f\x75\xaa\x55\xb2\x86\x47\x28\x60\xe9\
+\xc7\xe2\x78\xa2\xfd\xeb\x12\x30\x2c\x1b\x8b\x74\x48\xb8\x0e\x34\
+\x08\xcd\x2d\x2c\x28\x72\x36\xb4\xe9\x2c\x2e\xc2\xb4\xe3\xea\x9e\
+\xa4\xd0\xff\xb5\x00\xdd\xa5\x25\x08\x6e\x89\x04\x5c\x21\x58\x2a\
+\x34\x4d\xbe\x33\x3e\x04\xaa\x27\xdb\xc2\x37\xbc\xe8\x9e\xd4\x71\
+\xa5\x45\x18\x00\xfe\xb3\xfe\x9b\xdb\xb7\x8f\x43\xf0\xa7\xd6\xe2\
+\x06\x76\x53\xfb\x16\x90\x2e\x04\xc1\x04\x07\xb0\x06\xfc\x31\x33\
+\x98\x21\x7b\xdd\x08\x49\x98\xa7\x1c\x0c\x34\xe9\xb6\xe6\x2c\xcc\
+\x2b\xc2\x0d\x68\xd2\x4a\x24\x95\x86\xdc\x52\x99\x4d\x5b\x49\xab\
+\x7e\xfa\x54\x4b\x1c\x90\x54\x3b\x71\x42\xbb\x84\x26\xda\x41\x5e\
+\x32\xda\xef\x35\x7c\xfd\x8d\x2e\x17\x00\xda\x2c\x63\x90\x88\x03\
+\xe1\xa9\x7e\x2c\xc0\x04\x52\xae\x54\x45\x06\x39\x8e\x4b\xe7\x6c\
+\x9f\x21\xd7\x07\x71\x19\xe6\xdb\x95\x4c\xc0\x87\x95\xe8\x00\x28\
+\x3c\x8f\x47\xa1\x99\x57\xca\xad\x01\x31\x22\x2d\x23\x82\x3a\x4b\
+\x44\x02\x88\xae\x89\xc1\xf9\xde\xf7\x29\xf0\xb9\xf7\xd4\xd8\xc7\
+\x98\x94\xba\x2c\x32\x01\xb8\x5a\x28\x6c\xdc\x93\x58\x0b\xc8\xec\
+\xc3\xdd\x7f\xe9\x57\x00\x31\x43\xca\x14\x2f\xd2\x81\xcf\x4d\xcf\
+\x6c\xa3\xea\x7c\x8e\xcc\x78\x3c\x5c\x54\x77\xd3\xe4\xa3\x6c\xa0\
+\x53\x22\xe9\x34\x18\x09\x81\x05\x20\x02\xc1\x71\x21\x04\x2f\x1a\
+\x40\xaf\x82\xac\x61\x59\x80\x0d\x60\x8c\xdf\x34\x6c\x9b\x6c\xcc\
+\xc7\x00\xa4\x60\xf0\xe4\x9e\xf8\x79\x95\x31\x82\x3a\xe0\x38\xe1\
+\x98\xdd\x8c\xb3\x89\x94\xfb\x74\x20\xec\x27\x0d\x9a\xf0\xd1\x18\
+\x2f\xd6\xf3\x7c\x15\x7c\x2a\xe5\x1a\x0d\x20\x1a\x3b\xda\x02\xba\
+\x9a\x04\x09\x90\x0a\x3c\x28\xc1\x67\x2b\x08\xb5\x16\x04\x4c\x46\
+\x91\xb0\x00\xee\xc9\x8e\x21\x63\x58\xb8\xb6\xe0\xd6\x36\x00\xc2\
+\x26\x60\x19\xca\xc7\x03\xfc\x9e\xd0\x84\x18\xd0\xa8\xaf\x2d\xa4\
+\x37\x94\x0b\x58\x3a\x10\xf6\x15\x04\x81\x79\xdf\x2f\xa2\x57\x64\
+\x3c\x04\xb1\x52\xb5\x4e\x83\x08\x84\x8d\xc5\x3c\xd5\x0a\x45\x12\
+\x2c\xa5\x78\x8c\x4d\x4f\x59\x86\x65\xa1\xcf\xc4\xc8\x42\xb0\x8b\
+\xc7\x98\x5c\x1c\x81\x2f\xd4\xa2\x6c\x92\x11\x8a\x90\x43\x3e\x7a\
+\x59\x87\x90\x9a\xe6\xee\xb7\xb9\x40\x38\xa6\x68\xdc\x01\xd9\x1b\
+\x52\x32\x89\xed\x9f\xdb\xb0\x21\x89\xb0\x56\x93\x68\x6b\x2e\x84\
+\xde\xaf\xd7\x17\xf1\x96\xd2\x60\xad\x5c\xa6\x42\x2e\x4f\xe7\x5e\
+\x3c\x4d\xf2\xd4\x29\x1a\xdb\xb5\x8b\xcd\x34\x24\xa5\xc9\xb9\x0e\
+\x08\x42\x73\x24\x55\x40\xf6\xa8\xc5\x0d\x80\xee\x9e\xc9\x74\x8e\
+\x55\xdf\x4d\x3e\x22\x06\x88\xff\x1b\x62\x19\xb1\xcb\xe2\xf1\xdd\
+\x7f\x47\xf4\x6a\x3f\x2e\x20\xab\x41\xe0\xba\x42\xa0\x0b\xd2\xb5\
+\x5a\x9d\x4a\x88\xee\xf6\xc8\x88\xd2\x62\xf5\xd8\x51\x8a\x9a\xe2\
+\xd4\x51\x15\x46\xe4\x69\x45\x41\x88\x96\xba\xbe\x83\xb0\x5c\x51\
+\x00\x6d\xe4\x68\x19\xb2\x1b\x32\x42\xd2\x90\xfb\xa9\x0f\x01\x48\
+\x40\x00\x7e\x2d\x08\x0a\x83\x42\xa4\x51\x0b\xf0\x02\xb8\x16\x50\
+\x5a\x36\x06\x92\xd4\x91\x06\xda\x3b\x29\xb5\x30\x34\xe9\xae\x80\
+\xa8\x02\x2c\x4a\xda\x0a\xfc\x7b\xdd\xd8\xd8\xea\xfb\x85\x8e\x31\
+\x45\xa6\xde\x91\x39\xba\x61\x0a\xc4\x81\x35\x34\xb3\x85\x8d\x0f\
+\x78\x2c\x00\x5d\x0b\xf0\x22\x25\x07\x31\x21\x9b\x5b\xd2\x20\x44\
+\xc0\x10\xcb\x73\x22\xda\x96\x02\x3c\x0e\xaf\x45\x73\x4e\x00\x7c\
+\x5d\x02\xf9\xe9\xcf\x5f\x4f\x57\x3d\xf1\x4f\x3d\x82\x5a\x07\xf9\
+\x88\xb4\x86\x16\x52\x17\x8c\x30\x15\x9a\x6b\xb2\x00\xad\x7d\xc0\
+\xad\x0a\xb1\x14\xd6\x02\x1e\x4d\xef\xdd\x4d\xd5\x85\x79\x15\xf0\
+\x7c\xd1\x91\x09\xb4\xb6\xa3\xb1\x4a\x51\x25\x54\x83\x23\xe7\x9c\
+\xb3\xe2\x26\xe9\x43\xbf\xf3\xdb\x34\x75\xc3\x0d\x61\x4e\xe7\x32\
+\xd9\x30\x75\x31\x13\x91\x6d\x89\x0d\xb4\x7a\xb1\xc4\x58\xd9\x02\
+\xa4\x54\x99\xa0\x1f\x0b\xf0\x00\xa7\xe4\xfb\x0b\x4a\x00\xae\x4b\
+\xe3\x5b\x36\x43\x00\x79\xb2\x32\x19\x12\x5a\xbb\x80\x50\x50\x1a\
+\x6e\x5a\x44\xd8\xdb\xdb\x66\xe8\x23\x7f\xf9\x75\xf2\x38\x40\x0a\
+\xfd\x7c\x84\xc3\xdf\xfd\x2e\xcd\x7e\xff\x29\x32\x6d\x9b\x2b\x47\
+\x6d\x29\xcd\xf7\x57\x44\x37\xf9\xd5\xef\xeb\xc0\x34\x7a\xcf\xc6\
+\x8d\x53\x06\xda\x59\x09\x40\xa2\xb5\xb8\x80\x5b\xf4\xfd\xbc\x4e\
+\x85\x41\xb1\x48\x65\x04\xc2\xf8\xc8\x3a\x6d\xd2\x0a\x32\x22\x17\
+\xb9\x01\xfa\x0b\xef\xb8\x83\x26\x2e\xbb\x8c\xec\x89\xc9\xe5\xc5\
+\x89\x96\xde\x01\xe9\xd2\x1b\x3f\x25\x6e\x89\xb1\x51\x7d\xef\x2c\
+\xd1\xed\x0a\xd1\x39\x41\xd8\x8b\x26\x91\x75\xa6\xb9\xbf\x1f\x0b\
+\x08\x00\x37\x1f\x04\xf3\x4d\x01\xe0\x22\x4f\xc5\x33\x67\x38\x13\
+\x70\x5e\x6f\xd7\xa8\x5e\x8c\xb6\x06\x3c\x9f\xc0\x73\xdc\xce\xbf\
+\xe9\x26\x65\x05\xd1\xf3\x91\x96\x1b\xc7\x4f\x10\xb7\xf4\x94\x12\
+\x92\x16\x60\x6f\xd2\x00\xbb\x4d\x19\xbb\x4f\x07\x75\x48\xd5\x0f\
+\xa8\x5c\xa9\x44\xf7\x23\x22\xaa\x24\xee\x27\x0b\x28\x01\x9c\x74\
+\xdd\x39\x2d\x80\x4a\xa5\x4a\x65\x6c\x63\xed\x4b\x2f\x21\x62\x01\
+\x74\x58\x95\x6c\x19\xc7\xb0\x71\x5a\x78\xe6\x69\x4a\xc2\x5d\x26\
+\x7f\xfd\x13\xf4\xf3\x8d\xe3\x24\x72\xf8\x54\x47\x3d\x50\x9f\x3b\
+\x43\xdc\x52\x9b\x36\x93\xfc\xef\xe7\x95\xf6\x3c\xc7\x51\xd6\x60\
+\x59\x5c\x8c\x1a\x51\x0c\x68\xf1\x7f\xc7\xb2\x69\xc7\xcd\x37\xd3\
+\xf8\xee\xdd\x94\x9a\x9c\xa0\x81\x2d\x5b\xa8\x84\xcd\xd5\x0f\xaf\
+\xba\x5a\x0b\x40\x5b\x00\x7f\xe3\xac\x4b\x62\xb3\x23\x0d\x7a\x67\
+\x1c\x27\x1f\x80\x3f\x2f\x88\x53\x61\x65\x69\x29\xac\x05\x5c\x57\
+\xbb\xc0\x8a\xae\x30\xb8\x65\x2b\x15\x5f\x7f\x8d\xe6\xfe\xfa\x51\
+\xe2\xb6\xeb\xd6\x5b\x61\x05\x4e\x97\x1b\x94\x17\xf2\xaa\x64\x4e\
+\xcf\xcc\x50\x15\x5b\xe1\x7a\x22\x41\x9b\x10\x18\x67\xf0\xfc\xd8\
+\x27\x7e\x83\x8a\xd5\x2a\x07\xd3\xb6\xb8\x20\xd6\x8d\xd2\xd5\x88\
+\x1f\x23\xcf\xfd\x90\xde\xfd\xcc\x75\xf4\xda\xaf\x5e\x49\x87\x2e\
+\xff\x08\xd1\xf3\xcf\x61\xc5\x1e\x2f\x3e\x82\x61\xe8\xb3\x01\x73\
+\x0d\x2e\xd0\x96\x09\x9c\x1a\x4a\x62\x5e\x6c\xbd\x56\x23\x1b\x87\
+\x15\x46\x12\xd0\x64\x3b\xd1\x9c\x1f\xde\xbb\x8f\x6a\xef\x1d\xa6\
+\x93\x67\xe6\x68\xe1\x3f\x7e\x40\x93\x57\x5e\x49\xf1\xe9\xe9\x76\
+\x17\x00\x1c\x69\x50\xf9\xf0\x61\x9a\xfa\xd8\xc7\xe8\x92\xfb\xef\
+\xa7\x5f\xf9\xbd\x6b\x69\x6b\xad\x44\x5b\xb7\x6f\xa3\x2b\xee\xbd\
+\x97\x7e\xf7\xc0\x6b\x14\xdb\xb6\x4d\x93\x57\xc2\xf8\xe8\xe3\x8f\
+\x53\xe1\x1f\xbe\x4d\x07\x7e\xf2\x16\xe5\x92\x69\xca\x25\x52\xf4\
+\xe6\xdc\x22\x3d\xff\xe5\x3f\xa3\xa0\x9d\xbc\xb6\x80\x99\xcf\x8c\
+\x8e\xa6\x0c\xb4\xb5\x08\x40\x67\x02\xb7\x2e\x44\x41\xb0\xbf\xc2\
+\x34\x37\x4c\x4f\x51\x0d\xfb\x02\x2b\x91\xe8\xf6\x51\xf6\xfd\xe6\
+\x31\xf5\xe8\x85\x17\xaa\x78\x11\x90\x41\x73\x8f\x3e\x4c\xdc\xf6\
+\xdc\x76\x1b\x9b\x77\x18\x24\x01\xd9\x44\xf5\xd0\x41\xb2\x90\x5a\
+\xe7\x1f\xf9\x16\x1d\x78\xe4\x51\x7a\xfe\xdb\xff\x48\xaf\xdc\x74\
+\x23\x9d\xbe\xe5\x0b\x14\x1f\x1a\xa2\xab\xbf\xf3\x1d\x92\xc3\xc3\
+\xea\xd9\x91\x7d\xfb\x68\xdd\x79\xe7\xd1\xd1\xe7\x7e\x44\x42\xca\
+\x36\x9f\xaf\x5a\xf6\x32\x79\x11\x92\xd7\xb0\xf6\x0d\x0c\xec\x5e\
+\xab\x05\xc8\x65\x0b\x08\x82\x25\xa1\xb6\xc5\xa8\x05\x76\x9c\x4f\
+\x75\x6c\x86\xec\x74\xba\x4d\xf3\x82\xa1\x83\x97\x65\x71\x90\xc4\
+\xf3\xbe\x9a\x3b\xf2\xde\xfb\x94\x7b\xee\x39\x9a\xb8\xe2\x0a\x4a\
+\x6c\xdd\xd6\x6e\xce\x40\xfd\xbd\xf7\x88\x5b\x11\xd6\xe0\x41\x60\
+\x30\x78\x2a\x26\x53\xf4\xda\x7f\x3e\x43\xb3\x4f\x7c\x8f\xe2\x38\
+\x5d\xda\x7c\xcd\x35\xea\xd9\xb1\xcd\xe7\xaa\xa5\x35\x82\xa0\x8d\
+\xbc\x86\xe8\x20\xaf\x91\x20\xda\xdf\x8f\x0b\x78\x80\x53\x0e\x82\
+\xbc\x3e\x18\xd9\x30\x31\x8e\x54\x38\x4f\x71\xf8\xa1\xce\xfd\xdc\
+\xcb\x65\x04\x34\xb4\x79\x33\x39\x88\xfa\xd6\xf9\xe7\xd3\xf0\x47\
+\x7f\x8d\x36\x7f\xf1\x8b\x94\xda\xba\x95\xb8\xed\xbd\xfd\x76\x58\
+\x41\xa3\xcd\x0d\xea\xcd\x7d\x45\x72\x6a\xaa\xad\x62\x74\x0d\x93\
+\x72\x4f\x3e\x41\x68\xec\x42\x6a\xce\x32\x0d\x15\x40\xd3\xbb\xf7\
+\xa8\x5e\x10\xb5\x41\x76\x93\x57\x73\xb1\x30\x13\x9c\x9d\x0b\xb4\
+\xd6\x02\x5a\x00\xcb\xa9\x90\xb7\xc5\x73\x73\x64\x8f\x8e\xf2\x81\
+\xa7\x2e\x75\x23\x60\x91\x23\xf0\xff\x31\x04\xb5\x8b\x2f\xb9\x98\
+\x76\x0a\x97\xb2\x2f\x3c\x4b\xf9\x9b\x7f\x9f\x4a\xaf\x1d\xa0\x89\
+\xcb\x2f\xa7\xd4\x8e\x9d\xad\x6e\x00\x01\x1c\x0b\x53\x21\x22\x79\
+\xe7\x5f\x7e\x4e\x1f\x3c\x48\xaa\x35\x35\x5e\x7b\xe9\x45\x95\x48\
+\x66\xbe\xf0\x07\xe4\x0a\xd1\x45\x94\xd7\x68\x66\x32\x5d\x71\x80\
+\x4c\x53\x95\xc4\xfd\xb8\x80\xbb\x84\x5a\xa0\x55\x00\x95\x85\x05\
+\x95\x09\x60\xe3\x6a\xb1\x11\x42\x52\x59\x14\x3f\x07\xaf\xff\x2c\
+\xfd\xf8\xe1\x47\xe8\x85\x1f\x3c\x4d\xaf\xbc\xf5\x0e\xfd\xf4\x64\
+\x8e\x4e\xdf\x77\x2f\x71\xdb\x87\x02\x89\x33\x82\x7e\xaf\x78\xf2\
+\x64\x28\x80\x6d\x33\x1d\x55\x20\x22\xc8\xba\x31\xe2\xe6\xe7\xe6\
+\xd4\xdc\xc9\xa3\x27\xa8\xf8\xc2\xf3\xb4\xfe\x82\x0b\xe8\xa2\xfb\
+\xef\x23\xc7\xe0\xc0\xef\xa9\x2d\x7b\x1d\x19\x63\xe6\xfa\xeb\xe9\
+\xdc\x5d\x3b\xda\xc8\x03\x4c\x6c\x37\x77\x06\xda\x5a\x04\x10\x00\
+\xde\xac\xeb\xe6\x42\x25\x04\x61\x2d\x80\x54\x68\x8d\x0c\xf3\x2f\
+\x33\xe1\x08\xbc\x78\x32\x68\x74\xcf\x1e\x3a\x8e\xe8\xef\xe1\x73\
+\xa2\xa5\x34\x3e\xfc\xd6\xdb\x54\x7c\xf5\x15\x1a\xbf\xf4\x52\x1a\
+\xdc\xb7\x77\xb9\xe0\xa9\x14\x4a\xe4\xe0\x9b\x53\x57\x5d\x15\x1e\
+\x8c\xa8\x6f\x85\xef\xc5\xd9\xd2\x30\x97\xff\xdb\xbf\x51\xbd\x87\
+\xf5\x1f\xbe\xe5\x66\x72\x20\xb4\xed\x9f\xfe\x34\x7d\xea\xc7\x2f\
+\xd1\x87\x1e\xf8\x73\xda\xf5\xa7\x7f\x42\xd7\x3c\xfb\x5f\x34\x99\
+\x1d\xa1\xf7\x5f\x7e\xb5\xcb\x15\x70\x3d\x72\xe7\xfa\xf5\x9b\xd6\
+\x6a\x01\x02\xf0\x8e\x3b\xce\xac\x3e\x18\xe1\x5a\xa0\xc6\x47\xe4\
+\x99\x41\xf6\x95\x76\x0b\x10\xf0\xff\x6d\x5b\xa9\x7c\xe8\x10\x79\
+\xbe\xaf\x49\x2c\x9b\xb5\x83\xcf\xcf\x7e\xf3\xeb\xc4\xed\xc3\x5f\
+\xbd\x87\x5c\x37\x14\xa0\x4f\x52\xbd\x93\x04\xd9\xf1\x4f\x7e\x92\
+\xaa\xa5\x32\x79\xae\x4b\x55\xa4\xdd\xf3\x6e\xb9\x85\x16\x1e\x7b\
+\x98\x0e\xbe\xfe\xc6\x32\x99\x83\x85\x0a\xfd\xec\xea\x8f\x53\xe9\
+\xbe\xaf\x92\x3c\x7e\x8c\xa6\xf6\xef\xa7\x2d\xd3\x93\xe4\xdf\x73\
+\x37\xbd\xf9\xb5\xaf\x93\x6f\x9a\x7a\xf1\x6d\x41\x71\x5d\x22\xb1\
+\x6f\xad\x7f\x1a\x93\xcd\x2d\x71\xd5\x05\xe2\x52\xa6\x6b\x58\x54\
+\x06\x0b\x75\x0a\x4b\x2a\x15\x7a\x22\x68\x2b\x03\xc7\x90\xfe\xaa\
+\x47\xdf\x57\xd6\x80\xd6\x7e\x26\x80\xf6\xb3\x67\x7f\x44\xd3\x48\
+\x8f\x9c\xca\xf6\xdd\x75\x17\xbd\xf9\x8d\x6f\x90\x84\x4b\x79\x20\
+\x22\x2f\xba\x88\xae\x7c\xe8\x21\xda\x7b\xe3\x8d\x94\x3b\x70\x80\
+\x86\x51\xe1\x89\x27\xbf\x47\x2f\x3e\xf1\x14\xb9\x76\xac\xad\xbc\
+\x3d\x58\xf7\xe8\xc8\x63\x8f\xd3\xc8\xb7\x1e\x26\x5b\x08\x95\x02\
+\x17\xe3\x49\x68\xda\xea\x8a\x0b\x7a\x6c\x87\x99\xe0\x9f\x01\xd9\
+\x4b\x00\xdd\xc5\x10\x6a\x81\xb4\x10\x69\xce\x04\x93\xe7\x9f\x87\
+\x5a\x60\x89\x62\x48\x4f\x75\xc4\x04\xdd\x1a\x8d\x3a\x4d\x5e\xf3\
+\x5b\x34\xff\xfa\xeb\x54\xc4\xbe\x61\xa8\xb9\x17\x90\xa1\x10\x54\
+\xae\xbf\xf0\xa1\xaf\x91\x09\xed\x96\x9f\x7d\x86\x26\x93\x71\xca\
+\xde\x74\x03\xfd\xcf\x93\x4f\x51\xee\xa1\x07\xe8\xc4\x1f\xfd\x21\
+\x65\xb0\x75\x8e\x65\xd2\xe4\x97\x2b\xf4\xf6\x99\x59\xca\xc7\x07\
+\xc8\x67\xf2\x11\x21\x2d\x04\x95\x25\xe6\x70\xbf\x93\x28\xb0\xe2\
+\x1c\x59\x96\xca\x04\x6b\xb6\x80\xa6\x00\xb8\x16\x98\xe4\x6d\xf1\
+\xae\x5d\x3b\x69\xfe\xf8\x49\x8a\x83\xa0\xc0\xde\x80\xdb\x10\x0a\
+\x94\x4b\x60\xae\xe9\xc1\x0c\xc5\x21\xa0\x8f\x3f\xf8\x00\xbd\xfc\
+\x95\xbb\x49\xb6\x1e\x93\xc3\x75\xe6\x6f\xbd\x99\x8e\xc1\x35\x1a\
+\x56\x4c\x11\xf0\x0d\x43\xf5\xa7\xf8\xbe\x95\x20\xca\x17\x49\x02\
+\xdc\x64\x22\x15\x2d\x7e\x05\x82\xd4\x83\x78\xe7\x9c\x85\xb3\x81\
+\x66\x20\x14\x12\x6d\x2d\x16\xe0\x56\x5b\x6a\x81\x61\x90\x3c\x82\
+\xa8\x3c\x9e\x5d\x4f\xf4\xee\x3b\x61\x9e\x7d\xfb\x4d\x3a\xf5\xd9\
+\xeb\xe8\x10\x4c\xdf\x33\x2d\xf2\x2d\x8b\x84\x1d\x6f\x3b\x30\xf4\
+\xd0\x1f\x89\x0d\x10\xd9\xd1\x66\x08\x2d\x1c\xb7\x12\x5b\x85\x24\
+\xad\x4e\x94\x5b\x4f\x4b\x00\xf1\x2d\x9f\x1a\x19\x49\x7f\xbf\x50\
+\x28\xf6\x0a\x82\x51\x2d\x10\x15\x43\x8b\x3a\x13\x70\x2a\x2c\xcf\
+\x87\xa9\xd0\xf0\xc2\x8d\xca\xbc\xe3\xd1\xfb\x20\x37\x8b\x0a\x2e\
+\x1f\x4b\x50\xd1\xb4\x5b\xff\xd5\x46\x74\x4c\xa6\x7b\x29\xdb\x76\
+\x6c\xa2\x63\x8c\x45\x33\x74\x00\xeb\x0e\x6a\x8c\xee\x0a\xb0\xbd\
+\x28\xd2\xcf\x46\x73\x26\x4a\xe2\x3d\x6b\x75\x01\x7d\x30\xb2\x5c\
+\x0b\x38\x5c\x0b\x14\x8b\x64\x73\x7d\xce\xa9\x90\xba\x1b\x18\xb6\
+\x7e\x64\xf5\x71\xb7\x06\x3b\xe7\xba\xdd\xa0\xb7\xd6\xf5\x7c\xd7\
+\xb5\x1d\x8f\x73\x20\x7c\x11\xe8\xe1\x02\x1d\xe7\x02\x8b\x41\x90\
+\xd3\x02\xa8\x54\x6b\x61\x2a\x5c\xb7\x8e\x4c\xbd\xb7\x5f\xa1\xc9\
+\xce\xeb\xd5\x84\xd0\x69\xe2\x9d\xcf\xf7\x70\x83\x68\xae\xb7\x1b\
+\x20\x0e\xb0\x00\x8c\xb5\x58\x80\x00\xbc\x13\xa8\x05\xd0\x87\x9b\
+\x17\xd4\x02\x75\xd4\xfa\x6e\xa9\x44\x16\x6f\x8a\x5c\xb7\x9b\x70\
+\x2f\xad\x1b\xc6\x2a\x82\xe9\xd6\x78\x37\xf1\xfe\x83\x22\x22\x60\
+\x5b\x20\xec\x21\x80\xc8\x0d\x4e\xe3\x60\xc4\x97\xd2\x8f\x49\x69\
+\x73\x2d\xb0\x1e\x1b\x9e\x06\xbb\x01\xb6\xab\x62\x61\xa1\xb7\xf6\
+\x99\x70\xff\x6e\x10\x8d\x7b\xb9\x41\x8f\xe7\x41\x5c\x95\xc4\x3d\
+\x83\xe0\x4a\xbb\x42\x6c\x41\x8b\x3a\x13\x6c\xda\x79\x3e\x55\x51\
+\xbe\x26\xb2\x59\x0e\x34\x5d\x90\x8c\xd6\x6b\xa2\x5e\x41\x6f\xd5\
+\xe0\x26\xa3\xfb\xd1\x35\xa3\xc7\x0e\xb0\x2b\x28\xe2\x1a\x02\x18\
+\xbc\x6d\x62\x62\xf3\x1a\x04\x10\x05\xc2\xba\x10\x8b\xfa\x88\xfc\
+\x5c\xe4\xfa\x2a\x34\x9f\x58\xbf\x5e\x9f\xf9\x77\x47\xeb\xce\xb9\
+\x55\x48\xa9\x7e\x35\x01\x75\x13\x8f\xc6\x2d\xef\x8a\x1e\x31\x80\
+\x5a\x2c\x70\xd0\xb6\xf7\xaf\x49\x00\xda\x02\x50\x0b\x2c\xc1\x6d\
+\x54\x0d\x9f\x42\x55\x57\x99\x9f\x57\x81\x90\x84\x68\x27\xbd\x1a\
+\x71\x4d\xb8\x9d\xd4\x4a\x7d\xf4\xdc\x5a\xac\x81\xe7\x7a\x90\xe7\
+\x16\x37\x0c\x15\x08\x7b\x06\x41\x89\xc6\xc1\x42\x97\xc3\x95\xd6\
+\x73\x81\x7c\x3e\x4c\x85\xd8\x17\x18\x52\xf2\xa2\xd6\x16\x08\xf5\
+\xb8\x67\x36\xe8\x5d\x10\x51\x0f\xad\x77\x36\xcc\xee\x69\x2a\x5b\
+\x9c\x75\x10\x04\xdc\x12\x04\xa0\x8b\x21\xa7\x50\xa0\x7a\xa5\xc2\
+\x16\xa0\xbf\xd4\x3b\x10\x76\x8d\x35\xe9\xde\xd9\xa0\x37\xf1\x6e\
+\x61\xea\xac\x85\x8d\x9c\x82\x0f\x38\xbe\x2f\xc8\x34\xe7\xf8\x09\
+\x6e\x12\xad\xa7\x00\x74\x2d\x50\x68\xad\x05\x2a\x55\xaa\x3b\x0e\
+\x79\xd5\xaa\x3a\x29\x16\x98\xa3\x5e\xda\xd7\x56\xd2\xcb\x12\x7a\
+\xa4\x41\x5d\x56\x2b\x62\xf8\x5d\x0f\xbd\x27\x84\xf4\xd9\x5a\x13\
+\x89\xc0\x1a\x48\x0a\x3b\x95\x96\xf6\xf0\x90\x4c\x8e\x8e\xd1\xe0\
+\xe4\x84\x1c\x9d\xde\x44\x53\xbb\x76\xc8\xbf\xb8\xf3\xcb\xd7\xfd\
+\xdb\xbb\xef\xbe\xdc\xb3\x0e\x58\xf1\x60\xc4\xf3\xe6\x5a\x6b\x01\
+\xe5\x17\x70\x83\x18\x52\xa1\x5c\x5a\xea\x26\xdd\x87\x1b\xb8\x4d\
+\x8d\x79\x00\xf7\x0e\x88\x41\x63\x81\x88\xc7\x03\x23\x91\x10\x46\
+\x26\xc3\xff\x78\x52\x9d\x1d\x0c\x8c\x8f\xcb\xd1\xc9\x49\x63\x64\
+\x7a\xda\x1e\x99\x18\xb7\x6d\x3b\x66\x99\xf8\x9f\x6d\xd9\x14\x8b\
+\xc5\xc8\xb6\x2d\xf4\x71\xe2\xeb\x64\x32\x49\x43\x58\xe7\x79\x93\
+\x93\x15\x08\xa0\xce\x9c\x7a\xd4\x01\xdd\x81\xf0\x78\xa3\x31\x2b\
+\xf0\x8e\xfe\x23\xc9\xe4\xf6\x19\x6a\xa0\x18\x4a\x8e\x8d\x91\x80\
+\x00\x56\x7b\x11\xef\x68\x2d\x69\x73\x64\x0d\x0a\x11\x12\x63\xad\
+\x09\x99\x4a\x49\x2b\x93\x31\x6c\xa4\xd5\x01\x6c\x89\x33\xe3\xe3\
+\xe6\xf0\xf4\x94\x99\xc9\x66\x6d\x32\xd4\xc6\xc2\xe6\xe5\x5a\x96\
+\x45\x71\x45\x0e\x24\xe3\x71\x35\x8e\x27\xb8\x8f\x87\xa4\x63\x98\
+\xb7\x63\xfc\x9c\x7a\x06\x02\x61\x01\xa8\x67\xd2\xa9\x34\xed\x3f\
+\x77\x52\xe9\xad\x67\x29\xbc\xd2\xae\x10\x59\xa0\x02\x12\x15\x14\
+\x43\x19\x95\x0a\x77\xec\xc0\xb6\xf8\xb8\x0a\xa7\x8b\xb5\x5a\xe8\
+\x67\x78\x36\xb0\xac\x40\xc4\x62\x42\x26\x12\x52\x0e\x0c\x48\x99\
+\xce\x20\x58\x8e\xc9\xc4\x86\x73\xcc\xd4\xf8\x46\x63\xdd\xe4\xa4\
+\x3d\x38\x3a\x66\x41\x55\x26\x2f\xce\x34\x94\x43\x92\xc9\x8b\x06\
+\x4c\x1e\x9b\x26\x19\x80\x26\x8c\x7b\x21\x69\xc0\x62\xe0\x1e\xae\
+\x19\xea\x59\x0d\x7d\xe4\x87\x79\x7e\x57\x83\x05\xa4\xe6\x26\x92\
+\x99\x18\x6e\xf7\xda\x0e\xaf\x9e\x0a\xf9\x8f\x24\x49\x21\x32\xae\
+\xe3\xd1\xb6\xa9\x29\xf9\xea\xf1\x13\x1e\xcd\xcc\x48\xfb\xe2\x0f\
+\x1b\xa3\x9b\x36\xd9\x03\x83\x83\x26\x7e\xc8\xd4\x0b\x64\xad\x60\
+\xac\x34\x80\x59\xb2\x15\x19\x73\xf9\xf8\x1b\xd4\x31\x0e\x78\xcc\
+\x8b\x57\xe0\xb5\x99\xfc\x0e\x34\x0c\xe8\x39\x75\xf8\xc9\x82\x37\
+\x00\x7c\x97\x63\x11\xf7\xfc\x0c\x93\x0c\x85\xd8\xfc\x5d\x34\xbe\
+\xd6\xd9\x2c\xdc\xc5\xd6\xeb\x6e\xcc\x94\xa9\x35\x9c\x08\x75\x67\
+\x82\x1a\x8a\xa1\x11\x29\xa7\x38\xf2\x9f\x29\x14\xbc\x89\xcf\x7d\
+\x1e\xe7\x22\x23\x94\x49\xa7\x40\x32\xc1\x0b\x51\x84\x41\x45\xbd\
+\x26\x98\x8c\x8e\xe2\x18\xa3\x0f\x17\x69\x59\xbc\x78\x8c\x2d\x40\
+\x11\x6c\x03\x04\xa2\xc7\x9a\x84\x7a\x3e\x11\x5a\x85\x26\xac\x35\
+\xdd\x9a\xba\x59\x30\x3c\xd7\xf6\x0d\xbe\xae\x17\x8b\x65\xcb\x13\
+\x99\x35\x6c\x87\xa3\x5a\x40\x5b\x40\xa5\x79\x2e\xb0\x1e\x01\xe5\
+\xe4\x9e\x7d\xd6\xa6\xe9\x69\xca\x8e\x8d\x92\xdd\xd4\x34\xb1\x16\
+\x0c\x93\x3b\x6d\xaa\x9a\x44\x44\x8e\x11\x04\xbc\xd0\x30\xa5\x3a\
+\x2e\x6b\x57\x2f\x58\x43\x9b\x34\xa3\x6d\x8e\xdf\xd1\x42\x40\x6b\
+\x8e\xb5\x40\x57\x2e\xf3\xf9\xdb\x8d\x7c\xbe\x4a\xc2\x4f\xb3\x71\
+\xf4\x6b\x01\x2c\x00\xb5\xf3\x09\x3c\x4f\x66\xa6\xa7\x51\x06\x8c\
+\xd0\xf0\xf0\x30\xff\x78\xf3\xbb\xa1\xf6\x74\xbd\x00\x62\x7a\xcc\
+\xe0\x7b\x0a\xda\x2c\xd1\xba\xc9\x47\xd0\x1a\xe6\xbe\x6d\x0c\xa2\
+\xda\x0a\xf8\xdd\xd0\xc4\x9b\xbb\x52\xad\x71\xfd\x8c\x16\x4a\xe5\
+\xf4\xa9\x1a\x1e\x4c\xaf\xc1\x02\xba\x53\x61\xc9\xf7\x95\x00\x6a\
+\xae\x1b\x0c\x25\x93\x76\x22\x9e\x20\x5d\x1b\x60\x31\x6d\x64\xb5\
+\x00\x22\xd2\x91\x70\xb4\x56\x5b\x7d\x94\x7b\x4d\x46\x2f\x5e\x9b\
+\xb4\xe3\x38\xfa\x0f\x20\xda\xf4\xbb\x02\x1d\xe6\x75\x1c\x50\xdf\
+\xd1\xef\xeb\x00\xb9\xf8\xea\x2b\x0d\xc3\xf3\xfa\xb6\x00\xd1\xfc\
+\x17\x23\x73\xfc\xb6\x67\xdb\x42\xfd\xa8\x69\x68\xcd\x6a\xad\x69\
+\x82\xda\x2c\x79\xac\x89\x30\xb4\x50\x34\xda\xde\xd1\x66\xaf\xef\
+\xe9\x6b\xf4\xfa\x5b\x3c\xcf\xdf\x60\x8d\xab\xf9\x0c\x6a\x83\x81\
+\x81\x01\x95\xeb\x13\xcd\x38\xd4\xd9\x1a\xa5\x62\xc3\x39\x72\x78\
+\xc4\xf5\x7c\xd9\x87\x05\x44\xa9\x10\x07\x23\x67\x78\x11\x3e\x56\
+\x8d\x42\x43\x93\xd3\xd2\xd7\x5a\xd4\xda\xd7\x64\x3b\x03\x9b\x16\
+\x4e\x9b\x26\x75\xd3\x04\xb5\xf6\xf4\xb3\x3a\x23\x74\xb6\x72\x3e\
+\xef\xce\xbe\xf3\x4e\x3d\x7f\xf4\xa8\x53\x3a\x79\xc2\xaf\x9e\x99\
+\x95\x41\xa1\x60\x58\x8d\xba\x3d\x20\x45\x7c\xc8\x8e\xa5\x32\xa9\
+\x64\x32\x96\x88\x0f\xbf\x9e\x5b\xfc\xd7\x3e\xb2\x40\x94\x0a\x4f\
+\x39\xce\x82\x90\x92\x3d\x3b\xd0\x8b\x6e\xd5\xa8\x16\x82\xd6\x1a\
+\x34\xd2\xb5\x68\x5c\x6b\xb4\xa5\xaf\xd6\xc6\xef\x71\x2b\xe6\x72\
+\xce\xe9\x23\x47\xea\x0b\x47\x8e\xb8\x85\xe3\xc7\xfd\xf2\xe9\xd3\
+\xd2\x59\x58\x30\xfc\x62\xd1\x36\x1a\x8d\x44\xdc\xf7\x53\xb6\x69\
+\xc6\xf1\x8d\xb8\x0a\x90\x86\x51\x0b\x4c\xa3\xe4\x1a\x0a\x05\x60\
+\x09\xa2\x9c\x43\xd1\x75\xe8\xe9\xd3\xb3\x4f\xbe\x9d\xcf\x1f\xeb\
+\x57\x00\x3a\x13\x34\xea\xbe\x5f\xf2\xa4\x8c\x6b\x72\xda\x84\x5b\
+\xcd\x55\x43\x13\x5d\xa9\x15\x66\x67\x9d\x1c\xc8\x2d\x1d\x3b\xe6\
+\x2c\x1e\x3d\xea\x57\x67\x67\x79\x97\xb9\x4c\x2e\x21\x44\xca\x84\
+\x2c\x08\xc0\xef\x35\x1c\x29\x4b\x7c\x28\x83\x5a\xa4\x58\xc7\xd6\
+\x9c\xff\x0d\x63\x59\x88\x7c\x01\x9b\xb4\x3c\x14\x73\xd4\x75\xe7\
+\x30\x5f\x67\x57\x65\xe8\xcc\x05\xd4\x80\x02\x50\x0c\xe7\xfb\x17\
+\x80\x0b\xd4\x71\x40\x7a\x6c\x7c\x71\x71\x47\x12\x02\xb0\x59\x83\
+\xb6\xdd\x45\x12\xe4\x1a\xb9\x43\x87\xea\x79\x90\xc3\x5f\x7f\x83\
+\x0a\x6b\x0e\xe4\x44\xa9\x14\x53\x9a\x13\x22\xcd\xe4\x02\x64\xd9\
+\x86\x10\x7e\x43\xca\x4a\x93\x9c\x22\x56\xf1\xfd\x7c\x11\xc4\x16\
+\x7c\x3f\x87\x12\x7c\x1e\x3b\xd1\x32\x13\xea\x20\xc7\xf0\x5b\x10\
+\xb4\xf7\x7a\x1c\x3d\xab\xab\xc0\x1e\x02\x58\xb5\x16\x70\x80\xd2\
+\x7b\x8d\xc6\x4b\x9b\x97\x96\xf6\xbe\xf4\xe0\x83\x8b\x89\x7a\xd5\
+\x3c\x35\x9f\xaf\xe1\x80\x54\x82\x9c\x6d\x36\x1a\xc9\x18\x8a\x5f\
+\xfe\x16\x6f\x64\x80\x3a\xff\x59\xad\x2e\x65\xa1\xe6\xfb\x4b\x15\
+\x68\xac\xe8\x79\x0b\x8b\x38\x66\x3f\x89\xcd\xd5\x82\xeb\x96\x34\
+\xa1\x3e\x88\x31\x04\x20\xcf\x06\xdc\xfa\xfe\xbf\xce\x42\x00\x26\
+\x85\xe6\xb8\x11\x52\xda\x7e\xf3\xe4\xe4\x1f\x6f\x4c\x26\x77\xa7\
+\xd2\x29\xff\x8d\xb9\xdc\x4f\xaa\xa8\x0f\x4a\x40\x1e\xc4\x70\x80\
+\x9a\x3b\xe3\xba\x8b\xdd\xa4\x80\xde\xa4\xb8\x17\x8c\x1e\xe4\x28\
+\x1a\x77\xb7\xd5\xc8\xf6\x2b\x00\x2d\x04\x1b\x5d\x1a\x18\x05\x86\
+\x81\x18\x20\xce\x46\x5b\x6b\xd4\x18\x7d\x30\xc4\x3e\x78\x01\x18\
+\xe8\x2c\x26\xde\x84\xa1\x6b\x84\x5f\x2e\x62\xfd\xb7\xff\x05\xc7\
+\xfd\xe7\xdb\x23\x5d\x13\x38\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x0d\
+\x0b\x34\x2d\xe7\
+\x00\x61\
+\x00\x6b\x00\x72\x00\x65\x00\x67\x00\x61\x00\x74\x00\x6f\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x07\
+\x0e\x95\x57\x87\
+\x00\x6b\
+\x00\x33\x00\x62\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x01\xad\xab\x47\
+\x00\x64\
+\x00\x69\x00\x67\x00\x69\x00\x6b\x00\x61\x00\x6d\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1a\
+\x08\xdd\xe1\xa7\
+\x00\x61\
+\x00\x63\x00\x63\x00\x65\x00\x73\x00\x73\x00\x6f\x00\x72\x00\x69\x00\x65\x00\x73\x00\x2d\x00\x64\x00\x69\x00\x63\x00\x74\x00\x69\
+\x00\x6f\x00\x6e\x00\x61\x00\x72\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x01\
+\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x33\x2d\
+\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x40\x37\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x20\x00\x00\x00\x00\x00\x01\x00\x00\x13\x0d\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/animation/appchooser/digikam.png b/examples/animation/appchooser/digikam.png
new file mode 100644
index 0000000..9de9fb2
Binary files /dev/null and b/examples/animation/appchooser/digikam.png differ
diff --git a/examples/animation/appchooser/k3b.png b/examples/animation/appchooser/k3b.png
new file mode 100644
index 0000000..bbcafcf
Binary files /dev/null and b/examples/animation/appchooser/k3b.png differ
diff --git a/examples/animation/easing/easing.py b/examples/animation/easing/easing.py
new file mode 100755
index 0000000..6f598b2
--- /dev/null
+++ b/examples/animation/easing/easing.py
@@ -0,0 +1,267 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (pyqtProperty, QEasingCurve, QObject, QPoint, QPointF,
+        QPropertyAnimation, QRect, QRectF, QSize, Qt)
+from PyQt5.QtGui import (QBrush, QColor, QIcon, QLinearGradient, QPainter,
+        QPainterPath, QPixmap)
+from PyQt5.QtWidgets import (QApplication, QGraphicsPixmapItem, QGraphicsScene,
+        QListWidgetItem, QWidget)
+
+import easing_rc
+from ui_form import Ui_Form
+
+
+class Animation(QPropertyAnimation):
+    LinearPath, CirclePath = range(2)
+
+    def __init__(self, target, prop):
+        super(Animation, self).__init__(target, prop)
+
+        self.setPathType(Animation.LinearPath)
+
+    def setPathType(self, pathType):
+        self.m_pathType = pathType
+        self.m_path = QPainterPath()
+
+    def updateCurrentTime(self, currentTime):
+        if self.m_pathType == Animation.CirclePath:
+            if self.m_path.isEmpty():
+                end = self.endValue()
+                start = self.startValue()
+                self.m_path.moveTo(start)
+                self.m_path.addEllipse(QRectF(start, end))
+
+            dura = self.duration()
+            if dura == 0:
+                progress = 1.0
+            else:
+                progress = (((currentTime - 1) % dura) + 1) / float(dura)
+
+            easedProgress = self.easingCurve().valueForProgress(progress)
+            if easedProgress > 1.0:
+                easedProgress -= 1.0
+            elif easedProgress < 0:
+                easedProgress += 1.0
+
+            pt = self.m_path.pointAtPercent(easedProgress)
+            self.updateCurrentValue(pt)
+            self.valueChanged.emit(pt)
+        else:
+            super(Animation, self).updateCurrentTime(currentTime)
+
+
+# PyQt doesn't support deriving from more than one wrapped class so we use
+# composition and delegate the property.
+class PixmapItem(QObject):
+    def __init__(self, pix):
+        super(PixmapItem, self).__init__()
+
+        self.pixmap_item = QGraphicsPixmapItem(pix)
+
+    def _set_pos(self, pos):
+        self.pixmap_item.setPos(pos)
+
+    pos = pyqtProperty(QPointF, fset=_set_pos)
+
+
+class Window(QWidget):
+    def __init__(self, parent=None):
+        super(QWidget, self).__init__(parent)
+
+        self.m_iconSize = QSize(64, 64)
+        self.m_scene = QGraphicsScene()
+        self.m_ui = Ui_Form()
+
+        self.m_ui.setupUi(self)
+        self.m_ui.easingCurvePicker.setIconSize(self.m_iconSize)
+        self.m_ui.easingCurvePicker.setMinimumHeight(self.m_iconSize.height() + 50)
+        self.m_ui.buttonGroup.setId(self.m_ui.lineRadio, 0)
+        self.m_ui.buttonGroup.setId(self.m_ui.circleRadio, 1)
+
+        dummy = QEasingCurve()
+        self.m_ui.periodSpinBox.setValue(dummy.period())
+        self.m_ui.amplitudeSpinBox.setValue(dummy.amplitude())
+        self.m_ui.overshootSpinBox.setValue(dummy.overshoot())
+
+        self.m_ui.easingCurvePicker.currentRowChanged.connect(self.curveChanged)
+        self.m_ui.buttonGroup.buttonClicked[int].connect(self.pathChanged)
+        self.m_ui.periodSpinBox.valueChanged.connect(self.periodChanged)
+        self.m_ui.amplitudeSpinBox.valueChanged.connect(self.amplitudeChanged)
+        self.m_ui.overshootSpinBox.valueChanged.connect(self.overshootChanged)
+        self.createCurveIcons()
+
+        pix = QPixmap(':/images/qt-logo.png')
+        self.m_item = PixmapItem(pix)
+        self.m_scene.addItem(self.m_item.pixmap_item)
+        self.m_ui.graphicsView.setScene(self.m_scene)
+
+        self.m_anim = Animation(self.m_item, 'pos')
+        self.m_anim.setEasingCurve(QEasingCurve.OutBounce)
+        self.m_ui.easingCurvePicker.setCurrentRow(int(QEasingCurve.OutBounce))
+
+        self.startAnimation()
+
+    def createCurveIcons(self):
+        pix = QPixmap(self.m_iconSize)
+        painter = QPainter()
+
+        gradient = QLinearGradient(0, 0, 0, self.m_iconSize.height())
+        gradient.setColorAt(0.0, QColor(240, 240, 240))
+        gradient.setColorAt(1.0, QColor(224, 224, 224))
+
+        brush = QBrush(gradient)
+
+        # The original C++ code uses undocumented calls to get the names of the
+        # different curve types.  We do the Python equivalant (but without
+        # cheating).
+        curve_types = [(n, c) for n, c in QEasingCurve.__dict__.items()
+                if isinstance(c, QEasingCurve.Type) and c != QEasingCurve.Custom]
+        curve_types.sort(key=lambda ct: ct[1])
+
+        painter.begin(pix)
+
+        for curve_name, curve_type in curve_types:
+            painter.fillRect(QRect(QPoint(0, 0), self.m_iconSize), brush)
+
+            curve = QEasingCurve(curve_type)
+
+            if curve_type == QEasingCurve.BezierSpline:
+                curve.addCubicBezierSegment(QPointF(0.4, 0.1),
+                        QPointF(0.6, 0.9), QPointF(1.0, 1.0))
+            elif curve_type == QEasingCurve.TCBSpline:
+                curve.addTCBSegment(QPointF(0.0, 0.0), 0, 0, 0)
+                curve.addTCBSegment(QPointF(0.3, 0.4), 0.2, 1, -0.2)
+                curve.addTCBSegment(QPointF(0.7, 0.6), -0.2, 1, 0.2)
+                curve.addTCBSegment(QPointF(1.0, 1.0), 0, 0, 0)
+
+            painter.setPen(QColor(0, 0, 255, 64))
+            xAxis = self.m_iconSize.height() / 1.5
+            yAxis = self.m_iconSize.width() / 3.0
+            painter.drawLine(0, xAxis, self.m_iconSize.width(),  xAxis)
+            painter.drawLine(yAxis, 0, yAxis, self.m_iconSize.height())
+
+            curveScale = self.m_iconSize.height() / 2.0;
+
+            painter.setPen(Qt.NoPen)
+
+            # Start point.
+            painter.setBrush(Qt.red)
+            start = QPoint(yAxis,
+                    xAxis - curveScale * curve.valueForProgress(0))
+            painter.drawRect(start.x() - 1, start.y() - 1, 3, 3)
+
+            # End point.
+            painter.setBrush(Qt.blue)
+            end = QPoint(yAxis + curveScale,
+                    xAxis - curveScale * curve.valueForProgress(1))
+            painter.drawRect(end.x() - 1, end.y() - 1, 3, 3)
+
+            curvePath = QPainterPath()
+            curvePath.moveTo(QPointF(start))
+            t = 0.0
+            while t <= 1.0:
+                to = QPointF(yAxis + curveScale * t,
+                        xAxis - curveScale * curve.valueForProgress(t))
+                curvePath.lineTo(to)
+                t += 1.0 / curveScale
+
+            painter.setRenderHint(QPainter.Antialiasing, True)
+            painter.strokePath(curvePath, QColor(32, 32, 32))
+            painter.setRenderHint(QPainter.Antialiasing, False)
+
+            item = QListWidgetItem()
+            item.setIcon(QIcon(pix))
+            item.setText(curve_name)
+            self.m_ui.easingCurvePicker.addItem(item)
+
+        painter.end()
+
+    def startAnimation(self):
+        self.m_anim.setStartValue(QPointF(0, 0))
+        self.m_anim.setEndValue(QPointF(100, 100))
+        self.m_anim.setDuration(2000)
+        self.m_anim.setLoopCount(-1)
+        self.m_anim.start()
+
+    def curveChanged(self, row):
+        curveType = QEasingCurve.Type(row)
+        self.m_anim.setEasingCurve(curveType)
+        self.m_anim.setCurrentTime(0)
+
+        isElastic = (curveType >= QEasingCurve.InElastic and curveType <= QEasingCurve.OutInElastic)
+        isBounce = (curveType >= QEasingCurve.InBounce and curveType <= QEasingCurve.OutInBounce)
+
+        self.m_ui.periodSpinBox.setEnabled(isElastic)
+        self.m_ui.amplitudeSpinBox.setEnabled(isElastic or isBounce)
+        self.m_ui.overshootSpinBox.setEnabled(curveType >= QEasingCurve.InBack and curveType <= QEasingCurve.OutInBack)
+
+    def pathChanged(self, index):
+        self.m_anim.setPathType(index)
+
+    def periodChanged(self, value):
+        curve = self.m_anim.easingCurve()
+        curve.setPeriod(value)
+        self.m_anim.setEasingCurve(curve)
+
+    def amplitudeChanged(self, value):
+        curve = self.m_anim.easingCurve()
+        curve.setAmplitude(value)
+        self.m_anim.setEasingCurve(curve)
+
+    def overshootChanged(self, value):
+        curve = self.m_anim.easingCurve()
+        curve.setOvershoot(value)
+        self.m_anim.setEasingCurve(curve)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    w = Window()
+    w.resize(400, 400)
+    w.show()
+    sys.exit(app.exec_())
diff --git a/examples/animation/easing/easing.qrc b/examples/animation/easing/easing.qrc
new file mode 100644
index 0000000..7e112d3
--- /dev/null
+++ b/examples/animation/easing/easing.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+ <qresource>
+     <file>images/qt-logo.png</file>
+ </qresource>
+ </RCC>
\ No newline at end of file
diff --git a/examples/animation/easing/easing_rc.py b/examples/animation/easing/easing_rc.py
new file mode 100644
index 0000000..d26172d
--- /dev/null
+++ b/examples/animation/easing/easing_rc.py
@@ -0,0 +1,362 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Thu May 2 16:22:48 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x14\x1d\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x2e\x00\x00\x00\x37\x08\x06\x00\x00\x00\x73\x60\x78\x64\
+\x00\x00\x13\xe4\x49\x44\x41\x54\x78\x9c\x62\xfc\xff\xff\x3f\xc3\
+\xdf\x7f\x7f\x99\x99\x99\x98\xff\x3e\x78\xf1\x58\x66\xe9\x9e\x55\
+\x09\x87\x2f\x9e\xb6\x79\xf7\xe9\xad\x98\xa4\xf2\x3f\x7e\x51\xb9\
+\xbf\xfc\xcc\x1c\x3f\xf8\xfe\xfd\xff\xc7\xca\xc5\xc6\xf7\x46\x9c\
+\x5b\xf6\x96\x24\xaf\xd2\x35\x29\x3e\xa5\xcb\xd2\xbc\x4a\xd7\xc4\
+\x78\x64\xef\x08\x70\x8a\x3e\x63\x63\x66\xff\xc5\x80\x05\xfc\x67\
+\xf8\xcf\xf4\xef\xff\x3f\x26\x06\x86\xff\x0c\x8c\x0c\x8c\xff\x19\
+\x19\x18\xff\x33\x30\x42\x69\x0a\x00\x00\x00\x00\xff\xff\x62\xfc\
+\xfb\xf7\x2f\x33\x13\x13\xd3\xdf\x59\x9b\x17\xa6\x54\xcf\x6d\xed\
+\x7d\xf3\xe6\x0d\x1f\x17\x2f\xdb\x7f\x7b\x2f\x61\x46\x59\x45\x4e\
+\x06\x86\x7f\x8c\x0c\x0c\xff\x99\x18\x18\x18\x18\x18\xfe\xfd\xff\
+\xc7\xf0\xe7\xdf\x6f\x86\x7f\xff\xff\x30\x30\x30\x30\x32\xb0\x30\
+\xb1\x32\x70\xb2\xf0\x7c\xe3\x63\x17\x7a\x26\xcc\x25\x75\x5f\x9c\
+\x47\xee\xa6\x04\x8f\xc2\x75\x09\x5e\x85\x9b\xa2\x5c\x52\xf7\x05\
+\x38\xc5\x9e\xb1\xb3\x70\xfc\xc0\x6e\xf5\x7f\xc6\x7f\xff\xff\x31\
+\xc3\x39\x24\x7a\x08\x00\x00\x00\xff\xff\x62\xfc\xff\xff\x3f\xc3\
+\xa4\xb5\xb3\x73\xf2\xbb\xf3\x26\x73\xf2\x09\xff\x63\x67\x63\xfb\
+\xef\x1e\x2c\xc4\x20\x21\xc3\xc6\xf8\xed\xeb\x3f\x46\x46\x88\x39\
+\x8c\x70\x0b\x18\x99\xfe\x33\x32\x30\xfc\x67\x60\x60\x60\xf8\xff\
+\xff\x3f\xd3\xbf\xff\x7f\x19\xff\xfc\xff\x03\xf1\xd0\xbf\x3f\x0c\
+\xff\x19\xfe\x33\xb0\x30\xb2\x32\xb0\xb3\x70\xff\xe5\x67\x17\x7e\
+\x21\xcc\x25\x79\x5f\x8c\x47\xee\xa6\x14\xaf\xe2\x75\x09\x1e\x85\
+\xeb\xa2\x3c\x32\x77\x85\x39\x25\x9e\x70\xb0\x72\x7d\xc5\xe7\xa1\
+\xff\x70\x4b\x19\xff\x31\x62\xf1\x10\x00\x00\x00\xff\xff\x6c\x92\
+\xbd\x0a\xc2\x30\x14\x46\xbf\x2f\x16\x7f\xd2\x06\x21\x83\xc6\x41\
+\xc5\x5d\x70\xec\xa8\xbb\xcf\xe2\x6b\xba\x76\x70\x28\xa8\x83\xe0\
+\xd6\xb1\x88\x20\x24\xf7\x3a\x88\x5b\x5e\xe0\x1c\x0e\x1c\x36\xb7\
+\xcb\x76\x7f\x3a\x9e\x85\xea\xe2\x87\xb2\xab\x4b\x53\x1f\xa6\x78\
+\xbf\x04\x66\x90\x03\x67\x4c\xa0\xfe\x0a\xa9\xc4\x7f\x8f\x64\xa2\
+\x44\x24\x89\x48\x1a\xa1\x2a\x30\x2c\x30\x2e\xac\xb8\x91\xef\xfc\
+\x24\x3c\x66\xe5\xf2\xba\x70\x9b\x36\x54\xeb\x76\x5e\xad\xee\xde\
+\x86\xa7\x1d\xba\x9e\x79\x0f\x45\xc5\x28\x94\x04\xf0\x05\x00\x00\
+\xff\xff\x62\x99\xbc\x76\x56\xee\xa7\xef\x5f\x79\xf9\xb9\xf9\xfe\
+\x32\xb2\xff\x65\x56\xd6\xe4\x62\xf8\xfd\xeb\x3f\x03\x23\x13\x51\
+\x8e\x66\x60\x60\x60\x60\xfc\xcf\xf0\x9f\xf1\xff\x7f\xf4\x18\x66\
+\xfc\xcf\xca\xc4\xf6\x9f\x8d\x99\x1d\xc9\x43\x0c\x8c\xff\xfe\xff\
+\x65\xfe\xf8\xe3\xb5\xc4\xbb\xef\xcf\x24\x6e\xbc\x39\x65\x01\xf1\
+\x10\x33\x03\x3b\x33\xe7\x7f\x1e\x36\xc1\xb7\x82\x9c\xe2\x0f\xc5\
+\x79\x64\x6f\x8b\xf3\x28\x5c\x97\xe4\x55\xb8\x2e\xce\x23\x77\x5b\
+\x98\x4b\xe2\x11\x0f\x9b\xc0\x3b\x26\x46\xa6\xbf\x30\xd3\x01\x00\
+\x00\x00\xff\xff\x62\x54\x89\x34\xbe\xfb\xf4\xed\x0b\x25\x86\xff\
+\xcc\xff\x85\x44\x58\x18\xbd\xc3\x45\x88\x76\x31\xb9\x00\x9a\x9e\
+\xff\x31\xa2\x79\xe8\xef\x7f\x48\x0c\xfd\xf9\xf7\x9b\xe1\xff\xff\
+\x7f\x0c\x8c\x8c\xcc\x0c\x6c\xcc\x1c\x0c\x3c\xac\xfc\x1f\x04\x39\
+\xc5\x1e\x89\x72\xcb\xde\x91\xe0\x51\xb8\x26\xc9\xab\x70\x03\x00\
+\x00\x00\xff\xff\xbc\xd1\xb1\x0d\x80\x30\x10\x03\x40\x3b\x05\x54\
+\x54\xb4\x91\x32\x0e\xa2\x65\xff\x45\xc8\xff\xdb\x54\x94\xb4\x8c\
+\x70\x3a\x6e\xe7\xb8\x01\x2f\x73\x1a\x7d\xac\x38\xae\x1d\x11\x06\
+\x3f\xbe\x7e\x00\x99\xa0\x5e\x90\xad\x56\x4e\x96\x02\xa9\x84\x5c\
+\x20\x1b\x1e\x00\x00\x00\xff\xff\xb4\x92\x21\x12\x00\x20\x0c\xc3\
+\xda\x5b\x81\xff\x7f\x98\xa0\x26\x70\x18\x2a\x73\x11\x11\x0d\x30\
+\xdd\xd6\xfb\x3d\xbe\x0c\x61\x81\x91\xae\x92\x72\xa8\x0c\x96\xbc\
+\x9b\x1d\x00\x00\x00\xff\xff\x94\x94\xb1\x0d\x00\x20\x0c\xc3\xdc\
+\x96\xff\x4f\x76\x19\xd8\x10\x42\x70\x40\x6c\x79\xc9\xd8\x96\x7f\
+\x22\x21\x33\xa8\x2a\x6c\xd1\x05\xc8\x08\xd6\x27\x34\xb6\x57\xc6\
+\x93\xe7\x10\x34\x01\x00\x00\xff\xff\x8c\x91\xc1\x0a\x80\x20\x10\
+\x05\x67\xdd\x35\xa5\xfe\xff\x3b\x83\x28\x41\xad\xad\x4b\x67\xeb\
+\xdd\x67\x18\x78\x36\x02\x46\xc1\x6a\x42\x9e\x8d\xbd\x1c\xac\x5b\
+\x21\x6a\x24\x4d\x09\x01\xaa\x37\x4e\xef\x68\x30\xb2\x2d\x04\x51\
+\xfc\xbe\x3e\xac\xef\xed\x3f\xf7\x00\x00\x00\xff\xff\x22\xd9\xe1\
+\xff\xff\x31\x30\x70\x70\x32\x33\x7c\xfb\xfa\x87\xe1\xf4\xc9\xc7\
+\x0c\x52\x5c\xea\x0c\x5e\x26\x3e\x0c\xc6\xaa\x86\x0c\xa2\x02\x22\
+\x0c\x8c\x8c\x0c\x0c\x5f\x7e\x7d\x60\x78\xf6\xe9\x1e\xc3\xb5\xd7\
+\x27\x19\xae\xbe\x3a\xc1\xf0\xf5\xf7\x27\x06\x6e\x56\x3e\x9c\x8e\
+\x67\x64\x64\x60\x80\x95\x4a\x4c\x8c\x4c\x0c\xff\xff\xff\x67\xf8\
+\x4f\xc0\x13\x00\x00\x00\x00\xff\xff\x22\xc9\xe1\xff\xff\x43\x1c\
+\x7d\xe7\xc6\x17\x86\xa3\xfb\xde\x32\x54\x84\x54\x30\x14\x85\x67\
+\x30\xb0\xb3\xb3\x32\xfc\x87\x54\xe9\x70\xb5\x5a\x62\x16\x0c\xae\
+\x2a\xd1\x0c\xcf\x3f\x3f\x60\x58\x73\x75\x22\xc3\xe9\x27\x3b\x19\
+\xb8\xd8\xf8\x18\x30\x8b\x4d\x06\x86\x5f\x3f\xff\x31\xb0\xb0\xb0\
+\x30\x30\x32\xfd\x65\xf8\xf6\xfb\x0b\x03\x0b\x13\x0b\x03\x2b\x13\
+\x3b\x5e\xc7\x03\x00\x00\x00\xff\xff\x22\x3a\x3b\xfe\xff\xc7\xc0\
+\xc0\xce\xc1\xc4\x70\xe3\xf2\x57\x86\x9d\x6b\x5f\x30\xcc\x2e\x9c\
+\xce\x50\x19\x97\xcb\xc0\xc2\xca\xc4\xf0\xf7\xdf\x5f\x86\xff\xff\
+\xff\xc1\x2b\x9b\x3f\x7f\x7f\x33\xfc\xfe\x03\x29\xd2\x24\x79\xe5\
+\x19\x72\x2d\xfa\x19\x42\x74\xf2\x19\xbe\xfd\xfa\xcc\xc0\x04\x2d\
+\x01\xfe\xff\x67\x60\x60\x65\x63\x64\x78\xf5\xec\x0f\xc3\x92\x59\
+\x0f\x18\x3c\xc4\x4b\x18\xba\xbc\x36\x32\xd4\xd8\x2f\x66\x30\x94\
+\x74\x64\xf8\xf1\xe7\x1b\x5c\x2d\x36\x00\x00\x00\x00\xff\xff\x8c\
+\xd4\x21\x0e\xc2\x40\x10\x40\xd1\x3f\x33\xbb\x75\x0d\x06\x01\x0e\
+\x53\x82\x44\x35\x58\x24\xa6\x12\x8d\x20\xe1\x04\x78\x6e\xc4\x01\
+\xb8\x0c\x69\x10\x08\x0c\x49\x31\x5d\xb6\x83\x42\x92\x70\x82\xff\
+\xd4\xff\x0b\xfe\x8d\x3c\xee\x99\xcb\xf9\xca\x69\x7f\x64\xbb\x6e\
+\xe8\x53\x42\x45\x31\x35\x44\x14\xd3\x80\x49\x20\x58\xa4\x08\x05\
+\x0e\x0c\xee\x64\xcf\x34\x8b\x03\x9b\xf9\x8e\xae\x7f\xa2\x62\xb8\
+\x3b\xaa\xc2\xad\x7d\x11\xbd\xa4\xae\x56\x8c\xe2\x94\x6a\xbc\x64\
+\x52\xce\x78\x0f\x09\xf8\xfd\xe4\x0f\x00\x00\x00\xff\xff\x22\x3a\
+\xc4\x19\x19\x99\x18\x0e\xee\x7e\xce\xa0\xa9\xac\xcb\x50\x16\x95\
+\xcb\xc0\xc0\xc0\xc0\xc0\xca\xc2\xc2\xc0\xc8\xc8\xc8\xf0\xff\x3f\
+\x24\x99\xdc\x78\x7b\x92\xa1\x66\x43\x3a\x83\x4f\x65\x04\xc3\xda\
+\x43\x5b\xa0\x21\xc6\x08\x0f\xb9\x10\xed\x3c\x06\x45\x41\x6d\x86\
+\x9f\x7f\xbe\x31\x30\x33\x31\x33\xfc\xff\xc7\xc8\xf0\xf4\xf1\x17\
+\x06\x6d\x25\x55\x06\x19\x51\x69\xa8\x63\x19\x18\xfe\x13\x51\x12\
+\x01\x00\x00\x00\xff\xff\x84\xd4\x2b\x0e\xc2\x40\x14\x46\xe1\xf3\
+\xdf\xa6\x4c\x05\xeb\x40\xa0\x50\x2c\x02\x0d\x49\x75\x05\x0e\xc9\
+\x1e\x58\x09\x8a\x2d\x90\x60\x70\x24\x78\x12\x14\x62\x12\x02\x02\
+\x0c\x8f\xb6\x77\xb0\x18\xc2\x0e\x8e\xf8\x72\xfe\x86\xa7\x04\x9d\
+\x20\xe2\xe9\x4d\x3c\xde\x99\x4d\x2a\x42\x5e\xd0\xb4\x0d\x92\xf0\
+\xe4\x48\xe2\x70\xdd\xb3\xd8\x4c\x89\xb6\xe5\xd6\xdd\x31\x9e\x97\
+\x2c\xd7\x2b\x4c\xc2\xdd\xf1\xd4\x92\x67\x81\x51\xaf\xa2\xf6\x1a\
+\x99\x78\x3d\xc4\xe5\xfc\x64\xd8\x1f\x00\x7c\xed\x34\xc3\x64\x98\
+\x0c\xfd\xe0\xf2\x01\x00\x00\xff\xff\x22\x1c\xe2\xff\x21\x65\xf5\
+\x8d\x2b\x1f\x19\x04\x84\xc4\x19\xfc\xad\x3d\x19\x18\x18\x18\x18\
+\x98\xa1\x2d\x30\x58\x64\x6e\xbe\x31\x8b\xe1\xdf\xff\xbf\x0c\xec\
+\x0c\x02\x0c\xa6\xe6\x92\x0c\x72\x9a\x22\x0c\x55\x33\xda\x18\xbe\
+\xff\x82\x84\x2e\x23\xb4\x08\x36\x94\x74\x60\x90\xe1\x57\x66\x60\
+\x62\xfd\xc5\xf0\xf2\xc5\x67\x86\xdf\x2f\xdf\x33\x58\xe9\x98\x20\
+\x2c\x63\x60\x60\xf8\xf5\xf7\x3b\xc3\xd7\xdf\x9f\x18\xbe\xff\xf9\
+\xca\xf0\xeb\x2f\xf6\x56\x31\x00\x00\x00\xff\xff\x22\xe8\x70\x26\
+\x66\x06\x86\x9f\xdf\x19\x18\xee\xdf\xfb\xc8\x60\xa9\x63\xc4\x20\
+\x25\x2c\x09\x0f\xe5\xff\x0c\xff\x19\x18\x19\x99\x18\x3e\xfc\x78\
+\xcd\xf0\xe0\xfd\x55\x06\x0e\x16\x2e\x86\x3f\xff\x7e\x33\xfc\xfe\
+\xf3\x87\x41\x53\x47\x90\xe1\xe1\xe3\xfb\x0c\x07\x2e\x1c\x85\x84\
+\xe6\xff\x7f\x0c\x7f\xff\xfd\x65\x60\x67\xe1\x64\xe0\xfd\x64\xc4\
+\xb0\x62\xfe\x43\x86\x64\xd3\x46\x86\xcd\x33\x76\x30\xb8\x98\x38\
+\x40\x03\x03\x52\xc8\x29\x08\x6a\x33\x98\xc9\xb8\x33\x68\x88\x98\
+\x30\x48\xf2\x28\x60\x75\x17\x00\x00\x00\xff\xff\xc2\x5b\x1c\xfe\
+\xff\xcf\xc0\xc0\xc2\xc2\xc8\xf0\xfe\xdd\x5f\x86\xef\xef\x7f\x30\
+\x58\xe9\x9a\x42\x1c\xf1\xef\x1f\x03\x13\x33\xa4\xbc\x65\x64\x64\
+\x64\x78\xf9\xe5\x21\xc3\x97\x5f\x1f\x19\xd8\x59\xb8\x20\xc9\xe2\
+\xef\x7f\x06\x61\x31\x36\x06\x06\xe6\x7f\x0c\xa7\xae\x9d\x63\xf0\
+\x34\x73\x85\xe7\x03\x06\x06\x06\x06\x4d\x51\x33\x86\x77\x8f\xfa\
+\x19\x54\xc5\xb4\x19\x34\xe5\xd5\x18\xfe\xfe\xfb\x0b\x75\x38\x24\
+\x16\x2d\x65\xbd\x19\x2c\x64\x3c\x19\x18\x19\x99\x18\x9e\x7f\xbe\
+\xcf\xd0\xb0\x2f\x02\xc3\x6d\x00\x00\x00\x00\xff\xff\xc2\x1f\xe2\
+\xff\x19\x18\x98\x98\x19\x19\xde\xbf\xfd\xcd\xc0\xf0\x8f\x99\x41\
+\x5f\x45\x8b\x81\x81\x81\x81\x81\x11\xde\x02\x83\x44\xed\x9b\x6f\
+\xcf\x19\xfe\xfc\xfb\xcd\xc0\xc8\xc0\xc8\xc0\xc8\x08\x49\xab\x9c\
+\xdc\x4c\x0c\xcc\x5c\x2c\x0c\x37\x1f\xdf\x83\xeb\x61\x64\x82\xe8\
+\xd3\x53\xd1\x64\xe0\xe2\xe3\x67\xf8\xf3\xf7\x0f\x6e\x8b\x09\x54\
+\x40\x00\x00\x00\x00\xff\xff\x22\x98\x54\x18\x19\x19\x18\x3e\xbc\
+\xff\xc5\xc0\xc4\xce\xc9\xa0\x20\x21\x07\x11\x83\x86\x1c\xcc\xe8\
+\x4f\x3f\xde\x42\x9a\xa1\x50\xfe\xbf\x7f\x0c\x0c\xac\xac\x0c\x0c\
+\xdc\xdc\xac\x0c\xcf\xdf\xbc\x84\x58\xc4\xc8\x04\xd7\x27\x25\x2c\
+\xc1\xa0\xa9\x26\xc5\x70\xf1\xfe\x25\x86\xa7\xaf\x9f\xc3\x43\x1a\
+\x06\xfe\xfc\xfd\xcb\xf0\xfb\xcf\x3f\x14\xbb\xd0\x01\x00\x00\x00\
+\xff\xff\x22\x5c\x73\xfe\x67\x60\xf8\xfc\xe9\x37\x03\x2f\x17\x37\
+\x83\x28\xbf\x30\xd4\x33\xd0\x4e\x15\x54\xc9\xb7\xdf\x9f\x51\x3c\
+\xc2\xc0\x00\xc9\x1b\x1c\x1c\x2c\x0c\xef\x3f\x7f\x82\xeb\xf9\x0f\
+\x0d\x49\x4e\x76\x4e\x86\x88\x28\x2d\x86\xd4\xce\x64\x06\x13\x69\
+\x17\x86\xc3\x53\x37\x32\xfc\xff\xff\x9f\xe1\x1f\xc3\x3f\x06\x66\
+\x46\x66\x86\xed\x37\x17\x32\xec\xba\xbd\x82\x41\x84\x5b\x92\x01\
+\xa9\xef\x80\x02\x00\x00\x00\x00\xff\xff\x7c\x95\x4d\x0a\x80\x20\
+\x18\x44\x9f\xf9\x43\x88\x50\xf7\xbf\x5b\x27\x88\x36\x2d\x34\x31\
+\xfd\x5a\xb8\x11\x8a\xf6\x03\xf3\x86\x19\x98\x7f\x70\xd5\x77\x9e\
+\x62\x21\xf8\x85\xe0\xc3\xa7\x2c\xdf\x91\xf1\x2c\x44\x7a\x53\xce\
+\x69\xe2\x95\x28\xb5\x60\xb5\x05\x81\x86\x30\x29\x85\xb7\x2b\xd6\
+\x18\x8c\x1e\x11\x7a\xf4\xd4\x4e\xf6\xbc\x91\xe4\xa0\xb6\x8a\xd3\
+\xf3\xcb\xf3\x01\x00\x00\xff\xff\x84\x97\xc1\x0a\x80\x30\x0c\x43\
+\x5f\xb7\xae\x9b\xc5\xff\xff\x57\xad\x16\x0f\x9e\x64\x03\xef\x21\
+\x79\x10\x08\xe4\x7f\xc7\x81\x88\x64\xb3\x41\x57\x5b\x6a\x22\x63\
+\x3a\x1e\x22\xa0\x5a\x38\xe2\xe4\xba\x63\x82\xf3\xb6\x93\x99\x7c\
+\x7b\x7a\x4d\x8a\x54\x9a\x0c\xac\x3a\x5d\x7d\x99\xf9\x00\x00\x00\
+\xff\xff\x22\xaa\x1c\xff\xfb\xf7\x3f\x03\x0b\x33\x33\x03\x13\x13\
+\x13\xb2\xf9\x70\x00\x69\xf5\xa1\xbb\x1c\x92\xb1\xff\xfe\xfb\x0b\
+\x75\x20\x2a\x60\x65\x62\x83\x26\x1d\x6c\x69\x18\xd2\x3a\xfc\xff\
+\xff\x1f\xce\x5a\x14\x00\x00\x00\xff\xff\x22\xb2\xad\x02\x29\xf6\
+\x18\x71\xf6\xe7\xb0\x97\x00\x8c\x50\x29\x6c\xb2\x4c\x8c\xc4\x0d\
+\x21\xe0\x02\x00\x00\x00\x00\xff\xff\x22\xca\xe1\x4c\x4c\x8c\x0c\
+\x7f\xff\xfd\x63\xf8\x87\xa5\x49\xca\xc0\xc0\x80\xbd\x5a\x86\x3a\
+\x98\x91\x11\x7b\xb9\x40\x69\xcf\x08\x00\x00\x00\xff\xff\x22\xaa\
+\x38\x64\x61\x85\xa4\xd5\xdf\x7f\x7e\xc3\x1d\x85\x0c\x58\x18\x59\
+\xb1\xb6\x9d\xff\xfd\xfd\xcf\xc0\xcc\xc4\xc4\xc0\x84\x65\x80\xe6\
+\xf7\xbf\x9f\xd0\xa2\x8e\xbc\x91\x38\x00\x00\x00\x00\xff\xff\x22\
+\x1c\xe2\x8c\x0c\x0c\xec\xec\x2c\x0c\xdf\x7e\x7c\x67\xf8\xf1\x0b\
+\x7b\xbb\x81\x95\x99\x1d\xc3\xfe\xff\x0c\x0c\x0c\x7f\xfe\xfe\x63\
+\x60\x65\x65\x65\x60\x61\x46\x76\x38\x24\xfc\x7f\xfc\xf9\x06\x2d\
+\x22\xc9\x03\x00\x00\x00\x00\xff\xff\x22\x58\x73\x32\x32\x32\x30\
+\x70\x73\x43\xfa\x96\x1f\xbf\x7e\x82\x0a\xff\x87\x3b\x8e\x81\x81\
+\x81\x81\x93\x95\x9b\x01\x32\xa8\x89\x70\xda\xff\x7f\x0c\x0c\xbf\
+\x7f\xfd\x65\xe0\x64\xe7\x80\x14\x85\x50\x09\x58\x3e\xf9\xfa\xeb\
+\x23\x24\x89\x91\xe9\x72\x00\x00\x00\x00\xff\xff\x22\x2a\x8d\xf3\
+\xf2\xb1\x32\x7c\xff\xf1\x8d\xe1\xe5\xfb\xd7\x10\x07\xff\x47\x38\
+\x90\x81\x81\x81\x81\x87\x4d\x80\x81\x81\x01\x29\xf4\x18\x21\x0e\
+\xff\xf9\xf3\x2f\x03\x1f\x17\x2f\x44\x0e\xaa\x89\x91\x81\x91\xe1\
+\xcf\xbf\xdf\x0c\x9f\x7e\xbe\x63\x60\x66\x64\x21\xd8\xb7\xc4\x05\
+\x00\x00\x00\x00\xff\xff\xc2\xef\x70\xa8\x03\xf8\x05\xd9\x18\x18\
+\xfe\xfc\x64\xb8\xf7\xec\x21\xd4\xe1\xa8\x96\x09\x70\x88\xa2\x74\
+\xb3\x18\x19\x19\x18\xfe\xfc\x81\x54\x5c\x62\x82\x42\x0c\x0c\x0c\
+\x90\x9e\x10\xcc\x8d\x9f\x7e\xbe\x83\x38\x9c\x89\x85\x81\xdc\x20\
+\x07\x00\x00\x00\xff\xff\x22\x18\xe2\x7f\xff\xfd\x67\xe0\x17\x64\
+\x61\x60\x60\x61\x60\xb8\x78\xe7\x2a\x9a\xbf\x20\x61\x2e\xc2\x25\
+\xc5\xc0\xc6\xc2\x09\x29\x29\xa0\xed\xf7\x9f\x3f\xfe\x33\xfc\xfc\
+\xf6\x87\x41\x5e\x42\x06\xee\x59\x58\xe8\xbe\xfc\xf2\x88\xe1\xeb\
+\xaf\x8f\x0c\xcc\x8c\xcc\x64\xa7\x71\x00\x00\x00\x00\xff\xff\xc2\
+\xeb\x70\x46\x46\x06\x86\xbf\x7f\xfe\x33\xf0\xf0\x31\x31\xf0\x0a\
+\x73\x32\x9c\xbc\x7a\x8e\x81\x81\x81\x81\x81\x19\x5e\x11\x41\x1c\
+\x2e\xca\x2d\xc3\x20\xc0\x2e\xc2\xf0\x17\xda\x4f\x64\x62\x66\x60\
+\xf8\xfc\xe1\x0f\x03\xc3\xaf\xff\x0c\xba\xca\x9a\x50\xd3\x10\x2d\
+\xbe\x7b\xef\x2e\x33\xfc\xfe\xfb\x0b\x9a\xc6\x91\x9d\x8e\x48\x4e\
+\x4c\x8c\x4c\x0c\xac\x2c\x2c\x0c\xcc\xcc\xd8\xcb\x7b\x00\x00\x00\
+\x00\xff\xff\x22\x5c\xe5\xff\x63\x60\x60\x65\x67\x60\x50\x50\xe2\
+\x67\x38\x7b\xe3\x32\xc3\xa3\x57\x8f\xa1\x5d\x36\x48\xfb\xfa\xdf\
+\xff\x7f\x0c\x9c\xac\x3c\x0c\x4a\x42\x3a\x0c\xbf\xfe\xfd\x64\x60\
+\x64\x60\x62\x60\x62\x62\x64\x78\xfa\xe8\x3b\x03\x2b\x27\x2f\x83\
+\x8d\xae\x05\xc4\x22\xa4\x6e\xd8\xb5\x57\x27\x18\x58\xa0\xc9\x04\
+\xa5\x3c\x87\xfa\x81\x87\x4d\x90\xe1\xeb\xef\x8f\x0c\x2f\xdf\xbd\
+\x61\x78\xf7\xf1\x23\xd6\x16\x22\x00\x00\x00\xff\xff\x22\xaa\x38\
+\xfc\xf7\xf7\x3f\x83\x9a\x06\x2f\xc3\xe7\x8f\x6f\x18\x36\x1f\xdb\
+\xc9\xc0\xc0\xc0\x80\x51\x8d\xdb\x2b\x86\x30\xfc\xfb\xfb\x97\x81\
+\x99\xed\x1f\xc3\xcf\x6f\x4c\x0c\xa7\x8e\x3e\x60\x08\x75\xf2\x66\
+\x50\x93\x51\x61\xf8\xf7\xef\x1f\x03\x23\x23\x24\x24\x9f\x7c\xba\
+\xc3\x70\xfb\xed\x45\x06\x0e\x56\x2e\x06\x56\x36\x26\x86\xcf\xdf\
+\xbe\x30\x30\x30\x40\x6a\x66\x58\x6d\x6a\x25\xef\xc5\x60\x2d\x92\
+\xc0\xa0\xfc\x27\x80\x21\x55\x77\x02\x83\x28\x8f\x34\x24\x86\x90\
+\x3c\x00\x00\x00\x00\xff\xff\x22\xaa\x02\xfa\xfd\xeb\x3f\x83\x84\
+\x0c\x1b\x83\x84\x12\x1f\xc3\xf4\xf5\x8b\x18\x7e\xfd\xf9\xc5\xc0\
+\xc2\xcc\xcc\xf0\x9f\xe1\x3f\x7c\xe4\x49\x5b\xcc\x82\x21\x4c\x2f\
+\x9f\xe1\xd3\xa7\xef\x0c\x5b\xd6\x3d\x64\xb0\xd5\x73\x61\x98\x98\
+\xd7\x0a\x35\x83\x91\xe1\x1f\x03\xc4\xa3\xfb\xef\xad\x62\xf8\xfa\
+\xeb\x13\x03\x0b\x0b\x33\x83\x98\x18\x27\xc3\xc3\x17\x4f\x19\x9e\
+\xbf\x7b\x01\x0d\x70\x48\x90\xf3\xb2\x09\x33\x14\xb9\xb6\x30\xb4\
+\x25\xb4\x31\x38\xe9\x3a\x33\xc0\x87\xe7\x90\x9a\x1c\x00\x00\x00\
+\x00\xff\xff\x22\xae\xad\xc2\xc0\xc0\xf0\x9f\xf1\x1f\x83\xad\x93\
+\x04\xc3\xd5\x5b\x17\x19\xa6\xac\x9b\xcd\xc0\xc0\xc0\xc0\xf0\xfb\
+\xcf\x1f\xb8\xc3\xfe\xff\xff\xcf\xe0\xa7\x91\xc1\x50\x67\xb7\x86\
+\x61\x4d\xf9\x46\x86\xbd\x13\xd7\x30\x88\xf0\x8b\x40\xc6\x56\x18\
+\xfe\x32\x30\x33\xb2\x30\xdc\x7b\x77\x99\xe1\xd0\x83\xf5\x0c\xdc\
+\x6c\x7c\x0c\xbf\x7e\xfd\x66\x50\xd7\xe1\x67\xf8\xf8\xf1\x15\xc3\
+\xca\x3d\x9b\x20\xf6\xfc\x83\xe5\x03\xb4\x21\x38\x2c\x39\x18\x00\
+\x00\x00\xff\xff\x22\x6a\x08\x8e\x91\x91\x81\xe1\xf7\xcf\xff\x0c\
+\x12\x32\x2c\x0c\xd6\xee\x32\x0c\x95\x53\xdb\x18\x4c\x35\x8d\x18\
+\x6c\x75\x2d\x19\x7e\xff\xf9\xcd\xc0\xc4\xc4\xc4\xc0\xcc\xc4\xc4\
+\xf0\xff\xff\x3f\x06\x55\x29\x55\x06\x55\x29\x48\x29\x02\x49\xbf\
+\xff\x19\x98\x19\x59\x18\x3e\xfd\x7c\xc7\x30\xe7\x6c\x2d\xc3\xdf\
+\x7f\xbf\x19\xd8\x59\x38\x19\x7e\xff\xfe\xc7\x20\x24\xc6\xcc\xe0\
+\x1a\x28\xcb\xd0\xb1\xaa\x9b\x41\x5c\x58\x94\x21\xc4\xde\x9f\x81\
+\x99\x81\x91\xe1\xff\xff\x7f\x0c\x9f\x7f\x7d\x60\x78\xf8\xe1\x3a\
+\xc3\xa9\x27\x3b\x19\xde\x7c\x7b\xc6\xc0\xca\xcc\x86\xd2\x52\x04\
+\x00\x00\x00\xff\xff\x62\xe4\xf1\x90\xfb\xcf\xc8\xc8\xc0\xf0\xeb\
+\xe7\x7f\x06\x59\x45\x76\x06\xb7\x40\xdc\x03\xfb\xff\xff\x33\x30\
+\x70\x70\x30\x33\x9c\x3a\xf2\x96\xe1\xe6\xf9\xbf\x0c\x4b\x6b\x66\
+\x33\x78\x59\x3a\x42\xca\x75\x68\x1a\xfe\xf7\xff\x1f\xc3\xff\xff\
+\x90\x92\x07\x36\x9e\xf8\xe4\xe3\x6d\x86\xe9\xa7\xca\x18\x9e\x7e\
+\xba\xcb\xc0\xc9\xca\x03\x1f\xfc\xfc\xff\x9f\x81\x81\x9d\x9d\x89\
+\xe1\xcb\x97\x5f\x0c\x2f\x5f\x7e\x65\x50\x93\x51\x66\x10\x17\x12\
+\x63\xf8\xf1\xe7\x1b\xc3\xfb\xef\x2f\x19\x3e\xfe\x78\x03\xcf\xfc\
+\xe8\x19\x14\x00\x00\x00\xff\xff\x22\xc9\xe1\x30\xcb\x38\x39\x59\
+\x18\x1e\xde\xff\xcc\x70\xf1\xf4\x47\x06\x6f\xfd\x50\x86\x64\xcf\
+\x78\x06\x1d\x25\x4d\x06\x56\x68\x6f\x06\xe6\xe0\x6f\xbf\x3f\x33\
+\xac\xbd\x3a\x99\xe1\xf0\x83\x0d\x0c\x7f\xfe\xfd\x82\x8c\x02\xa0\
+\x8d\xd8\xc2\x86\xac\x59\x58\x98\x18\x7e\xfc\xfa\xc1\xf0\xfb\xcf\
+\x1f\xc8\x8c\x03\x13\x2b\xb4\xe4\x61\xc4\x3a\xca\x0b\x00\x00\x00\
+\xff\xff\x22\x79\x0e\x82\x91\x91\x81\xe1\xfb\xb7\x3f\x0c\x32\x72\
+\xdc\x0c\x7e\xe1\xd2\x0c\x77\x19\x37\x31\x18\x25\x58\x31\xb4\x2e\
+\xee\x63\x60\x60\x60\x60\xf8\xfb\x17\x61\xc9\x9f\x7f\xbf\x18\x0e\
+\xde\x5f\xcb\xc0\xc0\xc0\xc0\xc0\xc5\xca\x8b\xd5\x01\x8c\x4c\x90\
+\x51\x81\x9f\x3f\xff\x32\x30\x33\xb0\x31\x70\xb0\x72\x33\xb0\xb3\
+\x70\x32\x30\x33\x42\x27\x0b\xb0\x0f\x4d\xff\x07\x00\x00\x00\xff\
+\xff\x22\x6b\xf2\x84\x91\x89\x81\xe1\xd7\xaf\x7f\x0c\x3f\xbe\xfd\
+\x65\x50\x53\x15\x67\x10\x94\xe0\x65\xd8\x7a\x6c\x0f\x03\x03\x03\
+\x03\x03\x13\x33\x33\x3c\xc9\xf0\xb1\x0b\x33\xb8\xa9\xc6\x30\x7c\
+\xf8\xf1\x8a\xe1\xe3\xcf\xb7\xd0\x34\x8f\x3d\x2a\x19\x19\x19\x50\
+\x7a\x3d\x78\xdb\x30\xff\x19\xfe\x00\x00\x00\x00\xff\xff\x22\x6b\
+\x46\x02\x6e\xd1\x3f\x06\x86\xff\x8c\x7f\x18\xd4\x35\x04\x19\xce\
+\x1c\xbd\xca\x70\xe9\xde\x15\x06\x3d\x25\x1d\xc8\x80\x11\xb4\x76\
+\x0d\xd4\xca\x66\x90\xe1\x53\x65\x78\xf1\xe9\x11\xc3\xb1\x27\x9b\
+\x19\x3e\xfc\x78\x85\xb3\xfd\x4e\x84\xad\xff\xff\xfd\xff\xc3\xc8\
+\xcf\x2e\xfa\x0c\x00\x00\x00\xff\xff\xa2\x6c\xba\x8a\x91\x81\xe1\
+\xf7\xef\xff\x0c\xea\xba\xbc\x0c\x7f\xfe\x7f\x63\x98\xb1\x71\x21\
+\x03\x03\x03\x03\xc3\x9f\xbf\x7f\xe0\x0d\x31\x16\x46\x56\x06\x2b\
+\x39\x1f\x86\x20\x9d\x2c\x06\x5e\x36\x01\x86\xbf\xff\xfe\x30\xe0\
+\xcc\x40\x04\x00\x13\x23\xe3\xbf\xdf\x7f\x7f\x32\xa8\x0a\x1b\xed\
+\x07\x00\x00\x00\xff\xff\xa2\xc8\xe1\x8c\x8c\x0c\x0c\x7f\x7f\xff\
+\x67\xe0\x15\x60\x64\x70\x74\x97\x65\x98\xb9\x76\x31\xc3\xf6\x13\
+\x7b\x19\xd8\x58\xd9\xe0\x0e\xff\xcf\xf0\x9f\x88\xf9\x1f\xa2\xc0\
+\xff\xff\x0c\xff\x99\x98\x99\xd8\x7e\x3b\x28\x06\xcf\x02\x00\x00\
+\x00\xff\xff\xa2\x78\x82\x90\x91\x89\x81\xe1\xe7\x8f\x7f\x0c\xda\
+\x86\x3c\x0c\xf6\x3e\xc2\x0c\x69\x93\x32\x19\x66\x6c\x9a\xcf\xf0\
+\xe1\xf3\x67\x86\xff\xff\x11\x6d\x94\x6f\xbf\x3f\x33\xfc\xf9\xff\
+\x1b\xe7\xc8\x14\x0e\xd3\xff\x33\x32\x32\xfd\x63\x62\x64\xfe\xc3\
+\xc2\xc4\xfa\xfb\xfd\xf7\x57\x8c\x0e\x0a\xa1\x53\xd4\x45\x8d\x8e\
+\x03\x00\x00\x00\xff\xff\x22\xb9\x38\xc4\x05\x60\x65\xfc\xb7\xef\
+\xbf\x19\x9e\x3c\xfd\xc0\x20\x29\x20\xc5\xa0\x28\x29\xc7\xc0\xce\
+\xc6\xce\xf0\xfd\xf7\x67\x86\x8f\x3f\xde\x41\x47\xbc\x30\xd3\x36\
+\x64\x62\x16\xba\x82\x02\xba\xd8\xe0\x3f\xc3\x3f\xe6\x7f\xff\x20\
+\x0b\x1c\xfe\xfe\xfb\xfd\xef\xf7\xdf\x5f\x4c\xb6\xf2\x41\x2b\x52\
+\x4d\x5b\x62\x58\x98\x58\xfe\x02\x00\x00\x00\xff\xff\x22\x3b\x73\
+\x62\x58\xce\xc8\xc0\xf0\xe3\xfb\x5f\x06\x16\x66\x66\x06\x35\x15\
+\x31\x86\x5f\xbf\xbf\x31\xdc\xff\x78\x09\x3e\xb5\x0d\x9d\x66\xf9\
+\x0f\x59\x09\xc1\x04\x6f\xe3\xfe\x67\xf8\xc7\xfc\xf7\xdf\x5f\xc6\
+\xbf\xff\x7e\x33\xfe\xfd\xf7\x87\xe1\xef\xbf\xbf\x0c\x8c\x0c\x90\
+\x7e\x2c\x17\x2b\xdf\x17\x71\x4e\xb1\xc7\xa2\x5c\x32\xb7\xcd\x64\
+\xdc\x97\x9a\xcb\x7a\xac\x82\x0c\xb4\xff\x67\x04\x00\x00\x00\xff\
+\xff\x62\x81\xac\x7a\xf8\x4f\x95\x09\x70\x48\xf3\xfa\x3f\xc3\xcf\
+\x1f\x7f\xfe\x33\x32\xb2\xfc\xe7\x64\x65\x83\x2f\xd7\xf8\xf7\xff\
+\x2f\xf3\xdf\x7f\x7f\x18\x7f\xff\xfb\xcd\xf8\xe7\xdf\x1f\x86\x7f\
+\xff\x20\x6b\x5e\xd8\x20\x0e\xfc\x2a\xc0\x21\xff\x58\x94\x5b\xe6\
+\xb6\x24\xaf\xc2\x75\x49\x5e\xc5\xab\x92\xbc\x0a\x37\x45\xb8\xa4\
+\x1e\xf0\x71\x08\xbd\x66\x62\x64\xfe\xc7\xc0\xc0\xc0\xf0\xff\xff\
+\x3f\x26\x06\x68\xac\x00\x00\x00\x00\xff\xff\x62\xf9\xf3\xe7\x0f\
+\x03\x1b\x1b\xdb\x3f\x06\x86\xdf\x4c\x24\x25\x3f\x88\x53\xff\x33\
+\x32\x32\xa0\x85\xe0\x7f\xe6\x7f\xff\xff\x30\xfe\xfe\xfb\x8b\xf1\
+\xef\x9f\xdf\xf0\x10\x64\x61\x66\x67\xe0\x66\xe5\xfb\x2a\xc6\x21\
+\xff\x58\x94\x5b\xfa\x0e\xc4\x81\x4a\x57\x25\x78\x14\x6e\x8a\x72\
+\x4b\xdd\x47\x76\x20\x3a\x80\x2c\xc8\xf9\xcf\xc0\xc4\xc8\x0c\xcf\
+\xe5\x00\x00\x00\x00\xff\xff\x62\x11\x13\x10\x7e\xf2\xf4\xed\x73\
+\x59\x76\x66\xee\xbf\xff\xff\x33\x30\x63\x77\x3c\xe3\x7f\xa4\xc5\
+\x2e\x28\x69\x10\x11\x82\x10\x33\x59\x61\x0e\xe4\x16\x7d\x22\xca\
+\x2d\x73\x5b\x82\x57\xe1\xba\x14\xaf\xe2\x35\x09\x1e\x85\x9b\x22\
+\xdc\xd2\xf7\xf9\x39\x84\x5e\xe1\x72\xe0\xff\xff\xff\x98\xff\xc3\
+\x63\x1f\xba\x18\x81\x91\xf1\x3f\x13\x96\x21\x5b\x00\x00\x00\x00\
+\xff\xff\x62\xd9\xd3\xbf\xc1\x2e\xa4\x2e\x6e\xd3\xc5\x2b\x97\x74\
+\x59\x98\xa5\xfe\x42\x06\x53\x99\xfe\x33\x31\x22\x56\x01\xfd\xfd\
+\xff\x87\xf1\xcf\x5f\xc8\x0a\x86\xbf\xff\xa1\x21\xc8\xc4\xce\xc0\
+\xcd\xc6\xf7\x5d\x94\x43\x0e\x12\x82\x3c\x8a\xd7\x24\x79\x15\xaf\
+\x49\xf0\xca\xdf\x10\xe5\x96\xb9\xcf\xcf\x2e\xf4\x8a\x89\x09\xb7\
+\x03\xff\x41\x17\xcc\x40\x03\x05\xb2\x04\x84\x91\xe9\x2f\xb1\x91\
+\x0e\x00\x00\x00\xff\xff\x62\xfc\xff\xff\x3f\xc3\xeb\x8f\x6f\x84\
+\xbd\x4a\xa2\x37\x3f\xfe\x76\xd9\x32\x38\x46\xee\xdf\xd7\x6f\xdf\
+\x99\xfe\x33\x40\x06\x32\x59\x99\xd8\x18\xb8\x58\x79\x3f\x09\x70\
+\x88\x3d\x11\xe1\x96\xbe\x23\xc1\xa3\x70\x43\x92\x57\xe1\x9a\x38\
+\x8f\xfc\x4d\x51\x6e\xa9\x07\xfc\xec\xc2\x78\x1d\x88\x2d\x04\x89\
+\x74\x1b\x5e\x00\x00\x00\x00\xff\xff\x62\xfc\xf3\xf7\x0f\x33\x33\
+\x13\xf3\xdf\x57\xef\xde\xf3\x66\xcf\x4e\xde\x2e\xa1\xfd\x56\x4f\
+\x96\x4f\xfd\xac\x04\xaf\xc2\x75\x69\x3e\x95\x4b\x52\xbc\x8a\xd7\
+\xc4\xb8\x65\xef\x08\x70\x8a\xbe\x64\x66\x62\xc6\xde\xe2\xf9\xff\
+\x8f\xf9\x1f\xc3\x3f\x68\xc3\x96\x11\x69\xa9\x13\xd9\x9d\x78\x82\
+\x00\x00\x00\x00\xff\xff\x03\x00\x3c\x1e\x17\xa6\x18\xe4\xa8\x9e\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0b\
+\x05\x52\xbf\x27\
+\x00\x71\
+\x00\x74\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/animation/easing/form.ui b/examples/animation/easing/form.ui
new file mode 100644
index 0000000..364aebe
--- /dev/null
+++ b/examples/animation/easing/form.ui
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>545</width>
+    <height>471</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Easing curves</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0" colspan="2">
+    <widget class="QListWidget" name="easingCurvePicker">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>16777215</width>
+       <height>120</height>
+      </size>
+     </property>
+     <property name="verticalScrollBarPolicy">
+      <enum>Qt::ScrollBarAlwaysOff</enum>
+     </property>
+     <property name="movement">
+      <enum>QListView::Static</enum>
+     </property>
+     <property name="isWrapping" stdset="0">
+      <bool>false</bool>
+     </property>
+     <property name="viewMode">
+      <enum>QListView::IconMode</enum>
+     </property>
+     <property name="selectionRectVisible">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <widget class="QGroupBox" name="groupBox_2">
+       <property name="maximumSize">
+        <size>
+         <width>16777215</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="title">
+        <string>Path type</string>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_2">
+        <item row="0" column="0">
+         <widget class="QRadioButton" name="lineRadio">
+          <property name="maximumSize">
+           <size>
+            <width>16777215</width>
+            <height>40</height>
+           </size>
+          </property>
+          <property name="layoutDirection">
+           <enum>Qt::LeftToRight</enum>
+          </property>
+          <property name="text">
+           <string>Line</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </property>
+          <attribute name="buttonGroup">
+           <string>buttonGroup</string>
+          </attribute>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QRadioButton" name="circleRadio">
+          <property name="maximumSize">
+           <size>
+            <width>16777215</width>
+            <height>40</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Circle</string>
+          </property>
+          <attribute name="buttonGroup">
+           <string>buttonGroup</string>
+          </attribute>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="groupBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="title">
+        <string>Properties</string>
+       </property>
+       <layout class="QFormLayout" name="formLayout">
+        <property name="fieldGrowthPolicy">
+         <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+        </property>
+        <item row="0" column="0">
+         <widget class="QLabel" name="label">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Period</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QDoubleSpinBox" name="periodSpinBox">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="minimum">
+           <double>-1.000000000000000</double>
+          </property>
+          <property name="singleStep">
+           <double>0.100000000000000</double>
+          </property>
+          <property name="value">
+           <double>-1.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="1">
+         <widget class="QDoubleSpinBox" name="amplitudeSpinBox">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="minimum">
+           <double>-1.000000000000000</double>
+          </property>
+          <property name="singleStep">
+           <double>0.100000000000000</double>
+          </property>
+          <property name="value">
+           <double>-1.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="4" column="0">
+         <widget class="QLabel" name="label_3">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Overshoot</string>
+          </property>
+         </widget>
+        </item>
+        <item row="4" column="1">
+         <widget class="QDoubleSpinBox" name="overshootSpinBox">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="minimum">
+           <double>-1.000000000000000</double>
+          </property>
+          <property name="singleStep">
+           <double>0.100000000000000</double>
+          </property>
+          <property name="value">
+           <double>-1.000000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0">
+         <widget class="QLabel" name="label_2">
+          <property name="minimumSize">
+           <size>
+            <width>0</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Amplitude</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </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>
+    </layout>
+   </item>
+   <item row="1" column="1">
+    <widget class="QGraphicsView" name="graphicsView">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+ <buttongroups>
+  <buttongroup name="buttonGroup"/>
+ </buttongroups>
+</ui>
diff --git a/examples/animation/easing/images/qt-logo.png b/examples/animation/easing/images/qt-logo.png
new file mode 100644
index 0000000..14ddf2a
Binary files /dev/null and b/examples/animation/easing/images/qt-logo.png differ
diff --git a/examples/animation/easing/ui_form.py b/examples/animation/easing/ui_form.py
new file mode 100644
index 0000000..7ff3da5
--- /dev/null
+++ b/examples/animation/easing/ui_form.py
@@ -0,0 +1,136 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'form.ui'
+#
+# Created: Thu May  2 16:46:55 2013
+#      by: PyQt5 UI code generator snapshot-5.0-e46cc7cf20da
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.resize(545, 471)
+        self.gridLayout = QtWidgets.QGridLayout(Form)
+        self.gridLayout.setObjectName("gridLayout")
+        self.easingCurvePicker = QtWidgets.QListWidget(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.easingCurvePicker.sizePolicy().hasHeightForWidth())
+        self.easingCurvePicker.setSizePolicy(sizePolicy)
+        self.easingCurvePicker.setMaximumSize(QtCore.QSize(16777215, 120))
+        self.easingCurvePicker.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
+        self.easingCurvePicker.setMovement(QtWidgets.QListView.Static)
+        self.easingCurvePicker.setProperty("isWrapping", False)
+        self.easingCurvePicker.setViewMode(QtWidgets.QListView.IconMode)
+        self.easingCurvePicker.setSelectionRectVisible(False)
+        self.easingCurvePicker.setObjectName("easingCurvePicker")
+        self.gridLayout.addWidget(self.easingCurvePicker, 0, 0, 1, 2)
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.groupBox_2 = QtWidgets.QGroupBox(Form)
+        self.groupBox_2.setMaximumSize(QtCore.QSize(16777215, 16777215))
+        self.groupBox_2.setObjectName("groupBox_2")
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_2)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.lineRadio = QtWidgets.QRadioButton(self.groupBox_2)
+        self.lineRadio.setMaximumSize(QtCore.QSize(16777215, 40))
+        self.lineRadio.setLayoutDirection(QtCore.Qt.LeftToRight)
+        self.lineRadio.setChecked(True)
+        self.lineRadio.setObjectName("lineRadio")
+        self.buttonGroup = QtWidgets.QButtonGroup(Form)
+        self.buttonGroup.setObjectName("buttonGroup")
+        self.buttonGroup.addButton(self.lineRadio)
+        self.gridLayout_2.addWidget(self.lineRadio, 0, 0, 1, 1)
+        self.circleRadio = QtWidgets.QRadioButton(self.groupBox_2)
+        self.circleRadio.setMaximumSize(QtCore.QSize(16777215, 40))
+        self.circleRadio.setObjectName("circleRadio")
+        self.buttonGroup.addButton(self.circleRadio)
+        self.gridLayout_2.addWidget(self.circleRadio, 1, 0, 1, 1)
+        self.verticalLayout.addWidget(self.groupBox_2)
+        self.groupBox = QtWidgets.QGroupBox(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
+        self.groupBox.setSizePolicy(sizePolicy)
+        self.groupBox.setObjectName("groupBox")
+        self.formLayout = QtWidgets.QFormLayout(self.groupBox)
+        self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
+        self.formLayout.setObjectName("formLayout")
+        self.label = QtWidgets.QLabel(self.groupBox)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
+        self.label.setSizePolicy(sizePolicy)
+        self.label.setMinimumSize(QtCore.QSize(0, 30))
+        self.label.setObjectName("label")
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
+        self.periodSpinBox = QtWidgets.QDoubleSpinBox(self.groupBox)
+        self.periodSpinBox.setEnabled(False)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.periodSpinBox.sizePolicy().hasHeightForWidth())
+        self.periodSpinBox.setSizePolicy(sizePolicy)
+        self.periodSpinBox.setMinimumSize(QtCore.QSize(0, 30))
+        self.periodSpinBox.setMinimum(-1.0)
+        self.periodSpinBox.setSingleStep(0.1)
+        self.periodSpinBox.setProperty("value", -1.0)
+        self.periodSpinBox.setObjectName("periodSpinBox")
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.periodSpinBox)
+        self.amplitudeSpinBox = QtWidgets.QDoubleSpinBox(self.groupBox)
+        self.amplitudeSpinBox.setEnabled(False)
+        self.amplitudeSpinBox.setMinimumSize(QtCore.QSize(0, 30))
+        self.amplitudeSpinBox.setMinimum(-1.0)
+        self.amplitudeSpinBox.setSingleStep(0.1)
+        self.amplitudeSpinBox.setProperty("value", -1.0)
+        self.amplitudeSpinBox.setObjectName("amplitudeSpinBox")
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.amplitudeSpinBox)
+        self.label_3 = QtWidgets.QLabel(self.groupBox)
+        self.label_3.setMinimumSize(QtCore.QSize(0, 30))
+        self.label_3.setObjectName("label_3")
+        self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_3)
+        self.overshootSpinBox = QtWidgets.QDoubleSpinBox(self.groupBox)
+        self.overshootSpinBox.setEnabled(False)
+        self.overshootSpinBox.setMinimumSize(QtCore.QSize(0, 30))
+        self.overshootSpinBox.setMinimum(-1.0)
+        self.overshootSpinBox.setSingleStep(0.1)
+        self.overshootSpinBox.setProperty("value", -1.0)
+        self.overshootSpinBox.setObjectName("overshootSpinBox")
+        self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.overshootSpinBox)
+        self.label_2 = QtWidgets.QLabel(self.groupBox)
+        self.label_2.setMinimumSize(QtCore.QSize(0, 30))
+        self.label_2.setObjectName("label_2")
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_2)
+        self.verticalLayout.addWidget(self.groupBox)
+        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+        self.verticalLayout.addItem(spacerItem)
+        self.gridLayout.addLayout(self.verticalLayout, 1, 0, 1, 1)
+        self.graphicsView = QtWidgets.QGraphicsView(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.graphicsView.sizePolicy().hasHeightForWidth())
+        self.graphicsView.setSizePolicy(sizePolicy)
+        self.graphicsView.setObjectName("graphicsView")
+        self.gridLayout.addWidget(self.graphicsView, 1, 1, 1, 1)
+
+        self.retranslateUi(Form)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Easing curves"))
+        self.groupBox_2.setTitle(_translate("Form", "Path type"))
+        self.lineRadio.setText(_translate("Form", "Line"))
+        self.circleRadio.setText(_translate("Form", "Circle"))
+        self.groupBox.setTitle(_translate("Form", "Properties"))
+        self.label.setText(_translate("Form", "Period"))
+        self.label_3.setText(_translate("Form", "Overshoot"))
+        self.label_2.setText(_translate("Form", "Amplitude"))
+
diff --git a/examples/animation/moveblocks.py b/examples/animation/moveblocks.py
new file mode 100755
index 0000000..e26d48c
--- /dev/null
+++ b/examples/animation/moveblocks.py
@@ -0,0 +1,233 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QAbstractTransition, QEasingCurve, QEvent,
+        QParallelAnimationGroup, QPropertyAnimation, qrand, QRect,
+        QSequentialAnimationGroup, qsrand, QState, QStateMachine, Qt, QTime,
+        QTimer)
+from PyQt5.QtWidgets import (QApplication, QGraphicsScene, QGraphicsView,
+        QGraphicsWidget)
+
+
+class StateSwitchEvent(QEvent):
+    StateSwitchType = QEvent.User + 256
+
+    def __init__(self, rand=0):
+        super(StateSwitchEvent, self).__init__(StateSwitchEvent.StateSwitchType)
+
+        self.m_rand = rand
+
+    def rand(self):
+        return self.m_rand
+
+
+class QGraphicsRectWidget(QGraphicsWidget):
+    def paint(self, painter, option, widget):
+        painter.fillRect(self.rect(), Qt.blue)
+
+
+class StateSwitchTransition(QAbstractTransition):
+    def __init__(self, rand):
+        super(StateSwitchTransition, self).__init__()
+
+        self.m_rand = rand
+
+    def eventTest(self, event):
+        return (event.type() == StateSwitchEvent.StateSwitchType and
+                event.rand() == self.m_rand)
+
+    def onTransition(self, event):
+        pass
+
+
+class StateSwitcher(QState):
+    def __init__(self, machine):
+        super(StateSwitcher, self).__init__(machine)
+
+        self.m_stateCount = 0
+        self.m_lastIndex = 0
+
+    def onEntry(self, event):
+        n = qrand() % self.m_stateCount + 1
+        while n == self.m_lastIndex:
+            n = qrand() % self.m_stateCount + 1
+
+        self.m_lastIndex = n
+        self.machine().postEvent(StateSwitchEvent(n))
+
+    def onExit(self, event):
+        pass
+
+    def addState(self, state, animation):
+        self.m_stateCount += 1
+        trans = StateSwitchTransition(self.m_stateCount)
+        trans.setTargetState(state)
+        self.addTransition(trans)
+        trans.addAnimation(animation)
+
+
+def createGeometryState(w1, rect1, w2, rect2, w3, rect3, w4, rect4, parent):
+    result = QState(parent)
+
+    result.assignProperty(w1, 'geometry', rect1)
+    result.assignProperty(w1, 'geometry', rect1)
+    result.assignProperty(w2, 'geometry', rect2)
+    result.assignProperty(w3, 'geometry', rect3)
+    result.assignProperty(w4, 'geometry', rect4)
+
+    return result
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    button1 = QGraphicsRectWidget()
+    button2 = QGraphicsRectWidget()
+    button3 = QGraphicsRectWidget()
+    button4 = QGraphicsRectWidget()
+    button2.setZValue(1)
+    button3.setZValue(2)
+    button4.setZValue(3)
+
+    scene = QGraphicsScene(0, 0, 300, 300)
+    scene.setBackgroundBrush(Qt.black)
+    scene.addItem(button1)
+    scene.addItem(button2)
+    scene.addItem(button3)
+    scene.addItem(button4)
+
+    window = QGraphicsView(scene)
+    window.setFrameStyle(0)
+    window.setAlignment(Qt.AlignLeft | Qt.AlignTop)
+    window.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+    window.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+
+    machine = QStateMachine()
+
+    group = QState()
+    timer = QTimer()
+    timer.setInterval(1250)
+    timer.setSingleShot(True)
+    group.entered.connect(timer.start)
+
+    state1 = createGeometryState(button1, QRect(100, 0, 50, 50), button2,
+            QRect(150, 0, 50, 50), button3, QRect(200, 0, 50, 50), button4,
+            QRect(250, 0, 50, 50), group)
+
+    state2 = createGeometryState(button1, QRect(250, 100, 50, 50), button2,
+            QRect(250, 150, 50, 50), button3, QRect(250, 200, 50, 50), button4,
+            QRect(250, 250, 50, 50), group)
+
+    state3 = createGeometryState(button1, QRect(150, 250, 50, 50), button2,
+            QRect(100, 250, 50, 50), button3, QRect(50, 250, 50, 50), button4,
+            QRect(0, 250, 50, 50), group)
+
+    state4 = createGeometryState(button1, QRect(0, 150, 50, 50), button2,
+            QRect(0, 100, 50, 50), button3, QRect(0, 50, 50, 50), button4,
+            QRect(0, 0, 50, 50), group)
+
+    state5 = createGeometryState(button1, QRect(100, 100, 50, 50), button2,
+            QRect(150, 100, 50, 50), button3, QRect(100, 150, 50, 50), button4,
+            QRect(150, 150, 50, 50), group)
+
+    state6 = createGeometryState(button1, QRect(50, 50, 50, 50), button2,
+            QRect(200, 50, 50, 50), button3, QRect(50, 200, 50, 50), button4,
+            QRect(200, 200, 50, 50), group)
+
+    state7 = createGeometryState(button1, QRect(0, 0, 50, 50), button2,
+            QRect(250, 0, 50, 50), button3, QRect(0, 250, 50, 50), button4,
+            QRect(250, 250, 50, 50), group)
+
+    group.setInitialState(state1)
+
+    animationGroup = QParallelAnimationGroup()
+    anim = QPropertyAnimation(button4, 'geometry')
+    anim.setDuration(1000)
+    anim.setEasingCurve(QEasingCurve.OutElastic)
+    animationGroup.addAnimation(anim)
+
+    subGroup = QSequentialAnimationGroup(animationGroup)
+    subGroup.addPause(100)
+    anim = QPropertyAnimation(button3, 'geometry')
+    anim.setDuration(1000)
+    anim.setEasingCurve(QEasingCurve.OutElastic)
+    subGroup.addAnimation(anim)
+
+    subGroup = QSequentialAnimationGroup(animationGroup)
+    subGroup.addPause(150)
+    anim = QPropertyAnimation(button2, 'geometry')
+    anim.setDuration(1000)
+    anim.setEasingCurve(QEasingCurve.OutElastic)
+    subGroup.addAnimation(anim)
+
+    subGroup = QSequentialAnimationGroup(animationGroup)
+    subGroup.addPause(200)
+    anim = QPropertyAnimation(button1, 'geometry')
+    anim.setDuration(1000)
+    anim.setEasingCurve(QEasingCurve.OutElastic)
+    subGroup.addAnimation(anim)
+
+    stateSwitcher = StateSwitcher(machine)
+    group.addTransition(timer.timeout, stateSwitcher)
+    stateSwitcher.addState(state1, animationGroup)
+    stateSwitcher.addState(state2, animationGroup)
+    stateSwitcher.addState(state3, animationGroup)
+    stateSwitcher.addState(state4, animationGroup)
+    stateSwitcher.addState(state5, animationGroup)
+    stateSwitcher.addState(state6, animationGroup)
+    stateSwitcher.addState(state7, animationGroup)
+
+    machine.addState(group)
+    machine.setInitialState(group)
+    machine.start()
+
+    window.resize(300, 300)
+    window.show()
+
+    qsrand(QTime(0, 0, 0).secsTo(QTime.currentTime()))
+
+    sys.exit(app.exec_())
diff --git a/examples/animation/states/accessories-dictionary.png b/examples/animation/states/accessories-dictionary.png
new file mode 100644
index 0000000..e9bd55d
Binary files /dev/null and b/examples/animation/states/accessories-dictionary.png differ
diff --git a/examples/animation/states/akregator.png b/examples/animation/states/akregator.png
new file mode 100644
index 0000000..a086f45
Binary files /dev/null and b/examples/animation/states/akregator.png differ
diff --git a/examples/animation/states/digikam.png b/examples/animation/states/digikam.png
new file mode 100644
index 0000000..9de9fb2
Binary files /dev/null and b/examples/animation/states/digikam.png differ
diff --git a/examples/animation/states/help-browser.png b/examples/animation/states/help-browser.png
new file mode 100644
index 0000000..db92faa
Binary files /dev/null and b/examples/animation/states/help-browser.png differ
diff --git a/examples/animation/states/k3b.png b/examples/animation/states/k3b.png
new file mode 100644
index 0000000..bbcafcf
Binary files /dev/null and b/examples/animation/states/k3b.png differ
diff --git a/examples/animation/states/kchart.png b/examples/animation/states/kchart.png
new file mode 100644
index 0000000..1dd115b
Binary files /dev/null and b/examples/animation/states/kchart.png differ
diff --git a/examples/animation/states/states.py b/examples/animation/states/states.py
new file mode 100755
index 0000000..dde1428
--- /dev/null
+++ b/examples/animation/states/states.py
@@ -0,0 +1,272 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QPointF, QPropertyAnimation, QRect, QRectF,
+        QSequentialAnimationGroup, QSizeF, QState, QStateMachine, Qt)
+from PyQt5.QtGui import QPixmap
+from PyQt5.QtWidgets import (QApplication, QGraphicsLinearLayout,
+        QGraphicsObject, QGraphicsProxyWidget, QGraphicsScene, QGraphicsView,
+        QGraphicsWidget, QGroupBox, QPushButton, QRadioButton, QTextEdit,
+        QVBoxLayout)
+
+import states_rc
+
+
+class Pixmap(QGraphicsObject):
+    def __init__(self, pix):
+        super(Pixmap, self).__init__()
+
+        self.p = QPixmap(pix)
+
+    def paint(self, painter, option, widget):
+        painter.drawPixmap(QPointF(), self.p)
+
+    def boundingRect(self):
+        return QRectF(QPointF(0, 0), QSizeF(self.p.size()))
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    # Text edit and button.
+    edit = QTextEdit()
+    edit.setText("asdf lkjha yuoiqwe asd iuaysd u iasyd uiy "
+                 "asdf lkjha yuoiqwe asd iuaysd u iasyd uiy "
+                 "asdf lkjha yuoiqwe asd iuaysd u iasyd uiy "
+                 "asdf lkjha yuoiqwe asd iuaysd u iasyd uiy!")
+
+    button = QPushButton()
+    buttonProxy = QGraphicsProxyWidget()
+    buttonProxy.setWidget(button)
+    editProxy = QGraphicsProxyWidget()
+    editProxy.setWidget(edit)
+
+    box = QGroupBox()
+    box.setFlat(True)
+    box.setTitle("Options")
+
+    layout2 = QVBoxLayout()
+    box.setLayout(layout2)
+    layout2.addWidget(QRadioButton("Herring"))
+    layout2.addWidget(QRadioButton("Blue Parrot"))
+    layout2.addWidget(QRadioButton("Petunias"))
+    layout2.addStretch()
+
+    boxProxy = QGraphicsProxyWidget()
+    boxProxy.setWidget(box)
+
+    # Parent widget.
+    widget = QGraphicsWidget()
+    layout = QGraphicsLinearLayout(Qt.Vertical, widget)
+    layout.addItem(editProxy)
+    layout.addItem(buttonProxy)
+    widget.setLayout(layout)
+
+    p1 = Pixmap(QPixmap(':/digikam.png'))
+    p2 = Pixmap(QPixmap(':/akregator.png'))
+    p3 = Pixmap(QPixmap(':/accessories-dictionary.png'))
+    p4 = Pixmap(QPixmap(':/k3b.png'))
+    p5 = Pixmap(QPixmap(':/help-browser.png'))
+    p6 = Pixmap(QPixmap(':/kchart.png'))
+
+    scene = QGraphicsScene(0, 0, 400, 300)
+    scene.setBackgroundBrush(scene.palette().window())
+    scene.addItem(widget)
+    scene.addItem(boxProxy)
+    scene.addItem(p1)
+    scene.addItem(p2)
+    scene.addItem(p3)
+    scene.addItem(p4)
+    scene.addItem(p5)
+    scene.addItem(p6)
+
+    machine = QStateMachine()
+    state1 = QState(machine)
+    state2 = QState(machine)
+    state3 = QState(machine)
+    machine.setInitialState(state1)
+
+    # State 1.
+    state1.assignProperty(button, 'text', "Switch to state 2")
+    state1.assignProperty(widget, 'geometry', QRectF(0, 0, 400, 150))
+    state1.assignProperty(box, 'geometry', QRect(-200, 150, 200, 150))
+    state1.assignProperty(p1, 'pos', QPointF(68, 185))
+    state1.assignProperty(p2, 'pos', QPointF(168, 185))
+    state1.assignProperty(p3, 'pos', QPointF(268, 185))
+    state1.assignProperty(p4, 'pos', QPointF(68 - 150, 48 - 150))
+    state1.assignProperty(p5, 'pos', QPointF(168, 48 - 150))
+    state1.assignProperty(p6, 'pos', QPointF(268 + 150, 48 - 150))
+    state1.assignProperty(p1, 'rotation', 0.0)
+    state1.assignProperty(p2, 'rotation', 0.0)
+    state1.assignProperty(p3, 'rotation', 0.0)
+    state1.assignProperty(p4, 'rotation', -270.0)
+    state1.assignProperty(p5, 'rotation', -90.0)
+    state1.assignProperty(p6, 'rotation', 270.0)
+    state1.assignProperty(boxProxy, 'opacity', 0.0)
+    state1.assignProperty(p1, 'opacity', 1.0)
+    state1.assignProperty(p2, 'opacity', 1.0)
+    state1.assignProperty(p3, 'opacity', 1.0)
+    state1.assignProperty(p4, 'opacity', 0.0)
+    state1.assignProperty(p5, 'opacity', 0.0)
+    state1.assignProperty(p6, 'opacity', 0.0)
+
+    # State 2.
+    state2.assignProperty(button, 'text', "Switch to state 3")
+    state2.assignProperty(widget, 'geometry', QRectF(200, 150, 200, 150))
+    state2.assignProperty(box, 'geometry', QRect(9, 150, 190, 150))
+    state2.assignProperty(p1, 'pos', QPointF(68 - 150, 185 + 150))
+    state2.assignProperty(p2, 'pos', QPointF(168, 185 + 150))
+    state2.assignProperty(p3, 'pos', QPointF(268 + 150, 185 + 150))
+    state2.assignProperty(p4, 'pos', QPointF(64, 48))
+    state2.assignProperty(p5, 'pos', QPointF(168, 48))
+    state2.assignProperty(p6, 'pos', QPointF(268, 48))
+    state2.assignProperty(p1, 'rotation', -270.0)
+    state2.assignProperty(p2, 'rotation', 90.0)
+    state2.assignProperty(p3, 'rotation', 270.0)
+    state2.assignProperty(p4, 'rotation', 0.0)
+    state2.assignProperty(p5, 'rotation', 0.0)
+    state2.assignProperty(p6, 'rotation', 0.0)
+    state2.assignProperty(boxProxy, 'opacity', 1.0)
+    state2.assignProperty(p1, 'opacity', 0.0)
+    state2.assignProperty(p2, 'opacity', 0.0)
+    state2.assignProperty(p3, 'opacity', 0.0)
+    state2.assignProperty(p4, 'opacity', 1.0)
+    state2.assignProperty(p5, 'opacity', 1.0)
+    state2.assignProperty(p6, 'opacity', 1.0)
+
+    # State 3.
+    state3.assignProperty(button, 'text', "Switch to state 1")
+    state3.assignProperty(p1, 'pos', QPointF(0, 5))
+    state3.assignProperty(p2, 'pos', QPointF(0, 5 + 64 + 5))
+    state3.assignProperty(p3, 'pos', QPointF(5, 5 + (64 + 5) + 64))
+    state3.assignProperty(p4, 'pos', QPointF(5 + 64 + 5, 5))
+    state3.assignProperty(p5, 'pos', QPointF(5 + 64 + 5, 5 + 64 + 5))
+    state3.assignProperty(p6, 'pos', QPointF(5 + 64 + 5, 5 + (64 + 5) + 64))
+    state3.assignProperty(widget, 'geometry', QRectF(138, 5, 400 - 138, 200))
+    state3.assignProperty(box, 'geometry', QRect(5, 205, 400, 90))
+    state3.assignProperty(p1, 'opacity', 1.0)
+    state3.assignProperty(p2, 'opacity', 1.0)
+    state3.assignProperty(p3, 'opacity', 1.0)
+    state3.assignProperty(p4, 'opacity', 1.0)
+    state3.assignProperty(p5, 'opacity', 1.0)
+    state3.assignProperty(p6, 'opacity', 1.0)
+
+    t1 = state1.addTransition(button.clicked, state2)
+    animation1SubGroup = QSequentialAnimationGroup()
+    animation1SubGroup.addPause(250)
+    animation1SubGroup.addAnimation(QPropertyAnimation(box, 'geometry', state1))
+    t1.addAnimation(animation1SubGroup)
+    t1.addAnimation(QPropertyAnimation(widget, 'geometry', state1))
+    t1.addAnimation(QPropertyAnimation(p1, 'pos', state1))
+    t1.addAnimation(QPropertyAnimation(p2, 'pos', state1))
+    t1.addAnimation(QPropertyAnimation(p3, 'pos', state1))
+    t1.addAnimation(QPropertyAnimation(p4, 'pos', state1))
+    t1.addAnimation(QPropertyAnimation(p5, 'pos', state1))
+    t1.addAnimation(QPropertyAnimation(p6, 'pos', state1))
+    t1.addAnimation(QPropertyAnimation(p1, 'rotation', state1))
+    t1.addAnimation(QPropertyAnimation(p2, 'rotation', state1))
+    t1.addAnimation(QPropertyAnimation(p3, 'rotation', state1))
+    t1.addAnimation(QPropertyAnimation(p4, 'rotation', state1))
+    t1.addAnimation(QPropertyAnimation(p5, 'rotation', state1))
+    t1.addAnimation(QPropertyAnimation(p6, 'rotation', state1))
+    t1.addAnimation(QPropertyAnimation(p1, 'opacity', state1))
+    t1.addAnimation(QPropertyAnimation(p2, 'opacity', state1))
+    t1.addAnimation(QPropertyAnimation(p3, 'opacity', state1))
+    t1.addAnimation(QPropertyAnimation(p4, 'opacity', state1))
+    t1.addAnimation(QPropertyAnimation(p5, 'opacity', state1))
+    t1.addAnimation(QPropertyAnimation(p6, 'opacity', state1))
+
+    t2 = state2.addTransition(button.clicked, state3)
+    t2.addAnimation(QPropertyAnimation(box, 'geometry', state2))
+    t2.addAnimation(QPropertyAnimation(widget, 'geometry', state2))
+    t2.addAnimation(QPropertyAnimation(p1, 'pos', state2))
+    t2.addAnimation(QPropertyAnimation(p2, 'pos', state2))
+    t2.addAnimation(QPropertyAnimation(p3, 'pos', state2))
+    t2.addAnimation(QPropertyAnimation(p4, 'pos', state2))
+    t2.addAnimation(QPropertyAnimation(p5, 'pos', state2))
+    t2.addAnimation(QPropertyAnimation(p6, 'pos', state2))
+    t2.addAnimation(QPropertyAnimation(p1, 'rotation', state2))
+    t2.addAnimation(QPropertyAnimation(p2, 'rotation', state2))
+    t2.addAnimation(QPropertyAnimation(p3, 'rotation', state2))
+    t2.addAnimation(QPropertyAnimation(p4, 'rotation', state2))
+    t2.addAnimation(QPropertyAnimation(p5, 'rotation', state2))
+    t2.addAnimation(QPropertyAnimation(p6, 'rotation', state2))
+    t2.addAnimation(QPropertyAnimation(p1, 'opacity', state2))
+    t2.addAnimation(QPropertyAnimation(p2, 'opacity', state2))
+    t2.addAnimation(QPropertyAnimation(p3, 'opacity', state2))
+    t2.addAnimation(QPropertyAnimation(p4, 'opacity', state2))
+    t2.addAnimation(QPropertyAnimation(p5, 'opacity', state2))
+    t2.addAnimation(QPropertyAnimation(p6, 'opacity', state2))
+
+    t3 = state3.addTransition(button.clicked, state1)
+    t3.addAnimation(QPropertyAnimation(box, 'geometry', state3))
+    t3.addAnimation(QPropertyAnimation(widget, 'geometry', state3))
+    t3.addAnimation(QPropertyAnimation(p1, 'pos', state3))
+    t3.addAnimation(QPropertyAnimation(p2, 'pos', state3))
+    t3.addAnimation(QPropertyAnimation(p3, 'pos', state3))
+    t3.addAnimation(QPropertyAnimation(p4, 'pos', state3))
+    t3.addAnimation(QPropertyAnimation(p5, 'pos', state3))
+    t3.addAnimation(QPropertyAnimation(p6, 'pos', state3))
+    t3.addAnimation(QPropertyAnimation(p1, 'rotation', state3))
+    t3.addAnimation(QPropertyAnimation(p2, 'rotation', state3))
+    t3.addAnimation(QPropertyAnimation(p3, 'rotation', state3))
+    t3.addAnimation(QPropertyAnimation(p4, 'rotation', state3))
+    t3.addAnimation(QPropertyAnimation(p5, 'rotation', state3))
+    t3.addAnimation(QPropertyAnimation(p6, 'rotation', state3))
+    t3.addAnimation(QPropertyAnimation(p1, 'opacity', state3))
+    t3.addAnimation(QPropertyAnimation(p2, 'opacity', state3))
+    t3.addAnimation(QPropertyAnimation(p3, 'opacity', state3))
+    t3.addAnimation(QPropertyAnimation(p4, 'opacity', state3))
+    t3.addAnimation(QPropertyAnimation(p5, 'opacity', state3))
+    t3.addAnimation(QPropertyAnimation(p6, 'opacity', state3))
+
+    machine.start()
+
+    view = QGraphicsView(scene)
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/animation/states/states.qrc b/examples/animation/states/states.qrc
new file mode 100644
index 0000000..60ab3f7
--- /dev/null
+++ b/examples/animation/states/states.qrc
@@ -0,0 +1,10 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>accessories-dictionary.png</file>
+    <file>akregator.png</file>
+    <file>digikam.png</file>
+    <file>help-browser.png</file>
+    <file>k3b.png</file>
+    <file>kchart.png</file>
+</qresource>
+</RCC>
diff --git a/examples/animation/states/states_rc.py b/examples/animation/states/states_rc.py
new file mode 100644
index 0000000..cdf5db3
--- /dev/null
+++ b/examples/animation/states/states_rc.py
@@ -0,0 +1,2180 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Thu May 2 17:13:38 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x15\x14\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\
+\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x14\x91\x49\x44\
+\x41\x54\x78\xda\xe5\x5b\x79\x8c\x64\xc5\x7d\xfe\xbd\xa3\x8f\xe9\
+\xee\x39\x76\xa6\x97\xdd\xb9\x96\x3d\x66\x61\xef\x05\x61\x6c\xae\
+\xa0\x38\xb6\x20\x4e\x2c\x22\x27\x32\x09\x92\x0f\x14\x20\xc6\x81\
+\x18\x84\x92\x08\x59\x8a\x30\x7f\x18\x04\x09\xe0\xf8\x08\x47\x24\
+\xa2\x24\x76\x14\x9b\x80\xf3\x4f\x0e\x27\x86\x80\xc3\x61\x60\x31\
+\xe6\xb0\x21\xbb\xec\xb2\xf7\xce\xf4\x4c\xcf\xf4\xdd\xfd\xae\xaa\
+\x7c\xbf\x7a\x5d\xf3\xfa\x98\x49\xef\xb4\x90\x65\x29\x65\x7d\x54\
+\xbd\x7a\x47\xd7\xf7\xbb\xab\x66\x6d\x48\x29\xe9\xff\x73\xb3\xe9\
+\x97\xb8\xbd\x74\xed\xb5\x03\x9e\xeb\x66\x09\xf0\x84\x18\x23\xe9\
+\x67\xa5\x2f\xb3\x42\x88\xac\x14\x18\x63\x4e\x04\x22\x2d\xfd\xe0\
+\xdf\x7f\xf3\x95\x57\xfe\x8a\xfa\x68\xbf\x30\x0b\x78\xef\x4b\x5f\
+\x4a\x54\x3d\x2f\xeb\x48\x37\x6b\xf8\x41\x96\x04\x88\x04\x04\x02\
+\x41\x56\x92\xc8\x52\x20\x43\x52\x52\x8c\xc9\x40\xe0\x9e\x60\x82\
+\x29\x89\x87\x70\x4d\x18\x87\x08\x02\x12\xd1\xb8\xd9\x8b\xc6\x46\
+\x21\x86\x2e\x3a\x70\xc0\xfb\x85\x58\xc0\xcf\xef\xbe\x3b\x6e\xd5\
+\x6a\x59\xd7\xf3\xc6\x4c\xc3\xc8\x0a\x62\x12\x06\x2f\x18\x3d\x8d\
+\x19\x22\xc8\x0a\x49\x59\x92\x4c\x42\x86\x7d\x20\xd3\x20\x47\x06\
+\x6e\xa0\x03\xd0\xf3\x80\x00\x26\x21\x19\x12\x64\x00\xdc\x23\xd9\
+\x84\x7a\xae\x1d\xb4\x0c\xd2\x73\xc9\x63\x52\xee\xbc\x88\xe8\xcd\
+\x0f\x44\x00\xef\xdc\x79\xe7\xed\xe5\xb8\xbd\x29\x79\xe2\xe4\x88\
+\xb1\x6e\x24\x26\x0d\xca\x1a\x64\x8c\x11\x48\x12\x49\x80\x06\x7d\
+\xe2\x26\xa1\x38\xee\x42\x32\x7a\x61\x22\xec\x43\xed\xf0\x98\xfb\
+\xe6\x75\x04\xb9\x32\xa4\x86\x88\xde\xd7\x08\xaf\x43\x88\xf6\xdf\
+\x34\xa4\x7f\x01\x7d\x10\x02\x78\xec\xc2\x0b\xbf\x72\xc5\x95\x97\
+\xdf\xe5\x98\x43\x94\x1a\x18\xa0\x40\x88\x90\xaa\xc1\xff\x55\xff\
+\xa1\x50\xf4\x7a\x28\xc3\x61\xa4\x9d\x88\x74\x34\x56\xef\x5a\xa9\
+\x34\x05\x8d\x3a\x5c\x99\xcd\xda\x65\x33\x50\x30\x63\x36\xe6\x1b\
+\xe1\xb5\xd0\xc4\xf1\x46\x32\x41\xa4\x85\x55\xa9\xb4\x0b\xa3\xc3\
+\x2a\x84\x30\x2e\x30\x0c\xe3\xef\x25\x5a\x5f\x02\x30\xd0\xee\x98\
+\x9e\x4e\xce\x0c\x0f\xdf\x5e\x2f\x95\xa9\x54\x2c\x53\x76\x7c\x9c\
+\xfc\x72\x89\xc8\x34\x69\xb5\x66\x26\x12\x24\xea\xf5\x48\x10\xe1\
+\xe2\x99\x8c\xd6\x54\x48\xcc\x60\x01\x0c\xa0\xc7\x3b\x98\x0b\x6a\
+\xfc\xb2\xa5\xe6\xfc\x5a\x83\xac\xc1\x21\xf4\x35\xb2\x86\x06\xc9\
+\xcd\xcd\x13\xa5\x53\xca\xf7\x85\x03\xc1\x60\x5e\x13\xee\xd6\xbe\
+\xb6\x00\xb1\xbf\xa9\xa1\xb5\x0b\x80\xc9\xf3\x72\x3c\xa2\x6d\x41\
+\x10\x0c\xd7\xf0\x83\x85\xa5\x22\xc5\x76\xee\xa4\x5a\x6e\x8e\xcc\
+\x64\x52\x4b\x49\x6b\x5d\x75\xf1\x6c\x96\xbc\x42\x81\x12\x1b\x36\
+\x52\x50\xad\x84\x6b\xf1\x3d\x32\x62\x31\xe2\x4f\x06\x9e\x47\xd6\
+\x40\x4a\x09\xa8\x31\x3f\xaf\x34\xeb\xd7\x41\x36\x99\xc4\x3b\x1b\
+\xc8\xc9\xe5\x48\xb2\x65\xc0\xd2\xbc\x7a\x95\xc8\x32\xc9\xaf\xd6\
+\xc8\x84\x50\x02\xd7\xa3\x00\xe4\xf9\x5d\xe9\xba\x91\xf6\x05\xf7\
+\x1d\xae\x80\x1e\x2a\xda\xcb\x2b\xec\xd7\x05\x0c\x20\x31\x57\xaf\
+\xaf\x9f\x49\xa5\xa8\x86\x1f\x75\xaa\x55\xb2\x86\x47\x28\x60\xe9\
+\xc7\xe2\x78\xa2\xfd\xeb\x12\x30\x2c\x1b\x8b\x74\x48\xb8\x0e\x34\
+\x08\xcd\x2d\x2c\x28\x72\x36\xb4\xe9\x2c\x2e\xc2\xb4\xe3\xea\x9e\
+\xa4\xd0\xff\xb5\x00\xdd\xa5\x25\x08\x6e\x89\x04\x5c\x21\x58\x2a\
+\x34\x4d\xbe\x33\x3e\x04\xaa\x27\xdb\xc2\x37\xbc\xe8\x9e\xd4\x71\
+\xa5\x45\x18\x00\xfe\xb3\xfe\x9b\xdb\xb7\x8f\x43\xf0\xa7\xd6\xe2\
+\x06\x76\x53\xfb\x16\x90\x2e\x04\xc1\x04\x07\xb0\x06\xfc\x31\x33\
+\x98\x21\x7b\xdd\x08\x49\x98\xa7\x1c\x0c\x34\xe9\xb6\xe6\x2c\xcc\
+\x2b\xc2\x0d\x68\xd2\x4a\x24\x95\x86\xdc\x52\x99\x4d\x5b\x49\xab\
+\x7e\xfa\x54\x4b\x1c\x90\x54\x3b\x71\x42\xbb\x84\x26\xda\x41\x5e\
+\x32\xda\xef\x35\x7c\xfd\x8d\x2e\x17\x00\xda\x2c\x63\x90\x88\x03\
+\xe1\xa9\x7e\x2c\xc0\x04\x52\xae\x54\x45\x06\x39\x8e\x4b\xe7\x6c\
+\x9f\x21\xd7\x07\x71\x19\xe6\xdb\x95\x4c\xc0\x87\x95\xe8\x00\x28\
+\x3c\x8f\x47\xa1\x99\x57\xca\xad\x01\x31\x22\x2d\x23\x82\x3a\x4b\
+\x44\x02\x88\xae\x89\xc1\xf9\xde\xf7\x29\xf0\xb9\xf7\xd4\xd8\xc7\
+\x98\x94\xba\x2c\x32\x01\xb8\x5a\x28\x6c\xdc\x93\x58\x0b\xc8\xec\
+\xc3\xdd\x7f\xe9\x57\x00\x31\x43\xca\x14\x2f\xd2\x81\xcf\x4d\xcf\
+\x6c\xa3\xea\x7c\x8e\xcc\x78\x3c\x5c\x54\x77\xd3\xe4\xa3\x6c\xa0\
+\x53\x22\xe9\x34\x18\x09\x81\x05\x20\x02\xc1\x71\x21\x04\x2f\x1a\
+\x40\xaf\x82\xac\x61\x59\x80\x0d\x60\x8c\xdf\x34\x6c\x9b\x6c\xcc\
+\xc7\x00\xa4\x60\xf0\xe4\x9e\xf8\x79\x95\x31\x82\x3a\xe0\x38\xe1\
+\x98\xdd\x8c\xb3\x89\x94\xfb\x74\x20\xec\x27\x0d\x9a\xf0\xd1\x18\
+\x2f\xd6\xf3\x7c\x15\x7c\x2a\xe5\x1a\x0d\x20\x1a\x3b\xda\x02\xba\
+\x9a\x04\x09\x90\x0a\x3c\x28\xc1\x67\x2b\x08\xb5\x16\x04\x4c\x46\
+\x91\xb0\x00\xee\xc9\x8e\x21\x63\x58\xb8\xb6\xe0\xd6\x36\x00\xc2\
+\x26\x60\x19\xca\xc7\x03\xfc\x9e\xd0\x84\x18\xd0\xa8\xaf\x2d\xa4\
+\x37\x94\x0b\x58\x3a\x10\xf6\x15\x04\x81\x79\xdf\x2f\xa2\x57\x64\
+\x3c\x04\xb1\x52\xb5\x4e\x83\x08\x84\x8d\xc5\x3c\xd5\x0a\x45\x12\
+\x2c\xa5\x78\x8c\x4d\x4f\x59\x86\x65\xa1\xcf\xc4\xc8\x42\xb0\x8b\
+\xc7\x98\x5c\x1c\x81\x2f\xd4\xa2\x6c\x92\x11\x8a\x90\x43\x3e\x7a\
+\x59\x87\x90\x9a\xe6\xee\xb7\xb9\x40\x38\xa6\x68\xdc\x01\xd9\x1b\
+\x52\x32\x89\xed\x9f\xdb\xb0\x21\x89\xb0\x56\x93\x68\x6b\x2e\x84\
+\xde\xaf\xd7\x17\xf1\x96\xd2\x60\xad\x5c\xa6\x42\x2e\x4f\xe7\x5e\
+\x3c\x4d\xf2\xd4\x29\x1a\xdb\xb5\x8b\xcd\x34\x24\xa5\xc9\xb9\x0e\
+\x08\x42\x73\x24\x55\x40\xf6\xa8\xc5\x0d\x80\xee\x9e\xc9\x74\x8e\
+\x55\xdf\x4d\x3e\x22\x06\x88\xff\x1b\x62\x19\xb1\xcb\xe2\xf1\xdd\
+\x7f\x47\xf4\x6a\x3f\x2e\x20\xab\x41\xe0\xba\x42\xa0\x0b\xd2\xb5\
+\x5a\x9d\x4a\x88\xee\xf6\xc8\x88\xd2\x62\xf5\xd8\x51\x8a\x9a\xe2\
+\xd4\x51\x15\x46\xe4\x69\x45\x41\x88\x96\xba\xbe\x83\xb0\x5c\x51\
+\x00\x6d\xe4\x68\x19\xb2\x1b\x32\x42\xd2\x90\xfb\xa9\x0f\x01\x48\
+\x40\x00\x7e\x2d\x08\x0a\x83\x42\xa4\x51\x0b\xf0\x02\xb8\x16\x50\
+\x5a\x36\x06\x92\xd4\x91\x06\xda\x3b\x29\xb5\x30\x34\xe9\xae\x80\
+\xa8\x02\x2c\x4a\xda\x0a\xfc\x7b\xdd\xd8\xd8\xea\xfb\x85\x8e\x31\
+\x45\xa6\xde\x91\x39\xba\x61\x0a\xc4\x81\x35\x34\xb3\x85\x8d\x0f\
+\x78\x2c\x00\x5d\x0b\xf0\x22\x25\x07\x31\x21\x9b\x5b\xd2\x20\x44\
+\xc0\x10\xcb\x73\x22\xda\x96\x02\x3c\x0e\xaf\x45\x73\x4e\x00\x7c\
+\x5d\x02\xf9\xe9\xcf\x5f\x4f\x57\x3d\xf1\x4f\x3d\x82\x5a\x07\xf9\
+\x88\xb4\x86\x16\x52\x17\x8c\x30\x15\x9a\x6b\xb2\x00\xad\x7d\xc0\
+\xad\x0a\xb1\x14\xd6\x02\x1e\x4d\xef\xdd\x4d\xd5\x85\x79\x15\xf0\
+\x7c\xd1\x91\x09\xb4\xb6\xa3\xb1\x4a\x51\x25\x54\x83\x23\xe7\x9c\
+\xb3\xe2\x26\xe9\x43\xbf\xf3\xdb\x34\x75\xc3\x0d\x61\x4e\xe7\x32\
+\xd9\x30\x75\x31\x13\x91\x6d\x89\x0d\xb4\x7a\xb1\xc4\x58\xd9\x02\
+\xa4\x54\x99\xa0\x1f\x0b\xf0\x00\xa7\xe4\xfb\x0b\x4a\x00\xae\x4b\
+\xe3\x5b\x36\x43\x00\x79\xb2\x32\x19\x12\x5a\xbb\x80\x50\x50\x1a\
+\x6e\x5a\x44\xd8\xdb\xdb\x66\xe8\x23\x7f\xf9\x75\xf2\x38\x40\x0a\
+\xfd\x7c\x84\xc3\xdf\xfd\x2e\xcd\x7e\xff\x29\x32\x6d\x9b\x2b\x47\
+\x6d\x29\xcd\xf7\x57\x44\x37\xf9\xd5\xef\xeb\xc0\x34\x7a\xcf\xc6\
+\x8d\x53\x06\xda\x59\x09\x40\xa2\xb5\xb8\x80\x5b\xf4\xfd\xbc\x4e\
+\x85\x41\xb1\x48\x65\x04\xc2\xf8\xc8\x3a\x6d\xd2\x0a\x32\x22\x17\
+\xb9\x01\xfa\x0b\xef\xb8\x83\x26\x2e\xbb\x8c\xec\x89\xc9\xe5\xc5\
+\x89\x96\xde\x01\xe9\xd2\x1b\x3f\x25\x6e\x89\xb1\x51\x7d\xef\x2c\
+\xd1\xed\x0a\xd1\x39\x41\xd8\x8b\x26\x91\x75\xa6\xb9\xbf\x1f\x0b\
+\x08\x00\x37\x1f\x04\xf3\x4d\x01\xe0\x22\x4f\xc5\x33\x67\x38\x13\
+\x70\x5e\x6f\xd7\xa8\x5e\x8c\xb6\x06\x3c\x9f\xc0\x73\xdc\xce\xbf\
+\xe9\x26\x65\x05\xd1\xf3\x91\x96\x1b\xc7\x4f\x10\xb7\xf4\x94\x12\
+\x92\x16\x60\x6f\xd2\x00\xbb\x4d\x19\xbb\x4f\x07\x75\x48\xd5\x0f\
+\xa8\x5c\xa9\x44\xf7\x23\x22\xaa\x24\xee\x27\x0b\x28\x01\x9c\x74\
+\xdd\x39\x2d\x80\x4a\xa5\x4a\x65\x6c\x63\xed\x4b\x2f\x21\x62\x01\
+\x74\x58\x95\x6c\x19\xc7\xb0\x71\x5a\x78\xe6\x69\x4a\xc2\x5d\x26\
+\x7f\xfd\x13\xf4\xf3\x8d\xe3\x24\x72\xf8\x54\x47\x3d\x50\x9f\x3b\
+\x43\xdc\x52\x9b\x36\x93\xfc\xef\xe7\x95\xf6\x3c\xc7\x51\xd6\x60\
+\x59\x5c\x8c\x1a\x51\x0c\x68\xf1\x7f\xc7\xb2\x69\xc7\xcd\x37\xd3\
+\xf8\xee\xdd\x94\x9a\x9c\xa0\x81\x2d\x5b\xa8\x84\xcd\xd5\x0f\xaf\
+\xba\x5a\x0b\x40\x5b\x00\x7f\xe3\xac\x4b\x62\xb3\x23\x0d\x7a\x67\
+\x1c\x27\x1f\x80\x3f\x2f\x88\x53\x61\x65\x69\x29\xac\x05\x5c\x57\
+\xbb\xc0\x8a\xae\x30\xb8\x65\x2b\x15\x5f\x7f\x8d\xe6\xfe\xfa\x51\
+\xe2\xb6\xeb\xd6\x5b\x61\x05\x4e\x97\x1b\x94\x17\xf2\xaa\x64\x4e\
+\xcf\xcc\x50\x15\x5b\xe1\x7a\x22\x41\x9b\x10\x18\x67\xf0\xfc\xd8\
+\x27\x7e\x83\x8a\xd5\x2a\x07\xd3\xb6\xb8\x20\xd6\x8d\xd2\xd5\x88\
+\x1f\x23\xcf\xfd\x90\xde\xfd\xcc\x75\xf4\xda\xaf\x5e\x49\x87\x2e\
+\xff\x08\xd1\xf3\xcf\x61\xc5\x1e\x2f\x3e\x82\x61\xe8\xb3\x01\x73\
+\x0d\x2e\xd0\x96\x09\x9c\x1a\x4a\x62\x5e\x6c\xbd\x56\x23\x1b\x87\
+\x15\x46\x12\xd0\x64\x3b\xd1\x9c\x1f\xde\xbb\x8f\x6a\xef\x1d\xa6\
+\x93\x67\xe6\x68\xe1\x3f\x7e\x40\x93\x57\x5e\x49\xf1\xe9\xe9\x76\
+\x17\x00\x1c\x69\x50\xf9\xf0\x61\x9a\xfa\xd8\xc7\xe8\x92\xfb\xef\
+\xa7\x5f\xf9\xbd\x6b\x69\x6b\xad\x44\x5b\xb7\x6f\xa3\x2b\xee\xbd\
+\x97\x7e\xf7\xc0\x6b\x14\xdb\xb6\x4d\x93\x57\xc2\xf8\xe8\xe3\x8f\
+\x53\xe1\x1f\xbe\x4d\x07\x7e\xf2\x16\xe5\x92\x69\xca\x25\x52\xf4\
+\xe6\xdc\x22\x3d\xff\xe5\x3f\xa3\xa0\x9d\xbc\xb6\x80\x99\xcf\x8c\
+\x8e\xa6\x0c\xb4\xb5\x08\x40\x67\x02\xb7\x2e\x44\x41\xb0\xbf\xc2\
+\x34\x37\x4c\x4f\x51\x0d\xfb\x02\x2b\x91\xe8\xf6\x51\xf6\xfd\xe6\
+\x31\xf5\xe8\x85\x17\xaa\x78\x11\x90\x41\x73\x8f\x3e\x4c\xdc\xf6\
+\xdc\x76\x1b\x9b\x77\x18\x24\x01\xd9\x44\xf5\xd0\x41\xb2\x90\x5a\
+\xe7\x1f\xf9\x16\x1d\x78\xe4\x51\x7a\xfe\xdb\xff\x48\xaf\xdc\x74\
+\x23\x9d\xbe\xe5\x0b\x14\x1f\x1a\xa2\xab\xbf\xf3\x1d\x92\xc3\xc3\
+\xea\xd9\x91\x7d\xfb\x68\xdd\x79\xe7\xd1\xd1\xe7\x7e\x44\x42\xca\
+\x36\x9f\xaf\x5a\xf6\x32\x79\x11\x92\xd7\xb0\xf6\x0d\x0c\xec\x5e\
+\xab\x05\xc8\x65\x0b\x08\x82\x25\xa1\xb6\xc5\xa8\x05\x76\x9c\x4f\
+\x75\x6c\x86\xec\x74\xba\x4d\xf3\x82\xa1\x83\x97\x65\x71\x90\xc4\
+\xf3\xbe\x9a\x3b\xf2\xde\xfb\x94\x7b\xee\x39\x9a\xb8\xe2\x0a\x4a\
+\x6c\xdd\xd6\x6e\xce\x40\xfd\xbd\xf7\x88\x5b\x11\xd6\xe0\x41\x60\
+\x30\x78\x2a\x26\x53\xf4\xda\x7f\x3e\x43\xb3\x4f\x7c\x8f\xe2\x38\
+\x5d\xda\x7c\xcd\x35\xea\xd9\xb1\xcd\xe7\xaa\xa5\x35\x82\xa0\x8d\
+\xbc\x86\xe8\x20\xaf\x91\x20\xda\xdf\x8f\x0b\x78\x80\x53\x0e\x82\
+\xbc\x3e\x18\xd9\x30\x31\x8e\x54\x38\x4f\x71\xf8\xa1\xce\xfd\xdc\
+\xcb\x65\x04\x34\xb4\x79\x33\x39\x88\xfa\xd6\xf9\xe7\xd3\xf0\x47\
+\x7f\x8d\x36\x7f\xf1\x8b\x94\xda\xba\x95\xb8\xed\xbd\xfd\x76\x58\
+\x41\xa3\xcd\x0d\xea\xcd\x7d\x45\x72\x6a\xaa\xad\x62\x74\x0d\x93\
+\x72\x4f\x3e\x41\x68\xec\x42\x6a\xce\x32\x0d\x15\x40\xd3\xbb\xf7\
+\xa8\x5e\x10\xb5\x41\x76\x93\x57\x73\xb1\x30\x13\x9c\x9d\x0b\xb4\
+\xd6\x02\x5a\x00\xcb\xa9\x90\xb7\xc5\x73\x73\x64\x8f\x8e\xf2\x81\
+\xa7\x2e\x75\x23\x60\x91\x23\xf0\xff\x31\x04\xb5\x8b\x2f\xb9\x98\
+\x76\x0a\x97\xb2\x2f\x3c\x4b\xf9\x9b\x7f\x9f\x4a\xaf\x1d\xa0\x89\
+\xcb\x2f\xa7\xd4\x8e\x9d\xad\x6e\x00\x01\x1c\x0b\x53\x21\x22\x79\
+\xe7\x5f\x7e\x4e\x1f\x3c\x48\xaa\x35\x35\x5e\x7b\xe9\x45\x95\x48\
+\x66\xbe\xf0\x07\xe4\x0a\xd1\x45\x94\xd7\x68\x66\x32\x5d\x71\x80\
+\x4c\x53\x95\xc4\xfd\xb8\x80\xbb\x84\x5a\xa0\x55\x00\x95\x85\x05\
+\x95\x09\x60\xe3\x6a\xb1\x11\x42\x52\x59\x14\x3f\x07\xaf\xff\x2c\
+\xfd\xf8\xe1\x47\xe8\x85\x1f\x3c\x4d\xaf\xbc\xf5\x0e\xfd\xf4\x64\
+\x8e\x4e\xdf\x77\x2f\x71\xdb\x87\x02\x89\x33\x82\x7e\xaf\x78\xf2\
+\x64\x28\x80\x6d\x33\x1d\x55\x20\x22\xc8\xba\x31\xe2\xe6\xe7\xe6\
+\xd4\xdc\xc9\xa3\x27\xa8\xf8\xc2\xf3\xb4\xfe\x82\x0b\xe8\xa2\xfb\
+\xef\x23\xc7\xe0\xc0\xef\xa9\x2d\x7b\x1d\x19\x63\xe6\xfa\xeb\xe9\
+\xdc\x5d\x3b\xda\xc8\x03\x4c\x6c\x37\x77\x06\xda\x5a\x04\x10\x00\
+\xde\xac\xeb\xe6\x42\x25\x04\x61\x2d\x80\x54\x68\x8d\x0c\xf3\x2f\
+\x33\xe1\x08\xbc\x78\x32\x68\x74\xcf\x1e\x3a\x8e\xe8\xef\xe1\x73\
+\xa2\xa5\x34\x3e\xfc\xd6\xdb\x54\x7c\xf5\x15\x1a\xbf\xf4\x52\x1a\
+\xdc\xb7\x77\xb9\xe0\xa9\x14\x4a\xe4\xe0\x9b\x53\x57\x5d\x15\x1e\
+\x8c\xa8\x6f\x85\xef\xc5\xd9\xd2\x30\x97\xff\xdb\xbf\x51\xbd\x87\
+\xf5\x1f\xbe\xe5\x66\x72\x20\xb4\xed\x9f\xfe\x34\x7d\xea\xc7\x2f\
+\xd1\x87\x1e\xf8\x73\xda\xf5\xa7\x7f\x42\xd7\x3c\xfb\x5f\x34\x99\
+\x1d\xa1\xf7\x5f\x7e\xb5\xcb\x15\x70\x3d\x72\xe7\xfa\xf5\x9b\xd6\
+\x6a\x01\x02\xf0\x8e\x3b\xce\xac\x3e\x18\xe1\x5a\xa0\xc6\x47\xe4\
+\x99\x41\xf6\x95\x76\x0b\x10\xf0\xff\x6d\x5b\xa9\x7c\xe8\x10\x79\
+\xbe\xaf\x49\x2c\x9b\xb5\x83\xcf\xcf\x7e\xf3\xeb\xc4\xed\xc3\x5f\
+\xbd\x87\x5c\x37\x14\xa0\x4f\x52\xbd\x93\x04\xd9\xf1\x4f\x7e\x92\
+\xaa\xa5\x32\x79\xae\x4b\x55\xa4\xdd\xf3\x6e\xb9\x85\x16\x1e\x7b\
+\x98\x0e\xbe\xfe\xc6\x32\x99\x83\x85\x0a\xfd\xec\xea\x8f\x53\xe9\
+\xbe\xaf\x92\x3c\x7e\x8c\xa6\xf6\xef\xa7\x2d\xd3\x93\xe4\xdf\x73\
+\x37\xbd\xf9\xb5\xaf\x93\x6f\x9a\x7a\xf1\x6d\x41\x71\x5d\x22\xb1\
+\x6f\xad\x7f\x1a\x93\xcd\x2d\x71\xd5\x05\xe2\x52\xa6\x6b\x58\x54\
+\x06\x0b\x75\x0a\x4b\x2a\x15\x7a\x22\x68\x2b\x03\xc7\x90\xfe\xaa\
+\x47\xdf\x57\xd6\x80\xd6\x7e\x26\x80\xf6\xb3\x67\x7f\x44\xd3\x48\
+\x8f\x9c\xca\xf6\xdd\x75\x17\xbd\xf9\x8d\x6f\x90\x84\x4b\x79\x20\
+\x22\x2f\xba\x88\xae\x7c\xe8\x21\xda\x7b\xe3\x8d\x94\x3b\x70\x80\
+\x86\x51\xe1\x89\x27\xbf\x47\x2f\x3e\xf1\x14\xb9\x76\xac\xad\xbc\
+\x3d\x58\xf7\xe8\xc8\x63\x8f\xd3\xc8\xb7\x1e\x26\x5b\x08\x95\x02\
+\x17\xe3\x49\x68\xda\xea\x8a\x0b\x7a\x6c\x87\x99\xe0\x9f\x01\xd9\
+\x4b\x00\xdd\xc5\x10\x6a\x81\xb4\x10\x69\xce\x04\x93\xe7\x9f\x87\
+\x5a\x60\x89\x62\x48\x4f\x75\xc4\x04\xdd\x1a\x8d\x3a\x4d\x5e\xf3\
+\x5b\x34\xff\xfa\xeb\x54\xc4\xbe\x61\xa8\xb9\x17\x90\xa1\x10\x54\
+\xae\xbf\xf0\xa1\xaf\x91\x09\xed\x96\x9f\x7d\x86\x26\x93\x71\xca\
+\xde\x74\x03\xfd\xcf\x93\x4f\x51\xee\xa1\x07\xe8\xc4\x1f\xfd\x21\
+\x65\xb0\x75\x8e\x65\xd2\xe4\x97\x2b\xf4\xf6\x99\x59\xca\xc7\x07\
+\xc8\x67\xf2\x11\x21\x2d\x04\x95\x25\xe6\x70\xbf\x93\x28\xb0\xe2\
+\x1c\x59\x96\xca\x04\x6b\xb6\x80\xa6\x00\xb8\x16\x98\xe4\x6d\xf1\
+\xae\x5d\x3b\x69\xfe\xf8\x49\x8a\x83\xa0\xc0\xde\x80\xdb\x10\x0a\
+\x94\x4b\x60\xae\xe9\xc1\x0c\xc5\x21\xa0\x8f\x3f\xf8\x00\xbd\xfc\
+\x95\xbb\x49\xb6\x1e\x93\xc3\x75\xe6\x6f\xbd\x99\x8e\xc1\x35\x1a\
+\x56\x4c\x11\xf0\x0d\x43\xf5\xa7\xf8\xbe\x95\x20\xca\x17\x49\x02\
+\xdc\x64\x22\x15\x2d\x7e\x05\x82\xd4\x83\x78\xe7\x9c\x85\xb3\x81\
+\x66\x20\x14\x12\x6d\x2d\x16\xe0\x56\x5b\x6a\x81\x61\x90\x3c\x82\
+\xa8\x3c\x9e\x5d\x4f\xf4\xee\x3b\x61\x9e\x7d\xfb\x4d\x3a\xf5\xd9\
+\xeb\xe8\x10\x4c\xdf\x33\x2d\xf2\x2d\x8b\x84\x1d\x6f\x3b\x30\xf4\
+\xd0\x1f\x89\x0d\x10\xd9\xd1\x66\x08\x2d\x1c\xb7\x12\x5b\x85\x24\
+\xad\x4e\x94\x5b\x4f\x4b\x00\xf1\x2d\x9f\x1a\x19\x49\x7f\xbf\x50\
+\x28\xf6\x0a\x82\x51\x2d\x10\x15\x43\x8b\x3a\x13\x70\x2a\x2c\xcf\
+\x87\xa9\xd0\xf0\xc2\x8d\xca\xbc\xe3\xd1\xfb\x20\x37\x8b\x0a\x2e\
+\x1f\x4b\x50\xd1\xb4\x5b\xff\xd5\x46\x74\x4c\xa6\x7b\x29\xdb\x76\
+\x6c\xa2\x63\x8c\x45\x33\x74\x00\xeb\x0e\x6a\x8c\xee\x0a\xb0\xbd\
+\x28\xd2\xcf\x46\x73\x26\x4a\xe2\x3d\x6b\x75\x01\x7d\x30\xb2\x5c\
+\x0b\x38\x5c\x0b\x14\x8b\x64\x73\x7d\xce\xa9\x90\xba\x1b\x18\xb6\
+\x7e\x64\xf5\x71\xb7\x06\x3b\xe7\xba\xdd\xa0\xb7\xd6\xf5\x7c\xd7\
+\xb5\x1d\x8f\x73\x20\x7c\x11\xe8\xe1\x02\x1d\xe7\x02\x8b\x41\x90\
+\xd3\x02\xa8\x54\x6b\x61\x2a\x5c\xb7\x8e\x4c\xbd\xb7\x5f\xa1\xc9\
+\xce\xeb\xd5\x84\xd0\x69\xe2\x9d\xcf\xf7\x70\x83\x68\xae\xb7\x1b\
+\x20\x0e\xb0\x00\x8c\xb5\x58\x80\x00\xbc\x13\xa8\x05\xd0\x87\x9b\
+\x17\xd4\x02\x75\xd4\xfa\x6e\xa9\x44\x16\x6f\x8a\x5c\xb7\x9b\x70\
+\x2f\xad\x1b\xc6\x2a\x82\xe9\xd6\x78\x37\xf1\xfe\x83\x22\x22\x60\
+\x5b\x20\xec\x21\x80\xc8\x0d\x4e\xe3\x60\xc4\x97\xd2\x8f\x49\x69\
+\x73\x2d\xb0\x1e\x1b\x9e\x06\xbb\x01\xb6\xab\x62\x61\xa1\xb7\xf6\
+\x99\x70\xff\x6e\x10\x8d\x7b\xb9\x41\x8f\xe7\x41\x5c\x95\xc4\x3d\
+\x83\xe0\x4a\xbb\x42\x6c\x41\x8b\x3a\x13\x6c\xda\x79\x3e\x55\x51\
+\xbe\x26\xb2\x59\x0e\x34\x5d\x90\x8c\xd6\x6b\xa2\x5e\x41\x6f\xd5\
+\xe0\x26\xa3\xfb\xd1\x35\xa3\xc7\x0e\xb0\x2b\x28\xe2\x1a\x02\x18\
+\xbc\x6d\x62\x62\xf3\x1a\x04\x10\x05\xc2\xba\x10\x8b\xfa\x88\xfc\
+\x5c\xe4\xfa\x2a\x34\x9f\x58\xbf\x5e\x9f\xf9\x77\x47\xeb\xce\xb9\
+\x55\x48\xa9\x7e\x35\x01\x75\x13\x8f\xc6\x2d\xef\x8a\x1e\x31\x80\
+\x5a\x2c\x70\xd0\xb6\xf7\xaf\x49\x00\xda\x02\x50\x0b\x2c\xc1\x6d\
+\x54\x0d\x9f\x42\x55\x57\x99\x9f\x57\x81\x90\x84\x68\x27\xbd\x1a\
+\x71\x4d\xb8\x9d\xd4\x4a\x7d\xf4\xdc\x5a\xac\x81\xe7\x7a\x90\xe7\
+\x16\x37\x0c\x15\x08\x7b\x06\x41\x89\xc6\xc1\x42\x97\xc3\x95\xd6\
+\x73\x81\x7c\x3e\x4c\x85\xd8\x17\x18\x52\xf2\xa2\xd6\x16\x08\xf5\
+\xb8\x67\x36\xe8\x5d\x10\x51\x0f\xad\x77\x36\xcc\xee\x69\x2a\x5b\
+\x9c\x75\x10\x04\xdc\x12\x04\xa0\x8b\x21\xa7\x50\xa0\x7a\xa5\xc2\
+\x16\xa0\xbf\xd4\x3b\x10\x76\x8d\x35\xe9\xde\xd9\xa0\x37\xf1\x6e\
+\x61\xea\xac\x85\x8d\x9c\x82\x0f\x38\xbe\x2f\xc8\x34\xe7\xf8\x09\
+\x6e\x12\xad\xa7\x00\x74\x2d\x50\x68\xad\x05\x2a\x55\xaa\x3b\x0e\
+\x79\xd5\xaa\x3a\x29\x16\x98\xa3\x5e\xda\xd7\x56\xd2\xcb\x12\x7a\
+\xa4\x41\x5d\x56\x2b\x62\xf8\x5d\x0f\xbd\x27\x84\xf4\xd9\x5a\x13\
+\x89\xc0\x1a\x48\x0a\x3b\x95\x96\xf6\xf0\x90\x4c\x8e\x8e\xd1\xe0\
+\xe4\x84\x1c\x9d\xde\x44\x53\xbb\x76\xc8\xbf\xb8\xf3\xcb\xd7\xfd\
+\xdb\xbb\xef\xbe\xdc\xb3\x0e\x58\xf1\x60\xc4\xf3\xe6\x5a\x6b\x01\
+\xe5\x17\x70\x83\x18\x52\xa1\x5c\x5a\xea\x26\xdd\x87\x1b\xb8\x4d\
+\x8d\x79\x00\xf7\x0e\x88\x41\x63\x81\x88\xc7\x03\x23\x91\x10\x46\
+\x26\xc3\xff\x78\x52\x9d\x1d\x0c\x8c\x8f\xcb\xd1\xc9\x49\x63\x64\
+\x7a\xda\x1e\x99\x18\xb7\x6d\x3b\x66\x99\xf8\x9f\x6d\xd9\x14\x8b\
+\xc5\xc8\xb6\x2d\xf4\x71\xe2\xeb\x64\x32\x49\x43\x58\xe7\x79\x93\
+\x93\x15\x08\xa0\xce\x9c\x7a\xd4\x01\xdd\x81\xf0\x78\xa3\x31\x2b\
+\xf0\x8e\xfe\x23\xc9\xe4\xf6\x19\x6a\xa0\x18\x4a\x8e\x8d\x91\x80\
+\x00\x56\x7b\x11\xef\x68\x2d\x69\x73\x64\x0d\x0a\x11\x12\x63\xad\
+\x09\x99\x4a\x49\x2b\x93\x31\x6c\xa4\xd5\x01\x6c\x89\x33\xe3\xe3\
+\xe6\xf0\xf4\x94\x99\xc9\x66\x6d\x32\xd4\xc6\xc2\xe6\xe5\x5a\x96\
+\x45\x71\x45\x0e\x24\xe3\x71\x35\x8e\x27\xb8\x8f\x87\xa4\x63\x98\
+\xb7\x63\xfc\x9c\x7a\x06\x02\x61\x01\xa8\x67\xd2\xa9\x34\xed\x3f\
+\x77\x52\xe9\xad\x67\x29\xbc\xd2\xae\x10\x59\xa0\x02\x12\x15\x14\
+\x43\x19\x95\x0a\x77\xec\xc0\xb6\xf8\xb8\x0a\xa7\x8b\xb5\x5a\xe8\
+\x67\x78\x36\xb0\xac\x40\xc4\x62\x42\x26\x12\x52\x0e\x0c\x48\x99\
+\xce\x20\x58\x8e\xc9\xc4\x86\x73\xcc\xd4\xf8\x46\x63\xdd\xe4\xa4\
+\x3d\x38\x3a\x66\x41\x55\x26\x2f\xce\x34\x94\x43\x92\xc9\x8b\x06\
+\x4c\x1e\x9b\x26\x19\x80\x26\x8c\x7b\x21\x69\xc0\x62\xe0\x1e\xae\
+\x19\xea\x59\x0d\x7d\xe4\x87\x79\x7e\x57\x83\x05\xa4\xe6\x26\x92\
+\x99\x18\x6e\xf7\xda\x0e\xaf\x9e\x0a\xf9\x8f\x24\x49\x21\x32\xae\
+\xe3\xd1\xb6\xa9\x29\xf9\xea\xf1\x13\x1e\xcd\xcc\x48\xfb\xe2\x0f\
+\x1b\xa3\x9b\x36\xd9\x03\x83\x83\x26\x7e\xc8\xd4\x0b\x64\xad\x60\
+\xac\x34\x80\x59\xb2\x15\x19\x73\xf9\xf8\x1b\xd4\x31\x0e\x78\xcc\
+\x8b\x57\xe0\xb5\x99\xfc\x0e\x34\x0c\xe8\x39\x75\xf8\xc9\x82\x37\
+\x00\x7c\x97\x63\x11\xf7\xfc\x0c\x93\x0c\x85\xd8\xfc\x5d\x34\xbe\
+\xd6\xd9\x2c\xdc\xc5\xd6\xeb\x6e\xcc\x94\xa9\x35\x9c\x08\x75\x67\
+\x82\x1a\x8a\xa1\x11\x29\xa7\x38\xf2\x9f\x29\x14\xbc\x89\xcf\x7d\
+\x1e\xe7\x22\x23\x94\x49\xa7\x40\x32\xc1\x0b\x51\x84\x41\x45\xbd\
+\x26\x98\x8c\x8e\xe2\x18\xa3\x0f\x17\x69\x59\xbc\x78\x8c\x2d\x40\
+\x11\x6c\x03\x04\xa2\xc7\x9a\x84\x7a\x3e\x11\x5a\x85\x26\xac\x35\
+\xdd\x9a\xba\x59\x30\x3c\xd7\xf6\x0d\xbe\xae\x17\x8b\x65\xcb\x13\
+\x99\x35\x6c\x87\xa3\x5a\x40\x5b\x40\xa5\x79\x2e\xb0\x1e\x01\xe5\
+\xe4\x9e\x7d\xd6\xa6\xe9\x69\xca\x8e\x8d\x92\xdd\xd4\x34\xb1\x16\
+\x0c\x93\x3b\x6d\xaa\x9a\x44\x44\x8e\x11\x04\xbc\xd0\x30\xa5\x3a\
+\x2e\x6b\x57\x2f\x58\x43\x9b\x34\xa3\x6d\x8e\xdf\xd1\x42\x40\x6b\
+\x8e\xb5\x40\x57\x2e\xf3\xf9\xdb\x8d\x7c\xbe\x4a\xc2\x4f\xb3\x71\
+\xf4\x6b\x01\x2c\x00\xb5\xf3\x09\x3c\x4f\x66\xa6\xa7\x51\x06\x8c\
+\xd0\xf0\xf0\x30\xff\x78\xf3\xbb\xa1\xf6\x74\xbd\x00\x62\x7a\xcc\
+\xe0\x7b\x0a\xda\x2c\xd1\xba\xc9\x47\xd0\x1a\xe6\xbe\x6d\x0c\xa2\
+\xda\x0a\xf8\xdd\xd0\xc4\x9b\xbb\x52\xad\x71\xfd\x8c\x16\x4a\xe5\
+\xf4\xa9\x1a\x1e\x4c\xaf\xc1\x02\xba\x53\x61\xc9\xf7\x95\x00\x6a\
+\xae\x1b\x0c\x25\x93\x76\x22\x9e\x20\x5d\x1b\x60\x31\x6d\x64\xb5\
+\x00\x22\xd2\x91\x70\xb4\x56\x5b\x7d\x94\x7b\x4d\x46\x2f\x5e\x9b\
+\xb4\xe3\x38\xfa\x0f\x20\xda\xf4\xbb\x02\x1d\xe6\x75\x1c\x50\xdf\
+\xd1\xef\xeb\x00\xb9\xf8\xea\x2b\x0d\xc3\xf3\xfa\xb6\x00\xd1\xfc\
+\x17\x23\x73\xfc\xb6\x67\xdb\x42\xfd\xa8\x69\x68\xcd\x6a\xad\x69\
+\x82\xda\x2c\x79\xac\x89\x30\xb4\x50\x34\xda\xde\xd1\x66\xaf\xef\
+\xe9\x6b\xf4\xfa\x5b\x3c\xcf\xdf\x60\x8d\xab\xf9\x0c\x6a\x83\x81\
+\x81\x01\x95\xeb\x13\xcd\x38\xd4\xd9\x1a\xa5\x62\xc3\x39\x72\x78\
+\xc4\xf5\x7c\xd9\x87\x05\x44\xa9\x10\x07\x23\x67\x78\x11\x3e\x56\
+\x8d\x42\x43\x93\xd3\xd2\xd7\x5a\xd4\xda\xd7\x64\x3b\x03\x9b\x16\
+\x4e\x9b\x26\x75\xd3\x04\xb5\xf6\xf4\xb3\x3a\x23\x74\xb6\x72\x3e\
+\xef\xce\xbe\xf3\x4e\x3d\x7f\xf4\xa8\x53\x3a\x79\xc2\xaf\x9e\x99\
+\x95\x41\xa1\x60\x58\x8d\xba\x3d\x20\x45\x7c\xc8\x8e\xa5\x32\xa9\
+\x64\x32\x96\x88\x0f\xbf\x9e\x5b\xfc\xd7\x3e\xb2\x40\x94\x0a\x4f\
+\x39\xce\x82\x90\x92\x3d\x3b\xd0\x8b\x6e\xd5\xa8\x16\x82\xd6\x1a\
+\x34\xd2\xb5\x68\x5c\x6b\xb4\xa5\xaf\xd6\xc6\xef\x71\x2b\xe6\x72\
+\xce\xe9\x23\x47\xea\x0b\x47\x8e\xb8\x85\xe3\xc7\xfd\xf2\xe9\xd3\
+\xd2\x59\x58\x30\xfc\x62\xd1\x36\x1a\x8d\x44\xdc\xf7\x53\xb6\x69\
+\xc6\xf1\x8d\xb8\x0a\x90\x86\x51\x0b\x4c\xa3\xe4\x1a\x0a\x05\x60\
+\x09\xa2\x9c\x43\xd1\x75\xe8\xe9\xd3\xb3\x4f\xbe\x9d\xcf\x1f\xeb\
+\x57\x00\x3a\x13\x34\xea\xbe\x5f\xf2\xa4\x8c\x6b\x72\xda\x84\x5b\
+\xcd\x55\x43\x13\x5d\xa9\x15\x66\x67\x9d\x1c\xc8\x2d\x1d\x3b\xe6\
+\x2c\x1e\x3d\xea\x57\x67\x67\x79\x97\xb9\x4c\x2e\x21\x44\xca\x84\
+\x2c\x08\xc0\xef\x35\x1c\x29\x4b\x7c\x28\x83\x5a\xa4\x58\xc7\xd6\
+\x9c\xff\x0d\x63\x59\x88\x7c\x01\x9b\xb4\x3c\x14\x73\xd4\x75\xe7\
+\x30\x5f\x67\x57\x65\xe8\xcc\x05\xd4\x80\x02\x50\x0c\xe7\xfb\x17\
+\x80\x0b\xd4\x71\x40\x7a\x6c\x7c\x71\x71\x47\x12\x02\xb0\x59\x83\
+\xb6\xdd\x45\x12\xe4\x1a\xb9\x43\x87\xea\x79\x90\xc3\x5f\x7f\x83\
+\x0a\x6b\x0e\xe4\x44\xa9\x14\x53\x9a\x13\x22\xcd\xe4\x02\x64\xd9\
+\x86\x10\x7e\x43\xca\x4a\x93\x9c\x22\x56\xf1\xfd\x7c\x11\xc4\x16\
+\x7c\x3f\x87\x12\x7c\x1e\x3b\xd1\x32\x13\xea\x20\xc7\xf0\x5b\x10\
+\xb4\xf7\x7a\x1c\x3d\xab\xab\xc0\x1e\x02\x58\xb5\x16\x70\x80\xd2\
+\x7b\x8d\xc6\x4b\x9b\x97\x96\xf6\xbe\xf4\xe0\x83\x8b\x89\x7a\xd5\
+\x3c\x35\x9f\xaf\xe1\x80\x54\x82\x9c\x6d\x36\x1a\xc9\x18\x8a\x5f\
+\xfe\x16\x6f\x64\x80\x3a\xff\x59\xad\x2e\x65\xa1\xe6\xfb\x4b\x15\
+\x68\xac\xe8\x79\x0b\x8b\x38\x66\x3f\x89\xcd\xd5\x82\xeb\x96\x34\
+\xa1\x3e\x88\x31\x04\x20\xcf\x06\xdc\xfa\xfe\xbf\xce\x42\x00\x26\
+\x85\xe6\xb8\x11\x52\xda\x7e\xf3\xe4\xe4\x1f\x6f\x4c\x26\x77\xa7\
+\xd2\x29\xff\x8d\xb9\xdc\x4f\xaa\xa8\x0f\x4a\x40\x1e\xc4\x70\x80\
+\x9a\x3b\xe3\xba\x8b\xdd\xa4\x80\xde\xa4\xb8\x17\x8c\x1e\xe4\x28\
+\x1a\x77\xb7\xd5\xc8\xf6\x2b\x00\x2d\x04\x1b\x5d\x1a\x18\x05\x86\
+\x81\x18\x20\xce\x46\x5b\x6b\xd4\x18\x7d\x30\xc4\x3e\x78\x01\x18\
+\xe8\x2c\x26\xde\x84\xa1\x6b\x84\x5f\x2e\x62\xfd\xb7\xff\x05\xc7\
+\xfd\xe7\xdb\x23\x5d\x13\x38\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x13\x17\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\
+\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x12\x94\x49\x44\
+\x41\x54\x78\xda\xed\x9b\x09\x90\x5c\x47\x79\xc7\xff\xdd\xef\x9a\
+\x73\x67\xf6\xd2\xae\x56\xbb\xba\xbd\xb2\x84\x0e\x0b\x1b\x51\xb2\
+\x1d\x0a\x6c\x8e\x40\x9c\x40\x48\x0a\xca\x54\x80\x70\xe4\xa8\x8a\
+\x53\x60\x08\x15\x8a\x22\x45\x48\x02\x14\x47\x01\x45\x05\x63\x28\
+\x53\xa9\xd8\xd8\xb1\x62\x82\x6d\x8e\x02\x0c\x54\x30\x92\x15\x09\
+\xc9\x96\xac\xd3\xd2\xae\x76\x25\x4b\x7b\x68\xaf\x99\xdd\xd9\x9d\
+\x79\xf3\x8e\xee\x7c\xaf\x5f\xc7\x33\x7b\x69\x25\xb0\x1c\x57\xa1\
+\x4f\xfa\xeb\xeb\xd7\x3b\xf5\x66\x7e\xff\xef\xeb\x7e\x6f\x34\xb3\
+\x4c\x4a\x89\xdf\xe5\xe0\xa4\x6b\x06\x5c\x33\xe0\x9a\x01\xd7\x0c\
+\xb8\x66\xc0\x35\x03\x5e\xfa\x60\x51\xe0\xff\x39\xae\xca\x7d\x00\
+\xbb\xee\x73\xad\x46\xd2\x79\x95\x44\x78\x13\x24\xef\x92\x12\x79\
+\xce\xd1\x68\x9a\x46\x63\xd2\x36\x9a\x52\x09\x33\xcf\x18\xcf\x80\
+\x49\x37\x0c\x51\x0c\x05\x0a\xbe\x2f\x0a\x55\x5f\x4c\x54\xaa\xfe\
+\xf8\xb6\x75\xa9\x83\x87\x1f\xff\xab\x7b\xf1\x12\x84\xf9\xdb\x97\
+\x11\x0c\xaf\xf8\xda\x2d\x8d\x59\xeb\x35\x89\x84\xb5\xa3\x54\x0e\
+\xb6\xb7\x2c\x6f\x59\x99\x72\x2c\xa4\x93\x26\x32\x29\x0b\xd9\xb4\
+\x85\x5c\xc6\x42\xc2\x31\x60\x5b\x06\x4c\x83\xc3\x88\xc4\x59\x86\
+\x31\x64\x00\x74\x0a\x01\xb8\x5e\x88\x3d\x87\xc6\x83\xa1\xbe\x5f\
+\x5a\x00\x5e\xde\x06\xb0\x1b\xee\x5d\xd1\xdd\x95\xff\x9b\xed\xef\
+\xb0\xdf\xdd\x37\x90\xeb\x5c\xd7\xd5\x00\xce\x01\xc7\xe6\x24\x03\
+\x09\x3b\x86\xa5\x63\x3d\xa6\xf9\x48\xb6\xa9\xc6\x96\xc9\x94\x11\
+\x8c\x01\xa1\x00\xaa\x04\xbf\xef\xe8\x04\x5a\xf3\xe1\x91\xde\xfd\
+\x67\x72\xa0\x78\xd9\x19\xc0\x5e\xf7\x4b\x33\x17\x0e\xbf\x6d\xd3\
+\x9a\xdc\x5d\xc9\x64\xc3\xad\x4d\x8d\x0d\x46\xa1\x54\xc5\xaa\x8e\
+\x26\x30\x82\xb1\x6d\x05\x1c\x03\x92\x6c\xc7\xd0\x63\x03\x96\x1d\
+\xcf\x99\x26\x87\x11\xc9\x60\xaa\x7d\x04\x24\x02\x21\x31\xed\x4a\
+\x4c\x56\x8c\xca\xc9\xbd\x8f\x77\x02\x38\xff\xb2\x33\xc0\xda\xf9\
+\xdd\xd7\x6e\x5f\x9b\xbf\x2f\x9f\x6d\x5f\x37\x34\x56\x41\x7b\x6b\
+\x0e\xe3\xd3\x8c\x40\x12\x90\xdc\x80\x50\x30\x1c\x81\x34\xc0\x25\
+\x03\x17\x1c\x2c\xe0\x90\xe0\x08\x49\xbe\x60\x70\x7d\xc0\xe0\x91\
+\x24\xb1\x4b\x48\x09\x25\x3f\x94\x38\xda\x57\x46\x02\x13\xc7\x67\
+\x4a\x85\x9b\x40\xf1\xb2\x31\x80\xdd\xf2\xe8\xb2\x5c\x22\xf9\xd5\
+\x1b\x36\xb4\xdd\x79\x71\xc2\xc5\xc8\xa4\x4f\x00\x16\x38\x67\x08\
+\x25\x00\x82\x05\xc1\x8a\x00\x04\xca\xe0\x4b\x0e\x2f\x8c\x2a\xcd\
+\x60\xfa\x24\x83\xc5\xd0\x06\xc0\x19\x03\xe7\x50\xf0\x00\x53\xf0\
+\x42\x4a\x94\x5d\x81\x54\x32\x39\xf5\xd4\x4f\x1f\xee\x06\x38\xc0\
+\xf8\xcb\xc3\x00\x76\xf3\xcf\xb7\xb4\xe6\x1a\x7f\xd1\x90\xb6\x5a\
+\xcf\x0c\xfa\x04\x61\x13\x0c\x83\x90\x04\x24\x19\x01\xc5\xe3\x80\
+\x80\x0d\xca\xbe\xe0\xe0\x3e\x08\x32\x12\x81\x2b\x78\x46\xc0\x0c\
+\x94\x94\x50\x77\xe5\x13\x92\x91\x00\xd7\xe3\xc8\x89\x9e\xd3\x9e\
+\x57\xbd\x09\x64\x2e\x98\x81\x28\x3e\x73\xf3\xcd\x2b\x66\x86\x87\
+\x1f\x19\xef\xef\x3f\x2c\x81\x43\x9c\x64\x03\x47\xbf\x26\x65\xf5\
+\x6a\x1b\x40\xf0\xbb\x77\x80\x27\x7e\x5c\xaa\xf2\xa6\x42\x59\x2a\
+\x78\x53\x30\xbd\x7b\x03\x66\x54\x51\xc9\x09\x54\x57\x56\x12\xa8\
+\x40\x04\x4b\x42\x2c\x30\x5d\xcc\xd8\x84\xfa\x90\x32\x9e\xf7\x42\
+\x89\xed\xeb\xec\xb1\x1f\xdd\xbf\x6b\x73\x0d\x9e\x44\x91\xe4\xfc\
+\xb3\x76\x5b\xdb\xce\xd6\x15\x2b\x76\x7a\xd3\xd3\x70\x4b\x25\xb8\
+\x53\x53\xc1\x47\xd3\xe9\x43\x7e\xb9\xfc\x98\x00\x1e\xff\x57\x29\
+\x8f\xbf\xe8\xf7\x01\xec\xf7\x7e\xdd\x0d\x66\x1c\x04\x43\xb6\x6e\
+\x76\x56\xd6\x70\xaa\xc2\xbc\x2e\x73\x65\x80\x56\xfc\x40\x95\x05\
+\xe2\x6a\x0b\x11\x29\x5a\x3e\x92\xb2\x44\xf7\x0a\x0b\xd6\xe4\xbe\
+\x83\x87\xf7\x7e\xef\x26\x05\xcf\x38\x28\x3f\xfe\x8d\x2d\x85\x4f\
+\xd2\x39\x0e\xe5\x57\xad\x32\x79\xf4\xd8\x30\x44\xe8\x79\x4a\x81\
+\xeb\x62\x66\x6c\x0c\xa5\xc1\xc1\x28\x9f\x71\xa7\xa7\xff\x0b\xc0\
+\x3d\x5f\x92\xf2\xdc\x8b\x63\xc0\xeb\x8e\xff\x84\xd2\x9b\x66\x41\
+\xb3\x7a\x23\x2e\x31\x66\x97\xff\x73\xc7\x62\xf8\xe3\x9d\x7c\xf0\
+\xe1\x7b\x3e\xd2\x4e\xe0\xfc\x05\x03\x38\x7f\xfc\xdf\xb6\x15\x13\
+\xcb\xb7\x6d\x7b\x53\xaa\xa5\x05\x22\x82\xae\x54\x40\x55\x87\x4f\
+\x39\xa0\xac\x8f\x95\xca\x64\xc6\xe4\xb9\x73\x81\x5b\x2c\x3e\xc4\
+\x84\xf8\xfc\xa7\xa4\x3c\xf1\x1b\x2f\x01\x76\x5b\xff\x1f\xc1\x48\
+\x12\xfc\xd5\x8f\x1d\x1b\x4c\x3c\xf3\x3f\x3f\xba\x08\x6e\x76\x28\
+\x78\x70\x44\x79\x67\x93\x68\xc9\xe7\x72\x37\x37\xe4\xf3\x90\x42\
+\xc0\x64\xd1\xd2\x33\x60\x58\x16\xcc\xa8\x13\x48\xc1\xff\x49\x08\
+\x38\x4d\x4d\x68\x48\x26\x4d\x32\xe0\x3d\x33\x83\x83\xef\xfe\x22\
+\x63\x0f\x13\xd8\x5d\x77\x4b\x39\x71\xe5\xef\x05\x0c\xf1\xa7\x58\
+\x34\xd8\x8b\xa6\xe6\x2c\xc7\xca\xe6\xa0\xff\xf4\xb3\x4f\x6e\x07\
+\xb3\x00\x66\x02\xdc\x52\x7a\xdf\x3a\xb9\xb9\xa1\xa9\x89\x85\x13\
+\x13\xf0\x49\xa2\x50\x00\x68\xfd\x73\xaa\xb6\xe9\xba\x30\x7d\x1f\
+\x16\xc1\xdb\x11\xbc\x94\x48\x02\x48\x32\x86\x6c\x22\x81\xd6\xe5\
+\xcb\xd9\xb2\xf6\xf6\x3b\x93\x86\x71\xf4\x9b\x8c\xbd\xe1\xca\x37\
+\x41\xc9\x6e\x04\xd8\x6f\x7c\x5f\x7c\x39\x61\x19\xc0\x6b\xb6\x5a\
+\x78\xf2\x89\x07\xcb\x0a\xba\xb6\xf6\xf1\x86\x65\x21\xd6\x58\x7e\
+\xce\xa0\x16\x97\xd1\x9a\x8f\xaa\x0f\xa8\x4e\x00\x41\xb3\x20\x00\
+\x27\x03\x98\xe7\x29\xf1\x6a\x15\x06\x1d\x0b\x9a\xd7\xdd\x01\xdb\
+\xb6\x91\x68\x6c\xec\x08\x8a\xc5\x9f\xde\xcf\xd8\xa7\xde\x23\xe5\
+\x3f\x5f\xbe\x01\x8c\xad\xfc\x4d\x0d\x58\x1a\x9c\x61\xeb\x5a\x13\
+\x5b\x56\xb3\x99\x91\xe1\xa1\xc3\x17\xce\x9e\xb8\x45\x19\xa0\x5b\
+\x9f\x73\x13\x7f\x7d\xbd\x07\xa3\x58\x06\xfc\xf8\x7a\x2a\xb4\xa9\
+\x4c\xc6\x3b\x28\xd3\x26\x48\x12\x27\x03\x84\xef\xc7\x46\x91\x11\
+\x26\x29\xa4\xb1\x3a\x8e\x1e\x63\x59\x8c\x8c\xf9\xa7\xef\x31\x56\
+\x7a\xbb\x94\x5f\xbd\x3c\x03\x44\x70\x0e\xdc\x7e\x05\x5e\xc4\xb0\
+\x4d\x46\xd0\x1c\x5b\xd7\x18\xd3\xbd\xfd\x43\xa7\x1f\x7c\xf8\x99\
+\x0d\x5d\xcb\xcc\x3c\xd8\xec\xea\xbf\x77\x8d\x40\xdb\xf8\x05\x84\
+\x53\x53\xe0\xa6\xa9\x3a\x4a\x72\x0e\xae\xaf\x9b\x4a\x64\x80\xd4\
+\x42\x5c\x79\x95\x8d\xc8\x0c\xea\x1a\x83\x96\x89\x88\x96\x09\x1d\
+\x2b\xc3\xa0\xe2\xcb\x4f\x30\x36\xf4\x46\x29\x77\x2d\x6d\x40\x50\
+\x2c\xc1\x5e\xb6\x64\x7b\x2f\x1d\x8c\xc0\x11\x41\x63\xcb\x2a\x3e\
+\xdd\x7b\x6e\xe8\xf4\x77\x76\x1d\xda\xe0\x07\xc1\x2b\x09\x96\xc0\
+\x1c\xa9\xaa\xaf\xe1\x13\x06\xc7\x07\xbb\x09\xec\xbf\xcf\xa8\x0d\
+\x8f\x93\xf4\x6d\x23\x0c\xe8\xd0\x5d\x00\x82\xa6\x2a\x2b\x50\x10\
+\xb0\xa4\xca\xf3\x48\x35\xe0\xb9\x99\x31\x32\xe1\xc7\x8c\x3d\xf6\
+\x66\x29\xab\x97\x36\xa0\x74\xba\x19\x2d\xed\x1e\x00\x1b\x60\x57\
+\x04\xac\x93\x06\xe7\xd8\xb2\x92\x4f\xf7\xf4\x0f\x9f\x7e\xe0\x3f\
+\x0f\x5d\x1f\x04\x82\xc0\x39\xc0\x13\x0a\x3a\x84\x49\x39\x92\xa1\
+\xf4\xf1\x2d\x0c\x89\xa7\x7e\x0e\xb7\xb7\x17\x1a\x5c\xc9\x27\x31\
+\xe8\x3d\x40\x8b\x49\xa9\xe6\x8c\x39\x5b\x33\xe6\x1f\xd7\xe7\x8e\
+\x0c\xf0\x01\x00\xf7\x2c\xb1\x04\xaa\xd7\xc1\x1b\xdd\x03\xa7\xfd\
+\xd6\xcb\x02\x06\x66\x5d\xd7\xb7\xae\x66\xd8\xbc\x8a\x97\x7a\xce\
+\x0e\xf5\x3c\xf0\xc8\xb3\x1a\xdc\xc0\xac\xcd\x0e\x1c\x42\x9a\x1c\
+\x7a\xae\x25\x61\xe0\x5d\x6b\x25\xa6\x1f\x3d\x86\x14\x50\xdf\xba\
+\x98\x21\x25\xe7\xc1\xe8\xbc\x18\xf0\xe2\xa6\xdc\xb9\xb4\x01\xdc\
+\x01\x26\x8f\xec\x40\xeb\xb2\x13\xe0\xe6\xa6\xc5\x80\xe7\x83\x43\
+\x81\x9f\xee\x1b\xea\x7d\xe0\x91\xe3\x04\x1e\x12\xb8\xa9\xab\xa9\
+\x85\xda\x58\xc8\xd0\x89\x0d\xb0\xf0\xc5\x9d\x16\xda\xb6\xad\x41\
+\xc3\xfb\xdf\x8f\xd2\xc3\x0f\x43\x96\xcb\x2f\x00\x0c\x91\x12\xaa\
+\xda\x2f\x4a\xb4\x2e\xbd\x07\x18\x0e\x10\xc2\xc6\xe8\x2f\x96\x37\
+\xaf\x7d\xe3\xb1\xf1\x19\x73\xf3\xa2\xe0\x36\x03\xbd\x6e\x6c\xea\
+\x44\xe9\x54\xdf\x85\xfe\x07\x1e\x39\xd5\x1d\x04\x72\xbb\xaa\xb4\
+\x41\x70\x52\x90\x02\x40\x90\x64\x08\x1a\xe8\xb9\x10\xfe\xd4\x64\
+\x13\xfd\xa3\x9e\x6f\xef\xd3\xfd\xe8\x5a\xd5\x80\x1d\x7f\x70\x07\
+\x52\x3b\x77\x62\xea\xbe\xfb\x50\xdd\xbf\x1f\x13\x00\xce\x92\x9e\
+\x27\xa5\x49\x59\x52\x86\x94\xd7\x62\xb8\xb2\x28\x02\x4d\x4b\xde\
+\x0a\xb3\x57\xff\x40\x22\xac\x02\xc2\x85\x69\x04\x6e\xd0\x78\xfb\
+\xb3\xe9\x74\xea\xd5\x33\x6e\x7d\xc5\x63\xf0\x8d\x2b\xc2\xe9\x53\
+\xbd\xe7\xcf\x1f\x38\x7c\x66\x5d\x18\x4a\x1b\xc2\x05\x44\x05\x08\
+\x23\xcd\x90\xaa\x75\x9b\x27\xd3\xe3\x58\x2d\xe9\x69\x77\xec\xe2\
+\x40\x22\x32\xeb\x6d\x23\xbf\x42\x8b\x37\x81\xfc\x96\x1b\x70\xc7\
+\xbb\xfe\x04\x37\x6d\x5e\x0b\xef\xa9\xa7\xf0\xab\x6f\x7e\x13\x63\
+\x85\xc2\x82\x3d\x68\xe9\x72\xb6\x20\xa6\xe2\x58\x3a\xf6\x00\x07\
+\xfe\x4c\xca\x1d\x97\x36\x60\xe7\x13\x52\x1b\xa0\x55\x95\xd7\x6f\
+\xe8\xde\x5f\x4d\xbe\x62\xcd\xc5\x49\xde\x76\x03\x81\x5f\x4f\xe0\
+\x27\x4e\xf6\x0f\x1d\x38\xd2\xbf\x3a\xac\x4e\x5a\x08\x26\xe3\xc7\
+\x4a\xe8\x16\x67\x7a\x5c\x03\x9e\x3b\xd7\xe8\x14\xbd\xc2\xf8\x45\
+\x3b\x32\xe0\x9d\xc3\x3f\xc7\xb2\xea\x18\x04\x24\x42\x00\xcb\xb6\
+\x6e\x9c\x7c\xd3\x7b\xdf\x69\x74\xac\xec\xcc\x9c\xfe\xd6\xb7\x30\
+\xf8\xb3\x9f\x5d\x72\x21\x9a\xa4\x0e\x52\x27\xc9\xc6\xe2\xf1\x61\
+\xe0\x17\x8f\x4a\xf9\xfa\x4b\x1b\x70\xcb\x93\x92\xa0\x81\x50\xc1\
+\x93\x5c\x35\xb6\x2d\x39\xfd\xd6\xdf\xbf\x75\x60\xa4\x50\xb6\xf6\
+\x1c\xe8\x59\x19\x56\xa7\x4c\x04\xa5\x79\xd5\xd5\x9a\x33\x37\xdf\
+\x8c\x9c\x39\xea\x4f\x16\xc7\x2d\xc0\xc4\xbb\x07\x7f\x88\x76\x77\
+\x34\x32\x80\x04\x84\x94\x07\x10\xa0\x65\xf3\x86\xe0\xad\xef\x7d\
+\x17\xeb\x12\x81\xf1\xdc\x57\xbe\x82\xca\xf0\xf0\xa2\x46\x30\xad\
+\x36\xd2\x4a\x52\x02\xb3\x63\x0c\x28\xbe\x03\x48\xf6\x48\x99\x58\
+\x7a\x13\xd4\xd7\x5c\x3d\x50\xf2\xfc\x6a\x66\x7a\xf8\x40\xe7\xa9\
+\x3e\x99\x0e\x2b\x25\xfd\xae\x2d\x15\x83\x31\x00\xb2\x76\xe9\x8a\
+\x83\x2f\x0c\xaf\x0d\x90\xbc\x04\xf0\x34\xc9\x80\x03\x13\x49\x30\
+\x08\x25\xa0\x80\x10\x06\x8d\x27\x8e\x9d\x36\xbf\xfd\xb1\x7f\x44\
+\xdb\x96\xeb\xc3\xb7\xfc\xed\x87\xd0\xd9\x73\x8a\x0f\x3e\xf6\x18\
+\xf3\x8a\xc5\x05\x4d\xd0\xa0\x28\x90\x56\xeb\xae\xd0\x11\x7c\x16\
+\xd6\xd3\x19\x88\xdb\x97\xde\x04\x79\xa2\x0e\x5c\x67\xe1\x83\xaa\
+\x4d\x29\x6d\x05\x22\x0d\x98\x99\x39\x40\x57\x38\x86\x80\x80\x0d\
+\x98\x91\x81\x26\x1c\x52\x02\x5c\xc1\x07\x91\xd9\x90\xda\x10\x28\
+\x15\x8e\x3e\x67\x7c\xe7\xe8\x67\xb1\x6c\xcb\xc6\xf0\xcd\x1f\xff\
+\x04\xd6\x8f\x8f\xf2\x81\x5d\xbb\x58\xe5\xf9\xe7\xb1\x58\x5c\x20\
+\x4d\x93\xd6\x91\xee\x45\x62\x5f\x05\xec\xf6\x2c\x02\xa8\x58\xba\
+\x03\x64\x9d\x77\x53\xf1\x86\xc6\xcd\xa8\x2e\x3c\x60\x29\xc0\x08\
+\xe7\x54\x96\xcf\x69\x77\x3e\x07\x5c\x46\x7f\xe3\xac\x25\x85\x23\
+\xe3\x67\x8f\x0d\x48\x6a\x03\x26\x10\xc0\xa2\xb1\xa1\x97\x83\x54\
+\x99\x45\x59\x19\xf1\xe0\xc7\xff\x05\xad\x5b\x37\x85\x7f\xf8\xd1\
+\x8f\x61\xbd\x5f\x35\x86\x1e\x7a\x08\x93\xcf\x3c\xb3\xe0\x5d\x4a\
+\x25\x99\xc4\xe7\x2b\x62\xcc\x83\x7d\x6b\x16\x21\x04\x0c\x30\x0a\
+\x49\x71\xe9\xcb\x20\xa4\x92\x82\x07\xa3\xb9\x14\x25\x03\x92\xd9\
+\x2c\x40\x64\x80\xa8\x01\xab\xcc\x6b\x63\x15\x6c\x76\x07\x49\x12\
+\xc3\xac\x39\x21\x38\x60\x64\xd5\x79\x2d\xdb\x81\xe3\x5b\xf0\x45\
+\x08\x57\x32\x24\x04\x87\x50\xc8\x40\xa8\xb3\xa8\xcb\x53\x47\x4e\
+\x1a\xf7\x7f\xe8\x93\x68\xdd\xb6\x29\xbc\xe3\x2f\x3e\x88\xed\x77\
+\x67\x8d\xe1\x07\x1f\xc4\x38\x6d\x96\x32\x0c\xc1\x1d\x07\xc3\x9e\
+\x1f\xec\x66\x59\x0f\xa8\xb6\x78\x90\x48\x13\x7c\x58\x63\xf6\x17\
+\x34\x80\xcc\x31\x70\xfb\x19\x7d\x2f\x50\x06\x98\x45\xe3\x34\x65\
+\x53\x49\x70\x2e\x95\x01\x26\x16\x00\x17\x80\x9c\x05\x59\x4b\xac\
+\x56\x79\xc6\x38\x72\x59\x07\xd9\x95\x67\xf9\xf9\x0d\x5f\x07\xeb\
+\xdf\x86\x7c\x49\x56\x93\x70\x9c\x29\xcf\x85\x15\x98\x30\x24\xc1\
+\x4a\x42\x15\x0a\x5a\x65\x01\xd2\x1c\x23\x4a\xcf\x9e\x34\x1e\xbc\
+\xeb\x13\x68\xde\xba\x51\xdc\x71\xd7\x07\xe4\x8d\x77\xdf\x6d\x0c\
+\xef\xda\x85\x27\x4f\xf5\x54\x2f\x1c\xeb\xb7\x5a\xdc\x20\x55\x81\
+\xa1\x1e\x1d\x92\x32\xe0\xa0\x48\x13\xe7\xa4\xee\x02\x98\x35\x78\
+\x45\x91\x56\x40\x32\x88\x97\x82\x29\x55\xeb\x23\x24\x89\xa8\x03\
+\x04\x42\x9e\xa5\xf9\xd9\xa0\xb5\x2a\x2f\x54\xf9\x48\xea\xfc\xc8\
+\x65\x6c\x34\xae\x1d\x01\x5f\xbf\x07\xd5\x65\x07\x4d\x24\x0e\x81\
+\x75\x1f\xc2\x0f\x6e\x58\x66\xbd\x7e\x4f\x13\xf2\xbb\x4d\x64\xc6\
+\x5d\x50\xf1\x20\x94\x01\x80\x50\x26\x48\x1a\xeb\x63\xc8\x59\x86\
+\x48\x52\xe9\xc8\x29\xfe\xd0\x5f\x7e\x0c\x4d\x64\x84\x63\x04\x41\
+\x43\x71\xc6\x69\x4a\x25\x51\x81\x1b\xbf\x06\xcf\xc7\x34\x24\x9c\
+\xb8\x0d\x9b\xf5\x1d\xb6\x3f\xcb\x00\x3d\xce\x93\x74\xdb\xdb\xba\
+\xf2\x5a\x64\x82\x60\x2e\x42\xe9\x00\x5c\x43\x83\xcd\x06\x55\xa1\
+\x8d\x90\x52\x57\x1c\x04\x6e\x21\xb7\x7a\x08\x7c\xdd\x41\x84\xd9\
+\x01\x54\x05\xe0\xf9\x02\xb0\xa0\xe4\xa6\x05\xdf\x73\x7b\x09\x89\
+\x9d\x1c\x1b\xf7\x25\xb0\x72\x77\x0a\x95\x02\x19\x11\x90\x11\x61\
+\x0c\x2c\xd5\xb2\xd1\x63\x49\x63\x59\x1b\xab\x63\x30\x4c\x93\x11\
+\x99\xee\xe5\x3c\x99\xb4\x11\xb7\x89\x54\x99\x51\x96\x41\x6c\x9e\
+\xbe\x77\x1a\x5e\xcc\x80\x56\x30\x56\x9b\x36\x74\x07\x08\x65\x82\
+\x5a\x8f\x82\xd9\xb3\x61\xa3\x21\xc7\xbc\xca\x33\x03\x68\x48\xdb\
+\xc8\xad\x3a\x0f\xb6\x66\x5f\x0c\x1e\x02\x41\x55\xc2\x0f\x24\x08\
+\x0d\x70\x30\x2b\xdc\x94\xc0\xa1\xdb\xca\x38\x41\x46\x6c\xde\x97\
+\xc4\xaa\xbd\x69\xb8\x13\x51\x47\xf8\x11\xac\x86\x86\xee\x0e\x0d\
+\xae\x40\xc5\x0b\x86\x24\x6c\x0b\x29\xc7\x89\xc1\x69\x0e\x42\xab\
+\x2c\xe1\x89\x10\x14\x0d\x24\x63\xa1\x3d\xc0\x8a\x3b\x80\xe9\xc2\
+\xc6\x15\x56\x24\x3c\xa1\xc6\x7e\xe0\xaa\xe3\xf9\xff\x3f\x20\xeb\
+\x8a\xcf\x90\x4d\x73\x34\x74\x9d\x05\x5b\xbd\x17\x41\x7a\x00\x41\
+\x08\xf8\x33\x92\x32\xc1\x87\x42\x19\x20\x24\x4d\x5a\x50\x26\x94\
+\x11\x20\x2b\x6c\xf2\x3b\x3e\x67\xd5\x16\x78\xfa\x35\x33\x38\xf6\
+\x2a\x8e\x2d\x4f\xa7\xb1\x66\x6f\x12\xd5\x42\x15\xbe\x1f\x10\xeb\
+\xec\xea\x0b\x95\xd5\xf2\x50\xc7\x8e\x63\x43\x75\x80\x36\xa0\x5e\
+\x46\xd9\x13\x90\xea\x59\xf9\x3c\x03\xf4\x24\x91\x4a\x2c\x6c\x82\
+\x03\x2f\xe4\x34\x5e\xf8\x1e\x4c\x81\x67\x4c\x64\x57\xf4\x01\x5d\
+\x7b\x10\xa4\x06\xe2\x4a\x97\x22\x68\x0d\x1f\xc4\x2f\x16\x20\xd9\
+\x5e\x44\x0e\x91\x92\xe8\x61\x45\x8c\x99\x2e\x3a\xbd\x0c\x72\x01\
+\x19\xa1\xcf\x5b\x35\x05\x0e\xee\x28\xe1\xe8\x36\x86\xad\x87\x33\
+\x58\xbf\x3f\x09\xaf\x58\x55\x7b\x84\xea\x88\x08\x1a\x22\x36\x41\
+\x2b\x99\xa0\x0e\x48\x38\x60\x02\x1a\x5c\x73\x48\x60\x4a\x88\x49\
+\x54\x10\x00\x10\x8b\x5d\x06\x05\xaa\x43\x13\x70\x3a\x9a\x74\x95\
+\x67\x99\xe0\x4b\x4b\x8d\xeb\x42\x81\x67\x52\x26\x32\x1d\x04\xde\
+\xb1\x07\x5e\x62\x20\x86\x9d\x22\x68\x55\x6d\x20\x14\x42\x9f\x27\
+\x04\x8c\x0a\xd0\x78\x02\xc8\x9f\x04\x26\x24\xe0\xc6\x97\xba\x71\
+\x54\x50\x60\x2e\x1a\x99\x85\xce\x4a\x0a\x39\xdf\xaa\x75\x04\xe9\
+\xc0\xa6\x2a\x8e\xac\x63\xb8\xe1\x78\x16\xdd\x87\x93\x74\xfe\x80\
+\x0a\x22\x5e\xe8\x08\xa8\xac\x0d\x48\x39\x0a\xbc\x26\xa9\x0c\xa9\
+\x7a\xee\x79\x00\x25\x52\x30\xcf\x00\x3d\x39\x8d\x99\x33\xe7\x90\
+\x58\xd1\x04\x39\x77\x43\x03\xc1\xf0\x1a\x38\xe7\x0a\x3c\xdd\x76\
+\x06\xb2\x8d\xc0\x9d\x0b\xb5\x8a\x07\x71\xd5\x75\x5f\xc6\x86\x1b\
+\x33\x31\x74\xc3\x73\x00\xf7\x01\x3f\x2a\x09\x00\x7d\x53\x29\x01\
+\x6d\x84\x87\x82\xe5\xa3\x51\x18\xe8\x9a\xb6\x91\xf3\x0c\x70\x05\
+\xc1\xe0\x01\xd8\xbf\xb6\x8c\xc3\x5d\x1c\xdb\x4f\xe5\xb0\xf1\x64\
+\x06\x7e\x19\xf0\x24\xf4\x72\x10\x64\x80\x8d\x54\x52\x1b\x80\xb8\
+\xf5\xa1\x3b\x61\x64\x26\x3c\x00\x60\x6c\xc1\xfb\x00\x3d\x39\x81\
+\xe9\x13\xc7\xd0\xfc\xda\xed\xca\xb2\x59\x26\x00\x55\x5f\x2a\xf0\
+\x74\x92\x5c\x5e\xd6\x0b\xd9\xb2\x1b\xae\x15\x55\x5c\xe8\x8a\x4b\
+\x84\x24\x40\xc1\x6b\xf0\x32\x41\x9f\x20\x9d\xaa\x81\x57\x01\x4c\
+\x92\x5c\x52\x1f\xa9\x61\x21\x23\x02\x14\xd2\x01\x1a\x39\x47\xd7\
+\x24\x43\xde\xd5\x9f\x3d\x02\xb1\x11\x5d\x33\x38\xdc\x4e\x46\xf4\
+\xe5\xb0\xb9\xa7\x11\xbe\xb4\xc9\x08\x03\xb6\x41\x45\x89\x0c\x00\
+\xf4\x12\x60\x0a\x7e\xc8\x75\xcf\xee\x2a\x5e\xfc\x0f\xc5\x08\x04\
+\x8b\x19\x30\x8a\xb3\xf7\x7d\x1f\xed\x6f\x7f\x0b\x9c\xf6\xe6\xb9\
+\x26\xf8\x21\x60\x27\x27\xd1\x7c\xdd\x5e\x54\x93\xbd\x98\xae\x96\
+\x51\x75\x43\x9a\xd7\x55\x96\x75\xe0\x5c\x83\x67\x4e\xd7\xc0\x3d\
+\xdd\x80\x2e\x6a\x11\xea\x9a\x14\xb4\x09\xa9\x7a\x23\x80\x71\x43\
+\xa0\x90\x07\xf2\x15\xa0\xb3\x08\xe4\x5c\xc4\x4b\x43\x02\x15\x84\
+\xd8\xb7\x6a\x1c\xcf\xad\xa8\xe0\xc6\x63\xcd\x58\x35\xd9\x04\xce\
+\x39\x12\x8e\xa5\x0c\xe0\x92\x04\x46\x45\x11\xde\x03\xc3\xe7\xbf\
+\xa0\xed\x2e\x2d\x78\x2b\x4c\x73\x82\x31\x36\x05\x6f\xf4\x38\x9e\
+\xfb\xe4\xd7\xb1\xf5\x1b\x9f\x00\xb3\xcc\x7a\x13\xbc\x40\xca\xc0\
+\x18\xc2\xc5\xf1\x43\x70\x8c\x75\xc8\xa7\xb2\x90\xf6\x08\xa6\xc3\
+\x22\x66\xfc\x69\x04\xc2\x8f\x5b\x3d\x43\xe0\xa9\x08\x3c\x88\xfb\
+\xd3\xd7\xef\x4c\x3c\x2c\x1e\x81\x5e\xec\x05\x6d\x42\x72\xb6\x11\
+\x13\x06\x50\x6c\x02\x72\x15\xa0\xab\xc4\xd1\x11\x64\xd0\xe1\xe5\
+\x90\x1c\x91\xe8\x2d\x8d\xe2\x38\x2b\x61\x83\xdd\x06\xcb\x30\x24\
+\xe7\x2c\xba\x12\x28\xf8\x6a\x10\x7a\x0f\x0d\x9c\xfb\xf2\xa1\xc9\
+\xc2\x2f\x01\x5c\x24\xf9\x97\x7a\x33\xe4\x91\x86\x30\xf2\xd3\x9f\
+\xe0\xfc\xbf\xaf\xc7\xca\x0f\xde\x09\x70\xa6\x4d\x88\x37\x34\x3a\
+\x0c\xbd\x00\x2e\x3f\x85\x49\x5f\x22\x65\xb5\xa0\xd1\x5e\x87\xd5\
+\x0d\x5c\xb6\xb5\xf7\x4a\x2f\x39\xc8\x47\x2b\xc0\x68\xb9\x11\xe5\
+\xe8\x83\xcb\xc9\x32\x84\x27\xb0\x60\x30\x2c\x18\x7a\x89\x28\x13\
+\xac\xa4\x85\xb4\x93\x46\x73\xb2\x19\x4d\xc9\x26\x91\x43\xc3\x70\
+\xa5\x38\x53\x1e\xee\xbb\xd0\x74\xfe\xe2\x40\x53\xa6\x12\xef\xf0\
+\xcd\x3c\x03\x87\x2a\x6f\x70\x0e\x93\x71\x44\x31\x63\xb0\xd2\xa7\
+\x9f\x3e\xf4\xf9\x1f\x9f\x3b\xf7\x43\xfd\x06\xb1\x22\x29\x16\x35\
+\x40\x77\x41\x09\x40\x0f\x4e\x7d\xfa\x1e\x54\x47\xa6\xb1\xfe\x23\
+\x7f\x0e\xe6\xd8\x60\x80\x1f\xea\xfb\x5a\x11\xaa\x04\x29\x50\xc6\
+\x19\x94\x13\xdf\xc7\x40\xa2\x97\x25\x7c\x03\xd7\xd9\xd7\x8d\x6c\
+\xcc\x6d\xc4\x6d\xcd\xb7\xa5\xda\xd3\xed\x4e\x73\x43\xb3\x59\x0d\
+\xaa\xcc\x0d\x5c\x94\xbd\x32\x66\xaa\x33\x98\xaa\x4e\xa1\xe4\x96\
+\x30\xe5\x4e\x51\xc5\x2c\x64\x9d\x2c\x92\x56\x12\x29\x3b\x85\x84\
+\x95\x80\x63\x3a\xb0\x0d\x5b\x8a\x40\x84\xe3\xa5\x71\x6f\xa4\x32\
+\x52\xee\x2f\xf5\xbb\x3d\x17\x7a\x1a\xc7\xa6\xc6\x3a\xe0\x23\xde\
+\x0f\xf2\x40\x83\xcd\xd0\x56\x62\x90\xe0\x48\x70\x1b\xb6\x61\x84\
+\x64\x82\x75\xf8\xe2\xe8\x91\x7f\xd8\xbd\xf7\x2b\x07\x86\x47\xf7\
+\x01\x18\x24\xcd\x48\x8a\xcb\xfb\x78\x9c\x31\x8b\x52\x8e\xb4\x16\
+\xad\xaf\x7f\x23\x36\x7d\xee\xc3\xb0\xdb\x9a\x4d\x7f\xc8\x0d\x32\
+\xa5\x04\xb2\xf7\x03\x56\x19\xc8\x1c\x03\xb2\xbd\x34\x0e\x48\xba\
+\xa2\x7e\x9d\xb5\x24\x27\xe1\xa0\x23\xd1\x21\x3a\x8d\x4e\xd1\x68\
+\x37\xca\x8c\x9d\x61\x79\x3b\x2f\x73\x66\x8e\x35\xd8\x0d\x08\xc2\
+\x00\xc5\x4a\x11\x85\x4a\x41\x96\xaa\x25\x4c\xba\x93\x6c\xa8\x32\
+\xc4\x2e\x94\x2f\x18\x85\x72\x21\x3e\x5f\xa0\xd7\x01\xaf\x7b\x0e\
+\x2d\x16\x90\x3c\xa0\x79\xc2\x7a\xf6\x73\xe5\x1b\x8d\xce\xce\x16\
+\xf3\x91\xbe\xfe\xef\x7e\xfb\x59\xf5\x11\x7f\xbf\x5e\x54\xd5\xa8\
+\xb8\x57\xf0\x45\x49\xfd\xce\x90\xf0\x48\xed\x30\xb2\x1b\x71\xfd\
+\xa7\xde\x87\xa6\x5b\x77\x22\x3b\x98\x42\xfb\xdf\xa7\x90\xee\x07\
+\x6c\x05\x1e\x87\xd0\xd9\xaa\xc1\xc3\xaa\xcb\x86\xce\x24\x15\x41\
+\x9d\x7c\x0d\xe8\x2f\x31\xa7\x8d\x50\x21\x6b\x3f\xd3\x7b\xcc\xa3\
+\x78\x02\x9f\x41\x1c\x45\xd2\xb8\x7e\xd3\x13\x48\x8a\x2b\xfe\x8a\
+\x8c\x94\x32\x54\x9b\x22\x50\x45\x58\x2a\xe0\xf8\xdf\xf5\x23\x7f\
+\xd3\x2a\xac\x3f\xde\x8d\x55\x95\x2f\x80\xe9\x17\x13\x90\x58\x1d\
+\x28\x27\x19\x5a\x7c\x4e\xd6\x52\x21\xb5\x84\x9e\x93\x3a\xcf\x9b\
+\xd3\xc7\x5c\x4b\xd4\x81\xd7\x63\x71\x35\x7b\xaa\xee\x55\x85\xaa\
+\xea\xbf\xcd\x97\xa4\xf4\x09\x2a\x64\x84\x47\x79\x0a\xc5\x83\xcf\
+\xa3\x01\x36\x84\xde\xa8\x78\x0d\x5a\x4b\x03\xcf\x85\x5e\xc2\x00\
+\x39\xe7\xb8\x06\x3d\x5f\x4c\xe7\xfa\x02\x08\x25\x5b\x43\x57\x5e\
+\xdc\x2f\x4b\xeb\x6e\xd0\x27\x2e\xe1\x24\x7e\x8d\x7e\x7c\x0d\x33\
+\x18\x9c\x0b\xba\xc4\xf1\xa2\xaa\x19\x37\xcf\xcc\xa5\x4d\x90\x70\
+\x31\x41\xcd\xff\x3c\xee\x8d\x66\xa2\xb8\x6a\x5f\x96\xa6\x73\x73\
+\xfd\x21\x4d\x3b\x69\x0d\xb6\xe0\x76\x6c\xc2\x5b\xd0\x89\x6e\x24\
+\x60\xc3\x9a\xb7\xf6\x6b\x32\x17\xd8\x03\xfc\xd9\x59\x8f\x97\x3e\
+\xf6\x20\x09\x7a\x04\x17\xb0\x1b\xc7\xf1\x18\x5c\x9c\xd0\x97\xb9\
+\x22\xf1\xf8\x57\xcb\x80\x7a\x13\x1c\x6d\x44\x63\xbc\x49\x62\x39\
+\xb6\xe1\x55\x58\x87\x57\x62\x05\x36\xd0\x51\x3b\x1c\x18\x57\x6c\
+\x80\x7f\x89\xb9\x22\x8a\x84\xdc\x87\x21\x1c\xc1\x69\xec\x47\x01\
+\x7d\xfa\xc6\x66\xb4\x76\x7f\xa9\x37\xbc\xab\x66\xc0\x7c\x23\x4c\
+\x6d\x46\x52\xdf\xd1\xe7\x95\x29\x49\xb4\xa0\x9b\xec\xe8\xc4\x1a\
+\xb2\xa2\x03\xcd\x68\x27\x35\x23\x8d\x04\x92\xb0\x55\xaf\x18\xda\
+\x16\x17\x02\x15\xf8\x2f\xa8\x0c\x0f\x93\xf4\xa7\x40\xb8\x13\x18\
+\x24\xbc\x73\x78\x9e\x60\xc7\x30\x00\xa0\xa0\x55\x24\x95\xf5\x4e\
+\xe4\x91\x84\x06\x7f\xe9\x7f\x5f\x40\xaf\xb9\x48\x46\x9d\x21\x36\
+\x29\x51\xbb\xa9\x55\x39\x51\xd7\x0b\x86\x16\xab\xdb\xfa\x82\x5a\
+\x56\x60\x95\x08\x52\xe7\x19\x0d\x4a\xd2\xbd\xb1\x14\xf4\xd5\x37\
+\x60\x69\x43\x16\xd9\xce\x50\xcb\xda\x80\x38\x44\x2d\xab\xb9\x50\
+\x8f\x43\x2d\xb9\x10\xf0\xcb\xc9\x80\xa5\x8d\xb9\xcc\x50\xa0\x2f\
+\x51\x5c\xfb\xd5\x59\xe0\xda\x6f\x8d\x5d\x33\xe0\x9a\x01\xbf\xc3\
+\xf1\xbf\x9d\xd2\xae\xe2\x5a\xef\x69\x4e\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x1b\x48\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\
+\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x1a\xc5\x49\x44\
+\x41\x54\x78\xda\xcd\x7b\x0b\x5c\xcf\xf7\xf7\xbf\xf9\xee\xc6\x30\
+\x14\xdb\xd7\xfd\x32\x66\xc6\x66\xc3\xd8\xec\x8a\x51\x51\x2a\x42\
+\xae\xb9\x35\x84\xb9\x33\x86\xe6\xba\x94\x6b\xc9\xa5\x74\x2f\x11\
+\xa9\x24\x95\x8a\xe4\xbe\xdc\x72\x0b\x45\x49\x4a\x4a\xf7\xcb\xa7\
+\xcb\xe7\xf9\x3f\xcf\xd7\x47\xf3\xdd\x77\xdf\xff\x77\xfb\x7d\xc7\
+\xf0\x78\x9c\xf5\xde\xfb\xf3\x7e\x9d\xf3\x3c\xe7\x75\x5e\xe7\xf5\
+\x7a\x9f\x73\xde\x35\x00\xfc\x65\x5a\xbf\x7e\xbd\xbe\x87\x87\xc7\
+\x48\x77\x77\x77\xcb\xad\x5b\xb7\xb6\x5f\xb0\x60\x41\xcd\xff\xf6\
+\xfc\xa6\x4d\x9b\x6a\xb9\x07\x44\xce\xf1\x39\x7a\xcf\xca\x3b\x26\
+\x65\xa2\x47\x40\xf8\x4f\x32\x76\xd2\xce\x9d\x3b\xad\x5c\x5c\x5c\
+\xc6\x0a\x4d\x12\x9a\xbc\x63\xc7\x0e\x5e\x8f\x70\x75\x75\xed\x2d\
+\xfc\x9b\x71\xec\xd3\xa6\xbf\x34\x38\x28\x28\xa8\xf6\xee\xdd\xbb\
+\x8f\x87\x87\x87\x17\x47\x47\x47\xe3\xe8\xd1\xa3\x90\xbf\x15\xb1\
+\xb1\xb1\x5a\xf9\x2d\xf3\xc0\x81\x03\x39\x01\x01\x01\x09\xfb\xf7\
+\xef\x4f\x15\xba\x11\x12\x12\xf2\xe0\xd0\xa1\x43\x05\x31\x31\x31\
+\xda\x5b\xc9\x77\x50\x5c\x56\xa9\xe8\xc6\xad\x64\xc8\x18\x35\xf6\
+\xd4\xa9\x53\x88\x88\x88\x28\x38\x71\xe2\x04\xc2\xc2\xc2\x1e\xc9\
+\xb3\xfc\x5b\x10\x19\x19\x09\xa1\x22\xe1\x1b\xb7\x61\xc3\x86\x56\
+\x2f\x84\x01\xbc\xbd\xbd\x03\x05\x60\x85\x28\x19\x2b\x33\x64\x2d\
+\xb3\x38\xd5\xc7\xc7\x67\x9d\xbf\xbf\x7f\xe0\xae\x5d\xbb\xa2\x45\
+\xe1\xdb\x02\xf8\x4a\x58\x70\x60\x8e\xb7\xdd\x92\x87\x7b\xf7\x05\
+\x95\xee\xda\x1d\x58\xe6\xe2\xb9\xb7\x6c\xf9\xd6\xb0\xf2\xb9\xce\
+\xa7\x2a\xe7\x6f\x3b\x53\xb9\xd6\x3d\xae\x6c\x93\x67\x4c\xe1\x36\
+\x8f\x43\x99\xde\x1e\x81\x57\xc3\x67\x98\xaf\xda\xe3\xb0\x6c\xa2\
+\xf0\x1c\xec\xe7\xe7\x37\x55\xe4\xcc\x17\x9e\xbb\xf6\xed\xdb\x77\
+\x4e\x8c\x53\x29\xc6\xaa\x14\x6f\x19\xf2\x5c\x0d\x20\xb3\x50\xff\
+\xd8\xb1\x63\x5a\x01\x75\xea\x3f\xfd\x7e\xd2\xb0\x51\x97\x63\x03\
+\x1a\x6e\x3a\x32\x50\x2f\x39\x66\x60\x43\xed\xd1\xc1\x4d\x71\x39\
+\x25\x1f\x57\xd3\x0a\x90\x78\xaf\x08\xc9\x19\x45\xb8\x9d\x49\xd2\
+\x5d\x27\x09\xdd\xb8\x57\x88\xab\x77\x0b\x70\x6d\x58\x6b\x24\x98\
+\xbc\xa5\xfd\xc5\x50\xff\x97\xf3\x06\x7a\x0b\xe3\xfb\xe9\x75\xa8\
+\xe6\x2b\x4b\xac\x63\x70\x70\x70\x8a\x78\x5d\xce\x73\x35\x00\xd7\
+\xac\xb8\x6c\x95\xa7\xa7\xa7\x55\xf5\xbd\xab\xfd\xeb\x35\x8c\x37\
+\xd2\x5f\x15\x6f\xa0\x77\xfb\xe2\x80\x46\xb8\x36\xb8\x09\x6e\x8d\
+\x68\x89\x3b\x56\xef\x20\xcd\xe6\x43\x64\xe7\x97\x21\xb7\x50\x83\
+\xfc\xe2\x72\x14\x94\xe8\xa8\xb0\xa4\x82\x7f\xd5\xbd\xdc\x22\x0d\
+\x72\x0a\x34\xb8\x3f\xf3\x63\xa4\x59\x77\xe0\x38\x8e\x57\x7c\xce\
+\x0d\x68\x7c\x9b\xbc\x29\x43\x8c\x1e\x15\x17\x17\xa7\x7d\xae\x06\
+\x10\x97\xdc\x2d\x6b\x1c\x02\xa6\xd9\x49\x8b\x66\xb5\xe2\x0d\xf4\
+\x17\x9d\x33\xd0\x2f\xb8\x6c\xfa\x36\x6e\x5a\xb6\x40\xca\xf8\x76\
+\xb8\x3f\xf5\x7d\x3c\x9c\xd5\x05\x39\x0b\x7b\x20\x6f\x65\x5f\x54\
+\x54\x56\xa1\xb2\x4a\x8b\x2a\x92\x56\x0b\xad\x22\x5e\xab\x7b\xfc\
+\x4d\x3d\x93\xb7\xd6\x08\xb9\xb6\x5f\x72\x1c\xc7\x93\x0f\xf9\x29\
+\xbe\x97\x4c\xdf\x2e\x88\x99\x63\x71\xed\x60\x70\x60\xf1\x73\x35\
+\x80\xaf\xaf\xef\x51\x59\x9f\xda\x0b\x03\xdf\x9a\x28\xca\x3f\xa0\
+\xe2\xb7\x46\xb6\xc2\xdd\x49\xef\xe2\xc1\xf7\x1f\x20\xe7\x07\x51\
+\x7a\x45\x6f\x14\x38\x0c\x40\xd1\x96\x21\x28\x71\xb3\x42\x59\x05\
+\x50\xa2\x01\x8a\x84\x0a\xcb\x74\x54\x50\xaa\xfb\x5b\x24\x54\x2c\
+\xf7\x4b\xcb\x85\x7c\xbf\x43\x89\xcb\x48\x8e\xe3\x78\xf2\x21\x3f\
+\xf2\x25\x7f\x25\xe7\xfc\xf0\x76\xda\xf3\x06\x0d\x27\xec\xb1\xa8\
+\xf1\x8f\xe7\x62\x00\xb7\x2d\x9b\x6e\x6e\x75\x72\xc2\xa5\x81\x8d\
+\x38\x33\x0a\x58\xd6\xcc\x0f\xf1\x68\xc9\xe7\xc8\xb7\x33\x50\xe0\
+\x4b\xdd\xc7\x42\xe3\x3f\x19\x15\x41\xb3\x50\x19\xb9\x04\x0f\x0b\
+\x81\x07\x05\x40\x46\x3e\x70\x3f\x0f\x48\x57\xa4\xbb\xce\x10\xca\
+\x94\xfb\x59\xf2\x4c\xd5\xd1\x15\xa8\x0a\xff\x81\xe3\x38\x9e\x7c\
+\xc8\x8f\x7c\xc9\x9f\x72\x28\x8f\x72\xb9\x34\xae\x9c\x37\xaa\xdf\
+\xf2\x6f\x35\xc0\x39\xc3\x06\x9f\x3b\xaf\x58\xa4\xdd\xb0\x7e\x3d\
+\x6e\x5b\xb5\x45\xe6\xf4\xce\x78\xb4\xf8\x53\x9d\xe2\xce\x43\x51\
+\xe6\x33\x11\x15\xfb\x67\xa2\x2a\x62\x11\x10\xb3\x0c\x88\x5e\x02\
+\xed\xe1\x1f\x71\xfb\x21\x90\x94\x05\xdc\x7c\x00\xdc\xc8\x04\x12\
+\x9f\x90\xba\x77\x4b\x7e\x4b\x96\x67\xb4\x11\x0b\x80\xc8\x85\x1c\
+\xc7\xf1\xe4\x43\x7e\xe4\x4b\xfe\x94\x43\x79\x94\xab\xe4\x27\x98\
+\x35\xcd\x25\xa6\xbf\xc5\x00\xbf\x18\xea\x4d\x3c\x6f\xa8\x5f\xe1\
+\xb2\x6a\x11\xdc\x76\x6c\x45\xf6\xdc\x8f\x65\x7d\xf7\x41\x91\xd3\
+\x60\x94\x79\x4f\x50\xb3\xa6\x7d\xac\x34\x22\x45\x91\xb0\x19\x40\
+\xd0\x04\x68\x03\x46\xe0\xd2\x3d\xe0\xc2\x5d\xe0\x5c\x2a\x10\x9f\
+\x02\xfc\xf2\x84\xd4\xbd\xf3\xf2\xdb\xc5\x34\x40\xeb\x63\x02\xec\
+\xb6\xe0\x38\x8e\x27\x1f\xf2\x23\x5f\xf2\xa7\x1c\xca\xa3\x5c\xca\
+\x57\x01\x33\x71\x58\xf3\x0a\x62\x7b\x66\x06\x90\x47\x5f\x3a\x6b\
+\xa0\xb7\xe9\x82\x91\xbe\x8a\xcc\xbe\x9b\xed\x10\x12\x1c\xa4\xd6\
+\x68\x89\xeb\x28\x94\xef\x9d\xc6\x59\xd6\x29\x1e\x31\x0f\x08\xf9\
+\x4e\xa7\x84\xdb\xd7\xc0\xe6\x0e\xa8\x5a\xd3\x08\xc7\x93\x80\x63\
+\x37\x81\xa3\x37\x80\x23\x42\x31\x89\x5a\x44\x5f\xd7\xf2\x5a\x51\
+\xac\xfc\x76\xfc\x16\x50\xb1\xec\x75\x60\x65\x5d\x8e\xe3\x78\xf2\
+\x21\x3f\xf2\xad\xf6\x26\xca\xa3\x5c\x25\x3f\x67\x51\x4f\xa4\x4f\
+\xe9\xa8\x70\x9d\x35\x6c\xb4\x89\x58\x9f\xba\x01\x4e\x19\x34\xb6\
+\xbb\x38\x40\x1f\x49\x12\x80\x32\xa6\x75\x82\xff\x16\x3b\xec\xf7\
+\xf7\x56\xb3\x51\x19\x3a\x57\xb4\x59\xaa\x73\xdb\x03\x53\x00\xff\
+\xc1\xc0\xb6\xee\xc0\x9a\x86\xa8\x5a\x5c\x03\x9a\x85\x35\x51\xb4\
+\xe0\x0d\x04\x9e\x2b\x83\xff\x99\x12\x78\x9f\x28\x82\x47\x5c\x21\
+\xdc\x8e\x15\x28\x72\x97\x6b\x2f\xb9\xe7\x77\xaa\x18\x7b\xe3\x4b\
+\x51\x30\xaf\x0e\x4a\xe6\xfe\x83\xe3\x38\x9e\x7c\xc8\x8f\x7c\xc9\
+\x9f\x72\x28\x8f\x72\x95\xfc\xc2\x4d\xa6\x78\xb4\xf4\x0b\xe2\x52\
+\xf8\x4e\x19\x35\xb6\x7b\xaa\x06\x38\x6d\xa8\x37\xe2\x82\xa1\x1e\
+\x99\x73\xdd\xa9\x2d\x2a\xd8\xcf\x1d\xe1\x07\xf6\x73\x7d\xea\x66\
+\x3d\x7c\x36\xb0\x77\x24\xe0\xda\x0b\x58\x5d\x1f\x95\x8b\x5e\x42\
+\xe9\xfc\x9a\x28\x9c\xf5\x32\xb2\x6c\xea\xe0\xe6\xc4\x36\xd8\x28\
+\x67\x97\xb5\xa1\x59\x58\x15\xf4\x00\x3f\x05\x66\xc0\x76\x5f\x06\
+\x96\xed\xbd\xaf\xae\x57\x06\x65\xe2\xe7\x90\x2c\xac\x0f\xcb\x46\
+\xe2\x84\x36\xc8\x9c\x5c\x17\x79\x33\x5e\xe1\x78\xf2\x21\x3f\xf2\
+\x25\x7f\xca\xa1\x3c\xca\x55\xf2\x35\xbb\xbe\xe3\x92\x20\x2e\xe2\
+\x53\x38\x89\xf9\xa9\x18\xe0\xac\x91\x7e\xb7\x73\x06\x7a\xe5\x37\
+\x2d\x5b\xd2\xc2\x14\xa2\x22\x72\x58\xa0\x3f\x0e\xf8\xb9\x00\x51\
+\xe2\xf6\xa1\x36\x80\x9f\x09\xb0\xa1\x2d\xaa\x7e\xac\x81\xb2\xc7\
+\x8a\xdf\x9b\x5c\x1f\x97\xc6\xb6\xc1\xa9\x51\x9d\x71\x7a\x54\x27\
+\xcc\xf1\xbe\x8b\x99\x3b\x2e\x6b\xa7\xd9\x47\x95\x58\x2d\xd9\xf5\
+\xd0\x74\x86\xd3\x6d\xb3\xe9\x4e\xb7\xc7\x2d\xf1\xcb\xb6\xb1\x8f\
+\x2c\x9d\xb1\x2d\x41\x3b\xd3\x33\x85\xcf\xaa\x31\x17\xc7\xb4\x45\
+\xea\xc4\x06\xc8\x9d\xf6\x2a\xf9\x91\x2f\xf9\x53\x0e\xe5\x51\xae\
+\x92\xaf\x8d\x5a\x02\xcd\xee\x29\xc4\x45\x7c\x0a\xe7\x75\xcb\x96\
+\xe5\xc4\xfe\x97\x0c\x10\xdf\x5f\xff\x9f\x67\x0c\xf4\xb3\x13\x87\
+\x36\xe3\x1a\x53\x5b\x50\x91\xa3\x39\x72\xbd\xac\x71\x3c\x2e\x0e\
+\xe1\x5e\x1b\x80\x10\x6b\xc0\xa3\xaf\x9a\x9d\xf2\x1f\x5e\x42\xf1\
+\x9c\x7f\x20\x6b\x6a\x6d\x9c\x1d\xd5\x16\xc7\x2c\x3b\x2a\x8a\x1b\
+\xde\xae\xd2\x75\x60\xbb\xb4\x6f\xbe\xec\x73\xe0\xe3\x8f\x3f\x76\
+\x16\x5a\x2f\xb4\xea\xa3\x8f\x3e\x5a\x4a\xe2\x35\xef\xf1\xb7\xde\
+\x5f\xf5\x3e\xb0\xd5\xa8\x5d\xca\x91\xa1\xed\x2b\xaa\xc7\x9f\x19\
+\xf9\x0e\xd2\x27\xd5\x41\xde\xf4\x57\xc8\x9f\x72\x28\x8f\x72\x75\
+\xf2\x0f\x2f\x62\x80\xa4\x11\x88\x8f\x38\x15\xde\x04\x8b\xe6\xd9\
+\xd4\xe1\x7f\x36\xc0\xf1\xfe\x8d\x4e\x5f\x31\xfb\x27\xf7\x5c\x75\
+\x10\x29\xdc\x38\x08\x65\x7e\xd6\x38\xed\xb7\x06\x91\x11\x11\xb8\
+\xea\xbb\x10\xd8\xf9\x25\x60\xfb\x0a\x34\x0b\x64\xd6\x67\xbe\x8c\
+\xd4\x49\xf5\x70\x74\xf8\x3b\x88\x1e\xd6\x0e\xe1\x43\xda\x94\x2c\
+\xeb\xd3\x2e\xbe\x6b\xd7\xae\x1b\x44\xb9\x39\xa2\xec\x10\xb9\xfe\
+\xec\x43\xdd\xbf\x76\x5d\xba\x74\x69\x4a\xe2\x35\x6f\xf0\x37\x3e\
+\xc3\x67\x39\x66\xda\x57\x1d\x8f\x1f\x1c\xdc\xa6\x98\xbc\xc8\x33\
+\x79\x5c\x7d\xe4\x4c\x7d\x8d\x72\x28\x8f\x72\x75\xf2\x83\x27\x01\
+\x51\x8b\xe9\x09\xc4\x47\x9c\xc4\xab\x70\x9f\x19\xd4\xe4\xf4\xff\
+\x64\x80\xb8\x7e\xfa\xc6\x8c\xf8\xc9\x63\xda\x20\x7b\xce\x47\xc8\
+\x5f\x6b\x88\x52\xcf\x71\x28\x0d\x5b\x8c\xa8\x88\x30\x84\xca\x12\
+\xd0\xee\xfc\x1a\x58\x56\x53\xb9\x66\xfe\xf7\xaf\xe0\xfa\xb8\x06\
+\x38\x64\xd1\x06\x91\x16\xad\xb4\x73\xbe\x69\x7f\x56\x94\x58\x2b\
+\x0a\x0e\xa7\x72\xa2\x94\xbe\xd0\x2b\x7f\xe4\x92\x7c\x86\xcf\x72\
+\x0c\xc7\x92\x87\xcd\x97\x1d\x4e\x46\x0c\x69\x5d\x45\xde\x97\x47\
+\xeb\xe1\xe1\xe4\xd7\x28\x8f\x72\x29\x9f\x3b\x05\x3d\x81\x31\x81\
+\x07\x28\xe2\x24\x5e\xe2\x56\xf8\xe3\x0c\xdf\x36\xfe\xbf\x19\xc0\
+\xb6\x46\xcd\xe3\xfd\x1b\xa7\xca\xde\xaa\x5b\xf7\xcb\xbf\x91\xa3\
+\xe9\x08\x54\x84\xcc\x46\xd4\x3e\x0f\x99\xfd\x70\x9c\x71\x9e\x0c\
+\x2c\x7f\xfd\x57\xe5\xcf\x8f\xd6\x47\xc8\xe0\x96\x08\x1d\xdc\x5c\
+\x63\xdc\xb3\x93\xb7\xcc\xe4\x58\x51\xa4\xb3\xd0\xeb\xff\xeb\x29\
+\x8d\x63\xc9\x83\xbc\x8c\x3e\xe9\xec\x15\x6a\xde\xa2\x92\x32\xce\
+\x8e\x68\x84\xac\xef\x5e\xaf\x36\x82\xc2\x01\xaf\xfe\xc0\xc1\x69\
+\x34\x02\x71\x12\x2f\x71\x2b\xfc\xf1\x43\x5a\xa6\x52\xa7\x3f\x6d\
+\x80\x98\x7e\x8d\xa7\x26\x18\x37\xe6\x0b\x08\x5f\x48\x64\x9b\x31\
+\x83\x66\x8f\x0d\x0e\x07\xec\x54\x89\x8b\x88\x1d\xb6\xa8\x5c\xdd\
+\x48\xb9\x61\x81\x80\xb8\x39\xae\x2e\xf6\x99\x35\x83\xe7\xc0\x66\
+\x0f\xbb\x75\xe9\xb2\x46\x66\xee\x2b\x01\x5e\xf7\x69\x25\x2d\xc8\
+\x8b\x3c\x47\x0f\x1b\x7a\x29\xd0\xbc\xb5\x96\xb2\xae\x8e\xac\x47\
+\x23\x50\xbe\xc2\x81\x9f\x1b\x01\x7e\xa6\x40\xf8\x1c\x9e\x1e\x89\
+\x97\xb8\x89\x5f\xe9\x71\xd4\xe8\xed\xa9\x7f\xca\x00\x47\xbe\x6e\
+\xf5\xfa\x29\x83\x46\x8f\x6e\x0c\x6f\x81\xcc\x19\x9d\x91\xbf\xe6\
+\x5b\x14\x7a\x4c\x40\xa0\xef\x4e\x04\xf8\xfb\x21\xcc\xdd\x1e\x9a\
+\xf5\x1d\x50\x21\x81\x88\x91\x39\x53\x40\xec\x37\x6b\x2c\xca\x37\
+\x79\x24\x20\x17\xca\x6c\x75\x11\xc0\x2f\x3f\xed\xd4\x15\x79\x3a\
+\x38\x38\xc4\x2e\x5e\xf4\x03\x7c\x07\x34\xc9\x0f\x34\x7d\x0b\xa9\
+\x63\x6b\x73\x39\x10\x87\xc2\x03\xc7\x8e\x40\xe0\x18\x06\x45\xd9\
+\x1e\x65\x29\x78\x8c\x25\x7e\xa5\xc7\xc5\xa1\xad\x1e\x51\xb7\x3f\
+\x34\xc0\xa1\x7e\x8d\xe7\x5d\xaa\x9e\x7d\x9e\xb0\x9c\xc7\x62\xfb\
+\xe6\x75\x70\x74\x74\xc4\x41\xd7\x35\x28\x75\xee\x05\xed\x92\x1a\
+\x28\x96\x83\x4a\xce\xd4\x57\x11\x65\xd1\x00\xfe\x26\x8d\xca\x7b\
+\x7c\xd4\xd9\x56\x40\xbe\x23\xa4\x4e\x61\xcf\x82\x24\xf7\xb0\x55\
+\xa8\xf8\xf3\x5e\x9f\xae\xf3\x1c\xf0\x56\x59\x84\x59\x43\xa4\x8f\
+\xaf\x45\x1c\xc4\x43\x5c\x8c\x07\x8f\x97\xc2\x52\x94\x07\xce\xe0\
+\xf9\x80\x7a\x28\x7d\x82\xe6\x8e\x4a\x92\xd7\xf8\x63\x92\xad\xf2\
+\x93\x3c\x66\xad\xff\x68\x80\xf0\x7e\x6f\x5d\xe1\xb6\xc7\xb5\x93\
+\xb0\x61\x12\x7c\xbc\xbd\xb0\x6d\xeb\x56\x1c\xdb\x3e\x4f\x82\x8b\
+\x29\xb0\xf6\x6d\xba\x9c\x3a\xa4\x5c\x1e\xf3\x06\xbc\x06\xd6\xd7\
+\x8e\xe8\xf5\x9e\x97\x04\xab\xce\xcf\x52\x79\x92\xa4\xc8\x4c\x0e\
+\x1e\x3c\x88\xd5\xab\x57\x7b\x9a\xf4\xe8\xec\xea\x31\xa0\x81\xf6\
+\xdc\xb0\x7a\xc8\x9c\xf4\x3a\xf1\x10\x97\xc2\x87\x3d\xc3\xd5\x69\
+\xb1\x2a\x72\xb1\xf2\x82\xbc\xd5\x7d\x95\x3e\x31\xe3\x3f\x45\x68\
+\x68\x68\x16\x73\x96\x7b\xf7\xee\x8d\xfa\x9d\x01\x0e\x7e\xd1\xf4\
+\xcd\x78\x43\xbd\x4a\x46\xce\xa8\x8d\x0b\x21\x09\x4c\x04\xf8\xb8\
+\x23\xd1\x7b\x36\x2a\x82\xac\xb9\xe5\xa8\x83\x48\xd1\xec\x97\x95\
+\xeb\x05\x0e\xaa\x8b\xc5\xbd\x9b\x9f\x13\xe5\x3f\x17\xe5\xd5\x7b\
+\xf9\x33\xa6\x9a\x32\x7b\xd9\x92\x84\x29\x96\xe5\x70\x7b\x89\xf1\
+\x47\x8f\x02\x8c\xeb\x21\x4d\xb7\x14\x88\x8b\xf8\x88\x53\xe7\x05\
+\x31\xe2\x05\x01\xd3\xd4\x51\x39\x7b\x7e\x37\xdc\x1c\xdd\xa6\x92\
+\x3a\x06\x06\x06\x9e\x92\x94\x5a\xe9\xef\x0c\x10\xf0\x6d\x13\x9b\
+\x4b\x66\x4d\x64\x9d\x3b\x21\x3a\xe2\x10\x22\xf6\xf9\x22\xdb\x7b\
+\x12\xb4\x3c\x7b\xef\x1b\x05\x38\x34\xa7\x95\xd5\x81\x24\x6d\x5c\
+\x6d\xb8\x18\xd4\xad\x10\xc5\xc7\x09\x29\x77\xfa\x3b\x48\x92\xae\
+\xef\x4b\x32\xe6\xba\x64\xa3\x35\x4b\x96\x2c\xd1\x6c\x37\x68\x80\
+\x5b\x96\x75\x90\x31\xa1\x16\x71\x11\x1f\x71\x12\xaf\x3a\x1b\x54\
+\x1e\x9c\xaf\xdb\x11\x96\x7d\xa9\xde\x1a\x83\x8c\x9a\xd9\xc8\x32\
+\xd8\xca\xac\xb3\xa4\xdb\xbb\xfc\x86\x79\x88\x49\xfb\xb3\xa1\x5e\
+\xdb\x21\xc9\x4e\x1c\xdd\xb9\x1a\xf9\x2e\xc3\xb8\x96\x74\x91\xd5\
+\xdb\x88\x6b\x4c\x9d\xc4\xb2\xa7\xbc\x86\x93\x43\x6b\xe1\xe7\xde\
+\x8d\xae\x75\xeb\xd6\xad\x2d\xc7\x3e\x0f\xea\xd5\xab\x57\xbb\xc5\
+\x5f\xbe\x7d\xf1\xe8\xa0\x37\xe8\x05\xc4\x45\x7c\xc4\x49\xbc\xd5\
+\x3b\x82\xca\x23\xe4\xff\xdc\x5f\xbd\x27\x44\x9a\xb6\x3a\x21\xf9\
+\xcc\x91\x92\x6a\xcf\x17\x03\x8c\x79\x92\xe1\x59\x35\xad\x76\xb0\
+\xe7\x0e\x6d\xe4\xa1\x30\x9c\x58\x37\x1d\x79\xeb\x0c\x51\xbe\x47\
+\x05\x13\xdd\x1b\xd8\xd6\xae\x8c\xb4\xdc\x76\xd4\x9a\xf3\x1f\xf0\
+\x5a\x95\x51\x8f\xce\x56\xd5\x87\x9b\xe7\x41\x94\xfd\x59\xf7\x0f\
+\x47\xee\xfc\xb6\xb6\xe6\xce\xc8\x3a\xc4\x45\x7c\xc4\x49\xbc\xc4\
+\x4d\xfc\x5c\x06\x3c\x1d\xaa\x83\xd1\x95\x91\x6d\x4a\xdd\x5d\xb6\
+\x7e\x45\x0f\x90\x98\x62\xfb\x2b\x33\x2f\x57\x97\x98\xa8\xc8\x70\
+\xc4\xba\xac\x46\xde\x8e\xc9\x28\xde\x6f\x8b\xb2\x38\x67\x94\x9c\
+\x71\x43\xe1\x61\xb9\xe7\x31\x14\xe9\xf6\x5f\xe1\xfa\xb2\xaf\x70\
+\x66\xf6\xd7\xd8\x34\xa0\x69\x56\xf7\xee\xdd\x55\x81\xe2\x79\x12\
+\x31\xd8\xf5\x6b\x9e\x71\x64\x72\x6f\x9c\x9f\xf7\x0d\x92\xe4\xf0\
+\x93\xb5\xfe\x1b\x14\x78\x0e\x45\x71\xd4\x6a\x68\xce\xba\xa1\xfc\
+\xb8\x33\x4a\x83\x6c\x91\xbb\x7d\x0a\xee\xac\x18\x0e\xd7\x85\x53\
+\x4c\x59\x74\x91\x7a\xc3\x7a\xdd\xec\xbb\xb9\x19\xf1\x80\x13\x7e\
+\x38\x86\xe9\x69\x66\x68\x99\xa4\x64\xee\x8e\xa9\x2a\x66\x6b\x54\
+\x12\xc3\x57\xde\xd7\xd7\x84\x3c\xc0\xd4\x9d\xb7\x31\x7a\xd4\x8c\
+\x48\x99\x81\x3a\xcf\xdb\x00\xc4\x30\x76\xd8\xd4\x18\x2b\xe7\x5b\
+\x58\x12\x70\x1f\x2e\x47\xf3\x11\x71\xa5\x12\x67\xee\x00\xd7\xee\
+\x03\x69\x8f\x80\xdc\x12\x40\x92\xcd\x28\xd5\x54\x22\x3d\xa7\x04\
+\x01\x1b\xec\x1c\x58\x71\x92\x78\xe2\xa1\x98\x48\x76\x37\xea\xe0\
+\xc1\xd0\x8a\xc4\x94\x2c\x14\x95\x56\x00\xd0\x65\x6b\xd3\x73\x81\
+\xc4\x0c\x95\xb2\x62\xe6\x86\xc9\x0b\xf5\x0e\x3f\x7e\xdb\x2d\xf4\
+\x1a\x64\x33\x53\x84\x73\xfc\x73\x25\x62\xf8\xca\xc4\x7a\xee\xf0\
+\x4d\x89\x98\xef\x97\x86\x2d\x87\x73\x71\xe0\x62\x39\x4e\x26\x03\
+\x97\xd3\x81\x94\x1c\x20\xa7\x08\x28\xaf\x04\x34\x15\x55\xc8\xca\
+\x2b\xc3\x01\x27\x87\x7d\xb2\xc3\x15\x8a\xde\xbe\x8a\xc9\xe1\xc3\
+\x87\x35\x41\x7b\xf6\x14\xdf\xcb\x2e\x41\x89\x58\x49\x1c\x00\x79\
+\x25\xb4\x9e\xce\x8a\x67\x6e\x03\xe1\x62\xd5\x1d\x47\xf2\xb0\x78\
+\x77\x3a\x46\x3b\x5e\xc7\x07\x9f\x7e\xdb\x89\x63\x5f\x04\x22\x96\
+\xc1\x0e\x09\x98\xe5\x95\x8a\x0d\x87\xb2\x99\x79\x62\xfa\x8d\x39\
+\x48\x26\x62\x25\x1b\x4d\xe5\x69\x84\x2a\x55\x9c\x89\x74\x75\x3a\
+\x23\x75\x46\xad\x18\x60\x6f\x0d\x9f\x98\x3b\xd3\xf2\x0a\x4b\xb5\
+\x73\x37\x86\x97\xdd\xcf\x29\x45\xa9\x98\x8a\xee\x92\x5b\x0c\xa4\
+\xe6\x00\x57\xd2\x81\x53\x62\x80\xd0\x4b\xe5\x70\x8e\xca\xc5\x82\
+\x5d\x69\x18\x63\x77\x5c\x23\x96\x7f\xfb\x45\x31\x00\xb1\x8c\x5e\
+\x1e\x5d\x35\xdd\xfd\x0e\xec\x43\x1f\x62\xcf\xd9\x52\xc4\xdd\x62\
+\x82\x55\x97\x65\xce\x2a\x50\xf5\x06\x16\x5d\x54\xe5\xc9\x6b\xef\
+\xb1\xbc\xf4\x07\xb9\xd8\x15\x1c\x73\xb2\x86\x94\xa8\x67\xb2\x42\
+\x3b\x7f\x63\x74\x69\xe6\xa3\x52\xba\x89\x3c\x08\x3c\x2a\xa6\xfb\
+\x28\x37\x52\xee\x14\x22\x6e\xe5\x18\xf9\x08\xf3\x7c\xef\x62\xc4\
+\xb2\x90\x1c\x11\xaa\xf7\x02\x19\x40\x6f\xd2\x42\xdf\x32\x1b\xb7\
+\x3b\xb0\x3b\x90\x85\x5d\xa7\x4b\x98\x7c\x65\x06\x5a\xa5\xe1\x1f\
+\xfc\x8b\x01\x1e\x15\x6a\xe0\x19\x1c\xaf\xa1\x21\xfc\x0e\xc4\x9d\
+\xf8\xd5\x00\x0b\x36\x46\x56\x3d\x31\x00\xd7\xcd\x6f\x0d\x10\x7c\
+\x41\xa3\x0c\x30\xd7\xe7\x2e\x46\xae\x88\xc8\x17\xa1\xf5\x5e\x20\
+\x03\xd4\xb3\x5a\x1c\x58\xce\xe0\xcc\xbc\x22\x0d\x10\xfb\x6f\x06\
+\x28\xf9\x57\x03\x04\x9d\x2d\xa7\x01\x7c\x82\x8f\x45\xd1\x00\xb5\
+\xf7\x05\x06\x6e\x3e\xb8\xd3\x55\xfb\x67\x3d\xc0\xd2\xfe\x5c\xa5\
+\x08\x7d\xe3\x05\x32\xc0\x1b\x83\x57\x9e\xd6\xd2\x00\x7f\xc6\x03\
+\xc2\xbd\xdd\xb3\x25\x06\x94\x78\x78\xf9\xac\xa9\x7e\xcb\x0a\x0e\
+\x72\x74\xa8\x62\x0c\x28\xfb\x4f\x31\x20\xf9\x49\x0c\x60\xa4\x65\
+\xc4\xfd\x6c\xac\x7d\xdb\x17\xc5\x00\x5d\x87\xd9\xb7\x35\xb1\xbb\
+\x8c\xea\x18\xb0\xfb\x4c\xc9\x7f\x8d\x01\x41\xae\x5b\x1e\xf0\x20\
+\xb4\x7d\xfb\xf6\x41\x8a\x81\xbc\x5c\xdc\xf5\x72\x58\x55\xf6\xef\
+\xbb\xc0\xdd\x7f\xd9\x05\x0e\x5d\xae\xc4\xf6\x98\x3c\x2c\x92\x5d\
+\x60\x94\xd3\x0d\x18\x4e\x71\x35\x7f\x51\x0c\x60\x69\xf5\xd3\x78\
+\xf3\x75\x57\x7f\xdd\x05\xf6\xc5\xff\x7e\x17\x28\x7b\xb2\x0b\x48\
+\x3d\xc3\xaf\x58\x5e\x88\xd2\xbd\xbc\xbc\x6a\xd5\x90\x7e\x9e\x97\
+\xa5\xcc\xad\xd9\xbc\x62\xd9\x9d\x3b\xf1\xa7\x91\x97\x78\x1e\x95\
+\xf7\xae\xa1\xf0\x5e\x12\x1e\xa6\xa5\x21\x25\x39\x15\x57\x2f\xdf\
+\xc0\xd9\xb8\x93\x08\x0a\x3a\x82\xad\x6e\x87\xb0\xd4\x3e\x10\x8b\
+\x26\x4c\x77\x79\x51\x0c\xf0\xc3\x28\x6b\x9f\x39\x2b\xf6\x62\xdd\
+\x96\x50\xec\xf2\x8f\x46\x6c\xd4\x09\x24\x9c\x3e\x8d\xa4\xc4\x1b\
+\xc8\x48\x4d\x45\x7e\x46\x1a\x34\x99\x49\x28\x4d\xbd\x82\xb8\xb0\
+\x03\x38\x79\xf2\x24\x0f\x41\xfe\x1c\xcb\x46\x87\xc9\x62\x8d\xaa\
+\x79\x53\xac\x9d\x98\x34\x48\x9d\xd8\x5e\xa5\x95\x8b\x77\x58\xa2\
+\x32\x6c\x01\xb3\x2b\x7c\xbf\x56\x69\xe8\xd2\x79\xba\x24\xc8\x3d\
+\xab\xda\x38\x66\xaa\x77\xfd\x45\x31\x40\x48\xbf\xb7\xcf\xde\x1c\
+\x5a\x8f\xb8\x88\x8f\x38\x89\x97\xb8\x89\x5f\xe9\x51\xec\x32\x42\
+\x8e\xf9\xab\x10\x19\x7e\x08\xfe\xde\xee\xf7\xc5\xfd\xd5\x3b\x0c\
+\x5f\x2f\x83\xa5\xc7\x47\x6b\x6e\x6e\xde\xf3\xaa\x55\x7b\x0d\xbb\
+\x32\x72\x16\x7e\xc2\xfc\x3a\x2b\xb2\x4c\x32\xb2\x48\xc9\x3a\x1d\
+\x4b\x55\x4c\x3c\xa8\x57\xcf\x24\xcb\xba\x38\x6d\xd4\xa0\xc3\xf3\
+\x56\x3e\xb6\x6f\xa3\xd6\x17\x07\xd5\xaf\x4c\x16\x3c\xc4\x45\x7c\
+\xc4\x49\xbc\xc4\x4d\xfc\xc9\xbb\x97\x22\x6c\xaf\x0f\x22\xc2\x0e\
+\x62\x97\xb3\x03\x46\x0d\x1e\xd4\xa3\x7a\x3c\x1b\x9d\xa2\xe4\x44\
+\x74\x5f\x22\x69\xe3\xfd\xa6\xed\x92\xef\x8c\x6b\xc7\xfa\x3b\x8b\
+\x8e\xac\xcd\xf3\x75\x92\x15\x5a\x95\x64\xa8\x94\x3a\x1d\xf3\x6f\
+\x4c\x46\xa6\x8e\x7e\x03\xa7\x4c\xf5\xdc\x9f\xaf\x01\x58\xbb\xd0\
+\x0f\x4a\x1c\xfc\x26\xf1\x10\x17\xf1\x11\xa7\xe0\x95\x17\xb7\xc0\
+\x95\x88\x3c\xb0\x17\xf2\x96\x87\xb0\x03\xc1\xf0\x5f\x38\x92\x29\
+\xfb\x02\xea\x5a\x3d\x9e\x3b\x40\x9c\x2c\x81\x12\xb9\xf9\x9a\xf5\
+\x67\xef\x39\xdf\x95\x25\xc0\x96\x14\x96\x9e\x99\x4e\x62\x5a\x89\
+\xe5\x69\x55\x98\x5c\x51\x5b\xb9\xd7\x23\x9b\x57\x91\x2e\x09\x91\
+\x6b\x43\xeb\x95\xc6\x1b\x37\xa9\xfd\x77\x29\x2b\xff\x5e\x92\xbe\
+\xc1\x0f\x25\x78\xb5\xe0\xff\x5f\xea\xaf\xff\xf1\x65\x93\x06\xda\
+\xa4\x61\x75\x15\x9e\x1c\x9b\xd7\x70\x6d\x79\x0f\x84\xb9\xd8\x22\
+\x60\xb7\x1f\x82\x83\xf6\x23\x78\xff\x5e\x04\xad\x9b\x8f\x13\x53\
+\x3f\x46\xca\xe4\x0e\xf0\x30\xef\x14\x46\x5d\xab\x79\xf2\x4d\x70\
+\x8f\x78\x40\xc6\xf1\xe3\xc7\x5f\x92\xe4\x86\xe1\x0d\xab\x76\x15\
+\xa9\x13\xda\xa9\x06\x84\x22\x67\x0b\x54\x04\xeb\x8a\x90\x08\x9e\
+\x08\x6c\xf9\xe0\xd7\x9c\xc0\x03\xeb\xd7\x91\x32\x4a\x79\x81\xff\
+\xb3\x56\x7c\xcb\x96\x2d\x75\xa4\x2d\x2e\x4a\xfe\x56\xd8\xd9\xd9\
+\x55\x3a\x3b\x3b\x63\xdb\xb6\x6d\x05\x5e\x2e\xdb\x2a\xfc\xd6\x2f\
+\x87\x9f\x93\x1d\x5c\x36\xdb\xc3\xc1\xde\x1e\xab\x56\xad\xc2\x36\
+\xe7\x2d\xd8\xe5\xe6\x8c\x18\xa7\xd9\x48\x5a\x67\x82\x07\xf6\x46\
+\x4a\x9f\xdb\x93\x3b\x56\x0e\xfa\xbc\xeb\x6f\x76\x2f\x06\xc1\xb5\
+\x92\x1f\x63\x7a\xe8\x13\xf9\xd7\x3c\xdc\xac\xcd\xfd\x54\x09\x86\
+\x6c\x4e\xe2\x32\x60\xa9\x89\xcb\x40\x65\x57\x7c\x06\xb0\x12\x23\
+\xa5\xeb\x27\x5e\x90\x3c\xbc\x2e\x2e\x19\x37\x18\xfd\xac\x94\xb7\
+\xb5\xb5\x7d\x55\x26\x29\x63\xe5\xca\x95\x55\xa2\xf4\x5d\x31\xc4\
+\x0e\xc1\xec\xef\xeb\xb2\xf5\x56\x80\xb7\x07\xf6\x78\xbb\x21\x28\
+\x70\x2f\x02\x77\x79\x22\x54\x82\xdc\x29\x87\x21\xc8\xd8\xd4\x1b\
+\x79\x5e\xa3\x50\x16\x3a\x97\xf8\xa9\x87\x5a\xd6\x97\xc7\x77\x28\
+\xa4\x8e\xff\x6e\x80\xfe\x92\x23\xcb\x67\x76\x44\x5c\xa3\xf6\xf4\
+\x2f\x3a\x78\xdf\xb5\x7e\x17\xf7\xbe\x7b\x8f\x95\x56\xdd\x6e\x10\
+\x3a\xef\x49\x30\x74\xea\x84\x0a\x29\x55\x17\xce\x64\x2c\x78\x0d\
+\x77\x25\x33\x9c\x68\x51\xaf\xec\xaa\x71\xc3\xf7\x9f\x85\x01\x44\
+\x61\xb7\x35\x6b\xd6\x60\x9b\xfc\xab\xbe\x77\xc1\xa8\x51\x97\x0b\
+\xc6\xfa\xf9\x49\x96\xf5\x91\x36\xbe\x9e\x2a\xbf\xe7\xcf\xa9\x85\
+\xb2\x45\xaf\x40\xeb\xd8\xa9\x3a\xf8\x11\x37\xf1\x53\x0f\xa9\x54\
+\xbf\x07\xf7\x41\x1d\x63\xa8\xe3\xef\xea\x02\x92\x1d\xd1\xc8\x4e\
+\x70\x9d\xef\xd6\xb2\x0c\x4c\x8e\x0d\x69\x9d\x9f\x32\xa1\xbd\x4a\
+\x21\x15\xac\x1b\xc8\xfa\xbb\xce\x0b\x22\xe6\xb2\xfa\xc2\x2d\x86\
+\x25\x29\x46\x5c\x95\x86\x4a\x95\xa5\x90\x60\x5e\xff\x2e\x7b\xf8\
+\x9e\x81\xfb\x67\x6d\xde\xbc\x39\x8b\xd7\xa4\x8b\x06\x0d\x3e\xbf\
+\x38\xb0\x41\xd1\x8d\x21\xf5\x28\xb7\x3a\x25\x4e\x3c\xc4\x45\x7c\
+\xc4\x49\xbc\xc4\xad\xf0\x3f\x90\xd9\xbf\x31\xfe\xdd\xf2\x1e\x5d\
+\xbb\x0e\xa2\x8e\xbf\x33\x80\xa4\x9a\x4f\x48\x96\xf5\x21\x83\xcb\
+\x07\x1f\x7c\xd0\xc4\xb2\x67\x47\x4f\x9e\x09\x68\x35\xe5\x05\xdb\
+\x87\xb3\xde\xa6\xf3\x82\xd0\xa9\xdc\x11\x98\x78\xac\x5e\x0a\xdc\
+\x7e\x24\x1e\xd4\xc1\xd5\xc1\x6f\xde\xbf\x62\xac\xd7\xfd\x69\xae\
+\x7d\x49\x7f\x43\x02\xdf\x21\x35\xf3\x06\x8d\x8c\x2e\x0d\x68\x50\
+\x46\xe5\x29\x8f\x72\x29\x9f\x38\x88\x87\xb8\x88\xaf\xba\x3e\x48\
+\xdc\xb9\xcb\xbe\x50\x55\xe2\x9f\x0d\xde\x0f\xa7\x6e\xff\x2e\xa3\
+\x3a\x25\xd6\x9b\xcd\xc8\x7b\xf6\xec\x09\x14\x0b\xd5\x94\xc2\xac\
+\x41\xa8\x49\xeb\x07\x29\xe3\x24\x16\xcc\xee\xc2\x4a\x2b\x5b\x51\
+\x74\x3d\x40\x87\x7f\x00\xf6\x5b\x31\x20\xca\x76\xc3\x7e\x00\xdd\
+\xe1\xe8\xfe\x63\x23\x24\x0e\x79\xb3\xe2\xa2\x71\xfd\xe9\x4f\xc3\
+\x00\x12\x97\x7a\x4a\xd0\xab\x90\xae\xf1\x95\xf1\x86\xfa\x23\x13\
+\x06\x36\xac\xa8\x56\x9e\xf2\x28\x97\xf2\x89\x83\x78\x88\x8b\xf8\
+\x88\x93\x78\x89\x9b\x05\x91\x4b\xa3\xdb\x95\x50\x27\xea\xf6\xff\
+\x2d\x8d\xc9\x12\x48\x0a\xdc\x1f\x98\x25\xef\x05\xcd\xf9\x7e\xdd\
+\xbf\x5b\xe7\xf5\x49\x63\xda\x68\xb9\x14\x18\x41\x0b\x37\xab\x02\
+\xe9\xe3\xa5\x30\x4f\x77\xca\xda\xd4\x9e\xf1\x80\x05\x09\x9d\x27\
+\x4c\xac\xa5\xf6\xe3\x5b\x72\x2a\x4b\x18\xd4\x30\xf0\x82\x41\xfd\
+\x56\x7f\xb1\x19\x7b\xdc\xc6\x8d\x1b\xe1\x3a\x69\x40\xe6\x35\xd3\
+\xfa\x5a\xf2\x25\x7f\xca\xa1\x3c\xca\xa5\x7c\xe2\x20\x1e\xe2\xaa\
+\x2e\x8c\x12\xef\xc3\xf9\xdd\x71\x67\xdc\x3b\x98\xdb\xe7\x7d\x1f\
+\xea\xf4\x5f\x8b\xa3\x4e\x4e\x4e\x9f\x47\x47\x47\xb1\xf9\xf9\x32\
+\xd7\x89\x14\x3a\xbf\xd8\xd6\xbf\x6d\xe2\xed\xb1\x6d\x75\x01\x71\
+\xf9\xd7\x74\x29\x9e\x0e\x59\x71\x61\x8f\x8e\xee\x6c\xb0\xbe\x15\
+\x41\x70\x26\xd8\xca\xc2\x35\xa9\x72\xf4\xb7\x2d\xe9\x0d\xf5\xb4\
+\x97\x4c\xea\x87\x5f\x34\x6a\x30\xb0\xba\x3c\xfd\x67\x89\x81\x2e\
+\x78\xc1\xd8\xd8\xf5\xeb\x1c\xb0\x63\xec\x17\xe4\x47\xbe\xe4\x4f\
+\x39\x94\x47\xb9\x94\x4f\x1c\xc4\x43\x5c\xc4\xa7\x70\xe6\x48\xd3\
+\xd4\x1d\xe9\x21\x8c\xb6\x78\x27\x8b\xba\x50\xa7\x3f\xac\x0e\x4b\
+\x0c\x08\x0e\x0a\xda\x5f\xec\xe1\xe1\xbe\x49\x06\xbc\x29\x25\xaf\
+\x59\x87\x8c\x5b\xe5\xb0\x54\x96\x61\xd3\x49\x55\x5a\x4b\x76\x8e\
+\x46\xe5\x81\x39\x40\xf4\x13\x23\x70\x06\x78\xfa\xe2\x5a\xcc\x97\
+\x80\xc4\x32\xd5\xfd\xf1\xca\x1b\xd4\x36\x49\xb7\xbd\x68\xaa\x77\
+\x6f\x9c\x8d\xe3\x69\x93\x29\x9e\xab\xdf\x9f\x73\xb2\xff\xfb\xb3\
+\x4e\xbe\xd3\xd5\x3a\xfe\x15\x12\xaf\x79\xcf\x78\xb2\xf7\xaa\x31\
+\x93\x1d\x4f\xc7\x9b\xe8\x27\xc9\x8c\x23\x76\xb6\x21\xa4\x2b\x1d\
+\xde\x13\xbf\x24\x3f\xf2\x25\x7f\xca\xa1\x3c\xca\xad\x56\x9e\x78\
+\x88\x4b\xe1\xcb\x5b\xd5\x17\x3c\xd1\x5e\x1c\xf9\x4e\xe9\x67\xdd\
+\xbb\xce\xa5\x2e\x7f\xaa\x41\x82\x27\x2d\xf1\x80\x34\x59\x0a\x5a\
+\x59\x7f\xbe\xb2\x23\xbc\xdb\xb3\xdb\xc7\x6b\xe2\x87\xb4\x28\x4b\
+\x1e\xd5\x1a\x59\xb3\x3e\xe4\xba\x62\xeb\x2a\x5b\xd4\x9e\x54\x8d\
+\x02\x2c\x01\xe7\x2e\x0c\x44\x2c\x4d\xf1\x38\xca\x59\xe2\xd1\x94\
+\xc0\xd5\x56\x79\x4b\x3a\x3b\xcc\x1c\xae\x62\xc0\x9a\x04\x7c\xbb\
+\xe2\x22\xbe\xf9\xe9\x02\xbe\x5e\x76\x4e\x4b\xe2\x75\x5f\xb9\x67\
+\xb8\x3a\x01\x83\xd6\x5e\x41\xa2\xa5\x3e\x58\xe8\x38\xb5\xa0\x2f\
+\xd6\xda\xd9\x21\x60\x5a\xdf\xea\x46\x29\xf2\xa7\x1c\xca\xa3\x5c\
+\xca\x27\x0e\xe2\x21\x2e\xc1\x67\x80\x94\x89\xed\x70\x63\x64\xeb\
+\x2a\x93\x4f\xbb\x6c\x94\x72\x7d\xbb\xff\x53\x8b\x8c\xbc\x25\xd5\
+\x96\x60\x78\xd3\xd3\xcb\xa3\xd2\xd1\x69\x73\xf9\xac\xd9\xb3\xce\
+\x9b\x7d\xd3\xeb\xd0\xb5\x61\x2d\xaa\xd8\xa4\xfc\x60\xa6\x1c\x90\
+\xec\x8d\x28\x8c\x91\xf6\x71\x7f\xe0\x7c\x20\x68\x3c\xe0\xde\x9b\
+\x8d\x0a\x0c\x4a\x72\x64\x7e\x62\x08\xce\x5c\xfa\x77\x6f\xe2\x7b\
+\xcf\x14\x4c\x71\xbd\x8d\x09\xdb\x92\xc0\x3c\xfe\x98\x2d\x37\x15\
+\x8d\x75\xbe\xa9\x52\xed\xdf\xb9\x24\xab\xa4\x46\xda\xc4\xfa\xca\
+\xd5\x2f\x2d\xfa\x0c\x3f\xfd\xf4\x13\x42\xe6\x1b\x49\xf9\xbb\x26\
+\xf9\x92\x3f\xe5\x50\x1e\xe5\x52\x3e\x71\xe8\x94\xff\xd9\x00\xa9\
+\x12\xb3\x6e\x8d\x68\x85\xe9\x5f\x75\xdc\x2f\x51\xbf\xdb\x1f\x55\
+\xac\xff\x5b\x29\x7a\xba\xaf\xaf\x4f\xe6\x5a\x7b\xbb\x8a\x61\x96\
+\x43\x31\x63\xd0\xd7\x9a\xeb\xc3\x5a\xe0\x86\x34\x28\xa7\x73\x39\
+\xd8\x19\xb0\x53\x53\xd6\xdc\xf7\x0c\x3c\x2c\x44\xb2\x22\xcb\xae\
+\x4e\x36\x35\xb2\xd3\x93\xbd\x7d\xdc\x9f\x75\xf1\x61\x76\x1d\xac\
+\x0b\xcb\x56\x85\x95\xe5\x81\x99\x58\x2a\x45\x8c\x1f\xf7\xa4\x93\
+\x58\xd0\x60\xbd\x81\xfd\x83\x2a\xa3\x93\xf3\x7d\x5d\x5d\xe7\xc9\
+\xb2\x2e\x90\x5d\x00\x11\xcb\xcc\x50\xb9\xbc\x2e\xf9\x92\x3f\xe5\
+\x50\x1e\xe5\x52\xbe\xc2\x91\xb3\xbc\x37\x92\x46\xb7\x11\x7c\x2d\
+\x61\xff\x6d\xfb\xb3\xb2\xee\xfb\xfe\x99\xb2\xdd\x9f\x39\x89\xbd\
+\x2b\x5e\xb1\xcb\xfa\x3b\xeb\xdc\xe9\x66\xdf\x6a\x13\x2c\x5a\x80\
+\xfd\x03\xb4\x74\xee\xaa\x3e\x28\xde\x3a\x8c\xed\x69\xaa\x23\x03\
+\xd1\xca\x1b\x74\x0d\x4b\xbb\xcc\x80\x1d\x3d\x58\xaf\xd7\x2d\x8d\
+\x1f\x6b\x21\xe0\x97\x52\x56\x97\x54\x97\xe8\xce\xd8\x02\x56\x71\
+\x14\xb9\xc6\xaa\x6e\x51\x76\x90\xaa\x74\x56\xe9\x0f\xb5\xd5\x3b\
+\xc7\xfd\x55\xed\xe1\xe4\xb8\x19\x51\x6b\xad\x50\xe5\x33\x88\x7c\
+\xc9\x9f\x72\x28\x8f\x72\x95\xfc\x07\x0b\x7b\xe2\xc6\xf0\xe6\xb8\
+\x3e\xac\xb9\x76\x69\x9f\x77\x4f\x8a\xdb\x0f\xe5\x89\xef\xa9\xb6\
+\xca\x0a\xc3\xfa\xfd\xfa\xf5\x9b\x3e\x6c\x40\xff\x6b\x27\xa5\x4f\
+\xe7\xba\x45\x53\x24\x8d\x6a\x85\xec\xc5\x9f\xa9\xfa\x7b\xa9\x87\
+\x15\x23\xf0\x93\x46\x69\x6e\x49\x3c\x94\x70\x9d\x7a\x19\xa0\x6a\
+\x47\x2f\xe6\xe9\x98\xad\x55\x7d\xc1\x51\xd7\xaa\x10\x79\x55\x47\
+\x87\xe5\x9a\x7d\xc3\x2c\xbf\x31\x99\x59\xb5\xe9\x5d\x35\xdb\x59\
+\x9e\x23\x20\x81\x19\x47\x9c\xe7\xa0\xfc\xc0\xf7\xd5\x0d\xd3\x94\
+\xa3\xe4\x15\x6c\x30\xc1\x5d\x9b\xce\x10\x2c\xec\x09\xac\x18\xdd\
+\xab\x23\xcf\x31\xc3\x88\xf5\x99\x74\x8b\xb3\x0e\x27\x3b\x43\xbf\
+\xee\x5d\x3f\xda\x14\x32\xa0\x45\x36\x3f\x65\xb9\x2e\x94\x32\x5e\
+\xce\x0a\x2b\x7a\x57\xb7\xca\xab\x37\x48\x2d\xbd\x41\x88\x19\x19\
+\x06\x2a\xed\xc1\xef\x55\x92\xf2\x7c\xaa\xae\xd4\x76\xf6\xce\x6f\
+\xa9\xba\x63\x9c\x99\x5c\x6d\xb0\xb5\x32\xde\xa3\xd0\x1f\xb1\xdb\
+\xdf\x0f\xb1\x6e\x4b\xa0\x91\x3a\x3f\xf9\x92\x7f\xd1\x16\x0b\x64\
+\xcc\xe9\x0e\x76\xb1\x11\xc3\x49\xb3\x16\xc5\xbd\x3f\xf9\xd0\x99\
+\xd8\x88\xf1\x99\xb6\xcb\x8b\x80\x57\xc5\xc5\x7a\x08\xd9\x3a\x7c\
+\xdd\xfa\xea\x25\xf3\xa6\x55\x6c\xa6\xbc\x2a\x40\x52\xad\x3b\xca\
+\x56\xd9\x5f\x19\xa2\xd4\x6b\x3c\xca\xf7\x4d\xd7\xa5\xd5\x8e\xd8\
+\x42\x7b\x64\x39\x92\xb3\x80\x5b\xd5\xdf\x0a\x64\x00\xd7\x9f\x50\
+\xf5\x37\x03\x4c\x63\xcb\x2c\xff\xa4\x82\x5b\x4e\xc4\x6a\x7e\x32\
+\x87\x38\x37\x5b\x14\xee\x1c\xa5\xf8\x66\xfe\xf0\x19\x12\xa5\x81\
+\x8b\x32\xaf\x98\x37\xd1\xfa\x18\xb6\x4e\xed\x2a\x58\x88\x89\xd8\
+\xfe\x96\x0f\x26\x78\xa4\x94\x08\xfb\x9e\x58\x7c\x5a\xcf\xae\x5d\
+\xdc\xbd\xfb\xb7\xbc\x77\xd9\xf4\x9f\xda\xcb\x83\xde\xc2\x55\x01\
+\x76\x5b\x3c\x22\x73\xc1\xa7\xe2\xa2\xa6\xec\xce\x50\xc7\xd2\xb2\
+\x7d\x33\x91\xf5\xaf\x5f\x8b\xe4\x02\xf7\x14\xc9\x35\x29\x8f\xbf\
+\xe9\x72\xf8\xe5\x21\xf3\xd4\x69\x2e\xcd\x73\x26\x22\x24\x89\x79\
+\x62\xe3\x34\xa4\x4d\xff\x40\x29\x4e\x19\x97\xa5\x43\x2c\x74\x60\
+\x8b\xec\xfe\x9f\x7c\xe8\x4b\x0c\xc4\x42\x4c\x7f\xeb\x27\x33\x8f\
+\x4f\x8b\x8d\xc4\xf2\x7d\xe4\xbc\xb0\xa0\x4f\xf7\xce\xbb\x43\x0c\
+\x9b\x65\x13\x60\x82\x49\x63\x92\x02\x7a\x4b\x1a\x9e\xd3\x67\x77\
+\x43\xae\xbd\xb1\xca\xcd\x17\x69\x9e\x7c\x2b\x94\xaf\x88\xd7\x8a\
+\x54\x49\xbe\x44\x23\xd7\x8e\x16\x78\xb0\xe4\x4b\x1c\x5f\x31\x01\
+\x52\xb8\x45\xec\xf7\xfd\x65\xb6\x75\x7c\x8f\x18\x37\x2d\x1c\xde\
+\xf3\xfd\x60\xca\xa4\x6c\x62\x20\x96\xe7\xf0\xe1\xe4\x6f\xbc\xa1\
+\xa9\xcc\xc4\x40\x01\x63\x3b\xb0\x7b\xa7\x60\x97\xbe\xad\xd3\x4e\
+\x98\xb6\xc0\x25\x93\xb7\xf8\x4d\x91\xa2\x04\xf3\x66\x2c\x4c\xfc\
+\xe6\x8b\xb1\xea\x7f\xbc\x26\x55\x7f\x39\xc6\x67\x39\xe6\xe0\xe6\
+\x95\x60\xd3\xc6\x59\x8b\x96\x9a\x3d\x86\x2d\xee\x8f\xfc\xb4\x63\
+\x38\x65\x50\x16\x65\x52\xf6\x5f\xc5\xff\x54\x1b\x19\x85\x5a\x0b\
+\x99\x09\xc0\xd9\xd2\xbf\xe3\x3a\xc2\xc2\x3c\xcf\x71\xf0\xa7\x88\
+\x36\x6e\x59\x79\xde\xac\x79\x55\x4e\x6e\x11\xf2\x8a\x1e\x7f\x2f\
+\x58\x5a\x81\xa2\x27\xc4\xef\x07\x75\xdf\x0e\x16\x94\xe1\x82\x79\
+\xf3\xaa\x83\xd6\xdf\x6a\xa2\xa2\x0e\xc3\xd3\xdd\x2d\x4f\x66\xda\
+\x81\x3c\xc9\x9b\x32\x28\xeb\xf9\x7e\x3a\xfb\xc7\x86\xd0\x97\x99\
+\xfa\x40\x8c\x60\x6e\x6d\x6d\x7d\x6e\xd2\xa4\x49\x45\x42\x55\x43\
+\x87\x0e\xcd\x1e\x6d\x39\x3c\x75\xe9\xc4\x11\x29\x9b\x57\xda\xe7\
+\x3a\xba\x86\x6a\x1c\xdd\xc2\x35\x5b\xd6\x6f\xcb\xb5\x9b\x63\x73\
+\x73\xde\x8c\x69\xf1\xf3\xe6\xcf\x3f\x2f\x87\xb0\x6c\xf9\x3a\xb4\
+\x54\x52\x75\x9a\x3e\x7d\xfa\x0c\x27\x2f\xf2\x7c\x16\x1d\xa8\xcf\
+\xba\x68\x59\x53\xa8\x81\x8d\x8d\x8d\xa9\xb4\xb4\x1d\x95\x63\x6d\
+\x16\x5f\x6e\x98\xb8\x0c\x8b\x88\x42\xae\x78\x03\x29\xf1\x66\x32\
+\x1b\x18\x8b\x1f\x7f\x30\x5d\x2a\x5f\x85\x56\x49\x9a\x2e\x41\x0c\
+\xd6\x82\x3c\x9e\x25\x46\xfe\xe7\x6f\xa5\xe5\xcb\x97\xff\x53\xd2\
+\x7b\xc3\xb6\x7b\x07\xad\xde\xb1\xe7\x88\xf7\xce\x7d\xb1\xfe\x2e\
+\xbe\xc1\xeb\xe5\xde\x2c\x49\x7c\x4c\xe2\xa7\xf2\xac\xd9\xfd\x5d\
+\x78\xfe\x1f\x54\xc7\x67\x32\x0b\x29\x7c\xe5\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x20\x1c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\
+\x1b\xaf\x01\x5e\x1a\x91\x1c\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
+\xd7\x08\x12\x14\x39\x28\x29\x91\x7c\x0e\x00\x00\x1f\xa9\x49\x44\
+\x41\x54\x78\xda\xe5\x9b\x09\xb0\x5c\x57\x99\xdf\xff\xb7\xf7\xbd\
+\x5f\xbf\xfd\xe9\xe9\x3d\x49\xd6\x2e\xd9\xda\x2c\x79\xc1\x78\xc0\
+\x76\x42\x81\xc1\x03\x64\x0c\x13\x1c\x42\x65\x02\x4e\xb1\x84\x78\
+\x5c\xc5\x14\x55\x49\x2a\x54\x48\x05\x2a\x03\xc3\x14\x03\x55\x33\
+\x13\x43\x2a\xae\x21\x9e\x01\x26\x05\x43\x80\xd8\xb2\x0d\x78\xc3\
+\x96\x25\x6b\xb1\xf5\xb4\x3d\x6b\x7d\xd2\xdb\xb7\xde\xb7\xdb\xb7\
+\xf3\x3b\xa7\xbb\x35\x12\x1a\x0a\x18\xb0\x81\x4a\xcb\x9f\xcf\xed\
+\xbb\x9c\x77\xbe\xed\xff\x2d\xf7\xb4\xfe\x7f\xff\x38\xaf\xe7\xdf\
+\x59\xb3\x66\x8d\xaf\xab\xab\xcb\xd7\xdb\xdb\x6b\x29\x91\x48\x38\
+\xd5\x6a\x55\xb9\x5c\xce\x5b\x58\x58\xf0\x96\x97\x97\xbd\x0b\x17\
+\x2e\x78\xd9\x6c\xb6\x29\x09\xfa\x2d\x16\x40\x24\x12\xf1\x6d\xdd\
+\xba\x35\xb0\x7b\xf7\xee\xf8\xdd\x77\xdf\xbd\xb5\xaf\xaf\x6f\x67\
+\x34\x1a\x5d\xcf\xf9\x75\x7e\xbf\xbf\xd7\x71\x9c\x04\x14\x6f\xf2\
+\x69\x34\x1a\x05\x43\x08\x63\xa6\x5c\x2e\x9f\x2a\x16\x8b\xe3\xd3\
+\xd3\xd3\xfb\xbf\xfd\xed\x6f\x9f\x3c\x70\xe0\x40\x0d\xa1\x34\x8c\
+\x40\x7e\x1b\x04\xe0\x6c\xda\xb4\x29\x74\xef\xbd\xf7\xf6\xbe\xf5\
+\xad\x6f\xbd\x07\x2d\xbf\x3d\x16\x8b\xdd\x1c\x0e\x87\xfb\x60\x5a\
+\xf0\x2a\xd7\x75\x2d\xc1\xb0\x3c\xcf\xb3\x0f\xf9\x7c\x3e\x4b\xc1\
+\x60\x50\xdc\x67\xcf\x57\x2a\x15\x15\x0a\x85\x49\xac\xe1\xd9\xa9\
+\xa9\xa9\x6f\x3d\xca\xe7\x5b\xdf\xfa\x56\xde\x58\xca\xaf\x52\x18\
+\xce\xaf\x4a\xdb\xd7\x5f\x7f\x7d\xf4\x13\x9f\xf8\xc4\xae\x6d\xdb\
+\xb6\x7d\x34\x9d\x4e\xdf\x0d\xd3\x29\xc3\x08\x1a\x15\x1a\x55\xa9\
+\x54\x52\x15\xa6\x6a\xb5\x9a\xdc\x7a\xbd\x25\x00\x08\xa1\x40\xad\
+\x95\xc0\xbc\x15\x42\x38\x1a\x55\x2a\x95\xb2\x14\xe5\xb8\xce\xfd\
+\x8b\x8b\x8b\xf3\x33\x33\x33\xff\x7b\x6c\x6c\xec\xcf\x3e\xf7\xb9\
+\xcf\x8d\x4f\x4e\x4e\xba\x46\x10\xbf\x6e\x01\x38\x1b\x37\x6e\x8c\
+\x7e\xfa\xd3\x9f\xbe\x79\xc7\x8e\x1d\x7f\x94\xc9\x64\xde\xe2\xe7\
+\x03\xd3\xc6\xaf\x55\x2c\x14\x54\xe1\xd8\x50\x15\x2a\x23\x04\xc8\
+\x0a\xa2\x8e\x20\x1a\x58\x82\xe1\xde\xe7\x38\xf2\x07\x02\x0a\x05\
+\x43\x0a\x86\x42\x0a\x84\x43\xf2\x9b\x63\xc6\x68\x3c\xae\x9e\xbe\
+\x3e\xf5\x41\x21\xae\x2d\x2d\x2d\xd5\x2f\x5d\xba\xf4\xcd\x23\x47\
+\x8e\x7c\x96\xbf\x7b\x22\x9f\xcf\xbb\xbf\x16\x01\xa0\x9d\xe0\x87\
+\x3f\xfc\xe1\x91\xf7\xbf\xff\xfd\xff\x7e\x68\x68\xe8\x03\x98\x70\
+\x10\x4d\x5b\xc6\x4b\x30\x6e\x28\xbb\xbc\xac\x85\xb9\x79\xcd\xce\
+\xcd\x6a\x6e\x76\x56\x4b\x8b\x4b\xca\xe6\xb2\xd6\x1a\x3a\x02\xf0\
+\x49\x0a\xfa\xfc\x8a\x84\x82\x4a\x18\xcd\x27\x12\xea\x4a\xa7\xd5\
+\x95\xe9\x56\x2a\xd3\xa5\x68\x2a\xad\x50\x22\xae\x70\x2c\xa6\x6e\
+\x84\x30\xbc\x72\xa5\x62\x1c\xcf\xce\xce\x96\xcf\x9c\x39\xf3\xc5\
+\x6f\x7c\xe3\x1b\x9f\xfb\xfa\xd7\xbf\xbe\x2c\xc9\x7b\xbd\x04\xe0\
+\x8c\x8e\x8e\xc6\xbe\xf4\xa5\x2f\xbd\x63\xcf\x9e\x3d\x7f\x8a\x89\
+\x0e\x5d\xd6\x78\x3e\xaf\x1c\x4c\x4f\x4f\x4d\xe9\xfc\xb9\xf3\x3a\
+\x73\xf6\x8c\x26\x26\x26\x34\x03\xf3\xf8\x72\x87\x71\x6b\xfa\xc2\
+\x3d\x1c\xa3\x7d\x49\x01\xc7\xa7\x00\x18\x10\x0a\xf8\x15\x45\xcb\
+\x89\x48\x54\x19\xcc\xbf\xaf\xa7\x5b\x83\x83\x83\xea\x5f\xb1\x42\
+\xe9\x81\x01\x45\x33\x19\x85\xcd\x79\xce\xad\x5a\xb5\x4a\xc2\x72\
+\xce\x9d\x3b\xf7\xea\xc1\x83\x07\xff\xf5\x27\x3f\xf9\xc9\xe7\x5d\
+\x3e\xaf\xb5\x00\x7c\xb7\xdc\x72\x4b\xf7\x97\xbf\xfc\xe5\xff\x40\
+\x48\xfb\xb7\x66\xed\x98\xa0\x0a\x50\x76\x71\x51\x13\x17\x2e\xe8\
+\xc4\xf1\x13\x1a\x3b\x7e\x4c\x68\xc7\x32\x5e\x2e\x96\xd4\xdb\xdb\
+\xa3\x95\x2b\x86\xd5\xc7\xd8\xdd\xd5\xa5\x58\x24\xa2\x30\xbe\xde\
+\x6c\x78\x06\x0f\xb8\xa7\xa0\x02\x02\x5c\x5a\x58\xd0\xfc\xf4\x0c\
+\x34\x8d\x60\x9a\x8a\xe0\x06\x29\x5c\xa0\xbf\xa7\x47\x2b\x56\x0e\
+\x6b\xc5\xea\xd5\xca\x8c\x8c\x2a\xda\xdb\xab\x38\xc2\x19\xe5\x7b\
+\x5f\x7f\xbf\xc0\x86\x2a\xd8\xf0\x1f\x1f\x7c\xf0\xc1\x2f\xe3\x22\
+\x95\xd7\x4a\x00\xfe\xb7\xbf\xfd\xed\x2b\x3e\xff\xf9\xcf\xff\x05\
+\x5a\xb9\x1b\x60\xb2\x8c\xe7\xd0\xec\xe4\xc5\x8b\x3a\xfa\xca\x2b\
+\x3a\xf0\xd2\x4b\x3a\x7e\xf2\xa4\x66\xa6\xa6\xf1\xd9\x5e\x6d\xdb\
+\xba\x55\x9b\x37\x6d\x52\x22\x1c\x91\xaf\xe9\xc9\xef\xb5\xc8\x31\
+\x04\xf3\x62\x84\xac\x45\x34\x0c\x71\xec\x72\x5f\xb5\x5a\xb3\x73\
+\x9e\x3e\x76\x4c\x0b\x08\xd1\x80\x63\x12\xb3\xef\x87\xf1\x95\x30\
+\xbd\x62\xfd\x7a\xa5\x56\x8d\x2a\xc2\xf7\x01\x5c\x62\xf5\x75\xd7\
+\x59\xa0\x45\x08\x5f\xf9\xd4\xa7\x3e\xf5\xe0\xc9\x93\x27\x8b\x3f\
+\x2f\x40\xfa\x7f\x5e\xe6\x3f\xf0\x81\x0f\xac\xf9\xcc\x67\x3e\xf3\
+\x48\x7f\x7f\xff\x9d\x26\x44\xe5\xdb\x1a\x3b\x31\x36\xa6\x1f\xfe\
+\xf0\x87\x7a\xe2\x07\x3f\xd0\xcb\x2f\xbf\xac\x01\x16\xf5\xce\x77\
+\xdc\xa3\xbb\x6e\xbf\x5d\xd7\xa1\xf5\x0c\xbe\x9d\xc4\x54\xd3\x6a\
+\x51\xaa\x43\x9c\x4b\x4a\x4a\x74\x88\x73\x71\xc6\x18\x6e\x11\xe7\
+\x5a\x6f\x32\xa5\x75\x1b\xd6\x69\x04\x06\x6b\x08\xb9\xb0\xb0\xa8\
+\x12\x02\x2f\xf2\x37\x6b\x4b\x4b\xf2\x55\xaa\x0a\x20\x98\x4a\xdd\
+\x55\xae\x84\x95\x81\x0f\x03\x03\x03\xbb\x6e\xb8\xe1\x86\xad\x58\
+\xc4\x63\xe7\xcf\x9f\xaf\xfe\xaa\x04\xe0\xbf\xf3\xce\x3b\x57\x7e\
+\xf6\xb3\x9f\xfd\x5f\xc4\xf5\x5b\x0d\x8a\x1b\xb3\x9f\xc3\x4c\x5f\
+\xda\x7f\x40\x8f\x3d\xbe\x57\xcf\x3e\xfb\xac\x5c\x7c\xfb\xbd\xbf\
+\xf7\x7b\xba\xe3\x8d\x6f\xd4\x20\xc0\x95\xc2\xa7\xd3\x4e\x87\xe9\
+\x0e\xb3\x0e\x0c\xc2\xa4\xa4\xa8\x31\xf1\x26\x24\x99\x11\xe2\x9c\
+\x19\xa1\x98\xbd\xc6\x79\xac\x22\x01\x26\x5c\xb7\x6e\xbd\xba\x01\
+\xc4\xfc\xf4\x94\xaa\x68\xba\x9c\xcb\xab\xba\xbc\x24\x87\xb5\x84\
+\x88\x1e\x0d\x9f\xa3\x3c\xc7\x19\x5c\x05\x21\x6c\x02\xa3\x36\xee\
+\xdb\xb7\xef\xbb\xe0\x52\xfd\x97\x15\x80\x8f\x30\xd7\xff\xd0\x43\
+\x0f\x7d\x85\x89\xef\x00\xc4\xac\xd9\x4f\x5d\xba\xa4\xe7\x9f\x7f\
+\x5e\xff\xf7\xb1\x47\x75\xe8\xe0\x41\xed\xda\xb1\x43\xff\xfc\xde\
+\x7b\xb5\xb2\xa7\x57\xe9\x0e\xe3\x57\x68\x38\x0a\x85\x61\x0c\xaf\
+\x57\x00\xc6\x02\x8c\xfe\xa6\x20\x46\xaf\x75\xec\x33\xc7\xf6\xba\
+\x21\x29\xc8\x18\x16\xe4\xf1\x9c\x5b\x07\x3b\x12\x1a\xc1\x22\xaa\
+\x33\x73\xaa\xb1\x86\x5a\x89\xd0\x4a\x44\xb1\x42\xf0\x33\x23\x96\
+\x96\x03\x8c\xbb\x00\x4a\x42\xe6\x26\xb2\xd0\x81\xef\x7f\xff\xfb\
+\x8f\xe3\x5a\xee\x3f\x56\x00\x0e\x79\x7b\xea\xe1\x87\x1f\xfe\xcf\
+\x6b\xd7\xae\xbd\x8f\x58\x6e\x32\x33\x4d\xc3\xfc\x8f\x9f\x7b\x4e\
+\x8f\xed\xdd\xab\xb3\xa7\x4f\xeb\xdd\xef\x7c\xa7\x6e\xdb\xbd\x47\
+\x5d\x80\x5a\x86\x85\x74\x18\x8f\x59\xa6\x61\xb6\xcd\xa4\x45\x7c\
+\x33\x1a\xbf\x6f\x42\x1c\x37\x6d\x24\x68\x8d\x6a\x9f\x77\xec\xbd\
+\x8c\x1d\xe1\x58\x30\x6c\x32\x59\xdd\x5a\xcf\xf0\x9a\x0d\x6a\x10\
+\x4e\xdd\x42\x8e\x30\x5a\x53\x3d\x57\x40\x08\x65\x2c\x21\x88\xa4\
+\x23\x2a\xd6\x6a\xd6\x1d\x58\xfb\x2e\x92\xb3\x65\x84\xb0\x5f\xcc\
+\xfe\x0b\x0b\x80\xb8\x1e\xf9\xc2\x17\xbe\x70\xef\x6d\xb7\xdd\xf6\
+\x5f\x00\x3c\x1f\xcc\x5b\xb3\x7f\xe1\xf9\x17\xb4\xf7\xf1\xc7\x75\
+\x11\xc4\xbf\xef\xf7\x7f\x5f\x1b\x09\x47\x5d\xf8\x62\x06\xcd\xe3\
+\xd7\x76\x91\x21\x18\x68\x69\xb5\xcd\x58\x9b\xa9\xa6\x65\x9a\xb1\
+\x7d\xac\xf6\xb1\xda\xc7\xba\xea\xd8\x8e\xac\xc3\x53\x20\x0d\x40\
+\x3a\x9e\x42\x45\xc9\x29\xd7\x35\xb4\xf6\x3a\x35\x96\xc1\x02\x37\
+\x27\xa7\xee\x22\x84\xa2\xfc\x60\x42\x08\xb0\x6d\x1a\x21\x10\x0d\
+\x07\x08\x95\xe4\x0b\xbf\x43\x8e\xf2\x14\x2e\x3a\x21\x66\xfc\x45\
+\x04\xe0\xa7\x80\xd9\xf4\x91\x8f\x7c\xe4\xaf\x40\xe0\xa4\xc9\xe8\
+\x96\x09\x73\x07\x0f\x1c\x40\xf3\x8f\xeb\x3c\x21\xce\x30\xbf\x66\
+\x60\x00\xcd\xfb\xd4\xed\xf7\x29\xe9\x39\xd6\x7f\x03\x2d\x2d\x42\
+\xad\x58\xaf\x0e\xa3\x57\x33\x79\x95\x15\xa8\x6d\x05\x96\x38\xee\
+\x8c\x1c\x28\x18\xa7\x2e\xe8\x8a\x28\x56\x73\xe5\xe5\x4c\xf4\x80\
+\x88\x40\xfd\x6b\x56\x03\x86\x17\xb9\xa7\x2a\xaf\x84\x80\x8a\x65\
+\xf9\x39\x1f\x8a\xc7\xd4\x20\xcc\xba\x92\x86\x56\xac\x08\x90\xa7\
+\xdc\x76\xe2\xc4\x89\x47\x00\xc6\xf2\xcf\x2d\x00\x24\xd7\xf5\xc5\
+\x2f\x7e\xf1\xb3\x84\xbb\x5b\x08\x2f\x36\xc1\x39\x41\x48\x7a\xfc\
+\x89\x27\x34\x06\xd2\xbf\xfb\x77\xef\xd1\xda\xa1\x15\xea\x86\xf9\
+\x54\x44\xea\x92\x8f\xe4\x25\x2e\x11\xbe\x3a\xcc\x59\x26\x1a\x10\
+\x82\x40\xcb\x57\x6a\xfe\xaa\x31\x68\xb4\xe6\xba\xc4\xf7\x11\xad\
+\xba\x79\x8f\xfa\xd6\xae\x55\x1f\xbe\xde\x47\xa8\xeb\xdf\xb8\x56\
+\xf1\x35\xbd\x0a\xf7\xf4\x6b\xd5\x75\x5b\xd4\xbf\xe1\x06\x0d\x6e\
+\xde\xac\x9e\xd1\x51\x2d\x9c\x1a\x57\xdf\x48\x9f\x16\x16\x27\x14\
+\xab\x53\x64\x95\x5d\x35\x89\x4e\x01\x39\x0a\xa6\x92\xaa\x01\x9e\
+\x41\x04\xd1\xc3\x07\x2b\xf0\xbe\xf7\xbd\xef\x3d\x2d\xa9\x71\x8d\
+\xa5\xeb\xda\x4f\xf0\x81\x07\x1e\x78\x13\x7e\xff\x1e\xc2\x9d\xcd\
+\xe3\xa7\x88\xc9\xa0\xaa\x8e\x1e\x79\x59\xb7\xec\xd9\xad\x75\xc3\
+\xc3\x4a\x4b\x84\x38\xc1\x78\x40\x41\x98\x1b\x20\x16\xa7\x07\xfb\
+\x5b\x0c\x37\x5a\xc4\xf1\x15\x82\xb8\x96\x12\x84\xcc\x55\x37\xed\
+\x91\x83\xfb\xa8\x69\xdc\xe4\xea\xcc\xc4\xf1\xd7\x55\x27\x19\x8a\
+\x45\xc3\xdc\x1f\x30\x67\x3a\xff\xc9\x2b\x57\x14\x4b\x74\x6b\x64\
+\xeb\xf5\x44\x08\xbf\xe2\xc2\x32\x4c\x74\xc0\x3a\x6b\x27\x4e\xca\
+\x9b\x5f\xd0\x0c\x19\x29\x25\xb7\xe0\xe5\x81\x0f\x7e\xf0\x83\x9b\
+\xcd\x04\x3f\x4b\x00\x0e\xda\xcf\x50\xca\xfe\x21\x26\x18\xb0\xf1\
+\x9e\xd4\x76\xec\xe8\x98\x8e\x1c\x3a\xa4\x34\xfe\x75\xeb\xce\x5d\
+\x4a\x35\x05\xd8\x11\xaf\xc3\x3e\x28\x24\xc7\x6d\x58\x06\x52\x83\
+\x43\x56\x83\xfc\x55\xc3\x34\x74\x25\xf3\x8d\xd6\xb1\x71\x11\x09\
+\x0d\xaf\xd3\x10\x89\x12\xcc\x9b\x73\x96\x3c\xa8\xf3\x8c\xb8\xbf\
+\xd1\x2c\x2b\x90\xea\x95\xcf\x0a\x51\x10\xff\xb3\xd7\x20\xc6\xfa\
+\x72\x4e\xab\x6f\xbc\x49\xc9\xe1\x5e\x25\x03\xb8\x20\xcf\x08\x57\
+\x75\x4f\x9f\x55\x1d\x41\xd4\xb3\x39\xcd\xce\xcc\xa8\xbb\xbb\x3b\
+\x7a\xeb\xad\xb7\xfe\x91\xa4\xf0\xcf\x12\x40\xe0\x43\x1f\xfa\xd0\
+\x1b\x30\x99\xdb\x0d\xf3\xb5\x72\x19\xb0\x9b\xd0\x91\xc3\x87\x34\
+\x4b\x4e\xff\x4f\xde\x7c\x87\x92\x86\x51\x28\x0e\x85\x78\x9a\xe5\
+\x4b\x56\xe3\xae\x65\x32\x92\x4c\x6a\x68\xcb\x66\x05\x11\x56\xc7\
+\x0a\x3a\xcc\x73\xc0\xf9\x80\x86\x77\x6e\x53\x7a\x68\xa8\xe3\x16\
+\x1d\x21\x5d\x1e\xbd\xf6\x33\x35\xaf\xa6\x68\xba\x5b\xf8\xc8\x35\
+\x56\x64\x05\x56\xab\x2a\x46\x6a\xdd\x7b\xfd\x76\xd2\xeb\x16\x77\
+\x81\x5a\x5d\x4d\xc0\xba\x81\x00\x3c\xb2\xc8\x02\x0a\x34\x25\xf8\
+\xca\x95\x2b\xdf\x73\xdf\x7d\xf7\x6d\x90\xe4\xfc\x54\x01\x50\x8b\
+\x27\xdf\xf6\xb6\xb7\xdd\x4f\x1d\xef\x33\x0f\xe5\xc9\xc0\xc6\x4f\
+\x9e\xd0\x19\xd2\xdb\x35\xc3\x2b\xb5\xb2\x3b\xa3\x64\x87\x79\x16\
+\xe4\x73\x01\xa6\x96\x6a\x34\x73\xfc\x24\x7e\x58\xb1\x4c\x53\xda\
+\xe2\xab\xa4\xc0\x7d\xbd\x57\xb9\x43\x72\x20\xad\xe4\x86\x21\x85\
+\x13\x21\xfb\xbd\x01\x68\x4d\x1d\x79\x45\x2e\xc2\xbe\xc6\x6d\x9a\
+\x8c\x12\xf7\xa6\x25\xe6\x6b\xaa\x7e\xf9\x9a\xd7\x06\x53\x5f\x90\
+\x68\x43\xe1\xd4\xbd\x79\xbb\xc2\x71\x8a\x29\x2c\x2f\x64\xc2\x2d\
+\xb9\x81\x26\xa7\xe4\x52\x8c\x09\x25\x2e\x92\x3d\xd2\xa3\x08\xdd\
+\x7e\xfb\xed\x1f\x35\x6c\xfe\x14\x01\xd8\xa4\x67\xd5\xf0\xf0\xf0\
+\x9b\x6d\xd3\x02\x9a\x45\x92\xe3\xc7\x8f\x2b\x37\x33\xab\x3d\xdb\
+\xb7\x2b\xe1\xb5\x98\x0f\x7b\x6d\x34\xae\xd4\x44\x1b\x0b\x33\x6e\
+\xa8\x92\x5d\xd6\xa5\x23\x47\x54\x5e\x5a\x6a\x23\xbb\xd4\x43\xde\
+\xde\x0b\x36\x38\x8e\x0f\xd7\x58\xad\xae\xf5\x83\x72\x9d\x96\x36\
+\x2b\xa4\xd2\xe7\x5f\x78\x41\x59\xf2\x8a\x2b\x35\xeb\x59\x17\x60\
+\x6c\x0b\xc3\x4f\x7c\x0f\xf6\xad\x92\x17\xc8\x09\x6e\x38\x57\x63\
+\xee\x9a\x82\x31\x4f\x91\x95\x09\xa5\x46\x37\x2a\x3e\x30\xc2\xf7\
+\xa0\x65\xc6\x2f\x59\xc5\x80\x8e\x6a\x5e\xbc\x64\xb1\xa0\x8a\x40\
+\x5c\xce\x01\xea\xef\x06\x13\xd3\x3f\x4d\x00\xa1\xfb\xef\xbf\xff\
+\x1e\xc2\x5e\xcc\xdc\x5c\x06\xfd\x2f\x9e\x3b\xa7\x4b\x50\x17\x68\
+\xba\xb2\xaf\xcf\x32\x1f\x31\xc9\x89\xf5\x41\x34\x58\xc2\x02\xaa\
+\x2c\xca\x6f\x17\x6b\x35\x39\x05\x5e\x2c\x9d\xbf\x60\x90\xdd\x32\
+\x11\x27\x3d\x1d\xdd\xbd\x4b\xc9\x15\x5d\x2a\xe3\xef\x31\xc2\xd4\
+\xf2\xc4\xa4\x2e\xec\xdb\xaf\x6a\xbe\xd0\x36\xfd\x46\x27\x62\x40\
+\xae\x25\xbe\x5b\x6c\xa9\x15\x73\xea\x1e\xdd\x2c\x67\x78\xbd\x6a\
+\xf1\xaa\xea\xe1\x05\x79\xf1\xac\xba\x6e\x5a\xa3\xfe\x37\xbf\x13\
+\xdc\x59\x05\x58\xc2\x38\x40\xe9\x48\x90\xcd\x2a\xad\xe6\x1d\x98\
+\xaf\x9d\x3f\x2f\x1f\xf3\x93\xbe\x1b\x2b\xe8\xff\xd8\xc7\x3e\xf6\
+\x96\x2b\xf9\x0e\x74\x0e\x4c\xbc\x5f\xb7\x6e\xdd\x3f\xb5\xfd\x3a\
+\xc8\x80\xdf\xc4\xd9\x73\xca\xcf\xcd\x69\x23\x05\x89\x61\x3e\x6a\
+\xd2\x52\x99\x2c\xcd\x11\xff\xc1\xb0\xf1\x39\x4f\x35\xbf\x83\x96\
+\x1b\x62\xdd\x36\x7e\x2f\xf2\x5c\x79\x69\x59\x7d\xeb\xd6\xca\x47\
+\x8d\x2f\x01\x58\x2a\x29\xda\xb7\x5a\x0b\x2f\x3d\xa5\xec\x89\x39\
+\xee\xbd\x3a\x3a\x74\xa2\x87\xeb\x95\xe4\x73\x4c\x1e\x11\x56\x80\
+\x46\x49\x61\xfa\xac\x62\x3d\x03\xea\xb9\xee\x06\x35\x86\xd7\xa9\
+\x5e\x29\xda\x7b\xd3\x3c\xeb\x0f\x84\x54\x2f\xcd\x6b\xf9\xcc\x01\
+\xf9\x38\xbe\xaa\xbc\x75\x11\x22\x19\x63\x63\x72\x52\x3e\x5c\xb3\
+\x1a\x29\x8b\x2e\xb4\x46\x46\x46\xee\x91\xf4\xb7\x50\xf5\x4a\x01\
+\xf8\xe8\xeb\xf5\x51\xec\x6c\x43\x00\xb6\x46\x5f\x9a\x9f\xd7\x0c\
+\xc0\xe7\x15\x8a\x1a\x1d\x18\x84\x79\x4f\xe0\x7d\x0b\xf4\xd4\x12\
+\x00\xa7\x14\x2a\x4b\x95\x4c\x42\x3d\x23\x61\x92\x91\x90\xb8\x6c\
+\x85\x20\xa8\x00\x08\x25\xfa\xfb\x59\x5c\x55\x0d\xe2\x7d\x94\x92\
+\x36\x68\xd2\x65\xaa\x44\x0b\x1d\xed\x4c\x11\x8b\x69\x9b\xbd\xcb\
+\xbc\xf4\x06\xca\x05\x25\x82\x43\x6a\x54\x29\x74\x66\x2f\xa8\xd0\
+\x33\xc8\x3c\x2b\x69\x93\x05\x99\x2b\x6d\x05\x40\x6f\x0d\x21\x56\
+\x55\xbc\xf4\x8c\xca\xf3\x17\x98\x2c\x70\x75\xaa\x67\xc0\xb5\x84\
+\x30\x97\xb3\xaa\xd3\x91\x0a\x66\xba\x2c\x18\x92\x22\xdf\x2a\x29\
+\x7e\x8d\x00\xde\xf7\xbe\xf7\xed\xa4\xe7\x96\x32\x75\x7e\x1d\xbf\
+\x5e\x64\xf1\xb9\xf9\x39\x85\x78\xa8\x2f\x95\xb4\xa6\x1f\xb8\x42\
+\xfb\x12\xa3\x44\x4e\x8e\x65\xf4\xd3\xcc\x1c\x1a\x54\xaa\xe6\x80\
+\xcc\x2d\x21\x48\x56\x10\x2d\xcd\x3a\x15\x85\x32\xd7\x59\xbb\x4b\
+\x76\xf7\x90\xae\x26\x61\xfc\xef\x05\xb5\x6c\x05\xd0\x10\x12\xc0\
+\xd7\xc1\x1f\xa7\x2e\xa9\xc6\x5c\x01\x42\x20\x45\xce\xd8\x8f\xd1\
+\xf4\x0d\x4a\xaf\x24\xc4\xca\x69\x27\x57\x2e\x65\xf2\x69\x15\x27\
+\x9e\x43\x18\x01\x6b\x8d\x57\x49\x80\x63\x38\x96\x43\x16\x5b\xa3\
+\x3f\x11\xdb\xb8\xd1\xe2\x55\x32\x99\x1c\x7d\xef\x7b\xdf\xbb\x96\
+\x56\xda\x92\xb9\xab\xe3\x0b\xc1\xcd\x9b\x37\xef\x68\x58\xe0\xf1\
+\x6c\x03\x73\x79\x76\x4e\x55\xe2\x68\x8c\xef\x69\x90\x36\xc8\x1f\
+\xf5\x75\x90\xda\x35\xe4\x5a\x72\x2b\x1c\x67\xb3\x30\x38\x48\xd2\
+\xe2\x5a\xc1\xe2\xfb\x68\xc7\xf8\xb1\xa1\xba\xdc\x26\x85\x4c\x77\
+\x9f\xd5\x78\xc7\xd4\xbd\xcb\x73\xb9\x1d\x74\x87\x60\x3c\x88\x30\
+\x09\x7d\xcc\x63\xae\x63\x05\x7e\xf9\xf2\x21\x95\x4f\x1d\xd0\xc2\
+\xab\x87\x39\xc7\xf9\xa6\xc1\x9e\x25\x15\xce\x3f\xa6\xc2\x1c\xbd\
+\x01\x04\x5f\xcf\x5f\x5b\xf9\xda\x39\xc1\x19\x17\x6b\x0e\x4a\x82\
+\x3f\xdb\x7e\xa7\x48\xba\xd1\x28\xfd\x4a\x0b\x08\x63\x1a\xd7\x99\
+\xf0\x02\x59\xd4\x2c\x90\x50\x08\x41\x24\xda\xa5\x6c\x80\xf3\x72\
+\x98\x54\x90\x73\xd9\xd3\x6c\xde\xdf\x58\x32\xa5\xe9\x9c\xa2\x83\
+\x6b\x94\x3d\xf4\x8c\x2a\x97\x6a\x1d\x3c\xb0\xc5\x4c\x78\x75\x4c\
+\x99\x70\x54\x24\x16\x5a\x9a\x9c\xe0\xba\x07\xe3\xcd\xcb\xe9\xb0\
+\x5b\xad\xd1\xe8\x98\x57\xe0\x62\x45\xd1\xeb\xd7\x60\xe6\x61\x2d\
+\x1e\x3b\xa2\xca\x82\x1f\x86\x5b\xf7\xf8\xfc\x35\x85\xce\x9d\x56\
+\xa3\x56\x51\xd7\xaa\xf5\x98\xfe\xb3\xaa\xcc\x8f\xa9\xb4\x80\x5b\
+\x16\xa5\x7a\xe1\xda\xfe\x07\xcc\xd8\xf4\x98\x57\x4e\x56\x79\x00\
+\x9d\x3d\x0d\x18\xae\x6f\x0b\xa0\x61\x05\x40\xba\x18\xe5\xe4\x68\
+\x5b\x00\x36\x01\x2a\xe7\x73\xf2\xd7\xea\xb6\x3b\x13\x70\xeb\x98\
+\x62\xf8\x1f\x2c\xa8\x3c\xa8\x56\xc0\xdf\x27\x4e\xab\x67\xe3\x0e\
+\xe5\x87\x46\xc9\xc2\x9e\x57\x79\xc1\x33\x8b\x87\x19\x68\x68\xc0\
+\x40\x33\xa1\x2a\x8e\x35\xc0\x2c\x9d\xe2\x46\xa5\x53\x00\x59\x37\
+\xc1\xda\x96\x54\xca\xe4\x94\x19\xb8\x9d\x67\x69\xa2\x5e\xbc\xa0\
+\xfc\xc5\xc6\x55\x40\x19\x8c\x73\x5f\xed\xbb\xf2\x6e\xbd\x59\x95\
+\xc9\xa7\x54\x5e\xac\xa9\x59\x8c\xaa\x3c\x57\x27\xa7\xa8\xf2\xb7\
+\xac\x17\x5d\xbd\x4c\x5c\x5a\x46\x08\xf4\x26\xa9\x8c\xac\x52\x00\
+\xc3\x75\x6d\xe5\xd7\x6d\x82\xcd\xc9\x08\xfe\xdf\xdd\xa9\xc4\xea\
+\xa0\xa6\xcb\x03\x41\xd3\x91\x09\x88\x73\x39\x72\x11\x34\x68\x7c\
+\xfc\x27\xd2\x69\x66\xc4\x4c\x9b\xf4\xec\x12\xe4\xe7\x45\x0d\x6c\
+\xd8\xae\xd2\xf8\x51\x98\x58\xb4\x02\x18\xde\xb3\x4b\x4e\xb7\x2b\
+\x07\x21\x86\x58\x40\x64\xc5\x88\x4a\xaf\xce\x6a\x74\xcf\x1b\x25\
+\xaf\x85\x01\x67\x9e\x79\x56\x7e\xea\xfd\x08\x7d\xbe\xee\x61\x22\
+\x45\x31\xcf\xf5\x9b\x55\xdf\x1c\x63\x0e\x33\x7f\x15\x4d\x2f\x68\
+\xe1\xf4\xb8\x8a\x67\xa6\x34\xe1\xfe\x9d\x32\x83\x39\x84\x44\xb4\
+\x28\x86\x55\x99\xcb\x2b\x10\xa9\xcb\x09\xb3\xf6\x25\x3f\x56\x72\
+\x79\x6d\xd6\x0d\x7d\x75\x97\x90\x5d\xc4\x00\xfa\xad\x1b\xc0\x6b\
+\x7f\xc7\xfa\x2f\x63\x00\xbe\x11\x45\x00\xd6\x02\xdc\x3a\x92\x05\
+\x40\xa8\xeb\x61\xcc\x91\x8b\xf9\x05\x42\x36\x5e\x5f\x4d\xae\x6b\
+\x47\xaf\x8e\x58\x08\x87\x15\x6a\xf4\x10\x5a\x0e\x0f\x0e\x81\xd8\
+\xd6\xcf\x6d\xb8\x13\x0c\xd4\x8b\x59\xeb\x42\x19\xac\x24\x3c\x14\
+\x15\x27\x3b\x58\x80\xe6\x5c\xc5\x46\x42\xea\xd9\x76\x8b\xfc\xa1\
+\x20\xf3\x56\xed\x73\x16\x6b\xcc\x75\x4c\x37\xde\xdf\xa7\x91\x9b\
+\x6e\x26\x5b\xcd\xc0\x64\x5e\xf9\x19\xae\xe5\xfd\x58\x4e\x90\x28\
+\xb0\x48\x32\x86\x9b\x76\xb9\x8a\x64\x58\xcb\x95\x3a\x6a\x97\xe6\
+\x5e\x0d\x1e\x02\x81\x4e\xc8\x8f\x9b\xe1\x2a\x01\x70\x32\x72\xb9\
+\x16\x77\x5b\x80\x17\x96\x14\x89\xf9\x31\xdd\x28\x8b\xd4\x15\x49\
+\xcb\xb5\x82\xf0\x4c\x49\x5a\x5a\xb6\xb1\x21\xdc\x3d\x80\x46\xdb\
+\x80\xe7\x1a\xe1\x34\x31\xfb\x49\xc1\x15\x89\xcb\x0a\x65\x76\xdd\
+\x22\x5f\x2c\xcb\x12\x4a\x24\x31\x45\x25\x56\x39\xca\xec\xbe\x55\
+\x99\xd5\x6b\xdb\x00\x57\x62\xc1\xb8\xa3\x4d\xa6\xda\x64\xc1\xd2\
+\x53\xff\xa6\x75\xd6\x2a\x4a\x53\x92\x9b\x8d\x20\xd8\xba\xaa\x26\
+\xde\x57\x1d\x18\xa4\x14\xee\x62\xed\xc1\xab\x2c\x14\x62\xe4\x79\
+\x9a\xa8\x1d\x01\xc4\x7e\x12\x04\x1d\x4c\xc3\xf1\x0c\x83\xf6\x4a\
+\xd3\x5e\x08\x3a\x52\x18\xb2\xe8\x0f\x98\xd9\x30\xe5\x75\x26\xbe\
+\x3a\xe6\x34\xeb\x46\xca\x06\xa1\xeb\x36\x7d\xc5\x96\xda\xd6\x01\
+\x92\x97\x7d\xf2\xa6\xcf\xab\xb1\x9a\x50\x18\x0a\xab\xff\x86\xdd\
+\xca\x12\x59\x34\x77\xc6\x3c\x49\x65\x78\x17\xf8\xb1\x0d\x2d\x8a\
+\x79\xd0\x7e\x39\xaf\x06\x02\x38\xfd\xa3\xa7\x2c\xd3\xe1\x78\x5c\
+\x83\x37\x5c\x8f\x55\x31\xab\x93\xc5\x22\x82\x6a\xe4\x04\x78\x86\
+\x55\x26\x5a\x79\xf8\x39\x38\x06\xcc\x98\x05\x7b\xf8\x7a\x93\xe7\
+\x9d\x2b\x85\x60\xad\x08\x2b\xef\x84\xe7\x4e\xd2\xd8\x11\x00\x42\
+\xe7\xc3\x85\x76\x3b\xcc\x4f\xa3\x11\x62\x45\x7e\x18\xf0\xe1\x54\
+\x75\xb7\x80\xb6\x42\x52\xbd\x3d\xe7\x55\x42\x68\xb6\x42\x98\x5a\
+\x3e\xe7\x96\x0b\xb8\x90\x09\x93\x56\x8b\x00\x1e\x52\x07\x89\x0b\
+\x53\x17\x94\x1a\x59\x85\x80\x7c\xea\xdd\xb8\x55\x8d\x35\x68\x5c\
+\x20\xbc\x31\x7b\xeb\xaf\x35\x35\x8c\xf6\x4b\x05\xc6\x20\xb1\xbf\
+\x64\x05\x50\xcb\x17\x48\x84\x7a\x94\x59\x13\xa3\x29\x7b\x09\x2c\
+\xc1\xdd\x96\x22\xcc\x5b\x47\x00\xb3\xed\x90\x07\xb9\x0e\x2e\xd4\
+\xb4\x02\xa8\xe6\x6c\xc8\xb2\x82\x11\x14\x08\x87\x6d\xe9\xcd\x77\
+\x53\x17\x94\x0c\xcf\x57\xba\x80\x0b\xff\x95\x8e\x00\x02\xc1\x80\
+\xc2\xc1\x90\x15\x40\xb3\xcc\x12\x17\xa7\xd4\xe0\x38\x94\x34\x3c\
+\xa3\xd5\x2b\xfc\x1f\xe2\x24\xa3\x9f\x3e\x7d\x2c\x69\x05\x51\x5b\
+\x9c\x36\xa6\xd9\xbe\xee\xb6\xcc\xb9\xe8\xd3\xd2\xf1\x83\x68\xc6\
+\x30\x55\x13\x92\xc4\x4d\x70\x2f\x88\x63\x90\xd8\x16\x39\x30\x4b\
+\x31\x55\x2a\xa3\xd5\xcb\xee\x86\xe6\xfd\xa4\xc3\x21\x55\xaa\x13\
+\xe4\x13\x45\x04\xd0\x24\x22\x04\x40\xff\x29\xee\xab\xb5\x75\xd0\
+\xae\x03\x1c\xc1\x2c\x7e\xcf\xd8\xd6\x26\x6b\xf3\x29\x9c\x4c\x5e\
+\x16\x00\xd6\x5e\x96\xe4\x5d\x69\x01\x55\x8a\x85\x2c\x17\xe4\xf0\
+\x2f\x88\xb4\xa2\xd4\xf3\x05\x53\x86\x56\x1c\x55\x2f\x4d\x2a\x0a\
+\x6a\xbb\x4b\x53\x0a\xa7\x43\xaa\x2e\xb9\x1d\xe5\x63\x15\x14\x48\
+\x5d\x52\x33\x19\x55\xbc\xb7\x4f\x75\xb4\x5f\x9e\xba\x88\x00\x0c\
+\x00\x36\x21\xd7\x2c\x02\x01\x38\x2a\x2d\x9e\x52\x61\xc3\x46\xac\
+\x60\xd4\x6a\x85\xa7\xda\xeb\x68\xf9\x37\x44\xec\x9f\x46\x0e\x4d\
+\x0b\x82\xa3\xb7\xdc\x6c\x05\x10\x8c\xfa\x15\x88\xcf\xca\xf5\x16\
+\x50\x42\x59\x71\x94\x51\x9e\xe1\x38\x32\xaf\x6a\x10\x86\xea\x6a\
+\x15\x44\x30\x6e\x4a\x82\x9a\x8d\x6d\x86\xe0\x06\x1e\x3c\x53\x84\
+\x51\x94\x75\xde\x99\xa1\xec\x79\x06\xb7\x63\x01\x4d\x88\x28\xb3\
+\x30\xe9\xb5\x93\x9d\x40\x84\xbc\x9d\xc2\x21\x84\x69\xca\x63\xc2\
+\x19\xfa\x82\x17\x4f\x29\xb3\x69\xbb\xe2\x1b\x57\x28\x71\x5d\x58\
+\xb1\x15\x94\xc6\x2b\xa5\xd4\xfa\xa8\xd2\x3b\x37\x72\x6d\x27\x9a\
+\x0a\xa8\x34\x37\xad\xda\xec\x02\xe6\xd9\xd2\x1e\x02\x80\x18\xb1\
+\x82\xf2\xa5\xa2\x96\x8e\x1e\xe0\xb8\x24\x54\x67\x1b\x9a\x6a\x6b\
+\xbe\x69\xc8\xa5\x09\x33\x8f\xb5\x95\x1c\x2e\x5b\xf4\xc7\xa4\x03\
+\x54\x7a\xa4\xb3\xd5\x29\x3a\x3f\xe4\x23\x7c\x0f\xc5\x68\x84\xa4\
+\x27\x94\x1c\xad\xaa\x6b\x6d\x43\xd1\x6e\x62\xfb\x30\x58\x91\xa0\
+\x44\x4e\x19\x16\x3a\xd6\x60\x5c\x22\x24\x7f\x3c\x81\xe2\xd2\xea\
+\x58\x38\xca\x3e\xcb\xe0\x5e\x69\x01\x15\x5e\x37\x5f\x68\xa7\x8a\
+\x56\x00\x71\x3a\x2d\x61\x80\xca\x71\x72\xaa\x2e\x37\x95\x3b\xfa\
+\x8a\x86\x6e\xbc\x59\xdd\xeb\x37\xca\xb9\x7e\x37\xfe\x99\x67\x81\
+\xb8\x45\x22\x69\xcd\x2b\xc4\xbd\x1e\x0c\x94\x2e\x9e\xc5\x05\x4c\
+\x62\xd2\xb0\x21\xc8\x46\x08\x00\x94\x0f\x7e\x4b\x59\xfa\xea\xb8\
+\x4a\x37\x6c\x53\x6a\x68\x58\xb0\x29\x62\x94\x05\x4e\xdb\xe2\x22\
+\x6f\xaf\x13\x4a\xdd\x52\xc8\x0a\x8e\x05\x83\x17\x75\xc6\x59\xc5\
+\x7a\xa9\x27\xd2\x31\xd6\xd3\x24\xaf\x99\x50\x62\x10\x54\xc7\xdf\
+\xb3\xb1\xba\x92\x83\x8e\x55\x54\xac\xdf\xa3\x36\xc1\xcc\xc9\xf0\
+\xf9\x87\xc9\x1b\xcb\x89\xcb\x47\x63\xc6\x6f\x92\x20\xe6\xe7\x63\
+\x36\x5b\x9c\x66\x68\x5c\x89\x01\xb5\x31\x3e\x6e\xfb\x8f\xfa\x90\
+\x5a\x82\xfa\x3f\xc2\xc3\x4c\x62\x4d\xac\x7c\x3e\xaf\xe9\xe7\x7f\
+\x04\x43\x25\xf9\x9d\x0a\x85\xc9\x08\x4c\x0c\x21\x71\xee\x71\x6c\
+\x1e\x4f\x3c\x9e\x21\xef\x9e\xc5\x8f\x6d\x28\x6d\xbd\xf4\xb4\x16\
+\x00\xd5\x4d\xdd\x40\x9a\x3d\x57\x50\x69\xf2\x02\xf7\x57\xed\x33\
+\x1e\xd4\x74\x49\x9d\x99\xb7\x78\xe1\x04\xe8\x5e\x36\xf7\xd9\x6e\
+\xd1\xf9\x67\x9f\xd3\xf4\xb1\x1f\xab\xb4\x7c\x46\xd1\x01\x3f\x16\
+\x66\xc2\xd5\x8c\x22\xe9\xb8\x42\xa9\xa8\x62\x03\x41\xf5\x6d\x75\
+\xd4\xb3\xc9\x53\xcf\x96\x06\x02\x90\x4d\xd6\x1c\xd7\x47\x04\xf3\
+\xb5\x36\x5c\xa0\x9c\x38\x1d\x67\xe1\x0a\x9d\x4c\xf7\xa5\x97\x5e\
+\x3a\x72\x0d\x08\x3e\xf9\xe4\x93\x87\x79\x97\x56\x32\x37\x38\x94\
+\x9d\x71\x04\x10\xc5\x0a\x8c\x09\x35\x25\xea\x7b\x29\x77\xf8\xa8\
+\xe6\xc7\x0e\x61\xde\x79\x62\xef\x84\x8d\xd9\x96\xbc\x9a\x05\xb7\
+\xfc\xe9\x63\xc4\xe6\x26\xd7\x3d\xcb\x7c\xc7\x05\x3a\x84\x50\xb8\
+\x86\x20\xb0\x1e\x98\xb7\x66\xcf\x09\xc2\x24\xf5\xc1\xf4\x5e\xcd\
+\xef\x7f\xc2\x6a\xd0\xab\x59\x90\x45\x08\x15\x18\x68\xd0\xf1\x09\
+\x71\xef\x12\xe7\x2f\xe2\xe7\x30\x97\x48\x51\x7c\xf5\x70\x2d\x4e\
+\xe1\x14\xa2\x90\xf1\x81\xfc\xed\x30\x58\x43\xf7\x35\xbf\x22\x4e\
+\x00\x1c\x8b\xc9\x0b\x85\x08\xbb\xf4\x12\x4c\x94\x81\x30\xff\x69\
+\xb6\x1b\x9d\xfc\x49\x10\xf4\xf8\x5c\x64\x33\xc3\xab\xd4\x04\xdb\
+\x48\x15\x49\x66\x32\x4a\x50\xe2\xe6\xe9\xa8\xd8\x5c\xda\xe5\xe1\
+\x0b\x35\xcd\x3d\xff\x14\xdd\x9d\x21\xc5\xfa\xfa\x55\x5d\x30\x66\
+\x69\xea\xfd\x10\xe0\x35\xa7\x3a\x55\x57\x2d\x17\x31\xcc\xb6\xa3\
+\x83\xc9\x0f\x60\x1e\x57\x41\x8a\x9c\x73\xad\xc9\xe3\x9b\x30\x58\
+\x80\xa1\x79\x79\x95\x33\xb8\xd8\x51\xac\x62\x99\xe2\x86\x34\x35\
+\xe0\xb4\xdc\x47\x02\xe9\x23\x58\x98\x41\xf5\x79\x70\x61\x49\xa1\
+\xae\x1e\x1a\x17\x71\x14\x94\xa0\x59\x02\x40\xc3\xa4\x70\x51\xb1\
+\x36\x61\x31\x6e\x1d\xed\x57\xc0\x8c\x0a\xd1\x05\x73\xf1\x27\x53\
+\xaa\x74\xa5\x71\xdb\xf5\xca\xb6\x37\x66\xcd\xcf\xcf\x1f\x94\x94\
+\xfd\xc9\x96\x58\x13\x9a\xc7\x0b\x9e\x05\x21\xad\x99\xf8\x31\x9d\
+\xf4\x9a\x35\x0a\xa6\x52\xed\xa6\xa4\xd0\x9c\xa3\xfc\x49\x1a\x25\
+\xfb\x9e\x46\x71\x86\x81\x32\x42\xb8\x00\xd3\x33\xaa\x2d\x2f\x81\
+\x65\xa1\xab\xc2\x97\x07\xb5\xcd\x1f\x42\xe3\x6a\xa0\x41\x97\x89\
+\x2e\xaa\x3a\xbf\x17\xac\xd8\x8b\xc6\x8f\x32\x4f\x56\x45\x84\x0b\
+\xd6\xd8\x8c\xce\x41\x60\xe4\x06\x3c\x5f\x67\xfe\xf3\xcc\x3b\x4b\
+\x68\x0e\xc2\x78\x44\x0e\xc2\xf6\x05\xad\x10\xf0\xeb\x2e\xe6\x8b\
+\xf3\xbd\xdd\xaa\xc9\xe1\xf7\x65\x42\x78\x1d\xed\x93\x70\x05\x33\
+\x19\xa5\xae\xdf\x2a\x5f\x3c\x66\x9b\x21\xa6\xd7\xc1\xde\x81\xc7\
+\x84\x4a\xff\xa1\x9e\x60\xe9\x3b\xdf\xf9\xce\xf7\x30\x91\xaa\xc1\
+\x02\x87\x50\x18\xe7\x0d\x4c\x64\x90\xb4\x36\x16\xb5\x21\x05\xb9\
+\x80\xf2\xd2\xf2\xe1\x63\x5a\x3a\x31\x66\x72\x76\xa8\x26\x37\x3f\
+\xa7\xe5\xb1\x7d\x2a\x4d\x2f\xb0\xc0\xa0\x01\x1c\x8b\x1d\x3c\x70\
+\xd9\xfc\x1b\x90\xcf\xef\xa2\x4d\x63\xf6\x27\x08\xaf\x17\x44\xc5\
+\xc5\xb1\xc9\x14\x49\x6d\x67\xc8\xeb\x0b\x71\xc1\x91\x15\x58\x85\
+\x0c\xaf\x1b\x8c\x49\xf6\x0d\x12\x96\xbb\x15\x80\xe9\x96\x19\xc9\
+\xb6\xcd\x85\xf6\x1d\x5f\x08\x0e\x18\x9b\x30\x8e\xe9\x8b\x42\xc8\
+\x57\xc0\xfc\x3d\x08\xe4\x5f\x0e\xfa\xb4\xfa\xce\x3b\x55\x67\x1d\
+\xed\x0d\x1d\xcb\xff\xf3\xab\x5f\x7d\x54\x92\x7b\x4d\x4f\x50\x2c\
+\x85\xed\x25\x63\x48\xe8\x50\x3c\x1e\xbf\x85\x92\x51\x41\xd0\x33\
+\x45\x27\x25\x4b\x77\x55\x24\x27\xcc\x62\x2b\xad\xdc\xb9\x3a\xfe\
+\xba\x4f\x09\x5c\x21\x94\x4e\x09\x75\x63\xa2\x05\x15\xcf\x03\x82\
+\xe5\x59\xe5\xa7\xd1\x98\x79\x3e\x81\x76\x22\x61\xae\xdb\x82\x04\
+\x90\x42\x33\x69\xa8\x2f\x20\xc0\xc5\x76\x8b\xb9\x04\xb3\x2e\x89\
+\x48\x85\x50\x9b\x27\xf5\xbe\x84\x15\xd4\x5a\xcf\xf8\x4d\x76\x88\
+\x40\x8a\x97\x6b\x14\xdc\xa3\x6c\xdd\x11\x0d\xb5\xdc\xac\x0e\x55\
+\xb8\x37\x8f\xd5\x2c\x04\x14\xc8\x13\x26\x11\x8c\x47\xdc\x0f\x6c\
+\xda\xa0\x24\x2f\x6f\xe7\x0a\x79\xdb\x0d\x62\xd3\xc4\xe3\xf9\x62\
+\x71\xca\x4a\xf2\x5a\x01\xd8\x93\xb3\x7b\xf7\xee\x7d\x84\xf6\xb8\
+\xd9\xdc\xe8\x04\x89\x02\x49\x04\x50\xe4\xbd\xa0\x72\x79\x28\x67\
+\xb5\x5a\x2b\x38\xca\x9d\x9e\xd7\x12\xe7\xfb\xf7\xec\x84\x11\x59\
+\x8d\x37\x1d\x17\x01\xd5\x29\x54\xa6\x68\x5e\x56\x6c\x1c\x0f\x63\
+\xce\x84\x22\x50\x1b\xad\x24\x73\x8a\x0f\x61\x5d\x32\x61\xcf\xb1\
+\x59\x9c\xc7\xc2\xb2\x2f\x5f\xd2\xfc\xcb\x0d\x30\xc6\xa7\x64\x66\
+\xb0\x53\x9e\xd8\x66\x4b\xad\x14\xc6\x5d\x7c\x8a\x90\x03\x78\x80\
+\x26\x21\x02\xa1\x76\xf3\xf7\x10\x08\x2e\xa8\xb2\xd1\x08\xb8\x32\
+\x8b\xf6\x97\x30\xff\x32\x18\x80\xdb\x9e\x25\xc3\xdc\xf0\xcf\xde\
+\xad\xba\xcf\xe9\xec\x55\x74\xbf\xff\xdd\xef\x7e\x05\x26\x4b\xe2\
+\x73\x8d\x00\x3a\x49\xd2\xfe\xfd\xfb\x1f\xc7\x0a\x5e\xd9\xbe\x7d\
+\xfb\x36\xfa\x67\x0a\x00\x84\x5d\xbb\x76\x69\x79\x0e\xf3\x86\xa9\
+\x26\xa4\x86\x30\x59\x72\x83\x53\xa7\xd4\xbd\x69\x2d\x0c\x46\xf0\
+\xd7\x12\x3d\xfe\x57\xb4\x34\x0e\x63\x2d\x03\xb3\xa6\x7f\xfe\x99\
+\xe7\x8c\x55\xab\x7b\xa3\xc7\xcb\x4d\x97\x4c\x2e\x88\xb5\xa0\x79\
+\x00\x8b\x66\x08\x02\x80\xc9\x2c\xe9\x33\x9a\xf3\xc8\x00\x27\x5e\
+\xdc\x7f\xe5\x0e\x26\xee\x97\x46\x76\x01\x8e\xfd\x54\x99\x7d\x30\
+\x69\xe6\x75\x0a\x08\x1d\xa0\x2d\x92\x3c\x65\x6b\xf2\x2f\x32\xd7\
+\x14\x82\xce\x05\x01\xbf\xa8\xf2\x7d\xdd\x8a\xdc\xb2\x5b\x29\xc0\
+\x6f\x1e\xed\x9b\x8d\x1d\x67\x4e\x9f\x7e\xe2\x99\xa7\x9e\x3a\x20\
+\x56\xff\x53\xdf\x0e\x77\xb2\x42\x5e\x8b\xf9\xb6\x6c\xd9\xf2\x16\
+\x3a\xc5\x8e\x49\x8a\x82\x50\x9d\xee\x6a\x93\x56\xb7\x8c\x00\x6c\
+\xda\xea\x90\xa2\xd6\xd0\x68\x17\x3e\x38\x21\x77\xf9\x15\xb0\xa0\
+\x2c\x8c\x11\x80\x74\xac\x69\x63\xe1\x24\x55\x52\x7a\xb5\xa7\xde\
+\x55\xae\x7a\x77\x05\x40\x72\x98\x08\xf9\xb0\x0e\x23\x00\x21\x08\
+\xfc\xff\xac\xa7\xec\xb4\x0f\x30\x75\xae\x69\x3a\xe1\x5d\x60\x90\
+\xa3\x44\xcc\x53\xa8\xa7\xfd\x72\xd4\xb6\xa1\x58\xc3\x32\xda\x9f\
+\x02\x57\x26\xb9\xe7\x22\x20\x59\x00\x24\xfb\x07\x75\xaa\x2f\xa5\
+\x1d\x0f\xfe\xa1\x6a\x91\x90\x49\x7a\x44\x92\x57\xfb\xc6\x23\x8f\
+\x3c\x38\x7e\xf6\xec\x31\x33\xe5\xcf\x7a\x3d\xee\xb2\x0d\x75\x86\
+\x77\x69\xdb\xd9\x6a\xb2\x26\x12\x8d\xb2\x80\x98\xc2\x50\x69\x6e\
+\x16\x90\xa1\x2f\x8f\xd9\xa2\x3d\x00\xad\x81\xc4\x27\x15\x0c\x9d\
+\xc5\xa5\x2b\x80\x95\x09\x18\xd4\x06\xa4\xa6\x80\x34\xcd\x89\xa6\
+\xba\x60\xbe\x67\x65\x83\x66\x87\x0f\x40\x0d\x60\xbe\x41\x9b\x5b\
+\xd8\xac\xa6\x2d\x80\xfa\x82\x47\xb2\xe3\x53\x69\xde\x0a\xa5\xa3\
+\xfd\x4e\x25\x6b\x29\xc1\x5c\xb1\x3e\xb5\xdc\xad\xc1\x89\x3c\x37\
+\xce\x50\xfa\xe2\xd1\xc1\x69\x7c\x3f\x6b\x36\x47\xf4\xea\x04\x09\
+\xd2\xba\x7f\xf7\x51\x45\x79\xf9\xba\x48\x64\x9a\x9b\x9b\x63\x2f\
+\xd3\xfe\xaf\xfd\xcd\xc3\x0f\x3f\x64\xf2\xb9\x9f\x77\x83\x44\x89\
+\x0d\x88\xb3\xec\xb8\x7a\x07\x1b\x0c\xc2\x30\x6f\x22\x01\x42\x88\
+\xab\x44\xf9\xe9\x00\x88\x04\x5d\x5b\x76\xc6\xd3\x15\x16\xd6\x80\
+\x29\x07\x40\x74\x38\x86\xf1\x98\xc7\xf9\xa6\x52\x7d\x9e\xd2\xc3\
+\x4d\xa5\xb7\xf8\x31\x5f\x7c\x33\x12\x82\xa2\x58\x40\xbc\x85\xe0\
+\x4d\x59\x60\x13\x0c\xb9\xcb\x9e\x0a\x0b\x3e\xac\x47\xd7\x7e\x9a\
+\xcc\xdb\x83\x10\x98\xd3\x66\x83\x26\xdd\x5d\xa0\xc4\x9d\x26\xde\
+\xcf\x60\x55\xb9\x30\x80\x99\xd1\x59\xf2\xfd\xf0\xbb\xde\xae\x91\
+\xb7\xbd\x55\xd9\x72\xc9\x68\xde\x00\xdf\xe4\x9f\xfd\xf1\x1f\x7f\
+\x14\x0c\xb8\xe4\x32\xd3\xcf\x2b\x80\x06\x7e\x33\x07\x72\x3a\xec\
+\xc8\xbc\xdd\xb8\x42\x10\x21\x18\x30\x0b\x43\x65\xfa\x73\xbe\x4a\
+\x99\xa2\xa4\xa6\x44\x0f\x9d\xa3\x5e\x13\x8d\xa0\xa0\x6c\x46\x16\
+\xee\xf6\x51\x2c\xf9\x14\x1d\xf6\xa3\x75\x3f\x11\xc1\x68\x3e\x0c\
+\xf3\x09\xf0\x20\x45\x0c\xa7\x34\x05\xc5\x65\x30\xc0\xad\xdb\xf6\
+\x99\x93\x6d\x08\x78\xa4\xd1\x69\x31\xe4\xca\x8f\x2d\x61\xa3\xcc\
+\x99\x49\xca\xbe\x2d\xf2\x2d\xa2\xf1\x59\xfc\x7d\x0e\xca\x86\xb9\
+\x9e\xd6\x85\x44\x46\xb9\x9b\x76\x6b\xcb\x07\xff\x40\x45\x22\xce\
+\x2c\x9a\x27\xb3\x73\xbf\xfd\xcd\xbf\x7d\x60\xec\xd0\xa1\xa7\x8b\
+\x92\xfb\x8b\x6e\x92\x32\xfb\xf4\xcf\xd0\x2e\x5f\xcb\x0b\xc5\x8d\
+\xc6\x15\x82\x26\xb4\x25\x13\xb6\xf8\xa9\xd0\xc5\x4d\xc6\x4b\x8a\
+\x67\xaa\x14\x44\x4d\x2b\x00\x27\xe0\x20\x04\x53\x81\xf9\x18\x61\
+\x3a\x1c\xe0\xd8\x6a\x1d\x4a\xf2\x3d\x0d\xf3\x90\x2f\x81\x2a\x5a\
+\x4d\x10\xe2\x9a\xb5\x82\x00\x56\x13\x2c\x21\x04\x62\x77\x35\x27\
+\xce\x31\x9f\x98\xcb\x41\xd3\xe0\x45\x17\x00\x98\x89\xa0\xf1\x3a\
+\xf9\xfd\x42\x58\x21\x28\x98\x37\xf9\x46\x5a\xe7\x48\x17\x67\xe8\
+\x18\xed\x78\xe0\xe3\xaa\x04\xfc\x2d\xe6\xd9\xd4\xf1\xdc\xd3\xcf\
+\xfc\xf9\xb7\xbe\xf6\x57\x7f\xce\x74\xc5\x7f\xcc\x2e\xb1\x26\x54\
+\x38\x76\xec\xd8\x89\x15\x2b\x56\xec\x21\x22\x0c\x21\x04\x6b\x05\
+\x81\x54\xca\x36\x29\x6b\xe5\x9c\x52\xdd\xe6\x5d\x5e\xcd\x34\x25\
+\x21\x41\x7e\xcc\xd1\x6f\xb2\x33\x98\x07\x94\xc2\x31\x4c\x3e\xc1\
+\xf7\x14\xe7\x93\x5c\x8f\x73\x53\xa8\x95\x83\xd9\x1e\xa3\x6b\xdd\
+\xc9\x71\xc0\x93\x18\x7e\x5e\x47\x10\x29\x1f\x58\x40\x37\x0a\x0a\
+\xd3\x0c\x49\x67\x82\x1a\xec\x0e\x28\x19\x20\x45\x07\xe8\x42\xf8\
+\x7b\xa0\x4c\xc7\x38\xd8\xa3\x13\xfe\x08\x9a\xbf\x49\x3b\x3e\xfe\
+\x31\x55\x10\xfa\x0c\xcc\xa3\x38\xb3\x9f\xe9\xd1\xbf\xfc\x93\x2f\
+\x7c\xb2\x5b\x9a\x5b\xfe\x25\xf6\x09\x7a\x68\x69\xe1\xf8\xf1\xe3\
+\x63\xbc\x36\xbf\x0d\x3c\xe8\x09\x1b\x50\x8c\xc7\xa1\x24\x05\xd3\
+\xb0\xf2\x4b\xa0\x30\xd5\xa1\xdf\xd6\xf6\x08\x41\x62\x0c\x30\xfa\
+\xa1\x90\x80\x3e\x04\x84\x20\xcc\xc8\x79\x35\xfc\x26\x77\x87\xcc\
+\x66\xa7\x06\x63\x83\xb1\x2e\x51\x00\xc1\x36\xd6\xe4\x28\xe9\x49\
+\x5d\x34\x63\xbb\x32\x01\xf5\x76\xc3\x3c\x05\x4f\x97\x2f\xac\x70\
+\x93\x88\x54\x04\x43\xdc\x84\xaa\x80\xcd\x8b\x3c\x1f\x7d\xd7\xbb\
+\xb4\xf9\x5f\xfd\x4b\x15\xb1\x94\xe9\x99\x19\xcb\xfc\xcb\x87\x0f\
+\xbf\xf0\x97\x9f\xff\xc2\xbf\x49\x36\xea\x13\xe7\xe0\xe1\x97\xdd\
+\x29\x4a\x16\xeb\xce\x8c\x8f\x8f\x1f\x23\x2a\x98\x04\xa9\x27\x1c\
+\x89\xd8\x4c\xaf\x19\x89\x53\xa7\xaf\x22\xcb\x4a\xab\x9c\xaf\x90\
+\x81\xd5\x2d\x53\x0c\xb6\x2a\x73\xaa\x50\x05\x43\x2e\x0b\xe0\x84\
+\xd9\xa2\x2b\x15\xb0\x96\x62\x95\xe3\x0a\x54\x6b\x51\xc1\x05\xd8\
+\x1a\x8c\xb8\x50\x09\xcc\x00\xe9\xa2\x50\x02\x9c\x48\xf9\xe8\x4d\
+\x40\xa1\x26\xd6\x57\x8f\x23\xdb\x8c\x26\x7c\x51\x1d\x66\x0d\x9b\
+\x1f\x7c\x50\x43\x77\xdd\xa1\x2c\x51\x69\x6a\x7a\xda\x00\x1e\xbb\
+\x59\x0e\xbf\xf8\xb5\xbf\xf8\xef\xf7\x47\xf2\xd9\xf1\xb3\xac\xfd\
+\x57\xb9\x59\x3a\x82\x05\xdc\xc4\xcf\x61\xfe\x94\x24\x69\x17\xdb\
+\x68\x44\xe5\x68\x37\x48\x85\xca\x00\x62\x7e\x5e\xc5\xf1\x17\x15\
+\x29\x8f\x29\x1d\x98\x57\xa8\x51\x6d\xed\x0a\x35\x8d\x55\xfe\xf9\
+\x9a\x10\xff\x1c\x4b\x9d\xfd\x4e\xed\x37\xc4\xed\x1e\x23\x9e\xd4\
+\x29\x67\xa1\x20\xc2\x0c\xa2\x6d\x46\x2f\x2c\x4c\x4e\x34\xc1\x34\
+\x56\xa6\x17\x71\xd7\x5d\xda\xf8\x9e\x7b\xd5\xc0\x12\x17\xb3\xcb\
+\x76\x57\x3a\x95\xac\x8e\x1c\x3c\xf4\xf8\x5f\x3f\xf4\x95\x8f\x77\
+\x57\x4a\xa7\x8f\x4b\xee\x6b\xb1\x5d\x3e\x44\xc7\x68\x2b\x7b\x08\
+\x3f\xc5\x6f\x05\x7e\x97\x5c\xc1\x61\x03\x92\x22\x21\x80\x09\x33\
+\x8e\x19\x7f\xa6\xa7\x57\x3e\x7d\x08\x3f\x3d\xa5\x1e\x65\x11\x48\
+\x49\x81\x6a\xc3\xee\x23\xf0\xd7\x01\x4b\x5b\x11\x43\xcd\x76\xba\
+\x6b\x81\xc3\x69\x63\x82\x9f\xf3\x86\x60\xda\xe4\xfa\x68\xde\xa3\
+\x08\xba\x58\x71\x75\xae\xe1\xd1\x97\xdc\xa3\x4d\xec\x47\x0e\xb2\
+\x1b\x2d\x47\x42\xb6\x40\x92\xc3\xfe\x3f\xa3\xf9\xc6\x81\x7d\xfb\
+\xfe\xc7\xf7\xfe\xfa\x6f\xfe\xeb\x48\xd3\xbb\x78\x04\x91\xbe\x96\
+\x3f\x98\x08\x40\xc3\x3b\x77\xee\xfc\x83\x37\xbd\xe9\x4d\x0f\x12\
+\x26\x53\xec\x20\x17\x20\xa9\xb0\xc9\xfd\x59\x68\xdc\x41\x61\xc5\
+\x9c\x0a\xaf\x9e\x94\x26\xc7\x15\x9a\xbf\xa4\x1e\x9a\x1b\x09\xf2\
+\xf6\x40\x89\xd4\xb5\x4a\xee\x6e\x84\xc0\x3f\xf1\x8c\x7c\x50\x20\
+\x88\x79\x87\x60\x38\xa2\x1a\xe3\x54\xa9\xaa\x59\xee\xa9\x62\x69\
+\x03\x6f\x78\x83\x46\xd8\x7d\xee\x74\xa5\xf1\xa0\xaa\x96\xb2\x59\
+\x9b\xe1\x4d\x63\xf6\x67\xcf\x9c\x99\x7b\xe6\xc9\x1f\xfc\xa7\xa3\
+\xcf\x3d\xff\xcd\x95\xd4\x73\x07\x25\xef\xf5\xf8\xc9\x8c\x03\xa5\
+\xf9\xdc\x7a\xc7\x1d\x77\x7c\x82\xd7\xcd\x6f\xc6\x25\x7c\x84\x4b\
+\xc5\x63\x31\xbb\x83\x3b\x2c\x29\xee\x0f\x28\xe6\x43\xb3\xe4\xe3\
+\x45\x4c\xb4\x3a\x35\xa9\xe6\xec\x8c\x7c\x30\xa0\x82\x79\x77\x50\
+\xb7\x55\x5e\xc3\x54\x85\xe1\x88\x5c\x00\xd6\x4b\x53\xe3\x0f\xf4\
+\xab\x7f\xcb\x56\xf5\x6e\xdd\x22\x1f\x6e\x46\xd9\xa0\x3c\x6e\x96\
+\xe3\x99\x2c\xcf\xd2\xd4\x10\xd9\xaa\xcb\xa6\xcd\xbf\xfb\xc1\xf7\
+\x1f\xfd\x6f\xde\xe2\xe2\xd1\xf5\xf2\x2a\x3f\x92\x9a\xaf\xf7\x8f\
+\xa6\x82\xd0\x8a\x0d\x1b\x36\xdc\x73\xe3\x8d\x37\xde\xbf\x7e\xfd\
+\xfa\x1b\x00\x4a\xb3\xc9\xda\x6e\x47\x09\xe3\x1a\x21\x63\x15\x50\
+\x14\x0d\x47\x8c\x60\x10\x4a\xc0\x74\x6b\x3b\x11\x83\x63\x87\xeb\
+\xe2\x9a\x82\x41\x46\xbf\x5c\x47\xb6\x86\x2f\x03\x6e\x14\x26\x2a\
+\x96\x4a\xc8\xab\xd0\xc9\xeb\xbd\xd3\xe3\xe3\x2f\x1c\xdc\xf7\xe2\
+\x97\xce\x1d\x1d\x7b\x22\xd3\x6c\x2c\x8d\x4b\x8d\x5f\xe7\xcf\xe6\
+\x1c\x28\x02\x0d\xaf\x5b\xbb\xf6\x2d\x3b\x76\xee\xfc\x17\xb8\xc5\
+\x6e\x04\x11\xc2\x42\xac\x20\x00\x4f\x11\x3d\x14\x0c\xc0\x3c\xcc\
+\xf2\xfb\x20\x2c\x3f\x00\x01\x78\x68\x9f\xff\xd9\xa4\xa8\xe1\x79\
+\x96\xea\x00\x62\x0d\xe6\xcb\x30\x6f\x18\xe7\x17\xa5\x26\xa7\x2f\
+\x4f\x9c\x3f\xff\xdc\xe1\xfd\x07\xbe\x7a\xe1\xd4\xf8\xd3\x51\xcf\
+\x9d\x0f\x49\xb5\x73\xbf\x41\x3f\x9c\x74\xa0\x30\xec\xf4\x26\x62\
+\xb1\x2d\xdb\x77\xee\x7c\xc7\xc8\xe8\xe8\xef\x80\x0f\x1b\x32\xec\
+\xd4\x64\x07\xea\xdf\x0b\x02\x4d\x07\x10\x46\xe7\x5d\x9d\xda\xbb\
+\x37\x08\xb7\xb6\x75\x45\x35\x6a\x4b\xd8\xa5\xc5\xc5\xc2\xfc\xdc\
+\xdc\x31\x36\x6b\x3e\x79\xe4\xc5\x17\xff\x4f\xad\x54\x79\x35\xe8\
+\xd5\x97\x03\xa6\x60\x93\x9a\xbf\xa9\x3f\x9d\x75\xd4\x2a\x0d\xa2\
+\xb0\xd7\x8d\x81\x0f\xaf\xdd\xb0\xfe\xc6\x15\xc3\xc3\xd7\x03\x94\
+\xab\x12\xc9\xd4\xca\x70\x24\x9c\xa6\xf1\x8a\x57\x04\xc3\xdc\x6c\
+\x18\xaf\xd0\xb2\x2a\xc1\xfc\x32\x6d\xab\x0b\xec\x4e\x3f\x37\x39\
+\x31\x71\xf8\xec\xa9\xf1\x83\x5c\x9f\xa6\xfa\xcb\x8a\x3e\xd1\xb2\
+\xe4\xfd\x36\xfe\x78\x9a\xba\x0f\xb7\x97\xc8\xf2\x15\x91\x15\x8c\
+\xc3\xe8\x84\x9a\x9c\xc7\xfc\x3d\x47\xb8\x3d\x90\xc8\xf5\x32\x9b\
+\x54\xcb\xa0\x80\xcd\x08\x0c\xd7\xaf\xf5\x8f\xa8\x9d\xdf\xb0\x5f\
+\xad\x37\xf5\x3a\x7f\xfe\x1f\x5f\xbc\xdd\xe6\x1a\x53\x0c\xc2\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x13\x09\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\
+\x1b\xaf\x01\x5e\x1a\x91\x1c\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
+\xd7\x09\x17\x17\x15\x19\x49\x86\x70\x41\x00\x00\x12\x96\x49\x44\
+\x41\x54\x78\xda\xed\x5b\x09\x74\x5c\xd5\x79\xfe\xee\x7b\xb3\x6b\
+\xb4\x5a\xb2\x25\xd9\x96\x64\x63\x6c\x83\x31\x36\xb6\x81\x00\xe1\
+\xb0\x34\x14\xc2\xda\x94\x86\x04\xd2\x90\x42\x72\x20\x5d\x20\x14\
+\x68\x08\x4b\x48\x09\x87\xda\xad\x73\x52\x52\x02\x24\xad\x7b\x20\
+\xe4\xb0\x95\xcd\x40\xb0\x1b\x56\x2f\x80\xb1\x2d\xdb\xd8\xb2\x6c\
+\x6c\xd9\xb2\x2c\xc9\x1a\x4b\x1a\x69\xf6\xe5\x6d\xf7\xf6\x7f\x33\
+\xef\xf0\xf4\x3a\x9a\x19\x1b\x26\x3d\xc9\x69\x7e\x9d\x4f\xf7\xbd\
+\xfb\xee\x9b\x79\xdf\x77\xff\xe5\xbe\x2b\x1b\x7f\xb4\x3f\xda\xff\
+\x6f\x63\x38\x0e\x1b\xbb\x05\x75\x52\xed\xf4\x8b\x5d\x33\x97\x5c\
+\x06\xb7\xef\x3c\xa1\xa4\x3c\xd0\xb3\xc3\x42\xcd\x0c\x71\x35\x15\
+\x12\x4a\x22\xc4\x53\xe3\x21\x91\x8d\x85\x84\xc0\x10\x80\x10\xe1\
+\xe8\xd4\x9f\x43\xf9\x83\x16\x40\xfc\xd8\x7f\x95\x68\x5d\x76\x37\
+\xe7\x58\xc6\xd3\x51\x99\x08\x42\x70\x01\xe1\x0e\x12\xaa\xc0\x65\
+\x3f\x84\xec\x81\x60\x6e\x82\x0b\x90\x5c\x10\x82\x03\xdc\x00\xd7\
+\xd2\x02\xba\x32\x2e\x0c\x6d\x48\xe8\x6a\x48\x68\x4a\x48\xe8\xd9\
+\x10\x57\xd3\x24\x54\x7c\x48\x68\xd9\x90\x30\x85\x12\x08\x4d\x7f\
+\x0c\x99\xdf\x3b\x01\xc4\x03\x9e\x3f\xc7\xf9\xf7\xbf\x88\xe6\x45\
+\xcc\x24\x04\xae\x03\x26\x39\x43\x05\x32\x11\x80\xc4\x80\x9a\xcc\
+\x43\xcf\x40\x68\x19\xf0\x6c\x82\x90\x02\x57\x92\xe0\xa6\x50\xb2\
+\x0f\x5c\x48\x04\x53\x13\x4e\xd0\xc1\x75\x2d\x27\x14\x40\xd7\x0d\
+\x03\x24\x0a\x41\x8d\x0a\xae\x87\x08\x43\xc2\xa0\x36\x07\x95\x04\
+\x33\xa1\x0c\x09\x6e\x84\x00\x84\x3a\x1e\x47\xf2\xff\x4e\x80\xa7\
+\x2e\xee\xc4\x99\xb7\x2c\x85\xb0\xc8\x73\x23\x07\xc7\xb9\x28\xd6\
+\xa7\xe7\xa1\x98\xe2\x64\xed\x3e\xd3\x84\x00\x57\x33\xa4\xa3\x42\
+\xc8\x82\x73\x0e\x03\x6e\x70\x12\xd6\x50\x32\x39\x01\x0d\x12\x52\
+\xcf\xc4\x01\xba\x26\xcc\x1f\x6e\x80\x3c\x89\xa0\x27\x68\x60\x4e\
+\x90\x1c\x04\x0f\x01\x3c\xc4\x64\x98\xd8\xd9\x71\x29\xba\xd9\xc5\
+\x10\x95\x11\xe0\x85\x6b\x53\x58\x78\x6d\x20\x3f\xf3\x46\x09\x01\
+\x9c\x62\x38\xc6\x8b\xdc\x35\x1b\xa2\xc8\x58\xf2\x1e\x40\x00\x14\
+\x4e\x90\xdc\x80\xcb\x47\xf0\xe7\x3c\x46\xd7\x75\x18\x9a\x96\xf3\
+\x20\x9d\x33\x12\x27\x09\x3d\x35\x06\x75\xa4\x07\x7a\xa2\x0f\xae\
+\x00\x03\xf3\xe4\x6f\x37\x14\xf1\x3a\x35\xdf\xe8\x58\x81\x04\xca\
+\x98\x0b\x65\x8d\xb9\x72\x0f\x97\x8b\x69\x82\x63\xc6\xb9\x89\x82\
+\x63\xc7\x78\x61\x58\x2d\xb7\xfa\x8b\x8c\x35\x21\xc9\xf9\x3e\xcd\
+\xf4\x96\xd4\xa7\xe2\x48\x34\xc6\x63\x0b\x95\x0f\x3f\xd9\x0b\xd4\
+\xd7\x00\xb3\x2e\x85\xde\x34\x97\x9c\xec\x03\xe8\x43\xab\xc1\xb3\
+\x06\xd4\x38\xae\xc8\x8c\x88\x55\xa2\x1b\x5f\x63\x0b\x50\xd2\x24\
+\x94\x35\x0e\x88\x89\x04\x78\x01\x81\xa2\xd7\x45\x31\x91\x8a\x7c\
+\xd6\xb1\x7e\xb6\x69\x5a\x1a\x48\x1c\x01\x0e\xbf\x0f\xd7\xbe\x35\
+\xa8\x5a\xba\x02\x9e\xe9\xcb\x00\x96\x1f\x0a\xce\xbe\xda\xf3\x38\
+\x4e\x00\x3e\xaf\x00\x42\x4c\x70\xdd\x22\x33\x69\x79\x44\xd9\x87\
+\xe7\xe5\xbd\x80\x50\xfe\xb3\xed\x6b\x79\x11\x0e\xbc\x09\xac\xbd\
+\x13\x7a\x66\x16\x52\x43\x02\xe9\x61\x01\x35\x29\x98\xa1\x62\x49\
+\x25\x04\x28\x7c\x38\xce\x8b\xcc\x6c\x31\x61\x8e\x91\x38\x2f\x15\
+\x5a\x93\x08\x13\x27\xf2\xe9\x31\xe4\xec\x93\xd5\x30\x12\x5e\xa4\
+\x8f\x9a\xe4\xf3\xb7\x42\xc0\x5f\x81\x1c\x20\x0a\xc9\xd8\x84\x4a\
+\x92\x71\x1e\x97\x0a\x25\x5e\x46\x9c\x42\xf1\x6c\xf2\xf6\x44\x31\
+\xdd\x2c\xaf\xd6\x23\xc3\xb2\xcf\x2d\x40\xa1\xdb\x15\x78\x41\xb1\
+\xd8\x75\x1e\x17\x0f\x95\xc2\x44\x59\xc6\xc3\xe2\x83\x44\x3e\x8c\
+\x02\xe3\x1a\x84\xc5\xbc\x72\x02\x40\x14\xcd\xe8\x36\x81\xe3\x4d\
+\x88\x45\xae\x17\x92\x2d\x1c\x1f\x1b\x70\x90\x77\x98\xa1\x43\xa0\
+\xd2\x02\x08\x41\x30\x8e\x3d\xa3\x17\x86\x4a\xf9\x24\xc8\x8f\x31\
+\x29\xc6\x4b\x90\x27\x13\xa6\x07\x4c\x9c\xb7\x0a\x09\xe0\x24\x5b\
+\xbe\xd4\x95\x5f\x03\x94\xff\xac\x42\x0f\x8b\xf5\x03\xa9\x51\x94\
+\x34\x43\xb7\x89\x57\x38\x04\x2c\x18\x05\x0f\x57\x9e\x4c\x91\x6b\
+\x28\xa8\x26\xc5\x45\x8d\x1d\x2e\x4f\x1e\xc8\x2f\x93\xe1\x14\xa0\
+\x12\x65\xd0\x41\xb6\x10\x45\x32\x36\x6c\xa2\xb9\x7e\x10\x98\x75\
+\x0e\x6e\x9d\x13\x60\xf7\x4d\x9a\x10\xcb\xcf\xbc\x33\x09\x02\x36\
+\x44\x25\x04\x40\xc9\x44\x35\xb9\x10\xb0\x88\xb1\x63\x24\x6e\xc2\
+\x3e\xb6\xbf\x27\x6a\xce\xfc\x08\x8e\xd5\x04\xd7\x2d\xe2\x16\x2a\
+\xe4\x01\x65\x56\x7a\x0e\x22\xc5\x88\x95\x12\xc3\xea\x73\x0a\x87\
+\x58\x5f\x01\xf9\xb2\x66\x38\xca\x60\x25\x05\x28\x1f\xdb\x4e\x21\
+\x9c\x64\x0a\x3d\xc2\x26\x6e\x0b\x64\x58\xe0\x40\x9c\xc8\x67\x88\
+\xbc\x54\xe4\x7d\xb5\x74\x15\x70\xa0\xd2\x2b\xc1\x82\x38\xb7\x60\
+\x93\x13\xff\xdb\x0b\x2c\x62\xc2\xe1\xe6\x36\x59\x82\xe3\x38\x7e\
+\x88\xc8\x0f\x03\xb2\x35\x54\x58\xe0\x28\x67\xf6\x3a\xc0\xf6\x82\
+\x0a\xaf\x04\x3d\x55\x40\xfd\x09\xf9\xa7\xd1\xd3\x40\x26\x0c\x24\
+\x8f\x02\x5a\xd2\x99\xe8\xec\x58\x2e\x14\x88\x39\x12\xa3\x53\xa8\
+\x78\x6f\x9e\xbc\x64\x3d\x3d\xb3\x45\xb0\xfd\xba\x74\x15\xb0\xcb\
+\x60\xe5\xd6\x01\xb6\x08\xfe\x29\xc0\xdc\x4b\xe1\x34\x91\x17\x61\
+\x6c\x2f\x10\xfa\x28\xe7\xbe\x85\xee\x4f\x10\x13\xfa\x84\xc3\xe5\
+\xf3\x6d\xe2\x90\x93\xbc\x4d\xd6\xd9\xf2\x12\xcc\xac\x24\x58\xe9\
+\x75\x80\x23\xbb\x17\x1a\x03\x82\x2d\x79\xb4\x5f\x98\x17\xe0\xe0\
+\x6b\xc0\x48\xa7\x33\x1c\x18\x01\x36\x79\xb3\xb5\xc9\x9b\x33\x7f\
+\xd4\x72\xfb\x32\x02\xc0\x1e\x53\x72\x1d\x20\x08\x15\x4d\x82\xb0\
+\x50\xce\x6a\x3a\x80\xd3\x6e\x05\xce\xb8\x17\xa8\x9e\x3e\x21\xce\
+\xed\x7c\x60\x9f\x5b\xe4\xb3\x16\x79\x09\xd4\x5a\x90\xca\x80\xa1\
+\xf8\xcb\x90\xa8\x64\x15\xc0\x24\x19\xdf\x50\xca\xaf\x32\xea\xe7\
+\x01\xe7\x2c\x07\x3a\x2e\x73\x84\x84\x0d\x93\xfc\x41\x22\x1f\xb2\
+\x49\x95\x03\x2b\x2d\x82\x30\xf4\xca\x57\x01\x22\x6a\x27\xaa\x48\
+\x0f\xb0\xee\x6e\x40\xe8\xf9\x73\x6f\x35\x10\x6c\x26\xb2\x27\x02\
+\xd3\x96\xd1\x79\x7d\xc1\x76\x22\x4e\xba\x01\xa8\x9b\x03\xec\x5c\
+\x09\x18\x9a\x95\x00\x09\x89\x03\x80\x62\x91\x17\x93\x00\x8e\x44\
+\x68\x1b\xb7\xa7\xad\x20\x1c\xb8\xe6\x8c\x16\x51\xe9\x32\x88\x89\
+\xe5\x4f\x07\xb2\x61\xc2\x30\x30\xba\x1d\xe8\x79\x16\x68\x5c\x04\
+\xcc\xfe\x33\xa0\xba\x1d\x0e\x6b\x39\x17\xf0\x90\x58\x9d\x14\x16\
+\x9a\x0a\x24\x7b\xec\x99\x17\x25\x92\x9c\x70\x10\x76\x92\x66\x13\
+\x20\x9c\x1e\x90\xfb\x55\xb1\x10\x60\x02\xce\x9a\x3f\x59\x19\xb3\
+\xb6\xba\x47\xb6\x00\x9b\x7f\x00\x7c\xb2\x8a\xba\xb2\x70\xd8\x94\
+\xc5\xc0\x92\xfb\x81\x74\x9f\x49\xbe\x78\xcc\xdb\xfd\xc7\x17\x1a\
+\xa6\xd9\x65\x90\x50\xa9\x24\x08\x51\x58\xd7\x6d\xf2\x85\xab\x3e\
+\x53\x88\x81\x35\x24\xc4\x1d\x40\x6a\x10\x0e\x6b\x3a\x13\x38\xf5\
+\xfb\x05\x64\xcb\x82\x4d\x1a\xff\xce\x7e\xf6\x3b\x5d\x09\x5a\x04\
+\xfd\x8d\x40\xfb\x05\x80\xbb\x2a\x17\x6f\x48\x0f\x01\xf1\x83\xc0\
+\x78\x17\x60\xa8\x13\x44\xa0\x36\x75\x18\xd8\x4a\x22\x2c\x79\x10\
+\xa8\x99\x8b\x4f\x6d\xfe\xdf\x00\xa3\x1f\x00\x87\x9e\x01\x50\x26\
+\xfe\x51\xc2\xf5\x25\x47\x9e\xc8\x83\xeb\xf6\xed\xa2\x32\xeb\x00\
+\xe7\xcc\xfb\xea\x80\xd6\xb3\x60\xdb\x52\x02\xf2\x2b\xc1\xa1\x77\
+\x80\xbe\xd5\x74\x1c\xb1\x17\x3b\x5a\x14\xd8\x7e\x17\x89\xf0\xcf\
+\x4e\x11\xce\x7c\x04\x18\x79\xd7\xac\xfd\xc5\xe3\x9f\x17\xf5\x4f\
+\x27\x69\xc9\x3e\x17\x10\x16\xf1\x8a\x87\x80\xed\xee\x93\x9a\x3b\
+\x08\xb4\x5f\x05\x9c\xf5\x53\xa0\x71\xa9\xf3\xe5\x66\x7c\x2b\xb0\
+\xfe\x72\x40\x8b\xd9\xe3\x3d\x0d\xa4\xdd\x4f\xca\xd7\x7c\x66\xb7\
+\x36\x8a\x84\x06\x9b\xc4\xa1\x2a\x23\x80\x73\x25\x58\xd2\x3c\xf5\
+\xc0\xe2\xfb\x80\xb6\x2b\xf2\x5e\x90\xd8\x07\x28\x47\x80\x54\x0f\
+\xb0\xfd\x56\x38\xac\xfd\x5a\xa0\xe1\xb4\xcf\x50\xfb\x4b\xc2\xb1\
+\x12\x14\xa2\x62\x02\x70\x0b\x02\x50\x62\x40\x78\x17\x30\xb2\x0d\
+\x48\x0e\x4e\xf2\x2d\x0c\x98\xfb\x5d\xa0\xf1\x4c\x20\x3b\x68\x3f\
+\x78\xff\x53\x74\xcf\x3b\x13\x86\x51\xe7\x29\xf7\x1d\x67\x22\x2c\
+\x71\xcc\x9c\xc4\x05\x2a\x97\x03\xec\xfa\x3f\xbe\x17\xd8\x70\x1b\
+\x00\xdd\x0a\x09\xeb\x05\xa9\xe3\x4a\x60\xc6\xc5\xce\xa5\xd9\xc2\
+\x1f\x11\xe1\xdf\x02\x91\x4e\xfb\x41\x77\xdf\x05\x5c\xb8\xd5\x1e\
+\xd7\x4a\x61\x13\x6c\x03\x92\xfd\xce\xd8\x67\x36\x0a\x63\xbd\x04\
+\x80\xcf\xb6\x27\xf8\xe0\x7d\x37\x2d\xdc\xf2\xf6\x4f\xa5\xd2\x55\
+\x80\xc0\x55\xe7\x92\x18\x84\x4c\x08\xd8\xfb\x18\xb0\xfd\x87\x80\
+\x91\x99\xf0\xc9\x6e\xe0\x0b\xbf\x06\x5c\x2e\x7b\x16\xe3\xdb\x80\
+\xd1\x89\x5e\x20\x03\xed\xdf\x2c\x3b\xf3\x4e\x14\xef\x17\xec\x33\
+\xe6\x80\xb7\x37\xf7\xae\x7e\x6b\xc3\xbe\x5f\x90\x08\xac\x68\x0e\
+\x28\xdc\xf3\x73\x2e\x90\xc6\x3a\x81\x0f\x6f\xb4\xfa\x2c\xab\x9e\
+\x0f\xb4\x5d\xe7\x8c\xe3\xfe\x5f\xc2\x61\xd3\xaf\x2e\x41\xba\x4c\
+\xdc\xa3\xe0\xdc\x0e\x83\xe3\xc9\x01\xe3\x8a\x9e\xed\xdc\x35\x38\
+\x7f\xc7\xee\xc1\x7f\x25\x11\x4a\x6f\x89\x81\x3b\x84\xb0\x77\x6f\
+\xf7\x00\x87\x9f\x03\xf6\xac\x84\xc3\xe6\xdd\xe5\x24\x37\xba\x06\
+\x30\xd2\xf6\xf5\xda\xc5\x80\x7f\x6a\x01\xe9\xe3\x24\x6e\x0b\x20\
+\x3e\x83\x07\x24\x33\x19\x43\x81\xfb\xce\xd7\xdf\xec\xba\xe6\x50\
+\xff\xd8\x43\xc5\xdf\x06\x09\x81\x16\xe0\x8c\x1f\x03\x17\x3d\x4f\
+\xed\x0a\x20\x38\x33\x4f\x3e\x3d\x80\x9c\xed\xa5\x9a\xaf\xc5\x27\
+\x78\xc1\xc9\x40\xcd\x7c\x9b\x94\x20\xf2\xd1\x0f\x9d\x49\x73\xca\
+\xd9\x85\xa4\x51\x36\xde\x0b\xc9\x33\x27\x71\x21\xb9\xe5\x63\x12\
+\x20\x95\xc9\x1a\x29\xdd\xc8\x8e\x45\x92\xb7\x3c\xbb\x7a\xeb\x3d\
+\x6b\x5f\x78\xf0\x9e\xc2\x3f\x8d\xf1\x7c\xe6\x5e\x72\x27\x50\x6f\
+\x12\x72\x01\x75\xd4\x9e\xbe\xc2\x76\x7b\x86\xfc\xe2\xe7\xc8\xab\
+\x70\xd8\xd4\x8b\x9d\x33\x1b\xdb\x0c\x87\xd5\x2e\x3a\x0e\xa2\x65\
+\x44\x80\x05\xfa\xb5\xcb\x77\xfa\x2f\x96\x3f\x70\xeb\xeb\x8f\x3d\
+\xfc\xc3\xef\xfc\xec\x27\xf7\x4e\x2f\x5a\x05\x32\x8a\xa2\x27\xd2\
+\x19\xff\xf6\x4d\x9b\x5e\x5a\xba\x74\xe9\x6b\xcf\xbc\xbc\xf9\xa1\
+\x0f\xff\x7b\xe5\xc8\xd9\x97\xfc\xc3\x2a\x47\x12\xac\x99\x0d\x54\
+\xb5\xc0\x61\xee\x1a\xe0\xe4\xef\x01\xdb\xbf\x6f\xf7\x8d\x6e\x00\
+\x3a\xbe\x39\xc1\x0b\x4e\x71\xba\x77\x66\x1f\x1c\x56\x75\xc2\xf1\
+\x91\x47\x89\xbe\x09\x25\x70\xe3\xa6\x2e\xcf\x86\xa1\xfd\x97\x37\
+\xd4\xd7\x5e\x3e\x73\x66\x8b\xf8\xea\xd5\x57\xec\x9a\x36\x6d\xda\
+\x7b\x55\x55\x35\xeb\x33\x59\xf5\x83\x7f\x7b\xe4\xe7\xa3\x39\x01\
+\x14\x4d\xe3\x14\x06\x7e\x90\x71\xce\xff\x76\x67\x77\xff\xb9\x2f\
+\xbd\xb1\xed\x71\xca\x07\xc3\x38\xfc\xa4\x2d\x80\x96\x29\xb2\xf9\
+\x71\x0a\x1c\x96\x19\x80\xc3\x7c\xcd\xce\x87\x56\x87\xe0\x30\x6f\
+\x4b\x59\x82\xe5\xc9\x3b\x63\x9f\x83\x61\x6a\x9d\xf7\xad\xda\x54\
+\xed\x02\x26\xb9\x5a\x87\x47\xa2\x6c\x6c\x3c\xb9\xa8\xb7\x6f\x68\
+\x91\x2c\xcb\xb7\xa9\xaa\xca\xe7\xcc\x99\x73\x7b\x4e\x00\x5d\xd7\
+\x59\x3a\x9b\x0d\x80\x6c\xc7\x8e\x1d\x83\x0b\x16\x2c\xf8\xbb\x35\
+\x6f\xef\x7c\xba\x65\x5a\xed\x73\x27\x9d\x30\x53\x0e\x72\xc3\xda\
+\xc1\xe9\x07\xd2\x47\x81\x40\x33\x1c\x96\x3c\x0c\xe7\x02\x5c\x86\
+\xc3\x5c\xb5\xce\x35\xbf\x91\x82\xc3\xe4\x2a\x1c\x97\xb1\xc9\xfb\
+\x46\xb2\x3e\xbc\x1f\xa9\xc3\xc1\x4c\x2d\x0e\x67\x6b\x30\x1e\x4b\
+\x5f\xa4\xeb\x49\xc4\x62\x31\x28\xe4\xe5\x84\x7d\xc4\xb5\x95\x73\
+\x5e\x6f\xf9\xe2\x2c\xf3\x17\xb8\x10\x8c\xf2\x40\x10\x96\x75\x77\
+\x77\x3f\x63\x18\xc6\xd3\xff\xf9\xf4\xba\xc0\x6b\x91\xb9\x72\x5a\
+\x78\x00\x6e\xfd\xe3\xc8\xf5\xb7\xe5\x57\x83\xb0\x2c\x3b\x0a\xec\
+\x7c\xc8\x49\xb0\xaa\x03\x0e\xd3\xe3\x70\xee\xef\x7b\x50\x60\xf6\
+\xfd\xc7\x65\xe3\x59\x37\x7e\xb5\xb7\x19\xd7\xbf\xbd\x00\xcb\xfb\
+\xcf\xc5\x7b\xb1\x99\xd8\xdc\xaf\xe0\xc0\xde\x2e\xd4\x25\xba\x51\
+\xa7\xf4\x3f\x5a\x53\x53\x73\xe1\xca\x95\x2b\x67\x90\x00\x4b\x67\
+\xcf\x9e\xdd\x23\x49\x12\xac\x6f\x7a\xcb\x05\xb2\x80\xcf\xd3\x94\
+\x55\x95\x46\x4c\x30\x12\xe0\x26\x55\x35\x4e\x5e\xfe\xd8\xda\xd3\
+\x3c\xb7\x5c\x86\xcb\x9b\xfa\xe0\x33\x5f\x7b\x93\x7d\x24\xf5\x26\
+\x60\xee\xd7\xf3\x1a\xf6\x3c\x01\xa8\x24\x82\x3c\xe1\xe1\x5b\x2e\
+\x83\xc3\x52\xbd\x36\x79\x46\x90\xeb\xe1\x30\x6d\x1c\x10\xc7\x21\
+\x82\x99\xe0\x46\xaa\xf0\xec\xee\xa9\xd8\x12\x9e\x06\x4d\xd7\x10\
+\x8f\x8f\x43\x44\xdf\xc3\xe5\x73\x0d\xcc\x59\xe4\xc3\x89\xb3\xda\
+\xe0\xad\x6d\xa6\x3c\x7d\x41\x5f\xfb\x95\xf7\x0c\x03\x10\x0f\x3f\
+\xfc\x30\x23\x5b\x2c\x44\x2e\x6b\x5f\x4d\x78\xc3\x75\xcf\xdf\x5f\
+\x83\xc7\xd6\xee\x6c\x4a\xa6\xd5\x16\xcb\x2d\x38\x01\x07\x0f\x1e\
+\x4c\xb7\xb5\xb5\x7d\x25\x1a\x49\x6c\x5d\xf1\xcb\xdf\x36\xc9\x37\
+\x7e\x11\x97\x64\x87\xe0\x96\x00\x16\xeb\x07\xdb\xfe\x2f\x80\x79\
+\x2c\xe3\xd3\xed\x6c\xc6\xac\x87\xdf\xf9\x03\xe0\xc0\xa3\x66\xc9\
+\xcc\x23\xfc\x2e\xc0\x27\xb8\xaf\x6f\x0e\x1c\xa6\x5a\x02\x38\x45\
+\x98\xb4\x6f\xf3\x60\x10\xab\xb6\x35\x63\xd3\x61\x2f\xa2\xd1\x08\
+\x62\x91\x8f\xf1\xa5\x39\x0a\x7e\x74\x9e\x84\xf3\x17\xce\x04\xab\
+\x9b\x87\x3d\x83\x40\x64\xe8\x10\xa2\x07\x3b\x11\xee\xdd\x79\xf0\
+\x9d\x70\xf3\x01\x00\x7c\xc5\x8a\x15\xcb\xc8\x1b\x3c\x24\xc0\xeb\
+\x00\x72\xa5\xca\xd5\xd8\x58\x23\x65\x15\xad\xdf\xd0\x35\x0e\xa0\
+\x86\x90\x26\x68\x04\x31\xbb\xbf\xff\x70\xf4\x84\xa6\xeb\x87\x8e\
+\x8c\xac\x59\xf1\xe4\x26\x96\xb9\xfa\x6a\x9c\x6f\xbc\x08\x8f\xac\
+\x41\x96\xcd\x4a\x48\xa0\x56\xa6\x96\x59\xe7\x8c\x13\xc2\x5d\x60\
+\x11\x82\x9c\xaf\x9c\x29\x5d\xc6\xa1\xb1\x00\x8e\xc4\x3c\x18\x8a\
+\x7a\x10\x7a\xf5\xbf\x10\xd3\xd7\x21\xcd\xa6\x23\x65\xd4\x01\x24\
+\x6c\x2d\xef\x40\x8d\xcf\xc0\xd4\x6a\x0d\x73\x9b\x32\x58\x36\x23\
+\x85\x29\x7e\x1d\xa6\x0d\x27\xdc\xd8\x70\xb0\x1a\x2f\x75\x4d\xc1\
+\xc7\x83\x12\xc2\xe1\x30\x22\xe3\xe3\xf8\x8b\xa5\xc0\x03\x37\x07\
+\x70\xe2\xbc\x2f\xe4\x12\xb1\x88\x1d\x81\x31\xb4\x1d\x91\x7d\x31\
+\xa4\x14\x91\x4f\x37\x6e\xb7\x35\x45\x60\x2d\x2d\x2d\x17\x9b\xf9\
+\x80\xec\x79\x58\xe6\xba\xfd\xde\x55\x1c\x5e\xff\x12\xa8\x59\x93\
+\xfc\x14\x42\x15\x21\x46\xc8\x10\xf8\x99\xd3\x47\xd7\x6d\x3c\x5c\
+\xf7\x60\x6f\xdf\x91\xfb\x1f\x7e\x49\x42\xf4\x4f\xaf\xc2\x32\x75\
+\x35\x3c\x2e\x1d\x2e\x57\x9e\xbc\xcb\x12\x81\x13\xdb\x50\xda\x8b\
+\xc1\xb8\x17\xfd\x51\x1f\x8e\x24\x83\xd8\x3f\xec\x42\x6f\x48\x43\
+\x3a\x93\x45\x36\x9b\x85\xaa\x66\x20\x44\x1a\x3e\x5f\x06\x81\xc0\
+\x28\x82\xf2\x18\x3c\x48\x23\x6f\x12\x09\xe4\x42\x46\xf7\xc0\xef\
+\xaf\xc7\xec\x66\x2f\x3d\x5a\x35\x14\xe1\x43\x86\xee\x1f\x0a\x8d\
+\x20\x3c\x36\x86\xa0\x17\x78\xed\x8e\x7a\x5c\xf2\x27\xe7\x03\xb5\
+\x27\x43\x28\x29\x18\x07\xd7\xe6\x04\x10\x06\xc0\x49\x79\xc1\x04\
+\x84\xe0\x74\xec\xca\x15\x5f\xf3\xbb\xeb\xeb\xeb\xaf\xef\xeb\xeb\
+\xcb\x80\x6e\x77\xbe\x0d\x2a\xf4\xe9\x00\xb7\x50\x47\xf0\x13\xa2\
+\x9b\x81\x44\xbb\x0e\x76\x61\x7b\xf4\xb9\xf7\x0e\xd7\xce\x3e\xd4\
+\x37\xf0\x97\x4f\xbc\xc9\xb0\xff\xa4\xf3\x35\x79\x74\x4b\xca\x60\
+\xae\xa0\xaf\xaa\xc6\xe5\xae\x9e\x82\x81\xa8\x84\x81\x31\x8e\x68\
+\x3c\x8d\x54\x2a\x83\x44\x32\x8d\x80\x34\x88\x93\x5a\x75\x5c\xbb\
+\x54\xc2\xbc\x19\x40\x5b\xb3\x84\xf6\xd6\x20\x9a\xbf\xf4\x22\x24\
+\x33\x51\xba\x48\xf3\x9d\x37\x83\x99\x9b\x26\xba\x02\x28\x49\x30\
+\x35\x85\xa7\xd6\xeb\xb8\xf1\x3f\x52\x18\x19\xe1\x85\xc9\x9e\x01\
+\xab\x6f\x0b\xe0\xbc\x2b\xbe\x05\xe1\x69\x82\x48\x0e\x43\xdb\xf7\
+\x12\x90\x49\x12\x61\x19\x0c\xc8\x91\xe7\xd6\x96\x92\x90\x68\xa6\
+\x00\xf6\xca\x2b\xaf\xdc\x10\x08\x04\x66\x47\xa3\xd1\x55\x20\x5e\
+\xc5\x0a\x8a\x8b\x10\x24\x34\x10\xbc\x84\x64\x73\x10\x89\xf3\xe7\
+\x81\x35\x04\x51\xfb\x9b\xfd\x0d\x77\x29\xdc\xfd\xdd\xd6\xd6\x56\
+\xf4\xf7\xf7\xa1\x2a\xe0\x05\x37\x34\x84\x86\x23\x30\x0c\x8e\x69\
+\xb5\x14\x87\xf3\x25\x9c\x3b\x8f\xe1\x82\xa5\x4d\x68\x9f\x3d\x8b\
+\x2a\x5c\x13\x98\xbf\x01\xcc\x5b\x0b\xe6\x0e\x82\x41\x03\xb8\x92\
+\x03\x33\xb2\x10\x6a\x14\x2c\x3d\x08\xa4\x87\x73\xdb\xec\x4c\xcb\
+\xe2\xd0\x51\x81\xb3\x97\xd7\x62\x24\x1c\x01\x59\x6e\xc6\x3b\x1a\
+\x25\xec\x09\x01\xa7\xb5\x09\x7c\xf0\xb3\x0b\x20\xd1\xeb\x37\x4f\
+\x47\xa0\xed\x79\x06\x22\x9b\xb4\x37\xaa\x75\x81\x4d\x07\x38\x14\
+\x8d\x83\x09\xae\x27\x1b\x16\x2f\x7c\xba\xa7\x4e\x27\xf2\x5b\x3e\
+\xfa\xe8\x23\xcf\xc0\xc0\xc0\xa9\x00\x7a\x8b\xed\x07\xe8\x84\x38\
+\x41\xb5\x44\xa8\x1d\x4e\x22\xf0\x7a\x17\xa2\x27\x35\x23\x7c\xde\
+\xac\xc8\x9d\xef\xf6\x35\xb3\xde\xde\xde\x9b\xcd\x58\x22\x6f\xb4\
+\x66\x85\xe1\x9c\x39\xae\xc8\xbd\x5f\x9f\xe5\x9f\xb5\xe8\x42\x6f\
+\xb0\x75\x21\x73\xfb\x82\x48\x0b\x05\xc4\x90\xa0\x10\x31\x82\xaa\
+\xd0\x61\x14\x3c\xd9\x9f\xdb\x2c\x91\x94\x10\x24\x3d\x01\x99\x09\
+\xc8\x42\x40\x12\x66\xcb\xd0\x3d\x5c\x0d\x0e\x39\x37\xdb\x37\x9e\
+\x03\x7c\xeb\x6c\x50\x68\x00\x7f\xfd\x42\x2d\x66\x34\x24\x10\x97\
+\xdb\xe0\x4a\x2b\x48\xed\x5a\x0d\x91\xce\xd0\x7d\x66\xfc\x09\x08\
+\x9d\x23\x95\x11\x54\x1a\x01\xb3\x27\x65\xf8\x1e\x79\x64\x7d\xba\
+\xba\x75\x7a\xfd\xbf\xf7\xf4\xf4\xd4\x11\xf9\x1b\x4c\xf2\xe5\x36\
+\x44\xb8\x15\xff\x23\x04\x45\x00\x8d\x29\x15\x53\x3b\xfb\x11\xdb\
+\xd6\x2f\xc6\x5b\x1b\x95\xef\x69\x9a\x36\x04\xe0\xdb\x84\x36\x02\
+\xbc\x6e\xb9\x77\xd9\x89\x35\xf7\xb6\x5f\xf9\xe8\x75\x35\x53\x5a\
+\xda\x54\x25\x2d\xa5\x33\x09\xb7\xa6\xa6\x5d\x4a\x72\x14\xa3\xfd\
+\xbd\x99\x70\xff\xc7\x6e\x23\xbe\xbf\x5a\x36\xe2\xbe\x80\x57\x54\
+\x79\x3d\xc2\x13\xf0\x08\x29\xe0\x61\xb9\xca\xe2\x22\xb8\x19\xc0\
+\x0d\xe0\xdd\x81\x39\x48\x24\xba\x30\xb3\x1e\x5b\x82\x6e\xec\x79\
+\x6d\x07\x6a\x3d\x2e\x51\x27\x04\x3f\xef\x70\x18\xfa\xc7\x3d\x11\
+\xc9\x88\xbf\x2a\xf3\x78\x04\x01\xb7\xcc\x3c\x4c\x80\x71\x01\x45\
+\x15\x62\xdf\x30\xd4\xa3\x09\x36\x7a\x28\xea\xde\xf8\xe1\xa0\xdf\
+\x35\xeb\xc4\xa6\xd5\x54\xd1\x9a\xf7\xee\xdd\x7b\x37\x80\x5f\x1d\
+\xeb\x8e\x90\xb0\xbc\x60\xdc\x6a\x1b\x09\x0d\x02\x08\x1c\x09\x8f\
+\x87\x01\xac\x90\x65\xf9\x9f\x7c\x3e\xdf\xf6\x54\x2a\xb5\xd0\xe3\
+\xf5\xbe\xdc\x71\xfa\xd5\xef\xcf\x3e\xe5\xec\xaf\x09\x2e\x06\x0c\
+\x43\x53\xe2\x91\x70\xf7\xde\x1d\x1b\x77\x6f\xfc\xcd\x93\xa3\xaa\
+\x9a\xf6\x41\x57\x7d\x86\x11\x0c\x08\xdd\x5b\x25\xb8\x56\x45\xa1\
+\x13\x64\x42\xaf\x97\x99\xde\xe0\x96\x8c\xda\x6a\x9f\x41\x2d\x0f\
+\xc6\xa4\x99\xf3\x3b\xfb\xa4\x2a\x55\x51\xe2\x0b\xe6\xe0\x0e\x83\
+\x23\xab\xab\xf0\x65\x54\xe1\xf3\xbb\xb8\xa7\xfb\x88\xb1\x64\xcd\
+\x3b\x9d\xcf\xca\x2e\xd6\x00\x78\x83\x0c\xc2\xc7\x60\xb8\x05\x87\
+\x94\x48\xc3\x08\xa7\xb8\x72\x24\x2a\xbc\x9a\x67\xda\x17\x3b\xe6\
+\xcc\x98\xd1\xd5\xd5\x95\x08\x85\x42\xf7\x00\x78\xf4\xb3\x6c\x89\
+\x19\x84\x84\x25\xc2\x14\x0b\x33\x08\x11\xc3\x30\xc6\x1a\x1a\x1a\
+\xb6\x64\x32\x99\x85\xfe\x40\x70\xd7\x57\x6e\xbc\x77\x9a\xcb\xed\
+\x35\xb3\xed\xfb\x5d\xbb\xf7\xbc\xb1\xa3\x73\x6b\x94\x43\x97\x1a\
+\x4f\xfa\x32\xe3\x5c\x65\xa4\x89\xc4\xf5\x2c\x33\xd4\xb4\xa4\x2b\
+\x29\x49\x57\x93\x32\x65\x6f\x59\xa3\x96\x67\x53\xee\x31\x2d\xed\
+\x19\x1c\x63\x0b\xdd\xcd\xcb\x1e\xdd\xd9\xf5\x3a\x24\x86\x07\x3b\
+\xa6\x62\x9b\x00\x1d\x6a\x90\xb8\x4c\xe9\xc4\xa5\xde\x3e\x2c\xd8\
+\x5b\x4f\xae\x1f\x9b\x75\xe1\xb2\x59\xcf\xb7\x34\xf8\xd3\xe3\xb1\
+\xd4\xb4\xd1\x68\xfa\x84\x70\x4c\x9f\x6f\x48\xfe\x99\x9e\x40\x5d\
+\xa3\xab\xc6\x1f\x8c\x86\xc3\xea\xce\xee\xf7\x5e\xd6\x75\x7d\x39\
+\x80\x5d\x04\xed\xf3\xfc\xaf\x31\x66\x89\x55\x4b\x98\x6a\x95\xca\
+\x24\xd5\xd5\x9b\xa8\x26\xdf\xd6\xdc\xdc\xfc\x0d\x7a\x87\x50\xd2\
+\xe9\x74\xe2\x8d\x37\xde\xd8\x3d\xc9\x96\x86\x80\x05\xd3\x98\x10\
+\x9c\xc3\xe0\x42\x37\xe8\x48\xe5\x86\x9a\x11\xdb\xb6\xed\xa8\x86\
+\xb7\x7a\xed\xde\xbd\x9f\xcc\xeb\xec\xec\xdc\x0e\xe0\x4c\x82\xfe\
+\x8f\x00\xd6\x2d\x06\x4b\x8d\x83\x45\x63\x90\x7b\x13\xec\x2c\xba\
+\xf3\x79\xb7\xdb\xdd\xec\xf5\x7a\x55\x6a\x99\xcb\xe5\x72\x93\x81\
+\xc8\x1a\xf1\x78\x7c\xbf\xa2\x28\x6b\x01\xfc\x5a\x08\xd1\x5d\x40\
+\xbc\x9c\x07\x94\x08\x09\x8d\x10\x21\x28\x84\x26\xc2\x14\x55\x55\
+\xe3\xe6\xba\x9a\xda\xa6\x97\xc9\xc8\x2b\x38\x00\x97\x53\x00\xe7\
+\x9f\x3d\x18\x63\x1c\x8c\x41\xa2\x1f\x78\xdc\x02\xf0\xf1\x77\x37\
+\x7c\xd4\xee\xf7\x57\x3d\x91\x88\xc6\xe6\x6d\xdb\xb6\x6d\x14\xc0\
+\x35\xd6\x78\x99\x04\x90\xf0\x31\x64\xab\x2a\xd5\xe4\x77\x54\x70\
+\x0b\xe5\xa1\xb3\x08\xb5\xd6\x73\x85\x09\xfb\x09\xa6\x70\x7d\xd6\
+\x62\x4e\x54\x66\x57\xb8\x30\x24\x92\xd6\x97\x66\x69\xc6\x37\x92\
+\x00\x4a\x22\x91\x38\xe3\xc0\x81\x03\xaf\x51\x79\xe4\x74\x2e\x13\
+\x49\x13\x92\x55\x21\x72\xe4\xf3\x13\x2f\x0c\xab\x95\x48\x2c\xb1\
+\x6e\xdd\xba\x36\xba\x7e\x3d\x2d\x4f\xbf\x73\xe8\xd0\x21\xff\xa6\
+\x4d\x9b\xc6\xe9\xda\x5f\x01\xc8\x12\xda\x26\x7c\xa7\x36\xc1\x0b\
+\x93\x84\xdd\x84\x4e\x42\x8a\x90\xb1\x26\x45\x2f\x47\xba\x74\x08\
+\x1c\xff\x7d\x32\x21\xe0\xf1\x78\xbe\x4d\x1e\xb0\x9c\xc2\x60\xe5\
+\xa9\xa7\x9e\xba\x9e\x92\xa3\x9b\x5c\x93\x51\x82\xe4\xe4\x9a\x3a\
+\x09\xa2\x72\xce\x0d\x1a\x23\x28\x5f\xc8\xe3\xe3\xe3\x33\xfc\x7e\
+\xff\x29\x34\xe6\x22\x6a\x97\x51\x82\x62\x94\xa1\x0d\xea\xff\x10\
+\xc0\x2a\xc2\x51\x8b\x50\xc2\x2a\xc9\xb1\x1c\x51\x27\x41\x6e\x41\
+\xe0\x73\x1a\xab\xc0\xfd\x26\xae\x63\x8c\x3d\x4c\xa4\x6a\xab\xaa\
+\xaa\x86\x89\x58\x8a\xda\x0c\x09\x20\x3c\x79\xf3\xd1\xf5\x06\x42\
+\x8d\x39\xfb\xe4\x39\x88\x44\x22\xc6\xd0\xd0\x50\x2f\x79\xc2\x06\
+\x6b\x69\x3a\x60\x11\x4d\x12\xd2\x96\x08\x9a\x4d\xf6\x77\x63\x0c\
+\x95\xb3\x2a\xc2\x97\x09\xa7\x13\xda\x2c\xc2\x75\x04\x37\xe7\x5c\
+\xb2\x5e\x41\x23\x84\x83\x84\x6e\xc2\xfb\x84\x7e\x6b\xa6\x8d\x72\
+\x7f\xd6\xfb\x03\x10\xa0\xf0\xf3\x1c\xff\x0a\xc0\xf9\x17\x56\x81\
+\xdf\x13\xfb\x1f\x84\xaf\xe2\x02\x22\xe6\xe9\x93\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x0d\x06\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x06\xec\x00\x00\x06\xec\
+\x01\x1e\x75\x38\x35\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x0c\x83\x49\x44\
+\x41\x54\x78\xda\xed\x9b\x5b\x68\x55\xd9\x19\xc7\xd7\x49\x4e\xa2\
+\x26\x26\x1a\xe3\x35\x31\x5e\xc6\x54\xad\x97\x4a\x95\x29\x38\x14\
+\xc4\x22\xb6\xcc\x73\x9f\x2a\xf4\x61\x5e\x7c\x10\xc4\xc2\x0c\x08\
+\x7d\x28\xf8\x54\x4a\x1f\x15\xa4\x4f\xf6\x51\x0a\x52\x90\x4e\x07\
+\x41\x94\xfa\xe0\xfd\xd6\xaa\x03\x5e\xc6\xfb\x35\x51\x63\x2e\x46\
+\xcd\xc5\x7e\xbf\x0d\xbf\x61\xcf\x31\x92\x8c\x1c\x83\xc1\x2c\x58\
+\xec\xbd\xd7\x59\x7b\xad\xef\xfb\x7f\xf7\xb5\x93\xc2\xeb\xd7\xaf\
+\xd3\xc7\xdc\x2a\xa2\x8f\x03\x30\x0e\xc0\x38\x00\xe3\x00\x8c\x03\
+\x30\x0e\xc0\x47\xda\x8a\x1f\x1a\x41\xc7\x8e\x1d\xdb\x53\x5d\x5d\
+\xfd\xb3\x69\xd3\xa6\x7d\xe1\x98\xad\xad\xad\xed\x8f\x95\x95\x95\
+\xf3\x57\xaf\x5e\xfd\x8b\x72\xed\xf7\x41\x24\x42\xdb\xb6\x6d\x5b\
+\x50\x2c\x16\xff\x10\xb7\x9f\xcd\x9e\x3d\xbb\x65\xf2\xe4\xc9\x93\
+\x18\x87\x36\xaf\xb6\x81\x81\x81\xc1\x4b\x97\x2e\xdd\x1a\x1c\x1c\
+\xbc\xd4\xd1\xd1\xf1\xb7\xbd\x7b\xf7\x1e\x1a\xd3\x00\x6c\xd9\xb2\
+\xe5\xb3\xfa\xfa\xfa\xc3\x21\xf5\xaa\x21\x09\x2c\x14\xd2\xdb\xc6\
+\x03\x84\x74\xfd\xfa\xf5\x43\x15\x15\x15\xbf\xd9\xb3\x67\xcf\xab\
+\xb1\x64\x02\x32\xff\xcb\x9a\x9a\x9a\x43\x21\x84\xe2\xcb\x97\x2f\
+\x87\x63\x78\xc8\xb1\x96\x96\x96\xf5\xd7\xae\x5d\xfb\x26\x1e\x7f\
+\x35\x96\x9c\xa0\x0c\xfc\xb3\xbf\xbf\x3f\x13\x42\x00\x91\xaa\xaa\
+\xaa\x52\x98\x02\x3d\xbb\xb7\x3b\x6e\x9f\x38\x71\x62\xc6\x3c\xa0\
+\xd1\x9b\x9a\x9a\xd6\x6f\xd8\xb0\x61\xdd\x98\xd2\x80\xcd\x9b\x37\
+\xff\x39\x98\x69\xec\xeb\xeb\x4b\xcf\x9e\x3d\x4b\x0f\x1e\x3c\x40\
+\xa5\x47\x0a\x5c\x0a\x27\x99\x1a\x1b\x1b\x93\xad\xae\xae\xee\xaf\
+\x71\xf9\x74\xac\x00\x00\xb3\x5f\x04\xf3\x48\x10\xef\x9e\x16\x2d\
+\x5a\x94\xc2\xf9\xa5\xe7\xcf\x9f\x23\x65\xe7\xa4\xce\xce\xce\xd4\
+\xd0\xd0\x90\x31\xfc\xf4\xe9\xd3\x34\x69\xd2\xa4\x74\xfa\xf4\xe9\
+\xf4\xe4\xc9\x93\x44\x0b\xff\x91\x68\x53\xa6\x4c\xf9\xf9\xc6\x8d\
+\x1b\x8b\x07\x0e\x1c\xe8\xff\xe0\x01\xd8\xb4\x69\x53\x75\xb4\xe9\
+\x71\x0b\xc3\x78\xf6\xb4\x6a\xd5\xaa\x34\x61\xc2\x84\x74\xe3\xc6\
+\x8d\x34\x6b\xd6\xac\x74\xea\xd4\xa9\xd4\xda\xda\x9a\xe6\xcf\x9f\
+\x8f\x9d\xc3\x60\xba\x7a\xf5\x6a\x5a\xb8\x70\x61\x3a\x7b\xf6\x6c\
+\xf6\x4e\x77\x77\xb7\xe6\x00\x68\x95\x2f\x5e\xbc\xd8\x14\x4b\xfe\
+\xfd\x83\x88\x02\xdb\xb7\x6f\x6f\x7c\xf4\xe8\xd1\xba\x20\xbc\x3f\
+\x88\x9d\x17\xd2\x5b\x31\x73\xe6\xcc\xdf\xde\xb9\x73\xa7\x2b\x88\
+\x9e\x1c\x63\xd3\x83\xe0\x84\x16\x00\x42\xc4\xf7\x77\xd1\xa2\x4c\
+\x33\x02\xcc\x0c\x84\x5b\xb7\x6e\xed\x0b\x8d\xd9\x4f\x38\x8d\x7e\
+\x34\xd6\xfc\xf7\x89\x13\x27\x1e\xbc\x17\x00\x7e\x1d\x6d\xc5\x8a\
+\x15\x95\xc1\x54\x6d\x30\xd3\x7a\xe6\xcc\x99\xdf\xaf\x59\xb3\xa6\
+\x39\x18\x7d\x10\xd2\x68\xba\x70\xe1\x42\xed\xb2\x65\xcb\xd2\xdd\
+\xbb\x77\xd3\xd4\xa9\x53\x53\x57\x57\x57\x7a\xfc\xf8\x71\x46\x6c\
+\x84\xad\xc4\xbe\xd8\x3e\x12\x0c\xa0\x90\xa8\x9e\x7e\xc4\x0d\x4d\
+\x61\x1d\x1c\x28\x66\xc3\xfd\xe5\xcb\x97\xf1\x07\x98\x13\xfb\xbc\
+\x0e\xad\xba\x1c\x4e\xf4\x1f\x3d\x3d\x3d\xff\xda\xbf\x7f\xff\x89\
+\x98\x33\x38\x62\x00\x76\xec\xd8\xb1\xf4\xe6\xcd\x9b\x5f\xc5\x6d\
+\xcb\xe2\xc5\x8b\x6f\xd6\xd6\xd6\xd6\x04\xa1\x8b\x7a\x7b\x7b\x5b\
+\xcf\x9f\x3f\xdf\xc8\x26\xa8\x24\x92\x84\x51\x18\xc0\x63\xf3\x8c\
+\x6d\xbf\x7a\xf5\xca\xae\x27\x77\x69\xa4\xce\x38\x44\xd2\x99\xcf\
+\x18\x4c\x0c\x1b\x0e\x01\x2d\x68\x51\x0b\x78\x3f\x63\xd8\xe7\x90\
+\x7a\x8a\xe8\x82\xf9\x00\x3e\x7e\x22\xdb\x3b\xe8\xee\x6c\x6f\x6f\
+\xff\x26\xf6\xfd\x32\xe6\xdc\x1e\x12\x80\xdd\xbb\x77\xa3\x8b\xbf\
+\x7b\xf8\xf0\xe1\x5f\x8e\x1f\x3f\x3e\x3b\xd4\x88\x97\x0d\x37\x10\
+\x08\xe1\x79\x06\x91\x1e\x1b\xdb\xdf\x78\x46\x42\x74\x1b\x6b\xe0\
+\xd0\x64\x9e\x3d\x60\x8c\x7b\xae\xf9\x6e\xf3\x3d\xaf\xac\xeb\x95\
+\x0e\x00\x79\xe7\x19\x1a\x09\x08\x00\xc5\xfa\x38\x4f\xfc\x48\xe6\
+\x67\x42\x1b\xae\x1f\x3d\x7a\xf4\x93\x37\x00\xd8\xb5\x6b\x57\x4d\
+\xd8\xd0\xd7\xa1\xaa\xeb\x62\x92\x4c\xb2\x10\x1d\xc6\xd8\x14\xbb\
+\x85\x38\x09\x18\x16\x00\x36\x86\x39\x1b\xce\x0b\x2d\x81\x30\xc6\
+\xed\x23\x01\x80\x2e\x93\x79\x10\x58\xcb\x88\xe0\xef\x87\x0f\x1f\
+\x66\x1f\x98\x56\x08\xdc\xd3\xfb\xc3\x24\xeb\x6f\xdf\xbe\xdd\x5b\
+\xf4\x85\x9d\x3b\x77\xb6\x44\x38\xfa\x36\x54\xb9\x96\xd0\x93\x27\
+\x02\x64\x91\x18\xe3\x61\xf3\x69\xee\xdc\xb9\x29\x5e\x06\x08\x36\
+\x96\x30\x89\xcb\xe6\x00\x60\xe4\xea\x3f\x20\xd6\xe6\xfa\x00\x25\
+\x08\x6a\x80\xfb\x39\xce\x9a\x39\x40\x87\xd4\x00\x3b\xcc\xf1\x1e\
+\xfe\x06\x8d\x20\x7a\x60\x56\x08\x12\x20\x42\xab\x11\x24\xeb\x17\
+\xc3\x17\xfd\x09\x5f\x9d\x01\xb0\x6f\xdf\xbe\xc6\x90\xca\xb5\x28\
+\x32\xaa\x64\x3a\xcf\x3c\x49\xca\xca\x95\x2b\x13\xed\xc8\x91\x23\
+\x20\x9d\x81\x10\x7e\x00\xe9\xe6\x01\xc8\x88\x8e\x82\x86\x8d\x01\
+\x8d\x35\xb2\x4d\x6d\x6a\x14\x8d\xb9\x30\xc7\x1e\xd3\xa7\x4f\xc7\
+\x79\xf1\x9b\x1a\x02\xe1\x43\x81\x24\x20\xa5\x20\xc8\x38\xe0\x2b\
+\x79\xd6\xc0\x0c\xe8\xd6\x0f\xfc\x86\xe3\xfd\x2a\x9e\xf7\x64\x00\
+\xdc\xbb\x77\xef\x3f\x11\x77\xab\x54\x53\x99\xd7\xfe\xc9\xb8\x02\
+\x31\x9c\x48\x46\xa4\xf3\x24\x16\xfb\x82\x10\xcd\x23\x22\x00\x8c\
+\xf2\x2c\x00\xae\x9b\xad\x41\x13\x00\x12\x20\xd6\x46\xa3\xc8\x01\
+\xf2\x4e\x50\xa6\x35\x3d\x9b\x29\x71\xe9\x6f\xac\x8d\x83\xc4\xe1\
+\x42\x07\xeb\xd2\xb6\x6e\xdd\x9a\xdd\x9f\x3b\x77\x0e\x67\x4d\xa4\
+\x40\x0b\x2b\x02\x88\x4f\x8b\x21\xfd\xda\x50\x8d\x9f\xe6\xbd\xac\
+\xc4\xa9\x8a\x84\x29\x50\x43\xa2\x80\x81\x84\x4f\x9e\x3c\xc9\x34\
+\xc6\xd9\x54\x00\x40\x18\x86\x95\x8e\x25\xec\x0f\x34\x80\x36\x6f\
+\xde\x3c\x9c\x2a\x5a\x04\x31\xec\x07\xb8\x86\x34\x9e\x5d\x03\x1a\
+\x74\xb6\xec\x87\x76\x71\xcd\xfb\x09\xe6\xb0\xaf\xeb\x93\x1f\x08\
+\x36\x91\x20\xfb\x7d\xce\x9c\x39\x19\x38\x57\xae\x5c\x31\x5a\x4d\
+\x2b\xc6\x4b\xad\x11\x8f\x0b\xbc\xa8\x63\x73\x41\x91\x9e\x31\x63\
+\x46\xb6\xb0\xa9\xea\xc1\x83\x07\x9d\x87\x8a\xb1\xd1\x1b\x6a\xc9\
+\x06\xda\xbf\x44\x0a\xc4\xf2\xe5\xcb\x49\x65\x31\x27\x18\x05\x54\
+\xcc\x0a\xa2\x19\xd7\x9e\x95\x24\xb4\x20\x41\x34\x0d\x3a\x98\x03\
+\xb3\xa8\x3c\x57\x23\x13\x82\x50\x20\x8c\xab\x45\xf8\x37\xae\xbc\
+\x57\xea\x5c\x0b\xc5\xd8\xa0\x10\x8d\x7c\x9b\x8d\xf3\x5e\x7f\x48\
+\xc6\x68\x10\xc6\x6f\x3c\x03\x00\x0b\x43\x30\x44\xd2\x35\x0d\x43\
+\x9f\xef\x31\x8e\x2f\x21\xa5\x25\x09\x82\x69\xf6\x05\x60\xd6\x40\
+\xc3\xb8\xc2\xb4\x0e\xcf\x7d\xd5\x4a\xf6\x31\x17\xc0\xff\xb0\x26\
+\x6b\x01\x12\x7b\xd2\xa0\x01\x3e\xbc\xd7\x17\xd9\xf3\x0d\x0d\xe0\
+\x65\x88\xd0\x86\xe9\x82\x90\x0f\x7f\x02\x61\x1e\xfe\x86\x5d\x6a\
+\x7f\x02\xa0\x59\xd8\xc8\xed\x2f\x5e\xbc\x08\x68\x48\x1d\x89\x03\
+\x00\x3e\x08\x69\xb2\x2f\x84\xeb\x00\xe9\x32\x8b\xf4\x55\x5b\xe6\
+\x40\x07\x6b\xe0\xf0\x58\x83\x88\xc3\x3c\x0b\x26\x53\xeb\x61\x53\
+\xec\xa2\x2a\xf4\xae\x4d\x2f\x9d\x6b\x10\x85\xa4\x4a\xd3\x56\x9c\
+\x1c\x0c\x10\x26\x91\x0c\x73\xd0\x06\x00\x83\x01\x1c\x14\x6b\xe1\
+\xb1\xd1\x1e\xf3\x07\x01\x61\x5d\x68\x45\x73\xb8\x47\x0b\x99\x03\
+\xe3\x80\x00\xf3\xbc\x8b\x43\x25\x04\x1a\xc5\xb8\xda\x87\x01\xa0\
+\x4c\x0d\xc2\x60\xc0\x06\x51\x48\x18\x55\x85\x50\x7d\x47\x14\x46\
+\x5c\x61\x1c\x8d\xc1\x31\xf2\x1e\x0c\xb3\x06\x0c\x41\x1b\x0c\xd2\
+\x01\x4d\xed\x83\x31\xd6\xa5\x94\xc6\x79\x5a\x1a\xb3\x47\x36\x7e\
+\xff\xfe\x7d\x9c\xec\xb0\xf5\x05\x3e\x20\x95\xbb\x69\x32\x46\x15\
+\x98\x8a\x63\x2b\x33\x31\x4d\x0b\x46\xa8\xe0\x32\x82\x97\x2c\x59\
+\x42\xb1\xc4\x19\x5f\x69\x46\x88\xb4\x61\x1e\xa6\x59\x03\x86\x01\
+\x8e\xe8\x01\xd3\x5c\x71\xd0\xac\xc9\x95\x75\x19\xc3\x54\x4c\xb3\
+\x05\xe2\xfd\x6b\x80\x9b\xda\xb0\x47\xc2\x28\x04\x40\xac\x21\x92\
+\x2b\xb6\x8f\x39\x00\x00\xe6\x01\xe1\xe6\x0d\xe6\x21\x26\x2f\xfa\
+\x03\x7d\x92\x76\x0e\x38\x80\x82\xc6\xa8\x25\x8c\x13\xfa\x58\x1f\
+\xad\x1a\xd6\x07\x94\xb3\x11\x26\x21\x02\x50\xb5\x41\xd4\xbf\x94\
+\x79\x54\x17\x82\x91\x26\x7e\x40\x4d\xe4\x1d\x23\x8a\x79\x88\xe9\
+\x30\x73\x60\xd4\xb9\xcc\x43\x5b\xe4\x81\x39\x00\x05\x20\x79\xc7\
+\x6d\x1b\x15\x0d\x30\x03\x63\x63\x25\x44\x83\x59\x01\x80\x09\xa4\
+\x4d\xb9\x8a\xad\x32\x66\x4a\x8c\x64\x35\x15\xcf\x0e\x64\xce\x08\
+\x01\xc8\x98\x0b\x8e\xd5\x04\x88\xf7\xd4\x06\x43\x26\x9a\x85\x1f\
+\x61\x9d\xd1\xd2\x00\xe3\x36\x1d\x86\x70\x4a\x84\xaf\x7c\xa6\x08\
+\xf1\x84\x5d\x3d\x39\x0c\xe8\xd4\xb0\x61\xa3\x00\xa0\x31\x6e\x78\
+\x86\x79\xde\xb1\xe0\xa1\x13\x05\x04\x3e\x9f\x00\xc1\xb4\x7b\x51\
+\x67\x70\xff\x56\x27\x58\x56\x0d\x90\x51\x9a\xea\x8e\x9a\xe7\x55\
+\xd2\x3a\x9d\x28\xc0\xb8\x67\x06\x8c\x31\x17\xa6\xb8\x1a\xfb\xcd\
+\xf4\x90\x3c\xcf\xfa\x05\x8b\x1f\x9a\xd9\xa2\x69\x35\x60\xd0\x0c\
+\x9b\x68\x1c\xfb\x8e\xaa\x06\x68\xab\x4a\xd1\x31\x98\x70\x1e\xfb\
+\x43\x38\x04\xeb\xe1\x71\x60\xf3\x66\x2c\x49\x4d\xd3\x3e\x49\x03\
+\x13\x42\xdd\xbb\x6f\xa3\x29\x30\x6c\x8d\x60\xde\x6f\xea\xab\x84\
+\x87\xca\x1e\xc9\x31\x00\xd5\x7c\xe2\xfd\xfa\x80\x3c\x21\x82\x9b\
+\xaf\xda\x54\x55\x88\xb7\xb4\x05\x00\x41\x50\x0b\xe6\xcf\x5c\x9a\
+\xfa\x6b\x1f\xa7\xe6\xa6\x96\x54\xdd\x96\x85\x4c\xed\x1d\x46\x74\
+\xb6\xac\xc7\x3b\xae\x6f\x04\x92\x27\xfd\x0a\xa6\x88\x29\x00\x40\
+\x59\x35\x60\xd8\x23\x2b\x01\xb0\xa9\x01\xee\x2b\xd1\x8c\xe5\x35\
+\xa1\x50\xf7\x32\x2d\x58\xb4\x34\x15\xeb\xfa\x52\xb1\xba\x39\x75\
+\x90\x2a\xc7\x3b\x66\x99\x9e\x31\xa2\x19\xac\xaf\x29\x5b\xd0\xe5\
+\xa3\x10\xe1\xd0\xcc\xb3\xb4\x55\x94\xd3\x07\xc8\xa8\x04\x20\x95\
+\x52\x60\xf2\x67\x0e\xf9\x7b\x9f\x3d\x23\x7c\xde\xdf\x1e\xcc\x3e\
+\x4a\xb5\x55\xf5\xa9\x3e\xca\xd8\x89\x75\x93\x53\xfd\xec\xc8\x19\
+\x1a\xa6\x38\xcf\xf7\x5c\xc3\xee\xfe\x76\x35\x0d\xb0\xde\x04\xa0\
+\xdc\x3e\x20\x4f\x40\xbe\xa2\xf3\xde\x4c\xd0\xef\x7f\x30\xeb\x5c\
+\xfb\xf7\x31\xbf\xa7\x37\x75\x84\xea\x77\xb5\xb7\xa5\xee\xb6\xf6\
+\xd4\x1b\x6a\x3c\x21\xbe\x9c\x0f\xe6\x34\x8c\xf5\x2c\x99\x05\x54\
+\xe9\x6b\x86\x66\x93\xac\x5b\xda\x8a\x12\x53\x6e\x00\x8c\xdd\x3a\
+\x2d\x9a\xa1\xd1\x33\x02\x55\x9f\x79\x3a\x35\xed\x1b\x6f\x5e\xc5\
+\x07\x8f\xfa\xba\xd4\xf7\xbc\x27\x3d\x8d\x32\xb9\xb3\xa7\x3b\xf5\
+\x15\x99\xfb\x7d\xc5\x0a\x00\xbc\x83\xa7\x57\xd2\xa5\x25\x38\x7b\
+\x50\x83\x70\x1d\x1d\x00\x24\x40\x00\x2c\xb9\x75\x4a\x82\xc2\xbd\
+\x85\x92\xcc\x6b\xe3\xcc\xc9\xca\xe3\xca\x42\x7a\x45\x32\x55\x5d\
+\x91\xba\xba\x3b\x23\xb7\x4e\xa9\xab\xb3\xcb\x13\x6b\x22\x06\x60\
+\x19\xf7\x65\xdc\xc6\x98\xc5\xd2\x90\xad\xa8\x57\x2e\x57\xf3\x24\
+\x57\x42\xcc\xe3\x21\x42\x7f\x03\xb1\x66\x7e\x48\x0e\xdb\xa4\x9b\
+\xfe\xe6\x6d\x96\x10\x56\x37\xb3\x21\x4d\xa8\x9c\x98\xba\x7a\xbb\
+\xd2\xa3\x2b\x0f\x01\x0c\x2d\x61\x4d\xee\xcd\x1a\x3d\x87\x54\xab\
+\xbc\x1f\xdd\x54\x18\x06\xf2\x84\xc0\x84\xa0\xd0\x4c\x7a\x90\x9a\
+\x80\x51\x10\x91\x12\x23\xfd\x7c\xf1\x83\x60\x3c\x95\xce\x67\x82\
+\xda\x33\x8c\x73\x82\xb4\x60\xc1\x02\xcf\x27\x05\xd8\xc4\x89\x44\
+\x69\x74\x8b\x21\x9d\x9a\xcd\xb3\x3a\x80\x80\x60\x6d\x14\xd5\x67\
+\x0c\x66\x01\x8a\xda\x3d\x3e\x5b\x65\xc0\x18\xeb\xad\x05\xb4\x65\
+\x41\xf0\x9c\x32\x3e\xdb\x71\x40\x2b\xd0\xcc\xc9\x3b\x42\xb5\x84\
+\x3d\x47\x4f\x03\x4c\x47\x05\x82\x67\x08\xf1\x68\x8b\x31\x99\xf6\
+\xd0\xd3\x12\x1a\x10\x50\x79\x6b\x04\xab\x41\xdf\xf1\xec\x12\x9a\
+\xa9\x20\x39\x12\xf3\x5c\xd0\x33\x4a\x80\xf5\xd3\x1d\xe6\x05\xf3\
+\xa3\x75\x20\x62\xfd\xaf\xf3\xd3\x0c\x60\xca\x6a\x4d\x02\x21\x1a\
+\x40\xf2\x1f\x47\x19\x83\x21\x8b\x17\xa4\xed\x3c\xc3\x27\x5f\x77\
+\x00\x94\x4a\x12\x06\xd9\x03\xe6\x35\x09\xfd\x0f\x42\xe0\x58\x8c\
+\xdf\x46\xd7\x07\x58\xcf\xeb\x84\x54\x77\x2b\x40\x98\x32\x13\xb4\
+\x74\x36\x1c\xf2\x9b\x45\x8b\x15\x9d\x1f\x52\x61\x44\x8f\x1e\x5f\
+\xaa\xd1\x0e\x4f\x95\x00\x8f\xf7\x33\xa0\x3c\x29\x6a\x6e\x6e\x36\
+\xed\x1d\x55\x1f\x20\xc3\x1e\x45\xeb\x18\x01\x85\x7c\xdc\x83\x4e\
+\xf3\x7a\x01\x31\xf4\xe1\x20\x61\x54\xd3\x00\x00\xde\xa1\xf6\x67\
+\x1d\xd7\xd4\x21\x5a\x4c\xb1\x27\x63\x74\xd6\xc0\xf9\x01\xfa\x88\
+\x00\xe0\x0b\x71\xb9\x01\xc0\xa1\x69\xbf\x66\x6c\x48\x0b\xf5\xd5\
+\x57\xc0\xb8\xde\xde\x52\xd7\x44\x4a\xa6\x4a\x73\x0b\x55\xde\x22\
+\x27\x9f\x0c\x79\x62\x84\xf4\x31\xbb\x11\x29\x6c\x31\x50\xae\x61\
+\xd1\x72\x54\x7f\x36\x88\xb3\x04\x2e\x05\x06\x10\x20\x54\xe7\x05\
+\x13\xac\x81\xdd\x23\x71\xa5\x6a\x6d\x60\x46\x49\xb7\xb6\x27\xf9\
+\xf1\x54\x29\xff\x75\x8a\x77\xf9\xd6\xc0\xbc\xb5\x6b\xd7\x72\xec\
+\xa6\x06\xe9\x24\xf9\x2e\x21\xdd\x00\xde\x87\x06\x34\xf0\xf0\x0e\
+\xcd\x8c\xee\x6d\x5a\x80\x2d\x2a\x39\xbb\xc7\xde\x10\xe7\x87\x0d\
+\x08\xf1\x4b\x8e\xa7\xba\x1e\x8c\x70\xc6\x0f\x53\x00\xc5\xf1\x39\
+\x6b\xc8\x98\xef\x20\x6d\x00\x63\x3d\x2b\x4e\x2a\x40\xd6\xf6\x3d\
+\x40\xf5\xbc\x01\xba\xa0\x01\x20\x6f\x15\xf9\xdb\x5b\xff\x14\xed\
+\xc7\xb6\x7c\xf5\xa5\xbd\xea\xfd\xd9\xc0\xdf\x4a\x9b\x4e\x12\x8f\
+\x0e\x51\x48\x15\xa2\xf3\x69\x33\x34\xd1\x79\x9f\x64\xc7\x46\xe6\
+\x67\x68\x33\x29\xe2\x7d\x4b\x5d\x01\xf8\xee\xbb\xef\x86\x22\x59\
+\x00\xd1\xd0\xb3\x11\x49\xfe\x5b\x8c\x81\x9b\x64\x5a\x6c\xca\x22\
+\xf9\xd8\x9b\xaf\xeb\xed\x2c\x6e\x4d\x0f\x61\x7e\xa8\x90\x28\x8f\
+\xb8\xec\x6e\xea\xb5\xa4\x79\x86\xef\x91\xd8\x70\x69\xb9\x66\x82\
+\xcf\xf0\x0b\xb6\xe7\x83\x23\x31\x57\xfd\xc7\x85\xf8\xfb\x86\x2f\
+\x63\xa8\xad\x18\x52\xea\x08\x6f\x79\x28\x08\x5f\xef\x5f\x58\x04\
+\x83\x32\xe2\x55\xe2\x65\x12\x2f\x3f\x10\x44\x7c\x1b\x8f\xcf\xf2\
+\x69\xae\xcd\xf8\x3e\x82\x26\x38\x95\x01\xe8\xd4\x58\x63\x7a\xd0\
+\x50\x13\x9d\xbf\x57\x80\x3e\xf6\x1b\x88\xf1\xbe\xb8\xbc\x88\xa9\
+\x8f\xc3\x41\x3e\x09\xa0\x7e\x6c\x02\x83\xd0\x3a\xc2\x9c\x2e\x45\
+\x38\xfe\x3a\xd6\xbb\xc0\x29\x7e\x21\xfe\xf6\x7e\x52\x2c\xbc\x3a\
+\x54\xf6\xf3\x40\x77\x59\xfc\xf0\x13\xfe\xcc\x8d\xf9\x79\xc9\x4b\
+\x67\x34\xa0\xbe\x1d\xb6\x74\x24\x88\xf8\x5f\xbc\xdb\x99\xde\x4f\
+\x73\xc3\x42\xb4\xd7\x65\xc8\x4f\x90\x0e\xb4\x12\x1b\xef\x45\x7f\
+\x12\x7f\x71\xfa\x3a\x0b\x81\xf1\xf7\x7d\xd3\x02\xed\x96\x60\x66\
+\x6e\x3c\x83\x7e\x7d\x00\x41\xfd\xca\xef\x48\xb2\x10\x9d\x7b\xfa\
+\x60\xdc\xb3\x50\x7b\xcc\xb9\x16\xd7\xa7\x69\x6c\x34\x40\xec\x23\
+\x68\x04\xe3\x7d\x0e\x9a\x03\x00\x42\x15\x99\x6c\xf4\x9a\xe8\x18\
+\xa2\xfa\xeb\xb5\x40\x67\x21\x54\x07\x7f\x44\x07\xc5\x34\x86\xdb\
+\xf8\xbf\xce\xa6\x34\xfe\x5f\x63\xe3\x00\x8c\x03\xf0\x11\xb7\xff\
+\x03\x7f\x19\x0a\xe4\xd7\x62\x63\xda\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x1a\
+\x08\xdd\xe1\xa7\
+\x00\x61\
+\x00\x63\x00\x63\x00\x65\x00\x73\x00\x73\x00\x6f\x00\x72\x00\x69\x00\x65\x00\x73\x00\x2d\x00\x64\x00\x69\x00\x63\x00\x74\x00\x69\
+\x00\x6f\x00\x6e\x00\x61\x00\x72\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x08\x99\x64\x87\
+\x00\x6b\
+\x00\x63\x00\x68\x00\x61\x00\x72\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x10\
+\x0f\xad\xca\x47\
+\x00\x68\
+\x00\x65\x00\x6c\x00\x70\x00\x2d\x00\x62\x00\x72\x00\x6f\x00\x77\x00\x73\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x07\
+\x0e\x95\x57\x87\
+\x00\x6b\
+\x00\x33\x00\x62\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0d\
+\x0b\x34\x2d\xe7\
+\x00\x61\
+\x00\x6b\x00\x72\x00\x65\x00\x67\x00\x61\x00\x74\x00\x6f\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x01\xad\xab\x47\
+\x00\x64\
+\x00\x69\x00\x67\x00\x69\x00\x6b\x00\x61\x00\x6d\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x01\
+\x00\x00\x00\xae\x00\x00\x00\x00\x00\x01\x00\x00\x76\xac\
+\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x15\x18\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x63\x9f\
+\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x43\x7f\
+\x00\x00\x00\x54\x00\x00\x00\x00\x00\x01\x00\x00\x28\x33\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/animation/stickman/animations/chilling b/examples/animation/stickman/animations/chilling
new file mode 100644
index 0000000..a81fc7a
Binary files /dev/null and b/examples/animation/stickman/animations/chilling differ
diff --git a/examples/animation/stickman/animations/dancing b/examples/animation/stickman/animations/dancing
new file mode 100644
index 0000000..462f66f
Binary files /dev/null and b/examples/animation/stickman/animations/dancing differ
diff --git a/examples/animation/stickman/animations/dead b/examples/animation/stickman/animations/dead
new file mode 100644
index 0000000..9859b4b
Binary files /dev/null and b/examples/animation/stickman/animations/dead differ
diff --git a/examples/animation/stickman/animations/jumping b/examples/animation/stickman/animations/jumping
new file mode 100644
index 0000000..12661a1
Binary files /dev/null and b/examples/animation/stickman/animations/jumping differ
diff --git a/examples/animation/stickman/stickman.py b/examples/animation/stickman/stickman.py
new file mode 100755
index 0000000..8a59c90
--- /dev/null
+++ b/examples/animation/stickman/stickman.py
@@ -0,0 +1,657 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import (pyqtProperty, pyqtSignal, QDataStream, QDateTime,
+        QEvent, QEventTransition, QFile, QIODevice, QParallelAnimationGroup,
+        QPointF, QPropertyAnimation, qrand, QRectF, QSignalTransition, qsrand,
+        QState, QStateMachine, Qt, QTimer)
+from PyQt5.QtGui import QColor, QPen, QPainter, QPainterPath, QPixmap
+from PyQt5.QtWidgets import (QApplication, QGraphicsItem, QGraphicsObject,
+        QGraphicsScene, QGraphicsTextItem, QGraphicsView)
+
+import stickman_rc
+
+
+class Node(QGraphicsObject):
+    positionChanged = pyqtSignal()
+
+    def __init__(self, pos, parent=None):
+        super(Node, self).__init__(parent)
+
+        self.m_dragging = False
+
+        self.setPos(pos)
+        self.setFlag(QGraphicsItem.ItemSendsGeometryChanges)
+
+    def boundingRect(self):
+        return QRectF(-6.0, -6.0, 12.0, 12.0)
+
+    def paint(self, painter, option, widget):
+        painter.setPen(Qt.white)
+        painter.drawEllipse(QPointF(0.0, 0.0), 5.0, 5.0)
+
+    def itemChange(self, change, value):
+        if change == QGraphicsItem.ItemPositionChange:
+            self.positionChanged.emit()
+
+        return super(Node, self).itemChange(change, value)
+
+    def mousePressEvent(self, event):
+        self.m_dragging = True
+
+    def mouseMoveEvent(self, event):
+        if self.m_dragging:
+            self.setPos(self.mapToParent(event.pos()))
+
+    def mouseReleaseEvent(self, event):
+        self.m_dragging = False
+
+
+Coords = (
+    # Head: 0
+    (0.0, -150.0),
+
+    # Body pentagon, top->bottom, left->right: 1 - 5
+    (0.0, -100.0),
+    (-50.0, -50.0),
+    (50.0, -50.0),
+    (-25.0, 50.0),
+    (25.0, 50.0),
+
+    # Right arm: 6 - 7
+    (-100.0, 0.0),
+    (-125.0, 50.0),
+
+    # Left arm: 8 - 9
+    (100.0, 0.0),
+    (125.0, 50.0),
+
+    # Lower body: 10 - 11
+    (-35.0, 75.0),
+    (35.0, 75.0),
+
+    # Right leg: 12 - 13
+    (-25.0, 200.0),
+    (-30.0, 300.0),
+
+    # Left leg: 14 - 15
+    (25.0, 200.0),
+    (30.0, 300.0))
+
+
+Bones = (
+    # Neck.
+    (0, 1),
+
+    # Body.
+    (1, 2),
+    (1, 3),
+    (1, 4),
+    (1, 5),
+    (2, 3),
+    (2, 4),
+    (2, 5),
+    (3, 4),
+    (3, 5),
+    (4, 5),
+
+    # Right arm.
+    (2, 6),
+    (6, 7),
+
+    # Left arm.
+    (3, 8),
+    (8, 9),
+
+    # Lower body.
+    (4, 10),
+    (4, 11),
+    (5, 10),
+    (5, 11),
+    (10, 11),
+
+    # Right leg.
+    (10, 12),
+    (12, 13),
+
+    # Left leg.
+    (11, 14),
+    (14, 15))
+
+
+class StickMan(QGraphicsObject):
+    def __init__(self):
+        super(StickMan, self).__init__()
+
+        self.m_sticks = True
+        self.m_isDead = False
+        self.m_pixmap = QPixmap('images/head.png')
+        self.m_penColor = QColor(Qt.white)
+        self.m_fillColor = QColor(Qt.black)
+
+        # Set up start position of limbs.
+        self.m_nodes = []
+        for x, y in Coords:
+            node = Node(QPointF(x, y), self)
+            node.positionChanged.connect(self.childPositionChanged)
+            self.m_nodes.append(node)
+
+        self.m_perfectBoneLengths = []
+        for n1, n2 in Bones:
+            node1 = self.m_nodes[n1]
+            node2 = self.m_nodes[n2]
+
+            dist = node1.pos() - node2.pos()
+            self.m_perfectBoneLengths.append(math.hypot(dist.x(), dist.y()))
+
+        self.startTimer(10)
+
+    def childPositionChanged(self):
+        self.prepareGeometryChange()
+
+    def setDrawSticks(self, on):
+        self.m_sticks = on
+
+        for node in self.m_nodes:
+            node.setVisible(on)
+
+    def drawSticks(self):
+        return self.m_sticks
+
+    def boundingRect(self):
+        # Account for head radius of 50.0 plus pen which is 5.0.
+        return self.childrenBoundingRect().adjusted(-55.0, -55.0, 55.0, 55.0)
+
+    def nodeCount(self):
+        return len(self.m_nodes)
+
+    def node(self, idx):
+        if idx >= 0 and idx < len(self.m_nodes):
+            return self.m_nodes[idx]
+
+        return None
+
+    def timerEvent(self, e):
+        self.update()
+
+    def stabilize(self):
+        threshold = 0.001
+
+        for i, (n1, n2) in enumerate(Bones):
+            node1 = self.m_nodes[n1]
+            node2 = self.m_nodes[n2]
+
+            pos1 = node1.pos()
+            pos2 = node2.pos()
+
+            dist = pos1 - pos2
+            length = math.hypot(dist.x(), dist.y())
+            diff = (length - self.m_perfectBoneLengths[i]) / length
+
+            p = dist * (0.5 * diff)
+            if p.x() > threshold and p.y() > threshold:
+                pos1 -= p
+                pos2 += p
+
+                node1.setPos(pos1)
+                node2.setPos(pos2)
+
+    def posFor(self, idx):
+        return self.m_nodes[idx].pos()
+
+    @pyqtProperty(QColor)
+    def penColor(self):
+        return QColor(self.m_penColor)
+
+    @penColor.setter
+    def penColor(self, color):
+        self.m_penColor = QColor(color)
+
+    @pyqtProperty(QColor)
+    def fillColor(self):
+        return QColor(self.m_fillColor)
+
+    @fillColor.setter
+    def fillColor(self, color):
+        self.m_fillColor = QColor(color)
+
+    @pyqtProperty(bool)
+    def isDead(self):
+        return self.m_isDead
+
+    @isDead.setter
+    def isDead(self, isDead):
+        self.m_isDead = isDead
+
+    def paint(self, painter, option, widget):
+        self.stabilize()
+
+        if self.m_sticks:
+            painter.setPen(Qt.white)
+
+            for n1, n2 in Bones:
+                node1 = self.m_nodes[n1]
+                node2 = self.m_nodes[n2]
+
+                painter.drawLine(node1.pos(), node2.pos())
+        else:
+            # First bone is neck and will be used for head.
+
+            path = QPainterPath()
+            path.moveTo(self.posFor(0))
+            path.lineTo(self.posFor(1))
+
+            # Right arm.
+            path.lineTo(self.posFor(2))
+            path.lineTo(self.posFor(6))
+            path.lineTo(self.posFor(7))
+
+            # Left arm.
+            path.moveTo(self.posFor(3))
+            path.lineTo(self.posFor(8))
+            path.lineTo(self.posFor(9))
+
+            # Body.
+            path.moveTo(self.posFor(2))
+            path.lineTo(self.posFor(4))
+            path.lineTo(self.posFor(10))
+            path.lineTo(self.posFor(11))
+            path.lineTo(self.posFor(5))
+            path.lineTo(self.posFor(3))
+            path.lineTo(self.posFor(1))
+
+            # Right leg.
+            path.moveTo(self.posFor(10))
+            path.lineTo(self.posFor(12))
+            path.lineTo(self.posFor(13))
+
+            # Left leg.
+            path.moveTo(self.posFor(11))
+            path.lineTo(self.posFor(14))
+            path.lineTo(self.posFor(15))
+
+            painter.setPen(QPen(self.m_penColor, 5.0, Qt.SolidLine, Qt.RoundCap))
+            painter.drawPath(path)
+
+            n1, n2 = Bones[0]
+            node1 = self.m_nodes[n1]
+            node2 = self.m_nodes[n2]
+
+            dist = node2.pos() - node1.pos()
+
+            sinAngle = dist.x() / math.hypot(dist.x(), dist.y())
+            angle = math.degrees(math.asin(sinAngle))
+
+            headPos = node1.pos()
+            painter.translate(headPos)
+            painter.rotate(-angle)
+
+            painter.setBrush(self.m_fillColor)
+            painter.drawEllipse(QPointF(0, 0), 50.0, 50.0)
+
+            painter.setBrush(self.m_penColor)
+            painter.setPen(QPen(self.m_penColor, 2.5, Qt.SolidLine, Qt.RoundCap))
+
+            # Eyes.
+            if self.m_isDead:
+                painter.drawLine(-30.0, -30.0, -20.0, -20.0)
+                painter.drawLine(-20.0, -30.0, -30.0, -20.0)
+
+                painter.drawLine(20.0, -30.0, 30.0, -20.0)
+                painter.drawLine(30.0, -30.0, 20.0, -20.0)
+            else:
+                painter.drawChord(QRectF(-30.0, -30.0, 25.0, 70.0), 30.0 * 16, 120.0 * 16)
+                painter.drawChord(QRectF(5.0, -30.0, 25.0, 70.0), 30.0 * 16, 120.0 * 16)
+
+            # Mouth.
+            if self.m_isDead:
+                painter.drawLine(-28.0, 2.0, 29.0, 2.0)
+            else:
+                painter.setBrush(QColor(128, 0, 64 ))
+                painter.drawChord(QRectF(-28.0, 2.0 - 55.0 / 2.0, 57.0, 55.0), 0.0, -180.0 * 16)
+
+            # Pupils.
+            if not self.m_isDead:
+                painter.setPen(QPen(self.m_fillColor, 1.0, Qt.SolidLine, Qt.RoundCap))
+                painter.setBrush(self.m_fillColor)
+                painter.drawEllipse(QPointF(-12.0, -25.0), 5.0, 5.0)
+                painter.drawEllipse(QPointF(22.0, -25.0), 5.0, 5.0)
+
+
+class GraphicsView(QGraphicsView):
+    keyPressed = pyqtSignal(int)
+
+    def keyPressEvent(self, e):
+        if e.key() == Qt.Key_Escape:
+            self.close()
+
+        self.keyPressed.emit(Qt.Key(e.key()))
+
+
+class Frame(object):
+    def __init__(self):
+        self.m_nodePositions = []
+
+    def nodeCount(self):
+        return len(self.m_nodePositions)
+
+    def setNodeCount(self, nodeCount):
+        while nodeCount > len(self.m_nodePositions):
+            self.m_nodePositions.append(QPointF())
+
+        while nodeCount < len(self.m_nodePositions):
+            self.m_nodePositions.pop()
+
+    def nodePos(self, idx):
+        return QPointF(self.m_nodePositions[idx])
+
+    def setNodePos(self, idx, pos):
+        self.m_nodePositions[idx] = QPointF(pos)
+
+
+class Animation(object):
+    def __init__(self):
+        self.m_currentFrame = 0
+        self.m_frames = [Frame()]
+        self.m_name = ''
+
+    def setTotalFrames(self, totalFrames):
+        while len(self.m_frames) < totalFrames:
+            self.m_frames.append(Frame())
+
+        while totalFrames < len(self.m_frames):
+            self.m_frames.pop()
+
+    def totalFrames(self):
+        return len(self.m_frames)
+
+    def setCurrentFrame(self, currentFrame):
+        self.m_currentFrame = max(min(currentFrame, self.totalFrames() - 1), 0)
+
+    def currentFrame(self):
+        return self.m_currentFrame
+
+    def setNodeCount(self, nodeCount):
+        frame = self.m_frames[self.m_currentFrame]
+        frame.setNodeCount(nodeCount)
+
+    def nodeCount(self):
+        frame = self.m_frames[self.m_currentFrame]
+        return frame.nodeCount()
+
+    def setNodePos(self, idx, pos):
+        frame = self.m_frames[self.m_currentFrame]
+        frame.setNodePos(idx, pos)
+
+    def nodePos(self, idx):
+        frame = self.m_frames[self.m_currentFrame]
+        return frame.nodePos(idx)
+
+    def name(self):
+        return self.m_name
+
+    def setName(self, name):
+        self.m_name = name
+
+    def save(self, device):
+        stream = QDataStream(device)
+        stream.writeQString(self.m_name)
+        stream.writeInt(len(self.m_frames))
+
+        for frame in self.m_frames:
+            stream.writeInt(frame.nodeCount())
+
+            for i in range(frame.nodeCount()):
+                stream << frame.nodePos(i)
+
+    def load(self, device):
+        self.m_frames = []
+
+        stream = QDataStream(device)
+        self.m_name = stream.readQString()
+        frameCount = stream.readInt()
+
+        for i in range(frameCount):
+            nodeCount = stream.readInt()
+
+            frame = Frame()
+            frame.setNodeCount(nodeCount)
+
+            for j in range(nodeCount):
+                pos = QPointF()
+                stream >> pos
+
+                frame.setNodePos(j, pos)
+
+            self.m_frames.append(frame)
+
+
+class KeyPressTransition(QSignalTransition):
+    def __init__(self, receiver, key, target=None):
+        super(KeyPressTransition, self).__init__(receiver.keyPressed)
+
+        self.m_key = key
+
+        if target is not None:
+            self.setTargetState(target)
+
+    def eventTest(self, e):
+        if super(KeyPressTransition, self).eventTest(e):
+            key = e.arguments()[0]
+            return key == self.m_key
+
+        return False
+
+
+class LightningStrikesTransition(QEventTransition):
+    def __init__(self, target):
+        super(LightningStrikesTransition, self).__init__()
+
+        self.setEventSource(self)
+        self.setEventType(QEvent.Timer)
+        self.setTargetState(target)
+        qsrand(QDateTime.currentDateTime().toTime_t())
+        self.startTimer(1000)
+
+    def eventTest(self, e):
+        return (super(LightningStrikesTransition, self).eventTest(e) and
+                (qrand() % 50) == 0)
+
+
+class LifeCycle(object):
+    def __init__(self, stickMan, keyReceiver):
+        self.m_stickMan = stickMan
+        self.m_keyReceiver = keyReceiver
+
+        # Create animation group to be used for all transitions.
+        self.m_animationGroup = QParallelAnimationGroup()
+        stickManNodeCount = self.m_stickMan.nodeCount()
+        self._pas = []
+        for i in range(stickManNodeCount):
+            pa = QPropertyAnimation(self.m_stickMan.node(i), 'pos')
+            self._pas.append(pa)
+            self.m_animationGroup.addAnimation(pa)
+
+        # Set up intial state graph.
+        self.m_machine = QStateMachine()
+        self.m_machine.addDefaultAnimation(self.m_animationGroup)
+
+        self.m_alive = QState(self.m_machine)
+        self.m_alive.setObjectName('alive')
+
+        # Make it blink when lightning strikes before entering dead animation.
+        lightningBlink = QState(self.m_machine)
+        lightningBlink.assignProperty(self.m_stickMan.scene(),
+                'backgroundBrush', Qt.white)
+        lightningBlink.assignProperty(self.m_stickMan, 'penColor', Qt.black)
+        lightningBlink.assignProperty(self.m_stickMan, 'fillColor', Qt.white)
+        lightningBlink.assignProperty(self.m_stickMan, 'isDead', True)
+
+        timer = QTimer(lightningBlink)
+        timer.setSingleShot(True)
+        timer.setInterval(100)
+        lightningBlink.entered.connect(timer.start)
+        lightningBlink.exited.connect(timer.stop)
+
+        self.m_dead = QState(self.m_machine)
+        self.m_dead.assignProperty(self.m_stickMan.scene(), 'backgroundBrush',
+                Qt.black)
+        self.m_dead.assignProperty(self.m_stickMan, 'penColor', Qt.white)
+        self.m_dead.assignProperty(self.m_stickMan, 'fillColor', Qt.black)
+        self.m_dead.setObjectName('dead')
+
+        # Idle state (sets no properties).
+        self.m_idle = QState(self.m_alive)
+        self.m_idle.setObjectName('idle')
+
+        self.m_alive.setInitialState(self.m_idle)
+
+        # Lightning strikes at random.
+        self.m_alive.addTransition(LightningStrikesTransition(lightningBlink))
+        lightningBlink.addTransition(timer.timeout, self.m_dead)
+
+        self.m_machine.setInitialState(self.m_alive)
+
+    def setDeathAnimation(self, fileName):
+        deathAnimation = self.makeState(self.m_dead, fileName)
+        self.m_dead.setInitialState(deathAnimation)
+
+    def start(self):
+        self.m_machine.start()
+
+    def addActivity(self, fileName, key):
+        state = self.makeState(self.m_alive, fileName)
+        self.m_alive.addTransition(KeyPressTransition(self.m_keyReceiver, key, state))
+
+    def makeState(self, parentState, animationFileName):
+        topLevel = QState(parentState)
+
+        animation = Animation()
+
+        file = QFile(animationFileName)
+        if file.open(QIODevice.ReadOnly):
+            animation.load(file)
+
+        frameCount = animation.totalFrames()
+        previousState = None
+        for i in range(frameCount):
+            animation.setCurrentFrame(i)
+
+            frameState = QState(topLevel)
+            nodeCount = animation.nodeCount()
+            for j in range(nodeCount):
+                frameState.assignProperty(self.m_stickMan.node(j), 'pos',
+                        animation.nodePos(j))
+
+            frameState.setObjectName('frame %d' % i)
+
+            if previousState is None:
+                topLevel.setInitialState(frameState)
+            else:
+                previousState.addTransition(previousState.propertiesAssigned,
+                        frameState)
+
+            previousState = frameState
+
+        previousState.addTransition(previousState.propertiesAssigned,
+                topLevel.initialState())
+
+        return topLevel
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    stickMan = StickMan()
+    stickMan.setDrawSticks(False)
+
+    textItem = QGraphicsTextItem()
+    textItem.setHtml("<font color=\"white\"><b>Stickman</b>"
+        "<p>"
+        "Tell the stickman what to do!"
+        "</p>"
+        "<p><i>"
+        "<li>Press <font color=\"purple\">J</font> to make the stickman jump.</li>"
+        "<li>Press <font color=\"purple\">D</font> to make the stickman dance.</li>"
+        "<li>Press <font color=\"purple\">C</font> to make him chill out.</li>"
+        "<li>When you are done, press <font color=\"purple\">Escape</font>.</li>"
+        "</i></p>"
+        "<p>If he is unlucky, the stickman will get struck by lightning, and never jump, dance or chill out again."
+        "</p></font>")
+
+    w = textItem.boundingRect().width()
+    stickManBoundingRect = stickMan.mapToScene(stickMan.boundingRect()).boundingRect()
+    textItem.setPos(-w / 2.0, stickManBoundingRect.bottom() + 25.0)
+
+    scene = QGraphicsScene()
+    scene.addItem(stickMan)
+    scene.addItem(textItem)
+    scene.setBackgroundBrush(Qt.black)
+
+    view = GraphicsView()
+    view.setRenderHints(QPainter.Antialiasing)
+    view.setTransformationAnchor(QGraphicsView.NoAnchor)
+    view.setScene(scene)
+    view.show()
+    view.setFocus()
+
+    # Make enough room in the scene for stickman to jump and die.
+    sceneRect = scene.sceneRect()
+    view.resize(sceneRect.width() + 100, sceneRect.height() + 100)
+    view.setSceneRect(sceneRect)
+
+    cycle = LifeCycle(stickMan, view)
+    cycle.setDeathAnimation(':/animations/dead')
+
+    cycle.addActivity(':/animations/jumping', Qt.Key_J)
+    cycle.addActivity(':/animations/dancing', Qt.Key_D)
+    cycle.addActivity(':/animations/chilling', Qt.Key_C)
+    cycle.start()
+
+    sys.exit(app.exec_())
diff --git a/examples/animation/stickman/stickman.qrc b/examples/animation/stickman/stickman.qrc
new file mode 100644
index 0000000..e5d66cf
--- /dev/null
+++ b/examples/animation/stickman/stickman.qrc
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>animations/chilling</file>
+    <file>animations/dancing</file>
+    <file>animations/dead</file>
+    <file>animations/jumping</file>
+</qresource>
+</RCC>
\ No newline at end of file
diff --git a/examples/animation/stickman/stickman_rc.py b/examples/animation/stickman/stickman_rc.py
new file mode 100644
index 0000000..60c3456
--- /dev/null
+++ b/examples/animation/stickman/stickman_rc.py
@@ -0,0 +1,714 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Thu May 2 17:29:21 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x19\x6c\
+\xff\
+\xff\xff\xff\x00\x00\x00\x19\x00\x00\x00\x10\x40\x38\x4c\xca\x3f\
+\x4a\x24\xde\xc0\x62\x97\x1b\x32\x01\x5d\xf3\x40\x3a\x05\x25\x01\
+\xce\x14\x45\xc0\x58\xb0\x20\xdd\x20\x86\x54\xc0\x40\xc3\x31\xca\
+\x2d\xe7\xe8\xc0\x4e\x4e\xc6\x85\x2f\x62\xd8\x40\x50\x0a\x03\xb2\
+\x01\xc4\x5d\xc0\x43\x9a\x8e\xca\x3e\xac\x2f\xc0\x3e\x83\x6a\xb1\
+\x60\x3b\xb1\x40\x45\x35\x2f\x6e\x30\x18\x5c\x40\x32\x53\x99\xcb\
+\xc5\x8d\xfc\x40\x4a\x8f\xc7\x9e\xd3\xec\x98\xc0\x44\x7e\x7d\xc3\
+\xb1\x2d\x7e\xc0\x60\x5d\xcb\xb7\xd6\xde\xd5\x40\x22\xa2\xe4\x37\
+\x5a\x12\x12\xc0\x63\x69\xe1\x79\x61\x98\x47\x40\x50\x78\x0c\x5a\
+\xfa\x18\xc4\xc0\x5b\x79\x6e\x7b\xba\xd3\x77\x40\x3c\x78\x0c\xfd\
+\x1b\x24\x7a\xc0\x62\xee\x0e\xa0\x41\x5e\x50\xc0\x46\xd1\x51\x1c\
+\xc7\x57\xf6\x40\x50\x2c\x59\x00\x05\x07\x96\x40\x36\xbd\x5a\xba\
+\x55\x33\x3c\x40\x53\xeb\xd5\xdc\x95\x84\x02\xc0\x64\x7c\xe6\xa7\
+\x82\xd4\x73\x40\x5a\x98\x3a\x9d\x99\xd2\x25\xc0\x67\x9f\x24\xfc\
+\xa8\x8b\x88\x40\x69\x6a\x0c\xdc\x04\x07\xad\x40\x61\x88\x18\xa6\
+\x50\x33\xdf\x40\x5e\xdc\xf7\xac\x43\x1d\x93\x40\x60\xa1\xe2\xfa\
+\x78\x8e\x27\x40\x6b\xea\x33\x3e\x3c\x8e\x55\x00\x00\x00\x10\x40\
+\x38\x4c\xcb\x75\x7c\x04\xe4\xc0\x62\x97\x16\xcb\x46\x05\x9e\x40\
+\x3a\x04\xf9\x90\xa0\xa1\x90\xc0\x58\xb0\x1c\x43\xe6\x16\xc6\xc0\
+\x40\xc3\x37\x29\xb0\xad\x71\xc0\x4e\x4e\xa0\x29\xf8\xaf\x63\x40\
+\x50\x0a\x04\xf7\x7a\x75\xf9\xc0\x43\x9a\xa3\xc7\xff\x8e\xe7\xc0\
+\x3e\x83\x24\xc7\x88\x06\x31\x40\x45\x35\x0f\x82\x42\x98\x23\x40\
+\x32\x53\xbe\x35\xfa\x10\xf1\x40\x4a\x8f\xeb\x86\x7e\xa9\xe7\xc0\
+\x44\x7e\x73\x44\xb1\xe1\x51\xc0\x60\x5d\xc2\x5a\x55\xc7\x63\x40\
+\x22\xa2\xcb\x69\x59\x50\x4d\xc0\x63\x69\xe0\xb9\x0f\x32\xde\x40\
+\x50\x78\x10\xb9\x1c\xd7\xaa\xc0\x5b\x79\x7a\x66\xb3\x79\x6b\x40\
+\x3c\x77\xfd\x1b\x3d\x06\x10\xc0\x62\xee\x10\xd4\xaa\xf0\xf0\xc0\
+\x46\xd1\x4e\xde\x36\xe2\x04\x40\x50\x2c\x31\x73\xb4\xd5\x4d\x40\
+\x36\xbd\x01\xb5\xb5\x00\xbf\x40\x53\xeb\xec\x32\x09\x0f\xf3\xc0\
+\x64\x7c\xde\xd4\xf9\xea\x5a\x40\x5a\x98\x39\x7f\xc7\xf1\x43\xc0\
+\x67\x9f\x24\x5c\x76\xd5\xf3\x40\x69\x6a\x0a\x70\x9e\x4e\xa4\x40\
+\x61\x88\x12\x1f\x05\xdd\x03\x40\x5e\xdc\xf4\xca\xc1\xac\x79\x40\
+\x60\xa1\xe3\x0c\x44\xff\x6e\x40\x6b\xea\x32\x47\x27\x58\xb5\x00\
+\x00\x00\x10\x40\x38\x4c\xcb\x75\x7c\x04\xe4\xc0\x62\x97\x16\xcb\
+\x46\x05\x9e\x40\x3a\x04\xf9\x90\xa0\xa1\x90\xc0\x58\xb0\x1c\x43\
+\xe6\x16\xc6\xc0\x40\xc3\x37\x29\xb0\xad\x71\xc0\x4e\x4e\xa0\x29\
+\xf8\xaf\x63\x40\x50\x0a\x04\xf7\x7a\x75\xf9\xc0\x43\x9a\xa3\xc7\
+\xff\x8e\xe7\xc0\x3e\x83\x24\xc7\x88\x06\x31\x40\x45\x35\x0f\x82\
+\x42\x98\x23\x40\x32\x53\xbe\x35\xfa\x10\xf1\x40\x4a\x8f\xeb\x86\
+\x7e\xa9\xe7\xc0\x44\x7e\x73\x44\xb1\xe1\x51\xc0\x60\x5d\xc2\x5a\
+\x55\xc7\x63\x40\x22\xa2\xcb\x69\x59\x50\x4d\xc0\x63\x69\xe0\xb9\
+\x0f\x32\xde\x40\x50\x78\x10\xb9\x1c\xd7\xaa\xc0\x5b\x79\x7a\x66\
+\xb3\x79\x6b\x40\x3c\x77\xfd\x1b\x3d\x06\x10\xc0\x62\xee\x10\xd4\
+\xaa\xf0\xf0\xc0\x46\xd1\x4e\xde\x36\xe2\x04\x40\x50\x2c\x31\x73\
+\xb4\xd5\x4d\x40\x36\xbd\x01\xb5\xb5\x00\xbf\x40\x53\xeb\xec\x32\
+\x09\x0f\xf3\xc0\x64\x7c\xde\xd4\xf9\xea\x5a\x40\x5a\x98\x39\x7f\
+\xc7\xf1\x43\xc0\x67\x9f\x24\x5c\x76\xd5\xf3\x40\x69\x6a\x0a\x70\
+\x9e\x4e\xa4\x40\x61\x88\x12\x1f\x05\xdd\x03\x40\x5e\xdc\xf4\xca\
+\xc1\xac\x79\x40\x60\xa1\xe3\x0c\x44\xff\x6e\x40\x6b\xea\x32\x47\
+\x27\x58\xb5\x00\x00\x00\x10\x40\x38\x4c\xc9\x02\x38\xef\xcd\xc0\
+\x62\x97\x1f\xb1\x2b\xf9\x2a\x40\x3a\x05\x52\xd2\x95\xd7\xab\xc0\
+\x58\xb0\x25\xaa\x53\xdb\xfb\xc0\x40\xc3\x2b\xf2\x52\x75\x9c\xc0\
+\x4e\x4e\xee\xcf\x9b\x90\x20\x40\x50\x0a\x02\x68\x2b\x0a\x79\xc0\
+\x43\x9a\x79\x01\x1a\xe6\xb9\xc0\x3e\x83\xb4\x36\x4e\x91\x1d\x40\
+\x45\x35\x51\x17\x06\xbb\x13\x40\x32\x53\x73\x48\x82\xb8\xb3\x40\
+\x4a\x8f\xa1\xde\xcc\x91\x1f\xc0\x44\x7e\x88\xc8\x99\xcc\xe3\xc0\
+\x60\x5d\xd5\x8c\xe2\xd4\xd6\x40\x22\xa2\xfe\x41\x73\x93\xb3\xc0\
+\x63\x69\xe2\x43\x44\x69\xd7\x40\x50\x78\x07\xd5\xb0\x97\xb1\xc0\
+\x5b\x79\x62\x25\xed\x42\x8d\x40\x3c\x78\x1d\x6d\x64\xc2\xa2\xc0\
+\x62\xee\x0c\x58\x0f\x63\xac\xc0\x46\xd1\x53\xa5\xee\xcf\x4a\x40\
+\x50\x2c\x82\x94\x9a\xd5\x79\x40\x36\xbd\xb8\x76\x84\x73\x91\x40\
+\x53\xeb\xbe\x59\x7d\x1d\xee\xc0\x64\x7c\xee\xed\xf6\x5d\x09\x40\
+\x5a\x98\x3b\xcb\xed\xe6\x6c\xc0\x67\x9f\x25\xa6\x1c\x6e\xe9\x40\
+\x69\x6a\x0f\x6b\x3b\xad\xe5\x40\x61\x88\x1f\x86\x72\xb7\xce\x40\
+\x5e\xdc\xfa\xb5\x02\x69\xbf\x40\x60\xa1\xe2\xe7\xb9\x5c\x6a\x40\
+\x6b\xea\x34\x42\x75\x16\xa6\x00\x00\x00\x10\x40\x38\x4c\xc8\xf1\
+\x73\x46\x04\xc0\x62\x97\x1f\xee\x0c\xf5\x37\x40\x3a\x05\x55\x49\
+\x9a\x94\xdf\xc0\x58\xb0\x25\xec\x1f\xd6\x66\xc0\x40\xc3\x2b\xa0\
+\x8b\xcc\x68\xc0\x4e\x4e\xf0\xf9\x4c\x7d\xc5\x40\x50\x0a\x02\x56\
+\xcf\x1b\x74\xc0\x43\x9a\x77\xd7\x9d\x67\xb9\xc0\x3e\x83\xb8\x29\
+\x68\x18\xac\x40\x45\x35\x52\xe6\x88\x0c\x08\x40\x32\x53\x71\x35\
+\x56\x27\xbe\x40\x4a\x8f\x9f\xd7\xb3\x3a\x64\xc0\x44\x7e\x89\x5f\
+\xfb\xd6\xa6\xc0\x60\x5d\xd6\x13\xf6\xcd\x94\x40\x22\xa2\xff\xa7\
+\x2c\xa7\x01\xc0\x63\x69\xe2\x4e\x19\xcc\x87\x40\x50\x78\x07\x98\
+\x0d\x09\xcb\xc0\x5b\x79\x61\x7d\xbc\xc0\x33\x40\x3c\x78\x1e\x4d\
+\x88\xf4\x35\xc0\x62\xee\x0c\x38\xf1\xc4\xe8\xc0\x46\xd1\x53\xca\
+\x0b\x08\xfb\x40\x50\x2c\x84\xd0\x5d\x55\x8c\x40\x36\xbd\xbd\x80\
+\x5a\xad\x4a\x40\x53\xeb\xbd\x15\xf5\x07\xab\xc0\x64\x7c\xef\x60\
+\x1c\x2f\x98\x40\x5a\x98\x3b\xdc\x37\xef\xe9\xc0\x67\x9f\x25\xaf\
+\x3d\xbf\xd4\x40\x69\x6a\x0f\x8e\x89\x77\x9f\x40\x61\x88\x1f\xe5\
+\x0f\x7e\xd1\x40\x5e\xdc\xfa\xde\xc3\x4f\x44\x40\x60\xa1\xe2\xe6\
+\xb7\x5f\xeb\x40\x6b\xea\x34\x50\x71\xf2\x5e\x00\x00\x00\x10\x40\
+\x38\x4c\xc8\xe4\xe9\x4a\xe6\xc0\x62\x97\x20\x1b\x90\x2c\x4f\x40\
+\x3a\x05\x57\x22\x0c\x24\x7d\xc0\x58\xb0\x26\x1d\x5d\x86\x5d\xc0\
+\x40\xc3\x2b\x63\x3b\xcf\x8c\xc0\x4e\x4e\xf2\x97\xc3\x66\xc7\x40\
+\x50\x0a\x02\x49\xd6\x8c\x4d\xc0\x43\x9a\x76\xf9\x0d\x28\xdf\xc0\
+\x3e\x83\xbb\x1e\x53\x10\x07\x40\x45\x35\x54\x41\x8c\xf4\x10\x40\
+\x32\x53\x6f\xa7\x9a\x5e\xd5\x40\x4a\x8f\x9e\x53\x1a\xe6\x20\xc0\
+\x44\x7e\x89\xd1\x4c\x49\xec\xc0\x60\x5d\xd6\x79\x12\xe1\x41\x40\
+\x22\xa3\x00\xb2\xf0\x65\xf7\xc0\x63\x69\xe2\x56\x35\xbe\x3d\x40\
+\x50\x78\x07\x69\xf1\x50\x4e\xc0\x5b\x79\x60\xff\xec\xcb\x67\x40\
+\x3c\x78\x1e\xf5\x33\x9c\xb3\xc0\x62\xee\x0c\x21\xab\x29\xe4\xc0\
+\x46\xd1\x53\xe5\x27\x99\x97\x40\x50\x2c\x86\x7c\x61\xad\xa6\x40\
+\x36\xbd\xc1\x45\xf8\xa0\x3f\x40\x53\xeb\xbc\x23\xbf\xbf\x32\xc0\
+\x64\x7c\xef\xb5\x95\x62\x2d\x40\x5a\x98\x3b\xe8\x6a\x6d\xa5\xc0\
+\x67\x9f\x25\xb6\x13\xea\x8f\x40\x69\x6a\x0f\xa8\xf8\xea\x0c\x40\
+\x61\x88\x20\x2b\xe3\xfb\xb4\x40\x5e\xdc\xfa\xfe\x05\x65\x16\x40\
+\x60\xa1\xe2\xe5\xf6\x3c\x86\x40\x6b\xea\x34\x5a\xea\xb2\xfe\x00\
+\x00\x00\x10\x40\x38\x4c\xc8\xd4\x84\xf3\x4d\xc0\x62\x97\x20\x57\
+\x0f\x3b\xd7\x40\x3a\x05\x59\x8c\x8a\x5e\xce\xc0\x58\xb0\x26\x5d\
+\xcd\x2f\x15\xc0\x40\xc3\x2b\x12\xda\xcc\x87\xc0\x4e\x4e\xf4\xb6\
+\x3e\xa1\x52\x40\x50\x0a\x02\x38\xe4\x10\x8c\xc0\x43\x9a\x75\xd5\
+\xe6\xa1\x5c\xc0\x3e\x83\xbe\xfd\x1d\x6c\x0f\x40\x45\x35\x56\x07\
+\xd6\x3e\xb6\x40\x32\x53\x6d\x9e\xdc\x7b\x7c\x40\x4a\x8f\x9c\x56\
+\x73\x8e\x7b\xc0\x44\x7e\x8a\x65\x9b\x9a\xc2\xc0\x60\x5d\xd6\xfd\
+\x68\xf0\x6a\x40\x22\xa3\x02\x11\x65\xf2\x80\xc0\x63\x69\xe2\x60\
+\xd2\xcd\x1f\x40\x50\x78\x07\x2d\xa2\x09\x53\xc0\x5b\x79\x60\x5b\
+\x5c\xc5\x6c\x40\x3c\x78\x1f\xd0\x82\x80\xbc\xc0\x62\xee\x0c\x03\
+\x39\x4a\xd4\xc0\x46\xd1\x54\x08\xbe\xbb\x9e\x40\x50\x2c\x88\xac\
+\xa3\x4c\x7c\x40\x36\xbd\xc6\x35\xfc\x61\x64\x40\x53\xeb\xba\xe6\
+\xb1\x05\x48\xc0\x64\x7c\xf0\x25\x7e\x80\x23\x40\x5a\x98\x3b\xf8\
+\x62\xb1\x2e\xc0\x67\x9f\x25\xbf\x07\x67\xde\x40\x69\x6a\x0f\xcb\
+\x95\x87\xec\x40\x61\x88\x20\x88\x9b\xc5\x2f\x40\x5e\xdc\xfb\x26\
+\xf0\x4e\x91\x40\x60\xa1\xe2\xe4\xf9\x69\xcb\x40\x6b\xea\x34\x68\
+\x9f\xdc\x0a\x00\x00\x00\x10\x40\x38\x4c\xc8\xcf\x45\x6d\x70\xc0\
+\x62\x97\x20\x6a\x1b\x9c\x23\x40\x3a\x05\x5a\x52\xc4\x7b\x1c\xc0\
+\x58\xb0\x26\x72\x72\x66\xea\xc0\x40\xc3\x2a\xf9\x10\xed\xb9\xc0\
+\x4e\x4e\xf5\x64\x15\x69\xb0\x40\x50\x0a\x02\x33\x77\xa5\x56\xc0\
+\x43\x9a\x75\x78\xa3\x77\x6b\xc0\x3e\x83\xc0\x3a\xa2\x9b\x18\x40\
+\x45\x35\x56\x99\x6e\xfb\xd2\x40\x32\x53\x6c\xf7\xf3\x6f\x59\x40\
+\x4a\x8f\x9b\xb3\x71\xd9\x7e\xc0\x44\x7e\x8a\x95\x22\x08\xc3\xc0\
+\x60\x5d\xd7\x27\xd0\xff\x24\x40\x22\xa3\x02\x81\xb3\x6a\x1c\xc0\
+\x63\x69\xe2\x64\x39\x77\x1e\x40\x50\x78\x07\x1a\x50\xf1\xd4\xc0\
+\x5b\x79\x60\x26\xa7\x76\x2b\x40\x3c\x78\x20\x16\xc0\xae\xfd\xc0\
+\x62\xee\x0b\xf9\x78\xf7\x9a\xc0\x46\xd1\x54\x14\x2c\xd4\x30\x40\
+\x50\x2c\x89\x60\x2e\x92\x45\x40\x36\xbd\xc7\xcb\x13\x78\x86\x40\
+\x53\xeb\xba\x81\x14\xb0\x4f\xc0\x64\x7c\xf0\x49\x5d\x6b\x81\x40\
+\x5a\x98\x3b\xfd\x81\x19\xae\xc0\x67\x9f\x25\xc1\xe5\xe5\x65\x40\
+\x69\x6a\x0f\xd6\xad\x9f\xef\x40\x61\x88\x20\xa6\x52\x94\x24\x40\
+\x5e\xdc\xfb\x34\x0d\x4b\xd1\x40\x60\xa1\xe2\xe4\xa8\x63\x78\x40\
+\x6b\xea\x34\x6d\x04\x78\x67\x00\x00\x00\x10\x40\x38\x4c\xc8\xc3\
+\x53\xf0\xd7\xc0\x62\x97\x20\x95\x74\xbf\xc7\x40\x3a\x05\x5c\x16\
+\x3e\x0f\x2d\xc0\x58\xb0\x26\xa1\x74\xe5\x62\xc0\x40\xc3\x2a\xbe\
+\x48\x1a\xc9\xc0\x4e\x4e\xf6\xef\xf7\x35\xd6\x40\x50\x0a\x02\x27\
+\x21\x30\x73\xc0\x43\x9a\x74\xa4\x51\xd1\x0d\xc0\x3e\x83\xc3\x0d\
+\xc2\x0e\xf4\x40\x45\x35\x57\xe5\x09\x34\x5f\x40\x32\x53\x6b\x7b\
+\xc7\x91\x61\x40\x4a\x8f\x9a\x40\x37\x7d\xc1\xc0\x44\x7e\x8b\x01\
+\x5c\x12\x71\xc0\x60\x5d\xd7\x88\x63\x00\x6f\x40\x22\xa3\x03\x81\
+\x71\x1e\xdd\xc0\x63\x69\xe2\x6b\xf8\x2e\x8c\x40\x50\x78\x06\xee\
+\x57\xe8\x39\xc0\x5b\x79\x5f\xae\xab\x35\x22\x40\x3c\x78\x20\xb6\
+\xa7\x72\x0b\xc0\x62\xee\x0b\xe3\x46\x4f\xd6\xc0\x46\xd1\x54\x2e\
+\x40\x0a\x1b\x40\x50\x2c\x8a\xf9\x12\xa8\xf6\x40\x36\xbd\xcb\x65\
+\xa5\xcc\xd1\x40\x53\xeb\xb9\x99\xaa\xcf\x03\xc0\x64\x7c\xf0\x9b\
+\x11\xbc\x05\x40\x5a\x98\x3c\x09\x29\xdc\x73\xc0\x67\x9f\x25\xc8\
+\x6e\xde\xfd\x40\x69\x6a\x0f\xef\xf2\x9d\x38\x40\x61\x88\x20\xe9\
+\xfe\xa9\x62\x40\x5e\xdc\xfb\x51\xea\xa9\x9f\x40\x60\xa1\xe2\xe3\
+\xef\xdb\xd6\x40\x6b\xea\x34\x77\x05\xb5\xb1\x00\x00\x00\x10\x40\
+\x38\x4c\xc8\xc2\x67\xdd\x57\xc0\x62\x97\x20\x98\xcd\x94\x1a\x40\
+\x3a\x05\x5c\x39\x1f\x5d\xdb\xc0\x58\xb0\x26\xa5\x16\x7d\x84\xc0\
+\x40\xc3\x2a\xb9\xbc\xba\x60\xc0\x4e\x4e\xf7\x0e\x8c\x4a\xb1\x40\
+\x50\x0a\x02\x26\x2d\x64\x0a\xc0\x43\x9a\x74\x93\xeb\xe8\x2d\xc0\
+\x3e\x83\xc3\x45\x9f\x4d\x2f\x40\x45\x35\x57\xfe\xa7\x9e\xb3\x40\
+\x32\x53\x6b\x5e\x68\x2f\x32\x40\x4a\x8f\x9a\x23\x89\xc3\x22\xc0\
+\x44\x7e\x8b\x09\xb8\x5e\x6c\xc0\x60\x5d\xd7\x8f\xd8\xc8\x46\x40\
+\x22\xa3\x03\x95\x32\xa9\x80\xc0\x63\x69\xe2\x6c\x91\x58\xc3\x40\
+\x50\x78\x06\xea\xf2\x89\xaa\xc0\x5b\x79\x5f\xa5\x67\x05\xe0\x40\
+\x3c\x78\x20\xc3\x00\xcb\xb0\xc0\x62\xee\x0b\xe1\x8f\x72\x2a\xc0\
+\x46\xd1\x54\x30\x44\x61\xe5\x40\x50\x2c\x8b\x18\xa9\x44\x23\x40\
+\x36\xbd\xcb\xac\xeb\xcc\x19\x40\x53\xeb\xb9\x87\xca\x0f\x26\xc0\
+\x64\x7c\xf0\xa1\x61\xc8\xea\x40\x5a\x98\x3c\x0a\x10\x78\x9d\xc0\
+\x67\x9f\x25\xc8\xf0\x21\x1c\x40\x69\x6a\x0f\xf1\xe6\x6c\xcd\x40\
+\x61\x88\x20\xef\x39\x09\x1b\x40\x5e\xdc\xfb\x54\x39\x4e\x8a\x40\
+\x60\xa1\xe2\xe3\xe1\x9a\x53\x40\x6b\xea\x34\x77\xcb\x94\x20\x00\
+\x00\x00\x10\x40\x38\x4c\xc8\xc1\x32\xe4\xf9\xc0\x62\x97\x20\x9d\
+\x2e\xf8\xde\x40\x3a\x05\x5c\x66\xc6\xea\x0b\xc0\x58\xb0\x26\xa9\
+\xd7\x32\x7d\xc0\x40\xc3\x2a\xb3\xc9\xdf\x14\xc0\x4e\x4e\xf7\x36\
+\x93\x96\x7f\x40\x50\x0a\x02\x24\xee\x51\x65\xc0\x43\x9a\x74\x7e\
+\x75\x91\x91\xc0\x3e\x83\xc3\x8e\xbe\x00\x43\x40\x45\x35\x58\x20\
+\x2f\xea\x4a\x40\x32\x53\x6b\x37\xf6\x02\x6f\x40\x4a\x8f\x99\xfe\
+\x00\x4b\x9f\xc0\x44\x7e\x8b\x14\xa9\xbf\x4b\xc0\x60\x5d\xd7\x99\
+\x9c\x71\xc0\x40\x22\xa3\x03\xaf\x0e\x58\x32\xc0\x63\x69\xe2\x6d\
+\x59\xd1\xf7\x40\x50\x78\x06\xe6\x80\xb1\x85\xc0\x5b\x79\x5f\x99\
+\x46\x45\x3d\x40\x3c\x78\x20\xd3\x2a\x6b\xb5\xc0\x62\xee\x0b\xdf\
+\x51\x0d\x21\xc0\x46\xd1\x54\x32\xe8\x5b\x66\x40\x50\x2c\x8b\x42\
+\x01\xb4\x84\x40\x36\xbd\xcc\x0a\x35\xc8\xee\x40\x53\xeb\xb9\x70\
+\x63\x9a\x1b\xc0\x64\x7c\xf0\xa9\xa5\x0c\xbe\x40\x5a\x98\x3c\x0b\
+\x3e\x51\xa0\xc0\x67\x9f\x25\xc9\x99\x51\x18\x40\x69\x6a\x0f\xf4\
+\x74\xa1\xea\x40\x61\x88\x20\xf6\x10\xd1\x9d\x40\x5e\xdc\xfb\x57\
+\x3e\x65\x10\x40\x60\xa1\xe2\xe3\xce\xf1\x84\x40\x6b\xea\x34\x78\
+\xce\x91\x2c\x00\x00\x00\x10\x40\x38\x4c\xc8\xc1\x32\xe4\xf9\xc0\
+\x62\x97\x20\x9d\x2e\xf8\xde\x40\x3a\x05\x5c\x66\xc6\xea\x0b\xc0\
+\x58\xb0\x26\xa9\xd7\x32\x7d\xc0\x40\xc3\x2a\xb3\xc9\xdf\x14\xc0\
+\x4e\x4e\xf7\x36\x93\x96\x7f\x40\x50\x0a\x02\x24\xee\x51\x65\xc0\
+\x43\x9a\x74\x7e\x75\x91\x91\xc0\x3e\x83\xc3\x8e\xbe\x00\x43\x40\
+\x45\x35\x58\x20\x2f\xea\x4a\x40\x32\x53\x6b\x37\xf6\x02\x6f\x40\
+\x4a\x8f\x99\xfe\x00\x4b\x9f\xc0\x44\x7e\x8b\x14\xa9\xbf\x4b\xc0\
+\x60\x5d\xd7\x99\x9c\x71\xc0\x40\x22\xa3\x03\xaf\x0e\x58\x32\xc0\
+\x63\x69\xe2\x6d\x59\xd1\xf7\x40\x50\x78\x06\xe6\x80\xb1\x85\xc0\
+\x5b\x79\x5f\x99\x46\x45\x3d\x40\x3c\x78\x20\xd3\x2a\x6b\xb5\xc0\
+\x62\xee\x0b\xdf\x51\x0d\x21\xc0\x46\xd1\x54\x32\xe8\x5b\x66\x40\
+\x50\x2c\x8b\x42\x01\xb4\x84\x40\x36\xbd\xcc\x0a\x35\xc8\xee\x40\
+\x53\xeb\xb9\x70\x63\x9a\x1b\xc0\x64\x7c\xf0\xa9\xa5\x0c\xbe\x40\
+\x5a\x98\x3c\x0b\x3e\x51\xa0\xc0\x67\x9f\x25\xc9\x99\x51\x18\x40\
+\x69\x6a\x0f\xf4\x74\xa1\xea\x40\x61\x88\x20\xf6\x10\xd1\x9d\x40\
+\x5e\xdc\xfb\x57\x3e\x65\x10\x40\x60\xa1\xe2\xe3\xce\xf1\x84\x40\
+\x6b\xea\x34\x78\xce\x91\x2c\x00\x00\x00\x10\x40\x38\x4c\xc8\xbf\
+\xcf\xfc\x3c\xc0\x62\x97\x20\xa2\x37\x18\xbc\x40\x3a\x05\x5c\x9b\
+\x39\x94\x7a\xc0\x58\xb0\x26\xaf\x4c\xea\x97\xc0\x40\xc3\x2a\xac\
+\xf4\x31\x63\xc0\x4e\x4e\xf7\x64\x8f\x9a\x25\x40\x50\x0a\x02\x23\
+\x7f\xd0\x06\xc0\x43\x9a\x74\x65\xcd\xff\xd0\xc0\x3e\x83\xc3\xe2\
+\xbe\x25\x12\x40\x45\x35\x58\x46\xb5\xb3\x85\x40\x32\x53\x6b\x0b\
+\xcb\x0d\x92\x40\x4a\x8f\x99\xd2\xe0\xed\x42\xc0\x44\x7e\x8b\x21\
+\x3b\xf0\xf6\xc0\x60\x5d\xd7\xa4\xd4\x07\xaf\x40\x22\xa3\x03\xcc\
+\xc2\xf6\xcf\xc0\x63\x69\xe2\x6e\x40\x1f\x33\x40\x50\x78\x06\xe1\
+\x65\x9e\x9c\xc0\x5b\x79\x5f\x8b\x57\xc0\xf2\x40\x3c\x78\x20\xe5\
+\xbb\x6d\x77\xc0\x62\xee\x0b\xdc\xbd\x3a\x54\xc0\x46\xd1\x54\x35\
+\xf1\x1f\xf9\x40\x50\x2c\x8b\x71\x81\x27\x09\x40\x36\xbd\xcc\x75\
+\x61\x96\xaf\x40\x53\xeb\xb9\x55\x81\xb9\x30\xc0\x64\x7c\xf0\xb3\
+\x23\x22\x31\x40\x5a\x98\x3c\x0c\x99\x17\x47\xc0\x67\x9f\x25\xca\
+\x5b\xaf\x44\x40\x69\x6a\x0f\xf7\x64\x34\xea\x40\x61\x88\x20\xfd\
+\xed\x47\xed\x40\x5e\xdc\xfb\x5a\xb6\x86\x41\x40\x60\xa1\xe2\xe3\
+\xb9\x81\xe1\x40\x6b\xea\x34\x79\xf8\x18\x55\x00\x00\x00\x10\x40\
+\x38\x4c\xc8\xc0\x4e\x4f\x3d\xc0\x62\x97\x20\xa0\x6c\x9c\x10\x40\
+\x3a\x05\x5c\x88\x8e\x66\x1c\xc0\x58\xb0\x26\xad\x5b\x68\x24\xc0\
+\x40\xc3\x2a\xaf\x63\x02\x46\xc0\x4e\x4e\xf7\x54\x31\x68\xc3\x40\
+\x50\x0a\x02\x24\x02\x43\xaf\xc0\x43\x9a\x74\x6e\x94\x89\x25\xc0\
+\x3e\x83\xc3\xc4\xd7\xce\x09\x40\x45\x35\x58\x38\xff\x69\xa6\x40\
+\x32\x53\x6b\x1b\x83\xc1\xd0\x40\x4a\x8f\x99\xe2\x3a\x5a\x44\xc0\
+\x44\x7e\x8b\x1c\xc2\x70\xf4\xc0\x60\x5d\xd7\xa0\xd5\xe7\x48\x40\
+\x22\xa3\x03\xc2\x30\x23\x5c\xc0\x63\x69\xe2\x6d\xee\x25\xab\x40\
+\x50\x78\x06\xe3\x36\xdb\x68\xc0\x5b\x79\x5f\x90\x4d\x36\x90\x40\
+\x3c\x78\x20\xdf\x1f\xa6\xa9\xc0\x62\xee\x0b\xdd\xa8\x15\x8e\xc0\
+\x46\xd1\x54\x34\xdc\x9c\x16\x40\x50\x2c\x8b\x60\x99\x08\x6c\x40\
+\x36\xbd\xcc\x4f\x3b\xe3\xde\x40\x53\xeb\xb9\x5f\x13\x4e\xf5\xc0\
+\x64\x7c\xf0\xaf\xc2\x25\x0e\x40\x5a\x98\x3c\x0c\x1d\xa8\x48\xc0\
+\x67\x9f\x25\xca\x16\x7f\xd6\x40\x69\x6a\x0f\xf6\x58\xaf\x08\x40\
+\x61\x88\x20\xfb\x20\xf3\x53\x40\x5e\xdc\xfb\x59\x7a\x65\xa7\x40\
+\x60\xa1\xe2\xe3\xc1\x23\x31\x40\x6b\xea\x34\x79\x8e\x30\xd7\x00\
+\x00\x00\x10\x40\x38\x4c\xc8\xc0\x24\xc9\x42\xc0\x62\x97\x20\xa1\
+\x03\x51\x04\x40\x3a\x05\x5c\x8e\xb1\x4a\x18\xc0\x58\xb0\x26\xad\
+\xfe\xf0\x2a\xc0\x40\xc3\x2a\xae\x96\x4c\x84\xc0\x4e\x4e\xf7\x59\
+\x92\xb9\xe9\x40\x50\x0a\x02\x23\xd7\x61\x93\xc0\x43\x9a\x74\x6b\
+\xb2\x17\xa4\xc0\x3e\x83\xc3\xce\xab\xca\x54\x40\x45\x35\x58\x3d\
+\x81\x3f\x26\x40\x32\x53\x6b\x16\x58\xd6\x2c\x40\x4a\x8f\x99\xdd\
+\x2e\xc0\x07\xc0\x44\x7e\x8b\x1e\x3a\xf7\xb4\xc0\x60\x5d\xd7\xa2\
+\x25\xe0\x7c\x40\x22\xa3\x03\xc5\xa9\xdf\x80\xc0\x63\x69\xe2\x6e\
+\x09\x17\x9f\x40\x50\x78\x06\xe2\x9d\xee\x8d\xc0\x5b\x79\x5f\x8e\
+\xab\xef\xf2\x40\x3c\x78\x20\xe1\x4b\xbe\x79\xc0\x62\xee\x0b\xdd\
+\x5a\xe2\xd6\xc0\x46\xd1\x54\x35\x37\x7f\x10\x40\x50\x2c\x8b\x66\
+\x27\xb0\x54\x40\x36\xbd\xcc\x5b\xc5\xe0\xc4\x40\x53\xeb\xb9\x5b\
+\xee\x21\x36\xc0\x64\x7c\xf0\xb0\xde\x77\x49\x40\x5a\x98\x3c\x0c\
+\x46\x3a\xd9\xc0\x67\x9f\x25\xca\x2d\x3d\x92\x40\x69\x6a\x0f\xf6\
+\xb0\x9e\x4b\x40\x61\x88\x20\xfc\x0c\x68\x9b\x40\x5e\xdc\xfb\x59\
+\xe2\x4e\xeb\x40\x60\xa1\xe2\xe3\xbe\xa1\x23\x40\x6b\xea\x34\x79\
+\xb1\x00\x66\x00\x00\x00\x10\x40\x38\x4c\xc8\xbf\xee\x70\x14\xc0\
+\x62\x97\x20\xa1\xc8\x92\x26\x40\x3a\x05\x5c\x96\xb9\x6c\xbd\xc0\
+\x58\xb0\x26\xae\xd4\xfb\x26\xc0\x40\xc3\x2a\xad\x8a\x57\xfb\xc0\
+\x4e\x4e\xf7\x60\x9d\x78\x70\x40\x50\x0a\x02\x23\x9f\x41\xd1\xc0\
+\x43\x9a\x74\x67\xeb\x91\x0b\xc0\x3e\x83\xc3\xdb\x88\xea\x29\x40\
+\x45\x35\x58\x43\x67\x7a\x47\x40\x32\x53\x6b\x0f\x95\x49\xb5\x40\
+\x4a\x8f\x99\xd6\x94\x32\x19\xc0\x44\x7e\x8b\x20\x27\xcb\x9d\xc0\
+\x60\x5d\xd7\xa3\xdd\xa0\x33\x40\x22\xa3\x03\xca\x36\x6d\xdb\xc0\
+\x63\x69\xe2\x6e\x2c\x5c\x37\x40\x50\x78\x06\xe1\xd5\xc5\xef\xc0\
+\x5b\x79\x5f\x8c\x89\xc7\x6e\x40\x3c\x78\x20\xe4\x23\x98\x6b\xc0\
+\x62\xee\x0b\xdc\xf5\xd8\x14\xc0\x46\xd1\x54\x35\xae\x76\x39\x40\
+\x50\x2c\x8b\x6d\x6d\xc6\x31\x40\x36\xbd\xcc\x6c\x2f\x5e\xd3\x40\
+\x53\xeb\xb9\x57\xd0\x3e\xef\xc0\x64\x7c\xf0\xb2\x52\x9c\x24\x40\
+\x5a\x98\x3c\x0c\x7b\x55\xad\xc0\x67\x9f\x25\xca\x4b\x01\x8e\x40\
+\x69\x6a\x0f\xf7\x23\xb6\xf6\x40\x61\x88\x20\xfd\x40\x98\x5e\x40\
+\x5e\xdc\xfb\x5a\x6a\x50\xcc\x40\x60\xa1\xe2\xe3\xbb\x58\xc4\x40\
+\x6b\xea\x34\x79\xde\x90\x91\x00\x00\x00\x10\x40\x38\x4c\xc8\xbf\
+\xdd\x05\x9e\xc0\x62\x97\x20\xa2\x07\xc7\xe2\x40\x3a\x05\x5c\x99\
+\x4c\x59\xcf\xc0\x58\xb0\x26\xaf\x19\x92\x90\xc0\x40\xc3\x2a\xad\
+\x34\x79\x79\xc0\x4e\x4e\xf7\x62\xdf\x2a\xa1\x40\x50\x0a\x02\x23\
+\x8d\x45\xef\xc0\x43\x9a\x74\x66\xb5\xd7\xe9\xc0\x3e\x83\xc3\xdf\
+\xa8\x34\xb2\x40\x45\x35\x58\x45\x4b\x6f\x42\x40\x32\x53\x6b\x0d\
+\x6a\x68\xe4\x40\x4a\x8f\x99\xd4\x76\x73\x36\xc0\x44\x7e\x8b\x20\
+\xc5\xb9\x45\xc0\x60\x5d\xd7\xa4\x6a\x8b\x7a\x40\x22\xa3\x03\xcb\
+\xab\x9d\x74\xc0\x63\x69\xe2\x6e\x37\xa9\x75\x40\x50\x78\x06\xe1\
+\x95\xa1\xdb\xc0\x5b\x79\x5f\x8b\xda\xc3\x2a\x40\x3c\x78\x20\xe5\
+\x0c\xd5\xed\xc0\x62\xee\x0b\xdc\xd5\x77\x11\xc0\x46\xd1\x54\x35\
+\xd4\x96\x1e\x40\x50\x2c\x8b\x6f\xc2\x7c\x13\x40\x36\xbd\xcc\x71\
+\x71\xc0\xb2\x40\x53\xeb\xb9\x56\x7e\x86\x5a\xc0\x64\x7c\xf0\xb2\
+\xc9\xdd\x72\x40\x5a\x98\x3c\x0c\x8c\x5a\x33\xc0\x67\x9f\x25\xca\
+\x54\x8b\x69\x40\x69\x6a\x0f\xf7\x48\x99\x09\x40\x61\x88\x20\xfd\
+\xa3\x5a\xc4\x40\x5e\xdc\xfb\x5a\x95\xe6\x4c\x40\x60\xa1\xe2\xe3\
+\xba\x4b\x77\x40\x6b\xea\x34\x79\xed\x2a\x63\x00\x00\x00\x10\x40\
+\x38\x4c\xc8\xbf\xa9\x3c\xf7\xc0\x62\x97\x20\xa2\xc3\xba\x2f\x40\
+\x3a\x05\x5c\xa0\xf4\xb7\xf1\xc0\x58\xb0\x26\xaf\xe5\x96\xe4\xc0\
+\x40\xc3\x2a\xac\x34\xe6\xf4\xc0\x4e\x4e\xf7\x69\x95\xca\xcd\x40\
+\x50\x0a\x02\x23\x57\xdb\x46\xc0\x43\x9a\x74\x63\x1c\x4c\x49\xc0\
+\x3e\x83\xc3\xeb\xeb\x58\x7a\x40\x45\x35\x58\x4a\xeb\x0b\xde\x40\
+\x32\x53\x6b\x06\xf7\xe1\xda\x40\x4a\x8f\x99\xce\x2a\xed\x2d\xc0\
+\x44\x7e\x8b\x22\x9b\x7b\xcb\xc0\x60\x5d\xd7\xa6\x0d\xc7\x6c\x40\
+\x22\xa3\x03\xd0\x01\xd2\x5f\xc0\x63\x69\xe2\x6e\x59\x48\xae\x40\
+\x50\x78\x06\xe0\xd6\xe9\xc6\xc0\x5b\x79\x5f\x89\xd1\xfd\x18\x40\
+\x3c\x78\x20\xe7\xc2\xd5\xed\xc0\x62\xee\x0b\xdc\x75\x1f\x54\xc0\
+\x46\xd1\x54\x36\x45\xdf\xf2\x40\x50\x2c\x8b\x76\xb1\x88\xd7\x40\
+\x36\xbd\xcc\x81\x16\xe5\x42\x40\x53\xeb\xb9\x52\x91\xe6\x77\xc0\
+\x64\x7c\xf0\xb4\x2c\x9e\xd1\x40\x5a\x98\x3c\x0c\xbe\x99\x62\xc0\
+\x67\x9f\x25\xca\x70\xda\x68\x40\x69\x6a\x0f\xf7\xb6\x0f\x69\x40\
+\x61\x88\x20\xfe\xc9\x33\xea\x40\x5e\xdc\xfb\x5b\x17\x3b\x26\x40\
+\x60\xa1\xe2\xe3\xb7\x2f\x1f\x40\x6b\xea\x34\x7a\x18\x57\x7f\x00\
+\x00\x00\x10\x40\x39\x3a\xfb\x80\x37\xf3\x20\xc0\x61\xfc\xcb\xa3\
+\xcd\x26\xb3\x40\x36\xe1\xc0\x3b\x54\x6a\xc7\xc0\x57\x7d\x1f\x83\
+\x86\xf3\x1c\xc0\x42\x8a\xc6\x53\xae\xe3\x90\xc0\x4c\x3d\xf4\x90\
+\xee\x6c\x3f\x40\x4e\x2d\x2a\x66\xb7\xf4\x4a\xc0\x40\xfe\x98\xb5\
+\x59\x0c\x29\xc0\x41\x9c\x26\x3c\x27\x7a\x60\x40\x47\x49\xd1\x47\
+\xd2\xac\x49\x40\x2a\xff\x46\x2d\x2a\xf5\xdd\x40\x4c\xe9\x81\x90\
+\xd0\x9c\x7c\xc0\x43\xec\x12\xf4\xe3\xc3\x79\xc0\x5f\xc9\x03\x0f\
+\xff\x7b\x76\x40\x21\x4c\x2e\x53\x8d\xf5\xb6\xc0\x63\x5e\x70\x2e\
+\xf1\x12\x4a\x40\x60\x35\xaf\x9d\x23\xb9\xb3\xc0\x47\xf5\xbd\xee\
+\x88\x2b\x80\x40\x5f\x27\xde\x05\x0a\xe0\xcd\xc0\x59\xe5\xec\x76\
+\x6e\x20\x9e\xc0\x49\x4b\x2f\xeb\x9c\x1a\x49\x40\x51\x2b\xee\x40\
+\x71\xae\x98\x40\x31\x9e\x54\x8b\xa5\x0f\x9e\x40\x55\x1b\xb6\xcb\
+\xa1\xcb\x36\xc0\x65\x42\x19\x74\x05\x9a\xf9\x40\x5a\xb0\xf1\x49\
+\x6b\xdf\x29\xc0\x67\xab\x60\x4e\xa0\x19\x85\x40\x69\xa0\x71\xdc\
+\x2e\x28\xe1\x40\x61\x1f\xc5\xf2\x50\xd7\x8a\x40\x5e\xb5\x77\xa5\
+\x7e\x2d\xd8\x40\x60\xa2\xa4\x00\xc9\xca\x1b\x40\x6b\xdc\x49\x66\
+\x6f\x08\x2d\x00\x00\x00\x10\x40\x39\x6d\xdd\x13\x57\xa1\xd5\xc0\
+\x61\x88\xae\xf7\xb1\x07\xb9\x40\x3d\xcf\xf4\x8d\x6a\x17\x82\xc0\
+\x56\x9d\xa9\x7a\xdd\x4a\xee\xc0\x3f\xd1\x0f\xe0\xc8\xca\x1b\xc0\
+\x4b\xe5\xb8\x99\x8a\x88\x81\x40\x50\x1e\xc0\x45\x2f\x34\x10\xc0\
+\x3c\xd5\xaf\x28\x25\x54\xfa\xc0\x41\x59\xfd\x10\xd6\x49\xbe\x40\
+\x47\x9e\x2c\x2b\x96\x3e\x8e\x40\x2a\xe2\xd5\x8c\x54\xd6\x15\x40\
+\x4e\x5c\xbb\xef\xb1\x92\x66\xc0\x43\xbf\xfb\xa6\x99\x4b\x21\xc0\
+\x5f\x85\x8a\xa8\x9e\x7f\x25\x40\x20\xe3\xcd\x5f\xf2\x68\xe2\xc0\
+\x63\x5a\x9f\x77\xe2\x62\x79\x40\x60\xd6\xe3\xac\xcc\x5f\x90\xc0\
+\x34\xa5\x13\xa5\x48\xae\xc2\x40\x64\xe3\x80\x6b\x21\x27\x96\xc0\
+\x50\x8d\x0b\x23\xa9\xc3\xe4\xc0\x49\x89\xcb\x5b\xbe\x67\xd3\x40\
+\x51\x26\xf3\x40\xd2\x0d\xc1\x40\x30\x53\x3d\xec\x2b\xcb\xe3\x40\
+\x55\xdf\xb6\x87\x83\x72\xc9\xc0\x65\x50\x90\x7a\x79\xec\x90\x40\
+\x5a\xb3\x5d\xfd\x75\x1b\xbb\xc0\x67\xac\x23\x85\x4c\x3e\xc1\x40\
+\x69\xa4\x50\xfd\xc1\x1a\xbe\x40\x61\x15\x08\x2c\x04\x80\x35\x40\
+\x5e\xb2\x16\xd8\x69\xeb\x99\x40\x60\xa2\xb0\x72\x32\x30\x48\x40\
+\x6b\xdb\x00\x4c\xb4\x72\x34\x00\x00\x00\x10\x40\x39\x79\xe6\xd8\
+\x96\x75\x3a\xc0\x61\xc0\x16\x90\x87\x0e\xed\x40\x38\x8f\xec\xd9\
+\xc7\x51\xb7\xc0\x57\x00\xb8\x99\x9b\x0c\x77\xc0\x42\x03\xf3\x87\
+\x9c\x0b\x95\xc0\x4b\xc8\x06\x2f\x17\xcb\x6f\x40\x4e\x81\x5b\x7b\
+\x07\x5f\xac\xc0\x3f\x6b\x1b\x49\x9f\xef\xa8\xc0\x41\xf5\x1a\xbf\
+\x81\x76\xdc\x40\x47\xc1\xb0\x33\x3e\x15\x87\x40\x29\x35\xe9\x42\
+\xe0\x6f\x26\x40\x4d\xcb\x37\x6d\xa6\xc4\xbd\xc0\x43\xc2\xd2\x31\
+\x5b\xf1\xae\xc0\x5f\x8b\xf9\x65\x4b\xb3\xb9\x40\x20\xf2\x38\xea\
+\x61\xb5\x68\xc0\x63\x5b\x25\xb1\x29\x73\x44\x40\x60\x74\xb0\xf1\
+\xaf\x14\x87\xc0\x3c\x2b\x5b\x9f\xd5\xcc\x3a\x40\x5f\xd1\xff\x1a\
+\xb3\xb4\x69\xc0\x54\xf9\x9f\x72\x33\xf9\x81\xc0\x49\xd3\xfa\x57\
+\xad\xf2\x84\x40\x51\x56\xe6\x30\xad\x36\xf7\x40\x30\x45\x7a\x8e\
+\xd7\x55\xf9\x40\x55\x90\xcf\xcc\x04\x2a\x2d\xc0\x65\x6a\x17\x30\
+\x58\x3c\xd3\x40\x5a\xb7\x3e\x31\xfb\xc0\xbc\xc0\x67\xad\x5a\x2e\
+\xcc\x97\xbb\x40\x69\xaa\xd2\x12\x76\xcf\xc6\x40\x61\x08\x27\xfd\
+\xad\x8d\xa9\x40\x5e\xad\xed\x6b\x24\xb9\x5c\x40\x60\xa2\xbe\x9a\
+\x9d\xff\x01\x40\x6b\xd9\x5b\x1b\x78\x99\x99\x00\x00\x00\x10\x40\
+\x3a\x1c\xba\xdc\xfa\x1a\x5d\xc0\x60\xf5\xc8\x41\xf4\x13\xe6\x40\
+\x41\xfa\x03\xbb\xf4\x1d\x4a\xc0\x55\xaa\x26\xe9\xec\x4c\xf0\xc0\
+\x3b\x21\x4c\xc6\x54\x3f\x5c\xc0\x4b\x5b\x50\x0c\x7c\x8f\x98\x40\
+\x50\xf9\x7f\xcb\x19\x0b\xae\xc0\x37\x93\x4b\x4f\x3b\xf3\x58\xc0\
+\x41\x41\x68\xf8\x0c\x13\x54\x40\x48\x0c\x99\x85\x2c\x7f\x15\x40\
+\x2a\x01\x64\x6f\x7e\xaa\x70\x40\x4f\xd5\xa4\x26\x6b\xe0\x61\xc0\
+\x43\x74\x8b\x1b\xb1\x98\xf2\xc0\x5f\x1b\xe4\x8e\x02\x7c\x6d\x40\
+\x20\x42\xe5\x35\xba\xbe\x4c\xc0\x63\x54\x64\xe8\xa8\x03\x5e\x40\
+\x61\x53\x48\x12\x1c\xc4\xf0\xc0\x38\x89\xd7\xe7\xcb\xc4\x43\x40\
+\x65\x76\x6e\x3f\xaf\x20\x22\xc0\x51\x65\xa7\xda\xaa\x26\x75\xc0\
+\x49\xe6\x46\x82\xd0\x24\xb9\x40\x51\x2f\x67\xdc\xf2\x10\xf5\x40\
+\x2d\x70\x6e\xe1\xf3\xcb\xfa\x40\x56\xa2\x91\x0e\xe0\x3f\x9d\xc0\
+\x65\x68\x72\x72\x08\xfb\x25\x40\x5a\xb7\x12\xd7\xa9\xc0\x26\xc0\
+\x67\xad\x49\xf8\x95\x22\x31\x40\x69\xaa\x71\xed\xc5\x2f\x89\x40\
+\x60\xfd\xd6\x05\x90\x17\x3d\x40\x5e\xab\x02\x86\x36\xeb\xc5\x40\
+\x60\xa2\xc7\x56\x35\x46\xe9\x40\x6b\xd8\x35\x4f\xe4\xc4\x52\x00\
+\x00\x00\x10\x40\x3a\x22\xa0\xc0\xc8\x8c\x68\xc0\x61\x7a\xe1\x71\
+\x57\xe2\xd0\x40\x37\x88\x57\x2b\xb4\x27\x65\xc0\x56\x7a\x19\x92\
+\x2d\x24\x6c\xc0\x42\xaa\x2f\xed\x9b\x21\x34\xc0\x4a\xf4\xa5\x85\
+\xef\xfb\x8d\x40\x4d\xc3\xc6\xac\x45\x1a\x79\xc0\x3d\x0b\xa3\xc1\
+\xb3\x70\xbf\xc0\x42\xfd\x76\x03\x11\x38\x1a\x40\x48\x95\x81\x53\
+\xec\x54\xe6\x40\x24\xe6\xbc\x4c\xf9\xb4\xf7\x40\x4e\xcc\x4f\xe2\
+\x80\x6a\x4e\xc0\x43\x7b\x0d\x6e\x7d\x0a\xc0\xc0\x5f\x26\x9b\xe0\
+\x90\x2d\x70\x40\x20\x57\xdc\x86\xe0\xd3\xec\xc0\x63\x55\x29\x47\
+\x39\xb3\x08\x40\x60\x47\xa0\x6e\xe2\x7b\xe5\xc0\x3d\x8e\x03\x79\
+\xb3\xc5\xd8\x40\x59\xf4\xd9\x6e\xa3\x7d\xca\xc0\x53\xb4\xae\x8b\
+\xb8\xe6\x2d\xc0\x4a\xf0\xb2\x63\x73\x25\x8f\x40\x51\xb9\x89\xae\
+\x4e\xeb\xcd\x40\x2b\xd9\x2c\xa9\xd0\xb1\x70\x40\x56\x13\x03\x84\
+\xe7\x17\x50\xc0\x65\xbe\x60\xdc\xb9\x87\x4b\x40\x5a\xc4\x9a\x9e\
+\x26\x0d\xb2\xc0\x67\xb0\xd3\x88\x9b\xee\x09\x40\x69\xbf\x4a\x43\
+\x04\x51\xc2\x40\x60\xd2\x70\x29\x96\x40\xc4\x40\x5e\x9e\x5d\xed\
+\x9c\x03\x41\x40\x60\xa2\xe4\x5f\xbf\xef\x51\x40\x6b\xd2\xd4\x01\
+\xf5\xda\x8f\x00\x00\x00\x10\x40\x39\x93\x07\x18\x7c\x00\x57\xc0\
+\x61\xed\x38\x48\x04\xf6\x05\x40\x39\xce\xd4\x3d\x16\x4f\xe1\xc0\
+\x57\x5a\x79\x80\xd1\xee\x90\xc0\x41\x5a\xb0\x5b\xd9\x84\xa7\xc0\
+\x4c\x6b\x4b\xa6\xc5\x05\x67\x40\x4f\x31\x11\x79\x69\xca\xc4\xc0\
+\x40\x72\xd8\x87\x3f\x4a\xdb\xc0\x41\x30\x33\x06\x0e\xbd\x6d\x40\
+\x47\x1e\x92\xf6\x5f\x87\x9d\x40\x2c\x56\xb7\x92\x4c\x0f\x54\x40\
+\x4d\x1a\xcc\x86\x22\xf3\x62\xc0\x43\xed\x68\x86\x6d\xf1\xf7\xc0\
+\x5f\xd7\x21\x49\x55\x4f\x8d\x40\x21\x78\xc7\xca\xdd\xae\x33\xc0\
+\x63\x60\x08\x68\x37\x94\x7d\x40\x55\x61\x16\x46\xec\xb7\xbc\xc0\
+\x58\xed\xdd\x9f\xdd\x31\xf6\x40\x4d\x34\xd5\x5d\xce\x73\x18\xc0\
+\x62\x93\x74\x7f\x87\x8c\xe0\xc0\x49\x09\x16\x63\x43\xbe\xc4\x40\
+\x51\x07\x88\xc1\x11\x6b\x6e\x40\x31\xe4\xaf\x64\x08\xd2\xab\x40\
+\x55\x38\x17\x72\x80\xb5\xac\xc0\x65\x2c\x52\x57\x7f\x38\xd6\x40\
+\x5a\xad\x44\x85\x31\xfe\xd5\xc0\x67\xaa\x28\xdf\x87\x91\xd0\x40\
+\x69\x9a\x80\x20\x4d\x49\x84\x40\x61\x2c\x4a\x92\x0c\x64\x0a\x40\
+\x5e\xba\x92\xb8\xd5\x32\x10\x40\x60\xa2\x8e\x79\x47\xf5\xf0\x40\
+\x6b\xde\x52\x7b\xcd\xff\x76\x00\x00\x00\x10\x40\x39\xa0\x87\x98\
+\xb8\xe0\xec\xc0\x62\x2e\x9b\xf4\x0c\x9a\x1f\x40\x38\x3b\x99\x1e\
+\x7f\x21\x57\xc0\x57\xde\x76\x78\x0a\x75\x02\xc0\x41\xdb\xc9\xce\
+\x7f\xdb\x4c\xc0\x4c\xfd\x56\x17\x6b\xc4\x02\x40\x4e\xdd\x63\x67\
+\xe8\x83\x36\xc0\x41\xc3\x56\x92\x55\x6f\xcc\xc0\x40\xe7\x7e\x05\
+\xfc\x43\x82\x40\x46\x8a\x57\x00\x41\xd6\xd1\x40\x2d\xd4\x62\x54\
+\xe0\x04\x59\x40\x4c\x27\x56\xc2\xcd\x8b\x08\xc0\x42\x5a\xf0\x4d\
+\x5a\xcb\xe6\xc0\x60\x15\xda\x3c\x46\xaf\x80\x40\x2e\xe6\x21\xc4\
+\x8c\x1a\x04\xc0\x62\x99\x50\xe9\xf4\x73\xa0\x40\x50\x8a\xee\x4b\
+\xfe\x05\x2c\xc0\x5a\x86\x37\xad\x7c\x15\x19\x40\x3e\x0c\x8f\x47\
+\x89\x42\x31\xc0\x62\x98\x5b\xa9\x88\xc3\x3a\xc0\x48\x95\x4f\x39\
+\x7f\x7d\xf0\x40\x50\xcc\x9d\xf9\xdf\xe9\xd6\x40\x33\x0b\xd4\x0c\
+\x5e\xaf\x8e\x40\x54\xba\x84\x35\x41\xd8\x1e\xc0\x65\x06\xae\x6d\
+\x56\x5a\x3b\x40\x5a\xa7\x7d\x7e\x97\xc5\xb4\xc0\x67\xa7\xfe\xa3\
+\xda\x60\x69\x40\x69\x90\x32\x32\xe0\xf7\x43\x40\x61\x3b\xaa\x06\
+\x78\xb7\xc1\x40\x5e\xc0\x47\x72\x5e\x23\xb6\x40\x60\xa2\x75\x46\
+\x84\x56\xc3\x40\x6b\xe0\x78\xd5\xcc\x8c\x07\
+\x00\x00\x05\x1c\
+\xff\
+\xff\xff\xff\x00\x00\x00\x05\x00\x00\x00\x10\x00\x00\x00\x00\x00\
+\x00\x00\x00\xc0\x62\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\xc0\x59\x00\x00\x00\x00\x00\x00\xc0\x49\x00\x00\x00\
+\x00\x00\x00\xc0\x49\x00\x00\x00\x00\x00\x00\x40\x49\x00\x00\x00\
+\x00\x00\x00\xc0\x49\x00\x00\x00\x00\x00\x00\xc0\x39\x00\x00\x00\
+\x00\x00\x00\x40\x49\x00\x00\x00\x00\x00\x00\x40\x39\x00\x00\x00\
+\x00\x00\x00\x40\x49\x00\x00\x00\x00\x00\x00\xc0\x59\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x5f\x40\x00\x00\
+\x00\x00\x00\x40\x49\x00\x00\x00\x00\x00\x00\x40\x59\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x5f\x40\x00\x00\
+\x00\x00\x00\x40\x49\x00\x00\x00\x00\x00\x00\xc0\x41\x80\x00\x00\
+\x00\x00\x00\x40\x52\xc0\x00\x00\x00\x00\x00\x40\x41\x80\x00\x00\
+\x00\x00\x00\x40\x52\xc0\x00\x00\x00\x00\x00\xc0\x39\x00\x00\x00\
+\x00\x00\x00\x40\x69\x00\x00\x00\x00\x00\x00\xc0\x3e\x00\x00\x00\
+\x00\x00\x00\x40\x72\xc0\x00\x00\x00\x00\x00\x40\x39\x00\x00\x00\
+\x00\x00\x00\x40\x69\x00\x00\x00\x00\x00\x00\x40\x3e\x00\x00\x00\
+\x00\x00\x00\x40\x72\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x10\xc0\
+\x3c\x89\x78\xef\x64\x41\xf9\xc0\x66\xd9\xe8\x90\xe1\x7d\x15\xc0\
+\x31\xe3\x24\x6e\x1a\x35\x4b\xc0\x60\xbe\xa8\xcb\xa3\x98\xe8\xc0\
+\x4b\x26\x9c\xdd\x08\xb6\xce\xc0\x52\x55\xf3\x5e\x1e\x9a\xcc\x40\
+\x45\x5c\xfa\x9b\x0f\x7d\x05\xc0\x58\x63\x42\x06\x4d\xc8\xaa\xc0\
+\x17\x5f\xc1\xb2\xd2\x1c\x6d\x40\x31\x9d\xf7\x2f\xd9\x40\x6c\x40\
+\x45\x56\x51\xec\xae\x7d\xee\x40\x16\x28\xbe\x3a\x2e\x6a\x36\xc0\
+\x55\x8e\x3f\x19\x86\x36\x44\xc0\x24\x7d\xe2\xe5\x56\x5d\x8e\xc0\
+\x5d\x38\xe5\xb0\x63\x56\x32\x40\x42\x3f\x2b\xb1\x33\xe6\xab\x40\
+\x47\x27\x75\x17\xb2\xff\xe1\xc0\x65\x05\x80\x69\xc9\x45\xe4\x40\
+\x46\xa5\x8b\x3a\x6c\xa7\xa8\xc0\x6c\x02\x0f\xa6\x73\xff\xbc\xc0\
+\x23\x07\xbb\xb5\xb5\x51\x7d\x40\x46\x24\x27\xde\x37\xae\x65\x40\
+\x4d\x34\xca\x20\x80\xfa\x8f\x40\x3b\x64\xbd\x21\x5f\x80\x81\xc0\
+\x37\xe9\x56\x97\x59\x09\x15\x40\x65\x1b\x2f\x86\xb4\x04\x4d\xc0\
+\x3c\xb5\xb5\xc5\x5a\xd5\x30\x40\x70\xcd\xc0\x3b\x0e\xef\xd6\x40\
+\x43\xce\x38\x01\x33\x34\xdd\x40\x62\xec\x1a\xba\x71\x62\x00\x40\
+\x3f\x5e\x72\xef\x9e\x8c\x25\x40\x6f\x65\x3a\x4d\xed\xc0\xd9\x00\
+\x00\x00\x10\xc0\x3c\x89\xb8\xa7\xeb\xa9\x01\xc0\x66\xda\x0d\x17\
+\x53\x31\x17\xc0\x31\xe1\x8c\xf0\xba\xdf\x75\xc0\x60\xbe\xd1\xa6\
+\x64\x43\x82\xc0\x4b\x26\x88\x07\x92\xca\xbf\xc0\x52\x56\x94\xaa\
+\x30\x5d\x72\x40\x45\x5d\x52\x6d\x57\x9c\xd9\xc0\x58\x62\xcc\x60\
+\x74\xfe\x54\xc0\x17\x69\xa4\x0b\x5f\xcf\x0e\x40\x31\xa0\xd0\x0e\
+\xd0\x62\xed\x40\x45\x54\xc3\x45\xee\xd2\xcc\x40\x16\x23\xd3\x38\
+\xd6\x69\x28\xc0\x55\x8e\x03\x71\x6e\x9d\x31\xc0\x24\x82\xdb\x79\
+\xc3\x1b\x6e\xc0\x5d\x38\x8a\xc7\x14\xca\x74\x40\x42\x3e\x16\x8f\
+\x10\x50\x33\x40\x47\x27\x55\xb2\x6a\xa5\x2d\xc0\x65\x05\x3e\xa8\
+\x00\x01\x15\x40\x46\xa5\x8f\xfd\x66\x67\x23\xc0\x6c\x01\xce\x0e\
+\xaa\x42\x46\xc0\x23\x05\x39\x8c\x95\xa5\x0f\x40\x46\x26\xe0\xb5\
+\x34\x5e\x5e\x40\x4d\x34\xad\x03\x49\x41\x5e\x40\x3b\x5f\xf9\x28\
+\x4b\xa6\x62\xc0\x37\xea\x6c\x93\xfc\xa6\xb3\x40\x65\x1b\xec\xb0\
+\x7b\xa8\xfc\xc0\x3c\xb5\xfe\xd2\xbb\xf3\x4b\x40\x70\xce\x1f\x6d\
+\x37\x5e\x7d\x40\x43\xce\xcc\x1c\x47\x26\xc2\x40\x62\xeb\x73\x80\
+\x3a\x8b\xaf\x40\x3f\x5e\xe2\xb7\xae\x5f\xb6\x40\x6f\x64\x91\x2c\
+\x26\xca\x21\x00\x00\x00\x10\xc0\x38\x01\x30\x6b\xba\xdc\x1b\xc0\
+\x64\xeb\xbe\xf4\x99\xf2\x9b\xc0\x13\xa3\x04\x1c\x30\xdb\xb6\xc0\
+\x5e\x4a\x12\x9f\x80\xef\xb8\xc0\x48\xf6\x8c\x7d\xe9\xbd\xf2\xc0\
+\x50\xa8\x10\x7e\x26\x5b\x6d\x40\x48\xcf\x7a\x59\xa1\x24\xc5\xc0\
+\x53\x09\x35\x0a\x19\xb4\xbb\xc0\x2f\x0b\x6a\x35\x97\xd3\x7e\x40\
+\x3e\x88\x20\x7b\xc1\xb4\x2f\x40\x41\x20\x0b\x54\x51\x2e\x7e\x40\
+\x39\xc9\x9e\xf7\xb2\xd8\xc6\xc0\x55\xfe\xc6\x23\xb0\x4f\x25\xc0\
+\x1c\x1c\x60\x3d\x66\x92\xe7\xc0\x5d\xba\xce\x5e\x2a\x54\x25\x40\
+\x43\xc4\x24\x4f\x00\x90\x62\x40\x58\x0b\xce\x4b\xd9\x22\xe1\xc0\
+\x36\xed\xde\xb4\x40\x2c\x73\x40\x5a\xd1\x4e\xef\xc4\x03\x6b\x40\
+\x3f\xdc\xbc\xa5\x13\x81\x98\xc0\x37\x1b\xea\x35\xa6\x66\xff\x40\
+\x4c\x2e\x2d\x1e\x28\x01\x86\x40\x47\x49\xa3\x1a\xd5\xe2\xf0\x40\
+\x48\xdd\x6f\xf6\xf0\x01\x68\xc0\x38\xc1\x32\x29\x64\xfb\x5b\x40\
+\x66\xb7\xea\x61\x5e\xb1\x57\xc0\x3d\x45\x4c\x15\xef\x6f\x50\x40\
+\x71\x9c\x53\x80\x4b\x64\x0c\x40\x42\x8c\x98\x55\x36\x48\x2a\x40\
+\x65\xd8\xb5\x79\xf6\x83\x89\x40\x3d\xa6\xc3\x54\x49\x2b\x98\x40\
+\x71\x29\xea\x7e\x10\x5d\xc3\x00\x00\x00\x10\x40\x31\xc2\x13\x60\
+\x88\x8b\x4e\xc0\x68\x3c\xec\xdf\xc9\x5c\x2f\x40\x19\x5a\x83\xca\
+\x1f\xc9\xc5\xc0\x62\x27\x36\xb4\x9b\x52\x60\xc0\x48\x60\x10\xa3\
+\xc6\x74\xb4\xc0\x59\x39\x43\xd2\xf9\x7b\x4b\x40\x49\x55\xa6\x3b\
+\x8b\xb1\xc9\xc0\x56\x88\xbb\x33\x01\xdc\x6b\xc0\x41\x53\xb3\x9c\
+\x85\xff\x25\x3f\xf3\x70\x84\x8f\xed\xe9\x9b\x40\x2e\x1c\xbe\xb0\
+\x48\x52\x79\x40\x1a\x5f\x89\xdb\x5b\x45\xc0\xc0\x50\xc0\xce\xa2\
+\xc3\xe5\x44\xc0\x65\x26\x9c\x40\xed\xa0\x1a\xc0\x54\xa2\x72\xde\
+\x2f\x48\xc9\xc0\x6b\xdd\x16\xce\x9e\x56\xb3\x40\x55\xdc\x36\x69\
+\xb4\x6e\x69\xc0\x3d\xbd\x2f\xf0\x4e\x71\xd7\x40\x5a\x39\x0b\xe0\
+\xb9\x21\xc7\x40\x37\x5e\x81\xe7\xe6\x46\x06\xc0\x47\xa4\x74\xb8\
+\xaf\xb7\xee\x40\x38\xfe\xaa\x2d\x0e\x97\x7e\x40\x36\x4f\x1c\x98\
+\xc9\x38\x7d\x40\x40\x43\x0a\x66\x30\x52\xdc\xc0\x3f\xd3\xf0\xcb\
+\x87\x9d\x38\x40\x62\xae\x04\x10\x53\xde\x8c\xc0\x3d\x00\x25\x84\
+\x92\xd2\x45\x40\x6f\x30\xbc\x58\x1f\xbc\xdf\x40\x41\x44\xa6\xc0\
+\x0b\x29\xd8\x40\x63\xaa\x6a\x7a\x0d\xd9\x34\x40\x3e\xab\x98\x09\
+\xd9\x42\x57\x40\x70\x16\x03\x15\xe6\x2f\x0a\
+\x00\x00\x09\x2c\
+\xff\
+\xff\xff\xff\x00\x00\x00\x09\x00\x00\x00\x10\xc0\x36\xc1\x31\xf7\
+\x71\x07\xcd\xc0\x62\xc4\x31\x65\x15\x96\x34\xc0\x22\x59\x75\x1b\
+\x5e\x3f\xf0\xc0\x59\x80\x9a\x15\x13\xe9\x09\xc0\x47\x52\xc9\x1c\
+\x2f\x1a\x7a\xc0\x45\x06\x29\x2a\x67\x31\x79\x40\x49\x64\xe4\x36\
+\x8c\xfe\x06\xc0\x50\x22\x71\x64\xe5\x3f\xcb\x3f\xc9\x7e\x46\xc2\
+\x82\x74\x41\x40\x48\xe2\x7c\x67\xa7\x02\xf2\x40\x48\x75\xb8\xda\
+\x6c\xe4\xac\x40\x43\x43\x8c\xb1\x63\x97\xf6\xc0\x59\x94\x32\xd7\
+\x73\x76\xf3\x3f\xf8\xd1\x11\x6b\x2c\x82\x25\xc0\x5f\x82\xbf\x09\
+\xb5\x16\xad\x40\x4a\x15\x6d\x1b\x87\x1c\x19\x40\x55\x32\x73\xaa\
+\x94\xec\x77\xc0\x04\x4e\x49\x68\xe6\x95\xd3\x40\x60\xe5\xde\x62\
+\x15\x6c\x95\xc0\x3a\xbb\x5f\xa9\x86\x06\x7e\xc0\x0f\x68\xca\xdb\
+\xdc\xdd\x36\x40\x53\x18\x3a\x74\x13\x56\x51\x40\x50\x12\x0e\xb5\
+\x6f\x61\x5c\x40\x4e\x52\x58\x0d\xd3\x0c\x6d\xc0\x38\xbe\x69\x34\
+\x34\x0d\xd7\x40\x69\x01\x3e\xaa\x3a\x4e\xf3\xc0\x3d\xff\xa9\xa5\
+\x4e\x81\xa7\x40\x72\xc0\x69\xcc\x0a\xb2\x0e\x40\x3f\xa2\xaf\xee\
+\xb2\x7a\xa3\x40\x66\xb7\x06\x0c\x87\xf6\x2d\x40\x3d\xae\x9a\x40\
+\x3c\x67\x56\x40\x71\x9d\x34\xa4\xbb\x47\x7d\x00\x00\x00\x10\xc0\
+\x30\xaf\xc1\x69\x97\x5a\x95\xc0\x63\x49\x63\x4e\x8e\x9f\xdc\xc0\
+\x1e\xaf\xb7\x04\x39\xf0\x0c\xc0\x5a\x46\x95\xdc\xfb\x24\x8e\xc0\
+\x49\x9c\xd2\x5c\x93\x47\x4c\xc0\x48\xb5\xcf\xe8\x99\x9c\xdd\x40\
+\x48\x02\x8f\xa5\xd6\xdc\x31\xc0\x4e\xc7\x1a\x4e\x1b\x4a\x1c\xc0\
+\x2c\x94\xbf\x13\x77\x29\x41\x40\x47\x68\xf0\xdd\xb4\xba\x6a\x40\
+\x41\xac\x5d\x06\x4f\x13\x18\x40\x44\x62\x29\x5f\x79\x2c\x69\xc0\
+\x58\x78\xf9\x10\x42\x39\x8c\x40\x0d\x9e\x34\x27\x91\xbd\x70\xc0\
+\x63\x03\xb5\x2e\x0b\xf6\xb5\x40\x31\x49\xc5\x70\x34\x57\xdc\x40\
+\x55\x55\x0b\xb2\x96\x65\xb2\xbf\xf7\xd0\xc3\xa3\x37\x60\x82\x40\
+\x60\xe6\x74\x90\x7c\xd3\xd5\xc0\x3a\xbd\xb7\xf4\x49\xd6\x6d\xc0\
+\x35\x33\x14\x59\x01\x4b\xa9\x40\x52\x36\xaa\xf8\xcd\xd9\x51\x40\
+\x48\x24\x95\xbf\x77\x92\xaf\x40\x50\x19\x5d\x72\x39\xa4\xee\xc0\
+\x38\x3c\x43\x48\x09\x4c\x70\x40\x68\xc7\x21\x6e\x01\xfb\xd3\xc0\
+\x3d\xe6\x09\x44\x84\xd2\x4f\x40\x72\xa2\xff\xdd\x04\x92\x32\x40\
+\x3d\x30\xda\x3a\xb4\x2e\xfe\x40\x67\x8a\xdf\x98\x83\xb8\xf6\x40\
+\x3d\xa4\x89\x7f\x23\xcd\xd5\x40\x72\x07\x6b\x4d\x22\x90\x7e\x00\
+\x00\x00\x10\x3f\xe8\xdc\xd8\x6c\x4e\xe2\x7a\xc0\x63\x6c\xe1\x17\
+\xf2\xa0\xbf\xc0\x1c\xa0\x1f\x76\xa3\x67\x0e\xc0\x5a\x82\x4b\xa2\
+\xc3\x07\x44\xc0\x4e\x6a\xa4\x92\xae\xdd\x89\xc0\x4e\x00\xb1\x06\
+\xb8\xfd\xe4\x40\x43\x6f\xe2\x4f\x4e\xd0\x7e\xc0\x4a\x2d\xf6\xac\
+\x0f\xbe\x52\xc0\x45\xc6\xbd\x2e\xcf\xf5\x06\x40\x44\xce\x84\x52\
+\x4a\x5a\x37\x40\x19\x34\x31\x96\xfb\x44\x7f\x40\x46\xb7\xe1\xb0\
+\xec\xbd\xa9\xc0\x58\xfd\xf7\xfd\x56\xdc\x11\xbf\xf1\xca\x67\x3c\
+\x06\x01\x31\xc0\x63\x1e\x02\x33\x3c\x22\x49\xc0\x32\xfa\x9d\x13\
+\x66\xaf\x41\x40\x54\x9e\xa9\xbe\x7c\x61\xe3\x40\x0a\x72\xb1\x55\
+\x98\x28\x33\x40\x61\x32\xb3\x01\xb0\xbc\x2d\xc0\x18\x63\x1b\xa0\
+\x7e\x49\xee\xc0\x4b\xb7\xac\x9e\xf7\xef\xea\x40\x50\x71\xa3\x37\
+\xe4\x2e\xa7\x40\x2c\xb8\x60\xb8\xfe\xc6\xc2\x40\x51\xc8\x31\x75\
+\xbd\x97\x6c\xc0\x3b\x25\x5d\xe3\x55\xb6\xc3\x40\x67\x7e\x28\x3a\
+\x2f\xcf\x04\xc0\x3d\x79\xfb\x74\x2a\xf4\x86\x40\x72\x00\xa4\xae\
+\xf2\x81\x95\x40\x3c\xfa\x8b\x66\xc9\x22\x30\x40\x68\x75\x84\x1e\
+\x7d\x6d\xd4\x40\x3d\xb5\xf8\x8b\xe7\x75\x6d\x40\x72\x7c\xb6\xc6\
+\x9a\xe9\x9a\x00\x00\x00\x10\x3f\xe4\x9d\xa9\x42\x5e\xe7\x43\xc0\
+\x63\x56\x3a\x89\xf9\xf5\x03\xc0\x1b\xb9\xb9\x7a\xc0\xda\x37\xc0\
+\x5a\x51\x6d\x68\xd6\x38\x91\xc0\x4f\xf0\xb8\xf8\x76\x60\x54\xc0\
+\x4f\xad\xc6\x15\x51\x43\xe4\x40\x41\x7d\xdd\x1f\xa6\x7e\x97\xc0\
+\x48\x29\x8c\x8c\x88\xc5\xd5\xc0\x4b\x19\x1c\xf8\xef\x04\xe9\x40\
+\x43\xa1\x52\x38\x86\xcc\xe1\xc0\x13\x11\x86\xaf\xfa\x18\xd1\x40\
+\x47\x64\x45\xcd\x84\x52\xf0\xc0\x5d\x6b\xc7\x4d\xed\xcd\x82\xc0\
+\x31\x79\xa5\x95\x16\x3c\x6c\xc0\x64\x78\xba\xa8\x85\x58\x74\xc0\
+\x48\x8e\x36\x95\x37\x4b\xa5\x40\x54\xcc\x34\x76\x69\xe8\x4e\x40\
+\x0b\x3e\xdf\x5f\x9e\x8d\xa3\x40\x60\x65\x54\x53\xc4\x38\x71\x40\
+\x40\x0c\xb3\x84\x9f\xd2\x9c\xc0\x50\xf6\x2c\x1c\x95\xbd\x9f\x40\
+\x4f\x3b\xb0\x51\x91\x96\x07\x3f\xf5\xb6\xbb\x4c\x89\xfb\xa7\x40\
+\x52\x40\x4d\xcb\x0f\x40\xae\xc0\x3e\x45\x9a\x76\x56\xfb\xac\x40\
+\x66\xc3\x4b\x9c\xe2\xcb\x0b\xc0\x3d\x73\xb5\x3b\x21\x32\xb6\x40\
+\x71\xa3\x97\xbc\x79\xdf\x84\x40\x3c\xd5\xf8\x27\x62\x64\x9d\x40\
+\x68\x6b\x6d\x0c\x69\x1b\x7e\x40\x3d\xb5\x37\x81\x76\xb1\xee\x40\
+\x72\x77\xa6\xa6\x21\xce\x5f\x00\x00\x00\x10\xbf\xe3\x54\xf9\xd1\
+\xc3\xbb\x96\xc0\x62\x39\x5d\x48\x40\x62\x61\xc0\x13\xa4\x40\xfe\
+\x23\x41\x66\xc0\x57\xfe\x9e\x7a\x5a\x8c\x65\xc0\x51\x53\x87\x2f\
+\x98\x9f\x2f\xc0\x50\xb1\x13\x00\xa7\xbf\x57\x40\x38\x4d\x1d\xa7\
+\x39\x9a\x03\xc0\x3f\x95\x6d\x6a\x72\xf6\x4d\xc0\x54\x45\x8b\x2f\
+\x57\x8e\x27\x40\x41\xd1\x53\x04\xab\x6e\xf7\xc0\x41\x24\x47\xc5\
+\x1a\x30\x9b\x40\x4a\x9d\x0a\xaa\x84\xfc\x0d\xc0\x61\x26\xda\xae\
+\x5a\xbe\x0d\xc0\x47\x87\xad\x31\xe6\x56\x49\xc0\x65\xf1\xab\xa2\
+\x9d\x71\x7a\xc0\x55\xef\x9f\x23\x26\xbf\xfd\x40\x44\x02\xa4\x34\
+\x49\x99\xb4\x40\x42\xad\xc5\x39\xfc\xc3\xc9\x40\x54\x77\x1a\x63\
+\x55\xdd\x55\x3f\xd2\x3b\x7b\x22\x6a\xd6\x1f\xc0\x58\xcf\x8d\xc1\
+\xb5\x07\x54\x40\x4b\xc2\x62\x63\xab\x19\x62\xc0\x40\xdb\xfa\x46\
+\x22\x87\x89\x40\x54\x09\x64\xf2\x9a\x80\x2a\xc0\x44\xeb\x29\x9a\
+\x2f\x94\x49\x40\x64\xe0\x36\x35\x4c\x3c\x43\xc0\x3e\x7e\x4a\x3b\
+\x7b\x99\xfd\x40\x70\xa7\xca\x20\xaa\x48\xd9\x40\x39\x90\x46\xa5\
+\x32\x46\xfc\x40\x67\xd4\xc0\x6c\x37\x15\xaa\x40\x3d\x93\xe0\x30\
+\xd5\xa0\xe6\x40\x72\x2b\x16\x2e\xda\x91\xd2\x00\x00\x00\x10\xbf\
+\xd7\x9d\xe7\xa1\x97\x39\xc0\xc0\x62\xbc\xd5\xa4\x38\x2b\x33\xc0\
+\x2b\x24\x07\xa2\xf7\xbc\x3a\xc0\x59\x6b\x39\x1d\x48\x8d\x2d\xc0\
+\x50\xfc\x22\x5d\x98\xd8\xe0\xc0\x4c\x3b\x80\x46\xaf\xdc\x40\x40\
+\x3f\xa3\xe1\x10\x37\xbc\x7c\xc0\x47\xa7\x33\xb0\x1d\xd6\x38\xc0\
+\x4a\x1a\x00\x9f\xcb\xe1\x48\x40\x46\xb3\xbc\xc6\xce\x1c\xfe\xc0\
+\x03\x4e\xc7\x08\x76\xc7\x1c\x40\x48\xfd\xf5\x33\x7e\x4b\x81\xc0\
+\x60\x62\xd0\x37\xd0\x3e\x25\xc0\x38\xa5\xfa\x53\xfc\x7a\x7d\xc0\
+\x64\x52\x8c\x8e\xde\xf0\x6d\xc0\x51\xb5\x7b\xf0\xe3\x85\x21\x40\
+\x52\x61\x8e\x3b\xeb\xd1\xde\x40\x23\x54\x72\x4d\x7e\x66\xb6\x40\
+\x5a\xc6\x30\x18\x78\x65\x5e\xc0\x41\x84\x35\xad\x81\xc8\x84\xc0\
+\x50\x1c\xe1\x3c\xef\x41\x96\x40\x51\x58\x7f\x41\x27\xa7\x22\x40\
+\x15\x04\xa4\x11\x8b\xa5\x4c\x40\x52\xf2\xe2\x10\x1d\xbe\x94\xc0\
+\x3a\xad\xdb\xf6\xe0\xcd\x29\x40\x67\x9e\xa8\x6e\xa4\x7f\x43\xc0\
+\x3d\xa4\xca\x4b\x1f\x0f\x46\x40\x72\x10\xa0\x16\xce\x0d\xd1\x40\
+\x3d\xed\xb9\x7b\x1d\xf5\x8a\x40\x68\xd7\xc6\xd6\xaf\x31\x50\x40\
+\x3d\xb4\xa6\x32\xb3\x72\x09\x40\x72\xad\xe2\x15\x3d\xe8\xd8\x00\
+\x00\x00\x10\xc0\x34\xf7\x01\x4a\xe8\x31\x37\xc0\x63\x08\xe7\x3c\
+\xd7\x52\x6e\xc0\x32\x87\x01\x16\xce\x22\x54\xc0\x59\x95\x8a\xc3\
+\xc9\x1c\xb8\xc0\x51\x35\xc9\xdc\xb0\xdf\xb7\xc0\x4a\x53\xba\xaa\
+\x59\xe9\x6d\x40\x3f\x27\xe3\x21\x77\x13\xbc\xc0\x4a\x03\x47\xa6\
+\x3c\x27\xd1\xc0\x46\x3c\x28\x27\x7d\x72\x7b\x40\x47\xbf\xcc\xb2\
+\x9b\x75\xf7\x40\x16\x1c\xbe\x7d\x45\x21\x89\x40\x47\xe9\x2b\xf5\
+\x69\xa9\x7a\xc0\x5e\xfa\xe4\x52\xe2\xee\x3d\xc0\x20\x9f\xc3\x12\
+\xc5\x03\x2a\xc0\x63\x2d\x67\xd4\x68\xd9\xd5\xc0\x4b\xe6\x04\xf7\
+\xc6\xd3\xb2\x40\x56\x9a\x17\x7f\xf0\x8a\x61\xc0\x2a\xde\xdc\xce\
+\x99\x86\xc2\x40\x5d\x35\xe2\x20\x89\xba\x10\xc0\x4f\x58\x95\x85\
+\x01\x84\xd4\xc0\x4b\x51\x42\xfa\x2b\xa5\xef\x40\x52\x1b\x84\x34\
+\xad\x36\xdf\x40\x2e\xba\x76\xa5\xb1\xb8\x45\x40\x52\x39\x02\x49\
+\xaa\x30\x3e\xc0\x37\xb9\x6f\x87\xfd\xd0\x77\x40\x68\x3e\xb5\xb9\
+\xe8\xcd\x8a\xc0\x3d\xdf\x2f\x40\x7a\xc8\xd0\x40\x72\x5e\x54\xd0\
+\xa5\x34\x44\x40\x3d\x8f\xfd\xe1\x90\x52\x8a\x40\x68\xaf\x88\xff\
+\xd8\xfc\x30\x40\x3d\xb4\x96\xe1\xc9\x47\x14\x40\x72\x99\xc3\xc3\
+\x16\xad\x07\x00\x00\x00\x10\xc0\x44\x1f\xc5\xb0\x8d\xff\xf8\xc0\
+\x62\xd7\xcc\xdb\x51\x37\xe9\xc0\x38\x70\x1f\x26\x3f\xdd\xd1\xc0\
+\x59\xd3\xca\x12\xd1\x6d\x66\xc0\x50\x9b\x5f\xdf\x54\x98\x82\xc0\
+\x47\x35\x38\xde\x3e\x59\xd1\x40\x40\x3a\x4b\xde\xb1\x11\x5e\xc0\
+\x4e\xa8\xe3\x73\xc2\x1e\x04\xc0\x3a\xcd\xa4\x3c\x9c\xa3\x4a\x40\
+\x48\x5e\xe9\xc8\x41\x4a\x06\x40\x36\xa3\x67\x5c\xdf\x00\x72\x40\
+\x44\xa5\x11\xd4\x30\xbb\xbe\xc0\x58\xc8\x06\xa1\x52\x29\xa4\x40\
+\x30\x47\xe1\xaa\x31\x64\x3e\xc0\x63\x5d\xb2\xe9\xcc\x7a\xe2\x40\
+\x29\xe9\x00\x97\x5b\x70\xaa\x40\x58\x50\x0c\x6f\xef\x08\x06\xc0\
+\x40\x80\xf5\x5f\x55\x35\x51\x40\x60\xea\x26\xcc\x19\xc3\x62\xc0\
+\x52\x7c\x87\x94\x54\x11\xcd\xc0\x40\x7b\x99\x9a\x58\x7d\x4e\x40\
+\x52\xbc\xf9\x47\x74\x9c\xd3\x40\x42\x20\x54\x4b\xe3\x87\xa0\x40\
+\x50\x21\x47\x81\x50\x58\x25\xc0\x35\xd8\x1b\x0b\x45\x8c\xdd\x40\
+\x68\xfb\x74\x42\x1b\x4c\x50\xc0\x3e\x4d\x9f\x09\xae\x3a\xcb\x40\
+\x72\xb9\xff\x8f\xad\x92\x5a\x40\x3d\x6b\xf8\x3a\xfe\x5b\xcc\x40\
+\x67\xb7\x76\x0a\x83\x1d\x2b\x40\x3d\xaf\x2e\x02\x24\x00\xa5\x40\
+\x72\x1d\xb9\x4a\x83\x5a\x36\x00\x00\x00\x10\xc0\x56\x21\x7b\x1a\
+\x2d\x27\x74\xc0\x5d\x7f\x81\xf7\x72\x97\xeb\xc0\x45\x6a\xce\x4b\
+\x4a\x59\x0e\xc0\x58\x6b\x98\xca\x1a\xce\x5b\xc0\x50\x79\x21\x8d\
+\x02\xed\x0a\xc0\x3e\xd5\xf2\x5c\x01\x40\xa0\x40\x38\x02\xd4\x2c\
+\x79\x7b\xb7\xc0\x52\xa7\xde\x66\xb0\xaa\x42\x3f\xd7\xb5\xe2\x7b\
+\x89\xa4\xca\x40\x48\x0f\x83\x05\x1a\x5b\x33\x40\x46\xa9\x42\x70\
+\x82\xf2\xfc\x40\x3a\x3a\x42\xb9\x85\x37\x29\xc0\x54\xe2\xc5\x27\
+\x1d\x51\x6a\x40\x42\xd1\x7b\x2a\xa1\x08\x15\xc0\x61\x0b\x0a\x8b\
+\x23\x7a\xc0\x40\x33\x47\x9a\x49\x82\xe6\x81\x40\x57\xac\xeb\x9b\
+\x79\x30\xfa\xc0\x53\x13\x15\xe5\x3e\x1d\x05\x40\x60\x43\xab\x51\
+\xbf\x87\xef\xc0\x5d\xe3\x5c\x69\xf3\x2d\x89\x40\x02\x9d\x80\x74\
+\x60\xb9\xea\x40\x52\xbe\x74\x1e\x0d\x17\x2d\x40\x50\x50\x9b\xe2\
+\xa5\xba\x4e\x40\x46\x29\x92\xd8\xeb\x51\xb2\xc0\x32\x67\x07\xb9\
+\x5f\xcb\x99\x40\x68\xd4\xcc\x9f\x63\x2f\x21\xc0\x3e\x08\x79\x67\
+\x07\x43\x5b\x40\x72\xa1\x8d\xaf\x2d\x86\xe8\x40\x43\x38\x54\x39\
+\x89\x5f\xf6\x40\x64\xda\x52\xe8\xbe\xbd\x10\x40\x3e\xaa\x65\xda\
+\xb3\xd9\xcf\x40\x70\xaa\x52\xf4\x99\xff\x0c\
+\x00\x00\x01\x0c\
+\xff\
+\xff\xff\xff\x00\x00\x00\x01\x00\x00\x00\x10\xc0\x72\x75\xd0\xbc\
+\x4a\x7e\x3b\x40\x6e\xa8\x3a\x76\xcc\x4a\x4f\xc0\x6e\xc4\x15\x8d\
+\xdb\x8a\x81\x40\x6d\x91\x95\x4a\xaf\x90\x71\xc0\x69\x4c\xfe\x50\
+\x6c\x77\x6e\x40\x72\x41\xf5\x29\xa3\x44\xca\xc0\x67\xd1\xbb\x6b\
+\x66\xf4\xfc\x40\x68\x1a\x7c\x41\xab\x27\xf0\xc0\x59\x09\x41\xf0\
+\xd6\x29\x49\x40\x71\x72\x68\x78\x60\x60\x84\xc0\x57\x8e\x4b\x36\
+\x5e\x8b\x6f\x40\x6c\xb0\x0b\xce\x10\xc5\x22\xc0\x70\xf5\x12\xcb\
+\xa7\x78\x95\x40\x71\x44\x4e\x7a\x50\x85\x9f\xc0\x74\x72\x66\x5a\
+\x1e\x1b\xae\x40\x71\x17\xf1\xe4\xf6\x7f\x7e\xc0\x64\x2e\x57\x5b\
+\xe3\x6f\x6c\x40\x70\x14\x53\x5e\x5b\x6a\x7a\xc0\x60\x2d\xc9\x35\
+\x26\xaf\xd0\x40\x72\xf1\x84\xb6\xf0\xd8\xae\xc0\x53\x20\x21\x2d\
+\x64\x5b\xb3\x40\x72\x40\xa0\x97\xbf\x55\x8f\xc0\x51\x0d\xcf\x0f\
+\x1b\x48\x3c\x40\x6b\xd1\x05\xa8\x2a\xdf\x62\x40\x44\x77\x7b\xec\
+\x05\x04\x13\x40\x6f\x01\xfc\x1b\x65\x69\x69\x40\x61\x21\xf2\x32\
+\xa1\xd8\xd9\x40\x71\x41\x25\x0f\x44\xd0\xa8\x40\x4c\x88\xe7\x4e\
+\xbb\xeb\xb8\x40\x6c\x7b\xe4\x15\x28\x7a\x0a\x40\x62\x87\x8c\xab\
+\xb5\x95\xf1\x40\x70\xd4\x4b\x4c\x03\x9d\x83\
+"
+
+qt_resource_name = b"\
+\x00\x0a\
+\x03\x88\x10\x53\
+\x00\x61\
+\x00\x6e\x00\x69\x00\x6d\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x73\
+\x00\x08\
+\x0f\x03\x25\x67\
+\x00\x63\
+\x00\x68\x00\x69\x00\x6c\x00\x6c\x00\x69\x00\x6e\x00\x67\
+\x00\x07\
+\x01\xc4\x70\xa7\
+\x00\x6a\
+\x00\x75\x00\x6d\x00\x70\x00\x69\x00\x6e\x00\x67\
+\x00\x07\
+\x0a\x84\xa0\x87\
+\x00\x64\
+\x00\x61\x00\x6e\x00\x63\x00\x69\x00\x6e\x00\x67\
+\x00\x04\
+\x00\x06\xab\x74\
+\x00\x64\
+\x00\x65\x00\x61\x00\x64\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x02\
+\x00\x00\x00\x58\x00\x00\x00\x00\x00\x01\x00\x00\x27\xc0\
+\x00\x00\x00\x30\x00\x00\x00\x00\x00\x01\x00\x00\x19\x70\
+\x00\x00\x00\x44\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x90\
+\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/dbus/chat/chat.py b/examples/dbus/chat/chat.py
new file mode 100755
index 0000000..d1065cd
--- /dev/null
+++ b/examples/dbus/chat/chat.py
@@ -0,0 +1,200 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, Q_CLASSINFO
+from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow, QMessageBox
+from PyQt5.QtDBus import (QDBusAbstractAdaptor, QDBusAbstractInterface,
+        QDBusConnection, QDBusMessage)
+
+from ui_chatmainwindow import Ui_ChatMainWindow
+from ui_chatsetnickname import Ui_NicknameDialog
+
+
+class ChatAdaptor(QDBusAbstractAdaptor):
+
+    Q_CLASSINFO("D-Bus Interface", 'org.example.chat')
+
+    Q_CLASSINFO("D-Bus Introspection", ''
+        '  <interface name="org.example.chat">\n'
+        '    <signal name="message">\n'
+        '      <arg direction="out" type="s" name="nickname"/>\n'
+        '      <arg direction="out" type="s" name="text"/>\n'
+        '    </signal>\n'
+        '    <signal name="action">\n'
+        '      <arg direction="out" type="s" name="nickname"/>\n'
+        '      <arg direction="out" type="s" name="text"/>\n'
+        '    </signal>\n'
+        '  </interface>\n'
+        '')
+
+    action = pyqtSignal(str, str)
+
+    message = pyqtSignal(str, str)
+
+    def __init__(self, parent):
+        super(ChatAdaptor, self).__init__(parent)
+
+        self.setAutoRelaySignals(True)
+
+
+class ChatInterface(QDBusAbstractInterface):
+
+    action = pyqtSignal(str, str)
+
+    message = pyqtSignal(str, str)
+
+    def __init__(self, service, path, connection, parent=None):
+        super(ChatInterface, self).__init__(service, path, 'org.example.chat',
+                connection, parent)
+
+
+class ChatMainWindow(QMainWindow, Ui_ChatMainWindow):
+
+    action = pyqtSignal(str, str)
+
+    message = pyqtSignal(str, str)
+
+    def __init__(self):
+        super(ChatMainWindow, self).__init__()
+
+        self.m_nickname = "nickname"
+        self.m_messages = []
+
+        self.setupUi(self)
+        self.sendButton.setEnabled(False)
+
+        self.messageLineEdit.textChanged.connect(self.textChangedSlot)
+        self.sendButton.clicked.connect(self.sendClickedSlot)
+        self.actionChangeNickname.triggered.connect(self.changeNickname)
+        self.actionAboutQt.triggered.connect(self.aboutQt)
+        QApplication.instance().lastWindowClosed.connect(self.exiting)
+
+        # Add our D-Bus interface and connect to D-Bus.
+        ChatAdaptor(self)
+        QDBusConnection.sessionBus().registerObject('/', self)
+
+        iface = ChatInterface('', '', QDBusConnection.sessionBus(), self)
+        QDBusConnection.sessionBus().connect('', '', 'org.example.chat',
+                'message', self.messageSlot)
+        iface.action.connect(self.actionSlot)
+
+        dialog = NicknameDialog()
+        dialog.cancelButton.setVisible(False)
+        dialog.exec_()
+        self.m_nickname = dialog.nickname.text().strip()
+        self.action.emit(self.m_nickname, "joins the chat")
+
+    def rebuildHistory(self):
+        history = '\n'.join(self.m_messages)
+        self.chatHistory.setPlainText(history)
+
+    @pyqtSlot(str, str)
+    def messageSlot(self, nickname, text):
+        self.m_messages.append("<%s> %s" % (nickname, text))
+
+        if len(self.m_messages) > 100:
+            self.m_messages.pop(0)
+
+        self.rebuildHistory()
+
+    @pyqtSlot(str, str)
+    def actionSlot(self, nickname, text):
+        self.m_messages.append("* %s %s" % (nickname, text))
+
+        if len(self.m_messages) > 100:
+            self.m_messages.pop(0)
+
+        self.rebuildHistory()
+
+    @pyqtSlot(str)
+    def textChangedSlot(self, newText):
+        self.sendButton.setEnabled(newText != '')
+
+    @pyqtSlot()
+    def sendClickedSlot(self):
+        msg = QDBusMessage.createSignal('/', 'org.example.chat', 'message')
+        msg << self.m_nickname << self.messageLineEdit.text()
+        QDBusConnection.sessionBus().send(msg)
+        self.messageLineEdit.setText('')
+
+    @pyqtSlot()
+    def changeNickname(self):
+        dialog = NicknameDialog(self)
+
+        if dialog.exec_() == QDialog.Accepted:
+            old = self.m_nickname
+            self.m_nickname = dialog.nickname.text().strip()
+            self.action.emit(old, "is now known as %s" % self.m_nickname)
+
+    @pyqtSlot()
+    def aboutQt(self):
+        QMessageBox.aboutQt(self)
+
+    @pyqtSlot()
+    def exiting(self):
+        self.action.emit(self.m_nickname, "leaves the chat")
+
+
+class NicknameDialog(QDialog, Ui_NicknameDialog):
+
+    def __init__(self, parent=None):
+        super(NicknameDialog, self).__init__(parent)
+
+        self.setupUi(self)
+
+
+if __name__ == '__main__':
+    import sys
+
+    app = QApplication(sys.argv)
+
+    if not QDBusConnection.sessionBus().isConnected():
+        sys.stderr.write("Cannot connect to the D-Bus session bus.\n"
+                "Please check your system settings and try again.\n")
+        sys.exit(1)
+
+    chat = ChatMainWindow()
+    chat.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/dbus/chat/chatmainwindow.ui b/examples/dbus/chat/chatmainwindow.ui
new file mode 100644
index 0000000..537bad5
--- /dev/null
+++ b/examples/dbus/chat/chatmainwindow.ui
@@ -0,0 +1,185 @@
+<ui version="4.0" >
+ <author></author>
+ <comment></comment>
+ <exportmacro></exportmacro>
+ <class>ChatMainWindow</class>
+ <widget class="QMainWindow" name="ChatMainWindow" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>800</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Qt D-Bus Chat</string>
+  </property>
+  <widget class="QWidget" name="centralwidget" >
+   <layout class="QHBoxLayout" >
+    <property name="margin" >
+     <number>9</number>
+    </property>
+    <property name="spacing" >
+     <number>6</number>
+    </property>
+    <item>
+     <layout class="QVBoxLayout" >
+      <property name="margin" >
+       <number>0</number>
+      </property>
+      <property name="spacing" >
+       <number>6</number>
+      </property>
+      <item>
+       <widget class="QTextBrowser" name="chatHistory" >
+        <property name="acceptDrops" >
+         <bool>false</bool>
+        </property>
+        <property name="toolTip" >
+         <string>Messages sent and received from other users</string>
+        </property>
+        <property name="acceptRichText" >
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" >
+        <property name="margin" >
+         <number>0</number>
+        </property>
+        <property name="spacing" >
+         <number>6</number>
+        </property>
+        <item>
+         <widget class="QLabel" name="label" >
+          <property name="text" >
+           <string>Message:</string>
+          </property>
+          <property name="buddy" >
+           <cstring>messageLineEdit</cstring>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="messageLineEdit" />
+        </item>
+        <item>
+         <widget class="QPushButton" name="sendButton" >
+          <property name="sizePolicy" >
+           <sizepolicy>
+            <hsizetype>1</hsizetype>
+            <vsizetype>0</vsizetype>
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="toolTip" >
+           <string>Sends a message to other people</string>
+          </property>
+          <property name="whatsThis" >
+           <string/>
+          </property>
+          <property name="text" >
+           <string>Send</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menubar" >
+   <property name="geometry" >
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>800</width>
+     <height>31</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menuQuit" >
+    <property name="title" >
+     <string>Help</string>
+    </property>
+    <addaction name="actionAboutQt" />
+   </widget>
+   <widget class="QMenu" name="menuFile" >
+    <property name="title" >
+     <string>File</string>
+    </property>
+    <addaction name="actionChangeNickname" />
+    <addaction name="separator" />
+    <addaction name="actionQuit" />
+   </widget>
+   <addaction name="menuFile" />
+   <addaction name="menuQuit" />
+  </widget>
+  <widget class="QStatusBar" name="statusbar" />
+  <action name="actionQuit" >
+   <property name="text" >
+    <string>Quit</string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+Q</string>
+   </property>
+  </action>
+  <action name="actionAboutQt" >
+   <property name="text" >
+    <string>About Qt...</string>
+   </property>
+  </action>
+  <action name="actionChangeNickname" >
+   <property name="text" >
+    <string>Change nickname...</string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+N</string>
+   </property>
+  </action>
+ </widget>
+ <pixmapfunction></pixmapfunction>
+ <tabstops>
+  <tabstop>chatHistory</tabstop>
+  <tabstop>messageLineEdit</tabstop>
+  <tabstop>sendButton</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>messageLineEdit</sender>
+   <signal>returnPressed()</signal>
+   <receiver>sendButton</receiver>
+   <slot>animateClick()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>299</x>
+     <y>554</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>744</x>
+     <y>551</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>actionQuit</sender>
+   <signal>triggered(bool)</signal>
+   <receiver>ChatMainWindow</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>399</x>
+     <y>299</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/examples/dbus/chat/chatsetnickname.ui b/examples/dbus/chat/chatsetnickname.ui
new file mode 100644
index 0000000..fb9894e
--- /dev/null
+++ b/examples/dbus/chat/chatsetnickname.ui
@@ -0,0 +1,149 @@
+<ui version="4.0" >
+ <author></author>
+ <comment></comment>
+ <exportmacro></exportmacro>
+ <class>NicknameDialog</class>
+ <widget class="QDialog" name="NicknameDialog" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>396</width>
+    <height>105</height>
+   </rect>
+  </property>
+  <property name="sizePolicy" >
+   <sizepolicy>
+    <hsizetype>1</hsizetype>
+    <vsizetype>1</vsizetype>
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle" >
+   <string>Set nickname</string>
+  </property>
+  <layout class="QVBoxLayout" >
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item>
+    <layout class="QVBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label" >
+       <property name="sizePolicy" >
+        <sizepolicy>
+         <hsizetype>1</hsizetype>
+         <vsizetype>1</vsizetype>
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text" >
+        <string>New nickname:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="nickname" />
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item>
+      <spacer>
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" >
+        <size>
+         <width>131</width>
+         <height>31</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="okButton" >
+       <property name="text" >
+        <string>OK</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="cancelButton" >
+       <property name="text" >
+        <string>Cancel</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer>
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" >
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <pixmapfunction></pixmapfunction>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>okButton</sender>
+   <signal>clicked()</signal>
+   <receiver>NicknameDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>278</x>
+     <y>253</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>96</x>
+     <y>254</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>cancelButton</sender>
+   <signal>clicked()</signal>
+   <receiver>NicknameDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>369</x>
+     <y>253</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>179</x>
+     <y>282</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/examples/dbus/chat/ui_chatmainwindow.py b/examples/dbus/chat/ui_chatmainwindow.py
new file mode 100644
index 0000000..db629df
--- /dev/null
+++ b/examples/dbus/chat/ui_chatmainwindow.py
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'chatmainwindow.ui'
+#
+# Created: Fri Jul 26 06:48:06 2013
+#      by: PyQt5 UI code generator 5.0.1-snapshot-2a99e59669ee
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_ChatMainWindow(object):
+    def setupUi(self, ChatMainWindow):
+        ChatMainWindow.setObjectName("ChatMainWindow")
+        ChatMainWindow.resize(800, 600)
+        self.centralwidget = QtWidgets.QWidget(ChatMainWindow)
+        self.centralwidget.setObjectName("centralwidget")
+        self.hboxlayout = QtWidgets.QHBoxLayout(self.centralwidget)
+        self.hboxlayout.setContentsMargins(9, 9, 9, 9)
+        self.hboxlayout.setSpacing(6)
+        self.hboxlayout.setObjectName("hboxlayout")
+        self.vboxlayout = QtWidgets.QVBoxLayout()
+        self.vboxlayout.setContentsMargins(0, 0, 0, 0)
+        self.vboxlayout.setSpacing(6)
+        self.vboxlayout.setObjectName("vboxlayout")
+        self.chatHistory = QtWidgets.QTextBrowser(self.centralwidget)
+        self.chatHistory.setAcceptDrops(False)
+        self.chatHistory.setAcceptRichText(True)
+        self.chatHistory.setObjectName("chatHistory")
+        self.vboxlayout.addWidget(self.chatHistory)
+        self.hboxlayout1 = QtWidgets.QHBoxLayout()
+        self.hboxlayout1.setContentsMargins(0, 0, 0, 0)
+        self.hboxlayout1.setSpacing(6)
+        self.hboxlayout1.setObjectName("hboxlayout1")
+        self.label = QtWidgets.QLabel(self.centralwidget)
+        self.label.setObjectName("label")
+        self.hboxlayout1.addWidget(self.label)
+        self.messageLineEdit = QtWidgets.QLineEdit(self.centralwidget)
+        self.messageLineEdit.setObjectName("messageLineEdit")
+        self.hboxlayout1.addWidget(self.messageLineEdit)
+        self.sendButton = QtWidgets.QPushButton(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy(1), QtWidgets.QSizePolicy.Policy(0))
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.sendButton.sizePolicy().hasHeightForWidth())
+        self.sendButton.setSizePolicy(sizePolicy)
+        self.sendButton.setWhatsThis("")
+        self.sendButton.setObjectName("sendButton")
+        self.hboxlayout1.addWidget(self.sendButton)
+        self.vboxlayout.addLayout(self.hboxlayout1)
+        self.hboxlayout.addLayout(self.vboxlayout)
+        ChatMainWindow.setCentralWidget(self.centralwidget)
+        self.menubar = QtWidgets.QMenuBar(ChatMainWindow)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 31))
+        self.menubar.setObjectName("menubar")
+        self.menuQuit = QtWidgets.QMenu(self.menubar)
+        self.menuQuit.setObjectName("menuQuit")
+        self.menuFile = QtWidgets.QMenu(self.menubar)
+        self.menuFile.setObjectName("menuFile")
+        ChatMainWindow.setMenuBar(self.menubar)
+        self.statusbar = QtWidgets.QStatusBar(ChatMainWindow)
+        self.statusbar.setObjectName("statusbar")
+        ChatMainWindow.setStatusBar(self.statusbar)
+        self.actionQuit = QtWidgets.QAction(ChatMainWindow)
+        self.actionQuit.setObjectName("actionQuit")
+        self.actionAboutQt = QtWidgets.QAction(ChatMainWindow)
+        self.actionAboutQt.setObjectName("actionAboutQt")
+        self.actionChangeNickname = QtWidgets.QAction(ChatMainWindow)
+        self.actionChangeNickname.setObjectName("actionChangeNickname")
+        self.menuQuit.addAction(self.actionAboutQt)
+        self.menuFile.addAction(self.actionChangeNickname)
+        self.menuFile.addSeparator()
+        self.menuFile.addAction(self.actionQuit)
+        self.menubar.addAction(self.menuFile.menuAction())
+        self.menubar.addAction(self.menuQuit.menuAction())
+        self.label.setBuddy(self.messageLineEdit)
+
+        self.retranslateUi(ChatMainWindow)
+        self.messageLineEdit.returnPressed.connect(self.sendButton.animateClick)
+        self.actionQuit.triggered['bool'].connect(ChatMainWindow.close)
+        QtCore.QMetaObject.connectSlotsByName(ChatMainWindow)
+        ChatMainWindow.setTabOrder(self.chatHistory, self.messageLineEdit)
+        ChatMainWindow.setTabOrder(self.messageLineEdit, self.sendButton)
+
+    def retranslateUi(self, ChatMainWindow):
+        _translate = QtCore.QCoreApplication.translate
+        ChatMainWindow.setWindowTitle(_translate("ChatMainWindow", "Qt D-Bus Chat"))
+        self.chatHistory.setToolTip(_translate("ChatMainWindow", "Messages sent and received from other users"))
+        self.label.setText(_translate("ChatMainWindow", "Message:"))
+        self.sendButton.setToolTip(_translate("ChatMainWindow", "Sends a message to other people"))
+        self.sendButton.setText(_translate("ChatMainWindow", "Send"))
+        self.menuQuit.setTitle(_translate("ChatMainWindow", "Help"))
+        self.menuFile.setTitle(_translate("ChatMainWindow", "File"))
+        self.actionQuit.setText(_translate("ChatMainWindow", "Quit"))
+        self.actionQuit.setShortcut(_translate("ChatMainWindow", "Ctrl+Q"))
+        self.actionAboutQt.setText(_translate("ChatMainWindow", "About Qt..."))
+        self.actionChangeNickname.setText(_translate("ChatMainWindow", "Change nickname..."))
+        self.actionChangeNickname.setShortcut(_translate("ChatMainWindow", "Ctrl+N"))
+
diff --git a/examples/dbus/chat/ui_chatsetnickname.py b/examples/dbus/chat/ui_chatsetnickname.py
new file mode 100644
index 0000000..93e1c0a
--- /dev/null
+++ b/examples/dbus/chat/ui_chatsetnickname.py
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'chatsetnickname.ui'
+#
+# Created: Fri Jul 26 06:48:20 2013
+#      by: PyQt5 UI code generator 5.0.1-snapshot-2a99e59669ee
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_NicknameDialog(object):
+    def setupUi(self, NicknameDialog):
+        NicknameDialog.setObjectName("NicknameDialog")
+        NicknameDialog.resize(396, 105)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy(1), QtWidgets.QSizePolicy.Policy(1))
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(NicknameDialog.sizePolicy().hasHeightForWidth())
+        NicknameDialog.setSizePolicy(sizePolicy)
+        self.vboxlayout = QtWidgets.QVBoxLayout(NicknameDialog)
+        self.vboxlayout.setContentsMargins(9, 9, 9, 9)
+        self.vboxlayout.setSpacing(6)
+        self.vboxlayout.setObjectName("vboxlayout")
+        self.vboxlayout1 = QtWidgets.QVBoxLayout()
+        self.vboxlayout1.setContentsMargins(0, 0, 0, 0)
+        self.vboxlayout1.setSpacing(6)
+        self.vboxlayout1.setObjectName("vboxlayout1")
+        self.label = QtWidgets.QLabel(NicknameDialog)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy(1), QtWidgets.QSizePolicy.Policy(1))
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
+        self.label.setSizePolicy(sizePolicy)
+        self.label.setObjectName("label")
+        self.vboxlayout1.addWidget(self.label)
+        self.nickname = QtWidgets.QLineEdit(NicknameDialog)
+        self.nickname.setObjectName("nickname")
+        self.vboxlayout1.addWidget(self.nickname)
+        self.vboxlayout.addLayout(self.vboxlayout1)
+        self.hboxlayout = QtWidgets.QHBoxLayout()
+        self.hboxlayout.setContentsMargins(0, 0, 0, 0)
+        self.hboxlayout.setSpacing(6)
+        self.hboxlayout.setObjectName("hboxlayout")
+        spacerItem = QtWidgets.QSpacerItem(131, 31, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.hboxlayout.addItem(spacerItem)
+        self.okButton = QtWidgets.QPushButton(NicknameDialog)
+        self.okButton.setObjectName("okButton")
+        self.hboxlayout.addWidget(self.okButton)
+        self.cancelButton = QtWidgets.QPushButton(NicknameDialog)
+        self.cancelButton.setObjectName("cancelButton")
+        self.hboxlayout.addWidget(self.cancelButton)
+        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.hboxlayout.addItem(spacerItem1)
+        self.vboxlayout.addLayout(self.hboxlayout)
+
+        self.retranslateUi(NicknameDialog)
+        self.okButton.clicked.connect(NicknameDialog.accept)
+        self.cancelButton.clicked.connect(NicknameDialog.reject)
+        QtCore.QMetaObject.connectSlotsByName(NicknameDialog)
+
+    def retranslateUi(self, NicknameDialog):
+        _translate = QtCore.QCoreApplication.translate
+        NicknameDialog.setWindowTitle(_translate("NicknameDialog", "Set nickname"))
+        self.label.setText(_translate("NicknameDialog", "New nickname:"))
+        self.okButton.setText(_translate("NicknameDialog", "OK"))
+        self.cancelButton.setText(_translate("NicknameDialog", "Cancel"))
+
diff --git a/examples/dbus/listnames.py b/examples/dbus/listnames.py
new file mode 100755
index 0000000..0333fba
--- /dev/null
+++ b/examples/dbus/listnames.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import QCoreApplication
+from PyQt5.QtDBus import QDBusConnection, QDBusInterface
+
+
+def method1():
+    sys.stdout.write("Method 1:\n")
+
+    reply = QDBusConnection.sessionBus().interface().registeredServiceNames()
+    if not reply.isValid():
+        sys.stdout.write("Error: %s\n" % reply.error().message())
+        sys.exit(1)
+
+    # Mimic the output from the C++ version.
+    for name in reply.value():
+        sys.stdout.write('"%s"\n' % name)
+
+
+def method2():
+    sys.stdout.write("Method 2:\n")
+
+    bus = QDBusConnection.sessionBus()
+    dbus_iface = QDBusInterface('org.freedesktop.DBus',
+            '/org/freedesktop/DBus', 'org.freedesktop.DBus', bus)
+    names = dbus_iface.call('ListNames').arguments()[0]
+
+    # Mimic the output from the C++ version.
+    sys.stdout.write('QVariant(QStringList, ("%s") )\n' % '", "'.join(names))
+
+
+def method3():
+    sys.stdout.write("Method 3:\n")
+
+    names = QDBusConnection.sessionBus().interface().registeredServiceNames().value()
+
+    # Mimic the output from the C++ version.
+    sys.stdout.write('("%s")\n' % '", "'.join(names))
+
+
+if __name__ == '__main__':
+    app = QCoreApplication(sys.argv)
+
+    if not QDBusConnection.sessionBus().isConnected():
+        sys.stderr.write("Cannot connect to the D-Bus session bus.\n"
+                "To start it, run:\n"
+                "\teval `dbus-launch --auto-syntax`\n");
+        sys.exit(1)
+
+    method1()
+    method2()
+    method3()
+
+    sys.exit()
diff --git a/examples/dbus/pingpong/ping.py b/examples/dbus/pingpong/ping.py
new file mode 100644
index 0000000..01fc788
--- /dev/null
+++ b/examples/dbus/pingpong/ping.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import QCoreApplication
+from PyQt5.QtDBus import QDBusConnection, QDBusInterface, QDBusReply
+
+
+if __name__ == '__main__':
+    app = QCoreApplication(sys.argv)
+
+    if not QDBusConnection.sessionBus().isConnected():
+        sys.stderr.write("Cannot connect to the D-Bus session bus.\n"
+                "To start it, run:\n"
+                "\teval `dbus-launch --auto-syntax`\n");
+        sys.exit(1)
+
+    iface = QDBusInterface('org.example.QtDBus.PingExample', '/', '',
+            QDBusConnection.sessionBus())
+
+    if iface.isValid():
+        msg = iface.call('ping', sys.argv[1] if len(sys.argv) > 1 else "")
+        reply = QDBusReply(msg)
+
+        if reply.isValid():
+            sys.stdout.write("Reply was: %s\n" % reply.value())
+            sys.exit()
+
+        sys.stderr.write("Call failed: %s\n" % reply.error().message())
+        sys.exit(1)
+
+    sys.stderr.write("%s\n" % QDBusConnection.sessionBus().lastError().message())
+    sys.exit(1)
diff --git a/examples/dbus/pingpong/pong.py b/examples/dbus/pingpong/pong.py
new file mode 100644
index 0000000..fc94d93
--- /dev/null
+++ b/examples/dbus/pingpong/pong.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import pyqtSlot, QCoreApplication, QMetaObject, QObject
+from PyQt5.QtDBus import QDBusConnection
+
+
+class Pong(QObject):
+
+    @pyqtSlot(str, result=str)
+    def ping(self, arg):
+        QMetaObject.invokeMethod(QCoreApplication.instance(), 'quit')
+
+        return "ping(\"%s\") got called" % arg
+
+
+if __name__ == '__main__':
+    app = QCoreApplication(sys.argv)
+
+    if not QDBusConnection.sessionBus().isConnected():
+        sys.stderr.write("Cannot connect to the D-Bus session bus.\n"
+                "To start it, run:\n"
+                "\teval `dbus-launch --auto-syntax`\n");
+        sys.exit(1)
+
+    if not QDBusConnection.sessionBus().registerService('org.example.QtDBus.PingExample'):
+        sys.stderr.write("%s\n" % QDBusConnection.sessionBus().lastError().message())
+        sys.exit(1)
+
+    pong = Pong()
+    QDBusConnection.sessionBus().registerObject('/', pong,
+            QDBusConnection.ExportAllSlots)
+
+    sys.exit(app.exec_())
diff --git a/examples/dbus/remotecontrolledcar/car/car.py b/examples/dbus/remotecontrolledcar/car/car.py
new file mode 100755
index 0000000..0e26333
--- /dev/null
+++ b/examples/dbus/remotecontrolledcar/car/car.py
@@ -0,0 +1,198 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import pyqtSlot, Q_CLASSINFO, QRectF, Qt
+from PyQt5.QtGui import QBrush, QPainter, QTransform
+from PyQt5.QtWidgets import (QApplication, QGraphicsItem, QGraphicsObject,
+        QGraphicsScene, QGraphicsView)
+from PyQt5.QtDBus import QDBusAbstractAdaptor, QDBusConnection
+
+
+class Car(QGraphicsObject):
+
+    def __init__(self):
+        super(Car, self).__init__()
+
+        self.color = QBrush(Qt.green)
+        self.wheelsAngle = 0.0
+        self.speed = 0.0
+
+        self.startTimer(1000 // 33)
+        self.setFlag(QGraphicsItem.ItemIsMovable, True)
+        self.setFlag(QGraphicsItem.ItemIsFocusable, True)
+
+    def accelerate(self):
+        if self.speed < 10:
+            self.speed += 1
+
+    def decelerate(self):
+        if self.speed > -10:
+            self.speed -= 1
+
+    def turnLeft(self):
+        if self.wheelsAngle > -30:
+            self.wheelsAngle -= 5
+
+    def turnRight(self):
+        if self.wheelsAngle < 30:
+            self.wheelsAngle += 5
+
+    def boundingRect(self):
+        return QRectF(-35, -81, 70, 115)
+
+    def timerEvent(self, event):
+        axelDistance = 54.0
+        wheelsAngleRads = (self.wheelsAngle * math.pi) / 180
+        turnDistance = math.cos(wheelsAngleRads) * axelDistance * 2
+        turnRateRads = wheelsAngleRads / turnDistance
+        turnRate = (turnRateRads * 180) / math.pi
+        rotation = self.speed * turnRate
+
+        self.setTransform(QTransform().rotate(rotation), True)
+        self.setTransform(QTransform.fromTranslate(0, -self.speed), True)
+        self.update()
+
+    def paint(self, painter, option, widget):
+        painter.setBrush(Qt.gray)
+        painter.drawRect(-20, -58, 40, 2)       # Front axel
+        painter.drawRect(-20, 7, 40, 2)         # Rear axel
+
+        painter.setBrush(self.color)
+        painter.drawRect(-25, -79, 50, 10)      # Front wing
+
+        painter.drawEllipse(-25, -48, 50, 20)   # Side pods
+        painter.drawRect(-25, -38, 50, 35)      # Side pods
+        painter.drawRect(-5, 9, 10, 10)         # Back pod
+
+        painter.drawEllipse(-10, -81, 20, 100)  # Main body
+
+        painter.drawRect(-17, 19, 34, 15)       # Rear wing
+
+        painter.setBrush(Qt.black)
+        painter.drawPie(-5, -51, 10, 15, 0, 180 * 16)
+        painter.drawRect(-5, -44, 10, 10)       # Cockpit
+
+        painter.save()
+        painter.translate(-20, -58)
+        painter.rotate(self.wheelsAngle)
+        painter.drawRect(-10, -7, 10, 15)       # Front left
+        painter.restore()
+
+        painter.save()
+        painter.translate(20, -58)
+        painter.rotate(self.wheelsAngle)
+        painter.drawRect(0, -7, 10, 15)         # Front right
+        painter.restore()
+
+        painter.drawRect(-30, 0, 12, 17)        # Rear left
+        painter.drawRect(19, 0, 12, 17)         # Rear right
+
+
+class CarInterfaceAdaptor(QDBusAbstractAdaptor):
+
+    Q_CLASSINFO("D-Bus Interface", 'org.example.Examples.CarInterface')
+
+    Q_CLASSINFO("D-Bus Introspection", ''
+            '  <interface name="org.example.Examples.CarInterface">\n'
+            '    <method name="accelerate"/>\n'
+            '    <method name="decelerate"/>\n'
+            '    <method name="turnLeft"/>\n'
+            '    <method name="turnRight"/>\n'
+            '  </interface>\n'
+            '')
+
+    def __init__(self, parent):
+        super(CarInterfaceAdaptor, self).__init__(parent)
+
+        self.setAutoRelaySignals(True)
+
+    @pyqtSlot()
+    def accelerate(self):
+        self.parent().accelerate()
+
+    @pyqtSlot()
+    def decelerate(self):
+        self.parent().decelerate()
+
+    @pyqtSlot()
+    def turnLeft(self):
+        self.parent().turnLeft()
+
+    @pyqtSlot()
+    def turnRight(self):
+        self.parent().turnRight()
+
+
+if __name__ == '__main__':
+    import sys
+
+    app = QApplication(sys.argv)
+
+    scene = QGraphicsScene()
+    scene.setSceneRect(-500, -500, 1000, 1000)
+    scene.setItemIndexMethod(QGraphicsScene.NoIndex)
+
+    car = Car()
+    scene.addItem(car)
+
+    view = QGraphicsView(scene)
+    view.setRenderHint(QPainter.Antialiasing)
+    view.setBackgroundBrush(Qt.darkGray)
+    view.setWindowTitle("Qt DBus Controlled Car")
+    view.resize(400, 300)
+    view.show()
+
+    a = CarInterfaceAdaptor(car)
+    connection = QDBusConnection.sessionBus()
+    connection.registerObject('/Car', car)
+    connection.registerService('org.example.CarExample')
+
+    rc = app.exec_()
+
+    # Make sure things get destroyed in the right order.
+    del view
+
+    sys.exit(rc)
diff --git a/examples/dbus/remotecontrolledcar/controller/controller.py b/examples/dbus/remotecontrolledcar/controller/controller.py
new file mode 100755
index 0000000..cea7726
--- /dev/null
+++ b/examples/dbus/remotecontrolledcar/controller/controller.py
@@ -0,0 +1,111 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtWidgets import QApplication, QWidget
+from PyQt5.QtDBus import QDBusAbstractInterface, QDBusConnection
+
+from ui_controller import Ui_Controller
+
+
+class CarInterface(QDBusAbstractInterface):
+
+    def __init__(self, service, path, connection, parent=None):
+        super(CarInterface, self).__init__(service, path,
+                'org.example.Examples.CarInterface', connection, parent)
+
+    def accelerate(self):
+        self.asyncCall('accelerate')
+
+    def decelerate(self):
+        self.asyncCall('decelerate')
+
+    def turnLeft(self):
+        self.asyncCall('turnLeft')
+
+    def turnRight(self):
+        self.asyncCall('turnRight')
+
+
+class Controller(QWidget):
+
+    def __init__(self, parent=None):
+        super(Controller, self).__init__(parent)
+
+        self.ui = Ui_Controller()
+
+        self.ui.setupUi(self)
+
+        self.car = CarInterface('org.example.CarExample', '/Car',
+                QDBusConnection.sessionBus(), self)
+
+        self.startTimer(1000)
+
+    def timerEvent(self, event):
+        if self.car.isValid():
+            self.ui.label.setText("connected")
+        else:
+            self.ui.label.setText("disconnected")
+
+    def on_accelerate_clicked(self):
+        self.car.accelerate()
+
+    def on_decelerate_clicked(self):
+        self.car.decelerate()
+
+    def on_left_clicked(self):
+        self.car.turnLeft()
+
+    def on_right_clicked(self):
+        self.car.turnRight()
+
+
+if __name__ == '__main__':
+    import sys
+
+    app = QApplication(sys.argv)
+
+    controller = Controller()
+    controller.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/dbus/remotecontrolledcar/controller/controller.ui b/examples/dbus/remotecontrolledcar/controller/controller.ui
new file mode 100644
index 0000000..379015b
--- /dev/null
+++ b/examples/dbus/remotecontrolledcar/controller/controller.ui
@@ -0,0 +1,64 @@
+<ui version="4.0" >
+ <class>Controller</class>
+ <widget class="QWidget" name="Controller" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>255</width>
+    <height>111</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Controller</string>
+  </property>
+  <layout class="QGridLayout" >
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item row="1" column="1" >
+    <widget class="QLabel" name="label" >
+     <property name="text" >
+      <string>Controller</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QPushButton" name="decelerate" >
+     <property name="text" >
+      <string>Decelerate</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1" >
+    <widget class="QPushButton" name="accelerate" >
+     <property name="text" >
+      <string>Accelerate</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="2" >
+    <widget class="QPushButton" name="right" >
+     <property name="text" >
+      <string>Right</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QPushButton" name="left" >
+     <property name="text" >
+      <string>Left</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/dbus/remotecontrolledcar/controller/ui_controller.py b/examples/dbus/remotecontrolledcar/controller/ui_controller.py
new file mode 100644
index 0000000..a5ca26c
--- /dev/null
+++ b/examples/dbus/remotecontrolledcar/controller/ui_controller.py
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'controller.ui'
+#
+# Created: Fri May 31 18:58:37 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-dd808c1bcced
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_Controller(object):
+    def setupUi(self, Controller):
+        Controller.setObjectName("Controller")
+        Controller.resize(255, 111)
+        self.gridlayout = QtWidgets.QGridLayout(Controller)
+        self.gridlayout.setContentsMargins(9, 9, 9, 9)
+        self.gridlayout.setSpacing(6)
+        self.gridlayout.setObjectName("gridlayout")
+        self.label = QtWidgets.QLabel(Controller)
+        self.label.setAlignment(QtCore.Qt.AlignCenter)
+        self.label.setObjectName("label")
+        self.gridlayout.addWidget(self.label, 1, 1, 1, 1)
+        self.decelerate = QtWidgets.QPushButton(Controller)
+        self.decelerate.setObjectName("decelerate")
+        self.gridlayout.addWidget(self.decelerate, 2, 1, 1, 1)
+        self.accelerate = QtWidgets.QPushButton(Controller)
+        self.accelerate.setObjectName("accelerate")
+        self.gridlayout.addWidget(self.accelerate, 0, 1, 1, 1)
+        self.right = QtWidgets.QPushButton(Controller)
+        self.right.setObjectName("right")
+        self.gridlayout.addWidget(self.right, 1, 2, 1, 1)
+        self.left = QtWidgets.QPushButton(Controller)
+        self.left.setObjectName("left")
+        self.gridlayout.addWidget(self.left, 1, 0, 1, 1)
+
+        self.retranslateUi(Controller)
+        QtCore.QMetaObject.connectSlotsByName(Controller)
+
+    def retranslateUi(self, Controller):
+        _translate = QtCore.QCoreApplication.translate
+        Controller.setWindowTitle(_translate("Controller", "Controller"))
+        self.label.setText(_translate("Controller", "Controller"))
+        self.decelerate.setText(_translate("Controller", "Decelerate"))
+        self.accelerate.setText(_translate("Controller", "Accelerate"))
+        self.right.setText(_translate("Controller", "Right"))
+        self.left.setText(_translate("Controller", "Left"))
+
diff --git a/examples/designer/README b/examples/designer/README
new file mode 100644
index 0000000..f606ed2
--- /dev/null
+++ b/examples/designer/README
@@ -0,0 +1,23 @@
+Qt Designer is a capable graphical user interface designer that lets you
+create and configure forms without writing code. GUIs created with
+Qt Designer can be converted to Python code or created at run-time.
+
+Some of the examples in this directory can be run from the example launcher;
+others can only be used from within Qt Designer.
+
+Documentation for these examples can be found via the "Tutorial and Examples"
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/designer/calculatorform/calculatorform.py b/examples/designer/calculatorform/calculatorform.py
new file mode 100755
index 0000000..810ceef
--- /dev/null
+++ b/examples/designer/calculatorform/calculatorform.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtSlot
+from PyQt5.QtWidgets import QApplication, QWidget
+
+from ui_calculatorform import Ui_CalculatorForm
+
+
+class CalculatorForm(QWidget):
+    def __init__(self, parent=None):
+        super(CalculatorForm, self).__init__(parent)
+
+        self.ui = Ui_CalculatorForm()
+
+        self.ui.setupUi(self)
+
+    @pyqtSlot(int)
+    def on_inputSpinBox1_valueChanged(self, value):
+        self.ui.outputWidget.setText(str(value + self.ui.inputSpinBox2.value()))
+
+    @pyqtSlot(int)
+    def on_inputSpinBox2_valueChanged(self, value):
+        self.ui.outputWidget.setText(str(value + self.ui.inputSpinBox1.value()))
+
+
+if __name__ == '__main__':
+    import sys
+
+    app = QApplication(sys.argv)
+    calculator = CalculatorForm()
+    calculator.show()
+    sys.exit(app.exec_())
diff --git a/examples/designer/calculatorform/calculatorform.ui b/examples/designer/calculatorform/calculatorform.ui
new file mode 100644
index 0000000..3a95639
--- /dev/null
+++ b/examples/designer/calculatorform/calculatorform.ui
@@ -0,0 +1,284 @@
+<ui version="4.0" >
+ <author></author>
+ <comment></comment>
+ <exportmacro></exportmacro>
+ <class>CalculatorForm</class>
+ <widget class="QWidget" name="CalculatorForm" >
+  <property name="objectName" >
+   <string notr="true" >CalculatorForm</string>
+  </property>
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="sizePolicy" >
+   <sizepolicy>
+    <hsizetype>5</hsizetype>
+    <vsizetype>5</vsizetype>
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle" >
+   <string>Calculator Form</string>
+  </property>
+  <layout class="QGridLayout" >
+   <property name="objectName" >
+    <string notr="true" />
+   </property>
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item row="0" column="6" >
+    <spacer>
+     <property name="objectName" >
+      <string notr="true" >horizontalSpacer</string>
+     </property>
+     <property name="geometry" >
+      <rect>
+       <x>239</x>
+       <y>9</y>
+       <width>152</width>
+       <height>52</height>
+      </rect>
+     </property>
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>40</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="4" >
+    <widget class="QLabel" name="label_3_2" >
+     <property name="objectName" >
+      <string notr="true" >label_3_2</string>
+     </property>
+     <property name="geometry" >
+      <rect>
+       <x>169</x>
+       <y>9</y>
+       <width>20</width>
+       <height>52</height>
+      </rect>
+     </property>
+     <property name="text" >
+      <string>=</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="5" >
+    <layout class="QVBoxLayout" >
+     <property name="objectName" >
+      <string notr="true" />
+     </property>
+     <property name="margin" >
+      <number>1</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label_2_2_2" >
+       <property name="objectName" >
+        <string notr="true" >label_2_2_2</string>
+       </property>
+       <property name="geometry" >
+        <rect>
+         <x>1</x>
+         <y>1</y>
+         <width>36</width>
+         <height>17</height>
+        </rect>
+       </property>
+       <property name="text" >
+        <string>Output</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="outputWidget" >
+       <property name="objectName" >
+        <string notr="true" >outputWidget</string>
+       </property>
+       <property name="geometry" >
+        <rect>
+         <x>1</x>
+         <y>24</y>
+         <width>36</width>
+         <height>27</height>
+        </rect>
+       </property>
+       <property name="frameShape" >
+        <enum>QFrame::Box</enum>
+       </property>
+       <property name="frameShadow" >
+        <enum>QFrame::Sunken</enum>
+       </property>
+       <property name="text" >
+        <string>0</string>
+       </property>
+       <property name="alignment" >
+        <set>Qt::AlignAbsolute|Qt::AlignBottom|Qt::AlignCenter|Qt::AlignHCenter|Qt::AlignHorizontal_Mask|Qt::AlignJustify|Qt::AlignLeading|Qt::AlignLeft|Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing|Qt::AlignVCenter|Qt::AlignVertical_Mask</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="2" >
+    <spacer>
+     <property name="objectName" >
+      <string notr="true" >verticalSpacer</string>
+     </property>
+     <property name="geometry" >
+      <rect>
+       <x>89</x>
+       <y>67</y>
+       <width>20</width>
+       <height>224</height>
+      </rect>
+     </property>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="3" >
+    <layout class="QVBoxLayout" >
+     <property name="objectName" >
+      <string notr="true" />
+     </property>
+     <property name="margin" >
+      <number>1</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label_2" >
+       <property name="objectName" >
+        <string notr="true" >label_2</string>
+       </property>
+       <property name="geometry" >
+        <rect>
+         <x>1</x>
+         <y>1</y>
+         <width>46</width>
+         <height>19</height>
+        </rect>
+       </property>
+       <property name="text" >
+        <string>Input 2</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="inputSpinBox2" >
+       <property name="objectName" >
+        <string notr="true" >inputSpinBox2</string>
+       </property>
+       <property name="geometry" >
+        <rect>
+         <x>1</x>
+         <y>26</y>
+         <width>46</width>
+         <height>25</height>
+        </rect>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="1" >
+    <widget class="QLabel" name="label_3" >
+     <property name="objectName" >
+      <string notr="true" >label_3</string>
+     </property>
+     <property name="geometry" >
+      <rect>
+       <x>63</x>
+       <y>9</y>
+       <width>20</width>
+       <height>52</height>
+      </rect>
+     </property>
+     <property name="text" >
+      <string>+</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" >
+    <layout class="QVBoxLayout" >
+     <property name="objectName" >
+      <string notr="true" />
+     </property>
+     <property name="margin" >
+      <number>1</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label" >
+       <property name="objectName" >
+        <string notr="true" >label</string>
+       </property>
+       <property name="geometry" >
+        <rect>
+         <x>1</x>
+         <y>1</y>
+         <width>46</width>
+         <height>19</height>
+        </rect>
+       </property>
+       <property name="text" >
+        <string>Input 1</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="inputSpinBox1" >
+       <property name="objectName" >
+        <string notr="true" >inputSpinBox1</string>
+       </property>
+       <property name="geometry" >
+        <rect>
+         <x>1</x>
+         <y>26</y>
+         <width>46</width>
+         <height>25</height>
+        </rect>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <pixmapfunction></pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/designer/calculatorform/ui_calculatorform.py b/examples/designer/calculatorform/ui_calculatorform.py
new file mode 100644
index 0000000..2b32eb0
--- /dev/null
+++ b/examples/designer/calculatorform/ui_calculatorform.py
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'calculatorform.ui'
+#
+# Created: Fri Jul 26 06:41:48 2013
+#      by: PyQt5 UI code generator 5.0.1-snapshot-2a99e59669ee
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_CalculatorForm(object):
+    def setupUi(self, CalculatorForm):
+        CalculatorForm.setObjectName("CalculatorForm")
+        CalculatorForm.resize(400, 300)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy(5), QtWidgets.QSizePolicy.Policy(5))
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(CalculatorForm.sizePolicy().hasHeightForWidth())
+        CalculatorForm.setSizePolicy(sizePolicy)
+        self.gridlayout = QtWidgets.QGridLayout(CalculatorForm)
+        self.gridlayout.setContentsMargins(9, 9, 9, 9)
+        self.gridlayout.setSpacing(6)
+        self.gridlayout.setObjectName("gridlayout")
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.gridlayout.addItem(spacerItem, 0, 6, 1, 1)
+        self.label_3_2 = QtWidgets.QLabel(CalculatorForm)
+        self.label_3_2.setGeometry(QtCore.QRect(169, 9, 20, 52))
+        self.label_3_2.setAlignment(QtCore.Qt.AlignCenter)
+        self.label_3_2.setObjectName("label_3_2")
+        self.gridlayout.addWidget(self.label_3_2, 0, 4, 1, 1)
+        self.vboxlayout = QtWidgets.QVBoxLayout()
+        self.vboxlayout.setContentsMargins(1, 1, 1, 1)
+        self.vboxlayout.setSpacing(6)
+        self.vboxlayout.setObjectName("vboxlayout")
+        self.label_2_2_2 = QtWidgets.QLabel(CalculatorForm)
+        self.label_2_2_2.setGeometry(QtCore.QRect(1, 1, 36, 17))
+        self.label_2_2_2.setObjectName("label_2_2_2")
+        self.vboxlayout.addWidget(self.label_2_2_2)
+        self.outputWidget = QtWidgets.QLabel(CalculatorForm)
+        self.outputWidget.setGeometry(QtCore.QRect(1, 24, 36, 27))
+        self.outputWidget.setFrameShape(QtWidgets.QFrame.Box)
+        self.outputWidget.setFrameShadow(QtWidgets.QFrame.Sunken)
+        self.outputWidget.setAlignment(QtCore.Qt.AlignAbsolute|QtCore.Qt.AlignBottom|QtCore.Qt.AlignCenter|QtCore.Qt.AlignHCenter|QtCore.Qt.AlignHorizontal_Mask|QtCore.Qt.AlignJustify|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignRight|QtCore.Qt.AlignTop|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignVertical_Mask)
+        self.outputWidget.setObjectName("outputWidget")
+        self.vboxlayout.addWidget(self.outputWidget)
+        self.gridlayout.addLayout(self.vboxlayout, 0, 5, 1, 1)
+        spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+        self.gridlayout.addItem(spacerItem1, 1, 2, 1, 1)
+        self.vboxlayout1 = QtWidgets.QVBoxLayout()
+        self.vboxlayout1.setContentsMargins(1, 1, 1, 1)
+        self.vboxlayout1.setSpacing(6)
+        self.vboxlayout1.setObjectName("vboxlayout1")
+        self.label_2 = QtWidgets.QLabel(CalculatorForm)
+        self.label_2.setGeometry(QtCore.QRect(1, 1, 46, 19))
+        self.label_2.setObjectName("label_2")
+        self.vboxlayout1.addWidget(self.label_2)
+        self.inputSpinBox2 = QtWidgets.QSpinBox(CalculatorForm)
+        self.inputSpinBox2.setGeometry(QtCore.QRect(1, 26, 46, 25))
+        self.inputSpinBox2.setObjectName("inputSpinBox2")
+        self.vboxlayout1.addWidget(self.inputSpinBox2)
+        self.gridlayout.addLayout(self.vboxlayout1, 0, 3, 1, 1)
+        self.label_3 = QtWidgets.QLabel(CalculatorForm)
+        self.label_3.setGeometry(QtCore.QRect(63, 9, 20, 52))
+        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
+        self.label_3.setObjectName("label_3")
+        self.gridlayout.addWidget(self.label_3, 0, 1, 1, 1)
+        self.vboxlayout2 = QtWidgets.QVBoxLayout()
+        self.vboxlayout2.setContentsMargins(1, 1, 1, 1)
+        self.vboxlayout2.setSpacing(6)
+        self.vboxlayout2.setObjectName("vboxlayout2")
+        self.label = QtWidgets.QLabel(CalculatorForm)
+        self.label.setGeometry(QtCore.QRect(1, 1, 46, 19))
+        self.label.setObjectName("label")
+        self.vboxlayout2.addWidget(self.label)
+        self.inputSpinBox1 = QtWidgets.QSpinBox(CalculatorForm)
+        self.inputSpinBox1.setGeometry(QtCore.QRect(1, 26, 46, 25))
+        self.inputSpinBox1.setObjectName("inputSpinBox1")
+        self.vboxlayout2.addWidget(self.inputSpinBox1)
+        self.gridlayout.addLayout(self.vboxlayout2, 0, 0, 1, 1)
+
+        self.retranslateUi(CalculatorForm)
+        QtCore.QMetaObject.connectSlotsByName(CalculatorForm)
+
+    def retranslateUi(self, CalculatorForm):
+        _translate = QtCore.QCoreApplication.translate
+        CalculatorForm.setWindowTitle(_translate("CalculatorForm", "Calculator Form"))
+        self.label_3_2.setText(_translate("CalculatorForm", "="))
+        self.label_2_2_2.setText(_translate("CalculatorForm", "Output"))
+        self.outputWidget.setText(_translate("CalculatorForm", "0"))
+        self.label_2.setText(_translate("CalculatorForm", "Input 2"))
+        self.label_3.setText(_translate("CalculatorForm", "+"))
+        self.label.setText(_translate("CalculatorForm", "Input 1"))
+
diff --git a/examples/designer/plugins/plugins.py b/examples/designer/plugins/plugins.py
new file mode 100755
index 0000000..c0f527c
--- /dev/null
+++ b/examples/designer/plugins/plugins.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Riverbank Computing Limited nor the names of
+##     its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import sys
+import os
+
+from PyQt5.QtCore import QLibraryInfo, QProcess, QProcessEnvironment
+from PyQt5.QtWidgets import QApplication, QMessageBox
+
+
+app = QApplication(sys.argv)
+
+QMessageBox.information(None, "PyQt Designer Plugins",
+        "<p>This example will start Qt Designer when you click the <b>OK</b> "
+        "button.</p>"
+        "<p>Before doing so it sets the <tt>PYQTDESIGNERPATH</tt> environment "
+        "variable to the <tt>python</tt> directory that is part of this "
+        "example.  This directory contains all the example Python plugin "
+        "modules.</p>"
+        "<p>It also sets the <tt>PYTHONPATH</tt> environment variable to the "
+        "<tt>widgets</tt> directory that is also part of this example.  This "
+        "directory contains the Python modules that implement the example "
+        "custom widgets.</p>"
+        "<p>All of the example custom widgets should then appear in "
+        "Designer's widget box in the <b>PyQt Examples</b> group.</p>")
+
+# Tell Qt Designer where it can find the directory containing the plugins and
+# Python where it can find the widgets.
+base = os.path.dirname(__file__)
+env = QProcessEnvironment.systemEnvironment()
+env.insert('PYQTDESIGNERPATH', os.path.join(base, 'python'))
+env.insert('PYTHONPATH', os.path.join(base, 'widgets'))
+
+# Start Designer.
+designer = QProcess()
+designer.setProcessEnvironment(env)
+
+designer_bin = QLibraryInfo.location(QLibraryInfo.BinariesPath)
+
+if sys.platform == 'darwin':
+    designer_bin += '/Designer.app/Contents/MacOS/Designer'
+else:
+    designer_bin += '/designer'
+
+designer.start(designer_bin)
+designer.waitForFinished(-1)
+
+sys.exit(designer.exitCode())
diff --git a/examples/designer/plugins/python/analogclockplugin.py b/examples/designer/plugins/python/analogclockplugin.py
new file mode 100644
index 0000000..c401ddd
--- /dev/null
+++ b/examples/designer/plugins/python/analogclockplugin.py
@@ -0,0 +1,195 @@
+#!/usr/bin/env python
+
+"""
+analogclockplugin.py
+
+An analog clock custom widget plugin for Qt Designer.
+
+Copyright (C) 2006 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+from PyQt5.QtGui import QIcon, QPixmap
+from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin
+
+from analogclock import PyAnalogClock
+
+
+class PyAnalogClockPlugin(QPyDesignerCustomWidgetPlugin):
+    """PyAnalogClockPlugin(QPyDesignerCustomWidgetPlugin)
+    
+    Provides a Python custom plugin for Qt Designer by implementing the
+    QDesignerCustomWidgetPlugin via a PyQt-specific custom plugin class.
+    """
+
+    # The __init__() method is only used to set up the plugin and define its
+    # initialized variable.
+    def __init__(self, parent=None):
+    
+        super(PyAnalogClockPlugin, self).__init__(parent)
+
+        self.initialized = False
+
+    # The initialize() and isInitialized() methods allow the plugin to set up
+    # any required resources, ensuring that this can only happen once for each
+    # plugin.
+    def initialize(self, core):
+
+        if self.initialized:
+            return
+
+        self.initialized = True
+
+    def isInitialized(self):
+
+        return self.initialized
+
+    # This factory method creates new instances of our custom widget with the
+    # appropriate parent.
+    def createWidget(self, parent):
+        return PyAnalogClock(parent)
+
+    # This method returns the name of the custom widget class that is provided
+    # by this plugin.
+    def name(self):
+        return "PyAnalogClock"
+
+    # Returns the name of the group in Qt Designer's widget box that this
+    # widget belongs to.
+    def group(self):
+        return "PyQt Examples"
+
+    # Returns the icon used to represent the custom widget in Qt Designer's
+    # widget box.
+    def icon(self):
+        return QIcon(_logo_pixmap)
+
+    # Returns a short description of the custom widget for use in a tool tip.
+    def toolTip(self):
+        return ""
+
+    # Returns a short description of the custom widget for use in a "What's
+    # This?" help message for the widget.
+    def whatsThis(self):
+        return ""
+
+    # Returns True if the custom widget acts as a container for other widgets;
+    # otherwise returns False. Note that plugins for custom containers also
+    # need to provide an implementation of the QDesignerContainerExtension
+    # interface if they need to add custom editing support to Qt Designer.
+    def isContainer(self):
+        return False
+
+    # Returns an XML description of a custom widget instance that describes
+    # default values for its properties. Each custom widget created by this
+    # plugin will be configured using this description.
+    def domXml(self):
+        return '<widget class="PyAnalogClock" name="analogClock">\n' \
+               ' <property name="toolTip">\n' \
+               '  <string>The current time</string>\n' \
+               ' </property>\n' \
+               ' <property name="whatsThis">\n' \
+               '  <string>The analog clock widget displays the current ' \
+               'time.</string>\n' \
+               ' </property>\n' \
+               '</widget>\n'
+
+    # Returns the module containing the custom widget class. It may include
+    # a module path.
+    def includeFile(self):
+        return "analogclock"
+
+
+# Define the image used for the icon.
+_logo_16x16_xpm = [
+    "16 16 58 1",
+    "L c #2d2d2d",
+    "N c #4f4f4f",
+    "K c #636363",
+    "J c #666666",
+    "I c #696969",
+    "D c #727272",
+    "F c #737373",
+    "O c #757575",
+    "G c #7f7f7f",
+    "o c #878787",
+    "t c #888888",
+    "Y c #898989",
+    "c c #8a8a8a",
+    "d c #8b8b8b",
+    "H c #8d8d8d",
+    "Q c #8f8f8f",
+    "b c #909090",
+    "M c #959595",
+    "g c #979797",
+    "n c #989898",
+    "x c #999999",
+    "0 c #9a9a9a",
+    "X c #9b9b9b",
+    "a c #9d9d9d",
+    "E c #9e9e9e",
+    "1 c #9f9f9f",
+    "T c #a0a0a0",
+    "v c #a1a1a1",
+    "r c #a2a2a2",
+    "B c #a6a6a6",
+    "R c #a7a7a7",
+    "3 c #a8a8a8",
+    "z c #aaaaaa",
+    "A c #ababab",
+    "m c #acacac",
+    "h c #adadad",
+    "u c #b1b1b1",
+    "q c #b2b2b2",
+    "V c #bfbfbf",
+    "W c #c6c6c6",
+    "w c #c7c7c7",
+    "s c #c8c8c8",
+    "p c #c9c9c9",
+    "k c #cdcdcd",
+    "l c #cfcfcf",
+    "2 c #d3d3d3",
+    "S c #d4d4d4",
+    "C c #d5d5d5",
+    "y c #d8d8d8",
+    "# c #d9d9d9",
+    "e c #dadada",
+    "i c #dbdbdb",
+    "P c #dcdcdc",
+    "U c #dfdfdf",
+    "j c #e1e1e1",
+    "f c #fbfbfb",
+    "Z c #fcfcfc",
+    ". c #ffffff",
+    "....#abcdbae....",
+    "..fghijkljimnf..",
+    ".fopjjjqrjjjstf.",
+    ".gsjjjjuvjjjjwx.",
+    "yvjjjjjzbjjjjjAi",
+    "BCjjjjjaDjjjjjiE",
+    "bjjjjjjEFjjjjjjG",
+    "HjjjjjjIJjjjjjjc",
+    "HjjjjjjnKLtjjjjc",
+    "bjjjjjjj#MNOPjjQ",
+    "RSjjjjjjjj#mdPiE",
+    "#TjjjjjjjjjjUjzP",
+    ".nVjjjjjjjjjjWX.",
+    ".fEVjjjjjjjjWYZ.",
+    "..f012jjjj2EXZ..",
+    "....i3QccQ3P...."]
+
+_logo_pixmap = QPixmap(_logo_16x16_xpm)
diff --git a/examples/designer/plugins/python/bubbleswidgetplugin.py b/examples/designer/plugins/python/bubbleswidgetplugin.py
new file mode 100644
index 0000000..9bdb48b
--- /dev/null
+++ b/examples/designer/plugins/python/bubbleswidgetplugin.py
@@ -0,0 +1,194 @@
+#!/usr/bin/env python
+
+"""
+bubbleswidgetplugin.py
+
+A bubbles widget custom widget plugin for Qt Designer.
+
+Copyright (C) 2006 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+from PyQt5.QtGui import QIcon, QPixmap
+from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin
+
+from bubbleswidget import BubblesWidget
+
+
+class BubblesPlugin(QPyDesignerCustomWidgetPlugin):
+    """BubblesPlugin(QPyDesignerCustomWidgetPlugin)
+    
+    Provides a Python custom plugin for Qt Designer by implementing the
+    QDesignerCustomWidgetPlugin via a PyQt-specific custom plugin class.
+    """
+    
+    # The __init__() method is only used to set up the plugin and define its
+    # initialized variable.
+    def __init__(self, parent=None):
+    
+        super(BubblesPlugin, self).__init__(parent)
+
+        self.initialized = False
+
+    # The initialize() and isInitialized() methods allow the plugin to set up
+    # any required resources, ensuring that this can only happen once for each
+    # plugin.
+    def initialize(self, core):
+
+        if self.initialized:
+            return
+
+        self.initialized = True
+
+    def isInitialized(self):
+
+        return self.initialized
+
+    # This factory method creates new instances of our custom widget with the
+    # appropriate parent.
+    def createWidget(self, parent):
+
+        return BubblesWidget(parent)
+
+    # This method returns the name of the custom widget class that is provided
+    # by this plugin.
+    def name(self):
+
+        return "BubblesWidget"
+
+    # Returns the name of the group in Qt Designer's widget box that this
+    # widget belongs to.
+    def group(self):
+
+        return "PyQt Examples"
+
+    # Returns the icon used to represent the custom widget in Qt Designer's
+    # widget box.
+    def icon(self):
+
+        return QIcon(_logo_pixmap)
+
+    # Returns a short description of the custom widget for use in a tool tip.
+    def toolTip(self):
+
+        return ""
+
+    # Returns a short description of the custom widget for use in a "What's
+    # This?" help message for the widget.
+    def whatsThis(self):
+
+        return ""
+
+    # Returns True if the custom widget acts as a container for other widgets;
+    # otherwise returns False. Note that plugins for custom containers also
+    # need to provide an implementation of the QDesignerContainerExtension
+    # interface if they need to add custom editing support to Qt Designer.
+    def isContainer(self):
+
+        return False
+
+    # Returns an XML description of a custom widget instance that describes
+    # default values for its properties. Each custom widget created by this
+    # plugin will be configured using this description.
+    def domXml(self):
+
+        return '<widget class="BubblesWidget" name="bubblesWidget">\n' \
+               ' <property name="toolTip">\n' \
+               '  <string>Click and drag here</string>\n' \
+               ' </property>\n' \
+               ' <property name="whatsThis">\n' \
+               '  <string>The bubbles widget displays colorful ' \
+               'bubbles.</string>\n' \
+               ' </property>\n' \
+               '</widget>\n'
+
+    # Returns the module containing the custom widget class. It may include
+    # a module path.
+    def includeFile(self):
+
+        return "bubbleswidget"
+
+
+# Define the image used for the icon.
+_logo_16x16_xpm = [
+"16 16 48 1",
+"O c #d0cfcf",
+"d c #d0d0d0",
+"i c #d3d3d2",
+"q c #d3d3d3",
+"M c #dad7d7",
+"g c #dad8d7",
+"e c #dcd9d9",
+"f c #e0dcdc",
+"c c #e0e0e0",
+"L c #e1dddb",
+"D c #e1dddc",
+"E c #e1e0e0",
+"R c #e1e1e1",
+"Q c #e2dedc",
+"p c #e2dedd",
+"j c #e3dfdf",
+"b c #e7e7e7",
+"S c #ebe4e3",
+"z c #ebe5e3",
+"r c #ece6e8",
+"a c #eeeeee",
+"N c #f6edeb",
+"I c #f6eeed",
+"o c #f6eeee",
+"h c #f7f7f7",
+"K c #f8efee",
+"C c #f8efef",
+"T c #f8f8f8",
+"y c #f9f1f0",
+"H c #f9f1f1",
+"n c #f9f1f2",
+"m c #f9f1f3",
+"k c #f9f2f4",
+"x c #faf3f5",
+"l c #faf3f6",
+"w c #faf3f7",
+"G c #faf3f8",
+"v c #fbf5fa",
+"s c #fbf5fb",
+"u c #fbf5fc",
+"t c #fbf5fd",
+"# c #fbfbfb",
+"J c #fcf6fe",
+"B c #fcf7fe",
+"P c #fcfcfc",
+"F c #fdf8ff",
+"A c #fefbff",
+". c #ffffff",
+".....#abba#.....",
+"...#cdeffgdc#...",
+"..hijkllmnopqh..",
+".#irstuvwxnyzq#.",
+".cjs.ABuvwknCDE.",
+"#dktAAFtsGlmHId#",
+"aeluBFJusGlmHKga",
+"bflvutusvGlmHKLb",
+"bfmwvssvGwxmHKLb",
+"agnxwGGGwlmnyKMa",
+"#donklllxmnHCNOP",
+".cpynmmmmnHCKQR.",
+".#qzCHHHHyCKSqP.",
+"..hqDIKKKKNQqT..",
+"...#EdgLLMORP...",
+".....#abbaP....."]
+
+_logo_pixmap = QPixmap(_logo_16x16_xpm)
diff --git a/examples/designer/plugins/python/counterlabelplugin.py b/examples/designer/plugins/python/counterlabelplugin.py
new file mode 100644
index 0000000..a793eaa
--- /dev/null
+++ b/examples/designer/plugins/python/counterlabelplugin.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+
+"""
+counterlabelplugin.py
+
+A counter label custom widget plugin for Qt Designer.
+
+Copyright (C) 2006 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+from PyQt5.QtGui import QIcon
+from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin
+
+from counterlabel import CounterLabel
+
+
+class CounterLabelPlugin(QPyDesignerCustomWidgetPlugin):
+    """CounterLabelPlugin(QPyDesignerCustomWidgetPlugin)
+
+    Provides a Python custom plugin for Qt Designer by implementing the
+    QDesignerCustomWidgetPlugin via a PyQt-specific custom plugin class.
+    """
+
+    # The __init__() method is only used to set up the plugin and define its
+    # initialized variable.
+    def __init__(self, parent=None):
+    
+        super(CounterLabelPlugin, self).__init__(parent)
+
+        self.initialized = False
+
+    def initialize(self, formEditor):
+
+        if self.initialized:
+            return
+        
+        self.initialized = True
+
+    def isInitialized(self):
+
+        return self.initialized
+
+    # This factory method creates new instances of our custom widget with the
+    # appropriate parent.
+    def createWidget(self, parent):
+        widget = CounterLabel(parent)
+        widget.setValue(1)
+        return widget
+
+    # This method returns the name of the custom widget class that is provided
+    # by this plugin.
+    def name(self):
+        return "CounterLabel"
+
+    # Returns the name of the group in Qt Designer's widget box that this
+    # widget belongs to.
+    def group(self):
+        return "PyQt Examples"
+
+    # Returns the icon used to represent the custom widget in Qt Designer's
+    # widget box.
+    def icon(self):
+        return QIcon()
+
+    # Returns a short description of the custom widget for use in a tool tip.
+    def toolTip(self):
+        return ""
+
+    # Returns a short description of the custom widget for use in a "What's
+    # This?" help message for the widget.
+    def whatsThis(self):
+        return ""
+
+    # Returns True if the custom widget acts as a container for other widgets;
+    # otherwise returns False. Note that plugins for custom containers also
+    # need to provide an implementation of the QDesignerContainerExtension
+    # interface if they need to add custom editing support to Qt Designer.
+    def isContainer(self):
+        return False
+
+    # Returns an XML description of a custom widget instance that describes
+    # default values for its properties. Each custom widget created by this
+    # plugin will be configured using this description.
+    def domXml(self):
+        return '<widget class="CounterLabel" name="counterLabel" />\n'
+
+    # Returns the module containing the custom widget class. It may include
+    # a module path.
+    def includeFile(self):
+        return "counterlabel"
diff --git a/examples/designer/plugins/python/datetimeeditplugin.py b/examples/designer/plugins/python/datetimeeditplugin.py
new file mode 100644
index 0000000..4360a3a
--- /dev/null
+++ b/examples/designer/plugins/python/datetimeeditplugin.py
@@ -0,0 +1,126 @@
+#============================================================================#
+# Designer plugins for PyDateEdit and PyDateTimeEdit                         #
+#----------------------------------------------------------------------------#
+# Copyright (c) 2008 by Denviso GmbH, <ulrich.berning at denviso.de>            #
+#                                                                            #
+# All Rights Reserved                                                        #
+#                                                                            #
+# Permission to use, copy, modify, and distribute this software and its      #
+# documentation for any purpose and without fee is hereby granted,           #
+# provided that the above copyright notice appear in all copies and that     #
+# both that copyright notice and this permission notice appear in            #
+# supporting documentation.                                                  #
+#                                                                            #
+# DENVISO DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS                       #
+# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY              #
+# AND FITNESS, IN NO EVENT SHALL DENVISO BE LIABLE FOR ANY                   #
+# SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES                  #
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,                    #
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER                      #
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE              #
+# OR PERFORMANCE OF THIS SOFTWARE.                                           #
+#----------------------------------------------------------------------------#
+
+
+from PyQt5.QtGui import QIcon
+from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin
+
+from datetimeedit import PyDateEdit, PyDateTimeEdit
+
+
+#============================================================================#
+# The group name in designer widgetbox                                       #
+#----------------------------------------------------------------------------#
+DESIGNER_GROUP_NAME = "PyQt Examples"
+
+
+#============================================================================#
+# Plugin for PyDateEdit                                                      #
+#----------------------------------------------------------------------------#
+class PyDateEditPlugin(QPyDesignerCustomWidgetPlugin):
+
+    def __init__(self, parent=None):
+        super(PyDateEditPlugin, self).__init__(parent)
+
+        self.initialized = False
+
+    def initialize(self, formEditor):
+        if self.initialized:
+            return
+        self.initialized = True
+
+    def isInitialized(self):
+        return self.initialized
+
+    def isContainer(self):
+        return False
+
+    def icon(self):
+        return QIcon()
+
+    def domXml(self):
+        return '<widget class="PyDateEdit" name="pyDateEdit">\n</widget>\n'
+    
+    def group(self):
+        return DESIGNER_GROUP_NAME
+              
+    def includeFile(self):
+        return "datetimeedit"
+
+    def name(self):
+        return "PyDateEdit"
+
+    def toolTip(self):
+        return ""
+
+    def whatsThis(self):
+        return ""
+
+    def createWidget(self, parent):
+        return PyDateEdit(parent)
+
+
+#============================================================================#
+# Plugin for PyDateTimeEdit                                                  #
+#----------------------------------------------------------------------------#
+class PyDateTimeEditPlugin(QPyDesignerCustomWidgetPlugin):
+
+    def __init__(self, parent=None):
+        super(PyDateTimeEditPlugin, self).__init__(parent)
+
+        self.initialized = False
+
+    def initialize(self, formEditor):
+        if self.initialized:
+            return
+        self.initialized = True
+
+    def isInitialized(self):
+        return self.initialized
+
+    def isContainer(self):
+        return False
+
+    def icon(self):
+        return QIcon()
+
+    def domXml(self):
+        return '<widget class="PyDateTimeEdit" name="pyDateTimeEdit">\n</widget>\n'
+    
+    def group(self):
+        return DESIGNER_GROUP_NAME
+              
+    def includeFile(self):
+        return "datetimeedit"
+
+    def name(self):
+        return "PyDateTimeEdit"
+
+    def toolTip(self):
+        return ""
+
+    def whatsThis(self):
+        return ""
+
+    def createWidget(self, parent):
+        return PyDateTimeEdit(parent)
diff --git a/examples/designer/plugins/python/helloglwidgetplugin.py b/examples/designer/plugins/python/helloglwidgetplugin.py
new file mode 100644
index 0000000..c3e962d
--- /dev/null
+++ b/examples/designer/plugins/python/helloglwidgetplugin.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+
+"""
+helloglwidgetplugin.py
+
+A simple OpenGL custom widget plugin for Qt Designer.
+
+Copyright (C) 2006 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+from PyQt5.QtGui import QIcon
+from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin
+
+from helloglwidget import HelloGLWidget
+
+
+class HelloGLWidgetPlugin(QPyDesignerCustomWidgetPlugin):
+    """HelloGLWidgetPlugin(QPyDesignerCustomWidgetPlugin)
+    
+    Provides a Python custom plugin for Qt Designer by implementing the
+    QDesignerCustomWidgetPlugin via a PyQt-specific custom plugin class.
+    """
+
+    # The __init__() method is only used to set up the plugin and define its
+    # initialized variable.
+    def __init__(self, parent=None):
+    
+        super(HelloGLWidgetPlugin, self).__init__(parent)
+
+        self.initialized = False
+
+    # The initialize() and isInitialized() methods allow the plugin to set up
+    # any required resources, ensuring that this can only happen once for each
+    # plugin.
+    def initialize(self, core):
+
+        if self.initialized:
+            return
+
+        self.initialized = True
+
+    def isInitialized(self):
+        return self.initialized
+
+    # This factory method creates new instances of our custom widget with the
+    # appropriate parent.
+    def createWidget(self, parent):
+        return HelloGLWidget(parent)
+
+    # This method returns the name of the custom widget class that is provided
+    # by this plugin.
+    def name(self):
+        return "HelloGLWidget"
+
+    # Returns the name of the group in Qt Designer's widget box that this
+    # widget belongs to.
+    def group(self):
+        return "PyQt Examples"
+
+    # Returns the icon used to represent the custom widget in Qt Designer's
+    # widget box.
+    def icon(self):
+        return QIcon()
+
+    # Returns a short description of the custom widget for use in a tool tip.
+    def toolTip(self):
+        return ""
+
+    # Returns a short description of the custom widget for use in a "What's
+    # This?" help message for the widget.
+    def whatsThis(self):
+        return ""
+
+    # Returns True if the custom widget acts as a container for other widgets;
+    # otherwise returns False. Note that plugins for custom containers also
+    # need to provide an implementation of the QDesignerContainerExtension
+    # interface if they need to add custom editing support to Qt Designer.
+    def isContainer(self):
+        return False
+
+    # Returns an XML description of a custom widget instance that describes
+    # default values for its properties. Each custom widget created by this
+    # plugin will be configured using this description.
+    def domXml(self):
+        return '<widget class="HelloGLWidget" name="helloGLWidget" />\n'
+
+    # Returns the module containing the custom widget class. It may include
+    # a module path.
+    def includeFile(self):
+        return "helloglwidget"
diff --git a/examples/designer/plugins/python/multipagewidgetplugin.py b/examples/designer/plugins/python/multipagewidgetplugin.py
new file mode 100644
index 0000000..5ee8392
--- /dev/null
+++ b/examples/designer/plugins/python/multipagewidgetplugin.py
@@ -0,0 +1,142 @@
+#============================================================================#
+# PyQt5 port of the designer/containerextension example from Qt v4.x         #
+#----------------------------------------------------------------------------#
+import sip
+from PyQt5.QtGui import QIcon
+from PyQt5.QtDesigner import (QDesignerFormWindowInterface, QExtensionFactory,
+        QPyDesignerContainerExtension, QPyDesignerCustomWidgetPlugin,
+        QPyDesignerPropertySheetExtension)
+
+from multipagewidget import PyMultiPageWidget
+
+
+Q_TYPEID = {'QPyDesignerContainerExtension':     'com.trolltech.Qt.Designer.Container',
+            'QPyDesignerPropertySheetExtension': 'com.trolltech.Qt.Designer.PropertySheet',
+            'QPyDesignerTaskMenuExtension':      'com.trolltech.Qt.Designer.TaskMenu',
+            'QPyDesignerMemberSheetExtension':   'com.trolltech.Qt.Designer.MemberSheet'}
+
+
+#============================================================================#
+# ContainerExtension                                                         #
+#----------------------------------------------------------------------------#
+class MultiPageWidgetContainerExtension(QPyDesignerContainerExtension):
+    def __init__(self, widget, parent=None):
+        super(MultiPageWidgetContainerExtension, self).__init__(parent)
+
+        self._widget = widget
+            
+    def addWidget(self, widget):
+        self._widget.addPage(widget)
+    
+    def count(self):
+        return self._widget.count()
+    
+    def currentIndex(self):
+        return self._widget.getCurrentIndex()
+    
+    def insertWidget(self, index, widget):
+        self._widget.insertPage(index, widget)
+    
+    def remove(self, index):
+        self._widget.removePage(index)
+    
+    def setCurrentIndex(self, index):
+        self._widget.setCurrentIndex(index)
+    
+    def widget(self, index):
+        return self._widget.widget(index)
+    
+
+#============================================================================#
+# ExtensionFactory                                                           #
+#----------------------------------------------------------------------------#
+class MultiPageWidgetExtensionFactory(QExtensionFactory):
+    def __init__(self, parent=None):
+        super(MultiPageWidgetExtensionFactory, self).__init__(parent)
+
+    def createExtension(self, obj, iid, parent):
+        if iid != Q_TYPEID['QPyDesignerContainerExtension']:
+            return None
+        if isinstance(obj, PyMultiPageWidget):
+            return MultiPageWidgetContainerExtension(obj, parent)
+        return None
+
+
+#============================================================================#
+# CustomWidgetPlugin                                                         #
+#----------------------------------------------------------------------------#
+class MultiPageWidgetPlugin(QPyDesignerCustomWidgetPlugin):
+
+    def __init__(self, parent=None):    
+        super(MultiPageWidgetPlugin, self).__init__(parent)
+
+        self.initialized = False
+
+    def initialize(self, formEditor):
+        if self.initialized:
+            return
+        manager = formEditor.extensionManager()
+        if manager:
+            self.factory = MultiPageWidgetExtensionFactory(manager)
+            manager.registerExtensions(self.factory, Q_TYPEID['QPyDesignerContainerExtension'])
+        self.initialized = True
+
+    def isInitialized(self):
+        return self.initialized
+
+    def createWidget(self, parent):
+        widget = PyMultiPageWidget(parent)
+        widget.currentIndexChanged.connect(self.currentIndexChanged)
+        widget.pageTitleChanged.connect(self.pageTitleChanged)
+        return widget
+
+    def name(self):
+        return "PyMultiPageWidget"
+
+    def group(self):
+        return "PyQt Examples"
+
+    def icon(self):
+        return QIcon()
+
+    def toolTip(self):
+        return ""
+
+    def whatsThis(self):
+        return ""
+
+    def isContainer(self):
+        return True
+
+    def domXml(self):
+        return ('<widget class="PyMultiPageWidget" name="multipagewidget">'
+                '  <widget class="QWidget" name="page" />'
+                '</widget>')
+
+    def includeFile(self):
+        return "multipagewidget"
+
+    def currentIndexChanged(self, index):
+        widget = self.sender()
+        if widget and isinstance(widget, PyMultiPageWidget):
+            form = QDesignerFormWindowInterface.findFormWindow(widget)
+            if form:
+                form.emitSelectionChanged()
+
+    def pageTitleChanged(self, title):
+        widget = self.sender()
+        if widget and isinstance(widget, PyMultiPageWidget):
+            page = widget.widget(widget.getCurrentIndex())
+            form = QDesignerFormWindowInterface.findFormWindow(widget)
+            if form:
+                editor = form.core()
+                manager = editor.extensionManager()
+                sheet = manager.extension(page, Q_TYPEID['QPyDesignerPropertySheetExtension'])
+                # This explicit cast is necessary here
+                sheet = sip.cast(sheet, QPyDesignerPropertySheetExtension)
+                propertyIndex = sheet.indexOf('windowTitle')
+                sheet.setChanged(propertyIndex, True)
+
+#============================================================================#
+# EOF                                                                        #
+#----------------------------------------------------------------------------#
diff --git a/examples/designer/plugins/python/polygonwidgetplugin.py b/examples/designer/plugins/python/polygonwidgetplugin.py
new file mode 100644
index 0000000..9e486fa
--- /dev/null
+++ b/examples/designer/plugins/python/polygonwidgetplugin.py
@@ -0,0 +1,175 @@
+#!/usr/bin/env python
+
+"""
+polygonwidgetplugin.py
+
+A polygon widget custom widget plugin for Qt Designer.
+
+Copyright (C) 2006 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+from PyQt5.QtGui import QIcon, QPixmap
+from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin
+
+from polygonwidget import PolygonWidget
+
+
+class PolygonWidgetPlugin(QPyDesignerCustomWidgetPlugin):
+    """PolygonWidgetPlugin(QPyDesignerCustomWidgetPlugin)
+    
+    Provides a Python custom plugin for Qt Designer by implementing the
+    QDesignerCustomWidgetPlugin via a PyQt-specific custom plugin class.
+    """
+
+    # The __init__() method is only used to set up the plugin and define its
+    # initialized variable.
+    def __init__(self, parent=None):
+    
+        super(PolygonWidgetPlugin, self).__init__(parent)
+
+        self.initialized = False
+
+    # The initialize() and isInitialized() methods allow the plugin to set up
+    # any required resources, ensuring that this can only happen once for each
+    # plugin.
+    def initialize(self, core):
+
+        if self.initialized:
+            return
+
+        self.initialized = True
+
+    def isInitialized(self):
+
+        return self.initialized
+
+    # This factory method creates new instances of our custom widget with the
+    # appropriate parent.
+    def createWidget(self, parent):
+        return PolygonWidget(parent)
+
+    # This method returns the name of the custom widget class that is provided
+    # by this plugin.
+    def name(self):
+        return "PolygonWidget"
+
+    # Returns the name of the group in Qt Designer's widget box that this
+    # widget belongs to.
+    def group(self):
+        return "PyQt Examples"
+
+    # Returns the icon used to represent the custom widget in Qt Designer's
+    # widget box.
+    def icon(self):
+        return QIcon(_logo_pixmap)
+
+    # Returns a short description of the custom widget for use in a tool tip.
+    def toolTip(self):
+        return ""
+
+    # Returns a short description of the custom widget for use in a "What's
+    # This?" help message for the widget.
+    def whatsThis(self):
+        return ""
+
+    # Returns True if the custom widget acts as a container for other widgets;
+    # otherwise returns False. Note that plugins for custom containers also
+    # need to provide an implementation of the QDesignerContainerExtension
+    # interface if they need to add custom editing support to Qt Designer.
+    def isContainer(self):
+        return False
+
+    # Returns an XML description of a custom widget instance that describes
+    # default values for its properties. Each custom widget created by this
+    # plugin will be configured using this description.
+    def domXml(self):
+        return '<widget class="PolygonWidget" name="polygonWidget" />\n'
+
+    # Returns the module containing the custom widget class. It may include
+    # a module path.
+    def includeFile(self):
+        return "polygonwidget"
+
+
+# Define the image used for the icon.
+_logo_16x16_xpm = [
+"16 16 46 1",
+". c #a5a5dc",
+"l c #a69fd6",
+"k c #a7a5da",
+"h c #a7a6dc",
+"a c #a7a7de",
+"Q c #a8a5da",
+"s c #a9a7d7",
+"R c #a9a9e0",
+"z c #abaad4",
+"E c #afafda",
+"M c #afafdb",
+"K c #b0a8e2",
+"o c #b1afe4",
+"p c #b2b2d7",
+"# c #b2b2ed",
+"i c #b39eb6",
+"F c #b3b3e1",
+"e c #b4b4ef",
+"t c #b58bab",
+"d c #b6b6f2",
+"n c #b798b8",
+"P c #b798b9",
+"c c #b8b6f2",
+"D c #b8b89c",
+"m c #b9648d",
+"J c #ba84b0",
+"A c #bdbdfb",
+"f c #bfbffe",
+"g c #c06996",
+"b c #c0c0ff",
+"B c #cbb889",
+"L c #cbb989",
+"O c #cfcf87",
+"I c #d09585",
+"w c #d0cf86",
+"x c #dede81",
+"G c #e8e87c",
+"q c #edde7b",
+"N c #f1e07b",
+"v c #f2e07b",
+"H c #f6e57c",
+"j c #fb917e",
+"u c #ffb580",
+"r c #ffda80",
+"C c #fffe80",
+"y c #ffff80",
+".##############a",
+"#bbbbbbbbcdbbbbe",
+"#bbbbbbbfghbbbbe",
+"#bbbbbbbijkbbbbe",
+"#blmnobpqrsbbbbe",
+"#bbtuvwxyyzbbbbe",
+"#bbABCyyyyDEfbbe",
+"#bbbFGyyyyyHIJKe",
+"#bbbFGyyyyyHIJKe",
+"#bbALCyyyyDMfbbe",
+"#bbtuNOxyyzbbbbe",
+"#blmPobpqrsbbbbe",
+"#bbbbbbbijQbbbbe",
+"#bbbbbbbfghbbbbe",
+"#bbbbbbbbcdbbbbe",
+"aeeeeeeeeeeeeeeR"]
+
+_logo_pixmap = QPixmap(_logo_16x16_xpm)
diff --git a/examples/designer/plugins/python/pydemoplugin.py b/examples/designer/plugins/python/pydemoplugin.py
new file mode 100644
index 0000000..c7f7ffc
--- /dev/null
+++ b/examples/designer/plugins/python/pydemoplugin.py
@@ -0,0 +1,168 @@
+# A demonstration custom widget plugin for Qt Designer.
+# 
+# Copyright (c) 2013 Riverbank Computing Limited
+
+
+from PyQt5.QtGui import QIcon, QPixmap
+from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin
+
+from pydemo import PyDemo
+
+
+# This class implements the interface expected by Qt Designer to access the
+# custom widget.  See the description of the QDesignerCustomWidgetInterface
+# class for full details.
+class PyDemoPlugin(QPyDesignerCustomWidgetPlugin):
+
+    # Initialise the instance.
+    def __init__(self, parent=None):
+        super(PyDemoPlugin, self).__init__(parent)
+
+        self._initialized = False
+
+    # Initialise the custom widget for use with the specified formEditor
+    # interface.
+    def initialize(self, formEditor):
+        if self._initialized:
+            return
+
+        self._initialized = True
+
+    # Return True if the custom widget has been intialised.
+    def isInitialized(self):
+        return self._initialized
+
+    # Return a new instance of the custom widget with the given parent.
+    def createWidget(self, parent):
+        return PyDemo(parent)
+
+    # Return the name of the class that implements the custom widget.
+    def name(self):
+        return "PyDemo"
+
+    # Return the name of the group to which the custom widget belongs.  A new
+    # group will be created if it doesn't already exist.
+    def group(self):
+        return "PyQt Examples"
+
+    # Return the icon used to represent the custom widget in Designer's widget
+    # box.
+    def icon(self):
+        return QIcon(_logo_pixmap)
+
+    # Return a short description of the custom widget used by Designer in a
+    # tool tip.
+    def toolTip(self):
+        return "PyQt demonstration widget"
+
+    # Return a full description of the custom widget used by Designer in
+    # "What's This?" help for the widget.
+    def whatsThis(self):
+        return "PyDemo is a demonstration custom widget written in Python " \
+               "using PyQt."
+
+    # Return True if the custom widget acts as a container for other widgets.
+    def isContainer(self):
+        return False
+
+    # Return an XML fragment that allows the default values of the custom
+    # widget's properties to be overridden.
+    def domXml(self):
+        return '<widget class="PyDemo" name="pyDemo">\n' \
+               ' <property name="toolTip" >\n' \
+               '  <string>PyQt demonstration widget</string>\n' \
+               ' </property>\n' \
+               ' <property name="whatsThis" >\n' \
+               '  <string>PyDemo is a demonstration custom widget written ' \
+               'in Python using PyQt.</string>\n' \
+               ' </property>\n' \
+               '</widget>\n'
+
+    # Return the name of the module containing the class that implements the
+    # custom widget.  It may include a module path.
+    def includeFile(self):
+        return "pydemo"
+
+
+# Define the image used for the icon.
+_logo_16x16_xpm = [
+"16 16 61 1",
+"6 c #5bbd7c",
+"a c #7aaada",
+"h c #7eaddb",
+"n c #7faddb",
+"E c #82afdc",
+"x c #83b0dd",
+"C c #84b0dd",
+"z c #84b1dd",
+"B c #85b1dd",
+"u c #87b2de",
+"U c #9ec1e4",
+"Z c #9fc1e4",
+"H c #a1c3e5",
+"Y c #a5c5e4",
+"V c #a6c6e4",
+"P c #afcbe2",
+"S c #afcbe3",
+"O c #b1cde9",
+"T c #b2cee9",
+"t c #b4cee3",
+"r c #b5cee3",
+"q c #c2d8ee",
+"0 c #c7dbef",
+"f c #cedddb",
+"b c #cfdddb",
+"1 c #d0e1f2",
+"J c #d8e2d2",
+"I c #d9e2d2",
+"# c #dfeaf6",
+"g c #e3edf7",
+"K c #ecf2f9",
+"N c #ecf3f9",
+"o c #eeecbb",
+"i c #f2edb2",
+"l c #f2edb3",
+"w c #f6eea6",
+"v c #f7eea6",
+"W c #fcee8c",
+"m c #fcfdfe",
+"L c #fdec73",
+"k c #fedd00",
+"e c #fede06",
+"p c #fede07",
+"j c #fee013",
+"X c #fee015",
+"s c #fee223",
+"d c #fee32c",
+"A c #fee749",
+"Q c #fee850",
+"R c #fee851",
+"D c #fee854",
+"y c #feea65",
+"M c #feec74",
+"c c #feed7c",
+"F c #feee85",
+"G c #feee86",
+"5 c #fef095",
+"4 c #fef195",
+"3 c #fef6bb",
+"2 c #fefdf5",
+". c #fefefe",
+"..#abcdeedcfa#..",
+".ghijkkkkkkjlhg.",
+"mnopkkkkkkkkponm",
+"qrskkkkkkkkkkstq",
+"uvkkkkkkkkkkkkwu",
+"xykkkkkkkkkkkkyx",
+"zAkkkkkkkkkkkkAB",
+"CDkkkkkkkkkkkkDC",
+"EFkkkkkkkkkkkkGE",
+"HIekkkkkkkkkkeJH",
+"KBLkkkkkkkkkkMBN",
+".OPQkkkkkkkkRST.",
+"..UVWXkkkkXWYZ..",
+"...0123453210...",
+"6666666666666666",
+"BBBBBBBBBBBBBBBB"]
+
+_logo_pixmap = QPixmap(_logo_16x16_xpm)
diff --git a/examples/designer/plugins/python/pythonconsoleplugin.py b/examples/designer/plugins/python/pythonconsoleplugin.py
new file mode 100644
index 0000000..89966db
--- /dev/null
+++ b/examples/designer/plugins/python/pythonconsoleplugin.py
@@ -0,0 +1,143 @@
+#!/usr/bin/env python
+
+"""
+pythonconsoleplugin.py
+
+A Python console custom widget plugin for Qt Designer.
+
+Copyright (C) 2006 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+from PyQt5.QtGui import QIcon, QPixmap
+from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin
+
+from pythonconsolewidget import PythonConsoleWidget
+
+
+class PythonConsolePlugin(QPyDesignerCustomWidgetPlugin):
+    """PythonConsolePlugin(QPyDesignerCustomWidgetPlugin)
+    
+    Provides a Python custom plugin for Qt Designer by implementing the
+    QDesignerCustomWidgetPlugin via a PyQt-specific custom plugin class.
+    """
+
+    # The __init__() method is only used to set up the plugin and define its
+    # initialized variable.
+    def __init__(self, parent=None):
+    
+        super(PythonConsolePlugin, self).__init__(parent)
+
+        self.initialized = False
+
+    # The initialize() and isInitialized() methods allow the plugin to set up
+    # any required resources, ensuring that this can only happen once for each
+    # plugin.
+    def initialize(self, core):
+
+        if self.initialized:
+            return
+
+        self.initialized = True
+
+    def isInitialized(self):
+
+        return self.initialized
+
+    # This factory method creates new instances of our custom widget with the
+    # appropriate parent.
+    def createWidget(self, parent):
+        return PythonConsoleWidget(parent)
+
+    # This method returns the name of the custom widget class that is provided
+    # by this plugin.
+    def name(self):
+        return "PythonConsoleWidget"
+
+    # Returns the name of the group in Qt Designer's widget box that this
+    # widget belongs to.
+    def group(self):
+        return "PyQt Examples"
+
+    # Returns the icon used to represent the custom widget in Qt Designer's
+    # widget box.
+    def icon(self):
+        return QIcon(_logo_pixmap)
+
+    # Returns a short description of the custom widget for use in a tool tip.
+    def toolTip(self):
+        return ""
+
+    # Returns a short description of the custom widget for use in a "What's
+    # This?" help message for the widget.
+    def whatsThis(self):
+        return ""
+
+    # Returns True if the custom widget acts as a container for other widgets;
+    # otherwise returns False. Note that plugins for custom containers also
+    # need to provide an implementation of the QDesignerContainerExtension
+    # interface if they need to add custom editing support to Qt Designer.
+    def isContainer(self):
+        return False
+
+    # Returns an XML description of a custom widget instance that describes
+    # default values for its properties. Each custom widget created by this
+    # plugin will be configured using this description.
+    def domXml(self):
+        return '<widget class="PythonConsoleWidget" name="consoleWidget">\n' \
+               ' <property name="toolTip" >\n' \
+               '  <string>Python console</string>\n' \
+               ' </property>\n' \
+               ' <property name="whatsThis" >\n' \
+               '  <string>The Python console widget can be used to explore ' \
+               'Qt Designer.</string>\n' \
+               ' </property>\n' \
+               '</widget>\n'
+
+    # Returns the module containing the custom widget class. It may include
+    # a module path.
+    def includeFile(self):
+        return "pythonconsolewidget"
+
+
+# Define the image used for the icon.
+_logo_16x16_xpm = [
+    "16 16 6 1",
+    " 	c None",
+    ".	c #FFFFFF",
+    "a	c #000000",
+    "b	c #808080",
+    "c	c #C0C0C0",
+    "d	c #404040",
+    "................",
+    "................",
+    "................",
+    ".aa..aa..aa.....",
+    "..aa..aa..aa....",
+    "...aa..aa..aa...",
+    "....aa..aa..aa..",
+    ".....aa..aa..aa.",
+    ".....aa..aa..aa.",
+    "....aa..aa..aa..",
+    "...aa..aa..aa...",
+    "..aa..aa..aa....",
+    ".aa..aa..aa.....",
+    "................",
+    "................",
+    "................"]
+
+_logo_pixmap = QPixmap(_logo_16x16_xpm)
diff --git a/examples/designer/plugins/widgets/analogclock.py b/examples/designer/plugins/widgets/analogclock.py
new file mode 100755
index 0000000..dffbb90
--- /dev/null
+++ b/examples/designer/plugins/widgets/analogclock.py
@@ -0,0 +1,189 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (pyqtProperty, pyqtSignal, pyqtSlot, QPoint, QSize,
+        Qt, QTime, QTimer)
+from PyQt5.QtGui import QBrush, QColor, QPainter, QPen, QPolygon
+from PyQt5.QtWidgets import QApplication, QWidget
+
+
+class PyAnalogClock(QWidget):
+    """PyAnalogClock(QWidget)
+
+    Provides an analog clock custom widget with signals, slots and properties.
+    The implementation is based on the Analog Clock example provided with both
+    Qt and PyQt.
+    """
+
+    # Emitted when the clock's time changes.
+    timeChanged = pyqtSignal(QTime)
+
+    # Emitted when the clock's time zone changes.
+    timeZoneChanged = pyqtSignal(int)
+
+    def __init__(self, parent=None):
+
+        super(PyAnalogClock, self).__init__(parent)
+
+        self.timeZoneOffset = 0
+
+        timer = QTimer(self)
+        timer.timeout.connect(self.update)
+        timer.timeout.connect(self.updateTime)
+        timer.start(1000)
+
+        self.setWindowTitle("Analog Clock")
+        self.resize(200, 200)
+
+        self.hourHand = QPolygon([
+            QPoint(7, 8),
+            QPoint(-7, 8),
+            QPoint(0, -40)
+        ])
+        self.minuteHand = QPolygon([
+            QPoint(7, 8),
+            QPoint(-7, 8),
+            QPoint(0, -70)
+        ])
+
+        self.hourColor = QColor(0, 127, 0)
+        self.minuteColor = QColor(0, 127, 127, 191)
+
+    def paintEvent(self, event):
+
+        side = min(self.width(), self.height())
+        time = QTime.currentTime()
+        time = time.addSecs(self.timeZoneOffset * 3600)
+
+        painter = QPainter()
+        painter.begin(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.translate(self.width() / 2, self.height() / 2)
+        painter.scale(side / 200.0, side / 200.0)
+
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(QBrush(self.hourColor))
+
+        painter.save()
+        painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)))
+        painter.drawConvexPolygon(self.hourHand)
+        painter.restore()
+
+        painter.setPen(self.hourColor)
+
+        for i in range(0, 12):
+            painter.drawLine(88, 0, 96, 0)
+            painter.rotate(30.0)
+
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(QBrush(self.minuteColor))
+
+        painter.save()
+        painter.rotate(6.0 * (time.minute() + time.second() / 60.0))
+        painter.drawConvexPolygon(self.minuteHand)
+        painter.restore()
+
+        painter.setPen(QPen(self.minuteColor))
+
+        for j in range(0, 60):
+            if (j % 5) != 0:
+                painter.drawLine(92, 0, 96, 0)
+            painter.rotate(6.0)
+
+        painter.end()
+
+    def minimumSizeHint(self):
+
+        return QSize(50, 50)
+
+    def sizeHint(self):
+
+        return QSize(100, 100)
+
+    def updateTime(self):
+
+        self.timeChanged.emit(QTime.currentTime())
+
+    # The timeZone property is implemented using the getTimeZone() getter
+    # method, the setTimeZone() setter method, and the resetTimeZone() method.
+
+    # The getter just returns the internal time zone value.
+    def getTimeZone(self):
+
+        return self.timeZoneOffset
+
+    # The setTimeZone() method is also defined to be a slot. The @pyqtSlot
+    # decorator is used to tell PyQt which argument type the method expects,
+    # and is especially useful when you want to define slots with the same
+    # name that accept different argument types.
+
+    @pyqtSlot(int)
+    def setTimeZone(self, value):
+
+        self.timeZoneOffset = value
+        self.timeZoneChanged.emit(value)
+        self.update()
+
+    # Qt's property system supports properties that can be reset to their
+    # original values. This method enables the timeZone property to be reset.
+    def resetTimeZone(self):
+
+        self.timeZoneOffset = 0
+        self.timeZoneChanged.emit(0)
+        self.update()
+
+    # Qt-style properties are defined differently to Python's properties.
+    # To declare a property, we call pyqtProperty() to specify the type and,
+    # in this case, getter, setter and resetter methods.
+    timeZone = pyqtProperty(int, getTimeZone, setTimeZone, resetTimeZone)
+
+
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+    clock = PyAnalogClock()
+    clock.show()
+    sys.exit(app.exec_())
diff --git a/examples/designer/plugins/widgets/bubbleswidget.py b/examples/designer/plugins/widgets/bubbleswidget.py
new file mode 100755
index 0000000..52ab107
--- /dev/null
+++ b/examples/designer/plugins/widgets/bubbleswidget.py
@@ -0,0 +1,335 @@
+#!/usr/bin/env python
+
+"""
+bubbleswidget.py
+
+A PyQt custom widget example for Qt Designer.
+
+Copyright (C) 2006 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+import random
+
+from PyQt5.QtCore import (pyqtProperty, pyqtSignal, pyqtSlot, QPointF, QRectF,
+        QSize, QSizeF, Qt, QTimer)
+from PyQt5.QtGui import QBrush, QColor, QPainter, QPen, QRadialGradient
+from PyQt5.QtWidgets import QApplication, QWidget
+
+
+class BaseClass(QWidget):
+    """BaseClass(QWidget)
+
+    Provides a base custom widget class to show that properties implemented
+    in Python can be inherited and shown as belonging to distinct classes
+    in Qt Designer's Property Editor.
+    """
+
+    def __init__(self, parent=None):
+
+        super(BaseClass, self).__init__(parent)
+
+        self.resetAuthor()
+
+    # Define getter, setter and resetter methods for the author property.
+
+    def getAuthor(self):
+        return self._author
+
+    def setAuthor(self, name):
+        self._author = name
+
+    def resetAuthor(self):
+        self._author = "David Boddie"
+
+    author = pyqtProperty(str, getAuthor, setAuthor, resetAuthor)
+
+
+class Bubble:
+    """Bubble
+
+    Provides a class to represent individual bubbles in a BubblesWidget.
+    Each Bubble instance can render itself onto a paint device using a
+    QPainter passed to its drawBubble() method.
+    """
+
+    def __init__(self, position, radius, speed, innerColor, outerColor):
+
+        self.position = position
+        self.radius = radius
+        self.speed = speed
+        self.innerColor = innerColor
+        self.outerColor = outerColor
+        self.updateBrush()
+
+    def updateBrush(self):
+
+        gradient = QRadialGradient(
+                QPointF(self.radius, self.radius), self.radius,
+                QPointF(self.radius*0.5, self.radius*0.5))
+
+        gradient.setColorAt(0, QColor(255, 255, 255, 255))
+        gradient.setColorAt(0.25, self.innerColor)
+        gradient.setColorAt(1, self.outerColor)
+        self.brush = QBrush(gradient)
+
+    def drawBubble(self, painter):
+
+        painter.save()
+        painter.translate(self.position.x() - self.radius,
+                          self.position.y() - self.radius)
+        painter.setBrush(self.brush)
+        painter.drawEllipse(0.0, 0.0, 2*self.radius, 2*self.radius)
+        painter.restore()
+
+
+class BubblesWidget(BaseClass):
+    """BubblesWidget(BaseClass)
+
+    Provides a custom widget that shows a number of rising bubbles.
+    Various properties are defined so that the user can customize the
+    appearance of the widget, and change the number and behaviour of the
+    bubbles shown.
+    """
+
+    # We define two signals that are used to indicate changes to the status
+    # of the widget.
+    bubbleLeft = pyqtSignal()
+    bubblesRemaining = pyqtSignal(int)
+
+    def __init__(self, parent=None):
+
+        super(BubblesWidget, self).__init__(parent)
+
+        self.pen = QPen(QColor("#cccccc"))
+        self.bubbles = []
+        self.backgroundColor1 = self.randomColor()
+        self.backgroundColor2 = self.randomColor().darker(150)
+        self.newBubble = None
+
+        random.seed()
+
+        self.animation_timer = QTimer(self)
+        self.animation_timer.setSingleShot(False)
+        self.animation_timer.timeout.connect(self.animate)
+        self.animation_timer.start(25)
+
+        self.bubbleTimer = QTimer()
+        self.bubbleTimer.setSingleShot(False)
+        self.bubbleTimer.timeout.connect(self.expandBubble)
+
+        self.setMouseTracking(True)
+        self.setMinimumSize(QSize(200, 200))
+        self.setWindowTitle("Bubble Maker")
+
+    def paintEvent(self, event):
+
+        background = QRadialGradient(QPointF(self.rect().topLeft()), 500,
+                QPointF(self.rect().bottomRight()))
+        background.setColorAt(0, self.backgroundColor1)
+        background.setColorAt(1, self.backgroundColor2)
+
+        painter = QPainter()
+        painter.begin(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.fillRect(event.rect(), QBrush(background))
+
+        painter.setPen(self.pen)
+
+        for bubble in self.bubbles:
+
+            if QRectF(bubble.position - QPointF(bubble.radius, bubble.radius),
+                      QSizeF(2*bubble.radius, 2*bubble.radius)).intersects(QRectF(event.rect())):
+                bubble.drawBubble(painter)
+
+        if self.newBubble:
+
+            self.newBubble.drawBubble(painter)
+
+        painter.end()
+
+    def mousePressEvent(self, event):
+
+        if event.button() == Qt.LeftButton and self.newBubble is None:
+
+            self.newBubble = Bubble(QPointF(event.pos()), 4.0,
+                                    1.0 + random.random() * 7,
+                                    self.randomColor(), self.randomColor())
+            self.bubbleTimer.start(50)
+            event.accept()
+
+    def mouseMoveEvent(self, event):
+
+        if self.newBubble:
+
+            self.update(
+                QRectF(self.newBubble.position - \
+                       QPointF(self.newBubble.radius + 1, self.newBubble.radius + 1),
+                       QSizeF(2*self.newBubble.radius + 2, 2*self.newBubble.radius + 2)).toRect()
+                )
+            self.newBubble.position = QPointF(event.pos())
+            self.update(
+                QRectF(self.newBubble.position - \
+                       QPointF(self.newBubble.radius + 1, self.newBubble.radius + 1),
+                       QSizeF(2*self.newBubble.radius + 2, 2*self.newBubble.radius + 2)).toRect()
+                )
+
+        event.accept()
+
+    def mouseReleaseEvent(self, event):
+
+        if self.newBubble:
+
+            self.bubbles.append(self.newBubble)
+            self.newBubble = None
+            self.bubbleTimer.stop()
+            self.bubblesRemaining.emit(len(self.bubbles))
+
+        event.accept()
+
+    def expandBubble(self):
+
+        if self.newBubble:
+
+            self.newBubble.radius = min(self.newBubble.radius + 4.0,
+                                        self.width()/8.0, self.height()/8.0)
+            self.update(
+                QRectF(self.newBubble.position - \
+                       QPointF(self.newBubble.radius + 1, self.newBubble.radius + 1),
+                       QSizeF(2*self.newBubble.radius + 2, 2*self.newBubble.radius + 2)).toRect()
+                )
+            self.newBubble.updateBrush()
+
+    def randomColor(self):
+
+        red = 205 + random.random() * 50
+        green = 205 + random.random() * 50
+        blue = 205 + random.random() * 50
+        alpha = 91 + random.random() * 100
+
+        return QColor(red, green, blue, alpha)
+
+    def animate(self):
+
+        bubbles = []
+        left = False
+        for bubble in self.bubbles:
+
+            bubble.position = bubble.position + QPointF(0, -bubble.speed)
+
+            self.update(
+                    QRectF(bubble.position - QPointF(bubble.radius + 1,
+                                    bubble.radius + 1),
+                            QSizeF(2*bubble.radius + 2, 2*bubble.radius + 2 + bubble.speed)).toRect())
+
+            if bubble.position.y() + bubble.radius > 0:
+                bubbles.append(bubble)
+            else:
+                self.bubbleLeft.emit()
+                left = True
+
+        if self.newBubble:
+            self.update(
+                    QRectF(self.newBubble.position - QPointF(
+                                    self.newBubble.radius + 1,
+                                    self.newBubble.radius + 1),
+                            QSizeF(2*self.newBubble.radius + 2, 2*self.newBubble.radius + 2)).toRect())
+
+        self.bubbles = bubbles
+        if left:
+            self.bubblesRemaining.emit(len(self.bubbles))
+
+    def sizeHint(self):
+
+        return QSize(200, 200)
+
+    # We provide getter and setter methods for the numberOfBubbles property.
+    def getBubbles(self):
+
+        return len(self.bubbles)
+
+    # The setBubbles() method can also be used as a slot.
+    @pyqtSlot(int)
+    def setBubbles(self, value):
+
+        value = max(0, value)
+
+        while len(self.bubbles) < value:
+
+            newBubble = Bubble(QPointF(random.random() * self.width(),
+                                       random.random() * self.height()),
+                               4.0 + random.random() * 20,
+                               1.0 + random.random() * 7,
+                               self.randomColor(), self.randomColor())
+            newBubble.updateBrush()
+            self.bubbles.append(newBubble)
+
+        self.bubbles = self.bubbles[:value]
+        self.bubblesRemaining.emit(value)
+        self.update()
+
+    numberOfBubbles = pyqtProperty(int, getBubbles, setBubbles)
+
+    # We provide getter and setter methods for the color1 and color2
+    # properties. The red, green and blue components for the QColor
+    # values stored in these properties can be edited individually in
+    # Qt Designer.
+
+    def getColor1(self):
+
+        return self.backgroundColor1
+
+    def setColor1(self, value):
+
+        self.backgroundColor1 = QColor(value)
+        self.update()
+
+    color1 = pyqtProperty(QColor, getColor1, setColor1)
+
+    def getColor2(self):
+
+        return self.backgroundColor2
+
+    def setColor2(self, value):
+
+        self.backgroundColor2 = QColor(value)
+        self.update()
+
+    color2 = pyqtProperty(QColor, getColor2, setColor2)
+
+    # The stop() and start() slots provide simple control over the animation
+    # of the bubbles in the widget.
+
+    @pyqtSlot()
+    def stop(self):
+
+        self.animation_timer.stop()
+
+    @pyqtSlot()
+    def start(self):
+
+        self.animation_timer.start(25)
+
+
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+    widget = BubblesWidget()
+    widget.show()
+    sys.exit(app.exec_())
diff --git a/examples/designer/plugins/widgets/counterlabel.py b/examples/designer/plugins/widgets/counterlabel.py
new file mode 100755
index 0000000..fc6c7c6
--- /dev/null
+++ b/examples/designer/plugins/widgets/counterlabel.py
@@ -0,0 +1,177 @@
+#!/usr/bin/env python
+
+"""
+counterlabel.py
+
+A PyQt custom widget example for Qt Designer.
+
+Copyright (C) 2006 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QRectF, QSize, Qt
+from PyQt5.QtGui import QFont, QFontMetricsF, QPainter
+from PyQt5.QtWidgets import QApplication, QWidget
+
+
+class CounterLabel(QWidget):
+    """CounterLabel(QWidget)
+
+    Provides a custom label widget to be used as a counter, with signals
+    similar to those provided by QAbstractSlider subclasses and properties
+    similar to those provided by QLabel.
+    """
+
+    # We define two signals that are used to indicate changes to the status
+    # of the widget.
+    valueChanged = pyqtSignal((int, ), (str, ))
+
+    def __init__(self, parent=None):
+
+        super(CounterLabel, self).__init__(parent)
+
+        self.setAutoFillBackground(False)
+
+        self._font = QFont()
+        self._minimum = 1
+        self._maximum = 1
+        self._value = 1
+        self._offset = 0
+        self.rescale()
+        self.reposition()
+
+    def paintEvent(self, event):
+
+        p = QPainter()
+        p.begin(self)
+        p.setRenderHint(QPainter.Antialiasing)
+        p.setFont(self._font)
+        p.translate(self.width()/2.0, self.height()/2.0)
+        p.scale(self._scale, self._scale)
+        p.drawText(self._xpos, self._ypos, str(self._value))
+        p.end()
+
+    def sizeHint(self):
+        return QSize(32, 32)
+
+    def rescale(self):
+
+        fm = QFontMetricsF(self._font, self)
+        maxRect = fm.boundingRect(QRectF(self.rect()), Qt.AlignCenter,
+                str(self._maximum))
+        xscale = float(self.width())/maxRect.width()
+        yscale = float(self.height())/maxRect.height()
+        self._scale = min(xscale, yscale)
+
+    def reposition(self):
+
+        fm = QFontMetricsF(self._font, self)
+        rect = fm.boundingRect(QRectF(self.rect()), Qt.AlignCenter,
+                str(self._value))
+        self._xpos = -rect.width()/2.0
+        self._ypos = rect.height()/2.0 - fm.descent()
+        self.update()
+
+    # Provide getter and setter methods for the font property.
+
+    def getFont(self):
+        return self._font
+
+    def setFont(self, font):
+        self._font = font
+        self.rescale()
+        self.reposition()
+
+    font = pyqtProperty(QFont, getFont, setFont)
+
+    # Provide getter and setter methods for the minimum and maximum properties.
+
+    def getMinimum(self):
+        return self._minimum
+
+    def setMinimum(self, value):
+        self._minimum = value
+        if self._minimum > self._maximum:
+            self.setMaximum(self._minimum)
+        if self._minimum > self._value:
+            self.setValue(self._minimum)
+
+    minimum = pyqtProperty(int, getMinimum, setMinimum)
+
+    def getMaximum(self):
+        return self._maximum
+
+    def setMaximum(self, value):
+        self._maximum = value
+        self._minimum = min(self._minimum, self._maximum)
+        if self._maximum < self._value:
+            self.setValue(self._maximum)
+        self.rescale()
+        self.reposition()
+
+    maximum = pyqtProperty(int, getMaximum, setMaximum)
+
+    # We provide an offset property to allow the value shown to differ from
+    # the internal value held by the widget.
+
+    def getOffset(self):
+        return self._offset
+
+    def setOffset(self, value):
+        self._offset = value
+
+    offset = pyqtProperty(int, getOffset, setOffset)
+
+    # The value property is implemented using the getValue() and setValue()
+    # methods.
+
+    def getValue(self):
+        return self._value
+
+    # The setter method for the value property can also be used as a slot.
+    @pyqtSlot(int)
+    def setValue(self, value):
+        if not self._minimum <= value <= self._maximum:
+            return
+        self._value = value
+        self.valueChanged[int].emit(value + self._offset)
+        self.valueChanged[str].emit(str(value + self._offset))
+        self.reposition()
+
+    value = pyqtProperty(int, getValue, setValue)
+
+    # Like QAbstractSpinBox, we provide stepUp() and stepDown() slots to
+    # enable the value to be incremented and decremented.
+
+    @pyqtSlot()
+    def stepUp(self):
+        self.setValue(self._value + 1)
+
+    @pyqtSlot()
+    def stepDown(self):
+        self.setValue(self._value - 1)
+
+
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+    widget = CounterLabel()
+    widget.setValue(123)
+    widget.show()
+    sys.exit(app.exec_())
diff --git a/examples/designer/plugins/widgets/datetimeedit.py b/examples/designer/plugins/widgets/datetimeedit.py
new file mode 100755
index 0000000..d1adf5a
--- /dev/null
+++ b/examples/designer/plugins/widgets/datetimeedit.py
@@ -0,0 +1,371 @@
+#!/usr/bin/env python
+
+#============================================================================#
+# (Re)Implementation of QDateEdit and QDateTimeEdit. These classes force the #
+# use of the calendar popup.                                                 #
+#----------------------------------------------------------------------------#
+# Copyright (c) 2008 by Denviso GmbH, <ulrich.berning at denviso.de>            #
+#                                                                            #
+# All Rights Reserved                                                        #
+#                                                                            #
+# Permission to use, copy, modify, and distribute this software and its      #
+# documentation for any purpose and without fee is hereby granted,           #
+# provided that the above copyright notice appear in all copies and that     #
+# both that copyright notice and this permission notice appear in            #
+# supporting documentation.                                                  #
+#                                                                            #
+# DENVISO DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS                       #
+# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY              #
+# AND FITNESS, IN NO EVENT SHALL DENVISO BE LIABLE FOR ANY                   #
+# SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES                  #
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,                    #
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER                      #
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE              #
+# OR PERFORMANCE OF THIS SOFTWARE.                                           #
+#----------------------------------------------------------------------------#
+
+from PyQt5.QtCore import pyqtProperty, Qt
+from PyQt5.QtWidgets import (QApplication, QCalendarWidget, QDateEdit,
+        QDateTimeEdit, QHBoxLayout, QWidget)
+
+
+#============================================================================#
+# PyDateEdit                                                                 #
+#----------------------------------------------------------------------------#
+class PyDateEdit(QDateEdit):
+    #
+    # Initialize base class
+    # Force use of the calendar popup
+    # Set default values for calendar properties
+    #
+    def __init__(self, *args):
+        super(PyDateEdit, self).__init__(*args)
+
+        self.setCalendarPopup(True)
+        self.__cw = None
+        self.__firstDayOfWeek = Qt.Monday
+        self.__gridVisible = False
+        self.__horizontalHeaderFormat = QCalendarWidget.ShortDayNames
+        self.__verticalHeaderFormat = QCalendarWidget.ISOWeekNumbers
+        self.__navigationBarVisible = True
+
+    #
+    # Call event handler of base class
+    # Get the calendar widget, if not already done
+    # Set the calendar properties
+    #
+    def mousePressEvent(self, event):
+        super(PyDateEdit, self).mousePressEvent(event)
+
+        if not self.__cw:
+            self.__cw = self.findChild(QCalendarWidget)
+            if self.__cw:
+                self.__cw.setFirstDayOfWeek(self.__firstDayOfWeek)
+                self.__cw.setGridVisible(self.__gridVisible)
+                self.__cw.setHorizontalHeaderFormat(self.__horizontalHeaderFormat)
+                self.__cw.setVerticalHeaderFormat(self.__verticalHeaderFormat)
+                self.__cw.setNavigationBarVisible(self.__navigationBarVisible)
+
+    #
+    # Make sure, the calendarPopup property is invisible in Designer
+    #
+    def getCalendarPopup(self):
+        return True
+    calendarPopup = pyqtProperty(bool, fget=getCalendarPopup)
+
+    #
+    # Property firstDayOfWeek: Qt::DayOfWeek
+    # Get: getFirstDayOfWeek()
+    # Set: setFirstDayOfWeek()
+    # Reset: resetFirstDayOfWeek()
+    #
+    def getFirstDayOfWeek(self):
+        return self.__firstDayOfWeek
+    def setFirstDayOfWeek(self, dayOfWeek):
+        if dayOfWeek != self.__firstDayOfWeek:
+            self.__firstDayOfWeek = dayOfWeek
+            if self.__cw:
+                self.__cw.setFirstDayOfWeek(dayOfWeek)
+    def resetFirstDayOfWeek(self):
+        if self.__firstDayOfWeek != Qt.Monday:
+            self.__firstDayOfWeek = Qt.Monday
+            if self.__cw:
+                self.__cw.setFirstDayOfWeek(Qt.Monday)
+    firstDayOfWeek = pyqtProperty(Qt.DayOfWeek,
+                                         fget=getFirstDayOfWeek,
+                                         fset=setFirstDayOfWeek,
+                                         freset=resetFirstDayOfWeek)
+
+    #
+    # Property gridVisible: bool
+    # Get: isGridVisible()
+    # Set: setGridVisible()
+    # Reset: resetGridVisible()
+    #
+    def isGridVisible(self):
+        return self.__gridVisible
+    def setGridVisible(self, show):
+        if show != self.__gridVisible:
+            self.__gridVisible = show
+            if self.__cw:
+                self.__cw.setGridVisible(show)
+    def resetGridVisible(self):
+        if self.__gridVisible != False:
+            self.__gridVisible = False
+            if self.__cw:
+                self.__cw.setGridVisible(False)
+    gridVisible = pyqtProperty(bool,
+                                      fget=isGridVisible,
+                                      fset=setGridVisible,
+                                      freset=resetGridVisible)
+
+    #
+    # Property horizontalHeaderFormat: QCalendarWidget::HorizontalHeaderFormat
+    # Get: getHorizontalHeaderFormat()
+    # Set: setHorizontalHeaderFormat()
+    # Reset: resetHorizontalHeaderFormat()
+    #
+    def getHorizontalHeaderFormat(self):
+        return self.__horizontalHeaderFormat
+    def setHorizontalHeaderFormat(self, format):
+        if format != self.__horizontalHeaderFormat:
+            self.__horizontalHeaderFormat = format
+            if self.__cw:
+                self.__cw.setHorizontalHeaderFormat(format)
+    def resetHorizontalHeaderFormat(self):
+        if self.__horizontalHeaderFormat != QCalendarWidget.ShortDayNames:
+            self.__horizontalHeaderFormat = QCalendarWidget.ShortDayNames
+            if self.__cw:
+                self.__cw.setHorizontalHeaderFormat(QCalendarWidget.ShortDayNames)
+    horizontalHeaderFormat = pyqtProperty(QCalendarWidget.HorizontalHeaderFormat,
+                                                 fget=getHorizontalHeaderFormat,
+                                                 fset=setHorizontalHeaderFormat,
+                                                 freset=resetHorizontalHeaderFormat)
+
+    #
+    # Property verticalHeaderFormat: QCalendarWidget::VerticalHeaderFormat
+    # Get: getVerticalHeaderFormat()
+    # Set: setVerticalHeaderFormat()
+    # Reset: resetVerticalHeaderFormat()
+    #
+    def getVerticalHeaderFormat(self):
+        return self.__verticalHeaderFormat
+    def setVerticalHeaderFormat(self, format):
+        if format != self.__verticalHeaderFormat:
+            self.__verticalHeaderFormat = format
+            if self.__cw:
+                self.__cw.setVerticalHeaderFormat(format)
+    def resetVerticalHeaderFormat(self):
+        if self.__verticalHeaderFormat != QCalendarWidget.ISOWeekNumbers:
+            self.__verticalHeaderFormat = QCalendarWidget.ISOWeekNumbers
+            if self.__cw:
+                self.__cw.setVerticalHeaderFormat(QCalendarWidget.ISOWeekNumbers)
+    verticalHeaderFormat = pyqtProperty(QCalendarWidget.VerticalHeaderFormat,
+                                               fget=getVerticalHeaderFormat,
+                                               fset=setVerticalHeaderFormat,
+                                               freset=resetVerticalHeaderFormat)
+
+    #
+    # Property navigationBarVisible: bool
+    # Get: isNavigationBarVisible()
+    # Set: setNavigationBarVisible()
+    # Reset: resetNavigationBarVisible()
+    #
+    def isNavigationBarVisible(self):
+        return self.__navigationBarVisible
+    def setNavigationBarVisible(self, visible):
+        if visible != self.__navigationBarVisible:
+            self.__navigationBarVisible = visible
+            if self.__cw:
+                self.__cw.setNavigationBarVisible(visible)
+    def resetNavigationBarVisible(self):
+        if self.__navigationBarVisible != True:
+            self.__navigationBarVisible = True
+            if self.__cw:
+                self.__cw.setNavigationBarVisible(True)
+    navigationBarVisible = pyqtProperty(bool,
+                                               fget=isNavigationBarVisible,
+                                               fset=setNavigationBarVisible,
+                                               freset=resetNavigationBarVisible)
+
+
+#============================================================================#
+# PyDateTimeEdit                                                             #
+#----------------------------------------------------------------------------#
+class PyDateTimeEdit(QDateTimeEdit):
+    #
+    # Initialize base class
+    # Force use of the calendar popup
+    # Set default values for calendar properties
+    #
+    def __init__(self, *args):
+        super(PyDateTimeEdit, self).__init__(*args)
+
+        self.setCalendarPopup(True)
+        self.__cw = None
+        self.__firstDayOfWeek = Qt.Monday
+        self.__gridVisible = False
+        self.__horizontalHeaderFormat = QCalendarWidget.ShortDayNames
+        self.__verticalHeaderFormat = QCalendarWidget.ISOWeekNumbers
+        self.__navigationBarVisible = True
+
+    #
+    # Call event handler of base class
+    # Get the calendar widget, if not already done
+    # Set the calendar properties
+    #
+    def mousePressEvent(self, event):
+        super(PyDateTimeEdit, self).mousePressEvent(event)
+
+        if not self.__cw:
+            self.__cw = self.findChild(QCalendarWidget)
+            if self.__cw:
+                self.__cw.setFirstDayOfWeek(self.__firstDayOfWeek)
+                self.__cw.setGridVisible(self.__gridVisible)
+                self.__cw.setHorizontalHeaderFormat(self.__horizontalHeaderFormat)
+                self.__cw.setVerticalHeaderFormat(self.__verticalHeaderFormat)
+                self.__cw.setNavigationBarVisible(self.__navigationBarVisible)
+
+    #
+    # Make sure, the calendarPopup property is invisible in Designer
+    #
+    def getCalendarPopup(self):
+        return True
+    calendarPopup = pyqtProperty(bool, fget=getCalendarPopup)
+
+    #
+    # Property firstDayOfWeek: Qt::DayOfWeek
+    # Get: getFirstDayOfWeek()
+    # Set: setFirstDayOfWeek()
+    # Reset: resetFirstDayOfWeek()
+    #
+    def getFirstDayOfWeek(self):
+        return self.__firstDayOfWeek
+    def setFirstDayOfWeek(self, dayOfWeek):
+        if dayOfWeek != self.__firstDayOfWeek:
+            self.__firstDayOfWeek = dayOfWeek
+            if self.__cw:
+                self.__cw.setFirstDayOfWeek(dayOfWeek)
+    def resetFirstDayOfWeek(self):
+        if self.__firstDayOfWeek != Qt.Monday:
+            self.__firstDayOfWeek = Qt.Monday
+            if self.__cw:
+                self.__cw.setFirstDayOfWeek(Qt.Monday)
+    firstDayOfWeek = pyqtProperty(Qt.DayOfWeek,
+                                         fget=getFirstDayOfWeek,
+                                         fset=setFirstDayOfWeek,
+                                         freset=resetFirstDayOfWeek)
+
+    #
+    # Property gridVisible: bool
+    # Get: isGridVisible()
+    # Set: setGridVisible()
+    # Reset: resetGridVisible()
+    #
+    def isGridVisible(self):
+        return self.__gridVisible
+    def setGridVisible(self, show):
+        if show != self.__gridVisible:
+            self.__gridVisible = show
+            if self.__cw:
+                self.__cw.setGridVisible(show)
+    def resetGridVisible(self):
+        if self.__gridVisible != False:
+            self.__gridVisible = False
+            if self.__cw:
+                self.__cw.setGridVisible(False)
+    gridVisible = pyqtProperty(bool,
+                                      fget=isGridVisible,
+                                      fset=setGridVisible,
+                                      freset=resetGridVisible)
+
+    #
+    # Property horizontalHeaderFormat: QCalendarWidget::HorizontalHeaderFormat
+    # Get: getHorizontalHeaderFormat()
+    # Set: setHorizontalHeaderFormat()
+    # Reset: resetHorizontalHeaderFormat()
+    #
+    def getHorizontalHeaderFormat(self):
+        return self.__horizontalHeaderFormat
+    def setHorizontalHeaderFormat(self, format):
+        if format != self.__horizontalHeaderFormat:
+            self.__horizontalHeaderFormat = format
+            if self.__cw:
+                self.__cw.setHorizontalHeaderFormat(format)
+    def resetHorizontalHeaderFormat(self):
+        if self.__horizontalHeaderFormat != QCalendarWidget.ShortDayNames:
+            self.__horizontalHeaderFormat = QCalendarWidget.ShortDayNames
+            if self.__cw:
+                self.__cw.setHorizontalHeaderFormat(QCalendarWidget.ShortDayNames)
+    horizontalHeaderFormat = pyqtProperty(QCalendarWidget.HorizontalHeaderFormat,
+                                                 fget=getHorizontalHeaderFormat,
+                                                 fset=setHorizontalHeaderFormat,
+                                                 freset=resetHorizontalHeaderFormat)
+
+    #
+    # Property verticalHeaderFormat: QCalendarWidget::VerticalHeaderFormat
+    # Get: getVerticalHeaderFormat()
+    # Set: setVerticalHeaderFormat()
+    # Reset: resetVerticalHeaderFormat()
+    #
+    def getVerticalHeaderFormat(self):
+        return self.__verticalHeaderFormat
+    def setVerticalHeaderFormat(self, format):
+        if format != self.__verticalHeaderFormat:
+            self.__verticalHeaderFormat = format
+            if self.__cw:
+                self.__cw.setVerticalHeaderFormat(format)
+    def resetVerticalHeaderFormat(self):
+        if self.__verticalHeaderFormat != QCalendarWidget.ISOWeekNumbers:
+            self.__verticalHeaderFormat = QCalendarWidget.ISOWeekNumbers
+            if self.__cw:
+                self.__cw.setVerticalHeaderFormat(QCalendarWidget.ISOWeekNumbers)
+    verticalHeaderFormat = pyqtProperty(QCalendarWidget.VerticalHeaderFormat,
+                                               fget=getVerticalHeaderFormat,
+                                               fset=setVerticalHeaderFormat,
+                                               freset=resetVerticalHeaderFormat)
+
+    #
+    # Property navigationBarVisible: bool
+    # Get: isNavigationBarVisible()
+    # Set: setNavigationBarVisible()
+    # Reset: resetNavigationBarVisible()
+    #
+    def isNavigationBarVisible(self):
+        return self.__navigationBarVisible
+    def setNavigationBarVisible(self, visible):
+        if visible != self.__navigationBarVisible:
+            self.__navigationBarVisible = visible
+            if self.__cw:
+                self.__cw.setNavigationBarVisible(visible)
+    def resetNavigationBarVisible(self):
+        if self.__navigationBarVisible != True:
+            self.__navigationBarVisible = True
+            if self.__cw:
+                self.__cw.setNavigationBarVisible(True)
+    navigationBarVisible = pyqtProperty(bool,
+                                               fget=isNavigationBarVisible,
+                                               fset=setNavigationBarVisible,
+                                               freset=resetNavigationBarVisible)
+
+
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    w = QWidget()
+    lay = QHBoxLayout()
+
+    lay.addWidget(PyDateEdit())
+    lay.addWidget(PyDateTimeEdit())
+
+    w.setLayout(lay)
+    w.show()
+
+    sys.exit(app.exec_())
+
+#============================================================================#
+# EOF                                                                        #
+#----------------------------------------------------------------------------#
diff --git a/examples/designer/plugins/widgets/helloglwidget.py b/examples/designer/plugins/widgets/helloglwidget.py
new file mode 100755
index 0000000..915089f
--- /dev/null
+++ b/examples/designer/plugins/widgets/helloglwidget.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python
+
+"""
+helloglwidget.py
+
+A simple OpenGL custom widget for Qt Designer.
+
+Copyright (C) 2007 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+import math
+from OpenGL import GL
+
+from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QPoint, QSize, Qt
+from PyQt5.QtGui import QColor
+from PyQt5.QtWidgets import QApplication
+from PyQt5.QtOpenGL import QGLWidget
+
+
+class HelloGLWidget(QGLWidget):
+    """HelloGLWidget(QGLWidget)
+
+    Provides a custom widget to display an OpenGL-rendered Qt logo.
+    Various properties and slots are defined so that the user can rotate
+    the logo, and signals are defined to enable other components to
+    react to changes to its orientation.
+    """
+
+    # We define three signals that are used to indicate changes to the
+    # rotation of the logo.
+    xRotationChanged = pyqtSignal(int)
+    yRotationChanged = pyqtSignal(int)
+    zRotationChanged = pyqtSignal(int)
+
+    def __init__(self, parent=None):
+        super(HelloGLWidget, self).__init__(parent)
+
+        self.object = 0
+        self.xRot = 0
+        self.yRot = 0
+        self.zRot = 0
+
+        self.lastPos = QPoint()
+
+        self.trolltechGreen = QColor.fromCmykF(0.40, 0.0, 1.0, 0.0)
+        self.trolltechPurple = QColor.fromCmykF(0.39, 0.39, 0.0, 0.0)
+
+        self.setWindowTitle("Hello GL")
+
+    # The rotation of the logo about the x-axis can be controlled using the
+    # xRotation property, defined using the following getter and setter
+    # methods.
+
+    def getXRotation(self):
+        return self.xRot
+
+    # The setXRotation() setter method is also a slot.
+    @pyqtSlot(int)
+    def setXRotation(self, angle):
+        angle = self.normalizeAngle(angle)
+        if angle != self.xRot:
+            self.xRot = angle
+            self.xRotationChanged.emit(angle)
+            self.updateGL()
+
+    xRotation = pyqtProperty(int, getXRotation, setXRotation)
+
+    # The rotation of the logo about the y-axis can be controlled using the
+    # yRotation property, defined using the following getter and setter
+    # methods.
+
+    def getYRotation(self):
+        return self.yRot
+
+    # The setYRotation() setter method is also a slot.
+    @pyqtSlot(int)
+    def setYRotation(self, angle):
+        angle = self.normalizeAngle(angle)
+        if angle != self.yRot:
+            self.yRot = angle
+            self.yRotationChanged.emit(angle)
+            self.updateGL()
+
+    yRotation = pyqtProperty(int, getYRotation, setYRotation)
+
+    # The rotation of the logo about the z-axis can be controlled using the
+    # zRotation property, defined using the following getter and setter
+    # methods.
+
+    def getZRotation(self):
+        return self.zRot
+
+    # The setZRotation() setter method is also a slot.
+    @pyqtSlot(int)
+    def setZRotation(self, angle):
+        angle = self.normalizeAngle(angle)
+        if angle != self.zRot:
+            self.zRot = angle
+            self.zRotationChanged.emit(angle)
+            self.updateGL()
+
+    zRotation = pyqtProperty(int, getZRotation, setZRotation)
+
+    def minimumSizeHint(self):
+        return QSize(50, 50)
+
+    def sizeHint(self):
+        return QSize(200, 200)
+
+    def initializeGL(self):
+        self.qglClearColor(self.trolltechPurple.darker())
+        self.object = self.makeObject()
+        GL.glShadeModel(GL.GL_SMOOTH)
+        GL.glEnable(GL.GL_DEPTH_TEST)
+        GL.glEnable(GL.GL_CULL_FACE)
+
+    def paintGL(self):
+        GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT)
+        GL.glLoadIdentity()
+        GL.glTranslated(0.0, 0.0, -10.0)
+        GL.glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0)
+        GL.glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0)
+        GL.glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0)
+        GL.glCallList(self.object)
+
+    def resizeGL(self, width, height):
+        side = min(width, height)
+        GL.glViewport((width - side) / 2, (height - side) / 2, side, side)
+
+        GL.glMatrixMode(GL.GL_PROJECTION)
+        GL.glLoadIdentity()
+        GL.glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0)
+        GL.glMatrixMode(GL.GL_MODELVIEW)
+
+    def mousePressEvent(self, event):
+        self.lastPos = QPoint(event.pos())
+
+    def mouseMoveEvent(self, event):
+        dx = event.x() - self.lastPos.x()
+        dy = event.y() - self.lastPos.y()
+
+        if event.buttons() & Qt.LeftButton:
+            self.setXRotation(self.xRot + 8 * dy)
+            self.setYRotation(self.yRot + 8 * dx)
+        elif event.buttons() & Qt.RightButton:
+            self.setXRotation(self.xRot + 8 * dy)
+            self.setZRotation(self.zRot + 8 * dx)
+
+        self.lastPos = QPoint(event.pos())
+
+    def makeObject(self):
+        genList = GL.glGenLists(1)
+        GL.glNewList(genList, GL.GL_COMPILE)
+
+        GL.glBegin(GL.GL_QUADS)
+
+        x1 = +0.06
+        y1 = -0.14
+        x2 = +0.14
+        y2 = -0.06
+        x3 = +0.08
+        y3 = +0.00
+        x4 = +0.30
+        y4 = +0.22
+
+        self.quad(x1, y1, x2, y2, y2, x2, y1, x1)
+        self.quad(x3, y3, x4, y4, y4, x4, y3, x3)
+
+        self.extrude(x1, y1, x2, y2)
+        self.extrude(x2, y2, y2, x2)
+        self.extrude(y2, x2, y1, x1)
+        self.extrude(y1, x1, x1, y1)
+        self.extrude(x3, y3, x4, y4)
+        self.extrude(x4, y4, y4, x4)
+        self.extrude(y4, x4, y3, x3)
+
+        Pi = 3.14159265358979323846
+        NumSectors = 200
+
+        for i in range(NumSectors):
+            angle1 = (i * 2 * Pi) / NumSectors
+            x5 = 0.30 * math.sin(angle1)
+            y5 = 0.30 * math.cos(angle1)
+            x6 = 0.20 * math.sin(angle1)
+            y6 = 0.20 * math.cos(angle1)
+
+            angle2 = ((i + 1) * 2 * Pi) / NumSectors
+            x7 = 0.20 * math.sin(angle2)
+            y7 = 0.20 * math.cos(angle2)
+            x8 = 0.30 * math.sin(angle2)
+            y8 = 0.30 * math.cos(angle2)
+
+            self.quad(x5, y5, x6, y6, x7, y7, x8, y8)
+
+            self.extrude(x6, y6, x7, y7)
+            self.extrude(x8, y8, x5, y5)
+
+        GL.glEnd()
+        GL.glEndList()
+
+        return genList
+
+    def quad(self, x1, y1, x2, y2, x3, y3, x4, y4):
+        self.qglColor(self.trolltechGreen)
+
+        GL.glVertex3d(x1, y1, -0.05)
+        GL.glVertex3d(x2, y2, -0.05)
+        GL.glVertex3d(x3, y3, -0.05)
+        GL.glVertex3d(x4, y4, -0.05)
+
+        GL.glVertex3d(x4, y4, +0.05)
+        GL.glVertex3d(x3, y3, +0.05)
+        GL.glVertex3d(x2, y2, +0.05)
+        GL.glVertex3d(x1, y1, +0.05)
+
+    def extrude(self, x1, y1, x2, y2):
+        self.qglColor(self.trolltechGreen.darker(250 + int(100 * x1)))
+
+        GL.glVertex3d(x1, y1, +0.05)
+        GL.glVertex3d(x2, y2, +0.05)
+        GL.glVertex3d(x2, y2, -0.05)
+        GL.glVertex3d(x1, y1, -0.05)
+
+    def normalizeAngle(self, angle):
+        while angle < 0:
+            angle += 360 * 16
+        while angle > 360 * 16:
+            angle -= 360 * 16
+        return angle
+
+
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+    widget = HelloGLWidget()
+    widget.show()
+    sys.exit(app.exec_())
diff --git a/examples/designer/plugins/widgets/multipagewidget.py b/examples/designer/plugins/widgets/multipagewidget.py
new file mode 100755
index 0000000..4d7c2a4
--- /dev/null
+++ b/examples/designer/plugins/widgets/multipagewidget.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+
+#============================================================================#
+# PyQt5 port of the designer/containerextension example from Qt v5.x         #
+#----------------------------------------------------------------------------#
+from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QSize
+from PyQt5.QtWidgets import (QApplication, QComboBox, QLabel, QStackedWidget,
+        QVBoxLayout, QWidget)
+
+
+#============================================================================#
+# Implementation of a MultiPageWidget using a QComboBox and a QStackedWidget #
+#----------------------------------------------------------------------------#
+class PyMultiPageWidget(QWidget):
+
+    currentIndexChanged = pyqtSignal(int)
+
+    pageTitleChanged = pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super(PyMultiPageWidget, self).__init__(parent)
+
+        self.comboBox = QComboBox()
+        # MAGIC
+        # It is important that the combo box has an object name beginning
+        # with '__qt__passive_', otherwise, it is inactive in the form editor
+        # of the designer and you can't change the current page via the
+        # combo box.
+        # MAGIC
+        self.comboBox.setObjectName('__qt__passive_comboBox')        
+        self.stackWidget = QStackedWidget()
+        self.comboBox.activated.connect(self.setCurrentIndex)
+        self.layout = QVBoxLayout()
+        self.layout.addWidget(self.comboBox)
+        self.layout.addWidget(self.stackWidget)
+        self.setLayout(self.layout)
+
+    def sizeHint(self):
+        return QSize(200, 150)
+
+    def count(self):
+        return self.stackWidget.count()
+
+    def widget(self, index):
+        return self.stackWidget.widget(index)
+
+    @pyqtSlot(QWidget)
+    def addPage(self, page):
+        self.insertPage(self.count(), page)
+
+    @pyqtSlot(int, QWidget)
+    def insertPage(self, index, page):
+        page.setParent(self.stackWidget)
+        self.stackWidget.insertWidget(index, page)
+        title = page.windowTitle()
+        if title == "":
+            title = "Page %d" % (self.comboBox.count() + 1)
+            page.setWindowTitle(title)
+        self.comboBox.insertItem(index, title)
+
+    @pyqtSlot(int)
+    def removePage(self, index):
+        widget = self.stackWidget.widget(index)
+        self.stackWidget.removeWidget(widget)
+        self.comboBox.removeItem(index)
+
+    def getPageTitle(self):
+        return self.stackWidget.currentWidget().windowTitle()
+    
+    @pyqtSlot(str)
+    def setPageTitle(self, newTitle):
+        self.comboBox.setItemText(self.getCurrentIndex(), newTitle)
+        self.stackWidget.currentWidget().setWindowTitle(newTitle)
+        self.pageTitleChanged.emit(newTitle)
+
+    def getCurrentIndex(self):
+        return self.stackWidget.currentIndex()
+
+    @pyqtSlot(int)
+    def setCurrentIndex(self, index):
+        if index != self.getCurrentIndex():
+            self.stackWidget.setCurrentIndex(index)
+            self.comboBox.setCurrentIndex(index)
+            self.currentIndexChanged.emit(index)
+
+    pageTitle = pyqtProperty(str, fget=getPageTitle, fset=setPageTitle, stored=False)
+    currentIndex = pyqtProperty(int, fget=getCurrentIndex, fset=setCurrentIndex)
+
+
+#============================================================================#
+# Main for testing the class                                                 #
+#----------------------------------------------------------------------------#
+if __name__ == "__main__":
+    import sys
+    app = QApplication(sys.argv)
+    widget = PyMultiPageWidget()
+    widget.addPage(QLabel('This is page #1'))
+    widget.addPage(QLabel('This is page #2'))
+    widget.show()
+    sys.exit(app.exec_())
+
+#============================================================================#
+# EOF                                                                        #
+#----------------------------------------------------------------------------#
diff --git a/examples/designer/plugins/widgets/polygonwidget.py b/examples/designer/plugins/widgets/polygonwidget.py
new file mode 100755
index 0000000..7f01276
--- /dev/null
+++ b/examples/designer/plugins/widgets/polygonwidget.py
@@ -0,0 +1,192 @@
+#!/usr/bin/env python
+
+"""
+polygonwidget.py
+
+A PyQt custom widget example for Qt Designer.
+
+Copyright (C) 2006 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+import math
+
+from PyQt5.QtCore import pyqtProperty, pyqtSlot, QPointF, QSize
+from PyQt5.QtGui import QBrush, QColor, QPainter, QPainterPath, QRadialGradient
+from PyQt5.QtWidgets import QApplication, QWidget
+
+
+class PolygonWidget(QWidget):
+    """PolygonWidget(QWidget)
+    
+    Provides a custom widget to display a polygon with properties and slots
+    that can be used to customize its appearance.
+    """
+    
+    def __init__(self, parent=None):
+    
+        super(PolygonWidget, self).__init__(parent)
+        
+        self._sides = 5
+        self._innerRadius = 20
+        self._outerRadius = 50
+        self._angle = 0
+        
+        self.createPath()
+        
+        self._innerColor = QColor(255, 255, 128)
+        self._outerColor = QColor(255, 0, 128)
+        
+        self.createGradient()
+    
+    def paintEvent(self, event):
+    
+        painter = QPainter()
+        painter.begin(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.setBrush(QBrush(QColor(192, 192, 255)))
+        painter.drawRect(event.rect())
+        
+        painter.translate(self.width()/2.0, self.height()/2.0)
+        painter.rotate(self._angle)
+        painter.setBrush(QBrush(self.gradient))
+        painter.drawPath(self.path)
+        painter.end()
+    
+    def sizeHint(self):
+    
+        return QSize(2*self._outerRadius + 20, 2*self._outerRadius + 20)
+    
+    def createPath(self):
+    
+        self.path = QPainterPath()
+        angle = 2*math.pi/self._sides
+        self.path.moveTo(self._outerRadius, 0)
+        for step in range(1, self._sides + 1):
+            self.path.lineTo(
+                self._innerRadius * math.cos((step - 0.5) * angle),
+                self._innerRadius * math.sin((step - 0.5) * angle)
+                )
+            self.path.lineTo(
+                self._outerRadius * math.cos(step * angle),
+                self._outerRadius * math.sin(step * angle)
+                )
+        self.path.closeSubpath()
+    
+    def createGradient(self):
+    
+        center = QPointF(0, 0)
+        self.gradient = QRadialGradient(center, self._outerRadius, center)
+        self.gradient.setColorAt(0.5, QColor(self._innerColor))
+        self.gradient.setColorAt(1.0, QColor(self._outerColor))
+    
+    # The angle property is implemented using the getAngle() and setAngle()
+    # methods.
+    
+    def getAngle(self):
+        return self._angle
+    
+    # The setAngle() setter method is also a slot.
+    @pyqtSlot(int)
+    def setAngle(self, angle):
+        self._angle = min(max(0, angle), 360)
+        self.update()
+    
+    angle = pyqtProperty(int, getAngle, setAngle)
+    
+    # The innerRadius property is implemented using the getInnerRadius() and
+    # setInnerRadius() methods.
+    
+    def getInnerRadius(self):
+        return self._innerRadius
+    
+    # The setInnerRadius() setter method is also a slot.
+    @pyqtSlot(int)
+    def setInnerRadius(self, radius):
+        self._innerRadius = radius
+        self.createPath()
+        self.createGradient()
+        self.update()
+    
+    innerRadius = pyqtProperty(int, getInnerRadius, setInnerRadius)
+    
+    # The outerRadius property is implemented using the getOuterRadius() and
+    # setOuterRadius() methods.
+    
+    def getOuterRadius(self):
+        return self._outerRadius
+    
+    # The setOuterRadius() setter method is also a slot.
+    @pyqtSlot(int)
+    def setOuterRadius(self, radius):
+        self._outerRadius = radius
+        self.createPath()
+        self.createGradient()
+        self.update()
+    
+    outerRadius = pyqtProperty(int, getOuterRadius, setOuterRadius)
+    
+    # The numberOfSides property is implemented using the getNumberOfSides()
+    # and setNumberOfSides() methods.
+    
+    def getNumberOfSides(self):
+        return self._sides
+    
+    # The setNumberOfSides() setter method is also a slot.
+    @pyqtSlot(int)
+    def setNumberOfSides(self, sides):
+        self._sides = max(3, sides)
+        self.createPath()
+        self.update()
+    
+    numberOfSides = pyqtProperty(int, getNumberOfSides, setNumberOfSides)
+    
+    # The innerColor property is implemented using the getInnerColor() and
+    # setInnerColor() methods.
+    
+    def getInnerColor(self):
+        return self._innerColor
+    
+    def setInnerColor(self, color):
+        self._innerColor = max(3, color)
+        self.createGradient()
+        self.update()
+    
+    innerColor = pyqtProperty(QColor, getInnerColor, setInnerColor)
+    
+    # The outerColor property is implemented using the getOuterColor() and
+    # setOuterColor() methods.
+    
+    def getOuterColor(self):
+        return self._outerColor
+    
+    def setOuterColor(self, color):
+        self._outerColor = color
+        self.createGradient()
+        self.update()
+    
+    outerColor = pyqtProperty(QColor, getOuterColor, setOuterColor)
+
+
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = PolygonWidget()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/designer/plugins/widgets/pydemo.py b/examples/designer/plugins/widgets/pydemo.py
new file mode 100755
index 0000000..18beddf
--- /dev/null
+++ b/examples/designer/plugins/widgets/pydemo.py
@@ -0,0 +1,156 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Riverbank Computing Limited nor the names of
+##     its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot
+from PyQt5.QtWidgets import QApplication, QTextEdit
+
+
+# The purpose of this class is to show that Designer's property editor shows
+# all Python classes in the hierarchy that define properties.
+class PyTextViewer(QTextEdit):
+
+    # Initialise the instance.
+    def __init__(self, parent=None):
+        super(PyTextViewer, self).__init__(parent)
+
+        self.setReadOnly(True)
+
+        # Initialise the author property by calling it's reset function.
+        self.resetAuthor()
+
+    # The getter for the author property.  Note that we cannot follow the Qt
+    # naming convention (ie. by using the naming the getter "author") because
+    # it would conflict with the property name.
+    def getAuthor(self):
+        return self._author
+
+    # The setter for the author property.
+    def setAuthor(self, name):
+        self._author = name
+
+    # The resetter for the author property.  Only Qt Designer uses this.  Qt
+    # Designer does not use the deleter function of the property.
+    def resetAuthor(self):
+        self._author = "David Boddie"
+
+    # Define the author property.  This will look like a C++ property to Qt
+    # Designer and a Python property to Python.
+    author = pyqtProperty(str, getAuthor, setAuthor, resetAuthor)
+
+
+# This is the class that implements the custom widget.
+class PyDemo(PyTextViewer):
+
+    # Define the Qt signals as a sequence of C++ function signatures excluding
+    # the return type.  These may be connected to other signals or slots in Qt
+    # Designer.
+    zoomChanged = pyqtSignal(int)
+
+    # Initialise the instance.
+    def __init__(self, parent=None):
+        super(PyDemo, self).__init__(parent)
+
+        self.setWindowTitle("PyQt Demonstration Widget")
+        self.setText(_demo_text)
+
+        # Initialise the zoom property.  We don't just call the resetter
+        # because it assumes that this has already been initialised.
+        self._zoom = 0
+
+    # The getter for the zoom property.
+    def getZoom(self):
+        return self._zoom
+
+    # The setter for the zoom property.  We also make define this as a Qt slot
+    # which can be connected to Qt signals in Qt Designer.
+    @pyqtSlot(int)
+    def setZoom(self, zoom):
+        # Don't do anything if nothing has changed.
+        if self._zoom == zoom:
+            return
+
+        # Zoom in or out according to the relative zoom levels.
+        if self._zoom < zoom:
+            self.zoomIn(zoom - self._zoom)
+        elif self._zoom > zoom:
+            self.zoomOut(self._zoom - zoom)
+
+        # Remember the new zoom level.
+        self._zoom = zoom
+
+        # Emit the Qt signal to say that the zoom level has changed.
+        self.zoomChanged.emit(zoom)
+
+    # The resetter for the zoom property.
+    def resetZoom(self):
+        self.setZoom(0)
+
+    # Define the zoom property.  Changing the value of this in Qt Designer's
+    # property editor causes the zoom level to change dynamically.
+    zoom = pyqtProperty(int, getZoom, setZoom, resetZoom)
+
+
+# The text displayed in the custom widget.
+_demo_text = """<h3>PyQt Demonstration Widget</h3>
+<p>This simple example demonstrates the following features.</p>
+<ul>
+ <li>The definition of properties that behave as C++ properties to Qt and
+     Python properties to Python.</li>
+ <li>The definition of new Qt signals that can be connected to other signals
+     and Qt slots in Designer.</li>
+ <li>The definition of new Qt slots that can be connected to signals in
+     Designer.</li>
+</ul>
+"""
+
+
+# Display the custom widget if the script is being run directly from the
+# command line.
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    demo = PyDemo()
+    demo.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/designer/plugins/widgets/pythonconsolewidget.py b/examples/designer/plugins/widgets/pythonconsolewidget.py
new file mode 100755
index 0000000..25182d3
--- /dev/null
+++ b/examples/designer/plugins/widgets/pythonconsolewidget.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+
+"""
+pythonconsolewidget.py
+
+A Python console custom widget for Qt Designer.
+
+Copyright (C) 2006 David Boddie <david at boddie.org.uk>
+Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+"""
+
+from PyQt5.QtCore import pyqtSignal, QEvent, Qt
+from PyQt5.QtWidgets import QApplication, QLineEdit
+
+
+class PythonConsoleWidget(QLineEdit):
+    """PythonConsoleWidget(QLineEdit)
+    
+    Provides a custom widget to accept Python expressions and emit output
+    to other components via a custom signal.
+    """
+    
+    pythonOutput = pyqtSignal(str)
+    
+    def __init__(self, parent=None):
+    
+        super(PythonConsoleWidget, self).__init__(parent)
+        
+        self.history = []
+        self.current = -1
+        
+        self.returnPressed.connect(self.execute)
+    
+    def keyReleaseEvent(self, event):
+    
+        if event.type() == QEvent.KeyRelease:
+        
+            if event.key() == Qt.Key_Up:
+                current = max(0, self.current - 1)
+                if 0 <= current < len(self.history):
+                    self.setText(self.history[current])
+                    self.current = current
+                
+                event.accept()
+            
+            elif event.key() == Qt.Key_Down:
+                current = min(len(self.history), self.current + 1)
+                if 0 <= current < len(self.history):
+                    self.setText(self.history[current])
+                else:
+                    self.clear()
+                self.current = current
+                
+                event.accept()
+    
+    def execute(self):
+    
+        # Define this here to give users something to look at.
+        qApp = QApplication.instance()
+        
+        self.expression = self.text()
+        try:
+            result = str(eval(str(self.expression)))
+            
+            # Emit the result of the evaluated expression.
+            self.pythonOutput.emit(result)
+
+            # Clear the line edit, append the successful expression to the
+            # history, and update the current command index.
+            self.clear()
+            self.history.append(self.expression)
+            self.current = len(self.history)
+        except:
+            pass
+
+
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+    widget = PythonConsoleWidget()
+    widget.show()
+    sys.exit(app.exec_())
diff --git a/examples/desktop/README b/examples/desktop/README
new file mode 100644
index 0000000..ae4eb4e
--- /dev/null
+++ b/examples/desktop/README
@@ -0,0 +1,27 @@
+PyQt provides features to enable applications to integrate with the user's
+preferred desktop environment.
+
+Features such as system tray icons, access to the desktop widget, and
+support for desktop services can be used to improve the appearance of
+applications and take advantage of underlying desktop facilities.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/desktop/screenshot.py b/examples/desktop/screenshot.py
new file mode 100755
index 0000000..e959a84
--- /dev/null
+++ b/examples/desktop/screenshot.py
@@ -0,0 +1,173 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDir, Qt, QTimer
+from PyQt5.QtGui import QPixmap
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QFileDialog, QGridLayout,
+        QGroupBox, QHBoxLayout, QLabel, QPushButton, QSizePolicy, QSpinBox,
+        QVBoxLayout, QWidget)
+
+
+class Screenshot(QWidget):
+    def __init__(self):
+        super(Screenshot, self).__init__()
+
+        self.screenshotLabel = QLabel()
+        self.screenshotLabel.setSizePolicy(QSizePolicy.Expanding,
+                QSizePolicy.Expanding)
+        self.screenshotLabel.setAlignment(Qt.AlignCenter)
+        self.screenshotLabel.setMinimumSize(240, 160)
+
+        self.createOptionsGroupBox()
+        self.createButtonsLayout()
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.screenshotLabel)
+        mainLayout.addWidget(self.optionsGroupBox)
+        mainLayout.addLayout(self.buttonsLayout)
+        self.setLayout(mainLayout)
+
+        self.shootScreen()
+        self.delaySpinBox.setValue(5)
+
+        self.setWindowTitle("Screenshot")
+        self.resize(300, 200)
+
+    def resizeEvent(self, event):
+        scaledSize = self.originalPixmap.size()
+        scaledSize.scale(self.screenshotLabel.size(), Qt.KeepAspectRatio)
+        if not self.screenshotLabel.pixmap() or scaledSize != self.screenshotLabel.pixmap().size():
+            self.updateScreenshotLabel()
+
+    def newScreenshot(self):
+        if self.hideThisWindowCheckBox.isChecked():
+            self.hide()
+        self.newScreenshotButton.setDisabled(True)
+
+        QTimer.singleShot(self.delaySpinBox.value() * 1000,
+                self.shootScreen)
+
+    def saveScreenshot(self):
+        format = 'png'
+        initialPath = QDir.currentPath() + "/untitled." + format
+
+        fileName, _ = QFileDialog.getSaveFileName(self, "Save As", initialPath,
+                "%s Files (*.%s);;All Files (*)" % (format.upper(), format))
+        if fileName:
+            self.originalPixmap.save(fileName, format)
+
+    def shootScreen(self):
+        if self.delaySpinBox.value() != 0:
+            QApplication.instance().beep()
+
+        screen = QApplication.primaryScreen()
+        if screen is not None:
+            self.originalPixmap = screen.grabWindow(0)
+        else:
+            self.originalPixmap = QPixmap()
+
+        self.updateScreenshotLabel()
+
+        self.newScreenshotButton.setDisabled(False)
+        if self.hideThisWindowCheckBox.isChecked():
+            self.show()
+
+    def updateCheckBox(self):
+        if self.delaySpinBox.value() == 0:
+            self.hideThisWindowCheckBox.setDisabled(True)
+        else:
+            self.hideThisWindowCheckBox.setDisabled(False)
+
+    def createOptionsGroupBox(self):
+        self.optionsGroupBox = QGroupBox("Options")
+
+        self.delaySpinBox = QSpinBox()
+        self.delaySpinBox.setSuffix(" s")
+        self.delaySpinBox.setMaximum(60)
+        self.delaySpinBox.valueChanged.connect(self.updateCheckBox)
+
+        self.delaySpinBoxLabel = QLabel("Screenshot Delay:")
+
+        self.hideThisWindowCheckBox = QCheckBox("Hide This Window")
+
+        optionsGroupBoxLayout = QGridLayout()
+        optionsGroupBoxLayout.addWidget(self.delaySpinBoxLabel, 0, 0)
+        optionsGroupBoxLayout.addWidget(self.delaySpinBox, 0, 1)
+        optionsGroupBoxLayout.addWidget(self.hideThisWindowCheckBox, 1, 0, 1, 2)
+        self.optionsGroupBox.setLayout(optionsGroupBoxLayout)
+
+    def createButtonsLayout(self):
+        self.newScreenshotButton = self.createButton("New Screenshot",
+                self.newScreenshot)
+
+        self.saveScreenshotButton = self.createButton("Save Screenshot",
+                self.saveScreenshot)
+
+        self.quitScreenshotButton = self.createButton("Quit", self.close)
+
+        self.buttonsLayout = QHBoxLayout()
+        self.buttonsLayout.addStretch()
+        self.buttonsLayout.addWidget(self.newScreenshotButton)
+        self.buttonsLayout.addWidget(self.saveScreenshotButton)
+        self.buttonsLayout.addWidget(self.quitScreenshotButton)
+
+    def createButton(self, text, member):
+        button = QPushButton(text)
+        button.clicked.connect(member)
+        return button
+
+    def updateScreenshotLabel(self):
+        self.screenshotLabel.setPixmap(self.originalPixmap.scaled(
+                self.screenshotLabel.size(), Qt.KeepAspectRatio,
+                Qt.SmoothTransformation))
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    screenshot = Screenshot()
+    screenshot.show()
+    sys.exit(app.exec_())
diff --git a/examples/desktop/systray/images/bad.png b/examples/desktop/systray/images/bad.png
new file mode 100644
index 0000000..c8701a2
Binary files /dev/null and b/examples/desktop/systray/images/bad.png differ
diff --git a/examples/desktop/systray/images/heart.png b/examples/desktop/systray/images/heart.png
new file mode 100644
index 0000000..cee1302
Binary files /dev/null and b/examples/desktop/systray/images/heart.png differ
diff --git a/examples/desktop/systray/images/trash.png b/examples/desktop/systray/images/trash.png
new file mode 100644
index 0000000..4c24db9
Binary files /dev/null and b/examples/desktop/systray/images/trash.png differ
diff --git a/examples/desktop/systray/systray.py b/examples/desktop/systray/systray.py
new file mode 100755
index 0000000..0e20ad6
--- /dev/null
+++ b/examples/desktop/systray/systray.py
@@ -0,0 +1,237 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtGui import QIcon
+from PyQt5.QtWidgets import (QAction, QApplication, QCheckBox, QComboBox,
+        QDialog, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
+        QMessageBox, QMenu, QPushButton, QSpinBox, QStyle, QSystemTrayIcon,
+        QTextEdit, QVBoxLayout)
+
+import systray_rc
+
+
+class Window(QDialog):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.createIconGroupBox()
+        self.createMessageGroupBox()
+
+        self.iconLabel.setMinimumWidth(self.durationLabel.sizeHint().width())
+
+        self.createActions()
+        self.createTrayIcon()
+
+        self.showMessageButton.clicked.connect(self.showMessage)
+        self.showIconCheckBox.toggled.connect(self.trayIcon.setVisible)
+        self.iconComboBox.currentIndexChanged.connect(self.setIcon)
+        self.trayIcon.messageClicked.connect(self.messageClicked)
+        self.trayIcon.activated.connect(self.iconActivated)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.iconGroupBox)
+        mainLayout.addWidget(self.messageGroupBox)
+        self.setLayout(mainLayout)
+
+        self.iconComboBox.setCurrentIndex(1)
+        self.trayIcon.show()
+
+        self.setWindowTitle("Systray")
+        self.resize(400, 300)
+
+    def setVisible(self, visible):
+        self.minimizeAction.setEnabled(visible)
+        self.maximizeAction.setEnabled(not self.isMaximized())
+        self.restoreAction.setEnabled(self.isMaximized() or not visible)
+        super(Window, self).setVisible(visible)
+
+    def closeEvent(self, event):
+        if self.trayIcon.isVisible():
+            QMessageBox.information(self, "Systray",
+                    "The program will keep running in the system tray. To "
+                    "terminate the program, choose <b>Quit</b> in the "
+                    "context menu of the system tray entry.")
+            self.hide()
+            event.ignore()
+
+    def setIcon(self, index):
+        icon = self.iconComboBox.itemIcon(index)
+        self.trayIcon.setIcon(icon)
+        self.setWindowIcon(icon)
+
+        self.trayIcon.setToolTip(self.iconComboBox.itemText(index))
+
+    def iconActivated(self, reason):
+        if reason in (QSystemTrayIcon.Trigger, QSystemTrayIcon.DoubleClick):
+            self.iconComboBox.setCurrentIndex(
+                    (self.iconComboBox.currentIndex() + 1)
+                    % self.iconComboBox.count())
+        elif reason == QSystemTrayIcon.MiddleClick:
+            self.showMessage()
+
+    def showMessage(self):
+        icon = QSystemTrayIcon.MessageIcon(
+                self.typeComboBox.itemData(self.typeComboBox.currentIndex()))
+        self.trayIcon.showMessage(self.titleEdit.text(),
+                self.bodyEdit.toPlainText(), icon,
+                self.durationSpinBox.value() * 1000)
+
+    def messageClicked(self):
+        QMessageBox.information(None, "Systray",
+                "Sorry, I already gave what help I could.\nMaybe you should "
+                "try asking a human?")
+
+    def createIconGroupBox(self):
+        self.iconGroupBox = QGroupBox("Tray Icon")
+
+        self.iconLabel = QLabel("Icon:")
+
+        self.iconComboBox = QComboBox()
+        self.iconComboBox.addItem(QIcon(':/images/bad.png'), "Bad")
+        self.iconComboBox.addItem(QIcon(':/images/heart.png'), "Heart")
+        self.iconComboBox.addItem(QIcon(':/images/trash.png'), "Trash")
+
+        self.showIconCheckBox = QCheckBox("Show icon")
+        self.showIconCheckBox.setChecked(True)
+
+        iconLayout = QHBoxLayout()
+        iconLayout.addWidget(self.iconLabel)
+        iconLayout.addWidget(self.iconComboBox)
+        iconLayout.addStretch()
+        iconLayout.addWidget(self.showIconCheckBox)
+        self.iconGroupBox.setLayout(iconLayout)
+
+    def createMessageGroupBox(self):
+        self.messageGroupBox = QGroupBox("Balloon Message")
+
+        typeLabel = QLabel("Type:")
+
+        self.typeComboBox = QComboBox()
+        self.typeComboBox.addItem("None", QSystemTrayIcon.NoIcon)
+        self.typeComboBox.addItem(self.style().standardIcon(
+                QStyle.SP_MessageBoxInformation), "Information",
+                QSystemTrayIcon.Information)
+        self.typeComboBox.addItem(self.style().standardIcon(
+                QStyle.SP_MessageBoxWarning), "Warning",
+                QSystemTrayIcon.Warning)
+        self.typeComboBox.addItem(self.style().standardIcon(
+                QStyle.SP_MessageBoxCritical), "Critical",
+                QSystemTrayIcon.Critical)
+        self.typeComboBox.setCurrentIndex(1)
+
+        self.durationLabel = QLabel("Duration:")
+
+        self.durationSpinBox = QSpinBox()
+        self.durationSpinBox.setRange(5, 60)
+        self.durationSpinBox.setSuffix(" s")
+        self.durationSpinBox.setValue(15)
+
+        durationWarningLabel = QLabel("(some systems might ignore this hint)")
+        durationWarningLabel.setIndent(10)
+
+        titleLabel = QLabel("Title:")
+
+        self.titleEdit = QLineEdit("Cannot connect to network")
+
+        bodyLabel = QLabel("Body:")
+
+        self.bodyEdit = QTextEdit()
+        self.bodyEdit.setPlainText("Don't believe me. Honestly, I don't have "
+                "a clue.\nClick this balloon for details.")
+
+        self.showMessageButton = QPushButton("Show Message")
+        self.showMessageButton.setDefault(True)
+
+        messageLayout = QGridLayout()
+        messageLayout.addWidget(typeLabel, 0, 0)
+        messageLayout.addWidget(self.typeComboBox, 0, 1, 1, 2)
+        messageLayout.addWidget(self.durationLabel, 1, 0)
+        messageLayout.addWidget(self.durationSpinBox, 1, 1)
+        messageLayout.addWidget(durationWarningLabel, 1, 2, 1, 3)
+        messageLayout.addWidget(titleLabel, 2, 0)
+        messageLayout.addWidget(self.titleEdit, 2, 1, 1, 4)
+        messageLayout.addWidget(bodyLabel, 3, 0)
+        messageLayout.addWidget(self.bodyEdit, 3, 1, 2, 4)
+        messageLayout.addWidget(self.showMessageButton, 5, 4)
+        messageLayout.setColumnStretch(3, 1)
+        messageLayout.setRowStretch(4, 1)
+        self.messageGroupBox.setLayout(messageLayout)
+
+    def createActions(self):
+        self.minimizeAction = QAction("Mi&nimize", self, triggered=self.hide)
+        self.maximizeAction = QAction("Ma&ximize", self,
+                triggered=self.showMaximized)
+        self.restoreAction = QAction("&Restore", self,
+                triggered=self.showNormal)
+        self.quitAction = QAction("&Quit", self,
+                triggered=QApplication.instance().quit)
+
+    def createTrayIcon(self):
+         self.trayIconMenu = QMenu(self)
+         self.trayIconMenu.addAction(self.minimizeAction)
+         self.trayIconMenu.addAction(self.maximizeAction)
+         self.trayIconMenu.addAction(self.restoreAction)
+         self.trayIconMenu.addSeparator()
+         self.trayIconMenu.addAction(self.quitAction)
+
+         self.trayIcon = QSystemTrayIcon(self)
+         self.trayIcon.setContextMenu(self.trayIconMenu)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    if not QSystemTrayIcon.isSystemTrayAvailable():
+        QMessageBox.critical(None, "Systray",
+                "I couldn't detect any system tray on this system.")
+        sys.exit(1)
+
+    QApplication.setQuitOnLastWindowClosed(False)
+
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/desktop/systray/systray.qrc b/examples/desktop/systray/systray.qrc
new file mode 100644
index 0000000..a8b6535
--- /dev/null
+++ b/examples/desktop/systray/systray.qrc
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+   <file>images/bad.png</file>
+   <file>images/heart.png</file>
+   <file>images/trash.png</file>
+</qresource>
+</RCC>
diff --git a/examples/desktop/systray/systray_rc.py b/examples/desktop/systray/systray_rc.py
new file mode 100644
index 0000000..d1aa1e6
--- /dev/null
+++ b/examples/desktop/systray/systray_rc.py
@@ -0,0 +1,2580 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sat May 4 14:55:18 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x09\xc0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x9c\x00\x00\x00\xb2\x08\x03\x00\x00\x00\x80\xc0\x56\x39\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01\x42\x28\
+\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x03\x09\x08\x1d\
+\x30\x44\x26\x4e\xa6\x00\x00\x02\xd3\x50\x4c\x54\x45\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x02\x01\x00\x03\x02\
+\x00\x04\x02\x00\x05\x03\x00\x06\x03\x00\x06\x04\x00\x07\x04\x00\
+\x08\x05\x00\x09\x05\x00\x0a\x06\x00\x0b\x07\x00\x0c\x07\x00\x0d\
+\x08\x00\x0e\x08\x00\x0f\x09\x00\x10\x0a\x00\x11\x0a\x00\x12\x0b\
+\x00\x13\x0b\x00\x14\x0c\x00\x15\x0d\x00\x16\x0d\x00\x17\x0e\x00\
+\x18\x0e\x00\x19\x0f\x00\x1a\x10\x00\x1b\x10\x00\x1c\x11\x00\x1d\
+\x11\x00\x1e\x12\x00\x1f\x13\x00\x20\x13\x00\x21\x14\x00\x22\x14\
+\x00\x23\x15\x00\x24\x16\x00\x25\x16\x00\x26\x17\x00\x27\x17\x00\
+\x28\x18\x00\x29\x19\x00\x2a\x19\x00\x2b\x1a\x00\x2c\x1a\x00\x2d\
+\x1b\x00\x2e\x1c\x00\x2f\x1c\x00\x30\x1d\x00\x31\x1d\x00\x32\x1e\
+\x00\x33\x1f\x00\x34\x1f\x00\x35\x20\x00\x36\x20\x00\x37\x21\x00\
+\x38\x22\x00\x39\x22\x00\x3a\x23\x00\x3b\x23\x00\x3c\x24\x00\x3d\
+\x25\x00\x3e\x25\x00\x3f\x26\x00\x40\x26\x00\x41\x27\x00\x42\x28\
+\x00\x43\x28\x00\x44\x29\x00\x45\x29\x00\x46\x2a\x00\x47\x2b\x00\
+\x49\x2c\x00\x4a\x2c\x00\x4b\x2d\x00\x4c\x2e\x00\x4d\x2e\x00\x4e\
+\x2f\x00\x4f\x2f\x00\x50\x30\x00\x51\x31\x00\x52\x31\x00\x53\x32\
+\x00\x55\x33\x00\x57\x34\x00\x58\x35\x00\x59\x35\x00\x5a\x36\x00\
+\x5b\x37\x00\x5c\x37\x00\x5d\x38\x00\x5e\x38\x00\x5f\x39\x00\x60\
+\x3a\x00\x61\x3a\x00\x63\x3b\x00\x65\x3d\x00\x67\x3e\x00\x68\x3e\
+\x00\x69\x3f\x00\x6a\x40\x00\x6b\x40\x00\x6c\x41\x00\x6d\x41\x00\
+\x6e\x42\x00\x6f\x43\x00\x70\x43\x00\x71\x44\x00\x73\x45\x00\x74\
+\x46\x00\x75\x46\x00\x76\x47\x00\x77\x47\x00\x79\x49\x00\x7a\x49\
+\x00\x7b\x4a\x00\x7c\x4a\x00\x7c\x4b\x00\x7d\x4b\x00\x7e\x4c\x00\
+\x7f\x4c\x00\x80\x4d\x00\x81\x4d\x00\x82\x4e\x00\x83\x4f\x00\x84\
+\x4f\x00\x86\x50\x00\x87\x51\x00\x88\x52\x00\x8a\x53\x00\x8b\x53\
+\x00\x8e\x55\x00\x8f\x56\x00\x91\x57\x00\x93\x58\x00\x94\x59\x00\
+\x95\x59\x00\x96\x5a\x00\x98\x5b\x00\x99\x5c\x00\x9c\x5e\x00\x9d\
+\x5e\x00\x9e\x5f\x00\x9f\x5f\x00\xa0\x60\x00\xa1\x61\x00\xa2\x61\
+\x00\xa3\x62\x00\xa4\x62\x00\xa5\x63\x00\xa6\x64\x00\xa7\x64\x00\
+\xaa\x66\x00\xac\x67\x00\xad\x68\x00\xaf\x69\x00\xb0\x6a\x00\xb1\
+\x6a\x00\xb2\x6b\x00\xb3\x6b\x00\xb4\x6c\x00\xb5\x6d\x00\xb6\x6d\
+\x00\xb8\x6e\x00\xba\x70\x00\xbb\x70\x00\xbc\x71\x00\xbd\x71\x00\
+\xbe\x72\x00\xbf\x73\x00\xc0\x73\x00\xc1\x74\x00\xc2\x74\x00\xc3\
+\x75\x00\xc5\x76\x00\xc7\x77\x00\xc8\x78\x00\xc9\x79\x00\xca\x79\
+\x00\xcb\x7a\x00\xcc\x7a\x00\xce\x7c\x00\xcf\x7c\x00\xd0\x7d\x00\
+\xd1\x7d\x00\xd2\x7e\x00\xd3\x7f\x00\xd4\x7f\x00\xd5\x80\x00\xd6\
+\x80\x00\xd7\x81\x00\xd8\x82\x00\xd9\x82\x00\xda\x83\x00\xdb\x83\
+\x00\xdc\x84\x00\xdd\x85\x00\xde\x85\x00\xdf\x86\x00\xe0\x86\x00\
+\xe1\x87\x00\xe2\x88\x00\xe3\x88\x00\xe4\x89\x00\xe5\x89\x00\xe6\
+\x8a\x00\xe7\x8b\x00\xe8\x8b\x00\xe9\x8c\x00\xea\x8c\x00\xeb\x8d\
+\x00\xec\x8e\x00\xed\x8e\x00\xee\x8f\x00\xef\x8f\x00\xf0\x90\x00\
+\xf1\x91\x00\xf2\x91\x00\xf3\x92\x00\xf4\x92\x00\xf5\x93\x00\xf6\
+\x94\x00\xf7\x94\x00\xf8\x95\x00\xf9\x95\x00\xfa\x96\x00\xfb\x97\
+\x00\xfc\x97\x00\xfd\x98\x00\xfe\x98\x00\xff\x99\x00\xff\xff\xff\
+\x73\xb6\xc7\xfa\x00\x00\x00\x08\x74\x52\x4e\x53\x00\x09\x0e\x1b\
+\x28\x3d\x5c\x72\xee\x75\x23\xcb\x00\x00\x00\x01\x62\x4b\x47\x44\
+\xf0\x35\xb8\xef\x54\x00\x00\x06\x52\x49\x44\x41\x54\x78\xda\xed\
+\x9c\xf9\x5f\x94\x55\x14\xc6\xad\xac\x66\x18\x6d\x54\x50\xc0\x04\
+\xc4\x85\x45\x05\xc1\x0d\xc9\x50\xd1\xc8\x5c\x5a\x15\xb5\xc5\x24\
+\xca\x34\xcb\x34\xcb\x4a\xcd\xca\xd2\xd4\x52\x4a\xcd\xca\x34\xb2\
+\x12\xcd\xca\x4c\xb1\x20\x90\x08\x44\x53\x40\xf6\x4d\xf6\x01\x46\
+\x99\x61\xe6\x9d\x7f\x21\xd6\x98\xe5\x5d\xee\x72\xee\x30\x9f\xbc\
+\xcf\xcf\x9c\xf7\x7e\x99\x79\xdf\xf7\x9e\xf3\x9c\x73\xa7\x5f\x3f\
+\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x2e\x57\xd5\x1d\x77\xbb\
+\x88\xfa\x8b\xc0\xdd\xa9\x72\x11\xdd\xc5\xe1\x6e\x29\xb8\x64\x63\
+\x9f\xaa\x40\x16\x2e\xc5\xd2\xa7\x2a\xe3\x70\x1c\x8e\xc3\xc1\xc1\
+\x99\x5d\x18\xae\x30\xe4\x47\xe2\xa5\x75\x8c\xe1\xca\x42\x54\xda\
+\x53\x84\x6c\x59\xbe\x3b\x98\xc2\x55\x84\xb6\xff\xcd\x90\x33\x44\
+\x6c\x17\x86\xab\x54\x9b\x19\xc2\x55\x85\x75\x6e\x7e\xee\xbf\x11\
+\xb0\xa5\x7b\x77\x84\xbe\xcd\x0c\xae\x36\xa2\x7b\x6b\x76\x3f\x8b\
+\xcd\x96\xe6\xdd\x15\xba\x49\x60\x03\x57\x17\xf9\x5f\xe2\xe0\x7e\
+\x0e\x93\xed\x4f\xaf\x9e\xd0\x97\x05\x16\x70\x4d\xd1\x56\x69\x8d\
+\xc7\x79\x2c\xb6\x54\xaf\xde\xd0\x97\xcc\xf0\x70\xcd\x73\x6d\x92\
+\x2e\xcf\x54\x0c\xb6\x64\x0f\xeb\xd0\xb8\x36\x68\xb8\x96\x18\xbb\
+\x94\xd0\x2b\x0d\x99\xed\x9c\x87\x6d\xe8\xb3\x6d\xb0\x70\x37\x1f\
+\x71\x48\x58\xbd\xd2\x11\xd9\xce\x7a\xd8\x87\x3e\x63\x84\x84\x6b\
+\x7d\x4c\x24\x9d\xf6\xbe\x80\xc4\x76\xc6\xdd\x31\x74\x49\x2b\x1c\
+\x9c\x71\xb9\x68\xb2\xef\x9d\x81\xc0\xf6\xab\xbb\x58\xe8\xe3\x37\
+\xa1\xe0\xda\x9e\x96\x28\x45\x7c\xb2\x15\xd9\x4e\x0f\x11\x0f\x7d\
+\xf4\x06\x0c\x9c\xf9\x79\xc9\x42\xc9\xf7\xa2\x02\xdb\xc9\x41\x52\
+\xa1\xf3\x9a\x20\xe0\xcc\x2f\xca\x94\x71\x7e\x39\xb2\x6c\x27\xb4\
+\xd2\xa1\x31\x3a\x7a\x38\x61\x8d\x6c\x91\xe9\x77\x49\x86\x2d\x49\
+\x2b\x17\x1a\x55\x47\x0d\xf7\x9a\x42\x09\x3c\xf2\xb2\x24\xdb\x71\
+\xad\x7c\xe8\x8c\x5a\x4a\xb8\x37\x14\x0b\x74\xff\x7f\x24\xd8\x7e\
+\x18\xa8\x14\x1a\x59\x4d\x05\xf7\x1e\x82\x7d\x30\x36\x5f\x94\x2d\
+\x51\xa3\x1c\x3a\xa9\x9c\x02\x6e\x27\x92\xb9\x11\x70\x4d\x84\xed\
+\x1b\x0d\x4a\x68\x58\x19\x31\xdc\x2e\x44\xeb\x25\xb0\xc0\x81\xed\
+\x88\x06\x2d\x34\xb8\x80\x10\xee\x63\x64\x63\x28\xb0\xd0\x8e\xed\
+\x6b\x0d\x6a\x68\x50\x3e\x11\xdc\x7e\x35\xba\x6d\x15\x54\x64\xc3\
+\x76\x58\x83\x1e\x1a\x90\x47\x00\x77\x10\x83\x4d\xa5\x0a\xb5\xbe\
+\x79\xbe\x74\xc3\x09\xf5\xcf\xc1\x86\x3b\x8a\xb5\x40\x3b\x5d\x39\
+\xd1\x47\xde\xf9\x22\xcf\xc6\x84\x4b\xd4\xa8\x30\x35\xb1\xa2\x3b\
+\xf4\x33\x35\x6e\xa8\xef\xdf\x78\x70\xcb\xf0\xed\xd2\xc8\x3a\x82\
+\xef\xb4\x7b\x9f\xc5\x83\x33\x2e\xc5\x5f\x22\xbc\xb2\x3d\x30\x41\
+\x8d\x1f\x18\x51\x8d\x79\xcf\x19\x62\x09\x16\xa9\xb1\xec\x23\x60\
+\x8b\xaa\xc7\x7e\x5a\x0d\x4b\xf0\x97\x99\xfe\x2e\x81\x7b\x3e\xb3\
+\x9e\xe0\x3d\x67\x58\xec\x14\x67\x7f\x56\x03\xd1\x0e\x71\x63\x91\
+\x13\xd8\x66\x37\x12\xee\xad\xfa\x85\xcc\xd9\xa2\x1b\x89\xb3\x12\
+\xfd\x02\xc6\x6c\x0f\xb5\x50\xe4\x73\xfa\xf9\x4c\xd9\xe6\xb7\x50\
+\x65\xc2\x2d\xf3\x18\xb2\x2d\x6c\xa1\xac\x21\x74\xd1\xcc\xd8\x16\
+\xe9\xa9\x4b\xc3\xc6\x59\x8c\xd8\x1e\xd6\x03\x14\xd5\x8d\x33\x99\
+\xb0\x89\xf9\x25\x04\x76\x44\x43\x14\x03\xb6\xd8\x56\x20\x23\xa7\
+\xe1\x7e\x70\xb6\xa5\x06\x30\x0b\xac\x66\x1a\x30\xdb\x72\x03\xa0\
+\x79\x58\x3d\x15\x94\xed\x49\x03\xa8\xed\x7a\x7d\x0a\x20\xdb\x53\
+\xa0\xce\x66\x07\xdd\x64\x30\xb6\xe7\x4c\xe0\x56\x7f\xd5\x24\x20\
+\xb6\x78\x13\x83\x26\x49\x65\x38\x08\xdb\x0b\x26\x26\xed\xa5\xd2\
+\x09\x00\x6c\xab\x4c\x8c\x1a\x73\x25\xe3\xa9\xd9\x56\x9b\x99\xb5\
+\x34\x8b\xc7\x51\xb2\xad\x13\x18\x36\x83\x8b\x83\xa9\xd8\x5e\x15\
+\x98\xb6\xd1\xf3\xc6\x50\xb0\x6d\x10\x18\x0f\x20\xe4\x92\xd3\x6d\
+\x54\x62\xa3\x1f\xdd\xc8\x1d\x4d\xc8\xf6\xba\x22\x1b\xc0\x5c\xc9\
+\xd5\x51\x44\x6c\x5b\x9d\x33\xf4\xf2\xd7\x3d\x04\x6c\xdb\x9c\x33\
+\x91\xd3\xfc\x20\xc9\x07\xb7\xc9\x29\x70\x4d\x31\x64\xb7\xdc\x9b\
+\x4e\x80\x6b\x7a\x80\xf4\x61\xdd\xce\x1c\x4e\x37\x97\xfc\x35\xf7\
+\x21\x63\xb8\x7a\xaa\x5a\x67\x27\x53\xb8\x3a\xca\x4a\xe7\x23\x86\
+\x70\xb5\x33\x68\x93\x92\x5d\xec\xc6\x85\xee\xa3\x4f\xe7\xf6\x30\
+\x82\xab\x89\x04\xc8\x35\xd5\x09\x4c\xe0\xaa\xa7\x83\x64\xe9\xea\
+\x4f\x19\xc0\x55\x40\xd5\x37\xea\xfd\xe0\x70\x15\xe1\x2a\x28\xa9\
+\x0f\x00\xc3\x95\x87\x01\xd6\xd4\xea\x83\xa0\x70\x65\x13\x41\xdd\
+\x08\xb7\xc3\x80\x70\xa5\xa1\xc0\x3e\x8e\xdb\x11\x30\xb8\xc2\x60\
+\x15\xb4\x34\x47\x81\xe0\x0a\x82\x18\x78\x87\x9a\x44\x10\xb8\x6b\
+\x81\x4c\x5c\x57\xcd\xb7\x00\x70\xf9\x6c\xd8\xda\xe9\x8e\x51\xc3\
+\xe5\x05\x30\x73\xfa\x07\x26\x51\xc2\xe5\x8e\x65\xd8\x23\xd1\x9e\
+\xa0\x82\xbb\xe4\xcf\xb4\xbb\xa4\x3d\x49\x01\x97\x33\x92\x71\x5f\
+\xce\x7e\x08\x1f\x03\xee\xa2\x1f\xf3\x8e\xe6\xa0\x9f\x08\xe1\xb2\
+\xd9\xb3\xd9\x1f\x11\x40\x86\xcb\xf2\xc5\x5f\x6a\x30\xfe\xf8\x81\
+\xcd\x10\x3e\x2a\x5c\xc7\xf1\x05\x5c\x79\xa6\x10\x0c\x6e\x58\x0f\
+\xe1\x23\xc2\xa5\x7b\xe3\xb3\x0d\xcf\xb0\x58\xf6\xe1\x87\x79\x24\
+\x63\xc2\xa5\x11\xb0\xdd\xdb\x39\xd3\xbc\x97\x80\xee\x3c\x1e\xdc\
+\x1a\x92\xef\xb4\x2b\x74\x3b\x7e\xe8\x84\x36\x2c\x38\xd3\x6a\xdc\
+\x05\x46\x64\xf6\xfc\xfb\x9f\x60\x87\x66\x61\xde\x73\xc2\x7a\xbc\
+\x05\x7c\x32\x7b\x6f\xeb\x0f\x30\x6f\x87\x4c\xec\xa7\x55\xd8\x88\
+\xb3\x80\xbf\xcd\xb4\xf0\xfb\x38\xa1\xc3\x52\x49\x5e\xc2\xef\xa0\
+\x2f\x30\xca\x6e\x56\x78\x1b\x7a\xe8\xd0\x14\xb2\xed\x0b\xf9\xd6\
+\x1e\x7d\xc5\x3e\xbd\xd8\x8a\xfc\xa4\xfe\x41\xba\xf1\xef\x21\x65\
+\xb3\x58\xb6\x20\x6e\x29\xa7\xc9\x53\x26\xa4\x61\xdc\x31\x57\xc5\
+\xca\x81\xcd\x48\xfb\xfe\x2f\x34\xc9\xe6\x01\xe5\xed\x28\xb8\x50\
+\xb4\x90\x12\x36\x20\xe4\xc2\xc7\xe9\xd2\xf4\xcf\x95\x26\x30\xc7\
+\x15\x49\x14\xc8\xca\x2f\xa3\x01\xdf\xd3\x16\x38\x5f\xc8\xd3\x8d\
+\x2f\x96\x34\x3e\x84\x75\xd8\x95\x35\x76\x69\x78\x6c\x80\xdc\xc6\
+\x53\x2c\x63\x68\x09\xaf\xc8\xb2\x7d\x05\x51\x54\x7f\x27\x7d\xae\
+\x21\xa4\x44\xd6\xa8\x14\xd6\xca\xb8\x39\x87\x60\xec\x88\x53\x83\
+\x25\x16\x08\x2d\x55\x30\xa0\xcd\xab\x24\xe1\x12\xa0\x8c\x9c\x9f\
+\xc5\xcf\x47\x4d\xae\x54\x6c\x2c\x48\x9e\x7c\xda\x0b\x67\x81\x25\
+\x0f\x15\xb9\xfe\x94\x2a\x84\x86\x91\x29\x5e\x94\x6d\x07\xa4\x79\
+\xf8\xfb\x30\x87\xeb\x4f\xbd\x8e\x74\x9a\xcf\x14\x87\xd1\x42\x24\
+\xb4\x5d\x53\x3c\xed\xae\x3f\x0d\x8d\xad\x9d\x6e\xa5\x03\xdb\x16\
+\x68\xc3\x3a\x63\x84\xcd\xf5\x23\xaa\x91\x4f\x90\x9a\x56\xd8\xb1\
+\xbd\x05\x6f\xf5\x67\xfa\x58\x5d\xdf\x6a\x64\x5b\x59\xc6\x65\xa8\
+\xe3\x1b\xe4\x4d\x92\xcb\xbd\xed\x73\xeb\x91\x6d\x04\x19\xac\x8f\
+\x08\xac\x15\x98\xb4\x97\xae\xf4\x0c\x46\xcc\xc6\x63\xb3\x39\x22\
+\x10\x6f\x66\xd4\x98\x2b\xec\x1a\xc8\xb1\x1d\xd9\x46\xa3\xeb\x19\
+\xc2\x8f\x33\x31\x6b\x69\x16\x75\x8c\x5a\xcd\xd1\x59\xf0\xd5\xfa\
+\x44\x27\xdb\x0a\x13\xc3\x66\x70\x49\xa8\xc3\xc8\x36\xa2\x3a\x8f\
+\x08\xc4\x1a\x99\xb6\xd1\x8b\x57\x36\x5a\xc8\xa4\x5f\xa0\x5a\x6c\
+\x60\x3f\x57\x42\x28\xdd\xfa\x66\x8b\xcb\xc2\x39\x67\x22\x87\xc3\
+\x71\x38\x0e\xe7\x02\x70\xbb\x93\xfa\x54\x87\x64\xe1\x5c\x41\x1c\
+\xee\x96\x81\xbb\xad\xbf\x8b\xe8\x76\xfe\x83\xac\x5c\x5c\x5c\x5c\
+\x5c\x5c\x5c\x5c\x5c\x5c\x5c\xff\x43\xfd\x0b\x99\xa5\x5c\x7e\x47\
+\x71\x60\x42\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x2f\x60\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x01\x5b\x00\x00\x01\x5c\x08\x06\x00\x00\x00\x66\xca\x1d\x55\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01\x42\x28\
+\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x03\x09\x08\x1f\
+\x25\x1b\xcd\xc8\xcf\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\
+\xff\x00\xff\xa0\xbd\xa7\x93\x00\x00\x2e\xe0\x49\x44\x41\x54\x78\
+\xda\xed\x9d\x09\x74\x15\x55\xb6\xfe\xaf\xb6\x43\xdb\x2d\xdc\x9b\
+\x00\x62\xdb\xb4\xa2\xb6\xf6\xa0\xdd\xb6\xa2\x3e\x71\xa0\xaa\x92\
+\x30\x2a\x8a\x20\xa2\x88\x8a\x38\xb7\x2d\x88\xa0\x38\x61\xa7\x45\
+\x51\x5b\x5b\x14\x27\x22\x21\x75\x2b\x84\x00\x81\x10\x48\x20\x10\
+\xa6\x40\x98\xc7\x80\x21\xcc\x90\x90\x89\x84\x04\x12\x12\x12\x12\
+\x02\xa9\x57\xbb\x82\x1a\x48\x6e\x86\x9b\x5b\x75\xeb\xd4\xf9\x7e\
+\xff\xf5\xad\xf7\x5f\xbd\x5e\x3f\xaa\xce\x3e\xe7\xcb\xb9\xa7\xf6\
+\xd9\xdb\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x18\x40\x07\x59\xbc\x32\x50\x11\xba\x06\xc8\x42\x5f\x97\x2c\
+\x0e\x75\xb9\xc5\x51\x4e\x45\xfc\x58\xfb\x9f\xe1\x9a\xe2\x34\xa5\
+\xb8\xdc\x42\xba\xa6\x03\xb5\x12\x0b\x35\x1d\xd3\xfe\xff\xc7\xb5\
+\xff\xa9\xd6\x97\xfe\x9f\x1f\xab\xfd\xdf\xfb\xe9\xbf\xa3\xff\xf7\
+\x57\x6a\xff\xd9\x1c\x4d\x93\x9d\x6e\x69\x3c\xfd\x3b\xf4\xef\xd1\
+\xbf\x1b\x28\x8b\x77\xd1\x73\x20\x1a\x00\x00\x76\x09\xeb\x72\x71\
+\x80\x12\xfc\x77\xcd\xe0\x06\xe8\x06\xe7\x16\xbf\x71\x2a\xc2\x82\
+\x5a\x03\x14\x2b\x1a\x36\x4c\xbf\xa9\xe2\xec\x73\xcd\xd7\xf4\xb5\
+\x4b\x91\x5e\x77\xc9\x52\xff\x00\xb9\xdb\xdf\xe8\x3d\x10\x4c\x00\
+\x80\xff\x51\x1d\x17\x04\xba\xa5\x9b\x9c\xb2\x30\x50\xdb\x31\x86\
+\x6a\x66\x95\xa0\x29\xcf\x62\x66\xda\x5a\xe5\xe9\xef\xa5\xbd\x1f\
+\xbd\x27\xbd\x2f\xbd\x37\x82\x0f\x00\x30\x8e\x89\xbd\x2f\x0d\x8c\
+\x08\xba\xdb\xe9\x16\x47\x6b\xe6\x33\x57\xdb\x11\xe6\xda\xcc\x58\
+\x9b\x29\xfd\xbd\xe9\xb8\x63\x14\x1d\x87\x38\x62\x06\x5e\x82\xc9\
+\x01\x00\xf0\x9a\x36\x4a\x70\x3b\x97\x5b\x7a\x30\xc0\x2d\x7c\xaa\
+\x19\xcb\x2a\xcd\x64\x4f\xf2\x69\xae\x8d\xeb\xec\xb8\xa4\xd0\xb9\
+\x33\x9d\x07\xb7\x0d\xef\x19\x88\xd9\x03\x00\x68\x74\xe7\x4a\x66\
+\xa1\x99\x6b\xd8\xd9\x0f\x53\x30\x53\xef\x77\xbf\xf4\x91\xee\x2b\
+\xcd\x80\x43\x68\x5c\x31\xb9\x00\xe0\x9c\xc0\x28\xb1\x93\xb6\x33\
+\x7b\x56\x33\x88\x59\x67\xbf\xe8\xc3\x28\x7d\x6f\xbc\x47\xb5\x3f\
+\x60\x33\x5d\xb2\x34\xac\x9d\x12\xf4\x7b\xcc\x3a\x00\xf8\x39\x1e\
+\xb8\xb1\xf6\x83\x96\xfe\x15\x1e\x66\x68\xbe\xf9\xa6\xd3\xf8\xb7\
+\x95\xbb\xdd\x80\xd9\x08\x80\xcd\x70\xba\x83\xae\x87\xc1\x5a\xd7\
+\x78\x9d\x11\x21\xd7\x61\x96\x02\xc0\x28\x9d\x62\xba\x5e\xe6\x72\
+\x4b\x4f\x69\x8b\x7a\xa9\xa6\xd3\x30\x36\x4b\x8b\xe2\xb3\x38\x40\
+\x11\x87\x74\x96\xc5\x5f\x63\xf6\x02\xc0\xc2\x2e\x56\x11\x43\x02\
+\x14\x29\x06\xd9\x03\xcc\xaa\xd4\xa5\x48\x91\xfa\xc7\x35\x00\x80\
+\xe5\xce\x61\xdb\x69\x8b\x73\x8c\x66\xb0\x3b\x61\x56\xf6\x3a\x66\
+\xa0\xb8\x22\x9d\x0c\x00\x3f\xe3\x92\xc5\xce\x94\x62\xe4\xb9\x6e\
+\x00\x64\x13\x95\x68\x9a\xe0\x0a\x0f\xba\x06\xb3\x1e\x00\x93\x8f\
+\x0a\x6a\xaf\xc7\x0a\x67\x60\x44\x5c\xed\x74\x29\xde\x09\x01\x91\
+\xe2\xbd\x58\x05\x00\x18\x45\xb2\x78\x51\xed\x07\x2f\x61\x0b\x4c\
+\x07\xd2\xb4\x99\xe6\x83\x23\x66\xe0\xaf\xb0\x38\x00\xf0\x05\xa1\
+\xa1\x17\x06\xc8\xd2\x60\xa4\x6d\x41\x1e\x94\xa6\xfd\xd2\x19\x44\
+\xf3\x04\x8b\x05\x00\x6f\xd0\x76\x2c\x4e\xb7\xf4\x82\xb6\x98\x32\
+\x60\x28\x50\x33\x6a\x34\xec\xc2\x4e\x17\x80\x96\xa0\x3a\x2e\xd0\
+\xcb\x16\x62\x27\x0b\x79\xa7\x1d\x34\x7f\x50\x0a\x12\x80\x46\x70\
+\x45\x4a\x82\xb6\x58\x56\xc3\x30\x20\x1f\x7c\x4c\x5b\x89\x0f\x69\
+\x00\x9c\x07\x75\x06\x38\x7b\xd3\x0b\x26\x01\xf9\x5a\x4b\x34\xd3\
+\xbd\x19\xab\x0c\x70\xcd\xe5\x11\xf7\x75\xa8\x2d\x69\x28\x56\xc3\
+\x14\x20\x03\x75\x8a\xe6\x59\x9b\x68\xb1\x3d\x56\x1d\xe0\xed\xe3\
+\xd7\x25\x74\x33\x08\x65\x0d\x21\xb3\xcb\x3d\xba\x14\x71\x04\xa5\
+\x11\x62\x11\x02\xfb\x1f\x19\xb8\xa5\x7b\xb4\x89\x9f\x8a\x85\x0f\
+\xf9\x33\x47\x97\x3a\x0c\x63\x35\x02\x5b\x42\xf5\x0b\xa8\x40\x0c\
+\x16\x3a\x64\x11\xd5\x50\xc1\x1b\xd4\x5d\x00\xb6\xe2\x6c\xa9\xc3\
+\x7c\x2c\x70\xc8\x82\xf9\xb9\x87\x9d\x8a\xf8\x08\x56\x29\x60\x1a\
+\x6a\x3b\x73\xb6\xc5\x37\x16\x36\xc3\xfa\x47\xec\xe3\xea\x4b\xab\
+\xc6\xab\x13\xd2\xa2\xd5\x79\x99\x2b\xd5\x2d\x85\xbb\xd4\xbd\x25\
+\x87\xd4\x8c\xd2\x3c\x75\xdf\xf1\x6c\x35\xb5\x68\x8f\x9a\x98\xb5\
+\x46\xfd\x26\x3d\x46\x1d\xb1\xf6\x73\xf5\xff\xe6\x3e\xad\x06\xb8\
+\x25\xd6\xde\x33\x01\x6d\x7b\x00\xa3\x67\xb3\xc2\xe3\xda\x04\x2e\
+\x84\x59\xb1\xa9\xee\x0b\x5e\x51\xbf\xdf\x39\x5b\xcd\x39\x51\xa0\
+\x7a\x43\x51\x65\x89\xaa\xec\x9d\xaf\x3e\xbc\x78\xb4\x1a\xa8\xb0\
+\x62\xbc\x42\x81\xd3\x2d\x3d\x8a\xd5\x0b\x98\x39\x9b\xd5\x26\xee\
+\x1c\x18\x16\x7b\x22\x53\x7c\x76\xe5\x38\x7d\xa7\xea\x4b\x68\xf7\
+\x3b\x72\xdd\x17\xea\x15\x91\x21\x6c\x8c\x85\x22\xc4\xd2\x3c\xc6\
+\x6a\x06\xd6\xdd\xcd\xca\x52\x1f\x9c\xcd\xb2\xa9\x9e\x89\xff\xf2\
+\xb9\xc9\x9e\xcf\x7e\xcd\x74\x07\x2d\x7d\x9b\x99\xb3\xdc\x40\x59\
+\xec\x85\x55\x0d\xac\xc5\xc4\xde\x97\xd6\x16\xf1\x16\x6b\x60\x5c\
+\x6c\xa9\xe3\xd4\xee\xea\xa4\x9d\xb1\x6a\x8d\xf6\xff\xcc\x82\xce\
+\x7d\x3b\x47\xf7\x65\x23\x63\x41\x9b\xd7\x94\x17\x8e\x45\x0e\xfc\
+\x0e\xb5\xa4\xd6\x26\xe4\x06\x18\x17\x7b\xba\x71\x66\x7f\x75\x43\
+\xc1\x0e\xd5\x1f\xd0\x07\xb6\xdb\xe7\x0c\x61\x65\x97\xbb\x16\x1d\
+\x80\x81\x5f\x71\x29\xe2\xd3\x68\xac\xc8\xa6\xba\xce\x7d\x46\xcd\
+\xf6\xf2\xe3\x97\xaf\x28\xae\x2a\x55\xfb\x2e\x1a\xc9\xca\x98\x95\
+\xe9\xd5\xc4\x00\x30\x95\xb0\x2e\x17\x9f\xad\x69\x00\xe3\x62\x50\
+\xdd\xe2\x9f\x57\x4b\xaa\xca\x54\x2b\x50\x75\xa6\x5a\x1d\xb0\xe4\
+\x4d\x76\x2e\x42\xd0\xb1\x02\xae\xfb\x02\x33\xf8\xed\xe4\xe0\x8e\
+\x54\xbe\x0e\xa6\xc5\xea\xd1\xc1\xc3\x5e\xa7\x73\x19\x45\xe9\xa9\
+\x72\xf5\xce\xb8\xa7\x59\x1a\xc7\xe4\xcb\x23\x7b\x5c\x01\x37\x00\
+\xc6\x9d\xcf\x2a\x41\x77\x6a\x13\x2d\x1b\xa6\xc5\xa6\xda\x2b\xc1\
+\xea\xea\xfc\x6d\xaa\x15\xa1\x33\xdc\x3f\x4c\xeb\xc3\xd2\x78\x66\
+\xb5\x95\x85\x3b\xe0\x0a\xc0\xe7\x50\xb2\xb7\x36\xc1\x4e\xc0\xb4\
+\xd8\xd5\x27\xdb\xdc\xaa\x95\x99\xb6\x6f\x21\x6b\x63\x5a\xe6\x92\
+\xa5\xfe\x70\x07\xe0\x1b\x42\x43\x2f\x3c\x9b\xd6\x05\xc3\x62\x58\
+\xf4\xe5\xbf\xf2\x74\x95\xa5\xcd\x96\xd2\xcf\xee\x5f\x38\x82\xbd\
+\x82\x36\xb2\x18\x8a\x36\x3c\xa0\x55\x74\x8a\xe9\x7a\x19\x2a\x75\
+\xd9\x43\x0b\xb2\x56\xab\x2c\x90\x7e\xec\x00\x43\xd7\x7b\xeb\x48\
+\x16\xdd\xc8\xc7\x05\x5e\x41\x5d\x14\x28\xbf\x10\x46\xc5\xbe\xee\
+\x8b\x7f\xce\xd4\x4b\x0b\xad\x65\xc8\xf2\xb1\xac\x8e\xf5\x6a\x74\
+\x83\x00\x2d\xa2\xcd\x14\xe9\x4f\xda\xc4\xd9\x0f\xa3\xb2\x87\xe8\
+\x2c\x94\x25\xd6\xe4\x6f\x67\x79\xbc\xf7\xd1\x45\x1f\xb8\x08\x68\
+\x12\x97\xd2\xed\x56\xba\x17\x0e\x93\xb2\x87\x7e\x1f\xd5\x5b\x2d\
+\x3b\x55\xce\x94\xd9\xd2\x2e\xfc\x96\xd9\x8f\xb3\xdc\x7e\x27\x37\
+\x40\x09\xfe\x3b\xdc\x04\x78\xce\x38\x88\x08\x0a\x42\xc6\x81\xbd\
+\x44\x3f\xc9\x59\xe4\xbd\x4d\xdf\xb1\x3e\xf6\x25\x81\x11\x41\x77\
+\xc3\x55\x40\x7d\xa3\x95\x85\xee\xda\x5f\xe4\x72\x18\x94\xbd\x34\
+\x79\x57\x1c\x93\x66\xbb\x24\x67\xbd\x1d\xc6\xff\x84\x53\x11\x43\
+\xe0\x2e\xa0\xce\xd1\x81\xf4\x90\x36\x31\x2a\x61\x4e\xf6\x93\xd1\
+\x65\x13\x8d\x82\xae\x13\xdb\x24\x06\xda\xba\x92\x1e\x84\xcb\x00\
+\xba\xac\x30\x40\xdb\xd1\x56\xc1\x98\xec\x27\x6a\x4d\x53\x5e\x7d\
+\x52\x65\x15\xba\x5a\x6c\x93\x16\xea\x55\xb8\xfc\xc0\xfd\x8e\x56\
+\x78\x18\x46\x6b\x5f\xfd\x71\x46\x3f\x95\x65\x42\xe6\xbf\x6c\xa3\
+\x78\x68\xeb\x4c\xfb\x05\x09\xd7\xe1\x73\x47\x4b\xd7\x6f\x4f\xc3\
+\x94\xec\xab\x5b\x63\x07\x33\x6d\xb6\x03\x16\xbf\x61\xb7\x98\x9c\
+\x46\x99\x46\xce\xd0\x7e\x5e\xde\x8f\x1d\xad\xfd\x75\xf7\xbc\x61\
+\x4c\x9b\x2d\xc3\x97\x1b\x1a\xdd\xe1\x52\xfb\x28\xb8\x10\x0f\x47\
+\x07\xb2\x28\x6a\x41\xaf\x80\x19\xf1\xd1\x82\x9c\x65\xfa\x2f\x1e\
+\x6d\xd7\xd8\x54\xb8\x22\x25\x01\x6e\x64\xe7\x1d\x6d\xa4\x78\x2f\
+\xf2\x68\x71\x66\x8b\x33\x5b\x4b\xec\x70\x8f\xa3\x44\xa3\x7d\xcf\
+\x68\xbb\x50\xa2\x35\x4c\x88\xaf\x6c\x84\x52\xc6\x6e\x8f\xd5\x85\
+\xfe\x58\xd8\x3c\x46\xc5\x74\x63\x13\xee\x64\x23\x02\xa3\xc4\x4e\
+\x5a\x60\x73\x60\x40\xfc\x69\x73\xe1\x2e\x26\x8d\xb6\xa8\xb2\x84\
+\x97\x18\x65\xb5\x9f\xd2\xfd\x2a\xb8\x94\x1d\x76\xb4\xd3\xee\x0d\
+\x70\xba\xc5\x9d\x30\x1e\xdc\x20\xc3\x0d\x32\xcb\x1e\x29\xa4\xbb\
+\x64\xd1\x05\xb7\x62\x99\x89\xbd\x2f\xd5\x82\xb8\x02\xa6\xc3\xaf\
+\x1e\x5b\xf6\x0e\x93\x66\x3b\x66\xc3\x44\xde\x62\x95\x8c\x7a\xb8\
+\x2c\x67\x1e\xb8\x45\x19\x86\x83\xaa\x5f\xa8\xfa\xc5\x88\x14\x61\
+\x0a\x5c\x8b\x4d\xa3\x7d\x0f\x66\x03\x91\x22\xf6\xc4\x33\x65\xb6\
+\xcb\x73\x37\xf1\xfb\x51\x53\x16\xdf\x82\x7b\xb1\x95\x79\x40\xf5\
+\x0e\xce\xc0\x68\x20\x74\x6a\x60\xee\xfc\xf6\x0c\xae\xf5\x32\x94\
+\xe2\xe5\x74\x8b\x27\x61\x32\x50\x5d\xc5\x1e\x5c\xc6\x84\xd1\x6e\
+\x3c\xb2\x03\xf1\x72\x8b\x15\xce\x88\xa0\xdb\xe0\x66\x16\x86\xfa\
+\x1f\xb9\x14\x31\x13\x93\x15\x42\x77\x5d\xe6\x95\xd1\x46\x09\x6e\
+\x07\x57\xb3\x22\x31\x03\x7f\xa5\x05\x68\x09\x26\x29\xe4\x49\xef\
+\x6f\x9e\x64\x69\xb3\x0d\xdf\x3d\x17\x71\x3a\xe7\x52\x8a\x90\x44\
+\xeb\x1a\xe6\x66\xbd\x0f\x62\xe3\x30\x41\xa1\xc6\xd4\x5e\x09\x56\
+\x57\xe7\x6f\xb3\xa4\xd1\xee\x2d\x39\xa4\xfe\x61\x5a\x1f\xc4\xa9\
+\x5e\x86\x82\xf8\x6f\xb8\x9b\xe5\x3e\x88\x89\x35\x98\x9c\x50\x53\
+\xa2\x82\xdc\x39\x27\x0a\x2c\x65\xb4\x74\xa5\xf8\xce\xb8\xa7\x11\
+\x1f\x0f\x1f\xcc\xa8\x4a\x1f\x5c\xce\x0a\x46\x1b\xd9\xed\x5a\x2d\
+\x28\xc7\x30\x29\xa1\x96\xd4\xb9\x3d\x5c\x5e\x64\x09\xa3\xa5\x1c\
+\xe0\xe0\xf9\x2f\x21\x2e\x8d\xab\x30\x20\x32\xe4\x6a\xb8\x9d\x3f\
+\x09\xeb\x72\xb1\x16\x88\xcd\x98\x8c\x50\x4b\xd5\x75\xee\x33\x6a\
+\xb6\x9f\x77\xb8\xc5\x55\xa5\x6a\xdf\x45\x23\x11\x8f\xe6\x5d\x78\
+\x58\xe3\x48\x16\x2f\x82\xe9\xe1\x9c\x16\x62\xf2\x48\xa1\xbf\xba\
+\xa1\x60\x87\xdf\xce\x68\x29\x43\x02\x71\x68\x89\xa4\xf7\xe1\x7a\
+\xfe\x30\xda\x48\x49\xc0\xc5\x05\xa8\xb5\x6a\xa7\x04\xa9\xa1\x9b\
+\xc3\xd4\x53\x67\xaa\x4d\x4b\xef\x9a\xb4\x33\x56\xed\x38\xb5\x07\
+\xc6\xbf\xe5\xaa\x0e\x54\x84\xae\x70\x3f\x13\x09\x8c\xea\xdd\x56\
+\x1b\xf8\x83\x98\x7c\x90\xaf\xd4\x33\xf1\x5f\x86\xb7\x3d\xdf\x7f\
+\x3c\x5b\x1d\xb4\xf4\x6d\x8c\x77\xeb\x3e\x98\x1d\xa0\xf5\x0f\x17\
+\x34\x6b\x57\xab\x48\x91\x98\x74\x90\xaf\x15\xa8\x48\xea\xb3\x2b\
+\xc7\xf9\xdc\x74\xf7\x69\x26\x3b\x72\xdd\x17\xea\x15\x91\x21\x18\
+\x67\xdf\x1c\x27\x44\xc0\x05\xcd\x30\x5a\x59\xec\x87\xc9\x06\x19\
+\xad\xee\x0b\x5e\x51\xbf\xdf\x39\xdb\xeb\x34\x31\x2a\xfe\xad\xec\
+\x9d\xaf\x3e\xbc\x78\xb4\x6e\xe2\x18\x53\x5f\x17\xac\x11\xfa\xc2\
+\x0d\x0d\xe4\xf2\xc8\x1e\x57\x68\x03\x5d\x84\xc9\x06\x99\x29\x6a\
+\x1c\xf9\xd2\xaa\xf1\xea\x37\xe9\x31\xea\xb2\xdc\x4d\xea\x81\xd2\
+\x1c\x35\xa3\x34\xef\x1c\xa5\x1c\xde\xaa\x17\x2a\x1f\xb1\xf6\x73\
+\xf5\xff\xe6\x3e\xad\xb7\xe4\xc1\xd8\x19\xaa\xfc\xb6\xe1\x3d\x03\
+\xe1\x8a\x38\x3e\x80\x20\x08\xf5\x6f\xd9\xa4\x6d\xa4\xd4\x13\x13\
+\x0c\x82\xa0\x3a\xaa\x71\x2a\x62\x08\xdc\xd1\x87\x74\x88\x11\x2f\
+\x47\x35\x2f\xa8\xb5\xea\x1c\xdd\xb7\x49\x51\xee\x2d\x1d\x1b\x34\
+\x25\xaa\x91\x2b\x26\xbc\xd0\xa8\xa8\x15\x79\xbf\xa4\x51\x4d\x6a\
+\xf0\xb2\x77\xd5\xa1\x2b\x42\x1b\xd5\x93\xc9\x63\x11\xc3\x86\xb5\
+\xaf\x53\x4c\xd7\xcb\xe0\x92\x3e\xfb\x28\x26\xfc\x0f\x93\xea\x5c\
+\xfd\x25\xe6\x11\x75\xd4\xba\x09\xea\x84\xb4\x68\x8f\xfa\x2a\x6d\
+\xba\x2a\xef\x49\x68\x52\x33\xf6\x27\xa9\x71\x19\xc9\x4d\x8a\x3a\
+\x08\x24\xe7\x6d\x6e\x54\x6b\xf2\xb7\xeb\x5f\xf3\x9b\x12\x7d\xa1\
+\x3f\xff\xdc\xf3\x7c\x65\x95\xe5\xeb\xb7\xac\x9a\x52\xe5\xe9\x53\
+\x2a\x0f\xfc\x6d\xf6\x20\xcc\xfd\x06\xa4\xed\x6e\x3f\x86\x4b\xfa\
+\x22\xa7\x56\x11\xba\xe2\xf2\x42\xe3\x1f\x6f\xde\xda\xf0\xb5\xba\
+\xbe\x20\x8d\xa9\x6e\x04\xa0\xe5\x7c\xf1\x63\x14\xe6\xbc\x87\xcb\
+\x0e\x28\x36\xde\x5a\x54\xc7\x05\x4e\xb7\xb8\x0e\x93\xa9\x79\xa2\
+\xca\x51\x1f\x6c\x99\x6c\x78\x72\x3e\xf0\x0f\x85\x27\x8b\xd5\xdf\
+\x45\xf5\xc4\x5c\x6f\xf8\xb2\xc3\x4a\x18\x66\xeb\x72\x6a\x87\x62\
+\x12\x79\xa7\xeb\xa6\x3f\xa8\xa7\x2b\x2d\xca\x5e\xab\x56\x99\x74\
+\x15\x15\x18\x4f\xe8\x96\x1f\x30\xbf\x3d\xe6\xde\x4a\x83\xe1\x9a\
+\xde\x5f\xc9\xcd\xc7\x24\x6a\xbd\xae\x8a\xea\xa5\x3e\xb6\xec\x1d\
+\xfd\x6c\x96\xb5\xb6\xde\xe0\x5c\x4a\xaa\xca\xd4\x6b\xa2\x1f\xc0\
+\xbc\x6e\x58\x39\x1d\x23\x7b\xfc\x16\xee\xd9\x42\x9c\xb2\xf0\x11\
+\x26\x8f\xef\x45\x05\x50\xc8\x78\xe9\xc3\xd8\x11\xed\x67\x29\x60\
+\x8f\x4f\xb6\xb9\x31\x97\x3d\x49\x16\x43\xe1\x9e\x2d\x31\xda\xc8\
+\x6e\xd7\xa2\x43\xae\x39\x15\xaf\x7a\x25\xbe\xaa\x57\xa1\xca\x2b\
+\x2f\x84\x8b\x31\x02\x75\x76\xb8\x76\x7a\x5f\xcc\xe1\x86\x55\xe1\
+\x0a\x0f\xba\x06\x2e\xda\xdc\xb3\x5a\xb7\x38\x0b\x93\xc6\x7c\xdd\
+\x35\x77\xa8\xbe\x6b\xa2\x5a\xab\x00\x99\x09\xec\xa6\x82\x09\xd3\
+\xe0\xa2\xcd\x4e\xf5\x42\x3f\x31\x2b\x18\x2f\xd5\x79\x45\x4a\x99\
+\x35\x29\xaf\x3e\xa9\xf7\x53\xc3\x5c\x6d\xb8\x6f\x99\x33\x52\xbc\
+\x1d\x6e\xda\xf4\xae\x76\x35\x26\x8b\xf5\x8c\xf7\xc3\xad\x53\xd4\
+\x6d\x45\x7b\xe1\x72\x16\xe2\xeb\x1d\x33\x31\x3f\x3d\x6b\x29\xdc\
+\xb4\xb1\xb3\x5a\x45\x0c\xc1\x24\xb1\xb6\xae\x9f\xfe\x10\x52\xca\
+\x2c\x02\x8d\x3f\x35\xaf\xc4\xbc\xf4\xf8\xb1\x4c\x84\xab\x7a\xb8\
+\xc0\xa0\x0d\xd0\x46\x4c\x12\xb6\x6a\x0d\xd0\xbd\x7d\xa4\x94\xf9\
+\x8f\x99\x07\x16\x63\x2e\x7a\xd6\x6a\x18\x6b\x03\x04\xc8\x52\x1f\
+\x4c\x0e\x76\x75\xe5\xd4\x9e\x48\x29\xf3\x03\x67\x6a\x6a\xd4\x6e\
+\xf1\xcf\x63\x0e\x7a\xae\x9b\x80\xaa\x60\xf5\x77\xb5\xc2\x16\x4c\
+\x0e\xfb\xa5\x94\x1d\x2e\x2f\x82\x23\x1a\xcc\xe2\xec\xf5\x98\x77\
+\x9e\xcc\xd6\x2d\xae\x85\xc1\xd6\xfd\x28\xa6\x48\x0f\x61\x62\xd8\
+\xb7\xaf\x17\x95\x1b\xac\x4d\x29\xcb\x82\x33\x1a\xc4\x83\x49\x23\
+\x31\xdf\x3c\x5d\xe3\x55\x84\xde\x70\xd9\x5f\x32\x10\x70\x56\xcb\
+\x61\x4a\x19\xf0\x1d\x9b\x0b\x77\xa1\x15\x0f\xce\x6e\x9b\xc8\x40\
+\x88\x08\x0a\xc2\x64\xe0\x53\x7f\x9f\xfd\xd8\xcf\xe5\x21\xe9\xec\
+\x11\xb4\x8e\x21\xcb\x51\x60\xbc\x91\x06\x91\xf7\xc1\x6c\x15\x61\
+\x01\x26\x03\xf4\xc7\x19\xfd\x90\x52\xd6\x4a\xe8\x98\xa6\xbd\x12\
+\x8c\xf9\xd4\x70\x1a\xd8\x5c\xbe\x6f\x8b\x45\x04\xff\x15\xb7\xc5\
+\xa0\xc6\x52\xca\x4e\x54\x57\xc0\x45\x5b\xc0\xf0\x35\x9f\x61\x0e\
+\x79\xe8\x57\xd6\x4e\x16\xff\xcc\x6f\xba\x97\x22\xfd\x80\x49\x00\
+\x35\x27\xa5\x8c\x8c\x97\xca\x0b\x82\xc6\xa1\xec\x0f\x14\x18\xf7\
+\x94\x99\x20\x7d\xc7\xa5\xd1\x76\x90\xc5\x2b\xb5\x01\xa8\xc4\x24\
+\x80\xbc\x49\x29\xcb\xaf\x40\x4a\x99\x27\xe8\x03\x24\xe6\x4b\x83\
+\x35\x13\xca\xdb\x44\x8b\xed\xf9\xcb\x40\x90\xc5\x50\x04\x1f\xf2\
+\x45\x4a\x19\x35\x8f\x04\xbf\x40\xbf\x00\x50\x82\xd1\xd3\xd9\xad\
+\x30\x96\x2f\xa7\x0d\xeb\x72\xb1\xf6\xe2\x79\x08\x3e\xe4\xeb\xf2\
+\x90\xe8\xbf\x56\xcb\x97\x69\xd3\x31\x2f\x3c\x74\x73\x70\x24\x8b\
+\x17\xf1\x93\x81\x20\x0b\x03\x11\x74\xc8\x28\xdd\x32\x1b\x1d\x87\
+\x2b\x4f\x57\xa9\x37\xcd\x7a\x14\xf3\xa1\x21\x29\xc2\xc3\x3c\x5d\
+\x62\x58\x8c\xa0\x43\x66\xa7\x94\x9d\xe2\x2c\xa5\x4c\xd9\x3b\x1f\
+\x73\xa0\xe1\x2b\xbc\x89\x7c\xec\x6a\xdd\x41\xd7\x23\xdd\xcb\x47\
+\x89\xda\x6e\x49\xbd\x2f\xfe\x39\x8c\x45\x33\xf5\xe7\x98\x01\xea\
+\xeb\xeb\x26\xa8\x39\x27\x0a\xb8\x30\x5b\xfa\xe3\xd2\x65\xce\x10\
+\xc4\xbe\x81\xe2\xe2\x5c\xb4\xce\xd1\xfe\xaa\x7c\x88\x60\xfb\x46\
+\x03\x16\xbf\xf1\x73\x32\x3b\x7d\x81\xa6\xf6\xe5\x18\x97\xa6\xf5\
+\x54\xf2\xfb\xdc\xec\x6e\x13\x0e\xa5\x20\xe6\x5c\x36\x86\x0c\xeb\
+\x72\xb1\x66\xb6\x87\x11\x6c\xdf\x28\x36\x63\xf9\x39\x0b\x8b\x6a\
+\xca\x46\xec\x9e\xa7\x06\xcd\x7f\x09\xe3\xd3\xc4\x2f\x02\x5e\x3e\
+\xa4\xd1\x99\xb5\x94\xf0\x22\xe2\x5e\x5f\xd9\x8e\x98\x81\xbf\xb2\
+\xf1\x59\xad\xf4\x20\x82\xec\x1b\xdd\x30\xa3\x5f\xa3\xd7\x5a\x33\
+\xcb\xf2\xd4\xaf\xd2\xa6\xab\xc1\x9a\xf1\xa2\x40\x49\x7d\xf5\x5e\
+\x38\x9c\x9b\xdd\xed\xb2\xdc\x4d\x88\x39\x6f\xd5\xc0\xb4\x17\x9c\
+\x8d\x20\xfb\x46\xe3\xb6\x86\x37\x7b\xb1\x65\x9f\x28\x50\xbf\x4d\
+\x8f\xd1\x2f\x04\xe0\xee\xfc\x2f\x4a\xca\x5e\xc7\x8d\xe1\xd2\x1f\
+\x17\xc4\xbc\xde\x87\xb2\xe9\xf6\xbc\x9a\x1b\x16\xe2\xc4\x8d\x31\
+\xdf\xe8\x8a\xc8\x10\xaf\x6f\x50\x55\xd7\x9c\xd6\x7f\x42\x4f\x48\
+\x8b\x56\xfb\x25\x8d\xd2\xff\x6f\xf1\x3a\x8e\x42\xc2\xf3\xdc\xa4\
+\x86\x2d\xc9\x41\x81\xf1\x86\x6e\x94\x75\x88\x11\x2f\xb7\xe1\x8d\
+\x31\xe1\x49\x04\xd7\x37\x1a\xb6\xe2\x3f\x3e\x5b\x84\x85\x27\x8b\
+\xf5\xb3\xdf\x37\x37\x4c\xd4\x77\xbe\x9d\xa6\xf5\xe1\x6a\x2c\xe3\
+\x33\x53\xb8\xd9\xdd\xf6\xc1\xee\xb6\x81\xd2\x8b\xe2\x63\x76\x3c\
+\x42\x88\x47\x70\x7d\xf3\x71\x67\x6b\xd1\x6e\x43\x3f\xa8\x1c\x28\
+\xcd\x51\xe3\x32\x92\xd5\xff\x6c\x99\xac\x3e\xb2\x64\x8c\x7a\xf3\
+\xac\x47\xf5\xba\x04\x66\x5c\xc1\xbd\x2d\xf6\x09\x53\xc7\xf3\xde\
+\xf8\x67\xb9\xd9\xdd\xae\xc8\xdb\x82\x35\x54\x5f\x73\x6c\x65\xb4\
+\x6d\xc3\x7b\x06\x6a\x5b\xf6\x2a\x04\xb6\xf5\xa2\x0a\x58\xfe\x80\
+\x3e\xc6\x91\x09\x2f\xcf\xdd\xa4\x37\x75\x0c\xdd\xf2\x83\xbe\xc3\
+\x0e\x59\xf0\x4f\xf5\xf6\x39\x43\x9a\x9d\x76\x76\x75\xf4\xfd\xfa\
+\xcd\xa6\xbb\xe7\x0d\xd3\x8b\x5d\x8f\xdd\xf4\xbd\x1a\xb1\x27\x5e\
+\xdd\x50\xb0\xe3\xe7\x0e\xbd\x66\xa7\xb0\x2d\xc8\x5a\xcd\xcd\xee\
+\xf6\xfe\x85\x23\xb0\x8e\xce\x3d\xb7\x3d\x19\x18\xd5\xbb\xad\x9d\
+\x8a\xce\x0c\x45\x60\xed\x9f\xb2\x44\xdd\x16\x8a\xab\x4a\x3d\xaa\
+\xb9\x98\x7d\x51\x83\xba\xd3\xf2\xb2\xbb\x5d\x99\xb7\x15\x6b\xa9\
+\xde\xba\x12\x9f\x40\x37\x06\xe8\x1c\x0d\x5e\xf6\x2e\x17\x86\xd0\
+\x7d\xc1\x2b\xa6\x8f\xed\xd2\xdc\x8d\xdc\xec\x6e\x7b\x26\xfe\x0b\
+\xeb\xe9\xdc\x0f\x65\xf3\x90\x85\x00\x9d\x93\x81\xb0\xbb\x38\x93\
+\x0b\x33\xb8\x67\xde\x30\xd3\xc7\xb7\xef\xa2\x91\xdc\x98\xed\xaa\
+\xc3\xa9\x58\x53\xe7\x1d\x25\xd8\x22\x2b\xc1\xe9\x96\x1e\x45\x40\
+\x5b\xaf\x0f\xb6\x4c\xe6\xe6\xc6\xd3\x35\xd1\x0f\xf8\xe5\x88\x26\
+\xfd\xd8\x01\x6e\x0c\x97\x32\x4f\xb0\xae\x6c\x56\x09\xcc\xe5\x96\
+\x22\x10\xcc\xd6\xe9\x1f\xb1\x8f\xab\x27\x4f\x57\x72\x61\x02\x7b\
+\x4b\x0e\xf9\x6d\x9c\xa9\x3a\x18\x6e\x95\xf1\x7a\x6e\x2b\x84\xb1\
+\xed\xb4\xaa\xe3\x02\xd4\x42\x68\xfd\x8e\x6b\x75\xfe\x36\x6e\x4c\
+\x80\xb2\x1c\xfc\x35\xd6\x1d\x22\x43\xd4\xdc\xf2\x23\xdc\x8c\x35\
+\x75\xba\xc0\x1a\xab\x53\x2b\x81\xe9\x5d\xed\x14\xe9\x16\x04\xb1\
+\x75\x7a\x91\xa3\xdd\x16\xdd\x6e\xfb\x4b\xcc\x23\xcc\x5c\x83\x66\
+\x9d\x39\x19\xc9\x58\x63\x75\xf3\xbc\xdd\xd2\x4d\xec\x7e\x1c\x93\
+\xc5\xb7\x10\x44\xef\x75\x67\xdc\xd3\x6a\x79\xf5\x49\x6e\x16\xbf\
+\x15\x5a\xb9\x50\xb1\x71\xea\x72\xc0\xcb\x1f\x37\xea\x6a\x81\xb5\
+\xf6\xb3\x46\xb1\x9c\x5f\xbb\x02\x01\xf4\x4e\xd4\x8e\x7a\x5b\xd1\
+\x5e\x6e\x8c\xf6\x60\x69\xae\x65\x5a\x70\xcf\x3a\xb0\x94\x9b\x71\
+\xff\x61\xd7\x1c\xac\xb7\x5f\xb4\x84\xe5\x94\xaf\x6a\x04\xd0\xbb\
+\x73\x5a\xfa\x89\xc7\x0b\xd4\x0d\x96\x2e\x16\x58\x65\xfc\x1f\x58\
+\xf4\x1a\x37\x63\x5f\x51\x5d\x89\x4e\xbc\xbf\xe4\xdb\x56\x31\x99\
+\x02\x46\xb5\x22\x11\x3c\xef\x44\x15\xb9\x78\x81\x8e\x49\x7a\x24\
+\xbe\x62\xb9\x3f\x76\x74\x35\x99\x17\xde\xd9\xf8\x2d\xd6\xdd\x4f\
+\x39\xb7\x8a\x18\xc2\x5e\x7e\xad\x2c\x7c\x84\xe0\xb5\x5c\x54\x77\
+\x96\x17\xe8\xcb\xff\xdd\x7e\xb8\xc0\x80\x0f\x65\xf5\x8f\x70\xa8\
+\x08\x10\xd6\x9f\xbe\xbb\xfd\x0f\xce\x6b\x39\x38\x3a\xe0\x69\x47\
+\x4b\x3b\x47\x2b\x37\x23\xa4\xac\x88\xd3\x35\x67\xb8\x89\xc7\xc0\
+\xa5\x63\xb0\x0e\x6b\xb5\x94\x2d\xa7\x8d\x19\x78\x89\xf6\xd0\x15\
+\x08\x5c\xf3\xf3\x3b\xa7\xef\x4f\xe2\x66\x61\x47\xef\x5f\xc4\x44\
+\xdd\x5c\x9e\xea\x25\xcc\xcb\x5c\x89\xb5\x58\xab\x13\x8e\x64\xf1\
+\x22\x76\x4a\x2a\x2a\x41\x77\x22\x68\xcd\xbf\x1d\xc6\x4b\xd6\x41\
+\x41\xc5\x51\xbd\x23\x30\x2b\xb1\x79\x21\xe5\x23\x6e\xcc\x96\xd2\
+\xdd\xfc\x71\x4d\xda\x9a\xb5\x12\xa4\x2e\x0c\x5d\xd1\x15\x46\x22\
+\x68\x4d\xeb\xd1\xa5\x6f\xe9\x9d\x12\x78\x80\x6e\xc1\x51\x1d\x5b\
+\x96\xe2\x43\xb5\x77\x1b\x6b\xaa\x69\x37\x5e\x5b\xfb\x39\xd6\xa5\
+\x2e\x69\x38\x1a\x3b\xda\x44\x94\x48\xce\x4b\xb3\x41\x4a\x2d\xa2\
+\x45\xcc\x6a\x87\xdf\xe4\xbc\xcd\xdc\x98\xed\x9a\xfc\xed\x58\x9f\
+\xb5\x75\x12\x66\xb2\x64\xb6\x39\x08\x5a\xc3\xb7\x93\xe8\x23\xd8\
+\x89\xea\x0a\x2e\x16\xef\x9e\x92\x4c\x4b\xe5\xcf\x7a\x23\x4a\x8b\
+\xe2\x05\x2a\xfe\x7e\x83\x36\x47\xb1\x56\x85\x43\x4c\x18\xed\xe5\
+\x91\x3d\xae\x40\xb0\xce\x15\x75\x1e\xa0\x9b\x3a\xbc\x5c\xbd\xa5\
+\x32\x89\x93\x77\xc5\xa9\x57\x4e\xed\xc9\x7c\xec\x28\x35\x8d\x27\
+\xa8\x16\x07\xd6\xac\xa8\xb6\x51\x82\xdb\xb1\x50\xbf\x36\x18\xc1\
+\xfa\x25\xcb\x60\x53\xe1\x4e\xae\x16\x2b\x1d\x1b\x3c\x95\xfc\xbe\
+\xad\x52\xf2\x8a\x2a\x4b\xb8\x89\xdf\x8c\xfd\x49\x58\xbb\x24\x59\
+\x14\xf1\x71\x8c\x31\x51\x33\x43\x5e\xa0\x6c\x03\x29\xe1\x45\xdb\
+\xc5\x90\xa7\x86\x90\x79\xe5\x85\x58\xb7\xba\xd9\x0a\xaf\xa2\x58\
+\x38\x63\xa2\x36\xe0\xb4\xdb\xb3\x3b\xb4\xfb\xbb\x6b\xee\x50\x5b\
+\xc6\xf0\xb3\xed\x91\x5c\xfd\x3a\xa1\x2c\x0c\xee\x3f\x92\x29\xd2\
+\x0f\x2c\x7c\x1c\xdb\x0c\x93\x3d\x57\xd4\xae\xdb\xde\x39\x9a\xa7\
+\x6c\x5d\x88\xfa\xb9\x94\x71\x5c\x99\xad\x55\xaf\x50\x9b\x6a\xb6\
+\xb2\xb8\xde\xda\x4e\x9b\x2c\x5e\x44\xcd\xd3\x60\xb0\xe7\xaa\xbd\
+\x12\xac\xae\xcd\xdf\x6e\xdb\xc5\x39\x3e\x35\xc2\xd6\xf1\x0b\x99\
+\xff\x32\x57\x66\xdb\x7f\xf1\x68\xac\x5b\xba\x49\x16\x1a\x7a\xa1\
+\x65\xbd\xb6\x9d\x2c\xfe\x19\x41\xf2\x9c\xf6\x95\x59\x96\x67\xbb\
+\x85\x49\x35\x0e\xa8\xf3\xaf\x9d\x63\x77\x47\xdc\x53\x5c\x99\xad\
+\x3f\x5a\xc9\x5b\xf3\x26\x59\xd0\xf5\x56\x2e\x3e\xd3\x0f\x41\x6a\
+\xfc\x32\x43\x46\xa9\xbd\x0c\xf7\xed\x8d\xdf\xd8\x3e\x6e\x74\xf3\
+\xcd\xee\x19\x24\x39\x27\x0a\xd4\x1f\x8f\xee\xd3\xeb\x41\x74\x9c\
+\xda\x1d\xeb\x55\x3f\xb7\x15\x1f\xb0\xae\xd9\x2a\xd2\xeb\x08\x52\
+\xe3\xfa\x73\xcc\x00\x75\xd3\x91\x74\xdb\x2c\xd4\x5b\x63\x07\xdb\
+\x3e\x66\xb7\xc5\x3e\xc1\x4c\x3c\x28\x97\x3b\x5b\x33\x4e\xaa\xb7\
+\x41\xc6\x49\x5d\x27\xc2\x76\xc6\xaa\x1f\xa7\xca\xea\xe8\xf5\x5f\
+\xaa\xc3\x56\x7e\xa0\xf6\x4b\x1a\xa5\xe7\x7e\xd3\x1f\x11\x3b\xe4\
+\x42\x73\x79\x6d\x57\x33\xdb\x89\x08\x50\xf3\xf2\x6f\xbf\x4a\x9b\
+\xce\x7c\x09\x3f\xba\x09\xc7\xea\x35\xdc\x96\x88\x8a\xe7\x98\xcd\
+\xa9\x33\xd5\x6a\x7e\x45\x91\x9a\x5a\xb4\x47\x5d\x94\xbd\x56\xcf\
+\x7f\x9d\xa4\x99\xe6\x27\xdb\xdc\xea\x5b\x1b\xbe\xd6\xdb\xae\x93\
+\x69\x52\x06\x08\xfd\x01\x87\x69\x1a\x62\xb6\x5f\x58\x39\x13\x21\
+\x1e\x01\x6a\xbe\x84\x84\xe7\xd5\x55\x87\x53\x99\x35\x5b\xda\x41\
+\xf1\x10\xa7\x77\x5b\x79\x65\xf7\xe4\xe9\x4a\x3d\x7f\x35\xfd\xd8\
+\x01\x3d\xde\xf1\x99\x29\xaa\xb2\x77\xbe\x7e\x75\xfb\xfd\xcd\x93\
+\xd4\x57\xd7\xfc\x57\x7d\x62\xf9\x7b\x6a\x9f\x85\xc3\xd5\xae\x73\
+\x9f\xd1\xcd\xd3\xee\xe7\xe0\x8c\x68\x8e\x95\xcd\x36\x0d\x01\xf2\
+\xce\x74\x23\xf7\x2e\x50\xcb\x4e\x95\xfb\xd5\x3c\x69\xa7\x7d\xb8\
+\xbc\x48\xdd\x52\xb8\x4b\x2f\xc0\xf2\x93\x56\xe4\x6d\x51\x77\x68\
+\x46\x41\x97\x16\xea\xee\xc6\x8f\x9c\x2c\xe6\xa2\xa8\x7b\xda\xd1\
+\xfd\xfa\xfb\x56\x9d\xdd\x6d\xee\x2a\xce\xd0\xb3\x4b\xe6\x1f\x5a\
+\xa5\x4e\xdd\x9b\xa8\x4e\xdc\x31\x43\xfd\xcf\x96\xc9\xea\x88\xb5\
+\x9f\xeb\xb7\xe7\xa8\x87\xd9\x3d\xf3\x86\xa9\x7f\x8d\x19\x68\x99\
+\x26\x96\x90\x57\x4a\xb5\xb2\xd9\x96\x21\x40\xde\xeb\xf7\x51\xbd\
+\xd5\x21\xcb\xc7\xaa\xe1\xbb\xe7\xea\x1f\x2b\x4e\xf9\xa8\xbc\x1f\
+\xed\xac\xb2\xca\xf2\xd5\x8d\x47\x76\xa8\x89\x59\x6b\x54\x79\x4f\
+\x82\xfe\x73\x94\xaa\x71\x3d\xb6\xec\x1d\x3d\x47\xf6\x4f\x33\x07\
+\x34\xab\x35\x0a\xd5\x3c\x25\x43\x21\xa3\x21\xe3\xbd\x2a\xaa\x97\
+\xad\x63\x42\x85\x74\x68\x47\xba\xbe\x20\x4d\x3f\x03\x8d\xcb\x48\
+\x56\xa3\xf6\x25\xea\x31\xa2\x9d\x29\xb5\xcf\xa1\x9d\x2f\x8d\x25\
+\x9d\x87\xd2\x0e\x95\x7e\xde\x07\xcf\x7f\x49\xcf\x57\xa5\x7a\xc5\
+\xd7\x4d\x7f\x10\xa6\xcb\xa6\x8a\x2d\x69\xb4\x6d\xa2\xc5\xf6\x08\
+\x8e\x6f\x45\x5f\x85\xef\x8c\x7b\x5a\x5f\xbc\x2f\xaf\xfa\x58\xfd\
+\x28\x35\x42\x5f\xe4\x64\x96\x75\x45\xff\xd9\x17\x3f\x46\xa9\xa1\
+\x9b\xc3\xf4\x45\xff\x74\xf2\xbf\xd5\xde\xda\x4f\xd2\x3b\xe2\x9e\
+\x34\xb4\x23\x02\xfd\xec\xbd\xc7\xe6\x09\xf0\xaf\xac\xfe\xd4\x80\
+\x4b\x20\x55\x6a\x71\x55\xa9\xbe\x4b\xde\x5d\x9c\xa9\x1b\x39\xfd\
+\x82\xf8\xe9\x6c\x96\x62\xfa\xd3\xf9\x2c\xc5\xf4\xa7\x33\xda\xa1\
+\x2b\x42\xf5\x3f\x8e\xbd\x12\x5f\xd5\xff\x40\xfe\x74\x5e\xdb\x39\
+\xba\x2f\x7a\x88\x19\x57\x23\xc1\x65\xbd\x02\x34\x91\xe2\xed\x08\
+\x0e\x64\x37\x7d\x99\x36\x9d\x99\x8f\x95\x54\x88\x9e\x52\x0b\xe9\
+\xd8\x83\x32\x5e\xc8\xc0\xe9\x7c\x38\xe6\xc0\x12\xdd\xc0\xe9\xb8\
+\xe3\xbf\xdb\x14\xdd\xc0\x47\xae\xfb\x42\xff\x03\x4e\x06\xfe\xf0\
+\xe2\xd1\x3f\x1b\x38\x0f\x1f\x3c\x5b\x24\xa5\xdb\xad\xd6\x6b\x5d\
+\x2e\x0b\x7d\x11\x1c\xc8\x6e\x5a\x9c\xbd\x9e\x9b\xcb\x0c\x74\xdc\
+\x84\x98\x9f\x7f\x6d\x57\xea\x63\xc5\x6a\x5f\xcf\x20\x38\x90\xdd\
+\x74\xa8\xec\x30\x37\x66\x9b\xc3\x49\x76\x49\x0b\xd3\xbf\x9e\xb2\
+\xde\x31\x82\x2c\xbc\x81\xc0\x40\x76\xfb\x60\x49\x85\xd0\x79\x81\
+\x2e\x42\x20\xee\xe7\x1f\x23\x48\xaf\x5b\xf0\x18\x41\xfc\x04\xc1\
+\x81\xec\x24\xaa\xcd\xcb\x13\x4b\x73\x36\x20\xee\xe7\xd7\x47\x90\
+\x85\x8f\xac\x98\xf6\x35\x19\xc1\x81\xec\x24\xca\x00\xe0\x09\x74\
+\x69\x68\xb0\xd4\xe2\x24\x2b\x9a\x6d\x1c\x0f\x83\xff\x50\xd2\xeb\
+\xfa\x97\xdd\x65\xb9\x9b\xf4\xab\x94\x90\x31\xa2\x76\x42\x0b\xb3\
+\xd6\xa8\x13\x7e\x9c\xa6\xdf\xe3\xf7\x47\xac\xe9\xdf\xe6\x89\x6f\
+\xd2\x63\x60\xb0\xf5\x35\xdb\x8a\x66\x9b\x62\xe7\x41\xa7\xa4\x74\
+\xca\x83\x04\xe6\x43\xe7\xa6\x54\x4c\xa5\x9d\x12\x64\x6a\xcc\xe9\
+\x02\x08\x4f\x84\x6e\xf9\x01\xe6\x5a\x5f\xc9\x56\xcc\x46\x48\xb7\
+\xf3\xa0\x47\xef\x5f\x04\xd7\xf3\x33\x9f\x6e\x53\x4c\x8d\xf9\xc1\
+\xd2\x5c\xae\xc6\x97\x6a\x34\xc0\x5c\xeb\xe9\x47\x2b\x9a\xed\x21\
+\xbb\x0e\x78\x97\x39\x43\xb8\xfa\x2a\x6d\x55\xa8\xfd\x0e\xd5\x1b\
+\x30\x23\xe6\x54\x45\xeb\x4c\x0d\x5f\x31\xa7\xdb\x69\x30\xd7\x7a\
+\xca\xb0\xe2\x31\x42\xbe\x5d\x07\x7c\xcc\x86\x89\x70\x3a\x8b\xf0\
+\xce\xc6\x6f\x4d\xab\x89\xc0\x1b\x21\x0b\xfe\x09\x73\xad\x27\x21\
+\xd7\x8a\x66\x7b\xcc\xae\x03\x4e\x1f\x0e\x80\x35\xa0\xe3\x1c\x33\
+\x62\xfe\x7c\xca\x87\xdc\x8d\x2d\x0f\x85\xe0\xbd\x50\x91\x15\xcd\
+\xf6\x84\x5d\x07\x9c\xce\x0a\x81\x35\x98\x93\x91\x6c\x4a\xcc\x3f\
+\xdf\x3e\x95\xbb\xb1\xfd\x83\x81\x45\x8b\x18\x56\xa9\x15\xcd\xb6\
+\x1a\x95\x9f\x80\xd1\x7c\xbf\x73\xb6\x29\x31\x4f\x38\x94\xc2\xd9\
+\x79\x78\x15\x8c\xb5\xe1\x63\x84\x2a\x6b\x39\x6d\x68\xe8\x85\x76\
+\x1e\x70\xaa\x49\xca\xdb\xc7\x12\xab\x42\xb5\x74\xcd\x88\xf9\xbe\
+\xe3\xd9\x5c\x8d\x6b\x6e\xf9\x11\x18\x6b\xc3\xaa\x71\xa8\x8e\x0b\
+\x2c\xe3\xb5\x9d\x65\xf1\xd7\x76\x1f\xf4\x25\x39\xeb\xe1\x74\x7e\
+\x86\x8a\xc2\x98\xd1\x2e\x86\xea\x08\xb3\xde\x1f\xae\xa5\x6c\x3f\
+\x8a\xba\x08\x9e\xe4\x88\x19\x78\x89\x65\xcc\x36\x30\xaa\x77\x5b\
+\xbb\x0f\xf8\x1d\x71\x4f\xa9\x25\x55\x65\x70\x3c\x3f\x41\xed\xb6\
+\xa9\x20\xba\x19\xb1\xa6\x82\xe8\xbc\x41\x5d\x28\x60\xac\x0d\xab\
+\xfd\x94\x7b\xda\xc0\x6c\x4d\x16\x55\xc6\xa7\x6b\xba\xd5\x35\xa7\
+\xe1\x7e\x26\x41\x1d\x0d\xe6\x65\xae\xd4\x1b\x21\x9a\x15\x67\x6a\
+\x6f\xc3\x1b\x33\x0f\x2c\x86\xb1\xb2\x60\xb6\x3c\x1c\x23\xd4\xd5\
+\xd6\xa2\xdd\x70\x41\x93\x18\x9f\x1a\x81\xec\x13\x13\xf8\x16\x75\
+\x11\xd8\x38\x46\xb0\xfb\x07\xb2\xf3\x45\x6d\x46\x80\x39\x50\x26\
+\x88\xd9\xf1\x9d\x9b\xb9\x82\xbb\x71\xa6\xee\xc0\x30\x56\x06\x3e\
+\x90\x9d\x4d\xfd\x3a\xc5\x4b\x00\xa8\xf1\x22\x30\x07\xea\x8f\x65\
+\x76\x7c\xf7\x94\x64\x72\x37\xce\xc3\xd7\x7c\x06\x63\x65\x22\xf5\
+\xcb\xe6\x97\x1a\xce\xd7\x33\x2b\x42\xe1\x82\x26\x41\x1f\x26\xcd\
+\x8c\x2d\x65\x3b\xf8\xaa\x85\x3c\x4b\x3c\x8e\xba\x08\x4c\x5d\x6a\
+\x38\xc6\x4b\x00\xee\x8d\x7f\x16\x2e\x68\x12\x57\x45\xf5\x32\xfd\
+\x23\x28\x8f\x74\x5f\xf0\x0a\x8c\xb5\x61\x15\x5a\xaf\x07\x99\x5b\
+\x3c\xcc\x4b\x00\x78\xac\x08\xe5\xaf\x4c\x04\xb3\x63\x3b\x94\xd3\
+\x5f\x2d\xb7\xc5\x3e\x01\x63\x65\xa7\x10\x8d\x7d\x4b\x2c\x36\xa4\
+\xac\xb2\x7c\xb8\xa1\xc1\xec\x38\x76\xc0\xf4\xb8\x7e\x9c\x2a\x73\
+\x39\xd6\x57\x47\xdf\x0f\x63\x6d\x58\x07\x51\x3c\xdc\xcf\xa2\x7c\
+\x5b\x60\x2c\x8b\xb3\xd7\x9b\x1e\xd7\xd8\x8c\xe5\xdc\x8d\x33\xd5\
+\x09\x86\xa9\xb2\x55\x3c\x7c\x25\x4f\x41\xa0\x36\x2d\xc0\x58\x22\
+\xf6\xc4\x9b\x1e\xd7\x9d\xc5\x07\xb9\x1b\xe7\xbc\xf2\x42\x98\xaa\
+\x67\x2d\xb7\x9e\xd9\x2a\x42\x2c\x4f\x41\x18\xbd\xfe\x4b\xb8\xa1\
+\xc1\x7c\xb8\x75\x8a\xb9\x37\x85\x94\x60\xb5\x8a\xc3\x4c\x84\x1f\
+\x8f\xee\x83\xa9\x7a\xea\xae\xab\x48\x31\x96\x33\x5b\xed\xa1\x7e\
+\xe0\x29\x08\xfd\x92\x46\xc1\x0d\x0d\xe6\xe5\x55\x1f\x9b\x5e\xff\
+\x82\x47\xe8\x48\x0c\xc6\xda\xb0\x9c\x6e\xf1\x7b\x0b\x66\x23\x48\
+\xe3\x79\x0a\xc2\x4d\xb3\x1e\x85\x1b\x1a\xcc\x83\x49\x23\x4d\x8d\
+\xe9\x93\xc9\x63\xb9\x1c\x67\xba\x11\x09\x63\xf5\xa8\x71\x56\xcc\
+\xb3\x1d\xc5\xd5\xcf\x0b\xb7\xa4\x9e\xa8\xae\x80\x23\x1a\x08\x35\
+\xda\x34\x33\xa6\x74\x6c\xc1\x23\xdf\xa5\xcf\x82\xa9\x7a\x92\x2c\
+\xbe\x66\x3d\xb3\x95\xc5\xa1\xbc\x05\x82\x6a\x80\x02\xe3\xa0\x7c\
+\x66\x33\xe3\x39\xeb\xc0\x52\x2e\xc7\xf9\x03\xd4\x45\x68\xc4\x6c\
+\x85\x27\xad\x77\x66\x2b\x0b\x7d\x79\x0b\x44\xec\xc1\x65\x70\x44\
+\x83\x38\x5a\x79\xdc\xf4\x78\xa6\x1d\xdd\xcf\xe5\x58\x8f\x58\xfb\
+\x39\x4c\xd5\xd3\x2f\x58\x59\xea\x63\xbd\x33\xdb\x88\xa0\xdb\x78\
+\x0b\xc4\x27\xdb\xdc\x70\x45\x9b\x7c\x21\x6f\xa7\x04\xe9\x7d\xb8\
+\x78\x64\xf0\xb2\x77\x61\xac\x9e\x34\x45\xba\xc5\x72\x66\xdb\x36\
+\xbc\x67\x20\x6f\x81\x78\x76\xe5\x38\xb8\xa2\x41\x2c\xcc\x5a\x63\
+\x6a\x2c\xe9\x7c\x98\x57\x7a\x24\xa2\x2e\x82\x27\x51\x63\x04\x87\
+\x15\xd1\x1e\xae\x84\xa7\x40\x08\x09\xcf\xc3\x15\x0d\x62\xca\xee\
+\xb9\xa6\xc6\x92\x76\x77\xf8\x10\x09\x9d\x57\x17\xe1\xa8\xc3\xaa\
+\xb8\x14\x71\x1b\x4f\xc1\xa0\x8a\x54\x35\x2a\x0a\xd2\x18\x81\xd9\
+\xc5\xac\xe9\xdf\xe3\x95\x6b\xa2\x1f\x80\xb1\x36\x6c\xb6\x5b\xac\
+\x6b\xb6\xb2\x38\x97\xb7\x80\x50\x0b\x68\xe0\x7b\x5e\x5c\x35\xde\
+\xd4\x38\xce\xd8\x9f\xc4\xe5\x38\xd3\x8d\x39\x98\xaa\x47\xcd\xb6\
+\xb2\xd9\x7e\xc9\x5b\x40\x56\xe4\x6d\x81\x33\x1a\xc0\x03\x8b\x5e\
+\x33\x35\x8e\xa9\x45\x7b\xb8\x1c\xe7\xc3\xe5\x45\x30\x55\xcf\xfa\
+\xdc\xca\x66\xfb\x1a\x6f\x01\x09\xdf\x3d\x17\xce\x68\x00\xb7\xc6\
+\x0e\x36\xef\x23\x88\x22\xe9\xad\xd2\x79\x84\xd2\xdd\x60\xaa\x9e\
+\x2e\x2e\x89\xaf\x58\xd9\x6c\xfb\xf1\x16\x90\x31\x1b\x26\xc2\x19\
+\x7d\x0c\x9d\x83\x77\x9c\xda\xdd\xb4\x18\xfe\x23\xf6\x71\x6e\xc7\
+\x7a\x39\xea\x22\x34\x52\x84\x46\x7c\xc0\xb2\x66\xdb\x56\xee\x76\
+\x03\x6f\x01\x19\xb0\xf8\x0d\xb8\xa3\x8f\x39\x72\xb2\xd8\xd4\x18\
+\x0e\x5a\xfa\x36\xb7\x63\x4d\xb7\xe6\x60\xac\x1e\xaf\xea\x76\xb6\
+\xac\xd9\x9e\x6d\x69\x7e\x82\xa7\x80\xfc\x6d\xf6\x20\xb8\xa3\x8f\
+\xd9\x56\xb4\xd7\xd4\x18\xfe\x7b\xf3\x24\x6e\xc7\xfa\xfb\x9d\xb3\
+\x61\xaa\x0d\x67\x22\x1c\xb7\x5c\x0b\xf3\x06\x8a\x88\x6f\xe0\x2a\
+\xe9\x99\xe3\xf3\x3e\xa3\x58\x90\xb5\xda\xd4\x18\x4e\xdb\xb7\x90\
+\xdb\xb1\x1e\xb7\x35\x1c\xc6\xda\x90\x14\x61\x8d\xc3\xea\x68\x0f\
+\x3a\x99\xb7\xc0\x50\xaf\x2c\xe0\x3b\x7e\xd8\x35\xc7\xd4\xf8\x6d\
+\x2e\xdc\xc5\xed\x58\xbf\x86\xba\x08\xec\xd4\xb1\xad\x6f\xb6\xd2\
+\x70\xde\x02\x13\x97\x91\x0c\x87\xf4\x21\xa1\x9b\xc3\x50\x2a\xd3\
+\x24\x9e\x58\xfe\x1e\xcc\xb5\xe1\x0e\x0d\xff\xb4\xbe\xd9\xca\xa2\
+\xc8\x5b\x60\x3e\xdb\x1e\x09\x87\xf4\x21\xcf\xa5\x8c\xc3\x99\xbb\
+\x49\xf4\x4c\xfc\x17\xcc\xb5\xc1\x6a\x5f\xc2\x7d\x96\x37\x5b\x1e\
+\x0b\xd2\xbc\x90\xf2\x11\x1c\xd2\x87\xf4\x5e\x38\xdc\xb4\xd8\x3d\
+\xb2\x64\x0c\xd7\x63\x7d\x3b\xea\x22\x34\xa4\x9a\x80\xb0\x10\xa7\
+\x83\x05\xb4\x87\xcd\xe1\x29\x38\x41\xf3\x5f\x82\x43\xfa\x90\x5b\
+\x66\x3f\x6e\x5a\xec\xde\xdb\xf4\x1d\xd7\x63\xdd\x39\xba\x2f\xcc\
+\xb5\x7e\x26\xc2\x21\x07\x2b\x04\xc8\xe2\x0c\x9e\x82\xd3\x69\x5a\
+\x1f\x14\xa4\xf1\x11\x67\x6a\x6a\xd4\x2b\x22\x43\x4c\x8b\x5d\xe4\
+\xde\x05\xdc\x8e\xf5\xa9\x33\xd5\xfa\x99\x35\xcc\xf5\xbc\x8f\x63\
+\x8a\x30\x8d\x19\xb3\x75\xc9\xc2\xab\xbc\x05\x28\xbf\xa2\x08\x4e\
+\xe9\x03\x0a\x2a\x8e\x9a\x1a\xb7\x8d\x47\x76\x70\x3b\xd6\x34\x67\
+\x61\xae\x8c\x7e\x1c\xe3\xb9\x6b\xc3\xaa\xc3\xa9\x70\x4a\x1f\xb0\
+\xa5\x70\x97\xa9\x99\x08\xa5\xa7\xca\xb9\x1d\x6b\x4a\x59\x84\xb9\
+\x32\xd2\x9d\xc1\x23\x31\x03\x7f\xa5\x3d\x74\x29\x4f\x01\x8a\xd8\
+\x13\x0f\xa7\xf4\x01\x09\x87\x52\x4c\x8b\xd9\x5f\x63\x06\x72\x3d\
+\xd6\x54\xb1\x0e\xe6\x5a\x4f\x25\x74\x13\xd6\xc1\x12\xda\x43\x2f\
+\xe5\x29\x48\xef\x6c\xfc\x16\x4e\xe9\x03\x26\xed\x8c\x35\x2d\x66\
+\xfd\x17\x8f\xe6\x7a\xac\x67\x1f\x44\x5d\x84\xfa\x29\x5f\xe2\x22\
+\x07\x6b\xb8\xdc\xc2\x7f\x78\x0a\xd2\xc0\xa5\x63\xe0\x94\x3e\xe0\
+\xfd\xcd\x93\x4c\x8b\xd9\xdb\x1b\xbf\xc1\x1f\x36\x18\xec\xf9\xad\
+\xcb\xc7\x32\x67\xb6\x01\x8a\xd0\x9b\xa7\x20\xf1\x5c\xa6\xcf\x97\
+\x0c\x5b\xf9\x01\xb7\x47\x3f\x85\x27\x8b\x4d\xfd\xf7\x3e\x4a\x8d\
+\x80\xb9\xd6\xcb\x44\x10\x43\x98\x33\xdb\x8e\x91\x3d\x7e\xab\x3d\
+\x7c\x25\x4f\x05\x69\x78\x6d\x85\xed\x4b\xcc\xbc\xd1\xb4\xae\xe0\
+\x47\xcb\xbc\x77\xe5\xe9\x53\xea\x7d\xf1\xcf\xe9\x6d\x6a\xcc\x62\
+\xe4\xda\xff\xc1\x60\xcf\xcd\xaf\x2d\xef\x2c\x8b\xbf\x76\xb0\x88\
+\xf6\x02\x4b\x78\x0a\xd6\xae\xe2\x0c\xb8\x65\x2b\xb9\x79\xd6\xa3\
+\xa6\xc5\xab\xb8\xaa\xd4\x32\xef\xfd\xbf\x1f\xa3\x4c\x4f\x45\x7b\
+\x32\x79\x2c\x0c\xf6\xdc\xe2\x33\x89\x0e\x56\xd1\x5e\x60\x14\x4f\
+\xc1\x8a\xcf\x4c\x81\x5b\xb6\x82\xd3\x35\x67\xd4\xf6\x4a\xb0\x29\
+\xb1\xfa\xd3\xcc\x01\x96\x79\xef\x83\xa5\xb9\xea\x95\x53\x7b\xea\
+\xcf\x35\xe1\xc7\x69\xa6\xfd\xbb\xbd\x12\x5f\x85\xc9\x9e\x23\x69\
+\x38\xb3\x66\x1b\x18\x11\xfc\x57\x9e\x82\xf5\x85\xb6\x3b\x01\xde\
+\x63\x66\xf3\xc1\x87\x92\x5e\xb7\xcc\x7b\x53\x56\x84\x3f\x3e\xb4\
+\xde\x11\xf7\x24\x0c\xb6\x8e\xda\x28\xc1\x37\x3a\x58\xc6\xa5\x88\
+\x99\xbc\x04\xeb\xe5\x55\x1f\xc3\x31\x5b\xc1\xa6\xc2\x9d\xa6\xc5\
+\xea\x4d\x8b\xf4\x8e\x8b\xcd\x58\x7e\xce\x73\xfd\x61\x5a\x1f\x7d\
+\x87\x6f\x06\xd7\x4e\x47\x5d\x84\x3a\xda\xef\x60\x9d\x00\xb7\x10\
+\xc6\x4b\xc0\x42\xe6\xbf\x0c\xc7\x6c\x05\x73\x33\x57\x98\x16\xab\
+\x29\x16\xe8\x8a\x5c\x52\x55\xa6\xde\x38\xb3\xbf\x5f\xda\xaa\xa3\
+\x2e\xc2\x79\xe7\xb5\xb2\xf0\x2d\xf3\x66\xeb\x52\x84\x87\x79\x09\
+\xd8\x35\xd1\x0f\xc0\x31\x5b\xc1\x77\xe9\xb3\xb8\xba\x5e\x4d\x79\
+\xbe\x0d\x3d\x1b\xf5\x05\x33\x1a\xb3\x6b\x50\x30\x50\xbf\xb6\x2f\
+\xfb\x3b\xdb\xb0\x10\x27\x4f\x29\x60\x47\x4c\xce\x95\xb4\x13\xef\
+\x6e\xfc\xd6\xb4\x38\x1d\xad\x3c\xee\xd7\x77\xa5\xac\x03\x4a\x17\
+\x6c\xe8\xd9\xa8\x7b\x82\xd1\xa4\xa3\x2e\x42\xdd\x2c\x84\x93\x1d\
+\x62\xc4\xcb\x1d\x76\x40\x7b\xa1\x38\x5e\x02\xb7\x36\x7f\x3b\x5c\
+\xd3\x4b\x86\xae\x08\x35\x25\x46\x7f\x9c\xd1\xcf\xef\x59\x17\x54\
+\x03\xb9\xb1\xe7\x33\xba\x64\xe7\xca\xbc\xad\x30\xda\x5f\x34\xcb\
+\x61\x17\x02\x64\x69\x30\x2f\x81\x53\xf6\xce\x87\x6b\x7a\x49\xf7\
+\x05\xaf\x98\x12\xa3\xbe\x8b\x46\xfa\xf5\x3d\xbf\x4d\x8f\x69\xf2\
+\x19\xd3\x0d\x6e\x22\x1a\x7b\x70\x19\x4c\xf6\x97\xf3\xda\x81\xb6\
+\x31\x5b\xda\xa2\x6b\x2f\x55\xc1\x43\xe0\xc6\x6e\xfa\x1e\xae\xe9\
+\x25\x54\x85\xcb\x8c\x18\x8d\x5e\xff\xa5\xdf\xde\xf1\x50\xd9\x61\
+\xf5\x77\x51\x3d\x9b\x7c\xc6\xc9\xbb\xe2\x0c\x7d\x0e\xd4\x45\xf8\
+\x59\x65\x57\x85\xf5\xfd\x8d\xc3\x4e\xb8\x14\x21\x96\x87\xe0\x0d\
+\x5a\xfa\x36\x5c\xd3\x0b\xaa\x6b\x4e\xab\xed\x94\x20\x53\x62\x14\
+\xee\xc7\x4c\x84\xe6\x76\xb3\x7d\x66\x45\xa8\xa1\xcf\xf1\xe1\xd6\
+\x29\x30\xda\xda\x2a\x5f\x33\x1c\x76\xc3\xa9\x88\x83\x78\x08\x5e\
+\x97\x39\x43\xe0\x9c\x5e\x90\x73\xa2\xc0\xb4\x18\xad\xce\xdf\xe6\
+\x97\x77\x5c\x90\xb5\xba\xd9\xcf\x48\x29\x61\x46\xf2\xda\xda\xcf\
+\x61\xb6\xfa\xc7\x31\x69\x80\xed\xcc\x96\xb6\xea\xda\xcb\x9d\xb0\
+\x7b\xf0\xe8\xba\xa9\x99\xc5\x44\xec\x02\x7d\x9d\x37\x2b\x46\x45\
+\x95\x25\xa6\xbf\xdf\x89\xea\x0a\xf5\xa6\x16\xd6\x7d\xd8\x77\x3c\
+\xdb\xb0\xe7\x19\xb2\x1c\x75\x11\x5c\x6e\xe1\x38\xb3\x85\x67\x9a\
+\x91\x95\x30\x9b\x87\x20\xee\x2d\x39\x04\xf7\x6c\x21\x73\x32\x92\
+\x4d\x89\xcd\x0d\x7e\xca\x44\xa0\x2e\xbe\x2d\x7d\x56\xf7\x9e\x04\
+\xc3\x9e\xc7\xcc\xea\x6a\x16\x4e\xf9\x9a\xee\xb0\x2b\x6d\x23\xa5\
+\x9e\x3c\x04\x91\x7e\x2e\x82\x96\xf1\xf5\x8e\x99\xa6\xc4\xe6\x81\
+\x45\xaf\x99\xfe\x6e\xdb\x8f\xee\xf5\xaa\xc0\xce\x0b\x29\x1f\x19\
+\xf6\x4c\x74\xdc\xc5\xbd\xd9\x46\x04\x05\xd9\xd6\x6c\xa9\xb7\x8f\
+\xf6\x92\x19\x76\x0f\xe2\x97\x69\xd3\xe1\x9e\x2d\xc4\xd3\x6d\x2a\
+\xd6\x33\x11\x9a\xca\xa9\xf5\x57\x8f\xb4\xab\xa3\xef\xe7\xdd\x6c\
+\xf7\x39\x54\xc7\x05\x0e\x3b\x43\x6d\x27\xec\x1e\xc8\x7f\xad\xf9\
+\x14\xee\xd9\x42\x9e\x4a\x7e\xdf\x96\x99\x08\x54\x83\xa1\x35\xcf\
+\x4b\xa9\x62\xbe\x86\x0a\x95\x73\x9f\x85\xe0\x16\xde\x76\xd8\x9d\
+\x76\x4a\xd0\xef\xb5\x97\x3d\x6d\xe7\x40\xf6\x48\x7c\x05\xee\xd9\
+\x42\x82\xbd\xdc\xfd\x59\x39\x13\x81\x4a\x46\x52\x15\xaf\xd6\x3c\
+\xef\xf4\xfd\x49\x3e\x7f\xae\xdc\xf2\x23\xbc\x9b\xed\xa9\x0e\xb2\
+\x78\xa5\x83\x07\xb4\x97\x4d\xb0\x73\x30\xfd\x7d\x1d\x94\x45\xfe\
+\x12\xf3\x88\x29\xb1\x31\xb3\xcf\x97\x2f\xfa\xa9\xbd\xba\xe6\xbf\
+\x86\x9c\x21\x73\x6e\xb6\x71\x0e\x5e\x70\xb9\xa5\x07\xed\x1e\x50\
+\x7f\x17\x3a\x61\x09\x2a\xf7\xe7\xa9\x28\x0b\xab\x7f\x04\x93\xb2\
+\xd7\xf9\xe4\x99\x6f\x8b\x7d\xc2\xe7\xcf\xb6\x34\x77\x23\xe7\x47\
+\x08\xd2\xfd\xdc\x98\xad\x23\xac\xcb\xc5\xda\x4b\xe7\xd9\x39\xa0\
+\x1b\x0a\x76\xc0\x45\x9b\x09\x9d\x4b\xda\x29\x13\xe1\xe4\xe9\x4a\
+\xf5\xd6\xd8\xc1\x3e\x7b\x6e\x3a\x8e\xf0\x25\x33\xf6\x27\xf1\x6c\
+\xb6\x39\x8e\x64\xf1\x22\x07\x4f\x04\xc8\xe2\x5b\x76\x0e\x6a\xd4\
+\xbe\x44\xb8\x68\x33\x59\x93\xbf\xdd\x94\x98\x8c\x5a\x37\xc1\x94\
+\xf7\x19\xb7\x35\xdc\xa7\xcf\x4d\x45\x63\x58\x4c\xb3\xb3\x68\xd1\
+\x99\x37\x1c\xbc\xe1\x9c\x76\x6f\x00\x15\x81\xb0\x6b\x50\x43\x37\
+\x87\xc1\x45\x9b\x49\xcc\x81\x25\xb6\xc9\x44\xd8\x5d\x9c\xa9\x5e\
+\x11\x19\xe2\xd3\xe7\x7e\xdd\xc7\x7f\x24\x68\x6e\x72\x6a\xb6\x25\
+\x81\x51\xbd\xdb\x3a\x78\x44\x7b\xf9\xaf\xed\x1a\xd8\xc1\xcb\xde\
+\x85\x8b\x36\x13\xea\x28\x6b\x87\xee\x0c\x54\x83\xb6\xf7\xc2\xe1\
+\x3e\x7f\xee\xbb\xe6\x0e\xf5\xe9\x73\x52\x6a\x22\xa7\xdd\x73\xbf\
+\x70\xf0\x8a\x33\xb2\xdb\xb5\x76\x4d\x03\xbb\x23\xee\x29\xb8\x68\
+\x33\xa1\x9f\xf7\x76\xc8\x44\xa0\xa3\x23\x83\x3e\xe8\xf8\xb4\x03\
+\x08\x55\xa6\xe3\xd0\x6c\xab\x5d\xe1\x41\xd7\x38\x78\xc6\xae\xa5\
+\x17\xe9\xa7\x24\x95\x0d\x04\xd6\x58\xfc\x46\x67\x22\x90\x91\x1b\
+\xd9\xad\x36\x3e\x33\x85\xb9\x9c\x66\x94\x52\xb4\x18\x81\x11\x41\
+\x77\xdb\x35\xc0\xfb\x0d\xac\xda\x64\x27\xee\x8d\x7f\xd6\xf0\x58\
+\xdc\xbf\x70\x84\xa1\xef\xf0\xcf\xd5\x9f\x18\xfa\xfc\x6f\x6d\xf8\
+\xda\x67\xcf\x7a\xcb\xec\xc7\xf9\xfb\x30\x16\x29\xde\xee\x00\xfa\
+\xd9\xed\x46\x3b\x06\x78\x51\xf6\x5a\x38\x69\x33\x30\x72\x47\x68\
+\x46\x26\x02\xf5\xf3\x32\xba\x2d\x78\xb7\xf8\xe7\x7d\xf6\xbc\x57\
+\x45\xf5\xe2\xcd\x6c\x57\xc3\x65\x6d\x5e\x0d\x6c\xe2\x8e\x19\x70\
+\xd2\x26\xa0\x3a\xaf\x66\xc4\xc2\xa8\x36\x33\x54\x67\xe0\x76\x13\
+\x2a\x68\xd1\xa5\x8f\x92\xaa\xb2\x56\x3f\x6f\x79\xf5\x49\xfe\xce\
+\x6b\x15\x41\x82\xcb\x9e\xb3\xbb\x15\x56\xda\x2d\xc8\xc3\xd7\x7c\
+\x06\x37\x6d\x02\xaa\xfd\xcb\x72\x26\xc2\x67\xdb\x23\x99\xfa\xa5\
+\x64\xd6\x05\x12\x0b\x69\x39\xdc\xb5\xfe\x87\x32\xc9\x6e\x81\xa6\
+\x34\x20\xd0\x38\xcb\x72\x37\x99\x12\x8b\x23\x06\x64\x22\xec\x2d\
+\xc9\x52\x3b\x4e\xed\x6e\xda\x7c\x7a\x7f\xf3\xa4\x56\x3f\xf3\xe6\
+\xc2\x5d\x5c\x99\x2d\x7d\x13\x82\xbb\x36\x7c\x76\xbb\xdc\x4e\x81\
+\xbe\x01\x05\x69\x9a\x24\x72\xef\x02\x66\x33\x11\x1e\x5e\x3c\xda\
+\xd4\xf9\x14\x32\xff\xe5\x56\x3f\x33\xed\x8e\x39\x2a\xa3\x98\x04\
+\x57\xe5\x28\x33\xa1\xb8\xaa\x14\x8e\xda\x08\x1f\xa7\xca\x4c\x66\
+\x22\xcc\x3e\xb8\xd4\x2f\xfd\xed\xca\x4e\x95\x5b\x32\x17\xd8\x82\
+\xaa\x41\x06\x42\x53\x35\x13\xb4\xbf\x46\x76\x0a\xfa\xa6\xc2\x9d\
+\x70\xd4\x46\x78\x65\xb5\xf1\xb7\x99\x7c\x7d\xdd\x95\xfe\x80\xde\
+\x38\xf3\x61\xbf\xcc\xa7\xe5\xb9\x9b\x5a\xf5\xec\x13\xd2\xa2\x79\
+\x31\xdb\xf9\x70\xd3\xa6\x76\xb7\x8a\xd0\x95\xfe\x2a\xd9\x25\xe8\
+\x46\x14\x7f\xb6\x13\xfd\x92\x46\x19\x1e\x83\xb0\x9d\xb1\x3e\x7d\
+\xe6\x37\x37\x4c\xf4\xdb\x7c\x1a\x9f\x1a\xd1\xaa\x67\xf7\xa6\xf1\
+\x24\x83\x5d\x73\xcf\x60\x57\xdb\xfc\xcc\x04\xc5\x2e\x81\xff\x60\
+\xcb\x64\x38\x6a\x23\xdc\x11\xf7\xa4\xe1\x31\x48\x39\xbc\xd5\x67\
+\xcf\x4b\xa5\x33\xcd\xa8\xbd\x6b\xd4\x47\xd7\x17\x57\x8d\xe7\x61\
+\x57\x1b\x0e\x17\x6d\x26\xbf\x9d\x1c\xdc\x91\x7a\xba\xdb\x21\xf0\
+\x4f\x26\x8f\x85\xa3\x36\xc2\xef\xa2\x7a\x32\x93\x89\x40\x45\xce\
+\xef\x9e\x37\xcc\xaf\xf3\x89\xb2\x1f\x2a\x4f\x57\x79\xfd\x0e\x03\
+\x16\xbf\x61\xfb\xca\x5e\x97\x47\xf6\xb8\x02\x2e\xda\xb2\xcc\x84\
+\xf7\xec\x10\x7c\x5f\x57\x6c\xb2\x13\xd4\xcd\xc2\xe8\xf1\xbf\x7e\
+\xfa\x43\x3e\x7b\xde\xaf\xd2\xa6\x5b\x62\x4e\xb5\xa6\x8f\x9a\x90\
+\xf0\xbc\xbd\xaf\xe5\xba\xa5\x37\xe1\x9e\x2d\xa4\xb3\x2c\xfe\xda\
+\x0e\x6d\xcf\x69\x27\x42\xed\xac\x41\x7d\xcc\xe8\x85\xd5\xc7\x47\
+\xb9\xce\x19\xa5\x79\xa6\xec\xc2\x9b\xa3\x4f\xb7\x29\x5e\xbf\x07\
+\xb5\x47\xb7\xb1\xd9\xee\x75\xc4\x0c\xbc\x04\xee\xe9\x05\x4e\x45\
+\x1c\x64\x87\x49\x40\x0b\x15\xd4\x27\x31\x6b\x0d\x33\x99\x08\x03\
+\x96\xbc\x69\x99\xf9\x44\x1f\x15\xbd\xc5\xcc\x4b\x18\xa6\x4b\x16\
+\xfb\xc1\x35\xbd\x45\x75\x5c\xe0\x74\x8b\xeb\x58\x9f\x04\x4b\x72\
+\xd6\xc3\x59\x1b\x80\xea\x15\x18\x3d\xf6\x3f\xec\x9a\xd3\xea\xe7\
+\x9c\x97\xb9\xd2\x52\xf3\x89\x76\xd8\x55\x67\xaa\x5b\xfc\x1e\xc7\
+\xab\x4e\xd8\x39\x03\x61\x25\x0c\xb3\xb5\x79\xb7\x91\xe2\xcd\xda\
+\x40\x56\xb1\x3c\x11\xbe\x4d\x8f\x81\xb3\x36\x80\x19\xed\x59\x5a\
+\x9b\x89\x40\xc5\x5f\xfe\x34\x73\x80\xe5\xe6\xd4\xc6\x23\x2d\x6f\
+\x28\x4a\x25\x3f\xed\x79\x4e\x2b\x9e\x6c\xa3\x04\xdf\x08\xb7\xf4\
+\x49\xdd\x04\xe9\x03\x96\x27\xc3\xc8\xb5\xff\x83\xb3\x36\xc0\xb3\
+\x2b\xc7\x19\x3e\xf6\x05\x15\xc7\x98\xcd\xa9\x6d\x4c\x74\x39\xc1\
+\x9b\xb4\x35\x9b\xee\x6c\xdf\x83\x4b\xfa\x8a\x89\xbd\x2f\xd5\x76\
+\xb7\xe9\xac\x4e\x06\xb3\x5a\x68\xb3\x46\xaf\xc4\x57\x2d\x9d\x89\
+\xb0\xe9\x48\xba\x5f\x73\x6a\x1b\xd3\xc0\xa5\x63\x5a\xfc\x3e\xf3\
+\x0f\xad\xb2\xa3\xd1\xa6\x72\xd7\x9a\xdc\xf0\x9b\x65\xb2\x78\x17\
+\xdd\x0c\x61\x71\x42\xd0\xcf\x50\x50\x9f\x9b\x67\x3d\x6a\xd9\x4c\
+\x04\x6a\x69\x74\x8f\x9f\x73\x6a\x1b\xd3\x1f\xa6\xf5\x69\x71\x96\
+\x8b\xbc\x27\xc1\x6e\x46\x7b\xba\xad\x12\x74\x27\xdc\xd1\x88\xec\
+\x04\xb7\xf8\x3d\xab\x13\xa3\xb4\x95\x05\x44\xec\x06\x19\x05\x15\
+\x56\xb1\x6a\x26\xc2\x77\xe9\xb3\x2c\x3f\xa7\x52\x8b\xf6\xb4\xe8\
+\x9d\xcc\xac\xbd\x6b\x4e\x51\x70\x69\x22\x5c\xd1\xa8\xdd\x6d\x54\
+\xef\xb6\xda\x20\x67\xb3\x38\x31\xb6\x16\xed\x86\xc3\xd6\x21\xb7\
+\xfc\x88\x65\x33\x11\x72\x4e\x14\xa8\x9d\xb4\x9d\xa3\xdd\x3e\xbc\
+\x8e\xb1\xe8\xf9\xb3\x97\x3a\xd8\x31\xb2\xc7\x6f\xe1\x8a\x46\x7e\
+\x2c\x93\xc5\x7e\x2c\x4e\x8e\x99\x07\x16\xc3\x61\xeb\x40\x5f\xd3\
+\x8d\x1e\x73\xea\x0d\xe6\x0d\x4f\x2c\x7f\x8f\x89\x39\x45\xcf\x69\
+\xb5\x0f\x92\xe6\x75\xcb\x15\xfa\xc2\x0d\x4d\x39\x4e\x90\xbe\x63\
+\x6d\x72\x7c\xb8\x75\x0a\x1c\xb6\x0e\x73\x32\x92\x2d\x99\x89\xb0\
+\x20\x6b\x35\x33\x73\x8a\x1a\x65\x9e\xa9\xa9\x69\xf6\xbb\x3d\x94\
+\xf4\xba\x5d\x72\x6a\xbf\x82\x0b\x9a\x7b\x95\x37\x8d\xa5\x09\x32\
+\x74\x45\x28\x1c\xb6\x0e\xd4\x0c\xd3\x6a\x99\x08\xd4\x7c\xf2\x26\
+\x83\x3f\xda\xf9\x5a\x3b\x8b\x0f\x36\xfb\xfd\xee\xb6\xf0\x07\xbf\
+\x16\x18\xed\x76\xca\x4e\x82\x0b\x9a\x9a\x7b\xdb\xed\x56\x96\x2e\
+\x3b\xd0\x97\x6d\x60\xde\xf9\xa1\x37\xa5\x08\xdf\xdd\xf8\x2d\x73\
+\xe6\xd3\x92\xae\xc1\x37\xce\xec\xcf\xfc\xe5\x85\x40\xb7\x74\x13\
+\xdc\xcf\x3f\xb5\x13\xc6\xb0\x32\x51\xae\x9c\xda\xb3\x45\x3f\xf9\
+\xec\xce\x90\xe5\x63\x8d\xbd\x48\xb2\xee\x8b\x16\x3d\xcf\xb6\xa2\
+\xbd\x6a\x3b\x25\x88\x39\x03\x7a\xa6\x99\xbf\x98\x68\xee\xb1\xf8\
+\x7e\xe7\x65\x1f\xbc\x0e\xd7\xf3\x17\xa1\xa1\x17\xba\x14\x61\x19\
+\x2b\x93\x25\xab\x2c\x1f\x2e\x7b\x16\x31\xe1\x05\xcb\x74\x67\xa0\
+\x34\x34\x29\xe1\x45\x26\x0d\x88\x76\xab\xcd\xa1\xa8\xb2\x84\xf5\
+\x5d\x6d\x22\xd5\x4a\x81\xe9\xf9\x73\x77\x1b\xd9\xed\x5a\x2d\x18\
+\xc7\x58\x98\x30\xcb\x5a\xd9\x3f\xca\x4e\x50\xe7\x61\xab\x64\x22\
+\x50\x8a\x18\xcb\x46\xb4\xef\x78\x76\x93\xef\xb8\xa7\x24\x93\xe5\
+\x77\x2c\x0c\x88\x0c\xb9\x1a\x6e\x67\x05\xc3\x8d\x08\x0a\xd2\x02\
+\x52\x6d\xf5\x49\x33\xc9\xc7\xbd\xb0\x58\x85\x3a\x0d\x04\xb8\x25\
+\x83\x33\x11\x8e\x36\xeb\x59\xf2\xca\x0b\xf5\xdb\x58\x2c\x9b\xad\
+\x7b\x4f\x42\x93\xef\x49\x05\xc7\x19\x7d\xbf\x53\xd4\x75\x1b\x2e\
+\x67\xad\x74\xb0\x37\xad\x3e\x71\x46\xf9\xb8\xcb\x2b\xab\x1c\x28\
+\xcd\x31\x74\x9c\xaf\x9b\xfe\x60\xb3\x9f\x85\xb2\x44\x58\xff\x42\
+\x4f\x7d\xc5\x9a\x22\xce\x84\x54\x3b\x9c\xd3\xf2\x82\xea\xb8\x20\
+\xc0\x2d\xcc\xb4\xf2\xc4\xa1\x3c\x47\xa0\xea\x65\x0f\xad\x90\x89\
+\xb0\xd0\x84\xe2\xe5\x66\x88\xd2\xd5\x9a\x22\x7c\xf7\x5c\x16\xd3\
+\xbc\x14\x18\x9b\x45\xe9\x10\x23\x5e\xae\x05\x69\x87\x55\x27\x0f\
+\xb5\x24\x01\xaa\x1a\xbd\x7f\x91\xdf\x33\x11\xca\xab\x4f\x1a\x5e\
+\x08\xc7\x4c\x1d\x2a\x3b\xdc\xe8\xfb\x7e\xb2\xcd\xcd\xda\x3b\xa5\
+\xe1\x3a\xae\xc5\xa1\x22\xc2\xd4\x61\xd3\x92\x57\x0c\xdd\x92\x9e\
+\x38\xcf\x3b\x46\x17\x44\x69\x4e\x26\x82\x19\x85\xcb\xcd\xd4\xf4\
+\xfd\x49\x8d\xbe\x2f\x1d\x61\x31\xf4\x3e\xc5\x6d\xa7\x8a\x7f\x84\
+\x9b\xb1\x71\x7e\x3b\xc0\xaa\xe5\x18\xa9\xc9\x21\xef\xbc\xb6\xf6\
+\x73\x43\xc7\x78\x45\xde\x96\x46\xff\xfd\x1f\x8f\xee\x33\xbc\xe2\
+\x98\xd9\x7a\x75\xcd\x7f\x1b\x7d\xe7\xa7\x93\xff\xcd\xca\xd1\xc1\
+\x19\x97\x22\x3d\x04\x17\x63\xcb\x70\x5f\xb0\xe2\x64\x9a\x7d\x70\
+\x29\xf7\x66\xfb\xc8\x92\x31\x7e\xcb\x44\xa0\xe4\xfe\xe0\xf9\x2f\
+\xd9\xae\x88\xf6\x6d\xb1\x4f\x34\x3a\xe6\x54\xdb\x97\x89\x7c\x5a\
+\x45\x7c\x0e\xee\xc5\x20\x2e\x59\xfc\xd2\x6a\x93\xe9\xe3\x54\x99\
+\x7b\xb3\xbd\x6b\xee\x50\xbf\x65\x22\x44\xec\x89\xb7\x6d\xd3\xc3\
+\xc3\xe5\x45\x1e\xdf\xfb\xce\xb8\xa7\x59\x78\x87\xcf\xe1\x5a\xac\
+\x42\x37\xcc\xdc\x62\x9c\x95\x26\xd4\xb0\x95\x1f\x70\x6f\xb6\x46\
+\xd6\x8a\x6d\x2c\x13\x81\xcc\xe8\xea\xe8\xfb\x6d\x6b\xb6\xb1\x07\
+\x97\x79\x7c\x77\xfa\x23\x64\xed\x14\x2f\x21\x96\xd6\x2b\x4c\x8b\
+\x61\x3a\xc5\x74\xbd\x2c\x40\x16\xd7\x5b\x65\x52\x75\x8b\x7f\x9e\
+\x6b\xa3\x35\xba\x9d\x76\x63\xcd\x35\x9f\x4b\x19\x67\x5b\xa3\x6d\
+\xac\x33\x05\xb5\xf8\x31\xfa\x12\x49\x2b\xaf\xe2\xae\xa5\x75\x0a\
+\xb7\xb2\x01\x81\x51\x62\x27\x2d\xa8\x39\x56\x98\x58\x57\x45\xf5\
+\x52\x6b\x54\x7e\x0b\xd2\x50\x49\x40\x7f\xdc\xd2\x5b\x9c\xbd\xde\
+\xd6\x46\x4b\xa2\xe3\x99\x86\xa0\x33\x6c\x0b\x3f\x77\x56\xfb\x29\
+\xdd\xaf\x82\x4b\xd9\x08\x4a\x25\xd1\x02\x9b\x67\x85\x09\x46\x2d\
+\x61\x78\xc5\x68\xd3\x6b\x28\x13\xe1\xe4\xe9\x4a\xfd\x03\x92\xdd\
+\xcd\x96\x76\xaf\x47\x4e\x16\xd7\x7b\xff\x1d\xc7\x0e\x58\x35\xf3\
+\x20\xd7\xe9\x0e\xba\x1e\xee\x64\x43\x02\x22\xc5\x9b\xb5\x20\x17\
+\xf9\x7b\x92\x25\xe7\x6d\xe6\xd6\x6c\x8d\xfe\x40\x95\x5f\x51\xff\
+\x23\x11\x75\xc9\xb0\xbb\xd1\xfe\xa4\xf8\xcc\x94\x7a\xef\x4f\xf3\
+\xcd\x82\xcf\x9a\x4f\x39\xf1\x70\x25\x7b\x67\x28\xfc\xc3\xdf\x55\
+\xc2\x5a\x52\xf0\xd9\x6e\x8c\xdb\x1a\x6e\x68\x9b\x98\xf3\xd9\x5d\
+\x9c\xa9\x5e\x11\x19\xc2\x8d\xd9\xbe\xb5\xe1\xeb\x7a\x63\x40\xe9\
+\x86\x16\xdb\xd1\x1e\x75\x4d\x91\x6e\x81\x1b\xf1\x70\x86\xab\x08\
+\x5d\xb5\xa0\x97\xf9\x6b\xb2\xbd\xb9\x61\x22\xb7\x66\xfb\xd2\xaa\
+\xf1\x86\x8d\x6b\xaf\xc4\x57\xcf\xf9\xb7\xe8\x6c\xbc\x37\x23\xf9\
+\xa5\x46\x7e\x80\xfd\x7e\xe7\x6c\x2b\x3d\x63\x69\xa0\x2c\xde\x05\
+\x17\xe2\x08\xa7\x5b\x0a\xa6\x36\x1b\xfe\x98\x70\xfd\x17\x8f\xe6\
+\xd6\x6c\x1f\x58\xf4\x9a\x69\x99\x08\x53\xf7\x26\x72\x65\xb4\xa4\
+\x40\x45\x52\x4b\xaa\xca\x4c\xfb\x35\xd1\xd2\xb6\x36\x54\x0e\x15\
+\xee\xc3\xe3\x91\x82\x22\x3c\xec\x8f\x3e\x66\x7f\x9b\x3d\x88\x5b\
+\xb3\xbd\x35\x76\xb0\x29\x99\x08\xf4\xa1\x88\x8e\x15\x78\x33\x5b\
+\x52\x52\xf6\xba\x73\xc6\x7c\x84\xc1\xd7\xa3\x9b\x79\x74\x50\x85\
+\x6b\xb8\xbc\x1b\x6e\xa4\x24\x98\x7d\xa4\x40\xbb\x8f\x8a\xea\x4a\
+\xee\x8c\x96\x7e\xd6\x77\x9c\xda\xdd\xb0\x71\x4d\x38\xf4\xcb\xc7\
+\xa1\xe1\x6b\x3e\xe3\xd2\x68\x49\x54\x64\xa7\x2e\x4f\x2c\x7f\xcf\
+\xef\x47\x07\x2e\x77\x50\x37\xb8\x0d\xa0\x2c\x85\x7b\xb5\xbf\xbc\
+\xc7\xcd\x9c\x80\x69\x47\xf7\x73\x67\xb6\x05\x15\xc7\x0c\x1d\xd3\
+\xbe\x8b\x46\xea\xad\x87\xc6\xa7\x46\x58\x3a\x89\xdf\x8c\x52\x9e\
+\x4b\x73\x36\xe8\xed\x72\x16\x64\xad\xd6\xdb\xba\xfb\xf1\x79\x4a\
+\xb4\x58\xdc\x03\x97\x01\x75\xcf\x70\xbb\x98\x99\x16\x36\x27\x23\
+\x99\x3b\xb3\xdd\x52\xb8\x8b\x5b\x03\xe4\x54\x85\xce\x88\xa0\xdb\
+\xe0\x2e\xc0\x53\x5a\xd8\x11\xb3\xaa\xeb\x53\x87\x59\x9e\xd4\x65\
+\xce\x10\x18\x10\x3f\xca\x0b\x8c\x08\xfe\x2b\x5c\x05\x34\xf2\xd1\
+\xac\xdb\xad\x4e\xb7\x78\x18\x8b\x05\x82\xbc\xbf\x19\x16\xa0\x04\
+\xff\x1d\x6e\x02\x9a\xa4\xfd\xd4\xfb\x7e\xa7\x4d\x9a\xcd\x58\x34\
+\x10\xd4\x62\x6d\xec\x20\x8b\x57\xc2\x45\x40\xb3\xa1\xfe\x47\xda\
+\xc4\x89\xc7\xe2\x81\xa0\x66\x4a\x16\xe7\xa2\x6f\x18\xf0\x8e\x98\
+\x81\xbf\x72\x29\xd2\x44\x2c\x24\x08\x6a\xd2\x68\x43\xa9\xc3\x35\
+\x4c\x03\xb4\xf2\x1c\x57\x1c\xa1\x4d\xa8\xd3\x58\x54\x10\x54\x4f\
+\xd5\x4e\x59\x78\x1e\x2e\x01\x7c\x99\x1a\xf6\xa8\x36\xb1\x4e\x60\
+\x71\x41\xd0\xcf\x2a\x73\xc9\x52\x7f\xb8\x03\xf0\x39\x6d\xe5\x6e\
+\x37\x68\x13\x6c\x07\x16\x19\x04\x89\x69\x68\x37\x0e\x0c\xa5\x43\
+\x8c\x78\xb9\x36\xd1\x66\x63\xb1\x41\xbc\x2a\x40\x91\x62\x68\x1d\
+\xc0\x0d\x80\xf1\xa8\x8e\x0b\x9c\x8a\x38\x06\xe7\xb8\x10\x6f\xe7\
+\xb3\xf4\xfd\x02\x1f\xc2\x80\xe9\x04\xca\x62\x2f\x7f\x17\x22\x87\
+\x20\x93\x2e\x2a\x14\x50\xd1\x26\xac\x7a\xe0\xe7\x73\x5c\x61\x03\
+\x16\x23\x64\x57\x51\xf7\x5b\x67\x44\xc8\x75\x58\xed\xc0\xff\x84\
+\x86\x5e\x58\x9b\x1e\x66\x7e\x6d\x5c\x08\x32\xb6\x06\x2d\x8e\x0d\
+\x80\x25\x77\xb9\xc2\x1d\xda\x04\xdd\x83\x45\x0a\xb1\xff\x11\x4c\
+\xdc\x4d\x95\xf0\xb0\xaa\x81\x65\xe9\x14\xd3\xf5\x32\xcd\x70\xbf\
+\xc2\x82\x85\x18\xde\xd1\x7e\x45\xf3\x18\xab\x19\x30\x41\x80\x5b\
+\x78\x9c\xea\x79\x62\xe1\x42\x2c\x7d\x04\xa3\xcb\x3b\x58\xbd\x80\
+\x3d\xc3\x0d\x0b\x71\x6a\xa6\x1b\xa6\x4d\xe4\x1a\x2c\x64\xc8\xc2\
+\x26\x7b\x86\x76\xb3\x34\x5f\xb1\x6a\x01\xdb\xa6\x2b\x0b\xf7\xd1\
+\x19\x18\x16\x35\x64\xc1\x4c\x83\x5d\xd4\x16\x0a\xab\x14\xd8\xea\
+\x2c\x37\x40\x16\x3f\xc1\x45\x08\xc8\x32\x99\x06\xb2\x18\xda\x59\
+\x16\x7f\x8d\xd5\x09\x6c\x7a\x96\x2b\xdd\xa3\x4d\xf6\x54\x2c\x76\
+\xc8\x8f\xda\x1c\x28\x8b\x77\x61\x35\x02\xfb\x43\xd7\x7d\x65\x61\
+\xa0\x4b\x11\x33\xb1\xf0\x21\x13\x95\x11\x20\x0b\x7d\xb1\x00\x01\
+\x77\x5c\x15\xd6\xf7\x37\x67\x6b\x2c\x94\xc1\x08\x20\x03\x55\x4a\
+\xf3\x0c\xe9\x5c\x80\x7b\xda\x29\x41\xbf\x77\x29\x52\x24\xb2\x16\
+\x20\x5f\x67\x19\x50\x36\x4c\xfb\x29\xdd\xaf\xc2\x2a\x03\xa0\x0e\
+\x54\xe8\x43\x5b\x24\xab\x61\x12\x90\x0f\x8c\x76\x25\xb2\x0c\x00\
+\x68\xde\x47\xb4\xe5\x30\x0c\xa8\xc5\x52\x84\x65\x81\x8a\xd0\x15\
+\xab\x08\x80\x16\xe0\x54\xc4\x10\x6a\x0d\x0d\x13\x81\xb0\x93\x05\
+\xc0\x68\x42\x43\x2f\x0c\x90\xa5\xc1\xda\x62\x4a\x87\xa1\x40\x0d\
+\xb5\xa7\xd1\xfe\x28\x0f\xa2\x79\x82\xc5\x02\x80\xaf\x8e\x17\xb4\
+\x9d\x8b\xb6\xb8\x12\xf0\x21\x8d\x7b\x51\xfc\x13\xb0\x93\x05\xc0\
+\x60\xce\x16\x2c\xff\xca\xe9\x16\x4f\xc2\x78\xb8\x52\x05\xc5\x1d\
+\x8d\x16\x01\x30\x19\x97\x2c\x76\xae\x2d\xe7\x28\x1c\x87\x11\xd9\
+\x5a\x25\x9a\x26\xb8\xc2\x83\xae\xc1\xac\x07\xc0\x9f\x4c\xec\x7d\
+\xa9\x7e\x23\xcd\x2d\x2e\xc1\x11\x83\xad\x8e\x0a\x96\x50\x5c\x1d\
+\x31\x03\x2f\xc1\x24\x07\xc0\x82\x47\x0c\xb5\x05\x6f\x84\x02\x18\
+\x16\x93\xca\xa2\x02\x31\x38\x2a\x00\x80\x11\x6a\x3b\x46\x48\x4f\
+\x9d\xdd\xed\x56\xc3\xc4\xac\xdd\x22\x3c\xc0\x2d\x24\x05\x28\xe2\
+\x10\x54\xe1\x02\x80\x61\xa8\x06\x03\x15\x20\x39\x7b\x25\xf8\x04\
+\xcc\xcd\x12\x3a\x41\xf1\xa0\xb8\x50\x7c\x30\x4b\x01\xb0\x19\x6d\
+\x94\xe0\x76\x4e\x45\x7c\x8e\x76\x52\xd8\xf1\x9a\xae\x53\x4e\xb7\
+\xb8\xd0\x25\x4b\xc3\xda\x86\xf7\x0c\xc4\x6c\x04\x80\xa3\xa3\x86\
+\xda\x5b\x6a\xc2\x57\x28\xf7\x68\x60\x27\x04\x59\xfc\x84\xc6\x19\
+\x55\xb7\x00\x00\x3a\xce\x88\x90\xeb\x34\xd3\x1d\x51\x7b\xce\x2b\
+\x54\xc1\x2c\xbd\x52\x25\x5d\x38\x70\xba\xa5\x17\x68\x3c\x31\xab\
+\x00\x00\x4d\x1e\x37\xb8\xdc\xd2\x83\x01\x6e\xe1\x53\xcd\x3c\x56\
+\xe1\x02\x85\xc7\x9d\x2b\x8d\x4b\x8a\xb6\x73\xfd\x98\xce\x5f\x71\
+\x3c\x00\x00\x68\x1d\x13\x7b\x5f\x1a\x18\x11\x74\xb7\x66\x2e\xa3\
+\x5d\xb2\x38\x57\xdb\xf9\xe6\x72\x5a\xf0\x85\xde\x3b\x4e\xd3\x28\
+\xbd\xba\x16\x72\x60\x01\x00\x46\xd3\x7e\xca\x3d\x6d\xb4\x9f\xcb\
+\x5d\x6a\x53\xcc\xe8\x26\x9b\x5e\x8b\xd7\x2e\x5d\x27\xca\x6a\xdf\
+\x87\xde\x4b\x7a\x8a\xde\x93\xde\x17\x51\x07\x00\x58\x83\xb0\x2e\
+\x17\x07\x28\xc1\x7f\xd7\xcc\x69\x00\xed\xfe\x34\x7d\xe3\x54\x84\
+\x05\x67\xab\x96\x55\x58\xb0\xd6\x00\x3d\xd7\x7c\x4d\x5f\xbb\x14\
+\xe9\x75\x97\x2c\xf5\x0f\x90\xbb\xfd\x8d\xde\x03\xc1\x04\x00\x30\
+\x4b\x07\x59\xbc\x92\x7e\x7e\xeb\x79\xbf\xb2\x38\x94\x0c\x99\xce\
+\x3b\xb5\xff\x19\x7e\xf6\xe7\x79\x4a\xad\x01\x0a\x07\x6a\x25\x16\
+\x6a\x3a\xe6\xb9\xfe\x83\xfe\x9f\x1f\xab\xfd\xdf\xfb\xe9\xbf\xa3\
+\xff\xf7\x57\x6a\xff\xd9\x1c\x4d\x93\x35\xe3\x1f\xaf\x1b\xbf\xf6\
+\xef\xd1\xbf\x4b\x9d\x65\xe9\x39\x10\x0d\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x8c\xe0\xff\x01\x2f\x9b\xa0\xe9\xec\
+\x30\x8e\x92\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x64\xb4\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x02\xe8\x00\x00\x02\xe8\x08\x06\x00\x00\x00\x2a\x5a\x00\x90\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01\x42\x28\
+\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x03\x09\x08\x1e\
+\x34\x68\x66\xd9\x7c\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\
+\xff\x00\xff\xa0\xbd\xa7\x93\x00\x00\x64\x34\x49\x44\x41\x54\x78\
+\xda\xec\x9d\x07\xb8\x55\xc5\xb9\xbf\xf7\x69\x1c\x0e\xe7\xd0\xcb\
+\x01\x54\x7a\x95\xa6\x20\xbd\x8b\x14\x45\x40\x10\x51\x14\xa4\x05\
+\x14\x14\x14\x41\x41\x44\xaa\x54\xe9\xe7\x68\xd4\xab\x26\xc6\x24\
+\xb6\xc4\x44\x4d\xa2\x26\x1a\x7b\x89\x35\xb1\x77\x05\xd9\x6b\xa7\
+\xdc\x14\x4d\x8c\xc6\x36\xf7\x1b\xf6\x4a\x82\x57\x84\xb5\xf6\xd9\
+\x6b\xd6\xac\xb5\xdf\xf7\x79\xde\xe7\xb9\xf7\x7f\xff\xf7\x46\xcf\
+\x9e\xf9\xe6\xb7\x67\xcf\x7c\x93\x48\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x40\x2e\x51\x28\xd6\x75\x6d\x22\xb6\x12\x3b\x8a\x3d\xc4\
+\x3e\xe2\x71\xe2\x28\xf1\x78\xf7\xbf\xd6\xf6\x75\xff\xe7\xda\xa3\
+\xdc\xff\x9d\x7a\xee\xff\x2d\x00\x80\xaa\x52\x4d\xac\xef\xd6\x96\
+\xee\xfb\xd5\x9b\x7e\xfb\xd5\xa1\xd1\xe2\x08\xf7\xbf\xee\xed\xfe\
+\xcf\xdb\xbb\xff\x3b\x8d\xf7\xab\x6b\xf9\xfc\x39\x01\x00\xc0\x06\
+\x6a\x8a\xdd\xc4\x93\xc4\x05\xe2\x2a\xb1\x42\xfc\x81\x78\x8f\xf8\
+\x94\xf8\x8e\xf8\x81\xa8\xb2\xec\x3f\xc5\xdf\x8b\x6f\x8a\x0f\x8a\
+\x37\x89\x3b\xc5\xe5\xe2\x2c\x71\x8c\xbb\x90\xd6\xe3\x63\x02\xc8\
+\x29\x1a\x89\xbd\xc4\xb1\xe2\x1c\x71\x85\x5b\x97\x6e\x13\x1f\x16\
+\xdf\x12\xff\x28\x7e\x1c\x40\x5d\xfa\x8b\x5b\x93\x7e\x23\xfe\x42\
+\xfc\xbe\x5b\x97\x56\x8a\xe7\xba\x75\xa9\x93\x58\x83\x8f\x09\x00\
+\x00\xaa\x42\xb3\x44\x7a\xf7\x68\xb6\xb8\x5e\xbc\xd9\x5d\x7c\xfe\
+\x14\xc0\xe2\x16\x94\x1f\x8a\x2f\x88\x77\x8a\xbb\xc4\x0b\xc4\x13\
+\xc4\xe6\x7c\xbc\x00\x91\x43\xef\x54\xb7\x16\xc7\x89\x17\x8a\x57\
+\x88\x3f\x17\x5f\x16\x3f\x8a\x50\x5d\x4a\x89\x8f\xbb\x1b\x1a\x6b\
+\xc5\x99\xe2\xb1\x89\xf4\x2f\x8c\x00\x00\x00\xfb\xa8\x9e\x48\xef\
+\x38\xeb\x45\x42\xef\xf8\x3c\x90\x48\xef\x06\xa9\x98\xfb\x81\xbb\
+\x48\x5e\x93\x48\xff\x0a\xa0\x7f\xc6\xae\xc3\x70\x00\xb0\x82\x86\
+\x89\xf4\xd1\xb7\x45\xe2\xf5\x89\xf4\xaf\x72\xff\xc8\x81\xba\xa4\
+\x77\xf8\x7f\x25\x5e\x2e\x4e\x15\xbb\x8a\x45\x0c\x07\x00\x80\x78\
+\x93\x97\x48\xff\xcc\xaa\x77\xc5\xbf\x23\xbe\x24\x7e\x96\x03\x8b\
+\x9e\x57\xbf\x14\x5f\x17\x6f\x74\x43\xbb\x3e\x0b\x5f\xca\xb0\x01\
+\x08\x94\x5a\xe2\x20\x71\xb1\x78\x8b\xf8\x2e\xb5\xe8\x2b\xfe\x4b\
+\x7c\xde\xdd\x4c\x98\x26\xb6\x65\xc8\x00\x00\x44\x1b\x7d\x09\x4a\
+\x9f\x7d\xdc\x28\x3e\x9a\x23\x3b\x50\x41\xf8\xb6\x78\xb5\x78\xa6\
+\x78\x04\xc3\x0a\xa0\x4a\xb4\x48\xa4\xcf\x88\x7f\xcf\x9d\x5b\xd4\
+\x18\xff\xfe\xdd\xad\xe9\x1b\xdd\x1a\xcf\xaf\x7f\x00\x00\x16\xa3\
+\x3b\x13\xe8\xb3\x8c\x9b\xc5\xa7\x13\xec\x8e\x07\xe1\xe7\xe2\xb3\
+\x89\xf4\x4f\xd0\xfa\x58\x4c\x75\x86\x1d\xc0\x41\x29\x73\x43\xa4\
+\xbe\xb0\xa9\x7f\xb5\xfb\x92\x3a\x92\x75\x3f\x11\x1f\x4b\xa4\xcf\
+\xb4\xeb\x5f\xfe\x0a\x18\x76\x00\x00\xe1\xa2\xcf\x8f\x2f\x49\xa4\
+\xcf\x2d\x06\xd1\x9d\x00\x0f\x1d\xd8\x9f\x71\x77\xb2\x74\x60\xa7\
+\x15\x24\xb0\x51\x90\x9e\x0b\x1b\xdd\xb9\xf1\x05\x75\xc2\xb8\x1f\
+\xb9\x6b\xc2\x79\x09\x2e\xc5\x03\x00\x18\x41\x9f\x23\xd7\xad\xc4\
+\x36\x89\x2f\xb2\x10\x59\xe7\x1e\x71\x87\x38\x20\x41\x7f\x64\xc8\
+\x1d\x0a\xdd\x50\x7e\x55\x22\xdd\x06\x95\x5a\x60\x8f\x5f\xb8\x5f\
+\x94\x56\x8b\x5d\x18\xaa\x00\x00\xd9\xe5\x98\x44\xfa\xe8\x0a\x17\
+\xa8\xa2\xa3\x23\x56\x8a\x43\x13\xfc\xe4\x0c\xf1\x43\xef\x94\xeb\
+\x07\xc6\xae\x15\xff\x97\xf9\x1e\x19\x5f\x75\xc3\x7a\x27\x86\x30\
+\x00\x40\x66\xe8\x17\xee\xf4\xcf\xc4\x5c\xa4\x8a\x47\xfb\x34\x1d\
+\xd6\xf5\xf9\xd0\x3c\x86\x36\x44\x14\xfd\xab\xd0\xb0\x44\xba\xf5\
+\xe1\xdf\x98\xd7\x91\x57\xf7\x90\xd7\x8f\x29\x75\x64\x68\x03\x00\
+\x1c\x9c\x96\x89\xf4\x45\x9f\x37\x59\x3c\x62\xab\x7e\xd1\x70\x4d\
+\x22\xfd\x6c\x38\x40\x14\x38\x4a\xdc\x22\xee\x65\xfe\xc6\x56\x7d\
+\x64\xf2\xe2\x04\x0f\x26\x01\x00\xfc\x07\xfd\x10\xc5\xc9\xe2\x3d\
+\x09\x2e\x54\xe5\x9a\x0f\x89\x93\xc5\x62\xa6\x01\x58\x86\x7e\x03\
+\x40\x3f\x60\xf6\x34\xf3\x34\xa7\xd4\xdd\xbf\x6e\x4f\xa4\x8f\x2f\
+\x71\x8f\x06\x00\x72\x12\xfd\x6c\xf5\x86\x44\xfa\xe9\x67\x16\x86\
+\xdc\xf6\x4f\x89\x74\xeb\xc6\x76\x4c\x0b\x08\x99\x6e\xe2\x15\x09\
+\x8e\xb0\x60\x22\xf1\x9e\x78\xa9\x78\x18\xd3\x02\x00\xe2\x8e\x3e\
+\x7f\x3c\x52\xfc\x65\x82\xdd\x72\x3c\xf0\x6b\xa6\xf7\x8b\x27\xb2\
+\x7b\x05\x06\xd1\x5d\x58\x4e\x13\x9f\x64\x0e\x62\xe2\xc0\xbb\xea\
+\x3f\x15\x07\x32\x55\x00\x20\x6e\xe8\x07\x6d\xbe\x95\x48\x3f\xd4\
+\x41\xc1\x47\x2f\xea\x7b\x08\x0b\xc4\x9a\x4c\x1f\x08\x88\xda\xe2\
+\x62\x71\x37\xf3\x0d\x3d\xaa\x8f\x3c\xe9\x63\x79\x45\x4c\x1f\x00\
+\x88\x32\x8d\xc4\x55\xe2\x1f\x28\xec\x98\xa1\x1f\x24\xd2\xbd\xd5\
+\x5b\x33\x9d\x20\x4b\xe8\xcb\xe8\xdb\xc5\x0f\x99\x5f\x98\xa1\xfa\
+\xcd\x87\x0b\xc5\x3a\x4c\x27\x00\x88\x12\xba\xc7\xec\xff\x24\x78\
+\xdd\x13\xb3\xfb\x33\xf3\xf7\x12\x9c\x53\x87\xcc\xd1\xdd\x58\xf4\
+\x05\xc0\x2f\x99\x4f\x98\x25\xf5\x97\xbc\x9d\x62\x2b\xa6\x17\x00\
+\xd8\x1e\xcc\x6f\x63\x01\xc4\x00\xfd\x5c\xfc\x7e\x82\xde\xc5\xe0\
+\x9d\x1e\xe2\x1d\xd4\x25\x0c\x78\x03\x41\xf7\xc7\x6f\xc1\x74\x03\
+\x00\x9b\x68\xeb\x86\x26\x2e\x7e\xa2\xc9\x27\xbc\x6f\x22\xa8\xc3\
+\x41\xe8\x25\xfe\x8c\xb9\x82\x06\xfd\x97\xf8\x6d\xf1\x70\xa6\x1f\
+\x00\x84\x89\xde\x2d\xb8\xce\xdd\x3d\xa0\x38\x63\x58\x3b\xea\xdf\
+\x11\x9b\x31\x1d\xc1\x45\x7f\x69\xe3\x28\x0b\x86\xa9\x3e\xde\xa9\
+\xef\xce\x94\x33\x1d\x01\xc0\x24\xba\xe8\x5c\xe1\xee\x16\x50\x8c\
+\xd1\x06\x3f\x49\xa4\x2f\xfe\x35\x64\x7a\xe6\x2c\xfa\x4b\xda\xf5\
+\xee\x97\x36\xe6\x04\xda\xe0\x3f\xc4\x8d\x89\x74\xc7\x20\x00\x80\
+\xc0\xa8\x96\x48\xb7\x25\xe3\x11\x0f\xb4\xf9\xd2\xd6\x6a\xb1\x8c\
+\xe9\x9a\x33\xd4\x77\xbf\x9c\x7d\xc2\xf8\x47\x4b\xfd\xbd\x38\x5b\
+\x2c\x60\xba\x02\x40\xb6\x19\x9f\x48\xf7\xa6\xa6\xd8\x62\x14\xdc\
+\x2b\x4e\x49\xa4\x1f\xc7\x82\x78\xa2\x1f\x18\x3a\x47\xfc\x33\xe3\
+\x1d\x23\xe2\xef\xc4\x63\x99\xba\x00\x90\x0d\x74\x6b\xb2\x5f\x53\
+\x58\x31\xa2\x3e\x26\x1e\xc3\x34\x8e\x1d\x43\xc5\x17\x18\xdf\x18\
+\x51\xf5\xcb\xa4\x6d\x99\xc6\x00\x90\x09\xfa\x9c\xb9\xee\x65\x4e\
+\x67\x16\x8c\x43\xc7\x17\x7d\x99\xb9\x31\xd3\x3a\xf2\xe8\x7e\xd3\
+\xb7\x31\xa6\x31\x06\xea\x3b\x5c\x5b\x13\x3c\x76\x04\x00\x1e\xd1\
+\x47\x02\xe6\x88\x7f\xa5\x80\x1e\xda\xea\x62\x3b\xb1\xaf\x38\x46\
+\x9c\x2e\x5e\x20\x5e\x26\x5e\x29\xde\x2a\xde\xe3\xfa\x2b\xf1\x09\
+\xd7\xe7\xc4\x57\x0f\xe2\xf3\xe2\xc3\xe2\xcf\xc5\x5b\xc4\x6b\xc4\
+\x6d\xe2\x12\x71\x96\x38\xce\xfd\xcf\xd4\xff\xd9\xf5\xf8\x1c\xbc\
+\xfa\x17\x71\x56\x82\x63\x2f\x51\x44\x1f\x67\xd1\x2f\x37\x7e\xc4\
+\x38\x3e\xb8\x32\xb8\x55\x03\xb1\xbd\x38\x40\x9c\x20\xce\x16\x97\
+\x89\xdb\xc5\x6b\xdd\x9a\x72\xb7\xf8\xa8\x5b\x6b\x0e\x56\x8b\x9e\
+\xd9\xaf\x6e\xdd\xbb\x5f\x3d\xbb\x49\xbc\x42\x5c\x2b\x2e\x14\xcf\
+\x14\x4f\x10\xfb\x88\xad\xc5\x62\x3e\x0b\xaf\x3a\xe2\x44\xa6\x38\
+\x00\x1c\x0c\xa9\xe9\x89\x87\x28\x98\x5f\xb5\x89\x38\x44\x9c\x21\
+\xae\x70\xc3\xf2\x2f\xc4\x17\x44\xc7\x12\xdf\x16\xef\x17\xaf\x17\
+\x57\xba\x5f\x14\x06\x89\x87\xf1\xf9\x1d\xc8\x07\x12\xfc\xbc\x1c\
+\x25\xba\x8b\xcf\x31\x6e\xff\x6b\xbe\xd8\x4c\x3c\x56\x9c\x29\xae\
+\x11\x6f\x10\xa5\x78\xab\x77\x2d\xaa\x4b\x3a\xfc\xdf\x25\x7e\x5b\
+\xbc\x44\x9c\x26\x0e\x14\x1b\xf2\x19\x1e\x48\xfd\x98\x16\xfd\xd3\
+\x01\xe0\x2b\x14\x89\xcb\x13\xe9\xde\xad\x39\x5b\x20\x6b\x89\x3d\
+\xc5\xa9\xe2\x7a\xf1\x76\x77\x07\xc9\x89\xb8\x6f\xb8\x5f\x28\x76\
+\x8a\x73\xc5\xfe\xee\xbf\x6b\x8e\x2f\x86\x7a\xac\x2f\x13\x8b\x99\
+\xfe\xd6\x52\x2a\x5e\x9e\xc8\xf1\x77\x16\xf4\x2f\x64\x83\xc5\x73\
+\xdd\x5f\xe5\x7e\xe9\x7e\x21\x8f\x7a\x5d\x7a\xd1\xfd\x85\x51\x7f\
+\xb9\x38\x5d\x3c\x5a\x2c\xa5\x2e\x7d\x90\x48\x5f\x7c\xce\x67\xfa\
+\x03\x40\x1f\xf1\xc5\x5c\x2c\x86\xfa\x67\xd8\xc9\xe2\x0e\xf1\xf1\
+\x18\x2c\x78\x7e\x4c\xba\xff\xce\x57\x89\x67\x89\xdd\xc4\x82\xdc\
+\x5c\x10\x5f\x4e\x70\x89\xd4\x46\x24\x93\x26\xde\xc9\xb5\xf1\x58\
+\xe4\x6e\x12\xcc\x17\xaf\x13\x9f\xca\xc1\xba\xa4\x7f\x05\x90\x6f\
+\x65\x6a\xa2\x78\x44\x6e\x5f\x6e\xef\x44\x19\x00\xc8\x4d\x4a\xc4\
+\x9d\x89\x1c\xb9\x04\xaa\xc3\xe7\x51\xee\x59\xcc\x6b\x2d\x3b\x9e\
+\x62\x8b\xaf\x8b\xdf\x13\xe7\x89\xdd\xc5\xc2\xdc\x59\x0c\xf5\x0e\
+\xed\x2a\xf7\x97\x24\x08\xbf\x2e\x6d\xcb\x95\xba\x54\x4d\xec\xed\
+\x9e\xe1\xbe\x25\x26\x3b\xe3\xd9\xf6\x59\xf7\x97\x83\xe9\x62\x47\
+\xf7\x8c\x7d\x8e\xd4\xa5\x7f\x51\x97\x00\x72\x8f\xfe\xe2\xbb\x71\
+\x2f\x70\x87\xbb\x17\x2a\x59\xf8\x32\xf3\x1d\xf7\x6f\x77\x8e\xd8\
+\x35\x37\x16\xc6\x97\xc4\x1e\x94\x87\xd0\x18\x12\xf7\xba\x94\xef\
+\xee\x90\x5f\xe2\x5e\xb4\x7c\x9f\x3a\xe3\xdb\x37\xdd\xf3\xf6\x53\
+\xdc\xfb\x41\x89\xdc\xa8\x4b\x5d\x29\x0f\x00\xf1\x46\x9f\x6b\xd3\
+\x2f\x81\xc6\xf2\xc5\x3d\xbd\xf8\x1d\xe3\x76\x3a\xb9\xd7\xfd\xb9\
+\x94\x05\x2d\x7b\xea\x2e\x0e\x17\xbb\xbf\x44\xc4\x38\xac\xeb\xb3\
+\xe9\x92\x9f\x78\xf1\xcf\x20\xfa\x6f\xbd\x32\x11\xd3\xb3\xe6\x05\
+\x6e\x67\x93\x95\x6e\xf7\x26\x6a\x49\xf6\xd4\x5f\x70\xee\x14\xcf\
+\x17\xbb\xc4\x3b\xa4\xff\x3d\x91\xee\x40\x05\x00\x31\xe4\x30\xf1\
+\x57\x71\x2c\x5e\x47\xb9\x8b\xdf\xb3\x2c\x58\x46\x7f\x76\x5e\xe7\
+\xb6\x71\x8b\xe9\x51\x98\x07\x13\x74\x54\x30\xc1\x11\xe2\xc3\x71\
+\x1b\x3f\xfa\xe8\xca\x70\x71\xab\x7b\x19\x92\x9a\x61\xc6\xc7\xdd\
+\x0d\x9a\x0e\xf1\x0d\xea\xfa\x0d\x80\x7a\x94\x0d\x80\xf8\x30\x41\
+\xfc\xdf\x38\x15\xaa\x0e\x6e\x21\x7e\x9c\x45\x29\x74\x7f\xe7\xf6\
+\x42\x3e\x3a\x7e\x8b\xa1\x9e\x33\xe3\x28\x1f\x81\x31\x5e\xfc\x73\
+\x9c\x7e\xc1\xeb\xeb\x5e\x70\x7c\x95\xba\x10\xba\xbf\x16\xcf\x13\
+\x5b\xc4\xaf\x2e\xbd\x9f\x48\xbf\xa4\x0b\x00\x11\xa6\x9a\x78\x65\
+\x5c\x0a\x53\x43\xf7\x3c\xf4\x83\x2c\x3e\xd6\xfa\x98\xb8\x28\x5e\
+\x67\x43\xbf\x14\x2b\x13\x5c\xd4\xca\x26\xa5\x71\xaa\x4b\x2d\xdd\
+\x33\xe5\x4f\x33\xff\xad\xf5\x1e\xb7\x5f\x7c\xed\x78\xbd\x8e\xbc\
+\x3a\x41\x3b\x46\x80\x48\xa2\x7f\x9e\x7f\x22\x0e\xbb\x52\x83\xdc\
+\xc7\x81\x76\xb3\xd0\x44\xea\x6c\xa8\xbe\xc8\x75\x5c\x7c\xda\x37\
+\xea\xc7\x8d\xca\x29\x2b\x55\xa6\x83\xf8\x6a\xd4\xc7\x83\x6e\x87\
+\x38\xd6\xed\xe3\xcd\x5d\x97\x68\x5d\x7c\xd7\xef\x41\xf4\x8a\x4f\
+\x50\xff\x99\x58\x97\xb2\x02\x10\x1d\x86\x88\x7f\x88\x72\xe1\x29\
+\x77\x7b\x01\x3f\xc1\xa2\x12\x79\xf5\xce\xe2\x05\xf1\xd8\x55\xdf\
+\x2b\xf6\xa3\xbc\x64\x8c\x3e\xd2\xf2\x61\xd4\x77\xcb\x97\xd3\xa6\
+\x35\x16\x3e\xe8\xb6\xdd\xad\x1b\xfd\xba\xf4\x96\xd8\x8d\xf2\x02\
+\x60\x37\xfa\xe7\xae\x8d\x89\xf4\xcf\xf2\x91\x2c\x36\xc7\xb8\x3b\
+\xaf\x7b\xa3\xfc\xd8\x46\x61\xa1\x4a\xd5\xae\xad\x52\x4d\x9b\x2a\
+\xa7\x6d\x5b\xe5\x74\xeb\xa6\x92\xfd\xfa\x29\x67\xc4\x08\xe5\x8c\
+\x1b\x97\x76\xd2\x24\xe5\x4c\x9e\xac\x9c\x29\x53\x94\x33\x6b\xd6\
+\xd7\x4c\x9d\x71\x46\xfa\x7f\xae\x3d\xe9\x24\xe5\x8c\x1c\xa9\x9c\
+\xc1\x83\x95\xd3\xab\x97\x72\xba\x76\x4d\xff\xdf\x6d\xdc\x58\x39\
+\xc5\xc5\x91\xf9\xbb\xec\x75\x3f\xdb\x81\xd1\x5e\x0c\x3f\x4f\xa4\
+\x7b\x13\xf3\xd3\xb2\x77\xf4\xf1\xa0\xab\xa3\xfa\x99\xe7\xb9\x17\
+\x3e\x7f\x4a\xa8\x8d\xa5\xbb\xdd\x5d\xf5\x88\x5f\x2c\xd5\x9d\xd9\
+\xce\xa3\xd4\x00\xd8\x49\x4d\xf1\xd6\xa8\x16\x18\x7d\x8c\xe5\xe6\
+\x08\x05\x70\xa7\xbc\x5c\x39\x47\x1e\xa9\x9c\x41\x83\x94\x33\x7e\
+\xbc\x72\x66\xcf\x56\xce\xd2\xa5\xca\xd9\xb2\x45\x39\x57\x5c\x61\
+\xd4\xe4\xd6\xad\xca\x59\xbe\x5c\x39\xf3\xe7\x2b\x67\xea\x54\xe5\
+\x8c\x1a\xa5\x9c\x1e\x3d\x94\xd3\xac\x99\x72\x4a\x4a\xac\xfc\x1b\
+\xea\xb0\x73\xbc\x7b\x84\x29\xa2\x63\xf6\x87\x62\x0d\xca\xce\x21\
+\xd1\x1d\x27\xee\x8e\xe2\x67\xac\x8f\xb1\x9c\x2c\xfe\x92\x10\x9b\
+\x13\xea\x0d\x84\xeb\xdc\x4d\xa2\x08\x07\xf5\x2b\x12\xe9\xbb\x67\
+\x00\x60\x09\x6d\xc4\x57\xa2\x56\x4c\x74\x7b\x3e\xfd\x9c\xf3\x7d\
+\x36\x17\xee\x3a\x75\x94\xd3\xa9\xd3\xbe\xdd\xef\xd4\xcc\x99\xfb\
+\x82\x70\xaa\xa2\xc2\x78\x08\xaf\x92\x1b\x37\x2a\xe7\xfc\xf3\xd3\
+\xbb\xf6\xfd\xfb\x2b\xa7\x45\x0b\x95\xaa\x56\xcd\x8a\xbf\xef\xc3\
+\x6e\x08\x8a\xe8\x39\xf5\x67\x13\xb4\x62\x3c\x18\xfa\xbc\xf9\x9b\
+\x51\xfb\x5c\xab\xb9\xaf\x56\x72\xe9\x33\x77\xd5\xbd\xd5\x47\x45\
+\xf7\xbd\x87\xc7\xc5\xc6\x94\x1f\x80\xf0\xd1\xaf\x82\xfe\x29\x4a\
+\x05\x44\xef\x9a\x8e\x17\x1f\xb5\xad\x30\x97\x95\x29\xa7\x73\x67\
+\xe5\x8c\x19\xa3\x9c\x05\x0b\x94\xb3\x79\x73\xb4\x82\xb8\x1f\x2b\
+\x2b\x95\xb3\x62\xc5\xbe\x1d\xf7\x7d\xc7\x6f\xf4\x71\x99\xbc\xbc\
+\x50\xbb\xbf\x4c\x8a\x66\x4f\x75\xf9\xc7\x4f\xf4\xa2\x0c\x7d\x8d\
+\x91\xe2\x5f\xa3\xf4\x59\x16\xbb\x9d\x3e\x78\x4c\x08\xff\xed\x2f\
+\xdd\xe3\x4d\x11\x0c\xe9\xef\x89\x9d\x29\x43\x00\xe1\x71\x5a\x22\
+\xfd\xf2\x61\x64\xce\x72\x9e\xe0\xf6\xa7\xb5\xa1\xf8\xa6\x9a\x34\
+\x51\xa9\x81\x03\x55\x52\x42\x6a\x6a\xe5\xca\xf8\x86\x71\xaf\xea\
+\x2f\x24\x67\x9f\xad\x9c\x61\xc3\x94\x73\xc4\x11\xa1\x04\x76\xdd\
+\xd7\xfe\xa4\xe8\x1d\x7d\xd1\x73\xf0\x74\xca\xd1\x7f\xd0\x67\x61\
+\x3f\x8f\xd2\x51\x96\xa9\xe2\xf3\x04\x52\xfc\x06\x7f\xe6\x1e\xc3\
+\x8c\x58\x48\xff\x9b\x38\x9c\x72\x04\x60\x1e\xfd\x1c\x79\x64\x2e\
+\x83\xea\x76\x7b\xf7\x86\x5d\x68\xf5\xb1\x8e\xae\x5d\x55\x4a\x5f\
+\xbc\x5c\xbb\x96\x40\xee\x25\xb0\x7f\xeb\x5b\xca\x91\x2f\x31\x4e\
+\xc3\x86\x46\x3f\x2b\x7d\xec\x69\x58\xf4\xfa\xa5\x5f\x9a\xe3\x35\
+\x49\x5f\x9c\xad\x88\xd2\x86\xc1\x38\xf7\xd7\x1b\x42\x28\x7a\xf1\
+\x76\xb1\x77\xb4\xea\xd2\xa7\xe2\x6c\xe2\x12\x80\x19\x74\x47\x84\
+\xeb\xa3\x52\x20\x8e\x74\x7b\x05\x87\x56\x54\x1b\x34\x48\xef\x08\
+\xcf\x9f\xaf\x52\x3b\x77\x12\xba\xab\xa2\xbe\x88\x3a\x66\x8c\x4a\
+\xea\xcb\xa7\x86\x76\xd7\x7f\x12\xbd\x17\x4a\xf5\xa3\x46\x05\x39\
+\x58\x97\x8a\xc5\x9b\xa3\xf2\x39\x0d\xe0\xf2\x27\x56\xc1\xeb\xa2\
+\xf7\x42\xa9\xee\xee\x96\x47\x7c\x02\x08\x8e\x3a\xe2\xfd\x51\x28\
+\x08\xfa\xd5\xcf\xcb\xdd\x07\x6b\x42\xb9\xd8\x79\xec\xb1\xca\xb9\
+\xf0\x42\x42\x75\x50\x5e\x76\x99\x72\x4e\x39\x45\x39\x2d\x5b\x06\
+\x1e\xd6\xf5\x43\x30\x15\xd1\xea\xa3\x7e\xbb\x58\x92\x63\x75\xe9\
+\x81\x28\x7c\x36\xba\x8f\xf9\x77\x09\x98\x98\xa5\xf6\x8c\x97\x8a\
+\xb5\xa2\x53\x97\x6e\xcd\xb1\xba\x04\x60\x8c\xfa\x89\x74\xd7\x08\
+\xeb\x3b\x20\x9c\x23\xbe\x6e\xba\xf5\xa1\xbe\xe0\xa9\x5b\x1e\x2e\
+\x5c\x98\xbe\x00\x49\x88\x36\x66\x6a\xf5\x6a\xe5\x8c\x1e\xad\x9c\
+\x46\x8d\x02\xfd\x8c\xdf\x16\x17\x89\x25\xd1\x58\x0c\x1f\x4d\xa4\
+\x5b\x0c\xc6\x1d\xdd\xc5\xe6\x05\xdb\x3f\x0f\x1d\xa2\x56\xf1\x1a\
+\x31\x06\xe0\x8b\xe2\x99\xd1\xe9\x44\xa5\xeb\x52\x6d\xe2\x14\x40\
+\xf6\x68\x22\xbe\x68\xfb\xe4\x1f\x2d\x3e\x69\xb2\x38\xe6\xe7\xa7\
+\x5b\x20\xce\x99\xa3\x9c\x5d\xbb\x08\xcb\x36\x84\xf5\x0b\x2f\xdc\
+\x77\xf1\x36\xc8\xfe\xeb\x4f\x47\xa7\xb3\xc2\x2b\xee\xdc\x8d\x2b\
+\xed\xc5\xf7\x6d\xff\x1c\xc6\xf3\xf2\x27\x1a\xf0\x7e\xf7\xe8\x54\
+\x04\xea\xd2\x33\x62\x03\x62\x15\x40\xd5\x69\x2b\xee\xb6\xfd\x67\
+\xe3\x1f\x9b\xec\xbe\xa2\x5f\xe8\x3c\xe5\x14\x95\xd2\xfd\xbd\x09\
+\xc5\x76\xaa\xcf\xfb\xeb\x57\x51\xbb\x74\x49\x7f\x91\x0a\x60\x1c\
+\xdc\x26\xb6\x8a\x46\xbb\xb3\xd6\x31\xac\x4b\x3d\xc5\xbf\xd8\xfc\
+\xb7\x6f\xcf\xeb\x9f\x18\x82\xfa\xb5\xe4\xc6\xf6\xd7\xa5\xd7\xc4\
+\x23\x88\x57\x00\x55\xdb\xa1\xda\x63\xeb\x24\xd7\x5d\x10\xce\x10\
+\x5f\x33\x51\xf8\xf4\x39\xe7\xce\x9d\x55\xea\x9c\x73\x38\xc2\x12\
+\xb5\x5d\xf5\x4b\x2f\x55\xa9\xc1\x83\xd3\x5d\x74\xb2\x3c\x2e\xde\
+\x10\x67\xd9\xdf\x96\xf1\x1d\xb1\x65\x8c\xea\xd2\x51\xe2\x1f\x6d\
+\xfd\x7b\xeb\xb6\x89\xe7\x89\xef\x10\x16\x31\x24\x7f\x27\x8e\xb5\
+\x3f\xa4\xbf\x41\x48\x07\xc8\x8c\x6e\xe2\x1f\x6c\x9d\xdc\x2d\xdc\
+\x1d\x4c\x23\xad\x11\x87\x0e\x55\xce\x9a\x35\x84\xdd\x88\x9b\xdc\
+\xba\x35\xfd\xcb\x47\xbd\x7a\x59\x1f\x27\xfa\x17\x9c\xe6\x76\x2f\
+\x86\xfa\x8b\x76\x3b\x76\xce\x83\xef\x1a\x45\x77\x16\xb4\xc5\xef\
+\x88\xe5\xfc\xc2\x07\x10\x2b\xfa\xd8\xba\x08\xea\x9d\xca\xb3\xdc\
+\x0b\x7b\x81\x16\xb7\x1a\x35\x54\x6a\xe4\x48\x95\xda\xb0\x81\x70\
+\x1b\xb7\x1d\xf5\x9d\x3b\x55\xea\x8c\x33\x54\x32\xcb\x97\x4a\xdf\
+\x12\x67\xd8\xfd\x3c\xb7\x7e\x75\x34\xca\xaf\xfb\x0d\x10\x3f\xb0\
+\x75\xd7\xfc\x02\x2e\x81\xa2\x85\xea\x5f\x98\x4f\xb5\x3b\xa4\x27\
+\xc5\x0e\xc4\x2e\x80\x43\xd3\x5b\xfc\xd0\xc6\x89\xdc\xd8\x44\x4f\
+\xf3\x9a\x35\x95\x33\x61\x82\x72\xb6\x6d\x23\xcc\xc6\xdd\x8a\x0a\
+\x95\x9c\x3e\x5d\x39\x4d\x9a\x64\x75\x0c\xfd\xc8\xee\xdd\xf4\x3f\
+\x89\x5d\x22\x58\x97\x06\x89\x1f\xb1\x6b\x8e\x98\x99\xd7\x88\x75\
+\xec\xad\x4b\xef\xc7\xec\x18\x1e\x40\x20\xc7\x5a\xac\xdc\x39\xd7\
+\x1d\x5a\x5e\x09\xb2\x80\xd5\xae\xad\x1c\xfd\xc2\x27\x8f\x09\xe5\
+\xa6\xfa\x21\x29\xdd\x53\x3d\x4b\xe3\xe9\x4d\xbb\x77\xad\x7e\x9f\
+\x48\xdf\x2f\x61\xd3\xa0\x8a\x77\x60\xce\x66\xd7\x1c\x23\xe4\xb3\
+\x62\x7f\xbb\xef\xca\x1c\x4e\x0c\x03\xf8\x3a\x47\x8b\x7f\xb5\x6d\
+\xd2\xd6\x16\xaf\x0e\xb2\x68\xe9\x76\x7c\x27\x9e\x98\x3e\x9f\x4c\
+\x50\xcd\x6d\x2b\x2b\x55\x4a\x77\x7e\x69\xd8\x30\xab\x67\x40\xeb\
+\xda\xb9\x18\xea\xfb\x25\x47\x46\xe4\x58\xcb\x3f\x6c\xfc\x35\xef\
+\x47\x04\x3e\x8c\xa0\xfa\xe1\xb5\xcd\xf6\xbe\xe7\xa0\x3b\xc6\x35\
+\x27\x8e\x01\xfc\x97\x16\x09\x0b\xfb\x09\xeb\x27\xd6\x1f\x0b\xaa\
+\x50\x15\x15\x29\x67\xe4\x48\xe5\x6c\xd9\x42\x30\xc5\xaf\xaa\x7b\
+\xda\x4f\x9a\x94\x3e\xee\x94\x85\xb1\xa6\x7b\xf3\x77\xb7\xf7\x82\
+\x56\x33\x8b\xeb\x52\x67\xf7\x48\x8e\x55\x7f\xb7\xc1\xe2\x6f\x09\
+\x7a\x18\x71\xef\x16\x5b\xdb\x59\x97\xf4\xc3\x63\xf5\x89\x65\x00\
+\x89\x44\x53\xf1\x2d\xdb\x26\xe9\xb7\x82\xfa\xe9\x58\xb7\x4b\xec\
+\xd1\x43\x39\x6b\xd7\x12\x44\xf1\xd0\x5d\x5f\x8e\x3f\x3e\xfd\x65\
+\x2e\x0b\xcf\x72\xcf\xb0\xb7\x1f\xb1\x8d\x8f\x86\xb4\x4a\xa4\x2f\
+\xb5\x5a\x75\x41\x7d\xb1\xbb\x03\x49\xc0\xc3\x38\xa8\x9b\x2d\x4c\
+\xb0\xb3\x2e\x3d\x9d\xe0\xc5\x51\xc8\x71\xf4\xc2\xfc\xb2\x4d\x13\
+\xb3\x86\x78\x65\x50\x05\xa9\x4d\x1b\xe5\x2c\x5d\x4a\xf8\x44\x7f\
+\x5d\x5f\xd6\xaf\x57\x4e\xef\xde\xe9\x2f\x77\x55\x1c\x83\x3b\xc5\
+\x62\xfb\x16\xc3\xdf\x88\xa5\x16\xd5\xa5\x86\x89\x74\x8f\x64\x6b\
+\xfe\x46\xb5\xc4\xef\x11\xe8\x30\xa6\x5e\xe6\x76\x22\xb2\xac\x2e\
+\x3d\x6a\x59\x5d\x02\x30\x46\x89\xf8\x84\x4d\x13\xb2\xa5\xfb\x5c\
+\x71\x10\x17\x40\x93\x53\xa7\xf2\xc0\x10\x56\xcd\x79\xf3\xb2\x72\
+\x3e\xfd\x5e\xf1\x70\xfb\x16\xc3\x5f\x88\x45\x16\xd4\xa5\x32\xf1\
+\x29\x9b\xfe\x36\x1d\xc4\xc7\x09\x71\x18\x73\xef\xb0\xb3\x67\xfa\
+\x9d\x62\x01\x71\x0d\x72\x89\x7c\xf1\x76\x9b\x26\xe2\x88\x20\x5e\
+\x04\xd5\x3b\x9e\x83\x06\x29\x87\x0b\xa0\x98\xc5\x1e\xea\xce\xe8\
+\xd1\x2a\x59\x58\x58\xa5\xb1\xf9\x92\x78\xac\x7d\x8b\xe1\x0d\x62\
+\x5e\x88\x75\x49\x7f\x41\xb8\xc7\xa6\xbf\xc9\x78\xb7\x23\x0f\x01\
+\x0e\x73\x41\x7d\xb7\xa2\x8f\x7d\x75\xa9\x92\xc8\x06\xb9\xc4\x76\
+\x9b\x26\xe0\x1c\x71\x6f\xb6\x8b\x4d\xf3\xe6\xca\x59\xb6\x8c\x50\
+\x89\xc1\xb8\x66\x8d\x4a\x76\xe8\x50\xa5\x31\xfa\xbe\x38\xcb\xbe\
+\xc5\x70\x63\x88\x75\xe9\x06\x5b\xfe\x0e\xba\x85\xe2\x45\x9c\x37\
+\xc7\x1c\xf4\x3d\xf1\x64\xfb\xea\xd2\x22\x62\x1b\xe4\x02\x17\xda\
+\x32\xe9\xf4\x99\xb7\xed\xd9\x2e\x30\xc5\xc5\xe9\xe7\xdc\x2b\x2a\
+\x08\x91\x18\xbc\xba\x2d\x63\x59\x59\x95\xc6\xec\x76\xfb\xce\x7f\
+\x9e\x13\x42\x5d\x5a\x65\xcb\xbf\x7f\x4d\xf1\xfb\x04\x35\xcc\x71\
+\xd7\xb8\x17\xa3\x2d\x99\x97\x5f\x8a\x53\x89\x6f\x10\x67\xc6\x89\
+\x9f\xdb\x30\xe1\xca\xc4\x1b\xb3\x5c\x50\xf4\x43\x33\xa9\x4b\x2f\
+\x25\x34\xa2\x59\x2f\xbb\xac\xca\xbb\xe9\x3f\x10\x4b\xed\x59\x0c\
+\xff\x25\x0e\x31\x58\x97\x26\x88\x5f\xd8\xf0\xef\x5e\x5f\xbc\x8b\
+\x70\x86\xb8\xcf\x5d\x76\x6d\x1e\xfc\x53\xec\x47\x8c\x83\x38\xd2\
+\x5f\xfc\xd8\x86\x89\x76\x84\xf8\x60\x36\x0b\x89\x3e\x0f\x7c\xca\
+\x29\x5c\x02\xc5\x70\x9d\x36\x2d\xfd\x0b\x4e\x86\xe3\xf8\x01\xb1\
+\xa9\x3d\x8b\xe1\x07\x89\x74\x1f\xf2\xa0\xe9\x6b\x4b\x5d\xd2\x3d\
+\xa1\x7f\x43\x28\x43\xfc\x8a\x3f\x13\x1b\xda\x53\x97\xfe\x26\x76\
+\x21\xce\x41\x9c\xd0\xcf\xe7\xa6\x6c\x98\x60\x9d\xc4\xe7\xb2\x59\
+\x40\x1a\x35\x52\xce\x45\x17\x11\x0e\xd1\x9a\xb3\xe9\x4e\xab\x56\
+\x19\x8f\xe7\x27\xdc\x6e\x46\x96\x2c\x86\xaf\x8a\x75\x02\xac\x4b\
+\xfa\x0d\x86\xbd\x36\xfc\xbb\x76\x14\x9f\x27\x8c\x21\x1e\xd0\x47\
+\xc4\x16\xf6\xd4\xa5\xd7\x03\xae\x4b\x00\xc6\x28\x4e\x58\xd2\x4e\
+\xf1\x98\x6c\x77\x6a\xe9\xde\x5d\x39\x97\x5f\x4e\x28\xc4\xc0\x5e\
+\x14\x4d\x6d\xd8\xa0\x9c\xe5\xcb\x55\x72\xe1\x42\xe5\xcc\x99\xa3\
+\x9c\x33\xce\x50\xa9\xf1\xe3\x95\x33\x6e\xdc\xbe\x6e\x2e\xa9\x11\
+\x23\x94\x33\x7c\xb8\x72\x06\x0c\xf8\xaf\x03\x07\xaa\x54\xf5\xea\
+\x19\x8f\xeb\x17\xed\x7a\x79\xf4\xde\x44\x30\x6d\xce\x74\x9b\xd7\
+\x67\x6c\xf8\x77\xec\x1b\x44\x07\x29\xc4\x98\xa9\xbf\xc0\xb6\xb3\
+\xa7\x2e\xdd\x95\x48\x77\xa3\x03\x88\x34\xdf\xb6\x61\x42\xf5\xcf\
+\x66\xbb\x32\xfd\xb2\xe3\x94\x29\x04\x48\xac\x9a\x5b\xb6\xec\x7b\
+\xb8\x2a\x35\x7b\xb6\x72\x74\xe8\x96\x60\xed\x1c\x79\xa4\x4a\x36\
+\x6a\x54\xa5\x80\x9d\x0d\xdf\xb0\xab\xdd\xd9\xfa\x00\xea\x92\x15\
+\x1d\x5b\x46\x89\xef\x12\xbe\x10\x3d\xb7\x87\xed\x6c\x4f\x5d\x5a\
+\x41\xbc\x83\x28\x73\xb6\x0d\x13\xe9\x04\xf7\xa9\xf3\xac\x14\x89\
+\x06\x0d\x94\x73\xf1\xc5\x84\x4b\xf4\xd7\xbb\x5c\xbf\x20\xab\x1f\
+\xab\x1a\x36\x4c\x39\xed\xdb\x57\xb9\xf3\x8a\xa9\x76\x67\x23\xed\
+\x59\x0c\x27\x65\xb1\x2e\x9d\x6f\xc3\xbf\xd3\xa9\x6e\xab\x4b\x82\
+\x17\xa2\x77\xdf\x12\x07\xd8\xd3\xd9\xe5\x64\x62\x1e\x44\x11\x99\
+\x43\x89\x4f\xc3\x9e\x44\xa7\x64\x73\x11\xec\xd4\x89\x23\x2d\x78\
+\xf0\x30\xae\xdb\x6b\xea\x30\x7e\xea\xa9\xca\xe9\xd5\x4b\x39\x4d\
+\x9a\xa8\x64\x7e\x7e\x64\x17\xc3\xdd\xee\x17\x5c\x0b\x16\xc3\xbf\
+\x8b\x9d\xb2\x50\x97\x06\x89\x9f\x85\xfd\xef\x33\x83\x1e\xe7\x88\
+\x19\xfb\xb6\x38\xc4\x8e\xba\xf4\xa1\xd8\x91\xb8\x07\x51\xa2\xbe\
+\xf8\x5e\xd8\x93\x47\xbf\xc2\xb7\x27\x5b\x2f\x82\x8e\x1e\x4d\x97\
+\x16\xfc\xba\xfa\x0b\xdb\xd9\x67\x2b\x67\xe4\x48\xe5\xb4\x6d\x5b\
+\xa5\x2e\x2a\x36\x87\xf4\xe3\xed\x58\x0c\x5f\x14\x4b\xab\x50\x97\
+\x1a\x89\xef\x87\xfd\xef\x31\x25\x88\x87\xd1\x10\x73\xcc\x77\xec\
+\x79\x0d\xf9\x79\xb1\x06\xb1\x0f\xa2\x80\xbe\xd0\x75\x6f\xd8\x93\
+\x66\x4c\xb6\x76\xce\x6b\xd4\x50\xce\xbc\x79\x04\x51\x4c\xab\xbf\
+\xa4\xe9\x1d\xf2\xb1\x63\x95\xd3\xba\xb5\x72\x22\xbc\x3b\xee\x37\
+\xa4\x8f\xb2\x63\x31\xfc\x61\x86\x75\x49\x5f\xe8\xba\x2f\xec\x7f\
+\xfe\xa9\xec\x9c\x23\x66\xb5\x2e\x1d\x67\x47\x5d\xfa\x1e\xd1\x0f\
+\xa2\xc0\xea\xb0\x27\xcb\xf0\x6c\x9d\x39\xaf\x5f\x9f\x87\x87\x50\
+\x39\xdb\xb6\x29\xe7\x5b\xdf\x52\x4e\xdf\xbe\x2a\x55\xbb\x76\x4e\
+\x2f\x86\x96\xec\x58\xcd\xcc\xa0\x2e\x2d\x0f\xfb\x9f\x7b\x12\x3b\
+\xe7\x88\x81\xec\xa4\xf7\xb7\xa3\x2e\xcd\x26\xfe\x81\xcd\xf4\x0b\
+\xfb\x7c\xe7\x60\xf7\x72\x5b\x95\x27\x7e\x9b\x36\xca\xd9\xbc\x99\
+\x70\x9a\xa3\x26\xb7\x6e\x4d\x3f\xfc\xa3\x5f\xe8\xcc\x91\x5d\x72\
+\xaf\x8b\xa1\x05\x17\xb4\xfe\x21\xb6\xf7\x51\x97\x06\x86\x5d\x97\
+\xc6\x72\x21\x14\x31\xd0\xae\x53\xdd\xed\xa8\x4b\xed\x88\x81\x60\
+\x23\xb5\xc4\xb7\xc3\x9c\x20\x7d\xdc\xcb\x23\x55\x9e\xf0\x3d\x7b\
+\xa6\x3b\x6f\x10\x54\x73\xcb\xed\xdb\xd3\xa1\xbc\x4b\x97\x74\x2b\
+\x4d\x16\xbe\x6f\xec\xa2\xd0\x2b\xfc\xc5\xf0\xb9\x44\xfa\x8d\x05\
+\x2f\xf7\x61\xf6\x84\xf9\xcf\x3a\x22\x9b\x5d\xa4\x10\xf1\x80\xbe\
+\x2a\x1e\x19\x7e\x5d\x7a\x5a\x2c\x22\x0e\x82\x6d\x7c\x37\xcc\x89\
+\xd1\xc3\xfd\x16\x5d\xe5\x89\x3e\x74\x28\x97\x41\x73\xad\xf3\xca\
+\x8a\x15\xfb\xda\x1f\x26\x23\xd0\xfa\xd0\xa6\xc5\xb0\x43\xf8\x8b\
+\xe1\xb6\x43\xd4\xa4\x3c\xf1\xce\x30\xff\x19\x7b\xb9\xbf\x3a\x30\
+\x66\x10\x83\xf7\x05\xb1\x75\xf8\x75\x69\x1d\x71\x10\x6c\xe2\x94\
+\x30\x27\x44\x5b\x37\x30\x54\xb9\x53\xcb\x84\x09\x04\xd6\x5c\x09\
+\xe5\x3b\x76\x28\xe7\xcc\x33\x55\x4a\x1f\x65\x62\x61\xcb\xc8\xe7\
+\xc4\xc3\xc2\xef\x43\x3c\xea\x20\x75\x69\x76\x98\x75\xa9\x7d\x36\
+\xea\x12\x22\xfa\xf2\x19\xb1\x3c\xdc\xba\xf4\xb9\x7b\xac\x0e\x20\
+\x74\x5a\x88\x7f\x0b\x6b\x32\x34\x49\xa4\x9f\x00\xae\x6a\x38\x4f\
+\x9d\x76\x1a\xc1\x35\x17\x82\xb9\xbe\xf4\x3b\x68\x90\x72\x4a\x4a\
+\x58\xcc\xb2\xe0\xe3\x62\xa3\x70\x17\xc3\x3f\x8a\xe5\x07\xa8\x4b\
+\x6d\xc4\x8f\xc2\xfa\xe7\x6a\x29\xbe\xc8\xf8\x40\x0c\xc5\x07\xc5\
+\x5a\xe1\xd6\xa5\xbd\xee\xf1\x3a\x80\xd0\xd0\xad\xcb\xee\x0f\x6b\
+\x12\x54\x17\xef\xaa\xea\x64\x2e\x28\x50\xce\xcc\x99\x84\xd7\x38\
+\xab\x1f\x0f\x9a\x35\x2b\xdd\x16\x91\xc5\x2b\xeb\xea\x39\x58\x6c\
+\x57\xeb\x45\x7d\xb4\x25\xb4\x96\x8a\x65\xe2\xfd\x8c\x0b\xc4\x50\
+\xbd\x41\x2c\x08\xb7\x2e\xdd\x48\x44\x84\x30\x59\x10\xd6\xe0\x97\
+\x6f\x06\xea\xea\xaa\x4e\x62\x7d\x11\x70\xee\x5c\x02\x6c\x9c\x2f\
+\x7d\x9e\x72\x8a\x4a\x36\x68\xc0\x82\x15\xb0\x57\x8a\x79\xe1\x2e\
+\x86\xa7\xec\x57\x97\xe6\x86\xf5\xcf\xa1\x03\xc1\xf7\x18\x0f\x88\
+\x56\xb8\x2e\xfc\xf3\xe8\x27\x12\x13\x21\x0c\x9a\x25\xd2\xcf\x6f\
+\x87\x32\xf0\x2f\xa9\xe2\xc4\x4d\x16\x16\x2a\xe7\xac\xb3\x08\xb1\
+\x71\x0d\xe6\x27\x9d\xa4\x9c\x5a\xb5\x58\xa4\x0c\xba\x30\xdc\x85\
+\xf0\x4f\x62\x63\xb1\x65\x98\x75\xe9\x32\xc6\x01\xa2\x55\x7e\x2b\
+\xdc\xba\xa4\x3b\x48\xd5\x22\x2e\x82\x69\x7e\x1e\xd6\xa0\x9f\x9c\
+\x8d\x9d\xf3\xf9\xf3\x09\xb2\x71\xbc\xf8\x39\x6e\x9c\x72\x4a\x4b\
+\x59\x98\x42\x50\xbf\x90\x39\x26\xdc\xc5\xf0\x16\xf1\xd7\x61\xfd\
+\xe7\xcf\x60\x0c\x20\x5a\xa7\x7e\x7f\x60\x78\xb8\x75\xe9\x0a\xe2\
+\x22\x98\xe4\xf4\xb0\x06\x7b\xf7\xaa\x3e\x44\xa4\xcf\x9c\xb3\x73\
+\x1e\xaf\x60\xae\x7b\xd6\xeb\x60\x5e\xb3\x26\x0b\x92\x05\x0f\x19\
+\x75\x0e\xff\x67\x65\xe3\x0e\xe4\x21\x22\x44\x6b\x7d\x4d\x6c\x11\
+\x5e\x7d\xf8\x22\x41\x57\x17\x30\x84\xbe\x99\xfc\x87\x30\x06\x7a\
+\x03\xb7\x85\x52\x95\x5a\x29\x4e\x99\x42\xa8\x8d\x93\x73\xe6\x28\
+\xa7\x71\x63\x16\x21\x8b\x7c\x52\xac\x93\x43\xe1\x5c\xb7\x9a\x7c\
+\x89\xcf\x1d\xd1\x6a\xf5\xc5\xed\x1a\xe1\xd5\x09\xf9\x8e\x90\xa8\
+\x4e\x7c\x84\xa0\xf9\x61\x18\x03\xbc\xa8\xaa\x1d\x5b\x74\x38\x9f\
+\x3a\x95\x40\x1b\x17\x17\x2d\x52\xc9\x66\xcd\x58\x78\x2c\xf5\x36\
+\xb1\x30\x07\xc2\x79\x09\x1d\x5b\x10\x23\xe3\x77\xc2\xbd\xcc\x7e\
+\x39\xf1\x11\x82\x64\x78\x58\x0b\xe1\xa5\x55\x9d\x9c\xfa\x08\x04\
+\xc1\x36\xfa\xc7\x59\x36\x6e\x54\x4e\xff\xfe\xca\xc9\xcf\x67\xc1\
+\xb1\xdc\xc5\x39\x10\xd0\x37\xf3\x39\x23\x72\x69\xd4\x9b\x9f\x8a\
+\xdd\x88\x91\x10\x04\xd5\xc4\xd7\xc3\x18\xd8\x63\xdc\x0b\x68\x19\
+\x4f\xca\xa1\x43\x09\xb7\x71\x38\x67\xae\x3b\xb3\x54\xaf\xce\x22\
+\x13\x11\xf7\x8a\x43\x62\x1c\xce\x27\xf1\x19\x23\x46\xce\xdd\x62\
+\xef\xf0\xea\xc6\x23\x89\xf4\x3b\x0d\x00\x59\x65\x51\x18\x03\xba\
+\x8d\xf8\x66\x55\x26\x64\xaf\x5e\xca\xa9\xac\x24\xe4\x46\x39\x9c\
+\x9f\x7b\xae\x72\xea\xd7\x67\x71\x89\xa0\xbf\x4b\x84\xfe\xd2\x68\
+\x60\x75\xe9\x2d\x3e\x5f\xc4\x48\xfa\x5b\xb1\x3c\xbc\xfa\x71\x1a\
+\x71\x12\xb2\x89\xac\xb1\x89\xbf\x85\x71\xee\xfc\xde\xaa\x4c\xc4\
+\x76\xed\x94\xa3\x77\x5e\x09\xb9\xd1\x0c\xe6\x9b\x36\x29\xa7\x7b\
+\x77\x16\x94\x88\x7b\x4b\x22\xfd\xb0\x58\x5c\xc2\x79\x31\xe7\xce\
+\x11\x23\xef\x0f\xc3\x3b\x8f\xbe\x5b\x2c\x21\x56\x42\xb6\xb8\x3e\
+\x8c\x85\x70\x65\x55\x26\x60\x79\xb9\x72\x36\x6f\x26\xe8\x46\x51\
+\xfd\x8b\xc7\xe4\xc9\xca\xa9\x51\x83\x85\x24\x26\x2e\x8a\x51\x40\
+\xdf\xca\xe7\x89\x18\x0b\xe7\x86\x57\x47\xd6\x12\x2b\x21\x1b\xe8\
+\x4b\x0d\x9f\x9b\x1e\xc0\x7d\xdd\x33\xac\x19\x4d\x3c\xfd\x50\xcd\
+\x8a\x15\x04\xdd\x28\xba\x7e\xbd\x72\xba\x76\x65\xf1\x88\x99\x7b\
+\xc4\x1e\x31\x08\xe7\x23\xf8\x2c\x11\x63\xe3\xbb\x62\x87\x70\x6a\
+\xc9\x47\xe2\xe1\xc4\x4b\xa8\x2a\x0f\x98\x1e\xbc\xb5\xc4\xa7\x33\
+\x9d\x74\xba\xbb\xc7\x82\x05\x04\xdd\x28\x3a\x77\xae\x4a\x96\x95\
+\xb1\x70\xc4\xd4\x47\xdd\xb6\x84\x51\x0d\xe7\xf5\xdc\xb3\xab\x7c\
+\x96\x88\xf1\xea\x8f\x5e\x2d\x9c\x9a\xf2\x03\xe2\x25\x54\x85\x93\
+\xc3\x58\x08\xaf\xac\xca\x84\x9b\x38\x91\xa0\x1b\x35\xb7\x6d\x53\
+\x4e\xef\xde\x2c\x16\x39\xe0\xba\x08\x07\xf4\xab\xf8\xfc\x10\x63\
+\xe9\xaa\x70\x6a\xca\x97\x62\x3f\x62\x26\x64\x42\x91\xf8\x96\xe9\
+\x41\x7b\x52\x55\x26\x5a\x9f\x3e\x84\xdd\xa8\x5d\x04\x5d\xbc\x98\
+\x0e\x2d\x39\xa4\x6e\x97\x3a\x20\x82\xe1\x7c\x1c\x9f\x1d\x62\xac\
+\xeb\x52\xff\x70\x6a\xcb\x13\x44\x4d\xc8\x84\x39\x61\xfc\x84\xfc\
+\x62\xa6\x93\xac\x49\x93\xf4\x4e\x2c\xa1\x37\x3a\x4e\x9a\xa4\x9c\
+\xa2\x22\x16\x88\x1c\x53\x1f\x5f\xab\x19\xa1\x70\xae\xdb\xb1\xbd\
+\xcc\xe7\x86\x18\x6b\x1f\x13\xab\x87\x53\x63\xc6\x10\x37\xc1\x0f\
+\xc5\xe2\x1e\xd3\x03\x75\x57\xa6\x93\x4b\x9f\x5b\x5e\xbb\x96\xc0\
+\x1b\x15\xb7\x6c\x51\x4e\x97\x2e\x2c\x0a\x1c\x75\x89\x84\xd7\xf0\
+\x79\x21\xe6\x84\xcb\xc2\xa9\x31\xcf\x25\x78\xbc\x08\x7c\x30\xdf\
+\xf4\x20\x1d\x52\x95\x89\x35\x67\x0e\xa1\x37\x2a\xae\x5c\xa9\x9c\
+\xa6\x4d\x59\x0c\x72\x5c\xdd\xa1\xa9\x7b\x04\xc2\xf9\x70\x3e\x2b\
+\xc4\x9c\xea\x36\xd5\x29\x9c\x5a\x73\x32\xb1\x13\xbc\xa0\x1b\xe8\
+\x3b\x26\x07\x67\x0d\xf1\x37\x99\x4e\xaa\xc1\x83\x09\xbd\x51\x71\
+\xe6\x4c\xe5\x14\x17\xb3\x10\xe0\x7f\xba\x27\x14\x59\x1c\xce\x4b\
+\xab\xd2\x4d\x0a\x11\x23\xe9\xdd\x62\x81\xf9\x7a\xf3\xa2\x98\x4f\
+\xfc\x84\x43\xb1\xc8\xf4\x42\xb8\x2a\xd3\xc9\xa4\x1f\x23\xda\xbe\
+\x9d\xe0\x1b\x85\x87\x87\x46\x8d\x52\x4e\x5e\x1e\x0b\x00\x7e\xc5\
+\x73\x2c\x0e\xe8\xab\xf9\x7c\x10\x73\xd2\xb3\xc2\xa9\x39\x93\x89\
+\x9f\x70\x30\xca\xc4\x3f\x9a\x1c\x94\x47\x8a\xef\x67\x32\x89\x8a\
+\x8a\x54\xf2\x92\x4b\x08\xbf\xb6\xbb\x75\xab\x72\x3a\x76\xa4\xe8\
+\xe3\x01\x7d\x47\x6c\x6e\x61\x38\xef\x9a\x69\x5d\x42\xc4\xc8\xfb\
+\x96\xd8\xc4\x7c\xdd\x79\x4d\x2c\x20\x86\xc2\x37\xb1\xd4\xf4\x42\
+\xf8\xa3\x4c\x27\xd1\xf8\xf1\x84\x5f\xdb\xbd\xec\x32\xce\x9b\xe3\
+\x21\xbd\xde\xb2\x70\x9e\x27\xde\xc5\xe7\x82\x98\xd3\x56\x86\x53\
+\x7f\xa6\x11\x43\xe1\x9b\x3a\xb7\x18\x3d\x7b\x3e\x3a\xc3\x89\x93\
+\x6a\xd3\x46\x39\x15\x15\x04\x60\x9b\xfb\x9b\xaf\x58\xa1\x9c\x06\
+\x0d\x28\xf4\xe8\xc9\x81\x16\x05\xf4\x09\x7c\x1e\x88\xf4\x46\x17\
+\x7b\x84\xb3\x8b\xce\x59\x74\xf8\x1a\xb3\x4c\x0e\x44\xf9\x36\xa0\
+\x9e\xcc\x24\x9c\x57\xaf\xae\x92\xb4\x54\xb4\xdb\xb9\x73\xb9\x0c\
+\x8a\xbe\x7c\x40\x2c\xb4\x20\x9c\xeb\x0b\xeb\xcf\xf1\x79\x20\xa2\
+\xf8\x73\x31\xdf\x7c\x1d\x1a\x4b\x1c\x85\xfd\xd1\x3d\x38\x5f\x36\
+\x39\x08\xe7\x67\x3a\x69\x26\x4c\x20\x00\xdb\xec\xac\x59\x2a\x59\
+\x58\x48\x71\x47\xdf\xce\xb0\x20\xa0\x2f\xe1\x73\x40\xc4\xfd\x9c\
+\x64\xbe\x0e\x3d\x4c\x24\x85\xfd\x39\xd1\xe4\x00\xd4\x2f\xf3\xbd\
+\x91\xc9\x64\x69\xdd\x3a\xdd\x11\x84\x20\x6c\xef\xcb\xa0\x74\x6a\
+\xc1\x0c\xd5\xaf\x75\xd6\x0a\x31\x9c\xeb\x4b\x61\xef\xf2\x39\x20\
+\xe2\x7e\x3e\xef\xb6\x5c\x35\x5c\x8f\x7a\x11\x4b\xe1\xdf\x3c\x68\
+\x72\xf0\x6d\xc9\xb0\x6b\x8b\xa3\xcf\x35\x13\x84\xed\xf4\xe4\x93\
+\x09\xe7\x58\x65\x2f\x0a\x31\xa0\x6f\xe1\xef\x8f\x88\x07\xf0\x42\
+\xf3\xf5\xe8\x56\x62\x29\x68\x7a\x9a\x1c\x78\x2d\x12\xe9\xd7\xba\
+\x7c\x4f\x92\xd1\xa3\x09\xc1\xb6\xaa\x3f\x1b\x8a\x38\x66\xc1\x37\
+\xc5\x86\x21\x84\xf3\xd6\x99\xd6\x25\x44\x8c\xbd\xfa\x17\xff\x7a\
+\x66\x6b\xd2\xe7\x62\x4b\xe2\x29\xdc\x6a\x72\x21\xac\xc8\x64\x82\
+\x94\x97\xab\xd4\xce\x9d\x04\x61\x1b\x1d\x3b\x96\x02\x8e\x59\x75\
+\x5d\x08\x01\xfd\x1a\xfe\xee\x88\x78\x10\x97\x9b\xaf\x4b\x3b\x89\
+\xa7\xb9\x4d\x33\xf7\x9b\x9a\x91\x01\xd7\x36\x91\xe1\xe3\x1f\xf3\
+\xe6\x11\x84\x09\xe7\x98\x23\xee\x16\x9b\x25\xcc\x3e\x4a\x94\xe4\
+\xef\x8e\x88\x89\x83\x3f\x5e\x64\xf8\xd7\xbd\xbf\x8b\xb5\x89\xa9\
+\xb9\xcb\x5a\x93\xdf\x08\xaf\xcd\xa4\xad\x62\xd7\xae\x04\x61\x1b\
+\xfb\x9c\x8f\x1b\x47\xd1\xc6\xc0\xdc\x6e\xb0\x2e\x7d\x8f\xbf\x37\
+\x22\xda\xf9\xeb\xde\xb9\xc4\xd4\xdc\xa4\x48\x4c\x99\x1a\x68\x47\
+\x65\xb0\x4b\xa5\xdb\xf5\xa5\x56\xaf\x26\x10\xdb\xa6\x6e\x75\x49\
+\xb1\xc6\x00\xd5\xbf\xb4\xb5\x34\x50\x97\xba\xf1\xb7\x46\x44\x4b\
+\x7f\xdd\x13\x5f\x20\xaa\xe6\x26\x46\x5b\x2b\x5e\x97\xc9\x84\x38\
+\xf6\x58\xc2\xb0\x6d\x9e\x7e\x3a\xdd\x5a\xd0\x88\x1b\x0d\xd4\xa5\
+\xab\xf9\x3b\x23\xa2\x0f\xd7\x9b\xdf\x45\x3f\x86\xb8\x9a\x7b\xdc\
+\x61\xb2\x43\xc2\x5e\xbf\x13\xa1\x46\x0d\xe5\x6c\xde\x4c\x20\xb6\
+\xc9\x39\x73\x54\x32\x3f\x9f\x22\x8d\x46\x7c\xcf\xed\x4d\x1e\x54\
+\x5d\x6a\x97\x49\x5d\x42\xc4\x9c\xf6\x1d\xb1\xbe\xd9\x80\x7e\x35\
+\x71\x35\xb7\x38\x4c\xfc\xcc\xd4\x00\xdb\x94\xc9\x44\x98\x38\x91\
+\x40\x6c\x91\xc9\x85\x0b\xd3\xbd\xe8\x29\xd0\x68\xd0\xcb\x02\xac\
+\x4b\x57\xf0\xf7\x45\xc4\x0c\x5c\x64\x36\xa0\x7f\x28\x96\x11\x5b\
+\x73\x87\x55\xa6\x06\x57\xb9\xbb\x13\xe6\x6b\x02\x34\x68\xa0\x9c\
+\x5d\xbb\x08\xc6\xb6\xb8\x6c\x99\x72\xaa\x57\xa7\x30\x63\x28\xbb\
+\xe8\xe5\x01\xd4\xa5\x56\xec\x9e\x23\x62\x86\xbe\x92\x30\xfe\xba\
+\xe8\xd9\xc4\xd6\xdc\xa0\x40\x7c\xdf\xd4\xc0\xba\x28\x93\x09\x30\
+\x65\x0a\xa1\xd8\x16\xd7\xad\x53\xa9\x3a\x75\x28\xca\x18\x9a\x17\
+\x27\x78\x35\x14\x11\xed\x72\x86\xd9\x80\xfe\x2c\xd1\x35\x37\x18\
+\x61\x6a\x50\x55\x17\x5f\xf4\x3b\xf0\xcb\xcb\x95\x53\x51\x41\x30\
+\xb6\xc1\x6d\xdb\x94\x73\xc4\x11\x14\x63\x0c\x7d\xb7\xaa\x2c\x8b\
+\x75\xa9\x91\xf8\x2e\x7f\x57\x44\xac\x82\x8f\x8a\xf9\x66\x43\x7a\
+\x67\xe2\x6b\xfc\xb9\xd1\xd4\x80\x9a\x91\xc9\xc0\x9f\x36\x8d\x60\
+\x6c\x43\x9f\x73\xf9\x92\x94\xea\xd4\x89\x42\x8c\x56\x78\x4e\x16\
+\xeb\xd2\xa5\xfc\x3d\x11\x31\x0b\x9e\x68\x36\xa0\x6f\x24\xbe\xc6\
+\x9b\x62\xf1\xaf\x26\x06\x53\x9e\xf8\x88\xcf\xc1\x9e\x6c\xd4\x68\
+\x5f\x30\x24\x20\x5b\x10\xd0\x47\x8e\xa4\x00\xa3\x35\x3e\x27\x16\
+\x65\xa1\x2e\xd5\x12\x5f\xe3\xef\x89\x88\x59\xf0\x27\x66\x03\xfa\
+\x9b\x44\xd8\x78\x73\x92\xa9\xc1\x34\x24\x83\xc1\x9e\x9c\x3e\x9d\
+\x70\x6c\x49\x3b\x45\x7a\x9d\xa3\x6d\x4e\xcd\x42\x5d\x3a\x9f\xbf\
+\x23\x22\x66\xd1\x4e\x66\x43\x7a\x4f\x62\x6c\x7c\xf9\xbe\xa9\x81\
+\x74\x55\x26\x67\xcf\x2b\x2b\x09\xc7\x61\xbb\x74\x29\xed\x14\xd1\
+\x4a\x1f\xa9\xe2\x99\xcf\x62\xf1\xb7\xfc\x1d\x11\x31\x8b\xae\x36\
+\x1b\xd0\x37\x11\x63\xe3\x49\xa9\xf8\x91\x89\x41\xd4\x20\x91\x7e\
+\x12\xd7\xcf\x20\x4f\x9d\x76\x1a\xe1\x38\x6c\xf5\xc3\x50\xf5\xeb\
+\x53\x74\xd1\x5a\xc7\x9a\xbe\x13\x83\x88\x78\x10\xf5\x91\xb9\x12\
+\x73\x01\x7d\x8f\x98\x47\x9c\x8d\x1f\x13\x4d\x7d\xcb\x9b\xe7\xf7\
+\x68\x4b\x59\x99\x4a\xed\xd8\x41\x40\x0e\xd3\x8a\x0a\x95\xec\xd0\
+\x81\x82\x8b\x56\x7b\x9f\x7b\xbf\xc5\x6f\x4d\xd2\xe7\xd7\x9f\xe1\
+\xef\x87\x88\x01\x38\xc1\xec\x2e\x7a\x3f\xe2\x6c\xfc\xb8\xcd\xd4\
+\xe5\xd0\x47\xfd\x0e\x70\x7d\x21\x91\x90\x1c\xae\xe3\xc6\x51\x68\
+\x31\x12\x0e\xcd\xa0\x2e\x4d\xe4\xef\x86\x88\x01\xf9\x23\xb3\x01\
+\x7d\x27\x71\x36\x5e\x94\x88\xff\x30\x31\x78\x7a\xf9\x1d\xdc\x45\
+\x45\x2a\xb5\x69\x13\x01\x39\xcc\x8e\x2d\x8b\x17\xab\x64\x7e\x3e\
+\x85\x16\x23\xe1\x2d\x19\x6c\x1a\xdc\xc7\xdf\x0d\x11\x03\x32\x29\
+\x36\xe7\x98\x0b\x64\xc8\xf1\xa6\xbe\xdd\x6d\xf5\x3b\xb8\x07\x0c\
+\x20\x24\x87\xe9\xd6\xad\xca\x69\xd0\x80\x22\x8b\x91\xb2\x9b\x8f\
+\x9a\x74\x2c\x7f\x2f\x44\x0c\xd8\x0b\xcd\xee\xa2\x1f\x45\xac\x8d\
+\x0f\x15\x26\x06\x4d\xb5\x4c\x7a\x0c\x2f\x5b\x46\x48\x0e\x53\xfd\
+\x05\x89\xe2\x8a\x11\xf3\x7a\x1f\x75\xe9\x67\xfc\xbd\x10\x31\x60\
+\x9f\xc8\xf0\x7e\x4c\x86\x5e\x42\xac\x8d\x0f\xef\x98\x18\x34\xc3\
+\xfd\x0e\xea\x96\x2d\x09\xc8\x61\x3a\x73\x26\x85\x15\x23\xfb\x93\
+\x72\x7b\x0f\x35\xa9\x37\x7f\x2b\x44\xb4\xf0\x97\xbd\x2a\xfa\x08\
+\xb1\x36\x1e\xb4\x36\xf5\xb3\xcb\x0e\xbf\x03\x7a\xca\x14\x42\x72\
+\x48\x26\xd7\xae\x55\x4e\x49\x09\x45\x15\x23\xeb\x16\x0f\x35\xe9\
+\x3b\xfc\x9d\x10\xd1\x90\x97\x98\x0b\xe8\x9f\x8a\xb5\x88\xb7\xd1\
+\x67\x81\x89\x01\x53\x5d\x7c\xc3\xcf\x60\x2e\x2e\x56\x49\x7d\xfe\
+\x99\xb0\x1c\x8e\x5d\xbb\x52\x50\x31\xd2\xea\xb7\x16\x0e\x3f\x48\
+\x4d\xea\xcc\xdf\x08\x11\x0d\xfa\x8c\xd9\x63\x2e\x13\x89\xb7\xd1\
+\xe7\x17\x26\x06\xcb\xf1\x3e\x07\x72\x6a\xe0\x40\x42\x72\x58\x4e\
+\x9f\x4e\x31\xc5\x58\xb8\xe6\x20\x35\xe9\x0a\xfe\x3e\x88\x68\xd8\
+\x1e\xe6\x02\xfa\xb5\xc4\xdb\x68\x53\x6c\xaa\xbd\x62\xa5\xdf\x81\
+\xac\x9f\x94\x27\x2c\x9b\x77\xe3\x46\xe5\x94\x96\x52\x48\x31\x16\
+\xea\x5f\xed\xea\x1c\xa0\x1e\x1d\x9e\xf0\xff\x9a\x31\x22\x62\x55\
+\x5d\x61\x2e\xa0\xef\x26\xe2\x46\x9b\xe1\x26\x06\x8a\x7e\xa5\xef\
+\x75\x3f\x83\xb8\x69\x53\x82\x72\x58\xf6\xe9\x43\x11\xc5\x58\xb9\
+\xf0\x00\x35\x69\x2d\x7f\x17\x44\x0c\xc1\x27\xcd\xb6\x5b\xec\x44\
+\xcc\x8d\x2e\x1b\x4c\x0c\x92\x7e\x7e\x07\xf1\x49\x27\x11\x94\xc3\
+\xb8\x18\x7a\xd6\x59\x14\x50\x8c\x9d\x2f\x8a\x25\xfb\xd5\xa3\x7a\
+\xe2\xdb\xfc\x5d\x10\x31\x24\x5b\x9b\x0b\xe8\xf3\x89\xb9\xd1\xe5\
+\x31\x13\x83\xe4\x52\xbf\xe7\xcf\x57\xaf\x26\x30\x9b\x76\xfb\x76\
+\xe5\xd4\xaf\x4f\xf1\xc4\x58\x3a\x67\xbf\x7a\xb4\x94\xbf\x07\x22\
+\x86\xe8\x59\xe6\x02\xfa\xad\xc4\xdc\x68\x52\x5d\xfc\xc4\xc4\x20\
+\xf9\xb5\x9f\xc1\xdb\xa2\x05\x61\x39\x0c\x47\x8e\xa4\x70\x62\x6c\
+\x7d\xd6\x3d\x6a\x57\xcb\xef\x71\x3b\x44\xc4\x2c\x7b\xb3\xb9\x80\
+\x9e\x24\xea\x46\x93\xbe\x26\x06\x48\xe3\x44\xfa\xd1\x10\xcf\x83\
+\x77\xc2\x04\xc2\xb2\x69\xd7\xac\x51\x4e\x51\x11\x85\x13\x63\xed\
+\x44\x77\xe7\x8a\xbf\x05\x22\x86\xe9\x3b\x89\x74\xeb\x69\x43\x21\
+\xbd\x39\x71\x37\x7a\x2c\x32\x31\x38\x4e\xf3\x33\x70\xf3\xf2\x94\
+\xb3\x6e\x1d\x81\xd9\xf4\xd9\xf3\xee\xdd\x29\x9a\x18\x7b\x1f\x70\
+\x77\xd2\xf9\x5b\x20\x62\xd8\x1e\x6b\x2e\xa0\x4f\x26\xee\x46\x8f\
+\xdb\x4d\x0c\x8e\x6b\xfc\x0c\xda\x56\xad\x08\xcc\xa6\x5d\xb8\x90\
+\x62\x89\x88\x88\x68\xd0\xb5\xe6\x02\x7a\x25\x71\x37\x7a\xfc\x3e\
+\xe8\x81\x51\x20\xbe\x46\xf7\x16\x7b\xad\xac\x54\xa9\x96\x2d\x29\
+\x96\x88\x88\x88\x06\x7d\xc4\x5c\x40\x7f\x9e\xb8\x1b\x2d\xda\x99\
+\x18\x18\x9d\xfc\x0e\xda\x4b\x2e\x21\x34\x9b\x3c\xda\xc2\x8b\xa1\
+\x88\x88\x88\xa1\x58\x6e\x26\xa0\x7f\x21\xd6\x21\xf6\x46\x87\xa9\
+\x26\x02\xfa\x34\x3f\x83\xb5\x5e\x3d\x42\xb3\x41\x53\x3b\x77\xaa\
+\x94\xfe\x9b\x53\x24\x11\x11\x11\x8d\x7b\xbc\xb9\x5d\xf4\xe1\xc4\
+\xde\xe8\xb0\xcd\xc4\xa0\xb8\xd2\xcf\x60\x1d\x30\x80\xe0\x6c\x72\
+\xf7\x7c\xd2\x24\x0a\x24\x22\x22\x62\x48\xae\x32\x17\xd0\x2f\x22\
+\xf6\x46\x87\x5f\x99\x18\x14\x4f\xfb\x19\xac\x73\xe6\x10\x9c\x0d\
+\x3e\x4a\x94\xaa\x5d\x9b\x02\x89\x88\x88\x18\x92\x3f\x37\x17\xd0\
+\x6f\x24\xf6\x72\x41\xf4\x3f\x96\xfb\x19\xa8\x85\x85\x2a\xb9\x75\
+\x2b\xc1\xd9\x94\xe3\xc7\x53\x1c\x11\x11\x11\x43\x74\x77\xc2\x58\
+\x3f\x74\x2e\x8a\x46\x84\xc6\x26\xbe\xb1\x8d\xf5\x33\x50\xdb\xb6\
+\x25\x34\x1b\xdc\x3d\x4f\xd6\xac\x49\x71\x44\x44\x44\x0c\xd9\xbe\
+\x66\x02\xfa\xa7\x62\x35\xe2\xaf\xfd\x1c\x67\x22\xa0\xaf\xf2\x33\
+\x48\x4f\x38\x81\xe0\x6c\xca\xb1\x63\x29\x8a\x88\x88\x88\x16\x38\
+\xcf\xdc\x31\x97\x4e\xc4\x5f\xfb\x31\xf2\x82\xe8\x6d\x7e\x06\xe9\
+\x82\x05\x04\x67\x43\xbb\xe7\x4e\x69\x29\x45\x11\x11\x11\xd1\x02\
+\xaf\x34\x17\xd0\x4f\x27\xfe\xda\xcf\x77\x4d\x0c\x86\x57\x3c\x0e\
+\xce\x64\x7e\x7e\x3a\x38\x12\xa0\x83\xf7\xb4\xd3\x28\x88\x88\x88\
+\x88\x96\xf8\x80\xb9\x80\xbe\x81\xf8\x6b\x3f\xcf\x58\x75\x41\xf4\
+\x88\x23\x08\xce\x86\x5e\x0d\x75\x1a\x35\xa2\x20\x22\x22\x22\x5a\
+\x74\x51\xb4\xc8\x4c\x40\xbf\x8b\xf8\x6b\x3f\x7f\x0f\x7a\x20\x0c\
+\xf6\x33\x40\x87\x0c\x21\x3c\x9b\xe8\x7b\x7e\xd6\x59\x14\x43\x44\
+\x44\x44\xcb\xec\x68\x26\xa0\xbf\x45\xfc\xb5\x9b\x86\x26\x7e\x4a\
+\x99\xeb\x67\x70\xce\x9c\x49\x80\x36\xa1\xee\x94\x43\x21\x44\x44\
+\x44\xb4\xca\x93\xcd\x75\x72\x29\x20\x06\xdb\x4b\x6f\x13\x01\xbd\
+\xc2\xc7\xc0\x4c\xae\x5d\x4b\x78\x0e\xda\x8b\x2f\xa6\x08\x22\x22\
+\x22\x5a\xe8\x72\x73\xe7\xd0\x9b\x13\x83\xed\xe5\x54\x13\x83\xe0\
+\x57\x5e\x07\xa6\xee\x28\x42\x80\x0e\xde\xbe\x7d\x29\x82\x88\x88\
+\x88\x16\xfa\x7d\x73\x01\x7d\x10\x31\xd8\x5e\x96\x04\x3d\x00\xf2\
+\xc4\xb7\xbd\x0e\xcc\xf6\xed\x09\xcf\x41\x7b\xf9\xe5\xca\x29\x2a\
+\xa2\x08\x22\x22\x22\x5a\xe8\x93\xe6\x02\xfa\x34\x62\xb0\xbd\x5c\
+\x1d\xf4\x00\x68\xe4\x67\x60\x0e\x1d\x4a\x80\x0e\xfa\x72\xe8\xa4\
+\x49\x14\x40\x44\x44\x44\x4b\xdd\x63\xae\x93\xcb\x2a\x62\xb0\xbd\
+\xdc\x1b\xf4\x00\xe8\xe1\x67\x60\x4e\x99\x42\x88\x0e\xda\xc3\x0e\
+\xa3\x00\x22\x22\x22\x5a\x6c\x33\x33\x01\xfd\x06\x62\xb0\xbd\xbc\
+\x11\xf4\x00\x38\xc9\xc7\x80\x4c\x2d\x59\x42\x80\x0e\xd2\x8b\x2e\
+\xa2\xf0\x21\x22\x22\x5a\x6e\x7f\x33\x01\xfd\x21\x62\xb0\x9d\xe4\
+\x89\x1f\x07\x3d\x00\xce\xf5\x3a\x20\xf3\xf3\x55\x6a\xc7\x0e\x42\
+\x74\x90\xf6\xef\x4f\xe1\x43\x44\x44\xb4\xdc\x53\xcd\x04\xf4\xf7\
+\x88\xc2\x76\x52\xd7\xc4\x25\x84\x4d\x5e\x07\xa4\x7e\xd5\x92\x10\
+\x1d\x9c\xdb\xb7\x2b\xa7\xa4\x84\xc2\x87\x88\x88\x68\xb9\x8b\xcd\
+\x04\xf4\x4f\x88\xc2\x76\xd2\xc6\x44\x40\xbf\xc9\xeb\x80\xec\xd4\
+\x89\x10\x1d\xa4\xfa\x01\x28\x8a\x1e\x22\x22\xa2\xf5\xee\x32\xd7\
+\xc9\xa5\x8c\x38\x6c\x1f\x7d\x4c\x7c\xf8\x0f\x7b\x3d\x7f\x3e\x78\
+\x30\x21\x3a\x48\x8f\x3a\x8a\xa2\x87\x88\x88\x18\x01\x7f\x64\x2e\
+\xa0\xb7\x20\x0e\xdb\xc7\x89\x26\x3e\xfc\x97\xbd\x0e\xc8\xf1\xe3\
+\x09\xd1\x41\xb9\x75\x2b\xbd\xcf\x11\x11\x11\x23\xe2\x03\xe6\x02\
+\xfa\x31\xc4\x61\xfb\x98\x16\xf4\x07\x5f\x20\xee\xf5\xba\x83\x3e\
+\x7b\x36\x41\x3a\x28\xa7\x4f\xa7\xe0\x21\x22\x22\x46\xc4\xdf\x9a\
+\x0b\xe8\x23\x89\xc3\xf6\xb1\x28\xe8\x0f\xbe\x9e\x9f\x01\xb9\x74\
+\x29\x41\x3a\x20\x53\x5d\xbb\x52\xf0\x10\x11\x11\x23\xe2\xee\x44\
+\xfa\x25\x76\x03\x01\xfd\x0c\xe2\xb0\x7d\xac\x0f\xfa\x83\x6f\xed\
+\x67\x40\x6e\xde\x4c\x98\x0e\xc2\x2d\x5b\x54\xb2\xb0\x90\x82\x87\
+\x88\x88\x18\x21\x6b\x99\x09\xe8\x0b\x88\xc3\xf6\x71\x75\xd0\x1f\
+\x7c\x4f\xaf\xc7\x5b\xaa\x57\x27\x48\x07\xb5\x7b\x4e\xf7\x16\x44\
+\x44\xc4\xc8\xd9\xc2\x4c\x40\x5f\x4d\x1c\xb6\x8f\xdb\x82\xfe\xe0\
+\x47\x78\x1c\x84\x49\x7a\xa0\x07\x67\xcf\x9e\x14\x3a\x44\x44\xc4\
+\x88\x79\xb4\x99\x80\x5e\x41\x1c\xb6\x8f\x5f\x04\xfd\xc1\x9f\xea\
+\x75\x20\xb6\x6c\x49\x90\x0e\xc2\xca\x4a\xe5\x94\x95\x51\xe8\x10\
+\x11\x11\x23\xe6\x30\x33\x01\xfd\x7a\xe2\xb0\x7d\xdc\x17\xf4\x07\
+\x3f\xcb\xeb\x40\xec\xd2\x85\x30\x1d\x84\x17\x5e\x48\x91\x43\x44\
+\x44\x8c\xa0\x63\xcd\x04\xf4\x1f\x10\x87\xed\xe3\xe1\xa0\x3f\xf8\
+\x79\x5e\x07\x62\x9f\x3e\x84\xe9\x20\x1c\x3d\x9a\x22\x87\x88\x88\
+\x18\x41\x27\x9a\x09\xe8\xb7\x11\x87\xed\xe3\x37\x41\x7f\xf0\xe7\
+\x79\x1d\x88\xc3\x86\x11\xa6\x83\xb8\x20\xaa\x8f\x0e\x51\xe4\x10\
+\x11\x11\x23\xe7\xe9\x66\x02\xfa\x9d\xc4\x61\xfb\x78\x3e\xe8\x0f\
+\x7e\xb1\xd7\x81\x38\x76\x2c\x81\x3a\xdb\xea\xb6\x95\xf9\xf9\x14\
+\x39\x44\x44\xc4\x08\x3a\xc3\x4c\x40\xbf\x97\x38\x6c\x1f\x2f\x07\
+\xfd\xc1\x2f\xf3\x3a\x10\x4f\x3f\x9d\x40\x9d\x6d\xe7\xcc\xa1\xc0\
+\x21\x22\x22\x46\xd4\x39\x66\x02\xfa\x03\xc4\x61\xfb\x78\x2b\xe8\
+\x0f\x7e\x95\xc7\x41\xb8\xaf\x57\x37\xa1\x3a\xab\x26\x8f\x3b\x8e\
+\x02\x87\x88\x88\x18\x51\xcf\x35\x13\xd0\x1f\x27\x0e\xdb\xc7\x9e\
+\xa0\x3f\xf8\x75\x5e\x07\xa2\xde\xed\x25\x54\x73\xfe\x1c\x11\x11\
+\x11\xf7\x79\x81\x99\x80\xfe\x0c\x71\xd8\x3e\x52\x41\x7f\xf0\x97\
+\x7b\x1d\x88\x73\xe7\x12\xaa\xb3\xe9\xf6\xed\xca\x29\x28\xa0\xc0\
+\x21\x22\x22\x46\xd4\x25\x66\x02\xfa\x0b\xc4\x61\xfb\x70\x82\xfe\
+\xe0\x37\x7b\x3d\xe2\x32\x7f\x3e\xa1\x3a\x9b\xc7\x5b\x16\x2e\xa4\
+\xb8\x21\x22\x22\x46\xd8\x0b\xcd\x04\xf4\xdf\x12\x87\x73\xf0\x88\
+\xcb\x7a\xaf\x03\x51\x07\x4a\x82\x75\xf6\x8e\xb7\x8c\x1b\x47\x71\
+\x43\x44\x44\xe4\x88\x0b\x47\x5c\x22\xc8\x3b\x41\x7f\xf0\x6b\xbd\
+\x0e\xc4\xc5\x8b\x09\xd6\xd9\x0c\xe8\x5d\xbb\x52\xdc\x10\x11\x11\
+\x23\xec\x02\x33\x01\xfd\x09\xe2\xb0\x7d\xbc\x11\xf4\x07\xbf\xd2\
+\xeb\x40\x5c\xba\x94\x60\x9d\x4d\x6b\xd7\xa6\xb8\x21\x22\x22\x46\
+\xd8\x79\x66\x02\xfa\x23\xc4\x61\xfb\x78\x25\xe8\x0f\x7e\xb9\xd7\
+\x81\xb8\x6c\x19\xa1\x3a\x9b\x0f\x14\x51\xd8\x10\x11\x11\xe9\x83\
+\x9e\xa0\x0f\x7a\x14\x79\x31\xe8\x0f\x7e\x29\x3b\xe8\xe6\x3d\xef\
+\x3c\x0a\x1b\x22\x22\x62\xc4\x9d\x69\x26\xa0\xff\x92\x38\x6c\x1f\
+\xcf\x07\xfd\xc1\x2f\xf6\x3a\x10\x2f\xba\x88\x60\x9d\x2d\x4f\x39\
+\x85\xc2\x86\x88\x88\x18\x71\xcf\x34\x13\xd0\x7f\x41\x1c\xb6\x8f\
+\xa7\x83\xfe\xe0\x2f\xf0\xda\x66\x91\x4b\xa2\xd9\x6b\xb1\xd8\xaf\
+\x1f\x85\x0d\x11\x11\x31\xe2\x4e\x36\x13\xd0\xef\x20\x0e\xdb\xc7\
+\xe3\x41\x7f\xf0\x73\x3d\x0e\xc2\x24\x6d\x16\xb3\x67\x8b\x16\x14\
+\x36\x44\x44\xc4\x88\x3b\xd6\x4c\x40\xbf\x8d\x38\x6c\x1f\xbf\x0a\
+\xfa\x83\x9f\xea\x75\x20\x9e\x7f\x3e\xc1\x3a\x1b\x56\x56\x2a\xa7\
+\xb8\x98\xc2\x86\x88\x88\x18\x71\x8f\x35\x13\xd0\xaf\x27\x0e\xdb\
+\xc7\x4f\x82\xfe\xe0\x27\x78\x3d\xe2\xc2\x4b\xa2\xd9\x71\xdd\x3a\
+\x8a\x1a\x22\x22\x62\x0c\xec\x69\x26\xa0\xef\x24\x0e\xdb\xc7\x8d\
+\x41\x7f\xf0\x23\xbc\x06\xf4\x73\xce\x21\x5c\x67\xc3\x0b\x2e\xa0\
+\xa8\x21\x22\x22\xc6\xc0\x8e\x66\x02\xfa\x65\xc4\x61\xfb\xb8\x32\
+\xe8\x0f\x7e\x80\xd7\x80\x3e\x7b\x36\xe1\x3a\x1b\x4e\x9b\x46\x51\
+\x43\x44\x44\x8c\x81\xcd\xcc\x04\xf4\x25\xc4\x61\xfb\xd8\x1c\xf4\
+\x07\x7f\xb4\xd7\x4b\xa2\x53\xa7\x12\xae\xb3\xe1\xe8\xd1\x14\x35\
+\x44\x44\xc4\x18\x58\xcf\x4c\x40\x9f\x4b\x1c\xb6\x8f\x15\x41\x7f\
+\xf0\xed\xbc\x0e\xc4\x49\x93\x08\xd7\xd9\xb0\x6f\x5f\x8a\x1a\x22\
+\x22\x62\x0c\xac\x66\x26\xa0\x4f\x25\x0e\xdb\xc7\x05\x41\x7f\xf0\
+\x4d\xbd\x1e\x71\x19\x37\x8e\x70\x9d\x0d\xdb\xb6\xa5\xa8\x21\x22\
+\x22\x46\xdc\x77\xcc\x84\x73\xed\x38\xe2\xb0\x7d\xcc\x09\xfa\x83\
+\x2f\xf1\x3a\x18\x47\x8d\x22\x5c\x67\xc3\xfa\xf5\x29\x6c\x88\x88\
+\x88\x11\xf7\x37\xe6\x02\xfa\xb1\xc4\x61\xfb\x98\x64\xe2\xc3\x7f\
+\xdb\xcb\x60\x1c\x3a\x94\x70\x9d\x8d\x57\x44\x0b\x0b\x29\x6c\x88\
+\x88\x88\x11\xf7\xe7\xe6\x02\x7a\x37\xe2\xb0\x7d\x0c\x35\xf1\xe1\
+\x3f\xe5\x65\x30\xea\xe7\xe9\x09\xd8\x55\x73\xdb\x36\x8a\x1a\x22\
+\x22\x62\x0c\xbc\xc1\x5c\x40\x6f\x4c\x1c\xb6\x8f\x2e\x26\x3e\xfc\
+\xbb\xbd\x0c\xc6\x6e\xdd\x08\xd8\x55\x75\xcd\x1a\x8a\x1a\x22\x22\
+\x62\x0c\xdc\x62\x26\x9c\x7f\x21\x16\x10\x87\xed\xa3\xb1\x89\x80\
+\xfe\x7d\x2f\x97\x44\xdb\xb4\x21\x60\x57\xd5\x25\x4b\x28\x6a\x88\
+\x88\x88\x31\x70\xa9\x99\x80\xfe\x47\xa2\xb0\x9d\x14\x89\x5f\x06\
+\x3d\x00\x76\x79\x19\x8c\xe5\xe5\x04\xec\x2a\x9a\x3a\xf7\x5c\x8a\
+\x1a\x22\x22\x62\x0c\xfc\x96\x99\x80\xfe\x12\x51\xd8\x5e\xfe\x1a\
+\xf4\x00\x58\xe5\x65\x30\x96\x96\x12\xb2\xab\xea\xf4\xe9\x14\x35\
+\x44\x44\xc4\x18\x38\xce\x4c\x40\xff\x35\x31\xd8\x5e\xde\x08\x7a\
+\x00\xcc\xf3\x32\x18\xf3\xf2\x94\x53\x51\x41\xc8\xae\x8a\xa7\x9c\
+\x42\x51\x43\x44\x44\x8c\x81\x3d\xcd\x04\xf4\x9b\x89\xc1\xf6\xf2\
+\x58\xd0\x03\xe0\x24\x8f\x83\x31\xb5\x69\x13\x21\xbb\x2a\x8e\x19\
+\x43\x51\x43\x44\x44\x8c\x81\x8d\xcd\x04\xf4\x9d\xc4\x60\x7b\xf9\
+\x69\xd0\x03\xa0\x97\xd7\x01\xb9\x7c\x39\x21\xbb\x2a\x1e\x7f\x3c\
+\x45\x0d\x11\x11\x31\xe2\xee\x16\xf3\xcd\x04\xf4\xa5\xc4\x60\x7b\
+\xb9\x22\xe8\x01\xd0\xd4\xeb\xa0\x5c\xb0\x80\x90\x5d\x95\x4b\xa2\
+\x23\x46\x50\xd8\x10\x11\x11\x23\xee\xe3\x09\x63\x3d\xd0\x4f\x23\
+\x06\xdb\xcb\xd2\xa0\x07\x40\x81\xb8\xc7\xcb\xa0\x9c\x3a\x95\xa0\
+\x5d\x15\x8f\x3d\x96\xc2\x86\x88\x88\x18\x71\x6f\x35\x17\xd0\xfb\
+\x10\x83\xed\xe5\x74\x13\x83\xe0\x19\x2f\x83\x72\xf4\x68\x42\x76\
+\x55\x76\xd0\x07\x0f\xa6\xb0\x21\x22\x22\x46\xdc\x6d\xe6\x02\x7a\
+\x13\x62\xb0\xbd\x0c\x32\x31\x08\xee\xf2\x30\x20\x93\xfd\xfa\x11\
+\xb4\xab\xe0\xbe\xbf\x1f\x85\x0d\x11\x11\x31\xd2\x5e\x60\x26\x9c\
+\x7f\x22\xe6\x13\x83\xed\xa5\x85\x89\x80\x7e\x95\x97\x41\xd9\xb1\
+\x23\x41\xbb\x2a\xf6\xee\x4d\x61\x43\x44\x44\x8c\xb8\x63\xcd\x04\
+\xf4\x37\x89\xc0\x76\xa3\x5f\x13\xfd\x22\xe8\x81\x70\x91\x97\x41\
+\xd9\xa4\x09\x21\xbb\x2a\x47\x5c\x7a\xf6\xa4\xb0\x21\x22\x22\x46\
+\xdc\x8e\x66\x02\xfa\x7d\x44\x60\xfb\xd9\x1b\xf4\x40\x98\xe8\x61\
+\x40\xa6\xaa\x57\x27\x68\xb3\x83\x8e\x88\x88\x98\xb3\xbe\x2f\x16\
+\x9b\x09\xe8\xd7\x11\x7f\xed\xe7\xf1\xa0\x07\x42\x77\xaf\x83\x73\
+\xe3\x46\x82\x36\x67\xd0\x11\x11\x11\x69\xb1\x18\xac\x97\x10\x7f\
+\xed\xe7\x07\x41\x0f\x84\xda\x5e\x07\xe7\x05\x17\x10\xb6\x33\x75\
+\xd0\x20\x8a\x1b\x22\x22\x62\x84\xbd\xc1\x5c\x40\x3f\x99\xf8\x6b\
+\x3f\x2b\x4c\x0c\x86\x17\xbc\x0c\xce\x33\xce\x20\x68\x67\xea\xd0\
+\xa1\x14\x37\x44\x44\xc4\x08\xbb\xdc\x5c\x40\xef\x48\xfc\xb5\x9f\
+\xc9\x26\x06\xc3\x1d\x5e\xce\xa1\xeb\xd7\x30\x09\xdb\x99\x1d\x71\
+\x39\xee\x38\x8a\x1b\x22\x22\x62\x84\x3d\xcd\x4c\x38\xff\x4c\xac\
+\x46\xfc\xb5\x9f\x1e\x26\x02\xfa\x76\x2f\x83\xb3\x5b\x37\xc2\x76\
+\xa6\x8e\x1c\x49\x71\x43\x44\x44\x8c\xb0\x9d\xcd\x04\xf4\xd7\x88\
+\xbe\xd1\xa0\xa6\xf8\x65\xd0\x03\xe2\x2c\x2f\x3b\xe8\xb4\x5a\xcc\
+\xdc\x71\xe3\x28\x6e\x88\x88\x88\x11\x75\xb7\x58\x64\x26\xa0\xff\
+\x84\xe8\x4b\xab\xc5\xff\x38\xc0\xcb\x00\x2d\x2a\x52\x4e\x45\x05\
+\x61\x3b\x93\x3e\xe8\x93\x27\x53\xe0\x10\x11\x11\x23\xea\xdd\xe6\
+\xce\x9f\xaf\x23\xf6\x46\x87\x07\x83\x1e\x10\xf5\xbc\x0e\xd2\xe5\
+\xcb\x09\xdc\x99\x38\x6b\x16\x05\x0e\x11\x11\x31\xa2\x6e\x31\x17\
+\xd0\xcf\x24\xf6\x46\x87\x6b\x4c\x0c\x8a\xe7\xbc\x0c\xd2\x19\x33\
+\x08\xdb\x99\x38\x7f\x3e\x05\x0e\x11\x11\x31\xa2\x4e\x33\x17\xd0\
+\x8f\x26\xf6\x46\x87\x85\x26\x06\xc5\x8d\x74\x72\x09\xce\x25\x4b\
+\x28\x70\x88\x88\x88\x11\xb5\xbb\x99\x70\xfe\x09\x1d\x5c\xa2\xc5\
+\xb1\x26\x02\xfa\xc5\x5e\x06\x69\xc7\x8e\x84\xed\x4c\x5c\xbd\x9a\
+\x02\x87\x88\x88\x18\xd1\x0b\xa2\xd5\xcd\x04\xf4\x67\x88\xbc\xd1\
+\xa2\xbe\x89\x80\x3e\xd6\xcb\x40\xad\x5d\x9b\xb0\x9d\x89\x5b\xb6\
+\x50\xe4\x10\x11\x11\x23\xe8\xcf\xcd\x1d\x6f\xb9\x86\xc8\x1b\x3d\
+\xf6\x04\x3d\x30\x5a\x79\x1c\xa8\xa9\x8d\x1b\x09\xdc\x99\x74\x72\
+\xa9\x5e\x9d\x42\x87\x88\x88\x18\x31\x57\x99\x0b\xe8\x73\x89\xbb\
+\xd1\xe3\xae\xa0\x07\x46\x9e\xf8\xb2\x97\x80\x7e\xee\xb9\x04\xee\
+\x4c\x2c\x2f\xa7\xd0\x21\x22\x22\x46\xcc\xd1\xe6\x02\x7a\x6f\xe2\
+\x6e\xf4\xb8\xcc\xc4\xe0\xf8\x9e\x97\xc1\x7a\xc2\x09\x84\xed\x4c\
+\x6c\xdf\x9e\x42\x87\x88\x88\x18\x31\x1b\x99\x09\xe7\x9f\x89\x25\
+\xc4\xdd\xe8\x31\xd1\x44\x40\x3f\x8f\x8b\xa2\xc1\xd9\xbb\x37\x85\
+\x0e\x11\x11\x31\x42\x3e\x6e\x6e\xf7\xfc\x05\xa2\x6e\x34\x69\x6b\
+\x62\x80\x78\x7a\x51\xb4\xa4\x44\x39\x95\x95\x04\x6e\xbf\x67\xd0\
+\x47\x8e\xa4\xd8\x21\x22\x22\x46\xc8\x1d\xe6\x02\xfa\x75\x44\xdd\
+\x68\x92\x27\xfe\x25\xe8\x01\x52\x26\xbe\xef\x65\xd0\xae\x58\x41\
+\xe8\xf6\xeb\xa4\x49\x14\x3b\x44\x44\xc4\x08\x79\x9a\xb9\x80\x3e\
+\x93\xa8\x1b\x5d\xee\x31\x31\x48\xee\xf3\x32\x68\xa7\x4c\x21\x70\
+\xfb\xdd\x41\x3f\xe7\x1c\x8a\x1d\x22\x22\x62\x84\x3c\xcc\x5c\x40\
+\x6f\x47\xcc\x8d\x2e\xab\x4c\x0c\x92\xf5\x5e\x06\xed\xc0\x81\x84\
+\x6e\xbf\xae\x5a\x45\xb1\x43\x44\x44\x8c\x88\x8f\x98\x0b\xe7\x7f\
+\x70\x4f\x4a\x40\x44\x19\x65\x62\xa0\x9c\xe8\x65\xe0\xea\x96\x81\
+\x84\x6e\x7f\x56\x54\xa8\x64\x61\x21\x45\x0f\x11\x11\x31\x02\xae\
+\x33\x17\xd0\x7f\x4c\xc4\x8d\x36\x75\xc5\x2f\x83\x1e\x28\xf2\x1f\
+\xa2\xf6\x7a\x19\xbc\xeb\xd6\x11\xba\xe9\x85\x8e\x88\x88\x18\x4b\
+\x47\x9a\x0b\xe8\x17\x10\x71\xa3\xcf\xcb\x26\x06\xcb\x3d\x5e\x06\
+\xef\xb4\x69\x04\x6e\xbf\xe7\xd0\xbb\x76\xa5\xe8\x21\x22\x22\x5a\
+\xee\x6e\xb7\x71\x86\xa1\x80\x7e\x0c\xf1\x36\xfa\x5c\x6f\x62\xb0\
+\xac\xf0\x32\x80\xfb\xf6\x25\x74\xfb\x75\xd8\x30\x0a\x1f\x22\x22\
+\xa2\xe5\xde\x61\x2e\x9c\xff\x43\x2c\x22\xde\x46\x9f\x39\x26\x06\
+\xcc\x30\x2f\x03\xb8\x41\x03\x02\xb7\x5f\x4f\x3f\x9d\xc2\x87\x88\
+\x88\x68\xb9\xe7\x99\x0b\xe8\x77\x13\x6d\xe3\xc1\x91\x26\x06\x4c\
+\xa9\xfb\xf3\xce\xa1\x06\x70\x6a\xf5\x6a\x42\xb7\x1f\x2f\xba\x88\
+\xc2\x87\x88\x88\x68\xb9\x1d\x38\x7f\x0e\x3e\xd1\x6d\x78\x52\x26\
+\x06\xcd\x8f\xbd\x0c\xe2\xc9\x93\x09\xdd\x7e\xdc\xbe\x5d\x39\x79\
+\x79\x14\x3f\x44\x44\x44\x4b\x7d\xdc\x5c\x38\xd7\x76\x26\xda\xc6\
+\x87\x1f\x98\x18\x34\xf3\xbc\x0c\xe4\xce\x9d\x09\xdd\x74\x72\x41\
+\x44\x44\x8c\x8d\xab\xcc\x85\xf3\x24\xfd\xcf\xe3\xc5\x0c\x13\x03\
+\xa7\x8d\x97\x81\x5c\x54\x94\xde\x15\x26\x78\x7b\x36\xd9\xbd\x3b\
+\x05\x10\x11\x11\xd1\x52\x7b\x99\x0b\xe8\xd7\x13\x69\xe3\x45\x4b\
+\x53\x3f\xbd\xfc\xc6\xcb\x60\x9e\x37\x8f\xe0\xed\xc7\xb1\x63\x29\
+\x80\x88\x88\x88\x16\xfa\xb2\x58\x60\x2e\xa0\x9f\x41\xa4\x8d\x1f\
+\x6f\x9b\x18\x3c\xeb\xbc\x0c\xe8\x21\x43\x08\xdd\x7e\x3c\xfb\x6c\
+\x8a\x20\x22\x22\xa2\x85\x6e\x37\x17\xce\xf5\xc3\x93\xe5\xc4\xd9\
+\xf8\xf1\x3f\xb6\xb4\x5b\x4c\xd5\xab\x47\xe8\xf6\xe3\xc6\x8d\x14\
+\x41\x44\x44\x44\x0b\x1d\x64\x2e\xa0\x3f\x47\x94\x8d\x27\x93\x4d\
+\x0c\xa0\xea\xe2\x9b\x5e\x06\xf5\xf2\xe5\x04\x6f\x3f\xd6\xaf\x4f\
+\x21\x44\x44\x44\xb4\xc8\xdf\x89\x85\xe6\x02\xfa\x4a\xa2\x6c\x3c\
+\xa9\x27\x7e\x6e\x62\x10\x55\x7a\x19\xd8\xc7\x1f\x4f\xe8\xf6\x61\
+\xaa\x67\x4f\x8a\x21\x22\x22\xa2\x45\xae\x35\xdb\x5e\xb1\x0b\x51\
+\x36\xbe\x3c\x61\x62\x10\x8d\xf6\x30\xa8\x93\x8d\x1a\x11\xbc\xfd\
+\x38\x69\x12\xc5\x10\x11\x11\xd1\x22\x7b\x9a\x0b\xe7\xef\x12\x61\
+\xe3\xcd\xc5\x26\x06\x52\xb1\xf8\xba\x97\xc1\x7d\xc9\x25\x04\x6f\
+\xaf\x3b\xe8\x4b\x96\x50\x0c\x11\x11\x11\x2d\xf1\x49\x31\xcf\x5c\
+\x40\xdf\x4a\x84\x8d\x37\x47\x99\xfa\x29\xe6\x6a\x8e\xb9\x64\xd7\
+\x5d\xbb\x54\xaa\x5a\x35\x8a\x22\x22\x22\xa2\x05\x2e\x37\x7b\xbc\
+\x65\x08\x11\x36\xde\xe8\xd7\xa7\xde\x37\x31\x98\xc6\x7a\x19\xe0\
+\x4d\x9a\x10\xbc\xfd\xd8\xba\x35\x45\x11\x11\x11\xd1\x02\x3b\x9a\
+\x0b\xe7\xff\x2b\x16\x12\x61\xe3\xcf\xd5\x26\x06\x54\x0d\xf1\x6d\
+\x2f\x67\xd1\x39\xe6\xe2\xdd\x51\xa3\x28\x8a\x88\x88\x88\x21\xfb\
+\x0b\xb3\xbb\xe7\xdf\x21\xba\xe6\x06\x63\x4d\x0d\xaa\xab\xbc\x0c\
+\xf4\x61\xc3\x08\xde\x5e\x5d\xb0\x80\xc2\x88\x88\x88\x18\xb2\x67\
+\x9a\x0d\xe8\x23\x89\xae\xb9\x41\x89\xf8\x77\x13\x83\xea\x38\x2f\
+\x03\xbd\x66\xcd\x7d\xe7\xab\x09\xe0\x1e\xdc\xb1\x43\x39\x45\x45\
+\x14\x47\x44\x44\xc4\x90\xd4\xa7\x03\x6a\x99\x0b\xe7\x7f\xe4\x78\
+\x4b\x6e\x71\xb3\x89\x81\xa5\x9b\xf7\xff\xd6\xcb\x80\x9f\x3b\x97\
+\xf0\xed\xd5\x36\x6d\x28\x90\x88\x88\x88\x21\xb9\xcb\xec\xee\xf9\
+\x15\x44\xd6\xdc\xe2\x24\x53\x83\x6b\xb9\x97\x01\xdf\xbd\x3b\xc1\
+\xdb\xab\x27\x9c\x40\x81\x44\x44\x44\x0c\xc9\x5e\x66\x03\x7a\x5f\
+\x22\x6b\x6e\x51\x43\xfc\x87\x89\xc1\xd5\xd1\xcb\x80\xd7\xc7\x36\
+\x2e\xbf\x9c\xf0\xed\xc5\xf3\xce\xa3\x40\x22\x22\x22\x86\xe0\x23\
+\x09\xa3\xbd\xcf\xf7\x88\xf9\x44\xd6\xdc\xe3\x87\xa6\xbe\x01\xde\
+\xe3\x65\xe0\x4f\x9e\x4c\xf8\xf6\xf2\x60\x11\xe7\xd0\x11\x11\x11\
+\x43\x71\x9a\xd9\xdd\xf3\x8d\x44\xd5\xdc\x64\xa2\xa9\x41\xf6\x2d\
+\x2f\x03\xff\xb0\xc3\x08\xe0\x5e\xed\xd4\x89\x42\x89\x88\x88\x68\
+\xd0\x37\xc4\x9a\x66\x03\x7a\x77\xa2\x2a\xc7\x5c\x02\xb5\xb6\xf8\
+\x8e\x97\x09\xb0\x68\x11\xe1\xdb\x8b\x93\x26\x51\x2c\x11\x11\x11\
+\x0d\xba\xce\x6c\x38\xff\x1d\x31\x35\xb7\xb9\xc9\xd4\x60\xdb\xee\
+\x65\x02\xf4\xea\x45\xf8\xf6\xe2\x9a\x35\x14\x4b\x44\x44\x44\x43\
+\x26\xc5\xd6\x66\x03\xfa\x02\x22\x6a\x6e\x73\x82\xa9\xc1\x76\xb4\
+\x97\x09\x50\x58\xa8\x52\x9b\x36\x11\xc0\xbd\xd8\xa8\x11\x45\x13\
+\x11\x11\xd1\x80\x3f\x34\x1b\xce\x3f\x11\xeb\x13\x51\x73\x1b\xdd\
+\xfc\x3e\x65\xd5\x65\xd1\xf1\xe3\x09\xdf\x5e\x1c\x32\x84\xa2\x89\
+\x88\x88\x68\xc0\x61\x66\x03\xfa\xcd\xc4\x53\xd0\x6c\x31\x35\xe8\
+\x4e\xf7\x32\x11\xf4\xce\x70\x65\x25\x01\xfc\x50\xce\x9b\x47\xd1\
+\x44\x44\x44\x0c\xd8\xfb\xcd\xb6\x56\xd4\x0e\x27\x9a\x82\xa6\xab\
+\xa9\x41\x57\x43\x7c\xcd\xcb\x84\x98\x3d\x9b\x00\x7e\xa8\x76\x8b\
+\x3b\x77\x2a\xa7\x7a\x75\x8a\x27\x22\x22\x62\x80\x9e\x6c\x36\x9c\
+\xbf\x97\xa0\xf7\x39\xec\xc7\x73\xa6\x06\xdf\x6a\x2f\x13\xa2\x55\
+\x2b\x42\xb8\x07\x93\xfa\x05\x56\x8a\x27\x22\x22\x62\x20\xfe\x46\
+\x2c\x34\x1b\xd0\x57\x12\x49\x61\x7f\xce\x37\x35\xf8\x8e\x10\xf7\
+\x78\x99\x18\x8b\x17\x13\xc2\x0f\xe5\x8c\x19\x14\x50\x44\x44\xc4\
+\x80\x9c\x69\x36\x9c\xff\x4b\x6c\x4c\x24\x85\xfd\x69\x24\x7e\x66\
+\x6a\x10\x5e\xe5\xa5\xa3\x8b\xde\x1d\x26\x84\x1f\xdc\x2d\x5b\x94\
+\x53\x58\x48\x11\x45\x44\x44\xcc\xb2\x2f\x8a\x25\x66\x03\xfa\xf7\
+\x89\xa3\x70\x20\x7e\x6a\x6a\x10\x76\xf7\x32\x39\x0a\x0a\x94\x73\
+\xd9\x65\x84\xf0\x43\x1d\x73\xe9\xd0\x81\x42\x8a\x88\x88\x98\x65\
+\x17\x9a\x0d\xe7\xda\x3e\x44\x51\x38\x10\xa3\x4c\x0e\xc4\x3b\xbc\
+\x4c\x90\xc1\x83\x09\xe1\x87\x72\xf2\x64\x0a\x29\x22\x22\x62\x16\
+\xd5\x0d\x2d\x6a\x99\x0d\xe7\x4f\x11\x43\xe1\x9b\xd0\xb7\x86\xdf\
+\x32\x35\x18\x8f\xf7\x30\x41\x52\xd5\xaa\xf1\x70\xd1\xa1\xba\xb9\
+\xac\x5f\xaf\x9c\xbc\x3c\x0a\x2a\x22\x22\x62\x74\x77\xcf\xa7\x12\
+\x43\xe1\x60\x5c\x64\x6a\x30\x16\x88\x8f\x79\x39\x8b\x7e\xdc\x71\
+\x04\xf1\x43\xd9\xae\x1d\x05\x15\x11\x11\x31\x0b\xbe\x2c\xd6\x34\
+\x1b\xce\xff\x20\x16\x13\x41\xe1\x60\x34\x48\xa4\x9f\x98\x35\x32\
+\x28\x4f\xf5\x32\x59\xd8\x45\x3f\xf4\x2e\x3a\xc7\x5c\x10\x11\x11\
+\xb3\xe2\x7c\xf3\xbb\xe7\x6b\x89\x9f\xe0\x85\x1b\x4d\x0d\xca\x22\
+\xf1\x49\x2f\x13\xe6\xf8\xe3\x09\xe2\x07\x53\x7f\x81\xd1\x97\x6a\
+\x29\xac\x88\x88\x88\x55\xea\xdc\x52\x6a\x36\x9c\xeb\x4d\xd1\x26\
+\x44\x4f\xf0\x42\x3f\x93\xdf\x1c\xa7\x7a\x99\x34\xa5\xa5\x2a\xb9\
+\x75\x2b\x41\xfc\x60\x76\xec\x48\x71\x45\x44\x44\xac\x82\x73\xcd\
+\xef\x9e\x5f\x4d\xec\x04\x3f\x3c\x6a\xdd\x2e\xfa\xa8\x51\x84\xf0\
+\x83\xb5\x5b\x9c\x3a\x95\xe2\x8a\x88\x88\x98\xa1\x4f\xb8\x99\xc4\
+\x60\x38\xd7\xef\xcf\xb4\x24\x72\x82\x1f\x4e\x35\xf9\x0d\x72\x86\
+\xd7\xb3\xe8\x1b\x37\x12\xc6\xbf\x49\xfd\x0b\x43\x51\x11\x45\x16\
+\x11\x11\x31\x03\x4f\x35\xbf\x7b\x7e\x2b\x71\x13\xfc\x52\x28\xee\
+\x36\x35\x48\x8b\xc5\xe7\xbc\x4c\x20\x3a\xba\x1c\xdc\xae\x5d\x29\
+\xb2\x88\x88\x88\x3e\xbd\xdf\xed\x2e\x67\x38\xa0\xf7\x20\x6e\x42\
+\x26\x9c\x6f\x72\xa0\x4e\xf6\x32\x89\xf4\xb3\xf6\x6b\xd6\x10\xc4\
+\xbf\xc9\xb3\xce\xa2\xd0\x22\x22\x22\xfa\xb4\xbf\xf9\x70\xfe\x0b\
+\x62\x26\x64\x4a\x6d\xf1\x43\x93\x67\xd1\x1f\xf7\x32\x91\xfa\xf6\
+\x25\x88\x7f\x53\xbb\xc5\x8a\x0a\x95\xac\x59\x93\x62\x8b\x88\x88\
+\xe8\xd1\x5b\xcd\x87\x73\xed\x71\xc4\x4c\xa8\x0a\x3b\x4c\x0e\xd8\
+\x09\x5e\x26\x93\x6e\x27\xb8\x62\x05\x81\xfc\x9b\x1c\x3c\x98\x82\
+\x8b\x88\x88\xe8\xc1\xa4\xd8\xd5\x7c\x38\x7f\x8a\x78\x09\x55\xa5\
+\x95\x7b\xcb\xd8\xc8\xa0\xcd\x77\xcf\x81\x1d\x6a\x42\xa5\x3a\x75\
+\x22\x88\x7f\x93\x17\x5f\x4c\xd1\x45\x44\x44\xf4\xe0\x15\xe1\xec\
+\x9e\x9f\x40\xbc\x84\x6c\x70\x83\xc9\x81\x3b\xd2\xe3\xa4\x4a\x9d\
+\x7b\x2e\x61\xfc\x9b\x3c\xec\x30\x0a\x2f\x22\x22\xe2\x41\x7c\x4b\
+\x6c\x62\x3e\x9c\x3f\x49\xac\x84\x6c\xd1\x41\xfc\xc2\xe4\x00\xbe\
+\xc3\xcb\xe4\x6a\xdc\x78\xdf\x99\x6b\x02\xf9\x01\x3c\xf9\x64\x8a\
+\x2f\x22\x22\xe2\x41\x3c\x3f\x9c\xdd\xf3\x51\xc4\x4a\xc8\x26\xdf\
+\x37\x39\x80\x3b\x89\x7b\xbd\x4c\xb0\x29\x53\x08\xe3\x07\xba\x2c\
+\xba\x61\x43\xfa\xac\x3e\x05\x18\x11\x11\xf1\x6b\x3e\x9a\x30\xfe\
+\x28\x91\xf6\x41\xe2\x24\x64\x9b\x8e\xa6\x77\xd1\xb7\x7b\x39\xe6\
+\x52\xbb\xb6\x72\xb6\x6d\x23\x94\x1f\xe8\x65\xd1\xa3\x8e\xa2\x08\
+\x23\x22\x22\x1e\xc0\x11\xe1\xec\x9e\x0f\x25\x4e\x42\x10\xdc\x61\
+\x72\x20\xeb\x73\x61\x6f\x7b\x99\x68\x43\x87\x12\xc8\x0f\xe4\x82\
+\x05\x14\x61\x44\x44\x44\x3b\xda\x2a\x3e\x4c\x8c\x84\xa0\x38\x4a\
+\xfc\xd2\xe4\x80\x3e\xdf\xcb\x64\xcb\xcf\x4f\x77\x2e\x21\x94\x7f\
+\xd5\xca\x4a\x95\x6c\xd4\x88\x62\x8c\x88\x88\xb8\xdf\xc5\xd0\xc3\
+\xcd\x87\xf3\x2f\xdc\x0c\x05\x10\x18\x77\x9b\x1c\xd4\x35\xc4\xe7\
+\xbc\x4c\xba\x56\xad\xf6\x05\x52\x82\xf9\xff\x3b\x8b\x3e\x7e\x3c\
+\x05\x19\x11\x11\xd1\xf5\x82\x70\x76\xcf\x6f\x23\x3e\x42\xd0\xf4\
+\x30\xbd\x8b\x3e\xc9\xeb\xc4\x9b\x3a\x95\x50\xfe\xff\xdd\xb4\x49\
+\x25\x0b\x0b\x29\xca\x88\x88\x98\xf3\x3e\x2c\x56\x33\x1f\xce\x3f\
+\x15\xdb\x12\x1f\xc1\x04\x37\x99\xfe\xf6\x79\x9b\x97\xc9\x57\xab\
+\x96\x72\xb6\x6c\x21\x94\xff\x7f\xbb\x77\xa7\x30\x23\x22\x62\x4e\
+\xab\x3b\xc3\x75\x0f\x67\xf7\x7c\x3b\xb1\x11\x4c\xd1\xd6\xfd\x46\
+\x68\x6c\x80\xb7\x13\x77\x7b\x99\x84\x83\x06\x11\xc8\xff\xbf\xe7\
+\x9d\x47\x71\x46\x44\xc4\x9c\x76\x63\x38\xe1\xfc\xcf\x62\x5d\x62\
+\x23\x98\xe4\x3b\xa6\x07\xfa\x65\x5e\x26\x61\x5e\x9e\x72\xe6\xcf\
+\x27\x94\xf3\xb2\x28\x22\x22\xe2\x3e\x5f\x10\xeb\x86\x13\xd0\x97\
+\x13\x17\xc1\x34\x2d\xc4\x7f\x99\x1c\xe8\xb5\xc4\xdf\x79\x99\x8c\
+\x8d\x1a\xa9\xd4\x8e\x1d\x84\xf2\xfd\x3d\xe3\x0c\x8a\x34\x22\x22\
+\xe6\xa4\x27\x86\x13\xce\xf7\x8a\xa5\xc4\x45\x08\x83\x5d\xa6\x07\
+\xfc\x29\x5e\x27\xe4\x88\x11\x84\xf2\xfd\xbb\xb9\xe8\x2f\x2c\xa5\
+\xa5\x14\x6a\x44\x44\xcc\x29\xaf\x0e\x27\x9c\x6b\x4f\x27\x26\x42\
+\x58\x34\x12\x3f\x30\x3d\xe8\x6f\xf6\x30\x21\x93\xba\x37\xfa\x92\
+\x25\x84\xf3\xfd\x43\xba\xfe\xd2\x42\xb1\x46\x44\xc4\x1c\xf1\x25\
+\xb1\x41\x38\xe1\xfc\x11\x31\x8f\x98\x08\x61\xb2\xd8\xf4\xc0\x3f\
+\x4c\x7c\xc3\xcb\xe4\x6c\xde\x5c\xa5\x2a\x2a\x08\xe7\xff\x76\xf5\
+\xea\xf4\x19\x7d\x8a\x36\x22\x22\xe6\x80\x23\xc2\x09\xe7\xba\x89\
+\xc6\x91\xc4\x43\x08\x9b\xea\xe2\x7b\xa6\x27\xc0\x5c\xaf\x13\x74\
+\xcc\x18\x82\xf9\xfe\xbb\xe8\x5d\xbb\x52\xb4\x11\x11\x31\xf6\x5e\
+\x1f\xde\xd1\x96\x2b\x89\x86\x60\x0b\x93\x4d\x4f\x80\x42\xf1\x5e\
+\xaf\x47\x5d\x2e\xba\x88\x70\xee\x9a\x5c\xb8\x90\xc2\x8d\x88\x88\
+\xb1\xf6\x45\xb1\x51\x78\x6d\x15\xeb\x13\x0b\xc1\x16\xf4\x39\xab\
+\x27\x4d\x4f\x84\x2e\xe2\x1e\x2f\x93\xb5\x71\x63\xe5\xd0\xd5\xe5\
+\xbf\xb6\x68\x41\x01\x47\x44\xc4\xd8\x3a\x2a\xbc\xdd\xf3\x79\x44\
+\x42\xb0\x8d\xfe\xe2\x97\xa6\x27\xc3\x52\xaf\x13\x76\xf8\x70\x82\
+\xf9\xbf\x8f\xb9\xcc\x9c\x49\x01\x47\x44\xc4\x58\xba\x2d\xbc\x70\
+\xfe\x94\x58\x40\x1c\x04\x1b\xb9\xd9\xf4\x84\x28\x12\x7f\xe5\xf1\
+\xa8\x4b\xea\xc2\x0b\x09\xe8\xda\x5d\xbb\x94\x53\xa7\x0e\x85\x1c\
+\x11\x11\x63\xe5\x13\x62\x59\x38\xe1\xfc\x73\xb1\x3b\x31\x10\x6c\
+\xa5\x5c\xfc\xab\xe9\x89\xd1\x46\x7c\xc7\xcb\xe4\xad\x5b\x57\x39\
+\x9b\x37\x13\xd0\xb5\x13\x26\x50\xcc\x11\x11\x31\x36\xee\x16\xbb\
+\x86\xb7\x7b\xbe\x99\x08\x08\xb6\xb3\x38\x8c\xc9\x31\xdf\xeb\x24\
+\x3e\xfa\x68\xc2\xb9\xbe\x2c\xba\x75\xab\x72\x4a\x4a\x28\xea\x88\
+\x88\x18\x0b\x2f\x0e\x2f\x9c\xeb\x17\x43\x6b\x12\xff\xc0\x76\xf4\
+\xf9\xab\xdf\x9a\x9e\x20\xf9\xe2\x8f\x3d\x4e\xe2\x7d\x67\xb0\x09\
+\xe9\xca\x19\x3a\x94\xa2\x8e\x88\x88\x91\xf7\x2e\xb7\xbb\x5b\x48\
+\x01\xfd\x78\xa2\x1f\x44\x85\xa1\x61\x4c\x92\xd6\xe2\xdb\x5e\x26\
+\x73\x71\xb1\x4a\xad\x5c\xc9\x65\xd1\x0d\x1b\x94\x53\x54\x44\x71\
+\x47\x44\xc4\xc8\xaa\x1f\x2e\x6c\x19\x5e\x38\xff\x19\x91\x0f\xa2\
+\xc6\x0f\xc3\x98\x2c\x67\x7b\x9d\xd4\xad\x5a\xf1\xca\xa8\x3e\xea\
+\xd2\xaf\x1f\x05\x1e\x11\x11\x23\xeb\xc4\xf0\xc2\xf9\x07\x62\x33\
+\xe2\x1e\x44\x8d\xa6\xe2\x87\x61\x1c\x75\xb9\xcd\xeb\xc4\x1e\x32\
+\x84\x80\xbe\x76\xad\x72\x0a\x0b\x29\xf2\x88\x88\x18\x39\x77\x86\
+\x17\xce\xb5\x67\x11\xf5\x20\xaa\x2c\x0a\x63\xd2\x34\x11\x5f\xf1\
+\x3a\xc1\xa7\x4d\xe3\x2c\x7a\xdf\xbe\x14\x7a\x44\x44\x8c\x94\x8f\
+\x8a\xa5\xe1\x85\xf3\xfb\x12\xe9\x47\x1a\x01\x22\x49\xa1\xf8\x4c\
+\x18\x93\x67\xb4\xd7\x49\x5e\x5c\xac\x9c\xe5\xcb\x73\xfb\x2c\xfa\
+\xea\xd5\xfb\xfa\xc4\x53\xf0\x11\x11\x31\x0a\xea\xfb\x66\x47\x86\
+\x17\xce\xff\x2e\xb6\x24\xe2\x41\xd4\xe9\x20\x7e\x12\xc6\x24\x5a\
+\xef\x75\xb2\x97\x97\x2b\x47\xb7\x1d\xcc\xe5\x5d\xf4\x63\x8e\xa1\
+\xe8\x23\x22\x62\x24\x1c\x1b\xee\xd1\x96\xd9\x44\x3b\x88\x0b\xeb\
+\xc2\x98\x44\x35\xc4\x87\xbd\x4e\xf8\x1e\x3d\x72\x3b\xa0\xeb\x5f\
+\x11\xf2\xf2\x28\xfc\x88\x88\x68\xb5\x97\x87\x1b\xce\x1f\x14\xf3\
+\x89\x75\x10\x17\xaa\x8b\xaf\x85\x31\x99\x3a\x78\x6d\xbd\xa8\x9d\
+\x34\x29\xb7\x43\x7a\xb7\x6e\x14\x7f\x44\x44\xb4\xd6\x7b\xc5\xe2\
+\x70\x8f\xb6\xb4\x26\xd2\x41\xdc\x18\x28\x7e\x11\xc6\xa4\x3a\xd5\
+\xeb\xe4\x2f\x28\x50\xce\xa2\x45\xb9\x1b\xd0\x97\x2e\x65\x17\x1d\
+\x11\x11\xad\xf4\x55\xb1\x59\xb8\xbb\xe7\xb3\x88\x72\x10\x57\xae\
+\x08\x6b\x62\xed\xf4\x5a\x04\xea\xd6\x55\xa9\x4d\x9b\x72\xf7\xc2\
+\x68\xa7\x4e\x2c\x04\x88\x88\x68\x95\x49\x71\x78\xb8\xe1\xfc\xa7\
+\x44\x38\x88\x33\x65\xe2\xdb\x61\x9d\x47\x7f\xd0\x6b\x31\x68\xdf\
+\x5e\x39\xb9\xfa\x88\xd1\xe2\xc5\x2c\x06\x88\x88\x68\x95\x8b\xc3\
+\x0d\xe7\xbf\x17\x1b\x12\xe1\x20\xee\x0c\x0e\xeb\xa8\x4b\x7b\x3f\
+\xe7\xd1\xc7\x8c\xc9\xdd\x5d\xf4\x36\x6d\x58\x10\x10\x11\xd1\x0a\
+\xbf\x9b\x48\x3f\x42\x18\x62\x40\x3f\x91\xe8\x06\xb9\xc2\xce\xb0\
+\x26\xda\x04\xaf\x45\x21\x2f\x4f\x25\xa7\x4f\xcf\xcd\x90\xbe\x60\
+\x01\x8b\x02\x22\x22\x86\xee\x43\x62\xcd\x70\xc3\xf9\xd5\x44\x36\
+\xc8\x25\x6a\x88\x6f\x84\x35\xe1\xd6\x78\x2d\x0e\xd5\xaa\x29\xe7\
+\xe2\x8b\x73\x73\x17\xbd\x65\x4b\x16\x07\x44\x44\x0c\xcd\xd7\xc4\
+\xd6\xe1\x86\xf3\xb7\xc4\x52\x22\x1b\xe4\x1a\xfd\xc3\x3a\xea\x52\
+\x24\xfe\xc4\x6b\x91\xa8\x55\x4b\x39\x97\x5d\x96\x7b\x21\xfd\x82\
+\x0b\x58\x20\x10\x11\x31\x14\xf7\x8a\xc7\x85\x1b\xce\xff\x25\xf6\
+\x24\xaa\x41\xae\xb2\x29\xac\xc9\xd7\x48\x7c\xde\x6b\xb1\x38\xfc\
+\x70\xe5\x6c\xdf\x4e\x47\x17\x44\x44\x44\x03\x2e\x08\x37\x9c\x6b\
+\x17\x13\xd1\x20\x97\xd1\xaf\x71\x3d\x10\xd6\x04\xec\x24\xbe\xe3\
+\xb5\x60\xe8\x47\x7c\x2a\x2b\x73\x2b\xa4\x2f\x5b\x46\x5f\x74\x44\
+\x44\x34\xea\xc6\xf0\xc3\xf9\x4f\xc4\x3c\x22\x1a\xe4\x3a\xfa\x55\
+\xae\x0f\xc3\x9a\x88\x33\x7c\x14\x8d\xd4\xc8\x91\xb9\x77\xd4\xa5\
+\x47\x0f\x16\x0c\x44\x44\x34\xa2\x3e\x7e\x5a\x2d\xdc\x70\x2e\xff\
+\x18\x89\x46\x44\x33\x80\x34\x67\x86\xf9\x6d\x79\x87\x9f\x90\x7e\
+\xc6\x19\xb9\x15\xd0\x57\xae\x4c\xbf\xb0\xca\xc2\x81\x88\x88\x01\
+\xfa\xb8\x58\x2f\xdc\x70\xae\xef\xc5\x0d\x23\x92\x01\x7c\x95\x9b\
+\xc2\x9a\x94\xfa\xdb\xfa\x4f\xbd\x16\x11\x1d\x56\xcf\x3f\x3f\xb7\
+\x42\xfa\x80\x01\x2c\x1e\x88\x88\x18\x98\xaf\x84\xdf\xb1\x45\xbb\
+\x9e\x28\x06\xf0\x75\xea\x88\xef\x85\x35\x31\xeb\x8b\x4f\x7a\x2d\
+\x26\xa5\xa5\x2a\xb5\x7a\x75\xee\x5c\x16\x5d\xbf\x5e\xa5\x74\xcb\
+\x49\x16\x11\x44\x44\xcc\xb2\xbb\xc5\xfe\xe1\x87\xf3\x87\xc4\x42\
+\xa2\x18\xc0\x81\x19\x20\x7e\x1e\xd6\x04\xd5\x2f\x8d\xbe\xee\xa3\
+\xb3\x4b\x72\xeb\xd6\xdc\xd9\x45\x1f\x3a\x94\x85\x04\x11\x11\xb3\
+\xee\xa9\xe1\x87\xf3\x94\xd8\x84\x08\x06\x70\x70\x96\x87\x39\x51\
+\xfb\xb8\xdf\xe6\x3d\x15\x96\x36\x6d\x94\xb3\x63\x47\x6e\x04\xf4\
+\xcb\x2f\x57\x4e\x8d\x1a\x2c\x26\x88\x88\x98\x35\x17\x85\x1f\xce\
+\x75\xbf\xf3\xde\x44\x2f\x80\x43\x53\x20\xfe\x3a\xcc\x09\x3b\xcb\
+\xcf\xa5\xd1\xae\x5d\x55\xaa\xa2\x22\x37\x42\xfa\x98\x31\x2c\x28\
+\x88\x88\x98\x15\xaf\x11\xf3\xc3\x0f\xe8\x17\x11\xbb\x00\xbc\xd3\
+\x50\xdc\x1b\xe6\xa4\x5d\xe3\xa7\xd0\xe8\x4b\x94\xb9\x10\xd0\xb7\
+\x6f\x57\xc9\x9a\x35\x59\x58\x10\x11\xb1\x4a\xde\x96\x48\xbf\xea\
+\x1d\x72\x38\xbf\x91\xb8\x05\xe0\x9f\xe3\x12\xe9\x96\x47\xa1\x4c\
+\x5c\x5d\x38\x6e\xf1\x53\x70\x4e\x38\x21\x37\x42\xfa\x29\xa7\xb0\
+\xb8\x20\x22\x62\xc6\x3e\x95\x48\xbf\xe6\x1d\x72\x38\x7f\x53\xac\
+\x4d\xd4\x02\xc8\x8c\xd5\x61\x4e\x60\x99\xb9\xea\x11\x3f\x85\x47\
+\x87\xd7\xb8\x07\xf4\x9d\x3b\x95\xd3\xa0\x01\x8b\x0c\x22\x22\xfa\
+\xf6\x35\xb1\x43\xf8\xe1\x5c\x3f\x8e\xd8\x89\x88\x05\x50\xb5\xf3\
+\xe8\xf7\x87\x39\x91\x5b\xba\xfd\x59\xbd\x14\x9e\x64\x7e\xbe\x72\
+\xe6\xce\x8d\x7f\x48\x9f\x3a\x95\x85\x06\x11\x11\x7d\xf9\x8e\xd8\
+\x3b\xfc\x70\xfe\xa5\x38\x9e\x78\x05\x50\x75\x1a\x24\x42\xec\x8f\
+\xae\xed\x27\xbe\xeb\xb5\x08\x15\x16\x2a\x67\xfe\xfc\x78\x07\xf4\
+\xca\x4a\xe5\xb4\x6a\xc5\x82\x83\x88\x88\x9e\xdc\x23\x0e\x0f\x3f\
+\x9c\x2b\xf7\x97\x79\x00\xc8\x12\x3d\xc4\x8f\xc3\x9c\xd4\x27\x88\
+\xef\x7b\x2d\x46\xd5\xab\x2b\xe7\xe2\x8b\xe3\x1d\xd2\x17\x2f\x56\
+\x4e\x5e\x1e\x0b\x0f\x22\x22\x1e\xfc\xd7\x65\x71\x92\x1d\xe1\xfc\
+\x0e\x31\x9f\x48\x05\x90\x5d\x26\x87\x3d\xb9\x4f\x76\x0b\x8d\xa7\
+\xa2\x54\xbb\xb6\x72\xd6\xac\x89\x75\x48\x4f\x76\xef\xce\xe2\x83\
+\x88\x88\x07\x75\x9a\x1d\xe1\xfc\x05\xb1\x8c\x28\x05\x10\x0c\x57\
+\x85\x3d\xc9\x17\xf9\xe9\x91\xde\xa4\x89\x4a\x6d\xda\x14\xdf\x90\
+\xbe\x6a\x55\xfa\x48\x0f\x0b\x10\x22\x22\x1e\xc0\xe5\x76\x84\xf3\
+\xbf\x88\xed\x89\x50\x00\xc1\x51\x28\x3e\x14\xf6\x64\x5f\xe5\xa7\
+\x40\x95\x97\xab\xd4\xc6\x8d\xf1\x0d\xe9\x23\x46\xb0\x08\x21\x22\
+\xe2\xd7\x5c\x63\x47\x38\xd7\xc7\x63\xfb\x13\x9f\x00\x82\xe7\x70\
+\xf1\x0f\x61\x4e\xf8\x02\xf1\x3a\x3f\x85\xea\xb0\xc3\x94\xb3\x79\
+\x73\x3c\x8f\xb9\x6c\xdd\xaa\x9c\x5a\xb5\x58\x8c\x10\x11\xf1\x3f\
+\x5e\x2f\x16\xda\x11\xd0\x67\x10\x9b\x00\xcc\x31\x44\xfc\x57\x98\
+\x93\xbe\x58\xfc\x89\x9f\x82\x75\xc4\x11\xca\xb9\xfc\xf2\x78\xee\
+\xa2\x4f\x9e\xcc\x82\x84\x88\x88\xfb\xfc\xb1\xbb\x46\x5a\x10\xce\
+\x37\x10\x97\x00\xcc\x33\x29\x91\xee\x67\x1a\xda\xe4\x2f\x13\xef\
+\xf5\x53\xb8\x5a\xb6\x54\xce\xb6\x6d\xf1\x0b\xe8\x15\x15\xca\x69\
+\xda\x94\x85\x09\x11\x31\xc7\xbd\x53\x2c\xb1\x23\x9c\x7f\x4f\xcc\
+\x23\x2a\x01\x84\xc3\xba\xb0\x8b\x40\x7d\xf1\x51\x3f\x05\xac\x7d\
+\x7b\x95\xda\xb1\x23\x7e\x21\x7d\xc1\x02\x16\x27\x44\xc4\x1c\xf6\
+\x21\xb1\xae\x1d\xe1\xfc\xd7\x62\x35\x22\x12\x40\x78\xe8\x97\x46\
+\xef\x0c\xbb\x18\xb4\x11\x5f\xf6\x53\xc8\x3a\x76\x54\xa9\x9d\x3b\
+\xe3\x17\xd2\x3b\x77\x66\x91\x42\x44\xcc\x41\x9f\x15\x9b\xd9\x11\
+\xce\xdf\x13\x1b\x13\x8f\x00\xc2\xa7\x44\xfc\x4d\xd8\x45\xa1\xab\
+\xf8\x86\x9f\x82\xd6\xad\x9b\x72\x76\xed\x8a\x55\x40\x4f\xad\x58\
+\xa1\x9c\x82\x02\x16\x2b\x44\xc4\x1c\x52\x16\x60\x75\x18\xed\x14\
+\x01\xe0\x00\x34\x17\x7f\x1f\x76\x71\x38\x2e\x91\x7e\xce\xd8\x73\
+\x61\x3b\xfa\x68\x95\xd2\xe7\xb7\xe3\xb4\x8b\x3e\x78\x30\x0b\x16\
+\x22\x62\x8e\xf8\x82\xd8\xd6\x8e\x70\xfe\x99\x38\x8a\x38\x04\x60\
+\x1f\x47\x8b\xff\x08\xbb\x48\x8c\xf2\x19\xd2\x53\x03\x07\x2a\xa7\
+\xb2\x32\x3e\x01\x5d\xf7\x7c\x2f\x29\x61\xe1\x42\x44\x8c\xb9\xcf\
+\x8b\xad\xec\x08\xe7\xb4\x53\x04\xb0\x9c\x09\xe2\x17\x61\x17\x8a\
+\x13\xc5\xf7\xfd\x14\xba\x63\x8e\x49\x77\x42\x89\xcb\x51\x97\xd3\
+\x4e\x63\xf1\x42\x44\x8c\xb1\x2f\x89\x1d\xed\x09\xe7\xb4\x53\x04\
+\x88\x00\xcb\x6d\x28\x18\xa7\x8a\x7b\xfd\x14\xbc\x1e\x3d\xe2\x73\
+\xdc\x45\xff\x22\xd0\xa2\x05\x8b\x18\x22\x62\x0c\x7d\x45\x3c\xd2\
+\x9e\x70\xfe\xc3\x04\xed\x14\x01\x22\x81\x9e\xa8\xb7\xda\x50\x38\
+\xe6\xf9\x2d\x7c\x71\x0a\xe9\x4b\x96\x28\x27\x2f\x8f\xc5\x0c\x11\
+\x31\x46\xbe\x29\xf6\xb4\x27\x9c\x3f\x25\x96\x11\x7b\x00\xa2\x43\
+\x75\xf1\x71\x1b\x0a\xc8\x1c\x9f\xc5\x2f\xd9\xbd\x7b\x7c\x42\xfa\
+\x80\x01\x2c\x68\x88\x88\x31\x51\x77\x2a\xeb\x61\x4f\x38\x7f\x5e\
+\xac\x4d\xdc\x01\x88\x1e\x4d\xc5\x77\x6d\x28\x24\xcb\xfd\x16\xc2\
+\xa3\x8f\x8e\x47\x0b\xc6\xcd\x9b\x55\xb2\xac\x8c\x85\x0d\x11\x31\
+\xe2\xca\x62\xaa\x06\xd9\x13\xce\xdf\x17\x9b\x11\x73\x00\xa2\x4b\
+\x2b\x31\x65\x43\x41\xb9\xc4\xef\x4e\xfa\x51\x47\xc5\x23\xa4\x9f\
+\x71\x06\x8b\x1b\x22\x62\x84\x7d\x47\x1c\x68\x4f\x38\xd7\x6b\x7a\
+\x6b\xe2\x0d\x40\xf4\xe9\x22\xfe\x35\xec\xa2\x92\x27\xae\xf7\x5b\
+\x18\x3b\x77\x8e\xfe\x8b\xa3\xfa\xc2\x68\xcb\x96\x2c\x72\x88\x88\
+\x11\xdd\x39\x1f\x6c\x4f\x38\xd7\x6b\x79\x57\x62\x0d\x40\x7c\x38\
+\x5e\xfc\x34\xec\xe2\x52\x20\x5e\xe1\xb7\x40\x76\xea\xa4\x9c\x1d\
+\x3b\xa2\x1d\xd2\x97\x2e\x55\x4e\x7e\x3e\x8b\x1d\x22\x62\x84\xd4\
+\x6f\x7a\x8c\xb5\x27\x9c\xff\x4b\x1c\x41\x9c\x01\x88\x1f\xa7\x26\
+\x2c\xe8\x91\x9e\x9f\x41\x48\x4f\xc5\x21\xa4\xf3\xc2\x28\x22\x62\
+\xa4\x76\xce\x8f\xb5\x27\x9c\xeb\x57\x42\xc7\x12\x63\x00\xe2\xcb\
+\x45\x36\x14\x9b\x22\xf1\x1a\xbf\x21\xbd\x6b\xd7\x68\x1f\x77\xd9\
+\xbc\x59\x39\x5c\x18\x45\x44\xb4\xde\xdd\x89\xf4\xab\xd8\x09\x7b\
+\x3c\x87\xf8\x02\x10\x7f\x36\xd8\x50\x70\xf4\x71\x97\xed\x7e\x43\
+\x7a\x9b\x36\xca\xd9\xb2\x25\xba\x21\xfd\xcc\x33\x59\xfc\x10\x11\
+\x2d\xef\x73\xde\xd7\xae\x70\xbe\x94\xd8\x02\x90\x1b\xe8\x87\x8c\
+\xae\xb5\xa1\xf0\xe8\x8b\xa3\x1b\xfc\x16\xd0\x23\x8e\x50\xa9\x4d\
+\x9b\xa2\x7b\x61\xb4\x6d\x5b\x16\x41\x44\x44\x4b\xc3\x79\x1f\xbb\
+\xc2\xf9\x16\x22\x0b\x40\x6e\x51\x20\xde\x6e\x4b\x48\xf7\xdd\xdd\
+\xa5\x71\x63\xe5\xac\x5b\x17\xcd\x90\xbe\x7c\xb9\x72\x0a\x0a\x58\
+\x0c\x11\x11\x2d\x7b\x84\xa8\x97\x5d\xe1\xfc\x3a\x77\x43\x0d\x00\
+\x72\x8c\x9a\xe2\x33\x36\x14\xa2\xfc\x0c\x8e\xbb\x38\xe5\xe5\xd1\
+\x0d\xe9\x43\x87\xb2\x20\x22\x22\x5a\xe2\x5b\x62\x7f\xbb\xc2\xf9\
+\xbd\x62\x35\x62\x0a\x40\xee\x52\x5f\x7c\xc5\x96\x9d\xf4\xb5\x7e\
+\xcf\xa4\xd7\xae\xad\x92\x97\x5c\x12\xb9\x80\x9e\xd2\x1d\x69\x1a\
+\x36\x64\x61\x44\x44\x0c\x59\x59\x00\x55\x57\xbb\xc2\xf9\xcf\x09\
+\xe7\x00\xa0\xd1\xaf\x8d\x3a\xb6\x84\xf4\x4d\x7e\x0b\x6c\x69\xa9\
+\x72\x2e\xbc\x30\x7a\xbb\xe8\xe7\x9f\xaf\x9c\xbc\x3c\x16\x48\x44\
+\xc4\x90\x7c\x5d\xec\x69\x57\x38\x7f\x4c\x2c\x23\x96\x00\xc0\xbf\
+\x69\x23\x26\x6d\x29\x52\x4b\xfd\x16\xda\x92\x12\xe5\x2c\x5a\x14\
+\xbd\x9d\xf4\x3e\x7d\x58\x24\x11\x11\x43\xf0\x25\xb1\x93\x5d\xe1\
+\xfc\x21\xb1\x06\x71\x04\x00\xfe\x3f\x47\x89\x7f\x89\xec\x71\x97\
+\x6a\xd5\x94\x73\xee\xb9\xd1\xeb\x8d\x5e\xb3\x26\x8b\x25\x22\xa2\
+\x41\x5f\x15\xbb\xd9\x15\xce\x9f\x17\xeb\x12\x43\x00\xe0\x9b\xe8\
+\x25\x7e\x60\x4b\x48\x5f\x95\x49\x48\x9f\x37\x2f\x52\x21\x3d\x39\
+\x75\x2a\x0b\x26\x22\xa2\xc1\x9d\x73\xcb\xce\x9c\xbf\x28\x36\x20\
+\x7e\x00\xc0\xa1\x18\x28\x7e\x64\x4b\xf1\x5a\xee\xb7\x00\xe7\xe7\
+\x2b\xe7\xf4\xd3\xa3\xb5\x93\xde\xa5\x0b\x0b\x27\x22\x62\xc0\x3e\
+\x2f\xb6\xb3\x2b\x9c\xbf\x2a\x96\x13\x3b\x00\xc0\x2b\xfd\xc4\xbf\
+\xdb\x52\xc4\x66\x88\x49\x3f\x85\x58\x5f\xbe\x1c\x3d\x3a\x3a\xbb\
+\xe8\x6b\xd7\x2a\xa7\xb8\x98\x05\x14\x11\x31\x20\x1f\x11\x0f\xb3\
+\x2b\x9c\xbf\x24\x36\x24\x6e\x00\x80\x5f\x8e\x13\x3f\xb6\xa5\x98\
+\x4d\x11\xf7\xfa\x2d\xca\x43\x86\xa4\x5f\xef\x8c\x42\x50\x3f\xf9\
+\x64\x16\x51\x44\xc4\x00\xfc\x95\xd8\xc0\xae\x70\xfe\x0a\x3b\xe7\
+\x00\x50\x15\x46\x89\x9f\xd8\x52\xd4\x4e\x12\x77\xfb\x2d\xce\xbd\
+\x7a\x29\x67\xd7\x2e\xfb\x03\xba\xfe\x22\xd1\xb2\x25\x8b\x29\x22\
+\x62\x16\xbd\x53\xac\x65\x57\x38\x7f\x5b\x3c\x9c\x78\x01\x00\x55\
+\x65\x82\xf8\x99\x2d\xc5\x6d\xb8\xf8\xae\xdf\x22\xdd\xb9\xb3\x72\
+\xb6\x6f\xb7\x3f\xa4\xeb\x47\x97\x0a\x0a\x58\x54\x11\x11\xb3\xe0\
+\x4d\x62\x0d\xbb\xc2\xb9\x2c\x5f\x89\x66\xc4\x0a\x00\xc8\x16\x73\
+\xc4\x2f\x6d\x29\x72\x23\xc4\xf7\xfc\x16\xeb\x16\x2d\xd2\x6d\x0d\
+\x6d\x0f\xe9\x23\x46\xb0\xb0\x22\x22\x56\xd1\x1f\x88\x25\x76\x85\
+\xf3\x3f\x88\x1d\x89\x13\x00\x90\x6d\xce\xb3\xa8\xd0\xa9\x81\xe2\
+\x5b\x7e\x8b\x76\x93\x26\xca\x59\xb7\xce\xee\xc7\x8b\x76\xee\x54\
+\x4e\x79\x39\x0b\x2c\x22\x62\x86\x5e\x23\x16\xd9\x15\xce\xff\x57\
+\xec\x4e\x8c\x00\x80\xa0\xb8\xd8\xa6\x90\xae\x9f\x68\x7e\xcd\x67\
+\xe1\x4e\x36\x6a\xa4\x9c\x35\x6b\xec\xde\x45\xd7\x0f\x2e\xe9\x4e\
+\x34\x2c\xb4\x88\x88\xbe\xdc\x2e\x16\xd8\x15\xce\xff\x28\x76\x23\
+\x3e\x00\x40\xd0\x5c\x68\x53\x48\xef\xe2\x3e\x3c\xe1\xeb\x41\xa3\
+\x3a\x75\x54\x52\x9f\xf7\xb6\xb9\xf5\x62\xbf\x7e\x2c\xb6\x88\x88\
+\x3e\xd4\x2f\x50\xe7\xd9\x15\xce\x7f\x2f\x76\x26\x36\x00\x80\x29\
+\x16\x26\x2c\x3a\x93\xde\xce\x7d\x80\xc2\x57\x31\x2f\x2e\x56\xa9\
+\x73\xce\xb1\x37\xa4\x6f\xdf\xae\x92\x0d\x1a\xb0\xe8\x22\x22\x7a\
+\xf0\x42\xbb\x82\xb9\x56\xfe\xb1\x38\x73\x0e\x00\xe6\x99\x25\x7e\
+\x61\x4b\x31\xd4\x0f\x50\x3c\xe6\xb7\xa8\x17\x16\xaa\xe4\xf4\xe9\
+\xf6\x86\xf4\xf3\xce\xe3\xa8\x0b\x22\xe2\x41\xdc\x23\x9e\x6a\x5f\
+\x38\xd7\xad\x14\x9b\x13\x13\x00\x20\x2c\xe6\xd9\xb4\x93\xde\x44\
+\x7c\xd8\x6f\x81\xd7\x01\xf8\xa4\x93\xec\xbd\x34\x3a\x70\x20\x8b\
+\x30\x22\xe2\x01\xd4\xef\x62\x9c\x6c\x5f\x38\x97\xef\x0c\x89\x36\
+\xc4\x03\x00\x08\x9b\xc9\x09\x8b\xfa\xa4\xeb\x07\x29\x7e\x92\x49\
+\xb1\x1f\x3a\xd4\xce\x57\x47\x75\xff\x76\x8e\xba\x20\x22\x7e\xc5\
+\xd7\xc5\xfe\xf6\x85\xf3\x37\xc5\x23\x88\x05\x00\x60\x0b\xa7\xda\
+\x14\xd2\xab\x89\xd7\x66\x52\xf4\x7b\xf6\x54\x8e\x6e\x73\x68\x5b\
+\x48\x5f\xb0\x80\xa3\x2e\x88\x88\xae\x2f\x8a\xdd\xec\x0b\xe7\x2f\
+\x8b\x8d\x89\x03\x00\x60\x1b\x93\x6c\x0a\xe9\xba\xcd\xd6\xd6\x4c\
+\x8a\x7f\xfb\xf6\xca\xd9\xba\xd5\xbe\x90\xde\xbf\x3f\x0b\x33\x22\
+\xe6\xbc\x4f\x8b\x6d\xec\x0b\xe7\xf2\x9d\x21\x51\x4e\x0c\x00\x00\
+\x5b\x99\x28\x7e\x6a\x4b\xd1\xd4\xed\xb6\x96\x67\xb2\x08\x34\x6d\
+\x6a\xdf\x83\x46\xf2\xa5\x21\x55\xaf\x1e\x0b\x34\x22\xe6\xac\xf7\
+\x8b\xe5\xf6\x85\xf3\x17\xc4\x46\x2c\xff\x00\x60\x3b\x27\xdb\x14\
+\xd2\xb5\xb3\xf4\x03\x45\x7e\x17\x83\xfa\xf5\x95\xb3\x62\x05\x47\
+\x5d\x10\x11\x2d\xf0\x2e\xb1\x8e\x7d\xe1\xfc\xb7\x62\x43\x96\x7d\
+\x00\x88\x0a\x56\x9d\x49\xd7\x4e\x17\xf7\xfa\x5d\x14\x4a\x4b\x95\
+\xb3\x68\x91\x5d\x21\x9d\x07\x8c\x10\x31\xc7\xbc\xdd\x6d\x00\x60\
+\x59\x38\x7f\x5a\x6c\xc0\x72\x0f\x00\x1c\x77\xa9\xa2\x63\xdd\xb6\
+\x5c\xbe\x16\x87\x92\x92\xf4\xce\xb5\x2d\x01\x7d\xf3\x66\x95\xaa\
+\x5d\x9b\x45\x1b\x11\x73\xc2\x1b\xc4\xea\xf6\x85\xf3\x87\xc5\x5a\
+\x2c\xf3\x00\x10\x55\x4e\x12\x3f\xb1\xa9\xb0\x0e\x12\xdf\xf4\xbb\
+\x48\xe4\xe7\xab\xd4\x69\xa7\xd9\x13\xd2\xe7\xcf\xe7\xa8\x0b\x22\
+\xc6\xde\x1d\x62\xa1\x7d\xe1\xfc\x1e\xb1\x06\xcb\x3b\x00\x44\x9d\
+\xe1\xe2\x3f\x6c\x2a\xb0\x47\x89\x2f\x65\xf2\xa0\xd1\x98\x31\xf6\
+\x84\xf4\x5e\xbd\x58\xc0\x11\x31\xb6\xae\x72\x2f\xfa\x5b\x16\xce\
+\x6f\x17\x8b\x59\xd6\x01\x20\x2e\xf4\x17\xff\x6a\x53\xa1\x6d\xe3\
+\xb6\xeb\xf2\xbd\x70\xe8\x60\x6c\x43\xaf\x74\xfd\x80\x51\xc3\x86\
+\x2c\xe4\x88\x18\x2b\xf5\x85\xfe\x79\xf6\x05\x73\xed\x8d\x62\x21\
+\xcb\x39\x00\xc4\x8d\xa3\xc5\x3f\xda\x54\x70\x1b\x8a\xf7\x66\xda\
+\x2b\x7d\xcb\x96\xf0\x43\xba\xbe\xc0\x9a\x9f\xcf\xa2\x8e\x88\xb1\
+\x50\xdf\x11\x9a\x68\x67\x38\xff\xb6\x98\xcf\x32\x0e\x00\x71\xa5\
+\xa5\xf8\x96\x4d\x85\xb7\xc4\xbd\x84\xe4\x7b\x31\x69\xd2\x44\x25\
+\xd7\xae\x0d\x3f\xa4\x8f\x18\xc1\xc2\x8e\x88\x91\xf7\x35\xb1\x9f\
+\x9d\xe1\x7c\x09\x4b\x37\x00\xe4\x02\x4d\x12\xe9\x57\xd7\xac\x29\
+\xc0\xfa\xd5\xd1\x4d\x19\x2c\x28\xfb\xba\xa9\x2c\x5d\x1a\x6e\x40\
+\xdf\xb5\x4b\x39\xcd\x9b\xb3\xc0\x23\x62\x64\x7d\x46\x6c\x6f\x5f\
+\x30\xff\x52\x3c\x97\x25\x1b\x00\x72\x09\xfd\xea\xda\xf3\xb6\xed\
+\x94\x9c\x93\xc9\xe2\x52\x5c\xac\x9c\x79\xf3\x42\x0d\xe9\xa9\x4b\
+\x2f\x55\x4e\x51\x11\x0b\x3d\x22\x46\xce\x87\xc5\xc3\xed\x0b\xe7\
+\x5f\x88\x73\x58\xaa\x01\x20\x17\xa9\x23\x3e\x6a\x5b\x48\x3f\x55\
+\xdc\xe3\xf7\x52\x93\x3e\x07\x3e\x79\x72\xb8\x3b\xe9\x13\x27\xb2\
+\xd8\x23\x62\xa4\xfc\xa9\x58\xdb\xbe\x70\xae\xdf\xef\x98\xcc\x12\
+\x0d\x00\xb9\x8c\xee\x25\x7b\xaf\x6d\x21\x7d\x84\xf8\x76\x26\x6d\
+\x18\x47\x8f\x56\x4e\x65\x65\x38\x01\x5d\xff\xe7\x1e\x79\x24\x8b\
+\x3e\x22\x46\xc2\x6b\xc4\x6a\xf6\x85\xf3\x8f\xc5\x13\x59\x9a\x01\
+\x00\xd2\x21\xfd\x6e\xdb\x42\x7a\x7f\xf7\xd2\x92\xef\x85\xa7\x4f\
+\x9f\xf4\xb9\xf0\x30\x42\xfa\xba\x75\xca\x29\x2d\x65\xf1\x47\x44\
+\xab\xdd\x25\x16\xd9\x17\xce\x3f\x12\x47\xb3\x24\x03\x00\xfc\x97\
+\x6a\xe2\x8f\x6c\x0b\xe9\x1d\xc5\xe7\x33\x59\x80\x3a\x74\x50\xce\
+\xd6\xad\xe1\x84\xf4\x19\x33\x08\x00\x88\x68\xad\xcb\xed\x7c\x80\
+\xe8\x2f\x62\x3f\x96\x62\x00\x80\x03\x87\xf4\x9b\x6d\x0b\xe9\xfa\
+\xf2\xd2\x43\x99\x2c\x44\x4d\x9b\xa6\x77\xb4\xc3\x08\xe9\xc7\x1c\
+\x43\x10\x40\x44\xab\xdc\x2b\x7e\xcb\xce\x36\x8a\xf2\x8f\x96\xe8\
+\xcc\x12\x0c\x00\xf0\xcd\xe8\x87\x20\xae\xb0\xad\x80\xd7\x15\xef\
+\xcc\xa4\x0d\x63\x9d\x3a\xca\x59\xb6\xcc\x7c\x40\xdf\xb2\x45\xa5\
+\xea\xd5\x23\x14\x20\xa2\x15\xbe\x2b\x8e\xb1\x33\x9c\xbf\x26\x36\
+\x67\xe9\x05\x00\xf0\xc6\x4a\xdb\x0a\x79\x75\xf1\xbb\x99\x2c\x4e\
+\x25\x25\xca\x39\xff\x7c\xf3\x21\x7d\xc1\x82\xf4\xc5\x55\xc2\x01\
+\x22\x86\xe8\xab\x62\x6f\x3b\xc3\xf9\xd3\x62\x43\x96\x5b\x00\x00\
+\x7f\x4c\x15\x3f\xb3\xa9\xa0\xeb\x73\x93\x8b\x32\x59\xa4\x74\x8f\
+\xf2\xd9\xb3\xcd\xf7\x47\x1f\x3c\x98\x80\x80\x88\xa1\xf9\xa8\xd8\
+\xdc\xce\x70\xfe\xb3\x44\xba\x41\x01\x00\x00\x64\xc0\x18\xf1\x9f\
+\xb6\x15\xf7\x59\xee\x79\xca\x8c\xda\x30\x9a\x0c\xe8\x3b\x77\x2a\
+\xe7\x88\x23\x08\x0a\x88\x68\xdc\x3b\xdd\xe3\x81\x16\x86\xf3\x6b\
+\xc5\x02\x96\x57\x00\x80\xaa\x31\x48\xfc\x9b\x6d\x45\x7e\x54\x26\
+\xbd\xd2\xb5\x7d\xfb\xaa\x54\x45\x85\xd1\x57\x46\x53\xd5\xaa\x11\
+\x18\x10\xd1\x98\x37\x88\x35\xec\x0c\xe7\x9b\xc4\x3c\x96\x55\x00\
+\x80\xec\xd0\x29\x91\xbe\x69\x6f\x55\xb1\xef\x2e\xbe\x90\xc9\x02\
+\xd6\xb1\xa3\x4a\x1a\x6c\xc3\x98\xd2\xaf\x9c\x12\x1a\x10\xd1\x80\
+\x92\x80\x55\x81\x7d\xc1\xfc\x4b\xf1\x3c\x96\x52\x00\x80\xec\xd3\
+\x52\x7c\xc3\xb6\x90\xde\xdc\x3d\x67\xe9\x7b\x21\x6b\xd5\x4a\x39\
+\x9b\x37\x9b\x7b\x65\xb4\x53\x27\xc2\x03\x22\x06\xea\x39\x76\xee\
+\x9a\xeb\xbb\x4c\x67\xb2\x84\x02\x00\x04\x47\xb9\xf8\x9c\x6d\x0b\
+\x80\x3e\x67\x79\x47\x26\x0b\x5a\xfd\xfa\xca\x59\xb1\xc2\x4c\x48\
+\xbf\xfc\x72\x5a\x2f\x22\x62\x20\xee\x16\x4f\xb5\x33\x9c\xeb\x3b\
+\x4c\x63\x58\x3a\x01\x00\x82\xa7\x9e\xf8\x84\x6d\x0b\x41\x99\xf8\
+\x83\x4c\x16\xb7\xd2\x52\xe5\x5c\x70\x81\x99\x90\xae\xdb\x3d\xe6\
+\xe7\x13\x28\x10\x31\xab\x3d\xce\x4f\xb0\x37\x9c\x9f\xc8\x92\x09\
+\x00\x60\x8e\xd2\x44\xba\x4d\x96\x55\x0b\x42\xa1\xb8\x35\x83\x05\
+\x2e\x59\x58\xa8\x9c\x59\xb3\xcc\x84\xf4\xe1\xc3\x09\x15\x88\x98\
+\x15\x5f\x11\x7b\xd9\x19\xce\xff\x2c\xf6\x63\xa9\x04\x00\x30\x8f\
+\x6e\x93\x75\xb5\x85\x0b\x83\x5a\xa8\x43\xb7\xdf\xc5\x2e\x3f\x5f\
+\x25\x27\x4d\x0a\x3e\xa0\xef\xda\xa5\x9c\x16\x2d\x08\x17\x88\x58\
+\x25\x9f\x12\xdb\xda\x19\xce\x77\x8b\x1d\x59\x22\x01\x00\xc2\xc5\
+\xba\x57\x47\xb5\x93\xdc\x73\x99\xbe\x17\xbe\xa1\x43\xd3\x97\x3a\
+\x83\xec\xea\xb2\x7a\xb5\x4a\x55\xaf\x4e\xc8\x40\xc4\x8c\xfc\x95\
+\x58\x6e\x67\x38\x7f\x41\x3c\x8c\x65\x11\x00\xc0\x0e\xa6\x88\x9f\
+\xda\xb6\x58\xf4\x10\x5f\xca\x64\x01\x3c\xfa\x68\xe5\xec\xd8\x11\
+\xec\x4e\xfa\x94\x29\x04\x0d\x44\x8c\x53\x8f\xf3\x5f\x24\xd2\xc7\
+\x1f\x01\x00\xc0\x22\x86\x89\x1f\xd8\xb6\x68\xb4\x10\x1f\xcf\x64\
+\x21\x6c\xdf\x5e\x39\x5b\xb6\x04\x1b\xd2\x7b\xf4\x20\x70\x20\xa2\
+\x67\x37\xda\xd9\xe3\xfc\xdf\xaf\x83\x16\xb2\x0c\x02\x00\xd8\x49\
+\x97\x84\x85\x0f\x1a\x35\x12\xef\xc9\xe4\xf2\x68\xb3\x66\x2a\xb5\
+\x71\x63\x70\x01\x7d\xd3\x26\xe5\xd4\xae\x4d\xf0\x40\xc4\x83\xd7\
+\x22\x7b\x7b\x9c\x6b\x57\x25\x78\x1d\x14\x00\xc0\x7a\xf4\x83\x46\
+\xaf\xd9\xb6\x88\xd4\x70\x7f\x1a\xf6\xbd\x38\xea\x00\xbd\x6c\x59\
+\x70\xe7\xd1\x2f\xbc\x50\x39\x05\x05\x84\x10\x44\x8c\x5a\x8f\xf3\
+\x2f\xc4\x05\x2c\x79\x00\x00\xd1\x41\xf7\x4a\x7f\xcc\xb6\x05\x45\
+\xff\x34\xbc\x21\x93\x45\xb2\xa4\x24\xdd\xc3\x3c\xa8\x9d\xf4\xb1\
+\x63\x09\x22\x88\xf8\x35\xdf\x10\x07\xd9\x19\xce\x3f\x16\x27\xb0\
+\xd4\x01\x00\x44\x0f\x2b\x7b\xa5\x6b\x67\x89\x7b\xfd\x2e\x96\x85\
+\x85\x2a\x39\x7d\x7a\x30\x01\x5d\x77\x8d\xe9\xd8\x91\x40\x82\x88\
+\xff\xf1\x77\x62\x37\x3b\xc3\xf9\xdf\xc4\xa1\x2c\x71\x00\x00\xd1\
+\x45\xf7\x4a\xbf\xc6\xc6\x90\x3e\xc6\x7d\x81\xcf\xd7\xa2\x99\x97\
+\xa7\x9c\xd1\xa3\x83\x09\xe9\xfa\xac\x3b\xe7\xd1\x11\x51\x7c\x44\
+\x6c\x66\x67\x38\x7f\x5f\xec\xcc\xd2\x06\x00\x10\x7d\xf2\xc5\x6d\
+\x36\x86\xf4\x63\xc5\x37\x33\x59\x40\x87\x0c\x09\xa6\x57\xba\x3e\
+\x46\x93\x9f\x4f\x40\x41\xcc\x61\x7f\x69\x6f\x8f\xf3\x77\xc4\xf6\
+\x2c\x69\x00\x00\xf1\x62\x51\x22\x7d\xa9\xc8\xaa\x45\xa7\x8b\xf8\
+\x7c\x26\x0b\x69\xb7\x6e\x2a\x15\x44\xaf\xf4\xe3\x8f\x27\xa4\x20\
+\xe6\xa8\x37\x8b\x65\x76\x86\xf3\x67\xc5\xc6\x2c\x63\x00\x00\xf1\
+\x64\xac\xf8\x91\x6d\x8b\x4f\xb9\xbb\x6b\xe5\x77\x31\x4d\xb5\x6c\
+\x99\x6e\x95\x98\xed\xf3\xe8\xba\x07\x3b\x61\x05\x91\x1e\xe7\x76\
+\x78\xa7\x58\x83\xe5\x0b\x00\x20\xde\x0c\x14\xff\x6c\xdb\x22\x54\
+\x5b\xbc\x3d\x93\x85\xb5\x61\x43\xe5\xac\x5a\x95\xdd\x90\xbe\x6e\
+\x9d\x72\xca\xca\x08\x2d\x88\x39\xe2\x72\x31\xcf\xce\x70\xfe\x5d\
+\xb1\x88\x65\x0b\x00\x20\x37\xe8\x90\x48\x9f\x67\xb4\x6a\x31\xaa\
+\x26\x5e\x9b\xc9\x02\x5b\xab\x96\x72\x96\x2e\xcd\x6e\x48\x9f\x37\
+\x2f\x7d\x29\x95\xf0\x82\x18\xeb\x07\x88\xe6\xda\xfb\x00\xd1\xba\
+\x04\x0f\x10\x01\x00\xe4\x1c\xba\x57\xfa\xc3\xb6\x2d\x4a\x7a\x17\
+\xeb\x92\x4c\x16\xdb\xe2\xe2\x74\xa8\xce\x66\x48\x1f\x36\x8c\x10\
+\x83\x18\x53\xdf\x11\x47\xd9\x19\xcc\x3f\x15\xcf\x64\x89\x02\x00\
+\xc8\x5d\x8a\xc5\x9b\x6c\xdc\x3d\xca\xa4\x57\x7a\x52\x77\x60\x39\
+\xfd\xf4\xec\x05\xf4\x5d\xbb\x94\xa3\xcf\xb9\x13\x66\x10\x63\xe5\
+\x4b\x62\x0f\x3b\xc3\xf9\x07\xe2\x71\x2c\x4d\x00\x00\xa0\x7f\x42\
+\xdd\x68\x63\x48\x3f\xde\xdd\xe5\xf2\xdd\x2b\x7d\xc2\x84\xec\x85\
+\xf4\x95\x2b\x55\xaa\x7a\x75\x42\x0d\x62\x4c\x7c\x5a\x6c\x67\x67\
+\x38\xdf\x2b\x76\x65\x49\x02\x00\x80\xfd\x39\x2f\x61\x61\x1b\x46\
+\xbd\xcb\xf5\x62\x26\x0b\xf1\x71\xc7\x65\xaf\x57\xfa\xcc\x99\x04\
+\x1b\xc4\x18\x78\x9f\xbd\x3d\xce\x5f\x15\x5b\xb2\x0c\x01\x00\xc0\
+\x81\x18\x2f\xfe\xd3\xb6\xc5\xab\x85\xf8\x58\x86\xbd\xd2\x9d\x6c\
+\xf5\x4a\xe7\x3c\x3a\x62\xa4\xd5\x5d\xa2\x6a\xd9\x19\xce\x1f\x49\
+\xa4\xef\x04\x01\x00\x00\x7c\x23\x7d\xc4\x3f\xda\xb6\x88\x35\x14\
+\xef\xce\x64\x61\x6e\xdb\x56\x39\x5b\xb6\x54\x39\xa0\xa7\x2a\x2a\
+\x94\xd3\xba\x35\x41\x07\x31\x82\x5e\xe5\x76\x89\xb2\x30\x9c\xdf\
+\x9a\x48\xdf\x05\x02\x00\x00\x38\x24\xad\xc5\xd7\x6d\x5b\xcc\x6a\
+\x88\x37\x64\xf2\xa0\x51\xd3\xa6\xe9\xde\xe6\x59\xe8\x8f\x9e\xa4\
+\x3f\x3a\x62\xa4\x5c\x67\xef\x03\x44\x57\x88\x05\x2c\x37\x00\x00\
+\xe0\x87\xfa\xe2\xa3\xb6\x2d\x6a\x7a\xa1\xdd\x90\xc9\x42\x5d\xbf\
+\xbe\x72\x56\xac\xa8\x7a\x48\x5f\xb0\x40\x39\xba\x5b\x0c\xc1\x07\
+\xd1\xfa\x1e\xe7\xb3\xec\x0c\xe6\x5f\x26\xd2\x77\x7e\x00\x00\x00\
+\x32\xa2\xa6\x78\xaf\x6d\x0b\x9c\xee\x95\xbe\x24\x93\x45\xbb\xb4\
+\x54\x39\x8b\x16\x55\x3d\xa4\x9f\x70\x02\x01\x08\xd1\x62\xdf\x17\
+\xcf\xb4\x33\x9c\x7f\x2e\x9e\xc5\xd2\x02\x00\x00\x55\x45\x3f\x33\
+\x7d\xbd\x85\x0b\x9d\x9a\x22\xee\xf1\xbb\x78\x57\xab\x56\xf5\x07\
+\x8d\x74\x77\x98\x8e\x1d\x09\x42\x88\x3c\x40\xe4\xc7\x8f\xc4\xb1\
+\x2c\x29\x00\x00\x90\x4d\xac\x6c\xc3\x38\x40\x7c\x2d\x93\x07\x8d\
+\xce\x38\xa3\x6a\x97\x46\x37\x6d\x52\x4e\x9d\x3a\x04\x22\x44\x8b\
+\x7c\x41\xec\x66\x6f\x8f\xf3\x2e\x2c\x23\x00\x00\x10\x04\x27\x8b\
+\x1f\xdb\xb6\xf8\x75\x10\x9f\xc9\xe4\x41\xa3\xd1\xa3\xab\xb6\x93\
+\xbe\x78\xb1\x72\x0a\x0b\x09\x46\x88\x16\xa8\x5b\xb1\x36\xb7\xb7\
+\xc7\x79\x0b\x96\x0f\x00\x00\x08\x92\x7e\xe2\x9f\x6c\x5b\x04\xf5\
+\xe3\x23\xbf\xca\x64\x61\x1f\x35\xaa\x6a\x0f\x1a\x8d\x1d\x4b\x38\
+\x42\x0c\xd9\x7b\xdc\x56\xac\x16\x86\x73\x7a\x9c\x03\x00\x80\x31\
+\x8e\x14\xdf\xb3\x6d\x31\x2c\x13\x7f\x98\xc9\x02\xdf\xb3\xa7\x72\
+\x76\xed\xca\xfc\x3c\xfa\x51\x47\x11\x92\x10\x43\xf2\xfb\x6e\x0b\
+\x56\x0b\xc3\x39\x3d\xce\x01\x00\xc0\x38\x8d\xc5\x67\x6c\x5b\x14\
+\x8b\xc4\x8a\x4c\x16\xfa\xa3\x8f\x56\xa9\x9d\x3b\x33\x0b\xe9\x9b\
+\x37\x2b\xa7\x5e\x3d\xc2\x12\xa2\x61\xb7\x8a\x85\x76\x86\xf3\xca\
+\x04\x3d\xce\x01\x00\x20\x24\x4a\xc5\x9f\xd9\xb6\x38\xea\x36\x8c\
+\x8b\x32\x79\xd0\xa8\x4d\x9b\xcc\x5f\x1d\x5d\xb6\x4c\xa5\x74\x87\
+\x18\x42\x13\xa2\x11\x17\xb9\x73\xdd\xb2\xfa\xa3\x2f\xd2\xd3\xe3\
+\x1c\x00\x00\x42\x47\xef\x12\x7d\xdb\xc2\x1d\x2c\x35\x39\x83\x36\
+\x8c\xfa\xd5\xd1\xd4\xfa\xf5\x99\x85\xf4\xe9\xd3\x09\x4e\x88\x01\
+\xbb\x57\x9c\x69\xe7\xae\xf9\xa7\xe2\x54\x96\x04\x00\x00\xb0\x85\
+\x3c\x71\x9d\x8d\x21\x7d\x8c\xf8\x6e\x26\xaf\x8e\xae\x5a\x95\x59\
+\x48\x1f\x30\x80\x10\x85\x18\x90\xbb\xc5\x89\x76\x86\xf3\x0f\xc5\
+\x13\x58\x0a\x00\x00\xc0\x46\xce\x4e\xa4\x5f\xca\xb3\x6a\xf1\xec\
+\x25\xbe\xe2\x37\x0c\xd4\xaa\xb5\xef\xd8\x8a\xef\xfe\xe8\xfa\x1c\
+\x7b\xf3\xe6\x84\x29\xc4\x2c\xfb\xa6\x38\xd8\xce\x70\xfe\x7b\xb1\
+\x07\xe5\x1f\x00\x00\x6c\xe6\x38\xf1\x03\xdb\x16\xd1\x66\xe2\x23\
+\x7e\x43\x41\x49\x89\x72\x2e\xb8\xc0\x77\x48\x4f\xae\x5d\xab\x9c\
+\xb2\x32\x42\x15\x62\x96\xd4\xef\x1c\xb4\xb7\x33\x9c\xff\x4e\x6c\
+\x4a\xd9\x07\x00\x80\x28\xa0\x5f\xcc\xdb\x6b\xdb\x62\x5a\x47\xfc\
+\xa9\xdf\x33\xe9\xfa\xe2\xe7\xbc\x79\xfe\x8f\xba\x2c\x58\xa0\x1c\
+\xfd\x62\x29\xe1\x0a\xb1\x4a\xde\xef\xbe\x73\x60\x61\x38\xd7\x3d\
+\xce\xeb\x52\xee\x01\x00\x20\x4a\xb4\x15\xdf\xb2\x6d\x51\x2d\x75\
+\xfb\x26\xfb\x09\x08\x49\x1d\xb4\xa7\x4e\xf5\x1f\xd2\xf5\x4b\xa5\
+\x04\x2c\xc4\x8c\xbd\x57\x6c\x60\x67\x38\xbf\x47\x2c\xa3\xcc\x03\
+\x00\x40\x14\x69\x24\x3e\x65\xdb\xe2\xaa\xfb\x26\x5f\xe1\x37\x2c\
+\xe4\xe5\x29\x67\xc2\x04\xff\x8f\x18\x75\xea\x44\xd0\x42\xcc\xc0\
+\x1f\x8b\xb5\xec\x0c\xe7\xdf\x13\x8b\x28\xef\x00\x00\x10\x65\xf4\
+\x4b\x7a\x37\xd9\xb6\xc8\x66\xd4\x2b\x5d\x87\xf4\xf1\xe3\xfd\x5d\
+\x1a\xdd\xb4\x49\x39\x75\xeb\x12\xb8\x10\x7d\xf8\x6d\xf7\xd1\x31\
+\x0b\xc3\xf9\x12\x4a\x3a\x00\x00\xc4\x05\xdd\x86\x71\x93\x85\x8b\
+\xad\x9a\xe1\xf6\x55\xf6\x15\x20\x86\x0f\xe7\x11\x23\xc4\x80\x5c\
+\x69\xe7\x03\x44\x9f\x89\x33\x28\xe5\x00\x00\x10\x47\xf4\x0b\x7b\
+\x5f\xd8\x16\xd2\x8f\xcf\xa0\x57\x7a\x6a\xe0\xc0\xf4\x11\x16\xaf\
+\x21\x7d\xda\x34\xc2\x17\xe2\x21\x3c\xc7\xce\x5d\xf3\x7f\x8a\x63\
+\x29\xdf\x00\x00\x10\x67\x26\xb8\x0b\x9e\x55\x8b\x70\x3f\xf1\x35\
+\xbf\x81\x62\xd0\x20\x7f\x21\xbd\x77\x6f\x42\x18\xe2\x37\xbc\x0e\
+\x3a\xcd\xce\x70\xfe\x27\xb1\x37\x65\x1b\x00\x00\x72\x81\xbe\xee\
+\xc2\x67\xd5\x62\xdc\x41\x7c\xce\x6f\xb8\xe8\xd1\x43\x39\xbb\x76\
+\x79\x0b\xe8\xf2\xff\x2f\xd5\xa6\x0d\x81\x0c\x71\x3f\xf5\xaf\x57\
+\xa3\xec\x0c\xe7\xbb\xc5\x8e\x94\x6b\x00\x00\xc8\x25\x8e\x14\xdf\
+\xb3\x6d\x51\x3e\x42\x7c\xd4\x6f\xc8\xe8\xdc\x59\x39\x3b\x76\x78\
+\xbb\x34\xba\x61\x83\x4a\xd5\xa9\x43\x30\x43\x14\x5f\x17\xfb\xdb\
+\x19\xce\x9f\x17\x9b\x50\xa6\x01\x00\x20\x17\xd1\x0b\xe0\xb3\xb6\
+\x2d\xce\x75\xc5\xbb\xfc\x86\x8d\x76\xed\x94\xb3\x6d\x9b\xb7\x9d\
+\xf4\xc5\x8b\x55\xb2\xb0\x90\x80\x86\x39\xed\x8b\x62\x37\x3b\xc3\
+\xf9\x43\x62\x1d\xca\x33\x00\x00\xe4\x32\xfa\xb1\x8f\x5f\xd8\xb6\
+\x48\xd7\xc8\xe0\x41\xa3\x7d\xc7\x57\xb6\x6e\xf5\x16\xd2\x27\x4f\
+\x26\xa4\x61\xce\xfa\xb4\xd8\xc6\xce\x70\x7e\x4b\x22\xdd\x1a\x16\
+\x00\x00\x20\xe7\xd1\x0b\xe2\xcd\xb6\x2d\xd6\xd5\xc4\xff\xf1\x1b\
+\x3e\x9a\x35\x53\xce\xe6\xcd\xde\x42\xfa\x80\x01\x84\x35\xcc\x39\
+\x1f\x13\x9b\xd9\x19\xce\xaf\x13\x0b\x29\xc7\x00\x00\x00\xff\x45\
+\xf7\x4a\x5f\x65\xdb\xa2\xad\xfb\x31\x5f\xe2\x37\x84\x34\x69\xa2\
+\x9c\xf5\xeb\x3d\x5d\x1a\x75\xb8\x34\x8a\x39\xe4\x1d\x62\x6d\xfb\
+\x82\xf9\x97\x09\x1e\x20\x02\x00\x00\x38\x28\x56\xf6\x4a\x5f\x28\
+\x26\xfd\x84\x91\xf2\x72\xe5\xac\x5b\x77\xe8\x4b\xa3\x1b\x37\x2a\
+\x87\x4b\xa3\x98\x03\xfe\x58\xac\x69\x5f\x38\xff\x5c\x9c\x47\xd9\
+\x05\x00\x00\x38\x34\x27\x8b\x1f\xdb\x16\xd2\x27\x89\x7b\x7c\x86\
+\xf4\x94\x87\x9d\xf4\xe4\xc2\x85\xca\x29\x28\x20\xc4\x61\x6c\xd5\
+\xf7\x39\x4a\xec\x0b\xe7\x1f\xbb\xb5\x06\x00\x00\x00\x3c\xd2\x53\
+\xfc\xbd\x6d\x21\x7d\x80\xf8\x86\x9f\x70\x52\xaf\x9e\x72\x56\xaf\
+\x3e\xf4\x71\x97\x33\xcf\x24\xc8\x61\x2c\xdd\x2e\x16\xd8\x17\xce\
+\xff\xe8\xd6\x18\x00\x00\x00\xf0\x49\x4b\xf1\x35\xdb\x42\xfa\x51\
+\xe2\x4b\x7e\xba\xbb\x48\x48\x4f\x79\x09\xe9\x03\x07\x12\xe8\x30\
+\x56\xae\x76\xef\x71\x58\x36\x87\xdf\x14\x5b\x53\x5e\x01\x00\x00\
+\x32\xa7\x9e\xf8\x88\x6d\x21\xbd\xad\xf8\xac\x9f\xb0\x52\xb7\xae\
+\x72\x56\xad\x3a\xf4\xa5\xd1\xb6\x6d\x09\x76\x18\x0b\xcf\xb1\xb3\
+\x53\xcb\x73\x62\x63\xca\x2a\x00\x00\x40\xd5\xd1\x6d\x18\x6f\xb1\
+\x6d\xb1\x3f\xdc\xef\xab\xa3\xfa\x32\xe8\x21\x42\x3a\x97\x46\x31\
+\xea\x26\xed\x0d\xe7\xf7\x26\xd2\xef\x2e\x00\x00\x00\x40\x96\x28\
+\x10\x2b\x6d\x5b\xf4\x1b\x8a\xbf\xf4\x13\x60\x6a\xd5\x52\xce\xf2\
+\xe5\x07\xdf\x49\x5f\xba\x54\x39\x45\x45\x84\x3d\x8c\x9c\x7b\xc5\
+\x33\xed\x0c\xe7\x37\x89\xd5\x28\xa3\x00\x00\x00\xc1\xb0\xca\xb6\
+\xc5\xbf\x8e\xf8\x33\x3f\x3b\x8c\x35\x6b\x1e\x3a\xa4\x4f\x9b\x46\
+\xe0\xc3\x48\xf9\xbe\x38\xd9\xce\x70\x7e\xa5\xfb\x05\x1f\x00\x00\
+\x00\x02\x64\xaa\xf8\x2f\x9b\x42\x40\xa9\x78\x93\x9f\x40\x23\x21\
+\x3d\x79\xc9\x25\x07\x3f\xee\x32\x78\x30\xc1\x0f\x23\xe1\x6e\x71\
+\xac\x9d\xe1\x7c\x25\xe5\x12\x00\x00\xc0\x1c\x23\xc4\xbf\xdb\x14\
+\x06\x8a\xc4\xab\x7c\x86\x74\xe7\x60\x21\x9d\x4b\xa3\x18\x01\xdf\
+\x11\x87\xd9\x17\xcc\xf5\x63\x67\xe7\x50\x26\x01\x00\x00\xcc\x73\
+\x8c\xf8\x07\x9b\x82\x81\xee\xf7\xbc\xc9\xcf\x71\x97\xb2\x32\xe5\
+\x2c\x5b\x76\xf0\x4b\xa3\xba\x03\x0c\x41\x10\x2d\xf4\x75\xb1\xaf\
+\x7d\xe1\x5c\xff\xba\x36\x99\xf2\x08\x00\x00\x10\x1e\xcd\xc5\x57\
+\x2d\x0b\x08\xfb\xba\x58\x78\x0e\x3a\x35\x6a\xa8\xd4\x92\x25\x07\
+\xbd\x34\x9a\xaa\x56\x8d\x40\x88\x56\xf9\xbc\xd8\xce\xbe\x70\xfe\
+\x81\x38\x98\xb2\x08\x00\x00\x10\x3e\xba\xaf\xf1\x73\xb6\x85\xf4\
+\x39\x6e\xcb\x39\xcf\xc7\x5d\x0e\x76\x71\x74\xf2\x64\x42\x21\x5a\
+\x15\xce\xdb\xdb\x17\xce\xff\x2c\xf6\xa5\x1c\x02\x00\x00\xd8\x43\
+\x2d\xf1\x3e\xdb\x42\xfa\xa9\x6e\x77\x0b\x4f\xc1\xa7\xac\xec\xe0\
+\x17\x47\x87\x0c\x21\x1c\x62\xe8\x3e\x2d\xb6\xb0\x2f\x9c\xcb\x77\
+\xe1\x44\x67\xca\x20\x00\x00\x80\x7d\xe8\x56\x6a\xff\x63\x5b\x48\
+\x1f\x2e\xbe\x9b\x85\x9d\xf4\x54\x45\x85\x72\xda\xb5\x23\x24\x62\
+\x68\x3e\x28\x36\xb2\x2f\x9c\xff\x4e\x6c\x42\xf9\x03\x00\x00\xb0\
+\x97\xbc\x84\x85\xbd\xd2\xfb\x89\x6f\x7a\x0d\x42\xf5\xea\x29\x67\
+\xed\xda\x03\xef\xa2\xaf\x5f\xcf\x4b\xa3\x18\x8a\xbf\x76\x1f\xe6\
+\xb2\x6c\x6e\x3d\x26\xd6\xa5\xec\x01\x00\x00\x44\x83\xf9\x89\x74\
+\xab\x35\x6b\xc2\x44\x2f\xb7\xeb\x85\xa7\x40\xa4\x3b\xb7\xac\x59\
+\x73\xe0\x90\xae\xbb\xbe\x70\x69\x14\x0d\x7a\xbf\xd8\xc0\xbe\x70\
+\x7e\xb7\x58\x4a\xa9\x03\x00\x00\x88\x16\x13\xc4\x8f\x6d\x0a\x15\
+\x5d\xc5\x97\x3c\x86\xa2\xd4\xc1\x76\xd2\xe7\xcc\x51\x4e\x5e\x1e\
+\xe1\x11\x03\xf7\xe7\x62\x6d\xfb\xc2\xf9\xcd\x62\x35\x4a\x1c\x00\
+\x00\x40\x34\x19\x9a\x48\xb7\x5e\xb3\x26\x5c\xb4\x73\xbb\x60\x78\
+\x0a\x48\x8d\x1a\xa9\x94\x3e\xd6\x72\xa0\x90\x3e\x7a\x34\x01\x12\
+\x03\xf5\x2e\xb1\x96\x7d\xe1\xfc\xdb\x89\xf4\x7d\x13\x00\x00\x00\
+\x88\x30\x7d\xc4\xbf\xd8\x14\x32\x3a\x88\xbf\xf5\x1a\x94\xca\xcb\
+\x55\x6a\xc3\x86\xaf\x07\xf4\xca\x4a\xe5\xf4\xe8\x41\x90\xc4\x40\
+\xbc\xdb\xce\x9d\xf3\xcb\x13\xe9\x7b\x26\x00\x00\x00\x10\x03\x3a\
+\x8a\x7b\x6c\x0a\x1b\x87\x8b\x8f\x7b\x0d\x4c\x4d\x9b\x2a\x67\xf3\
+\xe6\xaf\x77\x76\xd9\xb1\x43\x39\xcd\x9a\x11\x28\x31\xab\xde\x2a\
+\xd6\xb0\x2b\x98\x7f\x29\x9e\x4b\x19\x03\x00\x00\x88\x1f\xcd\xc4\
+\xd7\x6c\x0a\xe9\x8d\xdc\xee\x18\x9e\x82\xd3\xe1\x87\x1f\x30\xa4\
+\xef\x3b\xa7\xae\xdb\x33\x12\x2c\x31\x0b\xde\x2c\x96\xd8\x15\xce\
+\x3f\x13\xa7\x52\xbe\x00\x00\x00\xe2\x4b\x53\xf1\x05\x9b\x42\x7a\
+\xb9\xdb\x5f\xda\x53\x80\x6a\xd1\x42\x39\x5b\xb7\x7e\x3d\xa4\x2f\
+\x5a\xa4\x92\x85\x85\x04\x4c\x8c\xdb\xce\xb9\x0e\xe7\x67\x52\xb6\
+\x00\x00\x00\xe2\x4f\x99\xf8\x4b\x9b\x42\x7a\x2d\xf7\x42\x9e\xa7\
+\x20\xd5\xaa\x95\x72\xb6\x6d\xfb\x7a\x48\x9f\x3a\x95\x90\x89\x19\
+\x7b\x9d\x58\x64\x57\x38\xff\xa7\x78\x02\xe5\x0a\x00\x00\x20\x77\
+\x28\x16\x7f\x64\x53\x48\xd7\x3b\x97\xb7\x78\x0d\x54\x9d\x3b\x2b\
+\x67\xd7\xae\xaf\x87\xf4\xfe\xfd\x09\x9b\xe8\xdb\xff\xb1\x2f\x9c\
+\xeb\xce\x4b\x83\x28\x53\x00\x00\x00\xb9\x87\xee\xa3\x7c\x93\x4d\
+\x21\xbd\xd4\x3d\x66\xe0\x29\x58\x75\xeb\xa6\x52\x15\x15\x5f\xbd\
+\x34\xaa\xff\xfb\xf6\xed\x09\x9d\xe8\xd9\xeb\xed\x0b\xe7\x7f\x15\
+\xfb\x53\x9e\x00\x00\x00\x72\x17\xdd\xb2\x6d\xb3\x4d\x21\x5d\x87\
+\xa5\x6b\xbd\x06\xac\x01\x03\xbe\xbe\x8b\xae\x2f\x92\x36\x6c\x48\
+\xf8\xc4\x43\xfa\x6d\xb1\xc0\xae\x70\xbe\x37\x91\xee\xb8\x04\x00\
+\x00\x00\x90\x58\x92\x48\xb7\x72\xb3\x22\xa8\xe8\xd0\x74\xa5\xd7\
+\xa0\x35\x6a\xd4\xd7\xdb\x2f\xae\x58\xa1\x9c\x92\x12\x42\x28\x46\
+\x69\xe7\xfc\x2d\xb1\x05\xa5\x08\x00\x00\x00\xf6\x67\x5a\x22\xdd\
+\x35\xc2\x9a\x90\x7e\x85\xd7\xc0\x35\x61\xc2\xd7\x77\xd2\xcf\x3a\
+\x4b\x39\x79\x79\x84\x51\xfc\x9a\xdf\xb1\x2f\x9c\xeb\xce\x4a\x4d\
+\x28\x41\x00\x00\x00\x70\x20\x4e\x12\x3f\xb6\x29\xa4\x57\x7a\x09\
+\x5d\x3a\x88\x4f\x99\xf2\xf5\x90\x3e\x66\x0c\x81\x14\xbf\xe2\x77\
+\xed\x0b\xe7\x4f\x8a\xf5\x28\x3d\x00\x00\x00\x70\x30\x86\x8a\x1f\
+\xda\x14\xd2\x2b\xbc\x84\xaf\xfc\x7c\xe5\xcc\x9e\xfd\xd5\x80\x5e\
+\x59\xa9\x9c\x63\x8e\x21\x98\xe2\x3e\x6f\xb0\x2f\x9c\x3f\x22\xd6\
+\xa6\xe4\x00\x00\x00\x80\x17\x06\x8a\x7f\xb3\x25\xc8\x14\xb9\xad\
+\xf0\x0e\x19\xc2\x8a\x8a\x94\xb3\x70\xe1\x57\x43\xfa\x8e\x1d\xca\
+\x69\xde\x9c\x80\x9a\xe3\xfe\xc8\xbe\x17\x42\x1f\x12\x6b\x52\x6a\
+\x00\x00\x00\xc0\x0f\xba\x9b\x44\x32\x61\xd1\x4e\xfa\x4e\x2f\x61\
+\xac\x7a\x75\xe5\x2c\x5d\xfa\xd5\x4b\xa3\xeb\xd7\xab\x54\x9d\x3a\
+\x04\xd5\x1c\xf5\x46\xb1\x9a\x5d\xe1\xfc\x8e\x44\xfa\x2d\x02\x00\
+\x00\x00\x00\xdf\xb4\x13\xf7\xd8\x14\xd2\x77\x78\x08\x64\xc9\xb2\
+\x32\xe5\xe8\x4e\x2e\xfb\x87\xf4\xc5\x8b\x55\xb2\xb0\x90\xc0\x9a\
+\x63\xea\xbe\xfa\xd5\xed\x0a\xe7\xb7\x27\xd2\x6f\x10\x00\x00\x00\
+\x00\x64\x4c\x5b\x71\xb7\x2d\x01\xa7\xd0\xed\x5f\x7d\xc8\x70\x56\
+\xb7\xae\x72\x2e\xbb\xec\xab\xc7\x5d\xce\x3c\x93\xd0\x9a\x43\xde\
+\x29\x96\xd9\x15\xce\xe5\x1f\x89\x9d\x73\x00\x00\x00\xc8\x0e\xcd\
+\xc4\x37\x12\x89\x88\xb5\x60\x6c\xd2\x24\xfd\x70\xd1\xfe\x21\xfd\
+\xd8\x63\x09\xaf\x39\xe0\x5d\x62\x4d\xbb\xc2\xf9\x8f\x13\xec\x9c\
+\x03\x00\x00\x40\x96\xd1\xad\xe0\x7e\x63\x4b\xe0\xc9\x13\xd7\x7b\
+\x09\x6b\xed\xda\xa9\xd4\xce\x9d\xff\x0d\xe8\xbb\x76\xed\xfb\x7f\
+\x23\xc4\x72\x21\xd4\xa0\xd7\x8b\x05\x94\x10\x00\x00\x00\x08\x82\
+\x3a\xe2\x63\x91\x0b\xe9\x5d\xba\x28\xa7\xa2\xe2\xbf\x21\xfd\xf2\
+\xcb\x55\xb2\x51\x23\xc2\x6c\x0c\xbd\x5d\xac\x61\x57\x38\xaf\x14\
+\xf3\x28\x1d\x00\x00\x00\x10\x24\xb5\x6d\x0a\xe9\xf9\x1e\x2f\x8e\
+\x3a\xc3\x86\x7d\xf5\xa8\x8b\xbe\x44\x5a\x52\x42\xa8\x8d\x91\xf7\
+\x8a\xb5\xed\x0a\xe7\xd7\x8a\xf9\x94\x0c\x00\x00\x00\x30\x41\xa9\
+\x78\x9f\x4d\x21\xdd\xd3\x8b\xa3\x13\x27\x7e\x35\xa4\x9f\x7b\x6e\
+\xfa\x81\x23\xc2\x6d\xe4\x7d\x40\xac\x6b\x57\x38\xbf\x32\xc1\xce\
+\x39\x00\x00\x00\x18\x46\x5f\x78\xbb\xcd\xa6\x90\xbe\xeb\x50\x41\
+\x2e\x2f\xef\xeb\xaf\x8d\x9e\x74\x12\x01\x37\xe2\x3e\x28\xd6\xb7\
+\x2b\x9c\xaf\xa1\x3c\x00\x00\x00\x40\x58\xe8\x8b\x6f\xdf\xb1\x25\
+\x18\xe9\xee\x2e\x57\x7a\x79\x6d\x74\xd1\xa2\xaf\x86\xf4\xbe\x7d\
+\x09\xba\x11\xf5\x49\xb1\xb1\x5d\xe1\x7c\x09\x65\x01\x00\x00\x00\
+\xc2\x46\xff\x8c\xbf\xcb\xa6\x90\x7e\xd5\xa1\x82\x5d\x69\xa9\x4a\
+\xad\x5c\xf9\xdf\x80\xbe\x63\x87\x72\x5a\xb4\x20\xf0\x46\xcc\xe7\
+\xc5\x16\x84\x73\x00\x00\x00\x80\x03\xa2\x2f\xc2\x5d\x61\x4b\x50\
+\x2a\x16\x6f\x39\x54\xc0\x6b\xd0\x40\x39\x1b\x37\xfe\xf7\xa5\xd1\
+\x0d\x1b\x94\x53\xa7\x0e\xc1\x37\x22\xbe\x26\x76\xb6\x2b\x9c\xaf\
+\xa6\x0c\x00\x00\x00\x80\x6d\xe8\x9d\xf4\x75\xb6\x04\x26\xdd\x07\
+\xfb\xc7\x87\x0a\x7a\xcd\x9b\xab\xff\x6b\xef\xfe\x63\xed\xae\xeb\
+\x3b\x8e\x7f\x6f\x7f\xd1\xd6\xda\x9f\x16\x1a\x1b\x68\x4b\xaf\xa6\
+\x19\xb8\x44\xaa\x2d\x6d\x88\x73\xcd\xba\x46\x94\x15\x9d\x54\xc6\
+\xa6\x80\xa3\xb9\x13\x7f\xc4\x94\x8b\xd8\xc9\xc0\x16\x2a\x6b\xb5\
+\x2b\xed\xed\x36\xdc\x32\xe6\xb6\x66\x2c\xe0\x64\xd9\x96\x31\x41\
+\x13\xc1\x58\x7f\x21\x6e\xc8\x48\x51\x41\x84\xde\x73\x8d\x1a\xa3\
+\x9b\x66\x2a\xb4\x5f\xdf\xdf\x9d\xe3\x4e\x5b\xee\xbd\xed\xed\xfd\
+\xf1\xf9\x9c\x73\x1e\x8f\xe4\xf5\x6f\xd3\x9c\xf3\x3d\xc9\xb3\xa7\
+\xdf\xf3\xf9\xd6\xf6\xec\x69\x7e\x93\xfe\xfe\xf7\x97\x03\xd3\xa6\
+\x09\xe0\xcc\xf7\xcd\xd8\xab\xf3\x8a\xf3\x9d\x3e\xfe\x00\x40\xce\
+\xae\xcf\x25\x9c\xa6\xc7\xee\x19\xe9\x19\xe9\x57\x5e\x29\x82\x33\
+\x8f\xf3\x57\xf9\x41\x28\x00\xc0\x88\xf5\x16\xad\xf4\x4d\xfa\xba\
+\x75\xc7\xff\x68\x74\xfd\x7a\x31\x9c\xe1\x9e\x8e\xbd\x26\xaf\x38\
+\xbf\xd5\x47\x1d\x00\x68\x25\x37\xe5\x12\x52\xd5\xc3\x6b\xee\x1f\
+\xc9\x19\xe9\xfb\xf7\x97\xb5\xf3\xcf\x17\xc5\x19\xed\x70\xec\xcd\
+\x79\xc5\x79\xf5\xc3\x68\xe7\x9c\x03\x00\x2d\x67\x4b\x2e\x41\x35\
+\x3b\x76\xdf\x30\x01\xd8\x5f\x3d\xb0\xe8\x1d\xef\x68\x46\xfa\xae\
+\x5d\x65\x6d\xe1\x42\x71\x9c\x49\x9c\x6f\xca\x2b\xce\x6f\xf3\xd1\
+\x06\x00\x5a\xd9\x7b\x63\x47\x73\x89\xf4\x4f\x9e\xec\x8c\xf4\xf7\
+\xbd\xaf\x19\xe9\xdb\xb7\x97\xb5\x59\xb3\x44\x72\xe2\x5d\x9d\x57\
+\x9c\xff\xb1\x8f\x34\x00\xd0\x0e\xfe\x20\x97\x48\x5f\xd0\x78\x2c\
+\xfc\x90\x41\x38\x67\x4e\x59\xdb\xb1\xa3\x19\xe9\xef\x7e\x77\xfd\
+\xdb\x75\xa1\x9c\x64\x5b\xdc\xd6\x02\x00\x30\x6e\x7a\x72\x89\xf4\
+\x85\xb1\x07\x87\x89\xc2\x81\xee\xee\xb2\xb6\x77\x6f\x33\xd2\x37\
+\x6e\x14\xcb\x09\x76\x63\x5e\x71\xde\x27\xce\x01\x80\x76\x74\x5d\
+\x2e\xc1\x75\x4e\xec\xcb\xc3\x05\xe2\xaa\x55\xc7\x9f\xec\xb2\x66\
+\x8d\x68\x9e\xc0\xed\x8f\x4d\xca\x27\xce\x3f\x56\xd4\x1f\xc6\x05\
+\x00\xd0\x96\x36\xc7\x8e\xe4\x10\x5e\x4b\x1a\x8f\x8b\x1f\x32\x14\
+\x2f\xbd\xb4\x19\xe8\xb7\xdf\x5e\xd6\x96\x2e\x15\xcf\x13\xb0\x3b\
+\x63\x93\xf3\x89\xf3\x3f\x2b\x7c\x73\x0e\x00\x74\x80\x6b\x72\x89\
+\xf4\x15\xb1\xc7\x87\x8a\xc5\xae\xae\xb2\xbf\xa7\xa7\x19\xe9\x1f\
+\xfa\x50\xfd\x1e\x75\x11\x3d\x6e\xfb\xe7\xc6\x03\xa6\x32\x89\xf3\
+\x3b\xc4\x39\x00\xd0\x49\x7e\x3f\x97\x48\x5f\xd9\x78\x42\xe5\xa0\
+\xf7\xa3\x4f\x9f\x5e\xd6\x3e\xf0\x81\x66\xa4\x5f\x77\x5d\x59\x9b\
+\x32\x45\x4c\x8f\xc3\x1e\x8a\xcd\x73\x5b\x0b\x00\x40\x52\xef\x2c\
+\x32\xf9\xe1\xe8\xeb\x62\xcf\x0e\x15\x8f\x0b\x16\x94\x03\x3b\x77\
+\x36\x23\x7d\xd3\x26\x41\x3d\xc6\x7b\x34\xb6\x34\x9f\x38\xbf\x27\
+\x36\xc5\xc7\x13\x00\xe8\x54\x6f\x2f\x32\xf9\x26\xfd\x8d\x8d\x87\
+\xe2\x0c\x1a\x91\xcb\x97\x1f\x77\xb2\x4b\xff\xda\xb5\xc2\x7a\x8c\
+\x76\xa8\x71\xab\x51\x26\x71\x7e\x77\x6c\xb2\x8f\x25\x00\xd0\xe9\
+\xde\x55\x64\xf2\x4d\xfa\x55\xc3\xc5\x64\x75\x92\x4b\x23\xd0\x07\
+\xaa\x58\xf7\xa3\xd1\x51\xef\xe9\xd8\xda\x7c\xe2\xfc\xbe\xd8\x34\
+\x1f\x47\x00\x80\xba\xf7\x66\x12\x69\x65\xef\x30\x41\xd9\x5f\xdd\
+\xde\xe2\x47\xa3\x63\xb2\xea\x7f\x2b\x7e\x2b\x9f\x38\x7f\x28\x36\
+\xd3\xc7\x10\x00\xe0\x78\xd9\x9c\x93\xbe\x6d\xa8\x40\xaf\x9e\x2a\
+\xfa\x9e\xf7\x34\xbf\x49\xef\xed\xf5\xa3\xd1\xd3\xdc\x95\xf9\xc4\
+\xf9\xc3\xb1\x39\x3e\x7e\x00\x00\x83\xdb\x99\x43\xb4\x55\xe7\x70\
+\xff\xd5\x50\x71\x39\x73\x66\x59\xbb\xf9\xe6\x66\xa4\x5f\x7e\xb9\
+\xe0\x1e\xe1\xb6\xe7\x13\xe7\xdf\x8c\xbd\xd4\xc7\x0e\x00\x60\x78\
+\x3b\x72\x88\xb7\xa9\xb1\x03\x43\x45\xe6\xe2\xc5\xe5\x40\xf5\xf0\
+\xa2\x5f\xde\xee\x52\x3d\x79\x54\x78\x9f\xd2\xf6\xc4\xba\xf2\x88\
+\xf3\xa7\x62\x8b\x7d\xdc\x00\x00\x4e\x4d\x16\xdf\xa4\xcf\x88\xfd\
+\xd3\x50\xb1\xb9\x72\x65\x33\xd0\xf7\xed\x2b\x07\xba\xbb\x05\xf8\
+\x49\x76\xa0\xf1\x0f\x9f\x0c\xde\xdb\xf8\xeb\x14\xcb\x7d\xcc\x00\
+\x00\x4e\x5d\xf5\x04\xc7\x3f\xcd\x21\xd2\x67\xc7\x1e\x18\x2a\x3a\
+\x2f\xbb\xac\x79\xab\xcb\x6d\xb7\x95\x03\x73\xe7\x0a\xf1\x21\xf6\
+\x2f\x8d\x7f\xf0\x64\xf0\x9e\x7e\x3f\x76\xbe\x8f\x18\x00\xc0\xe9\
+\x45\xfa\x1d\x39\x44\xfa\x59\xb1\x2f\x0c\x16\x9e\x93\x27\x97\xb5\
+\x2d\x5b\x9a\xdf\xa4\xf7\xf6\x96\xfd\x7e\x34\xfa\x82\x7d\x36\x36\
+\x3f\x8f\x38\xff\xef\xd8\xab\x7d\xb4\x00\x00\x4e\x5f\xf5\xd0\x98\
+\xbb\x73\x88\xf4\x97\xc5\x1e\x1f\x2c\x40\xe7\xcf\x2f\x6b\xbb\x76\
+\x35\x23\xbd\xfa\x56\x5d\x94\xff\xff\x1e\x8b\x2d\xcf\x23\xce\x7f\
+\x1a\xfb\x4d\x1f\x29\x00\x80\xd1\x9b\x1a\xbb\x37\x87\x48\x5f\x1d\
+\xfb\xd6\x60\x21\xfa\xf2\x97\x97\xb5\xbe\xbe\x66\xa4\x5f\x78\xa1\
+\x38\x6f\x3c\x88\x68\x55\x1e\x71\xfe\x5c\xec\x8d\x3e\x4a\x00\x00\
+\x63\xa7\xfa\x26\xfd\x1f\x72\x88\xf4\xf5\xb1\x67\x07\x0b\xd2\x0d\
+\x1b\x9a\x81\x5e\x9d\xf0\x72\xf6\xd9\x1d\xff\x20\xa2\x37\xe4\x13\
+\xe7\x6f\xf2\x11\x02\x00\x18\x7b\xd3\x63\x0f\xe4\x10\xe9\xd7\x0e\
+\x16\xa5\x5d\x5d\x65\x6d\xf3\xe6\x66\xa4\x57\x67\xa5\xcf\x98\xd1\
+\xb1\x81\x7e\x43\x1e\x71\x7e\x34\x76\xad\x8f\x0e\x00\xc0\xf8\x99\
+\x51\xd4\x1f\xcb\x9e\x3c\xfe\x6e\x1e\x2c\x4c\x23\xc8\x07\xb6\x6d\
+\x6b\x46\x7a\x4f\x4f\x3d\xdc\x3b\x2c\xce\xf7\xe5\x73\xd6\xf9\x75\
+\x3e\x32\x00\x00\xe3\xaf\x7a\x2c\xfb\x23\xa9\xe3\x6f\x52\xec\x2f\
+\x86\x78\x88\x51\x6d\xcf\x9e\x66\xa4\xaf\x5b\xd7\x51\x71\xfe\xf1\
+\x7c\xce\x3a\xdf\xed\xa3\x02\x00\x30\x71\xce\x8c\x3d\x91\x3a\x02\
+\xcf\x18\xea\x41\x46\x17\x5d\xd4\x3c\x1f\x7d\xef\xde\xb2\xb6\x64\
+\x49\x47\xc4\xf9\xc1\xd8\xbc\x3c\xe2\xfc\x6f\x8b\xfa\x31\x9d\x00\
+\x00\x4c\xa0\x73\x8b\xfa\x13\x21\x93\xc6\xe0\xbc\xc6\x39\xdf\x2f\
+\x08\xd6\x2b\xae\x68\x7e\x8b\x7e\xeb\xad\x65\xed\x45\x2f\x6a\xeb\
+\x38\x3f\x14\xeb\xce\x23\xce\xef\x2f\xea\x27\xff\x00\x00\x90\xc0\
+\x2b\x62\x3f\x48\x1d\x85\xe7\xc4\xfe\xf3\x84\x60\xad\x1e\x58\x34\
+\x70\xc3\x0d\xcd\x6f\xd2\xab\x1f\x90\xb6\x69\x9c\x3f\x13\x7b\x4d\
+\x1e\x71\xfe\xd5\xd8\x6c\x1f\x0b\x00\x80\xb4\xd6\x15\xf5\x87\xd0\
+\x24\x8d\xc3\x55\x83\x9d\x91\xbe\x70\x61\x59\xfb\xc8\x47\x9a\xdf\
+\xa4\xaf\x5e\xdd\x96\x81\xbe\x39\x8f\x38\x3f\x1c\x3b\xc7\xc7\x01\
+\x00\x20\x0f\xaf\x8f\xfd\x3c\x75\x24\xfe\x46\xe3\xdb\xe4\xe3\x02\
+\xf6\xbc\xf3\xca\xda\xfe\xfd\xf5\x40\xaf\x7e\x3c\xba\x68\x51\x5b\
+\xc5\xf9\xf6\x3c\xe2\xfc\xbb\xb1\x6e\x1f\x03\x00\x80\xbc\x5c\x11\
+\x3b\x92\x3a\x16\x7f\xef\x64\xf7\xa3\x57\xb7\xbd\x4c\x99\xd2\x16\
+\x71\xfe\xb1\xc6\x69\x36\x89\x5f\xf3\x1f\xc7\x56\xb9\xfc\x01\x00\
+\xf2\x74\x6d\x91\xc1\x37\xba\x7f\x34\xc8\xfd\xe8\xb5\xad\x5b\x9b\
+\x91\xbe\x71\x63\xcb\xc7\xf9\xa7\x62\xb3\xf2\x78\x4a\xe8\x1b\x5c\
+\xf6\x00\x00\x79\xdb\x9e\x3a\xd0\xab\x87\xf4\xec\x3f\x31\x6a\xcf\
+\x3c\xb3\xec\xdf\xbd\xbb\x1e\xe8\x7d\x7d\x65\x6d\xe9\xd2\x96\x8d\
+\xf3\x47\x62\x8b\xf2\xb8\xb5\x65\xb3\xcb\x1d\x00\xa0\x35\xdc\x5e\
+\x64\x78\x46\x7a\xff\xda\xb5\xcd\x53\x5d\x6e\xba\xa9\xac\x4d\x9d\
+\xda\x72\x71\xfe\x64\xec\x57\xf3\x88\xf3\xed\x2e\x73\x00\x80\xd6\
+\x31\x39\xf6\x89\xd4\x11\xb9\x20\xf6\xf9\x13\x23\xfd\xaa\xab\x9a\
+\xb7\xba\x5c\x72\x49\xcb\x05\xfa\x5b\xf2\x88\xf3\xbf\x2b\x3c\x88\
+\x08\x00\xa0\xe5\x54\x0f\xab\xf9\xb7\xd4\x31\xb9\x24\xf6\xd8\xb1\
+\x91\x5b\x3d\xb0\xa8\x7a\x70\x51\x15\xe8\xd5\x53\x46\xcf\x3a\xab\
+\x65\xe2\xfc\xe6\x3c\xe2\xfc\xde\xc6\x3f\xc0\x00\x00\x68\x41\xd5\
+\x43\x6b\x1e\x4e\x1d\x95\xbf\x1e\x7b\xf6\xd8\xd8\xed\xee\xae\xdf\
+\x87\x5e\x45\x7a\x4f\x4f\x4b\xc4\xf9\x3f\xc6\xa6\xa6\x8f\xf3\x47\
+\x62\x2f\x76\x59\x03\x00\xb4\xb6\x05\xb1\x43\xa9\x23\xfd\xf2\x13\
+\xa3\xf7\xe2\x8b\x9b\xb7\xba\xac\x58\x91\x75\x9c\x1f\x8c\xcd\x49\
+\x1f\xe7\x4f\xc7\x16\xb9\x9c\x01\x00\xda\xc3\xb2\xd8\x77\x52\x47\
+\xfa\xf6\x63\xc3\x77\xf2\xe4\xb2\x76\xfd\xf5\xf5\x40\xef\xed\x2d\
+\x6b\x5d\x5d\x59\xc6\xf9\x13\xb1\x97\xa5\x8f\xf3\x1f\xc6\x7e\xc5\
+\x65\x0c\x00\xd0\x5e\x5e\x55\xd4\x1f\x6a\x93\x2c\x34\xab\x87\xfa\
+\xfc\xcd\xb1\x01\x3c\x6f\x5e\x59\xfb\xf0\x87\xb3\xfd\x16\xfd\x70\
+\x6c\x43\x1e\x67\x9d\x6f\x70\xf9\x02\x00\xb4\xa7\xd7\xc7\x9e\x4f\
+\x19\x9c\xd5\xc3\x7d\x3e\x7d\x6c\x08\xaf\x59\x53\x0f\xf4\xb7\xbd\
+\x2d\xbb\x40\xef\xcd\xe3\x47\xa1\xef\x72\xd9\x02\x00\xb4\xb7\xde\
+\xd4\xd1\xb9\x2c\xf6\xf8\xb1\x31\x7c\xcd\x35\x65\xff\x2d\xb7\x64\
+\x15\xe7\x07\x62\x93\xd3\xc7\xf9\x47\x5d\xae\x00\x00\x9d\xa1\x2f\
+\x75\xa4\x5f\x14\x7b\xe6\x97\x41\x3c\x73\x66\x59\xbb\xf1\xc6\x6c\
+\xe2\xfc\xa1\xd8\xec\xf4\x71\xfe\x40\x51\x3f\x2a\x13\x00\x80\x0e\
+\x50\x3d\xe4\xe6\x40\xea\x48\x7f\xeb\xb1\x61\x3c\x67\x4e\x16\x71\
+\x7e\x28\xb6\x34\x7d\x9c\xff\x47\xe1\x38\x45\x00\x80\x8e\x33\x3d\
+\xf6\xd9\xd4\x91\xbe\x33\xa3\xdb\x5a\xfa\x63\xeb\xd3\xc7\xf9\xe1\
+\xd8\x62\x97\x27\x00\x40\x67\x9a\x5f\x24\x3e\x23\x7d\x6a\xe3\x21\
+\x40\x39\x04\xfa\x1f\xa6\x8f\xf3\xea\x94\x9d\x95\x2e\x4b\x00\x80\
+\xce\x96\xfc\x8c\xf4\x85\xb1\x87\x13\xc7\xf9\x5d\x8d\x63\x20\x13\
+\xbe\x0e\x47\x62\xbf\xed\x72\x04\x00\xa0\x92\xfc\x8c\xf4\xf3\x62\
+\x4f\x26\x8a\xf3\xaf\xc4\x5e\x92\xfe\xdb\xf3\xad\x2e\x43\x00\x00\
+\x8e\x55\x9d\x91\xfe\x5c\xca\x48\x7d\x53\x82\x38\x7f\x3a\x76\x81\
+\xe3\x14\x01\x00\xc8\xd4\x96\xc4\xa1\x5a\xde\x32\xc1\x81\xde\x93\
+\x3e\xce\x3f\x57\xd4\x7f\xb0\x0b\x00\x00\x83\xda\x97\x32\x58\xa7\
+\xc4\x3e\x3e\x41\x71\x7e\x47\xac\x2b\x6d\x9c\x7f\x2b\xb6\xd0\x25\
+\x07\x00\xc0\x70\x26\xc5\xee\x4d\x19\xe9\x73\x63\x5f\x18\xe7\x38\
+\xff\x4c\x6c\x66\xda\x38\xff\x51\x6c\x85\xcb\x0d\x00\x80\x53\x31\
+\x23\xf6\xa5\x22\xf1\x8f\x46\x9f\x1a\xa7\x38\xff\x7a\x6c\x79\xfa\
+\x13\x5b\x36\xba\xcc\x00\x00\x18\x89\x97\x16\xf5\x87\xe6\x24\x0b\
+\xd9\xdf\x1d\xa7\x40\xbf\x34\xfd\x7d\xe7\xdb\x5c\x5e\x00\x00\x9c\
+\x8e\xea\xa1\x39\x3f\x49\x19\xb3\xbb\xc7\x38\xce\xff\x24\x7d\x9c\
+\xdf\x13\xeb\x72\x69\x01\x00\x70\xba\xde\x1c\x3b\x9a\x2a\x68\xcf\
+\x88\xdd\x37\x46\x71\x7e\x7f\xe3\xcf\x4b\x18\xe7\x5f\x8b\xcd\x72\
+\x49\x01\x00\x30\x5a\x1f\x4c\x18\xb5\xe5\xe2\xd8\x63\xa3\x8c\xf3\
+\x27\x62\xcb\xd2\xc6\xf9\xf7\x8a\xfa\x53\x5b\x01\x00\x60\xd4\xaa\
+\x93\x5d\x3e\x91\x32\xd2\xd7\xc7\x0e\x8f\x22\xd0\x37\xa5\xff\x51\
+\xe8\x25\x2e\x23\x00\x00\xc6\x52\x75\x6b\xc6\xa3\x29\x23\xbd\xf7\
+\x34\xe3\xbc\x2f\xfd\x7d\xe7\x3b\x5c\x3e\x00\x00\x8c\x87\xea\x64\
+\x97\xfe\x54\xa1\x3b\x29\x76\x60\x84\x71\xfe\x60\xfa\xf3\xce\xff\
+\xb5\xa8\xff\x0f\x04\x00\x00\x8c\x8b\xb5\xb1\x9f\x16\x09\x1f\x62\
+\xf4\xc5\x53\x8c\xf3\xea\x1c\xf5\x15\x69\xe3\xfc\x1b\xb1\xb9\x2e\
+\x19\x00\x00\xc6\xdb\x95\x09\xa3\xb7\x7c\x65\xec\xdb\xa7\x10\xe8\
+\x57\xa7\x8d\xf3\x1f\xc7\x5e\xe1\x52\x01\x00\x60\xa2\xf4\xa5\x8c\
+\xf4\x9e\x93\xc4\xf9\x9d\xe9\xef\x3b\xff\x1d\x97\x08\x00\x00\x13\
+\x69\x4a\xec\xd3\xa9\x02\xb8\x2b\xf6\x97\x43\xc4\xf9\x97\x62\x73\
+\xd2\xc6\xf9\x3e\x97\x07\x00\x00\x29\xcc\x2f\xea\xf7\x59\x27\x09\
+\xe1\xd9\xb1\x83\x27\xc4\xf9\xb3\xb1\xd5\x69\xe3\xfc\xc1\xd8\x54\
+\x97\x06\x00\x00\xa9\x5c\x10\xfb\xdf\x54\x41\x7c\xc1\x09\xf7\xa3\
+\x6f\x4d\x1b\xe7\xdf\x8f\x9d\xed\x92\x00\x00\x20\xb5\xab\x13\x46\
+\xf1\xff\xfd\x18\xb4\x8a\xf3\x7f\x8f\x4d\x49\xf7\xf7\x38\x1a\xbb\
+\xd8\xa5\x00\x00\x40\x2e\x6e\x4f\x19\xe9\xbb\x62\x4b\xd2\x7e\x7b\
+\xbe\xcd\x25\x00\x00\x40\x4e\xa6\xc5\x3e\x5f\x24\xfc\xd1\x68\xc2\
+\x38\x7f\xa8\xa8\xff\x68\x16\x00\x00\xb2\x72\x56\xec\x70\x91\xfe\
+\x88\xc3\x89\x5c\xf5\x64\xd5\x33\xbd\xf5\x00\x00\xe4\xea\xc2\xd8\
+\xcf\x3a\x24\xce\x9f\x8f\xfd\x9a\xb7\x1c\x00\x80\xdc\xbd\xb3\x43\
+\x02\xfd\x46\x6f\x35\x00\x00\xad\xe2\xce\x36\x8f\xf3\xfb\x62\x93\
+\xbc\xcd\x00\x00\xb4\x8a\x59\xb1\x43\x6d\x1a\xe7\xdf\x89\x2d\xf2\
+\x16\x03\x00\xd0\x6a\xce\x8f\xfd\xa4\xcd\xe2\xbc\x3a\xef\x7c\x83\
+\xb7\x16\x00\x80\x56\xb5\xa9\xcd\x02\x7d\x87\xb7\x14\x00\x80\x56\
+\xd7\xd7\x26\x71\x7e\xb0\x70\xde\x39\x00\x00\x6d\x60\x6a\xec\x73\
+\x2d\x1e\xe7\x3f\x8c\x2d\xf3\x56\x02\x00\xd0\x2e\xce\x8e\x7d\xaf\
+\x85\x03\xfd\x32\x6f\x21\x00\x00\xed\xe6\x75\xb1\x23\x2d\x18\xe7\
+\x7f\xed\xad\x03\x00\xa0\x5d\xed\x6a\xb1\x38\x7f\x32\x36\xc7\xdb\
+\x06\x00\x40\xbb\xaa\xee\x47\xff\x62\x8b\xc4\xf9\x73\xb1\x55\xde\
+\x32\x00\x00\xda\xdd\xb9\x45\xfd\x47\x97\xb9\x07\xfa\x4d\xde\x2a\
+\x00\x00\x3a\x45\xee\xe7\xa3\x3b\x52\x11\x00\x80\x8e\xf3\xd1\x4c\
+\xe3\xfc\x7f\x62\xcb\xbd\x3d\x00\x00\x74\x9a\x33\x62\x5f\xc9\x30\
+\xd0\xdf\xea\xad\x01\x00\xa0\x53\x75\xc7\x7e\x94\x51\x9c\xdf\xe5\
+\x2d\x01\x00\xa0\xd3\xbd\x25\x93\x38\xff\x76\x6c\xae\xb7\x03\x00\
+\x00\x8a\xe2\xef\x13\xc7\xf9\xd1\xa2\xfe\x20\x25\x00\x00\x20\xcc\
+\x8b\x3d\x93\x30\xd0\xef\xf0\x16\x00\x00\xc0\xf1\x5e\x1b\x3b\x92\
+\x20\xce\x9f\x8a\xbd\xd8\xcb\x0f\x00\x00\x2f\xb4\x6d\x82\xe3\xfc\
+\xf9\xd8\x1a\x2f\x3b\x00\x00\x0c\xae\x7a\x38\xd0\xc1\x09\x0c\xf4\
+\x5d\x5e\x72\x00\x00\x18\xde\xb9\xc5\xc4\x1c\xbd\xf8\xb5\xa2\x7e\
+\x16\x3b\x00\x00\x70\x12\x57\x8d\x73\x9c\xff\x3c\xf6\x4a\x2f\x33\
+\x00\x00\x9c\xba\xbb\xc6\x31\xd0\xb7\x7b\x79\x01\x00\x60\x64\x5e\
+\x12\xeb\x1f\x87\x38\x7f\xac\x70\x6b\x0b\x00\x00\x9c\x96\xea\xe1\
+\x41\x47\x8b\xb1\x3d\xb5\x65\x95\x97\x15\x00\x00\x4e\xdf\xde\x31\
+\x0c\xf4\x5b\xbc\x9c\x00\x00\x30\x3a\xd5\xed\x28\x8f\x8e\x41\x9c\
+\x57\x7f\xc6\x34\x2f\x27\x00\x00\x8c\x5e\x75\xe2\xca\xcf\x0a\xa7\
+\xb6\x00\x00\x40\x36\xb6\x8e\x22\xd0\x6f\xf3\xf2\x01\x00\xc0\xd8\
+\x9a\x14\xfb\x4c\xe1\xd4\x16\x00\x00\xc8\xc6\xb2\x62\x64\x4f\x19\
+\xad\x4e\x6d\x59\xed\x65\x03\x00\x80\xf1\xf3\xf6\x11\x04\xfa\x2e\
+\x2f\x17\x00\x00\x8c\xbf\xbb\x4f\x21\xce\xff\xab\x70\x6b\x0b\x00\
+\x00\x4c\x88\xea\x29\xa3\x03\xc5\xf0\xb7\xb6\x5c\xe8\x65\x02\x00\
+\x80\x89\xb3\xa1\x18\xfa\x29\xa3\xbb\xbd\x3c\x00\x00\x30\xf1\xfe\
+\x7c\x90\x38\xff\x7a\x6c\x86\x97\x06\x00\x00\x26\xde\xcc\xd8\xa1\
+\xe2\xf8\x5b\x5b\xd6\x78\x59\x00\x00\x20\x9d\x95\x45\xfd\x49\xa1\
+\x55\xa0\xef\xf5\x72\x00\x00\x40\x7a\x1f\x8c\x7d\xa3\xa8\x7f\xa3\
+\x0e\x00\x00\x24\x36\x2d\x76\x81\x97\x01\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x0e\xf2\x0b\x40\
+\x3b\x84\xc7\x9d\x59\x0c\xd3\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x07\
+\x08\x77\x57\x87\
+\x00\x62\
+\x00\x61\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x08\x9b\xa0\x47\
+\x00\x74\
+\x00\x72\x00\x61\x00\x73\x00\x68\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x08\x97\x8a\x27\
+\x00\x68\
+\x00\x65\x00\x61\x00\x72\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x39\x28\
+\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x09\xc4\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/dialogs/README b/examples/dialogs/README
new file mode 100644
index 0000000..efeae9a
--- /dev/null
+++ b/examples/dialogs/README
@@ -0,0 +1,26 @@
+PyQt includes standard dialogs for many common operations, such as file
+selection, printing, and color selection.
+
+Custom dialogs can also be created for specialized modal or modeless
+interactions with users.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/dialogs/classwizard/classwizard.py b/examples/dialogs/classwizard/classwizard.py
new file mode 100755
index 0000000..7c5aeb3
--- /dev/null
+++ b/examples/dialogs/classwizard/classwizard.py
@@ -0,0 +1,403 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDir, QFile, QRegExp
+from PyQt5.QtGui import QPixmap
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QGridLayout, QGroupBox,
+        QLabel, QLineEdit, QMessageBox, QRadioButton, QVBoxLayout, QWizard,
+        QWizardPage)
+
+import classwizard_rc
+
+
+class ClassWizard(QWizard):
+    def __init__(self, parent=None):
+        super(ClassWizard, self).__init__(parent)
+
+        self.addPage(IntroPage())
+        self.addPage(ClassInfoPage())
+        self.addPage(CodeStylePage())
+        self.addPage(OutputFilesPage())
+        self.addPage(ConclusionPage())
+
+        self.setPixmap(QWizard.BannerPixmap, QPixmap(':/images/banner.png'))
+        self.setPixmap(QWizard.BackgroundPixmap,
+                QPixmap(':/images/background.png'))
+
+        self.setWindowTitle("Class Wizard")
+
+    def accept(self):
+        className = self.field('className')
+        baseClass = self.field('baseClass')
+        macroName = self.field('macroName')
+        baseInclude = self.field('baseInclude')
+
+        outputDir = self.field('outputDir')
+        header = self.field('header')
+        implementation = self.field('implementation')
+
+        block = ''
+
+        if self.field('comment'):
+            block += '/*\n'
+            block += '    ' + header + '\n'
+            block += '*/\n'
+            block += '\n'
+
+        if self.field('protect'):
+            block += '#ifndef ' + macroName + '\n'
+            block += '#define ' + macroName + '\n'
+            block += '\n'
+
+        if self.field('includeBase'):
+            block += '#include ' + baseInclude + '\n'
+            block += '\n'
+
+        block += 'class ' + className
+        if baseClass:
+            block += ' : public ' + baseClass
+
+        block += '\n'
+        block += '{\n'
+
+        if self.field('qobjectMacro'):
+            block += '    Q_OBJECT\n'
+            block += '\n'
+
+        block += 'public:\n'
+
+        if self.field('qobjectCtor'):
+            block += '    ' + className + '(QObject *parent = 0);\n'
+        elif self.field('qwidgetCtor'):
+            block += '    ' + className + '(QWidget *parent = 0);\n'
+        elif self.field('defaultCtor'):
+            block += '    ' + className + '();\n'
+
+            if self.field('copyCtor'):
+                block += '    ' + className + '(const ' + className + ' &other);\n'
+                block += '\n'
+                block += '    ' + className + ' &operator=' + '(const ' + className + ' &other);\n'
+
+        block += '};\n'
+
+        if self.field('protect'):
+            block += '\n'
+            block += '#endif\n'
+
+        headerFile = QFile(outputDir + '/' + header)
+
+        if not headerFile.open(QFile.WriteOnly | QFile.Text):
+            QMessageBox.warning(None, "Class Wizard",
+                    "Cannot write file %s:\n%s" % (headerFile.fileName(), headerFile.errorString()))
+            return
+
+        headerFile.write(block)
+
+        block = ''
+
+        if self.field('comment'):
+            block += '/*\n'
+            block += '    ' + implementation + '\n'
+            block += '*/\n'
+            block += '\n'
+
+        block += '#include "' + header + '"\n'
+        block += '\n'
+
+        if self.field('qobjectCtor'):
+            block += className + '::' + className + '(QObject *parent)\n'
+            block += '    : ' + baseClass + '(parent)\n'
+            block += '{\n'
+            block += '}\n'
+        elif self.field('qwidgetCtor'):
+            block += className + '::' + className + '(QWidget *parent)\n'
+            block += '    : ' + baseClass + '(parent)\n'
+            block += '{\n'
+            block += '}\n'
+        elif self.field('defaultCtor'):
+            block += className + '::' + className + '()\n'
+            block += '{\n'
+            block += '    // missing code\n'
+            block += '}\n'
+
+            if self.field('copyCtor'):
+                block += '\n'
+                block += className + '::' + className + '(const ' + className + ' &other)\n'
+                block += '{\n'
+                block += '    *this = other;\n'
+                block += '}\n'
+                block += '\n'
+                block += className + ' &' + className + '::operator=(const ' + className + ' &other)\n'
+                block += '{\n'
+
+                if baseClass:
+                    block += '    ' + baseClass + '::operator=(other);\n'
+
+                block += '    // missing code\n'
+                block += '    return *this;\n'
+                block += '}\n'
+
+        implementationFile = QFile(outputDir + '/' + implementation)
+
+        if not implementationFile.open(QFile.WriteOnly | QFile.Text):
+            QMessageBox.warning(None, "Class Wizard",
+                    "Cannot write file %s:\n%s" % (implementationFile.fileName(), implementationFile.errorString()))
+            return
+
+        implementationFile.write(block)
+
+        super(ClassWizard, self).accept()
+
+
+class IntroPage(QWizardPage):
+    def __init__(self, parent=None):
+        super(IntroPage, self).__init__(parent)
+
+        self.setTitle("Introduction")
+        self.setPixmap(QWizard.WatermarkPixmap,
+                QPixmap(':/images/watermark1.png'))
+
+        label = QLabel("This wizard will generate a skeleton C++ class "
+                "definition, including a few functions. You simply need to "
+                "specify the class name and set a few options to produce a "
+                "header file and an implementation file for your new C++ "
+                "class.")
+        label.setWordWrap(True)
+
+        layout = QVBoxLayout()
+        layout.addWidget(label)
+        self.setLayout(layout)
+
+
+class ClassInfoPage(QWizardPage):
+    def __init__(self, parent=None):
+        super(ClassInfoPage, self).__init__(parent)
+
+        self.setTitle("Class Information")
+        self.setSubTitle("Specify basic information about the class for "
+                "which you want to generate skeleton source code files.")
+        self.setPixmap(QWizard.LogoPixmap, QPixmap(':/images/logo1.png'))
+
+        classNameLabel = QLabel("&Class name:")
+        classNameLineEdit = QLineEdit()
+        classNameLabel.setBuddy(classNameLineEdit)
+
+        baseClassLabel = QLabel("B&ase class:")
+        baseClassLineEdit = QLineEdit()
+        baseClassLabel.setBuddy(baseClassLineEdit)
+
+        qobjectMacroCheckBox = QCheckBox("Generate Q_OBJECT &macro")
+
+        groupBox = QGroupBox("C&onstructor")
+
+        qobjectCtorRadioButton = QRadioButton("&QObject-style constructor")
+        qwidgetCtorRadioButton = QRadioButton("Q&Widget-style constructor")
+        defaultCtorRadioButton = QRadioButton("&Default constructor")
+        copyCtorCheckBox = QCheckBox("&Generate copy constructor and operator=")
+
+        defaultCtorRadioButton.setChecked(True)
+
+        defaultCtorRadioButton.toggled.connect(copyCtorCheckBox.setEnabled)
+
+        self.registerField('className*', classNameLineEdit)
+        self.registerField('baseClass', baseClassLineEdit)
+        self.registerField('qobjectMacro', qobjectMacroCheckBox)
+        self.registerField('qobjectCtor', qobjectCtorRadioButton)
+        self.registerField('qwidgetCtor', qwidgetCtorRadioButton)
+        self.registerField('defaultCtor', defaultCtorRadioButton)
+        self.registerField('copyCtor', copyCtorCheckBox)
+
+        groupBoxLayout = QVBoxLayout()
+        groupBoxLayout.addWidget(qobjectCtorRadioButton)
+        groupBoxLayout.addWidget(qwidgetCtorRadioButton)
+        groupBoxLayout.addWidget(defaultCtorRadioButton)
+        groupBoxLayout.addWidget(copyCtorCheckBox)
+        groupBox.setLayout(groupBoxLayout)
+
+        layout = QGridLayout()
+        layout.addWidget(classNameLabel, 0, 0)
+        layout.addWidget(classNameLineEdit, 0, 1)
+        layout.addWidget(baseClassLabel, 1, 0)
+        layout.addWidget(baseClassLineEdit, 1, 1)
+        layout.addWidget(qobjectMacroCheckBox, 2, 0, 1, 2)
+        layout.addWidget(groupBox, 3, 0, 1, 2)
+        self.setLayout(layout)
+
+
+class CodeStylePage(QWizardPage):
+    def __init__(self, parent=None):
+        super(CodeStylePage, self).__init__(parent)
+
+        self.setTitle("Code Style Options")
+        self.setSubTitle("Choose the formatting of the generated code.")
+        self.setPixmap(QWizard.LogoPixmap, QPixmap(':/images/logo2.png'))
+
+        commentCheckBox = QCheckBox("&Start generated files with a comment")
+        commentCheckBox.setChecked(True)
+
+        protectCheckBox = QCheckBox("&Protect header file against multiple "
+                "inclusions")
+        protectCheckBox.setChecked(True)
+
+        macroNameLabel = QLabel("&Macro name:")
+        self.macroNameLineEdit = QLineEdit()
+        macroNameLabel.setBuddy(self.macroNameLineEdit)
+
+        self.includeBaseCheckBox = QCheckBox("&Include base class definition")
+        self.baseIncludeLabel = QLabel("Base class include:")
+        self.baseIncludeLineEdit = QLineEdit()
+        self.baseIncludeLabel.setBuddy(self.baseIncludeLineEdit)
+
+        protectCheckBox.toggled.connect(macroNameLabel.setEnabled)
+        protectCheckBox.toggled.connect(self.macroNameLineEdit.setEnabled)
+        self.includeBaseCheckBox.toggled.connect(self.baseIncludeLabel.setEnabled)
+        self.includeBaseCheckBox.toggled.connect(self.baseIncludeLineEdit.setEnabled)
+
+        self.registerField('comment', commentCheckBox)
+        self.registerField('protect', protectCheckBox)
+        self.registerField('macroName', self.macroNameLineEdit)
+        self.registerField('includeBase', self.includeBaseCheckBox)
+        self.registerField('baseInclude', self.baseIncludeLineEdit)
+
+        layout = QGridLayout()
+        layout.setColumnMinimumWidth(0, 20)
+        layout.addWidget(commentCheckBox, 0, 0, 1, 3)
+        layout.addWidget(protectCheckBox, 1, 0, 1, 3)
+        layout.addWidget(macroNameLabel, 2, 1)
+        layout.addWidget(self.macroNameLineEdit, 2, 2)
+        layout.addWidget(self.includeBaseCheckBox, 3, 0, 1, 3)
+        layout.addWidget(self.baseIncludeLabel, 4, 1)
+        layout.addWidget(self.baseIncludeLineEdit, 4, 2)
+        self.setLayout(layout)
+
+    def initializePage(self):
+        className = self.field('className')
+        self.macroNameLineEdit.setText(className.upper() + "_H")
+
+        baseClass = self.field('baseClass')
+        is_baseClass = bool(baseClass)
+
+        self.includeBaseCheckBox.setChecked(is_baseClass)
+        self.includeBaseCheckBox.setEnabled(is_baseClass)
+        self.baseIncludeLabel.setEnabled(is_baseClass)
+        self.baseIncludeLineEdit.setEnabled(is_baseClass)
+
+        if not is_baseClass:
+            self.baseIncludeLineEdit.clear()
+        elif QRegExp('Q[A-Z].*').exactMatch(baseClass):
+            self.baseIncludeLineEdit.setText('<' + baseClass + '>')
+        else:
+            self.baseIncludeLineEdit.setText('"' + baseClass.lower() + '.h"')
+
+
+class OutputFilesPage(QWizardPage):
+    def __init__(self, parent=None):
+        super(OutputFilesPage, self).__init__(parent)
+
+        self.setTitle("Output Files")
+        self.setSubTitle("Specify where you want the wizard to put the "
+                "generated skeleton code.")
+        self.setPixmap(QWizard.LogoPixmap, QPixmap(':/images/logo3.png'))
+
+        outputDirLabel = QLabel("&Output directory:")
+        self.outputDirLineEdit = QLineEdit()
+        outputDirLabel.setBuddy(self.outputDirLineEdit)
+
+        headerLabel = QLabel("&Header file name:")
+        self.headerLineEdit = QLineEdit()
+        headerLabel.setBuddy(self.headerLineEdit)
+
+        implementationLabel = QLabel("&Implementation file name:")
+        self.implementationLineEdit = QLineEdit()
+        implementationLabel.setBuddy(self.implementationLineEdit)
+
+        self.registerField('outputDir*', self.outputDirLineEdit)
+        self.registerField('header*', self.headerLineEdit)
+        self.registerField('implementation*', self.implementationLineEdit)
+
+        layout = QGridLayout()
+        layout.addWidget(outputDirLabel, 0, 0)
+        layout.addWidget(self.outputDirLineEdit, 0, 1)
+        layout.addWidget(headerLabel, 1, 0)
+        layout.addWidget(self.headerLineEdit, 1, 1)
+        layout.addWidget(implementationLabel, 2, 0)
+        layout.addWidget(self.implementationLineEdit, 2, 1)
+        self.setLayout(layout)
+
+    def initializePage(self):
+        className = self.field('className')
+        self.headerLineEdit.setText(className.lower() + '.h')
+        self.implementationLineEdit.setText(className.lower() + '.cpp')
+        self.outputDirLineEdit.setText(QDir.toNativeSeparators(QDir.tempPath()))
+
+
+class ConclusionPage(QWizardPage):
+    def __init__(self, parent=None):
+        super(ConclusionPage, self).__init__(parent)
+
+        self.setTitle("Conclusion")
+        self.setPixmap(QWizard.WatermarkPixmap,
+                QPixmap(':/images/watermark2.png'))
+
+        self.label = QLabel()
+        self.label.setWordWrap(True)
+
+        layout = QVBoxLayout()
+        layout.addWidget(self.label)
+        self.setLayout(layout)
+
+    def initializePage(self):
+        finishText = self.wizard().buttonText(QWizard.FinishButton)
+        finishText.replace('&', '')
+        self.label.setText("Click %s to generate the class skeleton." % finishText)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    wizard = ClassWizard()
+    wizard.show()
+    sys.exit(app.exec_())
diff --git a/examples/dialogs/classwizard/classwizard.qrc b/examples/dialogs/classwizard/classwizard.qrc
new file mode 100644
index 0000000..41a5ddc
--- /dev/null
+++ b/examples/dialogs/classwizard/classwizard.qrc
@@ -0,0 +1,11 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>images/background.png</file>
+    <file>images/banner.png</file>
+    <file>images/logo1.png</file>
+    <file>images/logo2.png</file>
+    <file>images/logo3.png</file>
+    <file>images/watermark1.png</file>
+    <file>images/watermark2.png</file>
+</qresource>
+</RCC>
diff --git a/examples/dialogs/classwizard/classwizard_rc.py b/examples/dialogs/classwizard/classwizard_rc.py
new file mode 100644
index 0000000..9d78730
--- /dev/null
+++ b/examples/dialogs/classwizard/classwizard_rc.py
@@ -0,0 +1,3887 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sat May 4 14:59:27 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x58\x32\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\xdc\x00\x00\x01\x7c\x08\x06\x00\x00\x00\xa4\x31\xd5\xdb\
+\x00\x00\x57\xf9\x49\x44\x41\x54\x78\x5e\xec\xdd\xc1\x4b\x55\x69\
+\x18\xc7\xf1\xdf\xb9\xd7\xeb\x95\x0b\x95\x61\x10\x3a\xad\x24\x50\
+\x50\x08\x12\x0a\x71\x56\x21\x83\x25\x48\x10\x11\x2d\x6c\x51\x11\
+\x42\x81\x04\xdd\x6a\x46\xbc\xaf\x60\x50\xa3\xb6\x28\x89\x20\x72\
+\x71\x21\x5c\xb4\x90\xac\x08\x93\x36\xcd\xb4\x72\x06\x23\x62\x86\
+\x1a\x37\x52\xdc\xc8\x82\xb1\xc2\x6c\x91\xf2\xf4\x6c\x82\x10\xbc\
+\x48\x59\x69\x7e\x3f\xf0\xe5\xf9\x0b\x7e\xbc\x8b\xb3\x38\xfa\x11\
+\x00\x00\x00\x00\x00\x00\x00\x00\x82\xf4\x8b\xb7\x43\x79\x00\x31\
+\x7d\x11\x9c\x94\xd6\x06\xa9\x5f\xd2\xed\xa8\xa0\xa0\x45\x5f\x0f\
+\x18\x1c\xaf\x5a\x52\x7a\x68\xd2\x9e\x9f\xb6\x6e\x1d\x4a\x4f\x4c\
+\x3c\x30\xb3\x94\xe6\x01\x14\xe8\x73\x30\xb4\x94\x49\xbf\x4b\x3a\
+\x1c\x4f\x24\x26\xea\xbb\xbb\xfb\x6a\x5b\x5b\x9f\x4a\xba\xeb\xbd\
+\xd3\xa2\x01\x18\xdb\x16\xef\x91\x67\xbd\x15\x15\x7f\x4c\x8e\x8f\
+\x9f\x36\xb3\xc3\x5e\x99\x16\x07\x80\x43\x52\x22\x48\x1d\x19\xe9\
+\x7d\x47\x2c\x36\x39\x7c\xfc\x78\xd6\xcc\x82\xb7\xdd\x2b\xf8\x64\
+\x90\x45\xde\x21\xaf\x72\xb7\x14\xf7\x3b\xe4\x1d\xd3\xc2\x00\x08\
+\x52\xa5\x37\xe2\x59\x4f\x69\xe9\xdf\xb9\xd1\xd1\xb3\x66\x76\xd4\
+\x2b\xd7\x1c\xbf\x4a\xeb\x83\x34\x15\xa2\xe8\x49\x46\xea\x0c\x92\
+\xf5\xd5\xd5\x75\x69\x41\x00\xc6\x76\xd0\x9b\xf6\x01\x4d\x0f\x34\
+\x37\x5f\x9d\x9d\x9d\xed\x30\xb3\x5d\x5e\x91\xe6\x71\xa7\xad\xad\
+\xcb\x5f\xc1\x99\x20\x59\x67\x32\xf9\xf6\xbf\x5b\xb7\xba\x42\x08\
+\x31\xe5\x07\xc0\x87\x76\xfd\x4c\x49\xc9\xfd\xb1\xe1\xe1\x73\x66\
+\x76\xc2\xab\x56\x1e\xed\x52\xcd\xa9\x54\xea\x5e\x90\x6c\x4e\x37\
+\x95\x1f\x00\x33\xab\xf1\x82\xd7\xec\xad\x56\x7e\xca\x48\x17\x7d\
+\xa4\x53\x17\xaa\xaa\xfe\x0a\x92\x5d\xae\xad\xbd\xdf\xdf\xd4\x74\
+\x63\x60\xdf\xbe\x1e\x33\x4b\x28\x2f\xf0\x59\x00\x8f\xbd\x97\x51\
+\x14\x3d\xd1\x02\x1c\x18\x19\xe9\x2e\xdb\xb4\xe9\xc5\x9b\x5c\x2e\
+\x71\xbe\xbc\xbc\x26\x59\x5c\xfc\x7a\xef\xe0\xe0\xa0\xa4\x42\x6f\
+\x95\xf7\xbf\x56\x2c\x44\x5a\x54\x30\xb3\xa4\xa4\x6a\x6f\x2c\x5b\
+\x5f\x9f\xdd\xd8\xd0\x90\xfb\x39\x9d\x3e\xa2\xaf\x0e\x60\x7c\xdb\
+\xbc\x16\x7d\x13\x00\x83\x8b\xb4\x52\x01\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\
+\x47\x1f\x80\x8c\xd4\x16\xa4\x57\x7e\xc3\xca\x18\x1e\x62\xfa\x6e\
+\xb0\x7a\xc3\x86\x7f\x24\xad\x89\x45\x51\x26\x23\xdd\x0b\x52\x8b\
+\x96\x13\x30\xb8\x20\x15\xfe\x26\x95\x6a\x19\x98\x7a\xfe\xfc\x48\
+\x2c\x1e\x9f\x29\xdd\xbc\xf9\xdf\xd4\xba\x75\x25\x51\x14\xf5\x06\
+\x69\x67\xbb\x54\xb7\x5b\x8a\x6b\x29\x02\x32\x52\x3a\x48\x5d\x92\
+\x22\xbf\x97\xbc\x67\x5a\xe2\x82\xd4\xe4\xd9\x95\xc6\xc6\x3f\xcd\
+\x2c\x5c\xdb\xbf\x7f\x28\x48\xf6\xb1\x8c\x94\xd5\x52\x04\x7c\x68\
+\xef\x2a\xa0\xaa\xca\xda\xf6\xbe\xa2\x82\xd9\x1d\x60\x8c\x9d\x63\
+\x8d\xdd\xdd\x39\xea\x98\x63\xd7\xd8\x8d\x88\x08\x16\x12\x62\x61\
+\xa0\x98\x01\x82\x8d\x05\x82\x01\x8a\x8a\x58\x58\x18\x08\x62\x22\
+\x29\x20\xa1\xf2\x3f\xef\x5d\xfb\xac\x75\xbf\xfb\xe3\xcc\xe0\x10\
+\xd7\x99\xf7\x59\xeb\x59\x87\xb3\xcf\x61\x3e\xef\xb7\x79\xef\xde\
+\xfb\x8d\xe7\x5d\x96\x23\xc7\x7a\xf9\x47\x7a\x08\xd7\xaf\x1b\x6b\
+\xd5\xa2\x3f\xe2\xc2\x3a\x6a\x68\x79\xc1\xc9\x60\xa0\x79\xae\x5c\
+\x51\xd1\xaf\x5e\x99\x7b\x5b\x5a\x56\x82\x81\x85\xad\x2e\x5a\xf4\
+\xbd\xfb\x82\x05\x07\xb6\x36\x6e\xec\x4b\x46\xb7\x2c\x67\xce\xea\
+\x42\xd7\xc0\x60\xc4\x85\x85\x35\xb4\x2e\x53\xe6\x95\xb2\x3a\xec\
+\xeb\xd1\xc3\x7b\x47\xdb\xb6\xdd\x74\xd4\xe0\x9a\xc0\xb8\xbe\x90\
+\x41\xed\xea\xd0\xc1\x17\xab\x5b\x07\xdc\xdb\xd2\xfd\x15\x5b\xdb\
+\x3d\xb8\x1f\xb3\xae\x6a\xd5\xeb\xa6\x2a\xd5\xd7\xd7\xfe\xfe\xad\
+\x31\x5e\x07\xdc\x6d\x22\x44\x4f\xc1\x60\xe8\xc0\x8a\xf1\x13\x56\
+\x87\x5b\xd2\xd8\xb4\xf9\x93\xd0\x41\x5c\xb5\xb5\x5d\x67\x55\xaa\
+\xd4\x9b\x35\xa5\x4a\x85\x5a\x97\x2d\x5b\x1b\x06\x95\xb4\xbe\x7a\
+\xf5\x07\x30\xb6\x29\x66\xfa\xfa\x6d\xc9\xf8\xb6\xb7\x68\xe1\x8f\
+\xfb\xe6\x78\xd6\x50\x63\x9b\x69\x2f\xb2\x12\x0c\x76\x9a\x7c\x11\
+\x22\x57\x76\x7d\xfd\x6c\x3f\x75\xe9\xe2\x9a\xa7\x58\xb1\xb0\x7c\
+\xa5\x4b\xbf\x1d\xe4\xea\xba\xb9\xd7\xf6\xed\x9b\xe6\x44\x44\xe4\
+\x12\x3a\x88\x26\x33\x66\x6c\x9d\xf1\xf2\xa5\xed\x8c\xe7\xcf\x1d\
+\x12\xa2\xa3\xcd\x31\x94\x23\x6f\xc9\x92\x71\x31\x61\x61\xee\x5f\
+\x13\x13\xad\xb3\xe5\xc8\xf1\xa9\xfb\xa6\x4d\x1e\x18\x7f\x96\xb7\
+\x44\x89\x10\x01\xe4\x29\x5e\x3c\xac\xec\x2f\xbf\xe4\x81\x11\xaa\
+\xe7\x2c\xcb\x9c\x2a\x0c\x06\x56\x82\xd9\xe0\xc2\x0d\x35\x6a\xf8\
+\xaf\xc8\x9f\x3f\x1a\xf7\x5d\xc0\xbe\x60\xa5\xbf\x58\x1d\xab\x61\
+\xd5\x70\xc4\xb5\x49\x16\xfc\x9b\x73\x81\xb5\x2e\x59\x59\x55\xd9\
+\xd3\xa5\x8b\xb7\xf3\xc0\x81\x47\xb0\x82\x8d\xa3\x95\xcc\x75\xe8\
+\x50\x77\x3c\xeb\x25\x57\xf0\xf2\x34\x76\x68\xd0\xa0\xf3\x18\x5b\
+\x02\x16\xc1\xbd\x33\x9d\xf9\xc0\x49\x59\x11\xbf\x63\xb0\xc1\x15\
+\x02\x73\x7a\x2c\x5c\x38\xe0\xc6\x96\x2d\x8e\xb8\x2f\x2b\xfe\x1c\
+\xe4\xcd\x9c\x06\xc6\xe3\xac\x14\xbb\xbd\x79\xf3\x5f\xb3\xf0\xdf\
+\x5e\x18\x1c\x06\x1a\xc3\x89\xe2\x44\xc6\x65\x5f\xaf\xde\x5d\xdc\
+\xe7\x95\x06\x57\x8b\xc6\x5c\x7e\xfb\xed\x30\xc6\x72\x90\x81\xad\
+\x2c\x58\x70\xab\xc6\x36\x73\x8a\xc8\x22\x30\xd8\xf0\xf2\xc9\x3f\
+\xde\xc2\x7f\xb2\xaa\x95\xc5\xca\xe0\x8e\x6b\xca\xca\xc2\x85\x03\
+\x9e\x5f\xb8\x60\x8b\xf7\x47\xea\xc0\x2a\x9d\x13\xac\xe3\xbf\x7d\
+\xfb\xf6\x9b\xdb\xb6\x59\xe2\x3e\xbb\x00\x4c\x84\x68\x4a\x86\x75\
+\x74\xec\xd8\x3d\x8b\x85\xa8\x0d\x03\xf3\xa1\x7b\x72\x12\x9d\x9a\
+\x31\xe3\xd8\xfd\x23\x47\x86\xcb\xcf\xe3\x02\x56\x14\x3a\x04\x06\
+\xc7\xeb\x86\x82\x91\xe4\xa4\xd8\xdf\xb3\xe7\x91\xe4\xc4\x44\x33\
+\x18\xdb\x6f\x60\x5e\x1d\x59\xa9\xf5\xc0\xa6\xe0\x10\x30\x87\x34\
+\xb8\x8e\x64\x60\x70\xb0\x3c\xc1\x35\x69\xa9\x4a\x15\x77\xb0\x5f\
+\x3f\xe7\xe4\x4f\x9f\xe8\xdf\x3e\x09\xec\x62\xae\xaf\xef\x2b\x57\
+\xbb\x8f\xb8\x56\x11\x59\x09\x06\x63\x81\x10\x45\x60\x68\xea\xed\
+\x9a\x45\xee\xdc\xcf\x03\x9c\x9c\x36\xc2\xc8\x16\x81\x0d\x85\x8e\
+\x61\xa1\x10\xc5\xb0\x92\x55\xd7\x58\x91\x27\x2a\xdb\xc7\x35\x25\
+\x4b\xde\x7c\xe1\xed\x4d\x2b\xf2\x02\xb0\x11\xa8\x12\x80\xb9\x81\
+\xc1\xdb\x55\x85\x0b\x47\x38\x0d\x18\x70\xea\xd1\x99\x33\xd5\x44\
+\x16\x82\xc1\x61\x83\x2e\x30\x36\x8a\xd1\x7d\xdd\xf6\xcb\x2f\x67\
+\xe2\xc2\xc3\x2d\x28\xd6\xa5\xc3\x81\x71\x17\xf0\x33\xb8\x19\xdc\
+\x44\x31\x3b\x9c\xed\x62\xdd\xe7\xcf\x77\xa5\x8c\x14\x70\x10\x98\
+\x4f\xe3\xfd\x1a\x60\x0a\x1c\x2f\x57\x2e\x2d\x5f\xbe\x6d\x65\xa1\
+\x42\x37\xe4\xd6\xd3\x09\xf4\xa1\x2d\xe9\xb7\x52\xe0\x44\x7a\x81\
+\xc1\x98\x0d\x4f\x3a\xfd\xc1\x82\x5f\x91\x89\xf2\xe6\xea\xda\xb5\
+\xdb\x60\x64\x26\x60\x2b\x50\x67\xc3\x21\x5e\xa6\xa6\xf5\x90\x29\
+\xe3\xaf\xac\x6a\xcb\xf3\xe6\x7d\xf3\xe1\xf1\xe3\xd5\x30\xb2\x59\
+\x60\xf5\x54\xb6\xc9\xb3\xe9\xbd\x0d\xd5\xab\x3f\x96\x86\x9a\xb2\
+\xb2\x48\x91\x29\xab\x8a\x16\x35\xa1\x71\x32\xd8\xd4\x82\xe6\x78\
+\xe6\x09\xee\x98\x2f\x44\x01\xc1\x60\xfc\xd3\x6d\x19\xa5\x4e\x81\
+\x29\xc8\xda\xb8\x1c\xf9\xe2\xc5\x4a\x0a\x2a\x83\xa5\x7f\x10\xc7\
+\xcf\x78\xf2\xb6\x5a\x95\x2e\xfd\x86\x56\x66\x04\xca\xa7\x61\xcc\
+\x40\xa4\x02\x78\x59\x3d\x14\xe3\x34\xcb\x91\x23\x96\xae\xa7\xa7\
+\x4f\xdf\x82\xb4\xb0\x17\xb8\x4f\xda\xdd\xa9\xd3\xe5\x8b\x16\x16\
+\xbd\x35\xd2\xca\x72\x92\x91\x2d\xd3\xd7\xf7\xc1\xf6\x3a\xc8\x71\
+\xe4\x48\x03\xf1\x0f\xc1\xe0\x6d\xa4\xc1\x8a\x02\x05\xce\x21\x4c\
+\xb0\x53\x6e\xc3\xba\x82\xd9\x7f\x20\x6f\xab\x0a\xac\x9f\x94\x90\
+\x30\xef\x99\xa7\xe7\x3a\x72\xa4\x7c\xeb\x73\xc2\xe0\x12\xd4\xe9\
+\x6c\xdd\xbb\x7b\xef\xea\xd4\x49\xed\x3c\xc1\x99\x2e\x0a\xce\x95\
+\xc4\x2b\x36\x36\x8e\xf2\xbc\xd7\x5f\xbe\x7f\x17\x2b\x5e\x10\x38\
+\x30\x39\x39\xb9\xdf\xdb\x80\x80\x35\xf4\xbf\x23\x18\x8c\x74\x58\
+\x29\x86\x83\x33\xc1\x8a\x3f\xf0\x67\x30\x00\x5b\xff\xd9\xca\xec\
+\xbe\x70\xe1\xcc\xf3\x26\x26\x87\xf0\xce\x62\x38\x55\xae\x92\xc1\
+\x2d\xcd\x96\xed\xf3\xc5\xe5\xcb\x77\x63\x6c\x9a\xe6\x79\xcf\xa1\
+\x79\xf3\xd1\x58\xd5\xc2\xe9\x1d\x18\xea\x41\x3c\x6b\x9c\x5e\xdb\
+\x6b\x06\x1b\x9c\xfe\x7f\xe4\x73\xd6\x04\x27\x82\x86\x70\xae\xdc\
+\x81\xb1\x7d\xf1\x5a\xba\xd4\x09\xf7\x33\xc0\x02\x5a\xef\x56\x76\
+\x19\x32\xe4\x2c\x19\x9c\x53\xff\xfe\xb6\x72\x9b\xfa\x3d\x60\x30\
+\x18\x2f\x7d\x7d\xdb\xf9\x6d\xdd\xba\x43\x3a\x58\x0a\xa5\xb2\x05\
+\x2d\x89\x95\x2d\xc6\xa6\x5c\xb9\xd0\xcf\x49\x49\x73\x28\xd8\x2e\
+\xfe\x11\x18\x0c\x4e\x71\xeb\x07\x16\x55\x9c\x47\x32\x0b\x65\x32\
+\x98\x1d\x3f\x6f\xc7\xf5\xeb\xad\x9d\x3b\x1d\xf0\x4e\x3d\xf1\x37\
+\x20\x43\x0c\xa7\xf1\x7b\x7f\x51\xee\xc4\x60\xb0\xf3\xa8\x20\xb2\
+\x50\x02\x64\x78\xe0\x21\xf8\x65\x73\x83\x06\xb7\x60\x6c\xe3\x40\
+\x95\xd6\xbb\x55\x64\x22\xf7\x75\x32\x30\x70\xa0\x34\xb8\xea\x66\
+\x7a\x7a\xef\xe4\x7f\x63\x9c\xf8\x36\x18\x0c\x46\x62\x6c\xec\xe8\
+\xe3\xe3\xc7\xbb\x21\x4c\xf0\x91\x8c\x06\x75\x77\x4f\x8e\x4f\x9e\
+\xdc\x42\xbb\x6a\x02\x8c\x90\x31\xcb\x30\x7a\x4f\x72\x86\xa9\x91\
+\x91\x01\xb2\x58\x3e\x58\xe4\xc9\x13\xfb\xca\xdf\xbf\xb7\x60\x30\
+\x18\x7f\x59\x06\xd4\x2d\xfc\xe9\xd3\x15\xbb\xda\xb7\xbf\x46\x4e\
+\x95\x25\xb0\x43\x13\x21\x7a\x6b\x18\xdc\x51\x8c\x27\x5c\x34\x37\
+\xdf\x47\x61\x94\x88\x67\xcf\x56\x91\x61\xca\xca\xf4\x93\x60\xca\
+\xa9\x69\xd3\x8e\xe1\x59\x27\xf1\xb7\xc0\x60\xb0\xe1\x15\x07\x87\
+\x3f\x3e\x71\x62\x23\xca\x7f\x6e\xed\xed\xd9\x73\x94\x90\x40\xcc\
+\xee\x93\xad\x91\x51\x88\xf4\x6c\x56\x03\xeb\x86\x3d\x7e\x3c\x1e\
+\x21\x04\x75\x20\x7d\x4d\x89\x12\x2f\xe1\x64\x99\x9b\x76\xcf\x2f\
+\x83\xc1\x86\x57\x15\xfc\x03\x9c\x24\x24\xb0\xdd\x8c\xa2\xac\x96\
+\x57\x01\x01\x86\x1a\xef\x65\xc7\xf9\x2f\x8e\xb6\x99\xe4\xf9\xfc\
+\xfe\x00\x39\x83\xc1\x46\x97\x4d\x33\xf3\xc6\xbe\x6e\xdd\x63\xb4\
+\x92\xc1\xc0\x76\x2d\x10\xa2\x90\x2c\xd0\x9d\x45\x63\x70\xb2\x04\
+\xe0\xdd\x09\xa0\x8a\xb6\xa1\xe4\xf5\x04\xef\xe0\x99\x03\x1c\x2a\
+\x55\x45\xda\xc0\x60\x30\x9e\x79\x78\xb4\x44\xce\xe9\x33\x0d\x67\
+\xc9\x07\xba\xc2\x3b\x99\x18\x72\xf5\x2a\x05\xc8\x8d\x70\x3f\x55\
+\x66\xb1\xc4\x99\x65\xcf\x1e\xa9\xfe\x59\xa5\x7a\x89\x6b\x5a\xf3\
+\x53\x19\x0c\x5e\xf1\x12\x3f\x7d\x1a\xeb\x63\x6d\xbd\x77\x4f\xd7\
+\xae\xc7\x51\xa1\x40\x86\x94\x02\x7d\xcc\x3b\x78\x36\x80\x92\x9d\
+\x71\x9f\x00\x6f\xe5\x0b\xd4\xe3\xad\xc5\x98\xe9\xdd\x7d\xfb\xb6\
+\xc2\xf0\x92\x60\x80\x81\xb2\x0a\xbd\xb1\xf8\xdb\x60\x30\xd8\xe8\
+\xb2\x83\xed\xc0\xb1\xa8\xab\xdb\x4b\x62\x4c\x6a\x51\xdd\x7a\xf5\
+\x5a\x2b\x2a\xd1\xa4\x0e\x2d\xab\xd1\xcb\x83\xf5\xf7\x76\xeb\xe6\
+\xa5\xa1\xad\x92\x2c\x6b\xef\xd2\x08\x06\x83\x8d\xaf\xe4\xc7\x77\
+\xef\xcc\x7c\xd7\xad\xdb\x99\x98\x98\x58\x1f\x06\xd5\x01\x4c\x39\
+\xd0\xa7\xcf\x49\xa1\x01\x24\x4b\xef\x95\x82\xb6\xd7\x8e\x8c\x1a\
+\x75\xf2\xd9\x85\x0b\x8d\xc4\x77\x81\xc1\x60\xa3\x2b\x00\xf6\x04\
+\x7f\xfa\x43\x08\x7d\xac\x78\x51\x38\xd3\xd1\x2a\xd6\x9f\x72\x32\
+\xc1\xc1\x38\xc3\x45\xd3\x78\xec\xfb\xf7\x54\x02\x35\xea\x7d\x60\
+\x20\xad\x86\xe3\xb1\xda\x1d\xc1\xf5\x28\xae\x53\x70\xcd\x2f\xd2\
+\x06\x06\x83\x81\xf3\xdd\x52\x25\x2e\xa7\x49\x0f\x63\x63\x17\x18\
+\x5b\x9b\xf1\x42\xe4\xa0\x94\x30\xe9\x58\x89\x05\xe3\xe5\x3b\x81\
+\x7f\xd3\x9b\xc9\xca\xcb\x0c\x06\xad\x6e\xa4\x1c\x56\x6f\xe4\xc8\
+\x6d\x93\xee\xdc\xb1\xe9\x64\x65\xb5\xab\x6c\x93\x26\x9e\x02\x28\
+\x58\xbe\x7c\x48\x1b\x33\xb3\x2b\x64\x8f\x25\x85\xf8\x4d\x25\x44\
+\x17\xbd\x9c\x39\x13\xbb\xad\x5f\xef\x32\x3f\x3c\xdc\xba\xd9\xec\
+\xd9\x47\x55\xd9\xb2\x55\xcc\xa1\xa7\x77\x38\x35\xa5\x68\xf2\x70\
+\x82\x79\x05\x83\xc1\x50\x8c\x42\x8c\x90\x4e\x91\x9b\xeb\x6b\xd6\
+\x1c\x1c\xe0\xec\x3c\xca\xba\x5c\xb9\x07\xd4\x6c\xe4\x9e\xb3\xf3\
+\x16\x52\x8f\x96\xef\xed\xc5\x16\xf3\x8b\x65\xc9\x92\xef\xe8\xd9\
+\xaa\x22\x45\x0e\x23\xab\x65\xb0\xcb\xd0\xa1\xe7\xe8\xf7\x2d\x8b\
+\x15\xeb\x22\x24\x34\x2a\x19\xde\x81\xd6\x72\x88\xc1\x60\xf8\xf9\
+\xf9\xe5\x80\xcc\xfa\x61\x24\x35\xc7\x29\xdb\x48\x18\x54\xfc\x99\
+\x59\xb3\xa8\xca\x7c\xb4\x90\x80\x5a\xd8\x0e\x7a\x16\xe4\xe5\xb5\
+\x16\xc9\xd2\xc7\xf0\x7e\x34\xe9\x64\xae\x2a\x54\xe8\x3c\x8d\xef\
+\xef\xd3\x67\xb9\x14\x3d\x1a\x88\x7b\x5f\xf0\x14\x8d\x5f\x58\xb6\
+\x0c\x17\x4d\x30\x18\xec\x40\xe9\x0c\xe5\xb0\x55\xc7\xc6\x8c\x39\
+\xe9\xd8\xba\xb5\xdb\x03\x57\x57\x8a\xc5\xcd\x01\x4b\x08\x89\xfd\
+\x7d\xfb\xf6\xa2\x95\x0d\x4e\x94\x47\x4f\xcf\x9d\x1b\x42\xc9\xd2\
+\x3b\x5a\xb5\xba\x80\x31\xb5\x92\x18\x56\xc6\x59\x02\x30\x33\x30\
+\x68\xa9\x04\xce\x51\x81\x10\xf3\xe8\xf8\xf1\x25\xe2\xff\x83\xc1\
+\xe0\x50\x01\x38\x00\x9c\x0d\x8e\x00\xf3\x69\x3d\xcf\xed\x3a\x6c\
+\x98\x1b\x19\x1d\x18\xb1\x3c\x7f\xfe\x9d\x3e\x56\x56\x66\x8f\xdd\
+\xdc\x36\x62\x75\xbb\x84\xe7\x7d\xe4\x7b\xf9\xd7\x56\xaa\xf4\x9c\
+\x3c\x9e\xa4\xbd\x82\x77\x93\x60\x7c\x56\x73\x85\xc8\x27\xd2\x04\
+\x06\x83\x8d\xb2\xd1\x75\x7b\xfb\x9d\xd0\xc8\xbc\x2d\x0d\x29\x05\
+\x2b\x9e\xa7\x4c\x96\xfe\x49\x9e\xf5\x06\xd0\x38\xe4\xda\x2f\x04\
+\x9e\x39\xb3\x61\x5d\x95\x2a\x8f\xe4\x19\xd1\x5d\xa4\x19\x0c\x06\
+\x1b\x5d\x6d\x70\xf6\x87\x27\x4f\x56\xe3\x2c\x77\xf4\xd4\x1f\x7f\
+\x2c\xc3\x7d\x2e\x45\xd6\x8f\x64\xfa\x48\x39\x8c\x02\xeb\x18\xff\
+\x19\x9c\x0a\x91\xde\xdd\x57\xd7\xad\x5b\xf1\x5f\x28\xff\x51\x89\
+\x74\x06\x83\x21\xa5\xf7\x2a\x82\x75\xc0\x62\xe0\x41\x15\x82\xe4\
+\x14\x2c\xc7\xfd\x81\xa6\x33\x67\x1e\xeb\x6c\x63\x63\x87\x31\x2f\
+\xf9\xee\x2f\xe0\x4f\xa0\x2b\xc6\xe2\xc5\x3f\x07\x83\xc1\x90\x1e\
+\xca\x14\xc7\x36\x6d\x2e\x07\x04\x04\x64\xa4\x62\x18\x83\xc1\x08\
+\x0c\x0c\xd4\x27\x99\x07\x19\x5e\x78\x01\x03\x5c\x8f\x6b\x8f\xef\
+\x6d\x9f\xbc\x58\x88\x9f\xf1\xfb\xfd\xbe\xb1\x53\x63\x30\x18\x90\
+\x58\xef\x7a\x62\xf2\xe4\x93\x56\xa5\x4a\xdd\x57\x9a\x8f\x98\x08\
+\xd1\xf6\x3b\x83\xf2\xbb\xa5\xf1\x7a\x53\x20\x5d\xa4\x0a\x06\x83\
+\xcf\x78\x1d\xc1\x45\xd4\x15\x28\xf8\xca\x15\x2b\xdc\xb7\x11\xdf\
+\x81\xb3\xf3\xe7\xb7\xa3\xec\x16\xd4\xe9\x05\x7e\x08\x0c\xfc\x93\
+\x24\x69\x06\x83\x8d\x2e\x87\x14\x2c\xea\x00\x96\x15\xdf\x81\xa5\
+\x7a\x7a\xfb\xd4\xc2\xb6\xbb\x76\x39\x90\xf0\x91\x48\x3b\x18\x0c\
+\x06\x55\x8f\x93\x4a\xb4\xb1\x10\xe5\xfe\xe4\x9d\x26\xe0\xd7\x0d\
+\x35\x6a\x3c\x7c\x70\xe4\x88\x89\xf3\xc0\x81\x7a\xe2\xbb\xc0\x60\
+\xb0\xc1\xed\x04\x53\xcc\x72\xe6\xdc\x2e\x52\x87\x0a\x06\xa9\x76\
+\xbe\x28\xc4\x7d\x30\xae\x15\xb9\x3c\x47\xfd\x7f\x8e\xa0\x6e\x9c\
+\xad\xc4\xdf\x00\x83\xd1\xc1\xca\x6a\x7d\xd5\x3e\x7d\x2e\x0f\x3d\
+\x75\x2a\xe4\x1b\x06\x39\x5c\x85\x55\xd0\xb0\x55\x2b\xff\xee\x1b\
+\x37\x3a\xa0\x74\x68\x97\x5e\x8e\x1c\xc5\x54\x7a\x7a\x67\xfe\xf3\
+\x29\x62\xb2\xea\x37\x65\x75\xb1\x62\x4b\x71\xcd\x6f\x2c\x44\x25\
+\xc1\x60\xfc\x75\x5f\xbc\x31\xe0\x20\xcd\x71\x2a\x72\x85\xb1\x15\
+\xa7\x9e\xed\x10\x3a\xfa\x10\xfb\xe1\x03\x55\x9a\x0f\x04\xfb\x61\
+\x4b\xa9\x2e\x03\xb2\x2a\x57\xae\xe3\x7f\x75\x5b\x50\x1f\xac\x02\
+\xc6\xa2\x36\x2a\x34\x36\x2c\x6c\x1e\x8c\xcf\x0b\xf7\x97\xc4\xf7\
+\x81\xc1\x81\x73\xd2\xcf\x4c\x02\x53\x3c\x97\x2c\x71\xa6\x7e\xed\
+\x42\x02\xe9\x62\x97\x28\x21\xfa\xe5\x8d\x1b\x03\xfe\x73\x5b\x4a\
+\x18\x15\xb9\x79\x6f\x82\x77\x85\x4a\x65\x80\x65\xdf\x6d\x7f\x8f\
+\x1e\xe5\x54\x18\xaf\xde\xb7\x6f\xc4\xf7\xf4\x25\x63\x30\x0c\x9b\
+\x35\xdb\xae\x9f\x3f\x7f\x98\x00\x9e\x9e\x39\x63\x84\xcb\x15\x50\
+\x98\x08\xd1\x3d\x39\x3e\xbe\x65\xa5\x4e\x9d\xae\x97\x6d\xd8\x30\
+\x42\xfc\x17\x61\x5b\xb1\xe2\x75\xe5\x40\x6b\xf7\xd3\x4f\x77\xb0\
+\xba\x7d\x42\xb0\xf3\x39\xfa\x56\x1b\xcb\xd2\x8e\xb4\x82\xc1\x5b\
+\xcd\xd2\x09\xb1\xb1\x8b\xa8\x1b\xd0\xb9\xb9\x73\xad\x97\xe5\xcb\
+\x57\x15\xab\xde\x1a\xf0\x31\xfa\x9a\x47\x47\x86\x84\x58\xe0\x9d\
+\xc2\xff\xa5\x6d\x64\x5e\x18\x96\x19\x29\x3b\x21\x46\x92\x00\xbd\
+\xfa\xd7\xdb\x5b\xb4\xb8\xa9\x18\xde\x8e\xd6\xad\xfd\x92\x92\x92\
+\xfe\x89\x94\x1a\x83\x8d\x2e\x37\xd8\x03\x9c\xba\xb2\x48\x11\x92\
+\x5e\x4f\x56\x4b\xb2\xd7\xaf\x7f\x1f\x59\x2c\x9d\xff\x6b\xe7\xb6\
+\xf2\xa8\x83\x8a\x52\x0c\xec\xfa\xc6\x8d\x3b\x0f\xf6\xed\x7b\x82\
+\xee\x91\x0d\x10\x41\x7b\x6c\xe8\xd7\x57\x10\x40\x2a\xcd\x00\x2f\
+\xa6\x55\xbd\x97\xc1\x7d\xdc\xef\xbb\xb8\x6c\xb4\xab\x54\x29\x08\
+\x2b\xdc\x27\xc7\x6e\xdd\x4a\x8a\xff\x1a\x76\x77\xea\x74\x52\x31\
+\x38\x74\x65\x89\xc3\x35\xc1\xb6\x7c\xf9\x67\x5f\x92\x93\x97\x46\
+\x04\x05\xad\xc2\x92\xdf\x44\xbb\x3c\x88\xb4\x0c\x29\x45\x67\x79\
+\xbe\x7c\xcb\x44\xda\xc0\x60\xa3\xab\x02\x4e\x8f\x0b\x0b\xb3\xc0\
+\xf5\x67\xf1\x5f\x02\xb5\xa7\xc5\x0a\x97\x60\x63\x64\xf4\xf2\xda\
+\x86\x0d\xbb\xc8\x88\xd4\x8a\x4d\xc5\x8b\xbf\x7b\x78\xe4\x48\x67\
+\x18\x5b\x03\xb0\x80\x3c\xe8\xb6\xc4\xaa\x16\x86\xe7\x4b\xae\x6e\
+\xdb\x56\x02\xda\x16\xeb\xe3\xc3\xc3\xe7\xcb\xae\x2e\x69\x05\x83\
+\x65\xda\xeb\x81\xb9\xff\x6b\x6e\x5b\x1f\xea\xa4\xf9\xf4\xec\xd9\
+\xf5\x10\x9b\xd9\xa7\x6e\x08\xd1\xa4\xc9\x9d\x75\x95\x2b\x07\xee\
+\xeb\xd1\xa3\x9a\xb6\x4c\x1a\xb6\x99\xb7\x95\x52\x8d\xc3\xa3\x46\
+\x0d\x24\x83\x14\x7f\x0f\x0c\x06\x03\xc1\xc8\x63\xe7\xe6\xcd\x73\
+\xf1\xdf\xb1\x63\x11\xb5\xb5\xc5\x56\xf2\xf1\xe7\xcf\x9f\x17\xc1\
+\x90\x16\xa7\xd6\xae\x36\x29\x2e\x6e\x0a\x49\x65\x2f\xd3\xd7\x8f\
+\xbd\xb0\x6a\x55\x75\x91\x66\x30\x18\x5c\x76\x31\x17\x86\x67\x4b\
+\xba\x84\xb2\xb5\x51\x6d\x30\x0f\xa8\x12\x5a\x80\x03\xe5\x0f\x5a\
+\xe1\xc8\xcd\x8b\xe7\x5d\xff\x4a\x01\xf8\xff\xab\xf4\x32\x18\xbc\
+\x97\xce\xfb\xf0\xe8\xd1\xd2\xef\x1f\x3e\x5c\x8d\xfb\xc1\x5a\xde\
+\xc8\x6e\x14\x37\x59\x20\x44\x11\xfc\x5c\x18\xfc\xb0\xba\x48\x91\
+\xd7\x49\xf1\xf1\x0b\x14\xa1\x19\xad\xf7\xf3\xcb\x74\x9e\x3a\xb2\
+\xeb\x66\x12\x78\x05\x1c\x25\xfe\x07\x0c\x06\x1b\x5e\x4b\x50\x5f\
+\xeb\x8c\x37\x57\x66\x76\x87\xe3\x7a\x01\x4c\x81\x5a\xd3\x6e\xbc\
+\x97\x5a\x38\x40\x85\xe7\xa1\x14\xd4\xc4\xf5\x2d\xc4\x43\x43\xe0\
+\x01\x75\x86\x78\x68\xb0\x3c\xf7\xed\x07\xff\x24\x53\x86\xc1\x60\
+\x43\x2c\x4f\xde\x4b\xe8\xcc\xbf\x92\x61\x83\xc4\x8b\x2b\x56\xac\
+\xc3\x78\xaa\x86\xb3\xa3\x4d\x9b\xe9\x66\x39\x72\xc4\xd3\xbb\x36\
+\xe5\xca\x85\xa2\xee\xc9\x22\x3e\x22\xc2\x74\x67\xbb\x76\xd7\x69\
+\xcb\xba\xaa\x54\x29\x43\xf1\xa7\x60\x30\xd8\xe8\x1a\x20\xbd\x6b\
+\xc1\x89\x89\x13\x4f\x5a\xe4\xca\x15\xa7\xac\x56\xa9\x09\xc9\x5c\
+\x30\x33\xeb\x4a\xc1\x72\x0a\x9a\x23\x73\x85\xf4\x2f\x92\x70\xee\
+\xb3\xfa\x9c\x98\x38\x98\xe2\x7a\x30\xd4\xa6\xe2\x2f\xc1\x60\xb0\
+\xd1\xe5\x02\xbb\x86\x3f\x7f\xbe\x62\x77\xc7\x8e\x57\xd0\xf0\xe1\
+\xbe\x5d\xe3\xc6\xf9\x53\xcd\x0e\x87\x36\x7d\xe0\xa9\x53\x1b\x9e\
+\x79\x7a\xae\x83\xa2\xef\x7d\x6c\x2d\xa3\x97\xe7\xc9\x53\x82\x94\
+\x7c\xd3\x96\x93\xc9\x60\xb0\xe1\x15\x03\x87\x81\xa6\x60\x03\x19\
+\x10\xa7\xfc\xb8\x91\xb8\x76\xa6\xd5\x6f\x67\x87\x0e\x57\xe4\x3b\
+\x95\xc0\xc9\xc9\x9f\x3e\x99\x29\x67\x3e\x3c\xef\x03\xfe\x1d\x01\
+\x1a\x06\x83\x1b\x32\x42\x65\x37\x0c\xdc\x8b\x9b\xcd\xa0\xbf\xcc\
+\xf5\x1a\x05\xee\x04\x4f\xa2\xb9\x5f\x6c\xcf\xad\x5b\x2f\x60\xf8\
+\x2c\xde\x7b\x46\xef\x65\x37\x30\x70\xc2\xf5\x1e\x0c\x2d\x27\xae\
+\x6b\x41\x4f\xfc\x3c\x55\xde\xa7\x05\x0c\x06\xe3\x43\x50\x50\x93\
+\xc3\x23\x46\x9c\x93\xce\x92\xaf\x6b\x2b\x54\xf0\x4a\x4d\x4c\x86\
+\x3c\x94\xd8\x8a\x3e\x91\x2d\x6e\x93\x70\xfd\x4c\x5b\xd0\xb4\xc7\
+\xea\x18\x0c\x96\x4f\xeb\xf9\x36\x20\xc0\x92\x4a\x7b\xd4\xed\x8f\
+\x84\x88\xa1\x3c\x4d\xad\xf3\xdd\x18\x59\x96\x11\xe0\x36\x65\x8a\
+\xd3\xc6\xda\xb5\xcf\x90\x81\xc2\xf8\xce\xa7\x3d\x5c\xc0\x60\xb0\
+\xe1\x95\x02\x7f\xbf\x7f\xe8\xd0\xe6\x5d\x1d\x3a\x78\xfa\xda\xdb\
+\xd7\xd5\x88\xcf\xe5\x07\xdf\xae\x28\x50\x20\xec\x53\x74\x34\x9d\
+\xe9\xc6\x83\x13\xa1\x59\x7f\x83\x8c\x10\xc1\xf4\xef\x6c\xe2\xce\
+\x60\xb0\xe1\xd5\x02\xa7\x83\xad\xe4\xca\xe6\x46\x01\x71\x30\xe5\
+\x82\x85\xc5\x41\x8c\xb7\x10\x12\xd8\x62\x5e\xa7\xd8\xde\x9b\x7b\
+\xf7\xda\xfe\x45\xdd\x5e\x3d\xea\x2d\xbd\x48\x88\x32\x42\x57\xc1\
+\x60\xc8\x7c\xc6\x1a\x22\x0b\xb1\xa6\x74\xe9\xb9\x54\x4d\x4e\x06\
+\x77\x74\xf4\x68\x27\x18\x9c\x9e\x92\x36\x46\x63\x7b\xbb\x76\xf5\
+\x21\x23\x94\x63\xa5\x61\x58\xcb\x65\x56\xca\x0a\x6c\x4b\x2b\x2b\
+\x5d\x5c\x40\x2a\x1d\x8a\xa5\x32\x21\xa1\x8b\x60\xb0\x97\xb2\xb0\
+\x10\x8e\x29\xea\x9c\x46\x91\x65\x75\x47\x73\x5e\xbd\x3a\x33\xc6\
+\xc7\x67\xa3\x61\x8b\x16\xfe\x30\xac\xc0\x79\x2a\x55\x6e\xea\xaa\
+\x89\x47\x36\xf0\x60\xc6\x74\xdf\xb2\xc5\x0b\x3f\x07\x60\xac\x46\
+\x8a\x10\xf7\x55\x42\x2c\xc2\xfd\x10\x70\x21\x3e\x2c\x95\x03\x35\
+\x6e\x6b\x6a\x7a\x59\x3f\x6f\xde\x78\xfd\x7c\xf9\x12\xc7\xfb\xfb\
+\xc7\x08\x5d\x05\x83\x7b\x7b\x6d\x69\xd0\xe0\x32\xa4\x13\x1a\xe1\
+\x67\x5f\xb0\x4a\x16\x6d\x33\x0d\xe5\xb9\x6d\x36\x32\x51\xfa\x2a\
+\x15\xe6\x07\xfa\xf6\xbd\x28\xcb\x80\x94\xda\xbc\x78\x94\x0b\x1d\
+\xa4\x4a\xf3\x1b\x9b\x37\x3b\xa2\x8a\x21\x0a\x63\x1f\xa4\xb2\xaf\
+\x22\xb5\xd6\x5a\xe8\x10\x18\x6c\x68\xd6\x30\xac\x33\xb8\x86\x41\
+\xfb\xef\x03\x94\x91\x56\x20\xd3\x83\xee\xbf\xec\xef\xdb\xb7\xbb\
+\x0e\x24\x49\xab\xdc\xa6\x4e\x3d\x80\x7f\xd3\x47\xa8\x82\xbd\xc4\
+\xbd\xfe\x42\x21\x4a\x90\xc7\x72\x4b\xc3\x86\x77\x65\x13\xf8\x5f\
+\xc0\x8e\x77\xf6\xec\xb1\x92\x5e\xcf\x14\x92\x7d\x40\xad\xde\x4c\
+\x9d\xaa\x30\x67\x30\xe0\x09\x9c\x43\xee\x76\x30\x05\x8d\x13\x02\
+\x77\xb6\x6f\x6f\x4f\x3f\x23\x73\xdf\x9b\x14\x6f\x75\xc4\xb1\xd2\
+\x02\x3d\xa3\x97\x45\xbf\x7a\x45\xfd\xa4\xa9\xf4\xa7\x28\x98\xb2\
+\xad\x69\xd3\xdb\xb8\x2f\x28\x24\x7c\xd7\xad\xab\x40\xe3\x64\x74\
+\x10\x9f\xd9\x8c\x67\x35\x85\x2e\x80\xc1\xa0\x73\x1a\x0e\x3f\xa5\
+\x1c\x9a\x37\x27\x83\x4b\x59\x59\xa8\x50\xa4\x86\x38\x50\x2c\xfe\
+\xb8\x49\xb4\xa5\xa4\x0e\x79\x33\x0b\x83\x4d\xe4\x8a\xa5\x5a\x53\
+\xb2\xe4\x53\xf9\x45\xf1\xab\xc6\x67\x9a\x01\xa6\x6c\x6f\xd5\xea\
+\x26\xde\x1b\x25\x75\x58\x6a\x62\xcc\x02\x2b\xb6\x2d\x38\x08\xcf\
+\x0d\x44\x16\x80\xc1\x06\xe7\x4c\xe2\xad\xb8\x46\x61\x95\x7b\xf7\
+\xf1\xcd\x9b\xe5\x36\x86\x86\xa1\x8a\xd1\xad\xab\x56\xcd\x45\xe8\
+\x30\x7c\xac\xac\xa6\xe0\xcc\x16\x43\x46\x07\x43\x7a\x09\xde\x94\
+\x5f\x16\xf1\xef\x1f\x3c\xa0\xe2\xd8\x92\x18\x9b\xa0\xac\xde\xca\
+\x15\x63\xcf\x32\xdd\x13\xcb\x60\xb8\x8e\x1c\xd9\x84\xfe\x38\xc9\
+\xb8\x20\x5f\x17\x63\x57\xa5\xca\x49\xb5\xdb\xbd\x7b\x77\x9f\x33\
+\x33\x67\x1e\x45\x5d\xdb\xec\xbf\x30\xd8\x8a\xf3\x85\x28\x90\x85\
+\x2b\x5e\xfe\xd7\x37\x6f\x2e\x77\x1d\x36\xec\x2c\x54\xc4\x7c\x10\
+\x4a\x20\xe3\x4b\x39\xd8\xbf\xff\x05\xca\x64\x21\x0d\x4d\xf0\x33\
+\x6d\x2f\x4f\x4e\x9e\x7c\x0c\x46\x68\x89\xeb\x09\xbc\x97\x04\xc7\
+\xca\xbb\x4c\x4d\x11\x63\x30\xb0\x25\x9b\x48\x06\xb6\xa9\x4e\x9d\
+\x87\xca\x76\x92\x64\xef\x20\x77\xb7\x01\xab\x43\x6f\x70\x24\xa8\
+\x47\xb1\x39\x8a\x65\x81\x6d\x35\xb7\x63\x58\x29\xa2\xc1\x77\xe0\
+\xb8\x2c\xde\x66\x0e\x07\x17\x1e\xe8\xd3\xe7\x22\x0c\xe9\x0b\x09\
+\x86\xba\x0e\x1d\x5a\x56\x26\x3c\xa7\x90\xb3\x85\x3e\x17\x9c\x28\
+\x87\x5f\xf8\xf8\x0c\xf7\x58\xb4\xc8\x49\x76\xfb\x99\xfb\x27\xab\
+\x7f\xc1\x74\x4b\x1f\x63\x30\x28\x03\x03\x86\x12\xb9\xb2\x60\xc1\
+\xd7\x10\xd8\x5c\xb6\xae\x4a\x95\x40\xfa\x63\xa5\x2c\x0e\xc8\x97\
+\x7b\x0b\x09\x18\x59\x7b\x25\xeb\x43\x32\x82\xce\x41\x02\x70\x68\
+\xd6\x6c\x25\x8d\x61\x3b\x7a\x5c\x07\xce\x77\x2a\xb0\xe9\xe3\x13\
+\x27\x36\xc2\xa3\xe9\x14\xf7\xe1\x43\x19\xd4\xd5\xa9\xbf\x50\x2e\
+\x2c\x5b\x76\xf0\xf0\xf0\xe1\x27\x11\x5e\xf8\x48\x9f\xd9\xba\x6c\
+\x59\x7b\x1a\xdf\xd2\xa8\xd1\x71\xa1\x01\xd2\x61\xa1\xab\xdc\x86\
+\xc6\x4a\x99\x88\xc3\xe9\xb1\xfd\x64\x70\x28\x60\x12\x0c\x2c\xf1\
+\xf6\xde\xbd\xdb\x76\xb5\x6f\xbf\x86\x0c\xc7\x69\xe0\x40\x2f\x6a\
+\x82\x1e\xfb\xee\xdd\x42\xea\xdf\x85\x31\x43\x90\xe2\x5a\x9f\xa0\
+\x39\x79\x6c\x4f\x97\x2e\x9e\x48\xad\x0a\xc5\x6a\x91\x48\x86\x88\
+\x6a\x6e\x7f\x64\xfc\x27\x85\x5e\xbb\x66\x83\xf7\x8b\x0a\x1d\x80\
+\xec\x29\x3d\x16\xac\xb4\xa9\x61\xc3\xaa\x30\xba\x24\x54\x93\x07\
+\x3f\x3e\x7d\x7a\x14\x9d\xeb\xb6\x36\x6e\xec\x4d\xdb\x4c\xa9\x24\
+\xe6\xa4\xb1\xa2\xb5\x93\x67\x3c\x7a\x9e\x02\xa3\x3c\x8f\x90\x83\
+\x1b\xc5\xf9\xf0\x79\xe3\x30\x36\x58\x7c\x2f\x18\x8c\xdb\xbb\x77\
+\xe7\x09\xf6\xf1\xb1\x8c\x78\xf1\x62\x1a\x65\xea\x63\x7b\x15\x82\
+\xae\x25\x26\x32\xaf\xb1\x29\x48\x5d\x4d\x17\x92\x21\x5e\xb1\xb5\
+\xdd\x83\xfb\xb9\xe0\x64\x64\xf8\xaf\x86\xd1\x45\xe0\x5c\x94\xa4\
+\x36\xd2\x01\x03\xbc\x30\xde\x5f\xe8\x28\x60\x54\xce\x6a\x75\x68\
+\x95\xea\x3d\x7a\xd8\xad\x0d\x70\x71\x59\xf0\xc0\xd5\xd5\x7e\x43\
+\xcd\x9a\x8f\xde\x3d\x78\xb0\x50\xc3\xe0\x72\xa2\xda\xfc\x8c\xb2\
+\x92\xe3\xcb\xc5\x3b\xfa\xf5\xeb\x99\x24\x78\x8b\xad\xf7\x6b\xec\
+\x04\xce\x08\x06\xe3\x1f\x6e\xc1\x5a\x45\x44\x44\x14\x40\xf0\xd8\
+\x3e\xe4\xea\x55\x5b\xad\x9e\x00\x02\x5b\xb0\xcd\x64\x54\x21\x57\
+\xae\xcc\x53\xa4\x0e\x70\x35\xd8\xd7\xb3\xe7\x49\x1a\x87\x87\x30\
+\x22\xf6\xfd\x7b\x53\x8c\x15\xd0\xe1\xcf\x59\xf3\xea\xda\xb5\xbb\
+\xe1\x7d\x55\x87\x10\x88\x70\x10\x5d\x87\x6c\xdf\x2c\x0a\x94\x0b\
+\x0d\xec\xea\xd8\x71\x3f\x19\x1b\x04\x90\xde\x4b\xc3\x0b\x45\xf9\
+\xd0\xb0\xcf\x49\x49\x33\x65\xc5\x7a\xba\x39\x59\x18\x2c\xee\x3a\
+\x50\x5b\xc8\x15\x4e\x86\x25\xd2\xa9\xb2\x5f\x73\x1c\x4e\x88\xa3\
+\x34\x7e\xde\xd8\xf8\x10\x7e\xa7\x8d\xd2\xc6\x4a\xc6\xbb\x0c\x75\
+\xd1\xe8\xc0\x05\x2f\x2e\x5d\x5a\x0b\xc7\xca\x99\xcd\x3f\xff\x7c\
+\x28\x32\x28\xa8\xa0\xa6\xc4\x9f\x4c\x82\xfe\x88\xad\xe4\x8b\x2f\
+\x5f\xbe\x2c\xf5\x5a\xba\xd4\x09\x8a\xd1\x61\x30\xce\xa3\x52\x9f\
+\xa5\x0a\xa8\x27\x32\x0a\x0c\xc6\xbd\x03\x07\xca\x91\x9a\x96\x8c\
+\x73\xed\x01\x49\x45\x79\x37\x98\x82\x66\x8c\xc1\x48\x9b\xa2\x55\
+\x82\x44\x5c\xe7\x81\x51\x1a\xb1\x2e\x5f\x13\x21\x1a\xe8\x60\xd1\
+\x6b\x6d\xa9\x9d\x62\x0c\x56\x95\x95\x11\x0b\x64\x29\xcf\x2e\xfa\
+\x9c\x74\xa6\xc5\xb3\xfa\x60\x4b\xac\x82\xc6\x58\xdd\x4c\x32\x6d\
+\x65\x63\x30\x5e\xf9\xf9\x4d\xb7\xaf\x5b\xf7\x01\x9c\x0f\xb1\x64\
+\x50\x4a\xda\xd4\x3d\x67\xe7\x2d\x74\xde\xc3\xfd\x68\x1a\x43\x0e\
+\xe6\x4b\xac\x1e\x87\xe0\x94\xb8\x88\x77\x3f\xe2\x1d\x8a\xef\xb5\
+\xd0\xd1\x15\x3d\x9b\xc6\xaa\x16\x89\xeb\x67\x99\x97\x79\x8b\x1c\
+\x2e\x1a\xef\xe5\x03\xab\x89\xcc\x02\x83\x41\xe7\x33\x70\x02\x69\
+\x44\x92\x7b\x9d\x8c\x8b\x74\x24\xb1\x9d\xb4\x95\x5b\x31\x7f\x1a\
+\x83\x91\x25\xef\xeb\xde\xdd\x1d\x8e\x86\xd9\x10\x73\xb5\x27\x3d\
+\x4a\xc4\xc3\xee\x09\x1d\xc7\x93\x73\xe7\x66\xdb\xd7\xab\x77\x97\
+\x3e\x03\xc5\xef\xac\xcb\x95\x5b\x4a\xd2\xeb\x22\x0b\xc1\x60\xa3\
+\xd3\x03\x0d\xc1\xa6\xd7\x37\x6d\xda\x8c\xb3\x5d\xb0\x43\x8b\x16\
+\x2b\x05\x80\xac\x8d\x08\x4a\x07\x43\xd8\xe0\x12\x85\x0b\xc8\xd1\
+\x00\x6f\xdf\x34\xc4\xb8\xfc\xc8\x10\x4f\x4e\x9a\x54\xe8\x1b\x61\
+\x89\xa1\xa0\x2b\x38\xdd\x58\x88\x0a\x59\xf8\xd9\x4a\x82\x13\x6e\
+\x6c\xd9\xe2\x88\x4a\x84\x57\x32\xf5\xcb\xeb\x3b\x53\xe5\x4a\x4b\
+\xd9\xf6\xb5\x60\x41\xf1\x4f\xc1\x60\xc8\xf3\xcd\x1c\x70\x81\x00\
+\x2c\x4b\x94\xb8\x8d\x56\x54\x09\xf7\x0f\x1f\x9e\x1b\x74\xf1\xa2\
+\x1d\x02\xe8\xfe\x72\xdb\x99\x40\x4a\xca\x2f\x7d\x7d\x9b\x68\xf6\
+\x1d\x00\xed\xf0\x7c\x83\xcc\x79\x0c\x92\xe7\xc3\x38\x70\x4c\x16\
+\x7b\x6c\xeb\x43\x2d\x7a\x1e\xa5\xb4\x1d\xe8\xd7\x6f\x07\xee\xf5\
+\xbf\x27\x19\x1c\xab\x7f\xb4\xdc\x7a\xa7\x5f\x1e\x2a\x83\xfb\x2e\
+\x2b\xa1\x80\xb3\xf3\xe6\x4d\x40\x70\xf8\x33\xb6\x99\xe1\x28\x5c\
+\x9d\x1a\x17\x11\xf1\x07\x4a\x64\x76\x22\x55\xec\xe5\xc6\x5a\xb5\
+\x1e\x6b\x86\x1a\xd0\x2b\x40\x1d\x60\x97\xfd\xc0\x43\x48\xf0\x95\
+\x32\x43\xd6\x94\x28\xf1\x4a\x8e\xb7\xd2\x81\xcf\xd5\x49\xd6\xd7\
+\x95\xf8\x0e\x83\x1b\xa0\x7c\xbe\xad\x8d\x1a\x5d\x26\x47\x8d\x48\
+\x67\x30\xd8\xf8\xf2\xa1\x3a\x7c\x1b\x9c\x26\x31\x4a\xea\x17\xb6\
+\x9c\x2e\x38\x1b\x59\xbe\xbd\x7b\x77\x0d\x29\x73\x69\xbc\x5b\x4f\
+\xb3\x1a\x61\x99\x81\xc1\x53\xa7\xfe\xfd\xc7\xc5\x86\x85\xcd\x25\
+\x37\x7c\xd0\x85\x0b\x6d\x7f\xe0\xca\x0b\x03\xac\xd2\x41\x74\xbe\
+\x95\x95\xe9\x94\x40\xad\x52\xf2\x32\x97\xe0\x92\x5e\x5b\x67\x06\
+\x1b\x5d\xe5\x84\x98\x18\xe3\x0b\xe6\xe6\x07\xd0\x7a\xd8\x8f\xce\
+\x72\xc8\xcc\x58\xac\xdd\x88\x43\xca\x96\xa7\xc0\xb9\xe2\x7d\x62\
+\xf2\xe4\x93\xd8\x8a\xaa\x4b\x6b\x90\xc9\xd1\x4a\x26\x4b\x37\x14\
+\x1a\x30\x11\xa2\x2b\x55\x24\xfc\x20\xa9\x72\xc6\x64\x68\x48\x93\
+\xbb\x46\x57\xb4\x57\x3e\x22\x8d\xad\x15\xf8\x42\x9e\x0d\x3f\x81\
+\x83\x04\x83\x91\x2e\x59\xfb\x72\x3b\x96\xf8\xf1\xe3\x32\x5c\xa7\
+\x08\x80\x3c\x7e\x24\x87\x20\x63\x5e\x4f\xe1\xbd\x8c\x44\x61\xab\
+\x39\x9e\xf7\x08\x7f\xfa\x74\xc5\xb9\xf9\xf3\x0f\x45\x05\x07\x37\
+\x48\x65\xc5\xc8\x4b\xc9\xc3\x60\x1c\xf5\x0a\xd7\xf5\x44\x70\x19\
+\x34\x0f\xf2\x34\x31\xd9\x41\xc6\xe5\xf6\xc7\x1f\x8e\xb8\x5a\x80\
+\x9f\x35\xb6\xd1\xef\xb0\xcd\x36\xc7\xfd\x1c\x70\x98\x5a\xf5\x9d\
+\xc1\xf8\xa7\x31\x2e\xd9\xf5\xc6\x48\x1a\xce\x66\xf9\xcd\x7e\x9e\
+\x56\x80\xb3\x73\xe6\x1c\xc1\xb3\xf6\xf2\xdd\xa2\xe0\xaf\x60\x3d\
+\x0d\x43\x1b\x8d\x77\x7f\xc7\x35\x9b\xcb\xb0\x61\x53\x91\xab\x79\
+\x8a\x12\x91\x85\x8e\x42\x26\x3d\x1f\x24\xfd\x97\xbb\x07\x0e\x6c\
+\x45\x1c\xd2\x54\x86\x18\xa2\xa5\x91\x3d\xc1\xd9\x35\x11\x69\x70\
+\x1f\xa3\x43\x43\x57\xc4\x7e\xf8\xb0\x04\x0e\xa5\x00\xb9\xe2\x5d\
+\x4c\x57\x75\x34\x06\x63\x7f\xaf\x5e\x3f\xe3\x9b\xff\x81\x52\x6b\
+\x77\x7a\xfa\xf4\x03\x81\x81\x81\xdf\xf4\x00\xe2\x9d\xb3\x72\xfb\
+\x75\xf3\xe8\xef\xbf\xff\x2e\x93\xa6\x4b\x0a\x1d\x84\xb1\x10\x46\
+\x52\xfb\x32\xc5\xb6\x42\x85\xe7\xc8\xbc\x19\x6b\x9a\x2d\xdb\x22\
+\x25\x39\x00\x09\xd0\x67\x50\x97\xe7\x4e\xf7\xe4\xfd\xc4\xe7\xe8\
+\x0c\xe6\x83\xca\xf4\x5e\x59\x91\xe0\xef\xd8\xad\x9b\xfa\xb3\xc9\
+\xde\x79\xff\x1c\x0c\x0e\x9c\xe3\x0f\x71\x9a\x97\x99\x99\x13\x55\
+\x19\x48\x63\xba\xaa\x34\xef\xd0\x06\x64\x1e\xda\xec\xee\xdc\xf9\
+\x2a\xbd\x87\xd2\x9f\xd3\xba\xae\xb8\x75\x72\xea\xd4\x15\x38\xaf\
+\x86\x93\x01\xc1\xdb\x6a\x8d\x1a\xc1\xaa\x0e\x4d\x9b\xde\xba\x6e\
+\x6f\xbf\xf3\xed\xbd\x7b\x2b\x11\x1a\x89\xc5\x19\x35\x04\x29\x62\
+\x73\x94\x50\x83\x55\x99\x32\xd3\xe9\x7d\x5a\x11\xe9\x9c\x8b\x9f\
+\x3b\x81\x51\xe0\x22\xda\x7a\x8b\xf4\x00\x83\xfb\x81\xa3\x95\xb0\
+\x89\xcb\x90\x21\x1e\x88\xbf\xc5\xac\x2e\x51\x62\xd0\x37\xde\xcd\
+\x69\x5d\xa6\x8c\x1f\xc5\xf0\x9e\xb9\xbb\xdb\xe2\xbe\xa0\x8e\x7f\
+\xb6\xba\xf4\xb9\x50\x06\xe4\x86\xaa\x84\xc9\xb8\xcf\x85\x78\xe4\
+\x02\xa4\xc4\x2d\x5c\x91\x2f\xdf\x3e\x72\x0a\xf9\x3b\x3a\x6e\xc7\
+\xf8\xcf\x42\x02\xdb\xcb\x7e\x64\x70\x90\x7b\x30\xa5\xf3\x2d\x56\
+\xc9\x6d\x74\x2f\x57\x76\x57\x91\x5e\x60\x70\x08\x01\xec\x4b\xd9\
+\xf8\xb8\x8e\xd4\x38\x07\xd5\x07\x0d\x14\x39\x73\xa5\x1e\x0d\xef\
+\x0c\x49\xe5\xcc\x94\x53\x47\x3f\x57\x1f\x70\x84\xfc\x0c\x0f\xc8\
+\x89\x02\x7e\x41\x6c\xf2\xb6\x14\xb4\x55\x69\x7c\x86\x66\xea\xf3\
+\x5d\xd1\xa2\x8f\x70\x8d\x57\xb6\xa4\x47\xc7\x8e\x3d\x7d\x7a\xe6\
+\x4c\x1b\xac\x8a\x4e\x18\x3b\x07\xd6\x11\xe9\x04\x06\x77\xcd\x29\
+\x22\xcf\x41\x95\x14\x25\x2d\xa9\xfc\xfc\x88\x1c\x0e\x10\xa3\xb5\
+\x50\xde\x51\x40\xed\xac\xe4\x1f\xf2\x65\xbc\xa7\xb3\x49\xc5\x27\
+\xa6\x4c\xe9\x8b\x34\xb1\xe7\x64\x48\xc8\xbc\x79\x06\x63\x2b\xa7\
+\xe5\x68\x69\x42\xcf\x64\x48\xe4\xaa\xdf\xd6\xad\x9b\x64\xbd\xdd\
+\x14\x22\x62\x9a\xe7\xe8\xb9\xec\x87\xb7\x5c\xa4\x27\x18\x0c\xe8\
+\x8d\xac\x32\xcf\x95\x2b\x42\xd9\x56\x39\x0f\x1a\xe4\x49\x21\x86\
+\xd4\x1a\x34\x22\x76\xf7\x9a\xde\x81\xe7\xef\x24\xae\x5b\xc1\x66\
+\x3a\xb8\xe2\x95\xc6\x99\x6d\xb6\xc7\xc2\x85\x2e\xa7\x67\xcc\xd8\
+\x47\xdb\x64\x0a\x8f\x28\x31\x45\x18\x11\x49\x37\x24\xdf\xda\xb5\
+\xcb\x41\x1a\xda\x68\xb0\xb2\x12\x40\x47\x22\x78\x94\x65\xc9\x92\
+\xef\x50\xa5\x71\x0f\xe7\x5e\x3f\x8d\x26\x2b\xe9\x72\x9e\x65\xf0\
+\x8a\xd7\x10\xce\x12\xb3\xfd\xbd\x7b\x53\x69\x4f\x32\x79\x33\x61\
+\x50\x5b\xb4\x65\xec\x70\x3f\x58\x51\xe1\x5a\x53\xaa\xd4\x13\x2a\
+\x01\x92\xba\x9a\xed\x74\xd0\xe8\x72\x82\xed\xc0\x3f\xc0\x22\x24\
+\x27\x0f\x26\x83\xc7\xe4\x96\xd9\x47\x6e\x35\x8d\xb4\x3e\xe3\x28\
+\x7a\xee\x36\x6d\xda\x71\x38\x9b\x66\xa3\x37\x9e\x39\x85\x59\xf0\
+\x7b\xb7\x68\xab\x0a\x76\x11\xe9\x00\x06\x1b\x5d\x41\xf0\xd7\x17\
+\xde\xde\x6b\xe9\x9b\x5d\x86\x11\x96\x6b\x26\x06\xc3\xb8\x82\x2d\
+\xf2\xe4\x89\x80\xe4\xf9\x72\x5a\x19\x42\xaf\x5f\xb7\x81\x87\x30\
+\x12\x46\xfa\x46\xe8\x38\x8e\x8d\x19\xf3\xd3\xfa\x6a\xd5\xfc\x94\
+\x55\xdc\xf9\xd7\x5f\x3d\xde\x3c\x7d\x5a\x3c\x95\x8c\x95\x1b\xa4\
+\x15\xfa\xe1\xc9\x13\x63\x7c\xfe\x3d\xf8\x6c\x41\x26\x42\xfc\xb2\
+\xa9\x6e\xdd\x29\x18\x8f\x91\xdb\xef\x2d\x22\x9d\xc0\x60\xc3\x2b\
+\x0f\x4e\x24\xa1\x1f\xe8\xa5\x50\x31\x28\x89\x19\xcd\x07\xf7\x91\
+\x11\xba\x2f\x58\xe0\x8a\xe7\xdd\xc1\x22\x60\x05\x78\x34\x5f\x50\
+\xed\x5d\x74\x74\x74\x11\x1d\xff\x5c\xb9\xc0\x71\x14\x2e\xc0\xea\
+\xfc\x56\x1a\xde\x32\xa1\x01\x32\x2c\x1a\xa7\xb0\x02\x44\x9d\x14\
+\xe3\xa4\xea\xfa\x09\xc8\x57\x6d\x4d\x2b\x3b\x09\xf6\x42\xc6\x7d\
+\x33\x25\x18\xe0\x59\xe1\xf4\x12\xb3\x65\xb0\xc0\x51\x03\x19\xa3\
+\x32\xc0\xd6\xf1\x85\x2c\xe7\x49\x40\x42\xb4\x89\x92\x85\x8f\xb1\
+\x36\x34\xbe\xab\x53\x27\x5f\x8c\xd5\xd4\x4c\xb5\x82\x83\xa5\x36\
+\x9e\xe5\xd7\xc1\xcf\xd5\x10\x65\x40\xf3\xcf\x9b\x98\x1c\x7a\x74\
+\xfc\xf8\x58\xad\xed\xe4\x6e\xe5\x73\x92\x87\x13\x61\x85\x70\xba\
+\x0f\x38\x74\xc8\x04\xd7\x4b\x38\xf7\x25\xdd\x3b\x78\x90\x2a\xed\
+\x17\x82\x25\x31\x16\xa8\x08\xf1\xa6\x9b\x68\x2d\x83\xf1\xfa\xf6\
+\xed\x11\x14\x0c\xa7\x32\xa0\xed\xcd\x9b\x2f\x55\x32\x33\x60\x50\
+\xb7\xa9\xe9\x08\xb4\x34\x57\x91\x6b\x7e\x81\x10\x85\xb0\x12\x9e\
+\xd0\xe8\x21\x10\x87\xab\x83\xae\xad\x02\xa4\x7c\x26\xb3\x4e\xfa\
+\x0a\x09\xca\x17\x85\xd1\x24\x28\x15\xf5\x70\xb8\xec\xb5\xfb\xe9\
+\xa7\x67\x54\x85\x6e\x5f\xbf\xbe\x2b\x8d\x1f\x1b\x37\xee\x38\xad\
+\x92\x4a\x32\x00\x2a\x2d\x86\xad\x2c\x50\xe0\xb5\x5c\x09\xfd\xd3\
+\xb3\xd3\x2b\x83\x65\x1e\x86\x42\xbe\x61\x05\xae\x23\x61\x48\xb3\
+\xc1\x68\xd9\x92\xf8\x34\x6d\x31\xe5\xf9\xc7\x8b\xc6\x50\x02\xe4\
+\x8b\x1c\x4c\x67\x6c\xc5\xee\xc8\x34\x2b\x7f\x5d\xcf\xe0\x80\xc1\
+\x8c\x00\x53\xcc\xf5\xf5\x3f\xd1\xb6\x93\x1c\x26\xa4\x23\x43\x4a\
+\xd8\x14\x3e\x40\xd2\x33\x75\x03\x9a\xaf\x99\x08\x40\x5b\xea\x67\
+\x9e\x9e\x6b\x94\x7e\x78\x44\xda\x7a\xcf\x16\x22\x8f\x48\x07\x30\
+\xd8\xf0\x2a\x81\x46\x96\x65\xca\xd4\x41\xb6\x86\xba\xae\x6e\x77\
+\xc7\x8e\x54\xe8\x99\x5b\x4a\xf4\xa5\x10\x21\xf8\x1a\xee\xbe\x70\
+\xa1\x3d\xc6\x17\x28\xb9\x8c\x88\x6d\xcd\xd5\xf5\x6c\x9c\x8b\xcb\
+\x97\xef\x78\x78\xf4\x28\xc5\xe4\xa6\x20\xdf\xb2\xa1\x62\x44\x28\
+\xe6\x7d\x47\x89\xcf\x18\xaf\x2a\xb4\x00\xa3\x3c\x44\x5e\x5d\xd2\
+\xde\xdc\xd1\xb2\xe5\x0d\x32\x52\x8b\x02\x05\xea\x89\x74\x04\x83\
+\x0d\x2f\x2f\xea\xef\xe6\x9d\x98\x38\xf1\xa4\xaf\x9d\x1d\x95\x02\
+\xa9\xc8\x5d\x2e\xdd\xed\x57\xd6\x56\xa8\xf0\x48\x7a\x39\xdd\x2f\
+\x5a\x58\x8c\xa2\x2d\x9a\x4d\xf9\xf2\x57\x7e\x00\xdd\x98\xa6\x52\
+\xc6\x2f\x17\x0c\xed\x37\x29\xce\x94\x44\xa2\x4c\xa9\xc5\x25\x69\
+\x0b\x49\xab\x1f\x19\x9a\xdc\x6a\x8e\x4a\x4e\x4c\x34\xc3\xb5\x8b\
+\x4c\x19\x3b\x44\xff\x9d\xf4\x28\x03\x62\xb0\xd1\xe5\x01\x7b\x82\
+\x63\xc0\xec\x94\xb9\x4f\xcd\x48\x50\x00\x7b\x3f\xe1\xe3\xc7\x99\
+\x30\xb4\xfd\xf0\xea\xbd\xa6\xd8\x17\x9d\xfd\x36\xd7\xaf\x7f\x8f\
+\x3c\x7b\x3f\x50\x05\x79\x71\x24\x42\xfb\x9e\x9a\x31\xe3\x98\x0c\
+\x8c\x67\xd3\x4e\x02\xa0\x8a\x0a\xc4\x2b\xe3\x94\x5e\x78\x02\x90\
+\xa5\x51\xf9\xe8\xf7\xf1\xb9\xdf\xc8\x55\xd2\x1b\x6c\x28\xd2\x13\
+\x0c\xc6\x8e\xd6\xad\x3d\x94\x95\xed\xfc\xe2\xc5\xa3\x29\xa9\x18\
+\xf1\xae\x53\x08\xa2\x7f\x22\xaf\x20\x6d\x3d\x7f\x30\xa5\xb4\x51\
+\xb2\x3c\x29\xbf\x46\x0e\xe6\x00\x5a\xb1\x70\x1d\x0b\xa6\x1c\x19\
+\x35\xea\x2c\x7d\xf1\xa4\x62\xb0\xe5\xb1\xb2\x27\xae\x2e\x52\xe4\
+\x03\xae\x9f\xc8\xeb\x09\x62\x38\x9d\xc0\x60\x24\xc5\xc5\xfd\xb2\
+\xbf\x4f\x1f\x92\xeb\x53\xd7\xa8\x61\x65\xbb\x8f\xb3\x90\x23\x32\
+\xf7\xad\x92\x3e\x7d\xfa\x23\x8d\x2b\x4c\x13\x92\xf0\xcb\x6a\x67\
+\x0b\xad\x56\x1a\x41\x71\x27\x8d\x15\xeb\x2d\x82\xfe\x6f\x49\xda\
+\x82\x56\xfb\x54\x02\xe8\xea\xb3\x1d\x6d\x47\xf1\xf9\xad\x6d\x8d\
+\x8c\x14\x99\x87\x99\x22\x1d\xc1\xe0\xf8\x5d\xf7\x37\x77\xee\x58\
+\x51\x3f\x38\xfc\x41\x3e\x87\xd1\xc5\x1e\x19\x37\xae\x59\x5a\x15\
+\x94\x61\x70\xeb\xa4\xd7\xef\x09\xae\x65\x85\x0e\xe0\x5d\x40\x40\
+\x3d\xac\xd8\xe7\x69\xc5\x22\xe3\x59\x5f\xb5\xea\xd3\x07\x87\x0f\
+\xf7\x48\xe5\x6c\xd7\x9a\x9e\x3b\xb6\x6e\x7d\x5d\x36\xd5\x2c\x47\
+\x0d\x59\x90\xa5\x13\x8b\x5c\xd4\x0f\xe9\x1e\xb3\x63\xb0\xa8\x11\
+\x38\x08\x5c\x2c\xf5\x55\xd2\x1c\x9f\x82\xa7\xf3\xa0\xe2\x25\xdc\
+\xdf\xbf\x7f\x43\x1d\xca\xcf\xec\x47\x2b\x16\xa4\x1c\xee\x4a\x4d\
+\xcf\x68\xe5\x7c\xa6\xc4\x27\x31\x76\x0b\xc5\xbb\xb1\xef\x1f\x3e\
+\x5c\xad\xc8\xfd\xe1\xaa\x8f\x33\xe1\x65\x32\xc4\x8b\x56\x56\xe5\
+\x04\x83\x91\x41\xe9\x54\x75\xc0\x7c\x22\x0d\x40\x88\xe1\x67\x45\
+\x3a\x81\x88\x9e\x78\xbd\x84\x04\x62\x0b\x14\x60\x2f\x92\xc5\x86\
+\x57\x0e\x1c\x77\x6b\xe7\x4e\x07\xc8\xb4\xdf\x70\x1e\x38\xb0\x8b\
+\x52\x2b\x08\x8e\xd7\x88\x4f\xf6\x10\x1a\xc0\x0a\x77\x9d\x3c\xb6\
+\x58\x29\x5b\x68\xac\xe4\x75\xc0\xb1\xd4\xf5\x35\x2b\x56\x72\x06\
+\x43\xa5\x4e\xa3\xd2\xd3\x4b\x40\xeb\xe5\x37\xd4\xe1\x95\xdc\xf5\
+\x1a\x75\x6c\x4f\x65\x2b\xe2\xb1\x3a\xb0\xe2\xd5\x03\x67\x82\x43\
+\x28\xd8\x2d\x6b\x05\x93\xd5\x67\xbb\xd8\xd8\x45\xd2\x49\xa4\x18\
+\x56\x49\x6c\xaf\xe3\xa8\x31\x0b\xc6\x1b\x4b\x1d\x4d\x27\x25\x2b\
+\x47\xa3\xfe\x6e\x3d\xeb\xab\x30\x32\xd3\x1d\xff\xab\xd2\xd9\xd5\
+\xa6\x5c\xb9\x17\xa4\xc3\x12\x1b\x19\x59\x0f\x63\x4b\x28\xc4\xa0\
+\xac\x7a\x72\x05\x2c\xad\x0b\xe2\xae\xb2\x6f\x9d\x6a\x7d\x8d\x1a\
+\x9b\x28\xdf\x12\xfc\xb2\xb6\x52\x25\x8a\xc1\x15\x97\x45\xbe\x15\
+\x60\x48\xf7\x29\x23\xc5\x7f\xfb\xf6\xed\xb1\xb1\xb1\x94\x87\xe9\
+\x02\xa6\x20\x91\xfa\x36\x72\x3a\xd7\x93\xbe\x0a\xad\x96\x8a\x4c\
+\x3b\x15\x03\x8b\x0c\x06\x83\x8d\x2d\x37\xf8\x02\xf1\xbb\x70\xea\
+\xec\x6a\x9e\x3b\x77\x28\xf5\xc7\x43\x96\x8a\x9f\x14\x35\x8a\xa5\
+\x2b\x4a\x65\x1e\x52\x73\x47\xbb\x4a\x95\x1c\xa4\x01\x1e\x05\x4b\
+\xeb\x80\xe1\xb5\xa2\xfe\x0e\xf4\xef\x93\x86\x93\x40\x82\x4d\x60\
+\x38\xdd\xbb\x0e\x1b\x46\x92\x83\x63\x95\x2f\x95\x6d\x4d\x9b\x5e\
+\x91\x81\xf2\x81\x60\x5b\x70\x02\x54\xd6\x2e\x2b\x5f\x28\x14\x3c\
+\x17\x19\x04\x06\x1b\xdb\x32\xac\x02\x6f\x34\x3b\xbb\x92\xe2\x96\
+\xb2\x9a\x41\x51\xf9\x2c\x0c\x4c\x2d\x65\x4e\xc6\x86\xe7\x5d\x1f\
+\x9f\x3d\x5b\x8f\x56\x0d\x99\x11\xb2\x55\x47\xce\xad\x15\xc1\x49\
+\x74\xbe\x43\xbf\xbb\xab\xe8\xe2\xfa\x00\x32\x0e\x3e\x3e\xd6\xd6\
+\x3b\x65\x95\x41\x71\x0a\x2b\xa0\xa4\x29\x3a\x2e\x2c\x8c\x8c\xad\
+\x81\xd0\xc0\xd9\xb9\x73\x27\x4b\x63\xa4\xdc\xcd\x46\xf8\x79\x15\
+\x8c\x6f\x65\xba\x56\x5e\x30\x18\xab\x8b\x17\xef\x85\x00\xb9\x3a\
+\x21\x1a\x5b\x2b\x7f\xe7\xc9\x93\xf3\xae\x2e\x5a\xf4\x1e\x09\xb8\
+\x5e\xb5\xb3\xdb\x75\xd1\xdc\x7c\x1f\x3d\x43\x7f\xf3\x4b\xe4\x01\
+\x55\xf2\x1f\x91\xcd\x1f\x83\xc2\xd2\xa7\x90\x54\x98\x86\x7b\x15\
+\x75\x08\x52\x84\x6c\xb3\x58\x8c\xb7\xa1\xd4\x48\x31\x95\x9c\x04\
+\x1a\x51\xe5\x04\xf8\x15\xf1\xc9\x6b\xb8\x6f\x23\xab\x2e\x7a\x51\
+\xa5\x85\x52\xb5\x80\x8a\x0c\xef\x88\xe7\xcf\x57\x92\x54\x04\xbe\
+\x48\x76\xcb\xd5\xf2\x2d\x38\x3a\x5d\x3e\x17\x83\x41\xee\xf3\xb0\
+\xc0\xc0\xe5\x08\x94\xfb\x22\x24\xf0\x1c\xa5\x31\xc5\x92\x93\x93\
+\x7b\x51\x85\x42\x5c\x64\xe4\x0c\xac\x6c\x41\x1a\x32\xed\x85\x84\
+\x04\x0a\x42\x83\x71\x5e\x7a\x41\x2b\x05\x79\x09\x11\x6c\x56\xb6\
+\x73\xbe\x60\x71\x1d\x91\xa0\xcf\xaf\xd1\x58\xc4\x80\x56\x65\xfb\
+\x9f\x7f\x0e\x20\x2f\x2e\x25\x7d\xcb\x2c\x94\x30\x3c\x9b\x48\x06\
+\x28\xd3\xe5\x3a\xcb\xec\x1d\x2b\x32\x38\xc4\xef\x94\xd5\xfe\x86\
+\x89\x10\xcd\x45\x3a\x80\xc1\x46\x57\x0c\x1c\x2e\x57\x84\x26\x58\
+\xdd\x5a\xe2\xfc\x16\x08\x27\x84\xab\xb6\x4c\xbb\x02\xa4\x4e\xdd\
+\xa6\xea\x04\xd4\xa5\xcd\xc5\x3b\x21\x60\xca\x8a\x02\x05\xa2\xf0\
+\xbb\xef\x56\x97\x2c\x49\x92\x7f\x8b\xa5\xe8\xad\xce\x00\x2b\xf2\
+\x45\x69\x3c\xa6\x02\x70\x5f\xb4\x68\x35\x79\x36\x15\x83\x52\x56\
+\x3b\xba\x92\x21\xe2\x33\xbe\x87\xe6\xcc\xf2\xc3\x23\x46\x9c\xc3\
+\x39\x36\x5e\xae\x78\xfb\xd3\xeb\x73\x31\xd8\xf0\x4a\x83\xd9\x48\
+\xc2\x0f\xf5\x69\xc1\x64\x44\x38\xcf\x25\xbd\xbc\x7e\x9d\x82\xe8\
+\x39\x85\x06\x2c\x8b\x17\x3f\xaf\xd1\x7e\xeb\x39\x2a\x18\xf6\x24\
+\xc6\xc5\xd1\x7b\xa6\x10\x02\x32\x53\x0a\x61\x41\x13\x5d\x51\xdd\
+\xba\x7b\xf0\x60\x1f\x48\x38\x84\x49\x03\xdb\x75\x70\xc0\x80\x09\
+\xa8\xb2\x50\x1b\x21\x2a\x2d\x6e\xec\xed\xd6\x4d\xe9\x0b\xb1\x96\
+\xc6\xce\xcc\x9a\x75\x14\xfa\x31\xbd\xae\xae\x5f\x3f\x1d\x15\xf7\
+\x96\x78\x27\x88\xc6\x97\x66\xcf\x3e\x5f\x30\x18\xe9\x79\x16\x8a\
+\x8f\x8c\x9c\x87\x34\xb1\x73\x70\x3e\x44\x1d\x1e\x39\x72\xa2\x90\
+\x50\x56\x00\x6a\xb9\x8c\x7a\xb5\x48\x24\x4b\xef\xa5\x3e\xe8\x32\
+\x2e\xd6\x04\x2c\x05\xbd\x95\x81\x64\x70\x08\x38\x2b\xbd\xf3\x26\
+\xea\x4a\xed\x5d\xe4\x8b\x17\x73\x51\x41\x11\xa0\x19\x87\x93\x1a\
+\x9a\xa6\x60\x2b\xd2\x00\xc5\x58\x92\x74\x08\x25\x52\x58\x01\xbc\
+\x15\xe4\xe5\x55\x9e\x1c\x2e\xb4\xaa\x53\xf3\x4d\xbc\xab\x68\xce\
+\x0c\x4a\x97\x32\x20\x06\xd7\xde\x81\xbd\xc0\x25\xe0\x10\xd9\x46\
+\xeb\xac\x5c\xb1\x36\x83\x29\x54\xfc\x29\xe5\xf0\xea\x83\x7a\x1a\
+\x09\xc4\xa7\xc9\xab\x89\xf2\x19\x4b\x92\x3b\x8f\xfb\xf0\x81\x24\
+\xce\xab\xd1\xaa\x82\x6b\x7d\x1d\x28\x6f\x1a\xf5\xcc\xc3\x63\x1d\
+\x2a\x0e\x4e\x6f\x6f\xd1\xc2\xeb\xb1\x9b\xdb\x46\xa4\xc2\xd5\xa1\
+\x95\x98\xfe\xed\x38\x8f\x26\x53\xa3\x4c\x88\xda\xbe\x24\xc3\x83\
+\xcc\x85\xc7\x33\x3f\xbf\x02\xb8\x3f\x49\x5e\x50\xfc\x7e\x73\x8c\
+\x57\xc1\xbb\x89\xd2\x68\x2f\xa5\xd7\xe7\x62\xb0\xe1\x15\x07\xf3\
+\x51\xf5\x00\x9c\x27\x17\x95\x55\x01\xab\x58\x08\xe4\x10\xa6\xa4\
+\x52\xaf\x46\x5a\x92\x5f\xb6\x36\x69\x72\x27\xf2\xe5\xcb\xfe\x38\
+\x37\x39\xa1\xf1\x07\x69\x4e\x36\x83\x63\x25\x8e\x9e\x49\x21\xdb\
+\xdc\x59\xec\xcd\xac\x0d\x8e\x00\x67\x81\xc3\x61\x30\x7b\x49\x98\
+\x48\x6d\x60\x9d\x3a\x5d\xc1\xd8\x38\x68\xaa\xdc\xa0\x15\x5e\x3a\
+\x8c\x0a\xca\x2f\xa0\x89\x20\x79\x38\x4f\x92\x61\xd2\xbb\x94\x9d\
+\x23\xb3\x55\xb6\xa5\x5b\x0c\x8f\xc1\x80\xf7\xb2\x3f\xc5\xea\xa0\
+\xaa\x15\x49\x46\x07\x4f\xe5\x65\x52\x56\xd6\x2a\x8f\xb1\xa6\x67\
+\x97\x57\xae\xdc\x8f\x70\xc3\x75\xa9\xad\xf2\xc1\xcb\xcb\x2b\x3b\
+\xa4\xfe\x9c\xe4\x7d\x92\x59\xce\x9c\x7d\x85\x0e\x01\xd9\x2a\xbd\
+\xb0\x65\x54\x9f\xef\xd0\x3a\x3a\xd8\xa1\x55\xab\xb6\x57\xd6\xad\
+\x6b\x4c\x1a\xa0\x41\x97\x2f\xf7\x25\xcf\xab\xac\xd5\xcb\x81\x03\
+\x5c\x01\x5a\xdd\x70\xe6\xa3\x50\xc9\x6c\xca\xce\xd1\x48\x13\x8b\
+\x02\xe7\xa4\x57\x2f\x08\x06\x77\x03\x6a\x43\xd9\x28\x48\x1c\xf6\
+\x44\xce\xa5\x1f\xae\x05\x34\x33\x56\xb0\x8a\x45\x22\x46\x17\x8f\
+\x95\xe1\x2d\xad\x66\xb2\x9c\x26\xd0\xdb\xd2\xb2\x1e\x56\x82\xb7\
+\x64\xac\x48\x8a\x5e\x43\xd9\xff\x26\x42\x34\x92\x0d\x2b\x7b\xe8\
+\xc0\x67\x2b\x83\xcf\xb5\x84\x8c\x87\xce\x6e\xb4\x62\xe1\x4b\xc1\
+\xf1\xe1\xf1\xe3\xbf\xe1\x33\xdd\xa3\x15\x4d\x68\x00\xa9\x62\xd3\
+\x92\xe2\xe3\x4d\x4f\x4e\x9f\x5e\x1d\xde\x5c\xea\x02\xfb\x0a\xbd\
+\x12\x76\xc0\x99\xf4\x4a\x1a\xde\x3a\x91\x1e\x60\x30\x64\x7c\x6b\
+\x00\x68\xaa\xd9\x9f\x5c\xa9\xc6\x96\x0e\x87\x4f\x54\x9b\x47\xf7\
+\x94\x36\x05\xaf\x27\x15\xc8\x26\xcb\x33\xd0\xaf\x60\x71\xd2\xd0\
+\xc4\x7b\x8a\xd7\xf0\x2c\xae\x35\x74\x40\x25\xad\x7f\xe8\xb5\x6b\
+\x36\x70\xac\xdc\x26\xc7\x8a\x92\x47\xea\x3a\x62\xc4\x4e\x5a\xdd\
+\xb4\x4a\xa1\x6a\x49\x39\x42\xa5\x35\x57\x1f\x74\x03\x7a\x4a\x7a\
+\x2c\x81\x67\xce\xcc\x90\xe7\xda\xf4\x03\x83\x65\xfc\xb4\xb6\x93\
+\xb7\xa4\x77\x32\xf6\xee\xfe\xfd\x5b\xdc\xa6\x4c\xd9\x43\xf7\x48\
+\xb1\x7a\x2d\x73\x1a\xdd\xe4\x19\x28\xbb\x92\x7c\x1c\x15\x12\xb2\
+\x64\x43\x8d\x1a\x8f\xa5\xa1\x26\xc1\xf0\xec\x68\xcb\x96\xc5\x86\
+\x67\x08\x8e\xa7\x84\x67\xcb\x12\x25\x42\xd0\x70\xf2\x25\x44\x6c\
+\xe7\x69\x87\x46\xb0\x42\x37\xd0\x68\xcd\x35\x0e\x8e\xa2\xf6\x64\
+\x9c\x07\xfb\xf5\xbb\x80\xfb\x0c\x4d\x82\x66\x30\x54\x9b\xea\xd5\
+\x5b\x84\xf3\x4f\x08\x5c\xe8\x76\xf4\x07\x8b\xad\xa5\xbd\xb2\xe2\
+\xc1\x79\x72\x07\x4e\x96\x85\xda\xad\xb8\x7c\xb7\x6e\x2d\x8b\xb3\
+\x53\x38\x55\x27\x6c\xa8\x59\xf3\xbe\x92\x14\xad\x23\x55\xf4\x3f\
+\x23\x75\x6d\x2e\x55\xd2\x93\x27\x56\xa3\x9b\x4f\x79\x29\x45\x7f\
+\x99\x1c\x26\x74\xce\xa3\x5a\x3d\x8c\xe7\x47\xee\xe9\xb1\xf8\xa8\
+\x28\x53\x5a\x2d\xff\x8b\x89\xb9\xad\x44\xa6\x81\x21\xc3\x03\x8b\
+\x65\xd6\x4a\x4e\xc5\x69\x42\xc6\x14\x11\x14\xb4\x4a\x91\x65\xd7\
+\x5a\x15\xcd\xe9\x1d\x6a\xcd\x8c\xe7\xf3\x6e\x6c\xde\xec\x18\xe0\
+\xec\x4c\xa1\x88\x1c\x18\x37\xcc\xea\x74\x2a\xaa\x18\x07\x9b\x69\
+\xa4\x88\x6d\x92\x2b\xb1\x1b\x7d\x36\x3a\xcb\xd2\x36\x54\xe3\xfd\
+\x51\x60\x13\xf1\x5f\x04\x26\x3c\x48\x5d\x0f\x25\xc4\x2c\x91\x99\
+\xe0\x6e\x40\x7a\x52\xae\x41\x1d\x8f\x93\x7d\x01\xba\xa5\xa6\xb0\
+\x45\x6d\xb7\x90\xc1\xf1\x04\xcf\xa7\x4b\x29\x85\xc6\xb2\x6c\x86\
+\xaa\xb8\x15\xb9\x87\xc3\x60\x45\xa1\x03\x38\xfa\xfb\xef\x35\x90\
+\x6f\x7a\x5b\x59\xb9\x91\xf6\xe5\x16\x19\x14\x44\xaa\xd0\x0c\x2a\
+\x2d\x41\xae\x9f\x72\x3e\x98\x27\x32\x1b\x6c\x7c\xad\x43\xae\x5e\
+\xb5\x95\x62\xad\x7a\xd2\xc8\xf2\xa6\xa6\xb0\x85\xe7\xd5\x85\x16\
+\xd6\x55\xab\xb6\x40\xd9\x92\xca\x7e\x78\x4b\xc1\x6c\x3a\x10\x38\
+\x9f\x78\xc5\xd6\x76\x0f\x3c\x92\xef\xff\xe9\xdf\x16\xad\xe2\xa4\
+\x92\xf6\xaf\xe8\x06\x44\x5b\x14\xc8\xa9\x2d\x41\x90\xf6\x15\xf6\
+\xda\xf1\x9c\x82\x93\x25\x01\xe6\xc6\x60\x41\x69\x6c\x0d\x29\x7e\
+\x05\xba\x82\x23\xc9\x90\x90\x95\x7f\x4d\xe9\x7b\xae\x40\x31\x4c\
+\xc4\xeb\x5e\xa3\x10\x36\x9c\x56\x48\x5a\x05\xa5\xe1\x1d\xd0\x91\
+\xcf\xf5\x0b\xc9\x39\x50\x5c\xf2\x99\xbb\xfb\xd0\x7f\x60\x70\x13\
+\xa5\xd1\xbe\x06\x7b\x89\x1f\x1d\x81\x81\x81\xfa\xc8\x62\x7f\x09\
+\x46\xc5\xc7\xc7\x1b\x8a\x2c\x03\x83\x82\xc1\xeb\xab\x57\x77\x85\
+\x21\x7d\x96\xc2\xb5\x5f\x42\x7c\x7c\x6c\xa4\xc2\x96\xf6\xbb\x2b\
+\xc0\x14\x28\x49\x1f\xa0\x98\x5d\x42\x74\xf4\x4c\x1b\x23\xa3\x97\
+\x34\x66\xa6\xaf\xdf\x56\x47\x56\xf0\xdc\x60\x57\xb0\x9b\xf8\x4e\
+\xe0\xef\x72\x86\x6c\xd5\x15\x87\x52\x20\xf2\xf2\x66\x47\xb8\xa4\
+\xaa\xf8\x51\x81\xe5\x7a\xb8\x74\x49\xbb\x6b\x1e\xda\xe5\x81\xbc\
+\x3d\x29\x55\x89\x4c\x03\x83\x62\x55\x08\x26\x6f\x5a\x5b\xb1\xa2\
+\x7a\xc5\x82\x27\x33\x1c\xf3\xd0\x5b\xcb\xd8\x2a\xd2\x16\x12\x95\
+\xe6\x81\x78\x7f\x1a\xa8\x47\x84\x33\x65\xb6\xf4\x78\xee\x11\x3a\
+\x86\x34\x0b\xe7\x6a\x97\x01\xa1\xbb\xed\xa7\xc8\x48\xb3\x55\x45\
+\x8b\x5a\xca\x3a\x3d\x0a\xa9\x94\x14\x3f\x12\x60\x4c\x75\x31\x71\
+\xaf\x90\xf5\xf0\x9e\xe4\xbf\xa9\x3f\x99\x54\xa7\x5a\xa7\x04\x34\
+\x25\x1f\x64\xaa\xe1\xb1\xd1\x55\x43\x88\x60\xfa\x05\x0b\x8b\x83\
+\xa8\x47\x7b\x07\xe7\xd6\x63\x2d\xcf\xa5\x7a\x15\x24\xc3\xd4\x14\
+\xb2\x45\xc8\xe1\x17\xf5\x36\xb4\x55\x2b\x2f\xa1\x85\x99\x42\xe4\
+\xca\x2a\xd5\x2d\x5a\x95\x40\x6f\x70\x56\x5a\x52\xba\x94\x32\xa0\
+\x73\x73\xe7\x1e\xa6\x7a\x43\xf0\xe7\x33\xc6\xc6\xe5\x10\x4e\xf9\
+\x28\x53\xe0\xae\xfc\x68\x5b\x98\x14\x8d\x0f\xd4\x42\x4e\xa6\x09\
+\x8d\x61\xa2\x9f\x21\x13\xe2\xb0\x43\xf3\xe6\x3e\xd4\x43\x1a\x13\
+\x1c\x83\x67\x43\xa8\x3c\x43\xfb\x2c\x41\xab\x24\xf7\x1e\xcb\x90\
+\x1e\x02\x2d\x60\x78\x8b\xa0\x31\xb2\x8c\xb6\x95\x58\xe9\x3a\x53\
+\x81\x27\x98\xe2\xd8\xb6\xad\x2f\xc6\x46\x08\x40\x3b\x93\xc5\xd3\
+\xc4\x64\xb7\xbc\x2f\x0c\x5a\x91\x4c\x9e\x3c\xdf\xbd\x04\xcd\xb3\
+\x22\x8f\x31\x3c\x28\xa8\x29\xbc\x97\x54\x25\xee\x87\xcf\xd1\x5d\
+\xfc\x05\x94\x32\x20\x29\xd2\x94\x80\x1a\x3b\x63\xdc\x1b\x98\xe7\
+\xc9\x33\x84\xc6\xd0\x5e\xf9\x26\x52\xc5\xac\x7e\xa4\xbe\x10\x02\
+\xe9\x39\x3e\x54\x56\x0f\x35\x27\x12\x86\xc9\x2e\xcb\x2f\xc2\x20\
+\x91\x16\x14\x17\x1e\x6e\x21\xf5\x2e\x66\x51\x79\x06\x2a\x95\x95\
+\xda\x2d\x17\xad\x49\xee\xa3\x31\x99\x43\xd9\xf1\x92\xfe\x3d\x04\
+\xc0\x06\x60\x0e\x72\xa4\x28\xf9\x97\x48\x0c\xbe\xfc\xe4\xcc\x99\
+\x72\x1a\xbb\x95\xaa\x78\x16\x8c\x79\x8a\x46\x3d\xda\x54\x12\xa6\
+\xc5\xbd\x5a\xde\x0e\x5b\x32\x7f\xa8\x2b\xbb\xc2\x6b\xf8\x50\xae\
+\x0c\x1e\x52\xfc\x47\x95\xc9\xe5\x4c\x7d\x82\x2e\x5d\x9a\x8c\x6a\
+\xf9\x03\x32\x4e\x57\xed\x4f\x16\x83\x33\x38\xc3\x52\xc7\x57\x17\
+\x38\xf5\x94\xfe\x07\xcf\xc0\x97\xa4\x9e\x86\x2f\x21\xaa\x31\x1c\
+\x0c\xe6\xfa\x91\x26\x73\x04\x6d\x4b\xa0\xb8\x3b\x9f\x0c\x8e\x26\
+\x49\xc9\xed\x93\xf2\x68\x2a\xf9\x5e\xc9\x2d\x8d\x1a\xf9\xd1\xb3\
+\xcb\x96\x96\xf6\x14\x03\xd2\xf4\x48\xa1\xc8\x72\xa7\xa2\x6d\x41\
+\xfa\xf5\x22\xc3\xc0\x52\x0f\xa4\x13\x89\x06\x1c\x21\x72\xc5\x0a\
+\xc6\x75\x31\xae\x33\xc1\x70\x72\xb2\x5c\xb1\xb1\xd9\x23\x7b\xa0\
+\xef\x00\xbf\xee\xeb\xd1\xc3\x53\x4a\xde\xcd\x02\x17\xa1\xda\xfc\
+\x38\x6d\x47\x65\xdb\x65\xcb\xac\x48\x82\x06\x47\x5d\x30\x33\x9b\
+\x86\xa4\xe6\xcb\x30\x20\x5b\x18\x53\x41\x8d\xed\xf2\x7c\xdc\x87\
+\x6a\x94\x01\x8d\xa7\xae\xaf\xe7\xe6\xcd\x3b\xac\xfc\x8d\x91\x11\
+\x62\xbc\xcd\x8f\x3a\x89\xb5\xc1\x4e\xb2\x6e\x4b\x85\xf3\xdc\x6b\
+\x7c\x03\xc5\x52\x1e\x9c\xd0\x00\x56\xc1\xf9\x94\x29\x4e\xab\x9e\
+\xd0\xc2\x55\x5b\xdb\x7e\x08\x2b\x7c\xc6\x61\xfd\x09\x19\xaa\xc8\
+\x48\xb0\xd1\xd5\xc4\x36\x73\x16\x4a\x79\x5c\xa1\x1e\xa6\xfe\xe6\
+\x97\x5e\xbc\x77\x1e\xc6\xc6\x4e\xe4\x44\xb1\xaa\x50\xa1\x8a\xcc\
+\x61\xa4\x9d\x8b\x31\xf8\xb3\xfc\xdd\x1c\x60\x2b\x6c\xed\x9e\xcb\
+\x2c\x10\x0b\x5c\x0d\xc0\x1e\x54\x46\x94\xd9\x7f\x77\x30\xa4\x89\
+\x3b\xdb\xb7\x5f\x4c\x7d\xc8\xc1\xb1\x52\x9a\xa2\x03\x0c\x4b\x1d\
+\xbf\x43\x0e\x69\x60\x4c\x4c\x4c\x31\x0a\xf2\xdf\x77\x71\x19\x84\
+\xb3\x6c\x22\xa5\xc6\xd1\xe7\x97\x89\xd2\x3f\x3e\x4e\x4e\x99\xb2\
+\x8c\x14\x7a\xe9\xcc\x86\x89\x18\x06\xe6\x54\xfa\x46\x83\x26\x60\
+\xf9\x54\x3c\x9d\xc7\x68\xf9\x0f\x3c\x75\x6a\x03\x9e\x57\x11\x19\
+\x0a\x86\x34\x9c\xb6\xe0\x22\xca\xcb\x24\x91\x57\xd9\x9c\x64\x36\
+\x48\x4d\xf8\xd5\x01\x71\x19\x30\x57\x14\xa0\x55\x42\x02\xca\xd1\
+\x9e\xf4\xc7\x0c\xc3\x9d\x61\x9a\x2d\xdb\x60\x69\xb4\x8f\xc0\x6e\
+\x59\xf1\x39\xa2\x42\x43\xa7\x38\xb4\x6c\x39\x4a\x59\xc5\x63\xde\
+\xbe\x35\x3d\xd8\xbf\xff\x85\x8d\xb5\x6b\xdf\x80\xb7\xd6\x90\x02\
+\xe7\xa0\x0b\x1d\x7f\x64\x56\x4e\xed\x7f\xd5\xb6\xe5\xa6\x83\x83\
+\x03\x56\xba\x48\x45\x77\x50\xf9\x06\xd2\xce\x06\x27\x28\x2d\x7d\
+\x77\x76\xe8\x40\xcb\xff\x30\x91\x99\x60\xc3\x33\x90\x3a\x93\xed\
+\xe5\x35\x87\x00\xb0\xdb\x50\x17\xb9\x7e\x78\xfa\xf4\x77\xb9\x4d\
+\x5b\x2f\xdb\x6b\xf5\x11\x40\x62\x6c\x6c\x5d\x59\x3a\x54\xd3\xd9\
+\xd9\x59\x0f\x19\xff\xea\x2d\x9c\xe4\x29\x3a\x0f\x66\x45\xd9\x0f\
+\x98\x5f\x23\xfd\x6d\x20\x68\x0a\x79\xc2\x89\x8a\xbe\x0a\xe2\x8c\
+\xc1\x18\x1b\xfd\x6f\x9c\xc8\xaa\x28\xb7\x58\xe8\x63\x65\xb5\x67\
+\x43\xf5\xea\x57\xb0\xcc\x5f\x74\x1e\x34\x68\xd4\x37\xdc\xbd\x01\
+\xd8\x02\xc4\x84\x3f\x7f\xbe\x82\x8c\x55\x64\x39\x18\x76\x95\x2b\
+\x8f\x97\x32\x0f\x27\x70\xcd\x86\x3e\xe6\xbd\x51\x6f\xa7\x7c\x81\
+\x7a\xac\xab\x55\xab\x1a\xcd\xb1\x9c\xc3\x0e\x34\xee\xd0\xb4\xe9\
+\x2d\x68\x93\x78\x63\x77\x93\x2c\xb5\x48\x6c\xc0\x82\x3a\xa0\x1b\
+\xa3\x77\xdd\xde\x7e\x1b\x1c\x79\xea\x12\xa6\x7d\xdd\xbb\x77\xfe\
+\xd7\xd6\x72\x81\xed\x64\xd2\xac\x29\x38\x41\xb6\x3d\x9a\xa6\x44\
+\xfa\x31\x31\x7f\xd0\x64\x9d\x98\x3c\xf9\x24\x9e\x77\xd1\x32\xc6\
+\x2a\xe0\x92\xcc\x6f\xe1\xc4\x88\x8c\x8c\x2c\x48\x32\x08\xd2\xc0\
+\x36\x5f\xb6\xb1\xa9\x89\x04\x62\x73\x94\xf9\xc4\xc9\xe2\xd7\x3d\
+\x02\x90\x5e\xe9\x7b\x38\xff\xc5\x7e\x78\xfc\x78\x15\x39\xd1\x48\
+\x3c\x08\x67\xf1\x07\xca\xee\x86\x6a\xef\x74\xc1\xcf\x80\x32\xa0\
+\x79\x4f\xcf\x9e\x5d\x4f\x0e\xa1\xff\x4c\x21\x25\x09\x7c\x52\x4c\
+\x47\x29\x84\x04\xc3\x2d\x8b\x15\x7b\x85\xd5\x90\xbc\x9c\x06\x5a\
+\x06\x37\x5a\x7a\xd2\xc2\x33\xbf\x84\x84\xf1\xfe\xf1\xe3\x21\x90\
+\x66\x7f\x20\xe7\x20\x19\x46\x76\x47\x29\x97\x91\x4e\x07\x32\xb6\
+\x29\x32\x9b\x25\x7e\x57\xa7\x4e\x5b\x70\x7f\xcb\x75\xe8\xd0\xbe\
+\x57\xac\xad\xd7\xd2\x38\x7a\x10\x90\xb7\xba\xb4\x94\x3d\x6f\xa6\
+\x03\x65\x40\xad\xc1\x32\xe2\xbf\x84\x80\x43\x87\xe6\xc3\x1b\xa9\
+\x8e\xe7\x10\x31\x51\xbe\x71\x51\x51\x8d\x05\xa0\xa5\x69\x51\x0c\
+\xe7\xc0\x68\x78\x3c\xa3\x1e\xba\xb9\xd5\x56\x14\xab\x44\xa6\x81\
+\x9b\x4e\xc2\xb0\x46\x52\xb6\x0a\xbc\x92\x01\x58\xc5\xde\xa3\xee\
+\x4e\xe9\xfd\x5d\x4f\x06\xc5\x3f\x20\xc1\xe1\x3d\x2a\xce\xdf\x2a\
+\xf3\x79\xb0\x6f\xdf\xc1\x70\xa4\x2c\xc1\xbc\x45\x43\xc6\x6f\x35\
+\xe9\x68\x6a\x24\x10\x3b\x83\xe5\x45\xa6\x82\x27\xb2\x2c\x38\x05\
+\x5d\x57\xf6\x6a\xa8\xf4\xde\xd2\x3e\x68\x63\xcc\x98\x9e\x9d\x9d\
+\x3d\x9b\x64\xc0\x3b\xe0\x7e\x88\x9c\xb4\xe3\x78\xb7\xb2\xc8\x2c\
+\x70\x35\x42\x2b\x70\x2e\x68\xfa\xe5\xcb\x97\xa5\xd8\x96\x75\xa5\
+\x6d\x26\xe6\xe3\x08\xcd\x07\xc5\xed\x5e\x5c\xbc\x68\x2d\x9b\x95\
+\x04\x50\x43\x92\xa0\x6b\xd7\x4a\x42\x10\x96\x9a\x76\xf4\x54\xf2\
+\x19\x29\x06\x46\x71\x3e\xca\xe1\x04\xcd\x33\x3f\xb3\x88\x27\xb2\
+\x09\xbe\x2d\x17\x51\x0b\x5b\xea\x8f\x86\x6f\xca\x45\x42\x82\xb4\
+\x07\x69\xeb\x09\xd5\xaa\x60\xec\xbd\xe7\x90\x77\x13\x8d\xdc\x0d\
+\x10\xff\xb9\x2e\xcf\x10\x0e\x22\xb3\xc1\x6a\x62\x65\xc0\x1a\x88\
+\xdd\x55\x86\xe1\xa8\xbf\x28\x29\xde\xfa\xdc\xd3\x73\xc9\x95\x6d\
+\xdb\x0a\xc3\x69\xe2\x25\xd5\xc2\xca\x83\x2a\x59\x36\x94\x43\xa9\
+\x38\xa7\xfa\xb6\x87\x47\x8f\x6e\xc2\x4a\x99\x40\xf7\x32\x38\x3d\
+\x8c\x33\x8b\x32\xbf\xfc\xa2\x07\x32\x19\x96\xe2\x3a\x4d\xe3\xfc\
+\x36\x0d\x4c\xf1\x5e\xb3\x66\x1f\x6d\x5f\xe4\x58\x36\xa4\x18\x3d\
+\x83\xb7\xec\xd3\xeb\xdb\xb7\x4d\xc9\x08\xff\xa2\x97\xf6\x90\x8c\
+\x29\xa6\x64\xbc\xb9\x7b\x77\xbe\x63\x9b\x36\x37\x68\xc5\x02\xa9\
+\x70\x75\x59\x64\x70\xf0\x28\x64\xb1\x8c\xa7\x46\x8d\x9a\x3d\xbd\
+\x57\x16\x2d\xda\x0a\x95\x24\x27\x68\x57\xb3\xbb\x63\xc7\x69\x4a\
+\xe3\x49\x1c\x17\x94\xdd\xcd\xd5\xac\x11\x77\x65\xf5\xe1\x72\x42\
+\x02\x67\x80\x59\x34\x19\x68\x60\xb1\x03\xe3\x2a\x4d\x27\xca\x91\
+\x91\x23\xcf\xd2\x56\x45\x29\xbf\xc0\xd8\x54\x70\x19\xd8\x47\xc9\
+\x76\xc0\x24\x2a\xe2\x3a\x7e\x19\xd2\x41\x94\xe7\xab\x28\x38\x92\
+\x02\xe3\x24\x5b\xa7\x91\x0b\x7b\x93\x44\x68\x0f\xfe\xfa\x6b\x7d\
+\x2d\x6f\xf5\xbc\x97\xfe\xfe\x95\xa9\x8f\x39\x56\xc5\x48\x74\xcc\
+\x59\x16\xec\xe3\xb3\x9a\x12\x24\x50\x00\xfb\xf4\x43\x60\x60\x56\
+\x36\x65\x64\xb8\x9b\x9a\x1a\x62\x3b\xf9\x9a\xb2\x4f\xe8\xcc\x26\
+\x35\x37\xa2\xa8\xd4\x44\x1e\xda\xf3\x48\x09\x35\x75\x6c\x48\x21\
+\x4d\x38\xe5\x73\x7a\x59\x58\x34\x91\x93\x19\x14\x7c\xf7\x6e\x21\
+\x91\x51\x60\xc3\xab\x0e\x4e\xa7\x3e\x01\x50\x89\x0e\x53\x92\xa2\
+\xbf\xa1\xaf\xb2\x40\xb3\x35\x17\xce\x74\x3b\x71\xaf\xee\x0d\x2e\
+\x53\xc7\x18\x59\x29\xa1\x16\x7a\xe3\xc6\xac\x1d\x2d\x5b\xde\x80\
+\xd1\xdc\xa6\x4e\x32\x34\x59\xc8\xf5\x73\x21\x85\x27\xe9\x66\x7e\
+\x01\xa3\x8a\x87\x36\xa3\xd3\x8d\x2d\x5b\x1c\x0f\xfd\xf6\x9b\x3b\
+\xa5\xee\x60\x8c\xae\xbb\xe9\x7d\x1a\x97\xad\x6f\x33\x16\x7c\xbe\
+\x6b\x19\xfb\xe1\xc3\x12\xea\xf3\x16\xfd\xf2\xa5\x39\xee\x0b\x0b\
+\x0d\xe0\x70\x4e\x9e\xca\x18\x9c\xc9\x5f\x50\x22\x31\x1d\x07\x70\
+\x96\x73\x46\x89\x90\x3a\xb9\x18\xd4\x91\x73\x1c\x9f\xef\xc6\x91\
+\x67\x0c\x1d\x58\x6e\xd2\xb7\x21\xca\x81\xae\xcb\x46\x0f\x2d\xc0\
+\x14\xa7\x81\x03\xbd\x70\x3f\x07\xec\x0c\x0e\x73\x19\x3a\xf4\x1c\
+\x8d\x4b\x8f\xd9\x5d\x0a\xb6\x67\xea\x64\x72\x19\x50\x5f\xb0\x83\
+\x5c\xd1\x0a\x82\x1e\xd8\x75\x2c\xc4\x75\x2f\xf8\xf5\xf6\xee\xdd\
+\xdb\xf0\xbc\xae\x7c\xbf\x21\xb8\x04\xe4\xe6\x8b\x3a\x98\xb1\xd2\
+\x9a\xce\x0b\x61\x0f\x1f\xce\x25\x83\x53\xd2\x89\x8e\x8d\x1b\x47\
+\x85\xaf\x79\x85\xc4\x89\x29\x53\x46\x4a\x2f\x66\x12\xb4\x3c\x48\
+\xcd\xca\x48\x64\x09\x18\x54\x21\x8e\x80\xf8\x55\x65\xbb\x0f\x39\
+\x07\xea\x11\x37\x56\x33\xf1\x58\x87\x8d\x8d\xb7\x98\x60\x5d\xb0\
+\x23\xa8\xa2\x06\xed\xd8\x92\x24\x52\x03\x3f\x63\x21\x8c\x34\x62\
+\x77\xa6\x34\xb9\x07\xfa\xf6\xbd\x28\xa5\xb0\x95\xec\x96\x31\xe0\
+\xb8\xcc\xd5\x5e\x64\x60\xfb\x38\x98\xd4\x00\xa8\xa8\x55\x1d\x46\
+\xc8\x9b\xf7\xdc\x3f\xf1\x1c\xd3\xf9\x3c\x8b\xba\xbd\x32\xe0\x6a\
+\xde\xaf\x3e\xb3\xa9\x54\xe1\x94\xa1\xae\x28\xf5\xe2\xf0\x1e\x05\
+\xc1\x18\x2a\x98\xa4\x2d\xcd\x0c\xa5\xcc\x5e\xf2\xab\x6c\x5a\x68\
+\x20\x32\x0b\x5c\x06\xd4\x1e\x5e\x49\xb3\x03\x7d\xfa\x5c\xb4\x2a\
+\x5b\xf6\xea\x29\x3b\x3b\x7d\xf1\x1d\x20\x43\x05\xdf\x4b\xe1\xe1\
+\x4e\x22\xd3\xc1\x93\x59\x83\xb2\x1c\xec\xeb\xd6\xf5\x43\x6c\xee\
+\xa5\x52\x82\xe1\x3e\x7f\xbe\x2b\xd5\x48\x51\xfe\x25\x8d\x91\x5e\
+\xa6\xc7\xe2\xc5\xfb\x29\xf0\x8a\x73\xdd\x2d\x29\x1f\xe7\x2a\x32\
+\x1b\xac\x16\xfd\x2b\x68\xfa\x4f\x6a\xd1\x10\x52\xb8\xab\x7c\x71\
+\x66\x76\xed\x1d\xc0\x90\xdb\xcc\x79\xe4\x58\x51\x34\x15\x91\xe5\
+\xfe\x44\xea\xe6\xaf\x93\x06\xf7\x19\x5b\x9a\x08\x97\xdf\x7e\x5b\
+\x85\xac\x95\xc9\x70\xc0\xf8\xd3\x7b\xd8\x8e\x36\x14\x99\x0e\x6e\
+\xc3\x25\xbe\x13\xca\xb9\x7d\x5b\xd3\xa6\xb7\x4f\x4c\x98\x70\xfc\
+\xc1\xb1\x63\x1d\x65\x8b\xe6\x35\x99\x5f\x91\xc0\x13\x59\x04\x15\
+\xcb\xc3\xd0\x7a\xf7\x04\x5a\x19\x39\x91\xdb\x19\x07\xf6\xed\x64\
+\x70\x7e\x0e\x0e\x3b\xd6\x56\xaa\xa4\x68\xd5\x7b\x6f\x6b\xd6\x4c\
+\x1d\x32\x80\x4c\xbb\x89\xc8\x74\x30\x4c\x84\xe8\x89\x79\xf8\x2d\
+\x2d\x29\x5d\x4a\xdd\xa4\x46\x19\xd0\xb0\x4f\x1f\x3f\xb6\x35\xcf\
+\x95\xeb\x8c\xa2\xaa\x9c\x35\xe2\xae\x5c\xbd\xdc\x05\x9c\x07\x96\
+\xda\xda\xa8\xd1\x1f\x32\x8d\xe8\x34\x56\xb6\x29\xd8\x52\xee\x46\
+\x3a\x51\x08\x8d\x11\xcf\x9b\x98\x58\x88\x4c\x07\x83\xb2\x83\x90\
+\xc0\x40\x3d\xc8\x2f\x50\x87\xd6\xbf\x69\x70\x53\xe5\xae\x24\xee\
+\x40\xbf\x7e\xb6\x8a\xe3\x05\x9d\x5f\xcf\xd2\x2e\x06\xbb\x9a\x87\
+\x07\x7a\xf7\x6e\x29\xb2\x0e\x8c\xa8\xa8\xa8\x42\x1b\x6b\xd5\x7a\
+\xac\xc8\xba\x39\xf5\xef\x3f\x07\x2d\x6f\x17\xa3\x3b\xcb\x71\x2a\
+\x27\x81\x4c\xc0\x08\x91\x55\xe0\x2f\xc6\xa1\x7e\xdb\xb7\x4f\x41\
+\xf8\x86\xb6\x84\x8e\x14\x18\xff\x13\x63\x2b\x4c\x35\x91\x90\x2c\
+\x0f\x43\xb7\xa0\x70\x9a\x4f\x29\xdf\x37\x1e\xd7\x2f\xf8\x62\xbd\
+\x2b\xcf\x86\xfd\x44\xd6\x82\x91\x10\x17\xd7\x17\x92\x7d\x97\xa0\
+\xd6\x14\x27\x9d\x25\x61\x50\x15\xde\x01\x77\x35\x4d\x50\x23\x91\
+\x95\x60\xc3\xab\x02\x8e\x77\x19\x32\x64\x2e\xe6\xe5\x26\xc9\xdb\
+\x69\xca\x99\x53\x5e\x2c\xc6\x4c\x35\xcb\x80\x3e\x45\x47\x9b\x41\
+\x5c\xf8\x1c\xaa\x4b\xe2\x69\x4c\xa3\x59\xe3\x4f\xa0\x8e\x84\x0b\
+\x38\xed\xa8\x0f\x89\xd2\x42\x4d\xd8\x09\x89\xb6\xfe\xd6\x86\x86\
+\x3b\x31\x56\x42\x67\x64\xd2\x58\x1d\xba\xe9\xa7\xa8\xa8\xc9\x28\
+\x4a\x5e\x4d\xb9\xb0\x8a\x50\x11\xae\x45\xb1\x33\x51\xcb\xdd\x41\
+\xb8\xf5\x63\xd8\xe3\xc7\x73\x65\xef\xf3\x5e\x6e\x53\xa7\x1e\xd7\
+\x6a\xd6\xa8\x63\xe0\x89\x2d\x0d\x76\x55\x0a\x29\x53\xe9\x26\xc3\
+\xc8\xfa\x9e\x70\x3d\xb1\x5a\x4d\xc6\x39\x9b\x9a\x6c\x34\x11\x40\
+\x88\xaf\xef\x14\x4a\xeb\xa3\x78\xab\x5d\x95\x2a\x56\x18\xcf\x0f\
+\x16\xc6\xca\x16\x4a\xaa\x70\xc8\xdf\x34\x95\x9e\x4f\x5d\x05\x17\
+\xbe\xea\xf4\x04\xf1\xfc\x94\x02\x47\x82\xcd\x15\xef\x33\xf8\xfb\
+\x2b\x3f\x3f\x6b\x1c\x03\x46\x63\x05\x7c\x08\xaa\x8f\x07\xd4\x37\
+\x0e\xcf\xfe\x6d\x2a\xdd\x0c\x92\x02\xa0\x8c\x15\x4c\xf4\xef\xb8\
+\xf6\x21\x29\x76\xea\x1a\x84\x31\x43\x4a\x35\xe2\x8a\xe5\x8c\x91\
+\xb7\xd3\x4e\x72\x00\x6b\x22\x94\x33\x1a\xdb\x4b\x75\x19\x10\x14\
+\x00\x2e\xfd\x4b\xcf\x6d\x0c\xc4\x7f\xb6\xd2\x24\x7f\x83\xb1\x94\
+\xaf\x29\x32\x03\x6c\x88\x95\x69\x1b\x49\x8e\x93\xd3\x33\x66\x58\
+\xfd\x4b\x2b\x41\x18\xd8\xd2\x74\xa2\x0e\xaf\xd4\x01\x08\x7d\x10\
+\xec\xd1\x48\x62\x13\x0e\xee\x5b\x0e\x0d\x1e\xbc\x0d\x9a\x2c\x56\
+\x51\xc1\xc1\x15\x05\x20\xeb\xf4\xea\x53\x70\x17\x46\x58\x49\x64\
+\x08\x38\x5b\x05\xec\x07\xce\x00\x73\x89\xff\x10\x54\xff\xa5\xb3\
+\xdf\x85\xa5\x4b\x6d\x60\x68\xd3\x2b\x74\xe8\xb0\x7f\xa4\xbb\xbb\
+\x0b\x86\xf5\xc1\x9c\x60\x76\xd0\x7b\x89\x4a\x55\x06\xd1\x58\x3b\
+\xdc\x6b\xe6\x0a\x5e\x04\x07\x98\x09\xf1\x41\xa4\x0d\x0c\x06\xeb\
+\xae\x20\x2d\xcc\xdf\x4c\x4f\x2f\x51\x5b\x1f\x13\x2b\x5a\x53\x92\
+\x7f\x23\x49\x88\x3d\x5d\xba\xb8\x5c\x5a\xb1\xc2\x01\x9a\xf6\xe7\
+\x65\xec\xef\xde\x77\x74\x0e\x65\x30\x18\xc1\x97\x2f\xf7\xa4\x6d\
+\x25\xb2\xd6\xbd\x35\x57\x78\x18\xdb\x63\x64\x4d\xc4\x40\xc3\x9e\
+\x62\x7c\xf3\x65\x66\xfc\xa8\x6d\x4d\x9a\xa8\x73\x38\x91\x21\xf1\
+\x9b\x48\x3b\x18\x0c\x0e\x2b\xa0\xfc\x47\xad\x08\x86\x92\xa0\x2e\
+\xb2\xc0\xb5\x92\x54\x18\x3b\x49\x52\x70\x9a\x7a\x1e\xc1\xbe\xbe\
+\xbd\x65\x9f\x32\x17\x8d\x96\xbe\x07\xd3\x70\xbe\x63\x30\x38\x88\
+\xee\x6d\x65\xb5\xfb\xdd\xc3\x87\x9d\xa5\x11\x8d\x07\x53\x1e\x1c\
+\x3e\xbc\x46\xbb\x3f\x02\xda\xf4\xe6\xa3\x67\xdb\x5b\xb6\xf4\x16\
+\x00\xb6\x97\x76\x74\x0f\x26\x80\x4b\xff\x5e\xf5\x33\x83\xc1\x46\
+\xd7\x04\x6c\x2c\x00\x53\x3d\xbd\x6e\x64\x44\xf0\x5a\x9a\xa4\x92\
+\x78\x3b\x40\x4a\xc3\x39\x09\x00\xdb\x51\x1f\xe4\x01\x26\xa1\x1d\
+\xd4\x63\x64\x4b\xc4\xa4\xb1\x33\x10\x83\xc1\xf0\xda\xb0\x21\x2f\
+\x95\x8d\x58\xe4\xc9\xf3\x8a\x82\xe4\x5a\x05\x93\x11\xa8\xd9\x8a\
+\x89\x0c\x09\x99\x8d\xfb\x6a\xe0\x57\x2a\x80\x85\xb1\x2e\x46\x22\
+\xae\x39\xae\xa4\xad\x69\x8d\xf1\x2b\x7f\xd1\x5d\x86\xc1\x60\x90\
+\xf7\x91\x3c\x94\xd0\xdb\x57\xf7\xbc\x86\x07\xf3\x2a\x0c\x88\x8c\
+\x6b\x9d\x6c\xf1\x14\x45\x7a\xfa\xd4\xc0\x9d\xc6\xc0\x94\x7b\x07\
+\x0e\x6c\x46\x1b\xdc\x89\x10\xd4\xb9\x67\x63\x68\xd8\x6e\x55\xb1\
+\x62\x23\xb1\xda\xc5\x4a\xbd\x95\x6d\xbc\xcd\x64\x30\xbe\x5d\xab\
+\xb5\x0a\x4c\x21\x42\x33\xf3\xbe\x75\xd9\xb2\xf7\xd5\xdd\x3f\x55\
+\xaa\xd7\x48\xb6\x75\x97\x3d\xb2\xc7\x20\xab\xbd\x30\xc6\x62\xd0\
+\x1b\x3b\x74\x4f\xb7\x6e\x07\x15\xfd\x15\x6c\x31\xed\xa2\xde\xbd\
+\xab\xb4\xae\x4a\x95\x67\x10\xb0\xfd\x8c\x3a\x3d\x6f\x34\x2c\x49\
+\x4d\x64\x87\xc1\x60\x6c\xaa\x5d\xbb\xc1\xa6\x3a\x75\x7c\x50\x6f\
+\x47\x46\xf6\x15\x86\xe5\x0e\xc5\xb0\xe5\xa4\xb1\x22\xab\x12\x46\
+\x82\xfa\x30\xc2\x49\x52\x51\x2c\x86\xae\x48\x15\xfb\x48\x57\x8f\
+\x45\x8b\xf6\xe1\x99\x19\x8d\x1d\x19\x35\xea\xac\xfc\x9d\x3a\x1a\
+\x06\xdd\x49\x3a\x57\x72\x0b\x35\x18\x0c\x16\xa9\xfd\x23\x3a\x34\
+\x74\xc5\x8e\xd6\xad\xaf\xc8\xda\xad\x9b\x90\xf4\x3e\x74\xc9\xce\
+\x4e\xe9\x57\xae\xa2\xb6\xbc\x1a\x8a\xd0\x97\xa9\x09\x25\xdd\x43\
+\xea\x6f\x37\x55\x2d\x43\x2a\xe0\x36\xb2\xe1\x17\x6a\x77\xe7\x54\
+\x8a\x2f\x4d\x84\xe8\x2b\x14\x30\x18\x82\x0d\xcf\x90\x44\x4f\x49\
+\x5b\x1f\x5d\x42\x9f\x41\xc0\xe8\xce\xd6\xc6\x8d\xcb\xca\x55\xaa\
+\x89\x62\x6c\xa4\xcd\x48\xd5\xe6\x38\xf3\xdd\xa5\x56\x4f\x58\xe9\
+\xa8\xc3\xeb\x5b\xd9\xbc\xb0\xa6\x7c\x7f\x18\x0c\xcd\x1d\x46\xf6\
+\x4b\xd8\xa3\x47\xd5\x3c\x16\x2e\x74\x49\x5d\x3e\x80\xc1\x60\xc3\
+\x6b\x0f\x9a\x4a\x2a\xb5\x5a\xaa\xe3\x13\x26\x6c\x72\x9b\x36\xed\
+\x38\xc6\x8c\xa1\x2e\x56\x13\xe7\xb5\x58\xe9\x64\x49\xbe\x77\xf0\
+\xe0\x16\x8c\x77\xd5\xa8\x4c\xe8\x85\xe7\x71\x74\xce\x33\xcb\x99\
+\x73\xdf\x9b\x7b\xf7\x06\xe1\x79\x75\x91\x3a\x18\x0c\xae\xe5\x02\
+\x0d\xc1\x6c\x1a\x63\x6d\xc0\xd9\xa0\x11\x0c\xa9\x86\xb2\xe2\x1d\
+\x9f\x38\xd1\x0d\x63\xe3\x40\x3d\xcd\xde\x6b\x81\x6e\x6e\xeb\xe8\
+\x4c\x88\xed\xe9\x73\x2f\x53\xd3\xb4\xaa\x44\x33\x18\x0c\x8d\xc6\
+\x92\x45\x71\x66\xbb\xba\xa5\x41\x83\x7b\x32\xef\xb2\xa0\xd0\x02\
+\x72\x2f\xb7\x93\x41\x5e\x5d\xbb\x76\x37\x9e\xd7\x17\xff\x08\x0c\
+\x06\x1b\xdf\x88\x2f\xc9\xc9\xe4\xc9\xac\x2a\xab\x0d\xfa\x82\x5d\
+\x05\x20\x57\xc0\xa4\x0d\x35\x6b\xde\xc7\xf3\xc9\xe0\x5f\xc6\xe5\
+\xa4\x63\x86\x3a\x07\xd5\x12\xa9\x82\xc1\xe0\x6e\x40\x86\x1a\xee\
+\x7f\x5f\x30\x45\x36\x25\xb9\x88\x33\x5c\xf2\x33\x4f\xcf\x75\x78\
+\xa7\x52\x2a\xb1\xbf\xfa\xe0\x62\xbc\x67\xbc\x58\x88\x9a\x8a\x0c\
+\x04\xee\xc3\x30\xfe\x19\x5c\x25\xfe\x1c\x0c\x06\x57\x94\x23\x20\
+\xee\x4d\x86\x46\x86\x67\x55\xa6\x4c\xe8\xfb\xfb\xf7\x47\x0b\x2d\
+\xc0\xa8\x96\x2b\x41\x73\x85\x18\x5b\x28\x80\x9d\xed\xda\xed\xa6\
+\x7b\x78\x47\xd7\xfe\xf5\xaa\xc8\x60\xb0\x4c\xdc\x10\x5a\xd5\x14\
+\xb5\x68\x18\x5f\x38\xae\x03\xb4\x9b\x59\xa0\x05\xf3\xb3\x5b\x8e\
+\x8e\xdb\x2e\xae\x58\x71\x00\x5a\x8e\x0f\x65\x4a\xd8\x74\xbc\x1f\
+\x81\x70\x43\x58\x42\x6c\xec\x22\xea\x1e\x2b\xfe\x12\x0c\x06\x1b\
+\x5e\x25\x90\xfa\x20\xec\x81\x61\xbd\x46\x42\xf4\x25\x0d\x83\xdb\
+\x01\xa6\x84\x5e\xbb\x66\x43\x67\x40\xb0\xd7\xc7\xb7\x6f\x67\x60\
+\x35\x7c\x4d\xe3\x44\x9f\x35\x6b\xf6\x62\xbc\x89\x48\x13\x18\x0c\
+\xd6\xce\xfc\x05\x0d\x48\x16\x24\x27\x26\x92\x63\xa5\xa8\x00\x10\
+\x4c\x3f\x44\xab\x59\x78\x50\xd0\x10\xc5\xe3\x89\xab\xde\x96\x86\
+\x0d\x3d\xc9\xd8\xd6\x57\xaf\xfe\x08\xf7\x53\xbf\x6f\x3b\xc9\x60\
+\xb0\xe1\xe5\x06\xab\x83\x2a\x99\xb7\xa9\xce\xb9\x5c\x53\xaa\xd4\
+\x69\x45\xde\x81\xfa\xa2\x21\x8f\xf3\x3e\x25\x3e\x3f\x75\x77\x5f\
+\x4f\x32\x72\xb2\xb5\xd3\x60\x70\x19\x38\x99\xda\x33\x8b\xb4\x81\
+\xc1\x60\xbc\xf4\xf5\x2d\x8b\xb6\x4c\xc1\x72\xfb\x18\x80\x73\xdb\
+\x3e\xf0\x19\xdd\x43\xb8\xe8\x0a\x8c\xed\x37\x12\xa6\xc5\xd8\x0d\
+\x2d\xa7\xca\x3b\x5c\xcb\x8b\xb4\x81\xc1\x60\xc4\x47\x44\x8c\x40\
+\xb7\x19\x0f\x24\x47\xdf\xa1\x8a\x71\x32\x28\x14\xb8\xc6\x22\x17\
+\x73\x39\xc9\x82\xe3\x7e\x2b\x8d\x6d\xfb\xe5\x97\x0b\x0f\x8f\x1f\
+\xdf\x44\x72\xe0\x48\x15\x8b\xc7\xbb\x8f\x30\xbe\xc4\x58\x08\x23\
+\xf1\xef\x03\x83\xb6\x35\x22\xa3\xc0\x4d\xea\xfb\x83\x26\xb7\xf7\
+\xee\xdd\x06\x63\x52\x97\x05\x1d\xe8\xdb\xd7\x8a\xb6\x92\x48\x88\
+\x8e\x46\x4d\x5e\x30\x3d\x07\x7b\x80\x7d\xdc\x17\x2c\xd8\xa7\xb1\
+\xe2\xc5\x9b\x08\xf1\x2f\xeb\x36\xc3\xc6\x96\x8d\xb6\x3a\xa0\x17\
+\x69\xf0\x8b\x8c\x02\x1b\x9e\xd1\x6b\x7f\xff\x55\xbb\x3b\x77\xbe\
+\x7a\x76\xde\xbc\x31\x54\x29\x4e\x15\x08\x1b\xeb\xd4\x21\xe7\x49\
+\x35\x21\xb1\xbb\x63\xc7\x81\x64\x6c\xf0\x78\xc6\x22\xa5\xec\x3e\
+\xb4\x35\x67\x8a\x7f\x17\x18\xf0\xa8\xf9\x4b\x11\xd4\x67\x22\x23\
+\xc1\x86\x57\x06\x1c\x4d\x14\x80\x65\x89\x12\xf7\xc9\xe8\x56\x97\
+\x28\xd1\x43\xee\x34\x72\x2a\xe1\x04\xa5\x5a\x01\x9c\x2b\x33\x53\
+\x86\x60\x7c\x22\x56\xbc\xe6\x3f\xb6\x8a\x36\xaf\x70\x0d\xa9\xa8\
+\x92\x26\x19\x9a\x1d\xc1\xd2\xad\x9d\x09\x60\x78\x2d\x5d\x3a\x09\
+\xe1\x83\x78\x18\x1d\x65\xac\x3c\x00\x03\xc1\x14\xab\x52\xa5\x5e\
+\x25\x25\x24\xcc\xa3\x00\x3b\x1c\x2f\xad\x30\xf6\x41\xcb\xb1\x72\
+\xcb\x58\x88\x0a\x42\xa7\xc1\x48\x2d\xde\xa3\x4a\x11\xc2\x4e\x4f\
+\x4f\x2f\x49\x00\x06\x85\x0a\xc5\xd3\x7b\xd2\x10\xf3\x92\x42\x95\
+\x4c\xd2\xcd\x00\xf0\xb9\xb9\x8d\xa9\xe9\xde\x41\x47\x8f\xda\x57\
+\xe9\xd9\xd3\x3b\x4f\xc9\x92\x31\x2a\x95\xca\x48\x00\x6d\xcc\xcc\
+\xce\xe6\xd0\xd7\xf7\x98\xa6\x52\x7d\x8e\x7a\xf1\xc2\x05\x43\x45\
+\x2a\x75\xea\xe4\xd1\x77\xef\x5e\x87\xea\xfd\xfa\x9d\xcf\x96\x2d\
+\x5b\xed\x1c\x2a\x15\x55\xac\xff\x48\xbd\xf3\xd8\xe0\x30\x61\x43\
+\x54\x42\x34\xab\xd4\xa5\x8b\x9f\x00\x72\x15\x2a\x14\x8b\x4b\x1c\
+\x8c\xac\x11\xae\xfe\x78\x36\x0b\xbf\x44\x09\xba\x76\x22\x3d\xc1\
+\xc6\x46\xbb\x88\xb7\x58\xd9\xf6\x04\xec\xdb\xe7\x32\xe4\xd8\xb1\
+\x03\xed\x96\x2d\xbb\x8f\xb1\xec\xa5\x20\x6e\xd4\x60\xdc\xb8\x6b\
+\x78\x7e\xab\xb0\x10\xed\x71\x2d\x96\x2d\x7b\xf6\xcf\x41\x9e\x9e\
+\xad\x6f\xac\x5f\x9f\xa7\x8b\x9d\x9d\x73\x2b\x63\x63\x57\xac\x7e\
+\x25\xf1\x05\x39\x27\x95\xfc\xcd\xb9\x98\xd7\xa3\x42\xb7\xc0\x90\
+\xe7\x82\x97\x10\xca\x09\x7b\x74\xec\x98\x5a\x61\x78\x7f\xef\xde\
+\x94\xf9\x6e\x4c\xe5\x26\x74\x4f\xb4\x2c\x5e\xfc\xdd\xb6\xa6\x4d\
+\x1d\xd2\xb7\xb7\x17\x3b\xaa\xd6\x56\xa8\xe0\x68\x8a\x15\x8c\xe4\
+\xf9\x70\x7f\x1b\xd7\xc4\x95\x05\x0a\xbc\x96\x4d\xe7\x8d\xe4\x7b\
+\x7d\xc0\x94\xe3\xe3\xc7\xbb\x41\x57\xe5\x3c\x0c\x34\x91\xe6\x0c\
+\xd9\x2a\x0b\xe9\xec\x87\xdc\xcc\xcb\x02\xa0\x78\x1e\x85\x11\x4c\
+\x84\xe8\x4d\xff\x9d\x35\x25\x4a\x5c\xd1\xa1\xe6\x87\x0c\xda\x26\
+\x62\x82\x36\x83\x29\x9e\xa6\xa6\xce\xe7\xe6\xce\x9d\x28\xd5\xa9\
+\x12\xe8\xba\xb2\x60\xc1\x27\x2b\xf2\xe5\x8b\x86\x4e\x63\x52\x88\
+\x8f\x8f\x2d\x26\x6f\x09\x58\x50\xa4\x27\xd8\x81\xd2\xf1\xb1\x9b\
+\xdb\x46\xc4\xe0\xae\x43\x7e\x2f\x18\x72\x7b\x1e\xd1\xaf\x5f\xaf\
+\xd0\xd4\x43\x59\x24\x44\x29\x52\x18\xc3\x97\x5e\x10\x2a\x14\xc6\
+\x05\x79\x79\xd9\x41\xa2\xef\x16\xcd\x91\x0c\xa0\x7b\x0b\x00\xde\
+\xe5\xca\x30\xb4\x8f\xca\xb8\xbf\xa3\xe3\x76\xcc\x57\x59\xa1\x13\
+\x60\xa8\x30\x29\x6f\xa5\xeb\x39\x06\xcd\x09\xe7\x43\x89\xb8\xaf\
+\x9c\xac\xaf\xdb\x5b\xb5\x3a\x8f\x58\x90\x2b\xdd\x23\x5e\x74\x31\
+\x3e\x3c\x7c\x08\x26\x9d\xca\x4c\xa6\xa6\x7b\xbc\x8e\x8d\xae\x0a\
+\x38\x05\x34\x95\xec\xa4\x9d\x5b\xe9\xf2\xdb\x6f\xea\x9c\x4c\xac\
+\x86\xcf\x37\x54\xaf\xbe\x38\xec\xe1\xc3\xb9\x57\xed\xec\x76\xad\
+\x2e\x5e\xfc\xcd\x7d\x17\x97\x8d\x8a\xdc\xc3\xf1\x71\xe3\xf6\xd0\
+\x9c\xc9\xc6\x25\x1f\x75\x68\xbe\x18\xd7\xb7\x6c\x19\x8e\xc9\x53\
+\x97\x95\x60\x1b\xe3\x8d\xab\x01\x34\x1a\xdd\xbc\xd7\xac\xd9\xf7\
+\x29\x32\xd2\x0c\x9e\xb3\xd7\x50\xa7\x8a\x80\x66\xa3\xd9\xd3\xb3\
+\x67\x8b\x63\xb2\x43\xa4\x77\xec\x66\x86\x1c\xd4\xd9\xf0\x8a\x81\
+\x45\xbe\xf1\xac\x86\xe7\x92\x25\xce\xe8\xe8\x1a\xa6\x34\x16\x81\
+\x00\xed\xb9\x98\xb7\x6f\x17\x53\x89\x90\x00\xc6\x0b\x91\x03\xbb\
+\x91\x40\xcc\x59\xec\x45\x0b\x8b\x03\x96\xc5\x8a\xbd\x92\xef\xfa\
+\x49\x39\xf7\x2c\x06\x4f\x70\x49\x70\xea\xb5\xf5\xeb\x77\xa1\x47\
+\x9a\x39\xee\xf5\x1f\x9d\x3c\x39\xc6\x6f\xdb\x36\xeb\x35\xa5\x4b\
+\xaf\xa6\xc9\xa2\x55\x0e\xe3\x6d\x05\x00\x37\xf5\xfd\x65\xfa\xfa\
+\x09\x08\x1b\xdc\x71\x1d\x3a\xb4\x94\xf8\x06\x32\xac\x91\x21\xcf\
+\x57\x03\xc8\xf5\x99\xf8\x6f\xdf\xbe\x7d\x4b\xa3\x46\x97\xa0\xa1\
+\xe2\x7b\x76\xf6\xec\x0a\x8a\x91\x52\x7d\x1d\xcd\xd9\xc9\xa9\x53\
+\x4f\x60\x6c\x24\x42\x0a\x0b\xa8\x1d\x17\xce\x78\xde\xa7\x16\x2e\
+\x2c\xa6\x79\x76\xcc\xda\x86\x24\x5c\x56\xd2\x04\x1c\x0a\xe6\xc6\
+\x64\xec\x97\x5b\x92\x24\xd4\x6c\x05\x61\x82\x49\xb5\x2a\x87\x00\
+\xb0\xda\x3d\x40\x3e\xe0\x1b\xb9\xed\x69\x29\x83\xb0\x6f\x71\x25\
+\xe3\xcc\x2b\x27\xd3\x8a\x0e\xf4\xe0\xd0\x0c\x0b\xcc\x72\xaf\xec\
+\x16\xe0\x64\x39\x0f\xcd\x95\xd5\x8d\xe4\x1a\x68\x55\x83\xa1\x91\
+\xc8\x91\x01\x98\x0b\xec\x0a\x9a\x80\x0d\x35\x0c\x6e\x34\x18\xa5\
+\x03\x39\x9a\x8c\xeb\x0e\x0e\xb5\x1c\x9a\x37\xf7\x25\xef\x17\xa5\
+\x15\x85\xdc\xb8\xd1\x58\x48\x20\xe1\x36\x18\x0d\x2d\x5e\xc8\x82\
+\x4b\x95\x99\x81\x41\x6b\x0d\xe9\x80\x33\x02\xc0\xef\xac\xa4\x7b\
+\x49\xcf\x0c\x95\xfb\x66\xe3\x2b\xa8\xe9\x58\x51\x7a\x25\x24\x25\
+\x25\x35\x14\x1a\xd0\xee\x7f\x07\xc7\x4c\x31\x1c\x17\xa2\x70\x66\
+\xf7\xd2\x8d\x2f\x45\xae\xe7\x1a\xf9\xc0\xd5\xd5\x1e\x5d\x43\x5d\
+\xe9\x5c\xa1\x21\x76\x1a\x06\x55\xaa\xc0\x9b\xfb\xf7\x97\xc6\xe4\
+\x5a\x90\xeb\x99\xbc\x67\xe4\x54\xf1\x32\x33\xb3\xc2\xbb\x39\x21\
+\x82\x1a\x80\x95\x30\xce\x79\xf0\x60\x0f\x6c\x41\xef\xec\xef\xd9\
+\xb3\xc4\x1f\x42\xe8\x67\xf8\x16\x86\xa1\x82\x2e\xca\x39\x32\x3a\
+\x9c\xb5\xcf\x90\x1a\xd8\xb7\x6a\xea\x28\xb4\x83\x94\x31\xb5\xa4\
+\xdf\xd2\x1c\x39\xc6\x08\x9d\x00\x1b\x5e\x0d\x70\x0c\x68\x24\x24\
+\xa0\x38\x1c\x47\xf1\x38\xc4\xe8\x82\x68\xb2\x90\x03\x78\x1d\xe1\
+\x02\x6b\xbc\xb3\x80\xde\xb5\x32\x34\x6c\x4f\xe3\xfb\xba\x77\xf7\
+\x26\xaf\xdb\x87\x27\x4f\x56\xe3\xda\x14\x63\xce\x60\x0c\xb8\x80\
+\x8c\x4f\x64\x08\x18\xc9\xc9\xc9\x6d\xf6\xf7\xea\x75\x09\xde\x64\
+\x25\x34\x40\xba\x29\x26\xdf\x98\xdf\xb2\x68\xa9\x1c\x08\x27\x0b\
+\xcd\x4b\x69\xa1\x13\xe0\xb0\x41\x0d\x8d\x7d\x7f\x41\x2a\x29\xa1\
+\x89\xc4\x24\x45\x9c\x99\x39\x73\xb7\x3c\x43\xfc\x0a\xe6\x93\xef\
+\xec\xa7\x77\x9e\x7b\x7a\xda\x60\x35\xdc\x80\x9f\xe3\x61\x9c\xe3\
+\x0e\xf4\xee\xdd\x72\x75\x91\x22\x4a\x11\xe6\x5d\x30\xe3\x54\x89\
+\x79\x87\xd2\x2d\x31\x2e\x6e\x19\x39\xc2\x0e\xf6\xeb\x77\xf8\xea\
+\xba\x75\xc3\x34\xe6\xb0\x22\x58\x0d\x2c\x4b\x55\xe7\x28\x15\x1a\
+\x43\x3b\x14\x6c\x2d\x4f\x8b\xac\x05\x43\x3a\x44\x52\x70\x3d\x0d\
+\x8e\xc3\xcf\xaf\xc1\xaf\x0e\x4d\x9b\xde\x92\x2b\xd7\x2c\xb0\x9a\
+\xc6\x64\x96\xa4\x2d\x26\xce\x07\x41\xb6\x15\x2a\x5c\x55\xce\x71\
+\x76\x95\x2a\xd9\xfb\x6c\xd8\x60\x04\x71\x9d\x77\x38\x03\xc6\x63\
+\xf5\x3b\xf8\xcc\xcf\xaf\x80\x90\xc8\x98\x33\x04\xf7\x33\x07\xdb\
+\x81\x13\xc1\x81\x32\xc9\xa1\x39\xcd\x87\x16\x29\xae\xf7\x55\xaa\
+\x8d\x0d\x11\x59\x07\x86\x69\x8d\x1a\x39\x77\xb4\x6c\x79\x42\xd1\
+\x5c\x24\x27\xca\x85\x65\xcb\x76\xca\x6c\x93\xee\xa0\xbe\x96\x81\
+\x9a\xc8\xd5\x4f\xfd\x3e\xa4\xdf\x42\xe9\x7a\xd1\xdc\x7c\x17\x9e\
+\x39\xd1\xe4\x52\x7c\x0f\xbf\x37\x4f\xcb\x50\xc7\x82\x9e\x8b\x85\
+\xc8\xe0\xc6\x17\x9c\x46\x06\x89\xbe\x39\x88\xe5\xad\x3f\x39\x69\
+\xd2\x96\x83\x03\x06\xec\x74\x6c\xd7\x6e\xbf\x63\x9b\x36\xe7\x90\
+\xe4\x70\x13\xce\xb0\x23\x59\x1c\x20\x67\x50\x95\xb2\x5a\x73\xb1\
+\x66\xcd\x87\x64\x3c\x10\x3d\x3d\xa5\x28\x0f\x6b\x42\x56\x2d\xbf\
+\x52\x0c\xf3\xd8\xd8\xb1\xce\x10\x38\xf5\xa5\x7b\xf4\x5f\x3b\x29\
+\xd3\x8f\x3c\xf1\xbb\xd3\x41\x03\xf9\x3b\xca\xd5\x8a\x7e\xc7\xd6\
+\xc8\xa8\x8d\xc8\x50\x30\x64\xf8\xa7\x0f\x38\x04\xfc\x1d\x9c\x04\
+\xce\x04\x17\x82\xc6\xba\x53\x92\xc5\x9a\x8b\x93\xa9\x3d\x53\xec\
+\xfb\xf7\xa3\xbf\xf1\xed\x59\x8f\x12\x6a\x29\xe7\x92\x32\x1c\xa8\
+\xd9\x05\xf2\x02\xef\xd2\x76\x85\x56\x48\xeb\x32\x65\x1e\x27\xc5\
+\xc7\xd3\xca\x58\x5a\xae\x86\x0b\x29\x0e\x04\xce\x89\x78\xf6\xac\
+\xce\x0b\x6f\x6f\x52\x1d\x1e\x26\xb2\x1a\x1c\x8f\xd5\xa1\x15\x8e\
+\x27\xa3\x11\xd8\x4c\x7c\x03\x4f\xce\x9c\x31\xbe\xbb\x6f\xdf\x56\
+\xfa\xc6\x0c\xbe\x79\xb3\x34\x8c\x2d\x41\x8a\xe5\xc4\xbc\xf2\xf7\
+\xb7\xa6\xdf\x17\x12\x6b\xab\x55\xab\x85\x33\xdd\x53\x7a\x0e\x06\
+\xde\x39\x78\xb0\x95\x34\xc6\xbf\x09\x06\x83\x8d\xb2\x82\xf4\x58\
+\xe6\xc7\x79\xec\x67\x19\x0f\xfa\x0a\x2f\x19\x79\x33\x07\x68\xf7\
+\x62\x0b\x3c\x73\x66\x05\x6d\x25\xad\x0d\x0d\x03\xbe\x77\x2b\xc3\
+\x60\x30\x64\x2e\xe5\xa1\xc1\x83\x77\x51\x2b\x5f\xa9\x2a\x9c\x53\
+\x68\x01\x5b\xcd\xa3\xe0\x97\xc7\x27\x4e\x6c\x94\xed\x9f\xfe\x01\
+\x18\x0c\x5e\xf1\x3a\xc8\x80\x78\x09\x79\x6e\x33\xc7\xaa\xb7\x02\
+\xcc\x6f\x22\x84\x3a\x40\x4e\x8e\x15\x3c\x1f\xfe\x77\xa5\x08\xc0\
+\xcd\xf8\xef\x4c\x4a\x25\x39\x9a\xc1\x60\x68\x86\x0e\xe0\x50\xd9\
+\x21\xe3\x7a\x6f\x70\x7d\x8e\xc0\xf8\x47\xc4\xf3\xa8\x29\x7d\x71\
+\x2d\xc3\x32\xc0\x3b\x53\xc0\xd3\x44\xdc\x4f\x04\x73\xab\x4b\x4f\
+\xf4\xf4\xae\xc9\x73\xdf\x71\xf1\xa7\x60\x30\xd8\xf8\x9a\x5e\x5e\
+\xb5\x6a\x3f\xaa\xc8\xdf\xc9\xf6\x4d\x11\xe7\x4d\x4c\xe6\x68\x6f\
+\x45\x61\x64\x27\x64\x20\x36\x5e\x43\x9d\xea\x18\x3d\xdb\xda\xa4\
+\x89\x2b\xdd\xa3\xe4\xc4\xfa\xaf\x5b\x3b\x31\x18\xdc\x3d\xb4\x69\
+\x42\x4c\x8c\xf1\x91\x91\x23\xcf\x52\x5d\x9d\x34\x28\x4b\xed\xec\
+\x16\x68\x75\x5c\x8b\x0b\x0b\xb3\xa0\x8c\x16\x14\xc4\x7a\xca\xf8\
+\xde\x21\x5c\x13\xd6\x56\xaa\xf4\x9c\xe2\x79\x7f\xdf\x85\xcd\x60\
+\x70\x13\xc3\x5e\x6f\x03\x02\x2c\xb7\xb7\x6c\x79\x1d\xc5\x91\x4e\
+\x1a\x8d\xeb\x77\x83\x29\xaf\x6e\xde\xb4\x92\xa9\x49\x75\xc1\x9e\
+\xf6\xf5\xea\x3d\x50\x82\xea\x0f\x8e\x1c\xb1\xc7\x58\x1a\xb3\x52\
+\x18\x0c\x36\xbc\x52\x32\xdb\x61\x89\xe2\x58\x81\x7c\x00\xe9\xe9\
+\x7f\xbd\x77\xe0\xc0\x70\xa1\x01\x48\x7d\x9f\x22\x83\x43\x1a\xd2\
+\x0d\x2a\x1d\x12\xdf\x0d\x06\x83\x0d\x2f\xaf\x90\x40\x6e\xdf\x28\
+\x32\x2c\xd4\xd3\x05\x2a\xb5\x5c\xb8\xaf\x83\x2e\x32\xa1\x28\x98\
+\xfc\xf4\xfe\xe1\xc3\xd5\x64\x9c\xc6\x42\x94\xc3\xf8\x3a\xd0\x13\
+\xdb\xd0\x03\xb8\xb6\x13\x69\x07\x83\xc1\xf2\x01\x7b\xbb\x75\xbb\
+\xac\x64\xb2\x83\x21\x60\x3c\xdd\x1f\x1d\x3d\xfa\x34\x9e\xf7\xc0\
+\x7d\x45\xd9\x3b\x2d\x05\x5e\x4b\xa5\xee\x2b\x09\xec\x24\x74\x12\
+\x0c\x56\x5e\xd6\x51\x40\xe2\x3b\x66\xa8\x9b\xdb\x92\x9e\x5b\xb7\
+\x3a\x56\xe9\xd1\xe3\x54\x9e\x62\xc5\xa2\x30\x9c\x2b\x07\xca\x7a\
+\x3a\x58\x5a\xfa\xe0\x67\x4f\xd0\x06\xef\x15\x68\x3a\x6b\x96\xcb\
+\x92\xcf\x9f\xad\x26\xde\xba\x65\x9d\xa7\x78\xf1\x28\x55\xb6\x6c\
+\x2e\x30\xc4\xb3\xe0\x40\x91\x26\x30\x18\xbc\xd2\x35\x04\xc7\x3c\
+\x39\x7b\xd6\x16\x89\xcf\xea\x2a\x04\xb4\xee\x75\x90\xad\x9d\x12\
+\x6d\x8c\x8c\x82\xf1\x7c\x8e\x74\xaa\xd4\xf7\xdd\xb0\x61\x95\x56\
+\x9d\xd7\x12\x91\x66\x30\x18\x6c\x78\xd9\xd1\xa4\x7e\x3a\x55\x20\
+\x04\x5d\xbe\x3c\x5a\x00\x38\xcf\xc5\xa3\x93\x4c\x48\x5c\x5c\x5c\
+\x59\x21\x61\x53\xb1\x62\x77\x32\x34\x28\x56\xbd\x77\x19\x3a\xf4\
+\x9c\x97\xa9\xe9\x54\xf1\x7d\x60\x30\x38\x5b\x05\x6c\x0f\x76\x15\
+\xc0\xba\xaa\x55\x3d\xa4\xaa\xb0\x05\xae\x45\x41\x43\xd0\x9b\xc6\
+\xae\xd8\xd8\xec\x91\x55\xce\x24\x1d\xd0\x00\xcb\xdc\x7a\x29\xfb\
+\xb7\x00\x4c\xab\xe4\x37\x83\xc1\x78\x78\xe4\x48\x67\x65\x9b\x49\
+\x54\x7a\xda\x41\x4d\xec\x91\x94\x0b\xcf\x86\xb1\xe1\x8a\x7c\x1f\
+\xe9\xaa\xc8\xf7\x3e\x9a\x08\xd1\x53\x30\x18\xec\x34\xf9\xdb\x32\
+\x01\xb5\x2e\x6d\xdc\xe8\x3b\xfe\xe6\x4d\xcb\xce\x36\x36\x7b\x2b\
+\x77\xef\xee\xaa\x87\xa2\x57\x95\x9e\xde\x97\xae\x76\x76\xe7\xf0\
+\xca\xd9\x05\x2a\x55\x3e\x5c\xb7\x82\xaa\x6a\x90\xef\x5b\x1c\x1f\
+\xbf\xa6\xdb\x86\x0d\xbb\xf5\xf3\xe6\xfd\xa2\xa7\x52\x1d\x86\xf1\
+\xfd\x24\xb4\x40\x79\x9a\xb2\x75\x14\x83\xc1\x90\xc6\x56\x18\xfc\
+\x4c\xaa\xce\x88\xd3\x8d\x7e\x7b\xf7\x6e\x5f\xe7\x5f\x7f\x55\xab\
+\x44\xef\xed\xda\xd5\x87\x64\x03\x34\x5b\x3b\x41\x06\x3c\x9c\xae\
+\xe8\xfe\x73\x03\x67\xc0\xb1\x0f\x0e\x1f\x5e\x43\xf7\xd0\xe3\x77\
+\x4c\xc5\x90\x77\x82\x81\x1a\x43\x0c\x06\xe3\xe8\xef\xbf\x1b\xc3\
+\x80\xde\x6b\xc4\xe9\x52\xec\x2a\x57\xbe\x81\x66\x23\xcb\x14\x7d\
+\x7d\x13\x21\x3a\x2a\x71\xbb\xcb\x96\x96\x7b\xf1\x7e\x28\x19\xea\
+\xf2\x3c\x79\x76\x21\x21\xfa\x33\x52\xc9\xfc\xa5\x91\x95\x06\x3d\
+\x40\x4b\x30\x05\xe9\x63\xe7\x29\x0e\x28\x14\x30\x18\x82\x1d\x28\
+\xb5\xe2\x23\x22\x4c\x4e\xcf\x9c\x79\x04\x92\xde\x17\x5c\x87\x0d\
+\xdb\xf3\xe5\xcb\x97\xa5\x18\x6f\xa1\xb1\x5a\xe5\x46\x45\x42\x24\
+\x32\x53\x62\xdc\xa6\x4f\x1f\x97\x10\x1b\xbb\xe8\xf0\xf0\xe1\x27\
+\x51\x1e\xa4\x0e\x92\x1f\x1a\x34\x88\x0c\x4b\x8f\x94\xa0\xcd\x72\
+\xe4\x78\x40\x63\x44\xa8\x59\x39\x69\x95\x0a\x31\x18\x0c\x12\x9d\
+\x05\x7b\x80\xf3\xc1\xb9\x60\x0d\xa1\x05\xc8\xc1\x2d\xa7\x54\x30\
+\x29\x6c\xe4\x74\x6a\xda\x34\xd3\x37\x77\xee\xac\x41\x2e\xe6\xf5\
+\x60\x6f\xef\x55\x4a\x2f\x35\x84\x10\x76\xc9\x52\xa0\xcf\x52\xa5\
+\xf8\x10\xae\xe5\x45\xda\xc0\x60\x70\x1b\xae\xa7\x1e\x1e\xd6\xe8\
+\x2a\x7a\x93\xe2\x76\x64\x54\xb8\xbe\x7e\x79\xed\xda\x34\x92\x89\
+\x13\x00\x29\x0f\xc3\x83\xf9\x1e\x8a\xd0\xef\x61\x8c\x56\x8e\xad\
+\x5b\x5f\xa7\x6a\x04\x18\x5d\x24\xde\xff\x8e\x95\x8e\xc1\xe0\xde\
+\x77\x53\x70\xbe\x5b\x8e\x56\xca\x87\x1c\xdb\xb6\x3d\x14\x70\xfc\
+\xb8\x21\xc6\x72\x28\x7a\x98\x60\x8a\xcf\x9a\x35\x7b\x31\xd6\x05\
+\x1c\x49\xa5\x3f\x38\x27\xba\x84\x87\x86\x96\x13\xdf\x05\x06\x83\
+\x0d\xaf\x1c\xd8\x5d\x4a\xb3\xd7\x55\xce\x79\x60\x3c\x64\xd9\x03\
+\xa5\xc8\x51\x36\xf9\x6e\x75\x70\x02\x58\x4d\xa4\x0f\x18\x0c\xc6\
+\x5c\x21\xf2\x61\x3b\xf9\x19\x9d\x5c\x5f\x3e\x38\x7e\xbc\xbe\xc8\
+\x58\x30\x18\x8c\x13\x93\x26\x6d\x20\x99\x3e\x18\x1e\x85\x19\x1c\
+\xc0\x3e\x19\xd4\xb7\x9c\xc1\x99\x26\x8c\x1e\x9b\x36\x6d\x6c\xbf\
+\x72\xe5\xfe\xc2\x15\x2b\xbe\x43\xb9\x0f\x55\x98\x1f\x01\x57\x88\
+\x8c\x03\x83\xc1\x71\x3d\x70\x41\x74\x68\xe8\x8a\x9b\xdb\xb7\x6f\
+\x8b\xfd\xf0\x21\xdd\xbb\x81\x32\x18\x2a\x50\x82\x21\x63\x72\xe5\
+\xc1\x2a\x60\x14\x56\xbb\xab\xe2\xc7\x00\x83\xc1\x3d\xd8\x32\xe1\
+\x0b\x8d\xc1\x60\x50\x20\x1d\x41\xf3\x27\x30\x3a\x3f\x30\x23\x45\
+\x6a\x19\x0c\x06\x79\x38\x91\x46\xf6\x1a\xfc\xb4\xad\x49\x93\x9f\
+\x44\xc6\x82\xc1\x60\xbc\xbd\x7f\x7f\xe2\x2b\x3f\x3f\x92\x61\x6f\
+\x2b\x24\x18\x8c\x0c\x92\x08\x67\x94\xa8\x51\xc3\x19\x97\xfa\xe0\
+\x75\x91\xfe\x60\x30\x18\x24\x54\x0b\xda\x64\x42\xc2\x33\x83\x03\
+\xdf\x8c\x14\x21\x16\xe2\x32\x53\x2f\x07\x54\x1a\x32\x16\x0c\x06\
+\xc3\x7d\xc1\x82\xa6\xa8\x44\xb8\x06\x09\x87\x8c\xd6\xc2\x64\xf0\
+\x19\x8e\xd1\x61\xe5\xca\x7b\xb8\xec\x01\xa3\xc5\x0f\x01\x06\x83\
+\xcf\x81\x27\xb1\x3c\x5e\xc4\xb5\xa1\xf8\xd7\x81\x41\xba\x8d\x13\
+\x48\x1a\x4e\xe8\x04\x18\x79\x4b\x96\xf4\x55\x09\xd1\x4a\xa8\x54\
+\x9e\xd4\x09\xc8\x58\x08\x23\xf1\xef\x01\x43\x0a\xa3\x3e\xc4\xb5\
+\x8b\xc8\x72\x30\xd0\xff\x6e\x23\xcd\x89\xa6\xb8\x2d\xb8\xef\x5f\
+\x92\xb1\xc2\x38\x39\x75\xea\x09\x48\x85\x47\xcb\x09\x3e\xb9\x58\
+\x88\xca\x22\x4b\xc0\xa0\x5e\x77\x30\xae\x38\x8b\x5c\xb9\x3e\x9e\
+\x9d\x3d\xfb\x08\xfa\x22\x38\x6c\xaa\x53\xe7\xa6\x54\x8d\x3e\x29\
+\xfe\x15\xe0\x0c\xf9\x4e\x90\x17\x78\x0e\x61\x9d\xcf\x10\xce\x49\
+\xc6\x84\x93\xf1\x15\x9d\x29\x44\x2e\x91\xa9\x60\xc8\xde\x07\x4a\
+\xff\xbb\xd9\x60\x8f\xcf\x9f\x3f\x4f\x75\x68\xda\xf4\x16\x8d\x9b\
+\xe5\xca\xd5\x48\xfc\xf0\xe0\x49\xee\x07\xa6\xec\xeb\xd1\xc3\xfb\
+\xa9\xbb\xfb\xfa\xd3\x33\x66\x1c\x40\xbb\xdf\x3d\xd4\xe8\x10\x1c\
+\x37\x50\x08\x3d\x91\xe1\x60\x98\x08\xd1\x5c\x11\xb4\x75\x1e\x38\
+\xf0\x38\x35\x2e\x11\x12\x07\xfa\xf5\xb3\xa5\xf1\x3d\x5d\xba\x18\
+\xcb\x39\xdb\x8a\xb9\xb1\xc3\xb5\xb0\xf8\xe1\xc0\x06\xf7\xdc\x3c\
+\x57\xae\xa8\xe8\x97\x2f\xcd\xa9\xbf\x1a\xf8\xfb\xc9\xc9\x93\x47\
+\x91\xce\x87\xdc\x66\xfa\x83\xad\x44\x46\x82\xe7\x80\x9c\x57\x37\
+\x20\x46\x1b\xbf\xb1\x56\xad\x47\xe8\xe6\x9a\x8c\xb1\x6e\x78\xa4\
+\xc2\xd5\x00\x73\x71\x90\xe6\xe2\xfa\xe6\xcd\x73\x05\xb0\x4c\x5f\
+\x7f\xaf\x9c\x9b\x47\x3f\x60\x09\x10\x3b\x4d\xce\xcc\x9a\x75\x14\
+\x86\xd6\x41\x48\x58\x95\x2b\x37\x8b\xc6\x37\xd6\xac\xf9\x18\x7f\
+\x04\xb1\x52\x18\xd5\x29\x7d\x3d\x66\x0c\xf2\x0e\xc3\xd0\xc6\x80\
+\x0b\x69\x1e\x0e\x8f\x18\x71\x2e\xe6\xed\x5b\x63\x9b\x72\xe5\x42\
+\xa5\x41\xbd\xc7\xb3\x60\xd9\x11\x88\x54\xc5\xfa\x0b\x00\x5b\xcc\
+\x4d\x34\x76\x64\xd4\xa8\xfd\x18\xa3\x36\x5d\x4d\xc0\x36\x42\x03\
+\xd2\x58\xe7\x80\x1d\x84\xce\x80\x91\x2d\x5f\xe9\xd2\x21\x1d\x56\
+\xad\xf2\xc6\xcd\x65\xa5\x96\x2b\xe6\xe5\xcb\xf9\x06\x05\x0b\x86\
+\xfd\xee\xe3\xb3\x7f\xd2\xdd\xbb\x1b\x0d\x5b\xb6\xf4\xcb\xa6\x52\
+\x0d\x40\x94\xfc\xe1\x12\x7a\x25\x5d\xc0\x28\x25\x84\x91\x4a\x88\
+\x8d\xe0\x0a\xbd\x9c\x39\x13\xda\x9a\x9b\x5f\xc9\x57\xa2\xc4\xfa\
+\x81\xce\xce\x96\x95\x3a\x75\xf2\xd1\xcf\x9f\x3f\x29\x67\xee\xdc\
+\x02\x3f\x9f\x1f\xe9\xe9\x79\x48\x08\x11\xb0\x50\x88\x12\x21\x57\
+\xaf\x0e\x45\xf8\xe0\x4d\xf7\xcd\x9b\xef\x60\x2c\x36\x45\x08\x73\
+\x5c\xbd\x60\x5c\x47\xc9\xf1\x22\x57\x4d\x3a\x83\x4f\x03\xdd\x31\
+\x67\xdb\x84\x6e\x80\xf1\xcc\xd3\x73\x1d\x56\xb7\x7a\x42\x02\x93\
+\x63\x4d\xab\x1b\xf4\xfa\xef\x5f\x5d\xb7\x6e\x10\xd4\x88\xd7\xe3\
+\xf9\x28\xe7\x41\x83\x3c\x69\x1c\x0d\x30\xec\x44\xba\x81\xe1\xb7\
+\x65\xcb\x12\x5b\x23\xa3\x17\xb4\x62\xc1\x3b\x19\x02\x83\x2a\x86\
+\xf9\xc8\x05\xfe\x0e\x9a\x4a\x2e\x06\x5b\x49\x43\x5a\x07\xa6\xdc\
+\xd8\xbc\xd9\x11\x63\x0d\x04\xf0\xe8\xf8\xf1\x16\xe8\x22\x14\x47\
+\xca\xd2\x1b\xaa\x57\x37\x12\x12\x3b\xdb\xb7\xdf\x2d\x3b\x0a\xd9\
+\xe2\xdd\x9c\x42\x27\xc0\x5e\xca\x61\xa0\x4a\x00\x08\x09\x54\x85\
+\xc1\x25\x22\x4c\xf0\x49\x23\x06\x94\x88\x43\x7c\x01\xe8\xf3\x07\
+\xae\x2a\x5c\x38\x82\x1a\x68\xe0\xfd\x3c\x22\xbd\xc0\x5e\xe2\x4a\
+\xf0\x44\xce\xf2\x30\x36\x76\xd9\x58\xbb\xf6\x15\xf7\xf9\xf3\x0d\
+\x35\x9e\x15\x96\xe2\xb5\xb9\x85\x04\xce\x73\xaf\xd1\x66\xeb\x35\
+\xc6\x26\x2a\xf3\x86\x79\x19\x43\xf3\xe5\x32\x64\x88\x07\xc6\xba\
+\x09\x80\x0c\x17\xef\x46\x59\x95\x2e\xfd\x26\x29\x21\x61\x9e\x74\
+\xc2\xe8\x02\xb8\x8d\x2f\x75\x8f\xa1\xc0\x37\x78\x92\x9c\x25\x8f\
+\xdd\xdc\x36\x3a\x0d\x18\xe0\x45\x93\xb8\xbb\x4b\x97\x4b\xa4\x52\
+\xec\x3c\x64\xc8\xef\xcf\x3c\x3c\x68\x35\x6c\x29\xb7\x2c\x9d\x64\
+\xc3\x0b\x6f\xd0\x01\x6c\x21\xbe\x17\x3c\x07\x39\xc0\x36\xa0\x31\
+\xd8\x4c\xfc\x09\x56\xe4\xcf\xff\x80\x9a\x93\xb8\x0e\x1d\xda\x57\
+\xce\x43\x5e\x30\x14\xe3\x61\xf2\xcb\x30\x9f\x1c\xdf\x0c\xa6\xec\
+\xea\xd4\xc9\xd7\x75\xc4\x88\x09\x3a\xe4\x6d\x66\xc0\x70\x4c\x94\
+\xcc\x86\xad\x8d\x1a\xdd\xc6\xa4\x8d\xd8\xdf\xab\xd7\x62\x7c\x3b\
+\xbe\x96\xde\xcb\xc2\x60\x79\x70\x20\xa8\xa7\x6c\x6b\x10\xb7\xfb\
+\x88\x6d\x50\x20\x8c\x34\x49\xae\x86\xe3\xc4\x77\x83\xf1\x77\xb6\
+\x7d\x37\xec\xed\x47\x58\xe4\xc9\x13\x2b\xe7\xeb\x29\x98\x00\xa6\
+\x78\x99\x99\x39\xd1\x97\xa1\xdc\xa9\xd4\xc5\x98\xe2\x65\x56\x18\
+\x08\xd6\x11\x59\x0f\xc6\x23\x2f\xaf\xa2\x07\xfb\xf5\x3b\x8b\xe6\
+\xf3\x89\xe4\x91\x5c\x9e\x37\xef\xfe\x7d\xdd\xbb\x57\xc4\x04\x2e\
+\xf1\xdd\xb0\x61\x34\x0c\xe9\x77\x0d\xaf\xe6\x78\x30\x65\x75\xd1\
+\xa2\xcf\x43\xaf\x5f\xb7\xa1\x33\xc6\x87\x27\x4f\x56\xaf\xad\x58\
+\x31\x48\x6e\x43\xf7\x60\xc2\x6b\x8a\x8c\x02\x1b\x65\xa1\xe7\x5e\
+\x5e\xcb\xb1\x03\x39\x8b\x34\xb0\x53\x34\x17\x38\xbf\xc5\x24\x44\
+\x47\x53\xbf\x84\xec\xf2\x1c\xee\x45\xf3\xb8\xab\x43\x07\x5f\x74\
+\x7c\xdd\x7f\xa0\x4f\x9f\xf3\x50\x96\x4e\xa6\x2f\x48\x8c\x97\x14\
+\x12\x5a\x73\xba\x28\x13\x93\x1d\x58\x8f\x11\xec\x4d\x1a\x1c\xb4\
+\xc2\xc9\x30\x40\xb4\xb5\xa1\xe1\x4a\x5c\xef\xd3\xb9\x41\x00\x34\
+\x21\x78\x16\x81\x16\xbe\x21\x71\xe1\xe1\x16\xf8\x9d\x41\x60\x19\
+\xb0\x72\x54\x68\xe8\x94\x65\x39\x73\x26\xaa\x5b\xfb\x16\x2c\x68\
+\x2c\x80\x3f\x84\xc8\x98\x73\x03\xcf\x57\x71\x70\x54\xa8\x9f\x9f\
+\xe9\x96\x86\x0d\x6f\x43\xac\x28\xe9\xd8\xf8\xf1\x03\x31\x37\xcd\
+\x30\x5f\x43\x69\x0e\xec\xeb\xd6\x7d\x80\x77\x4c\xe4\xae\x64\x1c\
+\xfa\xe2\x1d\xa1\x71\xcb\x62\xc5\xd6\x0a\x2d\xc0\x10\xb7\xcb\x55\
+\xf0\x05\x7e\x7f\x90\xc8\x34\xf0\x44\x96\x05\xc7\xdd\xda\xb5\xcb\
+\x01\xdb\xc9\x60\x65\x3b\x02\xed\xfd\x13\x18\xaf\x88\xfb\x3e\xb2\
+\x43\xa8\x33\xc5\xed\xb4\xb7\x43\x58\x19\x3f\x2c\xcf\x97\x2f\x26\
+\xfa\xd5\xab\xe9\x78\x2f\xa7\x4c\x8a\xde\x40\x67\x44\x91\x11\xe0\
+\xf9\x52\x81\xa3\x3e\x45\x46\x9a\x63\x25\x9b\xaa\xb9\x85\xdc\xdd\
+\xb9\xf3\x55\x3c\x33\x12\x12\x8f\x4f\x9e\xfc\x45\xc6\xf3\xae\x0a\
+\x2d\x24\x25\x25\x35\x42\x67\xd8\x73\xf4\x1c\x0e\xb3\x0b\x22\xd3\
+\xc1\x93\x58\x17\x9e\xb3\x39\x94\x40\x8b\x6d\x4b\x20\xbc\x5c\xf3\
+\x31\x66\x80\x09\x99\x01\xa6\x3c\x39\x7b\x76\x29\xbd\x27\xb4\x80\
+\x6a\xe7\xb5\x64\xac\x78\xd6\x4e\x06\x5d\x95\x8c\xf7\x70\x5c\xa7\
+\x82\x19\x53\xf0\xca\xf3\x55\x03\x2c\x74\x64\xf4\xe8\x0d\xd8\x5e\
+\x46\x91\x97\x19\xd9\x43\xf1\xe4\x75\xd6\x48\x1d\xeb\x49\x73\x81\
+\xad\xa8\x67\x2a\x73\x9e\x0d\xe7\x75\x6f\x6a\x68\x02\xc3\xdc\x80\
+\xfb\x12\x22\xf3\xc1\x07\x78\xb0\xbd\x8c\x01\x35\x14\x00\xb6\x23\
+\x03\x69\xd2\xb6\x35\x6b\xb6\xfd\x1b\xbf\xd3\x08\x1c\xbf\xfe\xe7\
+\x9f\x4b\xd3\x96\x14\xee\xeb\x90\x6b\xeb\xd7\xef\x82\xdb\xfa\x8d\
+\x34\xbe\x00\x6a\x74\x2f\x32\x0a\x3c\x67\x4d\x3f\xbe\x79\xb3\x8c\
+\x72\x62\x61\x78\xb1\x30\xa0\x77\x32\x21\x7a\x03\x98\x84\x94\xb0\
+\xd8\x60\x1f\x9f\xd5\x64\x60\x42\x03\x34\x27\x6a\x8f\x66\xfb\xf6\
+\xb4\x2a\x0e\x17\x59\x0a\x9e\xc4\x82\xca\x6a\xb6\x65\xfc\xf8\x1c\
+\x96\x25\x4b\xbe\x93\x49\xb6\x23\xc4\x37\xb0\x48\x88\x32\x70\x5d\
+\x87\xde\x73\x76\xde\x92\x9c\x9c\xdc\xcf\xba\x5c\xb9\x60\x72\xc8\
+\x60\xc2\x63\xe4\x8a\x77\x0c\xd7\x0c\x12\x48\x65\xa7\x0a\x58\xf7\
+\xd6\xce\x9d\x76\xab\x8b\x15\x7b\xad\xec\x32\xb0\xd5\x0f\x92\xbb\
+\x8f\x3e\x5a\x0e\x93\xec\x98\x8f\x7b\x58\x15\x3f\x86\x3f\x7d\xba\
+\x02\xcf\x8b\xfd\xa9\x7c\x7b\xe6\x82\xe1\xe7\xe0\x30\x77\x65\xc1\
+\x82\x91\x14\x06\xc0\x04\x5c\x00\x17\xc8\xec\x14\x03\xad\x89\x9f\
+\x00\x8e\xc5\x36\x65\xb8\x12\x94\x8d\x08\x0a\x5a\x45\x8d\x0f\xe9\
+\x1e\x71\xa3\xa1\x22\xa3\xc1\x6d\x96\x17\x04\x5d\xbc\x68\xf7\xe2\
+\xd2\xa5\xb5\x5f\xbe\x7c\x59\x2a\x83\xe5\x06\x5a\x21\xa1\x29\x34\
+\x1f\xc7\x27\x4e\x74\xc3\xb3\xae\xe2\x4f\x20\xe7\xfa\x84\xb1\x10\
+\x15\x44\xe6\x81\xdd\xd2\xef\xee\xdd\x5b\xea\xd8\xa6\xcd\x0d\x64\
+\xb5\xab\x33\x52\x68\xeb\x82\x42\xc9\x5a\x5a\xef\x15\xc1\x19\xb0\
+\xb8\x66\x50\xd6\xd3\xc4\xa4\x39\x3c\x6a\x89\x08\x21\xbc\xc0\x19\
+\x31\xe3\x63\x76\x3c\x57\xb9\xc1\xc6\x60\x3b\xb0\x36\x98\x8d\x1c\
+\x5f\xb2\x82\xfc\x27\xb0\x30\xf8\x61\x55\xd1\xa2\xaf\x92\xe2\xe3\
+\x17\x50\x4a\x99\xd0\x86\xac\x58\x90\xde\x4c\x47\x30\x79\x6d\x85\
+\x0a\x99\x1c\xcf\xe3\x89\x2c\x00\x8e\xf9\x14\x1d\x6d\x1e\xe2\xe3\
+\x63\x4b\x57\x3a\xef\xa5\xb2\x05\xb1\x00\x53\x2e\x2c\x5b\x76\x90\
+\x82\xb2\xb8\x9f\x48\xf1\xa0\x07\xae\xae\xf6\xb8\xcf\x82\x58\x1d\
+\x83\x76\x1c\xb2\xf4\x2a\x01\x86\xa7\xae\x26\xa7\x73\x36\x9d\xbf\
+\xbf\x91\x14\x61\x2d\xab\x16\x26\xc5\x45\x45\x35\x7a\xe1\xed\xbd\
+\x16\xef\xf6\x13\x59\x06\x6e\x52\xdf\x0c\xfc\x05\x34\xd0\x38\x80\
+\x0f\x03\x2b\x62\x92\x3e\xe1\xdb\xf0\x09\x9e\x4d\x07\xb3\x43\x32\
+\xa0\x20\xbc\x60\x34\x61\xbf\x8b\x2c\x03\x6f\x35\x03\x4f\x9d\xda\
+\x60\x57\xb9\xf2\x63\x32\x36\xaa\xbd\x43\x0c\x6f\x37\xe6\x26\x55\
+\x0f\x32\xe2\x79\xcd\xb1\x43\x09\x91\x67\xc1\xdb\xaf\x6e\xdf\x6e\
+\x41\x25\x41\x42\x67\xc0\x69\x62\x07\xe4\xe4\xc4\x62\xfb\xf1\xe5\
+\xe1\xd1\xa3\x9b\x30\x41\xd5\x85\x84\xdc\xde\x14\x14\x59\x09\x36\
+\xba\xca\xe0\x1f\x97\x57\xad\xda\x8f\x6a\x90\x0f\xd2\x91\x75\x59\
+\x5b\xa8\x48\x49\xa0\x86\x03\x46\x9d\xca\xb7\xae\x4a\x15\x1f\x1d\
+\x9b\x3b\x46\x64\x68\x68\x3d\x2a\xa4\xa4\xea\x65\xf2\x66\x52\xa0\
+\x75\xae\x10\xf9\x84\x2e\x82\xb3\x8b\x9a\x25\xc4\xc4\x18\x1f\x19\
+\x39\xf2\x2c\x4a\x84\x6e\xb8\x0e\x1b\x96\x5a\x4f\x04\x15\xb6\xa1\
+\x97\xe9\xec\x1d\x7a\xed\x1a\xa5\xf2\x19\x0a\x9d\x03\x67\xbe\xf7\
+\x7c\x7b\xf7\xae\xe5\xf6\x16\x2d\x6e\xd2\x2a\x87\x04\xe7\x81\x42\
+\x57\xc1\xf3\x95\x07\xec\x05\x2e\x01\x1b\xcb\x5d\xca\x7a\xd0\x44\
+\xa6\xf2\xfd\x2a\x03\xe6\x5e\xb2\xe2\x5c\x47\xc1\x13\x59\x0a\xfc\
+\x3d\x32\x24\x64\x25\xae\x3a\x6e\x70\x0c\xa5\xac\x87\x80\xd5\xec\
+\x18\x19\x99\x94\x77\x08\x5d\x9e\x27\x4f\x78\xec\xfb\xf7\xa6\xe4\
+\x2c\x4b\xc5\x31\x56\x16\xef\xcd\x05\xcd\xa8\x64\x2b\xeb\xcb\x80\
+\x78\x22\xab\x83\x65\xc5\x8f\x04\x9e\xb3\xf6\xe7\x8d\x8d\x0f\xa1\
+\x0c\x48\x7d\xbe\x43\xc6\xd0\x5b\xaf\xa5\x4b\xc7\xa5\xa2\x34\xd6\
+\x9f\x0a\x94\xb5\x84\x6b\x6f\xca\x8a\x84\x34\x80\xc1\xe0\xf3\x5d\
+\x6b\x5a\xd5\x9c\x06\x0e\xf4\xc2\x79\x3c\x49\x26\x3a\x2c\xd0\x58\
+\xd9\xca\x83\xf1\x78\x16\x85\xc4\xe9\xdd\x14\x5a\x80\x32\xc0\x79\
+\x0a\x39\xe0\x18\x11\x84\xf7\x4d\xd3\xde\x27\x8f\xc1\xe0\x78\x6b\
+\x7f\x72\x96\x6c\x6d\xdc\xf8\x26\x92\x1b\x36\x0b\x09\x25\x39\x5d\
+\xa6\x8b\x4d\x05\xbb\x80\x23\x2e\x98\x99\x1d\xa0\x71\xa2\x4d\xa5\
+\x4a\xf5\x45\x9a\xc1\x60\xb0\xe1\x19\x82\xe3\x41\x13\x30\xbf\x00\
+\x10\xbf\x5b\x4a\x46\x85\x62\xd8\xb9\x9a\x7a\x29\xde\xd6\xd6\x6d\
+\x69\xdc\xbe\x5e\x3d\xaa\xc7\xeb\x2e\xbe\x1b\x0c\x06\x97\x01\xe5\
+\x15\x12\x0e\xcd\x9a\x91\x61\x7d\xc5\x39\xef\x89\xe6\x99\x8d\x9c\
+\x26\x07\xfb\xf7\xdf\x4d\x2a\x00\x24\xcb\x21\xd2\x07\x0c\x06\x97\
+\x6f\x41\x1e\xdf\x4b\x36\x1a\xa1\x4a\x71\x52\x0e\xcb\x3b\x5b\x08\
+\x0a\x33\x74\x02\xd3\xb9\x1b\x13\x83\xc1\x46\xd7\xdc\xd3\xd4\xd4\
+\x79\x65\xa1\x42\xef\x34\xbc\x94\x89\x24\x56\x2b\x32\x04\x0c\x06\
+\x1b\x5d\x23\x54\x7e\x98\xdc\xde\xbb\x77\xdb\xce\x76\xed\x4e\x9c\
+\x9a\x3e\x7d\xf5\xa7\xa8\xa8\x8a\xdf\x21\xb9\x9f\x1b\x1c\x0d\x5a\
+\xc0\x68\x67\xe3\x5a\x51\xfc\x0b\xa1\x12\xff\x10\x0c\x86\x3c\xdb\
+\xd5\x06\xeb\x80\x5f\xc1\xf3\x2a\x95\xea\x79\x1a\x3a\x07\x75\x56\
+\x09\xb1\x03\x2c\xad\x31\xfc\x25\x45\x88\x71\xcb\x84\x70\x14\xe9\
+\x06\x06\x83\x9b\xc9\xd4\xc3\x8a\xf6\x11\xb1\xbb\xc4\x13\x13\x27\
+\x1e\xa4\xcc\x24\x2a\xdf\x42\x91\xf3\x07\xa9\x2c\xd0\x4c\xfc\x6b\
+\x90\xc5\x25\xf3\x0c\x06\x56\x31\x13\x3d\x3d\x3d\xd1\x6b\xc7\x8e\
+\xbd\x3d\xec\xed\xfd\x0a\x96\x2b\x77\xaa\x7a\xbf\x7e\x7b\xda\x9a\
+\x99\xed\x15\x2a\x95\xc8\x5d\xb4\xa8\x89\x90\xf8\x67\x69\x63\x0c\
+\x06\xaf\x6e\xd9\x51\x89\x10\x4d\x82\xb5\xd8\x96\x4e\x02\x0b\x6a\
+\x2a\x06\xd8\x18\x19\x05\x5b\x96\x28\x11\x8a\x71\x15\xe9\x65\x82\
+\x91\xf8\x9d\xc5\xdf\x21\x58\xcb\x60\x30\x16\x0b\xf1\x33\x79\x36\
+\xd1\x00\xf4\xb8\x12\xe3\xd3\x04\x74\x4e\x9f\x93\xdc\xbe\xba\x07\
+\x9e\x9e\x5e\x37\x7a\x57\xf2\x79\x1a\x45\xa8\x18\x0c\x06\x29\x73\
+\x43\xad\x3b\x6e\x63\x9d\x3a\x57\x53\x71\xa4\xa8\x85\x6b\xd1\xe3\
+\xe2\x12\x55\x9e\x40\xf5\x6d\x0b\xdd\xbb\xfc\xf6\x9b\x07\x8c\x30\
+\xd0\xa1\x65\x4b\x6a\xdf\xa5\x5a\x44\x6d\xf6\xfe\x1e\x18\x0c\x06\
+\x8c\xed\x92\x5c\xb5\x7a\x69\x18\x5b\x77\xd2\x35\x25\x59\x45\x28\
+\x8e\x59\xed\xee\xdb\xb7\x38\x82\xeb\xb1\xb6\x15\x2a\xbc\xa0\x4a\
+\x75\xc8\xf9\x59\xe0\xfa\x2b\xde\x99\x09\x7e\x01\xb7\x50\x7b\x2e\
+\x91\x3a\x18\x0c\x06\x29\x81\x81\x63\xa1\x97\x72\x53\x76\x62\x4a\
+\xc4\xf5\x0c\x8c\xc7\x1d\xd7\xcf\xa8\xc9\x8b\x86\xb7\x92\xe4\x39\
+\xfa\x61\xec\x0f\x7a\x87\x7a\xe8\xd9\xff\xfc\xf3\x3c\x3c\x4f\x40\
+\x2e\xe7\xa6\x3d\x9d\x3b\x97\xb2\xab\x54\xc9\x4f\x51\xf7\x96\x4a\
+\xd3\x0c\x06\x23\x95\x2d\x63\x6f\xe5\x4c\x66\x5b\xb1\x62\x30\xba\
+\x37\x79\xa0\x23\xd3\xb5\xe5\xf9\xf3\x5f\xd9\xdd\xa9\xd3\x4e\xd2\
+\xd2\x24\x5d\xd3\xa0\xa0\x20\x03\xea\x51\x01\x25\xe9\x8f\x7b\xba\
+\x76\x3d\x43\xa1\x02\xd9\xbd\xc9\xef\xd5\xab\x57\xb9\xd1\x91\xd7\
+\x0f\xab\xdf\x57\x04\xdd\x3d\xce\x2f\x5b\x56\x97\x85\x6b\xb5\xc1\
+\x60\x48\x17\x3f\x74\x4a\xb7\x6e\xaa\x5b\xf7\x21\x3c\x95\x9f\xb1\
+\xd2\xbd\x7d\x72\xfa\xb4\xad\x6c\xb1\x3c\x17\xec\x23\xfb\x59\x74\
+\x00\x53\xa8\x43\x10\x5d\x91\x46\xf6\x42\x9e\xed\x2e\xa3\x30\x76\
+\xb1\xfa\xe7\x3e\x7d\xbc\x64\x33\xcb\x56\x1a\xc6\x56\x87\x0c\x95\
+\x82\xea\xb8\x65\x30\x18\x54\xe4\x0a\xce\x7a\x70\xe4\x88\x3d\x35\
+\x21\xa1\xfe\x07\xe8\x53\xfe\x02\xdb\xc5\xf6\x1a\x2a\x70\x47\x94\
+\x95\x10\x35\x79\xde\x67\xe7\xcc\x51\xdf\x63\x3b\x79\x99\xde\xb7\
+\x29\x57\xee\x21\x9a\xcd\x98\x90\xfc\x9f\xd2\x52\x4d\xfe\xde\x50\
+\x18\xf2\x27\xcb\xe2\xc5\x8d\x05\xc0\x60\x30\x64\xe7\x1e\xb0\xda\
+\x33\x77\xf7\x55\x68\x02\xea\x61\xf7\xd3\x4f\x67\x4e\xcf\x99\xd3\
+\x41\x39\xe7\xc1\x68\xde\x6a\x88\x18\x2d\xc1\xf6\x73\x9f\xd4\xd3\
+\xa4\x5e\x15\x11\x10\xab\x5a\x83\xf1\x06\xf2\xfd\x0e\x52\xe0\x76\
+\xe3\x91\x09\x13\xca\xbf\xba\x71\x63\x4d\x42\x6c\xec\x7c\xd9\xa8\
+\x92\xc1\x60\x68\x06\xba\xc1\x71\xa0\x09\xd8\x5b\x48\xbc\xb9\x7b\
+\x77\xa0\x8f\xb5\xf5\x5e\xb9\x65\xac\x0a\x49\x87\xab\xd2\xc9\xf2\
+\xe5\xba\xbd\xfd\x4e\x4d\x15\x68\x8c\xe7\x47\x13\x51\xc5\xeb\x19\
+\xb1\xb3\x63\xc7\xbe\x7f\xa1\xf0\xcd\x60\xb0\x9e\x4a\x2a\x86\x38\
+\x00\x2c\x47\x4e\x10\xac\x78\xf1\x64\x50\x87\x06\x0d\x3a\x8f\xb1\
+\x29\xda\x7d\xd1\xd1\x9c\x92\x3c\x9f\x51\xd8\xa2\x46\x3f\x74\x73\
+\xab\x2d\xbe\x1f\x0c\x06\xe3\xf8\xf8\xf1\x0b\xd0\xf8\xf3\xc6\xe7\
+\xa4\x24\xe3\xd4\x5a\x6b\x99\x66\xcb\x36\x8f\x0c\xf2\xcc\xac\x59\
+\x47\x65\x97\x5e\x9d\xc2\x0f\xb5\xb7\x65\x30\x7a\x6e\xd9\xe2\x86\
+\x4b\x0a\x78\x06\x25\x40\x61\x94\x63\xa9\x12\xa2\x2b\xee\x97\x26\
+\x61\x81\x4b\xf9\xfa\xd5\x38\x1f\x1a\x81\x76\x58\xb5\xca\x1b\x63\
+\x97\xfe\x66\x4c\x70\x16\x2e\xc5\xc1\x15\x66\x42\xc4\x68\x3c\x62\
+\x30\x18\x9a\xa2\x45\xd8\x62\x8e\xa3\x40\x39\x18\x0f\xe3\xbb\x85\
+\xeb\x57\xf4\x42\x20\x25\xb1\x7a\xda\xb5\x9f\x32\xf6\x77\x14\xef\
+\x9d\xc7\x75\x89\xa2\xc5\x02\xcf\xe8\x7a\x79\xee\x0b\x01\x0d\xc4\
+\x37\xc1\x60\xb0\xf1\x95\xa5\xb0\x02\xd2\xbe\x9e\x92\xd1\x50\xa7\
+\xdd\x93\x93\x26\x6d\x37\x35\x35\xcd\xa6\xd5\x64\xc6\x44\x3a\x5b\
+\x3e\x49\x8d\xcd\x14\x30\x10\x2c\x8a\x98\xde\x4c\xba\xdf\xd1\xaa\
+\x95\xfb\x5f\xf7\x37\x67\x30\xd8\xe8\xaa\x81\xd3\xbd\xcc\xcc\x9c\
+\x56\x15\x2a\x14\x41\xc6\x23\x57\xb1\x9c\x02\xa0\x8e\xad\xb4\xf2\
+\xa1\xd4\xe7\xc9\x2b\x3f\x3f\xeb\x8f\xef\xde\x2d\xa7\x9e\x85\x14\
+\x70\xc7\xea\x76\x1d\xef\x3e\x31\xcf\x95\x2b\x06\xc5\xaf\x16\xe4\
+\xa4\x11\x7f\x09\x06\x83\x8d\x2e\x3b\xd8\x92\x3a\xed\x3a\x0f\x1e\
+\xec\x81\xd6\xd6\xbe\xe8\x0a\x54\x50\x9e\xd1\x26\x83\x29\x90\x6b\
+\x77\xa2\x3e\x17\x60\x0d\xb0\xed\xe1\xe1\xc3\x4f\xd3\x38\xd1\x6d\
+\xda\x34\x2a\x11\xea\x24\xd2\x06\x06\x83\x9b\x92\x80\x7d\x41\x53\
+\xb0\xbe\x00\xb0\xcd\x1c\x2b\xeb\xee\xb6\x08\x0d\x6c\xfd\xe5\x97\
+\xc5\x34\x4e\x35\x77\xc8\x56\x99\x27\xcf\x86\xff\x04\x0c\x06\x77\
+\x03\x5a\x5b\xa3\x86\x21\x9d\xed\xc0\x8f\x8b\x85\xa8\x2b\x00\x2a\
+\xe7\xc1\x56\xf2\x22\x19\x9c\xdf\xd6\xad\x3b\xc8\x38\xa9\x8f\x21\
+\xee\x17\x81\xe7\xf0\xcc\x0d\xd7\x51\x22\xed\x60\x30\x18\x88\xcb\
+\xed\x44\x02\x74\xb2\x3c\xdf\x85\x11\xe9\xe7\xcd\xf5\xeb\x07\xc0\
+\xd8\x26\xac\x29\x51\x22\x0f\xee\x7d\x69\x0c\x67\xbb\x58\x0d\x9d\
+\x4d\x63\x16\x11\x4a\x23\x18\x8c\xce\xd6\xd6\x2b\x87\x9c\x38\x61\
+\x5f\x67\xd8\xb0\x93\x45\x2a\x55\x7a\xa4\x12\xa2\x88\x00\x5a\x19\
+\x1b\x5f\x26\x7b\x84\x23\x65\x2a\xae\xbf\x54\xea\xd4\xe9\xc2\xc2\
+\x8f\x1f\x6d\x66\x85\x86\xae\x2c\xdd\xa0\x41\x00\xde\x33\x87\xe1\
+\x79\x52\x0f\x3c\xe9\x84\xf9\x9b\x60\x30\x78\x9b\x59\x01\x1c\x1e\
+\x15\x1a\xba\x84\x9a\x8d\xa8\xcf\x6f\x65\xcb\xde\x16\x00\xc2\x05\
+\x17\xb1\xb2\x7d\xc1\x59\x8e\x3a\xc1\x36\x03\xeb\x44\x04\x07\x8f\
+\xa0\xad\xa8\xc6\x6a\x77\x5a\x7c\x17\x18\x0c\x36\xbe\x01\xfe\xdb\
+\xb7\x6f\xbf\x7b\xe0\x80\x39\x39\x4b\x90\x7f\xe9\x8d\xea\x83\x84\
+\x97\xbe\xbe\xed\x84\xc4\x86\xd6\xad\xf3\x52\x38\x81\x6a\xf1\x8e\
+\x8d\x1d\x7b\xea\xf8\x84\x09\xeb\x28\x77\x93\x53\xbb\xd2\x0e\x06\
+\xc3\xf5\xe7\xd1\xa3\x5f\xe0\x5a\x09\x14\xc5\x6a\xd5\xf2\x0a\xbd\
+\x72\xa5\xf9\xde\x2e\x5d\x16\x1a\x23\x2e\x07\xc3\x88\x0c\xbb\x78\
+\x71\x1d\x1e\xa9\xaa\xf6\xee\x7d\xa5\xd7\xb6\x6d\x6e\x74\x04\x3b\
+\xf4\xeb\xaf\x3f\x51\xad\x1d\xc6\x0d\xc1\xb7\x5f\x85\xd8\x6b\x21\
+\xc4\x1d\xf1\xf7\xc1\x60\x30\x5e\x05\x04\x18\xa2\xc0\xf5\x8e\x86\
+\x14\xdf\x67\xba\x42\xaa\x2f\x22\x2e\x2c\x6c\x29\x35\xa7\x24\x59\
+\x3f\x12\x37\x92\x1d\x83\xe2\xe5\x36\xf3\x4b\xda\x1c\x2b\x0c\x06\
+\x0b\x1a\x19\x92\xdc\x5e\x72\x72\x72\x3f\x7f\x47\xc7\xed\x90\xe2\
+\x73\x5e\x9e\x2f\xdf\x2b\x45\xb8\x08\xc6\xd6\x46\x00\xb2\x7f\x79\
+\xca\x86\x1a\x35\x1e\xc5\x85\x87\x5b\x3c\x3c\x7e\x7c\x93\xad\x91\
+\xd1\x0b\x69\xa0\x83\xbf\xf1\xdf\x2e\xfd\xbf\x5e\x4a\x06\x83\x71\
+\x32\x07\xb6\x91\x16\xfa\xfa\xb5\x72\x15\x2c\x78\xb4\x58\x8d\x1a\
+\x4f\xbe\x24\x24\x14\x2d\x58\xbe\x7c\x48\x1b\x33\xb3\x2b\x78\xee\
+\x43\x2d\xb8\x54\x42\xd4\x37\x28\x54\x28\xea\xc3\xa3\x47\x95\xad\
+\x4b\x97\x1e\x71\x6f\xcf\x9e\xa0\xd1\xde\xde\xb6\x39\xf3\xe6\x8d\
+\xd5\xcf\x9f\x7f\x89\xd0\x02\x06\x26\xa4\x08\x11\xa4\x61\x74\x0c\
+\x06\xc3\x6d\xfa\xf4\x3e\x56\x65\xca\x3c\xd3\xd8\x4e\x7e\x5d\x91\
+\x2f\xdf\x53\xa9\x1c\x56\x4b\x00\xd4\x68\x52\xc6\xed\xee\xd1\xca\
+\x66\x5d\xb6\x6c\x80\x8c\xd9\x79\x40\xd8\xe8\x0d\xb6\x9e\x31\x78\
+\x97\xf4\x54\x54\x18\x3f\x08\x5a\x91\x34\x3b\x9e\x3d\x8f\x7e\xff\
+\xbe\xb2\x00\x00\x06\x83\x41\x02\x44\xe8\x71\x37\xcb\x7b\xcd\x9a\
+\x7d\xdb\x9a\x34\xb9\x88\x02\xd7\xc3\xb4\x65\xc4\xf8\x60\xa1\x01\
+\xd2\xc0\xa4\xd0\xc1\x96\x06\x0d\xa8\xf8\x75\x1a\x12\xa0\xf7\xa3\
+\xe5\xf2\x1b\xb9\xcd\x0c\xc4\x98\x91\x00\xcc\x0d\x0c\x8e\x29\xc6\
+\xbb\xb7\x6b\x57\x9f\xc4\xd8\xd8\xfa\xe2\x7f\xc0\x60\xb0\xd1\xe5\
+\x90\x2a\x62\x33\xc0\x85\x60\x1b\x50\x25\x34\x70\xd7\xc9\xe9\xd7\
+\xd5\xc5\x8a\x85\xd1\x0a\x08\xa7\x89\x07\x8c\xc9\x22\x2c\x30\xd0\
+\xdc\x75\xe8\x50\x77\xef\xd5\xab\xf7\x29\xca\x61\x97\x2d\x2d\x27\
+\xd0\x3b\xa8\x44\xf8\x2c\x0d\xef\xba\x89\x10\x4d\x45\xda\xc0\x60\
+\x70\x5f\xf3\xf0\xe7\xcf\xe7\xef\xed\xde\xdd\xc7\x5c\x5f\x3f\x5c\
+\x7a\x2b\x63\xd1\x76\x79\x11\xe9\xab\xc8\xd7\x54\x18\xbb\x40\xb1\
+\xbb\xa7\xee\xee\xeb\x51\x91\x70\x0e\xc2\x47\xf1\xb2\x06\xaf\x9d\
+\x48\x13\x18\x0c\x36\xba\x3c\xe0\xb0\xe4\x4f\x9f\xcc\xae\xd8\xda\
+\xee\x71\x6c\xd3\xc6\xed\xa2\xb9\x79\x2b\x32\x46\xa9\x28\xdd\x9f\
+\x0c\xf1\x40\xdf\xbe\x17\x30\x36\x04\xec\x0d\x29\x3f\x4b\xd7\xe1\
+\xc3\x4f\x3d\x3e\x71\xa2\xa5\x4a\x7c\x0f\x18\x0c\x36\xbc\xc2\xb8\
+\xd4\x05\x6b\x83\x4f\xa0\xaf\x72\x5a\x7a\x26\xaf\xe6\x30\x30\xa8\
+\x31\x23\x38\x78\x6d\xde\xe2\xc5\x6d\x31\x1e\x45\xdd\x7f\xf0\xa8\
+\x23\x18\x2c\xd2\x0f\x0c\x06\x03\x0e\x93\xfb\xcb\xf3\xe4\xf9\x78\
+\x6d\xfd\xfa\x91\x19\x5c\x2d\xc0\x60\x30\xda\x98\x9a\x5a\x93\x9a\
+\xf4\xe9\x69\xd3\x36\x99\x0a\x71\x18\x1c\x85\xa0\x7a\x99\x0c\x30\
+\x38\x06\x83\xd1\x62\xc1\x82\xe3\x7d\xf7\xec\xd9\x5c\xaa\x7e\xfd\
+\x47\x2a\x3d\x3d\xd2\xc5\x74\x44\x50\xfd\x84\xc8\x18\x30\x18\x0c\
+\x52\xfe\x02\x67\x24\xc6\xc5\x2d\x23\xc9\xbe\xb0\xc7\x8f\xe7\x2a\
+\x15\xe8\x19\xe7\x34\x61\x30\xd8\xf0\x4a\xe3\x52\x4d\xda\x99\x0f\
+\x1c\x28\x09\xe2\x5f\x09\x06\x83\xc1\x60\x30\xfe\x0f\x1d\x9b\x1f\
+\x99\x66\xa1\x3a\xad\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x38\xb4\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\xa8\x00\x00\x01\x77\x08\x03\x00\x00\x00\x06\x8a\xf0\xc8\
+\x00\x00\x02\xc1\x50\x4c\x54\x45\x7f\x00\x00\xa3\x6d\x93\xa4\x75\
+\xa1\xae\x96\xd0\xbb\xb2\xec\xcb\x9d\xa4\xd7\xcd\xed\xbb\xbb\xfe\
+\xcb\xcb\xfe\xd0\xce\xfe\xd2\xd2\xff\xc8\xc6\xfe\xc3\xc3\xfe\xdc\
+\xdb\xfe\xc0\xbe\xfe\xb8\xb6\xfe\xd8\xd7\xff\xb3\xb3\xfe\xe2\xe2\
+\xfe\xeb\xeb\xfe\xf3\xf3\xfe\xfc\xfb\xfe\xb0\xae\xfe\xf0\xef\xfd\
+\xad\x80\xa3\xf9\xf7\xfb\xaa\x9b\xe0\xad\xac\xfe\xa4\x62\x7b\xbc\
+\x7b\x7b\xbd\xb9\xf5\xbf\x80\x80\x91\x31\x3d\xa7\x50\x50\xa9\x53\
+\x53\xca\xc4\xf2\x95\x2c\x2c\x96\x40\x53\xcc\x9b\x9b\xcf\xcb\xf7\
+\xae\xa6\xf1\x9c\x53\x6d\xdc\xb9\xb9\xe0\xdf\xff\x9c\x5a\x7b\xb5\
+\xb0\xf4\xee\xe0\xe1\xb7\x70\x70\x9e\x41\x42\xf5\xec\xec\xbb\x83\
+\x8f\x8f\x20\x21\xbe\xb1\xe4\xd5\xac\xac\xce\xa0\xa1\xbe\xa8\xd3\
+\xb2\x6c\x72\xd7\xb0\xb0\xdd\xc2\xc8\xed\xe3\xeb\xa9\x76\x99\x8b\
+\x22\x2c\xb6\xa9\xe4\x9d\x6a\x98\x89\x13\x14\xb9\x73\x73\xb9\x76\
+\x78\xb9\x9f\xcc\x9f\x68\x90\xa3\x81\xbb\xbc\xa2\xcb\xbc\xaa\xdb\
+\x9c\x3a\x3a\xa6\x71\x94\xc1\xbb\xf3\xa6\x88\xc2\xc4\x91\x98\xc5\
+\xba\xea\xc6\xba\xe5\xc6\xc0\xf4\x95\x4a\x69\xa8\x85\xb9\x96\x30\
+\x31\xcb\xaa\xbd\xb5\x6c\x6c\xaa\x84\xb3\xcd\xa3\xaa\xb5\xa0\xd5\
+\x8b\x1a\x1b\xd0\xa2\xa2\xac\x5a\x5b\xd1\xac\xb5\xac\x5e\x62\xac\
+\x84\xad\xad\x64\x6d\x97\x56\x7d\x98\x33\x33\xb6\x99\xc4\xdf\xdb\
+\xf7\x99\x46\x59\x9a\x3d\x44\xe4\xcd\xd1\xe6\xd0\xd2\xe8\xe6\xfb\
+\xea\xd7\xd8\xaf\x60\x60\xec\xda\xdb\xb3\x92\xbb\xaf\x8a\xb5\x9b\
+\x4a\x5c\xf1\xe3\xe3\xf3\xed\xf3\xb1\x63\x63\xb1\xa3\xe2\xf7\xf0\
+\xf0\xf8\xf3\xf3\x8c\x26\x32\xb3\x89\xab\xba\xaf\xe8\x8d\x2c\x3b\
+\xb6\x84\x9a\xac\x8a\xbb\xba\xb4\xf4\x89\x1a\x22\xa1\x50\x5c\xcb\
+\xc1\xec\xd9\xb3\xb3\x85\x10\x13\x95\x43\x5c\xc1\x83\x83\xa3\x54\
+\x61\xc2\xb4\xe2\xb0\x9e\xdb\x99\x43\x52\xb1\x86\xa9\xc7\xa8\xc0\
+\xb1\x8b\xb3\xa3\x87\xc6\xb2\x9c\xd3\xa5\x4c\x4c\xa5\x68\x84\xb4\
+\x73\x7c\xb4\xa1\xdb\xb4\xae\xf3\x9a\x4c\x62\x94\x45\x62\xa6\x8e\
+\xce\xd5\xb8\xc5\xd6\xc1\xd5\xb6\x78\x83\xa6\x8f\xd1\xd8\xd3\xf5\
+\xb6\x90\xb2\x9b\x57\x78\xd9\xc6\xda\xa7\x60\x70\xa7\x90\xd1\x9b\
+\x64\x91\xdd\xcf\xe2\x8d\x30\x44\x8e\x38\x52\xe1\xc4\xc4\xb9\x8b\
+\xa3\xe4\xcb\xcb\xa9\x8b\xc3\x8b\x27\x39\xe6\xe1\xf4\x9d\x60\x85\
+\x90\x2e\x3b\xea\xe4\xf2\xbb\x9a\xbe\x90\x35\x49\x9f\x45\x4d\x96\
+\x49\x64\xa1\x44\x44\xad\x90\xc7\xa1\x4d\x56\xae\x72\x86\x92\x34\
+\x43\xa3\x6a\x8d\x91\x2c\x34\xc0\x86\x8a\x83\x0a\x0b\x9f\x52\x66\
+\xbc\x93\xac\xc4\x8b\x8b\xc3\x9c\xb0\x89\x16\x1a\xcf\xc2\xe5\xe9\
+\xd4\xd4\xb1\xa6\xe9\xb5\xab\xeb\xc9\x94\x94\xa1\x6e\x98\xae\x99\
+\xd4\x9e\x58\x73\xd5\xbc\xcc\xbf\xa1\xc3\xae\xa9\xf5\x9b\x55\x73\
+\xaf\x78\x92\xc1\xab\xd4\xc1\xb7\xec\x87\x19\x23\xb6\x9b\xcb\xa4\
+\x72\x9d\xaa\x6c\x83\xb7\x7b\x87\xaa\x72\x8d\xc4\xa9\xc9\x92\x3d\
+\x53\xaa\x98\xdc\xb1\x92\xc1\xc7\x91\x92\xa4\x7a\xab\xba\x95\xb5\
+\xe8\xda\xe3\xba\x9c\xc3\xca\xb1\xcc\xba\xab\xe2\x94\x3b\x4c\x9a\
+\x5c\x82\xae\x95\xcd\x95\x39\x46\xa2\x59\x6d\xcf\xbb\xd7\xb4\x85\
+\xa1\x9d\x63\x8c\xbc\xa5\xd1\x99\x4f\x6d\xa6\x78\xa3\x91\x24\x24\
+\x9f\x6f\xa1\x86\x14\x1a\x8e\x29\x35\x0d\x87\x2a\x70\x00\x00\x35\
+\xae\x49\x44\x41\x54\x78\x5e\x84\x5d\x53\xb7\x2c\xcd\xb2\xed\xb7\
+\x72\xb5\x17\xb6\x6d\x1b\x1f\x6d\xdb\xb6\x8d\x63\xdb\xb6\x6d\xeb\
+\xda\xb6\x6d\xfd\x8a\x9b\x19\xe8\x59\x51\x51\x3d\x4e\x76\x65\x56\
+\xed\x97\x3d\xe6\x08\x67\x44\x64\xae\x5e\x9e\x0f\x72\x8c\x2c\x4f\
+\xc3\x1a\x66\x1a\x7f\xfc\xe8\x28\x75\x2d\x69\xca\xab\x2c\x4a\x19\
+\x75\x9c\x35\x3d\x65\x12\x9e\x32\xb1\xa3\x1f\x9e\xb8\x0c\x87\xf2\
+\xc4\xa5\x1f\x7e\x3a\x56\xc6\x67\x65\x7c\xe2\x57\x5c\x57\xf2\x58\
+\x11\x66\x2f\x1f\x0c\xf2\x01\xd0\x66\x39\x43\x15\xb0\xad\x51\xd2\
+\x14\xa8\x61\xa5\x59\x16\x0a\x97\x41\xd6\x34\x02\xb2\x32\xfe\x04\
+\x70\xcd\x50\xfb\x01\x5d\x12\x27\x23\x0d\x33\xe0\xec\xf7\x81\x34\
+\x0c\x8b\x52\xb1\xf6\x22\xc8\x30\x05\x69\x46\x33\x8d\x38\xe9\xc9\
+\x2c\x45\x89\x8c\xf4\x13\x7a\x82\xa2\xb5\x3c\x34\x93\x00\x34\xac\
+\x34\x4a\x4b\xd6\x00\x92\xa0\x0a\x41\xe9\xb1\x34\x25\xa2\x3a\xac\
+\x3d\xa0\x04\x3d\x99\x98\x59\x78\xe2\xa2\x58\x2d\x60\xb0\xde\x30\
+\x9f\xa9\x19\x49\x9b\xcc\xa8\x39\xa3\x28\x91\x53\x99\x1e\x66\xe0\
+\x3b\x51\xb3\xcf\x28\x01\x95\xb8\x6f\x70\x46\xd6\xc7\x5f\x03\x69\
+\x84\x45\x88\x09\x2d\x81\xcd\x0d\x44\x85\x09\x82\x02\x28\x43\x8d\
+\x13\x1c\xa7\x85\xc9\x29\xbc\x0f\x0c\x27\xa2\x32\x5a\x82\x89\x21\
+\x10\x15\x25\x28\xda\xa5\x4d\x59\x26\x8a\x94\x1b\x42\x42\x99\xf8\
+\xc5\x98\x0b\x03\x53\xa5\x94\xe8\x19\x95\x0a\x5c\xe7\x49\x48\x03\
+\x38\x61\xbf\xd1\x25\xd6\x23\x20\x35\x14\x8d\x9c\x07\xd4\x8c\x39\
+\x4f\x22\xaa\x04\x4d\x31\x3c\x69\x0b\xa1\x6b\x0d\xc5\xa7\x51\x92\
+\x74\xd6\x80\x09\x6d\x1a\x8a\x9c\x86\xc1\x7a\xaf\xac\x5f\xa9\x6f\
+\x91\x55\xa8\x12\xc9\xa8\xa2\x04\xeb\x55\x4a\x9d\xe6\xab\x61\x4a\
+\xe5\x4d\xb3\x28\x9a\xe6\x09\x14\x55\xa4\xa5\xa5\x68\x44\x09\xf3\
+\x04\x5d\x02\x58\x50\x73\x08\xa4\xbd\x81\x72\x7e\x00\xd6\x8b\x0d\
+\x0d\xdf\x2c\x02\x96\xff\x05\x01\x55\xde\x2b\xd0\x24\x4e\x5a\x09\
+\x24\xc1\x34\x4a\xcf\x04\x15\x19\x4d\x48\x8d\xc4\x88\xb6\xb8\xcf\
+\x60\xa1\xf6\x50\x26\x36\xa5\xe0\x7c\x2a\x4f\x06\xbe\x03\x27\xa3\
+\xb4\x56\x14\x43\x84\x94\x91\xd2\x1b\x28\x85\xa2\x42\xcc\x7e\x18\
+\xc0\x6a\xa1\x0e\x41\xce\x79\xca\xd4\x74\x49\xf2\x4a\xed\x00\xdb\
+\xf9\xdb\x23\x65\xb5\x67\xe3\x54\x1b\xa2\xf6\x1b\xbc\x6f\xe0\xa4\
+\x09\x0b\x4a\x53\xe1\x82\xf5\xa4\x49\x46\x99\x94\xa8\xaa\xf5\x59\
+\x1b\x26\xa0\x1a\x82\x12\x32\x75\xa2\x35\x19\xfd\xba\x05\x53\x3c\
+\x13\x53\x94\xb0\x0e\x3d\x4d\xa1\xf3\xde\x8e\x02\x66\x26\x1e\x29\
+\x63\x55\x92\x91\x33\xd7\xc1\x76\x5e\x5a\x86\x34\x01\x41\xc5\x33\
+\xb1\x0c\x60\xb0\x79\x02\x39\x69\xf6\x0d\xd3\xe1\x42\xe9\x31\x2e\
+\x54\xb1\x66\xca\xfd\x68\x48\x19\x25\x78\xef\x6d\x13\x7f\x59\xa8\
+\x49\xc9\x5a\x6f\xe1\xc1\xdc\xb3\x0b\x25\xa0\x82\xd5\x8e\xee\x98\
+\x84\x29\xda\x22\xa9\x38\xfa\x8c\x45\x35\xf3\x40\x4b\xc3\x7a\xb8\
+\x50\x98\x7d\x55\x26\xa2\x71\x0b\xab\x78\x51\xa5\x28\x3f\x0d\xae\
+\xcb\x2b\x4c\xef\xeb\x19\x69\x98\x50\x7b\xfc\x2c\x44\x88\xa8\x13\
+\x52\xe5\xbe\xb8\x4f\x60\x74\xae\x29\xda\x7b\xa6\xe7\xff\xec\x7a\
+\x92\x11\x12\x56\x8b\x72\xd8\x2d\xa3\x83\xa6\x94\x66\x71\xcc\xf4\
+\x29\x53\x65\x2a\xc2\x13\x66\x6a\xd4\x3d\x2d\x8c\x2a\x89\x01\x85\
+\x32\x19\x17\x4a\x3f\x26\xe8\xee\x8f\xff\xda\x93\xe7\xf6\x7a\xdf\
+\xce\x2d\xf3\x05\x2a\xd8\x0f\xd6\x2b\xe3\xc1\xfb\x8c\x46\xca\x30\
+\xdb\xa3\x80\x6f\x22\xb0\x88\x47\x31\x94\xaa\x50\x7b\x8b\xb5\xbc\
+\xf8\xcf\x7a\x3a\xee\x4d\x34\xd4\x53\x8b\x84\xe8\xd9\xc6\xa3\x4c\
+\x4d\x80\xcd\x04\x6a\x9e\x6a\x00\x9d\xcd\x40\x16\xec\x95\x6c\x08\
+\x65\x21\x26\x09\xcf\x40\x49\x82\x89\xc8\x49\xd6\x61\x79\x7a\xaf\
+\x31\xce\xaa\x08\xa6\xa3\x28\x2d\x9e\xf5\xc6\xdd\xf3\x68\x00\x4c\
+\xc1\x7b\xb0\x9e\x41\x42\x99\x12\x4c\x62\x3f\x13\xb4\x76\xf4\xfc\
+\xa5\x9e\x19\xfb\x26\x00\x8a\x40\x94\x40\x3a\x17\x2a\x24\x85\x88\
+\x0a\x5d\x49\x40\xad\xbd\x2f\x14\x29\x82\x92\x96\x2e\xa9\xb0\x12\
+\xcb\x09\xa9\x25\xe9\xbb\x7a\x76\x5c\x35\x31\xa4\xd4\x37\x7d\xb6\
+\x28\xda\x26\x28\x64\x34\xe2\xcc\x32\x13\x8f\x14\xd8\x2f\x15\x85\
+\x0b\x9d\x19\xa4\x2e\x24\xa5\x71\x7d\xfd\x93\xa0\xaa\xe0\xbb\xe5\
+\xe6\x1d\xf7\x5d\xf7\x44\xf8\x58\x3f\x85\x0f\x05\x48\xeb\xee\xd5\
+\xe0\x0f\x80\x15\x5a\xaf\x76\x14\x34\x05\xeb\xc3\xa0\x57\x41\x70\
+\x0d\xd8\x5a\x41\xd2\x9b\xc3\xd2\x2b\x7b\xbd\xbf\x2e\x25\x1e\xbd\
+\x95\x60\xae\xdd\x3f\x19\xd4\xc1\xa6\x3e\xbc\xef\xac\xe5\x91\x41\
+\x09\x62\x1a\x4f\x0f\xd6\x03\x65\x84\x19\x27\xe1\x44\xdc\x5c\x28\
+\x52\x0e\xf4\x09\xab\xc0\x2c\x14\x25\xbb\x25\x25\x69\x52\x9f\x76\
+\xce\xab\xbf\xd0\x5b\x47\x0c\x1e\x0b\xf7\x77\x11\xce\x49\x4e\x66\
+\x34\xcc\x3c\x1f\x26\x80\x09\xa2\x7a\xcd\x37\x14\x65\xc6\xe7\x02\
+\x94\x21\xd2\x9a\x41\x44\x05\xa8\x62\x65\xa0\x30\x4b\x60\xfe\xad\
+\xff\xd0\xc3\xf8\x5c\xc9\x40\x6f\x27\x05\x7a\xd3\x95\x4b\x9f\xb8\
+\xfd\x8a\xf7\x6c\xde\x7e\xfb\x39\xef\x4a\xa0\x4b\x82\x71\x6e\x50\
+\x62\xed\xa8\x1a\xd2\x48\x4d\x11\xd3\xa6\x26\x15\xc2\x7a\x46\xe9\
+\xa3\x3c\x41\x5a\xef\x8e\x30\x31\x0e\x8c\x12\x1a\x6a\x9a\x30\xbe\
+\xb3\xdb\xda\x26\x15\x00\xa0\x5d\xa1\x14\xb5\x66\x54\x79\x4f\x2e\
+\x29\x07\x39\x0b\x36\xa3\x08\xf2\x18\xa7\xb5\xa1\xb2\xd4\xf5\xf5\
+\xbf\x6f\xe1\xec\x1d\x4b\x80\xdf\x73\xe3\x82\xd4\x9b\x51\x81\x68\
+\xa3\x27\x63\x47\x33\x86\x29\xac\x6f\x3a\xd0\xac\xc8\xd8\x87\x96\
+\x4d\x67\x5f\x20\x26\x49\xb0\xd4\xc9\x33\x0c\x62\xd3\x4d\x67\x1d\
+\x78\x22\x7e\x5c\xb3\x38\x64\xde\xdf\xea\x91\x5e\x57\x8b\xda\x43\
+\xe3\xbb\xf7\xf5\xb4\x17\xb1\x04\x4d\x89\xf5\x6a\xf4\xe3\x72\xfe\
+\xd2\xdd\xab\xc2\x1b\x91\xbd\x4d\x40\x14\x8a\x96\x35\xea\x14\x42\
+\xb0\x61\xc7\xf2\xa8\xaa\xd2\x57\xdc\xd3\x5b\xff\xd4\x38\x91\xb1\
+\xfb\x63\x9b\x18\xdf\xd7\xbf\xb9\x61\x03\x7d\xdc\x30\x36\xd4\xd4\
+\xe7\xe7\xed\xeb\xc3\x24\x9a\x6a\xd8\x1c\xbe\x5e\xb7\x74\x37\xdb\
+\x66\x44\x51\xd8\x91\x14\x69\x7d\xf6\xad\x17\x7e\xe4\x94\x3b\xd7\
+\xd4\x1a\x3a\x27\xf5\x77\x49\xb9\xa7\xa3\xa2\xa4\x2c\xce\xd6\xf1\
+\x28\x41\xa6\x24\xad\x3e\xf9\x95\xf1\x78\x3c\x1a\xe5\x83\x94\x90\
+\x4e\x4b\xe8\x3c\x76\x4c\x6e\x5f\xaf\x30\xa1\xf7\x6a\x47\x19\xea\
+\xd2\xf3\xca\xa3\xc7\x4d\x9a\x4c\x74\xea\xfa\x5f\x57\x16\xbe\x20\
+\x24\x0d\x14\x25\x9b\x74\x63\xf5\xd2\x69\x6f\xfd\xd6\x23\x4b\xa7\
+\x2f\x5d\x79\x1a\x12\x4e\xc3\xb4\x0e\xb2\xca\x23\xd9\x1d\x71\x9e\
+\x41\x40\x87\x76\xdf\xe4\x2c\xa9\x33\x4f\x44\x4f\x44\x4f\xf9\x87\
+\x21\x4c\x37\x0f\x40\x4e\x11\xd5\xbf\x68\x0a\xdb\x6b\x67\xfc\xff\
+\x54\x5b\x0e\x7f\x14\xa0\xf2\x78\x7d\xef\xd3\x4f\x6a\x7c\x7f\x2e\
+\xbb\xfb\x69\xdd\x54\x79\x65\x3c\x4d\xc5\x29\xac\x77\x9e\x49\x47\
+\x10\xcf\x03\x00\x72\xe6\x98\x14\xbf\x90\xa1\x30\x31\x76\xa4\xbc\
+\xaf\xeb\x52\x99\x1f\xb3\xbb\xff\xe5\xf0\x79\xf0\xc7\xbb\x93\x7a\
+\xf7\x8a\x25\x21\xc0\x9e\x45\xb7\xb1\x77\x76\x74\x5b\x60\xbd\x17\
+\x51\x1e\x9a\xcd\x23\x08\xc7\xee\x09\xcb\x1d\x13\x42\xa9\x50\xb3\
+\x17\x01\xe3\x8c\x33\xc8\xd2\xdc\xaf\x26\xff\x79\x8f\xf4\x8b\xa4\
+\xf6\x2b\x9c\xd2\xff\xa5\x72\x7e\x61\xb8\x10\x96\xe6\x86\x19\x03\
+\x5b\x11\xe5\xbb\xb8\x51\x80\xcd\x2e\xfa\xe9\x8e\x3d\x93\x31\x11\
+\xf6\xa9\x8c\x02\x13\x1d\x82\x60\xd3\x96\xfd\xcb\xe3\xfb\xbf\x1d\
+\x3f\x1f\x48\xc5\xe0\x27\x7f\x04\x24\x3f\xfc\x21\xbd\x5e\x93\x26\
+\x09\x51\xd4\x8e\xe3\xd3\x1c\x04\x5d\x58\x20\x80\x08\xf3\x9c\xd6\
+\x0f\x8c\x6f\x02\xce\x2c\x95\x38\xff\x4e\xfa\x4f\x2b\xa1\x28\xbd\
+\xca\x55\x11\xc0\x4d\x27\xa6\xf7\xe7\x45\x50\xaa\x08\x60\x4b\x55\
+\x27\xb2\xbf\x2b\xdf\x7f\xdd\x96\xe3\x3b\xee\x7b\xe8\xe4\x64\x72\
+\xff\x0b\x1c\x79\xd2\xe6\xce\xc2\x7c\xdb\x63\xcb\x85\x31\xf7\x0b\
+\x8c\xb3\x53\xeb\x01\x94\x68\x09\xa0\xc4\x7a\xc6\x99\x6e\x64\x21\
+\x0d\x08\x31\xca\xa5\xd7\x1e\xd8\xbf\x1c\xc0\xff\xfd\x23\xdf\xdb\
+\xbe\x8e\x50\x8f\x69\xb7\x9c\xd4\x75\x9c\x65\x51\x72\x94\xff\x1c\
+\x61\x9a\x92\x6f\xfa\x55\xa0\x3c\xf5\x07\x27\x17\x2b\xda\x88\xd0\
+\xf4\x32\x0a\xac\xc6\x85\x7a\x5d\xca\x1a\xa9\xf1\xcd\x64\x49\x49\
+\x87\x18\x65\x78\xd2\xbc\xaa\x8a\xf2\x11\xb2\x9a\x6c\xbb\xa7\xb4\
+\x07\x09\xcb\x69\xbb\x96\x02\x44\x42\x9c\xbc\xf3\xfb\x11\xd6\x13\
+\x93\x80\x93\x2c\xd2\xa6\x03\x07\x5e\x73\xe6\x25\x41\xa0\x46\xa9\
+\xc9\x94\x04\xf9\x5c\x30\x7b\x65\x1f\x3d\x59\x75\x02\xca\x38\x65\
+\xbc\x9d\x84\x34\x67\x7d\x8f\x93\x23\xe7\x4b\x2f\x7c\x99\xa2\x54\
+\x21\xad\xa3\xaf\xff\xdf\x5e\xef\x1d\x97\x53\x78\x7f\xed\xd7\x44\
+\xb9\xc7\xa2\xf7\x47\xf7\x4f\xa2\x65\x2b\xc8\xaa\x82\xe7\xf2\x32\
+\x32\xea\x5d\x28\xd0\x32\xeb\x81\x95\x06\x84\x14\x14\x25\x5b\x7a\
+\xa8\x87\x21\x42\x4a\x16\xea\xbf\x08\xdb\xba\xed\x9b\x9f\x7f\x95\
+\x10\xfb\xb3\xd3\x82\x92\x64\x7d\xb5\xfc\x92\xc7\x6f\xa6\xc6\x23\
+\x45\x11\x3e\x03\xaf\xa7\x28\x74\x3f\x7b\x78\xf3\xc7\x08\xa9\xb2\
+\x7e\xab\x58\x52\x72\xf1\x45\x41\xef\xf2\x39\x8d\x80\x6e\x5a\x7d\
+\xe3\x89\x97\x91\x90\xf2\x56\xd9\x19\xd2\x5f\x59\x1e\x04\x94\x0c\
+\x95\x3c\x53\xb3\xd4\x34\x33\x4f\xe1\x51\x19\x0d\xb3\x9d\xcd\x73\
+\xe5\x86\x8d\xe7\x9d\xf7\xba\x57\xc4\xb0\x26\xe0\x45\xb2\xec\xbb\
+\x6c\x49\x69\x6f\xaf\x14\x65\x10\x6b\xf7\x4c\x47\x55\x9e\xde\x4d\
+\x42\xca\x99\xfc\xb7\x5a\x98\xff\x7d\xef\x34\xd7\xb4\x23\xe3\xec\
+\x2b\x49\x59\x95\x84\xf5\x90\x51\x10\x14\xac\xb7\x35\xa6\x67\x37\
+\x63\x87\xb8\x98\x21\xf7\x94\xad\x22\x77\x9f\xb1\xf3\xe4\x5d\x1e\
+\xf9\x96\x3b\x1e\x9a\x0e\xca\x30\x2e\xfa\x1a\x51\x6e\xd5\x47\x4e\
+\x8b\x44\x6d\x4a\xee\xfa\xe3\xcb\xe3\x72\x96\x72\x8e\xf5\x05\x7a\
+\x09\xce\x26\x45\x45\x46\x5d\x8a\x0c\xac\x17\xac\xaf\xf8\x8e\x21\
+\xc4\x9e\x1c\x42\x5a\x9c\xc7\x42\xca\x51\x49\xa0\xa8\x10\xf4\x86\
+\x93\x8b\xe4\xe2\xcf\x3f\x75\xb6\x03\xfe\x50\x40\xfa\xbd\x68\x90\
+\x2e\xd8\xb4\x69\xfd\x59\x47\xf6\x4f\xab\x82\x04\x13\x65\xc6\x21\
+\x51\x94\xa0\xda\x4d\xa8\xca\xa8\x53\x7b\xeb\x42\x7f\xb3\x67\xc7\
+\x8d\xa3\x14\xe1\x5e\xc9\x91\x3a\xe1\x64\xad\x27\x4d\x5a\x3d\xa5\
+\x48\xea\x91\x1e\xc6\x89\x3c\x88\xe9\xd2\xea\x87\xa6\x55\x35\x0a\
+\x32\x51\x24\x32\xa0\x45\xfa\x21\x39\x7c\x50\x54\xed\xfd\x42\x7b\
+\x27\xba\x4d\x5c\x28\xf1\x5f\x70\x62\x3c\xb8\xd8\xc8\x3d\x64\x9b\
+\x23\x9f\xd9\xb2\x84\xa1\xaa\xb4\x61\x5c\x96\x6b\x4e\x79\xa6\x87\
+\x71\xc6\xe3\x15\x29\x54\x5a\xa0\x20\x46\x04\xc5\x40\x85\x11\x30\
+\x69\x51\x5f\xbf\xd0\x99\x71\x96\x71\x54\xd3\x41\x47\x3e\xf3\x99\
+\xeb\xde\x46\x5e\x6f\x39\xcd\x80\x94\x85\x94\x08\x4a\x23\x5d\xc3\
+\xae\x7e\x73\x70\x4a\x18\x3f\xdb\xfb\xd0\xb4\xd0\xf2\x8d\x24\xa0\
+\x0c\x46\xc9\x3b\x6a\x51\xcc\x72\xde\xc8\xa8\x37\xf8\x71\xe6\xd9\
+\x41\x8a\x30\x6e\x9e\x2e\x8e\x06\x79\xba\xf5\xdb\x91\x7e\x53\x78\
+\xa6\x22\x3b\x9b\x22\xb9\x8a\x71\x92\x8b\x8a\xd0\x31\x36\x1d\xe9\
+\xdd\x74\xc9\x03\xd3\x71\x55\xa2\x20\x46\xe4\xac\x81\x92\x9f\x28\
+\xa3\x02\x32\x7c\x01\x26\x3d\x5d\xbb\xa6\x6d\xdb\xb6\x21\x01\xf1\
+\x55\x52\xe1\xa7\xa6\x03\xb1\xf5\xc1\xef\x7d\x6e\xda\xd8\xd3\x73\
+\xc0\xb7\x3a\x5a\x52\x0d\xf5\x8c\xb9\xdf\xfb\xf4\xb8\x18\x57\x99\
+\xd6\x42\xc9\xe1\xd7\x60\x3d\x8a\x0d\xc0\x0b\x7d\xc2\xb0\xe9\x07\
+\x0c\xe4\xf0\xef\x26\x3d\x9f\xcc\x7c\xd3\xd6\x8f\x7e\x65\xc2\x45\
+\x11\x45\xfa\xcf\x51\x1a\xc6\x61\x9f\xf7\xe8\xa9\xbd\x55\x59\xdc\
+\xd4\x1d\x7a\xb9\xc2\x3c\x16\x54\xc7\x54\xee\x08\x64\x0d\xd6\x0b\
+\x56\xd5\x76\x7d\x68\xf2\x40\x1c\xca\xd3\x85\x79\x62\x99\x28\x77\
+\xb5\x3c\x68\x79\xd0\xb0\x08\x54\xe1\xf4\x6d\x9a\x52\xc8\x29\x30\
+\x39\xef\xc0\x86\x6f\xde\xf2\x8e\xe3\x8f\x2f\x0e\x0a\x94\xc1\x6b\
+\xa1\xa8\xe2\x04\x49\xd5\x81\x0a\x3a\x55\xa7\xbe\xef\x2b\xb0\x96\
+\x14\x75\xa6\x01\xa9\xfc\x2b\x27\xad\x40\x4f\x02\xfd\xad\x11\xe7\
+\xf9\xbb\x4c\x06\x76\x12\x60\xd2\x36\xbf\x1a\x55\x83\x54\x6b\xa1\
+\xa6\x66\x9f\xc8\xaf\x49\x51\x29\xd9\xa3\xca\x0c\xc6\x23\xa5\x03\
+\xb4\x7e\xbb\x4c\x40\xef\x1b\xe5\xb9\x21\x69\xf8\x2c\x22\x41\x0f\
+\xf1\x8e\x19\xe3\x86\x07\x26\x05\x67\x1f\x52\x64\x73\xa4\x76\x23\
+\x93\xb3\xa3\x80\xc9\x5e\x9e\x50\x8a\x32\xc1\x92\xa2\xd0\xe4\xd8\
+\x8e\x4c\x09\x47\xce\x6f\x22\x9d\x1e\x35\x70\xe6\xf9\x65\xdb\x57\
+\x5d\x1a\x53\x24\x87\xd8\xad\x62\xdc\x74\xe3\xf2\x24\x2f\x09\xa9\
+\x1d\x35\xff\x98\xeb\xed\xec\x38\x94\x29\x60\x66\x4b\x0a\xbd\xb7\
+\xbc\xf7\xfa\x34\xcb\xe1\xff\x02\x09\xde\x38\xe2\x53\xf9\xbc\x2c\
+\xe6\x33\x76\x86\xcf\xed\x4d\x90\xb7\x6c\x79\x68\x3a\x1e\x65\x9c\
+\x22\x61\xa4\x29\x83\x44\xfb\x03\x98\x0f\xc5\x27\x4d\x52\xd6\x53\
+\xf4\x34\xa7\x0e\xae\x30\x69\xfa\x12\xe3\x20\x82\x38\xb8\xd8\x60\
+\x3c\x1b\x9f\xa7\xf3\x22\xfb\xd1\x8c\x92\x01\xe4\x64\x94\xab\x25\
+\x2d\xc9\xe5\x5b\x7a\x32\x41\xc5\xe2\x03\x25\xa9\x11\x94\xa9\xaf\
+\xda\x9e\x98\x7a\x58\x78\x80\xd5\x87\x79\x5c\x07\x7f\x81\xd3\x83\
+\xba\x19\xf9\x5b\x46\xb7\x69\x9a\xa7\xe9\x65\x31\x16\x3a\x76\xe4\
+\x6f\x26\x8b\xa3\x9c\x73\x10\x0a\xd3\xd7\xc0\x13\xc9\x3a\x93\x75\
+\x72\xc6\x89\x78\xcf\x5c\x77\xca\x24\x30\xc5\x46\x79\x3b\xaa\xa1\
+\xe8\x46\xde\x16\xfe\xdd\xd6\x2c\xbb\xec\xab\x6f\x3f\x28\x5b\xdd\
+\x13\xd3\x28\x04\x97\x7e\xf4\xe4\x64\x1c\x41\xc6\x78\x19\x4e\x94\
+\xb8\x6f\x68\x8a\x7c\xb3\x58\x28\x57\x66\x12\x3b\xaf\x20\x55\x99\
+\x7c\x7e\xb4\xbb\x41\x2b\x8e\x55\xaa\xd0\xcd\xf8\x69\x9a\x77\x55\
+\x45\xc0\x7b\xc9\x94\xa2\xc6\x44\x5f\xa4\x48\x4a\xd1\x12\x7e\x09\
+\x7e\x34\x82\x12\x21\xb0\xb5\x50\x48\x29\x70\xc2\x33\xd1\xb3\x55\
+\xdc\x0c\xc6\xbe\xe0\x6e\x2c\x4a\x49\x8f\x96\x02\x92\x16\x85\xa9\
+\x6f\x26\x67\x84\x0c\x9c\x02\x55\xab\xcb\xfa\xb3\xd4\x04\x5c\x6b\
+\xf2\x7d\xf9\xe6\x63\x36\x15\x7c\x78\x3a\x96\xbd\xbd\x1d\xa5\x08\
+\xa9\xc1\x89\xa2\x98\x56\x97\x5b\xb5\x70\x54\x42\x15\x25\x87\x51\
+\xc6\x8c\x1a\x11\x05\x50\x57\x15\xf9\xec\x55\x8a\xf2\x8e\x9f\xec\
+\x99\x8e\x07\x06\x64\x64\x32\xd9\x77\x12\x55\x61\xbe\x11\x50\xc6\
+\x19\x16\xfd\x91\xe6\x0b\xeb\x51\x06\x67\x9a\xd2\xe2\xcd\x13\x83\
+\xec\xd4\x7a\xd3\x57\xf0\x1b\x97\x5c\x73\xcd\xde\x9f\xec\x08\xd9\
+\xa4\x4a\x7d\x7d\x06\xa4\xba\x0a\x4a\xb1\xa3\xbe\x6e\xc7\xe0\x4a\
+\x9a\x2d\xbd\x47\x13\x21\x33\xde\x34\x11\x82\xac\x1d\x76\x14\xf9\
+\x51\x0e\x9c\x06\xd5\xce\xaa\x6a\xc6\x24\x88\xa0\xd0\xeb\x48\x20\
+\x1d\x45\x59\x99\x6a\x53\x10\xb7\x6d\x1a\xca\x7a\x6f\x9e\xe0\x98\
+\x1c\xdb\x91\x1f\x35\x05\x46\x7a\x78\x47\x6f\x4a\x62\xbe\x89\x2c\
+\x4c\x6f\xee\x23\x3d\xc1\x77\x5a\x7c\xdc\xcc\x93\x17\x87\x13\x24\
+\x9d\x93\x76\x74\x39\xe7\x0c\x45\x5b\xa8\x91\xab\xd7\x03\xac\x36\
+\xe3\x99\x1f\xc0\x02\x2d\x07\x25\x02\xd2\x82\x85\x1d\x85\xf2\xaf\
+\xe0\x7a\xbd\x2b\x34\x69\x2a\x8f\xcb\x37\x60\x3c\x06\x68\x4a\xb0\
+\x0d\xf3\x99\xf7\xec\x41\xc1\x7a\xd8\x27\x8d\x9e\x34\xd4\x03\x4e\
+\xdb\xab\xd1\x59\x15\x19\x18\x9c\x0c\x35\x7c\x13\x46\xcf\xf8\x30\
+\xc1\xfb\xc6\xa8\xf5\x45\xe1\xc8\x1c\xd6\xf7\x35\x7a\x02\x40\xe3\
+\x40\x81\xd3\x67\x9c\x6d\x0d\x5c\xa1\x6a\x37\xae\xd7\x79\x74\xe5\
+\xa6\x62\x49\xd1\xec\xc6\x32\x2a\x54\x05\x41\x4b\xeb\x42\x79\x12\
+\x71\x15\x30\x94\xde\xb5\x11\x8a\x32\x71\x44\x02\xb4\xb3\xf2\xa2\
+\xd6\xec\xad\x29\xd5\x89\x56\x22\x29\xdc\x83\xaa\xc9\xcc\xd9\x83\
+\xa8\x44\xc5\x30\x89\xfd\x8a\x14\x86\xc9\x08\xa9\x4e\x57\x5d\x36\
+\x20\x69\x65\xd6\x13\x50\xb5\xa4\xa0\x66\x9c\x8e\xf5\xd0\xfa\xe8\
+\xf0\xd1\x44\xe8\x34\x09\xec\xc7\x9e\x29\x31\x30\x31\x7d\x02\xc2\
+\xb2\x5f\x0b\x62\xda\xe7\xec\x6d\x13\xd4\xdf\x1b\xa8\x08\x13\x7d\
+\x4f\x3c\x1d\xd4\xe1\xec\x65\x38\x6f\x18\xef\xf2\xa3\xcc\x78\xf8\
+\xa6\x94\x58\xaf\xed\x59\xb0\x50\xa8\x85\x81\xa2\xbc\x00\x28\xfc\
+\x7c\x6d\x8c\x93\xb3\xf8\x0a\x31\xf1\x3a\xef\xeb\xf5\x68\x79\x33\
+\xea\xc4\x2f\x6d\xcc\x14\x94\x76\x28\x5c\x87\xb5\xe6\x45\x03\x13\
+\x4f\xcd\x3e\xda\x1d\x81\xd2\x6f\x44\xf4\xab\xb3\xd8\xe0\x1b\xde\
+\xe2\xc8\x2d\x4e\x70\x5d\x80\x5a\x9c\xe8\x29\x89\x8f\xa5\xe7\xb0\
+\x0f\xd6\x4b\x82\x84\x16\x97\x86\x50\x80\x06\x2b\x32\xce\x68\x22\
+\x94\x27\x95\xaa\xad\x89\x4a\x4a\x7e\x19\xd6\x17\x66\xbb\x2c\xbd\
+\x4f\x08\x49\xbc\x17\xa5\x1f\x7d\x1a\xeb\x84\xbe\x17\xb7\xaf\x67\
+\xcf\xe4\xdb\xdb\x09\x67\x06\x19\x05\x2d\xad\xa4\x3a\xbe\x87\x07\
+\xca\x94\x04\xe4\x5d\xee\x93\x1f\x24\xc5\x13\x63\xee\x8d\x15\xb5\
+\xad\x1a\xae\xdb\x91\xbb\xc5\x33\x18\x7c\xab\xf7\x82\x4f\xdf\xfc\
+\x82\xd6\xab\x79\xf2\x32\x0a\xb4\xba\x57\xa6\x6f\x2f\xa8\x70\xf9\
+\x36\x1e\xb5\x03\xfd\xcd\x99\x97\x51\x90\x35\x55\x74\xa9\xd1\xa3\
+\x1a\xa6\x49\x56\x6b\x99\xb0\x9f\x77\x18\xfd\xbe\xde\xfb\xfa\x2e\
+\xb4\x71\x69\xf9\x50\xeb\xe8\x49\x54\x5d\x96\xc4\x91\xd4\xb5\x0e\
+\xc3\x86\xd2\x62\x15\xc9\x1f\x6c\x98\xaf\x4c\xaa\xf8\xa0\xa8\x0b\
+\x4a\x8a\xb8\xfa\x6e\x4c\x75\xa1\x82\x12\x40\xed\x90\xe8\x09\x35\
+\x26\x40\xed\x6e\x78\x5b\xd1\xdd\x3f\x4a\x20\x55\xf3\xa1\xf5\x08\
+\x4c\x0a\xae\xde\xd0\xce\xd9\x84\xf8\x89\xb2\x1e\xb3\x9d\x77\x62\
+\x96\x73\x61\x84\xd4\x3e\x71\xbe\xc9\x24\x9b\x87\x36\x35\xee\xb8\
+\xce\xab\xb7\xf6\x08\x99\x71\x5a\x20\xc5\xae\x5e\x95\x49\xe3\x51\
+\xc8\xa9\xed\xc3\xc7\x61\x26\x43\x4d\x79\xe4\xe5\x73\x4f\xf2\x44\
+\x68\x99\x60\xcd\x54\xa7\x28\x84\x76\x68\x5b\x6d\xce\x18\x6a\x43\
+\x6b\x5a\x15\x6c\x9c\x84\x11\x38\x01\xd6\x0c\xa3\x46\x78\x7b\x8a\
+\xa6\xba\x46\xe9\x54\x19\x05\x54\xf6\x45\xea\x3b\xfd\x56\x84\x57\
+\x06\x5b\xf3\x0b\xc3\x22\xf5\x81\x33\x76\xa1\xde\xdb\xfb\xde\x3c\
+\x36\x4c\xcd\x63\x6c\x99\xe1\x3a\x3e\xbd\xa7\x07\x4a\xa4\x49\x8c\
+\x98\x82\x9a\x32\x05\x2d\x6c\x3e\x0c\x3e\x2d\x7e\x5f\xef\x3c\x13\
+\xc3\xf5\x5b\x50\x21\xa8\x85\xe9\x73\x3a\x25\xa4\xd3\xf8\x7b\x17\
+\xe5\x81\xb0\x4e\xef\xbd\x79\x32\x7d\x4f\x30\xa2\x19\x93\x15\xbc\
+\x77\xa7\x9a\x64\x5a\xf9\x04\xf3\x91\xd7\x61\x90\x16\x2e\x60\x26\
+\xde\x27\xe9\xea\xca\x37\xc6\x8e\x52\xef\xa0\xc0\xc5\xe0\x04\x59\
+\x31\xe3\xba\x4c\x4b\x57\x44\xf7\x6e\x6f\x87\xed\x08\x40\x5a\xdb\
+\x04\xc5\x9f\xd7\x01\xe1\x07\xe1\xe4\x98\xc4\xb0\xbf\x40\xa0\xd7\
+\x86\x09\xe1\xa4\xc5\x9f\x6d\xe8\xc3\xd3\xeb\x6a\xa0\x76\x07\x25\
+\xa0\x68\x65\xa5\x54\x39\x8f\xc0\x99\x61\x02\x69\x89\xc0\xd9\x31\
+\x5e\xd9\x5e\x93\x7d\x42\x58\x0a\xa2\xca\xe2\x72\x25\x40\xab\x7c\
+\x6f\x6b\x7d\x6b\x08\x4a\x9c\xc0\x70\x91\x93\x22\x2d\x60\x9c\x7c\
+\xea\xb1\x4c\x40\x52\x83\x12\x91\x13\x62\xd1\x44\x20\xfa\x5a\x18\
+\xa0\xba\xb6\x4c\x06\xca\x10\xad\x6f\x2a\x79\x16\x66\x17\x2a\xae\
+\x09\x3e\x54\xa5\x14\xd9\x92\x76\x80\x07\x39\xb5\x81\xb3\x8f\x97\
+\x3b\x3d\x13\xcc\x3d\xbf\x52\xdd\x88\xba\x5c\x49\x81\x93\x0d\xc6\
+\xd5\x1b\x51\x85\x57\x72\x4a\x4f\xe0\xd0\xa7\xd1\xd2\xa6\xb9\x40\
+\x2b\xbb\x5b\x96\xed\x27\x0c\x7e\x6e\xad\x28\x07\x25\x90\x53\xd4\
+\x99\x12\x5e\x98\xe3\x3c\xbb\xe3\xe6\x59\xc1\xa1\xa5\xf8\x5e\x34\
+\x7d\x7e\x94\x16\x2f\xa7\x80\x69\xad\xe8\xbc\x13\x2d\x00\x8b\x30\
+\xaf\x34\xd1\x93\x2a\x13\x60\x7a\x5d\x72\xe2\x49\xb3\x57\x0d\x2c\
+\xcc\x54\x81\x32\x3d\x69\x31\x32\x8a\x04\xa9\x1b\x7c\x88\x8d\xb0\
+\x39\x9c\xf0\xf3\xb6\x58\xef\x8f\xaf\xce\x73\xa1\x79\x05\x21\x85\
+\xb7\x87\xbd\xf7\x81\x33\xa6\x09\x9f\x6a\x9a\x20\xab\x97\x53\x8d\
+\xef\xb1\x5b\x02\x5d\x11\xe1\xe1\xa0\xb5\x09\x9c\x09\xa7\x0f\x47\
+\x89\x90\x58\xad\x29\xb5\xb9\xd1\xd4\xee\x43\x15\x62\x39\x67\x63\
+\x87\xd0\x49\x00\xfb\x5a\x83\x37\x53\x28\xda\x02\xa7\xe1\x7f\x66\
+\x37\xa2\x88\x43\xc3\x37\x12\x79\xc0\x89\x5d\xa8\xb8\x7a\x53\x6c\
+\xe8\x13\xf3\x01\x18\x3a\x6f\x63\x92\xee\x3e\xfc\xca\xf0\x3d\x15\
+\x8c\x10\x53\x9f\x23\x73\x1b\x7b\x79\xd5\xb0\xf8\x9a\xd2\x49\xb0\
+\xf6\x85\xf9\xb6\x5e\x6f\x30\x9a\xca\x9d\xa7\xa8\x69\x76\x84\x2a\
+\xe9\x23\x0b\x52\xb9\xcd\x9f\x19\x30\xa0\x51\xa9\xcc\xe6\x1e\x15\
+\x31\x5f\xaf\x4f\x3a\x14\xaa\x33\xf7\x34\xb0\x28\xf1\x9b\x01\x06\
+\x54\xd5\xfc\x19\x4a\x9f\x7e\x12\x5f\xef\x6c\xa8\x60\xb5\xf5\x7a\
+\x07\x53\xa0\x82\x9c\xd0\x7a\x2b\xa2\x78\x29\x35\x37\x86\xfa\xf8\
+\xaa\x5c\x83\x7b\x73\x30\xd4\x2a\xbd\xf8\x78\xe3\x9c\x4a\x13\x3b\
+\x71\xab\x86\xad\xd7\xeb\xb2\xd2\xe2\x0c\x6f\x77\xd2\x16\xa3\x83\
+\xf7\xe9\xc6\x2f\xd3\xc1\x13\xb0\x9f\x51\xf2\x2c\xe0\x99\x8c\x88\
+\xaa\x69\xd2\xa9\x58\x35\xed\x88\x82\x18\xc2\x67\xa8\x92\x77\xf9\
+\x62\x9e\x2a\x30\x1f\x8c\x17\xb4\x5b\x37\x73\x39\x7c\xdc\x14\x52\
+\x41\x29\xd3\x46\xa4\xc6\x3d\x41\xe5\xe7\xd5\xeb\xbd\xd6\xbb\x1a\
+\x23\x7c\x3d\xf4\x09\x04\x55\xaa\x1e\xe5\x12\xee\x63\xa3\x66\x36\
+\x0f\xfe\x93\x26\x06\xec\xa8\x2c\xf4\xc0\xd8\xbb\x7a\xbd\x7e\x43\
+\x8f\x90\x18\xf7\xad\xc3\xde\x85\xc2\xd1\xaf\xa2\x8e\xe1\xe5\x09\
+\xf6\xa2\x4e\x4a\x4d\x1c\x0a\x3b\x2a\x4f\x93\xf5\x7d\x5f\xaf\xc7\
+\x00\x54\xb0\xde\x36\x68\xf9\x34\x09\x9c\x68\x1a\x3b\x4b\xae\x5a\
+\x1e\x29\x4c\x94\xeb\x95\xb0\x96\x9a\xb0\xa3\x8a\xd6\x0c\x5f\xaf\
+\x87\x4a\x81\xef\xfa\xb6\x5a\x2f\x45\x11\xbb\x15\x81\xce\xc7\x5e\
+\x83\x83\x13\x77\x63\x41\x51\xc0\xe2\x5b\xb4\x33\x3b\xaa\x7a\x54\
+\xfa\xf3\xf5\x88\x9f\x00\xd2\x15\x1a\x7c\xd1\xd6\x88\xa7\x2e\x02\
+\x75\x2b\xf5\xee\x3c\x96\x2b\x44\x28\x94\x4d\x8f\x5a\x01\x80\x6c\
+\xaa\x36\x01\x6b\xbb\x5e\xef\x93\x8e\x0c\xd5\xda\x52\x5f\x15\x01\
+\xeb\x19\xe9\xef\x92\x71\xaa\x2c\xeb\x51\x5f\x2e\x9c\x8c\xf2\x5b\
+\x9f\xba\xfb\x7c\x3d\xcc\x93\x13\x52\xa0\xf5\x9e\xc9\xe0\x6c\x7b\
+\x7a\x3a\x3d\x31\x46\xf3\x8b\xb4\x8e\x42\x46\x7d\xcc\xac\x3f\x7d\
+\xe9\x30\x81\xb3\xa2\xf5\x5e\x49\x81\x9a\xcc\x38\xf6\x4c\x6d\xa4\
+\x02\x35\x7f\x77\x6c\xa3\x9f\x36\x1b\x75\x78\xf8\x44\x1e\x10\x9b\
+\x94\x8e\x2b\x36\xb5\xc2\xe6\xc4\xd9\xd0\xee\x4e\x32\x5b\xb2\x85\
+\x69\xd2\x68\xf4\x14\x11\x52\x82\x08\x9c\x85\xfa\x28\x0b\x18\xa7\
+\xab\xe3\x8b\xbf\x91\x26\xd1\x0f\xd4\xeb\x15\xa7\x05\xeb\xec\xa8\
+\xdf\x33\xf9\xf8\xf9\x28\x9f\xf3\x4b\xcd\x29\x56\xdf\x9e\x93\xb2\
+\xb3\x47\x4b\x11\x74\xde\xd7\x43\x50\xaf\x57\xbd\x07\xeb\xe7\x1f\
+\xb7\xf4\xca\x84\x6b\x3f\xf2\xad\x69\x46\x5d\xad\xe3\x8c\x71\x42\
+\x4c\x39\x90\x2a\x3a\x7a\x9e\x12\x6c\x46\x6b\x7f\xf3\x0b\xaa\xe0\
+\x1a\x45\x81\x98\x4d\x29\xed\xcc\x38\x2b\xf3\x53\x03\x97\x99\x9f\
+\xfd\x5f\x6c\xb6\x9f\x10\xc2\xd4\xb0\x5e\xea\xf5\x5e\x52\xa5\xa3\
+\x40\x45\xc0\x2a\xfe\x90\xa6\xb6\x64\x3a\xd6\x03\x9f\x0f\x4a\x8c\
+\xb1\x87\x19\x15\xda\xd2\xc9\x8b\x07\xa7\x50\xa5\xd4\x68\xbd\xf3\
+\xf5\x4c\x4a\x7e\x9b\xce\x76\xc8\x69\xbf\xa1\xee\x5c\x1d\x01\x4a\
+\xb4\x3c\x7a\x3b\xea\x92\xe3\x30\xa3\xf9\xe5\x7c\x26\xf2\xf0\x22\
+\x36\x76\x50\xa6\x00\x95\x24\xc0\xb4\x91\x41\x04\x5c\x46\x47\xcd\
+\x28\x32\xb9\x3e\x6a\x06\xeb\x8d\x07\xa5\xed\x32\x50\xfa\xfb\x89\
+\x8e\xca\x59\x0c\x75\xf6\x50\x78\x28\x7b\x6a\x23\x67\x95\x50\x18\
+\x51\xb7\xb7\x77\xbe\xde\x27\x72\x7d\xff\x68\xd5\xd0\xfa\xd4\x15\
+\x1c\xbe\xaa\x3d\xe2\x83\x34\x85\xc6\x23\x5f\x42\x20\x4d\xe0\x0c\
+\x88\xde\xdd\x0f\x55\x93\x6c\xae\x84\x96\x95\x4e\x4c\xb1\x20\x1e\
+\xad\x2c\xeb\x61\x47\x53\x39\xcf\xff\xaa\x09\xb4\xbe\x48\x29\x7a\
+\x72\x22\x0a\xad\x47\xd5\x0e\x2e\x14\x04\x35\xe6\xb3\xef\xe2\x7b\
+\x20\xf5\xc5\x06\xe7\x42\x53\x28\xd3\x2f\xdc\xbc\x97\x0e\x32\x0d\
+\x44\xeb\xc9\x34\xa5\x85\xb4\x91\x5a\xde\x9b\xbd\x28\x40\x22\x24\
+\x21\xa4\x90\x50\xef\xeb\x51\x17\x69\x83\x85\x8c\x0e\x5c\x86\x8c\
+\x66\x96\x6d\x14\x77\xcf\x8c\xe7\x08\xaf\x19\xe5\xa5\xa6\xb1\x00\
+\xed\x83\xbc\xd2\x34\x46\x94\xe5\x13\xf5\x7a\x97\x26\x01\x46\x13\
+\x38\x07\xde\xd3\xec\xa8\x2e\x0b\xde\x37\x50\x53\x36\xeb\x92\x20\
+\x55\x8d\xc2\x40\xec\x6c\xfc\xbc\xa3\x28\x2a\x4c\x88\xa0\xbd\x42\
+\x79\xc5\xef\x59\x80\x88\x98\x91\xc7\xcb\xfe\x84\x8f\xb5\x89\xd6\
+\x4b\x69\x59\xf5\x08\x68\x6b\xa3\x51\xdd\xf7\x3d\x59\x5f\x6a\x82\
+\x7b\x73\x08\x83\x5e\x6e\x73\xd7\x41\x53\x64\xf3\x32\x71\xf7\x47\
+\xaa\x54\x98\xcf\xda\xd4\x11\xdc\xd7\xa8\x81\x32\x4c\x9f\xcb\xe3\
+\x60\xc4\x86\x79\xbe\x6c\xdb\x7d\x65\xa2\x2b\x88\x65\xd4\xa7\xa1\
+\x89\xfc\x0c\x31\x29\xc1\x94\x5a\x53\xe7\x26\x34\x61\x8a\x92\xeb\
+\x94\xc9\x87\x06\x90\x17\x23\xa0\x8a\x54\x13\x26\x18\xf3\x4f\x8b\
+\xf4\xda\x7d\x64\xa9\x1c\x0a\xd6\xd6\xac\x38\x1f\x8d\x31\x29\x1b\
+\x28\x34\xe7\xf1\xbb\xb0\x4a\xaf\x31\x09\xa7\x74\xf4\xe4\x8d\xbd\
+\x4c\x09\x38\x09\xa9\x93\x4e\xab\x4f\xbe\xba\xec\xbb\x4a\x22\x55\
+\x09\xea\x29\x10\x52\x51\x77\x5a\x0d\x45\x7d\x17\x21\x2f\x35\x3d\
+\x2e\xca\xc7\xdd\x9e\x3f\x37\x1e\x85\x1d\x95\x27\x45\x2d\x14\x11\
+\x3e\x01\x25\x21\x5d\xff\xa6\x43\x24\x9e\xa6\x74\x8b\x74\x6e\x22\
+\x13\x45\x31\xbf\xc1\x23\x6c\x66\x25\xc6\x03\xa1\x8b\x47\x3d\x45\
+\xad\x12\xc1\x96\x32\x52\x3d\x4d\xf9\x21\xa9\xdc\x35\xda\x88\x5c\
+\xed\xce\x10\x14\x22\x6a\xb7\x4c\x48\x96\x00\x28\xaf\x2e\x1e\x45\
+\x83\x56\x77\x87\x0e\x4f\x69\x7e\x79\xa3\x00\xbd\x6d\x14\x94\xc9\
+\xd2\xb3\x9c\x53\xb0\xef\xa2\x28\x94\xca\x44\x24\xa6\x82\x03\x7c\
+\x00\x69\x1b\xb4\xa0\xf6\x30\xf6\xaa\x51\x7a\xb0\x72\xf5\x04\xc5\
+\x30\x6f\x9e\x92\x04\x38\xf9\xa3\x2d\xa1\x0c\x0a\xde\xc9\x27\xf0\
+\x5d\x3c\x3a\xaf\x5e\xcf\x4c\xf7\x1d\x10\xff\x16\xcf\x3c\xec\xdb\
+\x33\x2e\xb4\xd8\x10\xde\x04\xd5\x53\x15\x22\x0a\x9d\xf7\xea\xa4\
+\x67\xeb\xbd\x71\xf2\xf1\x28\x6e\xd0\xf2\xd9\xbc\xf8\x12\xdd\x17\
+\xb0\xff\x7a\xe2\xbe\xc9\x38\x2b\x1a\x09\x7c\xa3\x4c\x2d\x5d\x42\
+\xfc\xe4\xa2\x7c\x98\xa7\x2e\xcd\xf7\xf1\x28\x28\xda\x1d\x39\xbb\
+\xb6\x27\x71\xf5\xf3\x65\x14\x05\x46\x5d\x69\x76\x75\x11\xce\x2d\
+\x88\xcd\x8f\x47\x73\x9b\x24\x4b\x79\xb5\x5a\x8f\x41\x04\x85\x81\
+\xf2\xaa\x64\x3c\x3d\x6f\xef\xc0\xfd\x21\xd2\x63\x50\x7b\x9f\x27\
+\xf1\xe4\x5c\x21\x11\xbe\xdf\xd0\xe3\x2e\x1d\x53\x06\x67\x8a\xa2\
+\x5e\xef\x7b\x89\xd0\x55\x22\x37\x0e\x03\x25\x16\x93\xc9\xe3\xcf\
+\x9f\x1f\x8f\x56\xad\xb3\x22\xec\xde\x19\xaf\xf8\xfa\xcc\x92\x14\
+\x62\x5a\xd2\x3f\xac\xaf\xa7\xc9\x42\x0a\x82\xf2\x00\xcb\x91\x23\
+\xa3\xb0\xcf\x5f\xf7\xe4\xc2\x51\xc9\x94\x54\xd6\x3c\x19\xbe\x9b\
+\x7e\x5c\x8a\xf2\x05\xa9\xab\x82\xab\x07\xc5\xa1\x16\x1c\x08\xae\
+\x51\xaf\xf7\xbe\xde\xb0\x7f\x7e\x3c\xea\x7b\x4a\xe0\xef\x6d\x0b\
+\x21\x6a\xf5\xb6\x5e\x6f\xbb\x20\xa0\x4e\xa5\x3f\x66\xad\x12\x0a\
+\xe6\xfb\x02\x23\xae\x4b\xf5\x09\x08\xb7\xfd\x24\xe9\x0c\xd3\x75\
+\xe2\xf3\x52\xb8\xbe\x3c\xc8\xa7\x46\x4f\xa2\xf5\xf3\xce\xd7\x1b\
+\x5f\xef\xfb\xf0\x01\xd2\x1a\x7c\x0c\xa8\xbc\x70\xbf\x68\x5f\x97\
+\x09\x19\xa5\xd5\x94\xc1\x21\x9d\xb8\xdf\xd1\x07\x4e\xfa\x78\xee\
+\x83\xf7\x18\xae\xc7\x19\x03\x38\xa1\xf5\x2c\x9f\xa6\x5e\x5f\xf2\
+\xe2\x8f\x36\x98\x0c\xa9\x73\xf5\x4a\xd5\x46\x82\x5c\x41\x02\x63\
+\x2b\x93\xcb\x05\xb1\xbc\x4d\x50\x6c\xee\xe4\x4a\x9d\x22\x33\xf7\
+\x7a\x02\x61\xd1\x2a\xd7\x1b\x6f\xef\x60\x12\xb3\x91\x23\x0d\x08\
+\x69\xb1\x66\xc9\xd7\x99\x7c\x75\x19\x9a\xc4\x0b\x43\xe4\x29\x8f\
+\xb2\x5e\x2a\x77\xae\x57\xc3\xd5\xeb\x25\xd2\xc3\xd0\x3e\x6c\x36\
+\x4e\xf1\xed\x38\xff\xc1\xd3\xaf\xb0\x06\x0a\xf5\x7a\x0c\x25\x24\
+\x7d\xc4\x2f\x08\x29\x8b\xa8\xd6\x99\x8c\xd6\xab\x12\xb9\x7a\x7d\
+\xc0\x6d\xf8\x8e\x32\xb8\x37\x50\x42\xce\x4f\xd3\x65\x27\x65\xd7\
+\x35\xf3\xe1\xb1\x15\xb1\x2c\x6b\xb5\x12\x21\x8d\xab\x75\x26\x5f\
+\x0f\xa3\xc5\xd5\xeb\xad\x74\x9a\xd4\x38\x28\xab\xb4\xa4\x37\x5d\
+\xb7\xf8\x83\xdc\xd0\xd4\xd6\xeb\x81\x15\xdd\x59\x7a\x9c\xa9\xc8\
+\x54\xe9\x71\x62\xc4\xf6\x95\xf0\x9d\x54\x73\xeb\xf5\xc0\x8b\xd4\
+\xb8\xc2\xb4\x29\xb2\x2b\x22\xd0\x6f\xde\xa5\xfa\xb4\xc2\x9b\x27\
+\x98\x52\x65\x3d\x88\x9a\x05\x94\x71\xe2\x46\xf4\xce\xb6\xcc\xba\
+\x95\x22\x87\x84\x22\x26\x51\x8a\x12\x68\x6f\xf0\xf9\x3a\xbd\x0b\
+\xc6\x1d\xbe\xde\x3a\x26\x46\x8a\x03\x8c\xe4\xef\x35\x35\xae\x51\
+\xb3\xf6\xe1\x03\x66\x82\xb7\xf8\xfb\xda\x79\x26\x01\xaa\x77\xcc\
+\xf3\xe3\x62\xbd\x15\xbd\x63\xc7\xf7\x8f\xef\x72\x7d\x4f\x83\xf9\
+\xfd\x8e\xb8\x7e\x14\xca\xc4\x24\x45\x1f\xbe\xad\x82\xf2\xca\xb9\
+\x71\xa7\xef\xa8\x86\x09\xd2\x8b\x77\x7d\xbe\x79\x2d\xba\xd6\xc1\
+\x93\x2a\xed\xab\x31\x85\xd6\x0f\x9a\xea\x94\x32\x31\xf5\x95\xb5\
+\xc2\xe6\xd4\xee\x42\x11\x94\x80\x9a\x6a\x4b\x6b\xb9\xac\x02\x37\
+\x95\x08\xb3\x59\x3e\x77\x07\x90\xf1\x62\xc5\x63\xa3\xbe\x6f\xc3\
+\x1f\x76\x27\x20\xaa\xbc\xeb\x70\x83\xdc\x9a\x07\x92\x82\xa2\x08\
+\x9e\x3b\x2b\x22\x04\x51\x6f\xd6\xf0\x09\x88\x7e\x5c\xae\xdd\xac\
+\xa7\xce\xc7\x96\xf1\xba\x0d\xb9\xf8\xf6\xe7\xaf\x48\x6c\x4f\x89\
+\x17\xd0\x94\x4f\x04\xd3\x84\x3a\xb1\x8c\x0a\xc0\x02\x6a\xef\xa0\
+\xea\x20\x88\xae\xbf\x9d\xd8\xdf\xb8\x3c\x6f\xbf\x9e\x1a\x00\x21\
+\x2f\x3e\x87\x2f\xb8\x1b\x1b\x17\x8a\x2c\x2e\x86\x22\x05\x48\x90\
+\x54\x6e\x56\x80\xde\xe3\xa0\x90\x9e\x69\x00\xd2\x12\xc4\x44\x16\
+\x3f\x08\xe5\xab\x01\xf4\x78\xde\xb7\x61\xf3\x3f\xf6\x74\x3c\x96\
+\xb4\x33\x25\x95\xcb\x37\x66\x34\x5a\x91\x73\x01\x8a\x3a\x98\x6a\
+\xec\x81\x12\xc2\x59\x8b\x95\x47\x7f\xc1\xc5\x04\xe4\x9e\x1e\x09\
+\xa9\xb9\x76\x78\xe5\xb9\x20\xf6\x75\xb9\xeb\x1a\x77\x22\xca\x12\
+\x8a\xab\xb1\x0b\x5a\x94\xa2\xa6\x0f\xdf\x79\x7b\x60\x25\x6d\x52\
+\xa8\xa0\x68\x18\xd7\x7e\xe0\xc0\x8e\xa7\x27\x94\xca\x5e\x34\xac\
+\x5f\xb9\x04\xa0\x0f\x8e\xda\x14\x35\x26\x1f\xe7\x99\xb0\x1b\xa1\
+\xa0\xb4\x68\xe6\xc6\xad\x80\xa6\xba\xa9\xaf\xe5\xd6\x61\x04\xce\
+\xfe\xa2\x92\x3e\x3d\xf1\x26\xc2\x2f\xd1\xed\x86\x14\x97\x20\x70\
+\x5e\x17\xad\xfd\xea\x0b\x28\xd3\x89\xeb\x47\xdd\xbe\x1e\x09\x1d\
+\xc6\xcc\x8c\x27\xa7\x94\x15\x85\x6d\x1b\x86\x73\xc2\x10\xb8\x12\
+\x94\xbc\xf8\x22\x45\x7a\x48\x8e\x0a\x4e\x89\xee\xde\x4b\x42\x9a\
+\x5a\x9d\xff\xad\xb3\xef\x7d\x7c\xb1\xba\x90\x85\x74\x61\x06\x15\
+\xcd\x2f\x66\xe0\xcc\x65\x26\x38\xc5\x7f\x4a\x49\xa4\x2c\x70\xaa\
+\x0d\x5c\x97\x6c\x33\x53\xf4\x9d\xab\x82\x9d\xfc\xfe\xd8\x18\xfd\
+\xbe\x50\x54\x0d\x3e\xdd\xbc\x35\x6a\x02\xd5\xe7\xe3\x54\x7d\x4f\
+\xe7\xc9\xa8\xed\x7e\xd0\x02\x8e\x70\x3e\x43\xdc\x2c\xb5\x26\x37\
+\x12\x5e\x03\xce\xeb\xf5\x02\x60\x44\xf9\x52\x65\x8a\x00\x13\xf1\
+\xa0\xeb\x70\xd1\x3c\x33\x1e\xc9\x51\x08\xa9\x95\x51\x8b\x35\x55\
+\x17\x0a\x19\x15\xa5\xb7\x94\x94\xd4\x38\x30\xd6\xba\x0d\x79\x54\
+\x80\xbe\x2f\x67\x98\x8a\x93\x40\x92\x52\x45\xdf\xf9\xef\x6a\x49\
+\xa1\xf9\xfc\x5b\x58\x78\x4f\x00\xfa\xcc\xd4\x50\xd4\x85\xf8\x80\
+\x2b\xa9\xf1\x82\x63\x67\x68\x3f\xf6\xf5\xce\xda\xcb\x66\xf9\x1b\
+\x02\x74\xf5\x68\x16\x94\xf4\x31\xd5\xdb\x7f\x1c\x42\x6a\xfb\x9b\
+\x17\x16\x4e\x87\x25\xc5\x76\x79\x00\x90\xe8\x28\x41\x12\x42\x29\
+\x4a\x53\x8c\x13\x81\xe5\x37\x46\x8d\x2a\xe3\x4b\x5f\x96\xeb\x63\
+\x26\x33\x65\x7a\x89\xb0\x69\x88\x47\xbc\x37\x42\xaa\x50\x99\xa2\
+\x1f\x84\x90\xce\xef\x29\x81\x94\x42\xeb\xd5\x90\xc6\x51\x32\xe0\
+\x8e\xa3\x6c\x38\x24\xb2\xa6\x1a\x7f\x80\xac\x4f\x14\xd2\x7f\xfa\
+\xc6\x33\x3f\x0b\xdf\x6f\x58\xda\xdd\xd7\xab\x20\x58\x9b\x3e\x45\
+\xb7\x1b\x5a\x65\x62\x8a\x92\x90\x3e\x31\x32\x5b\x91\xaa\x6a\xb3\
+\xdd\x1c\x6a\xa1\xa7\x60\x88\x92\x79\x40\x25\xd4\xed\x96\x25\x1e\
+\x89\x9f\x74\x7d\xf2\x8e\x2c\xf9\xab\xc6\x85\x8a\xbf\xa3\xd1\x28\
+\x9f\x0c\xfc\x12\x0b\xa9\x6f\xd6\x58\x58\xf9\x69\xb6\xa4\x6f\xf9\
+\x44\x88\x5f\x36\x0f\x29\x70\xf6\xaa\x84\xba\xc8\xcc\x3e\x21\x3d\
+\x6a\x4e\x89\xb5\x46\xd3\xd5\x27\x7d\xaa\xf4\xef\xb4\xf7\x15\x1e\
+\x13\xef\xc4\x3d\xd9\x6c\x49\x33\x90\x13\x8d\xae\x24\xa4\x5f\x57\
+\x51\xaf\x11\xe1\x9b\xae\x71\x34\x37\x67\x7a\xc5\xbc\xf0\x9e\x21\
+\x16\x90\x4d\xc0\xd5\xea\x72\xad\x5e\x34\x32\xf6\x82\x63\x3d\x3b\
+\x5e\x5e\x0a\x49\xfb\x43\x15\xd2\x9d\x4d\xe9\x8c\x6c\x0f\x60\xdf\
+\x12\x76\x4e\x18\xd7\x8c\x7b\xa8\x82\x3b\x6b\x2f\x66\x94\x70\x66\
+\xda\xa3\xa3\x77\xe9\xe8\xde\xbe\x9d\xd2\x61\xaf\xc4\x40\x77\x01\
+\xde\x86\xb5\x5b\x0e\xdf\x76\x06\x7d\x1e\x29\x84\xf5\x11\xf0\xa7\
+\xc8\x92\xc2\xd9\xd3\xa5\xae\x1f\xfc\x52\xeb\xb2\xf2\x53\xf7\x8c\
+\x18\xa8\xab\x34\xb5\x94\x09\x96\x09\x59\x3c\x6c\xf2\x8c\xbd\xaf\
+\xd3\xf2\xca\x55\xbb\x98\xa4\x9f\x57\x98\xab\x1f\x5b\xae\xb2\x32\
+\xe1\xab\xaf\x36\x8d\x59\xfb\x89\xaa\x46\x48\xf9\x3a\xdf\x3f\xff\
+\x82\x45\x79\xd5\x35\x57\x4f\x46\xc3\xee\x7a\x3d\xc3\x74\xa9\xf1\
+\xc2\x16\x43\x8d\xd6\x27\xfc\xf9\x4e\xbe\x75\x7e\x42\x57\xd1\xad\
+\x11\x9c\x47\xa6\x03\xb1\xa4\xef\xa6\xfb\x0e\x23\x49\xc5\x94\xbe\
+\x28\x96\x14\xe5\x9b\x68\xea\x01\x72\xef\xcd\xfb\x17\x2b\x57\xaf\
+\x77\xd6\xd4\x50\x94\x7d\xbd\x3f\x2d\x80\x91\x28\xb2\xde\xe7\x52\
+\x0a\x48\x99\x83\x67\x4e\x73\xf6\xf3\x72\x01\xfe\xbe\x51\x40\x28\
+\x82\xba\x40\x0a\xb6\x33\xec\xf3\x6e\xff\xc6\xe6\x73\x57\x46\x8a\
+\x5e\x31\x03\x79\x78\xff\x64\x67\x3a\xa4\x5b\x3d\xb5\x5e\x3f\x98\
+\xd3\x98\xe9\x8b\x0d\xa0\x66\x13\xf0\x9a\x47\x9e\x8b\xaf\xa5\xc6\
+\x5f\xbd\x08\x40\x45\x48\xf7\xdc\x8f\xb0\xe4\x3f\x63\x27\xcd\x34\
+\xc1\x1f\xe6\x22\x2b\x74\x40\x64\xf2\xfd\x91\xa2\xdb\x9e\x21\x4a\
+\x3e\x35\xe1\xbd\xe8\xfc\xde\xbc\x14\x40\xfd\x5e\x44\x3b\xc9\x70\
+\xc1\x5f\x51\x5e\xfb\xdb\xc1\x50\xbe\x90\x07\xa0\x2f\x2a\xd0\xf5\
+\x13\xa2\x28\xfd\xfb\x8e\x69\x8a\xd8\xe9\x1c\x8a\x54\x88\xf7\x71\
+\x0e\x87\x46\xb9\xb7\xe4\x24\x01\x1b\xc7\xe3\x9d\x01\xa4\xbf\x93\
+\x0c\x01\x54\x96\x81\xf9\x0c\xd5\x6e\xec\x0b\x45\x89\x1b\xfe\x96\
+\x5e\xc5\xd0\xc6\x01\x68\x11\x0a\xe6\x37\xed\x23\x21\xe5\xdd\x1d\
+\x79\xd1\x29\xc2\x3c\xde\xd6\x3d\x95\xf6\x69\xbc\x77\x57\x4b\xbb\
+\x4f\x56\x6c\x43\x17\x16\x16\x3a\xb6\xcb\xce\x3a\x29\x35\xe9\x87\
+\xe4\x78\x21\x50\x2d\xd2\x8b\xf4\x0a\xdf\x65\x2e\xe0\x8f\x47\x3f\
+\xa5\x7b\x37\x33\x4a\x91\xac\xa3\xbe\x99\x1a\xcd\x2f\x44\xc0\x49\
+\x04\xfa\x4b\x86\x96\x91\xf2\x6b\x9f\x9e\x24\xac\xf9\x61\xf8\x23\
+\xc1\xb8\xa0\x86\x67\x6a\xf4\xa9\xb5\x05\x65\x98\x87\xce\x7b\xf8\
+\x8d\x17\xde\x59\x16\xf1\x57\x28\x35\x7e\x31\xe3\x10\x8f\x75\x7d\
+\x4b\x55\xce\x84\xf4\x5e\xec\x98\x77\x13\xf1\x97\x4b\x71\xf3\x00\
+\x79\xe6\x2b\xa3\x4c\xaa\xd1\x0f\xc3\xa5\xc6\x5d\x1f\xbe\xad\x2e\
+\x2b\xef\x81\x76\xeb\x23\xeb\xe4\x7e\xe1\xed\x11\x6b\x7a\x6b\xa0\
+\x26\xdd\x7a\xfe\x45\x89\x4a\x6a\x2a\x98\x8f\xeb\x44\x2d\xe9\x86\
+\x91\x6e\x98\x78\x9f\x7c\x7c\x1c\x4d\x93\x01\x39\x1e\x15\x62\xf4\
+\xc9\x37\x85\xa5\x41\xcd\x6d\xb8\x55\xc3\x67\xf0\x81\x35\xb3\x3a\
+\x7f\xb4\x79\x39\xf7\x1f\x93\x00\x7c\x72\x72\x30\xc2\x59\xd4\x90\
+\x74\xbb\x58\x52\x15\xd2\xde\xde\x52\x02\x3d\xe6\xf6\xf2\x20\x9a\
+\xfb\x25\x92\xdf\xb3\x5e\xf9\xf4\xe2\x28\x4d\x9a\x95\xf0\x05\xa2\
+\x28\x80\x76\xfe\xa5\x16\x45\x87\x56\x57\x18\xa8\x43\xcf\x6e\x3f\
+\xf5\xe8\xf9\x56\xae\x6e\xe1\x0d\xc9\x76\x12\xd2\x22\x29\xf1\x37\
+\x30\xee\x4d\x69\xaf\x2c\x77\x2f\x3e\xbb\x3b\x79\xe9\xf5\xbb\x58\
+\xed\x0e\x4c\x6b\x32\xa1\xef\xbd\xee\x7d\x8f\x8f\x03\xc8\x7e\x03\
+\x25\xc2\x3c\x73\x3b\x72\xcb\x3c\xf9\xed\x08\x28\x7a\xe9\x39\x07\
+\x89\x36\x7a\x43\xa5\xbe\x1f\xcc\x23\xd2\x25\xd6\x1f\xa9\x37\xec\
+\x66\x4b\x1a\x63\xbd\xf2\x0f\x7b\xed\xb1\x77\x5a\x69\xd7\x63\x42\
+\xfe\xa9\xe3\x7c\x58\x97\xd6\x9b\xba\x9d\x6f\x77\xe3\x94\x5e\xba\
+\xf1\xd4\x1e\xc6\xc1\xb5\x0f\x4c\x26\x5f\xbc\x7a\x1f\x01\x78\x20\
+\x02\x7d\x8e\xf5\x47\xa3\x92\x18\x7f\xbe\x6d\x91\x0c\xd4\xb5\xee\
+\x5a\xf0\xe9\x4e\x89\xf4\x13\x7f\x09\x25\x8e\xb4\xb8\x23\x03\xdd\
+\x27\x1b\x04\x24\x3c\xd3\xd1\x1e\xc6\xda\xe9\x62\x45\x96\xff\x3b\
+\x14\x84\x57\x51\xf7\x4f\xe5\x4b\xfb\x19\x29\x01\xed\x2d\x07\x98\
+\x6f\x45\x92\x49\x18\xb1\x76\x3a\x22\x9c\x0c\x4f\x36\x79\x18\x9d\
+\x17\x7d\x6d\x73\x49\x32\x75\xa0\xfa\x03\xd2\xcb\xaf\x82\xf7\x98\
+\x56\x85\x8c\xcd\xe4\x20\x23\x49\x29\xd8\x98\xca\x95\x44\xec\x38\
+\xd7\x2e\x5d\x5f\x2b\xbe\x7b\x64\x03\x75\xe3\xf2\x38\x27\x98\x26\
+\x87\xcf\x13\x52\x1a\x9e\x28\xa2\xc0\x89\x5a\xa8\x27\xaa\xd8\x7b\
+\x68\xd2\x6b\xf7\xae\xed\xb1\x9f\xa9\x52\x35\xf7\x67\x53\xff\x73\
+\xa5\x42\x7a\x2f\x97\x1c\xbe\x35\x13\x91\xf7\xeb\xd7\xf4\xae\xab\
+\x0f\x1c\x3e\xb1\x67\x3a\x2a\x24\x05\x81\x3f\x19\x4b\x20\x5d\xd9\
+\x76\x41\x4a\x62\xe6\x08\x46\x3b\xc2\x47\xb1\xde\xdc\x04\x50\x55\
+\x2f\xe3\x90\x2d\x55\xaf\x54\x5c\x44\x94\x1b\x15\x22\xa4\x1b\x76\
+\x96\x65\x91\x2c\x35\xd2\x71\x8f\x12\x1d\x57\xef\x58\x4e\x93\xb2\
+\xa8\x93\xa1\xfa\x27\xa1\x28\x85\x7a\x40\xea\xae\xcb\xc4\x30\x32\
+\xea\xcf\xdf\xcc\xcc\xd3\x56\x7a\x13\x7f\x77\x8c\xe0\x41\x4b\x02\
+\x1a\xed\x67\x41\xc2\xb8\xfe\xd9\x6b\x4f\xf9\xfd\x1e\xc6\x43\x77\
+\x2d\x6d\xd9\xf1\xd4\xe2\x28\xab\x4d\x52\x87\x86\xb4\xe9\xe8\x03\
+\x90\xdd\x2d\x5a\xdb\xa8\x55\xa3\xb3\xd4\x94\x3a\x83\xbf\xc4\x40\
+\xc9\x8f\x12\x45\xdf\x4c\x7f\xa5\x61\x1c\x85\xf4\x0f\x7a\x4d\xb3\
+\xb0\x85\x60\x7f\x66\x39\x5d\x13\x34\xad\x91\xcb\xa3\x85\x07\x71\
+\xde\xd7\x96\x2d\x3e\x6b\x47\xfd\x31\x5b\x98\x28\x13\x3e\x1d\x22\
+\x2d\x07\x45\x0b\xf2\xa5\x8f\x8d\xc8\xe6\x93\x62\xa9\xdb\x3f\xb9\
+\x2e\xb0\x7b\x71\x27\xe7\x1c\xeb\xda\x24\xf3\x84\xaa\x8d\x7b\x7f\
+\xfa\x8e\xf3\xb0\x4d\xa0\x68\x17\xe7\x81\xd3\x8c\x92\xd3\x5e\x7a\
+\xdf\x74\x4a\x0e\xf1\xe5\x93\xbc\x8c\xe3\xf2\x7f\x11\x94\x74\x8d\
+\x7e\x52\xe5\xd2\x9d\x87\xb6\xb7\xa1\xb9\xd1\x95\x81\x26\x5d\x7f\
+\x6b\x1d\x34\xf5\xf5\x7a\x4f\x54\xa8\x15\x00\xf3\x7e\xe8\x4f\xf9\
+\x4f\x06\xde\xc9\x34\x3c\x31\x2e\x65\x7c\x98\x3c\xc0\x1d\x87\x27\
+\x93\x4c\xfe\x2c\xbc\x1f\x80\xe9\xee\x7d\x41\x46\xcf\x1d\x0c\x5d\
+\xe1\x32\xce\x2e\x22\xb1\x64\x7d\x56\xac\xe2\xae\xa5\x03\xba\x13\
+\x7e\x62\x5c\x61\xcf\x34\xf8\xe8\xc9\xc5\xc9\x28\xd3\xb4\xb8\x69\
+\x72\x16\xe6\xa3\x67\x1c\x50\x9d\xc1\x9f\xd3\x91\x5b\xe5\x08\x9e\
+\x53\xdb\xad\x61\x39\x4f\x42\x6a\xc7\x6d\x93\x11\xce\xac\x9b\x14\
+\xbe\xf0\x5d\xd8\x0e\xa8\xee\x26\xc2\xc4\xdd\xe0\x0d\xdf\xe4\xef\
+\xd2\xf1\xe6\x1e\x09\x5d\xa8\x7d\xde\xc6\x79\xcd\x74\x94\xba\x0c\
+\x44\x78\x11\x50\x73\xe5\x30\x14\x5f\xcf\x31\xa1\x29\xd7\x88\xa8\
+\xa7\x27\xfa\x47\x6d\xbd\x5e\xa7\xd7\xa5\x34\xdf\x6e\xe3\x8b\xfb\
+\xa6\x23\x86\x98\xa2\xff\x41\x29\xaa\xcd\x44\xad\x1a\x93\xb0\x1e\
+\xa7\x83\x1c\xeb\x65\xb5\x48\xfd\x91\x60\xa7\x44\x26\x72\xe6\x48\
+\xf3\xe6\x63\xbd\x7b\xee\xd9\xb0\x76\xff\x72\x55\x94\x85\xbb\xe1\
+\x8d\x50\xb2\x8c\x72\xe9\xd6\xda\x51\xd3\x44\x98\x00\xad\x3f\x19\
+\x4a\x0b\x4e\x36\x18\x6a\xba\x14\x04\x04\x15\x96\xf4\x92\x51\x3a\
+\xa0\x3f\xfc\x47\x76\xdf\xe4\xc8\x78\x36\x65\xb4\xf6\x77\x95\xa0\
+\xe3\x4d\x86\x7e\x18\x62\xfa\xb3\x22\xf0\xf4\x96\xf7\xc0\x88\x51\
+\x90\x4b\x1f\x93\x15\xc5\x5d\xe3\xb6\xb6\xac\x09\x52\x1c\xb8\x83\
+\x6f\xb2\x76\x34\xce\x3e\x50\x6a\xe2\x11\x54\xb5\x8d\xae\x1d\xda\
+\x94\x42\x4c\x2d\xda\x22\x5a\xd2\x1b\x26\x05\x0d\x45\x9a\x5a\xa8\
+\x8d\x12\x63\x69\x19\x4f\xab\xc2\x44\xe8\x64\xd8\xef\x49\xe9\x6f\
+\x22\xb4\xe7\x2c\x9d\x6b\x2a\xe3\xf2\x30\x05\xf5\xb9\xa0\x2c\xdd\
+\x1d\xde\x5c\xb8\x53\xb0\xd0\x7a\x7b\x86\x51\x2d\x3d\x90\x7a\x17\
+\xea\xa2\x27\xd0\xd3\xc7\x4f\x5e\x48\x7f\x8f\x42\xe7\x91\xa6\x21\
+\xd0\x58\x80\xa1\x76\x54\x7e\xfe\xcc\x1d\x9a\x72\xfd\x31\x46\x14\
+\x70\xa0\x4f\x5e\xeb\x53\x2c\xc2\x7e\x7f\x41\x0d\x0b\xe9\x9d\xa7\
+\xac\x7a\xb3\xb0\x9e\x50\xda\xcb\x89\x94\xf5\x65\xe7\xa1\x16\x6d\
+\x7e\xe9\xf2\xf5\xf0\x9d\x9e\xa2\xb6\x71\x58\x57\xa5\xa3\xbc\xd1\
+\xab\x83\x24\xf2\xd5\x8c\xd4\x8f\x5a\x86\xf3\xf7\x4d\x3b\xda\x77\
+\x67\x6f\x0c\x5e\x50\xd3\xdc\xde\xee\xf2\xcd\xfc\xe9\x39\x8f\xbc\
+\x62\xdc\xcb\x05\xa0\x4e\xed\x13\x75\xa2\xa0\x64\xd7\x4d\x84\x08\
+\x43\xbd\x25\x75\xd7\xd1\xa1\x23\x97\xa7\x33\xfa\xce\xd9\xaf\x31\
+\x29\xc2\x49\x4b\xeb\x13\xd0\x33\xac\xe8\x1d\xef\xf0\xa0\xb2\xb2\
+\x75\x82\x2a\xf9\x4b\x5f\x86\xad\x30\xaf\x72\x59\x5c\xd5\x7c\x93\
+\x78\x6a\xd0\x73\xdf\xe1\xe5\x9d\x0c\xd4\xf6\xe8\xf8\x6b\x52\x95\
+\xfd\x43\x7b\xe4\x92\x1e\x47\x51\x1f\x35\xc3\xd7\x57\x4e\xe5\x9b\
+\x09\x08\xf3\xb7\xac\xff\x83\x30\x52\xc2\x28\x44\x73\x5e\x46\x71\
+\x54\xdd\x5d\x4a\xe5\x6e\xee\xa7\xe1\x5d\xa8\xe2\xf4\xd7\x7a\xce\
+\x2f\x35\xd8\x9b\x67\x29\xd3\xfc\xec\x1b\xd6\x9f\xb5\x63\x79\x3a\
+\x1e\xa4\xb3\x44\xee\xff\x37\x76\x36\xad\xb6\x1d\x45\x18\xbe\xd1\
+\xab\x6b\x7f\xac\xbd\xd6\x59\xd7\xbb\xb9\xde\x13\x50\x07\x5e\x41\
+\x49\x40\x74\x20\x38\x88\xa0\x01\x11\x27\x89\xa0\x44\xf1\x6b\x92\
+\x20\x19\x29\x82\x1f\x71\x60\x06\x8e\x1c\x38\xf0\x27\x38\x53\x34\
+\x19\x38\x0a\xfe\x80\x8c\xfc\x05\x01\x41\x32\x50\xfc\x15\xe6\x74\
+\xd7\x5e\x4f\x57\xbf\x55\x6b\xdf\x3e\x7b\x9f\x73\x86\x45\x77\x57\
+\x75\x7d\xbd\x6f\x09\xa4\x6d\x70\x16\xa0\x13\xd4\x31\x16\xe8\x2d\
+\x85\x1e\x59\x89\x00\x20\xd0\x42\x9f\x14\xdd\xb0\x4a\xfb\xe0\x41\
+\x15\x92\xd9\x12\x09\x59\x85\x4e\x17\x98\x61\x2c\xe0\xf4\xe5\xe4\
+\x5b\x1b\xda\x4d\xb2\xa6\xbd\xdd\x67\x73\x6c\x47\x91\x92\x9d\xad\
+\x2b\x18\x81\x51\x8f\x5c\xb0\xcb\xa3\x5d\x51\x2b\xd5\x83\x15\xd1\
+\x14\x99\x42\xee\x34\x91\xab\x45\x5b\x28\xfe\xa0\xa1\x3b\xb2\x2a\
+\x99\x8e\x48\x6b\xa2\x29\xf5\x2c\xc4\x3f\xf6\x90\xf6\x72\x2a\x55\
+\x85\xe2\xeb\x63\x92\x1a\x65\xc9\xed\x73\xf8\x5e\xcc\x2a\x9a\x9a\
+\xa6\x5e\xe3\x57\x4c\xd3\x2c\x2a\x05\xda\x4e\xba\x1d\xb9\xa3\x44\
+\xf5\x48\xca\x00\xb9\x75\xba\x21\x62\x0a\x17\x04\xf6\x89\x7b\xca\
+\x66\xfa\x99\x0d\x4c\x42\xe8\xb7\x14\x6e\x0d\x01\xb0\xb2\x9c\xa0\
+\xc2\x96\x39\x56\x08\x86\x69\x92\x37\xa3\x0e\x59\x5f\x3e\x8a\x5b\
+\x07\xd1\x14\xb2\xfe\x84\x2c\x00\x66\x47\xb1\x4f\xf2\xd6\x77\xef\
+\x27\x0d\xe3\x91\x3e\x79\x81\xb9\xa1\x4a\xe6\x4c\x02\x42\x19\x13\
+\xf9\x46\xdc\x8e\x8a\x05\x0f\xcd\x13\x72\x72\xf8\xc4\x76\x81\xcd\
+\x47\xab\xc8\x3c\x39\xfe\xee\x61\x96\xfc\x83\x28\xbc\x8c\x3d\x92\
+\xc2\x88\xea\x13\xd2\x16\x7d\x2f\xa2\x0a\xda\xb2\x01\x09\xc6\x7e\
+\x09\x18\x21\x21\x20\x05\xd5\xa0\x3b\x0a\x5b\x41\xaf\x4d\x7d\x8e\
+\xcc\xda\x85\xa1\x23\xcb\xfc\x3c\x30\x77\xfc\x76\xfe\x68\xc3\x94\
+\x99\xf2\x8f\xaa\xd6\x73\x49\xdd\x35\x45\x5c\xb7\x56\x49\x19\x24\
+\xd5\x8e\xe6\x02\xc2\xca\x93\xaf\x0e\x29\x89\x07\xf5\xf3\xb2\x85\
+\xa0\x27\x54\x1e\x07\x5f\xa9\x9c\x4d\x99\xd8\xd1\x9e\x97\x8a\xa3\
+\x57\x62\x2a\xc0\xe0\x8c\x39\x74\xea\xbe\x49\x94\xaa\x3e\x89\xaf\
+\x84\xea\xcc\x86\x0a\x1c\x30\x5d\x2a\x92\x0e\x1e\x67\x8b\x21\x95\
+\x67\x29\x99\x81\x91\x6f\xe9\x75\x7c\xfd\x8e\xc9\x0d\x32\x4f\x06\
+\xe4\xb2\xea\xfc\x80\xb8\x42\x8c\xcd\x3e\x22\xaa\x52\x92\x09\x3e\
+\x2c\xc7\xd7\x17\x61\x2f\x9b\x79\x10\xde\x61\xb0\xa1\x29\xdf\x93\
+\xba\xa4\x4b\x8b\x15\x22\x60\x42\x4a\xa1\x44\xbf\x8e\xaf\xb7\xec\
+\xbd\x94\x6c\xab\x94\x34\xe4\x06\x31\x13\xa0\xf0\xee\x8a\x22\x2f\
+\x96\x34\xe1\x1f\xe5\xae\x2e\x80\xac\x43\x7c\x3d\x68\x4b\xc9\xe9\
+\x15\x4d\x32\xc3\x1f\x3c\xf5\xe0\xea\x95\xe8\xcb\x65\x9c\xc5\x3a\
+\x21\x2a\x1f\xcc\x53\x8c\xaf\x27\x00\x65\x4b\x57\x64\x35\x58\x11\
+\xe9\x1b\x1f\x1a\xc5\x4f\xa3\x91\x35\x5c\xe2\x9b\xf2\x8f\x7a\xc6\
+\x02\xc4\x54\x30\x63\x67\x9f\x7a\xac\xc8\x18\xa2\x97\xb1\xa3\x91\
+\x2a\xa1\x48\xa2\xf7\x19\xff\x68\x82\xaf\xa7\x81\x30\xec\x80\x30\
+\x5d\x32\xc8\xe5\x31\x47\xad\x23\x35\x0b\x6d\xf2\xa0\x70\x30\x22\
+\xc2\x3f\xba\x85\xaf\xe7\x97\xb3\xa3\x7e\xbe\x80\xe8\x12\xd8\x45\
+\xec\xa8\xc8\x88\x7d\x8a\x9d\x3c\x9f\xd8\xe9\x76\x74\x0b\x5f\x2f\
+\x6c\xd3\x15\xc6\xc6\xfd\x54\x6d\x52\x43\xaa\x53\xa4\x70\xf2\x52\
+\xfe\x51\xdd\xd1\xd8\x3c\x91\x76\x3a\xe8\x6b\x0f\x7f\xbf\x5a\x27\
+\xaf\xee\xd0\xbf\x2c\x28\x3f\x31\xd3\x36\xff\xa8\x32\x68\xdd\x64\
+\xf8\x7a\x35\x4d\x3c\x4f\x0e\xd9\xa0\x7b\x89\xa1\x52\xbd\x07\x13\
+\x1e\xf3\x8f\x2e\x82\x0b\xbd\x8e\xaf\xc7\x6b\xc6\x79\xe2\x5d\xb2\
+\xdf\xba\xb3\x3c\xf6\xa2\xf7\x68\x51\xca\x3f\x9a\x95\x18\x73\x7c\
+\x3d\xaf\x13\xac\xc3\x20\xc1\x81\x30\xf6\xd6\x89\x0f\x82\x32\x1a\
+\x3a\xcf\x95\x64\xfc\xa3\xd7\xf1\xf5\x09\xdb\xb8\x32\x16\x0c\x6e\
+\x47\x11\xd2\xbf\x4d\x20\x6d\x49\x43\x39\x19\x73\xfe\xd1\xd3\x35\
+\x7c\x3d\x0b\x0a\xd2\x11\x0f\x4a\xd5\x1d\xa5\x4f\xea\xb6\xc4\xf6\
+\x3a\xf4\x48\x11\xcc\x78\xf8\x57\xf0\xf5\xe5\x83\xb0\x63\xcb\x3a\
+\xdc\xc9\x29\xa1\x88\xb8\x79\x38\x79\xc2\x46\x17\x33\x3e\x51\x5d\
+\x3e\x65\xf8\xfa\xb0\xcf\xf5\x68\xc2\xa2\x4c\x89\x26\x11\xd6\xcb\
+\x02\x5f\x1f\xb3\x62\x13\xdb\x6b\xda\x31\xc7\xd7\x6b\x52\x07\x5a\
+\x85\xf5\x2b\x03\x8d\x45\xe7\xf5\x61\x6a\xe4\x65\x09\x6d\x3f\x8b\
+\x44\x6e\x88\xaf\x07\x6e\x8b\x88\xf6\x3f\x6c\x99\x6e\x61\x41\x75\
+\xe4\x15\x0a\xa5\x15\x7b\xf6\x14\x9a\x79\xc9\x3d\x6d\xe1\xeb\x19\
+\x84\x50\x17\x47\x0f\x5b\x26\x79\x71\x0d\xf0\x9a\x25\x49\x12\xf4\
+\x09\x31\x91\xb6\x1d\xc2\xb9\x8d\xaf\x4f\xde\xfa\x31\x65\x28\xaa\
+\x82\x21\x6a\x08\x05\xef\x08\x9f\x9e\x8e\x7f\xf4\xf6\x2a\xbe\x3e\
+\x19\x10\x0d\xe7\xb4\x2e\x94\x49\x3d\x7c\x1d\xc1\xfb\x94\xfc\xa3\
+\xd7\xf1\xf5\x88\x39\xd6\x0f\x14\xc9\x86\x1b\x91\xe5\x67\x72\x65\
+\x44\xbe\x5a\x6f\x50\xfe\x51\x84\x4e\xf1\xf5\x07\x18\xb4\x5c\x80\
+\x67\xd2\x9a\x88\xfe\x71\xa2\x1a\xe2\x42\xd1\x60\x63\x79\x9b\xae\
+\xf1\x8f\xe6\x50\x36\x2a\xe0\x46\xa8\x81\xa4\xe8\xfe\x51\xe8\x0a\
+\xe4\x7d\x92\xf8\x0e\x63\xef\x72\xce\xd7\xf8\x47\x29\x31\x26\xf8\
+\x7a\x26\x33\xf9\xa8\xde\xe6\xdc\x31\x4d\x4a\xa7\xd7\x63\xa2\xc2\
+\xe5\xa7\xb4\xd8\x7f\x39\xff\x28\xc1\x1d\x06\x9f\x00\x84\x1d\x45\
+\xd4\x51\x20\xeb\x5e\x48\xd8\x1c\xc5\x8b\x72\x42\xfa\x51\xd6\x29\
+\xff\x68\xee\xe6\xb1\xe0\x24\xdb\xa3\xf5\x58\x53\x62\x26\x2d\x85\
+\xea\x70\xcb\x51\xc3\x7a\xe4\xcc\x38\x72\x23\xfe\xd1\x80\x00\xa2\
+\xda\x51\xdb\x53\x84\x84\x7b\xd2\xb8\x4a\xdc\x08\x56\x2d\x88\xe6\
+\x47\x8f\x42\xd9\x52\xbe\xa7\x04\x82\x71\xea\xb6\x73\xbf\x87\xfb\
+\xe3\xd0\xe7\x75\x72\x98\x50\xfd\x10\x86\x28\x53\x89\x67\xcf\x0a\
+\x1f\xfb\x96\x48\x69\x03\x5f\x7f\x01\xd8\x83\x13\x41\xcc\xe6\xd8\
+\xa3\x34\xd9\x80\xb4\x81\x09\xf5\xe2\xf2\x1b\x09\x95\x7f\x54\xf1\
+\xf5\x6a\xf2\xed\xe8\xfb\xb3\xf7\x13\x9a\xb4\x70\x47\x58\x2f\xe6\
+\xc9\xf4\x28\xa8\xdf\x0c\x79\x63\x26\x51\xa8\x89\x99\xe2\xeb\xf7\
+\xba\x9d\x8c\xba\xd3\x01\xd1\xae\x6c\x0b\xc0\x1a\x74\x3d\xd1\x9d\
+\xbb\x00\xd2\x49\x18\xbc\x4c\x37\x31\xbe\x1e\xa7\x44\xf6\x15\x6a\
+\x4f\x65\x2b\xc0\x77\xa2\x3d\xcb\x67\x9c\x39\xf8\x84\xe1\x2d\xb9\
+\xa3\xf8\x79\x62\xf3\xd9\x52\x3f\x6e\x3b\x87\xaf\x32\x7e\x53\xed\
+\xe8\xdc\xcc\x10\xa3\x6b\x3c\x0d\x45\x58\x4f\x8d\xaf\x97\xe7\xc9\
+\xc4\xcc\x20\xc1\xe5\xeb\x58\xbe\x26\x47\xde\xbf\xb8\xae\x71\xcd\
+\x38\x73\xec\xdb\x06\x1f\x2c\xf8\x7a\xf2\x92\x25\x73\x23\x8d\x8f\
+\x9d\xa4\x45\x46\xb6\xd2\x75\xb6\xb7\xf9\xfb\xb9\x4f\x3c\xf1\x41\
+\x9f\x32\xa7\x64\xa7\xf8\xfa\x4e\x9b\x50\xa6\xf0\x8a\x32\xb1\x85\
+\xc1\x7c\xed\x1d\x75\x53\x06\xe2\x61\x2d\xf6\xc1\xc7\x07\x78\x25\
+\x9e\x53\xd4\xf3\xc4\x8e\x3a\xe6\xbc\x60\x98\xb1\x9a\x51\x74\xa9\
+\x2e\x2c\x68\xc7\x44\x48\x10\x9a\xb0\xb7\xe7\xf8\x7a\x74\x1e\xfb\
+\x24\x05\x1c\xa4\x15\xdf\xc4\x98\x08\x69\x7c\x72\xbc\xd8\x02\x12\
+\x42\xca\x65\x91\x28\xf4\x14\x46\x76\x72\xf4\x08\x8b\x98\xa2\xf6\
+\xd8\x51\x98\x54\x58\x45\xe3\x7d\x0e\x7f\x50\xea\x51\xfb\x2f\xc3\
+\x8a\xb0\xc0\xd7\xfb\x58\x04\xd3\xc4\x0f\x02\x73\xf8\x75\x2b\xe1\
+\x79\x34\xbd\x72\x7c\x15\x4e\x46\x79\x45\xa9\x31\x0b\x83\xd6\x4d\
+\x8c\xaf\xc7\x3a\x89\xa7\xc7\xd1\x87\x73\xee\xca\x9a\x64\x06\x06\
+\x7e\xbe\xcc\xb5\x55\xe0\x55\x0e\xb7\x44\xa3\x28\xd6\xb3\xad\x44\
+\x76\xeb\x8f\xef\x19\x77\xf3\x99\xb8\xa0\xee\x09\x75\x1e\xbe\xef\
+\x73\x25\x99\x9b\xf3\xe1\x67\xf8\xfa\x68\x2b\x19\x1a\x29\xec\xed\
+\x2d\x6f\x9e\xce\x35\x75\x43\x0e\xab\xcc\x01\xf1\x6c\x92\xc3\xdf\
+\xc6\xd7\x7b\x07\x1f\x0b\xda\x19\x27\x64\x85\x37\xcf\xcf\x3c\xe3\
+\xf0\xcd\x69\xae\x60\x3b\xa5\xc3\xc7\xde\xb3\x36\xf0\xf5\xf6\xe5\
+\xec\xdd\x4a\x95\x1e\x65\x12\x97\x64\xb6\xdf\x0b\x3f\xb3\x28\x93\
+\x7d\xc8\xe2\x67\x7c\xf8\x8a\xaf\x57\x7f\x74\x64\x5f\x51\xfb\x89\
+\x69\xeb\x8d\x5f\xca\x20\x0c\x2e\x29\xf1\xb2\x9a\x27\x0d\x42\xf3\
+\xf9\xf5\xdb\xf8\xfa\x91\xbe\xa7\xc2\x8f\xab\xed\xa3\x13\x75\x11\
+\xb6\xd5\x5d\x52\x57\xb3\x4b\x4e\x5e\xfa\xc9\x6e\x25\xae\x8f\xf1\
+\xf5\xda\xaa\x01\xf1\x6c\x3c\x4d\x4a\x03\x26\x3d\x7a\x64\xf5\xa2\
+\x6e\xd7\xeb\x73\x7c\xfd\x6e\x0f\xe7\x2c\xe3\x8c\xd5\xc9\x23\xa5\
+\xe3\xcc\x92\x6f\xc8\xf5\x6c\xf8\x45\x9f\xd4\x8a\xea\x24\x46\x9d\
+\x5f\xaf\xf8\xfa\xbd\xb8\x7a\x8e\xca\x55\x75\xaa\x6a\x7d\x5f\x11\
+\x25\xe9\xe8\x5e\x7b\xc5\x06\x02\x0a\x8e\x76\x34\xc7\xd7\xab\x4b\
+\x42\x68\x6f\xdf\xee\x65\xba\x44\x23\x38\xa6\xed\xc2\x1f\x9d\x3b\
+\x7f\x34\x8f\xf0\xd4\xc3\x57\x34\x1b\x62\x6e\x9b\x27\xb8\xf3\xcc\
+\x86\xc2\xe3\xac\x61\x72\x5c\xbc\x21\x45\x66\x9f\xed\x7a\x7d\xab\
+\xf5\x7e\x36\x38\xde\x28\x5e\xbe\x8c\x5d\x9e\x68\xce\xe2\x09\x95\
+\x45\x70\xa7\x0b\x9f\x64\xd9\xe4\xc3\x6f\xb5\x5e\x0d\xa9\x7b\xeb\
+\x35\xe5\x8c\x87\x3f\xb4\xc9\x52\x15\x90\x70\x19\x4b\x9a\xcc\x6c\
+\xb8\xed\xf8\xf0\xc3\x51\x08\xbb\x36\x91\x7b\x84\x7e\x74\x54\xb5\
+\x67\x49\x26\x4f\x94\xc9\x61\xee\x74\x54\x8b\x1e\x3c\x5a\x1f\xe3\
+\xeb\xe3\x72\x28\x6f\x93\x32\x68\x91\xbc\x67\x2f\x35\x3b\x4e\xbc\
+\xa4\x45\x26\x01\x38\x08\x1f\x7e\x8c\xaf\x4f\x1a\x5f\x98\x79\x84\
+\xdf\x5c\xfd\xbc\x2a\xe2\xe4\xa0\x96\x62\x48\x17\x18\x0b\x36\x07\
+\x1a\x2b\x1f\x7e\x8e\xaf\x97\xc4\x73\x11\x96\x9f\x78\xfe\x49\x55\
+\xfc\xde\x3a\xe1\x2d\xd3\xde\x8e\xf2\x83\x6a\xc8\xb5\x9e\xe5\xf1\
+\xf5\x28\x13\x05\x3b\x52\x10\xb5\x20\x26\x64\xe3\xf8\xf8\x2e\xad\
+\xb7\xac\x6f\x3d\xde\x53\x94\x79\x92\xfd\xbc\xd5\x7a\xbd\xe2\xeb\
+\xf5\x8e\xc2\x3a\x1d\x28\xfe\xd4\x06\xcc\x7a\x47\x81\x34\x30\x2a\
+\x18\x95\xf7\x61\x68\x7f\xf8\xd4\xeb\x63\x7c\x7d\x18\x2a\x37\xb9\
+\xa7\xa3\x97\x72\x98\xf0\x46\xd0\xa6\xa8\xce\x98\x03\x58\xb3\x29\
+\xc1\xdb\xf8\x7a\x5b\xea\x3d\x51\x60\x74\xc3\xb9\xa4\x75\x78\x0c\
+\xcc\x13\x08\x56\x9f\x7c\x22\x89\x2f\x4a\x2f\xf5\x7a\xe2\xfa\x48\
+\xce\xa6\xa5\x24\x9e\x69\x3b\x55\x8d\xaf\x5a\xb4\x62\x43\xe9\x28\
+\xd1\x66\xc7\x00\xd3\x12\xbd\xa2\x32\xbf\x5e\xeb\xf5\x87\x5e\x4a\
+\xbe\x91\xb0\x36\xf8\xaa\xe2\x81\xa7\xbc\x2d\xd3\xa1\x2e\x63\xd8\
+\x7a\x3e\xbf\x9e\xb0\x8e\xc8\x49\x56\x3f\x6c\x9d\x3a\x38\x4f\x28\
+\xda\xef\x82\x11\x92\xb8\x33\x9d\x25\x12\x87\x6a\x6d\x39\x9f\x5f\
+\xcf\xe9\x87\x99\x32\x24\x0d\x0a\x77\xae\xed\x69\xf2\x31\xe8\x52\
+\x23\x27\xd0\xe0\x9a\xd0\x63\x3f\x7d\x5b\x89\xcc\xaf\x37\x01\xa3\
+\x1d\x1d\x11\xf0\x78\x64\x47\xb5\x7f\x94\x87\x14\x8b\x8f\xb0\xbe\
+\x55\x43\x79\x1d\xa9\x8c\x64\x7c\xf8\xfa\xd8\xdb\x57\x63\xbc\xe3\
+\x31\xf6\x48\x10\x51\x03\x3b\x90\x57\x46\xfc\x81\x83\x2f\xea\xf4\
+\xb4\xf5\x7a\x8f\x61\xf5\x7b\x6a\xed\x3a\x91\x8c\x48\x6a\x2f\xbe\
+\x3f\x7a\x86\xb2\xb1\xa7\xf3\x90\x95\xc1\x89\x9c\xf2\x7a\xbd\x05\
+\x77\xa2\xf3\x48\x7b\xf4\xbd\x3a\x5a\x67\xb2\x2b\xca\xd1\x0b\x58\
+\x04\x84\xd8\x80\x94\x00\x58\xd1\x27\x66\x83\x07\xd3\x25\x08\x98\
+\xa5\x99\xc8\x3e\xcc\xb9\x0b\xdb\xc9\xc6\x15\x66\x2d\x34\xf3\x94\
+\xc3\xb2\xc7\xe9\xea\xd1\x6b\x4d\x4c\x22\x50\x7f\x09\xdc\x63\x0f\
+\xe6\xc6\x8e\xbd\xc8\xaa\x3b\xca\xe3\x04\x7e\x99\x52\x18\xe9\x87\
+\x64\xd8\x19\xf5\x7a\xbc\x3c\x1a\xc7\x15\xdb\x20\x73\xee\x48\x90\
+\x18\x24\xbc\x27\xab\x30\xd3\x04\x9d\x4a\x6c\x45\xf1\xa1\x94\xfe\
+\x43\xd1\xb6\x80\x58\x3d\x4e\x88\xa4\x53\x3e\x97\xed\x52\x0b\x99\
+\x78\x9a\xc0\x58\xf7\x75\x50\x11\x96\x3b\x2a\xe5\x1b\x89\x97\x70\
+\x4b\xe4\xec\xed\x57\x6b\x45\x11\xd5\xde\xf9\x89\x70\x69\x05\x85\
+\x03\x0e\x64\x8e\xd0\x1c\xbe\xf5\x18\x7c\x85\xad\x37\x7b\x8a\xd2\
+\x67\x75\x26\x9d\x1b\xa8\x6f\x3d\xe6\x74\xc2\x3e\x61\x46\xcb\xd7\
+\xfc\x66\x9d\x72\xc7\x9e\xea\xfc\x7a\xa4\x24\x58\x0a\x10\x77\xa3\
+\x26\x75\x1a\xcc\xdd\xc0\xae\xe2\xe8\x4d\xbd\x94\x33\xe9\x31\x9d\
+\x6c\xa9\xe0\x0b\xc1\xd7\xfb\x85\xb9\x2f\x29\x09\xd6\x88\x32\xa5\
+\x13\xee\x7c\xbc\x3c\xf1\x42\x31\xdb\x32\xe6\x80\x78\x36\x68\x2a\
+\xda\xe2\xc3\x17\x0a\x4a\xcd\xe1\x73\xf4\xbd\x8f\x37\xc1\x3a\x8c\
+\xb1\x0f\xa1\x6c\xb6\xb9\x71\x04\xba\x28\xbe\x3e\x8c\xeb\x31\xf7\
+\x87\xd0\x71\x8e\xb5\x7e\x6a\xae\xa8\x09\x8a\x3a\xa1\xf5\xeb\x0f\
+\x88\x60\xcd\x8d\xcb\x12\x12\x4a\x21\xa7\x41\xf3\x47\x37\x05\x41\
+\x94\xde\xc4\x2c\xa2\x32\x5c\xa2\x88\xea\x41\x77\xe4\x47\xa3\x6d\
+\x15\x35\xca\xd1\x37\x88\x9b\x5d\x00\x24\xf5\xe5\xfa\xfa\xb1\x93\
+\x9f\x2c\x1c\xd1\xa2\xed\x42\xe1\x4e\xd3\xa3\x32\xe0\x32\xe7\xc8\
+\x45\xf1\x99\xcb\x26\xba\xe4\x8d\x53\x2b\x2e\xbb\x39\x51\xb0\x35\
+\x39\xa9\xd7\x03\xb2\x57\x65\x52\x31\xf1\x9e\xc2\xa2\x18\xcb\x67\
+\x1d\xe3\x7a\x3d\x83\x10\x6c\x43\xcd\x71\x9e\x92\x27\x94\x08\x54\
+\x23\x26\x56\xc6\x87\x6f\x1f\xea\xa1\x7e\x80\x1c\xb2\x2a\xe1\xb4\
+\xb2\xa9\x90\x7c\x42\xe5\xbd\x53\xa2\x4b\x04\x25\x53\xa2\xe6\x89\
+\x8a\x6d\x14\x8c\x60\xf1\x11\x16\x40\xc3\x1b\x9f\x7d\xf2\xe4\x1b\
+\xf7\xab\x9c\xb0\x68\x45\x3d\x3a\x14\xc5\x00\x5e\xc5\x37\x14\xc0\
+\xc0\xa9\x8f\x42\x9c\xa8\x72\xfe\x48\x28\xe3\xce\xee\xdf\x2b\xeb\
+\x2f\xc5\x1d\x2d\x1f\x77\xf4\xdf\x7c\xe9\xcd\x97\x8b\x26\xcd\x92\
+\x1c\x97\xa8\xbe\xc3\xd7\x4b\x36\x0f\x71\x23\x98\x90\x3f\xf8\xde\
+\xd5\x1b\xc6\xdf\xdf\xab\xeb\x23\xa3\x79\x79\x45\x54\x9b\x81\xf1\
+\x7c\x61\x04\xfc\x77\xa1\x4d\x4c\x30\xd6\xd8\xd2\x7e\xc5\x7c\xf8\
+\x76\xe4\xf6\x4d\xeb\xf5\x9a\xd1\xfb\xc5\x85\xdd\xf1\x51\x51\x25\
+\xbf\xa3\xcf\x54\x92\xe1\x93\xd9\x4e\x53\xa8\x6e\x57\xd3\x82\xd8\
+\x21\x63\x9c\x0e\x71\x2d\xbe\x5e\xbf\x8a\xca\x25\xfd\xda\xf7\xdf\
+\xfa\x74\x1d\xb0\x33\xc8\xcc\xab\x1f\xdd\x33\x66\xf7\x36\x66\x1a\
+\xe2\xa2\xed\x76\x92\x4c\x93\x0f\xb6\x0e\x54\xee\xc8\x38\x33\x3c\
+\xd0\xf9\xf8\x87\x8f\xc2\xe3\x6c\x9a\x64\x9d\x2f\xff\xaa\xdc\x85\
+\x67\xd7\xfb\xa0\x6f\x68\x24\xe8\xf5\xf9\xf5\xfa\xdc\xfb\x1c\x3e\
+\x27\x8f\xc1\xff\xdb\x85\x6c\x7c\xe8\x02\xbc\x8f\x17\x52\xa3\x42\
+\x3f\x5d\x58\x32\x87\x5e\x46\x9f\x2b\x61\x5d\x9f\x5f\xdf\xc7\xf5\
+\x5a\x10\x43\x4c\x6b\x29\x18\x2b\xa7\xeb\xeb\xc7\xa2\x4b\xbe\x57\
+\xe3\xfe\x97\xff\xfc\x70\x37\xd3\x03\xa1\xfe\x7d\x9e\x1f\xdd\x9e\
+\x5f\xaf\x3a\x2f\xf5\x7a\xdd\x51\x23\x4b\x9e\x6c\x4f\x7b\xa3\x3f\
+\xcf\x02\x69\xd1\x0c\xc4\xd6\x5b\x0f\x6c\xfd\xee\xcb\x6c\x4b\x87\
+\x67\xb2\x23\x67\x28\xe3\xc8\xc6\xae\xa8\xb0\xdf\x14\x82\xad\x22\
+\xa4\xd8\xd2\xc5\x66\x49\x2d\xf6\x9a\x46\x31\x13\x9f\x56\x50\x6a\
+\x8c\xfb\xf2\x29\x7f\xee\xe4\xdd\xfb\x3e\x32\xa4\xb5\xe4\xbd\x10\
+\xaa\xac\xec\x1f\x77\x97\xf4\x1f\xe7\x6e\x86\x18\x84\x44\x8c\xeb\
+\xd0\xb6\x12\xe2\x7a\x96\x8b\x42\x29\x31\xc2\x46\x46\x0d\x5c\x3b\
+\x08\x99\x6e\xa9\x47\x3f\x7d\xa8\xb0\xeb\xed\x64\xac\x29\x72\x56\
+\x92\x5c\x62\x11\xc5\xdf\x5c\x2d\xda\xf2\x34\x61\xa3\x92\x44\x2e\
+\x1b\xcb\x2a\xde\xd3\x7b\x65\x44\xcb\xa9\xa4\xca\xb1\xa4\xf3\xfa\
+\xb7\xca\xc9\x0c\xce\x84\xa4\x46\x47\x21\xa8\x61\x0a\xbb\x9e\xf4\
+\xfd\x64\x1d\x1b\x96\xb7\x69\xfa\x5f\x99\x62\xf1\xe4\x7d\x0b\x46\
+\xea\x5a\x2c\x14\x99\x7e\xf7\xb3\x32\x5c\xc2\xec\x3d\x3b\x4a\xa0\
+\x1c\x2b\x13\x5b\xea\x61\x8c\xcc\x42\xd0\xc8\x3e\xec\x72\xc6\xd1\
+\x7b\xc6\x5e\xd2\x3f\xed\x70\x9d\xcb\x9a\x3f\xfc\xe2\x07\xd4\xba\
+\x5f\xda\x17\x3a\x4a\xf6\xd3\x61\xc3\x42\x60\x0b\x50\xb6\xc8\xe0\
+\x87\x78\x26\xd7\x5d\xd2\x63\x58\x87\xea\x36\x7f\xe2\x53\xc6\xa0\
+\xfb\xa8\x33\xa4\x7f\xac\xcc\xfd\xfb\x9a\xc5\xcd\xd1\x0d\x51\x89\
+\x31\xe9\x71\xb6\xed\x54\x3c\x13\x47\xaf\x1c\x10\x83\x45\x77\xd3\
+\x1b\x95\xa3\xff\xbb\x8f\x07\x3f\x16\xbe\xcc\xef\xf8\xeb\x79\xb4\
+\x4b\xea\x5d\x12\x0f\x63\xd3\x3b\x1a\x61\xeb\x09\xeb\x38\x7a\x69\
+\xd4\x22\x72\x12\x24\xdb\x1f\x0a\xa7\xfc\xe7\xce\x37\x93\x77\xf2\
+\x5f\x2e\x9c\xfe\x0f\xe7\xcb\xd2\x70\x24\x62\x2c\x40\xeb\x91\x54\
+\x19\x5d\xb3\x0e\x7c\x5c\x3d\xdf\x4e\x50\xc2\xd1\xc2\x51\xfb\xda\
+\xc3\x5d\x51\x25\xdc\x92\xca\xe3\xff\xea\x83\x8b\x90\x72\x49\x1b\
+\xca\x44\x0d\x45\x58\x32\x9a\x49\x6b\xa1\xf4\xe1\xfb\x6c\x33\xe2\
+\x16\x8b\xf4\x76\x11\xf4\xd0\x45\xa1\x73\x75\x03\xce\x87\x99\x2d\
+\x1d\xb6\xc8\x5f\x34\xb8\xf3\x3b\x6a\xd4\x2f\x1c\xbd\x80\xaf\x8e\
+\x61\x9f\xc6\xb0\xde\xd3\xf7\xea\x73\x6f\x2e\x3e\xeb\xbf\x77\x63\
+\x75\xcf\xf6\x34\x95\x2f\x42\x3a\x9c\x48\x8c\xb9\xe3\xe8\xf7\x9e\
+\x9d\xe8\x70\x79\x9a\xc8\x8b\x96\xdf\x9a\x71\x46\xd4\x3a\x81\xb1\
+\x3e\xf7\xc0\x05\xa6\x9a\xd0\xf9\x4a\x19\xa5\xd0\xdc\xd0\x39\x76\
+\x4b\x78\x9b\xf0\x9e\xa2\x54\x89\xdb\x4e\x09\xf0\xa9\xd7\xdb\xff\
+\xca\xe8\x3b\xbd\x79\xa7\x4c\x67\xfc\x51\x63\x78\x7b\xf1\x8e\x9d\
+\xbc\xb9\xa2\xb3\xc4\x4b\xe8\x7c\x5e\x62\x84\x9e\xc8\x54\x89\x1e\
+\x67\x28\x4a\xbc\xc6\x7b\xa7\x84\x01\x72\xd3\x3f\xab\x4f\xda\xb7\
+\x3d\xbd\x6f\xf3\x4f\xea\xc1\x9b\xa0\x2c\x5f\x6d\xd0\xe0\x4e\x5a\
+\x5f\xaa\xab\x27\x58\x70\x8c\xfe\x51\xf3\xa3\x53\x5b\x69\x9a\xbe\
+\x5e\x2f\x69\x75\x9d\x79\xeb\x9f\xfb\x80\x10\xf4\x3c\xb6\x47\xef\
+\x02\x3b\xef\xe0\xe7\x5d\x3a\x18\x27\x25\xa6\x52\x4c\x53\x92\xc7\
+\xb5\xee\x2c\x0b\x9c\x3a\x3a\xd7\xe7\xb8\xa2\x28\x53\x67\x4a\x13\
+\x56\x8d\x38\xe1\x0c\xa8\x6d\x6f\xb2\x82\x07\xf6\x20\xeb\x84\xf0\
+\xa9\xf8\xa4\xff\x39\xfb\xdc\x78\x09\x44\x5f\x7b\xb0\x8e\xe1\x64\
+\x43\x11\x31\x88\x45\x6e\x5d\x63\x01\x62\x62\x49\xc3\x77\xc9\x1e\
+\x23\xcb\xe1\x53\x5f\x1e\xec\xf0\xad\x24\xfa\xf7\x62\x31\x77\x1d\
+\x79\xda\xed\x2f\xdf\x39\xef\x6d\x0c\x27\x73\x25\x70\xee\xed\x77\
+\xc6\x3f\x9a\x00\xaf\x76\xa0\x6d\x25\xe5\xcc\x7e\x76\x8f\x93\xd9\
+\xa7\xe1\xa5\x8b\xa0\x1d\x64\xe0\x74\x53\xe0\x42\xb6\xe2\x17\x94\
+\xd3\xef\x94\x09\xf1\x72\x7c\x3d\xe6\x9e\xc9\x81\x81\xcd\xb7\xce\
+\xac\x17\x8a\x4f\xf2\xd6\xe3\x63\xc7\xe7\x59\x65\x34\xad\xc7\x3c\
+\x21\x63\x18\x2c\xd3\x44\x88\xa8\xbc\x4c\xda\xe3\x3c\x12\xd7\xdb\
+\xa0\x7d\xaf\x49\x40\xee\xc6\x7b\xd5\x79\x7a\xe8\x4f\x9e\xd9\xbb\
+\x68\x7d\xca\xe6\xab\x5d\xe3\x91\x12\x01\x10\x91\xfb\x59\xe4\xc5\
+\xbf\xeb\x14\xca\x10\x0d\x95\xe9\xf9\xf1\x09\x31\xdd\x00\x14\xc6\
+\xad\x0b\x9e\x09\xac\x88\x94\x6f\x42\x1c\x23\x95\x5b\xcd\xe4\xea\
+\x9c\x3b\x22\x26\xb3\xa6\xef\xde\xc9\xf9\xf3\x8f\xb5\xa0\x01\x3b\
+\xfa\x22\xe7\xe2\xcd\x53\xd8\x98\x29\xa3\x10\x0e\x5d\x78\x47\x8f\
+\x8e\x43\x83\x8f\x1a\x8b\x50\x11\xdd\xad\x95\x06\xab\x2e\x3f\xff\
+\xab\x77\x5e\x7f\x74\x1a\x46\x6f\x9c\x96\x15\x7a\x65\x82\x72\xf2\
+\x2e\x54\x0e\xe3\x7a\x38\x28\x95\x08\xc0\x36\xd3\x07\x23\x00\xd9\
+\x34\x52\xa6\xdd\x71\xa8\x26\x8b\xe5\xc0\x0d\xee\x8e\xca\x0a\xac\
+\x93\xd9\x51\x4c\x29\x09\x7c\x84\xed\x72\xf7\xc0\x59\xec\x8f\x0a\
+\x0a\xee\x86\x2d\xf5\x09\x1d\xf6\x94\x30\x54\x77\xd5\x1b\x7c\x1d\
+\x17\x4a\x0c\x9a\x06\x22\xf6\xc3\x3b\xca\xd1\x2b\x6e\x7d\x6c\xd1\
+\x22\xeb\x2d\x5d\xea\xd9\x3b\xfa\x51\xa9\xd6\x2f\xb1\x79\x02\x76\
+\xb7\x07\x0d\x8e\xa4\x0e\xd3\x40\xcb\x9b\x13\x75\x6a\xfa\x74\x82\
+\x2b\xca\x80\x1e\x3d\xfa\x67\xb5\x01\x66\x1b\x69\x6b\xf0\x7a\x53\
+\x27\x0f\x5f\x1d\x31\x53\x31\x26\x18\xb6\xa7\xa0\x7b\x14\xad\x2f\
+\x3b\x5a\xbe\xea\x38\xa3\xf2\x89\x53\xa2\xe9\x92\xbd\x3c\xa1\xf8\
+\xf9\x75\x73\xa5\x68\x3b\xd5\x73\xa6\x20\xde\xc2\xae\x30\xf9\xb6\
+\xa7\xbc\xf5\xe2\x36\x2b\xab\x06\xe3\x8c\x7d\x58\x6f\x1a\x9f\xb4\
+\xbe\xf8\x3d\xa5\x1d\x9b\x36\x2d\xf4\x49\x86\x98\xdb\x9e\xb2\xa5\
+\x51\x7e\x54\xe3\xfa\x28\xf5\x44\x35\x4c\xc0\xb6\x88\xaa\x0c\x5a\
+\x0e\x22\x16\x15\xeb\xd9\xd0\xbc\x5e\xaf\x95\x70\x85\xad\x63\x48\
+\x3d\xf0\xea\xa0\x05\x46\xc5\x5b\x4e\xbc\xa0\x40\x9a\x5a\x7a\xaa\
+\x75\x34\xd7\x56\xbd\x9e\x4e\xa2\x25\x05\x0c\x28\x24\x58\x8b\x37\
+\x98\x52\x9c\xbc\x76\x01\xbd\x91\x46\x42\xd4\x09\x7c\xbd\x6c\x6b\
+\x95\x8f\x0b\xa0\x43\x7a\x34\x4b\xe2\xc9\x15\x50\x78\xb5\x4f\x8d\
+\xe5\x74\xdd\x79\x32\x46\x0a\xdf\x69\xc8\xea\xf5\x4b\x52\x0e\xb5\
+\xb7\x3e\xc5\xd7\xb3\xa9\x31\xbe\x5e\x82\x26\x85\x8a\xe0\x93\x98\
+\xa8\x36\x4d\x26\x64\x55\x91\x2c\x2e\x3b\xaa\x16\x9f\x17\x4a\x63\
+\x7a\xad\xd7\xab\xac\xd0\xd5\xe8\x53\x6f\xea\x04\x2e\x54\x18\x4a\
+\x36\xfd\xd1\x7c\x7e\xbd\xc2\x57\x3b\x88\x75\x44\xf9\xd3\x1e\xbc\
+\x1c\x3e\xa8\x9b\xd9\x89\xa9\x59\x67\xbd\xa3\x58\x28\xc5\xd7\x2b\
+\xa3\x4a\x06\xbb\x63\x2b\x51\x25\x7e\xd1\xaa\xe1\xe1\xd5\x82\x67\
+\xca\xb0\x22\x87\x78\x11\xd9\x13\x2f\x6b\x2b\xb6\x89\xaa\x2d\xce\
+\xd0\x3d\x89\x29\x75\x97\x33\xc6\x33\x51\x63\xee\xb2\x79\x27\x73\
+\xa0\x76\xd1\xfc\x7a\xd4\x9e\x0d\x15\x30\xb8\x13\x11\x28\x5b\xf0\
+\x32\x0d\x34\x8d\x67\xe6\x9e\xb7\x7e\xdb\x29\x21\x49\x4a\x17\x61\
+\x5a\xaf\xf7\x0b\x29\x95\xe7\x4b\x47\xca\x00\x69\xda\x86\x0c\x10\
+\x2e\xc7\x53\xd9\x0e\x1a\x86\x6a\xbd\x5e\x7a\xdb\x31\x50\xad\x94\
+\xd0\xcc\xb7\xf7\x33\xae\xd7\x9b\x90\x5a\x15\xf1\xf5\x5a\xc1\x33\
+\xe9\x56\x86\x50\x5b\xb8\x1f\xc8\x93\xcb\x0d\xcd\x40\x18\xca\xec\
+\xa9\x99\x12\x13\xf3\xe6\x3a\xbe\x9e\xce\x66\x14\x5f\x2d\x69\xf6\
+\x7e\xfa\x36\x7c\xeb\xc3\x8f\xf0\x4c\xf4\x40\x2c\x92\xcd\x53\xcc\
+\x3a\xa0\x16\x89\x42\x15\xcd\xc2\xff\x7a\xf4\x55\x6e\x7c\xbc\x22\
+\x9d\xd6\xeb\xf3\xfc\xa8\x92\x50\x9e\xbc\xac\xf6\x89\xbc\x12\x57\
+\xaf\xd7\x57\x69\x90\x93\x77\x03\x26\x1c\x07\x61\xf9\x72\xec\x69\
+\x10\x2a\x13\xaf\xd0\x22\xf1\x9e\xd0\x26\x93\x50\x8f\x7f\x32\x0f\
+\xdf\x3e\xf6\x57\xa7\x9d\x65\xe4\xed\xa8\x52\xde\x9b\x97\x95\x18\
+\x0f\x57\xfa\xdd\xd4\x1f\x65\x4f\xd9\x4e\x3f\x52\xc6\xab\x92\xd0\
+\x7f\xc4\xad\x64\x6e\xb0\x29\x87\xce\x0c\x94\x80\x24\x17\xcb\xe4\
+\xed\x13\xb8\x50\x3b\xf7\xf6\xfc\x17\x99\x71\x88\x1d\x8d\xb8\x15\
+\xb2\xc6\x02\xe5\x7f\x00\xc6\xe8\x29\x48\xf1\x9e\x42\x5a\x8d\x96\
+\xcf\x95\x3d\x45\x58\x48\xd1\x7b\x3b\x0a\x54\x40\x6f\x28\x64\xbe\
+\x1c\xb9\xbc\x4e\x38\x25\xa3\x00\xc4\xec\x2f\x42\x76\xfe\xd3\x06\
+\x27\x3a\x24\x94\xc2\x9d\x16\xad\x7e\x9c\x31\x22\xea\xd1\x63\xee\
+\x13\xb2\x2f\xc7\x8d\x8c\x4e\xc5\xbc\xe8\xc3\x2c\x08\xb1\xed\x59\
+\x8c\x88\xa9\x96\x74\xe7\x61\x42\xa0\x18\xd9\x4a\x99\xc0\xaa\x3c\
+\xe3\xa3\x03\x5b\x7a\x9e\x12\x62\x11\xec\x53\x38\xa9\xe5\xff\x47\
+\x8a\xa8\x96\xa8\x5a\x04\xd8\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x0f\x6b\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x01\xf4\x00\x00\x00\x4b\x08\x03\x00\x00\x00\xb1\xe3\x85\xac\
+\x00\x00\x00\x42\x50\x4c\x54\x45\xd5\xd5\xff\xf6\xf7\xff\xda\xdb\
+\xff\xef\xef\xff\xdf\xe0\xff\xe7\xe7\xff\xea\xea\xff\xea\xeb\xff\
+\xeb\xeb\xff\xdf\xdf\xff\xf7\xf7\xff\xfa\xfb\xff\xf3\xf3\xff\xd7\
+\xd7\xff\xff\xff\xff\xe6\xe7\xff\xdb\xdb\xff\xe3\xe3\xff\xd5\xd6\
+\xff\xf2\xf3\xff\xee\xef\xff\xe5\xe6\xff\x96\xf6\xba\x85\x00\x00\
+\x0e\xe4\x49\x44\x41\x54\x78\x5e\xed\x5d\xd9\x92\x24\x37\x08\x1c\
+\xa4\x3a\x8f\xbe\x66\x76\xff\xff\x57\x0d\x24\x14\x52\xd7\x4e\xd8\
+\x0f\x23\x47\x6c\x84\x52\x05\xd5\xf6\x9b\x9d\x83\x0e\x20\x55\x1f\
+\xf7\x1f\x45\xc7\x7e\xdf\x77\x76\xf7\xed\x4e\xf7\x6d\xdf\xb7\x3b\
+\x0f\xc1\x2e\x8e\xb6\x63\x3b\x88\x87\x81\x32\x2d\x94\xf9\xf9\xca\
+\x05\x96\x3c\x2f\x6a\xcb\x3c\x09\x1e\xd3\x43\x9e\x71\x1c\x1f\x8c\
+\xd7\xe3\x35\xb2\x29\x56\x19\x70\xc3\xb0\x0e\x6c\x6b\x5a\x13\x3f\
+\xcf\xe7\x73\x65\x4b\x29\x3d\xd3\x2d\xdd\x6e\x1f\xec\x3f\x3e\xf0\
+\x30\x7e\x94\x80\x8e\x1d\x9e\x84\xf5\x8d\xf9\xdf\x95\x6d\xf1\x02\
+\x12\x53\xde\xc1\xbc\x72\x9e\x29\x33\xc0\xfb\xaf\x99\xc9\x16\xd6\
+\xf3\x22\x98\x95\x72\xc6\xfc\x98\x9d\xf4\x51\x59\x07\xed\x41\xbd\
+\x93\x9e\xd6\xf5\x29\x8e\xc9\x06\xe9\x37\x19\xcf\xf4\x71\xbb\x81\
+\xf0\x06\xa4\xf7\x30\x87\x17\xe3\x58\xdf\xc5\xf1\x6b\x33\x10\xf3\
+\x6d\xd1\x2e\xc8\x94\xd9\xd3\x42\xcb\x97\xc5\xfa\xfc\x4b\x1c\xa2\
+\xfc\x8f\x91\xfe\x1a\x65\x54\x94\xaf\xaf\xd7\x60\xd1\x9e\x56\x01\
+\x07\x79\x5a\x11\xe9\x37\xe6\x3b\xdd\xf0\xdc\x3e\x38\xda\xd9\xb5\
+\x21\xbd\xc7\xfa\x2e\x41\x2e\xb1\xce\xcf\xae\xe3\xee\x91\x7e\x90\
+\x71\x4e\x94\x65\x1c\x59\xc3\x3d\x30\xcf\x12\xe7\x32\x9c\xf4\x49\
+\x49\x9f\x10\xe9\xc6\xbb\xd1\xbe\xca\x33\x30\xe9\x80\x44\x7a\x7a\
+\x1a\xe1\x6e\xe9\x79\xbb\xd9\x14\xaf\x9c\x37\x20\xbd\x83\x84\x6d\
+\x21\x9f\xd8\x8c\xf3\x3d\xd6\x74\xe7\x1c\x91\x9e\x17\x3a\x98\xf8\
+\xaf\xe0\x9c\x1f\xb0\xee\xd3\x3b\xc6\xc8\xcc\x0b\xe9\x55\xa4\xaf\
+\x6c\x03\x48\x1f\xd8\x56\x5d\xd3\x95\x78\x7e\x40\xba\x32\xfe\x94\
+\x18\x67\x28\xeb\xb7\x9f\x26\xbd\x63\x87\xdb\x09\x3b\x38\x59\xd5\
+\x85\x79\x00\x6b\x3a\x06\xf6\x71\x6c\xf9\xf0\x35\x3d\x38\x9f\x75\
+\x76\x8f\x48\x9f\x46\x79\xc6\xc7\x0b\xac\x57\x91\xce\x9c\x8b\x07\
+\xf1\xe0\x5c\xe7\x77\x4c\xef\x29\xdd\x94\xf7\x60\x9d\x9f\x1f\x26\
+\xa0\x53\xbe\xcb\x20\x9d\xde\x39\xde\x69\x33\xec\x14\x6b\x7a\xec\
+\xde\x25\xda\x63\x4d\x37\xcc\xc5\xee\x1d\xd0\xa9\x5d\x4d\xf6\x71\
+\x3a\x04\x60\xdd\xa6\xf7\x97\xd0\xad\x90\x30\x07\x12\x66\x77\x9b\
+\xdf\x99\xef\x26\x6b\x7a\xe7\x1c\x26\x5e\x28\x67\xf3\x75\xdd\xd7\
+\x74\x1e\x94\x6d\x8e\x97\x20\xc7\x16\x1e\x98\x84\x70\x7e\x62\xf7\
+\xce\x78\xf0\x33\x8a\x8d\x16\xe9\xfc\xc4\xee\x5d\x23\x7d\x78\xad\
+\x80\xed\xde\x13\x3b\x90\xce\xb4\x4b\x98\xa7\x9b\x20\xf9\x9a\x3e\
+\x01\xf3\xbc\x00\x59\xc7\x9c\x27\xfb\xb5\xe4\x1a\xf8\x67\x6c\x41\
+\xf8\xb1\x5d\xe8\xc2\xe3\x50\x6c\x78\x9d\xab\x57\x3e\xb6\x12\x98\
+\xf3\xf8\xa1\x8d\xa3\x00\xef\x4d\xd7\x40\x71\x9b\x9c\x71\xe5\x8d\
+\xb5\xb1\x0d\x3a\x0a\xd2\x03\x33\x3f\xe0\x5c\x80\x3f\x82\x80\x10\
+\x2c\x3e\xfb\x5f\x2a\xce\x1e\x01\x61\x1b\x9e\x0e\xda\xc1\xfe\x76\
+\xc1\x5d\x6c\x07\xe5\x4c\x36\x69\x3a\x83\xdf\x08\x16\x62\x93\x7f\
+\xe3\x53\x66\x03\x74\xd2\xa7\xe0\x3b\xcb\x5b\xa9\xce\xf3\xac\xaf\
+\x12\x87\xbd\x41\xb8\xc4\x37\x58\x3f\x00\xda\xd8\xf0\xd6\x41\x1b\
+\x50\x6c\x65\xee\xf8\x67\xb8\xfb\x1d\x26\xf1\x4d\xf8\x4d\x4e\xb9\
+\x1f\x79\xf1\x6a\x86\x4e\xfa\x24\x9c\xcf\x59\xdf\xba\xb6\x30\xa6\
+\xe0\x5d\x7e\x21\x75\x28\xac\xf3\x0f\x7e\x1f\xfa\xeb\x08\xe4\x63\
+\xf3\x41\xf8\x4d\x94\x83\x74\x65\x9b\x30\x9b\x6b\xc4\x13\x29\xf5\
+\x32\x24\xb4\xf5\x07\xf1\x60\xd7\x82\xec\x8e\x9f\xdd\xc8\x75\xec\
+\x18\xd8\x98\x60\xc7\xe2\x3b\xb9\xcc\xbf\x62\xa7\xa3\x20\x2c\x95\
+\xb4\x2c\x6c\x88\x2f\xc6\x82\xcd\xdc\x54\xec\xde\x1f\x23\x36\x72\
+\x91\x9b\x79\xd8\xde\x5d\x73\xef\x76\x46\x5f\x93\x3d\x29\x79\xee\
+\xfd\xa6\xc7\xb6\x27\xdb\xc7\xf3\x23\x35\x4d\xc3\x76\xea\xc9\x6c\
+\x43\x36\x2e\x56\x38\x9c\xd3\xe9\xf0\xdd\x3b\x61\x8f\x54\x16\x5b\
+\x2c\x33\x63\xa4\x33\xcf\xec\x41\x7a\x9c\xd3\x1d\xab\xda\xc0\x76\
+\xee\xde\x93\xba\x74\xe6\xde\x8d\x79\x1c\xd9\x5a\x64\xe4\x3a\x34\
+\x2d\x63\xb9\x77\xec\x4f\xad\xe6\x42\x1b\xc3\xcf\xe9\x9e\x7b\x17\
+\x4f\x4c\xbd\x63\x0e\xe2\x05\x73\x04\xfa\x58\xe5\xde\x03\x5e\x65\
+\x53\x73\xe2\x53\xe4\xde\xc5\xf0\x30\x9a\xe4\xde\x3b\x88\x0d\xe7\
+\x0e\x75\x98\xd9\xeb\x73\x7a\x99\x7b\xb7\xf3\x4f\xce\x14\xbc\x6b\
+\x8d\x6d\x2e\x48\x7f\x48\x72\xa6\xce\xbd\x3f\xca\x44\x2c\x58\x2f\
+\xcf\xe9\x4c\x38\x22\x5d\x89\xe7\xa3\x3a\xd0\x22\xf7\xde\xb1\xbb\
+\x27\xf1\x1b\xdb\xbf\xd4\xd3\x17\x1e\x5f\x19\x83\xf1\xeb\x2d\x0f\
+\x3b\xcf\x73\x44\xfa\x03\x69\x58\xb1\xd7\xeb\xf7\x6f\x4b\xcc\xac\
+\x2f\xa7\x7c\x18\x12\xc2\xbc\x5a\xd3\x51\x5d\xfd\x3c\x59\x6f\x44\
+\x7a\xe7\x5d\x52\x4c\x36\xb3\xff\x5b\x3d\x9d\x07\x18\x07\x9c\x73\
+\xcd\x92\xd5\xd3\xfb\x14\x4d\x14\xec\x02\xeb\x8a\x42\x1b\xa3\x5c\
+\xd3\xad\xca\xa6\xc9\x38\x75\x40\x9b\x8d\x5c\xcf\xbd\x47\x94\x5b\
+\xce\x69\xfb\xae\x9e\x4e\x19\xb9\x77\xe1\xbc\xce\xbd\x83\xf7\xa8\
+\xa7\x8f\xbe\x7b\x37\xc6\x7f\x47\xc5\x45\x06\xca\xaa\x8a\x54\xaf\
+\xe9\xfc\x28\xe3\x9f\xc5\xfc\xfe\xd9\x8a\xf4\x1e\xea\xc8\xbd\x7f\
+\x5f\x4f\x07\xef\xc8\x7a\x44\xac\x4b\x80\x2b\xe3\x58\xd4\x27\xc7\
+\xe8\x4d\x14\x0f\xc5\xef\x32\xd4\x6d\x78\x3d\x3d\xbd\xd2\x1a\xeb\
+\xb9\x45\xfa\x1a\xab\x7a\x13\xd2\x3b\xe9\xc4\xb6\xe9\x60\xae\x7d\
+\x8e\xa7\xa2\x9e\x4e\x45\x0e\xb3\x9e\xdd\x79\x78\x2d\xfd\x0c\xf4\
+\xc7\x3c\x71\xa4\xb3\xe9\xb2\xce\x28\xf8\x1e\x94\xef\x24\xbe\xae\
+\xa7\x6b\x7b\x1c\xea\xe9\x4a\xbb\xae\xe7\x0d\xce\xe9\x1d\xbb\x97\
+\xd9\xb0\x77\xd7\xf4\x32\x69\xfe\x71\x83\xed\x79\x23\xcd\xcd\x90\
+\x4c\xed\xb4\xa0\x8f\xc2\x76\x72\x53\x16\x4c\x1a\xe9\xec\x8d\x74\
+\x9f\xe0\x1f\x4a\x3a\x12\x33\x30\xc1\x60\x47\x36\x85\xae\xea\x5e\
+\x4f\x47\x59\x35\x25\xdf\xc9\xa5\x14\xc9\x99\x09\x98\x97\x05\xa9\
+\xd8\x09\x96\xc5\x66\xf5\xfc\x3b\xe7\xd3\xc8\x72\xb2\x07\xbf\x49\
+\x72\x49\x3a\x55\xa9\x3f\xc4\x67\x36\xf6\xba\x72\x65\x92\x42\x4b\
+\xde\xd9\x9d\x6f\x2a\x4c\xba\xc8\xf8\xd9\x50\x6c\x81\x69\x2d\xda\
+\xff\xc7\x01\xf4\x5f\x4b\x2e\x7d\x92\xf9\x6f\x08\xd2\x03\x59\x4d\
+\x93\x04\xd1\xb7\x55\x62\xa1\x6c\x75\x60\xab\xb5\xc9\x0b\x20\x31\
+\xf5\x36\x93\xc1\xd3\xa5\xbe\xe6\x53\x1f\xce\x34\x9e\xb7\x44\xc7\
+\xc9\xc9\x3f\x42\xa7\x31\x7a\xc1\xe5\x5c\x4f\x72\x59\x4f\xbf\x02\
+\x89\x05\x78\x79\x88\xad\x00\xc8\xb6\x2a\x9b\xfe\x0c\xc6\x81\xa8\
+\xb6\x59\x9b\x01\xc8\x16\x92\xc1\xba\x2d\x90\x0d\x2b\xeb\x9d\x74\
+\xd0\x3e\x63\x76\xcf\x66\x5e\x63\x8b\x19\x7e\xc1\xbc\x8e\x5f\xf2\
+\xdb\x6a\x6c\x19\xb3\x3c\x3b\xab\xad\x09\xeb\xa8\xb1\xed\x79\xdb\
+\x48\x3c\x83\x48\x1c\xaa\x6c\x62\xcc\xb5\xfe\xc2\xec\xce\xcf\x2e\
+\x6f\x79\x29\xf9\xf4\x57\x31\xde\xab\x6c\xbd\xfb\x1d\x7f\xcd\xf6\
+\x37\xee\xbb\x9a\x83\x34\x12\x32\x91\xac\x89\x1a\x25\xb4\x2c\xe7\
+\x3e\x6e\x16\x6f\x3b\x39\x17\x3b\xa8\x63\x58\x72\x46\x53\xb0\xfc\
+\x00\xb1\x75\x4f\x2b\x80\x8c\x1c\x12\xb1\xc8\xbd\x27\x6d\x8c\xc4\
+\xd6\x1d\xfe\xa7\x09\xe8\xe7\x35\x14\x5d\x4c\xd1\x84\x07\x59\xb9\
+\xb2\xe2\xa2\xf8\xbe\xef\x7d\x5e\xea\x1e\x39\x7e\x81\x74\x10\x2e\
+\xa3\xca\xbd\xaf\xea\xa2\xd8\xa2\xa7\xf4\x90\x35\x99\xb4\x29\xb5\
+\xca\xbd\x77\xf8\x1e\x14\xbb\xd2\x6d\x8f\xce\xc8\xa8\xa7\x1b\xbe\
+\xeb\x7b\xaf\xb5\x6c\x28\xaf\x22\xc8\xd5\xd5\x0a\x17\x88\x5b\xd8\
+\xa2\x9e\x1e\x5a\x36\x61\x3f\xa1\xbe\x26\x68\x58\x65\xeb\x7d\xef\
+\x42\x3c\x1e\x64\xe3\x2e\x7d\xef\x60\xfe\xda\xf7\xbe\xe4\xfc\xa7\
+\x6e\xd8\xc7\xe4\x2d\xd0\x4c\xf7\x58\x74\xc3\xae\xa7\x94\x6d\xb8\
+\xd4\xd3\x43\xdd\xf2\x2c\xfb\xde\x3f\x7f\x9a\xf4\x9e\x9c\x71\x1d\
+\x9b\x98\x32\x4e\x45\x3d\x9d\xa2\x9e\x0e\xfc\xb1\xef\xdd\xa2\xbc\
+\x10\x30\x22\x23\xe7\xd9\x19\x70\xee\xb8\x94\xd3\x8b\x1e\xe8\xf4\
+\x34\x2d\x5b\xd9\xf7\xde\x86\xf4\x1e\xea\x5a\x65\xd3\x73\xc9\xf7\
+\xf5\x74\xf0\x1e\x7d\xef\x45\xe7\xf1\x82\x11\x79\x58\x61\x1c\x91\
+\xfe\xe2\x17\x5b\x10\x0e\xc7\xf6\x4d\x3d\xfd\xc6\x3f\xa2\x87\xa2\
+\x59\xa4\x77\xd2\x23\xd7\xe4\xeb\xb9\x81\xe8\x40\xfe\xdd\x38\xcf\
+\x59\x1d\x31\xc3\x91\x7b\x77\xc1\x43\x31\xbd\x83\x74\x8b\x74\x4d\
+\xc5\x7e\xaf\x4f\x4f\xb5\x3e\x1d\xcd\x52\x1f\x09\xe2\xf4\x56\x6b\
+\x7a\x5f\xd1\x49\x4d\x13\xcc\xf7\x4d\x5d\x28\x18\x7d\x3d\x07\xe7\
+\xe2\xa1\x23\x10\x03\x42\x9d\x5e\xd6\xd3\x99\x79\x44\x7a\x74\xce\
+\x5c\xf5\xe9\x6b\x7a\xaf\xa7\x0b\x70\x60\x0b\xce\x9b\x91\xde\xbb\
+\x67\x78\xa0\x96\xee\x1d\xfe\x78\xd9\xba\xee\x9b\x77\x21\x9b\x34\
+\xb3\xe9\x98\x8b\x1e\xb9\xd9\x54\xab\xde\x23\x87\xc3\xfa\x6b\xbc\
+\xe8\xd3\x11\xed\x86\xd7\x59\x4f\xf7\x9e\x48\xb8\x36\xfa\xf4\x0e\
+\x57\x66\x10\x8a\x07\xbb\x86\x7a\x71\x4e\xcf\x16\xe5\xfa\xc6\x31\
+\x5d\x94\x03\xba\x94\x13\xb4\x6c\xfa\x7b\x42\x39\x7d\x3a\x31\x5a\
+\xe3\xcc\xf8\xba\x34\xc3\x96\x7c\x87\x6a\x15\xe2\x45\xc6\x13\xe9\
+\x19\x7d\x3c\x37\x53\x15\x5c\x26\xcb\xbd\x87\x96\x6d\xae\x94\x0e\
+\x53\xf6\x2e\xbe\x85\x2c\x0b\x4b\x8b\xe9\x1b\xe4\x8d\x5f\x50\x36\
+\x65\x36\x7d\x18\x59\x3d\x40\xa1\x70\x21\x8a\x53\xec\xee\x55\x36\
+\x79\x21\x4c\x5c\xec\xb0\xc3\xfd\x18\x3a\x2e\xa4\x33\x72\xa1\x65\
+\x9b\xc5\x09\xf9\x05\x0e\xa9\xc0\xa1\xd6\x42\x78\x65\xdf\x8c\xea\
+\x1b\x75\x35\x2b\xb8\xf0\x6f\x4f\x43\xd6\x40\x51\x8d\x1d\x66\x41\
+\x71\x62\xca\x2f\x89\xc3\xef\xff\x05\xbd\xca\x16\x5a\x36\xb6\x77\
+\x7c\xd9\xfa\x43\x47\xc6\xc8\x11\xdf\xa8\xa3\x97\x2a\x46\xd4\xd0\
+\x0f\x04\x75\x09\x21\xd9\xb5\x6c\xc4\x86\xcb\x59\xc4\xe0\x37\x17\
+\x2f\xb6\x97\x36\x75\xd2\x01\x68\xd9\x30\xec\x55\x01\x5a\x36\x0c\
+\x53\x2a\x1f\x00\x65\xe5\x9b\x0e\x44\x78\xde\xf3\x81\xdc\xa3\x91\
+\x4e\xae\xf3\x61\xb8\x96\x4d\x6c\x27\xaf\xa7\x8b\xe9\x10\x6c\x6c\
+\x7f\x89\x6e\xb5\x57\xd9\xfa\xfe\x9d\xde\x7b\xe4\xbc\x6d\x08\x19\
+\xb9\x4c\xe7\x39\x3d\x17\x19\xb9\x5f\x93\x9f\xd3\x97\x8b\xc2\xc5\
+\x1b\xe4\x90\x7a\x67\xe7\xb0\xbc\x3b\xbf\x79\x58\xdf\xbb\x6f\xe6\
+\x90\x8e\x93\xf4\xbb\x0b\x9b\xc4\x5a\x90\xde\x13\x72\xea\xd0\x08\
+\x76\x07\xeb\x40\xd9\xf3\x5e\x9f\xd3\x81\x5f\x9e\x7b\xcf\xf5\xe5\
+\x81\xd1\xf7\x7e\xd9\xbd\x0f\xc3\x4b\x86\xe6\xe2\xe2\x1e\x39\x88\
+\x5b\x40\xba\xeb\x5b\x8c\xf5\x56\xa4\xf7\xbe\x77\xbb\x5d\x6a\xdb\
+\x91\x9c\x8b\xdc\xbb\xf1\xfe\x76\x4e\xbf\xf4\xbd\xcf\xcb\x9c\x6b\
+\x59\x93\x0b\x18\x85\x77\xa8\x56\x1d\xab\x8f\xb8\x73\x86\xf3\x71\
+\x48\xc3\x2a\x6e\xb8\x68\xa8\x75\x95\xad\xe7\xde\x37\x3f\xa7\xa3\
+\xfb\xd9\x73\xef\xbe\xc3\x29\xce\xe9\x39\x38\x8f\xbe\x77\xf6\x0a\
+\x50\xce\x66\x7d\xef\x3c\xca\xc2\xea\xea\xc9\x77\xc7\x79\x8f\x5c\
+\x3a\xef\x9c\xb9\xdd\xd8\xb7\xd3\xb2\x75\xec\x30\x72\x95\x0b\x69\
+\x8c\x57\x0a\x97\x4a\xcf\x26\x5b\x62\xfa\x53\xdf\xfb\x8c\x84\x5c\
+\x5c\x34\xe4\x55\x36\x49\xc1\x56\xb4\xf3\x03\x7d\x3a\xac\xae\xa7\
+\x43\xbc\x28\x9c\xab\x42\x5d\xa2\xbd\xcb\x9a\x9a\xb0\x8e\x7b\x53\
+\x38\xca\xd9\x61\x4d\xc7\xa8\x14\x2e\x5e\x56\xfd\x22\xeb\x7a\x0f\
+\xe6\x17\x10\xef\xa4\x3f\x66\xb6\xa8\xb2\x5d\x72\xef\x43\xe8\xd3\
+\x87\xa1\xca\xbd\x3b\xe9\x89\x4d\xa8\x17\xba\x3f\x1b\x92\xde\xa7\
+\x77\x35\xe5\x1a\x3e\x04\x8c\x88\x72\x31\x88\x17\x2b\xc6\xab\xdd\
+\xbb\x47\x7a\x90\x2e\x0e\x1b\x39\x36\x60\x88\x82\xfa\x90\xde\xeb\
+\xe9\xb0\xe4\x8a\xd5\x67\x2b\x01\x63\xa7\x9c\xe4\xb5\xfb\x9a\x8e\
+\x19\x1e\xe6\x33\x3b\x19\xe7\xf4\xc5\x00\xe7\x62\xe0\x3c\xd6\xf4\
+\xe9\x84\x57\xd9\x94\x70\x71\x8e\xe1\x1b\x7d\xba\x13\x0e\xf9\x22\
+\xc7\xfb\x53\x58\x6f\xd4\x18\xd9\x49\x47\x05\xc1\xef\x7b\x67\xaa\
+\xb5\xcd\xfb\x04\xf2\x56\x27\x4c\x41\xe0\x88\xce\x99\x7a\x23\xe7\
+\xdd\xb0\xa5\xa4\xc9\xf5\xe9\x75\xeb\x4c\x4a\xa5\x3e\xfd\x5d\xa9\
+\xdc\x6a\x23\xd7\xa7\xf6\xb8\xef\x9d\x4c\xcb\xb6\x6d\xea\xf7\x7c\
+\x88\xa1\x0f\x9a\xb4\xf9\x99\xc4\x84\x68\x8d\xf4\x49\x09\x57\x35\
+\xdb\x3c\x95\xc9\x19\x36\x24\x67\xae\x0a\x75\xe1\x3d\x79\x0f\x74\
+\xac\xe9\x02\xbb\x94\x80\x17\x73\xa3\xdd\x0a\xea\x55\x1a\x56\x9c\
+\x6b\x1e\x50\xe1\x43\x65\xad\xf4\x4b\x16\x67\x35\x36\xbb\x4b\x8e\
+\x32\x65\x54\xd9\x16\x68\xd8\x8e\x83\xd8\x23\xf7\xb4\x6f\x6c\xc8\
+\xc2\x8b\xdd\xed\xbf\xff\xd4\xb2\x6d\xa4\xe9\x2b\xcf\xbb\xb3\xdb\
+\xed\xb4\xcb\x1e\xef\x86\xe8\xb9\xf7\xa9\xa8\xb9\x54\xb9\xf7\x39\
+\x97\x20\x1e\xd9\x55\x4d\xae\xb1\xa6\x23\x40\xa1\x64\xb3\x93\x29\
+\xbd\x5f\x22\xe8\x1a\x36\x7e\xe3\x89\x2a\x1b\x3f\x74\x76\xa0\xec\
+\x1e\x42\x2d\xd0\x4b\xab\xc0\x1c\x7c\x9b\x3c\x3e\xc3\x3b\x48\x2d\
+\xda\xf4\x85\x74\x33\x52\x03\xe2\xc6\x48\x63\x7d\xab\x81\x3c\x15\
+\xf8\xd6\x41\xe2\x2c\xd6\xd1\x4b\x4a\xec\x83\xfb\x06\xe8\xa4\x23\
+\xd6\x31\xc3\xcf\xa8\xb3\x99\xca\x46\xcd\xfd\x22\xb6\xe0\xd7\x71\
+\x2c\xaa\x62\x5b\xec\xc6\x48\xb1\x83\xb2\xdf\x03\x4c\x6a\x1b\xd4\
+\x6c\x0a\xbc\xa1\x63\x93\x37\x33\x0e\x2d\x5b\xa8\x95\x77\x36\xd0\
+\x2e\xa0\xbf\x81\xed\x5e\x65\xeb\xd8\x31\xb0\x7b\x67\xc3\x2e\x86\
+\x47\xde\x37\xca\x3b\x99\x92\x0d\x5a\x36\xb1\x42\xcb\x06\x5b\xf2\
+\x6c\x11\x08\x20\x25\xf7\x50\x03\x5e\x27\x92\x9f\xd8\x8a\xdc\x3b\
+\x76\xef\xb0\xdb\x99\x7d\x6f\xaa\x70\xe9\xa4\x17\x97\x0d\x6d\xdb\
+\x7b\x95\x6d\x0b\xad\x03\xf2\xee\x97\xbe\xf7\x45\x5d\x34\x46\x8a\
+\xb1\x03\xe9\x2f\x3c\xd7\x7a\x8b\x21\xc9\x03\x97\xe2\xc8\x26\x8f\
+\xa2\xe9\x8d\x91\xbd\xef\x1d\x37\x99\xdb\x5e\xf5\x92\x7b\x37\x44\
+\xff\x51\xd5\xf7\x7e\xd5\xb2\x8d\xd6\x19\xf9\x3a\x2f\x0f\x54\x0c\
+\xe6\xd0\x04\xeb\x61\x5e\xdd\x2e\x65\xca\x55\xb4\x45\xb6\x8e\xf4\
+\xde\xf7\xce\x5c\xbb\x6d\x97\xdc\x3b\xa2\x5d\xb7\x45\xc2\xf9\xa5\
+\xef\x3d\xbf\xab\x56\x47\x41\x7c\x96\x8d\x3d\x08\x1f\xca\x48\x8f\
+\x7a\x3a\x90\x54\xe2\x82\xc1\x87\xf5\x76\xc9\x99\x9e\x9c\x11\xd0\
+\xee\x79\x58\xda\xdf\x72\xef\x31\xbf\x53\x16\xa3\x6a\x7e\x9f\xdf\
+\xb5\x6c\xe3\x24\x0e\x78\x08\xe3\x9a\x88\xf5\x50\xff\x8d\x46\x0a\
+\xe3\x7d\x88\x7a\x3a\x48\x7f\x5a\xd3\xcc\x67\xfa\x4c\x6d\xd7\xf4\
+\xfe\xe5\x1e\xbb\x47\xae\x54\xb7\xa8\x95\x51\x4e\xc6\x37\x46\x5e\
+\xa8\xe0\xfc\xa2\x65\x1b\x2d\xd2\x79\x44\xa0\x87\x98\x0d\x64\xa7\
+\x61\x88\x7a\xba\x91\x8e\xa2\x2a\x87\xfc\xfa\xe9\x71\xde\x88\xf4\
+\xbe\x77\x8f\xc6\xee\xcd\x39\xb7\x48\x0f\xce\x11\xe9\xc6\x79\x66\
+\xbb\xce\xef\xbe\xa6\x8f\xe7\x8d\x91\xf2\x44\xa0\x5f\xd4\x0e\xd7\
+\x7a\x3a\xae\x92\xfb\xe4\x50\x17\xdf\x3e\xd2\x7b\x79\x15\x92\x65\
+\x0c\xdf\xbd\x57\x5a\xb6\x7c\x78\xb4\x57\xf7\xbd\x97\xdf\x65\x63\
+\xaa\xc5\xf3\x1b\xbb\xf7\xd0\xa7\x03\xab\x8d\xaa\xca\x66\x4d\x72\
+\xc8\xbe\x4b\xa4\x33\xeb\xb7\xf4\xd9\x32\xd2\xfb\x7d\xef\xe8\x93\
+\xb3\x1b\xd3\xaa\xdd\x3b\x86\x21\xfb\x70\xcc\xd5\x77\xd9\xae\xf7\
+\xbd\xbf\x34\xd2\xe5\x16\xe8\xd7\xb5\x9e\x9e\xd6\xe1\xaa\x4f\xc7\
+\x4e\x8e\x29\x57\x7c\xf2\xf8\x79\xd2\xfb\x17\x1d\x00\x66\x1b\xba\
+\x0d\x21\x9e\xde\x3b\x62\x61\xc0\xe5\xbe\xf7\xea\x26\x0a\xc1\x58\
+\xde\xf7\x3e\x62\xfb\x0e\x0c\x55\x3d\x3d\xbe\xaa\x0c\xc2\x15\xd0\
+\xa7\xcb\xec\x0e\xd6\x2f\x5a\xb6\xf2\xbb\x6c\xfa\xf6\x17\x0f\x87\
+\x7f\x82\x42\xdf\x4b\x3e\xb5\x6c\x8e\x0d\x2f\xa2\xd0\xb2\x1d\x3c\
+\x02\xa5\xce\x01\xfa\x3e\xfc\xf0\x0a\x1b\xf2\xb0\x3c\x14\xbb\x3d\
+\xcd\xd0\x0b\x2e\xf5\x77\xd9\xa0\x8e\xbf\x02\xb5\x37\x5c\x14\xe9\
+\x5a\xb6\x12\xae\xba\x87\x96\x8d\x30\xaf\x01\xd1\x2f\x86\x14\x65\
+\x7c\x97\xed\x4e\x20\x5f\xa3\x03\x34\x6f\xff\x57\xee\xbd\xcb\x9a\
+\x2e\x5a\xb6\x77\xde\x43\xcb\x46\xf2\xdb\xdb\xf6\x05\x54\x7d\x97\
+\x0d\x5a\xb6\xe3\xd4\xb2\xed\x88\x71\xc0\xd6\xba\x1d\x65\xd5\xb8\
+\x31\x92\x47\x68\xd9\x4c\xb9\xda\x94\xf9\x4e\xfa\x5c\x7d\x97\x8d\
+\x6d\x62\xe7\xd5\x36\xab\xad\x55\x5a\xb6\xc5\xbf\xba\x69\xdc\xe7\
+\xf8\x2e\x1b\xb4\x6c\x5b\x68\xd9\x72\x11\xed\xe4\xbf\xfc\xbb\x6c\
+\x88\x70\x92\xf8\x0f\x9a\xb7\xbf\x25\xd2\x7b\x95\xad\x0b\xd9\xd8\
+\x61\xde\x52\x49\x5b\x2c\x6f\x94\x91\x7b\x8f\xef\xb2\xe9\x7d\xef\
+\x84\x62\x75\x68\xd9\xe2\xbb\x6c\x51\x71\x81\x96\x0d\x1f\x77\xb8\
+\x1e\xd9\xce\xf6\x67\x6c\xe4\xd2\x93\x3d\xa4\x0e\xa8\xb4\x7d\x40\
+\xdd\xf4\xd1\x44\xd6\xd4\xb1\x63\x47\xaa\xe9\x19\x14\x5c\xc2\x68\
+\xb7\x9d\x3b\x1d\xe5\x37\x5c\x16\xca\xec\x4b\x2d\x9b\x7f\x97\x2d\
+\xee\x0e\xf4\x4f\x74\x79\xcd\xa5\xbe\x7e\xc4\x53\xb0\xce\x79\x9c\
+\xd3\x71\xdd\xfb\x07\x3f\xad\xab\x6c\x9d\x78\xcf\xbd\x13\xfb\x6f\
+\x73\xef\x38\x05\xb9\xd2\x41\x49\xff\xd3\x77\xd9\x46\x65\x1d\x55\
+\x36\x8b\xf4\xf1\x22\x6b\x7a\xc5\x05\xff\xea\x93\x67\xe4\x20\x58\
+\x85\x6b\x15\xe9\x3d\xf5\x1e\x7d\xef\xdb\xbf\xe6\xde\xe3\x6b\x4d\
+\x6a\x90\x34\xa9\x03\xe9\xd5\x97\x1d\xe2\x9c\x7e\xf9\x5a\x13\x5b\
+\x80\x59\x8f\x2a\x5b\xd9\x03\xfd\xf1\x4c\xcd\x32\x72\x5d\xcb\x26\
+\x5e\x0b\x6c\xca\x39\xbe\x24\x1d\xb9\xf7\xc8\xc9\xa1\xb4\x5a\xde\
+\x0d\x3b\x63\x78\xeb\xfb\xc9\x39\x3b\xdc\x22\x67\xa3\x84\x7e\xc6\
+\xe3\x25\x6e\x4d\x6a\x18\xa8\xac\x6a\xc9\xa5\x90\xa7\x37\x8b\xf4\
+\x1e\xed\x68\xf0\xd4\x04\x84\x67\xa2\xea\xdc\xfb\x21\x86\xd4\x3b\
+\x3f\x8c\x9a\xf7\xc5\x3f\xd1\x65\x60\xc2\xdd\x5c\xe5\x02\xac\x1e\
+\xe9\xf8\x16\x9f\x73\xfe\x4c\xd6\x31\x25\x79\x77\x95\xb7\xa4\x96\
+\xaa\xd5\x4e\xb8\x18\x34\x2e\xec\x91\x79\x02\xeb\x00\x73\x4d\xca\
+\xb8\x07\xfb\x42\x84\x63\xb1\x60\xae\xd7\xf4\xd0\xb2\xd9\xb7\xd9\
+\x4c\xbe\xe8\xac\xaf\x70\x2e\x70\x19\x10\xe9\x4f\x1e\xab\x92\xee\
+\x84\xd7\xdd\x52\xff\x00\x0e\x5e\x0c\x4e\xab\x94\x1d\x32\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x06\x53\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x03\x00\x00\x00\x9d\xb7\x81\xec\
+\x00\x00\x02\xeb\x50\x4c\x54\x45\x00\x00\x00\xff\x00\x00\xff\xff\
+\xff\xff\xff\xff\xbf\x00\x00\xff\xff\xff\xcc\x00\x00\xff\xff\xff\
+\xdf\x00\x00\xe2\x00\x00\xe5\x00\x00\xff\xff\xff\xe7\x00\x00\xff\
+\xff\xff\xd4\x00\x00\xff\xff\xff\xd7\x00\x00\xda\x12\x12\xff\xff\
+\xff\xdd\x00\x00\xe4\x00\x00\xff\xff\xff\xff\xff\xff\xda\x00\x00\
+\xff\xff\xff\xdc\x00\x00\xe2\x00\x00\xff\xff\xff\xda\x00\x00\xff\
+\xff\xff\xdb\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\
+\xff\xdc\x00\x00\xde\x00\x00\xe4\x47\x47\xff\xff\xff\xff\xff\xff\
+\xdc\x00\x00\xdd\x00\x00\xdd\x00\x00\xff\xff\xff\xff\xff\xff\xdd\
+\x00\x00\xff\xff\xff\xdf\x00\x00\xff\xff\xff\xdd\x00\x00\xfa\xd5\
+\xd5\xff\xff\xff\xff\xff\xff\xe4\x38\x38\xdd\x00\x00\xff\xff\xff\
+\xff\xff\xff\xff\xff\xff\xdd\x00\x00\xff\xff\xff\xff\xff\xff\xdf\
+\x00\x00\xdd\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xdd\x00\
+\x00\xde\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\
+\xde\x00\x00\xde\x00\x00\xff\xff\xff\xdf\x00\x00\xeb\x70\x70\xdd\
+\x00\x00\xe0\x02\x02\xde\x00\x00\xff\xff\xff\xdf\x00\x00\xff\xff\
+\xff\xf0\x8c\x8c\xde\x00\x00\xff\xff\xff\xdf\x00\x00\xff\xff\xff\
+\xdf\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xde\x00\x00\xff\
+\xff\xff\xec\x75\x75\xdf\x00\x00\xe8\x51\x51\xde\x00\x00\xf9\xdc\
+\xdc\xff\xff\xff\xde\x00\x00\xdf\x00\x00\xff\xff\xff\xde\x00\x00\
+\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\xb2\xb2\xff\
+\xff\xff\xdf\x00\x00\xff\xff\xff\xdf\x00\x00\xdf\x00\x00\xde\x00\
+\x00\xde\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\x71\x71\
+\xde\x00\x00\xff\xff\xff\xe3\x27\x27\xde\x00\x00\xde\x00\x00\xfd\
+\xf4\xf4\xf0\x87\x87\xff\xff\xff\xff\xff\xff\xe3\x24\x24\xff\xff\
+\xff\xe3\x1f\x1f\xff\xff\xff\xfa\xd9\xd9\xff\xff\xff\xe2\x1a\x1a\
+\xdf\x00\x00\xde\x00\x00\xde\x00\x00\xff\xff\xff\xff\xff\xff\xdf\
+\x00\x00\xde\x00\x00\xea\x5c\x5c\xff\xff\xff\xe2\x1b\x1b\xe0\x0a\
+\x0a\xdf\x03\x03\xde\x00\x00\xff\xff\xff\xff\xff\xff\xde\x02\x02\
+\xff\xff\xff\xdf\x02\x02\xff\xff\xff\xff\xff\xff\xeb\x63\x63\xdf\
+\x00\x00\xdf\x01\x01\xff\xff\xff\xdf\x00\x00\xe0\x08\x08\xde\x00\
+\x00\xff\xff\xff\xec\x6d\x6d\xde\x00\x00\xe1\x10\x10\xf4\xae\xae\
+\xdf\x00\x00\xdf\x00\x00\xff\xff\xff\xff\xff\xff\xf6\xbd\xbd\xfd\
+\xf4\xf4\xdf\x00\x00\xde\x00\x00\xe3\x22\x22\xf6\xc1\xc1\xff\xff\
+\xff\xe9\x5a\x5a\xf0\x8b\x8b\xff\xff\xff\xdf\x00\x00\xff\xff\xff\
+\xe3\x22\x22\xdf\x01\x01\xe5\x32\x32\xe8\x48\x48\xf6\xb7\xb7\xfc\
+\xea\xea\xfd\xf0\xf0\xfd\xf2\xf2\xff\xfe\xfe\xdf\x02\x02\xe9\x4c\
+\x4c\xe2\x1a\x1a\xe0\x04\x04\xe4\x26\x26\xe4\x27\x27\xe0\x05\x05\
+\xe5\x33\x33\xe6\x35\x35\xe6\x3b\x3b\xe7\x3e\x3e\xe8\x44\x44\xe0\
+\x06\x06\xe2\x19\x19\xe9\x4f\x4f\xe9\x52\x52\xea\x57\x57\xea\x58\
+\x58\xea\x59\x59\xeb\x61\x61\xeb\x62\x62\xec\x66\x66\xec\x6a\x6a\
+\xee\x74\x74\xee\x75\x75\xee\x7b\x7b\xef\x7e\x7e\xef\x81\x81\xf1\
+\x8f\x8f\xf3\x9e\x9e\xf3\x9f\x9f\xf3\xa2\xa2\xf4\xaa\xaa\xf4\xab\
+\xab\xf5\xb0\xb0\xf5\xb1\xb1\xf6\xb4\xb4\xe0\x09\x09\xf7\xbe\xbe\
+\xf8\xc4\xc4\xf9\xd0\xd0\xfa\xd4\xd4\xfa\xd5\xd5\xfa\xdb\xdb\xfb\
+\xde\xde\xfb\xe0\xe0\xfc\xe4\xe4\xe0\x0b\x0b\xfd\xec\xec\xe1\x0e\
+\x0e\xe2\x15\x15\xfe\xf7\xf7\xfe\xfb\xfb\xff\xfc\xfc\xe2\x16\x16\
+\xe2\x17\x17\x66\xee\x72\x60\x00\x00\x00\xb6\x74\x52\x4e\x53\x00\
+\x01\x01\x03\x04\x04\x05\x08\x08\x09\x0a\x0a\x0b\x0b\x0c\x0d\x0d\
+\x0e\x0f\x0f\x13\x13\x14\x15\x15\x16\x1b\x1b\x1c\x1c\x1d\x1e\x1f\
+\x21\x24\x25\x27\x27\x2a\x2b\x2c\x2d\x2e\x2f\x32\x36\x36\x39\x3b\
+\x3c\x3d\x40\x41\x44\x45\x48\x4b\x4c\x4d\x4e\x4f\x50\x54\x54\x55\
+\x5a\x5c\x5d\x5d\x60\x61\x63\x65\x67\x67\x68\x6b\x6c\x6c\x6d\x70\
+\x71\x73\x78\x7c\x7e\x80\x81\x83\x84\x8a\x8b\x8c\x8c\x8d\x91\x93\
+\x95\x95\x95\x96\x98\x99\x9c\x9d\x9e\xa4\xa6\xa7\xa7\xa8\xa8\xa9\
+\xaa\xac\xad\xad\xb0\xb3\xb3\xb4\xb7\xbb\xbc\xbd\xbd\xc0\xc1\xc4\
+\xc6\xca\xcb\xcc\xcd\xcd\xd0\xd2\xd4\xd7\xd8\xd9\xdb\xdc\xdc\xdd\
+\xde\xe0\xe1\xe4\xe5\xe6\xe7\xe8\xe9\xe9\xea\xef\xf0\xf0\xf1\xf3\
+\xf3\xf5\xf6\xf6\xf7\xf7\xf7\xf8\xfa\xfa\xfb\xfb\xfb\xfb\xfc\xfc\
+\xfd\xfd\xfe\xfe\xfe\xa0\xb1\xff\x8a\x00\x00\x02\x61\x49\x44\x41\
+\x54\x78\x5e\xdd\xd7\x55\x70\x13\x51\x14\xc7\xe1\xd3\x52\x28\xda\
+\x42\xf1\xe2\x5e\xdc\x5b\x28\x10\xdc\xdd\xdd\xdd\x0a\x45\x8a\xb4\
+\xb8\x7b\x70\x29\x5e\x24\x50\xa0\xe8\xd9\xa4\x2a\xb8\xbb\xbb\xbb\
+\xeb\x23\x93\x3d\x77\xee\xcb\xe6\x66\x98\x93\x17\xa6\xbf\xd7\xff\
+\xe6\x9b\x7d\xc8\x9c\x99\x85\x14\x52\xfa\x52\x39\x5d\xfa\xf9\x80\
+\x28\xc4\x95\x41\x26\x36\x30\x10\xa9\x19\xd9\x78\x80\xc7\x4e\x14\
+\xed\xaa\xca\x02\x72\xa3\xec\x60\x25\x96\xb0\x1e\x65\x1b\x33\x70\
+\x80\xfa\x36\x09\xd8\x46\x00\xa7\x5e\x17\xbe\xa0\xe8\x68\x19\x96\
+\x50\x7d\xca\xee\x68\x02\xae\xb6\x03\x5e\x9e\x7d\x08\xb0\x8e\x02\
+\x66\x45\x09\x38\x61\xe6\x02\x79\x05\x10\xf9\x3f\x03\x6e\x2e\x01\
+\x25\x47\x2f\x39\xb0\x2a\x34\x90\x0d\x34\x8f\xa2\x7d\x32\x13\xf0\
+\xb3\xa0\x68\x2a\x0f\xe8\x84\x22\xbc\x5c\x97\x05\x8c\x95\x80\x75\
+\x3c\x0b\xe8\x2d\x81\x73\x66\x16\x60\x92\xc0\xdd\xe9\x0a\xc0\xd7\
+\x29\xe0\x36\x0b\x29\x6b\x7c\x37\x05\x90\x8e\x80\xa4\xfd\x8e\xe7\
+\x2c\xcb\x2e\xda\xe7\x2b\x1f\xcd\x3e\xa0\x68\x33\x09\x87\x14\x37\
+\xc9\xbb\xdf\xbe\x47\xb1\x9f\xb4\x71\x85\x40\xd5\x42\x02\x62\x5a\
+\xa8\xfe\xb1\x39\x2a\x37\x0a\x28\x08\xea\xc2\x50\xb4\xa2\x95\x17\
+\x70\xaa\x85\xb2\x6d\xc5\x58\xc2\x3c\x94\xed\xc8\xc7\x01\xca\xa2\
+\x2c\xb9\x27\x07\xe8\x81\xb2\x9b\x21\x0c\xc0\x6f\x8f\x04\x6c\xaf\
+\x87\x30\x80\x60\x14\xe1\x9f\x27\xc7\xaa\x30\x80\xf9\x04\x1c\xbf\
+\xf7\x2e\x71\x5d\x03\x60\xb4\x89\x80\x17\xab\xbb\x96\x70\x07\x46\
+\x59\x91\x8a\xab\xe1\xe2\x55\xd6\x72\x39\x9c\xfd\xbb\x88\x9a\x32\
+\x8f\x6a\x28\x8a\x26\x34\x63\x01\x5e\x16\xa4\x4e\xfd\x6c\xcc\x02\
+\x02\x51\xf4\x74\x51\x6a\x16\xd0\x17\xa9\xe8\xc4\x3a\xc0\x02\x96\
+\x22\x15\x3b\xd7\x9d\x05\x14\x41\xea\xbc\x16\x00\x2c\xa0\x35\x52\
+\x6f\xa6\x01\x0f\x98\x48\x63\xb2\x56\x81\x07\xa4\xdd\x4e\x17\xfb\
+\x6d\x08\xf0\x00\x7f\xda\xae\x1f\x2e\x0d\xea\xca\x13\xf0\x2a\x52\
+\x79\x6a\x4e\x7f\x18\x0e\x4e\xea\x40\xc0\xd9\x08\x30\xb6\x40\x9f\
+\x6e\xed\x2d\xac\x04\x7c\xeb\x05\x6f\x25\xe0\xf6\x4c\xe3\x9a\x9f\
+\xde\xed\xf3\x20\x50\x94\x39\x08\x65\x8f\xfb\x1b\xf7\x26\xfa\x72\
+\x27\x22\x8f\x0a\x18\x8c\xb2\xef\x71\x0d\x8d\xfb\x18\xfb\xf2\xed\
+\x6b\x77\x50\x94\xc6\x82\xb2\x67\xe1\xc6\x73\xe0\xa1\xdf\xaa\x07\
+\x5b\xb2\xff\xc3\xf7\xc2\x35\xad\xb6\x71\xaf\xa8\xbf\x5a\x42\x47\
+\x50\xb6\x16\x45\x37\x12\x46\x82\xb1\xb6\xf6\xe9\x61\xb8\xb7\x1a\
+\x30\x25\xe9\xc0\xef\xe7\xda\x50\x47\x4f\xb5\x44\xc4\x93\x3f\xda\
+\x80\x93\xda\x1f\x39\x13\x73\xff\x65\xfc\x86\x9a\x0e\xd7\x8c\xcb\
+\xf1\xd2\xfb\xc5\x9e\xe0\xac\x72\xc3\x66\x4f\xea\x5c\xcd\x47\xb1\
+\x66\x9a\xf3\x6b\x4d\x71\x70\xa9\x02\xa9\x20\x25\xf7\x17\x09\xba\
+\x39\x39\xea\xb1\x61\x75\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x06\x53\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x03\x00\x00\x00\x9d\xb7\x81\xec\
+\x00\x00\x02\xeb\x50\x4c\x54\x45\x00\x00\x00\xff\x00\x00\xff\xff\
+\xff\xff\xff\xff\xbf\x00\x00\xff\xff\xff\x99\x00\x00\xff\xff\xff\
+\x9f\x00\x00\xaa\x00\x00\xb2\x00\x00\xff\xff\xff\xb9\x00\x00\xff\
+\xff\xff\xaa\x00\x00\xff\xff\xff\xb0\x00\x00\xb6\x12\x12\xff\xff\
+\xff\xaa\x00\x00\xae\x00\x00\xff\xff\xff\xff\xff\xff\xaa\x00\x00\
+\xff\xff\xff\xad\x00\x00\xb3\x00\x00\xff\xff\xff\xad\x00\x00\xff\
+\xff\xff\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\
+\xff\xac\x00\x00\xb0\x00\x00\xc4\x47\x47\xff\xff\xff\xff\xff\xff\
+\xad\x00\x00\xaf\x00\x00\xb1\x00\x00\xff\xff\xff\xff\xff\xff\xae\
+\x00\x00\xff\xff\xff\xae\x00\x00\xff\xff\xff\xae\x00\x00\xf2\xd5\
+\xd5\xff\xff\xff\xff\xff\xff\xbf\x38\x38\xad\x00\x00\xff\xff\xff\
+\xff\xff\xff\xff\xff\xff\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xaf\
+\x00\x00\xb0\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xae\x00\
+\x00\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\
+\xae\x00\x00\xaf\x00\x00\xff\xff\xff\xae\x00\x00\xd1\x70\x70\xae\
+\x00\x00\xae\x02\x02\xaf\x00\x00\xff\xff\xff\xb0\x00\x00\xff\xff\
+\xff\xda\x8c\x8c\xae\x00\x00\xff\xff\xff\xaf\x00\x00\xff\xff\xff\
+\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xae\x00\x00\xff\
+\xff\xff\xd3\x75\x75\xaf\x00\x00\xc9\x51\x51\xae\x00\x00\xf4\xdc\
+\xdc\xff\xff\xff\xaf\x00\x00\xae\x00\x00\xff\xff\xff\xae\x00\x00\
+\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe6\xb2\xb2\xff\
+\xff\xff\xae\x00\x00\xff\xff\xff\xaf\x00\x00\xaf\x00\x00\xae\x00\
+\x00\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x71\x71\
+\xaf\x00\x00\xff\xff\xff\xba\x27\x27\xae\x00\x00\xaf\x00\x00\xfa\
+\xf4\xf4\xd9\x87\x87\xff\xff\xff\xff\xff\xff\xba\x24\x24\xff\xff\
+\xff\xb8\x1f\x1f\xff\xff\xff\xf3\xd9\xd9\xff\xff\xff\xb7\x1a\x1a\
+\xae\x00\x00\xae\x00\x00\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xae\
+\x00\x00\xaf\x00\x00\xcc\x5c\x5c\xff\xff\xff\xb7\x1b\x1b\xb2\x0a\
+\x0a\xaf\x03\x03\xae\x00\x00\xff\xff\xff\xff\xff\xff\xaf\x02\x02\
+\xff\xff\xff\xb0\x02\x02\xff\xff\xff\xff\xff\xff\xcd\x63\x63\xaf\
+\x00\x00\xaf\x01\x01\xff\xff\xff\xaf\x00\x00\xb1\x08\x08\xae\x00\
+\x00\xff\xff\xff\xd1\x6d\x6d\xaf\x00\x00\xb4\x10\x10\xe6\xae\xae\
+\xae\x00\x00\xaf\x00\x00\xff\xff\xff\xff\xff\xff\xea\xbd\xbd\xfb\
+\xf4\xf4\xae\x00\x00\xaf\x00\x00\xba\x22\x22\xeb\xc1\xc1\xff\xff\
+\xff\xcb\x5a\x5a\xda\x8b\x8b\xff\xff\xff\xaf\x00\x00\xff\xff\xff\
+\xba\x22\x22\xaf\x01\x01\xbf\x32\x32\xc6\x48\x48\xe8\xb7\xb7\xf8\
+\xea\xea\xfa\xf0\xf0\xfb\xf2\xf2\xff\xfe\xfe\xb0\x02\x02\xc7\x4c\
+\x4c\xb7\x1a\x1a\xb0\x04\x04\xbb\x26\x26\xbb\x27\x27\xb1\x05\x05\
+\xbf\x33\x33\xc0\x35\x35\xc2\x3b\x3b\xc2\x3e\x3e\xc4\x44\x44\xb1\
+\x06\x06\xb7\x19\x19\xc8\x4f\x4f\xc9\x52\x52\xca\x57\x57\xcb\x58\
+\x58\xcb\x59\x59\xcd\x61\x61\xce\x62\x62\xcf\x66\x66\xd0\x6a\x6a\
+\xd3\x74\x74\xd4\x75\x75\xd6\x7b\x7b\xd7\x7e\x7e\xd7\x81\x81\xdc\
+\x8f\x8f\xe1\x9e\x9e\xe1\x9f\x9f\xe2\xa2\xa2\xe4\xaa\xaa\xe5\xab\
+\xab\xe6\xb0\xb0\xe7\xb1\xb1\xe7\xb4\xb4\xb2\x09\x09\xeb\xbe\xbe\
+\xec\xc4\xc4\xf0\xd0\xd0\xf2\xd4\xd4\xf2\xd5\xd5\xf4\xdb\xdb\xf5\
+\xde\xde\xf5\xe0\xe0\xf7\xe4\xe4\xb2\x0b\x0b\xf9\xec\xec\xb3\x0e\
+\x0e\xb6\x15\x15\xfc\xf7\xf7\xfe\xfb\xfb\xfe\xfc\xfc\xb6\x16\x16\
+\xb6\x17\x17\xdc\x97\x3c\x09\x00\x00\x00\xb6\x74\x52\x4e\x53\x00\
+\x01\x01\x03\x04\x04\x05\x08\x08\x09\x0a\x0a\x0b\x0b\x0c\x0d\x0d\
+\x0e\x0f\x0f\x13\x13\x14\x15\x15\x16\x1b\x1b\x1c\x1c\x1d\x1e\x1f\
+\x21\x24\x25\x27\x27\x2a\x2b\x2c\x2d\x2e\x2f\x32\x36\x36\x39\x3b\
+\x3c\x3d\x40\x41\x44\x45\x48\x4b\x4c\x4d\x4e\x4f\x50\x54\x54\x55\
+\x5a\x5c\x5d\x5d\x60\x61\x63\x65\x67\x67\x68\x6b\x6c\x6c\x6d\x70\
+\x71\x73\x78\x7c\x7e\x80\x81\x83\x84\x8a\x8b\x8c\x8c\x8d\x91\x93\
+\x95\x95\x95\x96\x98\x99\x9c\x9d\x9e\xa4\xa6\xa7\xa7\xa8\xa8\xa9\
+\xaa\xac\xad\xad\xb0\xb3\xb3\xb4\xb7\xbb\xbc\xbd\xbd\xc0\xc1\xc4\
+\xc6\xca\xcb\xcc\xcd\xcd\xd0\xd2\xd4\xd7\xd8\xd9\xdb\xdc\xdc\xdd\
+\xde\xe0\xe1\xe4\xe5\xe6\xe7\xe8\xe9\xe9\xea\xef\xf0\xf0\xf1\xf3\
+\xf3\xf5\xf6\xf6\xf7\xf7\xf7\xf8\xfa\xfa\xfb\xfb\xfb\xfb\xfc\xfc\
+\xfd\xfd\xfe\xfe\xfe\xa0\xb1\xff\x8a\x00\x00\x02\x61\x49\x44\x41\
+\x54\x78\x5e\xdd\xd7\x55\x70\x13\x51\x14\xc7\xe1\xd3\x52\x28\xda\
+\x42\xf1\xe2\x5e\xdc\x5b\x28\x10\xdc\xdd\xdd\xdd\x0a\x45\x8a\xb4\
+\xb8\x7b\x70\x29\x5e\x24\x50\xa0\xe8\xd9\xa4\x2a\xb8\xbb\xbb\xbb\
+\xeb\x23\x93\x3d\x77\xee\xcb\xe6\x66\x98\x93\x17\xa6\xbf\xd7\xff\
+\xe6\x9b\x7d\xc8\x9c\x99\x85\x14\x52\xfa\x52\x39\x5d\xfa\xf9\x80\
+\x28\xc4\x95\x41\x26\x36\x30\x10\xa9\x19\xd9\x78\x80\xc7\x4e\x14\
+\xed\xaa\xca\x02\x72\xa3\xec\x60\x25\x96\xb0\x1e\x65\x1b\x33\x70\
+\x80\xfa\x36\x09\xd8\x46\x00\xa7\x5e\x17\xbe\xa0\xe8\x68\x19\x96\
+\x50\x7d\xca\xee\x68\x02\xae\xb6\x03\x5e\x9e\x7d\x08\xb0\x8e\x02\
+\x66\x45\x09\x38\x61\xe6\x02\x79\x05\x10\xf9\x3f\x03\x6e\x2e\x01\
+\x25\x47\x2f\x39\xb0\x2a\x34\x90\x0d\x34\x8f\xa2\x7d\x32\x13\xf0\
+\xb3\xa0\x68\x2a\x0f\xe8\x84\x22\xbc\x5c\x97\x05\x8c\x95\x80\x75\
+\x3c\x0b\xe8\x2d\x81\x73\x66\x16\x60\x92\xc0\xdd\xe9\x0a\xc0\xd7\
+\x29\xe0\x36\x0b\x29\x6b\x7c\x37\x05\x90\x8e\x80\xa4\xfd\x8e\xe7\
+\x2c\xcb\x2e\xda\xe7\x2b\x1f\xcd\x3e\xa0\x68\x33\x09\x87\x14\x37\
+\xc9\xbb\xdf\xbe\x47\xb1\x9f\xb4\x71\x85\x40\xd5\x42\x02\x62\x5a\
+\xa8\xfe\xb1\x39\x2a\x37\x0a\x28\x08\xea\xc2\x50\xb4\xa2\x95\x17\
+\x70\xaa\x85\xb2\x6d\xc5\x58\xc2\x3c\x94\xed\xc8\xc7\x01\xca\xa2\
+\x2c\xb9\x27\x07\xe8\x81\xb2\x9b\x21\x0c\xc0\x6f\x8f\x04\x6c\xaf\
+\x87\x30\x80\x60\x14\xe1\x9f\x27\xc7\xaa\x30\x80\xf9\x04\x1c\xbf\
+\xf7\x2e\x71\x5d\x03\x60\xb4\x89\x80\x17\xab\xbb\x96\x70\x07\x46\
+\x59\x91\x8a\xab\xe1\xe2\x55\xd6\x72\x39\x9c\xfd\xbb\x88\x9a\x32\
+\x8f\x6a\x28\x8a\x26\x34\x63\x01\x5e\x16\xa4\x4e\xfd\x6c\xcc\x02\
+\x02\x51\xf4\x74\x51\x6a\x16\xd0\x17\xa9\xe8\xc4\x3a\xc0\x02\x96\
+\x22\x15\x3b\xd7\x9d\x05\x14\x41\xea\xbc\x16\x00\x2c\xa0\x35\x52\
+\x6f\xa6\x01\x0f\x98\x48\x63\xb2\x56\x81\x07\xa4\xdd\x4e\x17\xfb\
+\x6d\x08\xf0\x00\x7f\xda\xae\x1f\x2e\x0d\xea\xca\x13\xf0\x2a\x52\
+\x79\x6a\x4e\x7f\x18\x0e\x4e\xea\x40\xc0\xd9\x08\x30\xb6\x40\x9f\
+\x6e\xed\x2d\xac\x04\x7c\xeb\x05\x6f\x25\xe0\xf6\x4c\xe3\x9a\x9f\
+\xde\xed\xf3\x20\x50\x94\x39\x08\x65\x8f\xfb\x1b\xf7\x26\xfa\x72\
+\x27\x22\x8f\x0a\x18\x8c\xb2\xef\x71\x0d\x8d\xfb\x18\xfb\xf2\xed\
+\x6b\x77\x50\x94\xc6\x82\xb2\x67\xe1\xc6\x73\xe0\xa1\xdf\xaa\x07\
+\x5b\xb2\xff\xc3\xf7\xc2\x35\xad\xb6\x71\xaf\xa8\xbf\x5a\x42\x47\
+\x50\xb6\x16\x45\x37\x12\x46\x82\xb1\xb6\xf6\xe9\x61\xb8\xb7\x1a\
+\x30\x25\xe9\xc0\xef\xe7\xda\x50\x47\x4f\xb5\x44\xc4\x93\x3f\xda\
+\x80\x93\xda\x1f\x39\x13\x73\xff\x65\xfc\x86\x9a\x0e\xd7\x8c\xcb\
+\xf1\xd2\xfb\xc5\x9e\xe0\xac\x72\xc3\x66\x4f\xea\x5c\xcd\x47\xb1\
+\x66\x9a\xf3\x6b\x4d\x71\x70\xa9\x02\xa9\x20\x25\xf7\x17\x09\xba\
+\x39\x39\xea\xb1\x61\x75\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x06\x53\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x03\x00\x00\x00\x9d\xb7\x81\xec\
+\x00\x00\x02\xeb\x50\x4c\x54\x45\x00\x00\x00\x00\x00\x00\xff\xff\
+\xff\xff\xff\xff\x7f\x00\x00\xff\xff\xff\x66\x00\x00\xff\xff\xff\
+\x7f\x00\x00\x71\x00\x00\x7f\x00\x00\xff\xff\xff\x73\x00\x00\xff\
+\xff\xff\x7f\x00\x00\xff\xff\xff\x75\x00\x00\x7f\x12\x12\xff\xff\
+\xff\x77\x00\x00\x78\x00\x00\xff\xff\xff\xff\xff\xff\x79\x00\x00\
+\xff\xff\xff\x7f\x00\x00\x7a\x00\x00\xff\xff\xff\x7f\x00\x00\xff\
+\xff\xff\x7b\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\
+\xff\x7c\x00\x00\x7c\x00\x00\xa3\x47\x47\xff\xff\xff\xff\xff\xff\
+\x7f\x00\x00\x7c\x00\x00\x7f\x00\x00\xff\xff\xff\xff\xff\xff\x7f\
+\x00\x00\xff\xff\xff\x7d\x00\x00\xff\xff\xff\x7f\x00\x00\xea\xd5\
+\xd5\xff\xff\xff\xff\xff\xff\x99\x38\x38\x7d\x00\x00\xff\xff\xff\
+\xff\xff\xff\xff\xff\xff\x7d\x00\x00\xff\xff\xff\xff\xff\xff\x7f\
+\x00\x00\x7f\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\
+\x00\x7e\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\
+\x7e\x00\x00\x7e\x00\x00\xff\xff\xff\x7f\x00\x00\xb7\x70\x70\x7f\
+\x00\x00\x7f\x02\x02\x7e\x00\x00\xff\xff\xff\x7e\x00\x00\xff\xff\
+\xff\xc5\x8c\x8c\x7f\x00\x00\xff\xff\xff\x7f\x00\x00\xff\xff\xff\
+\x7e\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\xff\
+\xff\xff\xba\x75\x75\x7e\x00\x00\xa8\x51\x51\x7e\x00\x00\xed\xdc\
+\xdc\xff\xff\xff\x7f\x00\x00\x7f\x00\x00\xff\xff\xff\x7f\x00\x00\
+\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd8\xb2\xb2\xff\
+\xff\xff\x7f\x00\x00\xff\xff\xff\x7e\x00\x00\x7f\x00\x00\x7f\x00\
+\x00\x7e\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb7\x71\x71\
+\x7f\x00\x00\xff\xff\xff\x93\x27\x27\x7f\x00\x00\x7e\x00\x00\xf9\
+\xf4\xf4\xc3\x87\x87\xff\xff\xff\xff\xff\xff\x91\x24\x24\xff\xff\
+\xff\x8f\x1f\x1f\xff\xff\xff\xec\xd9\xd9\xff\xff\xff\x8c\x1a\x1a\
+\x7f\x00\x00\x7f\x00\x00\x7e\x00\x00\xff\xff\xff\xff\xff\xff\x7e\
+\x00\x00\x7f\x00\x00\xad\x5c\x5c\xff\xff\xff\x8d\x1b\x1b\x84\x0a\
+\x0a\x81\x03\x03\x7f\x00\x00\xff\xff\xff\xff\xff\xff\x80\x02\x02\
+\xff\xff\xff\x80\x02\x02\xff\xff\xff\xff\xff\xff\xb1\x63\x63\x7f\
+\x00\x00\x7f\x01\x01\xff\xff\xff\x7e\x00\x00\x83\x08\x08\x7e\x00\
+\x00\xff\xff\xff\xb6\x6d\x6d\x7e\x00\x00\x87\x10\x10\xd6\xae\xae\
+\x7f\x00\x00\x7f\x00\x00\xff\xff\xff\xff\xff\xff\xde\xbd\xbd\xf9\
+\xf4\xf4\x7e\x00\x00\x7f\x00\x00\x90\x22\x22\xdf\xc1\xc1\xff\xff\
+\xff\xac\x5a\x5a\xc4\x8b\x8b\xff\xff\xff\x7f\x00\x00\xff\xff\xff\
+\x90\x22\x22\x80\x01\x01\x98\x32\x32\xa3\x48\x48\xdb\xb7\xb7\xf4\
+\xea\xea\xf7\xf0\xf0\xf8\xf2\xf2\xfe\xfe\xfe\x80\x02\x02\xa5\x4c\
+\x4c\x8c\x1a\x1a\x81\x04\x04\x92\x26\x26\x93\x27\x27\x82\x05\x05\
+\x99\x33\x33\x9a\x35\x35\x9d\x3b\x3b\x9e\x3e\x3e\xa1\x44\x44\x82\
+\x06\x06\x8c\x19\x19\xa7\x4f\x4f\xa8\x52\x52\xab\x57\x57\xab\x58\
+\x58\xac\x59\x59\xb0\x61\x61\xb0\x62\x62\xb2\x66\x66\xb4\x6a\x6a\
+\xb9\x74\x74\xba\x75\x75\xbd\x7b\x7b\xbe\x7e\x7e\xc0\x81\x81\xc7\
+\x8f\x8f\xce\x9e\x9e\xcf\x9f\x9f\xd0\xa2\xa2\xd4\xaa\xaa\xd5\xab\
+\xab\xd7\xb0\xb0\xd8\xb1\xb1\xd9\xb4\xb4\x84\x09\x09\xde\xbe\xbe\
+\xe1\xc4\xc4\xe7\xd0\xd0\xe9\xd4\xd4\xea\xd5\xd5\xed\xdb\xdb\xee\
+\xde\xde\xef\xe0\xe0\xf1\xe4\xe4\x85\x0b\x0b\xf5\xec\xec\x86\x0e\
+\x0e\x8a\x15\x15\xfb\xf7\xf7\xfd\xfb\xfb\xfd\xfc\xfc\x8a\x16\x16\
+\x8b\x17\x17\xd2\x67\xa5\xb8\x00\x00\x00\xb6\x74\x52\x4e\x53\x00\
+\x01\x01\x03\x04\x04\x05\x08\x08\x09\x0a\x0a\x0b\x0b\x0c\x0d\x0d\
+\x0e\x0f\x0f\x13\x13\x14\x15\x15\x16\x1b\x1b\x1c\x1c\x1d\x1e\x1f\
+\x21\x24\x25\x27\x27\x2a\x2b\x2c\x2d\x2e\x2f\x32\x36\x36\x39\x3b\
+\x3c\x3d\x40\x41\x44\x45\x48\x4b\x4c\x4d\x4e\x4f\x50\x54\x54\x55\
+\x5a\x5c\x5d\x5d\x60\x61\x63\x65\x67\x67\x68\x6b\x6c\x6c\x6d\x70\
+\x71\x73\x78\x7c\x7e\x80\x81\x83\x84\x8a\x8b\x8c\x8c\x8d\x91\x93\
+\x95\x95\x95\x96\x98\x99\x9c\x9d\x9e\xa4\xa6\xa7\xa7\xa8\xa8\xa9\
+\xaa\xac\xad\xad\xb0\xb3\xb3\xb4\xb7\xbb\xbc\xbd\xbd\xc0\xc1\xc4\
+\xc6\xca\xcb\xcc\xcd\xcd\xd0\xd2\xd4\xd7\xd8\xd9\xdb\xdc\xdc\xdd\
+\xde\xe0\xe1\xe4\xe5\xe6\xe7\xe8\xe9\xe9\xea\xef\xf0\xf0\xf1\xf3\
+\xf3\xf5\xf6\xf6\xf7\xf7\xf7\xf8\xfa\xfa\xfb\xfb\xfb\xfb\xfc\xfc\
+\xfd\xfd\xfe\xfe\xfe\xa0\xb1\xff\x8a\x00\x00\x02\x61\x49\x44\x41\
+\x54\x78\x5e\xdd\xd7\x55\x70\x13\x51\x14\xc7\xe1\xd3\x52\x28\xda\
+\x42\xf1\xe2\x5e\xdc\x5b\x28\x10\xdc\xdd\xdd\xdd\x0a\x45\x8a\xb4\
+\xb8\x7b\x70\x29\x5e\x24\x50\xa0\xe8\xd9\xa4\x2a\xb8\xbb\xbb\xbb\
+\xeb\x23\x93\x3d\x77\xee\xcb\xe6\x66\x98\x93\x17\xa6\xbf\xd7\xff\
+\xe6\x9b\x7d\xc8\x9c\x99\x85\x14\x52\xfa\x52\x39\x5d\xfa\xf9\x80\
+\x28\xc4\x95\x41\x26\x36\x30\x10\xa9\x19\xd9\x78\x80\xc7\x4e\x14\
+\xed\xaa\xca\x02\x72\xa3\xec\x60\x25\x96\xb0\x1e\x65\x1b\x33\x70\
+\x80\xfa\x36\x09\xd8\x46\x00\xa7\x5e\x17\xbe\xa0\xe8\x68\x19\x96\
+\x50\x7d\xca\xee\x68\x02\xae\xb6\x03\x5e\x9e\x7d\x08\xb0\x8e\x02\
+\x66\x45\x09\x38\x61\xe6\x02\x79\x05\x10\xf9\x3f\x03\x6e\x2e\x01\
+\x25\x47\x2f\x39\xb0\x2a\x34\x90\x0d\x34\x8f\xa2\x7d\x32\x13\xf0\
+\xb3\xa0\x68\x2a\x0f\xe8\x84\x22\xbc\x5c\x97\x05\x8c\x95\x80\x75\
+\x3c\x0b\xe8\x2d\x81\x73\x66\x16\x60\x92\xc0\xdd\xe9\x0a\xc0\xd7\
+\x29\xe0\x36\x0b\x29\x6b\x7c\x37\x05\x90\x8e\x80\xa4\xfd\x8e\xe7\
+\x2c\xcb\x2e\xda\xe7\x2b\x1f\xcd\x3e\xa0\x68\x33\x09\x87\x14\x37\
+\xc9\xbb\xdf\xbe\x47\xb1\x9f\xb4\x71\x85\x40\xd5\x42\x02\x62\x5a\
+\xa8\xfe\xb1\x39\x2a\x37\x0a\x28\x08\xea\xc2\x50\xb4\xa2\x95\x17\
+\x70\xaa\x85\xb2\x6d\xc5\x58\xc2\x3c\x94\xed\xc8\xc7\x01\xca\xa2\
+\x2c\xb9\x27\x07\xe8\x81\xb2\x9b\x21\x0c\xc0\x6f\x8f\x04\x6c\xaf\
+\x87\x30\x80\x60\x14\xe1\x9f\x27\xc7\xaa\x30\x80\xf9\x04\x1c\xbf\
+\xf7\x2e\x71\x5d\x03\x60\xb4\x89\x80\x17\xab\xbb\x96\x70\x07\x46\
+\x59\x91\x8a\xab\xe1\xe2\x55\xd6\x72\x39\x9c\xfd\xbb\x88\x9a\x32\
+\x8f\x6a\x28\x8a\x26\x34\x63\x01\x5e\x16\xa4\x4e\xfd\x6c\xcc\x02\
+\x02\x51\xf4\x74\x51\x6a\x16\xd0\x17\xa9\xe8\xc4\x3a\xc0\x02\x96\
+\x22\x15\x3b\xd7\x9d\x05\x14\x41\xea\xbc\x16\x00\x2c\xa0\x35\x52\
+\x6f\xa6\x01\x0f\x98\x48\x63\xb2\x56\x81\x07\xa4\xdd\x4e\x17\xfb\
+\x6d\x08\xf0\x00\x7f\xda\xae\x1f\x2e\x0d\xea\xca\x13\xf0\x2a\x52\
+\x79\x6a\x4e\x7f\x18\x0e\x4e\xea\x40\xc0\xd9\x08\x30\xb6\x40\x9f\
+\x6e\xed\x2d\xac\x04\x7c\xeb\x05\x6f\x25\xe0\xf6\x4c\xe3\x9a\x9f\
+\xde\xed\xf3\x20\x50\x94\x39\x08\x65\x8f\xfb\x1b\xf7\x26\xfa\x72\
+\x27\x22\x8f\x0a\x18\x8c\xb2\xef\x71\x0d\x8d\xfb\x18\xfb\xf2\xed\
+\x6b\x77\x50\x94\xc6\x82\xb2\x67\xe1\xc6\x73\xe0\xa1\xdf\xaa\x07\
+\x5b\xb2\xff\xc3\xf7\xc2\x35\xad\xb6\x71\xaf\xa8\xbf\x5a\x42\x47\
+\x50\xb6\x16\x45\x37\x12\x46\x82\xb1\xb6\xf6\xe9\x61\xb8\xb7\x1a\
+\x30\x25\xe9\xc0\xef\xe7\xda\x50\x47\x4f\xb5\x44\xc4\x93\x3f\xda\
+\x80\x93\xda\x1f\x39\x13\x73\xff\x65\xfc\x86\x9a\x0e\xd7\x8c\xcb\
+\xf1\xd2\xfb\xc5\x9e\xe0\xac\x72\xc3\x66\x4f\xea\x5c\xcd\x47\xb1\
+\x66\x9a\xf3\x6b\x4d\x71\x70\xa9\x02\xa9\x20\x25\xf7\x17\x09\xba\
+\x39\x39\xea\xb1\x61\x75\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x3a\x40\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\xa8\x00\x00\x01\x77\x08\x03\x00\x00\x00\x06\x8a\xf0\xc8\
+\x00\x00\x02\xd9\x50\x4c\x54\x45\xad\xac\xff\xc4\x90\xc4\xe2\x5a\
+\x63\xe6\xc1\xd5\xe9\x9c\xa7\xb8\xb6\xfe\xc8\xc6\xfe\xcb\xcb\xfe\
+\xbb\xbb\xff\xc0\xbe\xfe\xc3\xc3\xfe\xd2\xd2\xff\xd8\xd7\xff\xdc\
+\xdb\xfe\xb3\xb3\xfe\xe2\xe2\xfe\xb0\xae\xfe\xd0\xce\xfe\xeb\xeb\
+\xfe\xf3\xf3\xfe\xfc\xfb\xfe\xdd\x06\x08\xda\x22\x2c\xdc\x0d\x12\
+\xb7\x8f\xd1\xe0\xde\xfe\xea\x5a\x5a\xdd\x09\x0b\xdd\x19\x1e\xfc\
+\xec\xec\xde\x00\x00\xf0\xef\xfd\xe1\x13\x13\xbf\xa1\xde\xbb\xb2\
+\xf4\xe3\x23\x23\xe5\x32\x32\xe6\x3a\x3a\xe6\x41\x42\xcc\xc3\xf4\
+\xe9\x53\x53\xdc\x14\x1a\xbd\x81\xbb\xec\x6c\x6c\xed\x72\x72\xee\
+\x7b\x7b\xf2\x9b\x9b\xf2\xa2\xa2\xd2\x81\xa2\xf4\xac\xac\xf6\xb9\
+\xb9\xfa\xdb\xdb\xfa\xf5\xfa\xfb\xe2\xe2\xdd\x10\x15\xbd\xab\xeb\
+\xfd\xf2\xf3\xe4\x2c\x2c\xeb\x63\x63\xf0\x8b\x8b\xf5\xcd\xd1\xd6\
+\x2b\x3c\xd8\x2d\x3b\xd8\x46\x58\xca\x56\x7b\xd9\x25\x31\xd9\x34\
+\x43\xd9\x42\x52\xd9\x6d\x83\xda\x1b\x25\xca\x75\x9e\xda\x31\x3d\
+\xda\x52\x64\xdb\x1a\x22\xdb\x85\x9d\xb2\xa9\xf5\xdc\xd3\xf5\xcc\
+\x69\x8d\xcc\x84\xad\xcc\x8b\xb4\xbb\xa3\xe3\xcd\x4a\x69\xdd\x50\
+\x5e\xb7\xb0\xf7\xdf\x30\x37\xcd\x5a\x7b\xcd\xa1\xcd\xe2\x1a\x1a\
+\xce\x71\x94\xce\xc0\xef\xe4\xaa\xbd\xcf\x39\x54\xcf\x40\x5b\xcf\
+\xba\xe7\xd0\x5f\x7e\xe8\x45\x45\xe8\x4c\x4c\xd0\xad\xd8\xe9\x6f\
+\x74\xbe\x8a\xc3\xd1\x56\x71\xea\xe6\xfb\xd2\x7a\x9a\xc4\xab\xe3\
+\xd2\x89\xab\xec\x76\x78\xd2\xcb\xf7\xc5\x83\xb4\xee\x8f\x91\xef\
+\x81\x81\xf0\x84\x84\xf8\xcb\xcb\xd3\x44\x5c\xf1\x93\x93\xd3\x53\
+\x6d\xd4\x35\x49\xd4\x4b\x62\xd4\x69\x84\xf4\xe2\xe9\xf5\xb3\xb3\
+\xe0\x0b\x0b\xd4\xc2\xeb\xf6\xd8\xdc\xf7\xc3\xc3\xd5\x62\x7b\xf9\
+\xd4\xd4\xc8\xbd\xf3\xd5\xa5\xc8\xd6\x27\x37\xbe\x9a\xd5\xd7\x49\
+\x5d\xd4\x5a\x73\xca\x86\xb2\xcb\x74\x9b\xf8\xc5\xc5\xd6\x39\x4c\
+\xce\x80\xa6\xcb\x61\x85\xcd\x9a\xc4\xdf\xa8\xc0\xd3\x9a\xbe\xcb\
+\x7a\xa2\xe4\x79\x84\xd4\x4e\x67\xd5\x40\x54\xe6\x73\x7c\xc4\xba\
+\xf4\xe6\xc6\xda\xe7\x6a\x70\xe7\xb8\xc9\xc5\x66\x92\xe8\x5e\x60\
+\xe8\x84\x8c\xc5\x73\xa1\xcd\x92\xbb\xb6\x9b\xe0\xcd\xb0\xde\xeb\
+\xad\xb7\xeb\xe2\xf4\xc5\x8a\xbb\xd7\xb5\xd8\xcd\xac\xda\xc5\xa0\
+\xd5\xed\xa3\xaa\xcd\xba\xea\xce\x55\x76\xc6\x5c\x86\xc8\x92\xc1\
+\xd9\x59\x6d\xf0\xac\xb1\xc8\xb3\xe8\xd9\x87\xa1\xf1\x9e\xa1\xc0\
+\xb6\xf4\xb9\x87\xc6\xf2\xbf\xc5\xda\x29\x35\xc2\x9b\xd3\xca\x5c\
+\x81\xf4\xe9\xf1\xd0\x6d\x8d\xdb\x4b\x5a\xd0\xa6\xd0\xca\x64\x8c\
+\xdc\x3a\x46\xc2\xa2\xda\xde\x98\xaf\xd1\x8d\xb1\xd1\xc5\xf1\xb9\
+\xa6\xe9\xd2\xbb\xe5\xd2\x9d\xc2\xcc\xa5\xd2\xde\xb1\xcc\xd3\x74\
+\x92\xe1\x3c\x42\xe3\x48\x4e\xcb\x9d\xcb\xe4\x64\x6d\xe2\x4e\x56\
+\xc4\x7b\xac\xcb\xb2\xe2\xd4\x31\x44\xbf\x94\xce\xbc\x9c\xdb\xca\
+\xa8\xd8\xd5\x93\xb4\xcd\x45\x63\xc5\x6c\x98\xb9\x8e\xce\xd0\x6f\
+\x90\xc4\x7f\xb0\xda\x3d\x4c\xb7\xab\xf2\xda\x73\x89\xf4\xc6\xcb\
+\xca\x6c\x93\xd8\x78\x92\xd4\x70\x8d\xc3\xb2\xec\xec\x92\x97\xec\
+\xd3\xe3\xf6\xde\xe3\xc5\x88\xba\xd1\x86\xa9\xe1\x82\x92\xf8\xd3\
+\xd5\xe1\x9b\xaf\xe1\x9c\xb0\xd3\x2e\x42\xd0\xaa\xd3\xdb\x93\xac\
+\xdb\xc7\xe9\xe2\xdb\xf7\xc7\x79\xa7\xdb\x61\x74\xe1\xbd\xd5\xd1\
+\x46\x61\xe4\x54\x5a\xc9\x7e\xa9\xd2\x3a\x52\xe8\xcf\xe2\xc2\x95\
+\xcc\xbd\x3d\xa6\xd0\x00\x00\x37\x22\x49\x44\x41\x54\x78\x5e\x94\
+\x5d\xe3\xa3\x6d\xbb\xae\x5f\x5f\x06\xa7\xb5\x8c\x6d\xdb\x38\xb6\
+\x6d\xdb\xb6\x8d\x4b\xdb\xb6\x6d\x1b\xcf\xb6\xed\xf7\x17\xbc\x36\
+\x0d\x9a\xb6\xf3\xec\xfb\x32\x30\xc7\x39\x9f\x7e\x3b\x6a\x92\xa6\
+\x59\x13\x8d\x46\xb3\x21\xd4\x33\x4f\x51\x98\xc7\x5e\xe6\x06\xc2\
+\x9f\x1c\x1e\xf3\xae\xeb\xc2\x5c\xf6\xd7\x7e\xd5\x79\x5e\x0b\x55\
+\x95\x79\x95\xf6\x2a\xcd\xaf\xa2\xb6\xbd\xe1\x81\xbb\xdd\xc6\x17\
+\xd1\x04\xde\xe6\x32\xb7\x7d\x14\x35\x9a\x4d\x0b\xb5\xc9\x48\x0d\
+\x4c\xc1\x09\x1f\x44\xb9\x45\x57\xd4\x16\x2a\x80\x74\x6f\x86\x59\
+\xd9\x57\x89\x77\x09\x28\xe1\x3b\xa0\xb6\x80\x84\x87\xde\x02\xb6\
+\x6b\x91\x9a\x4b\x93\x05\x69\x51\x36\x89\xa3\x8c\x14\xa0\xf6\x0a\
+\x26\x00\x68\x2e\x8b\x37\x37\x2f\xe0\x26\x22\x65\xac\x15\x20\x23\
+\xa4\xfc\x12\x94\x02\x55\xa1\x14\xa8\x70\x75\x3d\x84\xd3\xee\x87\
+\x50\x32\x4e\x07\xd5\x62\xec\x99\x87\x05\x2f\x84\x38\x9d\x0a\xe4\
+\x9a\xa1\x55\x55\x02\x5f\xe1\x42\xcc\x4c\x22\x7a\x7a\x29\x98\x5d\
+\x80\x08\xfc\xc4\x6f\xf3\xd5\xf5\x44\x6f\x2f\x0f\x29\x0a\xbc\x41\
+\x52\xef\x11\x53\x73\x50\x51\x44\x59\xd7\x80\x95\x18\x5a\xe5\x16\
+\x68\xe5\xae\x4a\x31\x34\xa2\x76\x3b\x33\x44\xf2\xcf\x80\xab\x88\
+\xb4\x0b\x00\x01\x62\x2c\xfa\xd0\x9a\x0a\x78\x03\x4a\x78\x31\x59\
+\x84\xcc\x49\x03\xba\xce\x45\x4b\xf3\xaa\x26\x9c\xc0\x55\xd4\x4e\
+\xf3\x25\x5c\xcd\x32\x10\x37\x7c\x65\x1e\x3f\xb3\x0c\x65\x0e\x60\
+\x01\x24\x50\x37\x30\x26\x43\xc8\x50\x11\x7e\xd1\x13\xa3\x6f\x30\
+\x47\xf9\x05\x1c\x35\x6f\xa0\x9c\xde\x15\xca\xbf\x34\x1c\xa5\x4b\
+\x11\x8b\x3d\x03\x8c\x09\x1d\xed\x76\x01\x30\x1a\x13\x21\x26\x1d\
+\x4d\xb9\x27\x23\x6f\xf8\x70\xc2\x17\x9e\x8a\x73\xaa\xdd\x6f\x0e\
+\x97\x11\x3d\x19\x93\x98\x3d\x72\x52\xc3\xcd\x58\x53\xdb\xb1\x92\
+\x12\x47\xe1\x01\x07\xd5\x15\x83\x6a\x92\xe4\x9b\xca\x3d\x59\x96\
+\xba\x47\x48\xbc\x28\xfe\xb2\xdc\xf3\xdc\x09\x1d\x59\x4a\x30\xe1\
+\xb7\xaa\xc4\x90\x18\xa1\xe1\x2a\x50\x3b\xd3\x48\xbb\xe4\x9d\x62\
+\x1d\x05\x27\xca\x68\xc5\xe8\x41\x3f\x01\xab\x46\x8a\x9c\x25\xbe\
+\x16\x06\x65\x85\x1c\x05\xfd\xb4\xf0\x1c\xd8\x5a\x98\x29\x18\xf9\
+\xdb\x82\x6c\xdb\x9b\xd9\xda\x15\xd3\x07\x90\xf4\x9a\x4e\x19\x53\
+\x4f\x7c\xbd\x05\x0b\x62\x17\x1d\x65\x63\xd2\xc2\xd7\xeb\x52\x69\
+\x11\x03\x4c\xb8\x2b\x73\x31\x3a\x7e\x80\xa3\x68\xfd\x9a\xa5\xa2\
+\x9f\x11\x47\x09\x6a\xec\x49\xc1\x90\x64\x01\x45\xf7\xe4\x50\xb2\
+\xe8\x11\x68\x2e\xa2\x07\x69\x03\xcc\x94\x8a\xb2\x5b\x02\x9e\x66\
+\x4a\x43\xb5\x2d\x85\x40\xc5\xdd\xdb\x0b\x17\xa4\x1e\x72\xd4\x17\
+\x7d\x8d\x70\x59\xec\xc0\x50\x54\xd3\xca\x88\x9f\x78\xa9\x04\xcf\
+\xfe\x29\x63\x96\x66\x4c\x6d\x65\xf9\x5d\xb8\x49\x41\xbb\x91\x1f\
+\x25\xac\x42\x80\x17\x48\x61\xcd\x79\xbd\x17\x99\xc3\x0f\x9a\x53\
+\x55\x3b\xab\x27\xb0\xf0\x1d\x53\x1b\x31\x02\x47\x05\x25\x3a\x7c\
+\x44\x1a\xc5\x25\xca\x92\x88\xa1\x12\x96\x68\xca\x91\x9f\xf6\x8d\
+\xbe\x34\x17\xc1\xa3\xf4\x79\x0d\x0d\x9c\x13\xf9\xd0\x8c\x89\x25\
+\x2f\xb6\x84\x3a\xda\x0e\x84\x3f\x8d\xc6\xa4\xa3\x12\x40\x09\x70\
+\xc9\xea\x1b\x8e\x9b\x68\xf4\xa2\xa6\x20\x75\x74\xf6\x39\x30\x14\
+\xf8\xa9\x38\xaa\xbc\x53\x66\x6e\x7b\x39\xfd\x7c\xfb\x51\x67\x31\
+\x47\xc5\x3d\xbd\x94\x31\x01\x89\x9e\x5a\xa2\x30\x4f\xcc\x3e\x87\
+\xa7\x66\xd1\x13\x54\xa2\xca\x3e\x3e\x59\x8c\x62\xf2\x80\x90\x19\
+\xba\xe2\x97\x4f\x2f\xff\xbd\xc5\xc5\x1f\x35\x30\xdc\x63\x96\x2a\
+\x66\xe2\xcf\x34\xeb\xa8\x8a\x9f\x7a\x40\x18\xe6\x11\x4c\xc4\xea\
+\x0b\x1f\x03\x67\x85\x15\x97\x7c\x21\x34\x26\xc2\xea\xd8\x79\xeb\
+\x65\x7b\x46\x8b\x8e\x0e\x2b\xfd\x10\x0f\x71\xb2\x23\x8d\xe3\x51\
+\xa1\x1e\x42\xb5\x30\x5d\xb4\xe7\xa1\xe4\x98\x94\x3c\xbe\xc0\x44\
+\xef\x54\x05\x30\x2b\x01\x59\x66\xee\x3e\x7f\xfd\xa2\xd0\xcd\x4d\
+\xe0\xa7\x04\x25\x14\xe2\x27\xdc\x53\xe0\xf2\x99\xa3\x8c\x50\xa0\
+\xe2\x2d\x4b\x28\xad\xf6\xc4\x50\x67\xfb\x08\x12\xde\x9a\xb2\x72\
+\xf9\x53\x8b\x3e\xad\x19\xa8\xa8\x59\x8c\x3e\x62\x29\x58\x12\x43\
+\xed\x21\x4f\x0b\x5c\xf3\x7b\x70\x19\xac\x80\x10\x43\xd1\x42\x2c\
+\x49\x67\x23\xd6\x97\x32\x47\x61\x51\x52\x3a\x6a\x9f\xa7\xa7\x14\
+\xce\xd1\xfe\x61\x2a\xc2\x4f\xaf\xf5\x9a\xa1\x05\xf2\x14\xf5\x13\
+\x6d\x89\x29\x47\x5b\xa2\x74\x84\xd9\x59\x29\xc9\x2b\x8e\x3e\x7d\
+\x96\x48\xff\x70\x87\x6f\x76\xcb\x8e\xc3\xb6\x1e\x30\x5f\x57\x19\
+\xa0\x19\x61\x9c\x50\x09\x1e\x39\x7c\xb4\xa7\x26\xc5\xf7\x82\x15\
+\x90\xe2\x12\x8a\x30\x45\x49\xc5\xe6\x49\xf2\xb5\xc7\x4f\x73\xb9\
+\x20\x9f\xc3\xa6\xaa\x7c\xfb\xe2\xe8\x1b\x35\x1a\xfd\xcf\x00\xe6\
+\xe6\x85\x41\xab\x32\xea\x7a\xe6\x9a\x4d\xc3\x3e\x02\x25\xb0\x88\
+\x36\x4e\xef\xd8\xe6\x65\x0d\x35\x18\x1d\x47\x25\x28\x01\x80\x51\
+\xb2\x0c\xaf\x5c\x59\x3d\x46\xf8\x10\x3b\xdf\xf8\xa5\xbb\x3e\x37\
+\x35\x7f\xf4\xd4\x68\xb4\xaa\x8f\x2c\x3d\xdf\x02\xdd\x3c\x6c\x64\
+\x48\x8d\x06\xc1\x9c\xc0\x47\x74\x34\xe0\xaa\x4b\x96\x15\xd4\x1e\
+\x7b\xfc\x84\x31\xb9\x24\xc4\x3c\xe8\x9e\x04\xa5\x76\x4c\xe5\x19\
+\x2f\x82\x0b\x72\x7e\xe8\x85\xdc\x39\xa7\x0f\x5b\xa0\xab\xff\xee\
+\xd6\xe7\xbf\x7a\xd4\xd9\x97\xbd\x78\xef\xd9\x5f\xfd\x76\xdb\x13\
+\xbd\xb9\xd3\xf1\x68\xda\xe1\xcb\x32\x8a\x3c\xed\x31\x37\x73\x90\
+\xbc\x35\xaa\x1c\xd7\x26\xed\xa0\x6a\x5a\xa0\xaa\x4f\xbf\xa8\x8c\
+\xe6\x8e\x19\xc7\xd1\x3f\x5e\x0c\x68\xee\xb8\x73\x55\x56\xdf\xd6\
+\xf1\x68\x9b\x34\x94\x96\xd0\xa6\x06\x0a\x2f\x61\xaa\xcf\x51\x5c\
+\xe1\x41\x07\x48\x49\x73\xc9\xec\xd0\x9a\x96\x9f\x0c\x30\x98\xa5\
+\x9b\xfa\xce\xea\x57\xec\x09\x91\x8e\x56\xe7\xed\x8c\xc5\xae\x63\
+\xbc\x50\x47\xa3\x15\x14\x74\x14\x73\x7a\x6d\x4e\x94\xdb\x81\xc3\
+\x87\x5b\x17\x4b\x48\xf8\x47\x3b\x89\xaf\x9c\xdd\xbc\xf9\x2a\xeb\
+\xdf\x37\xf6\xd1\xea\x6f\x9d\x5b\x0c\x69\x7b\xed\xfb\xa6\xb1\xf1\
+\x28\x46\x24\x02\x14\xdd\x53\xc0\xce\xf7\x3f\x7f\xd7\x15\x3d\xa8\
+\x92\x60\x18\x9a\xe7\x90\xd9\x6b\xb9\x13\xce\x8b\x00\xe7\xba\x1d\
+\xc3\x7e\xb3\x91\x3f\xbc\x7a\xf1\xaa\x7d\x04\xb4\xbc\xf1\xa4\xfd\
+\x96\xc7\x7b\x56\xae\x5a\xb3\x6e\x16\x9c\xea\x85\x7d\x01\xda\x65\
+\x55\x65\xd2\x05\x08\xe5\x9b\xd8\xea\x71\x05\x7d\xff\xb6\x23\xd7\
+\x1b\x0e\xad\x1a\x48\xa5\x04\x90\xe6\x58\xd5\xb9\xe0\xb9\x8b\x9e\
+\xbd\xe8\x97\x4f\x38\x8e\xe6\x16\xed\x89\x16\xc0\xed\xc3\x99\x1c\
+\xfc\x53\x79\x4b\xbf\xe3\xd6\x79\x78\x17\xa7\xfd\xcf\x17\x07\xfd\
+\x4e\x67\xa6\xd9\x7c\x78\xde\x0a\x7f\x58\x8b\x86\x8a\x82\xb6\xbb\
+\xda\xa0\x08\x24\xfe\xaa\x95\x09\x60\x6d\x9b\x74\xba\x34\x9a\x5b\
+\x28\x0a\xd4\x50\x20\xe7\x98\x7e\x7c\x0f\xaa\xdd\xdc\x29\xe8\x42\
+\x0d\x81\x5b\xdf\xda\x5a\x71\xe3\xe7\x3f\x7a\xeb\x09\xa7\x3f\xff\
+\xde\xe5\xfe\xe2\xe4\xd1\xb7\x2d\x4b\x97\x01\x50\xb5\x2c\x49\x68\
+\x72\x48\xf7\xc4\x1c\xfd\x26\x29\xfd\x68\xf4\xee\x16\x31\x94\xa8\
+\x3e\xc3\x5b\xb9\x47\xb3\x05\x09\xff\x5e\x31\xa3\x91\xfd\x19\x9d\
+\x73\x23\x85\x79\x4f\x1f\x7e\xcc\x72\x0a\x9b\xff\xf5\x78\xcb\x82\
+\x2b\x87\xa5\x30\x94\x0b\x3a\x49\xd1\x7b\x2e\x1f\x82\x7b\x0a\x4a\
+\xec\xf3\xa7\x82\x64\x63\x3f\xcf\x61\xbd\x27\x98\xef\x38\x5a\x9b\
+\xc5\x8e\x1c\x79\x7a\x46\x64\x31\x73\xff\x04\x1c\x05\x1e\x5e\x78\
+\xca\x59\x59\x76\xee\xaf\x8e\x5a\xef\x24\xb1\x73\xe0\x67\x77\x6c\
+\x47\x71\x98\x17\x97\x9e\x70\x09\x05\xac\x17\x5b\x30\x93\x6f\xdd\
+\xbf\xe8\x94\x54\x60\xe6\xf5\x0d\x23\xc6\xb1\x6c\x19\x78\xf2\x3e\
+\xad\xf6\x27\x46\x48\x2f\x7c\x0f\xf0\x74\xb9\xc3\x3d\x3f\xc5\xce\
+\xeb\xe0\xb0\x6a\x67\x5e\x72\xa7\xd7\xcf\xb6\x02\xca\x72\x77\x84\
+\x25\x1d\x27\xfc\xde\xe5\x7f\xbf\x63\xf7\xb0\xff\x1a\x0b\x64\xa1\
+\x47\x09\x09\xa8\xe8\xe1\x0e\xc2\xfe\x3f\x5f\x18\xf4\xaf\xff\xa9\
+\xfd\x7c\x3c\xc7\x20\xbf\x3c\x4e\xfe\x11\x0f\x39\x8f\xb4\xb9\x61\
+\x65\xff\x07\x81\x17\x9d\xda\x3e\x6c\x20\x4c\x0e\xf0\x83\xca\xb3\
+\x88\x1e\xee\x66\xe0\x49\x29\xb9\xeb\x39\x47\xfa\x0a\x8b\xe3\xc1\
+\x16\xc0\x24\xba\xc2\x0a\x6e\xf6\x85\x61\xbf\x61\x60\x7f\xc0\x02\
+\xd8\xd2\xaa\x2a\x84\x9a\xbf\xf1\x83\x5b\xb6\xef\xb8\xf3\x91\x07\
+\x06\xfd\xf7\xfc\x0d\xb0\x7b\x50\x5a\x3a\x59\xe1\xbc\x6a\xf7\x00\
+\xfc\x3d\x33\xb4\x8b\x0b\x52\x4c\x41\xfd\xa1\xa0\xb5\xbe\xd0\x25\
+\xb2\xb5\x73\xb0\xbe\x00\x37\xc9\xe6\xeb\xc7\x7e\x7a\x70\x61\xd0\
+\xc9\xf3\x1b\xcf\x3c\xfd\xb5\x20\xec\xd9\x7e\x55\x8a\xd7\xaf\xf2\
+\xda\x65\x4d\x7b\x17\x21\xa0\x83\xea\xc3\xf9\x02\x73\xf2\xb6\x07\
+\x06\xad\xb2\x2d\x40\x4d\x0e\xda\x25\x63\x4a\xc5\xa3\x51\x94\x07\
+\x69\x88\xc3\xca\x75\xdc\x63\xac\x90\x07\x06\xa5\x8f\xb5\xd1\x32\
+\xcc\x3c\xf3\x17\xcc\xa1\xf9\x21\x55\xa0\xce\x3a\xff\xd5\x1c\x91\
+\x7e\x1d\x6c\xee\xc0\x10\xbc\xd3\x59\x7b\x16\xe7\x6f\x3b\xb8\x79\
+\xd3\x6d\x3b\x76\xef\xea\x14\x92\x31\x8b\x41\x71\xf0\xf4\x92\x0e\
+\xbf\xc0\xb5\x1e\x55\x14\xa2\x67\xb8\xef\xb7\x40\xf6\xf5\x1c\x44\
+\x11\xff\x13\x5f\x52\xb2\xdc\x59\xd4\x50\x26\xfb\x80\xf1\xe4\xd7\
+\x3c\x01\x01\xe9\xad\xc7\x38\xe3\xde\xdd\xcf\xc0\x91\xee\xbd\x64\
+\x61\x00\xf1\x17\x96\x71\xb9\x92\xdb\x05\xd9\x8b\x7e\xa6\x45\xaf\
+\xa2\x12\x4c\xeb\x54\x75\xf4\xbb\xa8\xa4\xc0\x4f\x96\xfe\xf7\x0c\
+\x20\x9f\xee\x6e\xb9\xfa\xe8\x09\xa0\x81\x27\xde\xf3\xba\xa7\x70\
+\x39\x18\xdd\x36\xcc\x33\x8b\x14\x88\xb7\x46\xb2\x92\x2d\x5e\x72\
+\x3b\x4a\xee\xe2\x4a\x89\x4e\x46\x5c\x1e\xfa\x9b\xbf\xff\xac\x4e\
+\xee\x46\xa4\xa4\x9e\x96\x5e\x30\x85\x99\xcf\xec\xe6\xad\x77\x5e\
+\x08\x4a\xea\x2a\x7a\x2f\x63\xe8\x8c\xb3\x99\x61\xed\x81\xb1\x96\
+\xc8\x51\x4f\x49\x55\xe0\x6c\x50\x2b\xa0\xd1\x96\xd8\xc5\x4f\x5e\
+\xf0\xbe\x8b\x0d\xae\xed\x06\x36\xc2\x64\x25\x05\x98\x44\x6b\x27\
+\xc1\xfd\x6c\xde\x3d\xec\xb4\x1a\xc5\x5d\xe6\x7b\xfd\xd0\x19\xd2\
+\x72\x8d\x73\xe5\x9d\xc3\x1e\xae\x4c\xee\x41\x69\x03\x5f\xe1\x9b\
+\xcd\x9e\xd7\x25\xf3\xf9\x52\x79\xfd\x2d\x9f\x3c\xc6\x09\x0b\x60\
+\xf5\x84\xa3\xa0\xa4\xa3\x85\xc2\x07\x7a\xba\x05\xb1\xea\x91\x61\
+\xc3\xe6\x4a\x4f\x80\x2e\x1e\x7c\xec\xba\xbd\x46\xf6\xd5\xbc\x44\
+\xa3\xa3\x75\x0f\xee\xea\xe7\x94\xdd\x59\xc2\xdd\x06\x45\xac\xa5\
+\x13\xe4\x48\x85\xb4\xe8\x9b\x86\x97\x0f\x1f\xb7\x5e\x99\x46\x83\
+\xac\x5e\x3c\x29\x21\xad\xcd\x6d\x19\x3a\xbf\x7b\x60\xff\xa3\xfa\
+\x8d\x49\xc0\x65\xa3\xac\xd3\x0c\x57\x4f\x37\xe6\x73\xd5\xea\xfd\
+\xfb\xd7\xdd\xbc\x75\x61\x57\xab\xa6\xea\x13\x70\x95\x44\x0f\x37\
+\x9b\x12\xe0\xa4\x5d\x11\x7a\xd2\x79\x7d\xf3\x55\x41\x54\xbb\x75\
+\xc6\x4f\x95\xd1\x93\x8a\x7b\xba\xd1\x65\x6a\x36\x7a\xae\xce\x9c\
+\x12\x7d\x7c\xb4\x61\x84\x7f\xc3\xcd\x3b\x87\xcd\x56\xa7\xd3\xea\
+\xe5\x54\x25\x13\xc1\x13\x47\xc1\x94\x32\xcd\x52\x85\x34\xad\xa3\
+\x88\x53\xe8\xc0\x12\x30\x94\x3d\x29\x2c\xf7\x39\xd3\xbb\x20\x3a\
+\xbe\xbe\xce\xdf\x70\x03\xb0\x13\x69\xfd\x42\xcb\xba\xcf\xbc\x97\
+\x73\x2d\x4f\x28\xcb\xd8\xf0\x41\x3f\xe1\x42\x94\x8c\xd3\x7c\xcb\
+\x5a\x1f\xeb\xe8\x93\x0e\xe7\xfc\xcd\x5b\x1f\x7d\x61\xeb\x95\x50\
+\x6f\x19\xfa\x1c\x7d\x0c\x94\xb4\x27\x46\xff\x06\xa7\xc9\x5f\x3b\
+\x62\xca\x33\xef\xf5\x9b\x76\x0e\x73\x48\x9b\x21\xab\x57\x48\x7d\
+\xbb\xa7\x4d\xc6\x4c\x6b\x28\xd7\x47\xa3\xb5\x9e\xdd\x68\x6f\x19\
+\x18\xd0\xd6\xe1\xd2\x4c\xd3\xb8\xa8\x2f\x1b\x54\xab\x86\x45\x41\
+\xf5\xdc\x1c\x95\xb4\xe9\xb1\xf4\x3e\x6d\xda\x5b\xd6\xaf\xbb\xfb\
+\x71\x93\x7d\xd4\x5c\xc6\xab\xec\x55\x97\x42\x82\x54\xf6\x98\x32\
+\x65\x4e\x2c\xfa\x90\x38\x65\xfa\x4d\xf0\x23\x0b\x03\xfb\x5d\x18\
+\xa4\xe7\x2d\xee\x79\x74\x48\x69\x93\x5e\xee\x89\x7e\xbe\x07\x02\
+\x6a\xc7\xca\x8d\xfb\x96\x8a\x7e\xab\xa8\xad\xcd\xfb\x65\x9d\x40\
+\xf2\x58\xc6\xe7\xed\x30\xb5\x19\x2a\xdb\x37\xdd\x08\x28\xc7\xf7\
+\x47\x1a\x18\x53\x3b\x87\x16\x26\xac\x4e\xb7\xbc\xef\x81\x5d\xba\
+\x82\xef\x94\x34\x5f\xfe\xb2\x67\x26\xe7\x4f\x82\xbd\xd0\x4f\xfc\
+\x68\xd1\xe1\x5c\xb6\xf1\xb0\x61\xab\x76\x05\x9d\xaa\x74\xaf\x52\
+\xa0\x0a\x33\x19\x26\x60\xa3\x5f\x5e\x95\xba\xe8\xf0\xbb\x00\x18\
+\x49\xd7\xf0\xbf\x35\x67\x38\x33\x3b\xb4\x3a\x80\x64\x3f\xd4\xde\
+\x32\x28\xe9\xec\xbc\x83\x76\x5b\x03\xd6\xa6\x27\xdf\xb6\x6e\xcd\
+\x4f\xae\xf9\xf8\xae\xa5\x26\x55\xca\x4a\xfb\x01\x18\xe9\xf2\x4c\
+\x8a\xb7\x41\x4b\xf7\xab\xc5\x2e\x85\xbc\x74\x21\x17\x6e\x58\xcb\
+\x77\x0c\xdc\xe6\x32\x52\x61\x6f\x66\xe9\xbb\x9e\x65\x75\x04\x1d\
+\x40\x67\x5a\xb4\x3a\xcd\x46\x4f\x2a\x7a\x75\x49\xc2\x47\xb6\x2a\
+\x8b\xf7\x77\x42\x33\x78\x48\xee\xba\x09\x42\xa0\xea\x42\x2e\xaa\
+\xe8\x9d\x1d\x17\x3f\x29\xa4\x00\xf2\x86\x67\xe6\x75\x66\xb1\xb3\
+\x9f\xe3\x6e\x98\x6a\xd6\xb0\x46\x54\x0b\x4a\x8d\xb4\x24\xa0\x60\
+\xf3\x8c\x30\xf3\xc2\x51\x00\xa9\xb2\xa6\x30\xc2\x7f\x12\x38\xda\
+\x81\x22\x3e\xd1\xe5\x27\x3d\xf6\x70\xcf\xc2\xfc\xda\x48\xa1\x9c\
+\x9f\xdd\x3a\xec\xf7\x20\xb1\xcf\x0b\x5d\x23\xb3\xbf\x65\x45\x84\
+\x20\x2b\x56\x52\x14\xbd\x28\x40\x68\xf4\xdd\x20\x6b\x12\xa3\xa2\
+\xc2\xd3\x77\x60\xa5\xee\xcb\xb6\x48\xaf\xb8\xda\x18\xf5\x89\x1d\
+\xe3\xf0\xef\x1b\xc9\xc2\x3d\x3f\xbb\x65\xe7\xb0\x3f\xd3\xe0\x30\
+\x9f\x8b\x4f\xf6\x26\xa0\x22\x77\x36\x25\x78\x89\x31\xc1\x0d\xec\
+\xf4\x63\x12\xe5\x9d\xda\x69\xf7\x64\x45\xbb\x72\x09\x34\xd4\x81\
+\xbd\x7a\xbd\xc5\xb6\xaf\x59\x14\xaf\x23\x79\x9f\x83\x20\x11\x25\
+\x3c\xb5\x47\x95\x88\xbe\x64\xb0\x0a\x2a\xb9\x27\xe1\xa8\xc7\x54\
+\xde\xb9\x83\x8f\x71\x65\xc7\x3f\x84\x32\x4c\x0b\xf9\x59\x7c\xf7\
+\xcb\x73\xb0\x00\x0c\x0d\xd0\xcb\x8d\x7e\x1e\xff\xd6\x2d\x3b\x07\
+\x4b\x9d\x06\x78\x51\x42\x4a\xdc\x14\xaa\x70\xd7\x8e\xc0\xaa\x45\
+\x94\x8c\x09\xe0\x91\xd5\xc7\x1b\xf6\x91\x86\x4e\x73\x84\x0f\xfe\
+\xe9\x21\x28\x5b\x7c\xff\x5b\xbd\xc6\x77\x5e\x75\x1c\x26\x18\x0f\
+\xbd\x30\xb4\xe6\xf4\xa1\x37\x9a\x64\xb2\xd3\xc0\xfd\x86\x00\xa9\
+\x7b\x4a\x2c\xe7\x61\x77\x0e\xa4\x75\xf0\x28\x0d\x45\x33\x02\xb8\
+\x98\x85\xa4\x71\xb6\x13\x56\x8f\x57\xe3\x31\x0a\x2a\x24\x36\x19\
+\x6d\x1d\x36\xf5\x5e\x83\x20\x05\x53\x8a\x38\x5a\xd6\xdc\xf8\xc0\
+\x18\x2b\x96\x3c\x00\x25\xd9\x3b\x8e\x66\x71\x3c\xaa\xeb\x8e\xba\
+\xb1\x00\x5e\xe7\x2c\x06\xb4\xe6\xf1\x61\x8b\x20\x4a\xcd\x59\xb1\
+\xd4\xdb\x65\xc2\xce\x07\x44\x0b\x38\xb5\xc3\xa7\x95\x49\xb4\xd3\
+\x92\x4a\xeb\x39\xc2\x8f\x3b\x75\xfc\x12\xd9\xc7\x14\xcc\xd5\xdb\
+\x4d\x69\x41\x73\x53\x65\x4c\x96\x22\x7e\x52\x37\x51\x4d\x1a\x0a\
+\x38\xc5\x96\xd0\xdf\x67\xa2\xa6\xf1\x16\x23\x2f\x4e\xe3\x77\xee\
+\x3e\xb9\x9f\x50\xae\x3a\x68\xec\xbb\x09\x05\xbd\x90\xa7\x92\xd7\
+\xe3\x25\x30\x81\x2a\xe4\x28\x1b\x53\x15\x59\x53\x96\xd1\x2a\x0f\
+\xfc\x65\xd1\x23\xdc\xe4\x6e\x83\xce\x41\x9b\x6f\xbe\x7b\xe3\xc6\
+\x4d\x07\x77\x98\x6a\x52\x93\x3a\xca\x98\x04\xa4\x92\xbd\x90\x34\
+\xbe\x40\xed\x21\x82\x09\x37\xb0\x51\xae\x52\x5b\x93\x94\x74\x92\
+\xc6\xa4\xa8\x35\x33\x03\xc8\x99\x9b\x0d\xda\x68\xd2\xb2\x67\x94\
+\x9a\x70\xbb\xbe\x2a\x45\x49\x85\x9f\x2c\x7b\xbd\xcc\x97\x58\x78\
+\xf2\x9a\x4a\xe2\x1a\x7e\x5c\x29\x91\xa0\x44\xc2\x3c\xa1\x9a\x2f\
+\x59\x3d\x0b\xf6\xf7\x68\x4d\xd2\x9d\x17\xb6\x40\xf0\x4b\xc1\x14\
+\xa2\x08\x3f\x1d\x8f\x2a\xac\x02\x53\x6f\x84\xe6\x82\x8f\x36\xeb\
+\xe1\xd2\xed\x8e\x28\x7a\xba\x3c\xca\xbc\x9e\xa2\x44\xbf\x23\x32\
+\x51\xfd\xb4\x3d\xff\x04\x38\x83\x5d\x50\x07\x53\xda\x47\xf5\x36\
+\x38\x35\x42\x8c\x93\x7a\x55\xd9\x07\x41\xd6\x9a\xa1\xa0\xa4\x6d\
+\xe6\x68\x92\xc4\x87\xc6\x05\x88\x40\x4b\x7b\x08\xb7\x30\x17\x48\
+\x5f\x70\x52\xd7\x28\x77\x96\x08\xe2\xaa\x62\xab\xb7\xdf\x2c\x76\
+\xc2\x9c\xb1\x7b\x2a\x69\xed\x04\xbc\x21\x53\xc7\xaf\x4c\x7a\x9f\
+\x09\x75\x94\xf7\xc2\x74\x3b\x11\xf4\x8f\x32\x3e\xe5\x9e\x2a\xb8\
+\x4a\x04\x6a\x11\xea\x4e\xd7\x36\xbe\xb3\x52\xf0\x65\x8a\x93\xa2\
+\xa4\x09\x6a\x46\x9b\xa1\xb2\x7b\x47\x85\x47\xd1\x51\x7b\xe7\xac\
+\xa9\x45\x91\x0a\x49\x80\x91\xc0\x61\x0f\x25\x1b\x7b\x09\xcc\xa4\
+\x4e\x52\x88\x4c\x05\x2a\x5f\xd1\xe6\xcd\x34\xea\xa8\xaa\x3a\x02\
+\x35\x02\x25\xad\xf1\x45\x1c\xe5\x1e\xe7\x42\x47\xf8\xd2\x39\x9c\
+\x68\xca\x04\x80\xe0\x4e\xa9\x40\x96\xb0\x79\xb5\x2d\x12\x17\x72\
+\xd1\x75\xba\x08\x9f\x37\x1b\xe2\x1e\xe7\x3a\xd6\xce\xdc\x13\x3d\
+\xf7\x91\x51\x6c\x02\x97\x47\x80\xd2\x01\x0e\x31\xa2\xf0\x59\x49\
+\x35\xe9\x8d\x06\x78\x73\xda\xa4\x76\x6c\x69\x1b\x5c\x50\xc2\x43\
+\x70\x75\x76\xc7\x62\xaf\x6b\x95\x2f\x65\x28\xf1\x64\xa3\xeb\x04\
+\xde\x02\x52\x73\x54\x59\x53\x51\x30\x4f\x0d\x46\xf3\x08\x4b\x45\
+\x51\x2d\x4c\x81\xaa\x71\x02\x36\x88\x4c\x04\x64\x9d\x6a\x77\x2c\
+\xd3\x2e\x5f\xdc\x28\xfc\x26\x5a\xde\x84\x40\xea\xc8\x4f\x6c\xd4\
+\x02\xdd\x74\x0f\x5e\x8e\xab\xa0\xa3\xd1\xb9\x06\x30\xfd\x9a\x20\
+\x46\x59\x28\x94\xc4\xa9\x92\x57\x0a\x3b\x25\x9d\x4f\xd5\x75\x02\
+\x5b\xe2\xe6\x51\x92\x7d\x44\x0c\xb2\xce\xfd\x0e\x88\x92\x8c\xc9\
+\x57\x51\x78\x2b\xb3\x07\x4b\x02\x37\x1a\xf7\x63\x33\x64\x42\x19\
+\xaf\xf5\xc0\x55\x61\xa7\x18\xbc\x94\x1f\x74\xf7\xa0\xbc\x74\x34\
+\x4a\x1c\xc5\x64\x04\x81\xc6\x8b\xbd\x4a\xef\xe2\x45\x29\xf6\xa4\
+\xa1\xe8\x0b\x7c\xa0\x4e\x86\x15\x7c\xc1\x49\xbf\x04\x98\x48\x15\
+\x20\xd8\x39\x55\xe2\xee\x85\x50\x37\xd5\xaa\xc4\xd2\x57\xeb\x53\
+\x2a\x5d\x16\x12\x93\x4a\x72\xd4\xf7\xa7\xfc\xa1\xa1\x02\x91\x6e\
+\xd6\x31\x4a\xf9\x48\x49\x1d\x10\xa6\x33\x7b\xcc\xed\xd8\xdd\x5b\
+\x88\xa8\xa5\x88\x56\x88\xd7\x7a\xf7\x26\xb2\xa0\xd1\xe8\x49\xde\
+\x74\x0a\x03\x38\x2b\xe8\x32\x4f\xec\xca\x37\x95\x7e\xd7\x53\x8a\
+\xa1\xd3\xe1\x7e\x3d\x8b\x1f\x2e\xe0\xac\x8e\x45\xc1\x99\xe2\x8a\
+\x24\xf6\xa4\xe2\x12\xdf\x8c\xea\xb4\xe0\xe1\x8a\xce\x08\x09\x50\
+\xe4\x67\xc8\x51\x45\xc4\x50\xca\x97\x84\x72\x56\x50\x8a\xf3\xc2\
+\xe4\x8e\xac\x5e\xae\x04\x58\xc1\xe9\x70\xeb\xc5\x9e\x1d\xe9\xa1\
+\xdb\xdb\x85\x9f\xda\x96\x30\x22\x09\xda\xdb\x45\x07\x38\xb8\xa7\
+\x57\x2a\xc2\xcf\xda\x5e\xe8\x9c\x0e\x45\xe9\x15\x10\xad\xf4\x68\
+\xea\xa8\x9e\x80\x13\xff\x87\xa1\x86\x1f\x8f\xb2\x97\xd2\xba\x5a\
+\xe2\x8b\x78\x89\x77\x50\x1a\x0f\xdc\x53\x49\x76\x1f\x83\x8d\x9a\
+\xb1\x05\xa7\xb8\x27\x87\x91\x20\x36\x24\x70\x16\xa4\xc2\xd2\x42\
+\xbb\x52\x11\x3d\xac\x4e\xc2\x4c\xbd\x84\xea\xf5\x53\x3c\x7d\xd2\
+\x95\x4e\x8b\xe8\x63\x3d\xa5\x48\x4f\xf5\x8e\x4a\x2c\x2a\x50\x35\
+\x4e\x0f\x69\x85\xa2\xaf\xb5\x72\xf2\xaf\xc2\x7b\xc8\x46\x9d\xc8\
+\x94\x50\xd6\xcc\x51\x9f\x1c\x52\x12\x7b\x1a\x66\x70\x48\xa8\x4a\
+\xe4\xa0\x9e\xe0\x43\xb9\x13\x4f\x63\xa8\x0d\xed\x48\x7b\x08\x17\
+\xfd\xa8\x40\xad\xa3\x65\x94\x6f\x8d\x95\x71\x92\x13\xad\x62\xaf\
+\x9f\x54\x4e\xd5\x8e\x1b\x53\xea\xf8\x45\x41\xbe\x54\x13\xb5\x65\
+\x32\x52\xfa\x12\x9c\x64\x4d\x5e\x72\x57\x7b\x6b\x91\x58\x13\xfb\
+\xfc\x90\xa5\x11\xa5\x39\xea\x4c\x5e\x4e\x0b\xe1\xe5\x91\xc4\xa3\
+\x31\x2f\x45\xf4\x08\x14\x9e\xf8\x80\x98\x68\x67\xe2\x00\xeb\x38\
+\x0a\x63\x51\xdf\xe3\x17\x72\xde\x92\x97\x4e\xfc\xc0\x28\x2f\xc2\
+\x2b\xa2\x27\xf1\x87\x82\x47\x2f\x9a\xce\xed\xd3\x52\x9f\xe6\x54\
+\x44\xa3\x05\x98\x12\x98\x68\xaa\x95\xf0\xe3\x45\x49\x5e\x88\xb6\
+\xf2\xc5\xdf\x26\xac\xc4\x4e\x7e\x4f\xa4\x81\x8e\x5f\x99\xe4\xec\
+\x4d\x4f\x67\xf5\x12\x34\x49\x5e\x2f\x4b\x68\xec\x45\xeb\x14\x4b\
+\xdb\x1c\xe5\x27\xad\xe9\x10\x1c\x85\x5b\x05\x25\xe8\x9f\xe0\x1d\
+\x87\xa3\x79\x8d\xa0\x31\x38\xd1\x3a\xca\x58\x2b\x78\x02\x94\x0e\
+\x9f\xb2\x7d\x71\xf8\x87\xe4\x68\x4c\x64\x4c\x31\x47\xc9\x90\x88\
+\xa7\xf0\x0e\xd9\x2a\xc2\xaf\xf4\x5a\x2f\x2a\x10\x1b\x53\xda\xec\
+\xd3\x6b\x3d\xf3\x13\xcc\x1e\xef\x98\x28\xa9\x8b\x32\xd1\xb2\x14\
+\xa6\xf2\x86\x7d\x1c\xe6\x89\xe0\x15\xcc\xd8\xe8\xd3\x7e\x54\x83\
+\x25\xa4\xee\x75\x8b\x57\xcc\x8b\x30\xea\x42\x49\x29\x77\x2a\x1a\
+\x95\xf3\xf5\x78\x4b\xdc\xcc\xfe\x3e\xbd\x17\x1a\x55\x72\xf5\x15\
+\x14\xc6\x59\x3f\x51\x0d\x04\xaf\x6c\x83\xfb\x71\x53\x25\x58\x35\
+\x57\x05\xa6\x66\xea\xf8\xf3\x4c\xc2\x4e\xc1\x2a\x20\x75\xc6\x9c\
+\xf3\x52\x9f\x0a\x4a\x2a\x08\x98\x08\x27\x20\x56\x06\xc5\x62\xd7\
+\x09\x09\x92\x62\x29\xfc\x26\x0f\xb5\x08\x44\x85\x14\x50\x22\xd4\
+\x5c\x4a\x7a\x3e\xcc\x20\xbb\x2b\xc9\xa2\x38\xb9\xab\x12\xf1\xbd\
+\xc0\xa4\x97\xf2\xa5\x63\x8b\x64\x4c\x92\x2b\x93\xcb\x27\xe1\xcb\
+\x81\x2b\xf0\x50\xb9\x64\xf6\x01\xd1\x22\x4f\x1f\x1a\x24\x3f\x2a\
+\x74\x8e\x65\x1f\xbb\x54\xda\xb8\xd3\x3a\xca\x87\x03\xd1\x90\x98\
+\x10\x1f\x97\x1e\x85\xa7\x60\x48\xc2\xd1\x32\x26\x02\xa8\xa3\x91\
+\x38\x6a\x86\x57\xca\xea\x79\x09\x2d\x84\xab\x3d\x8c\x48\xb4\x31\
+\x49\x2e\x4f\xfe\x29\xd4\x51\x0c\x9f\x88\xa7\xc2\xe0\x76\x60\x4c\
+\xa1\x6f\x4a\x6f\x8a\xa4\x83\x12\x01\x8b\x28\x1d\x43\xb7\xcd\x9f\
+\x7c\x52\xa3\xc8\xd5\x09\x31\x92\x3a\x7c\x85\x35\xe7\xf4\x29\x5b\
+\x11\x39\x6b\xa8\xe4\xcc\x41\x40\x0a\x37\xe7\x23\xd3\x52\x1f\x4d\
+\xa4\xcb\x54\x24\x5b\xfb\x39\xbb\xcb\xfc\xc1\x46\x78\xda\xb2\xe0\
+\x1d\xf0\x42\x2f\xa1\xbc\xc5\xcc\xbb\xa0\x55\x00\x58\x6c\x3e\xb4\
+\x7a\x25\xf9\x76\xcc\xd1\xc8\x9c\x0a\x00\x0a\xce\xe9\x58\xb7\x1d\
+\xde\xc7\x42\x2e\x9f\xb9\x23\xb4\xbe\x1b\x2d\xf9\x06\xab\xc7\xae\
+\x0d\x0f\x29\xaf\xf3\x82\x36\xb2\xfa\x34\xce\x69\x0e\x4a\x84\x7a\
+\x00\x16\x39\xfa\x8f\x8b\x96\xce\xdb\xdd\xc7\x14\x14\x80\xfa\xbb\
+\x22\x4c\xc2\x4e\xb1\xf6\x38\x28\x01\xa0\x5e\x8c\x1f\xc5\x79\x41\
+\xcf\x78\x3b\x88\xf0\xe3\x68\x14\x9b\x89\xfe\xcd\xf2\x73\xd3\xbe\
+\xa5\x1e\xc0\x44\xd1\x73\x6a\x1f\xc3\xac\x18\x2c\xbc\x75\x3b\x11\
+\x82\x44\x94\xfc\xa1\x84\x3f\xd6\x3f\x05\x82\xc7\x62\x0e\x6f\x86\
+\x9d\x64\xb7\xc4\x77\x75\xa4\x88\x5f\xa3\x49\xd5\x29\x37\x2a\xce\
+\x5e\xf8\x2a\x6c\x55\xc6\xa4\xf3\xfa\xd8\x96\x22\x8e\xb6\x7c\x96\
+\x16\x08\x56\x36\x6d\x6d\xaf\xc1\xca\x81\x3e\xba\x0c\x9a\x29\x0b\
+\x53\xa1\x22\x7c\x78\xe8\x5b\x3a\xf3\x62\xeb\x97\xd0\x24\x61\x4e\
+\xf0\x95\xce\xeb\xb5\xe8\x01\x64\xcf\xfa\x26\xab\xa2\xbb\x1b\xfe\
+\x12\xea\xa5\x4d\xc0\xda\x20\x17\xf1\xfd\x3d\x4a\x1f\x49\xe2\xa6\
+\xf1\x79\x3d\x8b\x5f\x9d\x0c\xe4\x63\x42\x1a\x26\x00\xc5\x54\xe4\
+\x6a\x77\x84\x4a\xf6\xeb\x83\xe8\x9e\xa9\x0c\xda\x89\xf0\x57\x82\
+\x12\xc1\xaa\x33\x91\xb4\x86\x26\x2a\xce\xad\x56\xe0\x9e\xf4\x78\
+\xa2\x29\xdb\x42\xdc\x47\x98\xf0\xca\xe1\x85\x2a\x9a\xee\x29\xa0\
+\x10\x5f\x93\xb6\x79\xb8\xd3\x05\x9d\xf4\xbc\xa7\x98\xa4\x36\xda\
+\x70\x5d\x64\x2b\x87\x80\x53\xf5\xe8\x58\xae\x26\x49\x71\xb3\x4e\
+\x54\xc5\x03\x96\x96\x41\x22\xe2\x7e\xc2\x28\x8f\x3a\x20\xe2\x7c\
+\x99\xe0\xfe\x40\x94\x14\x91\x3a\x2a\x38\xcd\x47\xc8\xa5\x2e\x92\
+\x0a\x51\x41\x5f\x62\x92\x30\x38\x89\x1d\xbe\x72\xa3\xe9\x02\x44\
+\x11\x8c\xd0\x02\x8f\xbf\xb5\xa3\xfa\x9e\xdc\xb9\xab\x74\xe5\x01\
+\xb0\x62\x47\xd9\xd8\x15\x1f\x39\xaa\x1c\x14\xd9\x3c\xde\xb1\x1f\
+\xb5\x2a\x1a\xa4\x4b\xea\x94\xed\x1e\xe8\x6a\x2d\x42\x96\xd2\x18\
+\x00\x41\x5b\xaa\x28\x9f\xca\x0f\xda\x94\x10\xa0\xd8\x51\xa9\x94\
+\x54\xb0\xb6\x63\x8e\x2a\xa3\xd7\x11\x3e\x7c\xd8\xa0\x64\xdd\x40\
+\xb8\x89\x48\xbd\xa9\x54\x85\x40\xad\xb0\x43\x4b\xf2\x26\x79\xda\
+\x71\x8c\x5f\xa6\xa3\x3c\x0d\x76\x5a\x38\x9a\x36\x26\xc7\xd0\x27\
+\xad\xd9\xcf\x0e\x91\x9f\x62\x4e\x32\xb5\x40\x2f\xa1\x25\x3c\x20\
+\x74\x6e\x70\x1f\x9f\x30\x87\x86\xaf\x58\x1a\x59\x7d\x0b\x1f\x01\
+\x2a\x11\xa9\xeb\x2c\xdc\x3e\x28\xc4\x37\x01\xa1\x8e\x86\x8a\x5a\
+\x09\x44\x29\x3a\x56\xc9\x6c\xb9\x8c\x4d\x49\xe7\xa1\x01\xd6\xd4\
+\xd6\xb2\xa8\xe8\xd3\x23\x00\x3a\x7b\x3d\x00\x65\x6e\xe2\x71\x60\
+\xf2\xfa\x9a\xd2\x85\x27\x5f\xee\x29\x98\xb2\xce\x27\x19\x3a\x0d\
+\x79\x7d\x94\x87\x16\x04\xf7\x95\x73\x38\xa5\xc3\xf3\x4f\xcc\xd4\
+\x90\x9d\x62\xe8\xfc\x23\xad\x3a\xa4\x9b\x48\x64\x46\xd1\x72\xcf\
+\x2c\x8d\x37\xc4\x62\x12\xb0\xc5\x7f\x3b\xa0\x53\xfb\xd8\x94\x04\
+\x64\x2e\xf3\xd3\xf4\xa6\xad\x18\x7b\xcc\xd4\xb6\x96\x7c\x7a\x70\
+\x5e\xbc\x86\x2a\x87\xdf\x2c\x18\xa2\x38\xd2\xf7\x7d\xfc\x00\x9e\
+\x11\x21\x6b\x42\xf1\x53\xef\xa8\x22\xe9\xc3\xaf\xb5\x0f\xad\x54\
+\xaa\x9c\x2c\x3e\x01\x32\x42\xaa\xc5\xae\xf3\x7a\xfe\x2d\xd4\x5e\
+\x68\xef\x5b\x6e\xb9\xa7\x45\x94\xdc\x13\x3c\x2a\x19\xad\xd0\x9a\
+\x58\xe2\x22\xf6\xa4\x67\x2a\x23\x77\x8f\x97\xc3\x9b\x6e\x7e\x11\
+\x90\x8c\x92\xfb\x74\x8e\xc5\xe5\x3e\xea\x75\x35\x97\xe6\x25\xde\
+\xe2\xf1\xe3\x3a\x2e\x82\x64\xc4\x21\xe9\x13\x18\xf1\xf8\x8f\x74\
+\x79\xd4\x71\x15\x97\x7b\x03\x30\x6e\xc5\xd6\x06\x25\x39\x88\x54\
+\x20\xd3\x2e\x54\xf3\x53\x48\x2d\x4a\x11\x47\x23\x88\x64\x4c\xae\
+\xf2\xf4\x15\x77\xac\x8d\x26\xaa\x68\xac\x51\x44\xaa\xf6\xc3\xd2\
+\x2d\x5a\x0a\xb3\x80\x65\xa1\x27\x9a\x72\xa7\x13\x7e\xb4\x47\x65\
+\x1d\xae\x8f\xed\x41\x25\x05\xe2\x11\x10\x45\xbc\x11\x5e\x55\x15\
+\x3e\xd8\x5f\x10\x28\x28\x1f\x18\x80\x83\x57\xf8\x28\x76\xa6\xe3\
+\x51\x89\xf0\x9b\xd2\x98\xc9\xfb\x4c\xe6\x17\x93\x51\x50\xd2\x5d\
+\x34\x77\xd4\xfe\x00\xce\x31\xed\xed\x95\x01\x08\x0f\xad\xf5\x95\
+\x9a\xa0\x25\x7e\x89\xe6\xe6\x69\x76\x2a\x3d\x55\xee\x89\x2d\xde\
+\x81\xf4\x5a\x35\x80\x50\x49\x47\x3b\x1b\x7e\x83\x1e\x1b\x3b\x43\
+\x2d\xcb\xa8\x15\x1f\xde\x75\xb8\x0f\xae\x7c\x69\x16\x6a\x28\xbd\
+\xe2\xf9\xa3\xa1\x31\xe9\xe0\x09\xa4\xff\x3d\x38\xae\xf8\xca\xf7\
+\x17\x82\x93\x43\x66\x04\x5b\xe9\x6c\x44\x69\xa9\x6a\x2a\xd1\x79\
+\x53\x74\x8e\x55\xc7\xa3\x71\xff\x68\x6a\x9f\xc9\xde\x68\x4e\x38\
+\xeb\x61\xcf\x77\x84\x9d\xbc\xd5\x14\xee\x34\x45\xbb\x4c\x71\xda\
+\x34\x2e\xca\x53\x21\x1e\x7e\xa4\xfd\x68\x41\x0c\x15\xb8\x60\x4f\
+\x37\x2d\xe2\x01\xc0\x0e\x67\x20\xb2\xdb\x90\x27\x12\xbc\xd8\x8f\
+\xb2\xa5\x8b\x92\x86\x6b\xfd\x84\x02\x2b\xa4\x37\x1b\xd2\xdb\xf6\
+\x54\x1a\x7f\xcc\x01\xbd\x79\x00\xc2\x0f\xba\xf3\x94\x6e\x0a\x5b\
+\x4b\xd2\xd4\x80\xb0\x37\x8f\x8e\xb3\xfd\xba\xf1\x68\x33\xa1\xa0\
+\xe2\xa2\x78\x36\x11\x9c\x79\x58\xbd\xbb\x0f\x56\x0f\x28\x99\x99\
+\x9a\xa5\xf1\x26\xa3\x40\x95\xea\x43\x86\xef\x2c\x53\xec\x1c\x1b\
+\x8f\x4e\xf3\x86\x98\xc0\x0c\x92\x3b\x6e\x7b\xfb\xe7\x3f\x3a\x6c\
+\xd0\x07\x86\xb2\xf8\x35\x4c\x01\x18\xe6\xca\x71\xa9\x24\xcd\x50\
+\xd9\x0f\x39\xd4\x74\x22\x81\x9b\xde\x66\xa2\xf2\x78\x54\x23\x8b\
+\xcd\x69\xfc\x1c\x67\xf7\xc2\xf3\xcb\x31\x8d\x8f\x47\xd5\x06\x0e\
+\x71\xd2\x37\xfc\x9e\x6e\x7b\xd2\x00\x8b\x78\xdb\x96\x64\xae\x0d\
+\x4a\x62\x66\x39\xff\x1f\x99\xbd\xea\x78\x8c\xfb\x47\x63\xe2\x31\
+\x4a\x8a\xa7\xb2\x73\x27\x3b\x63\x22\x7e\x4e\xe5\x25\x8e\x4a\xda\
+\xbd\x70\x54\x77\x3b\xea\xca\x78\xba\x2d\x53\x8f\x4c\xf4\xb6\x6b\
+\xb1\x7d\x98\xa8\x06\x7c\xaa\x0f\x1f\x5f\x7a\xe8\x34\xa2\xc4\x77\
+\xe5\xc5\xf6\x19\x3c\x08\x94\x6d\x49\x80\x8e\x8f\x47\xc3\xce\xe1\
+\x82\x9b\x72\xa9\x4b\x4b\xb1\x35\x57\xeb\x52\x11\x04\x25\x78\xe4\
+\x8a\xa2\xbd\xa8\x40\x8a\x53\x20\xc0\x41\x65\xee\x56\x91\xf3\xf8\
+\x99\xe8\x41\xed\xa9\x90\x5e\x22\xb7\xd5\xe4\x71\xb4\x96\xd8\xa9\
+\x66\x73\xf2\x4f\x32\x96\x12\x92\xaa\xc1\xe8\x55\x32\x0b\x35\x10\
+\x11\xa7\x0f\xd5\x73\x4b\xc4\xd3\xe9\x74\x3c\x5a\xa8\xa1\x3f\x21\
+\xd5\x61\x54\x02\x4f\x72\x7a\x7b\xca\x43\xb5\xd9\xe4\x65\xaa\xeb\
+\x98\xcc\x3e\xb5\x0d\x8e\x97\x82\x2a\x91\xb3\x3e\xc9\x86\x56\x2f\
+\x77\x6a\xf9\x14\xb4\x31\xb5\x79\xe6\x30\xcd\xf2\x55\xe7\xd6\xbb\
+\x80\xb2\x0b\x34\xbe\xe5\x2d\x91\xdb\xab\x09\xa4\xb9\xbf\x73\x07\
+\x4f\xc8\xd4\x60\x82\xb3\x70\x36\x6c\xd2\xe2\x59\xbe\xf6\x46\x94\
+\x48\x30\xa1\xc4\xe0\x0c\xe3\xbc\xa6\xee\xd2\x61\xff\xc9\x20\x1b\
+\x7a\x84\x37\x0a\x9f\x26\x64\x27\x59\xea\xa0\x92\x8e\x2a\xc1\x67\
+\x3c\x55\x03\x60\x66\xda\x41\x75\xbd\xb1\x2f\xe9\x95\xa9\x99\x5e\
+\x9b\x74\x57\x01\x59\xbd\x3f\x70\x5a\x3c\x54\xdc\x49\x88\x20\xa3\
+\x71\x15\xe9\x69\xbe\xfe\x18\xe7\xe9\xb7\x5c\x1a\xe5\x23\xa0\x9e\
+\xda\xe8\x0b\xde\xaf\x8f\x67\x63\x87\x4b\x68\x28\x77\x40\xc9\x9e\
+\xb4\xc6\x4b\x9d\xad\x4f\xe3\xec\x32\xd2\x53\x2f\x9d\x32\x15\xaf\
+\xcf\xd6\xe9\x31\x4a\xf1\xca\x14\x2e\x4a\x78\xfb\xfb\xf5\x48\x85\
+\x7f\x5e\xa0\x44\x9f\x1f\x13\xc3\x25\x8c\xf0\xf6\x8d\x09\x8f\x04\
+\x9f\x3c\x32\x40\xef\x68\x06\x76\x9f\xd8\xb7\xf3\xc7\x7a\x2a\xe1\
+\x13\x52\x9c\x91\x8b\xac\x8d\xd2\x7a\xf9\xd2\x31\x09\x8f\xc5\x2e\
+\x15\x47\x23\xe1\xff\x16\x9c\xf6\xee\x27\xe2\xd1\x68\xb3\x01\xd7\
+\x7a\x8a\x48\x7b\x08\x53\x82\x27\xae\xe4\x45\x2e\x2a\xda\xaf\xaf\
+\x3d\x98\x99\xaf\xa5\x6d\xb8\x4a\xb1\x24\x1a\xf9\xb2\xc1\xc6\xe8\
+\xe7\x0d\xdb\xc9\x41\x00\x7a\x9c\x2f\x13\x32\x94\x81\xaa\x6d\xf0\
+\x9c\x57\x50\xbd\x15\x26\x47\x82\x6b\x3e\x65\xcd\xc1\x93\xa7\x9f\
+\x40\xb2\x2e\xd1\x14\xef\xee\x3b\x8f\xde\xb8\x7d\x61\xd0\x31\x9f\
+\xf1\x68\x05\x0d\x93\x36\x6d\x81\x95\x7a\x40\x32\x2f\x4c\xbc\x82\
+\x0a\x54\x9d\x92\x00\xbe\xb0\x40\xc6\x0e\x0a\xe8\xd4\x6b\x8f\xba\
+\x36\x8c\xf2\x00\x6b\x33\xcf\x92\x87\xac\x35\x52\x2a\x3c\xf4\x0a\
+\x16\xbb\x6e\x27\x92\x43\x18\xda\x37\x55\x5e\xfe\x41\x0e\x2a\xdc\
+\x0c\x65\xa0\xe7\x6e\x38\xff\x1f\x4c\x95\xf8\x27\x33\x08\x52\xd6\
+\xa6\x36\x7b\x7b\x5d\x71\xd6\xee\x9e\x66\x3b\xf2\xf4\x0f\xe5\xee\
+\xd1\x96\x08\xac\xee\x22\xd3\xbd\x1a\x08\x52\x9f\xbc\x62\xfd\xdc\
+\x70\xef\x68\x84\xc3\xaf\x3c\xab\x77\x77\xd7\xca\x7c\xc3\x17\x0e\
+\x3f\xbb\x54\xa2\x6f\x69\x63\x2a\x88\xa1\x05\x5e\xc2\xd2\x9c\xa7\
+\xf9\xca\x39\x31\x40\x1c\x9e\x67\x2a\x69\xe6\x4f\x5c\x25\x41\xa8\
+\xbf\x2d\x33\x11\x16\xca\x8c\x5b\x20\x1c\x37\x4f\xdd\x70\xd4\xe1\
+\x23\xa8\x74\x0a\x43\xdf\xc9\x8d\x05\xe1\xf0\x34\x22\x6d\x4a\x20\
+\x79\x75\x78\x59\x53\x45\x27\x42\x69\x8a\x7b\x5c\xcb\x03\xab\xbf\
+\x6b\x91\xe9\xc1\x86\x96\x7d\xf7\x0b\x3c\xc4\xeb\x2f\xcb\xb8\x23\
+\x57\x5b\x93\x93\xbc\xb0\x15\x89\x4c\x09\xde\x14\x94\x84\x58\x01\
+\xe8\xb8\x92\x0e\x99\xfd\x5f\xb9\xe9\xb8\x73\xe6\xbd\xb1\xe3\xa3\
+\xec\x76\x7f\xe6\x0d\xf0\xea\x75\xe3\xf1\xc8\x2a\x6e\x26\x05\x05\
+\xa4\xb1\xe8\x45\xe6\x45\x98\x89\x94\xfa\xc8\x00\x2c\xa5\x02\x52\
+\xbc\xe8\xad\xaf\xb9\x7d\xc7\xbe\xc1\xb1\xa0\xa4\x8a\xa3\x13\xa2\
+\x15\x8b\x07\x3a\x8c\x72\x7c\x0d\x3f\x15\x96\x00\x50\xbc\xf3\xc4\
+\xe1\x30\xe9\x7b\xc3\x29\x25\xf0\x1b\x85\x24\xf0\x54\x45\x9e\x65\
+\x5f\x85\x11\x9c\xda\x9a\x4e\xb5\x03\x18\x57\x6f\x5e\x6d\xde\x93\
+\xa2\xa4\xf1\x78\xe4\xa2\x60\xa4\x78\x2b\xd1\x4b\x75\xbc\x8e\x04\
+\x0f\xf8\xc0\xa2\x90\xca\x4f\x6f\xd8\x80\x7d\x3a\x82\xd3\xde\x14\
+\xe6\xfd\x0e\x28\x69\xcf\x83\xd9\x35\x48\x2f\x38\xec\x8b\x4b\xad\
+\x8b\xac\x6e\xec\xce\x14\x47\xd3\xe5\xfb\x18\x66\xa1\x36\x9a\xd8\
+\x9e\x94\x83\x2a\x2b\xda\xbc\xa9\x36\x5c\x61\x6c\x17\x66\x77\x57\
+\x3a\xb5\x93\xa5\xfe\x5c\x54\xd2\x4c\x8d\xff\x98\xb0\xdf\xd3\xa0\
+\xa4\x85\xe2\xa8\x30\x34\x4c\x47\x10\x2a\xa3\xcd\x55\x63\x41\x2e\
+\x1c\xd5\x33\x92\x2d\x3d\x7d\xb4\x9d\x01\x36\x1a\xed\xab\x83\x61\
+\x15\x7e\x40\x92\xdd\x0b\x33\xb9\xa2\xf1\x69\x5d\x43\x53\xa1\x92\
+\x6a\x8c\x85\xdc\x32\x85\xb2\xe7\xf3\x53\x80\x06\xc9\x32\x1f\x60\
+\x05\xa4\x97\xd1\xd8\xdc\x86\x8f\x13\x63\x27\x46\xfa\x72\xa7\xa4\
+\x99\x72\xf8\xf0\x74\x2f\x85\x3e\x26\xd5\x01\x91\x4c\x46\xa8\xee\
+\xa8\x55\x14\x58\x2a\x3a\x0a\x48\x99\x9b\x70\x13\x47\xef\xc3\xa9\
+\xc3\xaf\xef\x28\x97\x1f\xcc\x47\xbe\x16\xb6\xae\xc9\x93\xca\xe4\
+\x17\x03\xf4\x2d\xb0\x67\x94\x29\x8e\xa6\xcb\x64\xc4\x50\xae\x3c\
+\x22\x52\xad\xa3\xb9\xea\xc4\x16\x43\x5a\x31\xb9\x38\x37\x85\x03\
+\x67\x2b\x07\x72\xc5\x0a\x67\x4c\xa8\xa4\x10\x37\x5b\x25\xbd\x66\
+\x46\x80\xf2\x90\x37\x51\x52\xed\xf0\x95\x6a\x8a\xd5\xa7\xdc\x13\
+\xf0\x94\x74\x14\xb5\x34\x97\xe3\x96\x78\x55\x2b\x4e\x5b\x7a\x3d\
+\xcc\x8b\xca\x0d\xc8\xff\xfd\x8f\xc9\xf5\x46\x63\x8f\x3d\x61\x45\
+\x99\x50\xd2\x25\xc8\x44\xbb\x5d\x1e\x50\x04\x61\x49\xa8\xa4\x02\
+\x53\x6b\x6a\xaa\x46\xa6\x9a\x1f\x64\x6b\xb9\xd0\xe7\xd6\x79\x44\
+\xee\x7b\x47\x4e\x49\xff\x6b\x52\x26\x10\xff\x89\x75\xfd\x02\xf5\
+\xe5\x6e\xb9\x67\x86\xe2\x3d\x61\x80\x1a\x25\x1d\x4d\x0e\x26\x3e\
+\xf3\x91\x7b\xa7\xe6\x8e\x59\x11\x0e\x4a\x05\x78\x52\x7b\x12\xc1\
+\x4b\x4f\x09\x22\xd5\x7d\x3a\xc2\x51\x91\x7e\xbd\x02\x66\xab\x76\
+\x2c\x18\xa1\xd7\x03\x50\x42\x7a\xed\xc8\x2a\x69\x4f\x1b\x93\xd1\
+\x53\x52\xd2\x2b\xb1\x5f\x60\x73\x09\x1c\xc5\x08\x8a\x48\x4a\x0f\
+\x52\xc5\x07\x62\xb8\x1c\x3c\xeb\xe2\x78\xc5\xa3\x3f\x2a\x1e\x39\
+\xbe\xfa\x4d\xc1\x6c\xd7\x73\x6a\x51\x51\xe7\x49\x37\x75\xb4\xcb\
+\x87\x22\xc9\x67\x20\x73\x92\xa1\xdc\x13\x89\xde\x51\xd6\x51\xc5\
+\x52\xd5\x54\x02\x6e\x1e\xf5\x54\xac\x1e\xed\x9e\x07\x7d\xc9\x28\
+\xe4\xb9\x75\x77\x6c\xd9\x7a\x60\x19\xb8\x82\x4f\xe5\xa5\xa4\x76\
+\xbf\x90\xe5\xbe\x4b\x50\x27\xa6\x3f\x62\x62\x6a\x9f\x56\x3e\x72\
+\xbd\xf3\xa3\x71\x43\x11\x7c\x44\x89\x08\x4d\x2a\x81\x07\xf3\x10\
+\x86\xfa\x06\x74\xf8\x7b\x9f\xbb\xee\x3a\x54\x52\xc2\x69\x86\xd3\
+\xb6\x8a\xba\x5c\x7b\x0e\xc4\xca\x7d\x96\xbc\x53\x52\x59\xee\x41\
+\x41\x7f\xf5\x94\x96\xc1\xaa\x8d\x97\x2c\xb5\xda\x10\x38\xc7\x5d\
+\x84\xe1\xc0\x69\xed\x9f\xc0\xd7\x03\xd2\xa8\x55\x63\xc3\x87\x8f\
+\x36\x4c\x9b\xdb\x55\xc3\x5a\x8f\x63\xec\xb6\x0c\xd1\xed\x67\xf7\
+\xc1\xea\x9e\xa3\xe8\x4b\xf2\xa4\x3d\xe4\x27\x5c\x24\x73\xc8\x45\
+\x6d\x9a\xd7\xa2\xbe\xa7\xa6\x67\x4f\x85\x84\x4f\xa4\xa3\x31\x4f\
+\x81\xab\x2a\xb3\x43\xb8\x9f\x7e\x0a\xa1\xdd\xd9\x03\x96\x1e\x01\
+\x38\x37\x01\x4e\x58\x99\xf6\x5a\x91\xae\xe9\x78\x39\x3d\x2e\xf7\
+\xdd\x0d\x2f\xbf\xec\xd2\x0d\xb0\x80\x9e\x4d\x9c\xdc\xf4\xa0\x9d\
+\xbb\x4d\x8b\xd3\x98\x52\x1e\xfd\xc6\x1c\x35\xa0\x98\xa3\x05\x49\
+\xbe\xda\xb0\xd7\x02\x7d\xd9\x08\x81\x1e\x9c\xa9\x4a\x56\xd2\xdd\
+\x1d\x09\x9f\xee\xb1\x9d\x34\x43\x1e\x96\xda\xce\xac\x92\x4e\xbe\
+\xed\x70\xd0\xc9\xa9\x7f\xb7\x48\x4f\x9d\x34\xea\xb1\xd1\x80\x6c\
+\x15\xed\x78\x1b\x3c\x79\x6c\x3d\x5d\x2a\xf1\x7b\xb4\x40\xfa\xcf\
+\x5d\x67\x1c\xe5\x29\x4d\x03\xf4\xcc\x45\x04\x7a\x55\x1f\xac\xe9\
+\x1d\xc0\x99\x61\x21\x61\xde\xe9\xa0\x93\x35\xb3\xb4\xab\x8c\x7b\
+\x4b\xb3\x6b\x91\x5e\xdc\xef\xb7\x7a\x89\xd2\xb8\x40\x8c\x5a\xde\
+\x14\x54\x04\xa9\xdb\x35\xaa\x57\x2f\x03\x68\xeb\xfa\xd6\xe4\xef\
+\xdf\x73\xe1\x95\xab\xad\x63\x77\x4a\x0a\x9e\x74\xf5\x50\x46\xa7\
+\xb9\xb4\x6e\xa1\xe7\x18\x6a\x22\x41\x65\xdd\x73\x0b\x2d\xa9\x97\
+\xa4\x67\x8d\xfb\x0e\x5f\xd6\x26\x65\xf5\xb9\x1e\x46\xc7\xc6\x84\
+\x3c\x5c\x36\x04\xff\x54\xf4\x3b\xdf\x70\x4a\x0a\xd5\x87\xc3\x61\
+\x98\x61\x25\x63\x3d\x2d\x03\x47\xc3\xc2\xc0\x5c\x7e\xf6\xdc\x68\
+\xa4\xac\xfb\x8e\x85\x41\x09\x6e\x34\x1e\x57\x91\x5e\x42\x8b\x02\
+\x1f\xed\x47\xa5\xed\xe9\xe7\xaf\x38\x73\xdb\x45\xaf\x00\x98\xf9\
+\x5a\xe2\xc9\xe3\x05\x3a\xd2\x3f\x1b\x81\x92\x8a\x27\xbd\x33\x2f\
+\x89\x56\xcc\xc1\xc0\x79\x23\x7a\xf0\xa0\x40\x68\x38\xfb\x96\x5a\
+\x39\xcd\x75\x4d\x8e\xff\x48\xf7\xe3\x8a\xdd\x93\xec\x73\xb4\xf9\
+\xb5\xdf\x3c\x06\x87\x7b\x9e\x64\xb0\x1a\x03\x32\xdc\x74\xf3\xd0\
+\x6b\x4c\x96\x26\x9d\x92\x96\xe4\x49\xd7\x75\x38\x6c\x86\x3c\xf9\
+\xe3\x4b\xb6\x36\xbe\x9e\xfe\xfa\x84\x05\x39\x98\x29\x64\x84\xbb\
+\x54\xf0\xd3\xed\x44\x5a\xf4\x28\xf8\x86\x4a\x43\x0d\xc1\x04\x6c\
+\xa4\xd1\x6b\xac\xfc\xd7\xfe\xc5\x60\x25\x28\x29\x46\x4f\xb5\xb5\
+\xec\xb9\x61\xc5\x4a\xba\xb8\xa9\xc6\x40\xef\xb5\x4e\x49\x1a\xd6\
+\x83\xbe\xdd\x26\x00\xe7\x5d\x43\x20\x61\xec\xa8\xe0\xec\xf2\x1f\
+\xb7\x4c\x9f\xb9\x13\x1b\x22\x1d\x15\xb9\x7f\xe8\xa6\x7b\x26\xbf\
+\x72\xf5\x7a\xc4\x88\x19\xed\xda\x3a\x37\xe0\x5e\x8b\x4a\xea\x22\
+\xd2\x33\x58\x49\x61\xb9\x37\xb4\xe6\xaf\xf7\x96\x2b\x3e\x7f\xbe\
+\x9b\xf7\x7c\xc7\xd0\x85\x7a\x1b\x3e\xf8\xd9\x7d\xfd\x4e\x51\xea\
+\x02\xa9\xcb\x9c\x20\x30\xd5\x50\xc5\x94\xb4\xf8\x03\x1d\xbd\xfc\
+\xfe\x49\x8b\x6e\x13\x95\x31\xf6\x20\xd2\xd9\x86\xed\xd6\xd8\x26\
+\x4a\x6a\xa0\xee\x05\x25\x6d\x55\x86\x78\xb9\x1f\xb1\x79\x6f\x1c\
+\xb6\x32\x47\x86\xc9\xfe\xc0\xcc\x2e\x2a\xa8\xa3\x64\x07\x44\x9c\
+\xd4\x73\x44\x8a\xb4\x76\xd2\x0f\x11\x6e\x7f\x7c\xd7\xe0\x3d\x6f\
+\xfe\x21\x00\x78\xc4\xfa\xfc\x4f\x24\x95\xd4\x50\xf9\xdc\x62\x40\
+\x07\x86\x33\x3c\xbb\x9f\x07\x93\x65\xac\x9e\xbc\x17\x9a\xee\x24\
+\x6b\x0a\x4e\x65\xf9\x05\xe9\xe8\x05\x9e\x23\xb9\x7d\xd8\x6f\xe5\
+\x96\x8e\x03\xe1\xcf\x58\xa4\xc7\x83\x92\x82\xd9\xe7\x55\x39\x09\
+\x9e\xd4\xc0\xfc\xfc\x5d\x23\x0d\x73\xfe\x8e\x61\x87\x0b\xb8\xe1\
+\x0c\x6f\x44\x8b\x08\xe3\xde\xbc\x56\x28\x76\xb9\x00\xa8\xbd\xd6\
+\x1e\xcd\x38\xef\x1e\xce\xe4\x48\x5f\x83\x2a\x81\x05\x4a\x4a\x5a\
+\xd9\xeb\x0a\x60\xf5\xe6\x1b\xbe\x4e\x7f\x8d\xe9\xa1\xd5\x38\x7f\
+\xd3\xce\x00\xa6\x94\xa9\x1c\x37\xd6\xd3\x5e\xdd\x78\x78\x7f\x58\
+\x19\x2f\xf4\x81\x01\xa2\xcb\xcf\x79\xd3\xed\xae\xa0\x39\xec\xc8\
+\x5f\x42\x70\x07\x49\x8c\x96\xbe\xda\x7e\x1d\xd6\x03\x9c\x1f\x25\
+\x2e\x5e\xf8\x7d\xd4\xcf\x87\xf6\x9d\xf6\xee\xdb\xb6\x3f\xfa\xc0\
+\xb0\x53\x64\x44\x96\x95\xc0\x50\x01\x0a\x0f\x25\x24\xd1\x96\x18\
+\x80\x6c\xc5\x7e\x34\xca\x45\x9a\x2d\xd0\xd3\x4f\x0d\x65\x00\xe9\
+\x13\xa0\x09\x7d\x52\xd2\x75\x1d\xbb\x6f\x73\xc2\xbc\x94\xe3\xce\
+\x81\xa2\xdd\xcd\x3b\x76\x15\x65\x96\xd7\x54\xd0\x29\x4b\xa7\xa3\
+\x6a\xfa\x2c\xf1\x14\x29\xde\x06\x4f\x77\x91\xe1\x1c\x15\x9d\x86\
+\x3e\x03\x15\x85\x7e\xce\x54\x43\x50\xdc\xb7\xb2\x7f\x1d\x20\xbd\
+\xe9\x8c\xfb\x09\x26\x74\xc9\xfd\xcb\x0f\xb6\xec\x30\x2e\xa8\x51\
+\xa3\xbf\xf7\x4a\x25\x24\xf5\x0c\x7f\xd9\x93\x22\x4b\x63\x1d\x6d\
+\x79\xc9\xb2\xb6\xfc\x30\x28\x39\x05\x80\x76\xa4\x25\xf7\x9b\xa0\
+\xb3\x00\xf4\xc7\x2a\x73\xb8\xdb\xc2\xbc\xca\x0c\x7f\xaf\xf2\x3c\
+\x18\x94\x4a\x24\x47\x5a\x44\x4d\x27\x88\xa5\x13\x29\xf7\xa4\xfb\
+\x89\xc6\xc7\xa3\x66\xaa\x3c\xb8\xc1\x19\x89\x9e\x8e\x00\x63\xea\
+\xd4\x96\x5e\x14\x9c\x53\x8f\x3f\x70\xc4\x66\x53\xfe\x9c\xd1\x6d\
+\x99\x99\x7f\xc9\x9f\xeb\x10\x1d\x45\xac\x70\x75\x0f\x1d\x94\x14\
+\x2a\xb1\x57\x7f\x7c\xd7\x8a\x75\xee\x11\x2e\x3c\x1e\x69\x51\xfd\
+\xe7\xae\x9e\x6b\x7d\xf9\x18\xc5\x42\xf3\x3b\x86\x79\xdd\x6c\x24\
+\x6b\xe3\xd1\x9f\xb0\x2f\xc7\xcd\x1f\x4d\x6f\xdf\x8c\x3d\xb6\xae\
+\x07\xe2\x43\xc6\xb3\xfe\x92\x1c\xe8\x1d\x27\x02\xac\xcf\x0e\x6a\
+\xa4\x9b\xd6\x3c\x64\xb2\xa5\x55\x5b\x87\x4b\x05\xef\x87\x6b\xd2\
+\xa7\x42\x01\x62\x6a\xfe\x68\xfa\xfc\x4d\x4b\xa7\x76\x02\x50\x7e\
+\x18\x28\xfe\xfd\x95\x1f\x3e\xb6\xed\x4b\xcf\xe2\x52\x35\x3b\x68\
+\xd5\x4c\xa7\x99\xb9\xd4\x4b\x9d\xc2\x95\xf1\xd3\x27\xac\x43\x46\
+\x66\x63\x1b\xb4\xa2\xf6\xf6\x06\x99\x53\x2c\xff\x70\xd2\xd7\xbb\
+\x9c\x31\x8f\xfc\x05\xb1\x13\x96\x9c\x2b\xda\x08\xaf\xea\x74\xa3\
+\xab\xcf\xd9\x2c\x3a\x6f\xc9\x57\xba\xa7\x24\x92\x7c\xd8\x54\xd2\
+\x80\x18\xef\x78\xc4\x27\x01\x46\x27\x2a\x3d\x01\x58\xfa\xab\xe0\
+\xf6\x43\x13\xfa\xcf\x2c\x71\xe4\xee\x50\xf3\x47\xc5\x3d\x05\x79\
+\x48\xbc\x65\x0f\x4a\x4a\x0c\x1d\xcd\x1e\x66\x56\x29\xcd\x4e\xc0\
+\x2a\xfa\x69\x91\x0a\xd4\x4c\xba\xdb\xb3\x8c\x60\xfe\x3f\xe6\x8f\
+\xaa\xb2\x93\x7f\xb1\x2f\x65\xa0\xa0\xa4\x77\xbe\x7b\xe3\xca\x95\
+\xab\xd7\xdd\xbe\x30\x9c\xe1\x3a\xa9\xae\x39\x3b\x91\xcb\xb0\x71\
+\xbd\x85\x63\xc1\xa2\x7b\x4a\xd9\xfc\xb8\x5e\x7c\xa9\x3e\x68\x0d\
+\x45\xa4\x7a\x32\x36\x28\xe9\xdd\x9d\xbc\xd1\xe9\x77\x66\x1a\xc1\
+\xbc\xe9\x2a\x9a\x3e\x6b\x6f\xe9\x7d\x51\x23\xbc\xc5\xee\x7f\xfd\
+\xf9\xa3\x96\x5a\x0a\xa5\x62\xa9\x20\xad\x9d\x27\x9d\xf5\x17\x51\
+\x9f\x2a\x2c\xe5\x12\xc9\x66\x7d\xdc\x44\x8a\x5c\xcd\x12\x83\xa9\
+\xa4\x2d\x33\x0c\xf3\x30\x72\x4e\xfb\x51\x45\xf5\x33\x26\xd1\xd9\
+\x33\x2c\xb8\xfe\x10\x9e\xaf\xaf\x62\xa4\x95\xc6\xa8\x8e\x08\x65\
+\x89\x39\x35\xda\xdd\xeb\x29\x6f\xcd\xf4\x36\x53\x02\xe9\x36\x6b\
+\x49\x7f\xdb\x90\xbc\x3e\x3c\x80\x81\x30\x65\x76\x7b\xd2\xec\x05\
+\x6a\x3c\x22\x55\x4b\x3e\xfe\x2b\x18\x61\xb1\x24\x6d\xfa\xcb\x2d\
+\xd0\x2d\x1d\x84\xa9\xaa\xce\xfc\x87\x25\x34\x4b\x45\xf2\xd8\x3a\
+\xe8\x9d\x63\x55\xf3\x9e\xb4\xed\x87\xb2\x8f\x39\x4a\xf8\xd8\x8e\
+\xf4\xd4\xe1\x79\xc8\x39\x5e\xf5\xbb\x57\xdc\x94\xe7\xaa\x3c\xca\
+\xc2\xb7\x54\x0b\x57\xd3\xc7\x57\xe5\xe0\x95\x66\x29\x5f\xe3\xfd\
+\x68\x32\x67\x6a\x44\x4a\x6a\x3d\xe9\x9c\xcd\x28\x47\x97\x80\xe4\
+\x73\x0f\x24\xf2\x95\x51\x8a\xc7\x97\x4d\x26\xb6\x7a\xff\xef\xdf\
+\xc4\xcd\x8e\x81\x3d\xa5\x47\x2b\x44\x03\x7f\x04\xec\x13\xdb\x64\
+\x6d\x9a\xed\xa7\x8e\x33\x45\x62\xd7\x27\x9a\x32\xf6\xa5\x6c\x4e\
+\x91\xdd\x8f\x9f\xed\xa8\xa2\xd1\xa8\xdd\x51\xb0\xd6\xf5\xd4\x68\
+\xe4\x25\x79\xa9\x33\x77\x25\xfe\x45\x21\x0d\x56\x4f\xf3\xf5\x54\
+\x34\xd3\xf3\x47\xf5\x21\x0c\x7d\x9e\x29\xb2\x25\xbd\xdd\xa0\x6a\
+\x64\xcf\x73\x40\x32\x5a\xb3\x7d\x38\x43\x38\x8b\xc4\x80\xbf\x0a\
+\xa7\xb8\x07\x6d\x99\xed\xd0\x47\xbd\xe4\xfc\xd1\x43\x8e\xfa\x4a\
+\xeb\x67\x6e\xb2\xfb\xd1\x08\xaa\x5a\x3b\x16\x06\xd7\xf7\xf2\xe8\
+\x28\x9b\x34\x3a\xa2\x6e\x02\x47\x43\x12\xa4\x40\xbf\xee\xfc\x51\
+\xd8\x64\x8a\xfb\xf0\xc9\x43\x31\x4b\x73\x7b\xdd\x74\xe4\xba\x4d\
+\x26\xc7\xe8\xcb\xdf\xe7\xfa\xbf\xca\xce\xdd\x55\xb2\xac\x0a\xe3\
+\xbe\xea\x3c\x76\x75\xdd\xe6\xf6\xbd\xed\x5c\x54\x1a\xbb\x07\xc4\
+\x99\x40\xc5\x69\x1d\x75\x50\x26\x52\x04\x15\x44\xc4\x89\xd4\x44\
+\x06\xf1\x89\x18\x34\x46\x62\x20\x9a\x75\x64\x24\x18\x0a\xc2\x80\
+\x99\x68\x26\x9a\x75\xa0\xe1\x04\x82\x30\xa1\x88\x7f\x83\x5d\xfb\
+\x7c\xac\xc7\xf9\xed\x25\xed\xa9\x5b\x75\x1a\x3a\x59\xac\xbd\xd7\
+\xf3\xf1\xad\x1d\x95\x4d\x2e\xc9\x22\x8b\x4f\x78\x5c\x49\xba\x8f\
+\xe1\x14\xd0\x44\xc4\x71\x1e\x3e\x81\x9f\xb9\xbe\x7c\xfb\xf6\x69\
+\x8e\x86\x49\x1c\x05\xd4\x57\x6b\x40\xf8\x8b\xb8\x79\xd6\xd7\x5e\
+\xe1\x8f\x12\xd7\xf3\xc4\x4e\x57\xf1\x34\x8d\x8a\x5c\x76\x32\xe3\
+\xec\x32\x14\xbe\xce\x9d\xc3\xc0\x6b\xda\x73\xa7\x63\x97\x4a\x3d\
+\xd4\xf8\xa3\x41\x92\x14\x85\x96\x58\x15\x11\xc8\x79\x12\xa5\xf6\
+\xc0\x84\xae\x69\xb0\x65\x3c\x77\x65\xc8\xd8\x52\x4e\x87\x1a\x7f\
+\x94\xe1\xb2\x17\xc2\xe7\x84\x38\x3d\xc7\x51\x11\x14\x6e\x6d\x2e\
+\x94\xa0\xae\xa2\xd6\x31\x8a\x08\xf3\xa6\x04\x44\xe6\x28\xf1\x47\
+\x99\x80\xe0\x70\xbd\xde\xa9\xba\x9c\x79\xca\x93\x77\x28\xaa\xd5\
+\x26\x99\x9c\xaf\x87\x10\xdf\x05\xc7\xb9\xc6\x1f\xa5\xc2\x67\xb0\
+\x5c\xef\xaf\xcf\x1b\x65\x06\xb3\x96\x11\x15\xbd\x98\x61\xe5\x90\
+\x35\x81\x08\x6b\xac\xf1\x5b\xc8\x3e\x68\x4d\x30\x8f\xdd\x4b\x62\
+\x9d\xa5\x9c\xb1\x6e\x24\xd7\xa7\x6b\x9d\x58\xce\xd9\x82\xd2\x74\
+\xf4\x27\x78\x79\xb5\xd2\x4f\x8b\x4d\xdd\x32\x71\x0e\x43\x7c\x64\
+\xb4\x9c\x31\x6a\xe8\x91\xf2\x91\xd4\xe3\xe4\xfb\xc7\x19\x6a\x39\
+\x1d\xce\x82\xbb\xad\x17\x75\x59\x45\x61\x38\xf0\xe0\x98\x9e\x8a\
+\x98\x0f\x0b\x86\x6f\x6a\x8e\xa2\xbb\x5d\x74\xc6\xfc\xc3\x65\x98\
+\x17\x30\x96\x5a\x5b\x09\x9a\x86\x45\xa5\xc8\xb4\x11\x31\x0c\xde\
+\x01\x2c\xb5\x26\x54\x1c\xf5\xb3\x9f\x93\xd6\x8f\xdd\xc3\xa2\x71\
+\xce\x87\xcf\xc7\x85\x29\xba\x79\xa2\x6e\x87\x88\xff\xff\x40\xcf\
+\x92\xa1\xe2\xa4\x84\xdf\x1f\x0d\x87\x61\x2d\x57\xf2\x47\xf2\x1e\
+\x04\x22\xba\x66\xf0\xf6\x24\x4d\x84\xa3\xa2\x7a\x82\x0d\x15\x47\
+\x01\x43\x39\xe7\xe5\x5c\x40\xff\xc8\x92\x8f\x87\xe0\xed\xba\xa1\
+\xcf\x06\x8f\x9c\xb0\x67\x85\x8f\xdb\x7f\x37\x32\x8f\x49\x8f\x8a\
+\xd2\x61\xf7\xb0\xa2\x65\xc1\x64\x6e\xdc\xc5\xa0\x25\x70\x9c\x31\
+\x72\x37\x1e\x65\x2b\xa6\x18\x6d\x67\x07\xcd\xa7\x1f\xfd\xdc\xa6\
+\x1d\x9d\x4d\x74\xae\x46\x22\x60\xde\x00\x00\x11\x79\x9a\xe3\x25\
+\xc6\x4c\xbe\xb8\x3e\x36\x3a\x52\x8d\xba\x7e\x1a\xe2\xe6\xad\xd6\
+\x4a\x76\x7e\x75\xa9\x82\xa9\x27\x50\xaa\xfe\x65\x14\x8e\x13\x7a\
+\x58\x0d\x6e\x01\x93\xc8\x34\xa1\xcf\x4d\x84\x36\xc5\xa8\xe6\x27\
+\x39\x50\xfd\xe3\x6e\x73\x95\x7f\xc8\x60\xa9\xcc\x93\x10\x42\x8b\
+\xeb\x3a\x66\xbd\x33\xa4\xab\x34\xa8\x9b\xd0\xd6\x49\xdd\xab\x51\
+\x3f\xf6\xed\xcf\xfb\xf1\x2f\x28\x4b\x05\x84\x92\x18\x5b\x2d\x36\
+\xa5\xcc\xd3\x84\x6a\xe6\xae\xa3\xbe\xcc\xb6\x87\x11\xf9\xbc\x04\
+\xa2\x04\x66\x8a\x8f\xf1\x93\x9e\x67\xc3\xcd\xbb\x94\x5d\x2a\x3a\
+\x33\x9b\x06\x04\x03\x30\x15\x12\x7a\xf2\x44\x8d\x9b\x75\x26\x9f\
+\x20\x4a\x3a\xf6\xf8\x43\xf5\x94\x9e\x64\xe5\x2f\xf3\x26\x84\xd6\
+\x8f\x5f\x93\x77\xda\x1c\x19\xb2\xa3\x4d\xa7\xcf\x11\x46\xfd\x45\
+\x86\x22\x0a\xd5\x37\x07\x77\x37\xd5\xba\x0e\x89\x7c\x9c\xb9\xd3\
+\xa3\x9b\xa9\x37\x2d\x67\x5b\x0c\xe5\x2d\xce\x2f\xc3\xd4\x8b\xbc\
+\x3a\x0a\x2d\xb6\x04\xa7\x15\x3d\x9e\x2f\x41\x17\xbe\xff\x13\x5b\
+\xf9\x88\x53\x03\x99\xcf\xbe\xa8\x43\x7d\x29\x4f\x92\x57\x49\x21\
+\x41\x3a\x2a\xdd\x04\x33\x8f\x4d\x77\x2d\xaf\x91\x9a\x87\x70\x3a\
+\x74\x9b\xf5\x74\xd2\xdc\x85\x1e\xca\xd2\x60\xbc\xbe\xc4\xc3\xd7\
+\x0c\xa3\x87\xcc\xde\xdf\x1e\x81\xd1\x47\xbc\x74\x81\x0a\x35\x11\
+\xf0\xb5\x5e\x7f\x12\x24\xca\x5e\xe5\xf4\x4d\xa8\x35\xc5\x99\x50\
+\xfd\xf8\x48\x8b\x1a\xc7\xa7\x9c\x76\xf2\x08\x14\x04\x26\xb6\xba\
+\xc5\x87\xb1\x47\x8c\x47\x3c\x7c\xd9\x79\xf3\x9d\x30\x28\x64\x18\
+\xde\x6d\xca\x30\x25\x04\x01\x91\x83\xbf\xae\x69\x2c\xd8\xee\x69\
+\xa2\x92\x63\xeb\x35\x1e\xfe\x25\x86\xc1\xa5\xa5\xb2\xa1\x6f\x3e\
+\x1c\x98\x57\x73\x65\xf4\x7e\x63\xa8\x11\x49\xc7\x99\x00\x10\x22\
+\x35\xe9\xd3\x9b\x72\xe3\x95\xd0\x15\x2e\x15\x33\x61\x67\x64\xb3\
+\xa5\x67\x50\xf8\x21\x06\xa5\x97\x87\x64\x9e\xf4\x14\x00\x55\xe0\
+\x3a\x0d\xf1\xf0\xf3\x9c\x10\xb6\x09\xb5\x16\x6f\x69\x23\xfa\xb0\
+\x52\xf8\x1a\xbc\xc2\x93\x72\xf8\x2c\x89\xd9\x35\xa5\x65\x2a\xba\
+\x08\xb9\x55\x64\xd2\x37\x0a\x52\xf6\x48\x17\xc7\x7b\x5a\x85\xf7\
+\x04\xe3\x74\x91\x6d\x3e\xcf\x7e\x68\x3f\x6f\xd0\x9b\x67\x5a\x14\
+\xa5\xbb\x84\xa1\x34\x4d\xb8\xa3\xf9\xf8\x97\x0a\xef\x49\xb2\x24\
+\x62\xc7\xb5\xd0\xb1\x1e\x55\x1a\x17\x35\x11\x6f\xd5\x70\x1a\x13\
+\xdc\x7c\x9b\xc1\xd1\x12\xef\x49\xc4\x65\x04\x2d\xc2\x94\xf8\x1f\
+\x8d\x28\xb3\x8e\x8c\xeb\xb1\x46\xcc\x91\x32\xe7\x12\xda\xd1\x7f\
+\x28\xf7\xb1\x7a\xc7\xbc\x38\xd5\x68\x8d\x58\x20\x62\x71\xf0\x36\
+\x0c\x2c\xf4\x97\xf0\xb8\xac\x1b\xb5\xdc\x7b\xc3\x12\x23\x61\xfb\
+\x81\x3f\x59\xe0\xe1\xcf\x73\x59\xb2\x8d\x14\x37\x61\x2c\x60\x5b\
+\xa8\xb3\xb4\xae\x83\xba\x81\x22\x92\x8e\xe7\x9d\x89\x91\x4b\x76\
+\xe6\x0b\x90\x59\x6a\x7c\xa5\xef\xec\xed\x0f\x32\xfb\x9c\xaf\xf7\
+\x2a\x23\x59\xea\x5a\x34\x52\x59\x03\x53\x01\x26\x37\x90\x9a\xa4\
+\x9e\xab\x25\x44\x62\xfc\x5b\x4d\x96\x52\xd3\x93\x47\xcc\x3c\x78\
+\x46\x4d\x37\xaa\x2e\xb3\x6a\x0b\xa1\x37\xb1\x57\x5a\xa7\xd1\x36\
+\x89\xa3\x7e\xfa\xc0\x20\x4c\x29\x47\x64\x47\x51\x0e\xaf\xd1\x89\
+\xdc\x75\x66\x70\x27\x69\x0f\x80\x3f\x9d\xa3\x96\x21\x5d\x7c\x5e\
+\x3d\x2e\x3b\x5b\x17\xc0\xcc\x77\x22\x89\x36\x8e\x06\x2d\x10\x5a\
+\x44\x23\xde\x5b\xc0\xfd\x4c\x21\x56\x86\xb5\x77\xa1\xe7\xe8\x3a\
+\x8a\xb6\x94\x28\x7d\xa8\x9e\x4e\xf5\x72\x89\xac\x9f\xb8\x39\x50\
+\x93\x81\x53\x26\x72\x75\x8b\xd4\xe2\x9c\xfd\x21\xa5\x74\x10\x2b\
+\x9b\x2c\x11\x28\x15\xdb\x2d\x3d\x58\x22\x7e\x96\xee\x67\xb4\xa2\
+\x63\xd8\xbc\x18\x82\x72\x43\xb0\x2b\x7c\xe3\x25\x3d\x52\x7b\x71\
+\x7f\x3d\x05\x49\x92\x14\x48\xc5\x5a\x53\x28\x7c\xc4\x4c\x5c\xcf\
+\x74\x10\x53\x9d\x54\xaa\x52\x5a\x7b\x9a\x50\xc2\xbc\x65\xae\x36\
+\xf7\x9e\x68\xea\x33\x82\x52\x86\xd2\x71\xb4\x4c\x2e\xe4\x83\x83\
+\x3f\xdc\x82\x91\xf1\xf0\x75\xea\x65\xf3\x4b\xd3\x07\x4b\x9a\xe8\
+\x94\x64\x2b\xba\xa6\xdc\x83\x9b\xf9\x25\xd2\x19\x22\x65\x7a\x7b\
+\x63\x6c\xe4\x44\x21\xed\x68\xab\xf1\xf0\x93\xc6\x27\x04\x44\x94\
+\x79\x56\xc3\x76\x8d\xae\xc0\xcd\x3b\xf1\xd4\x1d\x22\x37\x05\x76\
+\x93\x4e\xde\x62\xa7\xd1\x52\x3e\xa7\xaf\x9b\x2a\x7a\xf7\x7e\xec\
+\x20\x57\x7a\xb4\xde\x7d\xc3\xdc\xd3\xd1\xd4\x28\x21\x6a\x6a\x2c\
+\x9d\x33\x71\xb1\x72\x4b\xae\x8a\xa1\xd8\x64\xfd\x36\xe7\xa8\x7d\
+\x50\xb4\x45\x24\x62\xd2\x0f\x8e\xb6\x04\xef\x98\x1b\x9f\x44\x9f\
+\x23\xd2\x29\xf5\xc8\x45\x9c\xe2\x2a\xf3\x8d\x75\x83\x16\x92\xa3\
+\x49\xec\x47\xf9\xf1\xe0\x2e\x03\x13\x5d\x12\xbf\xae\x4b\x81\x91\
+\xea\xae\x5e\x11\x35\x45\x97\x84\x96\xc9\x1c\xd2\xa8\xe8\xf3\x1d\
+\xa5\x8a\x02\x7a\xfb\xe2\xc4\xea\xdb\x92\xad\xbf\xb0\x9a\x48\xb1\
+\xd5\x96\x7b\x4d\x89\x87\x4f\xc1\xf7\xdc\x63\x34\xf2\xa2\x52\x31\
+\x13\x8f\x5d\x2f\xe6\xf3\x12\xb5\xb1\xe7\x2d\xb5\x3d\x39\x95\xe3\
+\x94\x0e\xd4\x68\x60\xed\x11\x71\x3d\xe0\xfd\x26\x64\x20\xf4\xb2\
+\x95\x91\x74\x49\xa3\xa5\x5f\x90\xc5\xa7\xe8\x1b\x1e\x3e\xc5\x09\
+\xc2\xa4\xaf\x3b\x25\x4a\x91\x45\xa7\xc4\x39\xba\x3a\x86\x33\x61\
+\xbc\xb1\xcd\x1a\x71\x3d\xa4\x89\x24\x46\x90\x5c\xa2\xa5\xb6\x94\
+\xd2\x11\x91\xd0\xa5\xbe\x71\x9d\x5b\x9a\x9c\xa3\x34\xf3\xbc\x9f\
+\x84\x4c\x4c\xdd\xe3\xfa\xc6\x48\x44\x1b\xac\x0d\xdd\x4f\x25\x26\
+\x63\xa8\x5b\x4f\x47\xcd\x23\x7c\x7b\x56\x4d\x14\xa8\xa4\x50\xfd\
+\x61\x75\x99\x78\xf8\xd5\x96\xe0\xfe\x07\x27\x2f\x06\x77\x63\x2b\
+\x9a\x6a\x22\x5c\x69\x6b\xf2\x34\xdc\xb6\x0e\xb7\x84\xce\x3d\x43\
+\x12\xd9\xa5\x28\xf7\xdc\x67\xdc\x82\x28\x65\xfd\xc4\xd0\x2e\x6d\
+\xb8\xd4\x2f\x12\x10\x84\xc2\x07\xa5\xb2\xed\x0d\xbb\xac\x27\xb2\
+\x74\xd1\x6f\x10\x7a\x56\x6d\x4d\xe9\xb3\x7c\x03\x13\x5a\xf9\xa3\
+\xfa\x83\x59\x72\x34\xba\x9c\x18\xf7\x44\x6e\x0c\xf1\xea\x26\xc2\
+\x48\x2d\xb6\x09\xf5\x2f\x9e\x21\xfa\x68\x59\x5f\x6e\xc1\x32\x59\
+\x85\xd1\xde\x2b\x6a\xa1\x0d\x2b\x1b\xcc\x86\x9a\x19\x85\x7a\x02\
+\x33\xb9\x8b\x11\x6d\xae\x26\xf5\x99\xad\xcd\x5c\xbe\x69\xce\x9d\
+\x0f\xab\x1d\xfc\x28\x35\x0e\xd3\x44\xe3\xa9\x37\xf3\x79\x1c\xbb\
+\x4a\x10\xa4\xf4\x9e\x24\x4c\xc6\x49\x6a\x51\xe3\x69\x94\xaa\x8b\
+\x24\x52\xce\x55\xda\xa6\x02\xce\xf7\x08\x5c\x4f\x80\xd4\xd0\x1f\
+\x4d\xe4\xce\x11\xf6\xa5\x39\x81\x65\xbd\x56\xa2\x24\xc6\xc2\xcb\
+\x63\xf6\x49\x7a\x14\x93\xcb\xc1\xc9\x23\x47\x13\x9d\x1e\x2d\x4f\
+\x86\xa7\xb2\xae\xa6\xfa\x09\xdd\x0e\x41\x42\x74\x07\x7e\x16\x99\
+\x12\x20\x92\x51\x9e\x1c\x1f\x95\x81\xbd\xfa\x5e\x1c\x83\x90\x86\
+\xc9\x55\x54\x08\x9a\x19\x37\x81\xd2\x4a\x3d\x1d\x4b\x7f\xd4\x02\
+\x66\x38\x4f\xab\xfe\x42\xe7\x4b\x63\xc5\x16\x23\x18\x00\x6f\xf7\
+\x10\x94\x47\x7f\x2b\x49\x92\x91\x6a\x32\x6f\x21\x48\xf4\x9e\xf4\
+\x71\xc8\x1f\xc7\xf6\x34\xc1\x87\x36\xc5\x8a\x9e\x65\xc8\x4c\xe6\
+\x9e\xf2\x25\x35\x32\x4b\x7f\xd4\x93\x0f\x8c\xee\x44\x69\xd8\x61\
+\x0e\x43\x8f\xbd\xf0\x7a\x11\x18\x9d\x52\x3f\x3a\xfb\xca\x1f\xd5\
+\x91\xfb\x6f\x7a\x24\x48\x1e\x8c\x30\xa6\x4f\xf5\xda\x05\xf9\x66\
+\xb0\x12\xe5\x9b\xa1\x22\x75\x60\x15\xab\xdd\xe8\xdf\xc4\xa1\x74\
+\x86\x46\xef\x7e\xcd\xc2\x94\xd4\x3d\x15\x3e\xb1\xe6\x2f\x2a\xa7\
+\x64\x06\xde\x53\x1a\x66\x9b\xe2\xc2\xc8\xe4\x3b\x2f\x46\xa9\x40\
+\x1d\x45\xab\x9f\x3f\x23\xbc\xe0\xe6\x61\xe7\x36\x1e\x6c\x35\xd5\
+\x17\xc5\x9b\x48\x2c\xfd\x51\xdf\x6b\xea\x61\x93\xaa\x77\x2b\x89\
+\xcc\xb7\x94\x69\x47\x90\x4a\x30\x5f\x17\x27\x16\x6e\x25\xf4\x42\
+\x4f\xcb\x3a\x74\xb6\xd5\x5c\xd9\x36\xb5\xe2\x92\xa6\x2c\x3e\x59\
+\x5a\xb4\x13\x55\x0b\xf9\x98\xc9\x75\xc9\x97\xec\x4f\x33\x90\xe6\
+\xf3\x76\x89\x62\x8a\x11\xd9\xbc\x68\xe9\xf5\x2e\x3d\x7c\x96\x99\
+\xce\x5f\x3a\xf7\x41\x98\xd8\xeb\x28\x41\xd2\x0b\x2b\x1b\xf4\x66\
+\xad\xc1\x45\x49\xe7\x4e\x0f\xbf\x1a\x63\xac\x23\x11\x3f\xfa\xcd\
+\xe7\x33\x5e\xea\x92\x6e\xe5\xfa\x35\x44\xcb\x2c\x85\x22\x2f\x5e\
+\x57\x1a\x7c\x6c\x9d\xe5\x50\x3a\x7a\x4e\x9e\xd7\xee\x82\xd0\x7b\
+\x76\x4c\xf5\x06\x81\x4d\xaf\x68\x22\x14\x3f\x99\x1c\x4f\xa5\x86\
+\xba\x68\x9b\x75\xbd\xe7\xf3\x79\xf4\x22\xb9\x70\x48\x3d\xe1\xbc\
+\x9e\xbf\xc5\x66\xae\xc3\x41\x54\x82\xa9\xa5\x30\x9d\xb0\xd3\xd6\
+\x19\x0a\x15\x15\xf1\xf0\x27\x75\xea\xa4\x4c\x49\x8e\x41\x1b\x05\
+\xa9\x0f\x33\xd9\x34\x38\x69\xd4\x67\x34\x78\x05\xb1\x17\x43\xe3\
+\xb1\x1f\xa3\x51\x8a\x51\xe8\x20\x08\x8d\x6d\x2f\x8d\x93\x0d\xa2\
+\xf6\x4c\x2c\x2d\xbd\xf2\xf8\x6c\xd0\xaa\x27\x6d\xed\x86\x0e\x02\
+\xe6\x14\x87\x92\xcc\x58\xc4\xb1\x1e\x67\x9b\x0c\x73\xd9\xdf\xc6\
+\x31\xe0\xdf\xfb\x30\x9b\xd7\xc3\x6e\x1c\x14\x9d\xbe\x68\x65\x9b\
+\xb0\x5a\xc0\x49\x15\x71\xbe\x77\x7b\xcd\x2b\x8f\xf2\xf0\x4d\x3f\
+\xfd\x83\x28\x65\x0e\xaa\xb0\x4c\xd8\xd5\x21\x99\x02\x3b\xfd\x2d\
+\x8b\x0f\x79\xf2\x15\xeb\xab\x46\x2e\xe9\xe3\x4b\x8a\x80\x01\xe1\
+\xe3\xab\x85\x9b\x77\x0b\xf5\x7a\x54\xc4\x9c\xd6\xa0\xa4\x72\xfb\
+\x70\x6c\x75\xd3\xec\x32\x5c\x3d\xcd\xb1\x99\x65\x2a\x7a\x09\x19\
+\x38\x11\x52\x83\x1d\x4f\xd4\xf7\xda\x86\xc0\x1c\xbe\xf5\xe6\x89\
+\xab\x1a\x6a\xa1\x40\xe9\xb3\x1b\x07\x4f\x43\xeb\x4c\x8d\x9b\x38\
+\x89\x40\xd1\xaa\x1f\xe6\x49\x3c\x18\x41\x12\xd7\x24\x49\x13\xc1\
+\x99\x42\xed\xe4\xca\x90\x2a\xf5\xd2\x6d\x36\x63\x9f\xea\x7a\x3d\
+\x7b\x5f\x5a\x0c\xed\xf4\xda\x69\x52\x41\x40\xf4\x4f\xc6\x1a\x8f\
+\x75\x50\x09\x16\x32\x64\x91\x4e\x17\x7d\xa6\xf2\xf6\xd9\xa7\xf4\
+\xf8\xb9\x5b\xd1\x36\x64\xc9\xd4\xee\xa6\x1d\xac\xc2\xc5\xe7\xb9\
+\xdb\x86\x43\x56\x6d\x77\x6d\xce\x8c\x42\x8b\xd1\xe5\x0c\xfb\x63\
+\x42\x64\xed\x99\xad\x71\x93\x94\xfa\x07\xd3\xd9\xb3\xda\x20\xcd\
+\xb4\x8c\x43\xbb\xa2\xdb\xf1\x04\x41\xaa\xc6\x05\x4c\xf6\x7d\x28\
+\x10\x60\x00\x5e\x14\x03\x99\xd6\xf9\x10\x91\x2a\xb8\xdf\x70\x98\
+\x20\xad\xca\x4c\xac\x89\xb5\x9c\x20\x55\x97\x3b\xd5\x93\xad\xeb\
+\x00\x44\x0d\x3c\x67\xf8\x4e\xc1\x84\xb2\x55\xa3\xc6\x4e\x63\x3f\
+\x11\xb7\x48\xcd\xbb\x59\xf0\x08\x02\x20\x40\x15\x0c\x07\x1a\x6f\
+\x19\x34\xf1\xe1\x28\x1b\xf3\xa3\x76\x4f\xb3\x7a\x82\xd4\xcf\xc9\
+\x2a\x25\x52\xa5\x45\x25\x46\xae\xeb\xdd\x92\xee\xc5\x89\x4f\x9d\
+\xc3\xc7\x0d\x8d\xa4\xb2\x37\x8f\x26\xb4\x3f\xdb\x2b\xf2\x53\x13\
+\xd6\x46\x24\xe0\xfd\x4a\x9e\xf2\xe8\x47\xc0\x89\xb9\x83\x30\xf5\
+\x0e\xa7\x47\x11\xa8\xb1\xd4\x00\x6a\x56\x27\xd5\xc0\x69\x96\x0b\
+\xec\x0b\x85\x13\x5a\xdb\xfa\x5c\x0a\x8d\xfe\xfd\xd1\xbb\x5c\x27\
+\xf3\x47\x0d\xbc\x3f\x77\xbc\xad\xc6\xd3\x65\xd1\xaf\x6f\x42\xe8\
+\x72\xa4\x3d\xb1\x0b\x36\x2f\xd7\xc7\x2f\x37\x8f\x0f\xc1\x3f\x7c\
+\xf2\xca\x8e\x1e\xae\x93\x64\x5e\xd0\x44\x4e\xa5\x33\xd4\x4c\xa8\
+\xbc\xfc\xe4\x93\xa2\x7f\xb4\xb8\xa3\x73\xc2\xf8\x42\x72\xdc\xe6\
+\x42\xd3\xa9\xcf\xee\x8b\x3a\xa9\x01\x4c\x67\x7f\x4b\xc3\x28\x23\
+\x9e\xaa\x12\x7a\x83\xf2\x0d\xba\x74\x8a\x42\x93\xb2\x8f\xec\xd4\
+\xf9\xca\x8f\x1e\x3f\x7e\xed\xe5\xc5\xe4\x9e\xc0\x79\x0a\x96\x0c\
+\x2b\x13\xe9\xd1\x82\xa3\xa2\xf1\x64\x14\x02\x45\x89\x88\x3a\xa2\
+\x90\x64\xb6\x07\x1d\x48\xf5\xd1\x9f\x24\xf9\x62\xab\x29\xd1\xdf\
+\xfc\xed\x87\x2f\xba\x72\x02\x53\x73\xb5\x9e\x43\xd6\x05\x4a\x09\
+\x98\x69\xce\xa8\xc5\xf5\x70\xf5\x5e\x14\xe0\xca\xbb\x9a\xa1\xbe\
+\xf8\xe1\x3f\xf8\xf1\xd3\xff\x7d\xf4\x6f\x07\xad\x40\xc6\xb9\x9e\
+\x5f\x16\xaa\x06\xac\x28\x3c\x27\x27\x36\x2e\x0a\x86\xa1\xff\x9d\
+\x10\x47\x9f\xff\x96\xd8\x19\x19\xfa\x5a\xc7\x8c\xf9\xe4\x6d\xf9\
+\xf5\x00\x2d\x28\xc6\x05\x6e\x52\xe5\xee\x84\x0e\xfc\xed\x27\x68\
+\x52\x21\xb7\xeb\x82\x86\x40\x24\x12\xfb\xdb\x77\xfc\xe5\xf9\x8e\
+\xe8\x79\x5c\x44\xa9\xcb\xfd\x57\x3b\xa1\xef\xbf\x5a\xcd\x75\x46\
+\x02\xdf\xff\x51\x78\xf8\x3c\x7a\x9c\xbc\x0f\xb3\xa5\xde\x3c\x5f\
+\xd7\xd1\xbf\xeb\x74\xfc\xc2\x73\x1d\xbb\x28\xa0\x92\xe9\x79\x72\
+\xc6\xb7\x79\x8a\x09\xd8\xb6\x0d\xac\x66\xf1\x79\x49\x41\x27\x51\
+\x35\xd8\x89\x8f\xd5\x5c\x76\x49\x5b\x7e\x0c\x90\xec\x8c\x53\xfa\
+\xbe\x2b\xc5\x4c\x6b\x90\xa5\x37\xef\xde\x7b\xf4\xdd\x87\xb7\xb5\
+\x4b\x8c\x7e\x5e\x8c\x9a\xa0\x9f\xf6\x64\x9a\xa4\x0f\xbc\x92\xb6\
+\x6f\xc8\xf5\x70\x39\x56\x70\x3a\xba\xde\x4f\xe6\x81\x0d\x7d\xfd\
+\x9d\x1f\xbb\xba\xdc\x36\xb0\xe6\x98\x9e\x25\xc6\x91\x7a\x2a\xba\
+\x35\x8c\xe4\xfe\xab\x73\x9f\x82\x9b\x87\xbd\x37\x42\xcf\xba\xdf\
+\x11\xe3\x4f\xe2\x68\x76\xf2\x0e\x86\x3d\x5a\x0e\x36\x80\x4e\xe4\
+\xf0\x2f\x6d\xa7\xed\xf9\xa5\xb1\xab\xfd\x74\xfd\x3c\xc7\xe9\x1b\
+\x75\x13\x19\xa9\x1b\x94\xca\xe7\xcf\xb8\xa4\x77\x88\x9b\x27\x90\
+\x54\x3d\x02\x9e\xad\xf3\xa3\x8c\x99\x9c\x58\x11\xa9\x55\x77\x9a\
+\x0d\x3c\xb2\x73\x78\x9a\x94\xca\xcb\x11\x93\xf2\xb9\x67\x2c\xf9\
+\x17\xae\xbb\xce\xdf\x91\xd9\xa9\x14\xa9\x22\x16\x4c\x35\x05\x55\
+\x97\xc1\x6d\x7f\xbd\x45\x4e\xd8\x10\xac\xbf\xa6\x2b\xd0\x59\xeb\
+\xc4\xca\x73\xfa\xec\x59\x0d\xbd\x35\xeb\xe0\xa3\xbd\x17\xa9\x4e\
+\x27\x2b\xb6\x64\x29\xfd\x51\x51\x3a\x1b\xb1\x45\xb8\xec\xdb\x57\
+\x9d\xa3\x71\xc0\xbe\x43\x40\x7e\xfb\x24\x9d\x5f\x70\x54\x6b\x82\
+\x29\xf3\xec\xcb\x24\x62\x81\x4f\x36\x14\xb9\x71\xff\xb3\x70\x39\
+\x5d\x52\xb9\xcd\xbf\xef\x26\xe8\xf1\x2f\x37\x56\xda\x82\x01\xad\
+\x67\x7a\x72\xff\xfc\xda\xc8\x04\x8e\x52\xe9\x3d\x23\x7d\x5f\x86\
+\xcb\x2d\x2a\x7b\xe7\xaa\xb3\xd4\xe5\xfe\x4d\x21\xc1\xfd\x63\x52\
+\x30\x62\xa4\x3e\xf9\xd5\xe3\xe7\xee\xfd\xf9\xf2\xec\x40\x77\x3a\
+\xd9\xe5\x5a\x4e\x36\x88\xa5\xd5\x76\x26\x90\x1a\x15\x29\x82\x26\
+\xa9\xfc\x37\x3e\xb7\x39\x27\x9f\xba\xb3\x4b\x92\x3c\xe9\xf0\xc9\
+\xd7\x67\x42\x75\xfa\x50\xf9\x7e\xf0\xd9\xe5\xbb\x55\x8e\x30\xa2\
+\x5d\x83\x86\x69\x6a\x50\x4e\xdb\x35\x7d\xf0\x68\xc3\xf0\xbe\x8a\
+\x8e\xde\xd9\xcf\xeb\xbb\x3c\xae\x57\x41\xcf\x16\xf9\xd1\xa1\x71\
+\x62\xc7\x5b\x6e\x2c\x61\x58\x1f\xb2\xb9\x54\x4e\xda\x6d\x78\xff\
+\x6c\xd6\x3f\xfe\xd1\xeb\x5b\xb9\x72\xd7\x57\x06\xde\xfd\xfe\x55\
+\xc0\xc3\x87\x19\xad\xb2\x4f\xb0\x4a\x44\x6e\xcf\xb4\xb6\xd0\x9f\
+\x83\x2b\xaa\xa4\x78\xeb\xdb\x10\xde\xba\x9a\xbb\xca\x0f\xd2\xf4\
+\x9d\x8e\x5d\x7b\x5b\x10\xde\x05\x9a\x4a\x91\x1f\x25\x84\x56\x74\
+\xf6\x98\xc3\x4d\x3b\xf6\x5d\xea\x57\x31\x75\x3b\xfe\xb7\x77\x42\
+\x8f\x4e\xa6\x48\xfd\x57\x87\xf4\x3f\x9e\x69\xce\x33\x62\x7a\xa1\
+\x0e\x5a\x83\x50\xce\x9e\x2c\x2b\x0a\x62\x7e\xf4\x91\xa5\x0e\x01\
+\x71\xbe\x96\xaf\x6f\xe6\x5e\xc6\xde\x95\xfd\xd9\x14\xfc\xf5\xba\
+\x53\x67\xe1\x1d\x2a\x23\xbe\xc6\x1c\x60\x15\xd1\xdc\xcf\x97\x12\
+\x25\xe4\x1d\xf3\x2a\x63\x53\xa2\x7e\xf4\x61\x8d\xd4\x06\xa6\x2b\
+\xf8\x34\x27\xf5\xef\xe7\x45\xc5\x57\xb6\xbf\xbe\x68\x28\xe1\x15\
+\xe5\x1d\xe5\x16\x0c\xc2\xd4\xe4\xfd\xf5\xce\x50\x1d\x7d\x5b\xe5\
+\x93\x7e\xed\x5a\x25\x46\x0f\x95\xcf\x8b\xc1\x7e\x7e\x5b\x10\xa4\
+\x16\x86\x64\xe7\xbe\x94\xfa\xec\x95\xd8\xfe\x7a\xd1\x28\x6a\xeb\
+\xfd\xf5\x59\xdb\x0b\x4f\xa7\x9b\xfb\x7b\x2f\x4d\x39\x41\xda\xf7\
+\x59\xde\xbd\x3e\x3a\xa8\x0a\xfd\xe6\x90\x1f\xad\x11\x5d\xad\xb4\
+\xb8\xed\xb5\x65\x21\xbc\xa5\x38\x94\xfd\x59\x0e\x3a\xfc\x47\xbf\
+\xa4\xcb\xea\x0a\xff\xe9\xde\x89\x0f\x5c\xb7\x8d\xcc\x03\xda\x32\
+\x55\xb1\xf7\x4b\x4a\x24\x42\x7f\x72\x60\x8f\x26\x42\xee\xaf\x0f\
+\xcd\xd8\x01\xa1\x46\x97\x74\xd9\x59\xd0\x57\xcf\xdb\x3e\xcc\x27\
+\x59\x08\xa8\x52\xcf\xdf\x88\x4a\x0c\x0d\x14\x30\x4a\xd8\x5f\x4f\
+\xb8\xc4\xad\xd9\xf5\x67\x7d\x33\xe9\xbe\x17\xff\xd5\x4d\x8b\xca\
+\x85\xaa\x0a\x38\x2c\x2f\x4b\x98\x88\xf4\x95\xb1\xde\x9c\xa5\xd8\
+\x5f\x9f\xf7\x19\x7b\x6b\x73\xfb\x62\xdf\xd4\xb3\xbb\xa4\xcb\xfd\
+\x9f\xbe\x72\x3d\x8b\xc8\x43\x17\x7d\xd8\xa4\x7a\xe6\x0e\xf1\x92\
+\x1f\x3d\x19\x8a\xfd\xf5\xc0\xa0\x54\x26\xf7\xcb\x7d\x63\xd4\x24\
+\x2c\x25\x4f\xe3\x9e\x8e\x9b\x3f\xea\xd0\xd8\x34\xa0\xb5\x7a\xc2\
+\x25\x1d\x2e\x62\x8c\x66\x74\x32\xf3\x34\x65\x85\xbf\xa1\x67\xbd\
+\xdc\xf7\xb1\x7d\xe3\x13\x93\xc8\x0c\xb3\x96\xf2\x9b\xe5\x90\x70\
+\xc2\x1e\x57\xd4\x38\x0a\xa0\x0a\x27\x96\x52\x2f\x65\xaf\x37\xe2\
+\x7a\x81\x7d\xb5\x17\xde\xbb\x39\x4f\xec\x26\x32\xf7\x7e\x39\x14\
+\x08\x10\xfe\xad\x27\x1b\xc8\x54\x91\xea\xd9\x66\xdb\x5f\xcf\xb8\
+\xde\x37\xc5\x3e\xe8\xa0\xbf\x1f\x7c\x78\xb2\x46\x52\x2f\x37\x78\
+\x1c\xd2\xcf\x7e\x21\xe0\x74\x51\xaf\xd7\x4a\x99\xb2\x5e\xaf\xdf\
+\x96\xf2\xa3\x64\xa8\x88\xdc\x08\x5d\x9e\xee\xdd\xbd\xfb\x9e\x87\
+\x77\xf6\x33\x2d\x87\x0b\x0b\x99\x95\x2e\xa1\x83\x57\x21\xa8\xd1\
+\xbb\x77\x79\x2a\xbb\xde\x9a\x2d\x8d\xcc\xf4\x1a\xee\xc7\x1b\x1f\
+\x79\xe5\xa5\xab\x93\xcd\xb0\xe6\xda\x9d\x09\x13\x8c\x68\xbc\xa8\
+\xe0\x28\x53\x25\xe8\x7d\x81\x9f\x97\x5b\xf3\xe6\xec\x3a\x6f\x95\
+\xdb\x69\xb6\x3e\x67\x3e\x5a\x7b\x84\xe6\xf6\xac\xed\x19\xd7\x57\
+\x68\x4f\xe8\x78\xd3\xd1\x63\x44\x2c\x59\xfb\xb8\xc0\x5a\xe5\x70\
+\xcc\x09\x6d\x17\x94\xaa\x09\xa1\x1d\xd4\x13\xbd\xd1\xf3\x0b\xf5\
+\xfa\xc9\xea\xf5\xc3\xb8\x49\x97\x74\xe9\x6f\x2b\x80\x4b\x91\xaa\
+\x06\x2a\x3b\xdf\xdf\x1e\xdc\xb1\x7f\x94\x8d\xae\x27\x48\x3c\x56\
+\xdf\x8c\xb3\xf8\x7a\xed\xa2\x7a\x81\x50\x12\xa4\xc4\x9b\xb1\xad\
+\x51\x0b\xde\x3d\xfa\x47\x11\xd7\xbb\x22\xd5\x9b\x30\x10\xaa\xd1\
+\xbb\xcc\x03\xaf\x42\xca\x29\xf6\x93\x8d\xc8\x5c\xa4\x97\x3a\x8f\
+\x2b\xe4\x61\xde\x51\x1f\x0a\x4d\x34\x8a\xaf\x7c\x9a\xb3\x73\x10\
+\xd3\x37\x6c\xd8\xef\xa6\x3f\xe3\x64\x02\x94\x0a\x53\x8c\xbb\x7a\
+\xfd\x8d\x7a\xf3\x28\x4e\xf2\x45\x3a\xd1\x28\x34\x58\x06\xdf\xc4\
+\x29\x7b\xf8\x19\xef\x29\xc6\x4c\x89\x60\xb4\xe1\x47\xc7\x84\x92\
+\xcf\x04\xae\x11\xeb\x1b\x04\x81\x9b\x67\x4e\x49\xd1\x3f\x2a\x86\
+\xb6\x90\x20\x65\x87\xd6\x52\xb0\x74\x1c\x86\x9e\x50\xbd\x71\x45\
+\x0f\xa7\xc4\x4d\xe9\xe4\x0e\x7e\x1e\x10\xd2\x4b\xd8\xfd\xfd\xe3\
+\x34\x9a\x30\xd9\xe1\x8f\xd3\x8e\xa0\x53\x1c\x2d\xea\xf5\x43\xa7\
+\x44\x31\x9d\xcf\xd7\x4f\xec\x1f\x8d\xa8\x64\xae\x47\xe3\x40\x4b\
+\x48\x8b\x2f\x35\x92\xf3\x2e\x5c\x3e\x0d\xc1\x89\x52\xc0\x4c\x4c\
+\x32\xd9\x4e\xf0\xb4\x13\x9a\x67\xc4\x78\xf4\xe5\x8c\x98\x0e\xbe\
+\x1c\xc1\x18\x91\x59\x78\xa4\x56\x06\xf7\xfd\xf5\x6c\xcc\x14\xa9\
+\x00\x9c\xde\xcd\x88\x1d\x46\xb4\xa6\x81\xa6\x1a\x5a\xc1\x13\x79\
+\x9c\x67\x9a\xbc\x56\x1b\x00\xc9\x26\x00\x2b\x44\xa9\x4f\x11\x93\
+\x84\x88\x50\xa9\xc4\x72\x05\x3f\xb1\xc4\x3c\xdf\xd4\xc2\x2e\xb9\
+\x63\x92\x39\x2a\xe2\xd4\x51\x26\xb6\x8a\xd6\x74\x45\x87\x20\x84\
+\x2e\xf8\xcf\x84\xa5\x43\xa4\x27\x24\x20\x4c\x8a\xe6\x56\xf7\x8f\
+\xb6\x15\xe3\x02\xd4\xa2\xba\xa8\x98\x62\x24\x4f\x7d\xb1\x29\x45\
+\x89\x71\x7d\x8b\x80\x9e\x04\xcd\x0b\xe0\xf2\xba\x02\x9c\x0a\x15\
+\x1e\xba\x1c\xe7\x71\x11\x3c\x4e\x5f\x71\x55\x6c\x76\x44\xeb\xdd\
+\x22\x2d\xc3\x29\x0d\x31\x33\xc3\xdc\x95\xaa\x77\xf4\x47\x47\x46\
+\xd4\xef\x67\x51\xb9\xf3\xb3\xa7\x61\xd2\x27\xb1\xd5\xef\xa8\x53\
+\xba\xa4\xaf\x9c\x27\xb1\x14\xfe\x68\x36\x9f\x85\x22\x65\x92\x0c\
+\x91\x08\x2c\x53\xc2\xcd\xf3\x3b\x9a\x06\x6d\xd9\x3f\xba\xec\xfb\
+\xb1\x13\x0a\xa1\x42\x26\xf8\xa3\xe5\xaa\x58\x1a\x26\x23\x15\xfe\
+\x68\x86\x4e\x6b\x2d\x61\x2b\x2c\xa1\x7f\xd4\xf9\xe9\x98\x64\x19\
+\xfe\x45\x49\x12\xfa\xa3\x59\x3b\x5d\x40\x3d\x39\xb1\x28\x8b\x50\
+\x43\x21\x57\x82\xfe\x51\x71\xd6\xb9\x19\x7d\xbc\x94\x1f\x5d\xea\
+\xfe\xd1\x0b\xa8\xa7\x2a\xa8\xd7\xf1\xc7\x00\x14\xf5\x30\x59\xfb\
+\x0c\xfe\xe1\xa3\xe0\xfa\xb8\xd8\x67\x8c\x37\x50\xc9\xfc\x28\xd1\
+\x32\x59\xc0\x01\x3f\x89\xea\x49\x50\x32\xfd\x09\x3a\x8d\x8f\x1b\
+\x27\xce\xdc\xb9\x09\xc5\xe3\xf3\xab\x1c\x06\x67\x18\xea\xb8\x79\
+\xfa\x62\x67\xc3\x1a\x9e\x86\x56\xb2\x43\x46\x4a\xa5\x9f\x57\x3f\
+\x5e\x6a\xe0\xba\x0e\x76\x67\x05\xdc\x3c\x22\x78\x63\x81\x5c\x08\
+\x41\x45\xa5\xda\x34\xf4\x41\xc8\x4c\x05\x5a\x17\x6d\xe9\x98\x88\
+\x64\x8e\xb2\xc9\xbf\x07\x47\x8d\x54\x6a\xa7\xc3\x12\xd6\x70\x16\
+\x3e\x7e\xf1\x70\xa3\x2d\x87\x03\x79\x47\xcd\x86\x4e\xe1\x9b\x39\
+\xba\xed\x0c\x15\x4b\x39\xd6\x50\x68\x7b\xf0\x14\x63\x42\x99\x4e\
+\x68\x7c\xb1\x52\x62\xef\x74\x22\x8b\xbb\x8a\x52\x55\x6e\x30\xdd\
+\xb0\x1b\x0c\x1d\xfa\xce\xd5\xd1\x0f\x4c\x93\x28\x06\xad\x31\x49\
+\x36\x8f\x51\x9c\x5d\x94\x56\xd8\x50\x15\x16\xb1\xa3\xc7\x98\x09\
+\x93\xf4\xac\xc0\xfd\x3c\x7d\x29\x51\x8e\x83\x77\x2a\x9d\xa3\xb6\
+\xf4\x88\xa0\x1a\xfe\xa1\xbe\x2f\x39\xfa\x5f\xc1\x2a\xd8\xa0\xc5\
+\x51\x93\x08\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0e\
+\x07\x04\x9f\x87\
+\x00\x62\
+\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x09\xbd\x6f\x27\
+\x00\x77\
+\x00\x61\x00\x74\x00\x65\x00\x72\x00\x6d\x00\x61\x00\x72\x00\x6b\x00\x31\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x04\xc8\x47\xe7\
+\x00\x62\
+\x00\x61\x00\x6e\x00\x6e\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0e\x26\xb1\xe7\
+\x00\x6c\
+\x00\x6f\x00\x67\x00\x6f\x00\x33\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0e\x25\xb1\xe7\
+\x00\x6c\
+\x00\x6f\x00\x67\x00\x6f\x00\x32\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0e\x24\xb1\xe7\
+\x00\x6c\
+\x00\x6f\x00\x67\x00\x6f\x00\x31\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x09\xbc\x6f\x27\
+\x00\x77\
+\x00\x61\x00\x74\x00\x65\x00\x72\x00\x6d\x00\x61\x00\x72\x00\x6b\x00\x32\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x02\
+\x00\x00\x00\x56\x00\x00\x00\x00\x00\x01\x00\x00\x90\xee\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x01\x00\x00\xb3\x62\
+\x00\x00\x00\x34\x00\x00\x00\x00\x00\x01\x00\x00\x58\x36\
+\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\xad\x0b\
+\x00\x00\x00\x88\x00\x00\x00\x00\x00\x01\x00\x00\xa6\xb4\
+\x00\x00\x00\x70\x00\x00\x00\x00\x00\x01\x00\x00\xa0\x5d\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/dialogs/classwizard/images/background.png b/examples/dialogs/classwizard/images/background.png
new file mode 100644
index 0000000..44c7bad
Binary files /dev/null and b/examples/dialogs/classwizard/images/background.png differ
diff --git a/examples/dialogs/classwizard/images/banner.png b/examples/dialogs/classwizard/images/banner.png
new file mode 100644
index 0000000..3169152
Binary files /dev/null and b/examples/dialogs/classwizard/images/banner.png differ
diff --git a/examples/dialogs/classwizard/images/logo1.png b/examples/dialogs/classwizard/images/logo1.png
new file mode 100644
index 0000000..f9b594a
Binary files /dev/null and b/examples/dialogs/classwizard/images/logo1.png differ
diff --git a/examples/dialogs/classwizard/images/logo2.png b/examples/dialogs/classwizard/images/logo2.png
new file mode 100644
index 0000000..5dcbd46
Binary files /dev/null and b/examples/dialogs/classwizard/images/logo2.png differ
diff --git a/examples/dialogs/classwizard/images/logo3.png b/examples/dialogs/classwizard/images/logo3.png
new file mode 100644
index 0000000..9fd3ea2
Binary files /dev/null and b/examples/dialogs/classwizard/images/logo3.png differ
diff --git a/examples/dialogs/classwizard/images/watermark1.png b/examples/dialogs/classwizard/images/watermark1.png
new file mode 100644
index 0000000..0091f5c
Binary files /dev/null and b/examples/dialogs/classwizard/images/watermark1.png differ
diff --git a/examples/dialogs/classwizard/images/watermark2.png b/examples/dialogs/classwizard/images/watermark2.png
new file mode 100644
index 0000000..3b88f2e
Binary files /dev/null and b/examples/dialogs/classwizard/images/watermark2.png differ
diff --git a/examples/dialogs/configdialog/configdialog.py b/examples/dialogs/configdialog/configdialog.py
new file mode 100755
index 0000000..452b392
--- /dev/null
+++ b/examples/dialogs/configdialog/configdialog.py
@@ -0,0 +1,244 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDate, QSize, Qt
+from PyQt5.QtGui import QIcon
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QDateTimeEdit,
+        QDialog, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
+        QListView, QListWidget, QListWidgetItem, QPushButton, QSpinBox,
+        QStackedWidget, QVBoxLayout, QWidget)
+
+import configdialog_rc
+
+
+class ConfigurationPage(QWidget):
+    def __init__(self, parent=None):
+        super(ConfigurationPage, self).__init__(parent)
+
+        configGroup = QGroupBox("Server configuration")
+
+        serverLabel = QLabel("Server:")
+        serverCombo = QComboBox()
+        serverCombo.addItem("Trolltech (Australia)")
+        serverCombo.addItem("Trolltech (Germany)")
+        serverCombo.addItem("Trolltech (Norway)")
+        serverCombo.addItem("Trolltech (People's Republic of China)")
+        serverCombo.addItem("Trolltech (USA)")
+
+        serverLayout = QHBoxLayout()
+        serverLayout.addWidget(serverLabel)
+        serverLayout.addWidget(serverCombo)
+
+        configLayout = QVBoxLayout()
+        configLayout.addLayout(serverLayout)
+        configGroup.setLayout(configLayout)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(configGroup)
+        mainLayout.addStretch(1)
+
+        self.setLayout(mainLayout)
+
+
+class UpdatePage(QWidget):
+    def __init__(self, parent=None):
+        super(UpdatePage, self).__init__(parent)
+
+        updateGroup = QGroupBox("Package selection")
+        systemCheckBox = QCheckBox("Update system")
+        appsCheckBox = QCheckBox("Update applications")
+        docsCheckBox = QCheckBox("Update documentation")
+
+        packageGroup = QGroupBox("Existing packages")
+
+        packageList = QListWidget()
+        qtItem = QListWidgetItem(packageList)
+        qtItem.setText("Qt")
+        qsaItem = QListWidgetItem(packageList)
+        qsaItem.setText("QSA")
+        teamBuilderItem = QListWidgetItem(packageList)
+        teamBuilderItem.setText("Teambuilder")
+
+        startUpdateButton = QPushButton("Start update")
+
+        updateLayout = QVBoxLayout()
+        updateLayout.addWidget(systemCheckBox)
+        updateLayout.addWidget(appsCheckBox)
+        updateLayout.addWidget(docsCheckBox)
+        updateGroup.setLayout(updateLayout)
+
+        packageLayout = QVBoxLayout()
+        packageLayout.addWidget(packageList)
+        packageGroup.setLayout(packageLayout)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(updateGroup)
+        mainLayout.addWidget(packageGroup)
+        mainLayout.addSpacing(12)
+        mainLayout.addWidget(startUpdateButton)
+        mainLayout.addStretch(1)
+
+        self.setLayout(mainLayout)
+
+
+class QueryPage(QWidget):
+    def __init__(self, parent=None):
+        super(QueryPage, self).__init__(parent)
+
+        packagesGroup = QGroupBox("Look for packages")
+
+        nameLabel = QLabel("Name:")
+        nameEdit = QLineEdit()
+
+        dateLabel = QLabel("Released after:")
+        dateEdit = QDateTimeEdit(QDate.currentDate())
+
+        releasesCheckBox = QCheckBox("Releases")
+        upgradesCheckBox = QCheckBox("Upgrades")
+
+        hitsSpinBox = QSpinBox()
+        hitsSpinBox.setPrefix("Return up to ")
+        hitsSpinBox.setSuffix(" results")
+        hitsSpinBox.setSpecialValueText("Return only the first result")
+        hitsSpinBox.setMinimum(1)
+        hitsSpinBox.setMaximum(100)
+        hitsSpinBox.setSingleStep(10)
+
+        startQueryButton = QPushButton("Start query")
+
+        packagesLayout = QGridLayout()
+        packagesLayout.addWidget(nameLabel, 0, 0)
+        packagesLayout.addWidget(nameEdit, 0, 1)
+        packagesLayout.addWidget(dateLabel, 1, 0)
+        packagesLayout.addWidget(dateEdit, 1, 1)
+        packagesLayout.addWidget(releasesCheckBox, 2, 0)
+        packagesLayout.addWidget(upgradesCheckBox, 3, 0)
+        packagesLayout.addWidget(hitsSpinBox, 4, 0, 1, 2)
+        packagesGroup.setLayout(packagesLayout)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(packagesGroup)
+        mainLayout.addSpacing(12)
+        mainLayout.addWidget(startQueryButton)
+        mainLayout.addStretch(1)
+
+        self.setLayout(mainLayout)
+
+
+class ConfigDialog(QDialog):
+    def __init__(self, parent=None):
+        super(ConfigDialog, self).__init__(parent)
+
+        self.contentsWidget = QListWidget()
+        self.contentsWidget.setViewMode(QListView.IconMode)
+        self.contentsWidget.setIconSize(QSize(96, 84))
+        self.contentsWidget.setMovement(QListView.Static)
+        self.contentsWidget.setMaximumWidth(128)
+        self.contentsWidget.setSpacing(12)
+
+        self.pagesWidget = QStackedWidget()
+        self.pagesWidget.addWidget(ConfigurationPage())
+        self.pagesWidget.addWidget(UpdatePage())
+        self.pagesWidget.addWidget(QueryPage())
+
+        closeButton = QPushButton("Close")
+
+        self.createIcons()
+        self.contentsWidget.setCurrentRow(0)
+
+        closeButton.clicked.connect(self.close)
+
+        horizontalLayout = QHBoxLayout()
+        horizontalLayout.addWidget(self.contentsWidget)
+        horizontalLayout.addWidget(self.pagesWidget, 1)
+
+        buttonsLayout = QHBoxLayout()
+        buttonsLayout.addStretch(1)
+        buttonsLayout.addWidget(closeButton)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addLayout(horizontalLayout)
+        mainLayout.addStretch(1)
+        mainLayout.addSpacing(12)
+        mainLayout.addLayout(buttonsLayout)
+
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Config Dialog")
+
+    def changePage(self, current, previous):
+        if not current:
+            current = previous
+
+        self.pagesWidget.setCurrentIndex(self.contentsWidget.row(current))
+
+    def createIcons(self):
+        configButton = QListWidgetItem(self.contentsWidget)
+        configButton.setIcon(QIcon(':/images/config.png'))
+        configButton.setText("Configuration")
+        configButton.setTextAlignment(Qt.AlignHCenter)
+        configButton.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
+
+        updateButton = QListWidgetItem(self.contentsWidget)
+        updateButton.setIcon(QIcon(':/images/update.png'))
+        updateButton.setText("Update")
+        updateButton.setTextAlignment(Qt.AlignHCenter)
+        updateButton.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
+
+        queryButton = QListWidgetItem(self.contentsWidget)
+        queryButton.setIcon(QIcon(':/images/query.png'))
+        queryButton.setText("Query")
+        queryButton.setTextAlignment(Qt.AlignHCenter)
+        queryButton.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
+
+        self.contentsWidget.currentItemChanged.connect(self.changePage)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    dialog = ConfigDialog()
+    sys.exit(dialog.exec_())    
diff --git a/examples/dialogs/configdialog/configdialog.qrc b/examples/dialogs/configdialog/configdialog.qrc
new file mode 100644
index 0000000..31d0d49
--- /dev/null
+++ b/examples/dialogs/configdialog/configdialog.qrc
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+   <file>images/config.png</file>
+   <file>images/query.png</file>
+   <file>images/update.png</file>
+</qresource>
+</RCC>
diff --git a/examples/dialogs/configdialog/configdialog_rc.py b/examples/dialogs/configdialog/configdialog_rc.py
new file mode 100644
index 0000000..019024b
--- /dev/null
+++ b/examples/dialogs/configdialog/configdialog_rc.py
@@ -0,0 +1,1157 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sat May 4 15:15:09 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x1b\x93\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x60\x00\x00\x00\x54\x08\x02\x00\x00\x00\xf2\x11\xa5\xd4\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\x0b\x12\
+\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd5\x03\
+\x03\x0f\x27\x36\xc5\x11\x92\xc3\x00\x00\x00\x06\x62\x4b\x47\x44\
+\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\x00\x1b\x20\x49\x44\
+\x41\x54\x78\xda\xed\x5c\x77\x90\x1d\x45\x7a\xef\x9e\x7d\x9b\x77\
+\x25\xad\x24\x24\x84\x84\x04\x16\xc8\x46\x27\x8b\x24\x1d\x20\x71\
+\x08\xec\x13\xb1\x10\xa7\x33\x20\xce\x1c\xa6\x08\x55\xa4\x32\x45\
+\xce\xc9\x84\x3a\x52\x99\x60\xe0\x70\x51\x47\xb0\xe0\x4c\x2c\x63\
+\x62\x95\x39\x71\x87\x41\x75\x60\x81\xc8\x06\xc3\x01\x26\x0a\x09\
+\xa5\xd5\xe6\xdd\xf7\xa6\xfd\x9b\xfe\xba\xbf\xfe\xa6\x67\xde\xc2\
+\x7f\xe7\xb2\x69\xa8\xa7\x79\xbd\xf3\x66\xba\x7f\xfd\xe5\xef\xeb\
+\xd6\x69\x9a\xaa\xef\x5b\xfd\x96\x68\xad\x8d\x31\xf4\x89\x86\x2e\
+\xbe\xa0\xc6\x9d\xfc\x59\xaf\x73\x94\xeb\xe2\xd3\x8a\xbf\x2d\x3e\
+\x59\x76\x16\xdf\x28\x1f\x55\x6c\xd1\x0f\xa3\x47\x95\x8e\xad\xb4\
+\x39\x5c\x18\xa6\xef\x49\x86\x1b\x78\x2b\x49\x92\x0a\x81\x0a\x68\
+\x6a\xb5\x5a\x5f\x5f\x5f\xb5\x5a\x23\x6c\x19\x2c\xfb\x57\x7c\x2a\
+\xfb\x69\xb4\xd2\xfc\x93\x22\xb2\xf5\xae\xe5\x02\xd2\x4f\xe8\x15\
+\xc5\x7b\x4a\x57\x2b\xba\x3f\xfa\x2c\x5f\x79\xad\xe5\x0f\x8b\x74\
+\x3d\x0a\x35\x34\x36\x56\x3a\x3a\x3a\xe8\xe1\x15\x26\xb9\x17\x5e\
+\x78\xe1\xc4\x13\x8f\x9f\x34\x71\xfc\x48\xb5\xaa\xed\x03\xbe\x3b\
+\xd8\xee\x65\xf6\xd5\x0e\xc2\xef\xf4\x33\xfb\x93\x3a\x2f\xd2\xdf\
+\xf6\xca\x6c\xd1\x94\x76\x0f\x09\x4f\x8b\x16\x44\x7d\xd7\xd1\x78\
+\x9c\x75\xa2\xbf\xf9\x66\xe3\x8a\x15\xcf\x6f\xbf\xfd\xf6\x19\x40\
+\x0c\xea\xda\x75\x1b\xe6\xfc\xe9\xb4\xfb\xee\xba\x7a\xdd\x37\x9b\
+\x1a\x2a\x15\xed\xa7\x9d\x01\xe9\x31\x70\x40\x64\xa3\xca\x2e\x0d\
+\x5d\x65\xd7\xf4\x45\x65\xc4\x26\xfe\xb3\xdd\x61\x39\xed\x7d\xf8\
+\x27\x29\x79\xaa\xbd\xd5\xd8\x6b\x42\x98\xee\x55\xf6\x3e\xf7\x0a\
+\xd1\x89\x1e\x23\xa8\xc0\x5f\xe0\x15\x89\x98\xae\x76\x0b\x66\x1c\
+\x7c\xc6\xa3\xa9\x3d\x72\x91\xb4\x42\x6b\x69\x6b\x3d\xf0\xa0\xe3\
+\xba\xbb\x7b\xf0\x4c\x70\x59\x45\xfb\x06\x7e\x6b\x6d\x6d\x1d\x3b\
+\xa6\x73\x60\x70\xa4\x52\xa9\x90\x00\xa7\x97\x1b\x71\x2d\x81\x4b\
+\x6d\xbf\xfb\xab\x71\x3d\x58\x01\x5c\x27\x09\xe8\x33\xfb\x4c\x0d\
+\xf5\x98\x24\x71\xf7\x18\x37\x5f\x4f\x3c\xf6\x83\xee\xf7\x13\x74\
+\x30\x19\xed\x26\xa9\xc3\x8d\xfe\x4f\x8c\x71\x09\x4c\xee\x4e\x4f\
+\x19\x86\x09\xdc\x78\x5c\x74\x41\xe1\x78\x8c\xd2\xc6\xd6\x36\xe0\
+\xe0\xe4\x89\xd6\x95\x48\x2c\x55\xab\x69\xad\x96\x42\x22\x65\x5f\
+\xfd\xb8\x8c\xbd\x16\x03\xcd\xf7\x6b\x95\xda\x2f\x86\xba\x53\x6d\
+\x1f\x95\x7d\xa9\xa5\x16\xcf\xcc\x90\x30\xd4\x63\xef\x49\x04\xf9\
+\xb8\x4f\xfc\xd5\x10\x65\xa4\xbe\xdf\xbf\x22\xbc\x54\x30\x23\x01\
+\xad\x75\x10\x4c\x16\x35\x4f\x82\x8c\x8b\x11\xec\x9a\x75\x19\x4f\
+\x41\x56\x41\x65\x5d\x39\x0d\x9e\x91\x4c\x5a\xb3\xa6\x8f\x71\x14\
+\x24\x20\x34\x62\xfa\x61\xf0\xc6\x91\xbc\xe8\xd2\x9e\xcd\x78\x79\
+\x59\xa4\xd2\x90\xc5\xed\xc6\xc1\xe2\xd8\x48\xf4\x28\x9e\xb6\x93\
+\x27\x39\x3e\x0a\x64\x90\xeb\xcc\xa3\xeb\xfe\x94\x11\x27\x4d\x3b\
+\x61\x2c\x12\xba\x76\x34\xc3\x84\xe3\xc9\x8a\x9e\x61\x69\x59\x79\
+\x85\x60\x81\x4e\xf8\x0e\xfa\xb7\x22\xde\x4d\xec\x4d\x58\x1a\x02\
+\xb8\x96\xe2\x2a\x55\xee\x67\x26\x40\xe4\xc8\xdb\x09\x15\x5a\x3b\
+\x93\x23\x32\xea\x0e\x02\xdc\x0b\x20\xe5\x7e\xe0\xf0\x65\x2a\x20\
+\x9b\x23\x2c\x01\xdd\x94\xe8\x88\xd4\x40\xa0\x8e\x2a\x92\x44\x6b\
+\xc9\x4b\x9e\x8f\xfc\x12\xfa\x6b\xb7\x7a\xda\xcb\x9e\x94\x96\xd1\
+\x51\x86\x13\x7f\xbc\xc2\x29\x2d\x1a\x33\x6f\xd0\x62\x44\x6e\xca\
+\xcf\x12\x8c\xd6\xd6\xd6\xd2\xdc\xd4\x94\x34\x24\xb0\x00\xbc\xf0\
+\x8c\x28\xcb\x4d\x8f\xbe\x18\x1d\x09\xa9\xc4\x38\xa1\x92\x26\x6e\
+\xb6\xda\xbd\x9f\x49\x8e\x3f\x8d\xb8\x96\x9f\x61\xe1\xb5\xe0\x96\
+\x46\xb0\x2f\xb8\x76\xb0\xaf\xaf\xa1\xa1\xa1\x44\x9f\x06\x50\x8c\
+\xd7\x76\x1e\x22\x52\x06\x7e\x9a\xd9\xc4\x13\x42\x8e\x78\x2a\x23\
+\x70\xe2\x28\x62\xac\x20\xa4\xed\x7c\x2d\x1d\x00\x9d\x34\x1d\x37\
+\xb6\xf3\x83\x0f\x3f\xfe\xe4\xbf\xbf\x5a\xb3\x6e\x43\x47\x47\xe7\
+\xe7\x5f\xac\x1d\xa9\xd6\x82\x02\x96\xba\xd9\x09\x5c\x65\x98\x86\
+\xb5\x54\xe2\x42\x99\x93\x98\x16\x6a\x3c\x6f\x12\xc8\x07\x97\x3e\
+\x27\xbb\x9e\x39\x73\x7a\x6f\x5f\xdf\xd4\x29\x5b\x4d\x9d\x36\xf9\
+\xcf\x77\x99\x3b\xd2\xdf\x47\x7c\x2d\x9e\xc6\xe4\x60\x98\xcc\xe9\
+\x4f\xa9\xb5\xe3\x9c\x74\x33\x29\x31\xb5\x14\xd2\x56\x92\x59\xbb\
+\xcf\x4b\xb7\x4a\x64\x33\x90\xc5\x38\x71\x5c\xd7\xfd\x0f\x3e\xb9\
+\xf2\xd5\x4f\x97\x2d\xfb\xeb\xd9\x53\x3b\xb6\xde\x7a\xeb\x1f\x35\
+\x35\xd7\xb3\x4f\x82\x51\x67\x0a\x46\x45\xfe\x07\x34\x02\x1a\xb8\
+\xbf\x70\xbc\x5c\x6a\x2e\x3a\xf9\x61\x82\x69\x95\x51\x79\x6a\xbe\
+\xfc\xf2\x8b\x6a\x75\xe4\xf6\x7f\x7c\x74\x87\xed\x57\x9e\x73\xce\
+\xa9\x43\x83\xbd\x09\x1b\x20\xe2\x51\xcc\x29\x26\x18\x39\x76\x29\
+\x9d\xbe\xf4\x1c\xad\xd8\xc0\x28\xa8\x40\x92\x41\x72\x26\x69\x6a\
+\x5a\x5b\x5b\xde\xff\xe0\xa3\xdf\xfd\xfe\x0f\xcb\xef\xff\xe7\xc6\
+\x4a\xc3\xff\x42\x27\x60\xd6\xac\x99\xf8\x5c\xbc\xf8\xc7\x67\x9c\
+\x71\xc6\x6b\xaf\xbe\xb6\xdb\xbc\xdd\x87\x07\xfb\x1a\x92\x84\x65\
+\xbf\x09\x64\x9d\xd3\x27\x4c\x52\x16\x74\xe7\x1b\x38\x7d\x16\x16\
+\xcc\xc8\x15\xae\x44\xf6\x29\x14\x5b\x5b\x6b\xcb\xef\xff\xe3\xcd\
+\xc3\x7e\xf2\x57\x40\x07\xce\x47\x63\x63\x63\xa9\x57\x51\x74\x0b\
+\x4a\xff\x3a\x8a\x9f\x51\xcf\x1d\x29\xf5\x2d\x82\xc8\xb0\x0d\x64\
+\xde\xdc\xdc\xbc\xf4\xa7\x87\xff\xfb\x8b\xcf\xec\xfe\xc3\xbd\x8c\
+\xe9\xb5\xe2\x2e\x9b\x66\x9a\xb7\x8c\x9c\x78\xf5\xac\xc7\xbe\xa7\
+\x57\x9c\x10\x65\xd6\x42\x10\x1a\x9c\x64\x77\x00\x88\xd5\x3c\x2b\
+\xaf\xa1\xa1\xda\x36\x53\xb6\xc9\x38\xb0\x52\x49\x92\x84\xdf\x94\
+\xa6\xe9\x1f\x11\x20\xc8\x63\x0c\xc6\x59\x3d\xb6\x6d\xb3\xcd\x36\
+\x2f\xf4\x0e\x1b\x33\x4c\xf6\x83\x12\xd2\x8a\x5f\x91\x49\xf1\x44\
+\x13\xaf\x3a\x0e\x4a\x61\xeb\xd5\x58\xba\x39\x40\xb2\xd9\xa7\xc6\
+\x3f\x80\x20\xcd\xcb\x20\xcf\xa9\xe8\x5d\xbf\xbe\xbb\xad\xbd\x43\
+\x0e\x9d\x56\x0c\xd4\xf4\xc7\x65\xae\xe1\xe1\x61\xc2\xc8\x2d\x6f\
+\x63\xa5\xa9\xc9\x79\x45\x04\xb8\x72\xae\x46\x50\xb7\x7d\x43\x43\
+\x43\x23\x23\x9a\xbd\x89\x5a\xad\xd2\xd0\xd0\xd1\xde\xee\xe5\x51\
+\x6a\x21\xd3\x19\xf3\x38\x4d\x6c\x02\x77\xe2\x15\x21\xaa\xe2\x74\
+\x8c\xa9\x55\xab\xad\x6d\x6d\x13\x26\x4c\x30\x4e\xf3\x41\xf6\x1b\
+\xa0\xf3\xf1\xc7\x1f\xaf\x58\xb1\xe2\xcb\x2f\xbf\x8c\x1c\xe8\x88\
+\x04\x22\x7b\xb7\xae\x67\x5b\xdf\xe3\x8f\x68\xcd\x3a\x22\xc9\x56\
+\x5b\x6d\xb5\xe7\x9e\x7b\xee\xbc\xf3\xce\x98\x6f\xf0\x75\x6a\x59\
+\x44\xc2\x38\xc6\xb1\x36\xa4\xb3\xf6\xb2\x61\x37\x34\x75\xae\x7c\
+\xe9\xa5\x5f\x5e\x7e\xdb\x8c\xad\x27\x8f\xc0\x6c\x6a\x6a\x4c\x1a\
+\x1b\x9b\x3b\x3a\xd6\x6e\xda\xbc\x68\xf1\xbc\x65\x3f\x3b\x72\x78\
+\x60\x73\xa5\x21\xf1\x53\x27\x15\x90\x91\x93\x15\x44\xce\xb6\xce\
+\x6b\x31\xad\x89\x7e\xc1\x4c\x96\x08\x1d\xc7\x82\x70\x5e\x7f\xfd\
+\xf5\x63\x8f\x3d\x76\xc6\x8c\x19\x63\xc6\x8c\xc1\x57\xd0\x6d\xc5\
+\x36\xba\xc8\xe2\x26\xf6\x9a\xb8\x80\x2e\xa8\x9f\x7b\x12\xdf\xc8\
+\xef\x63\xd7\xa1\x18\x8b\xa0\x97\xa6\xf9\xb6\x76\xed\x5a\x88\xe4\
+\xf3\xce\x3b\xef\x80\x03\x0e\x00\x46\x44\x47\x78\xea\x17\x5f\xac\
+\x51\xa6\x6a\xad\xad\x20\x3a\xbc\xa0\x69\xd8\xb0\xb9\x7b\x61\x5b\
+\xd7\x31\x0b\x16\xf5\x34\xb7\xb4\x74\x75\x35\x8c\x1d\x3b\x76\xfa\
+\xf4\x17\xdf\x7c\xe7\x9d\xf5\xef\xd2\x4f\x28\x90\xe3\xcc\x22\x8b\
+\x8f\x57\x58\x6e\x6c\x15\x41\x8d\x86\x4d\x64\xe3\x98\x9f\x48\xb2\
+\xd6\xd2\xd2\xb2\x7c\xf9\xf2\x1d\x76\xd8\x61\xf7\xdd\x77\x07\x91\
+\x57\xf2\x8d\xe0\x00\x6a\x0c\x13\x77\xd2\x45\x11\xa6\x52\x8c\x18\
+\x1d\xa2\x59\x89\x4e\x15\x44\xdd\xda\x3a\x6d\xda\xb4\x07\x1f\x7c\
+\x10\x00\x49\xe7\x7b\xfd\xfa\x4d\xda\xcb\x65\x0c\x38\x35\x89\xf6\
+\x7e\x9a\x45\xb0\xc1\x54\x1a\x06\x4d\x3a\x94\xd6\x54\xad\xda\x50\
+\x1d\x69\x1b\x1e\xaa\xd6\xaa\x18\x97\x23\x5e\xcf\x9a\x19\xb3\x19\
+\x1d\x44\xb5\x5f\xb5\x8a\x90\xb2\x56\x34\xb1\xcd\xef\x47\x80\x99\
+\x00\xa3\x75\xeb\xd6\xc1\x1a\xda\xb2\x65\x4b\xf6\x4a\xd1\x30\x74\
+\x42\x07\xf7\xe0\x02\x9f\xb8\xe6\xe9\xd1\x05\xfa\xf9\x93\x60\xd2\
+\xa2\xe5\xd4\x8d\x98\x39\x1e\x45\x9f\xa9\x95\xa9\x9b\x36\x6d\xc2\
+\x00\x70\x8d\x91\x4c\x9c\x38\x11\xeb\x84\xce\x31\x9d\x63\xa6\x4e\
+\x9d\x5a\x1b\xa9\x42\x91\xb8\x91\xb3\xae\x76\x71\x3e\xf2\x0f\x54\
+\xf8\x5f\x28\x07\xcf\x4c\x4e\x82\x5b\xce\x31\x41\xf7\xb3\xb3\x1a\
+\x7c\x31\x0b\xa4\x16\xd6\x9d\x14\x43\x11\xa7\x10\xbd\x74\x76\x76\
+\xe2\x82\x98\x8e\x0c\x02\xd0\x7f\x3d\x22\x92\x14\x44\x44\x54\x64\
+\x31\x23\x16\x86\x00\x75\x8e\x8e\x52\x4d\x4d\x4d\x6d\x6d\x6d\x03\
+\x03\x03\xf4\x15\xfd\xe8\x69\x6f\x6f\xcf\x6e\xd3\x0d\xc1\x1e\xb6\
+\x3e\x8d\x0c\x01\xe8\x62\x23\x61\x2c\x8d\x1e\xcd\x9a\x50\xba\x77\
+\x3a\xa8\x79\xa3\x0c\x87\x4a\xc8\x7e\x95\xc1\x6d\x9a\x8f\x94\x23\
+\x98\x39\xc6\xfa\xe2\x8b\x2f\x76\x75\x75\x0d\x0e\x0e\xe2\x2b\x3a\
+\x27\x4d\x9a\xb4\xcf\x3e\xfb\xf4\xf7\xf7\x37\xf8\x26\xa1\xa1\x4f\
+\xdc\x46\x44\x44\xd7\x11\x05\x31\xdd\x45\x24\x46\x90\xb9\xd9\x89\
+\xe8\x44\xea\xc2\x28\xc6\x4f\x3a\x21\x1b\xc7\xd2\x0d\xf9\x98\x8e\
+\x33\xfc\x34\xbd\x31\xe3\xfd\x54\xcb\x99\x19\x19\x38\x93\x91\xac\
+\x4d\x56\x94\xc1\x96\x09\x4e\xbe\xe4\xb0\xcc\x14\xda\xbc\x79\xf3\
+\xa7\x9f\x7e\x3a\x65\xca\x14\x52\x28\x44\x3b\x18\x19\x44\xde\xd7\
+\x5f\x7f\xbd\x7e\xfd\xfa\xa3\x8f\x3e\xba\xbb\xbb\x1b\xd4\xf4\xc4\
+\x13\x4f\xf4\xf6\xf6\x1e\x71\xc4\x11\xf8\x5a\xc4\x88\xa0\x91\x48\
+\x45\x10\x48\x80\x88\xb3\xc2\x92\x5b\x81\xc2\xe8\xf8\x96\x2a\x0f\
+\x8f\x0b\x69\x78\x14\x9c\x03\xee\xfc\xf5\x60\x08\xf8\x88\x82\x9f\
+\xa0\x4a\x8c\x61\x53\xc8\x06\xae\x0c\x05\x34\xdc\x82\x89\xb4\x0f\
+\x85\x49\x82\x67\x6f\x58\x9b\x00\x0e\x50\x32\xaf\x21\x3e\x47\x46\
+\x46\x20\x35\x31\x81\x93\x4e\x3a\x09\x7a\xed\xb3\xcf\x3e\x5b\xb8\
+\x70\xe1\xec\xd9\xb3\x2f\xbe\xf8\x62\x58\x03\x4f\x3d\xf5\x14\xb0\
+\x23\x34\x25\x67\x45\xba\xaf\xb4\x81\x4f\x99\x3d\x23\x8e\x66\x43\
+\x31\x8c\xcd\xfd\xab\x69\xbc\x2c\x83\x48\x5e\x58\xb5\xe3\x04\x8d\
+\x5c\x73\x1f\x58\x33\xec\xf9\x53\xb4\x46\xa8\x26\x17\xe5\xcd\xa6\
+\x1c\xb4\x18\x45\x2c\xb4\x0f\xce\xf9\x06\x31\x0c\xce\x07\xef\x00\
+\x0e\x1a\x1f\xc0\x42\x84\xff\xd9\x67\x9f\x05\x34\x40\xea\x90\x43\
+\x0e\x79\xe0\x81\x07\xd6\xac\x59\x83\x6b\xc8\xce\x4b\x2e\xb9\xe4\
+\xdd\x77\xdf\xfd\xfc\xf3\xcf\x81\xa0\x9c\x58\x51\x30\x8d\x02\x8d\
+\xbc\x81\x51\x26\x0a\x2a\xc6\xf6\xb3\xa9\xfa\xd4\x4b\x10\x44\xec\
+\x7c\x19\x1d\x22\x79\x3e\x6e\xe1\x6f\xd0\xc6\x8b\x5d\x6f\x23\xc4\
+\xee\x6e\x22\x0c\x45\xe3\xfd\x65\x0a\xfa\x06\x19\x44\xaa\x84\x99\
+\x02\xd7\xe3\xc6\x8d\x03\x73\x3d\xff\xfc\xf3\x98\xd5\x3d\xf7\xdc\
+\x73\xca\x29\xa7\x40\xc5\xd0\x9f\x90\x30\x99\x3b\x77\x2e\x3b\x71\
+\x91\x9a\xaf\x87\x4e\xd1\x74\x28\xa5\x23\xe6\x41\x11\xc6\xb2\x91\
+\x54\x1f\x7d\x64\x1b\xd6\x73\x42\x3e\xa0\xe2\x22\x3d\xca\xb9\x68\
+\x1e\x47\xcf\x9d\x84\xb2\xf3\xc5\x02\x8b\x71\x00\x53\xb9\x28\x58\
+\x79\x96\x92\x55\x0f\x85\x44\x4e\x3f\xfd\x74\xd0\xcb\xd5\x57\x5f\
+\xbd\x64\xc9\x92\xfd\xf6\xdb\x8f\xe4\x34\x2d\x38\x88\x4e\x5a\x89\
+\xf4\xab\x06\xd1\x46\xc7\x48\xa2\x53\x34\x32\xa3\x0c\xb0\x63\x09\
+\xa3\x83\x23\xee\x94\xb4\x71\x26\x5d\x08\x49\x73\x1c\x4e\x09\xc1\
+\xcb\x94\xe1\x48\x82\xa2\x7f\xec\xd3\x05\x2d\xc6\x21\x49\x23\xc8\
+\x47\x0e\x45\xe6\x3f\xb0\x8c\x60\xa8\xe3\x8f\x3f\x1e\x3a\x6b\x97\
+\x5d\x76\x81\x7d\x44\x9a\x3e\x7b\xa2\xf7\x6f\x79\x4a\x72\x86\x0d\
+\xf9\x26\x6d\x45\x16\x79\xb4\x00\xf4\x5e\x32\xbb\xa4\x6d\x19\x2d\
+\x9e\x76\xb8\x38\x9f\xdd\xbb\xe3\x6e\xf2\x6c\x14\x29\x99\xc3\xf0\
+\x4e\xaa\x8b\x2f\xeb\xe0\x03\xa5\xa9\x51\x79\xb3\xa3\x52\xe2\x4c\
+\x89\xe1\x32\x40\x51\x52\x81\x97\x7a\xce\x9c\x39\x50\xea\x84\x0e\
+\x4f\x06\xe6\x09\x99\x8b\x8c\x69\x3d\x8c\x98\x71\x84\x2f\x59\xe3\
+\xaf\xfc\x40\x69\x3d\x15\xd3\xf0\x71\x44\x21\xcb\x2f\x79\x49\x4b\
+\xf3\x0d\xa9\x04\xef\xaa\xeb\x20\x4d\x98\xf5\x88\x1c\xd9\xb0\x74\
+\x32\x28\xf2\x11\x59\x3c\x8f\xc2\x65\x18\x37\x40\x81\x0c\x82\xb8\
+\xc1\x05\x59\x40\x3c\x79\x40\x83\x3f\x41\xd9\x43\xb4\x93\xe4\xe2\
+\xf5\x2f\x62\x54\xea\xb5\x44\xca\x4b\x1a\x96\xa6\x0c\x1e\x17\x96\
+\x34\x3e\x25\x68\x9c\x9a\xae\x9b\xe7\xd5\x2e\xa8\xc8\xfa\x5e\x07\
+\xcb\x40\x0b\xc1\x6e\xfd\xe4\x5c\xb8\xc3\x46\x21\x4d\x14\x32\xcd\
+\x7b\xe1\x18\x25\x44\xcf\x82\x05\x0b\x1e\x7e\xf8\x61\x68\xab\xc9\
+\x93\x27\x03\x11\x28\x2c\xf8\x6b\xf8\xc4\x35\x2c\xe9\xa5\x4b\x97\
+\x3e\xf2\xc8\x23\x50\x64\x50\x73\xd2\xe4\xfb\x56\x8c\x22\xe2\x8a\
+\x7e\x58\x1e\x1b\xf0\xdc\xc5\x01\x0d\x1f\xfc\x66\xb9\x22\xa6\xe3\
+\x85\x34\xa7\x40\x94\x47\xc7\x27\x36\x28\xbd\xa7\x59\x1f\x26\x26\
+\x97\xd6\xd0\xe4\xdf\x1a\x5d\xba\x54\xae\x41\x06\x23\x18\x72\xe4\
+\x91\x47\xde\x71\xc7\x1d\xaf\xbc\xf2\x0a\xbc\x24\xe8\x78\x50\x0d\
+\x22\x21\xe4\x70\x41\x2a\xc1\xed\xbe\xee\xba\xeb\x36\x6c\xd8\x00\
+\xd4\xa4\x11\x2c\x27\xcc\x58\x34\xda\x16\xe1\x12\xfd\x84\xe9\xb7\
+\x6c\x60\x21\x3a\xa1\x3d\x45\x68\x6f\x45\x07\xe2\xf0\x3e\x5a\x90\
+\xaa\x85\x5a\x1c\xdf\x6b\xd8\x24\xac\xc8\x31\x90\xe4\x27\x57\x25\
+\x92\x41\x32\x76\x83\xa1\x83\xb3\x10\xa0\x39\xfc\xf0\xc3\x9f\x7e\
+\xfa\x69\x90\x09\x05\xee\x30\x49\x20\x72\xd5\x55\x57\xc1\x05\x99\
+\x3f\x7f\xfe\xb9\xe7\x9e\x0b\x1d\x77\xc3\x0d\x37\x20\x96\x04\xd4\
+\x48\xeb\x47\x8d\x61\x8a\x84\x5d\x3d\x6f\xb6\x14\x20\xc9\x62\xf9\
+\xa2\x0e\xe3\xd3\x03\xb1\x1f\xa6\xbd\xed\x1d\xe5\xe6\x49\x87\x6b\
+\x31\x8c\x28\x68\xef\x93\xfb\xc2\x50\x95\xe3\xe6\x21\x62\xb6\x40\
+\x01\x18\xc1\xc9\x40\x0f\xd9\x78\x70\x35\x56\xad\x5a\x75\xc5\x15\
+\x57\xdc\x7c\xf3\xcd\xd0\x6b\x50\x70\x60\xc6\xeb\xaf\xbf\xfe\x9a\
+\x6b\xae\x81\xca\xa3\x52\xb6\x28\x42\xc6\xd4\x54\xf4\xbf\xbe\x33\
+\xf9\x94\x42\xe3\x3b\x95\x09\x39\x0a\x9f\xee\xd2\x21\x6f\x6a\xa2\
+\x08\x6f\x0a\x6f\xc3\x65\x86\x4c\x2c\x83\x1c\xbf\x92\xfc\x2f\xcb\
+\xed\xc8\xd1\x10\xd7\x80\xd7\x20\x8c\x07\x7c\x83\x53\xb6\xd7\x5e\
+\x7b\xcd\x9c\x39\xf3\xac\xb3\xce\x82\x07\x0b\xd6\x83\x91\xbd\xc7\
+\x1e\x7b\xc0\xff\x00\x76\xa5\x15\x3d\x84\x0b\x19\xa2\x91\x4e\x28\
+\xfd\x1a\x8b\x21\xe3\x92\x42\xa6\xbc\xb8\xcd\x33\x0c\x27\x33\x54\
+\xc8\xc9\xc7\xf1\x6f\xbe\x9b\x12\x8b\xfe\xef\x41\x06\x59\x9b\x93\
+\x49\x53\x95\x16\xb5\x45\x30\x49\x63\x87\x3c\x58\xb0\x18\xf8\x6e\
+\xfa\xf4\xe9\x88\xfe\x21\x6a\x83\xaf\x00\x6b\xb7\xdd\x76\xbb\xe8\
+\xa2\x8b\x60\x7c\x47\x28\xb0\x47\x8a\x06\xac\x8b\x30\x45\xc5\x74\
+\x25\x14\xe4\xd6\xd3\xa5\x4f\xf3\xf7\x2b\xc3\x56\x8e\x0e\xae\x93\
+\xb3\x1d\x85\x0c\xd1\x02\x1d\x67\x03\xaa\x30\xc7\xa4\xac\x2c\x8b\
+\x7e\xaf\x22\x4a\x8e\x84\x51\xb1\x6a\x91\x2c\x17\xc4\x46\xc1\x77\
+\xa0\xa0\x33\xcf\x3c\x13\x3a\x0e\xf1\xad\x0b\x2e\xb8\x60\xd6\xac\
+\x59\xa0\xa3\xf1\xe3\xc7\x13\x0a\x4c\x35\x04\x0d\x18\x90\x00\xe2\
+\xbf\x72\xbc\xad\x54\x14\xe6\xbc\x55\x1f\xdd\xf0\x5a\x9b\x61\x72\
+\x6b\x4d\x20\xb2\xaa\x12\xf9\x09\x27\x9f\x72\x91\x90\x5c\x5a\xc4\
+\x32\x4a\x24\x0c\x85\x26\x2b\x5f\xc9\xa8\x0e\xb2\x38\x07\xc2\xe8\
+\x84\x13\x4e\x80\x60\x3a\xfb\xec\xb3\x21\xa7\xc0\x7a\x97\x5e\x7a\
+\x29\x52\x34\x97\x5f\x7e\x39\x30\x62\x62\x61\xc2\xa9\xfa\x16\x61\
+\x14\xd1\x5a\x09\x7d\xb9\x90\xa1\x62\xf3\x99\xd5\xb6\x11\x35\x59\
+\xb2\x50\xc4\x57\x1e\xe5\x74\x5f\xae\x34\x8f\x4d\x05\x52\x23\x11\
+\x3f\x07\xa8\xeb\xb7\x51\x30\xe2\x60\x20\x08\xe7\xd4\x53\x4f\x85\
+\xcb\x0a\x09\x0d\x5e\x43\x78\xe8\xca\x2b\xaf\x84\x61\x09\x99\x8d\
+\xc0\x00\x6c\xa5\x9a\x6f\x44\x3e\xa5\x18\xf1\x45\x69\xed\x2a\x2b\
+\x65\xe7\xb1\x4a\x99\xe2\x53\x13\x0e\xaa\x9c\xc8\xe1\xbc\x60\xb0\
+\x06\x73\x30\xf9\x68\x8f\xa3\xa0\xf0\x67\x56\xf0\x21\x52\x32\x5a\
+\x05\xef\xe8\x28\xe2\x49\xc0\x08\x02\xe8\xa3\x8f\x3e\xba\xf7\xde\
+\x7b\x11\x1e\x82\x65\x70\xed\xb5\xd7\x42\xaf\xdd\x77\xdf\x7d\xc0\
+\x08\xce\x2d\xd3\xce\x88\x6d\x11\x46\x11\xbb\x31\x4c\xb1\x90\x8e\
+\x94\x4c\xd0\xc7\x2e\x40\x48\x7a\x5b\x09\x44\xb9\xc4\xa7\xbc\x66\
+\x58\x2b\x19\xed\x91\x51\x61\xed\x0c\x4a\x65\xd4\xa8\x65\xc7\x1c\
+\xf4\x8b\xee\x29\xae\x36\x84\xf4\x69\xa7\x9d\xf6\xd0\x43\x0f\xc1\
+\xb0\x86\xe7\x01\x50\x60\x19\x21\xb9\xf6\xe8\xa3\x8f\x82\xac\xa0\
+\xf8\x24\x7f\x31\x3a\x74\xc1\xf2\xbb\x9e\x54\x12\x1c\x65\xa4\x2b\
+\x9f\x23\x6e\x57\xff\x20\xe2\xd2\x14\x0b\x0b\x91\xb5\x42\xf1\x34\
+\xfb\x2c\x1c\x0f\x62\x43\x5a\x19\xcf\x82\x05\x35\x36\x0a\x5b\x95\
+\xea\x26\xea\xa4\xa9\x82\xb9\xee\xba\xeb\xae\x27\x9f\x7c\x12\xee\
+\x08\x3a\x11\x3f\x7a\xec\xb1\xc7\x60\x61\x42\x1e\x81\xac\xaa\x85\
+\xc6\x7a\x8d\x31\xa2\x0c\x47\xa9\x8e\xd3\x41\xbe\xd6\x29\x3f\xe7\
+\x60\x4f\x5e\x74\x49\x22\xca\xd9\x3a\xbe\x74\x36\xae\x0f\x22\xfb\
+\xc8\x05\x84\x74\x09\x1c\x3c\x3e\xba\x90\xb1\xab\xb4\x4e\x83\x30\
+\x02\xd5\x80\x76\x80\x11\x22\x8d\x10\xdb\x07\x1e\x78\x20\xfa\xef\
+\xbe\xfb\xee\x63\x8e\x39\x06\x5f\x17\x2d\x5a\x04\x11\x4e\x19\xed\
+\x52\xf5\x2f\x25\x51\x39\x11\xf9\xb5\x8d\xec\x0f\x5f\x6a\xe3\x4a\
+\x3e\x8b\xc6\x39\xa7\x77\x62\xfe\x32\xce\x2f\x8b\xeb\x83\xb8\x12\
+\xcb\x18\x5f\x89\x57\xd0\xaf\x64\xec\xf2\x1c\x38\x33\x53\x4a\x41\
+\x34\x37\x18\x47\x20\x13\x88\x67\x58\xd8\x97\x5d\x76\x19\x81\x82\
+\x7e\xd0\xd4\x71\xc7\x1d\x87\xbf\xce\x9b\x37\x0f\x49\x01\x5c\x14\
+\x9f\x10\x09\x6c\x0e\x12\xe5\x49\xc8\x95\x1d\xc4\x26\x24\xfb\xa5\
+\xaa\xe0\xac\x86\xd0\x7e\x5e\x7f\x39\x6b\x28\x8d\x65\x50\x88\x01\
+\xf8\xe0\xa3\x56\xc6\xd4\x11\xc1\x52\x00\x15\x49\x46\xae\x36\x73\
+\x07\x1e\x0e\x75\x06\x8f\x0c\x00\x41\xa9\xbd\xf3\xce\x3b\x80\x03\
+\x90\xdd\x76\xdb\x6d\xb7\xdc\x72\xcb\x7b\xef\xbd\x07\x87\x16\x84\
+\x56\x14\x43\xb5\x42\x2b\xb1\x2d\x4c\x48\x6a\xe4\x7b\xdd\x74\x95\
+\x74\x35\x42\xfd\x1a\x33\x65\x2e\xdd\xe8\x73\x5e\xba\x04\x20\xc3\
+\x9e\x98\x11\xe2\x2b\xef\x13\x44\xe8\x44\x48\x45\xe8\x44\x2b\x0f\
+\xa7\x04\x6e\xed\x39\xe7\x9c\x73\xfe\xf9\xe7\xc3\xfb\xc7\xfc\x21\
+\xa7\xa1\xf5\x6f\xbd\xf5\x56\xe2\x32\x5b\x85\x31\x42\x91\x7f\x36\
+\x1d\x8b\xa2\x3a\xd2\x62\x9a\x22\x3f\x69\x08\x6c\x84\x30\xaa\x96\
+\xda\x3f\x57\x36\xc8\x79\x10\x0e\x92\xf0\xbe\x95\xbc\x51\xa0\x92\
+\xa8\x3e\x48\x3b\x4b\x51\xd7\xb3\x7d\x8a\xaa\x37\x92\x14\x52\x76\
+\x70\xc3\x6c\xf1\x04\xb0\x12\x92\x6b\x88\x93\x20\x59\xd4\xd3\xd3\
+\x03\xaa\xd9\x6e\xbb\xed\x20\x8c\x2e\xbc\xf0\x42\xb0\x21\x44\x15\
+\xe5\x36\x10\x90\xa4\x00\x40\x91\x88\x4a\xb4\x18\x19\x3c\xd6\x4f\
+\xd2\xdc\xe1\xcd\x19\x76\xbb\xf8\x5e\x4e\x92\x46\xe5\xe4\x4a\x09\
+\xe7\x5e\x44\x0d\x65\x7d\x90\xcf\x81\xf8\xa0\x74\x5a\x06\x8d\x94\
+\x41\xdc\xc3\x9f\x94\xea\xe3\x64\x71\xbc\xf7\x2a\x49\xa0\xf8\x11\
+\x09\x01\xb1\x00\xa3\x3b\xef\xbc\x13\xc4\x02\x91\x04\xd7\x1f\xce\
+\x1a\x8c\x6f\x10\x0e\x8f\x18\x4e\x2f\xae\xa9\x87\x20\x26\x91\x57\
+\x12\x0d\x12\x51\x30\x2d\xa4\x84\x8f\x3c\x2b\x59\xa0\xc8\xa9\x09\
+\xa5\xeb\x6f\xbd\x12\x5f\x2b\xe2\x26\xe3\x64\x8f\x36\xa5\x4e\x50\
+\x11\x0e\xd9\xc3\x49\x74\xfe\x2c\x6a\x5c\xf2\x6c\x11\x5a\x43\x40\
+\x12\xe4\x03\x53\xfb\xf6\xdb\x6f\x07\x59\xed\xbf\xff\xfe\xe8\x7f\
+\xf9\xe5\x97\x41\x41\x04\xc4\xc6\x8d\x1b\x1f\x7f\xfc\x71\xd8\x99\
+\x80\x52\xea\xfb\xa2\x0c\xd2\xb2\xfe\xc0\xa8\x7c\x70\x42\x99\xbc\
+\x59\xac\x44\x69\x43\xe9\x66\x37\xf9\x93\x62\x7d\x90\xab\x96\x35\
+\xba\x64\x07\x8e\x14\xd2\x04\x81\xcc\x0e\x33\xc9\x94\xa2\x13\x01\
+\x04\x67\x0d\x32\x68\xdf\x7d\xf7\x05\x46\xc8\x1d\x21\xa2\x06\x38\
+\x00\xd9\xde\x7b\xef\x4d\x3c\x05\xaa\x01\x97\x41\xcd\x41\x42\x21\
+\x2a\x00\x8c\xd8\x71\x2b\xd9\xfc\xc4\x01\xb3\xfc\xa8\xdd\x8a\x1b\
+\xc3\x2a\x3e\xbf\x55\xc0\x48\x5a\x11\x4e\x78\xd8\x1f\x12\x82\xf6\
+\x62\xab\x88\x77\xe2\xca\xdc\x88\x74\xd4\xc6\x32\x28\x12\x1c\x45\
+\x07\x02\xf3\xc7\x1b\x81\x11\x08\x07\x29\xc6\x9b\x6e\xba\x09\x1a\
+\x0d\x74\x04\xee\x43\x08\x09\x60\xe1\xfa\xab\xaf\xbe\x82\x6c\x42\
+\x32\x12\x6e\x0a\xe4\x11\x7e\xc2\xa2\xad\xc4\x9b\xd7\x4a\x9a\x7f\
+\x52\xa4\xfa\xe0\x57\x08\xf0\x70\xb9\xb6\x8c\x0c\x3a\x2d\xee\x2c\
+\x1d\xa3\x85\x43\x9f\xe4\x73\x26\x1c\xbb\x57\x45\xa3\xb9\xe8\x22\
+\x45\x3d\x91\xde\x91\xce\x7a\xd1\xa5\xc0\x93\xe1\xac\x21\xa3\x8f\
+\x0b\x48\xe8\x28\xad\x84\x06\xd5\x76\xd8\x61\x87\xe1\x4f\x30\x11\
+\xf8\xe7\xf5\xac\x44\x97\xef\xd4\xf9\xf0\x9e\xf1\x8a\x9d\x02\xc9\
+\x21\x30\xc4\x81\x1f\xbe\xc3\xe9\x2f\xad\x83\x4f\x17\x0c\xc5\x42\
+\xd1\xac\xb4\x13\x63\x19\xc4\x17\x5c\x7a\x21\x45\x32\x5f\x73\x78\
+\xa8\x34\xbd\x45\xb9\x30\x48\x1c\x88\x67\x96\xee\xbc\x06\x59\x29\
+\x72\x5b\x1b\x2e\x20\xad\xc0\x6b\x4c\x7d\x24\xa4\x4b\xbd\x79\xde\
+\xee\x14\x2a\x38\x74\x70\xcf\xa5\xa8\x16\x5b\x1f\x72\xfe\x89\x0e\
+\x31\x55\x51\x26\x24\xeb\x83\x9c\x59\xe1\x37\x63\xd5\x53\xf0\x04\
+\x90\x14\x3d\x2c\x74\x18\x26\xde\x3f\x51\x44\x47\x02\x44\x80\x4a\
+\x15\x4e\xf2\x18\xe8\xdc\x78\xe3\x8d\xa8\x87\x3c\xe8\xa0\x83\xa0\
+\xe6\x98\x43\xb9\x94\x2b\xcf\x68\x32\x14\x9d\x33\x91\x95\xe3\x2f\
+\xad\xf2\x51\x31\x57\x7b\xe0\x92\x14\x85\x7d\xc3\x2e\xa5\xa1\xe2\
+\xfa\x20\x1f\xe0\xe5\x00\x66\x2c\x62\xd9\xf0\xd1\x3a\xde\x82\xa3\
+\x0a\xdb\x5c\xe5\x3a\x73\xd5\x1e\x57\x40\x30\x40\x98\x39\xbe\x92\
+\x59\x48\x37\x40\x1e\x01\x1d\x60\xf4\xc1\x07\x1f\x90\x8f\x02\x8c\
+\x88\x7f\xeb\xec\x50\x75\x49\x67\x23\x77\x66\x0a\x3b\x0e\x71\x78\
+\xa0\x5e\xb3\xff\xd3\x82\x60\x79\xbd\x9e\x2a\xd1\xf1\x4a\x40\x1a\
+\xd5\x28\x12\xdd\x58\x4f\x35\xcf\x62\xac\xa1\x98\xce\x8b\xea\x9c\
+\xf2\x65\x04\x07\xbe\x62\xce\x9c\xcf\x91\x14\x14\xa5\x2e\xf0\x13\
+\xe2\x32\x92\x4a\x60\x28\x18\xd6\x60\xbd\x65\xcb\x96\x41\xf4\x20\
+\x3b\x02\x74\x16\x2f\x5e\x0c\x2b\x9c\x1e\x52\x2e\x83\x72\xa6\xaf\
+\x50\xde\xb6\x66\xac\xb3\xb9\x79\x42\x7b\x3b\x8a\x5c\x5b\xc6\x8c\
+\x41\x95\x6b\x63\x57\xd7\x38\xe4\xa9\xbe\x89\xed\x1f\x11\xe7\x0f\
+\x69\x9f\xb8\x46\xd1\x28\x5f\xfd\x21\x62\xd2\x7e\x27\x62\x95\x25\
+\x45\x71\x0b\x64\x29\x67\x49\x16\x93\xb4\x23\x13\x90\x08\xa4\x41\
+\xd9\x3f\xf3\xcc\x33\x87\x1e\x7a\x28\xf4\x1a\x3a\x11\xae\x45\x31\
+\x34\x3a\x41\x3e\xf0\x66\x57\xaf\x5e\x8d\xb0\x91\x34\xb8\x0a\x32\
+\xc8\xe5\x20\x74\x7e\x8f\x33\x8d\x73\x78\x68\xf8\xb9\x0f\x3f\xdc\
+\x54\x49\x06\x92\x86\x4a\x5b\x5b\xd2\xd2\xd2\x31\x61\xfc\x1f\xbe\
+\x5a\x3b\x7d\xa7\x09\x56\xf9\xa5\xc6\xe8\xd8\x60\xc8\xd7\x28\x26\
+\xd2\x50\xd4\x6e\x9f\x47\x88\x9f\xd0\xc4\x10\x30\x45\x1e\x99\x8a\
+\x58\xeb\x39\x13\x91\xe6\x8a\x22\xaa\x45\xad\x4f\x0d\x28\xa0\x5e\
+\xef\xb9\xe7\x9e\x43\x14\x0d\x71\x7e\xbc\x11\x51\x91\xb7\xde\x7a\
+\xeb\x8d\x37\xde\x20\x64\x51\x3c\x4e\x05\xad\x1c\x45\x2b\xb7\xa4\
+\x4d\x8e\x04\x54\xe6\xdc\xeb\xc1\x81\xc1\x5d\xe7\xcc\x7a\xbf\xa5\
+\x92\x2e\xdc\xbb\x71\xfe\x7c\x3d\x7b\x76\x75\xc6\x8c\xc1\x09\x5b\
+\xbd\xf2\xfe\xbb\x7b\xce\x9f\x33\x3c\x30\x24\x76\x12\x6a\x2f\xcb\
+\xec\x85\x50\x4d\x15\x59\x1f\xe4\x6c\xab\x3c\x7f\x61\x4c\xf0\xb6\
+\x91\x6b\xa6\x0a\xe9\xd1\xab\xe8\xa5\x00\x92\x45\x73\x32\x31\x2f\
+\x73\x81\x98\x33\x9c\xaf\xa3\x8e\x3a\x0a\x21\x47\xe0\x82\x57\x80\
+\xcb\xd0\x8f\x20\xe4\xc9\x27\x9f\x8c\x52\x36\xa9\xe6\xea\xa5\x55\
+\x5d\xf9\x9c\xf6\x01\x7b\x5f\x45\xd6\xdf\x3f\x30\x7b\xe7\x9d\x7e\
+\xbc\x70\x6e\xb3\x49\xfe\x72\xff\xc5\xdd\xdd\x5b\x20\xda\xfe\xf3\
+\xbd\xff\x5a\xf0\xc3\x9d\xe6\xcf\xdf\x79\xd3\xc6\xee\x24\x5b\x83\
+\x90\x23\xb4\x3a\x30\xb5\x9b\x0e\x55\x4e\xcd\xe7\x4d\x74\xc5\xa5\
+\xc0\x72\x97\x06\x32\x7f\x94\x1d\xe5\x2c\x6b\x3d\x73\x99\xd5\x56\
+\xa4\xbf\x64\x8d\x9a\x6c\xe0\x26\xc8\x07\x64\x8a\x60\x25\xd2\x63\
+\xc1\x62\x58\x09\xa2\x3e\x26\x19\x0e\x06\x15\x17\x24\x8b\xe0\xd8\
+\x5a\x4c\x4d\x1b\x83\xbd\x2b\x8a\xd7\x0d\xf5\x0e\x2c\x3b\xf2\xc0\
+\x2b\x7f\xb1\x7c\x9f\x45\x7b\x83\x92\x51\x29\xf1\x9b\xdf\xfc\xdb\
+\xdf\x1c\x85\xeb\x54\x89\x4d\x77\x89\x71\x85\xbd\x76\xeb\x4f\x28\
+\xee\x88\xed\x20\xb6\x2c\x64\x56\x8c\x30\xc2\x58\x69\xd0\x45\x8b\
+\xae\x28\x77\x8a\xe8\x70\xed\x53\x94\x4a\x96\x5b\x54\x10\x0c\x91\
+\x81\x4a\x2a\x15\x65\xa5\x4e\xe2\x0f\x77\xc6\x32\xc8\x55\x8a\xa5\
+\xb4\xb0\xe4\xd6\x5b\x01\x9d\x3d\xbf\xaf\xb7\x7f\xd7\xdd\xe6\x4e\
+\x9d\xd2\xb1\x6a\xd5\xea\x03\xf6\xff\x8b\xd5\xaf\xbf\xd5\xd2\x34\
+\xb4\x60\xc1\x3c\x6c\x8b\x07\x71\xfb\x70\xad\xfb\x87\xca\x5c\x49\
+\x02\xe7\xec\x20\xb1\x55\xc3\xc7\x21\xf3\xc4\x0c\xb2\x07\x97\x91\
+\xbd\x5b\x1a\xd6\xa3\x42\x7a\x96\x59\x5c\x54\x5f\xba\x3f\xa3\x58\
+\x98\xc0\x6b\x50\x52\x6b\xe1\x01\xa2\x12\x75\xb0\x24\x55\x8e\x5a\
+\x04\xf5\x96\x9e\x1e\x08\x75\xec\xf9\x19\x1a\xae\x6a\x0e\xfa\x39\
+\x13\x28\x25\x8f\x61\x78\x70\xf0\xe7\xcb\x0e\xba\xf9\x97\x4f\x1e\
+\x7d\xf4\xcf\x7e\xfb\xdb\x15\x4b\x0e\x5e\xe8\xf6\xe6\x1a\x63\x4c\
+\x6e\x53\x28\x3b\xb3\x5a\x95\x45\x14\x4d\xa8\x1c\x51\xc5\xc9\x83\
+\xec\x11\x09\xc4\x02\x16\xab\x58\xa2\x52\xf1\x62\x21\xe2\xb7\x16\
+\x25\x36\xfa\x26\xcb\x5d\x65\x23\x70\x57\xae\x5c\x89\x18\x08\x52\
+\xd8\xec\xb5\xe2\x02\x1c\x1a\x85\xa2\x8d\x0f\x25\x12\x88\xbd\x3d\
+\xbd\x7b\xec\xb9\xeb\xa4\x09\x4d\xf7\xdc\xbb\xbc\x31\xe9\xdf\xe7\
+\x47\xf3\xb7\x6c\xe9\xc9\x24\xa3\x8a\x67\xea\x7f\xad\xa5\x60\xaa\
+\x98\xa8\x74\xc6\x10\x23\x24\xfc\x63\xd2\x62\xd0\x35\x70\x20\xdf\
+\x7e\xfb\x6d\x62\x07\x0a\xee\x48\xba\x28\x25\x90\x62\x85\x46\xc4\
+\x5c\xa5\xa7\x9f\x14\x33\xda\x74\x1b\x12\xd9\xa8\x8a\x84\x4d\xc4\
+\x88\xd4\xaa\xb5\x3f\xd9\x7e\xdb\x4a\x43\x45\xa5\x43\xaa\x41\x07\
+\xab\xc8\x09\x6d\x37\x4f\x28\xfb\x63\x7f\xbe\xe4\xe0\x9f\xfc\xed\
+\xa3\xbf\xbe\x1e\x9b\x16\xd2\xd4\x88\x64\x7d\xd0\xeb\x21\x55\xa4\
+\x83\xeb\x1b\xd7\x07\x79\x62\x1e\x66\x82\xe7\x08\x19\xe2\x7e\x1b\
+\x6d\xe3\xd1\x73\xfc\xcc\x9f\x9e\x90\xe6\xb6\x8a\xe4\xed\xcc\xe2\
+\x3e\xc2\x52\xa1\x5b\x6f\x27\x22\xe2\xb3\xd0\xa4\xb0\x89\xc8\xa4\
+\xe4\x01\xb4\xb4\x34\xdb\xb2\x15\x27\x7e\x78\x0b\xb9\x0f\x13\x19\
+\x5b\xcd\x34\xb4\xe3\x0e\x33\xfe\xe1\xef\xcf\xfd\xc1\x0f\x76\xec\
+\xeb\x1f\x00\xad\x7b\x44\x52\xc1\x43\xc6\x17\x00\x1b\x2d\xaa\x94\
+\x72\x11\x45\xb2\xb6\xb2\x43\x3c\x5a\x2a\x70\xa6\x77\xfa\xb3\x59\
+\x52\x4e\x23\x0a\x01\xe2\xdf\x76\xdb\x6d\xa3\x3d\x98\xd1\x6c\x8b\
+\xdb\x30\xa3\x32\x4d\x56\xfc\xdf\xba\xa1\x2e\x7f\x66\x46\x15\x84\
+\xcc\xc2\xde\xed\xf1\xce\xf6\xd4\xd5\xfc\xb6\x68\x13\x42\xa9\xda\
+\x57\x27\x7a\x47\x15\x76\xdb\xd2\x25\x8b\xfb\xfa\xfb\x53\xca\x7f\
+\x38\xeb\xc9\x09\x2d\xde\xb3\x9d\x3d\x20\xf5\x85\xb1\xd1\xa6\x5e\
+\xa3\x43\xb8\x7a\xec\x98\xf6\xe1\xa1\xa1\x28\xaf\x46\xaa\x1a\x3c\
+\xff\xad\x00\x45\x29\xaa\x88\x82\x46\x3f\xdf\xa7\x14\x20\x57\x89\
+\xe2\x0b\xc9\x5d\x54\x53\xa9\xee\xee\xcd\x80\x8e\xf4\x03\x17\xcd\
+\x5b\x03\x19\x84\xe1\x26\xcb\x16\xce\x96\x9e\xde\x24\xf1\xa7\x2a\
+\x50\xd2\x5d\xe5\x23\x91\x5e\xf6\xc8\xc8\x49\x45\x3a\xc5\x78\x24\
+\x4a\x68\x87\x6b\x66\xca\xe4\xf1\x2f\xbd\xb6\xfa\xa7\x4b\x0f\xdb\
+\xd2\xbd\xc5\xa6\x11\x6c\x46\x4c\xf1\x81\x0d\x8a\x92\x0b\xd6\x58\
+\x0f\x47\xf4\x98\x5c\x5e\x45\xf1\xcd\xc6\x67\x22\xd2\xe0\xe8\x66\
+\x4f\x08\x47\x6b\x14\x8f\xfd\x71\xbb\xdd\xe4\x14\xe8\x28\x00\x7a\
+\x66\xb6\x54\xe3\xbb\xc6\xc3\xa1\xdd\x71\xe6\x34\xa9\x82\x74\x38\
+\x01\x87\x4f\x79\x71\xb1\x6a\xda\x37\x1e\x16\x49\xeb\x28\x4c\x1b\
+\x2a\x18\xc5\x81\x03\x95\xa2\x08\xe8\xe9\xe9\xdd\xf7\x47\xf3\x1f\
+\x7f\xe6\xe6\xbb\x7e\x75\xdf\xc1\x07\x1f\x90\x55\x46\x65\xf5\x87\
+\x15\xeb\x97\xa4\x14\x84\xac\x77\xba\x94\xaf\xca\xd1\xa5\xe7\x1d\
+\xf9\xc3\x0e\xc8\x2d\x4e\xf9\x81\xfc\x58\x25\x8e\xf5\x91\x50\x3b\
+\xbd\x61\x1f\x0e\xd7\x25\x3b\x02\xaa\x96\xfe\xcb\xbf\x3e\xb5\xea\
+\x95\xdf\x1d\x7f\xeb\x85\x5b\xb6\xf4\xea\x24\x09\x79\x51\x2d\xd2\
+\x15\x5c\x3f\xe4\x4f\x10\x32\x26\xde\xe0\x18\x8d\x9f\xcb\x38\x9d\
+\xa1\x18\x6b\x19\xbf\x83\xe1\xef\x2e\x3c\xf1\x57\xff\xf4\xc4\xc3\
+\xbf\xfe\xac\xb7\x6f\x18\x35\x3e\xbd\x7d\x83\x23\x4e\x3a\xfa\x62\
+\xd9\x42\x9d\x9e\x74\xaa\xb5\xdb\xac\xaf\xa3\x1b\xb8\xdf\x88\x03\
+\xa8\x9c\x10\xd1\xf9\x2c\x68\x38\x17\x2c\xec\x63\xc3\xf7\x89\x13\
+\xc6\xae\xfd\xfa\xeb\x71\xe3\x3a\x36\x6e\x58\x73\xd5\xa5\x27\x75\
+\x76\xb4\x0f\x0c\x0c\x3a\x31\x97\xdd\x9f\xe6\xdc\x0e\x4b\xfd\x1c\
+\xe5\x0a\x96\x8e\xdf\x07\x5c\xc8\xc7\xe6\x8f\xc1\x91\x42\x9a\x69\
+\x0b\x7c\x0a\x5d\xde\xd9\xd9\x71\xe9\xf9\x27\xc2\x12\xeb\xe9\xe9\
+\x03\x3d\x6f\xd8\xd8\x2d\x75\x16\xbd\x21\x3a\xbb\x27\x3a\xf1\x48\
+\xe7\xcf\xf7\x50\xf5\x0e\x43\xe2\xa3\x10\x7c\xa5\x93\x32\xf9\x63\
+\x80\xfc\x99\x1e\x14\xea\x9b\x38\xb1\xab\xb1\xa9\xb1\xbd\xad\x6d\
+\x5c\xd7\xb8\xc1\x81\x21\x38\x5c\x09\x93\x8f\x88\xe5\xa8\x3a\xe5\
+\x0c\x85\x32\x58\x1f\x67\x65\x1b\xca\x59\x3a\x62\xdf\x7c\xc8\x2b\
+\x86\xd0\x6c\x02\xf7\x79\xfd\xc6\x6e\x30\x17\x22\x12\x78\xe8\xe4\
+\xc9\x93\xf8\xf8\x17\xe3\x76\x5b\x05\x1f\x91\x8f\x94\xf1\x7f\x55\
+\x7c\xf2\x06\x5f\x28\xd9\x13\x9d\x7c\x26\xa3\xe4\xf9\xfd\x39\xf2\
+\x1e\x9a\xd1\x48\xad\x9a\x05\xc1\xb0\x66\x1b\x36\xc3\x5b\x20\x93\
+\x2f\xf1\xd9\x54\x3e\x57\xc9\x17\x13\xba\xca\x27\x25\x22\x87\x9a\
+\x37\xb6\x98\x20\x9b\x85\xaa\xcf\x95\xd2\x57\xe4\x81\x46\x81\xf0\
+\xec\x0d\x95\xcc\x5e\x30\x1c\xf4\xcb\xef\x76\x08\x87\x63\xc8\xe9\
+\xe6\xfa\xf3\x40\x14\xcf\x44\x08\x50\x16\xb1\xa8\xb7\x17\xdf\x1d\
+\xf8\x65\xbd\xa4\x84\x8e\x50\x32\x3a\x1c\x65\x42\x4a\xcc\xe8\xb0\
+\x89\x25\x7f\x64\x47\x20\x4f\xef\x52\x18\xa1\x51\xb8\xb4\x8a\x83\
+\xdb\xf2\xfc\x20\xa2\x1f\x87\x91\x2a\x64\xfb\x8b\x47\x74\x89\x23\
+\x6b\xc2\x4e\x0e\xfb\xaa\xa4\x8c\xa1\x74\x01\x23\xad\xcb\xce\x22\
+\x48\x74\xb1\xa6\x34\x7c\x0d\xdb\x8f\x4d\x70\xb9\xbc\x9f\xa4\x45\
+\xdc\xde\x1f\xea\xe2\xe1\xf3\x9e\x01\xef\xa2\xe3\x84\xac\x51\x74\
+\x84\x10\x6b\xb8\x50\x50\x94\xab\x0f\xb2\xaa\x37\x1d\xc9\x82\x5b\
+\x90\x35\x55\xbf\xdf\xd5\x1b\xa8\x9e\xb3\xe4\x71\x5d\x8a\xfb\x43\
+\x2c\xd8\xf3\x5c\xa2\x4d\x38\x03\x2a\x20\xc2\x0f\x31\xa6\x70\x2c\
+\x5b\x38\x33\x8f\x8d\xbd\xfc\x5e\x64\x95\x3f\xa0\x88\xce\x8b\x8a\
+\xf6\xac\x98\xc0\xcb\x2a\x6c\xcf\x54\x2a\x36\xdc\x59\xc4\xd9\x7b\
+\xd3\x60\xc7\x62\x57\xbd\xf2\x25\x69\xd1\xf9\x41\xaa\xa3\xbd\x6d\
+\xfc\xe4\x89\xa4\xd7\xb5\x14\x37\x7e\x43\x91\xc4\x28\x09\xa7\x74\
+\xb9\xd3\x65\x58\x54\xeb\x70\x24\x90\x16\x87\x66\xf1\xf1\x7e\xc6\
+\x1d\x1e\x16\x86\x5a\xe6\x9a\x89\x7e\x93\xff\x1a\x12\x80\xca\xa8\
+\x1c\x62\x05\xcd\x67\x4c\x4e\xae\x99\x42\xb1\x47\x48\xfa\x90\x1d\
+\x62\x74\x5b\x2b\x55\xc2\x05\x3b\x88\x73\x26\x2f\xbc\xb4\xea\xe2\
+\x8b\x6f\x84\xda\x62\xe7\x20\x1c\xd0\x66\x0a\x87\x0f\x71\x86\xc8\
+\x27\xdc\x74\xfe\xac\x22\x41\xc7\x12\x02\x3e\xae\x47\x8b\x19\xe9\
+\x78\xe2\x65\xe7\x33\x69\x79\x48\x92\x2a\x48\x81\xf8\xfc\xca\xd8\
+\x68\x50\x75\x76\x31\x45\x65\x0b\xcd\x4d\x8d\xab\x5e\x7d\x93\x36\
+\xfb\xa5\xf6\x70\x3e\x17\xc4\xf9\xe4\x93\x4f\x96\xdf\xff\x40\x7f\
+\xff\xa0\x12\x34\x6b\x72\x95\x43\xf2\xb3\xce\x39\x97\xb2\xc7\x94\
+\x1e\x57\xc5\x47\x3e\x29\x3e\xab\x30\xd6\xc4\x4c\x80\x26\x67\x61\
+\x09\x1b\x2a\xf7\x59\xe7\x20\x4f\x2d\x7f\x58\x34\xd6\xea\x1d\x18\
+\x8a\x1b\xc6\x74\x76\x9c\x76\xda\xa9\xb4\x71\x5b\x97\xef\x81\xf8\
+\xbe\x95\x1e\x76\xcb\x81\xf1\xc2\x61\xb7\xba\xf4\x2c\xa5\xff\xab\
+\x87\xdd\x52\x5a\xdc\xbd\x82\x03\x9a\xf1\x46\xa2\xff\xdf\x00\x85\
+\x4d\x60\xdf\x9f\x48\x3e\x7a\x4b\xbe\x87\x60\xf4\xf6\x3f\x17\x5c\
+\x8a\xe5\x6a\xba\xb8\x51\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x08\xdd\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x60\x00\x00\x00\x55\x08\x00\x00\x00\x00\x93\x44\xbe\xfa\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\x0b\x12\
+\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd5\x03\
+\x03\x0f\x28\x2b\x21\x8f\xe2\xd5\x00\x00\x00\x02\x62\x4b\x47\x44\
+\x00\xff\x87\x8f\xcc\xbf\x00\x00\x08\x6e\x49\x44\x41\x54\x68\xde\
+\xb5\x59\x5b\x88\x24\x57\x19\xfe\xbe\xff\x54\x4f\x4f\xcf\x65\x67\
+\x76\x76\xa2\x4b\x82\x6c\x92\x85\x44\x9f\x64\x4d\x34\x3b\xe3\x85\
+\x40\x1e\x5c\x21\x0f\x01\x03\x89\x20\x08\x21\x5e\x30\xd3\x1b\xf0\
+\xb2\xa2\x71\x46\x10\x82\xf8\x20\x28\x44\x1f\x0c\x98\x18\x42\x0c\
+\x2e\xae\x04\x0c\x84\x3c\x24\x2f\x31\x18\x44\xcc\x4c\x54\x96\xc4\
+\xfb\x0d\x13\x33\xbb\xd3\x3b\x97\xde\x9e\xae\x3a\x9f\x0f\xa7\xaa\
+\xba\xab\xbb\xfa\xb2\x93\xf8\x33\x33\x7d\xea\xfc\xf5\xf5\xd4\xf9\
+\xcf\xff\xfd\x97\x53\xa6\x5c\x92\x44\x49\x36\x90\x92\x70\x9d\x24\
+\xc9\x5b\xd2\xcb\x20\xc8\x7b\xef\xbd\x97\xbc\xb2\x81\xf7\x0a\xd7\
+\x52\xaa\x3d\x90\x1e\x90\x89\xa2\x99\x99\x99\x73\xe6\xb2\x81\x99\
+\x0b\xd7\xce\x85\xb9\x83\xe9\x4d\x34\x8a\x3b\xe7\xd7\x37\x36\x36\
+\x36\xd6\xd7\x37\xd6\x37\xd2\xc1\xc6\xc6\x7a\xb8\x5e\x5f\x0f\x73\
+\x07\xd1\xbf\x7c\x7e\x9b\x32\x24\xf8\xc9\xa9\x2f\xaf\xd4\xeb\xf5\
+\xfa\xe9\x7a\xbd\x5e\x5f\x59\xa9\xd7\x4f\xd7\xeb\x2b\xa7\xc3\xcc\
+\xe9\xd3\xa7\x57\xea\x2b\x2b\xf5\x83\xe8\xcf\x9c\x7a\x12\x89\x41\
+\xd8\xba\xf3\xd9\x73\x4f\xbd\xfd\x72\xee\xd9\x3b\xb7\xc2\x1e\x58\
+\xbc\xbf\x37\x9e\x34\x9b\xcd\x66\xb3\x39\xe6\xcd\x7b\xfb\xb1\x89\
+\x46\x10\xcc\xf7\x29\xec\x10\xd3\x09\xa6\xbf\xd9\xd6\x51\x89\xf7\
+\x5e\x64\xba\xb5\x05\x7d\x19\x1e\x84\x49\x02\x47\x08\x40\xaa\xb5\
+\x7b\xa9\xd1\xb8\xd4\x68\x34\x1a\x8d\x4b\xdb\xcd\x98\xe4\x48\x1c\
+\x21\x19\x49\x8d\x12\x5a\xbc\xb3\xb5\x7d\x39\xf6\x22\x49\xf9\xb8\
+\xb5\x7b\xa9\xd1\xc2\x68\xa0\x48\x03\x80\xe2\xa3\xa0\xf3\x37\x0c\
+\x4d\x3b\x8d\xcb\x32\x23\x99\xde\x6c\x86\xf6\x76\x23\x71\xa5\x6b\
+\xe8\xe0\x01\xc0\x7a\xbf\xbe\x5b\x2c\xdc\xd9\xdc\xba\x0c\xa3\x84\
+\x5c\x24\x99\xc5\x8d\x3d\x03\x2c\xdc\x35\xd0\xb8\x96\xde\x3f\x64\
+\x95\xbb\xdb\x22\xa5\xf0\x40\xc8\x56\x2c\x11\x3b\xbb\x84\x86\xa1\
+\x01\x18\x84\x61\x9b\x05\x22\xee\xfd\xfa\xf4\x7f\x08\x6e\x77\xcf\
+\xa0\xa1\x0b\x90\x09\x12\x01\x08\x00\x18\x3e\x49\x20\x9b\x33\x88\
+\x22\x52\x03\xa9\xeb\x81\x29\xd8\xee\xbe\x41\x18\x84\xa7\x04\x23\
+\x49\x65\xf6\x16\x33\x8b\x1a\x49\x9a\x91\xf0\x1e\x0c\x98\x00\x25\
+\x08\x12\xa4\x28\x62\x17\xe9\xdd\x65\x78\x91\x1c\xcd\x83\xc4\x53\
+\xa2\xf2\x30\x0c\x28\x35\x97\x28\xdb\xbf\xec\xde\x22\x0f\x18\x4b\
+\xa4\xe7\xe4\xcc\xdc\xfc\xe1\xf9\x99\x09\x8a\xcc\xfd\x89\xe0\x65\
+\xc9\x8f\xe4\xc1\xd0\x3d\x6e\x13\x52\x6d\x61\x6e\x66\x72\x62\x62\
+\x72\xe6\xf0\x42\xd5\x83\x12\x25\x52\x12\xdb\x89\x0d\xdb\xe4\x94\
+\x07\xdd\xdc\x42\x11\xe0\x63\x52\xb5\xf9\x28\xdd\x5c\x54\x0e\xcf\
+\x2a\x20\xc2\x83\xf9\x36\x07\xe1\xd1\xe1\xc1\x20\x5f\x86\xd8\x4e\
+\x20\x4e\xc9\xa7\x76\xa7\xd7\xcc\x8c\xef\x70\x4e\xf4\x03\xe1\xc8\
+\x79\x50\x34\x12\x3a\x51\x4c\xe4\xbe\xa0\x89\x8a\xd2\xc7\x53\x92\
+\xc4\xed\x5a\xa4\x9c\xd6\x44\x12\xbc\xa5\x04\x0f\xe4\x3c\x50\xb6\
+\x65\x99\x27\x76\x76\xb1\x4d\xa2\xc6\xe0\xa9\x09\x27\x0f\x1d\xb9\
+\x6a\x7e\x76\x36\x16\x0b\x74\x65\x29\x5e\x39\x0f\xc0\x01\x2b\x20\
+\xdb\x6d\x2a\xaa\x0a\x24\x63\x5b\xac\xfd\xe3\xc5\xc7\x7f\xf4\xd4\
+\x2b\x5a\x9c\x4a\xc9\x31\xc0\x31\xba\xc2\x9e\x49\xc3\xa2\x09\x5b\
+\x09\xfc\xa4\x13\x21\x2d\xb4\xbe\xf7\xd1\x0f\xdc\x76\xcf\x67\xee\
+\x3a\xf9\xa1\x33\x2f\xcf\x77\xd8\x30\x2c\x16\xa5\x3c\xe8\x0d\xb5\
+\x61\x60\xa4\xa9\x32\x65\x6e\x4a\x24\x10\x9d\xfb\xc8\x17\x7e\xb9\
+\x0b\x73\xa6\xbf\x3d\x71\xe7\xb7\xab\x10\x04\x08\x8e\x34\x94\xe1\
+\x53\x66\xa7\xc6\x1b\x20\xaa\x2d\x5c\xb5\x18\x91\xf4\xb5\xd7\xee\
+\x7e\x2d\xaa\x44\x0e\x89\x07\x9d\x1e\xfa\xca\x74\x88\xb1\x72\xc3\
+\x48\x94\xf2\x60\xb0\x91\xe0\xbd\x45\x92\xa4\xe8\xdf\x8c\xe2\x76\
+\x9c\x78\x18\x94\x28\xfa\xd9\xcf\xe7\x12\x11\x62\x65\x88\x81\x32\
+\x1e\x0c\x0f\xd8\x22\x49\x54\x5e\x55\x5c\x5d\xfa\xd4\x27\x4f\xd0\
+\x13\x40\x82\xef\xef\x3a\x01\xaa\x54\x34\x84\xc7\x59\x3e\xc8\x8d\
+\x64\x34\x18\x0d\x85\xa0\x48\x12\xf4\x2f\xe1\xe6\x97\x9f\x7b\xe4\
+\xb1\x17\x5e\x7c\x9f\x08\x08\x7f\x3c\x3f\x29\x51\x35\xd7\x6d\xfc\
+\x02\x1e\x79\x3e\x18\x43\x2a\x9b\xbf\xc2\x03\xef\x6e\x6c\x6e\xee\
+\xdd\xf4\xcc\x8d\x61\xe9\xe7\x27\x44\x5f\x99\xf6\xc3\x73\x9a\x71\
+\x2c\xd1\xd4\x6f\xfe\x79\xc3\xad\x17\x2a\x51\xe4\x2e\x1c\xb9\x17\
+\x04\x88\x2d\x93\x70\xc8\x69\x38\x32\xe4\x03\xa5\xb6\x40\x2f\x4d\
+\x72\x73\x46\x2f\xe1\xde\x79\x6f\x04\xaa\xaf\xdf\x08\x0f\x08\x15\
+\xd1\xcf\x4e\xcb\x82\x65\xfa\xf1\x21\x11\x86\x7c\x30\xaa\xc2\x81\
+\xbb\xf4\xb9\xe7\xef\xda\x89\x24\xb9\x66\x73\x3f\x04\xc8\x6b\x13\
+\x3f\x33\xe7\x87\x60\xa9\x1e\x1e\x80\x25\x8c\xcb\x9e\x66\xfa\x83\
+\xf3\x31\x29\x8b\x37\xab\xbf\x85\x01\x98\x7e\xcf\xde\xec\x61\x05\
+\x6c\x39\x3e\xe7\x41\x27\xb2\x15\xc7\x9d\x6b\x81\x7e\xc7\x13\x30\
+\x5e\xd0\xde\x59\x08\x91\x3e\xfe\xae\x89\xc5\x3c\x55\x97\xe2\x91\
+\x15\x5e\xe3\xac\x80\x74\x04\x60\x8d\xed\xc5\x27\x5e\x35\xb9\xf8\
+\x58\x3d\x5a\x14\xfa\x8b\xc1\xfe\x15\x68\x18\x93\x7b\xc4\xed\x5d\
+\x9c\xfb\xc3\x77\xe8\x5d\x72\xf5\x8f\x8f\x4f\x69\x44\x75\x0a\x31\
+\xcf\x07\x19\xab\x42\x8c\x83\x15\xc9\x93\x2f\xa2\xbd\x19\xb5\xef\
+\xdf\x86\x4b\x8e\x3f\x7e\x33\xb3\x95\x5b\x57\xa5\x59\xc0\xe7\xf9\
+\x60\x74\xfd\x9e\xad\xfb\x42\x3c\xb7\xfa\x7b\xc7\xe4\xe4\xb9\x5b\
+\xda\x63\x30\x08\x0a\x3c\xe0\x98\x06\xb2\xc6\xce\xc2\x63\x67\x9d\
+\xfc\x1d\x4f\x1e\xdf\xb7\x71\xcc\xca\xc0\x03\x14\x36\x08\xbd\xad\
+\x47\x16\x7a\x5d\x6b\x6b\xfa\xaf\x0f\x9a\xfc\xe7\x1f\x3e\x12\x5b\
+\x9f\xbe\x0c\x8f\xde\x7c\x60\xec\xa2\x65\x5f\x70\x6f\x24\xb5\xef\
+\xee\x9a\xff\xe6\xb7\xaa\xde\x86\xd4\xfb\x39\x3e\xe7\x81\xc6\xf2\
+\x22\xdb\xdb\x9d\xfe\xd3\x2f\x18\x9f\xf9\x52\x5a\x73\x8d\x14\x48\
+\x69\xc2\xe9\x2b\x5b\xca\x76\x5d\x3b\xbe\xba\xde\xd2\xf2\x57\xdb\
+\x23\xda\xb3\x1c\x0f\x30\xf0\x40\xc5\xda\x9f\xe8\x6b\x06\x00\x58\
+\xdc\x32\xdb\x02\xeb\xf3\xdd\xc5\x69\x99\x74\xf0\x54\xe0\x01\x8a\
+\x4d\xc4\x80\x15\xb4\x12\x26\xef\xc4\xc4\xfb\xdb\xc6\xe1\x11\x3a\
+\xc7\x0b\xc8\xfb\x03\xa8\xa7\x7c\x09\x13\x5d\x33\x68\xcb\xf6\x6e\
+\x79\x47\xeb\xc5\x8a\x17\x4a\xf4\xfd\x78\xe4\xfd\x41\xe6\xae\xa1\
+\x7d\x30\x4b\x29\x49\x2a\xb4\x96\xc1\xe6\x09\xd9\x5e\xfc\xf4\x0d\
+\x93\xed\x32\x3d\x4b\xf0\x81\x60\x63\x66\x34\x92\x06\xb9\xad\xcf\
+\xbe\x74\x47\xd3\xf1\x4a\x24\xad\xae\xa9\x4e\x64\x05\x40\x18\x40\
+\x58\x57\xd0\x65\x24\x02\x47\xe7\x2b\x87\x7c\x70\x8e\x82\x1e\xa5\
+\xf8\x6c\x52\x69\x0b\x97\x56\xac\x04\xd3\xa2\x4d\x59\x67\x07\x51\
+\x11\xbd\x9b\x78\xf8\x9e\xfb\x9e\x9b\x91\xd0\xab\x47\x29\x1e\x2a\
+\x36\x20\xc1\x39\xf2\xe0\xda\x55\xc3\x93\x52\xd5\x11\xf7\xdf\xf7\
+\xc8\x0f\x6e\x7b\x68\xc6\x17\x78\xa0\xe2\xa0\x83\x4f\x1b\x90\xd0\
+\x27\xe4\x19\x2c\x53\x04\xfe\xe5\x4f\x68\xaa\x56\x67\x7f\xf8\x4c\
+\xc5\x45\xac\xff\xba\x26\xf6\xea\x4b\xf0\xa1\xb3\x31\x21\xf5\xa7\
+\x3c\x2f\x81\xa5\x67\x17\x3a\x72\xf1\xa7\x6c\x27\xb1\xc3\xc3\xce\
+\x97\x26\xbf\x5e\xbc\xd8\xe1\xc1\x18\x91\x37\x99\xe5\x7f\x05\x40\
+\xfc\x8b\x6c\xac\xf0\xde\xcd\x83\xee\xb3\x8f\x9e\x46\x22\xab\xcd\
+\xac\x75\xc3\x71\x3a\xc0\x74\x13\xd3\x28\x5f\xd0\xf7\xe1\x79\x85\
+\x3c\xa0\xaf\x7e\x51\x89\x59\x7b\x61\xa5\xed\xae\x98\x07\xe3\x04\
+\x5f\xdb\xbb\xe7\xc1\x59\xef\xdf\xfb\xf4\x35\xed\xf1\x4c\xd4\xe1\
+\x41\x5f\xf4\x45\x4f\xf5\x11\x4c\x51\x69\x7d\xed\x77\x4f\x3f\xff\
+\xc2\xc9\xa6\xa9\x44\x5f\x76\x26\x55\x9e\x0f\xfa\x12\x54\xf0\x0d\
+\xb7\xff\xc6\xbf\xce\xf3\xc3\xb7\x4e\xee\xb9\x42\xbd\x61\xc3\x8e\
+\xfa\x52\x1e\x8c\x61\x22\xf0\xcd\xbf\x5f\x6c\xc6\x5b\x7f\x7e\xe5\
+\x8d\x08\x63\xd6\x51\x50\x0f\x0f\x38\x70\x29\x04\xff\xf3\x26\x9d\
+\x59\x34\xe1\x36\x5f\x1f\x7e\x3c\xd9\xed\x45\xc8\xfb\xe4\xfc\x18\
+\xab\xa7\x11\xcf\x48\x1a\x5d\x6c\x44\x14\x20\x21\xda\x6a\xb8\x3e\
+\x7d\x29\x3e\xef\x93\x35\x72\x05\xd6\xba\xe0\x20\x42\xa4\x60\x9b\
+\x6d\xd3\x78\x2b\xc8\x78\x30\x92\xc9\xdc\x8e\x99\x66\x6e\xca\xe2\
+\x5d\x62\x7c\x26\x17\xaa\x6b\x4b\x9f\xc2\xc2\xea\x3a\x4e\x77\x39\
+\x14\xc8\x0c\xfe\xd0\x64\x41\xdf\xa9\x83\x8a\xf8\x4e\x5d\x84\x51\
+\xc5\xa9\xe2\xfc\xa0\x16\x04\xe3\xf1\x8a\xd9\x4e\x3e\x18\xe5\x76\
+\x85\x8d\x14\xc0\x71\xdd\xb4\x53\x17\xa5\x2b\x85\xa5\x47\x8d\x9d\
+\xca\x32\x90\x38\x52\xf7\x81\xe9\x04\x8b\xfa\xdc\x52\xbd\xf8\x3e\
+\x1e\x0c\x94\xe9\x8e\x1f\x00\x9c\x1d\xcf\x44\x63\xe7\x03\x28\x39\
+\x34\xe9\x99\x9d\x08\x24\xd3\x53\x1e\x57\x96\x0f\x3a\xe1\x0e\xa5\
+\x5c\x30\xb8\xa3\xf0\x69\x58\x4b\xdc\xd1\x92\x5b\xca\xf0\x42\x5f\
+\x3e\xb0\xbe\x51\xfa\xe9\x67\xae\x61\x2c\x00\x3e\x9e\x38\x36\x89\
+\x3e\xfd\x40\xfc\xb8\xf9\x80\xc9\xdc\xf5\x0b\xe6\xbd\xaf\x2c\x5e\
+\x57\x4b\xc6\x6c\x89\x3a\xc5\x12\x86\x56\xcb\x41\x7c\xf5\xea\xeb\
+\x8e\x5d\x7b\xec\xfa\xa3\x96\x8c\x73\x7b\xfe\xad\xe1\x1f\x64\x27\
+\x26\x3e\x0d\xdd\x69\x2d\xec\x25\xc9\xfb\x74\xa3\xdb\xd1\x54\x6d\
+\x0a\x6d\x0d\xd0\xf7\xe1\xe5\xb3\xf3\x22\x4d\xba\x5a\x14\x45\x95\
+\xf4\xa7\x52\x89\x82\x54\x2a\x51\x14\x55\x2a\x61\x3e\x8a\x26\x9c\
+\x39\x8b\x26\x06\xea\x7b\xf1\x35\x37\x99\xf2\x60\xf6\xd1\xdb\x4f\
+\x7d\xec\xed\x97\x53\xb7\x3f\x3a\x2b\x18\x23\x7e\xe2\xec\xd7\xbf\
+\xb1\xb6\xb6\xb6\xba\xba\xb6\xba\xb6\x16\x06\x6b\x6b\xab\xe1\x7a\
+\x75\x35\xcc\x1d\x40\xbf\xf6\xc0\xd9\xbb\x19\x99\xa8\xb9\x13\x27\
+\x97\x96\x96\x96\x96\x97\x97\x96\x97\xd2\xc1\xd2\xd2\x72\xb8\x5e\
+\x5e\x0e\x73\x07\xd1\x2f\x9d\x98\x0f\x6f\x63\x95\x24\x49\x92\x24\
+\x71\x9c\xc4\xd9\x20\x49\xe2\x70\x1d\xc7\x61\xee\x60\x7a\x4f\x19\
+\x08\x3a\xe7\x9c\x73\xe1\x1d\x70\x18\x84\x77\xc3\xe1\x05\xb1\x73\
+\x07\xd6\x03\xb4\x42\x42\xcd\x5f\xd4\xa4\xbd\x62\xfe\xba\xed\xc0\
+\xfa\xc2\x81\xd4\xff\x45\xfe\x07\x6b\x56\xad\xc0\xb4\x6e\x5e\x96\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x20\x68\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x60\x00\x00\x00\x54\x08\x02\x00\x00\x00\xf2\x11\xa5\xd4\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\x0b\x12\
+\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd5\x03\
+\x03\x0f\x29\x0a\x74\xfd\xc3\xca\x00\x00\x00\x06\x62\x4b\x47\x44\
+\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\x00\x1f\xf5\x49\x44\
+\x41\x54\x78\xda\xed\x5c\x09\xb8\x14\xd5\x95\xae\x5b\xbd\xbc\x7e\
+\xfb\xc6\x5b\x58\x1e\xbb\x6c\x42\x82\x80\x28\x51\x31\xe2\x46\x40\
+\x05\x07\x51\xa2\x66\xe2\x12\x10\x9d\x44\xcc\x0c\x44\x13\x17\x70\
+\x41\x8d\x4b\x12\xe7\xcb\xa2\x49\x8c\xc6\x49\x26\x8e\x1a\xa3\x64\
+\x12\x26\x01\x13\xe5\x53\x42\x08\x71\x62\x36\x0d\x10\x40\xe1\xf1\
+\xf6\xfd\xf5\xeb\xb7\x74\xf7\x9d\xff\xde\x73\xef\xad\x5b\x55\xfd\
+\x88\xe6\xd3\x2f\xc9\x37\x96\xd8\xaf\xba\xba\xea\x56\xd5\xa9\xb3\
+\xfc\xe7\x3f\xe7\x16\xcb\x66\xb3\x8e\xe3\xa4\xd3\x69\xd7\x75\x39\
+\xe7\x58\x67\x8c\x39\x7a\xc1\x16\xfb\xab\xd9\x48\x2b\xe6\x27\xb3\
+\x5b\x78\x7f\x7b\xcb\x3f\xd6\xf8\x58\x8f\x44\x22\x2c\x93\xc9\x40\
+\x34\xce\xfb\x4b\xae\x45\xc8\x0b\x1a\x34\x34\x34\xb4\x7e\xfd\x86\
+\x68\x34\xce\x79\x16\xb2\x65\xf8\xcf\x21\x19\x33\xee\x70\xf9\xd5\
+\x7f\x98\xfc\x55\x6e\x65\x66\x8b\xfe\xca\xad\x4f\x79\x0a\x35\xa0\
+\xde\xd1\xdb\xed\xef\x76\x7c\x07\x1a\x93\xce\x64\x2a\x2b\xcb\x6f\
+\xbd\xe5\x96\x28\x34\xaa\xa7\xa7\xbb\xbb\x27\x75\xed\x75\xd7\xf5\
+\xf7\xa7\x84\x82\x31\x07\x82\x12\xc7\x30\x97\xe1\x6f\x4e\x15\x65\
+\xde\x09\xb8\xdc\x84\xbd\xf4\xbe\xa4\xa4\xcc\x68\xb3\xf8\xce\xcd\
+\xb5\x8b\x9d\xb4\x92\x8b\x0b\xf2\x59\x04\xdd\x93\x93\x6b\x7c\x39\
+\x70\x50\x40\xef\xc1\xf8\x38\x34\x12\x71\x93\xc9\xbe\xa7\x9f\x7a\
+\x1c\xc7\x46\xc9\xea\x4a\x4b\x4b\xcb\xcb\xcb\xfa\xfb\xf3\xe8\xfe\
+\xe2\xb1\x68\x24\x16\xe7\x99\x6c\x26\x93\x66\x96\x01\xc2\x5d\xb9\
+\xf2\x04\xfa\xa4\xea\x04\xd0\x43\x1c\x16\x8b\xc7\xd3\x69\xa8\x23\
+\xa4\x0f\x8f\x16\xf1\x84\xc9\xcc\x75\xa8\x1b\x90\xba\x8b\x6b\x95\
+\xb7\x9a\xeb\x06\x82\xe3\xd3\x0d\xb3\x5c\x1a\xf4\x6e\x8f\x4f\x02\
+\x8a\xc7\xf3\x4a\x8a\x8b\xb1\x2d\x4a\xa3\x43\x12\x99\x74\x06\xae\
+\x3a\x1a\x89\x42\x22\x47\x8e\xd4\x37\xb7\x34\x15\x17\x95\x14\x14\
+\x14\x64\x49\xba\xea\x04\x2c\x74\x02\xa5\xe4\x99\xf4\x50\x5b\x7b\
+\x5b\x45\x45\x65\x55\x55\x75\x7e\x41\x7e\x7f\x7f\xbf\xcb\x5c\xf5\
+\xb4\xe8\x20\x47\x3e\x4e\xf3\x84\xe5\x0d\xf0\x61\x9e\x70\xe0\x06\
+\x86\xd3\xa0\xf7\x62\x7c\x71\x3f\x9c\x43\x1a\x58\x84\x80\x8c\xeb\
+\xc6\x80\xb8\x25\x7c\xfd\xe2\x17\xee\x2e\x2b\x2d\x6a\x6b\x6b\x2d\
+\x2e\x2e\x2e\x2c\x2c\x82\x93\x0a\x07\x02\x1a\x8d\x73\xf3\xc9\x20\
+\xdc\xc6\xc6\x86\xda\xda\x91\x10\xee\xaa\x8f\x5e\x35\x6d\xda\x0c\
+\x61\xb0\x42\xfb\xbc\x4b\xd4\x7a\xcd\xf4\x17\x16\x08\x3a\xcc\x1a\
+\xdc\x7c\xd3\x6a\x40\xba\xc0\x02\x3b\xbe\x07\xe3\x4b\x69\x30\x35\
+\x58\x94\xcc\x95\x4b\xb9\x42\x1c\xbf\xf8\xc5\xcb\xe5\x65\x85\x0f\
+\x3c\x70\xff\x5f\xed\xf9\xb7\x6e\xfd\xd1\x4f\xb7\x6d\x9f\x33\x67\
+\x5e\x2a\x95\x74\x85\x45\x7a\x97\xae\x1e\x37\x7d\xe7\xc6\x6f\xf8\
+\xfd\x9b\x72\x94\xcc\x3c\x72\x63\x3d\xe1\xa7\xe4\x79\xe3\xf7\x60\
+\x7c\x31\x02\xe7\x51\x5b\xa4\x08\xfb\x70\xd8\x33\x67\xce\x84\xd6\
+\x3c\xf6\xd8\x63\xbb\x77\xef\x86\x5e\xd0\x43\x70\xe5\x22\xff\x32\
+\xfd\xa9\x16\x1a\x00\x9b\x8a\x8a\x8a\x36\x6c\xd8\x50\x53\x53\x5b\
+\x58\x58\x08\xf7\x65\x7e\x25\x27\xaa\x6e\x48\x1f\x60\x3d\x4c\xe6\
+\xf8\x6c\x20\xb0\x31\xd7\x8e\xdc\xb1\x43\xd3\xbb\x3e\x3e\x5d\x39\
+\x79\x96\xa8\xde\xc4\x49\xa9\x24\x26\x82\x7c\xb2\x8f\x3f\xfe\xf8\
+\x39\xe7\x9c\x53\x52\x52\x92\x48\x24\xf2\xe5\x42\x2b\x79\x79\x79\
+\xf4\x89\x25\x1e\x8f\x47\xa3\xc2\x8b\x0d\x0e\x0e\xc2\x1e\x37\x6f\
+\xde\xfc\xca\x2b\x3b\xc7\x8c\x19\x25\x61\x67\xc4\x92\x8f\xe7\x35\
+\x48\xf1\x85\x77\x70\xe9\xa1\x73\xfb\x57\x13\x91\xac\x8d\xcc\xe8\
+\x03\xb3\x7d\x10\xf3\x54\xe0\x6d\x8c\x1f\x10\xe6\x5f\x18\xdf\x7e\
+\xf6\x51\xbd\x26\x47\xd5\x36\x0e\xff\x34\x72\xe4\xc8\xaa\xaa\xaa\
+\x58\x2c\x96\xaf\x17\x12\x50\xc2\xbf\x18\x01\xc1\x9d\xcf\x9b\x37\
+\xaf\xb3\xb3\x63\x6c\xdd\x18\x69\xc6\x5c\x9c\x55\xc6\x15\x11\x5a\
+\x18\xb7\x40\xac\x44\x11\x59\x2e\x51\x04\x9e\x93\x2b\x1d\x99\x00\
+\xf4\xd8\xee\x2a\xc7\xe1\x2a\xbc\xa2\xfc\x89\x89\x14\xf2\x78\x66\
+\xbe\xe5\x18\x9f\xf4\x89\xa9\x98\xcf\x6d\x5d\xd3\xa0\x88\x1b\x8b\
+\xcc\x39\xbe\x43\x17\x2f\x85\x2b\x7c\x90\x74\xd2\x9e\xdc\x70\xad\
+\x84\x1e\x21\x26\xdc\x3f\xa7\xef\xd9\x2c\xd7\x8b\xb1\x29\x2c\x50\
+\x22\x1c\x42\x70\x1c\x87\x40\xa0\xc6\xb8\x7c\x26\x26\xd4\x52\x0c\
+\x14\x8d\xc6\xa0\x79\xb1\x58\x1c\x01\x01\x98\x40\x9a\x39\xcf\x66\
+\xb2\xb1\x78\x4c\x98\x6e\x24\x02\xe1\x61\x9c\x81\x81\x7e\xa8\x21\
+\x2e\xd2\x8d\x32\xcb\x9b\x7a\xd6\x63\xc3\x3f\xbf\x55\x31\xc6\xbc\
+\x9d\x82\x26\x16\xd8\xc9\x78\x74\xdf\xf8\x5a\x14\x22\xfa\x73\xd2\
+\x20\x85\x1b\x54\xd8\x53\x22\x0b\x5f\x81\x13\xd8\x42\xe3\x90\x43\
+\xa2\xaf\x4a\x8c\x5a\x15\xf1\xa3\xb8\xfd\x4c\x06\x3b\xc1\x31\xc5\
+\xa3\xb1\x8e\xce\x8e\x83\x07\x0e\x1f\x3a\x74\xa0\xa1\xe1\x68\x47\
+\x57\x27\x76\x84\xd2\xa5\xfa\x52\xc0\x07\x03\xfd\x29\x04\xc1\x9a\
+\xaa\x9a\xd1\x63\xea\x26\x4e\x9a\x52\x5e\x51\x81\x01\x93\xc9\x5e\
+\xc8\x8b\x01\x99\x68\xad\xe0\xf4\xbc\xb5\x50\x08\x2b\x13\xf2\x73\
+\xb3\x58\xc9\xe2\xaf\xd0\x45\x28\xa6\xe3\xb8\xb4\x8f\xb6\x48\x5c\
+\xa0\xd4\x54\x6c\xc1\x15\x79\x9e\x0b\xda\x6c\xc6\xd4\xd0\x9c\x51\
+\x30\x8b\x6a\x3b\x95\xa6\xcb\xd4\x4d\xe2\x96\xb8\x7f\x31\x82\xa3\
+\x05\x0a\x25\x90\x53\x3a\x0d\xe3\xa2\x5c\x57\x1f\x22\xc5\xa1\x55\
+\x32\x2d\x74\x30\x52\x51\x51\x01\xf4\xf8\xda\x6b\xaf\xbe\xf8\xe2\
+\x0b\xcd\x6d\x2d\xed\x1d\x6d\xc5\x65\xe5\x23\xaa\x6b\x26\x4c\x9d\
+\x82\x71\xa6\x94\x95\x97\x57\x8e\x80\x42\x75\x77\x75\xb5\x34\x35\
+\x1e\x68\x3c\xba\x63\xcf\x2e\x9e\x4e\x8f\xae\x1d\x39\x73\xfa\xcc\
+\x13\xe7\x2f\xa8\xae\x1d\x99\xec\xed\x49\xa5\xfa\xa0\x7d\x8e\xca\
+\x09\x5c\x65\x2a\x52\x36\x8e\x14\x89\x30\x37\xd7\x51\x32\x11\x66\
+\xab\xa0\x22\xb3\xb5\x84\xbb\x24\x04\xf2\x36\x9c\x29\x68\xe5\x7a\
+\x6a\xaa\xf5\x53\x23\xa4\xa8\xf2\xd0\x8e\xd6\x2a\x6d\x62\x61\x89\
+\x18\x5b\x23\xd1\xe0\xc1\x42\x77\x84\x38\x18\xc3\x3a\x8c\x11\x1b\
+\x61\x3b\x84\x9b\x68\x04\x78\xb1\x8e\x8e\xf6\xaf\x7e\xe5\x4b\xcf\
+\x3e\xfb\x14\x74\x07\xa2\x58\x74\xe6\xb9\x93\x26\x4c\x82\x58\x71\
+\xc3\x47\xde\x78\x03\xb8\xf4\x28\xe7\x2d\x6d\x2d\xa5\x95\x55\x13\
+\xa6\x4e\x9d\x3e\x7b\xce\x29\x95\xe7\xf4\x25\x93\xcd\x4d\x8d\xcd\
+\x8d\x0d\xaf\xec\xd9\xbd\x65\xeb\x0f\xa7\x4f\x9e\x72\xde\xf9\x17\
+\x1e\x37\x65\x5a\x67\x67\x67\x26\x3d\x18\x11\x62\x0a\x45\x31\xeb\
+\xe6\x2c\x83\x0c\x1a\x63\xf8\x10\x7f\xcc\x0b\x98\x98\xc6\x41\x5c\
+\x7a\x02\x21\x2f\x2e\xdd\x9a\x25\x14\x12\x07\x16\xb3\x62\x44\x23\
+\x45\xc9\x69\x05\x5b\x00\x11\x8c\xde\x61\xa5\xb4\xa4\xb4\x3f\xd5\
+\x0f\xd1\x7c\xfb\xdb\xdf\x00\x2a\x5d\xb1\x62\xd5\xc2\x85\x67\x8c\
+\x1a\x3d\x06\xa6\x94\xc8\x4b\x88\x87\x1d\x75\xe9\x0a\x80\xb9\xeb\
+\x8f\x1c\x3e\xf0\xe7\x7d\x87\xde\x3a\xf4\xc8\x0f\x9f\xaf\x1c\x5d\
+\x37\x67\xc1\xa9\x93\xa7\x4e\x2b\x28\x2c\x9e\x38\x65\x5a\x57\x67\
+\xc7\x6b\x7b\x76\x6f\xda\xbc\x71\xf6\x8c\x99\x9f\x58\x7d\x5d\x79\
+\xc5\x88\x8e\xf6\x76\x89\x38\x88\x9c\xb1\xb0\x8e\x46\xd3\xe4\x9c\
+\xfd\xd9\xa9\x95\x95\x9a\xec\xd4\x24\x08\xdc\x8f\x83\xb8\xf7\xcf\
+\xc6\x41\x64\x5f\x42\xf7\x70\x9b\x59\xbd\x18\xd1\xa4\xf5\x42\xbe\
+\x99\xf4\xcb\x50\x25\x52\x77\x62\x10\x13\xf6\x85\x76\x94\x97\x95\
+\xbf\xf2\xca\x8e\x1b\x3f\xb3\x0e\xc8\xe8\xf6\xdb\xef\x3d\xe5\xd4\
+\xd3\x85\xbc\x06\xfa\x87\x86\x06\xf1\x5f\x5f\x5f\x52\xe7\x05\x52\
+\xc4\x91\xc8\xd8\xf1\x13\xa6\x4c\x9d\x06\x87\xd5\xd2\xdc\xb8\x63\
+\xc7\xcf\x5e\xdc\xf2\xfd\x97\x12\xf9\x1f\x59\xb1\xaa\xbc\xbc\x02\
+\x17\x7f\xca\xa2\xb3\xe7\x7e\xe8\xb4\xed\xff\xfd\xdc\xf5\x37\x5c\
+\xbb\xf2\xc2\x95\xe7\x2f\x5b\xd1\xdd\xdd\x8d\x13\x09\x24\x41\x89\
+\x8e\x36\x37\xd7\xe4\xf3\xc2\xc2\x28\xdb\x08\x26\xfb\xcc\x00\x67\
+\xe5\x54\xb4\xf7\xd5\x08\x52\x8b\xc2\x09\xe0\x20\x66\x45\x31\x65\
+\x50\x24\x1d\x23\x1a\xa3\x38\x66\x1f\x68\x0d\x09\x08\x7b\x42\x40\
+\xd0\x85\xca\xca\xca\xea\xea\x9a\x27\xfe\xe3\x5b\x55\x5b\x7f\xb8\
+\xee\x86\x0d\x4b\x96\x5c\x00\xaf\x98\xec\xed\x6d\x6d\x6d\x41\xe0\
+\x76\x29\xf1\x45\xa8\x62\xda\x73\xca\xcf\xa1\x41\x44\xad\x14\xae\
+\x2f\xbf\xa0\x60\xc5\xca\x4b\x2f\x58\x76\xd1\xb3\xcf\x7c\xef\xf1\
+\x07\xef\x9e\x71\xd2\x29\x67\x2e\x5d\x06\x95\xc1\xe9\x96\x5e\xf4\
+\xd1\x96\xc6\x86\xef\x7f\xf7\xf1\x5d\xbf\xdc\x79\xcb\xad\x77\xba\
+\x91\xbc\xbe\x64\x2f\xec\xda\x67\x2f\x8e\x6d\x5d\xcc\x78\x66\x27\
+\x14\xc6\x4c\xaa\xc1\x1c\xe6\xf8\xfd\x8f\x25\x0d\xc7\xb8\x34\xa5\
+\x66\x7a\x55\x05\xf5\xb4\xb5\x0c\xe9\x65\x50\x2f\x03\x72\x81\x50\
+\x52\xa9\x14\x3e\x7b\x7b\xc5\xe5\x1e\x3c\x78\xf0\x9a\x6b\xae\x19\
+\x3f\x6e\xe2\x7f\x7e\xef\xb9\x25\x4b\xce\x47\x84\xea\xee\xea\x16\
+\xcf\x01\xbe\x1a\x11\x1b\x76\x41\x0e\x8f\x00\x8c\xe1\x28\x18\xc2\
+\x14\x96\x28\xce\xda\xd9\xde\x9e\xec\x4b\x5e\x7a\xf9\x95\x0f\x7f\
+\xf9\x9b\xbc\xbd\xe5\x9b\x5f\xb8\x57\xe8\x58\x2c\x0e\x97\x94\x28\
+\x28\x58\xb3\xfe\x73\xac\xa2\x72\xed\xda\x2b\x1b\x8f\xd6\x97\x57\
+\x54\x22\x36\x48\xc4\x64\x82\x34\xe3\x0a\xec\xf8\xc6\xb7\xa5\xc3\
+\xb8\xe7\x7c\x98\x45\x0c\x71\x29\x02\xce\xfc\x96\x29\x75\x31\xb8\
+\x40\x38\x64\x5f\x01\xe9\x18\xa1\x90\x5c\xe8\x93\x56\x20\x23\xdc\
+\x5f\x5f\x5f\xdf\x93\x4f\x3e\xb9\x60\xc1\xc9\x67\x9e\x75\x36\xbe\
+\xb6\xb5\xb5\x09\xb9\x44\x22\xec\x9d\x2c\x52\x94\x2e\x52\xe5\xc2\
+\xa2\xa2\xfb\x1f\xfc\xca\x05\x67\x9c\xf9\xf0\xdd\x1b\x9b\x9b\x9b\
+\xf3\x0a\x8a\xc0\xd1\x34\x35\x36\x9e\xbb\x7c\xe5\x89\x8b\xcf\xfb\
+\xd4\xa7\xaf\xdb\xf9\xf2\x4b\x95\x23\xaa\x70\x75\xec\xbd\x5c\x74\
+\xb2\x1a\x32\x31\xc2\x8a\x3a\x05\x63\x86\xb2\x95\x90\x2f\x4b\x77\
+\x6e\x5c\x35\xe0\xe2\x4b\x2f\xbd\xf4\xd0\x43\x0f\x3d\xf0\xc0\x83\
+\x33\x67\xce\x78\xea\xe9\x2d\xa4\x35\xf2\x41\x65\xd5\x43\xce\xaa\
+\x38\x2b\xbe\x00\xb0\xb8\x12\xaa\x70\x7f\xb6\x9d\x75\xb2\xae\x70\
+\x9f\xb1\x58\x14\x67\x69\x6a\x38\x7a\xf9\x15\xab\xc7\x8c\x19\x7b\
+\xcf\x17\x3f\x7f\xfe\x95\xd7\x8e\x1c\x3d\xa6\x1f\x01\xae\xb1\x69\
+\xda\xac\x13\x46\x8d\x1d\xb7\xf9\x81\xbb\xff\xad\x2f\x75\xee\xd2\
+\xf3\x5b\x9a\x9b\x61\xe0\xef\x68\x7c\x01\xf4\x61\x3d\x84\x99\x8c\
+\x07\xc7\x85\x66\x19\xfd\x2c\x0f\x75\x14\x50\x14\x7e\x8a\x7b\xbe\
+\xdb\x44\xf4\x9c\x02\x12\xc7\xc8\xc5\x38\x20\x32\x46\xe8\xcb\x92\
+\x25\x4b\xf0\xad\xa3\xa3\x43\x6a\x0d\x9d\x91\x20\x3c\x3d\x03\x0d\
+\x58\xc8\xa1\x1a\x12\xc1\x56\x6a\x91\xfe\x9b\xa0\x02\x31\xc5\x9b\
+\x9b\x1a\x4e\x5f\x74\x56\x65\xd5\x88\x75\xeb\xd7\x5d\xb8\x66\x5d\
+\xed\xa8\x51\x50\xd7\xce\x8e\x8e\xa2\xa2\xe2\x35\x37\x6d\x7c\xf0\
+\xde\x4d\x91\x58\x64\xd1\x59\x8b\xdb\xdb\x5a\x81\x92\xb8\x18\xe0\
+\xed\x8e\x2f\xd1\xa2\x2f\x0f\x71\xd5\xff\x5c\xfe\xe5\x12\xcd\x19\
+\x03\xce\xa5\x41\x83\xfe\xc5\x18\x17\x2d\x29\xbd\x60\xbd\xab\xab\
+\x6b\xc1\x82\x05\x23\x46\x8c\xc0\x0e\x42\xa0\xfe\x01\xff\xea\x05\
+\x97\x0f\xdd\x6c\x6d\x69\x9e\x3e\x63\xd6\xfd\x9b\xef\x7b\xf6\xeb\
+\x0f\x35\x1e\x3d\x0a\x1c\x04\x22\xab\xa7\xb7\x37\x16\xcb\xfb\xc4\
+\x86\xdb\x3e\xff\xa5\x07\xf6\xec\xfe\x05\xe2\x5d\x26\xf3\x2e\xdb\
+\x1a\x79\x72\x97\xe4\xcd\x7d\x4e\x9a\x1b\x0d\xb2\x5d\x4f\xc0\x07\
+\x05\x96\xd6\xd6\x56\xf8\x69\x48\x46\xa0\x21\x5b\xab\x79\x20\x80\
+\x70\x0f\x6d\x84\x10\x9c\xab\xc9\x3e\x6e\xc5\x8d\x78\x5e\xbc\xb3\
+\xb3\xfd\x84\x79\x27\xdd\x7b\xfb\xe6\x2d\x8f\x7d\xad\xaf\xbf\x9f\
+\xec\x35\x99\x4c\x22\xea\x5d\xf1\xe9\x1b\xef\xb9\xff\xee\x86\xa3\
+\x47\xf2\xf3\x0b\xb9\xc0\xa8\xef\x78\x7c\x8b\xea\x77\xec\x8c\x55\
+\x01\x06\x91\x39\x51\x8a\xef\xfa\x92\x55\x22\x09\xc3\x1a\x14\x50\
+\x22\xb3\x8e\x1d\x08\x19\xc8\x01\xb9\xa7\x03\xe6\x89\xb8\x06\xab\
+\xdb\x1b\x7c\x51\x42\x78\x10\xef\x01\xaa\x2f\xb8\xb8\x78\x2c\xde\
+\xde\xd6\x72\xca\xc2\x45\x6b\xaf\xb8\xea\xf9\x27\xbe\x11\x4b\x14\
+\xe0\xc9\x71\x51\x6e\xe8\xa9\x1c\x51\xbd\x60\xc9\xb2\x4d\x9b\x6e\
+\x06\xfd\x42\x3b\xbf\xd3\xf1\xc5\x3e\x8e\xa5\x36\xd6\x35\x0a\x98\
+\x26\xff\xd8\x6a\x05\x15\x10\xb2\x83\x46\xc0\x9b\x40\x04\x7d\xa1\
+\xc5\x6c\x0c\xfc\x8a\x18\x0f\x3a\x84\x92\x0f\xdf\x09\xb5\xc2\xb2\
+\xc0\x85\x0c\xab\xda\xc1\x75\x5c\x0f\xfc\x51\x53\x63\xc3\xc5\xab\
+\x3e\x36\x6b\x6c\xdd\x8b\x5b\xb7\x14\x96\x94\x41\xb7\x1d\x37\xd2\
+\xde\xde\x3e\xf7\xe4\x53\xe3\x55\x35\xf7\xdd\x7b\x47\x55\x75\xb5\
+\x0c\xfc\x8c\x31\xfe\x8e\xc6\xf7\x5f\x9b\x27\x1e\x95\xac\x12\xf5\
+\xce\x88\x46\x92\x79\x28\x78\x9f\x65\xcb\x96\xed\xda\xb5\x0b\xf1\
+\xd5\x30\x8a\x81\xc4\x3d\x40\x44\xc1\x65\x03\x25\x9e\x70\xc2\x09\
+\xfb\xf7\xef\x8b\xc6\xa2\x84\x48\x38\x33\xd8\x9e\x6b\x82\xc6\x67\
+\x68\x61\x0a\x15\x67\x57\xd9\x31\xf3\x88\x1d\x4d\xce\x3b\xad\x6d\
+\x2d\x37\x7e\xf6\xd6\xcb\x3f\x76\xc9\xbe\x09\x93\xc7\x4f\x9c\x84\
+\x18\x1f\x8b\x46\xdb\x5a\x5a\x96\x5f\x76\xc5\x57\xee\xbc\xe5\x47\
+\x5b\x9e\x3d\x67\xf1\x79\x00\xa5\x88\x12\x74\x91\xc3\x55\xad\x2c\
+\x22\x92\xe9\xba\x98\xb8\x3b\x85\x5d\x1d\xae\x2a\x59\x16\x69\x4f\
+\xc3\xf1\x82\xc2\x42\x28\x02\xa2\xe6\xba\x75\xeb\xd6\xae\x5d\x0b\
+\xcf\xa3\x80\x3c\xf7\xee\x0a\x51\x2e\xcc\x0f\xe3\x58\xd4\x8e\x70\
+\xe0\x9e\x3d\x7b\xa0\x4d\x06\xfe\x84\x92\x49\x3b\x51\xb4\x93\x4b\
+\x47\x66\x76\xac\xa4\xb8\x8c\xb9\x11\x65\x2b\x9a\xfe\xd2\xa9\x09\
+\x28\xa4\x74\x71\x49\xc1\x83\xf7\x7d\x71\xc3\xc6\x5b\xea\xd6\x5c\
+\x4f\x88\x16\x7e\x34\xd5\x97\xbc\xec\xba\x1b\x1e\xf9\xda\x97\xe6\
+\x9f\xb4\x60\xd4\xa8\xd1\x82\x4b\x62\x3a\xd3\x08\x61\x3f\x35\x9e\
+\x57\x63\x16\xdf\x01\xfe\x06\x07\x06\xfb\x52\x7d\x9e\x0d\xca\x7b\
+\x96\x75\x31\x3a\xb9\x1b\x81\xdb\x9b\x37\x6f\xfe\x8f\x7f\xb4\x65\
+\xd3\xa6\x4d\x08\x4c\x35\x35\x35\xe5\xe5\xe5\x64\x32\xe1\x92\x86\
+\x25\x1a\x87\x48\xc5\x7d\xfb\xf6\x8d\x1a\x35\x6a\xef\xde\x7d\xab\
+\xd7\x7c\x12\x8e\x4a\xa5\x94\x1a\x0b\x89\xd8\x29\x98\x50\x6e\xd0\
+\xac\x4a\x97\x08\xb8\x64\xb3\x08\x58\x38\x6a\xdb\xf6\x6d\x8d\x0d\
+\xf5\x28\x41\x39\x8e\x55\x36\x91\x24\x2a\x05\x65\xdc\x3c\x54\x95\
+\x27\x7b\x76\x6e\xff\x9f\x45\x4b\x97\xa7\x7a\xbb\x5d\x71\xe0\x40\
+\x65\x55\xf5\xec\xd3\xce\xb8\xf9\x73\x1b\xce\x3e\x77\x49\x7b\x5b\
+\x9b\x82\x20\x41\x4e\x5a\x17\x7e\xa4\xf8\x70\xba\xb8\xf0\x5c\x62\
+\xbd\xa4\xac\x6c\xea\x94\x69\xd3\xa6\x4d\x47\xa8\x31\x56\xa7\x70\
+\x10\x61\x02\x22\x3e\xa1\x02\xb7\xdd\x76\xe7\x5b\x6f\xbd\xd9\xd0\
+\x50\x8f\x54\x6c\x98\x82\xb5\x7a\xba\x46\x52\xa4\x5f\x93\x27\x1f\
+\x5f\x5d\x5d\xfb\xf1\x8f\x8f\x1a\x31\xa2\x0a\x0e\x1c\x48\x89\x00\
+\xbf\xd0\x5e\xad\x0a\x54\x4e\x8c\xa8\x94\xd1\x55\x55\x06\x9c\x37\
+\x1a\xed\xed\xed\xb9\xf9\x73\xeb\x17\x2c\x98\x7f\xfc\x8c\xe3\x23\
+\xd1\x88\xa9\xc0\x70\x53\x0a\x54\x58\x4c\x48\xf3\xce\xbb\x6e\xbf\
+\xe3\x9e\xfb\x60\x4d\x25\x45\x85\x50\x22\x9c\x0b\x39\xca\x69\x67\
+\x9d\x7b\xef\xb6\xad\xa7\xf4\xb6\xce\x9b\xf7\x01\x22\x18\x02\x26\
+\x66\x05\x6b\x31\x98\x34\x05\x55\x0b\x83\xc3\xfd\xc6\xd7\xff\x7d\
+\xe1\xc2\xb3\x57\xac\x58\x09\xdf\xcf\x08\x27\x29\x1f\x64\x71\x83\
+\x78\x3e\x91\x68\x14\x55\xad\x59\x1f\xf8\x00\x71\x8e\x8a\x1e\x0e\
+\x35\x54\x58\x02\x62\xa6\xad\x82\x80\x81\xcc\x3c\xdc\x10\xfd\x18\
+\x2c\x48\x69\xfe\x46\x20\x03\xd0\x20\x4f\x3e\xf9\xdd\xc5\x8b\xcf\
+\x5e\xbd\x7a\xcd\xdb\xac\x2f\x21\x3b\xfb\xfa\x33\x3f\x58\x79\xf5\
+\xda\x54\x4f\x57\x56\xa2\x7a\x30\xb5\xff\xf4\xcf\x9f\xd8\xfb\xbb\
+\x5f\xad\xbb\xe1\x5f\xff\x8a\x82\xd5\xf2\xe5\xcb\xd7\xac\xb9\xf6\
+\xac\xb3\xce\x05\xb0\x80\x6f\xa1\x6b\x35\x75\x31\x26\xd3\x48\x26\
+\x79\x02\x2e\xc2\x53\x2a\x6b\xcc\x27\x6c\xc3\x54\x67\x33\x2c\x38\
+\xb7\xea\x07\xe2\x4a\x65\xbe\x4e\xec\x3a\xd1\x76\xfa\x2b\x93\xd5\
+\x6b\x47\x7d\x3a\xca\xc6\x1c\xc9\x3d\x76\x74\xb4\x2d\x5f\x7e\xb9\
+\xa1\x0d\x0c\x6a\xd7\xcf\x83\x07\xfa\x5a\x56\x5d\x7a\xe9\x53\xcf\
+\x3e\x77\x60\xef\x9f\xc6\x8d\x9f\x80\x4a\x28\x4e\x0a\x7e\x76\xc6\
+\x07\x67\xef\xfa\xf9\xf6\xef\x3f\xf3\xf4\x8a\x8b\x56\x2a\xd4\xea\
+\x3f\x4a\x3b\x6f\x4e\xac\x1e\x39\x10\x22\xd4\x41\x0a\x4f\x9a\x34\
+\xe1\xad\xc3\x6f\x1e\x7f\xfc\xcc\xde\xde\x24\x27\x13\x53\x4f\x98\
+\xc9\x28\xe6\xe8\xfe\x9a\x08\x8c\xc2\xd5\x4e\x80\xf9\xe5\x63\x1c\
+\x3c\xf3\x51\x51\xde\x6d\x38\x06\xa3\x29\xff\xa1\xb9\x6e\xe9\x87\
+\x1c\xf5\xc9\x55\x69\x41\xbb\xe3\x0c\x00\x96\xcc\xe0\x22\x54\xf3\
+\x45\xc9\x04\x9f\xf0\xf7\x01\xeb\xa0\x15\x02\x5c\xd7\x5c\x7d\xe5\
+\x1d\x0f\x3d\x3c\xf9\x53\x1b\x06\x92\x02\x85\x41\x46\x7d\x3d\x3d\
+\x4b\x57\x7e\xf4\x89\xef\x3e\x7a\xd6\xd9\xe7\x0c\xd7\x1c\x44\xec\
+\x15\x65\x8b\xa2\x84\x27\x59\x1d\x7a\x24\x00\x53\xd2\xc1\x4b\xa0\
+\xc0\xb9\xbf\xf4\x1c\x28\x45\x0c\x53\x15\x08\x71\x9b\x2c\xcc\xe4\
+\xfb\x19\x51\x7f\x95\xce\x5f\x9a\xd0\x05\x12\x80\xd2\xcc\xa1\x43\
+\x87\xe4\x55\x0a\x8b\x43\x11\xe9\x85\x17\x5e\x78\xe4\x91\x47\x48\
+\x83\x94\x62\x5a\x35\x02\x5a\x20\xc4\xde\xe6\xfa\xe6\xc6\xa3\xc2\
+\x6d\x4b\x3a\x1e\xb4\xdc\x98\xb1\x63\xf3\x2b\xaa\x2e\xb9\xf8\xe2\
+\xd9\x73\xe6\x00\xa7\x85\x95\x88\xaa\x2f\xd8\x0e\x15\x43\x75\xeb\
+\xfa\xeb\xaf\xc7\x38\x26\x0f\xa7\xdd\x3d\xca\x55\x03\x02\x1e\x2e\
+\xe9\xe6\x2c\xf5\xea\xd0\xe0\xf2\x00\xa6\x61\x9e\x86\x31\xaf\xf9\
+\x22\xa0\x7d\x2a\x16\x05\xc6\x97\xa8\x7d\xa8\xae\xae\x0e\x29\x15\
+\x5d\x7d\x63\x63\xe3\xad\xb7\xde\x3a\x7f\xfe\x7c\xdc\x80\x20\x8a\
+\xd0\xbc\x24\x8b\x94\x58\x62\x7a\xc1\x1d\x0a\x7e\x6e\x44\xe5\xce\
+\x6d\x5b\x57\x5e\x75\x4d\x7f\x6f\x97\x70\xff\x6e\xa4\xaf\xb7\xf7\
+\x8c\x8f\x9c\xf7\xfc\x63\x0f\xff\xcb\x75\xd7\x11\xf1\x10\x96\x11\
+\xd1\x38\x18\xf3\xbe\xfb\xee\x7b\xf4\xd1\x47\x6f\xb8\xe1\x06\x78\
+\x95\xa0\xae\x91\xc7\x30\xb5\xec\x61\xd1\x66\x68\x81\x43\xcc\xea\
+\x4a\x88\x07\x42\x9d\xdc\xf8\x34\x37\x8c\x0d\xfd\x20\x9e\x55\x4c\
+\xdc\x09\xdc\x02\x6e\xfe\xf0\xe1\xc3\xa8\x85\x4c\x9e\x3c\x99\x18\
+\x22\x22\x0f\x48\x52\xb4\x82\x3d\xb1\x1b\x0c\xf0\xd4\xd3\x4e\xeb\
+\x6b\xad\x6f\x6b\x69\x86\x0c\x85\xb5\x4a\xbd\x18\x37\x61\x62\xf9\
+\xc8\xba\x5d\x3b\x77\x96\x96\x95\x11\x71\x6e\x16\xe3\x28\x69\xb9\
+\xf8\xe2\x8b\x8f\x1c\x39\x62\xf5\xee\x71\xfb\x9a\x54\x36\xaf\xe2\
+\x76\xe0\x46\x5c\x53\xdb\xe2\x36\x6e\xc6\x93\xfb\xf3\xc1\x8e\xb6\
+\x36\x14\x61\x5c\x4f\xae\xae\x9d\xf8\x38\x5e\xc2\x23\xaa\xf9\x66\
+\x1f\xc1\xb8\xda\xe3\x07\x13\x25\x45\xd4\x09\xdf\xdc\xd4\xd4\x84\
+\xfb\x24\x67\x94\xa3\xf8\xe7\x71\x7b\xd9\xb2\x8a\xca\x0f\xcd\x9b\
+\xf3\xeb\x97\x5f\x2c\x40\xbc\x47\x0a\x29\x3b\x0c\x06\xfb\xfb\x3f\
+\xb4\xe8\xec\x1f\x6c\xd9\xe2\x0a\xf9\xc6\x6c\xbd\xa3\x85\x84\x4e\
+\x43\x91\xb3\x33\x4d\x1c\x96\x7c\xb8\x4a\x56\x15\x76\xb2\xfe\x71\
+\xe9\xa2\x20\x02\x59\x58\x26\xa4\x20\xb6\x43\x3a\x07\x0f\x76\x36\
+\x37\x77\xca\x94\x47\x57\x00\xa4\x83\xe7\x7a\x5d\xd5\x46\x74\x91\
+\xc4\x30\x4d\x2a\x08\x30\x6f\x7c\xc7\x09\xfc\x23\x22\x41\xb8\x12\
+\x54\x78\x90\xee\xd8\x58\x7c\x38\xfa\x11\x35\xa2\x85\x0b\x17\x36\
+\xec\x7f\x1d\xcc\xb7\x81\xef\x40\x61\xd3\xa6\xcf\xe8\xcb\x38\xff\
+\xfb\xea\xaf\x4b\xcb\x4a\xa1\x29\x46\x46\xb6\x3e\x92\x26\xda\x55\
+\x3f\xc7\x54\x3d\x28\xbd\xa1\x64\x95\xcc\x2d\x70\x6e\x1c\xd9\xd3\
+\x33\xd0\xdb\x8b\x42\x85\x23\xf5\xd9\xcd\x8b\x47\x0f\x1c\xec\x44\
+\x0e\x5b\x5e\xe6\xa6\xfa\x87\x4c\x80\x7b\xf7\x18\x18\x6e\x8a\xba\
+\xb8\x07\xf8\x69\x13\x3d\x02\x8a\x63\xc2\x13\x21\xf8\xb1\x63\xc7\
+\x1f\x37\x6e\xcc\x1b\xbf\xfd\x0d\x58\x5a\x95\x36\xc9\x92\xd2\x89\
+\xa7\x9e\xfe\x93\x9f\xfe\x14\xdd\x04\x64\x8f\x46\x40\x36\x0b\x48\
+\x80\xdb\x8c\xe9\xd3\x20\x29\x13\x8a\x11\x9c\xf9\x54\x4b\xfc\x84\
+\xba\x55\x32\x39\x74\xe0\x20\xda\xa8\x62\xe0\xdb\xf3\x0b\xe2\xa8\
+\xa4\x23\xff\x28\x29\x76\x07\x87\x78\x7a\x28\xc3\x15\xe1\x2d\x93\
+\x07\xd7\xf1\xca\x08\x42\xcd\x85\x50\x55\xde\x26\x8d\x49\x37\xf0\
+\x09\xd2\x53\x04\x2d\xf1\x97\xbb\xfe\xea\xb6\xa4\x49\x7c\x25\x39\
+\x73\xdd\x4c\xb7\x1d\x06\x44\x46\xde\x04\xb5\xa4\x13\xe7\xce\xd9\
+\xfa\xf2\xee\x53\x3e\xbc\x88\x52\x6e\xb8\x6a\x64\x67\x1f\x9c\x33\
+\xf7\x5b\x3b\x5e\x68\x6b\x6d\x29\x2a\x2e\x21\xa1\x98\x41\x28\xae\
+\x9b\xf6\x5e\xaf\x80\x6c\x05\x74\xa2\xc9\x5c\xbb\x17\xc6\x36\x78\
+\x24\xd5\x23\x6b\x8b\x8b\x8b\xf2\x98\x03\x88\x91\xea\xea\xec\x4c\
+\xf6\x75\x17\x15\xb9\x99\x2c\xd0\x86\x33\x38\x24\xbc\x43\x3c\x1e\
+\x31\x05\x25\x53\x2d\x80\xc0\xb8\xcb\x7c\x91\x40\x91\x9f\xd2\xe0\
+\x98\xd5\x5e\xe1\x07\x09\x96\x9e\xfb\x40\x83\x51\x2b\x5b\x52\x36\
+\xfa\x87\xab\x9e\x33\x77\xee\x40\x57\x7b\x6b\x73\x13\x7a\x0b\xc9\
+\xb7\x65\x44\x9b\xea\x88\xea\x31\xe3\x76\xee\xdc\x89\x68\x45\x4d\
+\xcf\x36\x44\xb0\x83\x1a\x79\x3e\x85\x6c\x3d\xaa\x4f\x8e\x1f\x38\
+\xbd\xed\xa2\x90\x54\xd7\xd6\x96\xa6\xfa\x85\x63\x4e\x24\x22\xf9\
+\x09\xd7\x10\xfc\x3c\x9b\x7e\xfd\xf5\x96\xce\xce\x7e\xc8\x48\xfa\
+\xa9\x77\xc1\xd0\xe8\x52\x0d\xe0\x0c\xab\x8c\xb9\x54\x62\xe6\xcc\
+\x02\x77\x5e\x50\x58\x34\x61\xec\xe8\xbd\x7f\xf8\x1d\xd8\x08\xf1\
+\x1c\x04\x98\x77\xd1\x36\x39\xeb\x84\xb9\xdb\x5f\xf8\x39\x8e\x25\
+\xce\x4f\xd0\x6c\xfe\xc5\x33\xec\x90\x89\xd1\x05\xb9\xba\x7f\x4a\
+\xb7\xf3\xa8\x7f\x4c\xa2\xd5\x6c\x55\x55\x61\x41\x41\xfe\xe0\x20\
+\xf4\x05\xd7\xe4\x10\xa1\x09\xb3\x81\x03\x1d\x1a\xea\x7d\xfd\x8d\
+\xa3\xaf\xbf\xd1\xdc\xdb\x3b\x68\xc0\xb2\xb4\x38\xee\x7a\x94\x0a\
+\x97\xec\x39\x55\x05\xc4\x0f\x6a\xbb\xc2\x44\xde\x9e\x9a\x46\xf7\
+\x5d\xba\xad\x41\x36\x58\x87\x22\x94\x95\x95\xa1\x65\x0b\xfd\x5d\
+\x58\x01\x20\xc8\xcf\x2f\x58\x76\xc1\x05\x87\xde\xf8\x83\x23\xdb\
+\x8d\x5c\x59\x68\x03\x4a\xfc\xe0\xec\x39\x2d\x1d\x9d\x92\xe4\x2f\
+\x82\x1e\x01\x28\x9b\x82\x68\xce\xbe\x0c\x3b\x74\x90\x36\x45\x0d\
+\x63\xe1\xfa\x82\xbc\x6a\xad\x8e\xc7\xdd\xca\x8a\xa2\xfa\xfa\x3e\
+\x40\x73\xd5\x3c\xaa\x3b\xf6\xf3\xf3\xa3\xf9\xf9\xbc\xab\xb3\xab\
+\xb9\x39\x39\xf3\xf8\x9a\xca\xca\x02\x9c\xd7\x58\xab\xd7\x38\xa0\
+\x9c\x39\x53\xc1\x52\xb5\xb2\xa9\x35\x63\x6b\xd2\xad\x0e\xdb\x4c\
+\x12\xc8\x93\x01\xea\xb6\x6d\xdb\x26\x3c\x0b\x73\x90\xb9\xa1\xfd\
+\x58\x58\x0f\x73\xf7\xfd\xfe\x37\xed\xcd\xcd\x95\xe8\x9b\x91\x0e\
+\x0e\x3b\xc3\x47\xd4\x4d\x98\x74\xd3\x4d\x37\x9e\x74\xf2\x02\x1c\
+\x05\x01\x2d\x5d\xba\x94\xd2\x0b\xe3\xec\x7c\xe7\xb2\x15\x88\x6b\
+\xd2\xfe\x18\x6a\x9f\x4e\xf3\xd6\xd6\x24\x9a\xa4\x34\xd1\x4c\x19\
+\x95\x90\x43\x2a\x95\xee\xee\xe1\x15\x15\x65\x73\xe7\x8c\xae\x28\
+\xcf\xc7\x23\x71\xdd\x77\x29\x8c\x1d\xb3\xf3\x06\xf7\x06\xae\x1e\
+\x81\xfc\xb1\x27\xbe\xd3\x8e\xc7\x34\x6e\xda\x40\x61\x65\xba\xa4\
+\x26\x53\x5a\x73\xe9\xb5\xeb\xf2\x25\xa8\x11\xd2\x62\x2e\xa0\x77\
+\x6f\x4f\xcf\xf9\x17\xae\x98\xbb\xf0\xcc\xa1\x68\x22\x51\x36\xe2\
+\xc9\xa7\x9e\x86\xa1\xd9\xe6\x19\x3e\x5d\x10\xbe\x6a\xe2\x82\x33\
+\xaf\x63\x4f\x35\xed\xc5\x62\x91\xa6\xa6\x64\x7f\x7f\x5f\x49\x49\
+\x04\x82\x86\x6f\x96\x40\x4c\x3c\x78\x54\x16\x12\xf9\xc5\xc7\xd5\
+\x95\x95\x95\x26\xd4\x73\x10\x86\x2f\xac\xcf\x0d\x67\xcf\x9e\xc7\
+\x36\xf9\x9b\x69\x42\xd5\x78\x8c\xfc\xf8\x30\x5a\x13\x58\xa0\x35\
+\x1f\xbf\xe2\x8a\xb9\xf3\xe6\xfe\xd7\xb3\xcf\xd7\x5d\x74\xd9\xc2\
+\xe5\x2b\x7a\x3a\x3b\x71\xb5\x02\xe2\x0f\x0d\x0a\x6e\xde\x95\x1a\
+\x25\x0b\x50\x79\x89\xc4\xe9\x67\x2c\x2a\x2b\x2d\xfd\xfd\x6f\x5f\
+\x3b\x79\xfe\x89\xb5\xb5\xb5\xa0\xdb\x4d\xba\x1b\x90\x91\x2d\x07\
+\xba\x60\xd5\x44\x12\xf0\xb2\xf4\x10\x70\xec\x91\xfa\x0e\x3c\x12\
+\x74\x6d\xf4\xf7\x67\x52\xa9\x8c\x71\x0a\x40\x5e\xb3\x66\xd4\x94\
+\x97\x25\x80\x18\x29\x1e\xdb\x21\x39\x94\x5a\x38\x26\x6e\x1c\xa3\
+\x10\x1d\x30\xb1\x9c\x56\x66\x14\x0a\x64\x39\xd8\xbf\x75\xd7\xae\
+\x79\xf1\x99\xef\x7c\xfb\xab\x0f\xc5\xe3\xb1\x21\xf4\x3f\x48\x32\
+\x30\x22\xc5\x13\xd1\xa9\x05\x76\xef\xe9\xee\x02\x9d\xfa\xe2\xf6\
+\x6d\xd3\xa6\x4e\x15\x33\x01\x64\xbb\x17\x7d\xfa\x05\x94\xf5\xe7\
+\x14\x26\xcc\x2b\xf2\xcc\x61\x5e\x67\x95\x80\xd1\x47\x1b\xba\x3b\
+\xbb\x52\x28\x2c\x33\x37\xbf\x12\x96\x5d\x51\xd1\xdb\x2b\x48\x12\
+\x78\x6b\x64\x8e\x10\x32\x4e\x01\x24\x41\xf5\x67\xa6\x8a\x47\xa6\
+\x7a\xc1\xcd\x8a\x49\x7e\x11\xef\xda\xda\xb2\x03\x03\x9c\xd8\x71\
+\xff\x6e\x8a\x36\xcc\x69\x62\xa6\x1d\xc7\x84\x64\xdc\x3a\x9a\x60\
+\x8a\x4b\x4a\x6f\xbf\x7d\x53\x62\xa0\xe7\xa1\xbb\x6e\xc3\x0f\x20\
+\x88\xd1\xe1\x16\x91\xc2\x91\x32\x62\xf2\x9f\x8b\xaa\x11\x4c\xb2\
+\xfe\xad\x37\x67\xcf\x9e\x0d\x28\x67\x3a\x30\x21\x23\xdb\x07\x65\
+\xb3\x46\x57\x54\x5f\x8c\x6e\xe2\x54\xb7\x67\xe3\x20\xa1\x3e\xa5\
+\xa5\x89\xf9\xf3\xc6\x25\x12\xc0\x9f\x32\x2e\x44\x19\xc0\xf4\xe1\
+\xfa\x96\x44\x1e\x8a\xf1\x80\xa4\xae\xac\x4d\x79\xec\x85\xeb\x3a\
+\x26\x5c\xd2\x16\x59\x82\x16\x5f\x70\x19\x90\x4e\x7b\x47\xb6\xa9\
+\x25\x33\xb6\xce\x35\xec\xa2\xe9\xeb\x56\xa5\xf3\x2c\x0f\xb4\xb5\
+\xd1\x62\xf8\xb3\xac\xb5\x20\x4e\xa1\x1e\x87\x9b\xc4\x34\x9c\x9f\
+\xbd\xb0\xfd\x0b\x1b\x6f\xba\xec\x9a\x4f\x9e\x38\xff\x64\x70\xaf\
+\x91\x68\xc4\xce\x4e\xe1\x95\xff\xf4\xfa\x1f\x0b\xf3\xf3\xc0\xb2\
+\x23\xa6\x51\x12\x47\x23\xe0\xf0\xd0\xe3\xf0\x91\x47\x54\x9b\xcf\
+\x91\x5b\xc3\x21\x94\x96\x24\x64\xbb\x2e\x2e\xcb\x41\x53\xd5\x60\
+\x9a\x23\x49\x1e\x1c\x4a\x1f\x7a\xb3\xb9\xb2\x32\x66\xaa\x74\x21\
+\x26\x5f\xd1\x27\xb8\xb6\xee\x1e\xa1\x2f\x89\x04\x4b\xe4\x31\x50\
+\x74\xed\xed\xe9\x92\x22\x8e\x0a\x23\xa1\xeb\x50\x9f\xe8\xb0\x8e\
+\xd9\xee\x01\xb4\x5b\xdf\xc8\xae\x91\xd9\x7e\xf8\x8c\x45\x48\xfd\
+\xbf\xfc\xd5\xaf\x1d\xda\xb7\xf7\xb2\x2b\xae\x4a\x0a\x52\x99\x47\
+\xa4\x1b\xc2\x40\x85\x05\x85\xaf\xee\xd9\x3d\x7d\xfa\xf4\x21\xa9\
+\x35\x86\x4b\xcc\xed\x83\xfc\xfe\xc1\x75\x34\xcd\x4f\x94\x2b\xe9\
+\x92\x48\x1f\x00\x46\xd1\xcd\x29\xd5\x4e\x80\x0b\xf9\x48\xe0\x8c\
+\xa6\x4c\xa9\xaa\xa9\xae\x8c\x89\xca\x17\xcd\x22\xd1\x29\xa9\xec\
+\x05\x90\xc7\x8a\x20\x4b\x47\xc1\x6d\xb6\xb6\xa1\xaf\x61\xf0\x48\
+\xfd\x50\x6b\x6b\xba\xb8\x48\x76\xb0\x09\x7f\xaf\x40\x17\x19\xb7\
+\xfa\xc7\x73\x9b\x58\xf6\x2f\x2d\xb8\x0c\xf8\xdd\xaa\xea\xda\xcd\
+\x77\xdd\xd5\xb8\xff\x8f\x77\xdf\xfa\x59\x24\x5c\x08\xf0\xa2\xeb\
+\x18\x59\x58\x34\x8a\xfe\x9c\x03\x7b\xf7\xce\x9a\x39\x13\xf9\x00\
+\x24\x62\xbb\xa1\xb0\x06\x99\xeb\x31\xd1\xc3\xe1\xaa\x70\xa8\x43\
+\x98\x10\x9b\x17\xfe\x5d\xbb\xbc\x25\xa4\xe6\xcc\x9a\x05\x55\x2d\
+\xc2\xc8\x8e\xa9\x26\x3b\xae\xb2\x5c\x32\x06\x11\x47\xc0\xec\x38\
+\xc5\xc5\x6e\x69\x69\x34\x1e\xe3\xa0\x22\x0a\x0b\xb2\xb2\xbe\xe8\
+\xf4\x25\xb3\x5d\x5d\xc2\xc7\x41\x4c\xba\x91\x49\x77\x31\x0d\x23\
+\x1a\xd3\x57\x6b\x30\xb4\xdd\x3f\x49\xaa\x04\x42\x1a\x39\xc7\xfa\
+\x0d\x9f\x39\x7e\xf2\xf8\xcf\x5e\xbf\xf6\xd0\x81\x03\xb8\x4a\xc8\
+\xa0\xa8\xb0\xf0\xcf\xfb\xf6\xa1\x86\x50\x53\x5b\x8b\x1d\xec\x8e\
+\x27\x12\x93\x0f\x28\x32\x4f\x0e\x54\xeb\x8c\x6a\xa9\x05\x4d\x2c\
+\x40\xa1\xfa\x4b\x27\x5c\x14\x2d\x18\x63\xb9\xa8\x55\xbb\x53\x1b\
+\xbb\x96\x97\x47\x1a\x1b\xc0\x36\xa8\x59\x59\x50\xf9\x78\x2c\xd3\
+\xd4\x94\xed\xea\x8e\x54\x94\x03\x9c\xb0\x63\x98\x98\x2d\x08\x29\
+\xf1\xac\x69\xa1\x35\x05\x6e\x53\xb6\xa3\x36\x5b\x50\x91\xcb\x96\
+\x2d\x3f\x6e\xf2\x71\x0f\xde\x79\xdb\x85\xab\x2e\xbb\x64\xd5\xa5\
+\xe0\x36\x7e\xb5\x7b\xd7\xe4\x89\x13\xb3\x92\x6c\xb5\xdd\x19\x1d\
+\x1e\xd0\xa0\x00\x2e\xd3\x51\xcc\x97\x67\xe4\x24\x6b\x94\x31\xb9\
+\x86\x4c\x65\x3a\x51\xf0\x66\x1d\x58\xc4\x10\xa1\x75\xee\xe4\x09\
+\x9e\xcf\x95\x73\x3d\x15\x5b\x0b\x50\x5e\x58\xc0\xbb\xbb\xd3\xed\
+\x1d\x19\xd7\x8a\x9b\x01\xb7\x63\xbb\x1b\xbb\x9d\xd4\x56\x9c\xf0\
+\x82\xbb\x81\x8c\x26\x4c\x9c\x78\xfb\xc6\x8d\x2f\xfd\xe4\xc7\x77\
+\xde\x76\x33\xda\xa4\xf6\xff\xe9\x8d\xe9\x33\x66\xf4\x88\xd6\xcf\
+\xac\x1d\xe3\x73\x99\x98\x47\x66\x11\xe8\x77\xed\xcc\xd5\xea\x82\
+\xb0\x68\x40\x9b\x22\x75\x54\x03\x96\xd8\xce\x75\x7b\x35\x39\x30\
+\xb9\x25\xc0\x1c\x46\x23\xc2\x4f\xa3\x9b\x3a\x12\x35\xc1\x8e\xf7\
+\x26\x59\xff\x60\x74\xc2\xf8\xc4\xd8\xba\x18\x67\x26\x2f\x77\xc3\
+\x26\x66\x34\x28\x20\xa6\x9c\x32\xa2\x7b\x86\x8e\x60\x40\xc4\x72\
+\xec\x77\xf3\xcd\x37\x17\xe6\x45\x2f\xf8\xc8\xe2\x81\x54\x1f\x4a\
+\xbe\x28\x99\x1a\xfb\x32\x9f\x01\x01\xf9\xf2\x0a\xee\xf5\x49\x1f\
+\xd3\xc4\x82\xd3\x86\xfc\xf3\x23\x3c\x6c\xec\x2b\x54\x38\xb2\xd0\
+\x0e\x87\xd5\xd9\x99\x8e\x47\x79\xaa\x5f\xcc\x5c\xc9\x8b\x3b\xa8\
+\xc7\xc5\xf3\xa2\xe3\xc6\xc6\xa5\x76\x38\xa6\x2a\x19\x36\x31\xdb\
+\xb8\x6c\xfb\xd2\x65\x19\x66\xd7\xc4\xcd\x81\x64\x41\x54\xb1\x00\
+\x98\xbc\xe4\x92\x55\x23\x6b\x47\x02\x4c\x13\x81\x6b\xdb\xaf\x99\
+\x0f\x3f\x6c\xaa\xe1\x58\x7d\xd2\x3c\x47\x55\xc3\x6e\xc7\x60\xde\
+\xdc\x1a\x83\x5e\xbc\x0c\xc2\x4c\x98\x91\xda\xc4\x54\x3b\x00\x7c\
+\x70\x5b\x5b\x66\x70\x00\xfe\x38\x06\xb6\x24\xd5\x9f\x05\x0f\x89\
+\xeb\x17\x0c\x1f\x73\x86\x32\x5a\x28\x3e\xce\x2c\xb7\x93\xf6\xb7\
+\xd4\x30\x9a\xc5\x16\x2e\x78\x11\xe9\x63\xb3\xf4\x0d\x0d\x0d\xa0\
+\x8a\x30\x02\xaa\xc9\x34\x2f\x20\x2c\x20\x1f\x61\x66\x4f\xd3\x34\
+\xdd\x1d\x04\x61\x42\x1a\x14\x6a\x3f\xf6\xcd\x7a\xf4\x26\x36\x2b\
+\xd3\xcb\x72\x6b\x9e\x8d\x6c\x58\xc8\x32\x10\x6c\x53\xa6\x24\x20\
+\x29\x04\x2f\x84\x8b\x43\x87\x78\x5f\x2a\x5d\x5a\xe6\x72\x5d\x06\
+\xf1\xc6\x75\x59\xd8\xfb\xd8\x26\x66\x64\x14\x2e\xb7\xd9\xa2\xb1\
+\xa5\x43\x74\x1a\xe8\xed\x9c\xf5\x55\x5b\x83\xfc\x81\xcc\x5c\x9b\
+\x37\x57\x83\xbc\x07\x37\xc0\x5f\x4c\x96\x61\x66\x0e\x2d\xf7\x37\
+\xaa\x83\x55\xe7\xba\x99\x5d\xd8\x11\x80\x5f\x7a\xc8\x29\x28\x60\
+\x59\x3d\xfb\x4b\x36\x8f\x52\xf7\xab\x2a\xe1\xe3\x32\xb0\x67\x5d\
+\x5d\x7c\xef\x3e\x28\x94\xec\x68\x30\x50\x83\xd1\x68\x3e\xee\x8a\
+\x6e\x80\x9c\x8b\xa1\x01\x8d\x4d\x19\x3d\xa2\xca\x44\xc0\xbe\xac\
+\xf9\x91\xcc\xf4\xe1\x06\xca\xbf\xe6\x2c\x7e\x13\xcb\x6a\x61\xc8\
+\x1c\x88\xdb\x1a\xc4\xb9\x9d\xcc\x73\x3d\x55\xc8\x3f\x31\x9f\x26\
+\xdd\xb1\x88\x4e\x0b\xe4\x05\x39\x6f\xbe\x95\xc5\x04\xea\xa2\x62\
+\x37\x9b\x56\x84\x88\x01\x51\x7a\x86\xbd\x6a\x25\xc1\x2c\x31\x28\
+\x94\xa4\xac\x99\x13\x98\xd3\x36\x0c\x08\xb2\x05\x14\x7e\xed\x84\
+\x29\xde\x1b\x01\x19\xb2\xd9\x08\x28\x8c\x54\xcc\x03\xa0\x0a\xa2\
+\x75\x46\xd5\xb9\xa5\xe3\x96\x63\xe8\x8e\xe1\x9c\xb4\x13\x9e\x35\
+\x9c\xce\x38\x03\x82\x84\x05\x19\x22\x6e\xbb\xbe\x3e\x93\x9f\x00\
+\xa6\xcf\xda\x45\x0e\x5f\x07\x91\x57\x6d\x86\xee\xa1\xdb\x90\x29\
+\x2a\x9f\xf9\x1a\x53\x08\x54\x1d\x43\x83\xc2\x4e\xc7\xa8\x8f\x91\
+\x51\xa0\x40\x98\xb3\x1f\xce\x5f\xe4\x71\x42\x51\x2c\x98\x6a\x78\
+\x8d\xe4\x76\x35\xd8\xa5\xea\x94\x23\x11\xb5\xe6\x60\xc9\xa0\xf0\
+\xa7\xfe\x68\x36\x91\x27\x26\x07\x82\xea\x88\x47\xdd\x82\x42\xb7\
+\x37\x69\xa6\x8e\x4b\xfd\x31\x9c\x3c\x22\x7e\x96\x93\xb2\x52\xe3\
+\x14\x3d\x22\xd7\xb1\xc6\xcf\xf2\x9c\xcc\x8f\x8d\x7a\x7c\x55\x7f\
+\x4b\x58\xc6\xef\x50\x91\x2b\xa0\x3e\xe1\x47\x1e\x3e\x4d\x88\xa5\
+\xf6\x5a\x73\xe9\x71\x45\x0d\x66\x94\x54\x2e\x35\xc0\xc8\x36\x74\
+\xa2\x4b\xb9\x87\x97\x69\xaa\x1f\xa8\xfb\x0a\x41\x2a\xb8\xc8\x3f\
+\xd3\x19\x3c\x3d\x61\x9d\x08\x05\xc9\x24\x47\x45\x08\x9e\x58\x4d\
+\xe9\x57\x55\x0a\x87\x48\x62\xb5\xca\x34\x2d\x69\x8d\x4f\x83\xbb\
+\x8a\x7f\xc9\x06\x04\x64\xfb\xe6\x70\x50\xb7\x7d\x33\x49\xc7\x88\
+\x29\x3c\x27\x34\xec\x86\x0c\x6d\x66\x6b\x10\x91\x37\xae\x2e\x28\
+\xdb\x38\x88\xfb\x07\xcd\x3d\x1d\x53\x66\x0f\xee\x51\x28\x51\x42\
+\x14\x32\x89\x69\x2d\x2c\x8c\x34\x36\x66\x30\xcd\xa9\xa2\x32\x82\
+\x8a\x34\x77\x72\x84\x1b\xe6\xef\x0a\x61\xa1\x39\x6c\x76\x5d\xcc\
+\x36\xb1\xb0\x81\x04\xfa\xb9\x49\x7d\x8c\xdb\x0a\xcc\x5c\x0f\xbf\
+\x06\xc7\x58\x59\x2e\x13\x73\x98\xe6\x37\x64\x42\xa1\x35\x48\x3b\
+\x27\x9d\x63\x33\x3e\xcc\xab\x16\x44\xaf\x76\x7e\x42\x4c\x6b\x1a\
+\x18\x04\xf0\x73\xe5\xd4\x05\x91\x4f\xe4\x57\xc5\x9a\x5b\xd2\x6d\
+\x1d\x43\x53\x26\x83\xfb\x74\x74\xa3\x90\x69\xf9\x50\x84\xbf\x96\
+\x0e\x0f\x76\x56\x5a\xa9\x86\x21\xb1\x08\x1c\x0f\x67\x23\x14\xb3\
+\x8c\x68\x8c\xfa\x04\xe7\xf5\xbf\x33\x13\xf3\x1c\x0e\x69\x8c\xdd\
+\x82\xe7\x84\x86\xf3\xa8\x2f\xab\x92\xc9\xfa\x07\x30\x2e\x12\x74\
+\xa6\xb3\x3b\xd4\x11\x79\x32\x89\xa6\x1e\x67\x44\x65\x4c\x1a\x9d\
+\xf4\x56\x54\x4e\x52\x05\xd4\xe0\x8b\x58\x2c\x6c\x68\xfc\xa8\xa3\
+\xe3\x08\x48\xde\x21\x64\x06\x94\x3a\xd9\x45\xb1\x9c\xc6\x65\xfc\
+\x4e\x58\x7d\x72\xe6\xdb\x01\x0d\x0a\x00\x45\xd3\xd7\xc1\xb9\xf5\
+\x6a\x8a\x40\x2c\xe3\x3c\x3c\xdd\x5a\xf9\x57\x98\x55\x77\x37\x1a\
+\xa9\xc1\x0f\x09\x74\x83\x6c\x0b\x08\xb1\x37\x99\xa9\xae\x72\xcb\
+\xcb\x22\xa8\xc7\x66\xb2\x81\x2e\x6a\x66\x63\x51\xaf\x6f\xd5\x09\
+\x12\x66\x06\x22\x42\x3a\x98\xf6\x41\x1d\x8f\x86\x15\xcb\x89\x9b\
+\x4d\x62\x11\x0e\x5e\x81\x18\x6f\xbf\x60\x2a\x90\xee\x05\x78\x15\
+\x4b\x14\x3a\xd5\xb0\x32\x14\xc7\xf7\x5a\x97\x50\x17\x36\xa4\x03\
+\xcb\x02\xaf\x8c\x18\x0f\xd1\x43\x40\x08\x67\x48\x1d\x40\x9f\x95\
+\x95\x46\x28\x01\x70\x5d\x66\xdd\x8e\xd7\xa9\x6a\x95\xa2\x59\xce\
+\xf1\xe5\xcb\x1a\x14\xcb\x81\x8a\x20\x3e\x69\x1e\xac\xe9\x74\x09\
+\x1b\x4b\xd8\x64\xec\x27\x1d\x38\xc4\x08\xda\x2b\xe9\x44\xa3\x34\
+\x89\xc2\x70\x20\x39\xc0\x44\x00\xf2\x84\x4c\x2c\x94\xa6\x72\x67\
+\xd4\x28\x70\x60\x4e\x5e\x9e\x78\x3e\x87\xde\x1c\x4c\x27\xc1\xe1\
+\x93\x56\x66\x73\x92\x48\xc1\x29\xc6\xa1\xd7\x65\x10\x21\x85\x89\
+\x86\x98\x9d\x87\x17\xac\xa0\xc2\x37\x7e\xfc\x78\xc8\xe8\xd5\x57\
+\x5f\x45\x95\x86\xc2\x39\x4a\xa3\x31\x51\xd9\x89\x90\xaf\x31\x2b\
+\x6e\x68\x09\x7b\xe8\x80\x93\x46\xe2\x6a\x74\x73\xc7\x8e\x1d\xab\
+\x57\xaf\xb6\x69\x33\xeb\x28\xc7\xbc\x9a\xc2\xe1\x5e\xdf\x22\xf7\
+\x9a\x59\x91\x2f\x58\x6f\x0f\x62\x02\x0e\x0a\xdd\x29\xcb\x93\xf4\
+\x8f\xec\xe0\x18\x3f\x3e\xf6\xc7\xd7\x07\xe3\x79\x28\x25\x70\xd5\
+\x56\x6d\x19\x84\x00\x3e\xf4\x12\x21\x57\xbf\x46\xc2\x9e\x9e\x2c\
+\xc7\x77\x64\xeb\x14\x74\x13\x49\x13\x68\x8a\xea\xea\x6a\x3c\x52\
+\x94\x40\xd1\x1c\xf7\xf4\xd3\x4f\x63\x2a\x06\x25\x19\x2d\x2d\x2d\
+\x01\x93\x09\x83\xa3\x30\xd5\x17\xee\xe3\xc4\x57\x94\x43\x20\x6b\
+\x74\xfc\x61\xd8\xab\xaf\xbe\x7a\xf1\xe2\xc5\x38\xaf\x17\xfb\x19\
+\x35\x8d\x71\xab\xaa\xc1\xd5\x8f\x16\xed\xe3\x78\x78\xc6\xee\x35\
+\x71\x94\x68\xd4\x6b\x0c\xb2\x82\x39\x9d\x3c\x29\x2e\x43\x81\x71\
+\x6e\x62\x36\x1b\xd3\x2d\xac\xae\x6e\x76\xa7\x17\x1f\x69\x6f\xe4\
+\x1b\x9f\xae\x6c\xea\xd4\xa9\x6a\xb2\x90\x7c\xc8\x98\x73\xbf\x7e\
+\xfd\x7a\xe3\x83\xc2\xed\xae\xe1\xc8\x1d\x7e\xf9\x5d\xb8\x79\x98\
+\x6e\x10\x02\xa2\x97\x6a\x60\x8b\x68\x1b\x97\xf6\xe8\x0d\xa5\xe0\
+\x99\x01\x8a\xef\x88\x72\xf5\xbf\xd7\x08\x66\x5e\x50\xe0\x52\x91\
+\x5a\x58\xb2\xfd\x0e\x96\x1c\x73\xfd\x43\xd5\x0f\x4b\x17\x24\x1d\
+\x91\x26\xdf\x4c\x4d\x2d\x34\x2b\xc0\xf4\x01\x0d\xe7\x80\xc2\x6f\
+\xfb\x1b\xee\xad\x81\x76\xa3\x2b\xe6\x5d\xd0\x0e\x06\x28\x60\x1d\
+\xd6\x5d\x88\xf0\x1c\x98\xb3\x4a\xea\xc4\xad\x7c\x95\x29\xd3\x0a\
+\x90\xce\xf6\x24\x7e\x95\x9b\x08\x97\x2c\xe7\x79\xaa\x79\x86\x34\
+\xed\x31\xab\x5b\x44\x65\xd7\x14\xf3\xbd\x62\x85\x94\xc6\x37\x3e\
+\x5d\xca\xac\x99\xb3\x9e\x7b\xee\xb9\x39\x73\xe6\xda\xdd\x96\x76\
+\x0c\x79\x3b\x02\xf2\xb7\x8b\xf1\xe1\x62\xbc\xdd\xca\x49\x09\x0d\
+\x1c\x36\xa6\xe1\x74\xf7\xf4\x8c\x19\x35\x0a\x29\x94\xac\x17\x19\
+\xa0\xc8\x99\xe6\x5c\x7d\x2c\x84\x7a\x6b\x8e\x93\x4b\x44\xcc\xea\
+\x00\x76\x95\x3a\x1a\x3a\xc8\xf4\x49\x91\x58\xac\xed\xba\x09\xdd\
+\x3f\x3e\x9e\x21\xe8\x4f\xf4\x5d\xfc\xf2\x97\xbb\xee\xb8\xe3\x0e\
+\x54\x23\xf4\xdb\x20\x1c\x34\xfa\xa2\xa1\x30\x9b\xab\x25\x3c\x20\
+\x91\x00\x62\x1e\xce\x07\x99\x5f\x21\x11\x50\x8e\xf0\x3e\x70\xff\
+\x54\x41\xdc\xbf\x7f\xff\x8d\x37\xdd\x24\x44\x96\xf5\x38\xe9\xa8\
+\x89\xee\x36\x0e\x1a\x3e\x86\xe5\xa6\x5c\x99\x93\x03\xd7\x0c\xf7\
+\xf2\x98\xf0\xf8\xea\x05\x03\x2e\xbb\xe7\x9e\x7b\x1a\x9b\x9a\x0e\
+\xbf\xf5\x16\x62\x8c\x2b\x7b\x31\x8f\x36\x34\x38\x16\xd2\x0f\xbf\
+\x80\x8a\x3b\xf6\x0b\xff\x72\xbc\x7c\x8b\xe5\xb2\x00\x3a\x3b\x7a\
+\x8b\x20\x1a\x30\xfc\xb4\x3e\x69\xd2\x24\xc0\x5c\x3c\x2a\xdd\x0c\
+\x6a\x80\x22\x23\x7e\x07\xc9\x4f\x56\xbd\x54\xce\xea\x1b\xb6\xdf\
+\x50\x64\x66\x8d\xa9\x92\x21\x57\x49\x03\xb7\x5e\xd7\xe7\x0c\xbb\
+\x1e\xf4\xa9\x81\xf1\x31\xc8\xd0\x60\xba\xa6\xba\xa6\xb6\xa6\xe6\
+\x6f\xf2\xde\x4d\x24\x36\x68\x42\x93\xcd\x94\x62\x5a\x1f\x19\x49\
+\x54\xbd\xa9\x45\x33\x06\x7f\xdb\x57\x83\xca\x19\x14\x7f\xb3\x25\
+\x2a\xe6\x60\x29\x09\x14\xc9\xae\x6b\xe1\x83\x64\x1b\x56\x31\x66\
+\x19\x6e\xdc\xb8\xd1\x9b\x09\xc9\x7d\x2f\x02\x0c\x64\xf3\xe1\xf7\
+\x61\x84\xe6\x8e\xe5\x58\xb7\x66\xdf\xfd\xbd\x8f\x0f\xf8\x89\x9a\
+\x10\xc2\xa8\x87\xc7\x11\xf3\xe4\xa4\x6e\x5f\x1b\x42\x2e\xe4\xed\
+\x84\xe6\x75\x04\xb7\x07\x2e\x7d\xb8\x9d\xff\xbe\xc7\x17\xff\xd3\
+\x0b\xee\x58\x4e\x3e\xe1\xfd\xc5\xf7\x36\xe0\x63\x20\xab\xff\xcf\
+\xef\x93\x36\xec\x33\x7f\x5f\x53\x8e\xb1\xf8\x34\xe8\xfd\x25\xbc\
+\xb8\x61\x96\x37\xa7\x36\xe6\xe4\x5f\xc2\xbb\xe5\x64\xb6\xfe\xa1\
+\xc7\xff\x3f\x1e\x9f\x29\xce\x54\xe0\x9c\xcf\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0a\
+\x0c\xf7\x1b\xc7\
+\x00\x63\
+\x00\x6f\x00\x6e\x00\x66\x00\x69\x00\x67\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0c\x9c\xa6\x27\
+\x00\x71\
+\x00\x75\x00\x65\x00\x72\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x08\xab\xda\x07\
+\x00\x75\
+\x00\x70\x00\x64\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x02\
+\x00\x00\x00\x44\x00\x00\x00\x00\x00\x01\x00\x00\x24\x78\
+\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x97\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/dialogs/configdialog/images/config.png b/examples/dialogs/configdialog/images/config.png
new file mode 100644
index 0000000..38f40ec
Binary files /dev/null and b/examples/dialogs/configdialog/images/config.png differ
diff --git a/examples/dialogs/configdialog/images/query.png b/examples/dialogs/configdialog/images/query.png
new file mode 100644
index 0000000..d4b66d1
Binary files /dev/null and b/examples/dialogs/configdialog/images/query.png differ
diff --git a/examples/dialogs/configdialog/images/update.png b/examples/dialogs/configdialog/images/update.png
new file mode 100644
index 0000000..ea3f597
Binary files /dev/null and b/examples/dialogs/configdialog/images/update.png differ
diff --git a/examples/dialogs/extension.py b/examples/dialogs/extension.py
new file mode 100755
index 0000000..92c159d
--- /dev/null
+++ b/examples/dialogs/extension.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QDialog,
+        QDialogButtonBox, QGridLayout, QHBoxLayout, QLabel, QLayout, QLineEdit,
+        QPushButton, QVBoxLayout, QWidget)
+
+
+class FindDialog(QDialog):
+    def __init__(self, parent=None):
+        super(FindDialog, self).__init__(parent)
+
+        label = QLabel("Find &what:")
+        lineEdit = QLineEdit()
+        label.setBuddy(lineEdit)
+
+        caseCheckBox = QCheckBox("Match &case")
+        fromStartCheckBox = QCheckBox("Search from &start")
+        fromStartCheckBox.setChecked(True)
+
+        findButton = QPushButton("&Find")
+        findButton.setDefault(True)
+
+        moreButton = QPushButton("&More")
+        moreButton.setCheckable(True)
+        moreButton.setAutoDefault(False)
+
+        extension = QWidget()
+
+        wholeWordsCheckBox = QCheckBox("&Whole words")
+        backwardCheckBox = QCheckBox("Search &backward")
+        searchSelectionCheckBox = QCheckBox("Search se&lection")
+
+        buttonBox = QDialogButtonBox(Qt.Vertical)
+        buttonBox.addButton(findButton, QDialogButtonBox.ActionRole)
+        buttonBox.addButton(moreButton, QDialogButtonBox.ActionRole)
+
+        moreButton.toggled.connect(extension.setVisible)
+
+        extensionLayout = QVBoxLayout()
+        extensionLayout.setContentsMargins(0, 0, 0, 0)
+        extensionLayout.addWidget(wholeWordsCheckBox)
+        extensionLayout.addWidget(backwardCheckBox)
+        extensionLayout.addWidget(searchSelectionCheckBox)
+        extension.setLayout(extensionLayout)
+
+        topLeftLayout = QHBoxLayout()
+        topLeftLayout.addWidget(label)
+        topLeftLayout.addWidget(lineEdit)
+
+        leftLayout = QVBoxLayout()
+        leftLayout.addLayout(topLeftLayout)
+        leftLayout.addWidget(caseCheckBox)
+        leftLayout.addWidget(fromStartCheckBox)
+
+        mainLayout = QGridLayout()
+        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
+        mainLayout.addLayout(leftLayout, 0, 0)
+        mainLayout.addWidget(buttonBox, 0, 1)
+        mainLayout.addWidget(extension, 1, 0, 1, 2)
+        mainLayout.setRowStretch(2, 1)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Extension")
+        extension.hide()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    dialog = FindDialog()
+    dialog.show()
+    sys.exit(app.exec_())
diff --git a/examples/dialogs/findfiles.py b/examples/dialogs/findfiles.py
new file mode 100755
index 0000000..10b14a8
--- /dev/null
+++ b/examples/dialogs/findfiles.py
@@ -0,0 +1,215 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QDir, QIODevice, QFile, QFileInfo, Qt, QTextStream,
+        QUrl)
+from PyQt5.QtGui import QDesktopServices
+from PyQt5.QtWidgets import (QAbstractItemView, QApplication, QComboBox,
+        QDialog, QFileDialog, QGridLayout, QHBoxLayout, QHeaderView, QLabel,
+        QProgressDialog, QPushButton, QSizePolicy, QTableWidget,
+        QTableWidgetItem)
+
+
+class Window(QDialog):
+    def __init__(self, parent=None):
+        super(Window, self).__init__(parent)
+
+        browseButton = self.createButton("&Browse...", self.browse)
+        findButton = self.createButton("&Find", self.find)
+
+        self.fileComboBox = self.createComboBox("*")
+        self.textComboBox = self.createComboBox()
+        self.directoryComboBox = self.createComboBox(QDir.currentPath())
+
+        fileLabel = QLabel("Named:")
+        textLabel = QLabel("Containing text:")
+        directoryLabel = QLabel("In directory:")
+        self.filesFoundLabel = QLabel()
+
+        self.createFilesTable()
+
+        buttonsLayout = QHBoxLayout()
+        buttonsLayout.addStretch()
+        buttonsLayout.addWidget(findButton)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(fileLabel, 0, 0)
+        mainLayout.addWidget(self.fileComboBox, 0, 1, 1, 2)
+        mainLayout.addWidget(textLabel, 1, 0)
+        mainLayout.addWidget(self.textComboBox, 1, 1, 1, 2)
+        mainLayout.addWidget(directoryLabel, 2, 0)
+        mainLayout.addWidget(self.directoryComboBox, 2, 1)
+        mainLayout.addWidget(browseButton, 2, 2)
+        mainLayout.addWidget(self.filesTable, 3, 0, 1, 3)
+        mainLayout.addWidget(self.filesFoundLabel, 4, 0)
+        mainLayout.addLayout(buttonsLayout, 5, 0, 1, 3)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Find Files")
+        self.resize(700, 300)
+
+    def browse(self):
+        directory = QFileDialog.getExistingDirectory(self, "Find Files",
+                QDir.currentPath())
+
+        if directory:
+            if self.directoryComboBox.findText(directory) == -1:
+                self.directoryComboBox.addItem(directory)
+
+            self.directoryComboBox.setCurrentIndex(self.directoryComboBox.findText(directory))
+
+    @staticmethod
+    def updateComboBox(comboBox):
+        if comboBox.findText(comboBox.currentText()) == -1:
+            comboBox.addItem(comboBox.currentText())
+
+    def find(self):
+        self.filesTable.setRowCount(0)
+
+        fileName = self.fileComboBox.currentText()
+        text = self.textComboBox.currentText()
+        path = self.directoryComboBox.currentText()
+
+        self.updateComboBox(self.fileComboBox)
+        self.updateComboBox(self.textComboBox)
+        self.updateComboBox(self.directoryComboBox)
+
+        self.currentDir = QDir(path)
+        if not fileName:
+            fileName = "*"
+        files = self.currentDir.entryList([fileName],
+                QDir.Files | QDir.NoSymLinks)
+
+        if text:
+            files = self.findFiles(files, text)
+        self.showFiles(files)
+
+    def findFiles(self, files, text):
+        progressDialog = QProgressDialog(self)
+
+        progressDialog.setCancelButtonText("&Cancel")
+        progressDialog.setRange(0, files.count())
+        progressDialog.setWindowTitle("Find Files")
+
+        foundFiles = []
+
+        for i in range(files.count()):
+            progressDialog.setValue(i)
+            progressDialog.setLabelText("Searching file number %d of %d..." % (i, files.count()))
+            QApplication.processEvents()
+
+            if progressDialog.wasCanceled():
+                break
+
+            inFile = QFile(self.currentDir.absoluteFilePath(files[i]))
+
+            if inFile.open(QIODevice.ReadOnly):
+                stream = QTextStream(inFile)
+                while not stream.atEnd():
+                    if progressDialog.wasCanceled():
+                        break
+                    line = stream.readLine()
+                    if text in line:
+                        foundFiles.append(files[i])
+                        break
+
+        progressDialog.close()
+
+        return foundFiles
+
+    def showFiles(self, files):
+        for fn in files:
+            file = QFile(self.currentDir.absoluteFilePath(fn))
+            size = QFileInfo(file).size()
+
+            fileNameItem = QTableWidgetItem(fn)
+            fileNameItem.setFlags(fileNameItem.flags() ^ Qt.ItemIsEditable)
+            sizeItem = QTableWidgetItem("%d KB" % (int((size + 1023) / 1024)))
+            sizeItem.setTextAlignment(Qt.AlignVCenter | Qt.AlignRight)
+            sizeItem.setFlags(sizeItem.flags() ^ Qt.ItemIsEditable)
+
+            row = self.filesTable.rowCount()
+            self.filesTable.insertRow(row)
+            self.filesTable.setItem(row, 0, fileNameItem)
+            self.filesTable.setItem(row, 1, sizeItem)
+
+        self.filesFoundLabel.setText("%d file(s) found (Double click on a file to open it)" % len(files))
+
+    def createButton(self, text, member):
+        button = QPushButton(text)
+        button.clicked.connect(member)
+        return button
+
+    def createComboBox(self, text=""):
+        comboBox = QComboBox()
+        comboBox.setEditable(True)
+        comboBox.addItem(text)
+        comboBox.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
+        return comboBox
+
+    def createFilesTable(self):
+        self.filesTable = QTableWidget(0, 2)
+        self.filesTable.setSelectionBehavior(QAbstractItemView.SelectRows)
+
+        self.filesTable.setHorizontalHeaderLabels(("File Name", "Size"))
+        self.filesTable.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch)
+        self.filesTable.verticalHeader().hide()
+        self.filesTable.setShowGrid(False)
+
+        self.filesTable.cellActivated.connect(self.openFileOfItem)
+
+    def openFileOfItem(self, row, column):
+        item = self.filesTable.item(row, 0)
+
+        QDesktopServices.openUrl(QUrl(self.currentDir.absoluteFilePath(item.text())))
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/dialogs/standarddialogs.py b/examples/dialogs/standarddialogs.py
new file mode 100755
index 0000000..4055992
--- /dev/null
+++ b/examples/dialogs/standarddialogs.py
@@ -0,0 +1,322 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2010 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import QDir, Qt
+from PyQt5.QtGui import QFont, QPalette
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QColorDialog, QDialog,
+        QErrorMessage, QFileDialog, QFontDialog, QFrame, QGridLayout,
+        QInputDialog, QLabel, QLineEdit, QMessageBox, QPushButton)
+
+
+class Dialog(QDialog):
+    MESSAGE = "<p>Message boxes have a caption, a text, and up to three " \
+            "buttons, each with standard or custom texts.</p>" \
+            "<p>Click a button to close the message box. Pressing the Esc " \
+            "button will activate the detected escape button (if any).</p>"
+
+    def __init__(self, parent=None):
+        super(Dialog, self).__init__(parent)
+
+        self.openFilesPath = ''
+
+        self.errorMessageDialog = QErrorMessage(self)
+
+        frameStyle = QFrame.Sunken | QFrame.Panel
+
+        self.integerLabel = QLabel()
+        self.integerLabel.setFrameStyle(frameStyle)
+        self.integerButton = QPushButton("QInputDialog.get&Int()")
+
+        self.doubleLabel = QLabel()
+        self.doubleLabel.setFrameStyle(frameStyle)
+        self.doubleButton = QPushButton("QInputDialog.get&Double()")
+
+        self.itemLabel = QLabel()
+        self.itemLabel.setFrameStyle(frameStyle)
+        self.itemButton = QPushButton("QInputDialog.getIte&m()")
+
+        self.textLabel = QLabel()
+        self.textLabel.setFrameStyle(frameStyle)
+        self.textButton = QPushButton("QInputDialog.get&Text()")
+
+        self.colorLabel = QLabel()
+        self.colorLabel.setFrameStyle(frameStyle)
+        self.colorButton = QPushButton("QColorDialog.get&Color()")
+
+        self.fontLabel = QLabel()
+        self.fontLabel.setFrameStyle(frameStyle)
+        self.fontButton = QPushButton("QFontDialog.get&Font()")
+
+        self.directoryLabel = QLabel()
+        self.directoryLabel.setFrameStyle(frameStyle)
+        self.directoryButton = QPushButton("QFileDialog.getE&xistingDirectory()")
+
+        self.openFileNameLabel = QLabel()
+        self.openFileNameLabel.setFrameStyle(frameStyle)
+        self.openFileNameButton = QPushButton("QFileDialog.get&OpenFileName()")
+
+        self.openFileNamesLabel = QLabel()
+        self.openFileNamesLabel.setFrameStyle(frameStyle)
+        self.openFileNamesButton = QPushButton("QFileDialog.&getOpenFileNames()")
+
+        self.saveFileNameLabel = QLabel()
+        self.saveFileNameLabel.setFrameStyle(frameStyle)
+        self.saveFileNameButton = QPushButton("QFileDialog.get&SaveFileName()")
+
+        self.criticalLabel = QLabel()
+        self.criticalLabel.setFrameStyle(frameStyle)
+        self.criticalButton = QPushButton("QMessageBox.critica&l()")
+
+        self.informationLabel = QLabel()
+        self.informationLabel.setFrameStyle(frameStyle)
+        self.informationButton = QPushButton("QMessageBox.i&nformation()")
+
+        self.questionLabel = QLabel()
+        self.questionLabel.setFrameStyle(frameStyle)
+        self.questionButton = QPushButton("QMessageBox.&question()")
+
+        self.warningLabel = QLabel()
+        self.warningLabel.setFrameStyle(frameStyle)
+        self.warningButton = QPushButton("QMessageBox.&warning()")
+
+        self.errorLabel = QLabel()
+        self.errorLabel.setFrameStyle(frameStyle)
+        self.errorButton = QPushButton("QErrorMessage.show&M&essage()")
+
+        self.integerButton.clicked.connect(self.setInteger)
+        self.doubleButton.clicked.connect(self.setDouble)
+        self.itemButton.clicked.connect(self.setItem)
+        self.textButton.clicked.connect(self.setText)
+        self.colorButton.clicked.connect(self.setColor)
+        self.fontButton.clicked.connect(self.setFont)
+        self.directoryButton.clicked.connect(self.setExistingDirectory)
+        self.openFileNameButton.clicked.connect(self.setOpenFileName)
+        self.openFileNamesButton.clicked.connect(self.setOpenFileNames)
+        self.saveFileNameButton.clicked.connect(self.setSaveFileName)
+        self.criticalButton.clicked.connect(self.criticalMessage)
+        self.informationButton.clicked.connect(self.informationMessage)
+        self.questionButton.clicked.connect(self.questionMessage)
+        self.warningButton.clicked.connect(self.warningMessage)
+        self.errorButton.clicked.connect(self.errorMessage)
+
+        self.native = QCheckBox()
+        self.native.setText("Use native file dialog.")
+        self.native.setChecked(True)
+        if sys.platform not in ("win32", "darwin"):
+            self.native.hide()
+
+        layout = QGridLayout()
+        layout.setColumnStretch(1, 1)
+        layout.setColumnMinimumWidth(1, 250)
+        layout.addWidget(self.integerButton, 0, 0)
+        layout.addWidget(self.integerLabel, 0, 1)
+        layout.addWidget(self.doubleButton, 1, 0)
+        layout.addWidget(self.doubleLabel, 1, 1)
+        layout.addWidget(self.itemButton, 2, 0)
+        layout.addWidget(self.itemLabel, 2, 1)
+        layout.addWidget(self.textButton, 3, 0)
+        layout.addWidget(self.textLabel, 3, 1)
+        layout.addWidget(self.colorButton, 4, 0)
+        layout.addWidget(self.colorLabel, 4, 1)
+        layout.addWidget(self.fontButton, 5, 0)
+        layout.addWidget(self.fontLabel, 5, 1)
+        layout.addWidget(self.directoryButton, 6, 0)
+        layout.addWidget(self.directoryLabel, 6, 1)
+        layout.addWidget(self.openFileNameButton, 7, 0)
+        layout.addWidget(self.openFileNameLabel, 7, 1)
+        layout.addWidget(self.openFileNamesButton, 8, 0)
+        layout.addWidget(self.openFileNamesLabel, 8, 1)
+        layout.addWidget(self.saveFileNameButton, 9, 0)
+        layout.addWidget(self.saveFileNameLabel, 9, 1)
+        layout.addWidget(self.criticalButton, 10, 0)
+        layout.addWidget(self.criticalLabel, 10, 1)
+        layout.addWidget(self.informationButton, 11, 0)
+        layout.addWidget(self.informationLabel, 11, 1)
+        layout.addWidget(self.questionButton, 12, 0)
+        layout.addWidget(self.questionLabel, 12, 1)
+        layout.addWidget(self.warningButton, 13, 0)
+        layout.addWidget(self.warningLabel, 13, 1)
+        layout.addWidget(self.errorButton, 14, 0)
+        layout.addWidget(self.errorLabel, 14, 1)
+        layout.addWidget(self.native, 15, 0)
+        self.setLayout(layout)
+
+        self.setWindowTitle("Standard Dialogs")
+
+    def setInteger(self):    
+        i, ok = QInputDialog.getInt(self, "QInputDialog.getInt()",
+                "Percentage:", 25, 0, 100, 1)
+        if ok:
+            self.integerLabel.setText("%d%%" % i)
+
+    def setDouble(self):    
+        d, ok = QInputDialog.getDouble(self, "QInputDialog.getDouble()",
+                "Amount:", 37.56, -10000, 10000, 2)
+        if ok:
+            self.doubleLabel.setText("$%g" % d)
+
+    def setItem(self):    
+        items = ("Spring", "Summer", "Fall", "Winter")
+
+        item, ok = QInputDialog.getItem(self, "QInputDialog.getItem()",
+                "Season:", items, 0, False)
+        if ok and item:
+            self.itemLabel.setText(item)
+
+    def setText(self):
+        text, ok = QInputDialog.getText(self, "QInputDialog.getText()",
+                "User name:", QLineEdit.Normal, QDir.home().dirName())
+        if ok and text != '':
+            self.textLabel.setText(text)
+
+    def setColor(self):    
+        color = QColorDialog.getColor(Qt.green, self)
+        if color.isValid(): 
+            self.colorLabel.setText(color.name())
+            self.colorLabel.setPalette(QPalette(color))
+            self.colorLabel.setAutoFillBackground(True)
+
+    def setFont(self):    
+        font, ok = QFontDialog.getFont(QFont(self.fontLabel.text()), self)
+        if ok:
+            self.fontLabel.setText(font.key())
+            self.fontLabel.setFont(font)
+
+    def setExistingDirectory(self):    
+        options = QFileDialog.DontResolveSymlinks | QFileDialog.ShowDirsOnly
+        directory = QFileDialog.getExistingDirectory(self,
+                "QFileDialog.getExistingDirectory()",
+                self.directoryLabel.text(), options=options)
+        if directory:
+            self.directoryLabel.setText(directory)
+
+    def setOpenFileName(self):    
+        options = QFileDialog.Options()
+        if not self.native.isChecked():
+            options |= QFileDialog.DontUseNativeDialog
+        fileName, _ = QFileDialog.getOpenFileName(self,
+                "QFileDialog.getOpenFileName()", self.openFileNameLabel.text(),
+                "All Files (*);;Text Files (*.txt)", options=options)
+        if fileName:
+            self.openFileNameLabel.setText(fileName)
+
+    def setOpenFileNames(self):    
+        options = QFileDialog.Options()
+        if not self.native.isChecked():
+            options |= QFileDialog.DontUseNativeDialog
+        files, _ = QFileDialog.getOpenFileNames(self,
+                "QFileDialog.getOpenFileNames()", self.openFilesPath,
+                "All Files (*);;Text Files (*.txt)", options=options)
+        if files:
+            self.openFilesPath = files[0]
+            self.openFileNamesLabel.setText("[%s]" % ', '.join(files))
+
+    def setSaveFileName(self):    
+        options = QFileDialog.Options()
+        if not self.native.isChecked():
+            options |= QFileDialog.DontUseNativeDialog
+        fileName, _ = QFileDialog.getSaveFileName(self,
+                "QFileDialog.getSaveFileName()",
+                self.saveFileNameLabel.text(),
+                "All Files (*);;Text Files (*.txt)", options=options)
+        if fileName:
+            self.saveFileNameLabel.setText(fileName)
+
+    def criticalMessage(self):    
+        reply = QMessageBox.critical(self, "QMessageBox.critical()",
+                Dialog.MESSAGE,
+                QMessageBox.Abort | QMessageBox.Retry | QMessageBox.Ignore)
+        if reply == QMessageBox.Abort:
+            self.criticalLabel.setText("Abort")
+        elif reply == QMessageBox.Retry:
+            self.criticalLabel.setText("Retry")
+        else:
+            self.criticalLabel.setText("Ignore")
+
+    def informationMessage(self):    
+        reply = QMessageBox.information(self,
+                "QMessageBox.information()", Dialog.MESSAGE)
+        if reply == QMessageBox.Ok:
+            self.informationLabel.setText("OK")
+        else:
+            self.informationLabel.setText("Escape")
+
+    def questionMessage(self):    
+        reply = QMessageBox.question(self, "QMessageBox.question()",
+                Dialog.MESSAGE,
+                QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)
+        if reply == QMessageBox.Yes:
+            self.questionLabel.setText("Yes")
+        elif reply == QMessageBox.No:
+            self.questionLabel.setText("No")
+        else:
+            self.questionLabel.setText("Cancel")
+
+    def warningMessage(self):    
+        msgBox = QMessageBox(QMessageBox.Warning, "QMessageBox.warning()",
+                Dialog.MESSAGE, QMessageBox.NoButton, self)
+        msgBox.addButton("Save &Again", QMessageBox.AcceptRole)
+        msgBox.addButton("&Continue", QMessageBox.RejectRole)
+        if msgBox.exec_() == QMessageBox.AcceptRole:
+            self.warningLabel.setText("Save Again")
+        else:
+            self.warningLabel.setText("Continue")
+
+    def errorMessage(self):    
+        self.errorMessageDialog.showMessage("This dialog shows and remembers "
+                "error messages. If the checkbox is checked (as it is by "
+                "default), the shown message will be shown again, but if the "
+                "user unchecks the box the message will not appear again if "
+                "QErrorMessage.showMessage() is called with the same message.")
+        self.errorLabel.setText("If the box is unchecked, the message won't "
+                "appear again.")
+
+
+if __name__ == '__main__':
+    app = QApplication(sys.argv)
+    dialog = Dialog()
+    dialog.show()
+    sys.exit(app.exec_())
diff --git a/examples/dialogs/tabdialog.py b/examples/dialogs/tabdialog.py
new file mode 100755
index 0000000..86c41bb
--- /dev/null
+++ b/examples/dialogs/tabdialog.py
@@ -0,0 +1,205 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFileInfo
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QDialog,
+        QDialogButtonBox, QFrame, QGroupBox, QLabel, QLineEdit, QListWidget,
+        QTabWidget, QVBoxLayout, QWidget)
+
+
+class TabDialog(QDialog):
+    def __init__(self, fileName, parent=None):
+        super(TabDialog, self).__init__(parent)
+
+        fileInfo = QFileInfo(fileName)
+
+        tabWidget = QTabWidget()
+        tabWidget.addTab(GeneralTab(fileInfo), "General")
+        tabWidget.addTab(PermissionsTab(fileInfo), "Permissions")
+        tabWidget.addTab(ApplicationsTab(fileInfo), "Applications")
+
+        buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+
+        buttonBox.accepted.connect(self.accept)
+        buttonBox.rejected.connect(self.reject)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(tabWidget)
+        mainLayout.addWidget(buttonBox)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Tab Dialog")
+
+
+class GeneralTab(QWidget):
+    def __init__(self, fileInfo, parent=None):
+        super(GeneralTab, self).__init__(parent)
+
+        fileNameLabel = QLabel("File Name:")
+        fileNameEdit = QLineEdit(fileInfo.fileName())
+
+        pathLabel = QLabel("Path:")
+        pathValueLabel = QLabel(fileInfo.absoluteFilePath())
+        pathValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken)
+
+        sizeLabel = QLabel("Size:")
+        size = fileInfo.size() // 1024
+        sizeValueLabel = QLabel("%d K" % size)
+        sizeValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken)
+
+        lastReadLabel = QLabel("Last Read:")
+        lastReadValueLabel = QLabel(fileInfo.lastRead().toString())
+        lastReadValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken)
+
+        lastModLabel = QLabel("Last Modified:")
+        lastModValueLabel = QLabel(fileInfo.lastModified().toString())
+        lastModValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(fileNameLabel)
+        mainLayout.addWidget(fileNameEdit)
+        mainLayout.addWidget(pathLabel)
+        mainLayout.addWidget(pathValueLabel)
+        mainLayout.addWidget(sizeLabel)
+        mainLayout.addWidget(sizeValueLabel)
+        mainLayout.addWidget(lastReadLabel)
+        mainLayout.addWidget(lastReadValueLabel)
+        mainLayout.addWidget(lastModLabel)
+        mainLayout.addWidget(lastModValueLabel)
+        mainLayout.addStretch(1)
+        self.setLayout(mainLayout)
+
+
+class PermissionsTab(QWidget):
+    def __init__(self, fileInfo, parent=None):
+        super(PermissionsTab, self).__init__(parent)
+
+        permissionsGroup = QGroupBox("Permissions")
+
+        readable = QCheckBox("Readable")
+        if fileInfo.isReadable():
+            readable.setChecked(True)
+
+        writable = QCheckBox("Writable")
+        if fileInfo.isWritable():
+            writable.setChecked(True)
+
+        executable = QCheckBox("Executable")
+        if fileInfo.isExecutable():
+            executable.setChecked(True)
+
+        ownerGroup = QGroupBox("Ownership")
+
+        ownerLabel = QLabel("Owner")
+        ownerValueLabel = QLabel(fileInfo.owner())
+        ownerValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken)
+
+        groupLabel = QLabel("Group")
+        groupValueLabel = QLabel(fileInfo.group())
+        groupValueLabel.setFrameStyle(QFrame.Panel | QFrame.Sunken)
+
+        permissionsLayout = QVBoxLayout()
+        permissionsLayout.addWidget(readable)
+        permissionsLayout.addWidget(writable)
+        permissionsLayout.addWidget(executable)
+        permissionsGroup.setLayout(permissionsLayout)
+
+        ownerLayout = QVBoxLayout()
+        ownerLayout.addWidget(ownerLabel)
+        ownerLayout.addWidget(ownerValueLabel)
+        ownerLayout.addWidget(groupLabel)
+        ownerLayout.addWidget(groupValueLabel)
+        ownerGroup.setLayout(ownerLayout)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(permissionsGroup)
+        mainLayout.addWidget(ownerGroup)
+        mainLayout.addStretch(1)
+        self.setLayout(mainLayout)
+
+
+class ApplicationsTab(QWidget):
+    def __init__(self, fileInfo, parent=None):
+        super(ApplicationsTab, self).__init__(parent)
+
+        topLabel = QLabel("Open with:")
+
+        applicationsListBox = QListWidget()
+        applications = []
+
+        for i in range(1, 31):
+            applications.append("Application %d" % i)
+
+        applicationsListBox.insertItems(0, applications)
+
+        alwaysCheckBox = QCheckBox()
+
+        if fileInfo.suffix():
+            alwaysCheckBox = QCheckBox("Always use this application to open "
+                    "files with the extension '%s'" % fileInfo.suffix())
+        else:
+            alwaysCheckBox = QCheckBox("Always use this application to open "
+                    "this type of file")
+
+        layout = QVBoxLayout()
+        layout.addWidget(topLabel)
+        layout.addWidget(applicationsListBox)
+        layout.addWidget(alwaysCheckBox)
+        self.setLayout(layout)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    if len(sys.argv) >= 2:
+        fileName = sys.argv[1]
+    else:
+        fileName = "."
+
+    tabdialog = TabDialog(fileName)
+    tabdialog.show()
+    sys.exit(app.exec_())
diff --git a/examples/dialogs/trivialwizard.py b/examples/dialogs/trivialwizard.py
new file mode 100755
index 0000000..6e4436d
--- /dev/null
+++ b/examples/dialogs/trivialwizard.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtWidgets import (QApplication, QGridLayout, QLabel, QLineEdit,
+        QVBoxLayout, QWizard, QWizardPage)
+
+
+def createIntroPage():
+    page = QWizardPage()
+    page.setTitle("Introduction")
+
+    label = QLabel(
+            "This wizard will help you register your copy of Super Product "
+            "Two.")
+    label.setWordWrap(True)
+
+    layout = QVBoxLayout()
+    layout.addWidget(label)
+    page.setLayout(layout)
+
+    return page
+
+
+def createRegistrationPage():
+    page = QWizardPage()
+    page.setTitle("Registration")
+    page.setSubTitle("Please fill both fields.")
+
+    nameLabel = QLabel("Name:")
+    nameLineEdit = QLineEdit()
+
+    emailLabel = QLabel("Email address:")
+    emailLineEdit = QLineEdit()
+
+    layout = QGridLayout()
+    layout.addWidget(nameLabel, 0, 0)
+    layout.addWidget(nameLineEdit, 0, 1)
+    layout.addWidget(emailLabel, 1, 0)
+    layout.addWidget(emailLineEdit, 1, 1)
+    page.setLayout(layout)
+
+    return page
+
+
+def createConclusionPage():
+    page = QWizardPage()
+    page.setTitle("Conclusion")
+
+    label = QLabel("You are now successfully registered. Have a nice day!")
+    label.setWordWrap(True)
+
+    layout = QVBoxLayout()
+    layout.addWidget(label)
+    page.setLayout(layout)
+
+    return page
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    wizard = QWizard()
+    wizard.addPage(createIntroPage())
+    wizard.addPage(createRegistrationPage())
+    wizard.addPage(createConclusionPage())
+
+    wizard.setWindowTitle("Trivial Wizard")
+    wizard.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/draganddrop/README b/examples/draganddrop/README
new file mode 100644
index 0000000..4ea75cd
--- /dev/null
+++ b/examples/draganddrop/README
@@ -0,0 +1,26 @@
+PyQt supports native drag and drop on all platforms via an extensible
+MIME-based system that enables applications to send data to each other in the
+most appropriate formats.
+
+Drag and drop can also be implemented for internal use by applications.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/draganddrop/delayedencoding/delayedencoding.py b/examples/draganddrop/delayedencoding/delayedencoding.py
new file mode 100755
index 0000000..c8ae257
--- /dev/null
+++ b/examples/draganddrop/delayedencoding/delayedencoding.py
@@ -0,0 +1,136 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (pyqtSignal, QBuffer, QByteArray, QFile, QIODevice,
+        QMimeData, Qt)
+from PyQt5.QtGui import QDrag, QIcon, QImage, QPainter, QPixmap
+from PyQt5.QtWidgets import (QApplication, QGridLayout, QLabel, QPushButton,
+        QScrollArea, QWidget)
+from PyQt5.QtSvg import QSvgWidget
+
+import delayedencoding_rc
+
+
+class MimeData(QMimeData):
+
+    dataRequested = pyqtSignal(str)
+
+    def formats(self):
+        formats = QMimeData.formats(self)
+        formats.append('image/png')
+
+        return formats
+
+    def retrieveData(self, mimeType, qvtype):
+        self.dataRequested.emit(mimeType)
+
+        return QMimeData.retrieveData(self, mimeType, qvtype)
+
+
+class SourceWidget(QWidget):
+    def __init__(self, parent=None):
+        super(SourceWidget, self).__init__(parent)
+
+        self.mimeData = None
+
+        imageFile = QFile(':/images/example.svg')
+        imageFile.open(QIODevice.ReadOnly)
+        self.imageData = imageFile.readAll()
+        imageFile.close()
+
+        imageArea = QScrollArea()
+        self.imageLabel = QSvgWidget()
+        self.imageLabel.renderer().load(self.imageData)
+        imageArea.setWidget(self.imageLabel)
+
+        instructTopLabel = QLabel("This is an SVG drawing:")
+        instructBottomLabel = QLabel("Drag the icon to copy the drawing as a PNG file:")
+        dragIcon = QPushButton("Export")
+        dragIcon.setIcon(QIcon(':/images/drag.png'))
+        dragIcon.pressed.connect(self.startDrag)
+
+        layout = QGridLayout()
+        layout.addWidget(instructTopLabel, 0, 0, 1, 2)
+        layout.addWidget(imageArea, 1, 0, 2, 2)
+        layout.addWidget(instructBottomLabel, 3, 0)
+        layout.addWidget(dragIcon, 3, 1)
+        self.setLayout(layout)
+        self.setWindowTitle("Delayed Encoding")
+
+    def createData(self, mimeType):
+        if mimeType != 'image/png':
+            return
+
+        image = QImage(self.imageLabel.size(), QImage.Format_RGB32)
+        painter = QPainter()
+        painter.begin(image)
+        self.imageLabel.renderer().render(painter)
+        painter.end()
+
+        data = QByteArray()
+        buffer = QBuffer(data)
+        buffer.open(QIODevice.WriteOnly)
+        image.save(buffer, 'PNG')
+        buffer.close()
+        self.mimeData.setData('image/png', data)
+
+    def startDrag(self):
+        self.mimeData = MimeData()
+        self.mimeData.dataRequested.connect(self.createData, Qt.DirectConnection)
+
+        drag = QDrag(self)
+        drag.setMimeData(self.mimeData)
+        drag.setPixmap(QPixmap(':/images/drag.png'))
+        drag.exec_(Qt.CopyAction)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = SourceWidget()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/draganddrop/delayedencoding/delayedencoding.qrc b/examples/draganddrop/delayedencoding/delayedencoding.qrc
new file mode 100644
index 0000000..374f211
--- /dev/null
+++ b/examples/draganddrop/delayedencoding/delayedencoding.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="">
+   <file>images/drag.png</file>
+   <file>images/example.svg</file>
+</qresource>
+</RCC>
diff --git a/examples/draganddrop/delayedencoding/delayedencoding_rc.py b/examples/draganddrop/delayedencoding/delayedencoding_rc.py
new file mode 100644
index 0000000..6424a9e
--- /dev/null
+++ b/examples/draganddrop/delayedencoding/delayedencoding_rc.py
@@ -0,0 +1,278 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sat May 4 16:44:22 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x03\xd1\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x03\x63\x49\x44\x41\x54\x58\xc3\xc5\
+\x97\xcd\x6f\x1b\x55\x14\xc5\x7f\x77\x66\x92\x89\xd3\x7c\xd4\xad\
+\x17\x09\x20\xd2\x4d\x55\x51\x10\x08\x51\x84\xca\x0a\x09\xd8\x20\
+\xc4\xa2\x52\x17\x2c\x2a\x24\x28\x6b\x36\x2c\x90\xfa\x1f\xc0\x82\
+\x0d\xa8\x3b\x04\x2c\xd8\x82\x10\xaa\xda\x45\x05\x64\x07\x08\x04\
+\xa1\x34\x40\x85\x11\x6e\x21\xb5\x13\x9c\xe6\xc3\xb5\xd3\x79\xef\
+\x5d\x16\xf3\xec\x8c\x9d\xc4\xa6\xf5\x54\x1d\xe9\x4a\x1e\x69\x3c\
+\xe7\xdc\x73\xce\xbb\xef\x8d\xa8\x2a\xf7\xf2\x0a\xb8\xc7\x57\xf4\
+\x7f\x1e\x7a\xff\x35\x79\xf2\xe6\x16\x91\x55\xa4\x30\xca\x13\xc6\
+\x12\xaa\x22\x00\x51\xc0\x4c\x18\x30\xeb\x94\xc0\x3a\x1a\xd5\x35\
+\x3e\x7b\xfb\x73\xe6\x81\xa6\xaa\xba\x41\xef\x96\x41\x16\x9c\x7d\
+\x5d\xce\x3c\xf8\xc8\x0b\xaf\x3a\xa7\xa1\xaa\x06\x0f\x1c\x7d\x76\
+\xdc\x39\x15\x54\x05\x60\xaa\x34\x17\x8d\x17\xef\x1f\x09\xc2\x82\
+\x98\xad\x86\x7e\xf1\xde\x89\xea\x77\x8b\xff\xbe\xfb\xe1\x57\x7c\
+\x02\xd4\x55\xd5\xf6\x05\x50\xd5\xbe\x75\xf6\x34\x3f\xaa\xaa\xaa\
+\x3a\x5f\xb6\xab\x9c\x5a\x6d\xb5\x6e\x6a\xb5\xba\xa4\xc6\x18\xbd\
+\xb2\xf0\x75\xf2\xe6\x8b\x7c\xfb\xfc\xa3\xbc\x02\x14\xdb\x4d\xee\
+\x55\x03\x33\xe0\x94\x10\x2c\x60\x7c\x39\xd2\xfb\xb4\x04\x8b\x31\
+\xb7\x58\x5e\xae\x11\x86\x21\x87\x1e\x7a\x3a\x3a\xf9\xc6\x07\x8f\
+\x1d\x9e\xe1\xe5\x97\x8e\xf1\x1c\x30\x21\x22\x72\xc7\x21\x4c\xbd\
+\xd6\x2e\xd0\xb4\x1c\xe0\x50\x2c\xaa\x09\xcd\x66\x23\x0d\x55\x14\
+\xf1\xf0\xf1\x93\xa3\xa7\xdf\xfa\xf8\x99\xb9\x12\xa7\x80\x43\x40\
+\x61\xc8\x55\x90\x02\x81\x45\x31\x9e\x40\x02\x18\xc4\x93\xc9\xe6\
+\x6d\xdf\xbe\x09\x8e\x3c\x75\x22\x2e\x4d\x72\x1c\x38\x0a\x4c\x0e\
+\xb5\x0a\x14\x87\x60\xd2\xd4\x6e\xe7\x97\x54\x19\x08\x02\xc5\x98\
+\x16\x17\x2f\x5e\x60\x6d\x6d\x83\x20\x80\xfd\xfb\x8b\x68\x54\x8c\
+\x61\x75\x0e\x98\x00\xaa\x77\xac\x80\x64\x2c\xd0\x4e\x1e\x12\xda\
+\xd9\x18\x1d\x15\x66\x66\x0f\xd2\x6c\xd6\xd9\xdc\xac\x61\xcc\x26\
+\x85\xc2\x08\xad\xe6\x2a\x5e\xfe\x68\x48\x05\xac\x57\x40\x3b\x7d\
+\x4b\x46\x85\x20\x54\xee\x9b\x2d\x31\x35\xf9\x38\xc6\x18\xa2\x28\
+\x22\x8e\x0f\x70\x7e\x04\xcd\x65\x10\x09\xce\x77\x4c\xc6\x06\x45\
+\x11\x04\x25\x10\x21\x8e\x85\x38\xce\x5a\x3d\x46\x18\x74\xa4\xd3\
+\x1c\x32\x90\xf8\xb7\xa4\xa0\xda\x87\x6e\x4a\xce\xe5\x37\x8a\xdb\
+\x5e\xb7\x3b\x6f\x83\x48\x4f\x2c\xb7\x1b\x15\xff\x9f\x9c\x08\x08\
+\x0e\xcd\x58\xd0\x26\xa1\x3b\xd6\xc3\x36\x1d\xc9\x57\x81\xd4\x82\
+\xfe\x24\x7b\xe9\xe5\x48\x40\xfd\xe0\x91\x2e\x03\xba\x41\xe9\x49\
+\x9a\xe6\x69\x41\x56\x01\xd9\xa5\x63\x7a\x08\xe5\xae\x40\x9a\x01\
+\xd3\xe9\x51\x76\x89\x1c\x3e\x96\xd2\x09\xa7\xcd\xdf\x82\xde\x5e\
+\xa5\x13\xc6\x14\x7a\xfb\x79\xbd\x1b\x0a\x24\x3b\xe4\xee\xf6\x5c\
+\xbb\x16\x67\xce\x0a\xec\x9c\x84\xba\xeb\x73\xd9\xdd\x43\xf3\x1f\
+\x44\x83\x62\xd7\xfd\xfb\x2e\x0c\xa2\xac\xf3\xfd\x94\x68\x0f\xec\
+\x5c\x97\x61\xba\x15\x0f\x3a\xe1\xc7\xc0\x38\x50\x64\x6d\x25\x70\
+\x1b\x4d\x5a\xb9\x6d\x46\x3b\x2d\x80\xf4\x48\x39\x86\x30\x8d\x52\
+\xa4\x56\x59\xb1\x95\xc5\xcb\xf6\xa7\x2f\x3f\x4a\xae\x2c\xfe\xd0\
+\xb8\x74\x95\x3f\x80\x55\x60\x6b\x48\x05\xd4\x1f\x40\x15\x25\x04\
+\x0a\x08\x53\x28\x07\xa8\x55\x56\xed\xc2\xfc\xb9\xe4\xd7\x6f\x3e\
+\x35\xe5\x72\x79\xfd\xef\x3a\xcb\xdf\xff\xc9\x6f\xe5\x2a\x65\xe0\
+\x1a\x70\x19\x58\x1f\x32\x03\xa0\x8c\xa1\x4c\x03\x07\x3d\xe8\x85\
+\x0e\xe8\x2f\xd7\xa8\x5c\xaa\xf0\xfb\xd2\x0d\xfe\x02\x6a\xc0\x12\
+\xf0\x8f\x3f\x86\xd5\x81\xcd\x21\x15\x38\x42\xad\xb2\x6c\x17\xe6\
+\xcf\xef\x05\x7a\x1d\xb8\xea\x41\xeb\xc0\x86\x07\xdd\xd2\x01\x5f\
+\x3e\x03\x09\xac\x37\x39\xf7\xce\xa9\xc2\xf4\xf5\x1b\xd8\x9f\x2b\
+\x2c\xed\x01\xba\xe2\x65\x6e\x00\x89\xde\xc6\x17\xef\xc0\x4f\x33\
+\x11\x29\x01\xc7\x80\xc3\xc0\x2d\x0f\x38\x14\xe8\xed\x12\x18\x01\
+\xa6\xfd\xd1\xda\x7a\x69\x87\x02\xcd\x5e\xff\x01\xf9\x68\x10\x8e\
+\x11\x57\x76\x24\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x0a\x81\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
+\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\
+\x74\x20\x28\x43\x29\x20\x32\x30\x31\x30\x20\x4e\x6f\x6b\x69\x61\
+\x20\x43\x6f\x72\x70\x6f\x72\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\
+\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\x64\x69\x61\
+\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\x41\x6c\x6c\
+\x20\x72\x69\x67\x68\x74\x73\x20\x72\x65\x73\x65\x72\x76\x65\x64\
+\x2e\x0a\x2a\x2a\x20\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x4e\x6f\
+\x6b\x69\x61\x20\x43\x6f\x72\x70\x6f\x72\x61\x74\x69\x6f\x6e\x20\
+\x28\x71\x74\x2d\x69\x6e\x66\x6f\x40\x6e\x6f\x6b\x69\x61\x2e\x63\
+\x6f\x6d\x29\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\x68\x69\x73\x20\x66\
+\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\x20\x6f\x66\x20\x74\
+\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\x20\x6f\x66\x20\x74\
+\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\x69\x74\x2e\x0a\x2a\
+\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\x47\x49\x4e\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x3a\x4c\x47\x50\x4c\x24\x0a\x2a\x2a\x20\
+\x43\x6f\x6d\x6d\x65\x72\x63\x69\x61\x6c\x20\x55\x73\x61\x67\x65\
+\x0a\x2a\x2a\x20\x4c\x69\x63\x65\x6e\x73\x65\x65\x73\x20\x68\x6f\
+\x6c\x64\x69\x6e\x67\x20\x76\x61\x6c\x69\x64\x20\x51\x74\x20\x43\
+\x6f\x6d\x6d\x65\x72\x63\x69\x61\x6c\x20\x6c\x69\x63\x65\x6e\x73\
+\x65\x73\x20\x6d\x61\x79\x20\x75\x73\x65\x20\x74\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x69\x6e\x0a\x2a\x2a\x20\x61\x63\x63\x6f\x72\
+\x64\x61\x6e\x63\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x51\
+\x74\x20\x43\x6f\x6d\x6d\x65\x72\x63\x69\x61\x6c\x20\x4c\x69\x63\
+\x65\x6e\x73\x65\x20\x41\x67\x72\x65\x65\x6d\x65\x6e\x74\x20\x70\
+\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\
+\x0a\x2a\x2a\x20\x53\x6f\x66\x74\x77\x61\x72\x65\x20\x6f\x72\x2c\
+\x20\x61\x6c\x74\x65\x72\x6e\x61\x74\x69\x76\x65\x6c\x79\x2c\x20\
+\x69\x6e\x20\x61\x63\x63\x6f\x72\x64\x61\x6e\x63\x65\x20\x77\x69\
+\x74\x68\x20\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x63\x6f\x6e\
+\x74\x61\x69\x6e\x65\x64\x20\x69\x6e\x0a\x2a\x2a\x20\x61\x20\x77\
+\x72\x69\x74\x74\x65\x6e\x20\x61\x67\x72\x65\x65\x6d\x65\x6e\x74\
+\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x79\x6f\x75\x20\x61\x6e\x64\
+\x20\x4e\x6f\x6b\x69\x61\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x47\x4e\
+\x55\x20\x4c\x65\x73\x73\x65\x72\x20\x47\x65\x6e\x65\x72\x61\x6c\
+\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\x20\
+\x55\x73\x61\x67\x65\x0a\x2a\x2a\x20\x41\x6c\x74\x65\x72\x6e\x61\
+\x74\x69\x76\x65\x6c\x79\x2c\x20\x74\x68\x69\x73\x20\x66\x69\x6c\
+\x65\x20\x6d\x61\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x75\x6e\
+\x64\x65\x72\x20\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\
+\x20\x74\x68\x65\x20\x47\x4e\x55\x20\x4c\x65\x73\x73\x65\x72\x0a\
+\x2a\x2a\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\x75\x62\x6c\x69\
+\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\x20\x76\x65\x72\x73\x69\x6f\
+\x6e\x20\x32\x2e\x31\x20\x61\x73\x20\x70\x75\x62\x6c\x69\x73\x68\
+\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x46\x72\x65\x65\x20\x53\
+\x6f\x66\x74\x77\x61\x72\x65\x0a\x2a\x2a\x20\x46\x6f\x75\x6e\x64\
+\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x20\x61\x70\x70\x65\x61\x72\
+\x69\x6e\x67\x20\x69\x6e\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x20\
+\x4c\x49\x43\x45\x4e\x53\x45\x2e\x4c\x47\x50\x4c\x20\x69\x6e\x63\
+\x6c\x75\x64\x65\x64\x20\x69\x6e\x20\x74\x68\x65\x0a\x2a\x2a\x20\
+\x70\x61\x63\x6b\x61\x67\x69\x6e\x67\x20\x6f\x66\x20\x74\x68\x69\
+\x73\x20\x66\x69\x6c\x65\x2e\x20\x20\x50\x6c\x65\x61\x73\x65\x20\
+\x72\x65\x76\x69\x65\x77\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\
+\x77\x69\x6e\x67\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\
+\x20\x74\x6f\x0a\x2a\x2a\x20\x65\x6e\x73\x75\x72\x65\x20\x74\x68\
+\x65\x20\x47\x4e\x55\x20\x4c\x65\x73\x73\x65\x72\x20\x47\x65\x6e\
+\x65\x72\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\
+\x6e\x73\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x32\x2e\x31\x20\
+\x72\x65\x71\x75\x69\x72\x65\x6d\x65\x6e\x74\x73\x0a\x2a\x2a\x20\
+\x77\x69\x6c\x6c\x20\x62\x65\x20\x6d\x65\x74\x3a\x20\x68\x74\x74\
+\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x67\x6e\x75\x2e\x6f\x72\x67\x2f\
+\x6c\x69\x63\x65\x6e\x73\x65\x73\x2f\x6f\x6c\x64\x2d\x6c\x69\x63\
+\x65\x6e\x73\x65\x73\x2f\x6c\x67\x70\x6c\x2d\x32\x2e\x31\x2e\x68\
+\x74\x6d\x6c\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x49\x6e\x20\x61\x64\
+\x64\x69\x74\x69\x6f\x6e\x2c\x20\x61\x73\x20\x61\x20\x73\x70\x65\
+\x63\x69\x61\x6c\x20\x65\x78\x63\x65\x70\x74\x69\x6f\x6e\x2c\x20\
+\x4e\x6f\x6b\x69\x61\x20\x67\x69\x76\x65\x73\x20\x79\x6f\x75\x20\
+\x63\x65\x72\x74\x61\x69\x6e\x20\x61\x64\x64\x69\x74\x69\x6f\x6e\
+\x61\x6c\x0a\x2a\x2a\x20\x72\x69\x67\x68\x74\x73\x2e\x20\x20\x54\
+\x68\x65\x73\x65\x20\x72\x69\x67\x68\x74\x73\x20\x61\x72\x65\x20\
+\x64\x65\x73\x63\x72\x69\x62\x65\x64\x20\x69\x6e\x20\x74\x68\x65\
+\x20\x4e\x6f\x6b\x69\x61\x20\x51\x74\x20\x4c\x47\x50\x4c\x20\x45\
+\x78\x63\x65\x70\x74\x69\x6f\x6e\x0a\x2a\x2a\x20\x76\x65\x72\x73\
+\x69\x6f\x6e\x20\x31\x2e\x31\x2c\x20\x69\x6e\x63\x6c\x75\x64\x65\
+\x64\x20\x69\x6e\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x20\x4c\x47\
+\x50\x4c\x5f\x45\x58\x43\x45\x50\x54\x49\x4f\x4e\x2e\x74\x78\x74\
+\x20\x69\x6e\x20\x74\x68\x69\x73\x20\x70\x61\x63\x6b\x61\x67\x65\
+\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x47\x4e\x55\x20\x47\x65\x6e\x65\
+\x72\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\
+\x73\x65\x20\x55\x73\x61\x67\x65\x0a\x2a\x2a\x20\x41\x6c\x74\x65\
+\x72\x6e\x61\x74\x69\x76\x65\x6c\x79\x2c\x20\x74\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x6d\x61\x79\x20\x62\x65\x20\x75\x73\x65\x64\
+\x20\x75\x6e\x64\x65\x72\x20\x74\x68\x65\x20\x74\x65\x72\x6d\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x47\x4e\x55\x0a\x2a\x2a\x20\x47\
+\x65\x6e\x65\x72\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\
+\x63\x65\x6e\x73\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x33\x2e\
+\x30\x20\x61\x73\x20\x70\x75\x62\x6c\x69\x73\x68\x65\x64\x20\x62\
+\x79\x20\x74\x68\x65\x20\x46\x72\x65\x65\x20\x53\x6f\x66\x74\x77\
+\x61\x72\x65\x0a\x2a\x2a\x20\x46\x6f\x75\x6e\x64\x61\x74\x69\x6f\
+\x6e\x20\x61\x6e\x64\x20\x61\x70\x70\x65\x61\x72\x69\x6e\x67\x20\
+\x69\x6e\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x20\x4c\x49\x43\x45\
+\x4e\x53\x45\x2e\x47\x50\x4c\x20\x69\x6e\x63\x6c\x75\x64\x65\x64\
+\x20\x69\x6e\x20\x74\x68\x65\x0a\x2a\x2a\x20\x70\x61\x63\x6b\x61\
+\x67\x69\x6e\x67\x20\x6f\x66\x20\x74\x68\x69\x73\x20\x66\x69\x6c\
+\x65\x2e\x20\x20\x50\x6c\x65\x61\x73\x65\x20\x72\x65\x76\x69\x65\
+\x77\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\
+\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x20\x74\x6f\x0a\x2a\
+\x2a\x20\x65\x6e\x73\x75\x72\x65\x20\x74\x68\x65\x20\x47\x4e\x55\
+\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\
+\x4c\x69\x63\x65\x6e\x73\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\
+\x33\x2e\x30\x20\x72\x65\x71\x75\x69\x72\x65\x6d\x65\x6e\x74\x73\
+\x20\x77\x69\x6c\x6c\x20\x62\x65\x0a\x2a\x2a\x20\x6d\x65\x74\x3a\
+\x20\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x67\x6e\x75\x2e\
+\x6f\x72\x67\x2f\x63\x6f\x70\x79\x6c\x65\x66\x74\x2f\x67\x70\x6c\
+\x2e\x68\x74\x6d\x6c\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x49\x66\x20\
+\x79\x6f\x75\x20\x68\x61\x76\x65\x20\x71\x75\x65\x73\x74\x69\x6f\
+\x6e\x73\x20\x72\x65\x67\x61\x72\x64\x69\x6e\x67\x20\x74\x68\x65\
+\x20\x75\x73\x65\x20\x6f\x66\x20\x74\x68\x69\x73\x20\x66\x69\x6c\
+\x65\x2c\x20\x70\x6c\x65\x61\x73\x65\x20\x63\x6f\x6e\x74\x61\x63\
+\x74\x0a\x2a\x2a\x20\x4e\x6f\x6b\x69\x61\x20\x61\x74\x20\x71\x74\
+\x2d\x69\x6e\x66\x6f\x40\x6e\x6f\x6b\x69\x61\x2e\x63\x6f\x6d\x2e\
+\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\x49\x43\x45\
+\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\
+\x22\x38\x63\x6d\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x38\x63\
+\x6d\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\
+\x34\x30\x30\x20\x34\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x78\x6d\
+\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\
+\x20\x62\x61\x73\x65\x50\x72\x6f\x66\x69\x6c\x65\x3d\x22\x74\x69\
+\x6e\x79\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\
+\x22\x3e\x0a\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x53\x70\x68\x65\
+\x72\x65\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x3c\x64\x65\
+\x73\x63\x3e\x41\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x20\x66\x69\
+\x6c\x6c\x65\x64\x20\x73\x70\x68\x65\x72\x65\x2e\x3c\x2f\x64\x65\
+\x73\x63\x3e\x0a\x20\x20\x3c\x67\x3e\x0a\x20\x20\x20\x20\x3c\x64\
+\x65\x66\x73\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x72\x61\x64\x69\
+\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x69\x64\x3d\x22\x62\
+\x6c\x75\x65\x53\x70\x68\x65\x72\x65\x22\x20\x67\x72\x61\x64\x69\
+\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\
+\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x78\x3d\x22\x32\x30\x30\x22\x20\x63\x79\x3d\x22\x32\x30\x30\
+\x22\x20\x72\x3d\x22\x31\x30\x30\x22\x20\x66\x78\x3d\x22\x31\x35\
+\x30\x22\x20\x66\x79\x3d\x22\x31\x35\x30\x22\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\
+\x74\x3d\x22\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\
+\x72\x3d\x22\x77\x68\x69\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\
+\x74\x3d\x22\x37\x35\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\x6c\
+\x6f\x72\x3d\x22\x62\x6c\x75\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x20\x6f\x66\x66\x73\x65\
+\x74\x3d\x22\x31\x30\x30\x25\x22\x20\x73\x74\x6f\x70\x2d\x63\x6f\
+\x6c\x6f\x72\x3d\x22\x62\x6c\x61\x63\x6b\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x3c\x2f\x72\x61\x64\x69\x61\x6c\x47\x72\x61\
+\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x64\x65\x66\
+\x73\x3e\x0a\x20\x20\x20\x20\x3c\x72\x65\x63\x74\x20\x66\x69\x6c\
+\x6c\x3d\x22\x6c\x69\x67\x68\x74\x62\x6c\x75\x65\x22\x20\x78\x3d\
+\x22\x30\x22\x20\x79\x3d\x22\x30\x22\x20\x77\x69\x64\x74\x68\x3d\
+\x22\x34\x30\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x34\x30\
+\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x63\x69\x72\x63\x6c\
+\x65\x20\x66\x69\x6c\x6c\x3d\x22\x75\x72\x6c\x28\x23\x62\x6c\x75\
+\x65\x53\x70\x68\x65\x72\x65\x29\x22\x20\x73\x74\x72\x6f\x6b\x65\
+\x3d\x22\x62\x6c\x61\x63\x6b\x22\x20\x73\x74\x72\x6f\x6b\x65\x2d\
+\x77\x69\x64\x74\x68\x3d\x22\x32\x22\x20\x20\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x32\x30\x30\x22\x20\x63\
+\x79\x3d\x22\x32\x30\x30\x22\x20\x72\x3d\x22\x31\x30\x30\x22\x2f\
+\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x08\
+\x08\x7a\x5a\x27\
+\x00\x64\
+\x00\x72\x00\x61\x00\x67\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x08\x01\x8a\x47\
+\x00\x65\
+\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\
+\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x03\xd5\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/draganddrop/delayedencoding/images/drag.png b/examples/draganddrop/delayedencoding/images/drag.png
new file mode 100644
index 0000000..dd795cf
Binary files /dev/null and b/examples/draganddrop/delayedencoding/images/drag.png differ
diff --git a/examples/draganddrop/delayedencoding/images/example.svg b/examples/draganddrop/delayedencoding/images/example.svg
new file mode 100644
index 0000000..8bc147d
--- /dev/null
+++ b/examples/draganddrop/delayedencoding/images/example.svg
@@ -0,0 +1,59 @@
+<?xml version="1.0" standalone="no"?>
+<!-- ***********************************************************************
+**
+** Copyright (C) 2010 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$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info at nokia.com.
+** $QT_END_LICENSE$
+**
+************************************************************************ -->
+<svg width="8cm" height="8cm" viewBox="0 0 400 400"
+     xmlns="http://www.w3.org/2000/svg" baseProfile="tiny" version="1.1">
+  <title>Sphere</title>
+  <desc>A gradient filled sphere.</desc>
+  <g>
+    <defs>
+      <radialGradient id="blueSphere" gradientUnits="userSpaceOnUse"
+                      cx="200" cy="200" r="100" fx="150" fy="150">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="blue" />
+        <stop offset="100%" stop-color="black" />
+      </radialGradient>
+    </defs>
+    <rect fill="lightblue" x="0" y="0" width="400" height="400" />
+    <circle fill="url(#blueSphere)" stroke="black" stroke-width="2"  
+          cx="200" cy="200" r="100"/>
+  </g>
+</svg>
diff --git a/examples/draganddrop/draggableicons/draggableicons.py b/examples/draganddrop/draggableicons/draggableicons.py
new file mode 100755
index 0000000..9e9674d
--- /dev/null
+++ b/examples/draganddrop/draggableicons/draggableicons.py
@@ -0,0 +1,163 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QByteArray, QDataStream, QIODevice, QMimeData,
+        QPoint, Qt)
+from PyQt5.QtGui import QColor, QDrag, QPainter, QPixmap
+from PyQt5.QtWidgets import QApplication, QFrame, QHBoxLayout, QLabel, QWidget
+
+import draggableicons_rc
+
+
+class DragWidget(QFrame):
+    def __init__(self, parent=None):
+        super(DragWidget, self).__init__(parent)
+
+        self.setMinimumSize(200, 200)
+        self.setFrameStyle(QFrame.Sunken | QFrame.StyledPanel)
+        self.setAcceptDrops(True)
+
+        boatIcon = QLabel(self)
+        boatIcon.setPixmap(QPixmap(':/images/boat.png'))
+        boatIcon.move(20, 20)
+        boatIcon.show()
+        boatIcon.setAttribute(Qt.WA_DeleteOnClose)
+
+        carIcon = QLabel(self)
+        carIcon.setPixmap(QPixmap(':/images/car.png'))
+        carIcon.move(120, 20)
+        carIcon.show()
+        carIcon.setAttribute(Qt.WA_DeleteOnClose)
+
+        houseIcon = QLabel(self)
+        houseIcon.setPixmap(QPixmap(':/images/house.png'))
+        houseIcon.move(20, 120)
+        houseIcon.show()
+        houseIcon.setAttribute(Qt.WA_DeleteOnClose)
+
+    def dragEnterEvent(self, event):
+        if event.mimeData().hasFormat('application/x-dnditemdata'):
+            if event.source() == self:
+                event.setDropAction(Qt.MoveAction)
+                event.accept()
+            else:
+                event.acceptProposedAction()
+        else:
+            event.ignore()
+
+    dragMoveEvent = dragEnterEvent
+
+    def dropEvent(self, event):
+        if event.mimeData().hasFormat('application/x-dnditemdata'):
+            itemData = event.mimeData().data('application/x-dnditemdata')
+            dataStream = QDataStream(itemData, QIODevice.ReadOnly)
+
+            pixmap = QPixmap()
+            offset = QPoint()
+            dataStream >> pixmap >> offset
+
+            newIcon = QLabel(self)
+            newIcon.setPixmap(pixmap)
+            newIcon.move(event.pos() - offset)
+            newIcon.show()
+            newIcon.setAttribute(Qt.WA_DeleteOnClose)
+
+            if event.source() == self:
+                event.setDropAction(Qt.MoveAction)
+                event.accept()
+            else:
+                event.acceptProposedAction()
+        else:
+            event.ignore()
+
+    def mousePressEvent(self, event):
+        child = self.childAt(event.pos())
+        if not child:
+            return
+
+        pixmap = QPixmap(child.pixmap())
+
+        itemData = QByteArray()
+        dataStream = QDataStream(itemData, QIODevice.WriteOnly)
+        dataStream << pixmap << QPoint(event.pos() - child.pos())
+
+        mimeData = QMimeData()
+        mimeData.setData('application/x-dnditemdata', itemData)
+
+        drag = QDrag(self)
+        drag.setMimeData(mimeData)
+        drag.setPixmap(pixmap)
+        drag.setHotSpot(event.pos() - child.pos())
+
+        tempPixmap = QPixmap(pixmap)
+        painter = QPainter()
+        painter.begin(tempPixmap)
+        painter.fillRect(pixmap.rect(), QColor(127, 127, 127, 127))
+        painter.end()
+
+        child.setPixmap(tempPixmap)
+
+        if drag.exec_(Qt.CopyAction | Qt.MoveAction, Qt.CopyAction) == Qt.MoveAction:
+            child.close()
+        else:
+            child.show()
+            child.setPixmap(pixmap)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    mainWidget = QWidget()
+    horizontalLayout = QHBoxLayout()
+    horizontalLayout.addWidget(DragWidget())
+    horizontalLayout.addWidget(DragWidget())
+
+    mainWidget.setLayout(horizontalLayout)
+    mainWidget.setWindowTitle("Draggable Icons")
+    mainWidget.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/draganddrop/draggableicons/draggableicons.qrc b/examples/draganddrop/draggableicons/draggableicons.qrc
new file mode 100644
index 0000000..63f84ac
--- /dev/null
+++ b/examples/draganddrop/draggableicons/draggableicons.qrc
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="">
+   <file>images/boat.png</file>
+   <file>images/car.png</file>
+   <file>images/house.png</file>
+</qresource>
+</RCC>
diff --git a/examples/draganddrop/draggableicons/draggableicons_rc.py b/examples/draganddrop/draggableicons/draggableicons_rc.py
new file mode 100644
index 0000000..bb930c6
--- /dev/null
+++ b/examples/draganddrop/draggableicons/draggableicons_rc.py
@@ -0,0 +1,620 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sat May 4 16:53:19 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x0b\x93\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x4b\x00\x00\x00\x36\x08\x02\x00\x00\x00\x00\x90\xf3\xa2\
+\x00\x00\x0b\x5a\x49\x44\x41\x54\x78\x5e\xdc\x93\x41\x0a\x45\x21\
+\x0c\xc4\x5a\x79\xf7\xbf\xb1\xfa\x8b\x42\x36\x01\xff\xbe\x59\x0c\
+\x71\x68\xbb\x33\xd6\x61\xef\x5d\x89\x83\x9f\xe4\x15\x27\xf8\xc2\
+\x02\x95\x9e\x44\x1e\xbd\x77\x81\xb1\xb1\xbb\x13\xf3\x50\x56\x89\
+\x83\x9f\xe4\x15\x27\xf8\xc2\x04\x95\x9e\x44\x1e\xbd\x77\x81\xb1\
+\x2f\x33\xe3\x80\x80\xcb\x7a\x92\x88\xd3\x2b\x76\x95\x88\x4b\xf8\
+\xdf\xfb\xf8\x88\xee\x8c\xe8\x4e\xff\x7f\x18\xab\x3b\x31\x0f\x65\
+\x95\x38\xf8\x49\x5e\x71\x82\x2f\x4c\x50\xe9\x49\xe4\xd1\x7b\x17\
+\x18\x1b\xd1\x9d\x2f\x33\x7f\xbc\x97\x4d\x4c\x54\x57\x14\xc7\xcb\
+\xbc\xc7\x0c\xcc\x0c\x98\xa0\xc5\x05\x51\xab\x26\x2c\x74\xd1\xc6\
+\x9a\x26\x04\x01\x29\x30\x6a\x62\x63\xd2\xc4\xc6\x8f\x85\x8d\x4d\
+\x9b\x18\x6b\x93\x6e\xaa\x4d\x64\xc7\x82\xb4\x4d\xa3\xb1\x5d\xb8\
+\xb1\x8b\xee\x9c\xc6\xfa\x41\x04\x09\x50\x48\x4d\x20\x68\xc4\x26\
+\x8d\x90\xb6\x09\x51\x44\x10\x82\x30\xdf\x9f\x40\x7f\x7d\x27\x9e\
+\x79\xcc\x20\x85\xa0\xde\xdc\xbc\x39\xf7\xdc\x73\xef\xf9\x9f\x8f\
+\x7b\xee\x9d\xdc\x4a\xbd\xfc\x0b\xc3\xde\xd2\xe9\x34\xa9\x9f\x25\
+\x09\x47\x85\x73\x67\x95\xc9\x30\x4b\x32\x3f\x3f\x5f\x25\x97\x80\
+\x67\x87\xf4\x4a\x2a\x4d\xe6\xe9\xf4\x0a\x9a\x3d\x33\x5f\xf7\x8d\
+\x6f\xf7\x3d\x3a\x0c\xc3\x48\x26\x93\x8d\x8d\x8d\x93\x93\x93\x12\
+\x8d\x45\x37\x04\xa8\xd7\xe3\xc9\x73\x3a\x23\xa9\x14\xb3\x2e\xc3\
+\xc8\x9f\x9b\x0b\x86\x42\xd0\xf6\x18\x42\xac\x5b\xb7\xae\xa9\xa9\
+\x89\x30\x02\xd1\xe1\x70\x68\x2e\xac\xf8\xc6\xa7\xa1\x75\x35\x59\
+\xce\x72\x10\x80\xa3\xba\xba\x7a\x62\x62\xe2\xd0\xa1\x43\x91\x48\
+\x04\x8e\x18\x29\x5f\x4d\x16\xaf\xd7\xfb\xcb\xb5\x6b\x89\x07\x0f\
+\x0e\x6c\xdd\x4a\x5c\xee\x3c\x7e\xfc\x57\x71\xf1\x67\xc7\x8f\xb3\
+\x44\x6d\x03\x0f\x62\x7e\xbf\xbf\xac\xac\xac\xbb\xbb\xdb\x34\x4d\
+\x38\x78\x90\xa9\xd7\x77\x1f\x6a\xda\x70\xf0\x20\x52\xa9\x54\x45\
+\x45\xc5\xf6\xed\xdb\x01\xba\x74\xca\x41\x7c\x79\xf6\xec\xa7\x9b\
+\x37\xcf\x9d\x3a\x95\x3c\x79\xf2\xdc\xce\x9d\x7b\x0e\x1c\x80\x99\
+\x48\x24\xd8\x84\x2c\x80\x88\xc7\xe3\x6c\x3b\x36\x36\x56\x5e\x5e\
+\xce\xb6\xf0\x59\x08\x47\x76\x78\x4d\x59\xaa\xc9\xc9\x57\xa2\x17\
+\x0c\x06\xfb\xfa\xfa\xf0\xf4\xb3\x67\xcf\x60\xaa\x02\x11\x16\x1a\
+\xac\xa5\xa5\xa5\xa1\x40\x20\x92\x48\x8c\x85\x42\xf8\x66\x26\x1e\
+\x8f\xe2\x95\x50\x68\x72\x6a\x8a\xb5\xba\x04\x58\x6e\xb7\xbb\xab\
+\xab\xab\xb6\xb6\xb6\xa6\xa6\xa6\xa7\xa7\x47\xd2\x44\x64\x56\x9a\
+\xa5\xe6\x4a\x63\x8e\x0e\x35\x0f\x1a\xf3\x02\x81\x40\x7f\x7f\x3f\
+\xea\x71\x3f\x27\x47\x81\xea\x57\x89\x7c\xd3\x94\xb3\x64\x5a\x47\
+\xcb\xb0\x68\xc3\x34\x0d\xab\xa9\x98\x6c\xe5\x72\xb9\x3a\x3b\x3b\
+\xeb\xea\xea\xec\x46\xf2\x15\x00\xaf\xea\x5d\x8a\x7a\x39\xba\x62\
+\x5e\x55\x55\x95\x9a\x47\x82\xd9\x7d\x6c\x37\x32\x63\x27\x5d\xc1\
+\xc1\xa4\x33\xb4\x49\xaa\x30\x96\x60\x24\xdf\x8e\x8e\x0e\x8e\xf7\
+\xee\xdd\xbb\x45\xa9\xaa\x5e\x81\x85\x4b\x1c\x9b\xd9\x9c\x26\xa7\
+\x4e\x62\x58\x59\x59\x49\x4e\xf6\xf6\xf6\x32\x8c\xc5\x62\x7c\xe5\
+\x58\xaa\x64\xee\x72\x79\x25\x62\xc1\xac\xd5\xc5\x66\x95\xcf\x5a\
+\x02\xb8\x68\x34\xca\xb7\xbd\xbd\x9d\x63\x49\xb2\x48\xe2\x00\xe0\
+\x45\xd8\x16\x35\x24\xfb\xc6\xd7\x28\xe1\xbf\x17\x16\xa7\x74\x7a\
+\xef\x9e\x3d\x88\x0e\x0d\x0d\x31\xa4\x0e\xb8\x0b\x0b\x59\x88\x06\
+\x98\x59\x11\x54\x4d\x20\x33\x48\x62\x97\x2b\xdf\xe1\x58\xe3\x74\
+\xe2\x0c\xb7\x61\x38\x4d\xd3\x53\x54\x44\xfc\xc9\x55\x64\x54\x1a\
+\xfb\x01\x24\xa5\xa2\xc0\xeb\xed\xeb\xed\xf5\xf9\x7c\xfb\xf6\xee\
+\xbd\xd5\xd6\xc6\x1e\x4b\x17\xf6\xac\xbb\xca\xcc\x4a\x2a\xbd\xdf\
+\xc2\xe1\xf0\x1f\x83\x83\x9a\x37\xac\x90\xc8\x42\x9c\x39\x7d\xba\
+\xff\xce\x9d\x96\x96\x96\x9e\xde\xde\x78\x2c\x26\xe0\x68\x2e\x87\
+\x23\x61\x39\x33\xab\xd8\xc8\x0f\x7e\x59\x5b\x52\xf2\x68\x64\x84\
+\x25\x1d\x23\x23\xd8\xf0\xe7\xcc\xcc\x63\xd3\xec\xe8\xe9\x99\x09\
+\x04\x40\xa6\xd2\x7c\x0a\x0c\x83\x92\x8a\xcb\x24\x35\x0a\x0a\x0a\
+\xbe\x6a\x6c\x3c\x7a\xf4\x68\xb5\xcf\xd7\xdc\xdc\x8c\xa0\x03\x03\
+\xe8\x56\x83\x86\xf3\xf6\xb6\x6d\x5c\x33\x02\xde\x5e\xe7\xf4\x3e\
+\xcc\x98\xc7\x15\xf4\xf4\xe9\xd3\xaa\xf7\xdf\x9f\x7b\xf8\x90\x22\
+\x00\x62\xfb\xb9\x96\x68\x94\x94\x94\x44\x63\xb1\x74\x2a\xa5\xa1\
+\x46\xe6\x9f\x70\x78\xa3\xdb\x5d\xe4\x74\x8a\x91\xd9\x67\xd8\x82\
+\xf2\x24\x1a\x05\x59\x19\x50\xb8\xe5\x2c\xb3\x30\x40\xb0\xea\x3e\
+\x18\x3f\x14\x0c\xbe\xe5\xf1\x10\x6d\x41\x85\x30\x55\x0a\x3b\xa7\
+\xa7\xa7\x89\x21\x1c\xe0\xcb\x1a\x08\xf6\x49\x53\x84\x36\x6d\xfa\
+\xbd\xab\x6b\xfd\xfa\xf5\x6c\x88\x09\x6a\xa1\xa9\x08\xd4\xbc\xc9\
+\x89\x89\x9d\x55\x55\x0d\xa9\x54\xd3\xc1\x83\xd1\x64\x52\xde\x11\
+\x12\x46\x01\x0a\x30\x02\x02\x9b\xa6\x5e\x07\x4d\x7d\x4b\xcb\x4f\
+\xb5\xb5\x95\x1b\x36\x70\xaf\x39\x10\xb3\xe4\xe7\x20\x2c\x99\xe4\
+\xfc\x3c\xf9\xf6\x79\x7b\x3b\xa3\x1f\x1a\x1a\xe2\x91\x08\x4b\xa0\
+\xe5\x2d\xa3\xa5\x86\x32\x3b\x9d\x48\xbc\xeb\xf7\xff\x5c\x5f\xbf\
+\xd1\xeb\x4d\x00\x5d\xf4\x5a\x0d\x8f\x13\x58\x81\x01\x57\x13\xc4\
+\xed\x74\x9e\xed\xee\x06\xf6\xbd\xdb\xb7\xdf\x2c\x2d\x55\x23\x33\
+\xb5\x54\xce\x9e\x98\xb7\x63\xd7\x2e\x5f\x2a\xf5\x6d\x7d\x7d\x20\
+\x16\x4b\xcd\xce\x72\xae\x93\xb3\xb3\x49\xeb\x2b\x3d\x9e\x4a\x71\
+\x01\x0b\xdf\xde\xd1\x05\x93\xa0\xc8\x30\x41\x5f\x48\x30\x45\x34\
+\xe8\xf3\xba\x4a\xa6\x72\x3a\xd0\x52\x0b\x39\xa8\x43\x29\xaa\xed\
+\x4c\x01\xc6\x14\x50\x01\x0c\x6c\xc0\x63\x02\x86\x48\x59\xca\xd4\
+\x52\xa9\xc2\xa3\xa3\xa3\xef\x55\x57\x13\xbd\x6f\xea\xea\xc6\x83\
+\x41\x09\x9a\x16\x8f\xe5\xdc\x25\x22\xb6\xfa\xb6\xfc\xfb\x40\x35\
+\x02\x18\xd8\x80\xc7\x04\x0c\x91\x98\x01\xc9\x61\xaf\x42\x9f\x9c\
+\x38\xf1\xce\xd4\xd4\xf7\x3e\xdf\x78\x28\x64\x30\xc6\xc2\x97\xdb\
+\x74\xc3\xe5\xed\xbc\x7c\xf5\xd8\x03\x5e\x60\x03\x1e\x13\x30\x84\
+\xa1\x94\x18\x07\x73\xfa\xb4\x0f\x85\xc3\x0d\x5b\xb6\x70\xf6\x32\
+\x7f\xd8\x20\xa4\x29\x91\xdb\x04\x8a\x90\x8b\x4a\xe6\x4c\x89\xfc\
+\xd2\x62\x10\x74\x15\x7c\x21\x8c\x85\xff\x2d\x01\x8f\x09\x18\x22\
+\x1c\x9a\x69\x7f\x7c\x50\x67\x23\xc9\xa4\xae\x11\xe7\x28\x61\xcf\
+\x40\x28\x6d\x9a\xcc\x3a\x25\x5d\x38\x10\xb9\x99\x27\xb3\xca\x50\
+\xc9\x0c\xad\x1c\x05\xa0\xba\x54\x91\x8d\xa3\x46\x02\x05\x13\x8c\
+\xe2\x62\x2d\x4e\x99\x18\x6a\x09\x56\x17\xdb\x09\xe5\x33\x56\x85\
+\x99\xa1\xae\xa2\x8b\xf0\xa2\xbe\xd7\x45\xf6\x59\x5d\xa2\xda\x95\
+\xaf\x3b\xdb\xdc\xa4\x30\x68\x4a\xab\x98\xb0\xe6\x6d\xda\x6d\x0f\
+\x17\x55\x90\xd3\xec\xfe\xa6\x12\xce\xda\xbc\xc8\xd3\x24\xeb\x85\
+\xbd\xfa\x96\xf5\x5e\x47\x85\xee\x8b\x6a\x00\x2c\x55\xd8\xc4\xb6\
+\x65\xbd\xbc\x17\x3e\xc1\x58\x25\x3a\xd7\xb8\x5c\xa5\x1e\x4f\x21\
+\xcf\x2f\xd3\xf4\x3a\x9d\xd0\xbc\x3f\x00\xa1\x47\xf7\xa5\x98\x27\
+\x20\xd9\xb6\xc0\x34\x51\x81\x22\xd4\xa1\x14\x1a\x00\xe8\x90\xe7\
+\x8e\x28\x53\x9c\xff\xff\xf2\x66\x3c\xa7\xce\x93\x4e\x93\xc7\x80\
+\x95\xd0\x45\x2e\xd7\xad\xe1\xe1\x8f\xaf\x5f\x6f\xf0\xfb\xf7\x5d\
+\xbd\xea\xbb\x7c\xf9\xeb\xce\xce\x47\xe1\xf0\x5a\xde\xa5\x22\x2c\
+\xab\x56\xd1\x44\xb5\x50\x6c\xfb\x28\x18\x3c\xd3\xd9\x89\x22\xd4\
+\xa1\xf4\xd8\x8d\x1b\x6d\xc3\xc3\xc0\x30\x2d\x48\xea\x77\xcd\x1f\
+\x79\x1e\x0b\x91\x7d\x0e\xc5\x62\x7c\x26\x49\x60\x3f\x84\xac\xe1\
+\xfd\x01\xff\x58\x6b\xeb\x17\xf7\xef\x6f\x38\x72\xa4\xd9\xef\xbf\
+\xd8\xde\x7e\xe6\xd2\xa5\xb1\x1d\x3b\xf6\xb7\xb6\x9e\x1f\x18\xf0\
+\xba\x5c\xe4\x03\xf1\x94\xab\x55\xd3\x5e\x93\x7f\x91\xe3\xad\x53\
+\xb6\xb3\x44\x12\xba\x4d\x93\xbf\x8e\x1e\xa7\xf3\xdc\xbd\x7b\x1f\
+\xb4\xb5\xa1\x02\x45\xa8\x43\x29\xaa\x01\x00\x0c\xc0\xe4\x5b\xc0\
+\x14\xba\xec\x00\x1f\x13\x20\x54\x57\x26\x86\x0c\x52\xe9\xf4\xd0\
+\xd4\x54\xb1\xf5\xb0\x14\x8e\xb8\xc4\x61\x95\xd9\x8f\x5a\x5a\x66\
+\xca\xcb\xff\x1e\x1c\xbc\x78\xfe\xfc\x87\xfb\xf7\xd7\x54\x54\x1c\
+\x3b\x7c\xf8\xe6\x95\x2b\xbf\xde\xbc\xf9\xe3\xf8\xf8\x77\x77\xef\
+\x3a\x0c\x63\x68\x66\xc6\xe0\x7f\x83\x18\x29\xa5\x4b\x33\x4f\x2b\
+\x21\x5d\x13\x4c\xa7\x04\x00\x69\x59\x58\xf8\xdb\xe8\x68\x28\x9d\
+\xbe\x30\x30\x70\xe1\xc9\x13\x36\x47\x05\x8a\x50\x87\x52\x54\x03\
+\x00\x18\x80\x01\x52\x9e\x04\x5c\xbc\x63\x1d\x51\xc0\x63\x02\x86\
+\xe8\xeb\xdf\xf1\x6f\xbb\x66\x13\x12\xd7\x15\xc5\xf1\x18\x26\xc9\
+\x8c\x89\xbe\x29\x6f\x1e\x31\x91\x38\x05\x29\x82\xbb\x30\xa6\x10\
+\x78\x69\xc1\xa4\x1f\x09\x42\x90\xe8\xd4\xac\xaa\xce\x60\x18\x64\
+\x32\x01\x75\x93\xac\x8d\x55\x4a\x40\x5c\x64\x13\x82\x18\xad\x2b\
+\x37\xda\x45\xc7\x96\xa4\x13\x42\xc4\x44\x4d\xa8\x50\x17\x92\x21\
+\x42\x16\x89\x88\x69\x0d\xa9\x49\x27\xed\xf4\xc7\x1c\x72\x73\x79\
+\x8f\xea\x50\x5d\x4d\x7a\xb8\x8b\xf3\xee\x3d\xe7\x7f\xfe\xe7\xdd\
+\x7b\xdf\x83\x73\x2f\x9a\x08\xef\xbe\xbf\xaf\xef\xc6\xea\xea\xd5\
+\xb9\xb9\x83\xa5\xa5\x19\x49\x32\xb7\x6e\x0d\xaf\xf7\x9b\xa9\xa9\
+\xb5\x8a\x8a\xbb\x93\x93\x07\xcb\xcb\x29\xa8\x48\x81\x84\xc2\x04\
+\x95\x95\xcf\x4e\x9c\x98\x1c\x1f\xef\x5f\x58\xf8\xa8\xa4\xe4\x5c\
+\x2a\x35\xf9\xe8\x91\x51\x5c\x8c\xbb\x4c\x8a\xfe\xf3\xa0\xb9\x75\
+\xc9\x5c\xd2\x2b\x2d\x2e\xfe\x31\x9d\x3e\x93\x4c\xd6\x04\x02\xdf\
+\x3d\x7e\xfc\xc3\xf8\x38\xe0\x84\xa3\x4e\x23\x11\xd1\x21\x00\x0d\
+\xc8\xf4\x4e\x4d\x7d\xe0\xf3\x41\x8f\x54\xc4\x1d\xda\x90\x27\x05\
+\x12\x91\xa5\x84\xbc\x3b\xe5\x96\x6a\xcf\xfd\xd9\x59\x6f\x49\x49\
+\x5f\x4d\xcd\x4a\x24\xf2\x4b\x63\xe3\x7c\x38\xfc\x6b\x53\xd3\xc3\
+\x70\x78\xef\xce\x9d\xb7\x52\x29\xa9\x1a\x39\x6a\xec\x54\x1c\xe8\
+\xff\x3a\x16\x3b\x69\x9a\x97\x8f\x1e\x85\x70\xb2\xae\x2e\x1b\x8f\
+\xff\xd6\xda\xfa\x22\x1a\x5d\x8b\x46\x5f\xd0\x22\x91\xd5\xd6\xd6\
+\x4c\x3c\x7e\xae\xba\x9a\x86\xc2\x23\xfd\x32\x84\x82\x31\x2e\x38\
+\xe2\x0e\xc8\x29\xd3\x6c\x8e\xc5\x80\x05\x9c\x10\xba\x40\x80\xfe\
+\x9f\x53\xa9\x3d\x45\x45\xf7\x1b\x1a\x16\x9a\x9a\x20\x09\x55\x08\
+\x43\x1b\xf2\xa4\xa0\xd2\xd1\xce\x2d\x72\xc2\xe4\xd0\x3b\xf3\x36\
+\xc9\xb5\xb6\xb6\x27\xcd\xcd\xeb\xb1\xd8\xe0\xb1\x63\xe5\xc1\x20\
+\x3e\xee\x33\x09\xc1\x42\x79\x30\x3f\x6f\x7a\xbd\x2f\xdb\xda\xae\
+\xd8\x36\x73\x7e\xab\xbe\x3e\xdb\xd1\x91\x4d\x24\xb2\x17\x2e\xd0\
+\x50\xb2\xe7\xcf\x67\x2f\x5e\xec\x38\x7c\x98\x86\xc2\xa3\x1a\xa2\
+\x61\x8c\x0b\x8e\xb8\x03\x02\x14\x80\xc0\x0a\xb8\xfb\xe4\x83\x81\
+\x03\xc1\xe0\x75\xdb\x86\x1e\x24\xa1\x2a\xe9\x41\x1e\x4a\x92\x88\
+\xd8\xef\xd0\x9d\x55\x92\xf7\x66\x66\x0c\xc3\xb0\x0d\xe3\x13\xbf\
+\xff\x73\xcb\x0a\x7a\x3c\x8d\x67\xcf\x4a\x09\x43\xd9\x3b\x1c\x9f\
+\x2d\x2f\x9b\x86\xf1\xf1\xbe\x7d\x75\x96\x25\xfb\xeb\x94\x65\x7d\
+\x19\x08\xd0\x4e\xd2\x4c\xf3\x0b\xd3\xac\xdb\xbf\x9f\x31\x1a\x0a\
+\x8f\xf4\xd3\xc4\x06\x63\xf1\xc2\x1d\x10\xa0\x00\x74\x9f\xcc\x20\
+\x8a\x06\x94\x3e\xf4\x78\xa0\x07\x49\xdb\xef\x87\x30\xb4\xf5\xf4\
+\x44\x3c\x7a\x7d\x1a\x9d\x0a\x2c\x73\x72\x24\x14\x9a\x9e\x9e\xfe\
+\xe9\xce\x1d\xf9\x55\xdc\xbe\x79\x73\xf5\xe9\x53\xdd\x4c\x57\x54\
+\x69\xc3\xe3\xf3\x35\x5e\xba\xb4\xdb\xe7\x6b\xd8\xb5\x8b\xde\xdf\
+\x33\x19\xf7\xb9\xc5\xe9\xdc\x87\xee\x0f\xbe\x04\x5a\xa7\xec\xd8\
+\xaf\xa8\xd3\xe5\xbc\xfe\x5c\x5f\xff\xb6\xbb\x1b\xc0\x7f\xfb\x55\
+\x8a\xef\xf3\xe5\xe5\x23\xe1\xf0\xa7\xc7\x8f\x4b\x0a\xd7\x6c\xbb\
+\xaa\xaa\x0a\xf2\x52\xef\x53\xf6\xef\xf6\xa1\x63\xe1\x65\x35\x99\
+\x9b\x9d\xb5\x2c\xcb\xb1\x4a\x55\x1d\x96\x89\x65\x88\x7a\x51\xc5\
+\xa1\x43\xd9\x6d\x12\xa0\x00\x04\x16\x70\x9d\xa1\x22\xc0\x10\x94\
+\x20\xa6\x5c\x14\x6d\x65\xef\xdc\x87\xee\x3d\xa6\xea\xd0\x94\xd2\
+\xca\xca\xca\x06\x07\x07\x65\xeb\x4b\x62\xca\x4c\xbe\x34\x14\x36\
+\x5b\x5a\x5a\x88\x41\x81\x0c\x2f\x04\x77\x44\x14\xa5\x8b\xb8\x3b\
+\x95\x25\xee\x80\x00\x55\x5b\x5b\xbb\x41\x38\xc8\x40\x09\x62\xd0\
+\x13\x04\x61\xee\x90\xbc\xce\x80\x89\x0a\xe2\xd0\xd0\x10\x93\xbe\
+\xb8\xb8\x88\xae\xd8\x80\x2e\xe1\x47\x46\x46\x18\x4d\xa7\xd3\x52\
+\x81\xff\xfb\xbf\x8a\xfa\x6e\x01\xc5\x7e\x19\x1e\x1e\x96\x95\xa2\
+\xbf\x2f\x7a\x96\x96\x96\x08\x07\x25\x21\xb3\x31\xe6\x26\x77\xa2\
+\x40\x57\x49\x76\x76\x76\x52\x6c\x4f\x26\x93\x8e\x85\xd1\xd3\xd3\
+\x43\xbc\xd1\xd1\x51\x79\xdc\xca\x9d\x28\x51\x24\xdc\xd8\xd8\x18\
+\xb0\x80\x3b\xb6\x0c\x04\xfc\x7e\x3f\x64\xc4\x72\xd3\x3b\x51\x79\
+\x9d\xcc\xa8\x24\x7b\x7b\x7b\x39\xf7\x0a\x85\x42\xed\xed\xed\x5d\
+\x5d\x5d\x91\x48\xa4\xb2\xb2\x32\x18\x0c\x72\x48\xa4\xe2\x6d\xf1\
+\xa6\x82\x9e\x24\xb0\x80\x13\x82\x40\x84\x23\x28\xa1\x21\x40\xda\
+\x62\xa3\xb6\xd5\x06\x27\x33\x9b\xcc\xa1\x3e\x2a\xef\x72\x65\x65\
+\x65\x60\x60\x20\x9a\x93\x44\x22\x41\xd5\x54\x15\x7c\x05\x71\x2b\
+\x73\xa8\xdb\xa8\xa9\x9b\x98\x98\x20\x90\x44\x24\x34\x04\x24\x9c\
+\xca\x6d\xa3\x39\xcc\xff\xa6\x82\x58\xcb\x36\x70\x88\xda\x7b\xdb\
+\x7b\x53\x41\xd6\xbc\x9b\xba\x9e\x5e\x3e\x37\x15\xf2\x3d\x3f\xd4\
+\xd9\x90\x27\x22\x9f\x59\x48\xe8\x31\xb6\xeb\x3e\x8d\xfb\x93\xae\
+\x44\x86\xf2\x3f\x3f\x7c\x0f\x6e\x9b\x14\x15\xb4\xfc\x7f\x73\xaf\
+\x20\xa4\xf0\xef\x08\x17\xfe\x3e\x2c\xfc\xdb\x97\xff\x00\xfb\x6b\
+\xc0\x37\xb1\x10\x1f\x8c\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x0c\xdc\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x4b\x00\x00\x00\x36\x08\x02\x00\x00\x00\x00\x90\xf3\xa2\
+\x00\x00\x0c\xa3\x49\x44\x41\x54\x78\x5e\xdd\x5a\xdb\x93\x55\xc5\
+\xd5\xef\xee\x7d\xce\x99\x1b\x03\xcc\x30\x37\x44\x19\x18\x2e\x2f\
+\xc6\x38\x58\xca\xc5\x19\x14\x98\xa4\x2c\x35\x98\x08\x09\x65\xe5\
+\x42\xb4\xb4\x0c\x65\x12\x1f\xe2\xc3\xf7\x96\xbf\x20\x79\xc8\x05\
+\xa2\x46\x0a\x43\x88\xa6\x4c\x82\x31\x26\xb1\x2c\x22\x20\x8a\x90\
+\xd2\x12\x92\x54\xe5\x01\x74\xb8\x49\xf8\x64\xe0\x38\xc3\xdc\x3c\
+\x67\xef\xdd\x9d\x75\xd6\x3a\xdd\xab\xf7\xd9\xce\xcc\xa9\xf1\x24\
+\x0f\x69\xfa\x6c\x56\xef\xbe\xad\x5f\xaf\x5b\x77\xcf\x16\x31\x26\
+\x8d\x89\x08\xa6\xf9\x0d\x17\xb9\xfd\xd4\xef\x99\x4e\xa5\xd8\x4b\
+\xe9\xaa\x4f\x6c\x9c\x6a\x93\x26\xb8\x98\x66\x2c\x23\xa5\x14\x42\
+\xc0\xd3\x18\x63\x69\x7e\xa6\x8b\xd4\xd2\xaf\x82\x22\xbf\xac\x65\
+\xe2\xb9\x98\xc0\x54\xd1\x86\x39\xe4\xc4\xc5\xcc\xa7\x99\x5e\x63\
+\x22\xc2\xa1\x85\xc4\xeb\x95\x4a\x8e\x51\xa2\xfd\x66\x8e\xf6\x09\
+\x1a\x5c\x61\x9a\xdd\x22\xce\x5e\x4b\xa3\x28\x02\x02\x90\x00\xcd\
+\x4f\x2f\x11\x00\x47\xf8\xb5\xe9\x97\xe9\x96\x3e\x01\x13\xc1\x74\
+\xb3\xd4\xd2\xd9\x49\xaf\xd4\x33\x93\x39\x77\xee\xec\x43\x8f\xec\
+\x18\x1f\x1f\x0f\x82\x00\x85\x23\x05\xca\x40\x18\x09\x4f\x49\x45\
+\x7c\x6d\x25\x88\xff\xa8\x9d\xb4\x72\xf3\xab\xa5\x34\xf4\xc0\x11\
+\x68\xa2\xa6\xa6\xa6\x3d\xcf\x3c\xd9\xdd\xbd\x04\x40\xe2\x44\x28\
+\xe1\xaa\x53\x66\xd6\xf0\xfe\x75\xf1\xe2\xba\xf5\x03\x9f\x69\xbc\
+\xfc\xbd\x81\x95\x63\x93\xa1\x94\x64\x2e\x84\x8f\x71\x38\x68\x8c\
+\x09\xdb\xd1\x60\x54\xb2\x4d\xd8\x1d\x18\x53\x6e\x3a\xa7\x21\xbb\
+\xfb\xb5\x93\x30\xd1\x3b\xc7\x8e\x5c\xb7\x68\x91\x03\x59\x3d\xc2\
+\x92\x96\x7f\xa2\xff\x48\xdb\x06\x55\xc1\x1c\x08\xef\x83\x55\x6b\
+\xd6\xaf\x6b\x1b\xff\xf5\x13\x9f\x27\x45\xb2\x23\x10\x3a\x96\xa1\
+\xc5\x66\x04\x23\x64\xf4\xde\x04\x56\x86\xd0\x1e\x68\xc9\x95\x4a\
+\xa9\x07\x7e\x78\xe0\xd8\x95\xa6\x13\x7f\x7d\xe3\xba\x45\xd7\x13\
+\x03\x3e\xc8\xe9\xcd\x3e\xd1\x94\x19\x4d\xd0\x5c\x15\x86\x61\x36\
+\x9b\xbd\xf8\xc1\x05\x80\xd7\xd7\x3e\xf9\xdc\xe3\x03\xf9\xfc\x78\
+\x64\x8c\x72\xda\x45\x60\x48\x8a\x2c\x43\x42\x60\x81\x90\x14\x79\
+\x58\xaa\xa4\xd7\xb6\xbb\xe5\x59\x03\x8b\x52\x3e\xff\xf8\xc0\x57\
+\x7f\x7c\xb0\x77\x75\x3f\x80\x5c\x74\xfd\x0d\xc0\x06\x82\x64\x0e\
+\x19\x45\x0a\xcb\xcc\x32\x44\x82\xa5\xf7\xc1\x85\xf3\xab\xd6\xae\
+\x5f\xdf\x5e\xd8\xf7\xed\x4d\x1f\x8d\x4e\x42\xb5\x52\x64\x37\xd2\
+\x08\x36\xa1\xe4\x38\x8c\x91\x59\xf1\x6a\x3d\xb4\xd2\xb2\x46\xab\
+\x44\xbe\xb4\x44\xb6\x34\x37\x7c\x7d\xe7\xc1\x37\x86\xea\x4e\x1c\
+\x7f\xe3\xfa\x1b\x16\xb3\x24\x67\x94\xa1\x98\x39\x31\xbc\x0b\xe7\
+\x01\x5e\xff\x9d\xed\xe1\x2f\x77\x0c\xe4\x87\x27\xa0\xa6\x04\x2f\
+\x82\xd1\x15\x73\x5b\xc2\xa0\x08\x10\x49\x34\xe5\x6f\x58\xb4\x56\
+\xe0\x3c\x13\x09\xd0\x56\x2a\x03\x3f\xa9\x00\x64\x7e\x78\x72\xdf\
+\x8e\x81\x6f\xfc\xec\x60\xef\x9a\xfe\x13\xc7\xdf\xbc\x61\x31\x83\
+\x9c\xde\x2c\x4b\x6e\xa3\x22\x76\x57\x48\x99\xe0\x81\x72\x5e\x38\
+\x77\xae\x77\x6d\xff\xc6\x8e\x68\xef\xa3\x9b\xf2\xa3\x13\x25\x1c\
+\xd8\x80\xb4\xd1\xb0\x2d\x91\xa6\x4d\x21\x43\xaa\x22\x30\x0c\x9c\
+\x28\xfc\x59\x88\xcc\x07\xc5\x5e\xd4\x8d\xd6\xe6\xc6\xed\x4f\x1f\
+\x3c\x74\x39\x73\x12\x40\x76\x77\x3b\x75\x25\x08\x69\x2d\x9d\x41\
+\x86\x3e\xbc\xf3\x67\xcf\x02\xbc\x81\x4e\xfd\x8b\x87\x37\x5e\x1d\
+\x46\x78\x34\x2b\x30\xed\x77\xa1\x82\xb3\xa6\xf4\x98\xf8\xb3\xae\
+\xc4\xf6\x65\x3b\x64\xa1\x1a\x3b\x1a\x59\x23\x81\x84\xa9\xf7\x3e\
+\xbc\xf1\x9b\xbb\x0f\xdf\xbc\xa6\x0f\x40\x2e\x5e\xb2\x84\x41\xce\
+\x22\x5a\x38\x78\xe7\xce\x9e\x01\xe5\xfc\x5c\x87\xd9\xf3\x20\xc1\
+\x93\xaa\x2c\x5e\xc5\x50\xac\xc1\xa2\x18\x94\x15\x66\x4a\x4b\x81\
+\x70\xc0\x65\x22\x8e\x10\x6e\x8b\x95\xf5\xd9\x45\x11\x25\x15\x82\
+\x9c\x7c\xf6\xc1\x8d\x0f\xed\x39\xd4\xbb\xb6\x0f\xd4\xb5\x7b\xc9\
+\x52\xdf\xf1\x54\x8b\xd0\x97\xde\xd9\x33\x00\xaf\xef\xae\x4e\xb9\
+\x7b\xfb\x26\x80\x27\x84\x62\x78\x1e\x13\xcc\x34\xfc\x38\xfa\x57\
+\x4c\xc9\x2d\xa9\x01\xa3\x67\x84\x64\xc6\xde\x72\x48\x6a\x9d\x00\
+\xb9\x67\xfb\xa6\x87\xf7\x1e\xea\x5d\x03\x20\x8f\x2e\x59\x9a\x00\
+\x39\x43\x3c\xa4\xe4\x02\xc3\x99\xc1\x41\x80\x77\x77\x67\xf0\xcc\
+\xd7\x36\x5c\x19\x43\xd7\xe2\x3b\xae\xa4\xca\xa5\x8c\x87\x62\x3a\
+\x11\x54\x4d\x55\x1c\x10\xc9\xd3\x03\xe5\x3c\x27\x05\x13\x6b\xab\
+\xd4\x89\x93\xb1\xea\x0a\x64\xdb\x9c\xc6\x47\x7e\x75\xf8\x95\x0f\
+\x63\x00\xb9\xb4\xa7\x87\x18\x66\x9b\x9c\x2a\x1e\xfa\xf0\x06\x07\
+\xdf\xbf\x65\x6d\xdf\x3d\x1d\x99\xa7\x1f\xd8\x30\x34\x32\x01\x9d\
+\x54\x49\x3c\x9a\x16\xd4\x77\x20\x4c\x7a\x50\xa8\x59\x9a\x47\xd6\
+\x57\xc9\x26\x48\xb4\xed\xad\xd9\xeb\xd2\x4b\xde\xf7\xc0\x88\x1a\
+\x5d\x80\x00\x96\x7e\xfe\xc0\x86\x47\x9f\x3f\xbc\x6a\xed\xed\xef\
+\x1e\x3f\xda\xd3\xb3\xcc\x49\x72\xba\x78\xc8\xf0\xde\x7f\x0f\xa4\
+\xf7\x85\xce\xdc\x53\xdb\xee\xbc\x32\x3a\x29\xa4\xf5\x9c\x1c\x32\
+\x19\x17\x1b\x94\xbf\xf9\x4c\x6b\xa9\x15\x21\xcb\xd0\xe0\xc3\x6d\
+\xf7\xa4\x64\xaf\xca\x0a\x92\xd2\x71\x27\x49\x23\xda\x9a\x1b\xbe\
+\xf5\xc2\xeb\x7f\xfc\xb0\x78\x02\x40\x2e\x5b\xee\x4b\x92\x7d\x69\
+\x5a\x7a\xef\xbf\x77\xfa\x96\x75\x7d\x9b\x3b\xea\x9f\xdc\x7a\xe7\
+\xd0\xf0\x04\xbc\x27\x78\x2c\x3b\x86\x58\xc6\x9c\x8c\x6f\xdc\x86\
+\x40\x24\xe4\xcc\x12\x16\x95\x56\xc7\xca\x2f\x13\x12\xe6\xf7\x14\
+\x9c\x94\xb3\xc9\xa1\xe1\xc9\xa7\xb6\x6e\xd8\xf1\xdb\xd7\x4b\x92\
+\x3c\x76\x74\xd9\xf2\x15\x0e\x24\x24\xb6\x43\x1f\xde\xe9\x53\xa7\
+\x6e\xb9\xbd\xff\x8b\x1d\xf5\xbb\xee\xbf\x63\x68\x0c\x94\x53\xf2\
+\xa6\x81\xe3\x93\x48\x25\xe6\xc4\xdf\x09\x79\xec\x55\x56\xd9\x2e\
+\x56\x60\xa9\x83\xe5\xb4\x53\xc0\x83\xda\x03\x69\xda\xe7\x34\x3e\
+\xf6\xe2\x91\x97\x2e\x7f\xfc\xee\x5b\x6f\xae\x58\xb9\x92\x80\x30\
+\x42\x77\x62\x08\x82\xe0\xbd\xd3\xa7\x6e\xeb\xbb\x63\xdb\xc2\xa6\
+\x5d\x5f\xda\x30\x34\x3a\x4e\xd2\xd3\x46\x43\x6b\xa5\x52\x5a\x4a\
+\xb2\x48\xc6\x6d\xc1\x18\x04\x57\x32\x42\x16\x22\xe9\x26\x95\x24\
+\x6f\x57\x19\x09\xe9\x83\x1d\x41\x56\x2c\x90\xd6\x25\x84\x24\x49\
+\x48\xed\xcd\x4d\x8f\xfd\xfe\xf0\x0b\x97\xc6\xdf\x3e\x7a\x64\xf9\
+\x8a\x95\x04\xa7\xec\x69\x1c\xbc\xbf\x9f\x3c\xd9\xb7\x71\xa0\x37\
+\x17\x6f\xbf\xf1\xa6\x3f\xfd\xed\x94\xb4\xaa\x9c\xcd\x66\x82\x20\
+\x57\x28\x6a\x29\xd9\xe2\x18\xa2\xcf\x15\x81\xb0\x41\xcc\xbd\x64\
+\x55\xe6\xb3\x03\xf7\xf1\xfd\xa4\xed\x4f\x0e\x96\x7a\x7a\xef\x25\
+\x6f\x62\xeb\x72\x2a\x8e\x8b\x61\x18\x59\x49\x8a\xed\x37\xf6\xfc\
+\xf3\xff\xdf\x5e\xb5\x7a\xdd\xd1\x43\xaf\x7d\xb6\xb7\x17\x40\x29\
+\xa5\x24\x9d\xd3\x01\x5e\x3e\x9f\xdf\xb2\x65\xcb\xe0\xe0\xe0\xc2\
+\xb6\x05\x23\x13\x1f\x4b\x69\x2d\x35\x13\x0c\x0d\xe5\x47\x47\x2f\
+\x2d\x5e\x54\x1f\xc5\x5a\x54\x1c\xfc\xac\xd1\xb0\xa3\x04\x04\x2e\
+\xae\x3b\x2d\xe5\x98\x87\x95\x54\xc7\x76\x6b\x29\xc9\x32\xf7\xc6\
+\x13\x32\xa5\xe4\x99\x40\x9d\xbf\xf8\x71\x73\xf3\xc2\xf6\xf6\xd6\
+\x28\x8a\x09\x24\x54\xce\x6b\xac\xbf\x74\xe5\x6a\x4f\x4f\xcf\xfe\
+\xfd\xfb\x5b\x5b\x5b\x01\x1d\x6b\x69\xa1\x58\x14\xb0\x30\x75\x75\
+\xda\x18\x8b\x4e\xd0\x61\xf7\x27\x3f\x7d\xf6\x0f\xbf\x7b\xe8\x95\
+\xfd\xab\x3e\xbc\x5c\x08\x82\xca\x6b\x22\xb6\x1c\x2a\x01\x6d\x52\
+\x07\x79\x4c\x86\xe0\xb2\xaa\xfb\x12\x25\x68\xac\x03\xac\xc3\x86\
+\x91\x13\xc2\x38\x16\x9d\x1d\x75\x77\x6f\x39\x71\xdf\xd6\x3d\xdf\
+\xfd\xce\x83\x74\x2c\xc6\x81\x71\x3f\x05\x58\x0a\x05\x40\x50\x97\
+\xcb\x25\xf6\xa5\xb9\x6c\x96\x86\x87\x16\x09\x63\x73\x4b\xaf\x65\
+\x29\xcb\x72\x95\xd6\xd0\x02\x37\x38\x0a\xd1\x12\x5f\xd4\x27\x75\
+\x3c\x05\x45\xd1\x1a\x41\x6a\x04\xe2\xe4\xe7\xed\x5a\x08\xbf\xdd\
+\xbd\x2b\xa3\x11\x14\x9e\x36\x8c\x0b\x87\xf4\xd4\x90\x25\x15\x2a\
+\xae\xd7\x68\x2c\x90\x93\x7b\x5b\xd5\x09\x98\x9a\x00\x73\xa5\x4c\
+\xa6\x66\x6d\x7d\x6c\x34\x06\x25\xa1\xc6\xc8\x01\x4b\x89\x04\x4b\
+\x26\xd0\xd0\x10\x64\x32\x42\x6b\xb7\x19\xf0\xdc\xae\xa5\xed\x4c\
+\x18\xf2\x01\x01\xb6\x34\x1a\x01\x7a\x9a\x6c\x11\x32\x63\x2e\x30\
+\x54\x7f\xb6\x48\x27\xe2\x4a\x42\x76\x01\x0d\xf4\xe2\x6a\x3e\xbe\
+\x67\xdb\x60\x14\x37\xe4\x72\x4a\x6b\x52\x4f\x14\x1a\x2f\xb8\xc8\
+\x64\xd4\xa5\x4b\xa3\xbb\x7e\xd0\xb5\x65\x73\xcb\xf0\x48\xac\x14\
+\x75\x97\x89\x18\x68\x52\x6e\x87\x82\xa4\xe1\xc6\xdc\x9e\x99\xa9\
+\x8a\xf1\x69\x6f\x84\x99\x16\xa6\xbc\x72\x65\xaf\x42\x3b\xb7\x62\
+\x21\x32\x62\xee\xab\x07\x8e\x81\xb9\xa3\x4f\xb3\x97\x4b\xde\x55\
+\x65\x5b\x5b\xeb\x5d\x77\xdd\x3f\x34\xf4\x56\xa0\xda\xb5\x8e\x11\
+\x81\x3b\x13\x31\x28\xe7\x74\xac\xa9\x22\x2c\x57\xb4\x3c\x60\x22\
+\x4e\xb8\xaf\xc4\xf4\x69\x6f\x84\x25\x3a\x35\xcc\x54\x04\x42\x01\
+\x50\xa5\x64\x67\x67\xdb\x82\xd6\xf9\x5a\xeb\xf4\xa5\x2d\x39\xaa\
+\x86\x86\x3a\x80\x52\xee\x6e\xad\xd5\x68\x19\x28\x13\x64\x94\xb7\
+\xe9\x97\xbc\x7b\x43\xbc\x74\xc6\xd6\x1a\xc6\x31\xd0\x1e\xe3\x31\
+\xad\x22\x32\x33\x2d\xc3\xb3\xb1\x43\x5a\x73\x5e\x4f\xcc\xf0\x20\
+\x6f\x4c\xcf\x24\x42\x5b\x85\x87\x59\xce\x58\x52\x52\x14\x0a\x66\
+\xe4\x5a\x14\xdb\xfb\x72\xc1\x57\xa5\x64\x79\x65\xb4\xb9\xac\x9a\
+\x3f\x57\x29\x85\xb6\xe7\x74\xb5\xc6\x76\x08\x88\xd8\x97\x92\xaf\
+\x40\xda\x54\xea\x33\x30\xe2\x70\x72\x95\xc0\xbe\x94\xb1\x14\x6b\
+\xd1\x32\x2f\xf8\xf3\xcb\x1f\xed\x78\xe2\x42\x77\x57\x7d\x18\xf1\
+\x0d\xa3\xa1\x13\x17\xc2\x53\x4a\x16\x43\x6d\x02\x7d\xe0\x37\xcb\
+\xdb\x5a\x33\xc5\x58\x48\xd6\x52\x6a\x55\xd3\x1b\x61\xc0\x83\x19\
+\xed\xdc\x16\xab\xf6\x53\xd2\x75\x17\xb8\x6f\x0e\x94\x1a\x1e\x8b\
+\x6e\xed\x6e\x7f\xf1\xff\xfa\xae\x8e\x16\x54\x59\x8e\xd2\xbf\x73\
+\xcc\x66\xd4\x95\x91\xc2\x57\x76\x1e\x29\x46\xd4\x4b\xd3\xea\x42\
+\x15\x4f\x5d\x1b\x84\xc4\xa3\xcd\xe4\x69\x88\xae\x32\x71\x5f\x1e\
+\x4a\x02\xc3\xd9\x40\x2d\x68\xca\xe9\x18\x00\xb3\x22\xf8\x08\xa3\
+\xd0\x28\xbf\xbb\xe1\xd1\x6a\xea\x4b\x05\xab\x3b\xcb\x10\x93\xdf\
+\x52\x29\xe5\xbf\x61\x42\x0a\xe3\x92\x86\x2a\x8d\x3a\xaf\x31\xdc\
+\x99\x62\x51\x87\x61\xc9\x16\xbd\x7b\x70\x6b\x84\x5a\x44\x21\x5a\
+\xb1\x4d\x2c\x43\x9a\x48\x4c\xeb\x4b\xab\xf7\x34\xf4\xd3\xbe\x1d\
+\x42\x8e\x25\xb2\x2b\x5c\x7b\x5d\xe2\x93\xdf\x30\x81\x4a\xc5\x5b\
+\x22\xa3\x70\xf3\xa0\xca\x66\xac\x31\x97\x48\xfb\x24\xa7\x63\xab\
+\x84\x67\xc6\x2e\x6e\x69\x4d\x1b\x8c\x99\x3d\x4d\x75\x32\x44\x4c\
+\x0a\x26\x20\x08\xb8\xc2\x12\x8b\xa2\xaa\xc4\xed\xb1\x83\xa5\x8d\
+\xe0\xcd\xa0\x85\x88\xac\x29\x94\x60\xb9\x4a\x60\x5f\xca\xc4\x28\
+\xc0\x56\x40\xd7\x36\x1e\xfa\x5a\x4a\x6b\x4c\x05\x0e\x09\x36\x1e\
+\xb2\xf0\xb1\x8a\xb7\x5a\x86\xf5\xda\xd2\x28\xdb\x18\x33\x72\x04\
+\x4f\xea\x8d\xdd\xd0\xdc\x62\xe9\x4d\x8d\x3b\x02\xd6\xd2\x9a\x7a\
+\x1a\x83\x5a\x8a\xca\x66\xed\x50\x4b\xa1\xa5\x92\x22\xc0\xe3\x06\
+\x3c\xa7\xfa\x33\x6d\xa0\xa0\xa3\xa7\xd5\x4e\xeb\xd0\xc3\x8a\xc8\
+\x88\x18\x28\xff\x04\xe9\xfc\x0d\x56\x09\x56\x72\x72\xa6\x96\x99\
+\x5a\x47\x7c\xde\x97\x92\xb9\x6b\x40\x95\x1d\x1e\x1e\xbd\x77\xf3\
+\x97\x1b\xea\x73\x25\x23\x24\x06\x65\x62\xe7\x56\x57\x97\x3d\x72\
+\xe4\xf8\x7d\xb7\x37\xeb\x18\x59\xf7\x37\x96\x84\x24\x96\x90\xd9\
+\x10\x11\x03\xef\x48\x35\x3e\x6d\x7b\xac\xa4\x22\xc9\xb6\xa6\x76\
+\x58\x5a\x4e\x6d\xdc\xbd\x76\x1c\xea\xe6\xc6\xe0\x47\xdf\x5f\x98\
+\xcf\x9f\x84\xde\xc8\x07\xc3\xf7\xcf\x16\x5b\xfb\x1b\x57\xdf\x3c\
+\x6f\x6c\x2c\x0c\xd0\x3d\x96\x92\x76\x3b\x24\x24\x74\x52\x86\x04\
+\x89\xa2\x0a\x35\xd3\xb6\x19\xe1\xd7\xc8\xcc\x7f\xc0\x0e\xcb\x19\
+\x87\x96\xb1\x36\x99\x40\xde\xbb\xa1\x25\x93\x69\xb3\xf7\x16\xc2\
+\x1d\x62\xfd\xa9\x8c\x8e\xc7\x27\xa2\x30\x74\x97\xb9\x76\x1c\x22\
+\x50\x86\x50\x67\x6f\xb8\x9c\x03\xf7\xed\x90\xbb\xb8\x62\xcd\x23\
+\x3e\x64\xe5\xd4\x0c\x20\x91\x43\x18\x19\xc1\x4d\x31\xdf\x79\xb3\
+\x7a\x90\xf4\x09\x86\x0a\xa8\xbd\x37\x9a\x26\x9d\x97\x15\xbe\x94\
+\x9a\x3b\x3d\x33\x15\x5a\x8a\x8d\x2c\x33\xb5\x45\x48\x26\xa1\x6d\
+\x8c\x25\x99\x91\xc2\x2a\x23\x13\xea\xa5\x68\xdf\xcc\xb7\x39\x92\
+\x2c\x90\xf0\x3b\x2d\x25\x8e\x53\x9e\x06\xab\x2d\xf7\x58\x05\xb4\
+\xe6\xd9\xb9\xbb\xa8\x2a\x56\x29\x63\x13\xc7\xee\xe4\xf7\x1e\x5e\
+\xac\xa0\x37\x4c\x10\x8d\xfb\x60\x57\x10\x58\x2b\xa8\xc2\x8d\xcd\
+\xfd\x88\xe4\x0a\x61\x62\x9b\x35\x12\x91\x10\x8e\x46\x02\x27\x4f\
+\x27\xed\x34\x35\x5d\xe7\xf3\x5f\x9d\x0c\x49\x3c\x5a\x39\x19\xba\
+\xe5\xe3\x53\xaa\xb6\xe2\x12\xca\xba\x04\x29\xfc\x4b\x7a\x4a\x3a\
+\x29\x43\x63\x85\xe3\x69\xa9\x30\x8a\x8f\xfc\x34\xa3\x49\xcb\x50\
+\x91\x4d\xd4\xd2\x0e\x79\x0e\x3a\x75\x73\x85\x72\x31\xc0\xa2\x42\
+\x64\xd8\x0c\x11\x26\xff\xfc\xc9\x08\xc9\x45\x63\x66\x2d\x4d\xb2\
+\x1d\x13\xa4\x34\xc2\x1a\xde\x62\x60\xc1\x53\x2f\x91\xba\xc6\xd6\
+\xde\x75\x20\xdd\xa9\xb9\x4d\x32\x89\x90\x6a\x0c\xef\x6f\x20\xe3\
+\x8f\xb9\x97\x1c\xeb\x88\xa0\x79\x11\x09\x9b\x48\xe2\xec\x8d\x6b\
+\x57\x9b\x9d\x37\x9e\xc6\x92\xe7\x97\x84\xfe\xd2\x4b\xbe\x42\x32\
+\x9a\x45\x22\xd3\xba\x40\x43\x71\xb4\xc0\xec\x3a\xf0\xb5\x29\xed\
+\xef\xfd\xc3\x57\xfa\x20\x66\x6a\x76\xc6\xd7\x46\x44\xa1\x8c\x22\
+\x69\x94\x95\x2c\x0f\xa4\x3c\xb4\x08\xd6\x5e\xe9\x12\x1e\xbe\xf4\
+\xb6\x37\xc0\xb1\x16\x61\x28\xf1\x7c\x60\xe2\x50\xc7\x91\x36\x56\
+\x1a\x24\x73\x12\xb9\x32\x02\xaa\x80\x80\x79\x29\xd3\x48\xd0\x1d\
+\x98\xd1\x35\x3d\xe3\xcb\xfa\xba\x4c\xcb\xbc\x5c\x18\xe9\x40\x09\
+\x66\xc5\x9d\xac\xf8\xa2\x45\xb8\xc3\x1d\xdf\x4a\x24\x97\x56\x20\
+\xc2\xd6\x79\xd9\xa6\xc6\x6c\x2e\x23\x5a\x1b\x1a\x63\x5d\x8a\x97\
+\x76\xe5\xf8\x72\x3b\x1b\xa8\x30\x52\xd9\x6c\x30\x7f\x6e\x0e\x66\
+\x2f\x84\x68\x88\xd8\x1d\x8a\xc0\x12\xb4\xac\x0d\xc2\x4c\x46\x9e\
+\x39\x1f\x3e\xf7\xd2\xe0\xf0\x68\x51\x91\x1f\xf5\xa5\xe8\x0a\xce\
+\x7b\x3b\x4b\x9a\xe2\xaf\x6b\xda\x88\xb9\x8d\xc1\xdb\x27\x47\x2f\
+\x8d\xc8\x7d\xc7\xff\x71\xad\x18\x29\xcf\x76\xdc\xe5\x7f\xa0\xe4\
+\xb5\x42\x74\x6d\xbc\xf0\xf2\x5f\x2e\xb4\xcc\x09\x22\xdc\x85\x53\
+\xf7\xf9\xcd\x39\x60\x09\x18\x9b\xbd\xa7\xf1\x6f\x96\x56\x2c\x5d\
+\xd4\xd4\x75\xdb\xae\x57\xe7\xba\x0b\x35\xd6\x53\xfe\x4a\xcb\x46\
+\x6d\xff\x9b\xa8\xd4\xc7\x18\x89\xbf\xce\x06\xb2\xeb\x56\xb1\xb3\
+\x10\x5b\x64\x2e\xb0\x98\xf2\x61\x37\x36\x32\x2b\x6f\x5a\xbd\xfe\
+\xc5\x77\x8c\xf7\xa9\x54\x99\xb1\xa6\xae\x2e\x60\x8c\xe8\x29\x3c\
+\xcd\xcc\xdf\x97\x32\x91\xfe\x10\x94\x88\xff\xc2\xf7\xa5\xa9\xf7\
+\x4c\x54\xf3\x7d\x69\x55\xdf\x26\x52\x1f\xff\x86\x82\xe8\x74\x71\
+\xc6\x3f\xe5\xa6\xbb\xa7\x68\x26\x2a\xe8\x74\x95\xff\xed\xf0\x54\
+\xd3\xfd\xef\x7f\xc9\xfe\x6f\xe7\xf8\x01\xc3\x58\x74\x3a\x3f\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x0a\xd4\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x4b\x00\x00\x00\x36\x08\x02\x00\x00\x00\x00\x90\xf3\xa2\
+\x00\x00\x0a\x9b\x49\x44\x41\x54\x68\xde\xdd\x9a\x0b\x50\x54\xd7\
+\x19\xc7\x2f\x46\xf0\x81\x28\xf1\xad\xe5\xd1\x56\x66\xd2\xc4\x4e\
+\x1b\x33\x11\x47\x10\x15\x48\x10\x34\x3e\x20\x4b\x80\x05\x44\x01\
+\x83\x84\x19\x47\x1e\x19\xeb\xb4\x55\x5b\xd1\xb1\x06\xd4\xa9\x11\
+\x14\xc4\x68\x66\x92\xce\xf4\x15\x9f\x4d\xad\x02\xc2\xb2\xbc\x41\
+\x44\x44\x79\x28\xa2\x8e\xaf\xc6\x94\x71\x04\x15\x48\xed\x6f\xef\
+\x89\x77\xb6\x0b\xc2\xee\x72\x61\x92\x7c\xf3\xcd\xce\x77\xce\xf9\
+\xce\xf7\xfd\xff\xf7\x9c\x7b\xce\xbd\xe7\xae\xf4\x8d\x2c\xff\xfd\
+\xe1\x8a\x34\x34\x69\x9e\x3d\x7b\xc6\xaf\x72\x29\x85\x21\x2a\x7f\
+\x38\x0c\x61\xd5\xd5\xd5\xd5\xdd\xdd\xad\xfc\x76\x76\x76\x62\x18\
+\x5f\x82\x41\x61\x38\x34\xb3\xf4\x45\x83\x26\x98\x77\xca\x22\xd8\
+\xaa\x8e\x67\x28\x18\x82\x1e\x26\x47\x8e\x1c\x7e\x7d\xd6\x1b\xf3\
+\xbc\x16\x78\x78\x7a\x79\x7a\xce\x0b\xd6\x6a\x0f\x7e\xf6\x59\x43\
+\x73\x33\xa3\x29\x98\x2b\x6c\x19\x5e\x01\x49\x15\x60\x43\xc1\xf0\
+\xe9\xd3\xa7\xa0\x4f\xf9\x70\xc3\x9b\x33\x9d\xb3\x76\xc4\x67\xa6\
+\xae\xf1\x99\xff\xfa\x24\x49\xfa\x99\x8d\x8d\x83\xad\xed\x4f\x5e\
+\x7b\x55\x13\x1d\x9d\xf5\xe9\xa7\xcd\xb0\xed\xee\x56\xc6\x59\x2d\
+\x54\x43\x71\x1f\x8a\x31\x5c\xb7\x3e\x79\x65\x90\x57\x5b\xfd\x5f\
+\xda\x6a\xff\x14\x1d\xb3\x4c\x23\xd9\xd5\x3b\xbb\x1d\x9d\x30\x7d\
+\xcf\xa8\x71\xe1\xd2\x30\x27\x49\x92\x6c\x6c\xa6\x4e\x9d\xba\x7c\
+\xf9\xf2\x9c\x9c\x9c\xf6\xf6\x76\xb5\xee\xcc\xc1\x1d\x43\x11\x59\
+\x8c\xe1\xfa\xc4\x14\x8d\xff\xec\x6b\xfa\x9c\xe6\x82\x03\xa1\x61\
+\x7e\xcb\xa4\x97\xf2\x26\xfe\x68\xe7\x08\x87\x18\x69\x98\xa7\x24\
+\x39\x0d\x1f\xee\xe2\xec\xbc\x78\xf1\xe2\x2d\x5b\xb6\xe4\xe6\xe6\
+\x3e\x79\xf2\x44\xb5\x59\x3a\x04\x9b\x84\x60\x18\xa4\x09\x09\x7d\
+\x67\x6e\x4b\xc9\x27\xcd\xba\xec\xd8\x88\x80\x11\x92\xf4\x8a\xa3\
+\xe3\x34\x17\x97\x45\x1a\xcd\xf6\xbd\x7b\x4b\xab\xab\x3b\x1e\x77\
+\x0c\xc6\x8a\x2a\x0d\x2a\x3d\xb1\x72\x60\x6c\xda\xf4\x5b\xa6\x61\
+\xfc\xca\x25\x4d\xba\xac\x46\x5d\xd6\x07\x51\x4b\x28\x86\x85\x6b\
+\x0d\x94\x8c\x96\x59\xe3\x2d\xe4\x3b\x3d\x4b\x95\x95\x50\xd0\x4b\
+\x4c\x4c\x9c\x3a\x75\x8a\xb7\xaf\x5f\x64\xe0\xfc\xab\x45\xd9\x68\
+\x44\xa0\x97\xaf\xaf\x9f\xab\x8b\x73\x52\x52\x12\x0e\x1d\x1d\x1d\
+\xea\xae\x9f\x83\xcb\xd0\x84\x5e\x72\x72\x32\xc3\x75\xa3\xb5\x75\
+\xc3\xc6\x5f\x07\xf9\xbd\x79\x4d\x7f\x08\xc5\xa0\x78\xbd\xa5\x85\
+\x26\x1c\x70\xc3\xf9\xfb\xc1\xd0\x84\xde\xfa\xf5\xeb\x87\x0f\x1f\
+\x5e\x56\x56\x86\x1d\xb3\x26\x2e\x78\xf1\x9c\x66\xfd\x21\x14\x83\
+\x22\x95\x34\xe1\x80\xdb\xe0\x91\x54\x93\xa1\x09\xbd\x75\xeb\xd6\
+\xd9\xda\xda\x56\x55\x55\x31\x09\xd9\xd6\xe3\xd6\x26\x68\x02\xdc\
+\x9b\x8a\x72\x50\x0c\x8a\x54\xd2\x84\x03\x6e\x38\x0f\x12\x49\x69\
+\x90\x96\x96\x84\x84\x04\x3b\x3b\x3b\xd0\x3f\x7e\xfc\xb8\xb5\xb5\
+\x95\x45\x63\x4d\xdc\x07\x32\xc3\x83\x28\x06\x45\x2a\x69\xc2\x01\
+\x37\x9c\xe9\xa2\x90\x54\x71\x51\x55\x67\x0c\x4d\x46\x2f\x3e\x3e\
+\x7e\xe4\xc8\x91\xe0\x7e\xf4\xe8\xd1\xcd\x9b\x37\x6f\xdd\xba\xc5\
+\x93\x76\xec\xfb\xf1\x9a\x80\x39\x8d\xba\x1c\x14\x83\x22\x95\x34\
+\xe1\x80\x1b\xce\x74\xa1\xa3\xea\x23\x29\xa9\x3e\x7a\x71\x71\x71\
+\xa3\x46\x8d\x02\xf1\xc3\x87\x0f\xaf\x5f\xbf\x7e\xfb\xf6\xed\x1b\
+\x37\x6e\x74\x76\x3e\x8d\x59\xb3\xf6\xdd\x00\xf7\x86\xa2\x83\x28\
+\x06\x45\x2a\x69\xc2\x01\x37\x9c\xe9\x42\x47\xba\xab\x3b\x92\x92\
+\x5a\xf4\xba\xe4\x07\xe8\xd8\xd8\xd8\xd1\xa3\x47\x83\xb5\xad\xad\
+\xad\xa5\xa5\x45\x0c\x11\x04\x9e\x3c\x79\x1c\x13\x1b\x07\xb1\x2b\
+\xba\x6c\xd4\xc0\x30\x36\x8e\x4a\x9a\xc4\x20\xe3\x4c\x17\x3a\xd2\
+\x9d\x20\x84\x12\xfb\xc7\xc0\x49\x4a\x2a\xd2\x8b\x8e\x8e\xb6\xb7\
+\xb7\x07\xe5\x83\x07\x0f\xae\x5e\xbd\xca\xf8\xb4\xca\x72\xed\xda\
+\xb5\x8e\xf6\xf6\xe8\x98\xf7\x0d\x0c\x0b\xb3\x51\x0c\x8a\x54\xd2\
+\x24\x7c\x70\xa6\x0b\x1d\xe9\x4e\x10\x42\xa9\x45\x52\x52\x8b\x5e\
+\x54\x54\xd4\x98\x31\x63\x2a\x2b\x2b\xef\xdf\xbf\xdf\xd4\xd4\xc4\
+\x98\x80\xbe\x45\x16\x8a\x4c\xc2\x55\xd1\xb1\x10\xbb\x5c\x98\x85\
+\x62\x50\xa4\x52\x78\x2a\xce\x14\xe9\x4e\x10\x42\x11\x50\x15\x92\
+\x56\xae\x34\xca\x4a\x20\xe8\x45\x44\x44\x38\x38\x38\x80\xec\xce\
+\x9d\x3b\x57\xae\x5c\x61\x34\x9a\x65\xb9\x2a\x4b\x43\x43\x43\x5b\
+\xdb\x7f\xa2\x56\xc7\x40\xac\xbe\xf0\x00\x8a\x41\x91\x4a\x9a\x84\
+\x8f\xe2\x4f\x77\x82\x10\x8a\x80\x84\x55\x48\x5a\xbd\xf0\x58\xc3\
+\xd0\x84\x9e\x56\xab\x1d\x3b\x76\x6c\x45\x45\x05\xb7\x53\x7d\x7d\
+\x3d\xe3\xd0\x28\x4b\xd3\x73\xb9\x7c\xf9\xf2\xd7\x5f\x3f\x58\xb9\
+\x2a\x3a\x28\x60\xce\xa5\x82\x2c\x14\x83\x22\x95\x34\x29\x6e\x4a\
+\x2f\x82\x10\x8a\x80\x84\x25\xf8\x00\x49\x4a\x03\x9c\x9c\x21\x21\
+\x21\x8e\x8e\x8e\xa0\xe1\x46\xaa\xab\xab\x63\x4c\xae\xc8\xd2\x60\
+\x24\x97\x2e\x5d\xfa\xea\xab\x7f\x47\x46\xad\x0e\xf2\x77\xaf\xcb\
+\x3f\x80\x62\x50\xa4\x92\x26\x63\x4f\xa5\x2f\xa1\x08\x48\x58\x82\
+\x93\x62\x20\xd3\x55\x1a\x08\xbd\xe0\xe0\x60\x10\x94\x97\x97\x73\
+\x0b\xd5\xd6\xd6\x72\xed\x41\x5c\xdf\x43\x68\xba\x77\xf7\x6e\x44\
+\xe4\xaa\xa0\x00\xf7\x8b\xf9\xfb\x51\x0c\x8a\x54\x8a\x5e\x26\x22\
+\x82\xd0\x44\x58\x82\x93\x82\x44\x56\x93\xb4\x60\x96\x0a\xb7\x6e\
+\x59\x0c\xef\x7b\x41\x41\xe3\xc7\x8f\x07\x01\xf7\x4f\x4d\x4d\x0d\
+\x57\xfd\xe2\xc5\x8b\x75\xbd\x09\xad\x77\x6e\xdf\x0e\x8f\x88\x62\
+\x72\xd6\xe6\x1f\x40\x31\x28\x52\x29\x3a\xf6\x14\x11\x8a\x56\x82\
+\x93\x82\x44\xa4\x23\xa9\xc8\x6e\xd1\x74\x35\x97\xa1\x09\x3d\xce\
+\x1a\x26\x4c\x98\xc0\x73\x33\x77\x4e\x75\x75\x35\xd7\xfb\x82\x2c\
+\xb5\xbd\x09\x0e\xdc\x57\xda\xf0\x95\x81\xfe\xee\x17\xf2\xf6\xa3\
+\x18\x14\xa9\x14\x7d\x7b\x8a\x12\x0d\x07\x52\x90\x88\x74\x24\xb5\
+\x82\xa4\x64\xfe\xe4\x54\xe8\x2d\x5d\xba\x74\xe2\xc4\x89\xa5\xa5\
+\xa5\xac\x13\x2c\x7a\x5c\xe9\xf3\xb2\xd4\xbc\x40\xf0\x61\x6b\x0c\
+\xd3\x46\x42\xac\x26\x37\x13\xc5\xa0\x48\xa5\xe8\xde\xab\x28\x31\
+\xf1\x21\x11\xe9\x48\x4a\x6a\x63\x24\xaa\x31\x34\x0e\xba\x64\xc9\
+\x92\x49\x93\x26\x95\x94\x94\x30\x8b\xb8\xb4\x6c\xd0\x95\xfd\x09\
+\x6e\x6c\x78\xa1\x61\x11\xc6\x0c\x29\x52\x49\x53\xbf\xdd\x49\x81\
+\x1b\xe9\x48\x4a\x6a\x00\x58\x44\xb2\x9f\x59\xaa\x4c\x4e\x71\x8b\
+\xfb\xfb\xfb\x4f\x9e\x3c\xb9\xb8\xb8\x98\xf9\x43\x3e\xd6\x3a\x6e\
+\x92\x8a\xfe\x04\x4f\x36\xbc\x90\xd0\x70\x88\x9d\xcf\xcd\x3c\x2f\
+\x33\xa4\x48\xa5\x08\xd2\xb7\x88\x14\x78\x92\x94\xd4\x00\x00\x86\
+\x58\xf0\xcc\x99\xae\x7d\x31\x34\xa6\x87\xe1\xe7\xe7\x37\x65\xca\
+\x14\x72\x30\x79\xf4\x7a\x3d\xd7\x95\x99\x53\x66\x86\xe0\xcc\x66\
+\xf7\x5e\x88\x36\x30\xc0\xbd\x3a\x37\x03\xc5\xa0\x48\xa5\x88\xd3\
+\xaf\x88\x44\x38\x93\x1a\x00\xc0\x00\x8c\x40\xd8\x2f\xc9\x17\x32\
+\x34\xa6\x87\xf8\xfa\xfa\x72\x98\x59\x54\x54\xc4\xb4\xd1\xe9\x74\
+\xa4\x21\x5f\xb1\x79\x52\x58\x58\xc8\x8d\xa4\x09\x0e\x5d\xe1\x3f\
+\xa7\xea\x6c\x26\x8a\x41\x91\x4a\x9a\xcc\x0c\x22\xd2\x91\x1a\x00\
+\xc0\x00\x0c\x90\x04\xb6\xbe\x49\xf6\xce\x50\xa1\x27\x7e\xbd\xbd\
+\xbd\xa7\x4f\x9f\x4e\x5c\x66\x0b\x98\x48\x86\xad\x37\x5b\x0a\x0a\
+\x0a\xd8\xdf\x64\x86\xee\x95\x67\x32\x50\x0c\x8a\x54\xd2\x64\x7e\
+\x1c\x91\x14\x00\xc0\xc0\x06\x12\xc0\x14\x90\x2f\x22\x29\xf5\xbd\
+\xc0\xf0\x9e\xc6\xa5\x72\x72\x72\xe2\xe2\x31\x55\xce\x9d\x3b\x87\
+\x41\x0e\x9d\x25\x92\x9f\x9f\xcf\x0e\xf7\xae\x26\x44\x66\xb8\x0f\
+\xc5\xa0\x48\x25\x4d\x16\x85\x12\xa9\x81\x01\x18\x0c\x80\x01\x4f\
+\xbc\x97\x5a\x36\x4b\x95\x31\xe4\x10\x9a\xe3\x30\x57\x57\xd7\x19\
+\x33\x66\x10\x0e\xc3\xc5\xc5\xc5\xd5\x42\xa1\x8b\x9b\xdb\x0c\x9b\
+\x61\xb6\x11\x1a\xdf\xd2\x2f\xf7\xa2\x18\x14\xa9\xb4\x2e\x1a\xbf\
+\x80\x01\x12\x06\xf0\x00\x69\xd6\x18\x1a\x7f\x12\x11\x2b\x27\x1f\
+\x0f\xc4\x86\xcb\xa6\x84\x21\xf6\xa8\x1a\xcb\x45\xec\x87\xda\xf0\
+\xc8\x65\x8b\x66\x97\xff\x6b\x1f\x8a\x41\xb1\xef\xfd\xb0\x0f\x11\
+\x30\x04\x24\xf1\xc8\x21\xbe\x73\x18\x8f\x96\x42\x47\xea\x79\x08\
+\x6f\xfc\x1d\x53\x95\xb3\xe7\x6f\xcf\x85\x93\x3e\x0c\xf0\x99\x55\
+\xf2\xcf\x8f\x51\x0c\x8a\xe2\x2e\x50\xe5\xc3\x81\xf1\x87\x57\x13\
+\xcc\x52\x4f\x57\xd5\x3f\x1e\x28\x0c\x03\x17\xbb\xd7\x17\x1f\x42\
+\x31\xd4\x62\xd8\xeb\xc3\xc9\xff\x8d\xe1\x37\xcf\x45\x70\x3b\x7c\
+\xf8\xb0\x87\x87\x87\xb7\x8f\x4f\x60\xe0\x0a\xe6\xf7\xbc\xf9\x0b\
+\xe7\x2f\xf4\x59\xe8\xed\xbb\x60\xa1\xcf\x02\x6f\x0c\x6b\x74\xfe\
+\x02\xef\xb7\xfd\xfc\x9d\x9c\x5d\x5f\x1e\x67\xff\xcb\x9f\xff\x14\
+\xc5\xa0\x48\x25\x4d\xd6\xc5\x04\xcc\x02\x19\x18\xf0\x00\x09\x54\
+\x00\x03\x1b\xf0\x50\x10\x3c\xc5\x8c\x35\x9d\xa5\x8c\xf2\x91\x23\
+\x47\xa6\x4d\x9b\xce\x1d\xcc\xc7\xb0\xfd\xdb\xd7\xee\xd8\x10\xfe\
+\xbb\xc4\xf7\x52\x53\x42\xb7\xa5\x84\xa5\x26\x87\xa6\x26\x87\x6d\
+\xb3\x54\x53\xc2\xb6\x26\x85\xa4\xff\x66\xf5\xee\xcd\x6b\x76\xfc\
+\x2a\x0a\xc5\xa0\x48\x25\x4d\x96\x46\x4b\x35\xa8\x0c\x26\x25\x14\
+\x60\xc0\x03\x24\x50\x01\x0c\x6c\xc0\x77\x3d\xff\xa8\xfc\xc2\x95\
+\x06\x83\xcf\x77\xa9\xdb\xb6\x39\x8e\x73\x08\x5a\xe4\x7e\xe1\x4c\
+\xc6\x83\xba\x3f\x37\xe9\x0e\x36\x14\x66\x37\xeb\x73\x9a\xf4\x86\
+\x23\x5d\x0c\xf3\x55\xf8\x37\xea\xb2\x1b\x0b\xb3\x9a\xb1\x8b\x0e\
+\x62\x50\x54\x9a\x2c\x0a\x05\x00\x0c\xc0\x00\x09\x60\xc0\x03\x24\
+\x50\x01\x0c\x6c\x63\x16\xfd\xac\x34\xd8\x9c\x9a\xf8\xbe\xb5\x68\
+\x98\x24\x25\x44\x05\xd4\x9e\xcd\xa8\xcb\xcb\xd4\x1f\x4d\x2b\x39\
+\x9e\x5e\x76\x72\x77\xe9\x89\x5d\x68\xd9\x89\xdd\x43\xa6\xdf\x66\
+\x3c\xb9\x1b\x00\xc0\x00\x0c\x90\x00\x06\x3c\x40\x02\x55\xcc\xcc\
+\xbe\x56\x1a\x85\xa4\x72\xbc\x2b\x8a\xa7\x4e\xfd\xc3\xc9\xe5\xc7\
+\x53\x26\x8c\xd9\xbf\x23\xa1\xb9\xf8\xd0\xf9\xd3\x7b\x8b\x8f\xa7\
+\x97\x9f\xda\x83\x92\x4f\x18\x83\xad\x4a\x22\x52\x03\x00\x18\x80\
+\x01\x12\xc0\x80\x27\xf8\x28\x87\xc8\x26\x2b\x65\x2f\x3b\xbe\x52\
+\xc3\x25\x11\xcb\x20\x87\xd3\xbf\xdf\xba\x6d\xd8\x4b\xb6\x73\xdf\
+\x70\x3b\xfd\x79\x6a\x63\x51\x4e\xe9\xc9\x5d\xc5\xf2\x60\x96\x0d\
+\xf2\x60\xca\xc1\x0d\x43\x47\x3a\x92\x92\x1a\x00\xc0\x00\x0c\x90\
+\x00\x26\x16\xe4\x3e\xfe\xa9\xd2\xcf\x93\xb7\x98\xb4\xe2\xde\xe5\
+\xfc\x7a\xd9\xf2\x20\x1b\x49\x8a\x0d\x7b\xab\xea\xf4\xc7\x17\xf3\
+\x32\x75\x47\xd3\xf4\xc7\xd3\x4b\x4e\x90\x7e\x77\xf1\x89\x5d\x18\
+\x2a\x2a\x01\x09\x8b\x41\x0a\x12\x91\x8e\xa4\xa4\x06\x00\x30\x00\
+\x23\xd6\x45\x31\x2d\x2d\x7e\xf2\xee\xf5\xe0\x50\xcc\x81\xdc\xdc\
+\xbc\x19\x6e\xaf\x8c\x1f\x37\x2a\x7d\x73\x6c\x7d\x61\x76\xc5\x97\
+\x7f\x2c\xf8\xe2\x23\x40\x00\x88\x5f\xfd\xf1\x5d\x06\x64\x03\x53\
+\x82\x28\x01\x09\x4e\x0a\x12\x91\x8e\xa4\xa4\x06\x80\x72\x1a\x66\
+\xce\x11\xa3\x64\xe9\x73\x83\xe1\x86\xee\xea\x4a\x4b\xdf\x65\x37\
+\x62\xe4\xac\x99\xae\x47\x3f\xd9\x4c\xfa\xa2\x63\x06\x28\xfc\x16\
+\x1d\x4f\xd3\x1d\x4b\xd3\x71\xd5\xad\xd6\x63\x69\x04\x51\x02\x12\
+\x9c\x14\x24\x22\x1d\x49\xc5\xdf\x8b\x2c\x7a\xde\xb2\xec\x24\xca\
+\x78\xd2\xde\xbb\x77\x97\xf7\x74\x76\x21\xed\x0a\xaf\xe2\x93\x7b\
+\xce\x9f\xcd\xc8\xff\xfb\xce\x73\x5f\x7c\xa4\x3b\x96\x5e\x78\x34\
+\x0d\xc5\xb0\x48\x95\x5e\x04\x21\x14\x01\x09\x4b\x70\x52\x90\x88\
+\x74\x66\x4e\xcb\x01\x9d\x79\x1b\x7f\x27\x14\x93\x96\xf7\xd2\xd7\
+\x66\xfe\xc2\xc1\xde\x6e\xeb\x86\x48\x0e\xd1\x4a\x4f\xed\xc9\xfd\
+\xeb\x1f\xc0\x87\xe6\xfd\x6d\xa7\x30\xcc\x51\xc5\x99\xee\x04\x21\
+\x14\x01\x09\x4b\x70\x52\x28\xcb\xbb\x15\x27\xdf\x16\x9f\xea\xf7\
+\x5c\x69\x29\xee\xcb\xc8\x1c\x6d\xef\xf0\xaa\xdb\xb4\xcf\x33\x37\
+\x5e\x38\x77\xa0\x42\x7e\x09\xac\x3a\x9b\x51\x69\xb6\x1a\x9c\xcf\
+\xec\xa3\x23\xdd\x09\x42\x28\x02\x12\x56\x5c\xc7\x81\xfc\xaf\xcf\
+\xfa\x2f\x33\xa2\x97\x32\x69\xf9\x30\xb6\x6a\x75\x0c\x33\x6a\xf9\
+\xa2\xd9\xdb\x37\x46\x6e\x4a\x0a\xd9\x9c\x1c\xba\x25\x39\xcc\x4c\
+\xc5\x99\x2e\x74\xa4\x3b\x41\x08\x45\x40\xe3\x69\x69\xf5\xb7\x6a\
+\x49\x95\x97\x17\xfe\xe8\x23\x1e\x83\x38\x2f\xf2\xf1\x79\x7b\xee\
+\x5c\x4f\x4f\x4f\x2f\x0f\x8f\x79\x1e\x1e\x5e\x66\xeb\x3c\xba\xd0\
+\x91\xee\xe2\xbf\x1b\xf2\xc2\xd6\x39\xf0\xd7\x37\x15\xbe\xe3\x9b\
+\x7c\x8a\x1a\x20\x20\x11\x41\xc5\x3f\x10\x49\x2a\xbe\x98\x99\xbc\
+\x89\x76\x5b\x28\xaa\xbf\x79\x0f\xc5\x7f\x13\xbf\x0b\xf2\x3f\x84\
+\xe7\xbe\xe1\x71\xc1\x1b\xd4\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x07\
+\x09\x85\x57\x87\
+\x00\x63\
+\x00\x61\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0c\x98\x89\x87\
+\x00\x68\
+\x00\x6f\x00\x75\x00\x73\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x05\x87\x5a\x67\
+\x00\x62\
+\x00\x6f\x00\x61\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x02\
+\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x18\x77\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x97\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/draganddrop/draggableicons/images/boat.png b/examples/draganddrop/draggableicons/images/boat.png
new file mode 100644
index 0000000..46c894f
Binary files /dev/null and b/examples/draganddrop/draggableicons/images/boat.png differ
diff --git a/examples/draganddrop/draggableicons/images/car.png b/examples/draganddrop/draggableicons/images/car.png
new file mode 100644
index 0000000..3cb35e5
Binary files /dev/null and b/examples/draganddrop/draggableicons/images/car.png differ
diff --git a/examples/draganddrop/draggableicons/images/house.png b/examples/draganddrop/draggableicons/images/house.png
new file mode 100644
index 0000000..ee9d5b1
Binary files /dev/null and b/examples/draganddrop/draggableicons/images/house.png differ
diff --git a/examples/draganddrop/draggabletext/draggabletext.py b/examples/draganddrop/draggabletext/draggabletext.py
new file mode 100755
index 0000000..e0268b6
--- /dev/null
+++ b/examples/draganddrop/draggabletext/draggabletext.py
@@ -0,0 +1,155 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFile, QIODevice, QMimeData, QPoint, Qt, QTextStream
+from PyQt5.QtGui import QDrag, QPalette, QPixmap
+from PyQt5.QtWidgets import QApplication, QFrame, QLabel, QWidget
+
+import draggabletext_rc
+
+
+class DragLabel(QLabel):
+    def __init__(self, text, parent):
+        super(DragLabel, self).__init__(text, parent)
+
+        self.setAutoFillBackground(True)
+        self.setFrameShape(QFrame.Panel)
+        self.setFrameShadow(QFrame.Raised)
+
+    def mousePressEvent(self, event):
+        hotSpot = event.pos()
+
+        mimeData = QMimeData()
+        mimeData.setText(self.text())
+        mimeData.setData('application/x-hotspot',
+                '%d %d' % (hotSpot.x(), hotSpot.y()))
+
+        pixmap = QPixmap(self.size())
+        self.render(pixmap)
+
+        drag = QDrag(self)
+        drag.setMimeData(mimeData)
+        drag.setPixmap(pixmap)
+        drag.setHotSpot(hotSpot)
+
+        dropAction = drag.exec_(Qt.CopyAction | Qt.MoveAction, Qt.CopyAction)
+
+        if dropAction == Qt.MoveAction:
+            self.close()
+            self.update()
+
+
+class DragWidget(QWidget):
+    def __init__(self, parent=None):
+        super(DragWidget, self).__init__(parent)
+
+        dictionaryFile = QFile(':/dictionary/words.txt')
+        dictionaryFile.open(QIODevice.ReadOnly)
+
+        x = 5
+        y = 5
+
+        for word in QTextStream(dictionaryFile).readAll().split():
+            wordLabel = DragLabel(word, self)
+            wordLabel.move(x, y)
+            wordLabel.show()
+            x += wordLabel.width() + 2
+            if x >= 195:
+                x = 5
+                y += wordLabel.height() + 2
+
+        newPalette = self.palette()
+        newPalette.setColor(QPalette.Window, Qt.white)
+        self.setPalette(newPalette)
+
+        self.setAcceptDrops(True)
+        self.setMinimumSize(400, max(200, y))
+        self.setWindowTitle("Draggable Text")
+
+    def dragEnterEvent(self, event):
+        if event.mimeData().hasText():
+            if event.source() in self.children():
+                event.setDropAction(Qt.MoveAction)
+                event.accept()
+            else:
+                event.acceptProposedAction()
+        else:
+            event.ignore()
+
+    def dropEvent(self, event):
+        if event.mimeData().hasText():
+            mime = event.mimeData()
+            pieces = mime.text().split()
+            position = event.pos()
+            hotSpot = QPoint()
+
+            hotSpotPos = mime.data('application/x-hotspot').split(' ')
+            if len(hotSpotPos) == 2:
+               hotSpot.setX(hotSpotPos[0].toInt()[0])
+               hotSpot.setY(hotSpotPos[1].toInt()[0])
+
+            for piece in pieces:
+                newLabel = DragLabel(piece, self)
+                newLabel.move(position - hotSpot)
+                newLabel.show()
+
+                position += QPoint(newLabel.width(), 0)
+
+            if event.source() in self.children():
+                event.setDropAction(Qt.MoveAction)
+                event.accept()
+            else:
+                event.acceptProposedAction()
+        else:
+            event.ignore()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = DragWidget()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/draganddrop/draggabletext/draggabletext.qrc b/examples/draganddrop/draggabletext/draggabletext.qrc
new file mode 100644
index 0000000..b72217d
--- /dev/null
+++ b/examples/draganddrop/draggabletext/draggabletext.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/dictionary">
+   <file>words.txt</file>
+</qresource>
+</RCC>
diff --git a/examples/draganddrop/draggabletext/draggabletext_rc.py b/examples/draganddrop/draggabletext/draggabletext_rc.py
new file mode 100644
index 0000000..dd35bdb
--- /dev/null
+++ b/examples/draganddrop/draggabletext/draggabletext_rc.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sat May 4 16:59:59 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x00\xf7\
+\x51\
+\x74\x0a\x51\x75\x61\x72\x74\x65\x72\x6c\x79\x0a\x69\x73\x0a\x61\
+\x0a\x70\x61\x70\x65\x72\x0a\x62\x61\x73\x65\x64\x0a\x6e\x65\x77\
+\x73\x6c\x65\x74\x74\x65\x72\x0a\x65\x78\x63\x6c\x75\x73\x69\x76\
+\x65\x6c\x79\x0a\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x0a\x74\x6f\
+\x0a\x51\x74\x0a\x63\x75\x73\x74\x6f\x6d\x65\x72\x73\x0a\x45\x76\
+\x65\x72\x79\x0a\x71\x75\x61\x72\x74\x65\x72\x0a\x77\x65\x0a\x6d\
+\x61\x69\x6c\x0a\x6f\x75\x74\x0a\x61\x6e\x0a\x69\x73\x73\x75\x65\
+\x0a\x74\x68\x61\x74\x0a\x77\x65\x0a\x68\x6f\x70\x65\x0a\x77\x69\
+\x6c\x6c\x0a\x62\x72\x69\x6e\x67\x0a\x61\x64\x64\x65\x64\x0a\x69\
+\x6e\x73\x69\x67\x68\x74\x0a\x61\x6e\x64\x0a\x70\x6c\x65\x61\x73\
+\x75\x72\x65\x0a\x74\x6f\x0a\x79\x6f\x75\x72\x0a\x51\x74\x0a\x70\
+\x72\x6f\x67\x72\x61\x6d\x6d\x69\x6e\x67\x0a\x77\x69\x74\x68\x0a\
+\x68\x69\x67\x68\x0a\x71\x75\x61\x6c\x69\x74\x79\x0a\x74\x65\x63\
+\x68\x6e\x69\x63\x61\x6c\x0a\x61\x72\x74\x69\x63\x6c\x65\x73\x0a\
+\x77\x72\x69\x74\x74\x65\x6e\x0a\x62\x79\x0a\x51\x74\x0a\x65\x78\
+\x70\x65\x72\x74\x73\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x0a\
+\x0b\x0b\x17\xd9\
+\x00\x64\
+\x00\x69\x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x61\x00\x72\x00\x79\
+\x00\x09\
+\x08\xb6\xa7\x34\
+\x00\x77\
+\x00\x6f\x00\x72\x00\x64\x00\x73\x00\x2e\x00\x74\x00\x78\x00\x74\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/draganddrop/draggabletext/words.txt b/examples/draganddrop/draggabletext/words.txt
new file mode 100644
index 0000000..19b8b03
--- /dev/null
+++ b/examples/draganddrop/draggabletext/words.txt
@@ -0,0 +1,41 @@
+Qt
+Quarterly
+is
+a
+paper
+based
+newsletter
+exclusively
+available
+to
+Qt
+customers
+Every
+quarter
+we
+mail
+out
+an
+issue
+that
+we
+hope
+will
+bring
+added
+insight
+and
+pleasure
+to
+your
+Qt
+programming
+with
+high
+quality
+technical
+articles
+written
+by
+Qt
+experts
diff --git a/examples/draganddrop/dropsite.py b/examples/draganddrop/dropsite.py
new file mode 100755
index 0000000..e81403d
--- /dev/null
+++ b/examples/draganddrop/dropsite.py
@@ -0,0 +1,180 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtSignal, QMimeData, Qt
+from PyQt5.QtGui import QPalette, QPixmap
+from PyQt5.QtWidgets import (QAbstractItemView, QApplication, QDialogButtonBox,
+        QFrame, QLabel, QPushButton, QTableWidget, QTableWidgetItem,
+        QVBoxLayout, QWidget)
+
+
+class DropArea(QLabel):
+
+    changed = pyqtSignal(QMimeData)
+
+    def __init__(self, parent = None):
+        super(DropArea, self).__init__(parent)
+
+        self.setMinimumSize(200, 200)
+        self.setFrameStyle(QFrame.Sunken | QFrame.StyledPanel)
+        self.setAlignment(Qt.AlignCenter)
+        self.setAcceptDrops(True)
+        self.setAutoFillBackground(True)
+        self.clear()
+
+    def dragEnterEvent(self, event):
+        self.setText("<drop content>")
+        self.setBackgroundRole(QPalette.Highlight)
+        event.acceptProposedAction()
+        self.changed.emit(event.mimeData())
+
+    def dragMoveEvent(self, event):
+        event.acceptProposedAction()
+
+    def dropEvent(self, event):
+        mimeData = event.mimeData()
+        if mimeData.hasImage():
+            self.setPixmap(QPixmap(mimeData.imageData()))
+        elif mimeData.hasHtml():
+            self.setText(mimeData.html())
+            self.setTextFormat(Qt.RichText)
+        elif mimeData.hasText():
+            self.setText(mimeData.text())
+            self.setTextFormat(Qt.PlainText)
+        elif mimeData.hasUrls():
+            self.setText("\n".join([url.path() for url in mimeData.urls()]))
+        else:
+            self.setText("Cannot display data")
+
+        self.setBackgroundRole(QPalette.Dark)
+        event.acceptProposedAction()
+
+    def dragLeaveEvent(self, event):
+        self.clear()
+        event.accept()
+
+    def clear(self):
+        self.setText("<drop content>")
+        self.setBackgroundRole(QPalette.Dark)
+        self.changed.emit(None)
+
+
+class DropSiteWindow(QWidget):
+
+    def __init__(self):
+        super(DropSiteWindow, self).__init__()
+
+        self.abstractLabel = QLabel(
+                "This example accepts drags from other applications and "
+                "displays the MIME types provided by the drag object.")
+        self.abstractLabel.setWordWrap(True)
+        self.abstractLabel.adjustSize()
+
+        self.dropArea = DropArea()
+        self.dropArea.changed.connect(self.updateFormatsTable)
+
+        self.formatsTable = QTableWidget()
+        self.formatsTable.setColumnCount(2)
+        self.formatsTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
+        self.formatsTable.setHorizontalHeaderLabels(["Format", "Content"])
+        self.formatsTable.horizontalHeader().setStretchLastSection(True)
+
+        self.clearButton = QPushButton("Clear")
+        self.quitButton = QPushButton("Quit")
+
+        self.buttonBox = QDialogButtonBox()
+        self.buttonBox.addButton(self.clearButton, QDialogButtonBox.ActionRole)
+        self.buttonBox.addButton(self.quitButton, QDialogButtonBox.RejectRole)
+
+        self.quitButton.pressed.connect(self.close)
+        self.clearButton.pressed.connect(self.dropArea.clear)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.abstractLabel)
+        mainLayout.addWidget(self.dropArea)
+        mainLayout.addWidget(self.formatsTable)
+        mainLayout.addWidget(self.buttonBox)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Drop Site")
+        self.setMinimumSize(350, 500)
+
+    def updateFormatsTable(self, mimeData=None):
+        self.formatsTable.setRowCount(0)
+
+        if mimeData is None:
+            return
+
+        for format in mimeData.formats():
+            formatItem = QTableWidgetItem(format)
+            formatItem.setFlags(Qt.ItemIsEnabled)
+            formatItem.setTextAlignment(Qt.AlignTop | Qt.AlignLeft)
+
+            if format == 'text/plain':
+                text = mimeData.text().strip()
+            elif format == 'text/html':
+                text = mimeData.html().strip()
+            elif format == 'text/uri-list':
+                text = " ".join([url.toString() for url in mimeData.urls()])
+            else:
+                text = " ".join(["%02X" % ord(datum) for datum in mimeData.data(format)])
+
+            row = self.formatsTable.rowCount()
+            self.formatsTable.insertRow(row)
+            self.formatsTable.setItem(row, 0, QTableWidgetItem(format))
+            self.formatsTable.setItem(row, 1, QTableWidgetItem(text))
+
+        self.formatsTable.resizeColumnToContents(0)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = DropSiteWindow()
+    window.show()
+    sys.exit(app.exec_())
+
diff --git a/examples/draganddrop/fridgemagnets/fridgemagnets.py b/examples/draganddrop/fridgemagnets/fridgemagnets.py
new file mode 100755
index 0000000..fa49dd8
--- /dev/null
+++ b/examples/draganddrop/fridgemagnets/fridgemagnets.py
@@ -0,0 +1,196 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QByteArray, QDataStream, QFile, QIODevice, QMimeData,
+        QPoint, QRect, QRectF, Qt, QTextStream)
+from PyQt5.QtGui import (QDrag, QFont, QFontMetrics, QImage, QPainter,
+        QPalette, QPixmap, qRgba)
+from PyQt5.QtWidgets import QApplication, QLabel, QWidget
+
+import fridgemagnets_rc
+
+
+class DragLabel(QLabel):
+    def __init__(self, text, parent):
+        super(DragLabel, self).__init__(parent)
+
+        metric = QFontMetrics(self.font())
+        size = metric.size(Qt.TextSingleLine, text)
+
+        image = QImage(size.width() + 12, size.height() + 12,
+                QImage.Format_ARGB32_Premultiplied)
+        image.fill(qRgba(0, 0, 0, 0))
+
+        font = QFont()
+        font.setStyleStrategy(QFont.ForceOutline)
+
+        painter = QPainter()
+        painter.begin(image)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.setBrush(Qt.white)
+        painter.drawRoundedRect(
+                QRectF(0.5, 0.5, image.width()-1, image.height()-1),
+                25, 25, Qt.RelativeSize)
+
+        painter.setFont(font)
+        painter.setBrush(Qt.black)
+        painter.drawText(QRect(QPoint(6, 6), size), Qt.AlignCenter, text)
+        painter.end()
+
+        self.setPixmap(QPixmap.fromImage(image))
+        self.labelText = text
+
+    def mousePressEvent(self, event):
+        itemData = QByteArray()
+        dataStream = QDataStream(itemData, QIODevice.WriteOnly)
+        dataStream << QByteArray(self.labelText) << QPoint(event.pos() - self.rect().topLeft())
+
+        mimeData = QMimeData()
+        mimeData.setData('application/x-fridgemagnet', itemData)
+        mimeData.setText(self.labelText)
+
+        drag = QDrag(self)
+        drag.setMimeData(mimeData)
+        drag.setHotSpot(event.pos() - self.rect().topLeft())
+        drag.setPixmap(self.pixmap())
+
+        self.hide()
+
+        if drag.exec_(Qt.MoveAction | Qt.CopyAction, Qt.CopyAction) == Qt.MoveAction:
+            self.close()
+        else:
+            self.show()
+
+
+class DragWidget(QWidget):
+    def __init__(self, parent=None):
+        super(DragWidget, self).__init__(parent)
+
+        dictionaryFile = QFile(':/dictionary/words.txt')
+        dictionaryFile.open(QFile.ReadOnly)
+
+        x = 5
+        y = 5
+
+        for word in QTextStream(dictionaryFile).readAll().split():
+            wordLabel = DragLabel(word, self)
+            wordLabel.move(x, y)
+            wordLabel.show()
+            x += wordLabel.width() + 2
+            if x >= 245:
+                x = 5
+                y += wordLabel.height() + 2
+
+        newPalette = self.palette()
+        newPalette.setColor(QPalette.Window, Qt.white)
+        self.setPalette(newPalette)
+
+        self.setMinimumSize(400, max(200, y))
+        self.setWindowTitle("Fridge Magnets")
+        self.setAcceptDrops(True)
+
+    def dragEnterEvent(self, event):
+        if event.mimeData().hasFormat('application/x-fridgemagnet'):
+            if event.source() in self.children():
+                event.setDropAction(Qt.MoveAction)
+                event.accept()
+            else:
+                event.acceptProposedAction()
+        elif event.mimeData().hasText():
+            event.acceptProposedAction()
+        else:
+            event.ignore()
+
+    dragMoveEvent = dragEnterEvent
+
+    def dropEvent(self, event):
+        if event.mimeData().hasFormat('application/x-fridgemagnet'):
+            mime = event.mimeData()
+            itemData = mime.data('application/x-fridgemagnet')
+            dataStream = QDataStream(itemData, QIODevice.ReadOnly)
+
+            text = QByteArray()
+            offset = QPoint()
+            dataStream >> text >> offset
+
+            try:
+                # Python v3.
+                text = str(text, encoding='latin1')
+            except TypeError:
+                # Python v2.
+                text = str(text)
+
+            newLabel = DragLabel(text, self)
+            newLabel.move(event.pos() - offset)
+            newLabel.show()
+
+            if event.source() in self.children():
+                event.setDropAction(Qt.MoveAction)
+                event.accept()
+            else:
+                event.acceptProposedAction()
+        elif event.mimeData().hasText():
+            pieces = event.mimeData().text().split()
+            position = event.pos()
+
+            for piece in pieces:
+                newLabel = DragLabel(piece, self)
+                newLabel.move(position)
+                newLabel.show()
+
+                position += QPoint(newLabel.width(), 0)
+
+            event.acceptProposedAction()
+        else:
+            event.ignore()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = DragWidget()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/draganddrop/fridgemagnets/fridgemagnets.qrc b/examples/draganddrop/fridgemagnets/fridgemagnets.qrc
new file mode 100644
index 0000000..b72217d
--- /dev/null
+++ b/examples/draganddrop/fridgemagnets/fridgemagnets.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/dictionary">
+   <file>words.txt</file>
+</qresource>
+</RCC>
diff --git a/examples/draganddrop/fridgemagnets/fridgemagnets_rc.py b/examples/draganddrop/fridgemagnets/fridgemagnets_rc.py
new file mode 100644
index 0000000..13889e5
--- /dev/null
+++ b/examples/draganddrop/fridgemagnets/fridgemagnets_rc.py
@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sat May 4 17:11:25 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x01\x16\
+\x43\
+\x6f\x6c\x6f\x72\x6c\x65\x73\x73\x0a\x67\x72\x65\x65\x6e\x0a\x69\
+\x64\x65\x61\x73\x0a\x73\x6c\x65\x65\x70\x0a\x66\x75\x72\x69\x6f\
+\x75\x73\x6c\x79\x0a\x41\x0a\x63\x6f\x6c\x6f\x72\x6c\x65\x73\x73\
+\x0a\x67\x72\x65\x65\x6e\x0a\x69\x64\x65\x61\x0a\x69\x73\x0a\x61\
+\x0a\x6e\x65\x77\x0a\x75\x6e\x74\x72\x69\x65\x64\x0a\x69\x64\x65\
+\x61\x0a\x74\x68\x61\x74\x0a\x69\x73\x0a\x77\x69\x74\x68\x6f\x75\
+\x74\x0a\x76\x69\x76\x69\x64\x6e\x65\x73\x73\x0a\x64\x75\x6c\x6c\
+\x0a\x61\x6e\x64\x0a\x75\x6e\x65\x78\x63\x69\x74\x69\x6e\x67\x0a\
+\x54\x6f\x0a\x73\x6c\x65\x65\x70\x0a\x66\x75\x72\x69\x6f\x75\x73\
+\x6c\x79\x0a\x6d\x61\x79\x0a\x73\x65\x65\x6d\x0a\x61\x0a\x70\x75\
+\x7a\x7a\x6c\x69\x6e\x67\x0a\x74\x75\x72\x6e\x0a\x6f\x66\x0a\x70\
+\x68\x72\x61\x73\x65\x0a\x62\x75\x74\x0a\x74\x68\x65\x0a\x6d\x69\
+\x6e\x64\x0a\x69\x6e\x0a\x73\x6c\x65\x65\x70\x0a\x6f\x66\x74\x65\
+\x6e\x0a\x69\x6e\x64\x65\x65\x64\x0a\x6d\x6f\x76\x65\x73\x0a\x66\
+\x75\x72\x69\x6f\x75\x73\x6c\x79\x0a\x77\x69\x74\x68\x0a\x69\x64\
+\x65\x61\x73\x0a\x61\x6e\x64\x0a\x69\x6d\x61\x67\x65\x73\x0a\x66\
+\x6c\x69\x63\x6b\x65\x72\x69\x6e\x67\x0a\x69\x6e\x0a\x61\x6e\x64\
+\x0a\x6f\x75\x74\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x0a\
+\x0b\x0b\x17\xd9\
+\x00\x64\
+\x00\x69\x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x61\x00\x72\x00\x79\
+\x00\x09\
+\x08\xb6\xa7\x34\
+\x00\x77\
+\x00\x6f\x00\x72\x00\x64\x00\x73\x00\x2e\x00\x74\x00\x78\x00\x74\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/draganddrop/fridgemagnets/words.txt b/examples/draganddrop/fridgemagnets/words.txt
new file mode 100644
index 0000000..a7e1632
--- /dev/null
+++ b/examples/draganddrop/fridgemagnets/words.txt
@@ -0,0 +1,48 @@
+Colorless
+green
+ideas
+sleep
+furiously
+A
+colorless
+green
+idea
+is
+a
+new
+untried
+idea
+that
+is
+without
+vividness
+dull
+and
+unexciting
+To
+sleep
+furiously
+may
+seem
+a
+puzzling
+turn
+of
+phrase
+but
+the
+mind
+in
+sleep
+often
+indeed
+moves
+furiously
+with
+ideas
+and
+images
+flickering
+in
+and
+out
diff --git a/examples/draganddrop/puzzle/example.jpg b/examples/draganddrop/puzzle/example.jpg
new file mode 100644
index 0000000..e09fb70
Binary files /dev/null and b/examples/draganddrop/puzzle/example.jpg differ
diff --git a/examples/draganddrop/puzzle/puzzle.py b/examples/draganddrop/puzzle/puzzle.py
new file mode 100755
index 0000000..1a50cb8
--- /dev/null
+++ b/examples/draganddrop/puzzle/puzzle.py
@@ -0,0 +1,367 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import random
+
+from PyQt5.QtCore import (pyqtSignal, QByteArray, QDataStream, QIODevice,
+        QMimeData, QPoint, QRect, QSize, Qt)
+from PyQt5.QtGui import QDrag, QColor, QCursor, QIcon, QPainter, QPixmap
+from PyQt5.QtWidgets import (QApplication, QFileDialog, QFrame, QHBoxLayout,
+        QListView, QListWidget, QListWidgetItem, QMainWindow, QMessageBox,
+        QSizePolicy, QWidget)
+
+import puzzle_rc
+
+
+class PuzzleWidget(QWidget):
+
+    puzzleCompleted = pyqtSignal()
+
+    def __init__(self, parent=None):
+        super(PuzzleWidget, self).__init__(parent)
+
+        self.piecePixmaps = []
+        self.pieceRects = []
+        self.pieceLocations = []
+        self.highlightedRect = QRect()
+        self.inPlace = 0
+
+        self.setAcceptDrops(True)
+        self.setMinimumSize(400, 400)
+        self.setMaximumSize(400, 400)
+
+    def clear(self):
+        self.pieceLocations = []
+        self.piecePixmaps = []
+        self.pieceRects = []
+        self.highlightedRect = QRect()
+        self.inPlace = 0
+        self.update()
+
+    def dragEnterEvent(self, event):
+        if event.mimeData().hasFormat('image/x-puzzle-piece'):
+            event.accept()
+        else:
+            event.ignore()
+
+    def dragLeaveEvent(self, event):
+        updateRect = self.highlightedRect
+        self.highlightedRect = QRect()
+        self.update(updateRect)
+        event.accept()
+
+    def dragMoveEvent(self, event):
+        updateRect = self.highlightedRect.united(self.targetSquare(event.pos()))
+
+        if event.mimeData().hasFormat('image/x-puzzle-piece') and self.findPiece(self.targetSquare(event.pos())) == -1:
+            self.highlightedRect = self.targetSquare(event.pos())
+            event.setDropAction(Qt.MoveAction)
+            event.accept()
+        else:
+            self.highlightedRect = QRect()
+            event.ignore()
+
+        self.update(updateRect)
+
+    def dropEvent(self, event):
+        if event.mimeData().hasFormat('image/x-puzzle-piece') and self.findPiece(self.targetSquare(event.pos())) == -1:
+            pieceData = event.mimeData().data('image/x-puzzle-piece')
+            dataStream = QDataStream(pieceData, QIODevice.ReadOnly)
+            square = self.targetSquare(event.pos())
+            pixmap = QPixmap()
+            location = QPoint()
+            dataStream >> pixmap >> location
+
+            self.pieceLocations.append(location)
+            self.piecePixmaps.append(pixmap)
+            self.pieceRects.append(square)
+
+            self.hightlightedRect = QRect()
+            self.update(square)
+
+            event.setDropAction(Qt.MoveAction)
+            event.accept()
+
+            if location == QPoint(square.x() / 80, square.y() / 80):
+                self.inPlace += 1
+                if self.inPlace == 25:
+                    self.puzzleCompleted.emit()
+        else:
+            self.highlightedRect = QRect()
+            event.ignore()
+
+    def findPiece(self, pieceRect):
+        try:
+            return self.pieceRects.index(pieceRect)
+        except ValueError:
+            return -1
+
+    def mousePressEvent(self, event):
+        square = self.targetSquare(event.pos())
+        found = self.findPiece(square)
+
+        if found == -1:
+            return
+
+        location = self.pieceLocations[found]
+        pixmap = self.piecePixmaps[found]
+        del self.pieceLocations[found]
+        del self.piecePixmaps[found]
+        del self.pieceRects[found]
+
+        if location == QPoint(square.x() / 80, square.y() / 80):
+            self.inPlace -= 1
+
+        self.update(square)
+
+        itemData = QByteArray()
+        dataStream = QDataStream(itemData, QIODevice.WriteOnly)
+
+        dataStream << pixmap << location
+
+        mimeData = QMimeData()
+        mimeData.setData('image/x-puzzle-piece', itemData)
+
+        drag = QDrag(self)
+        drag.setMimeData(mimeData)
+        drag.setHotSpot(event.pos() - square.topLeft())
+        drag.setPixmap(pixmap)
+
+        if drag.exec_(Qt.MoveAction) != Qt.MoveAction:
+            self.pieceLocations.insert(found, location)
+            self.piecePixmaps.insert(found, pixmap)
+            self.pieceRects.insert(found, square)
+            self.update(self.targetSquare(event.pos()))
+
+            if location == QPoint(square.x() / 80, square.y() / 80):
+                self.inPlace += 1
+
+    def paintEvent(self, event):
+        painter = QPainter()
+        painter.begin(self)
+        painter.fillRect(event.rect(), Qt.white)
+
+        if self.highlightedRect.isValid():
+            painter.setBrush(QColor("#ffcccc"))
+            painter.setPen(Qt.NoPen)
+            painter.drawRect(self.highlightedRect.adjusted(0, 0, -1, -1))
+
+        for rect, pixmap in zip(self.pieceRects, self.piecePixmaps):
+            painter.drawPixmap(rect, pixmap)
+
+        painter.end()
+
+    def targetSquare(self, position):
+        return QRect(position.x() // 80 * 80, position.y() // 80 * 80, 80, 80)
+
+
+class PiecesList(QListWidget):
+    def __init__(self, parent=None):
+        super(PiecesList, self).__init__(parent)
+
+        self.setDragEnabled(True)
+        self.setViewMode(QListView.IconMode)
+        self.setIconSize(QSize(60, 60))
+        self.setSpacing(10)
+        self.setAcceptDrops(True)
+        self.setDropIndicatorShown(True)
+
+    def dragEnterEvent(self, event):
+        if event.mimeData().hasFormat('image/x-puzzle-piece'):
+            event.accept()
+        else:
+            event.ignore()
+
+    def dragMoveEvent(self, event):
+        if event.mimeData().hasFormat('image/x-puzzle-piece'):
+            event.setDropAction(Qt.MoveAction)
+            event.accept()
+        else:
+            event.ignore()
+
+    def dropEvent(self, event):
+        if event.mimeData().hasFormat('image/x-puzzle-piece'):
+            pieceData = event.mimeData().data('image/x-puzzle-piece')
+            dataStream = QDataStream(pieceData, QIODevice.ReadOnly)
+            pixmap = QPixmap()
+            location = QPoint()
+            dataStream >> pixmap >> location
+
+            self.addPiece(pixmap, location)
+
+            event.setDropAction(Qt.MoveAction)
+            event.accept()
+        else:
+            event.ignore()
+
+    def addPiece(self, pixmap, location):
+        pieceItem = QListWidgetItem(self)
+        pieceItem.setIcon(QIcon(pixmap))
+        pieceItem.setData(Qt.UserRole, pixmap)
+        pieceItem.setData(Qt.UserRole+1, location)
+        pieceItem.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled)
+
+    def startDrag(self, supportedActions):
+        item = self.currentItem()
+
+        itemData = QByteArray()
+        dataStream = QDataStream(itemData, QIODevice.WriteOnly)
+        pixmap = QPixmap(item.data(Qt.UserRole))
+        location = item.data(Qt.UserRole+1)
+
+        dataStream << pixmap << location
+
+        mimeData = QMimeData()
+        mimeData.setData('image/x-puzzle-piece', itemData)
+
+        drag = QDrag(self)
+        drag.setMimeData(mimeData)
+        drag.setHotSpot(QPoint(pixmap.width()/2, pixmap.height()/2))
+        drag.setPixmap(pixmap)
+
+        if drag.exec_(Qt.MoveAction) == Qt.MoveAction:
+            if self.currentItem() is not None:
+                self.takeItem(self.row(item))
+
+
+class MainWindow(QMainWindow):
+    def __init__(self, parent=None):
+        super(MainWindow, self).__init__(parent)
+
+        self.puzzleImage = QPixmap()
+
+        self.setupMenus()
+        self.setupWidgets()
+
+        self.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
+        self.setWindowTitle("Puzzle")
+
+    def openImage(self, path=None):
+        if not path:
+            path, _ = QFileDialog.getOpenFileName(self, "Open Image", '',
+                    "Image Files (*.png *.jpg *.bmp)")
+
+        if path:
+            newImage = QPixmap()
+            if not newImage.load(path):
+                QMessageBox.warning(self, "Open Image",
+                        "The image file could not be loaded.",
+                        QMessageBox.Cancel)
+                return
+
+            self.puzzleImage = newImage
+            self.setupPuzzle()
+
+    def setCompleted(self):
+        QMessageBox.information(self, "Puzzle Completed",
+                "Congratulations! You have completed the puzzle!\nClick OK "
+                "to start again.",
+                QMessageBox.Ok)
+
+        self.setupPuzzle()
+
+    def setupPuzzle(self):
+        size = min(self.puzzleImage.width(), self.puzzleImage.height())
+        self.puzzleImage = self.puzzleImage.copy(
+                (self.puzzleImage.width() - size)/2,
+                (self.puzzleImage.height() - size)/2, size, size).scaled(400, 400, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
+
+        self.piecesList.clear()
+
+        for y in range(5):
+            for x in range(5):
+                pieceImage = self.puzzleImage.copy(x*80, y*80, 80, 80)
+                self.piecesList.addPiece(pieceImage, QPoint(x,y))
+
+        random.seed(QCursor.pos().x() ^ QCursor.pos().y())
+
+        for i in range(self.piecesList.count()):
+            if random.random() < 0.5:
+                item = self.piecesList.takeItem(i)
+                self.piecesList.insertItem(0, item)
+
+        self.puzzleWidget.clear()
+
+    def setupMenus(self):
+        fileMenu = self.menuBar().addMenu("&File")
+
+        openAction = fileMenu.addAction("&Open...")
+        openAction.setShortcut("Ctrl+O")
+
+        exitAction = fileMenu.addAction("E&xit")
+        exitAction.setShortcut("Ctrl+Q")
+
+        gameMenu = self.menuBar().addMenu("&Game")
+
+        restartAction = gameMenu.addAction("&Restart")
+
+        openAction.triggered.connect(self.openImage)
+        exitAction.triggered.connect(QApplication.instance().quit)
+        restartAction.triggered.connect(self.setupPuzzle)
+
+    def setupWidgets(self):
+        frame = QFrame()
+        frameLayout = QHBoxLayout(frame)
+
+        self.piecesList = PiecesList()
+
+        self.puzzleWidget = PuzzleWidget()
+
+        self.puzzleWidget.puzzleCompleted.connect(self.setCompleted,
+                Qt.QueuedConnection)
+
+        frameLayout.addWidget(self.piecesList)
+        frameLayout.addWidget(self.puzzleWidget)
+        self.setCentralWidget(frame)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.openImage(':/images/example.jpg')
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/draganddrop/puzzle/puzzle.qrc b/examples/draganddrop/puzzle/puzzle.qrc
new file mode 100644
index 0000000..4076cec
--- /dev/null
+++ b/examples/draganddrop/puzzle/puzzle.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/images">
+   <file>example.jpg</file>
+</qresource>
+</RCC>
diff --git a/examples/draganddrop/puzzle/puzzle_rc.py b/examples/draganddrop/puzzle/puzzle_rc.py
new file mode 100644
index 0000000..a9a96c7
--- /dev/null
+++ b/examples/draganddrop/puzzle/puzzle_rc.py
@@ -0,0 +1,2706 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sat May 4 17:21:42 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\xa6\x9e\
+\xff\
+\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x48\x00\
+\x48\x00\x00\xff\xe1\x00\x16\x45\x78\x69\x66\x00\x00\x4d\x4d\x00\
+\x2a\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\xff\xdb\x00\x43\x00\
+\x05\x03\x04\x04\x04\x03\x05\x04\x04\x04\x05\x05\x05\x06\x07\x0c\
+\x08\x07\x07\x07\x07\x0f\x0b\x0b\x09\x0c\x11\x0f\x12\x12\x11\x0f\
+\x11\x11\x13\x16\x1c\x17\x13\x14\x1a\x15\x11\x11\x18\x21\x18\x1a\
+\x1d\x1d\x1f\x1f\x1f\x13\x17\x22\x24\x22\x1e\x24\x1c\x1e\x1f\x1e\
+\xff\xdb\x00\x43\x01\x05\x05\x05\x07\x06\x07\x0e\x08\x08\x0e\x1e\
+\x14\x11\x14\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\
+\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\
+\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\
+\x1e\x1e\x1e\x1e\x1e\xff\xc0\x00\x11\x08\x01\xa8\x01\xa8\x03\x01\
+\x22\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x1d\x00\x00\x01\x04\
+\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x05\
+\x06\x07\x02\x03\x08\x01\x09\xff\xc4\x00\x54\x10\x00\x01\x03\x03\
+\x03\x02\x05\x01\x04\x06\x07\x01\x0d\x07\x02\x07\x01\x02\x03\x04\
+\x00\x05\x11\x06\x12\x21\x07\x31\x13\x22\x41\x51\x61\x71\x14\x32\
+\x81\x91\x08\x15\x23\x42\xa1\xb1\x16\x33\x52\x62\xc1\xd1\xf0\x24\
+\x34\x37\x43\x63\x72\x74\x75\x82\x92\xb3\xb4\xe1\xf1\x17\x36\x53\
+\x73\x94\xa2\xb2\x25\x93\x09\x44\x83\xa3\xc2\xd2\xe2\xff\xc4\x00\
+\x1b\x01\x00\x02\x03\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x03\x01\x02\x04\x05\x06\x07\xff\xc4\x00\x35\x11\x00\
+\x02\x01\x02\x04\x02\x07\x07\x04\x03\x01\x01\x00\x00\x00\x00\x00\
+\x01\x02\x03\x11\x04\x12\x21\x31\x13\x41\x05\x22\x51\x61\x71\xa1\
+\xf0\x14\x32\x81\x91\xc1\xd1\xe1\x15\x23\xb1\xf1\x42\x52\x62\x63\
+\x24\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00\x3f\x00\xec\
+\xba\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x2b\x15\x2d\
+\x29\xee\x69\x33\xf3\xd9\x68\x72\xb1\x50\xda\x5b\x80\xae\x8a\x62\
+\x9d\xa8\xe2\x45\x4e\xe7\x1d\x42\x13\xee\xa5\x00\x3f\x8d\x32\xcb\
+\xea\x36\x9f\x8f\xfd\x65\xea\xdc\x93\x9c\x63\xed\x08\x38\xfe\x34\
+\xa7\x88\xa6\xb9\x90\x9d\xf6\x26\xf4\x55\x7c\x7a\xa7\xa5\x87\x7d\
+\x41\x6c\x07\xfe\x70\x9a\xdf\x13\xa9\x5a\x6e\x49\x09\x6a\xfb\x6c\
+\x52\x89\xc6\xd1\x25\x19\xfe\x74\x7b\x44\x09\x27\x54\x53\x34\x5b\
+\xec\x67\xd2\x14\x1c\x49\x07\x90\x41\xc8\x3f\x8d\x2f\x66\x6b\x2e\
+\x76\x58\xab\xc6\xa4\x67\xb3\x22\xe2\xaa\x2b\x14\xad\x2a\xec\x6b\
+\x2a\xb9\x21\x45\x14\x50\x01\x45\x14\x50\x01\x45\x14\x50\x01\x45\
+\x14\x50\x01\x45\x14\x50\x01\x45\x14\x50\x01\x45\x14\x50\x01\x45\
+\x14\x50\x01\x45\x73\x86\xb2\xeb\x1e\xa8\xb8\xf5\x36\xef\xa7\x34\
+\xc4\xb6\xed\x36\xbb\x1b\xaa\x8f\x21\xef\x01\x0e\xbd\x21\xe4\xa8\
+\xa5\x43\xce\x0a\x52\x9c\x85\x0e\x06\x70\x33\x9e\x46\x15\xc5\xea\
+\x7e\xb2\x65\x7b\x9c\xb8\x35\x20\x7f\x65\xc8\xc8\x03\xff\x00\xb4\
+\x03\x5c\xbc\x4f\x4b\xe1\xf0\xf5\x38\x72\xbd\xfb\x8c\x32\xe9\x0a\
+\x4a\x4d\x6a\x74\x25\x15\x4b\x41\xeb\x1d\xd9\x18\xfb\x6d\xa2\x13\
+\xff\x00\xfc\xa5\xa9\xbf\xe7\xba\x9f\xa0\xf5\x8a\xca\xe0\x02\x65\
+\xb2\x7b\x07\xfe\x2c\xa5\xc0\x3f\x88\xfe\x55\x34\xfa\x63\x07\x3f\
+\xf3\xb7\x8d\xcb\xc7\x1b\x46\x5c\xcb\x2e\x8a\x89\x41\xea\x3e\x8f\
+\x97\x80\x2e\xc1\x85\x1f\xdd\x79\xa5\xa3\xf8\xe3\x1f\xc6\xa5\x31\
+\xde\x6a\x44\x76\xe4\x30\xe2\x5d\x65\xd4\x05\xa1\x69\x39\x0a\x49\
+\x19\x04\x1f\x6c\x56\xea\x55\xe9\x55\xf7\x24\x9f\x83\x34\x46\xa4\
+\x27\xee\xbb\x9b\x28\xa2\x8a\x69\x70\xa2\x8a\x28\x00\xa2\x8a\x28\
+\x00\xa2\x8a\x28\x00\xa2\x8a\x28\x00\xa2\x8a\x28\x00\xa2\x8a\x28\
+\x00\xa2\x8a\x28\x00\xa2\x8a\x28\x00\xa2\x82\x40\xa4\xb2\xa5\x21\
+\xa4\x92\x54\x05\x00\x6f\x5b\x89\x48\xe4\xd3\x65\xc6\xef\x1e\x2b\
+\x6a\x52\xdc\x4a\x42\x46\x49\x27\x00\x54\x1b\xa8\xbd\x4a\xb4\x69\
+\x98\xab\x54\x99\x29\x2e\x81\x90\xd8\x57\x3f\x8f\xb5\x72\xfe\xbc\
+\xea\x86\xa1\xd6\x4b\x5a\x23\xc8\xfb\x25\xb4\x28\x82\xbd\xdb\x1a\
+\x1f\xff\x00\xb1\xac\xb5\x71\x0a\x2b\x41\xb4\xa8\x4e\xab\xd3\x62\
+\xfc\xd7\xfd\x73\xd3\x3a\x7d\xb7\x52\x25\x89\x8f\x27\x23\xc3\x61\
+\x5c\x67\xfe\x57\xf9\x57\x3d\x6b\x3f\xd2\x3b\x56\x5d\x5e\x72\x3d\
+\x85\xb1\x11\xa3\x90\x3c\x24\xee\x5f\xe7\xc9\xfe\x55\x08\xfd\x59\
+\x09\x4e\xf8\xd3\x9c\x2f\xa9\x47\x71\x79\xc2\x4a\x4a\x7d\xd0\x81\
+\x82\xaf\xc7\x02\x9d\xed\xce\x6c\x7d\x30\xed\x16\xf8\xe9\x51\x48\
+\x52\x8a\x9b\x09\x18\xc7\x0a\x3e\xde\xfc\xd6\x47\x5a\xfa\xda\xfe\
+\x27\x42\x38\x18\x47\x72\x1d\x72\xbd\x75\x02\xf8\xe3\x92\x25\x49\
+\x9c\x42\xb9\x25\xc5\x12\x79\xfa\xf3\x4c\x32\xe0\xea\x1f\x15\x49\
+\x72\x44\x85\xb8\x39\x50\xdd\x8c\x55\xa1\x73\x2d\xcc\x94\xe1\x97\
+\x36\x44\xc5\x92\x30\x96\x13\xb5\x94\x28\x0c\x60\xa8\x77\xfc\x68\
+\x95\x0d\x05\xb5\xa1\x96\x5b\x0e\x60\x78\x8e\x78\x7e\x32\xd2\x3b\
+\x0d\xbb\xbc\xb9\xf8\xc2\xaa\x63\x8a\x90\xd7\x84\x8b\x5c\xfd\x79\
+\x15\x22\xa2\x5f\xd2\xb2\x82\xb7\xf7\x0e\xe0\x2b\x38\xad\x4e\x8b\
+\xcb\x07\x2e\x4b\x71\xb2\x39\xf3\x13\x56\x14\xcb\x5c\xb1\x19\xc5\
+\x38\xdb\xa5\xa6\x88\x23\xed\x6b\x28\x2a\xfa\x25\x38\x1f\xc2\xa1\
+\xf7\x24\xca\x48\x52\xa3\xda\x9b\x71\x09\xc9\xf1\x1a\x6b\x79\xfc\
+\x49\xcd\x69\x85\x77\x3e\x66\x5a\x98\x65\x05\x71\x5e\x98\xea\x3e\
+\xb1\xd3\x52\x03\xb6\xeb\xcc\xa6\xb6\x8e\x52\x97\x0e\x0f\xd4\x76\
+\x35\x73\x68\x5f\xd2\x96\xeb\x15\x48\x67\x51\xc3\x44\x94\x81\x8f\
+\x15\xaf\x22\xfe\xa7\xd0\xfe\x55\xce\xab\x44\xa7\x3f\x75\xc5\x83\
+\xe8\x40\xe0\xfc\x81\x5a\x3c\x05\x28\x12\x94\x20\x94\x9c\x29\x25\
+\x38\x50\x3e\xc6\x99\x28\x42\x7b\x99\x1c\x7b\x8f\xa4\x7d\x29\xea\
+\xee\x9e\xd6\x91\x3c\x5b\x5d\xc5\x2b\x71\x23\xcf\x1d\xd3\xb5\xd4\
+\x7e\x1e\xa3\xe4\x55\xa3\x06\xe6\xc4\x84\x8d\xab\x15\xf2\x62\xd3\
+\x32\xe9\x6a\x7d\x33\x6d\x8f\x3b\x15\xd6\xd5\x9d\xc8\x59\x49\x49\
+\x1f\x35\x7b\xf4\xb7\xf4\x95\xbe\x59\x5c\x6a\xdf\xaa\x5b\x54\xf8\
+\xe3\x00\x3f\x9c\x3a\x91\xf5\xec\x7f\x1f\xce\xa1\x67\x86\xda\xaf\
+\x32\x8e\x0d\x6c\x77\xfa\x56\x14\x38\x35\x95\x55\xfd\x38\xea\x75\
+\x83\x56\xc4\x43\xd6\x9b\x8b\x52\x38\xca\x9b\x27\x0e\x23\xea\x9e\
+\xf5\x62\xc5\x98\xdb\xa9\x04\x28\x1c\xd3\x61\x51\x4f\x62\x82\xba\
+\x2b\xc4\xa8\x1e\xd5\xed\x5c\x90\xa2\x8a\x28\x00\xa2\x8a\x28\x00\
+\xa2\x8a\x28\x00\xa2\x8a\x28\x00\xa2\x8a\x28\x00\xa2\x8a\x28\x03\
+\x88\xa1\x7f\xbf\x27\x51\x3f\xe9\xa9\x3f\xf8\x87\x6a\x67\xa2\xac\
+\x97\x2d\x65\xab\x5c\xb0\xda\x56\xd4\x76\xa1\xb4\x97\xae\x33\x5d\
+\x41\x5a\x58\x4a\xb3\xb1\x09\x48\x23\x72\xd5\x82\x46\x48\x00\x02\
+\x79\xed\x50\xc8\x5f\xef\xc9\xd4\x5f\xfa\x6a\x4f\xfe\x21\xda\xbe\
+\xbf\x45\x38\x81\x1a\x5b\x51\x5c\xd6\x8f\xdb\xcc\xbf\x3e\x82\xb2\
+\x39\x2d\xb4\x94\x21\x23\xe8\x30\xaf\xcc\xd7\x98\x8e\x12\x18\x9e\
+\x91\x9a\xa8\xae\x97\xe0\xf3\x98\x6a\x4a\xad\x6c\xaf\x6d\x4f\x17\
+\xa0\xf4\x3b\xb7\x77\x34\xb4\x3d\x51\x27\xfa\x42\xdb\x25\xdf\x09\
+\xe2\x93\xb8\x71\x9f\x28\x48\x07\x1e\xa0\x1c\x8c\xf3\x55\xc5\xce\
+\xd5\x3a\xdd\xac\xe0\x69\x59\x0d\x62\x74\xcb\x82\x21\xa4\x83\x94\
+\xa4\x28\x15\x78\x9f\x29\x09\x1b\xa8\x44\xc9\x09\xea\xfe\x96\xbb\
+\x20\xab\xed\x0e\x6a\x20\xd2\xd5\x9f\xdc\x78\x2d\x2b\x1f\x88\x35\
+\x6e\x5f\x7f\x57\xc1\xfd\x22\xb4\xf8\x91\x6c\x6e\x63\xf7\x6b\x5b\
+\xa2\x33\xeb\x5f\xfb\x89\xc8\xe1\xc2\xa7\x12\x92\x0e\x54\xb4\x38\
+\x10\x48\x23\x84\x8e\xf5\x34\xb0\x58\x6c\x6c\x23\x52\x31\xcb\xad\
+\x9a\x5c\xd1\xa1\x53\xa7\x5d\x5d\x2b\x59\xdb\xe0\x54\xfa\x96\xd2\
+\xed\x8e\xf9\x2a\xd4\xf3\xa8\x75\x71\xd4\x12\x56\x80\x40\x39\x00\
+\xff\x00\x8d\x74\x86\x8a\xff\x00\xdc\xdb\x27\xfd\x1f\x1f\xfe\xed\
+\x35\x4e\xf5\x96\xe7\x6f\x91\xa8\x25\x5b\x9a\xb3\x35\x1e\x64\x77\
+\x92\x5c\x9a\x97\x32\xa7\xc6\xce\xc5\x38\x18\xee\x3d\x4f\x6a\xb8\
+\xb4\x57\xfe\xe6\xd9\x3f\xe8\xf8\xff\x00\xf7\x69\xab\xf4\x4d\x28\
+\xd2\xc5\xd5\x84\x1d\xd2\xfb\xec\x3f\x05\x05\x0a\xd3\x8a\x1d\xe8\
+\xa2\x8a\xf4\x67\x50\x28\xa2\x8a\x00\x28\xa2\x8a\x00\x28\xa2\x8a\
+\x00\x28\xa2\x8a\x00\x28\xa2\x8a\x00\x28\xa2\x8a\x00\x28\xa2\x8a\
+\x00\x2b\x15\xa8\x24\x50\xb5\x84\x8c\xd3\x0e\xa0\xbd\x47\xb7\xc4\
+\x75\xf7\xde\x4b\x6d\xb6\x92\xa5\xa9\x47\x01\x20\x7a\x9a\x1b\x49\
+\x5d\x80\xa2\xef\x75\x66\x1b\x2a\x5b\x8e\x25\x21\x23\x24\x93\x80\
+\x05\x73\xef\x58\x7a\xe7\x06\xd4\xd3\x90\xac\xce\x99\x32\xd4\x76\
+\x25\x48\xe4\x0f\xa7\xf9\xd5\x67\xd7\x9e\xb6\xbd\x7a\x7d\xfb\x3d\
+\x85\xe5\x26\x30\x25\x25\x40\xe0\xb8\x7d\xcf\xc7\xc7\xe7\x5c\xff\
+\x00\x26\xe2\xec\xa5\xf8\x4d\x2d\x4b\x5a\xc1\x0e\xba\x4f\x27\xf1\
+\xf4\x1f\x1e\xbf\x4a\xc7\x52\x72\x93\xb1\xb2\x8e\x19\x7b\xd5\x3e\
+\x44\x9a\xf3\xa8\xaf\xda\x9a\xf6\xa5\xbc\xa3\x31\xe2\xb2\x50\xd2\
+\x95\x96\xd2\x3d\x49\xf4\xc0\xf5\x39\xa5\xb6\xb6\xdc\x72\x4b\x5e\
+\x1a\x05\xce\x43\x6a\xf0\xfc\x57\x13\xfb\x16\x95\xfd\x86\x9b\x1c\
+\x13\xf8\x7c\x9c\x0e\x6a\x2b\x6b\x79\x0b\x3f\x66\x8e\x4e\xc1\xca\
+\xd4\x14\x40\x5e\x3d\xc8\xf9\xf6\xfc\x39\xe6\x9f\x58\x9a\xb5\x25\
+\x21\x95\x06\xe3\xb2\x48\x71\xf4\x80\x0a\x8f\xab\x4d\x8e\xc0\x7a\
+\x9f\x4f\x55\x12\x6b\x1d\x48\xeb\xa9\xd5\xa4\xf4\xb4\x47\xf9\x0c\
+\xb6\xc3\x98\x91\x21\x72\x5c\x3b\x9c\x77\x68\xf2\xa4\x0f\x75\x0f\
+\xbd\xf4\x1c\x1f\x73\xda\x9a\xa7\xdc\xd2\x85\x15\xdc\xe6\xc5\xb7\
+\x30\xac\xa9\x4d\xaf\x97\x1e\xe3\x8d\xc8\x4f\x20\x7b\x02\x31\xf1\
+\x4f\x9a\x5b\xa7\xda\xe3\x5f\xa5\x0f\xdb\x63\x1b\x75\xa0\xf3\xf6\
+\xf9\x0b\x2d\xa5\xcc\x71\x94\x03\xe6\x57\xd7\x18\xe3\x8c\x0a\xb7\
+\xb4\x6f\x40\x74\x95\xad\x9c\xde\x19\x45\xe2\x6a\x80\x52\xe4\x3c\
+\x54\xbe\x7e\x01\x38\x03\xd7\x9a\x5a\x69\x6e\x5e\x7d\x5d\x9f\xaf\
+\x5e\x07\x3c\xc6\xd4\x53\x2e\x0e\x2a\x3d\x92\xdb\x74\xbb\xac\x79\
+\x50\x0e\xe6\xa3\xa4\x7b\xe1\x18\x51\xfc\x54\x3b\xd4\x92\xdf\xa2\
+\xfa\x9f\x7b\x86\xa7\x54\xf7\xea\xa6\x00\x4e\xe6\x63\xfe\xc7\x8e\
+\xc3\x71\xee\x4f\x3e\xa4\x9f\x7a\xea\xdb\x5e\x9a\xb6\x5b\xe3\x08\
+\xb0\x62\xb0\xcb\x09\x18\x21\x2d\xa5\x39\xf8\x24\x0a\x5e\xcd\x9e\
+\x32\x54\x14\x94\x0c\x01\xe5\x18\xe1\x3f\x41\xda\xac\xa4\xff\x00\
+\xc5\x5b\xcc\x53\xa9\x0f\xf2\xd7\xc9\x7a\xf8\x9c\x8f\xff\x00\xb1\
+\xdd\x4a\x94\x87\x5c\x98\xea\xc9\x5e\x00\x49\x59\xc7\xb2\x92\x73\
+\xc1\x1e\xc7\xbf\x15\xa9\xde\x96\xea\xa3\x35\x08\x4b\xc8\x44\x84\
+\x8c\x07\x50\x3c\x30\xbc\x7a\xab\xe4\xe4\x8e\x7b\xe2\xbb\x18\x45\
+\x6d\x2e\x15\x14\xa7\x80\x07\x22\xbc\x5c\x28\x0e\x0d\xaa\x6d\xa3\
+\x9e\xd9\x19\x1f\x91\xa2\xf5\x3f\xd8\x15\x5a\x7f\xe9\xfc\x9c\x87\
+\x0f\xa3\x77\xe9\x4a\x53\x6d\x86\xfc\x50\x77\x17\x0e\xed\xa3\x27\
+\x03\x91\xdf\xde\x9b\xb5\x1f\x4c\x2f\xd1\xe6\xbb\x1e\x54\x34\xf8\
+\x8d\x21\x4a\x0f\x25\x5c\x28\x63\x19\x3f\xc0\xd7\x65\x7d\x91\xb6\
+\x50\x52\xde\xdc\x7c\x0e\xd4\x96\x65\xbe\xdf\x29\x59\x93\x1d\x0e\
+\x12\x36\x92\x47\x04\x7c\xd5\x33\xd4\x5f\xe4\x4b\xa9\x4e\x5a\x38\
+\xe8\x70\x94\xbd\x33\x32\x24\x77\xb7\x36\xb5\x2d\x04\x04\x92\x9f\
+\x4e\x32\x3e\x79\xed\x4c\x13\x2d\x8e\x24\xa9\x21\xa2\x36\xf2\xb0\
+\x7f\x70\x73\xeb\x5d\xe9\x73\xd1\xf6\x29\xb9\x58\x8e\x86\xdc\xc1\
+\xf3\x84\x8c\x82\x7d\x73\x51\x7b\xd7\x49\x74\xfd\xc2\x21\x6f\xc3\
+\x0d\x9f\xed\x36\x90\x0e\x7e\xbf\xeb\xbd\x32\x38\xca\x91\xdd\x5c\
+\x54\xb0\xf4\x27\xb3\x68\xe3\x5d\x31\x7d\xbd\xe9\xa9\xad\xdc\xed\
+\x53\x1f\x8c\xeb\x6a\xe0\xa1\x44\x11\x5d\x41\xd1\xff\x00\xd2\x59\
+\xc9\x4f\xc7\xb4\xea\x86\x9b\x69\xd5\x00\x94\xca\x4f\x94\x28\xff\
+\x00\x78\x76\xfc\xb1\x50\x0d\x7f\xd1\x5b\x8d\xad\x97\x8d\xb5\x84\
+\xbd\x1c\x82\xaf\x10\xe4\xaf\xe3\x38\xaa\x66\xe3\x02\x6d\xb5\x4a\
+\x6a\x53\x2a\x65\x7b\xb0\x9e\x31\xdb\xe6\xb5\xc6\xb4\x2b\xad\x37\
+\xf3\x31\x55\xc2\x38\x6a\xf5\x5d\xa7\xd4\xfd\x2d\xa8\x63\xdc\xe3\
+\x21\x68\x71\x2a\xdc\x32\x30\x73\x9a\x92\xb6\xad\xc2\xb9\x17\xf4\
+\x56\xd6\x2e\x4b\xb0\x43\x87\x29\xf5\x19\x2c\x0f\x0d\x40\x9e\xe0\
+\x76\x3f\x95\x75\x6d\xaa\x40\x75\x94\x9c\xe7\x22\x9f\x86\xa8\xe7\
+\x16\xa5\xba\x30\xb4\xe2\xdc\x58\xbe\x8a\x28\xa7\x80\x51\x45\x14\
+\x00\x51\x45\x14\x00\x51\x45\x14\x00\x51\x45\x14\x00\x51\x45\x14\
+\x01\xc4\x50\xbf\xdf\x93\xa8\xbf\xf4\xd4\x9f\xfc\x43\xb5\x7d\xfe\
+\x8a\x72\xb7\xe9\x1d\x41\x01\x6a\xfd\xac\x4d\x41\x24\xed\x3e\x88\
+\x71\x28\x71\x27\xf1\xdc\x7f\x23\x54\x24\x2f\xf7\xe4\xea\x2f\xfd\
+\x35\x27\xff\x00\x10\xed\x4d\xf4\x06\xa3\x97\xa1\x75\x74\x9b\xdb\
+\x11\x9c\x9b\x6d\xb8\x32\x96\xee\x71\x1b\x50\x0e\x12\x8c\xec\x75\
+\xbc\xe0\x15\x00\x48\x29\x24\x64\x1e\xf9\x15\xe6\x69\xe2\xa1\x43\
+\xa4\xa7\x9d\xd9\x3f\xc1\xe7\x70\xb5\x55\x2a\xf9\x9e\xda\x89\xcc\
+\x77\x93\xd5\x8d\x2b\x01\x39\xf1\x91\xa9\x5b\x2a\x4f\xf7\x5b\xde\
+\x55\xf9\x62\xad\x5d\x66\xfa\x15\xfa\x4c\xe8\x18\xe3\x1b\x9b\xb6\
+\xdc\x14\xae\x7f\xb4\xdf\xff\x00\xf3\x4e\x70\xa1\x68\x79\x85\x8e\
+\xb0\xdb\xa1\x4b\x9c\xe2\xa2\xa9\xd8\xde\x18\x3e\x5d\xfe\x55\xa8\
+\x37\xc0\x0b\x3c\x85\x13\xd8\x66\xaa\x6b\x9e\xa2\xb8\xbf\xd4\xd8\
+\x3a\xe5\x09\x42\x66\x41\x75\x61\x31\x9c\xc9\x42\x99\x5a\x3c\x35\
+\x37\x9e\xe0\xed\xc6\x15\xee\x33\x83\xda\x9f\x1a\x94\xfa\x36\x30\
+\xa5\x51\xee\xef\xf0\x34\xe9\x86\x8a\x4d\xde\xed\x3f\x80\xbf\xaa\
+\xff\x00\xef\x85\x76\xff\x00\xe6\x27\xff\x00\xc1\x35\x7c\xe8\xaf\
+\xfd\xcd\xb2\x7f\xd1\xf1\xff\x00\xee\xd3\x54\x46\xba\xd5\x16\xed\
+\x4a\xb4\xc9\x63\x4e\xc6\xb7\xcd\x5a\x92\xb9\x12\x42\xc2\xdc\x73\
+\x09\xc0\x4e\xed\xa0\xed\x1f\xe1\xda\xaf\x7d\x15\xff\x00\xb9\xb6\
+\x4f\xfa\x3e\x3f\xfd\xda\x69\x7d\x14\xe1\x2c\x5d\x59\x42\x57\x4f\
+\x5f\x9b\x1b\x83\x71\x75\xa6\xe2\xee\x98\xef\x45\x14\x57\xa3\x3a\
+\x81\x45\x14\x50\x01\x45\x14\x50\x01\x45\x14\x50\x01\x45\x14\x50\
+\x01\x45\x14\x50\x01\x45\x14\x50\x01\x58\xb8\xa0\x91\x9a\xc8\x9c\
+\x0c\xd3\x5d\xde\x62\x58\x69\x44\x9a\x00\x43\xa9\x6f\x71\xad\x90\
+\x5e\x93\x25\xf4\x32\xd3\x48\x2a\x5a\xd4\x70\x12\x07\xad\x70\xef\
+\x5f\xfa\xd5\x37\x53\x5c\xdd\xb4\xd9\xde\x5b\x76\xd6\xd7\x81\xb4\
+\xff\x00\x5a\x7d\xcf\xbf\xf8\x54\x8b\xf4\xbb\xea\x7b\xcf\xcb\xfe\
+\x89\x5a\x65\x1d\x88\x39\x98\xa4\x1f\xde\xfe\xc9\xf8\x1f\xcc\xfc\
+\x57\x2d\x38\xe1\x5e\x48\x59\x28\x07\xef\x9e\xea\x3f\xe5\x4a\x6d\
+\xcb\x51\x94\xd2\x5d\x66\x2e\x9d\x25\x4e\xba\xb4\xa9\xce\xff\x00\
+\xd6\x63\x93\xf4\xa4\x65\xe2\xf1\x11\xd8\x18\x1c\xef\x56\x71\x91\
+\xf2\x7d\xbf\x9d\x27\x2a\x5b\x9e\x44\x79\x53\xeb\x4a\xed\xd1\x5f\
+\x98\xfb\x50\xe1\xb2\xe3\xae\xba\xb0\x94\xa1\x09\xdc\xa5\xab\xe9\
+\x51\x95\x41\x5d\x8d\x52\x95\x59\x59\x7a\xee\x1d\x60\xb8\x86\x98\
+\x53\x49\x71\x61\xa3\x80\xa0\x84\xf9\xdd\x3e\x80\x7b\x7b\x01\x5d\
+\x1d\xd1\x7e\x8c\x49\x75\x11\xb5\x0e\xb5\x8e\x94\x24\x25\x2a\x85\
+\x68\x71\x3e\x54\x27\xba\x4b\xa3\xf8\xec\xfc\x4d\x3b\xf4\x1f\xa3\
+\x90\xb4\xc4\x78\xb7\xdd\x47\x19\x32\xef\x65\x21\xc6\x18\x58\x05\
+\x11\x09\xf5\xc7\xef\x2f\xe4\xf6\xf4\xab\xb1\x5b\xce\xe5\xac\xa8\
+\x1c\xe4\x93\xeb\x5c\xba\xb5\x54\xde\x9b\x1d\x88\x5e\x94\x72\xad\
+\xff\x00\x83\xd8\xed\x04\x27\x03\x69\x38\xc7\x09\x09\x48\x00\x60\
+\x00\x3d\x00\xa5\x71\xd8\x0b\xe3\x97\x08\xe0\xe0\x7f\x0c\xd6\x29\
+\x42\x36\x6f\x70\x1c\x1c\x61\x03\xbf\xe3\x4b\x59\x5c\x82\x9d\xad\
+\xa0\x32\x9f\xe3\x55\x8a\x11\x26\x2a\x62\x02\x8a\x7c\xe9\x43\x69\
+\xfe\x35\xea\x9b\x82\x8e\x14\xe0\x51\xad\x68\x61\xc7\x55\xe6\x5a\
+\x96\x47\xb9\xed\x5b\x5b\x80\x08\xc9\xc1\x1d\xfb\xd3\x92\xec\x42\
+\x76\xdd\x98\x20\x42\xc7\x2b\x03\xf0\xcd\x6a\x75\x8b\x7a\xff\x00\
+\xe1\x07\xce\x07\xf1\xa7\x06\xe3\x36\x8c\x27\x18\xc7\x7c\xf7\xac\
+\x84\x66\x72\x41\x03\x8f\x8c\x54\xb8\xb6\x82\xe3\x42\x99\x86\x01\
+\x01\xdc\xfb\xf3\x5a\x5d\x6d\xa2\x0e\xd1\xba\x9e\xdc\x8b\x1b\x61\
+\x3e\x51\x8e\x7b\xd2\x65\x47\x61\x00\xed\x52\x47\xe3\x4b\x94\x4b\
+\x29\x0c\xcb\x65\xac\x02\xa6\x17\x9f\x42\x38\xa4\xab\x8e\x82\xbd\
+\xac\xad\x48\x57\x38\x0b\xe2\x9f\xd6\xc3\x7d\x82\xc2\x49\xe7\x93\
+\x9a\x45\x2e\x39\xd8\x72\x90\xa0\x79\xc6\x29\x72\x80\xc5\x21\x96\
+\x43\x44\x20\xb6\xea\x76\xa8\x8c\x13\x8e\x08\xaa\xbb\xab\x3d\x35\
+\xb5\x6a\x48\x0f\xb8\xd3\x49\x8b\x3d\x00\x29\x0a\x1c\x03\x8f\xa5\
+\x5b\x2a\x52\x9a\x05\xb2\x0a\xdb\xfe\xca\x8f\x3f\x81\xa4\x17\x08\
+\xe8\x75\x1e\x4e\x47\x3b\x4f\xaa\x7e\x0d\x21\xe8\xf4\x1a\x9b\x5b\
+\x1c\xc1\xd1\xb7\x17\xa5\xf5\x93\xb6\x7b\x92\x8c\x79\x28\x21\x0d\
+\xa9\x47\x09\x74\x64\x91\xf8\xd7\x6c\xe8\x8b\x88\x93\x05\xa3\xbb\
+\x9c\x73\x5c\xa7\xd7\x8d\x28\xb9\x50\x13\x77\x84\x16\x89\x71\x32\
+\x49\x47\x7c\x03\xc6\x7d\xf1\xcd\x4d\xbf\x45\xce\xa0\xbf\x7d\xb4\
+\x88\x97\x27\xf3\x3a\x2e\x10\xe1\x3d\xd6\x3d\x15\x5d\x2c\x35\x48\
+\xc3\xaf\xdb\xb9\xc9\xc5\xd3\xb4\xb3\x9d\x4c\x85\x65\x35\x95\x22\
+\xb7\xc8\x0e\xb4\x08\x39\xc8\xa5\xb5\xd2\x33\x05\x14\x51\x40\x05\
+\x14\x51\x40\x05\x14\x51\x40\x05\x14\x51\x40\x05\x14\x51\x40\x1c\
+\x4b\x19\xb5\xb7\xd6\x6e\xa2\x25\xc4\x29\x04\xde\x64\x28\x05\x0c\
+\x70\x5f\x74\x83\xf8\x82\x0f\xe3\x52\x2a\xe9\x7b\xbe\x88\xd2\xb7\
+\x6b\xda\xaf\x57\x0b\x2b\x0f\x5c\x16\xda\x5a\x5b\xdb\x94\x92\xb4\
+\xa7\x3b\x42\x80\x20\x2b\x19\xee\x73\xc7\x14\xba\x06\x9e\xb1\x41\
+\xc7\xd8\xec\xf0\x19\x23\xf7\x92\xc2\x77\x7e\x78\xcd\x79\xcc\x5f\
+\x42\xd4\xc4\x57\x95\x4c\xc9\x26\x71\xff\x00\x4c\x9b\x93\xeb\x68\
+\x50\x9d\x2d\xbc\xea\xbd\x2d\x09\x76\xcd\x3f\x09\xeb\x8d\xad\x6e\
+\xad\xd6\xe2\x2e\x32\xdc\x0c\x29\x44\x95\x06\xd4\x9c\x10\x92\xa3\
+\x9c\x1c\x8c\x93\x8c\x66\xb7\x9d\x0b\xac\xef\x13\xdf\x9a\xab\x2a\
+\x98\x32\x1d\x53\x8b\xf1\x16\x96\xc2\x4a\x89\x27\x85\x1c\xe3\x9a\
+\xe8\x7c\x51\x5a\x5f\x43\xf1\x22\xa3\x5a\xab\x92\x5e\x0b\xee\x68\
+\x58\x04\xe2\xa3\x39\x36\x91\x4a\x59\xfa\x41\x77\x72\x43\x6a\xba\
+\xcf\x88\xc3\x19\x05\xc4\xb2\xa2\xb7\x31\xea\x06\x40\x00\xfc\xf3\
+\x57\x3c\x56\x1a\x8b\x19\xa8\xcc\x20\x21\xa6\x90\x10\x84\x8f\x44\
+\x81\x80\x2b\x65\x15\xbb\x09\x81\xa3\x84\x4f\x86\xb7\x34\xd1\xc3\
+\xc2\x8f\xba\x14\x51\x45\x6c\x1e\x14\x51\x45\x00\x14\x51\x45\x00\
+\x14\x51\x45\x00\x14\x51\x45\x00\x14\x51\x45\x00\x14\x51\x41\xed\
+\x40\x1a\x64\xb8\x10\x82\x73\x54\xe7\x5e\xb5\xba\x74\xbe\x91\x9d\
+\x3d\x0b\x1f\x68\xdb\xe1\xc7\x4f\xbb\x87\xb7\xe5\xdf\xf0\xab\x3e\
+\xff\x00\x28\x33\x1d\x64\x9e\xc2\xb8\x63\xf4\xc3\xd6\x4b\x99\x7e\
+\x6a\xc6\xc2\xce\xd8\x83\x2b\x19\xe0\xad\x5c\xff\x00\x01\x8a\x5d\
+\x57\xb4\x49\x8c\x73\x4a\xcc\xa1\xaf\xf7\x17\xee\x57\x07\xdf\x7d\
+\xd5\x2d\x6e\x28\xad\xe5\xa9\x59\x2a\x24\xe7\x14\xd5\xcb\x87\xbe\
+\xd4\x0f\x5a\xcf\x03\x1e\x62\x08\x1c\xa8\xfb\x9a\x5f\x68\xb4\x4d\
+\xba\x5d\x22\xdb\xd8\x6c\x87\x1f\x52\x52\x06\x39\x4a\x54\x47\x9b\
+\x1f\x43\x9a\x9b\xa8\xab\xb2\xee\xf3\x7a\x1a\xad\x30\x24\xdc\xe7\
+\x35\x02\x0b\x0b\x79\xe7\x94\x12\x86\xd0\x39\x51\xae\xbb\xe8\x2f\
+\x4c\x2d\xda\x46\x0b\x77\x6b\x93\x2d\xc9\xbe\x38\x8c\xee\x23\x72\
+\x63\x02\x3b\x27\xe7\xe6\xab\x7e\x94\x69\x64\xdb\x2e\x69\xf0\xda\
+\x58\x25\xe2\xca\x1f\x18\x25\x48\xc9\x19\xcf\xf7\xb1\xc9\x1e\x99\
+\xc5\x74\xbd\x81\x29\x6d\x01\xa0\x41\x09\x01\x28\x00\x76\x03\xd3\
+\xe6\xb8\xf8\xac\x43\xa9\x53\x22\xd9\x1d\xbc\x3d\x0e\x05\x2c\xdf\
+\xe4\xfc\x90\xe9\x17\x7b\x7e\x6f\xde\x23\x72\xb3\xef\x4a\xdb\xdc\
+\xa3\xb8\x8e\x7d\x0f\xb5\x68\x27\x19\xdd\xd8\x9e\x00\xf5\xa5\x31\
+\xb0\x52\x37\x77\xec\x71\x54\x48\xab\x62\x96\x93\x80\x0a\xb3\xf8\
+\x73\x4a\xd9\x51\x24\x81\x80\x33\xdc\xd6\x90\xe2\x11\x8c\x10\x93\
+\x8c\x01\x58\x3f\x71\x83\x17\xc8\xe3\xa9\x2b\x03\x24\x67\xb7\xd6\
+\x98\xa2\x29\xdf\xb0\x71\x68\xa9\x59\x05\xc5\x76\xe7\x06\xb7\x15\
+\x38\x94\xf0\xb7\x30\x3d\xd5\x4c\xc9\xbd\xc6\x43\x49\x77\x7a\x58\
+\x4a\xf2\x12\x56\xa4\xa7\x77\xd3\x3e\x9f\x35\x9b\x77\x48\x4f\x63\
+\xc2\xb8\x47\x77\x71\xc1\x28\x90\x0f\x3e\xdc\x1e\x7e\x95\x74\x43\
+\x84\xbb\x07\x15\x2d\x47\x95\x1c\x8f\x92\x6b\x15\x2c\x2b\x92\x47\
+\xe3\x5a\x54\xb5\x1e\x12\xb5\x29\x20\x8f\x29\xf4\xf9\xad\x98\xe3\
+\xb8\x3e\xf8\xa9\xd4\x8b\x02\x9b\x4a\xb9\x3c\x67\x8c\x56\xa2\x10\
+\x14\x46\x33\x8a\xcc\xa4\x02\x40\x04\x7f\x8d\x01\x04\x05\x64\x10\
+\x31\xeb\xcd\x55\xa2\xcb\x43\x4a\x92\x7b\x14\x12\x0f\x6e\x2b\x5b\
+\x9e\x22\x06\x52\x4a\x7e\x94\x92\xf7\x72\x8b\x05\x4d\xb2\xe3\xe8\
+\xf1\x94\x37\x10\x55\xf7\x52\x06\x49\x3e\xc3\xe6\xab\xfb\xc7\x5a\
+\x34\x55\xba\x77\xd8\x8d\xee\x33\xae\x83\x8d\xcd\xab\x2d\x9c\x77\
+\xe7\xb1\x3f\x4c\xd2\x65\x24\x98\xd8\xd3\x94\xb6\x44\xf9\xf5\x13\
+\xe5\x71\x00\xfc\x8a\x6f\x79\x18\x3b\x90\xa3\xf2\x3d\xe9\xb6\x26\
+\xb5\xb2\x4e\x4b\x65\xb9\x0d\xa9\x2e\x63\x0b\x6d\xc0\xe2\x4e\x7b\
+\x64\xa7\xb1\xfa\xd3\xa9\x53\x4b\x48\x52\x16\x30\xa1\xc0\x1e\xbe\
+\xd4\xa7\x69\x6c\x5d\xc6\x51\xdd\x0c\x77\xc8\x2d\xca\x8a\xe2\x1c\
+\x40\x29\x5a\x70\x7d\xf9\xae\x6c\x4c\xf9\x3d\x2e\xea\x4b\xae\xad\
+\x0b\x30\x5e\x7b\x7a\xb6\x76\x29\x27\x9f\xc7\x06\xba\x8d\xf0\x52\
+\xe8\x41\xfb\xa7\x3c\xd5\x1f\xd7\xdb\x2b\x52\x65\xc6\x75\x4d\x05\
+\x78\x8a\x28\x73\x9f\xbb\xc7\x7f\xaf\x22\x99\x4e\xa6\x4d\xf6\x17\
+\x2a\x0a\xad\xe2\xce\xa4\xd0\x37\xe8\xf7\x2b\x73\x0f\x32\xf2\x5c\
+\x6d\xc4\x05\xa1\x60\xf0\xa4\x91\x90\x6a\x72\xca\xb7\x24\x57\x24\
+\x7e\x8b\x5a\xad\xdf\xd4\xe2\xc3\x35\x64\x49\xb6\xaf\xc1\x04\xf1\
+\xbd\xb2\x72\x93\x8f\xe1\x5d\x51\x68\x90\x1e\x61\x24\x1f\x4a\xec\
+\xe1\xe6\xe5\x1b\x3d\xd1\xc2\xb3\x8b\x71\x63\x95\x14\x51\x4e\x24\
+\x28\xa2\x8a\x00\x28\xa2\x8a\x00\x28\xad\x52\xe4\xb1\x12\x33\x92\
+\x64\xba\x96\x99\x6c\x65\x6b\x51\xe0\x0a\xac\x75\x96\xbb\xbe\x39\
+\x6f\x79\xeb\x23\x48\xb6\x43\x1c\x22\x64\x84\x6e\x5b\x9f\x29\x49\
+\xe0\x7e\x39\xab\xd3\xa7\x2a\x8e\xc8\x55\x5a\xd1\xa4\xaf\x22\xd3\
+\xa2\xb9\xd7\x4f\x1d\x59\x76\x2e\x4a\x9b\xac\x2f\xc1\xb0\x09\xcb\
+\x52\xd4\xd0\x3f\x20\x0e\x31\x4d\x37\x39\xda\xa1\x89\x6b\x42\x35\
+\x56\xa4\xf0\xd2\x78\x3f\xac\x9c\xc9\x1f\x9d\x69\xf6\x29\xf6\x99\
+\x3d\xbd\x7f\xa9\xd4\x14\x57\x34\xe9\xd9\xf7\xa9\x97\x86\x58\x91\
+\xac\x35\x12\x59\x2a\xc1\x3f\xac\x5c\xe7\xdf\xd6\xae\xd8\x9a\x79\
+\x2a\x88\x87\x06\xa3\xd4\x0a\x04\x72\x4c\xdc\xff\x00\x85\x2e\xae\
+\x1e\x54\xd2\x6c\x75\x2c\x57\x11\xb4\x91\x29\xa2\xaa\x8b\x83\x53\
+\x44\xf7\x3c\x2d\x49\x7d\x4b\x69\x38\xc0\x98\xaa\x7e\xd2\xf6\x49\
+\x92\x62\x97\xe4\xea\x1b\xea\x82\xbe\xee\x66\x1f\xf1\x15\x33\xc3\
+\x4a\x11\xcc\xd9\x58\x62\xf3\xcb\x2a\x44\xe6\x8a\x80\x6a\x06\x1c\
+\x88\x97\x16\xdd\xf6\xf4\x94\xa0\x77\xfb\x59\xff\x00\x2a\xae\x9e\
+\xbb\x5e\xfe\xd2\x42\x75\x25\xe4\x05\x13\x8f\xf6\xd5\xe3\xf9\xd5\
+\xa1\x83\x9c\x95\xc8\x96\x36\x31\x76\xb1\xd0\x94\x55\x61\xa5\xde\
+\x97\x2e\x33\x6b\x7e\xf7\x76\x52\x87\x0a\xff\x00\x6a\x3c\xfe\x75\
+\x2c\x9b\x68\x71\x50\x8b\xac\xde\x2e\xc1\x5b\x72\x31\x2b\xff\x00\
+\x2a\x5c\xf0\xf2\x83\x49\xf3\x2f\x0c\x4a\x9a\x6d\x2d\x89\x1d\x15\
+\x59\xe6\xe2\x87\x0a\x55\x79\xba\x1d\xa7\x9f\xf6\xa5\x76\xa9\x6d\
+\xb6\x1f\xda\x21\x87\x8d\xd2\xe3\x9c\x73\xfe\xd1\xff\x00\x95\x4d\
+\x5c\x34\xa9\xab\xb0\xa5\x8a\x55\x1d\x92\x1f\xe8\xaa\xa3\x53\xdd\
+\x27\x31\x70\x5a\x62\x5d\x2e\x49\x43\x67\x07\x32\x54\x3f\x95\x37\
+\x45\xbb\x5d\x5e\x20\xae\xf5\x71\x47\xc7\xda\x57\xcf\xf1\xa6\x2c\
+\x14\xda\x16\xf1\xd1\x4f\x62\xe8\xa2\xab\x58\xf3\xe4\x48\x8b\xe1\
+\xa6\xef\x3c\x3a\x07\x72\xfa\xbb\xfe\x74\xa7\x4a\x1b\xdc\x9b\x83\
+\x8c\xc9\x9f\x2c\xb4\x93\xc1\x2f\xa8\xff\x00\x3a\x89\x60\xe5\x15\
+\x76\xc9\x8e\x32\x32\x76\x48\xb0\x68\xa4\x29\x85\xb5\x24\xaa\x64\
+\xb3\xf3\xe2\x9a\x4d\x38\x21\xa8\xee\x2d\x13\xa4\x05\x01\xdb\xc5\
+\xac\xf1\x83\x93\xb2\x34\xca\x79\x55\xd8\xef\x45\x42\xdd\xb9\xbc\
+\xc3\x1e\x22\xe5\xc8\x23\x1f\xfc\x43\x4d\x92\x6f\xb7\x42\x3f\x64\
+\xf3\xa0\x13\x80\x4b\x87\xfc\xeb\x4f\xb1\x4c\xcd\xed\xb0\xec\x2c\
+\x7a\xc5\xc3\x84\x13\x50\x2b\x55\xfa\x73\x8b\xf0\xdf\x79\xcd\xde\
+\x87\x79\xff\x00\x3a\x58\xfd\xe5\xf6\x9a\x59\x71\xd7\x31\x8e\x3c\
+\xc6\x8f\x62\x99\x2b\x1b\x06\x27\xd7\x92\xd4\xdc\x45\x84\x9e\x4f\
+\x15\xf3\x6b\xab\xd7\x73\x7a\xd7\xd7\x69\x7b\xf7\x03\x21\x49\x4a\
+\xbb\x8d\xa0\xe3\x3f\xca\xba\xf7\xaf\x9a\xe5\xdb\x56\x91\xb9\x4b\
+\x4c\x85\x25\xdf\x0c\xb2\xc8\xdc\x72\x5c\x5f\x03\xd7\xd0\x64\xfe\
+\x15\xc3\xaf\x87\x97\x20\x4b\xdb\xbd\x0f\xa8\x80\x49\xc8\xcf\xa8\
+\x3f\x35\x8e\xad\x2c\x95\x1b\x6c\xd3\x42\xa7\x11\x36\x8c\x18\x52\
+\x1b\x21\xc5\x24\x2b\x61\xc2\x10\x7b\x13\xee\x6a\x61\xa1\xae\x2c\
+\x5a\x1c\x17\x45\xbb\x99\x8f\x3d\xb5\x2b\x03\x2a\x4b\x7f\xbe\xad\
+\xa7\x83\x9c\xf0\x3d\x93\xf3\x51\x34\xb6\xcb\xee\x14\xa1\xf4\x32\
+\x94\x8e\x03\xb9\x1f\x91\xff\x00\x3a\xc9\x69\x58\x90\x19\x6d\x7e\
+\x65\x00\x84\xed\x3b\x89\xf4\xc0\xc7\x72\x69\x53\x8e\x65\x63\x4d\
+\x39\xe4\x95\xce\x83\xe9\xee\xa8\xb6\xb8\xd4\xdb\xf5\xc2\x5a\x21\
+\x5a\xad\x8a\x6e\x34\x72\xf2\x82\x40\x51\xc8\x03\x8f\xbc\x48\xce\
+\x71\xee\x6a\xc4\xb1\xf5\x8b\xa6\x71\x62\xa9\x52\xf5\x8c\x64\x3a\
+\x15\xb4\x6c\x8c\xf2\xbc\xb8\xf8\x4f\xd6\xb9\xf3\xa9\x5a\x7d\xfb\
+\x1f\x49\xed\x4c\xc8\x88\x62\xbe\x2e\x29\x53\xac\xf7\x53\x41\x4d\
+\x28\xa4\x2c\xff\x00\x68\xe1\x5c\x7a\x57\x48\x69\x1d\x29\xa6\x62\
+\x74\x6b\x4e\x6a\x18\xbd\x28\xd1\xd3\xdf\x7e\xd5\x1d\xc5\xbd\x36\
+\x0f\x8c\x5c\x5a\xb0\x92\xb5\x12\x73\xc9\xe4\xfd\x6b\x9b\x43\x0b\
+\x4e\xbd\xea\xa7\xa5\xdf\x91\xd5\xaf\x8a\x94\x1a\xa7\x65\xcb\xcc\
+\xcd\x5d\x79\xe9\x0a\x48\x49\xd5\xce\x10\x3d\x45\xb6\x41\xff\x00\
+\xfc\x2b\x79\xeb\xff\x00\x48\x1b\x69\x45\xad\x58\xb5\xab\x19\x03\
+\xf5\x74\x80\x4e\x3e\xa8\xa5\x6b\xd3\x37\x35\x46\x2f\xda\xf4\x27\
+\x4d\x59\x69\x20\x95\x3c\x34\xe3\x4d\x47\x4e\x3f\xe3\x5c\xe0\xfe\
+\x15\x86\x97\xd0\xda\x9f\x53\x3b\x23\x68\xe8\xaa\x9b\x8a\x52\x99\
+\x28\x89\x61\x6a\x62\x9a\x2a\xe4\x05\x10\x84\xa7\x3c\x1e\xc4\xd3\
+\x61\x4a\x93\xf7\x5b\x7e\xbc\x05\xca\x53\x4a\xf2\xb2\x21\xd3\xfa\
+\xf5\xa6\xee\x61\x5f\x65\xbc\x46\x8c\x8e\x4b\x2d\xa9\x45\x0a\x20\
+\x76\xdc\x48\xc0\xcf\xe3\x50\xcd\x4d\xd6\x18\xec\xc4\x6a\x05\xaf\
+\xec\xf2\x64\x2d\xb2\xe2\x9d\x66\x56\x52\xda\x8f\x60\x55\xce\x4f\
+\xae\x33\xf9\x57\x4c\xb5\xd0\x2d\x2c\xfc\x4f\xff\x00\x54\xb5\x69\
+\x29\x2f\x9e\xea\x8d\xa6\x58\x61\x39\xfa\x24\xe7\xf8\xd4\x23\x58\
+\xfe\x8d\xbd\x3d\x5b\x6e\x97\x63\xdb\xad\xce\xf0\x12\xe2\x61\x48\
+\x61\xbc\xfc\x14\xbc\xa4\xe7\xf0\xa1\x61\x23\x7b\xca\xfe\x45\xbd\
+\xbe\xcb\x2c\x2d\xf0\xbf\xd4\xe5\xe8\x53\xb5\x05\xea\x43\x92\x25\
+\xdd\xe6\xbc\xf3\xca\x09\x05\x2a\x5b\x99\x04\xf3\x84\x0e\x00\xfe\
+\x35\x25\xd2\x36\x1b\xba\x56\xb5\xe9\xe7\xe7\xb5\x21\x0a\x53\xae\
+\x34\x14\x42\xde\x4a\x78\x56\x10\x7b\xfd\x47\x20\xf7\x15\x36\x97\
+\xfa\x39\x39\x6e\x7c\x48\xd2\xba\xb9\xb4\x38\x9f\x30\x4c\x5b\xb8\
+\x6d\x60\xfc\x25\xc4\xa7\x3f\xf6\xab\x28\xed\xf5\x8f\x42\x38\x5d\
+\x9a\x21\xdf\xdb\x53\x9b\xdb\x17\x38\x25\x2e\x03\xee\xdb\xec\x92\
+\x77\x1e\x7b\x92\x3e\x2a\xb3\x84\x6f\xd5\x92\xfe\x0d\x74\x71\x6d\
+\x25\x78\xb6\xfe\x7f\x92\xe6\xe8\xfb\xd7\x35\xd8\x76\xc8\x9a\xf4\
+\xa6\xd2\x94\xad\x92\xf8\xc2\xdb\x1f\xbc\x09\x3d\xfb\x76\xf7\xc1\
+\xf5\xa9\xf4\x37\x1a\x70\x16\xf2\x0a\x81\xc0\xf9\xaa\x3f\x44\xf5\
+\xb7\x4a\x39\x31\xb6\x75\x3c\x59\xfa\x3e\x72\xbf\x64\xf3\xd2\x71\
+\x22\x13\x85\x59\x00\x17\x50\x3c\x8a\xcf\x3e\x64\x8e\xc3\x35\x7a\
+\xe9\x8f\xb2\xcc\xb6\x36\xfc\x07\xa3\x4d\x88\xb4\xe5\xa7\xe2\xba\
+\x97\x5a\x23\xe1\x49\x24\x1a\xbc\x69\xb8\xa4\x99\x92\xb5\x45\x29\
+\x39\x02\xdb\x59\xce\xd1\xc8\x1c\x83\xed\x5e\x38\x48\x8e\xa2\x91\
+\xc2\x47\x62\x29\x7c\xb8\xae\x82\x0b\x0d\x93\xc7\x24\x72\x0f\xc0\
+\xa6\x1b\xbc\xb6\xed\x30\x5f\x99\x73\x95\x1a\x04\x56\xbc\xcf\x3f\
+\x2d\xd4\xb4\xda\x47\xae\x54\xa3\x81\x55\x9a\x48\x5c\x7a\xc5\x2b\
+\xd6\x48\xb3\xee\x57\x93\x01\x85\xb8\xd4\x79\x6e\x62\x5b\xc9\x57\
+\x99\x2d\x80\x30\x81\xf3\xef\xf5\xaa\xa6\xf3\xa6\xa2\xdb\x52\xe3\
+\x51\xa0\x82\x86\xc3\x69\xf1\xc8\x1b\x54\x95\x03\xfb\x20\x7b\x93\
+\x8e\x0e\x31\xeb\x93\x56\x4e\xb2\xeb\x66\x96\xfd\x64\xe4\x0d\x11\
+\xa6\xae\x1a\xe6\xe4\xae\x10\xa6\x5b\x53\x51\x73\x93\x92\x9e\x0a\
+\xdc\xfa\x80\x07\xcd\x56\xda\x9a\x47\x5c\x75\x5a\xcb\xb2\x20\xc4\
+\xd3\xb1\x54\x42\x44\x3b\x7b\x68\x43\x89\xc7\x6c\xf2\xa7\x01\xe7\
+\xd4\x8f\xa5\x27\x84\xe3\xab\x69\x78\x9d\x18\xe2\x22\xe2\xa2\xe0\
+\xdf\xaf\x91\x00\x4d\xd6\x7e\x95\xbb\xae\x65\x86\x6a\xad\xab\x25\
+\x47\xec\xce\x85\x2d\x97\x92\x48\xf2\xa9\x38\xc0\x3e\xb9\xf8\xe2\
+\xac\xad\x17\xd6\x70\x63\xa8\xca\x97\x1a\x0a\x59\x29\x21\x97\xdf\
+\xc2\x82\xbd\x52\x09\xfb\xc8\xf9\xef\xfe\x30\xe1\xd1\x4d\x5b\x31\
+\xc3\x22\xe5\x32\x03\x2a\x51\xca\x97\x36\x7e\xe5\xe7\xe4\x24\x13\
+\x4d\xd7\x6e\x99\xc2\xb4\x83\xf6\xfd\x5b\xa7\x99\x50\x24\x63\xc1\
+\x90\xb1\xc7\xb1\x08\xe6\xaf\x25\x86\xa8\xac\xe5\xaf\x70\x88\xfb\
+\x4c\x64\xf2\xc2\xf1\xec\x7a\x9d\x33\x03\xab\x5d\x3d\x9f\x01\x0e\
+\x3f\xab\xad\x31\x5f\x48\x01\xc6\xde\x7b\x18\x38\xf4\x20\x1c\xd4\
+\x27\xaa\x3a\xdb\x44\x4c\x99\x05\xcb\x76\xa7\xb4\xcf\x57\x8f\xe7\
+\x4b\x6e\xe7\xcb\x82\x08\x39\x1d\x8f\x6c\xfc\xd5\x02\xde\x9a\x88\
+\xe6\x1b\x85\x7f\xd2\xb3\xca\xd5\x81\xb5\xe5\x34\xbf\xa6\x1c\x48\
+\xa5\x12\xf4\x5b\xb1\x54\x10\xf2\xa2\x30\xe9\x4e\x76\x3c\xd2\xdb\
+\x03\xe8\xbc\x14\xfe\x39\xab\xc7\x07\x4e\x6f\xde\x66\x7f\x68\x9c\
+\x75\xd1\x5f\xc7\x99\x2f\xe9\xee\xa9\x66\xc1\xd4\x86\x1c\x72\x73\
+\x02\x33\xf9\x61\xe7\x3c\x51\x82\x41\xf2\xab\xfc\x3f\x1a\xee\x1d\
+\x01\xa8\x63\xce\x82\xd2\x9a\x90\xd3\xc9\x20\x79\x9b\x58\x50\xfc\
+\xc5\x7c\xd5\x99\x62\x79\xb5\x3e\x9f\x0c\x78\x91\xd0\x97\x57\xb5\
+\x5b\xb0\x82\x42\x42\x81\x1e\x9b\x88\x1f\x88\xab\x07\xf4\x69\x9d\
+\x76\x67\x5f\xc8\x86\x8b\xbc\xf8\xd1\xd5\x05\xc5\xac\x32\xfa\x93\
+\x9c\x14\xe3\xf8\xd6\xa7\x18\xc1\xe7\x83\xd0\xe6\xe2\x61\x38\xa7\
+\x37\xc8\xfa\x4e\xc3\x81\x69\x04\x73\x5b\x6a\x9c\xd3\x91\xe5\x49\
+\x8c\x8c\xea\x5b\xf8\x3f\x13\x8f\xf9\x54\xda\x0e\x9e\x5b\xd1\xd2\
+\xe2\xb5\x0e\xa2\xce\x39\xc4\xdf\x5f\xca\xb7\xca\x8b\x8c\x54\xbb\
+\x4c\x14\xf1\x3c\x47\x64\x89\x6d\x15\x54\xdd\xed\x57\x25\x5c\xd6\
+\xc4\x2d\x4d\xa9\x0e\x0f\x00\x4f\x56\x0f\xe5\x4a\x22\xe9\x1b\xf3\
+\xa8\x0a\x5e\xaa\xd4\x88\x2a\xec\x3f\x58\xab\xfc\xa9\x8f\x0a\xd2\
+\xbb\x65\x16\x32\xee\xca\x2d\x96\x75\x15\x59\x4b\xd2\x17\xe6\xdb\
+\xcb\x5a\xbb\x51\x9e\x7d\x6e\x0a\xed\x45\x0b\x0a\xde\xd2\x40\xf1\
+\x8d\x6f\x06\x38\x5c\xae\x0c\x6a\x6d\x6e\xbb\x0a\x9c\x3f\xab\xed\
+\x8a\x49\x90\x9c\xe0\x3c\xf7\x70\x9f\xa0\xff\x00\x3a\x70\xea\x0d\
+\xae\x1c\xcb\x0a\xc3\xcd\xa5\x28\x64\x0c\x01\xc6\x38\xff\x00\xca\
+\xa0\x7d\x38\x75\x4e\xbb\xfa\xc7\x0a\x2f\x4d\x92\xe3\xab\x23\xb9\
+\xca\x8f\xf9\x54\xff\x00\xa8\x72\x54\xce\x9b\x75\x29\x04\xad\xc1\
+\x80\x07\xae\x69\xd1\xa5\xc3\x9c\x2d\xcc\x44\x6a\xf1\x69\xcd\xcb\
+\xd7\x61\x4d\x4a\xb9\x94\xb1\xf6\x68\x00\x25\xb1\x91\x90\x3b\xff\
+\x00\xae\x29\xad\xc4\xb8\xf8\x52\x54\xf2\x89\x58\xed\x9e\xd5\x25\
+\xb0\xe8\xc9\xd3\x50\x1d\x92\x4b\x49\x56\x49\x1d\x8d\x49\x5a\xd0\
+\x30\x83\x61\x2a\x52\xc3\x87\x80\x73\xeb\xdf\xfc\x6b\x7b\x92\x5b\
+\x98\xd4\x5b\xd8\xae\x2d\xd1\x56\xca\xd0\x5a\xc1\x5e\xf1\x91\xeb\
+\xf3\x57\x93\x13\x1c\x85\xa5\x5a\x0f\x0f\xda\x94\x0e\xff\x00\xe3\
+\x51\x3b\x46\x95\x8b\x6c\xbb\x89\x13\x1c\x2b\x6c\x72\x02\xbb\x8a\
+\x76\xba\xca\x55\xc2\x50\x66\x33\x79\x69\x3c\x24\x01\xc7\xa1\xaa\
+\x4e\x39\xda\x5c\x8b\xc2\x4e\x09\xbe\x7b\x09\x6d\xb1\x5c\x9d\x39\
+\x29\x09\x27\x72\xc1\x51\x1d\xbf\xd7\x61\x53\x67\x9c\x6e\x14\x14\
+\x30\xd8\x19\x09\xc7\xe5\xcd\x23\xb3\x47\x6a\xd9\x10\x3a\xf7\x2e\
+\xa8\x6e\x38\xa6\xdd\x43\x73\x11\xd9\x5b\xce\x2b\xce\x7e\xe8\x3f\
+\xeb\xe9\x48\x95\xea\xce\xdc\x90\xf8\x7e\xcc\x2f\xcd\x91\xcd\x67\
+\x3b\x9f\xb3\x36\xac\x2b\x39\x5e\x2a\x22\x8b\x72\x9e\x06\x4e\x00\
+\x09\x38\xa5\xcf\xac\xbc\xa5\xbe\xbc\x92\xbe\xc0\x0e\xde\xd4\xe7\
+\x69\x0d\xa2\xd8\xa6\xca\x48\x52\xff\x00\xb5\x5a\xd1\x91\xea\x6b\
+\xd3\xb3\x4c\x39\x6d\xef\x50\xf0\xd5\x81\x92\x7b\xfc\xd5\x9b\x68\
+\x98\x14\x03\x2a\xe5\x04\x00\x2a\xa3\x42\x36\xad\x6d\xf2\x36\x92\
+\x47\xc5\x4a\xf4\xa5\xd4\x2b\x11\x9c\xfb\xc3\xee\x92\x3b\x0a\x55\
+\x6a\x6a\x71\xb0\xda\x35\x1c\x25\x71\xfb\x51\xdb\x8b\x2f\x2a\x53\
+\x5f\x71\x5f\x7b\x15\xb3\x4d\x4c\xd8\x55\x15\x67\x85\x0c\x27\x26\
+\x9c\x58\x7d\x32\x1a\x2c\x48\x39\x49\x1c\x1a\x61\xb9\x40\x72\x04\
+\x8f\x19\xbc\xa9\xb1\xca\x7e\x94\x98\x3c\xf1\xe1\xcf\x71\xd3\x59\
+\x25\xc4\x86\xc4\x7f\x54\x41\x72\x2d\xc1\xd5\x3a\x83\xb1\x67\x8c\
+\xfe\x54\xdf\x15\x95\xa8\x61\xb6\x54\x46\x78\xe2\xa6\xaa\x90\xcd\
+\xdf\xc3\x62\x42\x02\xd4\x93\xdc\x8a\x76\x8f\x06\x2b\x0d\x84\x86\
+\x86\x3b\x76\xa6\xba\xb9\x12\xcc\xb5\x14\xa9\x67\x6d\xc5\xe8\x57\
+\x2e\x27\x0a\x2a\xd8\xa6\xd5\xee\x46\x31\x53\x2e\x9d\xba\x56\xcb\
+\x9b\xc8\x52\x87\xaf\xad\x3a\x49\xb7\x45\x90\x8c\x29\xa4\x80\x07\
+\xa0\xa4\x76\x9b\x69\xb5\x4f\x53\x8c\x92\x50\xaf\x4c\xd2\xea\x55\
+\x8d\x48\x35\xcc\x6d\x3a\x52\xa7\x35\x2e\x43\x9d\xfe\x42\xdb\x65\
+\x2d\x20\x94\x95\x1f\x6a\x65\x53\x45\x63\x0a\x51\x27\xd4\x9f\x6a\
+\x77\xbe\xa3\xc7\x61\x0e\xa3\x38\x4f\x71\x8a\x68\x79\xd0\xd4\x72\
+\xe6\x4f\x94\x55\x70\xfa\x41\x58\x9c\x46\xb3\x77\x19\xef\x69\xd8\
+\x50\xd0\x18\x4e\x79\xad\x0b\x18\x40\x4f\x6a\xf2\x53\xee\x4a\x90\
+\x83\xb3\xcb\xef\x5b\x1e\x42\x8a\x02\xb9\xad\x88\xc6\xcd\x24\x61\
+\xf6\xdc\xc1\x27\x38\xa5\x57\xa7\x52\x88\xa4\x9e\x4e\x31\x9a\xd0\
+\xa6\x96\xe2\x40\x1c\x1e\x79\xf6\xa6\x9b\xcc\x97\x50\xd3\x8d\xad\
+\x5b\x86\x3f\x2a\x3b\xc1\x1c\xc9\xfa\x59\x5c\x40\xb7\xc0\x88\x92\
+\x37\x39\x21\xc7\x0f\xd1\x29\x03\xfc\x4d\x73\xf5\xa6\x73\xd6\xc7\
+\x94\xbf\x05\xb9\x0c\xba\x8d\xae\x32\xe8\x3b\x56\x3d\xc1\x07\x29\
+\x50\xee\x14\x39\x1f\x98\x36\xb7\xe9\x44\xfa\xdf\xd4\x90\x93\xce\
+\x13\x18\xe3\x27\x8e\x56\xac\xff\x00\x85\x56\xf6\x6b\x63\x73\x90\
+\xe9\x5b\xa1\x88\x8c\x00\x5e\x90\xae\x71\xf0\x91\xea\x49\xc0\x03\
+\xdc\xd7\x9f\xad\x34\xdb\x6c\xee\xe0\xe2\xd5\x35\x61\xa9\x48\x53\
+\xee\x2d\x6d\x78\xcb\x27\x24\xf8\x87\x25\x23\xdc\xab\xfc\x6b\xa0\
+\xbf\x47\x6e\x9b\x08\x52\x60\x5f\xaf\xe9\x30\xe6\x4d\x4f\x8f\x6a\
+\x74\x29\x0e\x61\xb0\x33\xb9\x23\x90\x95\xe7\xbe\x79\x03\x18\x1d\
+\xea\x98\xb2\xfd\x9e\xe7\xa9\x20\xdb\x62\xb1\xe0\x41\x5c\x96\xfc\
+\x64\xf7\x51\x40\x50\xce\x4f\xa9\xc6\x4e\x3d\xea\xea\x8f\xac\xda\
+\xd1\x70\x0e\x54\x1e\x66\x14\x99\x0a\xb3\xb6\x71\x95\x87\x37\x24\
+\x10\x3b\x8c\xa4\x83\xed\xd8\xf1\x58\x31\x75\x5a\xb4\x17\x33\xa3\
+\x87\xa4\x9a\x73\xec\x1b\x3a\xfb\x0d\x85\xd8\xde\x8e\x2e\x6f\xcd\
+\xb9\xc8\x9e\x97\x59\x65\xc0\x54\xea\x90\xda\x56\x16\xa3\x8c\x01\
+\x9d\xd9\xc6\x2b\xa6\x3a\x57\x32\x72\x3f\x46\x3d\x11\x2e\xdb\x2b\
+\x6d\xc9\xf8\x0d\xc2\x88\xe1\x20\x21\x95\x6e\x50\x53\x87\x3c\x1d\
+\x88\x42\x95\x8f\x52\x90\x3d\x6b\x8a\x65\x5d\xa6\x4e\xb9\xbb\x73\
+\x9c\xf1\x7a\x5b\xe7\xce\xbc\xf0\x91\xe8\x84\x7c\x0f\x7f\x53\xcd\
+\x5e\x5f\xa2\x9e\xb9\xd4\x72\xaf\xb6\xde\x96\x48\x98\xda\xac\x66\
+\x3d\xc1\xdb\x7b\x65\xa1\xe2\xb6\xe2\x99\x70\x86\xf7\x7a\xa4\x6e\
+\x71\x40\x77\xe7\xd8\x0a\xa6\x0d\x3a\x34\xf8\x6f\x7f\xa9\xb3\x15\
+\x85\x75\x12\xaa\xbe\x3e\x08\x8d\xeb\x4b\xf5\xe7\x51\xea\x65\x68\
+\xab\x5c\xe9\x6b\xb4\xdb\x1d\x52\x56\x95\xbe\xa5\x97\x17\xb8\x95\
+\x12\xa3\xfd\xe5\x12\x71\x8e\x49\xf8\xae\xa0\xfd\x16\xf4\x6c\x3d\
+\x2d\xa6\xee\xa2\x3c\xc7\x25\x7d\xbd\xd6\x9c\x74\xab\x18\xdc\x94\
+\x91\xc1\xc7\xb1\x19\x19\x3d\xbe\x6a\xa7\xe8\xc6\x86\x5c\x7b\xc5\
+\xd2\xe7\x75\x28\x56\xfb\x83\xaa\x69\x18\xc1\x27\x71\xe4\xfb\xd7\
+\x46\x58\xa5\xb7\x6c\x6d\xdd\x8c\xa5\x48\x59\x05\x5b\x4e\xdc\x60\
+\x55\xa8\x54\xd5\xf6\x15\xc6\xc5\x65\xca\xb7\x26\x21\x09\x00\x24\
+\x0c\x01\xd8\x0a\x61\xd7\x36\xbf\xd6\x76\x25\xc7\x0f\x25\x94\xa5\
+\x5b\xca\x89\xf5\xec\x3f\x9d\x2d\xb5\xde\xed\xd7\x01\xfe\xcf\x21\
+\x25\x49\x4e\x54\x92\x7e\xef\xbf\x34\xcb\xad\xf5\x7e\x9b\xb4\x5a\
+\xc8\x9f\x72\x88\x43\x8e\x04\x14\x07\x02\x94\x38\x27\x38\x1f\x4a\
+\xd9\x2b\x38\x9c\xc8\x29\x46\x6a\xcb\x52\xab\xba\xe8\x70\xb0\xb5\
+\x26\x7b\x4e\x10\x09\x03\x38\x22\xa3\xb2\xad\xf7\xdb\x36\xf4\xb5\
+\x39\xd4\xb2\xa1\x85\xb4\xe8\xf1\x59\x58\xf6\x29\x3c\x54\x86\x67\
+\x51\x34\xa4\x97\x1e\x16\xf9\xc9\x71\x0d\xed\x4a\xd6\xb6\x54\x13\
+\xb8\x8e\xd9\xc5\x37\xa2\xe8\xc4\xf5\xb6\x94\x2f\xf6\x4e\x61\x4d\
+\xba\x9f\x32\x01\xf6\xcf\x6a\xe0\xe2\x28\xc2\x2f\xaa\xf5\x3d\x3e\
+\x1a\xad\x67\x1e\xba\xba\xef\x43\x0c\x0b\x2d\xa9\x3a\x8a\x35\xfa\
+\xee\xd3\x4e\xda\x0b\x6e\xc3\x9f\x1f\x68\x71\xb6\xdb\x75\xb5\x23\
+\xc4\x52\x8f\x2a\x61\x0a\xd8\xa2\x95\x65\x48\xfb\xc0\xe1\x26\x90\
+\xf5\x0b\xa3\x5a\x83\x4f\x6b\xbd\x29\x2f\x4a\x5b\x2d\x57\x18\xc6\
+\xdb\x1a\x1b\xac\x6d\x42\x19\x93\x21\xa5\x2c\x6e\x52\x0e\x12\x41\
+\x6f\xc3\xca\x8f\x72\x3d\xcd\x3b\x5f\x18\x91\x15\xf4\xcc\x8c\xd9\
+\x4a\xe3\xbc\x8f\xb5\x33\xb7\xc8\xfb\x64\xf9\x92\xa1\xd8\x82\x32\
+\x3f\x1a\x84\xcc\xb5\x6a\x4b\xe7\x56\x1b\xd1\xb6\xdd\x47\x31\xb8\
+\x3a\x6e\x28\x85\x05\xd7\xdd\x50\x54\x44\x8c\x2d\x4d\x82\x0f\xed\
+\x0a\x72\x90\x14\x79\xda\x84\x03\xda\x9f\x43\x13\xc1\xa4\xe3\x6d\
+\x79\x11\x53\x09\x2a\xf5\xd4\xd4\xec\xac\xef\x7e\x49\x78\x6b\xcc\
+\xd7\xfa\x58\x68\x7b\xdc\x58\x2c\x6a\x99\x76\x0b\x0e\x98\x43\x6d\
+\xa5\xb5\xb5\x6c\x94\xa4\x07\x15\x9e\x49\x09\x01\x24\xd5\x27\x63\
+\x96\x2d\xa1\x6b\xbe\x59\xbf\x58\x21\x6c\xe5\xa5\x4b\x74\xb8\xda\
+\x37\x00\x42\xf0\x49\x1d\xb2\x41\xae\xc0\x99\xd3\x5b\xc5\xe6\xd4\
+\x22\xea\x0e\xa8\x6a\x8b\x8b\x4a\x00\xa9\x95\x29\x2a\x68\xe3\xdc\
+\x2b\x39\xfa\xd4\x1f\x48\xf4\xbe\xd5\x77\xd6\x97\x3e\x9e\xdd\xe7\
+\x06\x95\x11\xd6\x2e\x4c\xc8\x6e\x30\x59\xb8\x42\x42\x90\x57\x1d\
+\x63\x38\x41\x0a\xd8\x42\x87\x23\x72\xc7\x20\xe0\x68\x86\x2a\x4e\
+\x69\x49\x68\xfc\x0c\xfe\xcf\x08\x53\x94\xa3\x52\xed\x6f\x64\xf6\
+\xbe\xfa\x92\x3f\xd1\xe3\x47\xdc\xa5\xf4\x65\x77\x99\xb0\x15\x6f\
+\xfb\x52\xde\x75\x95\x38\x80\x93\x21\x92\xac\xb6\xbc\x0c\x28\x8c\
+\x64\x61\x5c\x60\x0c\x0e\x73\x49\x05\x92\xfb\x36\x49\x65\x0f\xab\
+\xc3\xf4\x4b\x63\x6a\x53\xf8\x0e\xd5\xd2\x5a\xa9\x0d\x33\xa5\xa5\
+\xc5\x8e\x03\x09\x43\x29\x69\x09\x6d\x20\x04\x0e\x00\x00\x76\x03\
+\x15\x54\xbd\x74\xb2\x59\xa3\x78\x77\x3b\xa4\x58\x61\x47\xfe\x19\
+\xc0\xd0\x24\x9f\xae\x7b\xd5\x71\x58\x58\x3b\x5f\xe2\x27\x05\x8d\
+\xa9\x79\x49\x2b\xf6\x11\x46\xfa\x71\x31\xe4\x95\xc9\x96\x1a\x3e\
+\x98\x19\x22\x91\x5d\x3a\x57\x1a\x4c\x55\xb0\xb7\x83\x83\x9c\xee\
+\x4f\x04\xff\x00\x85\x4a\x5c\xd4\x76\x69\x33\x95\x12\xdd\x77\x80\
+\xf3\xa1\x39\x29\x6a\x58\x0b\x4e\x31\xdc\x13\xf3\x5b\x58\xbd\x2e\
+\x3a\x83\x72\x81\x2d\x93\x8f\x10\x8e\x47\xf9\x8a\xe7\xba\x34\xe0\
+\xce\x97\xb5\xe2\x9a\xbd\xfc\x8e\x4b\xea\x97\x4a\x2e\x3a\x6a\x73\
+\x92\x23\xa3\xed\x76\xe2\x3c\x4c\x8e\x16\x9c\xf7\xc8\x3e\xdc\x57\
+\xba\x6e\xf0\xd4\xbd\x37\x0d\x32\x5e\x54\x79\x70\x52\xa6\x16\xe8\
+\x51\x04\x24\x0f\x22\xbe\xa3\x20\x11\xf1\x5d\x77\x7c\x81\x0e\xed\
+\x05\x71\xdd\x69\x0e\xb6\xb6\x94\x9d\x8b\x19\x05\x24\x60\xe3\xda\
+\xb8\xb3\x5f\xe9\xa7\xb4\xd5\xce\xe5\x6e\x6d\x2e\x06\xdb\x7c\xa9\
+\x0a\x27\x3b\x90\xac\x81\xf9\x1c\x8a\xd9\x4e\xac\xa7\x68\x37\xe0\
+\xcc\x55\x14\x35\xaa\xa3\xe2\xbe\xa6\xfb\xab\xea\xbf\xd9\xa5\xdd\
+\x1b\x43\x3f\x6c\x84\xe8\x66\x61\x61\x21\x28\x77\x23\x87\x00\x1d\
+\xb3\x8c\x11\xee\x33\xeb\x4a\xba\x04\x89\x1f\xd3\x49\xd7\x16\xdb\
+\x26\x3b\x50\xcb\x4a\x5f\xa6\xf5\xa8\x6d\x4f\xd4\xe0\x9f\xc2\x99\
+\xfa\x7a\x5e\x8b\xd3\xfd\x71\x74\x4a\x72\x98\xa9\x83\x82\x7f\xb4\
+\xb7\x4a\x71\xf9\x13\x56\x1f\x46\x6d\x42\x1c\x38\xf6\xc4\xba\x16\
+\xea\xdc\xfb\x44\x8c\x0e\x02\x88\x18\x4f\xe0\x38\xfc\xeb\xaa\xe3\
+\x9d\x46\x9c\x77\xd8\xe0\x62\x6b\x7e\xcb\x4f\x99\xd4\xba\x11\x25\
+\x70\x9a\x4e\x15\x92\x3f\x21\x56\xac\x73\xe0\xb0\x1a\x47\x27\x18\
+\xc8\x1d\x8d\x57\xfa\x0e\x29\x65\x86\xdc\x20\xef\x03\x81\x8a\x9f\
+\xb4\x76\x37\xe6\xc2\x94\x7f\x2f\xf5\xcd\x75\x6b\xac\xa9\x43\xb0\
+\xe6\x61\xa3\x65\x70\x62\x23\x4d\x2c\xac\x20\x15\x9e\xe7\xde\xb7\
+\x6e\x09\xe0\xa8\x8f\x72\x38\x34\x21\xb5\x93\xca\x8a\x53\xc0\x3c\
+\xf7\xac\x43\x49\xff\x00\xe3\x27\x20\x7d\x78\xfa\x56\x56\xef\xbb\
+\x34\xa5\x6d\x90\x3a\xe0\x4a\x15\xb8\xe0\x7a\xfb\x7f\xae\x68\xa4\
+\xf2\xad\xcb\x7f\x1f\xed\x07\x60\x3e\x64\x83\x9c\xd1\x4d\x87\x0e\
+\xda\xb1\x72\xe2\x5f\x44\x56\xfd\x21\x60\x0d\x3f\x12\x6b\x87\x09\
+\x41\x70\x72\x7f\xbe\xaa\x98\xbb\xba\x6a\xca\xdc\xc9\x40\xe5\x29\
+\xcf\x06\xa3\x5d\x3b\x4a\x53\xa2\xe0\x60\x60\x23\x7f\xfd\xe2\xb9\
+\xa9\x4b\x4c\xbc\xf2\xb3\xbb\xc3\x6c\x1c\x12\x7b\x62\xb6\x3b\x25\
+\x73\x9f\x4a\xf9\x54\x4c\x00\x6d\xa1\xb4\x14\xe4\x7b\x56\xc4\xb8\
+\xca\x52\xb5\x78\x89\x48\xf9\xf4\xef\x58\xba\xab\x5b\x3e\x47\x56\
+\x16\x73\xcf\x9b\x9a\xcc\x2e\xcd\x27\x0d\x85\x6d\xdc\x31\x9f\x8f\
+\x6f\xa5\x55\xbe\xe6\x35\x2b\x73\x47\x3f\xdf\x2f\xba\x9a\xe5\xa5\
+\xee\x1a\x3e\xdb\x74\x94\xe5\xfc\x6a\x39\x10\x23\x48\xf1\x0a\x9e\
+\x0d\x23\x32\x12\xac\xe7\x3f\xd5\x8d\xbf\xc2\x9f\xed\x17\xa9\xf7\
+\x58\xd6\xb9\xb6\xe7\xca\x83\x7a\x45\xcb\x94\xa6\x84\x85\x32\x1d\
+\x79\xdd\xa8\x40\x52\x92\x09\x49\x4e\xc7\xc8\x20\x1e\x45\x49\x2d\
+\xfd\x38\x99\x69\xea\xdc\xdd\x67\x1a\x43\x0e\x5a\x5d\x8f\x96\x58\
+\x49\x3e\x22\x64\x94\x21\xb5\x38\x46\x31\x8d\x88\xc7\x04\x9c\xa8\
+\xf6\xa4\x3a\x33\x47\x3f\xa4\x2d\x3a\xb1\x13\x27\xc5\x7c\xdc\x96\
+\xeb\x76\xed\xaa\x51\xf0\x62\xe5\xc5\x36\x85\xe4\x0c\x10\xa7\x57\
+\xc0\xce\x3d\x0f\xa0\xa5\xdc\x95\xa3\xb1\x9b\x87\x38\xbe\xb7\xae\
+\xc1\x95\xbd\x69\xa8\xdb\x47\x4d\xdb\xb6\x18\xff\x00\x64\xba\x5a\
+\x9d\x79\x6d\xce\x98\xb7\x1c\x5a\x9a\x69\x38\x0e\x39\xb0\x93\x8d\
+\xe0\x82\x39\x27\x39\x00\x0e\x61\xb2\xf5\x5d\xe6\x05\xd7\x5b\xdd\
+\x84\x34\xce\xb7\x42\xba\xf8\x8e\x07\x25\xa9\x2b\x4a\x0a\x11\x94\
+\xb6\x9d\xa4\x70\x39\xe4\xa7\xbd\x3a\x3f\x61\xbf\x22\x3e\x8a\xfb\
+\x33\x96\xf7\x9f\xd3\x90\x9d\x8a\xe2\x16\xf2\x90\x87\x7c\x46\xd0\
+\x82\x52\xa0\x82\x78\x28\xcf\x23\x9c\xfa\x56\x8b\x86\x90\xb8\xbd\
+\x61\xd6\x70\x92\xf4\x30\xed\xee\x41\x72\x31\x52\xd4\x12\x94\xec\
+\x4a\x70\xbf\x2f\x07\x29\x3d\xb3\x4c\x8c\x24\x97\xae\xc2\x8d\xc9\
+\xef\xeb\x41\xcb\xa8\xd7\xd7\xec\x3a\x1a\xe1\x7a\x84\x41\x75\xa6\
+\x92\x59\x2a\x19\x00\xad\x49\x4a\x4e\x3d\x70\x54\x0d\x44\xe3\x5d\
+\x35\x0e\x97\xb9\x68\x89\x52\x35\x04\xeb\x9b\x3a\x87\x6b\x33\x58\
+\x94\xa0\xa4\x05\xac\x23\x6a\x9b\xc0\x1b\x70\x57\x8f\xc3\xe4\xd4\
+\xfe\x7e\x98\x46\xa4\xd2\x52\xec\x73\x0e\xc4\x48\x60\x34\x1d\x48\
+\xce\xc5\x8c\x14\xab\x07\x19\xc1\x00\xd4\x2f\x4e\x58\xaf\xb7\x3e\
+\xa0\x59\x74\xf6\xac\x09\x61\x3a\x45\xa0\xb8\x65\xa8\xee\x6d\xb8\
+\x60\x24\x25\xcf\x10\x8d\xa3\x6e\xd4\x64\x67\x39\x07\xe7\x17\xa9\
+\x7c\xc8\xac\xaf\x71\x4f\x4f\xef\xba\xa6\xef\xaf\x75\x2b\x37\x18\
+\xf1\xcc\x28\xb2\x92\xc3\x89\x4b\xe4\xfd\x98\x84\xa8\x00\x81\xb4\
+\x6e\x0a\x29\xc9\x27\x1f\x8d\x59\x8c\x82\x95\xa5\xc4\x2b\x6a\x87\
+\x62\x3b\xe6\xa0\xee\x69\xcd\x51\xa3\x2e\x9a\xc2\xff\x00\x09\x16\
+\xdb\x84\x1b\x8a\x97\x35\xa6\x80\x71\x52\x7c\x40\x95\xec\x40\x40\
+\x4e\x08\x2b\x50\x04\xee\xed\x9a\x99\x5a\x8c\xb3\x6e\x8e\x67\xa5\
+\x91\x37\xc3\x4f\x8f\xe1\x83\xb7\xc4\xc7\x9b\x6f\x27\x8c\xe7\x1c\
+\xf6\xab\x53\xbd\xac\xcb\x47\xbc\x99\xd8\x6e\xc8\x79\x09\x61\xe5\
+\x10\xbf\x42\x4e\x29\xfd\x2b\x56\xd2\xd3\xa9\xde\x83\xc6\x48\xcd\
+\x56\xf8\x50\x21\xc4\x1c\x28\x76\x23\xde\xa4\x96\x3b\xe8\x4a\x43\
+\x32\xf0\x3e\x73\x55\xa9\x4e\xfa\xa3\x4d\x2a\xb6\xd1\x8e\x32\xed\
+\xea\x61\xe1\x32\x22\xfc\xa0\xf2\x8a\x72\x83\x29\xc7\xdb\x1f\xb1\
+\x50\x3d\x8d\x7b\x09\xb4\x3c\xbf\xb4\x13\x86\x87\xf1\xac\xdf\x9e\
+\x84\x1d\xb1\xda\xcf\xb9\x22\xb3\xca\x4e\x5d\x5b\x5d\x8f\x8c\x54\
+\x7a\xd7\xb2\x36\x82\xfe\x3f\xab\x20\x63\x27\x9a\xf5\x2e\x0c\xf9\
+\xd2\x47\x38\xe4\x77\xa4\xc9\x9f\x28\x63\x81\x8e\xe2\x94\x37\x35\
+\x0b\x3b\x1f\x40\x4e\x7d\xa9\x6e\x12\x5c\x86\xc6\x71\x7c\xcc\xbe\
+\xe8\x28\xee\xd9\x14\xc9\x77\x88\xa4\x36\xb4\xe3\xca\xae\x45\x3f\
+\xa9\xb1\x8d\xc8\x39\x42\xbb\xd6\x97\x9a\x0e\xb6\x52\x7b\x7a\x1a\
+\x9a\x55\x32\xbb\x91\x56\x9e\x65\x62\x17\x1c\x60\xec\x38\xe0\xf2\
+\x2b\x39\x19\x28\x1c\x1c\x7a\xfd\x6b\x74\xe8\xeb\x8d\x28\xfb\x13\
+\xcd\x60\xf1\xc2\x32\x3f\x1f\x5a\xe8\xa7\x73\x9a\xd5\xb7\x35\xa0\
+\xed\x6f\x3f\x1c\xd4\x77\x50\x24\xad\x97\x5c\x23\x93\xc0\xa7\xf1\
+\x92\x03\x60\xf7\xf5\xa6\xad\x54\x90\xcd\xb9\x7e\xe5\x3c\x50\xf6\
+\x64\xa3\x8d\x3f\x49\x30\x1c\xd4\xb0\x18\x42\x16\xe3\x82\x39\xc2\
+\x10\x92\x4a\xcf\x88\xac\x0f\xe1\x55\x94\xa7\xd4\xd4\x44\x32\xe2\
+\x42\x4a\xb9\x5a\x7b\x04\x01\xd8\x11\xfd\xae\xff\x00\x9d\x74\x2d\
+\xfa\xe4\xc4\x3d\x64\xe5\xc5\xc6\xf2\xeb\x08\x2c\x32\x52\x8d\xca\
+\x5e\x4e\x54\x33\xe8\x32\xa2\x3f\x0a\xa0\xb5\x5d\xbd\xe6\xb5\x7d\
+\xc5\x97\x12\xa4\x07\x5f\x53\xa0\x3c\xad\xa7\x0a\x39\xef\xeb\x5e\
+\x62\x75\x22\xeb\x64\x7c\xb5\x3d\x56\x1f\x09\x51\x60\xa3\x59\x2d\
+\x1b\xb0\x97\x4b\xcb\x89\x12\xea\x87\xa4\x3e\xeb\x21\x2b\xc8\x53\
+\x68\xdc\x48\xef\x8f\xe1\x8f\xc6\x94\x6a\x0b\x85\xc2\xfd\x7d\x12\
+\x9e\x6c\xa1\x2b\x59\x6a\x33\x09\x1c\x34\x80\x78\x48\xfc\xf9\xa4\
+\xac\x3a\x98\x58\x79\xa6\xd0\xa5\xe7\x8f\x2e\x46\x01\xed\xfc\xb9\
+\xa7\xbd\x06\xf2\x1e\xd5\x11\x64\xc8\x61\x0f\x20\x2d\x3e\x22\x4e\
+\x01\x27\x3e\x80\xf7\x27\x8e\x6a\x2a\x5a\x37\xa9\x6d\x91\x34\x13\
+\x9c\xa3\x45\xbd\xd9\x67\x68\x3e\x90\x5e\x6e\x2d\x25\xe9\xcb\x6e\
+\x22\x31\xc8\x57\x2a\xc9\xf8\xa9\x2e\x9e\xd1\xd7\x3d\x0b\xd4\xcb\
+\x05\xe2\x2a\x54\xe1\x83\x29\x32\x32\x84\x90\x56\x8c\xe1\x69\xe3\
+\xdd\x24\x8f\xc6\xae\xbd\x32\x23\xc8\x8e\xdb\xf1\xdb\x09\x65\x4d\
+\x20\x84\xed\xc7\xd3\x3f\x38\xc5\x48\x92\xc3\x2e\x29\x0b\x2d\x24\
+\xa8\xfa\x91\xda\xb8\xb2\x73\x9e\xaa\x5a\x9e\x87\xda\xb2\x75\x32\
+\xac\xa6\xf9\x16\xf8\xf6\xeb\x9b\xab\xb7\x80\x63\xcb\xfd\xb3\x2a\
+\x07\x82\x95\x0c\x8c\x7e\x1f\xc8\xd6\x77\x99\x0e\x46\xb7\x9f\x0d\
+\x0a\x5a\x82\x09\x01\x3f\xda\xc7\x15\xe4\x09\xad\xf8\x5f\xab\xdd\
+\x5a\x43\x8d\xa8\xfd\x9d\x4a\xfd\xd5\x13\xf7\x0f\xb0\x3d\xc7\xb1\
+\xfa\xd6\x6d\x07\x1d\x0b\x0a\x18\x20\xe0\x83\x91\x83\x5a\x93\x4e\
+\xed\x73\x39\x96\x69\xd9\xf2\x2b\x0d\x27\x76\xd5\xa6\xfb\x2d\x57\
+\x48\xce\x08\x01\xb2\xd9\x65\x95\xe0\x0c\x9e\x54\x7d\xc5\x45\xe7\
+\xd9\xf5\x4b\x17\xdb\x4c\xd8\xa7\xec\x51\x04\xe7\x4c\x87\xde\x88\
+\xdc\x96\xdc\x6d\x69\x52\x53\xfb\x25\xf0\x48\xc8\xc0\xf7\xed\xcd\
+\x5e\x82\xce\x7e\xfb\x6f\x23\xcd\x83\x85\x0c\xd2\xf4\xb0\xea\xdb\
+\x6d\x0f\x36\xcb\xa9\x69\x61\xc4\x05\x73\xc8\xec\x69\xb4\xaa\x4e\
+\x2a\xcc\x2b\xf0\xaa\x3b\xda\xd7\x2a\x1e\x8d\x88\xda\x56\xe5\x71\
+\x55\xde\x35\xcd\xf5\xa6\x30\x8c\xf2\xcc\x72\x95\x48\x58\x39\x49\
+\x2d\xe7\x09\xf2\x9c\xfe\x34\xa9\x56\x07\x5f\xb8\x22\x56\x93\xb3\
+\xbf\x6a\x52\xe4\x91\x21\x0e\xa4\x04\x16\xfb\xe5\x48\xce\xd3\x93\
+\xed\x83\x56\x94\xf8\xab\x7a\x42\x9e\x52\x1a\x4a\x94\x30\xac\x27\
+\x71\x38\xed\xf1\x49\xd7\x19\x49\x00\x90\xbc\x11\xc9\xc7\x35\x59\
+\x43\x32\xb4\x86\x50\xae\xa8\xbc\xd4\xd6\xaf\xb7\x61\x8f\xec\x52\
+\xe5\xc6\x4c\x29\xae\x32\xfc\xc9\x4a\x43\x6e\x18\xe8\xc2\x01\xf4\
+\x48\xcf\x7a\x8f\xc7\xb0\xb3\x0f\x5f\xfe\xbf\x62\x7c\x49\x6b\xbb\
+\x4c\x94\xee\xd8\xea\xdf\xb1\x08\xc0\x49\x52\xfb\x67\x6e\xc0\x52\
+\x3b\x1a\x96\xea\xeb\x8b\xda\x72\xd0\xd2\xe2\x25\xb3\x7b\xb8\x6e\
+\x8d\x69\x64\x9c\x16\xf2\x3c\xf2\x55\xec\x94\x27\x24\x13\xeb\x50\
+\xfe\x9d\xe9\xb6\x2c\x82\x52\x63\x2d\x4e\x30\xdb\xa5\x0d\x28\xaf\
+\x20\x13\x82\xb5\x01\xe8\x54\x42\x73\xf4\xae\x7e\x26\xce\xa4\x21\
+\x1e\xdb\xfa\xf5\xd8\x6f\xc3\xa9\x2a\x53\xaa\xdd\xae\x9a\xb7\x6f\
+\x6f\xc1\x3b\x78\xd9\xf6\x16\x1b\x1b\x8b\x0b\x29\xc0\x29\xc0\xca\
+\xbb\x1a\x8d\x4f\xb5\x44\x63\x5a\xc6\xd4\x4e\xba\xb8\xee\x2e\x22\
+\xed\x8f\xbc\x85\x11\xb5\xa7\xfc\x89\x59\xc7\xaa\x5d\x2d\xfe\x07\
+\xe2\xa4\xb6\xb2\x3c\x32\x97\x00\x27\x04\x63\x39\xa8\xb7\x54\xad\
+\xee\x49\xd3\x32\x58\x6d\x6f\x25\x05\x3b\x87\x84\xa2\x95\x12\x08\
+\x56\x32\x3d\xf0\x38\xfa\x53\xaa\x36\xa2\xa4\xb9\x6a\x64\xa4\xaf\
+\x3c\x97\xb2\x7a\x7c\x19\xe3\xb2\xaf\x4f\xcb\x95\x06\x55\xf6\x4c\
+\xc8\x29\x29\xd8\xdb\x1c\xa9\xf2\x09\x0a\x25\x44\xe4\x64\x72\x30\
+\x33\x9e\xf5\x5c\xf5\x47\x4d\x3f\x70\xbc\x46\x99\xa6\xf4\xb2\xd0\
+\x98\x88\x6f\xc3\xfb\x6b\x21\xd6\x54\xe9\x74\x15\xf8\xbc\x95\x94\
+\x90\x00\x38\x3c\x8f\x6a\x97\x74\xfa\xf1\x17\x50\xdb\x00\x5a\x9a\
+\x4d\xc5\x18\x54\xa4\xa4\xf2\xa5\x1c\xe1\x78\xfe\xf6\x09\xfa\x85\
+\x0f\x4a\x98\xc7\x6a\x7b\x44\xa5\x25\x4a\x47\x04\x07\x46\x41\x1f\
+\xce\xb4\xc2\xb7\x12\x2a\x48\x5d\x4a\x4e\x8c\x9c\x25\xa5\xbe\x1e\
+\xbb\x8e\x5c\x56\x88\x72\x3f\x51\xdd\x93\x7d\xb5\x2d\xdb\x7b\xf7\
+\x94\x3e\xa3\x0e\x23\x8c\x30\x96\x14\xa0\x5c\x65\x09\x56\x54\x94\
+\x8c\x90\x92\x73\x4f\x7a\xd9\xeb\xd6\x93\xd5\x2e\x39\xa4\x2d\x9a\
+\x85\x7a\x51\x21\x29\x31\x27\x28\xbe\x42\x40\x19\x20\x9c\xa8\x0f\
+\x5c\x13\xeb\x5d\x19\x2d\xf9\x6b\x65\x49\x93\x14\x28\xab\xb6\x17\
+\xbd\x39\x1e\xbc\xf6\xa4\x52\xd0\xf4\xa4\x00\xb6\xf6\x11\x80\x72\
+\x8f\x4a\x5d\x66\xe5\xba\x1d\x87\xa9\x1a\x4a\xca\xef\xe3\xf8\x18\
+\xf4\x0d\xed\x8d\x43\x62\x8b\x22\x12\xca\xd0\xb4\x0c\xa8\xa4\xa7\
+\x8f\x6e\x40\xaa\xcb\xf4\x80\xb0\x07\x6d\xd7\x8b\x82\xda\x0b\x58\
+\x65\x0e\x05\x01\xfd\x95\x8e\x3e\xb8\x35\x6b\xdb\x6d\x49\xb2\x3e\
+\x57\x10\x84\xb0\xb5\xef\x2d\x60\x00\x14\x7b\xe3\xdb\xe9\x4d\x7d\
+\x46\x81\x12\xeb\x66\x97\x0a\x62\x9c\x43\x13\x11\xe1\x1f\x0f\x97\
+\x14\xa2\x41\x01\x03\xdc\xe3\xf0\xef\xe9\x59\x5a\xcb\x67\xd8\xc3\
+\x32\xce\xf2\xec\xce\x4e\xb7\x28\x5b\xba\x42\xdd\x9d\xe4\x11\x37\
+\x54\xdd\xd8\x7c\xa4\xf0\x53\x19\xa2\xa0\x15\x8f\x6d\xc7\x8c\xfa\
+\x66\xac\x8e\x85\xc6\x7a\x5c\xb6\x2e\xa9\x21\x4c\xbc\xe2\xf7\x10\
+\x73\x80\x14\x40\xcd\x44\xba\x8d\x65\x9b\x7c\xea\x79\xb7\x48\x91\
+\x1e\x01\x65\xff\x00\xb2\xc5\x4a\x7e\xe3\x6d\xa5\xbe\x10\x9e\xdd\
+\xbd\xcf\x04\xe7\x35\x26\xd1\xa5\x8d\x29\xa8\x60\xda\xad\xf2\x5a\
+\x52\x87\xec\x5e\x09\xc9\x0e\x0c\xf3\xcf\x62\x41\xf5\xfc\xab\xb3\
+\x43\x19\x08\xce\x32\xed\xd4\xe3\x63\x3a\x3a\xa3\xa0\xe4\xb9\x7f\
+\x09\x1d\x81\xa5\xf0\x18\x46\x3b\xfe\xee\x3d\xea\x5c\x85\xa1\x94\
+\x03\xc9\x57\xa7\xc7\x15\x5e\xe8\x69\x61\x50\x50\x54\xb0\x5c\xfa\
+\x7a\xd4\xe2\x37\x20\x2d\x47\x27\xbe\x2b\xb9\x55\xaa\x8b\x37\x23\
+\x87\x46\x5a\x19\xba\xeb\xce\x67\x7a\xb6\x80\x7b\x56\x29\x6f\x1c\
+\xee\x51\x56\x3b\xfa\xd6\xd2\x48\x39\xe7\xd8\x57\x80\xf9\xcf\x27\
+\x8e\x00\x27\xe6\x97\x7b\x2d\x06\x5a\xef\x53\x04\xb8\xeb\x0a\xde\
+\xda\x8a\x87\x6e\x7b\x9a\x2b\x35\xe1\x38\x21\x47\xf0\x1c\x7d\x28\
+\xa2\xc9\xee\x89\x4d\xad\x99\x0a\xe9\xb0\x43\x7a\x36\x0b\xef\xe7\
+\x62\x7c\x4c\x0f\xff\x00\xa8\xaa\x70\x9b\x35\xe9\x89\x29\x6d\x45\
+\xb6\xc0\xe3\x07\xe6\xa3\xda\x15\xd5\xc8\xd2\x90\x5b\xf3\x25\xb6\
+\xfc\x4c\x10\x3d\x7c\x45\x7f\x9d\x3f\x21\x29\xc7\x39\x18\xc9\xfa\
+\x71\x5b\xa1\x15\x64\xd9\xcd\x53\xea\xa4\x8d\x02\x3a\x41\x05\x47\
+\x71\x3d\xf9\xed\x5b\xd4\x84\x1f\x2a\x06\x3e\x7d\xab\x15\x00\x0e\
+\xd4\xee\x23\xb8\xad\xa8\x52\x4a\x7b\x67\xd4\x0f\x7e\x3d\xe9\xa5\
+\x45\x36\x79\xea\x6a\x40\x8a\xf3\x89\x28\x73\xee\x27\xfd\x77\xa8\
+\x86\xb2\x2b\x4d\xd9\x49\x4c\x90\xa6\x96\x90\xb4\xa4\x28\x1e\x0f\
+\x62\x3d\xc1\xa8\xf7\x4b\xe3\xc0\x9d\x77\xbf\x5d\x2e\x4c\x46\x91\
+\xa8\x18\xbe\xc8\x69\x4e\x3c\x80\xa7\x98\x42\x55\x86\x92\x82\x79\
+\x4a\x36\x60\x8c\x70\x72\x7d\xea\xb3\x54\x08\x31\xfa\x2b\xa5\x2e\
+\x05\xbd\x86\xe3\x2a\x2b\x37\x89\x4a\x52\xb7\xae\x2a\x64\x14\x6d\
+\x52\xbb\x84\x04\x84\xa7\x03\x00\x0e\x29\x17\xb4\xb3\x25\xb8\x71\
+\x5b\x8a\x4c\xb5\x9a\x01\x6d\x82\xda\x81\x49\x3e\x5c\x7a\xfe\x54\
+\x27\xf6\xc1\x28\x42\xb7\x0c\xed\x51\x07\x23\x8e\x0d\x56\xb3\xad\
+\x31\xe4\x6a\x6d\x4f\xa7\x6c\x52\x5b\xb5\x41\x95\x67\x63\xc6\xfb\
+\x38\x09\x6d\x99\x4a\x71\x41\x3e\x51\x80\x37\x20\x00\x71\x8c\x83\
+\x4a\x2c\xf6\x57\x75\x15\xa6\x75\x8e\x3d\xbe\xc7\x69\xbc\x59\xae\
+\x4c\x2e\x43\x2d\x23\x30\x2e\x05\x08\xdc\x94\x2f\x00\x12\x92\x0f\
+\x29\x39\x20\xa4\x67\xda\xaf\x9d\xf6\x15\xcc\x5d\x56\x08\x88\xc2\
+\x36\x14\x96\xf1\x9c\x82\x0e\xee\xd5\xb2\x52\x9b\xfb\x53\x9b\x96\
+\x8c\x95\x6d\xc6\x7f\x7b\x19\xc7\xd7\x1c\xe2\xa2\x7a\x06\xed\x78\
+\xba\xe9\xbb\x7c\x8d\x23\x65\xd3\xf6\x88\xe1\xf7\x9a\x9f\x19\xe0\
+\xbd\xa1\xc4\xb9\xb5\x45\x92\xd0\x09\x50\x24\x28\xe4\x8e\x49\xa8\
+\x3e\xa3\x81\x68\x90\x7a\xb7\x70\xb8\xb4\xd2\xe4\xc5\x58\xfb\x13\
+\x8e\x72\xa6\x5e\xfb\x3a\x4b\x65\xb3\xdd\x2a\x2b\x08\xe4\x60\x9c\
+\x0f\x6a\x8e\x27\x30\x72\xd1\x34\x5b\x0c\xde\xe3\xcb\xd5\x12\x74\
+\xd2\x22\xac\x3f\x12\x0b\x52\xd4\xee\x46\xd5\x05\xa9\x49\x09\x03\
+\xbe\x46\xd3\xf9\xd2\x29\xeb\x8d\x0d\x2e\xcb\x79\xf4\x22\x33\x20\
+\x97\x16\x55\xc2\x31\xdf\x3e\xdd\xaa\x0a\x6f\x42\xc9\x7c\xd4\x57\
+\x6b\xfd\xbd\x53\xcb\x3a\x36\x1f\xdb\x22\x91\xfd\x6a\x8a\x96\x95\
+\x21\x59\xcf\x04\x92\x0e\x41\xc0\xcd\x35\xc8\x86\xda\x75\x3e\xab\
+\xb7\xfd\x86\xc9\x16\x33\xda\x3f\xed\x0e\xc3\xb5\x8c\xc7\x0e\x85\
+\x2f\x62\x88\xc0\x05\x60\x14\xf3\x81\xc6\xd3\x50\xaa\x3d\x88\xce\
+\x4c\x6e\xba\xc6\xd5\x12\xc5\x6c\xba\xc5\xff\x00\x6c\x17\x47\x59\
+\x66\x13\x4d\xad\x28\x2b\x53\x83\x72\x72\x54\x46\xd0\x07\x27\x3d\
+\xbd\xa9\xfe\x19\x5c\x94\xc6\x2f\x35\xf6\x77\xdd\x03\x73\x4a\x58\
+\x51\x49\xf5\x19\x1c\x1e\xfd\xc5\x54\xd3\x2c\xf6\x94\x68\x5e\x97\
+\x1f\xd5\xb0\x4f\xda\x2e\x36\xe2\xe9\x0c\xa0\xef\xdf\x19\x5b\xc2\
+\xb8\xe7\x25\x23\x39\xef\x81\x9e\xd5\xae\xf4\xd5\xbd\x7a\x6f\x5f\
+\x5d\x2e\x29\x69\x37\xd8\x57\x47\x51\x0d\xf2\x70\xfc\x70\x9d\x9f\
+\x65\x4b\x47\xba\x41\x04\x63\x6f\x7c\x9a\x38\x8d\x6e\x46\x66\x74\
+\xd3\xef\x22\x34\x06\x22\xa5\xd4\xa5\x44\x24\x11\x9e\x79\xed\x5a\
+\xd8\x53\x67\x09\x4a\xd0\xa2\x46\x78\x56\x72\x33\xcf\xfe\xb5\x58\
+\x58\xed\xec\x5e\x7a\xd3\x71\x95\x7a\x8c\x99\x12\x60\xda\x6d\xd2\
+\x1a\x4a\x8e\x50\xcc\x82\x17\xb9\x61\x3d\xb7\x79\x71\x9e\xe0\x67\
+\x1d\xcd\x41\xe3\x59\xed\xd2\x34\x3e\x9c\xb8\x3d\x15\x2a\x9b\x2b\
+\x5c\x08\x6f\x48\xe7\xc5\x54\x75\x49\x71\xb5\x33\xbf\xbf\x86\x50\
+\x48\xdb\x9c\x73\xdb\x9a\xce\xa5\x64\x69\x95\x57\x7b\xdb\xd2\x3a\
+\x31\x0b\x42\xd2\x14\xda\x92\xa4\x9e\xc5\x27\x22\xb6\x14\x82\x80\
+\x48\xed\x55\xc7\x4c\xe2\x31\x6f\xea\x37\x50\xad\x10\x19\x6e\x2c\
+\x08\xf2\xe1\x38\xcc\x66\x52\x10\xd3\x6a\x72\x2a\x4a\xca\x52\x38\
+\x19\x3c\x9c\x55\x8e\x06\x72\x3e\x6a\x6f\x71\xd0\x79\x91\x9c\x77\
+\x54\xc9\xc7\x74\x1e\xe0\xd2\xb3\x83\x85\x8c\x10\x79\xf6\xa4\xa1\
+\x2a\x50\xc1\xe6\xbd\xdc\xa6\xfe\xf7\x23\xf9\x52\xe4\xae\xc7\x45\
+\xd9\x6a\x68\xbd\xc4\x0f\x33\xe2\x24\x1c\x8e\xf5\x1f\x03\xca\x52\
+\x47\x63\x52\xe6\x76\xbc\xca\x93\xc6\x08\xa8\xc5\xcd\xaf\xb3\x48\
+\x52\x48\xe0\x9e\x6b\x46\x1e\x7f\xe2\xf9\x19\xf1\x30\xff\x00\x25\
+\xcc\xc2\xde\xc9\x75\xc3\xc7\x03\xb5\x45\xfa\x8a\xe9\x4c\x67\x10\
+\x0e\x00\x18\xe2\xa7\x96\xa6\x36\xc3\x53\xa7\xdb\xd6\xab\x5e\xa6\
+\xbc\xa4\xb0\xe0\x4f\xb1\xab\x4e\x57\x52\xb7\x22\x99\x6d\x04\xfb\
+\x4a\xab\x48\x5b\x99\x7e\x45\xc2\xe4\xfb\x49\x71\x6d\x04\xec\xdc\
+\x32\x01\x51\x2a\x26\x90\x75\x77\xa4\xcd\xdd\xe1\xc5\xbb\x24\xbc\
+\xc4\xa0\x82\xa2\xe3\x4a\xde\xad\xbe\xc0\x1e\xff\x00\x4f\xa9\xa9\
+\x3f\x4d\xff\x00\x6f\x69\xbc\xb2\x17\xb5\xcf\xb3\x25\x63\x1c\xe0\
+\xa4\xed\x35\x68\xd9\x59\x55\xc2\xc7\x15\xc5\x36\x0a\xf6\x8d\xc4\
+\xa7\x3e\x55\x27\x07\xf8\x1a\xf2\x58\xba\x6d\xd6\xcd\x17\x67\xc8\
+\xf7\xb8\x4a\xbc\x3c\x24\x53\xd6\x3c\xd7\xc3\xee\x70\x55\xc7\x48\
+\x16\x1b\x75\xb6\x9d\x52\xd6\x96\x37\x95\xe3\x85\x1c\xf2\x9c\x7a\
+\x63\xb7\xd6\x99\x2c\xf0\x64\xb1\x71\x69\xef\x33\x61\xb2\x16\x16\
+\x7b\x12\x30\x71\xf5\xed\x5d\x29\xd4\xdb\x45\x90\x75\x21\x76\xd8\
+\x31\x3e\xc9\x19\xc8\x67\x73\xab\x04\x25\xd7\x82\xb2\x38\xf9\xc2\
+\xbf\x21\x54\xf4\xd8\xad\x89\x0a\x86\xc4\x73\xb3\xc5\xfd\xa9\xda\
+\x46\x13\xb8\x82\x9f\xa7\xb1\x1e\xdf\x14\xba\x18\xa9\xca\xf1\x96\
+\xa3\xb1\x78\x0a\x2b\x25\x4a\x6a\xd7\xd6\xdf\xc1\xd5\xdd\x2f\x6d\
+\xe6\xf4\x15\xb9\xf9\x61\x5e\x33\xc8\x0a\xf3\xfd\xe0\x9f\x4c\xfd\
+\x7b\xd4\xd2\x3b\x99\x39\x23\xbf\x02\x99\x2d\xed\x26\x2d\xae\x2c\
+\x74\xf0\xdb\x2c\x36\x84\x73\xc0\x4a\x52\x00\xfc\xb1\x4e\xb6\xce\
+\x52\x92\x52\x40\x3e\x6e\x7b\x0f\xad\x67\x8b\xd7\x41\x15\x5e\x66\
+\xd9\xe5\xc6\x02\xf2\xa9\xcc\xa3\x7b\x89\x18\x5b\x27\xfe\x14\x7b\
+\x56\xbb\x6e\xa2\x86\xe3\xe2\x2c\xa7\x44\x77\xf3\xfd\x53\xc7\x6a\
+\xd3\xf1\xcf\xde\x14\xf2\x0e\xe2\xa0\x92\x4e\x7b\x1f\x4c\x7d\x68\
+\x91\x6a\xb7\xcd\x63\xc2\x9b\x0d\x99\x20\x9c\x00\xe2\x01\xc5\x31\
+\x41\xa7\x78\xb2\x8a\x70\x92\xb4\xd7\xc8\x7b\xb6\x2a\x33\xad\xa5\
+\x4b\x42\x92\x30\x3c\xdb\x72\x83\xff\x00\x58\x7f\x8d\x3e\x43\x8f\
+\x13\x68\x29\x71\x93\xf4\x22\xab\xe6\x74\x15\x9c\x2c\xaa\x23\xf7\
+\x6b\x6a\xbb\x83\x0e\xe0\xe2\x06\x7e\x99\xc5\x2e\x6b\x46\x49\x48\
+\xca\x75\x96\xad\xd8\x3d\x3e\xde\x0f\xf1\x29\xad\x11\x9d\x45\xbc\
+\x7c\xc4\x4e\x8d\x17\xb5\x4b\x78\xaf\xb3\x64\xca\x4c\x64\x10\x4a\
+\x31\x84\xf2\x48\x1c\x0f\xa9\xed\x50\x8b\xbe\xab\x80\x89\x46\x06\
+\x9e\x8c\x35\x15\xdd\x27\x68\x6a\x39\xcc\x66\x0f\xf6\x9f\x74\x79\
+\x40\x07\xf7\x41\x26\x94\x3d\xa2\xec\x60\x03\x78\x93\x76\xbd\x60\
+\xfd\xdb\x85\xc1\xc7\x50\x4f\xca\x01\x09\xfe\x14\xe9\x19\xe8\xd6\
+\xd8\x3e\x04\x48\xb1\xe2\x46\x69\x39\x08\x65\xb0\x84\x0f\x6c\x01\
+\x51\x27\x37\xbd\x97\x9b\xfb\x2f\x32\x69\xc2\x94\x35\xd6\x5e\x4b\
+\xf9\x6d\xf9\x78\x91\x48\x1a\x6a\x4a\x25\x4a\xbd\x5f\x65\x7e\xb2\
+\xbc\xcd\x47\x87\x21\xf2\x30\x86\x9b\xff\x00\xe1\x34\x3f\x71\x3f\
+\xc4\xd2\x6f\xb2\x44\xb6\xc3\x10\x61\xa0\x36\xca\x09\xda\x90\x49\
+\x39\xfa\x9e\x49\xa7\x69\xf3\xa6\x5c\xde\xda\xd2\x8a\x00\x3d\xc7\
+\x14\x95\x36\xf0\xde\x56\xbc\xaf\x06\x93\x92\x37\xea\xa3\x53\xab\
+\x39\x7b\xcf\xe1\xcb\xbb\xe5\xc8\xdd\x08\x2d\x05\xb4\x04\xf9\x30\
+\x09\x39\xe7\x9a\x57\x75\x82\xa7\xa2\x2d\x3c\x1c\x8e\xc4\x52\xab\
+\x23\x71\xd6\xa6\xd0\xb5\x15\x73\x82\xae\xf4\xf3\x72\x8f\x1c\xa1\
+\x68\x6d\x3b\xa9\xaa\x92\x94\x6e\x67\x95\x4c\xb2\x48\xa6\xed\xfa\
+\x72\x12\xe4\xab\xf5\x60\x66\xd9\x76\x8c\xe2\x94\xdb\xc8\x4f\x95\
+\xe0\x7b\xa1\xc1\xea\x93\x81\xf2\x0e\x08\xe6\xa4\xf0\x35\x01\x43\
+\x88\xb7\xdf\x99\x55\xbe\x71\x00\x6d\x59\xce\xff\x00\x94\x9e\xce\
+\x0f\x91\xe6\xf7\x4f\xad\x21\xbf\xe1\x9d\x40\x51\x18\x6f\x3b\x72\
+\xe6\x0f\x20\xfa\x54\xa2\xc6\xe4\x3b\xed\xa9\x70\x6e\x71\x99\x94\
+\x13\xf7\xd0\xeb\x61\x49\x3f\x50\x7d\x6b\x2d\x34\xd3\xb4\x5e\xbe\
+\x46\xaa\xd2\x52\x8a\x75\x15\xd7\x9a\xfb\xae\xef\x95\xb5\x1b\xee\
+\x62\x33\xe5\x1f\x63\x9c\xd2\xf1\x9c\xed\x58\x18\xfa\x83\xda\x90\
+\xc9\x93\x1a\x23\x79\x9d\x3a\x2b\x00\x0e\x54\xe3\xe9\x48\xfe\x74\
+\xba\xe3\xd3\xcb\x14\x92\xa4\x34\xe4\xf8\xcd\xab\x80\x84\x3d\xb9\
+\x09\xfa\x05\xe7\x14\xdd\x1f\xa7\x71\x6d\xe0\x18\xb7\x4c\x14\xf6\
+\x5b\x90\x18\x5a\xff\x00\x32\x9a\xbc\x95\x5b\xeb\x1f\x93\xfb\xd8\
+\xac\x55\x1b\x7b\xff\x00\x34\xfe\x97\x19\x5c\xd4\x28\x90\x54\x8b\
+\x2c\x67\x6f\x2a\xce\x03\x88\xca\x23\x20\xff\x00\x79\xd2\x31\x81\
+\xec\x9c\x9a\xf1\x9b\x7b\xac\xb8\xa9\xd7\x19\x49\x99\x70\x29\xc2\
+\x56\x84\xe1\xa6\x12\x7f\x75\xa4\xfa\x0f\x75\x1e\x4d\x3d\xce\xd3\
+\xd3\x49\x0b\x76\xff\x00\x31\xc2\x83\x90\x14\xda\x00\xfc\x00\xed\
+\x49\x5a\x8b\x25\x08\x5a\x1d\x79\x2e\x8c\x79\x4e\xdc\x67\xe9\x8a\
+\xcf\x25\x2d\x9a\x25\xca\x0b\xdd\x67\x3e\x6b\xbb\x71\x3d\x7b\x8a\
+\x5b\x73\xc0\xdf\xb2\x5b\x25\x47\xca\x56\x13\xce\x3d\xc9\xc0\xf2\
+\x9e\x0f\x6f\x5a\x6b\xb6\xc7\x59\xbf\xdb\xdf\x71\xb6\x9b\xc9\x53\
+\xdb\x1b\x18\x03\xcd\x8f\xc3\xf1\xf4\xa7\x7e\xb4\x19\x11\xba\x95\
+\x6f\x9e\xc1\xca\xe1\x04\x1d\xbb\x41\x29\x0a\x47\x2a\xf9\x00\x81\
+\xf4\xc1\xa6\x7d\x2c\xbf\xb4\xdc\xd5\x29\x4a\x2b\x6c\x10\xcb\x27\
+\xb0\x20\x77\x35\x7a\x69\xce\x50\x5e\xb7\x37\xe6\x8d\x2e\x8d\xc4\
+\x54\x7d\x96\xf9\xa4\x8e\x9b\xe9\xab\xe5\xc8\xcd\xac\x81\xc7\x6c\
+\x55\xad\x15\x40\x34\x95\x2c\x8c\x63\xb6\x6a\xa4\xe9\xb8\x52\x61\
+\xb4\x84\x03\xda\xad\x9b\x74\x40\x5b\xdc\xe1\x2a\x24\x1e\xd5\xed\
+\x1c\x54\x29\x45\x33\xe7\x14\x6f\xb2\x37\x78\xc8\xc8\x39\x04\xfc\
+\x0f\x8a\xc9\x38\x3c\x83\x80\x79\xe0\x66\x94\x08\x8c\xad\x3f\x73\
+\xe0\x0a\x4a\xfc\x63\x1c\xee\x6c\xe1\x39\xe4\x7b\x52\x54\xa2\xdd\
+\x91\xa5\xc6\x4b\x56\x66\xbe\x53\x81\xdf\x04\x7d\x28\xa4\x57\x0b\
+\x83\x31\xe2\x93\xb8\x6e\xf4\x1e\x94\x53\xa1\x4a\x4d\x08\x9d\x58\
+\x27\xa9\x05\xd0\x2a\x6d\xad\x1d\x07\x23\x27\x2b\xec\x7d\x37\xab\
+\x9a\x79\x32\x54\xa2\x36\x34\x4f\x18\xed\x9a\x6d\xe9\x95\xbd\x4f\
+\xe9\x48\x4f\x3e\xaf\x29\xf1\x38\xcf\xfc\x62\xaa\x68\x98\xc8\x4f\
+\x01\xb4\x82\x3f\x9d\x68\xe2\xc6\x29\x23\x2d\x3a\x52\x94\x53\x23\
+\x09\x92\xa0\xbf\xda\x24\xa0\x64\x60\x91\xc7\xfa\xef\x4a\x52\xea\
+\x55\xca\x33\x82\x30\x38\xfe\x54\xf3\x26\x23\x0f\x34\x42\x92\x02\
+\x8f\xae\x3d\x2a\x29\x70\x9c\x8b\x3b\xea\x61\xc1\x9c\x9f\x2f\x35\
+\x78\x4d\x4f\x62\x27\x07\x03\x64\xbb\x7d\x8c\x5d\x99\xbb\xc8\xb6\
+\xc0\x55\xc1\xa0\x42\x25\x29\x94\x17\x53\xc6\x30\x17\x8c\x8e\x3e\
+\x6a\x37\x75\x6a\xdc\x1b\x4c\x28\x70\x62\xb1\x01\xb4\x96\xd1\x15\
+\xa6\x52\x96\x82\x79\x24\x04\x81\xb4\x02\x49\xe3\x15\x59\xf5\x3f\
+\x55\x5f\xb5\x0e\x95\xbc\xca\xb6\xc0\x2d\xda\xe2\x4f\x6a\x1a\xa6\
+\x09\x05\x0e\x15\x25\xf6\xc2\x88\x48\x4e\x36\xee\xf2\xfd\xec\xf2\
+\x4e\x31\x52\x4b\xb6\xa4\x9b\x67\x91\x7c\x71\x16\x96\x25\x31\x61\
+\x43\x6a\xb8\x17\x25\x86\x9c\x3b\xd3\xbb\x6b\x49\xda\x77\x14\xa4\
+\x85\x1c\x91\xdc\x01\xf1\x19\xe2\x98\xac\xc8\x92\x5a\x34\xb5\xa4\
+\x42\x54\x75\x5a\x20\x22\x1b\x87\x72\xe2\xa6\x3a\x03\x6a\x3f\x29\
+\xc6\x0f\x20\x7a\x7a\x0a\x75\x3a\x6b\x4f\x9b\x62\x2d\xa3\x4f\xda\
+\x97\x11\x0a\xdc\x98\xe6\x22\x0b\x49\x38\xee\x13\x8c\x67\x1e\xb5\
+\x16\x91\xaf\xcc\x08\x9a\x9d\x72\x60\x00\xbb\x3b\x4c\xbb\x15\x09\
+\x5e\x3e\xd6\x97\x9b\xcb\x47\xb7\x19\x5e\x53\xeb\xda\x90\xea\x0e\
+\xa5\x4e\x80\xe5\xd3\xec\xd6\xd6\x1e\x6e\xce\xd3\x4b\xb8\x93\x33\
+\x62\xb7\x29\x3b\x94\x86\x86\xd3\xbb\x6a\x4e\x4e\x48\xf6\xef\x53\
+\x9a\x21\x74\x59\xf6\x65\xc6\x81\x01\x31\x23\xc7\x69\x94\x20\x6d\
+\x42\x1b\x48\x09\x03\xd8\x01\xc0\xfc\x29\xa6\xc9\xa1\xac\xd1\xb5\
+\x15\xd7\x50\xca\x89\x1a\x6c\xfb\x84\x84\xc8\x4a\xdf\x8c\x85\x2e\
+\x31\x4a\x52\x9c\x21\x58\x24\x03\xb4\x1f\xad\x56\x6e\xea\x57\x2c\
+\x9a\xd7\x55\xdf\x24\xba\xf3\xb0\xa2\xda\x22\x48\x08\x4a\xb2\x0e\
+\x77\xe3\x68\xec\x0a\xb8\x1f\x95\x4b\x22\x75\x0e\xe9\x6f\x9a\x8b\
+\x75\xfe\xca\xcc\x49\x32\x60\x3d\x32\x19\x6a\x51\x75\x2a\x2d\x00\
+\x56\xd2\xc9\x42\x70\xa0\x14\x0e\x46\x47\x7e\x6a\xad\xc5\x92\xa4\
+\x9e\xe4\xd8\xc1\x80\xcc\x99\x0f\xbb\x6d\x88\xe3\xb2\x19\xf0\x5e\
+\x75\x4c\xa4\xa9\xc6\xc6\x70\x85\x12\x32\x53\xc9\xe0\xf1\xc9\xad\
+\x16\x8b\x25\xa2\x08\x2a\xb7\x5a\x60\x43\x6c\x25\x48\x08\x62\x3a\
+\x10\x02\x55\x82\xa1\xc0\xe0\x12\x06\x47\xc5\x57\xf6\x9e\xa0\xdd\
+\x6e\xcf\xe9\xf7\x66\x5a\x1b\x8b\x02\xfe\x4a\x62\x2d\x32\x8a\xdc\
+\x43\x9b\x0a\x80\x5a\x76\x80\x02\x80\x38\xc1\x3f\x3d\xf8\x46\xd7\
+\x51\x6f\x89\xb7\x43\xba\x37\xa7\xd2\xe4\x39\x57\x43\x6a\x6c\x09\
+\xb8\x70\xc8\xdc\xa4\xa4\xed\x29\xc6\xc2\xa4\xe3\x39\xc8\xce\x71\
+\xc7\x33\x9a\x3b\x91\x99\x16\x23\x7a\x77\x4f\xb4\xc3\x71\x98\xb2\
+\x5b\x58\x69\xb7\xfe\xd2\xd2\x5a\x88\x84\x84\x3a\x32\x03\x80\x01\
+\xc2\xf9\x3e\x6e\xfc\x9a\x4f\x36\xc7\x6d\x55\xc5\xb9\xb2\x6d\x70\
+\x9e\x94\xde\x3c\x39\x0e\x47\x4a\x9c\x47\xd1\x44\x64\x7a\x54\x65\
+\x1d\x45\x72\x24\x2d\x44\x9b\xcd\xb1\x0d\xcf\xb2\x3c\xcb\x2a\x66\
+\x3c\x8d\xe8\x7d\x4f\x04\x96\xb6\xa9\x49\x4e\x32\x54\x01\xc8\xe3\
+\xbd\x2e\x3a\xbe\x74\x68\x1a\xa1\x37\x4b\x6c\x31\x3a\xc3\x6f\x4d\
+\xc7\xc3\x8f\x33\xc6\x69\xf6\x94\x15\x8c\x28\xa1\x24\x10\x52\x41\
+\xc8\xf6\x3e\xb4\x39\xc1\x6e\x0a\xc4\xc6\xdc\xe4\x06\x64\xae\x58\
+\x89\x1d\x13\x1e\x4a\x50\xe4\x94\xb6\x90\xe3\x89\x4e\x76\x82\xac\
+\x64\x81\x93\x80\x7b\x64\xd3\xa4\x7b\x35\x89\x51\x19\x61\xbb\x4d\
+\xb8\x47\x66\x40\x94\xd3\x42\x32\x36\xb6\xfe\xe2\xaf\x11\x23\x18\
+\x0b\xdc\x49\xdc\x39\xc9\xce\x6a\xbf\x85\x74\xbc\x39\x7f\x83\x67\
+\x93\x69\x8b\x15\xdb\xb5\xb1\xcb\x85\xb0\xfd\xb4\xb8\x06\xcd\xa7\
+\x63\xde\x41\xb0\xf9\xd2\x7c\xbb\x87\x71\xcf\x72\x74\x5a\xfb\xa9\
+\xee\xda\x1e\x0d\xde\xf2\x23\xba\x89\x69\x52\xda\x71\xa5\x12\xb2\
+\x3c\x45\x82\x14\x36\x80\x9c\x60\x01\x82\x73\x4b\x79\x2a\x7b\xa3\
+\x61\x53\x2b\xb3\x45\x8d\x1a\xdf\x19\x13\xa4\xca\x89\x0e\x3b\x52\
+\x25\x14\x2a\x43\xed\xb4\x94\xad\xe2\x91\xb5\x3b\xd4\x06\x55\x81\
+\xc0\xce\x70\x38\xa7\x04\xc2\x51\x39\x2b\x39\xf5\x15\x53\x5a\xf5\
+\xac\xbd\x3c\x8d\x63\x39\xfb\x7a\x9f\x93\x1a\xff\x00\x12\x22\x9b\
+\x5d\xc1\x6e\xb5\x87\xbc\x34\x85\x20\x29\x23\x60\x09\x50\x25\x20\
+\x11\x9c\xf3\x8c\x54\xbb\x51\xf5\x07\xf5\x15\xfb\x51\xc1\x7e\xd8\
+\xe4\x86\x2c\x96\x44\x5d\x0a\x99\x5e\x5c\x74\xa9\x4b\x05\x18\xc6\
+\x00\x1b\x73\x9c\xfb\xd6\x59\xd5\x69\xd9\x1a\xa9\xca\x9b\x57\x97\
+\xad\xfe\xc4\xa5\x71\xdf\x68\x64\x28\xa8\x0e\xfc\x57\xa7\x0e\x23\
+\x6a\xb8\x35\x5d\xeb\xdd\x67\xaa\xe3\xf4\x86\x5e\xa9\xb6\xb3\x62\
+\x61\x4e\x18\xa6\x3b\xd1\x2e\x2a\x94\x03\x6e\xb8\x94\x12\x09\x69\
+\x23\x70\x2a\x48\xf5\x18\x2a\x3c\x10\x01\xb0\x62\xb5\x70\x5c\x06\
+\x9e\xb8\xa2\x33\x53\x79\xf1\x53\x15\xc5\x2d\xb1\xc9\xc6\x0a\x92\
+\x09\xe3\x19\xe0\x72\x6a\x23\x52\xef\x52\xfa\x37\x68\x9b\x2d\xca\
+\x2d\xaf\x61\x3d\x8f\x1f\x15\xaa\xff\x00\x04\x3a\xf2\x54\x79\xcd\
+\x64\xca\xb0\xf8\x51\xfa\x1a\x72\x9a\xcf\x8c\xd2\x76\xf7\x06\xac\
+\xe7\x92\xa2\x91\x68\xc3\x3d\x37\x11\x0b\x8d\x86\xad\xa1\x3d\x8e\
+\x3d\x6a\xad\xea\x04\x70\xb8\xaf\x15\x0e\x4d\x5b\x17\x4c\xa6\x38\
+\x18\xc6\x07\x35\x5c\x6b\x36\xc3\x91\x95\x81\xc0\xef\x5a\x30\xdd\
+\x64\xef\xcc\x4e\x21\x59\xa4\x51\x3a\x5e\xe6\xfd\x9b\x51\xcb\x8e\
+\xd9\xc7\x8a\xd2\xc0\x1e\xe0\x8e\x7f\x8e\x0d\x74\x96\x91\x2c\xb5\
+\xa4\x21\x3b\xb4\x1d\xcc\x25\x5f\xc2\xb9\x86\x79\x0a\xea\x84\x28\
+\x28\x20\x78\xb1\x1c\x52\x47\xf7\xb7\x63\xf9\x57\x42\x69\xb9\x92\
+\x1c\xd2\xf0\xd2\xd3\x4a\x79\x0d\xb2\x1b\x73\xc3\xee\x85\x27\x83\
+\x9f\xca\xb8\x18\xac\xaa\xa6\x87\xa4\xc0\x66\x9e\x12\x29\xf6\x90\
+\x6e\xa2\xdb\x2d\x31\x51\x3b\x50\xdc\x22\x46\x54\x85\x61\x4c\x25\
+\x4a\xe4\xed\xc9\xed\xec\x9c\x02\x4f\xcf\x35\x46\xda\x5b\x6a\xe0\
+\xf2\xda\x91\x19\x4c\xb7\x3d\x2a\x5b\x4a\x4a\xf2\x16\xde\xe5\x2b\
+\x23\x3d\xc8\xdc\xa1\xcf\x1d\xea\xe0\xfd\x24\xee\xae\x42\xd3\xb6\
+\x4b\x78\x8c\x8d\xb3\x56\xf2\x14\xeb\xec\x12\x84\xa3\xca\x92\x9d\
+\xde\xe4\x2b\x38\x1c\x9c\x7c\x55\x25\x6d\x75\x2f\xcc\x8d\x0d\xe0\
+\xd0\x54\x64\xa5\x2e\xb9\xbf\x07\x6e\xe2\x02\x07\xf6\x46\x55\x8e\
+\x7e\x6b\x8b\x51\x24\xda\x3d\x05\x2c\xd2\xa5\x19\xcb\xd7\x23\xa0\
+\xf4\xfc\xd7\x5f\xd3\x16\xc7\xdf\x42\x10\x4c\x74\x21\x41\x27\x39\
+\x21\x23\xf8\x1c\xd4\xb2\xd0\xbd\x91\xc0\x5a\x81\x07\x8e\xd5\x5d\
+\xd8\x5e\x77\xf5\x5c\x78\xc5\xb7\x37\x8e\x77\xa9\x7c\x0f\x4e\xde\
+\xfc\x7e\x15\x3d\xb4\x2f\xc4\x84\x56\x94\x85\x0d\xa7\x8f\x5c\x1a\
+\xad\x39\x5d\x98\xab\x44\x7e\x88\x77\x1d\xd8\x4e\xe3\xc1\x03\xb6\
+\x29\xca\x37\x86\x4e\xdd\xc4\x28\x77\x09\xef\xf9\xd3\x3c\x65\x2d\
+\x6c\xa5\x68\x4f\x95\x49\x03\x69\xe0\xfe\x3e\xd4\xec\xdb\xa8\x4a\
+\x37\x92\x00\x00\x7e\x15\xae\x0c\xca\xd0\xed\x1b\x68\x56\xe2\x53\
+\x8c\x71\x4a\x5f\x7c\x36\xd1\x50\x19\xe2\x9b\x22\x38\x92\x92\x07\
+\xaf\xc5\x23\xbd\x4c\x2d\x84\xb6\xd0\xdc\xe9\xe1\x29\x1e\xb4\xfe\
+\x22\x8a\x17\xc3\xcd\x2b\x19\x4b\x96\x15\x20\x23\x24\xac\xf6\x48\
+\xac\x2e\x4c\x2d\xfb\x6b\xd1\xe3\xe3\xc5\x29\xca\x72\x7b\x9a\xd3\
+\x19\xb4\xc3\x41\x79\xf5\x05\xc8\x5f\x2a\x23\xd3\xe0\x7b\x52\x29\
+\x93\xd0\xb2\x5a\x52\x94\x90\x53\xf7\xb3\xc8\x1f\x15\x55\xd6\xd5\
+\x8f\x4b\x55\x97\x90\xcb\x03\x51\x42\x8e\xb5\x44\x92\x92\xdc\x96\
+\xf8\x71\xb5\x70\xa0\x7d\xb1\x55\x6f\x5a\x75\x67\x5d\xa1\xcf\x42\
+\x74\x96\x9a\x44\x2b\x52\x87\xec\x9e\x44\x74\xc8\x75\xdf\xf9\x44\
+\xe4\x27\xe9\x8f\xc6\xad\x15\x96\x27\x36\x82\xfc\x44\x2c\xa0\x80\
+\x92\xa1\x95\x0c\x76\xe7\xbe\x69\xce\x04\x95\xf8\xff\x00\x64\xdb\
+\x2c\x6f\x19\x1c\x6e\x18\xa5\xaa\x52\x4f\x7d\x0d\xd7\xa6\xaf\xd5\
+\xf5\xdd\xfd\x32\xa6\xe8\x9f\x52\xb5\xa7\xeb\x98\xb6\x5e\xa2\xd8\
+\xd3\x6e\x99\x34\x91\x0a\x63\x69\xd8\x87\xd6\x06\x7c\x35\xa4\x12\
+\x12\xa2\x01\xc1\x18\xcf\x6c\x55\xcd\xab\x75\x1c\x4b\x4e\x9c\x9f\
+\x78\x96\xef\x87\x1a\x1b\x0a\x79\xe2\x0e\x4e\xd4\x8c\x90\x3e\x4f\
+\x61\xf3\x4c\xba\x8f\x4d\xb5\x31\xb4\xca\x8c\x86\x1e\x71\x0a\x0b\
+\x09\x5b\x78\x21\x40\xf0\x52\x7d\xea\x17\xaa\xa0\xde\xae\x50\x95\
+\x63\x93\x0a\x43\xcd\xc8\x50\x2e\x64\x8d\x84\x03\x9e\x7e\x38\xed\
+\x54\xa9\x39\xc2\xfa\x12\xa8\xd1\xaf\x28\xb8\xbb\x5b\x7b\xfa\x44\
+\x1f\xa7\x7a\xd6\xf9\x7e\x95\x37\x52\x5c\xe5\x45\x85\x69\x79\xd3\
+\x96\x1d\x21\x02\x33\x7e\x87\x79\xef\xf3\xee\x7b\x55\xc5\xd3\x1d\
+\x4d\x0e\xeb\x16\x74\xfb\x79\x2e\x43\x4b\xfe\x1a\x1d\x29\x20\x39\
+\x81\xc9\x4e\x7b\x8a\x88\x41\xb0\x5b\xa2\x43\x4c\x79\x16\xd6\xa6\
+\x25\x27\x62\x10\xe3\x23\xc3\x07\x19\xec\x46\x3f\x3a\x94\xd8\xee\
+\x31\x23\xb2\xcc\x56\xd8\x69\xa1\xfd\x5a\x5b\x42\x40\x49\x23\xdb\
+\x1d\xbf\xf2\xa4\x52\xa4\xe3\x2c\xcd\xdb\xb8\xd7\x8d\x95\x1a\x91\
+\xb4\x23\xd9\xeb\xc4\xb2\xa1\xca\x6a\x42\x4f\xad\x6a\x95\x93\xca\
+\x12\x0f\xb6\x7d\x69\x96\x14\x9f\x30\x52\x14\x38\x1c\xe3\xd4\x53\
+\xba\x1d\x4a\x9b\xee\x49\x27\xb7\xb5\x6d\x52\xba\xb3\x38\x4e\x19\
+\x5d\xc4\x92\x9b\xdc\x9c\x90\x01\x3e\x86\xa2\x77\x84\xa1\x93\xbd\
+\x43\x6a\x42\x87\x73\x53\x07\x16\x08\x50\x52\x8a\x89\x3c\xfc\x54\
+\x47\x54\xa9\x28\x8c\xe9\xc2\x31\x8f\x26\xef\x7f\x63\x59\xeb\x69\
+\x1b\x97\x85\xef\x63\x9d\xfa\xca\xcf\xeb\x0e\xa3\xbb\x1b\xc4\x6c\
+\x17\x22\x78\x1e\x13\x99\x0a\x2b\x09\xde\x95\x20\x8f\x5c\xff\x00\
+\xe8\x45\x45\x2d\x37\x2f\x07\x5e\xda\xf4\xd8\xf0\x8b\x6c\x47\x57\
+\x8a\x50\x80\x32\xf2\x93\x93\x9c\x13\x9c\x11\x8c\xf1\xce\x6a\x6f\
+\x75\xfb\x15\xef\x5d\xc8\xfd\xa7\x88\x44\xa7\x1b\x43\x78\xf3\x95\
+\xa1\x20\x00\x32\x3b\x8c\x8c\x11\xdf\x07\x8a\xa4\x2d\x17\x69\x0e\
+\x75\x34\x4d\x52\x9b\x42\xd3\x39\x59\xc1\xe3\xef\x10\x7f\xf4\xaa\
+\xe0\x9d\xe4\xdf\x61\xab\x1c\xbf\xf8\xf8\x5f\xed\xf4\x47\x71\x74\
+\xb8\xa7\xec\x8d\x93\xc9\xe3\xbd\x5b\xb0\x16\x36\x00\x0f\xe7\x54\
+\x4f\x4e\xe7\xa5\x2d\x60\x1f\xbb\xc8\xe6\xac\x2b\x66\xa3\xf0\xe7\
+\xb6\x16\xad\xad\xab\x8e\xfc\x57\xb2\x51\x75\xa9\x29\x1e\x0e\x9d\
+\x65\x07\x66\x4f\xb3\x8c\x67\xf9\x56\x32\x46\xe6\x17\x93\xdc\x11\
+\xcd\x69\x6a\x63\x0b\x48\x58\x70\x24\x7d\x6b\x5c\xb9\x49\x52\x7c\
+\x36\xb0\xaa\xca\xa1\x2c\xdb\x1b\x9c\xe3\x97\x71\x89\x9b\x58\x5b\
+\xa5\xc9\x4e\x65\x21\x5e\x50\x73\x45\x3c\xb6\xd0\x43\x78\xee\x73\
+\x45\x6a\x75\x5b\x7b\x99\x15\x18\xa5\xb1\x18\xe9\xf3\xad\x31\xa2\
+\x20\xad\xc2\x9d\xbf\xb4\xe3\x1f\xf1\xaa\xa9\x1b\x0b\x43\xcd\x85\
+\x21\x47\x18\xcf\x06\xab\x58\x93\x1c\x6f\x43\x5b\xa3\x34\xac\x29\
+\x5b\xfd\x7b\x7e\xd1\x54\xe3\xa7\xf5\x22\xe2\x36\x23\xbe\x14\x52\
+\x39\x0a\x35\x78\xd1\xbc\x2e\xb7\x15\x1a\xd6\xb2\x7b\x13\xb2\x0e\
+\xd3\x9c\x1f\xad\x43\xb5\x0c\x58\xf2\xaf\x00\xad\xad\xdb\x79\xc7\
+\xcd\x2e\x1a\x8d\xb9\x67\xc2\x8a\x09\x50\xe0\xd1\x1d\xa5\x29\x65\
+\xc5\x11\xe2\x2b\xb9\xc5\x32\x94\x1c\x75\x65\x6a\xcd\x4b\x44\x55\
+\xb7\x5d\x07\xa9\x57\xa7\x2f\x7a\x62\xd8\xfd\xa1\x16\xab\x85\xcf\
+\xf5\x83\x4e\xbe\x56\x97\x9a\xcb\xa9\x78\xb5\xb4\x24\x82\x37\xa7\
+\x85\x6e\xc8\x07\xb1\xa7\xf9\x3a\x5e\x6c\x5d\x67\x78\xbd\xb1\x64\
+\xd3\x57\xa6\x6e\xfe\x13\x8e\x22\xea\x8c\x2e\x3b\x88\x46\xc2\x52\
+\xaf\x0d\x7b\x92\x40\x49\xdb\xe5\xe7\x3c\xfa\x54\xd5\x6a\x6d\xbc\
+\x85\x3a\xda\x48\x04\xe0\xab\x1c\x7b\xfd\x2b\xd2\xa4\x85\xa1\x2a\
+\x52\x7c\xfc\x0f\x92\x39\xc0\xfc\x2a\x5d\x28\xbd\xc4\x25\x62\x35\
+\xad\xba\x72\xad\x5d\xac\x6c\xd7\x8b\x73\xb0\x22\xda\x9b\x65\xb6\
+\x6e\x91\xd5\xb9\x2b\x75\x2c\xb9\xe2\xb1\xb0\x24\x60\xe1\x79\x07\
+\x24\x71\xef\xda\xa1\x37\xcd\x19\x2e\xcf\xac\x2e\xf3\x22\xd9\xec\
+\x57\x56\xae\x05\xb5\xa9\x37\x24\x10\xb6\x16\x94\xed\x25\x27\x62\
+\xf7\x24\x80\x38\xe3\x9c\xf3\x56\xe5\xa7\x50\xdb\x2d\xfa\xa2\x2d\
+\x8a\x44\xd4\xb7\x2e\x5b\x4b\x75\xa6\x94\x71\x94\x20\xa4\x12\x4f\
+\x61\xca\xd3\x8c\xf7\xe7\x1d\xa9\x46\xb0\x44\x34\xcc\x57\x8e\xa4\
+\x23\x29\xca\x94\xae\x31\xf3\x9a\x4c\x16\x5a\x8e\x1c\xb7\x1f\x38\
+\x46\x70\xe2\x2d\xef\xa9\x50\xdc\xf4\x8a\xaf\x2f\xea\x94\x49\x76\
+\x3b\x30\xef\x36\xb8\xd0\xe3\xf8\x69\x25\x6c\xad\xa2\xa2\x14\x53\
+\x80\x36\x82\x53\xc0\x3e\x87\xb5\x21\xbb\x58\x6f\x93\x26\xb7\x7a\
+\xd4\x0e\x40\xdd\x6e\xb6\x48\x66\x33\x51\x14\xa5\x78\x8e\x38\x90\
+\x16\xe1\x25\x23\x6f\x09\x18\x48\xcf\x7e\xf5\x65\x26\xda\xf1\x07\
+\xec\xcb\x42\x9b\x3c\x82\x0f\x1f\x5a\xc5\x30\x43\xa8\xf1\xd6\xf3\
+\x65\x19\xc0\x5e\xf1\x8c\xe7\xd0\xfd\x6b\x46\x48\x99\xf2\x95\xc7\
+\x4c\x6c\xb7\x59\x76\x7d\x17\x2a\xee\xcc\x58\xb0\xac\xcc\x07\xd9\
+\x65\xb5\xad\x4f\x3c\xef\x85\xb1\x25\xc0\x52\x9f\x0f\x68\x52\x8e\
+\xd1\xbb\x24\x0e\x6b\xd6\x34\x6d\xf5\x3a\x7e\xd3\x6b\x0f\x43\x53\
+\x90\xb5\x22\x6e\xce\x10\xb5\x6d\x2d\x07\xd4\xe6\x07\x97\xef\x61\
+\x5d\x8e\x06\x7d\x6a\x6f\xac\xee\x28\xd2\xba\x6a\x4d\xe6\x42\x54\
+\xf8\x8e\x5a\x0a\x61\x0a\x01\x67\xc4\x75\x2d\x03\xcf\xa6\x55\xfc\
+\x2a\x45\x0d\x31\x23\x6e\x3e\x2a\x56\xb0\x76\xf0\x73\x83\xed\x50\
+\xa1\x1d\x81\x45\x6c\x44\x9b\xe9\x44\xbb\xe3\x5a\xd6\x4c\xd9\x10\
+\xd9\x4d\xed\xc8\x2f\xdb\xd4\xa0\x5c\xf0\x9c\x8e\x84\xff\x00\x5a\
+\x92\x00\xda\x54\x9c\x10\x09\xca\x49\xec\x69\xca\xf3\xa6\x6e\x57\
+\x3d\x1d\xa8\xac\x8c\xd8\x74\xa5\x8e\x5c\xf8\x2a\x8a\xd3\x96\xe2\
+\xad\x8b\x24\x28\x12\xe1\xf0\x92\x42\x73\xb4\x81\x85\x63\x9e\x4f\
+\x73\x65\x30\xeb\x66\xd0\x4b\x4a\x07\x1c\x1c\x73\x83\xfe\x8d\x44\
+\xb4\x1e\xa3\x8d\xaa\x74\x6c\x0d\x48\xcc\x75\x45\x66\x62\x54\xb4\
+\xa1\xd5\x02\x53\x85\x94\xe0\x9f\xc2\xb1\x2b\x4a\x4d\xb3\x6c\xa9\
+\xc2\x09\x45\x73\x5e\xbf\x91\xa9\x1a\x4a\xe2\x35\x8e\x96\xbc\xaa\
+\x44\x6f\x02\xd3\x6b\x7a\x1b\xe9\xde\xad\xea\x5a\xc3\x60\x14\x0d\
+\xb8\x29\xf2\x1e\xe4\x7a\x71\x58\xf4\xc7\x4f\xdd\xf4\x8e\x89\x66\
+\xc3\x76\x30\x5d\x66\xda\x85\x06\x24\x45\x71\x6b\x53\xa8\x2b\x52\
+\x89\x52\x0a\x06\xd3\x82\x38\x05\x59\xe6\xa6\xe9\x04\x27\x3d\xa9\
+\x93\x42\xea\x38\xda\xaf\x49\xc7\xd4\x0c\x30\xe4\x56\x5e\x53\xc9\
+\xd8\xea\x81\x29\xf0\xdc\x5b\x64\x93\xdb\x19\x41\x3f\x8d\x32\xf6\
+\x77\x2b\xc3\x8d\xfb\xff\x00\xa2\xbc\xb5\xe9\xb9\xba\xc6\x1e\xbd\
+\x10\x56\x62\x7d\xb6\xf7\x0e\x5d\xb6\x44\xa6\x56\x86\x9e\x54\x74\
+\x34\x79\x04\x05\x14\x12\x92\x9c\x81\xf2\x33\x8a\x9a\xdb\x34\xe6\
+\xab\x6b\x58\xdd\xb5\x74\xc1\x63\x32\xa7\x5b\x19\x86\xdc\x24\xbe\
+\xea\x9a\x6c\xb6\xb2\x4e\xe7\x0b\x60\xa8\x10\xa5\x1c\xed\x18\xe0\
+\x63\xd6\x9d\xf5\x1d\xda\xdb\x60\xb6\x2a\xe7\x71\x96\x98\xd1\xc2\
+\x90\xd8\x51\xe7\x2a\x5a\x82\x52\x00\xf5\xc9\x50\xfe\x75\xb5\x99\
+\xaf\x3a\x93\xb1\xe4\xad\x27\x21\x25\x2a\xc8\x35\x4e\x0e\x77\x74\
+\xc9\x8b\x8d\x3d\x1e\xff\x00\xdf\xdd\x95\xb5\xcb\xa7\x57\x27\x74\
+\xee\xaf\xb6\x47\x55\xa2\xd0\xe5\xfe\x4c\x49\x11\xed\xf1\x16\xb5\
+\xc3\x88\xb6\x16\x85\x93\xbb\x62\x4e\x5c\x28\xf3\x10\x81\xd8\x71\
+\x57\x1d\xa5\x73\x5d\xb7\x34\xbb\x9b\x11\x98\x96\xa0\x7c\x46\xe3\
+\xbc\x5d\x6d\x3c\x9c\x00\xa5\x25\x24\xf1\x8f\xdd\x14\xc4\x41\x27\
+\x27\x93\xeb\x4f\xd6\xc5\x97\x23\x8f\x5c\x54\x56\xa4\xa1\x14\xd1\
+\x7c\x33\x59\x9f\xaf\x5b\x89\xa5\x24\xb5\x21\x24\x7a\xf6\xa7\x78\
+\xe7\x2c\xa7\xd6\x91\xcd\x6b\xc4\x6f\x3d\x88\xf5\xa5\x51\x01\x0c\
+\xa7\xe9\x49\xa9\x2c\xd1\x46\xba\x6b\x2c\xd8\xd3\xa9\xe4\xa2\x34\
+\x52\xb7\x15\x84\x81\xde\xab\x1d\x4f\x7b\x86\xa8\x25\x40\xad\xb0\
+\xe0\xf2\xf8\xa8\x28\xdd\xff\x00\x6b\x15\x64\x6a\x14\x78\xaf\xa1\
+\x2b\xfb\x83\x9a\xab\xba\xb3\xe1\xae\xd8\xea\x40\x68\xa8\x24\xed\
+\x0b\x4e\xe0\x48\xf4\xc5\x6c\xa5\x25\x4e\x95\xd9\x86\xbe\xb5\x19\
+\xcd\xda\xb6\xfb\x1a\xdd\xd5\xcb\x15\xd6\x42\x81\x87\x1e\x42\x1a\
+\x90\x73\x82\xde\xf2\x41\x27\xe0\x12\x93\xf4\xae\xae\xb1\xdb\x90\
+\x9b\x8a\x9c\x86\xe3\x8c\xa1\xd6\xf3\x2d\xb4\xab\xca\xb2\x7b\x1c\
+\x7b\x90\x2b\xe7\xf6\xb6\xb9\x3f\x32\xec\xfc\x2b\x82\xd4\x70\xa2\
+\x83\xea\xa4\x1c\xf0\x01\xf5\x1f\x35\xd4\x5f\xa2\x97\x58\x2d\xb7\
+\xc8\x0d\xe9\x1d\x45\x31\x98\xb7\xe8\xa9\x4b\x71\xd4\xf3\x9b\x44\
+\xd6\xd2\x36\x8c\x13\xdd\x60\x0e\xdd\xcf\xcf\x35\xe7\xab\x6b\x3c\
+\xdc\x8f\x57\x83\x83\x86\x1d\x53\x4f\x5f\x5e\xbf\xa2\xde\xeb\x2e\
+\x97\x7b\x57\x68\xa7\xed\x4c\x1c\x2d\x01\x4a\x6d\x0d\xaf\x6a\x95\
+\x84\xe4\x00\x4f\x03\x90\x9e\x6b\x92\x93\x19\xbb\x73\xef\x5b\xe4\
+\xb4\x4b\x81\x28\x54\x84\x2f\xca\x5a\x52\x07\x27\x38\xe7\x68\xc9\
+\xf9\x27\xd6\xbb\x88\xa3\xc5\x5e\xe2\x46\x48\xda\x77\x77\xae\x48\
+\xeb\x35\x85\x7a\x63\x5f\xcf\x43\xa9\x57\x85\x31\x2a\x53\x4a\x24\
+\xa8\x39\x9c\x73\xcf\xb9\xdc\x08\xf4\xe7\xe2\xb9\xd8\x98\x38\xbc\
+\xcb\x99\xd3\xe8\xea\x97\x83\xa2\xde\xda\xaf\xa9\x24\xd0\xf2\x57\
+\xf6\x19\x31\x5d\x59\x40\x12\xfc\x45\x21\x44\xe4\x6e\x27\xca\xaf\
+\x9c\x72\x40\xc7\x35\x65\xe9\xd2\x0b\x45\x09\x75\xc5\xa3\x76\x7d\
+\x89\x1f\xe5\x55\x26\x88\x9c\xa9\x53\xdc\x5e\xc6\xc2\x6e\x4d\x26\
+\x42\x80\x56\xe5\xf8\xa0\x04\x3b\xdf\xfb\xd9\xe2\xad\x9b\x11\x2d\
+\x24\x2d\x40\x05\x27\x29\x20\x7f\x64\xfb\xfb\xd6\x5a\x6b\xac\x18\
+\x84\x49\xe3\x24\x36\x85\x25\x38\xca\x8e\x4e\x07\x39\xcd\x28\x8c\
+\x0a\xdb\x4a\x82\x46\x3b\x8f\xce\x91\xc5\xe4\x11\xb9\x58\x4e\x55\
+\xbb\x07\x38\x22\x9c\x60\x92\x12\x12\xb4\x8e\x3d\xfb\x1c\xd6\xb4\
+\x60\xbd\x85\xab\x05\xa6\x14\xb3\xf7\x12\x33\x4c\xec\xba\x23\x95\
+\xcd\x77\xcf\x25\xc2\x43\x69\xfe\xc0\xc7\x6f\x83\xf3\x4f\xb2\xd1\
+\xba\x1a\x53\xc9\x0a\x50\xdc\x3d\xc5\x31\xbe\x94\xf8\x86\x43\xdb\
+\x90\x9c\x04\xa9\x27\xdf\xd0\x7d\x39\xef\x53\x2d\xef\xd8\x10\x77\
+\x42\x37\x5c\x7e\x79\x4b\x89\x3b\x02\xd3\xc7\xb9\x1e\xf5\x93\x36\
+\xf4\x85\x79\x80\xd8\x57\xc9\x2a\xf5\x1d\xbe\xbc\xd4\x57\x5d\xf5\
+\x33\x4f\x69\x47\x4b\x32\x64\xa5\x52\xd6\x8f\x2a\x00\xe7\x1c\xfa\
+\x0f\x4a\x68\xd2\x57\x4d\x5f\xad\xae\xf3\x6d\x50\xa3\xaa\xd0\x98\
+\xad\x36\xf2\x95\x35\xa5\x00\x42\xf3\xb4\xa1\x39\x1e\xd4\x3a\xb0\
+\x86\xb2\x7a\xf9\x9d\x28\x60\x2b\x3a\x5c\x59\x75\x61\xda\xcb\x2d\
+\x86\xa0\x21\xc2\xd1\x90\xd2\x55\x8c\x95\x77\xcf\x34\xa9\x95\xc1\
+\x53\xa1\x96\xe5\x0e\x33\xc6\x7b\xfe\x35\x03\xb2\x74\xc3\x5c\xc9\
+\xba\xca\x1a\x83\x5a\x2e\x2a\x07\xf5\x62\x13\x0d\xe1\xc4\x9f\x5e\
+\x47\x1f\x4e\x69\xce\xd1\xd2\xbd\x47\xfa\xee\x6b\x12\x75\xb3\x8b\
+\x86\xd8\x49\x8e\x44\x54\x95\x9c\xe7\x3b\xfb\x0e\x38\xed\x5a\x21\
+\x59\x3d\x14\x5f\xaf\x88\xba\x94\xb0\x91\xbd\xeb\xa7\x65\xd8\xfe\
+\xc4\x95\xa6\x7c\x55\x9f\x09\xe6\xd6\x1b\x00\x10\x97\x33\xc6\x73\
+\x9a\x45\x71\x88\xda\x9d\x54\x97\xd7\x1d\x21\x03\x81\xb8\xa4\x1f\
+\xfc\xe9\x9e\x67\x4c\x75\x5f\xeb\x76\x58\x8d\xa8\x60\x3b\x15\x6d\
+\xab\xc5\x71\xd8\xca\x4b\x89\xc7\x60\x36\xab\x9c\xd6\xa9\x9d\x20\
+\xbf\xa6\x4c\x7f\xb3\x6a\xb4\x96\x94\xb2\x97\x52\x5a\x51\x50\x49\
+\x07\xee\xe4\x91\xdf\xde\x87\x34\xd7\xba\xfe\x5f\x92\xb1\xf6\x44\
+\xee\xeb\x2f\x93\x17\x07\x6d\xe1\x94\x25\xb7\x9b\x2d\x9e\x30\x55\
+\xc2\xb8\xf7\xf7\xf9\xa6\xf7\xed\x8c\x78\x61\xe8\xea\x0a\x03\x27\
+\x28\x19\x1c\xf7\xff\x00\x3c\xd3\x64\xfe\x9a\xeb\xe7\x6f\x2f\xc7\
+\x81\xa9\x5a\x54\x36\x9a\x07\xc6\x75\x94\xf2\xb2\x78\x4e\xd0\x3b\
+\x62\xaa\x88\x7d\x40\xbc\x58\xef\x8e\x5a\xaf\xa9\x11\xa5\xb6\xe1\
+\x48\x09\x27\x6a\xfb\xe3\x8f\x91\x59\xe5\x56\x12\x79\x6c\xd3\xef\
+\x47\x46\x86\x06\x38\x84\xde\x1e\xa2\x93\xec\xf1\xf1\xb1\x77\xd8\
+\xe5\xba\xdb\xe9\x43\x99\xc0\x59\x0a\xf6\xed\x53\x0b\x73\x9e\x2b\
+\x67\x1d\xfd\x88\xee\x2a\x07\xa4\x5d\x5d\xee\x3a\x1e\x4a\x02\x14\
+\x51\xe2\x2d\x03\xb6\x3d\xbf\x1a\x96\xe9\x54\x38\xea\xc9\x42\x89\
+\xf0\xcf\x23\x18\xdc\x08\xff\x00\x0a\xa4\x1b\x5a\x33\x97\x88\x86\
+\x59\x34\xf7\x42\xa9\x6a\x48\x56\xd5\x70\x73\x9c\x0a\x85\xea\xb9\
+\xa0\x45\x74\xab\x01\x09\x49\x25\x47\xd3\x15\x2f\xbc\x2d\xa4\x29\
+\xd2\xb4\xe0\xa4\x77\x57\x63\x9a\xac\x7a\x93\x34\x43\xd3\x13\x9d\
+\x5a\xc2\x56\x52\x4b\x64\x9f\x55\x70\x08\xf4\x3c\x9a\x4e\x22\x4e\
+\xd6\x2b\x45\x5e\x48\xab\xba\x6c\xfc\x4b\x9d\xfd\x53\xfc\x35\x96\
+\xa2\x25\xdb\xa3\x8f\xa9\x39\x49\x58\xdd\x8f\x4e\x78\xc8\xfc\x2b\
+\x9b\x2d\xab\x4b\x97\xf5\xaf\x79\xfd\xa3\x8a\x70\x1e\xdd\xce\x45\
+\x5c\x1a\xab\x57\xc2\xb6\x69\x39\xda\x77\x4a\x2f\xed\x17\xcb\x8c\
+\x77\xff\x00\x59\xba\xda\xbc\x36\x58\x64\x27\x7b\xbb\x72\x7e\xf9\
+\x48\xc6\xd1\xdb\xd3\x92\x2a\x97\x69\x6f\xb7\xe1\xc9\x79\x95\xe1\
+\x01\x28\x0a\x50\xc2\x7b\x70\x3f\x2e\x6b\x6e\x06\x8b\x50\x93\xed\
+\x27\xa4\x2b\xc5\xd5\x82\xff\x00\x5d\xce\xab\xd1\x3a\xa3\xec\xf6\
+\x98\x2f\x3a\xb0\x15\x25\xa4\xed\xc1\xfb\xd8\x1c\x91\x52\xc9\xfa\
+\xb5\x94\x4e\xb2\x41\x65\x64\xc8\x9d\x28\x20\x25\x3d\xc3\x69\xe5\
+\x4b\x23\xdb\xd2\xb9\x3e\xcd\xad\x1e\xb7\x5b\x7c\x36\xd2\x65\xcd\
+\x07\x6a\x1c\x5e\x4a\x50\x8c\xf0\x94\x8f\x41\x9c\xf1\xc7\x3e\xf5\
+\x62\xf4\x9e\xe1\x24\xdc\x57\x74\x92\x97\x6e\x37\xd9\x3e\x44\x04\
+\x72\x23\xb6\x0f\x61\xe8\x9f\xc6\xb7\x55\xc5\x55\xa5\x45\x41\x7a\
+\xfc\x1e\x62\x78\x05\x79\x54\xde\x28\xeb\xeb\x54\xe5\x3e\x86\xd8\
+\x4a\xce\x4e\x33\xcf\x02\xa6\x76\xf4\x06\x9a\x4e\x72\x4e\x39\x26\
+\xaa\xbe\x9d\x6f\x0e\x0f\x1d\xd4\xad\xce\xe7\x6f\x61\xf4\xab\x3e\
+\x2b\xa9\xc6\x49\xf4\x1d\xf9\xae\xec\x33\x4a\x8c\x6e\x72\xe9\x68\
+\xf5\x16\x49\x92\x96\x5a\x0a\x3c\x9a\x29\x39\x47\xda\x9c\x39\x00\
+\xa5\x23\x91\xef\x45\x11\x8d\x34\xba\xc3\xdc\xaa\x37\x78\x95\x3d\
+\xa1\xc5\x39\x68\x82\x33\x84\xa0\x2f\x1f\xfe\xe2\xa9\x44\x8d\xbe\
+\x63\xb7\x1c\x7d\x4f\xfa\xef\x49\x74\xf0\x26\xcf\x18\x0e\xf8\x73\
+\xd3\xfe\x31\x54\xaa\x50\xdc\x84\x8c\xe4\x9f\xe3\x5a\xa1\xee\xa3\
+\x0a\xd8\x90\x69\x48\xa1\xb8\xc5\xcd\x99\x2a\xef\x4e\xef\xb9\xe1\
+\x34\xa5\x9c\x80\x3b\x7c\xd6\xab\x33\x61\x10\x90\x12\x79\x29\xac\
+\x24\x61\xc9\x29\x63\x90\x3b\x9e\x3b\x55\x89\x39\xeb\x52\x3d\x6f\
+\x93\xa3\x75\x5d\xc6\xed\xe0\x0d\x46\x35\x1f\x84\x87\x16\x47\x8e\
+\x94\xf8\xe8\x4a\x5b\x49\xfb\xde\x1f\x81\x9c\x0e\xc4\x66\xa6\xb7\
+\x88\xf6\x59\xfa\x8b\xa8\xee\x6a\x94\xc7\x5b\xd0\x22\x34\x61\x2a\
+\x47\x78\xd1\xfc\x00\xa0\xb6\x89\xfb\xa4\xb9\x92\x54\x9e\x77\x00\
+\x3d\x05\x48\xf5\x2f\x4d\xdb\xd4\x17\x55\x29\xf9\xea\x79\xa5\x3c\
+\x97\x1c\x69\x31\x59\x42\xd6\x10\xa0\xa4\xb6\x5d\x08\xdc\x50\x14\
+\x91\xc6\x73\xc7\x7a\x95\x4b\xd2\xd1\x66\xb8\xd4\x9b\xdd\xaa\x0c\
+\xa7\x18\xe5\xa7\x1e\x8e\x95\xa9\xbf\xf9\x24\x8e\x3b\xfa\x56\x7c\
+\xba\xea\x51\x52\x93\xd6\xc5\x6f\xa1\x61\xb3\x73\xea\x56\x86\x95\
+\xa9\x61\x44\x7e\x63\xba\x4d\x4e\xc9\x54\x96\x92\x54\xb7\x53\xe1\
+\x61\x4a\xc8\xe5\x63\x93\xf1\xcd\x48\xfa\xcf\x74\x87\x2a\xf5\x66\
+\xb3\xb9\x68\xb7\xdc\x9f\xb8\x4a\x52\x23\xfd\xbf\x1f\x67\x65\x48\
+\x6d\x4a\x2b\x3c\x1f\x36\x32\x12\x07\x24\x9e\xe2\xa4\x37\xb4\xda\
+\x27\xa1\x86\xe4\x5a\x60\x4c\x72\x32\x8a\xd9\x72\x44\x74\x38\x5a\
+\x51\xee\x50\x54\x0e\xd3\xf2\x29\x04\xfb\x6c\x0b\xa4\x6f\x06\xe9\
+\x06\x2c\xd6\x77\x6e\xf0\xe4\x34\x97\x13\xb8\x76\x38\x50\x23\x35\
+\x31\xa4\xd4\x9c\x86\x37\x68\x64\x44\x2f\xa1\xd2\x25\x33\xa7\x2e\
+\xec\xb4\xeb\x4a\x8f\x1a\xf9\x31\x96\x10\xca\x8f\x82\x86\xc2\xf2\
+\x12\xdf\xf7\x39\xe3\xe0\xd4\x66\xe7\x19\xcb\x8c\x2b\xb7\x4e\xa2\
+\xa9\xc4\x3d\x6d\xb8\xcf\xbc\x32\x1b\x27\x29\x6f\xc1\x0e\xc7\xfc\
+\x3c\x69\x23\x8f\x5f\x0f\xeb\x57\x0c\x68\x71\x62\x21\x48\x8b\x19\
+\x98\xe9\x70\x82\xb4\xb6\xd8\x48\x2a\xc0\x19\x38\xf8\x00\x67\xe0\
+\x52\xad\x3b\x6a\xb7\xa6\x74\x8b\x92\x61\xc7\x13\x1d\x40\x6d\xc9\
+\x01\xa4\xf8\x8a\x48\xec\x92\xae\xe4\x0f\x6a\xb4\xa9\xf5\x52\x65\
+\x14\x2f\x64\x51\xfa\xda\xe4\x8d\x5b\xa0\x75\x76\xae\x6c\xe6\x3c\
+\xe3\x6b\x84\xc1\x07\x90\x84\x38\xca\xd6\x07\xb7\xed\x5e\x70\x7d\
+\x51\x4b\xb5\x94\x25\x69\xed\x51\xaa\xa2\xe9\x88\xe8\x80\x4e\x8c\
+\x12\x7c\x28\xa8\xd8\x0b\x89\x79\x68\xf1\x00\x1f\xbc\x10\x3b\xf7\
+\xe2\xad\x56\x74\xed\x8d\x98\x8e\x5a\x51\x68\x80\x9b\x76\xed\xc6\
+\x20\x8c\x8f\x07\x21\x41\x40\xec\xc6\xdc\xee\x00\xf6\xef\xcd\x2f\
+\x4c\x18\x5f\xac\x0d\xc0\xc4\x8f\xf6\xc2\xc8\x64\xbf\xe1\x8f\x10\
+\xb6\x0e\x42\x37\x63\x3b\x72\x49\xc6\x71\x93\x51\xc2\x2a\xe1\x72\
+\x17\xa4\x9a\xb2\xc2\xd7\x7a\x05\x8d\x26\x88\xcc\xa6\x6d\xb2\x51\
+\xb8\x88\xa7\x1f\x68\x8e\x1a\x4a\x9b\x71\xdc\x7d\xe5\x78\xa4\x61\
+\x4a\xe4\x95\x2a\xa1\x1a\x11\xb9\x73\x6c\x9d\x32\xb4\xbb\x0e\xd9\
+\x36\x03\xb6\xd9\xeb\x6a\x3d\xcd\x65\x31\xde\x90\x1d\xc7\x20\x25\
+\x5b\x96\x94\x12\x52\x08\xf5\x26\xae\xcb\x45\xaa\xd9\x68\x92\xec\
+\xab\x55\xb2\x14\x27\x9e\x20\xba\xa8\xec\x25\xb2\xe1\xfe\xf1\x03\
+\x9f\xc6\x97\xc7\xb3\x69\xfb\x85\xa9\xbb\x13\xd6\x0b\x59\xb7\xb5\
+\xfd\x54\x43\x11\x05\x94\x77\xec\x8c\x6d\x1d\xcf\x61\xea\x69\x33\
+\xa2\xe2\xdc\xb9\x0e\x8c\x73\x59\x7a\xe5\xf6\x1b\xfa\x63\x6a\x9d\
+\x60\xd0\xf1\x2d\x17\x29\x91\xa5\xb9\x1c\xba\x96\xdc\x8e\xe2\x96\
+\x80\xd1\x71\x45\x08\x0a\x57\x27\x68\x21\x3f\xf5\x6a\xa0\xd0\x4d\
+\xb5\x22\xc3\xd3\x28\x17\x64\xa1\xdb\x1c\xbb\x8d\xdb\xc7\x65\xee\
+\x59\x75\xf4\xba\xe9\x61\x2b\x1d\x8f\x3b\xc8\x07\x82\x40\xae\x88\
+\x8b\xa7\xa3\x43\x88\x86\x22\x34\xd4\x76\x1b\xe1\xb6\x9a\x40\x4a\
+\x12\x3e\x00\xe0\x73\x49\x17\xa7\xec\x66\xc6\x6c\xa6\xcd\x6e\xfd\
+\x5c\x92\x4f\xd9\x3e\xcc\x8f\x07\x24\x95\x13\xb3\x1b\x79\x24\x93\
+\xc7\x72\x4d\x2f\x34\x5f\xba\xc7\xcb\x0f\x2d\x2f\xa5\xbf\x05\x0b\
+\xa9\x63\x43\x3a\x37\x56\xc4\x61\x98\xee\xd8\x60\xeb\x08\x88\xb7\
+\x82\x90\xa6\xd8\xca\xd9\xf1\x90\xde\x78\x4a\x02\x94\xa1\x81\xc0\
+\xc9\x15\x7a\xa6\x14\x48\x28\x6d\x88\x2c\x31\x1a\x3a\x01\x4a\x1a\
+\x65\x01\x28\x4f\x3c\x80\x07\x03\x9a\xdb\x1e\xd1\x69\x55\x98\xd9\
+\xd5\x6c\x82\x6d\xc5\x3b\x0c\x42\xc2\x3c\x12\x33\x9c\x6c\xc6\xdc\
+\x67\xe2\xb2\x72\x0c\x48\x10\x99\x89\x06\x2b\x11\x23\x34\x36\xb6\
+\xd3\x2d\x84\x21\x03\xd8\x24\x70\x2a\xd4\xfa\xb3\x21\x52\xb2\xb9\
+\x8e\xd4\x91\x4e\x56\x73\x84\x28\x7a\x53\x7a\x53\xe5\x19\xa7\x1b\
+\x42\x78\x55\x4d\x67\xd4\x63\xa8\xae\xba\x15\xca\x21\x2d\x13\xfc\
+\x6b\x7c\x70\x7c\x04\xe7\xeb\x9a\x4d\x30\xf9\x42\x7d\xcd\x2b\x4a\
+\x7f\x60\x12\x38\xe2\xb1\x4b\xdd\x46\xd8\xfb\xcc\x88\xeb\x46\xae\
+\xd3\x11\xe1\x5a\xe4\x47\x87\xce\x16\xfb\xa8\x2b\xda\x3f\xba\x3d\
+\xfe\xb5\x51\xf5\x36\xd8\xf7\xea\x77\x23\xae\x4c\xa9\xea\xda\x77\
+\x2b\x21\x0a\x5f\xc0\x20\x60\x55\xed\x75\x64\xae\x31\x6d\x23\x19\
+\xe4\x9a\x84\x6a\x6b\x62\x1c\x86\xa1\xb3\x3c\x56\xc8\xae\x25\x2c\
+\xa8\xc3\x56\x0f\x3d\xcf\x9f\x7d\x44\xb4\x48\x62\xe0\xf3\xe6\xd9\
+\x2e\x3a\x4a\xb1\x87\xdd\x4b\x8a\x19\xf9\x00\x1f\x4a\x85\x38\x95\
+\x15\x01\xe7\x42\xc7\x21\x47\x23\x9f\xf5\xeb\x5d\x45\xd6\x2b\x3b\
+\xa9\x87\x39\x29\x04\xe5\x95\x29\x3c\x76\x29\x1b\x87\xf2\xae\x5f\
+\x59\x90\xb7\x08\x5b\x8b\x21\x4a\xc0\xca\xb8\x15\xcc\x95\x19\x52\
+\x76\x91\xd6\xa7\x5d\x56\x85\xd2\xd5\x16\x2e\x87\xeb\xc7\x54\xb4\
+\x7a\x5a\x8f\x13\x50\xb9\x70\x88\xd8\xc2\x63\x5c\xd0\x24\x20\x0f\
+\x60\xa5\x79\xc0\xf8\x0a\x15\x2d\xbf\x75\xe9\x7d\x44\x81\x1e\xd1\
+\xa9\xf4\xfb\x11\x2e\x09\x75\x02\x34\xd8\x6e\xa8\x21\x27\x70\xdd\
+\xb9\x0a\xc9\xec\x38\xc1\xaa\x42\x42\x1a\xd8\x95\x36\xa4\x9e\x3b\
+\x81\xdc\xe3\xd6\x93\xef\x53\x4b\x0a\x6d\x5e\x1a\xb7\x02\x0f\xaa\
+\x48\xe4\x7f\x1a\x44\xf0\xf4\xea\x2d\xac\x69\x86\x2a\xa5\x29\xa7\
+\x7b\xfa\xed\x3a\x67\xa6\x45\x2f\x6a\x47\xd8\x43\xe8\x41\x8d\xbc\
+\x84\xf0\x0b\x4e\x28\x85\x67\x8e\x30\xa3\x93\xb7\xd3\x15\x7f\x59\
+\x10\x50\xd8\x04\x27\x05\x1b\xbb\xf2\xa5\x1a\xe5\x2e\x83\xc8\x4c\
+\xfb\xf1\xb8\xc8\x79\x6d\x36\xb4\x12\xf3\x69\xe4\x15\x8e\x0a\x86\
+\x7d\x87\x38\xf8\xae\xa5\xd3\x24\x22\x33\x7e\x33\xbb\xbc\x4f\x38\
+\xcf\xb6\x3f\xca\xb8\xb2\x86\x4a\xb9\x4e\xd5\x49\xf1\x20\xa4\xb6\
+\x25\x50\x0a\xca\x96\x16\x52\xb5\x63\x00\x03\xda\x97\x46\x52\x10\
+\xb1\xfb\x5d\xe1\x7c\xe0\xfc\x7b\x53\x5c\x22\xd2\xdd\x29\x28\x29\
+\x46\xd0\x06\x13\x80\x41\xe7\x03\xf9\xd2\x97\x4a\x9b\x53\x7e\x1b\
+\x5b\x92\xa3\xb4\x2f\x3c\x53\x91\x85\xad\x49\x2b\x23\xc4\x8c\x53\
+\xc8\x23\x04\x53\x25\xf9\x97\x14\xd1\x4b\x27\x6a\xd2\xad\xe8\x1e\
+\x83\xde\x97\xdb\x24\x00\xda\x71\xb4\x92\x39\xc1\xfb\xd5\xb6\x72\
+\x42\xd4\xac\xa7\xb6\x3e\xa6\x99\x6b\xab\x95\x83\x71\x91\x46\x4e\
+\xe9\xb5\x82\xdd\xaf\xef\x9a\xbb\x53\xb5\x3a\xe9\x0e\xe7\x19\x5e\
+\x24\x65\xb4\x1c\x4b\x3c\x64\x84\x6d\xe5\x3f\x74\x04\xe3\xb6\x69\
+\xce\x77\xe9\x2d\xd3\xb8\x71\xac\x1f\xab\x2d\xb7\x6b\x95\xd5\x6c\
+\x84\xcd\x86\xcc\x52\x87\xa0\x36\x13\x85\x21\xd2\xb0\x01\x21\x40\
+\x70\x32\x3b\x9c\xf2\x33\x69\x49\x6d\x0e\xb4\xa6\xdc\x47\x88\x95\
+\x27\x18\x20\x62\xab\xed\x53\xd3\xf6\x1d\x92\x6e\x16\xc0\x84\xaf\
+\xb1\x49\x47\x21\x3e\xa9\x04\x73\x8f\x8a\x74\x54\x5d\xf9\x5c\xdf\
+\x4e\x34\x71\x35\x23\xc7\x93\x49\x7c\xbf\x17\x2b\xab\x87\x5e\x3a\
+\xd4\xbb\xbc\xfb\xed\x93\x42\xda\xcd\x8e\x42\x52\xd4\x18\x92\x9b\
+\x5b\x8e\xb5\x8c\xe1\x64\xa0\xa4\x92\xac\xf2\x31\x8e\x06\x3b\x12\
+\x61\x8c\x7e\x92\xdd\x75\xd2\xb2\xa7\x4e\xbf\xd9\x2d\xf3\x1a\x98\
+\x50\x19\x44\xcb\x72\xda\x6e\x36\xdc\xf9\x5b\xd8\x52\x48\x39\xe7\
+\x71\x51\xe0\x73\xef\x74\x5b\x6c\x17\x96\x96\xd2\x90\xeb\xe8\x2a\
+\x07\x87\x8e\x43\x7c\xe0\x10\x78\xc5\x2e\x9f\x66\xbb\x86\xca\x27\
+\xc0\xb7\xdd\x5b\x20\x28\x87\xd9\x2a\x42\xbb\xfa\x03\xc6\x31\x4f\
+\x8d\x24\xb5\x5e\xbc\xcd\x18\x8c\x0e\x0d\xbc\xb0\xd1\xf8\xaf\xaa\
+\xfa\x94\x13\x1f\xa5\x47\x5a\x2e\x17\xf6\x6f\x31\x2d\x16\x43\x16\
+\x33\x2b\x4a\xa1\x22\x0b\x85\x85\xa5\x58\xf3\xac\xef\xdf\x91\x8e\
+\x08\x50\x1c\x9e\x0e\x6b\x46\xbd\xfd\x21\xfa\xb9\xaf\xf4\xd3\xba\
+\x61\x16\x9b\x55\xac\xc9\x79\xa5\xfd\xa2\xd8\x97\xdb\x92\x14\x85\
+\x85\xa4\x21\x45\xc3\xb7\xcc\x91\xc8\x19\xab\xd9\x36\x7b\x92\x98\
+\x71\xa8\xac\xc1\xb4\x43\x3c\x2d\xa8\x51\x40\x04\x1f\x7d\xd9\xa6\
+\xf7\xf4\xc4\x25\x02\x5b\x33\x14\xe2\x70\x12\x1b\x09\x4e\x4f\xb8\
+\x20\x70\x6a\x5c\x5d\xbd\x7d\xcb\x51\xe8\xbc\x25\xba\xed\xdf\xb9\
+\xaf\xb6\x9f\x32\xb4\xd1\x9f\xa5\x06\xba\xd3\xd3\x05\x83\x5a\xdb\
+\x5f\xb9\xcc\x5b\x69\x6d\xd5\xb4\xca\x03\xe1\x40\x79\x54\x02\x78\
+\x59\x23\x04\xf6\xe6\xa5\xd3\xe0\x5a\xfa\x99\x7a\x87\x76\x4d\x96\
+\x7c\x6c\x38\x95\x7e\xdd\x92\xca\xca\x10\x90\x84\xa5\x5e\xc5\x58\
+\x2a\xf8\xc8\xa9\x1e\x95\xd1\xad\xb7\x72\x33\x1f\x84\xd2\x16\x95\
+\x79\x5f\x71\x01\x4f\x2d\x3f\xd9\x2a\x3e\x61\xef\xed\x53\xf8\xad\
+\xa1\x0d\x25\x96\x5b\x28\x1d\xb7\x7a\x8c\x7a\xd6\x4c\xb0\x84\xae\
+\xbe\xeb\xe1\xd9\xfc\x04\xb8\x78\x4a\xad\xd3\x77\x7c\x9a\xd3\xe7\
+\x6d\xdf\xcb\x53\x56\x9c\xb4\xa6\xd0\x5c\x43\x28\xfb\x36\xe6\xc3\
+\x6d\xa0\x2b\x77\x03\xb7\x3e\xf5\x2a\xb3\x30\xdc\x56\xde\x53\x79\
+\x4a\x49\xce\x7e\x69\x14\x64\xee\x71\x03\x68\x0e\x01\x8e\x7b\x1f\
+\x6a\x5f\x3d\xd4\xb5\x04\x10\xa1\x85\x63\x27\x3e\x94\xb7\x6b\xdc\
+\xe5\xd6\xa9\x29\xbd\x77\x64\x67\x54\x3e\xa7\x0e\x12\x40\x2e\x2c\
+\x20\x7d\x3b\xf0\x6a\xa3\xeb\xec\xc8\xc8\xd2\xef\xc4\x53\x85\x0d\
+\x17\x1a\x42\x54\x9e\x4f\x0a\xdc\x4f\xc0\xc0\x3f\x95\x59\x12\x65\
+\xa5\xc9\x6e\x28\x20\x29\xb6\x12\xa2\x94\xf7\xc9\xf7\x1f\x87\xa5\
+\x50\x5f\xa4\xad\xd7\xc2\x8d\x11\x90\xea\x52\x14\xf9\x52\xd4\x39\
+\x07\x00\x0e\xdf\x88\x35\x86\x5d\x79\xa4\xb9\xb3\x4d\x15\x95\xdd\
+\xf2\x29\x3d\x51\x01\xb5\x6a\x2b\xbb\x61\x84\x15\xc9\x96\x0a\x48\
+\x40\x3e\x12\x42\xf2\xad\xbe\xd9\x38\xc7\xba\x6a\x51\x1a\xde\xe4\
+\xad\x04\x34\x9c\x87\x12\xa7\xe7\x4a\x52\xe1\xf8\x80\x00\xb9\x03\
+\x09\x46\xd5\xfa\x03\x94\xa7\x9e\xc4\x1c\xf0\x6a\x2e\xdc\xa6\xe4\
+\x33\x35\xf4\xa5\x68\x2e\xb9\x90\x47\x00\x1d\xaa\xc2\x7f\x3d\xbf\
+\x95\x48\x27\xdc\x1c\x77\xf5\x54\x64\x04\xb9\x1d\x69\x42\xdb\xf7\
+\x4a\x82\x48\x2a\x1f\x50\x8e\x7e\x41\xae\x83\x8d\x49\xa4\xbf\xd6\
+\xc2\xe6\xe9\x53\x4d\xda\xf7\x4f\xee\x57\x96\xc9\x42\xd5\x39\xf8\
+\xd7\x1b\x72\x64\x01\x96\x9d\x6d\x44\xa1\xc4\x28\x1f\xdd\x50\xec\
+\x41\xfa\x8f\x71\x56\x7d\x87\xa8\x71\xd9\x65\x98\xd1\x6e\x0b\x43\
+\x28\x40\x4e\xc7\xe1\xa5\x05\x27\xea\xd9\x19\xfa\xe2\xa3\xd7\x1d\
+\x2e\xbb\xea\x95\x24\x2c\xb5\x39\x5d\xd4\xae\xce\x9f\x93\xef\xf3\
+\xeb\xeb\x5a\x6c\x5a\x1a\xe6\x66\x04\xce\x2b\x8a\xd8\xfd\xe5\x23\
+\x3f\x85\x6d\xc5\xd2\xa7\x17\x9e\x5b\x9c\x9c\x3c\x95\x78\x70\xe5\
+\x6b\x17\xde\x84\xea\x4d\xbe\x1b\x6a\x91\x26\x78\x53\x68\x1c\x9d\
+\x87\xf8\x0e\x6a\xcc\xb3\xf5\x6a\xcb\x37\xc3\x69\x13\x52\xb7\x1c\
+\xc0\x65\x86\x92\x5c\x75\x7e\xde\x54\xe7\x68\xf9\x56\x2a\x91\xd1\
+\xdd\x3f\xd3\x72\x5c\x4c\x6b\x83\xd2\x66\x36\x4f\xdc\x6b\xf6\x40\
+\x9f\x92\x39\x35\xd0\x5a\x1f\x4e\x59\x2c\x50\x50\xcd\x92\xcf\x12\
+\x0a\x55\x8c\xa9\xb4\x0d\xea\xfa\xa8\xf2\x7f\x3a\xac\x31\x78\xa7\
+\x68\xd3\x8b\x39\x18\xaa\x58\x58\x36\xa1\x26\xc9\xf6\x97\x93\x2a\
+\x4c\x60\xf3\xad\x96\xc2\xb9\x09\x3d\xe8\xa7\x1b\x5b\x78\x8e\xca\
+\x07\x07\xf9\xd1\x5d\xbc\xce\xcb\x3e\xe2\xe9\xc1\xa8\x95\x8d\x91\
+\xb0\xd5\x92\x13\x84\x67\x21\xc3\xff\x00\xf7\x15\x5b\xa4\xa0\xee\
+\x40\xe0\x80\x72\x69\x7c\x08\xa5\x5a\x1e\xdb\x29\x00\x12\x9f\x13\
+\x38\x1f\xf1\x8a\xa6\xf7\x54\x56\x94\xac\x80\x30\x73\xc0\xad\xd4\
+\xdd\xe0\x8c\x0d\x58\x99\xdb\x49\x4c\x26\xc9\x27\x84\xf1\xc7\x15\
+\xaa\x18\xdd\x31\xc7\xb3\x9c\x71\xc8\xe4\x57\x96\x97\x02\xed\xc9\
+\x3b\x8e\x40\xe4\x66\x8b\x77\x09\x77\x18\x3e\x6c\x7c\xd5\x80\x8a\
+\x33\xd4\x9b\x85\xb2\xdf\xa8\x35\x08\xd3\x08\x95\x6b\xb1\x5d\xff\
+\x00\x56\xcb\x58\x9b\xb5\xe5\xa8\xb8\x94\x05\x34\x8d\x98\x57\xf5\
+\x8d\x93\xb9\x49\xee\x7d\xb3\x4f\x57\xde\xa2\x49\x82\xbd\x4b\x6d\
+\xd4\x76\x96\x20\x3f\x67\xb6\xa2\xe4\x55\x12\x59\x7d\x0e\xb4\xbd\
+\xc3\x6e\x4a\x11\x85\x85\x27\x6f\x6c\x1c\x83\xc5\x37\xbd\xd3\x8b\
+\xdc\xae\x9b\xeb\x2b\x23\x72\xad\xc9\x95\x7e\xd4\x29\xba\x45\x52\
+\x9c\x58\x42\x1a\x0e\xc7\x56\xd5\x9d\xb9\x0a\xc3\x2a\xe0\x02\x39\
+\x1c\xf7\xc2\x8d\x5d\xa1\xdf\xbe\x6a\x2d\x53\x3e\x64\xa6\x5b\xb7\
+\x5e\x6c\x4d\xdb\x1b\xd8\x49\x75\xb7\x12\xb5\xab\x79\x49\x18\xc0\
+\xdc\x08\xe7\x9c\x7a\x57\x36\xf2\x95\x4c\xdd\x86\x9f\xdd\x85\x3b\
+\x76\xaf\xbf\xe0\x8d\x5a\xb5\x35\xc0\xdf\xad\x96\x9b\xe5\x99\xb8\
+\x2b\xbb\x30\xb7\xa1\xa9\x99\x5e\x36\x0a\x00\x52\x9b\x73\x28\x4e\
+\x15\xb4\xe7\x23\x20\xf3\xcf\x19\xa6\xfb\x37\x51\x26\x49\xd1\xcc\
+\x6a\x69\x36\x16\xe3\xc7\x9a\xa6\x23\xc0\x6c\xcc\x1b\xe4\x48\x71\
+\x7b\x08\x27\x6e\x10\x80\xac\xf9\x8e\x4e\x01\x38\xf4\xa7\x96\x34\
+\x5e\xa5\x93\x7f\xb3\x5e\xaf\x92\x2d\x89\x4d\x9a\x3b\x88\x60\x44\
+\x52\xd4\x5f\x71\xc4\x04\x17\x14\x14\x91\xb0\x6d\x07\xca\x37\x7d\
+\xe3\xcd\x31\x40\xe9\xc5\xd9\x7d\x2b\xb4\x69\x79\x2e\xc1\x54\xfb\
+\x5b\xe8\x92\xda\xd4\x92\xe4\x75\xad\x0e\x15\x84\xa8\x10\x0a\x90\
+\x41\x20\xf1\xeb\xeb\xeb\xba\xf2\x7b\x18\xda\x91\x27\xd2\xba\x99\
+\x77\x69\xd7\x6b\x5c\xb8\xf1\xe3\xcf\xb6\x38\xda\x5d\x4c\x79\x1e\
+\x33\x4e\x21\xc4\xee\x42\xd2\xad\xa9\x3c\xf2\x30\x47\x04\x1e\xf4\
+\xcd\x17\x57\x3d\xa5\xee\x1d\x43\xb9\x4d\x82\xf3\xdf\xaa\x53\x6f\
+\x77\xc3\x4c\xd5\x2d\x0b\x69\xcd\xc9\x1b\x10\xa4\x80\xda\xb6\xf2\
+\x40\xc8\x27\xd7\xd6\xa5\xda\x27\x4d\xbd\x00\x48\x76\x65\x96\xc9\
+\x6c\x52\xca\x70\x8b\x6a\xb7\x05\x81\x9e\x54\x7c\x34\x76\xc9\xc7\
+\x1c\x64\xd4\x7f\x59\xe8\x0b\xcd\xe7\xfa\x7e\x88\x4f\xc0\x48\xd4\
+\x31\xa0\x35\x13\xc5\x5a\xc7\x86\x58\xce\xf2\xe6\x12\x70\x0e\x78\
+\xc6\x7e\x71\x54\xa8\xdb\x8e\x85\xad\x24\x93\x5e\xb4\x62\xa7\xf5\
+\x45\xe9\x8d\x51\x36\xc7\x70\xb2\x43\x89\x70\xfd\x54\x6e\x71\x76\
+\x4c\x53\xad\x94\x85\x6c\x28\x70\xf8\x69\x29\x50\x51\x1d\x81\x18\
+\x3c\x76\xa6\x1d\x25\xad\xef\x4d\xe8\x3d\x39\x36\xee\xcc\x19\x97\
+\x1b\xd3\x88\x66\x17\xfb\x41\x6c\x2c\x90\xa5\x2d\x6e\x9d\x98\x42\
+\x52\x13\xfb\xa1\x5e\x82\xa7\x57\x0d\x2b\x2e\xe1\xd4\x8f\xe9\x1a\
+\xde\x8e\x88\x46\xc0\xe5\xb0\xa3\x71\xf1\x43\xaa\x79\x2b\xdd\x8c\
+\x63\x6e\x01\xf5\xce\x7d\x3d\x6a\x14\xd7\x4b\xef\xc9\xd2\x5a\x7e\
+\xd5\x2c\xd9\x1f\x93\xa7\xa4\x05\xc6\x0b\x5a\xdd\x62\x5b\x78\x52\
+\x54\x97\x12\x50\x36\x12\x95\x0c\x63\x7e\x08\xa8\x53\x90\x4e\x13\
+\x4e\xe8\x5b\x23\xa9\x2e\x33\x64\x2f\xfe\xa6\x4b\xd7\x16\xef\x89\
+\xb2\xbb\x11\x99\x61\x49\x53\xaa\x4e\x50\xa4\x2c\x81\x94\xa8\x94\
+\x72\x40\xc6\x4f\xb5\x38\x7f\x4d\xae\xb0\xae\x2e\xc1\x6a\xcf\x6e\
+\x7a\xe9\x02\xd9\xfa\xc6\xe0\xd2\xee\x45\xb6\xd0\x32\xad\xad\x36\
+\xaf\x0c\xef\x59\xda\x4f\x21\x23\xdc\xf3\x49\xee\x5a\x1a\xeb\x72\
+\x85\x65\x8e\xd5\xba\xc3\x67\x5c\x4b\xec\x5b\x8b\xcd\x44\x52\xbc\
+\x35\x36\xd2\xb2\xac\x10\xda\x77\x2f\xd0\x65\x20\x76\xe4\x53\xad\
+\xe7\x42\x3a\xde\xb9\x5e\xa5\x85\x6b\xb0\xdd\xd1\x2e\x1a\x22\xc8\
+\x89\x76\x04\x04\x29\x0a\x25\x2e\x36\xa0\xda\xfd\x14\x41\x4e\x06\
+\x70\x39\x15\x15\x27\x24\xad\x72\xd0\x84\xef\x71\xda\x27\x53\x1c\
+\xbc\x5e\xad\x76\x7d\x39\x6e\x80\xeb\xf3\xec\xed\x5d\x9a\x55\xca\
+\xe0\x62\xa5\xd4\x38\x78\x69\xbd\xad\xac\xa9\x63\x07\x77\x18\x4f\
+\xcd\x37\x45\xbd\xeb\x29\x9d\x53\xd6\x76\x38\xed\xda\xdc\x85\x6d\
+\x8d\x10\x47\x6d\xd9\x2b\x6f\x69\x71\xb7\x94\x95\x6e\x4b\x64\xe5\
+\x44\x24\x2b\xfb\x21\x3c\x66\xb7\x75\x07\x45\x5d\x75\x55\x89\x8b\
+\x03\x16\xad\x37\x09\x94\x36\xd1\x8b\x3d\x2e\xb8\x97\xad\xce\x0d\
+\xa5\x4a\x61\x09\x6c\x76\xc7\x1e\x74\x7a\x67\xda\x9d\x23\xe9\x9b\
+\xd5\xa7\xa9\xb7\xad\x42\xc3\x90\x65\x5b\x6f\x4c\x44\x43\xc5\xd7\
+\x94\x89\x0c\xae\x3a\x16\x9e\x12\x10\x52\xb0\xad\xd9\xfb\xc9\xc7\
+\xb1\xac\x11\xd2\x46\xf9\x71\x25\xbf\x27\xf4\x7f\x82\x13\xa0\xf5\
+\xcc\xb6\xf4\x9e\x84\x89\x6f\xb4\xbb\x36\x4e\xa1\x6e\x4a\x19\x13\
+\x6e\x2a\x51\x6c\xb4\x4a\x89\x71\xd2\x92\x54\x36\x85\x1c\xed\xcf\
+\x00\x01\x4e\x8b\xea\x43\xcf\x59\x4a\x5c\xb2\xb6\x2f\x89\xd4\x0a\
+\xb0\x08\x68\x94\x4b\x2a\x90\x90\x14\x56\x1c\xd9\x90\xde\xcf\x36\
+\x76\x64\x76\xc6\x69\x26\x8a\xe9\xd5\xea\xcc\x9e\x9d\xb7\x2a\x55\
+\xb9\x6a\xd3\x3f\x6d\xfb\x6f\x86\xe2\xc8\x73\xc6\x6d\x69\x4f\x87\
+\x94\x8c\xe0\xa8\x67\x3b\x7f\x1a\x43\xa8\x74\x7c\xcb\x3c\x69\xf7\
+\x59\x17\x08\xac\xcb\xfe\x98\x2e\xfb\x6f\x52\x59\x79\xe6\xca\x16\
+\xda\x51\xe1\xbc\x10\x82\x51\x94\x85\xe5\x40\x10\x0e\xde\x69\xea\
+\xf7\x46\x5b\xd4\x50\xd7\xd6\x88\x96\x68\xad\x51\x3a\xf5\x7c\xbf\
+\xd9\x6e\x36\xb6\xa0\xcb\xb2\x2d\x86\x9e\x2d\xbe\x5d\x43\x85\xc4\
+\x15\x85\x24\x94\xa4\xe3\x6e\xd3\xc8\x07\x92\x3d\x39\x9f\xdb\x9b\
+\x21\x9d\xde\xf5\x4a\x74\xfa\x36\xb1\x9d\x71\xd7\x77\xeb\x6a\x20\
+\x35\x3a\xe9\x2a\x28\xb7\x3f\x32\x3b\xc8\x8a\xe0\x69\xb0\x85\x10\
+\x08\x0b\x52\x40\xca\x42\xb0\x37\x11\x9c\x7a\x55\xe2\xdf\xec\xa3\
+\x80\xac\x6e\x03\x9c\x0a\xad\x59\x5d\x58\xd3\x84\xbb\xd5\x9a\x5e\
+\xf3\xc8\x48\xc7\x00\xd2\xe5\x28\x21\x19\x24\x62\x92\x46\x49\x53\
+\xbb\x8d\x63\x73\x77\xcb\xe1\x8e\x29\x4e\x39\xa4\xa2\x6b\x52\xca\
+\x9c\x8c\xe5\x79\x9b\xde\x80\x08\x3e\x95\x1c\xba\xb6\x92\xda\x93\
+\x8a\x7a\x84\xf0\xf0\xca\x14\x7b\x53\x7d\xdb\x6a\x42\x88\x23\xb5\
+\x68\xa2\xb2\xca\xc2\x2a\x4a\xeb\x32\x28\x7e\xac\x5b\xd9\xf0\x5c\
+\x75\xcd\xa1\x23\x39\xc9\xc0\x23\xd4\x57\x1e\x5d\xed\x4c\xc5\x9d\
+\x3a\x1b\x8b\x49\x4a\x17\x84\x2c\x11\x82\x3b\xa4\xff\x00\x01\xda\
+\xbb\x8f\xa8\xed\x32\xfc\x57\x12\x52\x15\x90\x46\x31\x9c\xd7\x21\
+\xf5\x4d\x8b\x7b\x77\x22\xdb\x6a\x40\x90\xc2\x8e\x50\xca\x07\x95\
+\x27\x9c\x28\x8f\x5c\xfa\x52\x7a\x46\xea\x49\x8d\xe8\xd9\xae\x23\
+\x8f\x69\x5b\xcb\x01\xb4\x16\xc1\x2e\x36\xda\xb3\xbb\x1b\x77\x66\
+\x90\xab\x24\x03\xfc\x3d\xa9\x44\xc2\x92\xac\x93\x93\xea\x7e\x7d\
+\xa9\x32\x73\x9c\xfe\x35\x96\x3b\x1b\x2a\x7b\xd6\x2c\x3e\x86\x5e\
+\x55\x07\x50\x2e\xde\x9d\xa9\x75\xf4\x9f\x05\x6a\xec\x92\x01\xcf\
+\xe6\x3f\x3e\x2b\xb1\xf4\xdc\xc5\x4a\x89\x1d\x78\x4a\x96\xcb\x61\
+\x0e\x82\x78\x2a\xc6\x4f\x6f\xf5\xc5\x70\x15\xb5\xd7\xe3\x5d\xa3\
+\xc9\x86\xa5\x25\xd0\xa0\xa6\xcf\x63\xbb\xbe\x2b\xae\xfa\x67\xa9\
+\xc4\xcb\x4c\x0b\x8c\x64\xbc\xff\x00\x8a\x0b\x8e\x82\x07\x99\x69\
+\x49\xcf\xd0\x9e\xd8\xf8\xae\x46\x3a\x9e\x4a\xaa\x6b\x66\x75\xf0\
+\x53\xe2\x50\xc9\xce\x25\xcd\x16\x52\x52\x50\xe8\x20\x21\xd0\x0a\
+\x49\xf5\xee\x08\xc7\xa7\x22\x9c\x96\xe2\x50\xc6\x14\xe6\xc5\x28\
+\x85\x79\xbd\x0e\x2a\x31\x6d\x7d\x1f\x64\x3b\x5b\x07\x01\x2b\x4a\
+\x09\xc7\x98\xf7\x03\xe0\x71\x4f\x4a\x79\x29\x4b\x99\x41\x53\x89\
+\x4f\x09\xce\x48\x57\xf6\xbe\x9e\xff\x00\x14\xa8\xcb\x40\x9a\xd4\
+\x75\x83\x28\x21\xe4\xa9\x4b\x40\x07\x18\x27\xb6\x7d\x85\x3b\xaf\
+\x2e\x34\x57\x90\x49\xc1\x2a\x1f\xcb\xe0\xd4\x2e\x44\xc2\xc3\xa1\
+\x01\x40\x37\x80\xb5\x85\x71\xdf\xdb\xe7\xe9\x4f\x91\x64\xed\x61\
+\x05\x04\xbb\x9f\xbe\x53\xc7\x70\x3b\x81\x53\x09\xf2\x29\x28\xb5\
+\xa8\xe0\xa4\x2b\x07\x91\xbb\x18\x15\xa0\x85\x24\xf2\x33\x8e\x4e\
+\x3b\x66\x94\xa0\x95\x25\x21\x5e\x53\x8e\xc1\x40\xee\xac\x78\xf3\
+\x63\x18\xf5\xc5\x35\x3b\x30\x4e\xe6\xa6\x9c\x6b\x2a\x52\xc6\xd0\
+\x91\xe6\xdc\x3d\x3e\x2b\x15\xc8\x86\xd9\x48\x52\x41\xe3\x00\x9e\
+\x72\x3e\x4d\x6c\x75\x2d\xa5\x25\x6e\x1d\xde\x98\x1d\xe9\xbe\x41\
+\x65\x2a\xcb\x4d\x95\x82\x9c\x7d\x0f\xe3\x5a\x23\x27\xc8\xba\xd4\
+\xd8\xe3\xd1\x0a\x77\xb8\xc0\xce\xfd\xaa\x1e\xde\xf5\x8a\x26\x47\
+\x52\x40\x65\x9f\x2e\x4e\x71\xed\xee\x6b\x4a\x76\xe7\x7f\x86\x9d\
+\xc4\xf3\xba\xb0\x2b\x47\x2a\xd8\x9c\xe7\x83\xc0\xcd\x44\x99\x74\
+\x66\x42\x4b\xea\x4a\x52\x13\xc7\x7a\xf5\xb4\xa1\x2d\x03\xd8\x93\
+\xe9\xe9\x5e\x87\x02\xd4\x70\x3c\xc7\x9c\xfa\x56\xc4\xe1\x03\x9f\
+\x4c\x9a\xcd\x32\x1b\x33\x8e\xb2\xdb\x81\x69\x4e\x48\x1c\xe3\xda\
+\x91\x6a\x7b\x88\xf0\x91\x19\x05\x3b\x94\x00\x48\x07\xd7\xbf\xe7\
+\xde\x92\xbb\x74\x47\x88\xa0\x97\x30\xda\x81\x4a\x47\x62\x78\xe4\
+\xf3\xed\x51\xb8\x73\x45\xc1\xf3\x26\x46\xe5\x36\xc2\x89\x6c\x64\
+\x83\x9e\x47\x22\xb3\x54\xa9\xa6\x54\x4c\x61\x77\x77\xc8\xdb\x73\
+\x92\x88\x50\x9c\x38\xd8\xe1\xdc\xb5\x0f\x82\x3f\xf4\xae\x45\xfd\
+\x23\xee\xce\x4d\xea\x0b\x50\x50\xea\x14\xcc\x78\xe8\x52\x90\x83\
+\x90\x95\xab\x24\x83\xf8\x60\xfe\x22\xba\x2b\x59\xea\x08\xd0\x62\
+\xbf\x26\x44\xa5\x33\x19\xb4\x17\x5c\x58\x20\x8e\x07\x63\xf1\xdb\
+\x1f\x53\x5c\x63\x74\xb8\xae\xe9\x7e\x99\x76\x78\xef\x5c\xa9\x0b\
+\x70\x83\xc7\x04\xf0\x3f\x01\xc7\xe1\x4c\xc0\x43\x3d\x57\x3e\x4b\
+\xf9\x23\x15\x2c\x94\xd4\x79\xcb\xf8\x26\x3a\x45\x98\x32\xad\xaf\
+\xc7\x7d\x61\xb5\x12\x92\x8c\xf6\x57\x03\x82\x7d\x06\x78\xcf\xcd\
+\x2a\xb1\xb9\x19\x6e\x8b\x53\x8d\xf8\x32\x63\xa8\x96\x52\xb1\xc9\
+\x0a\xdb\xce\x7d\x71\x83\xf9\x9a\x61\xb0\x2d\xc5\x35\x15\x4d\x2c\
+\xee\x5b\x9f\x67\x29\x00\x1d\xc7\xba\x4f\xe3\x8c\x54\xef\x4a\x5a\
+\xad\xf7\x99\xa9\x44\xe6\x54\x95\xc7\xe5\x0f\x32\xad\xab\x49\x3c\
+\x00\x0f\xc7\x7c\x56\xa8\xda\x32\x95\xfb\x6e\x65\xc7\x55\x6a\x9c\
+\x6f\xee\xd8\xb0\xf4\x96\x9b\x6a\x64\x54\x82\x90\x54\x45\x3f\xa7\
+\x46\xbe\xc4\x8c\x82\xa0\x83\x4b\xb4\x16\x9d\x9d\x0c\x20\xb3\x73\
+\x72\x52\x06\x30\x97\x1b\x09\x50\x19\xe0\x64\x77\xab\x76\x25\x97\
+\xed\x70\xc0\x59\x4e\xe0\x3b\xd7\xa6\xc3\xca\x96\x2e\x9a\x94\xe3\
+\xb1\xe5\x25\x26\xa5\x64\xee\x40\x34\xc6\x9e\x66\x2b\xe8\x50\x40\
+\xef\xcd\x5a\x70\xa1\x25\x31\x52\x52\x00\x18\xa4\x30\x2d\x6d\xb4\
+\x54\xd9\x00\x28\x76\x38\xa9\x0d\xa4\xa4\xb4\xa6\x57\xf7\xbd\x05\
+\x6b\x9a\x8c\x17\x55\x15\x83\xbb\xb3\x1c\xed\xa9\x4e\x5a\x38\x3f\
+\x18\xa2\xbd\x86\x76\x6d\x49\xfd\xd3\xcd\x15\xcc\xaa\x9b\x91\xd1\
+\xa5\x2b\x22\x23\xd3\xf4\xa2\x7f\x4f\xa2\x30\xa0\x0a\xb0\xe6\x7d\
+\xff\x00\xac\x55\x47\xe4\x47\x5c\x69\x0b\x8c\xb3\x8c\x1e\x29\xc3\
+\xa7\x4e\xaa\x2e\x95\x84\xe8\xe5\x2a\xdf\x91\x9f\xf8\xc5\x53\xc6\
+\xa1\x84\xd4\xc8\xe2\x54\x70\x0a\xc1\xce\x12\x39\xf9\xae\x8d\x35\
+\x97\xc0\xe5\xdf\x34\x13\xe6\x86\xdd\x36\xf6\x50\xb6\x16\x7b\x1e\
+\x29\xc2\x18\x29\x7d\xc4\x92\x78\xf8\xa8\xfb\x0e\xa9\xa7\xbc\x40\
+\x08\x29\xe0\x8c\xf7\xa7\xa6\xde\x0e\x29\x0f\x24\xe4\x91\x83\xcd\
+\x34\xa1\x36\x61\x59\xb5\xa4\xf7\xf2\xfa\x53\x55\xc4\xe4\x21\x19\
+\xf2\x9a\x53\x6a\x7d\x0b\x82\xb6\xf3\xd8\x52\x39\x4f\x21\xc2\x87\
+\x10\x77\xa4\x28\x8c\x83\x9e\x41\xc7\xf0\x39\xac\x54\xe2\xe3\x36\
+\x6e\xab\x25\x28\x23\x09\x6b\x42\x23\xec\xf8\xf4\xa4\xf1\x51\xe2\
+\xad\x0d\xa9\x5b\x73\xdf\x8a\xc1\xc5\x87\x65\x7e\xd3\xee\x27\xde\
+\x86\xe4\x36\xbb\x80\x65\x97\x10\xa7\x50\x37\x29\xb0\xa1\xb8\x24\
+\x9e\x0e\x3d\xbe\x6b\x52\x56\x46\x56\xee\xc5\x8f\x34\xe4\x7f\x32\
+\x14\x14\x07\x7a\xdf\x15\xc0\xc3\x41\x6b\x18\x2a\x3d\xab\x25\xb6\
+\xb4\xac\x2c\x1c\xa4\x8e\x45\x78\x52\x1d\x58\xe3\x18\xa4\x39\x66\
+\x5a\x8e\x4b\x2b\xd0\x1f\x2b\x0b\x49\x6c\x67\x75\x6c\xfb\x32\x0a\
+\x14\xa5\x2c\xee\xaf\x51\xb8\x37\xb0\x0e\x47\x6c\xd6\x4b\x6d\x69\
+\x8d\x84\x9d\xca\x35\x46\xf9\x0c\x4b\x98\x91\x59\x1b\x14\x01\xe0\
+\xd2\xbc\xa5\x6d\x05\x03\x8c\x52\x28\x72\xe2\xc9\x6d\x69\x61\xf6\
+\xa4\x6d\x25\x0a\x2d\xac\x28\x02\x3b\x8c\x8f\x5a\x51\x19\x0f\x79\
+\x80\x42\xb6\xfa\x66\xa6\x5a\xa2\xb1\x1c\xa3\x9d\xc1\x1f\x5a\xd9\
+\x3d\x43\xca\x3b\xd6\xa8\xe1\x48\xda\x14\x9c\x7a\xd6\xa9\x6f\x85\
+\x38\x40\x3f\x15\x95\x46\xf2\x35\xb9\x5a\x06\xb4\x11\x95\x2b\xd2\
+\xb4\xe7\x72\xca\x88\xaf\x1d\x5e\x06\xc4\xe3\xe6\xb7\xc4\x60\xac\
+\xf3\xf7\x45\x3f\x48\xab\xb3\x3e\xb2\x76\x46\xfb\x7b\x3d\xdc\x57\
+\xe1\x5b\xdd\x56\xe5\x63\xd0\x77\xaf\x14\xb0\x06\xc4\x70\x2b\xc4\
+\x83\x90\x9e\xe6\xb3\xbb\xb7\x76\x69\x4a\xca\xc8\xd8\x95\x06\x9a\
+\x2a\x3d\xe9\x08\x4f\x8e\xb2\xb5\x76\xad\xb3\x49\x2b\x0d\x03\xc5\
+\x68\x79\x41\x86\x4f\x22\xad\x05\x65\x7e\x6c\xac\x9d\xdd\xb9\x21\
+\xae\xf1\x31\xbb\x78\x2e\x29\x61\x29\x1e\xa4\xd5\x6d\xaa\xba\xb3\
+\xa6\xa1\xb4\xe2\x5c\xb9\xb3\xe2\x20\xe0\xb6\x16\x9d\xd9\xfa\x66\
+\x9b\x3a\xf7\x7f\xbc\x1b\x78\xb6\x59\x1f\x87\x1a\x43\xc7\x2b\x91\
+\x25\xcd\xa1\xa4\xfb\x81\xea\x4f\x35\xcc\xea\xd3\x2f\xb4\xa9\x92\
+\xef\x1a\xa6\x3c\xd0\x7c\xc6\x34\x62\xa2\x1d\x50\x3c\x0c\x80\x06\
+\x73\x58\xf1\x58\xfe\x1c\x94\x56\xe4\x50\xc3\x2a\xd7\x72\x95\x91\
+\x33\xea\x8f\x56\x15\x70\x6d\xd8\xd6\x44\x4b\xda\x78\x5c\x8d\xc1\
+\x00\x7c\x05\x67\x8a\xa1\x2e\xd3\x9f\x78\xe5\xf7\xc3\x3b\x95\x93\
+\x80\x4e\x13\x8e\xfc\xf7\x27\xde\xac\x8b\x9c\x3b\x2b\x70\xb6\x5c\
+\x25\x22\x12\x10\x90\x7c\x24\xba\x92\xa2\x48\x04\x1c\x9f\xf0\x15\
+\x06\xbc\x4f\xd3\x0c\x33\x25\x11\xd8\x54\xd7\xd6\x02\x5b\x75\x6a\
+\x52\xd4\x9e\x73\x9c\x9c\x01\xf9\x1a\xcd\x1a\xb3\xae\xf3\x49\x1d\
+\x5a\x31\xa1\x41\x64\xa7\x7b\xbd\xd9\x11\x52\x14\xb6\x8b\xab\x25\
+\x3f\xd9\xcf\x75\x13\xed\x58\x0c\x11\x9c\x7e\xed\x6d\x93\x25\xc9\
+\x0e\xf8\x8b\x3b\x71\x9d\xa9\x4f\x61\x5a\x52\xa2\x84\x28\xfb\x8a\
+\xd2\xaf\x6d\x4c\xf3\xb5\xf4\x14\xb0\x7c\x29\x4c\x3e\x47\xef\x05\
+\xe3\xf1\xab\xbf\xa6\x12\x57\x67\xbc\xa2\xce\x40\xf0\x5d\x74\x3f\
+\x1d\x59\xf2\xe7\x82\xa4\xfd\x78\xcf\xfe\x95\x56\xea\xeb\x6c\x2b\
+\x65\xc5\x9b\x5a\x56\xa0\xf2\x2d\xec\x97\x54\xa5\x64\x87\x8a\x02\
+\x94\x9e\x4f\x03\x9e\xde\x98\xab\x45\x88\x6a\xb8\xe8\x7b\x55\xd5\
+\xb5\x94\x3b\xe1\xb4\x54\xe2\x40\xdc\x95\xa7\x8c\xe3\xe7\x18\xfc\
+\x6b\x99\x8f\x95\xe1\x17\xc9\xfa\x47\x6f\xa2\x62\x9c\xa7\x0e\x7e\
+\xae\x5f\x76\x7b\xcb\x29\x75\xe5\xad\xd0\xb6\xf8\x4a\x41\xe3\x9d\
+\xde\xde\xd9\xf5\xa9\x23\x52\xdb\x56\x77\x27\x6a\x0a\x55\xb4\x13\
+\xdf\x68\xc1\xdc\x7e\x3d\x2b\x9e\xb4\x96\xa3\x75\x49\x5c\x49\x0a\
+\xf0\x25\x05\xed\x78\x2b\xb6\x33\x9c\x83\xed\x90\x4d\x5b\xba\x72\
+\xfa\xc4\x88\xcf\xc4\x5a\xd2\xe2\x8e\x49\x4e\x41\x51\x48\x27\x27\
+\xf1\xe0\xf1\x5c\xd8\xcf\x2b\xca\xcd\xb5\xb0\xed\x2b\xa2\x62\xb7\
+\x1a\xfb\x39\x5b\xdb\x7c\x40\x37\x00\xa3\x95\x03\xeb\xf4\xe3\xf9\
+\xd6\x36\x1b\x92\x52\x1d\x42\x1d\x59\x64\xac\xe7\x27\x71\x38\x38\
+\x18\x3e\x99\xf4\xa6\xb6\x6e\x2d\x29\x85\x48\x3e\x11\x64\xa0\xab\
+\x07\x2a\xe3\xe3\xdf\xe9\xf1\x4d\x0f\xce\x62\x25\xe2\x38\x6a\x3e\
+\x5e\x71\x7b\x7c\x24\xaf\x0a\x2b\xc6\x46\xef\x7c\x0c\x7e\x75\x6c\
+\xf6\x69\xa3\x26\x4b\xe8\xcb\x36\x43\xcb\x4b\xc8\x70\xe1\xa6\x90\
+\x00\x69\xa0\xac\x92\x9f\x53\xc7\xcf\x14\xe0\xdc\x9d\xea\x05\x21\
+\x38\x3d\xf1\xe9\xf5\xa8\x8d\x9e\xef\xe2\xba\x8d\xd2\x9a\x4e\x5b\
+\xcb\x98\xe5\x48\x03\xd7\xf0\x3c\xd3\xdb\x6f\x17\x23\x78\xc8\x2a\
+\x79\x0e\x04\x84\x24\x0e\xe0\x1c\x67\x3f\x3e\xd5\xae\x3a\xea\x8c\
+\xed\x5b\x46\x2c\x75\xc7\x14\x14\x12\xa4\xab\x1c\x2b\x3d\xc5\x68\
+\x62\x30\x74\x82\xa7\x95\x8e\x48\xcf\x35\xb5\x97\xd1\xb1\x0e\xba\
+\xb4\xaf\x6a\xca\x4a\x47\x74\x91\xc7\x3e\xf5\xbe\x2a\xda\x01\x68\
+\x20\xb9\x85\x67\xcc\x30\x47\xb5\x3e\x04\xa9\xe9\xa1\x8a\x62\x6f\
+\xf3\xa5\x3b\x8a\xb3\xf8\xe3\xf9\x1a\x4d\x22\x2a\x9d\x5a\x90\x52\
+\x84\xa7\x1b\xb9\x39\x27\x07\x9a\x5b\x1d\xc0\x42\x96\x96\xd4\x0e\
+\x77\x04\x13\xc9\x07\xbd\x27\x7d\x63\x6b\x6a\x0a\x04\x94\xfa\x1e\
+\x70\x7b\x8f\xaf\xc5\x59\xd8\x9c\xcd\x31\xb3\x86\xde\x70\x24\xfe\
+\xcd\x05\x27\x70\x3c\x12\x78\xff\x00\x43\xe6\xb4\xc8\xb9\x25\xa6\
+\x1c\x7d\x4b\x46\x5b\xc9\x20\x1f\x51\xee\x2b\x75\xd9\xf4\xc6\x61\
+\xd9\x2d\xc8\x4a\x08\xe4\x93\xdf\xd3\xd3\xe9\x51\x6b\xbc\xef\x05\
+\x6d\xa9\x4d\x2d\x95\x2b\x97\xc1\x19\x1c\xa7\x21\x43\xdf\xb7\xf1\
+\xac\x75\x5e\x51\xab\xac\x37\x6a\xeb\xab\xbf\xa9\xd4\xb6\xd5\x97\
+\x54\xe6\xd6\x4f\x8b\x9c\x05\x0e\xff\x00\xcf\xf9\xd6\xb6\x66\xa5\
+\xb8\x3e\x47\x47\x8a\x94\x02\xe0\x20\x60\x64\x11\xe9\xe8\x78\xc5\
+\x43\x2f\x77\x17\x2e\x37\x56\x19\x8e\x84\xa9\xb6\x4e\xf5\xad\x18\
+\xfb\xf9\x00\xfe\x1c\x9f\xc6\x91\xeb\x9d\x4c\xbb\x44\x05\x33\x0f\
+\x2e\x4f\x53\x48\x43\x0c\xb6\x39\x56\x0e\xe2\x15\xec\x30\x39\x3e\
+\x95\xcf\x93\x6e\x5a\x1b\x23\x4b\x44\x8a\xd3\xf4\x8b\xd5\x81\x71\
+\xe3\xe9\xb8\xc9\x42\x5c\x7d\x09\x76\x56\xd5\x79\x91\x85\x1c\x24\
+\xfe\x40\xd5\x2e\xc7\xdc\xf2\x9e\x41\xc9\xac\xae\xd3\xe4\xdd\x2e\
+\x92\x2e\x53\x56\x1c\x7e\x43\x85\x6b\x50\xed\x9f\x61\xf0\x2b\xd4\
+\x36\xb4\x46\x53\xdb\x78\x48\x1f\xc7\xff\x00\x4a\xf4\x58\x7a\x0a\
+\x85\x25\x1e\x7f\x53\x83\x88\xaf\xc7\xaa\xe5\xc9\x6d\xe0\x3d\xda\
+\x56\xa1\x66\x79\xa6\xc9\x3b\xdc\x6d\x48\x29\xee\x9d\xa4\xf2\x3e\
+\x40\x3f\xc6\xa7\x5a\x1f\x54\x45\xfb\x53\x28\x9c\xff\x00\xd9\xa4\
+\x17\x3f\x79\x3f\x7f\xb6\x09\x3e\x87\x15\x5b\x45\x56\xd8\xd9\x6f\
+\x25\x25\x59\x71\x3f\xd9\x48\xe7\x23\xf9\x56\x6b\x2a\xb8\x45\x61\
+\x29\x70\x05\x85\x1f\xeb\x09\xdc\x9e\xdf\xbd\xed\xf5\xaa\xba\x69\
+\x4f\x30\xca\x96\xad\x47\x86\xfd\x7a\xb9\xdb\xfa\x4a\xec\xd3\x71\
+\x98\x74\x10\xa4\x2d\x20\x85\x24\xe4\x1a\x91\x47\xd6\xf1\x5c\xbf\
+\xb1\x60\xb6\xbc\x99\x37\x07\x12\x1c\x5b\x2d\x9d\xde\x0b\x7e\xab\
+\x59\x1f\x77\xe0\x1e\x49\x22\xb8\xbf\x4e\xe9\xad\x63\x2c\x22\x09\
+\xbf\xa2\x04\x65\x01\x95\xae\x5f\x00\x0f\x4c\x24\x93\x9f\x8a\xe9\
+\xae\x84\x58\x2c\xfa\x56\xd8\x61\xdb\xdd\x12\x25\xbe\x77\x4b\x98\
+\xaf\xbc\xf2\xbd\x07\xc2\x47\xb5\x3d\x63\xea\x4d\xa8\x52\x77\xf0\
+\x38\x18\x9c\x1a\xc3\xdf\x3b\xd7\xb0\xbf\x5a\x69\xa9\x51\x52\xb6\
+\xd4\x03\x80\x73\x9e\xe6\x92\x9f\x15\x87\x72\xa0\x52\x53\xdf\xe6\
+\xb7\x5a\xc2\x56\xd8\x52\x09\xc8\x02\x97\xb8\x12\xa4\x6d\x79\x00\
+\xf1\xc1\xae\xec\x65\x28\xab\x48\xcb\x93\x32\xb9\xa9\x89\x88\x51\
+\x05\x20\xe4\xf1\xc5\x14\xb2\xc9\x6a\x6d\xb7\x0c\x85\x64\x83\xd8\
+\x1a\x2b\x35\x5a\xd0\x8c\xac\x91\xaa\x95\x19\xca\x37\x6c\x83\x68\
+\x26\xf6\x69\x78\x6d\x39\xf7\x72\xe1\xe7\xd4\x78\x8a\xa7\x92\x55\
+\x1d\x59\x46\x14\x8f\x50\x07\x06\xb5\x68\xd8\x45\xee\x9f\x5b\x24\
+\x23\xcc\xb4\x87\x09\x03\xd7\xf6\x8a\xa5\x29\x56\xe4\xf9\xbb\x8e\
+\xfc\xd6\xca\x53\x53\x89\x86\x50\x70\x48\x41\x32\x14\x79\x61\x4e\
+\x30\x42\x17\x83\x94\xd3\x4c\x66\xe7\x37\x2c\x44\x43\x6a\x3b\xbd\
+\xbb\x54\x89\x4c\x24\x80\xb4\xf9\x71\xeb\x4e\x9a\x5e\x08\x5b\x85\
+\xf7\x46\xec\x1c\x73\x56\xa9\x35\x08\xb9\x30\x84\x1c\xe4\xa2\x8a\
+\xab\xa3\x76\x3b\x64\xed\x57\xaa\x97\x72\xb2\xbf\x2e\xe0\xc6\xa5\
+\x92\x23\xdc\x17\x1f\xc4\x6a\x39\x43\x6d\xad\x20\xab\x23\x18\x56\
+\x48\x1e\xea\x1e\xf5\x96\x96\xd4\x57\x4b\x26\x89\xb4\xb5\x6b\x83\
+\x65\x44\xcb\x86\xb5\x91\x65\x79\x42\x3a\xd2\xc9\xdc\x5e\xcb\xdb\
+\x37\x95\x67\x7a\x52\xa2\x9d\xdc\x80\x52\x08\xce\x45\xad\xa1\xf4\
+\xbf\xf4\x65\x7a\x81\x62\x77\xda\xbf\x5c\x5e\x5e\xba\x01\xe0\xec\
+\xf0\x7c\x44\xa1\x3e\x1f\x73\xbb\x1b\x3e\xf7\x19\xcf\x6a\x8e\xc6\
+\xe9\x87\x83\x6e\xb5\xc4\x37\xcc\xfd\x83\x55\x2f\x50\xee\xfb\x27\
+\xf5\x9b\x8b\x87\xc1\xfb\xfc\x7f\x59\xf7\xf9\xed\xf7\x79\xae\x44\
+\xaa\x39\x3b\x9b\x23\x86\x94\x22\xac\xb5\xd7\xf9\x43\x05\xd7\x5b\
+\xdd\xad\x2c\xea\xcb\x54\xe8\xb6\xc9\xd7\x8b\x4d\xca\x0c\x08\x2f\
+\x34\xca\xd9\x65\xf3\x31\x28\x2d\x95\xa7\x72\x88\xd8\x14\x73\x85\
+\x73\x8f\x4c\xe6\xbc\xd1\xd6\xcb\xa4\x2e\xbb\xea\x16\x2e\x72\x61\
+\xcc\x79\x36\x28\xaa\x4b\xb1\xd8\x53\x29\x52\x0b\xae\x77\x49\x5a\
+\xb0\x73\x91\xf7\x8f\xa7\xd2\xa4\xb7\xbe\x99\x31\x76\x9f\xab\x65\
+\x3d\x78\x75\xa5\xdf\xa4\x41\x95\x1d\x4d\x32\x02\xa0\xbd\x15\x09\
+\x4a\x14\x09\x24\x2f\x25\x20\xe0\x81\xc1\x23\xe6\x9c\x74\xbe\x8f\
+\x9f\x6f\xd6\x73\xf5\x5d\xda\xfa\x8b\x94\xe9\xb0\x9b\x86\xb4\x35\
+\x0f\xec\xed\x21\x2d\xa8\xa9\x25\x23\x7a\x8f\xa9\xce\x49\xe4\xfa\
+\x0e\x28\x55\x64\xb9\x93\xec\xf2\x73\x4d\xae\x7e\x5a\xfe\x08\xdd\
+\xda\xf5\xa8\xe7\xeb\xf9\x9a\x5f\x4e\x3d\x6f\x88\x6d\xd0\x1b\x97\
+\x21\xf9\xac\x2d\xd0\xb7\x1c\x52\x82\x1b\x09\x4a\xd3\x84\xe1\x19\
+\x2a\xc9\x3c\xe0\x0f\x5a\x43\xa7\xb5\xf4\xeb\xdc\xfe\x9f\x29\xa8\
+\x8c\x47\x63\x50\xc7\xb8\x99\xcd\x9c\xa9\x4d\xbb\x1b\x6a\x70\x85\
+\x7b\x6f\xdd\xe8\x72\x31\x52\xdd\x4f\xa2\xe6\x3f\xa9\xdf\xd4\xfa\
+\x7a\xf6\x2d\x57\x09\x10\x93\x0e\x50\x76\x20\x7d\xa7\x10\x95\x15\
+\x21\x61\x3b\x92\x43\x89\xdc\x70\x72\x46\x0f\x20\xd3\x2b\x1d\x38\
+\x6e\x2c\x2d\x2a\xd5\x82\xee\xa8\x73\x34\xc8\x79\x0c\x3d\x26\x3f\
+\xda\x12\xfa\x5f\x00\x3d\xe2\x24\x29\x1c\xa8\x8d\xd9\x04\x60\xfb\
+\xf6\xa6\xf1\x1c\x95\xc5\xca\x95\x48\xc9\xaf\x5b\xaf\xa5\xc8\x6e\
+\xa8\xd4\xfa\xa2\xed\x66\x65\x51\xae\x4c\x5b\x94\xcf\x50\xc5\x94\
+\x16\x98\x3e\x66\x51\x20\x06\xf7\x79\x86\x7b\x79\x87\x65\x03\x8e\
+\x2a\x7b\xd4\x46\xee\xd1\xba\x45\xa8\xd6\x8b\x8a\x3f\x58\x31\x66\
+\x90\xe2\xe5\x21\x9d\xa0\x94\xb4\xa2\xa2\x94\xee\xf2\x92\x01\x00\
+\xe4\xe0\x90\x79\xc6\x29\xad\x7d\x30\x5f\xea\x15\x5a\xe3\xea\x07\
+\x0c\xc1\xa8\x93\xa8\x5b\x96\xf4\x40\xa0\x24\x85\x25\x44\x29\x01\
+\x43\x72\x4a\x82\x8f\x05\x3c\x10\x3d\x32\x67\x97\xeb\x13\xf7\x9d\
+\x0d\x73\xd3\xb2\x66\xb6\x89\x17\x1b\x7b\xd0\xdc\x94\x86\x30\x94\
+\xa9\xc6\xca\x0a\xc3\x65\x59\xc0\xce\x76\xee\xfc\x6a\xae\x6e\x2b\
+\x5e\x65\xa9\xd1\x9c\xaf\x7e\xc2\xb3\xe9\xfb\x97\x58\x88\xd3\x7a\
+\x32\xc1\xfa\x8a\x24\xb7\x74\xe3\x57\x89\x93\x5c\xb7\x1d\xbe\x1a\
+\xb6\xb6\xd2\x03\x48\x5a\x77\x2b\x20\xee\x59\x57\x61\xdb\x26\x94\
+\xb7\xd4\x7d\x49\x70\xb5\xe9\x96\x6d\x70\x6d\x71\xaf\x17\x4b\xa4\
+\xcb\x44\xb0\xf8\x5a\xd8\x65\xe6\x37\x65\xc4\xe0\x85\x29\x38\x46\
+\xe0\x9c\x8c\xe7\x19\x1d\xea\x4f\xfd\x03\x95\x0e\x55\x92\xe7\x64\
+\xbe\x88\x57\x5b\x6d\x9d\x36\x87\x1e\x7a\x1f\x8c\xcc\x96\x06\xd2\
+\x0a\x9b\xde\x92\x14\x14\x9d\xc0\x85\x71\x92\x0e\x45\x68\xb7\xf4\
+\xce\x2c\x01\xa5\x04\x7b\xbb\xaa\x36\x29\xf2\x27\xbe\xe3\xcc\x85\
+\x2e\x6b\xaf\x25\x7b\xc9\x20\x80\x9e\x56\x4f\x63\xc0\x03\xe6\x92\
+\xe4\xde\xe3\x23\x4a\xa4\x74\x5e\xb6\xfc\x93\x98\x48\x7d\x30\x98\
+\x44\xc5\xb6\xec\x84\xb6\x90\xf2\xdb\x46\xd4\xa9\x78\xf3\x10\x32\
+\x70\x09\xcf\x19\x35\xa6\x74\x20\xe2\x0a\x9b\xe1\x58\xef\x4b\x7e\
+\x86\x81\x44\x66\xe2\xee\x8d\x92\x82\x92\xb3\x18\x63\x47\xda\x49\
+\x79\x5c\x8f\x4a\x58\x09\x23\x68\x18\x4d\x6c\x94\xd8\x4b\xc1\x5e\
+\xf5\xe0\xad\x2e\x79\xb5\x33\x46\x19\x74\x3d\x4a\x76\x8a\xda\xc8\
+\xc6\x56\xae\xd5\xad\x09\x2b\x50\x03\xd2\x95\x3a\x90\x19\x29\x14\
+\x99\x3e\x43\xa2\xb9\x8d\xb3\xb0\xb7\x0a\x93\xcf\x15\x1c\xd4\x72\
+\xdd\x8d\x01\xe2\x81\xb9\x7b\x4e\xd1\xee\x6a\x40\xa5\x14\x93\x8f\
+\x4a\x8f\xea\x16\x17\x25\xa5\x0f\x53\x5a\x32\xc9\xc6\xd1\x32\xd4\
+\x77\xd5\x1f\x3d\xb5\xfd\xcf\x5d\xeb\xad\x61\x24\x39\x0e\x5c\x87\
+\x91\x93\xf6\x76\x92\xa0\x86\x12\x0e\x30\x40\xf6\x3c\x12\x7d\x69\
+\xb2\x2e\x9d\xd5\x16\x89\x6c\xbb\x71\xb6\x3e\xd3\x41\x61\x38\xdd\
+\xc1\x27\xf1\xae\x90\xeb\x0c\x46\xb4\xe2\x5f\xbc\xc7\x6d\xb6\x64\
+\x15\x7e\xd1\x40\x04\x97\x72\x47\x94\x9f\x73\x54\xcd\xf2\xfa\x8b\
+\xf6\x9d\x79\xf8\x4a\x52\x64\x32\xe2\x56\xa6\xd6\xac\x2d\x24\x1f\
+\x6f\x51\xf4\xae\x35\x49\xce\xed\x4d\x58\xe8\x61\x6a\xb7\x97\x24\
+\x74\xd8\x6f\xd5\xf6\x69\x6e\x86\xa3\xb7\x66\x7c\xc9\x77\x21\x00\
+\x27\x2b\x51\x03\x24\x77\xf4\x19\xa8\x33\xda\x6a\xf3\xe2\x61\x16\
+\xa7\xce\x4e\xd0\x0f\x07\x3c\x9f\x7f\x83\x57\x25\xd5\x71\xcb\x08\
+\x96\xec\xc6\x5a\x69\x61\x2f\x36\xe2\xdd\x09\xda\x48\xce\x46\x4f\
+\xb1\xaa\xcf\x50\x6a\x75\x15\xed\xb6\x05\x25\x49\xdd\xbd\xee\xe3\
+\x24\x11\x91\xf8\x13\x8f\xad\x36\x8c\x1a\xa7\x9a\xfb\xaf\x32\xcb\
+\x13\x2a\xcd\x45\xc7\x62\x2b\x1d\x82\xe4\xb6\x62\xaf\x09\x53\x8e\
+\x25\x18\xcf\x6c\x9c\x72\x6b\xc9\x51\x9c\x6a\x43\x8c\xe3\x1b\x16\
+\x5b\x51\xfa\x1c\x1a\x5d\xa7\x19\x13\x2f\x91\xc3\x88\x52\x9b\x6c\
+\x97\x5d\x24\x9c\xe0\x73\xc9\xf9\x38\x1f\x8d\x6f\xbd\x36\x7c\x57\
+\x24\x38\x70\x5c\x3c\x24\x7a\xe3\xd6\x9b\x14\xdb\x7d\xc1\x27\x1b\
+\xd8\xd1\x79\x94\xe5\xde\xee\xf4\xa7\x37\x3b\x35\xd7\x50\x80\xd3\
+\x0d\x65\x2a\x21\x20\x71\xf9\x70\x3d\x6b\xa1\x7a\x0f\x0d\x33\xfa\
+\x7c\xea\x5b\x6b\xc5\xd8\xa2\x36\x77\x25\xbc\xe4\x1e\x3f\x78\x12\
+\x7f\x0c\x7b\x57\x3e\xdb\x2e\x26\xdd\x35\xb9\x6d\x36\x91\x22\x30\
+\x43\xad\xa8\x7e\xea\x92\xa0\xa1\xfc\x06\x0f\xd6\xba\x17\xf4\x6a\
+\x92\xe3\xa8\xbb\xac\xb5\xe0\x66\x7f\x8c\x1b\x40\xc6\xc4\xb8\x37\
+\x0e\x3d\xbe\x7b\x57\x3f\x1f\xd6\xa7\x67\xca\xdf\x63\xa7\xd1\xed\
+\xc6\x6e\x48\x64\xd7\xda\x6a\x4c\x29\x49\x7a\x3a\xd1\x94\x28\x2d\
+\xa7\x14\x33\x90\x32\x70\x7d\xe9\xab\x4f\xea\x29\x2c\xf8\x5e\x02\
+\x56\x42\x4a\x81\x69\x4b\xda\x52\xac\x85\x10\x93\xdf\x07\x9f\xc3\
+\x8a\xe8\xad\x51\x64\x8b\x26\x23\x8f\xa5\x96\xdf\x52\x0a\x94\xe3\
+\x09\x1e\x60\x0f\xef\xa7\xfc\x40\xf6\xe2\xa8\x6d\x71\xa2\x57\x68\
+\x96\x65\xb0\xe8\x2a\x4f\x29\x52\x46\x4a\xd2\x71\xc0\xe7\xdf\xf8\
+\xd7\x26\x2a\xdd\x59\x7c\x0f\x41\x0a\xdc\x4e\xb2\xdf\x99\x37\xb4\
+\x6b\x95\x18\xf1\xbc\x44\xab\x85\x79\x51\x8c\xf6\x3d\xf3\xe9\xd8\
+\x60\x1e\x6a\x4d\xf6\xe6\xe4\x23\x28\x5b\x7b\xd9\xcb\x89\xda\xb3\
+\x95\x1e\x0a\x88\x3d\xf3\xe9\xcf\x07\x35\x45\xdb\x11\x20\x90\x84\
+\x2c\xa1\xe2\x00\x2a\x74\x14\xe0\x1e\x09\xc7\xe1\x52\x07\x5d\x99\
+\x0d\xf8\xbb\x9b\x12\x1b\x64\xec\x58\x2b\xf3\x2c\x77\xf4\xcf\xcd\
+\x2e\x49\xa7\x64\xc9\x96\x1e\x13\xd5\x68\x58\xcc\x5d\x1a\x64\xb8\
+\x43\x8b\x69\xc9\x18\x29\x52\x80\x1e\x1a\x14\x48\xc7\xc9\x24\x91\
+\xf9\x54\xa6\xd5\xac\x5a\x8c\xda\x1d\x79\xd3\x15\xc4\xe5\x05\xa7\
+\x10\x40\x47\xa7\x97\x9f\x31\xc2\x48\x38\xf5\xcd\x52\xd3\xae\x4a\
+\x5a\x54\x63\x89\x0c\xa9\x68\x40\x6e\x3a\x8e\xd5\x67\x83\x92\xa3\
+\xfb\xbd\xb1\xeb\x5b\x67\x5c\x51\x28\xc5\x6a\x6a\x32\xe4\x70\x54\
+\xd2\x37\xa9\x60\x7a\x11\x8c\xf3\xdf\x9f\xad\x5a\x15\x25\x11\x33\
+\xc2\x46\x45\xff\x00\x6d\xd5\x70\xd2\x43\x89\x7e\x13\x8d\xb8\x42\
+\x96\x19\x70\x2b\x7a\x49\xc0\x27\xd8\xf7\xe7\xe2\xa4\x08\xba\x25\
+\x4e\x36\x63\xbe\xd3\xad\x28\x00\xbc\xab\x9e\xd9\x07\x3e\xbc\x1e\
+\x47\xc5\x72\xe3\xd6\xc8\xd2\xda\x53\xb1\x24\x4f\x4b\xc5\x64\x2d\
+\xb2\x36\xec\x09\xe0\xa9\x40\x1c\x00\x33\x81\x8f\x8a\x77\xb6\xc1\
+\xbe\x90\xd3\xd1\xb5\x1c\xd2\xca\x52\xa0\x8c\x34\x55\xb4\xa5\x38\
+\x4e\x01\xf9\xfe\x74\xe8\xe2\xb2\xab\x31\x32\xe8\xf4\xf5\x4c\xe9\
+\x28\xf7\x58\xaa\x52\x92\x14\xe2\xd0\xda\x4a\x4a\x89\x00\x13\x9e\
+\xff\x00\xe1\x5a\xdf\xbd\x41\x8a\xa4\x93\x21\xa0\x51\xf7\xdd\x1c\
+\x63\x23\x03\xe0\xf2\x45\x73\xab\x82\xf8\xd3\x0b\x73\xfa\x45\x21\
+\x87\x56\x43\xcd\xb4\xf6\x08\x07\xb7\x38\xf8\x26\x9a\x2e\x97\x3d\
+\x45\x21\xf6\x61\xa2\x42\x12\x8c\x8f\x0d\xe5\x76\x51\xc1\x21\x58\
+\xec\x14\x71\x9c\x55\x96\x31\xb2\x1f\x47\x77\x96\xd6\xaf\xd6\xb1\
+\xe6\xbf\x25\xa8\xcf\x0f\xf6\x56\x9b\x59\xdc\x78\xde\x4a\xbb\x9f\
+\x73\xb4\xfe\x75\x5e\xea\x7d\x69\x2e\xe5\x30\xc1\xb7\x28\xbe\x96\
+\xf2\x90\xa3\x9c\x01\xc9\x00\xfb\x60\x54\x30\x45\xbb\xcb\xb9\xa6\
+\x2a\xa5\x89\x13\x23\xb1\x92\xb6\xd5\x93\xb9\x47\xd4\x01\x8e\x32\
+\xaf\xce\x9c\x2d\xf6\x77\x23\x3c\xa9\x2e\xc9\x58\x65\xbc\x92\x90\
+\x08\x71\x47\x27\x72\x56\x47\xd4\xd2\x67\x55\x6e\xd9\xa6\x9e\x15\
+\x2e\x42\xb8\x32\x4c\x56\x1a\x4b\x1b\x5d\x90\x37\x07\x49\x18\xc7\
+\x97\x95\x13\xd8\x73\xc6\x7d\x78\xe2\xbc\x76\xd6\x59\xb5\xc9\xbb\
+\x5c\x14\xb7\x27\x86\x1c\x0e\x29\x49\xc2\x41\x50\xc6\x11\xfd\xd0\
+\x14\x7e\xb9\xcf\x14\xe9\x6d\xb6\x26\x42\xb6\x32\xd8\x6e\x18\xfb\
+\xe9\x56\x78\x57\x73\xeb\x82\x72\x7b\x7c\xd2\xfd\x7c\xc3\xcd\xe9\
+\x39\xeb\x48\x51\x1f\x65\x51\x09\x3d\xd2\x00\x27\x15\x85\xd4\xbc\
+\x92\x5c\xcd\x71\xb4\x59\xca\x57\x28\xc2\x3d\xc1\x6c\xa9\x25\x08\
+\x49\xdd\x8f\x5c\x11\x9f\xe5\x4e\x5a\x85\x22\x38\x53\x0d\xa9\x1e\
+\x19\x0d\x29\x01\xb3\x91\x80\xda\x7d\x7e\x09\x57\xe3\x9a\x75\xd7\
+\x76\x97\x94\xd4\x0b\xd3\x0d\x3c\xa8\xd7\x16\xff\x00\xd9\xd6\xa3\
+\x92\xa2\x00\xc8\x23\xd8\x64\x01\xf4\xa6\x3f\x1c\xc9\xb9\xb4\xa5\
+\x90\x12\x97\x39\x18\xfb\xa9\xe1\x3f\xc8\x7f\x1a\xf5\x94\xaa\xaa\
+\x90\x52\x3c\x7d\x5a\x5c\x3a\x92\x87\x6b\xd3\xc1\x9e\xb4\x96\x9a\
+\x69\x98\x9b\x86\xf7\x88\x52\xc8\x3f\x77\x9e\x07\xe3\xdf\xf2\xa7\
+\x54\x58\xe4\x7d\x91\x99\x68\x43\xfb\x06\xe2\xe0\x49\x07\x19\xc1\
+\x03\xe0\xf6\xf8\xac\x64\x5a\x24\x38\x13\x28\x20\x06\x5d\xfd\xb3\
+\x8b\x04\x05\x47\x4e\x70\x33\xed\xc0\xfe\x55\x63\x40\xb7\xc9\x94\
+\xc4\x59\x6c\xbe\xe3\x3b\x19\x52\x92\x3b\xa5\x44\x0c\x10\xaf\x62\
+\x40\x07\x3d\xb9\xac\xb8\x8c\x46\x44\x9c\x4d\xf8\x4c\x2a\x93\x6a\
+\xa2\xdb\x62\x2f\xa3\x58\x9a\x99\xc0\xfe\xaf\x6a\x68\x50\xe1\x52\
+\xde\xe1\x1c\xf7\x1b\x54\x39\xfc\xeb\xa8\x7a\x52\xcb\xcf\x36\x95\
+\x3a\xda\x42\xc6\x32\x12\x30\x07\xd3\xe2\xa9\x58\xaf\x3a\x99\x68\
+\x4c\x68\xca\x8c\x87\x0e\xe5\xa5\xb7\x02\xd2\xa3\xea\x7d\x2b\xa1\
+\x3a\x3e\x85\x38\xdb\x41\x28\xca\x4f\x73\x8a\xdf\xd1\x0b\x8b\x2e\
+\x26\xc7\x9f\xe9\x97\xfb\xd9\x2d\xb1\x6b\xd8\x42\xb6\x24\x67\x18\
+\xa7\x83\x83\x84\xd2\x66\xa0\xa9\xa4\x78\x8c\x8f\x4e\xd5\xb0\x3b\
+\x95\x03\x8e\x41\x19\xae\xd4\xda\x9b\xba\x39\xb1\x4e\x0a\xcc\x90\
+\xb0\x90\x96\x52\x07\xb5\x14\x32\xa0\xa6\x52\xae\xdc\x51\x5c\xb7\
+\xb9\xd4\x5b\x10\x8e\x95\x5d\xa0\xb9\xa2\xad\xd1\x0b\x98\x5a\x43\
+\x80\x82\x7f\xe3\x15\x4e\x17\xa8\x06\x3b\xa5\xf6\x47\x90\xf7\xc5\
+\x57\x9d\x2a\xb7\x3f\x2a\xcf\x6f\x59\x2a\x42\x32\xbc\x1c\xff\x00\
+\x7d\x55\x72\xa6\x3a\x4c\x50\xd2\xc8\x56\x05\x6f\x93\x54\x1a\x6b\
+\x99\xcd\xa2\x9e\x22\x9d\x9f\x22\x18\x95\x6e\x41\x23\x3f\x41\xe9\
+\x52\x6d\x3a\x13\xf6\x00\x78\xfa\xe2\x9a\x2e\xf6\xb7\x23\xac\xba\
+\xc8\xca\x09\xe4\x0f\x4a\x51\xa6\x66\x24\x66\x3a\xd4\x02\xb3\xc0\
+\x34\xca\xed\x54\xa5\x78\x95\xa0\x9d\x3a\xb6\x91\x9c\xad\x5b\xa7\
+\xda\xb3\x37\x75\x6e\xeb\x0d\xc8\x4e\x3b\xe0\x21\xe4\xb8\x36\x29\
+\xcd\xfe\x1e\xc0\x7d\xf7\x8d\xb8\xf7\xa6\x87\xb5\xa5\xb3\xf5\xc2\
+\x6d\x2a\xbd\x5b\x9b\xb8\xa8\x80\x98\x8a\x92\x80\xe9\x27\xb0\xdb\
+\x9c\xe4\xf7\xc5\x54\xe2\x2b\xad\xf5\x81\xfd\x04\x50\xa1\x06\x25\
+\xf5\xcd\x48\x36\x8e\x03\x2a\x6c\x29\x09\x1e\x98\x12\x1c\x27\xfe\
+\xaf\xd2\x99\xe7\x04\x27\xa6\xd7\xdd\x26\xe2\x48\xd5\xf2\x35\x03\
+\x8e\x30\xc1\x6c\xf8\xee\xba\xa9\x49\x52\x24\x24\x77\x28\x08\xc1\
+\xde\x38\x00\x11\xf1\x4a\xa7\x08\xc6\x37\xb5\xc5\xd5\xc5\x54\x6d\
+\xad\xac\x5f\x08\xd5\xf0\x18\x76\xe2\x87\xa7\xc7\x1f\xaa\xd0\x17\
+\x3c\x6f\x19\x8e\x92\x8d\xe0\xaf\xdb\xcb\xcf\xd2\x9c\x7f\xa6\x1a\
+\x65\x28\x63\xc7\xbe\x5b\xd9\x2f\xa5\x85\xb2\x97\x1f\x4a\x4b\x81\
+\xe2\x52\xd6\xd0\x4f\x3b\x8a\x55\x8c\x77\xda\x7d\xaa\x89\xd4\xf3\
+\x23\xc1\xbe\x75\x6e\xdf\x2d\x65\xa9\x97\x8b\x6b\x22\xda\xc6\xd2\
+\x57\x2f\xfd\x88\xb5\xfb\x30\x3e\xf6\x17\xc1\xc7\x6e\xe7\x8a\x71\
+\xe9\xcb\x51\xff\x00\xf6\xb3\x61\x75\xf8\xec\xbc\x5b\xd0\x50\x94\
+\xd9\x5a\x02\x8a\x09\x79\x5c\x8f\x63\xf3\xf3\x51\x56\x9c\x65\xb2\
+\xb3\x2d\x4b\x17\x35\x2b\x32\xed\x8b\xa9\x34\xf4\xbb\xc3\x96\x68\
+\x97\xcb\x6c\x8b\x8b\x7b\x82\xe2\xb7\x25\x0a\x75\x25\x3f\x78\x14\
+\x83\x9c\x8f\x51\xe9\xc6\x7b\xd3\x42\xb5\x35\x8e\x43\xd3\xbf\x52\
+\xde\x6d\xb7\x09\x11\x1b\x52\xdd\x66\x3c\x94\x38\xa4\x63\x23\x90\
+\x93\x9c\x64\x11\xf5\x04\x77\x15\x58\xd9\xa4\xcd\xb7\x0b\xae\x87\
+\xd0\x97\xb8\xda\x92\xcf\x71\xb5\x5c\xa4\xc3\x5b\x29\x05\xfb\x3c\
+\x95\x02\xa4\x21\xc7\x13\xc2\x82\xd6\xe1\xdb\xbb\x0b\x1f\x4e\xf8\
+\xe8\x98\x50\x27\xc0\xd3\xb3\xc6\xac\xb7\xb9\x3e\xcf\x60\x76\x22\
+\xad\x0c\x41\x0c\x48\x65\x0a\x69\x01\x4d\xbf\x95\x95\x02\x85\x24\
+\x77\x03\x27\x27\xd6\xb3\x53\x76\x95\x87\x4e\xbc\xa4\xb4\x5e\xbe\
+\xa3\xcc\x2e\xab\x2d\x76\x4d\x18\xe0\x66\xd7\x1e\xed\xaa\x12\xa7\
+\x31\x29\xf5\x25\x88\xc8\x4a\x54\x72\x70\x0a\x8e\x48\x09\x48\xe3\
+\x93\x56\xba\xee\x51\x63\xca\x83\x6f\x9d\x2a\x3b\x17\x09\xa9\x51\
+\x65\x8d\xfc\xba\xa4\x24\x15\xec\xcf\x24\x00\x73\xf4\xaa\x27\xa7\
+\x83\x0d\x74\x1f\x1f\xfc\x0b\x8f\xfe\x11\x75\x3d\xeb\xc3\xe8\xb2\
+\xda\x6c\x5a\xcd\x41\x41\x3a\x7e\xee\xcb\xef\xa9\x23\x24\x47\x74\
+\x16\x1d\x18\xfa\x38\x0f\xe1\x55\x93\xcc\xcb\x50\xa9\x28\xd3\x72\
+\x6f\x6b\x7f\x09\xbf\xe4\x94\x48\xd5\xba\x7d\x11\xae\x52\x1b\xbc\
+\x43\x53\x56\xb7\x14\xd4\xf5\x87\x46\x23\x2d\x23\xcc\x95\x9f\xdd\
+\x23\xe6\xa1\xf2\xfa\x99\x6d\x85\x17\x55\x5c\xa7\x48\x84\x60\x58\
+\x56\x1b\x49\x8b\x31\x2e\xba\xf2\xf6\x12\x5b\x52\x38\xd8\xbd\xe9\
+\x52\x40\x27\x9c\x55\x55\x1e\xdb\x26\x15\xca\xd7\xa5\xe4\x21\x41\
+\xcd\x76\xcc\x29\xd3\x40\x49\x23\xc5\x43\xeb\x7e\x60\xcf\xcb\x6a\
+\x48\x24\xfb\x53\xb6\xb3\x6d\xc9\x07\xae\x2c\xc7\x69\xc7\x5c\x54\
+\x78\x1b\x50\x84\x95\x13\x88\x89\xf4\x1f\x14\xe5\x1c\xab\x41\x13\
+\xc4\xce\x4a\xfb\x7f\x4d\xfd\x89\xed\xc7\xa9\xf6\xb8\x97\xed\x2e\
+\xd3\x33\xe0\x1b\x4d\xe5\xb9\x6a\x7a\x63\xaf\x84\x86\x54\xca\x1b\
+\x21\x20\xf6\xc9\x2b\xc6\x3e\x98\xef\x56\x1d\x8a\xed\x6f\xbd\x5b\
+\x5a\xb8\x5a\xe6\xc7\x9b\x15\xd1\x94\x3c\xc3\x81\x68\x57\xd0\x8e\
+\x2a\x9f\x9b\x3a\xd5\x79\xea\x67\x4a\xe6\x5b\xe5\x45\x9e\xc2\x62\
+\x5c\xca\x5d\x69\x61\x69\x0a\x11\xd9\xec\x47\xa8\xcf\xe1\x4f\xfd\
+\x01\x21\xb8\x3a\xc5\x23\xca\xdb\x7a\xba\xe6\x94\xa4\x76\x48\xf1\
+\x07\x03\xd8\x55\x26\xae\x87\x50\xab\x2e\x26\x56\xee\xbf\x08\x97\
+\x3f\xaa\x74\xd3\xd7\xb1\x64\x66\xff\x00\x6b\x72\xe6\x14\xa4\x18\
+\x89\x94\x82\xe8\x5a\x7e\xf2\x76\xe7\x3b\x87\x72\x3b\x81\x4e\x49\
+\xc9\x38\x03\x9a\xa0\x35\x56\xa6\xba\x6a\x8b\xc5\x8f\xed\x72\xd8\
+\x8c\xf4\x2d\x71\x15\xa3\x67\x66\x29\xf1\x62\x32\x99\x3e\x1a\x5e\
+\x79\x79\x24\x6f\xdc\x39\xc2\x52\x77\x80\x33\xcd\x74\x53\x0d\x06\
+\xc7\xcd\x17\xca\x86\x52\x9f\x16\x4f\xb0\xf1\x09\x0c\xb5\x9c\x64\
+\xfa\xd2\x67\x25\x2d\x60\x80\x31\x4b\x8e\x08\xe6\x91\x3c\xc0\x56\
+\x54\x38\xaa\xc1\xa6\xf5\x34\x4d\x34\xb4\x13\x00\x09\xc9\xf5\xa4\
+\xb3\x63\x64\x9e\x29\x72\x12\x94\xf9\x48\xed\x5b\x5f\x40\x2d\x53\
+\xf3\xe5\x62\x63\x0b\x94\x8f\x56\x2d\xb6\x93\x6c\x92\xfd\xed\x31\
+\xbe\xc0\xda\x0a\x9e\x2f\xfd\xc0\x9f\x9a\xe2\xad\x53\x72\xd3\x8d\
+\xea\xa7\x13\xa6\x5c\x71\xa8\x2a\x59\xdc\x1d\x3f\xb3\x3c\xfe\xee\
+\x41\x56\x09\xf7\xae\xfa\xea\xbe\x93\x87\xaa\xb4\xec\xab\x3c\xf2\
+\xf8\x8c\xf8\x1b\xfc\x25\xed\x51\xda\x42\x87\x3e\xd9\x1d\xaa\x86\
+\x73\xa4\x9a\x62\xc6\xb5\x18\x36\x64\x2d\x7d\xbc\x49\x07\xc4\x3f\
+\xc7\x8a\xc5\x89\x4e\x73\xd2\x2d\xdf\xe4\x5a\x85\x55\x87\x93\x95\
+\xce\x74\xbb\x5a\xda\x96\xe2\x1d\xb7\x87\xdf\x2b\x38\x4b\x69\x41\
+\x3b\xd5\xec\x90\x29\xb6\x6e\x92\xd4\xc2\x40\x6d\xeb\x1d\xc1\xa5\
+\x67\x01\x0e\x30\xa4\x63\xfe\xd7\x6a\xbf\xf5\x45\x9e\x2c\x7b\x6a\
+\xe3\xcb\x65\xb6\xa3\x23\x2a\x05\x23\x69\x6c\x8f\xde\x49\x1d\x8d\
+\x55\x77\xcd\x7a\xa6\x9e\x31\xe1\xc8\x5d\xdd\x49\x4e\x13\x22\x40\
+\x52\x55\xff\x00\x58\x67\xcd\xf5\xe2\x95\x1a\x55\x29\x3c\xb2\x36\
+\x54\xc5\xac\x46\xb4\xe2\x37\x47\xb5\x45\xd3\xd6\xd2\x97\xe5\x37\
+\xf6\xd7\x9b\x0b\x96\x73\xc3\x69\xdc\x30\x81\xef\xdb\x27\xdf\x03\
+\x1e\xf4\xc7\x72\x90\xdc\xe9\xec\xbe\xb6\x9c\x6a\xda\x95\x12\x95\
+\xa8\x60\xad\x23\xef\x63\xdc\xfc\x57\xaf\xb4\xe5\xd1\xe7\xee\x17\
+\x0b\x82\x5d\x79\x78\x27\x68\x2b\xe7\xb0\x1c\x71\xf0\x00\xa7\xa4\
+\x68\x89\x8d\x36\xdc\x8b\xf3\xff\x00\x65\x8c\x96\xc2\x92\xd1\x58\
+\xde\x12\x7b\x25\x5e\x89\x27\x9e\x3d\x2a\x54\xd4\x6f\x14\xf5\x7e\
+\xb4\x23\x87\xc3\xb4\xe6\x44\x6e\x46\x19\x95\x21\x70\xbc\x64\xc5\
+\x71\xc5\x16\x43\xbc\xa8\x23\x77\x1b\x8f\xa9\xc6\x33\xf3\x5d\x09\
+\xd0\x2b\xdc\x49\xf2\x61\x3b\x1e\x57\x8b\x30\xc2\x6e\x3d\xc1\x95\
+\x0c\x29\x0a\x6b\xca\x83\xf2\x0a\x7d\x7d\xc5\x52\x9a\xe2\x74\x59\
+\x0a\x8c\x21\xb6\xcb\x48\x65\x3e\x1b\x69\x6d\x20\x00\x90\x06\x3e\
+\xbf\x5a\x9b\xfe\x8a\x8f\x1f\xe9\xd5\xc1\xa5\x94\x80\xe4\x1d\xd9\
+\x50\xec\x43\x89\xc7\xf3\xc7\xe3\x48\xc6\xd3\x5c\x2c\xcf\x91\xab\
+\x03\x51\xba\xa9\x2e\x67\x5b\x82\xd2\x23\x07\x83\x45\x6b\xc0\x1e\
+\x51\xdb\x9e\xe7\xd7\x1c\x53\x16\xa4\xb6\x34\x82\x64\xc6\x65\xa0\
+\xc1\x4f\x88\xb4\x21\xb0\xa0\xbc\x9e\x4a\x49\xec\x3d\xc0\xf7\xf8\
+\xa9\x1c\x21\xb1\xa0\xa0\x82\x49\x47\xe3\x5a\xe5\xc6\x5b\xc9\x75\
+\xb4\x3a\x5b\x5f\x2a\x6f\x27\x09\xc9\xee\x0f\xc1\x1f\x85\x72\x2d\
+\x74\x75\xe3\x2c\xac\xae\x11\x65\x87\x71\x43\x49\x7d\xb7\x5d\x70\
+\xb7\xb9\x58\x4e\x32\x9c\x9f\x5c\x76\xc1\x3f\x95\x7b\x74\xd0\x59\
+\x82\x96\xd8\x91\xfb\x2d\xa0\x05\x31\xc9\x4e\x47\xa8\x1d\xf3\xeb\
+\x8a\x9a\x16\x03\x72\xd6\x10\xde\xf6\x52\x72\xf2\x14\x13\x96\xbd\
+\xf0\x3d\x52\x4e\x2a\x47\x62\x4c\x2f\xba\xd2\x52\xb6\xf0\x49\xcf\
+\x73\xee\x3e\x71\x55\x85\x24\xf4\x63\x9e\x2a\x70\xd5\x14\x5c\xed\
+\x0b\x70\x8c\x94\xc9\x6d\xbf\x15\x0c\x84\xa0\x06\x89\x19\x23\xe3\
+\x9c\x11\xf9\xd2\x17\x2d\x2e\x43\x49\x5c\xb6\x65\x3e\xea\x94\x3c\
+\x13\x90\x48\x1e\xb9\x1e\x9d\xbd\x79\xae\x9e\x30\xa3\xc8\x28\x25\
+\x2d\x00\x46\x42\x47\xef\x1f\x9f\xf5\x9a\xd1\x3f\x48\xd9\x26\xc7\
+\x5b\x1f\x62\x43\x24\x1c\xe1\xb2\x40\xe7\xbe\x47\xaf\xad\x12\xc2\
+\x4b\x78\xb2\xd0\xe9\x34\xbd\xf4\x73\x73\xca\x92\x72\x11\x18\x04\
+\x25\xc1\xb5\x41\x24\xee\x18\x39\xc8\xf5\x39\xe3\x3d\xab\x6c\x49\
+\x57\x24\x20\xa8\xdb\x1f\x4b\x9e\x38\xf0\xc0\x5f\x07\x00\x8e\x31\
+\xce\x06\x7b\x9f\x8c\x55\xd9\x75\xd1\x01\xb6\xc7\xd8\x5c\xf0\xb0\
+\x0e\x06\x3f\x21\xff\x00\x95\x47\x67\x69\xc5\x31\xbd\x4b\x8e\x94\
+\x85\x61\x1b\x92\x0e\x4f\x3d\xbe\x9d\xeb\x34\xe9\xd4\x86\xe8\xd3\
+\x0c\x55\x29\xad\x0a\xc5\xc8\xf7\xa7\x5a\xf0\x5e\x0c\x23\x78\x2b\
+\x74\x00\x4a\x46\x14\x32\x33\xc6\x38\xf6\x35\x82\xf4\xf3\x4e\xc9\
+\xcc\x89\x2e\xba\xa2\xb5\x06\xb7\xab\x6a\x06\x4e\x71\xc7\x07\x80\
+\x07\xf2\xa9\xd4\xbb\x6a\xd8\x65\x69\x4c\x72\xfa\x57\x94\xa8\x2d\
+\x38\x00\xe7\x24\xa8\xfb\x7d\x3e\x29\x13\xd1\xdb\x53\x4b\x4c\x72\
+\x92\x55\x80\xa2\x3d\xbf\xf2\xf7\xa4\x39\x49\x6c\x68\x55\x13\xd8\
+\x8e\x38\xcb\x71\x5f\xfb\x34\x76\x5a\x68\x38\x47\x88\xa6\xbc\xa5\
+\x2a\xce\x70\x7f\xb5\x93\xeb\x59\xb1\x6e\x2a\x7c\x3b\x32\x3b\xeb\
+\xdd\x92\x86\x5b\x40\x52\xb2\x3f\x78\x9c\xf1\x9c\x7a\xd4\x91\x98\
+\x28\x2c\x78\x88\xda\xf3\xe5\x01\x28\x0d\xa7\xcb\x91\xea\x4f\x6a\
+\x72\xb5\xdb\x84\x73\x94\x21\xb4\x12\x09\xc2\x07\xaf\xa7\x34\xbd\
+\x59\x57\x51\x24\x37\x59\xed\xaa\x43\x0a\x43\x81\xad\xff\x00\xf0\
+\x4d\x04\x7d\xc2\x7d\x33\xea\x7e\x6b\xcd\x73\x6b\x2d\x68\x8b\xb3\
+\xce\x20\x94\xb7\x11\xce\x0f\xb6\xde\xd5\x34\xb4\x5b\x5f\x59\x0e\
+\xed\x04\x81\xe5\xdc\x30\x09\xa4\xdd\x4e\x65\x0a\xd2\x53\xa1\xa9\
+\x29\x52\x5e\x65\x48\x71\x25\x45\x20\xa4\xf0\x46\x47\x23\x8f\x6a\
+\x74\x68\xda\x39\x99\x92\x55\xfa\xe9\x23\x92\x74\x8d\x95\xfd\x4b\
+\xa3\x66\xc0\x45\xdd\xc6\xee\x16\xc4\x87\xe0\x42\x75\x25\x41\xe4\
+\x14\xf9\x83\x67\xba\x54\x9c\x13\xec\x47\xd2\xa1\x53\x63\x48\x83\
+\x7c\x75\x2f\xb4\xb6\x9e\x52\xb2\xe6\xe4\xf6\xcf\xde\x18\xf9\x39\
+\xa9\x5c\xd3\x2f\x4a\x6b\x3b\xad\xbe\x13\xeb\x71\xfb\x5c\xa5\x16\
+\x55\x9f\x32\xd2\x85\x03\xb4\xe3\xdd\x2a\x20\xfd\x4d\x49\xe6\xdb\
+\xed\x57\xab\x95\xc6\x59\x77\x88\xef\x86\xe3\x15\x73\xfb\x32\xe6\
+\x52\x09\xf5\x21\x27\xf9\x57\x5e\x15\xa5\x4e\xa5\xd2\xbc\x65\xaa\
+\xf8\xd8\xc8\xe8\xd3\xab\x04\xdb\xb3\x8f\x6f\xc8\xd1\xa4\x5b\x6c\
+\x37\x21\x6d\x24\xa1\x68\x1b\x5d\x4a\x53\x95\x14\x9f\x6c\xf0\xa0\
+\x06\x46\x3d\xbd\xea\x40\xe3\x0b\x7e\x32\x98\x88\xfa\x6d\xef\x6c\
+\xc3\x5b\x1b\xdc\xd8\xe3\x70\xcf\xf7\x08\x27\x9f\x4f\x6a\x6b\x5b\
+\x4c\xda\xe2\x96\x5a\x01\x32\x49\x21\x2b\xcf\x74\xf7\x19\x1e\xa3\
+\xe6\xb1\x8b\x76\x99\x16\x64\x55\xb8\xe7\xf5\x45\x45\x0b\xf4\x71\
+\x0a\x18\x29\x27\xd8\x91\xd8\xfa\xd2\x2b\x46\x51\x86\x6b\x6a\xc7\
+\xd3\x9a\xab\x5a\xd0\x92\xb2\xfb\x09\x51\x2a\x54\x2d\x42\x88\x57\
+\x86\x19\x86\xe9\x50\x27\x24\xa5\x2b\x57\xb2\x55\xdb\x24\x72\x0f\
+\x63\x5d\x5d\xd1\x75\xb1\xf6\x26\xc2\x46\xde\xdd\xfb\x8a\xe6\x6d\
+\x40\xeb\x1a\x96\x04\x78\x56\xe4\xb6\x5c\x69\xc0\xec\x17\x15\xc9\
+\x69\x59\xf3\x32\xaf\x74\xe3\x91\x9f\x6c\x57\x4b\x74\xcd\xa6\xe2\
+\xb4\xca\x77\x02\x43\x69\x07\x1e\xbc\x72\x6b\xb3\xd1\x52\x94\x5a\
+\x8c\x79\x9e\x53\xa6\x24\x9d\x65\x3b\x59\xf3\x2e\xf8\x2b\x42\x90\
+\x12\x71\x58\x4b\x80\x87\x3c\xed\x1c\x2a\x91\xdb\xc0\x2c\x83\x9e\
+\x3b\xd3\x8c\x10\xb2\x4a\xca\x8e\xdf\x40\x6b\xab\x2b\xc1\xb6\x99\
+\x95\x35\x35\x66\x8d\x50\x9d\x71\x9f\xd8\x3c\x9c\x7b\x1a\x29\xc1\
+\x48\x42\x8f\x99\x20\xd1\x49\x94\xd4\x9d\xc6\xc6\x0e\x2a\xd7\x2b\
+\xce\x9d\xa4\x33\xa2\xed\xea\x6d\x1f\x77\xc4\xc7\xff\x00\xb8\xaa\
+\x96\x89\xef\x1e\x12\x85\x7e\x55\x5c\xe8\x3b\x93\xcb\xd2\x70\x62\
+\x45\x47\x3f\xb4\xca\x87\x3d\xdc\x55\x4d\xe0\x25\xc6\x98\xcb\xcb\
+\x0a\x56\x3b\x57\x42\x54\xd6\x54\xe4\x73\x28\xd4\x76\x4a\x23\x92\
+\x67\x29\x6a\x0d\x38\x80\x73\xf8\xd6\xa9\x56\x64\x38\xe0\x90\xc1\
+\xf0\x96\x39\xc0\xf5\xa2\x13\x8c\xa5\x45\xe7\x56\x94\x81\xc7\x7a\
+\x71\x8f\x2e\x3c\x80\x7c\x27\x01\xf6\xc1\xac\xd2\x72\xa6\xef\x04\
+\x6b\x8a\x8d\x45\x69\xb2\x0a\xab\x24\x0b\x7e\xa1\x7e\x60\x92\xe4\
+\x9b\xcc\xa4\x04\x9f\xb4\xcb\x2e\x3a\x96\x81\x52\x82\x10\x92\x7c\
+\xa8\xc9\x27\x81\xe9\xcf\x6a\x79\x8d\x12\x63\xb8\x0a\x46\xc1\xea\
+\x4d\x73\xfe\x9c\x76\xf5\x65\xd4\xbd\x5b\xd7\x0f\xfe\xa4\x9d\x76\
+\xb1\x3e\xa0\xdb\xef\x40\xdc\xe2\x5d\xf3\x20\x16\xd4\x55\x96\xd1\
+\xb3\x72\x4a\x47\x70\x47\x3c\x54\xf6\xfb\xd5\x1d\x4d\x61\xd0\x16\
+\x4d\x43\x74\x6e\xc0\xc4\x8d\x51\x2a\x38\xb5\xa4\xf8\x9e\x04\x08\
+\xee\xa0\x2b\xc4\x90\xa2\x41\x59\x4a\x4a\x49\xc6\xd1\xc9\xf6\xa9\
+\x58\x96\xa3\x64\x8c\x71\xe1\xbb\xca\x57\x5f\xdd\x8b\x46\x5d\xb8\
+\x33\x18\x2d\x3c\xac\x77\x34\x8b\xef\x24\x28\x0a\xaa\xe1\xf5\xc5\
+\xd6\x34\x86\xb6\x7e\xe6\xab\x5d\xe6\x5e\x9d\x5b\x29\x8b\x2a\xdb\
+\xb9\x11\xe7\xa5\xe3\xb5\x07\x04\xab\x6e\xd3\xf7\xb9\xfa\x76\xad\
+\x7d\x32\xea\x5c\xfb\xce\xb8\xfe\x8b\x5c\xa7\xd8\xae\xa2\x45\xb8\
+\x4e\x66\x55\xa4\x29\x28\x65\x7b\xb0\xb6\x16\x14\xa5\x64\x81\x93\
+\x9c\xfb\x67\xbf\x17\xa3\x55\xc9\x75\xb7\x26\xa5\x5a\x59\x96\x5e\
+\x7f\xd1\x7b\x5b\x17\xbe\x2a\x6b\xdb\x8f\x2c\x7b\x73\xde\xa8\xeb\
+\xd2\x46\xb2\xfd\x21\x62\xe8\x9b\xd3\xd2\x5c\xb0\x41\xb2\xaa\x61\
+\x84\xd4\x85\xb4\x87\xde\x2a\xfb\xcb\x28\x20\x9c\x05\x0c\x73\xc6\
+\xdf\x93\x9a\xfa\xe9\xa9\xf5\x54\x7e\x84\xeb\x3b\x53\x37\xb7\x96\
+\xdd\x8f\x50\x1b\x7a\x24\x3e\x54\xb7\xcc\x62\xe0\x09\x42\x57\x9c\
+\x82\x14\x33\x93\x9e\x09\x1e\xd8\xcc\xf4\xa8\x39\xe2\xd2\x83\x4d\
+\x76\xf9\x1d\x71\x1f\xfa\x84\xfd\x29\x35\xcc\xf9\x00\xf4\xa6\x3d\
+\x2d\x2e\xe1\x68\xe9\xfa\x67\xea\x49\x8c\x4c\x7a\x24\x45\x48\x79\
+\xd8\xcc\x96\xd2\x5b\x4a\x4a\x80\x09\x2a\x3c\xed\x1e\xfc\x9a\xa6\
+\x6c\x1d\x70\xba\xdd\xaf\x3a\x69\xc9\xb2\xb4\xda\xe2\x6a\x09\x8a\
+\x87\xfa\xb2\x21\x59\x99\x6e\x25\x7b\x1a\x53\x8a\x2a\x21\x5b\x8e\
+\x33\xe5\x1c\x11\xda\xa2\x3a\x4f\x51\xd5\x71\x11\x84\x12\x7b\xb2\
+\xf6\xc7\x00\x7b\xf1\x4b\xc4\x54\x96\x86\x06\x0e\x2b\x9f\xec\xdd\
+\x55\xd5\x53\x34\xec\x6b\x7a\xd9\xb7\xa7\x56\x2b\x55\x8b\x13\x8d\
+\x86\x54\x1b\x42\x07\x2a\x77\x69\x56\x78\x00\x8e\xfe\x9d\xa9\xd7\
+\xaa\x7d\x58\xbd\xe8\x9b\xa4\x89\x2c\x6a\x1d\x23\x75\x8f\x16\x6a\
+\x59\x7e\xcc\xc3\x2e\x19\x4d\xb2\x54\x79\x53\x81\xc2\x90\xe8\x03\
+\x90\x40\x1f\x1e\xf7\xa9\x37\xa5\x84\xc3\x11\x4d\x45\xc9\xec\x5b\
+\xe9\x0d\x2e\x53\x91\x1a\x96\xca\xe4\x34\x01\x71\xa0\xb0\x56\x90\
+\x7b\x12\x3b\x8f\x4a\x5a\xd4\x62\x1b\xda\xa3\xc5\x50\x73\x6f\x33\
+\x34\xef\x59\x7a\xcd\x7d\x80\x1a\x32\xe0\x59\x22\x3e\xc8\x75\x3b\
+\x93\xb9\x31\x9b\x23\x23\x23\x22\xa4\x48\xea\x56\xa2\x53\xdd\x25\
+\x41\x4c\x1c\x6a\xd6\x9c\x5d\xcb\xf6\x47\x82\x94\x34\xa1\xe1\xf9\
+\xbc\xbc\xac\xf7\xcf\xa5\x2d\xd4\x93\x2f\x0a\xd4\xd3\x77\xed\xfa\
+\xd8\xb8\x50\x84\xa1\x24\x24\x56\xb0\x54\x49\x04\xd5\x1d\xac\x7a\
+\xbb\x7a\xd3\x1a\xb2\x13\x49\xd4\x3a\x4a\xfb\x11\xfb\xb2\x20\xc9\
+\xb7\x41\x61\xc0\xfc\x56\xd4\xa3\x85\x78\xbe\x21\x49\x58\x03\x04\
+\x10\x39\x3d\x87\xa6\xb8\x53\xb5\xb5\xcb\xf4\x95\xd4\x56\xf8\x37\
+\xf8\x0c\xb7\x12\xd4\xdf\x86\x87\xa2\xad\x6d\x86\x54\xa4\xa9\x29\
+\x09\x0b\x18\x58\x2b\xe5\x7e\xb8\xec\x2a\x12\x7b\xb2\xd2\xc5\xc2\
+\xf6\x8a\xd6\xf6\x2f\x26\xdf\x61\xd4\x95\x34\xf2\x1c\x48\x51\x49\
+\x28\x50\x20\x10\x70\x47\x1e\xa0\xfa\x56\x69\x50\xdb\xc1\xcd\x73\
+\x76\x85\xea\x1c\x8d\x3b\xd1\xdf\xb5\x5b\x6c\x96\x86\xaf\x37\x6d\
+\x52\xe5\xb6\x33\x6d\x36\xb4\x47\xf1\x96\x13\x97\x96\x37\x13\xe9\
+\xd8\x28\x7a\x63\x81\x52\x19\x9d\x48\xd5\x9a\x7e\x4e\xb2\xd3\x97\
+\xa1\x69\x93\x79\xb2\xd9\x4d\xda\x0c\xb8\xac\xad\x0d\x3c\x8e\x01\
+\x0b\x6d\x4a\x38\x21\x4a\x03\x83\xc8\xa9\x4a\xe8\xaa\xc6\x42\xc9\
+\xb2\xe9\x74\x05\xe4\xa7\xbd\x64\xd9\x2a\x6f\x6f\xad\x52\x56\x0e\
+\xa6\x6b\x13\xa8\xf4\x2a\xee\xf1\xec\xea\xb5\x6b\x26\xdd\x2c\xb1\
+\x1d\xb7\x03\xd1\x76\xa5\x24\x12\xb2\xac\x2b\x3b\xc1\x23\x68\xf5\
+\x1e\x99\x2e\x9f\xa3\xb1\x79\x5a\xa3\xa9\xde\x3a\xdc\x3e\x1e\xa9\
+\x90\x12\x16\x49\xc2\x77\xaf\x00\x67\xd2\xac\xdd\x90\x43\x11\x19\
+\xcd\x25\xcf\xed\x72\xc7\xb8\xc5\xde\x92\x95\x0e\xf5\x11\xbe\x59\
+\x50\x5a\x51\xd9\x92\x7b\x55\x88\xe2\x12\xea\x4f\xbd\x34\xdc\x63\
+\x05\x24\x82\x29\xd4\xaa\x58\x6d\x48\x5c\xe2\x0f\xd2\x59\x9d\x71\
+\xf6\x81\x6c\x81\x65\x92\x9b\x52\x8e\x54\xf4\x70\x57\xe3\x9f\x65\
+\x63\xb0\x1e\xc7\xd7\x9f\x6a\xa9\x74\xc7\x4d\x35\x35\xd4\x29\xf9\
+\x6c\x8b\x73\x29\xed\xf6\xa4\xa9\x25\x7f\x41\x8a\xfa\x07\xa8\x2c\
+\xc9\x75\x45\x41\x27\x35\x0d\x9f\xa6\x0b\xab\xf3\x24\x91\xf3\x59\
+\x65\x47\x11\x52\x76\xd3\xc4\x21\x5b\x87\x1b\x24\x72\x2d\xd7\x41\
+\x6a\x02\xb4\x46\x8c\x84\x48\x6c\x01\xc8\x1b\x02\x4f\xbe\x69\xbd\
+\x1a\x32\xea\x64\x98\xf3\x58\x97\x35\xd0\x32\x96\x9a\x51\xf0\xd0\
+\x33\xdd\x4b\x35\xd6\x92\xb4\x93\x63\x3e\x5c\x53\x4c\xdb\x03\x2c\
+\x20\x82\xad\xa3\xd4\x66\x99\x53\xa3\xea\x25\xb9\x68\xf4\x84\xa1\
+\xba\x4c\xe5\x6b\xae\x81\xbb\x21\x45\x61\x70\xd3\x9e\xc8\x42\xc9\
+\xc0\xfa\xe2\xa4\x1d\x1b\x65\x5a\x67\xa8\x71\xd6\xb9\x49\x79\x32\
+\x19\x53\x0b\x00\x14\xf7\x20\xe4\x67\xd0\x10\x2a\xde\xbe\xdb\xa2\
+\x21\xb2\xae\x30\x7b\x1c\xf7\xa8\x02\xa1\x32\x9d\x47\x0d\xc8\xec\
+\x27\xc7\x32\x02\x77\x84\xe1\x5b\x7d\x46\x7f\x2a\x45\x7a\x31\x54\
+\x65\x79\x2d\x87\x60\xf1\x73\x9e\x22\x2e\xdc\xce\xa1\xb1\x3a\x5d\
+\x8c\x84\xac\x80\xb4\xe0\x0c\x9c\xe4\x7f\xac\xd2\xd7\x99\x56\xf3\
+\xcf\xec\xf1\xfe\xb9\xa6\xed\x1c\x80\xf5\xb1\x90\xf8\xc3\x88\x18\
+\x3c\x7f\xaf\xc2\xa4\x25\x05\x0a\x2d\xbb\x8d\xa7\x80\xbf\x43\xf1\
+\x5e\x7e\x31\xba\x3d\x14\xa5\x69\x08\x43\x01\xe4\x6c\x70\xf9\xd2\
+\x0a\x4a\x88\xe7\x1f\x51\xdf\x8f\x4a\xf1\x88\xea\x8a\xc6\xd7\x4b\
+\xc8\x59\x23\x12\x5a\x1b\x93\xc7\xa9\x1e\x87\xf9\xf3\x4b\x7e\xcc\
+\xa4\xb8\x36\x1f\x32\xbe\x3b\x7d\x29\x54\x55\xad\xa1\xe6\x3c\x91\
+\x8e\x78\xff\x00\x42\xaf\x15\xae\xa5\x5c\xb4\x3c\xb7\xc9\x74\x2b\
+\x6e\x03\xc9\xc8\xf3\x27\x9c\xfc\x91\xdc\x53\xfb\x0f\xb6\x5a\xf2\
+\xe3\x70\xc7\xaf\x7a\x65\x92\xcc\x77\x16\x14\xa6\x46\xff\x00\x45\
+\xa7\xca\xa1\xf8\x8e\xf5\x93\x29\x2b\x40\x6c\xad\xd5\x03\xc6\x4a\
+\xb3\xc5\x35\x4a\xc2\x25\x14\xf5\x16\xc9\x79\x4a\x56\xd4\x05\x67\
+\x39\xc9\x38\x14\x95\xe8\xee\x48\x3e\x7f\x0d\x1c\xfd\xe4\x8d\xc4\
+\x7b\x71\x4a\xa1\x42\x61\xa4\xf0\xd2\x4a\x7d\x77\x1c\xe7\xe4\xd2\
+\xf0\x50\x1b\xda\x9c\x04\xf6\xc2\x7b\x51\x6b\xee\x56\xf6\xd8\x8b\
+\xb9\xa7\x58\x71\x68\x5b\xac\xa9\x64\x02\x32\xea\xb8\xcf\xc2\x7d\
+\xa9\x24\xad\x25\x09\xc5\x38\x95\x21\xbd\xaa\x56\x4a\x52\x00\xcf\
+\x1e\xc2\xa5\x6b\x0a\x3c\xed\x01\x5d\xb2\x6b\xc0\xd0\x1f\x7c\x67\
+\xdf\x03\x19\xa5\xba\x30\x7c\x87\x46\xb4\xe3\xcc\x89\xb3\xa5\xdb\
+\x68\x6c\x42\x01\x40\xe0\x01\xfb\xa3\xd2\x96\x46\xb0\xb2\xc1\xce\
+\x01\xe7\x22\xa4\x29\x28\xdd\x8f\xe0\x2b\x05\xa1\x64\xe7\x01\xb4\
+\xfb\x9e\x4f\xe1\x54\x54\x60\xb9\x03\xaf\x37\xbb\x1a\x94\xc8\x40\
+\x4a\x10\x82\x54\x79\x00\x76\x03\xe6\xa2\x7a\xed\x9f\x16\x1a\xa3\
+\x24\x95\xa9\xd5\x24\x15\x27\xbe\x77\x0e\xdf\x02\xa6\xb2\xbf\x64\
+\x85\x25\x03\x69\x3f\x78\xab\xb9\xfa\xd4\x79\xd8\x89\x7a\x4a\x9d\
+\x74\x12\x12\x9e\xdd\xf9\xa4\xd7\x8d\xe3\x64\x32\x8c\xac\xf3\x33\
+\x8f\xfa\x99\xa5\xae\xfa\x73\xa8\x92\x1e\x94\xd3\xf3\x62\x5c\xde\
+\x72\x44\x69\x0c\xb0\x7f\xda\x16\xa3\x90\xc1\x09\xec\x42\xb3\xc7\
+\x63\x48\xa4\x4b\x95\x09\x6f\xef\x07\xc4\x52\xc3\xb2\x22\xf0\x76\
+\x38\x78\xf2\x91\xf1\x80\x47\xe5\x5d\x73\x73\xb3\x19\xd0\xde\x88\
+\x48\x4a\x8a\x4e\x17\xec\x7d\xc7\xcf\x7a\xa0\x3a\xab\xa3\xdb\xd3\
+\x32\x17\x7d\xb9\x38\xd4\x7b\x73\x48\x25\xb8\xed\x24\x85\x49\x7b\
+\x38\x08\xcf\xf1\xfc\x0d\x3f\x0d\x55\xb9\x24\xd6\xb6\xb2\x17\x89\
+\x6f\x27\x57\x6b\xdd\xae\xd2\x1e\xd4\x37\xe6\xb2\xc0\x53\x72\x52\
+\xeb\x83\x72\x92\xe3\x64\x14\x63\xd8\xfb\x1a\x7b\xb7\xd8\xe5\xa1\
+\x68\x2b\x69\x67\x1c\x6e\x03\x9c\x1f\x4a\xd9\xa0\xf5\x0d\xb2\xea\
+\xe7\xda\x11\x21\xa6\x54\x80\x0b\x8c\xbc\xe0\x4a\x90\x7d\x7b\xf7\
+\x1f\x35\x76\xe9\xb8\xf6\xeb\x8c\x64\x00\x1b\x24\xf2\x0a\x48\x20\
+\xfe\x35\xe8\xf0\xf4\x28\x4e\x9e\x49\xbd\x4f\x31\x5f\x13\x56\x35\
+\x1c\xb6\x65\x6b\xa5\xb4\x7c\x74\xdc\xcc\xc0\x87\xd2\xea\x95\xb9\
+\x45\x47\x85\x1f\x7f\xaf\xf9\xd7\x42\xe8\x68\x31\xe2\x30\xd9\x70\
+\xe5\x40\x53\x65\xb2\xc8\xdb\x6f\xa5\xb0\x81\xdf\x82\x2a\x7f\x67\
+\xb5\xc5\x8e\xd2\x4a\xc0\x27\x1e\xb5\xbf\x0f\x84\xa7\x85\x8b\xb7\
+\x33\x25\x4a\xd5\x2b\xcf\x34\x9d\xd8\xfb\x18\xef\x65\x2a\x6f\xee\
+\x8a\xc5\xfb\xd1\x64\xf8\x6d\xb7\xdb\xbd\x64\xdc\x86\xda\x6f\x09\
+\x1c\x0a\x8f\x5c\x64\x9f\x19\x6b\x09\x18\x1e\x95\x34\xe9\x29\xb7\
+\x99\x68\x5a\xa5\x57\x05\xd5\x7a\x92\xdb\x5d\xcd\x12\xf0\x14\x36\
+\xab\xd8\xd1\x51\x38\x8f\xac\x20\x38\x95\x6d\x57\xd6\x8a\xa4\xf0\
+\x69\xbb\xc5\xd8\xb5\x3c\x6b\x4a\xd2\x57\x21\x9d\x33\x8b\x39\xcd\
+\x3d\x13\xec\xe0\x84\x9d\xfe\x6f\xfa\xea\xab\x16\xd8\xcc\x86\x41\
+\x12\x5c\xdc\x7d\x78\xed\x4c\x7d\x33\x4a\x63\xe8\xa8\x29\x40\x4e\
+\x47\x88\x09\x3f\xfc\xc5\x53\xcb\xcf\x24\xa8\xec\x39\x34\xf4\xdc\
+\x95\x91\x9a\x9a\x51\x8a\x6c\x41\xa8\x4a\x50\xe2\x42\x57\x84\x9f\
+\x4c\xd2\x0b\x64\xe5\x46\x92\x97\x1a\x59\x29\x07\xcc\x33\x58\x5d\
+\x1d\xf1\x64\x60\x9c\xed\x14\x89\xa6\x5c\x65\x4a\xc0\x38\x3c\xe4\
+\xd3\x92\xd2\xcc\x5b\x96\xb7\x43\x03\xfa\x31\x4b\x87\xaf\x22\xb7\
+\x79\x38\xd5\xef\x97\x54\xaf\xb2\xff\x00\xb9\x79\x51\xc6\x37\xf9\
+\xfe\xf7\x7f\x2d\x39\x5c\x34\x82\x6f\xda\x2f\x4d\x69\x65\xdc\x5f\
+\x8b\x3b\x4f\x26\x32\xad\xf7\x36\x1b\x1b\xda\x75\x84\x25\x21\x7b\
+\x09\x23\x07\x19\xdb\x9e\xf8\xe7\x8a\x70\x65\xc7\x8b\x9c\x8f\x2d\
+\x4a\xb4\x74\x55\x2d\xd5\x48\x5a\x30\x3e\x69\x15\x29\x53\x84\x5b\
+\xb1\x6a\x71\x73\x96\x5e\xdf\xec\x6f\xbb\xe8\x9b\x96\xa2\xd0\x97\
+\x6d\x39\xae\x35\x22\x6f\x2d\x4e\x42\x3c\x37\x63\x5b\xd3\x10\xb0\
+\x52\x77\x05\x01\xb9\x59\x3b\x82\x4f\x27\x1c\x63\x1c\xd3\x7e\x8b\
+\xb1\xea\x7b\x36\x1a\xbc\xea\xd6\xef\x31\x1a\x63\xc1\x69\xbf\xd5\
+\xa9\x61\x79\xc8\xc2\x94\xb0\xb3\xb8\x80\x08\xec\x33\x9c\x9a\xb0\
+\xee\x8e\x06\xe1\xa8\x77\xf4\xa6\x46\x90\x56\xa4\x23\x3d\xeb\x36\
+\x1d\x75\x5b\x35\xd7\x84\x54\xd5\xb7\x21\x9d\x4e\xd1\x37\xc7\x64\
+\xb1\xd4\x0d\x08\xff\x00\x85\xab\xad\xb1\x15\x1d\xb6\x14\x84\xa9\
+\xb9\x8d\x28\xf2\x85\x6e\xe3\x70\x0a\x51\x07\xd4\x80\x3d\xb0\xd3\
+\x6c\xe9\x64\x1b\x97\x43\xdf\xd2\xf2\x1e\xb9\xda\xe6\xdd\xde\xfb\
+\x74\xe9\x13\x59\x41\x7c\x4a\xde\x09\x2a\x42\x55\xb4\xa7\xca\x00\
+\x01\x5d\x8e\x73\x92\x6a\xeb\x68\x78\x51\xc0\xed\x81\x4c\x77\xb7\
+\x49\x4e\x32\x72\x4e\x69\x54\xe3\xc4\x99\x35\x68\xc2\x0b\x37\x76\
+\xc6\xbd\x2d\x6b\x96\x8d\x30\x6c\xd7\xfb\x9b\x57\x92\xe3\x4a\x65\
+\xc7\x51\x18\x30\x95\xb6\x53\xb7\x6e\xd0\xa3\x8e\x33\xce\x7d\x6a\
+\x31\xa4\x7a\x7f\xa8\x74\x64\x78\xd6\xbb\x76\xb6\x54\x8d\x37\x11\
+\xe5\x2d\x98\x12\x2d\x88\x53\xc9\x6d\x4a\x2a\xf0\xfc\x7d\xfd\xb2\
+\x4f\x3b\x73\xed\x8e\xd5\x31\xb3\x3d\x96\x53\xee\x9a\x77\x7d\x21\
+\xc6\x0d\x44\xe3\x92\x63\xa1\x08\xd4\x82\x7c\xd1\x52\x5b\x3a\x4f\
+\x1a\x1f\x59\x5d\xea\x0a\x6e\xea\x53\x4e\x38\xb7\x91\x6d\xfb\x3f\
+\x95\x0f\x2d\xa0\xda\x9c\xdf\xbf\x92\x7c\xc7\xee\xfa\xfc\x52\x1b\
+\xb7\x41\x9d\x99\x63\xbf\x58\x63\xeb\x37\xa3\xd9\xae\xd7\x15\x5c\
+\xd3\x18\xdb\x90\xb5\xb7\x20\xff\x00\x69\xcd\xd9\x5a\x06\x07\x94\
+\x6d\xe4\x0e\x7b\xe6\xd6\x00\xa7\xf0\xa7\x48\xca\xde\xd0\x35\x15\
+\x55\xb5\x45\x29\xe1\xe9\x4a\xe9\xaf\x4f\x72\xa8\xb8\x74\xe9\xb9\
+\x9a\xc7\x5b\x5d\xa6\xdd\x1c\x5b\x1a\xa2\x03\x70\x9d\x8e\x86\x76\
+\xa9\x84\xa5\xa4\xb7\xb8\x2f\x71\xdc\x7c\xb9\xfb\xa3\xf1\xa6\xbb\
+\x1f\x4a\xee\x30\xa6\x69\x39\x17\x1d\x5e\xe5\xc0\x69\x67\x31\x6f\
+\x68\x40\x4b\x49\x0c\x94\x90\xa4\x1c\x2c\x92\xa3\x84\x79\xf3\xd9\
+\x18\xdb\xce\x6a\xdb\xba\x30\x52\xbf\x15\x23\x8a\x6d\x29\x5e\xed\
+\xd9\x38\xad\x10\x8c\x26\xae\x22\xa5\x25\x19\x6a\xbd\x5e\xff\x00\
+\xc9\x50\xb3\xd1\x45\xb1\x67\x66\xc2\x9d\x5e\xf1\xb4\xc5\xbb\x26\
+\xe9\x09\x83\x01\x1b\x90\xe8\x50\xcf\x88\xbd\xd9\x73\xcb\xb9\x23\
+\xee\xe3\x76\x4e\x70\x05\x4e\x23\x68\x39\xac\xf5\x59\xed\x77\x6a\
+\xd4\x62\x18\x99\x1d\xa8\xf3\xa1\x39\x04\x3b\xe2\xb6\x82\x93\x84\
+\xaf\x70\xd9\x90\x90\x33\x83\x8e\x6a\x5c\xcb\x41\x79\x56\x73\x8a\
+\xdd\x19\x44\x3b\xb4\x77\xcd\x56\x71\x56\xb2\x26\x9d\x18\x45\xa7\
+\x62\xb6\x83\xd1\x28\x4d\xf4\xed\xcd\x29\x23\x50\x3c\xb9\x28\xbc\
+\x2a\xef\x0a\xe0\xd4\x50\x85\x47\x7b\x8d\xbe\x42\xa5\x05\x01\xce\
+\x79\x19\xcf\xa6\x2b\x7b\x9d\x24\x7e\x54\x6d\x51\x32\xf5\xa9\xd5\
+\x72\xbe\xea\x0b\x7f\xea\xf5\x4e\x10\x43\x4d\xc6\x67\x18\x09\x43\
+\x21\x67\xd4\x02\x7c\xdc\x91\xe9\xcd\x59\xc5\x45\x1d\xeb\x2d\xfc\
+\x0f\x9a\x46\xa8\xd1\xec\xf4\xb6\xb1\x5b\x45\xe9\x49\x0e\xf4\xf1\
+\xd3\x7d\xe3\x46\xa1\x68\xc7\xd9\x3f\xdd\x9b\x92\xda\x7f\xb7\xfb\
+\x3f\xb9\xfd\xee\xf5\x29\xd1\xfa\x7e\xe3\x62\x9b\x7b\x7e\x76\xa7\
+\xb8\xde\x9b\xb8\xcd\x32\x63\xb5\x28\xf9\x61\xa0\xe7\xf6\x48\xe4\
+\xf1\xcf\xa6\x07\x03\x81\xce\x5f\x9d\x7b\x03\x68\x35\xa5\x4f\x00\
+\x39\x34\x28\xb7\xa9\x2a\x14\xe0\xf4\xf5\xa5\x85\x01\x7b\x79\xad\
+\x32\x4a\x56\x93\xcf\x34\x8d\xe9\xcd\xa0\x1c\xac\x71\x4c\xd7\x1b\
+\xf3\x4c\xf6\x58\xcf\xc5\x33\x25\xb5\x61\x2a\xc9\x0b\x26\x21\xac\
+\x12\xbc\x53\x05\xc9\xf8\xad\xe7\x25\x35\x57\xf5\x77\xae\x5a\x7f\
+\x47\x2d\x51\x1c\x5a\xae\x17\x2c\x67\xec\x71\xd6\x3f\x67\xff\x00\
+\xcc\x5f\x64\x7d\x39\x3f\x15\xcd\xfa\xb3\xaf\x7a\xfa\xfc\xea\xd1\
+\x6f\x7d\x9b\x44\x75\x1e\x13\x11\x1e\x70\x3e\x56\xac\x9f\xc4\x62\
+\xa8\xf1\x79\x7d\xd4\x14\xe8\x55\xad\xee\xa3\xa8\x7a\x81\xac\x6c\
+\x9a\x66\xdc\xa9\x77\x59\xcc\xc4\x41\xc8\x40\x59\xf3\xac\xff\x00\
+\x75\x23\x93\x5c\xcf\xd4\x1e\xb8\xcf\x9b\x70\x2c\x69\x76\x0b\x6d\
+\x63\x68\x7a\x42\x02\x94\xaf\x90\x9e\xc9\xfc\x73\xf8\x55\x59\x70\
+\x95\x3e\xe2\xeb\x93\xae\x92\xe4\x4c\x79\xc3\xf7\x9d\x59\x52\x96\
+\x7e\xa6\xa7\xbd\x0b\xe9\xe2\x35\xa6\xa9\x11\xa5\x05\x22\xdb\x0d\
+\x29\x7e\xe0\xf2\x0f\xde\x4e\x70\x96\x81\xf4\xdc\x78\xfa\x03\x59\
+\x6b\xe2\xa4\xd5\xe6\xce\x9e\x1b\xa1\xf5\xbc\xd9\x96\x84\xe9\xee\
+\xb2\xea\x0a\xd5\x7f\xbb\x5c\x65\x31\x6c\xdc\x4f\xda\x16\x49\x53\
+\xa7\xd4\x36\x0f\x18\xf9\xed\xf5\xab\x5f\x4e\xe8\x78\xd6\x9b\x9c\
+\x54\xa3\xc6\x73\xc3\x39\x53\x8f\xb8\x56\xb5\x7a\x66\xae\x49\xec\
+\xc7\x89\x09\x98\x71\x18\x43\x2c\xa1\x3b\x1b\x6d\x00\x04\xa1\x20\
+\x60\x00\x3d\x05\x47\x5e\x67\x32\xdb\x74\x02\x73\xc6\xe1\xee\x2b\
+\xcf\xe2\x71\x35\x2a\x3b\x72\x3b\x14\x28\x53\x86\xb1\x44\xb6\xc8\
+\xd2\x51\x1d\x21\x23\x09\xc0\xcd\x3f\xb4\x90\x50\x37\x84\xad\x23\
+\xb8\x3f\x5e\x0d\x31\xd8\x14\x0b\x3c\x9f\x32\x7d\x71\xde\xa4\x6d\
+\xa4\x2d\xa0\x15\xe5\xc7\xc7\x7a\x65\x3d\x50\xba\x9b\x88\xcc\x65\
+\xa0\x92\xc8\xde\x9f\xec\x77\x1f\x87\xa8\xad\xad\xa5\xbe\x13\x92\
+\x39\xc8\x0a\x38\x22\x94\x16\x9c\x6f\xcc\xde\xec\x7a\xe4\xff\x00\
+\x8d\x6d\x61\xd1\xc8\x71\x04\xfe\x19\xa6\x24\x2d\xc9\x98\x35\x15\
+\x63\x24\x21\x59\xc6\x38\x02\xb7\xb0\xd6\x50\xa1\x92\x9e\xe1\x4a\
+\x00\xf2\x7d\x78\xa5\x6d\xa5\xb2\x06\xd5\x2b\x07\xdc\xf0\x3e\x94\
+\xa5\x0c\xb3\xea\xea\xff\x00\x0a\xbe\x51\x6e\x62\x26\x94\x94\xa7\
+\x1b\x14\x4f\xb9\x4d\x78\xae\x78\x50\xc8\x3e\x83\xd2\x9c\x76\x46\
+\xef\x82\xe7\xc6\x6b\x62\x40\x49\xc2\x10\x84\x0f\xa5\x5b\x29\x19\
+\xc6\xe6\x9a\x75\x5f\x71\x93\x81\xea\xae\x05\x6d\x11\x70\x09\x79\
+\x40\xfc\x26\x97\x10\xa5\x8c\x14\xab\xe7\x9a\xd6\xe3\x58\xf3\x29\
+\x58\x1e\x98\xa1\xa2\x33\x08\xd4\xd8\xc6\xd4\x24\x24\x63\xb6\x38\
+\xad\x0b\x4a\xb3\xb8\xd2\xc7\x16\x0e\x52\x94\x94\xfc\x9a\x44\xf2\
+\x8a\x95\xb5\x24\xe4\xfe\x42\x97\x26\x59\x08\x26\x6e\x52\xfc\x26\
+\xc0\x27\x1e\x63\xed\xf3\x49\x14\xce\x3c\xa8\x19\x09\xe3\x3e\xe7\
+\xde\x9d\x94\xc1\x59\x0d\xb3\xe6\x3d\xc9\xff\x00\x5f\xce\xa9\x3e\
+\xb1\xf5\xc6\xd7\xa6\x14\xfe\x9f\xd1\xae\x47\xbb\x5f\x00\x29\x7e\
+\x60\x21\x71\xa1\x1f\x60\x7b\x38\xe7\xc0\xe0\x7a\xe7\xb5\x2d\xc1\
+\xc9\x9a\x68\x53\x9d\x59\x28\xc1\x6a\x49\xfa\x85\xae\x74\xc6\x82\
+\x69\xb5\x5f\x24\xa9\x53\x9f\x41\x54\x78\x2c\x0c\xba\xee\x3d\xfd\
+\x12\x93\xfd\xa5\x71\xf5\xae\x4b\xea\x36\xb4\xba\x6b\xdb\xe2\xae\
+\xf7\x72\x50\xd3\x6a\x29\x8b\x09\x3f\xd4\xc6\x6f\x3d\x81\xfd\xe3\
+\x8e\xea\xf5\x3f\x95\x31\x6a\x0b\xc5\xca\xe7\x3e\x4d\xd2\xeb\x25\
+\xf9\xd3\x9e\x58\x53\xd2\x5c\x3b\x89\x3f\x3f\x81\xe0\x76\x14\xcd\
+\x31\xe7\x64\xa8\x70\x42\x41\xf2\xf3\xc7\xe5\x5a\xe8\x61\xd4\x35\
+\x67\x51\x46\x9e\x1d\x7f\xb4\x84\x97\x16\x13\xe2\x27\xc0\x58\x52\
+\x89\xf3\x60\xfc\xd3\xff\x00\x4f\xb5\xde\xa0\xd0\xf7\x0f\x1a\x1b\
+\xbe\x3c\x35\x28\x78\xd1\x9c\x39\x6d\x5f\x4f\x63\xf2\x29\x95\x2a\
+\x08\xe3\x21\x38\x3c\x91\xfe\x5f\x35\x8b\x8d\xe5\x2a\x21\x29\x48\
+\x03\x8c\x03\x85\x56\xde\x56\x67\x2b\x11\x86\x85\x5b\xbe\xde\x47\
+\x63\xf4\xe7\xac\x1a\x67\x52\xb2\xd2\x63\x4d\x44\x69\xd8\x19\x89\
+\x21\x41\x0b\xcf\xb2\x49\xe1\x7f\x87\x3f\x15\x6d\xc0\xd4\x0d\xb8\
+\x91\xdc\x2f\xd4\x1e\xe2\xbe\x69\x29\x87\x10\xe7\x88\xd2\x94\x8d\
+\x9e\x60\x52\x6a\xc6\xd0\x5d\x6c\xd6\x5a\x63\xc2\x62\x5b\xe9\xbb\
+\xdb\xdb\xc0\x0c\xca\xc9\x5a\x47\xf7\x56\x3c\xc3\x8f\x7c\x8f\x8a\
+\xd3\x4b\x13\x52\x9e\x9b\xa3\xce\xe2\x3a\x2e\x50\x77\x81\xdf\xad\
+\xcb\x2e\xc7\xf1\x77\x01\xc5\x21\x61\x45\xe7\x8a\x73\x9d\xc7\x9a\
+\xa1\x74\xc7\x5e\xb4\xb5\xfa\x22\x18\xfb\x7a\xed\x33\x14\x39\x66\
+\x5f\x08\x27\xd8\x2c\x71\xf9\xe2\xac\x5b\x26\xb1\x8a\x96\x92\xb4\
+\x3e\xcc\x82\xa1\x9d\xcc\xb8\x97\x07\xff\x00\x69\x35\xb6\x18\xfa\
+\x4f\x49\x68\xce\x5d\x4a\x33\x83\xeb\x22\x74\xe0\x6d\xb5\x14\x13\
+\x92\x7d\xa8\xa6\x48\x97\xd6\x26\x28\x28\x11\x93\xcd\x15\xb6\x33\
+\x8c\x95\xd3\x13\x62\x51\xd3\x5b\x6a\x1c\xd1\x90\x96\xb5\x7d\xef\
+\x13\xb7\xa7\xed\x15\x4f\x4f\x5a\xda\x84\xd2\xde\x6d\x1b\xf0\x9e\
+\xd8\xa8\xa7\x4d\x2e\x32\x99\xd2\x70\x12\xa3\x94\x65\x7f\x87\xed\
+\x15\x56\x0a\x16\x97\xa2\x85\x77\x4a\x85\x73\xa4\xea\x53\xb3\x6f\
+\x43\xa1\x41\x52\xab\x0d\x16\xa8\xae\x19\x68\xca\x9c\xb7\x14\x36\
+\x24\x2a\xb2\xba\x24\x15\x80\xd2\xc6\x00\xf4\xad\xf7\x75\x84\x4e\
+\x71\x94\x61\x08\xdd\x93\x48\x46\xc1\x90\x09\x51\x3e\xa7\x9a\xe9\
+\xad\x51\xcf\x7a\x3b\x1a\x9a\x59\x0a\x28\x3f\x96\x2a\x7d\xa5\x9e\
+\x69\x50\x82\x52\x30\x40\xc1\xa8\x3e\x1b\x2a\xcf\xad\x4b\x34\xc2\
+\x17\x1a\x12\xde\x70\x7d\xee\x40\x35\x9f\x12\xaf\x4c\xd1\x85\x95\
+\xaa\x0a\xef\x4f\x05\x3c\x1a\x1e\x9d\xeb\xcb\x4b\x45\xd7\xf7\x94\
+\xf9\x40\xe0\xd2\x17\x14\xa9\x12\x49\xee\x54\x71\x4f\xb1\x50\x98\
+\xb1\x80\xcf\x38\xa4\x54\xfd\xba\x6a\x2b\x73\x45\x3f\xdc\xa8\xe4\
+\xf6\x32\x9a\xee\x13\xb4\x1f\x4e\x6a\x35\x70\x90\x95\x3a\x54\xae\
+\xc9\x3c\x52\xfb\xa4\x9d\xa8\x23\xf7\x95\x4d\x29\x6f\xc5\x77\x67\
+\x24\xd3\x30\xd4\xf2\xab\xb1\x78\x9a\x99\x9d\x90\xb6\xd4\xf0\x4b\
+\x83\x04\x61\x55\x23\x8a\xb0\xa4\x6d\x35\x13\x09\xf0\x97\xb7\xb1\
+\x1f\x14\xf7\x6f\x91\xbd\xb1\xcf\x98\x55\x31\x34\xef\xaa\x2f\x85\
+\xa9\x6e\xab\x37\x4a\x6f\xc3\x70\x9f\x43\x5b\xa0\x2f\x04\xa0\x9f\
+\xa5\x6d\x71\x29\x7d\x9e\x3b\xd2\x24\x95\x36\xbe\xf8\x22\xb3\x2e\
+\xbc\x6c\xcd\x2f\xa9\x2b\xa1\x45\xd1\xd0\x96\xb6\x7a\x9e\x29\x97\
+\x3c\xed\x39\xc7\xc5\x3a\x5c\x47\x8c\xce\xf4\xe3\x8a\x68\x53\x9e\
+\xc9\xe6\x9f\x87\x8f\x54\x46\x21\xf5\x85\xac\xb8\xdb\x43\xb7\x06\
+\xbc\x5a\xb7\x3a\x14\xda\xbb\xd3\x4c\xb9\xbe\x12\x72\xae\x00\xa6\
+\x19\xba\x9e\x3c\x57\x0a\x94\xea\x52\x90\x7c\xca\x52\xb0\x07\xd4\
+\x9e\x2a\xd3\xcb\x4d\x66\x93\x13\xc5\xe4\x58\x3e\x3a\x52\x91\x93\
+\xce\x29\x1c\x9b\x9c\x76\xf8\x2b\x48\xaa\x67\x58\x75\xb3\x48\x58\
+\xdb\x50\x9b\xa8\x62\x97\x40\xc8\x66\x32\xbc\x65\x9f\x8c\x27\x20\
+\x7e\x24\x55\x21\xab\x7f\x49\xe7\x1c\x52\xdb\xb0\xd8\xca\x8e\x4e\
+\xd7\x66\xb8\x4f\xff\x00\x62\x7f\xce\xb0\xf1\xa3\xbc\x55\xcd\x51\
+\x55\x6a\x7b\xa8\xeb\xb9\xda\x8a\x3a\x16\x40\x58\xed\xef\x51\xcb\
+\xc6\xb5\x8f\x19\xb5\xad\x6f\x21\xa6\xd3\xf7\x96\xe2\xc2\x52\x3e\
+\xa4\xd7\x0c\x5f\xba\xd3\xd4\x4b\xab\x8a\x5a\x6f\x0b\x84\xda\x87\
+\xdc\x8a\x80\xd8\x03\xea\x39\xfe\x35\x0d\x9f\x74\xbd\x5c\xd5\xbe\
+\x7d\xca\x54\x8d\xca\xca\xbc\x57\x8a\xb9\xfc\x4d\x51\xe2\x2a\x72\
+\xb2\x1d\x1e\x8e\xab\x3f\x7a\x47\x5d\x6b\x9e\xbf\xe9\xbb\x41\x5b\
+\x71\xe7\x9b\x93\xe9\xff\x00\x82\x8b\xca\x7f\xed\x9e\x3f\x2c\xd5\
+\x1b\xae\xfa\xe3\xab\xf5\x31\x5c\x5b\x6b\x9f\xaa\x21\x2c\x10\x50\
+\xc1\x3b\xd4\x3f\xbc\xe7\x7f\xcb\x15\x5a\x37\x17\xb1\x50\x2a\x23\
+\xda\x94\x36\xdb\x4d\xe0\xaf\x03\xca\x41\x03\xd3\xf1\xa4\xca\x4e\
+\x4e\xed\xdc\xeb\x61\xfa\x22\x9c\x35\x97\x98\x9d\xb6\x16\xfb\xc5\
+\xc7\x9c\xf1\x49\xf3\x12\xa3\x9c\x9a\x56\x5b\x4a\x06\xd4\x24\x91\
+\x91\xe9\x5b\x76\xe1\xad\xca\x04\x21\x27\xcb\x84\xf7\xaf\x76\x84\
+\xa4\x93\x8c\x28\xe3\x83\xcf\xd3\xe9\x55\x6e\xec\xec\xd3\xa0\xa1\
+\x1b\x24\x26\x98\xb5\x97\x58\x40\x48\x29\x49\x52\xb0\x3b\xf1\xdb\
+\x3f\x9d\x74\x7f\xe8\x6f\x2e\x2a\xed\xda\x96\xdc\xa0\x91\x38\x2d\
+\x89\x19\xf5\x53\x58\x50\xc6\x3e\x09\xfe\x35\xce\xae\x25\x26\x5b\
+\x38\x6c\x94\xac\x28\x10\x3b\x9e\x33\xfe\x15\x3c\xfd\x1f\xb5\x22\
+\x34\xaf\x55\xad\x32\x65\x3a\x96\xa0\xce\xcc\x19\x65\x47\x00\x25\
+\xce\x12\xa2\x7e\x14\x13\xcd\x2a\xb4\x6f\x02\x1a\x93\x53\xd7\x7f\
+\xc1\xd6\xf7\x26\xb2\xf9\xf3\x60\x63\x03\xe0\xe2\x90\x88\x89\x71\
+\xb2\xde\x36\xee\xc1\x1f\x0a\xf7\xa7\x99\x6c\xa9\x52\x14\x36\x8c\
+\xa5\x5b\x54\x01\xed\x8e\xc6\xb2\x62\x29\x28\x03\x8c\x0e\xc7\x15\
+\xc9\x74\xee\xcc\xaa\x76\x42\x5b\x46\x5b\x56\xd7\x52\x37\x24\xed\
+\x20\x8e\x47\xcf\xe7\x9a\x92\xb4\xb4\xa1\x09\x24\x9c\x11\xdf\xb8\
+\xa6\x65\x36\x1b\x21\xc2\x95\x15\x27\x1e\x70\x79\x4f\x3d\x8f\xbd\
+\x39\xb6\x85\x29\x85\x05\x36\x01\x28\x38\x58\x20\xf1\xe8\x47\xd0\
+\xd3\x20\xb2\xe8\x52\x6d\x3d\x45\xc1\xcd\xaa\x47\x88\x4e\x36\x92\
+\x94\x83\x9e\xdd\xf8\xa5\xac\xa5\x24\x02\x10\x82\x15\xc8\x20\xf7\
+\x14\xc7\xa7\xd2\xea\xd8\x0b\x92\xa0\xfc\x94\x1f\x0c\xad\x49\x29\
+\xe3\x3c\x63\xda\x9e\xe3\x29\x28\x07\x6a\xb2\xd9\x3c\xa7\xfb\x3f\
+\x4a\x6c\x1d\xd5\xc4\xd4\x56\x76\x37\x00\xd2\x55\x84\x95\x6d\x23\
+\xf7\x78\xe4\x7d\x7e\xb4\xa1\x94\xb6\x13\x93\x95\x28\x93\xca\x8e\
+\x3f\x2f\x8a\x43\x25\x5b\x43\x6b\x24\x25\x5d\x81\x48\xc8\xcf\xcf\
+\xe1\x43\x6a\x71\x45\x59\x75\xb2\xa5\xe4\x20\x81\x85\x24\x0f\x5c\
+\x76\x3e\x9c\x55\xef\x62\x96\x1c\x52\x40\x58\xc1\x1c\x67\xca\x3f\
+\xd7\x34\xa1\x2a\x42\x94\x50\x09\xe0\x02\x46\x29\x33\x39\x71\x96\
+\xbc\x2d\x85\x04\xe7\x77\xef\x27\x1d\xeb\x5a\x7c\x54\xbc\xb7\x12\
+\xb1\x94\x8c\x76\xce\x73\xcd\x5a\xe5\x77\x15\x3a\xff\x00\x87\xca\
+\x10\xb7\x14\x3b\x25\x3d\xcd\x63\x20\xac\x8c\x9c\x63\xeb\xda\xb0\
+\x82\x14\xb1\xe2\x29\x2a\x1d\xc1\xdd\xdc\x9e\xdf\x95\x6b\xbe\x5c\
+\x2d\x96\x4b\x6a\xee\x57\xbb\x94\x4b\x64\x24\x0c\x97\xa5\x3c\x96\
+\xd3\xf8\x67\xb9\xfa\x54\x6f\xa8\x5b\x5b\x20\xc6\xe4\xf2\x42\x47\
+\x6a\x65\xd5\xb7\xfb\x16\x93\xb3\x2e\xef\xa8\xee\x6c\xdb\x60\xa7\
+\x3b\x54\xe1\xcb\x8f\x2b\xfb\x2d\xa0\x72\xb5\x7c\x0f\xc6\xa9\x7e\
+\xa5\x7e\x93\xf6\x88\x65\xcb\x77\x4f\x2d\xaa\xbb\x4a\xda\x40\xb9\
+\x4d\x41\x6d\x84\x1f\x74\x36\x70\xa5\xe3\xdd\x58\x1f\x06\xb9\xab\
+\x56\x5f\xf5\x16\xad\xbb\xbb\x77\xd4\x57\x49\x37\x49\xc4\x60\xba\
+\xf2\xf0\x86\xff\x00\xba\x80\x38\x48\xf8\x48\xc5\x4a\xa6\xd9\xd2\
+\xc3\x74\x75\x4a\x9d\x69\xe8\xbc\xfd\x7a\xb1\x65\xf5\x9b\xaf\xb7\
+\x8d\x5d\xe2\xd8\x74\xca\x17\x61\xb0\xa8\x94\xb8\xb5\x2b\xfd\xa6\
+\x58\xf6\x5a\x87\xdd\x49\xfe\xca\x7f\x12\x6a\x9e\x71\x29\x60\xb6\
+\xda\xdc\x50\x1b\x54\x50\x80\x36\x9d\xc6\xb5\xbc\xe0\x49\x48\x69\
+\xb0\x70\x7e\xf1\x1f\xce\xb5\x24\x29\x6a\xf1\x94\x4b\x8a\x3d\xf1\
+\xdf\xe4\xf3\x5a\x21\x05\x15\xa1\xd3\x8e\x4a\x49\xc2\x2b\xd7\xd4\
+\xd0\xb3\x29\xf5\x99\x0a\xca\x46\x30\x02\x46\x78\xf7\x35\x82\xd2\
+\xb7\x1b\x48\xc0\xee\x33\x83\xc6\x7d\x29\x62\x88\x43\x4b\xda\xa0\
+\x92\x0e\x70\x0f\x27\xde\x93\xc8\x79\x0a\x74\x00\x14\x40\xf4\x4f\
+\x00\xf1\x4c\x42\x2a\x46\x29\x6a\xdd\xd9\xad\x0c\xb2\x12\x52\xf3\
+\xa9\x4e\xd3\x92\x0a\x7f\x2f\xad\x60\xe6\x12\x93\xb9\x63\x1d\x81\
+\x4a\xbb\xfe\x15\xb5\x42\x53\xa1\x3b\xd2\x52\x39\x03\x70\xc9\x48\
+\xc7\x02\xb2\x66\x13\x2d\xa4\x29\xd5\x78\xa4\x8c\xee\x24\x64\x7e\
+\x1f\x5a\x9b\xf6\x8a\x74\xdc\x9e\x58\x2b\x7a\xe6\x22\x59\x51\x58\
+\x28\x0b\x50\xcf\xb6\x31\xe9\x59\x39\x15\x4a\x39\x70\xa7\x80\x4e\
+\x7b\x52\xe5\x2d\xa4\x12\x10\xea\x90\x01\xe4\x28\x7a\xfc\x52\x27\
+\xe4\x28\xf2\x82\x41\xf5\x28\x18\xfa\xd4\xa6\xde\xc2\xe7\x4e\x10\
+\x4d\xc9\xdc\x46\xec\x66\xc2\xc6\xd3\x92\x79\x1c\xd6\x70\xa4\x5c\
+\x6d\xef\x22\x4c\x29\x6f\xc5\x75\x07\x29\x52\x16\x52\xa0\x7f\x0a\
+\x50\x92\x8c\xa9\x2a\x51\xec\x3d\xb3\x9a\x0a\x77\xa4\x29\x40\xe0\
+\x63\x38\x3c\x0a\xb5\xcc\x72\xc3\xc6\x45\x9d\xa3\x3a\xe7\x7c\xb5\
+\x2d\xa6\x35\x24\x41\x70\x65\x3c\x7d\xa1\xb3\xb1\xec\x7b\x9f\x45\
+\x7e\x3f\x9d\x15\x51\xce\x6d\x29\x19\xc1\xc1\xed\xed\x45\x42\x8a\
+\xe5\xa1\xca\xaf\x82\xa5\x9f\xdd\xf5\xf0\x3a\xc3\x4d\x6a\x0b\xf3\
+\x76\x28\xc8\x6e\xf5\x72\x4a\x41\x56\x02\x65\xac\x01\xe6\x3e\x99\
+\xa9\x33\x5a\xa3\x52\x35\x0c\x0f\xe9\x0d\xd8\x71\xdb\xed\x8e\x7f\
+\x9d\x42\x74\xaa\x77\x5a\x63\x92\x78\x1b\xbf\xfc\x8d\x3d\x15\x78\
+\x87\x27\xee\x8a\xf1\x55\xeb\x55\x72\xb6\x67\xf3\x3c\x6a\x9c\x93\
+\x76\x66\x62\xeb\xa8\x5f\x90\xa7\x5d\xbe\x5c\xce\x4f\x73\x29\x7f\
+\xe7\x4a\xdb\xba\xde\x12\x9c\x7e\xb9\xb9\x7f\xf5\x4b\xff\x00\x3a\
+\x40\x54\x01\xe2\xbd\x6d\x4a\x52\x82\x52\x82\x49\x3c\x01\xeb\x55\
+\x78\xaa\xef\x69\x3f\x9b\x21\x36\x2c\x76\xe9\x78\x24\x2c\x5e\x6e\
+\x5c\x73\xfe\xea\x5f\xf9\xd6\x6b\xd5\x7a\x89\x6d\x86\x91\x7e\xba\
+\xed\x1e\x9f\x6c\x73\xfc\xeb\x0b\xd5\x9a\xfb\x6d\x88\xdb\xf3\xec\
+\xf3\xa2\x30\xf2\xb6\x21\xc7\xd8\x52\x12\x49\x19\x03\x24\x77\xc0\
+\x27\x1f\x06\x90\x47\x65\x2c\xa7\x72\xf9\x51\xab\x4a\xb5\x78\xfb\
+\xf2\x77\xf1\x64\xbc\xd1\x76\xd8\x7a\x89\x7f\xd4\x2d\x8f\x11\x57\
+\xeb\xa8\x57\xfc\xf1\xcf\xf3\xac\x9f\xd5\x7a\x90\x82\xa5\x6a\x1b\
+\xb6\x3f\xe7\x8e\x7f\x9d\x35\x0d\xce\x38\x84\x24\x65\x4b\x50\x4a\
+\x52\x4e\x32\x49\xc0\xaf\x35\x3d\xaa\xe7\x64\xba\xae\xd9\x76\x8c\
+\x23\x49\x42\x52\xa5\x37\xe2\x25\x78\x04\x64\x1c\xa4\x91\x54\x8c\
+\xeb\xcf\xac\xe4\xed\xf1\x2d\x9a\x6a\x37\x57\xb1\xb5\x7a\x97\x50\
+\xba\xb2\xa5\xdf\xae\x87\xeb\x2d\xcf\xf3\xaf\x58\xd4\x9a\x85\x2b\
+\xdc\x2f\xb7\x4f\xfe\xad\xcf\xf3\xa6\x62\x78\xed\x4e\xd0\x6c\x17\
+\x69\x76\x19\x77\xc8\xf1\x82\xed\xf0\xd4\x11\x21\xef\x15\x03\x62\
+\x8e\x30\x36\x93\x93\xf7\x87\x61\xeb\x4f\x55\x6b\x4b\x48\xc9\xfc\
+\xd8\xb8\xe7\x93\xd0\xda\xe6\xa4\xd4\x3b\xf7\x7e\xbe\xba\x7f\xf5\
+\x8e\x7f\x9d\x66\xd6\xa7\xd4\x6d\xab\x72\x6f\xf7\x51\xf4\x98\xe7\
+\xf9\xd3\x3e\xd2\x72\x2b\xd1\xda\x97\xc7\xab\x6f\x79\xfc\xc3\x34\
+\xbb\x49\x33\x3a\xab\x52\x10\x14\x9d\x43\x76\xf9\xff\x00\x6c\x73\
+\xfc\xe8\x7b\x53\x6a\x25\x8c\xff\x00\x48\x2e\xb9\xff\x00\x9e\x39\
+\xfe\x75\x1b\x43\xa5\xa3\x9f\x4a\x1e\x96\x90\x9c\x85\x52\xb3\xd6\
+\xbd\xd4\x9f\xcc\xba\xa9\x27\xa5\xc7\x97\x35\x76\xa4\x6c\x14\x9d\
+\x41\x76\x03\xfe\x78\xe7\xf9\xd3\x74\xcd\x69\x7c\x65\xa5\x2d\x7a\
+\x86\xe4\x84\x81\x95\x29\x53\x56\x00\xfa\x9c\xd4\x3f\x52\xea\x16\
+\x22\x94\x47\x09\x76\x4c\xd7\x8e\xd8\xf0\xe3\xa4\xad\xe7\x94\x7b\
+\x04\xa4\x73\xc9\xaa\x9f\xaa\xb1\x7a\x8b\x05\x51\xbf\xa5\xd6\x0b\
+\xbd\x8e\x24\x82\x7e\xca\xdc\x98\xab\x65\xb5\xe3\xbe\x32\x06\xe5\
+\x0c\x8c\xfa\x8c\xfa\x57\x4f\x07\x86\xc4\x57\xd7\x33\x4b\xb6\xec\
+\xdb\x85\xc2\x55\xae\xef\x7b\x22\x79\xab\xba\xdf\x3a\x31\x53\x16\
+\xdb\xd5\xca\xe0\xf0\xe3\x7a\xa5\x38\x1a\x1f\xc7\x2a\xff\x00\x5c\
+\xd5\x4d\xa9\x75\x9e\xa9\xd4\xae\x95\xdd\x6f\x53\xa4\x23\xd1\xb5\
+\x3c\xad\x89\x1e\xc0\x67\x14\xc2\x1b\xf7\xe4\x9f\x5a\xcd\x20\x76\
+\x07\xf3\xaf\x41\x47\x0f\x0a\x4b\x4b\xb7\xda\xce\xfe\x1f\x07\x0a\
+\x1b\x6e\x63\x87\x14\x7c\xce\x2f\xf1\x35\xea\x41\x4f\x39\x56\x6b\
+\x23\xbb\x8f\xa5\x2e\x76\xd5\x73\x66\xd2\xc5\xe1\xfb\x5c\xc6\xad\
+\xb2\x5c\x53\x4c\x4c\x5b\x0a\x0c\xba\xb4\xfd\xe4\xa5\x78\xda\x48\
+\xf5\x00\xf1\x4f\x6d\x9b\x16\xe2\x30\x5c\xec\x16\xbf\xce\xbd\x42\
+\xd6\x14\x0e\xf5\x03\xe8\x6b\xc0\x32\x7d\xbd\xab\xdf\x4c\x11\x8a\
+\xad\xcb\xab\xf6\x99\x17\x9e\x24\x6e\x79\xc3\xf8\x9a\xc9\x2f\x3b\
+\xbb\x97\x5c\x3f\xf5\xab\x04\xfa\x91\xe9\xc6\x2b\x24\x83\x9d\xc5\
+\x35\x0c\xba\x72\xed\x33\x53\xef\x29\x44\x17\x5c\x3f\x55\x9a\x03\
+\xab\xc1\x05\xd7\x3e\x79\x35\xa5\x44\x15\x63\x18\xf4\xac\x81\xc0\
+\x04\x7e\x00\x50\x4f\x12\x4d\xee\x66\xe3\xef\x04\x85\x87\x57\x94\
+\x60\xa7\xcc\x7f\x87\xf1\xaf\x56\xf3\x8e\xa4\x65\xd5\x94\x91\xdf\
+\x71\xe6\xb0\x1c\x73\xf3\x5e\x70\xd9\x20\xf2\x85\x73\xff\x00\x24\
+\xd0\x4a\x9c\x97\x32\xfa\xe9\xa7\x50\xef\x17\xcb\x7a\x60\xca\xbe\
+\xdc\x05\xce\x2a\x02\x56\x93\x29\x79\x75\x09\xc0\x0b\x1c\xf3\xe8\
+\x0f\xe7\x53\x34\x5f\x2f\x81\x1e\x5b\xcd\xcb\x00\x76\xfb\x52\xff\
+\x00\xce\xb9\xc7\x45\x58\xb5\x46\xa0\xbe\x06\xb4\x7d\xba\xe1\x3e\
+\xe7\x19\x06\x4a\x53\x05\xa2\xb7\x1b\x40\x21\x25\x58\x1d\x86\x54\
+\x91\xf8\x8a\xb4\xde\xd4\x1a\xa3\x4a\xa6\x3b\x1d\x47\xd2\x37\x8b\
+\x32\xde\xf2\xb5\x31\x50\xd4\xda\x1d\x3e\xb9\x04\x00\x48\xf5\xda\
+\x7f\x0a\xe0\x63\x70\x15\x54\x9c\xe9\x6a\xbb\x3b\x0e\x4e\x2f\x0d\
+\x57\x36\x6a\x6e\xfd\xd7\x26\xd2\x2f\xb7\xbd\xa4\x9b\xdd\xc9\x27\
+\xdf\xed\x4b\xed\xf9\xd6\xa8\xd7\xab\xbb\x69\x29\x7a\xf1\x74\x24\
+\x65\x5c\x4a\x5f\x23\xdf\xbd\x46\x06\xb0\xd2\xf2\x40\x0c\xdf\x22\
+\x79\x86\x7f\x6b\xb9\xbc\x7d\x72\x29\x53\x57\xad\x3b\x22\x2e\xe5\
+\xde\x6d\x64\x0f\x43\x25\x03\x18\x3c\x7a\xd7\x2d\xc6\xb2\x5a\xa7\
+\xe6\x62\xfd\xf8\xab\x3b\xf9\x92\x78\xda\x8a\xfc\xeb\xcb\x75\x9d\
+\x47\x74\x2d\x29\x20\x28\x7d\xa9\xc1\x83\xf9\xf7\xf4\xa5\x82\xfd\
+\x7e\x40\x0d\x1b\xcd\xd1\x1e\x5e\xe9\x94\xb1\x81\xe9\xeb\xfc\x2a\
+\x39\xa4\x52\xce\xad\xd4\x0c\x58\xb4\xfd\xca\x1c\xeb\xab\xe1\x61\
+\x31\xd9\x90\x90\x56\x94\x24\xa8\x9e\x48\x48\xc6\x0f\xad\x31\x5e\
+\xba\x83\x67\xb1\x5e\x65\x5b\xa5\x17\xdc\x9b\x11\xc5\xc6\x90\xdb\
+\x2d\x6e\xc2\xd0\xa2\x15\xc9\x38\x3c\xe4\x67\x9e\xd5\x2a\x86\x26\
+\x7e\xea\x7e\x64\x70\xf1\x13\x7d\x54\xfc\xcb\x11\x5a\x87\x51\x16\
+\x83\xa2\xf7\x73\x78\x00\x7f\xfe\x6d\x79\x3e\x9e\xf8\xa5\x11\xb5\
+\x16\xa1\x6d\x28\x29\xbe\xdd\x38\xe0\x1f\xb5\xb9\x9e\xdf\x5a\xa4\
+\xa4\x75\x75\x4d\xa9\x5f\x63\xb2\x87\x90\xa2\x79\x7d\xcd\x9f\xc1\
+\x39\xa6\x2b\x9f\x54\x35\x6c\xdd\xe9\x8a\xf4\x6b\x72\x08\xe3\xec\
+\xec\x8d\xc0\x7f\xca\x56\x4f\xe5\x8a\x7c\x3a\x37\x19\x3d\xf4\xf1\
+\x63\x63\x80\xc5\xc9\xd9\xe9\xf1\xfb\x1d\x19\x23\x52\x5f\x1b\x6f\
+\xc5\x91\xa8\xae\x6c\x36\x15\xc9\x72\x7a\xd0\x93\xf9\xab\x15\x15\
+\xbc\xf5\xaa\x35\xa5\x4e\xa4\xea\xeb\xac\xe7\xc2\xb1\xe1\x43\x94\
+\xe2\xc6\x7f\xe5\x12\x07\xf1\xae\x70\xb8\x4d\x99\x71\x7f\xc5\xb8\
+\x4c\x93\x31\x64\xe5\x45\xe7\x14\xae\x7f\x1a\x4e\x02\x12\xa2\x13\
+\xb4\x01\xdf\xd7\xf2\xad\xf4\xba\x26\xda\xd4\xa8\xdf\x86\x86\xda\
+\x7d\x17\x67\xd7\x9b\x7e\x1a\x16\xed\xfb\xf4\x85\xd7\x12\x02\x9b\
+\xb2\xce\xb8\x40\x41\x3c\x3c\xf4\xc7\x1d\x70\x7d\x06\x76\x83\xf8\
+\x1a\xad\xf5\x0e\xa3\xd4\x3a\x9a\x68\x99\xa8\xaf\xb7\x2b\xac\x81\
+\xf7\x17\x2e\x4a\xdc\x29\xf8\x4e\x4f\x03\xe9\x4d\x65\x4b\xc7\x95\
+\x38\x03\xd5\x55\xe1\x19\x39\x5a\x81\xe3\x00\x67\xb7\xe1\x5d\x4a\
+\x54\x29\xd2\x56\x8a\xfa\x9d\x2a\x34\xa3\x47\xdc\x5e\xbc\x4f\x4b\
+\xce\xfd\xd0\xe2\xc9\xed\x80\xa3\x83\xf5\xac\xbc\x69\x2a\x46\xd2\
+\xf3\xa5\x07\xb8\xde\x71\xc7\xbd\x60\x08\x00\x00\xae\xde\x80\xd0\
+\xb2\x10\x08\x1c\x9f\x5c\x9e\xf4\xe1\xaa\x52\xde\xe6\xc5\x4b\x91\
+\xbb\x1e\x3b\x98\x1d\xb2\xa3\x5a\x9c\x90\xe8\xec\xea\xc2\x87\x6f\
+\x31\xe2\xb5\xf9\xd6\xa2\x12\x14\x00\xef\xf1\x59\x25\x09\x41\xfb\
+\xc0\x9f\x91\x53\x6b\x15\x75\x27\x2d\xd9\x8f\x89\x25\xd5\x65\x4f\
+\x38\x31\xee\xa3\x59\xa4\x94\x1d\xc9\x5a\xc1\x1c\x67\x35\x22\x85\
+\xa2\xb5\x54\xfe\x9f\x5c\x75\xe4\x3b\x4e\xfd\x39\x6c\x92\x22\xcc\
+\x99\xf6\x86\x87\x86\xe9\x2d\x80\x9f\x0c\xab\x79\xe5\xe6\xf9\x09\
+\x23\xcd\xdf\x83\x88\xa9\x25\x5c\xe4\x9a\x9b\x31\x6e\x76\xd9\xdc\
+\x50\xa9\x6f\x81\xe4\x75\xc1\xcf\xf6\xcd\x6a\x76\x4b\xea\x52\xb2\
+\xf2\xc9\x57\x07\xcd\xde\xb5\x24\xe4\x8c\x63\xf2\xed\x41\xf5\xf5\
+\x35\x29\x58\xa4\xaa\xca\x4b\x73\xd2\xe3\xab\x50\x2b\x71\x64\x8f\
+\x9a\x37\x2b\x24\xee\x56\x4f\xae\x4d\x78\x40\xe0\x95\x60\x7e\x75\
+\xea\xf6\xe7\x39\x1c\xfb\x54\x95\xbb\xdd\xb0\xf1\x1c\x1c\x07\x17\
+\xef\xf7\xab\xcf\x11\xc3\xff\x00\x08\xe1\x1e\x9c\xd7\x83\x39\xc7\
+\xf1\xaf\x42\x3b\xee\x56\x3e\x48\xa9\xb9\x56\xd9\xa5\xf5\xa8\x8e\
+\x56\xa2\x3e\x4d\x15\x9b\xe9\x40\x1c\x2b\xf0\xa2\xac\x99\x49\x45\
+\xb7\xb9\xd5\xba\x67\x8b\x24\x70\x38\x1e\x6c\xff\x00\xda\x34\xea\
+\x94\x15\x72\xa3\x84\xd3\x66\x98\x03\xf5\x33\x0a\x57\x00\x6e\xff\
+\x00\xf2\x34\xb9\x4e\x17\x32\x3b\x27\xd8\x57\x82\xa9\x77\x36\x78\
+\x76\x6c\x2f\x32\xdf\x09\x4e\xe3\x53\x6e\x86\x06\x26\xf5\x1e\x12\
+\x24\x36\x8f\xd9\x32\xeb\xcd\x85\x7a\xac\x0c\x0f\xc4\x64\x9f\xc2\
+\xa0\x3c\x0e\xdf\xc6\x96\xd9\x6e\xd7\x1b\x15\xe2\x25\xe6\xd0\xe3\
+\x68\x9b\x11\x65\x4d\x87\x06\x50\xb0\x41\x4a\x92\xa0\x0f\x20\x82\
+\x47\xf1\x1c\x8a\x76\x15\xc2\x9d\x68\xce\x5b\x26\x32\x85\x45\x0a\
+\x91\x94\xb6\x4c\x7b\xb5\x45\x77\x55\x75\x10\x46\xb9\xcf\x9a\xe3\
+\xb3\xee\x4b\xf1\xb7\xbc\xa2\x94\x80\x55\x90\x94\x93\x84\xe1\x20\
+\xa4\x71\xc0\xa9\x74\x3b\x65\x8e\xfd\xa8\xf5\x5e\x96\x67\x4e\x46\
+\xb7\x7e\xa9\x61\xc5\xdb\xe6\x34\xfa\xd4\xea\x94\xd1\xd8\xaf\x13\
+\x71\xc1\x0a\x24\x1f\x81\x9f\x5e\x6a\x0b\x7a\xd5\x66\x75\xd1\xab\
+\xc5\xb3\x4b\x46\xb0\x5d\xda\x98\x26\x2a\x5b\x77\x05\xc8\x43\x8e\
+\x0c\x92\x3c\x22\x94\x84\x82\xa3\x93\xc9\xf6\xf5\x34\xba\xef\xd4\
+\x1b\x83\xd1\x2e\xcf\x5b\xf4\xbc\x0b\x4d\xc6\xf0\xd1\x62\x7d\xc5\
+\x13\x96\xee\xe4\x2b\xef\xf8\x6d\x94\x80\xd9\x3e\xf9\x35\xd3\xa7\
+\x3a\x09\xcb\x89\x25\x2b\xbf\x1b\xab\x6c\xb4\xed\x36\x42\xa5\x25\
+\x7c\xcd\x3d\x7e\x68\x76\x7d\x16\x7d\x3b\xa3\x34\x75\xc1\xcd\x3d\
+\x16\xef\x26\xfd\x20\x3a\xfb\xb2\x1e\x5a\x3c\x26\x42\x93\x80\xde\
+\xd2\x30\xac\x29\x38\x3e\xe0\xe7\xd3\x12\xad\x45\xa7\x22\x5f\xba\
+\xc7\xa8\xe4\xcd\x8e\x25\xb5\x6c\xb5\x35\x21\x31\x94\xef\x84\x97\
+\x9c\xd9\xe4\x4a\x95\x91\x84\xf0\x72\x72\x07\xbf\x15\x56\x5b\xb5\
+\xc4\x88\xfa\x5a\x06\x9f\xb8\x69\x78\x17\xa6\xed\x6e\x97\x6d\x92\
+\x1d\x98\xb6\x4b\x07\x39\xda\xe2\x12\x0f\x88\x9c\xfa\x65\x3c\x00\
+\x3e\x69\x53\xbd\x48\xbe\x2f\x58\xc9\xd5\x1f\xaa\x20\xa9\x53\x61\
+\x26\x14\xeb\x7b\xaf\x15\xb5\x25\xb0\x90\x15\x85\x6d\x05\x24\x91\
+\x91\xc1\xc6\x71\xcd\x68\x85\x6c\x32\x82\x8b\xb5\xb4\xd2\xdd\xdc\
+\xfe\x23\x23\x5a\x86\x54\x9e\xda\x69\x6e\xee\x7f\x11\xc7\x5e\xda\
+\xed\xa8\xd2\x56\x4b\xc2\x63\x5a\x6d\x97\xa7\x5d\x5b\x17\x1b\x7c\
+\x09\xc9\x7d\xb4\xfd\xf2\x85\x8c\x2d\x58\x05\x28\xcf\x7f\xde\x00\
+\xf2\x29\x7e\x95\x21\x1d\x0a\xd6\x8b\x57\x61\x2d\x92\x7f\x36\xaa\
+\x07\x25\xeb\x2c\x95\x37\xfa\xa3\x46\x31\xa7\xb6\xe4\xad\x49\xb8\
+\xae\x52\x9c\x1e\x83\xcc\x94\x80\x07\xd0\x9f\x9a\x78\x89\xa9\x64\
+\xc0\xd1\xb7\x7d\x26\x8b\x52\x1f\x62\xec\xe2\x1c\x5c\xb3\x2b\x61\
+\x67\x69\x4f\x1e\x1e\xc3\xbb\x3b\x7b\xee\x1d\xeb\x27\x1e\x94\x71\
+\x12\x7a\x25\x95\xad\x3b\x6d\xe0\x84\x2a\x90\x55\x5c\xb9\x59\xaf\
+\x2f\x04\x59\x8b\xd1\xf6\x5b\x3d\xea\xdd\xa7\xee\x96\x9b\x4f\xea\
+\xd7\xad\xbe\x24\xeb\xac\x8b\x92\x5a\x90\xdc\x93\xbb\x1b\x10\x56\
+\x0e\xdc\xa4\x0e\x12\x47\x9b\xbf\x07\x31\xed\x19\x67\xb6\x4e\xd2\
+\xb7\x26\xac\x56\xfb\x3d\xf7\x55\xc4\x9a\xa4\x39\x12\xe1\x21\x49\
+\x05\x84\x9c\x05\x36\x94\xa8\x64\x1e\xf9\xce\x33\x91\x9e\x05\x46\
+\x27\x6a\xa6\xaf\x4c\x42\x46\xa8\xd1\x16\xeb\xf4\xd8\x51\xd3\x19\
+\x99\xff\x00\xac\x57\x1d\x4a\x69\x27\xca\x16\x80\x95\x6e\x39\x24\
+\xe4\x11\xdc\xf6\xad\x1a\x73\x53\x44\xd3\x53\x21\x4f\x67\x43\x43\
+\x99\x75\x82\x56\x63\xce\x37\x57\x1a\x09\x2a\xdc\x39\x6b\x61\x07\
+\x09\x56\xde\xe3\x20\x7b\xd6\x8e\x36\x15\xd4\x56\xb5\xbc\xf9\x77\
+\x6f\xf3\x1c\xea\xd0\xce\xad\x6b\x7a\xee\xdf\xe6\x4a\x34\x45\xb2\
+\x05\xcf\x4d\xde\x9b\xb7\xd9\x6d\x13\xf5\x9b\x13\x14\x3f\x54\x5c\
+\x5f\x5b\x69\x6d\x90\x46\x42\x13\x90\x4e\x39\x19\x27\xb8\xe4\xfa\
+\x1e\x77\xea\xee\xad\x9b\xa7\xa7\x4a\x86\xdc\x44\x40\xb9\x38\xf3\
+\xa1\x51\xb0\x48\x88\x02\x88\x29\x01\x59\x27\x07\xca\x33\xed\x56\
+\x8c\x4d\x7f\x1e\xd7\x7e\x46\xa2\xb8\xe8\xa8\x97\x6b\xfa\x25\xb9\
+\x29\xb9\xe2\xe8\xe4\x74\xa5\xc5\x95\x1f\xea\x82\x54\x08\x1b\xb1\
+\x8c\x8c\x81\xce\x6a\x97\xd6\xfd\x64\xfe\x91\xe9\xdd\x5f\x63\xba\
+\x69\x0b\x2c\xbb\x8d\xf6\xec\x26\xa2\xf3\xb7\x0e\xc5\x4a\x4a\x7f\
+\x66\x80\x41\x38\xc2\x30\x0e\xe1\x80\xb5\xe4\x1d\xd9\xa7\xd0\xa1\
+\x46\xba\x8e\xda\x79\xf8\x9a\x30\xb4\x29\xd7\x71\xee\xf5\xa9\x3b\
+\xfd\x02\xd9\x45\xc3\xa9\x9a\x93\x51\x4e\x02\x65\xca\xdf\x65\x71\
+\xd8\x9e\x37\x9c\x85\xa9\x60\x15\x8f\x5c\xe3\xcb\xf4\x59\x1e\xb5\
+\x15\xfd\x1a\xd9\x57\x53\x7a\xeb\x02\xd9\xaf\x64\x4a\xd4\x11\x26\
+\x22\x63\xef\x37\x31\xe5\x2d\x25\xc2\xd2\x95\xbc\x0c\xe0\x1c\xe0\
+\xf1\xec\x2a\x15\xd1\xbe\xa2\x5e\xfa\x5d\xad\x59\xd4\xf6\x46\xd8\
+\x79\x61\xa5\x47\x93\x19\xf2\x76\x48\x65\x58\x25\x04\x8e\x41\xca\
+\x52\x41\xf4\x20\x70\x46\x41\x9a\xe9\xae\xb1\xe8\xfd\x2d\xd4\xdb\
+\x6e\xb8\xd2\xdd\x29\x4d\xa9\xe8\xff\x00\x69\x32\x63\x26\xfc\xe3\
+\x89\x90\x5d\x41\x4f\x94\xa9\xbc\x34\x94\x92\x48\x01\x27\xdb\x81\
+\x5d\x75\x6b\x58\xee\x64\xcb\xb2\x27\x3d\x33\xd0\x7a\x23\x5c\xf5\
+\x33\x53\xc2\x63\x45\xc6\x8d\x67\xd0\x91\x24\x34\x88\x9f\x6f\x50\
+\x55\xd6\x42\x5c\x52\x5b\x5c\x87\x54\x46\xdc\xf8\x6a\x27\x04\x24\
+\x64\x0e\xc3\x96\xce\xb0\xf4\xfe\xc6\x34\xa6\x85\xd4\x96\x9d\x23\
+\x68\x87\xaa\x66\xdc\xc4\x1b\xb6\x97\xb3\xdc\xc4\xa6\xdf\x25\x4b\
+\x2d\xed\xf0\xdc\x59\x4e\xe4\xb7\xc9\x49\xe3\xc4\x19\x39\x15\x5e\
+\xe8\x2e\xae\xdc\xf4\x77\x51\xaf\xfa\xaa\x2d\xa2\x24\xc8\x3a\x81\
+\x72\x13\x71\xb5\x49\x70\x94\x3a\xcb\xcb\x2b\x28\xde\x06\x41\x19\
+\xc6\xec\x7b\xf1\xcd\x7b\x1b\xa8\xda\x56\xc1\xac\x6c\x3a\xa3\x40\
+\x74\xe9\xad\x3b\x2e\xd5\x2c\xc8\x58\x91\x79\x7a\x70\x90\x92\x0a\
+\x4b\x7e\x64\xa4\x20\x60\x9e\x40\x27\x9e\xf4\x5d\x58\x32\xca\xe5\
+\xdc\xe7\x4b\x6d\x97\xbe\x92\x6b\xe9\x3a\xab\xa6\xfa\x73\x46\xde\
+\xf4\xed\xb4\xcf\x80\x6c\xf7\x4f\x1d\xf4\xec\x69\xd7\x36\x3e\x80\
+\xea\xf1\x90\xd8\x1e\x6e\xfb\x89\x00\x14\xd6\x1d\x5c\xba\xdb\x9e\
+\xfd\x18\xfa\x6d\x0e\x1e\x8c\xd3\xe8\x55\xf8\xba\xc4\x66\xf6\xb8\
+\x11\x01\xd7\x32\x0b\xad\x61\x5f\x78\xa9\x44\x92\xac\xf2\x6a\x03\
+\x70\xfd\x21\xa0\x93\xad\xd1\x66\xe9\xcc\x6b\x60\xd6\x96\xd9\x11\
+\xee\xae\x7e\xb6\x71\xe7\x57\x21\xc4\x29\x08\x78\x15\x23\x01\x08\
+\x0e\x38\x7c\x30\x91\x92\xbf\xbc\x30\x05\x30\x49\xeb\x04\x0b\xa7\
+\x47\x6d\x1a\x06\xfb\xa2\x9b\x9f\x2a\xc6\xdb\xa9\xb4\xdd\x1a\xba\
+\x38\xc1\x8e\xb5\x03\xb5\xc5\x34\x12\x42\xca\x72\x0e\x0a\x80\x3b\
+\x47\x1d\xea\x6e\x88\xcb\x2e\x67\x40\xcb\xe8\x9f\x4f\xad\xb7\xe9\
+\x1a\x02\xe5\xa6\x6c\xb0\xec\xc2\xca\x14\xde\xa9\x93\x79\x42\x27\
+\x19\xe7\x1e\x6f\x04\xbb\x90\x8f\x5c\x6d\xdb\xc6\x39\x06\xb9\x87\
+\xa0\xd6\x58\x17\x8e\xb5\xe9\x9b\x25\xea\x1b\x53\x20\xc8\xb8\xa5\
+\x89\x0c\x2c\xe5\x0e\x27\x9c\x83\x83\xc8\xe2\xa5\x3a\xc3\xac\x7a\
+\x63\x5c\x88\xf7\x2d\x75\xd2\xc8\x97\x8d\x4a\xd4\x44\xc5\x55\xce\
+\x3d\xe5\xe8\x8d\xbc\x13\x9d\xaa\x5b\x28\x49\xc9\xc9\x3c\x85\x0e\
+\xf8\xe0\x00\x2a\xbe\xe9\x8e\xa7\xfe\x85\xeb\xeb\x36\xab\xfb\x07\
+\xdb\x8d\xb2\x4a\x64\x7d\x9b\xc5\xf0\xbc\x5c\x03\xe5\xdd\xb5\x58\
+\xfa\xe0\xd5\x5b\x45\xe3\x19\x59\xdc\xea\x0b\x16\x86\xe9\x55\xc2\
+\xf3\xd5\x1d\x29\x23\xa7\xf1\xc4\x6d\x18\xd0\x96\xc4\xc4\x4e\x78\
+\x4a\x92\x52\x95\xad\x69\x5a\x81\xc0\x49\x28\xda\x02\x40\xc2\x4f\
+\xbf\x35\x19\xbe\xf4\xf3\x49\xeb\xae\x93\x74\xbb\x56\xd9\xf4\xfc\
+\x3d\x2d\x71\xd4\x9a\x89\x36\x69\x8d\x40\x5a\xcb\x5e\x1a\x9d\x7d\
+\x1b\xc0\x5a\x8f\x98\x06\x32\x33\xdf\x71\x04\x9c\x0a\x86\xda\x7a\
+\xf4\x6d\xda\x93\xa8\xf7\xaf\xe8\xa0\x77\xfa\x6f\x1d\x4c\x96\xbf\
+\x58\xe3\xec\x39\x4a\xd3\x9c\xf8\x5f\xb4\xfb\xf9\xc6\x13\xda\x9a\
+\x1f\xeb\x0c\xd1\xd1\x9d\x23\xd3\xfb\x75\xa1\x50\x65\xe9\x8b\xc0\
+\xbb\xc6\xbb\x09\x7b\x8a\xdc\x0e\x3e\xb4\x8f\x0b\x67\x97\x05\xe1\
+\xce\xe3\xf7\x3b\x73\xc0\xda\x05\x19\xa7\xa1\x75\xc2\xd0\x9d\x30\
+\xd4\xbd\x63\xd4\xdd\x10\x8f\xa1\xa3\xdb\x1b\xb5\xdb\x37\xc1\xbe\
+\x35\x25\xd5\x4c\xfb\x42\x52\xd1\x2b\x5e\x55\xb5\x49\xcb\xa7\x8c\
+\x11\xe5\xed\xc8\xdb\x10\xb4\x69\xed\x0f\xa5\xbf\x46\x5b\x27\x51\
+\x2f\x5a\x26\x0d\xfa\xf4\xcd\xd6\x4d\xbd\x4d\xbe\xfa\xdb\x69\xd2\
+\xa7\x56\x02\x9c\xdb\xca\xf6\x25\xb2\x12\x3f\xbd\x9f\x41\x4d\x93\
+\x3f\x48\xc2\x9b\x8d\xdb\x55\xda\x74\x05\xb6\xd7\xae\x2e\xf0\x04\
+\x29\x77\xc6\xee\x2e\x2d\x01\x3b\x52\x9d\xed\xc7\x23\x08\x56\x10\
+\x8c\x1d\xc7\xee\x8c\xe7\x9c\xc2\xa7\x75\x47\xed\x1d\x01\xb7\xf4\
+\xa3\xf5\x10\x42\x61\xdc\x95\x3b\xf5\x97\xdb\x33\xbf\x2a\x70\xec\
+\xf0\xb6\x71\xfd\x67\x7d\xde\x9d\xa8\xba\x0c\xb3\xe6\x5f\x9a\x2f\
+\xa4\x5a\x4b\x4f\xe9\xae\x9f\xb3\x79\xd1\xd6\x5b\xdb\x1a\x8a\x21\
+\x97\xa8\x2e\xd7\x1b\xc2\x63\x39\x09\x2b\x6d\x2a\x6d\x2c\x20\xba\
+\x92\x42\x77\xe0\x94\x82\x4e\x3b\xf2\x31\xcb\xfd\x4b\xb2\x42\xd3\
+\x7d\x41\xbf\x58\xad\xd2\xd3\x32\x0c\x39\xce\x35\x19\xf4\xac\x2b\
+\xc4\x68\x1f\x21\xc8\xe0\xf9\x48\xed\x53\x96\xba\xbd\x66\xbc\x68\
+\x4b\x16\x96\xea\x1f\x4f\x58\xd5\x23\x4f\xb4\x63\x5a\xe6\xb5\x75\
+\x72\x0b\xad\x33\x80\x03\x6b\xda\x95\x05\x80\x12\x81\xe9\xc2\x47\
+\xae\x49\x64\xb7\xf5\x0a\xd1\x07\x40\x6a\xbd\x25\x1b\x40\xd9\xc0\
+\xbe\x4e\xfb\x4c\x49\x8b\x71\x4e\x3d\x6d\x6c\x10\x52\xca\x14\xa0\
+\x54\xb0\x90\x30\x95\x15\x03\xe6\x51\x3b\xb3\x43\xb3\x2d\x0c\xe9\
+\xea\x59\xff\x00\xff\x00\x0f\x24\xa9\x3d\x6a\xbb\x8c\x9d\x87\x4e\
+\x3e\x42\x4f\xa7\xfb\x4c\x6a\xd9\xd3\x7b\x94\xcd\x51\xfa\x1d\xf5\
+\x16\x2e\xa5\x95\x22\x6b\x56\x79\x6c\xc9\x80\xe4\xb7\x0b\x8a\x65\
+\x64\xa0\xe1\x0a\x3c\x81\x90\x78\x1f\xdb\x57\xbd\x56\x9f\xa3\xe7\
+\x54\x4f\x48\xf5\xa4\xad\x48\x9b\x18\xbe\x7d\xaa\xdc\xb8\x3e\x01\
+\x99\xf6\x7d\xbb\x9c\x69\x7b\xf7\x6c\x5e\x71\xe1\xe3\x18\xfd\xee\
+\xfc\x52\x9d\x5f\xd5\x98\xd3\x3a\x70\xbe\x9e\xe8\xbd\x1f\x1f\x49\
+\xe9\xd9\x32\x84\xb9\xc9\x17\x05\xcc\x91\x2d\x69\xc1\x01\x4e\x28\
+\x27\xca\x0a\x52\x71\x8f\xdc\x4f\x3d\xf3\x09\xe8\x0e\x2f\x3e\x9d\
+\xc7\x43\xb7\xd1\x5d\x0b\xa7\xaf\x36\x6d\x13\x7f\xd2\x56\x37\xad\
+\x52\xac\x85\xeb\xae\xa3\x97\x79\x43\x33\x1a\x9a\x77\x01\xe1\xb6\
+\x5d\x0a\xd8\x0a\x06\x30\x82\x9f\x30\xc9\x38\x56\x6b\x8d\x3d\xa4\
+\x34\x56\x9d\xfd\x1c\xef\x7a\xd2\xeb\xa5\xe0\x6a\x1b\xbd\x87\x53\
+\x3b\x09\x82\xf3\xaa\x43\x32\x52\x16\xdb\x40\x39\xb1\x59\x52\x06\
+\xe5\x28\x00\x79\x38\xc9\x23\x35\x11\xbc\xf5\x8b\x4f\x6a\xeb\x55\
+\xa4\x75\x13\xa6\x51\xb5\x2d\xe2\xd7\x11\x30\x99\xb9\x35\x78\x7a\
+\x11\x71\xa4\xf2\x90\xe2\x10\x93\xb8\xe4\x93\x90\xa1\xc9\x38\xc6\
+\x6a\x69\xd3\xad\x61\xa0\xad\x5f\xa2\x3d\xe2\xd5\xa9\x22\x5b\xef\
+\x2f\x2e\xff\x00\xe3\x0d\x3a\x2f\x3f\x64\x92\xea\x0a\x99\xda\xa1\
+\x8c\xb9\xb5\x38\x27\x21\x3c\x84\x9e\x6a\x74\x7b\x15\xfd\xc5\xab\
+\x2c\x2d\x21\xa2\xf4\xce\x9c\xfd\x26\x3a\x6f\x7f\xd2\xb6\xb4\x5a\
+\x61\x6a\x4d\x3d\x22\x6a\xe0\xa1\x65\x49\x65\xcf\xb3\x92\x76\xe7\
+\x90\x08\x5a\x46\x3b\x64\x1a\x80\x49\xd3\x3a\x5b\x4d\xe8\x4d\x7b\
+\xd5\x9b\xe6\x9b\x8b\xa9\xae\x6e\x6a\xd9\x56\xf8\x10\xe5\xba\xb4\
+\xc7\x65\x3e\x39\x0a\x5a\x92\x82\x0a\x89\xca\xbd\x7d\x13\x8c\x73\
+\x51\x48\xff\x00\xa4\x25\xcc\x75\x9e\xd3\xd4\x19\x5a\x72\x33\x91\
+\x2c\xf0\x17\x6f\xb7\xd9\xa3\xca\x2d\x36\xcb\x25\x0a\x48\x1e\x21\
+\x42\xb2\x7c\xd9\x27\x6f\x38\x03\x8c\x53\x6d\x83\xac\xc9\x66\xd7\
+\xa9\xf4\xee\xa5\xd1\xec\xea\x0d\x2f\xa8\x2e\xae\x5d\x55\x6f\x54\
+\xf5\xc7\x76\x2b\xca\x5e\xef\x23\xe9\x49\xe3\x84\xe7\xcb\xce\x3d\
+\x32\x72\x5d\x13\x92\x77\x2e\x28\x3d\x3c\xe9\xac\x4e\xae\x74\xd6\
+\xea\xbd\x33\x1d\x3a\x77\xa8\x56\x37\x1d\xfd\x59\x21\xc5\x38\x88\
+\x92\xbc\x26\x9e\x49\x49\xce\x46\x77\xa1\x00\x67\x00\x93\xd8\x76\
+\xaf\x35\xb6\x80\xb2\x68\x1e\x88\x6a\x59\x17\x6b\x5b\x2e\x5f\xa6\
+\xea\xc7\x6d\x56\xb7\xdc\xc9\x5b\x31\x58\x57\x99\x69\xf4\xf3\x6c\
+\x52\x73\x8f\xde\x1f\x83\x3c\xde\xa3\x5f\x3a\x91\xd5\x5d\x2d\x32\
+\x2b\xda\x7f\x48\x46\xd3\xa9\x69\x36\x68\xf3\x67\x96\x62\x45\x43\
+\x24\x2c\x25\x6f\x2c\x72\xa5\x6c\x4a\x73\x81\x9c\x24\x62\x9e\xbf\
+\x4c\x4e\xa3\xc1\xd6\xba\x86\xc5\x68\xb3\xcf\x83\x32\x3d\x9e\x19\
+\x33\x1e\xb7\xaf\x74\x47\x26\xbc\x41\x7b\xc2\x57\xef\xa4\x6d\x18\
+\x57\xc9\xf9\xa8\x76\xb3\x2d\x1c\xd9\x92\x66\xbf\xd1\x9f\xa7\x16\
+\xad\x4b\xa5\xf5\x7e\xb0\xb8\xda\x63\x5f\xdf\xb1\xb2\x86\xed\xd6\
+\xd9\x53\x04\x78\xcf\x48\x58\x27\x73\xab\x2a\x40\x09\x48\x09\xe0\
+\xa8\x03\x93\xec\x2a\x7e\xee\x87\xe9\xad\xbb\xab\x3d\x36\x7e\x56\
+\x9e\xb0\xb7\x1b\x54\x46\x72\x15\xea\xc8\xc4\xe4\xca\x66\x14\xdd\
+\x89\x2d\xa9\x0a\x4a\xd5\xf7\x96\xa0\x9e\x0e\x38\xf5\x26\xa8\xde\
+\x92\x75\x2a\x4e\x84\x8b\x7b\xb4\x4b\xb2\x44\xd4\x3a\x7e\xfd\x1c\
+\x47\xb9\xdb\x24\x3a\xa6\x7c\x44\xa7\x20\x14\x38\x90\x4a\x14\x02\
+\x94\x33\x83\xdc\x1e\xe0\x10\xd3\xa8\xf5\x3e\x9d\x37\xdb\x55\xd7\
+\x44\x68\xe3\xa5\x1c\xb7\x3a\x1f\x1b\xae\x8e\xcc\x53\x8e\xa5\x49\
+\x52\x09\x52\x82\x76\xed\x29\xec\x90\x3b\xf2\x7b\x54\x26\xac\x5a\
+\x70\x9e\x76\xcb\x63\x50\xf4\xde\xcb\xa4\xba\x77\xad\xc4\xfb\x54\
+\x37\x6f\x33\xb5\x88\xd3\xfa\x7d\xd7\x89\x25\x96\x92\xad\xe5\xd4\
+\x8c\xf6\x28\x51\x4e\x7d\x08\x1f\x15\x68\xca\xe8\xb7\x4f\xed\xb7\
+\xf9\x1a\x0a\xe3\xa6\x6c\xb0\xec\xc2\xca\x14\xde\xa8\x93\x79\x42\
+\x27\x19\xe7\x1e\x6f\x04\xbb\xb8\x23\xd7\x1b\x76\xf9\x71\x92\x0d\
+\x50\x5f\xa4\x27\x5c\x24\xf5\x61\xdb\x3f\xd9\xf4\xf2\x34\xeb\x16\
+\xc5\xba\xf7\x86\xdc\xcf\x1c\xbc\xf2\xf6\x8f\x10\x90\xda\x30\x40\
+\x40\x03\x83\xdc\xf3\x5b\xb5\x7f\x58\xb4\xce\xba\x44\x7b\x96\xbb\
+\xe9\x6c\x4b\xc6\xa4\x66\x22\x63\x2a\xe7\x1e\xf2\xf4\x46\xde\x09\
+\xfb\xaa\x5b\x28\x49\xc9\xc9\x3c\x85\x0e\xf8\xe0\x00\x2a\xdd\x51\
+\x6d\x54\x69\x32\x5a\xe5\x8f\x43\xe9\x3f\xd1\x77\x47\xf5\x12\xe3\
+\xa2\x60\xdf\x2f\x92\x67\xcc\xb6\x2c\x3d\x21\x48\x69\x6a\x53\xf2\
+\x30\xea\xc2\x7e\xf9\x42\x23\xed\x48\xed\xe7\xcf\x38\x15\x28\x83\
+\xd2\xad\x1f\xac\x2f\x9d\x19\xd4\x56\x9b\x04\x28\x96\x4b\xc4\x17\
+\x5d\xbf\x32\xde\x43\x45\xd8\xed\x85\xa8\x2b\x9e\xc5\x61\x68\xe3\
+\x1d\xaa\x8f\xbe\xf5\x44\xdd\x3a\x03\xa7\x7a\x52\x6c\x49\x65\x36\
+\x6b\x8a\xe7\x7e\xb2\x13\x37\x78\xdb\x95\x21\x5b\x3c\x2d\x83\x6f\
+\xfb\xa3\xbe\xe3\xf7\x7b\x73\xc5\xb3\xa2\xba\x88\xd6\x81\xfd\x16\
+\xae\x96\x3b\x86\xa6\xd3\x13\xa6\xcf\x88\xb4\x58\x22\xdb\xa7\x7d\
+\xa6\x74\x63\x29\x27\xc5\x0f\x20\x7f\x51\xe1\x85\x93\xcf\xef\x6e\
+\x1c\xf1\x91\x58\x89\x66\x5a\xf3\x6c\x40\xe6\x95\xd2\x3d\x47\xe8\
+\x85\xea\xf1\xa3\xb4\xe4\x1b\x7d\xea\x06\xb1\x4c\x46\x56\xc2\x15\
+\xbc\xc3\x90\xf0\x43\x09\x23\x3c\x81\xe3\xa0\x76\xcf\xec\xc9\xa9\
+\xee\xb7\xe8\xde\x80\xbb\x75\x0f\xa7\x3f\xd1\x0b\x2c\x66\xad\x08\
+\xbd\xcd\xb5\xdf\x5a\x19\xda\xea\xe2\x82\xb5\x25\xce\x4e\x32\x18\
+\x74\x77\xe7\x70\xed\x54\x3f\xe8\xef\xd6\x77\xba\x49\x22\xf2\x55\
+\xa7\x13\xa8\x22\x5c\xc3\x05\x51\xd5\x33\xc0\xf0\xdc\x65\x4a\x52\
+\x16\x0f\x86\xbc\x9f\x31\xf4\x1e\x87\x3c\x53\x9f\x4f\x7f\x48\x3b\
+\xce\x93\xd0\x9a\x9f\x4e\xbf\x63\x45\xc6\x6d\xea\x54\xa9\xac\x5c\
+\x15\x2c\xb6\x60\xbf\x21\xa2\x85\xad\x28\x28\x56\xee\x49\x56\x37\
+\x0e\xe7\xde\x84\xe3\xcc\x24\xa7\xc8\xb4\xf4\x9d\xef\x4d\x46\xfd\
+\x15\xba\xad\x7b\x89\xa6\x60\xce\xd3\xe8\xd6\x2a\x54\x2b\x5a\x9c\
+\x5a\x18\x53\x5e\x24\x14\xb0\x14\x50\x42\xb0\x3c\x8a\x20\x1e\x70\
+\x47\xad\x25\xbf\xf4\x43\x44\xea\x3e\xae\xf4\xd1\x16\xeb\x67\xea\
+\x5b\x56\xa5\xb2\xaa\xe7\x74\x83\x19\xd5\x14\x0f\x0d\xb4\x2c\xa5\
+\xb2\x4e\x46\xe2\xb4\xa4\xe3\x1c\x02\x47\x35\x49\xd8\x7a\x9e\x6d\
+\x1d\x01\xd4\x3d\x28\x36\x10\xf0\xbd\x5c\x51\x3b\xf5\x8f\xdb\x36\
+\x96\x76\xaa\x39\xd9\xe1\x6c\x3b\xbf\xdc\xfd\xf7\x0f\xbd\xdb\x8e\
+\x64\x37\xaf\xd2\x12\xf0\xf5\xf3\x40\x5e\xec\x96\x26\x6d\xb3\x34\
+\x74\x03\x08\x78\xd2\xbc\x74\x4d\x42\x9b\x43\x6a\xdc\x90\x84\x14\
+\x02\x12\x78\x04\xe3\x3d\xf8\xa9\xcc\x88\x70\x92\x64\xcf\xac\x3d\
+\x3e\xd2\x4a\xe9\x0e\xa3\xbc\x8d\x2d\xa7\xf4\x86\xa0\xb1\xdd\x36\
+\xdb\x58\xb7\xde\x5b\x92\xb9\xd0\xb7\xa1\x19\x71\x21\xd5\xf9\xc0\
+\x51\x51\xcf\x9b\xc9\xd8\x64\xd2\xae\xb6\xe8\x2d\x0d\x6c\xd6\xba\
+\x63\xa7\xba\x77\x47\x43\x89\x3f\x59\xa2\x0a\xdc\xba\x97\xd7\x9b\
+\x7a\x4b\xa8\x42\xbc\x16\xf3\xb4\x64\x21\x65\x44\xe4\x9d\xff\x00\
+\x02\xa9\xae\xa3\x6b\x4d\x0b\xaa\xa3\xce\x93\x68\xe9\x7b\x76\x0b\
+\xd4\xe7\xfc\x77\xa7\xb7\x7b\x75\xf4\x25\x65\x5b\x97\xb1\x92\x84\
+\xa5\x21\x47\x3c\x12\x40\x07\x8e\xc2\x9c\x7a\xc1\xd6\x39\xda\xef\
+\x58\xe9\xad\x51\x6f\xb3\x7e\xa1\x9b\xa7\xa3\x32\xd4\x62\x25\xfd\
+\xa3\x2e\x34\xe1\x71\x2e\x7d\xc4\xe3\x9c\x71\x83\xdb\xbd\x0d\xa0\
+\x50\x95\x91\x7b\x6b\x4e\x92\x68\x36\xa1\xeb\x5d\x2c\xe6\x93\xb1\
+\x69\xf8\xd6\x7b\x6a\x5d\xd3\xf7\xaf\xd7\x68\x5c\xd9\x72\x12\xd6\
+\xe5\x07\x5a\x2e\x95\x79\x95\xc6\x14\x90\x31\xdb\xd3\x1c\x69\xb4\
+\x0c\x1c\x0e\x7f\x8d\x5b\xbd\x44\xea\xa6\x91\xd7\x6b\x9d\x79\xbc\
+\xf4\xa2\x30\xd5\x93\x62\xf8\x4e\xdd\x63\xde\x9f\x6d\x90\xe8\x6f\
+\x62\x5e\xfb\x38\x4e\x37\x27\xca\x70\x56\x41\xda\x33\x9e\x73\x1c\
+\xd7\x5a\xee\x0e\xa5\xd0\xda\x57\x4d\xb1\xa3\xed\x56\x77\xac\x2c\
+\x29\x97\x6e\x11\x87\xed\x66\x92\x00\xdc\xae\x06\x32\x46\xe3\x92\
+\xac\xa8\x92\x31\x9c\x54\x49\xae\x45\xa1\x19\x25\xaa\x20\xb9\x52\
+\x7e\xe6\x73\x8f\x53\x58\xad\x41\x5c\xe3\x3f\x5a\xd8\x1b\xe3\xd3\
+\x93\x41\x4a\x02\xbd\xaa\xb7\x43\x1c\x59\xe5\xae\x03\xb7\x3b\xc4\
+\x2b\x6b\x40\x97\x65\x48\x6d\x84\x00\x39\x2a\x5a\x82\x47\xf1\x34\
+\x55\xf5\xfa\x14\x74\xda\x46\xae\xea\x9c\x7d\x4d\x29\x8f\xff\x00\
+\x45\xd3\xcb\x12\x16\xb2\x38\x72\x40\x1f\xb2\x40\xe3\x9c\x1f\x39\
+\xfa\x0f\x7a\x29\xb1\xd8\xcb\x53\x47\x62\x4f\xa7\x54\x55\x66\x8e\
+\x91\xd8\x6e\xff\x00\xf2\x34\xe4\x3b\x0a\xed\x1a\x2b\x87\x2e\x83\
+\xbb\xbe\x7f\x2f\xc9\xc3\xfd\x27\xfe\xfc\xbf\x27\x17\x2b\x9a\xf1\
+\x27\x1c\x57\x69\x51\x55\xfd\x0b\xff\x00\x4f\x2f\xc9\x1f\xa4\x7f\
+\xdf\x97\xe4\xe2\xd3\xea\x3d\x28\x90\x71\x08\x8f\x73\x5d\xa5\x45\
+\x1f\xa1\x7f\xe9\xe5\xf9\x0f\xd2\x7f\xef\xcb\xf2\x70\xfa\x4e\x07\
+\x35\xb1\xa0\x54\xad\xc7\xb0\xae\xdc\xa2\xaf\xfa\x2f\xfd\xf9\x7e\
+\x43\xf4\x8f\xfb\xf2\xfc\x9c\x5c\xca\xb6\xf0\x06\x4d\x6d\x71\x59\
+\x50\x1e\xb5\xd9\x94\x55\x1f\x40\xdd\xdf\x89\xe5\xf9\x27\xf4\x9f\
+\xfb\xf2\xfc\x9c\x64\xd9\xda\xb3\x5a\x26\x2f\x83\x9e\x31\x5d\xa9\
+\x45\x0b\xa0\xac\xef\xc4\xf2\xfc\x87\xe9\x3f\xf7\xe5\xf9\x3e\x77\
+\x6b\xa9\xdf\x63\xb6\xca\x92\x14\x01\x6d\xb3\x8f\xa9\xe0\x7f\x3a\
+\xa1\x11\x95\x3a\xa5\x7a\xe7\xd6\xbe\xc6\x51\x5d\x4c\x2e\x11\x61\
+\xe2\xd5\xef\x73\xa1\x84\xa0\xb0\xea\xd7\xb9\xf1\xec\x82\x71\x80\
+\x73\xf4\xaf\x12\x15\xef\xc5\x7d\x85\xa2\xb4\x64\x37\xf1\xb5\xbd\
+\x8f\x8f\x67\x8c\x1c\x63\x3c\xf3\x5e\x82\x08\xef\xe6\xaf\xb0\x74\
+\x51\x90\x38\xfd\xc7\xc7\xac\x71\x40\x49\xc5\x7d\x85\xa2\xa7\x20\
+\x71\xbb\x8f\x8f\x84\x64\x70\x70\x6b\xd0\x09\x1c\x02\x7d\x39\x3e\
+\x95\xf6\x0a\x8a\x8e\x19\x3c\x7e\xe3\xe3\xee\x14\x08\x0a\x38\x03\
+\xd7\x15\xe8\x27\x80\x08\xaf\xb0\x34\x51\xc3\x27\xda\x3b\x8f\x90\
+\x18\x24\x7d\xd0\x4d\x79\xb4\xfb\x1f\x73\xe9\x5f\x60\x28\xa8\xe1\
+\xf7\x83\xc4\x27\xc8\xf8\xff\x00\xb4\x15\x77\xfc\xeb\xcc\x6d\x00\
+\x03\x8c\x73\x8a\xfb\x03\x45\x4f\x0f\xbc\x3d\xa3\xb8\xf8\xfc\x8c\
+\x9c\x11\xc1\xf9\x15\xe8\xc2\x95\xc2\x52\x33\x5f\x60\x28\xa3\x86\
+\x0b\x11\x6e\x47\xc8\x15\x0c\x63\x90\x4f\xf6\xab\xc2\x93\xff\x00\
+\x2b\x8e\xfe\xb5\xf5\xfe\x8a\x8e\x1f\x79\x2f\x13\x7e\x47\xc8\x21\
+\xbb\x1b\x4f\x6f\x7c\xf6\xa3\x82\x0a\x47\xf0\x3d\xeb\xeb\xed\x14\
+\x70\xbb\xc3\xda\x7b\x8f\x90\x24\x01\x94\x9c\xfb\xf3\xef\x5e\xe5\
+\x58\x20\x13\x8a\xfa\xfb\x45\x1c\x3e\xf0\xf6\x9e\xe3\xe4\x0a\x54\
+\x40\xe1\x47\xbf\x3c\x56\x1b\x95\x93\xc7\x7f\x5e\x6b\xec\x0d\x14\
+\x70\xc3\xda\x7b\x8f\x8f\xe0\x10\xac\xf6\x3d\xfb\x77\xaf\x54\xae\
+\x30\x09\xcf\xc8\xaf\xaf\xf4\x51\xc3\xef\x0f\x69\xee\x3e\x3f\x61\
+\x4a\xf5\xc7\xcd\x03\x68\xce\x72\x4e\x6b\xec\x0d\x15\x3c\x3e\xf2\
+\x3d\xa3\xb8\xf9\x00\x79\x1d\xf1\x9e\xc6\xb1\x52\x94\x7d\x41\x15\
+\xf6\x06\x8a\x38\x60\xf1\x17\xe4\x7c\x7d\xff\x00\xaa\x6b\xd0\x94\
+\x93\x9f\x7e\x3d\xeb\xec\x0d\x14\x70\xfb\xc8\xf6\x8e\xe3\xe4\x07\
+\x38\xe0\x8f\xf2\xac\x52\x3c\xb9\x38\xc5\x7d\x81\xa2\x8e\x19\x2f\
+\x11\xdc\x7c\x7f\x1c\x64\x0c\x8c\x77\x19\xc5\x62\xa7\x01\xc2\x73\
+\xc7\xd2\xbe\xc1\x51\x47\x0c\x87\x88\x7d\x87\xc8\x5b\x7c\x1b\x95\
+\xcd\xf0\xc5\xb2\x0c\xb9\xce\x13\xe5\x4c\x76\x14\xe1\x27\xe8\x33\
+\x57\x8f\x48\x7f\x45\xcd\x7b\xab\xe6\x33\x2f\x53\x46\x77\x4b\xd9\
+\xb2\x0a\xd7\x24\x62\x4b\x89\xe3\x84\x35\xdc\x64\x1e\xea\xc7\xd0\
+\xd7\xd0\x9a\x2a\x54\x12\x2b\x2a\xcd\xa1\x8b\x41\xe9\x2b\x0e\x88\
+\xd2\xf1\x34\xe6\x9b\x82\x98\x76\xf8\xc3\xca\x91\xca\x96\xa3\xdd\
+\x6b\x3f\xbc\xa3\xea\x68\xa7\xda\x2a\xe2\x42\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x0f\xff\xd9\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0b\
+\x08\x01\x81\xe7\
+\x00\x65\
+\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x2e\x00\x6a\x00\x70\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/effects/README b/examples/effects/README
new file mode 100644
index 0000000..d187394
--- /dev/null
+++ b/examples/effects/README
@@ -0,0 +1,25 @@
+PyQt supports a number of graphics effects including blurring, drop shadows,
+opacity and colorizing.
+
+These examples demonstrate these different effects.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/effects/lighting.py b/examples/effects/lighting.py
new file mode 100644
index 0000000..8a7debd
--- /dev/null
+++ b/examples/effects/lighting.py
@@ -0,0 +1,149 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import QPointF, Qt, QTimer
+from PyQt5.QtGui import (QBrush, QColor, QLinearGradient, QPen, QPainter,
+        QPixmap, QRadialGradient)
+from PyQt5.QtWidgets import (QApplication, QFrame, QGraphicsDropShadowEffect,
+        QGraphicsEllipseItem, QGraphicsRectItem, QGraphicsScene, QGraphicsView)
+
+
+class Lighting(QGraphicsView):
+    def __init__(self, parent=None):
+        super(Lighting, self).__init__(parent)
+
+        self.angle = 0.0
+        self.m_scene = QGraphicsScene()
+        self.m_lightSource = None
+        self.m_items = []
+
+        self.setScene(self.m_scene)
+
+        self.setupScene()
+
+        timer = QTimer(self)
+        timer.timeout.connect(self.animate)
+        timer.setInterval(30)
+        timer.start()
+
+        self.setRenderHint(QPainter.Antialiasing)
+        self.setFrameStyle(QFrame.NoFrame)
+
+    def setupScene(self):
+        self.m_scene.setSceneRect(-300, -200, 600, 460)
+
+        linearGrad = QLinearGradient(QPointF(-100, -100), QPointF(100, 100))
+        linearGrad.setColorAt(0, QColor(255, 255, 255))
+        linearGrad.setColorAt(1, QColor(192, 192, 255))
+        self.setBackgroundBrush(linearGrad)
+
+        radialGrad = QRadialGradient(30, 30, 30)
+        radialGrad.setColorAt(0, Qt.yellow)
+        radialGrad.setColorAt(0.2, Qt.yellow)
+        radialGrad.setColorAt(1, Qt.transparent)
+
+        pixmap = QPixmap(60, 60)
+        pixmap.fill(Qt.transparent)
+
+        painter = QPainter(pixmap)
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(radialGrad)
+        painter.drawEllipse(0, 0, 60, 60)
+        painter.end()
+
+        self.m_lightSource = self.m_scene.addPixmap(pixmap)
+        self.m_lightSource.setZValue(2)
+
+        for i in range(-2, 3):
+            for j in range(-2, 3):
+                if (i + j) & 1:
+                    item = QGraphicsEllipseItem(0, 0, 50, 50)
+                else:
+                    item = QGraphicsRectItem(0, 0, 50, 50)
+
+                item.setPen(QPen(Qt.black, 1))
+                item.setBrush(QBrush(Qt.white))
+
+                effect = QGraphicsDropShadowEffect(self)
+                effect.setBlurRadius(8)
+                item.setGraphicsEffect(effect)
+                item.setZValue(1)
+                item.setPos(i * 80, j * 80)
+                self.m_scene.addItem(item)
+                self.m_items.append(item)
+
+    def animate(self):
+        self.angle += (math.pi / 30)
+        xs = 200 * math.sin(self.angle) - 40 + 25
+        ys = 200 * math.cos(self.angle) - 40 + 25
+        self.m_lightSource.setPos(xs, ys)
+
+        for item in self.m_items:
+            effect = item.graphicsEffect()
+
+            delta = QPointF(item.x() - xs, item.y() - ys)
+            effect.setOffset(QPointF(delta.toPoint() / 30))
+
+            dd = math.hypot(delta.x(), delta.y())
+            color = effect.color()
+            color.setAlphaF(max(0.4, min(1 - dd / 200.0, 0.7)))
+            effect.setColor(color)
+
+        self.m_scene.update()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    lighting = Lighting()
+    lighting.setWindowTitle("Lighting and Shadows")
+    lighting.resize(640, 480)
+    lighting.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/graphicsview/README b/examples/graphicsview/README
new file mode 100644
index 0000000..d8baccd
--- /dev/null
+++ b/examples/graphicsview/README
@@ -0,0 +1,26 @@
+PyQt is provided with a comprehensive canvas through the GraphicsView
+classes.
+
+These examples demonstrate the fundamental aspects of canvas programming
+with PyQt.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/graphicsview/anchorlayout.py b/examples/graphicsview/anchorlayout.py
new file mode 100755
index 0000000..b7b6ae3
--- /dev/null
+++ b/examples/graphicsview/anchorlayout.py
@@ -0,0 +1,130 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QSizeF, Qt
+from PyQt5.QtWidgets import (QApplication, QGraphicsAnchorLayout,
+        QGraphicsProxyWidget, QGraphicsScene, QGraphicsView, QGraphicsWidget,
+        QPushButton, QSizePolicy)
+
+
+def createItem(minimum, preferred, maximum, name):
+    w = QGraphicsProxyWidget()
+
+    w.setWidget(QPushButton(name))
+    w.setMinimumSize(minimum)
+    w.setPreferredSize(preferred)
+    w.setMaximumSize(maximum)
+    w.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
+
+    return w
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    scene = QGraphicsScene()
+    scene.setSceneRect(0, 0, 800, 480)
+
+    minSize = QSizeF(30, 100)
+    prefSize = QSizeF(210, 100)
+    maxSize = QSizeF(300, 100)
+
+    a = createItem(minSize, prefSize, maxSize, "A")
+    b = createItem(minSize, prefSize, maxSize, "B")
+    c = createItem(minSize, prefSize, maxSize, "C")
+    d = createItem(minSize, prefSize, maxSize, "D")
+    e = createItem(minSize, prefSize, maxSize, "E")
+    f = createItem(QSizeF(30, 50), QSizeF(150, 50), maxSize, "F")
+    g = createItem(QSizeF(30, 50), QSizeF(30, 100), maxSize, "G")
+
+    l = QGraphicsAnchorLayout()
+    l.setSpacing(0)
+
+    w = QGraphicsWidget(None, Qt.Window)
+    w.setPos(20, 20)
+    w.setLayout(l)
+
+    # Vertical.
+    l.addAnchor(a, Qt.AnchorTop, l, Qt.AnchorTop)
+    l.addAnchor(b, Qt.AnchorTop, l, Qt.AnchorTop)
+
+    l.addAnchor(c, Qt.AnchorTop, a, Qt.AnchorBottom)
+    l.addAnchor(c, Qt.AnchorTop, b, Qt.AnchorBottom)
+    l.addAnchor(c, Qt.AnchorBottom, d, Qt.AnchorTop)
+    l.addAnchor(c, Qt.AnchorBottom, e, Qt.AnchorTop)
+
+    l.addAnchor(d, Qt.AnchorBottom, l, Qt.AnchorBottom)
+    l.addAnchor(e, Qt.AnchorBottom, l, Qt.AnchorBottom)
+
+    l.addAnchor(c, Qt.AnchorTop, f, Qt.AnchorTop)
+    l.addAnchor(c, Qt.AnchorVerticalCenter, f, Qt.AnchorBottom)
+    l.addAnchor(f, Qt.AnchorBottom, g, Qt.AnchorTop)
+    l.addAnchor(c, Qt.AnchorBottom, g, Qt.AnchorBottom)
+
+    # Horizontal.
+    l.addAnchor(l, Qt.AnchorLeft, a, Qt.AnchorLeft)
+    l.addAnchor(l, Qt.AnchorLeft, d, Qt.AnchorLeft)
+    l.addAnchor(a, Qt.AnchorRight, b, Qt.AnchorLeft)
+
+    l.addAnchor(a, Qt.AnchorRight, c, Qt.AnchorLeft)
+    l.addAnchor(c, Qt.AnchorRight, e, Qt.AnchorLeft)
+
+    l.addAnchor(b, Qt.AnchorRight, l, Qt.AnchorRight)
+    l.addAnchor(e, Qt.AnchorRight, l, Qt.AnchorRight)
+    l.addAnchor(d, Qt.AnchorRight, e, Qt.AnchorLeft)
+
+    l.addAnchor(l, Qt.AnchorLeft, f, Qt.AnchorLeft)
+    l.addAnchor(l, Qt.AnchorLeft, g, Qt.AnchorLeft)
+    l.addAnchor(f, Qt.AnchorRight, g, Qt.AnchorRight)
+
+    scene.addItem(w)
+    scene.setBackgroundBrush(Qt.darkGreen)
+
+    view = QGraphicsView(scene)
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/graphicsview/collidingmice/collidingmice.py b/examples/graphicsview/collidingmice/collidingmice.py
new file mode 100755
index 0000000..bc783c7
--- /dev/null
+++ b/examples/graphicsview/collidingmice/collidingmice.py
@@ -0,0 +1,221 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import (qAbs, QLineF, QPointF, QRectF, qrand, qsrand, Qt,
+        QTime, QTimer)
+from PyQt5.QtGui import (QBrush, QColor, QPainter, QPainterPath, QPixmap,
+        QPolygonF)
+from PyQt5.QtWidgets import (QApplication, QGraphicsItem, QGraphicsScene,
+        QGraphicsView, QGraphicsWidget)
+
+import mice_rc
+
+
+class Mouse(QGraphicsItem):
+    Pi = math.pi
+    TwoPi = 2.0 * Pi
+
+    # Create the bounding rectangle once.
+    adjust = 0.5
+    BoundingRect = QRectF(-20 - adjust, -22 - adjust, 40 + adjust, 83 + adjust)
+
+    def __init__(self):
+        super(Mouse, self).__init__()
+
+        self.angle = 0.0
+        self.speed = 0.0
+        self.mouseEyeDirection = 0.0
+        self.color = QColor(qrand() % 256, qrand() % 256, qrand() % 256)
+
+        self.setRotation(qrand() % (360 * 16))
+
+        # In the C++ version of this example, this class is also derived from
+        # QObject in order to receive timer events.  PyQt does not support
+        # deriving from more than one wrapped class so we just create an
+        # explicit timer instead.
+        self.timer = QTimer()
+        self.timer.timeout.connect(self.timerEvent)
+        self.timer.start(1000 / 33)
+
+    @staticmethod
+    def normalizeAngle(angle):
+        while angle < 0:
+            angle += Mouse.TwoPi
+        while angle > Mouse.TwoPi:
+            angle -= Mouse.TwoPi
+        return angle
+
+    def boundingRect(self):
+        return Mouse.BoundingRect
+
+    def shape(self):
+        path = QPainterPath()
+        path.addRect(-10, -20, 20, 40)
+        return path;
+
+    def paint(self, painter, option, widget):
+        # Body.
+        painter.setBrush(self.color)
+        painter.drawEllipse(-10, -20, 20, 40)
+
+        # Eyes.
+        painter.setBrush(Qt.white)
+        painter.drawEllipse(-10, -17, 8, 8)
+        painter.drawEllipse(2, -17, 8, 8)
+
+        # Nose.
+        painter.setBrush(Qt.black)
+        painter.drawEllipse(QRectF(-2, -22, 4, 4))
+
+        # Pupils.
+        painter.drawEllipse(QRectF(-8.0 + self.mouseEyeDirection, -17, 4, 4))
+        painter.drawEllipse(QRectF(4.0 + self.mouseEyeDirection, -17, 4, 4))
+
+        # Ears.
+        if self.scene().collidingItems(self):
+            painter.setBrush(Qt.red)
+        else:
+            painter.setBrush(Qt.darkYellow)
+
+        painter.drawEllipse(-17, -12, 16, 16)
+        painter.drawEllipse(1, -12, 16, 16)
+
+        # Tail.
+        path = QPainterPath(QPointF(0, 20))
+        path.cubicTo(-5, 22, -5, 22, 0, 25)
+        path.cubicTo(5, 27, 5, 32, 0, 30)
+        path.cubicTo(-5, 32, -5, 42, 0, 35)
+        painter.setBrush(Qt.NoBrush)
+        painter.drawPath(path)
+
+    def timerEvent(self):
+        # Don't move too far away.
+        lineToCenter = QLineF(QPointF(0, 0), self.mapFromScene(0, 0))
+        if lineToCenter.length() > 150:
+            angleToCenter = math.acos(lineToCenter.dx() / lineToCenter.length())
+            if lineToCenter.dy() < 0:
+                angleToCenter = Mouse.TwoPi - angleToCenter;
+            angleToCenter = Mouse.normalizeAngle((Mouse.Pi - angleToCenter) + Mouse.Pi / 2)
+
+            if angleToCenter < Mouse.Pi and angleToCenter > Mouse.Pi / 4:
+                # Rotate left.
+                self.angle += [-0.25, 0.25][self.angle < -Mouse.Pi / 2]
+            elif angleToCenter >= Mouse.Pi and angleToCenter < (Mouse.Pi + Mouse.Pi / 2 + Mouse.Pi / 4):
+                # Rotate right.
+                self.angle += [-0.25, 0.25][self.angle < Mouse.Pi / 2]
+        elif math.sin(self.angle) < 0:
+            self.angle += 0.25
+        elif math.sin(self.angle) > 0:
+            self.angle -= 0.25
+
+        # Try not to crash with any other mice.
+        dangerMice = self.scene().items(QPolygonF([self.mapToScene(0, 0),
+                                                         self.mapToScene(-30, -50),
+                                                         self.mapToScene(30, -50)]))
+
+        for item in dangerMice:
+            if item is self:
+                continue
+        
+            lineToMouse = QLineF(QPointF(0, 0), self.mapFromItem(item, 0, 0))
+            angleToMouse = math.acos(lineToMouse.dx() / lineToMouse.length())
+            if lineToMouse.dy() < 0:
+                angleToMouse = Mouse.TwoPi - angleToMouse
+            angleToMouse = Mouse.normalizeAngle((Mouse.Pi - angleToMouse) + Mouse.Pi / 2)
+
+            if angleToMouse >= 0 and angleToMouse < Mouse.Pi / 2:
+                # Rotate right.
+                self.angle += 0.5
+            elif angleToMouse <= Mouse.TwoPi and angleToMouse > (Mouse.TwoPi - Mouse.Pi / 2):
+                # Rotate left.
+                self.angle -= 0.5
+
+        # Add some random movement.
+        if len(dangerMice) > 1 and (qrand() % 10) == 0:
+            if qrand() % 1:
+                self.angle += (qrand() % 100) / 500.0
+            else:
+                self.angle -= (qrand() % 100) / 500.0
+
+        self.speed += (-50 + qrand() % 100) / 100.0
+
+        dx = math.sin(self.angle) * 10
+        self.mouseEyeDirection = 0.0 if qAbs(dx / 5) < 1 else dx / 5
+
+        self.setRotation(self.rotation() + dx)
+        self.setPos(self.mapToParent(0, -(3 + math.sin(self.speed) * 3)))
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    MouseCount = 7
+
+    app = QApplication(sys.argv)
+    qsrand(QTime(0,0,0).secsTo(QTime.currentTime()))
+
+    scene = QGraphicsScene()
+    scene.setSceneRect(-300, -300, 600, 600)
+    scene.setItemIndexMethod(QGraphicsScene.NoIndex)
+
+    for i in range(MouseCount):
+        mouse = Mouse()
+        mouse.setPos(math.sin((i * 6.28) / MouseCount) * 200,
+                     math.cos((i * 6.28) / MouseCount) * 200)
+        scene.addItem(mouse)
+
+    view = QGraphicsView(scene)
+    view.setRenderHint(QPainter.Antialiasing)
+    view.setBackgroundBrush(QBrush(QPixmap(':/images/cheese.jpg')))
+    view.setCacheMode(QGraphicsView.CacheBackground)
+    view.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
+    view.setDragMode(QGraphicsView.ScrollHandDrag)
+    view.setWindowTitle("Colliding Mice")
+    view.resize(400, 300)
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/graphicsview/collidingmice/images/cheese.jpg b/examples/graphicsview/collidingmice/images/cheese.jpg
new file mode 100644
index 0000000..dea5795
Binary files /dev/null and b/examples/graphicsview/collidingmice/images/cheese.jpg differ
diff --git a/examples/graphicsview/collidingmice/mice.qrc b/examples/graphicsview/collidingmice/mice.qrc
new file mode 100644
index 0000000..accdb4d
--- /dev/null
+++ b/examples/graphicsview/collidingmice/mice.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/" >
+        <file>images/cheese.jpg</file>
+    </qresource>
+</RCC>
diff --git a/examples/graphicsview/collidingmice/mice_rc.py b/examples/graphicsview/collidingmice/mice_rc.py
new file mode 100644
index 0000000..5c128cf
--- /dev/null
+++ b/examples/graphicsview/collidingmice/mice_rc.py
@@ -0,0 +1,230 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 5 04:43:58 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x0b\xd5\
+\xff\
+\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x02\x01\x00\x48\x00\
+\x48\x00\x00\xff\xee\x00\x0e\x41\x64\x6f\x62\x65\x00\x64\x40\x00\
+\x00\x00\x01\xff\xdb\x00\x84\x00\x02\x02\x02\x02\x02\x02\x02\x02\
+\x02\x02\x03\x02\x02\x02\x03\x04\x03\x02\x02\x03\x04\x05\x04\x04\
+\x04\x04\x04\x05\x06\x05\x05\x05\x05\x05\x05\x06\x06\x07\x07\x08\
+\x07\x07\x06\x09\x09\x0a\x0a\x09\x09\x0c\x0c\x0c\x0c\x0c\x0c\x0c\
+\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x01\x03\x03\x03\x05\x04\x05\x09\
+\x06\x06\x09\x0d\x0a\x09\x0a\x0d\x0f\x0e\x0e\x0e\x0e\x0f\x0f\x0c\
+\x0c\x0c\x0c\x0c\x0f\x0f\x0c\x0c\x0c\x0c\x0c\x0c\x0f\x0c\x0c\x0c\
+\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\
+\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\xff\xc0\x00\x11\x08\x00\x5e\
+\x00\x5e\x03\x01\x11\x00\x02\x11\x01\x03\x11\x01\xff\xdd\x00\x04\
+\x00\x0c\xff\xc4\x01\xa2\x00\x00\x00\x07\x01\x01\x01\x01\x01\x00\
+\x00\x00\x00\x00\x00\x00\x00\x04\x05\x03\x02\x06\x01\x00\x07\x08\
+\x09\x0a\x0b\x01\x00\x02\x02\x03\x01\x01\x01\x01\x01\x00\x00\x00\
+\x00\x00\x00\x00\x01\x00\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\
+\x10\x00\x02\x01\x03\x03\x02\x04\x02\x06\x07\x03\x04\x02\x06\x02\
+\x73\x01\x02\x03\x11\x04\x00\x05\x21\x12\x31\x41\x51\x06\x13\x61\
+\x22\x71\x81\x14\x32\x91\xa1\x07\x15\xb1\x42\x23\xc1\x52\xd1\xe1\
+\x33\x16\x62\xf0\x24\x72\x82\xf1\x25\x43\x34\x53\x92\xa2\xb2\x63\
+\x73\xc2\x35\x44\x27\x93\xa3\xb3\x36\x17\x54\x64\x74\xc3\xd2\xe2\
+\x08\x26\x83\x09\x0a\x18\x19\x84\x94\x45\x46\xa4\xb4\x56\xd3\x55\
+\x28\x1a\xf2\xe3\xf3\xc4\xd4\xe4\xf4\x65\x75\x85\x95\xa5\xb5\xc5\
+\xd5\xe5\xf5\x66\x76\x86\x96\xa6\xb6\xc6\xd6\xe6\xf6\x37\x47\x57\
+\x67\x77\x87\x97\xa7\xb7\xc7\xd7\xe7\xf7\x38\x48\x58\x68\x78\x88\
+\x98\xa8\xb8\xc8\xd8\xe8\xf8\x29\x39\x49\x59\x69\x79\x89\x99\xa9\
+\xb9\xc9\xd9\xe9\xf9\x2a\x3a\x4a\x5a\x6a\x7a\x8a\x9a\xaa\xba\xca\
+\xda\xea\xfa\x11\x00\x02\x02\x01\x02\x03\x05\x05\x04\x05\x06\x04\
+\x08\x03\x03\x6d\x01\x00\x02\x11\x03\x04\x21\x12\x31\x41\x05\x51\
+\x13\x61\x22\x06\x71\x81\x91\x32\xa1\xb1\xf0\x14\xc1\xd1\xe1\x23\
+\x42\x15\x52\x62\x72\xf1\x33\x24\x34\x43\x82\x16\x92\x53\x25\xa2\
+\x63\xb2\xc2\x07\x73\xd2\x35\xe2\x44\x83\x17\x54\x93\x08\x09\x0a\
+\x18\x19\x26\x36\x45\x1a\x27\x64\x74\x55\x37\xf2\xa3\xb3\xc3\x28\
+\x29\xd3\xe3\xf3\x84\x94\xa4\xb4\xc4\xd4\xe4\xf4\x65\x75\x85\x95\
+\xa5\xb5\xc5\xd5\xe5\xf5\x46\x56\x66\x76\x86\x96\xa6\xb6\xc6\xd6\
+\xe6\xf6\x47\x57\x67\x77\x87\x97\xa7\xb7\xc7\xd7\xe7\xf7\x38\x48\
+\x58\x68\x78\x88\x98\xa8\xb8\xc8\xd8\xe8\xf8\x39\x49\x59\x69\x79\
+\x89\x99\xa9\xb9\xc9\xd9\xe9\xf9\x2a\x3a\x4a\x5a\x6a\x7a\x8a\x9a\
+\xaa\xba\xca\xda\xea\xfa\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\
+\x11\x00\x3f\x00\xfb\x41\xd3\x6f\xa2\x87\xc7\x3c\x37\x89\xe9\xd4\
+\xe9\xe2\x6b\x90\x29\x6e\xa3\x72\x4d\x0d\x0f\x8f\xf0\xc8\x82\xa5\
+\xb2\x41\x5a\x86\xfa\x46\xf9\x22\x37\x50\xa6\x63\xe5\xe2\x76\xf9\
+\x60\xe4\x95\xc1\x48\xd8\x74\x3d\x46\x0b\x56\xa4\x9a\x18\x14\x31\
+\x60\xa4\xec\x6b\xe3\x92\x1b\xa0\xac\x49\x92\x51\x1b\x02\xad\xc8\
+\x91\xb7\xea\xc2\x84\x34\xaf\xc5\x8e\xfb\x77\xc9\x81\x6c\x49\x62\
+\x3a\xaf\x9e\x3c\xbf\xa3\xcc\x6d\xee\xef\x2b\x38\x34\x68\x61\x1e\
+\xa3\x03\xfe\x55\x36\x1f\x7e\x3c\x51\x09\x11\x94\x91\xfa\x47\x9a\
+\xb4\x9d\x6e\xa9\x61\x75\xce\x50\x2a\x60\x70\x51\xe9\xec\x0f\x5f\
+\xa3\x11\x38\xc8\xd2\x0c\x65\x16\x48\x25\x3c\x5b\x7f\x0c\x4c\x37\
+\x5e\x2d\x9f\xff\xd0\xfb\x3a\xfb\x0a\xee\x4d\x6b\x4c\xf0\xb0\x1e\
+\xa1\x6f\x2d\xfa\x6e\x71\x21\x34\xb8\x11\x5e\x9b\xe4\x50\xd3\x53\
+\xa7\x8e\xe7\x25\x6a\xda\xd0\xee\x48\x03\xc7\x04\x95\x4e\x59\x12\
+\x15\x2e\xce\x02\x81\x52\x7e\x59\x00\x2d\x2f\x9c\xbf\x36\xbc\xc7\
+\xa8\x98\xa5\x5d\x1f\xce\x9a\x7e\x8f\x67\x14\x6c\xb7\x36\xf1\xd5\
+\xef\x5d\xc8\x20\x08\xe8\x0f\x1a\xd7\xae\xc4\x65\xb8\xf2\x00\x6a\
+\x89\xfb\x99\xc6\x16\x37\x67\x9f\x93\xcf\xa8\xdc\xf9\x2a\xda\xe2\
+\xfe\x49\xa6\x9d\xee\x65\x58\xee\x2e\x09\x77\x68\xd4\x2d\x0d\x4e\
+\xf5\xa9\x3d\x72\x73\x02\xb8\xbb\xda\xe5\xb4\xa9\x96\xf9\xa2\x6b\
+\x8b\x2d\x12\xfa\xea\xdc\x11\x3d\x38\x44\x47\x50\x5b\x6a\xfd\x19\
+\x5c\xe5\x51\xd9\x61\x1e\x29\x51\x7c\xdf\x17\x97\xda\xf2\x43\x35\
+\xc2\x16\x66\x35\x24\xd4\xd0\x93\x95\x44\x97\x22\x42\x99\x5e\x9b\
+\xa3\x5c\xe9\x77\x56\xd7\x56\xfc\x97\x83\x06\x53\x4e\x84\x65\x73\
+\xca\x8e\x0b\x7b\xbf\xac\x46\x9e\x2f\x3d\x3d\xcc\x3e\xa7\xa7\xef\
+\x4e\x9f\x7e\x65\xf8\x9e\x9e\x2f\x27\x13\x87\x7a\x7f\xff\xd1\xfb\
+\x3f\x4a\xed\xd4\xf6\xcf\x0b\xa7\xa8\x51\x79\x15\x3f\xd6\x3d\xb0\
+\x88\x71\x2d\xd2\x81\x9a\x84\x16\x6a\x7b\x64\xbc\x26\x06\x61\xc6\
+\x70\x4a\x91\x4a\x74\x22\x98\xf8\x74\x8e\x30\x55\xd4\x87\x07\x6e\
+\xdb\x8c\x8f\x0b\x3b\x40\xde\xda\x0b\x88\x9a\x16\x62\x12\x4a\x83\
+\xc4\xd1\xa8\x7c\x0e\xf9\x20\x05\xee\xac\x15\xbf\x2b\x7c\xb5\x3d\
+\xe0\xbb\x9e\x59\x1b\xe2\xe4\xc8\x62\x42\xff\x00\x21\x25\x4f\xdf\
+\xc7\x2c\x88\xc5\xd6\xfd\xcc\xbc\x49\x8e\x54\xf4\x6b\x2b\x5b\x2d\
+\x3a\xd6\x1b\x2b\x0b\x65\xb6\xb4\x80\x11\x1c\x29\xfe\x51\xab\x13\
+\xee\x4e\xe7\x21\x96\x7c\x67\x95\x00\xc0\x0e\xa7\x9a\xdd\x4e\xca\
+\x3d\x4e\xc2\xe6\xcd\xb6\x12\x80\x50\x9e\xcc\x37\x15\xca\xc4\x44\
+\xbd\x27\xab\x21\x23\x13\x61\x85\x69\xbe\x5c\x92\xdd\xbd\x3b\x8b\
+\x76\x4a\x1d\xd5\xc6\xff\x00\xdb\x98\xd9\x23\x2c\x47\x84\xb9\x3c\
+\x42\x7b\xb2\xdf\xd0\x29\x38\x58\x91\x15\x55\x57\x76\x3f\x65\x47\
+\x72\x4f\xb6\x47\x06\x9a\x59\x32\xd0\x3b\x75\x3d\xc1\xae\x79\xc4\
+\x42\x61\xe9\xdb\x95\x16\xf4\xff\x00\x47\x54\xf4\xf9\x53\xf6\x69\
+\xc7\x95\x3f\x1c\xd8\xdc\x38\xab\xf8\x7f\x43\x8b\x52\xab\xea\xff\
+\x00\xff\xd2\xfb\x3e\x0f\x2d\x80\xa9\xcf\x0a\xb7\xa8\x4a\x2f\xe7\
+\x8e\xda\x39\xee\x66\x71\x1c\x50\x21\x79\x1c\xf4\x01\x45\x49\x39\
+\x7c\x48\x02\xcb\x59\xb2\x68\x3e\x52\xf3\x27\xe6\x7f\x9a\xf5\x4b\
+\xe9\x62\xd0\x49\xd3\x6c\x51\x88\x8d\xd2\x9e\xab\x81\xdd\x9c\x83\
+\xd7\xc0\x65\x3e\x29\x9f\x5a\x72\x23\x86\x31\xe7\xba\x71\xe5\x5f\
+\x3e\x79\xa2\xd6\xee\x08\xf5\x8b\x87\xbe\xb5\x94\x81\x22\x4c\x01\
+\x60\x0f\x52\xac\x05\x76\xf7\xc8\x1c\x86\x06\xed\x12\xc4\x25\xc8\
+\x53\xe9\x9b\x49\x96\x45\x8a\x68\xdb\x9c\x52\x85\x64\x61\xd0\xa9\
+\x1b\x66\x41\x20\x8b\x0e\x3c\x6c\x1a\x4c\x4d\x08\x3b\x74\x39\x53\
+\x6a\xd0\xb4\xad\x0d\x3d\xb0\x5a\xb7\xb8\x20\x56\x83\x1b\x55\xe2\
+\x4e\x3d\x45\x6a\x30\x91\x6a\xa1\x15\xed\xd4\x44\x8a\x2c\xb1\x8f\
+\xb0\x8e\xa1\xa9\xf2\xae\xf9\x31\x9a\x63\x6d\x8f\xbc\x02\xd6\x60\
+\x3d\xcb\xa4\xbc\xbc\xb9\xf8\x5d\xb8\x45\xfc\x8a\x02\x83\xf3\x00\
+\x63\x3c\xb2\x90\xa3\xb0\xee\x00\x01\xf6\x2c\x71\x81\xc9\xc6\x36\
+\xe2\x14\x1d\x89\xf8\xbe\xef\xeb\x95\x58\x6c\xa7\xff\xd3\xfb\x3c\
+\xa4\x0e\x9b\x30\xf0\xcf\x07\xb7\xa9\x48\xfc\xc9\x66\xf7\xbe\x5f\
+\xd6\xe0\x88\x16\x96\x58\x1b\x8a\x8e\xa4\x0a\x13\xf8\x64\xc8\x33\
+\x89\x01\x61\xb4\xc1\x2f\x9e\x34\x6f\x29\x2b\x86\x01\x0a\x90\x76\
+\x04\x6f\x53\x98\xd0\x90\xe4\x79\xb9\x99\x3c\x99\xef\xf8\x20\x08\
+\x22\x67\x00\x48\xa7\x96\xc3\x31\x67\x9a\xe7\xc3\xd1\x63\x10\x05\
+\xbd\x3f\x46\xb2\x7b\x4d\x26\xc6\x19\x3e\xd8\x5a\xa8\x3d\x81\x35\
+\x19\xb5\x84\x0c\x31\x80\x7b\x9d\x7c\x88\x33\x34\x9b\x00\x6a\x7a\
+\xef\x4e\x4d\xef\xed\x90\x3c\x99\x86\xb8\x35\x09\x00\x91\x5a\x57\
+\xb7\xcb\x10\x0f\x35\xb5\x8c\xac\x0d\x6b\x81\x2d\xa9\xad\x01\xf0\
+\x39\x24\x2e\xe3\x4e\x84\x0f\x0e\xf8\x15\x7d\x48\x1e\x07\x25\x41\
+\x5d\xc8\xd4\xf8\xf8\xd7\x23\x4a\xff\x00\xff\xd4\xfb\x43\xc9\x29\
+\xd8\x1c\xf0\x7a\x7a\x85\x1e\x7f\x1f\x7a\x74\x20\xf4\xc9\xc4\xf0\
+\x9b\x1c\xd4\x8b\x4b\xad\xb4\x7d\x14\x4e\xed\x0c\xbf\x55\x94\xb1\
+\x66\x8e\x5a\x94\xff\x00\x60\xc0\x7e\x07\x27\x9b\x06\x3c\xfb\xc6\
+\x5c\x27\xb8\xdd\x7c\x08\xfd\x2b\x1c\xd2\x86\xc4\x5a\x7f\x27\xe8\
+\xab\x60\xbe\xa4\xab\x78\xca\x28\x21\x8c\x1a\x13\xdb\x93\x35\x36\
+\xc4\x69\xf1\x42\x62\x52\x90\xc9\x5d\x22\x0e\xfe\xf2\x40\x6a\xf1\
+\x72\x4f\x90\xaf\x34\x2a\xb3\xdc\xb9\x9d\xf8\xaa\xb1\x3c\x40\xd8\
+\x7c\x80\xf0\x18\x72\xe4\x96\x42\x65\x2e\x65\x94\x00\x88\xa0\xaa\
+\x40\x3f\x3e\x94\xca\x3a\x33\x73\x31\x20\x06\xdc\x2e\xca\xb5\xfd\
+\x58\x6c\xf5\x45\x21\xdc\x6f\xb0\x26\xa7\x14\xac\x0a\x7a\xd7\xe5\
+\x8a\x55\x14\x13\xd0\xf6\xeb\x8d\xa1\x7d\x09\x34\x1d\xf0\xda\xb8\
+\xc4\x79\xaa\x72\x52\x4f\x5d\xf6\x1f\x4f\x4c\x3c\x3b\xd5\xa3\x89\
+\xff\xd5\xfb\x38\xc0\xd6\xa3\xae\x78\x5d\xbd\x42\x93\x47\x5e\x84\
+\xd7\xb9\xc4\x2a\x80\xb7\x5d\xd9\xb6\x35\xdb\xc4\xe2\x00\x28\x56\
+\x48\xa0\x5f\x89\xba\xf8\x9d\xf2\x44\x1e\x8c\x78\x82\x36\xaa\x63\
+\xa2\x80\x05\x36\x23\x23\xcd\x92\x9f\xa8\x54\x7c\x40\x9d\xfa\xe2\
+\x60\x96\xea\x5c\xf1\x14\x1f\x3d\xce\x42\x92\xba\xaa\x2a\xa4\xd7\
+\xdf\x0f\x0a\x16\x54\x03\x4a\x54\x7b\x63\x4a\xbb\x9d\x77\x51\xb7\
+\x6c\x95\x2a\xe0\x6b\xfe\x4b\x78\x64\x24\x15\xdb\xd4\x6f\xf4\x60\
+\x57\xff\xd6\xfb\x3d\x51\xd7\x7f\x96\x78\x53\xd4\x2f\x24\x71\x24\
+\x6c\x69\xd3\x01\xd9\x52\x8d\x6e\x4b\x8b\x7d\x1b\x51\xbb\xb3\xa1\
+\xba\x86\x12\x6d\xc1\x1b\x06\x62\x00\x34\xf6\xad\x72\x32\x91\x11\
+\x24\x26\x31\x12\x90\x05\xe2\xba\x66\x87\xe6\x68\xee\x06\xaa\x35\
+\x3b\xc9\xae\x39\x09\x24\x32\x48\xc5\x18\x1e\xa2\x84\xd2\x9e\xd8\
+\x80\x40\x07\xab\x74\xa2\x39\x3d\xe2\xd4\xb9\x86\x27\x91\x78\x34\
+\x88\xae\xc9\xe0\x58\x54\x8c\xc8\xc9\xb5\x17\x16\x2a\xc6\x87\xae\
+\xf4\x34\xca\xec\xb3\x52\x63\xc7\x7a\x6e\x7b\xe2\x16\xd4\x4c\xbd\
+\x87\x5c\xb0\x06\x04\xb4\x26\x00\xd0\xb6\xfe\x03\x1e\x04\x71\xaf\
+\xf5\x96\x94\xaf\xd1\x80\xc1\x22\x6a\xab\x29\x24\x50\x8e\xbb\xe4\
+\x08\xa6\x56\xa6\x25\x23\x9a\x92\x79\x12\x29\x91\xa5\x7f\xff\xd7\
+\xfb\x3b\xd0\x50\x1a\x0f\xc7\x3c\x2a\xde\xa1\x50\x50\xfb\xf5\xc4\
+\xab\xa4\x55\x28\x41\x5e\x4a\xc0\x86\x53\xd0\x82\x28\x41\xc6\x04\
+\x83\x61\x05\x0f\x6e\xf6\xd1\x47\xe9\xc3\x61\x46\xaf\xd9\x67\xe4\
+\x83\xe8\xa5\x4f\xdf\x99\x7e\x2e\x21\xbf\x0e\xfe\xfd\xbf\x1f\x16\
+\x24\x4c\xf5\x54\x53\x23\x33\x99\x00\x24\xb6\xd4\x1e\xd9\x8b\x93\
+\x27\x19\xbe\xac\x80\xa6\x85\x6a\x46\xd5\x34\x60\xbd\xc7\xcf\x01\
+\xe4\x94\x35\xc1\x22\x83\xb9\xe9\x92\xc7\xbb\x19\x30\x2f\x38\xf9\
+\xc2\xc7\xca\x76\x42\x7b\xa0\xd3\x5c\x4b\x51\x6d\x6a\x86\x8d\x21\
+\x1d\x6a\x7f\x65\x45\x7a\xe5\xb2\x98\x80\xf3\x63\x08\x19\x97\xcf\
+\xf2\xfe\x73\xf9\xa6\xe6\xea\x96\x91\x43\x6b\x6b\x5f\x86\x31\x0f\
+\x30\x07\xbb\x31\xa9\xca\x8c\xe6\x7a\xb7\x8c\x31\x0f\x52\xf2\x6f\
+\xe6\x3c\xfa\xc4\xf1\x58\xea\xf0\xa4\x72\xcc\x42\xc5\x73\x10\x2a\
+\x39\x1e\x81\x94\x93\x4a\xf8\x8c\x11\xcc\x41\xa9\x35\xcf\x10\xab\
+\x0f\x64\x8d\x8a\xb0\x27\xa5\x77\x19\x74\xe3\xb3\x54\x64\x8d\xf4\
+\x96\xb5\xed\x4e\x99\x8e\xdc\xff\x00\xff\xd0\xfb\x34\xca\xdb\x1e\
+\xfd\xc6\x78\x43\xd4\xb6\x8c\x41\x5a\x91\xd6\xa7\x24\x82\xa8\x4f\
+\x26\x00\x12\x40\xaf\xb0\xdb\x02\xaf\xf8\x54\x6f\x40\x72\x2a\xb4\
+\x02\xcd\x55\x0d\x41\xd4\xf8\x7b\xe2\x02\x57\x15\xa7\x41\xd7\xae\
+\x1e\x88\x43\xbc\x6d\x2b\x2d\x0d\x46\xe3\x6c\xb3\x19\x63\x37\xcb\
+\xbf\x99\xb6\x37\x3a\x8f\x9a\x65\x88\x82\xd6\xd6\xa1\x62\x44\xeb\
+\x40\x00\x3f\x89\x39\x8b\x92\x77\x37\x37\x0c\x00\xc6\x12\x4b\x1f\
+\x2c\x8a\x46\x1a\x1d\x9b\x75\xf0\xcb\x2c\xc4\x30\x20\x5b\x21\x87\
+\xcb\x32\x59\xdc\x45\x3c\x51\xb2\x0d\x89\xa7\x6a\x66\x2c\xf3\x71\
+\x36\x08\x3e\x85\xd2\x7d\x5b\x8d\x2e\xd2\x69\x7f\xbd\x31\x81\x21\
+\xf1\x23\xbe\x6c\x71\x4a\xf1\x82\x5d\x7c\xc5\x4a\x93\x7e\x27\xd3\
+\xfa\x32\xbe\xad\x8f\xff\xd1\xfb\x39\x2d\x06\xfc\x4e\x78\x43\xd4\
+\x30\x2f\x32\x6b\x5e\x65\xb0\xd4\xf4\xfb\x2d\x0b\x46\x8b\x51\x8a\
+\x78\xda\x7b\xb9\xa6\x76\x50\x15\x5b\x8f\x08\xf8\xfe\xd6\xd5\xa9\
+\xf6\xc6\x79\x04\x06\xec\xa3\x8c\xcb\xab\x3f\xb5\x76\x78\x91\x9d\
+\x0a\x3d\x01\x74\x3d\x41\x22\xb4\x3e\xe3\x24\x46\xec\x02\xb9\x41\
+\xb9\x1d\x70\x14\xb6\xa0\x70\x55\x0c\x76\xdf\x7f\xd7\x86\x90\xef\
+\x87\xa7\x8f\x51\x80\xec\x97\x72\xe2\x00\x34\xc3\x19\x20\x87\x99\
+\x79\xc3\xcb\x6b\x75\xa8\x26\xab\x14\x6c\xde\xb5\x04\xe5\x77\x2a\
+\xe0\x01\x53\xec\x72\x59\xf4\xfc\x51\xe3\x8f\xc7\xcb\xf6\x16\xec\
+\x19\xab\xd2\x51\x5a\x46\x86\x84\xa7\xab\x0e\xe2\x82\x94\xa8\xda\
+\x9e\x1f\x2c\xc0\xe3\x32\x3c\x37\xbb\x71\xa1\xbb\x27\x6d\x01\xae\
+\x5c\x45\x14\x7c\x98\xec\x06\xd4\x1f\x4f\x86\x43\x49\xa3\x9e\x4c\
+\xfc\x11\xde\xcf\xf6\xb0\xc9\xa9\x88\x8d\x94\xcf\xd2\x8a\x08\xe2\
+\xb4\x82\x8f\x1d\xba\x88\xc3\xff\x00\x37\x11\xc4\x9f\xa6\x99\xb8\
+\xcd\xc1\x13\xc3\x0e\x43\x6f\x96\xdf\x6f\x37\x06\x16\x77\x3d\x55\
+\x39\x1a\xd3\x8f\x4d\xa9\x98\xf6\xdd\x4f\xff\xd2\xfb\x3c\x69\xc8\
+\xf5\x23\xbe\x78\x4e\xcf\x50\xd0\xe4\x5c\x7a\x5e\xa2\xb5\x0e\xc9\
+\xe1\xf4\x54\xe4\xa3\x7d\x11\x2a\xea\xbd\x00\xe3\x50\x41\xf6\xc8\
+\xa5\x78\xe7\xe1\x51\xf4\x62\x50\xb8\xd6\x83\xae\x05\x51\x25\xb9\
+\x8a\x83\xf3\xed\x85\x2b\x8f\x2a\x0c\x21\x0e\x53\x74\x18\x9b\x55\
+\xe4\xc3\xed\x03\x4e\x05\x7b\xf2\xe5\xb5\x3e\x79\x93\xa7\x39\x2f\
+\xd1\xf1\xee\xf8\xf4\x61\x3e\x1a\xdd\x5e\xda\xea\xdc\x90\x65\xd3\
+\x14\x4c\x2b\xc8\x24\xd4\x42\x7c\x77\xe4\x47\xdf\x95\x9c\xda\x7e\
+\x2b\x9e\x3b\x3b\xdd\x48\x81\xfa\x7e\xc2\x89\x47\x2d\x7d\x5b\x7b\
+\x95\x27\x9f\x50\x96\x29\xbe\xa9\x64\x96\xd6\xe1\x7f\x7d\xe9\xba\
+\xbb\xf1\xef\x53\xca\xb4\xf1\xa0\xc9\xe3\x99\x9c\x25\xe1\x44\x46\
+\x35\xbd\x6f\x2a\xeb\x77\xbf\xbe\x80\x0d\x62\x20\x11\xc4\x49\x3e\
+\x69\x64\x03\xe2\x1c\x8f\xc5\xe1\x94\x1a\xa7\x21\x19\xf0\xd4\x65\
+\x69\x7f\xff\xd9\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0a\
+\x0c\x9d\x6c\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x65\x00\x73\x00\x65\x00\x2e\x00\x6a\x00\x70\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/graphicsview/diagramscene/diagramscene.py b/examples/graphicsview/diagramscene/diagramscene.py
new file mode 100755
index 0000000..32c0c73
--- /dev/null
+++ b/examples/graphicsview/diagramscene/diagramscene.py
@@ -0,0 +1,832 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import (pyqtSignal, QLineF, QPointF, QRect, QRectF, QSize,
+        QSizeF, Qt)
+from PyQt5.QtGui import (QBrush, QColor, QFont, QIcon, QIntValidator, QPainter,
+        QPainterPath, QPen, QPixmap, QPolygonF)
+from PyQt5.QtWidgets import (QAction, QApplication, QButtonGroup, QComboBox,
+        QFontComboBox, QGraphicsItem, QGraphicsLineItem, QGraphicsPolygonItem,
+        QGraphicsScene, QGraphicsTextItem, QGraphicsView, QGridLayout,
+        QHBoxLayout, QLabel, QMainWindow, QMenu, QMessageBox, QSizePolicy,
+        QToolBox, QToolButton, QWidget)
+
+import diagramscene_rc
+
+
+class Arrow(QGraphicsLineItem):
+    def __init__(self, startItem, endItem, parent=None, scene=None):
+        super(Arrow, self).__init__(parent, scene)
+
+        self.arrowHead = QPolygonF()
+
+        self.myStartItem = startItem
+        self.myEndItem = endItem
+        self.setFlag(QGraphicsItem.ItemIsSelectable, True)
+        self.myColor = Qt.black
+        self.setPen(QPen(self.myColor, 2, Qt.SolidLine, Qt.RoundCap,
+                Qt.RoundJoin))
+
+    def setColor(self, color):
+        self.myColor = color
+
+    def startItem(self):
+        return self.myStartItem
+
+    def endItem(self):
+        return self.myEndItem
+
+    def boundingRect(self):
+        extra = (self.pen().width() + 20) / 2.0
+        p1 = self.line().p1()
+        p2 = self.line().p2()
+        return QRectF(p1, QSizeF(p2.x() - p1.x(), p2.y() - p1.y())).normalized().adjusted(-extra, -extra, extra, extra)
+
+    def shape(self):
+        path = super(Arrow, self).shape()
+        path.addPolygon(self.arrowHead)
+        return path
+
+    def updatePosition(self):
+        line = QLineF(self.mapFromItem(self.myStartItem, 0, 0), self.mapFromItem(self.myEndItem, 0, 0))
+        self.setLine(line)
+
+    def paint(self, painter, option, widget=None):
+        if (self.myStartItem.collidesWithItem(self.myEndItem)):
+            return
+
+        myStartItem = self.myStartItem
+        myEndItem = self.myEndItem
+        myColor = self.myColor
+        myPen = self.pen()
+        myPen.setColor(self.myColor)
+        arrowSize = 20.0
+        painter.setPen(myPen)
+        painter.setBrush(self.myColor)
+
+        centerLine = QLineF(myStartItem.pos(), myEndItem.pos())
+        endPolygon = myEndItem.polygon()
+        p1 = endPolygon.first() + myEndItem.pos()
+
+        intersectPoint = QPointF()
+        for i in endPolygon:
+            p2 = i + myEndItem.pos()
+            polyLine = QLineF(p1, p2)
+            intersectType = polyLine.intersect(centerLine, intersectPoint)
+            if intersectType == QLineF.BoundedIntersection:
+                break
+            p1 = p2
+
+        self.setLine(QLineF(intersectPoint, myStartItem.pos()))
+        line = self.line()
+
+        angle = math.acos(line.dx() / line.length())
+        if line.dy() >= 0:
+            angle = (math.pi * 2.0) - angle
+
+        arrowP1 = line.p1() + QPointF(math.sin(angle + math.pi / 3.0) * arrowSize,
+                                        math.cos(angle + math.pi / 3) * arrowSize)
+        arrowP2 = line.p1() + QPointF(math.sin(angle + math.pi - math.pi / 3.0) * arrowSize,
+                                        math.cos(angle + math.pi - math.pi / 3.0) * arrowSize)
+
+        self.arrowHead.clear()
+        for point in [line.p1(), arrowP1, arrowP2]:
+            self.arrowHead.append(point)
+
+        painter.drawLine(line)
+        painter.drawPolygon(self.arrowHead)
+        if self.isSelected():
+            painter.setPen(QPen(myColor, 1, Qt.DashLine))
+            myLine = QLineF(line)
+            myLine.translate(0, 4.0)
+            painter.drawLine(myLine)
+            myLine.translate(0,-8.0)
+            painter.drawLine(myLine)
+
+
+class DiagramTextItem(QGraphicsTextItem):
+    lostFocus = pyqtSignal(QGraphicsTextItem)
+
+    selectedChange = pyqtSignal(QGraphicsItem)
+
+    def __init__(self, parent=None, scene=None):
+        super(DiagramTextItem, self).__init__(parent, scene)
+
+        self.setFlag(QGraphicsItem.ItemIsMovable)
+        self.setFlag(QGraphicsItem.ItemIsSelectable)
+
+    def itemChange(self, change, value):
+        if change == QGraphicsItem.ItemSelectedChange:
+            self.selectedChange.emit(self)
+        return value
+
+    def focusOutEvent(self, event):
+        self.setTextInteractionFlags(Qt.NoTextInteraction)
+        self.lostFocus.emit(self)
+        super(DiagramTextItem, self).focusOutEvent(event)
+
+    def mouseDoubleClickEvent(self, event):
+        if self.textInteractionFlags() == Qt.NoTextInteraction:
+            self.setTextInteractionFlags(Qt.TextEditorInteraction)
+        super(DiagramTextItem, self).mouseDoubleClickEvent(event)
+
+
+class DiagramItem(QGraphicsPolygonItem):
+    Step, Conditional, StartEnd, Io = range(4)
+
+    def __init__(self, diagramType, contextMenu, parent=None):
+        super(DiagramItem, self).__init__(parent)
+
+        self.arrows = []
+
+        self.diagramType = diagramType
+        self.contextMenu = contextMenu
+
+        path = QPainterPath()
+        if self.diagramType == self.StartEnd:
+            path.moveTo(200, 50)
+            path.arcTo(150, 0, 50, 50, 0, 90)
+            path.arcTo(50, 0, 50, 50, 90, 90)
+            path.arcTo(50, 50, 50, 50, 180, 90)
+            path.arcTo(150, 50, 50, 50, 270, 90)
+            path.lineTo(200, 25)
+            self.myPolygon = path.toFillPolygon()
+        elif self.diagramType == self.Conditional:
+            self.myPolygon = QPolygonF([
+                    QPointF(-100, 0), QPointF(0, 100),
+                    QPointF(100, 0), QPointF(0, -100),
+                    QPointF(-100, 0)])
+        elif self.diagramType == self.Step:
+            self.myPolygon = QPolygonF([
+                    QPointF(-100, -100), QPointF(100, -100),
+                    QPointF(100, 100), QPointF(-100, 100),
+                    QPointF(-100, -100)])
+        else:
+            self.myPolygon = QPolygonF([
+                    QPointF(-120, -80), QPointF(-70, 80),
+                    QPointF(120, 80), QPointF(70, -80),
+                    QPointF(-120, -80)])
+
+        self.setPolygon(self.myPolygon)
+        self.setFlag(QGraphicsItem.ItemIsMovable, True)
+        self.setFlag(QGraphicsItem.ItemIsSelectable, True)
+
+    def removeArrow(self, arrow):
+        try:
+            self.arrows.remove(arrow)
+        except ValueError:
+            pass
+
+    def removeArrows(self):
+        for arrow in self.arrows[:]:
+            arrow.startItem().removeArrow(arrow)
+            arrow.endItem().removeArrow(arrow)
+            self.scene().removeItem(arrow)
+
+    def addArrow(self, arrow):
+        self.arrows.append(arrow)
+
+    def image(self):
+        pixmap = QPixmap(250, 250)
+        pixmap.fill(Qt.transparent)
+        painter = QPainter(pixmap)
+        painter.setPen(QPen(Qt.black, 8))
+        painter.translate(125, 125)
+        painter.drawPolyline(self.myPolygon)
+        return pixmap
+
+    def contextMenuEvent(self, event):
+        self.scene().clearSelection()
+        self.setSelected(True)
+        self.myContextMenu.exec_(event.screenPos())
+
+    def itemChange(self, change, value):
+        if change == QGraphicsItem.ItemPositionChange:
+            for arrow in self.arrows:
+                arrow.updatePosition()
+
+        return value
+
+
+class DiagramScene(QGraphicsScene):
+    InsertItem, InsertLine, InsertText, MoveItem  = range(4)
+
+    itemInserted = pyqtSignal(DiagramItem)
+
+    textInserted = pyqtSignal(QGraphicsTextItem)
+
+    itemSelected = pyqtSignal(QGraphicsItem)
+
+    def __init__(self, itemMenu, parent=None):
+        super(DiagramScene, self).__init__(parent)
+
+        self.myItemMenu = itemMenu
+        self.myMode = self.MoveItem
+        self.myItemType = DiagramItem.Step
+        self.line = None
+        self.textItem = None
+        self.myItemColor = Qt.white
+        self.myTextColor = Qt.black
+        self.myLineColor = Qt.black
+        self.myFont = QFont()
+
+    def setLineColor(self, color):
+        self.myLineColor = color
+        if self.isItemChange(Arrow):
+            item = self.selectedItems()[0]
+            item.setColor(self.myLineColor)
+            self.update()
+
+    def setTextColor(self, color):
+        self.myTextColor = color
+        if self.isItemChange(DiagramTextItem):
+            item = self.selectedItems()[0]
+            item.setDefaultTextColor(self.myTextColor)
+
+    def setItemColor(self, color):
+        self.myItemColor = color
+        if self.isItemChange(DiagramItem):
+            item = self.selectedItems()[0]
+            item.setBrush(self.myItemColor)
+
+    def setFont(self, font):
+        self.myFont = font
+        if self.isItemChange(DiagramTextItem):
+            item = self.selectedItems()[0]
+            item.setFont(self.myFont)
+
+    def setMode(self, mode):
+        self.myMode = mode
+
+    def setItemType(self, type):
+        self.myItemType = type
+
+    def editorLostFocus(self, item):
+        cursor = item.textCursor()
+        cursor.clearSelection()
+        item.setTextCursor(cursor)
+
+        if item.toPlainText():
+            self.removeItem(item)
+            item.deleteLater()
+
+    def mousePressEvent(self, mouseEvent):
+        if (mouseEvent.button() != Qt.LeftButton):
+            return
+
+        if self.myMode == self.InsertItem:
+            item = DiagramItem(self.myItemType, self.myItemMenu)
+            item.setBrush(self.myItemColor)
+            self.addItem(item)
+            item.setPos(mouseEvent.scenePos())
+            self.itemInserted.emit(item)
+        elif self.myMode == self.InsertLine:
+            self.line = QGraphicsLineItem(QLineF(mouseEvent.scenePos(),
+                    mouseEvent.scenePos()))
+            self.line.setPen(QPen(self.myLineColor, 2))
+            self.addItem(self.line)
+        elif self.myMode == self.InsertText:
+            textItem = DiagramTextItem()
+            textItem.setFont(self.myFont)
+            textItem.setTextInteractionFlags(Qt.TextEditorInteraction)
+            textItem.setZValue(1000.0)
+            textItem.lostFocus.connect(self.editorLostFocus)
+            textItem.selectedChange.connect(self.itemSelected)
+            self.addItem(textItem)
+            textItem.setDefaultTextColor(self.myTextColor)
+            textItem.setPos(mouseEvent.scenePos())
+            self.textInserted.emit(textItem)
+
+        super(DiagramScene, self).mousePressEvent(mouseEvent)
+
+    def mouseMoveEvent(self, mouseEvent):
+        if self.myMode == self.InsertLine and self.line:
+            newLine = QLineF(self.line.line().p1(), mouseEvent.scenePos())
+            self.line.setLine(newLine)
+        elif self.myMode == self.MoveItem:
+            super(DiagramScene, self).mouseMoveEvent(mouseEvent)
+
+    def mouseReleaseEvent(self, mouseEvent):
+        if self.line and self.myMode == self.InsertLine:
+            startItems = self.items(self.line.line().p1())
+            if len(startItems) and startItems[0] == self.line:
+                startItems.pop(0)
+            endItems = self.items(self.line.line().p2())
+            if len(endItems) and endItems[0] == self.line:
+                endItems.pop(0)
+
+            self.removeItem(self.line)
+            self.line = None
+
+            if len(startItems) and len(endItems) and \
+                    isinstance(startItems[0], DiagramItem) and \
+                    isinstance(endItems[0], DiagramItem) and \
+                    startItems[0] != endItems[0]:
+                startItem = startItems[0]
+                endItem = endItems[0]
+                arrow = Arrow(startItem, endItem)
+                arrow.setColor(self.myLineColor)
+                startItem.addArrow(arrow)
+                endItem.addArrow(arrow)
+                arrow.setZValue(-1000.0)
+                self.addItem(arrow)
+                arrow.updatePosition()
+
+        self.line = None
+        super(DiagramScene, self).mouseReleaseEvent(mouseEvent)
+
+    def isItemChange(self, type):
+        for item in self.selectedItems():
+            if isinstance(item, type):
+                return True
+        return False
+
+
+class MainWindow(QMainWindow):
+    InsertTextButton = 10
+
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.createActions()
+        self.createMenus()
+        self.createToolBox()
+
+        self.scene = DiagramScene(self.itemMenu)
+        self.scene.setSceneRect(QRectF(0, 0, 5000, 5000))
+        self.scene.itemInserted.connect(self.itemInserted)
+        self.scene.textInserted.connect(self.textInserted)
+        self.scene.itemSelected.connect(self.itemSelected)
+
+        self.createToolbars()
+
+        layout = QHBoxLayout()
+        layout.addWidget(self.toolBox)
+        self.view = QGraphicsView(self.scene)
+        layout.addWidget(self.view)
+
+        self.widget = QWidget()
+        self.widget.setLayout(layout)
+
+        self.setCentralWidget(self.widget)
+        self.setWindowTitle("Diagramscene")
+
+    def backgroundButtonGroupClicked(self, button):
+        buttons = self.backgroundButtonGroup.buttons()
+        for myButton in buttons:
+            if myButton != button:
+                button.setChecked(False)
+
+        text = button.text()
+        if text == "Blue Grid":
+            self.scene.setBackgroundBrush(QBrush(QPixmap(':/images/background1.png')))
+        elif text == "White Grid":
+            self.scene.setBackgroundBrush(QBrush(QPixmap(':/images/background2.png')))
+        elif text == "Gray Grid":
+            self.scene.setBackgroundBrush(QBrush(QPixmap(':/images/background3.png')))
+        else:
+            self.scene.setBackgroundBrush(QBrush(QPixmap(':/images/background4.png')))
+
+        self.scene.update()
+        self.view.update()
+
+    def buttonGroupClicked(self, id):
+        buttons = self.buttonGroup.buttons()
+        for button in buttons:
+            if self.buttonGroup.button(id) != button:
+                button.setChecked(False)
+
+        if id == self.InsertTextButton:
+            self.scene.setMode(DiagramScene.InsertText)
+        else:
+            self.scene.setItemType(id)
+            self.scene.setMode(DiagramScene.InsertItem)
+
+    def deleteItem(self):
+        for item in self.scene.selectedItems():
+            if isinstance(item, DiagramItem):
+                item.removeArrows()
+            self.scene.removeItem(item)
+
+    def pointerGroupClicked(self, i):
+        self.scene.setMode(self.pointerTypeGroup.checkedId())
+
+    def bringToFront(self):
+        if not self.scene.selectedItems():
+            return
+
+        selectedItem = self.scene.selectedItems()[0]
+        overlapItems = selectedItem.collidingItems()
+
+        zValue = 0
+        for item in overlapItems:
+            if (item.zValue() >= zValue and isinstance(item, DiagramItem)):
+                zValue = item.zValue() + 0.1
+        selectedItem.setZValue(zValue)
+
+    def sendToBack(self):
+        if not self.scene.selectedItems():
+            return
+
+        selectedItem = self.scene.selectedItems()[0]
+        overlapItems = selectedItem.collidingItems()
+
+        zValue = 0
+        for item in overlapItems:
+            if (item.zValue() <= zValue and isinstance(item, DiagramItem)):
+                zValue = item.zValue() - 0.1
+        selectedItem.setZValue(zValue)
+
+    def itemInserted(self, item):
+        self.pointerTypeGroup.button(DiagramScene.MoveItem).setChecked(True)
+        self.scene.setMode(self.pointerTypeGroup.checkedId())
+        self.buttonGroup.button(item.diagramType).setChecked(False)
+
+    def textInserted(self, item):
+        self.buttonGroup.button(self.InsertTextButton).setChecked(False)
+        self.scene.setMode(self.pointerTypeGroup.checkedId())
+
+    def currentFontChanged(self, font):
+        self.handleFontChange()
+
+    def fontSizeChanged(self, font):
+        self.handleFontChange()
+
+    def sceneScaleChanged(self, scale):
+        newScale = scale.left(scale.indexOf("%")).toDouble()[0] / 100.0
+        oldMatrix = self.view.matrix()
+        self.view.resetMatrix()
+        self.view.translate(oldMatrix.dx(), oldMatrix.dy())
+        self.view.scale(newScale, newScale)
+
+    def textColorChanged(self):
+        self.textAction = self.sender()
+        self.fontColorToolButton.setIcon(
+                self.createColorToolButtonIcon(':/images/textpointer.png',
+                        QColor(self.textAction.data())))
+        self.textButtonTriggered()
+
+    def itemColorChanged(self):
+        self.fillAction = self.sender()
+        self.fillColorToolButton.setIcon(
+                self.createColorToolButtonIcon( ':/images/floodfill.png',
+                        QColor(self.fillAction.data())))
+        self.fillButtonTriggered()
+
+    def lineColorChanged(self):
+        self.lineAction = self.sender()
+        self.lineColorToolButton.setIcon(
+                self.createColorToolButtonIcon(':/images/linecolor.png',
+                        QColor(self.lineAction.data())))
+        self.lineButtonTriggered()
+
+    def textButtonTriggered(self):
+        self.scene.setTextColor(QColor(self.textAction.data()))
+
+    def fillButtonTriggered(self):
+        self.scene.setItemColor(QColor(self.fillAction.data()))
+
+    def lineButtonTriggered(self):
+        self.scene.setLineColor(QColor(self.lineAction.data()))
+
+    def handleFontChange(self):
+        font = self.fontCombo.currentFont()
+        font.setPointSize(self.fontSizeCombo.currentText().toInt()[0])
+        if self.boldAction.isChecked():
+            font.setWeight(QFont.Bold)
+        else:
+            font.setWeight(QFont.Normal)
+        font.setItalic(self.italicAction.isChecked())
+        font.setUnderline(self.underlineAction.isChecked())
+
+        self.scene.setFont(font)
+
+    def itemSelected(self, item):
+        font = item.font()
+        color = item.defaultTextColor()
+        self.fontCombo.setCurrentFont(font)
+        self.fontSizeCombo.setEditText(str(font.pointSize()))
+        self.boldAction.setChecked(font.weight() == QFont.Bold)
+        self.italicAction.setChecked(font.italic())
+        self.underlineAction.setChecked(font.underline())
+
+    def about(self):
+        QMessageBox.about(self, "About Diagram Scene",
+                "The <b>Diagram Scene</b> example shows use of the graphics framework.")
+
+    def createToolBox(self):
+        self.buttonGroup = QButtonGroup()
+        self.buttonGroup.setExclusive(False)
+        self.buttonGroup.buttonClicked[int].connect(self.buttonGroupClicked)
+
+        layout = QGridLayout()
+        layout.addWidget(self.createCellWidget("Conditional", DiagramItem.Conditional),
+                0, 0)
+        layout.addWidget(self.createCellWidget("Process", DiagramItem.Step), 0,
+                1)
+        layout.addWidget(self.createCellWidget("Input/Output", DiagramItem.Io),
+                1, 0)
+
+        textButton = QToolButton()
+        textButton.setCheckable(True)
+        self.buttonGroup.addButton(textButton, self.InsertTextButton)
+        textButton.setIcon(QIcon(QPixmap(':/images/textpointer.png').scaled(30, 30)))
+        textButton.setIconSize(QSize(50, 50))
+
+        textLayout = QGridLayout()
+        textLayout.addWidget(textButton, 0, 0, Qt.AlignHCenter)
+        textLayout.addWidget(QLabel("Text"), 1, 0, Qt.AlignCenter)
+        textWidget = QWidget()
+        textWidget.setLayout(textLayout)
+        layout.addWidget(textWidget, 1, 1)
+
+        layout.setRowStretch(3, 10)
+        layout.setColumnStretch(2, 10)
+
+        itemWidget = QWidget()
+        itemWidget.setLayout(layout)
+
+        self.backgroundButtonGroup = QButtonGroup()
+        self.backgroundButtonGroup.buttonClicked.connect(self.backgroundButtonGroupClicked)
+
+        backgroundLayout = QGridLayout()
+        backgroundLayout.addWidget(self.createBackgroundCellWidget("Blue Grid",
+                ':/images/background1.png'), 0, 0)
+        backgroundLayout.addWidget(self.createBackgroundCellWidget("White Grid",
+                ':/images/background2.png'), 0, 1)
+        backgroundLayout.addWidget(self.createBackgroundCellWidget("Gray Grid",
+                ':/images/background3.png'), 1, 0)
+        backgroundLayout.addWidget(self.createBackgroundCellWidget("No Grid",
+                ':/images/background4.png'), 1, 1)
+
+        backgroundLayout.setRowStretch(2, 10)
+        backgroundLayout.setColumnStretch(2, 10)
+
+        backgroundWidget = QWidget()
+        backgroundWidget.setLayout(backgroundLayout)
+
+        self.toolBox = QToolBox()
+        self.toolBox.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Ignored))
+        self.toolBox.setMinimumWidth(itemWidget.sizeHint().width())
+        self.toolBox.addItem(itemWidget, "Basic Flowchart Shapes")
+        self.toolBox.addItem(backgroundWidget, "Backgrounds")
+
+    def createActions(self):
+        self.toFrontAction = QAction(
+                QIcon(':/images/bringtofront.png'), "Bring to &Front",
+                self, shortcut="Ctrl+F", statusTip="Bring item to front",
+                triggered=self.bringToFront)
+
+        self.sendBackAction = QAction(
+                QIcon(':/images/sendtoback.png'), "Send to &Back", self,
+                shortcut="Ctrl+B", statusTip="Send item to back",
+                triggered=self.sendToBack)
+
+        self.deleteAction = QAction(QIcon(':/images/delete.png'),
+                "&Delete", self, shortcut="Delete",
+                statusTip="Delete item from diagram",
+                triggered=self.deleteItem)
+
+        self.exitAction = QAction("E&xit", self, shortcut="Ctrl+X",
+                statusTip="Quit Scenediagram example", triggered=self.close)
+
+        self.boldAction = QAction(QIcon(':/images/bold.png'),
+                "Bold", self, checkable=True, shortcut="Ctrl+B",
+                triggered=self.handleFontChange)
+
+        self.italicAction = QAction(QIcon(':/images/italic.png'),
+                "Italic", self, checkable=True, shortcut="Ctrl+I",
+                triggered=self.handleFontChange)
+
+        self.underlineAction = QAction(
+                QIcon(':/images/underline.png'), "Underline", self,
+                checkable=True, shortcut="Ctrl+U",
+                triggered=self.handleFontChange)
+
+        self.aboutAction = QAction("A&bout", self, shortcut="Ctrl+B",
+                triggered=self.about)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.exitAction)
+
+        self.itemMenu = self.menuBar().addMenu("&Item")
+        self.itemMenu.addAction(self.deleteAction)
+        self.itemMenu.addSeparator()
+        self.itemMenu.addAction(self.toFrontAction)
+        self.itemMenu.addAction(self.sendBackAction)
+
+        self.aboutMenu = self.menuBar().addMenu("&Help")
+        self.aboutMenu.addAction(self.aboutAction)
+
+    def createToolbars(self):
+        self.editToolBar = self.addToolBar("Edit")
+        self.editToolBar.addAction(self.deleteAction)
+        self.editToolBar.addAction(self.toFrontAction)
+        self.editToolBar.addAction(self.sendBackAction)
+
+        self.fontCombo = QFontComboBox()
+        self.fontCombo.currentFontChanged.connect(self.currentFontChanged)
+
+        self.fontSizeCombo = QComboBox()
+        self.fontSizeCombo.setEditable(True)
+        for i in range(8, 30, 2):
+            self.fontSizeCombo.addItem(str(i))
+        validator = QIntValidator(2, 64, self)
+        self.fontSizeCombo.setValidator(validator)
+        self.fontSizeCombo.currentIndexChanged.connect(self.fontSizeChanged)
+
+        self.fontColorToolButton = QToolButton()
+        self.fontColorToolButton.setPopupMode(QToolButton.MenuButtonPopup)
+        self.fontColorToolButton.setMenu(
+                self.createColorMenu(self.textColorChanged, Qt.black))
+        self.textAction = self.fontColorToolButton.menu().defaultAction()
+        self.fontColorToolButton.setIcon(
+                self.createColorToolButtonIcon(':/images/textpointer.png',
+                        Qt.black))
+        self.fontColorToolButton.setAutoFillBackground(True)
+        self.fontColorToolButton.clicked.connect(self.textButtonTriggered)
+
+        self.fillColorToolButton = QToolButton()
+        self.fillColorToolButton.setPopupMode(QToolButton.MenuButtonPopup)
+        self.fillColorToolButton.setMenu(
+                self.createColorMenu(self.itemColorChanged, Qt.white))
+        self.fillAction = self.fillColorToolButton.menu().defaultAction()
+        self.fillColorToolButton.setIcon(
+                self.createColorToolButtonIcon(':/images/floodfill.png',
+                        Qt.white))
+        self.fillColorToolButton.clicked.connect(self.fillButtonTriggered)
+
+        self.lineColorToolButton = QToolButton()
+        self.lineColorToolButton.setPopupMode(QToolButton.MenuButtonPopup)
+        self.lineColorToolButton.setMenu(
+                self.createColorMenu(self.lineColorChanged, Qt.black))
+        self.lineAction = self.lineColorToolButton.menu().defaultAction()
+        self.lineColorToolButton.setIcon(
+                self.createColorToolButtonIcon(':/images/linecolor.png',
+                        Qt.black))
+        self.lineColorToolButton.clicked.connect(self.lineButtonTriggered)
+
+        self.textToolBar = self.addToolBar("Font")
+        self.textToolBar.addWidget(self.fontCombo)
+        self.textToolBar.addWidget(self.fontSizeCombo)
+        self.textToolBar.addAction(self.boldAction)
+        self.textToolBar.addAction(self.italicAction)
+        self.textToolBar.addAction(self.underlineAction)
+
+        self.colorToolBar = self.addToolBar("Color")
+        self.colorToolBar.addWidget(self.fontColorToolButton)
+        self.colorToolBar.addWidget(self.fillColorToolButton)
+        self.colorToolBar.addWidget(self.lineColorToolButton)
+
+        pointerButton = QToolButton()
+        pointerButton.setCheckable(True)
+        pointerButton.setChecked(True)
+        pointerButton.setIcon(QIcon(':/images/pointer.png'))
+        linePointerButton = QToolButton()
+        linePointerButton.setCheckable(True)
+        linePointerButton.setIcon(QIcon(':/images/linepointer.png'))
+
+        self.pointerTypeGroup = QButtonGroup()
+        self.pointerTypeGroup.addButton(pointerButton, DiagramScene.MoveItem)
+        self.pointerTypeGroup.addButton(linePointerButton,
+                DiagramScene.InsertLine)
+        self.pointerTypeGroup.buttonClicked[int].connect(self.pointerGroupClicked)
+
+        self.sceneScaleCombo = QComboBox()
+        self.sceneScaleCombo.addItems(["50%", "75%", "100%", "125%", "150%"])
+        self.sceneScaleCombo.setCurrentIndex(2)
+        self.sceneScaleCombo.currentIndexChanged[str].connect(self.sceneScaleChanged)
+
+        self.pointerToolbar = self.addToolBar("Pointer type")
+        self.pointerToolbar.addWidget(pointerButton)
+        self.pointerToolbar.addWidget(linePointerButton)
+        self.pointerToolbar.addWidget(self.sceneScaleCombo)
+
+    def createBackgroundCellWidget(self, text, image):
+        button = QToolButton()
+        button.setText(text)
+        button.setIcon(QIcon(image))
+        button.setIconSize(QSize(50, 50))
+        button.setCheckable(True)
+        self.backgroundButtonGroup.addButton(button)
+
+        layout = QGridLayout()
+        layout.addWidget(button, 0, 0, Qt.AlignHCenter)
+        layout.addWidget(QLabel(text), 1, 0, Qt.AlignCenter)
+
+        widget = QWidget()
+        widget.setLayout(layout)
+
+        return widget
+
+    def createCellWidget(self, text, diagramType):
+        item = DiagramItem(diagramType, self.itemMenu)
+        icon = QIcon(item.image())
+
+        button = QToolButton()
+        button.setIcon(icon)
+        button.setIconSize(QSize(50, 50))
+        button.setCheckable(True)
+        self.buttonGroup.addButton(button, diagramType)
+
+        layout = QGridLayout()
+        layout.addWidget(button, 0, 0, Qt.AlignHCenter)
+        layout.addWidget(QLabel(text), 1, 0, Qt.AlignCenter)
+
+        widget = QWidget()
+        widget.setLayout(layout)
+
+        return widget
+
+    def createColorMenu(self, slot, defaultColor):
+        colors = [Qt.black, Qt.white, Qt.red, Qt.blue, Qt.yellow]
+        names = ["black", "white", "red", "blue", "yellow"]
+
+        colorMenu = QMenu(self)
+        for color, name in zip(colors, names):
+            action = QAction(self.createColorIcon(color), name, self,
+                    triggered=slot)
+            action.setData(QColor(color)) 
+            colorMenu.addAction(action)
+            if color == defaultColor:
+                colorMenu.setDefaultAction(action)
+        return colorMenu
+
+    def createColorToolButtonIcon(self, imageFile, color):
+        pixmap = QPixmap(50, 80)
+        pixmap.fill(Qt.transparent)
+        painter = QPainter(pixmap)
+        image = QPixmap(imageFile)
+        target = QRect(0, 0, 50, 60)
+        source = QRect(0, 0, 42, 42)
+        painter.fillRect(QRect(0, 60, 50, 80), color)
+        painter.drawPixmap(target, image, source)
+        painter.end()
+
+        return QIcon(pixmap)
+
+    def createColorIcon(self, color):
+        pixmap = QPixmap(20, 20)
+        painter = QPainter(pixmap)
+        painter.setPen(Qt.NoPen)
+        painter.fillRect(QRect(0, 0, 20, 20), color)
+        painter.end()
+
+        return QIcon(pixmap)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    mainWindow = MainWindow()
+    mainWindow.setGeometry(100, 100, 800, 500)
+    mainWindow.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/graphicsview/diagramscene/diagramscene.qrc b/examples/graphicsview/diagramscene/diagramscene.qrc
new file mode 100644
index 0000000..a111584
--- /dev/null
+++ b/examples/graphicsview/diagramscene/diagramscene.qrc
@@ -0,0 +1,20 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>images/pointer.png</file>
+    <file>images/linepointer.png</file>
+    <file>images/textpointer.png</file>
+    <file>images/bold.png</file>
+    <file>images/italic.png</file>
+    <file>images/underline.png</file>
+    <file>images/floodfill.png</file>
+    <file>images/bringtofront.png</file>
+    <file>images/delete.png</file>
+    <file>images/sendtoback.png</file>
+    <file>images/linecolor.png</file>
+    <file>images/background1.png</file>
+    <file>images/background2.png</file>
+    <file>images/background3.png</file>
+    <file>images/background4.png</file>
+</qresource>
+</RCC>
+
diff --git a/examples/graphicsview/diagramscene/diagramscene_rc.py b/examples/graphicsview/diagramscene/diagramscene_rc.py
new file mode 100644
index 0000000..d3a89f6
--- /dev/null
+++ b/examples/graphicsview/diagramscene/diagramscene_rc.py
@@ -0,0 +1,404 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 5 04:57:31 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x01\x12\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0b\x00\x00\x00\x0d\x08\x06\x00\x00\x00\x7f\xf5\x94\x3b\
+\x00\x00\x00\xd9\x49\x44\x41\x54\x28\x53\x7d\x90\x31\x0e\x45\x40\
+\x10\x86\x47\x24\x24\x1a\x0d\x0d\xd1\x22\x51\x70\x80\x6d\x5c\x40\
+\xe7\x3c\x0e\x21\x0a\x47\x71\x19\xb5\x4e\xa9\xc1\x78\x33\xb2\x8b\
+\xf7\xec\xdb\xe4\xcb\x66\x76\xfe\xf9\x67\x76\xc0\x30\x0c\x04\x80\
+\x07\xf4\x66\x59\x16\x26\x49\x82\x9f\x03\xc4\xbe\xef\x94\x3b\x05\
+\x69\x9a\x32\x24\x08\xc3\xf0\x51\x58\xd7\x35\x17\x01\x05\x04\x55\
+\xde\x5d\xe8\x76\x1c\x87\x73\xb6\x6d\xe3\xc3\x59\x0a\xef\x44\x51\
+\xc4\xe2\x20\x08\xf4\xce\xeb\xba\x62\xdb\xb6\x6a\x94\xbe\xef\x4f\
+\xb1\x7c\x28\x8a\x82\xc9\xf3\x1c\x7d\xdf\x67\x03\x21\x04\x0e\xc3\
+\xa0\x4c\x40\xb7\x0d\xd3\x34\x59\xdc\x75\xdd\x25\xfe\x9e\x79\xdb\
+\x36\x9c\xa6\x89\x63\xd9\x21\x8e\x63\x1c\xc7\x11\xd5\xcc\x6f\x1f\
+\x24\x64\xbe\xaa\xaa\xff\xdb\x58\x96\x45\x8d\x46\x5d\x5e\xb7\x41\
+\xcc\xf3\x8c\x4d\xd3\xa0\xcc\x67\x59\x76\x39\x7b\x9e\xa7\x70\x5d\
+\xf7\xe7\xd3\xda\x6d\x48\xa8\xa8\x2c\x4b\xd5\xf1\x00\xd0\xc0\x13\
+\xc8\x06\xaf\x16\x28\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x00\xf7\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0b\x00\x00\x00\x0c\x08\x06\x00\x00\x00\xb4\xa9\x47\x9e\
+\x00\x00\x00\xbe\x49\x44\x41\x54\x28\x53\x85\x91\x31\x0e\x40\x40\
+\x10\x45\x57\x4d\x24\x4a\x37\xa1\xa4\x91\x38\x85\x5e\x74\xaa\x3d\
+\x8a\x4e\x54\x7b\x80\xad\x75\x6e\xa0\xd1\x6c\xe7\x12\xc4\x97\x19\
+\xb1\x21\x59\x51\xfc\x62\xfe\xbc\xfc\x99\xcc\x08\x00\x82\x74\x1c\
+\x07\xa6\x69\x82\x10\xc2\x29\xcf\xf3\x2e\xf0\xd6\x38\x8e\xa8\xaa\
+\x8a\x55\x14\x05\x03\x49\x92\x58\xef\x05\x3f\xd5\x75\x1d\xc3\x5a\
+\x6b\xd0\x54\xf2\x9c\x20\x35\xeb\xba\x66\x78\x5d\x57\xdc\xfe\x67\
+\x72\x9a\xa6\x88\xe3\x18\x4f\xcf\x09\x6e\xdb\x06\xdf\xf7\x51\x96\
+\xa5\x5d\xc1\x09\x53\x73\x9e\x67\x5e\x41\x4a\xf9\x9f\x3c\x0c\x03\
+\xc3\x4a\xa9\xff\xe4\xb6\x6d\x19\x5e\x96\xe5\x3f\x39\xcf\x73\x84\
+\x61\x88\x7d\xdf\xdf\xc9\x54\x18\x63\xec\xe1\x49\x41\x10\x20\x8a\
+\x22\x5b\x37\x4d\x03\x9b\xdc\xf7\xfd\xf5\xce\x8f\x57\x67\x59\xc6\
+\x13\x4e\xfa\x57\x56\x58\xe8\x40\xda\xc6\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x3e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\
+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x00\xf3\x49\x44\x41\x54\x38\xcb\xed\x94\x41\x6e\
+\x83\x30\x10\x45\x9f\x25\xe0\x0c\xbd\x43\x2f\xd0\x13\xe5\xfa\x55\
+\x62\x9b\xd8\x33\x01\x77\x81\x0d\x24\x85\xaa\x31\xca\xaa\x1d\x89\
+\x8d\x0d\x4f\xef\x7b\x06\x37\x6d\xdb\x26\x0e\x94\xaa\x9a\xad\xf5\
+\x06\x40\x44\xaa\xa0\x5d\xd7\xed\xee\x35\xbc\xa8\xfe\xc1\x7f\x01\
+\x6c\x8c\xd9\xdb\x4a\x87\x8d\x53\xda\x60\x8c\x03\x0c\x01\xf4\x0a\
+\xd2\x43\x74\x98\xb7\xf7\x83\x47\x31\x2a\x68\x81\x7a\x10\x07\xd1\
+\x1d\x3c\xe3\x41\x26\xa0\xf6\x0b\x34\x38\x88\x97\x4a\x70\x1a\x61\
+\x88\x4b\x74\xf5\x93\x65\xb4\xd3\x23\x35\xc6\x69\x80\x5b\x00\x29\
+\xd1\x3d\xa8\x83\x60\x57\x60\x5f\x01\x96\x1c\x7d\xb6\x7c\x30\x95\
+\x6a\x70\xfe\x70\x06\xba\x15\xd4\xe5\x14\x76\x01\xff\x74\xfd\xdd\
+\x55\xb8\xe4\xce\xdb\x05\x5c\x26\x41\xfd\xb2\x06\x34\x7b\x17\xf5\
+\xe6\x8f\x10\xce\xdf\xa1\xc5\x34\xe6\x89\xa8\x6a\x5e\xf8\x9c\x46\
+\x6a\xb6\x74\x10\xb3\xa9\xac\x1a\xf8\x34\xf8\x7a\xce\xa6\x16\x62\
+\x0f\x6a\xef\x1b\x58\x52\x54\x81\xa5\x98\x6e\x4c\x45\xf4\x70\xeb\
+\x9f\x07\x9b\x8f\xd3\xaf\xdf\xfd\x02\xd6\xbd\xde\xdf\x70\xdb\x04\
+\x83\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x72\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x7f\x00\x00\x00\x7f\x01\x03\x00\x00\x00\xfc\x73\x8f\x50\
+\x00\x00\x00\x06\x50\x4c\x54\x45\xff\xff\xff\x00\x00\x00\x55\xc2\
+\xd3\x7e\x00\x00\x00\x27\x49\x44\x41\x54\x48\xc7\x63\x60\x80\x82\
+\x06\x06\x34\x30\x2a\x30\x2a\x30\x2a\x30\x2a\x80\x2a\xf0\x1f\x15\
+\xfc\x1b\x0d\xa0\x51\x81\x51\x81\x51\x01\x22\x05\x00\xd5\x3b\x4e\
+\xf0\x73\xe3\x6f\xe9\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x02\xf1\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x2a\x00\x00\x00\x2c\x08\x03\x00\x00\x00\x24\x44\xda\x74\
+\x00\x00\x01\x32\x50\x4c\x54\x45\xff\xff\xff\xfe\xfe\xfe\x01\x01\
+\x01\xbe\xbe\xbe\xfd\xfd\xfd\x00\x00\x00\x64\x64\x64\xd2\xd2\xd2\
+\x7c\x7c\x7c\xfb\xfb\xfb\xe7\xe7\xe7\x84\x84\x84\xd7\xd7\xd7\xe0\
+\xe0\xe0\xe1\xe1\xe1\x0c\x0c\x0c\x28\x28\x28\xf5\xf5\xf5\xb3\xb3\
+\xb3\x02\x02\x02\x95\x95\x95\x2e\x2e\x2e\x11\x11\x11\x6b\x6b\x6b\
+\x03\x03\x03\x72\x72\x72\x49\x49\x49\xfc\xfc\xfc\x13\x13\x13\x04\
+\x04\x04\x9f\x9f\x9f\xc4\xc4\xc4\xa9\xa9\xa9\x05\x05\x05\x57\x57\
+\x57\x17\x17\x17\xf6\xf6\xf6\x16\x16\x16\xa6\xa6\xa6\xa0\xa0\xa0\
+\x60\x60\x60\x24\x24\x24\x3e\x3e\x3e\x23\x23\x23\xb7\xb7\xb7\x4d\
+\x4d\x4d\xf8\xf8\xf8\xc0\xc0\xc0\x30\x30\x30\x09\x09\x09\xec\xec\
+\xec\x20\x20\x20\x8a\x8a\x8a\xda\xda\xda\xf1\xf1\xf1\x0d\x0d\x0d\
+\x99\x99\x99\x19\x19\x19\xf9\xf9\xf9\xcd\xcd\xcd\xf4\xf4\xf4\x39\
+\x39\x39\x2d\x2d\x2d\x3b\x3b\x3b\x12\x12\x12\x43\x43\x43\xc2\xc2\
+\xc2\xa4\xa4\xa4\xdc\xdc\xdc\x55\x55\x55\x68\x68\x68\x5a\x5a\x5a\
+\x50\x50\x50\xf0\xf0\xf0\x06\x06\x06\x1f\x1f\x1f\x74\x74\x74\xb1\
+\xb1\xb1\x5d\x5d\x5d\x21\x21\x21\x36\x36\x36\x08\x08\x08\xea\xea\
+\xea\xdb\xdb\xdb\x81\x81\x81\x9c\x9c\x9c\x8b\x8b\x8b\x75\x75\x75\
+\xf2\xf2\xf2\x25\x25\x25\xce\xce\xce\x48\x48\x48\x63\x63\x63\xba\
+\xba\xba\x53\x53\x53\x38\x38\x38\xf7\xf7\xf7\xe4\xe4\xe4\xa2\xa2\
+\xa2\x4a\x4a\x4a\xf3\xf3\xf3\x5f\x5f\x5f\xf1\x69\x00\xec\x00\x00\
+\x00\x01\x74\x52\x4e\x53\x00\x40\xe6\xd8\x66\x00\x00\x01\x6d\x49\
+\x44\x41\x54\x78\x5e\xd5\x92\xc5\x76\xc3\x30\x10\x45\x3d\x92\x1d\
+\x66\xe6\x94\x99\x99\x99\x99\x99\xe1\xff\x7f\xa1\x9e\x89\x93\x53\
+\xa9\xb2\x4e\x76\x6d\xdf\xf2\xea\xfa\xbd\x59\xd8\xf8\x2b\xf1\x30\
+\xeb\x5b\x58\xcc\x04\x37\x13\x3c\x96\x10\xc6\xb5\xad\x42\xda\x9a\
+\x6f\x6d\x0d\x40\xb3\xad\x2c\xe8\xda\x1a\xe2\xb5\xf4\xd4\xdd\x71\
+\xbf\xa1\x0d\x14\x7b\x1b\xed\x09\xd0\xbb\x03\x0d\x93\x0d\xea\x4d\
+\xd8\x41\x2b\x33\x82\x6e\x2e\xac\x35\xc3\x39\xbb\x95\xe5\xbb\xa9\
+\xdb\xa7\xbd\xc0\x47\xce\x64\x47\x27\x7e\x31\x3b\xa7\x71\x87\xda\
+\xd1\x2c\x00\xf8\xe8\xda\x16\xcd\x7e\x17\x19\x09\xc3\x88\x94\xd1\
+\x5d\xd5\xb4\xf6\xe1\x6e\xbf\xdf\x36\x36\xe9\x92\x90\xab\xeb\xa5\
+\xf7\x09\xdb\x84\x61\xea\xcf\xbb\xee\x67\xd1\x1c\x1d\x43\x60\xa6\
+\xd1\x5d\x89\xbb\x98\x53\xd3\xb8\xef\xa9\x81\x19\x5a\xa8\x80\xda\
+\x4d\xd1\xeb\x3c\xbd\xc2\x42\x06\xbf\x5b\x54\x9b\xe6\x12\x9a\xcb\
+\x4e\x0f\x1c\xd0\xb5\x77\xca\xfd\x35\x7a\x5b\xaf\x83\x8d\x24\xba\
+\x5b\xca\x0b\xb6\x71\x5f\x0a\x8b\xee\x2a\xdc\xc0\x9e\xa5\x08\x4b\
+\x29\xf6\x83\x96\x32\x69\xf3\x87\xe9\xdf\x67\x6a\xb7\x0a\xb2\x7b\
+\xe8\x62\xb2\x23\xd9\x84\x02\xf2\x63\x2e\xe4\x04\xd9\xe9\x99\x64\
+\x9e\x53\xc3\x85\x48\x2f\x69\xe9\x0a\x44\x7a\x6d\x53\x96\x8c\x08\
+\x14\x6e\xa2\x48\x6f\x8b\x02\x8d\x97\xb0\xf5\x1e\xa4\xad\x07\xda\
+\x7a\x14\x58\x45\xfd\xd7\x57\xe9\x82\x27\xa1\xe1\x19\x97\x4a\x2f\
+\x72\xab\x19\x43\x5e\x7e\xad\x73\xce\xf9\x1b\x7d\xfd\xce\x31\x1f\
+\xe0\x60\xcc\x27\xad\x65\x6d\x4c\xcc\x12\xc2\xbc\x4e\x23\x13\x39\
+\x41\x89\x79\xc1\x50\x35\xfc\x7e\xeb\xff\xca\x17\x55\x71\x20\xbb\
+\xd7\xbb\x2e\xca\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x01\x25\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\
+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x00\xda\x49\x44\x41\x54\x48\xc7\xed\x94\x41\x0e\
+\x82\x30\x10\x45\x1f\x46\x38\x83\x77\xf0\xfe\x87\xf0\x1a\x5e\x40\
+\xb1\xa5\x74\xa6\x1a\x5c\xb4\x04\x8c\xa2\x11\xca\xc2\xc4\x49\xd8\
+\xd0\xe4\xe5\xf5\xf7\x67\x8a\xb2\x2c\x3b\x16\x4c\x08\xa1\x78\xf5\
+\x7f\x0b\xa0\xaa\xb3\xa0\x55\x55\x4d\x9e\x6d\x58\x69\xfe\xe0\x1f\
+\x06\x6f\x33\x30\xba\x55\xc0\xdd\xed\x0a\x37\x0f\xa1\x05\x75\x20\
+\x96\x62\xb7\xcf\x60\x1c\x5c\x82\x36\xa0\x16\xc4\x66\x8a\x42\xed\
+\x00\xf5\x16\xe4\x92\x09\x2c\x97\x68\x29\x26\x7e\x9a\xcb\xd8\xd7\
+\xe0\xcd\x08\xdc\x64\x02\xbb\xf3\x60\xaa\x39\xc1\xed\x39\x41\xfb\
+\xac\xcd\x00\x7e\xb7\xfe\x3e\x67\x5c\xc7\x8c\x43\x93\xe2\x48\x19\
+\x4f\x2d\xea\x57\x95\xed\x8e\x87\x21\x4b\x49\x96\xbe\x8e\xa6\x92\
+\x1a\x31\xeb\xf1\xfc\x29\x56\xaa\xef\x6b\xb0\x20\xc9\x54\x47\x0f\
+\xf8\x35\xb8\x4d\xd7\x56\x03\xe2\x20\x98\xc7\xaa\xf5\xb7\x98\x05\
+\xd6\xde\xd4\x3e\xf7\x57\x1a\xb8\x3a\x00\x8a\xa5\xcb\x66\x6a\xee\
+\x91\x61\xa9\x66\xc0\x0f\xb5\x5d\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x00\x91\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x2a\x00\x00\x00\x2b\x01\x03\x00\x00\x00\x34\x51\x88\xbd\
+\x00\x00\x00\x06\x50\x4c\x54\x45\xff\xff\xff\x00\x00\x00\x55\xc2\
+\xd3\x7e\x00\x00\x00\x01\x74\x52\x4e\x53\x00\x40\xe6\xd8\x66\x00\
+\x00\x00\x39\x49\x44\x41\x54\x18\x57\x63\x60\xc0\x05\x14\x20\x54\
+\x01\x84\xfa\x01\x26\x19\xff\x80\x29\x66\x08\x8f\xfd\x03\x98\xe2\
+\x7f\x00\xa6\xe4\x0f\x80\x29\xfb\x06\x30\x55\x0f\xd1\xf6\x6f\x50\
+\x6b\xe3\x87\x68\x63\x83\x50\x2c\x0c\x84\x00\x00\x91\xca\x1c\x09\
+\xf6\x23\x2a\xfe\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x00\xad\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0f\x00\x00\x00\x18\x02\x03\x00\x00\x00\x58\x6b\x4f\xfa\
+\x00\x00\x00\x09\x50\x4c\x54\x45\xff\xff\xff\xff\xff\xff\x00\x00\
+\x00\x8e\xf4\xc3\xec\x00\x00\x00\x01\x74\x52\x4e\x53\x00\x40\xe6\
+\xd8\x66\x00\x00\x00\x52\x49\x44\x41\x54\x08\x1d\x05\xc1\xb1\x0d\
+\xc2\x30\x14\x05\xc0\x8b\x04\x1b\xd0\x3c\x4f\xe3\x8a\x9a\xe6\x47\
+\x72\x1f\x17\x61\x1a\x57\x9e\x80\x41\xb9\xf3\x82\x40\xeb\xc8\x42\
+\x2e\x64\x20\x67\x27\xb5\x48\x5d\xa4\x06\xa9\xb3\x4b\xd5\x92\xfa\
+\xfe\x64\xcc\x8f\xdc\x17\xd9\x83\xf6\x1e\xe4\xd8\xdd\xe3\xd8\x1d\
+\x73\x61\x2e\xb4\x8e\x27\xf0\x07\xd5\x18\x11\x1b\xed\x4d\x23\xf4\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x70\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x7f\x00\x00\x00\x7f\x01\x03\x00\x00\x00\xfc\x73\x8f\x50\
+\x00\x00\x00\x06\x50\x4c\x54\x45\x00\xff\xff\xff\xff\xff\xb1\xb8\
+\x5e\xa0\x00\x00\x00\x25\x49\x44\x41\x54\x78\x5e\xed\xcc\x21\x12\
+\x00\x00\x04\x00\x41\xff\x7f\x34\x82\x11\x64\x75\x2f\x6e\xb8\xd8\
+\x6a\xca\x0b\x00\x00\xf0\x9d\x01\x00\x40\x03\x94\x98\xeb\xc0\x19\
+\x38\xa1\x84\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x60\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x7f\x00\x00\x00\x7f\x01\x03\x00\x00\x00\xfc\x73\x8f\x50\
+\x00\x00\x00\x03\x50\x4c\x54\x45\xff\xff\xff\xa7\xc4\x1b\xc8\x00\
+\x00\x00\x18\x49\x44\x41\x54\x78\x5e\xed\xc0\x31\x01\x00\x00\x00\
+\xc2\x20\xfb\xa7\x36\xc5\x3e\x58\x0b\x00\xe0\x08\x6f\x00\x01\x01\
+\x3e\xc3\x31\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x1a\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x2a\x00\x00\x00\x2b\x02\x03\x00\x00\x00\x73\xf1\xf2\x6d\
+\x00\x00\x00\x0c\x50\x4c\x54\x45\xff\xff\xff\x80\x80\x80\x00\x00\
+\x00\xff\xff\xff\x45\x4a\x4b\x38\x00\x00\x00\x01\x74\x52\x4e\x53\
+\x00\x40\xe6\xd8\x66\x00\x00\x00\xbc\x49\x44\x41\x54\x78\x5e\x4d\
+\xcb\xbd\x89\x04\x31\x0c\x86\x61\xa1\xd0\x55\x38\x1c\xdc\x8f\x26\
+\xd8\x12\xa6\x0a\xb3\xe1\xe6\x4e\x2e\x32\x07\x02\xdb\x07\x5b\xc0\
+\x96\xb4\x55\x9c\x47\x3f\x33\x56\xf4\x21\xde\x07\x42\xcd\xe0\x17\
+\x46\xbd\xf6\xb6\xec\x1a\xef\xa6\x41\x02\x34\xb2\x41\x80\x60\x24\
+\xcf\x9d\x9a\xee\x38\x8b\x7e\x78\x83\x4f\x7e\x64\xb3\x30\x68\x57\
+\x10\x32\x74\x22\x05\x98\x91\x89\x0c\xe4\x50\x88\x0c\xd4\x44\xe4\
+\x20\xce\xdc\xc1\x98\x89\x83\x33\x71\x20\x89\x02\xe4\x9d\x1d\x60\
+\xa1\x2e\x40\xff\xe9\x02\xfd\xf1\x2a\x0e\xd2\xfe\x7b\x81\x50\xda\
+\x02\x8e\xef\x02\x3e\x0b\x78\xb3\x6c\x01\x7f\x5d\x1a\x03\x66\x1d\
+\x34\x00\x03\x42\x15\xb0\xe4\x0a\x24\x37\x50\x24\x57\xc0\x92\x2b\
+\xe8\x92\x1b\x90\xdc\x80\xe4\x0a\x24\x37\xf0\x73\x6f\x1c\x70\x5f\
+\x5b\x76\x3c\xc7\x3f\xd6\x51\x68\x20\x52\x85\xdb\x5f\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x8d\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x1b\x00\x00\x00\x1b\x01\x03\x00\x00\x00\xb7\x1a\x66\x16\
+\x00\x00\x00\x06\x50\x4c\x54\x45\xff\xff\xff\x00\x00\x00\x55\xc2\
+\xd3\x7e\x00\x00\x00\x01\x74\x52\x4e\x53\x00\x40\xe6\xd8\x66\x00\
+\x00\x00\x35\x49\x44\x41\x54\x08\x99\x63\x60\xc0\x02\xd8\x1b\x80\
+\x04\xff\x01\x4c\x82\xfd\x01\x48\xba\x00\x44\x58\x80\x08\x19\x10\
+\xc1\x07\xd6\x02\x22\x98\x41\xfa\x18\x41\x0a\x19\xc0\x0a\xeb\x40\
+\x84\x3d\x16\x42\x0e\xdd\x46\x00\xb5\x00\x09\x40\xa3\x31\xbf\x5e\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\x3f\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x16\x00\x00\x00\x16\x08\x06\x00\x00\x00\xc4\xb4\x6c\x3b\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x02\xd1\x49\x44\x41\x54\x38\xcb\x7d\
+\x95\x4b\x68\x53\x41\x14\x86\x93\xe6\xd1\x08\x49\x28\x04\x5b\x17\
+\x05\x35\xee\x5a\xbb\x50\xb2\xb1\xda\x85\x8f\x5d\xb5\xbe\x16\x76\
+\x29\x2d\x42\x49\x57\xed\xce\x8d\x0a\xa2\xe0\xba\xab\x14\x84\x8a\
+\x2b\x51\x44\x45\x17\x0a\x8a\x55\xf1\x01\x1a\xb0\x56\x23\xad\xa2\
+\xc5\xb6\x92\x6a\x95\xbe\x34\xcd\xc3\xe3\x7f\x6e\xce\x64\xe6\x4e\
+\xd2\x16\x3e\xe6\xde\xce\x3f\x7f\x66\xce\x63\xae\x87\x88\x3c\x26\
+\xf8\xf3\x01\x7e\xa8\x07\x01\x50\x67\x6b\x0c\x6d\x9d\xa1\x0d\xf2\
+\xda\xca\x9c\x21\xf2\x8a\x11\x51\x7f\x7f\x5e\x16\x6c\x04\x61\xe0\
+\xaf\x61\xea\x77\xb4\x03\x03\x4a\xdb\x08\x22\xe2\xe1\x35\x85\x8e\
+\xe9\xbf\xa1\x21\x2a\x75\x77\x53\xa1\x2c\x66\x36\x83\x28\xcf\x57\
+\x69\x53\x29\x2a\xf5\xf4\x50\x29\x18\x54\xda\x38\x68\x70\xe6\xcd\
+\xe3\x97\x60\x5a\xec\xed\xa5\x42\x4b\x0b\xe5\xf0\xfe\x5d\x9b\x6f\
+\x55\xe6\xca\xb4\x34\x3c\x4c\xc5\x64\x92\x0a\x6d\x6d\xb4\x8c\xf7\
+\x71\xad\x8d\x3b\x5a\x31\xa6\xd5\x64\x32\xbf\x8a\x9d\xe6\x5a\x5b\
+\xe9\x2f\xde\xff\x80\x05\x30\xed\x5e\x10\xe3\xe7\x02\x4c\xa1\xaf\
+\x68\x27\xc1\x65\x70\xd6\xe3\x29\x8a\xb6\x49\x19\x87\xf8\x1f\x4b\
+\x60\x51\x46\xc5\x2f\xb7\x39\xe5\x61\x9a\x83\xe9\x0a\x4c\x97\xc4\
+\x74\x04\x1c\xd7\x9a\x76\xd0\xac\x8c\x83\x12\x7c\xfa\x0c\xe6\xc4\
+\xf0\xb7\x8c\xcc\x62\x22\x41\x2b\x83\x83\xb4\xdc\xd7\x47\x0b\x30\
+\xe5\xb9\x8c\xec\xf4\x98\x36\xed\x02\x3b\x1c\x2f\x23\xc6\x61\x49\
+\x14\x7d\x04\x33\x20\x2b\x3f\xc2\xfc\x88\xc5\x68\x1e\xf1\xfc\x19\
+\x8f\x3b\xef\xef\x40\x0a\x1c\xd1\xa6\xd8\xb4\x67\x97\x78\x84\xed\
+\xf2\x89\x4a\xa2\x1c\x73\x0e\xc1\x6c\x0d\xde\x8b\xe9\x61\xb7\x69\
+\xbb\x91\x64\xbf\x5d\x9b\x01\x99\xe0\x44\xd1\x0c\x8e\xff\x0d\x3b\
+\x9d\xc2\xb3\xc9\x4b\x70\x41\x9b\x9e\x00\x1d\x95\x6a\x90\xb2\xac\
+\xd5\x4d\x01\x95\xfd\x2c\x62\xfa\x15\xc7\xff\x84\x67\x13\x0e\xc3\
+\x4d\x6d\xdc\x09\xb6\xcb\x9a\x40\x55\xe7\xd9\xc5\x3f\x8f\xec\x4f\
+\x23\x51\x13\x88\x69\x46\x12\xa5\xf8\x00\xd2\xe0\x89\x36\x5f\xdf\
+\x58\x99\xce\xc1\x74\x0a\x25\x95\x41\xf6\xc7\xc4\xe0\x01\x78\x05\
+\xde\x82\x31\x19\xdf\x80\x51\xbb\x31\xec\x50\xa8\xde\xcf\xc2\xf4\
+\x0b\x4c\xc7\x61\xca\xbb\xba\x0f\x2e\x81\xd3\xe0\x2a\x78\x2e\x86\
+\x69\x19\xf9\xc7\x1e\x55\x77\xa8\xdf\xd5\xd2\xb3\xe8\xfd\x49\x98\
+\xa6\x61\xca\x09\xba\x0b\xce\x83\x03\x46\x83\xdc\x03\xcf\xc0\x0b\
+\x49\x22\x8f\x8f\xc1\x35\xf7\xdd\x12\xae\xb4\xf4\x04\x6e\xa9\x0c\
+\x2e\x94\xd7\x48\x16\x2f\xbc\x0d\xce\x81\xfd\xee\xec\x77\x2a\x73\
+\x36\x7b\x2a\x3f\x72\x4b\x36\x90\xd4\x2d\xdd\xe8\x6a\xe9\xd1\x50\
+\x88\x1e\x62\xbc\x0e\xce\x80\x7d\xee\x3a\xed\x90\x24\x31\x74\x47\
+\xc2\x74\x03\x5c\x04\x87\xb4\x76\xb7\xdd\xd2\x4d\x3c\x71\x45\xe2\
+\xb9\xb7\xba\xf8\xd5\x25\x14\x53\x75\x3e\x52\xbe\x78\xe8\xa0\xd6\
+\x1e\x05\x09\xf3\x12\xf2\x49\xd0\xb7\xb1\xe0\xa4\x3e\x52\x97\xb4\
+\xa9\x7d\x6d\x56\x3a\xf4\x94\xd6\xb2\xe9\x1e\xf1\x88\xda\xa5\xd6\
+\xa0\xcc\xe5\x48\x3b\xc1\x96\x35\x2e\xfa\xa8\xcc\x29\x6d\x42\xd6\
+\xea\x8b\xde\xfa\x34\xf1\x82\x4d\x4e\x9c\xca\xe1\x89\xac\xf3\x69\
+\x8a\x88\xa6\x59\xd6\xa8\x53\x79\x6b\x75\x9e\x4f\x3e\x8e\x1b\xec\
+\x0f\xe4\x1a\xda\xa0\x68\xeb\x4d\xed\x7f\x3d\xa9\x97\x96\x02\xf1\
+\x2b\x1c\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xfa\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0b\x00\x00\x00\x0c\x08\x06\x00\x00\x00\xb4\xa9\x47\x9e\
+\x00\x00\x00\xc1\x49\x44\x41\x54\x28\x53\xcd\x90\x31\x0a\x84\x30\
+\x10\x45\xc7\xce\x56\xb0\xd3\x46\x10\x6f\x60\xe5\x01\xbc\x42\x40\
+\x0b\x9b\x74\x22\x11\xbc\x94\x9d\x27\xd2\x03\x78\x03\x03\x19\xf7\
+\x0f\xb8\xd9\x2c\x6c\xbf\x81\x4f\x66\xde\xfc\x7c\xc8\x50\x1c\xc7\
+\x4c\x44\xa2\x28\x8a\x38\xcf\x73\x7e\x1d\xc2\xfd\xc9\xd3\x34\x65\
+\xd2\x5a\x73\x51\x14\x02\x86\x61\xe0\x79\x9e\xc5\x8c\x1b\x3d\x38\
+\xe6\xe3\x38\x32\x61\xa0\x94\x12\x88\xfa\x5b\xe0\x98\x3b\xe7\x42\
+\x33\xc0\x2f\x33\xea\x7f\x4a\xee\xba\x4e\xcc\xd7\x75\x05\x0f\xd0\
+\x83\xf7\x7d\xef\x93\xb1\x26\xc0\x7d\xdf\x03\xf3\x71\x1c\xc2\x97\
+\x65\xf1\xc9\xeb\xba\x0a\x9c\xa6\x29\x30\x3f\x21\xdb\xb6\xf9\x64\
+\xa8\xae\x6b\x19\x94\x65\xc9\x6d\xdb\x72\x55\x55\xd2\x37\x4d\xc3\
+\xd6\x5a\x9f\xfc\xc8\x18\xc3\x59\x96\x89\x29\x49\x12\xc6\x5f\xce\
+\xf3\x7c\x6f\xe9\x06\x33\x20\x38\xcd\x08\x1e\x78\x76\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x74\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x7f\x00\x00\x00\x7f\x01\x03\x00\x00\x00\xfc\x73\x8f\x50\
+\x00\x00\x00\x06\x50\x4c\x54\x45\xc0\xc0\xc0\xff\xff\xff\x2b\x69\
+\x87\xb4\x00\x00\x00\x29\x49\x44\x41\x54\x48\x4b\x63\xf8\x0f\x05\
+\x0d\x0c\x50\x30\x2a\x30\x2a\x30\x2a\x30\x2a\x40\xa4\x00\x0c\xd8\
+\x43\xc4\xff\x8d\x0a\x8c\x0a\x8c\x0a\x8c\x0a\x60\x17\x00\x00\x3f\
+\x78\xe4\xb7\xe3\x90\x30\x5f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x08\
+\x06\x27\x5a\x67\
+\x00\x62\
+\x00\x6f\x00\x6c\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x02\xfc\x42\x47\
+\x00\x69\
+\x00\x74\x00\x61\x00\x6c\x00\x69\x00\x63\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x0f\x0d\x22\x27\
+\x00\x73\
+\x00\x65\x00\x6e\x00\x64\x00\x74\x00\x6f\x00\x62\x00\x61\x00\x63\x00\x6b\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x00\x49\xdb\xa7\
+\x00\x62\
+\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x32\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x05\xaa\x0c\xc7\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x70\x00\x6f\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x10\
+\x0f\x9b\x88\x67\
+\x00\x62\
+\x00\x72\x00\x69\x00\x6e\x00\x67\x00\x74\x00\x6f\x00\x66\x00\x72\x00\x6f\x00\x6e\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0d\
+\x05\x6c\x22\xc7\
+\x00\x6c\
+\x00\x69\x00\x6e\x00\x65\x00\x63\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x0a\x2b\x97\xe7\
+\x00\x70\
+\x00\x6f\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x00\x50\xdb\xa7\
+\x00\x62\
+\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x31\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x00\x4b\xdb\xa7\
+\x00\x62\
+\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x34\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0d\
+\x06\x43\xe3\x67\
+\x00\x66\
+\x00\x6c\x00\x6f\x00\x6f\x00\x64\x00\x66\x00\x69\x00\x6c\x00\x6c\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x03\x4a\x23\xe7\
+\x00\x6c\
+\x00\x69\x00\x6e\x00\x65\x00\x70\x00\x6f\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x0c\xad\x0f\x07\
+\x00\x64\
+\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0d\
+\x08\xd5\xc4\xe7\
+\x00\x75\
+\x00\x6e\x00\x64\x00\x65\x00\x72\x00\x6c\x00\x69\x00\x6e\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x00\x4a\xdb\xa7\
+\x00\x62\
+\x00\x61\x00\x63\x00\x6b\x00\x67\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x33\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0f\x00\x00\x00\x02\
+\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x03\x53\
+\x00\x00\x01\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xf5\
+\x00\x00\x01\x32\x00\x00\x00\x00\x00\x01\x00\x00\x09\xa1\
+\x00\x00\x01\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x09\x2d\
+\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x01\x16\
+\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x23\
+\x00\x00\x00\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xe7\
+\x00\x00\x00\x88\x00\x00\x00\x00\x00\x01\x00\x00\x03\xc9\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x56\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x05\
+\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xf7\
+\x00\x00\x00\xf2\x00\x00\x00\x00\x00\x01\x00\x00\x08\x7c\
+\x00\x00\x01\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x0b\xb4\
+\x00\x00\x00\x42\x00\x00\x00\x00\x00\x01\x00\x00\x02\x11\
+\x00\x00\x00\xac\x00\x00\x00\x00\x00\x01\x00\x00\x06\xbe\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/graphicsview/diagramscene/images/background1.png b/examples/graphicsview/diagramscene/images/background1.png
new file mode 100644
index 0000000..0f93c6b
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/background1.png differ
diff --git a/examples/graphicsview/diagramscene/images/background2.png b/examples/graphicsview/diagramscene/images/background2.png
new file mode 100644
index 0000000..1e293db
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/background2.png differ
diff --git a/examples/graphicsview/diagramscene/images/background3.png b/examples/graphicsview/diagramscene/images/background3.png
new file mode 100644
index 0000000..3db4f8e
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/background3.png differ
diff --git a/examples/graphicsview/diagramscene/images/background4.png b/examples/graphicsview/diagramscene/images/background4.png
new file mode 100644
index 0000000..9c1f3bf
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/background4.png differ
diff --git a/examples/graphicsview/diagramscene/images/bold.png b/examples/graphicsview/diagramscene/images/bold.png
new file mode 100644
index 0000000..986e65e
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/bold.png differ
diff --git a/examples/graphicsview/diagramscene/images/bringtofront.png b/examples/graphicsview/diagramscene/images/bringtofront.png
new file mode 100644
index 0000000..bda2757
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/bringtofront.png differ
diff --git a/examples/graphicsview/diagramscene/images/delete.png b/examples/graphicsview/diagramscene/images/delete.png
new file mode 100644
index 0000000..df2a147
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/delete.png differ
diff --git a/examples/graphicsview/diagramscene/images/floodfill.png b/examples/graphicsview/diagramscene/images/floodfill.png
new file mode 100644
index 0000000..54c0dae
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/floodfill.png differ
diff --git a/examples/graphicsview/diagramscene/images/italic.png b/examples/graphicsview/diagramscene/images/italic.png
new file mode 100644
index 0000000..9a438b5
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/italic.png differ
diff --git a/examples/graphicsview/diagramscene/images/linecolor.png b/examples/graphicsview/diagramscene/images/linecolor.png
new file mode 100644
index 0000000..98a821f
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/linecolor.png differ
diff --git a/examples/graphicsview/diagramscene/images/linepointer.png b/examples/graphicsview/diagramscene/images/linepointer.png
new file mode 100644
index 0000000..66933d4
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/linepointer.png differ
diff --git a/examples/graphicsview/diagramscene/images/pointer.png b/examples/graphicsview/diagramscene/images/pointer.png
new file mode 100644
index 0000000..0b0b0aa
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/pointer.png differ
diff --git a/examples/graphicsview/diagramscene/images/sendtoback.png b/examples/graphicsview/diagramscene/images/sendtoback.png
new file mode 100644
index 0000000..5aa3b0a
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/sendtoback.png differ
diff --git a/examples/graphicsview/diagramscene/images/textpointer.png b/examples/graphicsview/diagramscene/images/textpointer.png
new file mode 100644
index 0000000..b25832c
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/textpointer.png differ
diff --git a/examples/graphicsview/diagramscene/images/underline.png b/examples/graphicsview/diagramscene/images/underline.png
new file mode 100644
index 0000000..9b8209f
Binary files /dev/null and b/examples/graphicsview/diagramscene/images/underline.png differ
diff --git a/examples/graphicsview/dragdroprobot/dragdroprobot.py b/examples/graphicsview/dragdroprobot/dragdroprobot.py
new file mode 100755
index 0000000..b798fbf
--- /dev/null
+++ b/examples/graphicsview/dragdroprobot/dragdroprobot.py
@@ -0,0 +1,289 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QLineF, QMimeData, QPoint, QPointF, qrand, QRectF,
+        qsrand, Qt, QTime, QTimeLine)
+from PyQt5.QtGui import (QBrush, QColor, QDrag, QImage, QPainter, QPen,
+        QPixmap, QTransform)
+from PyQt5.QtWidgets import (QApplication, QGraphicsItem,
+        QGraphicsItemAnimation, QGraphicsScene, QGraphicsView)
+
+import dragdroprobot_rc
+
+
+class ColorItem(QGraphicsItem):
+    n = 0
+
+    def __init__(self):
+        super(ColorItem, self).__init__()
+
+        self.color = QColor(qrand() % 256, qrand() % 256, qrand() % 256)
+
+        self.setToolTip(
+            "QColor(%d, %d, %d)\nClick and drag this color onto the robot!" % 
+              (self.color.red(), self.color.green(), self.color.blue())
+        )
+        self.setCursor(Qt.OpenHandCursor)
+    
+    def boundingRect(self):
+        return QRectF(-15.5, -15.5, 34, 34)
+
+    def paint(self, painter, option, widget):
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(Qt.darkGray)
+        painter.drawEllipse(-12, -12, 30, 30)
+        painter.setPen(QPen(Qt.black, 1))
+        painter.setBrush(QBrush(self.color))
+        painter.drawEllipse(-15, -15, 30, 30)
+
+    def mousePressEvent(self, event):
+        if event.button() != Qt.LeftButton:
+            event.ignore()
+            return
+
+        self.setCursor(Qt.ClosedHandCursor)
+
+    def mouseMoveEvent(self, event):
+        if QLineF(QPointF(event.screenPos()), QPointF(event.buttonDownScreenPos(Qt.LeftButton))).length() < QApplication.startDragDistance():
+            return
+
+        drag = QDrag(event.widget())
+        mime = QMimeData()
+        drag.setMimeData(mime)
+
+        ColorItem.n += 1
+        if ColorItem.n > 2 and qrand() % 3 == 0:
+            image = QImage(':/images/head.png')
+            mime.setImageData(image)
+            drag.setPixmap(QPixmap.fromImage(image).scaled(30,40))
+            drag.setHotSpot(QPoint(15, 30))
+        else:
+            mime.setColorData(self.color)
+            mime.setText("#%02x%02x%02x" % (self.color.red(), self.color.green(), self.color.blue()))
+
+            pixmap = QPixmap(34, 34)
+            pixmap.fill(Qt.white)
+
+            painter = QPainter(pixmap)
+            painter.translate(15, 15)
+            painter.setRenderHint(QPainter.Antialiasing)
+            self.paint(painter, None, None)
+            painter.end()
+
+            pixmap.setMask(pixmap.createHeuristicMask())
+
+            drag.setPixmap(pixmap)
+            drag.setHotSpot(QPoint(15, 20))
+
+        drag.exec_()
+        self.setCursor(Qt.OpenHandCursor)
+
+    def mouseReleaseEvent(self, event):
+        self.setCursor(Qt.OpenHandCursor)
+
+
+class RobotPart(QGraphicsItem):
+    def __init__(self, parent=None):
+        super(RobotPart, self).__init__(parent)
+
+        self.color = QColor(Qt.lightGray)
+        self.pixmap = None
+        self.dragOver = False
+
+        self.setAcceptDrops(True)
+
+    def dragEnterEvent(self, event):
+        if event.mimeData().hasColor() or \
+          (isinstance(self, RobotHead) and event.mimeData().hasImage()):
+            event.setAccepted(True)
+            self.dragOver = True
+            self.update()
+        else:
+            event.setAccepted(False)
+
+    def dragLeaveEvent(self, event):
+        self.dragOver = False
+        self.update()
+ 
+    def dropEvent(self, event):
+        self.dragOver = False
+        if event.mimeData().hasColor():
+            self.color = QColor(event.mimeData().colorData())
+        elif event.mimeData().hasImage():
+            self.pixmap = QPixmap(event.mimeData().imageData())
+
+        self.update()
+
+
+class RobotHead(RobotPart):
+    def boundingRect(self):
+        return QRectF(-15, -50, 30, 50)
+
+    def paint(self, painter, option, widget=None):
+        if not self.pixmap:
+            painter.setBrush(self.dragOver and self.color.lighter(130) 
+                                            or self.color)
+            painter.drawRoundedRect(-10, -30, 20, 30, 25, 25, Qt.RelativeSize)
+            painter.setBrush(Qt.white)
+            painter.drawEllipse(-7, -3 - 20, 7, 7)
+            painter.drawEllipse(0, -3 - 20, 7, 7)
+            painter.setBrush(Qt.black)
+            painter.drawEllipse(-5, -1 - 20, 2, 2)
+            painter.drawEllipse(2, -1 - 20, 2, 2)
+            painter.setPen(QPen(Qt.black, 2))
+            painter.setBrush(Qt.NoBrush)
+            painter.drawArc(-6, -2 - 20, 12, 15, 190 * 16, 160 * 16)
+        else:
+            painter.scale(.2272, .2824)
+            painter.drawPixmap(QPointF(-15*4.4, -50*3.54), self.pixmap)
+
+
+class RobotTorso(RobotPart):
+    def boundingRect(self):
+        return QRectF(-30, -20, 60, 60)
+
+    def paint(self, painter, option, widget=None):
+        painter.setBrush(self.dragOver and self.color.lighter(130) 
+                                        or self.color)
+        painter.drawRoundedRect(-20, -20, 40, 60, 25, 25, Qt.RelativeSize)
+        painter.drawEllipse(-25, -20, 20, 20)
+        painter.drawEllipse(5, -20, 20, 20)
+        painter.drawEllipse(-20, 22, 20, 20)
+        painter.drawEllipse(0, 22, 20, 20)
+
+
+class RobotLimb(RobotPart):
+    def boundingRect(self):
+        return QRectF(-5, -5, 40, 10)
+
+    def paint(self, painter, option, widget=None):
+        painter.setBrush(self.dragOver and self.color.lighter(130) or self.color)
+        painter.drawRoundedRect(self.boundingRect(), 50, 50, Qt.RelativeSize)
+        painter.drawEllipse(-5, -5, 10, 10)
+
+
+class Robot(RobotPart):
+    def __init__(self):
+        super(Robot, self).__init__()
+
+        self.torsoItem         = RobotTorso(self)
+        self.headItem          = RobotHead(self.torsoItem)
+        self.upperLeftArmItem  = RobotLimb(self.torsoItem)
+        self.lowerLeftArmItem  = RobotLimb(self.upperLeftArmItem)
+        self.upperRightArmItem = RobotLimb(self.torsoItem)
+        self.lowerRightArmItem = RobotLimb(self.upperRightArmItem)
+        self.upperRightLegItem = RobotLimb(self.torsoItem)
+        self.lowerRightLegItem = RobotLimb(self.upperRightLegItem)
+        self.upperLeftLegItem  = RobotLimb(self.torsoItem)
+        self.lowerLeftLegItem  = RobotLimb(self.upperLeftLegItem)
+
+        self.timeline = QTimeLine()
+        settings = [
+        #             item               position    rotation at
+        #                                 x    y    time 0  /  1
+            ( self.headItem,              0,  -18,      20,   -20 ),
+            ( self.upperLeftArmItem,    -15,  -10,     190,   180 ),
+            ( self.lowerLeftArmItem,     30,    0,      50,    10 ),
+            ( self.upperRightArmItem,    15,  -10,     300,   310 ),
+            ( self.lowerRightArmItem,    30,    0,       0,   -70 ),
+            ( self.upperRightLegItem,    10,   32,      40,   120 ),
+            ( self.lowerRightLegItem,    30,    0,      10,    50 ),
+            ( self.upperLeftLegItem,    -10,   32,     150,    80 ),
+            ( self.lowerLeftLegItem,     30,    0,      70,    10 ),
+            ( self.torsoItem,             0,    0,       5,   -20 )
+        ]
+        self.animations = []
+        for item, pos_x, pos_y, rotation1, rotation2 in settings: 
+            item.setPos(pos_x,pos_y)
+            animation = QGraphicsItemAnimation()
+            animation.setItem(item)
+            animation.setTimeLine(self.timeline)
+            animation.setRotationAt(0, rotation1)
+            animation.setRotationAt(1, rotation2)
+            self.animations.append(animation)
+        self.animations[0].setScaleAt(1, 1.1, 1.1)
+    
+        self.timeline.setUpdateInterval(1000 / 25)
+        self.timeline.setCurveShape(QTimeLine.SineCurve)
+        self.timeline.setLoopCount(0)
+        self.timeline.setDuration(2000)
+        self.timeline.start()
+
+    def boundingRect(self):
+        return QRectF()
+
+    def paint(self, painter, option, widget=None):
+        pass
+
+
+if __name__== '__main__':
+
+    import sys
+    import math
+
+    app = QApplication(sys.argv)
+
+    qsrand(QTime(0, 0, 0).secsTo(QTime.currentTime()))
+
+    scene = QGraphicsScene(-200, -200, 400, 400)
+
+    for i in range(10):
+        item = ColorItem()
+        angle = i*6.28 / 10.0
+        item.setPos(math.sin(angle)*150, math.cos(angle)*150)
+        scene.addItem(item)
+
+    robot = Robot()
+    robot.setTransform(QTransform.fromScale(1.2, 1.2), True)
+    robot.setPos(0, -20)
+    scene.addItem(robot)
+
+    view = QGraphicsView(scene)
+    view.setRenderHint(QPainter.Antialiasing)
+    view.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
+    view.setBackgroundBrush(QColor(230, 200, 167))
+    view.setWindowTitle("Drag and Drop Robot")
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/graphicsview/dragdroprobot/dragdroprobot.qrc b/examples/graphicsview/dragdroprobot/dragdroprobot.qrc
new file mode 100644
index 0000000..b0969d2
--- /dev/null
+++ b/examples/graphicsview/dragdroprobot/dragdroprobot.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/" >
+        <file>images/head.png</file>
+    </qresource>
+</RCC>
diff --git a/examples/graphicsview/dragdroprobot/dragdroprobot_rc.py b/examples/graphicsview/dragdroprobot/dragdroprobot_rc.py
new file mode 100644
index 0000000..821d455
--- /dev/null
+++ b/examples/graphicsview/dragdroprobot/dragdroprobot_rc.py
@@ -0,0 +1,976 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 5 05:44:26 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x3a\x7c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x84\x00\x00\x00\xb1\x08\x04\x00\x00\x00\xaf\xfa\xdd\x32\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd6\x03\
+\x10\x0a\x31\x18\xc7\xac\x62\xef\x00\x00\x00\x1d\x74\x45\x58\x74\
+\x43\x6f\x6d\x6d\x65\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\
+\x77\x69\x74\x68\x20\x54\x68\x65\x20\x47\x49\x4d\x50\xef\x64\x25\
+\x6e\x00\x00\x00\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\
+\x00\x39\xe4\x49\x44\x41\x54\x78\xda\xd5\xbd\xd9\xb2\x5d\xc7\xb5\
+\x9e\xf9\x65\xe6\x6c\x57\xbb\xf7\x06\x36\x00\xf6\x24\xa8\xc6\x75\
+\x8e\x1d\x61\x59\xf2\x45\xd5\x45\x5d\x54\xd1\xe1\x8b\xba\x26\x1f\
+\x81\x7a\x04\xea\x11\xc8\x47\x10\x1f\x41\x7a\x04\x31\xea\xae\xae\
+\x7c\x8e\xe3\xd4\x29\x47\x58\x16\x4d\x1c\x51\x02\x89\x6e\x77\xab\
+\x9d\x7d\xa6\x2f\x72\xcc\x5c\x73\x2d\x6c\x10\x0d\x49\x85\x0b\x0c\
+\x92\x00\x76\xb7\xd6\x98\x99\xa3\xf9\xc7\x3f\xfe\xa1\x56\xfc\xb8\
+\xbf\xdc\xe0\xf7\x2a\xfc\x9d\x02\x2c\x4a\x7e\x3f\xfc\x53\x4b\x07\
+\xc4\x18\x2a\xda\x8f\xdb\xdf\x72\x19\xfd\x26\xfe\x3c\x46\x63\x9f\
+\xf1\x13\x2c\xa0\xe4\xbb\x70\xcd\x4f\x7b\xb1\x5f\xea\x6f\x67\x08\
+\xb5\xf7\x37\x8a\x0e\x85\x1a\x18\xa2\xa2\xfd\xb4\xf9\xa4\x43\x61\
+\x30\xbf\x57\xf7\x16\x9f\x14\x40\x4e\x0c\x8c\x3e\x9b\xfc\xa6\xa1\
+\xc3\xde\x8d\xee\xc5\x68\xc0\xe1\x00\x15\xbe\x9b\xda\x33\xf9\xff\
+\xd4\x86\xf0\x2f\xdb\xc9\x5b\x77\x68\x1c\x96\x4e\x8c\xd2\x7c\x7a\
+\xf1\x49\x41\x4d\xca\x98\x88\x92\x35\x5b\x1c\x09\x19\x0a\x4b\x42\
+\x4e\x8d\x05\x52\x26\xe4\x2a\x12\xf3\x29\xf9\x09\xea\xe0\x27\xbd\
+\xbc\x21\x22\xfe\x66\xbf\xfa\x0b\x01\x1a\xb0\x68\x3a\xca\x8f\xb7\
+\xbf\xad\xb1\x54\x94\x6c\x51\xa4\x28\x1a\x36\x5c\xb2\x24\x26\xa7\
+\xe2\x8a\x0a\x03\xb4\x14\x68\x62\x72\xe6\x1c\xbb\x39\xb9\xca\xe4\
+\xad\x2a\x39\x1d\xdf\xef\xd7\xdf\xd0\x10\x6a\x70\x84\x2d\x0d\xd5\
+\xdd\xf2\xab\x4b\x2e\xa8\xe8\x68\xd8\x72\xcc\x31\x73\x1c\x0b\xce\
+\xd8\x62\xd1\x94\x14\x3c\x62\x43\x06\x14\x18\x12\x32\xb6\x6c\x29\
+\xe9\x98\x3b\xad\x22\x8c\x7c\xd7\xff\x5f\x19\xa2\x3f\x17\x16\x47\
+\xc3\xd6\x2d\x58\x73\xc6\x25\x30\x22\x22\x26\x05\x0a\x0a\x9e\x70\
+\x41\x45\xc4\x15\x0d\x25\x05\x1d\x25\x06\x47\x8c\xc2\x51\x51\x51\
+\x53\xb1\xe0\xc4\xa5\x8c\x2f\x47\x27\x11\xfa\xda\xab\xc1\xff\xac\
+\x3e\xc2\x7b\x85\x9a\x0e\x28\xdd\x8a\xfb\x6c\x38\xa3\x60\xc2\x29\
+\x33\x34\x11\x5b\x56\xac\x28\xa9\x29\x69\x38\x63\x83\xe1\x98\x31\
+\x2d\x96\x0c\x87\x01\x6a\x1a\x14\x19\x29\x77\x98\x73\xca\x09\xe3\
+\xf7\xd3\x7b\xe6\x7b\x3b\xcb\xe8\xd5\xdf\x9c\x7a\xea\x8d\xf6\xb7\
+\xbf\x43\xc9\x53\xe2\xc0\x55\xb6\x34\x1f\x17\xbf\xdd\xb2\xa1\xe4\
+\x3e\x1d\x96\x11\x63\x12\x34\x86\x2b\x36\x5c\xb1\x66\xcb\x96\x25\
+\x25\x57\x4c\x99\xd3\xf0\x98\x16\x4d\x4c\xd3\xc7\x16\x22\x66\x4c\
+\x80\x05\x6b\xd6\xcc\xbf\x9a\x31\x57\x99\x44\x21\xff\x1a\xa0\xc5\
+\x1c\x38\xd3\x1f\xe1\x44\xb8\x67\x58\xdc\x49\x36\xe0\x7f\xf5\x41\
+\x4e\x0d\x4e\x44\xcd\x85\x5b\x52\x72\xce\x43\x2e\xb0\x8c\xb8\xc1\
+\x18\x47\x83\x43\xb3\xe1\x82\x15\x1b\x4a\xb6\x54\x28\x12\x62\x34\
+\x1d\x2d\x00\xe7\x00\xc4\xa4\xa4\xc4\x18\x6e\x62\xd1\x44\x64\x9c\
+\xf0\x26\xb7\x78\x53\xc5\x98\xf0\xca\xdc\xde\xef\x86\xa1\x5b\xfd\
+\x18\x3e\x62\xdf\x24\x3e\x18\x6a\x1c\x0d\xb5\xb3\xe8\xcb\xf4\xa4\
+\xf7\xed\x0d\x06\x47\xf5\xe9\x39\xe7\x94\x3c\xe0\x4b\x22\x72\xc6\
+\x28\xd6\x2c\x68\x48\x49\xb9\xe2\x21\x17\x94\x34\x58\x2c\x73\x3a\
+\x3a\xac\x18\xb8\xa3\xa6\x45\xa1\x18\x13\x63\xd9\xb2\x92\x8f\x6b\
+\xe6\x9c\xf1\x0e\xb8\x19\xe3\x5f\xeb\xcf\x15\x86\x18\xb5\xf7\x50\
+\x86\x67\xf7\x7a\x63\x7c\xcf\x13\x31\xbc\x97\xed\x20\x2e\x94\x77\
+\xb7\x5f\xad\x51\xc4\x8c\x2f\x27\x27\x11\x8e\x0e\x43\xc9\x63\xf7\
+\x35\x8f\xd9\xf0\x98\x87\x24\xdc\xe6\x84\x96\x4b\x1a\x26\xcc\xf8\
+\x86\x25\x17\xac\xb0\x44\x24\xc4\xa4\x28\x8c\x98\x01\xa0\xa2\xa2\
+\x21\x66\x4c\x4c\x4b\xcd\x82\x88\x84\x08\x48\xb9\xcd\x1d\xde\xe1\
+\x84\x13\x72\x12\x72\x95\x60\xb0\x72\x55\x86\x79\x86\x1b\xc4\xaf\
+\x1f\x25\x6a\xa8\x70\x19\x2c\x0e\x4d\x7a\x4f\xab\x09\x6b\x77\xc1\
+\xf9\xf1\xc8\x1d\x33\x55\x31\x9b\x0f\x1e\xfd\xe1\x6b\xce\xb9\xe2\
+\x9c\x0d\x13\x40\xb1\xe0\x31\x35\xc7\x38\x9e\xf0\xdf\x68\xb1\x40\
+\x42\x8c\x4f\xa9\x33\x72\xa0\xa2\x41\x11\x61\x69\xa9\xd9\xb0\xc1\
+\x88\x07\xf2\x97\xa7\xa5\xe6\x9c\x86\x29\x2d\x1d\xc7\x1c\x01\x8e\
+\x6e\xcf\x87\xb9\xe7\x86\xd8\xe8\x87\x88\x07\x4a\x6e\xaf\xa5\xb8\
+\xbb\xf8\xaa\xc6\xa0\x68\xb9\xf1\x59\xc5\x9a\x05\x09\x25\x85\xcb\
+\x78\xcc\x3d\xee\xd3\xb2\xe1\x09\x96\x39\x8e\x2b\xb6\x6c\x99\x10\
+\x71\xce\x5f\x29\x31\x24\x68\x1c\x25\x0b\x5a\x26\x8c\xa8\xb1\x6c\
+\x28\x81\x08\x47\x4d\x45\x41\x87\x26\x23\x46\xd1\xe1\x48\x71\x40\
+\x89\xe1\x4b\x26\x9c\xf2\x3a\x11\x63\x0c\x4a\x2e\xd5\xbe\xb3\xfe\
+\x51\x9c\xa5\x93\x3c\xb1\x2f\x86\x62\x2a\xce\xdd\x37\xac\x70\x54\
+\x2c\xb9\x43\xc1\x8a\x12\x48\x48\x31\xac\x79\xc2\x0a\x45\xc1\x05\
+\x35\x39\x19\x1d\x90\x12\x51\x70\xc9\x92\x11\x96\x96\x8a\x92\x9a\
+\x0e\xcb\x1c\x83\xa6\xa5\xa4\x06\x14\x29\x96\x8e\x0e\x87\x26\xc2\
+\xe0\x80\x84\x8c\x94\x88\x8c\x9c\x2d\x19\x47\xbc\xc5\xff\xc2\x4f\
+\x39\x51\xd1\xc0\x47\xb8\xa7\x6a\x11\xf5\x43\x9e\x08\x9f\xda\xb6\
+\x74\x1f\xb7\x9f\xda\x63\xc7\x44\x55\xff\xe0\x1d\x5d\xc7\x15\xdf\
+\x72\xc1\x96\x05\x2b\x6a\x14\x31\x31\x13\x1c\xd0\x51\x61\xa9\xd8\
+\x70\x8c\xe2\x84\x23\x9e\xf0\x67\x6a\x8e\x68\xd8\xb2\x64\x43\x43\
+\x4c\xce\x88\x86\x8a\x8e\x16\x8b\x95\x24\xcc\x07\x68\x03\x34\x54\
+\xf2\xd2\x63\x3a\x1c\x2d\x25\x13\xa0\xe4\x9c\xc7\xdc\x20\xfd\x87\
+\xd1\xaf\x8c\x44\x2c\xf7\x7d\xf3\x88\xa7\x13\x94\x0e\x27\x5f\xe0\
+\xd0\x40\x4d\x71\xd1\x1c\xb7\x94\x94\x74\x94\x6e\xc9\x23\x1e\x71\
+\xc6\x86\x0a\xcb\x29\x96\x92\x92\x05\x1b\x6a\x1c\x37\x98\x32\xa1\
+\x65\xc9\x96\x88\x11\x0d\xff\x9a\x9c\xff\x8f\x7f\x21\x62\x42\xc9\
+\x5f\x68\xa8\x51\x64\x8c\xa4\xe6\xac\x68\x68\x48\xc8\xb0\x54\x74\
+\xe4\x44\x38\x22\x32\xa0\x64\x89\xc2\xe2\xe8\x98\x30\x22\x61\x4c\
+\x44\x46\xc4\x92\xc7\x8c\x7e\x19\xdd\xcd\xef\xa9\x67\x84\x4a\xf5\
+\xaa\x3e\x42\x85\xcc\xc0\xed\xfd\x4d\x7b\x77\x73\x5c\x52\xb3\x61\
+\x41\xc1\x92\x4b\x1e\xb3\xa2\x15\xff\xfc\x98\x96\x82\x35\x05\x9a\
+\x31\x63\x46\x68\x36\xac\x59\xd1\x31\x22\xe5\x94\x6f\x59\x72\x81\
+\xa6\x66\x49\x41\x81\xc3\x61\x29\xe9\xa8\x49\xd8\x62\xe9\xd0\x18\
+\x71\x93\x71\x40\x2c\x2a\x14\x8e\x1b\xf2\xd1\x0c\x43\x4b\x87\x22\
+\x27\x27\x21\xf1\xce\xf4\x9e\x1b\xbc\x61\xf5\x7d\x4e\x84\xba\xa6\
+\x7a\x54\xc1\x03\xb7\x54\x77\x2f\xbf\x7a\xcc\x9a\x8a\x2b\xce\x58\
+\xe0\xb8\x62\x41\x4b\x8c\xa2\xa4\xa0\xc0\xd2\xd0\x00\x29\x33\x66\
+\x2c\xe9\xc4\x03\x24\xa4\xe4\x38\xfe\xca\x63\x14\x8a\x15\x6b\xc9\
+\x0b\x15\x96\x9a\x96\x96\x94\x0c\x7c\x00\x26\xa1\x40\x01\x11\x29\
+\xd0\x62\xe9\xb0\x92\xbe\xa5\x80\xc6\xd2\xb1\x65\x2a\xaf\x3b\x25\
+\xa5\x71\x77\x54\x44\xf4\xc2\xb9\x65\xf4\x32\x2e\x52\x85\xff\xd6\
+\xac\xdd\x43\x2e\x39\x67\x4b\xc1\x25\x67\x6c\x18\x51\xca\x5d\xae\
+\x59\xb1\x21\x45\x33\x22\x21\x26\x42\xb1\x61\x25\x3f\xd0\x47\xff\
+\x8e\x6f\x59\xd2\xe1\x28\x59\xe2\xc8\x05\xab\xf0\x7e\x40\x03\x39\
+\xa0\x88\xc8\x18\x91\x92\xb0\xc0\x90\x12\x53\xb1\xa1\xc5\x52\xd3\
+\xa1\x70\x24\xc4\x40\x4b\xcd\x16\x45\xc1\x15\x57\x5c\x72\x83\xad\
+\x9b\x32\x23\x57\x26\xa4\xdd\xdf\xdb\x10\xee\xe0\x4f\x1d\x4b\xf7\
+\x90\xaf\xd8\x52\x52\xb3\xe6\x92\x15\x0d\x1b\x6a\x1a\x1a\xc9\x03\
+\x0d\xa7\x28\x62\x46\xc4\x94\x5c\xb0\x22\xc6\x04\xef\x5d\xd3\xb0\
+\x25\x66\xcc\x86\x46\x70\x06\x45\x43\x85\x21\x26\xc6\xa0\x59\x89\
+\xd9\xb7\x8c\x88\xe9\xe8\xd8\xd2\x90\xd1\x52\xe1\xe4\xcd\xbb\x41\
+\x4d\x33\x25\x92\xef\xdc\xd0\x70\xc9\x82\x37\x78\x8f\xd3\xdf\xe5\
+\x1f\x99\x6b\x11\xac\x97\x34\x84\x1b\xfc\xd7\x07\xca\x8e\xb5\x7b\
+\xc8\x7d\x2e\xe4\x47\xae\x59\x51\x60\xb9\xa0\x91\x80\x38\x62\x44\
+\xca\x2d\x2a\x1a\xf1\xf0\x15\x25\x11\x84\x97\xad\x31\x01\x6c\xcb\
+\xc8\x50\x38\x52\xa0\xc3\x11\xcb\x19\x8a\x50\x72\x99\x5a\xc9\x1a\
+\x7c\x44\x89\x80\x8c\x29\x5b\x79\x28\x2d\x56\xaa\x92\xfe\x12\x58\
+\x36\xb4\x8c\x69\x31\xc4\x1f\x45\xa8\x83\x2a\xe8\x15\x0c\xe1\x06\
+\xa6\xd0\x92\x39\x6c\x2e\x1e\xf1\x0d\x17\x74\x14\x6c\x28\xd9\xb0\
+\xa1\xa0\xa5\xc4\x61\x18\x71\xcc\x9c\x1c\x43\x22\x61\xb2\xa4\xa6\
+\x25\xa1\x23\x26\x23\x0e\x60\x9d\xa6\xc0\x91\x60\x80\x8e\x4e\xae\
+\x81\xcf\x12\x22\x34\xb7\x48\x81\x15\x2b\x5a\x34\x8a\x86\x9a\x82\
+\x98\x04\x85\xa6\xa6\xa1\x93\xbc\xc2\x31\x26\x61\x2b\x3e\x25\xc3\
+\x51\xb2\xe5\x26\xed\xc0\xaf\x7d\xef\xf0\xe9\xc2\xbf\x4a\xfe\x5f\
+\x1c\x9f\x71\x41\x85\xa5\xe0\x52\x60\x12\xff\xec\x0d\x23\x6e\x71\
+\x9b\x9c\x92\x15\x1d\x0d\x2d\x25\x6b\x1a\x22\x52\x14\x63\x4e\x48\
+\xa8\x59\x53\xd2\x62\x68\x80\x8c\x9a\x12\xc5\x98\x92\x98\x44\x0a\
+\x37\x30\x6c\x49\x18\x01\x8e\x06\x85\xa1\xc6\x60\x88\x89\xe8\xa8\
+\x58\x33\xa1\xa1\xa2\x65\x43\x47\x4d\x4a\x07\x82\x58\x75\x34\x54\
+\x7c\x49\xc4\x29\x53\xa7\xd5\xee\xb4\xbc\x72\xd4\xd8\x41\xe5\xfe\
+\xd0\x6d\xef\x5e\x7e\xf5\x84\x82\x48\xea\x8a\x8a\x85\xd4\x80\x2d\
+\x0d\xb7\x78\x93\x63\x34\x4b\xce\x58\x70\x8b\x86\x92\x12\xc8\x99\
+\x30\x66\xc6\x88\x31\xb0\x41\x13\xd3\xb1\x06\x1a\x1a\x34\x39\xe0\
+\x88\x50\x18\x22\xa9\x5e\x5b\x14\x5b\x4a\x5a\x2a\x2a\x09\xdd\xb7\
+\xd8\xe0\xc8\x58\xb1\x25\x65\x83\x96\x1c\x53\x71\xc5\x86\x39\x9a\
+\x44\xa2\x86\x22\x42\x73\xc1\x3d\x32\x22\x37\x57\xec\x5d\x8d\xeb\
+\x60\x84\xe8\xc5\xa2\x85\x37\x48\xc3\xfa\xab\x73\x9e\x70\xc9\x9a\
+\x86\x42\x52\xe1\x1a\x87\x21\xe7\x16\xb7\xb8\x85\x62\x2d\x29\x8e\
+\xcf\x04\x63\x62\xc6\x9c\x70\xc4\x29\x19\x09\x0d\x4b\xb4\x9c\x06\
+\x0d\x54\x38\x49\xd5\x54\x00\x63\x41\xa1\x71\x28\x32\x34\x19\x05\
+\x15\x2d\x73\x22\x0c\x15\x11\x31\x31\xd0\x61\xe9\x68\xd1\x82\x50\
+\x74\x38\x6a\x89\x38\xb1\xc0\xbd\x4b\x2e\x39\x11\x2c\xfc\x7b\x45\
+\x0d\x35\xb8\x1a\x96\xea\xd3\x35\x2b\x96\x5c\xb1\xa6\xa1\xa3\x0e\
+\xb9\x7f\x4a\xc2\x0d\xa6\xf2\x2c\xbd\x63\xad\x25\xce\x27\xdc\xe0\
+\x35\x8e\x99\x13\x11\x51\x4b\x47\xa3\x22\x95\x3a\xa3\xa3\xa5\x93\
+\xd4\xbb\xa3\x13\x5c\xa3\xa3\x20\x65\xca\x98\x94\x44\x12\xa6\x8c\
+\x84\x05\x8e\x91\x9c\x4f\x25\x91\x43\x91\x32\x66\x85\xa5\xa5\xc0\
+\xd2\x92\x12\x49\x0d\x73\xc6\x9c\xd4\x45\x2a\xf9\xbe\x51\x43\x0d\
+\xf0\x06\xdf\x7e\x89\x80\x92\x92\x88\x9a\x1a\x48\xc9\xc8\x89\x49\
+\xa9\xa9\xe4\x2b\x36\x5c\x91\x63\x48\x49\x98\x72\x93\x1b\x1c\x61\
+\x30\x18\x14\x53\x20\xa3\x61\x43\x4a\x4c\x41\x45\x43\x4d\x87\x91\
+\x53\xd6\xd2\x61\xb1\x68\x1a\x5a\xa9\x42\x33\x14\x1b\x34\x19\x15\
+\x0d\x19\x8e\x82\x58\xaa\xd5\x92\x4e\xea\x93\x86\x5a\x6a\x9d\x96\
+\x18\x83\xe3\x82\x87\x8c\x48\x88\xdc\x4c\x99\x57\x2f\xba\xdc\x41\
+\x87\xaa\xa1\xa4\x09\x5d\x84\x86\x82\x0a\x18\x33\x25\xc2\x31\x01\
+\x1a\x36\x54\x94\x6c\xa8\xc9\x49\x98\x73\xc4\x11\x27\x1c\x33\xa6\
+\x22\x12\x18\x25\xa7\xa6\xe3\x31\x63\x72\xc1\x28\x15\x35\x11\x25\
+\x6d\xf8\xfe\x8a\x31\x8a\x08\x47\x85\x0d\x7e\x43\x03\x1d\x86\x54\
+\x4a\x39\x0f\xf0\x57\xb4\x94\x8c\x70\xe1\xba\xb4\x18\x36\x54\x28\
+\x72\x52\x62\x52\xa2\xdf\x4d\x3f\x7a\xc5\x5a\xc3\xed\xfd\xde\xd1\
+\x7c\xbc\xe6\x9c\x4b\x96\x14\xb4\x68\x29\xa5\x52\x26\x4c\x71\xd2\
+\x7e\x71\x6c\x79\x4c\x4d\xca\x11\x13\x66\xdc\xe1\x94\x19\x53\x46\
+\x24\x18\x01\x54\x1c\x09\xad\x3c\xf1\x92\x15\x0b\x96\xac\xa9\x28\
+\x71\x74\x40\x14\x20\x3a\x1f\x23\x1c\x25\x96\x96\x88\x0d\x31\x8e\
+\x92\x08\x43\x22\xd7\x28\x17\x8f\xe3\x42\x81\xee\x30\x68\xe9\xa3\
+\xb5\x6c\xb8\x60\xc4\x09\xb3\x0f\x27\xdf\x99\x68\x47\xcf\xf3\x0f\
+\x48\x29\x64\x59\xfc\xf6\x8c\x33\x96\x14\x6c\xd8\xd2\x51\x63\x18\
+\x33\x66\xce\x98\x06\xcb\x43\x60\xcb\x25\x15\x19\x47\x4c\x38\xe5\
+\x88\x9b\x1c\xf9\xa3\x89\x26\x0b\xd8\x76\x2c\x00\x7d\x47\x4b\xc1\
+\x8a\x25\x6b\x1a\xbe\xa5\xa5\xa1\xa6\xa6\xa0\xa0\xa2\x42\x49\x38\
+\xf4\x10\x6d\xcb\x8a\x12\xcd\x86\x98\x29\x09\x0d\x2d\x5b\x52\x0c\
+\xbe\x01\xe8\xaf\xad\xc1\x4a\x44\xf3\x0e\x73\xcb\x25\x19\x0b\x4e\
+\xbf\x8f\xb3\xec\x9b\x69\xde\x79\x5d\x72\xc9\x06\x2b\xdf\xbe\x22\
+\x25\x21\x66\xca\x84\x14\x03\xfc\x99\x0d\x6b\x34\xa7\xbc\xc1\x14\
+\xcb\xeb\x62\xa4\x48\x7a\xdc\xb9\x54\x11\x4a\x92\x70\x1f\x8d\x26\
+\x4c\x98\x0b\x1c\xe7\x6b\xcb\x82\x2b\x2e\xd9\xd2\xa0\x31\x74\x58\
+\x0c\x13\x46\x5c\xd0\xd1\xa1\xa9\x70\x38\x12\x14\x5b\x6a\x3a\x12\
+\xc0\xa0\xb1\x68\x29\xbf\xac\xb8\x50\x5f\x9a\xd5\x18\x2e\x58\x7f\
+\xbf\xa8\xe1\xb0\x18\x0c\x57\xee\x1b\x16\x58\x12\xd6\x3c\xe2\x9c\
+\x0a\x85\x62\xc6\x31\x29\x1b\x1e\x70\xce\x9a\x4b\x20\xe1\x98\xdb\
+\xdc\xe6\x98\x84\x23\x66\xcc\x88\x68\xb1\x44\xc4\x12\xe3\xfb\x80\
+\xec\xdf\xa2\xc2\x90\x4b\x1a\x95\x53\x51\xd0\x60\xa9\x29\x28\xb9\
+\x92\xe4\xbc\x93\x40\x1b\xf1\x3a\x35\x25\x9a\x92\x4b\x72\x14\x11\
+\x31\x06\x43\x42\x84\x61\x2d\x10\x4e\x43\x23\xc5\x79\x42\x47\x4d\
+\x4e\xc9\x7d\x72\x5e\x77\x73\xa5\xf6\x4a\xc7\x97\x0a\x9f\x1a\x47\
+\xc5\x15\x0f\xd8\xd2\x50\xb2\xe6\x9c\x2b\x22\x66\xdc\xa6\xe4\x5b\
+\x2a\x4a\x2a\x4a\x1a\x0c\x09\x13\x6e\x72\x9b\x53\x8e\x48\xc9\x48\
+\x42\xd3\x57\x4b\x5e\xe0\x06\x08\xb2\x1e\x70\x1a\x14\x9a\x13\x6a\
+\x2a\x81\x5a\x4a\xc1\xac\x4a\x0a\x4a\x5a\x3a\x1c\x09\x5b\xb6\x24\
+\x18\x22\x20\x26\x11\x88\xd6\x10\x91\x62\xa4\x5b\xde\x49\x6e\xea\
+\x41\xc4\x1e\xff\x7e\x42\xca\x3b\x70\x31\x3b\x51\x07\xdd\x96\x17\
+\x30\x84\x95\x63\xdc\xb2\x76\x4f\xf8\x36\x40\x64\x35\x96\x9c\x9b\
+\x64\xac\xb9\x60\x25\x57\x48\x91\x33\xe5\x36\x6f\xf2\x1a\x37\x98\
+\x08\x9a\xe0\x3f\xa2\x31\x21\x37\xdd\xfd\xab\xa5\x14\x52\x68\x2c\
+\x0e\x45\x44\x22\x65\x5d\x43\xc3\x11\x96\x9a\x2d\x5b\xd6\x14\x12\
+\xa8\x63\x0a\x22\x12\x3a\x14\xa9\x64\x31\x8a\x58\x8a\xfb\xde\x9b\
+\xb5\x74\xb4\x6c\x71\x74\x8c\x04\x1b\x1d\x71\xc1\xcd\xe3\xe9\x33\
+\x0b\xf2\xe7\xe6\x11\x96\xfa\xe3\xad\x60\xc7\x0d\x5b\x5a\x12\x66\
+\x4c\xc9\xb9\x60\x8b\x66\x24\x21\xad\x25\xe7\x26\x6f\x73\x87\x63\
+\xc6\xe4\x24\xb4\x62\x79\x1f\x2d\x76\x67\x4c\x1d\x9c\xb8\xde\x60\
+\xde\xe7\xf7\x6d\x01\x45\x8e\xa3\x63\xcc\x96\x94\x35\x55\xc0\x20\
+\x0c\xb1\x74\x40\x8d\x54\x25\xbe\xfb\x11\x0b\x6e\xdd\x52\xd1\xd2\
+\x52\x48\xd7\x5d\x33\xe6\x84\xdb\x9c\x32\xfe\xcc\xbc\x8a\x8f\xd0\
+\xf2\x8d\xca\xdf\x96\xc0\x84\x35\x57\x2c\x68\x18\xe1\xd0\x2c\x79\
+\x82\x22\x11\x1f\x60\x88\x78\x9b\x9b\xbc\xce\x31\xa9\x27\x7e\xd0\
+\x02\x9a\x98\x48\x5e\xa8\x0a\xff\xf4\x26\xde\xb1\x5d\xf4\xa0\xa8\
+\x73\x52\x76\x39\x34\x5a\xcc\x18\x53\xb1\xa4\x91\xaa\x24\x93\x0b\
+\xa9\x89\x04\xcc\xdd\x99\xcf\x49\xf5\xd1\xe7\x14\x8a\x35\x09\x27\
+\xfc\x8c\x37\x3f\x9b\xfe\x86\xd0\xf6\x79\x69\x67\xd9\x7d\x5c\x52\
+\x48\x82\xe2\xf1\x80\x11\x0d\x1b\x56\x82\x30\x54\x94\x68\x66\xcc\
+\xb8\xcb\x8c\x39\x39\x0a\x47\x4d\x23\x2f\x49\x63\xa4\x80\xd7\x03\
+\x3c\xa2\x0f\xcb\xc3\xee\x53\xff\x46\xfa\x7c\xa0\x09\x9e\x45\x11\
+\xd3\x08\x16\xb5\xa1\x95\xcc\x76\x41\x24\xa7\xa1\x4f\xcd\x3b\x81\
+\xed\x1a\x71\xf2\x2d\x8d\x3c\x14\x4d\x46\xf2\x1b\x7f\x5e\xa2\x6b\
+\x4d\xf1\x7c\x60\xe6\x6e\xc3\x92\x73\x16\x9c\xe3\x18\x31\xc2\x52\
+\x52\xb0\x05\x6a\x2a\x4a\x2c\xc7\xbc\xc9\xdb\xbc\x49\x42\x86\x91\
+\x00\xe6\xdf\x9a\xde\x33\x02\x03\x5a\x87\x3b\x00\x82\xa1\x93\x0b\
+\xd4\x17\x5d\xf1\x80\x1e\xa4\xa5\xab\x31\x62\x49\x23\x78\x83\x0e\
+\xde\xa5\x95\xb3\xd3\x49\x20\x75\x18\x2c\x8e\x8a\x12\xe5\x5b\x8d\
+\x3c\xe0\x3d\x77\xa4\xcc\x20\x6e\xbd\x64\xd4\x50\xf7\x5a\x7c\x46\
+\x79\xce\x94\x39\x39\x2b\x36\xac\xa9\x49\xa8\xa9\x68\xc8\xb9\xc5\
+\x4f\x79\x8f\x4c\xb2\x84\xfe\xc6\xab\x70\x7b\xad\xfc\xee\x90\x50\
+\xb6\x9f\xf2\xba\x80\x2d\x1a\x79\xb2\xfd\xdf\xfa\x0e\xc5\x48\xfa\
+\x5d\x05\x56\x80\x7c\x8f\x4f\x35\xf2\x3d\xbc\xe1\x7c\x46\xd1\x5f\
+\x4e\x7f\xb1\x1a\x1e\x73\x8f\xbf\x23\xff\x78\xfc\xf9\xb3\xe0\xdc\
+\xef\xe8\x74\xf9\x4f\xae\xb9\xef\xfe\x89\x2f\x29\x78\xc4\x09\xc7\
+\x38\xce\x78\xc2\x96\x8e\x52\x90\xe5\xd7\xf9\x37\xbc\xcf\x8c\x34\
+\xf8\x00\x7f\xe8\xe3\x90\xf3\x31\xb8\x14\x4a\x7c\x82\x12\x1c\xba\
+\x6f\xdf\x80\x19\x38\xe8\xbe\xf0\xea\x42\x42\x67\xa5\xe4\x2f\xd8\
+\x4a\xc5\xb3\x11\xc4\xbb\xa1\xa4\x12\xa6\x95\x93\xf0\xdb\x08\x7e\
+\xf5\x10\xcb\xeb\xb4\x74\xbc\xcb\x7f\xe4\xdf\x73\xaa\x90\xcc\xf3\
+\x25\x33\xcb\x21\x60\xab\x68\x58\xd3\xb2\xa5\x45\x61\x98\x60\x88\
+\x19\xf3\x0e\x77\x98\x92\x0d\x0e\x72\x4f\xd8\xd0\x72\xf3\x19\xb8\
+\xc9\xde\x0c\x43\x0e\xc3\x21\x1d\x6c\x98\x5f\xf4\x57\xcc\xca\x53\
+\xb7\x58\x69\x09\xfb\xfb\x5e\x0b\x24\xac\xa9\x71\x12\xf2\x7d\x2d\
+\xe2\x48\x29\x39\xa7\x24\xa6\xe5\x09\xf7\xf8\x19\x37\x9f\x09\xef\
+\xbf\x40\x5f\xa3\x7f\xca\x31\x1d\x5b\x5a\x29\x71\x3d\xe9\x6f\x3c\
+\x88\x14\x51\x78\x3b\x7a\xf0\x76\x77\x7d\x72\x73\x60\x90\x3e\x70\
+\xda\x70\x86\x76\x89\x8e\x0a\x6f\x5d\x85\x33\xe4\xb3\x0e\x8d\x26\
+\x16\x28\xbf\xa3\x21\x11\x40\xb7\xe6\x52\x7e\x72\x84\x21\x07\x1a\
+\x8e\x58\x71\x25\xc8\x47\xc5\x57\x9c\xf1\x36\xf1\xab\x60\x96\x7d\
+\xc1\x93\x90\x48\x09\xdd\x81\xa0\xce\x8a\x15\x09\x23\x4e\x38\x22\
+\x0d\xb4\x8c\x9d\x29\xf4\x81\xd5\xd5\x9e\x11\xd8\x0b\x79\x56\x6e\
+\xf5\xfe\x67\x0f\x19\x37\x7d\x62\xe6\x82\x89\x7d\x4f\x34\xa2\x95\
+\xd8\x14\xb1\x91\xd8\xa1\x89\x84\x56\x60\x98\x30\xc1\x62\xc9\x18\
+\xd1\xd2\xd2\x3d\xf3\x0d\x47\xcf\x6f\xe9\x18\x61\x2c\xf4\x81\xac\
+\x27\xf5\xf9\xca\xe2\x88\x31\x69\xe8\x88\x0e\x9f\xe9\xae\x05\xa0\
+\x0f\x28\x86\x87\x94\x82\x3e\x03\x75\x83\x7c\x43\x4b\xb7\xb5\xaf\
+\x78\x6c\xc8\x3c\x34\x31\x56\x12\xa8\xfe\xc4\x59\x20\x97\xae\x4a\
+\x6f\xaa\x9c\x8e\x11\xb7\x39\x63\xc1\x8c\x9b\x1c\x93\x85\xcb\xf3\
+\x74\xdc\x78\x01\x84\x4a\xcb\x97\x76\x18\x22\xb1\xbf\xff\x41\x19\
+\x53\xa6\xa4\x20\x8c\xb7\xdd\xdb\xfa\x6e\x66\xb4\x1b\x98\xf9\x59\
+\x6d\x5a\xff\xfc\x87\x0c\x6c\x2d\xdc\x19\x9f\xb2\xfb\x9a\xb6\xbf\
+\x62\x16\x18\xd3\x50\xd2\x06\xbf\x34\xa7\x64\x4e\x4a\xc9\x19\x96\
+\x39\x6f\x09\x41\xf1\x15\xf1\x08\x27\x00\x47\x2d\x66\xf0\x07\xd9\
+\x60\x88\xc8\x98\x30\x22\x96\x00\xe9\x5f\xaa\x93\xec\x61\x68\x8e\
+\xa1\x83\xd4\x07\x3c\x26\x35\x68\x2e\xab\x3d\x6a\x8f\x0b\x27\x03\
+\x81\x8f\x11\xc2\xb2\x22\x96\xb3\xd1\xc9\x75\x00\x25\x3c\xba\x3a\
+\x5c\xcc\x88\x88\x39\x9a\x05\x4f\xe8\x24\x2b\x1e\x46\xaf\x97\x8e\
+\x1a\xde\x0c\x95\xf8\x09\x27\x04\x1f\x43\x4c\xce\x84\x09\x29\x4e\
+\x3a\x57\xfd\x5b\xe8\xa9\x3d\x7a\x60\x06\x2d\x4f\x4f\xed\x71\x59\
+\xf4\xe0\x59\x5f\x47\xe5\xd8\x77\xad\x8e\x88\x2e\x54\x16\x7d\x55\
+\xdb\x9f\x94\x4a\xc0\x98\xfe\xf0\x37\x28\x46\xe4\xdc\xe2\x8c\x15\
+\x2d\xe7\x14\xc1\xb0\xaf\xe4\x23\x34\x09\x39\x39\x8d\x54\x0d\x11\
+\x9a\x84\x98\x9c\x37\xb8\x81\xc1\x92\xa2\xa9\x49\x06\x1d\xf3\x9d\
+\xb3\x53\x21\x54\xea\x01\xbd\x60\xc7\x6b\xda\xfd\x33\xf4\x26\xfe\
+\xab\x5a\xc9\x23\x08\xd9\x86\x96\xef\xea\xe1\xb9\xfe\x6d\x45\x02\
+\xdf\x44\x74\x81\x7a\xe6\xb0\x82\x6c\xbe\x86\xe2\x1e\x8f\x51\x94\
+\xb4\x1f\xa4\x5f\x74\xa1\x5c\x7b\xc9\xbe\x86\xa5\x11\x04\x29\x66\
+\x84\xa2\xc5\x11\x11\x0b\xd0\x1e\x85\xb2\xc8\x3d\x15\x1f\x86\x66\
+\xe1\xa9\xa2\xeb\xba\x4b\xe0\xf6\x3a\x6c\x87\x83\x0d\x6e\xef\xcf\
+\x26\x50\x09\xd8\xfb\x73\xef\x33\x1a\x34\x2d\x63\x32\x2c\x05\x8a\
+\x98\x96\xf6\x0f\x4e\xbd\xa2\xb3\x74\x58\x6a\x6a\x4a\x22\xc6\xe4\
+\xd2\x7f\x82\x88\x91\x74\xad\xd5\x20\xee\xef\x07\x3f\x75\x60\x98\
+\x7d\x33\xec\xa2\x8b\xba\xa6\x02\x3d\x74\xb1\xea\x20\xf5\xea\x83\
+\x28\x21\xec\x1a\xb9\xba\x5d\x30\x65\x4d\x2b\x4c\xef\x4a\x1a\xcc\
+\x0d\x36\x44\x38\xf5\x72\x3e\xc2\x09\x40\x6e\x31\x64\x4c\xb0\x94\
+\xf2\xe3\x23\x71\x8e\x96\x76\x2f\xe2\xab\x80\x4c\xee\x67\x92\x4f\
+\x67\x11\xbb\xe6\xf2\xf0\x49\x0e\xa3\xca\xae\xed\xf8\x34\xb3\xd3\
+\x60\x31\x82\x59\x7b\xaa\xa1\x23\x11\x9e\x96\xa6\x23\x92\x14\xdc\
+\xa2\x89\x89\x49\x25\x0e\xbd\x32\x3f\xa2\x47\x8f\x8e\x38\x66\x46\
+\xcb\x46\xf2\xb7\x68\x8f\x71\xab\x0f\x12\xec\xc3\x74\xfa\xe9\xf4\
+\xf9\xba\xc2\x4b\x85\xb9\x9c\xde\x99\x76\xe1\x9a\xa8\x6b\xd2\x70\
+\x27\xa0\xad\xa1\x45\x13\x85\x41\x98\x36\x60\xd9\x3d\x2e\x12\xc9\
+\xe9\xed\xd3\x3e\xfd\xf2\x86\xf0\x00\x6b\x47\x4e\x82\xa1\xa2\x96\
+\xaa\x2e\x92\x26\xec\x0e\xdb\x3c\xac\x13\xfa\x68\xc1\x41\x03\xf6\
+\xba\x68\xee\x0e\x48\xc2\x87\x79\x86\x1a\x64\xaf\x87\x59\x8e\x7f\
+\x1d\xad\x64\x98\x0c\x2e\x97\x12\xd2\x4a\xcc\x88\x9a\x86\xfa\x99\
+\xd4\xd3\x17\x32\x44\xcc\x18\x43\x1c\x30\x4b\x27\x00\xaa\x0b\xd4\
+\x73\x06\xfc\xaa\xdd\x91\x1f\xba\x4a\x37\xf8\xa8\x3b\xe0\x46\xbb\
+\xa7\x38\x9b\xbb\xb3\xa1\xf6\xd0\xad\x5d\x72\xd5\x0d\x4c\x61\x88\
+\x24\xae\xf4\xf1\xc0\x05\x3c\x14\x39\x11\x39\x25\x1b\xd6\x34\xa4\
+\xd7\x9a\x42\xbf\x88\x21\x22\x12\x72\xb2\x10\xa5\x3d\x0f\xd2\x06\
+\xb0\xcd\xc9\x8b\x50\x7b\x6f\xfa\xb0\xbe\xd8\xb5\x93\xdd\x35\xc3\
+\x47\x6e\x10\xf8\x5e\x84\xda\xa6\x0e\x9c\xa8\x1e\x94\x7b\xc3\xbc\
+\xc5\xd2\xd1\x08\xbe\xbd\x66\x43\xf3\x01\x2f\x8b\x50\x59\xf9\x66\
+\x11\x63\x26\x6c\x89\x85\x1a\x94\x61\xc8\xc9\xc9\x48\x42\xc6\xa7\
+\xc2\xad\x1b\xbe\xf1\xc3\xcc\x80\x01\x5b\x46\xc9\xed\x77\x52\x4e\
+\x69\x6a\x31\x96\x1e\x9c\x10\x04\x01\xdf\x75\x43\xfa\xf6\x90\x95\
+\x9c\xa1\xa5\x95\xd7\x35\x24\xb0\x3b\x69\x34\x3b\xc9\x83\x23\x62\
+\xe6\x38\xd6\x54\x7f\x98\xa8\x57\xa2\x17\x7a\x32\x4e\x42\x41\x23\
+\x00\x98\x96\xbe\xb6\x13\x94\x48\xbd\xf0\xac\x8c\x3b\xf0\x08\x2e\
+\x14\x52\xee\x9a\xab\x72\xf8\xa7\x1e\xac\x77\x21\xc7\xf0\x81\xbd\
+\x0e\xfd\x8b\xdd\xd5\xda\x65\x90\x56\x00\x1e\x2b\xae\xb3\x09\x90\
+\xe0\x4b\x1a\x42\x13\x5f\x66\xc7\x09\x4a\x9c\xa4\x15\x42\xb1\x11\
+\x0c\xc9\xed\x11\x3b\xae\x4b\x8f\x87\x6f\x69\x3f\x3f\x19\x5e\x14\
+\xb7\x67\x9e\x43\x43\x38\x71\x96\x36\x54\x16\x86\x8e\x8e\x5a\x5a\
+\xd1\x5a\x20\xba\x9d\xd7\x70\x72\xea\x5a\xaa\x60\x8a\x56\x98\x57\
+\xd7\x3d\x3a\xfd\xdd\x4f\xd0\x01\xd1\x47\x89\xdc\xb5\x96\x46\x0a\
+\x2e\x35\x78\x36\xfb\x07\xdf\x1d\x20\x52\xd7\x99\xc1\xed\x99\xc0\
+\x0e\x00\x3b\x2b\x7f\xe3\xa4\x1e\xd9\x37\x95\x0b\xe0\x1d\x82\x88\
+\x3a\x5a\x5a\xc1\x26\x5c\x38\x2b\x2a\xb4\x8f\x9d\x34\x96\x5b\xb9\
+\x4c\xdd\x33\xc9\xa7\x2f\xc0\x8f\xd0\x5f\x68\x2c\x15\x48\xac\xde\
+\xa5\x39\x1c\x60\x58\xea\xa9\x13\xa5\x9e\x82\x67\x0e\xcd\xe2\x0e\
+\x80\xfd\xe1\xef\xd5\x33\xda\x42\x04\x3a\xba\x11\x6c\x42\x07\xcf\
+\x42\xc0\xcc\x3b\xb4\xf4\x48\x9c\x34\xa1\xf4\x5e\xd7\xed\x15\x08\
+\xa7\x96\x86\x92\x48\xea\xff\x58\x52\x29\xbd\x97\x33\xee\xa7\xad\
+\xea\x19\x66\xd8\x9f\xad\xea\x61\x3a\x75\x70\x1d\xd8\xab\x36\x86\
+\x95\xcb\xae\x9d\xe3\x24\x9b\xcc\xa5\xdf\x89\x10\x0d\xf5\xe0\xea\
+\xf5\xb5\xb3\x91\xb7\xaf\xbf\x83\x97\xfd\x42\xe0\x6d\x27\xd8\x4f\
+\x0b\xc2\x80\x8f\x9e\x42\x1d\x9e\x9e\xa1\x52\xd7\xfc\x59\xed\xa5\
+\xd6\x7d\x6c\xb2\x52\x4a\xbb\x41\x0e\xa1\xf6\xfa\x60\x9e\xff\xa0\
+\x03\x7c\x67\xe5\x6d\xfb\x8e\x67\x89\xa5\x19\x44\xb0\x5d\x33\xc0\
+\x8a\x89\x7a\x44\xbd\x27\x25\xbd\xa2\x21\x7a\x27\xd5\x84\xe7\x12\
+\x89\x85\xf5\x53\x9e\xe0\xe9\xa2\x8a\xa7\x4e\x89\xdb\xcb\x00\x86\
+\x39\x81\xdb\x23\xa8\xec\x17\x6d\x36\x54\xa8\x7d\x8f\xb3\xef\x7c\
+\x6a\x2c\xed\x00\x96\x55\x03\xe7\xb7\xc3\x50\x23\x39\x1f\xf6\x65\
+\x33\x4b\x1b\x92\x14\x4b\xc3\x48\x6a\xce\x58\x7c\x71\x2c\x63\x47\
+\x5d\xc8\x37\xfc\x8b\xea\x68\x65\xd6\x8a\x81\x2f\x51\x32\xdf\xed\
+\xf9\x8f\x56\x2e\x96\x0d\x1f\x69\xa8\xa9\x42\xfe\x21\x4e\x5a\x7a\
+\x97\x4a\xee\x7f\x47\x23\x90\xa0\x05\x19\x93\xf6\xf0\x40\x42\x4b\
+\x23\x8e\x3c\x06\x69\x15\x23\x7c\x3d\x23\x8c\xfe\x29\x2d\x15\x6b\
+\x21\xa8\xbc\x34\x9c\xef\xe8\xee\xfa\x16\x4a\x27\x2d\x5d\x3d\x80\
+\xdc\x87\x35\x6a\x86\x13\x9a\xb8\x91\x82\x57\x87\xca\xd0\xec\xc1\
+\x76\xfe\x2c\xb5\xa1\xe5\xdb\x33\x6a\x86\x10\xcd\x2e\x67\xd0\xf2\
+\xff\x48\x60\x39\x23\x28\x59\x29\x83\xb6\xbe\xac\x8a\x83\x63\x74\
+\x12\x23\x08\xdf\xad\x67\x62\x9b\x80\xbf\xaa\x97\xcd\x23\x1c\x96\
+\xf6\x77\x95\xb4\xe1\x3d\x21\xa3\x0b\x17\x64\x97\x52\xfb\xe3\xd6\
+\xca\x33\x89\xe8\x84\x14\xe0\x06\x35\x43\x2c\x2f\xc7\x0e\xfc\x87\
+\x09\xc7\x37\x92\xd6\x9d\x0d\x9f\x5f\x87\xf8\xa1\xa4\x73\xa6\x06\
+\x6e\xd6\x9b\x3c\x09\x0d\x67\x2d\x6f\xbd\x1b\xc4\x1d\x1b\xfc\x89\
+\x11\xfc\x3a\x7a\xf5\x32\xdc\xe1\x7e\xe9\x6f\x67\x4a\x4c\x24\xbd\
+\x81\xec\xe0\x9b\x3a\x2c\x6b\x10\xdf\xd1\x48\x73\x58\x87\x52\x59\
+\x63\x48\x50\xd2\x1a\xea\xf1\x84\xde\x23\x34\x92\x58\x77\x83\x48\
+\xaf\x42\xbe\xb8\xff\x7b\x27\xcc\x28\x2d\x20\x0c\xf4\x3a\x24\x5a\
+\x4a\x70\x27\xa7\xb5\x16\x23\x28\x31\x42\x43\x3e\x98\xfe\x7b\x89\
+\xab\xe1\x06\x18\x63\xc2\x58\x80\x8d\x8a\x56\xa6\xfb\x4d\xf8\x11\
+\x4a\xe0\x90\x84\x14\x2d\x94\x41\x3f\xd4\xac\x85\x11\x97\x91\x50\
+\x91\x30\x62\x2c\x06\x88\x04\x69\xd6\x74\x94\x01\x05\xb7\x83\xe8\
+\x61\x07\xa9\xb4\x15\xb2\x80\x91\xb3\x86\xd0\xd4\x7d\xc7\x2b\x0e\
+\x4d\x67\xa4\x27\xee\x06\x73\x3e\x04\x94\xdb\x8f\x3e\xb8\x97\x47\
+\xa8\x76\x9f\x94\xc9\x45\xf0\xe0\x57\x4a\x4e\x26\x13\x17\x36\x70\
+\xe2\x33\xe1\xc1\x9e\xf1\x90\x2b\xc1\xb1\x7a\xb7\x97\x92\xf2\x90\
+\x11\x73\x66\x44\x92\xa6\xcf\x88\x99\x32\x16\x27\xaa\x07\x59\x9f\
+\xdb\x8b\x19\xfb\x25\x7b\x2b\x97\xae\x93\x39\xd0\x46\x1e\x94\xa1\
+\x0c\xaf\xb7\xa3\x91\xec\x62\xe7\xaa\x7d\xf8\x4d\xbe\x0f\x42\x85\
+\xf4\x35\x5b\x71\x5d\x09\x53\xa6\x8c\x30\x02\xec\x23\x2e\x71\x8d\
+\xa3\xe4\x82\x6f\x79\x42\x25\x2d\x7c\x3f\x01\xe8\x69\x5e\x6b\x12\
+\xc6\x8c\x85\xd5\x92\x73\x87\x9c\xdb\xdc\xc4\x50\xa1\x19\xc9\x74\
+\xe7\x21\xb6\xb9\x03\x64\x94\x70\x7d\x15\x9a\xad\x0c\xcb\xf8\x41\
+\x05\x3f\xf5\xd3\x08\xc8\xbf\x33\x87\x0d\xd7\xc4\xb3\x26\x22\x61\
+\x7c\x5e\x97\xa9\x3e\xc7\x59\x0e\x59\x6f\x9d\x1c\xe6\x8c\x31\xb9\
+\xb8\x2e\x1b\xfa\x97\x8a\x7b\x14\x5c\xf0\x80\x73\x6a\x91\xc5\xf0\
+\xdc\x99\xad\x30\xac\x33\x1a\x61\x36\x39\x12\xc6\x28\x46\xe2\xea\
+\xae\xe8\x98\x30\x93\x2e\x6b\x2a\xa0\xb0\x1d\xe4\x95\x08\x3b\x6e\
+\x29\xfd\x95\x25\x0f\x78\x80\xc2\xb2\x65\x0b\x8c\x19\x71\x84\x21\
+\x13\x98\x06\x14\xd5\x20\x87\xf0\x45\x5a\x14\x62\xde\x77\x46\x0d\
+\x7b\x00\x91\x3a\xc9\xd9\x7b\xbe\x41\x24\x93\x38\x53\x32\x0c\x11\
+\x0d\x2d\x39\x9a\x9a\x98\x96\x3f\x73\x9f\x0b\x2e\xa8\x88\x39\xe6\
+\x84\x09\xb0\xa5\xa1\xe1\xb1\xd0\x4a\x52\x20\x65\x4a\xc1\x9a\x88\
+\x91\x50\xda\xad\x28\x44\x4c\x79\x44\xc6\x9c\x13\xe1\xca\x38\x1c\
+\x35\x29\x46\x98\x96\x25\x9a\x15\x8f\x59\x12\x63\x38\xe3\x01\x8f\
+\x68\x65\x84\xa5\x22\x61\xca\x9c\x88\x29\xb7\x38\x0a\x19\x8a\x1b\
+\xcc\x00\x2b\xa6\xd4\x24\xcc\x07\x19\xed\x33\x0c\xa1\x0f\xda\x7d\
+\x5a\x32\xb1\x86\x3a\x38\x9d\x28\x24\x52\x9e\x23\xe1\x7f\xe0\x92\
+\x4b\x1e\x00\x09\x33\x12\x4e\xb8\xc9\x94\x94\x8a\x9a\x2d\x0d\x6f\
+\xf0\x33\x1e\xf2\x84\x2b\x2c\x8a\x8c\x09\x29\x96\x25\xaf\xb1\xe2\
+\x42\x32\xbe\x9a\x05\x05\x73\x8c\x74\xaf\xad\xa4\xf0\xc3\xb3\xb9\
+\xe2\x8c\x6f\xb9\x40\xa1\x59\x71\x8e\x9f\x2a\xae\xa8\x28\xd8\xb0\
+\x62\x49\xc4\x98\x25\x13\x52\x72\xc6\x02\xf4\x37\x32\xc6\xc0\xc1\
+\x95\x78\xc1\xab\xe1\x64\x30\xa1\x67\x4f\x1b\x0c\x85\x70\x99\x12\
+\xe9\x80\x1a\x8c\xf4\x1b\xcf\xf9\x92\x0b\x12\x22\x6e\x72\x83\x5b\
+\xcc\x89\xe8\x18\x13\x51\x53\x11\xa1\x79\xc4\x3d\xbe\xe2\x9c\x73\
+\x96\xdc\xe0\x98\x88\x96\x35\x25\x31\x25\x11\x25\x15\x0d\x6b\x32\
+\x89\x23\x3b\x6a\x88\x0d\xdd\xae\x96\x15\x57\x3c\xe1\x02\x45\xc4\
+\x96\x0d\x2d\x75\x68\x36\x55\x54\x6c\x88\x18\xb3\x25\x23\x63\xc2\
+\x94\x19\x63\x22\x0a\xac\xc8\xf4\xc8\x49\xbf\xd4\xcf\x33\x84\x3d\
+\xf8\xb0\xc5\x12\xe3\x58\xf3\x2d\x8f\x50\x4c\x25\x06\x18\xa9\x3f\
+\x95\xcc\xdf\x44\xac\x79\x02\x8c\x18\x73\xc2\x9c\x29\x09\x2d\x2d\
+\x39\x19\x33\xe9\x2c\xdc\x62\xc4\x31\x0f\xf9\x9a\x2b\x20\x66\x44\
+\xc7\xa5\x38\xcf\x86\x0e\x4b\x4c\x4a\x4e\x8e\xc1\x49\xc1\xdc\xe7\
+\x14\x25\x86\x8e\x82\x0b\xae\x28\xe8\x30\xc2\x74\xd8\xd2\xe2\x48\
+\x98\x30\x62\x43\xc9\x45\x80\xf2\x4b\x0a\x56\xb4\x18\x26\x44\x74\
+\x32\xf3\x23\xc8\xea\xbd\x57\xe0\x59\x6a\x14\x9b\x0f\xbe\xe4\x3f\
+\xb3\x21\xe5\xef\x24\x19\x76\x18\x91\x3c\xb1\x42\x51\xb7\x8c\x19\
+\xf1\x2e\x53\xc6\x92\x3c\xf9\x63\xbd\x95\xb4\x67\x4b\xcb\x94\xb7\
+\xb9\xc3\xbb\x3c\xa1\x20\x26\xc7\x90\x01\x19\x29\x29\x96\x12\xc8\
+\x18\x13\x61\x69\x42\xea\x6d\x05\x95\x74\xb4\x6c\x79\xc0\x05\x25\
+\x0e\x47\xc5\x8a\xb5\x38\xc3\x58\x94\x03\x1c\x09\x0d\x05\x2d\x39\
+\x29\x85\x24\xe4\xa7\x81\x75\xe9\x06\x88\x85\xbb\x06\x3d\x89\x9e\
+\xcd\x60\xf0\xb5\x44\xf9\x87\x07\x14\xcc\x98\x85\x32\xa6\xc7\x05\
+\x3c\x63\xc5\x51\x11\xf1\x3a\x13\x6e\x93\xd1\xab\x02\x69\x34\xf7\
+\xb9\xc2\x72\x44\xca\x9a\x95\xc0\xea\x0d\x15\x6b\x62\xa6\xdc\xe6\
+\x0e\x17\x6c\x51\x8c\x99\xb0\xa1\x20\x66\x44\x1a\xaa\x12\x8f\x2d\
+\x69\x29\xb5\x6a\xd6\xac\xd8\x50\xe1\xe8\xd8\xca\xb8\x8b\x21\xc2\
+\x90\x91\x32\x25\xc6\xb1\x60\x23\x53\x1f\x09\x96\x15\x1a\xc3\x0d\
+\xc6\xa4\xc4\xe4\x92\x6a\xeb\x2f\x9e\xdb\xd7\x50\x21\x43\xf7\xe5\
+\x4e\x84\x23\xa6\xa1\x66\xc4\x2d\x92\x41\x72\xbc\xcb\xe2\x13\x5a\
+\x0a\x62\x6e\x93\x4a\x89\x5b\x62\xa9\x58\x71\xc1\x5f\x31\x32\x85\
+\xb3\x61\xc1\x1a\x45\xc9\x96\x0d\x2b\x14\x5b\x1c\xb7\xc8\x88\x48\
+\x49\xe8\x18\x91\x90\x92\x90\x49\xc7\xbd\x11\xd1\x04\x23\x18\x75\
+\xc1\x82\x9a\x92\x42\xc2\xa8\x93\x6e\x9b\xcf\x6f\x53\x52\xa6\xcc\
+\xb9\xe0\x4a\x26\x02\x7d\xa2\x7f\x85\x61\x4a\x42\x4a\xc6\x44\x46\
+\x2c\xcd\x6f\x9e\xcb\x8f\xd8\x4d\x66\x74\x1f\xb7\x9f\xba\x63\xd0\
+\xff\xc8\xaf\x2a\xd6\x94\x5c\xb0\xe1\x17\xd2\x6d\x54\x82\x05\x68\
+\x2c\x29\x50\xc9\xd8\x51\x19\x22\xff\x86\xff\xce\x1f\x89\xf9\x19\
+\xef\xa0\xd9\x92\x32\xa2\x65\xc4\x4a\x38\xb4\x4f\x58\xf1\x80\xbf\
+\xe7\x94\x3b\x24\xac\x29\xd1\x4c\xa5\x70\xf2\x67\xae\xa1\x16\x16\
+\x54\x4b\x4d\xc4\x86\x25\x35\x5b\x36\x38\x69\xef\x25\xe4\xa4\x18\
+\x1c\x89\xd4\x3d\xaf\x71\xc2\x4a\xc6\x6a\x1a\xa0\xa5\x44\x73\x2a\
+\x7a\x88\x86\x38\xd0\x0a\xae\xcd\x9a\x56\x7b\xb5\x45\xc7\xe6\x77\
+\x97\x1f\x16\x64\x22\x7b\x51\xb1\xe4\x9c\x87\x3c\xe6\x8a\x88\x92\
+\x94\xb7\x79\x87\x09\x1d\x25\xb7\x68\x29\x28\x24\xc5\xee\x98\x70\
+\xc5\x25\x15\x2b\x96\x18\x66\xac\x79\x8c\xa5\xe0\x3e\x1d\x13\x2a\
+\x0c\x39\x9a\x86\x94\x9c\x2d\x4f\x58\xf3\x3a\x7f\xcf\xfb\x4c\xa8\
+\x29\x69\x49\x31\xcc\x49\xa8\xe8\x50\xd4\x74\x94\x94\xf2\xaa\x56\
+\xac\xf9\x0b\x97\xac\x64\x22\x50\x93\x70\x2c\x95\x8b\x67\xea\x67\
+\x52\x5e\x95\xac\x59\xb0\x16\xbd\x02\xc3\x1b\xfc\x8c\xb7\xb9\xcd\
+\x9c\x12\xcb\x7b\xfc\x44\xe6\xfd\xbe\xf3\x44\x28\x1c\xd5\x87\x97\
+\xac\x99\x93\x48\x17\x23\x62\x4a\x43\xc1\x96\x0c\x87\x0a\x48\x76\
+\xce\x7f\xe6\x92\x9c\xbb\xcc\x58\x70\x4e\x4b\xce\x96\x9a\x8a\x25\
+\x0b\x52\x12\x0a\x19\x59\x79\x8d\x11\x8a\x07\x94\x6c\x04\x72\xdb\
+\xa2\x39\x22\xa6\xe2\x4f\x6c\x79\x9b\x39\xd0\x31\x95\x21\xc7\xad\
+\xa8\x0c\x2c\x29\x59\xd3\x01\x15\x57\x2c\xd8\x50\x50\x86\xa6\x70\
+\xcb\x8a\x2d\x17\xa1\x24\x1c\x31\xc1\x90\x30\xe7\x06\x57\x3c\x94\
+\xc1\x5c\x9f\xd9\x5a\x22\x22\xe2\x50\xca\x3f\x07\xc5\xf6\xb7\x7e\
+\xcb\x05\x5b\x92\xe0\x05\x22\x26\x58\x19\x23\x32\xe4\x8c\x88\x25\
+\x65\xfd\x67\xbe\xe6\x94\xd7\x98\x73\x9f\x7f\xa2\xa6\x21\x16\x81\
+\x9c\x9a\x04\x23\x91\x7b\xca\x84\x88\x88\x1c\xcb\x25\x5b\x5a\xb6\
+\x14\x4c\x78\x8d\x9c\x4b\x1e\xb3\xc5\xf2\x1e\x39\xd0\x4a\x92\xa6\
+\x45\x84\xab\x95\x72\xbe\x65\xc3\x39\x0b\x39\xf4\x2e\x10\x83\x5a\
+\x09\xe4\x86\x96\x8d\x50\xd6\xa7\xdc\x60\xc6\x84\x63\x0c\x4a\x26\
+\x00\x17\x94\x81\xec\x94\xbe\x48\xd1\xe5\xa4\x6e\xeb\x24\xdb\x6b\
+\xc4\x21\x41\x82\xa1\x65\x45\xce\x31\xb7\x39\x92\x2a\xf4\x26\x17\
+\xc4\xb4\xac\x78\xc8\xd7\x14\x3c\x61\xc6\xeb\xbc\xce\x58\x34\x29\
+\x6f\xb0\x66\x45\xc3\x25\x17\x1c\xf1\x2e\x2b\x62\x26\x52\x29\x1a\
+\x0a\x72\x3a\x2c\x05\xff\x42\xcd\x6b\x8c\xf8\x0b\x8a\x53\x6e\x31\
+\xc7\xb2\xe0\xb1\x0c\xb7\x16\x5c\x72\xc1\x25\x1b\x56\x22\xed\xd2\
+\x77\x59\x2a\xb4\x88\xed\x28\x5a\x6a\x2e\x88\xb8\x62\xc1\x8c\x0c\
+\x45\xc6\x0d\x2a\x0c\x5b\x0a\xb6\x01\x40\x4c\x06\x03\x34\xcf\x34\
+\x84\x01\xba\x8f\x3b\x62\x52\x41\x7e\x12\xf9\xb0\x2f\x85\x16\x4c\
+\x99\x32\x23\x13\x85\xb0\x7f\xc7\x6d\x3a\x22\x0a\x72\x6e\xb3\x66\
+\x49\xc6\x88\x31\x13\x5a\x36\xac\xf9\x13\x6b\x9e\x70\x49\x89\x25\
+\x61\x44\xce\x88\x23\xe6\x8c\x48\x29\x58\x90\x30\xc7\xf0\x17\xfe\
+\xc4\xd7\xbc\xc3\x1b\x7c\x8b\xe1\x27\x44\xdc\xc2\x72\xc1\x1f\x69\
+\x80\x9a\x4b\x1e\x73\x49\x85\x65\x45\x3c\x28\xc8\x3a\x2a\x1c\x15\
+\x35\x63\x46\xc4\xc4\x62\xe0\x92\x52\x38\x5e\x13\x20\xa7\x13\xd6\
+\xb7\xa2\x93\xb9\xb2\xe7\x1a\x42\x61\xe9\x3e\xb6\xc4\x21\x0f\xeb\
+\xe1\x8e\x94\x31\x13\x2a\x72\x32\x01\x4f\x62\x52\x32\x46\x6c\xa9\
+\x69\xb8\x43\xc6\x8a\x88\x09\xc7\xe4\xd4\x5c\x70\xc6\x9a\x25\x37\
+\xb8\x62\xcb\x98\x77\xd8\x70\x9f\x0d\x11\x67\x4c\x38\xe5\x94\x9c\
+\x88\x96\x11\x29\x96\x35\x97\x54\x9c\xf3\x57\x14\x0f\xd8\xf0\x73\
+\x12\xfe\x85\x7b\x3c\x14\x91\xcf\x15\x8d\x88\xae\x25\x8c\x49\x50\
+\x74\xd4\xd4\xa4\x44\xe4\x4c\xc8\x50\x54\xd4\x42\x5d\x69\xa4\x4b\
+\x1b\x09\xf0\x3b\x22\x97\xaa\xb9\x44\x13\xfd\x5e\x89\x54\x97\x7d\
+\x76\x42\xe5\x70\xd8\x5f\x76\xa2\xfb\x93\xc9\x13\x81\x9c\x88\x88\
+\x4e\x9e\x87\xcf\xcf\x0c\x29\x1b\x72\x34\x1b\x19\x7c\x4e\xb9\xc9\
+\x94\x89\xa4\x3b\x05\x35\x53\x6e\xb0\x22\x67\xc6\x98\x25\x25\x77\
+\xa8\xe4\xc7\x97\x68\x52\x5a\x5a\x22\x6e\x93\xb0\x61\xc3\x7d\x2c\
+\x8a\x96\x8a\x02\xc3\x88\x13\xd6\xac\x58\x70\xc5\x56\x72\xd9\x58\
+\x0e\xb7\x17\xee\xeb\x64\xc2\x37\x25\xa2\x1d\x00\xc6\x95\x8c\xee\
+\x5b\x16\x18\x32\xc6\x4c\xa4\xf3\xd1\xa1\x89\x3e\x7a\x01\x67\xd9\
+\xc9\x29\x50\xc2\x7f\xa8\x68\xa9\x65\xc2\xb2\x11\x18\x3c\x21\x96\
+\x9a\x73\x87\x09\x77\x34\x94\xa1\xfd\xae\x88\xe4\x49\xdf\x20\xe2\
+\x82\x19\x35\xff\x85\xc7\xd4\x9c\x02\xc7\xfc\x1d\x47\x9c\xb3\x20\
+\x66\x8e\x25\xe3\xe7\x4c\x58\xf2\x9f\x38\xe7\xe7\x18\xee\xf2\x6f\
+\x79\x8b\x31\x6f\x70\xc2\x4f\xb8\xc7\xff\xcb\x15\xad\x74\x30\x62\
+\x20\x23\x66\xc4\x94\x09\x09\xf7\x25\xcd\x8a\x98\x73\x83\x19\x1b\
+\x0a\x89\x32\x9e\x1f\x5c\x8a\x50\x57\x4a\x4b\x21\x28\xbc\x79\x91\
+\x4e\x57\x24\xa1\x31\x93\x52\x65\x1c\xb4\x80\x7a\x1a\x48\x1c\xf0\
+\x49\x3f\x22\xe0\x85\x51\x5a\xf9\xd1\x33\xe1\x6c\x6f\xf1\x3a\x43\
+\xc7\xb4\x9c\xf2\x0d\x97\x4c\x99\xb3\xe5\x26\x11\xb7\x79\x9b\x29\
+\x29\x17\x38\x32\x1a\x3a\x8e\x78\x8f\x35\xff\x89\x07\xfc\x8c\x11\
+\xb7\xb9\xcb\x9b\x58\x52\xa6\x5c\x32\xe2\x4b\x62\x4e\x59\xb2\x41\
+\xf3\x96\x0c\xdb\x26\x94\x7c\xcb\x13\x96\x24\xc2\xf6\xcb\xc8\x99\
+\x32\xc2\x89\x4e\xae\x57\x4f\xb6\x02\x17\x68\x26\xe4\xc0\x4a\x1e\
+\x9a\x0b\x3d\x97\x67\x76\xc3\x55\x38\x82\xbd\x6c\xa2\x15\x3a\x96\
+\xd7\x14\x8d\xa5\x35\x67\x03\xbd\xc3\x08\x09\x23\x26\xe5\x88\x63\
+\xe6\x4c\x98\x32\x27\xa5\x63\x8d\xe1\x36\x6f\x71\x4c\x42\xc6\x31\
+\x25\x31\x6f\xf0\x3e\xaf\x73\x44\x8a\x61\xc4\x5b\x18\x6a\x4e\x19\
+\xd3\x31\x67\x45\xc4\x11\x59\x98\xdd\x54\xe4\xcc\x19\x49\x4f\x2d\
+\x62\x84\x62\xcb\x05\x17\x6c\xb0\x32\x79\x3a\x95\x57\x51\xb3\xa0\
+\xa2\xa1\x0a\x59\xe5\x5a\x06\x16\x3c\xbc\x57\xb2\xe6\xbf\x73\x49\
+\xf7\xa9\x83\x01\x0d\xe5\x19\xd5\xa7\xc7\x12\xdb\xc0\xb7\x4e\xc8\
+\xa4\xe4\xed\x30\x64\x8c\x64\xb6\xd2\x05\xaa\x71\xff\xdf\x11\xad\
+\x8c\xcb\xfb\x03\xb8\xa6\x22\x65\xc4\x9c\x39\xef\xb1\x02\x34\x5b\
+\x8e\x78\x8f\x9c\x0a\xc5\x11\x29\xf0\x3a\x57\x34\xcc\x59\xa0\x78\
+\x0b\xc3\x4d\x5e\x93\xe2\xc8\x8a\xa0\xeb\x11\x89\x88\xbc\x65\xa4\
+\x94\xd4\x64\x1c\x73\xcc\x39\x05\x47\xcc\xb9\xa4\x12\x44\x2b\x21\
+\xa6\xa3\x10\x0d\x23\x4d\x21\xe7\xe1\x8a\x11\x11\x73\x52\x2c\x0d\
+\xab\x4f\x2e\x3e\xd9\x72\xc4\x0d\x15\x7f\x97\x8f\xb0\xe8\x7f\x4c\
+\x7f\x69\x24\xe0\x78\xe0\x7d\x2b\x3e\xba\x63\xca\x28\x08\x66\xea\
+\x40\xf3\xf1\x0d\x39\x3f\xc2\x3e\x46\x93\xca\x41\x2b\xb8\x8d\x22\
+\xe1\x06\xef\xb1\x66\x45\x29\x99\xdd\x92\x15\x25\x23\x8e\x29\x25\
+\xc9\x69\x68\x38\x26\x67\xc2\xcf\x79\x8d\x34\x50\xd5\x62\x66\xdc\
+\x26\xa7\xa6\x25\x62\x4a\xcd\x9a\x96\x1b\xfc\x3d\x6f\xf0\x47\x2e\
+\x69\x58\xb1\xc5\x91\x92\x61\x98\x73\x83\x35\x4f\xd8\x02\x33\x14\
+\x1d\x25\x8e\x9a\x25\x86\x8a\x8a\x29\x1b\x2e\x79\xc4\x13\x9e\xf0\
+\x36\xa9\x3b\x51\xee\xd9\xe1\x53\x13\xff\x2a\x76\x36\xa4\xd1\xbe\
+\xd5\x87\x94\x2d\x99\x88\x27\x32\x50\xb4\x55\x01\xaa\xc9\x59\x09\
+\x0c\x97\xd1\xe1\x18\x91\x0a\xc2\xe5\xb9\xbb\x8d\xa8\x3a\x24\x52\
+\x53\xae\x98\xb1\x60\xcc\x11\x4f\x28\xf9\x09\x0b\x7e\xca\xfb\x4c\
+\x84\x13\xe9\x95\x28\x46\xbc\xcb\x1b\x3c\xa0\x22\x25\x13\x24\xc4\
+\xa0\x30\x9c\xf0\x36\x5f\xb2\x02\x66\x9c\x10\xe3\xc8\xb8\x49\x4a\
+\x25\x91\xc9\x49\x3b\xd0\x33\x3b\x1e\xb0\x25\xa6\xe2\x18\x45\xc1\
+\x8a\x95\x0c\x70\x3e\x13\xb3\xec\x59\x28\x5e\x83\x70\x4d\xc5\x16\
+\xcb\x14\x2d\xe5\xae\x09\x83\x08\x43\x42\xb0\x95\xce\xe3\x29\x8e\
+\x25\x23\xd2\xa0\x60\x3b\x22\xc7\xb0\xa6\x26\x65\x42\x4d\x41\x1b\
+\x84\x7c\x6b\xa0\xe0\x98\x39\x67\x74\xbc\xcf\x92\x9f\x33\x17\x08\
+\x30\xc2\x91\x70\x8e\x66\xc6\x5b\xfc\x15\x87\xa2\x91\xeb\xa4\xf8\
+\x9a\x86\x23\x7e\x41\xce\x7d\xb9\xb4\x8e\x29\x27\xc4\x8c\xb8\x45\
+\x4a\x11\xf8\x94\x29\x13\x72\x6a\x12\x46\xc4\x14\x6c\xf8\x26\xf4\
+\x46\xdd\x77\x23\x54\x3e\xcd\xf6\xdd\x44\x0f\x7f\xa4\x4c\x44\x04\
+\xab\x0b\xf4\x9e\xbe\x17\xa9\x03\x2f\xd7\x90\xf0\x0b\xfe\xcc\x9a\
+\x96\xa9\xa0\xdd\x0d\x19\x19\x8e\x9c\x44\x78\xd3\x1b\xd6\xb4\x58\
+\x81\xe4\x96\x24\x4c\x50\x54\x18\x8e\x38\xe1\x88\x48\x5c\x71\x4d\
+\x49\x4d\x4c\x49\xc3\x88\xdb\x68\x0a\x0a\xa9\x14\x12\x4a\x56\xdc\
+\xe0\x94\x8c\x8c\x19\x6b\x16\x64\xbc\xcd\x11\x8d\x38\xdb\x25\x57\
+\x62\x4e\xcd\x88\x63\x62\x26\xdc\xe6\x04\xc5\x96\x25\x35\xb3\xbd\
+\xf9\xe1\x6b\x13\xaa\x2e\x70\x27\x55\xa0\x67\x29\x99\x90\xea\x02\
+\x53\xc9\x86\xa4\x6a\x9f\x5a\xfa\x53\x56\x2c\x69\xc3\x90\xe3\x09\
+\x9a\x96\x8e\x94\x88\x8a\x25\x05\x8e\x94\x51\x38\xb8\xdf\xf2\x06\
+\x89\x74\x28\x15\x37\xe4\xda\xf9\xe2\x6b\xc3\x86\x63\x1e\x53\x01\
+\x73\x62\x96\x3c\xa1\x40\x91\x4a\x16\x61\x59\xd1\x30\xe3\x16\x15\
+\x5f\x93\x71\x47\x94\xf0\x0c\x39\x25\x8a\x44\x86\x2f\x2d\x8a\x84\
+\x39\x6f\xf3\x36\x31\x5f\x72\x0e\xcc\x99\x5f\x33\xe2\xb6\x67\x88\
+\x9e\x5d\x5b\xcb\xb7\x84\x96\x84\x1c\x45\x2d\x9d\x22\x85\x15\xe2\
+\xd0\x8e\xb2\xd3\xf7\x13\x97\xbc\x4b\xc2\x9f\xb8\xcf\xbb\x9c\xd2\
+\xb0\x24\x92\xf9\xbb\x2d\x2d\x1a\xc7\x98\x4c\x5a\x3a\x1d\x5b\x5e\
+\x47\x53\x92\x31\x63\xcc\x48\x8c\xa7\x02\xfb\x21\x91\x56\x8e\x62\
+\x42\x22\xd5\xa6\xa3\x65\x4d\x42\x46\x4c\x8d\x16\xbd\x02\x47\xc5\
+\x23\x22\x2e\xa4\x8d\xec\xd5\x6e\xc0\x31\x21\x27\x23\xa7\xe2\x09\
+\x27\xe4\xc4\xdc\x62\x8b\x61\xc6\xe4\xfd\xf6\xc0\x18\x7b\x3e\xa2\
+\x07\xcf\xbd\x3f\x68\xc8\x38\x22\x13\xe1\x94\x72\x8f\x4b\x7b\x5d\
+\x3f\xb9\xc6\x31\xe3\x5d\xce\x78\xc4\x82\x11\x33\xc1\x0a\x12\x69\
+\xca\x7b\xca\xea\x15\x17\x94\x20\xc2\x4c\x23\x46\xa2\x2d\x60\xf6\
+\xc0\x80\xbe\xfb\x19\x8b\x5a\x89\x21\x63\x83\x96\x74\xde\x1b\xad\
+\x24\x21\xe7\x84\x82\x96\x9a\xf5\x80\x9e\x10\x4b\x7e\x33\x16\x35\
+\xe5\x98\x11\x63\xc1\xb1\xbc\x19\xf5\x3d\xf3\xdd\x3e\xa2\xfb\x78\
+\x37\xa8\xd4\x0a\xfa\x90\xd2\xd2\xb0\x0d\x33\x76\xea\x19\xed\xc1\
+\x84\x9a\x09\x33\xe6\xdc\x63\x89\xe3\x98\x8a\x86\x42\xe6\xc5\x6b\
+\x0c\x2d\x05\x8f\x39\x47\x73\xc4\x4c\x84\x37\x46\x64\x72\xa6\xa2\
+\x01\x39\xd4\xc9\x30\xdd\x88\x31\x31\x05\x86\x54\x84\x3f\x9d\xa0\
+\x14\xbd\x20\x64\xca\x84\x92\x15\xad\xe4\xb8\xad\xcc\x25\x1a\x66\
+\x8c\x30\x68\x12\x22\xc6\x8c\x04\x97\xcf\x18\x93\x5d\xc3\x93\x38\
+\x48\xa8\xb8\xa7\x05\x91\x8c\x49\x18\xcb\x19\xe8\x84\x98\xe3\x06\
+\xbd\xa2\xa7\xf9\xd4\x09\x35\x96\x8c\x5b\xb4\x3c\xa6\xe3\x01\x05\
+\x5b\xea\x30\xc8\xf0\xae\x08\x7e\x46\xcc\xb8\xc5\x4c\x44\x5b\x7b\
+\xd1\x3e\x27\x1d\x8d\x5e\x86\x4f\x49\xcd\x33\x16\x71\x8d\x98\x89\
+\x08\x80\x55\x6c\x88\x25\xd3\x6c\xa5\xfb\x92\x32\x62\x2d\xf5\x8f\
+\xef\xa0\xc6\x72\x31\xf5\x80\xbf\xef\x55\x32\x27\x64\xd7\x50\x0c\
+\xa3\xfd\xb9\x0c\xf3\x45\x8c\x96\x14\x66\x42\x8e\x15\x03\xf4\x73\
+\xbe\xee\xda\x86\x99\x12\x6c\x19\x81\xe1\x66\xa2\x42\xd9\x49\xfe\
+\xd0\x33\xa7\x7c\xf9\x1e\x31\x61\x12\xc6\x1c\x74\x98\xf3\xeb\x82\
+\x46\x59\xaf\x03\xe1\x03\xe0\x98\x05\xe0\xb8\xc5\x5a\x4e\x85\x57\
+\xa4\xf2\x3d\x95\x26\x44\xbb\x4a\x46\x5f\x53\x72\x52\x22\x36\x22\
+\xd8\xd5\x33\x7b\xfc\xe4\x57\xca\x8c\xe4\x79\x4d\x60\x87\x22\xba\
+\x4c\x8e\xb5\xa8\xce\x26\x82\x29\x7b\xee\xd4\x6e\xc0\x4c\x3d\x35\
+\xee\xea\xbb\xcf\x39\xb0\xa5\x24\xe2\x88\x19\x5b\x22\x22\x21\x26\
+\xf6\x7d\x68\x07\xa4\x22\xb5\x91\x1c\x4c\x89\x6e\xe5\x27\xec\x8f\
+\xa5\x8c\x39\x92\x7e\x45\x42\x22\x6d\xc0\x9a\x0d\xb1\x34\x00\x6c\
+\x60\x61\xdd\x1e\xcc\x18\x3a\x2c\x39\x63\x51\xca\xb4\xf2\xf3\x2d\
+\x8e\x11\x13\x92\xff\xc0\x77\xe5\x11\x86\x9a\xee\xae\xfe\x22\xfd\
+\x70\x24\xc2\xbb\x2e\x8c\x86\x20\x8a\x61\xc3\x59\xbb\xc3\x19\xd1\
+\x58\xe4\xf2\xb4\xcc\x56\xa5\x72\xdf\x77\xf4\xe0\x58\x14\x0a\x3d\
+\xcf\x2d\x3a\x18\x67\xd9\x5d\x89\x3e\x73\xf5\xc5\xde\x09\x4b\x96\
+\x14\x22\xeb\x92\xd1\xb2\x65\x8b\x23\x97\x11\x25\x83\x62\x22\x3d\
+\xf9\x4a\x48\xea\x8e\x96\x5b\x4c\x85\xea\xd4\x49\x61\x8e\x60\x2d\
+\xc9\x35\x4d\x9e\x83\x06\x4f\xf3\x0f\x5e\x74\xbb\x91\x79\x28\x82\
+\x97\x28\x06\xa3\xc9\xd7\x83\x1b\x49\xd0\xb6\xd7\x34\x34\xd2\x47\
+\xf0\xd5\x6c\x2b\x45\x54\x24\xe9\x3a\x61\xb0\xda\x49\x2f\xc5\x86\
+\xb1\x84\xa1\xac\x82\x23\x66\xcc\x8c\x0c\x43\x8d\x62\xcc\x5c\x62\
+\x58\xcd\xa5\x0c\xec\xa7\x4c\x98\xa0\xd9\x08\xa1\x54\x49\xdd\x39\
+\x65\x22\x17\x89\x81\xb4\x57\x32\x88\x50\xcf\xbc\x1a\x11\xe6\xf3\
+\xe5\x27\x96\x09\x19\x1b\x3a\x1e\x10\x71\x2c\x7a\xb3\x06\x45\x8d\
+\x22\x0d\x2c\x7d\x0e\x26\x6c\x6a\x8c\xa0\xc4\x7d\x08\x4e\x43\x48\
+\xd3\xe4\xe2\x15\x62\x59\x13\xa1\xa4\xcd\xdb\x89\x6f\xb0\xc2\xaa\
+\x26\xf8\x8d\x9e\x91\x9f\x30\xe7\x98\x05\x2b\xd1\xc7\x9e\x71\x07\
+\x4b\xc9\x23\x1e\xf3\x95\x6c\xdb\x38\x66\xc4\x39\x15\x0d\x11\x27\
+\xbc\xc9\x1b\xcc\x59\x90\xb3\xa0\x90\x86\x94\xe7\x5c\x6c\x51\x8c\
+\xdf\x37\xd7\x08\x30\x1d\x14\x5d\xfa\x73\xfd\x89\x95\x09\x4f\x0f\
+\xb8\xd5\x1c\xcb\x88\xa0\x67\x2c\xf9\xb7\x13\x5d\xe3\x2c\x4d\xf0\
+\x33\xbd\x12\x90\x66\x28\x0d\xea\xbb\x1c\x1a\x25\xc0\x48\x2b\x14\
+\x94\x4e\xbe\x4a\x0f\x58\xff\x4a\x1a\x37\x7e\x9e\x74\xcc\x8c\x63\
+\xd1\xcb\x36\x54\xc4\x64\xcc\xb8\xc1\x86\x25\x2b\x2a\x1c\x6b\x36\
+\xe4\x8c\xc8\x99\x71\xc4\x18\xc5\x86\x0a\x44\x92\xa7\x57\xd8\xed\
+\x06\x93\x1d\xea\xbb\xae\x86\xc2\xdc\x8b\x64\x58\x29\xa1\x10\xd7\
+\x67\x84\x2d\x77\xc6\x88\xa9\xbc\xdc\x4e\xc6\x8f\x87\x54\x63\x13\
+\x46\x9a\x4c\x18\x91\x76\xe1\xb0\x9b\xa0\x13\xd5\xb3\x21\x1b\x5a\
+\x1a\x5a\xf9\x0a\x13\x92\xfa\x66\x6f\x14\xbe\x23\x22\x61\xcc\x94\
+\x0b\xd6\x54\x28\x32\x1a\x72\x66\xcc\x83\xc2\x88\x57\x63\xd6\xe4\
+\xcc\x99\x93\x63\x59\x53\xa2\xa8\xe4\xf5\x67\xd2\xb2\x6e\x7c\xc2\
+\x78\x97\x7b\xcf\xa5\x05\x44\xa4\xbf\xe7\x43\x43\xf4\x99\xfe\x7c\
+\xf6\x95\x27\x0b\x2a\xb9\xe7\x0b\xe9\x5d\x49\xa0\x7d\x26\xe7\x4a\
+\x07\xa5\x97\xdd\xfc\x84\x11\x5a\x49\x2b\xd5\x8a\x17\xdc\x23\x8c\
+\x37\xf7\x1c\x5d\x2b\x24\x34\x2b\xd4\xe1\x9d\x86\x44\x44\xca\x15\
+\x5b\x22\xc6\x92\x34\x79\x31\xe1\x23\x5a\x69\x19\x6e\x03\xe5\xd0\
+\x3b\x4d\x2f\x3a\xef\x0d\x14\x0b\xaa\x62\x51\xa8\x7b\xd7\xcd\x19\
+\x46\xfb\xdc\x6b\x43\xfa\x11\xbf\x73\x77\xd5\x3d\x7d\x6f\xfa\xeb\
+\x29\xa3\xdf\xae\x24\x11\xf1\x14\xcf\x5e\x52\xd5\x8b\x9b\xb0\x97\
+\x6c\xbb\x40\xcf\xd1\x81\x1d\xb9\x53\x18\xf1\x2c\x89\x3a\xa0\x05\
+\x9d\x68\x8c\x45\x81\x6a\xee\x67\xc6\x62\xd9\xd5\x55\xc2\x80\x6f\
+\xd9\x9f\xa8\x5a\x34\x95\xbd\x66\x9d\x92\x04\xca\xb3\xab\x67\x41\
+\x18\xb4\x15\xd2\x50\x1d\x66\xba\xb4\x28\x6d\x6a\x12\xf4\x3d\x9e\
+\x3f\xaf\xa1\x88\xb0\x1f\xb5\x9f\xda\x0f\x40\x7d\x11\xdf\xe3\x1e\
+\x7f\xf0\x92\xae\x3a\x30\x18\x5d\x80\x73\x87\x53\xdf\xc3\x49\x60\
+\x42\x5b\xc5\x89\x1c\x46\x07\xf2\x06\x1a\xc9\x1d\x2d\x91\xac\x84\
+\xb0\x81\x50\xda\xd1\x89\x7a\x89\x8f\x53\x43\x53\x46\x02\xc1\x95\
+\x2c\x31\x24\x24\x24\xb4\x32\xf9\xab\xf1\xa3\x56\x08\x9e\xe2\xc7\
+\x96\x7c\xa9\x88\xc4\xbe\x2d\x0b\x59\x48\x60\x9e\xef\x23\xc2\x44\
+\xe6\x5d\xfb\x81\xfd\x80\xe3\xee\xf7\xed\x87\xfe\x09\x1a\x26\xd4\
+\x02\x89\xc6\x52\x0d\x46\x83\x45\x74\x6a\x8f\x89\xbf\x3f\xc7\xdd\
+\xcf\xe2\x39\x19\x80\xe9\xf5\x08\xc7\x42\xf4\xe8\xbf\xce\x8b\xf8\
+\xb8\x30\xe7\xdd\x08\x36\xe6\x6b\x8b\x02\xcb\x98\x8a\x35\xe7\xc0\
+\x24\x08\x41\xea\x30\xaa\xf0\x68\x30\xaf\xe1\x85\x40\x5b\x09\xdd\
+\x1d\x1d\x1b\x96\x34\x02\x15\xf1\x3c\xa2\x48\x98\xa2\xba\xeb\x8e\
+\xa1\xc1\x7e\xd8\x4a\xd9\x1d\x33\xa3\x94\x9e\xe7\x88\x4c\x78\xb2\
+\x6e\xf0\x66\x87\x03\x6b\x3a\x70\xe2\x94\x98\xa1\x92\xc3\x6e\xe5\
+\xd8\x26\xc4\x92\x6e\xa9\x10\x33\x96\x40\x22\xac\x59\x1b\xe4\xc8\
+\x5b\x2a\xb6\x2c\xb8\x92\x55\x34\x4b\xb6\xa4\x34\x83\x8c\xd4\x8a\
+\xf6\xd8\x46\x7c\x91\xbf\x46\x48\x03\x49\x89\x8c\x9f\x37\x65\x1c\
+\x14\xd5\x9f\x43\x14\x11\x48\xff\x57\xcd\x3f\xd8\x5f\xee\x18\xab\
+\x1d\x39\x6f\x50\x49\xc9\xac\x68\x45\x7a\x47\x0d\x38\xfc\x4a\x6e\
+\xb3\x15\x38\xc4\x4a\x6b\xad\x13\x55\xca\xde\x39\xf6\xfa\x75\x11\
+\x0d\x95\xe8\x9e\xf6\x18\x44\x43\x21\xaa\xd9\x7e\xed\x80\x1f\x48\
+\x58\xf2\x0d\xf7\x39\xa7\x25\x13\x7e\xe6\x8a\x33\x26\x28\x34\xb9\
+\xcc\xff\xa8\x30\xc6\xe0\x49\xa8\xad\x40\x3c\x15\x19\x19\x23\x60\
+\x43\x8d\xe5\x16\xf3\x30\xde\xaf\xbe\xdb\x47\xf8\xab\xe1\x7e\xd9\
+\x4a\x3e\x80\x48\x78\xb6\x6c\x64\x6c\xc5\x1d\x0c\xb2\x33\x18\x79\
+\xb4\x61\xc8\x44\x85\x3c\xd4\x49\xba\xdc\x05\xef\x1f\xe1\x68\x18\
+\x03\x9a\x8a\x0d\x57\x94\x28\x51\xaf\x8d\x84\x9e\xa6\x65\x98\xf1\
+\x09\xdf\xf2\x80\x2b\x11\x1a\xf6\xb3\xc8\x25\x0b\x9e\x30\x96\x82\
+\xae\x7f\x43\x47\x41\xa7\xdb\x0a\xa3\xc7\xbb\xe5\x94\x18\x47\x41\
+\x47\x16\x3c\xc4\x73\xc2\xe7\x21\xf3\xb6\xa7\x9c\x1b\x52\x26\x81\
+\xff\x78\x38\xdb\x4d\x50\x88\xda\x5d\x2f\x7f\x5b\x1b\xc1\xb1\x7b\
+\xce\xb4\xe7\x44\xe6\x44\xa2\xa1\xde\x51\x70\xc6\x9f\xf8\x8a\x2b\
+\x3a\xc6\xdc\xe1\xe7\xbc\xcb\x11\x48\x73\xb9\xe6\x82\xfb\x7c\xcd\
+\x19\x05\x8e\x5a\xd6\x0b\x40\xcd\x8a\x0b\x4e\xc9\x28\x84\x18\x6b\
+\x80\x29\x95\x44\x8d\x5a\x94\x66\x3c\xf9\xcd\xf7\xef\x37\x28\x8e\
+\x39\x21\xf9\xb5\xbe\x76\x68\x37\xba\x4e\x65\xc8\xdc\x33\xbf\x77\
+\x1f\x76\x61\x8e\xd6\xff\x6d\xb2\x47\xf8\xe6\xa9\x89\xbd\xc3\xa1\
+\xd5\xdd\x3c\xa7\x0f\x7a\x06\x4d\x2a\x50\xae\xc6\x70\xc1\x86\x47\
+\x7c\xc9\x7f\xe5\x3e\x25\x86\x9c\x85\x3c\xf3\x84\x42\xf4\xf0\xae\
+\x38\xe3\x9c\xc7\x54\x68\x0c\x95\x68\xe9\xf7\x8b\xaa\x52\x72\xf9\
+\x0a\x17\x76\x7a\xb5\xb2\x58\x62\x37\xa5\x9e\xc8\xfe\xd0\x13\xee\
+\x70\x93\xe4\x73\xf5\x22\x3e\xa2\x97\xe0\x52\x1f\x45\x94\xce\x4f\
+\xe0\xd9\xa0\xda\xb1\x1b\x23\xd8\x65\x96\xfd\x84\x94\x1a\x4c\xe6\
+\xb8\x60\x2c\x4d\xcd\x56\x18\x2b\x7e\xcf\x8a\xef\x9f\x26\xb2\x27\
+\xa3\x64\x03\xdc\x60\xce\x29\xb7\x69\x50\x9c\xd1\x92\x63\xa9\x78\
+\xc2\x9a\x0b\x1e\xf1\x0d\xe7\x34\x02\xbc\x19\xaa\x90\x94\x17\x94\
+\xb2\xf7\xb1\xd7\x0f\x68\x04\xd9\xf4\xf9\x45\x25\x72\x1a\x19\x0d\
+\x6b\x11\x17\x9c\xff\x63\x34\x08\xf5\xcf\x21\x9c\x2a\xf1\xbc\xf5\
+\x9e\x3e\x90\x12\x4e\x15\x07\x33\xbf\x3b\x51\x83\xee\x80\xd3\xdf\
+\x0a\x93\xa1\xa0\x09\x7a\x03\x59\x88\x12\x31\xc7\x54\xe4\x8c\xb8\
+\xc9\x88\x9f\xf0\x1e\x37\x59\x73\xc5\x96\x8a\x73\x2e\x58\x52\x72\
+\xc1\x19\xe7\x5c\xb0\xc5\x49\x85\x63\xa5\x83\xb5\x2b\xed\x3b\xc9\
+\x44\x7d\x70\xee\x42\xb2\x6f\x28\x04\xe3\x8c\x58\x71\x85\xc2\x30\
+\x25\xff\x95\x7a\xbe\x8f\x18\x1e\x19\x8d\x23\x7e\x1f\xcc\xa7\xd1\
+\x87\x4e\x9e\x66\x21\x23\xe6\xfb\xcf\x7d\x98\x57\xee\x8f\x44\xd7\
+\xa2\xad\xee\x88\x85\x61\xbb\x43\xaa\x3b\x51\x9a\xbc\xc1\x5d\x6e\
+\x91\x70\x9b\x29\x1d\x63\x46\x94\x3c\xe6\x09\xf7\x39\xa3\x63\x21\
+\x53\x19\xfd\xd5\xf3\x1d\x38\x15\x0a\xbf\x48\xc2\x25\xe2\x8e\xdb\
+\xb0\xd9\xa1\x6f\xe1\x68\x32\x0c\xe7\x2c\xb8\x49\x17\x84\xdb\x5e\
+\x68\x12\x78\x07\xc6\x8d\xee\x81\xfb\x68\x37\x4f\x7b\xee\xf4\xc0\
+\x63\xa8\xa7\x74\x40\xf4\x40\x92\x51\x05\xde\x84\x57\x17\xed\x71\
+\xea\x5e\xbb\xba\x11\xec\xeb\x16\xa7\x82\x55\xc4\x94\x02\xd3\x97\
+\x2c\xd9\x50\x73\x45\x41\x4b\x02\x68\x09\xd8\x3d\xb5\xd9\x08\xd6\
+\x19\x49\xab\xc6\x84\xb8\xe4\x27\xc5\x6b\x01\xf0\x7a\x95\xcb\x2d\
+\x85\xcc\x31\xf7\xa3\x57\x2f\x30\xe5\x77\xa8\x24\x67\x42\x9d\x91\
+\x0d\x86\x81\x5c\xc0\x13\x76\x9a\x0e\x76\x4f\xa8\xc0\xdf\x61\x4f\
+\x46\xcd\x48\xc3\xbc\x56\x9f\x6f\x78\x86\x85\x4f\x81\x0d\x95\x28\
+\xa6\x3a\x14\x37\x78\x0f\xc3\x05\x67\x5c\xb1\x09\x13\x7a\xa9\x4c\
+\x89\xf8\x81\x83\x29\x73\x4e\xc9\x85\x9a\xd6\x05\xf9\xd7\xbe\xd2\
+\xb0\xe2\x33\xee\x70\x0b\x47\xc2\x31\x11\xb1\x68\xa9\xbf\xf4\xb8\
+\xe3\xd3\x9f\xda\xf7\xbe\xdc\x30\x0b\x3d\xc8\x2c\xfb\xa3\xd9\x0a\
+\x8c\x13\x49\xd3\x68\x28\xed\xe8\x02\x03\xa6\xc7\x3d\xbd\xea\x99\
+\x0f\xb3\x8e\x19\x77\x79\x9d\x87\x3c\xe1\x4c\x96\x18\x5a\x52\x69\
+\xf8\x65\x18\x8c\x48\x8f\x0f\x05\x7f\x7a\xd1\xdf\xdd\x03\xf1\xe0\
+\xaf\x91\x4e\x6c\x7c\xc0\x27\xfd\x1e\xdb\x1d\xa3\xcf\xcc\x27\x26\
+\x4c\x59\xed\x9c\xe5\xae\x05\xd8\x0a\x94\xda\x4a\x17\x3d\x91\x9e\
+\x05\xb2\x10\x44\x0d\xc6\x67\x9d\xb8\xbe\x4e\x68\x00\x5a\x06\x9d\
+\x2a\x3a\x09\x8b\x63\x72\x0c\x57\x42\x15\xf5\x13\x40\x91\x78\x9b\
+\x89\x70\x67\xfa\xae\x6c\x27\x86\x70\x83\xa1\xe7\x52\xe4\x60\xda\
+\xd0\xb1\xbf\x5e\xef\xe8\x85\x35\x66\x82\x21\x7e\x13\x07\x85\x80\
+\xa1\xf4\x81\x3b\x80\xd8\x90\x26\x8c\xa7\x96\x8c\x06\x94\x3e\xf5\
+\x94\x3c\x06\x82\x45\x44\xa2\x67\xd4\xc8\x35\xd4\x22\x38\x3e\x63\
+\xce\x09\x37\x39\xe5\x26\x13\xc6\xe4\x64\x4c\x98\x33\x11\x9a\x92\
+\x09\xc5\x5d\x27\x8f\xa0\x96\x1e\x8c\x15\x10\x27\x91\x93\x68\x18\
+\x87\xa7\xee\x5e\x55\x36\xa1\xff\x54\x3d\x50\x12\x1a\x6e\x72\x77\
+\xe1\x87\xb9\x90\xdc\x18\x59\x33\xa6\x02\x53\x21\x0a\x43\xd4\xfb\
+\x4a\x97\x66\x2f\x18\x6b\xa9\x63\xc0\x31\xe6\x88\x48\x5a\x8e\xc8\
+\x38\x63\x24\x30\xbe\xde\xd3\xa2\xe8\xa4\xf4\xaa\x43\x64\xd3\xe4\
+\x42\x3c\xdc\xd0\x30\x62\xc4\x0d\xd2\x57\x5b\x2b\x71\xdd\x20\xcb\
+\x7e\xa6\xd0\x5f\x92\x9d\xca\x6d\x24\x82\x15\xb1\xec\xe4\x24\xcc\
+\x77\x47\x03\x21\x60\xbb\xa7\xfd\xd1\xbf\x0d\x23\xfa\x40\x7e\x39\
+\x88\xa6\x63\xc4\x14\x45\x46\x4d\x4d\x23\xac\x59\x27\x88\x85\x6f\
+\x08\x74\x81\x9a\xe0\x44\x14\xb8\x0d\x4d\x81\x29\xb9\xa0\x99\x30\
+\x61\xce\x4d\x72\xf5\xb4\xb0\xe8\x2b\x18\x62\xe7\x20\xf7\xc7\xdd\
+\xbb\x10\x3c\x75\x18\x77\x4b\x24\xde\x74\x03\x01\xb7\x7d\xf5\x11\
+\x17\xe6\xc2\x6d\x48\xc8\x9c\x80\x80\x1e\x5f\xc8\x84\x3c\xaa\x44\
+\x2f\x24\x16\x77\xba\xbb\x7e\x86\x58\xa2\x9a\x6f\x42\xd7\x41\xea\
+\xd3\x60\x18\x73\xc4\x4d\xa6\x1c\x51\x72\xca\x5b\x1c\x7d\x96\x0e\
+\x84\x04\xbf\x87\x21\x86\xa5\xba\xda\x83\x60\x5c\x58\xf4\xd1\x1f\
+\xd8\x48\xc6\x94\x7b\xc1\x0b\x1f\x24\xd5\x40\x37\x1b\xf9\x8c\x6e\
+\x87\xa0\x13\x89\xb4\x93\x47\x13\x46\x74\x6c\x05\x65\xaa\xd1\xb4\
+\xc4\x32\x4a\xd5\x85\xc4\xdf\x8a\x80\x4a\x3f\xa2\xdf\xef\x84\xf3\
+\x25\xfa\x4d\xde\xe1\x16\x96\x8a\x31\xc7\x2a\x0e\xe9\xf8\x0b\x64\
+\x96\xcf\x1a\x6a\xf2\x07\x3a\xfe\x75\xfe\xdb\x22\x80\x74\x51\x20\
+\xa8\xea\xb0\x2f\xdc\x05\x1d\x01\x27\x00\xbe\x97\x5f\xcd\x98\x0a\
+\x27\xcb\xfb\xfd\x5e\xc3\xde\x85\x69\xf0\xfe\x6a\x39\x99\x1b\x76\
+\xa4\x68\xc6\x20\x33\x21\x91\xf0\x40\x7d\xd3\xbf\xa2\x91\x45\xb9\
+\x09\x39\x09\x1d\x6b\x5a\xc0\xb2\xc5\x12\x93\x11\x91\xf0\x06\x6f\
+\x70\xac\xfc\xf6\x8e\x68\x00\x24\x7e\xcf\x3c\x42\x0d\x26\xb5\xaf\
+\xb3\x6c\xbf\x35\xc1\xc8\x3d\x2d\x04\x58\x3b\xa7\xe5\x98\x5b\xbc\
+\x87\x96\xbb\xbf\x11\x02\x61\xaf\x5c\xdb\x8a\x30\x67\x22\xfb\xfe\
+\x90\x49\x11\x4b\x1e\x26\xcf\x7b\x95\x90\x48\x7e\x8a\xa3\x0e\x72\
+\xaf\x7d\x5b\xa0\x0d\x2c\x5d\xdf\x02\x98\x91\xff\x5e\xef\xa9\x52\
+\xf1\x43\x38\x4b\x50\x5f\xec\xeb\x56\x5e\x6f\x88\x48\x3a\x57\x5a\
+\x66\x6f\x1e\xb2\xe6\x8c\x2b\xf1\xf7\x4a\xf6\x7b\x59\x69\xe4\x1a\
+\xe9\x74\xed\x94\xd5\x77\x5d\x57\x2b\x10\x4f\x8a\x93\x8d\x5e\x26\
+\x5c\x37\x4b\x5f\x1b\xb7\x52\x67\xb4\x61\xa7\x93\x43\x93\x71\xc4\
+\x31\xe3\x8f\x7e\x04\x43\x28\xf4\x3d\xf3\x9c\x45\xa2\x4a\xb8\x2a\
+\x48\xdf\x7b\xc6\x5b\xa4\x5c\x61\x18\xf1\x40\x38\x39\x8d\xec\xca\
+\xc8\x85\xc1\xd0\xff\xf3\x48\x3c\x8b\x97\x43\xd1\x83\x0e\x18\xd2\
+\x18\xb4\x01\x6f\x70\xd2\xf2\x27\xcc\xfb\x76\x01\x97\xea\xe1\xdf\
+\x09\x23\xcc\xde\x58\xf4\x0f\x77\x22\x06\x82\xac\xd7\x69\xd2\x0c\
+\x83\xa8\x87\xcc\x22\x4e\xb9\x29\x0c\x89\x73\x96\x5c\xb0\xa0\x94\
+\xe6\xe1\x2a\xe4\x1c\x29\x63\x32\x8e\xe5\xc0\x37\xb2\xea\xd2\x48\
+\xb5\xb9\x73\xc0\xbe\x15\xe0\x67\xfd\x52\xe9\x5e\x79\x3d\x19\x8f\
+\x52\x38\xd1\x92\xf0\xad\xc2\x11\xd1\x3f\xb2\xb7\xe7\xe5\x87\x3b\
+\x11\x7b\x55\xe7\x75\x31\xa5\x1b\x70\x1e\x32\x01\xe8\x73\xc9\x1e\
+\xe7\x2c\x98\xb0\xa4\x11\xcd\x38\x4d\x4b\x21\xa0\xaa\x41\xf1\x84\
+\x86\x2d\x05\x55\x90\xd9\xeb\x35\x65\xfc\x36\xcf\x58\x82\x63\xc9\
+\x56\x10\x87\x3e\x29\x8b\x06\x5d\x15\x2d\xc5\xf7\x84\x09\xe6\xf3\
+\x97\x49\x17\x5f\xea\x97\x1e\x5c\x0d\x77\x4d\xb6\x6e\x07\x93\xa3\
+\x51\xd8\xd7\xeb\x4f\x4a\xca\x9c\x98\x93\xa0\x2f\xe8\x04\xaf\x58\
+\xb3\xa1\x92\x45\xca\x95\xc0\x70\xbd\x3e\x6d\x8f\x3e\x18\xf9\x0a\
+\x23\x73\xe0\x89\xb4\xf4\xac\xd4\x2f\x91\x34\x95\x7b\xc3\x4c\x38\
+\x61\x8e\xf9\x7c\xa8\xb8\xfc\x03\x5f\x8d\x67\x7f\x43\x13\x42\xa1\
+\x8f\xf3\x3e\x90\x25\x12\x49\x12\x19\x5f\x50\xb2\x6f\xcf\x6b\x90\
+\xcc\x89\xb1\x94\xb2\x35\x67\xc5\x13\xce\x59\x4a\x53\xf7\xb1\x30\
+\x61\x2a\x69\x0c\xf7\xd4\xa3\x96\x9a\x0c\xcb\x8d\x80\x4f\xf8\x39\
+\xaf\x42\xb2\x4d\x88\xc8\x85\x4a\x76\x9d\x3e\xd6\x2b\x19\x62\x5f\
+\x6f\x50\x13\xbf\xaf\xbf\x52\xe1\x12\xa8\x00\xc6\xd8\x20\x7c\xb1\
+\x13\x66\xb2\x82\x2a\xf5\xbb\x9d\x3a\xd9\x84\xd0\x85\x5c\xb4\xa2\
+\x22\x65\xcc\x94\x11\x35\x5b\x40\x73\x2a\xcb\x2f\x4b\x16\x58\x96\
+\x9c\xb3\x92\x45\xec\x17\x54\x92\x2b\x28\x26\x68\x96\x1c\x91\xcb\
+\x38\x53\xc7\x5a\xf2\x0c\xef\x80\x73\x8e\x38\x51\x6a\xa0\xa5\xf5\
+\x3c\x53\xbc\xec\x89\xb8\xa7\x0e\x74\x08\x19\xd0\x8b\x86\x32\xf3\
+\xee\x29\x2d\xec\x9e\xd2\x97\x88\xa7\x6f\x43\xc9\xec\xe9\x87\x69\
+\xd0\x27\xf2\xe8\x56\x2e\xa3\xd2\x39\x6b\x19\x6c\xac\x64\x80\x1e\
+\xe6\xdc\xe4\x26\x73\x26\x41\xb0\xa7\xa3\xc0\x11\x93\x10\x93\x89\
+\x84\xcb\xcb\xfc\x7a\xe9\x84\x4a\xb1\x2f\xc1\xb9\x23\x79\x74\x1c\
+\x4a\xb9\xee\x84\xbb\x86\x22\x7e\x7d\x6f\xc4\x48\xe4\x6f\x02\xb1\
+\x70\x47\x34\xd5\x24\xcc\x85\x99\x63\x85\xc1\x35\x92\xe9\x6e\xdf\
+\x80\xbc\xc9\x09\x53\xb2\xf0\xf1\x46\xae\x62\x4c\xc2\x84\x23\x66\
+\x5c\xaf\x9b\xf8\x03\x3b\xcb\x43\x45\x73\xb5\x57\x14\xbb\x3d\x49\
+\xd7\xfe\x65\x74\x01\xc8\xeb\xcd\xe7\xa4\x17\x6a\x24\x39\x66\x6f\
+\xd1\x80\xa5\xa1\xa0\x94\x6d\xf4\x8d\x94\x52\x7e\xbb\x68\x3f\x36\
+\x19\x63\x45\xde\xad\x91\xcf\xf0\xdb\x7a\xe6\x4c\x7e\x7f\xbd\xb8\
+\xe4\x0f\x74\x35\x74\x20\xef\xf1\x14\xc8\x62\x0f\x8c\x74\x08\xe1\
+\xd8\xd0\x1b\x47\x66\x00\xca\x20\x9f\xa4\x82\x08\xdf\x4e\x61\x7d\
+\x4d\xcd\x9a\x2b\x2e\xb9\x92\x1d\x7f\x8e\x88\x94\x9c\x99\x9c\x85\
+\x2e\x68\x14\xee\x24\x1c\xfd\x10\xf7\x84\xe4\x23\xf5\x52\x97\xe3\
+\x25\x37\xc9\xeb\xb0\x16\xd9\xee\xe9\x58\x76\x07\x9b\xb9\xd5\x1e\
+\x1f\x13\xc9\x2f\x08\xe2\xbe\x16\x4d\x49\x4d\x23\x0b\x70\x7d\x7f\
+\xa2\x15\x2e\x8c\x47\xba\xcf\x28\x44\x66\x61\x43\x8b\x0e\x9c\xaa\
+\x8c\x09\x39\x26\x6c\x5d\x42\xa4\x15\x94\x50\x47\xe6\x9c\x32\xdd\
+\x23\x2f\xfe\x28\x86\xd0\xbf\xd7\x1f\x22\x44\x0c\x33\x40\xb0\x15\
+\x87\xe2\xe0\xd7\xa9\x99\x76\x03\x85\xbb\x3e\x45\x2e\x64\x02\xdc\
+\x6b\x0f\xd8\xb0\xdc\x72\x23\x27\xa6\x14\xbe\x5e\x2a\x53\x66\x5e\
+\x0c\xcc\x57\x28\x06\x47\xc5\x96\x2d\x85\xd0\x0a\x27\xdc\xe6\x0e\
+\x93\x5f\xeb\x17\x48\xab\x5f\xd9\x10\xa0\xd0\x5f\xe8\x0f\x87\x6d\
+\x5f\x06\x70\x8d\x0a\xb3\x3d\x6e\x0f\x28\x75\x83\xc9\x52\x17\xe6\
+\x7e\xa6\x34\xa2\x49\x50\xe1\x68\x58\xb1\x62\x49\x2d\x0c\xbc\x5a\
+\xd2\x6d\x2b\x4a\x32\x31\x23\x19\x75\x8e\x24\xaa\x20\x1f\xf3\xaa\
+\x43\x05\x23\xc0\x30\xe6\x98\x39\xe9\xe7\x6a\x0f\x48\x7c\x81\x6b\
+\xbf\x7a\x29\x58\xc6\x52\xb1\x72\x57\x2c\x44\xb9\x23\x0a\x44\x9c\
+\x7e\x21\x95\x19\x64\x8d\x2a\x38\x57\x7f\xf8\xfb\x55\xb8\x8d\x6c\
+\x7d\xee\x64\xf2\xb7\xa4\xa4\x65\xcd\x8a\x73\x16\xa2\x5a\xec\x44\
+\xe6\xb9\xef\xc7\xfb\xb9\xb1\xa9\xc8\x05\x26\x61\xbd\x89\x1f\x72\
+\x29\x69\x48\x89\x38\xe2\x5f\xf1\x0b\xde\x7d\x7f\x74\xef\x45\xa3\
+\xc5\x2b\x46\x0d\x70\x77\x7b\xe7\xd8\x4a\x71\xa5\x06\xad\x20\x78\
+\x7a\x99\x04\xa1\x26\x1c\xee\x4f\x71\x54\x72\xae\x22\x69\xff\xb4\
+\x34\x8c\xa4\x87\xea\xcb\x29\x42\x87\xd3\xc9\x28\xa6\x9f\x32\xac\
+\xe9\x68\xc8\x24\x1d\x2f\x45\xba\x2f\x41\x91\x73\xcc\x8c\xe4\xde\
+\xcb\x5d\x8b\x57\x32\xc4\xae\xd6\xac\x65\x3d\x91\x1e\x90\xc9\x7a\
+\xfd\x07\x0d\x07\x7b\xba\x86\x86\xf0\x90\x59\x23\xe6\x74\x03\xfc\
+\x33\x91\x53\xd6\x0d\xb8\x15\x9d\x2c\x2e\x48\x05\xa1\xb4\xd2\x0f\
+\x89\x84\x13\xb3\x11\x36\x44\x42\xe4\x37\x94\xff\x3a\x7e\x85\xf7\
+\xf3\xca\x86\x20\x4c\xd8\xc5\xc2\xab\x69\x05\x4c\xd1\xb2\x1f\x67\
+\xa8\x83\xbc\xaf\xda\xe0\xeb\xc5\x7e\x59\x54\x2b\x79\x45\x24\x9a\
+\xc6\x99\xd0\x8a\x7a\x30\xcf\x67\x13\x0d\x0c\xba\xf3\x0a\x84\x5c\
+\x5c\xc9\xd0\x82\x01\x26\xbc\xc6\x2d\xf2\xcf\x79\xe6\xce\x84\x1f\
+\xd0\x10\xea\x9e\x0a\x63\x91\x76\x80\x51\xf6\xfb\x90\x5c\x80\xd2\
+\xf6\x2b\x54\xb5\x57\x07\x6a\x60\x36\x68\xc9\xb4\x74\xc4\x8c\x85\
+\xde\x6a\x64\x67\x43\xbf\x97\x2f\x61\x44\x2b\xe3\x6b\x3b\x31\xd8\
+\x2a\x84\xc8\x9e\xf1\x7f\x83\x37\x99\x7f\xa6\x9f\x41\x88\xfd\x41\
+\xa3\x06\x83\x89\x70\x5f\x21\xf4\xe9\xb2\x47\x9a\xfb\xb3\x61\x07\
+\x7b\x9a\x14\xfb\x8b\xca\x5c\x28\xd9\xd5\x8e\xdb\x49\x47\x1a\xea\
+\x52\x9f\x38\xf5\xcc\xcb\x3a\x40\x32\x3d\x89\xb8\x27\x26\x39\xd9\
+\xe9\xe7\xab\xdb\x9c\x3b\xdc\x22\xfd\x8d\xbb\x46\xda\xf7\x07\x3f\
+\x11\x2a\xd8\x3f\x96\xa1\x14\xff\xc4\xa2\x41\xa6\x61\xd9\x57\x42\
+\x1c\x6e\xe3\x73\x83\x31\x07\xcb\x50\xf8\x4b\x09\xf3\xba\x11\xfe\
+\x6d\x2c\x86\x68\xc2\xf9\x4a\x43\xfb\xc6\x89\x43\xed\x04\xe2\x51\
+\x44\x64\x9c\x48\x22\x45\xd8\x32\xfa\xe3\x5e\x8d\xa0\x62\x6c\xc4\
+\x59\x35\x32\x5e\x9c\x0d\xea\x8f\xe1\xda\x4a\xbd\xa7\x8d\xbb\xe3\
+\xe0\x45\xec\xd6\xa1\x29\x81\xd9\x6c\x60\x60\xf7\x2a\xc9\xdd\x01\
+\x19\xd9\xc9\x89\xb2\x62\x8e\x5a\x96\x1a\xa6\xcc\x99\x91\xa8\x97\
+\x6c\xe8\xbe\x6a\xad\xb1\x93\xe8\x8f\x49\xc8\x44\x12\x29\x62\x4a\
+\x4e\x21\xf9\x5e\x3f\x3c\xdd\x2b\x9f\xfa\x5e\x44\x24\x29\xd8\xae\
+\x8b\xd1\x27\x65\x56\xc0\x7c\x27\xe4\x0f\x47\x25\xd8\x63\xaf\x74\
+\xec\xf9\xd4\x1b\x09\xd8\x08\xb8\x57\x07\x66\xb7\x23\xe1\x94\x9f\
+\xf2\x9a\x0c\x4d\x1f\x2e\xb0\x50\x3f\x5e\xd4\xe8\x67\x32\x62\xd2\
+\x40\x2f\xad\x45\x97\xb8\x17\xed\x4b\x84\xd5\xdf\x4b\xf1\x9a\x70\
+\x36\x5c\xd0\xad\x66\xb0\x43\x41\x05\xb2\xea\x90\x4c\x62\x65\xdd\
+\x4d\x33\x18\x73\x69\x82\x78\x5b\x3f\xf4\x38\x62\xc2\x9c\xec\x33\
+\x33\xd8\xdc\xe3\x7e\xec\xf0\xd9\x17\xd8\x31\x31\x19\x99\x34\xde\
+\x4a\x2a\x12\x29\x85\xfd\xbf\xb9\x64\x85\x3b\x3e\x6e\xb4\xb7\x9a\
+\x46\x0f\x4c\xd1\x5f\xa9\x36\x0c\xad\x74\xe2\x10\x2b\xa9\x37\x1a\
+\x69\x05\xb7\xf2\x7f\x23\x54\xf9\x88\x88\x11\x47\x9c\x70\x4c\xfa\
+\x9b\x67\x13\x41\x7e\x50\x43\xb8\x3d\xb4\xb8\x4f\x75\x3b\x4a\x79\
+\x79\x6d\xd0\xd4\x37\x18\xe9\x3c\x45\xc1\x11\x12\x98\xb8\xec\x65\
+\x99\x0c\x16\x5b\xba\x60\xba\x56\xce\x85\x4f\xbf\xbd\x5a\xaa\x5f\
+\xde\x5e\x51\x88\x57\xe9\x48\xd0\xa4\x4c\x38\xe6\x58\xe8\xe6\x1d\
+\xea\x15\x62\xc6\x2b\x5e\x8d\x7e\x05\xa5\x97\xfd\x6e\x45\x0e\xd6\
+\xc9\xf4\xb6\x93\x37\xee\xe9\x22\x91\xb0\x2a\xa3\xbd\x36\xdd\x4e\
+\x65\x12\x38\x58\x80\xb8\xbb\x3a\x48\x17\xa3\xa3\xa1\x60\x45\x25\
+\x6c\xfd\x62\xb0\x7f\xc9\x2b\x0b\x4d\x99\x92\xfc\x7e\xc7\xa0\x74\
+\x2f\x1d\x37\x5e\xbe\xd6\x08\x75\xa6\x91\xdd\xbb\xde\x3f\xf4\xe6\
+\xe9\x04\x52\x6f\x05\x27\xf0\x53\xe6\xbe\xa9\xdb\x53\xce\xa2\xd0\
+\xb5\xb4\x92\xa1\xee\x66\x7f\x9c\x9c\xae\xdd\x32\xe4\x35\x50\xb1\
+\x65\x2d\x27\xa2\x5f\x26\x60\x24\x6c\x66\xa2\x7f\x13\x7f\xa4\x0e\
+\x62\xd4\xdf\x20\xc5\xd6\xc1\x59\x76\x32\x4a\xd0\x0a\x66\x69\x25\
+\x9d\xd2\xa1\xfe\xf0\x49\x50\x26\xdb\x12\x9c\xb4\x89\x23\x52\xa9\
+\x33\x1a\x59\x73\xde\x27\x69\x8d\x24\xd4\x05\xb0\x61\xcd\x1a\x4d\
+\xc9\x5a\x88\x20\x3b\x69\x60\x25\x52\xc4\xa9\x68\x6d\x9a\x01\x26\
+\x62\xff\x76\x45\x57\xbf\x33\xcd\x88\x92\x59\x1c\x9a\x3b\x9d\xd4\
+\x10\x56\x00\xfc\x3e\xf1\x49\x05\xa1\x56\x02\xed\x2b\x61\x34\x34\
+\x72\xe3\x9d\x74\x2a\x6b\xd9\x93\x50\x00\xa5\xb0\xf2\x3d\xac\x57\
+\x0b\x60\xe7\x45\x47\x8d\xf8\xa2\xa7\x89\xf2\xee\x60\x01\xef\x0f\
+\x60\x88\xa1\x7b\xdc\x29\x9b\xfa\x43\x5c\xa2\x65\x69\xba\x95\xb2\
+\xa7\xa6\x46\xcb\x0c\x76\x23\x8a\xb7\x1e\x48\xa9\x65\x54\x35\x15\
+\x78\x35\x21\x61\x11\xbe\xd6\xca\x89\x68\xd1\x82\x48\x79\xde\xe4\
+\x15\x4b\x6a\x99\xfc\xed\xb3\x58\x9f\x95\xf4\xdb\x04\x73\x51\xcc\
+\xcd\xb8\x2d\x43\x94\x4a\x68\xa6\xee\x87\x86\xea\x54\xc0\x79\xf4\
+\x60\x25\x25\x03\x8e\xad\x21\x16\xf5\x28\x1d\x6a\x91\x2e\x50\x47\
+\x54\x98\xea\xf3\x12\x49\x7d\x83\xb6\x1f\x3b\xb0\x92\x84\x69\x59\
+\x6b\x6d\x25\x44\x76\xa2\x6b\xeb\x85\x9e\x0b\x3a\xe9\x86\xd9\x30\
+\x2e\xe1\x2f\x52\x27\x2e\x3b\xe6\xfb\xfd\x8a\x9e\xe7\x16\x9f\x3e\
+\x21\x84\xbd\x6b\x3d\x01\x3c\x95\x26\x8d\x77\x8d\xad\x88\x26\xfa\
+\x99\x2c\x8f\x47\x55\x61\x74\xc0\x61\x44\xbf\xce\x0f\x92\x20\x6a\
+\x44\x91\x9c\x26\xa4\xcd\xd7\x70\xc9\x8a\x95\xcc\x73\x55\x58\xaa\
+\x81\xe9\xbd\x77\xf0\x17\xc9\xf3\x71\xd3\xff\xf0\xa3\x19\xe2\x90\
+\x8c\x2c\x9c\xa8\x4f\x7b\x9c\x40\xef\x7d\x9e\x16\xf9\x95\xbe\x2a\
+\x30\x52\x23\x74\x41\x72\x7e\x2b\x25\x92\xe7\x4d\x8c\x38\x0a\xfb\
+\xc2\xbd\x21\x12\xa0\xa4\x61\xc5\x15\x2b\x6a\x61\xdd\xd6\x92\x52\
+\x39\x69\xfb\x1b\x51\x2b\x8d\xa5\x57\x52\x13\x7b\x1d\x8a\x2f\x7e\
+\x34\x43\xec\x17\xdf\x04\xd2\x46\xdf\xb9\xe8\x8f\xb5\x92\xcc\x31\
+\x91\x50\xd8\x4f\x73\x69\x31\xc2\x8e\x51\xe9\x27\x34\x3a\xb6\x6c\
+\x89\x29\x88\x45\x6a\xd3\x57\x25\x33\x5a\xb6\x2c\xb9\x64\xc1\x46\
+\xb6\xce\x56\x92\xa5\xd8\xa0\x33\x61\x84\x4b\x67\xa4\x6d\x68\x84\
+\x4d\xa1\xf9\x91\x0d\xc1\x60\x8f\x96\x0e\x3d\x8d\xbe\xba\xec\xd9\
+\x29\xb1\xf4\x34\xfb\x1b\x6f\x05\x4a\xab\x83\x06\x80\x96\x36\x7e\
+\x2b\xca\xd6\x4a\x9a\xbe\xb1\x78\x0e\xc7\x94\x8a\x25\x4b\x56\x6c\
+\xc4\x5d\x36\x61\x72\x18\xd1\x3e\xd2\x03\x95\x81\x26\x94\x76\xd9\
+\x8f\x6b\x08\xb7\x47\x1e\xb3\xd4\x1f\x64\x5f\x40\xf7\x49\x23\x47\
+\xd4\x0d\x1a\x74\x7e\x9b\xa2\x7e\x4a\x70\xa5\x0e\x07\x1a\x61\xcb\
+\x1a\x99\xd6\xea\x58\x8b\x98\x78\x22\x18\x65\x2a\x02\x7b\xb5\xb0\
+\x5f\x90\x3c\x03\x21\x94\xf5\x1a\xec\x4a\xce\x99\xef\x8d\xf8\x7a\
+\x27\x82\x1f\xd3\x10\x7d\x82\xe2\x6b\xbe\xd5\x1f\xdc\x67\xe6\x37\
+\x3d\x10\x12\x53\x85\xd0\xba\x5b\x45\xd9\xc9\x74\xae\x3f\x07\xad\
+\x9c\x1f\x23\x88\x55\x5f\xbe\x57\x28\xa9\x1a\x2a\x59\x8e\x57\x0d\
+\x56\x0f\xda\xbd\x15\x44\xbb\x2c\xf6\xb0\xb3\xe6\x13\xb0\x5e\x6e\
+\xf4\x47\x33\x84\x93\x14\xd8\xa0\xa9\xf9\x8b\xfb\x9a\x2d\xff\xee\
+\x93\x63\xa9\xf9\x5a\xd9\xba\xaa\x84\x41\xe7\x24\x7a\x6b\x12\x2a\
+\xb6\x28\x51\x83\x4b\x24\x1c\x5a\x3a\xe2\xa0\x20\x13\xcb\x46\x56\
+\xbf\x18\xc2\xca\x49\xe8\x85\x76\x86\xab\xb6\x75\xc0\xc3\x34\x3d\
+\x4f\xbb\x0f\xd2\x9d\x44\x27\xaf\xaa\xa8\x9f\x8a\x6b\xdf\xcd\xf6\
+\x78\xce\x98\x82\x7b\x6a\x99\x6d\xcd\xa5\xfb\x33\x7f\xe2\x5b\x7e\
+\x4a\x45\xf5\x89\x0d\x9e\x82\x01\x04\xa7\x43\x36\x69\x44\xf0\xa6\
+\x8f\x34\xdd\x80\x07\xd9\x4f\x62\x79\x44\x61\x26\xe2\xbd\x9d\x90\
+\xc8\x75\x58\x26\xc1\x80\x4e\x60\x0e\x74\xaf\x76\x25\x7b\x26\x84\
+\xb3\x5e\xdc\x75\x58\xb6\xbd\xc2\x89\xd8\x0f\x90\x3b\xce\x91\xc3\
+\xb2\x70\x0b\x2e\xf8\x67\xfe\x09\xc5\xbb\xfc\x9c\xe3\x01\xbc\x46\
+\xc8\xe4\x7a\xb3\xf4\xb1\x21\x11\xd8\x2d\x92\x1a\x40\xc9\x8a\xed\
+\xed\x20\xb8\x36\x02\xb3\x19\x72\xb9\x2e\x5d\xd8\xe5\xea\x06\x68\
+\xa6\x19\x0c\x1e\xa9\xbd\xde\x3b\x42\x27\x88\x48\x19\xc9\xc6\xa8\
+\xe1\x93\xfe\x1e\x99\xe5\x2e\x3f\xef\x28\x3e\xa8\xfe\x70\xc9\x1f\
+\xf9\x92\x33\xfe\xcc\x25\xbf\xe0\x7f\xe5\x5d\x52\xb6\x94\x32\x82\
+\x14\x0d\x58\x6c\x04\x69\x1c\x5f\x1a\xa7\x02\xca\x27\xc2\xa0\xf4\
+\xdc\x88\x9d\x80\x8f\x4f\xd5\x1f\x61\x84\x79\x5d\xcb\xa2\x80\xbe\
+\xfe\x70\x62\xd8\xe1\xe2\xc4\x43\x05\x2c\x47\x25\x9a\x65\x89\x08\
+\xba\xb8\x01\x14\x7c\x1d\xf3\xef\xa5\xa8\x43\x16\x47\xc5\xa5\x7b\
+\xc8\x39\x5f\xf2\x57\xbe\xe6\x9c\x98\x9f\xf3\xbf\xf1\x26\x0d\x2d\
+\x0b\x59\xe6\xa0\x83\x7e\x84\x0a\xab\xb2\x75\xc8\x34\x7a\x8a\x7a\
+\x22\x99\x42\x44\xc4\x56\x8a\xea\x2a\xc8\xff\xf5\x88\xb4\xa7\x79\
+\x58\xe9\x7c\x31\x70\xc1\xc3\x85\x73\x7a\xef\x74\x20\x9a\xa7\x8a\
+\x8a\x52\xe8\xa6\xfa\x80\xc0\xf2\xca\x27\x42\x63\xd9\x7e\xb0\xfe\
+\xc3\x05\xdf\xf0\x15\x0f\xb8\xa4\xe2\x92\x4b\x7e\xc2\xff\xc9\xbf\
+\x25\x66\x03\x32\x97\xa3\x65\x34\x69\x08\xe9\x32\xe8\x7d\xba\xc0\
+\x91\x31\x52\x76\xc5\x14\xc2\x89\x69\xc2\x10\x5a\x3c\x10\x57\xf1\
+\x9a\xa8\x2a\x4c\x10\xab\xc1\xe2\x6b\xb5\x17\x3a\x77\xff\xa4\xd2\
+\xf4\x6b\xf6\xb6\x52\x3f\x8b\x29\xfe\x12\x86\xa8\x59\xb8\x6f\xf8\
+\x0b\x8f\x38\xe3\x9c\x0d\x35\x4f\xd8\xf0\x26\xff\x3b\x3f\x93\x8d\
+\xcb\x88\xcc\x8a\xf7\xd6\xf1\xc1\x8f\x8c\xf7\xdc\xd9\xee\x29\x6a\
+\xf9\x68\x47\x41\x2a\x93\xfa\x8d\x34\xfd\xeb\x80\x5e\xec\xc8\x24\
+\xf6\x29\xb2\xda\xee\x3c\x0c\x77\x91\x97\x72\x36\x5b\x16\x3c\xa4\
+\x70\x37\xdf\x4f\xee\xc5\x83\xc7\xfa\xca\x08\xd5\x63\xf7\x0d\xff\
+\xcc\x1f\x45\x16\x53\x73\xc1\x97\x8c\xf8\x3f\xf8\xbf\x48\xb8\x12\
+\x3c\xb0\x92\x2f\x31\xd2\x89\x3a\xfc\x56\x36\x60\x01\x3b\x49\x0c\
+\x2b\xd2\x1b\x37\xa9\x99\x30\x66\xcc\x39\x89\x2c\x1c\xd1\xa2\x38\
+\xd5\x84\xb0\x69\xaf\xd9\xd8\xd6\xb7\x15\xf7\x4f\xc4\x56\x46\xe7\
+\xd6\xdc\xe3\x02\xf8\x8f\x5f\x4d\x98\xaa\x68\xaf\x0e\x7a\x09\x43\
+\xf8\x36\x6b\x73\xd7\x7e\xfc\xff\xf0\x47\xfe\x2c\xd4\xe0\x46\xda\
+\xef\x6f\xf3\xaf\x70\xac\x83\xb0\xa7\xef\x53\x44\x68\x6a\xb1\xe1\
+\x6e\x3f\x67\x3b\x98\xc1\xe8\x84\x89\xb9\x3b\x11\x09\x15\x23\x66\
+\x1c\xb3\xe4\x88\x05\x5b\x1e\xb3\x64\x1b\xe4\xc5\xd5\xde\x4e\x7a\
+\xb5\xa7\x4d\xa0\x44\x21\x64\x5f\x46\x32\xa6\xa6\x60\x4e\xc6\x82\
+\xff\xca\x37\xac\xf9\x37\xfc\x9d\xbb\xa1\x7a\xe5\x55\x2d\x2a\xb9\
+\x2a\xd0\xd2\x77\x5b\x67\xaf\xc9\x23\x2a\x56\xce\x6b\xdd\x3f\x66\
+\x41\x49\x1b\x10\x24\x98\x73\x2a\xea\x3e\x26\x88\xa3\x20\xd9\xc2\
+\x7e\x57\x0b\x49\x88\x6d\x20\x07\x0c\x57\xd2\xfa\x29\x8d\x2c\x34\
+\xf0\xfc\xc0\x5a\xce\x82\x95\x88\x67\x94\xc1\x59\xda\xf0\x3d\x76\
+\x6d\xc2\x61\x66\xa9\x42\xae\x59\x0b\xeb\xaa\xa5\xe1\x82\xc7\xfc\
+\xdf\x9c\x63\x79\xdf\xcd\x19\xa9\xdd\xf0\x33\xd2\x5e\xec\x88\x04\
+\x40\xba\xbe\x17\xf6\x3f\x00\xe1\x00\x14\x01\xde\x26\x16\xb2\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x08\
+\x0b\x77\x5a\x87\
+\x00\x68\
+\x00\x65\x00\x61\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/graphicsview/dragdroprobot/images/head.png b/examples/graphicsview/dragdroprobot/images/head.png
new file mode 100644
index 0000000..1e520e0
Binary files /dev/null and b/examples/graphicsview/dragdroprobot/images/head.png differ
diff --git a/examples/graphicsview/elasticnodes.py b/examples/graphicsview/elasticnodes.py
new file mode 100755
index 0000000..fa17bee
--- /dev/null
+++ b/examples/graphicsview/elasticnodes.py
@@ -0,0 +1,430 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import (qAbs, QLineF, QPointF, qrand, QRectF, QSizeF, qsrand,
+        Qt, QTime)
+from PyQt5.QtGui import (QBrush, QColor, QLinearGradient, QPainter,
+        QPainterPath, QPen, QPolygonF, QRadialGradient)
+from PyQt5.QtWidgets import (QApplication, QGraphicsItem, QGraphicsScene,
+        QGraphicsView, QStyle)
+
+
+class Edge(QGraphicsItem):
+    Pi = math.pi
+    TwoPi = 2.0 * Pi
+
+    Type = QGraphicsItem.UserType + 2
+
+    def __init__(self, sourceNode, destNode):
+        super(Edge, self).__init__()
+
+        self.arrowSize = 10.0
+        self.sourcePoint = QPointF()
+        self.destPoint = QPointF()
+
+        self.setAcceptedMouseButtons(Qt.NoButton)
+        self.source = sourceNode
+        self.dest = destNode
+        self.source.addEdge(self)
+        self.dest.addEdge(self)
+        self.adjust()
+
+    def type(self):
+        return Edge.Type
+
+    def sourceNode(self):
+        return self.source
+
+    def setSourceNode(self, node):
+        self.source = node
+        self.adjust()
+
+    def destNode(self):
+        return self.dest
+
+    def setDestNode(self, node):
+        self.dest = node
+        self.adjust()
+
+    def adjust(self):
+        if not self.source or not self.dest:
+            return
+
+        line = QLineF(self.mapFromItem(self.source, 0, 0),
+                self.mapFromItem(self.dest, 0, 0))
+        length = line.length()
+
+        self.prepareGeometryChange()
+
+        if length > 20.0:
+            edgeOffset = QPointF((line.dx() * 10) / length,
+                    (line.dy() * 10) / length)
+
+            self.sourcePoint = line.p1() + edgeOffset
+            self.destPoint = line.p2() - edgeOffset
+        else:
+            self.sourcePoint = line.p1()
+            self.destPoint = line.p1()
+
+    def boundingRect(self):
+        if not self.source or not self.dest:
+            return QRectF()
+
+        penWidth = 1.0
+        extra = (penWidth + self.arrowSize) / 2.0
+
+        return QRectF(self.sourcePoint,
+                QSizeF(self.destPoint.x() - self.sourcePoint.x(),
+                        self.destPoint.y() - self.sourcePoint.y())).normalized().adjusted(-extra, -extra, extra, extra)
+
+    def paint(self, painter, option, widget):
+        if not self.source or not self.dest:
+            return
+
+        # Draw the line itself.
+        line = QLineF(self.sourcePoint, self.destPoint)
+
+        if line.length() == 0.0:
+            return
+
+        painter.setPen(QPen(Qt.black, 1, Qt.SolidLine, Qt.RoundCap,
+                Qt.RoundJoin))
+        painter.drawLine(line)
+
+        # Draw the arrows if there's enough room.
+        angle = math.acos(line.dx() / line.length())
+        if line.dy() >= 0:
+            angle = Edge.TwoPi - angle
+
+        sourceArrowP1 = self.sourcePoint + QPointF(math.sin(angle + Edge.Pi / 3) * self.arrowSize,
+                                                          math.cos(angle + Edge.Pi / 3) * self.arrowSize)
+        sourceArrowP2 = self.sourcePoint + QPointF(math.sin(angle + Edge.Pi - Edge.Pi / 3) * self.arrowSize,
+                                                          math.cos(angle + Edge.Pi - Edge.Pi / 3) * self.arrowSize);   
+        destArrowP1 = self.destPoint + QPointF(math.sin(angle - Edge.Pi / 3) * self.arrowSize,
+                                                      math.cos(angle - Edge.Pi / 3) * self.arrowSize)
+        destArrowP2 = self.destPoint + QPointF(math.sin(angle - Edge.Pi + Edge.Pi / 3) * self.arrowSize,
+                                                      math.cos(angle - Edge.Pi + Edge.Pi / 3) * self.arrowSize)
+
+        painter.setBrush(Qt.black)
+        painter.drawPolygon(QPolygonF([line.p1(), sourceArrowP1, sourceArrowP2]))
+        painter.drawPolygon(QPolygonF([line.p2(), destArrowP1, destArrowP2]))
+
+
+class Node(QGraphicsItem):
+    Type = QGraphicsItem.UserType + 1
+
+    def __init__(self, graphWidget):
+        super(Node, self).__init__()
+
+        self.graph = graphWidget
+        self.edgeList = []
+        self.newPos = QPointF()
+
+        self.setFlag(QGraphicsItem.ItemIsMovable)
+        self.setFlag(QGraphicsItem.ItemSendsGeometryChanges)
+        self.setCacheMode(QGraphicsItem.DeviceCoordinateCache)
+        self.setZValue(1)
+
+    def type(self):
+        return Node.Type
+
+    def addEdge(self, edge):
+        self.edgeList.append(edge)
+        edge.adjust()
+
+    def edges(self):
+        return self.edgeList
+
+    def calculateForces(self):
+        if not self.scene() or self.scene().mouseGrabberItem() is self:
+            self.newPos = self.pos()
+            return
+    
+        # Sum up all forces pushing this item away.
+        xvel = 0.0
+        yvel = 0.0
+        for item in self.scene().items():
+            if not isinstance(item, Node):
+                continue
+
+            line = QLineF(self.mapFromItem(item, 0, 0), QPointF(0, 0))
+            dx = line.dx()
+            dy = line.dy()
+            l = 2.0 * (dx * dx + dy * dy)
+            if l > 0:
+                xvel += (dx * 150.0) / l
+                yvel += (dy * 150.0) / l
+
+        # Now subtract all forces pulling items together.
+        weight = (len(self.edgeList) + 1) * 10.0
+        for edge in self.edgeList:
+            if edge.sourceNode() is self:
+                pos = self.mapFromItem(edge.destNode(), 0, 0)
+            else:
+                pos = self.mapFromItem(edge.sourceNode(), 0, 0)
+            xvel += pos.x() / weight
+            yvel += pos.y() / weight
+    
+        if qAbs(xvel) < 0.1 and qAbs(yvel) < 0.1:
+            xvel = yvel = 0.0
+
+        sceneRect = self.scene().sceneRect()
+        self.newPos = self.pos() + QPointF(xvel, yvel)
+        self.newPos.setX(min(max(self.newPos.x(), sceneRect.left() + 10), sceneRect.right() - 10))
+        self.newPos.setY(min(max(self.newPos.y(), sceneRect.top() + 10), sceneRect.bottom() - 10))
+
+    def advance(self):
+        if self.newPos == self.pos():
+            return False
+
+        self.setPos(self.newPos)
+        return True
+
+    def boundingRect(self):
+        adjust = 2.0
+        return QRectF(-10 - adjust, -10 - adjust, 23 + adjust, 23 + adjust)
+
+    def shape(self):
+        path = QPainterPath()
+        path.addEllipse(-10, -10, 20, 20)
+        return path
+
+    def paint(self, painter, option, widget):
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(Qt.darkGray)
+        painter.drawEllipse(-7, -7, 20, 20)
+
+        gradient = QRadialGradient(-3, -3, 10)
+        if option.state & QStyle.State_Sunken:
+            gradient.setCenter(3, 3)
+            gradient.setFocalPoint(3, 3)
+            gradient.setColorAt(1, QColor(Qt.yellow).lighter(120))
+            gradient.setColorAt(0, QColor(Qt.darkYellow).lighter(120))
+        else:
+            gradient.setColorAt(0, Qt.yellow)
+            gradient.setColorAt(1, Qt.darkYellow)
+
+        painter.setBrush(QBrush(gradient))
+        painter.setPen(QPen(Qt.black, 0))
+        painter.drawEllipse(-10, -10, 20, 20)
+
+    def itemChange(self, change, value):
+        if change == QGraphicsItem.ItemPositionHasChanged:
+            for edge in self.edgeList:
+                edge.adjust()
+            self.graph.itemMoved()
+
+        return super(Node, self).itemChange(change, value)
+
+    def mousePressEvent(self, event):
+        self.update()
+        super(Node, self).mousePressEvent(event)
+
+    def mouseReleaseEvent(self, event):
+        self.update()
+        super(Node, self).mouseReleaseEvent(event)
+
+
+class GraphWidget(QGraphicsView):
+    def __init__(self):
+        super(GraphWidget, self).__init__()
+
+        self.timerId = 0
+
+        scene = QGraphicsScene(self)
+        scene.setItemIndexMethod(QGraphicsScene.NoIndex)
+        scene.setSceneRect(-200, -200, 400, 400)
+        self.setScene(scene)
+        self.setCacheMode(QGraphicsView.CacheBackground)
+        self.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
+        self.setRenderHint(QPainter.Antialiasing)
+        self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
+        self.setResizeAnchor(QGraphicsView.AnchorViewCenter)
+
+        node1 = Node(self)
+        node2 = Node(self)
+        node3 = Node(self)
+        node4 = Node(self)
+        self.centerNode = Node(self)
+        node6 = Node(self)
+        node7 = Node(self)
+        node8 = Node(self)
+        node9 = Node(self)
+        scene.addItem(node1)
+        scene.addItem(node2)
+        scene.addItem(node3)
+        scene.addItem(node4)
+        scene.addItem(self.centerNode)
+        scene.addItem(node6)
+        scene.addItem(node7)
+        scene.addItem(node8)
+        scene.addItem(node9)
+        scene.addItem(Edge(node1, node2))
+        scene.addItem(Edge(node2, node3))
+        scene.addItem(Edge(node2, self.centerNode))
+        scene.addItem(Edge(node3, node6))
+        scene.addItem(Edge(node4, node1))
+        scene.addItem(Edge(node4, self.centerNode))
+        scene.addItem(Edge(self.centerNode, node6))
+        scene.addItem(Edge(self.centerNode, node8))
+        scene.addItem(Edge(node6, node9))
+        scene.addItem(Edge(node7, node4))
+        scene.addItem(Edge(node8, node7))
+        scene.addItem(Edge(node9, node8))
+
+        node1.setPos(-50, -50)
+        node2.setPos(0, -50)
+        node3.setPos(50, -50)
+        node4.setPos(-50, 0)
+        self.centerNode.setPos(0, 0)
+        node6.setPos(50, 0)
+        node7.setPos(-50, 50)
+        node8.setPos(0, 50)
+        node9.setPos(50, 50)
+
+        self.scale(0.8, 0.8)
+        self.setMinimumSize(400, 400)
+        self.setWindowTitle("Elastic Nodes")
+
+    def itemMoved(self):
+        if not self.timerId:
+            self.timerId = self.startTimer(1000 / 25)
+
+    def keyPressEvent(self, event):
+        key = event.key()
+
+        if key == Qt.Key_Up:
+            self.centerNode.moveBy(0, -20)
+        elif key == Qt.Key_Down:
+            self.centerNode.moveBy(0, 20)
+        elif key == Qt.Key_Left:
+            self.centerNode.moveBy(-20, 0)
+        elif key == Qt.Key_Right:
+            self.centerNode.moveBy(20, 0)
+        elif key == Qt.Key_Plus:
+            self.scaleView(1.2)
+        elif key == Qt.Key_Minus:
+            self.scaleView(1 / 1.2)
+        elif key == Qt.Key_Space or key == Qt.Key_Enter:
+            for item in self.scene().items():
+                if isinstance(item, Node):
+                    item.setPos(-150 + qrand() % 300, -150 + qrand() % 300)
+        else:
+            super(GraphWidget, self).keyPressEvent(event)
+
+    def timerEvent(self, event):
+        nodes = [item for item in self.scene().items() if isinstance(item, Node)]
+
+        for node in nodes:
+            node.calculateForces()
+
+        itemsMoved = False
+        for node in nodes:
+            if node.advance():
+                itemsMoved = True
+
+        if not itemsMoved:
+            self.killTimer(self.timerId)
+            self.timerId = 0
+
+    def wheelEvent(self, event):
+        self.scaleView(math.pow(2.0, -event.angleDelta().y() / 240.0))
+
+    def drawBackground(self, painter, rect):
+        # Shadow.
+        sceneRect = self.sceneRect()
+        rightShadow = QRectF(sceneRect.right(), sceneRect.top() + 5, 5,
+                sceneRect.height())
+        bottomShadow = QRectF(sceneRect.left() + 5, sceneRect.bottom(),
+                sceneRect.width(), 5)
+        if rightShadow.intersects(rect) or rightShadow.contains(rect):
+	        painter.fillRect(rightShadow, Qt.darkGray)
+        if bottomShadow.intersects(rect) or bottomShadow.contains(rect):
+	        painter.fillRect(bottomShadow, Qt.darkGray)
+
+        # Fill.
+        gradient = QLinearGradient(sceneRect.topLeft(), sceneRect.bottomRight())
+        gradient.setColorAt(0, Qt.white)
+        gradient.setColorAt(1, Qt.lightGray)
+        painter.fillRect(rect.intersected(sceneRect), QBrush(gradient))
+        painter.setBrush(Qt.NoBrush)
+        painter.drawRect(sceneRect)
+
+        # Text.
+        textRect = QRectF(sceneRect.left() + 4, sceneRect.top() + 4,
+                sceneRect.width() - 4, sceneRect.height() - 4)
+        message = "Click and drag the nodes around, and zoom with the " \
+                "mouse wheel or the '+' and '-' keys"
+
+        font = painter.font()
+        font.setBold(True)
+        font.setPointSize(14)
+        painter.setFont(font)
+        painter.setPen(Qt.lightGray)
+        painter.drawText(textRect.translated(2, 2), message)
+        painter.setPen(Qt.black)
+        painter.drawText(textRect, message)
+
+    def scaleView(self, scaleFactor):
+        factor = self.transform().scale(scaleFactor, scaleFactor).mapRect(QRectF(0, 0, 1, 1)).width()
+
+        if factor < 0.07 or factor > 100:
+            return
+
+        self.scale(scaleFactor, scaleFactor)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    qsrand(QTime(0,0,0).secsTo(QTime.currentTime()))
+
+    widget = GraphWidget()
+    widget.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/graphicsview/embeddeddialogs/No-Ones-Laughing-3.jpg b/examples/graphicsview/embeddeddialogs/No-Ones-Laughing-3.jpg
new file mode 100644
index 0000000..445567f
Binary files /dev/null and b/examples/graphicsview/embeddeddialogs/No-Ones-Laughing-3.jpg differ
diff --git a/examples/graphicsview/embeddeddialogs/embeddeddialog.py b/examples/graphicsview/embeddeddialogs/embeddeddialog.py
new file mode 100644
index 0000000..11b81df
--- /dev/null
+++ b/examples/graphicsview/embeddeddialogs/embeddeddialog.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'embeddeddialog.ui'
+#
+# Created: Wed May 15 16:13:29 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-8d430da208a7
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_embeddedDialog(object):
+    def setupUi(self, embeddedDialog):
+        embeddedDialog.setObjectName("embeddedDialog")
+        embeddedDialog.resize(407, 134)
+        self.formLayout = QtWidgets.QFormLayout(embeddedDialog)
+        self.formLayout.setObjectName("formLayout")
+        self.label = QtWidgets.QLabel(embeddedDialog)
+        self.label.setObjectName("label")
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
+        self.layoutDirection = QtWidgets.QComboBox(embeddedDialog)
+        self.layoutDirection.setObjectName("layoutDirection")
+        self.layoutDirection.addItem("")
+        self.layoutDirection.addItem("")
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.layoutDirection)
+        self.label_2 = QtWidgets.QLabel(embeddedDialog)
+        self.label_2.setObjectName("label_2")
+        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
+        self.fontComboBox = QtWidgets.QFontComboBox(embeddedDialog)
+        self.fontComboBox.setObjectName("fontComboBox")
+        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.fontComboBox)
+        self.label_3 = QtWidgets.QLabel(embeddedDialog)
+        self.label_3.setObjectName("label_3")
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3)
+        self.style = QtWidgets.QComboBox(embeddedDialog)
+        self.style.setObjectName("style")
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.style)
+        self.label_4 = QtWidgets.QLabel(embeddedDialog)
+        self.label_4.setObjectName("label_4")
+        self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_4)
+        self.spacing = QtWidgets.QSlider(embeddedDialog)
+        self.spacing.setOrientation(QtCore.Qt.Horizontal)
+        self.spacing.setObjectName("spacing")
+        self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.spacing)
+        self.label.setBuddy(self.layoutDirection)
+        self.label_2.setBuddy(self.fontComboBox)
+        self.label_3.setBuddy(self.style)
+        self.label_4.setBuddy(self.spacing)
+
+        self.retranslateUi(embeddedDialog)
+        QtCore.QMetaObject.connectSlotsByName(embeddedDialog)
+
+    def retranslateUi(self, embeddedDialog):
+        _translate = QtCore.QCoreApplication.translate
+        embeddedDialog.setWindowTitle(_translate("embeddedDialog", "Embedded Dialog"))
+        self.label.setText(_translate("embeddedDialog", "Layout Direction:"))
+        self.layoutDirection.setItemText(0, _translate("embeddedDialog", "Left to Right"))
+        self.layoutDirection.setItemText(1, _translate("embeddedDialog", "Right to Left"))
+        self.label_2.setText(_translate("embeddedDialog", "Select Font:"))
+        self.label_3.setText(_translate("embeddedDialog", "Style:"))
+        self.label_4.setText(_translate("embeddedDialog", "Layout spacing:"))
+
diff --git a/examples/graphicsview/embeddeddialogs/embeddeddialog.ui b/examples/graphicsview/embeddeddialogs/embeddeddialog.ui
new file mode 100644
index 0000000..f967b10
--- /dev/null
+++ b/examples/graphicsview/embeddeddialogs/embeddeddialog.ui
@@ -0,0 +1,87 @@
+<ui version="4.0" >
+ <class>embeddedDialog</class>
+ <widget class="QDialog" name="embeddedDialog" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>407</width>
+    <height>134</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Embedded Dialog</string>
+  </property>
+  <layout class="QFormLayout" name="formLayout" >
+   <item row="0" column="0" >
+    <widget class="QLabel" name="label" >
+     <property name="text" >
+      <string>Layout Direction:</string>
+     </property>
+     <property name="buddy" >
+      <cstring>layoutDirection</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1" >
+    <widget class="QComboBox" name="layoutDirection" >
+     <item>
+      <property name="text" >
+       <string>Left to Right</string>
+      </property>
+     </item>
+     <item>
+      <property name="text" >
+       <string>Right to Left</string>
+      </property>
+     </item>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QLabel" name="label_2" >
+     <property name="text" >
+      <string>Select Font:</string>
+     </property>
+     <property name="buddy" >
+      <cstring>fontComboBox</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1" >
+    <widget class="QFontComboBox" name="fontComboBox" />
+   </item>
+   <item row="2" column="0" >
+    <widget class="QLabel" name="label_3" >
+     <property name="text" >
+      <string>Style:</string>
+     </property>
+     <property name="buddy" >
+      <cstring>style</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QComboBox" name="style" />
+   </item>
+   <item row="3" column="0" >
+    <widget class="QLabel" name="label_4" >
+     <property name="text" >
+      <string>Layout spacing:</string>
+     </property>
+     <property name="buddy" >
+      <cstring>spacing</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1" >
+    <widget class="QSlider" name="spacing" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/graphicsview/embeddeddialogs/embeddeddialogs.py b/examples/graphicsview/embeddeddialogs/embeddeddialogs.py
new file mode 100644
index 0000000..ac8a5be
--- /dev/null
+++ b/examples/graphicsview/embeddeddialogs/embeddeddialogs.py
@@ -0,0 +1,237 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QEvent, QRectF, Qt, QTimeLine
+from PyQt5.QtGui import (QBrush, QColor, QPainter, QPainterPath, QPixmap,
+        QTransform)
+from PyQt5.QtWidgets import (QApplication, QDialog, QGraphicsItem,
+        QGraphicsProxyWidget, QGraphicsScene, QGraphicsView, QStyleFactory,
+        QWidget)
+
+import embeddeddialogs_rc
+from embeddeddialog import Ui_embeddedDialog
+
+
+class CustomProxy(QGraphicsProxyWidget):
+    def __init__(self, parent=None, wFlags=0):
+        super(CustomProxy, self).__init__(parent, wFlags)
+
+        self.popupShown = False
+        self.currentPopup = None
+
+        self.timeLine = QTimeLine(250, self)
+        self.timeLine.valueChanged.connect(self.updateStep)
+        self.timeLine.stateChanged.connect(self.stateChanged)
+
+    def boundingRect(self):
+        return QGraphicsProxyWidget.boundingRect(self).adjusted(0, 0, 10, 10)
+
+    def paintWindowFrame(self, painter, option, widget):
+        color = QColor(0, 0, 0, 64)
+
+        r = self.windowFrameRect()
+        right = QRectF(r.right(), r.top()+10, 10, r.height()-10)
+        bottom = QRectF(r.left()+10, r.bottom(), r.width(), 10)
+        intersectsRight = right.intersects(option.exposedRect)
+        intersectsBottom = bottom.intersects(option.exposedRect)
+        if intersectsRight and intersectsBottom:
+            path = QPainterPath()
+            path.addRect(right)
+            path.addRect(bottom)
+            painter.setPen(Qt.NoPen)
+            painter.setBrush(color)
+            painter.drawPath(path)
+        elif intersectsBottom:
+            painter.fillRect(bottom, color)
+        elif intersectsRight:
+            painter.fillRect(right, color)
+
+        super(CustomProxy, self).paintWindowFrame(painter, option, widget)
+
+    def hoverEnterEvent(self, event):
+        super(CustomProxy, self).hoverEnterEvent(event)
+
+        self.scene().setActiveWindow(self)
+        if self.timeLine.currentValue != 1:
+            self.zoomIn()
+
+    def hoverLeaveEvent(self, event):
+        super(CustomProxy, self).hoverLeaveEvent(event)
+
+        if not self.popupShown and (self.timeLine.direction() != QTimeLine.Backward or self.timeLine.currentValue() != 0):
+            self.zoomOut()
+
+    def sceneEventFilter(self, watched, event):
+        if watched.isWindow() and (event.type() == QEvent.UngrabMouse or event.type() == QEvent.GrabMouse):
+            self.popupShown = watched.isVisible()
+            if not self.popupShown and not self.isUnderMouse():
+                self.zoomOut()
+
+        return super(CustomProxy, self).sceneEventFilter(watched, event)
+
+    def itemChange(self, change, value):
+        if change == self.ItemChildAddedChange or change == self.ItemChildRemovedChange :
+            if change == self.ItemChildAddedChange:
+                self.currentPopup = value
+                self.currentPopup.setCacheMode(self.ItemCoordinateCache)
+                if self.scene() is not None:
+                    self.currentPopup.installSceneEventFilter(self)
+            elif self.scene() is not None:
+                self.currentPopup.removeSceneEventFilter(self)
+                self.currentPopup = None
+        elif self.currentPopup is not None and change == self.ItemSceneHasChanged:
+                self.currentPopup.installSceneEventFilter(self)
+
+        return super(CustomProxy, self).itemChange(change, value)
+
+    def updateStep(self, step):
+        r = self.boundingRect()
+        self.setTransform(QTransform() \
+                            .translate(r.width() / 2, r.height() / 2)\
+                            .rotate(step * 30, Qt.XAxis)\
+                            .rotate(step * 10, Qt.YAxis)\
+                            .rotate(step * 5, Qt.ZAxis)\
+                            .scale(1 + 1.5 * step, 1 + 1.5 * step)\
+                            .translate(-r.width() / 2, -r.height() / 2))
+
+    def stateChanged(self, state):
+        if state == QTimeLine.Running:
+            if self.timeLine.direction() == QTimeLine.Forward:
+                self.setCacheMode(self.NoCache)
+        elif state == QTimeLine.NotRunning:
+            if self.timeLine.direction() == QTimeLine.Backward:
+                self.setCacheMode(self.DeviceCoordinateCache)
+
+    def zoomIn(self):
+        if self.timeLine.direction() != QTimeLine.Forward:
+            self.timeLine.setDirection(QTimeLine.Forward)
+        if self.timeLine.state() == QTimeLine.NotRunning:
+            self.timeLine.start()
+
+    def zoomOut(self):
+        if self.timeLine.direction() != QTimeLine.Backward:
+            self.timeLine.setDirection(QTimeLine.Backward)
+        if self.timeLine.state() == QTimeLine.NotRunning:
+            self.timeLine.start()
+
+
+class EmbeddedDialog(QDialog):
+    def __init__(self, parent=None):
+        super(EmbeddedDialog, self).__init__(parent)
+
+        self.ui = Ui_embeddedDialog()
+        self.ui.setupUi(self)
+        self.ui.layoutDirection.setCurrentIndex(self.layoutDirection() != Qt.LeftToRight)
+
+        for styleName in QStyleFactory.keys():
+            self.ui.style.addItem(styleName)
+            if self.style().objectName().lower() == styleName.lower():
+                self.ui.style.setCurrentIndex(self.ui.style.count() -1)
+
+        self.ui.layoutDirection.activated.connect(self.layoutDirectionChanged)
+        self.ui.spacing.valueChanged.connect(self.spacingChanged)
+        self.ui.fontComboBox.currentFontChanged.connect(self.fontChanged)
+        self.ui.style.activated[str].connect(self.styleChanged)
+
+    def layoutDirectionChanged(self, index):
+        if index == 0:
+            self.setLayoutDirection(Qt.LeftToRight)
+        else:
+            self.setLayoutDirection(Qt.RightToLeft)
+
+    def spacingChanged(self, spacing):
+        self.layout().setSpacing(spacing)
+        self.adjustSize()
+
+    def fontChanged(self, font):
+        self.setFont(font)
+
+    def setStyleHelper(self, widget, style):
+        widget.setStyle(style)
+        widget.setPalette(style.standardPalette())
+        for child in widget.children():
+            if isinstance(child, QWidget):
+                self.setStyleHelper(child, style)
+    
+    def styleChanged(self, styleName):
+        style = QStyleFactory.create(styleName)
+        if style:
+            self.setStyleHelper(self, style)
+
+        # Keep a reference to the style.
+        self._style = style
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    scene = QGraphicsScene()
+    scene.setStickyFocus(True)
+
+    for y in range(10):
+        for x in range(10):
+            proxy = CustomProxy(None, Qt.Window)
+            proxy.setWidget(EmbeddedDialog())
+
+            rect = proxy.boundingRect()
+
+            proxy.setPos( x * rect.width()*1.05, y*rect.height()*1.05 )
+            proxy.setCacheMode(QGraphicsItem.DeviceCoordinateCache)
+            scene.addItem(proxy)
+
+    scene.setSceneRect(scene.itemsBoundingRect())
+
+    view = QGraphicsView(scene)
+    view.scale(0.5, 0.5)
+    view.setRenderHints(view.renderHints() | QPainter.Antialiasing  | QPainter.SmoothPixmapTransform)
+    view.setBackgroundBrush(QBrush(QPixmap(':/No-Ones-Laughing-3.jpg')))
+    view.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate)
+    view.show()
+    view.setWindowTitle("Embedded Dialogs Demo")
+
+    sys.exit(app.exec_())
diff --git a/examples/graphicsview/embeddeddialogs/embeddeddialogs.qrc b/examples/graphicsview/embeddeddialogs/embeddeddialogs.qrc
new file mode 100644
index 0000000..33be503
--- /dev/null
+++ b/examples/graphicsview/embeddeddialogs/embeddeddialogs.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource>
+        <file>No-Ones-Laughing-3.jpg</file>
+    </qresource>
+</RCC>
diff --git a/examples/graphicsview/embeddeddialogs/embeddeddialogs_rc.py b/examples/graphicsview/embeddeddialogs/embeddeddialogs_rc.py
new file mode 100644
index 0000000..3e0908c
--- /dev/null
+++ b/examples/graphicsview/embeddeddialogs/embeddeddialogs_rc.py
@@ -0,0 +1,1957 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Wed May 15 16:12:39 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x78\x0a\
+\xff\
+\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x00\x00\x01\x00\
+\x01\x00\x00\xff\xdb\x00\x43\x00\x05\x03\x04\x04\x04\x03\x05\x04\
+\x04\x04\x05\x05\x05\x06\x07\x0c\x08\x07\x07\x07\x07\x0f\x0b\x0b\
+\x09\x0c\x11\x0f\x12\x12\x11\x0f\x11\x11\x13\x16\x1c\x17\x13\x14\
+\x1a\x15\x11\x11\x18\x21\x18\x1a\x1d\x1d\x1f\x1f\x1f\x13\x17\x22\
+\x24\x22\x1e\x24\x1c\x1e\x1f\x1e\xff\xdb\x00\x43\x01\x05\x05\x05\
+\x07\x06\x07\x0e\x08\x08\x0e\x1e\x14\x11\x14\x1e\x1e\x1e\x1e\x1e\
+\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\
+\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\
+\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\xff\xfe\x00\
+\x13\x4e\x6f\x20\x4f\x6e\x65\x27\x73\x20\x4c\x61\x75\x67\x68\x69\
+\x6e\x67\xff\xc0\x00\x11\x08\x02\x00\x02\x00\x03\x01\x22\x00\x02\
+\x11\x01\x03\x11\x01\xff\xc4\x00\x1a\x00\x00\x03\x01\x01\x01\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x04\x01\x05\x00\
+\x06\xff\xc4\x00\x3e\x10\x00\x02\x01\x03\x03\x02\x04\x03\x07\x02\
+\x05\x04\x03\x00\x03\x01\x01\x02\x00\x03\x11\x21\x04\x12\x31\x41\
+\x51\x13\x22\x61\x71\x05\x32\x81\x14\x23\x42\x52\x91\xa1\xb1\xc1\
+\xd1\x06\x24\x33\x62\xf0\x15\x43\x72\xe1\x25\x82\xf1\x34\x53\x63\
+\x92\xff\xc4\x00\x19\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x01\x00\x02\x03\x05\x06\xff\xc4\x00\x20\
+\x11\x01\x01\x01\x00\x03\x01\x01\x01\x01\x00\x03\x00\x00\x00\x00\
+\x00\x00\x01\x11\x02\x21\x31\x41\x12\x51\x61\x13\x32\x42\xff\xda\
+\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00\x3f\x00\xb0\x55\x5d\xa2\
+\xbd\x7a\x8c\xf7\xf9\x43\x1c\xb7\xfe\xa0\x3e\xb3\x51\xb8\x9a\x75\
+\xdd\x7d\x15\xac\x27\x3b\x53\x55\xab\x55\x2d\xc0\x18\x50\x0e\x00\
+\x80\x2a\xe6\xdc\xcf\xa4\xfc\xbc\x7d\x75\x06\xbb\x52\x00\x1f\x68\
+\xab\x8e\x2e\xc6\x2c\xeb\xb5\x04\xff\x00\xfc\x87\xbf\x5b\x99\x1a\
+\xd4\xb8\xc1\xb5\xbb\xcc\x35\x0f\x18\x96\x45\xae\x82\x6b\x75\x24\
+\xe5\xc3\x5b\xba\x83\x3d\x57\x58\xc0\x10\x52\x91\xf7\x41\x20\xb9\
+\xd9\x8f\xd0\x4c\x2d\x71\xce\x65\x91\x6a\xaf\xb4\xa1\x37\x6d\x35\
+\x3b\xf5\xb1\x22\xf3\xa1\xf0\x7d\x55\x0a\x75\xc0\x08\xe9\x7f\xf7\
+\x5c\x4e\x0d\xcd\xfb\xc6\xd2\xaa\x55\x83\x29\x00\xca\xf1\xd8\xa5\
+\x75\x7e\x23\x41\x69\xea\x59\x4b\x85\x24\xdf\x22\xd2\x66\xa3\x51\
+\x46\xe2\x2e\x3b\xae\x65\x9a\xa6\x1a\xdf\x87\x25\x71\xfe\xad\x2c\
+\x3f\xb4\xe7\x0a\xcc\xb6\x28\xc4\x11\xce\x61\xc7\x70\xd7\xa2\xd9\
+\xf6\x37\x38\x38\x30\xcd\x64\x6f\x9b\xca\x4f\x51\x27\xae\x08\xc9\
+\xc8\x3d\x44\xd3\x2c\x5a\x86\x9d\x43\x6c\x83\xfb\x88\x65\x55\xbe\
+\xf2\x9f\x1d\x47\x69\x38\x3b\x96\xdd\x47\x10\xe8\x54\x2a\x6e\x0f\
+\x31\x4a\x2b\xe4\xa8\xfc\xaa\x3a\xc2\x57\xc8\xb0\xb1\xe6\xd3\x35\
+\x2b\x77\x0e\x9d\x40\xb8\xed\x06\x91\xcd\xb8\x82\x5f\xa9\x01\xe8\
+\x6e\x27\x80\x64\x74\xcb\x5b\x9b\x5e\x55\x4f\x3a\x6a\x88\x79\x59\
+\x2a\x60\xc2\x15\x14\x89\x22\xe7\x31\xc9\x6b\x5c\x88\x14\x96\xcb\
+\x68\xdb\x7e\x93\x34\xc6\xd9\x67\x98\x29\x1c\x40\xbd\x8c\xdd\xc2\
+\xd7\x81\x22\xa1\x0a\xc0\x82\x62\x2a\x6d\x2c\x19\x70\x7a\x88\x75\
+\x9b\x24\xde\xf2\x75\x27\x75\xf8\x1d\x66\xe3\x2e\xca\xb0\x1f\xe1\
+\x6a\xb7\x3c\xd4\x13\x82\x48\xb9\xf5\x9d\x6d\x43\xff\x00\xf0\x01\
+\x6d\x60\xd5\x70\x3d\x27\x11\xb9\xdc\x3b\xcb\x8c\xf5\x72\x1f\x0a\
+\x2d\xde\x30\x5c\xd2\x6b\xf7\x8a\xcc\x65\xfe\xec\xdb\xbc\xd3\x21\
+\xb6\x26\x15\x33\xd0\x94\xf4\x92\x60\xbc\x60\x24\x75\x9e\x84\x82\
+\x09\xa1\xd8\x0b\x03\x09\x4a\xb1\xb3\x2e\x7b\x83\x30\x00\x27\xb6\
+\x5c\xc8\x9b\x4d\x14\xe3\x71\x1e\xe2\x3d\x29\x2d\xef\xe2\x0b\x4c\
+\xd3\xd0\x7d\xa7\x95\xbf\x53\x88\xf5\x45\x16\xdc\xfb\xbd\x04\xcd\
+\xad\x48\xf5\x35\xa7\xbb\x24\x9f\xda\x74\x6b\xdc\xba\xd8\x58\x05\
+\x03\x8f\x49\x25\x30\xb7\xc0\xfd\x65\xe0\x78\xb4\xd4\xf2\xc0\x5a\
+\xd3\x9d\x6a\x14\x94\xcb\x35\xee\x4f\x6b\xce\xa6\x9a\x92\xe9\xa9\
+\x0a\xd5\x16\xee\x7e\x45\xfe\xa6\x2b\x49\x48\x51\x5f\x1e\xaf\x17\
+\xf2\xaf\x78\x75\x6a\x35\x66\x2c\x79\xeb\x31\x6e\xb5\x3a\x26\xb6\
+\xfa\x8e\x5d\xdb\x26\x79\x54\xe2\xec\x2d\x35\xb2\x05\xe1\x26\x40\
+\x02\x48\x0c\xb7\x3c\x88\x02\x8d\x42\x40\x51\x72\x78\xb4\xa8\x53\
+\xbb\x5c\xe7\xd2\x31\x17\x6b\x82\x71\x6c\xd8\x4b\x56\x25\x34\x08\
+\x5b\x31\x04\xfa\x18\xdd\x3e\xa0\xa9\x14\x8d\x22\x47\x17\xea\x22\
+\x4a\x8f\x99\x14\x93\x7e\x4c\x65\x7a\xc3\x4f\x48\xd4\xa8\x6e\xe3\
+\x85\x92\x67\xc5\xd6\xa3\x52\xf0\x29\x10\x0d\xfc\xcd\x7b\x5c\x4e\
+\x30\xd1\xb2\xdc\x3d\x4a\x40\x11\xf9\xa6\xd7\xaa\xf5\x77\xb3\x31\
+\xbb\x5f\xaf\x79\x25\x67\x0a\xa8\x73\x7b\x4e\x9c\x65\xf1\x9b\x75\
+\x76\x87\x4b\x4e\x85\x52\xff\x00\x6c\x40\xa4\x00\x76\xe7\xae\x27\
+\x67\x4a\x74\xa0\x55\xaf\xa7\x0a\xd5\x4e\x49\x61\x80\xd6\xe7\xf5\
+\x9f\x28\xb5\x0d\x36\x65\xb6\x09\xc4\xae\xbd\x71\x42\x92\x57\xbd\
+\xae\x6e\x00\x3d\x47\x3f\x49\x72\xe3\x6a\x97\x09\xd7\x5e\xaa\x3b\
+\xb1\xbb\x30\x0f\xf5\xeb\x12\x08\x2b\x44\x8f\xc4\x85\x7d\xc8\x38\
+\xfe\x6d\x1f\x57\x69\xfb\xc5\xf9\x41\xb7\xba\xb7\x07\xfe\x77\x91\
+\x3d\xc5\x0a\x89\xc3\x52\x7d\xe3\xdb\x83\xfd\x26\xe3\x35\x8c\xde\
+\x0d\x71\xb3\x28\x7c\xc0\x5f\x99\x7f\xc6\x9c\xfd\xb8\xb8\xe1\xe9\
+\xa9\xb7\xd3\xb4\xe6\xd7\x7f\x2f\x88\x54\x1a\x6c\x72\x2f\xf2\xb7\
+\x5b\x7b\xcb\x3e\x25\x53\xc6\xf8\x7e\x8f\x58\xab\x85\x5f\x09\xbd\
+\x08\xe2\x5f\x60\x9e\x25\x14\x52\xa9\x3e\x1b\x6d\x6e\xc6\x26\xa6\
+\x89\xd5\x88\x74\x36\xee\x05\xe5\x6c\x12\xaa\xd3\xaa\xa3\xcc\x70\
+\x56\xf6\xfd\x26\x2d\x57\x56\x22\x9d\x52\x2d\xc8\x6e\x91\xda\x92\
+\xe9\x74\xcd\x53\x55\x49\x14\xdf\x73\x01\xce\x67\x53\xfc\x4c\xf5\
+\x3f\xea\x95\x9d\x37\x2e\xc7\x0a\x2d\xe8\x00\x89\xd3\xea\xda\x86\
+\xa6\x9d\x4a\xa9\x4d\xac\xc0\xdc\xa8\x3c\x1e\xf3\xb5\xf1\x47\xa6\
+\x3e\x21\x51\x2c\x08\xa8\x9e\x20\x3c\x83\x33\x6d\xd3\x27\x4f\x98\
+\xaf\x59\x6b\x5b\xed\x1a\x60\xd8\xbe\xe4\xc1\x8a\xa5\x4a\x82\xd4\
+\x0f\x47\x50\x52\xc7\x8a\x8a\x47\xf1\x3b\xaa\xda\x7a\x94\x95\xdb\
+\x45\x48\x82\x6d\x63\x71\x7f\xd0\xc9\x3f\xc4\x54\x74\x54\x3c\x25\
+\xd3\xa7\x87\x58\x8b\xd4\x40\xc4\x85\xed\xf5\x8c\xbd\xe0\xb3\xe9\
+\x02\x8e\xb8\x1d\xb4\x6b\x25\x45\x3f\x2d\xaa\x8c\xfe\xa6\x0a\x8d\
+\x42\x56\xa9\xa6\xd4\xab\x23\x6d\xbe\xd3\x16\x8d\xe1\x20\x0f\x66\
+\xab\x6b\xa0\x39\x0b\x27\x4a\xae\xda\x9f\x12\xa3\x12\xdd\x49\x9a\
+\xc0\xac\x1a\x29\x54\x35\x70\xc6\xca\x2d\x6e\xb2\xca\x5a\xe4\x5a\
+\x61\x69\x22\xd3\x37\xbe\xe0\x2e\xdf\xa9\x91\x6a\xd1\x7c\x95\x71\
+\x91\x6f\xd2\x6e\x8e\x9a\xbd\x4f\x31\x01\x00\xdc\xc7\xd2\x16\x1d\
+\x46\x49\x51\x83\x06\xf7\xf3\x1c\x43\x24\x00\x73\x33\x01\x07\xaf\
+\x33\x4c\xbc\x1a\xdc\xf1\x35\x58\x1e\xb1\x64\x83\x32\xf9\xe2\x49\
+\x4a\xb0\xb6\x0c\xf0\x60\x4f\x17\x89\x56\xe9\xfa\x4f\x33\x10\x71\
+\x24\x61\x60\x0e\x26\xa3\x67\x20\x44\x96\xbf\x59\xb4\xce\x09\xbf\
+\xa0\x92\x75\xfe\x0b\xaa\x4a\x7a\x91\x4a\xa1\xfb\xaa\x9e\x56\xcc\
+\x57\xc4\x68\x36\x97\x56\xf4\x4f\x03\x2b\xea\x24\x09\x70\xdd\xbd\
+\x67\x66\xa1\x3a\xff\x00\x85\x0a\xbc\xd7\xd3\x61\xbb\x95\x99\xb3\
+\x2e\xb5\xec\x72\x5c\xe3\xbc\x15\xa8\x54\x77\x07\xa1\x9a\x6f\x6c\
+\xfd\x22\xdb\xe5\xf6\x9a\x64\x45\x41\x37\x4e\x7b\x4c\xfc\x5b\x80\
+\xf7\x8b\x18\xcf\x58\xd4\x60\x5a\xcd\x83\x24\xab\x7d\x8a\xbf\x75\
+\xcd\xe7\x98\x00\x55\x94\x8d\xa7\xf6\x82\xcb\xfe\x5c\x13\xf8\x5b\
+\x3e\xc6\x2e\x91\xf3\x77\x53\xcc\x0a\xed\x3b\x79\x85\xff\x00\x10\
+\xb4\x48\xb8\x36\x3d\xe1\xa8\x28\xca\x2e\x2c\x00\x20\xcf\x56\xf2\
+\xd6\x71\xeb\x02\xa6\x8b\x8d\xa2\xf1\x9b\x87\x79\x0a\xbe\xde\xb0\
+\xd6\xaf\x78\x61\xd5\x24\xde\x2e\xab\x81\x71\xd6\x07\x89\xe9\x14\
+\x49\x66\xc7\x26\x52\x0d\x7b\x6e\xf6\xcf\x03\x26\x4f\x59\xae\xd6\
+\x5c\x28\xe2\x51\x58\x10\x3c\x31\xf5\x3d\xe4\xae\xa4\x1e\x26\xa0\
+\xae\x8e\xac\xff\x00\xf0\xda\x65\x07\xf1\x1f\xe4\xce\x49\xb9\xb8\
+\x9d\x3a\xa8\x5f\xe1\x54\x6e\x78\x6f\xef\x21\x2a\x00\x25\x4d\xc4\
+\xb8\xaa\x11\x90\x00\x8d\x44\x25\x2d\x15\x4c\x82\xd6\x94\x21\x00\
+\x5b\x16\x8d\x40\xf0\x49\x3c\x8f\xd6\x18\xd3\x38\x22\xe4\x47\x0b\
+\x0f\x36\xd0\x7d\xf8\x8e\xa5\x52\xa5\x43\xb3\x70\x0b\xd8\x0c\x42\
+\xd3\x89\xd7\x4e\xe7\x93\x6f\x78\xfa\x3a\x36\xa8\x76\xab\x0b\xc7\
+\x84\xa6\x2f\xb4\x5b\xd4\xc2\x5a\xce\x84\xec\x3b\x07\x70\x26\x34\
+\xe1\xc7\xe1\x06\x95\x2f\x12\xab\x80\x3b\x0e\x64\xf6\x54\xc5\x30\
+\xaa\x3b\xf2\x65\x14\x9a\xb5\x70\x40\x27\x6f\x73\xc4\x55\x52\xaa\
+\xc4\x2d\x98\x8e\xa7\xfb\x43\x6f\xd2\x04\x52\x4d\xd9\xaf\x1a\xb4\
+\xcd\xf8\x82\x8e\xc7\xbf\xe9\x1b\x4d\x98\xb5\xb2\x64\x8c\xa7\x4c\
+\x92\x2c\x27\x4b\x47\x40\x8f\x3b\x82\x15\x7f\x79\xed\x0e\x99\xaa\
+\x58\x8c\x7a\x4b\xaa\x02\xb6\x43\xc0\xe9\x39\xde\x5f\x1b\x91\x33\
+\xb7\x8a\x7c\xc2\xc0\x70\x27\x96\x8b\x03\x71\x28\x08\xc7\x37\xb0\
+\xef\x0c\x10\xa3\x17\xf7\x99\xd3\x89\x8d\x22\x79\x84\x86\x8a\x1c\
+\x00\xc7\xde\x6b\x30\x6f\x29\xe0\xc0\xf0\xc0\x37\x19\x92\x3b\xc4\
+\x24\xe1\x40\xf6\x98\xe0\x6d\x26\xf6\xe9\x02\xcd\xde\xd0\x1d\xf6\
+\xf3\x99\x22\xcd\x42\xa6\xca\x2c\x7a\x4e\x6e\xb8\x9a\xb5\x0d\xdb\
+\x8e\x65\xac\xe4\xab\x37\x6e\x27\x37\x50\xce\x01\x05\x7d\xe6\xf8\
+\xb3\x53\xb1\xb5\x85\xfd\x24\xf5\xbc\xd4\xc7\xa1\x36\xfa\xc6\x39\
+\x2c\x6c\x17\x37\xc4\x6b\x68\xeb\x14\xc0\x00\x9e\x93\xa4\xe9\x84\
+\x56\xfb\xb5\x39\xc7\x58\x55\xaa\x0a\x84\x53\x7c\x28\xe3\x1f\xbc\
+\x16\xa6\xd4\xcd\xaa\x2d\xbd\x26\x3b\x52\x57\x20\xdc\xb7\x49\xa0\
+\xbb\x47\x4c\xd4\xa0\x29\x8f\x30\x2a\x50\x9f\x4e\x87\xe9\x21\x23\
+\xef\x83\x31\xe7\xca\xff\x00\xc1\x8e\xd2\x6a\x9b\x4f\x55\x5a\x9a\
+\x80\x3b\x77\x89\xd5\x37\xde\x39\x55\xb0\x63\x71\xe9\x09\x3b\x4c\
+\x54\xa3\x49\x5a\x8d\x47\x39\xf2\xb8\xb5\xef\xd8\x89\x57\xc3\xe9\
+\xa7\x85\x5b\xe1\xcd\x77\x0e\x37\xd2\x27\x82\x47\x69\x15\x45\x35\
+\xa9\x06\x19\x75\xc1\xb7\x5e\xc6\x16\x92\xbf\xd9\xea\x27\x88\x72\
+\x8d\x75\xb7\x20\xc6\xc5\x08\x63\x52\xa3\x6d\x38\x0b\x8e\xc1\x61\
+\xb0\xb8\xda\x8c\x19\x80\xb5\xfb\xca\xfe\x35\x42\xf5\x16\xbd\x2b\
+\x78\x35\xfc\xe2\xdd\xfa\xc8\x86\xda\x62\xc3\x2f\xd2\xd1\x97\x45\
+\xe9\xe0\xb6\xa6\x03\x5c\x00\x6f\xee\x67\x5f\xe2\x6f\xbf\x49\xa0\
+\xd4\x5e\xf7\x4d\xac\x3d\xa7\x1a\xa3\x6e\x21\x98\xdc\x9c\xda\x75\
+\xf4\x8e\x95\x7f\xc3\xb5\x1a\xa0\x2f\xe0\x54\x0e\x2f\xd6\xf8\xb7\
+\xb4\xcf\x2f\x94\xc2\x35\x1a\xa3\xa7\x0b\x5c\x0f\xbc\x71\xe4\x1f\
+\x97\xd6\x73\xaf\x62\xd5\xea\xf9\xbf\x2d\xfa\x98\xa7\xac\xd5\x9d\
+\xbc\x43\x76\x63\x7b\x9e\xf0\xd8\x82\x05\x2e\x0a\x8f\xde\x6a\x4c\
+\x1a\x43\x12\xcc\x58\x93\xba\xf7\xbc\x36\x1e\x22\xef\x1f\x30\xf9\
+\x84\xc0\x2c\x70\x23\x13\xc8\x77\x08\x85\x79\xad\xa0\x04\x5f\xca\
+\x6f\xfc\x40\x27\x66\x88\x81\x86\xa8\x6d\x8e\xc2\x3f\x47\xb0\x6e\
+\x51\x73\x4e\xa8\xb0\xb7\xe1\x6e\xc6\x23\x5f\xf7\x6b\x46\x9d\x8d\
+\xd5\x2f\xfa\x98\x7f\x8d\x25\xa8\x00\x18\x31\x6f\x84\x07\xd6\x16\
+\xa6\xea\x08\xe4\xc4\x8b\x9a\x66\xdd\x3d\x62\xc8\x49\xce\x21\x83\
+\x71\x6e\xb1\x4b\xba\xf0\xd4\x8b\x08\x44\x31\xc4\xf5\xee\x3d\x60\
+\xf3\x88\x40\x11\xd3\x11\x4d\x50\x4f\x31\xeb\x4d\x40\x17\x88\xf1\
+\x2c\x71\x8f\x58\x75\x49\xdc\x2e\x7a\x49\x1e\x19\x2d\x8e\x44\xbb\
+\xe1\x5a\xe4\xd3\x6a\x43\x3a\xdd\x0f\x95\xc7\xa1\x9c\x94\x2b\x7c\
+\xb1\x87\xb9\x09\xc1\x30\xb3\x4c\xb8\xbf\xe2\x94\xa9\x69\xf5\x6c\
+\x8a\x3c\x87\x2a\x47\x50\x64\x8e\x88\x5b\x07\x06\x57\x75\xd5\xfc\
+\x33\x39\x7d\x3f\xee\xa6\x44\xa0\x60\x06\x94\x55\x8d\x48\x83\x83\
+\x71\xd2\x0e\xc3\xbb\xd2\x69\x7d\xac\x6c\x6f\x09\x6b\x92\xb6\x20\
+\x5a\x20\xda\x2e\x18\x35\x12\x70\xf8\x1e\xfd\x20\xad\x36\x0f\x66\
+\x04\x01\x30\x14\x60\x6f\x82\x0c\x73\xef\x74\x1f\x78\x59\x60\x46\
+\x95\x37\xdd\x4f\xff\x00\x59\xed\x41\xb9\x46\xee\xbf\xfa\x93\xb0\
+\x64\x20\x11\x68\xf7\x3b\xe8\x2b\x7e\x56\x20\xc9\x04\x03\x6e\xc2\
+\x12\x91\x07\x24\x5a\x78\x5e\xf2\x46\x5f\xac\xca\x75\x00\xa8\x09\
+\x03\x99\x80\x6e\x10\x48\xb6\x4f\x32\x26\x6a\xc1\xf1\x48\x8b\x03\
+\x78\xb7\x5e\x91\xda\xa0\x59\x52\xaf\x71\x12\xac\x05\xbb\x88\x40\
+\xa1\xc9\xff\x00\xa4\x81\xd9\xed\x20\x43\xb5\x89\x3c\x75\x13\xa9\
+\x8a\xbf\x0c\xa9\xd0\xab\x5c\xff\x00\x79\xcb\x36\xb9\x8c\x54\x25\
+\x7c\x3a\xb7\xb5\xc7\x78\xc4\x62\x48\xe9\x08\x59\xe8\x9b\x8f\x32\
+\xf1\x16\x14\xdc\x45\x28\x04\x95\x00\x9f\x49\x7e\x91\x07\x85\xcf\
+\x3c\xce\x6d\x2b\xf0\x71\x3a\x3a\x57\x1e\x5e\xd6\xcc\xcf\x23\x07\
+\x54\xa9\x63\xd1\x47\x03\xd6\x65\x20\x19\xf6\x1f\x94\x65\xa7\x89\
+\xbd\x43\xe9\x98\x0e\xdb\x34\xe2\xe6\xcd\x50\xdc\xfb\x4c\x95\x9a\
+\x5a\xa6\xa3\xbf\x86\x46\xd5\x43\xb4\x76\x93\x2e\xe2\x73\xfc\x45\
+\x69\x2a\x78\x75\x81\x5b\x8e\xf9\x96\x55\x1e\x27\x00\x21\xf4\xeb\
+\x0b\x32\x90\x0b\xf6\x95\x69\xc7\x0c\x4d\xa2\x69\x96\x07\x6b\x08\
+\xec\x91\xc8\xb0\xe9\x05\x1d\x2d\x36\xa4\x0c\x2d\xc0\xe2\x5a\xac\
+\x0a\xee\x6b\xda\x72\xb4\xe2\xc4\x16\xe4\xf4\x95\x2d\x70\x5a\xd7\
+\xf2\xce\x76\x37\x2a\xc2\xe0\xf1\xc7\x68\xb6\x6b\xc4\x35\x4d\xa6\
+\xc3\x33\xc1\xcd\xa1\x87\x44\xc0\xdc\x66\x36\xe1\x46\x06\x7b\xc5\
+\x03\x9b\xf5\x99\xbb\xc8\x49\x92\x30\xb8\xeb\xcf\x79\x3d\x7b\x35\
+\xb3\xe9\x13\x52\xa3\x13\x32\x8b\x10\xe0\x93\x8b\xe6\xf1\xc1\xa0\
+\xd5\xd5\xd8\x82\x9d\x3c\x66\xe7\xd6\x73\x35\x0e\x58\xdc\x93\x79\
+\x6e\xb1\xd5\x99\x95\x70\x41\xb7\xbc\xe7\xd4\x06\xe7\xa4\xe9\xc5\
+\x8a\xdd\x13\x05\x77\xaa\x72\x29\xa1\x61\xef\xd2\x25\x2b\x3b\x12\
+\xcc\xcd\x7e\xf1\xd4\x17\x6d\x3a\xe4\x70\x53\xfa\x89\x15\x5a\x97\
+\x20\x70\x07\x00\x4d\xc0\x65\x6a\xcf\x55\x7c\xcd\xb8\xae\x01\x32\
+\x46\x3b\x8e\xee\xbd\x63\x1c\x92\xe1\xfe\x86\x61\xb2\x9f\x59\xa1\
+\x4e\x74\x52\xab\xe1\xdf\x76\xd0\x48\xef\xed\x05\x54\x35\xd1\xcd\
+\xd8\x9c\x4c\x2c\xc6\x88\x61\xf8\x4d\x8f\xb7\x48\x92\x08\x20\xde\
+\xc6\x08\xda\x6c\xd4\xea\x10\x17\xc8\x45\x98\x09\x95\xb4\xf6\x6c\
+\xb0\x27\xa1\x1d\x60\x1a\xad\xb8\x93\xd7\x98\xda\x6f\xe2\x8f\x0b\
+\x1b\xc7\xca\x7f\xa4\x42\xbf\x87\xd4\x6a\xd4\x5b\x41\x59\x30\xdf\
+\xe9\x13\xf9\xbf\xf7\x22\xab\x41\xa9\xb1\xec\x0f\xcb\xd4\x18\x5e\
+\x21\x5b\x03\x80\xbf\xb4\xab\x59\xfe\x62\x88\xd5\x53\x37\x6c\x0a\
+\x83\xd7\xbc\x3c\xa5\xc7\xa8\x19\xaa\x05\x1c\x93\x69\xdb\xf8\x75\
+\x41\xe3\x9f\x85\x9f\x92\xa5\x16\x42\x4f\x56\xe6\xf3\x9f\x45\x00\
+\x7f\x11\x96\xc5\x05\xf8\xeb\x05\x0d\x5a\x5a\x9a\x75\xc6\x4a\x9d\
+\xc0\xfd\x65\x7b\x13\xa4\x9b\x36\xd6\x28\xe0\x82\x0e\x7e\x90\xef\
+\xbf\xef\x3f\x10\xf9\xbf\xbc\xe9\x7c\x6f\x4c\xab\xad\x3a\x8a\x6b\
+\xe4\xac\xbe\x20\xfa\xf3\x39\x8a\x76\x36\x17\x3f\xcc\xd4\xbb\x15\
+\x98\x32\xa1\x97\x70\xe7\xac\xf2\xf1\x62\x38\x8c\x5b\x0b\x1b\xf9\
+\x4f\x1e\x90\x99\x70\x4a\x0c\x75\xf4\x86\xa3\x3e\x1d\x50\xd3\xae\
+\x05\x83\x23\x7c\xca\x66\xfc\x58\xd3\xaf\x59\x2b\x53\x04\x53\x2b\
+\x61\xdc\x5a\x05\x3f\xb9\xa2\xd5\x1b\xe7\x61\x65\x1f\xd6\x6e\x9f\
+\x6d\x5a\x6c\x97\x00\xf2\x3d\xe1\xf7\x57\xf8\x46\xa2\x91\x77\x2c\
+\x49\x3e\xc2\x4e\x69\x94\x3f\x23\x89\x66\x9a\x95\x1f\x05\xcd\x4f\
+\x35\xec\x01\xbd\x8a\xcc\xa9\x4e\xe0\xd3\x73\x67\xb7\x91\xba\x34\
+\x75\x22\x6b\x7f\xfd\x5f\x58\x00\x8d\xd6\xd9\x6f\xa4\xda\x8c\xe8\
+\xdb\x4f\x4e\x62\xcb\x9b\xfc\xc4\x44\x1b\x71\xf9\xbf\x68\xb6\x3b\
+\xbf\x14\xf3\x54\x21\x41\x9a\x2b\x5c\x65\x10\xfd\x20\x40\xbc\xf4\
+\x8d\xaa\x18\xb9\x1e\x93\x29\x9a\x6e\x72\x96\xf6\x31\xb5\x7c\x3f\
+\x16\xca\xc4\x7b\x89\x22\x91\x48\x39\x8c\x5b\x9c\xda\x68\x05\x6e\
+\x46\x47\xa4\x30\x40\xe5\x79\x88\x37\x41\xa8\xf0\x6b\x86\x20\x15\
+\xe1\x87\x70\x66\x6a\xd3\xec\xda\x82\x9d\x2f\x70\x7d\x3a\x44\x82\
+\xa4\xe2\x53\xa8\xb5\x5d\x0d\x2a\x9d\x51\x8a\x1f\xe4\x48\xa3\xa8\
+\x0e\xec\x5e\x78\x13\xc5\xa1\x58\x15\xe7\x89\xa8\x80\xf0\x64\x1a\
+\x2c\x54\x9e\x0d\xa3\x28\x39\x02\xc4\xc5\x22\x9b\x8f\x78\xe5\xa2\
+\xd9\xf7\x91\x3a\x93\x0a\xb6\x57\xfa\x4b\x68\x69\xd5\xb4\xec\x3f\
+\xdc\x2f\x20\x08\x6f\x71\xd6\x74\x34\xdb\x97\x4d\x91\xc9\xe6\x66\
+\x98\x4b\xe9\xdd\x4e\x44\x4b\xa9\x18\x9d\x21\x53\x72\x2b\x1f\x63\
+\x31\x92\x9b\xf4\x10\xfd\x1c\x40\x38\x99\x69\x4b\xe9\xae\x70\x62\
+\xde\x99\x51\x91\xfa\x47\x40\xe9\xa8\xab\xa7\x65\xea\x38\x12\x2a\
+\x8a\x41\xed\x2b\xd3\x36\xda\x96\xe8\x60\xeb\x69\xda\xa1\x23\x83\
+\x2f\xaa\xb7\x46\xdf\x71\x50\x7a\x62\x43\x54\x67\x7a\xfc\xa7\x91\
+\xda\x5b\xa4\x5f\x23\x8f\x49\x35\xba\xda\xe3\x83\x28\x03\x4f\x91\
+\x68\xd3\x4e\xd5\x08\xe4\x74\x8b\x6a\x79\x0c\xbc\x4a\x12\xcd\x4c\
+\x13\xc8\xc5\xe2\x8b\x34\xc8\x96\x68\xac\x45\x35\x6e\xb8\xbc\x9c\
+\x83\x6b\xf6\x11\xf4\x73\x44\x1f\xca\xd6\x85\x30\x75\xee\x86\xa8\
+\x1c\x8b\x0c\x44\xeb\xae\x1d\x50\x7e\x05\x02\x50\x53\x73\xd8\x93\
+\x96\x58\x9d\x48\xdd\x54\x93\xd4\xc2\x12\x29\x83\x7e\xbf\x49\x6d\
+\x27\x2e\x6c\x44\x4d\x15\x40\x3e\x61\x73\x28\xa6\x96\xc8\x06\x55\
+\x45\x14\xc9\xc2\x91\xbb\xfa\x46\x12\x14\xe3\x2d\xdf\xa0\x8a\x5d\
+\xd6\xb0\x16\x1d\xe3\xa9\x8a\x40\x8d\xcf\x71\xd4\x4c\x34\xa2\xfb\
+\x06\xd3\x86\x22\x2b\xc5\x20\xd8\x0b\x46\xd6\xa9\x40\xa0\x74\xbb\
+\x5b\x99\x3f\xda\x54\x9b\x2a\x00\x7b\x99\x98\x94\x25\x46\x6e\xb1\
+\xe9\x50\x28\xc8\xcf\x41\x21\xa5\xbd\x89\x62\x0e\x3b\x75\x8f\x00\
+\x91\xb9\xda\xc7\xb4\xac\x27\x9a\x97\x37\x27\xe9\x03\x79\xbe\x0d\
+\xaf\x17\xbb\x04\x05\xfa\x93\x16\xc4\x83\xd2\xd0\xc5\xad\x7a\xaa\
+\x1a\xd6\xfa\xc4\xb5\x40\x4f\xcd\x02\xbf\xcc\x6c\xc2\x24\x15\xb6\
+\x5a\xf3\x72\x0d\x16\xa0\xee\x3b\xc0\xe7\xb4\x4b\x39\xe1\xf8\xe9\
+\x18\x1d\x32\x09\xc1\x8b\x62\x41\xb3\x73\xed\x18\x05\xa6\x50\x5e\
+\xdc\x86\x05\x7f\x69\xcf\xad\x4f\x69\xdc\xc6\xc2\x58\xf5\x05\x32\
+\x19\x79\xe6\x06\xb7\x63\x3d\x98\x58\x37\x99\x48\xcc\xd4\x15\x2a\
+\xd4\x46\x52\x9c\x1e\xf1\x77\x61\xe4\x03\x3d\xfb\x46\xad\x1d\xae\
+\x1b\x8f\x59\x9a\x8d\xa4\x02\xa4\x81\xd7\x13\x4c\x82\x8d\x45\xa6\
+\x4a\xb6\x55\x85\x8c\x1a\x98\x25\x48\xc8\x38\xb4\x1b\x28\x17\x27\
+\x3d\xa1\x2d\xde\xc2\xe0\xb0\xfd\xc4\x91\x64\xb1\x3c\xc3\x4e\x45\
+\x8d\x8c\x5d\x45\xda\xe7\xcc\x09\x13\x51\xbc\xd7\xbc\x52\x8a\xb6\
+\xa9\x76\x1f\xea\x0f\x98\x7e\x69\x9a\x3d\x46\xc6\x20\x8c\x30\xb3\
+\x03\xd6\x28\x36\x6e\x18\x02\x38\x37\x9a\xd4\xfc\x51\xbd\x6c\x08\
+\xe4\x5e\x18\x97\xd4\x5d\xa8\x56\xc1\x95\x8d\xc1\x3c\x5a\x4d\xab\
+\xd9\xbd\x3c\x20\xc5\x6d\x6b\xfa\xc7\xa5\x8e\x92\x9d\x1a\x9f\x88\
+\x9b\x1b\xf0\x62\x4d\x26\x50\xca\x41\x57\x53\x62\x0c\x21\x74\x11\
+\x57\x53\xf0\x80\x0b\x5d\xe8\x1c\x9f\x43\x39\x4d\x44\x13\xf3\x28\
+\x3e\xb2\xff\x00\x83\xb8\x4d\x57\x83\x50\x59\x2a\x8d\xad\xdb\x30\
+\x75\x3a\x72\x8e\xf4\x9f\x95\x36\x10\x9d\x5c\x57\xb8\x92\x95\x36\
+\x0d\xb4\xb2\x15\x38\x22\xf2\xa3\xa6\xf0\x18\x5c\xab\x93\x81\x7c\
+\x08\x84\x52\x8a\xe4\x8f\x30\x16\x17\x9b\x41\xd9\x41\x56\x63\xb4\
+\xfa\xf1\x1a\x85\x5b\x4f\xbc\xee\xf1\x01\xef\x9e\x22\x45\x11\x4d\
+\xc3\x2d\x65\xba\x9b\xe0\x47\x33\x14\x22\xe1\x58\x1e\x08\x1c\xc4\
+\xd7\xa7\x4c\xa9\x65\xdd\xea\x39\xb4\xa2\x1d\x6a\x43\xc3\x08\x82\
+\xcc\x4d\xd8\x46\xea\xf4\x9e\x05\x2f\x2d\x5f\x15\x40\x1b\xc5\xac\
+\x50\xfa\x41\xa2\x84\xea\x55\x97\x76\xd2\xd7\xbd\xff\x00\x98\xe6\
+\xac\x8e\xe5\x94\x80\x59\xb3\x71\xd2\x5d\xa7\x22\xba\x87\xb0\xa8\
+\x45\xff\x00\x0b\xf7\xf7\x91\xd5\x4d\xa4\x83\x70\x47\x79\xd4\xd6\
+\x52\xd8\xc5\x91\x43\x52\x6e\x45\xe4\xcc\x88\xc9\xb6\xa0\x6d\xb6\
+\xf2\xbf\x63\xd8\xc4\x22\xb1\xb4\xcc\xc6\x55\xa2\xc8\xfb\x4f\x31\
+\x7b\x5a\xfc\x1f\xa4\x90\x93\x19\x1d\xe5\x15\x40\x2c\x0f\x5b\x45\
+\x52\xc1\xbd\xaf\x29\x7d\x8c\x88\xd6\xda\x78\x8a\x29\x4d\x80\x3c\
+\x46\x87\x0c\x2c\xd8\x3d\xe0\x32\x5d\x01\x53\x00\x92\x05\x88\x90\
+\x1b\x0b\x19\x46\x9d\xb7\xe9\x6b\xa1\xe8\x03\x0f\xa1\x92\xee\x24\
+\x58\x9f\x68\xef\x87\xb5\xf5\x1e\x19\x36\xde\x0a\x9f\xa8\x95\x20\
+\x00\x5b\x06\x66\x46\x44\xcc\xab\x11\xd6\x12\xbd\xb9\x12\x0d\x42\
+\x71\x2a\x0c\x40\xdc\x3f\x48\x84\xd8\x7f\x37\xb4\x72\x9b\x93\x7e\
+\x25\x4a\xad\x3b\x53\x71\x67\x6d\xb6\x37\xe2\x5a\x1d\x41\x54\x5c\
+\x80\x3f\x79\xcc\xa4\x0a\x38\x63\xc0\x95\xd0\xf3\x54\xbd\xfc\xdc\
+\x91\x31\x61\x8a\xa9\x94\x6b\x8b\x0c\xcf\x59\x6d\xda\x46\x1c\x06\
+\x39\x20\x83\x1a\xee\x6c\x1c\x64\x1e\xd0\xc3\xaa\x00\x07\x83\x31\
+\xe9\xf1\x71\x26\x5a\xc2\xfd\xa3\xa9\xd7\xfa\xc3\x2a\x05\x4a\x16\
+\xc8\x16\x33\x6a\x53\x35\x28\x90\x79\x1c\x19\x7d\x11\x4d\xd6\xdf\
+\xb1\x87\xf6\x70\x0d\xd7\x20\xf4\x87\xe8\xe3\x8b\xa3\x25\x58\x83\
+\xf5\x89\x75\x04\x92\xbd\x0c\xe9\xea\x34\xfe\x1d\x52\xc3\xe5\x6e\
+\x27\x32\xa5\xc3\xb1\x1d\xe6\xe5\xd6\x6b\xc8\x76\x13\x7c\xa9\xe4\
+\x46\x22\xed\x38\xca\x30\xb5\xe2\xd1\x95\xc5\x8e\x0c\x2a\x4c\xd4\
+\xdc\xab\x0b\xaf\x51\x14\xd3\x75\x6c\x12\x08\x9d\x0f\x86\xf8\x75\
+\x29\x9a\x26\x9f\xde\x38\xbd\xfa\x62\x49\xab\x40\x05\x3a\x94\xc8\
+\x75\x6f\xf9\x63\x02\x86\xa7\xc0\x56\xaa\xa2\xcf\xc2\x7a\x42\xf7\
+\x0f\x8b\xf5\x35\x68\xe9\x19\xd0\xbe\xfa\xbc\x01\x6e\x27\x29\xaa\
+\x33\x64\x92\x60\x82\xce\x4b\x35\xcb\x1e\x49\x99\x7b\x46\x4c\x16\
+\xaa\xd3\x6d\x06\xec\x6c\x25\xc6\xa0\x0a\x36\x81\x60\x27\x29\x1a\
+\x56\xd5\x00\x06\xf0\xb0\xca\x67\x88\xcc\x72\x61\xa3\x91\xcf\x12\
+\x6a\x6f\x73\x19\xbb\x37\x10\xb1\x28\x05\xae\x19\x4e\xd3\xde\x1f\
+\x88\x47\x9a\xc1\x98\x77\x12\x65\x2c\x48\x37\x8d\xbe\xe3\xcc\xc9\
+\x52\x9a\xe7\x64\xd8\xd8\xff\x00\xc4\x5a\x68\xa8\xbc\x80\x49\xf5\
+\x32\x42\x2f\x91\x82\x3f\x79\xaa\xfb\x85\xba\xcb\x16\xa8\xab\x55\
+\xc1\xf2\x9b\x03\xd2\x29\x9f\x77\x26\xc6\x79\x4d\xfc\xad\x31\x87\
+\x6e\x7b\x49\x32\xb1\xb0\x0c\x7a\x89\x36\xe2\x7a\xc6\x55\xb8\x5b\
+\xb1\xe3\xa4\x58\x75\xe8\x36\x99\xa8\x1a\x2c\xa6\xed\xfa\x46\x16\
+\xf1\x16\xcb\x86\x1f\xb8\x93\x30\x3b\xaf\xfc\xc3\xa6\xdd\x78\x22\
+\x38\x98\x40\x36\xb8\xe2\x15\x50\x1f\x4e\x2c\x3c\xd4\xff\x00\x83\
+\x0d\xbc\xe3\x72\xe3\xb8\x98\x83\x6d\x8d\xaf\xdf\xda\x1a\x93\x23\
+\xba\x23\x92\x6e\x31\x83\x36\x99\xa7\x53\x27\xca\x09\xe3\xa4\xf6\
+\xa1\x3c\x26\x20\x65\x0f\x1e\xa2\x28\x94\x08\x76\xe3\x13\x40\x1a\
+\xaa\x25\x58\x91\x02\x8b\x0a\x37\x72\x01\x20\x43\x46\x64\xc0\x26\
+\xc7\xa1\x99\x53\x6b\x72\xbf\x51\x10\x92\xad\xef\xb8\x09\xe5\x7b\
+\x60\x75\x8d\x54\x1b\xee\xaf\xf4\x33\x2a\x50\x7b\xee\x0b\xb8\x7a\
+\x45\x12\x49\xbe\x6e\x23\x29\xb9\x07\x9c\xf4\x33\x2a\x2d\x85\xc8\
+\x20\xcf\x28\xf4\x90\x5f\xbc\x35\x1a\x65\x87\x17\xbd\xa5\x14\x3f\
+\xcc\xd1\x65\xbf\xde\x28\xf2\xfa\x89\x0a\xb1\xf0\x85\xf1\x9e\x63\
+\x74\xaf\xe7\x5d\xb8\x37\x99\xb1\xad\x36\x9d\x5a\x89\x50\x0c\xdc\
+\x1e\xb3\xa7\xf1\x10\xb5\x52\x96\xa8\x2d\xb7\x8b\x31\x1f\x98\x49\
+\x18\x0a\xa0\xb8\x1e\x61\xf3\xaf\xf5\x96\xe8\x08\xaf\xa7\xab\xa6\
+\x3d\x46\xe5\xf7\x1f\xfa\x99\xbf\xd6\xa7\xf1\x0a\x27\x88\x4a\x82\
+\x2f\x6c\x5e\x4e\x69\x9e\x0a\x5f\xd5\x65\x9b\x0a\x03\xb7\x93\x88\
+\x15\x29\xdf\x80\x55\xbf\x63\x29\x46\x27\x5d\xaa\x36\xb0\x3b\x5b\
+\x90\x47\x10\x1e\x9b\x21\x0c\xa7\x72\x1e\x0c\x70\xf1\x03\x6d\x37\
+\x37\xfa\xcf\x17\x34\x81\xde\xaa\xd7\x3c\x4d\x05\x6d\xf1\x1f\x03\
+\x4e\x1b\xec\x7a\x65\x66\xe0\x04\xe9\xeb\x26\xad\xf1\x2a\xb7\x0d\
+\x4a\x96\x9f\x69\x3f\xff\x00\x50\xc4\x9b\x54\x8e\xd5\x09\x72\x6f\
+\x27\x25\x92\xad\x87\x03\x90\x61\x38\xc5\x6d\x57\xff\x00\x56\xd4\
+\x36\xe5\x22\x88\xbf\x6a\x62\x4b\x57\xe2\x7a\xda\x4f\x9f\x0c\x8e\
+\xc2\x98\x1f\xd2\x29\x91\x73\x51\x70\x0e\x3d\xa1\x32\x2d\x4a\x7b\
+\x4f\xcc\x38\x33\x59\x06\xd5\x34\xfe\x31\x49\xcd\x35\xad\xa5\x4d\
+\xbf\x9b\xb7\xed\x3d\x5f\x5d\xa7\xa7\x57\x65\x4d\x1a\x8e\xbc\x03\
+\x79\xc9\x65\x28\xd6\x23\x1d\x44\xae\x8a\xf8\xf4\x3c\x06\xcb\xa8\
+\xdd\x49\xbb\xf7\x58\x61\xd5\x94\xf5\x1f\x0d\xaa\x2c\xd4\x02\xfb\
+\x62\x39\x34\x5a\x0d\x42\x94\xa7\x59\xa9\xb7\x23\x77\x13\x80\xc0\
+\x83\x6c\x83\x19\x46\xb5\x4a\x6c\x08\x63\x89\x60\xd5\xd5\xfe\x1d\
+\x5e\x90\x25\x6c\xe3\xba\xc8\x89\xb8\xda\xdc\xf7\x97\x26\xa6\xa2\
+\x9f\x12\x9b\x10\x18\xf1\xd2\x7a\xbd\x3a\x5a\xc0\x5a\x9d\x92\xb0\
+\xc9\x1d\xe3\xdf\xd4\xe7\x30\x22\x33\x46\xf6\xd4\x52\x63\xc8\x61\
+\x01\xf1\xe4\x6b\x82\x20\xad\xd5\xc1\xec\x64\x0f\xac\x2d\x59\x87\
+\x66\x22\x09\x19\xf5\x87\xab\x16\xd5\x54\x3e\xb3\x00\xc0\x3d\xe2\
+\x86\xa3\x68\xbf\x58\xea\x22\xe2\xe7\x03\xbc\x48\x0c\x3f\xbc\xa8\
+\x28\x52\xa0\x74\x12\xa4\xca\xb6\x70\x36\xe2\xdc\x0e\xf3\xd4\x5c\
+\xa9\xbf\xd2\x01\x22\xf9\x39\x86\x2d\xc8\xe0\xf1\x02\x61\x7d\xcc\
+\x77\x5a\xf7\xc1\x9a\x97\x17\x5c\x83\xcc\x49\xe4\xc3\xa6\xe3\x70\
+\x0d\x91\xde\x08\x45\x77\x64\x09\x80\x95\x61\x70\x44\x6b\x2e\xdc\
+\xde\xea\x78\x98\xb7\xef\x71\xd8\xcb\x51\xf4\x2a\x90\x01\xe4\x4e\
+\x8e\x9f\x50\x08\x07\x91\xd6\x72\x17\x68\xc8\x36\x87\x4a\xb1\x4a\
+\x99\xc5\xff\x00\x79\x9b\xc7\x4c\xaf\xa2\x4a\x14\xf5\x94\xb6\x02\
+\x03\x11\xe5\x3e\xb3\xe5\xb5\xd4\x5e\x8e\xa5\xd1\x81\x0c\x0e\x67\
+\x67\xe1\x9a\xbd\xb5\xc6\xd3\x9e\xd2\x8f\x8d\x69\xa9\xea\xa9\xf8\
+\xca\x33\xdf\xb1\x98\xe3\x7f\x35\xab\x36\x3e\x4d\xb9\xdc\x31\x68\
+\xea\x6e\xae\x00\x6b\xdc\x75\xed\x02\xb5\x36\xa5\x50\xa3\x8b\x11\
+\x05\x30\x44\xec\xe6\x6d\x7d\xca\x36\x72\x1b\x8b\x75\x8a\x6b\xee\
+\xb1\xbd\x87\x4f\x58\xf4\x2c\xaa\x5a\xc1\x80\xc8\x07\xac\x96\xa5\
+\x42\xf5\x59\xc8\x00\x93\xc4\xa2\xa6\x6e\xc5\x80\xb7\xb4\xc3\x63\
+\xd7\xf5\x99\xc8\xb8\xe9\x16\x49\x38\xbe\x24\x8d\x04\x0e\xb1\xce\
+\xd8\xe4\xf3\x23\x0f\x90\x2d\xf5\x8f\xaa\xd8\xe6\x49\xbb\x8d\xf0\
+\x63\x91\x89\xeb\x25\xf5\x94\x69\xc7\x9a\xc4\xe6\x49\x65\x0e\x2e\
+\x7a\x4d\xb9\xe9\x88\x74\xc7\xdd\xf1\x30\x8b\x4e\x6d\x08\x10\xc3\
+\x9c\xcc\x3c\xdc\x7c\xd3\x0e\x33\xfb\x42\x5c\x8b\xda\x44\x4a\x47\
+\x2d\x93\xda\x7a\xa1\x2d\xe6\xb5\xba\x62\x78\x29\x6c\xf5\x84\xad\
+\x7b\xa3\x75\x82\x29\xbf\xd3\x23\x99\x1d\x5b\x6e\xc7\x32\xdd\xbe\
+\x56\x1d\x64\x95\x52\xe6\xf3\x5c\x45\x2f\x79\x03\x98\x74\x8d\xc7\
+\xd7\x88\xa6\x04\x1b\x46\x23\x0b\x64\x4d\x03\xa9\x92\x0d\xe1\xb0\
+\xba\x96\x5e\x0f\x22\x00\x61\xb7\xbc\xcb\x9b\x82\xa6\xe4\x0e\x26\
+\x4b\x0f\xde\x27\x84\x70\x47\xc9\xfd\xa4\xa5\x48\x72\x08\xe3\x99\
+\x48\x1b\xae\x46\x08\x8b\xac\xde\x21\xdc\xbf\x32\xf2\x3b\xfa\xcd\
+\x40\x9f\x27\x26\x09\x61\xf2\xf0\x04\xf5\x4a\x8c\x79\x1e\xd6\x81\
+\x4f\xcc\xd9\xb5\xa2\x0c\x5a\x6a\x16\xe4\x66\x26\xec\xa7\x92\x23\
+\x77\x5c\xfa\x4d\x21\x4e\x1b\xe8\x64\x80\xd5\x2a\x1a\x78\x6d\xde\
+\xf9\x80\x2a\xe3\xcd\x4d\x4f\xd2\x35\x52\xc7\x10\x4d\x3b\xb7\x63\
+\x14\x65\x17\xa6\xd4\xc8\x2b\xc7\x40\x63\xf4\xe3\x4a\xc4\x7f\xa8\
+\xad\xf4\x32\x7a\x09\x67\x2a\x7a\x88\x68\x36\xb9\x04\x42\xa7\x5d\
+\x56\x89\x60\xe9\x55\xae\x46\x7c\xb2\x8a\x1e\x05\x27\x15\x96\xa3\
+\x2d\x9a\xf6\xdb\xc4\xe3\xa8\x65\x53\xb4\x9c\x1b\x83\xe9\x28\xd3\
+\xd7\x6b\x80\xf9\x07\xbc\xe7\x78\xb5\x2b\xaf\x5a\x86\x95\x6a\x6e\
+\x2e\xfb\x5c\x6e\x16\x1d\x0c\x9a\xa3\x68\x94\xd8\x53\xac\xe4\x73\
+\xe6\xb4\xb3\x62\xd5\xd0\xab\x15\x27\xc3\xc5\xc1\xe9\x39\x8e\x29\
+\x6e\x3f\x78\xcb\xee\x26\x63\x54\xd1\xa9\xd2\xd8\xff\x00\x95\x1f\
+\x57\x31\x5a\x8d\x55\x1a\x62\xe3\x43\x40\x8f\xf7\x5c\xc0\x34\x99\
+\x9a\xca\xe8\x6f\xd2\xf6\x8c\xad\x48\xd8\x17\x41\x70\x00\x00\x0f\
+\xe6\x6b\xa8\x12\x36\xae\xb5\xb6\xd4\x0a\xe0\x74\x75\xbd\xa7\x85\
+\x4d\x1d\x61\xb6\xbd\x02\x9d\x9e\x99\xfe\x86\x21\xeb\x31\xf9\x80\
+\x75\x03\x83\x00\x6c\x60\x40\x3b\x7d\x0c\xde\x33\xa6\xb6\x82\x8e\
+\xdd\xda\x7d\x52\x30\x63\xc5\x41\xb4\xfb\x44\x6a\x68\x55\xa2\x4a\
+\xbd\x2f\x27\xe1\x71\x0c\xab\x23\x05\x2b\x75\x38\x23\xa1\x84\x8f\
+\xa8\xa1\x59\x82\x31\x6a\x6d\x7b\x29\xcd\x8f\x69\x76\x90\xd7\xa7\
+\xb9\x43\x5b\x31\x54\xee\x0d\xd4\x90\x41\xb8\xf7\x9d\x74\x1a\x7d\
+\x55\x32\x36\x8a\x35\x48\xff\x00\xea\x4f\xf4\x9c\xed\x5d\x27\xd3\
+\xd6\xf3\x29\x06\x32\x8c\x06\xb4\x6f\x22\xb8\x16\x0f\xc8\xec\xdd\
+\x64\xa4\x09\x5a\x95\x6a\x55\x29\xff\x00\xf6\x5f\xeb\x25\x38\x3c\
+\xc9\x1b\x45\xf6\xae\xc6\x38\x27\xf4\x84\x4b\x23\xab\x0c\x30\xeb\
+\x27\xe2\xd9\x94\x82\xae\x81\x2f\x90\x30\x4c\x41\xd5\x55\x75\x94\
+\x8d\x45\x00\x56\x5f\x98\x77\x12\x35\xb1\x3b\x5b\x91\x28\xa4\x5d\
+\x18\x3a\xfc\xc3\xf7\xf4\x8d\xd5\x50\x15\xd7\xed\x34\x41\xff\x00\
+\x78\xec\x61\xe1\x06\xb0\x01\x58\xe3\x95\x07\xf6\x82\x9b\x76\x80\
+\x41\x8d\xd4\xd3\x25\xa9\x87\x16\xf2\x2c\x51\x42\x1a\xe4\x45\x0e\
+\x9e\xd3\x58\x0b\x5d\x41\xcc\x7d\x72\x8d\x66\x5b\x8b\xf4\x89\xf0\
+\xf6\xb6\x0d\xe6\xd8\xf5\xfd\xe0\x98\x49\xe8\x23\x74\xec\x49\xb1\
+\xe2\xf0\x00\xef\x68\xda\x29\x9b\xfe\xb2\x50\x55\x17\xcc\x6d\xc4\
+\xc4\x07\xac\xa8\x2f\x94\x62\xf7\x98\x50\x76\xb4\x34\xb6\x9b\x5e\
+\x9d\x8e\x47\x04\x4d\x65\x01\x6e\xa7\x10\x54\x00\x6d\x79\xa4\xec\
+\x39\x82\x27\x75\x9a\xf3\xdb\xed\xc0\xb8\xed\x3d\x55\x41\xbb\x2d\
+\xfd\x47\x68\xa5\x22\xe4\x1b\xc5\x28\xa0\xd7\x60\xf4\xc9\xba\x9c\
+\x89\xd6\xd3\xea\xcd\x54\x64\xdd\xb5\x8e\x6c\x78\x6b\x4e\x0d\x02\
+\x52\xb5\xd6\xf2\xda\x4c\x0d\x42\x2e\x37\x0c\xfb\xcc\xf2\x86\x55\
+\x1a\xea\x0b\xa9\x42\x57\x0e\x38\xbf\xf0\x67\x1d\x91\x81\xb1\x04\
+\x10\x67\x55\xea\xb2\x5a\xa8\xc8\x5c\x30\xee\x26\x7c\x42\x82\xd4\
+\xa3\xf6\x8a\x36\x38\xcf\xb4\xa5\xc5\x66\xb9\x88\xd7\x7d\xac\x40\
+\xec\x6f\x00\xd3\xdd\x72\x2d\x79\xe6\x5e\x6f\x3c\x0e\xdc\x8e\x66\
+\xd9\x08\x52\x3f\xb4\xf3\x27\xd6\x13\x0c\x6f\x51\x83\xd3\xb1\x9a\
+\x0d\xc5\x8f\x22\x48\x86\x43\xcd\x8f\x31\x95\x01\xf0\xd4\xc2\x00\
+\x93\xc4\x7b\xa8\x34\x97\x89\x24\xb4\xc9\xbd\xa5\x74\x30\x41\x8b\
+\x5a\x37\x37\x06\x53\x46\x91\xbd\xce\x25\x6a\x91\x5a\xff\x00\xa6\
+\x27\x87\xa4\x62\x29\x20\x01\xcd\xa1\x9a\x61\x46\x39\x9c\x9b\x25\
+\x80\x51\x73\xcc\x05\xbd\xee\x4c\x27\xe6\x01\x3d\xa2\x94\x29\x04\
+\x5c\x4f\x38\x07\x23\x06\x22\x9b\x35\xe3\x41\xbc\x10\x99\x7c\xa5\
+\xfa\x11\x27\x74\xea\x25\xea\xb7\xa1\x63\x6b\x9c\xc9\x9d\x48\x38\
+\xcc\xa5\x48\x2a\xa1\x63\xc4\xc3\x49\x80\xc6\x65\xa6\x98\x61\x91\
+\x63\x31\x69\x84\xcb\x5c\xf6\x9a\xfd\x0c\x48\xc0\xab\x5a\xf6\x8a\
+\xb3\x83\xbb\x23\xd6\x52\xee\xaa\x49\x16\xb9\x93\xd5\x76\x7b\x5c\
+\xe3\xb4\xd4\x0f\x1a\xac\xca\x01\x63\xcc\x1d\xe0\xb0\xb1\xb3\x77\
+\x81\x6f\x38\x8b\xdd\xe6\xb4\x40\xaa\x80\xcd\xb9\x47\xb8\x80\xa0\
+\x28\xb4\x6a\xb9\x07\x73\x00\xc0\x41\xa8\xa1\xc6\xea\x63\xd4\x8e\
+\xd2\x40\x51\x78\x77\xef\xc4\x04\x06\xf7\x38\x86\x2d\x7b\x48\x3c\
+\x01\x06\xe2\x53\x4d\x09\x17\xda\x18\x45\xd3\x5b\x64\x4a\x28\x60\
+\xe3\x83\xc8\x85\x6a\x05\x55\x4b\x02\x30\x6f\xd6\x65\x6a\x4c\x2a\
+\x5c\x0e\x63\xde\x98\x24\x5c\x63\xd2\x1b\x21\x34\xc1\x10\xd3\x89\
+\xa9\xab\x6e\xda\x41\x00\x8f\xd2\x1d\x35\x65\xc1\xb9\xf7\x9e\xf3\
+\x8a\x83\x69\xf7\x8f\x46\x26\xe0\x8b\x5f\x83\x2b\x53\xa9\xf0\x66\
+\xdc\x4d\x16\xe2\xa2\x10\x7d\x08\x91\xd6\xa7\xb4\xb0\x7b\x0b\x18\
+\xcd\x2b\xd4\xa2\x45\x40\x7e\x52\x0c\x1d\x6e\x6b\xba\xe2\xfc\x8f\
+\x59\xcf\xeb\x5f\x08\x6a\x94\xc6\x15\x73\xf9\xa4\xec\xb5\x41\x2d\
+\x4e\xa1\x27\x9b\x03\x63\x0a\xa2\xe0\x1e\x22\x4b\x35\xb0\x31\xde\
+\x6e\x46\x49\x76\x5d\xdf\x28\x06\x79\x45\x36\xba\x70\x70\x71\xc1\
+\x8d\x14\x0d\x4c\xab\x02\x4f\x43\x89\x82\x81\x01\xc9\x16\x23\x81\
+\x69\xad\x05\x06\x60\xe7\xb1\xfc\x27\x89\x8a\xcc\xa4\xb2\x12\x47\
+\x51\xda\x59\xa4\xf0\xaa\x50\x74\x6a\x57\x7b\xdd\x4d\xf3\x23\xac\
+\xa6\x9b\x92\x87\xcc\x38\x3d\xe4\x9e\x15\x88\x62\xc2\xd9\x3d\xa3\
+\x13\x56\x8e\x86\x8e\xa2\x98\xa8\x9f\xb8\xf6\x88\xb0\xad\x48\xed\
+\x16\xa8\x39\x12\x67\x36\x7e\x6d\xd6\x38\x14\x54\x44\xa3\x56\x9b\
+\x6c\x0d\x4d\x8d\x83\x03\xc8\x91\xd6\x14\x83\x95\xda\xc2\xd2\x9d\
+\x3d\x45\xf3\x50\xaa\x6e\x8d\xc7\xa1\xef\x27\xd6\x53\x64\xd5\x32\
+\x9b\x1e\xb2\x41\x0b\x46\xd7\x25\x87\xbc\xf0\x5a\x7c\xf8\xb9\xbf\
+\x51\x04\xbd\x94\x0b\x64\x40\x2d\x7e\x91\x0b\xa9\xaa\xba\xe6\xaa\
+\xdc\x62\xf2\x9d\x2d\x36\xa3\x53\x7a\x82\xc8\xd8\x61\x79\xcb\xa6\
+\xf9\xb5\x85\x8c\xb7\x49\x55\x5a\xa0\x57\xc5\xb8\x3d\xe1\x4c\x5d\
+\xf1\x2d\x30\x4f\x0c\xab\x38\x1b\x6c\x09\x18\x92\xa3\xb6\xdd\x8e\
+\x78\xe0\x91\x2a\x4d\x49\xa7\xb6\x85\x56\x6d\xa4\x75\xe8\x6f\x06\
+\xad\x40\xb6\xa7\x59\x03\x8e\x8d\x68\x4d\x34\x01\x59\x48\x7f\x0d\
+\x5c\x75\x22\x61\xd9\xd8\x80\x7d\x63\xa8\x8a\x37\xea\x01\xec\x6e\
+\x23\x7e\xca\x7f\xed\xb0\x75\x3d\x25\xab\x11\x95\xa6\x4f\x24\x7d\
+\x23\xe8\xd1\x3c\xab\x83\x06\xa5\x27\xa6\xd6\x28\x40\x8d\xa4\x01\
+\x1c\xca\xa3\x91\x5c\x0c\xac\xd6\x50\x46\x46\x66\xae\xe5\x59\xa5\
+\xd8\xf0\x73\xd8\xcc\x34\x99\xf9\x8b\xa8\xc4\xae\xef\xd6\x54\xd9\
+\x1e\x74\x10\x48\xa2\x54\xa9\xb8\xbc\x65\x08\x89\x23\xe5\x98\x50\
+\x7c\xd7\xfa\x4a\x1e\x92\x1f\xfb\x96\x1e\xd3\x69\x69\x85\xfc\xb5\
+\x50\x83\xcc\xd6\x8c\x4c\x0f\xd2\x37\x76\xda\x88\xdf\x49\x57\xd8\
+\x10\x30\x6f\x1d\x6d\xed\x1e\xda\x5d\x22\xa0\x35\x2b\xdf\xad\x84\
+\x3f\x50\xe1\x2a\xe0\x9c\xe6\xf8\x3e\xb0\xfe\x1e\xfe\x15\x66\xd2\
+\xbe\x51\xb2\xb7\x86\x6a\xe8\x51\x46\xda\x6c\xd6\xfc\x44\xc6\xd7\
+\xd5\x69\xbc\x24\xad\x4e\x82\xf1\xd7\xa1\x99\x2e\x47\xc4\xb4\xad\
+\x42\xb9\x03\xe5\x39\x07\xd2\x48\xea\xc0\x8e\x67\xd3\x9a\xc2\xaf\
+\xc3\xfe\xd3\x45\x90\xb8\x19\x04\x7e\xb3\x92\xdf\x12\xd4\x03\x7f\
+\x0e\x91\xee\x02\xf3\x35\xc6\xda\x2c\x88\x69\xe4\xed\xb9\xb1\x84\
+\x89\xc8\x38\x3c\x4b\xa9\xfc\x62\xa0\x20\x3e\x9e\x8b\x0e\xc5\x65\
+\x94\xfe\x27\xa4\x70\xa6\xae\x8a\x99\xbf\x69\x5b\x7f\x82\x48\xe2\
+\x84\x65\x6c\x66\xd2\x92\x80\x69\xc3\x05\xeb\x91\x3a\xe9\x4f\xe0\
+\xda\xa1\x60\x5a\x83\xc3\xa9\xf0\x8a\x9e\x17\xf9\x7a\xab\x59\x79\
+\x99\xbc\xe3\x5f\x97\x0e\x98\x05\xac\x44\xb2\x98\xe0\x1c\xc3\xa9\
+\xa5\x7a\x2d\x6a\x94\xd9\x2d\xdc\x4d\xa4\x96\x3d\xe5\x6e\x8c\x38\
+\xa9\x5c\x0e\x7a\xcd\x10\x69\xb1\xdc\x4c\x72\x59\xef\x71\x98\x34\
+\x96\xb0\xb9\xe2\x2b\x69\x12\xe3\x4a\xed\x7c\x4c\x6d\x39\x61\x81\
+\x89\x68\xc4\x04\x1b\xe2\x15\x30\x77\x0c\xca\x5a\x95\x34\xbd\x89\
+\x63\x12\xc1\x47\x04\xc7\x51\xe2\xa2\x86\x05\x4d\xed\xd2\x6d\x41\
+\x63\x8e\x24\xa2\xea\x6e\x0c\xa3\x7d\xe9\x83\xd4\x60\xc0\x82\xdb\
+\x8d\xb8\x89\xac\xc4\x5e\xfd\x63\x2a\x9d\xa0\x58\x5c\x99\x25\x46\
+\x3c\x9c\xc6\x46\x69\x75\x47\x51\x27\x62\xd2\xac\x11\xda\x26\xaa\
+\x8b\x9c\x83\x37\x01\x57\xf3\x1f\x68\x25\x40\x37\x31\xaa\x86\xc4\
+\xdb\x88\x23\x1c\x8b\x98\x86\x05\xc5\xc8\xc4\x15\x05\x5b\x72\x18\
+\xc1\x73\xeb\x0d\x13\x3f\xd2\x4b\x00\xca\xac\x37\x2d\x87\xa0\xe9\
+\x04\x21\xea\x23\x80\xda\x77\x01\x60\x79\x13\x76\xd8\x6e\x5c\xac\
+\x8e\x31\x56\xe0\x47\xd3\xa6\x47\x06\x0a\x10\x70\x2e\x3d\x23\x81\
+\xb0\xc8\x99\xb4\xc3\x54\x87\x4d\xbd\x44\xc4\xbd\x88\x31\x6b\x50\
+\x5f\xb4\x72\x90\xf7\x33\x24\x97\x41\xbb\x70\xe9\x0d\x00\x28\x08\
+\x1c\x4f\x30\x21\x8d\xf8\x8c\xa4\x2f\x70\x64\x8d\x46\x5f\x08\xa9\
+\x36\x36\xb4\xdd\x55\xbc\x44\x63\xc9\x51\x98\xaa\x96\x0c\xa9\x19\
+\xab\xf3\x54\x55\xec\xa0\x41\x27\xae\xa4\xae\xf5\x02\xc7\xd2\x21\
+\x89\x23\x6e\x31\xc8\xb4\xaf\xf0\x94\x5f\xa1\xf5\x93\xb8\x0a\x85\
+\x9c\x5d\xaf\xe5\xb4\x60\xa5\x32\xd8\xee\x06\xc4\xe0\x4d\xa9\x5e\
+\xaa\xd3\x0b\xbb\x24\x66\xf1\x95\x54\x30\xf1\x12\xc4\x70\x04\x95\
+\x77\x12\x5e\xd8\x1f\xcc\xd4\xed\x3c\x03\x97\xdb\x4e\xe4\xda\xe2\
+\xdd\x0c\xbc\x69\x68\xbe\x98\x6a\xab\x33\x0b\xe0\xaa\x8e\xb2\x13\
+\x55\xe9\x9e\x99\xc4\xb2\xaf\x9b\x44\x85\x5a\xc6\x93\x5d\x81\xe2\
+\xc7\xfe\x09\x55\x1c\xcd\x55\x33\xa6\xd5\x59\x4e\x39\x56\xee\x24\
+\xfa\x94\xde\x7c\x45\x1c\xf2\x3d\x67\x4a\xbd\x23\x5a\x88\xb1\x05\
+\xa9\xe4\x0b\xf4\x91\x30\x6a\x76\x2c\xa6\xdc\x1c\x4d\x4a\xcd\x46\
+\xd7\xb8\x3d\x6d\x69\x4d\x6b\x57\xd2\x2b\xff\x00\xdc\xa6\x33\xea\
+\x22\x6a\x26\x4e\x49\x1c\x89\xb4\x2a\x78\x76\x27\x20\x1b\x11\xe9\
+\x14\x9d\xc6\x38\x8b\xe8\x6d\x2a\xaf\x4f\xc3\xaa\x45\xee\xa7\x2a\
+\x7b\x88\x97\x50\x01\x90\x62\x9c\x43\xa6\x79\xcd\x8d\xa2\x01\xce\
+\x73\x1d\x48\x16\x61\x6c\xdc\xf1\x08\x9d\x66\x54\xac\x94\xd2\xa3\
+\x80\xdb\x05\x8d\xbf\x68\xf4\xa3\xbe\x90\xa4\xee\xa5\xc7\x07\xac\
+\xe7\xd6\xba\xd6\x01\xae\x2c\xa2\x57\x4a\xa1\x6b\x6e\xcf\x66\x85\
+\x8d\x40\xb5\x3a\x94\x5b\x65\x44\x36\xef\x1d\x49\x99\x16\xfb\x8f\
+\xa4\xa0\x13\x51\x2d\x7b\x30\xe2\x24\xdb\x76\xd7\x4b\x1e\xb6\x86\
+\xe9\x36\x86\xb0\x37\x92\xaa\xee\x1d\x8c\xa0\x52\xa6\xfe\x6a\x43\
+\x1e\xf2\x41\x40\x36\x69\xb0\x62\x3f\x0f\x58\xca\x0c\xf4\xde\xf9\
+\x52\x3a\x18\x5f\xf1\x2a\xa6\xb4\x80\xb3\x16\x07\xb1\x13\x7c\x3a\
+\x27\x87\xb1\x86\x8f\x4e\xb2\x58\x8b\x37\x79\x35\x54\x64\x36\x3c\
+\x74\x33\x24\x4d\x4d\x46\x2e\x59\x62\x2a\xf8\x34\xde\xd9\x33\x1d\
+\x8d\xae\x0c\x45\x56\xbf\xcc\x2f\xeb\xd6\x6a\x41\x47\x52\xad\x3e\
+\x56\x98\xcc\x57\x8e\xe0\x1b\x59\x7d\x84\xc0\xa5\xb0\x0e\x20\xb5\
+\xb2\x09\x9a\xc0\xf2\xd7\x76\x24\x16\x36\xf7\x8c\x37\xf0\x8d\xcd\
+\xcc\x98\x9b\x1c\x0c\x4a\x37\x1f\x00\x1e\xa0\xe6\x49\x94\x05\xe9\
+\xba\x93\xed\x19\xa6\x60\xda\x66\x4b\xf5\x93\xa1\x3e\x21\x17\x85\
+\xa4\xb8\x77\x5e\x31\x2a\x96\x7c\x08\x96\x5d\x46\x98\x9c\x7f\xc1\
+\x39\x6e\x36\xb9\x17\xb1\x06\xd3\xa7\xf0\x70\x57\xe2\xce\xa3\xf1\
+\xa9\xfe\xf2\x3f\x88\x21\x5d\x75\x65\xb5\xbc\xc6\x13\xd5\x7c\x4e\
+\x72\x01\x3c\xc7\x51\x1f\x70\xc4\x5e\xea\xdf\xcc\x50\x16\x00\xda\
+\x51\xa6\x5c\x54\x5c\xe5\x6f\x11\x1b\x7b\x05\xf5\xea\x25\xfa\x2d\
+\x45\x5a\x54\xd4\xa5\x46\x06\xfd\xe4\x58\x08\x84\xdb\xd6\x39\x40\
+\xf0\xd6\xc7\x36\x87\x2e\xda\x8e\xdd\x1f\x89\x78\x80\x26\xa6\x9a\
+\x54\x5f\x6c\xc6\x7d\x8b\x4f\x5c\x97\xd2\xb8\xbf\xe5\x33\x8f\x4f\
+\x71\xb5\xc8\xbc\xb2\x8d\x41\x49\x77\xa9\xcd\xfb\xce\x56\x7f\x1a\
+\x97\xfa\x61\xd3\x3d\x3a\x85\x5d\x0d\xf8\xbc\x34\xa2\x05\xfc\xc3\
+\xda\x55\xa7\xf8\x82\x55\xb5\x3a\xea\x08\xef\x0a\xae\x90\x3d\xde\
+\x8b\x82\xbd\x8c\x36\xfd\x6b\x08\x4f\x0d\x45\xf6\x92\x7d\x62\x35\
+\x15\x49\x16\x5e\x23\x1e\x9d\x54\xf9\x95\x80\x88\xa8\x09\xe0\x8b\
+\x46\x02\x00\x62\x73\xc0\x8b\x71\x73\x7e\x23\x18\xb0\x16\xe0\x99\
+\x81\x71\x73\x34\x13\xbd\xc6\x21\x51\xc8\x6f\x6b\xc3\x5a\x26\xa3\
+\xd8\x5c\x08\xc7\xa2\x88\x40\x0f\x7b\x7c\xde\xf2\x18\x99\xaa\xf7\
+\xcc\x5b\xa8\x22\xe3\x37\x9b\x59\x02\x92\x2f\x31\x03\x0e\x38\x9a\
+\x05\x5e\xd8\xb4\x5b\xe7\x9c\x19\x66\xc5\x6c\x8c\x19\x3d\x4a\x47\
+\xa5\xe3\x28\xc2\x43\x95\x04\x4f\x00\xb6\xbf\x78\x2c\x0e\xe2\x38\
+\xb4\xd5\xb9\x04\xf1\x69\xa4\xd0\x07\x48\x6a\x97\x16\x26\xd3\x13\
+\x04\x82\x6d\x18\x8a\x06\x79\x82\x09\x56\xb1\xbd\x8f\xac\x2a\x20\
+\x01\x9b\x90\x79\x9a\xd6\x3c\xcc\x00\x80\x6d\x99\x26\xba\x59\xb1\
+\x8e\xd6\x84\x1b\xf0\x9e\xd0\x51\xb7\x8d\xad\xcf\x49\xaa\xb6\x1f\
+\x30\x3f\xcc\x0b\xd1\xda\x53\xe6\x2b\xde\x2d\x6d\x90\x61\x52\xb2\
+\xbe\x0f\x48\x55\x14\x31\x16\xf3\x7d\x0f\x68\xdd\x3a\x1d\xe0\xf4\
+\xef\x27\xa9\x72\x80\x93\x89\x46\x9a\xaf\x86\x2e\x4f\x22\xc0\x19\
+\x92\x02\xa6\xa5\x7b\xe3\x06\xd0\xb5\x8d\x7a\xec\xab\xc0\xc4\x2d\
+\x31\x56\xd5\x03\xc6\xdc\xdb\xa4\x4d\x40\x7c\x42\xcd\x70\x09\xbc\
+\x93\x50\x8e\xb0\x35\x34\xbc\xfb\x87\xca\x73\x79\xa3\x20\x8b\xc3\
+\x27\xee\x41\x6c\x28\x92\x73\x77\x13\x54\x22\xe1\x57\xfe\x5e\x54\
+\x02\x1d\x03\xb7\x02\xa3\x05\x1f\x4e\xb0\xaa\xea\x74\x57\x25\xb4\
+\x59\x23\x3b\x5e\xc2\x4d\xa9\xd4\x9a\xcc\x3c\xab\x4d\x14\x59\x51\
+\x78\x13\x7d\xd0\x48\x42\x5c\x52\x61\x92\x79\x33\x74\xd5\x88\xd6\
+\x38\x70\x4d\x37\xf2\x91\xd8\x1e\x26\x0f\x11\x95\x82\xdc\x93\xe5\
+\x51\xfc\xca\x74\x74\x95\x36\xbd\xc1\x28\xb7\x21\xb8\x27\xa4\x68\
+\x2b\x5b\xa7\xab\xa7\xa8\x8d\xb8\x30\x61\x63\x69\x3d\x76\x75\x56\
+\x04\x9b\x5e\xf2\x8d\x75\x64\xae\x81\xd6\xf6\x56\xdb\xff\x00\xb8\
+\x87\xa8\x2a\xa8\x2c\x45\xc0\xb3\x5f\xac\xa2\xa9\xfc\x42\xcb\x6d\
+\xaa\xc5\x7b\x8e\x91\x0e\xd4\xee\xc0\xa5\xae\x31\x63\x09\xd3\x6b\
+\x06\x17\xb1\xe2\x26\xa8\x37\x04\x8b\xcd\x32\x7a\xf8\x75\xb4\xd6\
+\x0e\x43\xd3\xe2\xe3\x91\x10\xc8\xc5\x71\x9f\x6c\xc0\xa4\xc6\x9d\
+\x40\x7b\x18\x55\x86\xca\x9e\x4e\x0e\x44\x10\x36\xf3\x19\x44\x94\
+\x21\x86\x60\x78\x84\xfc\xe0\x34\xa3\x4e\x8a\x48\xda\x79\xe8\x64\
+\x95\xb3\x0a\xbb\x56\xa7\x25\x45\x9b\xb4\x62\xab\xd3\x21\x4d\xad\
+\xfb\x18\xad\x86\xc8\x6d\x6b\x60\x8e\xd2\xf4\x0a\x50\x06\xf9\x6d\
+\x71\xe9\x0b\xd3\x51\xea\x35\x03\x1b\x5e\xcd\xd2\x52\xd4\xc3\xa5\
+\xd4\x5d\xba\xc9\xd6\x8f\x86\x77\xf4\x3c\x18\xf5\xa8\x6d\xfc\xcc\
+\x5f\xf0\xc2\x1a\xcb\xde\xe2\x36\x95\x70\x46\xda\x83\x78\xf5\x19\
+\x9b\x56\x9e\xf1\xbc\x0c\xc9\x76\xd9\xf3\x1f\x52\xf5\x5a\x6d\x73\
+\xa7\x27\x77\x63\xcc\xc5\xa9\xb9\x4d\x3a\x83\xeb\x26\x56\xb6\x6f\
+\x62\x3b\x46\xf8\xa9\x57\x15\x70\xdd\x1c\x43\x0e\x95\xa8\x46\x42\
+\x41\xfa\x49\x77\x7e\x16\xbc\xe9\x30\x62\x9b\x1f\x24\x65\x4f\x79\
+\x16\xa1\x81\x7d\xae\x3d\x8f\x69\xa9\x45\x26\xe5\x4f\x69\x95\x1c\
+\x13\x76\xe4\xf5\x10\x2a\xde\xf8\xfd\x22\xc9\x6e\xb3\x4c\xe8\xcd\
+\xd4\xdc\xe4\x7a\x46\x51\x7b\x82\x3a\x34\x9f\x71\x5c\x03\xef\x19\
+\x41\x81\x18\x36\x37\xe2\x4a\x3c\x0f\xde\xc7\xd0\x1f\x7c\xc7\x9c\
+\x73\x10\xe8\x56\xb5\xb3\x83\x2a\xa6\x36\xb1\xf5\x02\x14\xc3\xfe\
+\x13\xe5\xf8\xbd\x12\x4d\xae\xa4\x67\xd8\xc5\xfc\x61\x7f\xf9\x1a\
+\xc4\x62\xc6\x1f\xc3\x3c\xdf\x13\xd3\x77\xcf\xf5\x83\xf1\x73\x7f\
+\x88\x56\xcf\x58\x7f\xe8\xfc\x46\x82\xc6\xd1\xfa\x4f\x35\x50\x3b\
+\x82\x3f\x69\x39\x61\x8b\x73\x19\xa2\x6f\xf3\x48\x2f\xcb\x46\x81\
+\x54\x07\x62\xfa\x08\x5b\xf6\xa2\x01\xf9\x60\xd5\x36\x19\xee\x66\
+\x54\x60\x18\x03\xd0\x5a\x49\x4d\x37\x2a\x73\x29\x0d\xe5\x5b\x48\
+\x68\xb0\x6b\x2f\x53\x29\x0f\x76\x6b\x1c\x74\x99\xb0\xc5\x08\xff\
+\x00\x48\xf4\xd4\x54\xa6\xc0\xab\x11\xf5\x91\x03\x63\x37\x71\xb4\
+\xc9\xd7\x5d\x3e\x23\x8b\x3a\x83\x3d\xe3\xe9\xaa\x1b\x35\x30\x3d\
+\x44\xe4\x0a\x96\x1c\xe6\x6a\xb9\xb1\x20\xc3\xf2\x7f\x4e\xa3\xae\
+\x91\x8f\x94\x9f\x4c\xc0\x03\x4e\x9c\x82\x7d\xe7\x34\x55\x37\xb0\
+\x30\x8b\xdb\xcc\x72\x7a\x09\x62\xd5\x7a\x8a\xe8\x8b\x65\xc1\x3d\
+\xa4\x2d\x56\xe6\xc3\x00\x98\x35\x09\xe7\x33\x29\x0b\xb6\x4c\xd4\
+\x83\x47\x54\x13\x54\xf6\x83\x9b\xe2\x51\x58\x02\xe3\xd8\x41\x14\
+\xee\x2f\x0d\x45\xa8\xb6\x67\x98\x10\x6e\xb9\x11\x81\x00\x19\x82\
+\x4e\xd0\x6d\x24\x89\x95\x4b\xb5\xcd\x8c\x02\xac\x8d\x71\xc4\x7e\
+\xa1\x30\x59\x6d\x6f\x48\x84\x72\x39\xc8\x9d\x23\x2d\x23\xcf\x8c\
+\xa9\x9a\x5c\x0c\x42\x01\x5d\x6c\xa6\xd1\x4e\x8c\xa7\x32\x43\xde\
+\x0f\x04\xfe\x93\xc7\x70\x1f\x34\x41\xc1\x86\x1b\x77\x26\x48\x7e\
+\x6e\x41\x1f\xac\x68\xf3\x2d\xef\x9e\xb6\x89\x06\xc7\x10\xf7\x11\
+\xf4\xe6\x55\x3c\x6a\x6d\x1c\xde\x36\x85\x4b\xb0\x36\xe6\x4a\xe2\
+\xc6\xe3\x88\xea\x2c\x2c\x0d\xb8\x85\x89\x7e\xd3\xb2\xc3\xbc\x5d\
+\x76\xb3\x2a\xa9\xf7\x94\xe9\xc0\x34\xf7\x74\x61\x10\x02\xee\x24\
+\xe5\x9b\x3e\xd3\x0d\x0f\x4e\x2d\xa7\xa9\x50\xf2\x70\x26\x52\xac\
+\xc3\xca\xc3\x7a\xf6\x31\x8c\x00\xa6\x88\x7a\x8b\x98\xad\x9c\xda\
+\x48\xdd\x94\xaa\xb5\xe9\xb1\xa6\xe7\xa3\x71\xfa\xc5\xea\x28\xd4\
+\x45\x65\x70\x7d\xcf\x11\x6d\xe4\x52\x3a\xc6\x69\xeb\xd5\xa2\x0a\
+\x92\x1c\x11\xf2\xb6\x44\x92\x0a\xa9\xe7\x6b\xda\x03\x50\x6a\x96\
+\x41\x8b\x9e\x4f\x49\x75\x6f\x05\x49\xf2\x96\x24\xe2\xf1\x6c\x5a\
+\xc4\x0b\x64\x5a\x6a\x51\x82\x51\x4d\x34\x55\x16\x98\xb3\x26\x0b\
+\x75\x69\x2e\xa5\x82\xe8\x55\x49\xf3\x3b\xff\x00\x10\xf4\xe5\x9d\
+\xea\xad\xbe\x65\xbf\xed\x11\xf1\x03\x6a\x34\x03\x8b\xfc\xdc\x7b\
+\xc6\x4e\xd5\x03\x32\x53\x45\x42\x30\xd9\x36\x9e\xd8\x00\xb9\x52\
+\x6f\xd4\x75\x8a\xd4\x79\x19\x73\xca\xfe\x92\x9d\x35\x4d\xc9\xe1\
+\xa9\x04\xa8\xb8\xf5\x13\x4c\xb9\xf5\xae\x8e\x54\xa9\xda\x7f\x68\
+\x04\xdd\x76\x93\xc7\x13\xa7\xa9\x44\xaa\xa0\x81\x9b\x66\x73\xc8\
+\x09\x50\xee\x20\xdb\xd2\x32\xaa\x9c\x95\x38\x30\xd0\xab\xd3\xda\
+\x45\xca\xe4\x7b\x42\xa8\x29\x1c\x81\x83\x3d\x45\xa9\xab\x82\x14\
+\xf3\xde\x40\xb6\x50\x6c\x56\x3a\x92\x92\x06\x2d\x68\xd7\x44\x22\
+\xea\xa7\x69\xe2\x32\x82\x8d\xbc\x1e\x64\x4e\xa0\xdb\xa9\x95\x6f\
+\x35\xbf\x51\x3a\x5a\x6d\x39\x6a\x1b\x87\x98\x0c\x4e\x7d\x02\x05\
+\x5b\x70\x27\x5b\xe1\xce\xa9\x50\xa8\x38\x22\x73\xe4\xd4\x26\xe5\
+\x0e\xc2\x2e\x07\x20\xcf\x05\x57\x25\xa9\x90\x0f\x55\x26\x3f\x5d\
+\x4d\x0d\x42\xe8\x7c\xa7\xf9\x91\xd8\xee\xe0\x4c\xc2\x6b\x3b\xd3\
+\xb1\x37\xf6\x30\x2b\x20\xa8\xbb\xd0\xd9\xba\x89\x4d\x16\x43\x65\
+\xaa\x37\x21\xfd\x44\x5d\x6a\x1e\x1b\x17\xa5\xe6\x4f\x5e\x44\xa5\
+\x48\x19\x58\x9b\x93\x63\xd8\xcf\x17\x20\x0e\xfd\x44\x66\xa2\xc4\
+\x64\x0f\x43\xda\x4e\x41\x18\x63\xec\x44\xe9\x3b\x65\x76\x86\xa8\
+\x36\xa5\x57\x2a\x4f\x94\xf6\x88\xf8\xa5\x26\xa3\x57\x63\x7e\xb1\
+\x34\xdb\x61\x9d\x0d\x70\x3a\x8f\x86\xd3\xad\xf8\xd3\xe6\xf6\x99\
+\xf2\x9f\x63\x8e\xd9\x5b\xf5\x13\x47\x38\xe4\xcf\x6e\x1b\xb0\x2e\
+\x4e\x26\x02\x17\x9c\x99\xb6\x4b\x65\xb9\xcf\xed\x09\x05\x86\x26\
+\xef\x01\xee\x56\xfe\x91\x88\xa0\xdb\xa4\x90\xda\xce\x48\x27\x22\
+\xd6\x31\xac\x0a\x05\xbf\x27\x10\x2b\x53\x51\x50\xec\xa8\x0f\xa4\
+\x76\xa0\x1b\x53\x06\xd7\x51\x7f\x78\x13\xfe\x0a\x9b\xbe\x25\x44\
+\x9e\x56\x9b\x37\xfc\xfd\x64\x7f\x11\xab\xe2\x6b\x2b\x30\xfc\xe6\
+\xd3\xa5\xf0\x40\x29\xf8\xf5\xd8\x8f\xbb\xa4\x17\x3d\x0f\x33\x87\
+\x55\xc9\xa8\x4f\x7c\xc2\x77\x4d\xf1\xe6\x6b\x7a\x74\x9b\xa5\x3f\
+\xe6\xa9\xff\x00\xe4\x22\x58\xdc\xf3\x1b\xa2\x3f\xe6\x94\x9e\x86\
+\xf3\x4c\x8f\x50\xcc\x5f\xeb\x88\x35\x0d\xdc\xdf\x1d\x27\x94\xde\
+\xaa\x83\xee\x60\x3b\x1d\xe4\xde\x48\xfa\x06\xd5\x37\x76\x17\x8f\
+\xa5\x52\xc4\x5e\xd9\xe6\x44\xaf\xb5\x01\xbf\xcc\x63\xe9\x1b\xda\
+\xfd\x25\x8a\x2d\xa4\xdd\x0c\x36\x26\x4a\x58\x8c\xaf\x10\xe9\xd4\
+\xb8\xb1\x98\xc6\xb4\x57\x37\x84\x5f\x6a\x00\x20\x37\xfb\x72\x66\
+\x54\xb8\xf9\x72\x65\x88\x45\x82\xf9\xba\xcf\x6f\x36\xf5\x83\x4d\
+\x0d\xbc\xc6\x10\x51\x7f\x41\x2e\x93\x09\x36\x19\x8c\xa5\x72\xc2\
+\xc3\x98\xa2\x73\xc4\x6e\x9c\x93\x50\x2f\x4b\xca\xa8\xad\x88\xdf\
+\xec\x21\x1e\x2d\x11\x7b\xd4\x27\xa1\x31\xbb\xac\xb9\x19\x99\x69\
+\x8e\x39\x88\x7f\x58\xf2\xd8\x8a\x71\x71\x70\x38\xe6\x41\x33\x9d\
+\xa0\xa9\xc8\x26\x4f\x51\x76\x9c\x64\x19\x46\xab\xe5\x07\x19\x93\
+\xd3\x7c\xed\x61\xe5\x9b\x8c\xb1\x49\x07\xb4\x67\x88\x0a\xed\x6e\
+\x3b\xcc\x74\x00\x5c\x18\xbe\x9d\xe2\x9b\x56\x99\xb5\xc1\xb8\xef\
+\x12\x2e\x0c\xa6\x9b\x6d\x1c\x62\x6b\xd3\x52\x37\xa7\x12\x58\x4a\
+\x5f\x93\x0d\x49\xef\x68\x04\xc2\x19\xfa\xc5\x0d\x2d\x7c\x9f\x2f\
+\x58\x7b\x43\x10\x17\x83\x16\xc0\x91\xb5\x38\xea\x65\x1a\x04\xfb\
+\xe1\x9b\xe7\xe9\x0a\x97\xd5\x3e\x16\x85\x14\x7c\xc7\x31\x34\x54\
+\x3b\x80\x6e\x49\xc9\x3e\x90\xeb\x95\xa9\x5f\xcb\x90\x05\xa3\x34\
+\xd4\xc2\xd3\xa8\xc4\x67\x81\x39\xb4\x07\x6d\xcf\x93\x6c\xc6\x30\
+\x01\x01\x19\xef\x15\xb4\xef\xb9\x8d\x4c\xa9\x0d\xc7\x32\x24\x38\
+\xce\xee\xbd\x20\xa1\x1e\x28\x1d\x4c\x3a\x9d\xcc\x50\x5b\xb8\x20\
+\xfd\x64\x1e\x71\x7a\x6a\xcd\xd0\x49\x5b\x50\xf4\xee\x53\x6f\x97\
+\xb8\x8f\x15\x11\xa8\xb2\xb1\x21\xc9\xc4\xe7\xd4\x2a\x29\x9d\xd7\
+\x02\xf6\x9b\x90\x53\x13\x54\x4e\xa4\xd5\x73\x6d\xc6\xc4\xaf\x63\
+\x1d\xf1\x1a\x25\xce\x9c\x2b\x06\x52\x0d\xfb\x8c\xc8\x54\x0b\x9d\
+\xa4\x30\x33\xa6\xcd\x7f\x86\xad\x75\x61\xbe\x9a\xec\xfd\x65\x7a\
+\x11\xc6\xad\xbd\x86\xf3\xf9\xac\x4c\xa3\xe1\xc9\xe6\x0d\x7b\x74\
+\x26\x53\x4c\x52\x7a\x55\x12\xb1\xda\xd7\x04\x10\x31\x3d\xa7\xa0\
+\xb4\xaa\x60\xb3\x23\xe2\xe3\x88\xea\xc1\xb2\x23\x29\xb9\xb7\x4b\
+\xc9\xab\x69\xb7\x53\xb9\xb1\xec\x65\x45\xe8\x86\x24\xa3\x15\x3f\
+\x30\x26\x08\x75\x46\x3b\x10\x11\xd4\x5f\xf7\x84\x4e\x69\xa5\xb6\
+\xf8\xdc\x3a\xcc\x34\xed\x66\x5e\x27\x63\x6d\x3a\x99\x34\x02\xfa\
+\x82\x67\x97\x4e\x9c\xb5\x25\x1e\xa1\xb1\x1f\xd2\xc7\x32\x8f\xe5\
+\x63\x8e\xfd\xa5\xba\x7a\x40\x6e\x0c\x7d\x63\xce\x9f\x4e\x3f\x0b\
+\x0f\x63\x19\xa6\xa5\xa6\xde\x14\xd6\x65\x1d\x09\x58\x5e\x4a\x44\
+\xbe\x1e\xdb\xda\xfc\xdb\x12\x8d\x09\x61\xa8\x50\x4e\x65\x1a\x9d\
+\x18\x5b\x6c\xaa\x8c\x0f\x68\xaa\x68\xd4\xab\x23\x3e\xe1\x63\xcd\
+\xa1\xbb\x0e\x1e\xca\x03\x6d\x04\x90\x7a\x49\x6a\x07\xa7\x50\xa9\
+\xbf\xa5\xe5\xfb\x55\xdc\xa7\x52\x70\x60\xd6\x45\x2a\x15\x80\x2c\
+\x26\x75\xac\x46\x1c\x85\xb1\x8f\x15\x08\x01\x87\x07\x98\xad\xac\
+\x0e\x14\x11\x09\xce\xd4\x18\xbd\xc5\xa4\x1e\xae\x8b\x51\x70\x3c\
+\xdf\xcc\xe7\x80\x03\x14\x75\xb0\x3c\x13\xd2\x51\x4e\xb9\x00\xdc\
+\x58\x21\xcf\xb4\x0a\xca\x2b\x2e\xe0\x45\xf9\x13\x53\xa1\x53\xb2\
+\xd9\xb6\xb7\x22\x74\x34\x6f\xba\x89\xa6\xdc\x38\x22\x42\x06\xfa\
+\x44\x1c\x3d\x3f\xdc\x4a\x74\x27\xef\x69\x0c\x08\xdf\x14\x73\x2c\
+\x77\x32\x9e\x86\x15\x41\x66\xf7\x8c\xaa\xa3\xed\x55\x40\xfc\xc6\
+\x2a\xaf\x97\x6e\x41\x24\x4d\x32\x00\x7c\xdd\xfb\xc6\xa9\xb5\x4b\
+\x2e\x73\x05\x53\x6a\xf9\x86\x4c\xd0\xde\x18\x62\xbf\x37\x17\xed\
+\x24\x7a\x94\x0a\xd5\x5c\x6e\x37\xb0\x1d\x2f\x1c\xf5\x99\xc8\x05\
+\x17\x8b\x48\xa8\xb5\xd2\xc4\x71\x91\x28\xa2\x8c\xd4\x83\x1c\x67\
+\x1f\xf3\xde\x16\x17\x52\xcb\x4f\xe0\x95\x9c\x59\x4d\x67\xb0\x3d\
+\xfa\x7f\x43\x38\x15\x01\x46\xb1\x13\xb3\xf1\xb6\x14\x34\xba\x6d\
+\x2b\x65\x91\x43\x30\xff\x00\x9f\x59\xca\x4a\xc0\x9d\x98\x00\xf0\
+\x61\xc7\xcd\x5c\x88\xd8\xe1\x6e\x54\x80\x78\x27\xac\x3d\x28\xb3\
+\xbb\x16\x02\xc8\x7f\x7c\x41\xac\xae\x18\x96\x72\x7b\x4c\xa1\xe5\
+\xd3\xd5\x6b\xf3\x65\xfe\xbf\xd2\x6c\x09\x1c\x0d\xc6\xf7\xb0\x82\
+\x1c\x33\x6d\xb6\x62\xd3\x09\xd8\x93\x30\x5c\x02\xd8\xed\x20\x7b\
+\x35\xdf\x00\x58\x60\x46\xd1\x63\x7b\x5a\xd2\x64\x1c\x9e\xb2\x8a\
+\x42\xe4\x9e\xd0\xa5\x4e\xfb\x01\x62\x26\x5c\xdf\x24\x01\x04\xb0\
+\xb5\xb8\x33\xd9\x27\xb9\xeb\x22\x6a\xd4\x24\xd8\x03\x68\x43\x3e\
+\xb1\x74\xb0\xf0\x95\xc0\x3b\x6d\x04\x75\x3f\x6e\x21\xe0\xac\x1a\
+\x79\x1e\x90\x99\x71\xc4\xc5\x20\x70\x2f\x88\x74\x30\xcc\xfd\x00\
+\x98\x45\xf0\x63\x2a\x2e\xca\x2a\x9d\x4f\x98\xff\x00\x49\x16\x29\
+\xeb\x0c\xde\xf6\xbc\x4a\xde\xd9\x86\xae\x2d\x7e\xd2\x43\xff\x00\
+\x68\xe4\xcc\x73\xb4\xda\xf3\xc0\xe0\xb1\xe7\xa4\x4b\x9b\x98\x20\
+\xea\x19\x40\xe0\x1b\x48\xc9\xbf\x06\x3a\xb6\xe6\x04\x60\x09\x33\
+\x6d\x07\x07\x89\xd2\x33\x4c\x47\xb5\x95\xb8\x9a\xcb\x61\x70\x6e\
+\x22\x77\x8b\xf2\x4f\xd2\x36\x8b\x0b\x90\x6e\x41\x19\x8a\x79\x4f\
+\xb4\x6d\x36\xda\xd6\xe4\x18\x25\x69\xa8\xb8\x24\x8e\xc2\x1d\x37\
+\x53\x85\x5b\x18\x27\xaa\x50\x60\x6e\x05\x81\x9e\x0a\x94\xc5\x89\
+\x2c\xc7\xa7\x69\x45\x36\x01\x4a\x9b\x1b\xf5\xed\x12\xf4\xce\xfe\
+\x4d\xe1\x29\x2d\x83\xbb\x75\x03\xd6\x59\xa4\x5f\x0d\x41\xea\x60\
+\xe9\xa9\x06\x6b\x76\x8f\x23\xcc\xc4\x70\xa2\xd0\xb5\x48\x55\x37\
+\x21\x99\x87\x53\x3a\x2a\x3e\xe5\x08\xeb\x92\x27\x34\xfc\xe1\x40\
+\xc5\xe5\xe1\xf6\xb6\xdf\xa0\x99\xa6\x34\x26\xdb\xdb\x9e\xfe\x91\
+\x65\xc0\x60\x7a\x74\x94\x90\x1d\x42\x9c\x11\xfb\xc9\x2b\x53\x6a\
+\x66\xed\xc4\x21\x65\x51\x92\x22\x4f\x94\x11\xd4\xca\x74\xca\x2b\
+\x82\x49\xb2\xd3\x17\x63\xe9\x23\xa9\x53\x6b\xee\xb6\x4f\x17\x8c\
+\x15\x15\x73\x60\x08\xe6\xf1\x3a\xa0\xdb\x43\x0e\xf9\x12\xbd\x4a\
+\xa6\xfc\xb0\x2a\x3b\x41\x44\x2c\x06\xdb\xb2\x8f\x98\x5b\x89\xd2\
+\x56\x51\xd3\x5f\xcd\x89\xd7\xa2\xad\x4b\x4c\x34\xf6\x0d\xb9\x77\
+\x1b\xf7\xe9\xfb\x41\xa3\xa0\x43\x6d\x43\x2b\x0a\x4a\x2e\x7a\xdf\
+\xd2\x20\x35\x43\x5c\xd6\x46\xda\xc0\xe0\x18\x5b\xaa\x4c\x39\x68\
+\x53\x73\x75\xba\xb1\x5b\x15\xe6\x2e\x99\x6a\x07\x28\x59\x09\xc8\
+\x27\x17\x95\x6a\x16\xa0\xad\x4e\xa2\x20\x00\xa8\x37\x1d\x0f\x69\
+\x42\x53\x35\x46\xeb\x85\x2d\xf3\x2d\xb0\x66\x75\xac\x24\x2a\x54\
+\x5d\xd4\xa9\xaf\x9b\x90\x44\x59\xa1\x5b\x05\x49\xa6\xcb\xd0\x8e\
+\x44\xb4\x50\x4a\x0c\x37\xdd\x01\xcd\xc6\x63\x98\x21\xb3\x00\xa4\
+\x75\x37\x86\x9c\x41\x4a\x8d\x52\x33\x7b\x7b\xc3\x1a\x7d\xb9\x2e\
+\x57\xbe\x65\x22\x91\x61\x74\x2f\xed\xd3\xde\xf0\x7c\x31\x4c\xdd\
+\xb6\xfb\x93\x7f\xe2\x1a\xb0\xb4\x55\x19\x15\x01\xf4\x3d\x63\x17\
+\x4a\xb5\x32\xa0\x03\xd8\x89\x85\x69\x33\x0b\xd6\x0b\x6e\x02\xad\
+\xa5\x00\xd2\xb6\xd6\x35\x18\x74\x22\xc2\x5a\x85\xf6\x40\xfa\x72\
+\xaf\x4e\xc4\x75\xf5\x90\x78\x55\x28\x12\x54\x3a\x8f\x5c\x89\xd7\
+\xd3\xfd\xda\x91\x4f\x7d\x65\xb5\xfe\x6c\xfe\x90\x1a\xba\x35\xc8\
+\xb2\xb7\x66\x13\x32\xd3\x89\xa8\xd9\xb6\xbb\x2e\x79\xb8\x3d\xb9\
+\x8d\x7a\x54\xea\xa9\x64\x62\x4f\x63\x3c\x7c\xe8\x5b\xc3\x50\x57\
+\x37\x43\xfd\x26\x53\x02\xf7\x00\x91\xce\x39\x92\x41\xaa\x46\x42\
+\x1a\xfd\x6c\x60\xd6\x0b\xe0\x52\x36\xb1\x37\xb9\x9d\x1d\x5a\x0a\
+\xaa\xd4\xc8\xf3\x72\xa4\x75\x9c\xcd\x52\x95\x4a\x54\xd8\x81\xcc\
+\xd4\xba\x2a\x7b\x7d\xeb\xad\xee\x19\x4c\x52\xb2\xa9\xd9\x6c\x9e\
+\xb1\x94\x94\x8d\x52\x1f\xf7\x5a\x22\xa5\xd5\xc9\x71\x70\x0d\xa7\
+\x48\xc8\xec\x4d\x50\xea\x7c\xc3\x0c\x3b\x88\xf4\xa3\xb3\xe2\x14\
+\xd4\x0b\xad\xc1\x11\x28\x8a\xd5\x3c\x45\x6b\xed\xc9\x12\xdd\x10\
+\x35\x2a\xa3\x7e\x56\xbf\xd2\x16\xa8\xe5\x6a\x2c\x35\x75\x3b\x6e\
+\x31\x2e\x55\x6a\x79\xb8\x1d\xa1\xd7\xa8\x4d\x67\x23\xab\x1b\x44\
+\xef\x6b\x4d\xc6\x4d\xad\x54\x3d\xca\xd3\xda\x7b\x93\x16\x36\x85\
+\xb3\x1b\x93\x9c\x41\x50\x5b\x04\xe4\xcd\x16\x2c\x6d\xc4\x90\xcb\
+\x6d\x50\x15\x6d\x79\xd9\xf8\x2d\x0d\xe5\x0b\x8c\x27\x9c\x93\xff\
+\x00\x3d\xbf\x49\xc3\xa7\x7a\x95\x54\x0e\xa6\x7d\x21\xff\x00\x2b\
+\xf0\x3a\xd5\x2f\xb1\xab\x59\x54\xf6\x1f\xf2\xf3\x1c\xff\x00\x8d\
+\x71\x70\xbe\x29\xaa\xfb\x4e\xbe\xad\x4e\x84\xd9\x7d\x84\x87\x75\
+\x8c\x67\x86\x77\x5c\x10\x73\xcc\x4b\x02\x1c\x83\x8c\xce\x93\xa6\
+\x54\x8f\xbc\xa6\x47\x24\x40\xaa\x36\x69\x50\x5b\xe6\x62\xdf\x4e\
+\x3f\xbc\x5a\x3b\x2b\x0d\x87\x27\x12\x8d\x5d\xbe\xd0\x29\xde\xfe\
+\x18\x00\xdb\xd3\x99\x24\xaf\x86\x0b\xd8\x4f\x54\x20\x59\x07\x4c\
+\x9f\x78\x60\x86\x6d\xc7\x27\xbc\x5b\x03\x92\x41\x90\x30\x11\x61\
+\x1a\xac\x64\xe4\xd8\x88\xea\x44\x11\x91\xcc\x91\xe9\x72\x45\xf8\
+\x9a\x1e\xc4\x88\x3b\xae\x2d\x60\x23\x02\x12\x2f\x61\x02\x2a\x27\
+\xcd\x1c\xa9\x72\x18\x7e\xd3\x28\x2d\x8e\x6d\x1d\x40\xe4\x8f\xd0\
+\xcc\xda\x47\x4e\xe0\x0c\x46\xba\x8b\x5e\x24\xb0\x07\x98\x74\x37\
+\x3b\x63\x8e\xa4\xcc\xd6\x8e\xa1\x4d\x6f\xbc\xfc\xab\x93\x15\x55\
+\xb7\x54\x2c\x7a\xc6\xd5\xa8\x19\x42\x53\x1e\x41\xfb\xc4\xec\xb9\
+\xc9\x1f\xac\x10\x18\x80\x6d\x35\x32\x71\xc4\xc7\x52\xa2\xdc\x98\
+\x35\x5b\x62\x58\x9c\x98\x83\x19\x85\xf1\x90\x22\x5e\xa6\xd1\x73\
+\x00\xb1\x02\xf9\x20\xc5\x56\x6d\xd6\xb0\x9a\x91\x68\x2a\xb8\x20\
+\xf7\x93\x66\xe2\xf7\x87\xe6\x20\x9b\x71\x16\xd7\xb5\xa6\xa3\x22\
+\x0c\x06\x2f\x0d\x58\x58\xd8\xe6\x4f\x62\x0c\x65\x21\x7f\x31\xb8\
+\x11\x06\x52\x2d\xbb\xd3\xac\xa9\x0a\xb0\xfb\xb3\x6b\x73\xde\x4b\
+\xb8\x9f\x28\x18\x8d\xa6\x6d\x60\x2e\x3d\x60\x62\x92\xc4\x30\x16\
+\xe9\x1e\x14\x54\x5b\xdf\xcc\x20\x00\x2a\x05\xe8\xd6\x8c\xa6\xa5\
+\x58\x1e\xa2\x62\xd6\x8e\xd2\x80\x88\xcc\x79\xe9\x36\xa7\x96\x88\
+\xb7\xe2\x39\x87\xaa\x40\x94\x95\x97\x86\xe9\x03\x50\xc9\xe4\x52\
+\xc7\x8b\xda\x64\x87\x4d\x4d\x4d\x60\x4f\x9a\xd9\x9a\xed\x66\xee\
+\x49\xcf\xa4\x2a\x0e\xaa\xaf\x61\x63\x6e\x62\xaa\x1c\xf1\xc4\x92\
+\xa4\xab\x74\xb5\xec\xc2\x13\xb8\xa9\x4e\xed\xf5\x9c\xdf\x18\x29\
+\xbd\xe5\x34\x6a\x07\x61\xb4\x5e\xf8\xb4\xb1\x6a\xaa\x4b\xe0\x68\
+\x5d\xb9\xf1\x18\x0f\xa4\xe7\x6a\x52\xef\x83\xed\x3a\x3a\xea\x82\
+\x96\xd5\x02\xe8\x8b\x63\xef\xd6\x46\x5b\x4b\x56\x9e\x2a\x04\x6e\
+\xc6\x53\xfa\xab\x88\xd5\x2c\x00\x37\xcf\x51\x28\xd3\x6a\x5e\x89\
+\x25\x08\x31\x55\x74\x8e\x41\xa9\x47\xcc\xa3\xa0\x39\x12\x7f\x32\
+\x1b\xd8\xce\xbd\x56\x1d\x5f\xb4\xbe\xa0\x5f\x7e\x46\x40\xbc\x7d\
+\x05\x56\x60\x2a\x22\x93\xdc\xe2\x71\xe8\xb6\x77\x0c\x58\xcb\xd7\
+\x59\x54\xa5\xb0\xc3\xa8\x99\xb3\xf8\x65\x74\xbc\x7a\x26\xa1\x1e\
+\x15\x46\x42\x73\x63\xc4\x60\xac\x94\xee\x78\x52\x3d\xc9\x9c\x90\
+\xf4\xd8\x82\x55\x90\xf7\x8f\xa5\x5a\xba\x8f\x22\xf8\x8a\x7b\xe7\
+\xf6\x99\xfc\xb5\xae\x82\x6a\xd1\x41\x08\x3c\x44\xec\xfc\xcd\xdf\
+\x4d\xf2\x87\x63\x76\x53\x23\xa5\x5d\xc1\x0c\x11\x14\xf6\x38\x8e\
+\x4d\x69\xbe\xd2\x89\xff\x00\xfc\xe2\x67\x0e\x8d\x51\xc3\x5c\x54\
+\x27\xde\xf1\xc1\xec\x3c\xce\x97\xbf\x68\x03\x56\x84\x64\x20\x27\
+\xa0\x9e\x0d\x4c\xfe\x1b\xfb\x2d\xe4\x82\xd5\x28\xee\x24\xd3\xcf\
+\x75\xc4\x16\xac\x08\xf2\x38\x1e\x96\xcc\x7d\x3a\x0b\x53\x3e\x1d\
+\x40\x3d\xa7\x9b\xe1\xe8\xc7\x15\xd1\x4d\xb8\x7e\x65\xb1\x65\x4d\
+\xe2\x55\x0d\xb9\x5d\x87\x62\x23\x3e\xd0\xee\x6d\x58\xef\xbf\xe2\
+\xe0\xfe\xb0\x46\x92\xb0\x62\x10\x5e\xdd\x8c\x5d\x4d\xc8\xdb\x6a\
+\x21\x06\xd7\xb5\xac\x65\xd2\x53\x4b\x50\xb4\xaa\xad\x9d\x88\x3d\
+\x0c\x6f\x8c\xea\xc5\x6c\x01\x52\x41\x90\xb8\x42\x40\xdd\x9b\x75\
+\x95\x54\xff\x00\x52\x9b\x5f\x15\x17\x6d\xfd\x44\xac\x46\x78\x9e\
+\x2d\x20\xe7\xeb\x26\xd6\xd2\x25\x52\xe2\xe5\x7a\xf7\x8f\xf8\x79\
+\x1b\xab\xd1\xa8\x40\xb8\xeb\xd0\xc5\xea\x59\x86\xd5\x38\x84\xf5\
+\x20\x50\xcb\x5d\x0e\x2d\xb8\x5e\x2e\xba\x5e\xa3\x82\x06\x09\x8e\
+\x6f\x2e\xa5\x58\x7c\xa5\x86\x3b\x44\x6a\xdc\xd3\xd5\xd4\x16\xfc\
+\x47\xf9\x9d\x23\x20\x16\xa7\x4c\x03\xc9\xc1\x9d\x1f\x83\x0f\x0e\
+\xa3\x17\xca\x2a\x13\x39\x4d\xe6\x18\xbd\xef\x3a\x9a\x5f\x27\xc3\
+\x75\x0e\x0e\x42\x84\x17\xf5\x97\x2f\x14\x73\xbe\x29\x41\x68\xea\
+\x88\x03\xc8\xc3\x72\x91\xd4\x48\x0a\x5f\xe5\x6f\xd6\x76\x95\x46\
+\xb3\x42\x69\x37\xfa\xd4\xb2\xb6\xea\x3b\x4e\x4f\x86\xc4\x95\x18\
+\xb7\x79\xae\x34\x58\x59\x53\x4e\x9d\xdb\x93\xc4\x10\x40\x4b\x11\
+\x93\x18\x77\x6e\x1d\x84\x16\xda\xcd\x6e\x0c\xd0\x55\xf0\x7a\x5e\
+\x2e\xa4\x63\xa8\x00\x8e\xe6\x74\x3e\x3d\x58\x16\x5d\x35\x3f\x92\
+\x90\xb1\xf7\x31\xbf\x06\xd3\xfd\x8f\x42\xfa\xd7\x17\x0a\xa5\x97\
+\xdc\xff\x00\xeb\xf9\x9c\x77\xac\xd5\x05\x4a\x87\x24\xb5\xcc\xe7\
+\xef\x2d\x6b\xc8\x8d\x89\x0f\x6b\xe0\x4c\x77\xf3\x90\xc2\xf3\xd5\
+\x0f\x58\x15\xbe\x7f\x79\xd1\x83\x74\x8a\x06\xa0\x55\x1c\x53\xf3\
+\x5b\xf8\xfd\xe2\x89\x62\x19\xcf\x2c\x61\x61\x68\xfa\xb1\x85\x6b\
+\x7c\xc2\xe1\x45\xcf\xbc\x88\x0e\x2c\xa3\xdc\xcd\xdd\x61\xb4\xe4\
+\x40\x0a\x77\xdc\x1e\xb9\xef\x08\xa7\xd2\xd2\x0d\xd8\x08\xb8\x87\
+\x4d\x18\x37\x04\x08\x29\xfc\x4a\xa8\x01\x9b\xe3\xb4\xa9\x7a\x90\
+\xbb\x4a\x69\x8f\x29\x98\xaa\x81\x80\x22\xc7\xd2\x50\xb4\xba\x8c\
+\xcc\xda\x64\x62\xae\x31\x83\x07\x20\xc7\x81\x91\x79\xe1\x46\xc3\
+\xc4\xac\x4a\xa1\xe0\x75\x6f\x69\x9d\x38\x52\xa3\x3d\xc8\x20\x28\
+\xf9\x98\xf0\x21\x0a\xb7\x1e\x15\x2c\x27\x7e\xa4\xcc\xa9\x53\x78\
+\xda\x00\x54\x1c\x28\x8a\x40\x01\x20\x03\x8e\xb2\x4a\x69\xb0\x5c\
+\x1e\x7d\x21\x92\x8a\x2e\x79\x93\xf8\x8b\xd3\x9e\xf3\x55\x81\x05\
+\x9b\xe4\x1c\x98\x62\x1a\xb5\x8f\x88\x57\x00\xe2\xf2\x6a\x95\x17\
+\x79\xdc\x09\xcf\x79\x95\xb5\x05\xbd\x07\x12\x7a\xad\xe5\xbd\xe6\
+\xa4\x16\x9f\xe2\x2e\x76\x8e\x3b\xc4\xbd\x4d\xc2\xe2\xd1\x6b\xd7\
+\xda\x60\x05\x81\x0a\x09\x9a\x1a\xc2\xc5\x6f\xeb\x12\xdb\x8d\xad\
+\x7b\xc6\xed\x03\x2c\x6e\x7b\x08\x24\xee\x04\x2e\x3f\xac\x50\x48\
+\xda\x3c\xc7\x3d\x84\xf0\x72\x46\x7a\x71\x0d\x10\x11\x9c\x4d\x14\
+\xe4\x18\x85\x86\x6f\x1b\x4c\x92\x79\x98\x94\x58\x8d\xd6\xc4\x75\
+\x2b\x53\xe9\x73\x0a\x4f\xa0\x1a\xd7\x26\xc2\x58\xb5\x05\x80\x22\
+\xfe\xbd\x64\x1b\x89\x60\x4c\x72\x30\x23\x06\x66\xc6\xa3\xa2\x54\
+\x96\xa7\xf8\xd1\xbf\x68\x9f\x88\xd2\xdb\xa8\x6b\x65\x7a\x11\x2a\
+\xd1\x23\x3e\xd7\x53\x95\x93\xb5\x50\xd5\x1b\xc4\x5c\x13\x31\x3d\
+\x68\x14\x7f\xd2\x3d\xe2\xaa\x3d\x81\x94\x14\x29\x4c\x95\xc8\x27\
+\x91\x24\xaa\xa7\x71\xb8\xc4\x60\xa9\x98\x96\x37\x96\xfc\x33\x75\
+\x30\xd5\x88\xc2\xe1\x7d\x4c\x5e\x97\x49\x56\xb1\x00\x79\x54\x72\
+\x4f\x48\xcd\x76\xa2\x95\x35\x1a\x7d\x3e\x55\x7f\x17\x73\xde\x6a\
+\xdd\xea\x09\xfd\x1d\x6a\xb6\xb8\x63\xb9\x4f\x33\x9f\xac\x05\x08\
+\x29\x6d\xa7\x82\x3a\xcc\x4a\xac\x1b\xcd\x90\x79\x86\x72\xb7\x56\
+\x0d\x4c\xf2\xa4\x4a\x4c\x54\x81\x54\xe1\xa9\x9d\x8d\xe9\x35\xea\
+\xb5\x45\x17\x55\x2d\xd7\x1c\xc8\xce\xe0\xd1\xa1\xee\xd7\x18\x61\
+\x35\x8c\xeb\x49\x4b\xd8\xa9\x43\xea\x2f\x09\x37\x5e\xea\x15\xbd\
+\x8c\x6a\x56\x5a\x96\x15\xe9\x82\x47\xe2\x10\x8a\xa0\x37\x5a\x65\
+\x87\x42\x0c\xb5\x3c\xae\xc1\x7e\x42\xbf\xf9\x42\x5a\xb7\x3e\x5b\
+\x93\xd3\x66\x20\x8a\xef\x7b\x0a\x63\xff\x00\xb6\x61\x7d\xa1\xed\
+\x6d\xa0\x7f\xe1\x88\x15\x14\xd7\x51\x53\xfd\x4a\x42\xdd\xd8\xda\
+\x37\xc0\xa4\x16\xcd\xa8\x07\xb8\x02\xf2\x55\xb1\x01\x9a\xa3\x2b\
+\x1f\xcd\x99\x84\x9d\x9e\x56\x53\xea\x4d\xa6\x70\xaa\x46\xd2\xd2\
+\xfc\x0c\x7f\xf2\x38\x8d\xfb\x66\xd2\x05\x1d\x8a\x3f\xda\xb3\x9f\
+\x71\xcb\x92\xd8\xe9\xc4\xd5\x37\x3e\x45\x22\xc3\xb4\xbf\x2b\x56\
+\xd4\xd5\x6a\x1b\x9a\xcc\x07\x5b\xb5\xa1\x51\xa8\xb5\x1c\x0b\xb3\
+\x37\xa0\x83\xa2\xf8\x7d\x5a\xc0\xd7\xae\x4d\x3a\x3d\x5a\xd9\x3e\
+\xd1\x8f\x5d\xa9\x93\x4f\x49\x41\xa9\xa5\xb2\xe6\xfb\x8c\x2e\x7c\
+\x2b\x53\x6d\x1f\x35\x67\x00\x76\xbf\x9b\xf4\x10\xb5\x1a\xbd\x3d\
+\x65\x0b\xe1\xef\x03\x8d\xd3\x8e\x43\x8b\x96\x46\x76\x84\xa6\xab\
+\x53\xb1\x16\xe4\x7b\x4c\xfe\x4e\xba\x95\x16\x88\x5d\xcb\xa7\xa6\
+\x40\x19\x04\xe6\x68\x34\x75\x5a\x77\xa7\x4c\x1a\x4f\x4c\xee\x17\
+\x33\x93\x77\x24\x29\x04\xf7\x9d\x9d\x0e\x96\x9d\x26\x55\xa8\xec\
+\x6a\xba\x65\x40\xc0\x06\x16\x62\x9d\xa4\xa8\xe6\x9d\x40\x5d\x6c\
+\xc4\x5b\xeb\xda\x1e\xac\x1a\x88\xac\x45\x8a\x83\xfc\x4a\x3e\x3b\
+\x4a\xf4\xa9\x37\x2e\xbd\x3b\xf1\x14\xed\xe2\xfc\x27\x72\x9b\x54\
+\xa4\xc0\x93\xd7\x22\x52\xfd\x2e\x7a\x59\xdc\x23\x77\x11\x1a\x95\
+\xdf\x5e\xaa\x1f\x99\x5d\xad\xea\x2f\x1c\x87\x73\xa5\x65\xb0\xc8\
+\xdc\x3b\x5e\x16\xac\x03\xa8\xa8\xe3\x0e\xac\x47\xef\x37\x3a\xac\
+\xa1\x29\xd5\x4c\xe9\x12\x29\x7c\x25\x49\xe2\xa5\x5f\xd8\x09\xce\
+\x41\x9b\xa1\xc9\x37\xb1\x97\xfc\x51\xd5\x34\x7a\x4a\x64\x64\xa9\
+\x63\x6f\x53\x1b\xdd\x82\x25\x42\xd4\x35\x17\x42\x78\xba\x91\x29\
+\xd5\x69\x69\xea\x68\x1d\x46\x96\xdb\xff\x00\xee\x27\x51\x25\xd3\
+\xd4\x0e\xbe\x11\xf2\x91\xc3\x7f\x48\xaa\x3a\x8a\xba\x3d\x4e\xe5\
+\xb8\x20\xda\xc7\xac\xb2\xa4\xcd\x74\x27\x71\xcf\x68\x5a\x4d\x39\
+\xd4\x6a\x29\xd1\x51\x96\x39\xf6\x9d\x4d\x55\x0a\x5f\x12\xa2\x75\
+\x3a\x4b\x0a\xc3\xe7\xa6\x39\xf7\x8c\xff\x00\x0a\xe9\xed\x5e\xae\
+\xaa\xa0\xb7\x87\xe5\x17\xef\x2b\xcb\xa5\x9d\x9d\xf1\xfa\xdf\x64\
+\xd1\x26\x89\x05\xb1\x76\x02\x7c\xfd\x83\x50\x26\xdd\x65\xbf\x16\
+\xd4\x8d\x46\xa1\xea\x13\x82\x4d\xbd\xba\x48\xc9\x02\x81\x17\x37\
+\x26\x3c\x66\x45\xca\xed\x48\xc2\xf7\x16\x99\x51\x49\x7e\x3a\x46\
+\x1c\xc7\x84\xbb\xa3\x74\xb5\xcf\xd2\x6d\x94\xac\xa3\xc5\x5a\x63\
+\xa6\x0c\xda\xc2\xed\xb6\xfc\x1b\x9f\x78\xdd\x2d\x3d\xfa\x8d\xc7\
+\xdc\xc0\x2a\xcc\xf6\xb1\x26\xfc\x49\x12\xaa\x2e\x33\x98\x48\x77\
+\x1e\x23\x42\x2a\xb5\xaa\x13\xea\x04\xcb\x81\xe5\x45\xb0\xef\x20\
+\x25\xa7\xf9\x88\x00\x7e\xb1\xa9\x82\x02\xad\x87\x73\x14\x39\xb6\
+\x48\x8e\x54\x2c\x6c\x0f\xb0\x81\x36\x90\x3b\xb0\x6f\x2f\xd3\x25\
+\x4a\x8c\x15\x14\x98\xba\x1a\x5a\x74\xc0\x3a\x82\x41\xe7\x60\xf9\
+\xbf\xf5\x28\xf1\x8b\x0d\x8a\x02\x20\xfc\x2b\xfd\x7b\xcc\x5a\xd4\
+\x38\x0a\x34\x2e\x6e\x2a\xd4\xe9\xf9\x47\xf7\x92\xd7\x66\xa8\x4b\
+\xb1\xbb\x77\x30\xb2\xc4\x28\x5c\x99\xbe\x15\x40\x2f\xb0\xfb\x9c\
+\x09\x92\x99\x94\x05\xbb\x60\x7e\xe6\x21\xdb\x7f\x95\x54\xda\x51\
+\x50\x28\x6b\xd5\xaa\xb7\xec\xb9\x89\x2f\x4d\x72\x94\xaf\xff\x00\
+\x91\xfe\x82\x6e\x02\x59\x80\x16\x5b\xde\x54\xb4\xcd\x7d\x3a\x2d\
+\x21\xe6\x5e\x41\x89\x7a\xb5\x00\xdc\x81\x55\x7d\x14\x45\x33\xbb\
+\x1f\x33\x13\xee\x63\xe8\x35\xa8\x54\x1f\x3a\xaa\xdb\xa9\x31\x2d\
+\x4a\x91\x27\x75\x6f\xa0\x52\x60\xad\x42\xbf\x2b\x1b\xcd\x1a\x9a\
+\xa3\xf1\x5f\xdc\x4b\xb4\x35\x5a\x42\xe4\x0b\x80\x3f\x14\x10\xa5\
+\x89\xbb\x00\x2d\xc0\x9e\x5a\xee\x41\x27\x69\xff\x00\xeb\x09\x2a\
+\xb5\xc5\x95\x7f\x49\x20\x9a\x20\x8c\x11\x7b\x4f\x53\xd2\x35\xb2\
+\x40\xf7\x9e\x7a\x8f\x9c\xfe\x91\x7b\x98\xf2\xc7\xf5\x88\x53\xf6\
+\x74\x18\x7a\xaa\x4f\x4b\x41\xa8\x15\x0d\x82\x12\x7b\x98\x80\x18\
+\xf5\x85\xb8\xde\xc4\xc0\xb1\x99\xcf\x37\xb4\x3a\x67\x37\x81\x76\
+\x53\x63\x98\xda\x6e\x30\x0a\x83\xf4\x88\x12\xf9\x88\x18\x10\xd0\
+\x30\x36\xe8\x63\x29\x53\x46\x00\x85\x6b\xc7\x2d\x13\x83\xb5\x87\
+\x6b\x89\x9b\x5a\xc7\x43\xe0\xcc\x5b\xc5\x07\xa2\x99\xcc\xa8\xd9\
+\x6b\xf7\x9d\x4f\x85\x52\x74\x4a\xef\x6f\xc1\x61\x39\xba\x8d\x3d\
+\x6d\xe6\xcb\xd6\x62\x7a\xd5\xf1\xea\x35\x5e\x9a\x9d\xac\x67\x9f\
+\x58\xc1\x2e\x51\x6f\xde\xd2\x77\x15\x51\x72\xa7\x98\x8a\xb5\x2e\
+\xa2\xf3\x78\xce\x9b\x57\x5d\x54\xdd\x2f\x65\xf4\x93\x3d\x53\xe8\
+\x60\x54\x6c\xde\x2f\x71\x26\x6a\x46\x74\xd0\xec\xdc\x09\xe5\xac\
+\xca\x79\x87\x44\x2f\x86\xc1\x8d\x98\xf1\x13\x50\x10\xd6\x92\x7a\
+\x9d\x46\xe0\x90\x7d\xe3\x91\x50\xfc\xd4\xca\x9e\xe2\x0d\x3a\x24\
+\xad\xe5\x14\x9f\xc2\xc0\x20\x8f\x59\x55\x04\xb4\xe8\xb7\x0f\xe6\
+\xfd\x0c\x2f\x0a\xa2\x35\xd0\x5e\xdd\x44\x2a\x75\x34\x8c\x3e\xf2\
+\x91\x07\xfd\xa6\x55\x4e\xa7\xc3\xd1\x6f\x7a\xd7\xf4\x02\x66\xdb\
+\x1a\x48\x37\xb1\x00\xd8\xde\x7a\x8d\x12\xd5\x2c\x15\xac\x0f\xeb\
+\x2f\xff\x00\xaa\x68\xa9\xdc\x26\x8c\xd5\xed\xe2\x1b\x7f\x13\xda\
+\x9f\x8b\x56\xa7\x4d\x3c\x0a\x74\xe8\x96\x17\xf2\xac\x36\xff\x00\
+\x16\x42\x29\xfc\x2f\x5b\x5c\x97\xf0\xc8\x04\xda\xe7\x11\x9f\xf4\
+\xca\x14\x81\xfb\x66\xb6\x8a\x11\xd0\x35\xcf\xed\x24\xab\x5f\x57\
+\x5e\xe6\xa5\x6a\x87\xaf\x99\xb1\x27\x34\xd4\xb5\x8b\x16\x27\xb4\
+\x72\xff\x00\x57\x4e\xa8\x6f\x83\x51\xda\x01\xa9\x54\xf5\x21\x6d\
+\x2d\x3a\x8d\x26\x97\x4e\x2b\xb6\x97\x61\x23\xee\xe9\xb1\xb9\x3e\
+\xb6\x9c\xda\x5a\x6a\x7a\x0a\x43\x53\xa8\x4d\xf5\x88\xbd\x2a\x47\
+\xa7\xa9\x90\xd7\xad\x5a\xbb\xb5\x4a\xcf\x73\x7e\xf3\x3f\x9d\x3b\
+\x8e\xe8\xf8\xf3\x94\xb1\xd3\xd2\x1d\x01\x6e\x82\x32\x97\xc5\x2a\
+\xd4\xbf\x86\x34\xc6\xc2\xe6\xe2\x7c\xb9\xbe\xe0\x37\x2d\xa3\x03\
+\x3a\x9f\x29\xfa\x89\x7f\xc7\x17\xea\xbe\xb2\x9e\xaa\xab\x26\xf7\
+\xd3\x52\x70\x78\x21\xad\xfd\x26\x0d\x4e\x98\x3e\xda\xba\x54\x5e\
+\xbe\x56\x92\x7c\x3f\x59\x46\xb6\x89\x52\xa8\xd9\x54\x62\xfc\x03\
+\xeb\x0a\xb5\x1a\xea\xd7\xa4\xeb\x50\x0c\xdb\xad\xa7\x3c\xed\xad\
+\x58\x4e\x88\x91\xfe\x58\x37\x62\x07\x1e\xf0\x75\x3f\x12\xda\xcf\
+\x4e\x8d\x0d\xae\x2f\xe6\x23\xb4\x9e\x93\x32\xa7\x88\xab\x62\x30\
+\x7a\x5a\x43\xf1\x5d\x6f\x88\x01\xa1\xe5\x16\xb3\xfa\xc6\x71\xda\
+\xad\xc5\x95\xf5\x25\xc5\x3a\xee\x77\xad\x41\xb1\xbf\xda\xc3\x98\
+\xcd\x00\x35\xde\xb5\x16\x5b\x78\xb4\x88\x1e\xe0\xe2\x73\xfe\x10\
+\x4e\xa7\x4d\xa8\xd2\x90\x06\x43\x21\xff\x00\x74\xaf\xe1\x95\xd9\
+\x6a\x52\xa9\xb4\x87\xa6\xe1\x58\x77\xbf\xff\x00\x91\xb3\x3a\x12\
+\xb9\x65\x8d\x36\x5b\x1c\xf5\x1d\xf3\x28\xd7\x2e\xcd\x5b\xb8\x20\
+\x82\x6f\x03\xe3\xc8\x28\xeb\x6b\x6d\x18\x5a\xac\x00\xfa\xc3\xd5\
+\x55\x0e\x56\xa8\xcd\xd5\x6e\x3d\xc7\xff\x00\xb3\x5f\xe8\x4c\xf4\
+\x80\x75\xa8\x96\xd8\x7f\x69\xbf\xe2\x12\x57\x57\x4e\x9d\xed\xb2\
+\x92\x8f\xda\x33\x4e\x40\x71\x6b\x32\x1e\x91\x9f\xe2\x2a\x05\xb5\
+\x8e\xe0\x8b\x58\x0f\xda\x52\xf6\xbe\x38\xf4\xea\x5b\x70\x3c\xda\
+\x31\x6a\x25\x61\xb6\xb9\xb3\x7e\x16\x89\x28\xcb\xba\xe2\x2a\xa7\
+\x94\x0f\xeb\x3a\x63\x07\xa5\x4d\x46\x87\x50\x1d\x58\xab\x0e\x08\
+\xe0\x89\xf5\xbe\x77\xf8\x46\xe4\x5a\x74\xeb\x56\x4b\x91\xc0\xdc\
+\xc0\x7e\xf6\x9f\x21\xa5\xae\xbb\x92\x85\x61\xbd\x09\x1c\xf4\x9f\
+\x43\xfe\x23\x6a\x87\x4f\xa5\x14\x01\xb2\x8d\xe4\x2f\x2b\x7e\x05\
+\xbd\xad\x39\xf3\x9d\xc6\xb8\xdc\x8e\x16\xb6\x9b\x52\xa9\xb1\xd4\
+\xab\x0c\x10\x60\x85\x1f\x66\x6b\xe7\x22\x5b\x5f\xe2\x2b\x55\x85\
+\x3d\x6d\x10\xe0\x63\x70\xc3\x09\x9f\x65\xa3\x55\x09\xd3\x56\x0c\
+\x18\x7c\xad\x83\x37\xbf\xd1\x9f\xc7\x32\xd7\xe3\xe9\x2b\xa6\x2d\
+\xa7\x2d\xfe\xdb\x1f\xd6\x31\x7e\x1b\xab\xb9\x1e\x1f\xb1\xbc\x23\
+\xa7\xab\x4b\x4b\x55\x6a\x27\x04\x70\x65\xaa\x44\xa4\x1a\x74\x55\
+\x94\xd8\xb3\x5e\xfe\x82\x0b\x56\xaa\xc3\x6e\xec\x1e\x6d\x8b\xc6\
+\x56\x04\x78\x63\xfd\xa3\x06\x31\x28\xd8\x5d\x46\x7d\x7a\x48\x25\
+\x5a\x63\x77\x9a\x0d\x52\x00\x5b\x09\x6f\xd9\x6a\xd4\x1e\x4a\x64\
+\x0f\xcc\xf8\x1f\xbc\xe9\x51\xf8\x32\xe9\xb4\xeb\xaa\xd5\xde\xb1\
+\x71\x75\x14\xd4\x95\x1e\xe6\x57\x94\x87\x2b\x95\xa3\xd2\xb5\x54\
+\xf1\x5c\x8a\x74\xff\x00\x3b\x75\xf6\xef\x2f\xa5\x4d\x95\x7f\xca\
+\xd2\x65\x5e\xb5\x5f\x04\xfb\x76\x8c\x3a\x95\x4a\x85\x97\x46\x5c\
+\x81\x61\xbe\xe2\xdf\xa7\x1f\x48\x93\xa9\xd4\xb3\x5c\x01\x4e\xff\
+\x00\x97\xfb\x99\x9e\xe9\xea\x28\xa1\xa4\x46\x24\xbd\x66\xb7\x5d\
+\x88\x4f\xee\x6c\x25\x28\x9a\x6a\x43\xe4\x07\xd5\xea\x0f\xe0\x4e\
+\x76\xfa\xd5\x33\x55\x99\xcf\xab\x5e\x35\x0e\x00\xb5\xa6\x6c\x31\
+\x6f\xda\x68\x2d\xf6\xb1\x18\xe1\x12\xdf\xda\x0d\x13\x46\xb5\x4f\
+\x2d\x03\xea\x4b\x19\x23\x2f\x9b\xd6\x75\x7e\x09\x4d\x48\x62\x72\
+\x57\x30\xbd\x43\x3b\x73\xb5\xaf\x4e\x86\xa0\xd3\xfb\x35\x30\x47\
+\x52\xc4\x9f\xe6\x23\xed\x34\x8e\x02\xec\xf6\x02\xd0\xbe\x20\xcd\
+\x53\x52\xec\xc2\xd9\xb4\x85\x97\x69\xb8\x17\x9b\x93\x59\xb5\x56\
+\xe2\xc4\x8a\x75\x03\x7a\x5e\xd2\x5a\xb5\xab\xa1\x20\xbb\xaf\xa1\
+\x82\x2f\x7c\x73\x1a\x6a\x06\xa5\xb6\xa0\xdc\xa3\x1e\xa2\x39\x89\
+\x3b\x57\xa8\xc6\xd7\x46\xf7\x51\x37\x78\xb8\x2d\x4a\x9f\xe9\x69\
+\xea\xb4\x36\xae\xe4\x3b\x90\xf5\x10\x6c\x7b\xe2\x21\x42\xb6\x90\
+\x53\x26\xa6\x9d\x8d\xcf\x2b\x52\xdf\xc8\x8d\x46\xf8\x71\xb7\xdc\
+\xea\x41\xe9\xe7\x1f\xda\x4b\x53\xfd\x3a\x61\x86\x0e\x63\x68\x85\
+\x15\x17\x3c\x19\x62\x15\x4f\xb0\x80\x71\x5f\xea\xc3\xfb\x45\x28\
+\xd0\x13\x7f\xbf\xfa\x01\x37\xe2\x08\x16\xab\xed\x18\x26\xe2\x21\
+\x14\x81\x91\x28\x96\x21\xf8\x70\xfc\x1a\x8f\xd4\x4d\x73\xf0\xee\
+\x94\xeb\x1f\xa8\x92\x10\x07\x1c\xcc\xfa\x4b\x16\xa9\x35\x34\x83\
+\x2b\x41\xcf\xfe\x4d\x09\x75\x2a\xb9\xa7\xa7\xa6\x07\x7b\x5e\x4b\
+\x68\x4b\x71\x83\xc4\xb1\x6a\xfa\x7a\xca\xa4\x00\x08\x5f\x61\x3c\
+\x6b\xd5\x26\xc5\xda\xd7\xef\x24\x5b\x10\x19\x2f\x8e\x93\x69\xb8\
+\x2e\x2e\x7e\x90\xfc\xc3\xae\xdf\xc3\xcb\x7f\xd3\x75\x35\x2f\xc5\
+\xa7\x33\x56\xc7\x7e\x18\xe4\x4e\x96\x9a\xcb\xf0\x2d\x4b\xde\xc3\
+\x70\x9c\x8a\xcd\xbc\xd8\x1e\x00\x98\xe3\xe9\xbe\x16\xd5\xaa\x04\
+\xc3\x9f\xd6\x26\xa5\x5a\x8c\xa3\x86\x37\xed\x18\xc1\x48\x00\x70\
+\x73\x0e\x8d\x55\xa1\x40\x8f\x0b\xf1\x58\x90\x73\x3a\x32\x99\xc1\
+\x03\xce\xab\x7e\xd6\x99\xb0\x58\x12\x96\xfa\xc7\x1d\x45\x12\x4e\
+\xf4\x60\x3a\x5b\x33\x05\x5a\x06\xe4\x60\xfa\x89\x02\x8e\xdf\xca\
+\x62\x6a\x5a\xf8\x32\x8f\x2b\x0b\x5c\x40\xa9\x44\xd8\x91\x9b\x45\
+\x1e\xac\x54\x58\x19\xa3\x63\x72\xb9\xee\x0c\x16\xc1\x83\x92\x64\
+\x4d\x4a\x6a\xc7\x0c\x47\xb8\x85\xe1\xa5\xff\x00\xd4\x59\xb4\xa9\
+\x54\xf0\xcf\xe1\x07\xa9\xc4\xf1\xd8\x08\xdd\x53\x75\xba\x08\x22\
+\xfc\x3a\x5b\xf2\x4b\x7e\xd2\xbd\x53\x5d\xd4\x00\x00\x0a\x07\x1e\
+\x92\x62\xe9\x7c\x0f\xd7\x31\xce\xde\x35\x30\xc0\xdd\x94\x5a\xc6\
+\x15\x15\xe1\x96\x24\xdc\x9e\xd3\xa1\xa7\xa6\x9a\x1d\x3f\xda\x6b\
+\x28\x6a\xa7\x34\xe9\xff\x00\x53\x17\xa3\x41\x41\x3e\xd5\xa8\xc8\
+\x07\xc8\x9f\x98\xc5\xea\xab\x3e\xa5\xda\xa3\x9c\x9f\xda\x17\xbe\
+\x8f\x88\xf5\x55\x2a\x57\xac\xd5\x6a\xbd\xd8\x9c\x98\x86\xb7\x56\
+\x16\x85\x58\xde\xc0\xf1\x12\xd9\xc4\xdc\x8c\xd6\xda\xe7\x0c\x23\
+\xb4\xd4\xea\xbb\xaa\xd3\x17\x24\xe2\x2e\x9d\x32\x5b\x22\xfe\x82\
+\x74\x74\x48\x52\xb2\xb9\x21\x76\x82\x6c\x3d\xa1\x6a\x90\xdf\x01\
+\x95\x76\xd4\x2a\x48\xfc\xa6\x5b\xa0\xd5\x94\xb5\x13\x44\x95\xe2\
+\xe3\x91\xeb\x39\xca\xa0\x9d\xc8\xa4\x9b\xf2\x67\x43\xc5\xfb\x35\
+\x1f\x16\xab\x03\x51\x6d\xb5\x07\x33\x9d\x6e\x1f\xf1\x5f\x14\xd3\
+\x1a\x6a\x24\x03\x7f\x3b\x13\x6b\x89\xce\x4d\x13\x28\xb3\xd4\xa4\
+\x14\x8e\x0b\x44\xb3\xbd\x5d\xec\xcc\x6e\xd7\xcd\xfb\xc1\x24\x05\
+\xa7\x7b\xde\xdc\xfb\x46\x4c\x98\xad\x74\x34\x3a\x5a\x74\x2a\x17\
+\xfb\x5a\x05\x20\x03\xb7\x3d\x71\x3b\x7a\x43\xa5\x02\xad\x7d\x38\
+\x0d\x54\xe4\x92\x30\x0d\xb9\xfd\x67\xcc\x53\xba\x12\xa0\x60\x9c\
+\x4b\x2b\x55\x14\x69\xa5\x6b\xd8\x93\x70\x2f\xd4\x73\xf4\x99\xe5\
+\x34\xcb\x89\xb5\xf7\xaa\x8e\xec\x6e\xcc\x03\xfd\x7a\xc5\xa9\x05\
+\x68\x11\xf8\x94\xaf\xd4\x1c\x7f\x36\x94\xd5\x55\xbe\xf5\xf9\x41\
+\xb7\xff\x00\x56\xe2\x47\x51\x48\xd3\xd4\x41\x86\xa4\xfb\x87\xb7\
+\x07\xfa\x4d\x40\xf5\x37\xf0\xb5\x00\x26\x51\xbc\xc0\x77\xf6\x9d\
+\x7f\x89\x9f\xf3\x65\xc7\x0e\x8a\x7f\x6e\xd3\x87\x52\xa6\xd0\x2a\
+\x15\x06\x9b\x1c\x8b\xfc\xad\xd6\xd3\xa7\xae\xd4\x78\x9a\x0d\x2e\
+\xad\x46\x02\xf8\x6d\x63\xc5\xb8\x95\x9d\xa9\x49\x6a\x14\xea\x12\
+\x11\xb6\x9b\x70\x67\x3b\x53\xa2\x75\x72\x1d\x0d\xbb\x81\x79\xd3\
+\x73\x4e\xaa\x25\x45\x19\x38\x22\xf6\xfd\x24\xef\x55\xc3\x91\x4e\
+\xa9\x16\xc9\x53\x19\x68\xb1\xce\xd3\xe9\x9a\xa6\xaa\x92\x29\xbe\
+\xe6\x02\x75\xbf\xc4\x4d\x53\xfe\xa7\x55\xd3\x72\xec\x70\xa2\xdd\
+\xac\x04\x4d\x1d\x53\xd0\xd4\xd3\xa9\x51\x29\xb5\x98\x1b\x95\xbf\
+\x1e\xb3\xb9\xf1\x23\x4c\x6b\xaa\x25\x81\x0e\xbe\x20\x36\xb8\x3f\
+\xf2\xd0\xe5\x7b\x32\x74\xf9\xd6\xaa\x95\xad\xf6\x8d\x30\x6b\x8b\
+\xee\x4c\x19\xb4\x68\xd0\x15\x03\xd1\xd4\x94\xb1\xe2\xa2\x91\xfc\
+\x4e\xba\x36\x9e\xa5\x35\x76\xd1\xd3\x20\x9b\x5b\x22\xf1\x1f\x1d\
+\xa5\xa3\xa0\x29\x0a\x29\xe1\xd6\xb5\xdd\x03\x5c\x2f\x68\xce\x5d\
+\xe0\xcf\xa5\x8a\x1a\xe5\xc5\x1a\xa9\x51\x4f\xca\x05\x41\xfd\x4c\
+\x05\x5d\x42\xd6\xa9\xa7\xd4\xa9\x42\x56\xfb\x67\x91\xfc\x34\xb3\
+\xed\x35\x6d\x74\x07\x20\x7b\xc9\x92\xab\xb6\xa7\xc4\xa8\xe4\xb7\
+\x52\x65\xda\x38\xa5\x14\xac\x1e\xb8\x38\x51\x60\x23\x8e\xae\x9a\
+\xd3\xdb\x49\x52\x99\xbd\xf7\x01\x76\xfd\xe2\xb5\xc8\xa7\x65\x5b\
+\x8c\x8b\x7e\x91\x5a\x6a\x41\xea\x79\xc8\x14\xc0\xdc\x4f\xa4\xb2\
+\x62\x31\xc2\x90\x35\x15\xea\x3b\xdf\xe5\x0c\x72\xdf\xfa\x93\x9d\
+\x46\xa0\xbb\x1a\x75\xdd\x7d\x15\xac\x2d\x17\xab\xa8\x6b\x55\x27\
+\x80\x30\xa0\x70\x04\x5a\x9b\x63\x9f\xac\xd4\x83\x55\xd3\xd5\x6a\
+\x85\x97\xed\x35\x71\xc5\xd8\xc6\x2e\xa7\x52\x72\x35\x0e\x4f\x63\
+\x25\xa4\xc6\xe2\xc4\x0b\x77\x95\x53\xce\x08\x10\xb2\x15\x34\x75\
+\x3a\x93\xcb\x06\xb6\x32\x01\x8f\x15\x9e\xd6\x64\xa6\x7d\xd0\x49\
+\xd1\x06\xdc\x7e\x92\x84\x51\xb6\xf7\x17\x98\xa6\x34\xd4\x53\x96\
+\xd3\xa1\xef\x6b\x89\x57\xc2\xeb\x51\x4a\xa0\x04\x65\xbf\xfb\xae\
+\x24\x7b\x7e\xb3\x57\xca\x43\x2d\xaf\x0b\x34\x8b\xe2\x5a\x75\x4a\
+\xec\x37\x81\x73\x7c\x89\x0b\xd1\x75\x05\xad\x71\xdc\x66\x76\x35\
+\xaa\x35\x5a\x25\xac\x07\xde\x53\xc3\x5b\xb4\xe4\x97\x65\x37\x42\
+\x41\xeb\x1e\x35\x54\x8c\x97\x38\xc4\x1b\x6d\x6f\xf6\x9c\x19\x43\
+\x3a\xb1\xf3\x0d\xa7\xb8\x8a\xac\x85\x73\xc8\x3d\x44\xdc\xac\x05\
+\x77\x52\x7c\x64\x1f\xdc\x4f\x3d\x35\x23\xc4\xa6\x3c\xbd\x47\x69\
+\xaa\x37\xa5\xba\x8e\x20\xd3\x72\x86\xe3\xac\x53\xda\x85\x1b\x94\
+\x7e\x55\x1d\x66\x97\xc8\xb0\xb1\xe6\xd1\x9a\x94\xbb\x07\x51\x82\
+\x05\xc7\x68\xa5\xdc\x09\xcd\xba\x4a\x23\xb5\x20\x54\xa5\xb8\x9e\
+\x01\x91\xa5\xed\x6b\x99\x52\xe7\x4f\x51\x7f\x12\xc9\x10\x62\x51\
+\x18\xac\x7a\xe6\x35\x54\x15\xb9\x58\xa5\x19\xcc\xa1\x6d\x6f\x49\
+\x54\x1f\x0d\x2f\x05\xb6\x64\x01\x98\x4e\xc0\x45\x6e\x17\x26\x49\
+\x82\xca\xc0\xa9\x30\xf0\x4e\xf4\xc6\x72\x22\xef\xeb\x78\x54\x81\
+\xb8\x63\x85\xeb\x24\xed\x23\x01\xfe\x1a\xab\x73\xcd\x41\xfd\x27\
+\x19\x98\x5c\xfa\xf4\x9d\x1a\xe7\xff\x00\x82\x00\x0b\x06\xab\x70\
+\x3d\x27\x26\xc4\x9d\xd6\x99\xe3\x3d\x34\x42\xe1\x07\xbc\x63\x25\
+\xe8\x31\x3d\x48\x30\x0f\x20\x46\x33\x0f\x08\x8b\x75\x9a\x09\x8a\
+\x40\xb7\xa4\x6f\x59\xa5\x62\x30\xa0\x2e\x63\x40\x36\x9e\x0b\x98\
+\xf5\x41\xb7\x3c\xc8\xba\x55\x7e\x15\xe1\x53\xf1\x2a\xb8\x03\xb0\
+\xe6\x44\xdb\x17\xfd\x3d\xaa\x3b\xf2\x63\xc5\x4a\xd5\xc1\x17\x3b\
+\x78\xdc\x78\x92\x57\x75\x46\x2a\xa0\x39\x1d\x4f\xf6\x98\x9b\xf4\
+\xd6\x6e\x3b\xae\xcf\xba\x2d\x91\xaf\x70\x2e\x3d\x26\x78\xce\x70\
+\x6e\x3d\x85\xa6\x87\x7b\xe2\xe6\x68\x16\xc0\x92\x31\x2d\xd1\x52\
+\x37\xf1\x2a\x02\x11\x79\xf5\x85\xa5\xd2\xbd\x66\x04\x10\xa7\xb4\
+\x7e\xa7\x72\x11\x4c\x92\x40\xe9\x33\x6f\xc3\x22\x7a\xd5\x8e\xa1\
+\xfc\xeb\xb4\x0f\x94\x76\x98\xb4\x6a\x03\x70\x09\x11\xa0\x39\x37\
+\xb8\x55\xee\x61\x8a\x81\x07\x94\x93\xea\x65\xab\x11\xbe\x98\xb3\
+\x92\x70\x3a\xfa\x41\xb6\x9a\x91\xf2\xa8\xa8\xdd\x49\xe2\x50\xf5\
+\x55\xfc\x8f\x80\x64\xe6\x88\x53\x75\xf3\x00\x63\x3f\xd0\x3a\x75\
+\x18\x9b\x04\x50\x3b\x2c\xa1\x15\x42\x33\x13\xb7\xa4\x9f\x6b\x5c\
+\x58\xed\xf4\x86\x9e\x53\x66\xb9\xb7\xef\x0a\x4e\xa4\xc5\x48\xda\
+\x36\x91\xc4\x46\xa4\x35\x5a\x9e\x66\xc0\xe6\x55\x46\xfb\x19\xc8\
+\xf6\x88\xa8\x1c\x0b\x6d\xf7\xf5\x84\xf5\x02\x90\x02\xc2\xfe\x90\
+\xd9\x41\x41\xe8\x4d\xa0\x2d\xc9\xb6\xdc\xdf\x12\xdf\xb2\x55\x28\
+\x2c\x00\x24\x71\x1b\x54\x4e\x83\xee\xc7\x5b\x75\x8d\xac\xc2\xa5\
+\x91\xb0\x07\x18\x8a\x0a\xc8\x76\xba\xd8\x8e\x90\x99\xe9\x2b\x10\
+\x72\xdd\x20\x55\x69\x69\x33\xd1\x08\x3c\xc3\x69\x42\x7d\x3a\x1f\
+\xa4\x88\xdb\xc4\x05\xc8\xcf\x95\xff\x00\x83\x1d\xa7\xd5\x35\x0a\
+\xaa\xd4\xc0\x00\xf4\xef\x27\xd5\x3d\xdd\xf6\xad\x83\x1b\x89\x4f\
+\x55\x2f\x65\x0a\x3b\xa8\xd4\x7e\x7c\xae\x2d\x7b\xf6\x22\x57\xf0\
+\xf5\xa7\xe1\x56\xf8\x79\xf3\xef\x1b\xe9\x93\xc1\x23\xb4\xe7\x57\
+\x53\x5a\x96\xe1\x97\x53\x63\x6e\xbd\x8c\xf6\x8b\x51\xf6\x7a\x89\
+\xe2\x1c\xa3\x5d\x6d\xc8\x9a\xb3\xa1\xbd\xb7\xc4\xa9\x51\xb6\xde\
+\xc1\x71\xd8\x2c\x36\xf3\x0d\xa8\xc1\xd8\x2d\xaf\xde\x37\xe3\x54\
+\x7e\xf1\x6b\x52\x3f\x73\x5f\xce\x2d\xc5\xfa\xc8\xd5\xd6\x90\xf2\
+\xe5\xe5\x3b\x83\xc3\x45\x3f\xbb\x1b\xae\x02\x9b\xe7\xa9\x9d\x9d\
+\x7b\x87\xd2\x68\xab\xde\xf7\x4d\xac\x3d\xa7\x09\xaa\xee\xb3\x31\
+\xb9\xe6\xd3\xb3\xa2\x74\xab\xf0\x0a\x8d\x50\x16\xf0\x6a\x6f\x17\
+\xeb\x7e\x9e\xd0\xe5\xf2\x98\x1a\xfa\x93\xa7\x0b\x58\x0f\xbc\x71\
+\xe4\x1f\x97\xd6\x41\x72\x0b\x6a\x2a\xf9\xbf\x2d\xfa\x98\x02\xa3\
+\xd7\x66\x15\x0d\xd9\xcd\xc1\x3d\x0c\x73\x80\x54\x52\xe0\xa8\xc7\
+\xbc\xa4\xc4\x92\xe5\xdf\x79\x27\x75\xf9\x8d\x71\xe2\xa7\x88\xb8\
+\x61\xf3\x01\xfc\xcc\xda\x43\x01\xde\x36\x98\xd8\x77\x0f\xd3\xfa\
+\x4d\x50\xa7\x35\x74\x23\x9f\x2e\x62\x2a\x59\x34\x66\xd6\xdd\x50\
+\xdb\xe8\x25\x7a\x6d\x83\x72\x8b\x94\xa8\x2c\x2d\xf8\x4c\x97\x5e\
+\x36\x8a\x54\xec\x6e\x16\xff\x00\xbc\xcc\xf7\x0b\x9c\x41\x53\x83\
+\x36\xd7\x1b\xad\x6b\x47\x81\x65\x69\xbb\x76\xd3\x18\xb5\xf9\x9b\
+\x18\x4d\x30\x6f\x9e\x25\xb4\x14\x6d\xe6\x22\x90\x52\x7a\xdc\x4a\
+\x11\x80\xe9\x33\x54\x53\x4e\xdd\x31\x1c\x8c\x0e\x36\xde\xdd\x64\
+\xc9\x53\xa7\xe9\x08\x54\xb1\x98\x68\xe2\x73\x8c\x4f\x02\x49\xce\
+\x62\xf7\xdf\xa9\xbc\xf2\xb8\xda\x4d\xfd\x24\x75\x67\xc3\xeb\xaa\
+\x57\xf0\xdc\xfd\xdb\xe0\xde\x47\xf1\x0a\x27\x4d\xa8\x7a\x47\x20\
+\x64\x7a\x88\xa7\x39\xc4\xae\xb9\xfb\x67\xc3\x45\x4e\x6a\xd0\xe7\
+\xd4\x43\x32\xea\xf5\xca\xac\x46\xde\xf1\x4b\x55\x97\xd4\x1e\x41\
+\xeb\x0c\x82\x41\x07\x9e\x91\x6c\x3c\xbe\xa2\x75\x60\xe4\x0a\x4d\
+\xd0\x9b\xf6\x9e\x64\x05\x83\x01\xef\x13\x4c\xdb\x23\x99\x52\x30\
+\x66\xb3\x73\xd6\x17\xa4\x33\xe5\x60\xd6\xc1\x5c\xc0\xac\x80\x58\
+\xad\xb6\x9e\xf1\xf5\x05\xa8\x02\x7f\x09\xfd\xa4\x81\xac\xd9\xca\
+\xb7\x30\x86\x8a\x98\x01\x81\x27\xe6\x16\x92\xf0\x48\x94\xd4\xf2\
+\xb2\x8b\x8b\x0b\x10\x62\x2b\x62\xb3\x8f\x59\xa8\x1e\x5e\x91\x81\
+\xed\x88\x08\x31\x08\xa9\xc9\xb4\x93\x1c\x96\xe9\x68\x07\xa8\x84\
+\x39\x9a\xaa\x59\xad\xd4\xe2\x29\x94\xa9\x97\x6c\xe0\x0e\x61\x39\
+\x0c\xc1\x54\x59\x47\x02\x1d\x45\xda\x05\x35\xfa\x9e\xe6\x0a\x21\
+\xdd\x91\x04\xe8\xea\x80\xff\x00\xa4\x69\xd4\x77\xfe\xa6\x72\x88\
+\x39\x02\x76\x2a\x53\xdf\xf0\xca\x37\x36\x00\xff\x00\x79\x1b\x53\
+\x00\x12\xa6\xe2\x67\x8d\xc3\x62\x36\xb9\x00\x01\x35\x50\x94\xb7\
+\xac\x68\x50\x5a\xd0\xac\x14\x58\x5a\xd3\x5a\x08\x14\x89\x36\xb8\
+\xbf\xbc\x67\x80\xfd\xc4\x6e\x01\xb8\x17\x8c\xa7\x51\xea\x79\x43\
+\x59\x7b\x0e\x21\x6d\x24\x26\x9d\x89\x17\x36\x95\x52\xd2\xb5\x43\
+\xb5\x58\x5f\xda\x12\x84\xfc\x22\xde\xa6\x17\x8e\xe9\x7d\x87\x60\
+\xee\x04\xcd\xb4\x95\x42\xa1\xa8\xf5\x3c\x32\x02\xaa\x1d\xa2\x40\
+\x43\x96\xc8\xcc\xdd\x3d\x4f\x0a\xb0\x22\xe3\xbc\xa6\xb8\xf1\x06\
+\x00\x43\xe9\xd6\x6b\xca\x11\xe4\x1e\x04\x75\x2d\xa0\x5c\xe0\x7b\
+\xc5\x3b\x3a\x9b\x11\x73\xea\x20\x96\x63\x92\x78\xe9\x68\x85\xcb\
+\xaa\xdb\xfe\x9d\xc0\xeb\x18\xae\x18\x07\x7b\xed\xfe\x64\x74\xd6\
+\xd6\x2c\x05\xcf\x4e\xc3\xb9\x9e\x7a\xf7\xab\xb7\xf0\x4c\xe1\xd5\
+\x6f\x50\x3f\x00\x01\xda\x2a\xa3\x13\x27\x7a\xbb\x7c\xa3\x27\xbc\
+\xc5\xaa\xd7\xe7\xe9\x19\x16\x8a\xa2\x9b\x8b\x98\x6f\x50\x25\x82\
+\x8b\x93\xc9\xea\x27\xbc\xb9\x37\xf3\x73\x13\x7b\xab\x13\x9e\xb7\
+\x88\x3b\xc4\x07\x2f\xf3\x77\x9e\x5c\xb8\x04\x9e\x6c\x3d\x64\xd7\
+\x27\xa4\x66\x90\x95\xac\xa6\xf8\xbe\x6f\x2c\x4b\xaa\x56\xd8\x82\
+\x9d\x30\x40\xbd\xcf\xac\x45\x57\xdd\x92\x4f\xeb\x32\xab\xab\x33\
+\x2a\x9b\x10\x6d\xef\x10\x77\x0e\x6e\x3d\xe1\x21\x57\xf0\xf7\x08\
+\xef\x55\xb3\xe1\xa1\x61\xef\xd2\x7a\x9d\x77\x7b\xb3\x16\xb9\xea\
+\x4c\x4e\x98\xed\xa7\x5c\x8e\xa9\xc7\xb1\x12\x77\xae\x58\x80\x4e\
+\x3b\x09\x60\xd5\xb5\x2b\xbd\x45\xb3\x35\xca\x8b\x66\x25\xaa\x6e\
+\xf3\x03\x73\xd6\x25\x9c\x97\x0f\xf4\x22\x10\x6d\xb9\x8e\x25\x6e\
+\xaa\x55\x7c\x3b\xee\xda\x0d\xbb\xcc\x55\x0c\x36\xb9\xb9\x27\x11\
+\x0d\x51\x8d\x15\x65\xe1\x7c\xa7\xdb\xa4\x05\x26\xe0\xee\xb1\x86\
+\x2d\x34\x87\x47\x20\x27\x90\x8b\x30\x12\x7a\xda\x72\x1c\x5d\x85\
+\xfa\x11\xd6\x3d\xea\x92\x4f\xaf\x30\x43\x78\xa3\xc2\xc6\xf1\xf2\
+\x98\xa5\x3a\x0a\xad\x56\x8b\x68\x2b\x2e\x0f\xfa\x44\xfe\x69\x05\
+\x4a\x2d\x4d\x89\xce\x0d\x8a\xf5\xbc\x63\xb9\x50\x01\xc0\x5f\xd4\
+\x18\xfd\x60\xfb\x45\x11\xaa\xa6\x6e\xdc\x54\x1e\xbd\xe5\xe5\x4e\
+\x62\xef\x7a\x81\x47\x24\xda\x7d\x17\xc3\x6a\xa8\xad\xff\x00\x4b\
+\x36\xda\xf4\x4a\xdc\xf5\x6e\xf3\x95\xa4\xa5\x67\xde\xcb\x62\x82\
+\xfc\x46\x53\x15\x68\xea\x29\x57\xe4\xa9\x0d\x71\xef\x0e\x5d\xa9\
+\xd3\x28\xa0\x5a\xbb\x5c\x10\x54\xe7\xe9\x1a\x58\x54\x06\xa0\x17\
+\x61\xcd\xa5\x5f\x16\xa2\xa9\xac\x35\xd0\x79\x2a\xae\xf1\x6f\x59\
+\x15\x26\x14\xce\x14\xdf\xf9\x96\xef\x66\xf4\x37\x50\xc3\x70\xbd\
+\xfa\xcc\x42\x40\xb1\x1c\x42\xbd\x8d\xc1\xf2\x9e\x3d\x27\xb6\x9e\
+\x57\x83\xcf\xa4\x91\xff\x00\x0f\xaa\x52\xb8\x04\x02\xad\xf3\x2c\
+\x2f\x89\x04\xad\x59\x2b\x20\x21\x0a\xd8\x77\x16\x83\x40\x78\x34\
+\x9a\xa3\x7c\xec\x2c\xa3\xfa\xc6\xe9\xc2\xd4\x46\x4c\x03\xc8\xf7\
+\x99\xbe\xe9\xf8\x91\x90\x05\xb8\x31\x55\x45\x90\x1f\x58\xda\xd7\
+\x50\x47\x26\x24\x5c\xd1\x62\x3a\x7a\xcd\x40\x58\xc1\xb8\xfd\xa3\
+\xd0\xdc\x5b\x82\x3b\xc9\xee\x6f\xd6\x36\x8b\x02\x00\x8d\x06\xd8\
+\xda\x1a\x1b\x8c\xf3\x3c\x06\xe1\x09\x54\x8e\x98\x98\x22\x17\xb5\
+\xa6\x90\xa2\xd7\x98\xcf\x6e\xc3\xd6\x2f\x53\x7d\xc0\xdc\x0c\x4a\
+\x42\x63\xba\x6d\xc6\x6d\x19\xf0\xfd\x6a\x69\xf5\x00\xb0\xba\x1c\
+\x30\xf4\x91\xae\xd3\x62\x49\x3f\x48\x15\x0d\x3b\xda\xed\x88\xfe\
+\x46\xab\xf8\x85\x3a\x74\x35\x05\x00\xf2\x9c\xa9\xee\x24\x95\x16\
+\x9b\x36\x0d\xaf\x29\x2c\xba\x9f\x86\x90\x48\x2f\xa7\xfd\x4a\x99\
+\xcf\x50\x2e\x00\x78\xc5\x4e\x14\xc8\x36\x0d\x71\xd2\x30\x21\x27\
+\x83\x26\x4a\xbb\x58\xd8\xde\x55\x4f\x55\x75\xb3\x01\x2b\xa0\xc4\
+\x6d\xc1\xa8\xb1\xc3\xe0\x7b\xc9\x19\x18\x55\xda\xc0\x80\x25\x0e\
+\xc8\xc8\x7a\x58\xc0\xac\x1e\xa0\x1e\x7b\xac\x21\x25\xaa\x6f\x62\
+\xbf\xa4\x0a\xe7\xcc\x8d\xdd\x7f\xf5\x32\xa2\x3a\x11\x71\x68\x75\
+\xfc\xfa\x75\x7f\xca\xc4\x19\xa0\x2a\x37\xb5\xfa\x75\x8e\x04\x5a\
+\x46\xaf\xd2\x39\x1f\xa1\x32\xb1\x1b\x81\x99\xb4\xc8\x15\x06\x22\
+\x09\xb9\xbd\xed\x1a\x97\x16\xdd\xcc\x2a\x33\x53\x4c\xef\x36\xf7\
+\xe2\x65\x31\x70\x01\xe6\x55\x59\x77\x22\x54\xee\x22\x45\xaf\xea\
+\x21\xa5\x50\x27\xfe\x98\x01\xe8\xf1\x09\x60\x4d\xf8\xea\x25\x08\
+\x37\xfc\x3e\xa5\xb0\x55\xaf\x69\x20\x36\x27\x33\x30\xb2\xaa\x78\
+\x75\x6f\x6b\x88\xa6\xb9\xe3\x12\xa2\x43\xd2\x3f\x99\x78\x93\x95\
+\x3d\x66\xa5\x14\x19\x2a\x01\xed\x2b\xd3\x22\xec\xfe\x64\xaa\x3a\
+\x71\x2b\xd3\x9b\x15\xed\xd6\x55\x46\xd5\x0b\xb8\xdb\x0a\x38\x11\
+\x42\xc5\xf6\x37\xc8\x32\xd1\xc5\x81\x73\x7e\x82\xf1\x1a\x8b\x26\
+\x98\x5c\xd9\x9c\xe7\xda\x10\xb9\xe5\x7c\xd7\x8c\xde\xcf\x83\xfc\
+\x73\x18\x11\x40\xc9\x04\x99\xa2\x9d\x81\x20\x19\xbd\x64\x92\xed\
+\x7d\x8c\x37\x5b\xf6\x82\x6c\xa7\x19\x63\xd7\xa0\x8c\x74\x6b\x10\
+\x05\x80\xeb\x3c\x82\x8a\x9f\x3d\x4c\x75\x02\x48\x6f\xe5\x05\x0e\
+\x1c\x80\x3d\xe4\x75\x18\x82\x40\xc4\xb7\x51\x57\x4c\x54\x3a\x5d\
+\x88\x16\x6f\x49\x13\xea\x94\xe1\x10\x03\xeb\x28\xa8\x4b\x31\xeb\
+\x09\x5f\x60\xb9\xe7\xa0\x8b\x50\xef\x76\x20\xd8\x76\xeb\x0f\x66\
+\xe5\xdc\xee\x03\x75\x1d\x62\x06\x6a\x96\x39\x98\x84\xee\xc1\xb5\
+\xe2\xc8\x23\x0a\xb6\xf5\x33\xc0\x30\x39\x92\x30\x55\x50\x6d\x6f\
+\xac\xf6\xe0\x5a\xf7\x8a\x70\x37\x11\xb8\x4f\x12\x8a\x2e\x5a\xf2\
+\x47\xd6\x37\x22\xa0\xb6\x7b\x77\x9e\xf1\x89\x16\x7e\x3a\x45\xd2\
+\xa8\x86\xea\x4e\x0f\xed\x3c\xce\x41\xb1\x37\x3e\xd2\x4a\x34\x96\
+\x35\x36\xde\xe1\x94\xaf\xed\x23\x75\x20\xee\x63\x61\x18\x2a\x0a\
+\x65\x59\x72\x46\x63\x35\x66\x99\x7c\x8b\x06\x1b\x94\xc9\x02\x9d\
+\x65\x65\x29\xd6\x12\x31\xb6\xc0\x33\xd4\xc4\x25\x3d\xae\x1b\x22\
+\x31\xd8\x11\x75\x36\x1d\x64\x86\x95\x16\x99\x2a\xd9\x0c\x2c\x6d\
+\x05\xc9\x07\x69\xb5\xc1\xc5\xa2\xce\xdb\x5c\x9b\x1e\xd3\x54\x17\
+\xb0\x04\x16\x1f\xc4\x90\x8b\xb3\x75\x9e\x56\xc8\xb3\x58\xf2\x20\
+\x32\x15\x26\xec\x09\x1c\xe6\x62\x13\xba\xf7\x92\x53\x54\xf8\x97\
+\x7f\xfb\x83\xe6\x1f\x9a\x7b\x45\x5f\x63\x91\x6c\x36\x18\x1e\xb1\
+\x54\xf2\x70\xc0\x11\xc1\xbc\x71\xa5\xe2\x8d\xc9\x60\xc3\x91\x78\
+\x27\x40\x2e\xd4\x23\x0c\xac\x70\x4f\x16\x83\xab\xd9\xb9\x3c\x35\
+\x62\x08\xb5\xfb\x41\xa7\xff\x00\xf1\x69\xd1\xa9\xf8\x89\xb1\xbf\
+\x06\x12\xab\x05\x2a\x41\x56\x06\xd6\x33\x2d\x2e\x54\x5a\xff\x00\
+\x0a\x19\xbb\xd1\x36\x27\xd0\xce\x79\xa4\x2f\xf3\x28\x32\xff\x00\
+\x85\xb0\x5a\xfe\x1b\x8b\x25\x41\xb5\xbb\x45\x6a\x28\x14\xa8\xf4\
+\x9f\x95\x36\x13\x32\xe5\xc3\x53\x22\x30\x7d\xa5\x90\xa9\xe4\x5e\
+\x52\x28\x78\x0c\x09\x2a\xd7\xe2\xfc\x45\xd3\xa7\xb5\x18\x9e\x40\
+\xc4\x1a\x75\x0a\x5d\x58\x9d\xa7\xf6\x8a\x87\xbd\x2d\xcd\xbb\xc4\
+\x53\xf5\xe2\x62\xd2\x08\xc1\x96\xa8\xba\x9b\xe2\x2c\x3e\xc7\x17\
+\x01\x81\xe0\xf7\x99\x59\x69\xec\x2c\xb7\xf5\xb7\x49\x26\xd6\xa5\
+\xbd\x8b\x12\x4f\xb4\x9c\xd3\x2a\x7f\xd3\x71\x1b\xa4\x5a\x42\x8b\
+\x97\xf3\x5c\x80\xa6\xf6\x2b\x18\xcb\x75\x34\xdb\x0f\x6f\x2b\x5f\
+\x0d\x1d\xc0\x86\xa9\x17\x3f\x73\xf5\x85\x41\x86\xeb\x6c\xb0\xf6\
+\x81\x51\x9d\x6a\x6d\x6e\x9c\xcd\x5a\x96\xb7\x98\x83\xfa\xcd\x7c\
+\x0a\xd5\x87\xe6\xfd\xa0\x33\x16\x3f\x34\x16\xaa\x42\x86\xef\x31\
+\x6b\x86\xf9\x91\x09\xf6\x99\x90\xbd\x9e\xe2\x6d\x60\xc5\xc8\xf4\
+\x86\x86\x9b\x5a\xe9\x63\xe8\x67\xb5\x06\x98\xa9\x65\x62\x3d\xc4\
+\x91\x2a\xa0\x72\x32\x22\xdb\xcd\x90\x38\x8d\xb9\x5b\x9b\xdc\x74\
+\xb4\xc2\xe0\x7c\xcb\xcf\x68\x80\xe8\xeb\xf8\x35\xc3\x10\x0a\x9c\
+\x30\xee\x20\x6b\x69\x7d\x9f\x52\x57\xf0\xde\xe0\x8e\xdd\x26\x39\
+\x42\x7c\xb1\xba\xa2\x2a\xe8\x29\x3f\x54\x25\x0f\xf2\x23\xf5\x21\
+\x75\x21\xb0\x4c\x20\xec\x00\x99\x60\x57\x9e\x21\x2a\x02\x30\x62\
+\x0d\x0e\x19\x4f\x43\x69\xea\x15\x08\x16\x24\xc5\x52\x43\xb8\x7b\
+\xc6\x35\x17\x17\xb7\x78\x13\xe9\xd4\x15\x00\x5a\x99\xec\x63\x85\
+\x14\x6d\x3b\x80\x7f\x10\xbc\x85\x81\xbd\xf3\x1d\x4d\x9c\x69\xc8\
+\x20\xe4\xf3\xed\x0b\x09\x2f\x45\x91\xac\x67\xb6\x98\xf5\xaa\x4a\
+\xab\x9f\x63\x28\x55\x46\xe9\x2d\xc1\x88\xb6\x91\x1d\x4c\x11\xc9\
+\xbc\x79\xd3\x83\x37\xc2\xb7\x22\x5f\xa3\x8a\x68\x5a\xa6\x9c\xaf\
+\x51\x90\x24\xed\x8f\x48\xed\x27\x95\xc0\xe9\x33\x5a\x9b\x6a\x1b\
+\x0c\x19\x8f\xa4\x5a\x67\xfb\xa7\x1e\x98\x92\x54\xfc\xeb\xf2\xff\
+\x00\x11\xfa\x75\x3b\x18\x7a\x49\xd4\xd8\xf7\x1c\x18\xc4\x6d\x26\
+\x18\x23\xf4\x84\xeb\x67\x23\xa4\xcf\x0f\x17\x5e\x21\x5b\x75\x3b\
+\x9e\x46\x2f\x04\x9d\xd6\xc7\x12\x8d\x2d\x8f\x86\xa7\x17\xc5\xe2\
+\x58\x31\x3e\xd1\xd4\xd6\xf4\xaf\xf9\x4c\x68\x65\x7b\xa3\x54\x03\
+\x91\x61\x13\xae\xbe\xe0\x83\xf0\xa8\x12\x93\x4f\x73\x58\xdf\x2c\
+\x3a\x49\xb5\x5e\x6a\xcc\x7b\x9b\xde\x31\x56\x25\x20\x32\xdc\x47\
+\x54\x60\xaa\x02\x81\x60\x26\x30\xb8\x81\x5d\xb6\x83\x78\x7a\x91\
+\xd5\x66\x63\x93\x26\x62\x54\xfa\x4a\x5b\x24\xc9\xb5\x16\xe5\x67\
+\x48\xcd\x2d\x98\xdc\x32\x9d\xa7\xbc\x16\xac\xc3\x20\x06\x61\xdc\
+\x44\x3b\x36\xe1\x99\xb7\xdc\x79\xc8\x88\x52\x35\xf5\x1e\x9f\x86\
+\xc6\xc2\xff\x00\x84\x5a\x08\xaa\xb7\xb8\x04\x9f\x53\x25\x6c\x9c\
+\x60\x8f\xde\x6a\x3e\xe1\x6e\xb2\x2a\x5e\xab\x83\xe5\x36\x10\x77\
+\xee\xe4\xd8\xc5\xa3\x1f\x94\xcd\xb7\x6e\x7b\x48\x19\x50\xd8\x06\
+\x3d\x44\x5e\xf2\x67\x9c\x90\xa0\x93\xc7\x49\x82\xc4\x60\x6d\x32\
+\x42\x52\x14\xdc\xfe\x91\xdb\x8d\x45\xf2\xe1\x87\xee\x24\xd6\x21\
+\xa3\x50\xdb\x3c\x11\xd6\x48\x48\x70\x01\xbe\x23\xd8\x87\xd3\x00\
+\x2c\x5a\x9f\xf0\x7f\xe7\xef\x11\x50\xee\x1b\x97\x1d\xc4\xf5\x16\
+\x2b\x63\xcf\x7f\x69\x11\xd3\xaa\xe8\xaf\x9b\x8e\xc6\x32\x8b\x23\
+\xf3\xe5\x1d\xa4\xd5\x7e\xed\xc8\x06\xe8\x78\x3d\xc4\x30\xca\x13\
+\x18\xc4\x93\x75\x34\xd9\x5a\xe2\x7b\x4e\xde\x15\xd8\x80\x4c\x04\
+\x76\x5c\x02\x6c\x7a\x18\x61\x95\x8f\x99\x7e\xa2\x49\x84\xdb\xcc\
+\x07\xfe\xa6\x83\x9b\x08\x74\xd5\x77\x5d\x5c\x63\xbc\x27\xd3\xbf\
+\xcc\x17\x70\xf4\xcc\xb5\x11\x72\x0e\x6e\x23\x69\x39\x0d\xce\x7a\
+\x19\x8e\xb6\x1e\x60\x41\x9e\x40\x0e\x00\xfa\x48\x2f\x67\x0d\x45\
+\x19\x86\x7a\xda\x57\xa5\xff\x00\x31\x48\x8b\xf9\xc0\xf2\xfa\x89\
+\x00\xbf\x80\xa0\x8b\x67\x99\x46\x91\x8d\xd4\x8c\x10\x66\x2c\xe9\
+\xb8\xa2\x95\x57\x46\x03\xa8\x3d\x44\xe9\x6b\x82\x55\x4a\x7a\x90\
+\xa4\x6e\x16\x62\x3b\x89\x26\xd1\x50\x17\x03\xcc\x3e\x65\xfe\xb2\
+\xfd\x0d\xab\x69\xea\x50\x38\xb8\xba\xfb\x89\xce\xff\x00\x5a\x89\
+\x29\xa8\xa9\x75\x04\x5e\xdd\x64\x8f\x48\xde\xc5\x7e\xa2\x5d\xe1\
+\x94\x56\xdb\x92\x71\x13\x59\x6f\x7c\x15\x6f\xd8\xc5\x54\xaa\x15\
+\x45\x8d\xf6\x9e\x41\xe9\x31\x91\x94\xdd\x4d\xd7\xa1\x9e\x67\x75\
+\x6d\xbc\xde\x6a\x55\x34\xc1\xde\x15\xaf\xd2\x21\x95\x29\xf9\x02\
+\xa0\x17\x26\xe4\x4a\x35\x3a\x63\x42\x97\x96\xa9\xa8\x00\x1b\x85\
+\xac\x54\xc5\xe9\xd6\xfa\x85\x65\xdd\xb4\x9e\x6f\xfc\xca\x4d\x45\
+\x76\x2c\xb6\xbb\x1c\xdc\x74\x85\xa9\xcb\xa9\x66\xb2\xd5\xb5\xff\
+\x00\x0b\xf4\x3e\xf1\x0e\xa1\x09\x06\xe0\x8e\x86\x5d\xab\xa1\xb5\
+\xcb\x22\x86\xa4\xdc\x8b\xc4\x78\x68\xc9\xb6\xa0\x6d\xb6\xf2\x3f\
+\x6f\x43\x37\x28\xa4\x29\xc0\xe9\xeb\x34\x6e\xbd\xff\x00\x71\x3d\
+\x52\x8b\xd2\x70\xbd\x7a\x40\xf3\x29\xe0\x8f\x69\xa0\x70\x36\xbb\
+\x02\x0e\x63\x35\x25\x58\xdf\xa9\x17\x93\x2d\x52\xad\x7b\x5f\xe9\
+\x1d\x51\x91\xd1\x1b\xe5\xe9\x04\x58\x62\x00\x22\xe2\x6e\xf0\xc2\
+\xcc\x2c\x7b\xc2\x74\xdf\x4c\x14\x20\xc9\xda\xf6\x20\xde\xf2\x4d\
+\x71\x63\x6e\xb1\x94\x5b\x76\x96\xba\x1e\x80\x30\xfa\x18\x8b\x92\
+\x2c\x4f\xb1\x8d\xd0\xe7\x51\xe1\x9c\x6f\x05\x4f\xd4\x4a\x84\xe0\
+\x0e\x86\x12\x92\x01\xb4\x5b\x02\x8c\x57\xac\x34\x7b\x5a\xe0\x18\
+\xa3\x10\x98\xe7\xa8\xc3\xcc\x2f\x6e\xd1\x68\x29\x9b\x7c\xd7\xed\
+\x0d\xbc\xcc\x6f\xc5\xe4\x47\x4e\xa5\x3a\x8a\x43\xb6\xdb\x1b\xf1\
+\x1c\x19\x43\x2a\x2e\x55\x47\x3e\xa6\x44\x8a\xcb\x53\x71\xe0\x4a\
+\x28\x8d\xd5\x6f\xc3\x64\x98\x58\xa1\xd4\xb6\x3d\xc0\x03\x3c\xfb\
+\xc6\x53\x51\xed\x22\x46\xb3\xde\xf6\x22\x5c\xb7\xb0\x61\xc1\x99\
+\xbd\x18\xa6\x92\x03\x80\x63\x85\x21\xd7\x32\x5a\x6e\x01\xed\x29\
+\xa5\x5a\xdc\xd8\xcc\x56\xa3\xc6\x88\x19\xb1\xbf\x49\xea\xc9\xe2\
+\x51\x3d\x48\xe2\x56\xad\x4d\x96\xdf\xb1\x85\xe1\x0e\x57\x20\xf4\
+\x86\x9c\x72\x74\xd7\x17\x04\x62\x21\xa9\xf9\x89\x1d\x0c\xe9\xd4\
+\xa1\xb6\xa6\xee\x55\xb8\x90\x54\x04\x3b\x5b\xbc\xd4\xac\xd8\x2a\
+\x4d\xb6\xf7\xe0\xf2\x23\x15\x00\x3d\xd1\x85\xaf\x14\x96\x61\x6e\
+\x0c\x65\x32\xc8\xdb\x58\x5d\x7a\x89\x22\xd9\x4a\xb5\xc6\x0c\xbf\
+\x40\xb4\xdd\x0d\x22\x9e\x77\x17\xbf\xb4\x46\xa2\x98\x1b\x2a\x53\
+\x21\x94\xff\x00\xcc\xcc\xa3\xa8\x14\x54\xd4\x03\xcd\xc2\xc2\xf6\
+\x67\x47\x6a\x9a\x8e\x98\xba\xee\xdd\x54\xe0\x0b\x71\x39\x0e\xac\
+\xc6\xe4\x98\xf2\x4b\x92\xcd\x72\x4f\x24\xcc\x16\x1d\xa6\xa7\x42\
+\xf6\x1b\xe6\xd7\x81\xaa\xe0\xcd\x2d\x6e\x83\xd0\xc5\xea\x9b\x1c\
+\xc6\x7a\x12\xd5\xee\x0c\x9e\xa6\x41\x8f\xab\x91\x24\xa8\x48\xb8\
+\xbe\x66\xe3\x35\x39\xb6\xe2\x7b\x40\x04\xf4\x8c\x6c\xa9\x8b\x22\
+\x54\x0a\xe1\xba\xd8\xcf\x5a\xe6\xe3\x0d\xda\x2c\xe3\x31\x8a\xd7\
+\x17\x22\x44\x6b\x61\x62\xdc\xf4\x9a\xec\x4f\x9a\xd6\xe9\x88\x07\
+\xcd\x9e\xb0\x95\xc1\x1b\x1a\xd7\x31\x0f\x5f\xcb\xcd\xe7\xb1\x00\
+\x60\x30\x3c\xc1\x04\xcb\x51\xc3\x10\x81\xb8\xc4\x5a\x99\xa1\x81\
+\xe9\x24\x30\x4a\xb5\xe1\x58\x6d\x2c\xb8\x07\x91\x30\x58\xae\x73\
+\x3d\xb4\xdc\x15\x39\xed\x24\xf2\x93\x51\x45\x33\xc8\x3e\x5f\xed\
+\x3c\x39\x20\xf4\x9e\x54\x24\x92\x30\x46\x61\x35\xdd\xae\x3e\x61\
+\xc8\xef\xeb\x24\x01\x73\x93\x0a\x99\x04\xed\x82\x58\x9e\x7e\x82\
+\x33\x4e\x2e\x7a\x5a\x48\xfa\x74\xc0\x5c\x8c\xcc\xbb\xa1\xc1\x22\
+\x68\x6b\xb6\x78\x8d\x20\x1c\x37\xd0\xc0\xbd\xbe\xa3\x52\xb8\x6d\
+\xde\xe2\xf0\x15\xfa\xb5\x35\x3f\x48\xda\x48\x41\xf2\xff\x00\x33\
+\xc6\x91\x2d\xd8\xc8\x9b\x46\xa5\x36\xa6\x41\x4c\x76\xbc\xa6\x81\
+\xd3\x30\x04\x78\x8a\x7b\x58\x48\xa8\x28\x5a\x8c\xa7\xa8\x8f\xa5\
+\xe5\x36\x60\x3b\x4c\xd8\x63\xad\x4c\x51\x2e\x2a\x25\x56\xb9\x19\
+\xf2\xca\xf4\xfe\x0a\x30\xaa\xae\xcb\x63\x7b\x6d\xe2\x71\x90\x95\
+\x1e\x5e\x99\x12\x9a\x1a\xa2\xa6\xcf\x90\x67\x3b\x1a\x95\xd7\xad\
+\x4b\x4e\xaf\x72\xed\x66\x17\x16\x12\x1d\x43\xe8\xc1\xb6\xca\xae\
+\x47\xfb\xad\x2c\x3b\x6a\x68\x95\xc8\x24\x53\xc5\xc1\xe9\x39\x15\
+\x4d\x2d\xe7\xef\x19\x7d\xc4\xcf\x13\x44\xda\x9d\x2e\x7f\xca\x0f\
+\x72\xe6\x0b\x6a\xa9\x20\xf2\xe8\xa8\xfd\x6e\x62\x4d\x32\xcf\x65\
+\x74\x37\xe9\x7b\x5e\x54\x68\xe0\x17\x4c\x80\x00\x00\x7f\x33\x7d\
+\x33\xdb\x46\xbf\xc1\xa2\x09\xd2\xe9\xd5\x9b\x80\x17\xa7\xac\x36\
+\xd6\xd4\x21\x4d\x3a\x74\x76\x9f\xff\x00\xcc\x62\x73\xeb\x53\x67\
+\xab\x76\x63\xba\xf0\x83\x9a\x75\x42\xf4\x1c\x89\x64\x3a\xac\x6b\
+\xab\xb0\x60\x7c\x3c\xf6\x41\x22\xaf\xf1\x1d\x65\x1a\x99\x14\xc8\
+\xff\x00\xc0\x08\x6c\x14\x03\x51\x70\x0e\x3d\xa2\xeb\xa0\xab\x4f\
+\x69\xf9\x87\x06\x52\x41\x6d\x51\x4b\xe3\x14\x98\xa0\xab\xa7\x50\
+\xa7\xf1\x76\x3e\xd0\x75\x5f\x12\xd3\xd2\xa9\xb2\xae\x94\x0e\xbc\
+\x03\x79\xc7\xa8\xad\x4c\x90\xc3\xde\x39\x14\xea\x28\x78\x04\xdd\
+\xd4\x5e\x91\xee\x3f\x2c\xd7\xe6\x0f\xd5\x58\x35\x5f\x0e\xad\x86\
+\xa2\x07\xb4\x72\x69\x34\x5a\x84\x29\x4e\xab\x21\xe4\x5e\x7c\xe9\
+\x04\x1b\x64\x11\x1f\xa6\xaf\x52\x9b\x02\x18\xe2\x37\x8f\xf0\x7e\
+\xbf\xae\xa3\xe8\x2b\x52\x53\xb4\x87\x1d\xc4\x90\xf9\x94\xab\xe1\
+\xbb\xca\xe9\xea\x1c\x5a\xa5\x36\x36\x6e\x90\xeb\x53\xa7\xac\x52\
+\x52\xc9\x58\x0b\x91\xde\x12\xdf\xa5\xc9\x74\x65\x39\x87\xa5\x6d\
+\xba\x8a\x4c\x79\x0c\x3f\x48\xc6\x52\x3c\x8f\x70\x47\x78\x96\x5d\
+\x95\x14\xf6\x33\x6c\x87\x54\x08\xae\xc0\x74\x63\x05\x54\x92\x3b\
+\x88\xfd\x70\xb6\xa9\xcf\xac\xca\x78\x01\xba\xc9\x35\x57\x68\x17\
+\xe6\x35\x00\x2b\x9c\x0e\xa6\x25\xb7\x0c\x8f\xd6\x52\x17\x0a\x3b\
+\x08\x10\xea\x2c\xc0\x11\x8b\x70\x3b\xc0\xa6\xc5\x0e\xeb\xe7\x88\
+\x4e\x06\xe3\xb9\xb3\xd2\x0b\xdb\xa0\xc1\xe2\x49\xbb\xf7\x1f\x35\
+\xaf\x79\x5e\x9d\xac\xbb\x72\x0f\x32\x03\xf3\x47\xd0\x7b\x10\x0f\
+\x1d\xe5\x62\x59\xc9\xc4\xdd\xcc\x3d\x22\xac\x54\xde\xf7\x07\x88\
+\xc5\x7c\x5a\xf8\xec\x67\x36\x8c\xa7\x59\x94\xf7\x12\xfd\x36\xa4\
+\x11\xdc\x75\x13\x90\xc4\x03\x70\x6d\x36\x95\x66\x4a\x97\x95\xe3\
+\xab\x5f\x53\x42\x9d\x3d\x55\x2d\x97\xb1\x23\xca\x67\x0b\x57\x49\
+\xa9\x57\x65\x61\x62\x0c\xb7\xe1\x3a\xbb\x54\x00\x1c\xf6\x97\x7c\
+\x4b\x4e\x9a\x84\x15\x40\xcf\x7e\xc6\x73\x97\xf3\x5b\xbd\xc7\xce\
+\x11\x63\x71\xd2\x3d\x19\x5c\x59\xba\x45\xd7\xa6\xd4\xdc\xab\x0b\
+\x11\x05\x0e\x47\x79\xd1\x83\x2b\x6e\x51\xb2\xc4\x86\xe2\xd2\x7a\
+\x86\xc6\xc7\x89\x52\x6e\x00\x9c\x30\x19\xb1\xeb\x23\xae\xc5\xaa\
+\x33\x90\x01\x27\x89\x45\x58\x5c\xf1\x6b\x4d\x19\x17\xbc\x58\x17\
+\xcd\xf2\x21\xaf\x16\xbe\x26\x80\x08\x3d\x44\x0d\x57\xc8\xa6\x35\
+\x89\x81\xa8\xcd\x25\x8a\x42\xe4\x89\x25\x53\x99\x4d\x51\x7b\xd8\
+\xc9\x6a\x0f\x35\xe6\xe3\x21\x71\xe4\x11\x67\x8b\x08\xe7\x06\xc0\
+\x0e\x6d\x04\xa8\x1e\xf2\x05\x6d\x00\x5c\xfe\x91\x57\x3b\xaf\x1a\
+\x62\x9c\x67\x10\x30\xc0\xf8\xc4\xc6\xce\x7a\xc0\x4b\xde\xf1\x81\
+\x6e\x31\x24\xd3\x91\xbb\xa1\x13\xd4\xd6\xf1\xc9\x4e\xf4\x88\x3c\
+\xf3\x31\x10\x83\x8c\xc4\x32\xdd\x21\x78\x66\x51\x4a\x9d\xc6\x45\
+\x8c\x6a\x52\x09\x96\x04\xf6\x96\x94\xdb\x08\x36\xe2\x79\x69\xb0\
+\x3b\x8d\xc7\xac\xa2\xe0\x12\x47\x24\xc1\x72\x5b\x93\x81\xd2\x5a\
+\x80\x49\x65\xb1\x3d\x66\x00\x0b\x0b\x1b\x1e\xf3\x4a\xf9\xbb\x62\
+\x0a\x7c\xd2\x0d\x7a\x77\xf3\x28\xf7\x13\x69\xa8\x45\xb4\x7d\x36\
+\x20\xee\x60\x08\x1d\xa7\xaa\x20\x70\x5a\x9f\xb9\x1d\xa0\x43\x49\
+\x6f\x1d\x8b\x64\x5c\x44\xd3\x06\xe0\xca\x14\x82\x6c\x64\xa0\xe9\
+\x02\x0d\xc7\x12\x9d\xbb\x85\xed\x7c\x44\x53\x50\x0e\x0c\xaa\x8e\
+\x06\x38\xeb\x31\x5a\x84\x78\x6a\x58\x1e\x0c\xd7\x46\x0d\x8e\xb1\
+\xb5\x94\x1e\x9f\x51\x04\x83\xb0\x10\x65\xa8\x28\x18\x1b\x1b\xd8\
+\xfe\xd0\x43\xb2\xb6\xd3\x73\xef\x08\xb3\x86\x1b\x4d\xfb\xcf\x06\
+\x24\xd9\xb1\x7e\x24\x9d\x9f\x84\x55\xde\x4d\x06\xe2\xa2\x11\xec\
+\x7a\x4e\x75\x75\xb3\x30\x72\x05\x8f\x26\x1e\x96\xad\x4a\x44\x54\
+\x07\xe5\x20\xfe\x91\x5a\xfc\xd7\x75\xc5\xf9\x1e\xb3\x32\x76\x6f\
+\x80\x35\xa9\x8b\x04\x19\xfc\xd3\x29\x9a\xa0\x92\x95\x09\xeb\x83\
+\x99\x33\xa1\xc1\x18\xb4\x3a\x4c\x4f\xb7\x79\xbc\x1a\xe8\x53\xd5\
+\x55\xb5\xaa\x59\xc0\xe8\xe2\xf6\x8d\x5a\x9a\x5a\xbe\x5a\xd4\x4a\
+\x76\x74\x32\x54\xab\x71\x90\x1d\x7d\x66\xd9\x18\x1b\x1d\xbe\x86\
+\x63\x0a\x9f\xb1\xd3\xd9\xba\x86\xa1\x58\x13\xc3\xe0\xc9\xf5\x74\
+\xaa\x52\x62\xad\x4e\xc9\x6f\x2b\x08\x4b\xb9\x48\x52\x2e\xbc\x11\
+\xd0\xcc\x67\xaf\x42\xb3\x05\x62\xc8\xd7\xc1\xcd\x8c\xa2\x41\xac\
+\x40\xd4\xf7\x5b\x32\x45\x24\x1b\xa9\xb1\x06\xe3\xb8\x33\xae\x4d\
+\x0d\x4d\x32\x2c\x29\x54\x23\xb6\x09\xfe\x93\x97\xaa\xa6\xf4\x2b\
+\x79\xd7\x69\xfd\xa6\xf8\xd6\x68\x75\xa3\x79\x1a\x85\x16\x0f\xc8\
+\xec\x7a\xc9\x81\xcd\xa5\x88\x55\xe8\xd4\xa5\xe9\xb9\x7f\xac\x90\
+\x0b\x37\x33\x50\x2c\xd2\x38\x51\xb1\x8f\x94\x9f\xd0\xca\x09\x64\
+\x65\x23\x0c\x3a\xc8\x13\x1b\x73\xd6\x5d\xe5\x7a\x61\x37\x79\x80\
+\xf2\x9b\xc2\x98\x7d\x60\xba\xca\x25\xd4\x05\xac\xbc\x8e\xf3\x9e\
+\xcc\x0f\x91\xb9\x11\xa2\xa3\xd3\x70\xeb\xf3\x2f\x23\xbf\xa4\x2d\
+\x5d\x21\x5d\x7e\xd1\x44\x73\xf3\x0e\xd0\x9d\x20\x6b\xc0\xf1\x89\
+\x3f\x88\x03\xfb\x40\xa6\x53\x60\x04\x1b\xf5\xcc\x76\xa9\x09\x34\
+\xc3\xdc\x79\x06\x64\xe5\x19\x5a\xe4\x18\xcf\x11\x89\xb0\xd7\x02\
+\xd7\x5b\xe6\x51\xa8\x64\xb0\x2b\x71\x79\x3f\x87\xb1\xb0\x6e\x66\
+\x92\x6d\x66\x19\xf5\x92\x2c\x93\x7c\x09\xb4\xee\x58\x03\xde\x61\
+\xb5\xf3\x68\x68\xb9\xbf\x48\xa0\xd4\x16\x6c\x71\x0e\x97\x33\x6a\
+\x0b\x0e\x2f\x79\x94\xc8\xe0\x88\x25\x54\xde\xf4\xfb\x89\x8e\x42\
+\x8b\x83\x89\x94\xc0\xe2\x63\x8d\xa6\x67\xe9\x27\xc4\x3b\x89\xb0\
+\x84\x1c\xdc\x10\x30\x7a\x4f\x54\x41\xf3\x28\x3e\xd3\xd4\x40\xb9\
+\x0d\xc4\xd0\x5f\xa0\x37\xb3\xa1\x37\x53\x91\xd6\x77\x34\xfa\x8f\
+\x11\x0a\xee\xb3\x1c\xdb\xa1\x9f\x3d\xa5\xbd\x37\xba\xde\x74\x74\
+\xf5\x47\x89\x6b\x8d\xc3\x36\xef\x39\x72\x8d\xf1\xaa\xb5\x94\x06\
+\xa1\x09\x18\x71\xc7\xf6\x9c\xa2\x85\x4d\x88\x20\x83\x99\xd5\x35\
+\x0a\x81\x53\x9d\xb8\x23\xd2\x2f\x5d\x44\x3a\x78\xf4\xec\x71\x9f\
+\x58\x4a\x6c\x40\x86\xed\x66\x3e\xc6\x26\xa2\x6e\x26\xd6\xbc\x33\
+\xd6\xf0\x78\xc8\x9a\x64\x9f\x0c\x83\x79\x85\x0e\x6c\x6f\x19\x57\
+\x0b\xb8\x0c\x1f\xda\x0a\x3d\xc5\x8f\x22\x21\x29\x67\x43\x82\x31\
+\xeb\x0a\xb3\x0f\xb3\x6e\x03\xae\x44\xea\xb2\xfc\x17\x54\x2c\x19\
+\xa8\x39\x8b\xd4\x7c\x1e\xaf\x80\x7e\xcd\x55\x2b\x2f\x36\x8f\xea\
+\x7d\x58\xf9\xda\xac\x2f\x13\x7b\x9b\x13\x79\x46\xbb\x4f\x56\x8d\
+\x4d\xb5\x69\x3d\x32\x3b\x8b\x44\x22\xe7\xbc\xe9\x18\x15\x51\x6e\
+\x39\xeb\x13\x78\xc5\x6b\xb1\xcc\xf6\x1a\xf8\xcc\x91\x0d\xed\x30\
+\x21\xe6\x3c\xa1\xbd\xed\x0a\x9d\x07\x71\x85\xc4\x92\x65\x52\x7a\
+\x46\xd3\x5f\x30\x12\x95\xa3\x4d\x30\x2e\x4c\xf1\xa6\xa1\x6e\x2f\
+\x79\x20\xe3\x78\x2b\x9b\x62\xd1\xde\x19\x43\x8c\x0e\x62\xe9\x25\
+\x8d\xc4\xb4\x28\x6a\x4a\xc3\xe6\x18\x30\xa6\x13\x49\x37\x1b\x5e\
+\xdd\xef\x09\xee\x30\x47\x30\xdd\x76\x5a\xc0\x92\x60\xfb\xc8\x96\
+\x54\x01\x88\x36\x8e\x36\xf6\x82\x45\xfa\xc8\x61\x6c\xbe\x63\x8e\
+\x90\x76\x6d\x39\x95\x52\xa6\x58\x13\x6e\x20\x94\xb1\x37\x17\x32\
+\x58\x52\x8b\x8b\x91\x88\x48\x19\x5b\x72\xe2\x18\x56\x3c\x8b\xc6\
+\xd1\xa7\x6c\xdb\xe9\x25\x8d\x54\x56\x5d\xc3\x07\xd2\x67\x84\x7b\
+\x46\xaa\xec\x37\x02\xc0\xf4\x30\xc0\xb0\xdc\x32\x3b\x4c\xeb\x45\
+\xaa\x1e\xf1\xca\x08\x1c\xcf\x29\xbe\x01\x23\xd2\x1e\x7a\x89\x9b\
+\x53\x77\x07\x4d\xbd\x44\x0a\x60\xd8\x83\x04\xb0\x0d\x1d\x4e\xce\
+\x09\x3c\xc8\x92\xea\x2f\xb8\x74\x98\x08\x64\x04\x0e\x0c\xda\xb7\
+\x0c\x7b\x40\xa7\x92\x41\xeb\xc4\x42\x84\x65\x34\x8a\x92\x41\xb5\
+\xa7\xb5\x76\xf1\x11\x8f\x3b\x46\x62\x2a\xb0\x57\x54\xfa\xc7\x6a\
+\xce\xf7\x55\xec\xa0\x7b\x40\x91\x5c\x12\xbb\xd0\x0b\x1f\x48\x28\
+\xc5\x86\xdc\x02\x39\x10\xee\x02\xb5\x34\xfa\x1f\x58\x28\x55\x10\
+\xbd\x41\x76\xbf\x96\xdc\xcd\x03\x11\xc7\x16\x00\xc7\x21\xa6\x7c\
+\x87\x9c\x44\x52\x43\x53\x2a\xc0\x9e\xc7\x11\x8b\x4d\xac\xc4\x8b\
+\x11\xd2\xd3\x34\x89\x5c\x87\x3f\xc4\x5b\x3b\x03\xb9\x49\x23\xa8\
+\xea\x23\xf4\xcd\x4d\xe8\x32\xb5\x3b\xb5\xee\xa6\xf9\x90\xd7\xba\
+\x31\x28\x4e\xe1\xc7\xac\xa0\x13\x56\xb1\xdc\x2d\x98\x49\xab\x47\
+\x43\x46\xbd\x35\x74\xcd\xbb\x8f\x68\x85\x02\xbd\x22\x40\xb5\x41\
+\xc8\xef\x11\x50\x6d\x7e\x6d\xd6\x6b\x20\xd3\xde\x9a\x51\xab\x49\
+\xb6\x06\xa6\x4d\x83\x03\xc8\x31\x0e\xb4\x83\x15\xda\xc2\xc6\xd1\
+\xba\x5a\x8b\x76\xa1\x54\xdd\x1b\x8f\x43\xde\x06\xad\x19\x35\x4c\
+\x30\x7a\xfb\xc5\x35\x13\x4f\x6d\xc5\x98\x7b\x88\x5b\x69\x73\xe3\
+\x66\xfd\x44\x41\xab\x64\x0b\x6c\x83\x00\xd5\x24\x47\x16\xad\xd8\
+\x8e\x33\x55\x49\x18\xbc\x76\x9a\x93\x51\xa9\xbd\x41\x64\x6c\x11\
+\x79\xce\x57\xcd\x88\x16\x32\xdd\x1d\x40\xf5\x36\xbe\x0a\xf1\x9e\
+\x66\x6a\x8a\xbe\x23\xa6\xdb\xb0\xab\x38\x16\xb0\x36\xc4\x91\x5d\
+\xb6\xec\x73\x6b\x70\x48\x9d\x04\xad\xb2\xd4\x6a\x96\x00\x8c\x5f\
+\xbc\x4e\xa0\x85\x01\x2b\x20\x61\xd1\xad\x33\x2b\x55\x38\x66\x5b\
+\x36\xc5\x7e\xe4\x41\x66\x4e\x40\x36\x27\x88\xd5\x4a\x40\xf5\x00\
+\xf4\x07\x13\xc7\x4a\xdf\xf6\xd8\x3a\x9e\x86\x6b\x60\x4a\xcb\x4c\
+\xb6\x09\x5f\xa4\x72\x50\x36\xf2\xb8\x27\xf4\x9e\xf0\x9d\x1b\xcd\
+\x4e\xc3\xbc\x62\x2a\x91\xcc\xad\x41\x28\xfd\x56\x1a\x53\x07\xa1\
+\x06\x11\xba\x88\xc4\x67\x23\x06\xc7\xb1\x99\xd4\x0b\x64\x5a\x05\
+\x41\x71\x79\x4d\xee\x3c\xe8\x2f\xfa\x4c\xfb\x93\x75\x3b\x85\xe5\
+\xa5\x1b\x06\xfc\x33\xca\xaa\x3c\xdd\xf9\x12\x96\xa6\x87\x87\xfd\
+\xa7\xa9\xe9\x86\xef\x2d\x54\xcf\x31\xd1\x81\x47\xb8\xc6\x23\x03\
+\x6d\xaa\x8f\x1c\xba\x05\x04\x37\x8c\xb6\xf6\x94\x7d\x9b\x4a\xaa\
+\x0d\x4a\xc4\xf5\xb4\xce\xc3\x82\xa7\x58\x35\xaf\xec\x7d\x63\x34\
+\x55\x3c\x3a\xad\xa7\x7c\xab\x65\x62\x7c\x6d\x15\x3b\x6d\x42\xd6\
+\xfc\x44\xca\x2a\x6a\x74\xfe\x12\x56\xa7\x49\x78\xfd\x26\x5a\x43\
+\xae\xd3\xb5\x2a\xc7\x6f\xca\x72\x0c\x9a\xa2\xb0\x23\x9c\x4e\xf2\
+\xd6\x15\x34\x7e\x3d\x22\xa5\x80\xe0\x89\x0b\xeb\xeb\x0c\xec\xa6\
+\x7d\x00\xe6\x52\xd5\x64\x73\x1a\xf9\x5c\xe6\x4e\x03\x64\x13\x63\
+\xc4\xea\xb7\xc5\x5c\x61\xa8\x52\x6f\x42\x26\x0f\x89\x69\x5e\xc6\
+\xae\x8e\x9b\x5f\xa8\x13\x72\xdf\xe3\x39\x1c\x2a\xb7\xb0\xbf\x5e\
+\xb1\xb4\x35\x55\x68\x52\x1e\x1d\x46\x53\x7e\x86\x2e\xa5\xb6\x29\
+\x36\xf5\x8a\xaa\x01\xa4\xb6\x39\x9d\x19\x74\x0f\xc6\x05\x40\x29\
+\xeb\x68\x53\xac\x83\xa9\x19\x8b\x3f\x0f\xd2\xea\x89\xa9\xf0\xfa\
+\xc2\xf9\x26\x9b\xf4\x9c\xb6\x46\x3c\x91\x78\x74\x9f\xc1\x3b\xd1\
+\x88\x6b\xf7\x87\xe7\x3c\x5b\xfd\x7a\xa6\x92\xb5\x2a\xc5\x2a\x53\
+\x60\x46\x26\xae\x9c\x0b\xf9\xad\xe9\x3a\xfa\x5f\x8a\xa5\x75\x14\
+\x75\xb4\xd5\xc1\xe1\xbb\x4d\xad\xf0\xc1\x54\x1a\xba\x5a\x81\x93\
+\xf2\x93\x99\x7e\xb3\xd5\x9f\xc7\x3a\x98\xa6\x83\x2a\x49\xea\x4c\
+\x5d\x4a\x97\xc2\xf1\x1d\x53\x4f\x5e\x99\x21\xe9\xba\x88\xbd\x84\
+\x9c\x5a\xd1\x01\xa6\x8c\xcd\x7e\x44\x22\x37\x1b\xf1\x1a\xaa\x42\
+\x5b\x82\xdd\x7d\x21\x0a\x5c\x93\xc4\x96\x10\xaa\x44\xa3\x4e\x2e\
+\xae\x2d\xc0\xbc\x3a\x1a\x56\xa8\xe0\x66\xde\x92\xa7\xd2\xa5\x32\
+\x02\xb9\x3b\x47\x9b\xde\x66\xd8\x64\x44\x2a\x1e\x5b\x33\x1d\x7c\
+\xb7\x5c\xc2\xab\x4c\x29\x22\xf9\xed\x3d\x48\x32\x9c\x1c\x70\x62\
+\x93\x5c\x93\x68\x40\x77\x95\x9a\x48\xf9\x5c\x18\xa6\xa0\x47\x73\
+\x2d\x58\x2a\x0d\x65\x37\xe2\x30\xaa\x11\x7c\x1b\xc5\x28\x20\x95\
+\xe2\xc2\x32\x98\x62\x38\xb5\xa1\x53\x02\x80\x6c\xb7\x8d\x4a\x78\
+\xcc\x24\x5b\x1c\xc6\x20\xfa\xcc\xda\x70\xbd\xa6\x6d\x35\xb7\x39\
+\xbf\x31\xc5\x6f\xd2\x60\x4e\x6d\x0d\x25\xb2\x6d\x6e\xc2\x10\x6b\
+\x8b\x18\xd4\x5d\xc3\x69\xfa\x41\x34\xec\x30\x47\xf5\x92\x4f\x50\
+\x67\x88\x5a\x72\x43\x15\xef\x18\x13\xbc\xc5\x5d\xaf\x83\x1d\x40\
+\xaa\x45\x88\x7e\xbc\x19\xea\x14\xce\xfb\xdb\x1d\xe1\x55\x42\x54\
+\x12\x63\xa8\x1f\x09\x77\x1c\x5c\x58\x02\x25\xf1\x24\x28\x6a\x6a\
+\x01\xc6\x0d\xa7\xbe\x20\xe7\xc6\x64\x41\x60\x05\xaf\x1f\xa6\x01\
+\xb5\x60\x91\x6d\xa6\xe4\x1e\x24\xf5\xd7\xef\x0b\x35\xc0\x26\xf7\
+\x8c\xf4\x12\x87\xcc\x0b\x62\x15\x64\x3e\x20\x60\x49\x53\x05\x94\
+\x10\x40\x3c\x0e\x23\x68\xdf\xc2\x05\xfc\xaa\x39\xbc\x68\x7a\x97\
+\x01\x81\xb1\x3c\x4a\x1e\xbd\x45\xa6\x00\x6e\x45\x8d\xe0\x04\x0c\
+\xbe\x22\x5a\xdd\x04\xc5\x56\xcb\xf4\x13\x24\x24\x39\x36\xa7\x7b\
+\xda\xe0\x8e\xf2\xc1\xa6\xa2\xfa\x61\xa9\xac\xcc\x2e\x6c\x42\x8e\
+\xb2\x52\xee\x9f\x59\x55\x4c\xe8\xd6\xc6\xc6\x93\x5d\x87\xa1\xff\
+\x00\x82\x54\xb9\xd5\xa9\x7d\x9f\x57\xe5\x38\xe4\x1e\xe2\x2f\x57\
+\x4f\xc4\xb3\xa8\x19\xe4\x4b\x9e\x99\xab\x4b\x16\xdd\x4f\x23\x3d\
+\x24\xed\xba\x9d\x99\x94\xdb\x83\x89\xa9\x46\x21\x2a\x41\x0d\xe9\
+\x69\x5d\x6b\x57\xd1\xad\x4f\xfb\x88\x33\xea\x22\x9d\x45\xc8\xb9\
+\x23\x91\x37\x4f\x50\x53\xb1\xe8\x0d\x8f\xb1\x8d\x09\x2a\x5b\x18\
+\x98\xa0\x11\x8c\xc7\x6a\x69\x78\x75\x88\xe5\x4e\x57\xda\x62\xa0\
+\x02\x3a\x03\x63\x6b\xc6\xd0\x04\x5c\xf5\xb4\xd0\xb7\xf5\xcc\x6d\
+\x2a\x64\xb0\xdb\x9b\x98\x1c\x74\x59\x52\xad\x34\x57\x60\x1b\x68\
+\xb1\xb4\x31\x47\xc4\xa4\x29\xbb\x29\x61\xc1\xeb\x26\xae\x0a\xd5\
+\x01\xae\x2c\x04\x62\x54\x26\xc1\xb3\xd8\xce\x6d\x27\xaf\x45\xe9\
+\x36\xc7\x42\x07\x79\x89\xb9\x45\xc1\x27\xb6\x65\xee\xde\x22\x58\
+\x9b\x38\x92\xf9\x77\x6d\x74\xb1\xf4\x8e\xac\x32\x86\xab\x70\xdb\
+\x55\x77\x2f\x63\x18\xd4\x69\xbf\x9a\x9a\xdc\x7b\xc0\x5a\x2a\xc3\
+\xee\xd8\x37\xfb\x78\x30\x7c\xe8\xf8\x25\x48\xe9\x04\x30\xb4\x86\
+\x0b\x30\x3d\x88\x8d\xa6\x94\x48\xf9\xf3\x31\x4a\x56\x4b\x11\x62\
+\x3a\xc4\xbd\x36\x43\x9e\x3a\x19\x25\x26\x9a\xdb\x92\xcb\xe9\x25\
+\xad\xe1\x53\xa8\x79\x36\x86\x97\x23\x98\x15\x85\xf9\x1f\x59\x44\
+\x16\xac\x9c\xad\x30\x26\x78\xce\x06\x2c\xbf\x48\xa3\x4c\xf4\x83\
+\xb8\x64\x13\xc4\xd6\x0d\x3d\x2b\xb1\x3b\x4b\x1f\xd6\x1b\x5f\xc3\
+\xc9\x91\xb3\x5b\x20\x62\x52\xb5\x2f\x44\x1e\xa2\x56\x26\x51\x52\
+\xc8\xc0\x99\x56\x88\x86\xa0\xd4\xc9\xeb\x26\xa4\xc3\xc4\x22\xf1\
+\x9a\x5b\xad\x47\x1c\x62\x14\xc7\x47\xe0\xf9\x4a\xd4\x09\xc0\xff\
+\x00\xf2\x73\xab\x1d\xa4\x8b\xd8\x83\x2d\xf8\x61\x23\xe2\x2c\x07\
+\xe3\x53\xfd\xe4\x5f\x11\xf2\xea\xaa\xaf\x19\x33\x33\xd3\x7c\x49\
+\x55\xef\x6b\x8e\x62\xc8\x06\x83\x10\x4f\x95\xa6\x38\xc0\x6b\x75\
+\x9b\x48\xe2\xa2\x5f\xf0\xde\x75\x60\x8a\xa4\xf8\x6a\x3b\x08\xaa\
+\x98\x44\xb7\xe5\x87\x52\xe3\x9e\xe6\x05\x67\x00\x80\x7a\x0b\x44\
+\x10\xe4\xa9\xb1\x98\x46\x16\xd3\x4f\x98\x81\xde\x63\x35\xd9\xad\
+\xc7\x48\x81\xa1\xc4\xa6\x86\xa6\xad\x16\x1b\x18\x8f\xac\x9e\x98\
+\x8d\x45\xc4\x29\x75\x29\xfc\x4d\xb6\xed\xaa\x8a\xd1\x8b\x53\x49\
+\x54\x8d\xf4\x54\x13\xd4\x62\x73\x55\x45\xbd\x63\x29\xa9\x00\x9f\
+\xd2\x67\xf3\x1a\xd7\x4b\x6e\x89\xbe\x5d\xde\x99\x84\x94\xf4\xca\
+\x46\x09\xf7\x9c\xca\x65\x83\x00\x25\x4a\x48\xb3\x1b\x93\xd0\x4c\
+\xd9\x87\x56\xd4\xa8\x94\xd2\xc9\x60\x4f\x6e\x64\xa5\xae\x6d\x6b\
+\x09\xe1\xcd\xcc\x24\x5c\xc1\x15\x5d\x3e\xf8\xf6\x8b\x75\x24\x8b\
+\x0c\x4a\xf5\x20\x1a\x9f\x41\x14\x56\xe2\x32\xa2\xa9\xad\xb3\x1a\
+\x01\xbd\xc6\x67\x90\x0e\xb1\xa9\x81\x89\x5a\x93\x0a\x60\xbb\x1e\
+\x09\x8c\x44\x2a\x6e\x04\x71\xa3\x82\xc2\xc4\x43\xa4\xa7\x1d\x61\
+\xab\x0a\xdb\xe7\x20\x64\x46\x2a\x81\xd2\x57\x4e\x80\x75\xc0\x13\
+\xcd\x40\x8e\x44\x34\xe2\x62\x16\xd8\x3f\xb4\xc0\xa4\x62\xf1\xde\
+\x1d\x8c\xdd\x97\x32\xd4\x4e\xd6\xbe\x08\xfd\x63\x0d\x2d\xea\x5b\
+\xaf\x58\xd4\xa7\x9b\x81\x0f\xe5\x86\x94\x4d\xe5\x16\xbd\xe0\x06\
+\x1b\xc6\x39\x8f\xae\x9f\x88\x71\x12\x40\xc3\x5b\x89\xa0\x6b\x53\
+\x25\x2c\x39\xbf\x31\x35\xed\x75\x50\x7d\xe5\xda\x70\x0d\x30\x4f\
+\x04\x49\x6a\x04\x04\x9f\xc4\xd9\xf6\x84\xaa\x94\x8a\x17\x4f\x51\
+\xfa\x9c\x09\x2d\x3a\xce\x0e\xd6\x1b\xd2\xfc\x1e\x92\xaa\xe2\xd4\
+\xd5\x3b\xe4\xc8\xf6\xe4\x80\x26\xa3\x34\xc3\x4e\x95\x67\xbd\x37\
+\xf0\xdf\x8b\x37\x1f\xac\x23\xa6\xa8\x8a\xca\xe0\xff\x00\xe4\x78\
+\x8a\x08\x15\x6d\xd6\x59\xa4\xad\x56\x8a\x94\x24\x38\x23\xe5\x6c\
+\x89\x53\x13\xd3\xbe\xf0\x83\x0a\x25\xa1\x54\xe8\x5d\xba\x3b\x00\
+\x3d\x6d\x01\xf5\x3a\x4c\xee\xd2\x1b\x9e\x76\xb9\x02\x05\x5d\x4f\
+\x8a\x40\xb2\xa2\x01\xe5\x51\xc0\x87\xa8\x8d\x87\x70\xa4\x46\x7b\
+\x98\x34\x2a\x1f\xb6\x3a\xb0\x26\x9b\xf9\x48\xec\x0c\x68\x57\x70\
+\x76\xdd\x89\xf2\x81\x2a\xd2\x50\x55\xda\xf8\x25\x56\xe7\x77\x53\
+\xd2\x3a\xb1\x2e\xa3\x4d\x56\x85\x54\x6b\x82\x08\xb1\x83\x54\xb2\
+\xab\x73\x6b\xdf\xda\x55\xa9\x74\xac\xbb\xd6\xf6\x56\xdb\xff\x00\
+\xb8\xb6\xfb\xd1\x76\xb7\x16\x3e\xb0\xd5\x88\x55\xcb\x8b\x6d\x57\
+\x2b\xdc\x74\x8b\x61\x48\x97\x56\xa7\x62\x47\x43\x28\x6a\x1b\x5c\
+\x38\xbd\xbf\xa4\x0a\xb4\xc8\x20\x91\x71\x37\xa0\x22\x9d\x3a\xfa\
+\x7b\x2b\x90\xf4\xf8\xdc\x39\x10\x3c\x07\xdb\x8b\x37\xb6\x61\xd2\
+\x5f\x0a\xa8\x37\x3e\xd1\xb5\x29\xec\x7f\x2f\x07\x22\x5b\x80\xaa\
+\x48\x6c\x63\xa9\x7d\xd9\x04\x76\x9e\x0c\x7f\x18\x0d\x0d\x50\x5c\
+\x6d\x3c\xf4\x30\xb4\x8e\xbd\x41\x50\xaa\xbf\x55\x16\x3d\xa2\x76\
+\xbd\x36\x00\xda\xd3\xd5\xd5\xc6\xd6\xb1\xc7\x48\xd5\x60\x52\xcd\
+\xf2\xdb\x1e\x90\x4d\x4a\x81\x8d\xaf\x66\xe9\x18\xc8\x19\x6e\xa2\
+\xec\x39\x88\x09\xb7\xcd\xd3\xa1\x8c\x15\x0f\x3f\xac\x08\x30\xa6\
+\xf9\xbc\x6a\x57\x0c\x36\xd5\x1b\xc7\xaf\x22\x0d\x45\xde\x37\x01\
+\x99\x23\xb5\x8e\x71\x19\x35\x78\xbf\x65\x36\xce\x9d\x8e\xef\xca\
+\x79\x85\x41\xf7\x83\x4a\xa8\xcf\x79\x1d\x17\xe0\xde\xc7\xbc\xa8\
+\x55\x4a\x98\xa9\x86\xe8\xe2\x16\x26\xd4\xa6\x69\xb5\x8f\xd2\x2c\
+\x8b\xe0\xca\xac\xe5\x36\xb6\x48\xca\x9e\xf1\x55\x2a\x02\xdb\x58\
+\x7b\x19\x2c\x4b\x50\x15\x89\xa9\x63\x93\x8f\x59\x46\xa1\x6f\xc4\
+\x99\xc1\xb7\x13\x50\x52\x88\xdb\xcf\x98\x77\x11\x9a\x62\x48\x23\
+\xa1\x80\x97\x56\xdb\x7c\x4a\x29\x2a\xf4\xc1\xbf\x11\xa2\x05\x2e\
+\x2b\x03\x28\xa2\x0f\x8a\x4f\xa4\x53\x21\x5a\x9d\x70\x65\x09\xe5\
+\x63\xeb\x33\x5a\x87\x7c\x35\xad\xf1\x2a\x57\x3c\xa9\x1f\xb1\x89\
+\xf8\xb5\x8e\xba\xaf\x4b\x18\xcd\x08\xbf\xc4\x34\xe6\xfd\xff\x00\
+\xac\x9f\xe2\xee\x06\xba\xae\x7a\xc2\x7f\xd9\x7c\x42\xf8\xf2\xcc\
+\xd3\x79\xaa\xdb\xb8\x23\xf6\x9e\x66\x04\x83\xf5\x99\xa7\xc6\xa1\
+\x07\xfb\xa7\x4f\x8c\x91\xa9\x37\x7c\x77\x93\xea\x0f\xde\x1e\x9d\
+\x23\xb2\xd5\x14\x1f\x79\x35\x5b\x9a\x84\xde\x6a\x07\x94\x80\xd7\
+\xed\x99\x88\x73\x9f\xac\xf5\xac\xa2\xe7\xe6\x33\x40\xe3\x1c\x48\
+\x1d\x44\xd8\xe6\x53\x4c\x5c\xfa\x49\x14\xdb\x89\x45\x16\xb4\x29\
+\x8a\x54\x0e\x82\xe6\x39\x69\x91\x4c\x0f\xac\x4d\x23\x91\x6c\x93\
+\x2c\xbd\x86\x32\x66\x6d\x6a\x16\x10\x27\x98\x8c\xcd\x59\xa0\x77\
+\x9a\x9f\x35\x8f\x02\x65\x0c\x0b\x01\x98\x62\xf7\x00\x0e\x66\x2d\
+\x8d\xf1\x18\x8b\x77\x03\xd6\x05\xb5\x6c\x1f\x3d\x05\xa0\x1c\x8b\
+\x5b\x13\x5f\x35\x18\xf7\x33\x6d\xe5\xe3\x32\x25\x05\xef\x1d\x49\
+\x05\xc5\xc4\xc5\x1e\x91\xf4\x56\xe0\xd8\x71\xcc\x96\x36\x9a\x59\
+\x4a\x9c\x82\x63\x52\x8d\x88\x00\x62\x10\x51\x61\xc6\x63\xe8\xf6\
+\x23\x13\x16\x9c\x7a\x9a\x01\x1b\xb6\xe2\xc7\x89\xb6\xb0\x9a\x38\
+\x99\x69\x3b\xd0\xea\x38\x82\xb4\xec\x73\x6b\x4a\xef\x61\xe9\x17\
+\x52\xd6\xb8\x88\x24\x80\xa3\x11\x0f\x72\x63\x2a\x3d\xb9\x8b\x73\
+\x78\xc0\x59\x03\xaf\x1d\x62\xd9\x43\x10\x17\x83\x0e\xa5\xca\xd9\
+\x78\xea\x66\x69\x47\xdf\x0e\xbf\xc4\xd0\x3f\x50\x45\x2d\x1a\xaa\
+\xfc\xc7\x32\x15\x1b\xdc\x0e\x49\xc9\x3e\x92\xad\x5b\x2b\xd7\xb2\
+\xe4\x5a\xc6\x22\x90\xdb\x4e\xa3\x11\x9e\x04\xa2\xa9\x75\x55\x37\
+\x39\xb9\xb0\x82\x78\x04\x64\xf5\x99\x50\x7d\xe1\x26\x62\x9f\x29\
+\x06\x68\x34\x73\xbb\xf4\x10\xe9\x30\x15\x40\xea\x62\xbd\x4f\x3c\
+\x42\x44\xbb\x82\x0f\xac\x90\x5f\xe6\x37\xb4\x34\xa2\xd5\x08\x41\
+\x8b\x9e\x4f\x48\xd6\x14\x41\x6f\x29\x66\x27\x17\x8e\xa6\x1a\xc4\
+\x00\x32\x2d\x89\x6a\xc5\x34\x91\x17\x46\xe1\x01\x0c\x9c\xb7\x78\
+\x9d\x45\x86\x8c\x29\x39\x67\xfe\x23\x34\xc4\x96\x75\xb7\xcc\xb7\
+\x81\xab\xb0\xa5\x44\x30\xbf\x3c\x7b\xcc\x10\x20\x54\x55\x43\x90\
+\xd9\x36\x8d\x5a\x20\x0e\x2f\x7e\xb1\x55\x86\xc7\x5c\xf2\xb2\xbd\
+\x3b\x86\x5d\x80\x82\x40\xb8\xf6\x8d\x51\x05\x6a\x65\x18\xae\xdf\
+\x29\x89\x23\x1b\x4f\x4e\x27\x66\xb2\x2d\x45\x06\xdd\x33\x21\x65\
+\x55\xa8\x77\x10\x6d\xd2\xd2\x95\x58\x80\x95\x26\xc4\x47\x53\xda\
+\xf4\xb6\x91\x72\xb9\x1e\xd0\xaa\xa5\x2d\xd7\x03\x06\x7a\x89\xa6\
+\xac\x08\x53\x7f\x78\xe8\x01\x40\xc4\x6d\x10\xfc\x12\x56\xf6\xe2\
+\x3d\xe9\xa9\x17\x55\x36\x39\x10\xa9\xff\x00\xa7\x6b\x1e\x6d\x2d\
+\x38\x9d\xcd\xe9\x15\x61\x7f\x78\x29\x4a\xf4\xb7\x0c\xd8\xda\x32\
+\xab\x2e\xf2\x00\xc4\xdd\x21\x09\x58\xa8\x38\x22\x41\x29\xa8\xc8\
+\x76\x5a\xe0\x72\x0c\xf0\x2b\x50\xee\xa6\x40\x3d\x54\x98\xcd\x6d\
+\x34\x35\x4b\xa1\xf2\x9f\xd8\xc8\x88\x21\xf0\xa2\x6a\x76\x2a\x97\
+\xa8\xf4\xec\x73\x6e\xc6\x05\x65\x5a\xab\xbd\x0d\x9b\xb4\x6d\x17\
+\x46\x01\x2a\x8d\xc8\x71\xea\x22\xea\x51\xf0\xaa\x6f\xa5\xe6\x43\
+\xdf\x91\x08\x89\x45\x37\xb9\x36\x3d\xa3\x43\x11\x99\x8e\x01\x03\
+\x03\xd0\xf6\x98\x6e\x05\x9b\xe8\x44\x7d\x4e\x86\x82\xb2\xdc\x52\
+\xaa\x7c\xa7\x83\xda\x7b\x5c\x9e\x15\x5d\x87\xe8\x67\x3d\x2a\x6d\
+\x39\xfa\x4e\x9e\xa1\x8e\xa3\x41\x4e\xaf\xe2\x4c\x1f\x69\x9b\x32\
+\x9d\xd8\x91\xbc\xc9\x7e\xa2\x01\x00\x1e\x32\x61\x2d\x50\x78\xcd\
+\xf1\x78\x37\x0b\x93\xcc\x51\x46\x9e\x73\x34\x82\xab\x88\x7b\xc0\
+\x6f\x96\xfe\x90\x82\x86\xe7\x12\xd0\xf1\x6d\xf7\x07\x91\x6b\x18\
+\x6c\x08\x22\xfd\x66\x56\xa4\xa1\xce\xd7\x06\x36\xa8\x36\xa6\x0d\
+\xae\xa2\xfe\xf0\x26\xfc\x2d\x77\x6b\xa9\x9e\x36\xa3\x37\xbf\xfc\
+\xbc\xe5\xfc\x4d\xfc\x4d\x6d\x66\x1f\x98\xda\x77\x3e\x14\xa1\x3c\
+\x6a\xa4\x8f\xbb\xa6\x17\x3d\x3a\xcf\x9f\xd4\x5d\xaa\xde\x3c\x7d\
+\x57\xc2\x1d\xad\x8c\xdc\x4f\x69\x89\x3a\x9a\x79\xfc\x42\x63\x8b\
+\xe6\xfd\x66\xe9\xb1\xa9\x5b\xf4\x37\x9d\x18\x0a\x90\x37\x9e\x6c\
+\x24\xe4\x02\xf6\x0b\x2a\xf0\xc0\x4c\x75\x30\x3c\x32\x03\x36\x31\
+\x89\x24\xcd\xfe\xa6\x00\xb0\xc4\xf0\x37\x36\xb5\xa1\x14\xc9\x3d\
+\x66\x2a\x92\x4f\x61\x10\xf0\x36\x8e\xa6\x48\x39\xc0\x8a\x20\x0e\
+\x05\x8c\x35\xb9\xb7\xef\x24\xaa\x95\x43\x71\x6e\x2f\x28\x4a\x97\
+\xeb\x99\x2d\x02\x03\x0b\xc2\xa6\x40\x60\x2d\x33\x63\x4b\x43\x5f\
+\x30\x86\x56\xf0\x53\x2b\x34\xe0\x58\x4c\x13\x54\x8e\x23\xe8\x9c\
+\xb3\xdf\x0a\x24\x61\x8d\xed\x28\x7b\xad\x15\x4e\xa7\xcc\x60\x5e\
+\x02\xe6\xf1\xaa\xb7\x36\x27\xd6\x29\x32\xb9\x8e\xa4\x56\xdb\xbb\
+\x19\x13\x42\x00\x36\x8e\x4c\xf0\xb2\xb6\xdb\xc2\x07\xca\x4f\x5e\
+\x91\x5b\x6e\xd7\x22\x65\x29\x56\x51\xdb\x11\xf4\xcf\x97\x9b\xc8\
+\x46\xec\xca\x68\x30\xbe\x4c\x2c\x2a\xd3\xd7\x89\xa6\xc2\x0a\xb0\
+\xe2\xf0\x96\xd7\x3d\xa6\x5a\x65\xc5\xba\x40\xb8\x06\x6d\x42\xaa\
+\x31\x98\x91\x58\x74\x12\x01\xd4\x53\xb6\x46\x04\x49\xda\x83\x9b\
+\xb1\xfd\xa3\x5e\xa8\xc8\x36\x37\xef\x24\xab\x7d\xdc\xe6\x6a\x0a\
+\xc7\x2c\xcd\xe9\x19\x49\x76\x2d\xfa\x99\x9a\x74\x0e\x7d\xa1\xb8\
+\x24\xb1\x1f\x84\x58\x4d\x54\x8c\xd4\x21\x99\x87\x04\xc7\xd4\x1f\
+\x70\x85\x47\x39\x22\x4b\x54\x5e\xa0\x51\xc5\xe3\xdd\xf6\xb5\xbe\
+\x82\x41\x2d\x54\x22\xf6\xfd\x7d\x24\xfb\xf6\xb8\xed\xd0\x4e\x93\
+\x85\xa8\xbb\x4e\x18\x7e\xf2\x2d\x46\x9f\x63\xee\x69\xa9\x45\x8c\
+\xb5\xcd\x8d\xed\x1c\x8b\xb5\x48\xeb\x69\xba\x0a\x62\xbd\xc9\x36\
+\x5a\x62\xec\x7d\x21\x6e\xd8\x77\x5b\x27\x8b\xc2\xa6\x85\xf2\x2b\
+\x37\x41\x0e\x8d\x66\xa7\x95\xb6\x3d\x20\xa3\x23\x52\x65\x62\x43\
+\x13\x81\xd2\x02\x15\x14\xce\xeb\xf3\x69\x15\x09\x5c\x9a\xfe\x23\
+\x63\x71\xb1\x23\xb4\x76\xae\x89\x66\xa2\x14\xee\x5b\x1b\xfe\xb2\
+\x64\xdb\x73\xb7\x6b\x02\x2f\x2d\x2f\x7d\x10\xaa\xa4\x6f\x41\xb6\
+\x66\x98\xe7\xd5\xdc\xc3\x79\xe2\xf6\xbc\xa3\x42\x05\xc1\xbd\xba\
+\x13\x0e\x9b\x52\x75\x74\xaa\x40\x37\x06\xe0\x4c\xa7\x4d\x69\x3e\
+\x0b\x14\x6c\x5c\x71\x1d\x0a\x43\x21\x52\x09\xb7\x4b\xc4\xd6\xa4\
+\x19\x33\x9e\xc6\x61\xa9\x4d\x5b\x76\xc2\x41\xf9\xae\x61\x23\x80\
+\xde\x54\xb8\xea\x2f\x32\x52\xf8\x24\x5f\x1b\x84\xc3\x4a\xc4\x15\
+\xe2\x74\x94\x23\xe4\xd1\xb7\xad\xe1\x78\x49\x7b\x9a\x63\xdc\x18\
+\xfe\x96\x21\xa5\xe5\x5d\xad\xc7\xf1\x0c\x2d\xaf\x73\xeb\x28\xa9\
+\x4e\x88\x1c\x11\xed\x06\x9a\x50\x2c\x01\xa8\x57\xd4\x88\x6a\xc7\
+\x3a\xaa\x1c\xf3\xcd\xa6\x69\x14\xfd\xa0\x03\x3a\x3a\x9d\x20\x03\
+\xcb\x55\x4c\x90\x52\x6a\x55\xd5\x9b\x76\x0f\x36\x9a\x97\x46\x02\
+\xb5\x15\x0c\x40\x27\x3d\x27\x3b\x50\x1e\x95\x42\xa6\xfe\x97\x13\
+\xb6\xf4\xc3\xb6\xce\x09\xe2\x4f\xa9\xa2\x19\x76\xba\x82\xc2\x3c\
+\x6a\xb1\xc9\x0e\xd6\x17\x1c\xe7\x12\xa4\x62\x2c\xdd\x0f\x22\x67\
+\x82\x43\x61\x41\x11\xbb\x36\xa0\xb8\xe4\x76\x8d\xac\xc3\x1a\x90\
+\x7a\x78\x1e\x6b\x5f\xde\x46\xa0\x5c\xab\x8b\x03\xc1\xed\x28\xa7\
+\x54\xa2\xe4\x58\x29\xfd\xa2\xab\x8f\x19\x77\x29\xcf\x22\x50\xd4\
+\xf5\x6c\xad\xb5\xad\xb8\x71\x2e\xd0\x31\x6a\x5e\x1b\x7e\x30\x44\
+\x89\x57\xc4\xa6\x77\x5c\x3d\x3f\xe2\x57\xa2\x3f\x79\x48\x62\x3c\
+\xbc\x13\xd4\x68\xc7\x73\x29\xe8\x63\x2a\xb5\x8d\xbb\xc5\x31\x03\
+\x57\x50\x0f\xcc\x67\x9c\x8b\x2d\xcd\xc9\x18\xb4\x50\xd1\xb3\xdf\
+\xbc\x68\xf9\xf1\x9c\xc4\x28\xd8\xa3\x70\xb1\x30\xc5\x4f\x0d\x09\
+\x1f\x35\xbf\x48\x54\xa0\x05\x0a\x6a\x30\xbe\x6c\x07\x4b\xc7\xf8\
+\x85\xc8\xf2\x2f\x16\xe2\x45\xa7\x7d\xd4\xec\x47\x19\x12\xba\x08\
+\xc6\x90\x63\xde\x66\x98\xe8\x15\x55\xf8\x55\x56\x16\x06\xab\x58\
+\x5f\xf4\xfe\xf3\x85\x5a\x99\x46\x20\x89\xdc\xf8\x99\x14\xa8\x50\
+\xd3\x9c\x95\x50\x48\xff\x00\x9f\x59\x00\x60\x7c\xb8\x03\xa1\x87\
+\x1a\x6b\x98\xd4\x1c\x2d\xca\x10\x3a\x13\xd6\x2e\x8d\x32\x2a\x3b\
+\x12\x06\xd4\x32\xdd\x4a\x30\x24\xb3\x7b\x66\x4f\x45\x2d\xa7\xaa\
+\xe7\xad\x97\xfa\xff\x00\x49\xd3\x58\xc7\xab\x28\x0e\xa9\x6c\x01\
+\x68\x35\xd5\x45\x90\x74\xc9\xf7\x95\xb2\x87\x6d\xd6\xb9\x1d\x62\
+\x58\x77\x07\x37\x37\x94\xa5\x1b\xd3\x00\x5e\xdc\xc0\x64\xed\x89\
+\x55\x54\x02\xd8\xc7\x78\x01\x05\xb2\x39\x3c\x4d\x0c\x4f\xe1\xde\
+\xdd\xa0\x65\x49\x95\xb5\x88\xb5\x80\x8b\x65\xbf\x00\x48\x61\x74\
+\x49\xdd\xd6\x3d\x01\xb8\x69\xea\x48\x37\x74\x85\x4a\xf7\xb7\xe8\
+\x64\x56\x53\x3e\x51\x88\xc6\x50\x73\x25\x57\xe9\x7c\xc7\x50\x0c\
+\xc7\x1c\x0e\x4f\x49\x8b\x09\xd4\x55\x77\x6f\x3f\x2a\xe4\xcc\x66\
+\x2e\xe5\x8f\x53\x31\xdc\x30\x08\x83\xc8\x3f\x73\x0a\x9a\xdc\xe4\
+\x8f\xd6\x64\xb5\x49\xbd\xa5\x14\x06\x7d\x04\x56\xdd\xbd\x89\x8d\
+\x63\xb1\x6d\x7c\x99\x13\x71\x71\xd4\x09\xe2\xc1\x41\x26\x29\x0b\
+\x0c\xf2\x0c\x26\xcd\x85\xbe\xb0\x4d\x0c\x08\x36\x19\xed\x19\x4f\
+\x76\x39\x81\x45\x0e\x4d\xa3\x40\x3b\x6d\x0a\x61\xb4\xde\xc6\xd2\
+\x80\xd8\xc1\x90\x8f\x2b\x47\x23\x5c\x5f\x2a\x04\xcd\x85\xad\x7d\
+\xc6\xdf\x58\x97\x20\xfc\x98\xb7\x30\xea\x54\x26\xea\x06\x22\x2a\
+\x60\x58\x5c\x7b\x46\x02\xab\xbd\x98\x08\x58\xa8\xb7\x07\xcc\x20\
+\xd6\x5d\xf6\x37\xb3\x5a\x0d\x22\x43\x8e\xe0\xcd\x05\x5a\x62\x12\
+\x99\x27\x98\x35\x8e\xda\x03\xb9\x30\xb5\x3b\x52\x92\xb2\xf0\x7a\
+\x49\xf5\xd5\x10\x05\x5d\xc4\x62\xf6\x84\xec\x82\x90\x53\x5e\xf7\
+\xdc\x62\xea\xb7\x9a\xfc\x92\x7f\x48\x34\xeb\x28\x0f\x61\x6f\x58\
+\x96\xa9\x99\xac\x65\x47\x89\x75\xc1\xf3\x09\xea\x8f\xe2\x27\x9b\
+\xeb\x21\x15\xc2\xb5\xc5\xe3\xe8\xb8\x76\x05\x45\xef\x8b\x47\x16\
+\xae\xd2\xaf\x81\xa0\x76\xe7\xc4\x60\x3e\x91\x15\x07\x98\xe6\xe3\
+\xa4\xa3\x55\x55\x69\x6d\x41\x94\x45\xb1\xf7\xeb\x14\x1f\x4b\x56\
+\x9e\x2a\x05\x61\xd0\xcc\x94\xce\xd6\xb5\xb9\xbc\x63\xfc\xa0\xfa\
+\xe6\x0d\x65\x5d\xff\x00\x30\x2b\xe9\x1b\xa7\x56\x61\x8b\xb2\x8e\
+\x45\xb8\x88\x0a\x9e\xf8\x32\xfa\x7b\xa9\xd0\x14\x70\xc4\xae\xe3\
+\x7e\xfd\x20\x53\xd1\xa1\xfb\xf6\x0c\x29\xa8\xbf\xbf\xa4\x9c\xbb\
+\xf8\xc6\xaa\xb1\x56\xbe\x31\x0f\x4f\x87\xd3\x54\x76\xba\x92\xac\
+\x56\xdb\x4e\x66\xa3\xb5\x1e\x50\xb2\x13\x90\x78\x99\xa8\x15\x05\
+\x64\xa8\x88\x2c\x40\x37\x1d\x0f\x69\x55\x25\x6a\x83\x75\xec\x4f\
+\xcc\xb6\xc1\x81\x12\x84\x75\xbd\x34\x43\x7e\x41\x13\x45\x2a\x96\
+\x05\x4e\xc6\x1d\x08\xe6\x15\x3a\x4b\x45\xbc\xd7\x5b\xf5\xe6\x53\
+\x75\xe4\x58\x89\x9d\x24\xd3\xa7\x52\xd9\xbd\xbd\xe6\x9a\x60\x1b\
+\x96\x23\xeb\x1a\x45\xc7\x97\x77\xf4\x8b\x20\x29\xbb\x6d\xb7\xa9\
+\x81\x60\x03\x90\xe0\xfa\x77\x9a\x28\xab\xe4\x28\xbf\x62\x26\xaf\
+\x86\xdc\xd4\xb7\xa2\x88\x64\xd3\xe0\xef\x23\xbc\x93\xcf\xa7\x0d\
+\x44\x86\x4e\x27\x39\xe9\xbd\x26\xba\xef\x51\xd8\xf1\x3a\xd4\x8e\
+\xc5\x21\x03\xd4\x5f\xfc\xb3\xfa\x44\xbd\x64\x6b\x91\x65\x6e\xc4\
+\x71\x29\x6a\xb1\x3d\x20\x1b\x6b\x32\xe7\x9b\x88\x55\x28\x53\xaa\
+\xbb\x90\x92\x61\x91\xbd\x0b\x6c\x17\x5c\xdd\x4c\xf2\xdb\x91\x90\
+\x73\x24\xe4\xea\x69\x32\x30\x6b\x9e\x6d\x78\x55\x55\x7e\xcf\x49\
+\xad\x62\x6f\x73\x3a\x1a\xb4\x15\x54\xa1\xf9\xb9\x53\x39\xf5\xc5\
+\x92\x92\x31\xb7\x3c\xcd\xcb\xac\xd8\x90\xa7\xde\xba\xde\xe0\x83\
+\x68\xa4\x2a\x0e\xcb\x67\xbc\x7a\x63\x52\x86\xff\x00\x8a\xd2\x6a\
+\xa7\x6b\x92\xc3\x83\x37\x19\x32\xde\x70\xea\x72\x30\x47\x78\x62\
+\x9e\xcd\x75\x35\x19\x5b\x8b\x45\x80\x19\xb7\xa9\xbe\xde\x44\x7e\
+\x8e\xf5\x6a\xa1\xfc\xad\x7f\xa4\x14\x72\xb5\x04\x7d\xb2\xa7\x6d\
+\xe7\xf9\x9e\x04\x25\x4f\x35\xc8\x1d\xa7\xaa\x12\xd5\x9c\x8e\x4b\
+\x18\x3e\x23\xed\x20\x73\xed\x3a\x32\x6d\x7d\x46\xfb\x95\xa7\xb7\
+\xb1\x26\x62\x32\x04\x0a\xc4\xb1\x39\x32\x6c\xb3\x58\x9c\x9e\xf1\
+\xa8\x03\x31\x20\xe3\xfa\x4b\x16\xa8\xdf\xb0\x28\x50\x01\x27\xb4\
+\xee\x7c\x1e\x89\x70\xac\xc3\x0b\xe7\x37\xff\x00\x9e\xd3\xe7\xe8\
+\x5e\xa5\x65\x1c\xdc\xcf\xa8\x5b\x69\xfe\x0f\x51\xef\xb4\xd5\xf2\
+\xa9\xf4\xff\x00\x97\x9c\xf9\xf4\xd7\x17\x2b\x5b\xa8\xf1\xf5\xb5\
+\x1a\xf8\x38\x1e\xd1\x25\x8d\xa0\xaa\x90\xe0\x82\x1b\x33\xc6\xf7\
+\x20\xe2\x58\x87\x6f\x11\x08\xe4\x88\xba\xb4\xc2\x69\x55\x40\xf9\
+\x98\xb7\xf4\xfe\xf0\x91\x88\x71\xb3\x93\x89\x46\xa5\x01\xaf\xb3\
+\xf2\x00\x0f\xd3\x98\xea\x4f\x54\x5a\xc0\x7b\x98\x92\x6c\x6c\x72\
+\x23\x0d\xcb\x12\x0e\x6f\x9e\xf0\x19\x6e\xdd\xad\x18\x18\xc8\x19\
+\x6f\x14\x52\xcf\x62\x2c\x3a\x5c\xc6\x93\xdb\xa4\xf2\xf0\x7f\x68\
+\xea\x25\x85\xf8\x16\x8a\x23\xb4\xac\x85\x07\x8b\x7b\x45\x9a\x40\
+\x92\x41\xbc\x65\x00\xa5\x6e\x3a\xcd\x01\xb7\x63\xa4\x6a\x2d\x88\
+\x8d\xa5\xa7\x00\x0a\xb5\xc9\x54\x3c\x0e\xad\xed\x0d\x25\xd3\xa0\
+\x5c\x12\x08\x55\x1f\x31\x3c\x08\xcd\xe0\xaf\x83\x4f\x09\xfb\x93\
+\x3d\x52\xa6\xf5\xd8\xaa\x15\x07\x0a\x22\xe9\x8c\xf7\xf5\x82\x1a\
+\xd9\x30\x79\x8e\x52\xa8\x2f\xd6\x24\xb2\xdf\x1c\xf7\x8c\x41\xb9\
+\x4b\x1f\x94\x75\x81\x3a\x83\x59\xbc\x42\x30\x38\xbc\xd0\xca\x5a\
+\xec\x3a\xf7\x92\x55\xd4\x1e\x38\x1c\x09\xa1\xfc\xb7\xbc\xb1\x6b\
+\xa0\x8e\x99\xb0\xb0\x13\xcd\x52\xff\x00\x2c\x92\x9b\x60\xfb\x42\
+\x46\x2c\x0a\xa8\x30\xc3\xaa\xe9\x39\x00\xc2\x04\x9b\x01\x13\x48\
+\xaa\x8f\x33\x7d\x04\x33\x53\x70\xb2\x63\xfa\xc1\x0d\x88\x42\x77\
+\x1c\xf6\x98\xd5\x6e\x39\xbd\xb8\x89\x2c\x0d\x81\x9e\x51\x71\x7b\
+\x89\x62\x35\x59\x8e\x60\x54\x6e\x93\x69\xa9\xf9\x8c\xf3\x90\x99\
+\xe4\xc9\x13\x53\x75\xb2\x6c\x22\xce\xa4\x2e\x08\xbf\xaf\x59\xea\
+\xed\x7c\x99\x0d\x46\x06\xe4\x1c\x89\xa9\x34\x5a\xe9\xf8\x8c\xcf\
+\x4f\x3b\x91\xb0\x6d\xd2\x4d\xf1\x4f\x2e\xa5\xb3\x75\xb6\x08\x87\
+\xa2\xdc\xcc\xac\xbc\xac\x96\xad\x70\xd5\x1f\xc4\x5c\x13\xf4\x94\
+\x9d\xaa\xf2\x3d\xe9\x1e\xf2\x57\xa9\x93\x98\xf6\x52\xb4\x89\x5f\
+\x32\x93\x83\xda\x4a\xea\x77\x1b\xde\x6e\x33\x40\x58\x99\xd0\xf8\
+\x53\x14\x0d\x54\x8c\x2e\x14\x77\x32\x5d\x36\x92\xad\x62\x00\xf2\
+\xaf\x56\x3d\x23\xb5\x7a\x8a\x48\xa3\x4f\xa6\x17\x55\xfc\x5d\xcf\
+\x79\x5e\xfa\x53\xfa\xa9\xaa\x58\x90\xc7\x72\x9e\x62\x35\x14\xd9\
+\x18\x14\x03\x69\xe0\x89\x35\x0a\xac\xa7\x39\x07\x99\x6a\x30\x2b\
+\xe5\x20\xa1\xe5\x48\x87\x87\xd2\xd1\x80\x00\x1b\xfb\x89\x76\x96\
+\xb3\x51\x24\xa1\x06\x4a\x74\xac\x7e\xf2\x8f\x99\x47\x40\x72\x26\
+\x0d\xe8\x6f\x63\x0b\x95\x3a\x0f\x5d\xeb\x67\x7e\x47\x48\x48\x03\
+\xb0\xf1\x10\x7a\x93\x89\x02\x30\x3e\x6e\xc6\x52\xda\x9a\x85\x2d\
+\xc8\x99\xc6\xb5\x6a\xd6\xa4\x6a\x11\xe1\xbb\x29\x39\xb7\x48\xf5\
+\xaa\x89\x73\xc2\x91\xee\x67\x25\x59\x1a\xc4\xab\x21\xee\x25\x34\
+\x6a\x56\x51\xe4\x1b\xd4\xf2\x39\x99\xb0\xca\xbd\x75\x0a\xbf\x28\
+\xde\xbf\xee\xe6\x10\xa8\x8d\x72\xa7\x69\xf4\x91\xa6\xa1\xc1\xb8\
+\x44\x53\xd8\xe2\x36\x96\xb0\x93\x62\x8a\x3e\x98\x86\x1d\x13\x6f\
+\x0d\x8a\x84\xfb\xc3\x15\x48\x16\x67\x5b\xcc\x6d\x42\x5b\x21\x01\
+\x3d\xa0\x87\xa6\x7f\x0d\xef\xd9\x6f\x04\x35\xad\x4f\x71\xba\x67\
+\xb8\x9e\x7a\xd7\xf9\x18\x0f\xa4\x2a\x74\x95\xf2\x11\xc7\xd2\x17\
+\xd8\x95\x8e\x2a\xaa\xfa\x34\xba\x5d\x93\xba\xa0\x20\xab\x91\xd8\
+\x81\x31\xab\x33\x1b\x55\xf3\xdf\xf1\x70\x61\x7d\x9e\xaa\x92\x13\
+\xf6\x31\x55\x43\x2b\x59\xd6\xdd\x7b\x45\x1b\x4a\xb0\xa4\xe2\xcc\
+\xc4\x1e\xf3\x5a\xb3\x07\x22\xd6\x2a\x48\x32\x4a\xac\x97\x00\xb6\
+\x6d\xd6\x1d\x56\xfb\xca\x6d\x7c\x54\x5b\x5f\xd4\x4b\x16\x9d\xbf\
+\xc5\xa5\xb8\xf0\x39\xf7\x93\xea\xe9\xf9\x56\xf9\x2b\xd7\xbc\x66\
+\x80\x8b\xd6\xa4\xe4\x0b\x8e\xbd\x0c\x0d\x43\xb0\x2a\xa7\x1e\xf2\
+\x9e\x84\x06\xeb\x59\x0e\x0f\x9a\x22\xb0\x26\xa3\x82\x06\x09\x94\
+\x3d\x97\x50\xa4\x7c\xa5\x86\x3b\x48\xf5\xc5\xa9\xea\xea\x0b\x5f\
+\xcc\x7f\x99\xd2\x33\x5a\x18\x25\x30\x09\xc9\xc1\x97\xfc\x1c\x6c\
+\xaa\x4b\x7c\x8a\x84\xce\x2b\x31\x37\xe7\x99\xd7\xd1\x1d\xbf\x0e\
+\xd4\x3d\xf2\x14\x28\xfa\xcb\x94\xe9\x44\xba\xed\x3a\xd2\xd4\x91\
+\x6f\x23\x0d\xca\xc3\xa8\x92\x35\x3b\x8b\xa3\x63\xd7\x13\xa8\x96\
+\xd5\x68\x8d\x32\x7e\xf6\x95\xca\xdb\xa8\xed\x39\x60\x33\x12\x2f\
+\xc7\x37\x9a\xe3\x45\x2d\x90\xd3\x4b\xb7\xcc\x4e\x27\x94\x85\x4b\
+\x75\x33\xcc\xec\x5c\x76\x13\x0b\x2b\x3f\x63\x34\x1d\x0f\x83\x51\
+\xf1\x2b\x83\x63\xc8\x00\x8e\xe6\x74\xfe\x33\x58\x16\x5d\x3a\x7c\
+\x94\xc5\x8f\xbc\xdf\x82\xd1\x1a\x5d\x03\x6a\x9f\x2a\xab\x71\xee\
+\x7f\xf5\xfc\xce\x63\x56\xf1\x3c\x4a\x84\xf2\x67\x2f\x6b\x5e\x44\
+\xfb\xc8\xa9\xce\x04\xa4\x54\xf3\x10\xc2\xf2\x2a\x8e\x08\xbe\x3d\
+\x63\x0b\xfd\xe5\xbb\xda\x6e\xc6\x57\xe8\x95\x7e\xd0\x2a\x0e\x29\
+\x8d\xd6\x9e\x62\x76\xb3\x9e\x58\xda\x26\x9b\x05\xa5\x8b\xdd\x8e\
+\x23\xc7\x17\x6c\x85\x17\x3e\xf3\x0d\x25\xc5\xf9\xcc\x05\x62\x4e\
+\x2f\x78\xf5\x55\x07\xef\x0e\x7a\x81\x06\xe3\x84\x5b\x09\xa0\x02\
+\x87\x96\x36\x1f\xbc\x2f\x40\x00\x1d\xcc\xf1\xc9\xb7\x22\x78\x82\
+\xc6\xd7\xf6\x16\x92\x0d\xb3\x70\x6f\x36\x85\x2a\x95\x1f\x6a\x29\
+\x31\xcb\xa7\x44\xcd\x76\x2a\x79\xd8\x39\x3f\xda\x61\xac\xcc\x36\
+\x28\x08\x9f\x95\x7f\xaf\x78\x6a\x35\x05\x1d\x39\x26\xe2\xb5\x4e\
+\x07\xe5\x1f\xde\x2e\xa6\xea\xb7\x76\x37\x6e\xe6\x02\x79\x9c\x28\
+\x19\x32\xa4\xa2\xe1\x6e\x14\xfb\x9c\x40\xa4\x34\xf6\x8b\xb6\x07\
+\xf3\x16\xf7\x61\x60\x2c\x04\xa9\xd5\x6f\x7a\x95\x05\xfb\x28\xbc\
+\x06\x6a\x6b\x94\xa5\xbb\xff\x00\x23\xfd\xa3\x2a\x46\xcd\xd1\x6f\
+\x79\x7d\x35\xf1\xb4\xea\xb4\xfe\x65\xe4\x19\x2d\x5a\x95\x00\xba\
+\x00\xaa\x7b\x28\xc4\x43\x55\x72\x4e\xe6\x27\x1d\x4c\xd6\x68\xf1\
+\x53\xd1\x71\xf3\x2a\x8b\x75\x26\x08\x14\xc7\x35\x8f\xb0\x52\x64\
+\xab\x54\xa9\xc3\x18\x6b\xa9\xab\xf9\xaf\xf4\x96\x54\xb1\x1a\x98\
+\xe3\x36\xfc\xd0\xd4\x96\x26\xec\x00\xb7\x02\x42\x9a\x87\x37\x27\
+\x6f\xe9\x1b\x4b\x50\xc5\x80\xb0\xfd\x21\xf9\x5a\xb8\x28\xdb\x86\
+\x17\xb4\x24\xa4\xd6\xc9\xb4\x90\xd7\x62\x08\x0d\xfa\x45\x1a\x8c\
+\x79\x63\xfa\xc3\x0e\xba\x4d\x4d\x45\xb7\x55\x5b\x8e\xd0\x5a\xa2\
+\xa1\xb0\x52\x4f\x73\x21\x42\xc7\xac\x30\xc6\xf6\x26\x18\xb5\x47\
+\x8c\xcc\x73\x7f\x69\xa5\xc4\x95\x9d\x94\xcd\x15\xfa\x30\x8e\x2d\
+\x6d\x46\xbf\x69\x0d\x43\xe6\x39\xc1\x95\xb6\xd7\xe1\x5a\xf1\x15\
+\x29\x1e\x42\xb0\xed\x71\x1e\x22\xad\xf8\x21\x2c\xd5\xc1\x3c\x21\
+\x33\x91\x55\xf2\xd7\xee\x67\x5b\xe0\xd4\xdd\x17\x52\xe4\x5b\xc8\
+\x40\xfd\xe7\x2a\xbe\x9e\xb7\x88\x6c\xb8\xbc\x67\xb5\x5f\x1b\xa6\
+\xab\x52\x9a\x9d\xac\x6c\x4c\x67\xda\xdf\x6d\xca\x2d\xfb\xda\x4f\
+\xb2\xa2\x26\x54\x8c\xc1\x67\xf2\x88\xe3\x3a\x2a\xfa\xca\xcc\x0a\
+\x13\x65\xec\x22\x03\x91\xd2\x6d\x41\x73\x78\x2a\x0d\xed\x35\x22\
+\x35\x19\x8f\x02\x3a\x95\x57\x43\x78\x5a\x6a\x6a\x50\x86\x36\x63\
+\xc4\xd7\x42\xa6\xd0\x4a\xe8\x55\x2c\x03\x53\x3b\x18\x76\x94\xf8\
+\xa6\xa2\x8b\x85\xdd\xfc\xce\x62\x2b\xa9\xb8\x06\x54\x95\x6e\xd8\
+\xc3\x09\x8b\x1a\x94\xd6\x28\x4d\x88\x2a\x7d\x44\xc0\xad\xc8\x0a\
+\xde\xc6\x3e\x9d\x51\x52\xc2\xb2\x0b\x8e\xa2\x6b\x04\x19\x54\x2c\
+\x3b\x83\x33\xa4\xb4\x2c\x17\xe5\x23\xde\x12\xd6\xcf\x96\xe4\xf4\
+\xdb\x89\x9e\x3b\xf0\x10\x7f\xf6\xcc\xd1\x59\xcf\x40\x3f\xf1\xc4\
+\x91\xe8\x95\xea\x7f\xa9\x48\x5b\xbb\x1b\x18\xf5\xa3\x48\x0d\xad\
+\x5c\x1f\x41\x99\x3a\xa8\x2a\x19\x9c\x86\x3d\xe6\x58\xdb\xca\xc0\
+\xfa\x93\x68\x15\x37\xd2\xd3\xfc\x0c\x7f\xf2\x38\x8b\x7d\x5e\xd2\
+\x05\x1d\x8a\x3d\x16\x28\xf1\xe6\xbb\x7b\x41\x29\x7c\xa2\x91\x89\
+\x62\x3c\x6a\x6b\xb1\xcd\x52\x07\x5c\xda\x53\x46\xa2\xb9\x02\xec\
+\xcd\xe8\x24\xfa\x3f\x87\x55\xaa\x0d\x5a\xc5\xa9\xd2\x1c\x92\x32\
+\x7d\xa5\x3e\x2b\x53\xfb\xbd\x35\x16\x45\xb6\x58\x83\xb8\xc2\xe7\
+\xc3\x15\x29\x5a\x59\xaa\xe0\x0e\xd7\xcf\xe9\x3d\xa9\xd5\xd1\xa8\
+\xa0\x6c\xdc\x07\x1b\xa7\x2a\xae\xf5\xb9\x28\xce\xd0\x55\xaa\xbd\
+\x3b\x10\x41\xc8\xf6\xed\x0f\xca\xd5\xb5\xd6\x96\xdd\xc2\x82\x30\
+\x02\xe4\x13\x98\x03\xc1\xd5\x50\x7a\x68\x0d\x27\xa6\x77\x0b\x99\
+\x1f\x9d\xac\x08\x27\xa4\xe9\x69\x74\x94\xe9\x3a\xab\xbb\x1a\x8e\
+\xb9\x50\x3a\x19\x5e\x97\xa9\x99\xcd\x37\x06\xa2\xed\x62\x2d\x7f\
+\x5e\xd0\xb5\x83\xc4\x40\xd6\xb1\x00\xff\x00\x10\xfe\x3a\x87\xc2\
+\xa4\x79\x75\xe9\xdf\x88\xa7\xa9\xe2\xfc\x23\x72\x9b\x54\xa4\xc0\
+\x93\xd7\x22\x53\xfa\x9c\xff\x00\x9e\xa0\x56\xbf\x22\x23\x52\xbb\
+\xeb\x55\x46\xf9\x95\xcd\xbd\xaf\x1a\x1b\x75\x44\xac\xb6\x19\x1b\
+\x87\x6b\xc2\xd5\x59\xab\xd4\x70\x6c\xea\xc4\x7e\xf3\xa4\xe9\x97\
+\x36\xa2\x58\x86\x53\x3a\x65\xc5\x2f\x84\xa9\x6e\x2a\x56\xfd\x40\
+\x13\x9e\xa3\x3b\x90\xe4\x9b\xdb\xbc\xaf\xe3\x15\x15\x34\x7a\x4a\
+\x56\xce\xd2\xc6\xde\xa6\x37\xbc\x82\x15\x4d\x9e\x85\x7b\xab\x1e\
+\x2e\xa4\x4a\x75\x94\x13\x55\x40\xea\x34\xb6\xdf\xff\x00\x75\x3a\
+\x89\x16\x96\xb0\x74\xf0\x5b\xca\x47\x0d\xfd\x22\xe9\x6a\x2a\xe8\
+\xf5\x3b\xd6\xe0\x83\x6c\xf5\x96\x2d\x4f\xb8\xa1\x21\xa3\x74\x74\
+\x1b\x51\xa8\xa7\x45\x2f\x76\x39\xf4\x13\xa1\xaa\xd3\xd1\xf8\x95\
+\x1f\xb4\xe9\x00\x15\x97\xfd\x4a\x60\xfe\xf1\xbf\xe1\x4d\x39\x5a\
+\xd5\x75\x55\x05\x85\x3f\x28\xbf\x78\xde\x5d\x68\x93\xb5\x7f\x1d\
+\xd4\x7d\x8f\x46\x9a\x34\xc1\xb5\xd8\x4e\x10\xaa\x1a\x83\x11\x83\
+\x78\x5f\x19\xd6\x0d\x4e\xa6\xa5\x42\x79\x26\xde\xdd\x27\x3c\x54\
+\x02\x91\x17\x39\x32\xe3\xc7\x22\xb7\xb3\x4b\xdf\x04\x73\x19\xb8\
+\x9a\x9f\x41\x23\x0e\x4d\xaf\x2c\xa6\x6f\x51\x1b\xa5\xae\x7e\x93\
+\x41\x72\x11\xe2\x2d\x30\x7e\x5c\x18\xfa\xcd\x73\xb6\xfc\x64\xc8\
+\x74\x17\x7a\xfb\x89\x3d\xcf\xac\x70\x25\x9e\xd9\x26\xfc\x4c\x58\
+\xd0\xa9\x00\x4e\x6d\x09\xc8\x01\x61\x52\xa1\x55\xc7\x95\x08\x1f\
+\x99\xb0\x3f\x79\xd5\xa3\xf0\xc5\xd3\xd0\x5d\x4e\xa6\xf5\x8b\x0b\
+\xa8\xa6\xa4\xa8\xf7\x99\xb6\x43\x23\x9f\xa6\xd3\x9a\x8b\xe2\x31\
+\x09\x4f\xf3\xb7\xf4\xef\x1e\x11\x95\x7f\xcb\x53\x2a\x3a\xd5\x7c\
+\x13\xed\xda\x36\xa6\xad\x51\xcb\x2e\x94\xb9\x02\xc3\x79\x22\xdf\
+\xa7\x12\x2a\xba\xdd\x43\x35\xc5\x93\xdb\xfb\x98\x77\x4f\x50\xd5\
+\xd2\xa3\x12\xd5\x2b\x35\xba\xec\x42\x7f\x7c\x09\xe2\xba\x6a\x43\
+\xe4\x07\xd5\xea\x0c\xfd\x04\x8d\xeb\x55\xa9\x7f\x15\xd9\xcf\xab\
+\x45\xb3\xf0\xa0\x5a\xf3\x59\x46\xaf\x1a\xba\x0a\x7c\xae\x46\x38\
+\x44\xb7\xef\x71\x0f\x4b\x52\x8d\x77\x1b\x68\x1f\x52\x58\xce\x36\
+\x4d\x4b\xdc\x03\x3b\x9f\xe1\xf5\x53\xba\xf7\x25\x73\x2e\x53\x22\
+\x97\x68\x75\x55\xa9\x50\xae\x69\x9d\x32\x5c\x77\x63\xfd\xe2\x8e\
+\xaa\x91\xe1\x76\x9f\x40\x2d\x24\xd6\xd6\x6a\x9a\x97\x66\xc6\x6d\
+\x26\x2d\x66\xc5\xcf\xbc\xa7\x15\x6a\xd6\x72\xcc\x45\x3a\xa1\xbd\
+\x2f\x63\x22\xab\x5e\xba\x12\x0b\xba\xfb\xc0\x24\xde\xf1\x86\xb0\
+\x6a\x5b\x6a\x0b\xa8\xfd\x44\xd6\x60\xd2\x8e\xa5\xce\x2e\x8d\xee\
+\xa2\x18\xaa\x30\x5a\x92\x5f\xd3\x12\x6a\xb4\xb6\x8d\xc8\x77\x27\
+\x71\xd3\xde\x78\x31\x16\xce\x26\xb1\x9d\x5a\xaf\xa5\x14\xc9\xa9\
+\x41\xcd\xcf\x2a\xf6\xfe\x44\x75\x27\xf8\x73\x11\x6a\x5a\x90\x7a\
+\x79\xc7\xf6\x91\x54\x61\xe1\x53\x0d\xd7\x31\x9a\x62\xa2\xaa\xe7\
+\x83\x33\x87\x55\xb9\xd1\x00\x71\x5f\xd6\xec\x20\xa3\x68\x2f\x73\
+\xe3\x8f\xa0\x8b\xd7\x28\x0e\xf6\xe2\xf7\x12\x75\x04\x0e\x3e\xb2\
+\x90\xba\x74\xdf\xe1\xf7\xc2\xd7\x3e\xb8\x86\x5b\x41\xd1\x2b\x1f\
+\x72\x27\x3d\x2c\x05\x81\xcc\x3f\xa4\x2c\x5a\xac\xd5\xd2\x81\x8a\
+\x2c\x47\xfb\x9a\x63\x6a\x15\x45\xd2\x85\x30\x3b\xda\xf2\x75\x5b\
+\xf2\x61\x5f\x6e\x2f\x88\x61\x1b\x6b\x2a\x91\x60\x42\xfb\x09\x15\
+\x7d\x45\x52\x6c\x6a\x35\x89\xe8\x63\x2a\x2d\xc6\xe4\xc5\xba\x49\
+\x18\xdd\xc7\xf1\x35\x24\x67\x5d\x4f\x87\x16\xff\x00\xa5\x6a\xea\
+\xdf\x22\xd3\x93\xa9\x2d\xe2\x61\x8e\x47\x79\xd9\xd2\x8d\x9f\xe1\
+\xdd\x5b\x9c\x02\xcb\x38\x95\x0e\xe3\x60\x78\xb4\xb8\xfb\x55\xf1\
+\xa9\x56\xa2\xd3\xb0\x73\xfa\xcd\xf1\x6a\x32\x8b\x00\x4d\xfb\x45\
+\xe3\x81\xc1\x94\x69\x6b\xad\x1a\x04\x1a\x5d\x72\x41\xcc\xd0\x8c\
+\x60\x42\xf9\x94\x5f\xb4\xcd\xab\xc9\x4b\x46\x0d\x55\x16\x27\x7a\
+\x30\x1d\x2d\x98\x26\xb5\x0c\xdb\x07\xa5\xc4\x88\xd4\xa6\x3c\xa6\
+\x69\xda\xd9\x07\x3d\xa2\x91\x94\x8f\x98\x42\x60\x6c\x4f\x36\x92\
+\x53\x4a\xa9\x02\xcc\x41\xb7\x78\xc5\x29\x7b\xb2\x15\xf5\x12\x25\
+\xb9\x5b\xde\x3a\x9d\x7f\x0c\x58\x10\xdf\xc4\xcd\x85\xd0\x53\x49\
+\x80\x0a\xf9\xfd\xe6\x6d\x74\x6b\xa8\xbd\xba\x88\x9a\x5a\x8d\x2b\
+\x8f\xbc\xa4\x41\xf4\x32\xaa\x35\xb4\x0a\x2f\x7a\xc4\xfa\x01\x31\
+\x48\x54\xbb\xb0\x18\x37\x8e\xa1\x40\xb5\x4f\x94\xd8\x1f\xd6\x50\
+\x9f\x11\xd1\xd3\x1e\x5d\x29\xa9\xdb\x79\xb4\x65\x6f\x89\xd4\xa6\
+\x89\xe0\xd3\x4a\x45\x85\xfc\xab\x33\xb4\xf4\x14\xf8\x7e\xaa\xad\
+\xdb\x65\x81\x38\x26\x17\xfd\x3a\x95\x3b\xfd\xa7\x57\x4d\x48\xe9\
+\xba\xf1\x26\xbe\xa6\xb0\x3e\x25\x57\xfa\x98\xb6\xa4\x0b\x65\x8b\
+\x13\xda\x5d\x9e\x97\x53\x1f\x0c\xa6\x54\x29\x7a\x87\xa9\x02\xd3\
+\xa0\x1a\x85\x1a\x22\xa1\xd3\x85\x27\xe5\x42\x6e\x64\x3a\x6d\x32\
+\x69\x69\x8a\xf5\x57\x75\x43\xf2\x21\xe9\xea\x67\xb7\x3d\x56\x2f\
+\x51\xae\x7d\xe6\x2f\x6d\x78\xa5\xbe\x22\xf6\xb1\xa3\x4c\x0e\x33\
+\xd2\x78\x6b\x2a\x35\xfc\x31\x40\x90\x2f\x91\x23\xaa\x97\x22\xc4\
+\x5a\x4d\x54\x3a\xfc\xbf\xa8\x8c\xe3\x06\xd7\x57\xc7\xaa\xc3\x73\
+\xd0\xa6\xe3\xa1\xbd\xa2\xbe\xd1\x41\x5f\x6d\x5d\x32\xaf\x5b\x86\
+\x99\xa4\xd4\x53\xad\xa5\x09\x50\x6d\xa8\x0d\xaf\xde\x0e\xa6\x85\
+\x65\x37\xa6\xc1\xc0\xe8\x44\x33\xe1\x38\xb6\x93\x07\xec\xe1\x87\
+\x70\x3f\x98\x9d\x5f\xc4\xf6\xb3\xa5\x1a\x1b\x5c\x03\xe6\x23\xb4\
+\x5d\xd9\x53\xc4\x55\xb1\x18\x3d\x27\x2f\xe2\xda\xe3\x56\xc6\x8f\
+\x94\x5a\xcf\xeb\x35\xc7\x8e\xd1\x6e\x28\xd5\x6a\x4b\x04\xd4\x31\
+\xde\xb5\x06\xc6\xff\x00\x6b\x0e\x61\x7c\x34\x9a\xf5\x2b\x50\x65\
+\xb7\x8b\x48\x80\x07\x71\xc4\x87\xe1\x60\xea\xb4\xda\x8d\x29\xb0\
+\xc8\x64\x3f\xee\xe9\x1b\xf0\xca\xec\xb5\x69\x54\xda\x43\xd3\xa8\
+\x15\x87\x7b\xff\x00\xf9\x35\x66\x33\xa8\x1e\xa1\xa6\xca\x43\x64\
+\x72\x3b\xe6\x51\xae\xf2\x6b\x1d\xc1\x04\x13\x73\x11\xf1\xe4\xf0\
+\xb5\xf5\xc2\x8c\x2d\x67\x03\xf5\x85\xaa\xac\x1d\x96\xaa\xe6\xea\
+\xbb\x87\xb8\xff\x00\xf6\x6d\x92\xdd\x00\x75\xa8\x87\xc8\x7b\x74\
+\x83\xfe\x24\x62\x35\x94\xd2\xf6\xd9\x45\x57\xf6\x9e\xa2\xfb\x5c\
+\x5a\xcd\x4d\xba\x5e\x1f\xf8\x9a\x91\x3a\xe7\x70\x40\x00\x28\xfd\
+\x84\x67\xab\xe3\x97\x4a\xa1\x05\xaf\xcc\x72\xd6\x4a\xc3\x6d\x63\
+\x66\xfc\x2d\xfd\xe4\x82\xeb\xba\x03\x9b\x01\xeb\xde\x6f\x19\x54\
+\x95\x75\x3a\x2d\x48\xa8\x8c\x55\x87\x04\x70\x44\xfa\xe6\x2e\xff\
+\x00\x06\x2c\x8b\x4e\x9d\x7a\xc9\x91\xc0\x2c\xc0\x5f\xeb\x69\xf2\
+\x1a\x4a\xc0\x94\xa3\x58\x6f\xa6\x48\xe7\xa4\xfa\x0f\xf1\x43\x54\
+\x3a\x7d\x28\xa2\x08\x0a\xbe\x21\x0b\xca\xdf\x8c\x7b\x5a\x73\xe7\
+\x36\xc8\xd7\x1f\x2b\xe7\x3e\x20\xad\x49\xcd\x3a\x8a\x55\x86\x2c\
+\x62\x54\xfd\xc3\x5f\x39\xbc\xbb\x57\xf1\x11\x58\x8a\x7a\xda\x42\
+\xa0\x18\x0c\x30\xc2\x2c\x69\x69\x54\x53\xf6\x5a\xe1\x83\x0f\x95\
+\xb0\x66\xf7\xfa\xca\x44\x24\xcb\xe8\x1d\xb4\x4b\x74\xdb\x63\x17\
+\x4f\xe1\xfa\xbc\x8f\x0b\xeb\x78\xd1\x4a\xad\x2d\x35\x55\xa8\xb9\
+\x04\x70\x65\xa8\xc4\x63\x4a\x8a\x95\x36\x2c\xd7\xbf\xa0\x8c\x1a\
+\x9a\xae\x36\xee\xc1\xe6\xd8\xbc\x92\xa3\x10\x29\x8f\xf6\xca\x74\
+\xaa\x3a\x0c\xff\x00\x10\x31\xff\xd9\
+"
+
+qt_resource_name = b"\
+\x00\x16\
+\x02\x65\x98\x67\
+\x00\x4e\
+\x00\x6f\x00\x2d\x00\x4f\x00\x6e\x00\x65\x00\x73\x00\x2d\x00\x4c\x00\x61\x00\x75\x00\x67\x00\x68\x00\x69\x00\x6e\x00\x67\x00\x2d\
+\x00\x33\x00\x2e\x00\x6a\x00\x70\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/graphicsview/padnavigator/form.ui b/examples/graphicsview/padnavigator/form.ui
new file mode 100644
index 0000000..fc7d123
--- /dev/null
+++ b/examples/graphicsview/padnavigator/form.ui
@@ -0,0 +1,208 @@
+<ui version="4.0" >
+ <class>Form</class>
+ <widget class="QWidget" name="Form" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>378</width>
+    <height>385</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>BackSide</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2" >
+   <item>
+    <widget class="QGroupBox" name="groupBox" >
+     <property name="title" >
+      <string>Settings</string>
+     </property>
+     <property name="flat" >
+      <bool>true</bool>
+     </property>
+     <property name="checkable" >
+      <bool>true</bool>
+     </property>
+     <layout class="QGridLayout" name="gridLayout" >
+      <item row="0" column="0" >
+       <widget class="QLabel" name="label" >
+        <property name="text" >
+         <string>Title:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" >
+       <widget class="QLineEdit" name="hostName" >
+        <property name="text" >
+         <string>Pad Navigator Example</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" >
+       <widget class="QLabel" name="label_2" >
+        <property name="text" >
+         <string>Modified:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0" >
+       <widget class="QLabel" name="label_3" >
+        <property name="text" >
+         <string>Extent</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1" >
+       <layout class="QHBoxLayout" name="horizontalLayout" >
+        <item>
+         <widget class="QSlider" name="horizontalSlider" >
+          <property name="value" >
+           <number>42</number>
+          </property>
+          <property name="orientation" >
+           <enum>Qt::Horizontal</enum>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="spinBox" >
+          <property name="value" >
+           <number>42</number>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item row="1" column="1" >
+       <widget class="QDateTimeEdit" name="dateTimeEdit" />
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_2" >
+     <property name="title" >
+      <string>Other input</string>
+     </property>
+     <property name="flat" >
+      <bool>true</bool>
+     </property>
+     <property name="checkable" >
+      <bool>true</bool>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_2" >
+      <item>
+       <widget class="QTreeWidget" name="treeWidget" >
+        <column>
+         <property name="text" >
+          <string>Widgets On Graphics View</string>
+         </property>
+        </column>
+        <item>
+         <property name="text" >
+          <string>QGraphicsProxyWidget</string>
+         </property>
+         <item>
+          <property name="text" >
+           <string>QGraphicsWidget</string>
+          </property>
+          <item>
+           <property name="text" >
+            <string>QObject</string>
+           </property>
+          </item>
+          <item>
+           <property name="text" >
+            <string>QGraphicsItem</string>
+           </property>
+          </item>
+          <item>
+           <property name="text" >
+            <string>QGraphicsLayoutItem</string>
+           </property>
+          </item>
+         </item>
+        </item>
+        <item>
+         <property name="text" >
+          <string>QGraphicsGridLayout</string>
+         </property>
+         <item>
+          <property name="text" >
+           <string>QGraphicsLayout</string>
+          </property>
+          <item>
+           <property name="text" >
+            <string>QGraphicsLayoutItem</string>
+           </property>
+          </item>
+         </item>
+        </item>
+        <item>
+         <property name="text" >
+          <string>QGraphicsLinearLayout</string>
+         </property>
+         <item>
+          <property name="text" >
+           <string>QGraphicsLayout</string>
+          </property>
+          <item>
+           <property name="text" >
+            <string>QGraphicsLayoutItem</string>
+           </property>
+          </item>
+         </item>
+        </item>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>groupBox</tabstop>
+  <tabstop>hostName</tabstop>
+  <tabstop>dateTimeEdit</tabstop>
+  <tabstop>horizontalSlider</tabstop>
+  <tabstop>spinBox</tabstop>
+  <tabstop>groupBox_2</tabstop>
+  <tabstop>treeWidget</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>horizontalSlider</sender>
+   <signal>valueChanged(int)</signal>
+   <receiver>spinBox</receiver>
+   <slot>setValue(int)</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>184</x>
+     <y>125</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>275</x>
+     <y>127</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>spinBox</sender>
+   <signal>valueChanged(int)</signal>
+   <receiver>horizontalSlider</receiver>
+   <slot>setValue(int)</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>272</x>
+     <y>114</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>190</x>
+     <y>126</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/examples/graphicsview/padnavigator/images/artsfftscope.png b/examples/graphicsview/padnavigator/images/artsfftscope.png
new file mode 100644
index 0000000..b4b8775
Binary files /dev/null and b/examples/graphicsview/padnavigator/images/artsfftscope.png differ
diff --git a/examples/graphicsview/padnavigator/images/blue_angle_swirl.jpg b/examples/graphicsview/padnavigator/images/blue_angle_swirl.jpg
new file mode 100644
index 0000000..5bf0deb
Binary files /dev/null and b/examples/graphicsview/padnavigator/images/blue_angle_swirl.jpg differ
diff --git a/examples/graphicsview/padnavigator/images/kontact_contacts.png b/examples/graphicsview/padnavigator/images/kontact_contacts.png
new file mode 100644
index 0000000..6fb4cc8
Binary files /dev/null and b/examples/graphicsview/padnavigator/images/kontact_contacts.png differ
diff --git a/examples/graphicsview/padnavigator/images/kontact_journal.png b/examples/graphicsview/padnavigator/images/kontact_journal.png
new file mode 100644
index 0000000..b1fedb6
Binary files /dev/null and b/examples/graphicsview/padnavigator/images/kontact_journal.png differ
diff --git a/examples/graphicsview/padnavigator/images/kontact_mail.png b/examples/graphicsview/padnavigator/images/kontact_mail.png
new file mode 100644
index 0000000..672f8fa
Binary files /dev/null and b/examples/graphicsview/padnavigator/images/kontact_mail.png differ
diff --git a/examples/graphicsview/padnavigator/images/kontact_notes.png b/examples/graphicsview/padnavigator/images/kontact_notes.png
new file mode 100644
index 0000000..229bf73
Binary files /dev/null and b/examples/graphicsview/padnavigator/images/kontact_notes.png differ
diff --git a/examples/graphicsview/padnavigator/images/kopeteavailable.png b/examples/graphicsview/padnavigator/images/kopeteavailable.png
new file mode 100644
index 0000000..2eaf41a
Binary files /dev/null and b/examples/graphicsview/padnavigator/images/kopeteavailable.png differ
diff --git a/examples/graphicsview/padnavigator/images/metacontact_online.png b/examples/graphicsview/padnavigator/images/metacontact_online.png
new file mode 100644
index 0000000..6a398dd
Binary files /dev/null and b/examples/graphicsview/padnavigator/images/metacontact_online.png differ
diff --git a/examples/graphicsview/padnavigator/images/minitools.png b/examples/graphicsview/padnavigator/images/minitools.png
new file mode 100644
index 0000000..0248c9d
Binary files /dev/null and b/examples/graphicsview/padnavigator/images/minitools.png differ
diff --git a/examples/graphicsview/padnavigator/padnavigator.py b/examples/graphicsview/padnavigator/padnavigator.py
new file mode 100644
index 0000000..254d305
--- /dev/null
+++ b/examples/graphicsview/padnavigator/padnavigator.py
@@ -0,0 +1,398 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import (pyqtProperty, QDirIterator, QEasingCurve, QEvent,
+        QEventTransition, QHistoryState, QParallelAnimationGroup, QPointF,
+        QPropertyAnimation, QRectF, QSequentialAnimationGroup, QSize, QState,
+        QStateMachine, Qt)
+from PyQt5.QtGui import (QBrush, QColor, QFont, QLinearGradient, QPainter,
+        QPalette, QPen, QPixmap, QTransform)
+from PyQt5.QtWidgets import (QApplication, QGraphicsItem, QGraphicsObject,
+        QGraphicsProxyWidget, QGraphicsRotation, QGraphicsScene, QGraphicsView,
+        QKeyEventTransition, QWidget)
+from PyQt5.QtOpenGL import QGL, QGLFormat, QGLWidget
+
+import padnavigator_rc
+from ui_form import Ui_Form
+
+
+class PadNavigator(QGraphicsView):
+    def __init__(self, size, parent=None):
+        super(PadNavigator, self).__init__(parent)
+
+        self.form = Ui_Form()
+
+        splash = SplashItem()
+        splash.setZValue(1)
+
+        pad = FlippablePad(size)
+        flipRotation = QGraphicsRotation(pad)
+        xRotation = QGraphicsRotation(pad)
+        yRotation = QGraphicsRotation(pad)
+        flipRotation.setAxis(Qt.YAxis)
+        xRotation.setAxis(Qt.YAxis)
+        yRotation.setAxis(Qt.XAxis)
+        pad.setTransformations([flipRotation, xRotation, yRotation])
+
+        backItem = QGraphicsProxyWidget(pad)
+        widget = QWidget()
+        self.form.setupUi(widget)
+        self.form.hostName.setFocus()
+        backItem.setWidget(widget)
+        backItem.setVisible(False)
+        backItem.setFocus()
+        backItem.setCacheMode(QGraphicsItem.ItemCoordinateCache)
+        r = backItem.rect()
+        backItem.setTransform(QTransform().rotate(180, Qt.YAxis).translate(-r.width()/2, -r.height()/2))
+
+        selectionItem = RoundRectItem(QRectF(-60, -60, 120, 120),
+                QColor(Qt.gray), pad)
+        selectionItem.setZValue(0.5)
+
+        smoothSplashMove = QPropertyAnimation(splash, "y")
+        smoothSplashOpacity = QPropertyAnimation(splash, "opacity")
+        smoothSplashMove.setEasingCurve(QEasingCurve.InQuad)
+        smoothSplashMove.setDuration(250)
+        smoothSplashOpacity.setDuration(250)
+
+        smoothXSelection = QPropertyAnimation(selectionItem, "x")
+        smoothYSelection = QPropertyAnimation(selectionItem, "y")
+        smoothXRotation = QPropertyAnimation(xRotation, "angle")
+        smoothYRotation = QPropertyAnimation(yRotation, "angle")
+        smoothXSelection.setDuration(125)
+        smoothYSelection.setDuration(125)
+        smoothXRotation.setDuration(125)
+        smoothYRotation.setDuration(125)
+        smoothXSelection.setEasingCurve(QEasingCurve.InOutQuad)
+        smoothYSelection.setEasingCurve(QEasingCurve.InOutQuad)
+        smoothXRotation.setEasingCurve(QEasingCurve.InOutQuad)
+        smoothYRotation.setEasingCurve(QEasingCurve.InOutQuad)
+
+        smoothFlipRotation = QPropertyAnimation(flipRotation, "angle")
+        smoothFlipScale = QPropertyAnimation(pad, "scale")
+        smoothFlipXRotation = QPropertyAnimation(xRotation, "angle")
+        smoothFlipYRotation = QPropertyAnimation(yRotation, "angle")
+        flipAnimation = QParallelAnimationGroup(self)
+        smoothFlipScale.setDuration(500)
+        smoothFlipRotation.setDuration(500)
+        smoothFlipXRotation.setDuration(500)
+        smoothFlipYRotation.setDuration(500)
+        smoothFlipScale.setEasingCurve(QEasingCurve.InOutQuad)
+        smoothFlipRotation.setEasingCurve(QEasingCurve.InOutQuad)
+        smoothFlipXRotation.setEasingCurve(QEasingCurve.InOutQuad)
+        smoothFlipYRotation.setEasingCurve(QEasingCurve.InOutQuad)
+        smoothFlipScale.setKeyValueAt(0, 1.0)
+        smoothFlipScale.setKeyValueAt(0.5, 0.7)
+        smoothFlipScale.setKeyValueAt(1, 1.0)
+        flipAnimation.addAnimation(smoothFlipRotation)
+        flipAnimation.addAnimation(smoothFlipScale)
+        flipAnimation.addAnimation(smoothFlipXRotation)
+        flipAnimation.addAnimation(smoothFlipYRotation)
+
+        setVariablesSequence = QSequentialAnimationGroup()
+        setFillAnimation = QPropertyAnimation(pad, "fill")
+        setBackItemVisibleAnimation = QPropertyAnimation(backItem, "visible")
+        setSelectionItemVisibleAnimation = QPropertyAnimation(selectionItem, "visible")
+        setFillAnimation.setDuration(0)
+        setBackItemVisibleAnimation.setDuration(0)
+        setSelectionItemVisibleAnimation.setDuration(0)
+        setVariablesSequence.addPause(250)
+        setVariablesSequence.addAnimation(setBackItemVisibleAnimation)
+        setVariablesSequence.addAnimation(setSelectionItemVisibleAnimation)
+        setVariablesSequence.addAnimation(setFillAnimation)
+        flipAnimation.addAnimation(setVariablesSequence)
+
+        stateMachine = QStateMachine(self)
+        splashState = QState(stateMachine)
+        frontState = QState(stateMachine)
+        historyState = QHistoryState(frontState)
+        backState = QState(stateMachine)
+
+        frontState.assignProperty(pad, "fill", False)
+        frontState.assignProperty(splash, "opacity", 0.0)
+        frontState.assignProperty(backItem, "visible", False)
+        frontState.assignProperty(flipRotation, "angle", 0.0)
+        frontState.assignProperty(selectionItem, "visible", True)
+
+        backState.assignProperty(pad, "fill", True)
+        backState.assignProperty(backItem, "visible", True)
+        backState.assignProperty(xRotation, "angle", 0.0)
+        backState.assignProperty(yRotation, "angle", 0.0)
+        backState.assignProperty(flipRotation, "angle", 180.0)
+        backState.assignProperty(selectionItem, "visible", False)
+
+        stateMachine.addDefaultAnimation(smoothXRotation)
+        stateMachine.addDefaultAnimation(smoothYRotation)
+        stateMachine.addDefaultAnimation(smoothXSelection)
+        stateMachine.addDefaultAnimation(smoothYSelection)
+        stateMachine.setInitialState(splashState)
+
+        anyKeyTransition = QEventTransition(self, QEvent.KeyPress, splashState)
+        anyKeyTransition.setTargetState(frontState)
+        anyKeyTransition.addAnimation(smoothSplashMove)
+        anyKeyTransition.addAnimation(smoothSplashOpacity)
+
+        enterTransition = QKeyEventTransition(self, QEvent.KeyPress,
+                Qt.Key_Enter, backState)
+        returnTransition = QKeyEventTransition(self, QEvent.KeyPress,
+                Qt.Key_Return, backState)
+        backEnterTransition = QKeyEventTransition(self, QEvent.KeyPress,
+                Qt.Key_Enter, frontState)
+        backReturnTransition = QKeyEventTransition(self, QEvent.KeyPress,
+                Qt.Key_Return, frontState)
+        enterTransition.setTargetState(historyState)
+        returnTransition.setTargetState(historyState)
+        backEnterTransition.setTargetState(backState)
+        backReturnTransition.setTargetState(backState)
+        enterTransition.addAnimation(flipAnimation)
+        returnTransition.addAnimation(flipAnimation)
+        backEnterTransition.addAnimation(flipAnimation)
+        backReturnTransition.addAnimation(flipAnimation)
+
+        columns = size.width()
+        rows = size.height()
+        stateGrid = []
+        for y in range(rows):
+            stateGrid.append([QState(frontState) for _ in range(columns)])
+
+        frontState.setInitialState(stateGrid[0][0])
+        selectionItem.setPos(pad.iconAt(0, 0).pos())
+
+        for y in range(rows):
+            for x in range(columns):
+                state = stateGrid[y][x]
+
+                rightTransition = QKeyEventTransition(self, QEvent.KeyPress,
+                        Qt.Key_Right, state)
+                leftTransition = QKeyEventTransition(self, QEvent.KeyPress,
+                        Qt.Key_Left, state)
+                downTransition = QKeyEventTransition(self, QEvent.KeyPress,
+                        Qt.Key_Down, state)
+                upTransition = QKeyEventTransition(self, QEvent.KeyPress,
+                        Qt.Key_Up, state)
+
+                rightTransition.setTargetState(stateGrid[y][(x + 1) % columns])
+                leftTransition.setTargetState(stateGrid[y][((x - 1) + columns) % columns])
+                downTransition.setTargetState(stateGrid[(y + 1) % rows][x])
+                upTransition.setTargetState(stateGrid[((y - 1) + rows) % rows][x])
+
+                icon = pad.iconAt(x, y)
+                state.assignProperty(xRotation, "angle", -icon.x() / 6.0)
+                state.assignProperty(yRotation, "angle", icon.y() / 6.0)
+                state.assignProperty(selectionItem, "x", icon.x())
+                state.assignProperty(selectionItem, "y", icon.y())
+                frontState.assignProperty(icon, "visible", True)
+                backState.assignProperty(icon, "visible", False)
+
+                setIconVisibleAnimation = QPropertyAnimation(icon, "visible")
+                setIconVisibleAnimation.setDuration(0)
+                setVariablesSequence.addAnimation(setIconVisibleAnimation)
+
+        scene = QGraphicsScene(self)
+        scene.setBackgroundBrush(QBrush(QPixmap(":/images/blue_angle_swirl.jpg")))
+        scene.setItemIndexMethod(QGraphicsScene.NoIndex)
+        scene.addItem(pad)
+        scene.setSceneRect(scene.itemsBoundingRect())
+        self.setScene(scene)
+
+        sbr = splash.boundingRect()
+        splash.setPos(-sbr.width() / 2, scene.sceneRect().top() - 2)
+        frontState.assignProperty(splash, "y", splash.y() - 100.0)
+        scene.addItem(splash)
+
+        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        self.setMinimumSize(50, 50)
+        self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate)
+        self.setCacheMode(QGraphicsView.CacheBackground)
+        self.setRenderHints(QPainter.Antialiasing |
+                QPainter.SmoothPixmapTransform | QPainter.TextAntialiasing)
+
+        if QGLFormat.hasOpenGL():
+            self.setViewport(QGLWidget(QGLFormat(QGL.SampleBuffers)))
+
+        stateMachine.start()
+
+    def resizeEvent(self, event):
+        super(PadNavigator, self).resizeEvent(event)
+        self.fitInView(self.scene().sceneRect(), Qt.KeepAspectRatio)
+
+
+class RoundRectItem(QGraphicsObject):
+    def __init__(self, bounds, color, parent=None):
+        super(RoundRectItem, self).__init__(parent)
+
+        self.fillRect = False
+        self.bounds = QRectF(bounds)
+        self.pix = QPixmap()
+
+        self.gradient = QLinearGradient()
+        self.gradient.setStart(self.bounds.topLeft())
+        self.gradient.setFinalStop(self.bounds.bottomRight())
+        self.gradient.setColorAt(0, color)
+        self.gradient.setColorAt(1, color.darker(200))
+
+        self.setCacheMode(QGraphicsItem.ItemCoordinateCache)
+
+    def setFill(self, fill):
+        self.fillRect = fill
+        self.update()
+
+    def fill(self):
+        return self.fillRect
+
+    fill = pyqtProperty(bool, fill, setFill)
+
+    def paint(self, painter, option, widget):
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(QColor(0, 0, 0, 64))
+        painter.drawRoundedRect(self.bounds.translated(2, 2), 25.0, 25.0)
+
+        if self.fillRect:
+            painter.setBrush(QApplication.palette().brush(QPalette.Window))
+        else:
+            painter.setBrush(self.gradient)
+
+        painter.setPen(QPen(Qt.black, 1))
+        painter.drawRoundedRect(self.bounds, 25.0, 25.0)
+        if not self.pix.isNull():
+            painter.scale(1.95, 1.95)
+            painter.drawPixmap(-self.pix.width() / 2, -self.pix.height() / 2, self.pix)
+
+    def boundingRect(self):
+        return self.bounds.adjusted(0, 0, 2, 2)
+
+    def pixmap(self):
+        return QPixmap(self.pix)
+
+    def setPixmap(self, pixmap):
+        self.pix = QPixmap(pixmap)
+        self.update()
+
+
+class FlippablePad(RoundRectItem):
+    def __init__(self, size, parent=None):
+        super(FlippablePad, self).__init__(self.boundsFromSize(size),
+                QColor(226, 255, 92, 64), parent)
+
+        numIcons = size.width() * size.height()
+        pixmaps = []
+        it = QDirIterator(":/images", ["*.png"])
+        while it.hasNext() and len(pixmaps) < numIcons:
+            pixmaps.append(it.next())
+
+        iconRect = QRectF(-54, -54, 108, 108)
+        iconColor = QColor(214, 240, 110, 128)
+        self.iconGrid = []
+        n = 0
+
+        for y in range(size.height()):
+            row = []
+
+            for x in range(size.width()):
+                rect = RoundRectItem(iconRect, iconColor, self)
+                rect.setZValue(1)
+                rect.setPos(self.posForLocation(x, y, size))
+                rect.setPixmap(pixmaps[n % len(pixmaps)])
+                n += 1
+
+                row.append(rect)
+
+            self.iconGrid.append(row)
+
+    def iconAt(self, column, row):
+        return self.iconGrid[row][column]
+
+    @staticmethod
+    def boundsFromSize(size):
+        return QRectF((-size.width() / 2.0) * 150,
+                (-size.height() / 2.0) * 150, size.width() * 150,
+                size.height() * 150)
+
+    @staticmethod
+    def posForLocation(column, row, size):
+        return QPointF(column * 150, row * 150) - QPointF((size.width() - 1) * 75, (size.height() - 1) * 75)
+
+
+class SplashItem(QGraphicsObject):
+    def __init__(self, parent=None):
+        super(SplashItem, self).__init__(parent)
+
+        self.text = "Welcome to the Pad Navigator Example. You can use the " \
+                "keyboard arrows to navigate the icons, and press enter to " \
+                "activate an item. Press any key to begin."
+
+        self.setCacheMode(QGraphicsItem.DeviceCoordinateCache)
+
+    def boundingRect(self):
+        return QRectF(0, 0, 400, 175)
+
+    def paint(self, painter, option, widget):
+        painter.setPen(QPen(Qt.black, 2))
+        painter.setBrush(QColor(245, 245, 255, 220))
+        painter.setClipRect(self.boundingRect())
+        painter.drawRoundedRect(3, -100 + 3, 400 - 6, 250 - 6, 25.0, 25.0)
+
+        textRect = self.boundingRect().adjusted(10, 10, -10, -10)
+        flags = int(Qt.AlignTop | Qt.AlignLeft) | Qt.TextWordWrap
+
+        font = QFont()
+        font.setPixelSize(18)
+        painter.setPen(Qt.black)
+        painter.setFont(font)
+        painter.drawText(textRect, flags, self.text)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    navigator = PadNavigator(QSize(3, 3))
+    navigator.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/graphicsview/padnavigator/padnavigator.qrc b/examples/graphicsview/padnavigator/padnavigator.qrc
new file mode 100644
index 0000000..30ee8e1
--- /dev/null
+++ b/examples/graphicsview/padnavigator/padnavigator.qrc
@@ -0,0 +1,14 @@
+<RCC>
+ <qresource>
+  <file>images/blue_angle_swirl.jpg</file>
+  <file>images/artsfftscope.png</file>
+  <file>images/kontact_contacts.png</file>
+  <file>images/kontact_journal.png</file>
+  <file>images/kontact_mail.png</file>
+  <file>images/kontact_notes.png</file>
+  <file>images/kopeteavailable.png</file>
+  <file>images/metacontact_online.png</file>
+  <file>images/minitools.png</file>
+  <file>images/blue_angle_swirl.jpg</file>
+ </qresource>
+</RCC>
diff --git a/examples/graphicsview/padnavigator/padnavigator_rc.py b/examples/graphicsview/padnavigator/padnavigator_rc.py
new file mode 100644
index 0000000..880b12c
--- /dev/null
+++ b/examples/graphicsview/padnavigator/padnavigator_rc.py
@@ -0,0 +1,3029 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 5 07:34:29 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x09\xf1\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x09\xb8\x49\x44\x41\x54\x78\x5e\xbd\x99\x6b\x6c\x53\xe7\
+\x19\xc7\x7f\xc7\x10\xc7\x4e\x0c\xd8\x21\xc4\x21\x24\x21\x71\x80\
+\x84\x4b\xd2\x34\xac\x12\x81\x16\xd2\x82\x2a\xb4\x2b\xeb\x85\xee\
+\x43\xdb\xb1\x09\xb6\x6a\xfb\xc2\x97\x49\xd3\xf6\x05\x3e\xed\xc3\
+\xa4\x29\xda\xa6\x4d\xad\xb4\x36\x53\x5b\xa9\x55\xab\x36\xdd\xd6\
+\xad\x1d\x61\x4d\xbb\x95\x02\x25\x60\x2e\x05\x3b\x6d\x52\x27\x36\
+\x71\x02\xc1\x76\x82\x73\x33\xcc\x67\xef\xfc\x2a\x7d\x75\xce\x89\
+\x1d\x7b\x83\x3e\xd2\xa3\xd7\xef\x93\xe3\x93\xff\xff\xb9\xbd\x17\
+\x6b\xdc\x69\x69\x7b\xe9\x1e\xc0\x0d\x74\x60\x95\x50\x46\xcf\x3e\
+\xf9\x3e\x77\x48\xb4\x3b\x00\x78\x2d\xb0\x4f\xaa\x04\xbd\xcc\x5d\
+\x9a\x51\x83\xe8\xa0\x03\xd1\xa1\x6b\x48\xa1\x7b\x5e\x05\xa1\x89\
+\x2f\x8f\x80\x02\xbe\x0b\x38\x0c\xec\x2b\x5f\xed\x61\x53\x9b\x8f\
+\xf2\x4a\x0f\x6b\xea\xbd\xa0\x43\xd5\x32\x70\x2e\x05\x5d\x81\xa7\
+\x7f\x1c\x74\x1d\xc6\x47\x63\x04\xfd\x83\x84\x82\x11\x92\x13\x53\
+\x09\xa0\x0b\xe8\x14\x44\x86\xee\x1e\x01\x05\x7c\x05\x70\x04\x38\
+\xbc\x69\xab\x8f\xf6\xdd\xcd\x6c\xdf\xe0\xa2\xa1\x0c\xd6\x2c\x83\
+\x75\x65\xe4\x94\x1b\xd3\x92\x88\x3f\x0a\xe7\x46\x60\x24\x34\x46\
+\xdf\x07\x17\x18\x1d\xbe\x96\x40\x92\x38\x7a\x77\x08\xa8\xfc\xee\
+\xaa\xf6\x55\xb4\xee\xdd\xdf\xce\xee\x4d\x2e\x1e\xf6\x41\x99\x13\
+\x00\x62\x33\x70\xf5\xa6\x54\x74\x00\x15\x81\x32\xa7\xd4\xf5\x2b\
+\x15\x80\xf1\x69\xf8\x68\x08\x8e\x0d\xc0\x95\x8b\x61\x4e\x1e\xeb\
+\x43\x44\xc4\x0f\x1c\x10\x44\xce\xdf\x39\x02\x0a\x7c\xef\xd6\xfb\
+\x1b\xdd\x8f\x3e\xf1\x15\xf6\x6f\x84\x06\x0f\xcc\xdc\x82\x7f\x86\
+\xe1\x4c\x54\x12\xd0\xe7\x81\xeb\x48\x45\x8e\xc8\x39\x69\x5d\x46\
+\x4a\x10\xe1\xc1\x7a\x58\x59\x02\xd3\x29\x78\xf5\x22\xfc\x23\x98\
+\xe2\xe4\xdf\xfb\xf8\xec\xe2\x60\x02\xd8\x97\x4f\xb1\x6b\x05\x14\
+\xaa\xff\xab\x4f\x6c\x73\x3f\xfc\x60\x03\x3f\x68\x05\x67\x11\x7c\
+\x32\x0e\xaf\x5d\x91\x24\x74\x14\x70\x45\x22\x9b\x2a\x32\x2d\x5e\
+\x78\x7c\x8b\x24\x22\x52\x8a\xe7\xcf\xc0\xc7\x1f\x06\x38\xd5\xd3\
+\x07\x92\xc4\x5b\x77\x82\xc0\x7b\xcd\xf7\xf9\x3a\x0e\x1e\x6c\xe7\
+\x50\xab\x2c\xce\xbe\x51\x78\x3d\x68\x48\x95\x05\x81\x83\x05\xb4\
+\x9a\xa7\xd5\xfc\x6b\x1b\xe0\xeb\x4d\x30\x9c\x80\x5f\x7e\x00\xa7\
+\x05\x89\xd3\x3d\x7d\x09\xa0\x23\x57\x3a\x2d\xc9\xa7\xdb\x14\x3b\
+\x8b\x8e\x7c\xe7\x87\x0f\xf1\x64\xcb\x12\x2a\x4a\xe0\xec\x18\xbc\
+\xd1\x0f\x9a\x26\x15\xa1\x99\x61\x7e\x44\xfd\xcd\x2c\x5a\x16\xaf\
+\xf5\xdf\x80\xe0\x75\xd8\x55\x0f\xf7\x56\x41\x28\x5d\x4e\x3c\x36\
+\xe5\x88\x5d\x8b\x6f\x63\xf5\x23\xaf\x10\x7d\x63\xee\x7f\x22\x20\
+\xbe\xdc\xb5\x7d\xcf\xe6\xba\xfd\x1d\x55\x6c\x5f\x03\xd1\x24\xbc\
+\x78\x59\x01\xd4\x4c\xe0\x51\x36\x8b\x2a\x41\x3d\x6b\xea\x50\x9f\
+\x8c\xc1\xee\x75\x50\xeb\x86\x61\xcd\xcb\xd5\xc1\x68\xe5\xcc\xd4\
+\xac\x43\x10\x78\xb7\x30\x02\x2a\xf7\x3b\x9f\x38\xb4\x8b\xa7\x9a\
+\x97\x64\x52\xe7\xf5\x7e\x98\x98\x53\x9e\x57\x9e\x56\xc0\xc1\x8c\
+\x5e\x11\x5b\x4c\x26\xe7\x60\x30\x06\x8f\x6c\x86\x39\x7d\x09\x93\
+\x8e\x95\x04\xcf\x7d\xf6\xdf\x28\xf4\x0a\x12\x43\xf9\x11\x50\xde\
+\x3f\xd0\xd8\x52\xbd\x77\xef\xee\x06\x1e\xa8\x86\xd1\x29\x38\x1e\
+\xb6\x7a\x1f\x33\x09\x2d\x9b\xf7\xf3\x23\x31\x3e\x25\xc7\x47\xb7\
+\xc0\xb9\x71\x27\xd3\xb7\x40\xac\x13\x75\x82\xc0\x1f\x31\xc9\x52\
+\x72\x4b\x47\xdd\x7a\x2f\xf5\x2b\x00\x20\x34\x09\x36\x05\x00\x7d\
+\x1e\xbc\x6c\x97\x68\xd2\xb6\xa0\xd8\x80\xb4\x22\xa1\x6c\x92\x2c\
+\xe8\x46\x27\xfc\x39\x00\xed\x35\xf0\xfd\xfb\xe0\x6a\xac\x89\xcb\
+\x1f\x07\x3a\x52\xa2\x1e\xcd\xad\xd5\x46\x6e\x69\x5d\x5d\xe3\xc1\
+\x29\x69\x52\x59\x8a\xf4\xae\x4d\x8e\xb6\x8c\xca\xb9\xcd\x6a\xc7\
+\x66\x93\xaa\x69\xca\xae\x46\xb3\x5a\xa3\xf8\x97\x00\x34\xad\x82\
+\xf5\x5e\x3b\xb5\x1b\x6a\x00\x0e\x17\x9a\x42\x9d\xf7\xb6\xfb\xa8\
+\xaf\x72\x31\xfb\x6f\xa8\x2c\x91\x00\xa2\x53\xd6\xee\x83\xb9\x28\
+\xb5\xc5\xd3\x46\x27\x87\xe8\x30\x3c\x21\xa3\x50\xb4\x04\x82\x09\
+\x3b\x62\x81\x6b\x12\x69\x74\xb4\x90\x08\xf8\x35\x0d\x2e\xde\x80\
+\xb7\x43\xf0\xfc\x65\x49\xa2\xd1\xa3\x3c\x29\x3d\x2c\xc7\x6c\x9e\
+\x7d\xa8\x16\x0e\xb6\xc0\x63\x8d\x50\xe6\xc8\xd1\xbd\xb0\x36\x84\
+\xe3\x03\xb2\xad\xae\x5e\xeb\x55\x9b\xc8\x02\x08\xb8\x05\x28\xe6\
+\x66\x53\xbc\xf4\xfb\xf7\x39\x77\x36\xcc\x5f\x87\xc1\xed\x50\xe9\
+\xb4\x58\x4a\xb4\x97\xa7\x78\xf7\xdd\x00\x47\x9f\xbb\x40\xff\xa5\
+\xb0\x5c\x08\x8b\xb2\x3d\x6f\x25\xe1\x8f\x42\x79\x29\x94\x14\x41\
+\x65\x6d\x05\x40\xeb\x22\x04\x54\x0b\x75\x38\x8b\xea\xaa\x6a\x3c\
+\x9c\xfb\x68\x90\x2b\xfe\x08\x2f\xfd\xee\x03\xce\x9e\x18\xa0\xef\
+\x3a\xb8\x8b\x25\x09\x95\xfb\x56\x20\x9e\x62\x08\xc4\xc1\xb1\xb9\
+\x89\xda\x1d\x2d\xf4\xe9\x5e\x02\xe1\x24\x3b\xaa\x17\xf6\x36\x56\
+\x12\xdc\x98\x91\x5d\xa9\xd6\x0d\xae\x15\x2e\x00\x77\xbe\x11\xe8\
+\xde\xb1\xa7\x09\x67\xa9\x9d\xd9\x99\x14\xf3\xf2\xda\x0b\x27\x19\
+\x8d\xc4\x18\x98\x84\x54\x5a\x82\xc8\xa6\x13\x29\x98\xd4\xed\x20\
+\xe7\x38\x9c\x76\x3e\x4c\xb8\xd8\xbc\x22\x25\xe6\xd9\x49\x60\xb2\
+\x85\x27\x00\x10\x04\x4a\x17\x89\x80\xf2\xfe\x0b\xa2\xfb\xb4\xde\
+\x2f\x08\xd8\x34\x70\x96\xd8\x51\x02\x97\xcf\x45\x32\x5e\xbf\x79\
+\x4b\x75\x20\xa9\x66\x12\x66\xaf\xca\x45\x90\x22\x3b\xb6\x99\x64\
+\x96\x26\x60\xb5\x45\x26\x15\x29\x73\x04\x96\x62\x05\xff\x5d\x91\
+\x3a\x07\x9e\xfa\xf1\x4e\x4a\x4a\xed\x19\x10\x3b\x1f\x6e\xa2\x7a\
+\xad\x07\x34\x58\x53\xeb\x99\x27\x84\xae\xd6\x00\xac\xcd\x47\xda\
+\x35\x1d\xf5\x2c\xa0\xeb\x64\x3a\x9a\x6d\x7a\x0a\xcd\xe1\x12\x76\
+\xb5\x06\xc8\x77\x19\x17\x14\x4d\x6e\x31\x14\x29\x93\xd8\xb0\x82\
+\xef\x3a\xf4\x93\x3d\x94\x95\xbb\x40\x79\x92\x75\x1b\xbd\x6c\x6d\
+\xf1\xb2\xa3\xd6\xce\x16\xcf\x22\xc5\x6b\xf6\xa4\x9c\x5b\x5b\xaa\
+\x66\xb5\x59\xa3\x20\x09\x28\xa1\xd7\x4a\x40\xed\x7b\xba\x9e\xfc\
+\xd1\x2e\xaa\x6a\xca\x0c\x3b\xca\x0a\x27\x3c\xee\x83\x76\x2f\x7c\
+\x9e\x84\x2b\x93\x39\xd2\x05\xc0\xbc\xbd\xc0\x48\xc2\x5d\xac\xec\
+\x16\xf0\x39\x36\xfa\xd1\xa1\xb1\x9c\x11\xd8\x57\xbf\xa1\x02\x5f\
+\xa3\xd7\xf0\x0f\x37\x7b\x60\xbf\x0f\x4e\x5d\x83\x63\x23\x70\xf3\
+\xb6\xa9\xf3\x64\x01\x6a\x15\x05\xde\xe3\x80\x50\x34\x99\xdf\xe1\
+\x44\x83\xe9\x5b\xf2\x1c\x9d\x9a\xbb\x05\xe0\xcf\x46\x20\x34\x2b\
+\x9e\x44\x81\x60\xbb\x17\xf6\xd6\xc0\x9f\x86\xe1\xea\x74\xf6\x54\
+\x81\x6c\x24\xac\x1e\x6e\xaf\x82\xd0\x48\x12\xbd\xc4\x95\x6d\xb5\
+\x36\xda\x81\xc8\x04\xa4\x66\x53\xc4\xc6\xe2\x39\x08\x88\xa3\x5b\
+\x34\x12\xf7\xbf\xfd\xea\x19\xe6\x65\x95\x53\x8e\x91\x29\x03\x06\
+\x05\x3c\x0f\xf1\x96\x28\x20\x95\x25\x92\xc0\x2b\x3d\x11\xd6\xae\
+\xf3\x16\x74\x2c\xec\xbf\x30\x28\xc1\x8b\xab\x97\x5c\x6d\xb4\xe3\
+\xc3\xe3\x41\xe2\xe3\x49\x74\xe0\x9d\xb0\xec\x18\x0d\xcb\x51\xf7\
+\x3b\x4a\x41\x5f\x1c\xfc\xc1\xcd\x70\x68\x0b\x3c\xbd\x09\x9e\xb9\
+\x47\x7a\xff\xc4\x48\x01\x7b\x22\xe4\x4e\xe0\xd2\xe9\x00\x40\x67\
+\xee\x2e\x24\x6f\xc8\x70\xc8\x36\xc9\x9c\x00\xdf\x3b\x02\x0d\xcb\
+\x80\x85\xce\xb5\x18\x89\x01\x6a\x0e\x8c\x4d\xc3\x5b\x67\x62\x99\
+\x15\xbb\x6e\x39\xf8\x83\x31\x9e\xf9\xd5\x45\x1a\xdb\x7c\x26\xe4\
+\xea\xfb\x0b\xd9\xc5\xbd\x51\xe6\xba\x45\xe0\xb3\x9e\x07\xcc\xe7\
+\x5f\xd1\x46\x33\x2b\xe6\x3c\x88\x4b\x31\x68\x2b\x37\x02\x53\xbd\
+\xdf\x40\x44\x82\x30\xfd\xed\xe3\x69\x17\xcf\xfe\x22\xc0\xcc\x74\
+\x8a\x62\x87\x9d\x96\xbd\x5b\xb1\x17\xdb\x89\xdf\x48\xb2\xdc\xed\
+\x32\x82\xc5\x2a\xc1\xf3\x03\x5c\x3a\x15\x4c\x00\x07\x00\x72\x13\
+\x80\x8e\xb6\xed\x3e\x05\x42\x03\x80\x70\x12\xec\x1a\xcc\xa5\xa5\
+\x49\x01\x54\x23\x59\x22\x52\xec\xb4\xb3\xed\xc1\x26\x15\xb9\xb4\
+\x1c\x43\x9f\x8e\xd1\x7c\x9f\x4b\x81\xc6\xfc\x0e\x79\x05\x79\xe2\
+\x9d\x3e\xcc\x17\x5d\xb9\x6a\xa0\xfb\xc4\xf1\x60\xe2\x5f\x3d\x01\
+\x74\x54\xca\x7c\x3a\x01\x6b\x4a\x91\x20\xd2\xa6\x51\xa9\xaa\x0f\
+\x72\x10\x03\xce\x9f\x1e\xc0\xa9\xbc\x6f\xf8\xce\xbc\xed\xba\x00\
+\xff\x56\x57\x0f\xa2\x75\x1e\x50\x77\x43\x8b\x47\x00\xf7\xca\x52\
+\xf7\xc6\xd6\x6a\x43\x4e\x0e\x27\x61\x47\xa5\x24\xa2\x99\xf2\x55\
+\xdd\xbe\x59\x55\x01\x57\xf3\xd9\xe9\x14\xc7\xde\xec\xe3\xe9\x9f\
+\xee\xe3\xb6\x2e\xd3\x11\xd3\x33\xd7\xa3\x31\xba\x5f\x10\xe0\x67\
+\x05\x78\x95\xf7\x79\x11\xa8\x13\xf9\x8f\xbb\xcc\x65\x29\xaa\xd9\
+\xdb\x32\xfc\xba\x66\xb0\xe7\x24\x81\x29\x22\xa2\x0e\x78\xf1\xb7\
+\x3d\xb8\xdc\x2e\x8a\x1c\xf6\x0c\x81\x22\x53\x04\xe6\x66\x52\xbc\
+\xf9\x7c\x06\x7c\x97\x02\x9f\x3f\x81\xde\xd1\x48\x3c\x34\x12\x8e\
+\x89\x73\x40\x99\x01\x67\x62\x4e\x81\xc2\xcc\x41\x11\xc8\xa6\x12\
+\xfc\x6f\x7a\x18\xbb\x1a\xa7\xe3\xb1\x6d\x19\xdb\x6d\x09\xc0\x10\
+\xa5\x37\xfe\xf0\x05\xf8\xef\x91\x55\x72\xb7\xd1\x50\x7c\x7c\x2a\
+\x03\x40\xe5\xba\x8c\x40\x5a\xb7\xa8\xaa\x83\x74\x76\xf0\x81\x0b\
+\x61\x7e\x7d\xa4\x3b\x03\xbe\xed\xa1\x66\x36\xdc\xdb\x40\x5a\x16\
+\x33\xb7\x55\xa4\x38\xf5\xde\x05\x51\xb8\x71\xbf\xe1\xf0\x5e\x60\
+\x04\x00\xdc\xa2\x73\x08\x50\xc6\x3b\x9d\xd0\xa4\x69\x9f\x63\xe9\
+\x44\xd6\xc5\xee\x73\xd1\x69\x7a\xdf\xbe\xc0\xd0\x67\xd7\xf0\xd6\
+\x55\xf0\xc0\xb7\xdb\x59\x5e\xe6\xca\x00\xb7\x81\x8c\x82\x06\x45\
+\x3a\x4c\xc4\x93\x9c\x3a\x7e\x71\xbe\xe3\x4c\xfc\x3f\x04\x12\xa2\
+\xd0\x54\xba\x68\x12\x8c\xa6\xa9\x54\x31\x8a\xb5\x50\x03\xe7\xc3\
+\x7c\xf4\x5e\x80\xa1\x4f\xaf\x51\xdf\xe2\x63\xcf\xd3\x2d\xac\xae\
+\xf7\x62\xb3\x19\x8b\x3b\xad\xab\xab\x11\xff\x89\x00\x40\x97\xb5\
+\x5d\x16\x4e\xa0\xeb\x6f\xaf\xf7\x75\x88\x28\x50\xbf\xde\x6b\xb9\
+\xb0\x32\xd6\xb0\xfa\x10\x8d\xc4\xf0\x9f\x1c\x14\xe0\x23\x2c\x75\
+\x95\x52\xdf\xec\xa3\xed\x9b\xbb\x10\xef\xc1\xa6\xa1\x52\x12\x25\
+\xb6\x0c\x19\x19\x85\x81\xcb\x11\x80\x6e\x0a\x14\x2d\xcb\x91\xf2\
+\x5b\x40\xe7\x8a\xb2\xd2\x3a\x41\x02\xd1\x5a\xa9\x13\x63\x65\xb5\
+\x07\x20\x73\x46\x4e\xc4\xa6\x10\x05\x4f\xa8\x7f\x2c\xb3\x28\x95\
+\xae\xf4\x50\xb3\xc5\xc7\x9a\x0d\x35\xd8\x25\x68\x6c\xea\xb8\x89\
+\xa6\xe6\x4a\xd5\x45\x18\xcf\xfe\xec\x65\x80\xba\x42\x7f\x27\xd3\
+\xf2\xf8\x55\xa6\x03\x68\x55\x6a\x14\x4f\x75\x05\xeb\xb7\x35\xb3\
+\xaa\xd6\x8b\x04\xa9\x2d\x04\xd0\x4a\xc8\x44\xe6\xb9\x9f\xbf\x8c\
+\x00\xaf\x51\xa0\x2c\x25\x97\xc8\x7c\x3c\x6f\xfa\x81\xef\x30\x70\
+\x04\x60\x95\xaf\x9a\xd6\x6f\xec\xcc\x00\x50\x85\xa9\xa3\xa3\x91\
+\x06\x90\x36\x4b\xce\x03\xd8\xd2\xa0\xdb\x90\x76\xd4\xfb\x65\x01\
+\x17\x42\xa0\x10\x91\x2f\x3f\x2a\x88\x74\x03\xbd\x35\xf7\x34\xba\
+\x0d\x45\xa9\x2a\x1a\x1b\x1a\xba\xae\xec\x2a\xe7\x91\x2a\x49\x9b\
+\x7b\x79\x2b\xf0\x3e\x05\x88\x8d\x42\x45\x45\xa6\x73\xd8\x1f\x44\
+\x37\xad\x09\x4a\xf5\x2c\x76\x16\xb4\x57\xd6\xa9\x5b\xb7\xbb\x4b\
+\x40\x49\xe7\xf8\xe7\x11\xc4\x51\x2f\x2f\x80\xe9\x45\xec\x6b\x37\
+\xd6\x00\x1c\xf8\x72\x08\xa8\x74\xea\x8d\x47\xc6\xac\x00\x0b\x8f\
+\x02\x35\x4d\xd5\x32\x02\xe2\x76\xe4\xee\x13\x50\xe2\xbf\x39\x9e\
+\x58\x04\xa0\x9e\x57\x14\x4a\xdd\x2e\xca\x2a\x3d\x00\xfb\xbe\x4c\
+\x02\x89\xdb\x73\xa9\x3c\xd2\x47\xcf\x2b\x0a\x5e\x59\x07\x1d\x77\
+\xaf\x0b\x59\xa5\x77\x34\x30\x48\x72\x3c\x6e\xb9\x4e\xb1\x5e\xad\
+\x64\x99\xab\xcf\x88\x73\x2f\x40\x82\x02\xe4\x3f\x98\x19\x4d\xb7\
+\xfe\x5c\xef\x7b\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x08\x27\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x07\xee\x49\x44\x41\x54\x78\x5e\xd5\xda\x7b\x8c\x5c\xe5\
+\x79\xc7\xf1\xcf\x7b\x66\x66\x67\xd6\xeb\xdd\xf5\xe2\xf5\xc6\x36\
+\xc6\x60\xca\xd5\x26\x8e\x6d\xea\x62\xdc\xba\x10\xa2\x04\xd2\x8a\
+\x04\xc2\x25\xae\x4b\xc3\x2d\x38\x29\x21\x94\x92\x56\xa4\x4e\x1c\
+\x51\x88\x93\xa8\x88\x36\x95\x48\x43\x0b\x58\xa0\x12\x89\x06\x63\
+\x6e\x49\x90\x0b\xb4\x29\x55\x84\x1b\x27\x34\x5c\x0c\xb6\x31\x6b\
+\x7c\xc1\x97\xf5\xde\xed\xd9\xd9\x99\x39\x33\x6f\x23\x65\xff\xa8\
+\x2c\x0b\x2b\x66\x2c\xad\xbf\xd2\x4f\xe7\xdf\xe7\xab\xe7\x7d\xf4\
+\xbc\x47\xe7\x84\x18\xa3\xe3\x99\xc4\xf1\xcd\xf1\x2f\x20\xc6\xe8\
+\x58\x1d\xa3\xb8\x42\x8c\x77\x88\xc7\x65\x07\xe2\x23\xce\xd2\x82\
+\x0e\xd6\x5e\xe5\x4f\x51\x38\xae\x04\xf4\x7a\x26\x8e\x62\x98\xcb\
+\xcf\xf6\x8f\x68\x46\x72\x5c\x08\xc4\x07\x30\xec\x74\x27\x12\x67\
+\x22\x63\xf2\x95\x67\xfa\x08\x9a\x8e\x0b\x01\x07\x3c\x19\x87\x70\
+\xf5\xf5\xbf\x49\x2f\xff\xfa\x47\xfe\x1e\xf9\x71\x2f\x10\x1f\xc6\
+\xb0\xcb\xd4\xd1\xb1\x9a\x8e\x87\xa8\x51\x68\x36\x7f\x56\xbb\x19\
+\x68\x1a\xd7\x02\x86\xac\x8a\x07\x71\xed\x2c\x6c\xc3\xb0\xf8\xb9\
+\x93\x19\xe6\xa5\x2b\xdc\x8d\xfc\xf8\x16\xa8\x5a\x61\x00\x0b\x36\
+\xe0\x5e\x3c\xc0\x79\x3f\x67\x3f\x33\x26\xbb\x1c\x05\xe4\xc6\xa5\
+\x40\x5c\x6d\xa9\x1e\xfc\x31\x4c\x26\x3e\x47\x7c\x16\x5d\xe2\x65\
+\x38\xc0\xcb\x57\xb9\x63\xdc\x0a\xe8\xf1\x8d\x38\x80\xcb\xd7\x62\
+\x35\xca\xd8\x8c\x7f\x67\xe9\xe3\xf4\xb1\xa8\xcb\x35\x68\x46\x32\
+\xae\x04\xe2\xfd\xce\x31\xe8\x6c\x73\xe1\x72\xe2\xf7\x31\x11\xad\
+\xc4\x47\x71\x25\xf3\x50\xf7\xa1\x7f\xbe\xc0\x55\x68\x1a\x57\x02\
+\x06\xdd\x19\x07\x71\xd3\xed\xf8\x4f\xec\x42\x0e\x79\xfc\x04\xef\
+\x88\x5f\xbe\x4d\xad\x87\x4f\xcf\x74\x03\x0a\x08\xe3\x42\x20\x7e\
+\x0f\x07\x5c\x61\x12\xf2\xf7\x12\x1f\xc1\x44\x04\x24\x68\xc3\x6a\
+\x5a\xff\x81\x13\xf8\x50\x8b\x85\x57\xcf\x32\x0f\x4d\xe3\x42\xc0\
+\xb0\x3b\xe2\x10\xae\xff\x03\xec\xc0\x8f\x90\x07\x40\x61\x4c\x6a\
+\x50\xe6\x8b\x8b\xc5\x3e\xfe\xfa\xc3\x6e\x42\xd9\x07\x24\xeb\x08\
+\xc4\xa7\x2d\xf0\x9e\x8a\x9c\x8b\x55\x4d\x96\xea\x90\xf8\xb8\xaa\
+\xb2\xc4\x6c\x45\xf4\xa3\x82\x33\xd6\xe2\x9b\x68\x47\x02\x80\x0c\
+\x12\x3c\xce\x82\x35\x46\x4b\xd3\xcd\x6f\xb1\x2c\xde\x60\x19\x48\
+\x6d\x92\x68\x4a\x47\xfd\x47\x08\x06\x46\x2b\x36\x16\xab\x5e\xef\
+\xca\x6b\x0a\x8f\x5b\xef\x7d\x08\x31\x46\xe0\x9f\xc2\xd7\x75\xb9\
+\x51\xdd\x88\xd4\x6c\x75\x94\x30\x80\x12\x2a\x63\xa9\x13\xab\xa8\
+\x61\x0a\xa6\xa3\x84\x6b\xbf\xc8\xa4\x55\xc4\x79\x68\x45\x06\x00\
+\x50\x45\x9d\xb0\x51\xd8\xf7\x25\xe9\xdf\xfd\x8b\x58\xa0\xf4\x0e\
+\x07\xb7\x93\x24\xd4\x23\x69\x20\x46\x92\x2c\x99\x84\x13\x0a\xe4\
+\x32\xd4\xeb\x94\xd9\x1c\x6b\x9a\x9b\x12\x8f\x16\xd6\xf9\x1a\xc2\
+\x98\x00\xbe\x1d\xa2\x0e\x62\x8a\x80\xe9\x18\xc1\x99\x93\xc9\xb7\
+\x33\x6d\x3e\x9d\x8b\x31\x8a\x15\x88\x08\x00\x63\x66\x0f\xe3\x2e\
+\xb4\x39\x3c\xfd\x84\x87\x71\x21\xb2\x20\x00\x40\xf1\x5e\xb2\x79\
+\xde\x7e\x99\x2d\xff\xab\x36\x34\x60\xe0\x67\x7b\x25\x19\xfa\xb7\
+\x12\x2b\x64\x12\x66\x36\x91\x7b\xc1\x14\x14\xc7\x04\x78\xe5\xcf\
+\xc3\xef\x2c\x58\x64\xab\x21\xe2\x92\x76\xe6\x0f\xa2\x8a\x3a\xf2\
+\x80\xcd\x78\x87\x18\xf1\x3c\xf2\x78\x0d\x23\x28\x61\x27\xda\x90\
+\x71\x78\x52\x0c\x61\x26\x5a\x10\x31\x01\x73\x81\x90\xc5\x42\x9c\
+\x80\x44\x70\x3a\xaa\xe8\x56\xfd\xd6\x05\xb6\xff\x98\xce\x02\x9f\
+\x7f\xc3\x2d\x4f\xf4\x58\x8f\x2d\x63\x02\x84\x10\xdc\x75\xa9\x33\
+\x56\x7e\xd2\xeb\x86\x34\xc5\xd9\xf8\xd4\x2e\x3c\x4c\xfc\x3a\x0a\
+\xc8\x22\x83\x04\xd9\x43\x9e\x09\x32\x08\xde\x9f\x88\x1a\xea\x88\
+\x88\x48\x11\x11\x51\x43\x8d\x10\xa9\x65\x85\x72\xdd\xc0\xcd\x83\
+\x7a\x5f\x25\xdf\xa6\x74\xc9\x2f\xdd\xfc\x56\xd1\x76\xbc\x8b\x5d\
+\xff\x5f\x00\x7c\xe2\x4c\x93\xd6\xdd\xaa\xc7\xb0\x5c\x9c\x88\x5b\
+\x76\xe3\x13\xc4\xbd\x28\x38\xe6\x84\x88\x2c\x7d\x79\xa1\x50\xb5\
+\xfb\x33\xdb\x54\x07\xc8\x4e\x50\x3e\xe5\x25\x7f\x92\x46\xbd\x78\
+\x17\x7b\x51\x3d\x54\x00\x5c\x39\x57\xdb\xe3\xcb\xbd\x63\x48\xa7\
+\x56\xe2\x97\x5f\xc3\x85\xc4\x0c\xb2\xc7\xb0\xf0\xf8\x9b\xc2\xd3\
+\x3c\xd5\x21\x7b\x96\xf7\xa8\x0f\x50\xce\xeb\x9d\xf3\xdf\xbe\x30\
+\x5a\xd7\x83\x6e\xec\x41\x84\xc3\x0a\x00\xc4\xef\x78\x59\xc5\x22\
+\xc3\xc4\x7b\xee\xc3\xed\xd4\x5a\x90\x68\x18\x01\x49\xa4\x98\xa5\
+\xa7\x59\x98\x90\xb0\xb7\xc7\xd6\x1b\x8a\x5a\x5a\xd8\x59\xf5\xea\
+\x79\xeb\x7d\x05\x25\x74\x63\x1f\xe2\x91\xf7\x00\xc2\x57\x9d\x1f\
+\xbf\x6d\xbd\x76\xe7\x85\xdb\x6e\x11\xbf\x7b\x03\xc9\x63\x94\x73\
+\xc4\xd0\x98\xe3\x92\x44\xf6\x34\x53\xce\x0a\x6d\x91\x3d\xfb\x74\
+\x2f\x1f\xd1\xde\xc6\xae\xaa\x37\xc6\x8a\x1f\x46\x37\xfa\x7e\xeb\
+\x45\x16\xfe\xc6\xa2\xd7\x6f\xb6\xf2\x9c\x29\xee\x0a\x37\xad\x16\
+\x6f\x3d\x91\x33\x06\x18\x0d\xd4\xa3\xa3\x26\x41\x25\xc3\xbe\x16\
+\x72\x84\x76\xac\xdb\x61\xd3\x3d\x4c\x9b\xca\x43\x7b\xdc\xff\x95\
+\x37\xad\xc1\x20\xba\x31\xe0\x10\x8e\x78\x84\x00\xa0\xfb\x4b\x56\
+\xcc\xea\xb4\xca\x2e\xe2\xf5\x98\x57\xa0\x18\x89\x47\x2b\x50\x67\
+\x7b\x1b\x4d\x84\xd6\x84\x9f\xee\xb7\xe5\x3e\xa6\x77\xf2\xd0\x7b\
+\x1e\xb8\x6d\xa3\x1f\x62\x1f\xb6\x63\xf8\xa8\xaf\x12\x00\xa7\x7e\
+\xcf\xb7\x9e\xbb\xda\xe6\x4b\x4e\xb3\x26\x3c\x48\xbc\x74\x94\x25\
+\x09\x65\x47\x47\x26\xa2\x24\xc8\xb0\xf6\x80\xee\xc7\x98\xda\xc9\
+\x5f\x6e\xb2\xf2\xc1\x1d\xd6\xe3\x3d\xec\x40\x11\x3e\xb0\x00\x7c\
+\xf2\x87\x9e\x78\xf0\x62\xe7\xdd\x38\xdb\xff\xd4\x1e\x23\xb3\x24\
+\x52\x89\x8e\x8a\x04\xb9\x32\xa1\xc9\x9b\xab\xe9\x98\xca\x15\xaf\
+\xb8\xf9\x85\x5e\x9b\xb0\x6b\x2c\x25\x68\x98\x00\x7c\x7e\x9d\x9f\
+\xdf\x38\x8f\xcc\xc9\x28\x47\x2a\x8e\x8e\x80\xb4\x46\x35\xd5\x31\
+\x8b\x49\x29\x2f\xf4\x7a\x05\xfd\xd8\x86\x14\x1a\x2e\x10\xbf\xa9\
+\xcb\x6e\x9c\x8c\x92\xa3\x17\x80\x0c\xfa\xab\x5a\xa7\x71\x70\x2b\
+\xd7\x4c\x37\xe7\xd1\xdd\x9e\x42\x0a\xc7\x44\x40\xd1\xb2\x74\x94\
+\xcc\x0c\x14\x1d\x7e\x06\x02\x80\xf7\x1f\xf2\x1c\x71\x94\x89\xa7\
+\xd0\xf7\x06\x9f\x9a\xe2\xa3\xbf\x16\x78\x16\x8e\x9d\x40\xf4\x87\
+\x6a\xe8\x40\x09\xb5\xc3\x14\x5f\x43\x8a\x66\xd4\xdf\x47\xa2\x8e\
+\x1a\x3a\x19\xa9\x72\x52\xde\x6c\x14\x90\x43\xf5\xd8\xbc\x91\xa5\
+\x96\xa4\x15\x74\x62\x04\xa3\x63\x29\xa3\x8a\x22\xb6\x60\x2b\xb6\
+\xa1\x84\x14\x65\x8c\x1e\x26\x11\x9d\x54\x2a\x4c\x6d\x72\x16\x9a\
+\xc6\xd2\xf8\x0e\xc4\x55\xd8\xa9\xb3\x30\x9d\x58\x44\x05\x00\x59\
+\xf4\x63\x1f\x72\x68\x22\xf4\xa3\x17\x27\x12\x3b\x90\xa2\x0e\x80\
+\x14\x09\x86\xe9\x9a\x41\xe1\x80\x09\x53\xb2\xa6\xee\x4f\xed\x87\
+\xc6\x77\x60\xd0\x9c\x72\x99\x38\x15\x45\x8c\xa2\x8c\x1a\xde\xc5\
+\x0e\x44\x42\x4a\xd8\xc0\xce\xa7\xd8\xf6\x24\x7e\x4c\xd8\x84\x22\
+\x6a\xc6\xba\x81\x12\xb2\x18\xa2\x6b\x3a\xfd\x65\xfe\x6c\x9a\xdf\
+\x43\xf6\xd8\x08\x04\xcb\xea\x29\xa1\x05\x15\xd4\x51\xc5\x66\x0c\
+\x12\x72\x84\x3d\xec\x5f\xc7\xe0\x1e\x26\xb7\xd3\xd5\x41\xcf\x6e\
+\xb6\xad\x21\xfc\x17\x61\xe7\x21\x57\xff\x0a\x11\x99\x36\x46\xaa\
+\x5c\xd0\xee\x42\xe4\x90\x34\x5e\xa0\x6a\x49\xbd\x86\x56\x54\x30\
+\x8c\x37\x51\x25\x0c\x52\xde\x40\xff\x26\xa6\x4c\x64\x6b\xd1\x4b\
+\x2d\x6b\x5d\x3a\xe9\x49\x1f\xdd\x5d\xf3\x62\x57\x0b\xef\xbe\x4a\
+\xdf\xb3\x84\x9f\x11\xfa\x90\xa2\x8a\x80\x36\xaa\x55\xa6\xe5\x9c\
+\x8d\x02\x72\x8d\x17\xa8\x5b\x92\x6d\x26\x16\xb0\x17\x6f\x13\x6a\
+\x84\xb7\xe9\x7f\x8b\x4c\x4a\x48\xf4\x9e\xf3\x13\xd7\x2d\x7c\xde\
+\x9d\x78\x2f\x65\xd3\xfc\x17\x7c\xfa\x73\xbf\xb4\xa8\x90\xd7\x97\
+\x96\x79\xeb\x25\x8a\x3f\x22\xbc\x45\xe8\x47\x16\x39\x26\xe4\x39\
+\x31\xeb\x74\x63\x83\xdc\xd0\x8f\x7c\xf1\xab\x42\x7d\xb9\x18\x6f\
+\x15\xeb\x77\x8b\xf1\x0e\x31\x2e\x17\x87\x3e\x2b\x96\x96\x8a\xe5\
+\x65\xe2\xaa\x79\xee\xc1\x45\x38\x1f\x27\xa3\x19\x00\x19\x14\x1e\
+\x99\xeb\xaf\xf6\x7f\x4c\xec\x3e\x5f\xdc\x78\xae\x18\x97\x8a\xf1\
+\x6e\x31\xfe\xad\xb8\xf3\x22\xb1\x7b\xbe\xb8\xb8\xd5\x65\x68\x6f\
+\x6c\x07\x46\x5c\x34\x92\xa2\x42\xd8\xc7\xc8\x2e\x0e\x1e\xa0\xad\
+\xc0\xfa\x3e\xcf\x4d\xfa\x37\x9f\xf9\xda\xaf\x3c\x8d\xdd\x78\x13\
+\x3b\x50\x02\x40\x0d\xa3\xd7\xbe\xe6\xbb\x53\x5e\xd4\xba\x37\xb5\
+\xa6\xa5\x99\xd7\xb6\xb0\xf1\x09\xf4\x30\xa3\x93\x03\x35\x3e\xde\
+\x6e\x01\xb2\x8d\x5d\x64\xc1\x67\x43\x8d\xb4\x4c\xf1\x20\xed\x05\
+\x7a\x0e\xe8\x5e\xf2\x8c\xbb\x7f\x35\xa0\x1b\x43\xd8\x8b\xfe\x23\
+\x2c\xa1\x14\x07\x17\x6f\xb0\xec\x8a\x29\xee\xb9\xf3\x14\x3f\x68\
+\xc9\x3a\x6d\xc3\x4f\x99\xdc\x4e\x2d\xb2\x70\xa2\x25\xf8\x3e\x32\
+\xa8\x35\xe6\x08\xdd\x6a\x4b\xf1\x3a\x31\xde\x28\x56\xaf\x53\xfa\
+\x8b\xd9\x56\xe2\x22\x2c\xc4\x49\x68\xf6\xdb\x93\x20\xff\x9d\x53\
+\x5d\xbb\xf9\x5c\x95\x8d\x1f\x11\x5f\x99\x2b\xfe\x62\x8e\x1e\x9c\
+\x8a\x09\x8d\x9b\x81\x15\x62\xbc\x45\x5c\x77\xb1\x1f\xe0\x63\xf8\
+\x7d\x9c\x86\x36\x04\x1f\x8c\x1c\x26\x3c\x73\xa6\xfb\xf7\xcc\x17\
+\x8b\xbf\x0e\x16\xa0\xbd\x61\x02\x80\x93\xb0\x18\x1f\x46\x27\x32\
+\x1a\x4b\x1e\xd3\xf0\xbb\x38\x17\x6d\x8d\x9b\x01\x12\x0c\x63\x13\
+\x8a\x28\x6b\x3c\x65\xf4\xa3\x8c\x1a\x0e\x3a\x02\xc7\xfd\xef\x36\
+\xff\x07\xe2\x88\x5c\xa0\xce\x9a\xc4\x5c\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x2e\x32\
+\xff\
+\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x48\x00\
+\x48\x00\x00\xff\xdb\x00\x43\x00\x04\x02\x03\x03\x03\x02\x04\x03\
+\x03\x03\x04\x04\x04\x04\x05\x09\x06\x05\x05\x05\x05\x0b\x08\x08\
+\x06\x09\x0d\x0b\x0d\x0d\x0d\x0b\x0c\x0c\x0e\x10\x14\x11\x0e\x0f\
+\x13\x0f\x0c\x0c\x12\x18\x12\x13\x15\x16\x17\x17\x17\x0e\x11\x19\
+\x1b\x19\x16\x1a\x14\x16\x17\x16\xff\xdb\x00\x43\x01\x04\x04\x04\
+\x05\x05\x05\x0a\x06\x06\x0a\x16\x0f\x0c\x0f\x16\x16\x16\x16\x16\
+\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\
+\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\
+\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\xff\xfe\x00\
+\x12\x42\x6c\x75\x65\x20\x41\x6e\x67\x6c\x65\x20\x53\x77\x69\x72\
+\x6c\xff\xc0\x00\x11\x08\x01\x20\x01\x20\x03\x01\x22\x00\x02\x11\
+\x01\x03\x11\x01\xff\xc4\x00\x1b\x00\x00\x02\x03\x01\x01\x01\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\x01\x02\x05\x00\x06\
+\x07\xff\xc4\x00\x3d\x10\x00\x02\x01\x03\x03\x03\x03\x02\x04\x04\
+\x05\x02\x06\x03\x01\x00\x01\x02\x03\x00\x04\x11\x12\x21\x31\x05\
+\x41\x51\x13\x22\x61\x32\x71\x14\x42\x81\xa1\x06\x23\x52\x91\x33\
+\x62\xb1\xc1\xd1\x72\xe1\x15\x24\x34\x43\x53\xf1\x82\x92\xa2\xf0\
+\xff\xc4\x00\x19\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x06\xff\xc4\x00\x24\x11\
+\x01\x01\x00\x02\x02\x02\x02\x02\x02\x03\x00\x00\x00\x00\x00\x00\
+\x00\x01\x02\x11\x21\x31\x12\x41\x03\x22\x51\x61\x04\x71\x13\x32\
+\x42\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00\x3f\x00\xf6\
+\x3a\x14\xae\xdf\xa5\x74\x5a\x84\x80\x67\xf5\xa2\x45\x83\x10\x14\
+\x39\x50\x83\xa8\x57\xde\x6f\x7c\x3c\xad\x7b\x16\x08\xe1\x98\xe4\
+\x0d\xea\xd7\x0f\x7b\x79\x27\xb1\x4e\x91\xc1\x63\x81\x4a\x58\xcb\
+\xae\x2e\x46\x46\xd4\xcb\x4a\x74\x80\x18\x81\x8e\xd5\xce\xce\x44\
+\xc3\x33\xdb\x5c\x8b\x6b\xd8\x90\x29\xdb\x56\x38\xad\x8f\xe1\xeb\
+\x48\xa4\x96\xe0\xb3\x65\xed\x70\xf1\x6f\xe7\xbd\x65\xcb\xa2\xfa\
+\xdc\x43\x31\xc4\x80\x7b\x1c\xf7\xf8\xaa\x74\x2e\xa1\x2d\x87\x59\
+\x81\x67\x38\x5c\xfa\x52\x13\xe0\xd6\x72\x96\xce\x15\xba\x49\x62\
+\x4e\x73\x9a\x82\x1b\x1b\x0c\xd7\x5d\x0f\x4a\xe5\xd4\x70\x1b\x6a\
+\xbc\x32\x03\x5c\x94\x5b\x1b\xd7\xb7\x71\x9c\x80\x3c\x56\xf5\xbc\
+\xd6\x9d\x4a\xdc\xc7\x21\x5d\x64\x63\x71\xcd\x60\xe1\x49\xc1\x00\
+\xd0\x3d\x66\xb7\xba\x0d\x1b\x15\xc5\x63\x2c\x3c\xba\x5d\x8b\xd7\
+\x7f\x86\xe6\x79\x49\x86\x5c\xaf\xf4\xb1\x27\xfb\x57\x9c\xbf\xe8\
+\x1d\x46\x26\xff\x00\xd2\x93\xbf\x2a\x32\x0d\x7b\x15\xeb\x8c\xb1\
+\x61\x86\xb3\xe2\x83\x71\xd5\x2f\x25\x1b\x15\xb7\x4f\x20\x02\x6b\
+\x78\x7c\x9f\x24\xed\x35\x1e\x41\x3a\x3f\x5a\xcf\xb2\xde\x6c\x0a\
+\x66\x2e\x83\x71\xf5\x5e\x5e\x2a\x79\x54\x3a\x9b\xfe\xd5\xb5\x2d\
+\xd1\x6c\xeb\x9a\x79\x49\xe7\x2e\x40\x3f\xa0\xa5\x2e\xe6\xd3\x11\
+\x27\x00\x78\x1b\x0a\xe9\xfe\x4c\xaa\x68\xb4\x36\xd6\x56\x79\x68\
+\x53\x53\x0f\xfd\xc9\xb0\x48\xfb\x0e\x28\x37\x37\x99\x24\x47\xb9\
+\x3f\x98\xd2\xd7\x13\x3c\x8d\x96\x3b\x0e\x07\x6a\x0e\xa2\xc4\x84\
+\xed\xcb\x1e\x05\x6a\x63\xbe\xcd\xa6\x57\x24\xff\x00\x53\x1a\x5d\
+\x08\xfc\x48\x55\xdc\x28\x20\x91\xc6\x6b\x9a\x53\x21\x30\xdb\x9f\
+\xfa\xe4\x3f\xed\x47\xb3\x80\x2a\x0f\x03\xf7\xae\xd8\xe2\x8b\x5e\
+\x82\xcb\xa8\x72\x30\xc2\xb4\x7a\x04\xe0\xb9\x8c\xf1\x32\xed\xf7\
+\xa4\x9b\x06\x45\x5d\xb7\x04\x1a\x1f\x4c\x90\xc6\xec\x3b\xa1\x0c\
+\x3f\xde\xb1\xf2\x62\xb0\xff\x00\x4f\x96\x5b\x6b\xd6\x64\x24\x34\
+\x6d\xb8\xad\x5e\xbb\x61\x0f\x57\xe9\xdf\x8b\x81\x46\xac\x7b\xc0\
+\xec\x7c\xd2\x11\x28\xff\x00\xc7\xb3\x8f\x6c\x8a\x18\x56\x9d\xa4\
+\xad\xd3\xaf\xb3\x8c\xc1\x26\xcc\x0f\x02\xb8\x67\x3d\xce\xd6\x3c\
+\x05\xf5\xb3\xdb\xce\x54\x82\x08\x3c\xd5\xed\xa7\x0d\xec\x93\x9e\
+\xc6\xbd\x97\xf1\x8f\x45\x49\xa1\xfc\x65\xa8\xd4\x8c\x33\xb7\x6a\
+\xf0\xf7\x11\x34\x72\x10\x46\x08\xae\x98\x67\x32\x89\x61\xc3\x1b\
+\x21\xd4\x99\xda\x8d\x6d\x78\xea\x70\x4d\x29\x65\x75\x8c\x47\x21\
+\x38\x1c\x1e\xe2\x98\x96\x2d\x5e\xe0\x46\x4f\x04\x70\xd5\xaf\xed\
+\x1a\x50\x5c\xa3\xe3\x7c\x1a\xd0\x70\x9d\x42\xcf\xd1\x94\x81\x22\
+\x8f\x6b\x1e\xf5\xe6\x15\x9a\x37\xc3\x0a\xd1\xe9\xf7\x63\x20\x33\
+\x7d\x8d\x63\x2c\x3d\xac\x21\x7d\x6f\x25\xad\xc3\x47\x22\x91\x40\
+\x35\xb9\xd5\xa0\xf5\xe1\x32\xa9\x2f\x8e\x57\x39\x23\xe4\x56\x23\
+\x0c\x1f\x22\xba\xe3\x97\x94\xfd\xa0\x53\x2e\xda\x87\xeb\x53\x0b\
+\x67\x63\x57\x3e\x28\x32\x2e\x96\xa7\x40\xd5\x59\x50\x32\x13\xc3\
+\x0e\x0d\x42\x3e\x76\x3c\xd5\xea\xca\x15\x46\xd2\x41\xee\x0f\xbb\
+\xe6\x9a\xce\x54\x50\x6e\x23\xdf\x58\x1f\x71\x53\x6c\xd9\x5d\x3e\
+\x38\xa7\xb0\xca\x39\x0a\x28\xd1\xb0\x75\xc1\xa5\x90\xfb\x6a\x55\
+\x88\x39\x15\x34\x0b\x1b\xb4\x12\x1c\x6e\x0d\x32\xf2\xfa\x91\x6a\
+\x43\xc7\x34\x90\x93\xce\xf5\x31\xbe\x96\xd4\xa7\x4f\xc7\x9a\xa1\
+\xc8\x2e\x08\x20\x37\xf7\xa6\x6f\x42\x5d\x42\x1f\xff\x00\x71\x79\
+\xc7\x7f\x9a\xcf\x24\x37\xb9\x76\xf2\x28\x96\xf3\x18\xcf\x91\x52\
+\xcd\xf3\x07\xa4\xb0\xb9\x17\x76\x28\x5b\xfc\x68\x94\x24\xbf\x24\
+\x70\x6a\xcc\xfa\x06\xdc\xd6\x6f\x4a\x60\x6e\x7d\x54\xc8\x05\x30\
+\xfe\x0f\x8a\x7e\x1c\xcd\x37\xf9\x45\x70\xb3\x55\xa3\x56\x84\xe8\
+\x2c\xdd\xe9\x79\xcb\x4b\x71\x85\xa3\xce\xd8\x51\x1a\xf3\x50\xa0\
+\x42\xbb\x6e\xe7\xf6\xac\x4a\x25\x55\x20\x5c\x9f\x73\x9e\xd4\x36\
+\x2c\xe7\x2c\x6a\x0e\xe7\x2c\x72\x4d\x02\xee\xe5\x62\x5e\x77\xad\
+\x48\x09\x71\x2a\x42\xb9\x63\x59\x17\xb7\x26\x46\xcb\x1c\x01\xda\
+\xab\x34\xf2\x4d\x36\x95\x05\xd8\xf0\xa2\xa6\x54\x86\xcd\x3d\x6b\
+\xc6\x0c\xff\x00\x96\x31\x5d\x31\xc7\x49\x43\x54\x66\x8c\xc9\x2b\
+\x7a\x51\x0e\xe7\x93\xf6\xa5\x59\xde\xed\xbd\x1b\x71\xa2\x15\xfa\
+\x9b\xcf\xc9\xae\x06\xe7\xab\x5c\x12\xcd\xa2\x14\xe4\xf6\x02\x9d\
+\x51\x1f\xa6\x21\x81\x71\x12\xf7\xc6\xec\x7c\xd7\x59\x35\x7f\x68\
+\x1d\xbc\x4a\xab\xa2\x31\xfc\xb1\xdc\xf2\xd4\x73\x80\x2b\x80\x00\
+\x60\x54\x10\x59\xc2\x2f\x26\xba\x5b\x31\x82\xf0\x8d\x11\x3d\xc1\
+\x3b\xfd\x29\xf7\x34\xa5\x87\xfe\xa0\xb7\x81\x4c\x75\x77\x58\xd1\
+\x2d\x97\x88\xc6\xff\x00\x24\xf3\xfb\x50\xec\x10\x8b\x76\x7e\x35\
+\x9d\x22\xb8\xce\xb7\x46\x82\x39\x8e\x4b\x77\x27\xe8\x90\xc5\xfa\
+\x56\xfd\xdc\x42\x48\x06\xaf\x15\xe7\x2f\x09\xf4\xe5\x45\x18\x30\
+\xb8\x70\x3c\xed\x8a\xde\xb1\xb9\x17\x1d\x3d\x5d\x4f\x22\xb8\xd6\
+\x97\xe8\x77\x4b\x04\xa6\xca\xe7\xdd\x0c\x9b\x0c\xf6\xac\x2f\xe3\
+\xbe\x86\x6d\xa4\x37\x10\x8c\xc6\xdb\xe4\x76\xa7\xa7\x74\x92\x4d\
+\x07\x66\x1c\x56\xb7\x4a\xb9\x8e\xfe\xcd\xba\x7d\xe0\x05\x80\xc0\
+\x27\xbd\x63\x29\x70\xbe\x50\xed\xf2\xe9\x10\xe7\xc1\x14\x6b\x2b\
+\xa3\x19\xd0\xfb\xa9\xe4\x56\xb7\xf1\x77\x46\x93\xa7\x5e\x91\x8f\
+\x63\x6e\xa6\xb0\xd9\x73\xf7\xaf\x46\x36\x65\x36\xcb\x60\xc5\x1c\
+\xb0\xea\x56\xf5\x13\xcf\xe6\x4f\xbd\x26\xea\xf0\xc9\xff\x00\xfb\
+\x06\x81\x65\x75\x25\xbc\x81\x94\xef\xdc\x79\xad\x7b\x75\x82\xf6\
+\x2c\xa6\xcd\xdd\x3f\xe2\xaf\x42\xbd\x3a\xf7\x4b\x69\x62\x74\x9e\
+\xc6\x96\xea\x90\xfa\x73\x97\x4d\xd1\xf7\x15\xd7\x76\xb2\x40\xdb\
+\xe7\x03\x83\xe2\xba\x39\xf5\x27\xa5\x2e\xea\x7b\xf8\xa9\x27\x3b\
+\x8a\x56\xa1\x94\x30\xc1\xa2\x4f\x19\x8d\xbc\x83\xc1\xaa\x56\xfb\
+\x40\x1d\x4a\x9a\x24\x4d\x91\x83\xcd\x59\xc6\xa1\x8a\x0b\x02\xad\
+\x8a\xcf\x40\xf4\x00\x34\x4e\x07\x63\xc5\x12\x26\xc8\xdf\x91\x51\
+\x38\xf6\x83\xdc\x1d\xab\x42\xd1\x1c\xc6\x0f\xc5\x5a\xad\x14\x79\
+\x5f\x00\x51\x6d\x6d\xa4\x9e\x5d\x11\x2e\x71\xcb\x76\x15\x37\xa0\
+\x1c\x57\x11\x5a\xb0\xda\x5a\x45\x81\x23\xeb\x3d\xc8\xe0\x50\xfa\
+\xa5\xad\x9b\xd9\xbc\xd0\x36\x1e\x3d\xf6\x35\x9f\x2e\x46\x7a\xb1\
+\x06\x8c\xbe\xec\x63\xbd\x2e\x37\x35\xa5\xd3\xe2\xc6\x24\x61\x9e\
+\xca\x3c\xd6\xf7\xa9\xb1\xa1\x64\x86\x2b\x75\x84\x0f\x7b\x6e\x6b\
+\x52\x15\x10\xc2\x14\x7d\x5d\xe9\x7b\x08\x3d\x21\xea\x3e\xee\xdf\
+\xb5\x1a\x69\x12\x24\x2e\xec\x00\x15\xe5\xca\xee\xb4\xb6\x74\xfb\
+\x8e\x33\xf3\xda\x95\x9a\xed\x03\x15\x07\x26\xb3\x7a\x8f\x54\xf5\
+\x9c\xa4\x1c\x77\x34\xbc\x0d\x34\xaf\xe9\xc2\xa5\xdc\xf7\xf1\x5b\
+\xc7\x0f\xca\x6d\xa5\x71\x7a\xb1\xa7\xb8\xee\x78\x14\xb2\x43\x73\
+\x7c\xda\xc8\xf4\xe3\x1c\xb3\x6d\x9f\xb5\x31\x6f\xd3\xe1\xb6\x4f\
+\xc4\x5f\x48\x19\x80\xce\x93\xc0\xac\xee\xb3\xd6\x1a\x5c\xc7\x6f\
+\xed\x4e\x36\xef\x5b\xc6\x6e\xf0\x0d\x79\x7f\x69\xd3\xa2\x31\x5a\
+\x80\xd2\x70\x5e\x91\xb2\xb4\xb8\xea\x52\x9b\x8b\x97\x2b\x10\x39\
+\x66\x6f\xf6\xa2\x74\xae\x94\x65\x5f\xc6\x5e\x9d\x10\x8d\xc0\x3c\
+\x9a\x62\xf2\xef\xd6\x22\x18\x57\x44\x2b\xc2\x8e\xf5\xbe\x27\x18\
+\xa2\xd3\x34\x6c\xa2\xde\xd9\x74\x42\xbf\xff\x00\x5f\x26\xae\x83\
+\x02\xa9\x6e\xbe\xc2\x48\xde\x99\xb4\x4d\x72\x80\x78\x15\xac\x35\
+\x26\xc0\xd9\x4a\xe3\x3b\x66\x8d\xd1\xd4\x35\xc9\x73\x8c\x2e\xf9\
+\x3c\x55\x6f\x94\x89\x08\x1b\xed\xb0\xab\x74\xdf\x74\x72\xc4\x83\
+\x2e\xea\x42\xfc\xd6\x7e\x4b\xb8\xb1\x99\x7a\xfa\xe6\x24\xf2\x77\
+\x3f\xae\xf4\xef\x4f\x02\x6b\x06\x88\x11\xad\x0e\xa0\x3b\x91\x49\
+\xde\xc4\xc9\x21\x6c\x1c\x1f\xda\xa9\x04\xcf\x14\x81\x91\x88\x23\
+\xb8\xa5\x9b\x9c\x23\x5d\xd9\x65\x55\x98\xf3\xa4\xa4\xa3\xc7\x83\
+\x51\xd1\x6f\x0d\xab\x35\x9c\xa7\x83\x95\x3e\x68\x76\xb3\xfa\xe7\
+\x5c\x60\x2c\xc0\x7b\x93\xb3\x8a\xa5\xf4\x62\x78\x43\xc4\x08\x64\
+\xfa\x47\x71\xf1\x5c\xf5\xea\xa8\xf7\x53\x7f\xe7\x0e\x0e\x0f\x22\
+\x9d\xb7\x94\x9d\x2e\xa7\x12\x2e\xe3\x1d\xeb\x06\x2b\x86\x79\x57\
+\x5f\x22\xb6\xd2\x26\x0a\x1d\x6a\xd9\xc2\x35\xae\x84\x3d\x73\xa5\
+\x35\xbc\x98\x13\x28\xf6\xe7\xcd\x7c\xff\x00\xa9\xda\x49\x6d\x74\
+\xf1\x3a\x90\xca\x71\x5e\xb5\x24\x78\xe4\x13\x44\x70\xc3\x91\x55\
+\xfe\x26\xb5\x8b\xa9\xf4\xf1\x7b\x12\x8f\x59\x3f\xc4\x03\xfd\x6b\
+\x9e\x3f\x4b\xaf\x4b\xdb\xc4\x91\x93\xe0\x8a\x2d\xbc\x8f\x1b\xeb\
+\x8c\xe0\xaf\x22\xa6\xe6\x32\x18\xb6\x31\xbe\xff\x00\x06\x85\x93\
+\xc8\xd9\x85\x77\x47\xa1\xe9\xd7\xb0\x5e\xc5\xe9\x5c\xe3\x51\x18\
+\xcd\x07\xa9\x74\xb7\x84\x17\x8f\xdc\xb5\x8f\x0b\x1c\xfa\x91\xec\
+\x47\x22\xb7\x3a\x47\x55\xca\xfa\x53\x6e\xbc\x1c\xf6\xac\x59\x67\
+\x31\x59\x8a\xe5\x46\x87\x19\x5f\x07\xb5\x52\x54\xc7\xb9\x4e\x54\
+\xfe\xd5\xb7\xd4\x6c\x22\x99\x3d\x58\x4f\x23\x3b\x76\xac\x89\x63\
+\x92\x16\xdf\x8f\xd8\xd5\x99\x4a\x00\x71\x50\xca\x18\x55\xe4\x50\
+\xe0\xe3\x62\x7b\x52\xec\x25\x8c\xf3\x91\x5b\x44\x10\x55\xaa\xe4\
+\x87\x88\x82\x77\xc5\x41\x91\x58\x7b\x81\x1f\x35\x41\xb9\xd2\xa7\
+\x24\xf3\x8e\xd5\x06\x85\xad\xbc\xf7\x0e\x12\x30\x4f\x93\xd8\x56\
+\x86\x16\xda\x1f\xc3\xc4\x76\x1b\xbb\x7f\x51\xa2\x4d\x74\x74\x68\
+\x8d\x44\x6b\xe1\x6b\x3e\xea\x75\x8d\x79\xdf\xb0\xac\xf3\x45\x2f\
+\x67\x23\xd8\x9c\x9f\xda\x84\x87\x45\xb3\x26\x7f\xc4\x60\x4f\xe9\
+\xff\x00\x7a\xa2\xe5\xdb\x53\x72\x7f\x61\x57\x0a\x65\x93\x0a\x36\
+\x1b\x7e\x95\xad\x02\x59\x45\xad\xb5\x1e\x05\x7a\x0e\x97\x6b\xa0\
+\x09\x24\x1b\xf6\x1e\x28\x3d\x16\xc8\x2a\x89\x64\x18\x03\xe9\x15\
+\x6e\xb3\xd5\x62\xb3\x8c\xa2\x1d\x52\x9e\x14\x57\x2c\xb2\xf2\xba\
+\x8a\x6b\xa8\x5e\xc1\x69\x09\x79\x1c\x7c\x0a\xf3\x5d\x43\xa8\x4f\
+\x7d\x26\x01\x2b\x1f\x81\x41\x93\xd7\xbc\x98\xcd\x70\x4e\xfd\x8f\
+\x02\x8a\x88\x89\xc6\xf5\xac\x30\x90\xb5\x58\xd4\x28\xda\xb6\x6c\
+\x67\x4b\x2e\x91\xeb\xae\x4b\x37\x35\x94\xda\x48\xd8\x60\x8e\xd4\
+\x79\x98\xc9\xd1\x1a\x34\xdd\xa3\x6c\x91\xf1\x56\xcd\xa1\x4b\xfb\
+\xfb\x9b\xd9\xb1\xb9\xcf\x0a\x2b\x47\xa1\xf4\x75\x8d\x3f\x17\x7d\
+\xed\x0b\xb8\x53\xda\xa9\xfc\x2d\xe8\xc3\x69\x35\xcc\x8a\x09\x43\
+\xb5\x57\xa8\x5f\xcf\x74\x70\xcd\xa5\x3b\x28\xe2\xb5\x95\xbf\xeb\
+\x8a\x89\xd5\xaf\x8d\xcb\xfa\x68\x34\xc2\x9f\x48\xf3\x4b\xda\xa8\
+\x2d\x93\xbd\x06\x8b\x6a\x48\x93\x03\xbd\x35\xa8\x8d\x28\xc0\x10\
+\x1c\x73\x46\xb5\x1a\x63\x04\x77\xe6\x87\x18\xfe\x41\xc6\xe4\xd5\
+\xa1\x60\x23\xd2\xd9\x07\x3d\xc5\x49\xce\x22\xf3\xa3\x3b\x7a\x88\
+\x77\x5e\xd4\x04\x56\x57\xf5\x21\xdb\x07\x3a\x7b\x8f\xfb\x53\x0a\
+\x7b\x83\x50\xe8\xaf\xee\xc6\x0f\x91\x49\x65\x9a\xa2\x4d\xcc\x17\
+\x63\x4d\xca\x80\xc7\x6d\x63\x9f\xd7\xcd\x23\x7f\xd3\x9e\x2f\x7c\
+\x64\x32\x1e\x08\xe2\x98\x91\x3f\xf9\x54\x91\xfd\x4b\xfe\xf5\x30\
+\xc9\x24\x1b\xaf\xba\x33\xb1\x07\x8f\xfb\x54\xf1\xb8\xf4\x32\x51\
+\x9e\x37\x04\x12\xac\x0d\x69\x5b\x5c\x89\xfd\xf8\xc4\xa0\x7b\xc0\
+\xfc\xc3\xcf\xdc\x53\x12\x5a\x5a\x5e\xc7\xa9\x1b\xd2\x93\xc1\xe0\
+\x56\x6d\xd5\x9d\xd5\x9c\x81\x8a\xb6\x01\xc8\x71\xc5\x5d\xcc\xb8\
+\x14\xbb\x88\x47\x78\xa5\x7e\x97\x20\x8a\xf5\x16\xc8\x7f\x0a\xa0\
+\xef\xb5\x79\xf9\xff\x00\x9b\x6d\x1c\x9a\x70\x43\x83\x8f\xd6\xbd\
+\x1c\x8e\xb0\xdb\x2e\xa3\x8d\xaa\x77\xc2\x95\x99\x74\xb6\xa5\xe3\
+\xbd\x56\x29\x0c\x32\x6b\x4d\xd5\xb6\x65\xf3\x4b\x7e\x2c\x89\xcf\
+\x74\x26\x99\x5c\x32\xec\x72\x0f\x15\x73\xc3\x49\x19\x3d\x72\xc1\
+\x41\x37\x10\x8c\xc6\xdf\x50\xac\x29\xe2\x29\x21\x1f\xd8\xf9\xaf\
+\x5e\xe0\xa8\x2a\x46\x54\xf2\x2b\x17\xaa\xd9\x7b\x48\x51\xf4\xee\
+\xb5\x31\xba\xe2\xab\x20\x67\x3a\xd3\x66\x1f\xbd\x11\x18\x91\xea\
+\x47\xed\x23\xea\x1e\x28\x64\x10\x72\x39\x15\x28\x48\x3e\xac\x78\
+\xd4\x39\x1e\x6b\x5d\x23\x4f\xa6\x75\x16\x88\x81\xfd\xd4\xf7\xad\
+\x5d\x16\xf7\xb1\xe6\x2d\x21\x8f\x28\x78\x35\xe7\x30\xb3\x21\x92\
+\x2d\x98\x7d\x49\xe3\xed\x44\xb4\xba\x78\xdc\x64\x90\x47\x7a\xc6\
+\x58\xef\xa5\xd9\xcb\xbb\x07\x47\x3a\x46\x0f\xf4\x9f\xf6\x34\x9b\
+\xa1\x53\x86\x04\x1f\x06\xb6\xed\xaf\xe3\x99\x04\x77\x2a\x08\xfe\
+\xaa\xbc\xb6\xaa\xf1\xe6\x16\x59\x13\xfa\x58\x03\x52\x65\x67\x14\
+\xd3\xce\xb4\x28\x4e\xe9\x9a\x95\x8c\x28\xd9\x40\xad\x76\x86\x04\
+\x38\x7b\x55\xcf\xfd\x47\xfe\x6a\xd1\x0b\x35\x1b\xda\x29\x3f\x3b\
+\xff\x00\xad\x6b\xcb\xf4\x8c\xeb\xcb\xa0\x9e\xd5\xdc\xd2\x63\x53\
+\x36\xa6\xdc\x9e\x05\x46\x34\xee\x72\x58\xd1\x10\x15\x1f\xe7\x6d\
+\xbe\xc2\xb4\x2c\xa0\x9f\x62\xee\x4f\x26\xb6\xba\x3f\x4f\x0a\xa2\
+\x59\x46\x07\x20\x1a\x17\x44\xb1\x1a\x7d\x69\x86\x00\xdf\x7a\xa7\
+\x58\xea\x85\xc9\xb7\xb5\x60\x14\x6c\xcf\x5c\xf2\xb7\x2b\xe3\x14\
+\x6e\xb5\xd5\xc4\x47\xf0\xf6\x9e\xe7\xe0\x91\xc0\xac\x84\x4c\x31\
+\x92\x66\xd6\xe7\x92\x6a\x8b\xa5\x3e\x9d\xc9\xe5\x8d\x76\xe4\xf9\
+\xad\xe3\x8c\xc6\x20\xad\x22\x8f\x9f\xb5\x74\x77\x01\x5b\x3e\x98\
+\xa1\x84\x63\x53\xe9\x9a\xd0\x60\xb4\x32\x6e\x87\x4b\x78\x35\xd1\
+\x3b\x45\x20\x61\xfa\x8e\xc4\x52\xc5\x18\x76\xa9\x49\x19\x76\x3b\
+\x8f\x06\xa5\x0d\x5a\xca\x96\xd3\xba\xe3\xf9\x17\x1b\x7f\xd0\x6a\
+\x92\x21\x47\x28\xdc\x83\x55\x52\x8e\x84\x1d\xd4\xec\x47\x71\x50\
+\x5e\x50\x00\x75\x12\x60\x60\x30\x38\x3f\xad\x20\x9a\xea\xa9\x73\
+\x9f\xa4\x2f\xdc\xe6\xaa\xf2\xf6\x5d\xf3\xe3\x6a\xa0\xe9\x2c\x88\
+\x76\x72\x28\xa9\xd4\x25\x5d\xb5\xa9\xfb\xd0\x2d\x2c\xae\x6e\x9b\
+\xd8\xa4\x0f\x34\xf1\xe9\x30\x42\x99\xb8\x98\x06\xac\x5b\x8a\xba\
+\xde\xf9\x59\x80\x75\xd0\x4f\xe6\x1c\x7e\xa2\xb5\xba\x5c\xd1\x33\
+\x7a\x52\x28\x3a\xb8\x3e\x6b\x15\x6d\xed\xd9\x75\x42\xe2\x48\xf5\
+\x69\x24\x0c\x15\x34\x78\x01\x82\x71\x10\x3e\xd2\x35\x21\xf1\xe4\
+\x52\xea\xc1\xad\x75\x6d\xa3\x2d\x1e\xe9\xdc\x1e\xd4\x9b\x46\x41\
+\xd5\x16\xc7\xba\xf9\xad\x4b\x59\x3d\x58\x15\xfb\x91\xbd\x0e\xea\
+\xd8\x37\xba\x31\x83\xdc\x79\xa9\x8e\x76\x71\x4d\x33\x15\x03\x36\
+\x13\xf9\x6f\xe3\x38\xfe\xd5\x75\x92\xee\x0c\x86\x52\x57\xbe\xa1\
+\x90\x6a\xd2\xc6\xad\x90\xc3\x07\xcd\x42\x2c\xf1\x9c\x47\x2e\xdf\
+\x7a\xde\xb1\xa8\xe8\x90\x4f\x22\x96\x41\x1c\x4a\x43\x39\x19\xc0\
+\xc1\xff\x00\xb5\x5b\xaa\xde\x7e\x26\x5c\x26\x42\x0e\x07\x9a\x1c\
+\xe2\x77\x04\xc8\xd9\x03\xb5\x2f\x82\x4d\x6f\x0c\x64\xe4\x76\x68\
+\xb6\xd3\xb4\x67\x19\xdb\xc5\x0c\x21\xc5\x54\xec\x6b\x5b\xd8\xd3\
+\x47\x59\x13\x3b\x1a\xa4\xb1\x87\x5c\x1f\xd2\x92\x8a\x46\x43\xb1\
+\xa6\xa1\x9c\x30\xc1\xae\x79\x61\xee\x11\x87\xd6\xad\x3d\x19\x7d\
+\x45\x1e\xd3\xcd\x67\xee\xac\x19\x7f\x51\xe6\xbd\x5d\xf4\x0b\x34\
+\x2c\xa7\x7c\x8d\xab\xcd\x5d\x44\x62\x98\xa1\x18\x19\xa9\x39\x80\
+\x7e\xe0\x44\xd0\x9c\x30\xe6\x8c\x81\x2e\xd0\xbc\x60\x2c\xa3\xea\
+\x4f\x3f\x22\x80\x32\x8c\x58\x7e\xa2\xac\xca\x75\x09\xa0\x38\x61\
+\xbe\xd5\x9e\x95\x68\xa5\x78\xce\x37\x23\xb8\xf1\x5a\x16\xb7\x5e\
+\xd0\x51\xc8\xfb\x52\xf1\x7a\x5d\x41\x3d\xb8\x8e\xe4\x72\x0f\x0f\
+\xff\x00\x7a\x59\x95\x92\x42\xa4\x14\x71\xcd\x5e\xd1\xb2\x6e\x19\
+\xc6\x19\xb3\x54\x67\xf9\xac\xe8\xee\x99\x76\x90\x03\x8a\xe9\xae\
+\x98\x8d\x09\xde\x9a\x02\x4d\x8f\xa8\xe3\x7f\xca\x2b\x4b\xa3\x59\
+\x7a\x8d\xeb\x4b\xb2\x2e\xfb\xf7\xa1\x74\xbb\x36\xb9\x93\xd4\x7d\
+\xa3\x5a\x27\x56\xbf\x04\x7e\x16\xd8\xe1\x06\xc4\x8a\xcd\xb6\xdd\
+\x45\x4f\x59\xea\x1e\xa1\xfc\x35\xb1\xd2\x83\x66\x61\xde\xb3\x94\
+\x60\x60\x0a\xe4\x5e\xc2\x89\x1e\x95\x18\xc1\x63\x5a\x92\x63\x11\
+\x09\x19\x3d\xa8\xa9\x1a\x2a\x92\xf2\x2a\xe2\xb8\x25\xc3\x0c\x05\
+\x20\x1f\x1b\x55\xe2\xb1\x62\x32\xd5\x2e\x4a\x13\xcb\x18\xda\x35\
+\x67\x3e\x78\x15\x46\x9a\x61\xc4\x48\x3f\xbd\x30\x62\x0b\xb2\xf0\
+\x2a\x0a\x8a\x9b\xd8\x42\xe2\xea\xe2\x35\xd5\xe9\xa9\x03\xe2\xaf\
+\x65\x77\x1d\xda\xee\xba\x1b\xef\xb5\x1a\x78\xc3\x29\x04\x67\x35\
+\x94\x0b\xf4\xee\xa0\x1c\x2e\xa8\x89\xf7\x29\xaa\x8d\x57\x89\xd1\
+\xb6\x06\xaa\x59\xf8\x24\xd6\xad\xb4\x31\x5c\x40\xb2\xc6\x75\x44\
+\xe3\x2b\xe4\x51\xbf\xf0\xd4\x2c\x08\x62\x45\x4f\x39\xed\x74\xc5\
+\x48\xde\x43\x80\x39\xad\x6e\x99\xd2\x81\x02\x49\xb6\x14\xed\xbd\
+\xac\x36\xe9\xa9\x80\xda\x94\xea\x9d\x4c\x05\x29\x19\xc0\x1d\xeb\
+\x37\x2b\x97\x10\x1e\xfa\xfa\x1b\x48\xbd\x38\x30\x08\x1d\xab\x0a\
+\x7b\x89\xef\x27\x08\xb9\x25\x8e\x00\xf3\x41\x96\x47\x9a\x4c\x0c\
+\x9c\x9d\x85\x6f\x74\x4e\x9e\x2d\x13\xd5\x94\x03\x2b\x0f\xff\x00\
+\x51\x5a\xd4\xc6\x1d\xa6\xde\xd1\x6d\x6d\x62\xb6\x1b\xbc\x8e\x0b\
+\x7e\x95\x5e\xa6\xbe\x93\x46\x41\xfa\x1c\x53\x76\x2d\xeb\x5d\x1b\
+\x83\xc0\xf6\xc7\xf2\x3b\x9a\x57\xae\x36\x5b\x1d\xcb\x8a\x98\xf6\
+\x56\xaf\x40\x60\x49\x43\xc0\x6a\xd6\x9e\xde\x32\xd8\x56\xd2\xde\
+\x0d\x63\x74\x13\x8b\x96\x1f\xe6\x14\xff\x00\x5e\x94\xc7\x26\x54\
+\xef\x59\xca\x6f\x20\x2b\xdb\x4d\x4d\xc6\x97\xfd\x8d\x21\x2c\x6d\
+\x1b\x69\x61\x83\x4d\xda\xf5\x13\xb2\xcc\xba\xbc\x1a\xee\xb6\xca\
+\x66\x4c\x0c\x7b\x73\x57\x1b\x65\x29\x33\xf4\x63\xcd\x04\xa6\xf4\
+\x62\x73\x55\x66\x55\x5d\x4d\xc0\xfd\xeb\xa4\xa8\xa1\x42\x3e\xd4\
+\x19\xd7\x1b\xd5\x65\xbc\x19\xc6\xa0\x3e\x06\xf5\x45\x9d\x5f\x87\
+\x06\xb7\x05\x80\xc9\xc5\x48\xca\x9f\x91\x55\x15\x7d\x61\x97\xdc\
+\x37\x15\xbd\xe8\x33\x6f\x28\x6f\x6b\x56\x77\x5f\x80\x16\xcf\x91\
+\x45\x49\x01\x3e\xd3\xc5\x57\xa8\xbb\x49\x6e\x7b\x90\x2b\x3a\x97\
+\x98\x31\x88\x38\xdf\xea\x5d\x8d\x44\x6d\xe9\x36\x47\xd2\xdf\xb5\
+\x16\x61\xa5\xd5\xff\x00\x2b\x8d\xfe\x0d\x0a\x40\x06\x57\xb1\xac\
+\x71\x44\xce\x85\x48\x9e\x23\x82\x37\xda\x99\xbe\x90\xcd\x65\x6f\
+\x72\xc0\x07\x6c\xa9\x3e\x71\x49\x96\x22\xd0\x8c\x9d\xce\x05\x31\
+\x76\x34\xac\x36\xe3\xf2\x26\x4f\xdc\xd6\x62\x82\xea\x59\xc7\xda\
+\xb8\xe1\x06\x2a\xcc\xc0\x0a\xa2\xee\x75\x37\x02\xb6\x8d\x1e\xa7\
+\x76\x12\x3f\xc2\x5a\xec\xa3\x66\x23\xbd\x25\x1a\x66\xaa\x4a\xa0\
+\xcb\x1a\x19\x92\x47\x38\x5f\x68\xa9\x8e\x1c\x70\x1c\x55\x88\x0f\
+\xe6\x48\x17\xe2\x89\x14\xf6\xa8\xfa\x63\x5d\x44\xf7\xac\xe2\xb8\
+\x1b\x9a\x7f\xa3\x59\xfa\x8f\xea\xb0\xf6\x8e\x2a\xe5\x84\x93\x75\
+\x5a\x70\x7b\xd3\x56\x30\x29\x7b\xc9\x80\x3e\x9a\x77\xa3\x5f\x4e\
+\x21\x8b\x0b\xfa\x0f\x35\x94\xcc\xcc\xc4\x93\x96\x3c\x9f\x15\xc1\
+\x45\x9a\x5d\xb4\x21\xff\x00\xa9\xa9\x37\x9b\x0d\xb1\x62\x3c\xd4\
+\xdc\x3e\x7f\x96\x9c\x77\x35\xd6\xf1\x99\x1c\x46\xbf\xad\x75\xc7\
+\x1d\x4d\xd4\x5e\x39\xc3\x6c\x4d\x52\xfa\x11\x2c\x7f\x15\x79\xed\
+\xd1\x49\xf4\xd8\x92\x3c\xd5\x23\x90\xee\x8f\x4e\xfa\x43\x5f\xc2\
+\x73\x98\xcb\x59\xc8\x76\x3b\xa5\x6f\xc9\x30\x86\x02\xc7\xb5\x79\
+\x3f\x74\x53\xac\x89\xb1\x53\x90\x6b\x7d\xa6\x17\x9d\x33\xd4\x53\
+\xbe\x37\x1e\x0d\x73\xca\x72\xb0\xaf\x52\xea\x0c\xeb\x8c\xe0\x78\
+\xac\xb9\x1d\xa4\x7e\xff\x00\x02\xba\x7c\x99\x48\x27\x35\xb5\xd0\
+\xfa\x68\x8a\x31\x75\x70\x32\x4f\xd0\xb5\xbe\x31\x88\xb7\x44\xe9\
+\xe2\xdd\x44\xf3\xae\x64\x3b\xaa\x9e\xd4\xdd\xf4\x85\xcf\xe1\x90\
+\xfb\xdf\x77\x3f\xd2\x2a\xd7\x53\x7a\x30\x99\x5b\x77\x3b\x20\xa3\
+\x74\x0b\x12\x75\x5c\x4f\xbf\xe6\x62\x7b\x9f\x15\x8b\x7d\xd5\x5a\
+\x08\xc4\x2a\x18\x8c\x05\x4d\x87\x8a\xc8\xea\x04\xc9\x77\x12\x9e\
+\x4b\x67\xf7\xad\x7e\xa3\x27\xb4\x81\xf9\x8e\x6b\x12\x59\x14\xf5\
+\x20\x49\xd9\x76\xad\x61\xf9\x2b\x6b\xa2\x3a\xac\xe4\x9d\xf7\xcd\
+\x37\xfc\x40\xa4\x95\x90\x6e\xad\xde\xb1\xe3\x79\x23\x6d\x69\xc7\
+\xc5\x3b\x1f\x53\x62\x9e\x9c\xf1\x07\x5f\x9a\x96\x73\xb8\x01\x57\
+\x77\x2e\x72\x4e\xe0\x62\x8c\x12\xda\xe7\xff\x00\x4e\xc6\x37\xfe\
+\x86\xe0\xfd\x8d\x01\x83\x23\x15\x60\x41\x1c\x83\x52\x71\x4a\x87\
+\x65\x45\xd4\xdc\x0a\xcf\x9a\x76\xba\x93\x0a\x48\x40\x71\xff\x00\
+\xd5\x4f\x57\x9c\xed\x0a\x1d\xcf\x34\x95\xc4\xde\x92\x7a\x51\xf3\
+\xdc\xd7\x44\x30\xf3\xc5\x11\xd2\x8b\xab\x1c\x81\x54\x33\x5b\xbf\
+\xf8\x88\x50\x9e\x0d\x67\xe4\xe6\x88\x92\x63\xda\xfe\xe5\x34\xd0\
+\x7d\x43\xae\xf1\xbe\xb5\xf1\x57\x8e\x65\x62\x41\xf6\x91\xd8\xd2\
+\x2a\x5e\x1f\x7c\x4c\x4a\x78\xf1\x4c\x45\x2c\x77\x03\x0d\xed\x6f\
+\x35\xad\xd8\x2d\x78\x8d\xfe\x2c\x5c\x8e\x7e\x6b\xad\xae\x16\x54\
+\xd2\xdb\x37\x71\x52\x1d\xe2\x3a\x64\x19\x07\x83\x4a\xde\xa0\x8d\
+\xc4\x91\x9f\xaa\xac\xfd\x0a\xdf\xa0\x54\x75\xf0\x72\x29\x69\xdb\
+\x6c\xf7\xa2\xdd\x39\x7c\x67\xb9\x19\xa0\xbf\xba\x4c\x76\x1b\x9a\
+\x82\x60\x4d\x52\x47\x19\xe1\x7d\xed\xf6\xab\x4d\x2f\xa9\x2b\xca\
+\x76\xd4\x76\x15\xc8\x74\xdb\x96\xe1\xa6\x3f\xd9\x68\x5f\x51\xf8\
+\xa9\x04\x8f\x73\x64\xf0\x29\xab\x0b\x57\xb9\x90\x6d\x84\x1d\xea\
+\x96\x56\xed\x71\x28\x55\x04\x28\xe4\xd3\xbd\x42\xe5\x2d\xe1\x16\
+\xd6\xfc\xfe\x63\x53\x2b\x7a\x9d\x8c\xc6\x80\x86\xfe\x63\x64\xd4\
+\xec\xa3\x15\x53\x29\x66\x21\x01\x63\xf1\x52\x90\x3b\x90\x65\x27\
+\x1f\xd2\x0f\x3f\xad\x76\xf2\x98\xf6\x22\x22\x25\x98\x20\xdf\x7d\
+\xf1\x5b\x22\x68\xed\xe1\x09\x8d\xf1\xf4\x8a\x42\x2d\x31\x02\xb1\
+\x28\x51\xe1\x7f\xe6\xa5\x62\x67\x7d\xff\x00\xb0\xae\x19\xe5\x72\
+\xab\x13\x23\xb4\xf2\x6a\x24\xf8\xa1\x5d\x48\x10\x7a\x69\xc9\xe6\
+\x8d\x78\xc2\xdd\x74\x29\x05\xcf\x6f\xe9\xa4\xcf\xb4\x12\x77\x26\
+\x98\x63\xb2\xa0\x0c\x6c\x37\x26\x9e\x44\x16\xd6\xf8\xff\x00\xdc\
+\x7e\x7e\x2a\x3a\x64\x01\x54\xdc\xcb\xc0\xfa\x73\x55\x91\xfd\x49\
+\x4b\x53\x2c\xbc\xae\xa0\x90\x36\xde\x83\x71\x16\xa1\x90\x37\x14\
+\x65\xae\x62\x01\xc1\xa2\x14\x53\xa9\x74\xb1\xc1\x1c\x53\x3d\x2a\
+\xe4\xdb\xcc\x63\x73\x88\xdf\x63\xf1\x43\xb8\x8b\x57\xb9\x79\x14\
+\x0c\xe7\x63\xc8\xa6\xb6\x18\xea\x11\xfa\x57\x59\x1b\x82\x72\x0f\
+\x9a\xf4\x76\x72\xa4\xb1\x44\xe3\xe8\xf4\xc6\x3e\x3c\xd7\x9d\x8d\
+\xfd\x7b\x7f\x49\xcf\xbd\x07\xb4\x9e\xe3\xc5\x3d\xfc\x3b\x71\x84\
+\x30\x31\x39\x53\x95\xfb\x77\xa9\x79\x8a\xd0\xb0\x88\xf5\x0e\xa7\
+\xea\x6f\xa1\x5b\x08\x3c\x0f\x35\xe8\x2f\x15\x61\xb4\x58\xa3\x18\
+\x07\x6a\xc9\xfe\x17\x2b\x14\x97\x08\x4e\x19\x4e\x40\xf2\x0d\x6c\
+\x48\x16\xe6\x15\xd2\xf8\x22\xb9\xe5\xda\xb0\xaf\x89\x69\x88\xe0\
+\x0d\x85\x65\xbd\x9b\xb3\x93\xa8\x57\xa6\xba\xb7\x82\x35\xd7\x70\
+\xe8\xa0\x56\x55\xef\x57\xb3\x84\x14\xb5\x84\x48\xc3\xf3\x37\x15\
+\xd3\x1b\x7d\x25\x20\xb6\x57\x24\x7b\x5c\xfe\x99\xa1\xcf\x15\xd4\
+\x1f\x51\x6a\xb4\x97\xb7\xf7\x5c\x48\x51\x3e\x3d\xa2\xac\xa9\x70\
+\xd0\xe2\x59\x88\x4f\xea\x6d\x87\xef\xcd\x6b\xae\xc0\x6d\x6e\x24\
+\x49\x41\xd6\x70\x4d\x6a\x5d\xdc\x0d\x3e\xa3\x9d\xca\x8c\x9a\xc9\
+\x2b\x00\x7c\x25\xca\x16\xed\x9c\xe0\xfe\xb8\xa1\xde\xdc\x4a\xcf\
+\xa1\x86\x9c\x72\x29\x64\xb5\x13\x2c\xd9\x99\xa6\x3c\x9d\x80\xa5\
+\xc0\x69\x1f\x61\x92\x6b\x91\x4b\xb6\x33\xfa\xd3\xd6\x6b\x1a\x0c\
+\x0c\x13\xe6\xb4\x16\xfc\x14\xf8\xc8\x23\x8a\x0a\xfb\xbd\xa7\xea\
+\x1f\xbd\x6d\x0d\xd6\xb3\xfa\x9c\x1a\x64\xf5\x54\x60\x37\x38\xec\
+\x6a\xd9\xa0\xbc\x52\x14\x3e\x47\x71\x52\xe5\x35\x6a\x4c\xa9\xa1\
+\x33\x31\x23\xda\x09\xff\x00\x5a\xbc\x70\xcd\x21\xf6\xae\x91\xe4\
+\xd4\xd6\x83\x96\xd3\x89\x07\xa7\x20\xcd\x06\xe8\xe2\x3d\x3f\xe6\
+\xa0\xdb\x6b\x8e\xf0\x23\xf3\x44\xbd\x61\xab\x63\xc6\x4d\x27\x14\
+\x2f\x21\xf7\x6f\xd8\x55\x61\x5d\x6e\x01\xfc\xdb\xb1\xf0\x2a\x1c\
+\x82\xd8\xf2\x72\x6a\xed\xec\x88\x8f\xcd\x26\xe7\xe0\x76\x15\x28\
+\x89\x9b\x5c\x9b\x6c\xa3\x65\x1e\x05\x5e\xda\x17\x9a\x41\x1a\x0f\
+\xbd\x52\x18\xd9\xdc\x2a\x8c\x93\x5a\x2e\xc9\x61\x6f\xa5\x77\x95\
+\xbf\x6a\x96\xe8\x4d\xd4\xc9\x65\x07\xe1\xe1\x23\xd4\x23\xdc\x7c\
+\x56\x69\x6c\x1c\xb1\xc9\x27\xfb\xd4\x3b\x9c\xeb\x73\x96\x35\x54\
+\x0c\x5b\xd4\x6d\xb0\x72\x2b\x58\x60\x1b\x8a\x10\x83\x03\x6a\xb8\
+\x45\xce\xfb\xfd\xe8\x2b\x70\x73\x82\x06\x0d\x31\x19\x57\x5d\x42\
+\xb9\xd9\xa5\x12\xde\x03\x23\xe9\x50\x07\xfb\x54\xde\xdd\x43\x6d\
+\x98\x20\x21\xe6\xc6\xed\xd9\x6a\xf3\x49\xe8\x74\xa9\x25\x41\xee\
+\xc7\x35\x93\x6e\xa0\x46\x0f\x2c\x77\x27\xcd\x31\xc7\xca\x8b\xe3\
+\x72\xcc\x72\xc7\x92\x68\xb6\x56\xe6\xe6\x7f\xf2\xaf\x35\x48\x91\
+\xa6\x94\x46\x9c\x9a\xd5\x40\x96\xb6\xba\x57\xb0\xdc\xf9\xad\x7c\
+\x99\x6a\x6a\x12\x16\xea\x72\x84\x41\x12\xed\x8a\x52\x32\x58\xe9\
+\x15\x4b\xa9\x0c\xb3\x12\x3c\xd3\x08\x12\xd6\x0d\x6f\x82\xed\xc0\
+\xac\x4e\x20\xb4\x8c\xb0\x45\x96\xdd\x8f\x02\x92\x77\x67\x6d\x44\
+\x9d\xeb\xa5\x76\x96\x42\xef\xdf\x81\x4e\x74\x9b\x07\xb9\x94\x0c\
+\x1c\x7f\xa5\x6e\x4d\x4d\xd4\x29\x1c\xac\xbf\x22\xaf\x22\xac\x8b\
+\xad\x4e\xe2\xbd\x15\xe7\x40\xb6\xf4\xc0\x0f\xa1\xf1\xde\xb1\xfa\
+\x87\x4b\xba\xb3\x3a\xd4\x6b\x4f\xea\x5d\xf1\x52\x65\x2a\xe8\x82\
+\xb1\x0d\x91\xb3\x0a\x3c\x73\x14\x99\x6e\x13\xea\x07\xdc\x3c\xd0\
+\x8e\x97\x19\xe1\xaa\xa0\x90\x6a\xa3\xd3\x59\xce\x89\x71\x15\xd2\
+\x9f\x63\xae\x97\x3f\x07\x8a\x8e\xa1\x7d\x3d\xaa\x95\x46\x20\xe7\
+\x15\x8f\xd2\xae\x82\x66\x09\x0f\xf2\xdf\x8f\x8a\xd0\xbd\x43\x35\
+\xb1\x07\x77\x41\xcf\xf5\x0f\x35\x27\x7c\xa9\x66\xfc\x6d\xd8\xd6\
+\xe5\xb4\x77\x63\xb0\xa2\xda\xda\x2b\x1f\xe5\xae\xb2\x39\x76\xd9\
+\x45\x75\x90\xf5\xbf\x0f\x1b\x13\xa7\x24\x11\x9f\x14\x3e\xab\x7a\
+\xe5\x8c\x11\x00\x91\xae\xd8\x1b\x52\xdb\xbd\x44\x16\xe2\xe6\xde\
+\xdb\x64\xc4\xd2\xff\x00\x51\x1e\xd1\xf6\x15\x97\x7b\x77\x2c\xf2\
+\xfb\x9c\xbb\xf8\xec\x28\x32\x39\x76\x2b\x19\xfb\xb5\x58\x28\x88\
+\x61\x46\x5c\xd5\x93\x43\x95\x7d\xc0\x13\x96\xe4\xfc\x53\xb7\x31\
+\x34\x97\x0a\x80\x7b\xb4\x0c\xe7\xed\x43\xb0\x84\x34\xc1\x58\xed\
+\xf5\x39\xf8\xa7\x6c\x07\xab\x77\x2c\xc7\x81\xb0\xa6\xf4\x12\x36\
+\xd3\x01\xc6\x2b\xad\xd9\x96\x60\x3e\x77\xad\x2b\xc9\x16\x38\xce\
+\x69\x0b\x24\x32\x4a\x5f\x1b\x03\x5b\xef\x1d\x8d\x18\xcf\xb2\xb9\
+\xb7\x1b\xd4\x20\xda\xa6\xad\xe6\x0a\x2c\x51\xaf\x0a\x07\xe9\x5c\
+\xc3\x02\xaf\x43\x9d\xc2\xa1\xfb\x57\x3a\x33\xc6\xfd\x41\xdb\xfa\
+\x45\x2f\x70\xf9\x63\xe2\xaf\xac\xe8\x79\x4f\x32\x1f\xda\x97\x39\
+\x63\x5a\x82\xd1\x0c\x9d\x4d\xc0\xdc\xff\x00\xb0\xa9\xf7\x3c\x99\
+\xc6\x49\x3c\x57\x1e\x02\x0f\xd7\xef\x4f\xda\xc4\x96\xd0\xfe\x22\
+\x5e\x71\xed\x15\x9b\x74\x2d\x10\x8e\xc6\x0d\x6f\xbc\xac\x36\x1e\
+\x2b\x3e\x79\x4b\x39\x77\x39\x24\xd5\xae\x25\x79\xa5\xce\x0b\x33\
+\x6c\x00\xa3\x7a\x31\xda\x47\xea\x5c\x10\xd3\x1e\x13\xfa\x69\x8c\
+\xd7\x37\xb5\x02\x38\xf4\xff\x00\x36\x5e\x7b\x29\xaa\x3b\x7a\x8d\
+\xe9\xaf\x27\x93\x56\x29\x24\xc4\xbc\x87\x48\xf1\x44\x8b\xd2\x8d\
+\x72\xa7\x71\x5b\xb9\x6b\xa4\x04\x0c\xed\xc1\xa2\xdb\x4a\x63\x7c\
+\x37\x07\x9a\xe9\xe3\x1f\x52\xd0\xb3\x9e\x6a\x0d\x58\xf4\xcd\x6a\
+\xf0\xe4\x15\x71\xb1\xac\xb8\x83\x21\x68\x5f\x66\x43\x83\x46\xb2\
+\x9c\xc3\x20\x0c\x7d\x87\x9f\x8a\xbf\x59\x8c\x65\x2f\x23\xdf\xb3\
+\xe3\xb8\xac\x4e\x2a\x8b\xd2\x18\x28\x7d\x86\xa1\x51\xd4\xee\x4f\
+\xd1\xe6\x81\x69\x22\xa4\xc1\xb3\xed\x61\x83\x42\xea\x39\x17\x43\
+\x3c\x1e\x2a\x59\xf6\x3d\x09\x0b\x24\x09\xea\x38\xcb\xfe\x51\x42\
+\x95\xde\x46\xf5\x1f\xbf\x02\xab\x18\xd6\xc5\xdb\x7c\x53\x16\x50\
+\x34\xd2\x06\x23\xdb\xd8\x79\xad\xc9\x27\x35\x16\xe9\xf6\xaf\x3c\
+\xca\x31\x9c\x9d\x85\x7b\x1e\x93\x69\x1d\x9d\xa9\x91\x80\xc8\xfd\
+\xe8\x3f\xc3\xfd\x35\x63\x8c\x48\xe3\x0d\x8c\x9f\x81\x51\xd6\xaf\
+\x32\xde\x8c\x7b\x01\x5c\xb2\xb7\x3b\xa8\xa5\x3a\x8d\xc3\x4f\x70\
+\x4e\x76\x15\xd1\x25\xcc\x6b\x94\x39\x07\x90\x7b\xd0\x6d\xd7\x54\
+\xc0\x7c\xd6\x90\xc6\x77\xe2\xb5\x95\xd4\xd1\x18\xfd\x46\xc6\x2b\
+\x8c\x90\x82\x09\x7c\x8f\xa5\xbf\xe2\xb1\xae\x23\x78\xa4\x29\x28\
+\xc3\x0f\xde\xbd\xa4\x90\x47\x2c\x64\x66\xb3\x7a\x8f\x4f\x0e\x9a\
+\x5d\x75\x01\xc1\x1c\x8a\x98\xe7\x3a\x34\xf3\x35\xa9\xd2\xee\xcb\
+\xc6\x23\x63\xfc\xc4\xce\x9c\xfe\x61\xe2\x93\xbe\xb5\x7b\x77\xfe\
+\xa5\xec\xd4\x05\x25\x58\x30\x38\x20\xe4\x1a\xd2\x36\x58\x34\x32\
+\x89\x23\x3b\x67\x50\xf8\x3d\xc5\x21\xd6\x50\xac\x8e\xc9\xc3\x8c\
+\x83\x4d\xd8\x5c\xac\xe9\xa1\xfe\xbe\xff\x00\xf3\x53\x73\x09\x78\
+\x4c\x7d\xc6\xe9\xff\x00\x14\xdf\x2a\xc9\x85\xd5\x2d\xf5\x01\xbf\
+\x14\x58\x13\x4a\x7a\xae\x72\x5b\x7a\x01\x4d\x2c\xf1\xf6\xe4\x53\
+\x76\x84\x39\x84\x73\xbd\x69\x0c\x7f\x81\x66\x7f\xf9\x24\xdc\xfd\
+\xbb\x0a\x3d\xb3\x08\x2d\x37\x3c\x72\x7e\x69\x77\x26\x5b\xa2\x49\
+\xce\x9d\xfe\xf5\x17\xcc\x70\xb0\xae\xe4\x6e\x69\x20\xa4\xf2\xb5\
+\xc4\x81\x57\x38\xa7\xad\xa3\x11\xc6\x16\x85\x65\x6f\xa0\x6a\x3c\
+\xd3\x20\x56\xad\x13\x5d\xda\xa2\x56\x08\x3d\xc7\x7f\x14\x9d\xcd\
+\xc1\xf3\x8f\x8a\xce\xed\x06\x9e\xe5\x23\x07\x1b\x9a\x46\x59\x9d\
+\xd1\xf3\xcb\x6c\x28\x6c\xc5\x8d\x70\xd8\x67\xfa\x77\xa6\x80\xee\
+\x9b\xdf\xa5\x78\x1b\x0a\xa2\x8d\x2b\xf2\x6a\x57\x76\x2c\x69\xbb\
+\x28\x06\x9f\x5e\x73\x85\x1b\x80\x7b\xd2\xdd\x09\xb2\x81\x63\x8f\
+\xd7\x9b\x60\x38\x06\x85\x3c\xb2\xdd\x4e\x15\x14\xb1\xe1\x54\x51\
+\x24\x69\x2f\x26\xd2\x83\x08\xbf\xd8\x0f\x26\xba\x59\x23\xb7\x43\
+\x14\x07\x73\xf5\x3f\x73\xf6\xf8\xac\xce\xf7\x7b\x55\xa2\xf4\xed\
+\x01\xd3\x87\xb8\xee\xdf\x95\x3e\xd4\xb4\x92\x7b\xcb\x6e\xce\x79\
+\x63\x54\xcb\x3e\xc0\x6d\xe0\x55\x91\x54\x1d\xfd\xc7\xe3\xb5\x6b\
+\x48\xab\x33\x31\xdc\xe6\xbb\x43\x63\xe9\x34\x50\xf8\xd8\x05\x1f\
+\x6a\xba\x48\x78\x6c\x11\xf6\xaa\x07\x1b\x8e\xdf\xda\xa6\x48\xc3\
+\x2e\xa4\xa3\xf5\x1b\x07\x85\x8d\xc5\xb0\xd7\x0b\x6e\x31\xda\x94\
+\x8e\x42\x0e\x57\x63\xdc\x56\x65\x97\xa1\x53\x90\x70\x68\xd6\xb3\
+\x85\x1e\x9c\x9b\xa1\xdb\x7e\xd5\x0c\x16\x45\xca\xec\xd4\x22\x08\
+\x38\x35\x7b\x13\x24\x46\x09\x8c\x64\xe5\x1b\x74\x35\x37\xd9\x96\
+\xcb\x5f\xe7\x8f\x9a\xba\xb0\x96\x1f\x45\xf9\x07\x28\x7c\x1a\x1a\
+\x92\xac\xc1\xc6\xc7\xda\xe2\x94\x0a\xd5\xb5\x44\xd5\xe9\x7f\x84\
+\xa1\x49\x88\x2e\x33\xa4\x0c\x57\x97\x40\x61\xba\x68\xb9\x07\x71\
+\xf6\xaf\x5d\xfc\x24\x9f\x85\xe9\xad\x77\x21\xe7\x65\x1e\x6b\x39\
+\xdf\xaf\x0b\x1b\x1d\x56\xe9\x6d\x6d\xfd\x24\x3e\xe2\x37\xc5\x60\
+\x3b\x16\x62\xc4\xe4\x9a\x25\xdc\xcd\x3c\xc6\x46\x3c\xd0\xa9\x86\
+\x3e\x31\x0c\x59\x15\x46\xd4\xc7\x6a\x65\x67\x47\xe0\x71\x59\xd4\
+\x6b\x45\x25\xb2\x78\x14\xca\x7b\x58\x6e\x49\x04\x60\xb9\x6c\x0a\
+\x98\xee\xa2\x71\x82\xe0\xfc\x83\x59\x97\xf3\x09\x64\xd2\xbf\x4a\
+\xfe\xf4\xac\xb9\x8c\x65\x99\x57\xee\x71\x58\xf0\xd9\xb6\xb5\xec\
+\x11\xc9\x19\xd4\xa3\x07\xbf\x63\xf7\xac\x0e\xa3\x62\xf0\x31\x65\
+\x04\xa7\xfa\x53\x76\xb7\xce\x98\xc3\x87\x5e\xe3\x39\x06\x9d\x47\
+\x8a\xe1\x3f\x97\x8c\x9e\x63\x27\xfd\x29\x37\x89\xdb\xce\x23\x32\
+\x30\x65\x38\x22\xb5\x6c\xae\x44\xe3\x49\x38\x61\xbf\xeb\x42\xea\
+\x36\x38\x26\x48\x41\xdb\xea\x52\x37\x14\x84\x6c\xd1\xb8\x65\x38\
+\x22\xb7\xdc\x43\x3d\x5e\xd8\x86\xf5\x90\x6e\x39\x14\x0b\x46\xc1\
+\xc0\xdb\xf3\x2f\xdf\xc5\x69\xdb\x4c\x97\x56\xe5\x4e\x35\x63\x04\
+\x56\x55\xcc\x6f\x6f\x30\xc7\x19\xca\xd2\x5f\x41\xe8\xce\x2e\x01\
+\x1f\x9c\x66\x89\x68\xba\xa6\x91\x98\x64\xea\xa5\xa0\x7d\x51\x82\
+\xbc\xae\xe3\xfd\xc5\x33\x03\xe9\x9b\x23\x89\x06\x7f\x5a\xd4\x0d\
+\x8d\x85\x0e\x59\x82\xec\xa7\xf5\xa1\xdc\x4c\x73\xa7\xf6\x14\xa4\
+\xd2\x1c\xe0\xff\x00\x6a\x02\x4d\x2f\x3b\xef\x4b\x92\xcc\x7c\xe6\
+\xa4\x29\x66\xdf\x7a\xd3\xe9\xf6\x62\x35\xf5\xa6\x1f\x20\x1a\x99\
+\x65\x20\x5e\xd6\xd4\x24\x66\x69\x86\x30\x32\x05\x27\x78\xc0\xb3\
+\xb2\xf0\xdb\xd3\x7d\x56\xe8\xcb\x21\x44\xfa\x45\x24\x41\x2b\xc6\
+\x45\x4c\x65\xee\xaa\xf6\x56\xfa\x86\xb9\x3f\xc3\x5d\xcf\xcd\x5a\
+\xe6\x5f\x59\xf1\x9d\x31\xaf\x00\x50\xb5\xcb\xe9\x08\xf2\x0a\x8e\
+\x2a\x84\x7f\x51\xfe\xd4\xf1\xbb\x41\x1e\x7c\x27\xa7\x16\x42\xff\
+\x00\xad\x0f\x4e\x0e\x5c\xd5\x24\x95\x23\x5c\xf1\xfe\xb4\xbf\xe2\
+\x4c\x87\xda\x8e\x40\xec\xa2\xb5\x31\xd0\x68\x39\x63\xa5\x14\xb7\
+\xc0\xa2\xc5\x6b\x33\x9c\xbe\x54\x78\x1c\xd2\xa8\xfd\x43\x4e\x22\
+\x68\xe0\x1e\x02\xea\x3f\xde\xb8\x5b\x5c\x3b\x89\x1e\xf2\x76\x90\
+\x70\x43\x60\x7f\x6e\x29\xaa\x34\xe2\xe9\x4b\x32\x1f\x4e\x72\x1c\
+\x76\x6a\x5a\x7b\x7b\x9b\x56\xc4\xd1\x9d\x3f\xd4\x38\xa8\x49\x7a\
+\x94\x64\x1d\x69\x26\x3b\xb2\xe1\x8f\xea\x2b\x42\xcf\xad\x44\xea\
+\x20\xbd\x89\x97\x56\xd9\x61\xb5\x63\xef\x14\xad\x8d\xfc\xf6\x5f\
+\xcb\xd3\xea\x41\xfd\x3c\x91\x45\xbe\xb6\x8e\xe9\x3f\x15\x62\x41\
+\xfe\xa4\x1c\x8a\x50\xe2\xa2\x32\xf1\x4b\xea\xc0\xfa\x1c\x7f\x63\
+\xfa\x56\xee\x1c\xee\x22\x88\xc4\x36\x0e\x43\x0e\x68\x8e\x04\x83\
+\xc1\xa3\xbc\x90\x5e\x26\x2e\x53\xd1\x9c\x70\xeb\xc3\x52\xae\x1a\
+\x29\x74\x39\x07\xc1\x1d\xe8\x2a\x41\x07\x07\x63\x56\x95\xb5\x44\
+\x18\x8f\x76\x71\x9f\x22\xa2\x53\x9c\x79\xa0\xfb\xe7\x99\x61\x87\
+\x76\x63\x8a\xa0\xfd\x1a\xcd\xef\xfa\x88\x03\xe8\x5d\x8b\x1e\x00\
+\x15\xe9\x2e\xe6\x56\x45\x82\x21\xa6\x28\xc6\x00\xf3\xf3\x4b\x58\
+\xc2\x96\x56\x42\xde\x3f\xa8\x8f\xe6\x37\x9f\x8a\xba\x2b\x33\x00\
+\xa0\x93\x59\xd7\xb1\x00\x12\x70\x06\x4d\x39\x6d\x66\xe5\x75\x11\
+\xfd\xe8\xd6\x96\xe9\x02\x7a\x92\xee\xde\x2a\xb7\x17\x6c\x4e\x10\
+\xaa\x81\x58\xb9\xdb\xc4\x5d\x14\xba\x8f\xd3\x9b\x4e\x6a\x92\xb1\
+\x29\xe9\x26\x40\xee\x68\xf2\x24\xb3\x39\x25\x46\xc3\x76\xec\x2b\
+\x2b\xac\xf5\x48\x6d\x50\xc3\x6a\xe2\x49\x8f\xd5\x20\xe1\x7e\xd5\
+\x7b\x9a\x13\xd4\xae\x61\xb2\x8f\x4e\x43\x4c\x46\xc8\x3b\x7c\x9a\
+\xc8\x09\x25\xd3\x99\xa7\x62\x4b\x1a\x8b\x68\x9a\x56\xf5\xa5\x24\
+\xe4\xe7\x7e\x5a\x9f\x86\x3c\x8c\x9d\x80\xad\xc9\xa4\x29\xf8\x52\
+\x87\x54\x65\x90\xf9\x14\x48\xee\x6e\x21\x20\xba\xea\xff\x00\x32\
+\x9c\x1a\xbd\xe4\xe1\x13\x3f\xd8\x79\xa0\xb4\x97\x18\x19\x80\xe0\
+\xf9\x34\x1a\x96\xb7\xb1\xce\x06\xa6\xf7\x70\x1b\xfe\x68\x77\xf6\
+\xa2\x4f\x7a\x00\xaf\xf1\xc3\x7d\xab\x37\x28\x5b\x20\xb4\x4f\x4c\
+\x5b\xde\x3c\x5e\xd9\xb0\xcb\xe4\x56\x75\xf8\x02\x46\x78\x64\xc8\
+\xc8\x61\xcd\x3c\x4c\x77\xb6\xc4\x70\xe2\xa2\x78\x92\xe6\x3d\x68\
+\xc0\x9f\x23\x9f\xd6\x92\x05\xe1\x97\x6d\x98\x53\xb1\xd0\x3b\x43\
+\x31\x46\xe7\x34\xe4\x47\xdb\xa0\x7d\xd4\xd0\xae\x51\x6e\xe1\xf5\
+\x13\x69\x17\x91\xe6\x87\x6b\x21\x65\xd3\x9c\x32\x9d\xaa\xc0\x66\
+\x90\x97\x62\x76\x20\x55\x23\x1a\x8f\xcf\xee\x68\xd2\x28\x65\xf5\
+\x17\xb8\xc3\x0a\xa5\x89\x1f\x89\x4c\xf1\xa8\x66\xb4\x35\x3a\x65\
+\x90\x8d\x04\xf3\x8f\xfa\x54\xd0\xba\xc5\xe6\x47\xa6\xa6\x99\xeb\
+\x17\x26\x35\x2a\x2b\x09\xd8\xb3\x12\x7b\xd7\x2c\x66\xfe\xd5\x5c\
+\x37\x34\x54\x5c\x2e\x0d\x44\x4b\xdc\xd4\xc8\x74\xae\x6b\xb4\x88\
+\x0c\x8b\xb9\x00\xe2\xba\x34\x57\x3a\x58\xe1\xbb\x67\xbd\x4b\x12\
+\x4e\x4d\x4c\x41\x58\xe1\x94\x1a\xd5\x82\x45\x8b\x31\xe1\x4f\xdc\
+\xd1\x97\xa7\xc8\x17\xf2\x8f\xd4\x54\xc3\x10\x27\x09\x23\x29\xf0\
+\x77\xa3\x24\x13\x9e\x4e\xc3\xbd\x62\xec\x0d\x6d\x11\x37\x92\x40\
+\x7e\x05\x4b\x98\xd1\x72\xab\xa4\x79\xef\x5d\x70\x56\x2f\xa9\xb5\
+\x1f\x8a\x52\x47\x67\x39\x35\x66\x3f\x91\x69\x25\x66\x3b\x6c\x2a\
+\x8c\x75\x2e\x96\x01\x87\x83\x57\xb6\x89\xa5\x7c\x0e\x3b\x9a\xb5\
+\xcb\xa8\x6d\x11\x81\x85\xf8\xe6\xad\xb3\xa1\x47\x65\x27\x65\x15\
+\x42\x01\xf8\xae\xae\xa0\xa4\x84\xae\xd9\xd8\xd5\x5d\xb5\x15\x07\
+\xb5\x75\xc3\x70\x3b\xd5\x19\x82\x82\x7b\xd4\xa2\x27\x62\x4e\x95\
+\x19\x2c\x70\x00\xef\x5b\x1d\x22\xcc\x5a\xc5\xad\xc0\x32\xb7\x27\
+\xc7\xc5\x03\xa2\xd9\x85\x02\xe6\x61\xef\x3f\x40\x3f\x96\xb5\x11\
+\x0b\x1f\x8e\xe6\xb3\x47\x46\x85\xdb\x03\xfb\xd3\x70\x98\xe0\x5c\
+\x82\xab\xe5\xdc\xe0\x56\x67\x52\xea\x90\x59\xa9\x8e\x3c\x49\x20\
+\xfc\xa0\xff\x00\xa9\xac\x5b\xbb\x9b\xcb\xd7\xd5\x34\x87\x1d\x87\
+\x61\x59\xd5\xc9\x5e\x9e\x4e\xab\xd3\x52\x5c\x48\xe6\x66\x1d\xfb\
+\x0a\x15\xe7\xf1\x0d\x8c\x03\xf9\x10\x29\x3c\xf1\x5e\x55\xe1\x90\
+\x6e\x0e\xf5\x06\x30\x83\x54\xad\x92\x78\x1e\x6a\x78\x43\x67\xfa\
+\xaf\x5b\xbe\xbf\x52\x9a\xbd\x38\x87\x61\xb5\x2b\x67\x6d\xac\x7a\
+\x92\x6c\x9d\x87\x76\xa2\xda\xdb\xe5\x44\x93\x8c\x2f\xe5\x4f\x3f\
+\x7a\x6e\x24\x2c\x78\xda\xb7\x24\x9d\x22\x21\x8f\x51\xce\x36\x15\
+\x6b\x87\x00\x15\x1b\x79\x34\x49\x59\x63\x4c\x01\xbd\x67\xdd\x33\
+\xcb\x2f\xe1\xa3\xdd\xdf\x9f\x8a\x09\xb5\x1e\xbc\xcd\x3b\x0f\xe5\
+\xc7\xb2\x8f\x26\x9c\xd0\xa0\x8d\x7e\xe7\x6e\x73\xda\xa2\x14\x48\
+\xd4\x22\x8f\xe5\xc5\xff\x00\xf4\x6a\xb9\x26\x4c\x9e\x49\xab\x20\
+\x39\xb4\x47\x18\xc7\x3d\xa8\x17\x1d\x36\x45\x24\xc4\x4f\xfd\x27\
+\x8a\xdb\xe9\x89\x11\xb8\x60\xec\x03\x01\xed\x07\x6c\xed\x5d\x73\
+\xac\x48\xc0\x8c\x6f\xc5\x67\x7c\x8f\x36\xa6\x7b\x57\xc8\x0d\x1f\
+\xc7\x63\x4d\x2c\x90\xdd\xa6\x92\x34\xc8\x29\xfb\xa1\x1b\xae\x99\
+\x50\x10\x7e\x2b\x3a\xe2\xc1\x87\xf3\x2d\xdf\x20\x6f\x8c\xee\x2a\
+\x76\x02\x0c\x96\xf3\x7c\x8f\xde\xa6\xe5\x41\x1f\x89\x8b\x91\xf5\
+\x28\xae\x49\x84\xa3\xd3\x9b\xda\xe3\x60\x4d\x40\xd7\x0c\x9b\xf0\
+\x7f\xb1\x14\x07\xb5\x94\x11\xa8\x6e\xad\xb1\x15\x07\xd9\x36\xde\
+\x76\xa5\xc9\x11\x49\xa9\x77\x8d\xb9\xf8\xa3\x1f\x72\xe7\x92\x3f\
+\x7a\xd4\x1a\x3d\x64\xeb\xb6\x8a\x50\x7e\xa0\x2b\x3e\x25\x2e\xe1\
+\x40\xf8\xa7\x6c\x5b\xf1\x16\x12\x5b\xb6\xe5\x3d\xcb\x4a\x5b\x9d\
+\x17\x0b\x9d\xb0\x77\xa9\x8f\x1c\x02\xb2\xe1\xf4\x8e\xd4\x09\xf3\
+\xea\x63\xb0\xad\x19\x21\x02\x53\xdb\xe6\x95\xba\x8f\x9c\x60\x91\
+\xde\xb7\x8e\x41\x77\x18\x18\xfd\xe8\x91\x00\x13\x23\xbd\x0c\x1d\
+\xb0\xd5\x2a\x4a\x6f\xc8\x35\xa0\xcd\xbc\x82\x32\x49\x07\x35\x17\
+\x17\x4c\x46\x01\xc0\xa5\xda\x42\x78\xda\xa8\x77\xa9\xe3\xee\x89\
+\x62\x49\xc9\xa9\x89\x0b\xb6\x05\x54\x0c\x9c\x0a\x7e\xda\x2f\x4e\
+\x20\x74\xee\x79\xa6\x57\x42\xcc\x9e\x8c\x1a\x17\x96\x1b\xfd\xa9\
+\x67\x8d\x47\xb9\xce\x05\x1a\xf2\xe1\x73\xb9\x05\xbc\x0a\x4e\x47\
+\x67\x39\x63\x58\xc6\x5f\x62\xb5\x0c\x40\x52\x4f\x6a\x93\x4b\xdc\
+\x3e\x5b\x48\x3b\x0e\x6b\x62\xac\xd9\x62\xed\x4e\x74\x8b\x43\x33\
+\x89\xe6\x5f\x60\xfa\x41\xef\x42\xe9\xd6\xad\x73\x28\x67\x18\x8d\
+\x7f\x7a\xd8\x9a\x48\xad\xa0\xd4\xc4\x05\x5e\x05\x62\xd0\x52\x55\
+\x14\xb3\x90\xaa\x39\x26\xb2\xba\x8f\x53\x79\xb3\x0d\xa6\x55\x38\
+\x2f\xdc\xd2\xbd\x42\xed\xee\x5b\xde\x4a\xc6\x3e\x94\x1d\xea\x90\
+\xc5\x3c\xab\xed\x5d\x0b\xe4\xf3\x4d\x6c\x42\xac\x71\xee\xcc\x33\
+\xe4\x9a\xba\x49\x1b\x26\xa5\x60\x40\xa2\x27\x4f\x8f\x19\x63\x96\
+\xf9\x19\xa8\xff\x00\xc2\xd6\x49\x32\x06\x4f\x7d\x35\x78\x00\x33\
+\x6b\x6d\x10\xa9\x76\xf8\xe0\x53\x16\xd6\x82\x3c\x4d\x39\xd5\x21\
+\xdc\x2f\x8a\x69\x23\x86\xd1\x02\x46\xa0\xbe\x3c\x6c\x2a\x8a\x0b\
+\x3e\x49\x24\x9a\x41\x31\x82\xef\x93\xbd\x1f\x64\x04\xd4\xa2\x04\
+\x5f\x9a\x0c\xec\x59\x82\x2f\x7a\x80\x37\x72\x84\x8d\xa6\x3e\x70\
+\x83\xc9\xaa\xf4\x94\x31\xdb\xbd\xe3\xee\xf2\xe5\x63\x3f\xea\x69\
+\x6b\xd7\x37\x17\x6b\x04\x5b\x84\x3a\x57\xe4\xf7\x35\xab\x22\x2a\
+\xcd\x1d\xba\xfd\x10\x2e\xf5\x28\x1b\x82\xaa\xb0\x8e\x79\x3f\x7a\
+\xa3\x02\xa7\x06\x9d\xe9\x90\x8b\x8b\xb6\x91\xfe\x91\x4e\xc9\x05\
+\x99\x04\x12\x7f\x4a\xd6\xf5\xc0\xcd\x8a\xed\xc2\xe9\x93\xdc\xbf\
+\xb8\xfb\x53\x6b\x79\x11\x40\x19\xf2\x7b\x1a\x8f\xc0\xc2\xcc\x4a\
+\x07\x23\xe4\x80\x29\x9b\x7e\x90\x64\x19\x58\x76\x1d\xc8\xdb\xfb\
+\x9a\xcd\xb8\x85\x9a\x48\xa5\xdb\x2a\x7e\xc6\x94\xb8\x89\xe3\xf7\
+\x21\x38\xad\x79\x3a\x44\x41\x4e\xb7\x85\x1b\xc0\x6d\xff\x00\x61\
+\x4b\x4f\x61\x71\x1a\xe5\x1c\x48\xa3\xb6\x73\x59\x99\x63\xea\xae\
+\x99\x13\x08\xe7\xff\x00\x10\x69\x61\xc3\x0a\x0b\x96\x8f\x11\xcb\
+\xee\x4e\xcc\x29\xe9\xe1\x52\x7d\xc3\x41\xf9\xe0\xd2\xce\xac\xa3\
+\x4b\xae\x54\xf6\x3d\xeb\x7a\x40\x7e\x83\x83\x86\x56\xfd\xea\x62\
+\x6f\x4c\x84\x27\x2a\x7e\x93\x5c\xca\x50\x7b\x77\x5e\xea\x7b\x55\
+\x36\x23\xe0\xd4\x0e\x5a\xca\x60\xb8\x59\x07\x1d\xc7\xc5\x5f\xa8\
+\xc6\x23\x9f\x5a\x7d\x0f\xee\x53\x4a\x42\xe4\xfb\x1b\x91\xc7\xcd\
+\x39\x19\xf5\xec\x8c\x47\xeb\x8b\x75\xfb\x53\xde\xc1\xa7\x94\xc9\
+\x02\x49\x9e\x46\xff\x00\x7a\x5d\x66\xc6\xcd\x53\x6a\x75\xc0\xf1\
+\x77\x1e\xe5\xff\x00\x7a\x0b\x56\xb1\x90\x11\x8c\x6f\xf0\x68\x44\
+\x11\xb0\xdc\x57\x63\x35\xda\x1b\xb5\x6a\x5d\x0a\xd7\x54\x95\x61\
+\xc8\x35\x15\x76\x2c\x84\x06\xc9\xa2\x49\x73\x23\x2e\x9c\xe0\x7c\
+\x50\x70\x7c\x54\x81\x52\x88\xae\xae\x3c\xd7\x50\x06\xe2\x4c\x0c\
+\x0e\x6a\x7a\x7d\xab\x5c\x4b\xbe\x74\x0e\x4f\x9a\xeb\x1b\x67\xb9\
+\x9b\x27\xe9\xee\x6b\x46\xea\xe2\x2b\x28\x74\x20\x05\xb1\xb0\xac\
+\x5a\x09\x71\x34\x36\x70\x0e\x32\x07\xb5\x45\x64\x4b\x2c\xd7\x73\
+\xf1\xa8\xf6\x1d\x96\xad\x14\x53\x5e\x4d\xad\x89\xc1\x3c\xff\x00\
+\xc5\x6d\xd8\x74\xe8\xe0\x88\x3c\xa9\x81\xd9\x7c\xfd\xeb\x3b\x93\
+\xb1\x9d\xd3\xba\x6b\x31\xd6\xd8\x63\xdd\x9b\x81\x5a\x31\xdb\xdb\
+\xa0\xf7\x96\x73\xf1\xb0\xa3\xbe\x58\x0c\xfb\x50\x70\x05\x25\x7d\
+\x72\x23\x53\x1c\x67\xdc\x79\xf8\xab\xbd\x83\xcd\x25\x94\x7b\x88\
+\x00\xf1\x96\x34\xac\xf7\x8f\x20\xd1\x10\x08\xbe\x40\xc5\x2b\xee\
+\x90\xea\x62\x71\xe4\xd5\xd4\x16\xf6\xa8\xc0\xab\x31\x10\x06\x5b\
+\x03\x24\x9e\xe7\xbd\x35\x0c\x61\x13\x27\x9a\xeb\x78\x70\x32\x7b\
+\x55\x98\x83\x96\x3f\x4a\xd2\xd0\x39\x8e\x07\xc9\xdc\xd2\xd2\xbf\
+\xa3\x67\x2d\xc1\xe4\x8d\x2b\xf7\xab\xdc\x31\xd3\xf2\xdb\x9a\x0f\
+\x5d\xfe\x5f\x4d\x86\x2f\xea\x39\x34\xa2\xbf\xc2\xf0\x97\xea\x3a\
+\x88\x07\xd1\x88\xb9\x07\xc9\xa7\xad\xff\x00\xc4\xb8\x27\x9c\x1a\
+\x5f\xf8\x55\xd5\x7a\xb3\xc4\xc7\x1e\xb4\x65\x57\xe4\xd1\xe4\x06\
+\x3b\x99\xc7\xf9\x6a\x7b\x0e\xf4\xc3\xa3\xa6\x92\x36\x67\x62\x28\
+\xb1\xa0\x2f\x8f\x1b\xb1\xf1\x43\xb6\x5f\x4e\xd6\x35\x3d\x97\x3f\
+\xa9\xa7\xfa\x7c\x46\x31\xae\x45\xce\x91\xea\x30\x3f\x1c\x0f\xef\
+\x8a\x99\x5d\x4d\x91\x63\x2c\x76\x80\x6a\x0b\xac\x0e\x48\xd4\x54\
+\xf8\x03\x8d\xbc\xd2\xb3\x5f\xca\xec\x49\x19\xcf\x77\x62\x7f\xed\
+\x40\xea\xac\xff\x00\x8c\x31\x17\x00\xa0\xf7\x31\x38\x03\xcd\x2e\
+\x90\x7a\x8b\xaa\x39\x63\x93\xec\x6b\x13\x19\xdd\x53\x7f\x8a\x9b\
+\x23\x05\x07\xff\x00\x88\xab\xad\xcc\xf9\xd4\x4a\x31\xfb\x0a\xce\
+\x6f\x52\x33\xef\x0c\xbf\x3d\xaa\x56\x56\x18\x39\x07\xed\x5a\xf1\
+\x88\xd2\x6b\x88\xa5\x04\x5c\x45\x9c\xf7\xc6\x7f\x7a\x5e\x6e\x9e\
+\x92\x29\x6b\x79\x01\x1f\xd0\xc6\x80\xb3\xe7\x92\x41\xa8\x37\x0d\
+\x13\x64\xe4\x7c\x8a\x4c\x6c\xe9\x4a\x5c\xdb\xc9\x0c\x85\x5d\x08\
+\xf8\xa5\xa5\x8f\x03\x5a\x0c\x8e\xe2\xb6\x92\xee\x19\xe3\xf4\xe7\
+\x01\x87\xcf\x22\x97\xbb\xb3\x08\xbe\xa5\xbb\x6b\x4e\xe3\xb8\xab\
+\xbf\x55\x19\x07\xb1\x1d\xa9\x8b\x69\x4a\xb0\x75\xe4\x73\x55\xb8\
+\x87\x48\xd7\x1e\xe3\xb8\xf1\x41\x56\xd2\x75\x0f\xd4\x55\x81\xf9\
+\xbf\x95\x70\xb3\x47\xf4\xb6\xe3\xfe\x2b\xae\x95\x75\xeb\x4c\x69\
+\x71\x91\xf1\x54\xb7\x71\x24\x7e\x93\x1e\x77\x53\xe0\xd4\x21\x20\
+\x18\xdb\xf4\xf8\x35\x67\x63\x93\x9a\x91\xbf\xc5\x45\x41\x24\x1c\
+\xd6\xf4\x2e\x37\xd8\xb0\x1f\x7a\xe2\x0e\x3e\xa5\xfe\xf5\x45\xd6\
+\xdb\xad\x10\x47\x26\x3f\x2d\x2c\x15\x60\xbe\x73\x55\x24\x62\xba\
+\x65\x65\xe4\xe7\x3e\x2a\x94\xd7\x03\xab\x8f\x15\xc4\xe2\x81\x3c\
+\x9d\x85\x03\xd7\x37\x11\xda\x43\xe9\x44\x32\xf8\xc5\x2d\x6f\x6e\
+\xf2\xbf\xab\x70\x49\xce\xfa\x7c\xd4\xda\xc5\xee\xf5\xa5\xdd\x8f\
+\x00\xf6\xa6\xa1\x0d\x24\x81\x40\xe4\xd7\x3d\x87\xba\x64\x68\x08\
+\x3a\x46\xdf\xb5\x35\x3b\xeb\x6c\x93\xed\x14\x34\x55\x86\x2d\x3f\
+\xdc\xd2\x77\xd7\x78\xf6\xa9\xdf\xc7\x8a\xce\xb7\x55\xdd\x42\xef\
+\x03\x42\x73\xfe\x94\x80\x52\x7d\xcd\xff\x00\xdd\x58\x29\xfa\x9f\
+\x93\xda\x8b\x14\x4c\xed\xbd\x6e\x4d\x22\xb1\xa1\x73\x8e\x00\xe2\
+\x9c\xb6\x83\x7c\x01\xbd\x4c\x10\x92\xc1\x54\x6e\x68\xf7\x85\x6d\
+\xe3\x11\x27\xd6\x7e\xa3\xe2\xa5\xcb\x9d\x40\x09\x88\x2c\x22\x8f\
+\x7f\x27\xc9\xaa\x5d\x29\x0e\x20\x5d\xf0\x77\xf9\xa6\x7a\x5c\x25\
+\xb5\x4d\x8f\xa0\x6d\xf7\xa5\x54\x86\xbd\x1a\xce\x37\xe4\xd3\x7c\
+\xe8\x29\x21\xcb\x6a\xed\xaa\x9d\xbd\xb6\xb6\xea\x16\xe9\x99\x82\
+\xb2\x8c\x50\x64\xb6\x9a\x27\x3a\xe3\x38\xf2\x57\x20\xd0\xc4\x68\
+\x4e\xfe\x9a\xfe\xa4\x55\xbc\x8b\x59\xd8\x47\x65\x74\x97\x53\xdd\
+\x07\xf4\xb7\x55\x5e\x49\xa2\x42\xa6\x7b\x86\x66\x18\x0e\x72\xc3\
+\xc0\xec\x2a\x88\x90\x29\xcb\x4a\xbf\xfe\x00\x93\xfd\xcd\x3b\x00\
+\x52\x8a\x23\x18\x0d\xc5\x40\xdd\x94\x61\xdf\xd5\x93\x1a\x57\x80\
+\x78\xa6\xe4\x94\x45\x6a\x92\x9e\x25\x97\x50\xf9\x55\xff\x00\xbe\
+\x69\x48\x12\x5b\xbb\x94\xb6\x80\x1d\x24\x85\xdb\xfd\x69\x8f\xe2\
+\xcd\x31\x4e\x2d\xe3\xfa\x20\x88\x22\xd7\x2c\xae\xec\x8a\xc4\xba\
+\x8e\x4b\xbb\x7b\x97\x19\x2d\x8d\x64\x79\xde\xb2\x21\x91\xe2\x7c\
+\xa9\x23\x15\xe8\x7a\x3c\x82\x2b\xec\x30\xca\xb0\x2a\x47\x9a\x5b\
+\xf8\x97\xa4\xb4\x0f\xeb\xc2\x09\x8d\xb7\x15\xbf\x29\x2e\xa8\xad\
+\x9d\xf8\x75\x0b\x36\x19\x7c\xe2\x8d\x2d\xaa\xba\xeb\xb7\x6f\xd3\
+\xb5\x61\xc4\xe5\x1b\xe3\xb8\xa7\xec\x6e\x9e\x22\x19\x0e\x57\xb8\
+\xab\x66\xba\x04\x93\x2a\xc5\x5d\x74\xb0\xf3\xde\xa3\x51\xdc\x72\
+\x3c\x1a\xd4\x83\xf0\xd7\xf1\x60\x90\x1b\xe7\x8a\x5a\xfb\xa7\x4d\
+\x01\xca\x82\x47\x83\x49\x9c\xea\x9a\x20\xeb\x8d\xd7\xff\x00\xaa\
+\xbd\xbc\xd2\x44\x75\x23\x64\x0e\x45\x50\x92\xa7\x0c\x0a\x91\xe6\
+\xa7\x93\x90\x77\xae\x9d\xf6\x86\x18\xc5\x3f\xbe\x30\x12\x5e\xea\
+\x78\x6a\xcf\xbc\xb7\x2a\xc5\x90\x11\x8f\xa9\x7c\x51\x9b\x63\x91\
+\xb1\xa2\xac\xa2\x41\xa6\x53\x82\x38\x71\xfe\xf5\x8b\x8e\xba\x19\
+\xd0\xbe\x96\xe7\x6a\x69\x8e\xb4\xf5\x07\xd4\x3e\xaf\x9a\x15\xec\
+\x05\x5b\x52\x80\x3e\xdc\x1a\xad\xb4\x9a\x5b\x07\x71\x48\x0c\xa7\
+\x22\xa1\xfc\xd4\x91\xa5\xbe\x0f\x15\xcd\xba\xd6\xe5\x17\xb7\x38\
+\x53\xe6\xaf\xa8\xd0\x22\x38\x7f\x8a\x35\x5b\xd8\xac\xe7\x2b\x41\
+\x34\x49\x8f\x6a\x5e\x79\x02\x8c\x0e\x68\x29\x71\x20\xce\x07\x35\
+\x5b\x58\x5a\x79\x42\x8e\x3b\x9a\xac\x68\xd2\xc9\xa4\x6e\x6b\x42\
+\x42\x96\x56\xda\x46\x35\xb5\x62\xd1\x45\x25\x9a\xb4\xec\x23\x58\
+\xa3\xd6\xc3\x73\x4a\x58\x43\x9c\xc8\xdc\x0f\xde\x8b\x3c\xc4\xfb\
+\x57\x73\x59\xa2\x6f\xee\x4e\x74\xae\xe4\xf6\xa5\x54\x15\x6c\xb7\
+\xb9\xcf\xed\x56\x45\xf7\x61\x3d\xce\x79\x3d\x85\x35\x6d\x6c\x34\
+\xeb\x6f\xa7\xbb\x79\xfb\x55\xe2\x01\x41\x0b\x31\xd6\xdf\xae\x69\
+\xa8\x63\x2c\x42\x20\xde\xa5\x14\xbb\x84\x45\xdb\xb0\xad\x6b\x1b\
+\x64\xb5\x40\xf2\x60\xb9\xac\x67\x9e\xbb\x50\x96\x05\xb4\xb5\x2e\
+\xc3\xdc\x45\x63\xce\xcc\xd2\x96\x63\x92\x4d\x7a\x47\x41\x72\x37\
+\xe1\x46\x6b\xcf\xdc\xc4\x4b\x1d\xb1\xbd\x4f\x8a\xee\xee\x95\xa5\
+\xd1\x62\x2f\x6b\x22\x26\x35\x15\xc0\xcd\x64\xde\xc2\xc8\xe4\x15\
+\x21\x97\x62\x29\x8e\x9f\x78\xf6\xd2\x85\x6d\x8f\x7d\xf9\xad\x5b\
+\x8b\x78\xba\x8c\x3e\xa4\x45\x44\xc0\x7f\xfb\x56\xb9\xc6\xec\x79\
+\xf8\x2e\x67\x8c\xfb\x65\x60\x3e\xf5\xb7\xd3\x7d\x1b\x98\x3f\x98\
+\x8a\xcd\x8e\x48\xac\x7b\xcb\x67\x8d\xd8\x15\x2a\x47\x20\xd1\x3a\
+\x35\xd8\xb7\xb8\x1a\x8f\xb4\xd6\xb2\x9b\x9b\x80\x7d\x62\x3f\x4e\
+\x50\x02\x80\x01\xec\x29\x9b\x60\x5c\xa8\x1c\x91\x81\x4c\x75\xdb\
+\x61\x71\x17\xaf\x0f\xb8\x73\xfa\xd2\x16\x53\x10\x06\x4e\x1d\x0d\
+\x25\xde\x28\xf6\x7f\xc3\xd6\x0b\x6a\x86\x72\x31\x85\xd8\x9e\xf5\
+\xe7\x3f\x89\x24\x0d\x73\x3b\x1e\xe7\x15\xa9\x69\xd6\xa5\x9e\xdf\
+\xd1\x70\xa3\x6d\xcd\x60\xf5\x97\x0d\x23\x1c\xe7\x26\xb8\x7c\x78\
+\xe5\xe7\xcb\x57\xa0\x33\xa6\x6c\x83\xce\xe2\xb7\x7a\x7c\xf1\x5c\
+\xda\xfa\x17\x18\x28\xfb\x03\xfd\x26\xb0\x07\xba\x05\x61\xca\xec\
+\x69\xae\x97\x30\x12\x98\x9c\xe1\x5c\x73\xe0\xd7\x4c\xf1\xdc\x48\
+\x4f\xf8\x93\xa4\x49\x67\x39\x65\x5c\xa9\xf1\xc5\x65\x44\xe6\x36\
+\xcf\x23\xb8\xaf\x77\x6a\x52\xed\x1b\xa7\xdd\xe3\x58\xfa\x18\xd7\
+\x95\xfe\x23\xe9\x72\x59\x5c\xb7\xb4\xe3\x35\x30\xcf\xfe\x72\x2c\
+\x0e\x09\x5a\x3c\x49\x11\xd8\xf2\x2b\x7b\xa3\xf5\x34\x96\x3f\x4a\
+\x71\xa9\x7b\x83\xb9\x15\xe5\xad\xa5\x31\xb6\x0f\x06\x9b\x46\x68\
+\xdc\x49\x19\xad\xe5\x8e\xcd\xbd\x5d\xc7\x45\x8a\xe9\x3d\x48\x0a\
+\xb2\x9e\x01\xff\x00\x9a\xc9\xbd\xe9\x12\x40\xf8\xd0\xc9\xf7\xe0\
+\xd1\x3a\x2f\x58\x78\x58\x61\xb0\x7b\xa9\xe0\xd7\xac\xe9\xb7\x96\
+\xb7\xf1\x60\xe9\x0d\xc1\x56\xae\x37\x2c\xf0\x5e\xde\x16\x6e\x9f\
+\x36\x9d\x4a\xa5\xbe\xd4\x9b\xab\x2b\x61\x81\x07\xe4\x57\xd2\xa5\
+\xe9\x90\xf2\xa8\x07\xc8\xa4\x3a\xb7\x47\xb6\x9e\xdf\x12\x47\x83\
+\xd9\xd4\x6e\x29\x8f\xf2\x3f\x27\x8b\xc2\xa4\x83\x4f\xa7\x20\xca\
+\xf6\x3e\x29\x7b\x98\x8a\x36\x47\x07\xc5\x69\x75\x7e\x9b\x2d\x9b\
+\x1d\xc4\x91\xf6\x71\xfe\xfe\x29\x15\x23\x74\x7f\xa4\xfe\xd5\xdf\
+\x8b\x37\x19\x52\x17\xd4\xba\x0f\x3d\xaa\xea\x7b\x1a\x0c\xc8\x62\
+\x93\x6d\xc7\x62\x2a\xe8\xda\x97\x23\xf5\xab\x05\x98\x60\xd1\xa3\
+\x39\x5c\xd0\x79\x15\x68\x4e\x1b\x1e\x6b\x7d\x81\xdc\x3e\x9c\x93\
+\x4a\x1d\x4e\xfb\x6e\x4d\x35\xd4\x47\xb7\x35\xdd\x2d\x54\x6b\x95\
+\x86\xca\x2a\x50\x68\x95\x2c\xed\xf5\xb6\x35\x1a\x5a\x30\xd7\x12\
+\x99\xa4\xe3\xb5\x44\x8c\xd7\x53\xe4\xe4\x20\xa3\x70\x30\x36\x02\
+\xb2\x1f\x9a\x50\xa8\x11\x76\x51\x42\x89\x4b\x8c\xb1\xd2\xbd\xfc\
+\x9a\x11\x90\x38\xdc\x60\xd3\x16\xb8\x76\x50\x78\x03\x8a\x9d\x40\
+\xcd\xbc\x29\xa7\x51\x5d\x31\xfe\xed\x44\x6c\xc8\x42\xa8\xc0\x1c\
+\x28\xed\x56\x45\x2f\x82\x4f\xc6\x29\xeb\x44\x86\xd5\x7d\x69\x86\
+\xe3\xe9\x5a\xc5\xba\xfe\xd4\x6e\x9b\x6a\xb6\xf1\x7a\xb2\x8f\x71\
+\xe0\x52\xd7\x52\x4b\x35\xf2\xc6\x99\x39\xe0\x0a\x1d\xdd\xf4\xb3\
+\x3e\xa1\xed\x51\xc0\xad\x3f\xe1\x53\x11\xfe\x27\x85\xa4\x00\x83\
+\x0e\xa5\x04\x73\x5c\xf2\x96\x4d\xd1\xaf\xd2\x7a\x15\xd7\xe0\xc4\
+\xc3\x00\xf8\x6e\xf4\x2e\xa1\xd1\x12\x43\xfc\xdb\x53\x03\xe3\x1a\
+\xe3\x19\x53\xf7\x14\xf7\x52\xeb\x52\x17\x29\x19\x0a\x01\xc0\x02\
+\xa2\xd7\xae\x38\xf6\xc8\x01\xfb\xd7\x09\x7e\x4e\xda\xe1\xe3\x7a\
+\xbf\x4a\x9a\xd9\xb1\x22\x6a\x43\xf4\xb8\xef\x49\x5b\xdc\xcd\x67\
+\x20\xcb\x1d\x3e\x6b\xe9\x7e\x9d\x97\x50\x8c\xaa\xe9\x52\xc3\x75\
+\x3c\x1a\xf3\xbd\x7f\xf8\x56\x45\xd4\xf6\xcb\x90\x7f\x21\xef\xf6\
+\x35\xdf\x0f\x9e\x5e\x32\x66\xc6\x54\x8d\x07\x52\x83\x21\x82\xcc\
+\x06\xc7\xcd\x63\x5e\xda\xbc\x32\x10\x57\x04\x76\xa2\x4b\x0d\xc5\
+\x95\xc1\x00\x30\x2b\xca\xf8\xa7\xa1\xbb\xb7\xbc\x84\x45\x73\x85\
+\x60\x36\x6f\x15\xda\x6f\x1e\x67\x48\x57\xa3\xde\xfa\x4d\xe8\xcd\
+\xbc\x6d\xb6\xf5\x1d\x5a\xd3\xd0\x90\x5c\x42\x35\x21\xe7\x15\x5b\
+\xab\x09\x55\xb3\x18\xd6\x0f\x75\x35\x68\xde\xfd\x22\xd1\xb2\xa8\
+\x3f\x9b\x15\x78\xde\xe0\x5c\x5d\xb0\x18\x40\x72\x79\x14\x19\xcc\
+\xae\x72\xfb\x7c\x66\x99\x9d\x8e\x49\x9e\x70\x3e\x13\x1b\xd1\xad\
+\x6c\xa5\x91\x43\xa4\x02\x34\x3c\x49\x29\xe7\xec\x3b\xd6\xb7\x20\
+\xa4\x09\xff\x00\x92\x73\xfe\x60\x3f\x6a\x5d\x1f\x43\xe7\xb0\x35\
+\xa1\x78\x12\x18\x16\x04\x3c\x6e\x4f\x72\x7c\xd2\x16\xe0\x3b\xba\
+\x76\x35\x9c\x79\x1a\xf2\x3b\x49\x6f\x15\xd2\x1f\x7c\x67\x4b\x62\
+\xb4\x66\x48\xba\xc7\x4d\x2a\xd8\xf5\xd0\x71\xe6\xbc\xff\x00\x4f\
+\x9d\xe1\x9b\x41\x39\xd3\xbf\xdc\x56\x8d\xf3\x35\xbc\xd1\xdd\x5b\
+\xb1\x50\xe3\x3b\x57\x1c\xb1\x57\x97\xea\x96\x6f\x69\x70\xc8\xca\
+\x40\xce\xd5\x16\x73\x01\xec\x73\xb1\xe0\xd7\xb3\x96\xca\xd7\xad\
+\xd8\xb1\xc6\x9b\x85\x19\xdb\xbd\x78\xde\xa7\x63\x2d\x9c\xe5\x1c\
+\x1c\x03\xcd\x6f\x0c\xe6\x5c\x5e\xcb\x05\x61\xa4\xea\x4a\x7f\xa7\
+\xde\xb2\x91\xb9\x04\x70\x73\xb8\xac\xab\x59\xb3\xec\x63\xbf\x62\
+\x68\xac\x0a\xb6\x45\x6e\xcd\xf1\x51\xed\x3a\x3f\x5f\x92\x35\x09\
+\x3e\x64\x4e\x33\xdc\x56\xea\xcf\x05\xd4\x3a\xa1\x75\x6c\x8e\x2b\
+\xe6\xf6\x77\x45\x4e\x1b\xfb\xd6\xad\xa5\xcb\x29\x0f\x0c\x84\x11\
+\xe0\xd7\x9f\x3f\x8a\x5e\x9a\x94\xef\xf1\x1c\x46\x37\x2d\x18\x3f\
+\xe6\x43\xc1\xaf\x31\x75\x1a\x1f\x7c\x5c\x77\x53\xf9\x6b\xd7\x8b\
+\xc8\xba\x84\x5e\x85\xd0\x09\x21\xd8\x3f\x63\xf7\xaf\x35\xd6\xec\
+\xe5\xb3\xb9\x39\x1b\x67\x63\xe6\xb7\xf1\x5d\x71\x4a\xce\xd9\x97\
+\x43\x71\xdb\xe2\x82\x33\x14\x98\x23\x6a\x3b\xe1\x86\x47\xea\x2a\
+\x92\x2e\xb5\xf9\x1c\x57\x6b\x19\x48\x23\x90\x76\xa9\xe0\xe4\x50\
+\xa2\x62\x0e\x93\x44\xab\x28\x9b\xa5\xf5\x21\xc8\xed\x40\xb7\x72\
+\x2d\x65\x51\xb1\xe6\x98\x8c\xec\x54\xf0\x69\x68\xc6\x99\xa4\x43\
+\xdd\x4d\x5b\xd0\x25\xb7\xf8\x23\x14\x68\x23\x32\x3e\x3b\x0e\x68\
+\x16\xc7\xf9\x42\x9d\x0e\xb1\xc4\x14\x63\x38\xc9\xac\xfa\x1f\xff\
+\xd9\
+\x00\x00\x2e\x32\
+\xff\
+\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x48\x00\
+\x48\x00\x00\xff\xdb\x00\x43\x00\x04\x02\x03\x03\x03\x02\x04\x03\
+\x03\x03\x04\x04\x04\x04\x05\x09\x06\x05\x05\x05\x05\x0b\x08\x08\
+\x06\x09\x0d\x0b\x0d\x0d\x0d\x0b\x0c\x0c\x0e\x10\x14\x11\x0e\x0f\
+\x13\x0f\x0c\x0c\x12\x18\x12\x13\x15\x16\x17\x17\x17\x0e\x11\x19\
+\x1b\x19\x16\x1a\x14\x16\x17\x16\xff\xdb\x00\x43\x01\x04\x04\x04\
+\x05\x05\x05\x0a\x06\x06\x0a\x16\x0f\x0c\x0f\x16\x16\x16\x16\x16\
+\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\
+\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\
+\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\xff\xfe\x00\
+\x12\x42\x6c\x75\x65\x20\x41\x6e\x67\x6c\x65\x20\x53\x77\x69\x72\
+\x6c\xff\xc0\x00\x11\x08\x01\x20\x01\x20\x03\x01\x22\x00\x02\x11\
+\x01\x03\x11\x01\xff\xc4\x00\x1b\x00\x00\x02\x03\x01\x01\x01\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\x01\x02\x05\x00\x06\
+\x07\xff\xc4\x00\x3d\x10\x00\x02\x01\x03\x03\x03\x03\x02\x04\x04\
+\x05\x02\x06\x03\x01\x00\x01\x02\x03\x00\x04\x11\x12\x21\x31\x05\
+\x41\x51\x13\x22\x61\x32\x71\x14\x42\x81\xa1\x06\x23\x52\x91\x33\
+\x62\xb1\xc1\xd1\x72\xe1\x15\x24\x34\x43\x53\xf1\x82\x92\xa2\xf0\
+\xff\xc4\x00\x19\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x06\xff\xc4\x00\x24\x11\
+\x01\x01\x00\x02\x02\x02\x02\x02\x02\x03\x00\x00\x00\x00\x00\x00\
+\x00\x01\x02\x11\x21\x31\x12\x41\x03\x22\x51\x61\x04\x71\x13\x32\
+\x42\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00\x3f\x00\xf6\
+\x3a\x14\xae\xdf\xa5\x74\x5a\x84\x80\x67\xf5\xa2\x45\x83\x10\x14\
+\x39\x50\x83\xa8\x57\xde\x6f\x7c\x3c\xad\x7b\x16\x08\xe1\x98\xe4\
+\x0d\xea\xd7\x0f\x7b\x79\x27\xb1\x4e\x91\xc1\x63\x81\x4a\x58\xcb\
+\xae\x2e\x46\x46\xd4\xcb\x4a\x74\x80\x18\x81\x8e\xd5\xce\xce\x44\
+\xc3\x33\xdb\x5c\x8b\x6b\xd8\x90\x29\xdb\x56\x38\xad\x8f\xe1\xeb\
+\x48\xa4\x96\xe0\xb3\x65\xed\x70\xf1\x6f\xe7\xbd\x65\xcb\xa2\xfa\
+\xdc\x43\x31\xc4\x80\x7b\x1c\xf7\xf8\xaa\x74\x2e\xa1\x2d\x87\x59\
+\x81\x67\x38\x5c\xfa\x52\x13\xe0\xd6\x72\x96\xce\x15\xba\x49\x62\
+\x4e\x73\x9a\x82\x1b\x1b\x0c\xd7\x5d\x0f\x4a\xe5\xd4\x70\x1b\x6a\
+\xbc\x32\x03\x5c\x94\x5b\x1b\xd7\xb7\x71\x9c\x80\x3c\x56\xf5\xbc\
+\xd6\x9d\x4a\xdc\xc7\x21\x5d\x64\x63\x71\xcd\x60\xe1\x49\xc1\x00\
+\xd0\x3d\x66\xb7\xba\x0d\x1b\x15\xc5\x63\x2c\x3c\xba\x5d\x8b\xd7\
+\x7f\x86\xe6\x79\x49\x86\x5c\xaf\xf4\xb1\x27\xfb\x57\x9c\xbf\xe8\
+\x1d\x46\x26\xff\x00\xd2\x93\xbf\x2a\x32\x0d\x7b\x15\xeb\x8c\xb1\
+\x61\x86\xb3\xe2\x83\x71\xd5\x2f\x25\x1b\x15\xb7\x4f\x20\x02\x6b\
+\x78\x7c\x9f\x24\xed\x35\x1e\x41\x3a\x3f\x5a\xcf\xb2\xde\x6c\x0a\
+\x66\x2e\x83\x71\xf5\x5e\x5e\x2a\x79\x54\x3a\x9b\xfe\xd5\xb5\x2d\
+\xd1\x6c\xeb\x9a\x79\x49\xe7\x2e\x40\x3f\xa0\xa5\x2e\xe6\xd3\x11\
+\x27\x00\x78\x1b\x0a\xe9\xfe\x4c\xaa\x68\xb4\x36\xd6\x56\x79\x68\
+\x53\x53\x0f\xfd\xc9\xb0\x48\xfb\x0e\x28\x37\x37\x99\x24\x47\xb9\
+\x3f\x98\xd2\xd7\x13\x3c\x8d\x96\x3b\x0e\x07\x6a\x0e\xa2\xc4\x84\
+\xed\xcb\x1e\x05\x6a\x63\xbe\xcd\xa6\x57\x24\xff\x00\x53\x1a\x5d\
+\x08\xfc\x48\x55\xdc\x28\x20\x91\xc6\x6b\x9a\x53\x21\x30\xdb\x9f\
+\xfa\xe4\x3f\xed\x47\xb3\x80\x2a\x0f\x03\xf7\xae\xd8\xe2\x8b\x5e\
+\x82\xcb\xa8\x72\x30\xc2\xb4\x7a\x04\xe0\xb9\x8c\xf1\x32\xed\xf7\
+\xa4\x9b\x06\x45\x5d\xb7\x04\x1a\x1f\x4c\x90\xc6\xec\x3b\xa1\x0c\
+\x3f\xde\xb1\xf2\x62\xb0\xff\x00\x4f\x96\x5b\x6b\xd6\x64\x24\x34\
+\x6d\xb8\xad\x5e\xbb\x61\x0f\x57\xe9\xdf\x8b\x81\x46\xac\x7b\xc0\
+\xec\x7c\xd2\x11\x28\xff\x00\xc7\xb3\x8f\x6c\x8a\x18\x56\x9d\xa4\
+\xad\xd3\xaf\xb3\x8c\xc1\x26\xcc\x0f\x02\xb8\x67\x3d\xce\xd6\x3c\
+\x05\xf5\xb3\xdb\xce\x54\x82\x08\x3c\xd5\xed\xa7\x0d\xec\x93\x9e\
+\xc6\xbd\x97\xf1\x8f\x45\x49\xa1\xfc\x65\xa8\xd4\x8c\x33\xb7\x6a\
+\xf0\xf7\x11\x34\x72\x10\x46\x08\xae\x98\x67\x32\x89\x61\xc3\x1b\
+\x21\xd4\x99\xda\x8d\x6d\x78\xea\x70\x4d\x29\x65\x75\x8c\x47\x21\
+\x38\x1c\x1e\xe2\x98\x96\x2d\x5e\xe0\x46\x4f\x04\x70\xd5\xaf\xed\
+\x1a\x50\x5c\xa3\xe3\x7c\x1a\xd0\x70\x9d\x42\xcf\xd1\x94\x81\x22\
+\x8f\x6b\x1e\xf5\xe6\x15\x9a\x37\xc3\x0a\xd1\xe9\xf7\x63\x20\x33\
+\x7d\x8d\x63\x2c\x3d\xac\x21\x7d\x6f\x25\xad\xc3\x47\x22\x91\x40\
+\x35\xb9\xd5\xa0\xf5\xe1\x32\xa9\x2f\x8e\x57\x39\x23\xe4\x56\x23\
+\x0c\x1f\x22\xba\xe3\x97\x94\xfd\xa0\x53\x2e\xda\x87\xeb\x53\x0b\
+\x67\x63\x57\x3e\x28\x32\x2e\x96\xa7\x40\xd5\x59\x50\x32\x13\xc3\
+\x0e\x0d\x42\x3e\x76\x3c\xd5\xea\xca\x15\x46\xd2\x41\xee\x0f\xbb\
+\xe6\x9a\xce\x54\x50\x6e\x23\xdf\x58\x1f\x71\x53\x6c\xd9\x5d\x3e\
+\x38\xa7\xb0\xca\x39\x0a\x28\xd1\xb0\x75\xc1\xa5\x90\xfb\x6a\x55\
+\x88\x39\x15\x34\x0b\x1b\xb4\x12\x1c\x6e\x0d\x32\xf2\xfa\x91\x6a\
+\x43\xc7\x34\x90\x93\xce\xf5\x31\xbe\x96\xd4\xa7\x4f\xc7\x9a\xa1\
+\xc8\x2e\x08\x20\x37\xf7\xa6\x6f\x42\x5d\x42\x1f\xff\x00\x71\x79\
+\xc7\x7f\x9a\xcf\x24\x37\xb9\x76\xf2\x28\x96\xf3\x18\xcf\x91\x52\
+\xcd\xf3\x07\xa4\xb0\xb9\x17\x76\x28\x5b\xfc\x68\x94\x24\xbf\x24\
+\x70\x6a\xcc\xfa\x06\xdc\xd6\x6f\x4a\x60\x6e\x7d\x54\xc8\x05\x30\
+\xfe\x0f\x8a\x7e\x1c\xcd\x37\xf9\x45\x70\xb3\x55\xa3\x56\x84\xe8\
+\x2c\xdd\xe9\x79\xcb\x4b\x71\x85\xa3\xce\xd8\x51\x1a\xf3\x50\xa0\
+\x42\xbb\x6e\xe7\xf6\xac\x4a\x25\x55\x20\x5c\x9f\x73\x9e\xd4\x36\
+\x2c\xe7\x2c\x6a\x0e\xe7\x2c\x72\x4d\x02\xee\xe5\x62\x5e\x77\xad\
+\x48\x09\x71\x2a\x42\xb9\x63\x59\x17\xb7\x26\x46\xcb\x1c\x01\xda\
+\xab\x34\xf2\x4d\x36\x95\x05\xd8\xf0\xa2\xa6\x54\x86\xcd\x3d\x6b\
+\xc6\x0c\xff\x00\x96\x31\x5d\x31\xc7\x49\x43\x54\x66\x8c\xc9\x2b\
+\x7a\x51\x0e\xe7\x93\xf6\xa5\x59\xde\xed\xbd\x1b\x71\xa2\x15\xfa\
+\x9b\xcf\xc9\xae\x06\xe7\xab\x5c\x12\xcd\xa2\x14\xe4\xf6\x02\x9d\
+\x51\x1f\xa6\x21\x81\x71\x12\xf7\xc6\xec\x7c\xd7\x59\x35\x7f\x68\
+\x1d\xbc\x4a\xab\xa2\x31\xfc\xb1\xdc\xf2\xd4\x73\x80\x2b\x80\x00\
+\x60\x54\x10\x59\xc2\x2f\x26\xba\x5b\x31\x82\xf0\x8d\x11\x3d\xc1\
+\x3b\xfd\x29\xf7\x34\xa5\x87\xfe\xa0\xb7\x81\x4c\x75\x77\x58\xd1\
+\x2d\x97\x88\xc6\xff\x00\x24\xf3\xfb\x50\xec\x10\x8b\x76\x7e\x35\
+\x9d\x22\xb8\xce\xb7\x46\x82\x39\x8e\x4b\x77\x27\xe8\x90\xc5\xfa\
+\x56\xfd\xdc\x42\x48\x06\xaf\x15\xe7\x2f\x09\xf4\xe5\x45\x18\x30\
+\xb8\x70\x3c\xed\x8a\xde\xb1\xb9\x17\x1d\x3d\x5d\x4f\x22\xb8\xd6\
+\x97\xe8\x77\x4b\x04\xa6\xca\xe7\xdd\x0c\x9b\x0c\xf6\xac\x2f\xe3\
+\xbe\x86\x6d\xa4\x37\x10\x8c\xc6\xdb\xe4\x76\xa7\xa7\x74\x92\x4d\
+\x07\x66\x1c\x56\xb7\x4a\xb9\x8e\xfe\xcd\xba\x7d\xe0\x05\x80\xc0\
+\x27\xbd\x63\x29\x70\xbe\x50\xed\xf2\xe9\x10\xe7\xc1\x14\x6b\x2b\
+\xa3\x19\xd0\xfb\xa9\xe4\x56\xb7\xf1\x77\x46\x93\xa7\x5e\x91\x8f\
+\x63\x6e\xa6\xb0\xd9\x73\xf7\xaf\x46\x36\x65\x36\xcb\x60\xc5\x1c\
+\xb0\xea\x56\xf5\x13\xcf\xe6\x4f\xbd\x26\xea\xf0\xc9\xff\x00\xfb\
+\x06\x81\x65\x75\x25\xbc\x81\x94\xef\xdc\x79\xad\x7b\x75\x82\xf6\
+\x2c\xa6\xcd\xdd\x3f\xe2\xaf\x42\xbd\x3a\xf7\x4b\x69\x62\x74\x9e\
+\xc6\x96\xea\x90\xfa\x73\x97\x4d\xd1\xf7\x15\xd7\x76\xb2\x40\xdb\
+\xe7\x03\x83\xe2\xba\x39\xf5\x27\xa5\x2e\xea\x7b\xf8\xa9\x27\x3b\
+\x8a\x56\xa1\x94\x30\xc1\xa2\x4f\x19\x8d\xbc\x83\xc1\xaa\x56\xfb\
+\x40\x1d\x4a\x9a\x24\x4d\x91\x83\xcd\x59\xc6\xa1\x8a\x0b\x02\xad\
+\x8a\xcf\x40\xf4\x00\x34\x4e\x07\x63\xc5\x12\x26\xc8\xdf\x91\x51\
+\x38\xf6\x83\xdc\x1d\xab\x42\xd1\x1c\xc6\x0f\xc5\x5a\xad\x14\x79\
+\x5f\x00\x51\x6d\x6d\xa4\x9e\x5d\x11\x2e\x71\xcb\x76\x15\x37\xa0\
+\x1c\x57\x11\x5a\xb0\xda\x5a\x45\x81\x23\xeb\x3d\xc8\xe0\x50\xfa\
+\xa5\xad\x9b\xd9\xbc\xd0\x36\x1e\x3d\xf6\x35\x9f\x2e\x46\x7a\xb1\
+\x06\x8c\xbe\xec\x63\xbd\x2e\x37\x35\xa5\xd3\xe2\xc6\x24\x61\x9e\
+\xca\x3c\xd6\xf7\xa9\xb1\xa1\x64\x86\x2b\x75\x84\x0f\x7b\x6e\x6b\
+\x52\x15\x10\xc2\x14\x7d\x5d\xe9\x7b\x08\x3d\x21\xea\x3e\xee\xdf\
+\xb5\x1a\x69\x12\x24\x2e\xec\x00\x15\xe5\xca\xee\xb4\xb6\x74\xfb\
+\x8e\x33\xf3\xda\x95\x9a\xed\x03\x15\x07\x26\xb3\x7a\x8f\x54\xf5\
+\x9c\xa4\x1c\x77\x34\xbc\x0d\x34\xaf\xe9\xc2\xa5\xdc\xf7\xf1\x5b\
+\xc7\x0f\xca\x6d\xa5\x71\x7a\xb1\xa7\xb8\xee\x78\x14\xb2\x43\x73\
+\x7c\xda\xc8\xf4\xe3\x1c\xb3\x6d\x9f\xb5\x31\x6f\xd3\xe1\xb6\x4f\
+\xc4\x5f\x48\x19\x80\xce\x93\xc0\xac\xee\xb3\xd6\x1a\x5c\xc7\x6f\
+\xed\x4e\x36\xef\x5b\xc6\x6e\xf0\x0d\x79\x7f\x69\xd3\xa2\x31\x5a\
+\x80\xd2\x70\x5e\x91\xb2\xb4\xb8\xea\x52\x9b\x8b\x97\x2b\x10\x39\
+\x66\x6f\xf6\xa2\x74\xae\x94\x65\x5f\xc6\x5e\x9d\x10\x8d\xc0\x3c\
+\x9a\x62\xf2\xef\xd6\x22\x18\x57\x44\x2b\xc2\x8e\xf5\xbe\x27\x18\
+\xa2\xd3\x34\x6c\xa2\xde\xd9\x74\x42\xbf\xff\x00\x5f\x26\xae\x83\
+\x02\xa9\x6e\xbe\xc2\x48\xde\x99\xb4\x4d\x72\x80\x78\x15\xac\x35\
+\x26\xc0\xd9\x4a\xe3\x3b\x66\x8d\xd1\xd4\x35\xc9\x73\x8c\x2e\xf9\
+\x3c\x55\x6f\x94\x89\x08\x1b\xed\xb0\xab\x74\xdf\x74\x72\xc4\x83\
+\x2e\xea\x42\xfc\xd6\x7e\x4b\xb8\xb1\x99\x7a\xfa\xe6\x24\xf2\x77\
+\x3f\xae\xf4\xef\x4f\x02\x6b\x06\x88\x11\xad\x0e\xa0\x3b\x91\x49\
+\xde\xc4\xc9\x21\x6c\x1c\x1f\xda\xa9\x04\xcf\x14\x81\x91\x88\x23\
+\xb8\xa5\x9b\x9c\x23\x5d\xd9\x65\x55\x98\xf3\xa4\xa4\xa3\xc7\x83\
+\x51\xd1\x6f\x0d\xab\x35\x9c\xa7\x83\x95\x3e\x68\x76\xb3\xfa\xe7\
+\x5c\x60\x2c\xc0\x7b\x93\xb3\x8a\xa5\xf4\x62\x78\x43\xc4\x08\x64\
+\xfa\x47\x71\xf1\x5c\xf5\xea\xa8\xf7\x53\x7f\xe7\x0e\x0e\x0f\x22\
+\x9d\xb7\x94\x9d\x2e\xa7\x12\x2e\xe3\x1d\xeb\x06\x2b\x86\x79\x57\
+\x5f\x22\xb6\xd2\x26\x0a\x1d\x6a\xd9\xc2\x35\xae\x84\x3d\x73\xa5\
+\x35\xbc\x98\x13\x28\xf6\xe7\xcd\x7c\xff\x00\xa9\xda\x49\x6d\x74\
+\xf1\x3a\x90\xca\x71\x5e\xb5\x24\x78\xe4\x13\x44\x70\xc3\x91\x55\
+\xfe\x26\xb5\x8b\xa9\xf4\xf1\x7b\x12\x8f\x59\x3f\xc4\x03\xfd\x6b\
+\x9e\x3f\x4b\xaf\x4b\xdb\xc4\x91\x93\xe0\x8a\x2d\xbc\x8f\x1b\xeb\
+\x8c\xe0\xaf\x22\xa6\xe6\x32\x18\xb6\x31\xbe\xff\x00\x06\x85\x93\
+\xc8\xd9\x85\x77\x47\xa1\xe9\xd7\xb0\x5e\xc5\xe9\x5c\xe3\x51\x18\
+\xcd\x07\xa9\x74\xb7\x84\x17\x8f\xdc\xb5\x8f\x0b\x1c\xfa\x91\xec\
+\x47\x22\xb7\x3a\x47\x55\xca\xfa\x53\x6e\xbc\x1c\xf6\xac\x59\x67\
+\x31\x59\x8a\xe5\x46\x87\x19\x5f\x07\xb5\x52\x54\xc7\xb9\x4e\x54\
+\xfe\xd5\xb7\xd4\x6c\x22\x99\x3d\x58\x4f\x23\x3b\x76\xac\x89\x63\
+\x92\x16\xdf\x8f\xd8\xd5\x99\x4a\x00\x71\x50\xca\x18\x55\xe4\x50\
+\xe0\xe3\x62\x7b\x52\xec\x25\x8c\xf3\x91\x5b\x44\x10\x55\xaa\xe4\
+\x87\x88\x82\x77\xc5\x41\x91\x58\x7b\x81\x1f\x35\x41\xb9\xd2\xa7\
+\x24\xf3\x8e\xd5\x06\x85\xad\xbc\xf7\x0e\x12\x30\x4f\x93\xd8\x56\
+\x86\x16\xda\x1f\xc3\xc4\x76\x1b\xbb\x7f\x51\xa2\x4d\x74\x74\x68\
+\x8d\x44\x6b\xe1\x6b\x3e\xea\x75\x8d\x79\xdf\xb0\xac\xf3\x45\x2f\
+\x67\x23\xd8\x9c\x9f\xda\x84\x87\x45\xb3\x26\x7f\xc4\x60\x4f\xe9\
+\xff\x00\x7a\xa2\xe5\xdb\x53\x72\x7f\x61\x57\x0a\x65\x93\x0a\x36\
+\x1b\x7e\x95\xad\x02\x59\x45\xad\xb5\x1e\x05\x7a\x0e\x97\x6b\xa0\
+\x09\x24\x1b\xf6\x1e\x28\x3d\x16\xc8\x2a\x89\x64\x18\x03\xe9\x15\
+\x6e\xb3\xd5\x62\xb3\x8c\xa2\x1d\x52\x9e\x14\x57\x2c\xb2\xf2\xba\
+\x8a\x6b\xa8\x5e\xc1\x69\x09\x79\x1c\x7c\x0a\xf3\x5d\x43\xa8\x4f\
+\x7d\x26\x01\x2b\x1f\x81\x41\x93\xd7\xbc\x98\xcd\x70\x4e\xfd\x8f\
+\x02\x8a\x88\x89\xc6\xf5\xac\x30\x90\xb5\x58\xd4\x28\xda\xb6\x6c\
+\x67\x4b\x2e\x91\xeb\xae\x4b\x37\x35\x94\xda\x48\xd8\x60\x8e\xd4\
+\x79\x98\xc9\xd1\x1a\x34\xdd\xa3\x6c\x91\xf1\x56\xcd\xa1\x4b\xfb\
+\xfb\x9b\xd9\xb1\xb9\xcf\x0a\x2b\x47\xa1\xf4\x75\x8d\x3f\x17\x7d\
+\xed\x0b\xb8\x53\xda\xa9\xfc\x2d\xe8\xc3\x69\x35\xcc\x8a\x09\x43\
+\xb5\x57\xa8\x5f\xcf\x74\x70\xcd\xa5\x3b\x28\xe2\xb5\x95\xbf\xeb\
+\x8a\x89\xd5\xaf\x8d\xcb\xfa\x68\x34\xc2\x9f\x48\xf3\x4b\xda\xa8\
+\x2d\x93\xbd\x06\x8b\x6a\x48\x93\x03\xbd\x35\xa8\x8d\x28\xc0\x10\
+\x1c\x73\x46\xb5\x1a\x63\x04\x77\xe6\x87\x18\xfe\x41\xc6\xe4\xd5\
+\xa1\x60\x23\xd2\xd9\x07\x3d\xc5\x49\xce\x22\xf3\xa3\x3b\x7a\x88\
+\x77\x5e\xd4\x04\x56\x57\xf5\x21\xdb\x07\x3a\x7b\x8f\xfb\x53\x0a\
+\x7b\x83\x50\xe8\xaf\xee\xc6\x0f\x91\x49\x65\x9a\xa2\x4d\xcc\x17\
+\x63\x4d\xca\x80\xc7\x6d\x63\x9f\xd7\xcd\x23\x7f\xd3\x9e\x2f\x7c\
+\x64\x32\x1e\x08\xe2\x98\x91\x3f\xf9\x54\x91\xfd\x4b\xfe\xf5\x30\
+\xc9\x24\x1b\xaf\xba\x33\xb1\x07\x8f\xfb\x54\xf1\xb8\xf4\x32\x51\
+\x9e\x37\x04\x12\xac\x0d\x69\x5b\x5c\x89\xfd\xf8\xc4\xa0\x7b\xc0\
+\xfc\xc3\xcf\xdc\x53\x12\x5a\x5a\x5e\xc7\xa9\x1b\xd2\x93\xc1\xe0\
+\x56\x6d\xd5\x9d\xd5\x9c\x81\x8a\xb6\x01\xc8\x71\xc5\x5d\xcc\xb8\
+\x14\xbb\x88\x47\x78\xa5\x7e\x97\x20\x8a\xf5\x16\xc8\x7f\x0a\xa0\
+\xef\xb5\x79\xf9\xff\x00\x9b\x6d\x1c\x9a\x70\x43\x83\x8f\xd6\xbd\
+\x1c\x8e\xb0\xdb\x2e\xa3\x8d\xaa\x77\xc2\x95\x99\x74\xb6\xa5\xe3\
+\xbd\x56\x29\x0c\x32\x6b\x4d\xd5\xb6\x65\xf3\x4b\x7e\x2c\x89\xcf\
+\x74\x26\x99\x5c\x32\xec\x72\x0f\x15\x73\xc3\x49\x19\x3d\x72\xc1\
+\x41\x37\x10\x8c\xc6\xdf\x50\xac\x29\xe2\x29\x21\x1f\xd8\xf9\xaf\
+\x5e\xe0\xa8\x2a\x46\x54\xf2\x2b\x17\xaa\xd9\x7b\x48\x51\xf4\xee\
+\xb5\x31\xba\xe2\xab\x20\x67\x3a\xd3\x66\x1f\xbd\x11\x18\x91\xea\
+\x47\xed\x23\xea\x1e\x28\x64\x10\x72\x39\x15\x28\x48\x3e\xac\x78\
+\xd4\x39\x1e\x6b\x5d\x23\x4f\xa6\x75\x16\x88\x81\xfd\xd4\xf7\xad\
+\x5d\x16\xf7\xb1\xe6\x2d\x21\x8f\x28\x78\x35\xe7\x30\xb3\x21\x92\
+\x2d\x98\x7d\x49\xe3\xed\x44\xb4\xba\x78\xdc\x64\x90\x47\x7a\xc6\
+\x58\xef\xa5\xd9\xcb\xbb\x07\x47\x3a\x46\x0f\xf4\x9f\xf6\x34\x9b\
+\xa1\x53\x86\x04\x1f\x06\xb6\xed\xaf\xe3\x99\x04\x77\x2a\x08\xfe\
+\xaa\xbc\xb6\xaa\xf1\xe6\x16\x59\x13\xfa\x58\x03\x52\x65\x67\x14\
+\xd3\xce\xb4\x28\x4e\xe9\x9a\x95\x8c\x28\xd9\x40\xad\x76\x86\x04\
+\x38\x7b\x55\xcf\xfd\x47\xfe\x6a\xd1\x0b\x35\x1b\xda\x29\x3f\x3b\
+\xff\x00\xad\x6b\xcb\xf4\x8c\xeb\xcb\xa0\x9e\xd5\xdc\xd2\x63\x53\
+\x36\xa6\xdc\x9e\x05\x46\x34\xee\x72\x58\xd1\x10\x15\x1f\xe7\x6d\
+\xbe\xc2\xb4\x2c\xa0\x9f\x62\xee\x4f\x26\xb6\xba\x3f\x4f\x0a\xa2\
+\x59\x46\x07\x20\x1a\x17\x44\xb1\x1a\x7d\x69\x86\x00\xdf\x7a\xa7\
+\x58\xea\x85\xc9\xb7\xb5\x60\x14\x6c\xcf\x5c\xf2\xb7\x2b\xe3\x14\
+\x6e\xb5\xd5\xc4\x47\xf0\xf6\x9e\xe7\xe0\x91\xc0\xac\x84\x4c\x31\
+\x92\x66\xd6\xe7\x92\x6a\x8b\xa5\x3e\x9d\xc9\xe5\x8d\x76\xe4\xf9\
+\xad\xe3\x8c\xc6\x20\xad\x22\x8f\x9f\xb5\x74\x77\x01\x5b\x3e\x98\
+\xa1\x84\x63\x53\xe9\x9a\xd0\x60\xb4\x32\x6e\x87\x4b\x78\x35\xd1\
+\x3b\x45\x20\x61\xfa\x8e\xc4\x52\xc5\x18\x76\xa9\x49\x19\x76\x3b\
+\x8f\x06\xa5\x0d\x5a\xca\x96\xd3\xba\xe3\xf9\x17\x1b\x7f\xd0\x6a\
+\x92\x21\x47\x28\xdc\x83\x55\x52\x8e\x84\x1d\xd4\xec\x47\x71\x50\
+\x5e\x50\x00\x75\x12\x60\x60\x30\x38\x3f\xad\x20\x9a\xea\xa9\x73\
+\x9f\xa4\x2f\xdc\xe6\xaa\xf2\xf6\x5d\xf3\xe3\x6a\xa0\xe9\x2c\x88\
+\x76\x72\x28\xa9\xd4\x25\x5d\xb5\xa9\xfb\xd0\x2d\x2c\xae\x6e\x9b\
+\xd8\xa4\x0f\x34\xf1\xe9\x30\x42\x99\xb8\x98\x06\xac\x5b\x8a\xba\
+\xde\xf9\x59\x80\x75\xd0\x4f\xe6\x1c\x7e\xa2\xb5\xba\x5c\xd1\x33\
+\x7a\x52\x28\x3a\xb8\x3e\x6b\x15\x6d\xed\xd9\x75\x42\xe2\x48\xf5\
+\x69\x24\x0c\x15\x34\x78\x01\x82\x71\x10\x3e\xd2\x35\x21\xf1\xe4\
+\x52\xea\xc1\xad\x75\x6d\xa3\x2d\x1e\xe9\xdc\x1e\xd4\x9b\x46\x41\
+\xd5\x16\xc7\xba\xf9\xad\x4b\x59\x3d\x58\x15\xfb\x91\xbd\x0e\xea\
+\xd8\x37\xba\x31\x83\xdc\x79\xa9\x8e\x76\x71\x4d\x33\x15\x03\x36\
+\x13\xf9\x6f\xe3\x38\xfe\xd5\x75\x92\xee\x0c\x86\x52\x57\xbe\xa1\
+\x90\x6a\xd2\xc6\xad\x90\xc3\x07\xcd\x42\x2c\xf1\x9c\x47\x2e\xdf\
+\x7a\xde\xb1\xa8\xe8\x90\x4f\x22\x96\x41\x1c\x4a\x43\x39\x19\xc0\
+\xc1\xff\x00\xb5\x5b\xaa\xde\x7e\x26\x5c\x26\x42\x0e\x07\x9a\x1c\
+\xe2\x77\x04\xc8\xd9\x03\xb5\x2f\x82\x4d\x6f\x0c\x64\xe4\x76\x68\
+\xb6\xd3\xb4\x67\x19\xdb\xc5\x0c\x21\xc5\x54\xec\x6b\x5b\xd8\xd3\
+\x47\x59\x13\x3b\x1a\xa4\xb1\x87\x5c\x1f\xd2\x92\x8a\x46\x43\xb1\
+\xa6\xa1\x9c\x30\xc1\xae\x79\x61\xee\x11\x87\xd6\xad\x3d\x19\x7d\
+\x45\x1e\xd3\xcd\x67\xee\xac\x19\x7f\x51\xe6\xbd\x5d\xf4\x0b\x34\
+\x2c\xa7\x7c\x8d\xab\xcd\x5d\x44\x62\x98\xa1\x18\x19\xa9\x39\x80\
+\x7e\xe0\x44\xd0\x9c\x30\xe6\x8c\x81\x2e\xd0\xbc\x60\x2c\xa3\xea\
+\x4f\x3f\x22\x80\x32\x8c\x58\x7e\xa2\xac\xca\x75\x09\xa0\x38\x61\
+\xbe\xd5\x9e\x95\x68\xa5\x78\xce\x37\x23\xb8\xf1\x5a\x16\xb7\x5e\
+\xd0\x51\xc8\xfb\x52\xf1\x7a\x5d\x41\x3d\xb8\x8e\xe4\x72\x0f\x0f\
+\xff\x00\x7a\x59\x95\x92\x42\xa4\x14\x71\xcd\x5e\xd1\xb2\x6e\x19\
+\xc6\x19\xb3\x54\x67\xf9\xac\xe8\xee\x99\x76\x90\x03\x8a\xe9\xae\
+\x98\x8d\x09\xde\x9a\x02\x4d\x8f\xa8\xe3\x7f\xca\x2b\x4b\xa3\x59\
+\x7a\x8d\xeb\x4b\xb2\x2e\xfb\xf7\xa1\x74\xbb\x36\xb9\x93\xd4\x7d\
+\xa3\x5a\x27\x56\xbf\x04\x7e\x16\xd8\xe1\x06\xc4\x8a\xcd\xb6\xdd\
+\x45\x4f\x59\xea\x1e\xa1\xfc\x35\xb1\xd2\x83\x66\x61\xde\xb3\x94\
+\x60\x60\x0a\xe4\x5e\xc2\x89\x1e\x95\x18\xc1\x63\x5a\x92\x63\x11\
+\x09\x19\x3d\xa8\xa9\x1a\x2a\x92\xf2\x2a\xe2\xb8\x25\xc3\x0c\x05\
+\x20\x1f\x1b\x55\xe2\xb1\x62\x32\xd5\x2e\x4a\x13\xcb\x18\xda\x35\
+\x67\x3e\x78\x15\x46\x9a\x61\xc4\x48\x3f\xbd\x30\x62\x0b\xb2\xf0\
+\x2a\x0a\x8a\x9b\xd8\x42\xe2\xea\xe2\x35\xd5\xe9\xa9\x03\xe2\xaf\
+\x65\x77\x1d\xda\xee\xba\x1b\xef\xb5\x1a\x78\xc3\x29\x04\x67\x35\
+\x94\x0b\xf4\xee\xa0\x1c\x2e\xa8\x89\xf7\x29\xaa\x8d\x57\x89\xd1\
+\xb6\x06\xaa\x59\xf8\x24\xd6\xad\xb4\x31\x5c\x40\xb2\xc6\x75\x44\
+\xe3\x2b\xe4\x51\xbf\xf0\xd4\x2c\x08\x62\x45\x4f\x39\xed\x74\xc5\
+\x48\xde\x43\x80\x39\xad\x6e\x99\xd2\x81\x02\x49\xb6\x14\xed\xbd\
+\xac\x36\xe9\xa9\x80\xda\x94\xea\x9d\x4c\x05\x29\x19\xc0\x1d\xeb\
+\x37\x2b\x97\x10\x1e\xfa\xfa\x1b\x48\xbd\x38\x30\x08\x1d\xab\x0a\
+\x7b\x89\xef\x27\x08\xb9\x25\x8e\x00\xf3\x41\x96\x47\x9a\x4c\x0c\
+\x9c\x9d\x85\x6f\x74\x4e\x9e\x2d\x13\xd5\x94\x03\x2b\x0f\xff\x00\
+\x51\x5a\xd4\xc6\x1d\xa6\xde\xd1\x6d\x6d\x62\xb6\x1b\xbc\x8e\x0b\
+\x7e\x95\x5e\xa6\xbe\x93\x46\x41\xfa\x1c\x53\x76\x2d\xeb\x5d\x1b\
+\x83\xc0\xf6\xc7\xf2\x3b\x9a\x57\xae\x36\x5b\x1d\xcb\x8a\x98\xf6\
+\x56\xaf\x40\x60\x49\x43\xc0\x6a\xd6\x9e\xde\x32\xd8\x56\xd2\xde\
+\x0d\x63\x74\x13\x8b\x96\x1f\xe6\x14\xff\x00\x5e\x94\xc7\x26\x54\
+\xef\x59\xca\x6f\x20\x2b\xdb\x4d\x4d\xc6\x97\xfd\x8d\x21\x2c\x6d\
+\x1b\x69\x61\x83\x4d\xda\xf5\x13\xb2\xcc\xba\xbc\x1a\xee\xb6\xca\
+\x66\x4c\x0c\x7b\x73\x57\x1b\x65\x29\x33\xf4\x63\xcd\x04\xa6\xf4\
+\x62\x73\x55\x66\x55\x5d\x4d\xc0\xfd\xeb\xa4\xa8\xa1\x42\x3e\xd4\
+\x19\xd7\x1b\xd5\x65\xbc\x19\xc6\xa0\x3e\x06\xf5\x45\x9d\x5f\x87\
+\x06\xb7\x05\x80\xc9\xc5\x48\xca\x9f\x91\x55\x15\x7d\x61\x97\xdc\
+\x37\x15\xbd\xe8\x33\x6f\x28\x6f\x6b\x56\x77\x5f\x80\x16\xcf\x91\
+\x45\x49\x01\x3e\xd3\xc5\x57\xa8\xbb\x49\x6e\x7b\x90\x2b\x3a\x97\
+\x98\x31\x88\x38\xdf\xea\x5d\x8d\x44\x6d\xe9\x36\x47\xd2\xdf\xb5\
+\x16\x61\xa5\xd5\xff\x00\x2b\x8d\xfe\x0d\x0a\x40\x06\x57\xb1\xac\
+\x71\x44\xce\x85\x48\x9e\x23\x82\x37\xda\x99\xbe\x90\xcd\x65\x6f\
+\x72\xc0\x07\x6c\xa9\x3e\x71\x49\x96\x22\xd0\x8c\x9d\xce\x05\x31\
+\x76\x34\xac\x36\xe3\xf2\x26\x4f\xdc\xd6\x62\x82\xea\x59\xc7\xda\
+\xb8\xe1\x06\x2a\xcc\xc0\x0a\xa2\xee\x75\x37\x02\xb6\x8d\x1e\xa7\
+\x76\x12\x3f\xc2\x5a\xec\xa3\x66\x23\xbd\x25\x1a\x66\xaa\x4a\xa0\
+\xcb\x1a\x19\x92\x47\x38\x5f\x68\xa9\x8e\x1c\x70\x1c\x55\x88\x0f\
+\xe6\x48\x17\xe2\x89\x14\xf6\xa8\xfa\x63\x5d\x44\xf7\xac\xe2\xb8\
+\x1b\x9a\x7f\xa3\x59\xfa\x8f\xea\xb0\xf6\x8e\x2a\xe5\x84\x93\x75\
+\x5a\x70\x7b\xd3\x56\x30\x29\x7b\xc9\x80\x3e\x9a\x77\xa3\x5f\x4e\
+\x21\x8b\x0b\xfa\x0f\x35\x94\xcc\xcc\xc4\x93\x96\x3c\x9f\x15\xc1\
+\x45\x9a\x5d\xb4\x21\xff\x00\xa9\xa9\x37\x9b\x0d\xb1\x62\x3c\xd4\
+\xdc\x3e\x7f\x96\x9c\x77\x35\xd6\xf1\x99\x1c\x46\xbf\xad\x75\xc7\
+\x1d\x4d\xd4\x5e\x39\xc3\x6c\x4d\x52\xfa\x11\x2c\x7f\x15\x79\xed\
+\xd1\x49\xf4\xd8\x92\x3c\xd5\x23\x90\xee\x8f\x4e\xfa\x43\x5f\xc2\
+\x73\x98\xcb\x59\xc8\x76\x3b\xa5\x6f\xc9\x30\x86\x02\xc7\xb5\x79\
+\x3f\x74\x53\xac\x89\xb1\x53\x90\x6b\x7d\xa6\x17\x9d\x33\xd4\x53\
+\xbe\x37\x1e\x0d\x73\xca\x72\xb0\xaf\x52\xea\x0c\xeb\x8c\xe0\x78\
+\xac\xb9\x1d\xa4\x7e\xff\x00\x02\xba\x7c\x99\x48\x27\x35\xb5\xd0\
+\xfa\x68\x8a\x31\x75\x70\x32\x4f\xd0\xb5\xbe\x31\x88\xb7\x44\xe9\
+\xe2\xdd\x44\xf3\xae\x64\x3b\xaa\x9e\xd4\xdd\xf4\x85\xcf\xe1\x90\
+\xfb\xdf\x77\x3f\xd2\x2a\xd7\x53\x7a\x30\x99\x5b\x77\x3b\x20\xa3\
+\x74\x0b\x12\x75\x5c\x4f\xbf\xe6\x62\x7b\x9f\x15\x8b\x7d\xd5\x5a\
+\x08\xc4\x2a\x18\x8c\x05\x4d\x87\x8a\xc8\xea\x04\xc9\x77\x12\x9e\
+\x4b\x67\xf7\xad\x7e\xa3\x27\xb4\x81\xf9\x8e\x6b\x12\x59\x14\xf5\
+\x20\x49\xd9\x76\xad\x61\xf9\x2b\x6b\xa2\x3a\xac\xe4\x9d\xf7\xcd\
+\x37\xfc\x40\xa4\x95\x90\x6e\xad\xde\xb1\xe3\x79\x23\x6d\x69\xc7\
+\xc5\x3b\x1f\x53\x62\x9e\x9c\xf1\x07\x5f\x9a\x96\x73\xb8\x01\x57\
+\x77\x2e\x72\x4e\xe0\x62\x8c\x12\xda\xe7\xff\x00\x4e\xc6\x37\xfe\
+\x86\xe0\xfd\x8d\x01\x83\x23\x15\x60\x41\x1c\x83\x52\x71\x4a\x87\
+\x65\x45\xd4\xdc\x0a\xcf\x9a\x76\xba\x93\x0a\x48\x40\x71\xff\x00\
+\xd5\x4f\x57\x9c\xed\x0a\x1d\xcf\x34\x95\xc4\xde\x92\x7a\x51\xf3\
+\xdc\xd7\x44\x30\xf3\xc5\x11\xd2\x8b\xab\x1c\x81\x54\x33\x5b\xbf\
+\xf8\x88\x50\x9e\x0d\x67\xe4\xe6\x88\x92\x63\xda\xfe\xe5\x34\xd0\
+\x7d\x43\xae\xf1\xbe\xb5\xf1\x57\x8e\x65\x62\x41\xf6\x91\xd8\xd2\
+\x2a\x5e\x1f\x7c\x4c\x4a\x78\xf1\x4c\x45\x2c\x77\x03\x0d\xed\x6f\
+\x35\xad\xd8\x2d\x78\x8d\xfe\x2c\x5c\x8e\x7e\x6b\xad\xae\x16\x54\
+\xd2\xdb\x37\x71\x52\x1d\xe2\x3a\x64\x19\x07\x83\x4a\xde\xa0\x8d\
+\xc4\x91\x9f\xaa\xac\xfd\x0a\xdf\xa0\x54\x75\xf0\x72\x29\x69\xdb\
+\x6c\xf7\xa2\xdd\x39\x7c\x67\xb9\x19\xa0\xbf\xba\x4c\x76\x1b\x9a\
+\x82\x60\x4d\x52\x47\x19\xe1\x7d\xed\xf6\xab\x4d\x2f\xa9\x2b\xca\
+\x76\xd4\x76\x15\xc8\x74\xdb\x96\xe1\xa6\x3f\xd9\x68\x5f\x51\xf8\
+\xa9\x04\x8f\x73\x64\xf0\x29\xab\x0b\x57\xb9\x90\x6d\x84\x1d\xea\
+\x96\x56\xed\x71\x28\x55\x04\x28\xe4\xd3\xbd\x42\xe5\x2d\xe1\x16\
+\xd6\xfc\xfe\x63\x53\x2b\x7a\x9d\x8c\xc6\x80\x86\xfe\x63\x64\xd4\
+\xec\xa3\x15\x53\x29\x66\x21\x01\x63\xf1\x52\x90\x3b\x90\x65\x27\
+\x1f\xd2\x0f\x3f\xad\x76\xf2\x98\xf6\x22\x22\x25\x98\x20\xdf\x7d\
+\xf1\x5b\x22\x68\xed\xe1\x09\x8d\xf1\xf4\x8a\x42\x2d\x31\x02\xb1\
+\x28\x51\xe1\x7f\xe6\xa5\x62\x67\x7d\xff\x00\xb0\xae\x19\xe5\x72\
+\xab\x13\x23\xb4\xf2\x6a\x24\xf8\xa1\x5d\x48\x10\x7a\x69\xc9\xe6\
+\x8d\x78\xc2\xdd\x74\x29\x05\xcf\x6f\xe9\xa4\xcf\xb4\x12\x77\x26\
+\x98\x63\xb2\xa0\x0c\x6c\x37\x26\x9e\x44\x16\xd6\xf8\xff\x00\xdc\
+\x7e\x7e\x2a\x3a\x64\x01\x54\xdc\xcb\xc0\xfa\x73\x55\x91\xfd\x49\
+\x4b\x53\x2c\xbc\xae\xa0\x90\x36\xde\x83\x71\x16\xa1\x90\x37\x14\
+\x65\xae\x62\x01\xc1\xa2\x14\x53\xa9\x74\xb1\xc1\x1c\x53\x3d\x2a\
+\xe4\xdb\xcc\x63\x73\x88\xdf\x63\xf1\x43\xb8\x8b\x57\xb9\x79\x14\
+\x0c\xe7\x63\xc8\xa6\xb6\x18\xea\x11\xfa\x57\x59\x1b\x82\x72\x0f\
+\x9a\xf4\x76\x72\xa4\xb1\x44\xe3\xe8\xf4\xc6\x3e\x3c\xd7\x9d\x8d\
+\xfd\x7b\x7f\x49\xcf\xbd\x07\xb4\x9e\xe3\xc5\x3d\xfc\x3b\x71\x84\
+\x30\x31\x39\x53\x95\xfb\x77\xa9\x79\x8a\xd0\xb0\x88\xf5\x0e\xa7\
+\xea\x6f\xa1\x5b\x08\x3c\x0f\x35\xe8\x2f\x15\x61\xb4\x58\xa3\x18\
+\x07\x6a\xc9\xfe\x17\x2b\x14\x97\x08\x4e\x19\x4e\x40\xf2\x0d\x6c\
+\x48\x16\xe6\x15\xd2\xf8\x22\xb9\xe5\xda\xb0\xaf\x89\x69\x88\xe0\
+\x0d\x85\x65\xbd\x9b\xb3\x93\xa8\x57\xa6\xba\xb7\x82\x35\xd7\x70\
+\xe8\xa0\x56\x55\xef\x57\xb3\x84\x14\xb5\x84\x48\xc3\xf3\x37\x15\
+\xd3\x1b\x7d\x25\x20\xb6\x57\x24\x7b\x5c\xfe\x99\xa1\xcf\x15\xd4\
+\x1f\x51\x6a\xb4\x97\xb7\xf7\x5c\x48\x51\x3e\x3d\xa2\xac\xa9\x70\
+\xd0\xe2\x59\x88\x4f\xea\x6d\x87\xef\xcd\x6b\xae\xc0\x6d\x6e\x24\
+\x49\x41\xd6\x70\x4d\x6a\x5d\xdc\x0d\x3e\xa3\x9d\xca\x8c\x9a\xc9\
+\x2b\x00\x7c\x25\xca\x16\xed\x9c\xe0\xfe\xb8\xa1\xde\xdc\x4a\xcf\
+\xa1\x86\x9c\x72\x29\x64\xb5\x13\x2c\xd9\x99\xa6\x3c\x9d\x80\xa5\
+\xc0\x69\x1f\x61\x92\x6b\x91\x4b\xb6\x33\xfa\xd3\xd6\x6b\x1a\x0c\
+\x0c\x13\xe6\xb4\x16\xfc\x14\xf8\xc8\x23\x8a\x0a\xfb\xbd\xa7\xea\
+\x1f\xbd\x6d\x0d\xd6\xb3\xfa\x9c\x1a\x64\xf5\x54\x60\x37\x38\xec\
+\x6a\xd9\xa0\xbc\x52\x14\x3e\x47\x71\x52\xe5\x35\x6a\x4c\xa9\xa1\
+\x33\x31\x23\xda\x09\xff\x00\x5a\xbc\x70\xcd\x21\xf6\xae\x91\xe4\
+\xd4\xd6\x83\x96\xd3\x89\x07\xa7\x20\xcd\x06\xe8\xe2\x3d\x3f\xe6\
+\xa0\xdb\x6b\x8e\xf0\x23\xf3\x44\xbd\x61\xab\x63\xc6\x4d\x27\x14\
+\x2f\x21\xf7\x6f\xd8\x55\x61\x5d\x6e\x01\xfc\xdb\xb1\xf0\x2a\x1c\
+\x82\xd8\xf2\x72\x6a\xed\xec\x88\x8f\xcd\x26\xe7\xe0\x76\x15\x28\
+\x89\x9b\x5c\x9b\x6c\xa3\x65\x1e\x05\x5e\xda\x17\x9a\x41\x1a\x0f\
+\xbd\x52\x18\xd9\xdc\x2a\x8c\x93\x5a\x2e\xc9\x61\x6f\xa5\x77\x95\
+\xbf\x6a\x96\xe8\x4d\xd4\xc9\x65\x07\xe1\xe1\x23\xd4\x23\xdc\x7c\
+\x56\x69\x6c\x1c\xb1\xc9\x27\xfb\xd4\x3b\x9c\xeb\x73\x96\x35\x54\
+\x0c\x5b\xd4\x6d\xb0\x72\x2b\x58\x60\x1b\x8a\x10\x83\x03\x6a\xb8\
+\x45\xce\xfb\xfd\xe8\x2b\x70\x73\x82\x06\x0d\x31\x19\x57\x5d\x42\
+\xb9\xd9\xa5\x12\xde\x03\x23\xe9\x50\x07\xfb\x54\xde\xdd\x43\x6d\
+\x98\x20\x21\xe6\xc6\xed\xd9\x6a\xf3\x49\xe8\x74\xa9\x25\x41\xee\
+\xc7\x35\x93\x6e\xa0\x46\x0f\x2c\x77\x27\xcd\x31\xc7\xca\x8b\xe3\
+\x72\xcc\x72\xc7\x92\x68\xb6\x56\xe6\xe6\x7f\xf2\xaf\x35\x48\x91\
+\xa6\x94\x46\x9c\x9a\xd5\x40\x96\xb6\xba\x57\xb0\xdc\xf9\xad\x7c\
+\x99\x6a\x6a\x12\x16\xea\x72\x84\x41\x12\xed\x8a\x52\x32\x58\xe9\
+\x15\x4b\xa9\x0c\xb3\x12\x3c\xd3\x08\x12\xd6\x0d\x6f\x82\xed\xc0\
+\xac\x4e\x20\xb4\x8c\xb0\x45\x96\xdd\x8f\x02\x92\x77\x67\x6d\x44\
+\x9d\xeb\xa5\x76\x96\x42\xef\xdf\x81\x4e\x74\x9b\x07\xb9\x94\x0c\
+\x1c\x7f\xa5\x6e\x4d\x4d\xd4\x29\x1c\xac\xbf\x22\xaf\x22\xac\x8b\
+\xad\x4e\xe2\xbd\x15\xe7\x40\xb6\xf4\xc0\x0f\xa1\xf1\xde\xb1\xfa\
+\x87\x4b\xba\xb3\x3a\xd4\x6b\x4f\xea\x5d\xf1\x52\x65\x2a\xe8\x82\
+\xb1\x0d\x91\xb3\x0a\x3c\x73\x14\x99\x6e\x13\xea\x07\xdc\x3c\xd0\
+\x8e\x97\x19\xe1\xaa\xa0\x90\x6a\xa3\xd3\x59\xce\x89\x71\x15\xd2\
+\x9f\x63\xae\x97\x3f\x07\x8a\x8e\xa1\x7d\x3d\xaa\x95\x46\x20\xe7\
+\x15\x8f\xd2\xae\x82\x66\x09\x0f\xf2\xdf\x8f\x8a\xd0\xbd\x43\x35\
+\xb1\x07\x77\x41\xcf\xf5\x0f\x35\x27\x7c\xa9\x66\xfc\x6d\xd8\xd6\
+\xe5\xb4\x77\x63\xb0\xa2\xda\xda\x2b\x1f\xe5\xae\xb2\x39\x76\xd9\
+\x45\x75\x90\xf5\xbf\x0f\x1b\x13\xa7\x24\x11\x9f\x14\x3e\xab\x7a\
+\xe5\x8c\x11\x00\x91\xae\xd8\x1b\x52\xdb\xbd\x44\x16\xe2\xe6\xde\
+\xdb\x64\xc4\xd2\xff\x00\x51\x1e\xd1\xf6\x15\x97\x7b\x77\x2c\xf2\
+\xfb\x9c\xbb\xf8\xec\x28\x32\x39\x76\x2b\x19\xfb\xb5\x58\x28\x88\
+\x61\x46\x5c\xd5\x93\x43\x95\x7d\xc0\x13\x96\xe4\xfc\x53\xb7\x31\
+\x34\x97\x0a\x80\x7b\xb4\x0c\xe7\xed\x43\xb0\x84\x34\xc1\x58\xed\
+\xf5\x39\xf8\xa7\x6c\x07\xab\x77\x2c\xc7\x81\xb0\xa6\xf4\x12\x36\
+\xd3\x01\xc6\x2b\xad\xd9\x96\x60\x3e\x77\xad\x2b\xc9\x16\x38\xce\
+\x69\x0b\x24\x32\x4a\x5f\x1b\x03\x5b\xef\x1d\x8d\x18\xcf\xb2\xb9\
+\xb7\x1b\xd4\x20\xda\xa6\xad\xe6\x0a\x2c\x51\xaf\x0a\x07\xe9\x5c\
+\xc3\x02\xaf\x43\x9d\xc2\xa1\xfb\x57\x3a\x33\xc6\xfd\x41\xdb\xfa\
+\x45\x2f\x70\xf9\x63\xe2\xaf\xac\xe8\x79\x4f\x32\x1f\xda\x97\x39\
+\x63\x5a\x82\xd1\x0c\x9d\x4d\xc0\xdc\xff\x00\xb0\xa9\xf7\x3c\x99\
+\xc6\x49\x3c\x57\x1e\x02\x0f\xd7\xef\x4f\xda\xc4\x96\xd0\xfe\x22\
+\x5e\x71\xed\x15\x9b\x74\x2d\x10\x8e\xc6\x0d\x6f\xbc\xac\x36\x1e\
+\x2b\x3e\x79\x4b\x39\x77\x39\x24\xd5\xae\x25\x79\xa5\xce\x0b\x33\
+\x6c\x00\xa3\x7a\x31\xda\x47\xea\x5c\x10\xd3\x1e\x13\xfa\x69\x8c\
+\xd7\x37\xb5\x02\x38\xf4\xff\x00\x36\x5e\x7b\x29\xaa\x3b\x7a\x8d\
+\xe9\xaf\x27\x93\x56\x29\x24\xc4\xbc\x87\x48\xf1\x44\x8b\xd2\x8d\
+\x72\xa7\x71\x5b\xb9\x6b\xa4\x04\x0c\xed\xc1\xa2\xdb\x4a\x63\x7c\
+\x37\x07\x9a\xe9\xe3\x1f\x52\xd0\xb3\x9e\x6a\x0d\x58\xf4\xcd\x6a\
+\xf0\xe4\x15\x71\xb1\xac\xb8\x83\x21\x68\x5f\x66\x43\x83\x46\xb2\
+\x9c\xc3\x20\x0c\x7d\x87\x9f\x8a\xbf\x59\x8c\x65\x2f\x23\xdf\xb3\
+\xe3\xb8\xac\x4e\x2a\x8b\xd2\x18\x28\x7d\x86\xa1\x51\xd4\xee\x4f\
+\xd1\xe6\x81\x69\x22\xa4\xc1\xb3\xed\x61\x83\x42\xea\x39\x17\x43\
+\x3c\x1e\x2a\x59\xf6\x3d\x09\x0b\x24\x09\xea\x38\xcb\xfe\x51\x42\
+\x95\xde\x46\xf5\x1f\xbf\x02\xab\x18\xd6\xc5\xdb\x7c\x53\x16\x50\
+\x34\xd2\x06\x23\xdb\xd8\x79\xad\xc9\x27\x35\x16\xe9\xf6\xaf\x3c\
+\xca\x31\x9c\x9d\x85\x7b\x1e\x93\x69\x1d\x9d\xa9\x91\x80\xc8\xfd\
+\xe8\x3f\xc3\xfd\x35\x63\x8c\x48\xe3\x0d\x8c\x9f\x81\x51\xd6\xaf\
+\x32\xde\x8c\x7b\x01\x5c\xb2\xb7\x3b\xa8\xa5\x3a\x8d\xc3\x4f\x70\
+\x4e\x76\x15\xd1\x25\xcc\x6b\x94\x39\x07\x90\x7b\xd0\x6d\xd7\x54\
+\xc0\x7c\xd6\x90\xc6\x77\xe2\xb5\x95\xd4\xd1\x18\xfd\x46\xc6\x2b\
+\x8c\x90\x82\x09\x7c\x8f\xa5\xbf\xe2\xb1\xae\x23\x78\xa4\x29\x28\
+\xc3\x0f\xde\xbd\xa4\x90\x47\x2c\x64\x66\xb3\x7a\x8f\x4f\x0e\x9a\
+\x5d\x75\x01\xc1\x1c\x8a\x98\xe7\x3a\x34\xf3\x35\xa9\xd2\xee\xcb\
+\xc6\x23\x63\xfc\xc4\xce\x9c\xfe\x61\xe2\x93\xbe\xb5\x7b\x77\xfe\
+\xa5\xec\xd4\x05\x25\x58\x30\x38\x20\xe4\x1a\xd2\x36\x58\x34\x32\
+\x89\x23\x3b\x67\x50\xf8\x3d\xc5\x21\xd6\x50\xac\x8e\xc9\xc3\x8c\
+\x83\x4d\xd8\x5c\xac\xe9\xa1\xfe\xbe\xff\x00\xf3\x53\x73\x09\x78\
+\x4c\x7d\xc6\xe9\xff\x00\x14\xdf\x2a\xc9\x85\xd5\x2d\xf5\x01\xbf\
+\x14\x58\x13\x4a\x7a\xae\x72\x5b\x7a\x01\x4d\x2c\xf1\xf6\xe4\x53\
+\x76\x84\x39\x84\x73\xbd\x69\x0c\x7f\x81\x66\x7f\xf9\x24\xdc\xfd\
+\xbb\x0a\x3d\xb3\x08\x2d\x37\x3c\x72\x7e\x69\x77\x26\x5b\xa2\x49\
+\xce\x9d\xfe\xf5\x17\xcc\x70\xb0\xae\xe4\x6e\x69\x20\xa4\xf2\xb5\
+\xc4\x81\x57\x38\xa7\xad\xa3\x11\xc6\x16\x85\x65\x6f\xa0\x6a\x3c\
+\xd3\x20\x56\xad\x13\x5d\xda\xa2\x56\x08\x3d\xc7\x7f\x14\x9d\xcd\
+\xc1\xf3\x8f\x8a\xce\xed\x06\x9e\xe5\x23\x07\x1b\x9a\x46\x59\x9d\
+\xd1\xf3\xcb\x6c\x28\x6c\xc5\x8d\x70\xd8\x67\xfa\x77\xa6\x80\xee\
+\x9b\xdf\xa5\x78\x1b\x0a\xa2\x8d\x2b\xf2\x6a\x57\x76\x2c\x69\xbb\
+\x28\x06\x9f\x5e\x73\x85\x1b\x80\x7b\xd2\xdd\x09\xb2\x81\x63\x8f\
+\xd7\x9b\x60\x38\x06\x85\x3c\xb2\xdd\x4e\x15\x14\xb1\xe1\x54\x51\
+\x24\x69\x2f\x26\xd2\x83\x08\xbf\xd8\x0f\x26\xba\x59\x23\xb7\x43\
+\x14\x07\x73\xf5\x3f\x73\xf6\xf8\xac\xce\xf7\x7b\x55\xa2\xf4\xed\
+\x01\xd3\x87\xb8\xee\xdf\x95\x3e\xd4\xb4\x92\x7b\xcb\x6e\xce\x79\
+\x63\x54\xcb\x3e\xc0\x6d\xe0\x55\x91\x54\x1d\xfd\xc7\xe3\xb5\x6b\
+\x48\xab\x33\x31\xdc\xe6\xbb\x43\x63\xe9\x34\x50\xf8\xd8\x05\x1f\
+\x6a\xba\x48\x78\x6c\x11\xf6\xaa\x07\x1b\x8e\xdf\xda\xa6\x48\xc3\
+\x2e\xa4\xa3\xf5\x1b\x07\x85\x8d\xc5\xb0\xd7\x0b\x6e\x31\xda\x94\
+\x8e\x42\x0e\x57\x63\xdc\x56\x65\x97\xa1\x53\x90\x70\x68\xd6\xb3\
+\x85\x1e\x9c\x9b\xa1\xdb\x7e\xd5\x0c\x16\x45\xca\xec\xd4\x22\x08\
+\x38\x35\x7b\x13\x24\x46\x09\x8c\x64\xe5\x1b\x74\x35\x37\xd9\x96\
+\xcb\x5f\xe7\x8f\x9a\xba\xb0\x96\x1f\x45\xf9\x07\x28\x7c\x1a\x1a\
+\x92\xac\xc1\xc6\xc7\xda\xe2\x94\x0a\xd5\xb5\x44\xd5\xe9\x7f\x84\
+\xa1\x49\x88\x2e\x33\xa4\x0c\x57\x97\x40\x61\xba\x68\xb9\x07\x71\
+\xf6\xaf\x5d\xfc\x24\x9f\x85\xe9\xad\x77\x21\xe7\x65\x1e\x6b\x39\
+\xdf\xaf\x0b\x1b\x1d\x56\xe9\x6d\x6d\xfd\x24\x3e\xe2\x37\xc5\x60\
+\x3b\x16\x62\xc4\xe4\x9a\x25\xdc\xcd\x3c\xc6\x46\x3c\xd0\xa9\x86\
+\x3e\x31\x0c\x59\x15\x46\xd4\xc7\x6a\x65\x67\x47\xe0\x71\x59\xd4\
+\x6b\x45\x25\xb2\x78\x14\xca\x7b\x58\x6e\x49\x04\x60\xb9\x6c\x0a\
+\x98\xee\xa2\x71\x82\xe0\xfc\x83\x59\x97\xf3\x09\x64\xd2\xbf\x4a\
+\xfe\xf4\xac\xb9\x8c\x65\x99\x57\xee\x71\x58\xf0\xd9\xb6\xb5\xec\
+\x11\xc9\x19\xd4\xa3\x07\xbf\x63\xf7\xac\x0e\xa3\x62\xf0\x31\x65\
+\x04\xa7\xfa\x53\x76\xb7\xce\x98\xc3\x87\x5e\xe3\x39\x06\x9d\x47\
+\x8a\xe1\x3f\x97\x8c\x9e\x63\x27\xfd\x29\x37\x89\xdb\xce\x23\x32\
+\x30\x65\x38\x22\xb5\x6c\xae\x44\xe3\x49\x38\x61\xbf\xeb\x42\xea\
+\x36\x38\x26\x48\x41\xdb\xea\x52\x37\x14\x84\x6c\xd1\xb8\x65\x38\
+\x22\xb7\xdc\x43\x3d\x5e\xd8\x86\xf5\x90\x6e\x39\x14\x0b\x46\xc1\
+\xc0\xdb\xf3\x2f\xdf\xc5\x69\xdb\x4c\x97\x56\xe5\x4e\x35\x63\x04\
+\x56\x55\xcc\x6f\x6f\x30\xc7\x19\xca\xd2\x5f\x41\xe8\xce\x2e\x01\
+\x1f\x9c\x66\x89\x68\xba\xa6\x91\x98\x64\xea\xa5\xa0\x7d\x51\x82\
+\xbc\xae\xe3\xfd\xc5\x33\x03\xe9\x9b\x23\x89\x06\x7f\x5a\xd4\x0d\
+\x8d\x85\x0e\x59\x82\xec\xa7\xf5\xa1\xdc\x4c\x73\xa7\xf6\x14\xa4\
+\xd2\x1c\xe0\xff\x00\x6a\x02\x4d\x2f\x3b\xef\x4b\x92\xcc\x7c\xe6\
+\xa4\x29\x66\xdf\x7a\xd3\xe9\xf6\x62\x35\xf5\xa6\x1f\x20\x1a\x99\
+\x65\x20\x5e\xd6\xd4\x24\x66\x69\x86\x30\x32\x05\x27\x78\xc0\xb3\
+\xb2\xf0\xdb\xd3\x7d\x56\xe8\xcb\x21\x44\xfa\x45\x24\x41\x2b\xc6\
+\x45\x4c\x65\xee\xaa\xf6\x56\xfa\x86\xb9\x3f\xc3\x5d\xcf\xcd\x5a\
+\xe6\x5f\x59\xf1\x9d\x31\xaf\x00\x50\xb5\xcb\xe9\x08\xf2\x0a\x8e\
+\x2a\x84\x7f\x51\xfe\xd4\xf1\xbb\x41\x1e\x7c\x27\xa7\x16\x42\xff\
+\x00\xad\x0f\x4e\x0e\x5c\xd5\x24\x95\x23\x5c\xf1\xfe\xb4\xbf\xe2\
+\x4c\x87\xda\x8e\x40\xec\xa2\xb5\x31\xd0\x68\x39\x63\xa5\x14\xb7\
+\xc0\xa2\xc5\x6b\x33\x9c\xbe\x54\x78\x1c\xd2\xa8\xfd\x43\x4e\x22\
+\x68\xe0\x1e\x02\xea\x3f\xde\xb8\x5b\x5c\x3b\x89\x1e\xf2\x76\x90\
+\x70\x43\x60\x7f\x6e\x29\xaa\x34\xe2\xe9\x4b\x32\x1f\x4e\x72\x1c\
+\x76\x6a\x5a\x7b\x7b\x9b\x56\xc4\xd1\x9d\x3f\xd4\x38\xa8\x49\x7a\
+\x94\x64\x1d\x69\x26\x3b\xb2\xe1\x8f\xea\x2b\x42\xcf\xad\x44\xea\
+\x20\xbd\x89\x97\x56\xd9\x61\xb5\x63\xef\x14\xad\x8d\xfc\xf6\x5f\
+\xcb\xd3\xea\x41\xfd\x3c\x91\x45\xbe\xb6\x8e\xe9\x3f\x15\x62\x41\
+\xfe\xa4\x1c\x8a\x50\xe2\xa2\x32\xf1\x4b\xea\xc0\xfa\x1c\x7f\x63\
+\xfa\x56\xee\x1c\xee\x22\x88\xc4\x36\x0e\x43\x0e\x68\x8e\x04\x83\
+\xc1\xa3\xbc\x90\x5e\x26\x2e\x53\xd1\x9c\x70\xeb\xc3\x52\xae\x1a\
+\x29\x74\x39\x07\xc1\x1d\xe8\x2a\x41\x07\x07\x63\x56\x95\xb5\x44\
+\x18\x8f\x76\x71\x9f\x22\xa2\x53\x9c\x79\xa0\xfb\xe7\x99\x61\x87\
+\x76\x63\x8a\xa0\xfd\x1a\xcd\xef\xfa\x88\x03\xe8\x5d\x8b\x1e\x00\
+\x15\xe9\x2e\xe6\x56\x45\x82\x21\xa6\x28\xc6\x00\xf3\xf3\x4b\x58\
+\xc2\x96\x56\x42\xde\x3f\xa8\x8f\xe6\x37\x9f\x8a\xba\x2b\x33\x00\
+\xa0\x93\x59\xd7\xb1\x00\x12\x70\x06\x4d\x39\x6d\x66\xe5\x75\x11\
+\xfd\xe8\xd6\x96\xe9\x02\x7a\x92\xee\xde\x2a\xb7\x17\x6c\x4e\x10\
+\xaa\x81\x58\xb9\xdb\xc4\x5d\x14\xba\x8f\xd3\x9b\x4e\x6a\x92\xb1\
+\x29\xe9\x26\x40\xee\x68\xf2\x24\xb3\x39\x25\x46\xc3\x76\xec\x2b\
+\x2b\xac\xf5\x48\x6d\x50\xc3\x6a\xe2\x49\x8f\xd5\x20\xe1\x7e\xd5\
+\x7b\x9a\x13\xd4\xae\x61\xb2\x8f\x4e\x43\x4c\x46\xc8\x3b\x7c\x9a\
+\xc8\x09\x25\xd3\x99\xa7\x62\x4b\x1a\x8b\x68\x9a\x56\xf5\xa5\x24\
+\xe4\xe7\x7e\x5a\x9f\x86\x3c\x8c\x9d\x80\xad\xc9\xa4\x29\xf8\x52\
+\x87\x54\x65\x90\xf9\x14\x48\xee\x6e\x21\x20\xba\xea\xff\x00\x32\
+\x9c\x1a\xbd\xe4\xe1\x13\x3f\xd8\x79\xa0\xb4\x97\x18\x19\x80\xe0\
+\xf9\x34\x1a\x96\xb7\xb1\xce\x06\xa6\xf7\x70\x1b\xfe\x68\x77\xf6\
+\xa2\x4f\x7a\x00\xaf\xf1\xc3\x7d\xab\x37\x28\x5b\x20\xb4\x4f\x4c\
+\x5b\xde\x3c\x5e\xd9\xb0\xcb\xe4\x56\x75\xf8\x02\x46\x78\x64\xc8\
+\xc8\x61\xcd\x3c\x4c\x77\xb6\xc4\x70\xe2\xa2\x78\x92\xe6\x3d\x68\
+\xc0\x9f\x23\x9f\xd6\x92\x05\xe1\x97\x6d\x98\x53\xb1\xd0\x3b\x43\
+\x31\x46\xe7\x34\xe4\x47\xdb\xa0\x7d\xd4\xd0\xae\x51\x6e\xe1\xf5\
+\x13\x69\x17\x91\xe6\x87\x6b\x21\x65\xd3\x9c\x32\x9d\xaa\xc0\x66\
+\x90\x97\x62\x76\x20\x55\x23\x1a\x8f\xcf\xee\x68\xd2\x28\x65\xf5\
+\x17\xb8\xc3\x0a\xa5\x89\x1f\x89\x4c\xf1\xa8\x66\xb4\x35\x3a\x65\
+\x90\x8d\x04\xf3\x8f\xfa\x54\xd0\xba\xc5\xe6\x47\xa6\xa6\x99\xeb\
+\x17\x26\x35\x2a\x2b\x09\xd8\xb3\x12\x7b\xd7\x2c\x66\xfe\xd5\x5c\
+\x37\x34\x54\x5c\x2e\x0d\x44\x4b\xdc\xd4\xc8\x74\xae\x6b\xb4\x88\
+\x0c\x8b\xb9\x00\xe2\xba\x34\x57\x3a\x58\xe1\xbb\x67\xbd\x4b\x12\
+\x4e\x4d\x4c\x41\x58\xe1\x94\x1a\xd5\x82\x45\x8b\x31\xe1\x4f\xdc\
+\xd1\x97\xa7\xc8\x17\xf2\x8f\xd4\x54\xc3\x10\x27\x09\x23\x29\xf0\
+\x77\xa3\x24\x13\x9e\x4e\xc3\xbd\x62\xec\x0d\x6d\x11\x37\x92\x40\
+\x7e\x05\x4b\x98\xd1\x72\xab\xa4\x79\xef\x5d\x70\x56\x2f\xa9\xb5\
+\x1f\x8a\x52\x47\x67\x39\x35\x66\x3f\x91\x69\x25\x66\x3b\x6c\x2a\
+\x8c\x75\x2e\x96\x01\x87\x83\x57\xb6\x89\xa5\x7c\x0e\x3b\x9a\xb5\
+\xcb\xa8\x6d\x11\x81\x85\xf8\xe6\xad\xb3\xa1\x47\x65\x27\x65\x15\
+\x42\x01\xf8\xae\xae\xa0\xa4\x84\xae\xd9\xd8\xd5\x5d\xb5\x15\x07\
+\xb5\x75\xc3\x70\x3b\xd5\x19\x82\x82\x7b\xd4\xa2\x27\x62\x4e\x95\
+\x19\x2c\x70\x00\xef\x5b\x1d\x22\xcc\x5a\xc5\xad\xc0\x32\xb7\x27\
+\xc7\xc5\x03\xa2\xd9\x85\x02\xe6\x61\xef\x3f\x40\x3f\x96\xb5\x11\
+\x0b\x1f\x8e\xe6\xb3\x47\x46\x85\xdb\x03\xfb\xd3\x70\x98\xe0\x5c\
+\x82\xab\xe5\xdc\xe0\x56\x67\x52\xea\x90\x59\xa9\x8e\x3c\x49\x20\
+\xfc\xa0\xff\x00\xa9\xac\x5b\xbb\x9b\xcb\xd7\xd5\x34\x87\x1d\x87\
+\x61\x59\xd5\xc9\x5e\x9e\x4e\xab\xd3\x52\x5c\x48\xe6\x66\x1d\xfb\
+\x0a\x15\xe7\xf1\x0d\x8c\x03\xf9\x10\x29\x3c\xf1\x5e\x55\xe1\x90\
+\x6e\x0e\xf5\x06\x30\x83\x54\xad\x92\x78\x1e\x6a\x78\x43\x67\xfa\
+\xaf\x5b\xbe\xbf\x52\x9a\xbd\x38\x87\x61\xb5\x2b\x67\x6d\xac\x7a\
+\x92\x6c\x9d\x87\x76\xa2\xda\xdb\xe5\x44\x93\x8c\x2f\xe5\x4f\x3f\
+\x7a\x6e\x24\x2c\x78\xda\xb7\x24\x9d\x22\x21\x8f\x51\xce\x36\x15\
+\x6b\x87\x00\x15\x1b\x79\x34\x49\x59\x63\x4c\x01\xbd\x67\xdd\x33\
+\xcb\x2f\xe1\xa3\xdd\xdf\x9f\x8a\x09\xb5\x1e\xbc\xcd\x3b\x0f\xe5\
+\xc7\xb2\x8f\x26\x9c\xd0\xa0\x8d\x7e\xe7\x6e\x73\xda\xa2\x14\x48\
+\xd4\x22\x8f\xe5\xc5\xff\x00\xf4\x6a\xb9\x26\x4c\x9e\x49\xab\x20\
+\x39\xb4\x47\x18\xc7\x3d\xa8\x17\x1d\x36\x45\x24\xc4\x4f\xfd\x27\
+\x8a\xdb\xe9\x89\x11\xb8\x60\xec\x03\x01\xed\x07\x6c\xed\x5d\x73\
+\xac\x48\xc0\x8c\x6f\xc5\x67\x7c\x8f\x36\xa6\x7b\x57\xc8\x0d\x1f\
+\xc7\x63\x4d\x2c\x90\xdd\xa6\x92\x34\xc8\x29\xfb\xa1\x1b\xae\x99\
+\x50\x10\x7e\x2b\x3a\xe2\xc1\x87\xf3\x2d\xdf\x20\x6f\x8c\xee\x2a\
+\x76\x02\x0c\x96\xf3\x7c\x8f\xde\xa6\xe5\x41\x1f\x89\x8b\x91\xf5\
+\x28\xae\x49\x84\xa3\xd3\x9b\xda\xe3\x60\x4d\x40\xd7\x0c\x9b\xf0\
+\x7f\xb1\x14\x07\xb5\x94\x11\xa8\x6e\xad\xb1\x15\x07\xd9\x36\xde\
+\x76\xa5\xc9\x11\x49\xa9\x77\x8d\xb9\xf8\xa3\x1f\x72\xe7\x92\x3f\
+\x7a\xd4\x1a\x3d\x64\xeb\xb6\x8a\x50\x7e\xa0\x2b\x3e\x25\x2e\xe1\
+\x40\xf8\xa7\x6c\x5b\xf1\x16\x12\x5b\xb6\xe5\x3d\xcb\x4a\x5b\x9d\
+\x17\x0b\x9d\xb0\x77\xa9\x8f\x1c\x02\xb2\xe1\xf4\x8e\xd4\x09\xf3\
+\xea\x63\xb0\xad\x19\x21\x02\x53\xdb\xe6\x95\xba\x8f\x9c\x60\x91\
+\xde\xb7\x8e\x41\x77\x18\x18\xfd\xe8\x91\x00\x13\x23\xbd\x0c\x1d\
+\xb0\xd5\x2a\x4a\x6f\xc8\x35\xa0\xcd\xbc\x82\x32\x49\x07\x35\x17\
+\x17\x4c\x46\x01\xc0\xa5\xda\x42\x78\xda\xa8\x77\xa9\xe3\xee\x89\
+\x62\x49\xc9\xa9\x89\x0b\xb6\x05\x54\x0c\x9c\x0a\x7e\xda\x2f\x4e\
+\x20\x74\xee\x79\xa6\x57\x42\xcc\x9e\x8c\x1a\x17\x96\x1b\xfd\xa9\
+\x67\x8d\x47\xb9\xce\x05\x1a\xf2\xe1\x73\xb9\x05\xbc\x0a\x4e\x47\
+\x67\x39\x63\x58\xc6\x5f\x62\xb5\x0c\x40\x52\x4f\x6a\x93\x4b\xdc\
+\x3e\x5b\x48\x3b\x0e\x6b\x62\xac\xd9\x62\xed\x4e\x74\x8b\x43\x33\
+\x89\xe6\x5f\x60\xfa\x41\xef\x42\xe9\xd6\xad\x73\x28\x67\x18\x8d\
+\x7f\x7a\xd8\x9a\x48\xad\xa0\xd4\xc4\x05\x5e\x05\x62\xd0\x52\x55\
+\x14\xb3\x90\xaa\x39\x26\xb2\xba\x8f\x53\x79\xb3\x0d\xa6\x55\x38\
+\x2f\xdc\xd2\xbd\x42\xed\xee\x5b\xde\x4a\xc6\x3e\x94\x1d\xea\x90\
+\xc5\x3c\xab\xed\x5d\x0b\xe4\xf3\x4d\x6c\x42\xac\x71\xee\xcc\x33\
+\xe4\x9a\xba\x49\x1b\x26\xa5\x60\x40\xa2\x27\x4f\x8f\x19\x63\x96\
+\xf9\x19\xa8\xff\x00\xc2\xd6\x49\x32\x06\x4f\x7d\x35\x78\x00\x33\
+\x6b\x6d\x10\xa9\x76\xf8\xe0\x53\x16\xd6\x82\x3c\x4d\x39\xd5\x21\
+\xdc\x2f\x8a\x69\x23\x86\xd1\x02\x46\xa0\xbe\x3c\x6c\x2a\x8a\x0b\
+\x3e\x49\x24\x9a\x41\x31\x82\xef\x93\xbd\x1f\x64\x04\xd4\xa2\x04\
+\x5f\x9a\x0c\xec\x59\x82\x2f\x7a\x80\x37\x72\x84\x8d\xa6\x3e\x70\
+\x83\xc9\xaa\xf4\x94\x31\xdb\xbd\xe3\xee\xf2\xe5\x63\x3f\xea\x69\
+\x6b\xd7\x37\x17\x6b\x04\x5b\x84\x3a\x57\xe4\xf7\x35\xab\x22\x2a\
+\xcd\x1d\xba\xfd\x10\x2e\xf5\x28\x1b\x82\xaa\xb0\x8e\x79\x3f\x7a\
+\xa3\x02\xa7\x06\x9d\xe9\x90\x8b\x8b\xb6\x91\xfe\x91\x4e\xc9\x05\
+\x99\x04\x12\x7f\x4a\xd6\xf5\xc0\xcd\x8a\xed\xc2\xe9\x93\xdc\xbf\
+\xb8\xfb\x53\x6b\x79\x11\x40\x19\xf2\x7b\x1a\x8f\xc0\xc2\xcc\x4a\
+\x07\x23\xe4\x80\x29\x9b\x7e\x90\x64\x19\x58\x76\x1d\xc8\xdb\xfb\
+\x9a\xcd\xb8\x85\x9a\x48\xa5\xdb\x2a\x7e\xc6\x94\xb8\x89\xe3\xf7\
+\x21\x38\xad\x79\x3a\x44\x41\x4e\xb7\x85\x1b\xc0\x6d\xff\x00\x61\
+\x4b\x4f\x61\x71\x1a\xe5\x1c\x48\xa3\xb6\x73\x59\x99\x63\xea\xae\
+\x99\x13\x08\xe7\xff\x00\x10\x69\x61\xc3\x0a\x0b\x96\x8f\x11\xcb\
+\xee\x4e\xcc\x29\xe9\xe1\x52\x7d\xc3\x41\xf9\xe0\xd2\xce\xac\xa3\
+\x4b\xae\x54\xf6\x3d\xeb\x7a\x40\x7e\x83\x83\x86\x56\xfd\xea\x62\
+\x6f\x4c\x84\x27\x2a\x7e\x93\x5c\xca\x50\x7b\x77\x5e\xea\x7b\x55\
+\x36\x23\xe0\xd4\x0e\x5a\xca\x60\xb8\x59\x07\x1d\xc7\xc5\x5f\xa8\
+\xc6\x23\x9f\x5a\x7d\x0f\xee\x53\x4a\x42\xe4\xfb\x1b\x91\xc7\xcd\
+\x39\x19\xf5\xec\x8c\x47\xeb\x8b\x75\xfb\x53\xde\xc1\xa7\x94\xc9\
+\x02\x49\x9e\x46\xff\x00\x7a\x5d\x66\xc6\xcd\x53\x6a\x75\xc0\xf1\
+\x77\x1e\xe5\xff\x00\x7a\x0b\x56\xb1\x90\x11\x8c\x6f\xf0\x68\x44\
+\x11\xb0\xdc\x57\x63\x35\xda\x1b\xb5\x6a\x5d\x0a\xd7\x54\x95\x61\
+\xc8\x35\x15\x76\x2c\x84\x06\xc9\xa2\x49\x73\x23\x2e\x9c\xe0\x7c\
+\x50\x70\x7c\x54\x81\x52\x88\xae\xae\x3c\xd7\x50\x06\xe2\x4c\x0c\
+\x0e\x6a\x7a\x7d\xab\x5c\x4b\xbe\x74\x0e\x4f\x9a\xeb\x1b\x67\xb9\
+\x9b\x27\xe9\xee\x6b\x46\xea\xe2\x2b\x28\x74\x20\x05\xb1\xb0\xac\
+\x5a\x09\x71\x34\x36\x70\x0e\x32\x07\xb5\x45\x64\x4b\x2c\xd7\x73\
+\xf1\xa8\xf6\x1d\x96\xad\x14\x53\x5e\x4d\xad\x89\xc1\x3c\xff\x00\
+\xc5\x6d\xd8\x74\xe8\xe0\x88\x3c\xa9\x81\xd9\x7c\xfd\xeb\x3b\x93\
+\xb1\x9d\xd3\xba\x6b\x31\xd6\xd8\x63\xdd\x9b\x81\x5a\x31\xdb\xdb\
+\xa0\xf7\x96\x73\xf1\xb0\xa3\xbe\x58\x0c\xfb\x50\x70\x05\x25\x7d\
+\x72\x23\x53\x1c\x67\xdc\x79\xf8\xab\xbd\x83\xcd\x25\x94\x7b\x88\
+\x00\xf1\x96\x34\xac\xf7\x8f\x20\xd1\x10\x08\xbe\x40\xc5\x2b\xee\
+\x90\xea\x62\x71\xe4\xd5\xd4\x16\xf6\xa8\xc0\xab\x31\x10\x06\x5b\
+\x03\x24\x9e\xe7\xbd\x35\x0c\x61\x13\x27\x9a\xeb\x78\x70\x32\x7b\
+\x55\x98\x83\x96\x3f\x4a\xd2\xd0\x39\x8e\x07\xc9\xdc\xd2\xd2\xbf\
+\xa3\x67\x2d\xc1\xe4\x8d\x2b\xf7\xab\xdc\x31\xd3\xf2\xdb\x9a\x0f\
+\x5d\xfe\x5f\x4d\x86\x2f\xea\x39\x34\xa2\xbf\xc2\xf0\x97\xea\x3a\
+\x88\x07\xd1\x88\xb9\x07\xc9\xa7\xad\xff\x00\xc4\xb8\x27\x9c\x1a\
+\x5f\xf8\x55\xd5\x7a\xb3\xc4\xc7\x1e\xb4\x65\x57\xe4\xd1\xe4\x06\
+\x3b\x99\xc7\xf9\x6a\x7b\x0e\xf4\xc3\xa3\xa6\x92\x36\x67\x62\x28\
+\xb1\xa0\x2f\x8f\x1b\xb1\xf1\x43\xb6\x5f\x4e\xd6\x35\x3d\x97\x3f\
+\xa9\xa7\xfa\x7c\x46\x31\xae\x45\xce\x91\xea\x30\x3f\x1c\x0f\xef\
+\x8a\x99\x5d\x4d\x91\x63\x2c\x76\x80\x6a\x0b\xac\x0e\x48\xd4\x54\
+\xf8\x03\x8d\xbc\xd2\xb3\x5f\xca\xec\x49\x19\xcf\x77\x62\x7f\xed\
+\x40\xea\xac\xff\x00\x8c\x31\x17\x00\xa0\xf7\x31\x38\x03\xcd\x2e\
+\x90\x7a\x8b\xaa\x39\x63\x93\xec\x6b\x13\x19\xdd\x53\x7f\x8a\x9b\
+\x23\x05\x07\xff\x00\x88\xab\xad\xcc\xf9\xd4\x4a\x31\xfb\x0a\xce\
+\x6f\x52\x33\xef\x0c\xbf\x3d\xaa\x56\x56\x18\x39\x07\xed\x5a\xf1\
+\x88\xd2\x6b\x88\xa5\x04\x5c\x45\x9c\xf7\xc6\x7f\x7a\x5e\x6e\x9e\
+\x92\x29\x6b\x79\x01\x1f\xd0\xc6\x80\xb3\xe7\x92\x41\xa8\x37\x0d\
+\x13\x64\xe4\x7c\x8a\x4c\x6c\xe9\x4a\x5c\xdb\xc9\x0c\x85\x5d\x08\
+\xf8\xa5\xa5\x8f\x03\x5a\x0c\x8e\xe2\xb6\x92\xee\x19\xe3\xf4\xe7\
+\x01\x87\xcf\x22\x97\xbb\xb3\x08\xbe\xa5\xbb\x6b\x4e\xe3\xb8\xab\
+\xbf\x55\x19\x07\xb1\x1d\xa9\x8b\x69\x4a\xb0\x75\xe4\x73\x55\xb8\
+\x87\x48\xd7\x1e\xe3\xb8\xf1\x41\x56\xd2\x75\x0f\xd4\x55\x81\xf9\
+\xbf\x95\x70\xb3\x47\xf4\xb6\xe3\xfe\x2b\xae\x95\x75\xeb\x4c\x69\
+\x71\x91\xf1\x54\xb7\x71\x24\x7e\x93\x1e\x77\x53\xe0\xd4\x21\x20\
+\x18\xdb\xf4\xf8\x35\x67\x63\x93\x9a\x91\xbf\xc5\x45\x41\x24\x1c\
+\xd6\xf4\x2e\x37\xd8\xb0\x1f\x7a\xe2\x0e\x3e\xa5\xfe\xf5\x45\xd6\
+\xdb\xad\x10\x47\x26\x3f\x2d\x2c\x15\x60\xbe\x73\x55\x24\x62\xba\
+\x65\x65\xe4\xe7\x3e\x2a\x94\xd7\x03\xab\x8f\x15\xc4\xe2\x81\x3c\
+\x9d\x85\x03\xd7\x37\x11\xda\x43\xe9\x44\x32\xf8\xc5\x2d\x6f\x6e\
+\xf2\xbf\xab\x70\x49\xce\xfa\x7c\xd4\xda\xc5\xee\xf5\xa5\xdd\x8f\
+\x00\xf6\xa6\xa1\x0d\x24\x81\x40\xe4\xd7\x3d\x87\xba\x64\x68\x08\
+\x3a\x46\xdf\xb5\x35\x3b\xeb\x6c\x93\xed\x14\x34\x55\x86\x2d\x3f\
+\xdc\xd2\x77\xd7\x78\xf6\xa9\xdf\xc7\x8a\xce\xb7\x55\xdd\x42\xef\
+\x03\x42\x73\xfe\x94\x80\x52\x7d\xcd\xff\x00\xdd\x58\x29\xfa\x9f\
+\x93\xda\x8b\x14\x4c\xed\xbd\x6e\x4d\x22\xb1\xa1\x73\x8e\x00\xe2\
+\x9c\xb6\x83\x7c\x01\xbd\x4c\x10\x92\xc1\x54\x6e\x68\xf7\x85\x6d\
+\xe3\x11\x27\xd6\x7e\xa3\xe2\xa5\xcb\x9d\x40\x09\x88\x2c\x22\x8f\
+\x7f\x27\xc9\xaa\x5d\x29\x0e\x20\x5d\xf0\x77\xf9\xa6\x7a\x5c\x25\
+\xb5\x4d\x8f\xa0\x6d\xf7\xa5\x54\x86\xbd\x1a\xce\x37\xe4\xd3\x7c\
+\xe8\x29\x21\xcb\x6a\xed\xaa\x9d\xbd\xb6\xb6\xea\x16\xe9\x99\x82\
+\xb2\x8c\x50\x64\xb6\x9a\x27\x3a\xe3\x38\xf2\x57\x20\xd0\xc4\x68\
+\x4e\xfe\x9a\xfe\xa4\x55\xbc\x8b\x59\xd8\x47\x65\x74\x97\x53\xdd\
+\x07\xf4\xb7\x55\x5e\x49\xa2\x42\xa6\x7b\x86\x66\x18\x0e\x72\xc3\
+\xc0\xec\x2a\x88\x90\x29\xcb\x4a\xbf\xfe\x00\x93\xfd\xcd\x3b\x00\
+\x52\x8a\x23\x18\x0d\xc5\x40\xdd\x94\x61\xdf\xd5\x93\x1a\x57\x80\
+\x78\xa6\xe4\x94\x45\x6a\x92\x9e\x25\x97\x50\xf9\x55\xff\x00\xbe\
+\x69\x48\x12\x5b\xbb\x94\xb6\x80\x1d\x24\x85\xdb\xfd\x69\x8f\xe2\
+\xcd\x31\x4e\x2d\xe3\xfa\x20\x88\x22\xd7\x2c\xae\xec\x8a\xc4\xba\
+\x8e\x4b\xbb\x7b\x97\x19\x2d\x8d\x64\x79\xde\xb2\x21\x91\xe2\x7c\
+\xa9\x23\x15\xe8\x7a\x3c\x82\x2b\xec\x30\xca\xb0\x2a\x47\x9a\x5b\
+\xf8\x97\xa4\xb4\x0f\xeb\xc2\x09\x8d\xb7\x15\xbf\x29\x2e\xa8\xad\
+\x9d\xf8\x75\x0b\x36\x19\x7c\xe2\x8d\x2d\xaa\xba\xeb\xb7\x6f\xd3\
+\xb5\x61\xc4\xe5\x1b\xe3\xb8\xa7\xec\x6e\x9e\x22\x19\x0e\x57\xb8\
+\xab\x66\xba\x04\x93\x2a\xc5\x5d\x74\xb0\xf3\xde\xa3\x51\xdc\x72\
+\x3c\x1a\xd4\x83\xf0\xd7\xf1\x60\x90\x1b\xe7\x8a\x5a\xfb\xa7\x4d\
+\x01\xca\x82\x47\x83\x49\x9c\xea\x9a\x20\xeb\x8d\xd7\xff\x00\xaa\
+\xbd\xbc\xd2\x44\x75\x23\x64\x0e\x45\x50\x92\xa7\x0c\x0a\x91\xe6\
+\xa7\x93\x90\x77\xae\x9d\xf6\x86\x18\xc5\x3f\xbe\x30\x12\x5e\xea\
+\x78\x6a\xcf\xbc\xb7\x2a\xc5\x90\x11\x8f\xa9\x7c\x51\x9b\x63\x91\
+\xb1\xa2\xac\xa2\x41\xa6\x53\x82\x38\x71\xfe\xf5\x8b\x8e\xba\x19\
+\xd0\xbe\x96\xe7\x6a\x69\x8e\xb4\xf5\x07\xd4\x3e\xaf\x9a\x15\xec\
+\x05\x5b\x52\x80\x3e\xdc\x1a\xad\xb4\x9a\x5b\x07\x71\x48\x0c\xa7\
+\x22\xa1\xfc\xd4\x91\xa5\xbe\x0f\x15\xcd\xba\xd6\xe5\x17\xb7\x38\
+\x53\xe6\xaf\xa8\xd0\x22\x38\x7f\x8a\x35\x5b\xd8\xac\xe7\x2b\x41\
+\x34\x49\x8f\x6a\x5e\x79\x02\x8c\x0e\x68\x29\x71\x20\xce\x07\x35\
+\x5b\x58\x5a\x79\x42\x8e\x3b\x9a\xac\x68\xd2\xc9\xa4\x6e\x6b\x42\
+\x42\x96\x56\xda\x46\x35\xb5\x62\xd1\x45\x25\x9a\xb4\xec\x23\x58\
+\xa3\xd6\xc3\x73\x4a\x58\x43\x9c\xc8\xdc\x0f\xde\x8b\x3c\xc4\xfb\
+\x57\x73\x59\xa2\x6f\xee\x4e\x74\xae\xe4\xf6\xa5\x54\x15\x6c\xb7\
+\xb9\xcf\xed\x56\x45\xf7\x61\x3d\xce\x79\x3d\x85\x35\x6d\x6c\x34\
+\xeb\x6f\xa7\xbb\x79\xfb\x55\xe2\x01\x41\x0b\x31\xd6\xdf\xae\x69\
+\xa8\x63\x2c\x42\x20\xde\xa5\x14\xbb\x84\x45\xdb\xb0\xad\x6b\x1b\
+\x64\xb5\x40\xf2\x60\xb9\xac\x67\x9e\xbb\x50\x96\x05\xb4\xb5\x2e\
+\xc3\xdc\x45\x63\xce\xcc\xd2\x96\x63\x92\x4d\x7a\x47\x41\x72\x37\
+\xe1\x46\x6b\xcf\xdc\xc4\x4b\x1d\xb1\xbd\x4f\x8a\xee\xee\x95\xa5\
+\xd1\x62\x2f\x6b\x22\x26\x35\x15\xc0\xcd\x64\xde\xc2\xc8\xe4\x15\
+\x21\x97\x62\x29\x8e\x9f\x78\xf6\xd2\x85\x6d\x8f\x7d\xf9\xad\x5b\
+\x8b\x78\xba\x8c\x3e\xa4\x45\x44\xc0\x7f\xfb\x56\xb9\xc6\xec\x79\
+\xf8\x2e\x67\x8c\xfb\x65\x60\x3e\xf5\xb7\xd3\x7d\x1b\x98\x3f\x98\
+\x8a\xcd\x8e\x48\xac\x7b\xcb\x67\x8d\xd8\x15\x2a\x47\x20\xd1\x3a\
+\x35\xd8\xb7\xb8\x1a\x8f\xb4\xd6\xb2\x9b\x9b\x80\x7d\x62\x3f\x4e\
+\x50\x02\x80\x01\xec\x29\x9b\x60\x5c\xa8\x1c\x91\x81\x4c\x75\xdb\
+\x61\x71\x17\xaf\x0f\xb8\x73\xfa\xd2\x16\x53\x10\x06\x4e\x1d\x0d\
+\x25\xde\x28\xf6\x7f\xc3\xd6\x0b\x6a\x86\x72\x31\x85\xd8\x9e\xf5\
+\xe7\x3f\x89\x24\x0d\x73\x3b\x1e\xe7\x15\xa9\x69\xd6\xa5\x9e\xdf\
+\xd1\x70\xa3\x6d\xcd\x60\xf5\x97\x0d\x23\x1c\xe7\x26\xb8\x7c\x78\
+\xe5\xe7\xcb\x57\xa0\x33\xa6\x6c\x83\xce\xe2\xb7\x7a\x7c\xf1\x5c\
+\xda\xfa\x17\x18\x28\xfb\x03\xfd\x26\xb0\x07\xba\x05\x61\xca\xec\
+\x69\xae\x97\x30\x12\x98\x9c\xe1\x5c\x73\xe0\xd7\x4c\xf1\xdc\x48\
+\x4f\xf8\x93\xa4\x49\x67\x39\x65\x5c\xa9\xf1\xc5\x65\x44\xe6\x36\
+\xcf\x23\xb8\xaf\x77\x6a\x52\xed\x1b\xa7\xdd\xe3\x58\xfa\x18\xd7\
+\x95\xfe\x23\xe9\x72\x59\x5c\xb7\xb4\xe3\x35\x30\xcf\xfe\x72\x2c\
+\x0e\x09\x5a\x3c\x49\x11\xd8\xf2\x2b\x7b\xa3\xf5\x34\x96\x3f\x4a\
+\x71\xa9\x7b\x83\xb9\x15\xe5\xad\xa5\x31\xb6\x0f\x06\x9b\x46\x68\
+\xdc\x49\x19\xad\xe5\x8e\xcd\xbd\x5d\xc7\x45\x8a\xe9\x3d\x48\x0a\
+\xb2\x9e\x01\xff\x00\x9a\xc9\xbd\xe9\x12\x40\xf8\xd0\xc9\xf7\xe0\
+\xd1\x3a\x2f\x58\x78\x58\x61\xb0\x7b\xa9\xe0\xd7\xac\xe9\xb7\x96\
+\xb7\xf1\x60\xe9\x0d\xc1\x56\xae\x37\x2c\xf0\x5e\xde\x16\x6e\x9f\
+\x36\x9d\x4a\xa5\xbe\xd4\x9b\xab\x2b\x61\x81\x07\xe4\x57\xd2\xa5\
+\xe9\x90\xf2\xa8\x07\xc8\xa4\x3a\xb7\x47\xb6\x9e\xdf\x12\x47\x83\
+\xd9\xd4\x6e\x29\x8f\xf2\x3f\x27\x8b\xc2\xa4\x83\x4f\xa7\x20\xca\
+\xf6\x3e\x29\x7b\x98\x8a\x36\x47\x07\xc5\x69\x75\x7e\x9b\x2d\x9b\
+\x1d\xc4\x91\xf6\x71\xfe\xfe\x29\x15\x23\x74\x7f\xa4\xfe\xd5\xdf\
+\x8b\x37\x19\x52\x17\xd4\xba\x0f\x3d\xaa\xea\x7b\x1a\x0c\xc8\x62\
+\x93\x6d\xc7\x62\x2a\xe8\xda\x97\x23\xf5\xab\x05\x98\x60\xd1\xa3\
+\x39\x5c\xd0\x79\x15\x68\x4e\x1b\x1e\x6b\x7d\x81\xdc\x3e\x9c\x93\
+\x4a\x1d\x4e\xfb\x6e\x4d\x35\xd4\x47\xb7\x35\xdd\x2d\x54\x6b\x95\
+\x86\xca\x2a\x50\x68\x95\x2c\xed\xf5\xb6\x35\x1a\x5a\x30\xd7\x12\
+\x99\xa4\xe3\xb5\x44\x8c\xd7\x53\xe4\xe4\x20\xa3\x70\x30\x36\x02\
+\xb2\x1f\x9a\x50\xa8\x11\x76\x51\x42\x89\x4b\x8c\xb1\xd2\xbd\xfc\
+\x9a\x11\x90\x38\xdc\x60\xd3\x16\xb8\x76\x50\x78\x03\x8a\x9d\x40\
+\xcd\xbc\x29\xa7\x51\x5d\x31\xfe\xed\x44\x6c\xc8\x42\xa8\xc0\x1c\
+\x28\xed\x56\x45\x2f\x82\x4f\xc6\x29\xeb\x44\x86\xd5\x7d\x69\x86\
+\xe3\xe9\x5a\xc5\xba\xfe\xd4\x6e\x9b\x6a\xb6\xf1\x7a\xb2\x8f\x71\
+\xe0\x52\xd7\x52\x4b\x35\xf2\xc6\x99\x39\xe0\x0a\x1d\xdd\xf4\xb3\
+\x3e\xa1\xed\x51\xc0\xad\x3f\xe1\x53\x11\xfe\x27\x85\xa4\x00\x83\
+\x0e\xa5\x04\x73\x5c\xf2\x96\x4d\xd1\xaf\xd2\x7a\x15\xd7\xe0\xc4\
+\xc3\x00\xf8\x6e\xf4\x2e\xa1\xd1\x12\x43\xfc\xdb\x53\x03\xe3\x1a\
+\xe3\x19\x53\xf7\x14\xf7\x52\xeb\x52\x17\x29\x19\x0a\x01\xc0\x02\
+\xa2\xd7\xae\x38\xf6\xc8\x01\xfb\xd7\x09\x7e\x4e\xda\xe1\xe3\x7a\
+\xbf\x4a\x9a\xd9\xb1\x22\x6a\x43\xf4\xb8\xef\x49\x5b\xdc\xcd\x67\
+\x20\xcb\x1d\x3e\x6b\xe9\x7e\x9d\x97\x50\x8c\xaa\xe9\x52\xc3\x75\
+\x3c\x1a\xf3\xbd\x7f\xf8\x56\x45\xd4\xf6\xcb\x90\x7f\x21\xef\xf6\
+\x35\xdf\x0f\x9e\x5e\x32\x66\xc6\x54\x8d\x07\x52\x83\x21\x82\xcc\
+\x06\xc7\xcd\x63\x5e\xda\xbc\x32\x10\x57\x04\x76\xa2\x4b\x0d\xc5\
+\x95\xc1\x00\x30\x2b\xca\xf8\xa7\xa1\xbb\xb7\xbc\x84\x45\x73\x85\
+\x60\x36\x6f\x15\xda\x6f\x1e\x67\x48\x57\xa3\xde\xfa\x4d\xe8\xcd\
+\xbc\x6d\xb6\xf5\x1d\x5a\xd3\xd0\x90\x5c\x42\x35\x21\xe7\x15\x5b\
+\xab\x09\x55\xb3\x18\xd6\x0f\x75\x35\x68\xde\xfd\x22\xd1\xb2\xa8\
+\x3f\x9b\x15\x78\xde\xe0\x5c\x5d\xb0\x18\x40\x72\x79\x14\x19\xcc\
+\xae\x72\xfb\x7c\x66\x99\x9d\x8e\x49\x9e\x70\x3e\x13\x1b\xd1\xad\
+\x6c\xa5\x91\x43\xa4\x02\x34\x3c\x49\x29\xe7\xec\x3b\xd6\xb7\x20\
+\xa4\x09\xff\x00\x92\x73\xfe\x60\x3f\x6a\x5d\x1f\x43\xe7\xb0\x35\
+\xa1\x78\x12\x18\x16\x04\x3c\x6e\x4f\x72\x7c\xd2\x16\xe0\x3b\xba\
+\x76\x35\x9c\x79\x1a\xf2\x3b\x49\x6f\x15\xd2\x1f\x7c\x67\x4b\x62\
+\xb4\x66\x48\xba\xc7\x4d\x2a\xd8\xf5\xd0\x71\xe6\xbc\xff\x00\x4f\
+\x9d\xe1\x9b\x41\x39\xd3\xbf\xdc\x56\x8d\xf3\x35\xbc\xd1\xdd\x5b\
+\xb1\x50\xe3\x3b\x57\x1c\xb1\x57\x97\xea\x96\x6f\x69\x70\xc8\xca\
+\x40\xce\xd5\x16\x73\x01\xec\x73\xb1\xe0\xd7\xb3\x96\xca\xd7\xad\
+\xd8\xb1\xc6\x9b\x85\x19\xdb\xbd\x78\xde\xa7\x63\x2d\x9c\xe5\x1c\
+\x1c\x03\xcd\x6f\x0c\xe6\x5c\x5e\xcb\x05\x61\xa4\xea\x4a\x7f\xa7\
+\xde\xb2\x91\xb9\x04\x70\x73\xb8\xac\xab\x59\xb3\xec\x63\xbf\x62\
+\x68\xac\x0a\xb6\x45\x6e\xcd\xf1\x51\xed\x3a\x3f\x5f\x92\x35\x09\
+\x3e\x64\x4e\x33\xdc\x56\xea\xcf\x05\xd4\x3a\xa1\x75\x6c\x8e\x2b\
+\xe6\xf6\x77\x45\x4e\x1b\xfb\xd6\xad\xa5\xcb\x29\x0f\x0c\x84\x11\
+\xe0\xd7\x9f\x3f\x8a\x5e\x9a\x94\xef\xf1\x1c\x46\x37\x2d\x18\x3f\
+\xe6\x43\xc1\xaf\x31\x75\x1a\x1f\x7c\x5c\x77\x53\xf9\x6b\xd7\x8b\
+\xc8\xba\x84\x5e\x85\xd0\x09\x21\xd8\x3f\x63\xf7\xaf\x35\xd6\xec\
+\xe5\xb3\xb9\x39\x1b\x67\x63\xe6\xb7\xf1\x5d\x71\x4a\xce\xd9\x97\
+\x43\x71\xdb\xe2\x82\x33\x14\x98\x23\x6a\x3b\xe1\x86\x47\xea\x2a\
+\x92\x2e\xb5\xf9\x1c\x57\x6b\x19\x48\x23\x90\x76\xa9\xe0\xe4\x50\
+\xa2\x62\x0e\x93\x44\xab\x28\x9b\xa5\xf5\x21\xc8\xed\x40\xb7\x72\
+\x2d\x65\x51\xb1\xe6\x98\x8c\xec\x54\xf0\x69\x68\xc6\x99\xa4\x43\
+\xdd\x4d\x5b\xd0\x25\xb7\xf8\x23\x14\x68\x23\x32\x3e\x3b\x0e\x68\
+\x16\xc7\xf9\x42\x9d\x0e\xb1\xc4\x14\x63\x38\xc9\xac\xfa\x1f\xff\
+\xd9\
+\x00\x00\x09\x4c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x2f\x08\x06\x00\x00\x00\xa5\x82\x49\xc9\
+\x00\x00\x09\x13\x49\x44\x41\x54\x78\x5e\xd5\x9a\x5b\x6c\x1c\xe5\
+\x19\x86\x9f\x7f\x66\x67\xcf\xde\x4c\x36\x5e\x27\x3e\x80\x9d\xf3\
+\x81\x84\x2c\xa0\x0a\xaa\x4a\x64\xab\xaa\x52\x0b\x2a\xb8\x42\x42\
+\xaa\x7a\x93\x10\x5a\x62\x6e\x12\xae\x7a\x99\x46\x2a\xf4\xa6\x52\
+\xb9\x6b\x25\xa0\x44\xea\x55\x11\x28\xa1\x2a\x55\x91\x2a\x12\x50\
+\x4b\x4f\x10\x6c\x48\xdd\x92\xc4\xe0\xc4\x89\x63\x3b\x4e\xf6\x64\
+\xaf\x77\x67\x67\xfe\xaf\x23\xef\x4a\xd3\xd5\xe2\x20\xf0\x41\xe2\
+\x93\x5e\x7d\xb3\xb2\x56\xfa\x1e\xbf\xdf\xec\xfe\xaf\x66\x95\x88\
+\xf0\x55\xae\x10\xb7\x29\xa5\x14\x5f\xa4\xde\x7d\x8a\x01\x81\x41\
+\x2d\xf4\x0b\x64\x35\x20\x80\x86\x61\x11\x46\x04\xce\x7e\xfb\x05\
+\xc6\xf9\x02\x25\x22\x9f\x0f\xb0\x5c\xfd\xe3\x29\x72\x02\xc7\xad\
+\x64\x34\x97\xda\x94\x22\x9e\x4e\x90\x48\x27\x11\x1a\x95\x9f\x2a\
+\xe6\x16\xca\x55\x66\x2e\xdf\xe2\xcd\x1f\xb9\x67\x05\x4e\x7c\xe7\
+\x05\xce\xb2\xbc\x5a\x3e\xc0\x7b\x47\xb0\x05\x4e\x59\x89\x68\xae\
+\x67\xff\x9d\x64\xb6\x75\x21\xe9\x3d\x90\xe8\x87\x98\x05\x66\x05\
+\xdc\x22\x76\x65\x0c\x4a\x93\xec\x29\xef\x60\xf2\xe2\x4c\xee\xe2\
+\xf0\x95\xdc\x1f\x9f\xac\x3e\x2f\x70\xe2\xe1\x17\x29\xb0\x8c\x52\
+\x22\xf2\xa5\x56\xe8\xfd\x23\x64\x05\xce\x74\xef\xeb\xb7\x7b\xee\
+\xdd\x89\xf4\x3e\x04\xdd\x8f\xa3\x42\x9d\x80\xdb\x90\x5c\x04\xa9\
+\x00\x49\xa0\x02\x0b\xaf\xc3\xc4\x5b\xb8\x93\x61\x46\xff\xf9\x09\
+\x13\x63\x53\xc3\x02\xdf\xfc\xde\x6d\x20\x44\x64\xe5\x01\x3e\x38\
+\xc2\x80\xf8\xed\x8e\xfb\x77\xd8\x1b\xee\xde\x01\x7b\x7e\x82\x8a\
+\xde\x07\xb8\x88\x5c\xf2\xf5\x31\xc8\x28\xc8\x35\x94\x4c\x82\x5c\
+\x47\xc9\x34\xa8\x7d\xc0\x37\xa0\xf8\x36\x5c\x70\x98\xb8\x70\x83\
+\x91\x77\x2f\x2c\x42\x3c\xe2\x43\x7c\x19\x00\x83\x2f\x57\xa7\xfa\
+\xbe\xb6\xd5\x4e\xdf\xb5\x15\xb5\xef\x59\x54\x74\x0f\x22\xa3\x78\
+\xfa\x35\xb4\xfe\x2b\xf8\x10\x48\x01\x64\xae\xe1\x80\x54\x01\x07\
+\xf4\x5b\xe0\xfc\x0c\x22\x73\xb0\x79\x94\x9e\xad\xeb\xe9\xdf\xd9\
+\x9d\x15\x78\x99\xa5\x6b\x65\x01\x46\x86\xf8\x69\xaa\xc7\xce\xda\
+\x5b\xd2\xa8\xbb\x7e\x08\x21\x1b\xd1\x7f\x46\xbc\xd7\x50\x32\xe6\
+\xeb\x2a\xc8\x14\xc8\x4d\x14\x05\xa0\x8c\xa2\x09\xa1\x35\x68\x05\
+\xee\x47\x60\xd6\x31\xfa\x3e\x65\x57\xb6\x97\x94\x1d\x1b\x3c\x7d\
+\x98\xc1\x55\x07\xf8\x70\x08\x1b\x38\x9a\xd9\xdb\x83\xb1\xf5\x2e\
+\x54\x6c\x1f\xe8\xb7\x10\xef\x55\x58\x1c\x7c\x62\xb1\x2b\x99\xf4\
+\x35\xb3\x08\x81\x14\x81\x32\x50\x03\x31\x1a\x00\xda\x00\x51\xa8\
+\xb0\x83\x5a\x7f\x8b\x1d\xfb\x7b\x01\x7e\xb9\x16\x9f\x42\x83\x89\
+\x4d\x1d\x76\x68\x9d\x87\xd9\xf3\x30\xc8\x75\xc4\x7b\x11\x05\x40\
+\x18\x30\x40\x3c\xa0\x0a\xcc\x83\x94\x51\x94\x40\xe6\x41\x0b\x78\
+\x26\xe8\x26\x44\x53\xe6\xba\x39\xec\x74\x86\x68\xdc\x1a\x38\x75\
+\xb8\x9e\xfd\xfe\x4b\x0c\xaf\x26\xc0\x81\x78\x26\x81\xd1\x69\x03\
+\x16\x78\xaf\xa0\x64\x1c\x21\x0a\x58\x80\x02\xd1\x80\x83\x62\x01\
+\xa8\x80\xf8\xd2\x1a\x3c\x23\x90\x0e\xa4\x14\x18\xb1\x05\xba\xef\
+\x48\xf1\xc9\xc7\x37\x07\x61\x75\x01\xb2\x56\x32\x84\x69\xdf\x01\
+\x52\x06\xef\x0d\xa0\x88\xc2\x02\x15\x02\x51\x80\x06\x71\x01\xa7\
+\xd1\x35\xcd\xc1\xcd\xc0\x81\x16\x08\x85\xb2\x5c\xd6\xa5\x23\x08\
+\x1c\x58\xd5\x15\x52\x90\x35\xe3\x06\x18\xbe\xf4\x2c\xb8\xbe\x0c\
+\x01\x55\x03\x51\x04\x25\xa0\x15\x88\x01\x9e\x02\x6d\x12\x38\x10\
+\x5c\x37\xef\x07\x94\xa9\x11\xed\xad\xcd\x37\xb1\xf6\x5c\xc4\xab\
+\x43\x7d\x0c\xdc\x10\x28\x0d\x0a\x50\x12\x00\x88\x6a\xa8\x39\xa0\
+\x2f\x82\xa1\xdb\xa5\x4c\xd0\xda\x5d\x23\x00\xed\x82\x0f\x80\xe7\
+\x40\xdd\x04\xc3\x08\x86\x57\x80\xd0\x04\x00\xc4\x58\x1a\x22\x70\
+\x01\xb7\xa2\xd1\x6b\xe1\x80\xc0\xd9\xda\xad\x6a\xae\x5e\x98\xc3\
+\x4a\x87\x9b\x0e\x48\x53\x04\x25\xed\x2e\x34\x7b\x2b\x40\x13\xcc\
+\xad\xd6\xa9\x3b\x1e\x40\x61\xb5\x1d\x18\x76\xe6\x9c\x5c\x6d\xfa\
+\x12\xf1\x81\x2c\x78\x51\xc0\x69\x77\x80\xa6\x03\x5a\x81\xb4\x02\
+\xd0\x7e\xcd\x42\xa1\x46\x31\x5f\x43\xc1\xdb\xab\x0d\xf0\x7a\x75\
+\xc6\x39\x56\x99\xbe\x45\xaa\x78\x05\x33\xd4\x07\xde\x65\x50\x04\
+\x45\x00\x81\xa6\xe9\x44\x03\xa0\xcd\x0d\x51\xd4\xe6\xea\xd4\xab\
+\x0e\xf9\xd9\x3a\xc0\xe9\x55\x05\xb8\xfb\x57\x9c\x1d\x19\xd2\xe3\
+\x4e\xd1\x1d\xc8\x9f\x7f\x8f\xce\xec\x5e\x70\xaf\xb5\xde\xc0\xb4\
+\xb9\xd0\x0a\x21\x2a\xe8\x40\xe1\x4a\x91\xd9\xe9\x3a\x4e\x55\x4e\
+\xfa\x5f\x62\xe3\xab\xed\x00\x02\x87\xe6\xaf\xd4\xcf\x98\x89\x49\
+\xe6\x26\xd6\x91\xec\xea\x01\x77\x8a\xb6\x12\x45\x70\x2f\xb4\x0f\
+\x0e\x90\xbf\x52\xa0\x52\xac\x71\x75\xdc\x05\x38\xb1\x26\x81\x26\
+\xeb\xbb\xf0\xc1\x11\x39\x39\x37\xee\x1d\x14\x7d\x1e\x76\xef\x26\
+\xb9\x21\x0e\x52\x03\x05\x48\x9b\x0b\x01\x40\x50\x94\xa6\xca\x94\
+\xae\x97\x98\xf8\x04\xb4\xcb\x33\x83\x2f\x31\xbe\x66\x89\xec\x9e\
+\x5f\x73\xe8\xdc\x11\xc9\x19\x56\x68\x60\x56\x46\x71\x7a\x33\xd8\
+\xbd\x11\x0c\xd3\x20\x28\x05\x42\x5b\x69\x4f\x33\x3b\x76\x93\xf9\
+\xe9\x0a\x37\x66\x42\x94\xf2\xee\x59\x3f\x0b\x3c\xbf\x36\xc7\xe9\
+\x20\xd0\x64\xcd\x70\x68\xa0\xff\x9e\xfd\x64\x76\x3d\xc8\xdc\x8d\
+\x79\xae\x9e\x9b\xa4\x30\x51\xc2\x99\xaf\x83\xb4\x0f\xef\x54\x1c\
+\x6e\x5d\xce\x33\xf1\xde\x35\xe6\x26\x2a\xd8\xa1\x1e\xb6\x6d\xd9\
+\x8e\x15\x0e\x65\x7f\xff\x24\xd9\x35\xcb\xc4\xc3\x43\xd8\x22\x9c\
+\xd9\xfe\xad\xfd\xc4\xfa\xba\x91\x7d\xcf\x11\x7d\x60\x81\xfc\xdf\
+\x8e\x93\xff\xf0\x1d\xf2\x97\x0b\x98\x11\x83\x70\x3c\x4c\xb3\xa8\
+\x96\xaa\x88\x0b\x86\x01\xf1\xb4\x22\xb1\xcb\x44\xb9\x37\x61\x3c\
+\xce\x3d\x7e\x24\xfd\xfb\xfb\x63\x67\xfc\x3c\xb0\xd9\x5f\xa3\xc2\
+\xaa\x3b\xa0\xe0\x54\xef\x7d\x5b\xed\x58\x26\x85\x6c\x3f\x84\xb2\
+\x76\x63\x46\xee\xa6\x33\xf7\x12\x3d\x8f\x1c\x24\xd5\x73\x3f\xd1\
+\xd4\x36\xd0\xeb\x41\x92\x40\x84\x44\x26\x49\xe7\xee\x28\x5d\xf7\
+\x1a\x24\x07\xc0\x08\x2b\x54\x4c\x50\x03\x33\xd8\x49\x8b\xbd\x7b\
+\x7b\x6d\xe0\xd4\xea\x39\x10\x04\x9a\x63\x89\x2e\x3b\x97\xd9\xd9\
+\x07\x9b\x1f\x44\x75\x7c\x17\x58\x00\x99\x41\x7b\xbf\xc5\xea\xab\
+\x61\x77\xf6\x53\x9f\x08\xe3\x95\x22\x28\xb5\x00\x46\x05\xc3\x98\
+\x07\xe5\x80\x12\x14\xcd\x13\xa8\xa9\x08\x6d\xf4\x30\x32\x25\xb6\
+\x5c\x4a\x33\x79\x2d\x9f\x3b\x75\xb8\x72\xcc\xcf\x03\xcf\xaf\x0a\
+\xc0\x47\x43\xd8\x02\xc7\xfb\x1e\xd8\x09\xe9\x18\x6c\xfc\x31\xc8\
+\x3c\x30\x8d\xb8\x3f\x6f\x9e\xff\x5d\x54\xa4\x4a\x64\x2b\x88\x63\
+\xa2\x2b\x1e\xd4\x1c\xc4\x71\x40\xd5\x17\x87\x56\x86\xc2\x08\x1b\
+\x7e\x6f\x9e\x4a\x23\xf3\x90\x8a\x70\xef\x9e\x8d\xbc\xf9\x97\x4f\
+\x8f\xbf\x76\x98\x93\x8f\xf9\xab\xb4\xe2\x00\x0a\x8e\x77\xed\x1b\
+\xb0\xc3\xa9\x30\x6c\xfe\x01\xa0\x9b\xc3\x3f\xdb\x88\x93\x00\x34\
+\x73\x00\x55\x94\x55\x21\xb4\xee\xff\x03\xbd\x6a\x3f\x4e\x37\xcf\
+\x4a\xf4\xcd\x11\x9f\xed\x60\x77\xbf\x6d\x8f\x5e\x2e\x1c\x03\x7e\
+\xba\xa2\x99\xf8\xdf\x43\xd8\x66\x38\x74\x6c\xc3\x8e\x5e\xe8\xb6\
+\x21\xf6\x75\xa0\x84\xb8\xcf\x81\x3e\x07\xcc\x36\x24\x37\x41\x6e\
+\xa1\x24\x8f\xa2\x08\x52\x06\x16\x9a\x71\x32\x08\x30\xcd\x1e\x64\
+\x86\xb0\x40\x57\x95\xad\x9b\x12\x58\x21\xe3\xf8\xab\x87\xb1\x57\
+\xda\x81\x63\xf6\xe6\x4d\x98\x31\xa0\xf7\x31\x90\x22\xe8\x77\x50\
+\xfa\x4f\x80\x19\x84\x19\x34\xe0\x82\xd4\x83\x44\x26\xea\xb3\x8e\
+\xd0\xed\x20\x9b\x34\xd6\xb8\xe2\xce\xce\x28\x97\xa6\x2a\x81\x0b\
+\x2b\x04\x70\x74\xc3\xce\x5e\xb0\xc3\x10\xda\x06\x14\xc1\xfd\x05\
+\x50\x6a\x9a\x18\x00\x2c\x4a\x74\x70\x0a\x0d\x00\x02\x05\x6e\x04\
+\xc7\x0b\x43\x41\x46\xd8\x5e\x8c\x72\x71\xaa\x72\x34\x00\x58\xe6\
+\x0a\x8d\x3e\xcd\xc1\x54\x5f\xa7\x6d\x25\xa2\xd0\x77\x00\x74\x19\
+\xea\x7f\x00\x6f\x06\xb4\x06\xed\x82\x38\x0d\x69\x0f\x3c\x69\x8d\
+\x8f\xae\xd9\xe8\x4b\x25\x32\x31\x02\xd0\x6e\x83\xb8\x29\xf4\xa4\
+\x2c\xfb\x95\x27\x38\xb8\x22\x0e\x28\x78\xb4\xa3\x6f\x03\x44\x2b\
+\x10\xd9\x05\x7a\x0e\x6a\x6f\x80\x98\x41\x90\x41\x5a\x0f\x70\xa8\
+\xb6\x2c\xd0\xda\x83\x55\x6a\x51\xc4\x80\x18\xf4\x26\x4d\xae\x15\
+\xeb\x8f\x02\x27\x57\x62\x85\x06\x93\x7d\x9d\x90\xee\x06\x11\xf0\
+\xae\x80\x73\x15\x94\xd1\x9e\x85\x59\xe2\x04\xaa\x83\x4c\xd0\xb2\
+\x3e\x81\x0b\xc1\x7b\x36\x5a\xf4\xcc\x56\x01\x06\x97\xed\xc0\x7f\
+\x9f\x66\x30\xd6\x65\x63\x5a\x21\x48\xf6\x83\x37\x07\xf5\xf7\xc1\
+\x6b\xfd\xef\xb7\x9e\x42\x55\x6b\x98\x09\xee\x85\x25\x52\x99\x6a\
+\x55\x26\x8c\x85\x26\x13\x33\xf8\xdd\x13\x7a\x10\x38\xbd\x1c\x07\
+\x0e\xc4\x7d\x00\x42\x75\x88\xa6\x1b\xeb\x53\xbf\xd1\x00\x60\x89\
+\x2c\xbc\x84\x0b\xc1\x3a\xb5\x01\x05\x0e\x01\xc4\x4c\x88\x40\x26\
+\x0a\xd3\x0b\x1c\x58\x2e\x40\x36\xde\xb5\x0e\x22\x11\x10\x5f\x5e\
+\x05\x9c\x29\xf0\xda\xd7\xa7\x1d\x22\x00\x69\x59\xa1\x60\xf0\xd6\
+\xbf\x09\x41\x25\x43\x74\x45\x1c\x80\xec\xb2\x56\x48\x41\x6e\xd1\
+\x01\x2b\x0c\xde\x3c\x48\x15\x3c\x09\x56\x08\x5a\x6f\x62\x54\xcb\
+\x2a\xb5\x48\xb7\xf7\x60\xf7\x69\xad\x94\x85\x1d\x12\x80\xdc\xca\
+\x04\x1a\xf1\xc0\x9d\x07\x6a\xe0\x85\x02\x07\x68\x5b\xa1\x16\x90\
+\x76\x88\xf6\xeb\xa5\xca\x32\x56\x32\x0f\x54\x4a\xe0\x4c\x82\x11\
+\x05\x49\xb6\x38\x10\xb8\xb0\x74\x9c\x6c\x17\xb7\x1d\x9e\xd9\xea\
+\xca\x04\x1a\x81\xd3\xf9\x0b\x57\x07\xd7\xef\xe8\x83\x6b\xe7\x21\
+\xdd\x01\x66\xb8\xe9\x80\x00\x7c\x8e\x03\x00\x5f\x60\xf0\xba\x86\
+\x8f\xf2\x8b\x00\x17\xca\x00\x9c\x5e\xae\x03\xcf\x4c\x9f\x1b\xcb\
+\x89\x27\x76\x7a\xcb\x46\x98\xaf\x40\xac\x0c\x49\x13\x0c\xb9\xfd\
+\x4d\x0c\x2d\x03\x7f\xee\xe0\x63\x65\x5f\xa5\xc5\xeb\x8b\x65\x18\
+\xc9\x53\x50\xf0\xcc\xb2\x9f\x52\xfe\xe7\x69\x06\xb4\xf0\x72\xbc\
+\xb3\x23\x97\x1e\xe8\x22\xd5\x99\x04\xcf\x83\x88\x03\x51\x17\x62\
+\x9e\x2f\x01\x73\x09\x17\x96\x1a\xb8\x58\x87\xd9\x6a\x20\xfc\x56\
+\x83\xd1\x22\xcc\xd4\x18\x16\xe1\xd0\xe3\xbf\x61\x78\xc5\x9e\x52\
+\x9e\x1f\xe2\xa0\x86\xa3\x56\x2c\x9c\xed\xf0\x21\x92\xa9\x18\xc9\
+\x8e\x30\xa6\xa2\x01\xe4\x8b\x84\x80\xd6\xb4\x4b\x1a\x5d\x04\x66\
+\x9b\xc7\x6b\x69\xe8\x66\x0d\xae\x2f\xc0\xa4\xaf\x79\x97\x71\x81\
+\x13\x7e\xa0\x39\xb9\x6a\x8f\x59\x47\x86\xc8\x8a\x30\xa8\xe1\x80\
+\x40\x2e\x9a\x08\x63\x18\x8a\x64\x32\x0c\x5a\x13\xb6\x0c\x22\x26\
+\xa0\x35\xe2\x0b\x69\x40\xd5\x5d\x4d\xb9\xa6\x11\x11\x6e\x56\x05\
+\xc7\x6b\x98\x20\x70\x56\xc3\xdb\x22\x9c\x1e\x0c\x1e\x2f\xb1\x4a\
+\x00\xed\xfa\xd7\x11\xb2\x5a\x18\x08\x7e\x1b\xc1\x7e\x01\x5b\x0b\
+\x34\x5e\x37\xbb\x50\xd0\x30\x12\xfc\x76\x82\xf1\x87\x5e\x6c\x1f\
+\x78\x19\x00\x5f\xcd\xfa\x1f\x35\x30\x04\x37\x1b\x34\xa6\xbe\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x0f\x35\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x0e\xfc\x49\x44\x41\x54\x78\x5e\xed\x98\x79\x70\x55\x65\
+\x9a\xc6\x7f\xe7\x9c\xbb\x24\x37\xb9\xd9\x37\x92\x90\x18\x93\x10\
+\x96\x48\xd8\x09\x22\x8b\x08\x11\xd3\x80\x8a\x2c\x3a\xed\x82\xda\
+\xd3\x6a\xab\xd3\x33\xea\xf4\xd0\x5d\x6d\x4f\x4f\x4f\xd9\x5d\x6d\
+\x77\x57\x97\x4d\x4d\x6b\x4f\xd9\xa3\xa3\x08\xa3\xd0\x2c\x12\x44\
+\x90\x45\x16\x43\x00\x21\xec\x4b\x02\x04\xc8\x9e\x7b\x73\xf7\xfd\
+\xdc\x73\xbe\xb9\x4d\x4e\x0d\x50\x4c\xb5\x50\x53\x16\x76\xd5\x3c\
+\x55\x4f\x9d\xf3\xd7\xbd\xef\xef\x3c\xef\x7b\xdf\xef\x5c\x49\x08\
+\xc1\x5f\xb3\x64\x6e\xad\xfe\x1f\x00\x21\x04\x86\xb9\x11\xfd\x0d\
+\x54\x3f\xae\x28\xbf\x79\x31\x2b\xbb\xf9\xbb\x66\xf3\x67\xf3\xe1\
+\x1e\xc0\x0a\x48\xb7\xa0\xf6\x9b\x4b\xe0\xdb\xf0\x5c\x69\x61\xd1\
+\x9e\xc5\x23\x47\xbe\xf4\xb3\xa5\x4b\x47\xbd\xba\x71\xe3\xcc\x91\
+\xd9\x19\xab\x07\xdb\x27\x3c\x42\xd5\x3f\xd6\x00\x26\x40\xfa\x46\
+\xb6\xd0\x63\x92\x54\x37\xaa\x72\xc8\xef\x9f\x28\x2b\x49\x1f\x23\
+\xfa\x49\x3e\xb3\x8b\xe2\x21\xe5\xd4\xbf\xf2\x52\xc6\xa0\xaa\xd1\
+\xef\x24\x55\x4d\x6c\x34\x8d\xfc\xf9\x07\x96\x92\x05\x15\x80\xf9\
+\x1b\x07\x90\x6c\x32\x3d\x39\xdd\x22\x93\x67\x76\x91\x77\x67\x29\
+\xe6\x54\x0f\x2d\x9f\x6d\xe4\xc2\xdc\x17\xf9\x43\xc3\x1b\x6c\x7f\
+\x6b\x5e\xf2\xd8\x05\x73\x16\x91\x76\xc7\x3b\xc8\xe6\x5c\xc0\xf2\
+\x8d\x02\x90\x55\x35\x68\x8b\xbb\xc8\xac\x4a\x27\x54\x54\xca\xd1\
+\xfa\x1f\x71\x62\xda\xd3\x64\xa7\x58\x28\xce\xb0\x32\x69\x90\x99\
+\x67\xe7\x55\x93\x3f\x62\xdc\x64\xd3\xa0\x39\x0f\x00\x76\x40\xfe\
+\xc6\x00\x1c\xb5\x8f\xd8\xb3\x3f\x35\x97\x8f\x87\x3e\xc6\xaf\x86\
+\xbf\xce\x7b\xd2\x4c\xf6\x6c\x5c\xc3\xb9\x9d\x6b\x59\xf3\x5f\x2b\
+\x69\xf8\xbc\x99\x9a\x0c\x95\x9f\x3d\x3a\x8e\xbc\x92\x09\xdf\x97\
+\x53\x6e\x2b\x05\xac\xdf\x0c\x80\x71\x7f\x94\x1a\x87\xbd\x30\xf3\
+\x9f\x47\xff\x8e\xc7\x7a\x9f\x67\x45\xdb\x20\x0e\x7c\xf6\x19\xc3\
+\x93\x83\x2c\xbe\xff\x7e\xe6\xd5\x4d\xe3\xdc\xb1\xbd\x44\xbb\x0e\
+\xb0\x64\x4e\x1e\x8b\xea\xa7\x0d\x91\x73\xee\x7e\x0a\x48\x07\x94\
+\x5b\x0f\xa0\xab\xc9\x58\x93\xa6\x5d\x6a\x8e\xe3\x3b\x7c\x89\x1e\
+\x17\x04\xfc\x1e\x0a\xf2\x8b\xe8\xe8\x74\x93\x9d\x53\xc0\xb3\x7f\
+\xfb\x34\x87\x0e\x1d\xe1\x8b\x3d\x8d\x3c\xff\xe8\x24\x86\x0d\x9f\
+\xf0\x98\x29\x7b\xe2\x68\xc0\x76\xcb\x01\x64\x49\xa8\x72\x24\xd2\
+\xcf\x85\x0b\x70\xb1\x95\xf4\x90\x8b\x7c\x2d\x48\x47\x57\x0f\xfd\
+\x2e\x1f\x9d\x9d\x7d\x09\x3e\x2b\x4b\x9e\x5c\x42\xf3\xe1\x66\x22\
+\xfe\xf3\xbc\xfc\x9d\x39\x69\x49\x39\x13\x9e\x03\xb2\x00\xf3\x2d\
+\x05\xd0\x0f\x3e\xa7\x4a\x51\xd7\x3b\x92\x25\x42\x65\x5e\x94\x07\
+\x94\x3e\x06\xc5\xad\x9c\x3c\x73\x86\x68\x34\x8a\xd3\xe9\xc3\xe3\
+\x09\x60\xb3\xd9\x98\x3b\x67\x2e\x1b\x36\xac\xe2\xae\xd1\x39\xcc\
+\x98\x3a\x6d\x96\x39\x77\xda\x9d\x40\x0a\x20\xdd\xd2\x21\x16\x7d\
+\x3b\x97\x9b\x0a\xf4\x96\xe2\x64\x8d\xb8\x2b\x80\x39\xa9\x94\xf6\
+\x0e\x27\xbd\xbd\x9d\x78\xbd\x41\xfa\xfa\xbc\xc4\xe3\x1a\xa5\xb7\
+\x95\x30\x7c\x44\x35\x3b\xb6\xae\x62\xc9\x43\x93\x93\x32\x06\xd5\
+\xbe\x2c\x49\xa6\x5c\xc0\x72\x4b\x01\xf4\x9e\x2d\x1e\x3d\xd2\xf3\
+\xda\x59\x4f\xaf\xe8\x77\xfb\x49\x32\xe7\xa1\xc6\x0b\xb9\x74\xe9\
+\x2c\x1e\x8f\x0f\x97\xeb\xcf\xf6\x03\x70\xef\xbd\xb3\xe8\x73\x74\
+\x61\x57\x7a\x78\xe4\xc1\xfa\xb1\xd6\xe2\xf9\x8f\x03\x69\x80\x7c\
+\xcb\x00\x00\x4d\x3b\xf5\xcb\x55\x7d\x21\xc7\xb6\x76\xaf\x93\x70\
+\x20\x4c\x8a\x6d\x04\xe7\xce\x9d\xc5\xeb\x75\x25\x1c\xc4\xe1\xf0\
+\x12\x89\xc4\x48\x4a\xb2\x24\x20\x66\x73\xe4\xc8\x1e\x1e\x9e\x33\
+\x86\x82\xb2\x71\x4f\xa5\xd9\xf2\xcb\x80\x24\xbd\x12\x93\x5a\x4e\
+\xa6\x77\x28\x63\xbc\xa3\x52\x1f\x70\x54\x5b\xe6\xee\x2e\xa1\x08\
+\x50\xbe\x6e\x00\x80\x68\xd4\x7f\x76\xe9\x05\x5f\x9f\xc7\xd9\xdf\
+\x4f\xaa\xad\x82\x96\xd6\xfe\x44\x0a\x2d\x78\x3c\x6e\xdc\xee\xc0\
+\x65\x08\x21\x60\xf4\xe8\x91\x98\xcd\x32\x5e\xe7\x31\x9e\x7d\xf2\
+\xa1\xc2\xfa\xc1\x35\x6f\xb9\x66\x94\xae\x88\xcd\xbc\x6f\x1f\xdf\
+\x7f\xa9\x35\xe5\xe7\xaf\x35\xd9\x97\xbd\xb4\x36\xfb\x0f\xbf\xfa\
+\x78\xc2\xec\xba\xfd\x33\x2c\xcc\x07\x6c\x80\xfc\xb5\x9e\x46\x01\
+\x0b\x23\xfe\xe5\xb7\x23\xa6\xac\x10\x4f\x3e\x7e\x50\xdc\x57\xff\
+\x5b\xb1\x60\xe1\xc3\xe2\xcd\x37\x3f\x14\x9f\x7c\xd2\x24\x0e\x1d\
+\x6a\x15\x81\x40\x58\xfc\x59\xfb\x9a\x0e\x89\x1f\xff\xf8\xa7\xa2\
+\xe5\xbc\x10\x8b\x9f\x7c\x57\xb4\x7c\xf1\x92\x10\xde\xef\x0a\xe1\
+\x79\x58\x88\xde\xe9\x42\xb4\x8f\x14\xc2\x31\x5b\x88\x4b\x9b\xc4\
+\x6f\x6e\xcf\xdc\x0b\xdc\x0e\x24\x7d\x6d\xa7\x51\x31\x1c\xb9\xaf\
+\x82\x8c\x5f\x85\x57\x34\xeb\xbe\x73\xb1\x0b\x0e\x07\x45\x85\x53\
+\xe9\xe8\x80\xd6\xd6\xc3\xb8\xdd\x6e\xa3\x95\x3c\xe8\xba\xa0\x66\
+\x54\x35\x56\x6b\x12\x8e\xae\x23\x3c\xf8\x60\x3d\x6f\xad\x6b\x43\
+\xf8\x1a\xc0\xb5\x0f\x7c\xdd\x10\x8e\x43\x7f\x2b\x64\xb7\x33\xaf\
+\x7e\x76\xcd\x44\x99\x45\x2b\x0b\x18\xdf\x57\xce\x28\x77\x39\x35\
+\xff\xe3\x0a\x6a\x7a\xcb\x29\x37\xd2\x91\xb8\x4a\xa6\xbf\x50\xac\
+\x35\xa2\x52\x88\x42\x85\x96\x92\x51\xa9\x64\x0d\xaa\x52\x07\x97\
+\x8c\xcf\x29\xce\x1c\xf6\x72\x85\x3d\xb9\xc0\x1d\x35\xff\xe0\xfd\
+\x0e\x0a\x33\x32\x28\x2a\x9e\xcf\xe1\x23\xcb\x29\x29\x19\x42\x4a\
+\x4a\x0a\x4e\x67\x32\x69\x69\x29\x64\x65\xd9\x19\x37\x6e\x1c\xbb\
+\x76\x6f\xe6\xd9\xef\xfd\x80\xd5\xeb\x17\xb3\x75\x77\x07\xb3\xa6\
+\x7b\x20\x68\x02\x64\x10\x16\xf0\x6f\xa1\x6c\x5a\x6d\xf2\xea\x93\
+\x3b\x5e\x2b\x7c\xa8\x26\x2e\xe9\x3a\x48\x02\x84\x00\x74\x00\x88\
+\xc9\x9a\x7f\xc7\xd1\x3d\x4f\xec\x74\xbc\xb2\xc6\xcf\x69\x20\x06\
+\x70\xcd\x3b\xb1\x36\x5a\xb2\xe9\x92\xb2\x98\xc1\xd5\xd3\xa5\x92\
+\x41\x13\x95\xa2\x82\xc1\x52\x45\x9a\x8d\x11\x69\x50\x6c\x01\xeb\
+\x25\xb0\x9c\x02\x7a\x88\x85\x82\xcc\x7f\xfe\x21\xfa\xdb\xea\x19\
+\x39\xa4\x84\xd3\x2d\xef\x52\x32\xb8\x9f\x59\xb3\x1e\xa2\xa8\xa8\
+\x90\xe2\xe2\x5c\x2a\x2a\x8a\xe8\xef\xf7\xf0\xeb\x5f\xff\x9a\x57\
+\x5f\xfd\x09\x3b\x9b\x22\xac\x58\xfe\x13\xfe\xfd\x07\x5b\x49\x4d\
+\x96\x41\x55\x40\x48\x20\x03\xf2\x0b\x74\xff\xeb\x32\x4c\x3f\x14\
+\xe4\x16\xa7\x80\x0a\x08\x19\x74\x09\x74\x1d\x92\xf3\xe1\x74\x31\
+\xff\x34\xf7\xcd\x95\xaf\xf7\x6a\x2f\x03\x4e\x21\x84\x2a\x73\x95\
+\xce\xc6\x6d\x6f\x98\x7f\xb9\xec\x3f\xcc\x1f\xde\xf9\xb8\x69\x59\
+\xb0\x4a\x5a\xda\x68\x13\x0b\xb6\x11\xab\xfc\x9c\x10\xdb\xf0\xf9\
+\x5b\xf0\x39\x74\xe2\x9e\x10\x16\x93\x8f\x9f\x3e\xb3\x1d\x67\xec\
+\x1c\x0e\x87\x8b\xca\xca\x05\x9c\x38\xe9\xe6\xf0\xe1\x2f\x08\x06\
+\x43\x89\xc2\x7d\x38\x9d\x5e\xf2\xf2\xb2\xc8\xce\xce\xa5\xb5\xf5\
+\x04\x75\xd3\x33\xc8\x1d\xbc\x90\x15\x9b\x0a\xc1\xaa\x03\xd2\x00\
+\x40\x2c\x06\x39\x1d\xa4\xd5\xdc\x8f\xef\xc3\x56\x84\xcf\x05\x2e\
+\xf7\x80\xdd\x9e\x84\xbd\xe0\xec\x84\xac\x24\xcc\x16\xa5\x08\xc8\
+\x03\xac\xd7\xed\x81\x1e\xcd\x54\xc6\x88\x4a\x48\x7a\x17\x44\x23\
+\x9a\x3a\x8c\x48\xa0\x8e\x88\x6f\x1a\xe1\xd0\x64\xc2\xe1\x5a\x7c\
+\x81\xc9\xf4\xf6\xcf\xa6\xab\xe3\x3e\x4a\xf2\x2b\xa8\xa9\xbe\xc8\
+\xd9\xee\x1e\xd0\xac\xd4\x8c\xfa\x1e\xdb\x77\xec\xe3\xec\xd9\xe3\
+\x44\xa3\xda\xe5\x0d\x2d\x04\x14\x14\xe4\x71\xfe\x7c\x1b\x16\x33\
+\x3c\xb1\x78\x12\x8d\x67\xa6\xe2\xee\x56\x40\x11\x20\x64\xc0\x0a\
+\xae\xfd\xd8\xa6\xd5\xa0\x1c\xb6\x11\xf6\x09\x90\x4d\x20\x94\x2b\
+\xc6\x04\x71\x9d\xb8\x86\x04\xd8\x00\xd3\x75\x00\xbf\x6b\xf5\xad\
+\x64\xe5\x36\xe0\x69\xd0\xed\xe8\xda\x1d\x40\x1a\x12\x1a\x12\x31\
+\x24\x29\x86\x9c\x70\x5c\x4f\x49\x00\xe5\x13\x0c\x15\xf0\xd4\x3c\
+\x2f\x9a\xb5\x8d\x8e\x9e\x5e\x52\x6d\xc5\x8c\x1c\xf5\x22\xab\x56\
+\xaf\x67\xff\xbe\x44\x6a\x21\x95\x48\x04\x34\x2d\x4e\x44\x95\x00\
+\xa8\xae\x32\x31\xb4\x7a\x1e\xcb\x56\x95\x81\xa2\x5f\x19\x45\x7f\
+\x27\x52\x69\x1f\xa9\x65\x75\x78\x8f\x78\x41\x91\x07\xe0\x84\x64\
+\x5c\x65\xb8\x32\x11\x12\xc0\x75\x00\x5b\xe2\x34\xb4\x7c\xbc\xb6\
+\x8b\xe0\x4c\x90\x47\x00\x80\xd0\x00\x8c\xb8\x07\x2c\x21\x90\x64\
+\x0d\x55\x15\x0c\xbf\x2d\xc6\xb7\xa6\x77\x70\xd1\xd9\x83\xab\xdf\
+\x4d\x6e\x4e\x35\xd5\xa3\x5f\xe0\xa3\x35\x9f\xf2\xf6\xdb\xbf\xe3\
+\x0f\x6f\xfd\x1b\x3b\x77\x35\x52\x55\x3d\x89\xb8\x0e\x16\x0b\x2c\
+\x7a\xa0\x86\xe3\x5d\x75\x89\xc1\x4f\x01\x8b\x91\x82\x50\x20\x7c\
+\x00\xfb\xcc\xfb\xf0\xed\x8d\xa3\x6a\xc6\xf7\xe9\x97\x6d\x40\x30\
+\x60\x10\xff\x2b\x40\x00\x9c\x6f\x1f\x3a\xb3\x92\xcd\xe7\x41\xaa\
+\x37\xf8\xc4\xf5\xe7\x30\x01\x88\xcb\x18\x44\x63\x32\x0b\x67\x78\
+\xc9\xcd\xbf\x40\xb7\xc3\x8b\xc7\xe5\x49\x40\x0c\xa3\xfe\xc1\xd7\
+\xe9\x0f\xe6\xd1\xb0\xf5\x00\x77\xdc\x39\x9f\xf4\x9c\x42\xbc\x01\
+\x00\x28\x29\x96\xf8\xd6\x9c\xfb\x79\x73\x7d\x25\x42\x05\x24\x40\
+\xb2\x80\xfb\x14\xd6\x61\x32\x96\x4b\x85\x78\x2f\x86\x41\xb9\xaa\
+\x85\xf4\x01\x20\x21\xfe\xf2\x26\xd6\xd6\x06\xf8\x53\x70\xfd\x27\
+\x2a\xfa\x50\x90\x54\xc0\x20\x37\x9e\xfe\xb5\x69\x40\x3c\x2e\x91\
+\x69\x17\xdc\x7b\x57\x37\xed\xee\x76\xfc\xfe\x30\x3e\xb7\x1f\x59\
+\xb7\x31\xf5\x9e\x67\x79\xf4\x99\x37\x18\x31\xf6\x5e\x3c\x7e\xf0\
+\x87\x21\x1c\x03\x93\x02\xb3\x67\x0c\xc6\x94\x31\x87\xbd\x07\x6d\
+\x60\xd1\x07\x8a\x54\x55\xb0\x9e\x24\xbd\xbc\x16\xef\x6e\x97\xd1\
+\x46\xd2\x55\x06\xfd\x2b\x00\x38\x0b\x5f\xae\xdc\xbe\x67\x0b\xe7\
+\xf3\xc0\x5c\x00\x42\xbf\xaa\x70\x0c\x10\xae\x80\x20\x11\x8e\x2a\
+\xd4\x4d\x08\x52\x71\xfb\x59\x2e\xf5\xf4\x12\xf2\x47\xf0\x7b\x42\
+\xf8\x5c\x41\xa2\x41\x1d\xbf\x37\x46\x82\xeb\xb2\x3d\x01\xd0\x04\
+\xe4\xe5\xc0\x82\x87\xea\xf9\xe3\xe6\x1a\x02\x1e\x19\x64\x01\x58\
+\xc0\x73\x9c\xf4\x85\x33\x89\x1d\xb2\xe2\x77\x19\x0f\xd0\x68\x21\
+\x00\xbe\x0a\x00\x88\x2f\xef\x8a\x2c\xd7\xb7\xee\xc2\x24\x57\x22\
+\x84\x0e\xd2\xd5\x09\x5c\x65\x03\x44\xd7\x25\x6c\x49\x82\x45\xb3\
+\xfa\x70\x87\x2f\xe0\xf6\x04\x09\x07\x55\x42\xbe\x28\x7e\x6f\x98\
+\xa0\x2f\x42\x30\xac\x13\x8c\x42\x20\x02\xa1\x84\x25\x09\x26\x8e\
+\xb5\x93\x7d\xdb\x1c\xd6\xef\xc8\x00\xb3\x00\x4c\x10\x70\xa0\x94\
+\x6b\xa4\xa5\x8e\xc1\x73\xd0\x05\x66\x05\x84\x6c\x18\xc4\x0d\x00\
+\x88\xfd\x3a\xdb\x8e\xbd\xf7\x6e\xbb\xe4\x06\xd9\x14\x42\xe8\xe6\
+\x6b\xfb\x1f\xae\x6b\xa5\x48\x54\xa1\xa6\x32\xca\x94\x71\x6d\x74\
+\x3a\x7a\x2e\x17\x1d\x0a\x44\x09\x25\xae\x41\x6f\x84\x80\x37\x01\
+\x13\x1e\x00\xf0\x27\x0c\x60\x92\x60\x42\xcd\x18\xd6\x37\x8d\xc0\
+\xe3\x30\x81\x0c\xe8\x32\x78\xf7\x90\x71\xdf\x4c\x42\xfb\x22\xe8\
+\x9a\x74\xd3\x00\x84\xa1\x7f\x6d\x73\xeb\xa7\x34\x76\x63\x49\xf1\
+\xa3\xd0\x81\x10\x56\x23\xc6\x2b\x69\x5c\x0b\x02\xe8\x32\xf3\xa6\
+\xba\x89\xcb\x2d\x38\x5c\x5e\x42\xfe\x68\x02\x24\x46\xa2\xf8\x84\
+\x13\x10\x41\x8d\x70\x1c\xbc\x1e\xc1\xd6\x6d\x2e\x7e\xf1\xc6\x49\
+\x96\x35\x5c\xe4\x54\x4f\x06\xf1\x28\x80\x34\x30\xcc\xce\x53\xa4\
+\x4c\x2b\x45\x8a\x56\xe0\x6a\x0f\x82\x6c\x0c\x31\xd2\x8d\x01\x00\
+\xfa\xf2\x08\xef\x38\x56\x6e\x88\xc8\x6a\x39\xc9\x96\x35\x58\x94\
+\x36\x84\x30\x27\xac\x60\xe8\xba\xc1\x56\xe3\x12\x85\x39\x1a\x93\
+\x47\xb5\xd3\xd9\xdf\x4e\x20\x01\x10\x0e\xc4\x2e\xb7\x52\xc8\x1f\
+\x43\x4d\xdc\x77\xb5\xfa\xf8\x68\xf5\x69\xd6\xed\x6e\x21\xb5\x58\
+\x67\x74\x5d\x15\x4a\x65\x2d\xd1\xb0\x74\xa5\x24\x35\x0e\x9c\x22\
+\xad\x7c\x02\xce\x5d\xce\xab\x86\x99\x1b\x06\xe0\x1c\x1c\x6c\xd8\
+\xb4\x69\x0f\x87\x73\x90\x93\xd3\x48\x35\x37\x60\xb7\x36\x21\x4b\
+\x2a\xba\x6e\x06\xfd\xba\x5f\x24\x03\x42\x66\xde\x14\x1f\xd9\x59\
+\xa7\xe8\xea\x73\x10\x4c\x40\x44\x82\x2a\x22\x18\xe5\xe8\xfe\xf3\
+\x2c\xdf\x7a\x92\x6e\x1b\xcc\x9e\x57\xce\x92\xb9\x95\xfc\xc3\xec\
+\x74\x46\xcd\xb8\x87\xd5\x27\x6a\x40\x52\x41\x18\x29\x38\x0e\x90\
+\x39\x79\x08\xea\xde\x38\x21\x9f\x06\xd2\x8d\x0f\xb1\x21\xd4\x95\
+\xae\xe8\x07\xb1\xed\x97\xc0\x32\x0f\x89\x08\x36\xcb\x61\x72\x52\
+\x36\x93\x6a\xbd\x88\x40\x42\xd7\x2d\x09\x2b\x08\x71\x65\xa8\xb5\
+\xb8\x84\xdd\x26\xa8\xbf\xb3\x07\x77\xa0\x8d\x60\x30\x86\x1e\x53\
+\x69\x3c\x76\x89\x0d\xed\x21\xcc\x95\x25\x0c\xb9\xe3\x36\x32\x73\
+\xb3\xb1\x24\x59\x29\xcd\x82\x05\xb5\x0a\x7b\x7d\xf7\x10\xee\x17\
+\x20\x63\x6c\x66\x37\xd6\xe1\x66\x6c\x79\x63\xe9\x69\x76\x82\xa2\
+\xdc\x5c\x02\x80\xd8\x0e\x6b\xf7\xac\xdb\xd8\x42\x60\x3a\xc8\x29\
+\xa0\x9b\x31\x2b\x6e\x72\x52\x1b\x29\xcc\xd8\x43\xb6\xbd\x95\x14\
+\xab\x1b\xb3\xa2\xa2\xeb\x32\x30\x00\x12\x55\x65\xc6\x0f\x0f\x33\
+\xb4\xac\x95\xf6\xee\x4b\x34\x1d\x3f\xce\x41\x0f\xa4\x96\x54\x91\
+\x9a\x99\x4b\x94\x24\x9c\x11\x99\xbe\x10\xe8\x02\xa6\x94\x41\x56\
+\xe5\x34\xfe\xb3\xb1\x1c\x94\xb8\xb1\x81\x65\x88\xb4\x92\x33\x67\
+\x36\xfe\x2d\xfd\x68\x9a\x31\x03\x88\x1b\x06\x40\x03\xff\xba\x83\
+\x87\x37\xb2\xc5\x01\xa9\xb5\x20\xd4\xcb\x10\x08\x85\x64\x8b\x83\
+\xbc\xb4\xe3\x94\xe5\x7d\x49\x55\xd1\x7e\x72\xec\x7d\x68\x9a\xe9\
+\x72\x1a\x42\x97\x90\x25\x99\xb9\x53\xfa\x48\x49\xda\x41\x4f\xf7\
+\x51\xec\xb2\x8c\xac\xd9\xf0\x85\xcd\xb8\x82\x12\x7d\x7e\xe8\x09\
+\x80\x2f\x06\xe9\x56\x58\x34\x23\x93\x4d\xbe\x85\xb8\x7b\x74\x90\
+\x8d\xcd\xdc\x7d\x0a\xfb\x84\x5c\x4c\xbe\x02\x7c\xed\x01\x50\x64\
+\x74\x9d\x1b\x07\x00\xf4\xad\x2a\xeb\x1d\x1f\x6d\xd1\x91\x1e\x00\
+\xc4\x55\x5b\xd9\x04\xba\x09\x49\x80\x49\x56\xb9\x2d\xbf\x95\xa2\
+\xac\x2e\x40\xba\x9c\x46\x4c\x95\xc9\xcf\x8a\xf3\xf7\xdf\xee\xe2\
+\xe9\xfb\xce\x20\x3b\x0e\x13\x71\xfa\xf0\x79\xc1\x1d\x80\xfe\x20\
+\xf4\x25\xec\x0c\x83\xaa\x43\xed\x60\x28\xbf\x63\x0a\x1f\x34\x66\
+\x83\xa2\x0d\xa4\x10\x0d\x21\x9b\xdb\xc8\x9e\x3d\x17\xc7\x3e\xa7\
+\xb1\x8f\x6e\x0e\x80\x53\xd0\xb4\x76\xcb\xe6\xcf\x39\x6a\x87\xe4\
+\x52\x10\xda\xb5\xa7\x44\x24\xd0\x15\x24\x21\x51\x9a\x7f\x89\xe1\
+\xc5\x6d\x58\x4d\x71\x84\x2e\xa3\xaa\x0a\xe8\x32\xa3\x87\x85\xb8\
+\xbb\x62\x17\xd1\x8b\x47\x08\xb9\xe2\x97\x01\x5c\x41\x70\x18\x10\
+\x9e\x28\x24\x29\xb0\x60\x7a\x16\xcd\xb1\x69\xa8\xde\x08\x24\xdb\
+\x20\x73\x10\x98\x6d\x98\x52\x53\x71\x74\xc5\x20\x2e\x00\xe9\xe6\
+\x00\x80\xd8\x07\xee\xe0\xfb\xc1\x95\x9f\x43\xd2\x44\x10\xea\xb5\
+\xe7\x13\xdd\x58\x32\xba\x02\x9a\x4c\x76\x9a\x97\xb1\xe5\x6d\x8c\
+\x2c\xeb\x22\x33\x35\x42\x54\x55\x12\x36\x33\x71\xb8\x83\xfc\xd8\
+\xa7\x84\x3a\x7b\xf0\x7b\xc1\x13\x34\x20\x42\xe0\x8e\x80\x06\x4c\
+\x28\x01\x7b\xc9\x04\xce\x47\x66\xe1\xef\x1e\x43\xe7\xd6\x4c\xce\
+\xfc\xa2\x89\x63\x9b\xdf\x25\x7f\x46\xb1\x71\x98\x13\x37\x0d\x20\
+\xf6\xc3\xa6\xa6\x8f\xb7\xb6\xe1\xa9\x05\x93\x0d\x84\x00\xfd\xda\
+\x1d\x00\x92\x01\x22\x93\x64\x89\x91\x9f\xe9\x65\x5c\x45\x27\x43\
+\x8b\x9d\xc8\x44\xb1\xd8\x14\xea\xc6\x9c\x40\xe9\xdb\x4d\xa0\x37\
+\x86\xcb\x3f\x00\xe0\x4c\xb8\x3f\x0a\xe7\x9d\x3a\x0d\x9f\x1d\xe3\
+\x74\xf3\x21\x36\xfc\x7e\x03\x9d\x8d\x1f\xe1\x09\x6c\x47\xa9\x3a\
+\xcd\xc8\x67\x06\x53\x51\x99\x05\x9a\xb8\xee\x30\x67\xe2\x06\x14\
+\x01\xc7\x1f\x5b\x5b\xdf\xbf\x7b\x9f\xf2\x13\x79\xe6\x04\xe8\x6b\
+\x04\x6c\xc6\xf6\x15\x46\x5b\xe9\x20\x19\x11\x9b\x52\x13\xce\xc0\
+\x9c\x91\xcb\xb0\xac\x0c\xf2\xd2\xd2\x69\xfa\xc2\x47\x2e\x21\x86\
+\xf8\xd7\x71\xf4\x4c\x19\xb6\xbc\x5a\xfa\xed\xe0\x08\xc0\xa6\x9d\
+\xad\x9c\xdc\xde\x40\x41\x72\x88\x39\x63\xcb\xb9\x9d\x22\x86\xde\
+\x15\x80\x98\x15\x34\x19\x62\x3a\xa8\x3a\x24\x2b\xc8\xc6\x88\xdf\
+\x14\x00\xa0\x7f\xae\xb3\xae\xfd\x83\x86\xa5\xa5\xf5\x77\x5b\x50\
+\x76\x80\x26\x81\xd9\x0e\xd6\x0c\x90\xed\x10\x4d\x87\x58\x36\x44\
+\xd2\x88\xf4\x26\x13\x71\xda\x89\xb8\x34\x02\xdd\x1d\x44\x7b\x4e\
+\x90\x2f\x5c\x68\x85\xe9\x4c\x9d\x1e\xc1\x7f\xf2\x23\x3a\xcf\x55\
+\x62\x32\x65\xd2\xba\x7d\x1d\x7a\xcb\x26\xbe\xf3\x48\x1d\x4b\x9e\
+\x5a\xc8\x97\x07\x4e\x93\xd2\xb9\x01\xcc\x49\x20\x19\x2f\xfd\x16\
+\x01\xe9\x99\x70\xd2\x83\x27\xa6\xc5\x00\x71\xb3\x00\x74\xc3\xb1\
+\x95\x6b\xd6\x6d\x59\xba\x6a\xd2\x1c\xea\x7e\x08\xd1\x30\x38\xad\
+\x78\x9b\xfb\xf0\x9c\xe8\xa7\xbb\xad\x4f\xef\x3d\x7f\x40\x04\x3b\
+\x1c\x42\x8e\xc7\x31\xa7\x98\xb1\xa6\xd9\xb0\xe7\xa6\x91\x94\x93\
+\x9a\xb8\x4f\xa3\xfc\x02\x14\x07\x25\x52\x2f\x6e\x62\xf9\x09\x97\
+\x7c\xe0\xd0\x10\x79\x52\xf6\x69\x1e\x7b\x6a\x01\x93\x26\x4f\x02\
+\xe0\x68\xe3\x41\xca\x76\xb7\xc5\xf5\x54\x13\x42\x12\x80\x40\x42\
+\x10\x0c\xb5\xaa\xef\x6d\x3d\xd9\xba\x56\xd5\x3f\x05\x22\x80\x76\
+\x53\x00\x80\xf6\xd3\x58\xec\xef\x76\x3e\xfa\xca\xd9\xf1\x55\x23\
+\xa7\xfa\x62\x31\xf9\x44\x67\x47\xcf\x85\x90\xaf\xab\x17\xe1\x08\
+\x81\x5f\x87\x88\x34\x10\xba\x90\x9d\x00\x20\xb8\xf6\x2a\x19\x27\
+\x7c\xc1\xe9\xe4\xec\x82\xb1\x0b\x0b\x86\xd5\x8f\x89\x69\x92\x0c\
+\x02\x80\xed\x4d\xcd\xdd\x1f\xfe\x69\xef\xef\x81\x90\x51\xa4\x00\
+\x24\x01\xaa\x06\x3d\x40\x37\xe0\x00\xa2\xd7\xfd\x2f\x24\x49\x12\
+\x5f\x21\x33\x90\x09\xe4\x01\x69\x46\x3d\x2a\x10\x31\xae\x71\x40\
+\x07\x04\x37\x20\x49\x92\x93\x8b\x8a\x6a\xa7\xe4\xe4\x14\xd4\x8e\
+\x1f\x3f\x66\x54\x51\x51\x41\xf6\xfb\xef\xaf\x68\x38\x77\x6e\xfb\
+\x7a\xa0\x13\x08\x72\x45\x02\x88\x1b\x60\x01\x20\x26\x12\xba\x59\
+\x00\x23\x35\x2c\x86\x25\x40\xc3\x28\xdc\xb0\x30\x7c\xa3\x9f\x95\
+\x02\x64\x00\x69\xc6\xbd\x00\x1c\xc6\x93\x0e\x73\xad\xc4\xd5\x0f\
+\x48\x08\x81\x89\x9b\x57\xdc\x70\x88\xff\xbb\xe2\x46\x2b\xf8\x01\
+\x8b\x91\x30\x40\xd4\x48\x55\xe7\x2b\x64\x24\xf0\xd7\xab\xff\x06\
+\x50\x1c\x59\xce\xc5\x04\x3a\xad\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x0c\x82\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x0c\x49\x49\x44\x41\x54\x78\x5e\xed\x9a\x09\x6c\x5c\xd7\
+\x79\x46\xcf\x7d\x6f\x36\x0e\x57\x0d\x49\x71\xa7\x48\x8a\xa2\xa8\
+\x8d\xda\x29\x53\x92\x15\xdb\x32\x92\xc8\x52\x6b\x3b\x4e\x60\x3b\
+\xf1\x16\xbb\x71\xd3\x24\x6d\xaa\xd6\x89\xe3\xb4\xae\x61\x23\xb5\
+\x93\x36\xa8\x8d\xb8\x69\xd3\xd6\x6d\xed\xa2\x0b\xd2\x16\x69\x6b\
+\x18\xa9\x9b\x5a\x4b\x97\xd8\xb2\x4d\x59\x5c\xc4\x4d\xa4\xb8\x2e\
+\x22\x87\x1c\x0e\x67\xc8\x59\xdf\x72\xab\xc1\x7b\xc6\x33\x08\xa6\
+\xf0\x08\x8c\xd2\x00\x1d\xe0\xc3\xff\xee\x70\x66\xee\x77\xfe\xe5\
+\x0e\xe6\x81\x42\x4a\xc9\xcf\xf3\x43\xf9\x19\x1b\xf8\x7f\x00\xd7\
+\x4a\x80\x33\x67\xce\x70\xf2\xe4\xc9\x0f\x05\x20\x04\xdc\x77\x84\
+\xc7\x86\x66\x68\x7f\x7b\x90\xb3\xa6\xf9\xd3\x05\x78\xfe\xf9\xe7\
+\xb9\xf9\xe6\x9b\xff\x77\x80\x48\x24\x42\x67\x67\xe7\x87\x02\xd8\
+\x55\xc7\xbe\x0d\x45\xb5\xcf\xb6\x34\x04\xd4\x86\xbc\x8e\x1f\xbc\
+\x7c\x8a\x27\x7a\xc7\x18\x5a\x73\x00\xc7\xdb\xda\xb5\x90\x5b\x45\
+\xdc\x7b\x23\xdf\x69\xbd\xeb\x05\xf7\xd1\x2f\xbd\xa3\xdc\xf3\xc5\
+\x3f\xfe\xe4\x4b\x5f\x2b\xed\x7c\xf2\x7e\x9e\x2d\x2d\xc9\x29\x64\
+\xeb\x7d\x8f\xb2\xf9\xee\x87\x59\xbf\x7b\x0b\xc2\x25\xfe\xcf\xcd\
+\xc0\xb1\xdd\x3c\xbc\xf7\xd0\xf1\xb6\x9a\x1d\x77\xa0\xa8\x6e\x6a\
+\xf6\x7c\x9e\xfd\x9f\x1d\xf0\xdf\x7e\xdf\xaf\x3f\xd1\xf8\xe9\xe7\
+\x66\x1e\x7f\xf2\x99\x3f\xf9\xe4\xc3\x5f\xff\xf3\x63\x27\x5f\xee\
+\x2d\x7f\xe4\xec\xbc\x72\xcb\x77\x7f\xc8\x8e\x2f\xfc\x16\x95\x47\
+\x8e\xe2\xaf\x58\x07\xca\xcf\x0e\x60\x7d\x01\xc5\x27\x0e\xf8\x7e\
+\x77\xff\x27\x5e\x40\x08\x27\xb9\x3f\x1e\x55\xf8\xc2\x5b\x0f\xf2\
+\x3b\x8f\x3c\xe0\xfb\xe5\xa3\x95\xdc\xb4\xa3\x9c\x27\xef\xdb\xce\
+\x6b\x4f\x1f\x08\xfc\xf0\xc5\x07\x8e\x3d\xff\xcd\x27\xbe\xf1\xd0\
+\xe3\x7f\xf8\x46\xcb\x67\xff\x6e\xda\x7b\xeb\x4b\x17\xd8\xf1\x95\
+\x3f\xa2\xea\x63\xf7\x93\xbf\x69\x13\x8a\x47\xbd\x6e\x00\x77\x1f\
+\xe2\x99\xfd\xb7\x3d\x56\x56\x50\xda\x08\x80\x29\x25\xdf\xfa\xd7\
+\x29\x9e\x7d\x6d\x92\xef\x7f\x71\x0b\x07\x9b\xd6\xd1\x3b\x11\xa7\
+\xac\xc4\x4f\xca\x54\x88\x6a\x2e\xdc\xb9\x79\xb4\x6c\xab\xe2\xe1\
+\x3b\xb7\xf3\xd2\xd7\x0f\xfb\x4e\xff\xd9\xbd\xbb\xfe\xfa\xbb\xbf\
+\xf1\x2b\x5f\x7d\xfa\xf7\xff\xea\xd6\xcf\x7d\xaf\x3f\x70\xf4\x4f\
+\x27\xd8\xfa\xdb\xff\x42\x5e\xd3\x0d\x59\x9f\x42\xd9\x68\x67\x1d\
+\xfb\x3e\x72\xa0\xe1\x73\xdb\x8f\x7e\x0d\xa4\x64\x21\xae\xf3\xc8\
+\x2b\xc3\x6c\x29\xf7\xf1\x8f\x57\xcd\x67\x0c\x07\x63\x30\x35\x9f\
+\xa6\xa1\x2e\x17\xb7\x02\x52\x82\x24\x13\x05\xa6\x84\x98\xa6\x22\
+\x85\x4a\x45\x4d\x39\x55\xb5\x65\xdc\xf1\x31\xa9\xf8\x54\x59\x71\
+\xe6\xc7\x43\xbf\xf8\x9b\x5f\xee\x5c\x64\xf9\x52\x27\x90\x58\x73\
+\x00\x55\x41\x7c\xe6\x88\x78\x61\xff\x9d\xdf\x76\xab\x6e\x1f\x52\
+\xea\x7c\xf3\xf5\x29\x76\xd6\xe4\xf0\x91\x2d\x01\x82\x31\x13\x13\
+\x85\x50\x02\x22\x31\x9d\x3c\xbf\x0b\xa1\x60\x9b\xff\x49\x51\x90\
+\x32\x05\x69\x53\x32\x9d\x21\x8f\x8d\xf6\x01\xe6\x4f\xa5\x02\xc7\
+\xf7\xf0\xe0\xee\xb6\x63\x87\x6a\xb6\x1d\x47\x1a\x29\xc0\xa4\x7b\
+\x3a\xce\x73\x27\x6a\x18\xbe\x92\xe2\x42\xcf\x22\x89\xb4\x89\xdb\
+\xe3\xc2\x23\x24\x6e\x97\x00\xa4\x65\x56\x38\x86\x59\x05\xc4\xab\
+\x4a\x2e\x5c\x0a\x19\x2c\x0f\x5f\x00\x52\x6b\x0e\x50\x5a\x40\xe0\
+\xf6\x36\xdf\x73\xad\x77\x3d\x8f\xd4\x13\x48\x69\x10\x4b\x19\x20\
+\x04\x85\x85\x3e\x36\xe7\xfa\x69\x6a\x2c\x42\xd7\x25\xb1\x58\x1a\
+\x21\x04\x2e\x21\x2d\x93\x16\x07\x12\x81\x14\x0e\x10\x38\x50\x3e\
+\x61\xd0\xd1\xdd\x37\x81\x11\x9b\x5a\xf3\x19\x10\xc0\x3d\x87\x78\
+\x7a\xf7\xc7\xbf\x52\x9e\x57\x58\x86\xd4\x93\x48\x99\xc9\x7e\x92\
+\xed\x95\x39\xe8\x52\xa0\xda\xbd\xae\xba\x05\x9e\x22\xaf\x6d\x4c\
+\x02\xd8\xc6\xad\xb5\x04\x10\x58\x10\x08\x7b\x2d\x99\x09\x46\x09\
+\x4f\xf7\x0d\x02\xf3\x6b\x0e\xd0\xb2\x81\x3d\x47\x5a\x1b\x1e\xdd\
+\x76\xd3\x97\x31\xd3\x51\x90\x66\x06\x80\x73\xa3\x09\xf6\xd4\x94\
+\x22\xc0\xca\xf6\xfb\xc6\x6c\x6c\x67\x6d\x1b\x07\xa4\x03\x04\xd2\
+\x79\xbe\x67\x78\x81\x23\xd5\x97\x77\x2f\x24\xdc\x4d\xdd\x63\xda\
+\xcc\x9a\x01\x78\x5d\x28\x77\x1f\x16\x2f\xb6\x7e\xe2\xdb\x1e\xc5\
+\x88\x23\x8d\x24\x90\x01\x90\xbc\x3b\xa5\xf1\xd4\x2e\xbf\xd3\x2a\
+\x60\x1b\x13\x48\x56\xb6\x0f\x48\x21\x90\x12\xb0\x81\x6c\x40\x5c\
+\x8a\x24\x6f\xa1\x9f\x4f\xef\x0c\x96\x44\xaa\xf2\x5e\xfe\xea\x2b\
+\xe1\x03\xc0\xdc\x9a\x00\x7c\x74\x17\x0f\xec\x3f\x7c\xdb\xc1\xaa\
+\x4d\x37\x62\x24\x82\x20\x4d\xc0\xcc\x44\x66\xe2\x2e\x4a\xf2\x5c\
+\x24\x0d\xe9\x0c\x27\xd8\x7d\xbe\x22\xe3\xb6\x6d\x56\xa9\x52\x5e\
+\x74\x9a\x87\xf2\xdf\x20\x74\xa4\x86\xd7\x4f\x4d\xd5\x96\x17\xa9\
+\x6d\x33\x8b\xc6\xab\x59\x02\xac\x3e\xb8\x27\x5a\xbd\xcf\xb6\xde\
+\xf9\x7b\x18\xf1\x2b\x48\x53\x03\x69\x99\x1f\x8f\x4a\x6a\x02\x05\
+\x56\x06\x85\x63\x5a\xb2\x8a\x71\x61\x39\x76\xaa\x24\xec\xb5\x04\
+\x2d\x45\x49\xfb\x5f\xa0\x36\xb9\x28\x09\x16\xe2\x76\xbb\xd5\xcd\
+\x55\xee\x43\x57\x01\x5e\x07\xd2\xd7\x0e\x60\x0d\xee\x33\xfb\x8e\
+\x3d\x56\x91\xe3\xf3\x62\x26\xe7\x91\xd2\x04\x5b\xe7\x26\x55\x0e\
+\xd4\xfa\x11\x80\x2a\x56\x19\x4e\xa7\xc7\x71\xda\xc5\xce\x3a\xf6\
+\xbc\x98\x92\xe2\xb7\x5e\xc1\x57\x17\x86\x0d\xf7\xa2\xc4\x4e\x51\
+\x16\x38\xcf\xd6\xea\xf8\xfe\xff\xe8\x49\xe6\x03\xa1\x6b\x06\xd8\
+\xb9\x81\x3d\x37\xee\xaf\x7f\x74\xdb\x91\xcf\x63\x2c\x8f\x58\x83\
+\xcb\x07\x00\xa6\x72\x79\xf0\xb0\x1f\x55\x91\x20\x57\x69\x15\x40\
+\x3a\x40\xce\xda\x82\xb2\x2a\x77\xfe\x75\xf2\xd7\xf5\x43\xd5\x4d\
+\x50\xd0\x0c\xeb\xa6\x28\x2f\x29\xa4\xb1\x3c\xb4\x5d\x55\x58\x6f\
+\x98\xd7\x08\xe0\x56\x11\xf7\x1c\xe6\xc5\xab\xad\xe3\x26\x31\x65\
+\x7d\x69\x49\xc3\xaa\x80\xa9\x91\x5e\x1a\xa0\x77\xfe\x06\xb6\xae\
+\xf7\x60\x4a\x69\x0f\xe7\xca\x1e\xb7\x8d\x3b\xa6\xed\x2a\x81\x29\
+\x21\xd9\xdf\x43\x95\x7e\x16\x51\xdf\x08\xe5\xb7\x00\x26\x94\x36\
+\x51\x51\x54\x40\xa1\x5f\x2d\x29\x2f\x72\xb5\x4c\x2d\xe8\x7d\xd7\
+\x04\xf0\xf1\x5d\x3c\xb4\xf7\xd0\xb1\x83\x95\x0d\x7b\xd0\x42\x17\
+\xd1\x62\xa3\xa4\x17\x3b\x2d\x45\x7a\x58\xd2\x54\x72\xf3\xce\xa1\
+\x2a\x20\xcc\x95\xc6\x57\x3f\x89\xa4\x04\xb0\xcc\x47\xa7\xe6\xd9\
+\x30\xf3\x4f\x28\x3b\xca\xa0\xf6\x1e\x0b\x4d\x1a\x50\x14\xa0\x30\
+\xb7\x12\xbf\x6f\x40\x6c\xa9\xf6\x1e\xba\x0a\xf0\xcf\x40\x2a\x2b\
+\x80\xfc\x1c\x72\x8f\xed\xe1\x1b\x75\xf5\x35\x84\xcf\x7e\x89\x78\
+\xfc\x2d\xa4\xb6\x08\x08\x10\x0a\x08\x95\x7e\x6d\x0f\xbb\x6b\x03\
+\x08\x40\x11\x0e\xb8\xb4\x05\xab\x0c\xb5\x5d\xa5\xf0\x7c\x8a\x8a\
+\x9e\xbf\xc5\xd3\x16\x80\x92\x3b\x40\xf1\x80\xd4\x01\x4b\x4a\x60\
+\x13\x65\xc5\xe7\xd9\x5c\xb1\xbc\xff\x8d\xae\x58\x01\x30\x97\x15\
+\x40\x75\x31\xd5\x53\x39\x54\x96\x19\x53\xe4\xfb\xcb\x49\x46\xf6\
+\xb2\x14\x1f\x22\x51\x10\x01\xc5\x85\xb8\xaa\x8e\xc5\x56\x0e\x66\
+\x06\x58\x88\x15\xbf\x91\x9d\x6f\x5f\x56\x7e\x07\x20\x99\x0b\x4b\
+\x8a\xde\xfb\x01\x79\x07\x8b\x21\xb0\x1f\xdc\xeb\x00\xc3\x92\xd4\
+\x2d\x15\x36\x50\x59\xbe\x3e\x33\x07\xdb\x14\xc1\x7a\x53\x66\x09\
+\x30\x3e\xcf\x98\xa2\x12\x8e\xa4\xe4\xba\x82\xcd\x2d\xe4\x6c\x6e\
+\x23\x27\x32\x8e\x3e\x3e\x4d\x6c\xe1\x32\x71\x5f\x98\x2e\x6d\x17\
+\xbf\x56\xe9\x73\x00\x56\x17\xc2\x36\x2e\x20\x63\x1e\x77\xf7\x59\
+\x8a\x5b\x02\x50\x5c\x0f\xee\x5a\xab\x6d\xd0\x41\x6a\xb6\xd2\x50\
+\x5a\x49\x45\x79\x03\x3e\xf7\xa5\xfc\x0d\xa5\x9e\xd6\x91\x60\xba\
+\x17\x90\x1f\x1a\x20\x96\x24\x39\x1b\xe5\xcd\xf0\xf2\xdc\xf1\x1a\
+\xa9\x40\x60\x33\x94\xec\xc4\x55\xbb\x48\xa1\x1e\xa4\x60\x3c\xc4\
+\xc9\x94\x46\xde\x95\x41\xa8\xdf\xbc\x4a\x15\x84\x5d\x05\x07\x63\
+\x3e\x62\x92\x1c\x1e\xa4\xb1\x38\x8e\xd8\xb0\x07\xd4\x22\xa7\x6d\
+\x64\x46\x69\x5b\x29\xc8\xf5\x50\x50\xd2\x48\x5e\x7e\x11\x4d\xe5\
+\x91\xb6\xab\x00\xdf\x07\xe2\x59\x0d\x71\xcf\x38\xa7\x6f\x88\x8e\
+\x1c\x97\x8a\x1f\xa1\x2d\x82\xa7\xd8\x92\xb7\x0a\xb1\x05\x8e\x6e\
+\x51\x90\x0b\x31\xcc\xce\x1f\x81\x27\x1f\xb3\x69\x2f\xb8\xbd\xac\
+\xf6\x08\x45\x4c\xc2\xd3\x8b\x6c\x8a\xbe\x87\xf2\xd1\x13\x00\x20\
+\x75\x9c\xb6\xd1\xb0\xcd\xdb\x4a\x22\xfc\x85\x54\xd6\x35\xd2\x54\
+\x31\xbb\xef\xdf\xba\x96\x0a\xae\x05\xe0\x94\xa9\x87\x48\x26\x16\
+\xc9\xd1\xbc\xe0\xca\x01\x24\x08\x40\x78\x41\x28\x88\xe2\x62\xd4\
+\xd2\x6a\xd0\x5c\x28\x83\xed\xc8\xb4\x86\x59\xd3\x0c\xc5\xe5\x80\
+\x00\x60\x21\x22\x99\x9d\xd3\xd9\x30\xf8\x1a\xbe\xdb\x3f\x05\xa4\
+\x6d\xe3\xb6\x79\x3e\x98\xfd\x24\x98\x09\x30\xe3\xe0\x81\xea\xba\
+\x4d\xd4\x04\xda\x9b\xbc\x2e\x51\x93\xd2\xe5\x4c\x56\xbf\x89\xdf\
+\x1b\xa2\x0b\x21\xe7\x96\x17\x07\x41\xd3\x41\xc6\xac\x0f\x96\x19\
+\x25\x40\x26\x2d\x99\x4b\xa0\x2e\x21\xb6\x36\xa3\xec\x6e\x43\x4d\
+\x44\x50\x3b\xce\xa0\x8c\x74\x13\x8e\x18\x4c\xcf\x43\xa0\xeb\x55\
+\x02\xb7\xde\x06\xaa\x6e\x65\xd8\xb4\x32\xed\x18\xce\xc4\xb8\xad\
+\x18\xc8\x65\xc8\x37\xa9\x2e\xab\xc6\xe3\x52\xfd\xb5\x25\xde\x56\
+\x40\x64\x05\xa0\x1b\xc8\x8b\xa3\x9c\x89\x86\x7a\xc1\x50\xc1\x58\
+\x02\x73\x19\xcc\x98\xad\xb8\xad\x84\x05\x64\x44\xc1\x98\x41\x54\
+\x15\x20\x76\xb7\xa2\x94\x56\x52\x38\xfc\x26\xa5\x1d\x7f\x4f\x6d\
+\x6b\x33\x14\xe6\x82\x19\x71\xc0\x65\x02\x47\x31\x4b\xe6\x72\x46\
+\xd6\x5e\x1e\x1d\xbf\x47\x25\xb0\xbe\x42\x34\x95\xfb\x6e\x00\x72\
+\xb3\x02\x00\xe8\x18\xe2\x54\x34\xd4\x87\x49\x2e\x68\x61\x30\xa3\
+\xb6\x96\x41\x2e\xdb\x1b\x5b\x20\x56\x4c\x58\x15\xd1\xaf\x20\xfc\
+\x11\xbc\xbb\x9b\xa9\xfe\xd4\x9d\x88\xfa\xa6\xcc\x73\x19\x50\x9c\
+\xd7\x66\xb4\xc2\xb4\x99\x51\x04\x8c\x38\x18\x1a\x88\x04\x35\x1b\
+\xb7\xb0\xb1\x34\x67\x2f\x50\x94\x35\x40\xfb\x00\x67\x52\x89\xb0\
+\x4c\x2c\x87\xc0\x10\xd6\x26\x46\xc4\xde\x64\xc9\xd9\xd4\x32\x61\
+\x67\xd1\x56\xe6\xda\x98\x01\x6d\x00\xd2\x97\x56\x54\x6f\xd9\x02\
+\xb5\xa2\x93\x18\x23\x02\x7a\x12\xf4\x34\xe8\x1a\xc8\x28\x35\x8d\
+\x5b\xa9\x28\xf2\x36\xf8\x3d\x4a\x5d\xd6\x00\xdd\x23\x5c\x8e\xc4\
+\x18\x89\xcc\x77\x83\x99\x67\x7d\xb0\x11\xb7\x21\x16\x6d\x90\xf7\
+\xab\x62\x03\x39\x19\x75\x0c\x1a\x51\xec\x6b\x9c\x75\xd4\x7e\xff\
+\xa2\xad\x25\xd0\x53\x8e\xf9\x8c\x72\x25\x95\xeb\x4a\xf0\x78\x3c\
+\xde\xba\x12\x5f\x1b\xa0\x64\x05\xa0\xe9\x98\x17\x87\x39\xbb\x38\
+\xdb\x09\x62\x9d\x05\xa0\xa5\xed\x2c\x2d\xd9\x1b\x87\x1d\x13\xa6\
+\x15\x1d\x38\x5b\x66\x64\xc5\xdf\xac\xf7\x59\x8a\x82\x9e\x00\xcd\
+\x36\xef\x00\x00\x3a\x3e\x57\x9a\xd2\xaa\xba\x4c\x1b\x1d\x00\xf2\
+\xb2\xfe\x3d\xf0\x4e\xbf\x3c\xdd\xb6\xa3\xeb\x61\x53\x0d\xa0\xa4\
+\x75\x50\x4c\x30\x55\x50\x55\x10\x06\x28\x69\x50\x54\x10\xef\xcb\
+\x05\x28\x2b\xf2\x22\x01\xd3\x39\x3a\xa5\x61\xc9\x34\xc1\xfc\x60\
+\xd4\xc1\x30\xc0\xd0\x2d\x99\x3a\x22\x15\xa4\x76\x73\x0b\x0d\x17\
+\xfa\xf6\x40\x68\x1d\x10\xcd\xea\xd6\x62\xd7\xb0\xfc\x4f\x3d\x1d\
+\xd7\x97\xc3\xe3\x20\xfd\x4e\x96\xb4\x34\xce\x75\x0a\xb4\x24\x68\
+\x71\xd0\x96\x40\xb7\xfa\xd9\x96\xb5\xd6\x33\xcf\xc7\xac\x6c\xeb\
+\x29\x70\xde\xbf\xca\x67\x6a\x60\xd8\x55\x50\x22\x6c\x68\xde\x49\
+\x69\x9e\x77\x43\x9e\x57\xdd\x08\x90\x15\xc0\xd0\x34\x13\xf3\x11\
+\x2e\x2d\x5c\x79\x0f\x5c\xeb\x33\xc6\x71\x94\x72\xa2\xd5\xbf\xce\
+\x3a\xed\x08\xcd\xd6\xca\xd7\x3b\x6b\x1b\x48\x73\x00\xa4\x17\x72\
+\x36\x42\xc5\x21\xf2\x03\xe5\x80\xa2\xe4\xfb\x5c\x8d\x80\x2b\xab\
+\x16\xd2\x0d\xe8\x18\x92\xa7\xea\x9b\xda\xb7\xd6\x6d\x3d\x01\xd1\
+\x0e\x50\x54\x5b\x0a\x08\xc5\x89\x42\x58\x22\x13\xb1\x22\x12\x24\
+\x76\xfc\xa0\x4c\x30\x4d\x3b\x1a\x80\x17\x3c\x95\xe0\xad\x42\x7a\
+\x2b\x09\x87\xe3\x8c\xf7\x77\x33\xda\xfb\x2a\x23\x3d\xdd\x04\xa3\
+\xa9\xf1\xe0\x52\x7a\x14\x10\xd9\x00\xd8\xa7\x91\x79\xe6\x96\xd9\
+\x8b\xbf\xaa\xab\x01\x5c\x86\x04\x23\xbd\x0a\x80\x70\x84\x1d\x01\
+\xc0\x81\x70\xcc\x03\x2a\x78\x2a\xc0\x5b\x0d\xbe\x6a\x62\x09\x98\
+\xe8\xef\x60\xac\xef\xdf\xaf\xaa\x83\xc5\xf9\x20\xf1\xa4\xb1\x74\
+\x39\x98\xe8\x1d\x9a\x4d\x74\x74\x4d\x2e\xfd\xc8\x30\x65\x1f\xa0\
+\x65\x0d\xf0\xce\x80\x3c\xab\xa7\x13\x46\x64\x7e\x48\x2d\x76\x95\
+\x40\x72\x72\xb5\xec\x3b\x11\x9c\x2a\x48\xec\x65\xc6\x70\x19\xf8\
+\x6a\x91\xbe\x1a\x52\x7a\x0e\xd3\x97\xbb\x99\xec\xff\x2f\xc6\xfb\
+\xcf\x33\x3f\x35\x22\x13\x69\x19\x1f\x9b\x4b\x0f\x5e\x9a\x49\x74\
+\x5e\x9e\x4d\xb6\x4f\x84\x53\xdd\x52\x32\x03\x84\xec\xe1\x4d\x03\
+\x64\x0d\x30\x1d\x92\xe1\x50\x94\x0b\xa1\x89\xb7\xf7\x15\x37\xed\
+\x83\xf8\x18\x98\x06\x8e\xe9\x55\x2a\xa0\xa8\xe0\x2d\x83\x9c\x3a\
+\xf0\xd7\x93\xa6\x88\xe0\xc4\x00\x53\xed\x6f\x33\x39\xf0\x3d\xe6\
+\x27\x06\x49\x24\xd2\xc9\xf1\x79\x6d\xe4\xd2\x4c\xaa\x6b\x60\x3a\
+\xd9\x3e\x1e\x4a\x77\xa5\x75\x39\x05\xcc\x03\xd1\x35\xbd\xbd\xfe\
+\x56\xaf\x71\xaa\x76\xe3\xb9\x7d\x72\xef\x67\x10\x73\xa7\x71\x6e\
+\x2f\x1b\x40\x46\x80\xaf\x0c\xf2\x36\x41\x5e\x23\xa6\xaf\x9a\xf9\
+\xe9\xcb\x5c\xe9\x3c\xc7\xd4\xc0\xdf\x10\x1c\xbb\x48\x3a\x91\x30\
+\x27\x43\xfa\x68\xdf\x64\xfa\xe2\xc0\x74\xaa\xfd\x72\x30\xdd\x11\
+\x4f\x99\xe3\x40\xd0\x36\x1c\x77\x6a\xb6\xc6\xf7\x46\xbb\x46\xcc\
+\x53\xc7\x66\x7b\x1e\xd7\x5c\xc5\x78\x14\x0f\x98\x1a\xb8\x8b\x20\
+\x3f\x63\xb8\x09\xd3\x5f\x4f\x24\x3c\xc7\xec\xd0\x7f\x73\x65\xf0\
+\x3b\xcc\x0c\xbd\x4d\x32\x1e\x33\x82\x8b\xc6\x4c\xdf\xa4\x76\xb1\
+\x77\x32\xfd\x5e\xff\x64\xfa\xdd\xa5\xa4\x39\x66\x1b\x8e\x00\xcb\
+\x59\x1a\xbe\x76\x80\x9e\x51\xf3\x6d\x43\x4f\xc7\x16\xa6\x3a\x72\
+\xcb\xeb\x1f\x41\x7a\x4a\x58\x8e\xc5\x98\x1b\x7e\x93\xd9\x37\xff\
+\x92\xe0\xf0\x39\xe2\x91\xa0\x0c\x45\xcd\xb9\xbe\x09\xbd\xef\xe2\
+\x84\x76\xa1\x7f\x52\x3b\x1f\x8c\x18\x97\x6c\xc3\x61\xdb\xb0\xb1\
+\xd2\xc0\x75\x01\x08\x46\x64\xf4\xf2\xb4\x79\x3a\xe7\x8d\xa7\x7f\
+\x61\xba\x72\x1f\x73\x23\x6f\x12\x5b\x98\x64\x29\x6e\x46\x7b\xc6\
+\x8c\xde\xee\x31\xad\xb3\x7b\x54\x7f\x77\x66\xd1\x18\x30\x4c\xae\
+\xd8\x86\x97\x56\x3b\x35\xae\x33\x80\xa3\x6f\xfd\x43\xf2\x97\xee\
+\x9a\xee\xf9\x83\xfc\x9c\xbe\xc6\xde\x71\xa3\xff\xe2\x98\xfe\xee\
+\xd0\x15\xc3\x3e\x29\x58\xf8\x49\x27\xc5\x75\x07\x68\x6e\x6e\xe6\
+\xa9\xa7\x9e\x5a\xb5\x10\xc0\xfd\x40\x49\x4b\x33\xb4\xc0\x32\x90\
+\xb8\x3e\x36\x1d\x6f\x2b\x1f\x3f\xf7\xff\x6e\xf3\x3f\x6b\x76\x5b\
+\x62\x8d\x5d\xc3\xae\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x11\x1e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x10\xe5\x49\x44\x41\x54\x78\x5e\xed\x9a\x69\x70\x1c\xe5\
+\x99\xc7\x7f\x6f\x77\xcf\x8c\x46\xd2\xe8\xb0\x64\xc9\xb2\x24\x5b\
+\x36\x92\x0f\x6c\x83\x8d\xb1\xb1\x31\x10\x07\x63\xc0\xe6\x08\xc7\
+\x02\xae\x04\x42\x20\x81\x9c\x40\xb2\x49\xc8\x86\xec\x92\x90\x64\
+\xa9\x4d\xd8\x1c\x64\x37\x07\x9b\x84\xa3\xc8\x26\x81\x70\x65\xb3\
+\x86\x25\x10\xc2\xe1\x14\xa7\x6d\x9c\xd8\x18\x5f\x18\xdb\xb2\xe4\
+\x4b\x23\x8d\xe6\xe8\xeb\x3d\x56\x9a\x6e\x76\x56\xe5\x52\x12\x36\
+\x7b\x54\xaa\xf6\xa9\xfa\xd5\xf3\xf6\x5b\xaa\xae\xe7\xff\x5c\xd3\
+\x1f\x24\x8c\x31\xfc\x39\x9b\xc5\x9f\xb9\x39\x00\x42\x08\xc6\x1a\
+\xd4\x26\x05\x5f\xbf\xa0\x15\x5f\x3b\x04\x23\x48\x63\x11\x4a\x53\
+\xeb\x7b\xde\x85\x08\x71\x61\xaa\xba\xe6\xf8\x44\x2a\xd5\xac\x95\
+\xf6\x7d\xb7\xb4\x5b\x86\xe1\xd3\x96\x6d\x3f\x70\xd7\x0b\x87\x5e\
+\xde\x37\xe8\x91\x72\x2c\x7c\xa9\xf9\x9f\x34\x63\x0c\x0e\x47\x59\
+\x24\xe8\x6f\xcf\xaa\xa3\x62\x20\xbd\xe2\x7b\xd3\x99\xfa\x4f\xcd\
+\x5d\xb6\x7c\xde\x31\xc7\x2f\xa2\x79\x52\x1b\xa9\xa4\x8d\x0a\x8b\
+\xe4\xb3\x07\x27\xf6\xed\xda\xbe\x78\xc7\xab\x1b\x3f\xba\xe2\x48\
+\x61\xed\xda\x2d\xc1\x17\x07\x5c\xb3\xe5\x7f\xad\x02\x15\xa0\x3a\
+\x69\xf1\xfe\x25\xcd\xb4\xd4\x84\xe4\x35\x18\xa3\x53\xda\xcf\xff\
+\xe0\xb8\x65\x67\x5e\xbe\xec\xdd\xd7\xd3\xd8\x35\x13\x8c\x82\xa0\
+\x08\xe1\x08\xca\xa5\xb9\xb3\x9d\x69\xc7\x1d\xcb\xc9\x67\x9c\x52\
+\x73\xea\x86\x97\x2e\x5d\xf4\xd0\xda\x55\xff\xf4\xe4\xee\xeb\x37\
+\x1d\x94\x77\x33\xd6\xa8\xb1\x60\x34\x37\xc7\x57\x57\xee\x36\x95\
+\x60\xab\x0b\x7b\x03\x28\x9a\x3f\x61\x06\x92\x8e\xe0\xfa\x53\x27\
+\x70\xd6\x54\x17\xa9\x01\x63\x1c\x2b\x74\x7f\xba\x7c\xcd\xb5\x97\
+\x9f\xfb\x99\xdb\x69\xec\x9a\x0b\xa1\x05\xa1\x00\x65\x83\xb1\x40\
+\x01\xa1\x06\x37\x40\x58\x0e\xc7\x9c\xb4\x98\x2b\xae\xbf\x3a\x73\
+\xd3\x45\x33\xef\x3a\xbe\xc5\xbe\x86\xd8\x3a\x80\x9f\x34\xc0\xa6\
+\x0e\x78\x70\x06\xdc\xdc\x11\x13\x3f\x6f\xe8\x86\x17\x3b\x60\xa2\
+\x00\xe7\xbf\x2a\x60\xcd\xfc\x1a\x16\xb6\xdb\xa0\x7c\x40\x80\x5f\
+\xb8\x79\xd1\xea\x4b\x2f\x38\x71\xcd\x75\xa0\x0c\x48\x03\x4e\x0d\
+\xd8\x29\xb0\x1c\xc0\x06\x61\x01\x56\xe4\xb5\x01\xd7\x23\x33\xb1\
+\x85\xb3\xaf\x5c\xc3\x27\xce\x6e\xff\xd6\xc4\x6a\x96\x02\x5c\x0d\
+\x2c\x4f\xc2\xd4\x04\xa0\x8e\xc6\x06\xa6\x3a\xd0\x28\x60\xba\x80\
+\xe4\xdb\x15\xd0\x51\x6f\xb3\xaa\x27\x81\x96\x01\x06\x01\xca\x9f\
+\xd1\xd1\xdd\x7d\xe3\x89\x17\x7f\x00\xfc\x12\xa8\x10\x8c\x02\x1d\
+\x80\x56\x60\x34\x60\xc6\x12\x9b\xf4\x7d\x6a\x9a\x5a\x58\xf1\xae\
+\x95\x55\x6b\xe6\x25\xff\x0e\x48\x6a\xa0\x64\x20\x18\xa7\x45\x34\
+\x10\x98\xc8\xdb\x40\x95\x78\x9b\x02\x56\xcd\x48\x30\xa1\x4a\xe3\
+\x08\x09\x40\x4a\x04\x1f\x9e\x77\xc6\x45\x29\x2b\x9d\x86\xd0\x8d\
+\xaa\x22\x4b\x20\xf3\xa0\x4a\xa0\x7d\xd0\x21\x68\x09\x46\x45\xa0\
+\x30\x46\x63\x80\xd0\xf7\x98\xd0\x33\x9b\xf3\x96\x75\x9d\xd6\x56\
+\xcd\x3b\x0c\x80\x88\x33\x16\xd0\x66\x8a\x9c\xa2\x0b\x9c\x3f\xc2\
+\x39\xa6\xc4\x89\x42\x51\x8f\x00\x9f\x38\x1d\x6f\x67\x88\xd3\x09\
+\x58\xdc\x0e\x42\x07\x54\x59\x60\x94\x4e\x36\x36\x37\xad\x9e\x34\
+\x73\x1e\xb8\x39\x10\x29\x40\x44\x41\x0a\x0b\x8c\x8e\x2a\xa1\xfc\
+\xc8\x47\x42\xca\x18\xa3\xcb\x68\xad\xc0\x72\xe8\x99\xd3\xc3\xb1\
+\x93\xb7\xaf\xd4\x3b\x79\x82\x23\x5c\x7a\xc4\xe7\xea\xd4\xc4\xe9\
+\x4b\x52\x33\x7b\xea\xed\xa6\x26\x4c\x18\x22\xfb\xfa\x08\xb6\x6e\
+\xeb\x1b\xe8\x3f\xf2\xab\xd9\x9a\x3b\xb6\xc1\x6f\x94\x78\x1b\x02\
+\xda\x33\x82\x8e\x8c\xc2\x11\x60\x59\xa0\x64\xd8\xd1\x34\x79\x72\
+\x97\x53\x9d\x86\xb0\x04\x96\x8e\x82\xb7\x82\xb8\x68\x3a\x0e\xd8\
+\x07\xe5\x95\x7d\x44\x18\x09\xd0\x23\x18\x53\x6e\x47\xab\xb5\x89\
+\xf3\xea\x59\xd9\x0d\x4f\x56\x5d\x74\xf1\x8a\xda\x6b\x3e\x40\xf5\
+\x09\xf3\xb1\x33\x35\x08\xad\x41\x86\x18\xaf\x44\xd8\xdf\x37\x39\
+\xf9\xec\xb3\x57\xdc\x71\xe7\xbd\x57\xfc\x64\xe3\xe6\xbb\xbe\x66\
+\xf8\x54\x09\xb2\x7f\x94\x80\x84\x65\xa8\xb2\x24\xa9\x78\x0e\x95\
+\xa0\xa9\xb6\x2e\x93\xc4\x04\x20\x03\xb0\x15\x98\x30\x1e\x5c\x01\
+\x98\x58\x40\x10\x21\xa3\x16\xd3\x5a\xc5\x44\xad\xe4\x6a\x9f\xde\
+\x75\x7b\x59\x9d\x6f\x9d\xdf\xf1\xc0\x37\x49\x5f\x7c\x19\x00\xf8\
+\x25\x4c\x18\x60\x64\xfc\x7e\x15\x92\x98\x38\x81\x86\xcb\x2e\xa2\
+\xe1\xec\x77\xf2\x89\x3b\xee\xbc\xaa\xfb\x7b\x3f\x9c\xff\xc1\x42\
+\x78\xe1\x20\xec\xf9\x23\x7e\x89\xc1\x12\xa6\xec\x45\xf4\x6c\x04\
+\x2a\x0e\xcc\x80\x91\x51\xf6\x85\x5d\x11\x60\x14\x95\x2a\xf8\x18\
+\x15\xa0\x94\x44\x69\x89\x36\x1a\x6d\x19\xde\x7c\x6e\x0b\x0d\x8f\
+\xef\xa5\xeb\xce\x9f\x92\x58\xb6\x1c\x42\x2f\x7a\x87\x65\x23\x46\
+\x30\x23\x20\xac\x08\x19\xa2\x3d\xb7\x7c\x9f\xfc\xc4\xc7\xb8\xa8\
+\xa5\x69\x41\x70\xdb\x37\x7e\xf6\xbe\xc3\xa5\x33\x25\x0c\xfd\xde\
+\x21\x2e\xc9\x11\x34\x84\x02\x82\x51\x2c\x0e\x16\x0b\xd9\x12\xa1\
+\x1b\x0f\x6e\x11\xc2\x42\x84\x8c\xa8\x9c\x4b\x68\x15\x20\x75\x14\
+\xbc\x52\x0a\xd0\xf4\xf5\x1f\xc2\x79\x64\x3d\xdd\x9f\xfd\x3c\x89\
+\x65\x27\x63\x4a\x39\x00\xf8\x8f\xa0\x05\x47\x1b\x18\xa9\xd0\x85\
+\x02\x66\xcd\xa5\xac\x79\xff\x7b\x16\x5d\x53\x9f\xb8\xf9\x0f\x6e\
+\xa1\xbe\x61\xe8\x2f\x81\xb6\x40\x02\xca\xa6\x2f\x77\x78\xff\x4e\
+\x37\x3f\x18\x65\x54\xba\x18\x59\x8a\x03\x8f\x18\x79\x2e\xdf\x4b\
+\x19\x20\xcb\xd9\x0f\xd1\x4a\xa2\xb5\xa4\x14\x96\x18\x78\xfa\x55\
+\xa6\xcd\x59\x42\x72\xf5\x6a\xcc\xd0\x10\x68\x0d\x4a\x81\xf4\x41\
+\x49\x8c\xd6\x95\x55\x6c\x2a\x80\x01\x6d\xd0\x9e\x0f\x7f\x71\x09\
+\x1f\x5f\x3a\xef\xda\x09\x16\xc7\xfe\x5e\x01\x81\x82\x75\x7b\xc0\
+\x76\x20\x69\xc0\x02\x35\x3c\x94\x7b\xe8\xc8\xee\xcd\x18\x21\x90\
+\x32\x8c\x02\x95\x3e\x15\x82\xe8\x5e\x85\x28\x39\x82\x92\xe5\xb3\
+\x0c\x4a\x1c\x38\x70\x80\x9a\xbd\x59\x1a\xce\xbb\x00\xa4\x02\x15\
+\x46\x41\xcb\x00\x13\xfa\x65\xa2\x3b\x15\x11\xcf\x0c\xc6\x50\xa9\
+\x44\x48\xd8\xd8\xc4\x8c\xb3\x57\xd4\xac\x6a\xae\xbe\xe4\x0f\x7e\
+\x0b\x3d\xbe\x1d\xde\x35\x0b\x7e\xd6\xea\x70\xd9\x80\xc4\xd6\x7c\
+\xff\x8d\x97\x9f\xb8\xa1\xe9\x98\xb9\x8d\x42\x58\x00\x08\x2a\x65\
+\x37\x98\x78\x65\x1a\xb4\x51\x28\x29\x09\xfc\x22\x81\x3b\x4c\x76\
+\xef\x7e\xba\x1b\x5a\x10\xd3\xa6\x63\xbc\x62\x3c\x3b\x80\x56\x20\
+\x44\xe5\xac\x64\x3c\x47\x2a\xc2\xa8\xf2\xfb\x0c\x26\x2a\x4c\x18\
+\xc2\x8c\x59\x9c\x3e\xbd\xf5\xd4\x7f\x3e\xb4\xdb\x06\xd4\xb8\x02\
+\xf6\xe7\xe0\x76\xdf\xe1\xa9\x09\x09\x1e\xaf\xb7\xf8\xf4\x81\xb0\
+\xaf\xab\x77\xdf\xc7\x76\xae\xfb\x97\x7b\xba\x4f\xbb\xc0\xd1\x32\
+\x1c\xdb\xab\x26\x12\xa0\x95\x22\x0c\x3d\x02\xaf\x88\xef\x16\xf0\
+\xfc\x3c\xde\x91\x01\x32\x6d\xb3\x20\x99\x82\x30\x88\xfa\xde\xe8\
+\x68\x47\xf3\x96\x80\x78\x15\x2b\x89\x51\x91\x47\xeb\xf8\xbd\x71\
+\x82\xc2\x00\x6a\x33\xf4\x74\xb5\x76\xf2\xc2\xee\x7a\x20\x3b\xae\
+\x00\x6c\x78\x6a\x6e\x0a\xb4\xe2\x70\x52\x70\xe3\x74\x8b\xb6\x92\
+\xaa\xbe\xb4\x77\xbd\xba\xea\x69\xed\xb4\x2f\x7c\x07\x42\xd8\x71\
+\xa9\x41\x6b\x55\xee\x7b\x19\xfa\x84\xbe\x4b\x30\x8a\x57\xc0\x0b\
+\x8a\xf8\xb9\x2c\xa9\x29\xb5\x71\x6b\x18\xb0\x34\xc2\x68\x88\x2b\
+\x09\x44\x82\xb4\xae\x04\xaf\xa2\x36\x8a\x2a\x1b\x41\x18\x82\xd1\
+\xa4\x33\x35\xd5\x40\x7a\xfc\x16\xaa\x13\x70\x71\x15\xa8\x68\x00\
+\x50\x32\x85\xd1\xdf\x5b\xb2\xf8\xf2\xf7\xe5\xa8\x62\xdd\xd6\x1d\
+\xcc\x7b\xfa\x11\x9a\xa7\xce\xa0\x66\x42\x0b\xda\x18\xd4\x5b\xbd\
+\x1f\x06\x91\x88\xc0\xc3\x2f\xe4\x18\xea\xdf\xc3\xc1\x52\x09\xa9\
+\x03\x52\x32\x8c\x33\x6f\x63\x74\xbc\x2e\x11\x54\x06\xf7\x3f\xcf\
+\x80\x41\x47\x44\x22\x94\x82\xc0\x83\x72\x72\x82\x12\x10\x8c\x2f\
+\xe0\x43\x29\x48\x38\x40\xf9\x65\x29\x5b\x24\xee\xff\xc6\xca\xaf\
+\x9f\x7f\x5c\xcb\x2c\xfe\xfe\xa9\xaf\xd2\x73\xd9\x97\xa8\x1f\xee\
+\xe5\xb5\x5f\xde\x4e\x7a\xe7\x26\x32\x0d\x8d\x88\xfa\x0c\x28\x13\
+\x0d\xb3\x57\xc0\x3d\x70\x90\x92\x63\xf0\x4f\x9a\x4e\xbe\xa7\x83\
+\xa1\x47\xb2\xd4\xb8\x25\x4c\x32\x89\xd0\xaa\xb2\x3a\xe3\xf8\xe3\
+\x6d\x33\x26\xeb\xda\xc4\x5e\x2b\xf0\xdd\x48\x40\x21\xc7\xf6\x03\
+\xd9\xbd\xc0\xd0\xf8\x02\xac\x2a\x90\x32\x7a\x0a\xf5\x77\xbe\xb5\
+\xfa\x1f\xce\xff\xc8\x09\x1f\xe4\x6b\xcf\xde\xca\xc7\x4e\xb9\x81\
+\x62\x61\x80\x96\x19\x2b\xe8\x9b\x56\xcb\x83\xf7\xff\x94\xe3\x1e\
+\x7f\x85\xb9\xbb\x5e\x46\x77\x26\xb0\x0a\x9a\xd2\x21\xcd\xe3\xe7\
+\x9e\x43\xd5\x85\x2d\x9c\x34\xaf\x83\x52\xb6\x9f\x6d\xb9\x5e\xda\
+\x0f\xf7\xa1\xa7\x4c\x47\xc8\x10\x61\x0c\x63\x8d\x38\x70\x46\x30\
+\x11\x18\xb4\xd6\xe0\x7b\xe0\x95\x30\x81\x07\x07\x7b\x79\x72\xd7\
+\xc1\xe7\x81\x70\x7c\x01\x45\x0b\xaa\x01\xd7\xbd\xf2\x3d\x27\x5d\
+\x79\xf5\x47\x16\x5e\xcb\x63\x3b\x1e\x66\x51\xe7\x49\x9c\x36\x6d\
+\x05\x1b\xfa\x37\xb2\x6f\xe0\x0d\xbc\x50\xb2\xec\xe4\x4b\x49\xb7\
+\x9d\x46\xcf\x59\x37\xd0\xb9\xcd\x87\x01\x58\x7b\xc6\x19\x2c\xbe\
+\xea\x7a\x0e\x95\x5e\xe3\xa0\xbf\x99\xb6\xc2\x02\xaa\x4f\x58\x88\
+\xdc\xf4\x7c\x24\x40\xeb\xca\x0e\x13\x44\x66\x88\x05\x50\xf1\x5a\
+\x46\xc1\xbb\x45\x8c\x57\x22\xe5\xe6\xd9\xff\xdb\xcd\xc3\x6b\xf7\
+\x66\x1f\xf9\xfd\x6b\x54\x00\xda\x34\xb5\xd4\x4f\xfb\xca\x5f\x2d\
+\xff\x30\x6f\xe4\xb7\xb0\x3f\xbf\x87\x77\xcf\xbf\x1a\x5f\x97\x58\
+\xd0\x76\x3c\xbb\xb3\x6f\x52\x0a\x3c\x16\x34\x4d\xc5\xef\x3a\x89\
+\x81\x1b\xb7\xd2\x71\xeb\xed\x1c\xac\x6b\xa4\xe6\x2b\x7f\xc3\xb1\
+\x2d\xd3\xd8\x33\x6c\x31\x74\xa4\x89\x15\xad\x17\x12\xac\xd2\x1c\
+\xbe\xfd\x46\x26\x6d\x7f\x15\xaf\x67\x3e\x22\xf0\x00\x10\x46\x10\
+\x67\x3f\xf2\x51\x09\x30\x32\x04\xdf\x1d\xa5\x1c\xbc\x90\x01\xce\
+\xce\x4d\x7c\xf9\xc9\x97\xee\x1a\x0a\xf5\xc6\xb6\x45\xd7\xa1\xa5\
+\xe2\xe0\xc6\xef\x8c\xb3\x85\x3c\x7d\xcd\xbb\x4f\x3f\xbf\xb5\xa5\
+\xa1\x9e\x27\x5f\xff\x15\x73\xda\xe6\xe0\xaa\x3c\x68\x41\xc2\x4e\
+\xd1\xde\x30\x89\xf6\xfa\x49\x38\x56\x12\x84\x4d\xe9\xb3\x5f\xe4\
+\xb5\x7b\x1f\x46\x5f\x71\x2d\x4b\x4e\x38\x0d\xc7\x84\x74\x36\xb5\
+\x22\x8c\x8d\xb2\x02\xd2\x29\x58\xbf\xfc\x02\x82\x07\x7e\x4c\x67\
+\xa6\x0e\xaf\xb9\x13\x64\x80\x40\xc4\x23\x60\xe2\x5f\x67\x59\xbe\
+\x27\xf0\x21\xf0\x30\xbe\x07\x2a\xa4\x7a\xdf\xeb\x3c\xf4\xec\xde\
+\xed\x3f\xd8\x67\x6e\x99\xfa\xce\x5b\xcc\xe4\x25\x37\x11\x7a\xc1\
+\x88\x80\xef\x02\x66\xac\x00\x8c\x49\xd7\xa4\x9b\xae\x58\x31\x7b\
+\x21\x6f\x0c\xee\xc2\xd5\x05\x26\xd6\x35\x31\xe4\x1f\x21\x61\xa5\
+\x48\x98\x24\x9e\x70\x49\x08\x07\x4b\x3b\xd8\xc2\x26\x59\x9b\xc6\
+\xb9\xef\x47\xd4\x76\x8d\xb6\x48\x01\x4f\x4b\xb4\x51\x68\xa1\x71\
+\x84\xcb\xba\x0d\x47\xb8\x73\xfd\x09\x2c\xec\xe9\xe2\xca\x87\x6f\
+\xa3\x69\xd9\x71\x84\xd3\x66\x63\x54\x1c\xb4\x31\xa3\x3e\x22\x0c\
+\xa3\x9d\xaf\x43\x2c\xb7\x48\x7a\xdb\xab\x6c\x1c\x68\xe3\xd1\x95\
+\xf7\x4e\x99\xdd\x99\xff\x42\x6d\x63\xd7\x67\x54\x71\xc0\x53\x7e\
+\x00\x08\x52\x75\xed\xf8\xc3\xbd\x15\x01\xb8\xfa\x94\x59\xd3\xa6\
+\xcd\x6a\x6e\xa8\x61\xe7\xa1\xad\x34\x65\x26\x50\x94\x79\x2c\x6c\
+\x12\xc6\xc7\xd1\x09\x6c\x91\x1c\x21\x0a\xde\x1a\x45\xe6\x68\x5a\
+\x3a\x03\x23\x25\x43\xc1\x00\xf1\x08\xe2\x38\x3e\x0f\xfe\xf2\x08\
+\x8f\xbd\x72\x0c\x57\x9e\x33\x91\xb5\x4f\x48\x7e\xb5\xf0\x33\xac\
+\xc9\xfe\x18\x67\xdb\x23\x24\x66\x76\x13\x36\x34\xa3\x84\x83\xd1\
+\x0a\xa4\x2c\xb7\x4b\xd2\x1d\xc6\xee\xef\xc5\xdf\x7f\x98\x8d\xc7\
+\x9c\xc1\x2d\x85\x33\x58\xd2\x6c\x57\x2d\xbe\xb8\xeb\xfa\xbb\x1e\
+\xcd\xce\x0d\x95\xb9\x44\x58\x4e\x16\xc0\x72\x6a\x48\x66\x26\x57\
+\x04\xe0\x5b\x2b\x7b\x26\xb5\x59\x45\x95\x23\x17\x0c\x30\xa9\xae\
+\x8d\x7c\x98\xc5\x11\x29\x12\x56\x12\x47\x24\xb0\x47\xb1\x1c\x6c\
+\x46\x05\x58\x08\x46\x28\x0e\xc7\xc3\x38\x8a\x21\x99\x0c\x59\xfb\
+\xd4\x61\x1e\x7b\x7e\x0e\xb7\x5f\x37\x99\x2d\x5b\x0e\x53\x4f\x81\
+\x96\xf9\x3d\x0c\xce\xfa\x3c\x43\xeb\x9e\x27\xfb\x8b\x27\x69\x56\
+\xaf\x33\xb1\xce\x50\x95\x72\x40\x2b\x8a\xc5\x80\x1d\x83\x09\x0a\
+\x9d\xc7\x71\xf0\xec\x1b\xd8\xd3\x38\x8d\xa5\x2d\x21\x7d\xbf\xdd\
+\xc6\xb9\x27\xa5\xe9\xbe\xbc\xf6\xf4\x9b\xee\x1c\x7a\x70\x78\x68\
+\xef\x6a\x30\xae\x9b\xdd\x46\xf7\x39\x77\x55\x04\xa0\x13\xc7\x37\
+\xd5\x57\x73\xd8\xed\xc7\xb2\x21\x34\x1e\x52\x86\xe5\xe0\x13\x3a\
+\x85\x63\x25\x70\xe2\xf6\xb1\x88\x2b\x20\x44\x65\xa5\x18\x83\x93\
+\x84\xdf\x6d\x3e\xc4\x7d\xbf\x9c\xc9\xd7\xae\x9b\x42\x8d\x13\xb0\
+\x63\xd7\x10\x37\x7d\xa4\x9b\x0d\x3b\x34\xf9\x41\x8b\xfe\xee\xa5\
+\x3c\xbb\x6c\x29\x0d\x89\xc3\x6c\xd8\xf4\x3a\x49\xaf\x80\xc1\x22\
+\x9f\xa9\x67\xf6\xe2\xd9\x50\x53\x4f\xeb\x44\x90\x7d\x9a\xe5\xc7\
+\x26\xa8\x9a\x33\x9d\xe7\xd6\xf5\xf2\xe1\xcb\x8f\xe1\x93\x97\x34\
+\x2e\xff\xcb\x5b\x9e\xfc\x36\x70\x35\xd8\xf4\xbd\xfc\x4d\xe0\x7d\
+\xc4\x02\x9c\xb6\x64\xd2\x90\xf5\x0e\xe1\x38\xd5\x14\xe4\x50\x39\
+\xe3\x09\x9d\x2c\x0f\x6d\xd4\x42\xce\x28\x51\xf0\x58\x08\x31\x02\
+\x91\x09\x4b\x10\x0e\xe7\xb8\xfb\x81\x06\xce\x7f\xc7\x0c\x66\x4f\
+\x85\x1f\xfd\xfc\x10\x67\xbc\xb3\x9d\xfa\x6a\xc1\xe2\x99\x82\xad\
+\x7b\x15\xa1\x0f\xab\xe6\xdb\x54\x57\x4f\x64\x42\xd7\x44\x7e\xbd\
+\xcb\x43\x1b\xc3\xaa\xe9\x69\x16\xb5\xc2\x9b\x87\xe0\x77\x07\x34\
+\x4b\x3b\x0c\x0b\xa6\x41\xd2\xa9\xa6\xaf\x3f\xc3\x33\x1b\x06\xb9\
+\x70\x59\x23\xcf\x5d\xf8\xae\xab\xee\xd8\xbc\xfa\xd1\xa0\xff\xd1\
+\x07\x4a\x87\x36\x55\x3e\xa7\x91\xb6\xe3\x4a\x97\xa2\x1a\x46\x8b\
+\x90\x82\xcc\x51\x92\xc3\xe5\xe7\xa2\x1c\x25\x47\x4c\x59\x5c\x61\
+\xf4\x1c\xf9\x32\x1e\x59\x7e\xbd\x6e\x08\x25\x67\xb3\xea\xb4\x14\
+\x2f\x6e\x73\xb1\x53\x09\xda\x3b\xaa\x19\xf2\xc0\x49\xc0\x9c\x2e\
+\x9b\x69\xcd\x82\x99\x6d\x30\xa5\x01\xce\x3d\x06\xae\x5c\x50\xc5\
+\x7b\x17\xa4\x39\xaf\x1b\x3a\xea\x61\xfe\x14\xb8\x68\x0e\x9c\x3c\
+\xdb\x06\x01\x85\x00\x4e\x3c\x61\x22\xdb\xf6\xba\x1c\x18\x36\x5c\
+\x7a\x66\x0d\xdd\x4b\x3f\x7e\x2b\x56\x55\xcd\xd8\x2d\xe4\x59\x85\
+\x23\xb9\x41\xa6\x08\x07\x4f\x17\x51\x26\x8c\x33\x1f\xf5\xbf\x53\
+\xee\x7d\x07\x4b\x8c\x62\x11\x57\x00\x00\xcb\xb2\x08\x73\xc3\x3c\
+\xfb\x5c\x17\x67\xbe\x63\x32\xca\x82\xcd\xbb\x8a\x2c\x9c\xd3\xc4\
+\x60\x09\x6c\x20\x50\x90\xb4\x61\x52\x8b\x85\x30\x60\x09\x48\x3a\
+\xb0\xb0\x0d\x0c\x90\xb4\x40\x19\x68\x4c\x40\x43\x8d\xc5\xb0\x0f\
+\xa1\x8a\xb0\x1c\x41\x7b\x47\x86\x97\xb6\x16\x98\x3f\x37\xc3\xa9\
+\xa7\x2d\xea\xd9\xb1\x6e\xf9\x25\xe1\xa1\xc7\xee\xae\x54\x20\xb0\
+\xb7\xee\xeb\x1d\x42\x0a\x97\x4a\xe6\x73\x11\x2a\xca\x72\x41\x8d\
+\x9e\x87\xa2\x2a\x94\xef\xa2\xb3\x6b\x06\xd9\xbe\x63\x88\x42\x6e\
+\x2a\xb3\x66\x55\xb1\xab\x57\x96\xb3\x9f\xae\x71\x18\x76\xa1\x10\
+\x44\xe4\x7d\xca\x82\x72\x3e\x0c\xfb\x91\x77\x25\x78\xb2\x72\x37\
+\xe4\x42\xd6\x85\xbc\x1f\x65\xbf\x18\x42\xb6\x08\x6d\xed\xb5\x1c\
+\x18\x0c\x19\x28\xc2\xfc\x79\x19\x1a\x3b\xcf\x7a\x0f\x20\x2a\x15\
+\x30\xf6\xa3\x3b\xb6\x14\xdf\x3b\xbc\xb2\x40\xca\x56\xd8\x3a\x11\
+\x55\x40\x8c\xa0\x9d\xa3\xfa\x3f\xde\x42\x20\x20\x61\x49\xb6\xbe\
+\x56\xc5\x84\xc6\x56\x52\x19\xd8\xb5\xd3\xa7\xb5\xb9\x9a\x9c\x07\
+\x8e\x80\x84\x02\xc7\x06\xc7\x8a\x9e\x6d\x2b\xaa\x80\x00\xc4\x98\
+\xcf\x0a\xd0\x06\xd4\x28\x1a\xa4\x01\xa9\x20\xd4\x60\x84\x20\x5d\
+\x9b\xe2\x8d\xbe\x90\x96\x49\x09\x5a\x3b\x8f\x3b\xf1\xd0\xc6\xba\
+\x2e\x60\x77\x24\xc0\x72\x7e\x91\x7d\x53\xff\x6e\xfd\xf3\x83\xf3\
+\x16\x9f\x1e\xe2\xb9\x09\x1c\x9d\x88\x04\x88\x31\x02\x2a\x2b\x14\
+\x81\xb0\x2c\x2c\x5d\xa2\x77\x77\x0f\x1d\x2d\x19\x86\xbd\x28\x6b\
+\x89\x74\xa2\x7c\x4e\xda\x90\xb0\xc0\x89\xb1\xad\x8a\x00\x8b\xca\
+\x97\x35\x54\x04\xe8\xb7\x04\xc4\x84\x3a\x12\x55\x5b\x57\x45\xdf\
+\x40\xc0\x94\xce\x04\x13\x26\xb6\x34\x88\x54\xc7\xbc\x8a\x00\x43\
+\x09\xec\x4f\x3e\xf7\x90\xfb\x78\xba\x4e\x8b\x99\x27\x24\xf0\x82\
+\x04\x42\x46\xdb\xc7\xb1\x1c\x2c\xa2\x1f\x31\x51\x9e\x01\x01\x8c\
+\x78\x4b\xa0\xc2\x22\xb9\x81\x24\x3d\xd3\x13\x1c\x1e\x06\x2b\x99\
+\xc0\x53\x10\x8c\xa2\x19\x2b\x40\x94\x89\x2a\x20\xa0\x52\x80\xa3\
+\x05\x28\x53\x11\x10\x2a\x30\x8e\x8d\xaf\x45\xb9\xd5\xd2\xb5\x69\
+\x2c\xa7\x69\xfa\xd8\x6f\x21\x21\x9e\x90\x45\x71\xd5\xbf\xdd\x21\
+\xbf\xdd\xbf\x92\x9a\x79\xa7\x4a\xea\x9a\x3c\x8c\x65\x23\xb5\x8d\
+\x18\xc5\xd8\x58\xfa\xad\xf6\x11\x58\x58\xc8\xb0\x80\x57\x02\x69\
+\x04\x43\xae\xa1\x2a\xe1\x30\xec\xc7\xed\x63\x8d\x60\xc7\xc1\x8f\
+\x27\x20\xc6\x18\xd0\x8c\x11\x70\x54\x15\x8c\xed\x30\xe8\x46\x6b\
+\x1b\xe3\xd4\x55\x04\x38\x16\x84\x80\x25\xee\xd1\x6f\x1c\x7a\x75\
+\xe3\x0f\xd3\xb7\xbc\xf6\x54\xdd\x39\x1d\x73\x13\xce\xe4\x19\x8a\
+\x09\x6d\x8a\x9a\x7a\x48\xa5\xc1\x49\x08\x6c\x5b\x20\x46\x05\xd8\
+\x20\x75\x09\x29\x5d\x8a\x25\x49\x49\x0a\xec\x84\xa0\xe0\xc7\x99\
+\xb7\x21\xa1\xc6\x0a\xb0\xc4\x98\x19\x38\x5a\x80\x8e\x44\xc8\x4a\
+\x2b\x11\xc6\x5e\xdb\x36\x39\x17\x4a\x05\x1f\xa3\x24\x95\x2d\xd4\
+\x97\xab\xbc\xcd\xf7\x37\xb1\x7b\xf7\x05\xfe\xba\x6d\x8b\x77\xdd\
+\xb3\xe7\x73\xcf\xdd\x7a\x78\xed\xcf\x3f\x97\x7f\xfd\xfe\xcf\x7a\
+\xd9\xfb\xfe\x3a\xf4\xee\xbb\x39\x34\xf7\x7d\x21\xe4\xbe\x2f\x05\
+\xdc\xff\xe5\x80\x07\xbf\x2a\xd9\xbf\x7b\x90\xec\x91\x22\xa1\x80\
+\x92\x84\x42\x18\x51\x0c\xa0\x30\x3e\xe4\xdf\xc2\x8f\x7c\xc1\x8f\
+\xef\xc7\xf9\x5b\x5f\x47\xc9\xc9\xf6\x0f\x83\x2e\x0e\x55\x2a\xb0\
+\xb1\x17\x4e\xcd\x80\x95\xac\x08\x09\xbc\x8d\x65\x72\x40\x1f\x19\
+\x89\xd5\x2c\x85\xdd\x08\x22\x83\x65\x57\x23\x44\x02\x63\x40\x68\
+\xdf\xc9\x0c\x9d\xde\xbb\xad\xff\xc6\xd9\xe1\x14\x14\x95\xac\xc7\
+\xfd\x8f\x3d\x4e\x05\xc6\xce\x40\x5c\x85\x98\xb8\x85\x50\x95\x0a\
+\xa0\x04\x64\x07\x02\x0e\xec\xda\x2b\x8d\xec\xdd\x3e\x76\x06\x9e\
+\xdf\x0e\x0b\x7a\x2a\x02\xc6\x92\x07\x9d\xc7\xe8\xdd\x00\x28\xc6\
+\x58\x75\xed\xd9\xaf\xf4\x6d\x7e\xe3\x43\xfb\x77\xce\xac\x6b\xeb\
+\x69\xc0\x0f\x38\x7a\xfb\x1c\xb5\x42\xc7\x0a\x20\xee\x7f\x13\x05\
+\x5f\x59\xa7\x15\x10\x69\xd8\xf9\x62\x1f\xb9\xde\xf5\xaf\x1b\x75\
+\x78\x53\xa5\x85\x00\xa4\x82\xf5\xdb\xc0\xf5\x79\xfb\x26\x06\x82\
+\xbc\xfb\x8f\x2f\xdf\xfb\x02\x43\x79\x8d\x2b\xa2\x92\xc7\x8c\x6d\
+\x97\xa3\x5a\x28\x3e\x8f\xdb\x3e\x51\x3b\xfa\x09\xd8\xf3\xda\x30\
+\x9b\x1e\xde\x80\x2c\xfe\xeb\xdd\x60\xfa\xc7\x56\x20\x4e\x01\xb9\
+\x02\x6f\xdf\x0c\x96\xc5\x97\xfb\x5f\x7d\x73\xd1\x33\xb7\x3d\xbe\
+\x72\xe1\xfb\x4f\xa5\xa1\xb3\x96\x50\x82\x90\x60\x13\xb7\xcf\x38\
+\x43\x1c\xb7\x4f\xbc\x4a\x2b\x28\x00\x27\xf2\xfb\x5f\x3c\xc8\x2b\
+\xdf\x7f\x81\x7c\xef\x3d\xf7\x6b\xb9\xf9\x2e\x62\x73\xf8\x53\x4d\
+\x64\x40\x38\x00\xae\x9d\xb0\x2e\xe8\x7b\x69\xe7\x6d\xd9\x1d\xfd\
+\x1f\x9c\x76\xfa\xf1\x76\xe7\x92\xe9\xd4\x75\x34\x90\xac\x16\xd8\
+\x0e\x58\x95\xd6\x89\x01\x43\xc5\x0c\xa0\x63\x31\x32\x04\x37\x17\
+\x92\xdd\x35\xc0\x9b\x4f\xef\x64\xdf\xf3\xaf\xb8\xd2\x7b\xe4\x4e\
+\xcc\x33\x5f\x02\xb2\xff\x7d\x02\x8c\x87\x91\x03\x40\x0a\xa0\x64\
+\x27\xed\x8f\x7a\x43\xc5\x3b\xb7\xdc\xf7\xdd\xab\xb7\x3e\xd4\x79\
+\x56\xa6\xad\xab\x2b\xd3\xde\x66\xd7\xb6\x36\x50\xd5\x58\x43\xb2\
+\x26\x85\x9d\xb2\xb1\x13\x4e\xa5\x02\x1a\x54\x10\x22\x7d\x89\x9f\
+\xf7\x70\x07\x0a\xe4\x0f\x0c\x90\xef\xdd\x1f\x16\x0f\xed\x7a\x13\
+\x36\x3d\x03\x2f\xff\x04\x86\x46\x3c\x0a\xe0\xbf\x4f\x00\x21\x85\
+\x03\x9f\x26\x3d\xe1\x5b\xc4\x86\x65\x5b\xeb\x8d\xfc\xcd\x7a\x1d\
+\xee\xab\xc9\xed\xcd\x1c\x9b\xdb\xdb\x34\x17\x9a\xa6\x43\x7a\x32\
+\x64\x1a\xa1\xaa\x1a\x2c\x07\xec\x2a\x00\x90\x1e\x68\x09\xa5\x12\
+\x14\x73\x30\x7c\x00\x06\x77\xc3\xe1\xed\x90\xdd\x0a\x1c\x64\x1c\
+\xfb\xff\xff\x56\xf9\xbf\xb6\x7f\x07\x3d\x3b\xcc\xf1\xa3\xb2\xb6\
+\x47\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x0e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x04\xd5\x49\x44\x41\x54\x68\x81\xed\x98\x4f\x4c\x5c\x55\
+\x14\xc6\x3f\xc5\x44\x93\x66\x6c\x94\x56\x29\x35\x2d\x09\x63\x2c\
+\x01\x69\x29\x43\x45\xde\xd0\xa1\x20\x14\xb0\xc8\x20\x4a\x5b\xb0\
+\xe5\x4f\x05\x06\x34\x2d\xcd\xc0\x4c\x67\xf8\x2b\x28\x1b\xc5\x26\
+\x6d\x44\x68\x69\x53\x18\xc0\x3e\xe9\xc4\x85\x49\x37\x1a\x6d\x17\
+\x8d\x7f\x20\x94\xa8\x69\xdc\x19\xdd\x18\x17\x24\xa6\xba\x70\xd3\
+\x5c\xcf\x6d\xd2\xc2\x7b\xf6\x9e\xab\x71\x01\xe8\x0c\xf9\x25\x84\
+\xef\xe3\xbc\x77\x72\xbe\x7b\xef\x9b\x07\xc4\x3e\xab\xe0\x93\x08\
+\x64\xd4\x01\x73\x0d\xc0\xac\x8a\x6c\xe0\x34\xa7\x4b\xdc\xc0\xa8\
+\xce\x63\x68\xea\x54\x03\xf3\x39\xc0\x29\xce\xf3\x02\xf0\x35\xdd\
+\x76\xdc\xdd\x06\xb6\x00\x46\x2f\x20\xfa\x18\x3c\x40\x84\xd3\x25\
+\x7b\x01\x53\xe7\x29\x02\xa6\x38\x3d\x48\x14\x03\x93\x9c\xc7\x07\
+\xdc\x8c\x35\xb0\xaa\x1a\x78\xe2\x41\x38\xf7\x38\x30\xc1\x91\xee\
+\x40\x58\xe7\x29\xdc\x80\x9e\xea\x04\x4c\x70\xb8\xd6\xf3\x75\xf2\
+\x1c\x88\xa4\xaf\x43\x88\xf3\x18\xeb\x10\xa1\xdb\xbe\x6f\x69\x02\
+\x0e\x18\x3d\x1e\x88\x5e\x06\xcf\x56\x44\x38\x5d\x12\x34\x60\x8a\
+\x6e\x08\x0e\xef\x36\x4c\x71\x35\x02\x06\x4d\xc0\x89\x49\xce\xd3\
+\xec\xba\x3d\x81\x07\x62\x0d\xac\x70\x03\x4b\x6b\x20\xde\x81\x6d\
+\x2f\xa7\x62\x74\x7f\x1a\x46\x54\x6c\x7f\x1c\x27\x38\x5d\x52\xf5\
+\x34\xba\xa2\x55\x18\xe1\x30\x92\x10\xe2\x6a\x78\x53\x70\x6e\x67\
+\x22\x3a\x38\x4f\xa1\x13\xe7\xe9\xb6\xef\xbf\xdb\x40\x42\x3c\xb2\
+\x6a\x4b\x30\x57\x5f\x8a\x59\x15\x59\x4f\x61\x98\xd3\x25\x75\xc5\
+\x18\xbb\x7a\x0a\xb3\x1c\x79\x19\x18\xe1\x6a\x1c\x7c\x0e\xd7\x77\
+\xa5\xf0\xd7\x7a\x3e\x07\xb3\xd6\x6d\xf4\x31\x8a\x50\x1d\x8d\xa7\
+\x5e\x8d\x67\x3b\x45\x88\xd1\x25\xc1\x83\x14\xa1\x2b\x14\x15\x06\
+\xef\x6e\x8a\x10\x53\x23\x50\x4d\x11\xda\x45\x11\x62\x3c\xcd\xe5\
+\xf6\x35\xb0\xe6\x1b\xd8\x08\x77\xe7\x61\x88\x2e\x06\xd9\x00\xa7\
+\x4b\xa8\x81\x0f\xff\xf8\x04\x82\xa3\xdc\x8d\x29\xae\x86\x7f\x3f\
+\x44\xa1\x0b\xd3\x9c\xe7\xd5\x32\xdb\x22\xce\xcc\x44\x72\x7f\x3f\
+\x4c\x8e\x92\x12\x74\xe6\xe7\xc3\xe4\xa8\xac\x44\x8f\xae\x8e\x61\
+\x20\xc4\xd5\xf0\x78\x30\x53\x53\x83\x4e\xae\x86\xdf\x0f\xd3\x72\
+\x90\x65\x67\xc3\xb8\x75\x8b\x46\x2c\xd4\xd4\xd7\x53\x84\x7a\x69\
+\x84\x0c\xc1\x20\x45\x88\xa9\x21\xf1\x7a\x29\x42\x4c\x8d\x40\x00\
+\x62\x68\x08\x93\x5c\x8d\x85\x05\x5b\x84\x62\x0d\xac\x74\x03\x72\
+\x0d\x98\x26\xce\xce\xcc\xe0\xcc\xbd\xb8\x74\x09\xa3\xe5\xe5\x68\
+\xaf\xaa\xc2\x19\x8e\x43\x87\x10\x52\xd5\xb8\x03\x65\xbc\x83\xab\
+\x51\x51\x81\xf3\xad\xad\x38\x2e\xaf\xa9\xaa\x71\xf2\x24\xce\x59\
+\x0e\x32\x17\x4d\xe0\xda\x02\xc4\x17\xdf\xa8\x69\x0b\xc0\xfc\xf2\
+\x5b\x88\x3b\xdc\xcb\x13\xee\xc3\x47\x5c\x0d\x49\x41\x31\x66\x1a\
+\x5a\x20\x54\xd4\x34\x40\xb4\x87\x11\xe5\x6a\x8c\x9b\xf8\xdd\xb2\
+\x0b\xc9\x06\x7e\xa5\x08\xdd\x14\x6a\xe8\xe6\x22\x9c\x2e\x19\x7c\
+\x17\xa6\xce\x53\x4a\x11\x0a\xf6\x51\xdc\x14\x1c\x0b\x52\x1d\x8a\
+\x10\x57\xe3\xda\x82\x6d\x1b\x5d\xa3\x0d\x2c\x5b\x03\xcf\xc0\xfd\
+\xdd\x0f\x10\x37\x7e\x52\xe3\x0f\xe2\x03\x4e\x97\x74\xbf\x85\xe8\
+\x8d\x1f\xe9\x77\x86\xa2\x52\x5c\x6c\x39\x0e\xa1\x42\xc6\x28\x4c\
+\x7b\xfd\x5f\xea\x2f\xab\x11\xbd\x8c\xdf\x2c\x0d\x24\xef\x84\xb3\
+\x6d\x18\xe3\xfe\xf7\x71\x41\x45\xc9\x11\x04\x39\x5d\x52\x79\x14\
+\x9d\x3a\xcf\x8e\x5c\x04\x9e\x2d\xc3\x05\x15\x59\xc5\x88\xec\x6b\
+\x42\x80\xab\xd1\xf0\x06\x26\x2c\x8b\x38\x95\x22\xf4\x19\x45\xe8\
+\x8a\x50\x53\x4b\x11\xe2\x74\x49\x2b\x45\x48\xe7\x71\x53\x84\xa8\
+\x96\x50\x71\x80\x22\xf4\x1a\x45\x88\xab\x31\x66\x8f\x50\xac\x81\
+\x95\x69\x60\x69\x17\x72\xd2\x41\x76\x62\x1c\x91\x30\x43\x59\x33\
+\x82\x9c\x2e\x79\xf1\x18\xba\x74\x9e\xf4\x5c\x84\x72\x2b\x10\x51\
+\x91\x53\x86\xe9\x72\xcd\xb5\x7c\xef\x60\xd2\xb2\x06\xb6\xd0\x04\
+\xda\x7f\x86\xe8\xf8\x45\xcd\xee\x30\xa6\x38\x5d\x92\x3f\x88\xa8\
+\xce\x53\xf0\x26\x2e\x72\xfa\xeb\xdf\x43\xec\x19\x80\xc9\x79\x0e\
+\x7f\x7a\x7b\x17\x8a\xb3\x34\xd0\x4b\x11\xea\x13\x6a\x3c\x14\x21\
+\x4e\x97\xec\xa5\x08\xe9\x3c\x45\x6f\xd3\x8b\x2d\x46\x0f\x2e\x52\
+\x1d\x8d\xc7\x67\x8f\xd0\x7f\xa2\x81\xa6\x39\xfa\xaa\x36\xaf\xc6\
+\xa0\x67\x21\x4e\x97\xe4\xd1\xb3\x90\xce\xe3\xe9\xc6\x0c\xa7\xd7\
+\xd1\xd7\x4e\x77\x08\x51\xce\xf3\xd2\xb4\xed\x59\xe8\xe1\x1d\x78\
+\x32\x95\x9e\xfe\xd2\xa2\x18\x51\x91\xd0\x88\x76\x4e\x97\x6c\x6e\
+\x43\x48\xe7\x49\x68\x41\x07\xa7\xa7\x4c\x60\x6c\xb3\x0f\x7e\xce\
+\xe3\xb4\x3f\x8d\x3a\x68\x02\x1e\x8a\x90\x47\xa8\xd9\x4a\x11\xe2\
+\x74\x49\x32\x45\x48\xe7\x71\x52\x3c\x38\xdd\x58\xd4\x7b\x5c\xf6\
+\x73\x60\xd5\x35\x40\xe7\xc0\xff\xab\x81\x87\x92\x90\xb4\xe9\x08\
+\x06\x36\x35\xaa\x59\xef\x46\x13\xa7\x4b\xe2\x0b\xd0\x9a\xd8\x84\
+\x7e\x8e\x47\x72\xe1\xb3\xff\xcd\x52\xa7\x16\x83\x8f\x7a\xd0\xa8\
+\xfa\x7f\xe9\xd9\x78\x00\x83\x58\xfe\x56\x02\xf4\x38\x0d\x9a\x00\
+\xfb\x43\x13\xd0\x38\x04\x68\x02\x5a\x0f\x4d\x80\xd5\x17\xff\x86\
+\xc7\x3e\x01\x50\x84\x62\x0d\xac\x68\x03\x19\x70\xe1\x73\xcc\xe1\
+\x2a\xbd\xf5\x55\xe1\xc3\x7b\xac\x2e\xf1\xe3\xac\xd6\xd3\x86\x61\
+\x56\xff\x18\xd7\x71\x54\x73\xad\x51\xdb\xdb\x69\xe4\x20\x8d\x04\
+\xbe\x81\x00\x86\xb4\x37\xd7\x8f\xd3\x5a\x4f\x0f\xcd\x89\xd3\x2f\
+\x63\x1e\x5d\x1a\xcf\x04\xbe\xb2\x1c\x64\x6b\x34\x42\x71\x6b\xbd\
+\x81\x55\xbc\x88\xe9\x20\xfb\x67\x0d\x64\x62\x03\x06\xd0\xc8\x52\
+\x8d\x52\xad\xa7\x11\xfb\xfe\x75\x9d\x1e\x34\xe3\x15\x14\xb3\x9e\
+\x76\xf2\x58\x0e\xb2\x35\xfc\xf9\x13\xd5\x98\xa6\x54\x48\x88\x3c\
+\x6f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x0c\xbd\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x0c\x84\x49\x44\x41\x54\x78\x5e\xed\x99\x6b\x8c\x5c\xe5\
+\x79\xc7\x7f\xcf\x7b\x2e\x33\x3b\x33\x7b\xb3\xd7\x5e\xbc\xb6\xd7\
+\xc1\x2e\x97\x84\xba\x60\x4c\x20\x41\xad\x43\x44\x40\x54\x90\x96\
+\x4a\x69\xaa\x5e\x48\x3f\xd0\x36\x11\x48\xfd\xe2\xa8\x4a\x2b\xd4\
+\xa4\x5f\x9a\x56\x8d\x69\xa5\x82\x54\x55\xa9\xc4\xa5\x06\xda\x28\
+\x21\x26\x16\x81\x26\x01\x1a\x30\x57\x63\x0a\x76\x6c\xbc\xbb\xe0\
+\xcb\x7a\xbd\x37\xef\x75\xee\xe7\x9c\xf7\x7d\x0a\x47\x87\x1d\x8d\
+\xd8\xc1\x1f\xa8\x54\x45\xf2\x5f\x7a\x75\x34\x1f\x1e\xcd\xf3\x9b\
+\xff\xff\x79\xe7\xd1\x8c\xa8\x2a\xbf\xcc\x32\xfc\x52\xeb\x02\xc0\
+\x05\x80\x0b\x00\x3e\x99\x66\x66\x66\x98\x9b\x9b\x03\x11\x50\x45\
+\x69\x49\x00\x50\x50\x47\x2a\xf1\x00\x41\xbd\x9c\x87\xf1\x7d\x40\
+\x50\x1b\x8b\x6d\x58\x9c\xcd\x8a\x04\xf5\x8b\x21\xb9\x35\xfd\xea\
+\x85\xdd\x80\x07\x80\x6a\xa2\xea\xea\x44\xcb\x55\xb1\xcd\xba\xd8\
+\x46\x24\x6a\x11\x1c\x88\xe0\x54\x50\x04\x14\x10\x30\x02\x22\x42\
+\x26\x54\x95\x52\xa9\xc4\xa6\x4d\x9b\x10\x91\x16\xc0\x7d\xf7\xdd\
+\xc7\xfd\xf7\xdf\x4f\x6f\x57\xa1\xbf\x2b\x08\x86\x4a\x41\xd0\xe3\
+\x89\x8a\x45\x24\x32\x85\xb0\x1e\xac\x31\xb5\xe2\xe6\x7c\xb0\x66\
+\xeb\x70\x61\xcd\x96\xcd\xc5\xee\xfe\x8b\xba\x7a\xd6\xf5\x05\x5d\
+\xdd\x05\x40\x9a\x8d\x5a\x75\x71\xf6\xcc\xd9\xa5\x53\xaf\x1d\xee\
+\x9a\x7b\x63\x2e\xd9\xf4\xb9\x2d\x1b\xb7\x7f\xe1\x86\xe1\x2d\xa5\
+\x6d\x03\xbd\x7e\x6f\x21\x27\x9e\xef\x41\x14\xbb\xa4\xda\x88\xab\
+\xcb\x8b\xb5\xe5\x85\x85\x85\xd9\xf9\xd9\x89\xb3\xef\xd5\x4d\x44\
+\xf3\xe3\xe5\x5c\x65\x42\x2e\x36\x27\x74\x5d\xa1\x69\xf2\x21\xf9\
+\xc5\xb2\xb3\x23\x13\xe5\xe7\x4f\x2f\x2d\x3d\xef\x54\x15\x20\x49\
+\x12\x6e\xbe\xf9\x66\x1e\x7a\xe8\x21\x82\x20\x68\x01\xd4\xab\x55\
+\x6f\x03\x7c\x65\xc7\xba\xdc\xd7\x2e\xea\x77\x17\x7b\x01\xf9\xe3\
+\xc1\x4d\xc8\xc6\xcf\x48\xef\xe6\x4b\xcc\xba\x8d\x1b\x65\x68\xc3\
+\x1a\x6f\xd3\x40\x57\x30\xd8\x67\xa4\xaf\x00\xa5\x1c\xf8\x86\x54\
+\x91\x85\xd9\xca\xb5\xbc\x79\xf2\x56\xad\xcf\x9f\xd5\xe1\xe1\x0d\
+\x72\xf5\xd6\xbc\x0c\x14\x21\xe7\x83\x67\x58\x91\x55\x48\x6c\x2f\
+\xcd\x04\x2a\xd1\x4e\x16\xaa\xca\xd4\x92\xe5\xf1\x83\x15\x4e\x9e\
+\x78\x97\x92\x79\x9d\xbf\xfc\xe4\x7e\xca\xb3\xcb\xdc\xff\xef\xb5\
+\xb1\x77\xc6\xcb\xb7\xce\xd5\x6b\x23\x64\x5a\x5c\x5c\x24\xe3\x41\
+\x32\x30\xee\xfd\xe6\xb7\x3e\x3b\xf1\xdf\x7b\x9f\xf8\xf2\xad\xa5\
+\x81\xc1\xc1\x12\xff\x39\xb1\x8b\xc6\xe5\xbb\xf9\xe3\x1b\xd6\xb0\
+\xb6\x08\x5d\x01\x78\x42\x26\xa5\x93\x54\x85\xe9\xf9\x3a\x7d\xdd\
+\x21\xf9\x40\xb0\x4e\x51\x4d\x0f\x99\x10\x01\x11\x69\x3b\x00\xa3\
+\xf3\xc2\x91\x59\x78\xe0\x47\xc7\xf8\x87\xe1\xbf\x61\x4b\x38\xc5\
+\x03\x7b\x27\xe3\x3d\xcf\xcc\x7d\x69\x74\x7e\xee\x09\x32\xdd\x72\
+\xcb\x2d\xec\xdb\xb7\x8f\x30\x0c\x5b\x0e\x5c\x54\x2a\x5d\xd7\xb3\
+\x4d\x07\xae\xd9\xbe\x9e\xb7\x16\x36\xf1\x7a\xd7\x9f\xf2\xf5\x4f\
+\xaf\x61\x4b\xbf\xe2\x9c\xc3\x59\x25\x72\xae\xbd\x99\x56\x2e\x57\
+\x1a\xf1\x3c\x8f\x24\xb1\xd4\xeb\x0d\xd4\x1a\xd4\xb9\xce\xb8\xb4\
+\xf2\x6d\x8c\xc1\x97\x80\xf5\x25\x8f\x30\xcc\x51\x8d\x3c\x24\x27\
+\x74\xe7\xd5\xcf\x79\xde\xc0\x79\x87\xd8\xf7\x58\x93\x0b\x15\x54\
+\xa9\xc7\x42\x3e\x17\xd2\x9d\x27\x6d\xc6\x5a\xbb\xd2\x68\x27\x39\
+\x4d\x6b\x01\xc1\x3a\x87\xb5\x06\x00\xcd\x2e\x85\xf3\x4a\x15\x23\
+\x8a\x11\xf0\x82\x90\x4a\x1c\x20\x02\x5d\x39\x95\x9c\x67\xfa\xcf\
+\x0b\xa0\x9a\xda\x8d\x73\x0e\x8f\x04\xd4\xe2\x00\x55\xd0\xd6\x13\
+\x14\x74\xa5\xa6\x55\x0b\x8a\x22\x38\xc0\x3a\x68\x5a\x25\xe7\xc0\
+\x29\xa0\xed\x4e\x01\x08\x80\x80\x28\x64\x26\xe0\x09\x18\x21\x8d\
+\x46\x39\x0e\x00\xa5\x2b\x2f\xac\x0d\xfc\x4b\xb6\xf4\xaf\xfd\xfc\
+\xf0\xf6\x2b\x87\xc7\x46\xdf\x7e\x53\x44\xde\x04\xb4\x0d\x00\x68\
+\x38\xab\x58\x67\x31\x58\x04\x47\xe2\x20\x3d\xb6\x05\x41\xeb\xd9\
+\x06\xa4\x19\x91\x41\x49\x9c\x42\x0c\x91\x03\x75\x2d\xf0\x56\x6c\
+\x68\x87\x00\x8c\x90\xd6\x7a\x19\x40\x65\x29\x04\x51\x02\x2f\xe1\
+\x4a\xc3\x1f\xde\x34\x38\xf8\x47\x17\x7d\xe1\x96\x42\xed\x0f\xbe\
+\x72\xfa\xcd\xb7\x0e\xfe\x89\xaa\xfe\xb4\x1d\x00\x9c\x53\x4d\x33\
+\x6b\x48\x52\x90\xa6\x85\xd8\x69\x0a\xd1\xee\xc0\x6a\x2e\x80\x02\
+\x06\xb0\x29\xb8\xa3\x60\xc9\x1c\x10\x14\x45\x54\x40\xda\x41\x32\
+\x08\x8c\xb4\xe0\x72\xa1\xcf\x72\x92\x27\x49\x1c\x4b\x93\x96\xdb\
+\x7f\x7d\x57\xc9\x9b\x5f\xe0\xa7\xff\xf8\x77\xc8\x8d\x5f\xdc\x72\
+\xd9\x67\x76\xde\x2e\x22\x1f\x02\x88\x12\x0b\xd6\x3a\x3c\x2c\xce\
+\xb9\x14\x20\x71\x10\xa7\x00\x9d\x63\xa4\xe8\x0a\x84\x51\xb0\x4e\
+\x53\xf0\xcc\x01\xb2\x12\x24\x2b\x62\x15\x07\x44\xd2\x62\x62\x07\
+\x41\xe0\x53\xb5\x79\x8e\xbc\x36\x47\xd1\x6d\x67\xb0\xbb\x97\x57\
+\x9f\x7a\x9a\xcb\x8a\x05\xc6\x7e\xf4\x18\x73\x52\x9f\xe0\xcf\xbf\
+\x46\x3b\x00\x12\xa3\x8a\xaa\xc3\x68\x82\x5b\x71\x00\x22\x0b\xf0\
+\x51\x00\x82\x66\x54\x06\x48\x14\xa2\x24\x8d\x20\xce\xad\x72\xed\
+\xba\x95\xc6\x5b\x10\x59\x84\x22\x0b\x7e\xce\xe7\xe8\x48\xc2\x27\
+\x26\x7b\xd9\x71\xc9\xe5\x1c\xfa\xc1\xf7\xf1\x82\x00\xd3\x68\x30\
+\xd2\x6c\x1e\x68\x96\x97\xf7\xaa\x6a\x3b\x40\xe2\x9c\x4d\xac\x92\
+\x3a\x20\x49\xea\x40\x23\x81\x44\x21\x76\xd9\x90\xaa\xac\x64\xbd\
+\x05\xd2\x3e\x1f\xa2\xd9\x10\xc7\x8e\xb8\xd3\x0c\xb4\xb9\xa0\x20\
+\x82\x00\x81\x40\x53\xa1\xd8\x98\x22\x3a\x3a\xce\x55\xd7\x5d\xcf\
+\xe8\x73\xcf\xd1\x58\x5e\xa6\xd4\xd5\xc5\x81\xa9\xa9\x93\x4f\xc1\
+\x5f\x5c\x09\xa7\x05\xda\x01\x2a\x51\xd4\xb4\x96\xb4\x71\x51\x97\
+\x3a\x10\xb9\x2c\x42\x56\x51\xd5\xb6\x46\x5b\x0e\xb4\xe2\x93\x11\
+\xa4\x35\x51\xac\x24\x4e\x70\x4e\x41\x59\x55\x22\xed\x4f\xa3\x50\
+\xad\xd4\xe8\xf9\xd9\xbf\xf0\xa5\x2b\xd7\x30\x7b\xec\x18\x33\x23\
+\x23\xf4\xae\x5d\xcb\x2f\xc6\xc7\xcb\xfb\xe1\xaf\x27\xe1\xc5\x2b\
+\x57\xbd\x46\x51\x75\xea\x70\xd9\x10\xe3\x12\x6a\x31\xc4\x59\x8c\
+\x54\x05\xa0\x03\x44\x2b\x5a\x62\x04\x8b\xac\x44\xa8\xdd\x81\x0e\
+\x2e\x64\x2f\x7c\xa7\xcc\xee\x7b\x98\x6b\xea\x67\xc9\xa9\xe5\xd8\
+\x0b\x07\xe8\x1d\x18\x60\x62\x72\xd2\x3d\x69\xed\x7d\xc7\xe0\xd1\
+\x8e\xdb\x28\x2a\x4d\x6b\xc5\xbd\x27\xc3\x07\x0e\x58\xb0\x0a\x91\
+\x13\xd0\xcc\x05\x3a\x5d\xa5\x2d\xaa\xd4\xb5\x38\x03\x50\x40\x05\
+\xd0\xd6\x30\x93\x49\x5b\x20\xc6\x33\x8c\x3d\xf3\x13\x86\x0e\x3f\
+\xcf\xd6\x81\xb5\x1c\x7a\xec\x31\x0a\x7d\x7d\x2c\xcd\xcf\xf3\x56\
+\x18\xd4\x46\x44\xf6\xdb\x7a\x3d\xe9\x0c\x00\x4e\x95\x15\x07\x44\
+\x13\xea\x09\x59\x84\x00\xed\xfc\xe9\x43\x0b\x4c\x04\x2c\x42\x9c\
+\x38\xac\x6b\xcd\x4a\x5b\x91\xb4\x3b\x21\xc6\x70\xee\xed\xa3\x2c\
+\xed\xfb\x0f\x3e\x37\xbc\x91\xa3\x8f\x3f\x8e\x88\x90\x34\x9a\x4c\
+\x15\x2a\xac\xdf\x36\xe4\x77\x1d\xad\x16\xa9\xd7\xe9\x0c\x20\xc4\
+\xd6\xa9\xb3\x99\x03\xea\xdc\x0a\x40\xe2\xda\x72\xde\xae\xd5\xe2\
+\x21\x69\x84\xb0\x0a\xe8\x2a\x11\xd2\x16\xac\x88\xa1\x7e\xee\x1c\
+\x67\xf7\xfe\x2b\x37\x6c\xde\xc0\xf8\x0b\x2f\x50\x7d\xef\x75\xae\
+\xd4\xcd\xf1\xca\x14\xd7\xfc\xfe\x10\x63\x13\x12\x78\x47\xb3\x75\
+\xa2\x73\x84\x88\x9d\x13\xd5\x6c\x95\x10\x8d\x88\x2c\x88\xb4\xe7\
+\xb6\xf3\x34\x2a\xad\xa6\xc8\x1c\x00\xa1\x1d\xa0\x5d\x82\x8b\x22\
+\x4e\x3e\xf2\x5d\x76\x16\x03\x6a\x63\x63\x4c\x1f\x39\x42\x71\x60\
+\x80\x91\xc9\x09\xb6\x7d\x79\x90\x4b\xb6\x77\x33\x3e\xb3\xec\xe5\
+\x7c\xd3\xf7\xd1\x00\x82\x53\x55\xb5\xd6\x81\x71\xa8\x6a\xea\x80\
+\x53\x30\x02\x4a\x9b\x3a\x03\x09\xa4\xf6\x5b\x87\x53\x6d\xb1\x01\
+\xba\x8a\x03\xa7\xf7\x7f\x8f\xad\xf3\x13\xf4\x7a\x86\xc3\xcf\x3e\
+\x9b\x36\x7f\x7a\x7a\x96\x03\x97\xdf\xc8\x67\x3f\xbd\x84\x30\x4f\
+\x3e\x54\x4a\x61\xb0\xe6\x7c\x0e\x34\x9d\x4b\x87\x18\x63\x12\x8c\
+\x8b\x68\x26\x80\x08\x46\x04\x45\x61\x95\xcd\xb2\xb5\xc6\xb5\x9a\
+\x72\x9e\xe0\xac\x43\x55\x49\x6b\x05\xd0\x16\xb0\x0a\x18\xe3\x31\
+\xf5\xca\xcf\x29\x1d\x7a\x9e\x4b\x87\x06\x39\xb2\x77\x2f\x61\x4f\
+\x0f\x8b\xf3\xf3\xbc\xf1\xa9\x5d\xbc\xfd\x1b\x7f\x45\xc5\x7e\x13\
+\xd0\x14\x20\x30\x72\x1e\x00\xd2\xd8\x93\x02\xa8\x03\x4d\x57\x89\
+\x6c\xd1\xd2\x95\x65\x0d\x01\x59\xed\x3e\xd4\x56\x84\x7c\x03\xd6\
+\x29\xa4\x00\x06\xa5\x05\xad\xd9\xee\xbf\x7c\x72\x8c\xc6\xfe\xc7\
+\xb8\xf1\x13\x9b\x79\x77\xdf\x3e\x9c\xb5\x58\xe7\xf8\x9f\xbe\x21\
+\x96\xbf\xfa\xf7\xd8\xe9\x5e\xaa\xb1\x0f\x28\xb9\xc0\xd1\x93\xcb\
+\xf7\x0b\x82\xa2\xab\x03\x54\xe2\xa8\x99\xb8\x54\x18\xb5\xf8\x44\
+\x69\x84\x14\xf0\x4c\xd6\x9f\x74\x8a\x91\xb6\xef\x37\x46\x70\x1f\
+\x00\x18\x50\x97\x31\x42\xea\x48\x73\x69\x91\xe9\x47\xbf\xcb\xae\
+\xcd\x83\xcc\xbc\xf4\x12\xe5\x33\x67\xf0\xfb\xfa\x18\xa9\x56\x59\
+\xff\x8d\x6f\x73\x62\xeb\x15\x24\x33\xd3\x54\x93\x10\x55\x47\x2e\
+\x84\xc0\x68\x3f\xe0\x01\x76\x55\x00\xeb\xd4\x25\xd9\x37\x31\xa9\
+\x03\x96\x38\x1b\x62\x4f\xc8\x62\xf0\xd1\xf9\x17\x01\xb2\x38\xe9\
+\x07\x00\x59\x6d\xc6\x8f\xda\x84\xf1\xef\x3d\xc0\x55\x79\x81\x53\
+\xa7\x99\x3e\x78\x90\xfc\xba\x75\x1c\x9f\x9a\xa6\x77\xf7\x3d\xac\
+\xbf\xf9\x37\x79\x61\x0c\xac\x17\x52\x89\xf3\xa8\x2a\x81\xaf\x94\
+\x42\xd3\xe7\x1b\x13\xc4\xce\xae\x0e\x00\x24\xaa\xd8\x14\x20\x75\
+\x20\xa6\x91\x64\x94\x66\x95\x9b\x44\x40\xda\x71\x20\x1b\x5a\x15\
+\x41\x35\xdd\xab\xda\x00\x10\xc3\xa9\x27\x1f\x67\xd3\xf4\x49\x06\
+\xbb\xf2\x1c\x7b\xfa\x69\xf2\x03\x03\x8c\x4f\x4f\x93\xfc\xd6\xef\
+\x72\xd9\x1d\x7f\x46\xc5\x40\xec\xc0\x9a\x80\xb2\xed\x4a\x73\xed\
+\x07\x4a\x21\xa0\xc7\x33\x26\x17\x3b\xdb\xe8\x04\x60\x55\x71\xa9\
+\xf5\x6a\x11\x4d\x68\xae\x44\x28\x6d\xa8\xd5\x27\xed\x42\xb5\x8d\
+\x43\xb2\xa1\x77\x19\x80\xcb\x86\x76\xfa\xf5\x57\x08\x5e\x79\x96\
+\x5f\xdd\x3c\xc4\xe8\xc3\x0f\xe3\x17\x0a\xcc\x2f\x2e\x32\xbb\xfd\
+\x6a\x76\xec\xbe\x87\xa0\xd0\x85\x9f\x28\x56\x21\x31\x3e\xe5\xa4\
+\x0b\x55\x87\xef\x43\xce\xd7\x6e\x23\x92\x07\x96\x3a\xfd\x32\x67\
+\x9d\x13\x67\xb3\x08\x79\xc4\x44\x16\x14\x41\xa4\x3d\x33\x6d\x2f\
+\xf5\xc3\x81\xca\x2e\xab\x15\x07\x3c\xcf\x50\x99\x38\xcd\xd2\xbe\
+\x47\xb8\xee\xe2\x61\xce\xfc\xf8\xc7\xc4\xb5\x1a\x0d\xe7\x38\xd9\
+\xd3\xcf\xe5\xf7\xfc\x2d\xdd\x1b\x36\x22\xce\x11\x18\xc5\xa5\x00\
+\x1e\x15\x5b\x4c\x23\xed\x79\xd0\x9d\xa3\x90\xf7\xfd\x22\x40\x27\
+\x80\x58\x21\x49\x23\xe4\x2c\x46\x13\xea\x16\x12\xe5\xa3\x25\x00\
+\xba\xda\xa2\x96\x02\x78\xc6\x90\x54\xcb\x4c\x3c\xfa\x6f\x5c\xbb\
+\x61\x1d\x95\x57\x5f\x65\xf9\x9d\x77\x90\xee\x6e\x46\x6b\x75\x36\
+\x7f\xe3\x5b\x5c\xb4\x63\x27\xa2\x16\x11\x08\x04\x10\x4d\x01\x96\
+\x53\x00\xc5\x78\x90\xf7\x5d\x51\x90\xe2\x79\xae\x51\xc1\x39\x9b\
+\x39\x90\x10\x5b\x58\xed\xf2\x51\x80\x8e\x60\xad\xef\x8e\x38\xb6\
+\xe0\x2c\xa7\xbe\xbf\x97\xcb\x25\x21\x3f\x79\x8e\x13\x07\x0e\x10\
+\xac\x5b\xc7\xe8\xd4\x24\xfd\x77\xef\xe6\xd2\xdb\x6e\x07\x5c\x2b\
+\x7e\x06\x04\x88\xc5\x50\x71\x45\xac\x53\xc4\x28\xc5\x50\x73\xa5\
+\x30\xec\x99\xab\x57\x3b\x02\xc4\xaa\x92\x58\xab\xa0\x16\x93\xad\
+\x12\x89\x03\x3c\x30\x80\x18\xc1\x08\x69\x73\x88\x64\x30\x82\xb6\
+\xa0\x10\x14\xdf\x13\x02\xdf\xa0\x62\x98\x38\xf4\x32\x3d\xef\x1e\
+\x63\xb8\xb7\x87\xb1\xfd\xfb\xf1\xd7\xae\xe5\xf4\xf4\x0c\xa3\xbb\
+\x7e\x87\xab\xee\xf8\x3a\x67\x6c\x89\xc0\x29\xa1\x40\xce\x28\x7e\
+\x1a\x3d\x68\x58\x58\xb6\xdd\x24\x56\x11\x81\x7c\xe0\x42\x23\xf4\
+\x7e\xe4\x36\x0a\xa8\xaa\x23\xdb\x87\x68\x3a\x68\xaa\xc1\x7a\x86\
+\x72\x0c\x4b\x4d\x61\xae\x01\xe7\xde\x3f\x75\x58\x68\x40\x39\x82\
+\x5a\x4c\xfa\x46\x46\xa1\x60\x60\x6d\x0e\x66\x26\x0b\x2c\x8d\xc7\
+\x6c\x9a\x3b\xce\xee\xdb\x6e\x63\x7c\xcf\xbd\x88\xef\xb3\x50\x29\
+\xf3\x4c\x71\x1b\x3f\xb9\x6c\x37\x0f\xfd\xb0\x89\x49\x96\x08\x34\
+\x21\x47\x44\x41\x62\x8a\x12\x31\x5d\x89\xe8\xaf\x59\x0a\xde\x74\
+\xea\x40\x50\x1c\x20\x97\xab\xfb\x40\xe7\x08\x35\x93\x24\x6e\xc4\
+\x9a\x58\xa7\xa8\x3a\xc4\x36\x29\x4f\x47\xec\x79\x2a\x21\x8e\x13\
+\x16\xaa\x09\xd5\x66\x4c\x14\xc5\x38\x1b\xa7\x33\x12\x18\x4b\x28\
+\x09\x39\x9a\xe4\x68\x90\xd3\x1a\x35\x57\x61\xa9\x79\x0e\x77\xee\
+\x24\x8d\x6a\x95\x0d\x57\x6f\x65\x71\xe3\xa5\x9c\xfa\xed\x3b\x08\
+\x7e\xf8\x08\xa7\x8e\xbe\xc8\xb5\x5f\xbd\x9e\xeb\x7e\xe5\x20\x79\
+\x79\x91\x9c\x49\x08\x4d\x44\x20\x09\x81\xc4\xe9\x09\xdf\x3f\x46\
+\xe9\xf2\x63\xfa\xf2\xbf\x47\x34\x37\x47\x1c\x3f\x97\x28\x34\x3a\
+\x02\x44\xd6\x2e\x55\x1b\x66\x36\x36\xf9\x61\x13\x7a\xfc\x5a\xe1\
+\x0d\xc2\xca\xb7\x29\x36\x1a\x14\xc3\x98\x52\x18\x53\x2c\x59\xf2\
+\xbe\x25\xe7\xc5\xf8\x1a\x61\x92\x26\x34\xab\x24\xb5\x0a\x71\xb5\
+\x4e\xb3\x52\xa7\x5e\x69\xba\xca\x72\xb3\x79\x76\xd6\x9e\x99\xcf\
+\x6f\xec\xda\xb2\xe1\xfa\x4d\xe3\xe3\x33\x9c\xf2\x72\x1c\x1f\xdc\
+\xbc\x68\x16\x07\x2b\x1b\x0f\x3d\x1d\x74\x1d\xf9\x99\x97\x0b\x3c\
+\xe3\xf9\x9e\xe7\xa7\xc7\xf7\xfc\xc0\xf7\x82\x20\x90\x30\x0c\xc4\
+\x33\x62\xac\x55\xb5\x71\xac\x0b\x53\x93\xc9\x4b\xa7\xcc\xcf\xe7\
+\x6a\xb5\xd7\x3b\x02\xd4\x93\x78\x61\x6c\xa6\xb9\xff\xe8\x89\xde\
+\x1d\x61\x4f\xce\xec\x1c\x78\x9b\x1d\xee\x28\x71\xa4\xd4\xeb\x96\
+\xea\xbc\xa3\x5a\xb6\x5a\xa9\x38\x7b\xb6\xec\x1a\xcb\x15\x2d\x2f\
+\x57\x75\x71\xb1\xa6\xb3\x95\x06\x53\x4b\x75\x7b\x76\xb9\xe9\x26\
+\xca\x4d\x7b\xb6\x12\xc5\x93\x4d\x64\xf6\xa6\x2f\x5e\xf1\xcf\xdd\
+\xdd\x03\x9b\x0e\x1f\x7e\x2b\x7e\xf9\xe5\xe7\xfe\xeb\x8d\x43\x2f\
+\x7d\xa7\xba\x38\x77\x8a\xe3\x84\xf9\xf7\x7b\xf5\xbc\x00\x25\x04\
+\x0d\x20\x7d\x86\xc5\x20\x08\x43\xcf\x84\x40\x1e\xb0\x0a\xcd\x72\
+\x94\x2c\xce\x37\xea\x87\x2b\x51\x34\xdb\x11\xc0\xa1\x1c\x9c\x98\
+\xfe\xa7\xf8\x49\xad\x6e\x3b\x18\xde\x58\x08\xa5\xc7\x39\xb5\x8d\
+\x48\xab\xe5\x86\x9b\x5d\xaa\xdb\x89\x5a\xe4\x26\xca\x51\x72\xb6\
+\x1a\xc5\x53\xf5\xc4\x9e\x6b\x24\xf1\x62\xe4\x5c\xd9\xa1\x4d\xc0\
+\xd2\x12\x43\x43\x5b\x3e\xff\xc9\x4f\x6d\xbf\xe6\xb5\xd7\x5e\x3e\
+\xf3\xc4\x13\x3f\xf8\xce\xe8\xe8\x91\x07\xa2\xa8\xb9\x44\xa6\xe5\
+\x88\x8f\xab\xf6\x9f\xd7\xf7\xec\xd9\xc3\x83\x0f\x3e\x88\xef\xfb\
+\x04\xc6\xcf\x79\x46\x42\x40\x9d\x6a\x9c\x38\x1b\x59\x55\x45\xdb\
+\x57\x67\x44\x10\x3e\x2c\x55\x65\xfd\xfa\xa1\x2b\xb6\x6f\xbf\xe6\
+\xee\x91\x91\x23\x7b\xcf\x9c\x39\x71\x00\x14\x10\x3e\xae\xac\xb5\
+\xec\xda\xb5\x8b\x7b\xef\xbd\xb7\xfd\x0f\x8e\xbb\xee\xba\x8b\x3b\
+\xef\xbc\x93\x4c\x4d\x85\x26\x1f\xef\x2d\x7f\x21\x62\xee\x76\xce\
+\xaa\x88\xf0\x7f\x29\xdf\xf7\xd3\x03\x70\xe1\x9f\xfa\xff\x5f\x5d\
+\x00\xb8\x00\x70\x01\xe0\x7f\x01\x6e\xa9\x93\x7a\xf5\x39\xfe\x18\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x16\
+\x07\xbc\x11\xc7\
+\x00\x6d\
+\x00\x65\x00\x74\x00\x61\x00\x63\x00\x6f\x00\x6e\x00\x74\x00\x61\x00\x63\x00\x74\x00\x5f\x00\x6f\x00\x6e\x00\x6c\x00\x69\x00\x6e\
+\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0d\
+\x0e\x40\x40\xc7\
+\x00\x6d\
+\x00\x69\x00\x6e\x00\x69\x00\x74\x00\x6f\x00\x6f\x00\x6c\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x14\
+\x0a\x34\xf1\x07\
+\x00\x62\
+\x00\x6c\x00\x75\x00\x65\x00\x5f\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x5f\x00\x73\x00\x77\x00\x69\x00\x72\x00\x6c\x00\x2e\
+\x00\x6a\x00\x70\x00\x67\
+\x00\x13\
+\x01\x35\x7a\xc7\
+\x00\x6b\
+\x00\x6f\x00\x70\x00\x65\x00\x74\x00\x65\x00\x61\x00\x76\x00\x61\x00\x69\x00\x6c\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x2e\x00\x70\
+\x00\x6e\x00\x67\
+\x00\x11\
+\x04\x5b\x0b\x07\
+\x00\x6b\
+\x00\x6f\x00\x6e\x00\x74\x00\x61\x00\x63\x00\x74\x00\x5f\x00\x6e\x00\x6f\x00\x74\x00\x65\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\
+\x00\x10\
+\x03\x16\x82\x47\
+\x00\x6b\
+\x00\x6f\x00\x6e\x00\x74\x00\x61\x00\x63\x00\x74\x00\x5f\x00\x6d\x00\x61\x00\x69\x00\x6c\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x14\
+\x08\x13\x30\x07\
+\x00\x6b\
+\x00\x6f\x00\x6e\x00\x74\x00\x61\x00\x63\x00\x74\x00\x5f\x00\x63\x00\x6f\x00\x6e\x00\x74\x00\x61\x00\x63\x00\x74\x00\x73\x00\x2e\
+\x00\x70\x00\x6e\x00\x67\
+\x00\x10\
+\x05\xe9\x01\x67\
+\x00\x61\
+\x00\x72\x00\x74\x00\x73\x00\x66\x00\x66\x00\x74\x00\x73\x00\x63\x00\x6f\x00\x70\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x13\
+\x09\x2b\x13\x47\
+\x00\x6b\
+\x00\x6f\x00\x6e\x00\x74\x00\x61\x00\x63\x00\x74\x00\x5f\x00\x6a\x00\x6f\x00\x75\x00\x72\x00\x6e\x00\x61\x00\x6c\x00\x2e\x00\x70\
+\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0a\x00\x00\x00\x02\
+\x00\x00\x00\x92\x00\x00\x00\x00\x00\x01\x00\x00\x6e\x8c\
+\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x87\x15\
+\x00\x00\x00\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x77\xdc\
+\x00\x00\x01\x3a\x00\x00\x00\x00\x00\x01\x00\x00\xa4\xbd\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x93\x9b\
+\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x00\xa9\xcf\
+\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x40\x56\
+\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x12\x20\
+\x00\x00\x00\x44\x00\x00\x00\x00\x00\x01\x00\x00\x09\xf5\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/graphicsview/padnavigator/ui_form.py b/examples/graphicsview/padnavigator/ui_form.py
new file mode 100644
index 0000000..0a0091d
--- /dev/null
+++ b/examples/graphicsview/padnavigator/ui_form.py
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'form.ui'
+#
+# Created: Sun May  5 07:55:08 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-74eb89bd4fb2
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.resize(378, 385)
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout(Form)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.groupBox = QtWidgets.QGroupBox(Form)
+        self.groupBox.setFlat(True)
+        self.groupBox.setCheckable(True)
+        self.groupBox.setObjectName("groupBox")
+        self.gridLayout = QtWidgets.QGridLayout(self.groupBox)
+        self.gridLayout.setObjectName("gridLayout")
+        self.label = QtWidgets.QLabel(self.groupBox)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
+        self.hostName = QtWidgets.QLineEdit(self.groupBox)
+        self.hostName.setObjectName("hostName")
+        self.gridLayout.addWidget(self.hostName, 0, 1, 1, 1)
+        self.label_2 = QtWidgets.QLabel(self.groupBox)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
+        self.label_3 = QtWidgets.QLabel(self.groupBox)
+        self.label_3.setObjectName("label_3")
+        self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.horizontalSlider = QtWidgets.QSlider(self.groupBox)
+        self.horizontalSlider.setProperty("value", 42)
+        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
+        self.horizontalSlider.setObjectName("horizontalSlider")
+        self.horizontalLayout.addWidget(self.horizontalSlider)
+        self.spinBox = QtWidgets.QSpinBox(self.groupBox)
+        self.spinBox.setProperty("value", 42)
+        self.spinBox.setObjectName("spinBox")
+        self.horizontalLayout.addWidget(self.spinBox)
+        self.gridLayout.addLayout(self.horizontalLayout, 2, 1, 1, 1)
+        self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.groupBox)
+        self.dateTimeEdit.setObjectName("dateTimeEdit")
+        self.gridLayout.addWidget(self.dateTimeEdit, 1, 1, 1, 1)
+        self.verticalLayout_2.addWidget(self.groupBox)
+        self.groupBox_2 = QtWidgets.QGroupBox(Form)
+        self.groupBox_2.setFlat(True)
+        self.groupBox_2.setCheckable(True)
+        self.groupBox_2.setObjectName("groupBox_2")
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox_2)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.treeWidget = QtWidgets.QTreeWidget(self.groupBox_2)
+        self.treeWidget.setObjectName("treeWidget")
+        item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
+        item_1 = QtWidgets.QTreeWidgetItem(item_0)
+        item_2 = QtWidgets.QTreeWidgetItem(item_1)
+        item_2 = QtWidgets.QTreeWidgetItem(item_1)
+        item_2 = QtWidgets.QTreeWidgetItem(item_1)
+        item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
+        item_1 = QtWidgets.QTreeWidgetItem(item_0)
+        item_2 = QtWidgets.QTreeWidgetItem(item_1)
+        item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)
+        item_1 = QtWidgets.QTreeWidgetItem(item_0)
+        item_2 = QtWidgets.QTreeWidgetItem(item_1)
+        self.horizontalLayout_2.addWidget(self.treeWidget)
+        self.verticalLayout_2.addWidget(self.groupBox_2)
+
+        self.retranslateUi(Form)
+        self.horizontalSlider.valueChanged['int'].connect(self.spinBox.setValue)
+        self.spinBox.valueChanged['int'].connect(self.horizontalSlider.setValue)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+        Form.setTabOrder(self.groupBox, self.hostName)
+        Form.setTabOrder(self.hostName, self.dateTimeEdit)
+        Form.setTabOrder(self.dateTimeEdit, self.horizontalSlider)
+        Form.setTabOrder(self.horizontalSlider, self.spinBox)
+        Form.setTabOrder(self.spinBox, self.groupBox_2)
+        Form.setTabOrder(self.groupBox_2, self.treeWidget)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "BackSide"))
+        self.groupBox.setTitle(_translate("Form", "Settings"))
+        self.label.setText(_translate("Form", "Title:"))
+        self.hostName.setText(_translate("Form", "Pad Navigator Example"))
+        self.label_2.setText(_translate("Form", "Modified:"))
+        self.label_3.setText(_translate("Form", "Extent"))
+        self.groupBox_2.setTitle(_translate("Form", "Other input"))
+        self.treeWidget.headerItem().setText(0, _translate("Form", "Widgets On Graphics View"))
+        __sortingEnabled = self.treeWidget.isSortingEnabled()
+        self.treeWidget.setSortingEnabled(False)
+        self.treeWidget.topLevelItem(0).setText(0, _translate("Form", "QGraphicsProxyWidget"))
+        self.treeWidget.topLevelItem(0).child(0).setText(0, _translate("Form", "QGraphicsWidget"))
+        self.treeWidget.topLevelItem(0).child(0).child(0).setText(0, _translate("Form", "QObject"))
+        self.treeWidget.topLevelItem(0).child(0).child(1).setText(0, _translate("Form", "QGraphicsItem"))
+        self.treeWidget.topLevelItem(0).child(0).child(2).setText(0, _translate("Form", "QGraphicsLayoutItem"))
+        self.treeWidget.topLevelItem(1).setText(0, _translate("Form", "QGraphicsGridLayout"))
+        self.treeWidget.topLevelItem(1).child(0).setText(0, _translate("Form", "QGraphicsLayout"))
+        self.treeWidget.topLevelItem(1).child(0).child(0).setText(0, _translate("Form", "QGraphicsLayoutItem"))
+        self.treeWidget.topLevelItem(2).setText(0, _translate("Form", "QGraphicsLinearLayout"))
+        self.treeWidget.topLevelItem(2).child(0).setText(0, _translate("Form", "QGraphicsLayout"))
+        self.treeWidget.topLevelItem(2).child(0).child(0).setText(0, _translate("Form", "QGraphicsLayoutItem"))
+        self.treeWidget.setSortingEnabled(__sortingEnabled)
+
diff --git a/examples/ipc/README b/examples/ipc/README
new file mode 100644
index 0000000..d39fee7
--- /dev/null
+++ b/examples/ipc/README
@@ -0,0 +1,21 @@
+These examples demonstrate IPC support in PyQt.
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/ipc/localfortuneclient.py b/examples/ipc/localfortuneclient.py
new file mode 100755
index 0000000..eebb3ef
--- /dev/null
+++ b/examples/ipc/localfortuneclient.py
@@ -0,0 +1,155 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDataStream, QTimer
+from PyQt5.QtWidgets import (QApplication, QDialog, QDialogButtonBox,
+        QGridLayout, QLabel, QLineEdit, QMessageBox, QPushButton)
+from PyQt5.QtNetwork import QLocalSocket
+
+
+class Client(QDialog):
+    def __init__(self, parent=None):
+        super(Client, self).__init__(parent)
+
+        self.blockSize = 0
+        self.currentFortune = None
+
+        hostLabel = QLabel("&Server name:")
+        self.hostLineEdit = QLineEdit("fortune")
+        hostLabel.setBuddy(self.hostLineEdit)
+
+        self.statusLabel = QLabel(
+                "This examples requires that you run the Fortune Server "
+                "example as well.")
+        self.statusLabel.setWordWrap(True)
+
+        self.getFortuneButton = QPushButton("Get Fortune")
+        self.getFortuneButton.setDefault(True)
+
+        quitButton = QPushButton("Quit")
+        buttonBox = QDialogButtonBox()
+        buttonBox.addButton(self.getFortuneButton, QDialogButtonBox.ActionRole)
+        buttonBox.addButton(quitButton, QDialogButtonBox.RejectRole)
+
+        self.socket = QLocalSocket()
+
+        self.hostLineEdit.textChanged.connect(self.enableGetFortuneButton)
+        self.getFortuneButton.clicked.connect(self.requestNewFortune)
+        quitButton.clicked.connect(self.close)
+        self.socket.readyRead.connect(self.readFortune)
+        self.socket.error.connect(self.displayError)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(hostLabel, 0, 0)
+        mainLayout.addWidget(self.hostLineEdit, 0, 1)
+        mainLayout.addWidget(self.statusLabel, 2, 0, 1, 2)
+        mainLayout.addWidget(buttonBox, 3, 0, 1, 2)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Fortune Client")
+        self.hostLineEdit.setFocus()
+
+    def requestNewFortune(self):
+        self.getFortuneButton.setEnabled(False)
+        self.blockSize = 0
+        self.socket.abort()
+        self.socket.connectToServer(self.hostLineEdit.text())
+
+    def readFortune(self):
+        ins = QDataStream(self.socket)
+        ins.setVersion(QDataStream.Qt_4_0)
+
+        if self.blockSize == 0:
+            if self.socket.bytesAvailable() < 2:
+                return
+            self.blockSize = ins.readUInt16()
+
+        if ins.atEnd():
+            return
+
+        nextFortune = ins.readQString()
+        if nextFortune == self.currentFortune:
+            QTimer.singleShot(0, self.requestNewFortune)
+            return
+ 
+        self.currentFortune = nextFortune
+        self.statusLabel.setText(self.currentFortune)
+        self.getFortuneButton.setEnabled(True)
+
+    def displayError(self, socketError):
+        errors = {
+            QLocalSocket.ServerNotFoundError:
+                "The host was not found. Please check the host name and port "
+                "settings.",
+
+            QLocalSocket.ConnectionRefusedError:
+                "The connection was refused by the peer. Make sure the "
+                "fortune server is running, and check that the host name and "
+                "port settings are correct.",
+
+            QLocalSocket.PeerClosedError:
+                None,
+        }
+
+        msg = errors.get(socketError,
+                "The following error occurred: %s." % self.socket.errorString())
+        if msg is not None:
+            QMessageBox.information(self, "Fortune Client", msg)
+
+        self.getFortuneButton.setEnabled(True)
+
+    def enableGetFortuneButton(self):
+        self.getFortuneButton.setEnabled(self.hostLineEdit.text() != "")
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    client = Client()
+    client.show()
+    sys.exit(app.exec_())
diff --git a/examples/ipc/localfortuneserver.py b/examples/ipc/localfortuneserver.py
new file mode 100755
index 0000000..0769dce
--- /dev/null
+++ b/examples/ipc/localfortuneserver.py
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import random
+
+from PyQt5.QtCore import QByteArray, QDataStream, QIODevice
+from PyQt5.QtWidgets import (QApplication, QDialog, QLabel, QHBoxLayout,
+        QMessageBox, QPushButton, QVBoxLayout)
+from PyQt5.QtNetwork import QLocalServer
+
+
+class Server(QDialog):
+    def __init__(self, parent=None):
+        super(Server, self).__init__(parent)
+
+        statusLabel = QLabel()
+        statusLabel.setWordWrap(True)
+        quitButton = QPushButton("Quit")
+        quitButton.setAutoDefault(False)
+
+        self.fortunes = (
+            "You've been leading a dog's life. Stay off the furniture.",
+            "You've got to think about tomorrow.",
+            "You will be surprised by a loud noise.",
+            "You will feel hungry again in another hour.",
+            "You might have mail.",
+            "You cannot kill time without injuring eternity.",
+            "Computers are not intelligent. They only think they are.",
+        )
+
+        self.server = QLocalServer()
+        if not self.server.listen('fortune'):
+            QMessageBox.critical(self, "Fortune Server",
+                    "Unable to start the server: %s." % self.server.errorString())
+            self.close()
+            return
+
+        statusLabel.setText("The server is running.\nRun the Fortune Client "
+                "example now.")
+
+        quitButton.clicked.connect(self.close)
+        self.server.newConnection.connect(self.sendFortune)
+
+        buttonLayout = QHBoxLayout()
+        buttonLayout.addStretch(1)
+        buttonLayout.addWidget(quitButton)
+        buttonLayout.addStretch(1)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(statusLabel)
+        mainLayout.addLayout(buttonLayout)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Fortune Server")
+
+    def sendFortune(self):
+        block = QByteArray()
+        out = QDataStream(block, QIODevice.WriteOnly)
+        out.setVersion(QDataStream.Qt_4_0)
+        out.writeUInt16(0)
+        out.writeQString(random.choice(self.fortunes))
+        out.device().seek(0)
+        out.writeUInt16(block.size() - 2)
+
+        clientConnection = self.server.nextPendingConnection()
+        clientConnection.disconnected.connect(clientConnection.deleteLater)
+        clientConnection.write(block)
+        clientConnection.flush()
+        clientConnection.disconnectFromServer()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    server = Server()
+    server.show()
+    sys.exit(app.exec_())
diff --git a/examples/ipc/sharedmemory/dialog.py b/examples/ipc/sharedmemory/dialog.py
new file mode 100644
index 0000000..74bf573
--- /dev/null
+++ b/examples/ipc/sharedmemory/dialog.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'dialog.ui'
+#
+# Created: Sun May 12 11:56:49 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-b0831183bf83
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_Dialog(object):
+    def setupUi(self, Dialog):
+        Dialog.setObjectName("Dialog")
+        Dialog.resize(451, 322)
+        self.gridlayout = QtWidgets.QGridLayout(Dialog)
+        self.gridlayout.setObjectName("gridlayout")
+        self.loadFromFileButton = QtWidgets.QPushButton(Dialog)
+        self.loadFromFileButton.setObjectName("loadFromFileButton")
+        self.gridlayout.addWidget(self.loadFromFileButton, 0, 0, 1, 1)
+        self.label = QtWidgets.QLabel(Dialog)
+        self.label.setAlignment(QtCore.Qt.AlignCenter)
+        self.label.setWordWrap(True)
+        self.label.setObjectName("label")
+        self.gridlayout.addWidget(self.label, 1, 0, 1, 1)
+        self.loadFromSharedMemoryButton = QtWidgets.QPushButton(Dialog)
+        self.loadFromSharedMemoryButton.setObjectName("loadFromSharedMemoryButton")
+        self.gridlayout.addWidget(self.loadFromSharedMemoryButton, 2, 0, 1, 1)
+
+        self.retranslateUi(Dialog)
+        QtCore.QMetaObject.connectSlotsByName(Dialog)
+
+    def retranslateUi(self, Dialog):
+        _translate = QtCore.QCoreApplication.translate
+        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
+        self.loadFromFileButton.setText(_translate("Dialog", "Load Image From File..."))
+        self.label.setText(_translate("Dialog", "Launch two of these dialogs.  In the first, press the top button and load an image from a file.  In the second, press the bottom button and display the loaded image from shared memory."))
+        self.loadFromSharedMemoryButton.setText(_translate("Dialog", "Display Image From Shared Memory"))
+
diff --git a/examples/ipc/sharedmemory/dialog.ui b/examples/ipc/sharedmemory/dialog.ui
new file mode 100644
index 0000000..e99d6fb
--- /dev/null
+++ b/examples/ipc/sharedmemory/dialog.ui
@@ -0,0 +1,47 @@
+<ui version="4.0" >
+ <class>Dialog</class>
+ <widget class="QDialog" name="Dialog" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>451</width>
+    <height>322</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Dialog</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" >
+    <widget class="QPushButton" name="loadFromFileButton" >
+     <property name="text" >
+      <string>Load Image From File...</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QLabel" name="label" >
+     <property name="text" >
+      <string>Launch two of these dialogs.  In the first, press the top button and load an image from a file.  In the second, press the bottom button and display the loaded image from shared memory.</string>
+     </property>
+     <property name="alignment" >
+      <set>Qt::AlignCenter</set>
+     </property>
+     <property name="wordWrap" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QPushButton" name="loadFromSharedMemoryButton" >
+     <property name="text" >
+      <string>Display Image From Shared Memory</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/ipc/sharedmemory/image.png b/examples/ipc/sharedmemory/image.png
new file mode 100644
index 0000000..dd93453
Binary files /dev/null and b/examples/ipc/sharedmemory/image.png differ
diff --git a/examples/ipc/sharedmemory/qt.png b/examples/ipc/sharedmemory/qt.png
new file mode 100644
index 0000000..60ef558
Binary files /dev/null and b/examples/ipc/sharedmemory/qt.png differ
diff --git a/examples/ipc/sharedmemory/sharedmemory.py b/examples/ipc/sharedmemory/sharedmemory.py
new file mode 100755
index 0000000..fc8eb6e
--- /dev/null
+++ b/examples/ipc/sharedmemory/sharedmemory.py
@@ -0,0 +1,181 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QBuffer, QDataStream, QSharedMemory
+from PyQt5.QtGui import QImage, QPixmap
+from PyQt5.QtWidgets import QApplication, QDialog, QFileDialog
+
+from dialog import Ui_Dialog
+
+
+class Dialog(QDialog):
+    """ This class is a simple example of how to use QSharedMemory.  It is a
+    simple dialog that presents a few buttons.  Run the executable twice to
+    create two processes running the dialog.  In one of the processes, press
+    the button to load an image into a shared memory segment, and then select
+    an image file to load.  Once the first process has loaded and displayed the
+    image, in the second process, press the button to read the same image from
+    shared memory.  The second process displays the same image loaded from its
+    new location in shared memory.
+
+    The class contains a data member sharedMemory, which is initialized with
+    the key "QSharedMemoryExample" to force all instances of Dialog to access
+    the same shared memory segment.  The constructor also connects the
+    clicked() signal from each of the three dialog buttons to the slot function
+    appropriate for handling each button.
+    """
+
+    def __init__(self, parent = None):
+        super(Dialog, self).__init__(parent)
+
+        self.sharedMemory = QSharedMemory('QSharedMemoryExample')
+
+        self.ui = Ui_Dialog()
+        self.ui.setupUi(self)
+
+        self.ui.loadFromFileButton.clicked.connect(self.loadFromFile)
+        self.ui.loadFromSharedMemoryButton.clicked.connect(self.loadFromMemory)
+
+        self.setWindowTitle("SharedMemory Example")
+
+    def loadFromFile(self):
+        """ This slot function is called when the "Load Image From File..."
+        button is pressed on the firs Dialog process.  First, it tests whether
+        the process is already connected to a shared memory segment and, if so,
+        detaches from that segment.  This ensures that we always start the
+        example from the beginning if we run it multiple times with the same
+        two Dialog processes.  After detaching from an existing shared memory
+        segment, the user is prompted to select an image file.  The selected
+        file is loaded into a QImage.  The QImage is displayed in the Dialog
+        and streamed into a QBuffer with a QDataStream.  Next, it gets a new
+        shared memory segment from the system big enough to hold the image data
+        in the QBuffer, and it locks the segment to prevent the second Dialog
+        process from accessing it.  Then it copies the image from the QBuffer
+        into the shared memory segment.  Finally, it unlocks the shared memory
+        segment so the second Dialog process can access it.  After self
+        function runs, the user is expected to press the "Load Image from
+        Shared Memory" button on the second Dialog process.
+        """
+
+        if self.sharedMemory.isAttached():
+            self.detach()
+
+        self.ui.label.setText("Select an image file")
+        fileName, _ = QFileDialog.getOpenFileName(self, None, None,
+                "Images (*.png *.xpm *.jpg)")
+        image = QImage()
+        if not image.load(fileName):
+            self.ui.label.setText(
+                    "Selected file is not an image, please select another.")
+            return
+
+        self.ui.label.setPixmap(QPixmap.fromImage(image))
+
+        # Load into shared memory.
+        buf = QBuffer()
+        buf.open(QBuffer.ReadWrite)
+        out = QDataStream(buf)
+        out << image
+        size = buf.size()
+
+        if not self.sharedMemory.create(size):
+            self.ui.label.setText("Unable to create shared memory segment.")
+            return
+
+        size = min(self.sharedMemory.size(), size)
+        self.sharedMemory.lock()
+
+        # Copy image data from buf into shared memory area.
+        self.sharedMemory.data()[:] = buf.data().data()
+        self.sharedMemory.unlock()
+
+    def loadFromMemory(self):
+        """ This slot function is called in the second Dialog process, when the
+        user presses the "Load Image from Shared Memory" button.  First, it
+        attaches the process to the shared memory segment created by the first
+        Dialog process.  Then it locks the segment for exclusive access, copies
+        the image data from the segment into a QBuffer, and streams the QBuffer
+        into a QImage.  Then it unlocks the shared memory segment, detaches
+        from it, and finally displays the QImage in the Dialog.
+        """
+
+        if not self.sharedMemory.attach():
+            self.ui.label.setText(
+                    "Unable to attach to shared memory segment.\nLoad an "
+                    "image first.")
+            return
+ 
+        buf = QBuffer()
+        ins = QDataStream(buf)
+        image = QImage()
+
+        self.sharedMemory.lock()
+        buf.setData(self.sharedMemory.constData())
+        buf.open(QBuffer.ReadOnly)
+        ins >> image
+        self.sharedMemory.unlock()
+        self.sharedMemory.detach()
+
+        self.ui.label.setPixmap(QPixmap.fromImage(image))
+
+    def detach(self):
+        """ This private function is called by the destructor to detach the
+        process from its shared memory segment.  When the last process detaches
+        from a shared memory segment, the system releases the shared memory.
+        """
+
+        if not self.sharedMemory.detach():
+            self.ui.label.setText("Unable to detach from shared memory.")
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    dialog = Dialog()
+    dialog.show()
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/README b/examples/itemviews/README
new file mode 100644
index 0000000..9880ddc
--- /dev/null
+++ b/examples/itemviews/README
@@ -0,0 +1,25 @@
+Item views are widgets that typically display data sets. PyQt's model/view
+framework lets you handle large data sets by separating the underlying data
+from the way it is represented to the user, and provides support for
+customized rendering through the use of delegates.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/itemviews/basicsortfiltermodel.py b/examples/itemviews/basicsortfiltermodel.py
new file mode 100755
index 0000000..9dd2977
--- /dev/null
+++ b/examples/itemviews/basicsortfiltermodel.py
@@ -0,0 +1,226 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QDate, QDateTime, QRegExp, QSortFilterProxyModel, Qt,
+        QTime)
+from PyQt5.QtGui import QStandardItemModel
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QGridLayout,
+        QGroupBox, QHBoxLayout, QLabel, QLineEdit, QTreeView, QVBoxLayout,
+        QWidget)
+
+
+SUBJECT, SENDER, DATE = range(3)
+
+# Work around the fact that QSortFilterProxyModel always filters datetime
+# values in QtCore.Qt.ISODate format, but the tree views display using
+# QtCore.Qt.DefaultLocaleShortDate format.
+class SortFilterProxyModel(QSortFilterProxyModel):
+    def filterAcceptsRow(self, sourceRow, sourceParent):
+        # Do we filter for the date column?
+        if self.filterKeyColumn() == DATE:
+            # Fetch datetime value.
+            index = self.sourceModel().index(sourceRow, DATE, sourceParent)
+            data = self.sourceModel().data(index)
+
+            # Return, if regExp match in displayed format.
+            return (self.filterRegExp().indexIn(data.toString(Qt.DefaultLocaleShortDate)) >= 0)
+
+        # Not our business.
+        return super(SortFilterProxyModel, self).filterAcceptsRow(sourceRow, sourceParent)
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.proxyModel = SortFilterProxyModel()
+        self.proxyModel.setDynamicSortFilter(True)
+
+        self.sourceGroupBox = QGroupBox("Original Model")
+        self.proxyGroupBox = QGroupBox("Sorted/Filtered Model")
+
+        self.sourceView = QTreeView()
+        self.sourceView.setRootIsDecorated(False)
+        self.sourceView.setAlternatingRowColors(True)
+
+        self.proxyView = QTreeView()
+        self.proxyView.setRootIsDecorated(False)
+        self.proxyView.setAlternatingRowColors(True)
+        self.proxyView.setModel(self.proxyModel)
+        self.proxyView.setSortingEnabled(True)
+
+        self.sortCaseSensitivityCheckBox = QCheckBox("Case sensitive sorting")
+        self.filterCaseSensitivityCheckBox = QCheckBox("Case sensitive filter")
+
+        self.filterPatternLineEdit = QLineEdit()
+        self.filterPatternLabel = QLabel("&Filter pattern:")
+        self.filterPatternLabel.setBuddy(self.filterPatternLineEdit)
+
+        self.filterSyntaxComboBox = QComboBox()
+        self.filterSyntaxComboBox.addItem("Regular expression", QRegExp.RegExp)
+        self.filterSyntaxComboBox.addItem("Wildcard", QRegExp.Wildcard)
+        self.filterSyntaxComboBox.addItem("Fixed string", QRegExp.FixedString)
+        self.filterSyntaxLabel = QLabel("Filter &syntax:")
+        self.filterSyntaxLabel.setBuddy(self.filterSyntaxComboBox)
+
+        self.filterColumnComboBox = QComboBox()
+        self.filterColumnComboBox.addItem("Subject")
+        self.filterColumnComboBox.addItem("Sender")
+        self.filterColumnComboBox.addItem("Date")
+        self.filterColumnLabel = QLabel("Filter &column:")
+        self.filterColumnLabel.setBuddy(self.filterColumnComboBox)
+
+        self.filterPatternLineEdit.textChanged.connect(self.filterRegExpChanged)
+        self.filterSyntaxComboBox.currentIndexChanged.connect(self.filterRegExpChanged)
+        self.filterColumnComboBox.currentIndexChanged.connect(self.filterColumnChanged)
+        self.filterCaseSensitivityCheckBox.toggled.connect(self.filterRegExpChanged)
+        self.sortCaseSensitivityCheckBox.toggled.connect(self.sortChanged)
+
+        sourceLayout = QHBoxLayout()
+        sourceLayout.addWidget(self.sourceView)
+        self.sourceGroupBox.setLayout(sourceLayout)
+
+        proxyLayout = QGridLayout()
+        proxyLayout.addWidget(self.proxyView, 0, 0, 1, 3)
+        proxyLayout.addWidget(self.filterPatternLabel, 1, 0)
+        proxyLayout.addWidget(self.filterPatternLineEdit, 1, 1, 1, 2)
+        proxyLayout.addWidget(self.filterSyntaxLabel, 2, 0)
+        proxyLayout.addWidget(self.filterSyntaxComboBox, 2, 1, 1, 2)
+        proxyLayout.addWidget(self.filterColumnLabel, 3, 0)
+        proxyLayout.addWidget(self.filterColumnComboBox, 3, 1, 1, 2)
+        proxyLayout.addWidget(self.filterCaseSensitivityCheckBox, 4, 0, 1, 2)
+        proxyLayout.addWidget(self.sortCaseSensitivityCheckBox, 4, 2)
+        self.proxyGroupBox.setLayout(proxyLayout)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.sourceGroupBox)
+        mainLayout.addWidget(self.proxyGroupBox)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Basic Sort/Filter Model")
+        self.resize(500, 450)
+
+        self.proxyView.sortByColumn(SENDER, Qt.AscendingOrder)
+        self.filterColumnComboBox.setCurrentIndex(SENDER)
+
+        self.filterPatternLineEdit.setText("Andy|Grace")
+        self.filterCaseSensitivityCheckBox.setChecked(True)
+        self.sortCaseSensitivityCheckBox.setChecked(True)
+
+    def setSourceModel(self, model):
+        self.proxyModel.setSourceModel(model)
+        self.sourceView.setModel(model)
+
+    def filterRegExpChanged(self):
+        syntax_nr = self.filterSyntaxComboBox.itemData(self.filterSyntaxComboBox.currentIndex())
+        syntax = QRegExp.PatternSyntax(syntax_nr)
+
+        if self.filterCaseSensitivityCheckBox.isChecked():
+            caseSensitivity = Qt.CaseSensitive
+        else:
+            caseSensitivity = Qt.CaseInsensitive
+
+        regExp = QRegExp(self.filterPatternLineEdit.text(),
+                caseSensitivity, syntax)
+        self.proxyModel.setFilterRegExp(regExp)
+
+    def filterColumnChanged(self):
+        self.proxyModel.setFilterKeyColumn(self.filterColumnComboBox.currentIndex())
+
+    def sortChanged(self):
+        if self.sortCaseSensitivityCheckBox.isChecked():
+            caseSensitivity = Qt.CaseSensitive
+        else:
+            caseSensitivity = Qt.CaseInsensitive
+
+        self.proxyModel.setSortCaseSensitivity(caseSensitivity)
+
+
+def addMail(model, subject, sender, date):
+    model.insertRow(0)
+    model.setData(model.index(0, SUBJECT), subject)
+    model.setData(model.index(0, SENDER), sender)
+    model.setData(model.index(0, DATE), date)
+
+
+def createMailModel(parent):
+    model = QStandardItemModel(0, 3, parent)
+
+    model.setHeaderData(SUBJECT, Qt.Horizontal, "Subject")
+    model.setHeaderData(SENDER, Qt.Horizontal, "Sender")
+    model.setHeaderData(DATE, Qt.Horizontal, "Date")
+
+    addMail(model, "Happy New Year!", "Grace K. <grace at software-inc.com>",
+            QDateTime(QDate(2006, 12, 31), QTime(17, 3)))
+    addMail(model, "Radically new concept", "Grace K. <grace at software-inc.com>",
+            QDateTime(QDate(2006, 12, 22), QTime(9, 44)))
+    addMail(model, "Accounts", "pascale at nospam.com",
+            QDateTime(QDate(2006, 12, 31), QTime(12, 50)))
+    addMail(model, "Expenses", "Joe Bloggs <joe at bloggs.com>",
+            QDateTime(QDate(2006, 12, 25), QTime(11, 39)))
+    addMail(model, "Re: Expenses", "Andy <andy at nospam.com>",
+            QDateTime(QDate(2007, 1, 2), QTime(16, 5)))
+    addMail(model, "Re: Accounts", "Joe Bloggs <joe at bloggs.com>",
+            QDateTime(QDate(2007, 1, 3), QTime(14, 18)))
+    addMail(model, "Re: Accounts", "Andy <andy at nospam.com>",
+            QDateTime(QDate(2007, 1, 3), QTime(14, 26)))
+    addMail(model, "Sports", "Linda Smith <linda.smith at nospam.com>",
+            QDateTime(QDate(2007, 1, 5), QTime(11, 33)))
+    addMail(model, "AW: Sports", "Rolf Newschweinstein <rolfn at nospam.com>",
+            QDateTime(QDate(2007, 1, 5), QTime(12, 0)))
+    addMail(model, "RE: Sports", "Petra Schmidt <petras at nospam.com>",
+            QDateTime(QDate(2007, 1, 5), QTime(12, 1)))
+
+    return model
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.setSourceModel(createMailModel(window))
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/chart/chart.py b/examples/itemviews/chart/chart.py
new file mode 100755
index 0000000..898b01f
--- /dev/null
+++ b/examples/itemviews/chart/chart.py
@@ -0,0 +1,582 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import (QByteArray, QFile, QItemSelection,
+        QItemSelectionModel, QModelIndex, QPoint, QRect, QSize, Qt,
+        QTextStream)
+from PyQt5.QtGui import (QBrush, QColor, QFontMetrics, QPainter, QPainterPath,
+        QPalette, QPen, QRegion, QStandardItemModel)
+from PyQt5.QtWidgets import (QAbstractItemView, QApplication, QFileDialog,
+        QMainWindow, QMenu, QRubberBand, QSplitter, QStyle, QTableView)
+
+import chart_rc
+
+
+class PieView(QAbstractItemView):
+    def __init__(self, parent=None):
+        super(PieView, self).__init__(parent)
+
+        self.horizontalScrollBar().setRange(0, 0)
+        self.verticalScrollBar().setRange(0, 0)
+
+        self.margin = 8
+        self.totalSize = 300
+        self.pieSize = self.totalSize - 2*self.margin
+        self.validItems = 0
+        self.totalValue = 0.0
+        self.origin = QPoint()
+        self.rubberBand = None
+
+    def dataChanged(self, topLeft, bottomRight, roles):
+        super(PieView, self).dataChanged(topLeft, bottomRight, roles)
+
+        self.validItems = 0
+        self.totalValue = 0.0
+
+        for row in range(self.model().rowCount(self.rootIndex())):
+
+            index = self.model().index(row, 1, self.rootIndex())
+            value = self.model().data(index)
+
+            if value is not None and value > 0.0:
+                self.totalValue += value
+                self.validItems += 1
+
+        self.viewport().update()
+
+    def edit(self, index, trigger, event):
+        if index.column() == 0:
+            return super(PieView, self).edit(index, trigger, event)
+        else:
+            return False
+
+    def indexAt(self, point):
+        if self.validItems == 0:
+            return QModelIndex()
+
+        # Transform the view coordinates into contents widget coordinates.
+        wx = point.x() + self.horizontalScrollBar().value()
+        wy = point.y() + self.verticalScrollBar().value()
+
+        if wx < self.totalSize:
+            cx = wx - self.totalSize/2
+            cy = self.totalSize/2 - wy; # positive cy for items above the center
+
+            # Determine the distance from the center point of the pie chart.
+            d = (cx**2 + cy**2)**0.5
+
+            if d == 0 or d > self.pieSize/2:
+                return QModelIndex()
+
+            # Determine the angle of the point.
+            angle = (180 / math.pi) * math.acos(cx/d)
+            if cy < 0:
+                angle = 360 - angle
+
+            # Find the relevant slice of the pie.
+            startAngle = 0.0
+
+            for row in range(self.model().rowCount(self.rootIndex())):
+
+                index = self.model().index(row, 1, self.rootIndex())
+                value = self.model().data(index)
+
+                if value > 0.0:
+                    sliceAngle = 360*value/self.totalValue
+
+                    if angle >= startAngle and angle < (startAngle + sliceAngle):
+                        return self.model().index(row, 1, self.rootIndex())
+
+                    startAngle += sliceAngle
+
+        else:
+            itemHeight = QFontMetrics(self.viewOptions().font).height()
+            listItem = int((wy - self.margin) / itemHeight)
+            validRow = 0
+
+            for row in range(self.model().rowCount(self.rootIndex())):
+
+                index = self.model().index(row, 1, self.rootIndex())
+                if self.model().data(index) > 0.0:
+
+                    if listItem == validRow:
+                        return self.model().index(row, 0, self.rootIndex())
+
+                    # Update the list index that corresponds to the next valid
+                    # row.
+                    validRow += 1
+
+        return QModelIndex()
+
+    def isIndexHidden(self, index):
+        return False
+
+    def itemRect(self, index):
+        if not index.isValid():
+            return QRect()
+
+        # Check whether the index's row is in the list of rows represented
+        # by slices.
+
+        if index.column() != 1:
+            valueIndex = self.model().index(index.row(), 1, self.rootIndex())
+        else:
+            valueIndex = index
+
+        if self.model().data(valueIndex) > 0.0:
+
+            listItem = 0
+            for row in range(index.row()-1, -1, -1):
+                if self.model().data(self.model().index(row, 1, self.rootIndex())) > 0.0:
+                    listItem += 1
+
+            if index.column() == 0:
+            
+                itemHeight = QFontMetrics(self.viewOptions().font).height()
+                return QRect(self.totalSize,
+                             int(self.margin + listItem*itemHeight),
+                             self.totalSize - self.margin, int(itemHeight))
+            elif index.column() == 1:
+                return self.viewport().rect()
+
+        return QRect()
+
+    def itemRegion(self, index):
+        if not index.isValid():
+            return QRegion()
+
+        if index.column() != 1:
+            return QRegion(self.itemRect(index))
+
+        if self.model().data(index) <= 0.0:
+            return QRegion()
+
+        startAngle = 0.0
+        for row in range(self.model().rowCount(self.rootIndex())):
+
+            sliceIndex = self.model().index(row, 1, self.rootIndex())
+            value = self.model().data(sliceIndex)
+
+            if value > 0.0:
+                angle = 360*value/self.totalValue
+
+                if sliceIndex == index:
+                    slicePath = QPainterPath()
+                    slicePath.moveTo(self.totalSize/2, self.totalSize/2)
+                    slicePath.arcTo(self.margin, self.margin,
+                            self.margin+self.pieSize, self.margin+self.pieSize,
+                            startAngle, angle)
+                    slicePath.closeSubpath()
+
+                    return QRegion(slicePath.toFillPolygon().toPolygon())
+
+                startAngle += angle
+
+        return QRegion()
+
+    def horizontalOffset(self):
+        return self.horizontalScrollBar().value()
+
+    def mousePressEvent(self, event):
+        super(PieView, self).mousePressEvent(event)
+
+        self.origin = event.pos()
+        if not self.rubberBand:
+            self.rubberBand = QRubberBand(QRubberBand.Rectangle, self)
+        self.rubberBand.setGeometry(QRect(self.origin, QSize()))
+        self.rubberBand.show()
+
+    def mouseMoveEvent(self, event):
+        if self.rubberBand:
+            self.rubberBand.setGeometry(QRect(self.origin, event.pos()).normalized())
+
+        super(PieView, self).mouseMoveEvent(event)
+
+    def mouseReleaseEvent(self, event):
+        super(PieView, self).mouseReleaseEvent(event)
+
+        if self.rubberBand:
+            self.rubberBand.hide()
+
+        self.viewport().update()
+
+    def moveCursor(self, cursorAction, modifiers):
+        current = self.currentIndex()
+
+        if cursorAction in (QAbstractItemView.MoveLeft, QAbstractItemView.MoveUp):
+
+            if current.row() > 0:
+                current = self.model().index(current.row() - 1,
+                        current.column(), self.rootIndex())
+            else:
+                current = self.model().index(0, current.column(),
+                        self.rootIndex())
+
+        elif cursorAction in (QAbstractItemView.MoveRight, QAbstractItemView.MoveDown):
+
+            if current.row() < self.rows(current) - 1:
+                current = self.model().index(current.row() + 1,
+                        current.column(), self.rootIndex())
+            else:
+                current = self.model().index(self.rows(current) - 1,
+                        current.column(), self.rootIndex())
+
+        self.viewport().update()
+        return current
+
+    def paintEvent(self, event):
+        selections = self.selectionModel()
+        option = self.viewOptions()
+        state = option.state
+
+        background = option.palette.base()
+        foreground = QPen(option.palette.color(QPalette.WindowText))
+        textPen = QPen(option.palette.color(QPalette.Text))
+        highlightedPen = QPen(option.palette.color(QPalette.HighlightedText))
+
+        painter = QPainter(self.viewport())
+        painter.setRenderHint(QPainter.Antialiasing)
+
+        painter.fillRect(event.rect(), background)
+        painter.setPen(foreground)
+
+        # Viewport rectangles
+        pieRect = QRect(self.margin, self.margin, self.pieSize,
+                self.pieSize)
+        keyPoint = QPoint(self.totalSize - self.horizontalScrollBar().value(),
+                self.margin - self.verticalScrollBar().value())
+
+        if self.validItems > 0:
+            painter.save()
+            painter.translate(pieRect.x() - self.horizontalScrollBar().value(),
+                    pieRect.y() - self.verticalScrollBar().value())
+            painter.drawEllipse(0, 0, self.pieSize, self.pieSize)
+            startAngle = 0.0
+
+            for row in range(self.model().rowCount(self.rootIndex())):
+
+                index = self.model().index(row, 1, self.rootIndex())
+                value = self.model().data(index)
+
+                if value > 0.0:
+                    angle = 360*value/self.totalValue
+
+                    colorIndex = self.model().index(row, 0, self.rootIndex())
+                    color = self.model().data(colorIndex, Qt.DecorationRole)
+
+                    if self.currentIndex() == index:
+                        painter.setBrush(QBrush(color, Qt.Dense4Pattern))
+                    elif selections.isSelected(index):
+                        painter.setBrush(QBrush(color, Qt.Dense3Pattern))
+                    else:
+                        painter.setBrush(QBrush(color))
+
+                    painter.drawPie(0, 0, self.pieSize, self.pieSize,
+                            int(startAngle*16), int(angle*16))
+
+                    startAngle += angle
+
+            painter.restore()
+
+            keyNumber = 0
+
+            for row in range(self.model().rowCount(self.rootIndex())):
+                index = self.model().index(row, 1, self.rootIndex())
+                value = self.model().data(index)
+
+                if value > 0.0:
+                    labelIndex = self.model().index(row, 0, self.rootIndex())
+
+                    option = self.viewOptions()
+                    option.rect = self.visualRect(labelIndex)
+                    if selections.isSelected(labelIndex):
+                        option.state |= QStyle.State_Selected
+                    if self.currentIndex() == labelIndex:
+                        option.state |= QStyle.State_HasFocus
+                    self.itemDelegate().paint(painter, option, labelIndex)
+
+                    keyNumber += 1
+
+    def resizeEvent(self, event):
+        self.updateGeometries()
+
+    def rows(self, index):
+        return self.model().rowCount(self.model().parent(index))
+
+    def rowsInserted(self, parent, start, end):
+        for row in range(start, end + 1):
+            index = self.model().index(row, 1, self.rootIndex())
+            value = self.model().data(index)
+
+            if value is not None and value > 0.0:
+                self.totalValue += value
+                self.validItems += 1
+
+        super(PieView, self).rowsInserted(parent, start, end)
+
+    def rowsAboutToBeRemoved(self, parent, start, end):
+        for row in range(start, end + 1):
+            index = self.model().index(row, 1, self.rootIndex())
+            value = self.model().data(index)
+
+            if value is not None and value > 0.0:
+                self.totalValue -= value
+                self.validItems -= 1
+
+        super(PieView, self).rowsAboutToBeRemoved(parent, start, end)
+
+    def scrollContentsBy(self, dx, dy):
+        self.viewport().scroll(dx, dy)
+
+    def scrollTo(self, index, ScrollHint):
+        area = self.viewport().rect()
+        rect = self.visualRect(index)
+
+        if rect.left() < area.left():
+            self.horizontalScrollBar().setValue(
+                self.horizontalScrollBar().value() + rect.left() - area.left())
+        elif rect.right() > area.right():
+            self.horizontalScrollBar().setValue(
+                self.horizontalScrollBar().value() + min(
+                    rect.right() - area.right(), rect.left() - area.left()))
+
+        if rect.top() < area.top():
+            self.verticalScrollBar().setValue(
+                self.verticalScrollBar().value() + rect.top() - area.top())
+        elif rect.bottom() > area.bottom():
+            self.verticalScrollBar().setValue(
+                self.verticalScrollBar().value() + min(
+                    rect.bottom() - area.bottom(), rect.top() - area.top()))
+
+    def setSelection(self, rect, command):
+        # Use content widget coordinates because we will use the itemRegion()
+        # function to check for intersections.
+
+        contentsRect = rect.translated(self.horizontalScrollBar().value(),
+                self.verticalScrollBar().value()).normalized()
+
+        rows = self.model().rowCount(self.rootIndex())
+        columns = self.model().columnCount(self.rootIndex())
+        indexes = []
+
+        for row in range(rows):
+            for column in range(columns):
+                index = self.model().index(row, column, self.rootIndex())
+                region = self.itemRegion(index)
+                if not region.intersect(QRegion(contentsRect)).isEmpty():
+                    indexes.append(index)
+
+        if len(indexes) > 0:
+            firstRow = indexes[0].row()
+            lastRow = indexes[0].row()
+            firstColumn = indexes[0].column()
+            lastColumn = indexes[0].column()
+
+            for i in range(1, len(indexes)):
+                firstRow = min(firstRow, indexes[i].row())
+                lastRow = max(lastRow, indexes[i].row())
+                firstColumn = min(firstColumn, indexes[i].column())
+                lastColumn = max(lastColumn, indexes[i].column())
+
+            selection = QItemSelection(
+                self.model().index(firstRow, firstColumn, self.rootIndex()),
+                self.model().index(lastRow, lastColumn, self.rootIndex()))
+            self.selectionModel().select(selection, command)
+        else:
+            noIndex = QModelIndex()
+            selection = QItemSelection(noIndex, noIndex)
+            self.selectionModel().select(selection, command)
+
+        self.update()
+
+    def updateGeometries(self):
+        self.horizontalScrollBar().setPageStep(self.viewport().width())
+        self.horizontalScrollBar().setRange(0, max(0, 2*self.totalSize - self.viewport().width()))
+        self.verticalScrollBar().setPageStep(self.viewport().height())
+        self.verticalScrollBar().setRange(0, max(0, self.totalSize - self.viewport().height()))
+
+    def verticalOffset(self):
+        return self.verticalScrollBar().value()
+
+    def visualRect(self, index):
+        rect = self.itemRect(index)
+        if rect.isValid():
+            return QRect(rect.left() - self.horizontalScrollBar().value(),
+                         rect.top() - self.verticalScrollBar().value(),
+                         rect.width(), rect.height())
+        else:
+            return rect
+
+    def visualRegionForSelection(self, selection):
+        region = QRegion()
+
+        for span in selection:
+            for row in range(span.top(), span.bottom() + 1):
+                for col in range(span.left(), span.right() + 1):
+                    index = self.model().index(row, col, self.rootIndex())
+                    region += self.visualRect(index)
+
+        return region
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        fileMenu = QMenu("&File", self)
+        openAction = fileMenu.addAction("&Open...")
+        openAction.setShortcut("Ctrl+O")
+        saveAction = fileMenu.addAction("&Save As...")
+        saveAction.setShortcut("Ctrl+S")
+        quitAction = fileMenu.addAction("E&xit")
+        quitAction.setShortcut("Ctrl+Q")
+
+        self.setupModel()
+        self.setupViews()
+
+        openAction.triggered.connect(self.openFile)
+        saveAction.triggered.connect(self.saveFile)
+        quitAction.triggered.connect(QApplication.instance().quit)
+
+        self.menuBar().addMenu(fileMenu)
+        self.statusBar()
+
+        self.openFile(':/Charts/qtdata.cht')
+
+        self.setWindowTitle("Chart")
+        self.resize(870, 550)
+
+    def setupModel(self):
+        self.model = QStandardItemModel(8, 2, self)
+        self.model.setHeaderData(0, Qt.Horizontal, "Label")
+        self.model.setHeaderData(1, Qt.Horizontal, "Quantity")
+
+    def setupViews(self):
+        splitter = QSplitter()
+        table = QTableView()
+        self.pieChart = PieView()
+        splitter.addWidget(table)
+        splitter.addWidget(self.pieChart)
+        splitter.setStretchFactor(0, 0)
+        splitter.setStretchFactor(1, 1)
+
+        table.setModel(self.model)
+        self.pieChart.setModel(self.model)
+
+        self.selectionModel = QItemSelectionModel(self.model)
+        table.setSelectionModel(self.selectionModel)
+        self.pieChart.setSelectionModel(self.selectionModel)
+
+        table.horizontalHeader().setStretchLastSection(True)
+
+        self.setCentralWidget(splitter)
+
+    def openFile(self, path=None):
+        if not path:
+            path, _ = QFileDialog.getOpenFileName(self, "Choose a data file",
+                    '', '*.cht')
+
+        if path:
+            f = QFile(path)
+
+            if f.open(QFile.ReadOnly | QFile.Text):
+                stream = QTextStream(f)
+
+                self.model.removeRows(0, self.model.rowCount(QModelIndex()),
+                        QModelIndex())
+
+                row = 0
+                line = stream.readLine()
+                while line:
+                    self.model.insertRows(row, 1, QModelIndex())
+
+                    pieces = line.split(',')
+                    self.model.setData(self.model.index(row, 0, QModelIndex()),
+                                pieces[0])
+                    self.model.setData(self.model.index(row, 1, QModelIndex()),
+                                float(pieces[1]))
+                    self.model.setData(self.model.index(row, 0, QModelIndex()),
+                                QColor(pieces[2]), Qt.DecorationRole)
+
+                    row += 1
+                    line = stream.readLine()
+
+                f.close()
+                self.statusBar().showMessage("Loaded %s" % path, 2000)
+
+    def saveFile(self):
+        fileName, _ = QFileDialog.getSaveFileName(self, "Save file as", '',
+                '*.cht')
+
+        if fileName:
+            f = QFile(fileName)
+
+            if f.open(QFile.WriteOnly | QFile.Text):
+                for row in range(self.model.rowCount(QModelIndex())):
+                    pieces = []
+
+                    pieces.append(self.model.data(self.model.index(row, 0, QModelIndex()),
+                            Qt.DisplayRole))
+                    pieces.append(str(self.model.data(self.model.index(row, 1, QModelIndex()),
+                            Qt.DisplayRole)))
+                    pieces.append(self.model.data(self.model.index(row, 0, QModelIndex()),
+                            Qt.DecorationRole).name())
+
+                    f.write(QByteArray(','.join(pieces)))
+                    f.write('\n')
+
+            f.close()
+            self.statusBar().showMessage("Saved %s" % fileName, 2000)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/chart/chart.qrc b/examples/itemviews/chart/chart.qrc
new file mode 100644
index 0000000..7401d4d
--- /dev/null
+++ b/examples/itemviews/chart/chart.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/Charts" >
+   <file>qtdata.cht</file>
+</qresource>
+</RCC>
diff --git a/examples/itemviews/chart/chart_rc.py b/examples/itemviews/chart/chart_rc.py
new file mode 100644
index 0000000..51506c9
--- /dev/null
+++ b/examples/itemviews/chart/chart_rc.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 12 12:14:11 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x01\x90\
+\x53\
+\x63\x69\x65\x6e\x74\x69\x66\x69\x63\x20\x52\x65\x73\x65\x61\x72\
+\x63\x68\x2c\x32\x31\x2c\x23\x39\x39\x65\x36\x30\x30\x0a\x45\x6e\
+\x67\x69\x6e\x65\x65\x72\x69\x6e\x67\x20\x26\x20\x44\x65\x73\x69\
+\x67\x6e\x2c\x31\x38\x2c\x23\x39\x39\x63\x63\x30\x30\x0a\x41\x75\
+\x74\x6f\x6d\x6f\x74\x69\x76\x65\x2c\x31\x34\x2c\x23\x39\x39\x62\
+\x33\x30\x30\x0a\x41\x65\x72\x6f\x73\x70\x61\x63\x65\x2c\x31\x33\
+\x2c\x23\x39\x66\x39\x39\x31\x61\x0a\x41\x75\x74\x6f\x6d\x61\x74\
+\x69\x6f\x6e\x20\x26\x20\x4d\x61\x63\x68\x69\x6e\x65\x20\x54\x6f\
+\x6f\x6c\x73\x2c\x31\x33\x2c\x23\x61\x34\x38\x30\x33\x33\x0a\x4d\
+\x65\x64\x69\x63\x61\x6c\x20\x26\x20\x42\x69\x6f\x69\x6e\x66\x6f\
+\x72\x6d\x61\x74\x69\x63\x73\x2c\x31\x33\x2c\x23\x61\x39\x36\x36\
+\x34\x64\x0a\x49\x6d\x61\x67\x69\x6e\x67\x20\x26\x20\x53\x70\x65\
+\x63\x69\x61\x6c\x20\x45\x66\x66\x65\x63\x74\x73\x2c\x31\x32\x2c\
+\x23\x61\x65\x34\x64\x36\x36\x0a\x44\x65\x66\x65\x6e\x73\x65\x2c\
+\x31\x31\x2c\x23\x62\x33\x33\x33\x38\x30\x0a\x54\x65\x73\x74\x20\
+\x26\x20\x4d\x65\x61\x73\x75\x72\x65\x6d\x65\x6e\x74\x20\x53\x79\
+\x73\x74\x65\x6d\x73\x2c\x39\x2c\x23\x61\x36\x34\x30\x38\x36\x0a\
+\x4f\x69\x6c\x20\x26\x20\x47\x61\x73\x2c\x39\x2c\x23\x39\x39\x34\
+\x64\x38\x64\x0a\x45\x6e\x74\x65\x72\x74\x61\x69\x6e\x6d\x65\x6e\
+\x74\x20\x26\x20\x42\x72\x6f\x61\x64\x63\x61\x73\x74\x69\x6e\x67\
+\x2c\x37\x2c\x23\x38\x64\x35\x61\x39\x33\x0a\x46\x69\x6e\x61\x6e\
+\x63\x69\x61\x6c\x2c\x36\x2c\x23\x38\x30\x36\x36\x39\x39\x0a\x43\
+\x6f\x6e\x73\x75\x6d\x65\x72\x20\x45\x6c\x65\x63\x74\x72\x6f\x6e\
+\x69\x63\x73\x2c\x34\x2c\x23\x38\x30\x37\x33\x61\x36\x0a\x4f\x74\
+\x68\x65\x72\x2c\x33\x38\x2c\x23\x38\x30\x38\x30\x62\x33\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x04\x9e\x89\xb3\
+\x00\x43\
+\x00\x68\x00\x61\x00\x72\x00\x74\x00\x73\
+\x00\x0a\
+\x08\xaf\x5c\xb4\
+\x00\x71\
+\x00\x74\x00\x64\x00\x61\x00\x74\x00\x61\x00\x2e\x00\x63\x00\x68\x00\x74\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/itemviews/chart/mydata.cht b/examples/itemviews/chart/mydata.cht
new file mode 100644
index 0000000..029fd81
--- /dev/null
+++ b/examples/itemviews/chart/mydata.cht
@@ -0,0 +1,8 @@
+London,4,red
+Stockholm,5,pink
+Paris,2,lightgreen
+Rome,11,green
+Lisbon,9,blue
+Madrid,8,lightblue
+Berlin,6,magenta
+Vienna,7,purple
diff --git a/examples/itemviews/chart/qtdata.cht b/examples/itemviews/chart/qtdata.cht
new file mode 100644
index 0000000..6386246
--- /dev/null
+++ b/examples/itemviews/chart/qtdata.cht
@@ -0,0 +1,14 @@
+Scientific Research,21,#99e600
+Engineering & Design,18,#99cc00
+Automotive,14,#99b300
+Aerospace,13,#9f991a
+Automation & Machine Tools,13,#a48033
+Medical & Bioinformatics,13,#a9664d
+Imaging & Special Effects,12,#ae4d66
+Defense,11,#b33380
+Test & Measurement Systems,9,#a64086
+Oil & Gas,9,#994d8d
+Entertainment & Broadcasting,7,#8d5a93
+Financial,6,#806699
+Consumer Electronics,4,#8073a6
+Other,38,#8080b3
diff --git a/examples/itemviews/coloreditorfactory.py b/examples/itemviews/coloreditorfactory.py
new file mode 100755
index 0000000..e6fdd1f
--- /dev/null
+++ b/examples/itemviews/coloreditorfactory.py
@@ -0,0 +1,128 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty, Qt, QVariant
+from PyQt5.QtGui import QColor
+from PyQt5.QtWidgets import (QApplication, QComboBox, QGridLayout,
+        QItemEditorCreatorBase, QItemEditorFactory, QTableWidget,
+        QTableWidgetItem, QWidget)
+
+
+class ColorListEditor(QComboBox):
+    def __init__(self, widget=None):
+        super(ColorListEditor, self).__init__(widget)
+
+        self.populateList()
+
+    def getColor(self):
+        color = self.itemData(self.currentIndex(), Qt.DecorationRole)
+        return color
+
+    def setColor(self, color):
+        self.setCurrentIndex(self.findData(color, Qt.DecorationRole))
+
+    color = pyqtProperty(QColor, getColor, setColor, user=True)
+
+    def populateList(self):
+        for i, colorName in enumerate(QColor.colorNames()):
+            color = QColor(colorName)
+            self.insertItem(i, colorName)
+            self.setItemData(i, color, Qt.DecorationRole)
+
+
+class ColorListItemEditorCreator(QItemEditorCreatorBase):
+    def createWidget(self, parent):
+        return ColorListEditor(parent)
+
+
+class Window(QWidget):
+    def __init__(self, parent=None):
+        super(Window, self).__init__(parent)
+
+        factory = QItemEditorFactory()
+        factory.registerEditor(QVariant.Color, ColorListItemEditorCreator())
+        QItemEditorFactory.setDefaultFactory(factory)
+
+        self.createGUI()
+
+    def createGUI(self):
+        tableData = [
+            ("Alice", QColor('aliceblue')),
+            ("Neptun", QColor('aquamarine')),
+            ("Ferdinand", QColor('springgreen'))
+        ]
+
+        table = QTableWidget(3, 2)
+        table.setHorizontalHeaderLabels(["Name", "Hair Color"])
+        table.verticalHeader().setVisible(False)
+        table.resize(150, 50)
+
+        for i, (name, color) in enumerate(tableData):
+            nameItem = QTableWidgetItem(name)
+            colorItem = QTableWidgetItem()
+            colorItem.setData(Qt.DisplayRole, color)
+            table.setItem(i, 0, nameItem)
+            table.setItem(i, 1, colorItem)
+
+        table.resizeColumnToContents(0)
+        table.horizontalHeader().setStretchLastSection(True)
+
+        layout = QGridLayout()
+        layout.addWidget(table, 0, 0)
+        self.setLayout(layout)
+
+        self.setWindowTitle("Color Editor Factory")
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    window = Window()
+    window.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/combowidgetmapper.py b/examples/itemviews/combowidgetmapper.py
new file mode 100755
index 0000000..7dc286e
--- /dev/null
+++ b/examples/itemviews/combowidgetmapper.py
@@ -0,0 +1,136 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QStringListModel
+from PyQt5.QtGui import QStandardItem, QStandardItemModel
+from PyQt5.QtWidgets import (QApplication, QComboBox, QDataWidgetMapper,
+        QGridLayout, QLabel, QLineEdit, QPushButton, QTextEdit, QWidget)
+
+
+class Window(QWidget):
+    def __init__(self, parent=None):
+        super(Window, self).__init__(parent)
+
+        # Set up the model.
+        self.setupModel()
+
+        # Set up the widgets.
+        nameLabel = QLabel("Na&me:")
+        nameEdit = QLineEdit()
+        addressLabel = QLabel("&Address:")
+        addressEdit = QTextEdit()
+        typeLabel = QLabel("&Type:")
+        typeComboBox = QComboBox()
+        self.nextButton = QPushButton("&Next")
+        self.previousButton = QPushButton("&Previous")
+        nameLabel.setBuddy(nameEdit)
+        addressLabel.setBuddy(addressEdit)
+        typeLabel.setBuddy(typeComboBox)
+        typeComboBox.setModel(self.typeModel)
+
+        # Set up the mapper.
+        self.mapper = QDataWidgetMapper(self)
+        self.mapper.setModel(self.model)
+        self.mapper.addMapping(nameEdit, 0)
+        self.mapper.addMapping(addressEdit, 1)
+        self.mapper.addMapping(typeComboBox, 2, 'currentIndex')
+
+        # Set up connections and layouts.
+        self.previousButton.clicked.connect(self.mapper.toPrevious)
+        self.nextButton.clicked.connect(self.mapper.toNext)
+        self.mapper.currentIndexChanged.connect(self.updateButtons)
+
+        layout = QGridLayout()
+        layout.addWidget(nameLabel, 0, 0, 1, 1)
+        layout.addWidget(nameEdit, 0, 1, 1, 1)
+        layout.addWidget(self.previousButton, 0, 2, 1, 1)
+        layout.addWidget(addressLabel, 1, 0, 1, 1)
+        layout.addWidget(addressEdit, 1, 1, 2, 1)
+        layout.addWidget(self.nextButton, 1, 2, 1, 1)
+        layout.addWidget(typeLabel, 3, 0, 1, 1)
+        layout.addWidget(typeComboBox, 3, 1, 1, 1)
+        self.setLayout(layout)
+
+        self.setWindowTitle("Delegate Widget Mapper")
+        self.mapper.toFirst()
+ 
+    def setupModel(self):
+        items = ("Home", "Work", "Other")
+        self.typeModel = QStringListModel(items, self)
+
+        self.model = QStandardItemModel(5, 3, self)
+
+        names = ("Alice", "Bob", "Carol", "Donald", "Emma")
+        addresses = ("<qt>123 Main Street<br/>Market Town</qt>",
+                     "<qt>PO Box 32<br/>Mail Handling Service"
+                     "<br/>Service City</qt>",
+                     "<qt>The Lighthouse<br/>Remote Island</qt>",
+                     "<qt>47338 Park Avenue<br/>Big City</qt>",
+                     "<qt>Research Station<br/>Base Camp<br/>Big Mountain</qt>")
+        types = ("0", "1", "2", "0", "2")
+        
+        for row, name in enumerate(names):
+            item = QStandardItem(name)
+            self.model.setItem(row, 0, item)
+            item = QStandardItem(addresses[row])
+            self.model.setItem(row, 1, item)
+            item = QStandardItem(types[row])
+            self.model.setItem(row, 2, item)
+ 
+    def updateButtons(self, row):
+        self.previousButton.setEnabled(row > 0)
+        self.nextButton.setEnabled(row < self.model.rowCount() - 1)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    window = Window()
+    window.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/customsortfiltermodel.py b/examples/itemviews/customsortfiltermodel.py
new file mode 100755
index 0000000..8ec1e81
--- /dev/null
+++ b/examples/itemviews/customsortfiltermodel.py
@@ -0,0 +1,248 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QDate, QDateTime, QRegExp, QSortFilterProxyModel, Qt,
+        QTime)
+from PyQt5.QtGui import QStandardItemModel
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QDateEdit,
+        QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit, QTreeView,
+        QVBoxLayout, QWidget)
+
+
+class MySortFilterProxyModel(QSortFilterProxyModel):
+    def __init__(self, parent=None):
+        super(MySortFilterProxyModel, self).__init__(parent)
+
+        self.minDate = QDate()
+        self.maxDate = QDate()
+
+    def setFilterMinimumDate(self, date):
+        self.minDate = date
+        self.invalidateFilter()
+
+    def filterMinimumDate(self):
+        return self.minDate
+
+    def setFilterMaximumDate(self, date):
+        self.maxDate = date
+        self.invalidateFilter()
+ 
+    def filterMaximumDate(self):
+        return self.maxDate
+
+    def filterAcceptsRow(self, sourceRow, sourceParent):
+        index0 = self.sourceModel().index(sourceRow, 0, sourceParent)
+        index1 = self.sourceModel().index(sourceRow, 1, sourceParent)
+        index2 = self.sourceModel().index(sourceRow, 2, sourceParent)
+
+        return (   (self.filterRegExp().indexIn(self.sourceModel().data(index0)) >= 0
+                    or self.filterRegExp().indexIn(self.sourceModel().data(index1)) >= 0)
+                and self.dateInRange(self.sourceModel().data(index2)))
+
+    def lessThan(self, left, right):
+        leftData = self.sourceModel().data(left)
+        rightData = self.sourceModel().data(right)
+
+        if not isinstance(leftData, QDate):
+            emailPattern = QRegExp("([\\w\\.]*@[\\w\\.]*)")
+
+            if left.column() == 1 and emailPattern.indexIn(leftData) != -1:
+                leftData = emailPattern.cap(1)
+
+            if right.column() == 1 and emailPattern.indexIn(rightData) != -1:
+                rightData = emailPattern.cap(1)
+
+        return leftData < rightData
+
+    def dateInRange(self, date):
+        if isinstance(date, QDateTime):
+            date = date.date()
+
+        return (    (not self.minDate.isValid() or date >= self.minDate)
+                and (not self.maxDate.isValid() or date <= self.maxDate))
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.proxyModel = MySortFilterProxyModel(self)
+        self.proxyModel.setDynamicSortFilter(True)
+
+        self.sourceView = QTreeView()
+        self.sourceView.setRootIsDecorated(False)
+        self.sourceView.setAlternatingRowColors(True)
+
+        sourceLayout = QHBoxLayout()
+        sourceLayout.addWidget(self.sourceView)
+        sourceGroupBox = QGroupBox("Original Model")
+        sourceGroupBox.setLayout(sourceLayout)
+
+        self.filterCaseSensitivityCheckBox = QCheckBox("Case sensitive filter")
+        self.filterCaseSensitivityCheckBox.setChecked(True)
+        self.filterPatternLineEdit = QLineEdit()
+        self.filterPatternLineEdit.setText("Grace|Sports")
+        filterPatternLabel = QLabel("&Filter pattern:")
+        filterPatternLabel.setBuddy(self.filterPatternLineEdit)
+        self.filterSyntaxComboBox = QComboBox()
+        self.filterSyntaxComboBox.addItem("Regular expression", QRegExp.RegExp)
+        self.filterSyntaxComboBox.addItem("Wildcard", QRegExp.Wildcard)
+        self.filterSyntaxComboBox.addItem("Fixed string", QRegExp.FixedString)
+        self.fromDateEdit = QDateEdit()
+        self.fromDateEdit.setDate(QDate(2006, 12, 22))
+        self.fromDateEdit.setCalendarPopup(True)
+        fromLabel = QLabel("F&rom:")
+        fromLabel.setBuddy(self.fromDateEdit)
+        self.toDateEdit = QDateEdit()
+        self.toDateEdit.setDate(QDate(2007, 1, 5))
+        self.toDateEdit.setCalendarPopup(True)
+        toLabel = QLabel("&To:")
+        toLabel.setBuddy(self.toDateEdit)
+
+        self.filterPatternLineEdit.textChanged.connect(self.textFilterChanged)
+        self.filterSyntaxComboBox.currentIndexChanged.connect(self.textFilterChanged)
+        self.filterCaseSensitivityCheckBox.toggled.connect(self.textFilterChanged)
+        self.fromDateEdit.dateChanged.connect(self.dateFilterChanged)
+        self.toDateEdit.dateChanged.connect(self.dateFilterChanged)
+
+        self.proxyView = QTreeView()
+        self.proxyView.setRootIsDecorated(False)
+        self.proxyView.setAlternatingRowColors(True)
+        self.proxyView.setModel(self.proxyModel)
+        self.proxyView.setSortingEnabled(True)
+        self.proxyView.sortByColumn(1, Qt.AscendingOrder)
+
+        self.textFilterChanged()
+        self.dateFilterChanged()
+
+        proxyLayout = QGridLayout()
+        proxyLayout.addWidget(self.proxyView, 0, 0, 1, 3)
+        proxyLayout.addWidget(filterPatternLabel, 1, 0)
+        proxyLayout.addWidget(self.filterPatternLineEdit, 1, 1)
+        proxyLayout.addWidget(self.filterSyntaxComboBox, 1, 2)
+        proxyLayout.addWidget(self.filterCaseSensitivityCheckBox, 2, 0, 1, 3)
+        proxyLayout.addWidget(fromLabel, 3, 0)
+        proxyLayout.addWidget(self.fromDateEdit, 3, 1, 1, 2)
+        proxyLayout.addWidget(toLabel, 4, 0)
+        proxyLayout.addWidget(self.toDateEdit, 4, 1, 1, 2)
+        proxyGroupBox = QGroupBox("Sorted/Filtered Model")
+        proxyGroupBox.setLayout(proxyLayout)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(sourceGroupBox)
+        mainLayout.addWidget(proxyGroupBox)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Custom Sort/Filter Model")
+        self.resize(500, 450)
+
+    def setSourceModel(self, model):
+        self.proxyModel.setSourceModel(model)
+        self.sourceView.setModel(model)
+
+    def textFilterChanged(self):
+        syntax = QRegExp.PatternSyntax(
+            self.filterSyntaxComboBox.itemData(
+                self.filterSyntaxComboBox.currentIndex()))
+        caseSensitivity = (
+            self.filterCaseSensitivityCheckBox.isChecked()
+            and Qt.CaseSensitive or Qt.CaseInsensitive)
+        regExp = QRegExp(self.filterPatternLineEdit.text(), caseSensitivity, syntax)
+        self.proxyModel.setFilterRegExp(regExp)
+
+    def dateFilterChanged(self):
+        self.proxyModel.setFilterMinimumDate(self.fromDateEdit.date())
+        self.proxyModel.setFilterMaximumDate(self.toDateEdit.date())
+
+
+def addMail(model, subject, sender, date):
+    model.insertRow(0)
+    model.setData(model.index(0, 0), subject)
+    model.setData(model.index(0, 1), sender)
+    model.setData(model.index(0, 2), date)
+
+
+def createMailModel(parent):
+    model = QStandardItemModel(0, 3, parent)
+
+    model.setHeaderData(0, Qt.Horizontal, "Subject")
+    model.setHeaderData(1, Qt.Horizontal, "Sender")
+    model.setHeaderData(2, Qt.Horizontal, "Date")
+
+    addMail(model, "Happy New Year!", "Grace K. <grace at software-inc.com>",
+            QDateTime(QDate(2006, 12, 31), QTime(17, 3)))
+    addMail(model, "Radically new concept", "Grace K. <grace at software-inc.com>",
+            QDateTime(QDate(2006, 12, 22), QTime(9, 44)))
+    addMail(model, "Accounts", "pascale at nospam.com",
+            QDateTime(QDate(2006, 12, 31), QTime(12, 50)))
+    addMail(model, "Expenses", "Joe Bloggs <joe at bloggs.com>",
+            QDateTime(QDate(2006, 12, 25), QTime(11, 39)))
+    addMail(model, "Re: Expenses", "Andy <andy at nospam.com>",
+            QDateTime(QDate(2007, 1, 2), QTime(16, 5)))
+    addMail(model, "Re: Accounts", "Joe Bloggs <joe at bloggs.com>",
+            QDateTime(QDate(2007, 1, 3), QTime(14, 18)))
+    addMail(model, "Re: Accounts", "Andy <andy at nospam.com>",
+            QDateTime(QDate(2007, 1, 3), QTime(14, 26)))
+    addMail(model, "Sports", "Linda Smith <linda.smith at nospam.com>",
+            QDateTime(QDate(2007, 1, 5), QTime(11, 33)))
+    addMail(model, "AW: Sports", "Rolf Newschweinstein <rolfn at nospam.com>",
+            QDateTime(QDate(2007, 1, 5), QTime(12, 0)))
+    addMail(model, "RE: Sports", "Petra Schmidt <petras at nospam.com>",
+            QDateTime(QDate(2007, 1, 5), QTime(12, 1)))
+
+    return model
+
+
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    window = Window()
+    window.setSourceModel(createMailModel(window))
+    window.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/dirview.py b/examples/itemviews/dirview.py
new file mode 100755
index 0000000..01fe7fa
--- /dev/null
+++ b/examples/itemviews/dirview.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtWidgets import QApplication, QFileSystemModel, QTreeView
+
+
+app = QApplication(sys.argv)
+
+model = QFileSystemModel()
+model.setRootPath('')
+tree = QTreeView()
+tree.setModel(model)
+
+tree.setAnimated(False)
+tree.setIndentation(20)
+tree.setSortingEnabled(True)
+
+tree.setWindowTitle("Dir View")
+tree.resize(640, 480)
+tree.show()
+
+sys.exit(app.exec_())
diff --git a/examples/itemviews/editabletreemodel/default.txt b/examples/itemviews/editabletreemodel/default.txt
new file mode 100644
index 0000000..2b2fb57
--- /dev/null
+++ b/examples/itemviews/editabletreemodel/default.txt
@@ -0,0 +1,40 @@
+Getting Started				How to familiarize yourself with Qt Designer
+    Launching Designer			Running the Qt Designer application
+    The User Interface			How to interact with Qt Designer
+
+Designing a Component			Creating a GUI for your application
+    Creating a Dialog			How to create a dialog
+    Composing the Dialog		Putting widgets into the dialog example
+    Creating a Layout			Arranging widgets on a form
+    Signal and Slot Connections		Making widget communicate with each other
+
+Using a Component in Your Application	Generating code from forms
+    The Direct Approach			Using a form without any adjustments
+    The Single Inheritance Approach	Subclassing a form's base class
+    The Multiple Inheritance Approach	Subclassing the form itself
+    Automatic Connections		Connecting widgets using a naming scheme
+        A Dialog Without Auto-Connect	How to connect widgets without a naming scheme
+        A Dialog With Auto-Connect	Using automatic connections
+
+Form Editing Mode			How to edit a form in Qt Designer
+    Managing Forms			Loading and saving forms
+    Editing a Form			Basic editing techniques
+    The Property Editor			Changing widget properties
+    The Object Inspector		Examining the hierarchy of objects on a form
+    Layouts				Objects that arrange widgets on a form
+        Applying and Breaking Layouts	Managing widgets in layouts 
+        Horizontal and Vertical Layouts	Standard row and column layouts
+        The Grid Layout			Arranging widgets in a matrix
+    Previewing Forms			Checking that the design works
+
+Using Containers			How to group widgets together
+    General Features			Common container features
+    Frames				QFrame
+    Group Boxes				QGroupBox
+    Stacked Widgets			QStackedWidget
+    Tab Widgets				QTabWidget
+    Toolbox Widgets			QToolBox
+
+Connection Editing Mode			Connecting widgets together with signals and slots
+    Connecting Objects			Making connections in Qt Designer
+    Editing Connections			Changing existing connections
diff --git a/examples/itemviews/editabletreemodel/editabletreemodel.py b/examples/itemviews/editabletreemodel/editabletreemodel.py
new file mode 100755
index 0000000..9d31068
--- /dev/null
+++ b/examples/itemviews/editabletreemodel/editabletreemodel.py
@@ -0,0 +1,422 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QAbstractItemModel, QFile, QIODevice,
+        QItemSelectionModel, QModelIndex, Qt)
+from PyQt5.QtWidgets import QApplication, QMainWindow
+
+import editabletreemodel_rc
+from ui_mainwindow import Ui_MainWindow
+
+
+class TreeItem(object):
+    def __init__(self, data, parent=None):
+        self.parentItem = parent
+        self.itemData = data
+        self.childItems = []
+
+    def child(self, row):
+        return self.childItems[row]
+
+    def childCount(self):
+        return len(self.childItems)
+
+    def childNumber(self):
+        if self.parentItem != None:
+            return self.parentItem.childItems.index(self)
+        return 0
+
+    def columnCount(self):
+        return len(self.itemData)
+
+    def data(self, column):
+        return self.itemData[column]
+
+    def insertChildren(self, position, count, columns):
+        if position < 0 or position > len(self.childItems):
+            return False
+
+        for row in range(count):
+            data = [None for v in range(columns)]
+            item = TreeItem(data, self)
+            self.childItems.insert(position, item)
+
+        return True
+
+    def insertColumns(self, position, columns):
+        if position < 0 or position > len(self.itemData):
+            return False
+
+        for column in range(columns):
+            self.itemData.insert(position, None)
+
+        for child in self.childItems:
+            child.insertColumns(position, columns)
+
+        return True
+
+    def parent(self):
+        return self.parentItem
+
+    def removeChildren(self, position, count):
+        if position < 0 or position + count > len(self.childItems):
+            return False
+
+        for row in range(count):
+            self.childItems.pop(position)
+
+        return True
+
+    def removeColumns(self, position, columns):
+        if position < 0 or position + columns > len(self.itemData):
+            return False
+
+        for column in range(columns):
+            self.itemData.pop(position)
+
+        for child in self.childItems:
+            child.removeColumns(position, columns)
+
+        return True
+
+    def setData(self, column, value):
+        if column < 0 or column >= len(self.itemData):
+            return False
+
+        self.itemData[column] = value
+
+        return True
+
+
+class TreeModel(QAbstractItemModel):
+    def __init__(self, headers, data, parent=None):
+        super(TreeModel, self).__init__(parent)
+
+        rootData = [header for header in headers]
+        self.rootItem = TreeItem(rootData)
+        self.setupModelData(data.split("\n"), self.rootItem)
+
+    def columnCount(self, parent=QModelIndex()):
+        return self.rootItem.columnCount()
+
+    def data(self, index, role):
+        if not index.isValid():
+            return None
+
+        if role != Qt.DisplayRole and role != Qt.EditRole:
+            return None
+
+        item = self.getItem(index)
+        return item.data(index.column())
+
+    def flags(self, index):
+        if not index.isValid():
+            return 0
+
+        return Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable
+
+    def getItem(self, index):
+        if index.isValid():
+            item = index.internalPointer()
+            if item:
+                return item
+
+        return self.rootItem
+
+    def headerData(self, section, orientation, role=Qt.DisplayRole):
+        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
+            return self.rootItem.data(section)
+
+        return None
+
+    def index(self, row, column, parent=QModelIndex()):
+        if parent.isValid() and parent.column() != 0:
+            return QModelIndex()
+
+        parentItem = self.getItem(parent)
+        childItem = parentItem.child(row)
+        if childItem:
+            return self.createIndex(row, column, childItem)
+        else:
+            return QModelIndex()
+
+    def insertColumns(self, position, columns, parent=QModelIndex()):
+        self.beginInsertColumns(parent, position, position + columns - 1)
+        success = self.rootItem.insertColumns(position, columns)
+        self.endInsertColumns()
+
+        return success
+
+    def insertRows(self, position, rows, parent=QModelIndex()):
+        parentItem = self.getItem(parent)
+        self.beginInsertRows(parent, position, position + rows - 1)
+        success = parentItem.insertChildren(position, rows,
+                self.rootItem.columnCount())
+        self.endInsertRows()
+
+        return success
+
+    def parent(self, index):
+        if not index.isValid():
+            return QModelIndex()
+
+        childItem = self.getItem(index)
+        parentItem = childItem.parent()
+
+        if parentItem == self.rootItem:
+            return QModelIndex()
+
+        return self.createIndex(parentItem.childNumber(), 0, parentItem)
+
+    def removeColumns(self, position, columns, parent=QModelIndex()):
+        self.beginRemoveColumns(parent, position, position + columns - 1)
+        success = self.rootItem.removeColumns(position, columns)
+        self.endRemoveColumns()
+
+        if self.rootItem.columnCount() == 0:
+            self.removeRows(0, self.rowCount())
+
+        return success
+
+    def removeRows(self, position, rows, parent=QModelIndex()):
+        parentItem = self.getItem(parent)
+
+        self.beginRemoveRows(parent, position, position + rows - 1)
+        success = parentItem.removeChildren(position, rows)
+        self.endRemoveRows()
+
+        return success
+
+    def rowCount(self, parent=QModelIndex()):
+        parentItem = self.getItem(parent)
+
+        return parentItem.childCount()
+
+    def setData(self, index, value, role=Qt.EditRole):
+        if role != Qt.EditRole:
+            return False
+
+        item = self.getItem(index)
+        result = item.setData(index.column(), value)
+
+        if result:
+            self.dataChanged.emit(index, index)
+
+        return result
+
+    def setHeaderData(self, section, orientation, value, role=Qt.EditRole):
+        if role != Qt.EditRole or orientation != Qt.Horizontal:
+            return False
+
+        result = self.rootItem.setData(section, value)
+        if result:
+            self.headerDataChanged.emit(orientation, section, section)
+
+        return result
+
+    def setupModelData(self, lines, parent):
+        parents = [parent]
+        indentations = [0]
+
+        number = 0
+
+        while number < len(lines):
+            position = 0
+            while position < len(lines[number]):
+                if lines[number][position] != " ":
+                    break
+                position += 1
+
+            lineData = lines[number][position:].trimmed()
+
+            if lineData:
+                # Read the column data from the rest of the line.
+                columnData = [s for s in lineData.split('\t') if s]
+
+                if position > indentations[-1]:
+                    # The last child of the current parent is now the new
+                    # parent unless the current parent has no children.
+
+                    if parents[-1].childCount() > 0:
+                        parents.append(parents[-1].child(parents[-1].childCount() - 1))
+                        indentations.append(position)
+
+                else:
+                    while position < indentations[-1] and len(parents) > 0:
+                        parents.pop()
+                        indentations.pop()
+
+                # Append a new item to the current parent's list of children.
+                parent = parents[-1]
+                parent.insertChildren(parent.childCount(), 1,
+                        self.rootItem.columnCount())
+                for column in range(len(columnData)):
+                    parent.child(parent.childCount() -1).setData(column, columnData[column])
+
+            number += 1
+
+
+class MainWindow(QMainWindow, Ui_MainWindow):
+    def __init__(self, parent=None):
+        super(MainWindow, self).__init__(parent)
+
+        self.setupUi(self)
+
+        headers = ("Title", "Description")
+
+        file = QFile(':/default.txt')
+        file.open(QIODevice.ReadOnly)
+        model = TreeModel(headers, file.readAll())
+        file.close()
+
+        self.view.setModel(model)
+        for column in range(model.columnCount()):
+            self.view.resizeColumnToContents(column)
+
+        self.exitAction.triggered.connect(QApplication.instance().quit)
+
+        self.view.selectionModel().selectionChanged.connect(self.updateActions)
+
+        self.actionsMenu.aboutToShow.connect(self.updateActions)
+        self.insertRowAction.triggered.connect(self.insertRow)
+        self.insertColumnAction.triggered.connect(self.insertColumn)
+        self.removeRowAction.triggered.connect(self.removeRow)
+        self.removeColumnAction.triggered.connect(self.removeColumn)
+        self.insertChildAction.triggered.connect(self.insertChild)
+
+        self.updateActions()
+
+    def insertChild(self):
+        index = self.view.selectionModel().currentIndex()
+        model = self.view.model()
+
+        if model.columnCount(index) == 0:
+            if not model.insertColumn(0, index):
+                return
+
+        if not model.insertRow(0, index):
+            return
+
+        for column in range(model.columnCount(index)):
+            child = model.index(0, column, index)
+            model.setData(child, "[No data]", Qt.EditRole)
+            if model.headerData(column, Qt.Horizontal) is None:
+                model.setHeaderData(column, Qt.Horizontal, "[No header]",
+                        Qt.EditRole)
+
+        self.view.selectionModel().setCurrentIndex(model.index(0, 0, index),
+                QItemSelectionModel.ClearAndSelect)
+        self.updateActions()
+
+    def insertColumn(self):
+        model = self.view.model()
+        column = self.view.selectionModel().currentIndex().column()
+
+        changed = model.insertColumn(column + 1)
+        if changed:
+            model.setHeaderData(column + 1, Qt.Horizontal, "[No header]",
+                    Qt.EditRole)
+
+        self.updateActions()
+
+        return changed
+
+    def insertRow(self):
+        index = self.view.selectionModel().currentIndex()
+        model = self.view.model()
+
+        if not model.insertRow(index.row()+1, index.parent()):
+            return
+
+        self.updateActions()
+
+        for column in range(model.columnCount(index.parent())):
+            child = model.index(index.row()+1, column, index.parent())
+            model.setData(child, "[No data]", Qt.EditRole)
+
+    def removeColumn(self):
+        model = self.view.model()
+        column = self.view.selectionModel().currentIndex().column()
+
+        changed = model.removeColumn(column)
+        if changed:
+            self.updateActions()
+
+        return changed
+
+    def removeRow(self):
+        index = self.view.selectionModel().currentIndex()
+        model = self.view.model()
+
+        if (model.removeRow(index.row(), index.parent())):
+            self.updateActions()
+
+    def updateActions(self):
+        hasSelection = not self.view.selectionModel().selection().isEmpty()
+        self.removeRowAction.setEnabled(hasSelection)
+        self.removeColumnAction.setEnabled(hasSelection)
+
+        hasCurrent = self.view.selectionModel().currentIndex().isValid()
+        self.insertRowAction.setEnabled(hasCurrent)
+        self.insertColumnAction.setEnabled(hasCurrent)
+
+        if hasCurrent:
+            self.view.closePersistentEditor(self.view.selectionModel().currentIndex())
+
+            row = self.view.selectionModel().currentIndex().row()
+            column = self.view.selectionModel().currentIndex().column()
+            if self.view.selectionModel().currentIndex().parent().isValid():
+                self.statusBar().showMessage("Position: (%d,%d)" % (row, column))
+            else:
+                self.statusBar().showMessage("Position: (%d,%d) in top level" % (row, column))
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/editabletreemodel/editabletreemodel.qrc b/examples/itemviews/editabletreemodel/editabletreemodel.qrc
new file mode 100644
index 0000000..2fb48f2
--- /dev/null
+++ b/examples/itemviews/editabletreemodel/editabletreemodel.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/" >
+        <file>default.txt</file>
+    </qresource>
+</RCC>
diff --git a/examples/itemviews/editabletreemodel/editabletreemodel_rc.py b/examples/itemviews/editabletreemodel/editabletreemodel_rc.py
new file mode 100644
index 0000000..8f2e22e
--- /dev/null
+++ b/examples/itemviews/editabletreemodel/editabletreemodel_rc.py
@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 12 13:00:44 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x07\xb9\
+\x47\
+\x65\x74\x74\x69\x6e\x67\x20\x53\x74\x61\x72\x74\x65\x64\x09\x09\
+\x09\x09\x48\x6f\x77\x20\x74\x6f\x20\x66\x61\x6d\x69\x6c\x69\x61\
+\x72\x69\x7a\x65\x20\x79\x6f\x75\x72\x73\x65\x6c\x66\x20\x77\x69\
+\x74\x68\x20\x51\x74\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x0a\x20\
+\x20\x20\x20\x4c\x61\x75\x6e\x63\x68\x69\x6e\x67\x20\x44\x65\x73\
+\x69\x67\x6e\x65\x72\x09\x09\x09\x52\x75\x6e\x6e\x69\x6e\x67\x20\
+\x74\x68\x65\x20\x51\x74\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\
+\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x0a\x20\x20\x20\x20\
+\x54\x68\x65\x20\x55\x73\x65\x72\x20\x49\x6e\x74\x65\x72\x66\x61\
+\x63\x65\x09\x09\x09\x48\x6f\x77\x20\x74\x6f\x20\x69\x6e\x74\x65\
+\x72\x61\x63\x74\x20\x77\x69\x74\x68\x20\x51\x74\x20\x44\x65\x73\
+\x69\x67\x6e\x65\x72\x0a\x0a\x44\x65\x73\x69\x67\x6e\x69\x6e\x67\
+\x20\x61\x20\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x09\x09\x09\x43\
+\x72\x65\x61\x74\x69\x6e\x67\x20\x61\x20\x47\x55\x49\x20\x66\x6f\
+\x72\x20\x79\x6f\x75\x72\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\
+\x6f\x6e\x0a\x20\x20\x20\x20\x43\x72\x65\x61\x74\x69\x6e\x67\x20\
+\x61\x20\x44\x69\x61\x6c\x6f\x67\x09\x09\x09\x48\x6f\x77\x20\x74\
+\x6f\x20\x63\x72\x65\x61\x74\x65\x20\x61\x20\x64\x69\x61\x6c\x6f\
+\x67\x0a\x20\x20\x20\x20\x43\x6f\x6d\x70\x6f\x73\x69\x6e\x67\x20\
+\x74\x68\x65\x20\x44\x69\x61\x6c\x6f\x67\x09\x09\x50\x75\x74\x74\
+\x69\x6e\x67\x20\x77\x69\x64\x67\x65\x74\x73\x20\x69\x6e\x74\x6f\
+\x20\x74\x68\x65\x20\x64\x69\x61\x6c\x6f\x67\x20\x65\x78\x61\x6d\
+\x70\x6c\x65\x0a\x20\x20\x20\x20\x43\x72\x65\x61\x74\x69\x6e\x67\
+\x20\x61\x20\x4c\x61\x79\x6f\x75\x74\x09\x09\x09\x41\x72\x72\x61\
+\x6e\x67\x69\x6e\x67\x20\x77\x69\x64\x67\x65\x74\x73\x20\x6f\x6e\
+\x20\x61\x20\x66\x6f\x72\x6d\x0a\x20\x20\x20\x20\x53\x69\x67\x6e\
+\x61\x6c\x20\x61\x6e\x64\x20\x53\x6c\x6f\x74\x20\x43\x6f\x6e\x6e\
+\x65\x63\x74\x69\x6f\x6e\x73\x09\x09\x4d\x61\x6b\x69\x6e\x67\x20\
+\x77\x69\x64\x67\x65\x74\x20\x63\x6f\x6d\x6d\x75\x6e\x69\x63\x61\
+\x74\x65\x20\x77\x69\x74\x68\x20\x65\x61\x63\x68\x20\x6f\x74\x68\
+\x65\x72\x0a\x0a\x55\x73\x69\x6e\x67\x20\x61\x20\x43\x6f\x6d\x70\
+\x6f\x6e\x65\x6e\x74\x20\x69\x6e\x20\x59\x6f\x75\x72\x20\x41\x70\
+\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x09\x47\x65\x6e\x65\x72\x61\
+\x74\x69\x6e\x67\x20\x63\x6f\x64\x65\x20\x66\x72\x6f\x6d\x20\x66\
+\x6f\x72\x6d\x73\x0a\x20\x20\x20\x20\x54\x68\x65\x20\x44\x69\x72\
+\x65\x63\x74\x20\x41\x70\x70\x72\x6f\x61\x63\x68\x09\x09\x09\x55\
+\x73\x69\x6e\x67\x20\x61\x20\x66\x6f\x72\x6d\x20\x77\x69\x74\x68\
+\x6f\x75\x74\x20\x61\x6e\x79\x20\x61\x64\x6a\x75\x73\x74\x6d\x65\
+\x6e\x74\x73\x0a\x20\x20\x20\x20\x54\x68\x65\x20\x53\x69\x6e\x67\
+\x6c\x65\x20\x49\x6e\x68\x65\x72\x69\x74\x61\x6e\x63\x65\x20\x41\
+\x70\x70\x72\x6f\x61\x63\x68\x09\x53\x75\x62\x63\x6c\x61\x73\x73\
+\x69\x6e\x67\x20\x61\x20\x66\x6f\x72\x6d\x27\x73\x20\x62\x61\x73\
+\x65\x20\x63\x6c\x61\x73\x73\x0a\x20\x20\x20\x20\x54\x68\x65\x20\
+\x4d\x75\x6c\x74\x69\x70\x6c\x65\x20\x49\x6e\x68\x65\x72\x69\x74\
+\x61\x6e\x63\x65\x20\x41\x70\x70\x72\x6f\x61\x63\x68\x09\x53\x75\
+\x62\x63\x6c\x61\x73\x73\x69\x6e\x67\x20\x74\x68\x65\x20\x66\x6f\
+\x72\x6d\x20\x69\x74\x73\x65\x6c\x66\x0a\x20\x20\x20\x20\x41\x75\
+\x74\x6f\x6d\x61\x74\x69\x63\x20\x43\x6f\x6e\x6e\x65\x63\x74\x69\
+\x6f\x6e\x73\x09\x09\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6e\x67\x20\
+\x77\x69\x64\x67\x65\x74\x73\x20\x75\x73\x69\x6e\x67\x20\x61\x20\
+\x6e\x61\x6d\x69\x6e\x67\x20\x73\x63\x68\x65\x6d\x65\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x41\x20\x44\x69\x61\x6c\x6f\x67\x20\x57\
+\x69\x74\x68\x6f\x75\x74\x20\x41\x75\x74\x6f\x2d\x43\x6f\x6e\x6e\
+\x65\x63\x74\x09\x48\x6f\x77\x20\x74\x6f\x20\x63\x6f\x6e\x6e\x65\
+\x63\x74\x20\x77\x69\x64\x67\x65\x74\x73\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x61\x20\x6e\x61\x6d\x69\x6e\x67\x20\x73\x63\x68\x65\
+\x6d\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x41\x20\x44\x69\x61\
+\x6c\x6f\x67\x20\x57\x69\x74\x68\x20\x41\x75\x74\x6f\x2d\x43\x6f\
+\x6e\x6e\x65\x63\x74\x09\x55\x73\x69\x6e\x67\x20\x61\x75\x74\x6f\
+\x6d\x61\x74\x69\x63\x20\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\
+\x73\x0a\x0a\x46\x6f\x72\x6d\x20\x45\x64\x69\x74\x69\x6e\x67\x20\
+\x4d\x6f\x64\x65\x09\x09\x09\x48\x6f\x77\x20\x74\x6f\x20\x65\x64\
+\x69\x74\x20\x61\x20\x66\x6f\x72\x6d\x20\x69\x6e\x20\x51\x74\x20\
+\x44\x65\x73\x69\x67\x6e\x65\x72\x0a\x20\x20\x20\x20\x4d\x61\x6e\
+\x61\x67\x69\x6e\x67\x20\x46\x6f\x72\x6d\x73\x09\x09\x09\x4c\x6f\
+\x61\x64\x69\x6e\x67\x20\x61\x6e\x64\x20\x73\x61\x76\x69\x6e\x67\
+\x20\x66\x6f\x72\x6d\x73\x0a\x20\x20\x20\x20\x45\x64\x69\x74\x69\
+\x6e\x67\x20\x61\x20\x46\x6f\x72\x6d\x09\x09\x09\x42\x61\x73\x69\
+\x63\x20\x65\x64\x69\x74\x69\x6e\x67\x20\x74\x65\x63\x68\x6e\x69\
+\x71\x75\x65\x73\x0a\x20\x20\x20\x20\x54\x68\x65\x20\x50\x72\x6f\
+\x70\x65\x72\x74\x79\x20\x45\x64\x69\x74\x6f\x72\x09\x09\x09\x43\
+\x68\x61\x6e\x67\x69\x6e\x67\x20\x77\x69\x64\x67\x65\x74\x20\x70\
+\x72\x6f\x70\x65\x72\x74\x69\x65\x73\x0a\x20\x20\x20\x20\x54\x68\
+\x65\x20\x4f\x62\x6a\x65\x63\x74\x20\x49\x6e\x73\x70\x65\x63\x74\
+\x6f\x72\x09\x09\x45\x78\x61\x6d\x69\x6e\x69\x6e\x67\x20\x74\x68\
+\x65\x20\x68\x69\x65\x72\x61\x72\x63\x68\x79\x20\x6f\x66\x20\x6f\
+\x62\x6a\x65\x63\x74\x73\x20\x6f\x6e\x20\x61\x20\x66\x6f\x72\x6d\
+\x0a\x20\x20\x20\x20\x4c\x61\x79\x6f\x75\x74\x73\x09\x09\x09\x09\
+\x4f\x62\x6a\x65\x63\x74\x73\x20\x74\x68\x61\x74\x20\x61\x72\x72\
+\x61\x6e\x67\x65\x20\x77\x69\x64\x67\x65\x74\x73\x20\x6f\x6e\x20\
+\x61\x20\x66\x6f\x72\x6d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x41\
+\x70\x70\x6c\x79\x69\x6e\x67\x20\x61\x6e\x64\x20\x42\x72\x65\x61\
+\x6b\x69\x6e\x67\x20\x4c\x61\x79\x6f\x75\x74\x73\x09\x4d\x61\x6e\
+\x61\x67\x69\x6e\x67\x20\x77\x69\x64\x67\x65\x74\x73\x20\x69\x6e\
+\x20\x6c\x61\x79\x6f\x75\x74\x73\x20\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x48\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x20\x61\x6e\x64\
+\x20\x56\x65\x72\x74\x69\x63\x61\x6c\x20\x4c\x61\x79\x6f\x75\x74\
+\x73\x09\x53\x74\x61\x6e\x64\x61\x72\x64\x20\x72\x6f\x77\x20\x61\
+\x6e\x64\x20\x63\x6f\x6c\x75\x6d\x6e\x20\x6c\x61\x79\x6f\x75\x74\
+\x73\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x54\x68\x65\x20\x47\x72\
+\x69\x64\x20\x4c\x61\x79\x6f\x75\x74\x09\x09\x09\x41\x72\x72\x61\
+\x6e\x67\x69\x6e\x67\x20\x77\x69\x64\x67\x65\x74\x73\x20\x69\x6e\
+\x20\x61\x20\x6d\x61\x74\x72\x69\x78\x0a\x20\x20\x20\x20\x50\x72\
+\x65\x76\x69\x65\x77\x69\x6e\x67\x20\x46\x6f\x72\x6d\x73\x09\x09\
+\x09\x43\x68\x65\x63\x6b\x69\x6e\x67\x20\x74\x68\x61\x74\x20\x74\
+\x68\x65\x20\x64\x65\x73\x69\x67\x6e\x20\x77\x6f\x72\x6b\x73\x0a\
+\x0a\x55\x73\x69\x6e\x67\x20\x43\x6f\x6e\x74\x61\x69\x6e\x65\x72\
+\x73\x09\x09\x09\x48\x6f\x77\x20\x74\x6f\x20\x67\x72\x6f\x75\x70\
+\x20\x77\x69\x64\x67\x65\x74\x73\x20\x74\x6f\x67\x65\x74\x68\x65\
+\x72\x0a\x20\x20\x20\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x46\x65\
+\x61\x74\x75\x72\x65\x73\x09\x09\x09\x43\x6f\x6d\x6d\x6f\x6e\x20\
+\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x66\x65\x61\x74\x75\x72\
+\x65\x73\x0a\x20\x20\x20\x20\x46\x72\x61\x6d\x65\x73\x09\x09\x09\
+\x09\x51\x46\x72\x61\x6d\x65\x0a\x20\x20\x20\x20\x47\x72\x6f\x75\
+\x70\x20\x42\x6f\x78\x65\x73\x09\x09\x09\x09\x51\x47\x72\x6f\x75\
+\x70\x42\x6f\x78\x0a\x20\x20\x20\x20\x53\x74\x61\x63\x6b\x65\x64\
+\x20\x57\x69\x64\x67\x65\x74\x73\x09\x09\x09\x51\x53\x74\x61\x63\
+\x6b\x65\x64\x57\x69\x64\x67\x65\x74\x0a\x20\x20\x20\x20\x54\x61\
+\x62\x20\x57\x69\x64\x67\x65\x74\x73\x09\x09\x09\x09\x51\x54\x61\
+\x62\x57\x69\x64\x67\x65\x74\x0a\x20\x20\x20\x20\x54\x6f\x6f\x6c\
+\x62\x6f\x78\x20\x57\x69\x64\x67\x65\x74\x73\x09\x09\x09\x51\x54\
+\x6f\x6f\x6c\x42\x6f\x78\x0a\x0a\x43\x6f\x6e\x6e\x65\x63\x74\x69\
+\x6f\x6e\x20\x45\x64\x69\x74\x69\x6e\x67\x20\x4d\x6f\x64\x65\x09\
+\x09\x09\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6e\x67\x20\x77\x69\x64\
+\x67\x65\x74\x73\x20\x74\x6f\x67\x65\x74\x68\x65\x72\x20\x77\x69\
+\x74\x68\x20\x73\x69\x67\x6e\x61\x6c\x73\x20\x61\x6e\x64\x20\x73\
+\x6c\x6f\x74\x73\x0a\x20\x20\x20\x20\x43\x6f\x6e\x6e\x65\x63\x74\
+\x69\x6e\x67\x20\x4f\x62\x6a\x65\x63\x74\x73\x09\x09\x09\x4d\x61\
+\x6b\x69\x6e\x67\x20\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x73\
+\x20\x69\x6e\x20\x51\x74\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x0a\
+\x20\x20\x20\x20\x45\x64\x69\x74\x69\x6e\x67\x20\x43\x6f\x6e\x6e\
+\x65\x63\x74\x69\x6f\x6e\x73\x09\x09\x09\x43\x68\x61\x6e\x67\x69\
+\x6e\x67\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x63\x6f\x6e\x6e\
+\x65\x63\x74\x69\x6f\x6e\x73\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x0b\
+\x0c\xe2\x22\xf4\
+\x00\x64\
+\x00\x65\x00\x66\x00\x61\x00\x75\x00\x6c\x00\x74\x00\x2e\x00\x74\x00\x78\x00\x74\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/itemviews/editabletreemodel/mainwindow.ui b/examples/itemviews/editabletreemodel/mainwindow.ui
new file mode 100644
index 0000000..4335004
--- /dev/null
+++ b/examples/itemviews/editabletreemodel/mainwindow.ui
@@ -0,0 +1,125 @@
+<ui version="4.0" >
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>573</width>
+    <height>468</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Editable Tree Model</string>
+  </property>
+  <widget class="QWidget" name="centralwidget" >
+   <layout class="QVBoxLayout" >
+    <property name="margin" >
+     <number>0</number>
+    </property>
+    <property name="spacing" >
+     <number>0</number>
+    </property>
+    <item>
+     <widget class="QTreeView" name="view" >
+      <property name="alternatingRowColors" >
+       <bool>true</bool>
+      </property>
+      <property name="selectionBehavior" >
+       <enum>QAbstractItemView::SelectItems</enum>
+      </property>
+      <property name="horizontalScrollMode" >
+       <enum>QAbstractItemView::ScrollPerPixel</enum>
+      </property>
+      <property name="animated" >
+       <bool>false</bool>
+      </property>
+      <property name="allColumnsShowFocus" >
+       <bool>true</bool>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menubar" >
+   <property name="geometry" >
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>573</width>
+     <height>31</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="fileMenu" >
+    <property name="title" >
+     <string>&File</string>
+    </property>
+    <addaction name="exitAction" />
+   </widget>
+   <widget class="QMenu" name="actionsMenu" >
+    <property name="title" >
+     <string>&Actions</string>
+    </property>
+    <addaction name="insertRowAction" />
+    <addaction name="insertColumnAction" />
+    <addaction name="separator" />
+    <addaction name="removeRowAction" />
+    <addaction name="removeColumnAction" />
+    <addaction name="separator" />
+    <addaction name="insertChildAction" />
+   </widget>
+   <addaction name="fileMenu" />
+   <addaction name="actionsMenu" />
+  </widget>
+  <widget class="QStatusBar" name="statusbar" />
+  <action name="exitAction" >
+   <property name="text" >
+    <string>E&xit</string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+Q</string>
+   </property>
+  </action>
+  <action name="insertRowAction" >
+   <property name="text" >
+    <string>Insert Row</string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+I, R</string>
+   </property>
+  </action>
+  <action name="removeRowAction" >
+   <property name="text" >
+    <string>Remove Row</string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+R, R</string>
+   </property>
+  </action>
+  <action name="insertColumnAction" >
+   <property name="text" >
+    <string>Insert Column</string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+I, C</string>
+   </property>
+  </action>
+  <action name="removeColumnAction" >
+   <property name="text" >
+    <string>Remove Column</string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+R, C</string>
+   </property>
+  </action>
+  <action name="insertChildAction" >
+   <property name="text" >
+    <string>Insert Child</string>
+   </property>
+   <property name="shortcut" >
+    <string>Ctrl+N</string>
+   </property>
+  </action>
+ </widget>
+ <connections/>
+</ui>
diff --git a/examples/itemviews/editabletreemodel/ui_mainwindow.py b/examples/itemviews/editabletreemodel/ui_mainwindow.py
new file mode 100644
index 0000000..10d46da
--- /dev/null
+++ b/examples/itemviews/editabletreemodel/ui_mainwindow.py
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'mainwindow.ui'
+#
+# Created: Fri Jul 26 06:51:23 2013
+#      by: PyQt5 UI code generator 5.0.1-snapshot-2a99e59669ee
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_MainWindow(object):
+    def setupUi(self, MainWindow):
+        MainWindow.setObjectName("MainWindow")
+        MainWindow.resize(573, 468)
+        self.centralwidget = QtWidgets.QWidget(MainWindow)
+        self.centralwidget.setObjectName("centralwidget")
+        self.vboxlayout = QtWidgets.QVBoxLayout(self.centralwidget)
+        self.vboxlayout.setContentsMargins(0, 0, 0, 0)
+        self.vboxlayout.setSpacing(0)
+        self.vboxlayout.setObjectName("vboxlayout")
+        self.view = QtWidgets.QTreeView(self.centralwidget)
+        self.view.setAlternatingRowColors(True)
+        self.view.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectItems)
+        self.view.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
+        self.view.setAnimated(False)
+        self.view.setAllColumnsShowFocus(True)
+        self.view.setObjectName("view")
+        self.vboxlayout.addWidget(self.view)
+        MainWindow.setCentralWidget(self.centralwidget)
+        self.menubar = QtWidgets.QMenuBar(MainWindow)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 573, 31))
+        self.menubar.setObjectName("menubar")
+        self.fileMenu = QtWidgets.QMenu(self.menubar)
+        self.fileMenu.setObjectName("fileMenu")
+        self.actionsMenu = QtWidgets.QMenu(self.menubar)
+        self.actionsMenu.setObjectName("actionsMenu")
+        MainWindow.setMenuBar(self.menubar)
+        self.statusbar = QtWidgets.QStatusBar(MainWindow)
+        self.statusbar.setObjectName("statusbar")
+        MainWindow.setStatusBar(self.statusbar)
+        self.exitAction = QtWidgets.QAction(MainWindow)
+        self.exitAction.setObjectName("exitAction")
+        self.insertRowAction = QtWidgets.QAction(MainWindow)
+        self.insertRowAction.setObjectName("insertRowAction")
+        self.removeRowAction = QtWidgets.QAction(MainWindow)
+        self.removeRowAction.setObjectName("removeRowAction")
+        self.insertColumnAction = QtWidgets.QAction(MainWindow)
+        self.insertColumnAction.setObjectName("insertColumnAction")
+        self.removeColumnAction = QtWidgets.QAction(MainWindow)
+        self.removeColumnAction.setObjectName("removeColumnAction")
+        self.insertChildAction = QtWidgets.QAction(MainWindow)
+        self.insertChildAction.setObjectName("insertChildAction")
+        self.fileMenu.addAction(self.exitAction)
+        self.actionsMenu.addAction(self.insertRowAction)
+        self.actionsMenu.addAction(self.insertColumnAction)
+        self.actionsMenu.addSeparator()
+        self.actionsMenu.addAction(self.removeRowAction)
+        self.actionsMenu.addAction(self.removeColumnAction)
+        self.actionsMenu.addSeparator()
+        self.actionsMenu.addAction(self.insertChildAction)
+        self.menubar.addAction(self.fileMenu.menuAction())
+        self.menubar.addAction(self.actionsMenu.menuAction())
+
+        self.retranslateUi(MainWindow)
+        QtCore.QMetaObject.connectSlotsByName(MainWindow)
+
+    def retranslateUi(self, MainWindow):
+        _translate = QtCore.QCoreApplication.translate
+        MainWindow.setWindowTitle(_translate("MainWindow", "Editable Tree Model"))
+        self.fileMenu.setTitle(_translate("MainWindow", "&File"))
+        self.actionsMenu.setTitle(_translate("MainWindow", "&Actions"))
+        self.exitAction.setText(_translate("MainWindow", "E&xit"))
+        self.exitAction.setShortcut(_translate("MainWindow", "Ctrl+Q"))
+        self.insertRowAction.setText(_translate("MainWindow", "Insert Row"))
+        self.insertRowAction.setShortcut(_translate("MainWindow", "Ctrl+I, R"))
+        self.removeRowAction.setText(_translate("MainWindow", "Remove Row"))
+        self.removeRowAction.setShortcut(_translate("MainWindow", "Ctrl+R, R"))
+        self.insertColumnAction.setText(_translate("MainWindow", "Insert Column"))
+        self.insertColumnAction.setShortcut(_translate("MainWindow", "Ctrl+I, C"))
+        self.removeColumnAction.setText(_translate("MainWindow", "Remove Column"))
+        self.removeColumnAction.setShortcut(_translate("MainWindow", "Ctrl+R, C"))
+        self.insertChildAction.setText(_translate("MainWindow", "Insert Child"))
+        self.insertChildAction.setShortcut(_translate("MainWindow", "Ctrl+N"))
+
diff --git a/examples/itemviews/fetchmore.py b/examples/itemviews/fetchmore.py
new file mode 100755
index 0000000..37577e5
--- /dev/null
+++ b/examples/itemviews/fetchmore.py
@@ -0,0 +1,151 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Darryl Wallace <wallacdj at gmail.com>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (pyqtSignal, QAbstractListModel, QDir, QLibraryInfo,
+        QModelIndex, Qt)
+from PyQt5.QtWidgets import (QApplication, QGridLayout, QLabel, QLineEdit,
+        QListView, QSizePolicy, QTextBrowser, QWidget)
+
+
+class FileListModel(QAbstractListModel):
+    numberPopulated = pyqtSignal(int)
+
+    def __init__(self, parent=None):
+        super(FileListModel, self).__init__(parent)
+
+        self.fileCount = 0    
+        self.fileList = []
+
+    def rowCount(self, parent=QModelIndex()):
+        return self.fileCount
+
+    def data(self, index, role=Qt.DisplayRole):
+        if not index.isValid():
+            return None
+
+        if index.row() >= len(self.fileList) or index.row() < 0:
+            return None
+
+        if role == Qt.DisplayRole:
+            return self.fileList[index.row()]
+
+        if role == Qt.BackgroundRole:
+            batch = (index.row() // 100) % 2
+            if batch == 0:
+                return QApplication.palette().base()
+
+            return QApplication.palette().alternateBase()
+
+        return None
+
+    def canFetchMore(self, index):
+        return self.fileCount < len(self.fileList)
+
+    def fetchMore(self, index):
+        remainder = len(self.fileList) - self.fileCount
+        itemsToFetch = min(100, remainder)
+
+        self.beginInsertRows(QModelIndex(), self.fileCount,
+                self.fileCount + itemsToFetch)
+
+        self.fileCount += itemsToFetch
+
+        self.endInsertRows()
+
+        self.numberPopulated.emit(itemsToFetch)
+
+    def setDirPath(self, path):
+        dir = QDir(path)
+
+        self.beginResetModel()
+        self.fileList = dir.entryList()
+        self.fileCount = 0
+        self.endResetModel()
+
+
+class Window(QWidget):
+    def __init__(self, parent=None):
+        super(Window, self).__init__(parent)
+
+        model = FileListModel(self)
+        model.setDirPath(QLibraryInfo.location(QLibraryInfo.PrefixPath))
+
+        label = QLabel("Directory")
+        lineEdit = QLineEdit()
+        label.setBuddy(lineEdit)
+
+        view = QListView()
+        view.setModel(model)
+
+        self.logViewer = QTextBrowser()
+        self.logViewer.setSizePolicy(QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred))
+
+        lineEdit.textChanged.connect(model.setDirPath)
+        lineEdit.textChanged.connect(self.logViewer.clear)
+        model.numberPopulated.connect(self.updateLog)
+
+        layout = QGridLayout()
+        layout.addWidget(label, 0, 0)
+        layout.addWidget(lineEdit, 0, 1)
+        layout.addWidget(view, 1, 0, 1, 2)
+        layout.addWidget(self.logViewer, 2, 0, 1, 2)
+
+        self.setLayout(layout)
+        self.setWindowTitle("Fetch More Example")
+
+    def updateLog(self, number):
+        self.logViewer.append("%d items added." % number)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    window = Window()
+    window.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/pixelator/images/qt.png b/examples/itemviews/pixelator/images/qt.png
new file mode 100644
index 0000000..a2c9c77
Binary files /dev/null and b/examples/itemviews/pixelator/images/qt.png differ
diff --git a/examples/itemviews/pixelator/pixelator.py b/examples/itemviews/pixelator/pixelator.py
new file mode 100755
index 0000000..65671ae
--- /dev/null
+++ b/examples/itemviews/pixelator/pixelator.py
@@ -0,0 +1,301 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QAbstractTableModel, QDir, QModelIndex, QRect,
+        QRectF, QSize, Qt)
+from PyQt5.QtGui import QBrush, qGray, QImage, QPainter
+from PyQt5.QtPrintSupport import QPrinter
+from PyQt5.QtWidgets import (QAbstractItemDelegate, QApplication, QDialog,
+        QFileDialog, QHBoxLayout, QLabel, QMainWindow, QMessageBox, QMenu,
+        QProgressDialog, QSpinBox, QStyle, QStyleOptionViewItem, QTableView,
+        QVBoxLayout, QWidget)
+
+import pixelator_rc
+
+
+ItemSize = 256
+
+
+class PixelDelegate(QAbstractItemDelegate):
+    def __init__(self, parent=None):
+        super(PixelDelegate, self).__init__(parent)
+
+        self.pixelSize = 12
+
+    def paint(self, painter, option, index):
+        if option.state & QStyle.State_Selected:
+            painter.fillRect(option.rect, option.palette.highlight())
+
+        size = min(option.rect.width(), option.rect.height())
+        brightness = index.model().data(index, Qt.DisplayRole)
+        radius = (size/2.0) - (brightness/255.0 * size/2.0)
+        if radius == 0.0:
+            return
+
+        painter.save()
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.setPen(Qt.NoPen)
+
+        if option.state & QStyle.State_Selected:
+            painter.setBrush(option.palette.highlightedText())
+        else:
+            painter.setBrush(QBrush(Qt.black))
+
+        painter.drawEllipse(QRectF(
+                            option.rect.x() + option.rect.width()/2 - radius,
+                            option.rect.y() + option.rect.height()/2 - radius,
+                            2*radius, 2*radius))
+
+        painter.restore()
+
+    def sizeHint(self, option, index):
+        return QSize(self.pixelSize, self.pixelSize)
+
+    def setPixelSize(self, size):
+        self.pixelSize = size
+
+
+class ImageModel(QAbstractTableModel):
+    def __init__(self, parent=None):
+        super(ImageModel, self).__init__(parent)
+
+        self.modelImage = QImage()
+
+    def setImage(self, image):
+        self.beginResetModel()
+        self.modelImage = QImage(image)
+        self.endResetModel()
+
+    def rowCount(self, parent):
+        return self.modelImage.height()
+
+    def columnCount(self, parent):
+        return self.modelImage.width()
+
+    def data(self, index, role):
+        if not index.isValid() or role != Qt.DisplayRole:
+            return None
+
+        return qGray(self.modelImage.pixel(index.column(), index.row()))
+
+    def headerData(self, section, orientation, role):
+        if role == Qt.SizeHintRole:
+            return QSize(1, 1)
+
+        return None
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.currentPath = QDir.homePath()
+        self.model = ImageModel(self)
+
+        centralWidget = QWidget()
+
+        self.view = QTableView()
+        self.view.setShowGrid(False)
+        self.view.horizontalHeader().hide()
+        self.view.verticalHeader().hide()
+        self.view.horizontalHeader().setMinimumSectionSize(1)
+        self.view.verticalHeader().setMinimumSectionSize(1)
+        self.view.setModel(self.model)
+
+        delegate = PixelDelegate(self)
+        self.view.setItemDelegate(delegate)
+
+        pixelSizeLabel = QLabel("Pixel size:")
+        pixelSizeSpinBox = QSpinBox()
+        pixelSizeSpinBox.setMinimum(4)
+        pixelSizeSpinBox.setMaximum(32)
+        pixelSizeSpinBox.setValue(12)
+
+        fileMenu = QMenu("&File", self)
+        openAction = fileMenu.addAction("&Open...")
+        openAction.setShortcut("Ctrl+O")
+
+        self.printAction = fileMenu.addAction("&Print...")
+        self.printAction.setEnabled(False)
+        self.printAction.setShortcut("Ctrl+P")
+
+        quitAction = fileMenu.addAction("E&xit")
+        quitAction.setShortcut("Ctrl+Q")
+
+        helpMenu = QMenu("&Help", self)
+        aboutAction = helpMenu.addAction("&About")
+
+        self.menuBar().addMenu(fileMenu)
+        self.menuBar().addSeparator()
+        self.menuBar().addMenu(helpMenu)
+
+        openAction.triggered.connect(self.chooseImage)
+        self.printAction.triggered.connect(self.printImage)
+        quitAction.triggered.connect(QApplication.instance().quit)
+        aboutAction.triggered.connect(self.showAboutBox)
+        pixelSizeSpinBox.valueChanged.connect(delegate.setPixelSize)
+        pixelSizeSpinBox.valueChanged.connect(self.updateView)
+
+        controlsLayout = QHBoxLayout()
+        controlsLayout.addWidget(pixelSizeLabel)
+        controlsLayout.addWidget(pixelSizeSpinBox)
+        controlsLayout.addStretch(1)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.view)
+        mainLayout.addLayout(controlsLayout)
+        centralWidget.setLayout(mainLayout)
+
+        self.setCentralWidget(centralWidget)
+
+        self.setWindowTitle("Pixelator")
+        self.resize(640, 480)
+
+    def chooseImage(self):
+        fileName, _ = QFileDialog.getOpenFileName(self, "Choose an Image",
+                self.currentPath, '*')
+
+        if fileName:
+            self.openImage(fileName)
+
+    def openImage(self, fileName):
+        image = QImage()
+
+        if image.load(fileName):
+            self.model.setImage(image)
+
+            if not fileName.startswith(':/'):
+                self.currentPath = fileName
+                self.setWindowTitle("%s - Pixelator" % self.currentPath)
+
+            self.printAction.setEnabled(True)
+            self.updateView()
+
+    def printImage(self):
+        if self.model.rowCount(QModelIndex()) * self.model.columnCount(QModelIndex()) > 90000:
+            answer = QMessageBox.question(self, "Large Image Size",
+                    "The printed image may be very large. Are you sure that "
+                    "you want to print it?",
+                    QMessageBox.Yes | QMessageBox.No)
+            if answer == QMessageBox.No:
+                return
+
+        printer = QPrinter(QPrinter.HighResolution)
+
+        dlg = QPrintDialog(printer, self)
+        dlg.setWindowTitle("Print Image")
+
+        if dlg.exec_() != QDialog.Accepted:
+            return
+
+        painter = QPainter()
+        painter.begin(printer)
+
+        rows = self.model.rowCount(QModelIndex())
+        columns = self.model.columnCount(QModelIndex())
+        sourceWidth = (columns+1) * ItemSize
+        sourceHeight = (rows+1) * ItemSize
+
+        painter.save()
+
+        xscale = printer.pageRect().width() / float(sourceWidth)
+        yscale = printer.pageRect().height() / float(sourceHeight)
+        scale = min(xscale, yscale)
+
+        painter.translate(printer.pageRect().x()+printer.pageRect().width()/2,
+                          printer.pageRect().y()+printer.pageRect().height()/2)
+        painter.scale(scale, scale)
+        painter.translate(-sourceWidth/2, -sourceHeight/2)
+
+        option = QStyleOptionViewItem()
+        parent = QModelIndex()
+
+        progress = QProgressDialog("Printing...", "Cancel", 0, rows, self)
+        y = ItemSize / 2.0
+
+        for row in range(rows):
+            progress.setValue(row)
+            QApplication.processEvents()
+            if progress.wasCanceled():
+                break
+
+            x = ItemSize / 2.0
+
+            for column in range(columns):
+                option.rect = QRect(x, y, ItemSize, ItemSize)
+                self.view.itemDelegate.paint(painter, option,
+                        self.model.index(row, column, parent))
+                x = x + ItemSize
+
+            y = y + ItemSize
+
+        progress.setValue(rows)
+
+        painter.restore()
+        painter.end()
+
+        if progress.wasCanceled():
+            QMessageBox.information(self, "Printing canceled",
+                    "The printing process was canceled.", QMessageBox.Cancel)
+
+    def showAboutBox(self):
+        QMessageBox.about(self, "About the Pixelator example",
+                "This example demonstrates how a standard view and a custom\n"
+                "delegate can be used to produce a specialized "
+                "representation\nof data in a simple custom model.")
+
+    def updateView(self):
+        self.view.resizeColumnsToContents()
+        self.view.resizeRowsToContents()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.show()
+    window.openImage(':/images/qt.png')
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/pixelator/pixelator.qrc b/examples/itemviews/pixelator/pixelator.qrc
new file mode 100644
index 0000000..c105e13
--- /dev/null
+++ b/examples/itemviews/pixelator/pixelator.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+   <file>images/qt.png</file>
+</qresource>
+</RCC>
diff --git a/examples/itemviews/pixelator/pixelator_rc.py b/examples/itemviews/pixelator/pixelator_rc.py
new file mode 100644
index 0000000..862ee4f
--- /dev/null
+++ b/examples/itemviews/pixelator/pixelator_rc.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 12 15:31:20 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x02\x90\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x26\x00\x00\x00\x26\x08\x00\x00\x00\x00\x8d\x56\xb6\x72\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x12\x00\x00\x0b\x12\
+\x01\xd2\xdd\x7e\xfc\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd4\x08\
+\x06\x0a\x1f\x38\xb8\xaf\xd3\x52\x00\x00\x00\x02\x62\x4b\x47\x44\
+\x00\xff\x87\x8f\xcc\xbf\x00\x00\x02\x21\x49\x44\x41\x54\x38\xcb\
+\x63\xf8\x70\x96\x08\xf0\x81\xe1\xec\x7f\x22\xc0\x59\x54\x65\x9f\
+\xd7\x16\x38\xab\x4a\x4a\x6a\xb8\x97\x6d\xfd\x86\x53\xd9\xf9\x58\
+\x4e\x06\x38\xe0\xcf\xbc\x85\x55\xd9\xf3\x28\x46\x06\x14\xc0\x92\
+\xfd\x01\x53\xd9\x16\x11\x06\x0c\x20\x77\x0c\x5d\xd9\x64\x66\x06\
+\x2c\x80\x7d\x15\xaa\xb2\xc9\x70\x19\x36\x2d\x07\x7b\x35\x16\x18\
+\x8f\x79\x2d\xb2\xb2\xad\x50\xb3\x98\x43\xb7\x81\x7d\xf8\x69\x8d\
+\x07\xd4\xa1\x9c\x67\x10\xca\x5e\x40\xdd\x65\x71\x19\xe1\xb9\x23\
+\x5a\x10\x31\x95\xaf\x70\x65\xd1\x10\x91\x8c\xdf\xc8\x61\xf5\x25\
+\x00\x22\x5a\x09\x53\x76\x91\x09\xa2\x0a\xa1\xe4\x6d\x3e\xd0\xee\
+\xdf\xbe\x10\x6b\x9f\x41\x95\xc5\x43\x6c\xfc\x85\x50\x65\xc4\xe0\
+\x06\x54\xf7\x51\x19\x2c\x51\x03\x51\xf6\x99\x0b\xec\xfa\x4b\xc8\
+\xaa\x18\xc0\xea\xb6\x83\x95\xc9\xfe\x03\x2b\x5b\x0f\xe6\x04\xa3\
+\xaa\x82\xa8\x33\x05\xb3\xce\x82\x95\x15\x83\xd9\x5b\xd0\x54\x31\
+\x30\x4c\xfe\xff\x7f\x1a\x98\x31\x01\xac\xcc\x15\xc4\x64\xfd\x8a\
+\xae\x2a\xe3\xdf\xff\xff\xb7\xc1\xac\x64\xb0\x32\x4d\x10\x53\x1d\
+\x9b\xaa\xff\xff\xc0\xce\x76\x07\x2b\x93\x04\x31\x6d\xd0\x54\xa5\
+\xfd\x03\xf3\xe5\x40\x6c\x73\xb0\x32\x69\x10\xd3\x0a\x55\x15\x83\
+\xfb\x77\xb0\x80\x14\x88\x6d\x0d\x56\xa6\x03\x62\x2a\xa3\xaa\x82\
+\xaa\xfb\xcd\x0e\x62\x7a\x83\x95\x79\x83\x83\xed\x1d\xaa\x2a\x88\
+\xba\x4b\x60\x56\x16\x58\x59\x15\x98\xbd\xfc\xff\xff\x7c\xd4\xc4\
+\x06\x54\xd7\x0e\x66\xcc\x00\x2b\xdb\x09\x66\x3b\xff\xff\xff\xcd\
+\x0d\xcc\x4a\xf7\x83\xa9\xfb\xac\x06\xa6\x6f\x80\x95\xfd\x14\x04\
+\x73\xf6\x43\xd5\x65\xfc\xfb\x09\x53\xa7\x02\x26\xb5\xa0\x51\x9f\
+\x0b\xe6\xa9\x7d\x02\xab\x03\x85\x17\x5c\x1d\x18\xf4\x40\x95\xdd\
+\x63\x05\x73\xbd\x81\xc9\xed\xdb\x64\x70\x78\x21\xab\x13\xfa\x00\
+\x4b\x96\x05\x10\x01\x8f\xf7\xf0\xe8\x47\x52\xd7\x07\x4f\xbd\x9f\
+\x14\x21\x22\x0a\x1b\xff\xc1\xd4\x7d\x53\x87\xaa\xe2\xfb\x8c\xc8\
+\x32\xa7\x60\xd9\xdd\x60\xd2\xf5\xbf\xc0\x50\xbd\xd0\xa2\x86\x12\
+\x7e\xb0\x0c\xb8\x8e\x15\x2e\xcc\x21\x2d\xc1\x8a\x1e\x7e\xf0\xec\
+\xbc\x81\x8b\x01\x27\x88\x40\x2a\x1c\xce\xab\x63\xca\x43\x02\x54\
+\xe8\x2c\x72\x51\xf3\xad\x06\xcd\x40\xa1\x09\xdf\xfc\x20\xaa\x50\
+\x0b\xae\x17\xf5\xf2\x08\x45\xda\xbd\x1f\xc1\xe1\x02\x52\x85\x5e\
+\x0c\xfe\x3b\x37\x31\xc5\xc3\xc2\xc6\x3b\x6b\xd6\x4d\x68\xf8\xc5\
+\x9f\xc5\x52\x5a\xe2\x2e\x54\x89\x2b\xa2\x01\x68\x6d\xe8\xa9\x09\
+\x2e\xca\xc3\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x06\
+\x07\x87\x57\x47\
+\x00\x71\
+\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/itemviews/puzzle/example.jpg b/examples/itemviews/puzzle/example.jpg
new file mode 100644
index 0000000..e09fb70
Binary files /dev/null and b/examples/itemviews/puzzle/example.jpg differ
diff --git a/examples/itemviews/puzzle/puzzle.py b/examples/itemviews/puzzle/puzzle.py
new file mode 100755
index 0000000..5930475
--- /dev/null
+++ b/examples/itemviews/puzzle/puzzle.py
@@ -0,0 +1,431 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import random
+
+from PyQt5.QtCore import (pyqtSignal, QAbstractListModel, QByteArray,
+        QDataStream, QIODevice, QMimeData, QModelIndex, QPoint, QRect, QSize,
+        Qt)
+from PyQt5.QtGui import QColor, QCursor, QDrag, QIcon, QPainter, QPixmap
+from PyQt5.QtWidgets import (QApplication, QFileDialog, QFrame, QHBoxLayout,
+        QListView, QMainWindow, QMessageBox, QSizePolicy, QWidget)
+
+import puzzle_rc
+
+
+class PuzzleWidget(QWidget):
+
+    puzzleCompleted = pyqtSignal()
+
+    def __init__(self, parent=None):
+        super(PuzzleWidget, self).__init__(parent)
+
+        self.piecePixmaps = []
+        self.pieceRects = []
+        self.pieceLocations = []
+        self.highlightedRect = QRect()
+        self.inPlace = 0
+
+        self.setAcceptDrops(True)
+        self.setMinimumSize(400, 400)
+        self.setMaximumSize(400, 400)
+
+    def clear(self):
+        self.pieceLocations = []
+        self.piecePixmaps = []
+        self.pieceRects = []
+        self.highlightedRect = QRect()
+        self.inPlace = 0
+        self.update()
+
+    def dragEnterEvent(self, event):
+        if event.mimeData().hasFormat('image/x-puzzle-piece'):
+            event.accept()
+        else:
+            event.ignore()
+
+    def dragLeaveEvent(self, event):
+        updateRect = self.highlightedRect
+        self.highlightedRect = QRect()
+        self.update(updateRect)
+        event.accept()
+
+    def dragMoveEvent(self, event):
+        updateRect = self.highlightedRect.united(self.targetSquare(event.pos()))
+
+        if event.mimeData().hasFormat('image/x-puzzle-piece') and self.findPiece(self.targetSquare(event.pos())) == -1:
+            self.highlightedRect = self.targetSquare(event.pos())
+            event.setDropAction(Qt.MoveAction)
+            event.accept()
+        else:
+            self.highlightedRect = QRect()
+            event.ignore()
+
+        self.update(updateRect)
+
+    def dropEvent(self, event):
+        if event.mimeData().hasFormat('image/x-puzzle-piece') and self.findPiece(self.targetSquare(event.pos())) == -1:
+            pieceData = event.mimeData().data('image/x-puzzle-piece')
+            stream = QDataStream(pieceData, QIODevice.ReadOnly)
+            square = self.targetSquare(event.pos())
+            pixmap = QPixmap()
+            location = QPoint()
+            stream >> pixmap >> location
+
+            self.pieceLocations.append(location)
+            self.piecePixmaps.append(pixmap)
+            self.pieceRects.append(square)
+
+            self.hightlightedRect = QRect()
+            self.update(square)
+
+            event.setDropAction(Qt.MoveAction)
+            event.accept()
+
+            if location == QPoint(square.x() / 80, square.y() / 80):
+                self.inPlace += 1
+                if self.inPlace == 25:
+                    self.puzzleCompleted.emit()
+        else:
+            self.highlightedRect = QRect()
+            event.ignore()
+
+    def findPiece(self, pieceRect):
+        try:
+            return self.pieceRects.index(pieceRect)
+        except ValueError:
+            return -1
+
+    def mousePressEvent(self, event):
+        square = self.targetSquare(event.pos())
+        found = self.findPiece(square)
+
+        if found == -1:
+            return
+
+        location = self.pieceLocations[found]
+        pixmap = self.piecePixmaps[found]
+        del self.pieceLocations[found]
+        del self.piecePixmaps[found]
+        del self.pieceRects[found]
+
+        if location == QPoint(square.x() + 80, square.y() + 80):
+            self.inPlace -= 1
+
+        self.update(square)
+
+        itemData = QByteArray()
+        dataStream = QDataStream(itemData, QIODevice.WriteOnly)
+
+        dataStream << pixmap << location
+
+        mimeData = QMimeData()
+        mimeData.setData('image/x-puzzle-piece', itemData)
+
+        drag = QDrag(self)
+        drag.setMimeData(mimeData)
+        drag.setHotSpot(event.pos() - square.topLeft())
+        drag.setPixmap(pixmap)
+
+        if drag.exec_(Qt.MoveAction) != Qt.MoveAction:
+            self.pieceLocations.insert(found, location)
+            self.piecePixmaps.insert(found, pixmap)
+            self.pieceRects.insert(found, square)
+            self.update(self.targetSquare(event.pos()))
+
+            if location == QPoint(square.x() / 80, square.y() / 80):
+                self.inPlace += 1
+
+    def paintEvent(self, event):
+        painter = QPainter()
+        painter.begin(self)
+        painter.fillRect(event.rect(), Qt.white)
+
+        if self.highlightedRect.isValid():
+            painter.setBrush(QColor("#ffcccc"))
+            painter.setPen(Qt.NoPen)
+            painter.drawRect(self.highlightedRect.adjusted(0, 0, -1, -1))
+
+        for rect, pixmap in zip(self.pieceRects, self.piecePixmaps):
+            painter.drawPixmap(rect, pixmap)
+
+        painter.end()
+
+    def targetSquare(self, position):
+        return QRect(position.x() // 80 * 80, position.y() // 80 * 80, 80, 80)
+
+
+class PiecesModel(QAbstractListModel):
+    def __init__(self, parent=None):
+        super(PiecesModel, self).__init__(parent)
+
+        self.locations = []
+        self.pixmaps = []
+
+    def data(self, index, role=Qt.DisplayRole):
+        if not index.isValid():
+            return None
+
+        if role == Qt.DecorationRole:
+            return QIcon(self.pixmaps[index.row()].scaled(
+                    60, 60, Qt.KeepAspectRatio, Qt.SmoothTransformation))
+
+        if role == Qt.UserRole:
+            return self.pixmaps[index.row()]
+
+        if role == Qt.UserRole + 1:
+            return self.locations[index.row()]
+
+        return None
+
+    def addPiece(self, pixmap, location):
+        if random.random() < 0.5:
+            row = 0
+        else:
+            row = len(self.pixmaps)
+
+        self.beginInsertRows(QModelIndex(), row, row)
+        self.pixmaps.insert(row, pixmap)
+        self.locations.insert(row, location)
+        self.endInsertRows()
+
+    def flags(self,index):
+        if index.isValid():
+            return (Qt.ItemIsEnabled | Qt.ItemIsSelectable |
+                    Qt.ItemIsDragEnabled)
+
+        return Qt.ItemIsDropEnabled
+
+    def removeRows(self,row, count, parent):
+        if parent.isValid():
+            return False
+
+        if row >= len(self.pixmaps) or row + count <= 0:
+            return False
+
+        beginRow = max(0, row)
+        endRow = min(row + count - 1, len(self.pixmaps) - 1)
+
+        self.beginRemoveRows(parent, beginRow, endRow)
+
+        del self.pixmaps[beginRow:endRow + 1]
+        del self.locations[beginRow:endRow + 1]
+
+        self.endRemoveRows()
+        return True
+
+    def mimeTypes(self):
+        return ['image/x-puzzle-piece']
+
+    def mimeData(self, indexes):
+        mimeData = QMimeData()
+        encodedData = QByteArray()
+
+        stream = QDataStream(encodedData, QIODevice.WriteOnly)
+
+        for index in indexes:
+            if index.isValid():
+                pixmap = QPixmap(self.data(index, Qt.UserRole))
+                location = self.data(index, Qt.UserRole + 1)
+                stream << pixmap << location
+
+        mimeData.setData('image/x-puzzle-piece', encodedData)
+        return mimeData
+
+    def dropMimeData(self, data, action, row, column, parent):
+        if not data.hasFormat('image/x-puzzle-piece'):
+            return False
+
+        if action == Qt.IgnoreAction:
+            return True
+
+        if column > 0:
+            return False
+
+        if not parent.isValid():
+            if row < 0:
+                endRow = len(self.pixmaps)
+            else:
+                endRow = min(row, len(self.pixmaps))
+        else:
+            endRow = parent.row()
+
+        encodedData = data.data('image/x-puzzle-piece')
+        stream = QDataStream(encodedData, QIODevice.ReadOnly)
+
+        while not stream.atEnd():
+            pixmap = QPixmap()
+            location = QPoint()
+            stream >> pixmap >> location
+
+            self.beginInsertRows(QModelIndex(), endRow, endRow)
+            self.pixmaps.insert(endRow, pixmap)
+            self.locations.insert(endRow, location)
+            self.endInsertRows()
+
+            endRow += 1
+
+        return True
+
+    def rowCount(self, parent):
+        if parent.isValid():
+            return 0
+        else:
+            return len(self.pixmaps)
+
+    def supportedDropActions(self):
+        return Qt.CopyAction | Qt.MoveAction
+
+    def addPieces(self, pixmap):
+        self.beginRemoveRows(QModelIndex(), 0, 24)
+        self.pixmaps = []
+        self.locations = []
+        self.endRemoveRows()
+
+        for y in range(5):
+            for x in range(5):
+                pieceImage = pixmap.copy(x*80, y*80, 80, 80)
+                self.addPiece(pieceImage, QPoint(x, y))
+
+
+class MainWindow(QMainWindow):
+    def __init__(self, parent=None):
+        super(MainWindow, self).__init__(parent)
+
+        self.puzzleImage = QPixmap()
+
+        self.setupMenus()
+        self.setupWidgets()
+
+        self.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
+        self.setWindowTitle("Puzzle")
+
+    def openImage(self, path=None):
+        if not path:
+            path, _ = QFileDialog.getOpenFileName(self, "Open Image", '',
+                    "Image Files (*.png *.jpg *.bmp)")
+
+        if path:
+            newImage = QPixmap()
+            if not newImage.load(path):
+                QMessageBox.warning(self, "Open Image",
+                        "The image file could not be loaded.",
+                        QMessageBox.Cancel)
+                return
+
+            self.puzzleImage = newImage
+            self.setupPuzzle()
+
+    def setCompleted(self):
+        QMessageBox.information(self, "Puzzle Completed",
+                "Congratulations! You have completed the puzzle!\nClick OK "
+                "to start again.",
+                QMessageBox.Ok)
+
+        self.setupPuzzle()
+
+    def setupPuzzle(self):
+        size = min(self.puzzleImage.width(), self.puzzleImage.height())
+        self.puzzleImage = self.puzzleImage.copy((self.puzzleImage.width()-size)/2,
+                (self.puzzleImage.height() - size)/2, size, size).scaled(400,
+                        400, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
+
+        random.seed(QCursor.pos().x() ^ QCursor.pos().y())
+
+        self.model.addPieces(self.puzzleImage)
+        self.puzzleWidget.clear()
+
+    def setupMenus(self):
+        fileMenu = self.menuBar().addMenu("&File")
+
+        openAction = fileMenu.addAction("&Open...")
+        openAction.setShortcut("Ctrl+O")
+
+        exitAction = fileMenu.addAction("E&xit")
+        exitAction.setShortcut("Ctrl+Q")
+
+        gameMenu = self.menuBar().addMenu("&Game")
+
+        restartAction = gameMenu.addAction("&Restart")
+
+        openAction.triggered.connect(self.openImage)
+        exitAction.triggered.connect(QApplication.instance().quit)
+        restartAction.triggered.connect(self.setupPuzzle)
+
+    def setupWidgets(self):
+        frame = QFrame()
+        frameLayout = QHBoxLayout(frame)
+
+        self.piecesList = QListView()
+        self.piecesList.setDragEnabled(True)
+        self.piecesList.setViewMode(QListView.IconMode)
+        self.piecesList.setIconSize(QSize(60,60))
+        self.piecesList.setGridSize(QSize(80,80))
+        self.piecesList.setSpacing(10)
+        self.piecesList.setMovement(QListView.Snap)
+        self.piecesList.setAcceptDrops(True)
+        self.piecesList.setDropIndicatorShown(True)
+
+        self.model = PiecesModel(self)
+        self.piecesList.setModel(self.model)
+
+        self.puzzleWidget = PuzzleWidget()
+
+        self.puzzleWidget.puzzleCompleted.connect(self.setCompleted,
+                Qt.QueuedConnection)
+
+        frameLayout.addWidget(self.piecesList)
+        frameLayout.addWidget(self.puzzleWidget)
+        self.setCentralWidget(frame)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.openImage(':/images/example.jpg')
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/puzzle/puzzle.qrc b/examples/itemviews/puzzle/puzzle.qrc
new file mode 100644
index 0000000..4076cec
--- /dev/null
+++ b/examples/itemviews/puzzle/puzzle.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/images">
+   <file>example.jpg</file>
+</qresource>
+</RCC>
diff --git a/examples/itemviews/puzzle/puzzle_rc.py b/examples/itemviews/puzzle/puzzle_rc.py
new file mode 100644
index 0000000..625f47a
--- /dev/null
+++ b/examples/itemviews/puzzle/puzzle_rc.py
@@ -0,0 +1,2706 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 12 15:49:57 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\xa6\x9e\
+\xff\
+\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x48\x00\
+\x48\x00\x00\xff\xe1\x00\x16\x45\x78\x69\x66\x00\x00\x4d\x4d\x00\
+\x2a\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\xff\xdb\x00\x43\x00\
+\x05\x03\x04\x04\x04\x03\x05\x04\x04\x04\x05\x05\x05\x06\x07\x0c\
+\x08\x07\x07\x07\x07\x0f\x0b\x0b\x09\x0c\x11\x0f\x12\x12\x11\x0f\
+\x11\x11\x13\x16\x1c\x17\x13\x14\x1a\x15\x11\x11\x18\x21\x18\x1a\
+\x1d\x1d\x1f\x1f\x1f\x13\x17\x22\x24\x22\x1e\x24\x1c\x1e\x1f\x1e\
+\xff\xdb\x00\x43\x01\x05\x05\x05\x07\x06\x07\x0e\x08\x08\x0e\x1e\
+\x14\x11\x14\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\
+\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\
+\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\
+\x1e\x1e\x1e\x1e\x1e\xff\xc0\x00\x11\x08\x01\xa8\x01\xa8\x03\x01\
+\x22\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x1d\x00\x00\x01\x04\
+\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x05\
+\x06\x07\x02\x03\x08\x01\x09\xff\xc4\x00\x54\x10\x00\x01\x03\x03\
+\x03\x02\x05\x01\x04\x06\x07\x01\x0d\x07\x02\x07\x01\x02\x03\x04\
+\x00\x05\x11\x06\x12\x21\x07\x31\x13\x22\x41\x51\x61\x71\x14\x32\
+\x81\x91\x08\x15\x23\x42\xa1\xb1\x16\x33\x52\x62\xc1\xd1\xf0\x24\
+\x34\x37\x43\x63\x72\x74\x75\x82\x92\xb3\xb4\xe1\xf1\x17\x36\x53\
+\x73\x94\xa2\xb2\x25\x93\x09\x44\x83\xa3\xc2\xd2\xe2\xff\xc4\x00\
+\x1b\x01\x00\x02\x03\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x03\x01\x02\x04\x05\x06\x07\xff\xc4\x00\x35\x11\x00\
+\x02\x01\x02\x04\x02\x07\x07\x04\x03\x01\x01\x00\x00\x00\x00\x00\
+\x01\x02\x03\x11\x04\x12\x21\x31\x13\x41\x05\x22\x51\x61\x71\xa1\
+\xf0\x14\x32\x81\x91\xc1\xd1\xe1\x15\x23\xb1\xf1\x42\x52\x62\x63\
+\x24\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00\x3f\x00\xec\
+\xba\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\
+\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x28\xa2\x80\x0a\x2b\x15\x2d\
+\x29\xee\x69\x33\xf3\xd9\x68\x72\xb1\x50\xda\x5b\x80\xae\x8a\x62\
+\x9d\xa8\xe2\x45\x4e\xe7\x1d\x42\x13\xee\xa5\x00\x3f\x8d\x32\xcb\
+\xea\x36\x9f\x8f\xfd\x65\xea\xdc\x93\x9c\x63\xed\x08\x38\xfe\x34\
+\xa7\x88\xa6\xb9\x90\x9d\xf6\x26\xf4\x55\x7c\x7a\xa7\xa5\x87\x7d\
+\x41\x6c\x07\xfe\x70\x9a\xdf\x13\xa9\x5a\x6e\x49\x09\x6a\xfb\x6c\
+\x52\x89\xc6\xd1\x25\x19\xfe\x74\x7b\x44\x09\x27\x54\x53\x34\x5b\
+\xec\x67\xd2\x14\x1c\x49\x07\x90\x41\xc8\x3f\x8d\x2f\x66\x6b\x2e\
+\x76\x58\xab\xc6\xa4\x67\xb3\x22\xe2\xaa\x2b\x14\xad\x2a\xec\x6b\
+\x2a\xb9\x21\x45\x14\x50\x01\x45\x14\x50\x01\x45\x14\x50\x01\x45\
+\x14\x50\x01\x45\x14\x50\x01\x45\x14\x50\x01\x45\x14\x50\x01\x45\
+\x14\x50\x01\x45\x73\x86\xb2\xeb\x1e\xa8\xb8\xf5\x36\xef\xa7\x34\
+\xc4\xb6\xed\x36\xbb\x1b\xaa\x8f\x21\xef\x01\x0e\xbd\x21\xe4\xa8\
+\xa5\x43\xce\x0a\x52\x9c\x85\x0e\x06\x70\x33\x9e\x46\x15\xc5\xea\
+\x7e\xb2\x65\x7b\x9c\xb8\x35\x20\x7f\x65\xc8\xc8\x03\xff\x00\xb4\
+\x03\x5c\xbc\x4f\x4b\xe1\xf0\xf5\x38\x72\xbd\xfb\x8c\x32\xe9\x0a\
+\x4a\x4d\x6a\x74\x25\x15\x4b\x41\xeb\x1d\xd9\x18\xfb\x6d\xa2\x13\
+\xff\x00\xfc\xa5\xa9\xbf\xe7\xba\x9f\xa0\xf5\x8a\xca\xe0\x02\x65\
+\xb2\x7b\x07\xfe\x2c\xa5\xc0\x3f\x88\xfe\x55\x34\xfa\x63\x07\x3f\
+\xf3\xb7\x8d\xcb\xc7\x1b\x46\x5c\xcb\x2e\x8a\x89\x41\xea\x3e\x8f\
+\x97\x80\x2e\xc1\x85\x1f\xdd\x79\xa5\xa3\xf8\xe3\x1f\xc6\xa5\x31\
+\xde\x6a\x44\x76\xe4\x30\xe2\x5d\x65\xd4\x05\xa1\x69\x39\x0a\x49\
+\x19\x04\x1f\x6c\x56\xea\x55\xe9\x55\xf7\x24\x9f\x83\x34\x46\xa4\
+\x27\xee\xbb\x9b\x28\xa2\x8a\x69\x70\xa2\x8a\x28\x00\xa2\x8a\x28\
+\x00\xa2\x8a\x28\x00\xa2\x8a\x28\x00\xa2\x8a\x28\x00\xa2\x8a\x28\
+\x00\xa2\x8a\x28\x00\xa2\x8a\x28\x00\xa2\x82\x40\xa4\xb2\xa5\x21\
+\xa4\x92\x54\x05\x00\x6f\x5b\x89\x48\xe4\xd3\x65\xc6\xef\x1e\x2b\
+\x6a\x52\xdc\x4a\x42\x46\x49\x27\x00\x54\x1b\xa8\xbd\x4a\xb4\x69\
+\x98\xab\x54\x99\x29\x2e\x81\x90\xd8\x57\x3f\x8f\xb5\x72\xfe\xbc\
+\xea\x86\xa1\xd6\x4b\x5a\x23\xc8\xfb\x25\xb4\x28\x82\xbd\xdb\x1a\
+\x1f\xff\x00\xb1\xac\xb5\x71\x0a\x2b\x41\xb4\xa8\x4e\xab\xd3\x62\
+\xfc\xd7\xfd\x73\xd3\x3a\x7d\xb7\x52\x25\x89\x8f\x27\x23\xc3\x61\
+\x5c\x67\xfe\x57\xf9\x57\x3d\x6b\x3f\xd2\x3b\x56\x5d\x5e\x72\x3d\
+\x85\xb1\x11\xa3\x90\x3c\x24\xee\x5f\xe7\xc9\xfe\x55\x08\xfd\x59\
+\x09\x4e\xf8\xd3\x9c\x2f\xa9\x47\x71\x79\xc2\x4a\x4a\x7d\xd0\x81\
+\x82\xaf\xc7\x02\x9d\xed\xce\x6c\x7d\x30\xed\x16\xf8\xe9\x51\x48\
+\x52\x8a\x9b\x09\x18\xc7\x0a\x3e\xde\xfc\xd6\x47\x5a\xfa\xda\xfe\
+\x27\x42\x38\x18\x47\x72\x1d\x72\xbd\x75\x02\xf8\xe3\x92\x25\x49\
+\x9c\x42\xb9\x25\xc5\x12\x79\xfa\xf3\x4c\x32\xe0\xea\x1f\x15\x49\
+\x72\x44\x85\xb8\x39\x50\xdd\x8c\x55\xa1\x73\x2d\xcc\x94\xe1\x97\
+\x36\x44\xc5\x92\x30\x96\x13\xb5\x94\x28\x0c\x60\xa8\x77\xfc\x68\
+\x95\x0d\x05\xb5\xa1\x96\x5b\x0e\x60\x78\x8e\x78\x7e\x32\xd2\x3b\
+\x0d\xbb\xbc\xb9\xf8\xc2\xaa\x63\x8a\x90\xd7\x84\x8b\x5c\xfd\x79\
+\x15\x22\xa2\x5f\xd2\xb2\x82\xb7\xf7\x0e\xe0\x2b\x38\xad\x4e\x8b\
+\xcb\x07\x2e\x4b\x71\xb2\x39\xf3\x13\x56\x14\xcb\x5c\xb1\x19\xc5\
+\x38\xdb\xa5\xa6\x88\x23\xed\x6b\x28\x2a\xfa\x25\x38\x1f\xc2\xa1\
+\xf7\x24\xca\x48\x52\xa3\xda\x9b\x71\x09\xc9\xf1\x1a\x6b\x79\xfc\
+\x49\xcd\x69\x85\x77\x3e\x66\x5a\x98\x65\x05\x71\x5e\x98\xea\x3e\
+\xb1\xd3\x52\x03\xb6\xeb\xcc\xa6\xb6\x8e\x52\x97\x0e\x0f\xd4\x76\
+\x35\x73\x68\x5f\xd2\x96\xeb\x15\x48\x67\x51\xc3\x44\x94\x81\x8f\
+\x15\xaf\x22\xfe\xa7\xd0\xfe\x55\xce\xab\x44\xa7\x3f\x75\xc5\x83\
+\xe8\x40\xe0\xfc\x81\x5a\x3c\x05\x28\x12\x94\x20\x94\x9c\x29\x25\
+\x38\x50\x3e\xc6\x99\x28\x42\x7b\x99\x1c\x7b\x8f\xa4\x7d\x29\xea\
+\xee\x9e\xd6\x91\x3c\x5b\x5d\xc5\x2b\x71\x23\xcf\x1d\xd3\xb5\xd4\
+\x7e\x1e\xa3\xe4\x55\xa3\x06\xe6\xc4\x84\x8d\xab\x15\xf2\x62\xd3\
+\x32\xe9\x6a\x7d\x33\x6d\x8f\x3b\x15\xd6\xd5\x9d\xc8\x59\x49\x49\
+\x1f\x35\x7b\xf4\xb7\xf4\x95\xbe\x59\x5c\x6a\xdf\xaa\x5b\x54\xf8\
+\xe3\x00\x3f\x9c\x3a\x91\xf5\xec\x7f\x1f\xce\xa1\x67\x86\xda\xaf\
+\x32\x8e\x0d\x6c\x77\xfa\x56\x14\x38\x35\x95\x55\xfd\x38\xea\x75\
+\x83\x56\xc4\x43\xd6\x9b\x8b\x52\x38\xca\x9b\x27\x0e\x23\xea\x9e\
+\xf5\x62\xc5\x98\xdb\xa9\x04\x28\x1c\xd3\x61\x51\x4f\x62\x82\xba\
+\x2b\xc4\xa8\x1e\xd5\xed\x5c\x90\xa2\x8a\x28\x00\xa2\x8a\x28\x00\
+\xa2\x8a\x28\x00\xa2\x8a\x28\x00\xa2\x8a\x28\x00\xa2\x8a\x28\x03\
+\x88\xa1\x7f\xbf\x27\x51\x3f\xe9\xa9\x3f\xf8\x87\x6a\x67\xa2\xac\
+\x97\x2d\x65\xab\x5c\xb0\xda\x56\xd4\x76\xa1\xb4\x97\xae\x33\x5d\
+\x41\x5a\x58\x4a\xb3\xb1\x09\x48\x23\x72\xd5\x82\x46\x48\x00\x02\
+\x79\xed\x50\xc8\x5f\xef\xc9\xd4\x5f\xfa\x6a\x4f\xfe\x21\xda\xbe\
+\xbf\x45\x38\x81\x1a\x5b\x51\x5c\xd6\x8f\xdb\xcc\xbf\x3e\x82\xb2\
+\x39\x2d\xb4\x94\x21\x23\xe8\x30\xaf\xcc\xd7\x98\x8e\x12\x18\x9e\
+\x91\x9a\xa8\xae\x97\xe0\xf3\x98\x6a\x4a\xad\x6c\xaf\x6d\x4f\x17\
+\xa0\xf4\x3b\xb7\x77\x34\xb4\x3d\x51\x27\xfa\x42\xdb\x25\xdf\x09\
+\xe2\x93\xb8\x71\x9f\x28\x48\x07\x1e\xa0\x1c\x8c\xf3\x55\xc5\xce\
+\xd5\x3a\xdd\xac\xe0\x69\x59\x0d\x62\x74\xcb\x82\x21\xa4\x83\x94\
+\xa4\x28\x15\x78\x9f\x29\x09\x1b\xa8\x44\xc9\x09\xea\xfe\x96\xbb\
+\x20\xab\xed\x0e\x6a\x20\xd2\xd5\x9f\xdc\x78\x2d\x2b\x1f\x88\x35\
+\x6e\x5f\x7f\x57\xc1\xfd\x22\xb4\xf8\x91\x6c\x6e\x63\xf7\x6b\x5b\
+\xa2\x33\xeb\x5f\xfb\x89\xc8\xe1\xc2\xa7\x12\x92\x0e\x54\xb4\x38\
+\x10\x48\x23\x84\x8e\xf5\x34\xb0\x58\x6c\x6c\x23\x52\x31\xcb\xad\
+\x9a\x5c\xd1\xa1\x53\xa7\x5d\x5d\x2b\x59\xdb\xe0\x54\xfa\x96\xd2\
+\xed\x8e\xf9\x2a\xd4\xf3\xa8\x75\x71\xd4\x12\x56\x80\x40\x39\x00\
+\xff\x00\x8d\x74\x86\x8a\xff\x00\xdc\xdb\x27\xfd\x1f\x1f\xfe\xed\
+\x35\x4e\xf5\x96\xe7\x6f\x91\xa8\x25\x5b\x9a\xb3\x35\x1e\x64\x77\
+\x92\x5c\x9a\x97\x32\xa7\xc6\xce\xc5\x38\x18\xee\x3d\x4f\x6a\xb8\
+\xb4\x57\xfe\xe6\xd9\x3f\xe8\xf8\xff\x00\xf7\x69\xab\xf4\x4d\x28\
+\xd2\xc5\xd5\x84\x1d\xd2\xfb\xec\x3f\x05\x05\x0a\xd3\x8a\x1d\xe8\
+\xa2\x8a\xf4\x67\x50\x28\xa2\x8a\x00\x28\xa2\x8a\x00\x28\xa2\x8a\
+\x00\x28\xa2\x8a\x00\x28\xa2\x8a\x00\x28\xa2\x8a\x00\x28\xa2\x8a\
+\x00\x2b\x15\xa8\x24\x50\xb5\x84\x8c\xd3\x0e\xa0\xbd\x47\xb7\xc4\
+\x75\xf7\xde\x4b\x6d\xb6\x92\xa5\xa9\x47\x01\x20\x7a\x9a\x1b\x49\
+\x5d\x80\xa2\xef\x75\x66\x1b\x2a\x5b\x8e\x25\x21\x23\x24\x93\x80\
+\x05\x73\xef\x58\x7a\xe7\x06\xd4\xd3\x90\xac\xce\x99\x32\xd4\x76\
+\x25\x48\xe4\x0f\xa7\xf9\xd5\x67\xd7\x9e\xb6\xbd\x7a\x7d\xfb\x3d\
+\x85\xe5\x26\x30\x25\x25\x40\xe0\xb8\x7d\xcf\xc7\xc7\xe7\x5c\xff\
+\x00\x26\xe2\xec\xa5\xf8\x4d\x2d\x4b\x5a\xc1\x0e\xba\x4f\x27\xf1\
+\xf4\x1f\x1e\xbf\x4a\xc7\x52\x72\x93\xb1\xb2\x8e\x19\x7b\xd5\x3e\
+\x44\x9a\xf3\xa8\xaf\xda\x9a\xf6\xa5\xbc\xa3\x31\xe2\xb2\x50\xd2\
+\x95\x96\xd2\x3d\x49\xf4\xc0\xf5\x39\xa5\xb6\xb6\xdc\x72\x4b\x5e\
+\x1a\x05\xce\x43\x6a\xf0\xfc\x57\x13\xfb\x16\x95\xfd\x86\x9b\x1c\
+\x13\xf8\x7c\x9c\x0e\x6a\x2b\x6b\x79\x0b\x3f\x66\x8e\x4e\xc1\xca\
+\xd4\x14\x40\x5e\x3d\xc8\xf9\xf6\xfc\x39\xe6\x9f\x58\x9a\xb5\x25\
+\x21\x95\x06\xe3\xb2\x48\x71\xf4\x80\x0a\x8f\xab\x4d\x8e\xc0\x7a\
+\x9f\x4f\x55\x12\x6b\x1d\x48\xeb\xa9\xd5\xa4\xf4\xb4\x47\xf9\x0c\
+\xb6\xc3\x98\x91\x21\x72\x5c\x3b\x9c\x77\x68\xf2\xa4\x0f\x75\x0f\
+\xbd\xf4\x1c\x1f\x73\xda\x9a\xa7\xdc\xd2\x85\x15\xdc\xe6\xc5\xb7\
+\x30\xac\xa9\x4d\xaf\x97\x1e\xe3\x8d\xc8\x4f\x20\x7b\x02\x31\xf1\
+\x4f\x9a\x5b\xa7\xda\xe3\x5f\xa5\x0f\xdb\x63\x1b\x75\xa0\xf3\xf6\
+\xf9\x0b\x2d\xa5\xcc\x71\x94\x03\xe6\x57\xd7\x18\xe3\x8c\x0a\xb7\
+\xb4\x6f\x40\x74\x95\xad\x9c\xde\x19\x45\xe2\x6a\x80\x52\xe4\x3c\
+\x54\xbe\x7e\x01\x38\x03\xd7\x9a\x5a\x69\x6e\x5e\x7d\x5d\x9f\xaf\
+\x5e\x07\x3c\xc6\xd4\x53\x2e\x0e\x2a\x3d\x92\xdb\x74\xbb\xac\x79\
+\x50\x0e\xe6\xa3\xa4\x7b\xe1\x18\x51\xfc\x54\x3b\xd4\x92\xdf\xa2\
+\xfa\x9f\x7b\x86\xa7\x54\xf7\xea\xa6\x00\x4e\xe6\x63\xfe\xc7\x8e\
+\xc3\x71\xee\x4f\x3e\xa4\x9f\x7a\xea\xdb\x5e\x9a\xb6\x5b\xe3\x08\
+\xb0\x62\xb0\xcb\x09\x18\x21\x2d\xa5\x39\xf8\x24\x0a\x5e\xcd\x9e\
+\x32\x54\x14\x94\x0c\x01\xe5\x18\xe1\x3f\x41\xda\xac\xa4\xff\x00\
+\xc5\x5b\xcc\x53\xa9\x0f\xf2\xd7\xc9\x7a\xf8\x9c\x8f\xff\x00\xb1\
+\xdd\x4a\x94\x87\x5c\x98\xea\xc9\x5e\x00\x49\x59\xc7\xb2\x92\x73\
+\xc1\x1e\xc7\xbf\x15\xa9\xde\x96\xea\xa3\x35\x08\x4b\xc8\x44\x84\
+\x8c\x07\x50\x3c\x30\xbc\x7a\xab\xe4\xe4\x8e\x7b\xe2\xbb\x18\x45\
+\x6d\x2e\x15\x14\xa7\x80\x07\x22\xbc\x5c\x28\x0e\x0d\xaa\x6d\xa3\
+\x9e\xd9\x19\x1f\x91\xa2\xf5\x3f\xd8\x15\x5a\x7f\xe9\xfc\x9c\x87\
+\x0f\xa3\x77\xe9\x4a\x53\x6d\x86\xfc\x50\x77\x17\x0e\xed\xa3\x27\
+\x03\x91\xdf\xde\x9b\xb5\x1f\x4c\x2f\xd1\xe6\xbb\x1e\x54\x34\xf8\
+\x8d\x21\x4a\x0f\x25\x5c\x28\x63\x19\x3f\xc0\xd7\x65\x7d\x91\xb6\
+\x50\x52\xde\xdc\x7c\x0e\xd4\x96\x65\xbe\xdf\x29\x59\x93\x1d\x0e\
+\x12\x36\x92\x47\x04\x7c\xd5\x33\xd4\x5f\xe4\x4b\xa9\x4e\x5a\x38\
+\xe8\x70\x94\xbd\x33\x32\x24\x77\xb7\x36\xb5\x2d\x04\x04\x92\x9f\
+\x4e\x32\x3e\x79\xed\x4c\x13\x2d\x8e\x24\xa9\x21\xa2\x36\xf2\xb0\
+\x7f\x70\x73\xeb\x5d\xe9\x73\xd1\xf6\x29\xb9\x58\x8e\x86\xdc\xc1\
+\xf3\x84\x8c\x82\x7d\x73\x51\x7b\xd7\x49\x74\xfd\xc2\x21\x6f\xc3\
+\x0d\x9f\xed\x36\x90\x0e\x7e\xbf\xeb\xbd\x32\x38\xca\x91\xdd\x5c\
+\x54\xb0\xf4\x27\xb3\x68\xe3\x5d\x31\x7d\xbd\xe9\xa9\xad\xdc\xed\
+\x53\x1f\x8c\xeb\x6a\xe0\xa1\x44\x11\x5d\x41\xd1\xff\x00\xd2\x59\
+\xc9\x4f\xc7\xb4\xea\x86\x9b\x69\xd5\x00\x94\xca\x4f\x94\x28\xff\
+\x00\x78\x76\xfc\xb1\x50\x0d\x7f\xd1\x5b\x8d\xad\x97\x8d\xb5\x84\
+\xbd\x1c\x82\xaf\x10\xe4\xaf\xe3\x38\xaa\x66\xe3\x02\x6d\xb5\x4a\
+\x6a\x53\x2a\x65\x7b\xb0\x9e\x31\xdb\xe6\xb5\xc6\xb4\x2b\xad\x37\
+\xf3\x31\x55\xc2\x38\x6a\xf5\x5d\xa7\xd4\xfd\x2d\xa8\x63\xdc\xe3\
+\x21\x68\x71\x2a\xdc\x32\x30\x73\x9a\x92\xb6\xad\xc2\xb9\x17\xf4\
+\x56\xd6\x2e\x4b\xb0\x43\x87\x29\xf5\x19\x2c\x0f\x0d\x40\x9e\xe0\
+\x76\x3f\x95\x75\x6d\xaa\x40\x75\x94\x9c\xe7\x22\x9f\x86\xa8\xe7\
+\x16\xa5\xba\x30\xb4\xe2\xdc\x58\xbe\x8a\x28\xa7\x80\x51\x45\x14\
+\x00\x51\x45\x14\x00\x51\x45\x14\x00\x51\x45\x14\x00\x51\x45\x14\
+\x01\xc4\x50\xbf\xdf\x93\xa8\xbf\xf4\xd4\x9f\xfc\x43\xb5\x7d\xfe\
+\x8a\x72\xb7\xe9\x1d\x41\x01\x6a\xfd\xac\x4d\x41\x24\xed\x3e\x88\
+\x71\x28\x71\x27\xf1\xdc\x7f\x23\x54\x24\x2f\xf7\xe4\xea\x2f\xfd\
+\x35\x27\xff\x00\x10\xed\x4d\xf4\x06\xa3\x97\xa1\x75\x74\x9b\xdb\
+\x11\x9c\x9b\x6d\xb8\x32\x96\xee\x71\x1b\x50\x0e\x12\x8c\xec\x75\
+\xbc\xe0\x15\x00\x48\x29\x24\x64\x1e\xf9\x15\xe6\x69\xe2\xa1\x43\
+\xa4\xa7\x9d\xd9\x3f\xc1\xe7\x70\xb5\x55\x2a\xf9\x9e\xda\x89\xcc\
+\x77\x93\xd5\x8d\x2b\x01\x39\xf1\x91\xa9\x5b\x2a\x4f\xf7\x5b\xde\
+\x55\xf9\x62\xad\x5d\x66\xfa\x15\xfa\x4c\xe8\x18\xe3\x1b\x9b\xb6\
+\xdc\x14\xae\x7f\xb4\xdf\xff\x00\xf3\x4e\x70\xa1\x68\x79\x85\x8e\
+\xb0\xdb\xa1\x4b\x9c\xe2\xa2\xa9\xd8\xde\x18\x3e\x5d\xfe\x55\xa8\
+\x37\xc0\x0b\x3c\x85\x13\xd8\x66\xaa\x6b\x9e\xa2\xb8\xbf\xd4\xd8\
+\x3a\xe5\x09\x42\x66\x41\x75\x61\x31\x9c\xc9\x42\x99\x5a\x3c\x35\
+\x37\x9e\xe0\xed\xc6\x15\xee\x33\x83\xda\x9f\x1a\x94\xfa\x36\x30\
+\xa5\x51\xee\xef\xf0\x34\xe9\x86\x8a\x4d\xde\xed\x3f\x80\xbf\xaa\
+\xff\x00\xef\x85\x76\xff\x00\xe6\x27\xff\x00\xc1\x35\x7c\xe8\xaf\
+\xfd\xcd\xb2\x7f\xd1\xf1\xff\x00\xee\xd3\x54\x46\xba\xd5\x16\xed\
+\x4a\xb4\xc9\x63\x4e\xc6\xb7\xcd\x5a\x92\xb9\x12\x42\xc2\xdc\x73\
+\x09\xc0\x4e\xed\xa0\xed\x1f\xe1\xda\xaf\x7d\x15\xff\x00\xb9\xb6\
+\x4f\xfa\x3e\x3f\xfd\xda\x69\x7d\x14\xe1\x2c\x5d\x59\x42\x57\x4f\
+\x5f\x9b\x1b\x83\x71\x75\xa6\xe2\xee\x98\xef\x45\x14\x57\xa3\x3a\
+\x81\x45\x14\x50\x01\x45\x14\x50\x01\x45\x14\x50\x01\x45\x14\x50\
+\x01\x45\x14\x50\x01\x45\x14\x50\x01\x58\xb8\xa0\x91\x9a\xc8\x9c\
+\x0c\xd3\x5d\xde\x62\x58\x69\x44\x9a\x00\x43\xa9\x6f\x71\xad\x90\
+\x5e\x93\x25\xf4\x32\xd3\x48\x2a\x5a\xd4\x70\x12\x07\xad\x70\xef\
+\x5f\xfa\xd5\x37\x53\x5c\xdd\xb4\xd9\xde\x5b\x76\xd6\xd7\x81\xb4\
+\xff\x00\x5a\x7d\xcf\xbf\xf8\x54\x8b\xf4\xbb\xea\x7b\xcf\xcb\xfe\
+\x89\x5a\x65\x1d\x88\x39\x98\xa4\x1f\xde\xfe\xc9\xf8\x1f\xcc\xfc\
+\x57\x2d\x38\xe1\x5e\x48\x59\x28\x07\xef\x9e\xea\x3f\xe5\x4a\x6d\
+\xcb\x51\x94\xd2\x5d\x66\x2e\x9d\x25\x4e\xba\xb4\xa9\xce\xff\x00\
+\xd6\x63\x93\xf4\xa4\x65\xe2\xf1\x11\xd8\x18\x1c\xef\x56\x71\x91\
+\xf2\x7d\xbf\x9d\x27\x2a\x5b\x9e\x44\x79\x53\xeb\x4a\xed\xd1\x5f\
+\x98\xfb\x50\xe1\xb2\xe3\xae\xba\xb0\x94\xa1\x09\xdc\xa5\xab\xe9\
+\x51\x95\x41\x5d\x8d\x52\x95\x59\x59\x7a\xee\x1d\x60\xb8\x86\x98\
+\x53\x49\x71\x61\xa3\x80\xa0\x84\xf9\xdd\x3e\x80\x7b\x7b\x01\x5d\
+\x1d\xd1\x7e\x8c\x49\x75\x11\xb5\x0e\xb5\x8e\x94\x24\x25\x2a\x85\
+\x68\x71\x3e\x54\x27\xba\x4b\xa3\xf8\xec\xfc\x4d\x3b\xf4\x1f\xa3\
+\x90\xb4\xc4\x78\xb7\xdd\x47\x19\x32\xef\x65\x21\xc6\x18\x58\x05\
+\x11\x09\xf5\xc7\xef\x2f\xe4\xf6\xf4\xab\xb1\x5b\xce\xe5\xac\xa8\
+\x1c\xe4\x93\xeb\x5c\xba\xb5\x54\xde\x9b\x1d\x88\x5e\x94\x72\xad\
+\xff\x00\x83\xd8\xed\x04\x27\x03\x69\x38\xc7\x09\x09\x48\x00\x60\
+\x00\x3d\x00\xa5\x71\xd8\x0b\xe3\x97\x08\xe0\xe0\x7f\x0c\xd6\x29\
+\x42\x36\x6f\x70\x1c\x1c\x61\x03\xbf\xe3\x4b\x59\x5c\x82\x9d\xad\
+\xa0\x32\x9f\xe3\x55\x8a\x11\x26\x2a\x62\x02\x8a\x7c\xe9\x43\x69\
+\xfe\x35\xea\x9b\x82\x8e\x14\xe0\x51\xad\x68\x61\xc7\x55\xe6\x5a\
+\x96\x47\xb9\xed\x5b\x5b\x80\x08\xc9\xc1\x1d\xfb\xd3\x92\xec\x42\
+\x76\xdd\x98\x20\x42\xc7\x2b\x03\xf0\xcd\x6a\x75\x8b\x7a\xff\x00\
+\xe1\x07\xce\x07\xf1\xa7\x06\xe3\x36\x8c\x27\x18\xc7\x7c\xf7\xac\
+\x84\x66\x72\x41\x03\x8f\x8c\x54\xb8\xb6\x82\xe3\x42\x99\x86\x01\
+\x01\xdc\xfb\xf3\x5a\x5d\x6d\xa2\x0e\xd1\xba\x9e\xdc\x8b\x1b\x61\
+\x3e\x51\x8e\x7b\xd2\x65\x47\x61\x00\xed\x52\x47\xe3\x4b\x94\x4b\
+\x29\x0c\xcb\x65\xac\x02\xa6\x17\x9f\x42\x38\xa4\xab\x8e\x82\xbd\
+\xac\xad\x48\x57\x38\x0b\xe2\x9f\xd6\xc3\x7d\x82\xc2\x49\xe7\x93\
+\x9a\x45\x2e\x39\xd8\x72\x90\xa0\x79\xc6\x29\x72\x80\xc5\x21\x96\
+\x43\x44\x20\xb6\xea\x76\xa8\x8c\x13\x8e\x08\xaa\xbb\xab\x3d\x35\
+\xb5\x6a\x48\x0f\xb8\xd3\x49\x8b\x3d\x00\x29\x0a\x1c\x03\x8f\xa5\
+\x5b\x2a\x52\x9a\x05\xb2\x0a\xdb\xfe\xca\x8f\x3f\x81\xa4\x17\x08\
+\xe8\x75\x1e\x4e\x47\x3b\x4f\xaa\x7e\x0d\x21\xe8\xf4\x1a\x9b\x5b\
+\x1c\xc1\xd1\xb7\x17\xa5\xf5\x93\xb6\x7b\x92\x8c\x79\x28\x21\x0d\
+\xa9\x47\x09\x74\x64\x91\xf8\xd7\x6c\xe8\x8b\x88\x93\x05\xa3\xbb\
+\x9c\x73\x5c\xa7\xd7\x8d\x28\xb9\x50\x13\x77\x84\x16\x89\x71\x32\
+\x49\x47\x7c\x03\xc6\x7d\xf1\xcd\x4d\xbf\x45\xce\xa0\xbf\x7d\xb4\
+\x88\x97\x27\xf3\x3a\x2e\x10\xe1\x3d\xd6\x3d\x15\x5d\x2c\x35\x48\
+\xc3\xaf\xdb\xb9\xc9\xc5\xd3\xb4\xb3\x9d\x4c\x85\x65\x35\x95\x22\
+\xb7\xc8\x0e\xb4\x08\x39\xc8\xa5\xb5\xd2\x33\x05\x14\x51\x40\x05\
+\x14\x51\x40\x05\x14\x51\x40\x05\x14\x51\x40\x05\x14\x51\x40\x1c\
+\x4b\x19\xb5\xb7\xd6\x6e\xa2\x25\xc4\x29\x04\xde\x64\x28\x05\x0c\
+\x70\x5f\x74\x83\xf8\x82\x0f\xe3\x52\x2a\xe9\x7b\xbe\x88\xd2\xb7\
+\x6b\xda\xaf\x57\x0b\x2b\x0f\x5c\x16\xda\x5a\x5b\xdb\x94\x92\xb4\
+\xa7\x3b\x42\x80\x20\x2b\x19\xee\x73\xc7\x14\xba\x06\x9e\xb1\x41\
+\xc7\xd8\xec\xf0\x19\x23\xf7\x92\xc2\x77\x7e\x78\xcd\x79\xcc\x5f\
+\x42\xd4\xc4\x57\x95\x4c\xc9\x26\x71\xff\x00\x4c\x9b\x93\xeb\x68\
+\x50\x9d\x2d\xbc\xea\xbd\x2d\x09\x76\xcd\x3f\x09\xeb\x8d\xad\x6e\
+\xad\xd6\xe2\x2e\x32\xdc\x0c\x29\x44\x95\x06\xd4\x9c\x10\x92\xa3\
+\x9c\x1c\x8c\x93\x8c\x66\xb7\x9d\x0b\xac\xef\x13\xdf\x9a\xab\x2a\
+\x98\x32\x1d\x53\x8b\xf1\x16\x96\xc2\x4a\x89\x27\x85\x1c\xe3\x9a\
+\xe8\x7c\x51\x5a\x5f\x43\xf1\x22\xa3\x5a\xab\x92\x5e\x0b\xee\x68\
+\x58\x04\xe2\xa3\x39\x36\x91\x4a\x59\xfa\x41\x77\x72\x43\x6a\xba\
+\xcf\x88\xc3\x19\x05\xc4\xb2\xa2\xb7\x31\xea\x06\x40\x00\xfc\xf3\
+\x57\x3c\x56\x1a\x8b\x19\xa8\xcc\x20\x21\xa6\x90\x10\x84\x8f\x44\
+\x81\x80\x2b\x65\x15\xbb\x09\x81\xa3\x84\x4f\x86\xb7\x34\xd1\xc3\
+\xc2\x8f\xba\x14\x51\x45\x6c\x1e\x14\x51\x45\x00\x14\x51\x45\x00\
+\x14\x51\x45\x00\x14\x51\x45\x00\x14\x51\x45\x00\x14\x51\x41\xed\
+\x40\x1a\x64\xb8\x10\x82\x73\x54\xe7\x5e\xb5\xba\x74\xbe\x91\x9d\
+\x3d\x0b\x1f\x68\xdb\xe1\xc7\x4f\xbb\x87\xb7\xe5\xdf\xf0\xab\x3e\
+\xff\x00\x28\x33\x1d\x64\x9e\xc2\xb8\x63\xf4\xc3\xd6\x4b\x99\x7e\
+\x6a\xc6\xc2\xce\xd8\x83\x2b\x19\xe0\xad\x5c\xff\x00\x01\x8a\x5d\
+\x57\xb4\x49\x8c\x73\x4a\xcc\xa1\xaf\xf7\x17\xee\x57\x07\xdf\x7d\
+\xd5\x2d\x6e\x28\xad\xe5\xa9\x59\x2a\x24\xe7\x14\xd5\xcb\x87\xbe\
+\xd4\x0f\x5a\xcf\x03\x1e\x62\x08\x1c\xa8\xfb\x9a\x5f\x68\xb4\x4d\
+\xba\x5d\x22\xdb\xd8\x6c\x87\x1f\x52\x52\x06\x39\x4a\x54\x47\x9b\
+\x1f\x43\x9a\x9b\xa8\xab\xb2\xee\xf3\x7a\x1a\xad\x30\x24\xdc\xe7\
+\x35\x02\x0b\x0b\x79\xe7\x94\x12\x86\xd0\x39\x51\xae\xbb\xe8\x2f\
+\x4c\x2d\xda\x46\x0b\x77\x6b\x93\x2d\xc9\xbe\x38\x8c\xee\x23\x72\
+\x63\x02\x3b\x27\xe7\xe6\xab\x7e\x94\x69\x64\xdb\x2e\x69\xf0\xda\
+\x58\x25\xe2\xca\x1f\x18\x25\x48\xc9\x19\xcf\xf7\xb1\xc9\x1e\x99\
+\xc5\x74\xbd\x81\x29\x6d\x01\xa0\x41\x09\x01\x28\x00\x76\x03\xd3\
+\xe6\xb8\xf8\xac\x43\xa9\x53\x22\xd9\x1d\xbc\x3d\x0e\x05\x2c\xdf\
+\xe4\xfc\x90\xe9\x17\x7b\x7e\x6f\xde\x23\x72\xb3\xef\x4a\xdb\xdc\
+\xa3\xb8\x8e\x7d\x0f\xb5\x68\x27\x19\xdd\xd8\x9e\x00\xf5\xa5\x31\
+\xb0\x52\x37\x77\xec\x71\x54\x48\xab\x62\x96\x93\x80\x0a\xb3\xf8\
+\x73\x4a\xd9\x51\x24\x81\x80\x33\xdc\xd6\x90\xe2\x11\x8c\x10\x93\
+\x8c\x01\x58\x3f\x71\x83\x17\xc8\xe3\xa9\x2b\x03\x24\x67\xb7\xd6\
+\x98\xa2\x29\xdf\xb0\x71\x68\xa9\x59\x05\xc5\x76\xe7\x06\xb7\x15\
+\x38\x94\xf0\xb7\x30\x3d\xd5\x4c\xc9\xbd\xc6\x43\x49\x77\x7a\x58\
+\x4a\xf2\x12\x56\xa4\xa7\x77\xd3\x3e\x9f\x35\x9b\x77\x48\x4f\x63\
+\xc2\xb8\x47\x77\x71\xc1\x28\x90\x0f\x3e\xdc\x1e\x7e\x95\x74\x43\
+\x84\xbb\x07\x15\x2d\x47\x95\x1c\x8f\x92\x6b\x15\x2c\x2b\x92\x47\
+\xe3\x5a\x54\xb5\x1e\x12\xb5\x29\x20\x8f\x29\xf4\xf9\xad\x98\xe3\
+\xb8\x3e\xf8\xa9\xd4\x8b\x02\x9b\x4a\xb9\x3c\x67\x8c\x56\xa2\x10\
+\x14\x46\x33\x8a\xcc\xa4\x02\x40\x04\x7f\x8d\x01\x04\x05\x64\x10\
+\x31\xeb\xcd\x55\xa2\xcb\x43\x4a\x92\x7b\x14\x12\x0f\x6e\x2b\x5b\
+\x9e\x22\x06\x52\x4a\x7e\x94\x92\xf7\x72\x8b\x05\x4d\xb2\xe3\xe8\
+\xf1\x94\x37\x10\x55\xf7\x52\x06\x49\x3e\xc3\xe6\xab\xfb\xc7\x5a\
+\x34\x55\xba\x77\xd8\x8d\xee\x33\xae\x83\x8d\xcd\xab\x2d\x9c\x77\
+\xe7\xb1\x3f\x4c\xd2\x65\x24\x98\xd8\xd3\x94\xb6\x44\xf9\xf5\x13\
+\xe5\x71\x00\xfc\x8a\x6f\x79\x18\x3b\x90\xa3\xf2\x3d\xe9\xb6\x26\
+\xb5\xb2\x4e\x4b\x65\xb9\x0d\xa9\x2e\x63\x0b\x6d\xc0\xe2\x4e\x7b\
+\x64\xa7\xb1\xfa\xd3\xa9\x53\x4b\x48\x52\x16\x30\xa1\xc0\x1e\xbe\
+\xd4\xa7\x69\x6c\x5d\xc6\x51\xdd\x0c\x77\xc8\x2d\xca\x8a\xe2\x1c\
+\x40\x29\x5a\x70\x7d\xf9\xae\x6c\x4c\xf9\x3d\x2e\xea\x4b\xae\xad\
+\x0b\x30\x5e\x7b\x7a\xb6\x76\x29\x27\x9f\xc7\x06\xba\x8d\xf0\x52\
+\xe8\x41\xfb\xa7\x3c\xd5\x1f\xd7\xdb\x2b\x52\x65\xc6\x75\x4d\x05\
+\x78\x8a\x28\x73\x9f\xbb\xc7\x7f\xaf\x22\x99\x4e\xa6\x4d\xf6\x17\
+\x2a\x0a\xad\xe2\xce\xa4\xd0\x37\xe8\xf7\x2b\x73\x0f\x32\xf2\x5c\
+\x6d\xc4\x05\xa1\x60\xf0\xa4\x91\x90\x6a\x72\xca\xb7\x24\x57\x24\
+\x7e\x8b\x5a\xad\xdf\xd4\xe2\xc3\x35\x64\x49\xb6\xaf\xc1\x04\xf1\
+\xbd\xb2\x72\x93\x8f\xe1\x5d\x51\x68\x90\x1e\x61\x24\x1f\x4a\xec\
+\xe1\xe6\xe5\x1b\x3d\xd1\xc2\xb3\x8b\x71\x63\x95\x14\x51\x4e\x24\
+\x28\xa2\x8a\x00\x28\xa2\x8a\x00\x28\xad\x52\xe4\xb1\x12\x33\x92\
+\x64\xba\x96\x99\x6c\x65\x6b\x51\xe0\x0a\xac\x75\x96\xbb\xbe\x39\
+\x6f\x79\xeb\x23\x48\xb6\x43\x1c\x22\x64\x84\x6e\x5b\x9f\x29\x49\
+\xe0\x7e\x39\xab\xd3\xa7\x2a\x8e\xc8\x55\x5a\xd1\xa4\xaf\x22\xd3\
+\xa2\xb9\xd7\x4f\x1d\x59\x76\x2e\x4a\x9b\xac\x2f\xc1\xb0\x09\xcb\
+\x52\xd4\xd0\x3f\x20\x0e\x31\x4d\x37\x39\xda\xa1\x89\x6b\x42\x35\
+\x56\xa4\xf0\xd2\x78\x3f\xac\x9c\xc9\x1f\x9d\x69\xf6\x29\xf6\x99\
+\x3d\xbd\x7f\xa9\xd4\x14\x57\x34\xe9\xd9\xf7\xa9\x97\x86\x58\x91\
+\xac\x35\x12\x59\x2a\xc1\x3f\xac\x5c\xe7\xdf\xd6\xae\xd8\x9a\x79\
+\x2a\x88\x87\x06\xa3\xd4\x0a\x04\x72\x4c\xdc\xff\x00\x85\x2e\xae\
+\x1e\x54\xd2\x6c\x75\x2c\x57\x11\xb4\x91\x29\xa2\xaa\x8b\x83\x53\
+\x44\xf7\x3c\x2d\x49\x7d\x4b\x69\x38\xc0\x98\xaa\x7e\xd2\xf6\x49\
+\x92\x62\x97\xe4\xea\x1b\xea\x82\xbe\xee\x66\x1f\xf1\x15\x33\xc3\
+\x4a\x11\xcc\xd9\x58\x62\xf3\xcb\x2a\x44\xe6\x8a\x80\x6a\x06\x1c\
+\x88\x97\x16\xdd\xf6\xf4\x94\xa0\x77\xfb\x59\xff\x00\x2a\xae\x9e\
+\xbb\x5e\xfe\xd2\x42\x75\x25\xe4\x05\x13\x8f\xf6\xd5\xe3\xf9\xd5\
+\xa1\x83\x9c\x95\xc8\x96\x36\x31\x76\xb1\xd0\x94\x55\x61\xa5\xde\
+\x97\x2e\x33\x6b\x7e\xf7\x76\x52\x87\x0a\xff\x00\x6a\x3c\xfe\x75\
+\x2c\x9b\x68\x71\x50\x8b\xac\xde\x2e\xc1\x5b\x72\x31\x2b\xff\x00\
+\x2a\x5c\xf0\xf2\x83\x49\xf3\x2f\x0c\x4a\x9a\x6d\x2d\x89\x1d\x15\
+\x59\xe6\xe2\x87\x0a\x55\x79\xba\x1d\xa7\x9f\xf6\xa5\x76\xa9\x6d\
+\xb6\x1f\xda\x21\x87\x8d\xd2\xe3\x9c\x73\xfe\xd1\xff\x00\x95\x4d\
+\x5c\x34\xa9\xab\xb0\xa5\x8a\x55\x1d\x92\x1f\xe8\xaa\xa3\x53\xdd\
+\x27\x31\x70\x5a\x62\x5d\x2e\x49\x43\x67\x07\x32\x54\x3f\x95\x37\
+\x45\xbb\x5d\x5e\x20\xae\xf5\x71\x47\xc7\xda\x57\xcf\xf1\xa6\x2c\
+\x14\xda\x16\xf1\xd1\x4f\x62\xe8\xa2\xab\x58\xf3\xe4\x48\x8b\xe1\
+\xa6\xef\x3c\x3a\x07\x72\xfa\xbb\xfe\x74\xa7\x4a\x1b\xdc\x9b\x83\
+\x8c\xc9\x9f\x2c\xb4\x93\xc1\x2f\xa8\xff\x00\x3a\x89\x60\xe5\x15\
+\x76\xc9\x8e\x32\x32\x76\x48\xb0\x68\xa4\x29\x85\xb5\x24\xaa\x64\
+\xb3\xf3\xe2\x9a\x4d\x38\x21\xa8\xee\x2d\x13\xa4\x05\x01\xdb\xc5\
+\xac\xf1\x83\x93\xb2\x34\xca\x79\x55\xd8\xef\x45\x42\xdd\xb9\xbc\
+\xc3\x1e\x22\xe5\xc8\x23\x1f\xfc\x43\x4d\x92\x6f\xb7\x42\x3f\x64\
+\xf3\xa0\x13\x80\x4b\x87\xfc\xeb\x4f\xb1\x4c\xcd\xed\xb0\xec\x2c\
+\x7a\xc5\xc3\x84\x13\x50\x2b\x55\xfa\x73\x8b\xf0\xdf\x79\xcd\xde\
+\x87\x79\xff\x00\x3a\x58\xfd\xe5\xf6\x9a\x59\x71\xd7\x31\x8e\x3c\
+\xc6\x8f\x62\x99\x2b\x1b\x06\x27\xd7\x92\xd4\xdc\x45\x84\x9e\x4f\
+\x15\xf3\x6b\xab\xd7\x73\x7a\xd7\xd7\x69\x7b\xf7\x03\x21\x49\x4a\
+\xbb\x8d\xa0\xe3\x3f\xca\xba\xf7\xaf\x9a\xe5\xdb\x56\x91\xb9\x4b\
+\x4c\x85\x25\xdf\x0c\xb2\xc8\xdc\x72\x5c\x5f\x03\xd7\xd0\x64\xfe\
+\x15\xc3\xaf\x87\x97\x20\x4b\xdb\xbd\x0f\xa8\x80\x49\xc8\xcf\xa8\
+\x3f\x35\x8e\xad\x2c\x95\x1b\x6c\xd3\x42\xa7\x11\x36\x8c\x18\x52\
+\x1b\x21\xc5\x24\x2b\x61\xc2\x10\x7b\x13\xee\x6a\x61\xa1\xae\x2c\
+\x5a\x1c\x17\x45\xbb\x99\x8f\x3d\xb5\x2b\x03\x2a\x4b\x7f\xbe\xad\
+\xa7\x83\x9c\xf0\x3d\x93\xf3\x51\x34\xb6\xcb\xee\x14\xa1\xf4\x32\
+\x94\x8e\x03\xb9\x1f\x91\xff\x00\x3a\xc9\x69\x58\x90\x19\x6d\x7e\
+\x65\x00\x84\xed\x3b\x89\xf4\xc0\xc7\x72\x69\x53\x8e\x65\x63\x4d\
+\x39\xe4\x95\xce\x83\xe9\xee\xa8\xb6\xb8\xd4\xdb\xf5\xc2\x5a\x21\
+\x5a\xad\x8a\x6e\x34\x72\xf2\x82\x40\x51\xc8\x03\x8f\xbc\x48\xce\
+\x71\xee\x6a\xc4\xb1\xf5\x8b\xa6\x71\x62\xa9\x52\xf5\x8c\x64\x3a\
+\x15\xb4\x6c\x8c\xf2\xbc\xb8\xf8\x4f\xd6\xb9\xf3\xa9\x5a\x7d\xfb\
+\x1f\x49\xed\x4c\xc8\x88\x62\xbe\x2e\x29\x53\xac\xf7\x53\x41\x4d\
+\x28\xa4\x2c\xff\x00\x68\xe1\x5c\x7a\x57\x48\x69\x1d\x29\xa6\x62\
+\x74\x6b\x4e\x6a\x18\xbd\x28\xd1\xd3\xdf\x7e\xd5\x1d\xc5\xbd\x36\
+\x0f\x8c\x5c\x5a\xb0\x92\xb5\x12\x73\xc9\xe4\xfd\x6b\x9b\x43\x0b\
+\x4e\xbd\xea\xa7\xa5\xdf\x91\xd5\xaf\x8a\x94\x1a\xa7\x65\xcb\xcc\
+\xcd\x5d\x79\xe9\x0a\x48\x49\xd5\xce\x10\x3d\x45\xb6\x41\xff\x00\
+\xfc\x2b\x79\xeb\xff\x00\x48\x1b\x69\x45\xad\x58\xb5\xab\x19\x03\
+\xf5\x74\x80\x4e\x3e\xa8\xa5\x6b\xd3\x37\x35\x46\x2f\xda\xf4\x27\
+\x4d\x59\x69\x20\x95\x3c\x34\xe3\x4d\x47\x4e\x3f\xe3\x5c\xe0\xfe\
+\x15\x86\x97\xd0\xda\x9f\x53\x3b\x23\x68\xe8\xaa\x9b\x8a\x52\x99\
+\x28\x89\x61\x6a\x62\x9a\x2a\xe4\x05\x10\x84\xa7\x3c\x1e\xc4\xd3\
+\x61\x4a\x93\xf7\x5b\x7e\xbc\x05\xca\x53\x4a\xf2\xb2\x21\xd3\xfa\
+\xf5\xa6\xee\x61\x5f\x65\xbc\x46\x8c\x8e\x4b\x2d\xa9\x45\x0a\x20\
+\x76\xdc\x48\xc0\xcf\xe3\x50\xcd\x4d\xd6\x18\xec\xc4\x6a\x05\xaf\
+\xec\xf2\x64\x2d\xb2\xe2\x9d\x66\x56\x52\xda\x8f\x60\x55\xce\x4f\
+\xae\x33\xf9\x57\x4c\xb5\xd0\x2d\x2c\xfc\x4f\xff\x00\x54\xb5\x69\
+\x29\x2f\x9e\xea\x8d\xa6\x58\x61\x39\xfa\x24\xe7\xf8\xd4\x23\x58\
+\xfe\x8d\xbd\x3d\x5b\x6e\x97\x63\xdb\xad\xce\xf0\x12\xe2\x61\x48\
+\x61\xbc\xfc\x14\xbc\xa4\xe7\xf0\xa1\x61\x23\x7b\xca\xfe\x45\xbd\
+\xbe\xcb\x2c\x2d\xf0\xbf\xd4\xe5\xe8\x53\xb5\x05\xea\x43\x92\x25\
+\xdd\xe6\xbc\xf3\xca\x09\x05\x2a\x5b\x99\x04\xf3\x84\x0e\x00\xfe\
+\x35\x25\xd2\x36\x1b\xba\x56\xb5\xe9\xe7\xe7\xb5\x21\x0a\x53\xae\
+\x34\x14\x42\xde\x4a\x78\x56\x10\x7b\xfd\x47\x20\xf7\x15\x36\x97\
+\xfa\x39\x39\x6e\x7c\x48\xd2\xba\xb9\xb4\x38\x9f\x30\x4c\x5b\xb8\
+\x6d\x60\xfc\x25\xc4\xa7\x3f\xf6\xab\x28\xed\xf5\x8f\x42\x38\x5d\
+\x9a\x21\xdf\xdb\x53\x9b\xdb\x17\x38\x25\x2e\x03\xee\xdb\xec\x92\
+\x77\x1e\x7b\x92\x3e\x2a\xb3\x84\x6f\xd5\x92\xfe\x0d\x74\x71\x6d\
+\x25\x78\xb6\xfe\x7f\x92\xe6\xe8\xfb\xd7\x35\xd8\x76\xc8\x9a\xf4\
+\xa6\xd2\x94\xad\x92\xf8\xc2\xdb\x1f\xbc\x09\x3d\xfb\x76\xf7\xc1\
+\xf5\xa9\xf4\x37\x1a\x70\x16\xf2\x0a\x81\xc0\xf9\xaa\x3f\x44\xf5\
+\xb7\x4a\x39\x31\xb6\x75\x3c\x59\xfa\x3e\x72\xbf\x64\xf3\xd2\x71\
+\x22\x13\x85\x59\x00\x17\x50\x3c\x8a\xcf\x3e\x64\x8e\xc3\x35\x7a\
+\xe9\x8f\xb2\xcc\xb6\x36\xfc\x07\xa3\x4d\x88\xb4\xe5\xa7\xe2\xba\
+\x97\x5a\x23\xe1\x49\x24\x1a\xbc\x69\xb8\xa4\x99\x92\xb5\x45\x29\
+\x39\x02\xdb\x59\xce\xd1\xc8\x1c\x83\xed\x5e\x38\x48\x8e\xa2\x91\
+\xc2\x47\x62\x29\x7c\xb8\xae\x82\x0b\x0d\x93\xc7\x24\x72\x0f\xc0\
+\xa6\x1b\xbc\xb6\xed\x30\x5f\x99\x73\x95\x1a\x04\x56\xbc\xcf\x3f\
+\x2d\xd4\xb4\xda\x47\xae\x54\xa3\x81\x55\x9a\x48\x5c\x7a\xc5\x2b\
+\xd6\x48\xb3\xee\x57\x93\x01\x85\xb8\xd4\x79\x6e\x62\x5b\xc9\x57\
+\x99\x2d\x80\x30\x81\xf3\xef\xf5\xaa\xa6\xf3\xa6\xa2\xdb\x52\xe3\
+\x51\xa0\x82\x86\xc3\x69\xf1\xc8\x1b\x54\x95\x03\xfb\x20\x7b\x93\
+\x8e\x0e\x31\xeb\x93\x56\x4e\xb2\xeb\x66\x96\xfd\x64\xe4\x0d\x11\
+\xa6\xae\x1a\xe6\xe4\xae\x10\xa6\x5b\x53\x51\x73\x93\x92\x9e\x0a\
+\xdc\xfa\x80\x07\xcd\x56\xda\x9a\x47\x5c\x75\x5a\xcb\xb2\x20\xc4\
+\xd3\xb1\x54\x42\x44\x3b\x7b\x68\x43\x89\xc7\x6c\xf2\xa7\x01\xe7\
+\xd4\x8f\xa5\x27\x84\xe3\xab\x69\x78\x9d\x18\xe2\x22\xe2\xa2\xe0\
+\xdf\xaf\x91\x00\x4d\xd6\x7e\x95\xbb\xae\x65\x86\x6a\xad\xab\x25\
+\x47\xec\xce\x85\x2d\x97\x92\x48\xf2\xa9\x38\xc0\x3e\xb9\xf8\xe2\
+\xac\xad\x17\xd6\x70\x63\xa8\xca\x97\x1a\x0a\x59\x29\x21\x97\xdf\
+\xc2\x82\xbd\x52\x09\xfb\xc8\xf9\xef\xfe\x30\xe1\xd1\x4d\x5b\x31\
+\xc3\x22\xe5\x32\x03\x2a\x51\xca\x97\x36\x7e\xe5\xe7\xe4\x24\x13\
+\x4d\xd7\x6e\x99\xc2\xb4\x83\xf6\xfd\x5b\xa7\x99\x50\x24\x63\xc1\
+\x90\xb1\xc7\xb1\x08\xe6\xaf\x25\x86\xa8\xac\xe5\xaf\x70\x88\xfb\
+\x4c\x64\xf2\xc2\xf1\xec\x7a\x9d\x33\x03\xab\x5d\x3d\x9f\x01\x0e\
+\x3f\xab\xad\x31\x5f\x48\x01\xc6\xde\x7b\x18\x38\xf4\x20\x1c\xd4\
+\x27\xaa\x3a\xdb\x44\x4c\x99\x05\xcb\x76\xa7\xb4\xcf\x57\x8f\xe7\
+\x4b\x6e\xe7\xcb\x82\x08\x39\x1d\x8f\x6c\xfc\xd5\x02\xde\x9a\x88\
+\xe6\x1b\x85\x7f\xd2\xb3\xca\xd5\x81\xb5\xe5\x34\xbf\xa6\x1c\x48\
+\xa5\x12\xf4\x5b\xb1\x54\x10\xf2\xa2\x30\xe9\x4e\x76\x3c\xd2\xdb\
+\x03\xe8\xbc\x14\xfe\x39\xab\xc7\x07\x4e\x6f\xde\x66\x7f\x68\x9c\
+\x75\xd1\x5f\xc7\x99\x2f\xe9\xee\xa9\x66\xc1\xd4\x86\x1c\x72\x73\
+\x02\x33\xf9\x61\xe7\x3c\x51\x82\x41\xf2\xab\xfc\x3f\x1a\xee\x1d\
+\x01\xa8\x63\xce\x82\xd2\x9a\x90\xd3\xc9\x20\x79\x9b\x58\x50\xfc\
+\xc5\x7c\xd5\x99\x62\x79\xb5\x3e\x9f\x0c\x78\x91\xd0\x97\x57\xb5\
+\x5b\xb0\x82\x42\x42\x81\x1e\x9b\x88\x1f\x88\xab\x07\xf4\x69\x9d\
+\x76\x67\x5f\xc8\x86\x8b\xbc\xf8\xd1\xd5\x05\xc5\xac\x32\xfa\x93\
+\x9c\x14\xe3\xf8\xd6\xa7\x18\xc1\xe7\x83\xd0\xe6\xe2\x61\x38\xa7\
+\x37\xc8\xfa\x4e\xc3\x81\x69\x04\x73\x5b\x6a\x9c\xd3\x91\xe5\x49\
+\x8c\x8c\xea\x5b\xf8\x3f\x13\x8f\xf9\x54\xda\x0e\x9e\x5b\xd1\xd2\
+\xe2\xb5\x0e\xa2\xce\x39\xc4\xdf\x5f\xca\xb7\xca\x8b\x8c\x54\xbb\
+\x4c\x14\xf1\x3c\x47\x64\x89\x6d\x15\x54\xdd\xed\x57\x25\x5c\xd6\
+\xc4\x2d\x4d\xa9\x0e\x0f\x00\x4f\x56\x0f\xe5\x4a\x22\xe9\x1b\xf3\
+\xa8\x0a\x5e\xaa\xd4\x88\x2a\xec\x3f\x58\xab\xfc\xa9\x8f\x0a\xd2\
+\xbb\x65\x16\x32\xee\xca\x2d\x96\x75\x15\x59\x4b\xd2\x17\xe6\xdb\
+\xcb\x5a\xbb\x51\x9e\x7d\x6e\x0a\xed\x45\x0b\x0a\xde\xd2\x40\xf1\
+\x8d\x6f\x06\x38\x5c\xae\x0c\x6a\x6d\x6e\xbb\x0a\x9c\x3f\xab\xed\
+\x8a\x49\x90\x9c\xe0\x3c\xf7\x70\x9f\xa0\xff\x00\x3a\x70\xea\x0d\
+\xae\x1c\xcb\x0a\xc3\xcd\xa5\x28\x64\x0c\x01\xc6\x38\xff\x00\xca\
+\xa0\x7d\x38\x75\x4e\xbb\xfa\xc7\x0a\x2f\x4d\x92\xe3\xab\x23\xb9\
+\xca\x8f\xf9\x54\xff\x00\xa8\x72\x54\xce\x9b\x75\x29\x04\xad\xc1\
+\x80\x07\xae\x69\xd1\xa5\xc3\x9c\x2d\xcc\x44\x6a\xf1\x69\xcd\xcb\
+\xd7\x61\x4d\x4a\xb9\x94\xb1\xf6\x68\x00\x25\xb1\x91\x90\x3b\xff\
+\x00\xae\x29\xad\xc4\xb8\xf8\x52\x54\xf2\x89\x58\xed\x9e\xd5\x25\
+\xb0\xe8\xc9\xd3\x50\x1d\x92\x4b\x49\x56\x49\x1d\x8d\x49\x5a\xd0\
+\x30\x83\x61\x2a\x52\xc3\x87\x80\x73\xeb\xdf\xfc\x6b\x7b\x92\x5b\
+\x98\xd4\x5b\xd8\xae\x2d\xd1\x56\xca\xd0\x5a\xc1\x5e\xf1\x91\xeb\
+\xf3\x57\x93\x13\x1c\x85\xa5\x5a\x0f\x0f\xda\x94\x0e\xff\x00\xe3\
+\x51\x3b\x46\x95\x8b\x6c\xbb\x89\x13\x1c\x2b\x6c\x72\x02\xbb\x8a\
+\x76\xba\xca\x55\xc2\x50\x66\x33\x79\x69\x3c\x24\x01\xc7\xa1\xaa\
+\x4e\x39\xda\x5c\x8b\xc2\x4e\x09\xbe\x7b\x09\x6d\xb1\x5c\x9d\x39\
+\x29\x09\x27\x72\xc1\x51\x1d\xbf\xd7\x61\x53\x67\x9c\x6e\x14\x14\
+\x30\xd8\x19\x09\xc7\xe5\xcd\x23\xb3\x47\x6a\xd9\x10\x3a\xf7\x2e\
+\xa8\x6e\x38\xa6\xdd\x43\x73\x11\xd9\x5b\xce\x2b\xce\x7e\xe8\x3f\
+\xeb\xe9\x48\x95\xea\xce\xdc\x90\xf8\x7e\xcc\x2f\xcd\x91\xcd\x67\
+\x3b\x9f\xb3\x36\xac\x2b\x39\x5e\x2a\x22\x8b\x72\x9e\x06\x4e\x00\
+\x09\x38\xa5\xcf\xac\xbc\xa5\xbe\xbc\x92\xbe\xc0\x0e\xde\xd4\xe7\
+\x69\x0d\xa2\xd8\xa6\xca\x48\x52\xff\x00\xb5\x5a\xd1\x91\xea\x6b\
+\xd3\xb3\x4c\x39\x6d\xef\x50\xf0\xd5\x81\x92\x7b\xfc\xd5\x9b\x68\
+\x98\x14\x03\x2a\xe5\x04\x00\x2a\xa3\x42\x36\xad\x6d\xf2\x36\x92\
+\x47\xc5\x4a\xf4\xa5\xd4\x2b\x11\x9c\xfb\xc3\xee\x92\x3b\x0a\x55\
+\x6a\x6a\x71\xb0\xda\x35\x1c\x25\x71\xfb\x51\xdb\x8b\x2f\x2a\x53\
+\x5f\x71\x5f\x7b\x15\xb3\x4d\x4c\xd8\x55\x15\x67\x85\x0c\x27\x26\
+\x9c\x58\x7d\x32\x1a\x2c\x48\x39\x49\x1c\x1a\x61\xb9\x40\x72\x04\
+\x8f\x19\xbc\xa9\xb1\xca\x7e\x94\x98\x3c\xf1\xe1\xcf\x71\xd3\x59\
+\x25\xc4\x86\xc4\x7f\x54\x41\x72\x2d\xc1\xd5\x3a\x83\xb1\x67\x8c\
+\xfe\x54\xdf\x15\x95\xa8\x61\xb6\x54\x46\x78\xe2\xa6\xaa\x90\xcd\
+\xdf\xc3\x62\x42\x02\xd4\x93\xdc\x8a\x76\x8f\x06\x2b\x0d\x84\x86\
+\x86\x3b\x76\xa6\xba\xb9\x12\xcc\xb5\x14\xa9\x67\x6d\xc5\xe8\x57\
+\x2e\x27\x0a\x2a\xd8\xa6\xd5\xee\x46\x31\x53\x2e\x9d\xba\x56\xcb\
+\x9b\xc8\x52\x87\xaf\xad\x3a\x49\xb7\x45\x90\x8c\x29\xa4\x80\x07\
+\xa0\xa4\x76\x9b\x69\xb5\x4f\x53\x8c\x92\x50\xaf\x4c\xd2\xea\x55\
+\x8d\x48\x35\xcc\x6d\x3a\x52\xa7\x35\x2e\x43\x9d\xfe\x42\xdb\x65\
+\x2d\x20\x94\x95\x1f\x6a\x65\x53\x45\x63\x0a\x51\x27\xd4\x9f\x6a\
+\x77\xbe\xa3\xc7\x61\x0e\xa3\x38\x4f\x71\x8a\x68\x79\xd0\xd4\x72\
+\xe6\x4f\x94\x55\x70\xfa\x41\x58\x9c\x46\xb3\x77\x19\xef\x69\xd8\
+\x50\xd0\x18\x4e\x79\xad\x0b\x18\x40\x4f\x6a\xf2\x53\xee\x4a\x90\
+\x83\xb3\xcb\xef\x5b\x1e\x42\x8a\x02\xb9\xad\x88\xc6\xcd\x24\x61\
+\xf6\xdc\xc1\x27\x38\xa5\x57\xa7\x52\x88\xa4\x9e\x4e\x31\x9a\xd0\
+\xa6\x96\xe2\x40\x1c\x1e\x79\xf6\xa6\x9b\xcc\x97\x50\xd3\x8d\xad\
+\x5b\x86\x3f\x2a\x3b\xc1\x1c\xc9\xfa\x59\x5c\x40\xb7\xc0\x88\x92\
+\x37\x39\x21\xc7\x0f\xd1\x29\x03\xfc\x4d\x73\xf5\xa6\x73\xd6\xc7\
+\x94\xbf\x05\xb9\x0c\xba\x8d\xae\x32\xe8\x3b\x56\x3d\xc1\x07\x29\
+\x50\xee\x14\x39\x1f\x98\x36\xb7\xe9\x44\xfa\xdf\xd4\x90\x93\xce\
+\x13\x18\xe3\x27\x8e\x56\xac\xff\x00\x85\x56\xf6\x6b\x63\x73\x90\
+\xe9\x5b\xa1\x88\x8c\x00\x5e\x90\xae\x71\xf0\x91\xea\x49\xc0\x03\
+\xdc\xd7\x9f\xad\x34\xdb\x6c\xee\xe0\xe2\xd5\x35\x61\xa9\x48\x53\
+\xee\x2d\x6d\x78\xcb\x27\x24\xf8\x87\x25\x23\xdc\xab\xfc\x6b\xa0\
+\xbf\x47\x6e\x9b\x08\x52\x60\x5f\xaf\xe9\x30\xe6\x4d\x4f\x8f\x6a\
+\x74\x29\x0e\x61\xb0\x33\xb9\x23\x90\x95\xe7\xbe\x79\x03\x18\x1d\
+\xea\x98\xb2\xfd\x9e\xe7\xa9\x20\xdb\x62\xb1\xe0\x41\x5c\x96\xfc\
+\x64\xf7\x51\x40\x50\xce\x4f\xa9\xc6\x4e\x3d\xea\xea\x8f\xac\xda\
+\xd1\x70\x0e\x54\x1e\x66\x14\x99\x0a\xb3\xb6\x71\x95\x87\x37\x24\
+\x10\x3b\x8c\xa4\x83\xed\xd8\xf1\x58\x31\x75\x5a\xb4\x17\x33\xa3\
+\x87\xa4\x9a\x73\xec\x1b\x3a\xfb\x0d\x85\xd8\xde\x8e\x2e\x6f\xcd\
+\xb9\xc8\x9e\x97\x59\x65\xc0\x54\xea\x90\xda\x56\x16\xa3\x8c\x01\
+\x9d\xd9\xc6\x2b\xa6\x3a\x57\x32\x72\x3f\x46\x3d\x11\x2e\xdb\x2b\
+\x6d\xc9\xf8\x0d\xc2\x88\xe1\x20\x21\x95\x6e\x50\x53\x87\x3c\x1d\
+\x88\x42\x95\x8f\x52\x90\x3d\x6b\x8a\x65\x5d\xa6\x4e\xb9\xbb\x73\
+\x9c\xf1\x7a\x5b\xe7\xce\xbc\xf0\x91\xe8\x84\x7c\x0f\x7f\x53\xcd\
+\x5e\x5f\xa2\x9e\xb9\xd4\x72\xaf\xb6\xde\x96\x48\x98\xda\xac\x66\
+\x3d\xc1\xdb\x7b\x65\xa1\xe2\xb6\xe2\x99\x70\x86\xf7\x7a\xa4\x6e\
+\x71\x40\x77\xe7\xd8\x0a\xa6\x0d\x3a\x34\xf8\x6f\x7f\xa9\xb3\x15\
+\x85\x75\x12\xaa\xbe\x3e\x08\x8d\xeb\x4b\xf5\xe7\x51\xea\x65\x68\
+\xab\x5c\xe9\x6b\xb4\xdb\x1d\x52\x56\x95\xbe\xa5\x97\x17\xb8\x95\
+\x12\xa3\xfd\xe5\x12\x71\x8e\x49\xf8\xae\xa0\xfd\x16\xf4\x6c\x3d\
+\x2d\xa6\xee\xa2\x3c\xc7\x25\x7d\xbd\xd6\x9c\x74\xab\x18\xdc\x94\
+\x91\xc1\xc7\xb1\x19\x19\x3d\xbe\x6a\xa7\xe8\xc6\x86\x5c\x7b\xc5\
+\xd2\xe7\x75\x28\x56\xfb\x83\xaa\x69\x18\xc1\x27\x71\xe4\xfb\xd7\
+\x46\x58\xa5\xb7\x6c\x6d\xdd\x8c\xa5\x48\x59\x05\x5b\x4e\xdc\x60\
+\x55\xa8\x54\xd5\xf6\x15\xc6\xc5\x65\xca\xb7\x26\x21\x09\x00\x24\
+\x0c\x01\xd8\x0a\x61\xd7\x36\xbf\xd6\x76\x25\xc7\x0f\x25\x94\xa5\
+\x5b\xca\x89\xf5\xec\x3f\x9d\x2d\xb5\xde\xed\xd7\x01\xfe\xcf\x21\
+\x25\x49\x4e\x54\x92\x7e\xef\xbf\x34\xcb\xad\xf5\x7e\x9b\xb4\x5a\
+\xc8\x9f\x72\x88\x43\x8e\x04\x14\x07\x02\x94\x38\x27\x38\x1f\x4a\
+\xd9\x2b\x38\x9c\xc8\x29\x46\x6a\xcb\x52\xab\xba\xe8\x70\xb0\xb5\
+\x26\x7b\x4e\x10\x09\x03\x38\x22\xa3\xb2\xad\xf7\xdb\x36\xf4\xb5\
+\x39\xd4\xb2\xa1\x85\xb4\xe8\xf1\x59\x58\xf6\x29\x3c\x54\x86\x67\
+\x51\x34\xa4\x97\x1e\x16\xf9\xc9\x71\x0d\xed\x4a\xd6\xb6\x54\x13\
+\xb8\x8e\xd9\xc5\x37\xa2\xe8\xc4\xf5\xb6\x94\x2f\xf6\x4e\x61\x4d\
+\xba\x9f\x32\x01\xf6\xcf\x6a\xe0\xe2\x28\xc2\x2f\xaa\xf5\x3d\x3e\
+\x1a\xad\x67\x1e\xba\xba\xef\x43\x0c\x0b\x2d\xa9\x3a\x8a\x35\xfa\
+\xee\xd3\x4e\xda\x0b\x6e\xc3\x9f\x1f\x68\x71\xb6\xdb\x75\xb5\x23\
+\xc4\x52\x8f\x2a\x61\x0a\xd8\xa2\x95\x65\x48\xfb\xc0\xe1\x26\x90\
+\xf5\x0b\xa3\x5a\x83\x4f\x6b\xbd\x29\x2f\x4a\x5b\x2d\x57\x18\xc6\
+\xdb\x1a\x1b\xac\x6d\x42\x19\x93\x21\xa5\x2c\x6e\x52\x0e\x12\x41\
+\x6f\xc3\xca\x8f\x72\x3d\xcd\x3b\x5f\x18\x91\x15\xf4\xcc\x8c\xd9\
+\x4a\xe3\xbc\x8f\xb5\x33\xb7\xc8\xfb\x64\xf9\x92\xa1\xd8\x82\x32\
+\x3f\x1a\x84\xcc\xb5\x6a\x4b\xe7\x56\x1b\xd1\xb6\xdd\x47\x31\xb8\
+\x3a\x6e\x28\x85\x05\xd7\xdd\x50\x54\x44\x8c\x2d\x4d\x82\x0f\xed\
+\x0a\x72\x90\x14\x79\xda\x84\x03\xda\x9f\x43\x13\xc1\xa4\xe3\x6d\
+\x79\x11\x53\x09\x2a\xf5\xd4\xd4\xec\xac\xef\x7e\x49\x78\x6b\xcc\
+\xd7\xfa\x58\x68\x7b\xdc\x58\x2c\x6a\x99\x76\x0b\x0e\x98\x43\x6d\
+\xa5\xb5\xb5\x6c\x94\xa4\x07\x15\x9e\x49\x09\x01\x24\xd5\x27\x63\
+\x96\x2d\xa1\x6b\xbe\x59\xbf\x58\x21\x6c\xe5\xa5\x4b\x74\xb8\xda\
+\x37\x00\x42\xf0\x49\x1d\xb2\x41\xae\xc0\x99\xd3\x5b\xc5\xe6\xd4\
+\x22\xea\x0e\xa8\x6a\x8b\x8b\x4a\x00\xa9\x95\x29\x2a\x68\xe3\xdc\
+\x2b\x39\xfa\xd4\x1f\x48\xf4\xbe\xd5\x77\xd6\x97\x3e\x9e\xdd\xe7\
+\x06\x95\x11\xd6\x2e\x4c\xc8\x6e\x30\x59\xb8\x42\x42\x90\x57\x1d\
+\x63\x38\x41\x0a\xd8\x42\x87\x23\x72\xc7\x20\xe0\x68\x86\x2a\x4e\
+\x69\x49\x68\xfc\x0c\xfe\xcf\x08\x53\x94\xa3\x52\xed\x6f\x64\xf6\
+\xbe\xfa\x92\x3f\xd1\xe3\x47\xdc\xa5\xf4\x65\x77\x99\xb0\x15\x6f\
+\xfb\x52\xde\x75\x95\x38\x80\x93\x21\x92\xac\xb6\xbc\x0c\x28\x8c\
+\x64\x61\x5c\x60\x0c\x0e\x73\x49\x05\x92\xfb\x36\x49\x65\x0f\xab\
+\xc3\xf4\x4b\x63\x6a\x53\xf8\x0e\xd5\xd2\x5a\xa9\x0d\x33\xa5\xa5\
+\xc5\x8e\x03\x09\x43\x29\x69\x09\x6d\x20\x04\x0e\x00\x00\x76\x03\
+\x15\x54\xbd\x74\xb2\x59\xa3\x78\x77\x3b\xa4\x58\x61\x47\xfe\x19\
+\xc0\xd0\x24\x9f\xae\x7b\xd5\x71\x58\x58\x3b\x5f\xe2\x27\x05\x8d\
+\xa9\x79\x49\x2b\xf6\x11\x46\xfa\x71\x31\xe4\x95\xc9\x96\x1a\x3e\
+\x98\x19\x22\x91\x5d\x3a\x57\x1a\x4c\x55\xb0\xb7\x83\x83\x9c\xee\
+\x4f\x04\xff\x00\x85\x4a\x5c\xd4\x76\x69\x33\x95\x12\xdd\x77\x80\
+\xf3\xa1\x39\x29\x6a\x58\x0b\x4e\x31\xdc\x13\xf3\x5b\x58\xbd\x2e\
+\x3a\x83\x72\x81\x2d\x93\x8f\x10\x8e\x47\xf9\x8a\xe7\xba\x34\xe0\
+\xce\x97\xb5\xe2\x9a\xbd\xfc\x8e\x4b\xea\x97\x4a\x2e\x3a\x6a\x73\
+\x92\x23\xa3\xed\x76\xe2\x3c\x4c\x8e\x16\x9c\xf7\xc8\x3e\xdc\x57\
+\xba\x6e\xf0\xd4\xbd\x37\x0d\x32\x5e\x54\x79\x70\x52\xa6\x16\xe8\
+\x51\x04\x24\x0f\x22\xbe\xa3\x20\x11\xf1\x5d\x77\x7c\x81\x0e\xed\
+\x05\x71\xdd\x69\x0e\xb6\xb6\x94\x9d\x8b\x19\x05\x24\x60\xe3\xda\
+\xb8\xb3\x5f\xe9\xa7\xb4\xd5\xce\xe5\x6e\x6d\x2e\x06\xdb\x7c\xa9\
+\x0a\x27\x3b\x90\xac\x81\xf9\x1c\x8a\xd9\x4e\xac\xa7\x68\x37\xe0\
+\xcc\x55\x14\x35\xaa\xa3\xe2\xbe\xa6\xfb\xab\xea\xbf\xd9\xa5\xdd\
+\x1b\x43\x3f\x6c\x84\xe8\x66\x61\x61\x21\x28\x77\x23\x87\x00\x1d\
+\xb3\x8c\x11\xee\x33\xeb\x4a\xba\x04\x89\x1f\xd3\x49\xd7\x16\xdb\
+\x26\x3b\x50\xcb\x4a\x5f\xa6\xf5\xa8\x6d\x4f\xd4\xe0\x9f\xc2\x99\
+\xfa\x7a\x5e\x8b\xd3\xfd\x71\x74\x4a\x72\x98\xa9\x83\x82\x7f\xb4\
+\xb7\x4a\x71\xf9\x13\x56\x1f\x46\x6d\x42\x1c\x38\xf6\xc4\xba\x16\
+\xea\xdc\xfb\x44\x8c\x0e\x02\x88\x18\x4f\xe0\x38\xfc\xeb\xaa\xe3\
+\x9d\x46\x9c\x77\xd8\xe0\x62\x6b\x7e\xcb\x4f\x99\xd4\xba\x11\x25\
+\x70\x9a\x4e\x15\x92\x3f\x21\x56\xac\x73\xe0\xb0\x1a\x47\x27\x18\
+\xc8\x1d\x8d\x57\xfa\x0e\x29\x65\x86\xdc\x20\xef\x03\x81\x8a\x9f\
+\xb4\x76\x37\xe6\xc2\x94\x7f\x2f\xf5\xcd\x75\x6b\xac\xa9\x43\xb0\
+\xe6\x61\xa3\x65\x70\x62\x23\x4d\x2c\xac\x20\x15\x9e\xe7\xde\xb7\
+\x6e\x09\xe0\xa8\x8f\x72\x38\x34\x21\xb5\x93\xca\x8a\x53\xc0\x3c\
+\xf7\xac\x43\x49\xff\x00\xe3\x27\x20\x7d\x78\xfa\x56\x56\xef\xbb\
+\x34\xa5\x6d\x90\x3a\xe0\x4a\x15\xb8\xe0\x7a\xfb\x7f\xae\x68\xa4\
+\xf2\xad\xcb\x7f\x1f\xed\x07\x60\x3e\x64\x83\x9c\xd1\x4d\x87\x0e\
+\xda\xb1\x72\xe2\x5f\x44\x56\xfd\x21\x60\x0d\x3f\x12\x6b\x87\x09\
+\x41\x70\x72\x7f\xbe\xaa\x98\xbb\xba\x6a\xca\xdc\xc9\x40\xe5\x29\
+\xcf\x06\xa3\x5d\x3b\x4a\x53\xa2\xe0\x60\x60\x23\x7f\xfd\xe2\xb9\
+\xa9\x4b\x4c\xbc\xf2\xb3\xbb\xc3\x6c\x1c\x12\x7b\x62\xb6\x3b\x25\
+\x73\x9f\x4a\xf9\x54\x4c\x00\x6d\xa1\xb4\x14\xe4\x7b\x56\xc4\xb8\
+\xca\x52\xb5\x78\x89\x48\xf9\xf4\xef\x58\xba\xab\x5b\x3e\x47\x56\
+\x16\x73\xcf\x9b\x9a\xcc\x2e\xcd\x27\x0d\x85\x6d\xdc\x31\x9f\x8f\
+\x6f\xa5\x55\xbe\xe6\x35\x2b\x73\x47\x3f\xdf\x2f\xba\x9a\xe5\xa5\
+\xee\x1a\x3e\xdb\x74\x94\xe5\xfc\x6a\x39\x10\x23\x48\xf1\x0a\x9e\
+\x0d\x23\x32\x12\xac\xe7\x3f\xd5\x8d\xbf\xc2\x9f\xed\x17\xa9\xf7\
+\x58\xd6\xb9\xb6\xe7\xca\x83\x7a\x45\xcb\x94\xa6\x84\x85\x32\x1d\
+\x79\xdd\xa8\x40\x52\x92\x09\x49\x4e\xc7\xc8\x20\x1e\x45\x49\x2d\
+\xfd\x38\x99\x69\xea\xdc\xdd\x67\x1a\x43\x0e\x5a\x5d\x8f\x96\x58\
+\x49\x3e\x22\x64\x94\x21\xb5\x38\x46\x31\x8d\x88\xc7\x04\x9c\xa8\
+\xf6\xa4\x3a\x33\x47\x3f\xa4\x2d\x3a\xb1\x13\x27\xc5\x7c\xdc\x96\
+\xeb\x76\xed\xaa\x51\xf0\x62\xe5\xc5\x36\x85\xe4\x0c\x10\xa7\x57\
+\xc0\xce\x3d\x0f\xa0\xa5\xdc\x95\xa3\xb1\x9b\x87\x38\xbe\xb7\xae\
+\xc1\x95\xbd\x69\xa8\xdb\x47\x4d\xdb\xb6\x18\xff\x00\x64\xba\x5a\
+\x9d\x79\x6d\xce\x98\xb7\x1c\x5a\x9a\x69\x38\x0e\x39\xb0\x93\x8d\
+\xe0\x82\x39\x27\x39\x00\x0e\x61\xb2\xf5\x5d\xe6\x05\xd7\x5b\xdd\
+\x84\x34\xce\xb7\x42\xba\xf8\x8e\x07\x25\xa9\x2b\x4a\x0a\x11\x94\
+\xb6\x9d\xa4\x70\x39\xe4\xa7\xbd\x3a\x3f\x61\xbf\x22\x3e\x8a\xfb\
+\x33\x96\xf7\x9f\xd3\x90\x9d\x8a\xe2\x16\xf2\x90\x87\x7c\x46\xd0\
+\x82\x52\xa0\x82\x78\x28\xcf\x23\x9c\xfa\x56\x8b\x86\x90\xb8\xbd\
+\x61\xd6\x70\x92\xf4\x30\xed\xee\x41\x72\x31\x52\xd4\x12\x94\xec\
+\x4a\x70\xbf\x2f\x07\x29\x3d\xb3\x4c\x8c\x24\x97\xae\xc2\x8d\xc9\
+\xef\xeb\x41\xcb\xa8\xd7\xd7\xec\x3a\x1a\xe1\x7a\x84\x41\x75\xa6\
+\x92\x59\x2a\x19\x00\xad\x49\x4a\x4e\x3d\x70\x54\x0d\x44\xe3\x5d\
+\x35\x0e\x97\xb9\x68\x89\x52\x35\x04\xeb\x9b\x3a\x87\x6b\x33\x58\
+\x94\xa0\xa4\x05\xac\x23\x6a\x9b\xc0\x1b\x70\x57\x8f\xc3\xe4\xd4\
+\xfe\x7e\x98\x46\xa4\xd2\x52\xec\x73\x0e\xc4\x48\x60\x34\x1d\x48\
+\xce\xc5\x8c\x14\xab\x07\x19\xc1\x00\xd4\x2f\x4e\x58\xaf\xb7\x3e\
+\xa0\x59\x74\xf6\xac\x09\x61\x3a\x45\xa0\xb8\x65\xa8\xee\x6d\xb8\
+\x60\x24\x25\xcf\x10\x8d\xa3\x6e\xd4\x64\x67\x39\x07\xe7\x17\xa9\
+\x7c\xc8\xac\xaf\x71\x4f\x4f\xef\xba\xa6\xef\xaf\x75\x2b\x37\x18\
+\xf1\xcc\x28\xb2\x92\xc3\x89\x4b\xe4\xfd\x98\x84\xa8\x00\x81\xb4\
+\x6e\x0a\x29\xc9\x27\x1f\x8d\x59\x8c\x82\x95\xa5\xc4\x2b\x6a\x87\
+\x62\x3b\xe6\xa0\xee\x69\xcd\x51\xa3\x2e\x9a\xc2\xff\x00\x09\x16\
+\xdb\x84\x1b\x8a\x97\x35\xa6\x80\x71\x52\x7c\x40\x95\xec\x40\x40\
+\x4e\x08\x2b\x50\x04\xee\xed\x9a\x99\x5a\x8c\xb3\x6e\x8e\x67\xa5\
+\x91\x37\xc3\x4f\x8f\xe1\x83\xb7\xc4\xc7\x9b\x6f\x27\x8c\xe7\x1c\
+\xf6\xab\x53\xbd\xac\xcb\x47\xbc\x99\xd8\x6e\xc8\x79\x09\x61\xe5\
+\x10\xbf\x42\x4e\x29\xfd\x2b\x56\xd2\xd3\xa9\xde\x83\xc6\x48\xcd\
+\x56\xf8\x50\x21\xc4\x1c\x28\x76\x23\xde\xa4\x96\x3b\xe8\x4a\x43\
+\x32\xf0\x3e\x73\x55\xa9\x4e\xfa\xa3\x4d\x2a\xb6\xd1\x8e\x32\xed\
+\xea\x61\xe1\x32\x22\xfc\xa0\xf2\x8a\x72\x83\x29\xc7\xdb\x1f\xb1\
+\x50\x3d\x8d\x7b\x09\xb4\x3c\xbf\xb4\x13\x86\x87\xf1\xac\xdf\x9e\
+\x84\x1d\xb1\xda\xcf\xb9\x22\xb3\xca\x4e\x5d\x5b\x5d\x8f\x8c\x54\
+\x7a\xd7\xb2\x36\x82\xfe\x3f\xab\x20\x63\x27\x9a\xf5\x2e\x0c\xf9\
+\xd2\x47\x38\xe4\x77\xa4\xc9\x9f\x28\x63\x81\x8e\xe2\x94\x37\x35\
+\x0b\x3b\x1f\x40\x4e\x7d\xa9\x6e\x12\x5c\x86\xc6\x71\x7c\xcc\xbe\
+\xe8\x28\xee\xd9\x14\xc9\x77\x88\xa4\x36\xb4\xe3\xca\xae\x45\x3f\
+\xa9\xb1\x8d\xc8\x39\x42\xbb\xd6\x97\x9a\x0e\xb6\x52\x7b\x7a\x1a\
+\x9a\x55\x32\xbb\x91\x56\x9e\x65\x62\x17\x1c\x60\xec\x38\xe0\xf2\
+\x2b\x39\x19\x28\x1c\x1c\x7a\xfd\x6b\x74\xe8\xeb\x8d\x28\xfb\x13\
+\xcd\x60\xf1\xc2\x32\x3f\x1f\x5a\xe8\xa7\x73\x9a\xd5\xb7\x35\xa0\
+\xed\x6f\x3f\x1c\xd4\x77\x50\x24\xad\x97\x5c\x23\x93\xc0\xa7\xf1\
+\x92\x03\x60\xf7\xf5\xa6\xad\x54\x90\xcd\xb9\x7e\xe5\x3c\x50\xf6\
+\x64\xa3\x8d\x3f\x49\x30\x1c\xd4\xb0\x18\x42\x16\xe3\x82\x39\xc2\
+\x10\x92\x4a\xcf\x88\xac\x0f\xe1\x55\x94\xa7\xd4\xd4\x44\x32\xe2\
+\x42\x4a\xb9\x5a\x7b\x04\x01\xd8\x11\xfd\xae\xff\x00\x9d\x74\x2d\
+\xfa\xe4\xc4\x3d\x64\xe5\xc5\xc6\xf2\xeb\x08\x2c\x32\x52\x8d\xca\
+\x5e\x4e\x54\x33\xe8\x32\xa2\x3f\x0a\xa0\xb5\x5d\xbd\xe6\xb5\x7d\
+\xc5\x97\x12\xa4\x07\x5f\x53\xa0\x3c\xad\xa7\x0a\x39\xef\xeb\x5e\
+\x62\x75\x22\xeb\x64\x7c\xb5\x3d\x56\x1f\x09\x51\x60\xa3\x59\x2d\
+\x1b\xb0\x97\x4b\xcb\x89\x12\xea\x87\xa4\x3e\xeb\x21\x2b\xc8\x53\
+\x68\xdc\x48\xef\x8f\xe1\x8f\xc6\x94\x6a\x0b\x85\xc2\xfd\x7d\x12\
+\x9e\x6c\xa1\x2b\x59\x6a\x33\x09\x1c\x34\x80\x78\x48\xfc\xf9\xa4\
+\xac\x3a\x98\x58\x79\xa6\xd0\xa5\xe7\x8f\x2e\x46\x01\xed\xfc\xb9\
+\xa7\xbd\x06\xf2\x1e\xd5\x11\x64\xc8\x61\x0f\x20\x2d\x3e\x22\x4e\
+\x01\x27\x3e\x80\xf7\x27\x8e\x6a\x2a\x5a\x37\xa9\x6d\x91\x34\x13\
+\x9c\xa3\x45\xbd\xd9\x67\x68\x3e\x90\x5e\x6e\x2d\x25\xe9\xcb\x6e\
+\x22\x31\xc8\x57\x2a\xc9\xf8\xa9\x2e\x9e\xd1\xd7\x3d\x0b\xd4\xcb\
+\x05\xe2\x2a\x54\xe1\x83\x29\x32\x32\x84\x90\x56\x8c\xe1\x69\xe3\
+\xdd\x24\x8f\xc6\xae\xbd\x32\x23\xc8\x8e\xdb\xf1\xdb\x09\x65\x4d\
+\x20\x84\xed\xc7\xd3\x3f\x38\xc5\x48\x92\xc3\x2e\x29\x0b\x2d\x24\
+\xa8\xfa\x91\xda\xb8\xb2\x73\x9e\xaa\x5a\x9e\x87\xda\xb2\x75\x32\
+\xac\xa6\xf9\x16\xf8\xf6\xeb\x9b\xab\xb7\x80\x63\xcb\xfd\xb3\x2a\
+\x07\x82\x95\x0c\x8c\x7e\x1f\xc8\xd6\x77\x99\x0e\x46\xb7\x9f\x0d\
+\x0a\x5a\x82\x09\x01\x3f\xda\xc7\x15\xe4\x09\xad\xf8\x5f\xab\xdd\
+\x5a\x43\x8d\xa8\xfd\x9d\x4a\xfd\xd5\x13\xf7\x0f\xb0\x3d\xc7\xb1\
+\xfa\xd6\x6d\x07\x1d\x0b\x0a\x18\x20\xe0\x83\x91\x83\x5a\x93\x4e\
+\xed\x73\x39\x96\x69\xd9\xf2\x2b\x0d\x27\x76\xd5\xa6\xfb\x2d\x57\
+\x48\xce\x08\x01\xb2\xd9\x65\x95\xe0\x0c\x9e\x54\x7d\xc5\x45\xe7\
+\xd9\xf5\x4b\x17\xdb\x4c\xd8\xa7\xec\x51\x04\xe7\x4c\x87\xde\x88\
+\xdc\x96\xdc\x6d\x69\x52\x53\xfb\x25\xf0\x48\xc8\xc0\xf7\xed\xcd\
+\x5e\x82\xce\x7e\xfb\x6f\x23\xcd\x83\x85\x0c\xd2\xf4\xb0\xea\xdb\
+\x6d\x0f\x36\xcb\xa9\x69\x61\xc4\x05\x73\xc8\xec\x69\xb4\xaa\x4e\
+\x2a\xcc\x2b\xf0\xaa\x3b\xda\xd7\x2a\x1e\x8d\x88\xda\x56\xe5\x71\
+\x55\xde\x35\xcd\xf5\xa6\x30\x8c\xf2\xcc\x72\x95\x48\x58\x39\x49\
+\x2d\xe7\x09\xf2\x9c\xfe\x34\xa9\x56\x07\x5f\xb8\x22\x56\x93\xb3\
+\xbf\x6a\x52\xe4\x91\x21\x0e\xa4\x04\x16\xfb\xe5\x48\xce\xd3\x93\
+\xed\x83\x56\x94\xf8\xab\x7a\x42\x9e\x52\x1a\x4a\x94\x30\xac\x27\
+\x71\x38\xed\xf1\x49\xd7\x19\x49\x00\x90\xbc\x11\xc9\xc7\x35\x59\
+\x43\x32\xb4\x86\x50\xae\xa8\xbc\xd4\xd6\xaf\xb7\x61\x8f\xec\x52\
+\xe5\xc6\x4c\x29\xae\x32\xfc\xc9\x4a\x43\x6e\x18\xe8\xc2\x01\xf4\
+\x48\xcf\x7a\x8f\xc7\xb0\xb3\x0f\x5f\xfe\xbf\x62\x7c\x49\x6b\xbb\
+\x4c\x94\xee\xd8\xea\xdf\xb1\x08\xc0\x49\x52\xfb\x67\x6e\xc0\x52\
+\x3b\x1a\x96\xea\xeb\x8b\xda\x72\xd0\xd2\xe2\x25\xb3\x7b\xb8\x6e\
+\x8d\x69\x64\x9c\x16\xf2\x3c\xf2\x55\xec\x94\x27\x24\x13\xeb\x50\
+\xfe\x9d\xe9\xb6\x2c\x82\x52\x63\x2d\x4e\x30\xdb\xa5\x0d\x28\xaf\
+\x20\x13\x82\xb5\x01\xe8\x54\x42\x73\xf4\xae\x7e\x26\xce\xa4\x21\
+\x1e\xdb\xfa\xf5\xd8\x6f\xc3\xa9\x2a\x53\xaa\xdd\xae\x9a\xb7\x6f\
+\x6f\xc1\x3b\x78\xd9\xf6\x16\x1b\x1b\x8b\x0b\x29\xc0\x29\xc0\xca\
+\xbb\x1a\x8d\x4f\xb5\x44\x63\x5a\xc6\xd4\x4e\xba\xb8\xee\x2e\x22\
+\xed\x8f\xbc\x85\x11\xb5\xa7\xfc\x89\x59\xc7\xaa\x5d\x2d\xfe\x07\
+\xe2\xa4\xb6\xb2\x3c\x32\x97\x00\x27\x04\x63\x39\xa8\xb7\x54\xad\
+\xee\x49\xd3\x32\x58\x6d\x6f\x25\x05\x3b\x87\x84\xa2\x95\x12\x08\
+\x56\x32\x3d\xf0\x38\xfa\x53\xaa\x36\xa2\xa4\xb9\x6a\x64\xa4\xaf\
+\x3c\x97\xb2\x7a\x7c\x19\xe3\xb2\xaf\x4f\xcb\x95\x06\x55\xf6\x4c\
+\xc8\x29\x29\xd8\xdb\x1c\xa9\xf2\x09\x0a\x25\x44\xe4\x64\x72\x30\
+\x33\x9e\xf5\x5c\xf5\x47\x4d\x3f\x70\xbc\x46\x99\xa6\xf4\xb2\xd0\
+\x98\x88\x6f\xc3\xfb\x6b\x21\xd6\x54\xe9\x74\x15\xf8\xbc\x95\x94\
+\x90\x00\x38\x3c\x8f\x6a\x97\x74\xfa\xf1\x17\x50\xdb\x00\x5a\x9a\
+\x4d\xc5\x18\x54\xa4\xa4\xf2\xa5\x1c\xe1\x78\xfe\xf6\x09\xfa\x85\
+\x0f\x4a\x98\xc7\x6a\x7b\x44\xa5\x25\x4a\x47\x04\x07\x46\x41\x1f\
+\xce\xb4\xc2\xb7\x12\x2a\x48\x5d\x4a\x4e\x8c\x9c\x25\xa5\xbe\x1e\
+\xbb\x8e\x5c\x56\x88\x72\x3f\x51\xdd\x93\x7d\xb5\x2d\xdb\x7b\xf7\
+\x94\x3e\xa3\x0e\x23\x8c\x30\x96\x14\xa0\x5c\x65\x09\x56\x54\x94\
+\x8c\x90\x92\x73\x4f\x7a\xd9\xeb\xd6\x93\xd5\x2e\x39\xa4\x2d\x9a\
+\x85\x7a\x51\x21\x29\x31\x27\x28\xbe\x42\x40\x19\x20\x9c\xa8\x0f\
+\x5c\x13\xeb\x5d\x19\x2d\xf9\x6b\x65\x49\x93\x14\x28\xab\xb6\x17\
+\xbd\x39\x1e\xbc\xf6\xa4\x52\xd0\xf4\xa4\x00\xb6\xf6\x11\x80\x72\
+\x8f\x4a\x5d\x66\xe5\xba\x1d\x87\xa9\x1a\x4a\xca\xef\xe3\xf8\x18\
+\xf4\x0d\xed\x8d\x43\x62\x8b\x22\x12\xca\xd0\xb4\x0c\xa8\xa4\xa7\
+\x8f\x6e\x40\xaa\xcb\xf4\x80\xb0\x07\x6d\xd7\x8b\x82\xda\x0b\x58\
+\x65\x0e\x05\x01\xfd\x95\x8e\x3e\xb8\x35\x6b\xdb\x6d\x49\xb2\x3e\
+\x57\x10\x84\xb0\xb5\xef\x2d\x60\x00\x14\x7b\xe3\xdb\xe9\x4d\x7d\
+\x46\x81\x12\xeb\x66\x97\x0a\x62\x9c\x43\x13\x11\xe1\x1f\x0f\x97\
+\x14\xa2\x41\x01\x03\xdc\xe3\xf0\xef\xe9\x59\x5a\xcb\x67\xd8\xc3\
+\x32\xce\xf2\xec\xce\x4e\xb7\x28\x5b\xba\x42\xdd\x9d\xe4\x11\x37\
+\x54\xdd\xd8\x7c\xa4\xf0\x53\x19\xa2\xa0\x15\x8f\x6d\xc7\x8c\xfa\
+\x66\xac\x8e\x85\xc6\x7a\x5c\xb6\x2e\xa9\x21\x4c\xbc\xe2\xf7\x10\
+\x73\x80\x14\x40\xcd\x44\xba\x8d\x65\x9b\x7c\xea\x79\xb7\x48\x91\
+\x1e\x01\x65\xff\x00\xb2\xc5\x4a\x7e\xe3\x6d\xa5\xbe\x10\x9e\xdd\
+\xbd\xcf\x04\xe7\x35\x26\xd1\xa5\x8d\x29\xa8\x60\xda\xad\xf2\x5a\
+\x52\x87\xec\x5e\x09\xc9\x0e\x0c\xf3\xcf\x62\x41\xf5\xfc\xab\xb3\
+\x43\x19\x08\xce\x32\xed\xd4\xe3\x63\x3a\x3a\xa3\xa0\xe4\xb9\x7f\
+\x09\x1d\x81\xa5\xf0\x18\x46\x3b\xfe\xee\x3d\xea\x5c\x85\xa1\x94\
+\x03\xc9\x57\xa7\xc7\x15\x5e\xe8\x69\x61\x50\x50\x54\xb0\x5c\xfa\
+\x7a\xd4\xe2\x37\x20\x2d\x47\x27\xbe\x2b\xb9\x55\xaa\x8b\x37\x23\
+\x87\x46\x5a\x19\xba\xeb\xce\x67\x7a\xb6\x80\x7b\x56\x29\x6f\x1c\
+\xee\x51\x56\x3b\xfa\xd6\xd2\x48\x39\xe7\xd8\x57\x80\xf9\xcf\x27\
+\x8e\x00\x27\xe6\x97\x7b\x2d\x06\x5a\xef\x53\x04\xb8\xeb\x0a\xde\
+\xda\x8a\x87\x6e\x7b\x9a\x2b\x35\xe1\x38\x21\x47\xf0\x1c\x7d\x28\
+\xa2\xc9\xee\x89\x4d\xad\x99\x0a\xe9\xb0\x43\x7a\x36\x0b\xef\xe7\
+\x62\x7c\x4c\x0f\xff\x00\xa8\xaa\x70\x9b\x35\xe9\x89\x29\x6d\x45\
+\xb6\xc0\xe3\x07\xe6\xa3\xda\x15\xd5\xc8\xd2\x90\x5b\xf3\x25\xb6\
+\xfc\x4c\x10\x3d\x7c\x45\x7f\x9d\x3f\x21\x29\xc7\x39\x18\xc9\xfa\
+\x71\x5b\xa1\x15\x64\xd9\xcd\x53\xea\xa4\x8d\x02\x3a\x41\x05\x47\
+\x71\x3d\xf9\xed\x5b\xd4\x84\x1f\x2a\x06\x3e\x7d\xab\x15\x00\x0e\
+\xd4\xee\x23\xb8\xad\xa8\x52\x4a\x7b\x67\xd4\x0f\x7e\x3d\xe9\xa5\
+\x45\x36\x79\xea\x6a\x40\x8a\xf3\x89\x28\x73\xee\x27\xfd\x77\xa8\
+\x86\xb2\x2b\x4d\xd9\x49\x4c\x90\xa6\x96\x90\xb4\xa4\x28\x1e\x0f\
+\x62\x3d\xc1\xa8\xf7\x4b\xe3\xc0\x9d\x77\xbf\x5d\x2e\x4c\x46\x91\
+\xa8\x18\xbe\xc8\x69\x4e\x3c\x80\xa7\x98\x42\x55\x86\x92\x82\x79\
+\x4a\x36\x60\x8c\x70\x72\x7d\xea\xb3\x54\x08\x31\xfa\x2b\xa5\x2e\
+\x05\xbd\x86\xe3\x2a\x2b\x37\x89\x4a\x52\xb7\xae\x2a\x64\x14\x6d\
+\x52\xbb\x84\x04\x84\xa7\x03\x00\x0e\x29\x17\xb4\xb3\x25\xb8\x71\
+\x5b\x8a\x4c\xb5\x9a\x01\x6d\x82\xda\x81\x49\x3e\x5c\x7a\xfe\x54\
+\x27\xf6\xc1\x28\x42\xb7\x0c\xed\x51\x07\x23\x8e\x0d\x56\xb3\xad\
+\x31\xe4\x6a\x6d\x4f\xa7\x6c\x52\x5b\xb5\x41\x95\x67\x63\xc6\xfb\
+\x38\x09\x6d\x99\x4a\x71\x41\x3e\x51\x80\x37\x20\x00\x71\x8c\x83\
+\x4a\x2c\xf6\x57\x75\x15\xa6\x75\x8e\x3d\xbe\xc7\x69\xbc\x59\xae\
+\x4c\x2e\x43\x2d\x23\x30\x2e\x05\x08\xdc\x94\x2f\x00\x12\x92\x0f\
+\x29\x39\x20\xa4\x67\xda\xaf\x9d\xf6\x15\xcc\x5d\x56\x08\x88\xc2\
+\x36\x14\x96\xf1\x9c\x82\x0e\xee\xd5\xb2\x52\x9b\xfb\x53\x9b\x96\
+\x8c\x95\x6d\xc6\x7f\x7b\x19\xc7\xd7\x1c\xe2\xa2\x7a\x06\xed\x78\
+\xba\xe9\xbb\x7c\x8d\x23\x65\xd3\xf6\x88\xe1\xf7\x9a\x9f\x19\xe0\
+\xbd\xa1\xc4\xb9\xb5\x45\x92\xd0\x09\x50\x24\x28\xe4\x8e\x49\xa8\
+\x3e\xa3\x81\x68\x90\x7a\xb7\x70\xb8\xb4\xd2\xe4\xc5\x58\xfb\x13\
+\x8e\x72\xa6\x5e\xfb\x3a\x4b\x65\xb3\xdd\x2a\x2b\x08\xe4\x60\x9c\
+\x0f\x6a\x8e\x27\x30\x72\xd1\x34\x5b\x0c\xde\xe3\xcb\xd5\x12\x74\
+\xd2\x22\xac\x3f\x12\x0b\x52\xd4\xee\x46\xd5\x05\xa9\x49\x09\x03\
+\xbe\x46\xd3\xf9\xd2\x29\xeb\x8d\x0d\x2e\xcb\x79\xf4\x22\x33\x20\
+\x97\x16\x55\xc2\x31\xdf\x3e\xdd\xaa\x0a\x6f\x42\xc9\x7c\xd4\x57\
+\x6b\xfd\xbd\x53\xcb\x3a\x36\x1f\xdb\x22\x91\xfd\x6a\x8a\x96\x95\
+\x21\x59\xcf\x04\x92\x0e\x41\xc0\xcd\x35\xc8\x86\xda\x75\x3e\xab\
+\xb7\xfd\x86\xc9\x16\x33\xda\x3f\xed\x0e\xc3\xb5\x8c\xc7\x0e\x85\
+\x2f\x62\x88\xc0\x05\x60\x14\xf3\x81\xc6\xd3\x50\xaa\x3d\x88\xce\
+\x4c\x6e\xba\xc6\xd5\x12\xc5\x6c\xba\xc5\xff\x00\x6c\x17\x47\x59\
+\x66\x13\x4d\xad\x28\x2b\x53\x83\x72\x72\x54\x46\xd0\x07\x27\x3d\
+\xbd\xa9\xfe\x19\x5c\x94\xc6\x2f\x35\xf6\x77\xdd\x03\x73\x4a\x58\
+\x51\x49\xf5\x19\x1c\x1e\xfd\xc5\x54\xd3\x2c\xf6\x94\x68\x5e\x97\
+\x1f\xd5\xb0\x4f\xda\x2e\x36\xe2\xe9\x0c\xa0\xef\xdf\x19\x5b\xc2\
+\xb8\xe7\x25\x23\x39\xef\x81\x9e\xd5\xae\xf4\xd5\xbd\x7a\x6f\x5f\
+\x5d\x2e\x29\x69\x37\xd8\x57\x47\x51\x0d\xf2\x70\xfc\x70\x9d\x9f\
+\x65\x4b\x47\xba\x41\x04\x63\x6f\x7c\x9a\x38\x8d\x6e\x46\x66\x74\
+\xd3\xef\x22\x34\x06\x22\xa5\xd4\xa5\x44\x24\x11\x9e\x79\xed\x5a\
+\xd8\x53\x67\x09\x4a\xd0\xa2\x46\x78\x56\x72\x33\xcf\xfe\xb5\x58\
+\x58\xed\xec\x5e\x7a\xd3\x71\x95\x7a\x8c\x99\x12\x60\xda\x6d\xd2\
+\x1a\x4a\x8e\x50\xcc\x82\x17\xb9\x61\x3d\xb7\x79\x71\x9e\xe0\x67\
+\x1d\xcd\x41\xe3\x59\xed\xd2\x34\x3e\x9c\xb8\x3d\x15\x2a\x9b\x2b\
+\x5c\x08\x6f\x48\xe7\xc5\x54\x75\x49\x71\xb5\x33\xbf\xbf\x86\x50\
+\x48\xdb\x9c\x73\xdb\x9a\xce\xa5\x64\x69\x95\x57\x7b\xdb\xd2\x3a\
+\x31\x0b\x42\xd2\x14\xda\x92\xa4\x9e\xc5\x27\x22\xb6\x14\x82\x80\
+\x48\xed\x55\xc7\x4c\xe2\x31\x6f\xea\x37\x50\xad\x10\x19\x6e\x2c\
+\x08\xf2\xe1\x38\xcc\x66\x52\x10\xd3\x6a\x72\x2a\x4a\xca\x52\x38\
+\x19\x3c\x9c\x55\x8e\x06\x72\x3e\x6a\x6f\x71\xd0\x79\x91\x9c\x77\
+\x54\xc9\xc7\x74\x1e\xe0\xd2\xb3\x83\x85\x8c\x10\x79\xf6\xa4\xa1\
+\x2a\x50\xc1\xe6\xbd\xdc\xa6\xfe\xf7\x23\xf9\x52\xe4\xae\xc7\x45\
+\xd9\x6a\x68\xbd\xc4\x0f\x33\xe2\x24\x1c\x8e\xf5\x1f\x03\xca\x52\
+\x47\x63\x52\xe6\x76\xbc\xca\x93\xc6\x08\xa8\xc5\xcd\xaf\xb3\x48\
+\x52\x48\xe0\x9e\x6b\x46\x1e\x7f\xe2\xf9\x19\xf1\x30\xff\x00\x25\
+\xcc\xc2\xde\xc9\x75\xc3\xc7\x03\xb5\x45\xfa\x8a\xe9\x4c\x67\x10\
+\x0e\x00\x18\xe2\xa7\x96\xa6\x36\xc3\x53\xa7\xdb\xd6\xab\x5e\xa6\
+\xbc\xa4\xb0\xe0\x4f\xb1\xab\x4e\x57\x52\xb7\x22\x99\x6d\x04\xfb\
+\x4a\xab\x48\x5b\x99\x7e\x45\xc2\xe4\xfb\x49\x71\x6d\x04\xec\xdc\
+\x32\x01\x51\x2a\x26\x90\x75\x77\xa4\xcd\xdd\xe1\xc5\xbb\x24\xbc\
+\xc4\xa0\x82\xa2\xe3\x4a\xde\xad\xbe\xc0\x1e\xff\x00\x4f\xa9\xa9\
+\x3f\x4d\xff\x00\x6f\x69\xbc\xb2\x17\xb5\xcf\xb3\x25\x63\x1c\xe0\
+\xa4\xed\x35\x68\xd9\x59\x55\xc2\xc7\x15\xc5\x36\x0a\xf6\x8d\xc4\
+\xa7\x3e\x55\x27\x07\xf8\x1a\xf2\x58\xba\x6d\xd6\xcd\x17\x67\xc8\
+\xf7\xb8\x4a\xbc\x3c\x24\x53\xd6\x3c\xd7\xc3\xee\x70\x55\xc7\x48\
+\x16\x1b\x75\xb6\x9d\x52\xd6\x96\x37\x95\xe3\x85\x1c\xf2\x9c\x7a\
+\x63\xb7\xd6\x99\x2c\xf0\x64\xb1\x71\x69\xef\x33\x61\xb2\x16\x16\
+\x7b\x12\x30\x71\xf5\xed\x5d\x29\xd4\xdb\x45\x90\x75\x21\x76\xd8\
+\x31\x3e\xc9\x19\xc8\x67\x73\xab\x04\x25\xd7\x82\xb2\x38\xf9\xc2\
+\xbf\x21\x54\xf4\xd8\xad\x89\x0a\x86\xc4\x73\xb3\xc5\xfd\xa9\xda\
+\x46\x13\xb8\x82\x9f\xa7\xb1\x1e\xdf\x14\xba\x18\xa9\xca\xf1\x96\
+\xa3\xb1\x78\x0a\x2b\x25\x4a\x6a\xd7\xd6\xdf\xc1\xd5\xdd\x2f\x6d\
+\xe6\xf4\x15\xb9\xf9\x61\x5e\x33\xc8\x0a\xf3\xfd\xe0\x9f\x4c\xfd\
+\x7b\xd4\xd2\x3b\x99\x39\x23\xbf\x02\x99\x2d\xed\x26\x2d\xae\x2c\
+\x74\xf0\xdb\x2c\x36\x84\x73\xc0\x4a\x52\x00\xfc\xb1\x4e\xb6\xce\
+\x52\x92\x52\x40\x3e\x6e\x7b\x0f\xad\x67\x8b\xd7\x41\x15\x5e\x66\
+\xd9\xe5\xc6\x02\xf2\xa9\xcc\xa3\x7b\x89\x18\x5b\x27\xfe\x14\x7b\
+\x56\xbb\x6e\xa2\x86\xe3\xe2\x2c\xa7\x44\x77\xf3\xfd\x53\xc7\x6a\
+\xd3\xf1\xcf\xde\x14\xf2\x0e\xe2\xa0\x92\x4e\x7b\x1f\x4c\x7d\x68\
+\x91\x6a\xb7\xcd\x63\xc2\x9b\x0d\x99\x20\x9c\x00\xe2\x01\xc5\x31\
+\x41\xa7\x78\xb2\x8a\x70\x92\xb4\xd7\xc8\x7b\xb6\x2a\x33\xad\xa5\
+\x4b\x42\x92\x30\x3c\xdb\x72\x83\xff\x00\x58\x7f\x8d\x3e\x43\x8f\
+\x13\x68\x29\x71\x93\xf4\x22\xab\xe6\x74\x15\x9c\x2c\xaa\x23\xf7\
+\x6b\x6a\xbb\x83\x0e\xe0\xe2\x06\x7e\x99\xc5\x2e\x6b\x46\x49\x48\
+\xca\x75\x96\xad\xd8\x3d\x3e\xde\x0f\xf1\x29\xad\x11\x9d\x45\xbc\
+\x7c\xc4\x4e\x8d\x17\xb5\x4b\x78\xaf\xb3\x64\xca\x4c\x64\x10\x4a\
+\x31\x84\xf2\x48\x1c\x0f\xa9\xed\x50\x8b\xbe\xab\x80\x89\x46\x06\
+\x9e\x8c\x35\x15\xdd\x27\x68\x6a\x39\xcc\x66\x0f\xf6\x9f\x74\x79\
+\x40\x07\xf7\x41\x26\x94\x3d\xa2\xec\x60\x03\x78\x93\x76\xbd\x60\
+\xfd\xdb\x85\xc1\xc7\x50\x4f\xca\x01\x09\xfe\x14\xe9\x19\xe8\xd6\
+\xd8\x3e\x04\x48\xb1\xe2\x46\x69\x39\x08\x65\xb0\x84\x0f\x6c\x01\
+\x51\x27\x37\xbd\x97\x9b\xfb\x2f\x32\x69\xc2\x94\x35\xd6\x5e\x4b\
+\xf9\x6d\xf9\x78\x91\x48\x1a\x6a\x4a\x25\x4a\xbd\x5f\x65\x7e\xb2\
+\xbc\xcd\x47\x87\x21\xf2\x30\x86\x9b\xff\x00\xe1\x34\x3f\x71\x3f\
+\xc4\xd2\x6f\xb2\x44\xb6\xc3\x10\x61\xa0\x36\xca\x09\xda\x90\x49\
+\x39\xfa\x9e\x49\xa7\x69\xf3\xa6\x5c\xde\xda\xd2\x8a\x00\x3d\xc7\
+\x14\x95\x36\xf0\xde\x56\xbc\xaf\x06\x93\x92\x37\xea\xa3\x53\xab\
+\x39\x7b\xcf\xe1\xcb\xbb\xe5\xc8\xdd\x08\x2d\x05\xb4\x04\xf9\x30\
+\x09\x39\xe7\x9a\x57\x75\x82\xa7\xa2\x2d\x3c\x1c\x8e\xc4\x52\xab\
+\x23\x71\xd6\xa6\xd0\xb5\x15\x73\x82\xae\xf4\xf3\x72\x8f\x1c\xa1\
+\x68\x6d\x3b\xa9\xaa\x92\x94\x6e\x67\x95\x4c\xb2\x48\xa6\xed\xfa\
+\x72\x12\xe4\xab\xf5\x60\x66\xd9\x76\x8c\xe2\x94\xdb\xc8\x4f\x95\
+\xe0\x7b\xa1\xc1\xea\x93\x81\xf2\x0e\x08\xe6\xa4\xf0\x35\x01\x43\
+\x88\xb7\xdf\x99\x55\xbe\x71\x00\x6d\x59\xce\xff\x00\x94\x9e\xce\
+\x0f\x91\xe6\xf7\x4f\xad\x21\xbf\xe1\x9d\x40\x51\x18\x6f\x3b\x72\
+\xe6\x0f\x20\xfa\x54\xa2\xc6\xe4\x3b\xed\xa9\x70\x6e\x71\x99\x94\
+\x13\xf7\xd0\xeb\x61\x49\x3f\x50\x7d\x6b\x2d\x34\xd3\xb4\x5e\xbe\
+\x46\xaa\xd2\x52\x8a\x75\x15\xd7\x9a\xfb\xae\xef\x95\xb5\x1b\xee\
+\x62\x33\xe5\x1f\x63\x9c\xd2\xf1\x9c\xed\x58\x18\xfa\x83\xda\x90\
+\xc9\x93\x1a\x23\x79\x9d\x3a\x2b\x00\x0e\x54\xe3\xe9\x48\xfe\x74\
+\xba\xe3\xd3\xcb\x14\x92\xa4\x34\xe4\xf8\xcd\xab\x80\x84\x3d\xb9\
+\x09\xfa\x05\xe7\x14\xdd\x1f\xa7\x71\x6d\xe0\x18\xb7\x4c\x14\xf6\
+\x5b\x90\x18\x5a\xff\x00\x32\x9a\xbc\x95\x5b\xeb\x1f\x93\xfb\xd8\
+\xac\x55\x1b\x7b\xff\x00\x34\xfe\x97\x19\x5c\xd4\x28\x90\x54\x8b\
+\x2c\x67\x6f\x2a\xce\x03\x88\xca\x23\x20\xff\x00\x79\xd2\x31\x81\
+\xec\x9c\x9a\xf1\x9b\x7b\xac\xb8\xa9\xd7\x19\x49\x99\x70\x29\xc2\
+\x56\x84\xe1\xa6\x12\x7f\x75\xa4\xfa\x0f\x75\x1e\x4d\x3d\xce\xd3\
+\xd3\x49\x0b\x76\xff\x00\x31\xc2\x83\x90\x14\xda\x00\xfc\x00\xed\
+\x49\x5a\x8b\x25\x08\x5a\x1d\x79\x2e\x8c\x79\x4e\xdc\x67\xe9\x8a\
+\xcf\x25\x2d\x9a\x25\xca\x0b\xdd\x67\x3e\x6b\xbb\x71\x3d\x7b\x8a\
+\x5b\x73\xc0\xdf\xb2\x5b\x25\x47\xca\x56\x13\xce\x3d\xc9\xc0\xf2\
+\x9e\x0f\x6f\x5a\x6b\xb6\xc7\x59\xbf\xdb\xdf\x71\xb6\x9b\xc9\x53\
+\xdb\x1b\x18\x03\xcd\x8f\xc3\xf1\xf4\xa7\x7e\xb4\x19\x11\xba\x95\
+\x6f\x9e\xc1\xca\xe1\x04\x1d\xbb\x41\x29\x0a\x47\x2a\xf9\x00\x81\
+\xf4\xc1\xa6\x7d\x2c\xbf\xb4\xdc\xd5\x29\x4a\x2b\x6c\x10\xcb\x27\
+\xb0\x20\x77\x35\x7a\x69\xce\x50\x5e\xb7\x37\xe6\x8d\x2e\x8d\xc4\
+\x54\x7d\x96\xf9\xa4\x8e\x9b\xe9\xab\xe5\xc8\xcd\xac\x81\xc7\x6c\
+\x55\xad\x15\x40\x34\x95\x2c\x8c\x63\xb6\x6a\xa4\xe9\xb8\x52\x61\
+\xb4\x84\x03\xda\xad\x9b\x74\x40\x5b\xdc\xe1\x2a\x24\x1e\xd5\xed\
+\x1c\x54\x29\x45\x33\xe7\x14\x6f\xb2\x37\x78\xc8\xc8\x39\x04\xfc\
+\x0f\x8a\xc9\x38\x3c\x83\x80\x79\xe0\x66\x94\x08\x8c\xad\x3f\x73\
+\xe0\x0a\x4a\xfc\x63\x1c\xee\x6c\xe1\x39\xe4\x7b\x52\x54\xa2\xdd\
+\x91\xa5\xc6\x4b\x56\x66\xbe\x53\x81\xdf\x04\x7d\x28\xa4\x57\x0b\
+\x83\x31\xe2\x93\xb8\x6e\xf4\x1e\x94\x53\xa1\x4a\x4d\x08\x9d\x58\
+\x27\xa9\x05\xd0\x2a\x6d\xad\x1d\x07\x23\x27\x2b\xec\x7d\x37\xab\
+\x9a\x79\x32\x54\xa2\x36\x34\x4f\x18\xed\x9a\x6d\xe9\x95\xbd\x4f\
+\xe9\x48\x4f\x3e\xaf\x29\xf1\x38\xcf\xfc\x62\xaa\x68\x98\xc8\x4f\
+\x01\xb4\x82\x3f\x9d\x68\xe2\xc6\x29\x23\x2d\x3a\x52\x94\x53\x23\
+\x09\x92\xa0\xbf\xda\x24\xa0\x64\x60\x91\xc7\xfa\xef\x4a\x52\xea\
+\x55\xca\x33\x82\x30\x38\xfe\x54\xf3\x26\x23\x0f\x34\x42\x92\x02\
+\x8f\xae\x3d\x2a\x29\x70\x9c\x8b\x3b\xea\x61\xc1\x9c\x9f\x2f\x35\
+\x78\x4d\x4f\x62\x27\x07\x03\x64\xbb\x7d\x8c\x5d\x99\xbb\xc8\xb6\
+\xc0\x55\xc1\xa0\x42\x25\x29\x94\x17\x53\xc6\x30\x17\x8c\x8e\x3e\
+\x6a\x37\x75\x6a\xdc\x1b\x4c\x28\x70\x62\xb1\x01\xb4\x96\xd1\x15\
+\xa6\x52\x96\x82\x79\x24\x04\x81\xb4\x02\x49\xe3\x15\x59\xf5\x3f\
+\x55\x5f\xb5\x0e\x95\xbc\xca\xb6\xc0\x2d\xda\xe2\x4f\x6a\x1a\xa6\
+\x09\x05\x0e\x15\x25\xf6\xc2\x88\x48\x4e\x36\xee\xf2\xfd\xec\xf2\
+\x4e\x31\x52\x4b\xb6\xa4\x9b\x67\x91\x7c\x71\x16\x96\x25\x31\x61\
+\x43\x6a\xb8\x17\x25\x86\x9c\x3b\xd3\xbb\x6b\x49\xda\x77\x14\xa4\
+\x85\x1c\x91\xdc\x01\xf1\x19\xe2\x98\xac\xc8\x92\x5a\x34\xb5\xa4\
+\x42\x54\x75\x5a\x20\x22\x1b\x87\x72\xe2\xa6\x3a\x03\x6a\x3f\x29\
+\xc6\x0f\x20\x7a\x7a\x0a\x75\x3a\x6b\x4f\x9b\x62\x2d\xa3\x4f\xda\
+\x97\x11\x0a\xdc\x98\xe6\x22\x0b\x49\x38\xee\x13\x8c\x67\x1e\xb5\
+\x16\x91\xaf\xcc\x08\x9a\x9d\x72\x60\x00\xbb\x3b\x4c\xbb\x15\x09\
+\x5e\x3e\xd6\x97\x9b\xcb\x47\xb7\x19\x5e\x53\xeb\xda\x90\xea\x0e\
+\xa5\x4e\x80\xe5\xd3\xec\xd6\xd6\x1e\x6e\xce\xd3\x4b\xb8\x93\x33\
+\x62\xb7\x29\x3b\x94\x86\x86\xd3\xbb\x6a\x4e\x4e\x48\xf6\xef\x53\
+\x9a\x21\x74\x59\xf6\x65\xc6\x81\x01\x31\x23\xc7\x69\x94\x20\x6d\
+\x42\x1b\x48\x09\x03\xd8\x01\xc0\xfc\x29\xa6\xc9\xa1\xac\xd1\xb5\
+\x15\xd7\x50\xca\x89\x1a\x6c\xfb\x84\x84\xc8\x4a\xdf\x8c\x85\x2e\
+\x31\x4a\x52\x9c\x21\x58\x24\x03\xb4\x1f\xad\x56\x6e\xea\x57\x2c\
+\x9a\xd7\x55\xdf\x24\xba\xf3\xb0\xa2\xda\x22\x48\x08\x4a\xb2\x0e\
+\x77\xe3\x68\xec\x0a\xb8\x1f\x95\x4b\x22\x75\x0e\xe9\x6f\x9a\x8b\
+\x75\xfe\xca\xcc\x49\x32\x60\x3d\x32\x19\x6a\x51\x75\x2a\x2d\x00\
+\x56\xd2\xc9\x42\x70\xa0\x14\x0e\x46\x47\x7e\x6a\xad\xc5\x92\xa4\
+\x9e\xe4\xd8\xc1\x80\xcc\x99\x0f\xbb\x6d\x88\xe3\xb2\x19\xf0\x5e\
+\x75\x4c\xa4\xa9\xc6\xc6\x70\x85\x12\x32\x53\xc9\xe0\xf1\xc9\xad\
+\x16\x8b\x25\xa2\x08\x2a\xb7\x5a\x60\x43\x6c\x25\x48\x08\x62\x3a\
+\x10\x02\x55\x82\xa1\xc0\xe0\x12\x06\x47\xc5\x57\xf6\x9e\xa0\xdd\
+\x6e\xcf\xe9\xf7\x66\x5a\x1b\x8b\x02\xfe\x4a\x62\x2d\x32\x8a\xdc\
+\x43\x9b\x0a\x80\x5a\x76\x80\x02\x80\x38\xc1\x3f\x3d\xf8\x46\xd7\
+\x51\x6f\x89\xb7\x43\xba\x37\xa7\xd2\xe4\x39\x57\x43\x6a\x6c\x09\
+\xb8\x70\xc8\xdc\xa4\xa4\xed\x29\xc6\xc2\xa4\xe3\x39\xc8\xce\x71\
+\xc7\x33\x9a\x3b\x91\x99\x16\x23\x7a\x77\x4f\xb4\xc3\x71\x98\xb2\
+\x5b\x58\x69\xb7\xfe\xd2\xd2\x5a\x88\x84\x84\x3a\x32\x03\x80\x01\
+\xc2\xf9\x3e\x6e\xfc\x9a\x4f\x36\xc7\x6d\x55\xc5\xb9\xb2\x6d\x70\
+\x9e\x94\xde\x3c\x39\x0e\x47\x4a\x9c\x47\xd1\x44\x64\x7a\x54\x65\
+\x1d\x45\x72\x24\x2d\x44\x9b\xcd\xb1\x0d\xcf\xb2\x3c\xcb\x2a\x66\
+\x3c\x8d\xe8\x7d\x4f\x04\x96\xb6\xa9\x49\x4e\x32\x54\x01\xc8\xe3\
+\xbd\x2e\x3a\xbe\x74\x68\x1a\xa1\x37\x4b\x6c\x31\x3a\xc3\x6f\x4d\
+\xc7\xc3\x8f\x33\xc6\x69\xf6\x94\x15\x8c\x28\xa1\x24\x10\x52\x41\
+\xc8\xf6\x3e\xb4\x39\xc1\x6e\x0a\xc4\xc6\xdc\xe4\x06\x64\xae\x58\
+\x89\x1d\x13\x1e\x4a\x50\xe4\x94\xb6\x90\xe3\x89\x4e\x76\x82\xac\
+\x64\x81\x93\x80\x7b\x64\xd3\xa4\x7b\x35\x89\x51\x19\x61\xbb\x4d\
+\xb8\x47\x66\x40\x94\xd3\x42\x32\x36\xb6\xfe\xe2\xaf\x11\x23\x18\
+\x0b\xdc\x49\xdc\x39\xc9\xce\x6a\xbf\x85\x74\xbc\x39\x7f\x83\x67\
+\x93\x69\x8b\x15\xdb\xb5\xb1\xcb\x85\xb0\xfd\xb4\xb8\x06\xcd\xa7\
+\x63\xde\x41\xb0\xf9\xd2\x7c\xbb\x87\x71\xcf\x72\x74\x5a\xfb\xa9\
+\xee\xda\x1e\x0d\xde\xf2\x23\xba\x89\x69\x52\xda\x71\xa5\x12\xb2\
+\x3c\x45\x82\x14\x36\x80\x9c\x60\x01\x82\x73\x4b\x79\x2a\x7b\xa3\
+\x61\x53\x2b\xb3\x45\x8d\x1a\xdf\x19\x13\xa4\xca\x89\x0e\x3b\x52\
+\x25\x14\x2a\x43\xed\xb4\x94\xad\xe2\x91\xb5\x3b\xd4\x06\x55\x81\
+\xc0\xce\x70\x38\xa7\x04\xc2\x51\x39\x2b\x39\xf5\x15\x53\x5a\xf5\
+\xac\xbd\x3c\x8d\x63\x39\xfb\x7a\x9f\x93\x1a\xff\x00\x12\x22\x9b\
+\x5d\xc1\x6e\xb5\x87\xbc\x34\x85\x20\x29\x23\x60\x09\x50\x25\x20\
+\x11\x9c\xf3\x8c\x54\xbb\x51\xf5\x07\xf5\x15\xfb\x51\xc1\x7e\xd8\
+\xe4\x86\x2c\x96\x44\x5d\x0a\x99\x5e\x5c\x74\xa9\x4b\x05\x18\xc6\
+\x00\x1b\x73\x9c\xfb\xd6\x59\xd5\x69\xd9\x1a\xa9\xca\x9b\x57\x97\
+\xad\xfe\xc4\xa5\x71\xdf\x68\x64\x28\xa8\x0e\xfc\x57\xa7\x0e\x23\
+\x6a\xb8\x35\x5d\xeb\xdd\x67\xaa\xe3\xf4\x86\x5e\xa9\xb6\xb3\x62\
+\x61\x4e\x18\xa6\x3b\xd1\x2e\x2a\x94\x03\x6e\xb8\x94\x12\x09\x69\
+\x23\x70\x2a\x48\xf5\x18\x2a\x3c\x10\x01\xb0\x62\xb5\x70\x5c\x06\
+\x9e\xb8\xa2\x33\x53\x79\xf1\x53\x15\xc5\x2d\xb1\xc9\xc6\x0a\x92\
+\x09\xe3\x19\xe0\x72\x6a\x23\x52\xef\x52\xfa\x37\x68\x9b\x2d\xca\
+\x2d\xaf\x61\x3d\x8f\x1f\x15\xaa\xff\x00\x04\x3a\xf2\x54\x79\xcd\
+\x64\xca\xb0\xf8\x51\xfa\x1a\x72\x9a\xcf\x8c\xd2\x76\xf7\x06\xac\
+\xe7\x92\xa2\x91\x68\xc3\x3d\x37\x11\x0b\x8d\x86\xad\xa1\x3d\x8e\
+\x3d\x6a\xad\xea\x04\x70\xb8\xaf\x15\x0e\x4d\x5b\x17\x4c\xa6\x38\
+\x18\xc6\x07\x35\x5c\x6b\x36\xc3\x91\x95\x81\xc0\xef\x5a\x30\xdd\
+\x64\xef\xcc\x4e\x21\x59\xa4\x51\x3a\x5e\xe6\xfd\x9b\x51\xcb\x8e\
+\xd9\xc7\x8a\xd2\xc0\x1e\xe0\x8e\x7f\x8e\x0d\x74\x96\x91\x2c\xb5\
+\xa4\x21\x3b\xb4\x1d\xcc\x25\x5f\xc2\xb9\x86\x79\x0a\xea\x84\x28\
+\x28\x20\x78\xb1\x1c\x52\x47\xf7\xb7\x63\xf9\x57\x42\x69\xb9\x92\
+\x1c\xd2\xf0\xd2\xd3\x4a\x79\x0d\xb2\x1b\x73\xc3\xee\x85\x27\x83\
+\x9f\xca\xb8\x18\xac\xaa\xa6\x87\xa4\xc0\x66\x9e\x12\x29\xf6\x90\
+\x6e\xa2\xdb\x2d\x31\x51\x3b\x50\xdc\x22\x46\x54\x85\x61\x4c\x25\
+\x4a\xe4\xed\xc9\xed\xec\x9c\x02\x4f\xcf\x35\x46\xda\x5b\x6a\xe0\
+\xf2\xda\x91\x19\x4c\xb7\x3d\x2a\x5b\x4a\x4a\xf2\x16\xde\xe5\x2b\
+\x23\x3d\xc8\xdc\xa1\xcf\x1d\xea\xe0\xfd\x24\xee\xae\x42\xd3\xb6\
+\x4b\x78\x8c\x8d\xb3\x56\xf2\x14\xeb\xec\x12\x84\xa3\xca\x92\x9d\
+\xde\xe4\x2b\x38\x1c\x9c\x7c\x55\x25\x6d\x75\x2f\xcc\x8d\x0d\xe0\
+\xd0\x54\x64\xa5\x2e\xb9\xbf\x07\x6e\xe2\x02\x07\xf6\x46\x55\x8e\
+\x7e\x6b\x8b\x51\x24\xda\x3d\x05\x2c\xd2\xa5\x19\xcb\xd7\x23\xa0\
+\xf4\xfc\xd7\x5f\xd3\x16\xc7\xdf\x42\x10\x4c\x74\x21\x41\x27\x39\
+\x21\x23\xf8\x1c\xd4\xb2\xd0\xbd\x91\xc0\x5a\x81\x07\x8e\xd5\x5d\
+\xd8\x5e\x77\xf5\x5c\x78\xc5\xb7\x37\x8e\x77\xa9\x7c\x0f\x4e\xde\
+\xfc\x7e\x15\x3d\xb4\x2f\xc4\x84\x56\x94\x85\x0d\xa7\x8f\x5c\x1a\
+\xad\x39\x5d\x98\xab\x44\x7e\x88\x77\x1d\xd8\x4e\xe3\xc1\x03\xb6\
+\x29\xca\x37\x86\x4e\xdd\xc4\x28\x77\x09\xef\xf9\xd3\x3c\x65\x2d\
+\x6c\xa5\x68\x4f\x95\x49\x03\x69\xe0\xfe\x3e\xd4\xec\xdb\xa8\x4a\
+\x37\x92\x00\x00\x7e\x15\xae\x0c\xca\xd0\xed\x1b\x68\x56\xe2\x53\
+\x8c\x71\x4a\x5f\x7c\x36\xd1\x50\x19\xe2\x9b\x22\x38\x92\x92\x07\
+\xaf\xc5\x23\xbd\x4c\x2d\x84\xb6\xd0\xdc\xe9\xe1\x29\x1e\xb4\xfe\
+\x22\x8a\x17\xc3\xcd\x2b\x19\x4b\x96\x15\x20\x23\x24\xac\xf6\x48\
+\xac\x2e\x4c\x2d\xfb\x6b\xd1\xe3\xe3\xc5\x29\xca\x72\x7b\x9a\xd3\
+\x19\xb4\xc3\x41\x79\xf5\x05\xc8\x5f\x2a\x23\xd3\xe0\x7b\x52\x29\
+\x93\xd0\xb2\x5a\x52\x94\x90\x53\xf7\xb3\xc8\x1f\x15\x55\xd6\xd5\
+\x8f\x4b\x55\x97\x90\xcb\x03\x51\x42\x8e\xb5\x44\x92\x92\xdc\x96\
+\xf8\x71\xb5\x70\xa0\x7d\xb1\x55\x6f\x5a\x75\x67\x5d\xa1\xcf\x42\
+\x74\x96\x9a\x44\x2b\x52\x87\xec\x9e\x44\x74\xc8\x75\xdf\xf9\x44\
+\xe4\x27\xe9\x8f\xc6\xad\x15\x96\x27\x36\x82\xfc\x44\x2c\xa0\x80\
+\x92\xa1\x95\x0c\x76\xe7\xbe\x69\xce\x04\x95\xf8\xff\x00\x64\xdb\
+\x2c\x6f\x19\x1c\x6e\x18\xa5\xaa\x52\x4f\x7d\x0d\xd7\xa6\xaf\xd5\
+\xf5\xdd\xfd\x32\xa6\xe8\x9f\x52\xb5\xa7\xeb\x98\xb6\x5e\xa2\xd8\
+\xd3\x6e\x99\x34\x91\x0a\x63\x69\xd8\x87\xd6\x06\x7c\x35\xa4\x12\
+\x12\xa2\x01\xc1\x18\xcf\x6c\x55\xcd\xab\x75\x1c\x4b\x4e\x9c\x9f\
+\x78\x96\xef\x87\x1a\x1b\x0a\x79\xe2\x0e\x4e\xd4\x8c\x90\x3e\x4f\
+\x61\xf3\x4c\xba\x8f\x4d\xb5\x31\xb4\xca\x8c\x86\x1e\x71\x0a\x0b\
+\x09\x5b\x78\x21\x40\xf0\x52\x7d\xea\x17\xaa\xa0\xde\xae\x50\x95\
+\x63\x93\x0a\x43\xcd\xc8\x50\x2e\x64\x8d\x84\x03\x9e\x7e\x38\xed\
+\x54\xa9\x39\xc2\xfa\x12\xa8\xd1\xaf\x28\xb8\xbb\x5b\x7b\xfa\x44\
+\x1f\xa7\x7a\xd6\xf9\x7e\x95\x37\x52\x5c\xe5\x45\x85\x69\x79\xd3\
+\x96\x1d\x21\x02\x33\x7e\x87\x79\xef\xf3\xee\x7b\x55\xc5\xd3\x1d\
+\x4d\x0e\xeb\x16\x74\xfb\x79\x2e\x43\x4b\xfe\x1a\x1d\x29\x20\x39\
+\x81\xc9\x4e\x7b\x8a\x88\x41\xb0\x5b\xa2\x43\x4c\x79\x16\xd6\xa6\
+\x25\x27\x62\x10\xe3\x23\xc3\x07\x19\xec\x46\x3f\x3a\x94\xd8\xee\
+\x31\x23\xb2\xcc\x56\xd8\x69\xa1\xfd\x5a\x5b\x42\x40\x49\x23\xdb\
+\x1d\xbf\xf2\xa4\x52\xa4\xe3\x2c\xcd\xdb\xb8\xd7\x8d\x95\x1a\x91\
+\xb4\x23\xd9\xeb\xc4\xb2\xa1\xca\x6a\x42\x4f\xad\x6a\x95\x93\xca\
+\x12\x0f\xb6\x7d\x69\x96\x14\x9f\x30\x52\x14\x38\x1c\xe3\xd4\x53\
+\xba\x1d\x4a\x9b\xee\x49\x27\xb7\xb5\x6d\x52\xba\xb3\x38\x4e\x19\
+\x5d\xc4\x92\x9b\xdc\x9c\x90\x01\x3e\x86\xa2\x77\x84\xa1\x93\xbd\
+\x43\x6a\x42\x87\x73\x53\x07\x16\x08\x50\x52\x8a\x89\x3c\xfc\x54\
+\x47\x54\xa9\x28\x8c\xe9\xc2\x31\x8f\x26\xef\x7f\x63\x59\xeb\x69\
+\x1b\x97\x85\xef\x63\x9d\xfa\xca\xcf\xeb\x0e\xa3\xbb\x1b\xc4\x6c\
+\x17\x22\x78\x1e\x13\x99\x0a\x2b\x09\xde\x95\x20\x8f\x5c\xff\x00\
+\xe8\x45\x45\x2d\x37\x2f\x07\x5e\xda\xf4\xd8\xf0\x8b\x6c\x47\x57\
+\x8a\x50\x80\x32\xf2\x93\x93\x9c\x13\x9c\x11\x8c\xf1\xce\x6a\x6f\
+\x75\xfb\x15\xef\x5d\xc8\xfd\xa7\x88\x44\xa7\x1b\x43\x78\xf3\x95\
+\xa1\x20\x00\x32\x3b\x8c\x8c\x11\xdf\x07\x8a\xa4\x2d\x17\x69\x0e\
+\x75\x34\x4d\x52\x9b\x42\xd3\x39\x59\xc1\xe3\xef\x10\x7f\xf4\xaa\
+\xe0\x9d\xe4\xdf\x61\xab\x1c\xbf\xf8\xf8\x5f\xed\xf4\x47\x71\x74\
+\xb8\xa7\xec\x8d\x93\xc9\xe3\xbd\x5b\xb0\x16\x36\x00\x0f\xe7\x54\
+\x4f\x4e\xe7\xa5\x2d\x60\x1f\xbb\xc8\xe6\xac\x2b\x66\xa3\xf0\xe7\
+\xb6\x16\xad\xad\xab\x8e\xfc\x57\xb2\x51\x75\xa9\x29\x1e\x0e\x9d\
+\x65\x07\x66\x4f\xb3\x8c\x67\xf9\x56\x32\x46\xe6\x17\x93\xdc\x11\
+\xcd\x69\x6a\x63\x0b\x48\x58\x70\x24\x7d\x6b\x5c\xb9\x49\x52\x7c\
+\x36\xb0\xaa\xca\xa1\x2c\xdb\x1b\x9c\xe3\x97\x71\x89\x9b\x58\x5b\
+\xa5\xc9\x4e\x65\x21\x5e\x50\x73\x45\x3c\xb6\xd0\x43\x78\xee\x73\
+\x45\x6a\x75\x5b\x7b\x99\x15\x18\xa5\xb1\x18\xe9\xf3\xad\x31\xa2\
+\x20\xad\xc2\x9d\xbf\xb4\xe3\x1f\xf1\xaa\xa9\x1b\x0b\x43\xcd\x85\
+\x21\x47\x18\xcf\x06\xab\x58\x93\x1c\x6f\x43\x5b\xa3\x34\xac\x29\
+\x5b\xfd\x7b\x7e\xd1\x54\xe3\xa7\xf5\x22\xe2\x36\x23\xbe\x14\x52\
+\x39\x0a\x35\x78\xd1\xbc\x2e\xb7\x15\x1a\xd6\xb2\x7b\x13\xb2\x0e\
+\xd3\x9c\x1f\xad\x43\xb5\x0c\x58\xf2\xaf\x00\xad\xad\xdb\x79\xc7\
+\xcd\x2e\x1a\x8d\xb9\x67\xc2\x8a\x09\x50\xe0\xd1\x1d\xa5\x29\x65\
+\xc5\x11\xe2\x2b\xb9\xc5\x32\x94\x1c\x75\x65\x6a\xcd\x4b\x44\x55\
+\xb7\x5d\x07\xa9\x57\xa7\x2f\x7a\x62\xd8\xfd\xa1\x16\xab\x85\xcf\
+\xf5\x83\x4e\xbe\x56\x97\x9a\xcb\xa9\x78\xb5\xb4\x24\x82\x37\xa7\
+\x85\x6e\xc8\x07\xb1\xa7\xf9\x3a\x5e\x6c\x5d\x67\x78\xbd\xb1\x64\
+\xd3\x57\xa6\x6e\xfe\x13\x8e\x22\xea\x8c\x2e\x3b\x88\x46\xc2\x52\
+\xaf\x0d\x7b\x92\x40\x49\xdb\xe5\xe7\x3c\xfa\x54\xd5\x6a\x6d\xbc\
+\x85\x3a\xda\x48\x04\xe0\xab\x1c\x7b\xfd\x2b\xd2\xa4\x85\xa1\x2a\
+\x52\x7c\xfc\x0f\x92\x39\xc0\xfc\x2a\x5d\x28\xbd\xc4\x25\x62\x35\
+\xad\xba\x72\xad\x5d\xac\x6c\xd7\x8b\x73\xb0\x22\xda\x9b\x65\xb6\
+\x6e\x91\xd5\xb9\x2b\x75\x2c\xb9\xe2\xb1\xb0\x24\x60\xe1\x79\x07\
+\x24\x71\xef\xda\xa1\x37\xcd\x19\x2e\xcf\xac\x2e\xf3\x22\xd9\xec\
+\x57\x56\xae\x05\xb5\xa9\x37\x24\x10\xb6\x16\x94\xed\x25\x27\x62\
+\xf7\x24\x80\x38\xe3\x9c\xf3\x56\xe5\xa7\x50\xdb\x2d\xfa\xa2\x2d\
+\x8a\x44\xd4\xb7\x2e\x5b\x4b\x75\xa6\x94\x71\x94\x20\xa4\x12\x4f\
+\x61\xca\xd3\x8c\xf7\xe7\x1d\xa9\x46\xb0\x44\x34\xcc\x57\x8e\xa4\
+\x23\x29\xca\x94\xae\x31\xf3\x9a\x4c\x16\x5a\x8e\x1c\xb7\x1f\x38\
+\x46\x70\xe2\x2d\xef\xa9\x50\xdc\xf4\x8a\xaf\x2f\xea\x94\x49\x76\
+\x3b\x30\xef\x36\xb8\xd0\xe3\xf8\x69\x25\x6c\xad\xa2\xa2\x14\x53\
+\x80\x36\x82\x53\xc0\x3e\x87\xb5\x21\xbb\x58\x6f\x93\x26\xb7\x7a\
+\xd4\x0e\x40\xdd\x6e\xb6\x48\x66\x33\x51\x14\xa5\x78\x8e\x38\x90\
+\x16\xe1\x25\x23\x6f\x09\x18\x48\xcf\x7e\xf5\x65\x26\xda\xf1\x07\
+\xec\xcb\x42\x9b\x3c\x82\x0f\x1f\x5a\xc5\x30\x43\xa8\xf1\xd6\xf3\
+\x65\x19\xc0\x5e\xf1\x8c\xe7\xd0\xfd\x6b\x46\x48\x99\xf2\x95\xc7\
+\x4c\x6c\xb7\x59\x76\x7d\x17\x2a\xee\xcc\x58\xb0\xac\xcc\x07\xd9\
+\x65\xb5\xad\x4f\x3c\xef\x85\xb1\x25\xc0\x52\x9f\x0f\x68\x52\x8e\
+\xd1\xbb\x24\x0e\x6b\xd6\x34\x6d\xf5\x3a\x7e\xd3\x6b\x0f\x43\x53\
+\x90\xb5\x22\x6e\xce\x10\xb5\x6d\x2d\x07\xd4\xe6\x07\x97\xef\x61\
+\x5d\x8e\x06\x7d\x6a\x6f\xac\xee\x28\xd2\xba\x6a\x4d\xe6\x42\x54\
+\xf8\x8e\x5a\x0a\x61\x0a\x01\x67\xc4\x75\x2d\x03\xcf\xa6\x55\xfc\
+\x2a\x45\x0d\x31\x23\x6e\x3e\x2a\x56\xb0\x76\xf0\x73\x83\xed\x50\
+\xa1\x1d\x81\x45\x6c\x44\x9b\xe9\x44\xbb\xe3\x5a\xd6\x4c\xd9\x10\
+\xd9\x4d\xed\xc8\x2f\xdb\xd4\xa0\x5c\xf0\x9c\x8e\x84\xff\x00\x5a\
+\x92\x00\xda\x54\x9c\x10\x09\xca\x49\xec\x69\xca\xf3\xa6\x6e\x57\
+\x3d\x1d\xa8\xac\x8c\xd8\x74\xa5\x8e\x5c\xf8\x2a\x8a\xd3\x96\xe2\
+\xad\x8b\x24\x28\x12\xe1\xf0\x92\x42\x73\xb4\x81\x85\x63\x9e\x4f\
+\x73\x65\x30\xeb\x66\xd0\x4b\x4a\x07\x1c\x1c\x73\x83\xfe\x8d\x44\
+\xb4\x1e\xa3\x8d\xaa\x74\x6c\x0d\x48\xcc\x75\x45\x66\x62\x54\xb4\
+\xa1\xd5\x02\x53\x85\x94\xe0\x9f\xc2\xb1\x2b\x4a\x4d\xb3\x6c\xa9\
+\xc2\x09\x45\x73\x5e\xbf\x91\xa9\x1a\x4a\xe2\x35\x8e\x96\xbc\xaa\
+\x44\x6f\x02\xd3\x6b\x7a\x1b\xe9\xde\xad\xea\x5a\xc3\x60\x14\x0d\
+\xb8\x29\xf2\x1e\xe4\x7a\x71\x58\xf4\xc7\x4f\xdd\xf4\x8e\x89\x66\
+\xc3\x76\x30\x5d\x66\xda\x85\x06\x24\x45\x71\x6b\x53\xa8\x2b\x52\
+\x89\x52\x0a\x06\xd3\x82\x38\x05\x59\xe6\xa6\xe9\x04\x27\x3d\xa9\
+\x93\x42\xea\x38\xda\xaf\x49\xc7\xd4\x0c\x30\xe4\x56\x5e\x53\xc9\
+\xd8\xea\x81\x29\xf0\xdc\x5b\x64\x93\xdb\x19\x41\x3f\x8d\x32\xf6\
+\x77\x2b\xc3\x8d\xfb\xff\x00\xa2\xbc\xb5\xe9\xb9\xba\xc6\x1e\xbd\
+\x10\x56\x62\x7d\xb6\xf7\x0e\x5d\xb6\x44\xa6\x56\x86\x9e\x54\x74\
+\x34\x79\x04\x05\x14\x12\x92\x9c\x81\xf2\x33\x8a\x9a\xdb\x34\xe6\
+\xab\x6b\x58\xdd\xb5\x74\xc1\x63\x32\xa7\x5b\x19\x86\xdc\x24\xbe\
+\xea\x9a\x6c\xb6\xb2\x4e\xe7\x0b\x60\xa8\x10\xa5\x1c\xed\x18\xe0\
+\x63\xd6\x9d\xf5\x1d\xda\xdb\x60\xb6\x2a\xe7\x71\x96\x98\xd1\xc2\
+\x90\xd8\x51\xe7\x2a\x5a\x82\x52\x00\xf5\xc9\x50\xfe\x75\xb5\x99\
+\xaf\x3a\x93\xb1\xe4\xad\x27\x21\x25\x2a\xc8\x35\x4e\x0e\x77\x74\
+\xc9\x8b\x8d\x3d\x1e\xff\x00\xdf\xdd\x95\xb5\xcb\xa7\x57\x27\x74\
+\xee\xaf\xb6\x47\x55\xa2\xd0\xe5\xfe\x4c\x49\x11\xed\xf1\x16\xb5\
+\xc3\x88\xb6\x16\x85\x93\xbb\x62\x4e\x5c\x28\xf3\x10\x81\xd8\x71\
+\x57\x1d\xa5\x73\x5d\xb7\x34\xbb\x9b\x11\x98\x96\xa0\x7c\x46\xe3\
+\xbc\x5d\x6d\x3c\x9c\x00\xa5\x25\x24\xf1\x8f\xdd\x14\xc4\x41\x27\
+\x27\x93\xeb\x4f\xd6\xc5\x97\x23\x8f\x5c\x54\x56\xa4\xa1\x14\xd1\
+\x7c\x33\x59\x9f\xaf\x5b\x89\xa5\x24\xb5\x21\x24\x7a\xf6\xa7\x78\
+\xe7\x2c\xa7\xd6\x91\xcd\x6b\xc4\x6f\x3d\x88\xf5\xa5\x51\x01\x0c\
+\xa7\xe9\x49\xa9\x2c\xd1\x46\xba\x6b\x2c\xd8\xd3\xa9\xe4\xa2\x34\
+\x52\xb7\x15\x84\x81\xde\xab\x1d\x4f\x7b\x86\xa8\x25\x40\xad\xb0\
+\xe0\xf2\xf8\xa8\x28\xdd\xff\x00\x6b\x15\x64\x6a\x14\x78\xaf\xa1\
+\x2b\xfb\x83\x9a\xab\xba\xb3\xe1\xae\xd8\xea\x40\x68\xa8\x24\xed\
+\x0b\x4e\xe0\x48\xf4\xc5\x6c\xa5\x25\x4e\x95\xd9\x86\xbe\xb5\x19\
+\xcd\xda\xb6\xfb\x1a\xdd\xd5\xcb\x15\xd6\x42\x81\x87\x1e\x42\x1a\
+\x90\x73\x82\xde\xf2\x41\x27\xe0\x12\x93\xf4\xae\xae\xb1\xdb\x90\
+\x9b\x8a\x9c\x86\xe3\x8c\xa1\xd6\xf3\x2d\xb4\xab\xca\xb2\x7b\x1c\
+\x7b\x90\x2b\xe7\xf6\xb6\xb9\x3f\x32\xec\xfc\x2b\x82\xd4\x70\xa2\
+\x83\xea\xa4\x1c\xf0\x01\xf5\x1f\x35\xd4\x5f\xa2\x97\x58\x2d\xb7\
+\xc8\x0d\xe9\x1d\x45\x31\x98\xb7\xe8\xa9\x4b\x71\xd4\xf3\x9b\x44\
+\xd6\xd2\x36\x8c\x13\xdd\x60\x0e\xdd\xcf\xcf\x35\xe7\xab\x6b\x3c\
+\xdc\x8f\x57\x83\x83\x86\x1d\x53\x4f\x5f\x5e\xbf\xa2\xde\xeb\x2e\
+\x97\x7b\x57\x68\xa7\xed\x4c\x1c\x2d\x01\x4a\x6d\x0d\xaf\x6a\x95\
+\x84\xe4\x00\x4f\x03\x90\x9e\x6b\x92\x93\x19\xbb\x73\xef\x5b\xe4\
+\xb4\x4b\x81\x28\x54\x84\x2f\xca\x5a\x52\x07\x27\x38\xe7\x68\xc9\
+\xf9\x27\xd6\xbb\x88\xa3\xc5\x5e\xe2\x46\x48\xda\x77\x77\xae\x48\
+\xeb\x35\x85\x7a\x63\x5f\xcf\x43\xa9\x57\x85\x31\x2a\x53\x4a\x24\
+\xa8\x39\x9c\x73\xcf\xb9\xdc\x08\xf4\xe7\xe2\xb9\xd8\x98\x38\xbc\
+\xcb\x99\xd3\xe8\xea\x97\x83\xa2\xde\xda\xaf\xa9\x24\xd0\xf2\x57\
+\xf6\x19\x31\x5d\x59\x40\x12\xfc\x45\x21\x44\xe4\x6e\x27\xca\xaf\
+\x9c\x72\x40\xc7\x35\x65\xe9\xd2\x0b\x45\x09\x75\xc5\xa3\x76\x7d\
+\x89\x1f\xe5\x55\x26\x88\x9c\xa9\x53\xdc\x5e\xc6\xc2\x6e\x4d\x26\
+\x42\x80\x56\xe5\xf8\xa0\x04\x3b\xdf\xfb\xd9\xe2\xad\x9b\x11\x2d\
+\x24\x2d\x40\x05\x27\x29\x20\x7f\x64\xfb\xfb\xd6\x5a\x6b\xac\x18\
+\x84\x49\xe3\x24\x36\x85\x25\x38\xca\x8e\x4e\x07\x39\xcd\x28\x8c\
+\x0a\xdb\x4a\x82\x46\x3b\x8f\xce\x91\xc5\xe4\x11\xb9\x58\x4e\x55\
+\xbb\x07\x38\x22\x9c\x60\x92\x12\x12\xb4\x8e\x3d\xfb\x1c\xd6\xb4\
+\x60\xbd\x85\xab\x05\xa6\x14\xb3\xf7\x12\x33\x4c\xec\xba\x23\x95\
+\xcd\x77\xcf\x25\xc2\x43\x69\xfe\xc0\xc7\x6f\x83\xf3\x4f\xb2\xd1\
+\xba\x1a\x53\xc9\x0a\x50\xdc\x3d\xc5\x31\xbe\x94\xf8\x86\x43\xdb\
+\x90\x9c\x04\xa9\x27\xdf\xd0\x7d\x39\xef\x53\x2d\xef\xd8\x10\x77\
+\x42\x37\x5c\x7e\x79\x4b\x89\x3b\x02\xd3\xc7\xb9\x1e\xf5\x93\x36\
+\xf4\x85\x79\x80\xd8\x57\xc9\x2a\xf5\x1d\xbe\xbc\xd4\x57\x5d\xf5\
+\x33\x4f\x69\x47\x4b\x32\x64\xa5\x52\xd6\x8f\x2a\x00\xe7\x1c\xfa\
+\x0f\x4a\x68\xd2\x57\x4d\x5f\xad\xae\xf3\x6d\x50\xa3\xaa\xd0\x98\
+\xad\x36\xf2\x95\x35\xa5\x00\x42\xf3\xb4\xa1\x39\x1e\xd4\x3a\xb0\
+\x86\xb2\x7a\xf9\x9d\x28\x60\x2b\x3a\x5c\x59\x75\x61\xda\xcb\x2d\
+\x86\xa0\x21\xc2\xd1\x90\xd2\x55\x8c\x95\x77\xcf\x34\xa9\x95\xc1\
+\x53\xa1\x96\xe5\x0e\x33\xc6\x7b\xfe\x35\x03\xb2\x74\xc3\x5c\xc9\
+\xba\xca\x1a\x83\x5a\x2e\x2a\x07\xf5\x62\x13\x0d\xe1\xc4\x9f\x5e\
+\x47\x1f\x4e\x69\xce\xd1\xd2\xbd\x47\xfa\xee\x6b\x12\x75\xb3\x8b\
+\x86\xd8\x49\x8e\x44\x54\x95\x9c\xe7\x3b\xfb\x0e\x38\xed\x5a\x21\
+\x59\x3d\x14\x5f\xaf\x88\xba\x94\xb0\x91\xbd\xeb\xa7\x65\xd8\xfe\
+\xc4\x95\xa6\x7c\x55\x9f\x09\xe6\xd6\x1b\x00\x10\x97\x33\xc6\x73\
+\x9a\x45\x71\x88\xda\x9d\x54\x97\xd7\x1d\x21\x03\x81\xb8\xa4\x1f\
+\xfc\xe9\x9e\x67\x4c\x75\x5f\xeb\x76\x58\x8d\xa8\x60\x3b\x15\x6d\
+\xab\xc5\x71\xd8\xca\x4b\x89\xc7\x60\x36\xab\x9c\xd6\xa9\x9d\x20\
+\xbf\xa6\x4c\x7f\xb3\x6a\xb4\x96\x94\xb2\x97\x52\x5a\x51\x50\x49\
+\x07\xee\xe4\x91\xdf\xde\x87\x34\xd7\xba\xfe\x5f\x92\xb1\xf6\x44\
+\xee\xeb\x2f\x93\x17\x07\x6d\xe1\x94\x25\xb7\x9b\x2d\x9e\x30\x55\
+\xc2\xb8\xf7\xf7\xf9\xa6\xf7\xed\x8c\x78\x61\xe8\xea\x0a\x03\x27\
+\x28\x19\x1c\xf7\xff\x00\x3c\xd3\x64\xfe\x9a\xeb\xe7\x6f\x2f\xc7\
+\x81\xa9\x5a\x54\x36\x9a\x07\xc6\x75\x94\xf2\xb2\x78\x4e\xd0\x3b\
+\x62\xaa\x88\x7d\x40\xbc\x58\xef\x8e\x5a\xaf\xa9\x11\xa5\xb6\xe1\
+\x48\x09\x27\x6a\xfb\xe3\x8f\x91\x59\xe5\x56\x12\x79\x6c\xd3\xef\
+\x47\x46\x86\x06\x38\x84\xde\x1e\xa2\x93\xec\xf1\xf1\xb1\x77\xd8\
+\xe5\xba\xdb\xe9\x43\x99\xc0\x59\x0a\xf6\xed\x53\x0b\x73\x9e\x2b\
+\x67\x1d\xfd\x88\xee\x2a\x07\xa4\x5d\x5d\xee\x3a\x1e\x4a\x02\x14\
+\x51\xe2\x2d\x03\xb6\x3d\xbf\x1a\x96\xe9\x54\x38\xea\xc9\x42\x89\
+\xf0\xcf\x23\x18\xdc\x08\xff\x00\x0a\xa4\x1b\x5a\x33\x97\x88\x86\
+\x59\x34\xf7\x42\xa9\x6a\x48\x56\xd5\x70\x73\x9c\x0a\x85\xea\xb9\
+\xa0\x45\x74\xab\x01\x09\x49\x25\x47\xd3\x15\x2f\xbc\x2d\xa4\x29\
+\xd2\xb4\xe0\xa4\x77\x57\x63\x9a\xac\x7a\x93\x34\x43\xd3\x13\x9d\
+\x5a\xc2\x56\x52\x4b\x64\x9f\x55\x70\x08\xf4\x3c\x9a\x4e\x22\x4e\
+\xd6\x2b\x45\x5e\x48\xab\xba\x6c\xfc\x4b\x9d\xfd\x53\xfc\x35\x96\
+\xa2\x25\xdb\xa3\x8f\xa9\x39\x49\x58\xdd\x8f\x4e\x78\xc8\xfc\x2b\
+\x9b\x2d\xab\x4b\x97\xf5\xaf\x79\xfd\xa3\x8a\x70\x1e\xdd\xce\x45\
+\x5c\x1a\xab\x57\xc2\xb6\x69\x39\xda\x77\x4a\x2f\xed\x17\xcb\x8c\
+\x77\xff\x00\x59\xba\xda\xbc\x36\x58\x64\x27\x7b\xbb\x72\x7e\xf9\
+\x48\xc6\xd1\xdb\xd3\x92\x2a\x97\x69\x6f\xb7\xe1\xc9\x79\x95\xe1\
+\x01\x28\x0a\x50\xc2\x7b\x70\x3f\x2e\x6b\x6e\x06\x8b\x50\x93\xed\
+\x27\xa4\x2b\xc5\xd5\x82\xff\x00\x5d\xce\xab\xd1\x3a\xa3\xec\xf6\
+\x98\x2f\x3a\xb0\x15\x25\xa4\xed\xc1\xfb\xd8\x1c\x91\x52\xc9\xfa\
+\xb5\x94\x4e\xb2\x41\x65\x64\xc8\x9d\x28\x20\x25\x3d\xc3\x69\xe5\
+\x4b\x23\xdb\xd2\xb9\x3e\xcd\xad\x1e\xb7\x5b\x7c\x36\xd2\x65\xcd\
+\x07\x6a\x1c\x5e\x4a\x50\x8c\xf0\x94\x8f\x41\x9c\xf1\xc7\x3e\xf5\
+\x62\xf4\x9e\xe1\x24\xdc\x57\x74\x92\x97\x6e\x37\xd9\x3e\x44\x04\
+\x72\x23\xb6\x0f\x61\xe8\x9f\xc6\xb7\x55\xc5\x55\xa5\x45\x41\x7a\
+\xfc\x1e\x62\x78\x05\x79\x54\xde\x28\xeb\xeb\x54\xe5\x3e\x86\xd8\
+\x4a\xce\x4e\x33\xcf\x02\xa6\x76\xf4\x06\x9a\x4e\x72\x4e\x39\x26\
+\xaa\xbe\x9d\x6f\x0e\x0f\x1d\xd4\xad\xce\xe7\x6f\x61\xf4\xab\x3e\
+\x2b\xa9\xc6\x49\xf4\x1d\xf9\xae\xec\x33\x4a\x8c\x6e\x72\xe9\x68\
+\xf5\x16\x49\x92\x96\x5a\x0a\x3c\x9a\x29\x39\x47\xda\x9c\x39\x00\
+\xa5\x23\x91\xef\x45\x11\x8d\x34\xba\xc3\xdc\xaa\x37\x78\x95\x3d\
+\xa1\xc5\x39\x68\x82\x33\x84\xa0\x2f\x1f\xfe\xe2\xa9\x44\x8d\xbe\
+\x63\xb7\x1c\x7d\x4f\xfa\xef\x49\x74\xf0\x26\xcf\x18\x0e\xf8\x73\
+\xd3\xfe\x31\x54\xaa\x50\xdc\x84\x8c\xe4\x9f\xe3\x5a\xa1\xee\xa3\
+\x0a\xd8\x90\x69\x48\xa1\xb8\xc5\xcd\x99\x2a\xef\x4e\xef\xb9\xe1\
+\x34\xa5\x9c\x80\x3b\x7c\xd6\xab\x33\x61\x10\x90\x12\x79\x29\xac\
+\x24\x61\xc9\x29\x63\x90\x3b\x9e\x3b\x55\x89\x39\xeb\x52\x3d\x6f\
+\x93\xa3\x75\x5d\xc6\xed\xe0\x0d\x46\x35\x1f\x84\x87\x16\x47\x8e\
+\x94\xf8\xe8\x4a\x5b\x49\xfb\xde\x1f\x81\x9c\x0e\xc4\x66\xa6\xb7\
+\x88\xf6\x59\xfa\x8b\xa8\xee\x6a\x94\xc7\x5b\xd0\x22\x34\x61\x2a\
+\x47\x78\xd1\xfc\x00\xa0\xb6\x89\xfb\xa4\xb9\x92\x54\x9e\x77\x00\
+\x3d\x05\x48\xf5\x2f\x4d\xdb\xd4\x17\x55\x29\xf9\xea\x79\xa5\x3c\
+\x97\x1c\x69\x31\x59\x42\xd6\x10\xa0\xa4\xb6\x5d\x08\xdc\x50\x14\
+\x91\xc6\x73\xc7\x7a\x95\x4b\xd2\xd1\x66\xb8\xd4\x9b\xdd\xaa\x0c\
+\xa7\x18\xe5\xa7\x1e\x8e\x95\xa9\xbf\xf9\x24\x8e\x3b\xfa\x56\x7c\
+\xba\xea\x51\x52\x93\xd6\xc5\x6f\xa1\x61\xb3\x73\xea\x56\x86\x95\
+\xa9\x61\x44\x7e\x63\xba\x4d\x4e\xc9\x54\x96\x92\x54\xb7\x53\xe1\
+\x61\x4a\xc8\xe5\x63\x93\xf1\xcd\x48\xfa\xcf\x74\x87\x2a\xf5\x66\
+\xb3\xb9\x68\xb7\xdc\x9f\xb8\x4a\x52\x23\xfd\xbf\x1f\x67\x65\x48\
+\x6d\x4a\x2b\x3c\x1f\x36\x32\x12\x07\x24\x9e\xe2\xa4\x37\xb4\xda\
+\x27\xa1\x86\xe4\x5a\x60\x4c\x72\x32\x8a\xd9\x72\x44\x74\x38\x5a\
+\x51\xee\x50\x54\x0e\xd3\xf2\x29\x04\xfb\x6c\x0b\xa4\x6f\x06\xe9\
+\x06\x2c\xd6\x77\x6e\xf0\xe4\x34\x97\x13\xb8\x76\x38\x50\x23\x35\
+\x31\xa4\xd4\x9c\x86\x37\x68\x64\x44\x2f\xa1\xd2\x25\x33\xa7\x2e\
+\xec\xb4\xeb\x4a\x8f\x1a\xf9\x31\x96\x10\xca\x8f\x82\x86\xc2\xf2\
+\x12\xdf\xf7\x39\xe3\xe0\xd4\x66\xe7\x19\xcb\x8c\x2b\xb7\x4e\xa2\
+\xa9\xc4\x3d\x6d\xb8\xcf\xbc\x32\x1b\x27\x29\x6f\xc1\x0e\xc7\xfc\
+\x3c\x69\x23\x8f\x5f\x0f\xeb\x57\x0c\x68\x71\x62\x21\x48\x8b\x19\
+\x98\xe9\x70\x82\xb4\xb6\xd8\x48\x2a\xc0\x19\x38\xf8\x00\x67\xe0\
+\x52\xad\x3b\x6a\xb7\xa6\x74\x8b\x92\x61\xc7\x13\x1d\x40\x6d\xc9\
+\x01\xa4\xf8\x8a\x48\xec\x92\xae\xe4\x0f\x6a\xb4\xa9\xf5\x52\x65\
+\x14\x2f\x64\x51\xfa\xda\xe4\x8d\x5b\xa0\x75\x76\xae\x6c\xe6\x3c\
+\xe3\x6b\x84\xc1\x07\x90\x84\x38\xca\xd6\x07\xb7\xed\x5e\x70\x7d\
+\x51\x4b\xb5\x94\x25\x69\xed\x51\xaa\xa2\xe9\x88\xe8\x80\x4e\x8c\
+\x12\x7c\x28\xa8\xd8\x0b\x89\x79\x68\xf1\x00\x1f\xbc\x10\x3b\xf7\
+\xe2\xad\x56\x74\xed\x8d\x98\x8e\x5a\x51\x68\x80\x9b\x76\xed\xc6\
+\x20\x8c\x8f\x07\x21\x41\x40\xec\xc6\xdc\xee\x00\xf6\xef\xcd\x2f\
+\x4c\x18\x5f\xac\x0d\xc0\xc4\x8f\xf6\xc2\xc8\x64\xbf\xe1\x8f\x10\
+\xb6\x0e\x42\x37\x63\x3b\x72\x49\xc6\x71\x93\x51\xc2\x2a\xe1\x72\
+\x17\xa4\x9a\xb2\xc2\xd7\x7a\x05\x8d\x26\x88\xcc\xa6\x6d\xb2\x51\
+\xb8\x88\xa7\x1f\x68\x8e\x1a\x4a\x9b\x71\xdc\x7d\xe5\x78\xa4\x61\
+\x4a\xe4\x95\x2a\xa1\x1a\x11\xb9\x73\x6c\x9d\x32\xb4\xbb\x0e\xd9\
+\x36\x03\xb6\xd9\xeb\x6a\x3d\xcd\x65\x31\xde\x90\x1d\xc7\x20\x25\
+\x5b\x96\x94\x12\x52\x08\xf5\x26\xae\xcb\x45\xaa\xd9\x68\x92\xec\
+\xab\x55\xb2\x14\x27\x9e\x20\xba\xa8\xec\x25\xb2\xe1\xfe\xf1\x03\
+\x9f\xc6\x97\xc7\xb3\x69\xfb\x85\xa9\xbb\x13\xd6\x0b\x59\xb7\xb5\
+\xfd\x54\x43\x11\x05\x94\x77\xec\x8c\x6d\x1d\xcf\x61\xea\x69\x33\
+\xa2\xe2\xdc\xb9\x0e\x8c\x73\x59\x7a\xe5\xf6\x1b\xfa\x63\x6a\x9d\
+\x60\xd0\xf1\x2d\x17\x29\x91\xa5\xb9\x1c\xba\x96\xdc\x8e\xe2\x96\
+\x80\xd1\x71\x45\x08\x0a\x57\x27\x68\x21\x3f\xf5\x6a\xa0\xd0\x4d\
+\xb5\x22\xc3\xd3\x28\x17\x64\xa1\xdb\x1c\xbb\x8d\xdb\xc7\x65\xee\
+\x59\x75\xf4\xba\xe9\x61\x2b\x1d\x8f\x3b\xc8\x07\x82\x40\xae\x88\
+\x8b\xa7\xa3\x43\x88\x86\x22\x34\xd4\x76\x1b\xe1\xb6\x9a\x40\x4a\
+\x12\x3e\x00\xe0\x73\x49\x17\xa7\xec\x66\xc6\x6c\xa6\xcd\x6e\xfd\
+\x5c\x92\x4f\xd9\x3e\xcc\x8f\x07\x24\x95\x13\xb3\x1b\x79\x24\x93\
+\xc7\x72\x4d\x2f\x34\x5f\xba\xc7\xcb\x0f\x2d\x2f\xa5\xbf\x05\x0b\
+\xa9\x63\x43\x3a\x37\x56\xc4\x61\x98\xee\xd8\x60\xeb\x08\x88\xb7\
+\x82\x90\xa6\xd8\xca\xd9\xf1\x90\xde\x78\x4a\x02\x94\xa1\x81\xc0\
+\xc9\x15\x7a\xa6\x14\x48\x28\x6d\x88\x2c\x31\x1a\x3a\x01\x4a\x1a\
+\x65\x01\x28\x4f\x3c\x80\x07\x03\x9a\xdb\x1e\xd1\x69\x55\x98\xd9\
+\xd5\x6c\x82\x6d\xc5\x3b\x0c\x42\xc2\x3c\x12\x33\x9c\x6c\xc6\xdc\
+\x67\xe2\xb2\x72\x0c\x48\x10\x99\x89\x06\x2b\x11\x23\x34\x36\xb6\
+\xd3\x2d\x84\x21\x03\xd8\x24\x70\x2a\xd4\xfa\xb3\x21\x52\xb2\xb9\
+\x8e\xd4\x91\x4e\x56\x73\x84\x28\x7a\x53\x7a\x53\xe5\x19\xa7\x1b\
+\x42\x78\x55\x4d\x67\xd4\x63\xa8\xae\xba\x15\xca\x21\x2d\x13\xfc\
+\x6b\x7c\x70\x7c\x04\xe7\xeb\x9a\x4d\x30\xf9\x42\x7d\xcd\x2b\x4a\
+\x7f\x60\x12\x38\xe2\xb1\x4b\xdd\x46\xd8\xfb\xcc\x88\xeb\x46\xae\
+\xd3\x11\xe1\x5a\xe4\x47\x87\xce\x16\xfb\xa8\x2b\xda\x3f\xba\x3d\
+\xfe\xb5\x51\xf5\x36\xd8\xf7\xea\x77\x23\xae\x4c\xa9\xea\xda\x77\
+\x2b\x21\x0a\x5f\xc0\x20\x60\x55\xed\x75\x64\xae\x31\x6d\x23\x19\
+\xe4\x9a\x84\x6a\x6b\x62\x1c\x86\xa1\xb3\x3c\x56\xc8\xae\x25\x2c\
+\xa8\xc3\x56\x0f\x3d\xcf\x9f\x7d\x44\xb4\x48\x62\xe0\xf3\xe6\xd9\
+\x2e\x3a\x4a\xb1\x87\xdd\x4b\x8a\x19\xf9\x00\x1f\x4a\x85\x38\x95\
+\x15\x01\xe7\x42\xc7\x21\x47\x23\x9f\xf5\xeb\x5d\x45\xd6\x2b\x3b\
+\xa9\x87\x39\x29\x04\xe5\x95\x29\x3c\x76\x29\x1b\x87\xf2\xae\x5f\
+\x59\x90\xb7\x08\x5b\x8b\x21\x4a\xc0\xca\xb8\x15\xcc\x95\x19\x52\
+\x76\x91\xd6\xa7\x5d\x56\x85\xd2\xd5\x16\x2e\x87\xeb\xc7\x54\xb4\
+\x7a\x5a\x8f\x13\x50\xb9\x70\x88\xd8\xc2\x63\x5c\xd0\x24\x20\x0f\
+\x60\xa5\x79\xc0\xf8\x0a\x15\x2d\xbf\x75\xe9\x7d\x44\x81\x1e\xd1\
+\xa9\xf4\xfb\x11\x2e\x09\x75\x02\x34\xd8\x6e\xa8\x21\x27\x70\xdd\
+\xb9\x0a\xc9\xec\x38\xc1\xaa\x42\x42\x1a\xd8\x95\x36\xa4\x9e\x3b\
+\x81\xdc\xe3\xd6\x93\xef\x53\x4b\x0a\x6d\x5e\x1a\xb7\x02\x0f\xaa\
+\x48\xe4\x7f\x1a\x44\xf0\xf4\xea\x2d\xac\x69\x86\x2a\xa5\x29\xa7\
+\x7b\xfa\xed\x3a\x67\xa6\x45\x2f\x6a\x47\xd8\x43\xe8\x41\x8d\xbc\
+\x84\xf0\x0b\x4e\x28\x85\x67\x8e\x30\xa3\x93\xb7\xd3\x15\x7f\x59\
+\x10\x50\xd8\x04\x27\x05\x1b\xbb\xf2\xa5\x1a\xe5\x2e\x83\xc8\x4c\
+\xfb\xf1\xb8\xc8\x79\x6d\x36\xb4\x12\xf3\x69\xe4\x15\x8e\x0a\x86\
+\x7d\x87\x38\xf8\xae\xa5\xd3\x24\x22\x33\x7e\x33\xbb\xbc\x4f\x38\
+\xcf\xb6\x3f\xca\xb8\xb2\x86\x4a\xb9\x4e\xd5\x49\xf1\x20\xa4\xb6\
+\x25\x50\x0a\xca\x96\x16\x52\xb5\x63\x00\x03\xda\x97\x46\x52\x10\
+\xb1\xfb\x5d\xe1\x7c\xe0\xfc\x7b\x53\x5c\x22\xd2\xdd\x29\x28\x29\
+\x46\xd0\x06\x13\x80\x41\xe7\x03\xf9\xd2\x97\x4a\x9b\x53\x7e\x1b\
+\x5b\x92\xa3\xb4\x2f\x3c\x53\x91\x85\xad\x49\x2b\x23\xc4\x8c\x53\
+\xc8\x23\x04\x53\x25\xf9\x97\x14\xd1\x4b\x27\x6a\xd2\xad\xe8\x1e\
+\x83\xde\x97\xdb\x24\x00\xda\x71\xb4\x92\x39\xc1\xfb\xd5\xb6\x72\
+\x42\xd4\xac\xa7\xb6\x3e\xa6\x99\x6b\xab\x95\x83\x71\x91\x46\x4e\
+\xe9\xb5\x82\xdd\xaf\xef\x9a\xbb\x53\xb5\x3a\xe9\x0e\xe7\x19\x5e\
+\x24\x65\xb4\x1c\x4b\x3c\x64\x84\x6d\xe5\x3f\x74\x04\xe3\xb6\x69\
+\xce\x77\xe9\x2d\xd3\xb8\x71\xac\x1f\xab\x2d\xb7\x6b\x95\xd5\x6c\
+\x84\xcd\x86\xcc\x52\x87\xa0\x36\x13\x85\x21\xd2\xb0\x01\x21\x40\
+\x70\x32\x3b\x9c\xf2\x33\x69\x49\x6d\x0e\xb4\xa6\xdc\x47\x88\x95\
+\x27\x18\x20\x62\xab\xed\x53\xd3\xf6\x1d\x92\x6e\x16\xc0\x84\xaf\
+\xb1\x49\x47\x21\x3e\xa9\x04\x73\x8f\x8a\x74\x54\x5d\xf9\x5c\xdf\
+\x4e\x34\x71\x35\x23\xc7\x93\x49\x7c\xbf\x17\x2b\xab\x87\x5e\x3a\
+\xd4\xbb\xbc\xfb\xed\x93\x42\xda\xcd\x8e\x42\x52\xd4\x18\x92\x9b\
+\x5b\x8e\xb5\x8c\xe1\x64\xa0\xa4\x92\xac\xf2\x31\x8e\x06\x3b\x12\
+\x61\x8c\x7e\x92\xdd\x75\xd2\xb2\xa7\x4e\xbf\xd9\x2d\xf3\x1a\x98\
+\x50\x19\x44\xcb\x72\xda\x6e\x36\xdc\xf9\x5b\xd8\x52\x48\x39\xe7\
+\x71\x51\xe0\x73\xef\x74\x5b\x6c\x17\x96\x96\xd2\x90\xeb\xe8\x2a\
+\x07\x87\x8e\x43\x7c\xe0\x10\x78\xc5\x2e\x9f\x66\xbb\x86\xca\x27\
+\xc0\xb7\xdd\x5b\x20\x28\x87\xd9\x2a\x42\xbb\xfa\x03\xc6\x31\x4f\
+\x8d\x24\xb5\x5e\xbc\xcd\x18\x8c\x0e\x0d\xbc\xb0\xd1\xf8\xaf\xaa\
+\xfa\x94\x13\x1f\xa5\x47\x5a\x2e\x17\xf6\x6f\x31\x2d\x16\x43\x16\
+\x33\x2b\x4a\xa1\x22\x0b\x85\x85\xa5\x58\xf3\xac\xef\xdf\x91\x8e\
+\x08\x50\x1c\x9e\x0e\x6b\x46\xbd\xfd\x21\xfa\xb9\xaf\xf4\xd3\xba\
+\x61\x16\x9b\x55\xac\xc9\x79\xa5\xfd\xa2\xd8\x97\xdb\x92\x14\x85\
+\x85\xa4\x21\x45\xc3\xb7\xcc\x91\xc8\x19\xab\xd9\x36\x7b\x92\x98\
+\x71\xa8\xac\xc1\xb4\x43\x3c\x2d\xa8\x51\x40\x04\x1f\x7d\xd9\xa6\
+\xf7\xf4\xc4\x25\x02\x5b\x33\x14\xe2\x70\x12\x1b\x09\x4e\x4f\xb8\
+\x20\x70\x6a\x5c\x5d\xbd\x7d\xcb\x51\xe8\xbc\x25\xba\xed\xdf\xb9\
+\xaf\xb6\x9f\x32\xb4\xd1\x9f\xa5\x06\xba\xd3\xd3\x05\x83\x5a\xdb\
+\x5f\xb9\xcc\x5b\x69\x6d\xd5\xb4\xca\x03\xe1\x40\x79\x54\x02\x78\
+\x59\x23\x04\xf6\xe6\xa5\xd3\xe0\x5a\xfa\x99\x7a\x87\x76\x4d\x96\
+\x7c\x6c\x38\x95\x7e\xdd\x92\xca\xca\x10\x90\x84\xa5\x5e\xc5\x58\
+\x2a\xf8\xc8\xa9\x1e\x95\xd1\xad\xb7\x72\x33\x1f\x84\xd2\x16\x95\
+\x79\x5f\x71\x01\x4f\x2d\x3f\xd9\x2a\x3e\x61\xef\xed\x53\xf8\xad\
+\xa1\x0d\x25\x96\x5b\x28\x1d\xb7\x7a\x8c\x7a\xd6\x4c\xb0\x84\xae\
+\xbe\xeb\xe1\xd9\xfc\x04\xb8\x78\x4a\xad\xd3\x77\x7c\x9a\xd3\xe7\
+\x6d\xdf\xcb\x53\x56\x9c\xb4\xa6\xd0\x5c\x43\x28\xfb\x36\xe6\xc3\
+\x6d\xa0\x2b\x77\x03\xb7\x3e\xf5\x2a\xb3\x30\xdc\x56\xde\x53\x79\
+\x4a\x49\xce\x7e\x69\x14\x64\xee\x71\x03\x68\x0e\x01\x8e\x7b\x1f\
+\x6a\x5f\x3d\xd4\xb5\x04\x10\xa1\x85\x63\x27\x3e\x94\xb7\x6b\xdc\
+\xe5\xd6\xa9\x29\xbd\x77\x64\x67\x54\x3e\xa7\x0e\x12\x40\x2e\x2c\
+\x20\x7d\x3b\xf0\x6a\xa3\xeb\xec\xc8\xc8\xd2\xef\xc4\x53\x85\x0d\
+\x17\x1a\x42\x54\x9e\x4f\x0a\xdc\x4f\xc0\xc0\x3f\x95\x59\x12\x65\
+\xa5\xc9\x6e\x28\x20\x29\xb6\x12\xa2\x94\xf7\xc9\xf7\x1f\x87\xa5\
+\x50\x5f\xa4\xad\xd7\xc2\x8d\x11\x90\xea\x52\x14\xf9\x52\xd4\x39\
+\x07\x00\x0e\xdf\x88\x35\x86\x5d\x79\xa4\xb9\xb3\x4d\x15\x95\xdd\
+\xf2\x29\x3d\x51\x01\xb5\x6a\x2b\xbb\x61\x84\x15\xc9\x96\x0a\x48\
+\x40\x3e\x12\x42\xf2\xad\xbe\xd9\x38\xc7\xba\x6a\x51\x1a\xde\xe4\
+\xad\x04\x34\x9c\x87\x12\xa7\xe7\x4a\x52\xe1\xf8\x80\x00\xb9\x03\
+\x09\x46\xd5\xfa\x03\x94\xa7\x9e\xc4\x1c\xf0\x6a\x2e\xdc\xa6\xe4\
+\x33\x35\xf4\xa5\x68\x2e\xb9\x90\x47\x00\x1d\xaa\xc2\x7f\x3d\xbf\
+\x95\x48\x27\xdc\x1c\x77\xf5\x54\x64\x04\xb9\x1d\x69\x42\xdb\xf7\
+\x4a\x82\x48\x2a\x1f\x50\x8e\x7e\x41\xae\x83\x8d\x49\xa4\xbf\xd6\
+\xc2\xe6\xe9\x53\x4d\xda\xf7\x4f\xee\x57\x96\xc9\x42\xd5\x39\xf8\
+\xd7\x1b\x72\x64\x01\x96\x9d\x6d\x44\xa1\xc4\x28\x1f\xdd\x50\xec\
+\x41\xfa\x8f\x71\x56\x7d\x87\xa8\x71\xd9\x65\x98\xd1\x6e\x0b\x43\
+\x28\x40\x4e\xc7\xe1\xa5\x05\x27\xea\xd9\x19\xfa\xe2\xa3\xd7\x1d\
+\x2e\xbb\xea\x95\x24\x2c\xb5\x39\x5d\xd4\xae\xce\x9f\x93\xef\xf3\
+\xeb\xeb\x5a\x6c\x5a\x1a\xe6\x66\x04\xce\x2b\x8a\xd8\xfd\xe5\x23\
+\x3f\x85\x6d\xc5\xd2\xa7\x17\x9e\x5b\x9c\x9c\x3c\x95\x78\x70\xe5\
+\x6b\x17\xde\x84\xea\x4d\xbe\x1b\x6a\x91\x26\x78\x53\x68\x1c\x9d\
+\x87\xf8\x0e\x6a\xcc\xb3\xf5\x6a\xcb\x37\xc3\x69\x13\x52\xb7\x1c\
+\xc0\x65\x86\x92\x5c\x75\x7e\xde\x54\xe7\x68\xf9\x56\x2a\x91\xd1\
+\xdd\x3f\xd3\x72\x5c\x4c\x6b\x83\xd2\x66\x36\x4f\xdc\x6b\xf6\x40\
+\x9f\x92\x39\x35\xd0\x5a\x1f\x4e\x59\x2c\x50\x50\xcd\x92\xcf\x12\
+\x0a\x55\x8c\xa9\xb4\x0d\xea\xfa\xa8\xf2\x7f\x3a\xac\x31\x78\xa7\
+\x68\xd3\x8b\x39\x18\xaa\x58\x58\x36\xa1\x26\xc9\xf6\x97\x93\x2a\
+\x4c\x60\xf3\xad\x96\xc2\xb9\x09\x3d\xe8\xa7\x1b\x5b\x78\x8e\xca\
+\x07\x07\xf9\xd1\x5d\xbc\xce\xcb\x3e\xe2\xe9\xc1\xa8\x95\x8d\x91\
+\xb0\xd5\x92\x13\x84\x67\x21\xc3\xff\x00\xf7\x15\x5b\xa4\xa0\xee\
+\x40\xe0\x80\x72\x69\x7c\x08\xa5\x5a\x1e\xdb\x29\x00\x12\x9f\x13\
+\x38\x1f\xf1\x8a\xa6\xf7\x54\x56\x94\xac\x80\x30\x73\xc0\xad\xd4\
+\xdd\xe0\x8c\x0d\x58\x99\xdb\x49\x4c\x26\xc9\x27\x84\xf1\xc7\x15\
+\xaa\x18\xdd\x31\xc7\xb3\x9c\x71\xc8\xe4\x57\x96\x97\x02\xed\xc9\
+\x3b\x8e\x40\xe4\x66\x8b\x77\x09\x77\x18\x3e\x6c\x7c\xd5\x80\x8a\
+\x33\xd4\x9b\x85\xb2\xdf\xa8\x35\x08\xd3\x08\x95\x6b\xb1\x5d\xff\
+\x00\x56\xcb\x58\x9b\xb5\xe5\xa8\xb8\x94\x05\x34\x8d\x98\x57\xf5\
+\x8d\x93\xb9\x49\xee\x7d\xb3\x4f\x57\xde\xa2\x49\x82\xbd\x4b\x6d\
+\xd4\x76\x96\x20\x3f\x67\xb6\xa2\xe4\x55\x12\x59\x7d\x0e\xb4\xbd\
+\xc3\x6e\x4a\x11\x85\x85\x27\x6f\x6c\x1c\x83\xc5\x37\xbd\xd3\x8b\
+\xdc\xae\x9b\xeb\x2b\x23\x72\xad\xc9\x95\x7e\xd4\x29\xba\x45\x52\
+\x9c\x58\x42\x1a\x0e\xc7\x56\xd5\x9d\xb9\x0a\xc3\x2a\xe0\x02\x39\
+\x1c\xf7\xc2\x8d\x5d\xa1\xdf\xbe\x6a\x2d\x53\x3e\x64\xa6\x5b\xb7\
+\x5e\x6c\x4d\xdb\x1b\xd8\x49\x75\xb7\x12\xb5\xab\x79\x49\x18\xc0\
+\xdc\x08\xe7\x9c\x7a\x57\x36\xf2\x95\x4c\xdd\x86\x9f\xdd\x85\x3b\
+\x76\xaf\xbf\xe0\x8d\x5a\xb5\x35\xc0\xdf\xad\x96\x9b\xe5\x99\xb8\
+\x2b\xbb\x30\xb7\xa1\xa9\x99\x5e\x36\x0a\x00\x52\x9b\x73\x28\x4e\
+\x15\xb4\xe7\x23\x20\xf3\xcf\x19\xa6\xfb\x37\x51\x26\x49\xd1\xcc\
+\x6a\x69\x36\x16\xe3\xc7\x9a\xa6\x23\xc0\x6c\xcc\x1b\xe4\x48\x71\
+\x7b\x08\x27\x6e\x10\x80\xac\xf9\x8e\x4e\x01\x38\xf4\xa7\x96\x34\
+\x5e\xa5\x93\x7f\xb3\x5e\xaf\x92\x2d\x89\x4d\x9a\x3b\x88\x60\x44\
+\x52\xd4\x5f\x71\xc4\x04\x17\x14\x14\x91\xb0\x6d\x07\xca\x37\x7d\
+\xe3\xcd\x31\x40\xe9\xc5\xd9\x7d\x2b\xb4\x69\x79\x2e\xc1\x54\xfb\
+\x5b\xe8\x92\xda\xd4\x92\xe4\x75\xad\x0e\x15\x84\xa8\x10\x0a\x90\
+\x41\x20\xf1\xeb\xeb\xeb\xba\xf2\x7b\x18\xda\x91\x27\xd2\xba\x99\
+\x77\x69\xd7\x6b\x5c\xb8\xf1\xe3\xcf\xb6\x38\xda\x5d\x4c\x79\x1e\
+\x33\x4e\x21\xc4\xee\x42\xd2\xad\xa9\x3c\xf2\x30\x47\x04\x1e\xf4\
+\xcd\x17\x57\x3d\xa5\xee\x1d\x43\xb9\x4d\x82\xf3\xdf\xaa\x53\x6f\
+\x77\xc3\x4c\xd5\x2d\x0b\x69\xcd\xc9\x1b\x10\xa4\x80\xda\xb6\xf2\
+\x40\xc8\x27\xd7\xd6\xa5\xda\x27\x4d\xbd\x00\x48\x76\x65\x96\xc9\
+\x6c\x52\xca\x70\x8b\x6a\xb7\x05\x81\x9e\x54\x7c\x34\x76\xc9\xc7\
+\x1c\x64\xd4\x7f\x59\xe8\x0b\xcd\xe7\xfa\x7e\x88\x4f\xc0\x48\xd4\
+\x31\xa0\x35\x13\xc5\x5a\xc7\x86\x58\xce\xf2\xe6\x12\x70\x0e\x78\
+\xc6\x7e\x71\x54\xa8\xdb\x8e\x85\xad\x24\x93\x5e\xb4\x62\xa7\xf5\
+\x45\xe9\x8d\x51\x36\xc7\x70\xb2\x43\x89\x70\xfd\x54\x6e\x71\x76\
+\x4c\x53\xad\x94\x85\x6c\x28\x70\xf8\x69\x29\x50\x51\x1d\x81\x18\
+\x3c\x76\xa6\x1d\x25\xad\xef\x4d\xe8\x3d\x39\x36\xee\xcc\x19\x97\
+\x1b\xd3\x88\x66\x17\xfb\x41\x6c\x2c\x90\xa5\x2d\x6e\x9d\x98\x42\
+\x52\x13\xfb\xa1\x5e\x82\xa7\x57\x0d\x2b\x2e\xe1\xd4\x8f\xe9\x1a\
+\xde\x8e\x88\x46\xc0\xe5\xb0\xa3\x71\xf1\x43\xaa\x79\x2b\xdd\x8c\
+\x63\x6e\x01\xf5\xce\x7d\x3d\x6a\x14\xd7\x4b\xef\xc9\xd2\x5a\x7e\
+\xd5\x2c\xd9\x1f\x93\xa7\xa4\x05\xc6\x0b\x5a\xdd\x62\x5b\x78\x52\
+\x54\x97\x12\x50\x36\x12\x95\x0c\x63\x7e\x08\xa8\x53\x90\x4e\x13\
+\x4e\xe8\x5b\x23\xa9\x2e\x33\x64\x2f\xfe\xa6\x4b\xd7\x16\xef\x89\
+\xb2\xbb\x11\x99\x61\x49\x53\xaa\x4e\x50\xa4\x2c\x81\x94\xa8\x94\
+\x72\x40\xc6\x4f\xb5\x38\x7f\x4d\xae\xb0\xae\x2e\xc1\x6a\xcf\x6e\
+\x7a\xe9\x02\xd9\xfa\xc6\xe0\xd2\xee\x45\xb6\xd0\x32\xad\xad\x36\
+\xaf\x0c\xef\x59\xda\x4f\x21\x23\xdc\xf3\x49\xee\x5a\x1a\xeb\x72\
+\x85\x65\x8e\xd5\xba\xc3\x67\x5c\x4b\xec\x5b\x8b\xcd\x44\x52\xbc\
+\x35\x36\xd2\xb2\xac\x10\xda\x77\x2f\xd0\x65\x20\x76\xe4\x53\xad\
+\xe7\x42\x3a\xde\xb9\x5e\xa5\x85\x6b\xb0\xdd\xd1\x2e\x1a\x22\xc8\
+\x89\x76\x04\x04\x29\x0a\x25\x2e\x36\xa0\xda\xfd\x14\x41\x4e\x06\
+\x70\x39\x15\x15\x27\x24\xad\x72\xd0\x84\xef\x71\xda\x27\x53\x1c\
+\xbc\x5e\xad\x76\x7d\x39\x6e\x80\xeb\xf3\xec\xed\x5d\x9a\x55\xca\
+\xe0\x62\xa5\xd4\x38\x78\x69\xbd\xad\xac\xa9\x63\x07\x77\x18\x4f\
+\xcd\x37\x45\xbd\xeb\x29\x9d\x53\xd6\x76\x38\xed\xda\xdc\x85\x6d\
+\x8d\x10\x47\x6d\xd9\x2b\x6f\x69\x71\xb7\x94\x95\x6e\x4b\x64\xe5\
+\x44\x24\x2b\xfb\x21\x3c\x66\xb7\x75\x07\x45\x5d\x75\x55\x89\x8b\
+\x03\x16\xad\x37\x09\x94\x36\xd1\x8b\x3d\x2e\xb8\x97\xad\xce\x0d\
+\xa5\x4a\x61\x09\x6c\x76\xc7\x1e\x74\x7a\x67\xda\x9d\x23\xe9\x9b\
+\xd5\xa7\xa9\xb7\xad\x42\xc3\x90\x65\x5b\x6f\x4c\x44\x43\xc5\xd7\
+\x94\x89\x0c\xae\x3a\x16\x9e\x12\x10\x52\xb0\xad\xd9\xfb\xc9\xc7\
+\xb1\xac\x11\xd2\x46\xf9\x71\x25\xbf\x27\xf4\x7f\x82\x13\xa0\xf5\
+\xcc\xb6\xf4\x9e\x84\x89\x6f\xb4\xbb\x36\x4e\xa1\x6e\x4a\x19\x13\
+\x6e\x2a\x51\x6c\xb4\x4a\x89\x71\xd2\x92\x54\x36\x85\x1c\xed\xcf\
+\x00\x01\x4e\x8b\xea\x43\xcf\x59\x4a\x5c\xb2\xb6\x2f\x89\xd4\x0a\
+\xb0\x08\x68\x94\x4b\x2a\x90\x90\x14\x56\x1c\xd9\x90\xde\xcf\x36\
+\x76\x64\x76\xc6\x69\x26\x8a\xe9\xd5\xea\xcc\x9e\x9d\xb7\x2a\x55\
+\xb9\x6a\xd3\x3f\x6d\xfb\x6f\x86\xe2\xc8\x73\xc6\x6d\x69\x4f\x87\
+\x94\x8c\xe0\xa8\x67\x3b\x7f\x1a\x43\xa8\x74\x7c\xcb\x3c\x69\xf7\
+\x59\x17\x08\xac\xcb\xfe\x98\x2e\xfb\x6f\x52\x59\x79\xe6\xca\x16\
+\xda\x51\xe1\xbc\x10\x82\x51\x94\x85\xe5\x40\x10\x0e\xde\x69\xea\
+\xf7\x46\x5b\xd4\x50\xd7\xd6\x88\x96\x68\xad\x51\x3a\xf5\x7c\xbf\
+\xd9\x6e\x36\xb6\xa0\xcb\xb2\x2d\x86\x9e\x2d\xbe\x5d\x43\x85\xc4\
+\x15\x85\x24\x94\xa4\xe3\x6e\xd3\xc8\x07\x92\x3d\x39\x9f\xdb\x9b\
+\x21\x9d\xde\xf5\x4a\x74\xfa\x36\xb1\x9d\x71\xd7\x77\xeb\x6a\x20\
+\x35\x3a\xe9\x2a\x28\xb7\x3f\x32\x3b\xc8\x8a\xe0\x69\xb0\x85\x10\
+\x08\x0b\x52\x40\xca\x42\xb0\x37\x11\x9c\x7a\x55\xe2\xdf\xec\xa3\
+\x80\xac\x6e\x03\x9c\x0a\xad\x59\x5d\x58\xd3\x84\xbb\xd5\x9a\x5e\
+\xf3\xc8\x48\xc7\x00\xd2\xe5\x28\x21\x19\x24\x62\x92\x46\x49\x53\
+\xbb\x8d\x63\x73\x77\xcb\xe1\x8e\x29\x4e\x39\xa4\xa2\x6b\x52\xca\
+\x9c\x8c\xe5\x79\x9b\xde\x80\x08\x3e\x95\x1c\xba\xb6\x92\xda\x93\
+\x8a\x7a\x84\xf0\xf0\xca\x14\x7b\x53\x7d\xdb\x6a\x42\x88\x23\xb5\
+\x68\xa2\xb2\xca\xc2\x2a\x4a\xeb\x32\x28\x7e\xac\x5b\xd9\xf0\x5c\
+\x75\xcd\xa1\x23\x39\xc9\xc0\x23\xd4\x57\x1e\x5d\xed\x4c\xc5\x9d\
+\x3a\x1b\x8b\x49\x4a\x17\x84\x2c\x11\x82\x3b\xa4\xff\x00\x01\xda\
+\xbb\x8f\xa8\xed\x32\xfc\x57\x12\x52\x15\x90\x46\x31\x9c\xd7\x21\
+\xf5\x4d\x8b\x7b\x77\x22\xdb\x6a\x40\x90\xc2\x8e\x50\xca\x07\x95\
+\x27\x9c\x28\x8f\x5c\xfa\x52\x7a\x46\xea\x49\x8d\xe8\xd9\xae\x23\
+\x8f\x69\x5b\xcb\x01\xb4\x16\xc1\x2e\x36\xda\xb3\xbb\x1b\x77\x66\
+\x90\xab\x24\x03\xfc\x3d\xa9\x44\xc2\x92\xac\x93\x93\xea\x7e\x7d\
+\xa9\x32\x73\x9c\xfe\x35\x96\x3b\x1b\x2a\x7b\xd6\x2c\x3e\x86\x5e\
+\x55\x07\x50\x2e\xde\x9d\xa9\x75\xf4\x9f\x05\x6a\xec\x92\x01\xcf\
+\xe6\x3f\x3e\x2b\xb1\xf4\xdc\xc5\x4a\x89\x1d\x78\x4a\x96\xcb\x61\
+\x0e\x82\x78\x2a\xc6\x4f\x6f\xf5\xc5\x70\x15\xb5\xd7\xe3\x5d\xa3\
+\xc9\x86\xa5\x25\xd0\xa0\xa6\xcf\x63\xbb\xbe\x2b\xae\xfa\x67\xa9\
+\xc4\xcb\x4c\x0b\x8c\x64\xbc\xff\x00\x8a\x0b\x8e\x82\x07\x99\x69\
+\x49\xcf\xd0\x9e\xd8\xf8\xae\x46\x3a\x9e\x4a\xaa\x6b\x66\x75\xf0\
+\x53\xe2\x50\xc9\xce\x25\xcd\x16\x52\x52\x50\xe8\x20\x21\xd0\x0a\
+\x49\xf5\xee\x08\xc7\xa7\x22\x9c\x96\xe2\x50\xc6\x14\xe6\xc5\x28\
+\x85\x79\xbd\x0e\x2a\x31\x6d\x7d\x1f\x64\x3b\x5b\x07\x01\x2b\x4a\
+\x09\xc7\x98\xf7\x03\xe0\x71\x4f\x4a\x79\x29\x4b\x99\x41\x53\x89\
+\x4f\x09\xce\x48\x57\xf6\xbe\x9e\xff\x00\x14\xa8\xcb\x40\x9a\xd4\
+\x75\x83\x28\x21\xe4\xa9\x4b\x40\x07\x18\x27\xb6\x7d\x85\x3b\xaf\
+\x2e\x34\x57\x90\x49\xc1\x2a\x1f\xcb\xe0\xd4\x2e\x44\xc2\xc3\xa1\
+\x01\x40\x37\x80\xb5\x85\x71\xdf\xdb\xe7\xe9\x4f\x91\x64\xed\x61\
+\x05\x04\xbb\x9f\xbe\x53\xc7\x70\x3b\x81\x53\x09\xf2\x29\x28\xb5\
+\xa8\xe0\xa4\x2b\x07\x91\xbb\x18\x15\xa0\x85\x24\xf2\x33\x8e\x4e\
+\x3b\x66\x94\xa0\x95\x25\x21\x5e\x53\x8e\xc1\x40\xee\xac\x78\xf3\
+\x63\x18\xf5\xc5\x35\x3b\x30\x4e\xe6\xa6\x9c\x6b\x2a\x52\xc6\xd0\
+\x91\xe6\xdc\x3d\x3e\x2b\x15\xc8\x86\xd9\x48\x52\x41\xe3\x00\x9e\
+\x72\x3e\x4d\x6c\x75\x2d\xa5\x25\x6e\x1d\xde\x98\x1d\xe9\xbe\x41\
+\x65\x2a\xcb\x4d\x95\x82\x9c\x7d\x0f\xe3\x5a\x23\x27\xc8\xba\xd4\
+\xd8\xe3\xd1\x0a\x77\xb8\xc0\xce\xfd\xaa\x1e\xde\xf5\x8a\x26\x47\
+\x52\x40\x65\x9f\x2e\x4e\x71\xed\xee\x6b\x4a\x76\xe7\x7f\x86\x9d\
+\xc4\xf3\xba\xb0\x2b\x47\x2a\xd8\x9c\xe7\x83\xc0\xcd\x44\x99\x74\
+\x66\x42\x4b\xea\x4a\x52\x13\xc7\x7a\xf5\xb4\xa1\x2d\x03\xd8\x93\
+\xe9\xe9\x5e\x87\x02\xd4\x70\x3c\xc7\x9c\xfa\x56\xc4\xe1\x03\x9f\
+\x4c\x9a\xcd\x32\x1b\x33\x8e\xb2\xdb\x81\x69\x4e\x48\x1c\xe3\xda\
+\x91\x6a\x7b\x88\xf0\x91\x19\x05\x3b\x94\x00\x48\x07\xd7\xbf\xe7\
+\xde\x92\xbb\x74\x47\x88\xa0\x97\x30\xda\x81\x4a\x47\x62\x78\xe4\
+\xf3\xed\x51\xb8\x73\x45\xc1\xf3\x26\x46\xe5\x36\xc2\x89\x6c\x64\
+\x83\x9e\x47\x22\xb3\x54\xa9\xa6\x54\x4c\x61\x77\x77\xc8\xdb\x73\
+\x92\x88\x50\x9c\x38\xd8\xe1\xdc\xb5\x0f\x82\x3f\xf4\xae\x45\xfd\
+\x23\xee\xce\x4d\xea\x0b\x50\x50\xea\x14\xcc\x78\xe8\x52\x90\x83\
+\x90\x95\xab\x24\x83\xf8\x60\xfe\x22\xba\x2b\x59\xea\x08\xd0\x62\
+\xbf\x26\x44\xa5\x33\x19\xb4\x17\x5c\x58\x20\x8e\x07\x63\xf1\xdb\
+\x1f\x53\x5c\x63\x74\xb8\xae\xe9\x7e\x99\x76\x78\xef\x5c\xa9\x0b\
+\x70\x83\xc7\x04\xf0\x3f\x01\xc7\xe1\x4c\xc0\x43\x3d\x57\x3e\x4b\
+\xf9\x23\x15\x2c\x94\xd4\x79\xcb\xf8\x26\x3a\x45\x98\x32\xad\xaf\
+\xc7\x7d\x61\xb5\x12\x92\x8c\xf6\x57\x03\x82\x7d\x06\x78\xcf\xcd\
+\x2a\xb1\xb9\x19\x6e\x8b\x53\x8d\xf8\x32\x63\xa8\x96\x52\xb1\xc9\
+\x0a\xdb\xce\x7d\x71\x83\xf9\x9a\x61\xb0\x2d\xc5\x35\x15\x4d\x2c\
+\xee\x5b\x9f\x67\x29\x00\x1d\xc7\xba\x4f\xe3\x8c\x54\xef\x4a\x5a\
+\xad\xf7\x99\xa9\x44\xe6\x54\x95\xc7\xe5\x0f\x32\xad\xab\x49\x3c\
+\x00\x0f\xc7\x7c\x56\xa8\xda\x32\x95\xfb\x6e\x65\xc7\x55\x6a\x9c\
+\x6f\xee\xd8\xb0\xf4\x96\x9b\x6a\x64\x54\x82\x90\x54\x45\x3f\xa7\
+\x46\xbe\xc4\x8c\x82\xa0\x83\x4b\xb4\x16\x9d\x9d\x0c\x20\xb3\x73\
+\x72\x52\x06\x30\x97\x1b\x09\x50\x19\xe0\x64\x77\xab\x76\x25\x97\
+\xed\x70\xc0\x59\x4e\xe0\x3b\xd7\xa6\xc3\xca\x96\x2e\x9a\x94\xe3\
+\xb1\xe5\x25\x26\xa5\x64\xee\x40\x34\xc6\x9e\x66\x2b\xe8\x50\x40\
+\xef\xcd\x5a\x70\xa1\x25\x31\x52\x52\x00\x18\xa4\x30\x2d\x6d\xb4\
+\x54\xd9\x00\x28\x76\x38\xa9\x0d\xa4\xa4\xb4\xa6\x57\xf7\xbd\x05\
+\x6b\x9a\x8c\x17\x55\x15\x83\xbb\xb3\x1c\xed\xa9\x4e\x5a\x38\x3f\
+\x18\xa2\xbd\x86\x76\x6d\x49\xfd\xd3\xcd\x15\xcc\xaa\x9b\x91\xd1\
+\xa5\x2b\x22\x23\xd3\xf4\xa2\x7f\x4f\xa2\x30\xa0\x0a\xb0\xe6\x7d\
+\xff\x00\xac\x55\x47\xe4\x47\x5c\x69\x0b\x8c\xb3\x8c\x1e\x29\xc3\
+\xa7\x4e\xaa\x2e\x95\x84\xe8\xe5\x2a\xdf\x91\x9f\xf8\xc5\x53\xc6\
+\xa1\x84\xd4\xc8\xe2\x54\x70\x0a\xc1\xce\x12\x39\xf9\xae\x8d\x35\
+\x97\xc0\xe5\xdf\x34\x13\xe6\x86\xdd\x36\xf6\x50\xb6\x16\x7b\x1e\
+\x29\xc2\x18\x29\x7d\xc4\x92\x78\xf8\xa8\xfb\x0e\xa9\xa7\xbc\x40\
+\x08\x29\xe0\x8c\xf7\xa7\xa6\xde\x0e\x29\x0f\x24\xe4\x91\x83\xcd\
+\x34\xa1\x36\x61\x59\xb5\xa4\xf7\xf2\xfa\x53\x55\xc4\xe4\x21\x19\
+\xf2\x9a\x53\x6a\x7d\x0b\x82\xb6\xf3\xd8\x52\x39\x4f\x21\xc2\x87\
+\x10\x77\xa4\x28\x8c\x83\x9e\x41\xc7\xf0\x39\xac\x54\xe2\xe3\x36\
+\x6e\xab\x25\x28\x23\x09\x6b\x42\x23\xec\xf8\xf4\xa4\xf1\x51\xe2\
+\xad\x0d\xa9\x5b\x73\xdf\x8a\xc1\xc5\x87\x65\x7e\xd3\xee\x27\xde\
+\x86\xe4\x36\xbb\x80\x65\x97\x10\xa7\x50\x37\x29\xb0\xa1\xb8\x24\
+\x9e\x0e\x3d\xbe\x6b\x52\x56\x46\x56\xee\xc5\x8f\x34\xe4\x7f\x32\
+\x14\x14\x07\x7a\xdf\x15\xc0\xc3\x41\x6b\x18\x2a\x3d\xab\x25\xb6\
+\xb4\xac\x2c\x1c\xa4\x8e\x45\x78\x52\x1d\x58\xe3\x18\xa4\x39\x66\
+\x5a\x8e\x4b\x2b\xd0\x1f\x2b\x0b\x49\x6c\x67\x75\x6c\xfb\x32\x0a\
+\x14\xa5\x2c\xee\xaf\x51\xb8\x37\xb0\x0e\x47\x6c\xd6\x4b\x6d\x69\
+\x8d\x84\x9d\xca\x35\x46\xf9\x0c\x4b\x98\x91\x59\x1b\x14\x01\xe0\
+\xd2\xbc\xa5\x6d\x05\x03\x8c\x52\x28\x72\xe2\xc9\x6d\x69\x61\xf6\
+\xa4\x6d\x25\x0a\x2d\xac\x28\x02\x3b\x8c\x8f\x5a\x51\x19\x0f\x79\
+\x80\x42\xb6\xfa\x66\xa6\x5a\xa2\xb1\x1c\xa3\x9d\xc1\x1f\x5a\xd9\
+\x3d\x43\xca\x3b\xd6\xa8\xe1\x48\xda\x14\x9c\x7a\xd6\xa9\x6f\x85\
+\x38\x40\x3f\x15\x95\x46\xf2\x35\xb9\x5a\x06\xb4\x11\x95\x2b\xd2\
+\xb4\xe7\x72\xca\x88\xaf\x1d\x5e\x06\xc4\xe3\xe6\xb7\xc4\x60\xac\
+\xf3\xf7\x45\x3f\x48\xab\xb3\x3e\xb2\x76\x46\xfb\x7b\x3d\xdc\x57\
+\xe1\x5b\xdd\x56\xe5\x63\xd0\x77\xaf\x14\xb0\x06\xc4\x70\x2b\xc4\
+\x83\x90\x9e\xe6\xb3\xbb\xb7\x76\x69\x4a\xca\xc8\xd8\x95\x06\x9a\
+\x2a\x3d\xe9\x08\x4f\x8e\xb2\xb5\x76\xad\xb3\x49\x2b\x0d\x03\xc5\
+\x68\x79\x41\x86\x4f\x22\xad\x05\x65\x7e\x6c\xac\x9d\xdd\xb9\x21\
+\xae\xf1\x31\xbb\x78\x2e\x29\x61\x29\x1e\xa4\xd5\x6d\xaa\xba\xb3\
+\xa6\xa1\xb4\xe2\x5c\xb9\xb3\xe2\x20\xe0\xb6\x16\x9d\xd9\xfa\x66\
+\x9b\x3a\xf7\x7f\xbc\x1b\x78\xb6\x59\x1f\x87\x1a\x43\xc7\x2b\x91\
+\x25\xcd\xa1\xa4\xfb\x81\xea\x4f\x35\xcc\xea\xd3\x2f\xb4\xa9\x92\
+\xef\x1a\xa6\x3c\xd0\x7c\xc6\x34\x62\xa2\x1d\x50\x3c\x0c\x80\x06\
+\x73\x58\xf1\x58\xfe\x1c\x94\x56\xe4\x50\xc3\x2a\xd7\x72\x95\x91\
+\x33\xea\x8f\x56\x15\x70\x6d\xd8\xd6\x44\x4b\xda\x78\x5c\x8d\xc1\
+\x00\x7c\x05\x67\x8a\xa1\x2e\xd3\x9f\x78\xe5\xf7\xc3\x3b\x95\x93\
+\x80\x4e\x13\x8e\xfc\xf7\x27\xde\xac\x8b\x9c\x3b\x2b\x70\xb6\x5c\
+\x25\x22\x12\x10\x90\x7c\x24\xba\x92\xa2\x48\x04\x1c\x9f\xf0\x15\
+\x06\xbc\x4f\xd3\x0c\x33\x25\x11\xd8\x54\xd7\xd6\x02\x5b\x75\x6a\
+\x52\xd4\x9e\x73\x9c\x9c\x01\xf9\x1a\xcd\x1a\xb3\xae\xf3\x49\x1d\
+\x5a\x31\xa1\x41\x64\xa7\x7b\xbd\xd9\x11\x52\x14\xb6\x8b\xab\x25\
+\x3f\xd9\xcf\x75\x13\xed\x58\x0c\x11\x9c\x7e\xed\x6d\x93\x25\xc9\
+\x0e\xf8\x8b\x3b\x71\x9d\xa9\x4f\x61\x5a\x52\xa2\x84\x28\xfb\x8a\
+\xd2\xaf\x6d\x4c\xf3\xb5\xf4\x14\xb0\x7c\x29\x4c\x3e\x47\xef\x05\
+\xe3\xf1\xab\xbf\xa6\x12\x57\x67\xbc\xa2\xce\x40\xf0\x5d\x74\x3f\
+\x1d\x59\xf2\xe7\x82\xa4\xfd\x78\xcf\xfe\x95\x56\xea\xeb\x6c\x2b\
+\x65\xc5\x9b\x5a\x56\xa0\xf2\x2d\xec\x97\x54\xa5\x64\x87\x8a\x02\
+\x94\x9e\x4f\x03\x9e\xde\x98\xab\x45\x88\x6a\xb8\xe8\x7b\x55\xd5\
+\xb5\x94\x3b\xe1\xb4\x54\xe2\x40\xdc\x95\xa7\x8c\xe3\xe7\x18\xfc\
+\x6b\x99\x8f\x95\xe1\x17\xc9\xfa\x47\x6f\xa2\x62\x9c\xa7\x0e\x7e\
+\xae\x5f\x76\x7b\xcb\x29\x75\xe5\xad\xd0\xb6\xf8\x4a\x41\xe3\x9d\
+\xde\xde\xd9\xf5\xa9\x23\x52\xdb\x56\x77\x27\x6a\x0a\x55\xb4\x13\
+\xdf\x68\xc1\xdc\x7e\x3d\x2b\x9e\xb4\x96\xa3\x75\x49\x5c\x49\x0a\
+\xf0\x25\x05\xed\x78\x2b\xb6\x33\x9c\x83\xed\x90\x4d\x5b\xba\x72\
+\xfa\xc4\x88\xcf\xc4\x5a\xd2\xe2\x8e\x49\x4e\x41\x51\x48\x27\x27\
+\xf1\xe0\xf1\x5c\xd8\xcf\x2b\xca\xcd\xb5\xb0\xed\x2b\xa2\x62\xb7\
+\x1a\xfb\x39\x5b\xdb\x7c\x40\x37\x00\xa3\x95\x03\xeb\xf4\xe3\xf9\
+\xd6\x36\x1b\x92\x52\x1d\x42\x1d\x59\x64\xac\xe7\x27\x71\x38\x38\
+\x18\x3e\x99\xf4\xa6\xb6\x6e\x2d\x29\x85\x48\x3e\x11\x64\xa0\xab\
+\x07\x2a\xe3\xe3\xdf\xe9\xf1\x4d\x0f\xce\x62\x25\xe2\x38\x6a\x3e\
+\x5e\x71\x7b\x7c\x24\xaf\x0a\x2b\xc6\x46\xef\x7c\x0c\x7e\x75\x6c\
+\xf6\x69\xa3\x26\x4b\xe8\xcb\x36\x43\xcb\x4b\xc8\x70\xe1\xa6\x90\
+\x00\x69\xa0\xac\x92\x9f\x53\xc7\xcf\x14\xe0\xdc\x9d\xea\x05\x21\
+\x38\x3d\xf1\xe9\xf5\xa8\x8d\x9e\xef\xe2\xba\x8d\xd2\x9a\x4e\x5b\
+\xcb\x98\xe5\x48\x03\xd7\xf0\x3c\xd3\xdb\x6f\x17\x23\x78\xc8\x2a\
+\x79\x0e\x04\x84\x24\x0e\xe0\x1c\x67\x3f\x3e\xd5\xae\x3a\xea\x8c\
+\xed\x5b\x46\x2c\x75\xc7\x14\x14\x12\xa4\xab\x1c\x2b\x3d\xc5\x68\
+\x62\x30\x74\x82\xa7\x95\x8e\x48\xcf\x35\xb5\x97\xd1\xb1\x0e\xba\
+\xb4\xaf\x6a\xca\x4a\x47\x74\x91\xc7\x3e\xf5\xbe\x2a\xda\x01\x68\
+\x20\xb9\x85\x67\xcc\x30\x47\xb5\x3e\x04\xa9\xe9\xa1\x8a\x62\x6f\
+\xf3\xa5\x3b\x8a\xb3\xf8\xe3\xf9\x1a\x4d\x22\x2a\x9d\x5a\x90\x52\
+\x84\xa7\x1b\xb9\x39\x27\x07\x9a\x5b\x1d\xc0\x42\x96\x96\xd4\x0e\
+\x77\x04\x13\xc9\x07\xbd\x27\x7d\x63\x6b\x6a\x0a\x04\x94\xfa\x1e\
+\x70\x7b\x8f\xaf\xc5\x59\xd8\x9c\xcd\x31\xb3\x86\xde\x70\x24\xfe\
+\xcd\x05\x27\x70\x3c\x12\x78\xff\x00\x43\xe6\xb4\xc8\xb9\x25\xa6\
+\x1c\x7d\x4b\x46\x5b\xc9\x20\x1f\x51\xee\x2b\x75\xd9\xf4\xc6\x61\
+\xd9\x2d\xc8\x4a\x08\xe4\x93\xdf\xd3\xd3\xe9\x51\x6b\xbc\xef\x05\
+\x6d\xa9\x4d\x2d\x95\x2b\x97\xc1\x19\x1c\xa7\x21\x43\xdf\xb7\xf1\
+\xac\x75\x5e\x51\xab\xac\x37\x6a\xeb\xab\xbf\xa9\xd4\xb6\xd5\x97\
+\x54\xe6\xd6\x4f\x8b\x9c\x05\x0e\xff\x00\xcf\xf9\xd6\xb6\x66\xa5\
+\xb8\x3e\x47\x47\x8a\x94\x02\xe0\x20\x60\x64\x11\xe9\xe8\x78\xc5\
+\x43\x2f\x77\x17\x2e\x37\x56\x19\x8e\x84\xa9\xb6\x4e\xf5\xad\x18\
+\xfb\xf9\x00\xfe\x1c\x9f\xc6\x91\xeb\x9d\x4c\xbb\x44\x05\x33\x0f\
+\x2e\x4f\x53\x48\x43\x0c\xb6\x39\x56\x0e\xe2\x15\xec\x30\x39\x3e\
+\x95\xcf\x93\x6e\x5a\x1b\x23\x4b\x44\x8a\xd3\xf4\x8b\xd5\x81\x71\
+\xe3\xe9\xb8\xc9\x42\x5c\x7d\x09\x76\x56\xd5\x79\x91\x85\x1c\x24\
+\xfe\x40\xd5\x2e\xc7\xdc\xf2\x9e\x41\xc9\xac\xae\xd3\xe4\xdd\x2e\
+\x92\x2e\x53\x56\x1c\x7e\x43\x85\x6b\x50\xed\x9f\x61\xf0\x2b\xd4\
+\x36\xb4\x46\x53\xdb\x78\x48\x1f\xc7\xff\x00\x4a\xf4\x58\x7a\x0a\
+\x85\x25\x1e\x7f\x53\x83\x88\xaf\xc7\xaa\xe5\xc9\x6d\xe0\x3d\xda\
+\x56\xa1\x66\x79\xa6\xc9\x3b\xdc\x6d\x48\x29\xee\x9d\xa4\xf2\x3e\
+\x40\x3f\xc6\xa7\x5a\x1f\x54\x45\xfb\x53\x28\x9c\xff\x00\xd9\xa4\
+\x17\x3f\x79\x3f\x7f\xb6\x09\x3e\x87\x15\x5b\x45\x56\xd8\xd9\x6f\
+\x25\x25\x59\x71\x3f\xd9\x48\xe7\x23\xf9\x56\x6b\x2a\xb8\x45\x61\
+\x29\x70\x05\x85\x1f\xeb\x09\xdc\x9e\xdf\xbd\xed\xf5\xaa\xba\x69\
+\x4f\x30\xca\x96\xad\x47\x86\xfd\x7a\xb9\xdb\xfa\x4a\xec\xd3\x71\
+\x98\x74\x10\xa4\x2d\x20\x85\x24\xe4\x1a\x91\x47\xd6\xf1\x5c\xbf\
+\xb1\x60\xb6\xbc\x99\x37\x07\x12\x1c\x5b\x2d\x9d\xde\x0b\x7e\xab\
+\x59\x1f\x77\xe0\x1e\x49\x22\xb8\xbf\x4e\xe9\xad\x63\x2c\x22\x09\
+\xbf\xa2\x04\x65\x01\x95\xae\x5f\x00\x0f\x4c\x24\x93\x9f\x8a\xe9\
+\xae\x84\x58\x2c\xfa\x56\xd8\x61\xdb\xdd\x12\x25\xbe\x77\x4b\x98\
+\xaf\xbc\xf2\xbd\x07\xc2\x47\xb5\x3d\x63\xea\x4d\xa8\x52\x77\xf0\
+\x38\x18\x9c\x1a\xc3\xdf\x3b\xd7\xb0\xbf\x5a\x69\xa9\x51\x52\xb6\
+\xd4\x03\x80\x73\x9e\xe6\x92\x9f\x15\x87\x72\xa0\x52\x53\xdf\xe6\
+\xb7\x5a\xc2\x56\xd8\x52\x09\xc8\x02\x97\xb8\x12\xa4\x6d\x79\x00\
+\xf1\xc1\xae\xec\x65\x28\xab\x48\xcb\x93\x32\xb9\xa9\x89\x88\x51\
+\x05\x20\xe4\xf1\xc5\x14\xb2\xc9\x6a\x6d\xb7\x0c\x85\x64\x83\xd8\
+\x1a\x2b\x35\x5a\xd0\x8c\xac\x91\xaa\x95\x19\xca\x37\x6c\x83\x68\
+\x26\xf6\x69\x78\x6d\x39\xf7\x72\xe1\xe7\xd4\x78\x8a\xa7\x92\x55\
+\x1d\x59\x46\x14\x8f\x50\x07\x06\xb5\x68\xd8\x45\xee\x9f\x5b\x24\
+\x23\xcc\xb4\x87\x09\x03\xd7\xf6\x8a\xa5\x29\x56\xe4\xf9\xbb\x8e\
+\xfc\xd6\xca\x53\x53\x89\x86\x50\x70\x48\x41\x32\x14\x79\x61\x4e\
+\x30\x42\x17\x83\x94\xd3\x4c\x66\xe7\x37\x2c\x44\x43\x6a\x3b\xbd\
+\xbb\x54\x89\x4c\x24\x80\xb4\xf9\x71\xeb\x4e\x9a\x5e\x08\x5b\x85\
+\xf7\x46\xec\x1c\x73\x56\xa9\x35\x08\xb9\x30\x84\x1c\xe4\xa2\x8a\
+\xab\xa3\x76\x3b\x64\xed\x57\xaa\x97\x72\xb2\xbf\x2e\xe0\xc6\xa5\
+\x92\x23\xdc\x17\x1f\xc4\x6a\x39\x43\x6d\xad\x20\xab\x23\x18\x56\
+\x48\x1e\xea\x1e\xf5\x96\x96\xd4\x57\x4b\x26\x89\xb4\xb5\x6b\x83\
+\x65\x44\xcb\x86\xb5\x91\x65\x79\x42\x3a\xd2\xc9\xdc\x5e\xcb\xdb\
+\x37\x95\x67\x7a\x52\xa2\x9d\xdc\x80\x52\x08\xce\x45\xad\xa1\xf4\
+\xbf\xf4\x65\x7a\x81\x62\x77\xda\xbf\x5c\x5e\x5e\xba\x01\xe0\xec\
+\xf0\x7c\x44\xa1\x3e\x1f\x73\xbb\x1b\x3e\xf7\x19\xcf\x6a\x8e\xc6\
+\xe9\x87\x83\x6e\xb5\xc4\x37\xcc\xfd\x83\x55\x2f\x50\xee\xfb\x27\
+\xf5\x9b\x8b\x87\xc1\xfb\xfc\x7f\x59\xf7\xf9\xed\xf7\x79\xae\x44\
+\xaa\x39\x3b\x9b\x23\x86\x94\x22\xac\xb5\xd7\xf9\x43\x05\xd7\x5b\
+\xdd\xad\x2c\xea\xcb\x54\xe8\xb6\xc9\xd7\x8b\x4d\xca\x0c\x08\x2f\
+\x34\xca\xd9\x65\xf3\x31\x28\x2d\x95\xa7\x72\x88\xd8\x14\x73\x85\
+\x73\x8f\x4c\xe6\xbc\xd1\xd6\xcb\xa4\x2e\xbb\xea\x16\x2e\x72\x61\
+\xcc\x79\x36\x28\xaa\x4b\xb1\xd8\x53\x29\x52\x0b\xae\x77\x49\x5a\
+\xb0\x73\x91\xf7\x8f\xa7\xd2\xa4\xb7\xbe\x99\x31\x76\x9f\xab\x65\
+\x3d\x78\x75\xa5\xdf\xa4\x41\x95\x1d\x4d\x32\x02\xa0\xbd\x15\x09\
+\x4a\x14\x09\x24\x2f\x25\x20\xe0\x81\xc1\x23\xe6\x9c\x74\xbe\x8f\
+\x9f\x6f\xd6\x73\xf5\x5d\xda\xfa\x8b\x94\xe9\xb0\x9b\x86\xb4\x35\
+\x0f\xec\xed\x21\x2d\xa8\xa9\x25\x23\x7a\x8f\xa9\xce\x49\xe4\xfa\
+\x0e\x28\x55\x64\xb9\x93\xec\xf2\x73\x4d\xae\x7e\x5a\xfe\x08\xdd\
+\xda\xf5\xa8\xe7\xeb\xf9\x9a\x5f\x4e\x3d\x6f\x88\x6d\xd0\x1b\x97\
+\x21\xf9\xac\x2d\xd0\xb7\x1c\x52\x82\x1b\x09\x4a\xd3\x84\xe1\x19\
+\x2a\xc9\x3c\xe0\x0f\x5a\x43\xa7\xb5\xf4\xeb\xdc\xfe\x9f\x29\xa8\
+\x8c\x47\x63\x50\xc7\xb8\x99\xcd\x9c\xa9\x4d\xbb\x1b\x6a\x70\x85\
+\x7b\x6f\xdd\xe8\x72\x31\x52\xdd\x4f\xa2\xe6\x3f\xa9\xdf\xd4\xfa\
+\x7a\xf6\x2d\x57\x09\x10\x93\x0e\x50\x76\x20\x7d\xa7\x10\x95\x15\
+\x21\x61\x3b\x92\x43\x89\xdc\x70\x72\x46\x0f\x20\xd3\x2b\x1d\x38\
+\x6e\x2c\x2d\x2a\xd5\x82\xee\xa8\x73\x34\xc8\x79\x0c\x3d\x26\x3f\
+\xda\x12\xfa\x5f\x00\x3d\xe2\x24\x29\x1c\xa8\x8d\xd9\x04\x60\xfb\
+\xf6\xa6\xf1\x1c\x95\xc5\xca\x95\x48\xc9\xaf\x5b\xaf\xa5\xc8\x6e\
+\xa8\xd4\xfa\xa2\xed\x66\x65\x51\xae\x4c\x5b\x94\xcf\x50\xc5\x94\
+\x16\x98\x3e\x66\x51\x20\x06\xf7\x79\x86\x7b\x79\x87\x65\x03\x8e\
+\x2a\x7b\xd4\x46\xee\xd1\xba\x45\xa8\xd6\x8b\x8a\x3f\x58\x31\x66\
+\x90\xe2\xe5\x21\x9d\xa0\x94\xb4\xa2\xa2\x94\xee\xf2\x92\x01\x00\
+\xe4\xe0\x90\x79\xc6\x29\xad\x7d\x30\x5f\xea\x15\x5a\xe3\xea\x07\
+\x0c\xc1\xa8\x93\xa8\x5b\x96\xf4\x40\xa0\x24\x85\x25\x44\x29\x01\
+\x43\x72\x4a\x82\x8f\x05\x3c\x10\x3d\x32\x67\x97\xeb\x13\xf7\x9d\
+\x0d\x73\xd3\xb2\x66\xb6\x89\x17\x1b\x7b\xd0\xdc\x94\x86\x30\x94\
+\xa9\xc6\xca\x0a\xc3\x65\x59\xc0\xce\x76\xee\xfc\x6a\xae\x6e\x2b\
+\x5e\x65\xa9\xd1\x9c\xaf\x7e\xc2\xb3\xe9\xfb\x97\x58\x88\xd3\x7a\
+\x32\xc1\xfa\x8a\x24\xb7\x74\xe3\x57\x89\x93\x5c\xb7\x1d\xbe\x1a\
+\xb6\xb6\xd2\x03\x48\x5a\x77\x2b\x20\xee\x59\x57\x61\xdb\x26\x94\
+\xb7\xd4\x7d\x49\x70\xb5\xe9\x96\x6d\x70\x6d\x71\xaf\x17\x4b\xa4\
+\xcb\x44\xb0\xf8\x5a\xd8\x65\xe6\x37\x65\xc4\xe0\x85\x29\x38\x46\
+\xe0\x9c\x8c\xe7\x19\x1d\xea\x4f\xfd\x03\x95\x0e\x55\x92\xe7\x64\
+\xbe\x88\x57\x5b\x6d\x9d\x36\x87\x1e\x7a\x1f\x8c\xcc\x96\x06\xd2\
+\x0a\x9b\xde\x92\x14\x14\x9d\xc0\x85\x71\x92\x0e\x45\x68\xb7\xf4\
+\xce\x2c\x01\xa5\x04\x7b\xbb\xaa\x36\x29\xf2\x27\xbe\xe3\xcc\x85\
+\x2e\x6b\xaf\x25\x7b\xc9\x20\x80\x9e\x56\x4f\x63\xc0\x03\xe6\x92\
+\xe4\xde\xe3\x23\x4a\xa4\x74\x5e\xb6\xfc\x93\x98\x48\x7d\x30\x98\
+\x44\xc5\xb6\xec\x84\xb6\x90\xf2\xdb\x46\xd4\xa9\x78\xf3\x10\x32\
+\x70\x09\xcf\x19\x35\xa6\x74\x20\xe2\x0a\x9b\xe1\x58\xef\x4b\x7e\
+\x86\x81\x44\x66\xe2\xee\x8d\x92\x82\x92\xb3\x18\x63\x47\xda\x49\
+\x79\x5c\x8f\x4a\x58\x09\x23\x68\x18\x4d\x6c\x94\xd8\x4b\xc1\x5e\
+\xf5\xe0\xad\x2e\x79\xb5\x33\x46\x19\x74\x3d\x4a\x76\x8a\xda\xc8\
+\xc6\x56\xae\xd5\xad\x09\x2b\x50\x03\xd2\x95\x3a\x90\x19\x29\x14\
+\x99\x3e\x43\xa2\xb9\x8d\xb3\xb0\xb7\x0a\x93\xcf\x15\x1c\xd4\x72\
+\xdd\x8d\x01\xe2\x81\xb9\x7b\x4e\xd1\xee\x6a\x40\xa5\x14\x93\x8f\
+\x4a\x8f\xea\x16\x17\x25\xa5\x0f\x53\x5a\x32\xc9\xc6\xd1\x32\xd4\
+\x77\xd5\x1f\x3d\xb5\xfd\xcf\x5d\xeb\xad\x61\x24\x39\x0e\x5c\x87\
+\x91\x93\xf6\x76\x92\xa0\x86\x12\x0e\x30\x40\xf6\x3c\x12\x7d\x69\
+\xb2\x2e\x9d\xd5\x16\x89\x6c\xbb\x71\xb6\x3e\xd3\x41\x61\x38\xdd\
+\xc1\x27\xf1\xae\x90\xeb\x0c\x46\xb4\xe2\x5f\xbc\xc7\x6d\xb6\x64\
+\x15\x7e\xd1\x40\x04\x97\x72\x47\x94\x9f\x73\x54\xcd\xf2\xfa\x8b\
+\xf6\x9d\x79\xf8\x4a\x52\x64\x32\xe2\x56\xa6\xd6\xac\x2d\x24\x1f\
+\x6f\x51\xf4\xae\x35\x49\xce\xed\x4d\x58\xe8\x61\x6a\xb7\x97\x24\
+\x74\xd8\x6f\xd5\xf6\x69\x6e\x86\xa3\xb7\x66\x7c\xc9\x77\x21\x00\
+\x27\x2b\x51\x03\x24\x77\xf4\x19\xa8\x33\xda\x6a\xf3\xe2\x61\x16\
+\xa7\xce\x4e\xd0\x0f\x07\x3c\x9f\x7f\x83\x57\x25\xd5\x71\xcb\x08\
+\x96\xec\xc6\x5a\x69\x61\x2f\x36\xe2\xdd\x09\xda\x48\xce\x46\x4f\
+\xb1\xaa\xcf\x50\x6a\x75\x15\xed\xb6\x05\x25\x49\xdd\xbd\xee\xe3\
+\x24\x11\x91\xf8\x13\x8f\xad\x36\x8c\x1a\xa7\x9a\xfb\xaf\x32\xcb\
+\x13\x2a\xcd\x45\xc7\x62\x2b\x1d\x82\xe4\xb6\x62\xaf\x09\x53\x8e\
+\x25\x18\xcf\x6c\x9c\x72\x6b\xc9\x51\x9c\x6a\x43\x8c\xe3\x1b\x16\
+\x5b\x51\xfa\x1c\x1a\x5d\xa7\x19\x13\x2f\x91\xc3\x88\x52\x9b\x6c\
+\x97\x5d\x24\x9c\xe0\x73\xc9\xf9\x38\x1f\x8d\x6f\xbd\x36\x7c\x57\
+\x24\x38\x70\x5c\x3c\x24\x7a\xe3\xd6\x9b\x14\xdb\x7d\xc1\x27\x1b\
+\xd8\xd1\x79\x94\xe5\xde\xee\xf4\xa7\x37\x3b\x35\xd7\x50\x80\xd3\
+\x0d\x65\x2a\x21\x20\x71\xf9\x70\x3d\x6b\xa1\x7a\x0f\x0d\x33\xfa\
+\x7c\xea\x5b\x6b\xc5\xd8\xa2\x36\x77\x25\xbc\xe4\x1e\x3f\x78\x12\
+\x7f\x0c\x7b\x57\x3e\xdb\x2e\x26\xdd\x35\xb9\x6d\x36\x91\x22\x30\
+\x43\xad\xa8\x7e\xea\x92\xa0\xa1\xfc\x06\x0f\xd6\xba\x17\xf4\x6a\
+\x92\xe3\xa8\xbb\xac\xb5\xe0\x66\x7f\x8c\x1b\x40\xc6\xc4\xb8\x37\
+\x0e\x3d\xbe\x7b\x57\x3f\x1f\xd6\xa7\x67\xca\xdf\x63\xa7\xd1\xed\
+\xc6\x6e\x48\x64\xd7\xda\x6a\x4c\x29\x49\x7a\x3a\xd1\x94\x28\x2d\
+\xa7\x14\x33\x90\x32\x70\x7d\xe9\xab\x4f\xea\x29\x2c\xf8\x5e\x02\
+\x56\x42\x4a\x81\x69\x4b\xda\x52\xac\x85\x10\x93\xdf\x07\x9f\xc3\
+\x8a\xe8\xad\x51\x64\x8b\x26\x23\x8f\xa5\x96\xdf\x52\x0a\x94\xe3\
+\x09\x1e\x60\x0f\xef\xa7\xfc\x40\xf6\xe2\xa8\x6d\x71\xa2\x57\x68\
+\x96\x65\xb0\xe8\x2a\x4f\x29\x52\x46\x4a\xd2\x71\xc0\xe7\xdf\xf8\
+\xd7\x26\x2a\xdd\x59\x7c\x0f\x41\x0a\xdc\x4e\xb2\xdf\x99\x37\xb4\
+\x6b\x95\x18\xf1\xbc\x44\xab\x85\x79\x51\x8c\xf6\x3d\xf3\xe9\xd8\
+\x60\x1e\x6a\x4d\xf6\xe6\xe4\x23\x28\x5b\x7b\xd9\xcb\x89\xda\xb3\
+\x95\x1e\x0a\x88\x3d\xf3\xe9\xcf\x07\x35\x45\xdb\x11\x20\x90\x84\
+\x2c\xa1\xe2\x00\x2a\x74\x14\xe0\x1e\x09\xc7\xe1\x52\x07\x5d\x99\
+\x0d\xf8\xbb\x9b\x12\x1b\x64\xec\x58\x2b\xf3\x2c\x77\xf4\xcf\xcd\
+\x2e\x49\xa7\x64\xc9\x96\x1e\x13\xd5\x68\x58\xcc\x5d\x1a\x64\xb8\
+\x43\x8b\x69\xc9\x18\x29\x52\x80\x1e\x1a\x14\x48\xc7\xc9\x24\x91\
+\xf9\x54\xa6\xd5\xac\x5a\x8c\xda\x1d\x79\xd3\x15\xc4\xe5\x05\xa7\
+\x10\x40\x47\xa7\x97\x9f\x31\xc2\x48\x38\xf5\xcd\x52\xd3\xae\x4a\
+\x5a\x54\x63\x89\x0c\xa9\x68\x40\x6e\x3a\x8e\xd5\x67\x83\x92\xa3\
+\xfb\xbd\xb1\xeb\x5b\x67\x5c\x51\x28\xc5\x6a\x6a\x32\xe4\x70\x54\
+\xd2\x37\xa9\x60\x7a\x11\x8c\xf3\xdf\x9f\xad\x5a\x15\x25\x11\x33\
+\xc2\x46\x45\xff\x00\x6d\xd5\x70\xd2\x43\x89\x7e\x13\x8d\xb8\x42\
+\x96\x19\x70\x2b\x7a\x49\xc0\x27\xd8\xf7\xe7\xe2\xa4\x08\xba\x25\
+\x4e\x36\x63\xbe\xd3\xad\x28\x00\xbc\xab\x9e\xd9\x07\x3e\xbc\x1e\
+\x47\xc5\x72\xe3\xd6\xc8\xd2\xda\x53\xb1\x24\x4f\x4b\xc5\x64\x2d\
+\xb2\x36\xec\x09\xe0\xa9\x40\x1c\x00\x33\x81\x8f\x8a\x77\xb6\xc1\
+\xbe\x90\xd3\xd1\xb5\x1c\xd2\xca\x52\xa0\x8c\x34\x55\xb4\xa5\x38\
+\x4e\x01\xf9\xfe\x74\xe8\xe2\xb2\xab\x31\x32\xe8\xf4\xf5\x4c\xe9\
+\x28\xf7\x58\xaa\x52\x92\x14\xe2\xd0\xda\x4a\x4a\x89\x00\x13\x9e\
+\xff\x00\xe1\x5a\xdf\xbd\x41\x8a\xa4\x93\x21\xa0\x51\xf7\xdd\x1c\
+\x63\x23\x03\xe0\xf2\x45\x73\xab\x82\xf8\xd3\x0b\x73\xfa\x45\x21\
+\x87\x56\x43\xcd\xb4\xf6\x08\x07\xb7\x38\xf8\x26\x9a\x2e\x97\x3d\
+\x45\x21\xf6\x61\xa2\x42\x12\x8c\x8f\x0d\xe5\x76\x51\xc1\x21\x58\
+\xec\x14\x71\x9c\x55\x96\x31\xb2\x1f\x47\x77\x96\xd6\xaf\xd6\xb1\
+\xe6\xbf\x25\xa8\xcf\x0f\xf6\x56\x9b\x59\xdc\x78\xde\x4a\xbb\x9f\
+\x73\xb4\xfe\x75\x5e\xea\x7d\x69\x2e\xe5\x30\xc1\xb7\x28\xbe\x96\
+\xf2\x90\xa3\x9c\x01\xc9\x00\xfb\x60\x54\x30\x45\xbb\xcb\xb9\xa6\
+\x2a\xa5\x89\x13\x23\xb1\x92\xb6\xd5\x93\xb9\x47\xd4\x01\x8e\x32\
+\xaf\xce\x9c\x2d\xf6\x77\x23\x3c\xa9\x2e\xc9\x58\x65\xbc\x92\x90\
+\x08\x71\x47\x27\x72\x56\x47\xd4\xd2\x67\x55\x6e\xd9\xa6\x9e\x15\
+\x2e\x42\xb8\x32\x4c\x56\x1a\x4b\x1b\x5d\x90\x37\x07\x49\x18\xc7\
+\x97\x95\x13\xd8\x73\xc6\x7d\x78\xe2\xbc\x76\xd6\x59\xb5\xc9\xbb\
+\x5c\x14\xb7\x27\x86\x1c\x0e\x29\x49\xc2\x41\x50\xc6\x11\xfd\xd0\
+\x14\x7e\xb9\xcf\x14\xe9\x6d\xb6\x26\x42\xb6\x32\xd8\x6e\x18\xfb\
+\xe9\x56\x78\x57\x73\xeb\x82\x72\x7b\x7c\xd2\xfd\x7c\xc3\xcd\xe9\
+\x39\xeb\x48\x51\x1f\x65\x51\x09\x3d\xd2\x00\x27\x15\x85\xd4\xbc\
+\x92\x5c\xcd\x71\xb4\x59\xca\x57\x28\xc2\x3d\xc1\x6c\xa9\x25\x08\
+\x49\xdd\x8f\x5c\x11\x9f\xe5\x4e\x5a\x85\x22\x38\x53\x0d\xa9\x1e\
+\x19\x0d\x29\x01\xb3\x91\x80\xda\x7d\x7e\x09\x57\xe3\x9a\x75\xd7\
+\x76\x97\x94\xd4\x0b\xd3\x0d\x3c\xa8\xd7\x16\xff\x00\xd9\xd6\xa3\
+\x92\xa2\x00\xc8\x23\xd8\x64\x01\xf4\xa6\x3f\x1c\xc9\xb9\xb4\xa5\
+\x90\x12\x97\x39\x18\xfb\xa9\xe1\x3f\xc8\x7f\x1a\xf5\x94\xaa\xaa\
+\x90\x52\x3c\x7d\x5a\x5c\x3a\x92\x87\x6b\xd3\xc1\x9e\xb4\x96\x9a\
+\x69\x98\x9b\x86\xf7\x88\x52\xc8\x3f\x77\x9e\x07\xe3\xdf\xf2\xa7\
+\x54\x58\xe4\x7d\x91\x99\x68\x43\xfb\x06\xe2\xe0\x49\x07\x19\xc1\
+\x03\xe0\xf6\xf8\xac\x64\x5a\x24\x38\x13\x28\x20\x06\x5d\xfd\xb3\
+\x8b\x04\x05\x47\x4e\x70\x33\xed\xc0\xfe\x55\x63\x40\xb7\xc9\x94\
+\xc4\x59\x6c\xbe\xe3\x3b\x19\x52\x92\x3b\xa5\x44\x0c\x10\xaf\x62\
+\x40\x07\x3d\xb9\xac\xb8\x8c\x46\x44\x9c\x4d\xf8\x4c\x2a\x93\x6a\
+\xa2\xdb\x62\x2f\xa3\x58\x9a\x99\xc0\xfe\xaf\x6a\x68\x50\xe1\x52\
+\xde\xe1\x1c\xf7\x1b\x54\x39\xfc\xeb\xa8\x7a\x52\xcb\xcf\x36\x95\
+\x3a\xda\x42\xc6\x32\x12\x30\x07\xd3\xe2\xa9\x58\xaf\x3a\x99\x68\
+\x4c\x68\xca\x8c\x87\x0e\xe5\xa5\xb7\x02\xd2\xa3\xea\x7d\x2b\xa1\
+\x3a\x3e\x85\x38\xdb\x41\x28\xca\x4f\x73\x8a\xdf\xd1\x0b\x8b\x2e\
+\x26\xc7\x9f\xe9\x97\xfb\xd9\x2d\xb1\x6b\xd8\x42\xb6\x24\x67\x18\
+\xa7\x83\x83\x84\xd2\x66\xa0\xa9\xa4\x78\x8c\x8f\x4e\xd5\xb0\x3b\
+\x95\x03\x8e\x41\x19\xae\xd4\xda\x9b\xba\x39\xb1\x4e\x0a\xcc\x90\
+\xb0\x90\x96\x52\x07\xb5\x14\x32\xa0\xa6\x52\xae\xdc\x51\x5c\xb7\
+\xb9\xd4\x5b\x10\x8e\x95\x5d\xa0\xb9\xa2\xad\xd1\x0b\x98\x5a\x43\
+\x80\x82\x7f\xe3\x15\x4e\x17\xa8\x06\x3b\xa5\xf6\x47\x90\xf7\xc5\
+\x57\x9d\x2a\xb7\x3f\x2a\xcf\x6f\x59\x2a\x42\x32\xbc\x1c\xff\x00\
+\x7d\x55\x72\xa6\x3a\x4c\x50\xd2\xc8\x56\x05\x6f\x93\x54\x1a\x6b\
+\x99\xcd\xa2\x9e\x22\x9d\x9f\x22\x18\x95\x6e\x41\x23\x3f\x41\xe9\
+\x52\x6d\x3a\x13\xf6\x00\x78\xfa\xe2\x9a\x2e\xf6\xb7\x23\xac\xba\
+\xc8\xca\x09\xe4\x0f\x4a\x51\xa6\x66\x24\x66\x3a\xd4\x02\xb3\xc0\
+\x34\xca\xed\x54\xa5\x78\x95\xa0\x9d\x3a\xb6\x91\x9c\xad\x5b\xa7\
+\xda\xb3\x37\x75\x6e\xeb\x0d\xc8\x4e\x3b\xe0\x21\xe4\xb8\x36\x29\
+\xcd\xfe\x1e\xc0\x7d\xf7\x8d\xb8\xf7\xa6\x87\xb5\xa5\xb3\xf5\xc2\
+\x6d\x2a\xbd\x5b\x9b\xb8\xa8\x80\x98\x8a\x92\x80\xe9\x27\xb0\xdb\
+\x9c\xe4\xf7\xc5\x54\xe2\x2b\xad\xf5\x81\xfd\x04\x50\xa1\x06\x25\
+\xf5\xcd\x48\x36\x8e\x03\x2a\x6c\x29\x09\x1e\x98\x12\x1c\x27\xfe\
+\xaf\xd2\x99\xe7\x04\x27\xa6\xd7\xdd\x26\xe2\x48\xd5\xf2\x35\x03\
+\x8e\x30\xc1\x6c\xf8\xee\xba\xa9\x49\x52\x24\x24\x77\x28\x08\xc1\
+\xde\x38\x00\x11\xf1\x4a\xa7\x08\xc6\x37\xb5\xc5\xd5\xc5\x54\x6d\
+\xad\xac\x5f\x08\xd5\xf0\x18\x76\xe2\x87\xa7\xc7\x1f\xaa\xd0\x17\
+\x3c\x6f\x19\x8e\x92\x8d\xe0\xaf\xdb\xcb\xcf\xd2\x9c\x7f\xa6\x1a\
+\x65\x28\x63\xc7\xbe\x5b\xd9\x2f\xa5\x85\xb2\x97\x1f\x4a\x4b\x81\
+\xe2\x52\xd6\xd0\x4f\x3b\x8a\x55\x8c\x77\xda\x7d\xaa\x89\xd4\xf3\
+\x23\xc1\xbe\x75\x6e\xdf\x2d\x65\xa9\x97\x8b\x6b\x22\xda\xc6\xd2\
+\x57\x2f\xfd\x88\xb5\xfb\x30\x3e\xf6\x17\xc1\xc7\x6e\xe7\x8a\x71\
+\xe9\xcb\x51\xff\x00\xf6\xb3\x61\x75\xf8\xec\xbc\x5b\xd0\x50\x94\
+\xd9\x5a\x02\x8a\x09\x79\x5c\x8f\x63\xf3\xf3\x51\x56\x9c\x65\xb2\
+\xb3\x2d\x4b\x17\x35\x2b\x32\xed\x8b\xa9\x34\xf4\xbb\xc3\x96\x68\
+\x97\xcb\x6c\x8b\x8b\x7b\x82\xe2\xb7\x25\x0a\x75\x25\x3f\x78\x14\
+\x83\x9c\x8f\x51\xe9\xc6\x7b\xd3\x42\xb5\x35\x8e\x43\xd3\xbf\x52\
+\xde\x6d\xb7\x09\x11\x1b\x52\xdd\x66\x3c\x94\x38\xa4\x63\x23\x90\
+\x93\x9c\x64\x11\xf5\x04\x77\x15\x58\xd9\xa4\xcd\xb7\x0b\xae\x87\
+\xd0\x97\xb8\xda\x92\xcf\x71\xb5\x5c\xa4\xc3\x5b\x29\x05\xfb\x3c\
+\x95\x02\xa4\x21\xc7\x13\xc2\x82\xd6\xe1\xdb\xbb\x0b\x1f\x4e\xf8\
+\xe8\x98\x50\x27\xc0\xd3\xb3\xc6\xac\xb7\xb9\x3e\xcf\x60\x76\x22\
+\xad\x0c\x41\x0c\x48\x65\x0a\x69\x01\x4d\xbf\x95\x95\x02\x85\x24\
+\x77\x03\x27\x27\xd6\xb3\x53\x76\x95\x87\x4e\xbc\xa4\xb4\x5e\xbe\
+\xa3\xcc\x2e\xab\x2d\x76\x4d\x18\xe0\x66\xd7\x1e\xed\xaa\x12\xa7\
+\x31\x29\xf5\x25\x88\xc8\x4a\x54\x72\x70\x0a\x8e\x48\x09\x48\xe3\
+\x93\x56\xba\xee\x51\x63\xca\x83\x6f\x9d\x2a\x3b\x17\x09\xa9\x51\
+\x65\x8d\xfc\xba\xa4\x24\x15\xec\xcf\x24\x00\x73\xf4\xaa\x27\xa7\
+\x83\x0d\x74\x1f\x1f\xfc\x0b\x8f\xfe\x11\x75\x3d\xeb\xc3\xe8\xb2\
+\xda\x6c\x5a\xcd\x41\x41\x3a\x7e\xee\xcb\xef\xa9\x23\x24\x47\x74\
+\x16\x1d\x18\xfa\x38\x0f\xe1\x55\x93\xcc\xcb\x50\xa9\x28\xd3\x72\
+\x6f\x6b\x7f\x09\xbf\xe4\x94\x48\xd5\xba\x7d\x11\xae\x52\x1b\xbc\
+\x43\x53\x56\xb7\x14\xd4\xf5\x87\x46\x23\x2d\x23\xcc\x95\x9f\xdd\
+\x23\xe6\xa1\xf2\xfa\x99\x6d\x85\x17\x55\x5c\xa7\x48\x84\x60\x58\
+\x56\x1b\x49\x8b\x31\x2e\xba\xf2\xf6\x12\x5b\x52\x38\xd8\xbd\xe9\
+\x52\x40\x27\x9c\x55\x55\x1e\xdb\x26\x15\xca\xd7\xa5\xe4\x21\x41\
+\xcd\x76\xcc\x29\xd3\x40\x49\x23\xc5\x43\xeb\x7e\x60\xcf\xcb\x6a\
+\x48\x24\xfb\x53\xb6\xb3\x6d\xc9\x07\xae\x2c\xc7\x69\xc7\x5c\x54\
+\x78\x1b\x50\x84\x95\x13\x88\x89\xf4\x1f\x14\xe5\x1c\xab\x41\x13\
+\xc4\xce\x4a\xfb\x7f\x4d\xfd\x89\xed\xc7\xa9\xf6\xb8\x97\xed\x2e\
+\xd3\x33\xe0\x1b\x4d\xe5\xb9\x6a\x7a\x63\xaf\x84\x86\x54\xca\x1b\
+\x21\x20\xf6\xc9\x2b\xc6\x3e\x98\xef\x56\x1d\x8a\xed\x6f\xbd\x5b\
+\x5a\xb8\x5a\xe6\xc7\x9b\x15\xd1\x94\x3c\xc3\x81\x68\x57\xd0\x8e\
+\x2a\x9f\x9b\x3a\xd5\x79\xea\x67\x4a\xe6\x5b\xe5\x45\x9e\xc2\x62\
+\x5c\xca\x5d\x69\x61\x69\x0a\x11\xd9\xec\x47\xa8\xcf\xe1\x4f\xfd\
+\x01\x21\xb8\x3a\xc5\x23\xca\xdb\x7a\xba\xe6\x94\xa4\x76\x48\xf1\
+\x07\x03\xd8\x55\x26\xae\x87\x50\xab\x2e\x26\x56\xee\xbf\x08\x97\
+\x3f\xaa\x74\xd3\xd7\xb1\x64\x66\xff\x00\x6b\x72\xe6\x14\xa4\x18\
+\x89\x94\x82\xe8\x5a\x7e\xf2\x76\xe7\x3b\x87\x72\x3b\x81\x4e\x49\
+\xc9\x38\x03\x9a\xa0\x35\x56\xa6\xba\x6a\x8b\xc5\x8f\xed\x72\xd8\
+\x8c\xf4\x2d\x71\x15\xa3\x67\x66\x29\xf1\x62\x32\x99\x3e\x1a\x5e\
+\x79\x79\x24\x6f\xdc\x39\xc2\x52\x77\x80\x33\xcd\x74\x53\x0d\x06\
+\xc7\xcd\x17\xca\x86\x52\x9f\x16\x4f\xb0\xf1\x09\x0c\xb5\x9c\x64\
+\xfa\xd2\x67\x25\x2d\x60\x80\x31\x4b\x8e\x08\xe6\x91\x3c\xc0\x56\
+\x54\x38\xaa\xc1\xa6\xf5\x34\x4d\x34\xb4\x13\x00\x09\xc9\xf5\xa4\
+\xb3\x63\x64\x9e\x29\x72\x12\x94\xf9\x48\xed\x5b\x5f\x40\x2d\x53\
+\xf3\xe5\x62\x63\x0b\x94\x8f\x56\x2d\xb6\x93\x6c\x92\xfd\xed\x31\
+\xbe\xc0\xda\x0a\x9e\x2f\xfd\xc0\x9f\x9a\xe2\xad\x53\x72\xd3\x8d\
+\xea\xa7\x13\xa6\x5c\x71\xa8\x2a\x59\xdc\x1d\x3f\xb3\x3c\xfe\xee\
+\x41\x56\x09\xf7\xae\xfa\xea\xbe\x93\x87\xaa\xb4\xec\xab\x3c\xf2\
+\xf8\x8c\xf8\x1b\xfc\x25\xed\x51\xda\x42\x87\x3e\xd9\x1d\xaa\x86\
+\x73\xa4\x9a\x62\xc6\xb5\x18\x36\x64\x2d\x7d\xbc\x49\x07\xc4\x3f\
+\xc7\x8a\xc5\x89\x4e\x73\xd2\x2d\xdf\xe4\x5a\x85\x55\x87\x93\x95\
+\xce\x74\xbb\x5a\xda\x96\xe2\x1d\xb7\x87\xdf\x2b\x38\x4b\x69\x41\
+\x3b\xd5\xec\x90\x29\xb6\x6e\x92\xd4\xc2\x40\x6d\xeb\x1d\xc1\xa5\
+\x67\x01\x0e\x30\xa4\x63\xfe\xd7\x6a\xbf\xf5\x45\x9e\x2c\x7b\x6a\
+\xe3\xcb\x65\xb6\xa3\x23\x2a\x05\x23\x69\x6c\x8f\xde\x49\x1d\x8d\
+\x55\x77\xcd\x7a\xa6\x9e\x31\xe1\xc8\x5d\xdd\x49\x4e\x13\x22\x40\
+\x52\x55\xff\x00\x58\x67\xcd\xf5\xe2\x95\x1a\x55\x29\x3c\xb2\x36\
+\x54\xc5\xac\x46\xb4\xe2\x37\x47\xb5\x45\xd3\xd6\xd2\x97\xe5\x37\
+\xf6\xd7\x9b\x0b\x96\x73\xc3\x69\xdc\x30\x81\xef\xdb\x27\xdf\x03\
+\x1e\xf4\xc7\x72\x90\xdc\xe9\xec\xbe\xb6\x9c\x6a\xda\x95\x12\x95\
+\xa8\x60\xad\x23\xef\x63\xdc\xfc\x57\xaf\xb4\xe5\xd1\xe7\xee\x17\
+\x0b\x82\x5d\x79\x78\x27\x68\x2b\xe7\xb0\x1c\x71\xf0\x00\xa7\xa4\
+\x68\x89\x8d\x36\xdc\x8b\xf3\xff\x00\x65\x8c\x96\xc2\x92\xd1\x58\
+\xde\x12\x7b\x25\x5e\x89\x27\x9e\x3d\x2a\x54\xd4\x6f\x14\xf5\x7e\
+\xb4\x23\x87\xc3\xb4\xe6\x44\x6e\x46\x19\x95\x21\x70\xbc\x64\xc5\
+\x71\xc5\x16\x43\xbc\xa8\x23\x77\x1b\x8f\xa9\xc6\x33\xf3\x5d\x09\
+\xd0\x2b\xdc\x49\xf2\x61\x3b\x1e\x57\x8b\x30\xc2\x6e\x3d\xc1\x95\
+\x0c\x29\x0a\x6b\xca\x83\xf2\x0a\x7d\x7d\xc5\x52\x9a\xe2\x74\x59\
+\x0a\x8c\x21\xb6\xcb\x48\x65\x3e\x1b\x69\x6d\x20\x00\x90\x06\x3e\
+\xbf\x5a\x9b\xfe\x8a\x8f\x1f\xe9\xd5\xc1\xa5\x94\x80\xe4\x1d\xd9\
+\x50\xec\x43\x89\xc7\xf3\xc7\xe3\x48\xc6\xd3\x5c\x2c\xcf\x91\xab\
+\x03\x51\xba\xa9\x2e\x67\x5b\x82\xd2\x23\x07\x83\x45\x6b\xc0\x1e\
+\x51\xdb\x9e\xe7\xd7\x1c\x53\x16\xa4\xb6\x34\x82\x64\xc6\x65\xa0\
+\xc1\x4f\x88\xb4\x21\xb0\xa0\xbc\x9e\x4a\x49\xec\x3d\xc0\xf7\xf8\
+\xa9\x1c\x21\xb1\xa0\xa0\x82\x49\x47\xe3\x5a\xe5\xc6\x5b\xc9\x75\
+\xb4\x3a\x5b\x5f\x2a\x6f\x27\x09\xc9\xee\x0f\xc1\x1f\x85\x72\x2d\
+\x74\x75\xe3\x2c\xac\xae\x11\x65\x87\x71\x43\x49\x7d\xb7\x5d\x70\
+\xb7\xb9\x58\x4e\x32\x9c\x9f\x5c\x76\xc1\x3f\x95\x7b\x74\xd0\x59\
+\x82\x96\xd8\x91\xfb\x2d\xa0\x05\x31\xc9\x4e\x47\xa8\x1d\xf3\xeb\
+\x8a\x9a\x16\x03\x72\xd6\x10\xde\xf6\x52\x72\xf2\x14\x13\x96\xbd\
+\xf0\x3d\x52\x4e\x2a\x47\x62\x4c\x2f\xba\xd2\x52\xb6\xf0\x49\xcf\
+\x73\xee\x3e\x71\x55\x85\x24\xf4\x63\x9e\x2a\x70\xd5\x14\x5c\xed\
+\x0b\x70\x8c\x94\xc9\x6d\xbf\x15\x0c\x84\xa0\x06\x89\x19\x23\xe3\
+\x9c\x11\xf9\xd2\x17\x2d\x2e\x43\x49\x5c\xb6\x65\x3e\xea\x94\x3c\
+\x13\x90\x48\x1e\xb9\x1e\x9d\xbd\x79\xae\x9e\x30\xa3\xc8\x28\x25\
+\x2d\x00\x46\x42\x47\xef\x1f\x9f\xf5\x9a\xd1\x3f\x48\xd9\x26\xc7\
+\x5b\x1f\x62\x43\x24\x1c\xe1\xb2\x40\xe7\xbe\x47\xaf\xad\x12\xc2\
+\x4b\x78\xb2\xd0\xe9\x34\xbd\xf4\x73\x73\xca\x92\x72\x11\x18\x04\
+\x25\xc1\xb5\x41\x24\xee\x18\x39\xc8\xf5\x39\xe3\x3d\xab\x6c\x49\
+\x57\x24\x20\xa8\xdb\x1f\x4b\x9e\x38\xf0\xc0\x5f\x07\x00\x8e\x31\
+\xce\x06\x7b\x9f\x8c\x55\xd9\x75\xd1\x01\xb6\xc7\xd8\x5c\xf0\xb0\
+\x0e\x06\x3f\x21\xff\x00\x95\x47\x67\x69\xc5\x31\xbd\x4b\x8e\x94\
+\x85\x61\x1b\x92\x0e\x4f\x3d\xbe\x9d\xeb\x34\xe9\xd4\x86\xe8\xd3\
+\x0c\x55\x29\xad\x0a\xc5\xc8\xf7\xa7\x5a\xf0\x5e\x0c\x23\x78\x2b\
+\x74\x00\x4a\x46\x14\x32\x33\xc6\x38\xf6\x35\x82\xf4\xf3\x4e\xc9\
+\xcc\x89\x2e\xba\xa2\xb5\x06\xb7\xab\x6a\x06\x4e\x71\xc7\x07\x80\
+\x07\xf2\xa9\xd4\xbb\x6a\xd8\x65\x69\x4c\x72\xfa\x57\x94\xa8\x2d\
+\x38\x00\xe7\x24\xa8\xfb\x7d\x3e\x29\x13\xd1\xdb\x53\x4b\x4c\x72\
+\x92\x55\x80\xa2\x3d\xbf\xf2\xf7\xa4\x39\x49\x6c\x68\x55\x13\xd8\
+\x8e\x38\xcb\x71\x5f\xfb\x34\x76\x5a\x68\x38\x47\x88\xa6\xbc\xa5\
+\x2a\xce\x70\x7f\xb5\x93\xeb\x59\xb1\x6e\x2a\x7c\x3b\x32\x3b\xeb\
+\xdd\x92\x86\x5b\x40\x52\xb2\x3f\x78\x9c\xf1\x9c\x7a\xd4\x91\x98\
+\x28\x2c\x78\x88\xda\xf3\xe5\x01\x28\x0d\xa7\xcb\x91\xea\x4f\x6a\
+\x72\xb5\xdb\x84\x73\x94\x21\xb4\x12\x09\xc2\x07\xaf\xa7\x34\xbd\
+\x59\x57\x51\x24\x37\x59\xed\xaa\x43\x0a\x43\x81\xad\xff\x00\xf0\
+\x4d\x04\x7d\xc2\x7d\x33\xea\x7e\x6b\xcd\x73\x6b\x2d\x68\x8b\xb3\
+\xce\x20\x94\xb7\x11\xce\x0f\xb6\xde\xd5\x34\xb4\x5b\x5f\x59\x0e\
+\xed\x04\x81\xe5\xdc\x30\x09\xa4\xdd\x4e\x65\x0a\xd2\x53\xa1\xa9\
+\x29\x52\x5e\x65\x48\x71\x25\x45\x20\xa4\xf0\x46\x47\x23\x8f\x6a\
+\x74\x68\xda\x39\x99\x92\x55\xfa\xe9\x23\x92\x74\x8d\x95\xfd\x4b\
+\xa3\x66\xc0\x45\xdd\xc6\xee\x16\xc4\x87\xe0\x42\x75\x25\x41\xe4\
+\x14\xf9\x83\x67\xba\x54\x9c\x13\xec\x47\xd2\xa1\x53\x63\x48\x83\
+\x7c\x75\x2f\xb4\xb6\x9e\x52\xb2\xe6\xe4\xf6\xcf\xde\x18\xf9\x39\
+\xa9\x5c\xd3\x2f\x4a\x6b\x3b\xad\xbe\x13\xeb\x71\xfb\x5c\xa5\x16\
+\x55\x9f\x32\xd2\x85\x03\xb4\xe3\xdd\x2a\x20\xfd\x4d\x49\xe6\xdb\
+\xed\x57\xab\x95\xc6\x59\x77\x88\xef\x86\xe3\x15\x73\xfb\x32\xe6\
+\x52\x09\xf5\x21\x27\xf9\x57\x5e\x15\xa5\x4e\xa5\xd2\xbc\x65\xaa\
+\xf8\xd8\xc8\xe8\xd3\xab\x04\xdb\xb3\x8f\x6f\xc8\xd1\xa4\x5b\x6c\
+\x37\x21\x6d\x24\xa1\x68\x1b\x5d\x4a\x53\x95\x14\x9f\x6c\xf0\xa0\
+\x06\x46\x3d\xbd\xea\x40\xe3\x0b\x7e\x32\x98\x88\xfa\x6d\xef\x6c\
+\xc3\x5b\x1b\xdc\xd8\xe3\x70\xcf\xf7\x08\x27\x9f\x4f\x6a\x6b\x5b\
+\x4c\xda\xe2\x96\x5a\x01\x32\x49\x21\x2b\xcf\x74\xf7\x19\x1e\xa3\
+\xe6\xb1\x8b\x76\x99\x16\x64\x55\xb8\xe7\xf5\x45\x45\x0b\xf4\x71\
+\x0a\x18\x29\x27\xd8\x91\xd8\xfa\xd2\x2b\x46\x51\x86\x6b\x6a\xc7\
+\xd3\x9a\xab\x5a\xd0\x92\xb2\xfb\x09\x51\x2a\x54\x2d\x42\x88\x57\
+\x86\x19\x86\xe9\x50\x27\x24\xa5\x2b\x57\xb2\x55\xdb\x24\x72\x0f\
+\x63\x5d\x5d\xd1\x75\xb1\xf6\x26\xc2\x46\xde\xdd\xfb\x8a\xe6\x6d\
+\x40\xeb\x1a\x96\x04\x78\x56\xe4\xb6\x5c\x69\xc0\xec\x17\x15\xc9\
+\x69\x59\xf3\x32\xaf\x74\xe3\x91\x9f\x6c\x57\x4b\x74\xcd\xa6\xe2\
+\xb4\xca\x77\x02\x43\x69\x07\x1e\xbc\x72\x6b\xb3\xd1\x52\x94\x5a\
+\x8c\x79\x9e\x53\xa6\x24\x9d\x65\x3b\x59\xf3\x2e\xf8\x2b\x42\x90\
+\x12\x71\x58\x4b\x80\x87\x3c\xed\x1c\x2a\x91\xdb\xc0\x2c\x83\x9e\
+\x3b\xd3\x8c\x10\xb2\x4a\xca\x8e\xdf\x40\x6b\xab\x2b\xc1\xb6\x99\
+\x95\x35\x35\x66\x8d\x50\x9d\x71\x9f\xd8\x3c\x9c\x7b\x1a\x29\xc1\
+\x48\x42\x8f\x99\x20\xd1\x49\x94\xd4\x9d\xc6\xc6\x0e\x2a\xd7\x2b\
+\xce\x9d\xa4\x33\xa2\xed\xea\x6d\x1f\x77\xc4\xc7\xff\x00\xb8\xaa\
+\x96\x89\xef\x1e\x12\x85\x7e\x55\x5c\xe8\x3b\x93\xcb\xd2\x70\x62\
+\x45\x47\x3f\xb4\xca\x87\x3d\xdc\x55\x4d\xe0\x25\xc6\x98\xcb\xcb\
+\x0a\x56\x3b\x57\x42\x54\xd6\x54\xe4\x73\x28\xd4\x76\x4a\x23\x92\
+\x67\x29\x6a\x0d\x38\x80\x73\xf8\xd6\xa9\x56\x64\x38\xe0\x90\xc1\
+\xf0\x96\x39\xc0\xf5\xa2\x13\x8c\xa5\x45\xe7\x56\x94\x81\xc7\x7a\
+\x71\x8f\x2e\x3c\x80\x7c\x27\x01\xf6\xc1\xac\xd2\x72\xa6\xef\x04\
+\x6b\x8a\x8d\x45\x69\xb2\x0a\xab\x24\x0b\x7e\xa1\x7e\x60\x92\xe4\
+\x9b\xcc\xa4\x04\x9f\xb4\xcb\x2e\x3a\x96\x81\x52\x82\x10\x92\x7c\
+\xa8\xc9\x27\x81\xe9\xcf\x6a\x79\x8d\x12\x63\xb8\x0a\x46\xc1\xea\
+\x4d\x73\xfe\x9c\x76\xf5\x65\xd4\xbd\x5b\xd7\x0f\xfe\xa4\x9d\x76\
+\xb1\x3e\xa0\xdb\xef\x40\xdc\xe2\x5d\xf3\x20\x16\xd4\x55\x96\xd1\
+\xb3\x72\x4a\x47\x70\x47\x3c\x54\xf6\xfb\xd5\x1d\x4d\x61\xd0\x16\
+\x4d\x43\x74\x6e\xc0\xc4\x8d\x51\x2a\x38\xb5\xa4\xf8\x9e\x04\x08\
+\xee\xa0\x2b\xc4\x90\xa2\x41\x59\x4a\x4a\x49\xc6\xd1\xc9\xf6\xa9\
+\x58\x96\xa3\x64\x8c\x71\xe1\xbb\xca\x57\x5f\xdd\x8b\x46\x5d\xb8\
+\x33\x18\x2d\x3c\xac\x77\x34\x8b\xef\x24\x28\x0a\xaa\xe1\xf5\xc5\
+\xd6\x34\x86\xb6\x7e\xe6\xab\x5d\xe6\x5e\x9d\x5b\x29\x8b\x2a\xdb\
+\xb9\x11\xe7\xa5\xe3\xb5\x07\x04\xab\x6e\xd3\xf7\xb9\xfa\x76\xad\
+\x7d\x32\xea\x5c\xfb\xce\xb8\xfe\x8b\x5c\xa7\xd8\xae\xa2\x45\xb8\
+\x4e\x66\x55\xa4\x29\x28\x65\x7b\xb0\xb6\x16\x14\xa5\x64\x81\x93\
+\x9c\xfb\x67\xbf\x17\xa3\x55\xc9\x75\xb7\x26\xa5\x5a\x59\x96\x5e\
+\x7f\xd1\x7b\x5b\x17\xbe\x2a\x6b\xdb\x8f\x2c\x7b\x73\xde\xa8\xeb\
+\xd2\x46\xb2\xfd\x21\x62\xe8\x9b\xd3\xd2\x5c\xb0\x41\xb2\xaa\x61\
+\x84\xd4\x85\xb4\x87\xde\x2a\xfb\xcb\x28\x20\x9c\x05\x0c\x73\xc6\
+\xdf\x93\x9a\xfa\xe9\xa9\xf5\x54\x7e\x84\xeb\x3b\x53\x37\xb7\x96\
+\xdd\x8f\x50\x1b\x7a\x24\x3e\x54\xb7\xcc\x62\xe0\x09\x42\x57\x9c\
+\x82\x14\x33\x93\x9e\x09\x1e\xd8\xcc\xf4\xa8\x39\xe2\xd2\x83\x4d\
+\x76\xf9\x1d\x71\x1f\xfa\x84\xfd\x29\x35\xcc\xf9\x00\xf4\xa6\x3d\
+\x2d\x2e\xe1\x68\xe9\xfa\x67\xea\x49\x8c\x4c\x7a\x24\x45\x48\x79\
+\xd8\xcc\x96\xd2\x5b\x4a\x4a\x80\x09\x2a\x3c\xed\x1e\xfc\x9a\xa6\
+\x6c\x1d\x70\xba\xdd\xaf\x3a\x69\xc9\xb2\xb4\xda\xe2\x6a\x09\x8a\
+\x87\xfa\xb2\x21\x59\x99\x6e\x25\x7b\x1a\x53\x8a\x2a\x21\x5b\x8e\
+\x33\xe5\x1c\x11\xda\xa2\x3a\x4f\x51\xd5\x71\x11\x84\x12\x7b\xb2\
+\xf6\xc7\x00\x7b\xf1\x4b\xc4\x54\x96\x86\x06\x0e\x2b\x9f\xec\xdd\
+\x55\xd5\x53\x34\xec\x6b\x7a\xd9\xb7\xa7\x56\x2b\x55\x8b\x13\x8d\
+\x86\x54\x1b\x42\x07\x2a\x77\x69\x56\x78\x00\x8e\xfe\x9d\xa9\xd7\
+\xaa\x7d\x58\xbd\xe8\x9b\xa4\x89\x2c\x6a\x1d\x23\x75\x8f\x16\x6a\
+\x59\x7e\xcc\xc3\x2e\x19\x4d\xb2\x54\x79\x53\x81\xc2\x90\xe8\x03\
+\x90\x40\x1f\x1e\xf7\xa9\x37\xa5\x84\xc3\x11\x4d\x45\xc9\xec\x5b\
+\xe9\x0d\x2e\x53\x91\x1a\x96\xca\xe4\x34\x01\x71\xa0\xb0\x56\x90\
+\x7b\x12\x3b\x8f\x4a\x5a\xd4\x62\x1b\xda\xa3\xc5\x50\x73\x6f\x33\
+\x34\xef\x59\x7a\xcd\x7d\x80\x1a\x32\xe0\x59\x22\x3e\xc8\x75\x3b\
+\x93\xb9\x31\x9b\x23\x23\x23\x22\xa4\x48\xea\x56\xa2\x53\xdd\x25\
+\x41\x4c\x1c\x6a\xd6\x9c\x5d\xcb\xf6\x47\x82\x94\x34\xa1\xe1\xf9\
+\xbc\xbc\xac\xf7\xcf\xa5\x2d\xd4\x93\x2f\x0a\xd4\xd3\x77\xed\xfa\
+\xd8\xb8\x50\x84\xa1\x24\x24\x56\xb0\x54\x49\x04\xd5\x1d\xac\x7a\
+\xbb\x7a\xd3\x1a\xb2\x13\x49\xd4\x3a\x4a\xfb\x11\xfb\xb2\x20\xc9\
+\xb7\x41\x61\xc0\xfc\x56\xd4\xa3\x85\x78\xbe\x21\x49\x58\x03\x04\
+\x10\x39\x3d\x87\xa6\xb8\x53\xb5\xb5\xcb\xf4\x95\xd4\x56\xf8\x37\
+\xf8\x0c\xb7\x12\xd4\xdf\x86\x87\xa2\xad\x6d\x86\x54\xa4\xa9\x29\
+\x09\x0b\x18\x58\x2b\xe5\x7e\xb8\xec\x2a\x12\x7b\xb2\xd2\xc5\xc2\
+\xf6\x8a\xd6\xf6\x2f\x26\xdf\x61\xd4\x95\x34\xf2\x1c\x48\x51\x49\
+\x28\x50\x20\x10\x70\x47\x1e\xa0\xfa\x56\x69\x50\xdb\xc1\xcd\x73\
+\x76\x85\xea\x1c\x8d\x3b\xd1\xdf\xb5\x5b\x6c\x96\x86\xaf\x37\x6d\
+\x52\xe5\xb6\x33\x6d\x36\xb4\x47\xf1\x96\x13\x97\x96\x37\x13\xe9\
+\xd8\x28\x7a\x63\x81\x52\x19\x9d\x48\xd5\x9a\x7e\x4e\xb2\xd3\x97\
+\xa1\x69\x93\x79\xb2\xd9\x4d\xda\x0c\xb8\xac\xad\x0d\x3c\x8e\x01\
+\x0b\x6d\x4a\x38\x21\x4a\x03\x83\xc8\xa9\x4a\xe8\xaa\xc6\x42\xc9\
+\xb2\xe9\x74\x05\xe4\xa7\xbd\x64\xd9\x2a\x6f\x6f\xad\x52\x56\x0e\
+\xa6\x6b\x13\xa8\xf4\x2a\xee\xf1\xec\xea\xb5\x6b\x26\xdd\x2c\xb1\
+\x1d\xb7\x03\xd1\x76\xa5\x24\x12\xb2\xac\x2b\x3b\xc1\x23\x68\xf5\
+\x1e\x99\x2e\x9f\xa3\xb1\x79\x5a\xa3\xa9\xde\x3a\xdc\x3e\x1e\xa9\
+\x90\x12\x16\x49\xc2\x77\xaf\x00\x67\xd2\xac\xdd\x90\x43\x11\x19\
+\xcd\x25\xcf\xed\x72\xc7\xb8\xc5\xde\x92\x95\x0e\xf5\x11\xbe\x59\
+\x50\x5a\x51\xd9\x92\x7b\x55\x88\xe2\x12\xea\x4f\xbd\x34\xdc\x63\
+\x05\x24\x82\x29\xd4\xaa\x58\x6d\x48\x5c\xe2\x0f\xd2\x59\x9d\x71\
+\xf6\x81\x6c\x81\x65\x92\x9b\x52\x8e\x54\xf4\x70\x57\xe3\x9f\x65\
+\x63\xb0\x1e\xc7\xd7\x9f\x6a\xa9\x74\xc7\x4d\x35\x35\xd4\x29\xf9\
+\x6c\x8b\x73\x29\xed\xf6\xa4\xa9\x25\x7f\x41\x8a\xfa\x07\xa8\x2c\
+\xc9\x75\x45\x41\x27\x35\x0d\x9f\xa6\x0b\xab\xf3\x24\x91\xf3\x59\
+\x65\x47\x11\x52\x76\xd3\xc4\x21\x5b\x87\x1b\x24\x72\x2d\xd7\x41\
+\x6a\x02\xb4\x46\x8c\x84\x48\x6c\x01\xc8\x1b\x02\x4f\xbe\x69\xbd\
+\x1a\x32\xea\x64\x98\xf3\x58\x97\x35\xd0\x32\x96\x9a\x51\xf0\xd0\
+\x33\xdd\x4b\x35\xd6\x92\xb4\x93\x63\x3e\x5c\x53\x4c\xdb\x03\x2c\
+\x20\x82\xad\xa3\xd4\x66\x99\x53\xa3\xea\x25\xb9\x68\xf4\x84\xa1\
+\xba\x4c\xe5\x6b\xae\x81\xbb\x21\x45\x61\x70\xd3\x9e\xc8\x42\xc9\
+\xc0\xfa\xe2\xa4\x1d\x1b\x65\x5a\x67\xa8\x71\xd6\xb9\x49\x79\x32\
+\x19\x53\x0b\x00\x14\xf7\x20\xe4\x67\xd0\x10\x2a\xde\xbe\xdb\xa2\
+\x21\xb2\xae\x30\x7b\x1c\xf7\xa8\x02\xa1\x32\x9d\x47\x0d\xc8\xec\
+\x27\xc7\x32\x02\x77\x84\xe1\x5b\x7d\x46\x7f\x2a\x45\x7a\x31\x54\
+\x65\x79\x2d\x87\x60\xf1\x73\x9e\x22\x2e\xdc\xce\xa1\xb1\x3a\x5d\
+\x8c\x84\xac\x80\xb4\xe0\x0c\x9c\xe4\x7f\xac\xd2\xd7\x99\x56\xf3\
+\xcf\xec\xf1\xfe\xb9\xa6\xed\x1c\x80\xf5\xb1\x90\xf8\xc3\x88\x18\
+\x3c\x7f\xaf\xc2\xa4\x25\x05\x0a\x2d\xbb\x8d\xa7\x80\xbf\x43\xf1\
+\x5e\x7e\x31\xba\x3d\x14\xa5\x69\x08\x43\x01\xe4\x6c\x70\xf9\xd2\
+\x0a\x4a\x88\xe7\x1f\x51\xdf\x8f\x4a\xf1\x88\xea\x8a\xc6\xd7\x4b\
+\xc8\x59\x23\x12\x5a\x1b\x93\xc7\xa9\x1e\x87\xf9\xf3\x4b\x7e\xcc\
+\xa4\xb8\x36\x1f\x32\xbe\x3b\x7d\x29\x54\x55\xad\xa1\xe6\x3c\x91\
+\x8e\x78\xff\x00\x42\xaf\x15\xae\xa5\x5c\xb4\x3c\xb7\xc9\x74\x2b\
+\x6e\x03\xc9\xc8\xf3\x27\x9c\xfc\x91\xdc\x53\xfb\x0f\xb6\x5a\xf2\
+\xe3\x70\xc7\xaf\x7a\x65\x92\xcc\x77\x16\x14\xa6\x46\xff\x00\x45\
+\xa7\xca\xa1\xf8\x8e\xf5\x93\x29\x2b\x40\x6c\xad\xd5\x03\xc6\x4a\
+\xb3\xc5\x35\x4a\xc2\x25\x14\xf5\x16\xc9\x79\x4a\x56\xd4\x05\x67\
+\x39\xc9\x38\x14\x95\xe8\xee\x48\x3e\x7f\x0d\x1c\xfd\xe4\x8d\xc4\
+\x7b\x71\x4a\xa1\x42\x61\xa4\xf0\xd2\x4a\x7d\x77\x1c\xe7\xe4\xd2\
+\xf0\x50\x1b\xda\x9c\x04\xf6\xc2\x7b\x51\x6b\xee\x56\xf6\xd8\x8b\
+\xb9\xa7\x58\x71\x68\x5b\xac\xa9\x64\x02\x32\xea\xb8\xcf\xc2\x7d\
+\xa9\x24\xad\x25\x09\xc5\x38\x95\x21\xbd\xaa\x56\x4a\x52\x00\xcf\
+\x1e\xc2\xa5\x6b\x0a\x3c\xed\x01\x5d\xb2\x6b\xc0\xd0\x1f\x7c\x67\
+\xdf\x03\x19\xa5\xba\x30\x7c\x87\x46\xb4\xe3\xcc\x89\xb3\xa5\xdb\
+\x68\x6c\x42\x01\x40\xe0\x01\xfb\xa3\xd2\x96\x46\xb0\xb2\xc1\xce\
+\x01\xe7\x22\xa4\x29\x28\xdd\x8f\xe0\x2b\x05\xa1\x64\xe7\x01\xb4\
+\xfb\x9e\x4f\xe1\x54\x54\x60\xb9\x03\xaf\x37\xbb\x1a\x94\xc8\x40\
+\x4a\x10\x82\x54\x79\x00\x76\x03\xe6\xa2\x7a\xed\x9f\x16\x1a\xa3\
+\x24\x95\xa9\xd5\x24\x15\x27\xbe\x77\x0e\xdf\x02\xa6\xb2\xbf\x64\
+\x85\x25\x03\x69\x3f\x78\xab\xb9\xfa\xd4\x79\xd8\x89\x7a\x4a\x9d\
+\x74\x12\x12\x9e\xdd\xf9\xa4\xd7\x8d\xe3\x64\x32\x8c\xac\xf3\x33\
+\x8f\xfa\x99\xa5\xae\xfa\x73\xa8\x92\x1e\x94\xd3\xf3\x62\x5c\xde\
+\x72\x44\x69\x0c\xb0\x7f\xda\x16\xa3\x90\xc1\x09\xec\x42\xb3\xc7\
+\x63\x48\xa4\x4b\x95\x09\x6f\xef\x07\xc4\x52\xc3\xb2\x22\xf0\x76\
+\x38\x78\xf2\x91\xf1\x80\x47\xe5\x5d\x73\x73\xb3\x19\xd0\xde\x88\
+\x48\x4a\x8a\x4e\x17\xec\x7d\xc7\xcf\x7a\xa0\x3a\xab\xa3\xdb\xd3\
+\x32\x17\x7d\xb9\x38\xd4\x7b\x73\x48\x25\xb8\xed\x24\x85\x49\x7b\
+\x38\x08\xcf\xf1\xfc\x0d\x3f\x0d\x55\xb9\x24\xd6\xb6\xb2\x17\x89\
+\x6f\x27\x57\x6b\xdd\xae\xd2\x1e\xd4\x37\xe6\xb2\xc0\x53\x72\x52\
+\xeb\x83\x72\x92\xe3\x64\x14\x63\xd8\xfb\x1a\x7b\xb7\xd8\xe5\xa1\
+\x68\x2b\x69\x67\x1c\x6e\x03\x9c\x1f\x4a\xd9\xa0\xf5\x0d\xb2\xea\
+\xe7\xda\x11\x21\xa6\x54\x80\x0b\x8c\xbc\xe0\x4a\x90\x7d\x7b\xf7\
+\x1f\x35\x76\xe9\xb8\xf6\xeb\x8c\x64\x00\x1b\x24\xf2\x0a\x48\x20\
+\xfe\x35\xe8\xf0\xf4\x28\x4e\x9e\x49\xbd\x4f\x31\x5f\x13\x56\x35\
+\x1c\xb6\x65\x6b\xa5\xb4\x7c\x74\xdc\xcc\xc0\x87\xd2\xea\x95\xb9\
+\x45\x47\x85\x1f\x7f\xaf\xf9\xd7\x42\xe8\x68\x31\xe2\x30\xd9\x70\
+\xe5\x40\x53\x65\xb2\xc8\xdb\x6f\xa5\xb0\x81\xdf\x82\x2a\x7f\x67\
+\xb5\xc5\x8e\xd2\x4a\xc0\x27\x1e\xb5\xbf\x0f\x84\xa7\x85\x8b\xb7\
+\x33\x25\x4a\xd5\x2b\xcf\x34\x9d\xd8\xfb\x18\xef\x65\x2a\x6f\xee\
+\x8a\xc5\xfb\xd1\x64\xf8\x6d\xb7\xdb\xbd\x64\xdc\x86\xda\x6f\x09\
+\x1c\x0a\x8f\x5c\x64\x9f\x19\x6b\x09\x18\x1e\x95\x34\xe9\x29\xb7\
+\x99\x68\x5a\xa5\x57\x05\xd5\x7a\x92\xdb\x5d\xcd\x12\xf0\x14\x36\
+\xab\xd8\xd1\x51\x38\x8f\xac\x20\x38\x95\x6d\x57\xd6\x8a\xa4\xf0\
+\x69\xbb\xc5\xd8\xb5\x3c\x6b\x4a\xd2\x57\x21\x9d\x33\x8b\x39\xcd\
+\x3d\x13\xec\xe0\x84\x9d\xfe\x6f\xfa\xea\xab\x16\xd8\xcc\x86\x41\
+\x12\x5c\xdc\x7d\x78\xed\x4c\x7d\x33\x4a\x63\xe8\xa8\x29\x40\x4e\
+\x47\x88\x09\x3f\xfc\xc5\x53\xcb\xcf\x24\xa8\xec\x39\x34\xf4\xdc\
+\x95\x91\x9a\x9a\x51\x8a\x6c\x41\xa8\x4a\x50\xe2\x42\x57\x84\x9f\
+\x4c\xd2\x0b\x64\xe5\x46\x92\x97\x1a\x59\x29\x07\xcc\x33\x58\x5d\
+\x1d\xf1\x64\x60\x9c\xed\x14\x89\xa6\x5c\x65\x4a\xc0\x38\x3c\xe4\
+\xd3\x92\xd2\xcc\x5b\x96\xb7\x43\x03\xfa\x31\x4b\x87\xaf\x22\xb7\
+\x79\x38\xd5\xef\x97\x54\xaf\xb2\xff\x00\xb9\x79\x51\xc6\x37\xf9\
+\xfe\xf7\x7f\x2d\x39\x5c\x34\x82\x6f\xda\x2f\x4d\x69\x65\xdc\x5f\
+\x8b\x3b\x4f\x26\x32\xad\xf7\x36\x1b\x1b\xda\x75\x84\x25\x21\x7b\
+\x09\x23\x07\x19\xdb\x9e\xf8\xe7\x8a\x70\x65\xc7\x8b\x9c\x8f\x2d\
+\x4a\xb4\x74\x55\x2d\xd5\x48\x5a\x30\x3e\x69\x15\x29\x53\x84\x5b\
+\xb1\x6a\x71\x73\x96\x5e\xdf\xec\x6f\xbb\xe8\x9b\x96\xa2\xd0\x97\
+\x6d\x39\xae\x35\x22\x6f\x2d\x4e\x42\x3c\x37\x63\x5b\xd3\x10\xb0\
+\x52\x77\x05\x01\xb9\x59\x3b\x82\x4f\x27\x1c\x63\x1c\xd3\x7e\x8b\
+\xb1\xea\x7b\x36\x1a\xbc\xea\xd6\xef\x31\x1a\x63\xc1\x69\xbf\xd5\
+\xa9\x61\x79\xc8\xc2\x94\xb0\xb3\xb8\x80\x08\xec\x33\x9c\x9a\xb0\
+\xee\x8e\x06\xe1\xa8\x77\xf4\xa6\x46\x90\x56\xa4\x23\x3d\xeb\x36\
+\x1d\x75\x5b\x35\xd7\x84\x54\xd5\xb7\x21\x9d\x4e\xd1\x37\xc7\x64\
+\xb1\xd4\x0d\x08\xff\x00\x85\xab\xad\xb1\x15\x1d\xb6\x14\x84\xa9\
+\xb9\x8d\x28\xf2\x85\x6e\xe3\x70\x0a\x51\x07\xd4\x80\x3d\xb0\xd3\
+\x6c\xe9\x64\x1b\x97\x43\xdf\xd2\xf2\x1e\xb9\xda\xe6\xdd\xde\xfb\
+\x74\xe9\x13\x59\x41\x7c\x4a\xde\x09\x2a\x42\x55\xb4\xa7\xca\x00\
+\x01\x5d\x8e\x73\x92\x6a\xeb\x68\x78\x51\xc0\xed\x81\x4c\x77\xb7\
+\x49\x4e\x32\x72\x4e\x69\x54\xe3\xc4\x99\x35\x68\xc2\x0b\x37\x76\
+\xc6\xbd\x2d\x6b\x96\x8d\x30\x6c\xd7\xfb\x9b\x57\x92\xe3\x4a\x65\
+\xc7\x51\x18\x30\x95\xb6\x53\xb7\x6e\xd0\xa3\x8e\x33\xce\x7d\x6a\
+\x31\xa4\x7a\x7f\xa8\x74\x64\x78\xd6\xbb\x76\xb6\x54\x8d\x37\x11\
+\xe5\x2d\x98\x12\x2d\x88\x53\xc9\x6d\x4a\x2a\xf0\xfc\x7d\xfd\xb2\
+\x4f\x3b\x73\xed\x8e\xd5\x31\xb3\x3d\x96\x53\xee\x9a\x77\x7d\x21\
+\xc6\x0d\x44\xe3\x92\x63\xa1\x08\xd4\x82\x7c\xd1\x52\x5b\x3a\x4f\
+\x1a\x1f\x59\x5d\xea\x0a\x6e\xea\x53\x4e\x38\xb7\x91\x6d\xfb\x3f\
+\x95\x0f\x2d\xa0\xda\x9c\xdf\xbf\x92\x7c\xc7\xee\xfa\xfc\x52\x1b\
+\xb7\x41\x9d\x99\x63\xbf\x58\x63\xeb\x37\xa3\xd9\xae\xd7\x15\x5c\
+\xd3\x18\xdb\x90\xb5\xb7\x20\xff\x00\x69\xcd\xd9\x5a\x06\x07\x94\
+\x6d\xe4\x0e\x7b\xe6\xd6\x00\xa7\xf0\xa7\x48\xca\xde\xd0\x35\x15\
+\x55\xb5\x45\x29\xe1\xe9\x4a\xe9\xaf\x4f\x72\xa8\xb8\x74\xe9\xb9\
+\x9a\xc7\x5b\x5d\xa6\xdd\x1c\x5b\x1a\xa2\x03\x70\x9d\x8e\x86\x76\
+\xa9\x84\xa5\xa4\xb7\xb8\x2f\x71\xdc\x7c\xb9\xfb\xa3\xf1\xa6\xbb\
+\x1f\x4a\xee\x30\xa6\x69\x39\x17\x1d\x5e\xe5\xc0\x69\x67\x31\x6f\
+\x68\x40\x4b\x49\x0c\x94\x90\xa4\x1c\x2c\x92\xa3\x84\x79\xf3\xd9\
+\x18\xdb\xce\x6a\xdb\xba\x30\x52\xbf\x15\x23\x8a\x6d\x29\x5e\xed\
+\xd9\x38\xad\x10\x8c\x26\xae\x22\xa5\x25\x19\x6a\xbd\x5e\xff\x00\
+\xc9\x50\xb3\xd1\x45\xb1\x67\x66\xc2\x9d\x5e\xf1\xb4\xc5\xbb\x26\
+\xe9\x09\x83\x01\x1b\x90\xe8\x50\xcf\x88\xbd\xd9\x73\xcb\xb9\x23\
+\xee\xe3\x76\x4e\x70\x05\x4e\x23\x68\x39\xac\xf5\x59\xed\x77\x6a\
+\xd4\x62\x18\x99\x1d\xa8\xf3\xa1\x39\x04\x3b\xe2\xb6\x82\x93\x84\
+\xaf\x70\xd9\x90\x90\x33\x83\x8e\x6a\x5c\xcb\x41\x79\x56\x73\x8a\
+\xdd\x19\x44\x3b\xb4\x77\xcd\x56\x71\x56\xb2\x26\x9d\x18\x45\xa7\
+\x62\xb6\x83\xd1\x28\x4d\xf4\xed\xcd\x29\x23\x50\x3c\xb9\x28\xbc\
+\x2a\xef\x0a\xe0\xd4\x50\x85\x47\x7b\x8d\xbe\x42\xa5\x05\x01\xce\
+\x79\x19\xcf\xa6\x2b\x7b\x9d\x24\x7e\x54\x6d\x51\x32\xf5\xa9\xd5\
+\x72\xbe\xea\x0b\x7f\xea\xf5\x4e\x10\x43\x4d\xc6\x67\x18\x09\x43\
+\x21\x67\xd4\x02\x7c\xdc\x91\xe9\xcd\x59\xc5\x45\x1d\xeb\x2d\xfc\
+\x0f\x9a\x46\xa8\xd1\xec\xf4\xb6\xb1\x5b\x45\xe9\x49\x0e\xf4\xf1\
+\xd3\x7d\xe3\x46\xa1\x68\xc7\xd9\x3f\xdd\x9b\x92\xda\x7f\xb7\xfb\
+\x3f\xb9\xfd\xee\xf5\x29\xd1\xfa\x7e\xe3\x62\x9b\x7b\x7e\x76\xa7\
+\xb8\xde\x9b\xb8\xcd\x32\x63\xb5\x28\xf9\x61\xa0\xe7\xf6\x48\xe4\
+\xf1\xcf\xa6\x07\x03\x81\xce\x5f\x9d\x7b\x03\x68\x35\xa5\x4f\x00\
+\x39\x34\x28\xb7\xa9\x2a\x14\xe0\xf4\xf5\xa5\x85\x01\x7b\x79\xad\
+\x32\x4a\x56\x93\xcf\x34\x8d\xe9\xcd\xa0\x1c\xac\x71\x4c\xd7\x1b\
+\xf3\x4c\xf6\x58\xcf\xc5\x33\x25\xb5\x61\x2a\xc9\x0b\x26\x21\xac\
+\x12\xbc\x53\x05\xc9\xf8\xad\xe7\x25\x35\x57\xf5\x77\xae\x5a\x7f\
+\x47\x2d\x51\x1c\x5a\xae\x17\x2c\x67\xec\x71\xd6\x3f\x67\xff\x00\
+\xcc\x5f\x64\x7d\x39\x3f\x15\xcd\xfa\xb3\xaf\x7a\xfa\xfc\xea\xd1\
+\x6f\x7d\x9b\x44\x75\x1e\x13\x11\x1e\x70\x3e\x56\xac\x9f\xc4\x62\
+\xa8\xf1\x79\x7d\xd4\x14\xe8\x55\xad\xee\xa3\xa8\x7a\x81\xac\x6c\
+\x9a\x66\xdc\xa9\x77\x59\xcc\xc4\x41\xc8\x40\x59\xf3\xac\xff\x00\
+\x75\x23\x93\x5c\xcf\xd4\x1e\xb8\xcf\x9b\x70\x2c\x69\x76\x0b\x6d\
+\x63\x68\x7a\x42\x02\x94\xaf\x90\x9e\xc9\xfc\x73\xf8\x55\x59\x70\
+\x95\x3e\xe2\xeb\x93\xae\x92\xe4\x4c\x79\xc3\xf7\x9d\x59\x52\x96\
+\x7e\xa6\xa7\xbd\x0b\xe9\xe2\x35\xa6\xa9\x11\xa5\x05\x22\xdb\x0d\
+\x29\x7e\xe0\xf2\x0f\xde\x4e\x70\x96\x81\xf4\xdc\x78\xfa\x03\x59\
+\x6b\xe2\xa4\xd5\xe6\xce\x9e\x1b\xa1\xf5\xbc\xd9\x96\x84\xe9\xee\
+\xb2\xea\x0a\xd5\x7f\xbb\x5c\x65\x31\x6c\xdc\x4f\xda\x16\x49\x53\
+\xa7\xd4\x36\x0f\x18\xf9\xed\xf5\xab\x5f\x4e\xe8\x78\xd6\x9b\x9c\
+\x54\xa3\xc6\x73\xc3\x39\x53\x8f\xb8\x56\xb5\x7a\x66\xae\x49\xec\
+\xc7\x89\x09\x98\x71\x18\x43\x2c\xa1\x3b\x1b\x6d\x00\x04\xa1\x20\
+\x60\x00\x3d\x05\x47\x5e\x67\x32\xdb\x74\x02\x73\xc6\xe1\xee\x2b\
+\xcf\xe2\x71\x35\x2a\x3b\x72\x3b\x14\x28\x53\x86\xb1\x44\xb6\xc8\
+\xd2\x51\x1d\x21\x23\x09\xc0\xcd\x3f\xb4\x90\x50\x37\x84\xad\x23\
+\xb8\x3f\x5e\x0d\x31\xd8\x14\x0b\x3c\x9f\x32\x7d\x71\xde\xa4\x6d\
+\xa4\x2d\xa0\x15\xe5\xc7\xc7\x7a\x65\x3d\x50\xba\x9b\x88\xcc\x65\
+\xa0\x92\xc8\xde\x9f\xec\x77\x1f\x87\xa8\xad\xad\xa5\xbe\x13\x92\
+\x39\xc8\x0a\x38\x22\x94\x16\x9c\x6f\xcc\xde\xec\x7a\xe4\xff\x00\
+\x8d\x6d\x61\xd1\xc8\x71\x04\xfe\x19\xa6\x24\x2d\xc9\x98\x35\x15\
+\x63\x24\x21\x59\xc6\x38\x02\xb7\xb0\xd6\x50\xa1\x92\x9e\xe1\x4a\
+\x00\xf2\x7d\x78\xa5\x6d\xa5\xb2\x06\xd5\x2b\x07\xdc\xf0\x3e\x94\
+\xa5\x0c\xb3\xea\xea\xff\x00\x0a\xbe\x51\x6e\x62\x26\x94\x94\xa7\
+\x1b\x14\x4f\xb9\x4d\x78\xae\x78\x50\xc8\x3e\x83\xd2\x9c\x76\x46\
+\xef\x82\xe7\xc6\x6b\x62\x40\x49\xc2\x10\x84\x0f\xa5\x5b\x29\x19\
+\xc6\xe6\x9a\x75\x5f\x71\x93\x81\xea\xae\x05\x6d\x11\x70\x09\x79\
+\x40\xfc\x26\x97\x10\xa5\x8c\x14\xab\xe7\x9a\xd6\xe3\x58\xf3\x29\
+\x58\x1e\x98\xa1\xa2\x33\x08\xd4\xd8\xc6\xd4\x24\x24\x63\xb6\x38\
+\xad\x0b\x4a\xb3\xb8\xd2\xc7\x16\x0e\x52\x94\x94\xfc\x9a\x44\xf2\
+\x8a\x95\xb5\x24\xe4\xfe\x42\x97\x26\x59\x08\x26\x6e\x52\xfc\x26\
+\xc0\x27\x1e\x63\xed\xf3\x49\x14\xce\x3c\xa8\x19\x09\xe3\x3e\xe7\
+\xde\x9d\x94\xc1\x59\x0d\xb3\xe6\x3d\xc9\xff\x00\x5f\xce\xa9\x3e\
+\xb1\xf5\xc6\xd7\xa6\x14\xfe\x9f\xd1\xae\x47\xbb\x5f\x00\x29\x7e\
+\x60\x21\x71\xa1\x1f\x60\x7b\x38\xe7\xc0\xe0\x7a\xe7\xb5\x2d\xc1\
+\xc9\x9a\x68\x53\x9d\x59\x28\xc1\x6a\x49\xfa\x85\xae\x74\xc6\x82\
+\x69\xb5\x5f\x24\xa9\x53\x9f\x41\x54\x78\x2c\x0c\xba\xee\x3d\xfd\
+\x12\x93\xfd\xa5\x71\xf5\xae\x4b\xea\x36\xb4\xba\x6b\xdb\xe2\xae\
+\xf7\x72\x50\xd3\x6a\x29\x8b\x09\x3f\xd4\xc6\x6f\x3d\x81\xfd\xe3\
+\x8e\xea\xf5\x3f\x95\x31\x6a\x0b\xc5\xca\xe7\x3e\x4d\xd2\xeb\x25\
+\xf9\xd3\x9e\x58\x53\xd2\x5c\x3b\x89\x3f\x3f\x81\xe0\x76\x14\xcd\
+\x31\xe7\x64\xa8\x70\x42\x41\xf2\xf3\xc7\xe5\x5a\xe8\x61\xd4\x35\
+\x67\x51\x46\x9e\x1d\x7f\xb4\x84\x97\x16\x13\xe2\x27\xc0\x58\x52\
+\x89\xf3\x60\xfc\xd3\xff\x00\x4f\xb5\xde\xa0\xd0\xf7\x0f\x1a\x1b\
+\xbe\x3c\x35\x28\x78\xd1\x9c\x39\x6d\x5f\x4f\x63\xf2\x29\x95\x2a\
+\x08\xe3\x21\x38\x3c\x91\xfe\x5f\x35\x8b\x8d\xe5\x2a\x21\x29\x48\
+\x03\x8c\x03\x85\x56\xde\x56\x67\x2b\x11\x86\x85\x5b\xbe\xde\x47\
+\x63\xf4\xe7\xac\x1a\x67\x52\xb2\xd2\x63\x4d\x44\x69\xd8\x19\x89\
+\x21\x41\x0b\xcf\xb2\x49\xe1\x7f\x87\x3f\x15\x6d\xc0\xd4\x0d\xb8\
+\x91\xdc\x2f\xd4\x1e\xe2\xbe\x69\x29\x87\x10\xe7\x88\xd2\x94\x8d\
+\x9e\x60\x52\x6a\xc6\xd0\x5d\x6c\xd6\x5a\x63\xc2\x62\x5b\xe9\xbb\
+\xdb\xdb\xc0\x0c\xca\xc9\x5a\x47\xf7\x56\x3c\xc3\x8f\x7c\x8f\x8a\
+\xd3\x4b\x13\x52\x9e\x9b\xa3\xce\xe2\x3a\x2e\x50\x77\x81\xdf\xad\
+\xcb\x2e\xc7\xf1\x77\x01\xc5\x21\x61\x45\xe7\x8a\x73\x9d\xc7\x9a\
+\xa1\x74\xc7\x5e\xb4\xb5\xfa\x22\x18\xfb\x7a\xed\x33\x14\x39\x66\
+\x5f\x08\x27\xd8\x2c\x71\xf9\xe2\xac\x5b\x26\xb1\x8a\x96\x92\xb4\
+\x3e\xcc\x82\xa1\x9d\xcc\xb8\x97\x07\xff\x00\x69\x35\xb6\x18\xfa\
+\x4f\x49\x68\xce\x5d\x4a\x33\x83\xeb\x22\x74\xe0\x6d\xb5\x14\x13\
+\x92\x7d\xa8\xa6\x48\x97\xd6\x26\x28\x28\x11\x93\xcd\x15\xb6\x33\
+\x8c\x95\xd3\x13\x62\x51\xd3\x5b\x6a\x1c\xd1\x90\x96\xb5\x7d\xef\
+\x13\xb7\xa7\xed\x15\x4f\x4f\x5a\xda\x84\xd2\xde\x6d\x1b\xf0\x9e\
+\xd8\xa8\xa7\x4d\x2e\x32\x99\xd2\x70\x12\xa3\x94\x65\x7f\x87\xed\
+\x15\x56\x0a\x16\x97\xa2\x85\x77\x4a\x85\x73\xa4\xea\x53\xb3\x6f\
+\x43\xa1\x41\x52\xab\x0d\x16\xa8\xae\x19\x68\xca\x9c\xb7\x14\x36\
+\x24\x2a\xb2\xba\x24\x15\x80\xd2\xc6\x00\xf4\xad\xf7\x75\x84\x4e\
+\x71\x94\x61\x08\xdd\x93\x48\x46\xc1\x90\x09\x51\x3e\xa7\x9a\xe9\
+\xad\x51\xcf\x7a\x3b\x1a\x9a\x59\x0a\x28\x3f\x96\x2a\x7d\xa5\x9e\
+\x69\x50\x82\x52\x30\x40\xc1\xa8\x3e\x1b\x2a\xcf\xad\x4b\x34\xc2\
+\x17\x1a\x12\xde\x70\x7d\xee\x40\x35\x9f\x12\xaf\x4c\xd1\x85\x95\
+\xaa\x0a\xef\x4f\x05\x3c\x1a\x1e\x9d\xeb\xcb\x4b\x45\xd7\xf7\x94\
+\xf9\x40\xe0\xd2\x17\x14\xa9\x12\x49\xee\x54\x71\x4f\xb1\x50\x98\
+\xb1\x80\xcf\x38\xa4\x54\xfd\xba\x6a\x2b\x73\x45\x3f\xdc\xa8\xe4\
+\xf6\x32\x9a\xee\x13\xb4\x1f\x4e\x6a\x35\x70\x90\x95\x3a\x54\xae\
+\xc9\x3c\x52\xfb\xa4\x9d\xa8\x23\xf7\x95\x4d\x29\x6f\xc5\x77\x67\
+\x24\xd3\x30\xd4\xf2\xab\xb1\x78\x9a\x99\x9d\x90\xb6\xd4\xf0\x4b\
+\x83\x04\x61\x55\x23\x8a\xb0\xa4\x6d\x35\x13\x09\xf0\x97\xb7\xb1\
+\x1f\x14\xf7\x6f\x91\xbd\xb1\xcf\x98\x55\x31\x34\xef\xaa\x2f\x85\
+\xa9\x6e\xab\x37\x4a\x6f\xc3\x70\x9f\x43\x5b\xa0\x2f\x04\xa0\x9f\
+\xa5\x6d\x71\x29\x7d\x9e\x3b\xd2\x24\x95\x36\xbe\xf8\x22\xb3\x2e\
+\xbc\x6c\xcd\x2f\xa9\x2b\xa1\x45\xd1\xd0\x96\xb6\x7a\x9e\x29\x97\
+\x3c\xed\x39\xc7\xc5\x3a\x5c\x47\x8c\xce\xf4\xe3\x8a\x68\x53\x9e\
+\xc9\xe6\x9f\x87\x8f\x54\x46\x21\xf5\x85\xac\xb8\xdb\x43\xb7\x06\
+\xbc\x5a\xb7\x3a\x14\xda\xbb\xd3\x4c\xb9\xbe\x12\x72\xae\x00\xa6\
+\x19\xba\x9e\x3c\x57\x0a\x94\xea\x52\x90\x7c\xca\x52\xb0\x07\xd4\
+\x9e\x2a\xd3\xcb\x4d\x66\x93\x13\xc5\xe4\x58\x3e\x3a\x52\x91\x93\
+\xce\x29\x1c\x9b\x9c\x76\xf8\x2b\x48\xaa\x67\x58\x75\xb3\x48\x58\
+\xdb\x50\x9b\xa8\x62\x97\x40\xc8\x66\x32\xbc\x65\x9f\x8c\x27\x20\
+\x7e\x24\x55\x21\xab\x7f\x49\xe7\x1c\x52\xdb\xb0\xd8\xca\x8e\x4e\
+\xd7\x66\xb8\x4f\xff\x00\x62\x7f\xce\xb0\xf1\xa3\xbc\x55\xcd\x51\
+\x55\x6a\x7b\xa8\xeb\xb9\xda\x8a\x3a\x16\x40\x58\xed\xef\x51\xcb\
+\xc6\xb5\x8f\x19\xb5\xad\x6f\x21\xa6\xd3\xf7\x96\xe2\xc2\x52\x3e\
+\xa4\xd7\x0c\x5f\xba\xd3\xd4\x4b\xab\x8a\x5a\x6f\x0b\x84\xda\x87\
+\xdc\x8a\x80\xd8\x03\xea\x39\xfe\x35\x0d\x9f\x74\xbd\x5c\xd5\xbe\
+\x7d\xca\x54\x8d\xca\xca\xbc\x57\x8a\xb9\xfc\x4d\x51\xe2\x2a\x72\
+\xb2\x1d\x1e\x8e\xab\x3f\x7a\x47\x5d\x6b\x9e\xbf\xe9\xbb\x41\x5b\
+\x71\xe7\x9b\x93\xe9\xff\x00\x82\x8b\xca\x7f\xed\x9e\x3f\x2c\xd5\
+\x1b\xae\xfa\xe3\xab\xf5\x31\x5c\x5b\x6b\x9f\xaa\x21\x2c\x10\x50\
+\xc1\x3b\xd4\x3f\xbc\xe7\x7f\xcb\x15\x5a\x37\x17\xb1\x50\x2a\x23\
+\xda\x94\x36\xdb\x4d\xe0\xaf\x03\xca\x41\x03\xd3\xf1\xa4\xca\x4e\
+\x4e\xed\xdc\xeb\x61\xfa\x22\x9c\x35\x97\x98\x9d\xb6\x16\xfb\xc5\
+\xc7\x9c\xf1\x49\xf3\x12\xa3\x9c\x9a\x56\x5b\x4a\x06\xd4\x24\x91\
+\x91\xe9\x5b\x76\xe1\xad\xca\x04\x21\x27\xcb\x84\xf7\xaf\x76\x84\
+\xa4\x93\x8c\x28\xe3\x83\xcf\xd3\xe9\x55\x6e\xec\xec\xd3\xa0\xa1\
+\x1b\x24\x26\x98\xb5\x97\x58\x40\x48\x29\x49\x52\xb0\x3b\xf1\xdb\
+\x3f\x9d\x74\x7f\xe8\x6f\x2e\x2a\xed\xda\x96\xdc\xa0\x91\x38\x2d\
+\x89\x19\xf5\x53\x58\x50\xc6\x3e\x09\xfe\x35\xce\xae\x25\x26\x5b\
+\x38\x6c\x94\xac\x28\x10\x3b\x9e\x33\xfe\x15\x3c\xfd\x1f\xb5\x22\
+\x34\xaf\x55\xad\x32\x65\x3a\x96\xa0\xce\xcc\x19\x65\x47\x00\x25\
+\xce\x12\xa2\x7e\x14\x13\xcd\x2a\xb4\x6f\x02\x1a\x93\x53\xd7\x7f\
+\xc1\xd6\xf7\x26\xb2\xf9\xf3\x60\x63\x03\xe0\xe2\x90\x88\x89\x71\
+\xb2\xde\x36\xee\xc1\x1f\x0a\xf7\xa7\x99\x6c\xa9\x52\x14\x36\x8c\
+\xa5\x5b\x54\x01\xed\x8e\xc6\xb2\x62\x29\x28\x03\x8c\x0e\xc7\x15\
+\xc9\x74\xee\xcc\xaa\x76\x42\x5b\x46\x5b\x56\xd7\x52\x37\x24\xed\
+\x20\x8e\x47\xcf\xe7\x9a\x92\xb4\xb4\xa1\x09\x24\x9c\x11\xdf\xb8\
+\xa6\x65\x36\x1b\x21\xc2\x95\x15\x27\x1e\x70\x79\x4f\x3d\x8f\xbd\
+\x39\xb6\x85\x29\x85\x05\x36\x01\x28\x38\x58\x20\xf1\xe8\x47\xd0\
+\xd3\x20\xb2\xe8\x52\x6d\x3d\x45\xc1\xcd\xaa\x47\x88\x4e\x36\x92\
+\x94\x83\x9e\xdd\xf8\xa5\xac\xa5\x24\x02\x10\x82\x15\xc8\x20\xf7\
+\x14\xc7\xa7\xd2\xea\xd8\x0b\x92\xa0\xfc\x94\x1f\x0c\xad\x49\x29\
+\xe3\x3c\x63\xda\x9e\xe3\x29\x28\x07\x6a\xb2\xd9\x3c\xa7\xfb\x3f\
+\x4a\x6c\x1d\xd5\xc4\xd4\x56\x76\x37\x00\xd2\x55\x84\x95\x6d\x23\
+\xf7\x78\xe4\x7d\x7e\xb4\xa1\x94\xb6\x13\x93\x95\x28\x93\xca\x8e\
+\x3f\x2f\x8a\x43\x25\x5b\x43\x6b\x24\x25\x5d\x81\x48\xc8\xcf\xcf\
+\xe1\x43\x6a\x71\x45\x59\x75\xb2\xa5\xe4\x20\x81\x85\x24\x0f\x5c\
+\x76\x3e\x9c\x55\xef\x62\x96\x1c\x52\x40\x58\xc1\x1c\x67\xca\x3f\
+\xd7\x34\xa1\x2a\x42\x94\x50\x09\xe0\x02\x46\x29\x33\x39\x71\x96\
+\xbc\x2d\x85\x04\xe7\x77\xef\x27\x1d\xeb\x5a\x7c\x54\xbc\xb7\x12\
+\xb1\x94\x8c\x76\xce\x73\xcd\x5a\xe5\x77\x15\x3a\xff\x00\x87\xca\
+\x10\xb7\x14\x3b\x25\x3d\xcd\x63\x20\xac\x8c\x9c\x63\xeb\xda\xb0\
+\x82\x14\xb1\xe2\x29\x2a\x1d\xc1\xdd\xdc\x9e\xdf\x95\x6b\xbe\x5c\
+\x2d\x96\x4b\x6a\xee\x57\xbb\x94\x4b\x64\x24\x0c\x97\xa5\x3c\x96\
+\xd3\xf8\x67\xb9\xfa\x54\x6f\xa8\x5b\x5b\x20\xc6\xe4\xf2\x42\x47\
+\x6a\x65\xd5\xb7\xfb\x16\x93\xb3\x2e\xef\xa8\xee\x6c\xdb\x60\xa7\
+\x3b\x54\xe1\xcb\x8f\x2b\xfb\x2d\xa0\x72\xb5\x7c\x0f\xc6\xa9\x7e\
+\xa5\x7e\x93\xf6\x88\x65\xcb\x77\x4f\x2d\xaa\xbb\x4a\xda\x40\xb9\
+\x4d\x41\x6d\x84\x1f\x74\x36\x70\xa5\xe3\xdd\x58\x1f\x06\xb9\xab\
+\x56\x5f\xf5\x16\xad\xbb\xbb\x77\xd4\x57\x49\x37\x49\xc4\x60\xba\
+\xf2\xf0\x86\xff\x00\xba\x80\x38\x48\xf8\x48\xc5\x4a\xa6\xd9\xd2\
+\xc3\x74\x75\x4a\x9d\x69\xe8\xbc\xfd\x7a\xb1\x65\xf5\x9b\xaf\xb7\
+\x8d\x5d\xe2\xd8\x74\xca\x17\x61\xb0\xa8\x94\xb8\xb5\x2b\xfd\xa6\
+\x58\xf6\x5a\x87\xdd\x49\xfe\xca\x7f\x12\x6a\x9e\x71\x29\x60\xb6\
+\xda\xdc\x50\x1b\x54\x50\x80\x36\x9d\xc6\xb5\xbc\xe0\x49\x48\x69\
+\xb0\x70\x7e\xf1\x1f\xce\xb5\x24\x29\x6a\xf1\x94\x4b\x8a\x3d\xf1\
+\xdf\xe4\xf3\x5a\x21\x05\x15\xa1\xd3\x8e\x4a\x49\xc2\x2b\xd7\xd4\
+\xd0\xb3\x29\xf5\x99\x0a\xca\x46\x30\x02\x46\x78\xf7\x35\x82\xd2\
+\xb7\x1b\x48\xc0\xee\x33\x83\xc6\x7d\x29\x62\x88\x43\x4b\xda\xa0\
+\x92\x0e\x70\x0f\x27\xde\x93\xc8\x79\x0a\x74\x00\x14\x40\xf4\x4f\
+\x00\xf1\x4c\x42\x2a\x46\x29\x6a\xdd\xd9\xad\x0c\xb2\x12\x52\xf3\
+\xa9\x4e\xd3\x92\x0a\x7f\x2f\xad\x60\xe6\x12\x93\xb9\x63\x1d\x81\
+\x4a\xbb\xfe\x15\xb5\x42\x53\xa1\x3b\xd2\x52\x39\x03\x70\xc9\x48\
+\xc7\x02\xb2\x66\x13\x2d\xa4\x29\xd5\x78\xa4\x8c\xee\x24\x64\x7e\
+\x1f\x5a\x9b\xf6\x8a\x74\xdc\x9e\x58\x2b\x7a\xe6\x22\x59\x51\x58\
+\x28\x0b\x50\xcf\xb6\x31\xe9\x59\x39\x15\x4a\x39\x70\xa7\x80\x4e\
+\x7b\x52\xe5\x2d\xa4\x12\x10\xea\x90\x01\xe4\x28\x7a\xfc\x52\x27\
+\xe4\x28\xf2\x82\x41\xf5\x28\x18\xfa\xd4\xa6\xde\xc2\xe7\x4e\x10\
+\x4d\xc9\xdc\x46\xec\x66\xc2\xc6\xd3\x92\x79\x1c\xd6\x70\xa4\x5c\
+\x6d\xef\x22\x4c\x29\x6f\xc5\x75\x07\x29\x52\x16\x52\xa0\x7f\x0a\
+\x50\x92\x8c\xa9\x2a\x51\xec\x3d\xb3\x9a\x0a\x77\xa4\x29\x40\xe0\
+\x63\x38\x3c\x0a\xb5\xcc\x72\xc3\xc6\x45\x9d\xa3\x3a\xe7\x7c\xb5\
+\x2d\xa6\x35\x24\x41\x70\x65\x3c\x7d\xa1\xb3\xb1\xec\x7b\x9f\x45\
+\x7e\x3f\x9d\x15\x51\xce\x6d\x29\x19\xc1\xc1\xed\xed\x45\x42\x8a\
+\xe5\xa1\xca\xaf\x82\xa5\x9f\xdd\xf5\xf0\x3a\xc3\x4d\x6a\x0b\xf3\
+\x76\x28\xc8\x6e\xf5\x72\x4a\x41\x56\x02\x65\xac\x01\xe6\x3e\x99\
+\xa9\x33\x5a\xa3\x52\x35\x0c\x0f\xe9\x0d\xd8\x71\xdb\xed\x8e\x7f\
+\x9d\x42\x74\xaa\x77\x5a\x63\x92\x78\x1b\xbf\xfc\x8d\x3d\x15\x78\
+\x87\x27\xee\x8a\xf1\x55\xeb\x55\x72\xb6\x67\xf3\x3c\x6a\x9c\x93\
+\x76\x66\x62\xeb\xa8\x5f\x90\xa7\x5d\xbe\x5c\xce\x4f\x73\x29\x7f\
+\xe7\x4a\xdb\xba\xde\x12\x9c\x7e\xb9\xb9\x7f\xf5\x4b\xff\x00\x3a\
+\x40\x54\x01\xe2\xbd\x6d\x4a\x52\x82\x52\x82\x49\x3c\x01\xeb\x55\
+\x78\xaa\xef\x69\x3f\x9b\x21\x36\x2c\x76\xe9\x78\x24\x2c\x5e\x6e\
+\x5c\x73\xfe\xea\x5f\xf9\xd6\x6b\xd5\x7a\x89\x6d\x86\x91\x7e\xba\
+\xed\x1e\x9f\x6c\x73\xfc\xeb\x0b\xd5\x9a\xfb\x6d\x88\xdb\xf3\xec\
+\xf3\xa2\x30\xf2\xb6\x21\xc7\xd8\x52\x12\x49\x19\x03\x24\x77\xc0\
+\x27\x1f\x06\x90\x47\x65\x2c\xa7\x72\xf9\x51\xab\x4a\xb5\x78\xfb\
+\xf2\x77\xf1\x64\xbc\xd1\x76\xd8\x7a\x89\x7f\xd4\x2d\x8f\x11\x57\
+\xeb\xa8\x57\xfc\xf1\xcf\xf3\xac\x9f\xd5\x7a\x90\x82\xa5\x6a\x1b\
+\xb6\x3f\xe7\x8e\x7f\x9d\x35\x0d\xce\x38\x84\x24\x65\x4b\x50\x4a\
+\x52\x4e\x32\x49\xc0\xaf\x35\x3d\xaa\xe7\x64\xba\xae\xd9\x76\x8c\
+\x23\x49\x42\x52\xa5\x37\xe2\x25\x78\x04\x64\x1c\xa4\x91\x54\x8c\
+\xeb\xcf\xac\xe4\xed\xf1\x2d\x9a\x6a\x37\x57\xb1\xb5\x7a\x97\x50\
+\xba\xb2\xa5\xdf\xae\x87\xeb\x2d\xcf\xf3\xaf\x58\xd4\x9a\x85\x2b\
+\xdc\x2f\xb7\x4f\xfe\xad\xcf\xf3\xa6\x62\x78\xed\x4e\xd0\x6c\x17\
+\x69\x76\x19\x77\xc8\xf1\x82\xed\xf0\xd4\x11\x21\xef\x15\x03\x62\
+\x8e\x30\x36\x93\x93\xf7\x87\x61\xeb\x4f\x55\x6b\x4b\x48\xc9\xfc\
+\xd8\xb8\xe7\x93\xd0\xda\xe6\xa4\xd4\x3b\xf7\x7e\xbe\xba\x7f\xf5\
+\x8e\x7f\x9d\x66\xd6\xa7\xd4\x6d\xab\x72\x6f\xf7\x51\xf4\x98\xe7\
+\xf9\xd3\x3e\xd2\x72\x2b\xd1\xda\x97\xc7\xab\x6f\x79\xfc\xc3\x34\
+\xbb\x49\x33\x3a\xab\x52\x10\x14\x9d\x43\x76\xf9\xff\x00\x6c\x73\
+\xfc\xe8\x7b\x53\x6a\x25\x8c\xff\x00\x48\x2e\xb9\xff\x00\x9e\x39\
+\xfe\x75\x1b\x43\xa5\xa3\x9f\x4a\x1e\x96\x90\x9c\x85\x52\xb3\xd6\
+\xbd\xd4\x9f\xcc\xba\xa9\x27\xa5\xc7\x97\x35\x76\xa4\x6c\x14\x9d\
+\x41\x76\x03\xfe\x78\xe7\xf9\xd3\x74\xcd\x69\x7c\x65\xa5\x2d\x7a\
+\x86\xe4\x84\x81\x95\x29\x53\x56\x00\xfa\x9c\xd4\x3f\x52\xea\x16\
+\x22\x94\x47\x09\x76\x4c\xd7\x8e\xd8\xf0\xe3\xa4\xad\xe7\x94\x7b\
+\x04\xa4\x73\xc9\xaa\x9f\xaa\xb1\x7a\x8b\x05\x51\xbf\xa5\xd6\x0b\
+\xbd\x8e\x24\x82\x7e\xca\xdc\x98\xab\x65\xb5\xe3\xbe\x32\x06\xe5\
+\x0c\x8c\xfa\x8c\xfa\x57\x4f\x07\x86\xc4\x57\xd7\x33\x4b\xb6\xec\
+\xdb\x85\xc2\x55\xae\xef\x7b\x22\x79\xab\xba\xdf\x3a\x31\x53\x16\
+\xdb\xd5\xca\xe0\xf0\xe3\x7a\xa5\x38\x1a\x1f\xc7\x2a\xff\x00\x5c\
+\xd5\x4d\xa9\x75\x9e\xa9\xd4\xae\x95\xdd\x6f\x53\xa4\x23\xd1\xb5\
+\x3c\xad\x89\x1e\xc0\x67\x14\xc2\x1b\xf7\xe4\x9f\x5a\xcd\x20\x76\
+\x07\xf3\xaf\x41\x47\x0f\x0a\x4b\x4b\xb7\xda\xce\xfe\x1f\x07\x0a\
+\x1b\x6e\x63\x87\x14\x7c\xce\x2f\xf1\x35\xea\x41\x4f\x39\x56\x6b\
+\x23\xbb\x8f\xa5\x2e\x76\xd5\x73\x66\xd2\xc5\xe1\xfb\x5c\xc6\xad\
+\xb2\x5c\x53\x4c\x4c\x5b\x0a\x0c\xba\xb4\xfd\xe4\xa5\x78\xda\x48\
+\xf5\x00\xf1\x4f\x6d\x9b\x16\xe2\x30\x5c\xec\x16\xbf\xce\xbd\x42\
+\xd6\x14\x0e\xf5\x03\xe8\x6b\xc0\x32\x7d\xbd\xab\xdf\x4c\x11\x8a\
+\xad\xcb\xab\xf6\x99\x17\x9e\x24\x6e\x79\xc3\xf8\x9a\xc9\x2f\x3b\
+\xbb\x97\x5c\x3f\xf5\xab\x04\xfa\x91\xe9\xc6\x2b\x24\x83\x9d\xc5\
+\x35\x0c\xba\x72\xed\x33\x53\xef\x29\x44\x17\x5c\x3f\x55\x9a\x03\
+\xab\xc1\x05\xd7\x3e\x79\x35\xa5\x44\x15\x63\x18\xf4\xac\x81\xc0\
+\x04\x7e\x00\x50\x4f\x12\x4d\xee\x66\xe3\xef\x04\x85\x87\x57\x94\
+\x60\xa7\xcc\x7f\x87\xf1\xaf\x56\xf3\x8e\xa4\x65\xd5\x94\x91\xdf\
+\x71\xe6\xb0\x1c\x73\xf3\x5e\x70\xd9\x20\xf2\x85\x73\xff\x00\x24\
+\xd0\x4a\x9c\x97\x32\xfa\xe9\xa7\x50\xef\x17\xcb\x7a\x60\xca\xbe\
+\xdc\x05\xce\x2a\x02\x56\x93\x29\x79\x75\x09\xc0\x0b\x1c\xf3\xe8\
+\x0f\xe7\x53\x34\x5f\x2f\x81\x1e\x5b\xcd\xcb\x00\x76\xfb\x52\xff\
+\x00\xce\xb9\xc7\x45\x58\xb5\x46\xa0\xbe\x06\xb4\x7d\xba\xe1\x3e\
+\xe7\x19\x06\x4a\x53\x05\xa2\xb7\x1b\x40\x21\x25\x58\x1d\x86\x54\
+\x91\xf8\x8a\xb4\xde\xd4\x1a\xa3\x4a\xa6\x3b\x1d\x47\xd2\x37\x8b\
+\x32\xde\xf2\xb5\x31\x50\xd4\xda\x1d\x3e\xb9\x04\x00\x48\xf5\xda\
+\x7f\x0a\xe0\x63\x70\x15\x54\x9c\xe9\x6a\xbb\x3b\x0e\x4e\x2f\x0d\
+\x57\x36\x6a\x6e\xfd\xd7\x26\xd2\x2f\xb7\xbd\xa4\x9b\xdd\xc9\x27\
+\xdf\xed\x4b\xed\xf9\xd6\xa8\xd7\xab\xbb\x69\x29\x7a\xf1\x74\x24\
+\x65\x5c\x4a\x5f\x23\xdf\xbd\x46\x06\xb0\xd2\xf2\x40\x0c\xdf\x22\
+\x79\x86\x7f\x6b\xb9\xbc\x7d\x72\x29\x53\x57\xad\x3b\x22\x2e\xe5\
+\xde\x6d\x64\x0f\x43\x25\x03\x18\x3c\x7a\xd7\x2d\xc6\xb2\x5a\xa7\
+\xe6\x62\xfd\xf8\xab\x3b\xf9\x92\x78\xda\x8a\xfc\xeb\xcb\x75\x9d\
+\x47\x74\x2d\x29\x20\x28\x7d\xa9\xc1\x83\xf9\xf7\xf4\xa5\x82\xfd\
+\x7e\x40\x0d\x1b\xcd\xd1\x1e\x5e\xe9\x94\xb1\x81\xe9\xeb\xfc\x2a\
+\x39\xa4\x52\xce\xad\xd4\x0c\x58\xb4\xfd\xca\x1c\xeb\xab\xe1\x61\
+\x31\xd9\x90\x90\x56\x94\x24\xa8\x9e\x48\x48\xc6\x0f\xad\x31\x5e\
+\xba\x83\x67\xb1\x5e\x65\x5b\xa5\x17\xdc\x9b\x11\xc5\xc6\x90\xdb\
+\x2d\x6e\xc2\xd0\xa2\x15\xc9\x38\x3c\xe4\x67\x9e\xd5\x2a\x86\x26\
+\x7e\xea\x7e\x64\x70\xf1\x13\x7d\x54\xfc\xcb\x11\x5a\x87\x51\x16\
+\x83\xa2\xf7\x73\x78\x00\x7f\xfe\x6d\x79\x3e\x9e\xf8\xa5\x11\xb5\
+\x16\xa1\x6d\x28\x29\xbe\xdd\x38\xe0\x1f\xb5\xb9\x9e\xdf\x5a\xa4\
+\xa4\x75\x75\x4d\xa9\x5f\x63\xb2\x87\x90\xa2\x79\x7d\xcd\x9f\xc1\
+\x39\xa6\x2b\x9f\x54\x35\x6c\xdd\xe9\x8a\xf4\x6b\x72\x08\xe3\xec\
+\xec\x8d\xc0\x7f\xca\x56\x4f\xe5\x8a\x7c\x3a\x37\x19\x3d\xf4\xf1\
+\x63\x63\x80\xc5\xc9\xd9\xe9\xf1\xfb\x1d\x19\x23\x52\x5f\x1b\x6f\
+\xc5\x91\xa8\xae\x6c\x36\x15\xc9\x72\x7a\xd0\x93\xf9\xab\x15\x15\
+\xbc\xf5\xaa\x35\xa5\x4e\xa4\xea\xeb\xac\xe7\xc2\xb1\xe1\x43\x94\
+\xe2\xc6\x7f\xe5\x12\x07\xf1\xae\x70\xb8\x4d\x99\x71\x7f\xc5\xb8\
+\x4c\x93\x31\x64\xe5\x45\xe7\x14\xae\x7f\x1a\x4e\x02\x12\xa2\x13\
+\xb4\x01\xdf\xd7\xf2\xad\xf4\xba\x26\xda\xd4\xa8\xdf\x86\x86\xda\
+\x7d\x17\x67\xd7\x9b\x7e\x1a\x16\xed\xfb\xf4\x85\xd7\x12\x02\x9b\
+\xb2\xce\xb8\x40\x41\x3c\x3c\xf4\xc7\x1d\x70\x7d\x06\x76\x83\xf8\
+\x1a\xad\xf5\x0e\xa3\xd4\x3a\x9a\x68\x99\xa8\xaf\xb7\x2b\xac\x81\
+\xf7\x17\x2e\x4a\xdc\x29\xf8\x4e\x4f\x03\xe9\x4d\x65\x4b\xc7\x95\
+\x38\x03\xd5\x55\xe1\x19\x39\x5a\x81\xe3\x00\x67\xb7\xe1\x5d\x4a\
+\x54\x29\xd2\x56\x8a\xfa\x9d\x2a\x34\xa3\x47\xdc\x5e\xbc\x4f\x4b\
+\xce\xfd\xd0\xe2\xc9\xed\x80\xa3\x83\xf5\xac\xbc\x69\x2a\x46\xd2\
+\xf3\xa5\x07\xb8\xde\x71\xc7\xbd\x60\x08\x00\x00\xae\xde\x80\xd0\
+\xb2\x10\x08\x1c\x9f\x5c\x9e\xf4\xe1\xaa\x52\xde\xe6\xc5\x4b\x91\
+\xbb\x1e\x3b\x98\x1d\xb2\xa3\x5a\x9c\x90\xe8\xec\xea\xc2\x87\x6f\
+\x31\xe2\xb5\xf9\xd6\xa2\x12\x14\x00\xef\xf1\x59\x25\x09\x41\xfb\
+\xc0\x9f\x91\x53\x6b\x15\x75\x27\x2d\xd9\x8f\x89\x25\xd5\x65\x4f\
+\x38\x31\xee\xa3\x59\xa4\x94\x1d\xc9\x5a\xc1\x1c\x67\x35\x22\x85\
+\xa2\xb5\x54\xfe\x9f\x5c\x75\xe4\x3b\x4e\xfd\x39\x6c\x92\x22\xcc\
+\x99\xf6\x86\x87\x86\xe9\x2d\x80\x9f\x0c\xab\x79\xe5\xe6\xf9\x09\
+\x23\xcd\xdf\x83\x88\xa9\x25\x5c\xe4\x9a\x9b\x31\x6e\x76\xd9\xdc\
+\x50\xa9\x6f\x81\xe4\x75\xc1\xcf\xf6\xcd\x6a\x76\x4b\xea\x52\xb2\
+\xf2\xc9\x57\x07\xcd\xde\xb5\x24\xe4\x8c\x63\xf2\xed\x41\xf5\xf5\
+\x35\x29\x58\xa4\xaa\xca\x4b\x73\xd2\xe3\xab\x50\x2b\x71\x64\x8f\
+\x9a\x37\x2b\x24\xee\x56\x4f\xae\x4d\x78\x40\xe0\x95\x60\x7e\x75\
+\xea\xf6\xe7\x39\x1c\xfb\x54\x95\xbb\xdd\xb0\xf1\x1c\x1c\x07\x17\
+\xef\xf7\xab\xcf\x11\xc3\xff\x00\x08\xe1\x1e\x9c\xd7\x83\x39\xc7\
+\xf1\xaf\x42\x3b\xee\x56\x3e\x48\xa9\xb9\x56\xd9\xa5\xf5\xa8\x8e\
+\x56\xa2\x3e\x4d\x15\x9b\xe9\x40\x1c\x2b\xf0\xa2\xac\x99\x49\x45\
+\xb7\xb9\xd5\xba\x67\x8b\x24\x70\x38\x1e\x6c\xff\x00\xda\x34\xea\
+\x94\x15\x72\xa3\x84\xd3\x66\x98\x03\xf5\x33\x0a\x57\x00\x6e\xff\
+\x00\xf2\x34\xb9\x4e\x17\x32\x3b\x27\xd8\x57\x82\xa9\x77\x36\x78\
+\x76\x6c\x2f\x32\xdf\x09\x4e\xe3\x53\x6e\x86\x06\x26\xf5\x1e\x12\
+\x24\x36\x8f\xd9\x32\xeb\xcd\x85\x7a\xac\x0c\x0f\xc4\x64\x9f\xc2\
+\xa0\x3c\x0e\xdf\xc6\x96\xd9\x6e\xd7\x1b\x15\xe2\x25\xe6\xd0\xe3\
+\x68\x9b\x11\x65\x4d\x87\x06\x50\xb0\x41\x4a\x92\xa0\x0f\x20\x82\
+\x47\xf1\x1c\x8a\x76\x15\xc2\x9d\x68\xce\x5b\x26\x32\x85\x45\x0a\
+\x91\x94\xb6\x4c\x7b\xb5\x45\x77\x55\x75\x10\x46\xb9\xcf\x9a\xe3\
+\xb3\xee\x4b\xf1\xb7\xbc\xa2\x94\x80\x55\x90\x94\x93\x84\xe1\x20\
+\xa4\x71\xc0\xa9\x74\x3b\x65\x8e\xfd\xa8\xf5\x5e\x96\x67\x4e\x46\
+\xb7\x7e\xa9\x61\xc5\xdb\xe6\x34\xfa\xd4\xea\x94\xd1\xd8\xaf\x13\
+\x71\xc1\x0a\x24\x1f\x81\x9f\x5e\x6a\x0b\x7a\xd5\x66\x75\xd1\xab\
+\xc5\xb3\x4b\x46\xb0\x5d\xda\x98\x26\x2a\x5b\x77\x05\xc8\x43\x8e\
+\x0c\x92\x3c\x22\x94\x84\x82\xa3\x93\xc9\xf6\xf5\x34\xba\xef\xd4\
+\x1b\x83\xd1\x2e\xcf\x5b\xf4\xbc\x0b\x4d\xc6\xf0\xd1\x62\x7d\xc5\
+\x13\x96\xee\xe4\x2b\xef\xf8\x6d\x94\x80\xd9\x3e\xf9\x35\xd3\xa7\
+\x3a\x09\xcb\x89\x25\x2b\xbf\x1b\xab\x6c\xb4\xed\x36\x42\xa5\x25\
+\x7c\xcd\x3d\x7e\x68\x76\x7d\x16\x7d\x3b\xa3\x34\x75\xc1\xcd\x3d\
+\x16\xef\x26\xfd\x20\x3a\xfb\xb2\x1e\x5a\x3c\x26\x42\x93\x80\xde\
+\xd2\x30\xac\x29\x38\x3e\xe0\xe7\xd3\x12\xad\x45\xa7\x22\x5f\xba\
+\xc7\xa8\xe4\xcd\x8e\x25\xb5\x6c\xb5\x35\x21\x31\x94\xef\x84\x97\
+\x9c\xd9\xe4\x4a\x95\x91\x84\xf0\x72\x72\x07\xbf\x15\x56\x5b\xb5\
+\xc4\x88\xfa\x5a\x06\x9f\xb8\x69\x78\x17\xa6\xed\x6e\x97\x6d\x92\
+\x1d\x98\xb6\x4b\x07\x39\xda\xe2\x12\x0f\x88\x9c\xfa\x65\x3c\x00\
+\x3e\x69\x53\xbd\x48\xbe\x2f\x58\xc9\xd5\x1f\xaa\x20\xa9\x53\x61\
+\x26\x14\xeb\x7b\xaf\x15\xb5\x25\xb0\x90\x15\x85\x6d\x05\x24\x91\
+\x91\xc1\xc6\x71\xcd\x68\x85\x6c\x32\x82\x8b\xb5\xb4\xd2\xdd\xdc\
+\xfe\x23\x23\x5a\x86\x54\x9e\xda\x69\x6e\xee\x7f\x11\xc7\x5e\xda\
+\xed\xa8\xd2\x56\x4b\xc2\x63\x5a\x6d\x97\xa7\x5d\x5b\x17\x1b\x7c\
+\x09\xc9\x7d\xb4\xfd\xf2\x85\x8c\x2d\x58\x05\x28\xcf\x7f\xde\x00\
+\xf2\x29\x7e\x95\x21\x1d\x0a\xd6\x8b\x57\x61\x2d\x92\x7f\x36\xaa\
+\x07\x25\xeb\x2c\x95\x37\xfa\xa3\x46\x31\xa7\xb6\xe4\xad\x49\xb8\
+\xae\x52\x9c\x1e\x83\xcc\x94\x80\x07\xd0\x9f\x9a\x78\x89\xa9\x64\
+\xc0\xd1\xb7\x7d\x26\x8b\x52\x1f\x62\xec\xe2\x1c\x5c\xb3\x2b\x61\
+\x67\x69\x4f\x1e\x1e\xc3\xbb\x3b\x7b\xee\x1d\xeb\x27\x1e\x94\x71\
+\x12\x7a\x25\x95\xad\x3b\x6d\xe0\x84\x2a\x90\x55\x5c\xb9\x59\xaf\
+\x2f\x04\x59\x8b\xd1\xf6\x5b\x3d\xea\xdd\xa7\xee\x96\x9b\x4f\xea\
+\xd7\xad\xbe\x24\xeb\xac\x8b\x92\x5a\x90\xdc\x93\xbb\x1b\x10\x56\
+\x0e\xdc\xa4\x0e\x12\x47\x9b\xbf\x07\x31\xed\x19\x67\xb6\x4e\xd2\
+\xb7\x26\xac\x56\xfb\x3d\xf7\x55\xc4\x9a\xa4\x39\x12\xe1\x21\x49\
+\x05\x84\x9c\x05\x36\x94\xa8\x64\x1e\xf9\xce\x33\x91\x9e\x05\x46\
+\x27\x6a\xa6\xaf\x4c\x42\x46\xa8\xd1\x16\xeb\xf4\xd8\x51\xd3\x19\
+\x99\xff\x00\xac\x57\x1d\x4a\x69\x27\xca\x16\x80\x95\x6e\x39\x24\
+\xe4\x11\xdc\xf6\xad\x1a\x73\x53\x44\xd3\x53\x21\x4f\x67\x43\x43\
+\x99\x75\x82\x56\x63\xce\x37\x57\x1a\x09\x2a\xdc\x39\x6b\x61\x07\
+\x09\x56\xde\xe3\x20\x7b\xd6\x8e\x36\x15\xd4\x56\xb5\xbc\xf9\x77\
+\x6f\xf3\x1c\xea\xd0\xce\xad\x6b\x7a\xee\xdf\xe6\x4a\x34\x45\xb2\
+\x05\xcf\x4d\xde\x9b\xb7\xd9\x6d\x13\xf5\x9b\x13\x14\x3f\x54\x5c\
+\x5f\x5b\x69\x6d\x90\x46\x42\x13\x90\x4e\x39\x19\x27\xb8\xe4\xfa\
+\x1e\x77\xea\xee\xad\x9b\xa7\xa7\x4a\x86\xdc\x44\x40\xb9\x38\xf3\
+\xa1\x51\xb0\x48\x88\x02\x88\x29\x01\x59\x27\x07\xca\x33\xed\x56\
+\x8c\x4d\x7f\x1e\xd7\x7e\x46\xa2\xb8\xe8\xa8\x97\x6b\xfa\x25\xb9\
+\x29\xb9\xe2\xe8\xe4\x74\xa5\xc5\x95\x1f\xea\x82\x54\x08\x1b\xb1\
+\x8c\x8c\x81\xce\x6a\x97\xd6\xfd\x64\xfe\x91\xe9\xdd\x5f\x63\xba\
+\x69\x0b\x2c\xbb\x8d\xf6\xec\x26\xa2\xf3\xb7\x0e\xc5\x4a\x4a\x7f\
+\x66\x80\x41\x38\xc2\x30\x0e\xe1\x80\xb5\xe4\x1d\xd9\xa7\xd0\xa1\
+\x46\xba\x8e\xda\x79\xf8\x9a\x30\xb4\x29\xd7\x71\xee\xf5\xa9\x3b\
+\xfd\x02\xd9\x45\xc3\xa9\x9a\x93\x51\x4e\x02\x65\xca\xdf\x65\x71\
+\xd8\x9e\x37\x9c\x85\xa9\x60\x15\x8f\x5c\xe3\xcb\xf4\x59\x1e\xb5\
+\x15\xfd\x1a\xd9\x57\x53\x7a\xeb\x02\xd9\xaf\x64\x4a\xd4\x11\x26\
+\x22\x63\xef\x37\x31\xe5\x2d\x25\xc2\xd2\x95\xbc\x0c\xe0\x1c\xe0\
+\xf1\xec\x2a\x15\xd1\xbe\xa2\x5e\xfa\x5d\xad\x59\xd4\xf6\x46\xd8\
+\x79\x61\xa5\x47\x93\x19\xf2\x76\x48\x65\x58\x25\x04\x8e\x41\xca\
+\x52\x41\xf4\x20\x70\x46\x41\x9a\xe9\xae\xb1\xe8\xfd\x2d\xd4\xdb\
+\x6e\xb8\xd2\xdd\x29\x4d\xa9\xe8\xff\x00\x69\x32\x63\x26\xfc\xe3\
+\x89\x90\x5d\x41\x4f\x94\xa9\xbc\x34\x94\x92\x48\x01\x27\xdb\x81\
+\x5d\x75\x6b\x58\xee\x64\xcb\xb2\x27\x3d\x33\xd0\x7a\x23\x5c\xf5\
+\x33\x53\xc2\x63\x45\xc6\x8d\x67\xd0\x91\x24\x34\x88\x9f\x6f\x50\
+\x55\xd6\x42\x5c\x52\x5b\x5c\x87\x54\x46\xdc\xf8\x6a\x27\x04\x24\
+\x64\x0e\xc3\x96\xce\xb0\xf4\xfe\xc6\x34\xa6\x85\xd4\x96\x9d\x23\
+\x68\x87\xaa\x66\xdc\xc4\x1b\xb6\x97\xb3\xdc\xc4\xa6\xdf\x25\x4b\
+\x2d\xed\xf0\xdc\x59\x4e\xe4\xb7\xc9\x49\xe3\xc4\x19\x39\x15\x5e\
+\xe8\x2e\xae\xdc\xf4\x77\x51\xaf\xfa\xaa\x2d\xa2\x24\xc8\x3a\x81\
+\x72\x13\x71\xb5\x49\x70\x94\x3a\xcb\xcb\x2b\x28\xde\x06\x41\x19\
+\xc6\xec\x7b\xf1\xcd\x7b\x1b\xa8\xda\x56\xc1\xac\x6c\x3a\xa3\x40\
+\x74\xe9\xad\x3b\x2e\xd5\x2c\xc8\x58\x91\x79\x7a\x70\x90\x92\x0a\
+\x4b\x7e\x64\xa4\x20\x60\x9e\x40\x27\x9e\xf4\x5d\x58\x32\xca\xe5\
+\xdc\xe7\x4b\x6d\x97\xbe\x92\x6b\xe9\x3a\xab\xa6\xfa\x73\x46\xde\
+\xf4\xed\xb4\xcf\x80\x6c\xf7\x4f\x1d\xf4\xec\x69\xd7\x36\x3e\x80\
+\xea\xf1\x90\xd8\x1e\x6e\xfb\x89\x00\x14\xd6\x1d\x5c\xba\xdb\x9e\
+\xfd\x18\xfa\x6d\x0e\x1e\x8c\xd3\xe8\x55\xf8\xba\xc4\x66\xf6\xb8\
+\x11\x01\xd7\x32\x0b\xad\x61\x5f\x78\xa9\x44\x92\xac\xf2\x6a\x03\
+\x70\xfd\x21\xa0\x93\xad\xd1\x66\xe9\xcc\x6b\x60\xd6\x96\xd9\x11\
+\xee\xae\x7e\xb6\x71\xe7\x57\x21\xc4\x29\x08\x78\x15\x23\x01\x08\
+\x0e\x38\x7c\x30\x91\x92\xbf\xbc\x30\x05\x30\x49\xeb\x04\x0b\xa7\
+\x47\x6d\x1a\x06\xfb\xa2\x9b\x9f\x2a\xc6\xdb\xa9\xb4\xdd\x1a\xba\
+\x38\xc1\x8e\xb5\x03\xb5\xc5\x34\x12\x42\xca\x72\x0e\x0a\x80\x3b\
+\x47\x1d\xea\x6e\x88\xcb\x2e\x67\x40\xcb\xe8\x9f\x4f\xad\xb7\xe9\
+\x1a\x02\xe5\xa6\x6c\xb0\xec\xc2\xca\x14\xde\xa9\x93\x79\x42\x27\
+\x19\xe7\x1e\x6f\x04\xbb\x90\x8f\x5c\x6d\xdb\xc6\x39\x06\xb9\x87\
+\xa0\xd6\x58\x17\x8e\xb5\xe9\x9b\x25\xea\x1b\x53\x20\xc8\xb8\xa5\
+\x89\x0c\x2c\xe5\x0e\x27\x9c\x83\x83\xc8\xe2\xa5\x3a\xc3\xac\x7a\
+\x63\x5c\x88\xf7\x2d\x75\xd2\xc8\x97\x8d\x4a\xd4\x44\xc5\x55\xce\
+\x3d\xe5\xe8\x8d\xbc\x13\x9d\xaa\x5b\x28\x49\xc9\xc9\x3c\x85\x0e\
+\xf8\xe0\x00\x2a\xbe\xe9\x8e\xa7\xfe\x85\xeb\xeb\x36\xab\xfb\x07\
+\xdb\x8d\xb2\x4a\x64\x7d\x9b\xc5\xf0\xbc\x5c\x03\xe5\xdd\xb5\x58\
+\xfa\xe0\xd5\x5b\x45\xe3\x19\x59\xdc\xea\x0b\x16\x86\xe9\x55\xc2\
+\xf3\xd5\x1d\x29\x23\xa7\xf1\xc4\x6d\x18\xd0\x96\xc4\xc4\x4e\x78\
+\x4a\x92\x52\x95\xad\x69\x5a\x81\xc0\x49\x28\xda\x02\x40\xc2\x4f\
+\xbf\x35\x19\xbe\xf4\xf3\x49\xeb\xae\x93\x74\xbb\x56\xd9\xf4\xfc\
+\x3d\x2d\x71\xd4\x9a\x89\x36\x69\x8d\x40\x5a\xcb\x5e\x1a\x9d\x7d\
+\x1b\xc0\x5a\x8f\x98\x06\x32\x33\xdf\x71\x04\x9c\x0a\x86\xda\x7a\
+\xf4\x6d\xda\x93\xa8\xf7\xaf\xe8\xa0\x77\xfa\x6f\x1d\x4c\x96\xbf\
+\x58\xe3\xec\x39\x4a\xd3\x9c\xf8\x5f\xb4\xfb\xf9\xc6\x13\xda\x9a\
+\x1f\xeb\x0c\xd1\xd1\x9d\x23\xd3\xfb\x75\xa1\x50\x65\xe9\x8b\xc0\
+\xbb\xc6\xbb\x09\x7b\x8a\xdc\x0e\x3e\xb4\x8f\x0b\x67\x97\x05\xe1\
+\xce\xe3\xf7\x3b\x73\xc0\xda\x05\x19\xa7\xa1\x75\xc2\xd0\x9d\x30\
+\xd4\xbd\x63\xd4\xdd\x10\x8f\xa1\xa3\xdb\x1b\xb5\xdb\x37\xc1\xbe\
+\x35\x25\xd5\x4c\xfb\x42\x52\xd1\x2b\x5e\x55\xb5\x49\xcb\xa7\x8c\
+\x11\xe5\xed\xc8\xdb\x10\xb4\x69\xed\x0f\xa5\xbf\x46\x5b\x27\x51\
+\x2f\x5a\x26\x0d\xfa\xf4\xcd\xd6\x4d\xbd\x4d\xbe\xfa\xdb\x69\xd2\
+\xa7\x56\x02\x9c\xdb\xca\xf6\x25\xb2\x12\x3f\xbd\x9f\x41\x4d\x93\
+\x3f\x48\xc2\x9b\x8d\xdb\x55\xda\x74\x05\xb6\xd7\xae\x2e\xf0\x04\
+\x29\x77\xc6\xee\x2e\x2d\x01\x3b\x52\x9d\xed\xc7\x23\x08\x56\x10\
+\x8c\x1d\xc7\xee\x8c\xe7\x9c\xc2\xa7\x75\x47\xed\x1d\x01\xb7\xf4\
+\xa3\xf5\x10\x42\x61\xdc\x95\x3b\xf5\x97\xdb\x33\xbf\x2a\x70\xec\
+\xf0\xb6\x71\xfd\x67\x7d\xde\x9d\xa8\xba\x0c\xb3\xe6\x5f\x9a\x2f\
+\xa4\x5a\x4b\x4f\xe9\xae\x9f\xb3\x79\xd1\xd6\x5b\xdb\x1a\x8a\x21\
+\x97\xa8\x2e\xd7\x1b\xc2\x63\x39\x09\x2b\x6d\x2a\x6d\x2c\x20\xba\
+\x92\x42\x77\xe0\x94\x82\x4e\x3b\xf2\x31\xcb\xfd\x4b\xb2\x42\xd3\
+\x7d\x41\xbf\x58\xad\xd2\xd3\x32\x0c\x39\xce\x35\x19\xf4\xac\x2b\
+\xc4\x68\x1f\x21\xc8\xe0\xf9\x48\xed\x53\x96\xba\xbd\x66\xbc\x68\
+\x4b\x16\x96\xea\x1f\x4f\x58\xd5\x23\x4f\xb4\x63\x5a\xe6\xb5\x75\
+\x72\x0b\xad\x33\x80\x03\x6b\xda\x95\x05\x80\x12\x81\xe9\xc2\x47\
+\xae\x49\x64\xb7\xf5\x0a\xd1\x07\x40\x6a\xbd\x25\x1b\x40\xd9\xc0\
+\xbe\x4e\xfb\x4c\x49\x8b\x71\x4e\x3d\x6d\x6c\x10\x52\xca\x14\xa0\
+\x54\xb0\x90\x30\x95\x15\x03\xe6\x51\x3b\xb3\x43\xb3\x2d\x0c\xe9\
+\xea\x59\xff\x00\xff\x00\x0f\x24\xa9\x3d\x6a\xbb\x8c\x9d\x87\x4e\
+\x3e\x42\x4f\xa7\xfb\x4c\x6a\xd9\xd3\x7b\x94\xcd\x51\xfa\x1d\xf5\
+\x16\x2e\xa5\x95\x22\x6b\x56\x79\x6c\xc9\x80\xe4\xb7\x0b\x8a\x65\
+\x64\xa0\xe1\x0a\x3c\x81\x90\x78\x1f\xdb\x57\xbd\x56\x9f\xa3\xe7\
+\x54\x4f\x48\xf5\xa4\xad\x48\x9b\x18\xbe\x7d\xaa\xdc\xb8\x3e\x01\
+\x99\xf6\x7d\xbb\x9c\x69\x7b\xf7\x6c\x5e\x71\xe1\xe3\x18\xfd\xee\
+\xfc\x52\x9d\x5f\xd5\x98\xd3\x3a\x70\xbe\x9e\xe8\xbd\x1f\x1f\x49\
+\xe9\xd9\x32\x84\xb9\xc9\x17\x05\xcc\x91\x2d\x69\xc1\x01\x4e\x28\
+\x27\xca\x0a\x52\x71\x8f\xdc\x4f\x3d\xf3\x09\xe8\x0e\x2f\x3e\x9d\
+\xc7\x43\xb7\xd1\x5d\x0b\xa7\xaf\x36\x6d\x13\x7f\xd2\x56\x37\xad\
+\x52\xac\x85\xeb\xae\xa3\x97\x79\x43\x33\x1a\x9a\x77\x01\xe1\xb6\
+\x5d\x0a\xd8\x0a\x06\x30\x82\x9f\x30\xc9\x38\x56\x6b\x8d\x3d\xa4\
+\x34\x56\x9d\xfd\x1c\xef\x7a\xd2\xeb\xa5\xe0\x6a\x1b\xbd\x87\x53\
+\x3b\x09\x82\xf3\xaa\x43\x32\x52\x16\xdb\x40\x39\xb1\x59\x52\x06\
+\xe5\x28\x00\x79\x38\xc9\x23\x35\x11\xbc\xf5\x8b\x4f\x6a\xeb\x55\
+\xa4\x75\x13\xa6\x51\xb5\x2d\xe2\xd7\x11\x30\x99\xb9\x35\x78\x7a\
+\x11\x71\xa4\xf2\x90\xe2\x10\x93\xb8\xe4\x93\x90\xa1\xc9\x38\xc6\
+\x6a\x69\xd3\xad\x61\xa0\xad\x5f\xa2\x3d\xe2\xd5\xa9\x22\x5b\xef\
+\x2f\x2e\xff\x00\xe3\x0d\x3a\x2f\x3f\x64\x92\xea\x0a\x99\xda\xa1\
+\x8c\xb9\xb5\x38\x27\x21\x3c\x84\x9e\x6a\x74\x7b\x15\xfd\xc5\xab\
+\x2c\x2d\x21\xa2\xf4\xce\x9c\xfd\x26\x3a\x6f\x7f\xd2\xb6\xb4\x5a\
+\x61\x6a\x4d\x3d\x22\x6a\xe0\xa1\x65\x49\x65\xcf\xb3\x92\x76\xe7\
+\x90\x08\x5a\x46\x3b\x64\x1a\x80\x49\xd3\x3a\x5b\x4d\xe8\x4d\x7b\
+\xd5\x9b\xe6\x9b\x8b\xa9\xae\x6e\x6a\xd9\x56\xf8\x10\xe5\xba\xb4\
+\xc7\x65\x3e\x39\x0a\x5a\x92\x82\x0a\x89\xca\xbd\x7d\x13\x8c\x73\
+\x51\x48\xff\x00\xa4\x25\xcc\x75\x9e\xd3\xd4\x19\x5a\x72\x33\x91\
+\x2c\xf0\x17\x6f\xb7\xd9\xa3\xca\x2d\x36\xcb\x25\x0a\x48\x1e\x21\
+\x42\xb2\x7c\xd9\x27\x6f\x38\x03\x8c\x53\x6d\x83\xac\xc9\x66\xd7\
+\xa9\xf4\xee\xa5\xd1\xec\xea\x0d\x2f\xa8\x2e\xae\x5d\x55\x6f\x54\
+\xf5\xc7\x76\x2b\xca\x5e\xef\x23\xe9\x49\xe3\x84\xe7\xcb\xce\x3d\
+\x32\x72\x5d\x13\x92\x77\x2e\x28\x3d\x3c\xe9\xac\x4e\xae\x74\xd6\
+\xea\xbd\x33\x1d\x3a\x77\xa8\x56\x37\x1d\xfd\x59\x21\xc5\x38\x88\
+\x92\xbc\x26\x9e\x49\x49\xce\x46\x77\xa1\x00\x67\x00\x93\xd8\x76\
+\xaf\x35\xb6\x80\xb2\x68\x1e\x88\x6a\x59\x17\x6b\x5b\x2e\x5f\xa6\
+\xea\xc7\x6d\x56\xb7\xdc\xc9\x5b\x31\x58\x57\x99\x69\xf4\xf3\x6c\
+\x52\x73\x8f\xde\x1f\x83\x3c\xde\xa3\x5f\x3a\x91\xd5\x5d\x2d\x32\
+\x2b\xda\x7f\x48\x46\xd3\xa9\x69\x36\x68\xf3\x67\x96\x62\x45\x43\
+\x24\x2c\x25\x6f\x2c\x72\xa5\x6c\x4a\x73\x81\x9c\x24\x62\x9e\xbf\
+\x4c\x4e\xa3\xc1\xd6\xba\x86\xc5\x68\xb3\xcf\x83\x32\x3d\x9e\x19\
+\x33\x1e\xb7\xaf\x74\x47\x26\xbc\x41\x7b\xc2\x57\xef\xa4\x6d\x18\
+\x57\xc9\xf9\xa8\x76\xb3\x2d\x1c\xd9\x92\x66\xbf\xd1\x9f\xa7\x16\
+\xad\x4b\xa5\xf5\x7e\xb0\xb8\xda\x63\x5f\xdf\xb1\xb2\x86\xed\xd6\
+\xd9\x53\x04\x78\xcf\x48\x58\x27\x73\xab\x2a\x40\x09\x48\x09\xe0\
+\xa8\x03\x93\xec\x2a\x7e\xee\x87\xe9\xad\xbb\xab\x3d\x36\x7e\x56\
+\x9e\xb0\xb7\x1b\x54\x46\x72\x15\xea\xc8\xc4\xe4\xca\x66\x14\xdd\
+\x89\x2d\xa9\x0a\x4a\xd5\xf7\x96\xa0\x9e\x0e\x38\xf5\x26\xa8\xde\
+\x92\x75\x2a\x4e\x84\x8b\x7b\xb4\x4b\xb2\x44\xd4\x3a\x7e\xfd\x1c\
+\x47\xb9\xdb\x24\x3a\xa6\x7c\x44\xa7\x20\x14\x38\x90\x4a\x14\x02\
+\x94\x33\x83\xdc\x1e\xe0\x10\xd3\xa8\xf5\x3e\x9d\x37\xdb\x55\xd7\
+\x44\x68\xe3\xa5\x1c\xb7\x3a\x1f\x1b\xae\x8e\xcc\x53\x8e\xa5\x49\
+\x52\x09\x52\x82\x76\xed\x29\xec\x90\x3b\xf2\x7b\x54\x26\xac\x5a\
+\x70\x9e\x76\xcb\x63\x50\xf4\xde\xcb\xa4\xba\x77\xad\xc4\xfb\x54\
+\x37\x6f\x33\xb5\x88\xd3\xfa\x7d\xd7\x89\x25\x96\x92\xad\xe5\xd4\
+\x8c\xf6\x28\x51\x4e\x7d\x08\x1f\x15\x68\xca\xe8\xb7\x4f\xed\xb7\
+\xf9\x1a\x0a\xe3\xa6\x6c\xb0\xec\xc2\xca\x14\xde\xa8\x93\x79\x42\
+\x27\x19\xe7\x1e\x6f\x04\xbb\xb8\x23\xd7\x1b\x76\xf9\x71\x92\x0d\
+\x50\x5f\xa4\x27\x5c\x24\xf5\x61\xdb\x3f\xd9\xf4\xf2\x34\xeb\x16\
+\xc5\xba\xf7\x86\xdc\xcf\x1c\xbc\xf2\xf6\x8f\x10\x90\xda\x30\x40\
+\x40\x03\x83\xdc\xf3\x5b\xb5\x7f\x58\xb4\xce\xba\x44\x7b\x96\xbb\
+\xe9\x6c\x4b\xc6\xa4\x66\x22\x63\x2a\xe7\x1e\xf2\xf4\x46\xde\x09\
+\xfb\xaa\x5b\x28\x49\xc9\xc9\x3c\x85\x0e\xf8\xe0\x00\x2a\xdd\x51\
+\x6d\x54\x69\x32\x5a\xe5\x8f\x43\xe9\x3f\xd1\x77\x47\xf5\x12\xe3\
+\xa2\x60\xdf\x2f\x92\x67\xcc\xb6\x2c\x3d\x21\x48\x69\x6a\x53\xf2\
+\x30\xea\xc2\x7e\xf9\x42\x23\xed\x48\xed\xe7\xcf\x38\x15\x28\x83\
+\xd2\xad\x1f\xac\x2f\x9d\x19\xd4\x56\x9b\x04\x28\x96\x4b\xc4\x17\
+\x5d\xbf\x32\xde\x43\x45\xd8\xed\x85\xa8\x2b\x9e\xc5\x61\x68\xe3\
+\x1d\xaa\x8f\xbe\xf5\x44\xdd\x3a\x03\xa7\x7a\x52\x6c\x49\x65\x36\
+\x6b\x8a\xe7\x7e\xb2\x13\x37\x78\xdb\x95\x21\x5b\x3c\x2d\x83\x6f\
+\xfb\xa3\xbe\xe3\xf7\x7b\x73\xc5\xb3\xa2\xba\x88\xd6\x81\xfd\x16\
+\xae\x96\x3b\x86\xa6\xd3\x13\xa6\xcf\x88\xb4\x58\x22\xdb\xa7\x7d\
+\xa6\x74\x63\x29\x27\xc5\x0f\x20\x7f\x51\xe1\x85\x93\xcf\xef\x6e\
+\x1c\xf1\x91\x58\x89\x66\x5a\xf3\x6c\x40\xe6\x95\xd2\x3d\x47\xe8\
+\x85\xea\xf1\xa3\xb4\xe4\x1b\x7d\xea\x06\xb1\x4c\x46\x56\xc2\x15\
+\xbc\xc3\x90\xf0\x43\x09\x23\x3c\x81\xe3\xa0\x76\xcf\xec\xc9\xa9\
+\xee\xb7\xe8\xde\x80\xbb\x75\x0f\xa7\x3f\xd1\x0b\x2c\x66\xad\x08\
+\xbd\xcd\xb5\xdf\x5a\x19\xda\xea\xe2\x82\xb5\x25\xce\x4e\x32\x18\
+\x74\x77\xe7\x70\xed\x54\x3f\xe8\xef\xd6\x77\xba\x49\x22\xf2\x55\
+\xa7\x13\xa8\x22\x5c\xc3\x05\x51\xd5\x33\xc0\xf0\xdc\x65\x4a\x52\
+\x16\x0f\x86\xbc\x9f\x31\xf4\x1e\x87\x3c\x53\x9f\x4f\x7f\x48\x3b\
+\xce\x93\xd0\x9a\x9f\x4e\xbf\x63\x45\xc6\x6d\xea\x54\xa9\xac\x5c\
+\x15\x2c\xb6\x60\xbf\x21\xa2\x85\xad\x28\x28\x56\xee\x49\x56\x37\
+\x0e\xe7\xde\x84\xe3\xcc\x24\xa7\xc8\xb4\xf4\x9d\xef\x4d\x46\xfd\
+\x15\xba\xad\x7b\x89\xa6\x60\xce\xd3\xe8\xd6\x2a\x54\x2b\x5a\x9c\
+\x5a\x18\x53\x5e\x24\x14\xb0\x14\x50\x42\xb0\x3c\x8a\x20\x1e\x70\
+\x47\xad\x25\xbf\xf4\x43\x44\xea\x3e\xae\xf4\xd1\x16\xeb\x67\xea\
+\x5b\x56\xa5\xb2\xaa\xe7\x74\x83\x19\xd5\x14\x0f\x0d\xb4\x2c\xa5\
+\xb2\x4e\x46\xe2\xb4\xa4\xe3\x1c\x02\x47\x35\x49\xd8\x7a\x9e\x6d\
+\x1d\x01\xd4\x3d\x28\x36\x10\xf0\xbd\x5c\x51\x3b\xf5\x8f\xdb\x36\
+\x96\x76\xaa\x39\xd9\xe1\x6c\x3b\xbf\xdc\xfd\xf7\x0f\xbd\xdb\x8e\
+\x64\x37\xaf\xd2\x12\xf0\xf5\xf3\x40\x5e\xec\x96\x26\x6d\xb3\x34\
+\x74\x03\x08\x78\xd2\xbc\x74\x4d\x42\x9b\x43\x6a\xdc\x90\x84\x14\
+\x02\x12\x78\x04\xe3\x3d\xf8\xa9\xcc\x88\x70\x92\x64\xcf\xac\x3d\
+\x3e\xd2\x4a\xe9\x0e\xa3\xbc\x8d\x2d\xa7\xf4\x86\xa0\xb1\xdd\x36\
+\xdb\x58\xb7\xde\x5b\x92\xb9\xd0\xb7\xa1\x19\x71\x21\xd5\xf9\xc0\
+\x51\x51\xcf\x9b\xc9\xd8\x64\xd2\xae\xb6\xe8\x2d\x0d\x6c\xd6\xba\
+\x63\xa7\xba\x77\x47\x43\x89\x3f\x59\xa2\x0a\xdc\xba\x97\xd7\x9b\
+\x7a\x4b\xa8\x42\xbc\x16\xf3\xb4\x64\x21\x65\x44\xe4\x9d\xff\x00\
+\x02\xa9\xae\xa3\x6b\x4d\x0b\xaa\xa3\xce\x93\x68\xe9\x7b\x76\x0b\
+\xd4\xe7\xfc\x77\xa7\xb7\x7b\x75\xf4\x25\x65\x5b\x97\xb1\x92\x84\
+\xa5\x21\x47\x3c\x12\x40\x07\x8e\xc2\x9c\x7a\xc1\xd6\x39\xda\xef\
+\x58\xe9\xad\x51\x6f\xb3\x7e\xa1\x9b\xa7\xa3\x32\xd4\x62\x25\xfd\
+\xa3\x2e\x34\xe1\x71\x2e\x7d\xc4\xe3\x9c\x71\x83\xdb\xbd\x0d\xa0\
+\x50\x95\x91\x7b\x6b\x4e\x92\x68\x36\xa1\xeb\x5d\x2c\xe6\x93\xb1\
+\x69\xf8\xd6\x7b\x6a\x5d\xd3\xf7\xaf\xd7\x68\x5c\xd9\x72\x12\xd6\
+\xe5\x07\x5a\x2e\x95\x79\x95\xc6\x14\x90\x31\xdb\xd3\x1c\x69\xb4\
+\x0c\x1c\x0e\x7f\x8d\x5b\xbd\x44\xea\xa6\x91\xd7\x6b\x9d\x79\xbc\
+\xf4\xa2\x30\xd5\x93\x62\xf8\x4e\xdd\x63\xde\x9f\x6d\x90\xe8\x6f\
+\x62\x5e\xfb\x38\x4e\x37\x27\xca\x70\x56\x41\xda\x33\x9e\x73\x1c\
+\xd7\x5a\xee\x0e\xa5\xd0\xda\x57\x4d\xb1\xa3\xed\x56\x77\xac\x2c\
+\x29\x97\x6e\x11\x87\xed\x66\x92\x00\xdc\xae\x06\x32\x46\xe3\x92\
+\xac\xa8\x92\x31\x9c\x54\x49\xae\x45\xa1\x19\x25\xaa\x20\xb9\x52\
+\x7e\xe6\x73\x8f\x53\x58\xad\x41\x5c\xe3\x3f\x5a\xd8\x1b\xe3\xd3\
+\x93\x41\x4a\x02\xbd\xaa\xb7\x43\x1c\x59\xe5\xae\x03\xb7\x3b\xc4\
+\x2b\x6b\x40\x97\x65\x48\x6d\x84\x00\x39\x2a\x5a\x82\x47\xf1\x34\
+\x55\xf5\xfa\x14\x74\xda\x46\xae\xea\x9c\x7d\x4d\x29\x8f\xff\x00\
+\x45\xd3\xcb\x12\x16\xb2\x38\x72\x40\x1f\xb2\x40\xe3\x9c\x1f\x39\
+\xfa\x0f\x7a\x29\xb1\xd8\xcb\x53\x47\x62\x4f\xa7\x54\x55\x66\x8e\
+\x91\xd8\x6e\xff\x00\xf2\x34\xe4\x3b\x0a\xed\x1a\x2b\x87\x2e\x83\
+\xbb\xbe\x7f\x2f\xc9\xc3\xfd\x27\xfe\xfc\xbf\x27\x17\x2b\x9a\xf1\
+\x27\x1c\x57\x69\x51\x55\xfd\x0b\xff\x00\x4f\x2f\xc9\x1f\xa4\x7f\
+\xdf\x97\xe4\xe2\xd3\xea\x3d\x28\x90\x71\x08\x8f\x73\x5d\xa5\x45\
+\x1f\xa1\x7f\xe9\xe5\xf9\x0f\xd2\x7f\xef\xcb\xf2\x70\xfa\x4e\x07\
+\x35\xb1\xa0\x54\xad\xc7\xb0\xae\xdc\xa2\xaf\xfa\x2f\xfd\xf9\x7e\
+\x43\xf4\x8f\xfb\xf2\xfc\x9c\x5c\xca\xb6\xf0\x06\x4d\x6d\x71\x59\
+\x50\x1e\xb5\xd9\x94\x55\x1f\x40\xdd\xdf\x89\xe5\xf9\x27\xf4\x9f\
+\xfb\xf2\xfc\x9c\x64\xd9\xda\xb3\x5a\x26\x2f\x83\x9e\x31\x5d\xa9\
+\x45\x0b\xa0\xac\xef\xc4\xf2\xfc\x87\xe9\x3f\xf7\xe5\xf9\x3e\x77\
+\x6b\xa9\xdf\x63\xb6\xca\x92\x14\x01\x6d\xb3\x8f\xa9\xe0\x7f\x3a\
+\xa1\x11\x95\x3a\xa5\x7a\xe7\xd6\xbe\xc6\x51\x5d\x4c\x2e\x11\x61\
+\xe2\xd5\xef\x73\xa1\x84\xa0\xb0\xea\xd7\xb9\xf1\xec\x82\x71\x80\
+\x73\xf4\xaf\x12\x15\xef\xc5\x7d\x85\xa2\xb4\x64\x37\xf1\xb5\xbd\
+\x8f\x8f\x67\x8c\x1c\x63\x3c\xf3\x5e\x82\x08\xef\xe6\xaf\xb0\x74\
+\x51\x90\x38\xfd\xc7\xc7\xac\x71\x40\x49\xc5\x7d\x85\xa2\xa7\x20\
+\x71\xbb\x8f\x8f\x84\x64\x70\x70\x6b\xd0\x09\x1c\x02\x7d\x39\x3e\
+\x95\xf6\x0a\x8a\x8e\x19\x3c\x7e\xe3\xe3\xee\x14\x08\x0a\x38\x03\
+\xd7\x15\xe8\x27\x80\x08\xaf\xb0\x34\x51\xc3\x27\xda\x3b\x8f\x90\
+\x18\x24\x7d\xd0\x4d\x79\xb4\xfb\x1f\x73\xe9\x5f\x60\x28\xa8\xe1\
+\xf7\x83\xc4\x27\xc8\xf8\xff\x00\xb4\x15\x77\xfc\xeb\xcc\x6d\x00\
+\x03\x8c\x73\x8a\xfb\x03\x45\x4f\x0f\xbc\x3d\xa3\xb8\xf8\xfc\x8c\
+\x9c\x11\xc1\xf9\x15\xe8\xc2\x95\xc2\x52\x33\x5f\x60\x28\xa3\x86\
+\x0b\x11\x6e\x47\xc8\x15\x0c\x63\x90\x4f\xf6\xab\xc2\x93\xff\x00\
+\x2b\x8e\xfe\xb5\xf5\xfe\x8a\x8e\x1f\x79\x2f\x13\x7e\x47\xc8\x21\
+\xbb\x1b\x4f\x6f\x7c\xf6\xa3\x82\x0a\x47\xf0\x3d\xeb\xeb\xed\x14\
+\x70\xbb\xc3\xda\x7b\x8f\x90\x24\x01\x94\x9c\xfb\xf3\xef\x5e\xe5\
+\x58\x20\x13\x8a\xfa\xfb\x45\x1c\x3e\xf0\xf6\x9e\xe3\xe4\x0a\x54\
+\x40\xe1\x47\xbf\x3c\x56\x1b\x95\x93\xc7\x7f\x5e\x6b\xec\x0d\x14\
+\x70\xc3\xda\x7b\x8f\x8f\xe0\x10\xac\xf6\x3d\xfb\x77\xaf\x54\xae\
+\x30\x09\xcf\xc8\xaf\xaf\xf4\x51\xc3\xef\x0f\x69\xee\x3e\x3f\x61\
+\x4a\xf5\xc7\xcd\x03\x68\xce\x72\x4e\x6b\xec\x0d\x15\x3c\x3e\xf2\
+\x3d\xa3\xb8\xf9\x00\x79\x1d\xf1\x9e\xc6\xb1\x52\x94\x7d\x41\x15\
+\xf6\x06\x8a\x38\x60\xf1\x17\xe4\x7c\x7d\xff\x00\xaa\x6b\xd0\x94\
+\x93\x9f\x7e\x3d\xeb\xec\x0d\x14\x70\xfb\xc8\xf6\x8e\xe3\xe4\x07\
+\x38\xe0\x8f\xf2\xac\x52\x3c\xb9\x38\xc5\x7d\x81\xa2\x8e\x19\x2f\
+\x11\xdc\x7c\x7f\x1c\x64\x0c\x8c\x77\x19\xc5\x62\xa7\x01\xc2\x73\
+\xc7\xd2\xbe\xc1\x51\x47\x0c\x87\x88\x7d\x87\xc8\x5b\x7c\x1b\x95\
+\xcd\xf0\xc5\xb2\x0c\xb9\xce\x13\xe5\x4c\x76\x14\xe1\x27\xe8\x33\
+\x57\x8f\x48\x7f\x45\xcd\x7b\xab\xe6\x33\x2f\x53\x46\x77\x4b\xd9\
+\xb2\x0a\xd7\x24\x62\x4b\x89\xe3\x84\x35\xdc\x64\x1e\xea\xc7\xd0\
+\xd7\xd0\x9a\x2a\x54\x12\x2b\x2a\xcd\xa1\x8b\x41\xe9\x2b\x0e\x88\
+\xd2\xf1\x34\xe6\x9b\x82\x98\x76\xf8\xc3\xca\x91\xca\x96\xa3\xdd\
+\x6b\x3f\xbc\xa3\xea\x68\xa7\xda\x2a\xe2\x42\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x02\x8a\
+\x28\xa0\x02\x8a\x28\xa0\x02\x8a\x28\xa0\x0f\xff\xd9\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0b\
+\x08\x01\x81\xe7\
+\x00\x65\
+\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x2e\x00\x6a\x00\x70\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/itemviews/simpledommodel.py b/examples/itemviews/simpledommodel.py
new file mode 100755
index 0000000..0a597c0
--- /dev/null
+++ b/examples/itemviews/simpledommodel.py
@@ -0,0 +1,224 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QAbstractItemModel, QFile, QIODevice, QModelIndex, Qt
+from PyQt5.QtWidgets import QApplication, QFileDialog, QMainWindow, QTreeView
+from PyQt5.QtXml import QDomDocument
+
+
+class DomItem(object):
+    def __init__(self, node, row, parent=None):
+        self.domNode = node
+        # Record the item's location within its parent.
+        self.rowNumber = row
+        self.parentItem = parent
+        self.childItems = {}
+
+    def node(self):
+        return self.domNode
+
+    def parent(self):
+        return self.parentItem
+
+    def child(self, i):
+        if i in self.childItems:
+            return self.childItems[i]
+
+        if i >= 0 and i < self.domNode.childNodes().count():
+            childNode = self.domNode.childNodes().item(i)
+            childItem = DomItem(childNode, i, self)
+            self.childItems[i] = childItem
+            return childItem
+
+        return None
+
+    def row(self):
+        return self.rowNumber
+
+
+class DomModel(QAbstractItemModel):
+    def __init__(self, document, parent=None):
+        super(DomModel, self).__init__(parent)
+
+        self.domDocument = document
+
+        self.rootItem = DomItem(self.domDocument, 0)
+
+    def columnCount(self, parent):
+        return 3
+
+    def data(self, index, role):
+        if not index.isValid():
+            return None
+
+        if role != Qt.DisplayRole:
+            return None
+
+        item = index.internalPointer()
+
+        node = item.node()
+        attributes = []
+        attributeMap = node.attributes()
+
+        if index.column() == 0:
+            return node.nodeName()
+        
+        elif index.column() == 1:
+            for i in range(0, attributeMap.count()):
+                attribute = attributeMap.item(i)
+                attributes.append(attribute.nodeName() + '="' +
+                                  attribute.nodeValue() + '"')
+
+            return " ".join(attributes)
+
+        if index.column() == 2:
+            value = node.nodeValue()
+            if value is None:
+                return ''
+
+            return ' '.join(node.nodeValue().split('\n'))
+
+        return None
+
+    def flags(self, index):
+        if not index.isValid():
+            return Qt.NoItemFlags
+
+        return Qt.ItemIsEnabled | Qt.ItemIsSelectable
+
+    def headerData(self, section, orientation, role):
+        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
+            if section == 0:
+                return "Name"
+
+            if section == 1:
+                return "Attributes"
+
+            if section == 2:
+                return "Value"
+
+        return None
+
+    def index(self, row, column, parent):
+        if not self.hasIndex(row, column, parent):
+            return QModelIndex()
+
+        if not parent.isValid():
+            parentItem = self.rootItem
+        else:
+            parentItem = parent.internalPointer()
+
+        childItem = parentItem.child(row)
+        if childItem:
+            return self.createIndex(row, column, childItem)
+        else:
+            return QModelIndex()
+
+    def parent(self, child):
+        if not child.isValid():
+            return QModelIndex()
+
+        childItem = child.internalPointer()
+        parentItem = childItem.parent()
+
+        if not parentItem or parentItem == self.rootItem:
+            return QModelIndex()
+
+        return self.createIndex(parentItem.row(), 0, parentItem)
+
+    def rowCount(self, parent):
+        if parent.column() > 0:
+            return 0
+
+        if not parent.isValid():
+            parentItem = self.rootItem
+        else:
+            parentItem = parent.internalPointer()
+
+        return parentItem.node().childNodes().count()
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction("&Open...", self.openFile, "Ctrl+O")
+        self.fileMenu.addAction("E&xit", self.close, "Ctrl+Q")
+
+        self.xmlPath = ""
+        self.model = DomModel(QDomDocument(), self)
+        self.view = QTreeView(self)
+        self.view.setModel(self.model)
+
+        self.setCentralWidget(self.view)
+        self.setWindowTitle("Simple DOM Model")
+
+    def openFile(self):
+        filePath, _ = QFileDialog.getOpenFileName(self, "Open File",
+                self.xmlPath, "XML files (*.xml);;HTML files (*.html);;"
+                "SVG files (*.svg);;User Interface files (*.ui)")
+
+        if filePath:
+            f = QFile(filePath)
+            if f.open(QIODevice.ReadOnly):
+                document = QDomDocument()
+                if document.setContent(f):
+                    newModel = DomModel(document, self)
+                    self.view.setModel(newModel)
+                    self.model = newModel
+                    self.xmlPath = filePath
+
+                f.close()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.resize(640, 480)
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/simpletreemodel/default.txt b/examples/itemviews/simpletreemodel/default.txt
new file mode 100644
index 0000000..2b2fb57
--- /dev/null
+++ b/examples/itemviews/simpletreemodel/default.txt
@@ -0,0 +1,40 @@
+Getting Started				How to familiarize yourself with Qt Designer
+    Launching Designer			Running the Qt Designer application
+    The User Interface			How to interact with Qt Designer
+
+Designing a Component			Creating a GUI for your application
+    Creating a Dialog			How to create a dialog
+    Composing the Dialog		Putting widgets into the dialog example
+    Creating a Layout			Arranging widgets on a form
+    Signal and Slot Connections		Making widget communicate with each other
+
+Using a Component in Your Application	Generating code from forms
+    The Direct Approach			Using a form without any adjustments
+    The Single Inheritance Approach	Subclassing a form's base class
+    The Multiple Inheritance Approach	Subclassing the form itself
+    Automatic Connections		Connecting widgets using a naming scheme
+        A Dialog Without Auto-Connect	How to connect widgets without a naming scheme
+        A Dialog With Auto-Connect	Using automatic connections
+
+Form Editing Mode			How to edit a form in Qt Designer
+    Managing Forms			Loading and saving forms
+    Editing a Form			Basic editing techniques
+    The Property Editor			Changing widget properties
+    The Object Inspector		Examining the hierarchy of objects on a form
+    Layouts				Objects that arrange widgets on a form
+        Applying and Breaking Layouts	Managing widgets in layouts 
+        Horizontal and Vertical Layouts	Standard row and column layouts
+        The Grid Layout			Arranging widgets in a matrix
+    Previewing Forms			Checking that the design works
+
+Using Containers			How to group widgets together
+    General Features			Common container features
+    Frames				QFrame
+    Group Boxes				QGroupBox
+    Stacked Widgets			QStackedWidget
+    Tab Widgets				QTabWidget
+    Toolbox Widgets			QToolBox
+
+Connection Editing Mode			Connecting widgets together with signals and slots
+    Connecting Objects			Making connections in Qt Designer
+    Editing Connections			Changing existing connections
diff --git a/examples/itemviews/simpletreemodel/simpletreemodel.py b/examples/itemviews/simpletreemodel/simpletreemodel.py
new file mode 100755
index 0000000..5a1c9cf
--- /dev/null
+++ b/examples/itemviews/simpletreemodel/simpletreemodel.py
@@ -0,0 +1,212 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QAbstractItemModel, QFile, QIODevice, QModelIndex, Qt
+from PyQt5.QtWidgets import QApplication, QTreeView
+
+import simpletreemodel_rc
+
+
+class TreeItem(object):
+    def __init__(self, data, parent=None):
+        self.parentItem = parent
+        self.itemData = data
+        self.childItems = []
+
+    def appendChild(self, item):
+        self.childItems.append(item)
+
+    def child(self, row):
+        return self.childItems[row]
+
+    def childCount(self):
+        return len(self.childItems)
+
+    def columnCount(self):
+        return len(self.itemData)
+
+    def data(self, column):
+        try:
+            return self.itemData[column]
+        except IndexError:
+            return None
+
+    def parent(self):
+        return self.parentItem
+
+    def row(self):
+        if self.parentItem:
+            return self.parentItem.childItems.index(self)
+
+        return 0
+
+
+class TreeModel(QAbstractItemModel):
+    def __init__(self, data, parent=None):
+        super(TreeModel, self).__init__(parent)
+
+        self.rootItem = TreeItem(("Title", "Summary"))
+        self.setupModelData(data.split('\n'), self.rootItem)
+
+    def columnCount(self, parent):
+        if parent.isValid():
+            return parent.internalPointer().columnCount()
+        else:
+            return self.rootItem.columnCount()
+
+    def data(self, index, role):
+        if not index.isValid():
+            return None
+
+        if role != Qt.DisplayRole:
+            return None
+
+        item = index.internalPointer()
+
+        return item.data(index.column())
+
+    def flags(self, index):
+        if not index.isValid():
+            return Qt.NoItemFlags
+
+        return Qt.ItemIsEnabled | Qt.ItemIsSelectable
+
+    def headerData(self, section, orientation, role):
+        if orientation == Qt.Horizontal and role == Qt.DisplayRole:
+            return self.rootItem.data(section)
+
+        return None
+
+    def index(self, row, column, parent):
+        if not self.hasIndex(row, column, parent):
+            return QModelIndex()
+
+        if not parent.isValid():
+            parentItem = self.rootItem
+        else:
+            parentItem = parent.internalPointer()
+
+        childItem = parentItem.child(row)
+        if childItem:
+            return self.createIndex(row, column, childItem)
+        else:
+            return QModelIndex()
+
+    def parent(self, index):
+        if not index.isValid():
+            return QModelIndex()
+
+        childItem = index.internalPointer()
+        parentItem = childItem.parent()
+
+        if parentItem == self.rootItem:
+            return QModelIndex()
+
+        return self.createIndex(parentItem.row(), 0, parentItem)
+
+    def rowCount(self, parent):
+        if parent.column() > 0:
+            return 0
+
+        if not parent.isValid():
+            parentItem = self.rootItem
+        else:
+            parentItem = parent.internalPointer()
+
+        return parentItem.childCount()
+
+    def setupModelData(self, lines, parent):
+        parents = [parent]
+        indentations = [0]
+
+        number = 0
+
+        while number < len(lines):
+            position = 0
+            while position < len(lines[number]):
+                if lines[number][position] != ' ':
+                    break
+                position += 1
+
+            lineData = lines[number][position:].trimmed()
+
+            if lineData:
+                # Read the column data from the rest of the line.
+                columnData = [s for s in lineData.split('\t') if s]
+
+                if position > indentations[-1]:
+                    # The last child of the current parent is now the new
+                    # parent unless the current parent has no children.
+
+                    if parents[-1].childCount() > 0:
+                        parents.append(parents[-1].child(parents[-1].childCount() - 1))
+                        indentations.append(position)
+
+                else:
+                    while position < indentations[-1] and len(parents) > 0:
+                        parents.pop()
+                        indentations.pop()
+
+                # Append a new item to the current parent's list of children.
+                parents[-1].appendChild(TreeItem(columnData, parents[-1]))
+
+            number += 1
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    f = QFile(':/default.txt')
+    f.open(QIODevice.ReadOnly)
+    model = TreeModel(f.readAll())
+    f.close()
+
+    view = QTreeView()
+    view.setModel(model)
+    view.setWindowTitle("Simple Tree Model")
+    view.show()
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/simpletreemodel/simpletreemodel.qrc b/examples/itemviews/simpletreemodel/simpletreemodel.qrc
new file mode 100644
index 0000000..a8ecc98
--- /dev/null
+++ b/examples/itemviews/simpletreemodel/simpletreemodel.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+   <file>default.txt</file>
+</qresource>
+</RCC>
diff --git a/examples/itemviews/simpletreemodel/simpletreemodel_rc.py b/examples/itemviews/simpletreemodel/simpletreemodel_rc.py
new file mode 100644
index 0000000..c4bec56
--- /dev/null
+++ b/examples/itemviews/simpletreemodel/simpletreemodel_rc.py
@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 12 16:25:25 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x07\xb9\
+\x47\
+\x65\x74\x74\x69\x6e\x67\x20\x53\x74\x61\x72\x74\x65\x64\x09\x09\
+\x09\x09\x48\x6f\x77\x20\x74\x6f\x20\x66\x61\x6d\x69\x6c\x69\x61\
+\x72\x69\x7a\x65\x20\x79\x6f\x75\x72\x73\x65\x6c\x66\x20\x77\x69\
+\x74\x68\x20\x51\x74\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x0a\x20\
+\x20\x20\x20\x4c\x61\x75\x6e\x63\x68\x69\x6e\x67\x20\x44\x65\x73\
+\x69\x67\x6e\x65\x72\x09\x09\x09\x52\x75\x6e\x6e\x69\x6e\x67\x20\
+\x74\x68\x65\x20\x51\x74\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\
+\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x0a\x20\x20\x20\x20\
+\x54\x68\x65\x20\x55\x73\x65\x72\x20\x49\x6e\x74\x65\x72\x66\x61\
+\x63\x65\x09\x09\x09\x48\x6f\x77\x20\x74\x6f\x20\x69\x6e\x74\x65\
+\x72\x61\x63\x74\x20\x77\x69\x74\x68\x20\x51\x74\x20\x44\x65\x73\
+\x69\x67\x6e\x65\x72\x0a\x0a\x44\x65\x73\x69\x67\x6e\x69\x6e\x67\
+\x20\x61\x20\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x09\x09\x09\x43\
+\x72\x65\x61\x74\x69\x6e\x67\x20\x61\x20\x47\x55\x49\x20\x66\x6f\
+\x72\x20\x79\x6f\x75\x72\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\
+\x6f\x6e\x0a\x20\x20\x20\x20\x43\x72\x65\x61\x74\x69\x6e\x67\x20\
+\x61\x20\x44\x69\x61\x6c\x6f\x67\x09\x09\x09\x48\x6f\x77\x20\x74\
+\x6f\x20\x63\x72\x65\x61\x74\x65\x20\x61\x20\x64\x69\x61\x6c\x6f\
+\x67\x0a\x20\x20\x20\x20\x43\x6f\x6d\x70\x6f\x73\x69\x6e\x67\x20\
+\x74\x68\x65\x20\x44\x69\x61\x6c\x6f\x67\x09\x09\x50\x75\x74\x74\
+\x69\x6e\x67\x20\x77\x69\x64\x67\x65\x74\x73\x20\x69\x6e\x74\x6f\
+\x20\x74\x68\x65\x20\x64\x69\x61\x6c\x6f\x67\x20\x65\x78\x61\x6d\
+\x70\x6c\x65\x0a\x20\x20\x20\x20\x43\x72\x65\x61\x74\x69\x6e\x67\
+\x20\x61\x20\x4c\x61\x79\x6f\x75\x74\x09\x09\x09\x41\x72\x72\x61\
+\x6e\x67\x69\x6e\x67\x20\x77\x69\x64\x67\x65\x74\x73\x20\x6f\x6e\
+\x20\x61\x20\x66\x6f\x72\x6d\x0a\x20\x20\x20\x20\x53\x69\x67\x6e\
+\x61\x6c\x20\x61\x6e\x64\x20\x53\x6c\x6f\x74\x20\x43\x6f\x6e\x6e\
+\x65\x63\x74\x69\x6f\x6e\x73\x09\x09\x4d\x61\x6b\x69\x6e\x67\x20\
+\x77\x69\x64\x67\x65\x74\x20\x63\x6f\x6d\x6d\x75\x6e\x69\x63\x61\
+\x74\x65\x20\x77\x69\x74\x68\x20\x65\x61\x63\x68\x20\x6f\x74\x68\
+\x65\x72\x0a\x0a\x55\x73\x69\x6e\x67\x20\x61\x20\x43\x6f\x6d\x70\
+\x6f\x6e\x65\x6e\x74\x20\x69\x6e\x20\x59\x6f\x75\x72\x20\x41\x70\
+\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x09\x47\x65\x6e\x65\x72\x61\
+\x74\x69\x6e\x67\x20\x63\x6f\x64\x65\x20\x66\x72\x6f\x6d\x20\x66\
+\x6f\x72\x6d\x73\x0a\x20\x20\x20\x20\x54\x68\x65\x20\x44\x69\x72\
+\x65\x63\x74\x20\x41\x70\x70\x72\x6f\x61\x63\x68\x09\x09\x09\x55\
+\x73\x69\x6e\x67\x20\x61\x20\x66\x6f\x72\x6d\x20\x77\x69\x74\x68\
+\x6f\x75\x74\x20\x61\x6e\x79\x20\x61\x64\x6a\x75\x73\x74\x6d\x65\
+\x6e\x74\x73\x0a\x20\x20\x20\x20\x54\x68\x65\x20\x53\x69\x6e\x67\
+\x6c\x65\x20\x49\x6e\x68\x65\x72\x69\x74\x61\x6e\x63\x65\x20\x41\
+\x70\x70\x72\x6f\x61\x63\x68\x09\x53\x75\x62\x63\x6c\x61\x73\x73\
+\x69\x6e\x67\x20\x61\x20\x66\x6f\x72\x6d\x27\x73\x20\x62\x61\x73\
+\x65\x20\x63\x6c\x61\x73\x73\x0a\x20\x20\x20\x20\x54\x68\x65\x20\
+\x4d\x75\x6c\x74\x69\x70\x6c\x65\x20\x49\x6e\x68\x65\x72\x69\x74\
+\x61\x6e\x63\x65\x20\x41\x70\x70\x72\x6f\x61\x63\x68\x09\x53\x75\
+\x62\x63\x6c\x61\x73\x73\x69\x6e\x67\x20\x74\x68\x65\x20\x66\x6f\
+\x72\x6d\x20\x69\x74\x73\x65\x6c\x66\x0a\x20\x20\x20\x20\x41\x75\
+\x74\x6f\x6d\x61\x74\x69\x63\x20\x43\x6f\x6e\x6e\x65\x63\x74\x69\
+\x6f\x6e\x73\x09\x09\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6e\x67\x20\
+\x77\x69\x64\x67\x65\x74\x73\x20\x75\x73\x69\x6e\x67\x20\x61\x20\
+\x6e\x61\x6d\x69\x6e\x67\x20\x73\x63\x68\x65\x6d\x65\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x41\x20\x44\x69\x61\x6c\x6f\x67\x20\x57\
+\x69\x74\x68\x6f\x75\x74\x20\x41\x75\x74\x6f\x2d\x43\x6f\x6e\x6e\
+\x65\x63\x74\x09\x48\x6f\x77\x20\x74\x6f\x20\x63\x6f\x6e\x6e\x65\
+\x63\x74\x20\x77\x69\x64\x67\x65\x74\x73\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x61\x20\x6e\x61\x6d\x69\x6e\x67\x20\x73\x63\x68\x65\
+\x6d\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x41\x20\x44\x69\x61\
+\x6c\x6f\x67\x20\x57\x69\x74\x68\x20\x41\x75\x74\x6f\x2d\x43\x6f\
+\x6e\x6e\x65\x63\x74\x09\x55\x73\x69\x6e\x67\x20\x61\x75\x74\x6f\
+\x6d\x61\x74\x69\x63\x20\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\
+\x73\x0a\x0a\x46\x6f\x72\x6d\x20\x45\x64\x69\x74\x69\x6e\x67\x20\
+\x4d\x6f\x64\x65\x09\x09\x09\x48\x6f\x77\x20\x74\x6f\x20\x65\x64\
+\x69\x74\x20\x61\x20\x66\x6f\x72\x6d\x20\x69\x6e\x20\x51\x74\x20\
+\x44\x65\x73\x69\x67\x6e\x65\x72\x0a\x20\x20\x20\x20\x4d\x61\x6e\
+\x61\x67\x69\x6e\x67\x20\x46\x6f\x72\x6d\x73\x09\x09\x09\x4c\x6f\
+\x61\x64\x69\x6e\x67\x20\x61\x6e\x64\x20\x73\x61\x76\x69\x6e\x67\
+\x20\x66\x6f\x72\x6d\x73\x0a\x20\x20\x20\x20\x45\x64\x69\x74\x69\
+\x6e\x67\x20\x61\x20\x46\x6f\x72\x6d\x09\x09\x09\x42\x61\x73\x69\
+\x63\x20\x65\x64\x69\x74\x69\x6e\x67\x20\x74\x65\x63\x68\x6e\x69\
+\x71\x75\x65\x73\x0a\x20\x20\x20\x20\x54\x68\x65\x20\x50\x72\x6f\
+\x70\x65\x72\x74\x79\x20\x45\x64\x69\x74\x6f\x72\x09\x09\x09\x43\
+\x68\x61\x6e\x67\x69\x6e\x67\x20\x77\x69\x64\x67\x65\x74\x20\x70\
+\x72\x6f\x70\x65\x72\x74\x69\x65\x73\x0a\x20\x20\x20\x20\x54\x68\
+\x65\x20\x4f\x62\x6a\x65\x63\x74\x20\x49\x6e\x73\x70\x65\x63\x74\
+\x6f\x72\x09\x09\x45\x78\x61\x6d\x69\x6e\x69\x6e\x67\x20\x74\x68\
+\x65\x20\x68\x69\x65\x72\x61\x72\x63\x68\x79\x20\x6f\x66\x20\x6f\
+\x62\x6a\x65\x63\x74\x73\x20\x6f\x6e\x20\x61\x20\x66\x6f\x72\x6d\
+\x0a\x20\x20\x20\x20\x4c\x61\x79\x6f\x75\x74\x73\x09\x09\x09\x09\
+\x4f\x62\x6a\x65\x63\x74\x73\x20\x74\x68\x61\x74\x20\x61\x72\x72\
+\x61\x6e\x67\x65\x20\x77\x69\x64\x67\x65\x74\x73\x20\x6f\x6e\x20\
+\x61\x20\x66\x6f\x72\x6d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x41\
+\x70\x70\x6c\x79\x69\x6e\x67\x20\x61\x6e\x64\x20\x42\x72\x65\x61\
+\x6b\x69\x6e\x67\x20\x4c\x61\x79\x6f\x75\x74\x73\x09\x4d\x61\x6e\
+\x61\x67\x69\x6e\x67\x20\x77\x69\x64\x67\x65\x74\x73\x20\x69\x6e\
+\x20\x6c\x61\x79\x6f\x75\x74\x73\x20\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x48\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x20\x61\x6e\x64\
+\x20\x56\x65\x72\x74\x69\x63\x61\x6c\x20\x4c\x61\x79\x6f\x75\x74\
+\x73\x09\x53\x74\x61\x6e\x64\x61\x72\x64\x20\x72\x6f\x77\x20\x61\
+\x6e\x64\x20\x63\x6f\x6c\x75\x6d\x6e\x20\x6c\x61\x79\x6f\x75\x74\
+\x73\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x54\x68\x65\x20\x47\x72\
+\x69\x64\x20\x4c\x61\x79\x6f\x75\x74\x09\x09\x09\x41\x72\x72\x61\
+\x6e\x67\x69\x6e\x67\x20\x77\x69\x64\x67\x65\x74\x73\x20\x69\x6e\
+\x20\x61\x20\x6d\x61\x74\x72\x69\x78\x0a\x20\x20\x20\x20\x50\x72\
+\x65\x76\x69\x65\x77\x69\x6e\x67\x20\x46\x6f\x72\x6d\x73\x09\x09\
+\x09\x43\x68\x65\x63\x6b\x69\x6e\x67\x20\x74\x68\x61\x74\x20\x74\
+\x68\x65\x20\x64\x65\x73\x69\x67\x6e\x20\x77\x6f\x72\x6b\x73\x0a\
+\x0a\x55\x73\x69\x6e\x67\x20\x43\x6f\x6e\x74\x61\x69\x6e\x65\x72\
+\x73\x09\x09\x09\x48\x6f\x77\x20\x74\x6f\x20\x67\x72\x6f\x75\x70\
+\x20\x77\x69\x64\x67\x65\x74\x73\x20\x74\x6f\x67\x65\x74\x68\x65\
+\x72\x0a\x20\x20\x20\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x46\x65\
+\x61\x74\x75\x72\x65\x73\x09\x09\x09\x43\x6f\x6d\x6d\x6f\x6e\x20\
+\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x66\x65\x61\x74\x75\x72\
+\x65\x73\x0a\x20\x20\x20\x20\x46\x72\x61\x6d\x65\x73\x09\x09\x09\
+\x09\x51\x46\x72\x61\x6d\x65\x0a\x20\x20\x20\x20\x47\x72\x6f\x75\
+\x70\x20\x42\x6f\x78\x65\x73\x09\x09\x09\x09\x51\x47\x72\x6f\x75\
+\x70\x42\x6f\x78\x0a\x20\x20\x20\x20\x53\x74\x61\x63\x6b\x65\x64\
+\x20\x57\x69\x64\x67\x65\x74\x73\x09\x09\x09\x51\x53\x74\x61\x63\
+\x6b\x65\x64\x57\x69\x64\x67\x65\x74\x0a\x20\x20\x20\x20\x54\x61\
+\x62\x20\x57\x69\x64\x67\x65\x74\x73\x09\x09\x09\x09\x51\x54\x61\
+\x62\x57\x69\x64\x67\x65\x74\x0a\x20\x20\x20\x20\x54\x6f\x6f\x6c\
+\x62\x6f\x78\x20\x57\x69\x64\x67\x65\x74\x73\x09\x09\x09\x51\x54\
+\x6f\x6f\x6c\x42\x6f\x78\x0a\x0a\x43\x6f\x6e\x6e\x65\x63\x74\x69\
+\x6f\x6e\x20\x45\x64\x69\x74\x69\x6e\x67\x20\x4d\x6f\x64\x65\x09\
+\x09\x09\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6e\x67\x20\x77\x69\x64\
+\x67\x65\x74\x73\x20\x74\x6f\x67\x65\x74\x68\x65\x72\x20\x77\x69\
+\x74\x68\x20\x73\x69\x67\x6e\x61\x6c\x73\x20\x61\x6e\x64\x20\x73\
+\x6c\x6f\x74\x73\x0a\x20\x20\x20\x20\x43\x6f\x6e\x6e\x65\x63\x74\
+\x69\x6e\x67\x20\x4f\x62\x6a\x65\x63\x74\x73\x09\x09\x09\x4d\x61\
+\x6b\x69\x6e\x67\x20\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x73\
+\x20\x69\x6e\x20\x51\x74\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x0a\
+\x20\x20\x20\x20\x45\x64\x69\x74\x69\x6e\x67\x20\x43\x6f\x6e\x6e\
+\x65\x63\x74\x69\x6f\x6e\x73\x09\x09\x09\x43\x68\x61\x6e\x67\x69\
+\x6e\x67\x20\x65\x78\x69\x73\x74\x69\x6e\x67\x20\x63\x6f\x6e\x6e\
+\x65\x63\x74\x69\x6f\x6e\x73\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x0b\
+\x0c\xe2\x22\xf4\
+\x00\x64\
+\x00\x65\x00\x66\x00\x61\x00\x75\x00\x6c\x00\x74\x00\x2e\x00\x74\x00\x78\x00\x74\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/itemviews/simplewidgetmapper.py b/examples/itemviews/simplewidgetmapper.py
new file mode 100755
index 0000000..1aed6cd
--- /dev/null
+++ b/examples/itemviews/simplewidgetmapper.py
@@ -0,0 +1,130 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtGui import QStandardItem, QStandardItemModel
+from PyQt5.QtWidgets import (QApplication, QDataWidgetMapper, QGridLayout,
+        QLabel, QLineEdit, QPushButton, QSpinBox, QTextEdit, QWidget)
+
+
+class Window(QWidget):
+    def __init__(self, parent=None):
+        super(Window, self).__init__(parent)
+
+        # Set up the model.
+        self.setupModel()
+
+        # Set up the widgets.
+        nameLabel = QLabel("Na&me:")
+        nameEdit = QLineEdit()
+        addressLabel = QLabel("&Address:")
+        addressEdit = QTextEdit()
+        ageLabel = QLabel("A&ge (in years):")
+        ageSpinBox = QSpinBox()
+        self.nextButton = QPushButton("&Next")
+        self.previousButton = QPushButton("&Previous")
+        nameLabel.setBuddy(nameEdit)
+        addressLabel.setBuddy(addressEdit)
+        ageLabel.setBuddy(ageSpinBox)
+
+        # Set up the mapper.
+        self.mapper = QDataWidgetMapper(self)
+        self.mapper.setModel(self.model)
+        self.mapper.addMapping(nameEdit, 0)
+        self.mapper.addMapping(addressEdit, 1)
+        self.mapper.addMapping(ageSpinBox, 2)
+
+        # Set up connections and layouts.
+        self.previousButton.clicked.connect(self.mapper.toPrevious)
+        self.nextButton.clicked.connect(self.mapper.toNext)
+        self.mapper.currentIndexChanged.connect(self.updateButtons)
+
+        layout = QGridLayout()
+        layout.addWidget(nameLabel, 0, 0, 1, 1)
+        layout.addWidget(nameEdit, 0, 1, 1, 1)
+        layout.addWidget(self.previousButton, 0, 2, 1, 1)
+        layout.addWidget(addressLabel, 1, 0, 1, 1)
+        layout.addWidget(addressEdit, 1, 1, 2, 1)
+        layout.addWidget(self.nextButton, 1, 2, 1, 1)
+        layout.addWidget(ageLabel, 3, 0, 1, 1)
+        layout.addWidget(ageSpinBox, 3, 1, 1, 1)
+        self.setLayout(layout)
+
+        self.setWindowTitle("Simple Widget Mapper")
+        self.mapper.toFirst()
+ 
+    def setupModel(self):
+        self.model = QStandardItemModel(5, 3, self)
+        names = ("Alice", "Bob", "Carol", "Donald", "Emma")
+        addresses = ("<qt>123 Main Street<br/>Market Town</qt>",
+                     "<qt>PO Box 32<br/>Mail Handling Service"
+                     "<br/>Service City</qt>",
+                     "<qt>The Lighthouse<br/>Remote Island</qt>",
+                     "<qt>47338 Park Avenue<br/>Big City</qt>",
+                     "<qt>Research Station<br/>Base Camp<br/>Big Mountain</qt>")
+        ages = ("20", "31", "32", "19", "26")
+        
+        for row, name in enumerate(names):
+            item = QStandardItem(name)
+            self.model.setItem(row, 0, item)
+            item = QStandardItem(addresses[row])
+            self.model.setItem(row, 1, item)
+            item = QStandardItem(ages[row])
+            self.model.setItem(row, 2, item)
+ 
+    def updateButtons(self, row):
+        self.previousButton.setEnabled(row > 0)
+        self.nextButton.setEnabled(row < self.model.rowCount() - 1)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    window = Window()
+    window.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/spinboxdelegate.py b/examples/itemviews/spinboxdelegate.py
new file mode 100755
index 0000000..e9071d1
--- /dev/null
+++ b/examples/itemviews/spinboxdelegate.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QModelIndex, Qt
+from PyQt5.QtGui import QStandardItemModel
+from PyQt5.QtWidgets import QApplication, QItemDelegate, QSpinBox, QTableView
+
+
+class SpinBoxDelegate(QItemDelegate):
+    def createEditor(self, parent, option, index):
+        editor = QSpinBox(parent)
+        editor.setMinimum(0)
+        editor.setMaximum(100)
+
+        return editor
+
+    def setEditorData(self, spinBox, index):
+        value = index.model().data(index, Qt.EditRole)
+
+        spinBox.setValue(value)
+
+    def setModelData(self, spinBox, model, index):
+        spinBox.interpretText()
+        value = spinBox.value()
+
+        model.setData(index, value, Qt.EditRole)
+
+    def updateEditorGeometry(self, editor, option, index):
+        editor.setGeometry(option.rect)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    model = QStandardItemModel(4, 2)
+    tableView = QTableView()
+    tableView.setModel(model)
+
+    delegate = SpinBoxDelegate()
+    tableView.setItemDelegate(delegate)
+
+    for row in range(4):
+        for column in range(2):
+            index = model.index(row, column, QModelIndex())
+            model.setData(index, (row + 1) * (column + 1))
+
+    tableView.setWindowTitle("Spin Box Delegate")
+    tableView.show()
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/spreadsheet/images/interview.png b/examples/itemviews/spreadsheet/images/interview.png
new file mode 100644
index 0000000..0c3d690
Binary files /dev/null and b/examples/itemviews/spreadsheet/images/interview.png differ
diff --git a/examples/itemviews/spreadsheet/printview.py b/examples/itemviews/spreadsheet/printview.py
new file mode 100644
index 0000000..6bedf27
--- /dev/null
+++ b/examples/itemviews/spreadsheet/printview.py
@@ -0,0 +1,53 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2012 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2011 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 PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## GNU Lesser General Public License Usage
+## 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.
+##
+## Other Usage
+## Alternatively, this file may be used in accordance with the terms and
+## conditions contained in a signed written agreement between you and Nokia.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QTableView
+
+
+class PrintView(QTableView):
+    def __init__(self):
+        super(PrintView, self).__init__()
+
+        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+
+    def print_(self, printer):
+        self.resize(printer.width(), printer.height())
+        self.render(printer)
diff --git a/examples/itemviews/spreadsheet/spreadsheet.py b/examples/itemviews/spreadsheet/spreadsheet.py
new file mode 100644
index 0000000..c1119c3
--- /dev/null
+++ b/examples/itemviews/spreadsheet/spreadsheet.py
@@ -0,0 +1,543 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2012 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2011 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 PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## GNU Lesser General Public License Usage
+## 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.
+##
+## Other Usage
+## Alternatively, this file may be used in accordance with the terms and
+## conditions contained in a signed written agreement between you and Nokia.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDate, QPoint, Qt
+from PyQt5.QtGui import QColor, QIcon, QKeySequence, QPainter, QPixmap
+from PyQt5.QtWidgets import (QAction, QActionGroup, QApplication, QColorDialog,
+        QComboBox, QDialog, QFontDialog, QGroupBox, QHBoxLayout, QLabel,
+        QLineEdit, QMainWindow, QMessageBox, QPushButton, QTableWidget,
+        QTableWidgetItem, QToolBar, QVBoxLayout)
+from PyQt5.QtPrintSupport import QPrinter, QPrintPreviewDialog
+
+import spreadsheet_rc
+
+from spreadsheetdelegate import SpreadSheetDelegate
+from spreadsheetitem import SpreadSheetItem
+from printview import PrintView
+from util import decode_pos, encode_pos
+
+
+class SpreadSheet(QMainWindow):
+
+    dateFormats = ["dd/M/yyyy", "yyyy/M/dd", "dd.MM.yyyy"]
+
+    currentDateFormat = dateFormats[0]
+
+    def __init__(self, rows, cols, parent = None):
+        super(SpreadSheet, self).__init__(parent)
+
+        self.toolBar = QToolBar()
+        self.addToolBar(self.toolBar)
+        self.formulaInput = QLineEdit()
+        self.cellLabel = QLabel(self.toolBar)
+        self.cellLabel.setMinimumSize(80, 0)
+        self.toolBar.addWidget(self.cellLabel)
+        self.toolBar.addWidget(self.formulaInput)
+        self.table = QTableWidget(rows, cols, self)
+        for c in range(cols):
+            character = chr(ord('A') + c)
+            self.table.setHorizontalHeaderItem(c, QTableWidgetItem(character))
+
+        self.table.setItemPrototype(self.table.item(rows - 1, cols - 1))
+        self.table.setItemDelegate(SpreadSheetDelegate(self))
+        self.createActions()
+        self.updateColor(0)
+        self.setupMenuBar()
+        self.setupContents()
+        self.setupContextMenu()
+        self.setCentralWidget(self.table)
+        self.statusBar()
+        self.table.currentItemChanged.connect(self.updateStatus)
+        self.table.currentItemChanged.connect(self.updateColor)
+        self.table.currentItemChanged.connect(self.updateLineEdit)
+        self.table.itemChanged.connect(self.updateStatus)
+        self.formulaInput.returnPressed.connect(self.returnPressed)
+        self.table.itemChanged.connect(self.updateLineEdit)
+        self.setWindowTitle("Spreadsheet")
+
+    def createActions(self):
+        self.cell_sumAction = QAction("Sum", self)
+        self.cell_sumAction.triggered.connect(self.actionSum)
+
+        self.cell_addAction = QAction("&Add", self)
+        self.cell_addAction.setShortcut(Qt.CTRL | Qt.Key_Plus)
+        self.cell_addAction.triggered.connect(self.actionAdd)
+
+        self.cell_subAction = QAction("&Subtract", self)
+        self.cell_subAction.setShortcut(Qt.CTRL | Qt.Key_Minus)
+        self.cell_subAction.triggered.connect(self.actionSubtract)
+
+        self.cell_mulAction = QAction("&Multiply", self)
+        self.cell_mulAction.setShortcut(Qt.CTRL | Qt.Key_multiply)
+        self.cell_mulAction.triggered.connect(self.actionMultiply)
+
+        self.cell_divAction = QAction("&Divide", self)
+        self.cell_divAction.setShortcut(Qt.CTRL | Qt.Key_division)
+        self.cell_divAction.triggered.connect(self.actionDivide)
+
+        self.fontAction = QAction("Font...", self)
+        self.fontAction.setShortcut(Qt.CTRL | Qt.Key_F)
+        self.fontAction.triggered.connect(self.selectFont)
+
+        self.colorAction = QAction(QIcon(QPixmap(16, 16)), "Background &Color...", self)
+        self.colorAction.triggered.connect(self.selectColor)
+
+        self.clearAction = QAction("Clear", self)
+        self.clearAction.setShortcut(Qt.Key_Delete)
+        self.clearAction.triggered.connect(self.clear)
+
+        self.aboutSpreadSheet = QAction("About Spreadsheet", self)
+        self.aboutSpreadSheet.triggered.connect(self.showAbout)
+
+        self.exitAction = QAction("E&xit", self)
+        self.exitAction.setShortcut(QKeySequence.Quit)
+        self.exitAction.triggered.connect(QApplication.instance().quit)
+
+        self.printAction = QAction("&Print", self)
+        self.printAction.setShortcut(QKeySequence.Print)
+        self.printAction.triggered.connect(self.print_)
+
+        self.firstSeparator = QAction(self)
+        self.firstSeparator.setSeparator(True)
+
+        self.secondSeparator = QAction(self)
+        self.secondSeparator.setSeparator(True)
+
+    def setupMenuBar(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.dateFormatMenu = self.fileMenu.addMenu("&Date format")
+        self.dateFormatGroup = QActionGroup(self)
+        for f in self.dateFormats:
+            action = QAction(f, self, checkable=True,
+                    triggered=self.changeDateFormat)
+            self.dateFormatGroup.addAction(action)
+            self.dateFormatMenu.addAction(action)
+            if f == self.currentDateFormat:
+                action.setChecked(True)
+                
+        self.fileMenu.addAction(self.printAction)
+        self.fileMenu.addAction(self.exitAction)
+        self.cellMenu = self.menuBar().addMenu("&Cell")
+        self.cellMenu.addAction(self.cell_addAction)
+        self.cellMenu.addAction(self.cell_subAction)
+        self.cellMenu.addAction(self.cell_mulAction)
+        self.cellMenu.addAction(self.cell_divAction)
+        self.cellMenu.addAction(self.cell_sumAction)
+        self.cellMenu.addSeparator()
+        self.cellMenu.addAction(self.colorAction)
+        self.cellMenu.addAction(self.fontAction)
+        self.menuBar().addSeparator()
+        self.aboutMenu = self.menuBar().addMenu("&Help")
+        self.aboutMenu.addAction(self.aboutSpreadSheet)
+
+    def changeDateFormat(self):
+        action = self.sender()
+        oldFormat = self.currentDateFormat
+        newFormat = self.currentDateFormat = action.text()
+        for row in range(self.table.rowCount()):
+            item = self.table.item(row, 1)
+            date = QDate.fromString(item.text(), oldFormat)
+            item.setText(date.toString(newFormat))
+
+    def updateStatus(self, item):
+        if item and item == self.table.currentItem():
+            self.statusBar().showMessage(item.data(Qt.StatusTipRole), 1000)
+            self.cellLabel.setText("Cell: (%s)" % encode_pos(self.table.row(item),
+                                                                     self.table.column(item)))
+
+    def updateColor(self, item):
+        pixmap = QPixmap(16, 16)
+        color = QColor()
+        if item:
+            color = item.backgroundColor()
+        if not color.isValid():
+            color = self.palette().base().color()
+        painter = QPainter(pixmap)
+        painter.fillRect(0, 0, 16, 16, color)
+        lighter = color.lighter()
+        painter.setPen(lighter)
+        # light frame
+        painter.drawPolyline(QPoint(0, 15), QPoint(0, 0), QPoint(15, 0))
+        painter.setPen(color.darker())
+        # dark frame
+        painter.drawPolyline(QPoint(1, 15), QPoint(15, 15), QPoint(15, 1))
+        painter.end()
+        self.colorAction.setIcon(QIcon(pixmap))
+
+    def updateLineEdit(self, item):
+        if item != self.table.currentItem():
+            return
+        if item:
+            self.formulaInput.setText(item.data(Qt.EditRole))
+        else:
+            self.formulaInput.clear()
+
+    def returnPressed(self):
+        text = self.formulaInput.text()
+        row = self.table.currentRow()
+        col = self.table.currentColumn()
+        item = self.table.item(row, col)
+        if not item:
+            self.table.setItem(row, col, SpreadSheetItem(text))
+        else:
+            item.setData(Qt.EditRole, text)
+        self.table.viewport().update()
+
+    def selectColor(self):
+        item = self.table.currentItem()
+        color = item and QColor(item.background()) or self.table.palette().base().color()
+        color = QColorDialog.getColor(color, self)
+        if not color.isValid():
+            return
+        selected = self.table.selectedItems()
+        if not selected:
+            return
+        for i in selected:
+            i and i.setBackground(color)
+        self.updateColor(self.table.currentItem())
+
+    def selectFont(self):
+        selected = self.table.selectedItems()
+        if not selected:
+            return
+        font, ok = QFontDialog.getFont(self.font(), self)
+        if not ok:
+            return
+        for i in selected:
+            i and i.setFont(font)
+
+    def runInputDialog(self, title, c1Text, c2Text, opText,
+                       outText, cell1, cell2, outCell):
+        rows = []
+        cols = []
+        for r in range(self.table.rowCount()):
+            rows.append(str(r + 1))
+        for c in range(self.table.columnCount()):
+            cols.append(chr(ord('A') + c))
+        addDialog = QDialog(self)
+        addDialog.setWindowTitle(title)
+        group = QGroupBox(title, addDialog)
+        group.setMinimumSize(250, 100)
+        cell1Label = QLabel(c1Text, group)
+        cell1RowInput = QComboBox(group)
+        c1Row, c1Col = decode_pos(cell1)
+        cell1RowInput.addItems(rows)
+        cell1RowInput.setCurrentIndex(c1Row)
+        cell1ColInput = QComboBox(group)
+        cell1ColInput.addItems(cols)
+        cell1ColInput.setCurrentIndex(c1Col)
+        operatorLabel = QLabel(opText, group)
+        operatorLabel.setAlignment(Qt.AlignHCenter)
+        cell2Label = QLabel(c2Text, group)
+        cell2RowInput = QComboBox(group)
+        c2Row, c2Col = decode_pos(cell2)
+        cell2RowInput.addItems(rows)
+        cell2RowInput.setCurrentIndex(c2Row)
+        cell2ColInput = QComboBox(group)
+        cell2ColInput.addItems(cols)
+        cell2ColInput.setCurrentIndex(c2Col)
+        equalsLabel = QLabel("=", group)
+        equalsLabel.setAlignment(Qt.AlignHCenter)
+        outLabel = QLabel(outText, group)
+        outRowInput = QComboBox(group)
+        outRow, outCol = decode_pos(outCell)
+        outRowInput.addItems(rows)
+        outRowInput.setCurrentIndex(outRow)
+        outColInput = QComboBox(group)
+        outColInput.addItems(cols)
+        outColInput.setCurrentIndex(outCol)
+
+        cancelButton = QPushButton("Cancel", addDialog)
+        cancelButton.clicked.connect(addDialog.reject)
+        okButton = QPushButton("OK", addDialog)
+        okButton.setDefault(True)
+        okButton.clicked.connect(addDialog.accept)
+        buttonsLayout = QHBoxLayout()
+        buttonsLayout.addStretch(1)
+        buttonsLayout.addWidget(okButton)
+        buttonsLayout.addSpacing(10)
+        buttonsLayout.addWidget(cancelButton)
+
+        dialogLayout = QVBoxLayout(addDialog)
+        dialogLayout.addWidget(group)
+        dialogLayout.addStretch(1)
+        dialogLayout.addItem(buttonsLayout)
+
+        cell1Layout = QHBoxLayout()
+        cell1Layout.addWidget(cell1Label)
+        cell1Layout.addSpacing(10)
+        cell1Layout.addWidget(cell1ColInput)
+        cell1Layout.addSpacing(10)
+        cell1Layout.addWidget(cell1RowInput)
+
+        cell2Layout = QHBoxLayout()
+        cell2Layout.addWidget(cell2Label)
+        cell2Layout.addSpacing(10)
+        cell2Layout.addWidget(cell2ColInput)
+        cell2Layout.addSpacing(10)
+        cell2Layout.addWidget(cell2RowInput)
+        outLayout = QHBoxLayout()
+        outLayout.addWidget(outLabel)
+        outLayout.addSpacing(10)
+        outLayout.addWidget(outColInput)
+        outLayout.addSpacing(10)
+        outLayout.addWidget(outRowInput)
+        vLayout = QVBoxLayout(group)
+        vLayout.addItem(cell1Layout)
+        vLayout.addWidget(operatorLabel)
+        vLayout.addItem(cell2Layout)
+        vLayout.addWidget(equalsLabel)
+        vLayout.addStretch(1)
+        vLayout.addItem(outLayout)
+        if addDialog.exec_():
+            cell1 = cell1ColInput.currentText() + cell1RowInput.currentText()
+            cell2 = cell2ColInput.currentText() + cell2RowInput.currentText()
+            outCell = outColInput.currentText() + outRowInput.currentText()
+            return True, cell1, cell2, outCell
+
+        return False, None, None, None
+
+    def actionSum(self):
+        row_first = 0
+        row_last = 0
+        row_cur = 0
+        col_first = 0
+        col_last = 0
+        col_cur = 0
+        selected = self.table.selectedItems()
+        if selected:
+            first = selected[0]
+            last = selected[-1]
+            row_first = self.table.row(first)
+            row_last = self.table.row(last)
+            col_first = self.table.column(first)
+            col_last = self.table.column(last)
+
+        current = self.table.currentItem()
+        if current:
+            row_cur = self.table.row(current)
+            col_cur = self.table.column(current)
+
+        cell1 = encode_pos(row_first, col_first)
+        cell2 = encode_pos(row_last, col_last)
+        out = encode_pos(row_cur, col_cur)
+        ok, cell1, cell2, out = self.runInputDialog("Sum cells", "First cell:",
+                "Last cell:", u"\N{GREEK CAPITAL LETTER SIGMA}", "Output to:",
+                cell1, cell2, out)
+        if ok:
+            row, col = decode_pos(out)
+            self.table.item(row, col).setText("sum %s %s" % (cell1, cell2))
+
+    def actionMath_helper(self, title, op):
+        cell1 = "C1"
+        cell2 = "C2"
+        out = "C3"
+        current = self.table.currentItem()
+        if current:
+            out = encode_pos(self.table.currentRow(), self.table.currentColumn())
+        ok, cell1, cell2, out = self.runInputDialog(title, "Cell 1", "Cell 2",
+                op, "Output to:", cell1, cell2, out)
+        if ok:
+            row, col = decode_pos(out)
+            self.table.item(row, col).setText("%s %s %s" % (op, cell1, cell2))
+
+    def actionAdd(self):
+        self.actionMath_helper("Addition", "+")
+
+    def actionSubtract(self):
+        self.actionMath_helper("Subtraction", "-")
+
+    def actionMultiply(self):
+        self.actionMath_helper("Multiplication", "*")
+
+    def actionDivide(self):
+        self.actionMath_helper("Division", "/")
+
+    def clear(self):
+        for i in self.table.selectedItems():
+            i.setText("")
+
+    def setupContextMenu(self):
+        self.addAction(self.cell_addAction)
+        self.addAction(self.cell_subAction)
+        self.addAction(self.cell_mulAction)
+        self.addAction(self.cell_divAction)
+        self.addAction(self.cell_sumAction)
+        self.addAction(self.firstSeparator)
+        self.addAction(self.colorAction)
+        self.addAction(self.fontAction)
+        self.addAction(self.secondSeparator)
+        self.addAction(self.clearAction)
+        self.setContextMenuPolicy(Qt.ActionsContextMenu)
+
+    def setupContents(self):
+        titleBackground = QColor(Qt.lightGray)
+        titleFont = self.table.font()
+        titleFont.setBold(True)
+        # column 0
+        self.table.setItem(0, 0, SpreadSheetItem("Item"))
+        self.table.item(0, 0).setBackground(titleBackground)
+        self.table.item(0, 0).setToolTip("This column shows the purchased item/service")
+        self.table.item(0, 0).setFont(titleFont)
+        self.table.setItem(1, 0, SpreadSheetItem("AirportBus"))
+        self.table.setItem(2, 0, SpreadSheetItem("Flight (Munich)"))
+        self.table.setItem(3, 0, SpreadSheetItem("Lunch"))
+        self.table.setItem(4, 0, SpreadSheetItem("Flight (LA)"))
+        self.table.setItem(5, 0, SpreadSheetItem("Taxi"))
+        self.table.setItem(6, 0, SpreadSheetItem("Dinner"))
+        self.table.setItem(7, 0, SpreadSheetItem("Hotel"))
+        self.table.setItem(8, 0, SpreadSheetItem("Flight (Oslo)"))
+        self.table.setItem(9, 0, SpreadSheetItem("Total:"))
+        self.table.item(9, 0).setFont(titleFont)
+        self.table.item(9, 0).setBackground(Qt.lightGray)
+        # column 1
+        self.table.setItem(0, 1, SpreadSheetItem("Date"))
+        self.table.item(0, 1).setBackground(titleBackground)
+        self.table.item(0, 1).setToolTip("This column shows the purchase date, double click to change")
+        self.table.item(0, 1).setFont(titleFont)
+        self.table.setItem(1, 1, SpreadSheetItem("15/6/2006"))
+        self.table.setItem(2, 1, SpreadSheetItem("15/6/2006"))
+        self.table.setItem(3, 1, SpreadSheetItem("15/6/2006"))
+        self.table.setItem(4, 1, SpreadSheetItem("21/5/2006"))
+        self.table.setItem(5, 1, SpreadSheetItem("16/6/2006"))
+        self.table.setItem(6, 1, SpreadSheetItem("16/6/2006"))
+        self.table.setItem(7, 1, SpreadSheetItem("16/6/2006"))
+        self.table.setItem(8, 1, SpreadSheetItem("18/6/2006"))
+        self.table.setItem(9, 1, SpreadSheetItem())
+        self.table.item(9, 1).setBackground(Qt.lightGray)
+        # column 2
+        self.table.setItem(0, 2, SpreadSheetItem("Price"))
+        self.table.item(0, 2).setBackground(titleBackground)
+        self.table.item(0, 2).setToolTip("This column shows the price of the purchase")
+        self.table.item(0, 2).setFont(titleFont)
+        self.table.setItem(1, 2, SpreadSheetItem("150"))
+        self.table.setItem(2, 2, SpreadSheetItem("2350"))
+        self.table.setItem(3, 2, SpreadSheetItem("-14"))
+        self.table.setItem(4, 2, SpreadSheetItem("980"))
+        self.table.setItem(5, 2, SpreadSheetItem("5"))
+        self.table.setItem(6, 2, SpreadSheetItem("120"))
+        self.table.setItem(7, 2, SpreadSheetItem("300"))
+        self.table.setItem(8, 2, SpreadSheetItem("1240"))
+        self.table.setItem(9, 2, SpreadSheetItem())
+        self.table.item(9, 2).setBackground(Qt.lightGray)
+        # column 3
+        self.table.setItem(0, 3, SpreadSheetItem("Currency"))
+        self.table.item(0, 3).setBackgroundColor(titleBackground)
+        self.table.item(0, 3).setToolTip("This column shows the currency")
+        self.table.item(0, 3).setFont(titleFont)
+        self.table.setItem(1, 3, SpreadSheetItem("NOK"))
+        self.table.setItem(2, 3, SpreadSheetItem("NOK"))
+        self.table.setItem(3, 3, SpreadSheetItem("EUR"))
+        self.table.setItem(4, 3, SpreadSheetItem("EUR"))
+        self.table.setItem(5, 3, SpreadSheetItem("USD"))
+        self.table.setItem(6, 3, SpreadSheetItem("USD"))
+        self.table.setItem(7, 3, SpreadSheetItem("USD"))
+        self.table.setItem(8, 3, SpreadSheetItem("USD"))
+        self.table.setItem(9, 3, SpreadSheetItem())
+        self.table.item(9,3).setBackground(Qt.lightGray)
+        # column 4
+        self.table.setItem(0, 4, SpreadSheetItem("Ex. Rate"))
+        self.table.item(0, 4).setBackground(titleBackground)
+        self.table.item(0, 4).setToolTip("This column shows the exchange rate to NOK")
+        self.table.item(0, 4).setFont(titleFont)
+        self.table.setItem(1, 4, SpreadSheetItem("1"))
+        self.table.setItem(2, 4, SpreadSheetItem("1"))
+        self.table.setItem(3, 4, SpreadSheetItem("8"))
+        self.table.setItem(4, 4, SpreadSheetItem("8"))
+        self.table.setItem(5, 4, SpreadSheetItem("7"))
+        self.table.setItem(6, 4, SpreadSheetItem("7"))
+        self.table.setItem(7, 4, SpreadSheetItem("7"))
+        self.table.setItem(8, 4, SpreadSheetItem("7"))
+        self.table.setItem(9, 4, SpreadSheetItem())
+        self.table.item(9,4).setBackground(Qt.lightGray)
+        # column 5
+        self.table.setItem(0, 5, SpreadSheetItem("NOK"))
+        self.table.item(0, 5).setBackground(titleBackground)
+        self.table.item(0, 5).setToolTip("This column shows the expenses in NOK")
+        self.table.item(0, 5).setFont(titleFont)
+        self.table.setItem(1, 5, SpreadSheetItem("* C2 E2"))
+        self.table.setItem(2, 5, SpreadSheetItem("* C3 E3"))
+        self.table.setItem(3, 5, SpreadSheetItem("* C4 E4"))
+        self.table.setItem(4, 5, SpreadSheetItem("* C5 E5"))
+        self.table.setItem(5, 5, SpreadSheetItem("* C6 E6"))
+        self.table.setItem(6, 5, SpreadSheetItem("* C7 E7"))
+        self.table.setItem(7, 5, SpreadSheetItem("* C8 E8"))
+        self.table.setItem(8, 5, SpreadSheetItem("* C9 E9"))
+        self.table.setItem(9, 5, SpreadSheetItem("sum F2 F9"))
+        self.table.item(9,5).setBackground(Qt.lightGray)
+
+    def showAbout(self):
+        QMessageBox.about(self, "About Spreadsheet", """
+            <HTML>
+            <p><b>This demo shows use of <c>QTableWidget</c> with custom handling for
+             individual cells.</b></p>
+            <p>Using a customized table item we make it possible to have dynamic
+             output in different cells. The content that is implemented for this
+             particular demo is:
+            <ul>
+            <li>Adding two cells.</li>
+            <li>Subtracting one cell from another.</li>
+            <li>Multiplying two cells.</li>
+            <li>Dividing one cell with another.</li>
+            <li>Summing the contents of an arbitrary number of cells.</li>
+            </HTML>
+        """)
+
+    def print_(self):
+        printer = QPrinter(QPrinter.ScreenResolution)
+        dlg = QPrintPreviewDialog(printer)
+        view = PrintView()
+        view.setModel(self.table.model())
+        dlg.paintRequested.connect(view.print_)
+        dlg.exec_()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    sheet = SpreadSheet(10, 6)
+    sheet.setWindowIcon(QIcon(QPixmap(":/images/interview.png")))
+    sheet.resize(640, 420)
+    sheet.show()
+    sys.exit(app.exec_())
diff --git a/examples/itemviews/spreadsheet/spreadsheet.qrc b/examples/itemviews/spreadsheet/spreadsheet.qrc
new file mode 100644
index 0000000..13f496d
--- /dev/null
+++ b/examples/itemviews/spreadsheet/spreadsheet.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+	<file>images/interview.png</file>
+</qresource>
+</RCC>
diff --git a/examples/itemviews/spreadsheet/spreadsheet_rc.py b/examples/itemviews/spreadsheet/spreadsheet_rc.py
new file mode 100644
index 0000000..dbb9893
--- /dev/null
+++ b/examples/itemviews/spreadsheet/spreadsheet_rc.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Wed May 15 17:17:52 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x00\xae\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x10\x00\x00\x00\x10\x04\x03\x00\x00\x00\xed\xdd\xe2\x52\
+\x00\x00\x00\x0f\x50\x4c\x54\x45\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\
+\xc0\xff\xff\xff\x00\x00\x00\x63\x34\x8b\x60\x00\x00\x00\x03\x74\
+\x52\x4e\x53\x00\x01\x02\x0d\x63\x94\xb3\x00\x00\x00\x4b\x49\x44\
+\x41\x54\x78\x5e\x3d\x8a\xc1\x0d\xc0\x30\x0c\x02\x1d\x89\x01\xba\
+\x8b\x3d\x40\x54\xb3\xff\x4c\x05\xa7\x0a\x0f\x74\xe6\x1c\x41\xf2\
+\x89\x58\x81\xcc\x7c\x0d\x2d\xa8\x50\x06\x96\xc0\x6a\x63\x9f\xa9\
+\xda\x12\xec\xd2\xa8\xa5\x40\x03\x5c\x56\x06\xfc\x6a\xfe\x47\x0d\
+\xb8\x2e\x50\x39\xde\xf1\x65\xf8\x00\x49\xd8\x14\x02\x64\xfa\x65\
+\x99\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0d\
+\x0f\x7f\xc5\x07\
+\x00\x69\
+\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x76\x00\x69\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/itemviews/spreadsheet/spreadsheetdelegate.py b/examples/itemviews/spreadsheet/spreadsheetdelegate.py
new file mode 100644
index 0000000..3fd5266
--- /dev/null
+++ b/examples/itemviews/spreadsheet/spreadsheetdelegate.py
@@ -0,0 +1,85 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2012 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2011 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 PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## GNU Lesser General Public License Usage
+## 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.
+##
+## Other Usage
+## Alternatively, this file may be used in accordance with the terms and
+## conditions contained in a signed written agreement between you and Nokia.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDate, Qt
+from PyQt5.QtWidgets import QCompleter, QDateTimeEdit, QItemDelegate, QLineEdit
+
+
+class SpreadSheetDelegate(QItemDelegate):
+
+    def __init__(self, parent = None):
+        super(SpreadSheetDelegate, self).__init__(parent)
+
+    def createEditor(self, parent, styleOption, index):
+        if index.column() == 1:
+            editor = QDateTimeEdit(parent)
+            editor.setDisplayFormat(self.parent().currentDateFormat)
+            editor.setCalendarPopup(True)
+            return editor
+
+        editor = QLineEdit(parent)
+        # create a completer with the strings in the column as model
+        allStrings = []
+        for i in range(1, index.model().rowCount()):
+            strItem = index.model().data(index.sibling(i, index.column()), Qt.EditRole)
+            if strItem not in allStrings:
+                allStrings.append(strItem)
+
+        autoComplete = QCompleter(allStrings)
+        editor.setCompleter(autoComplete)
+        editor.editingFinished.connect(self.commitAndCloseEditor)
+        return editor
+
+    def commitAndCloseEditor(self):
+        editor = self.sender()
+        self.commitData.emit(editor)
+        self.closeEditor.emit(editor, QItemDelegate.NoHint)
+
+    def setEditorData(self, editor, index):
+        if isinstance(editor, QLineEdit):
+            editor.setText(index.model().data(index, Qt.EditRole))
+        elif isinstance(editor, QDateTimeEdit):
+            editor.setDate(QDate.fromString(
+                index.model().data(index, Qt.EditRole), self.parent().currentDateFormat))
+
+    def setModelData(self, editor, model, index):
+        if isinstance(editor, QLineEdit):
+            model.setData(index, editor.text())
+        elif isinstance(editor, QDateTimeEdit):
+            model.setData(index, editor.date().toString(self.parent().currentDateFormat))
diff --git a/examples/itemviews/spreadsheet/spreadsheetitem.py b/examples/itemviews/spreadsheet/spreadsheetitem.py
new file mode 100644
index 0000000..0fd192f
--- /dev/null
+++ b/examples/itemviews/spreadsheet/spreadsheetitem.py
@@ -0,0 +1,159 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2012 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2011 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 PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## GNU Lesser General Public License Usage
+## 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.
+##
+## Other Usage
+## Alternatively, this file may be used in accordance with the terms and
+## conditions contained in a signed written agreement between you and Nokia.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtGui import QColor
+from PyQt5.QtWidgets import QTableWidgetItem
+
+from util import decode_pos
+
+
+class SpreadSheetItem(QTableWidgetItem):
+
+    def __init__(self, text=None):
+        if text is not None:
+            super(SpreadSheetItem, self).__init__(text)
+        else:
+            super(SpreadSheetItem, self).__init__()
+
+        self.isResolving = False
+
+    def clone(self):
+        item = super(SpreadSheetItem, self).clone()
+        item.isResolving = self.isResolving
+
+        return item
+
+    def formula(self):
+        return super(SpreadSheetItem, self).data(Qt.DisplayRole)
+
+    def data(self, role):
+        if role in (Qt.EditRole, Qt.StatusTipRole):
+            return self.formula()
+        if role == Qt.DisplayRole:
+            return self.display()
+        t = str(self.display())
+        try:
+            number = int(t)
+        except ValueError:
+            number = None
+        if role == Qt.TextColorRole:
+            if number is None:
+                return QColor(Qt.black)
+            elif number < 0:
+                return QColor(Qt.red)
+            return QColor(Qt.blue)
+
+        if role == Qt.TextAlignmentRole:
+            if t and (t[0].isdigit() or t[0] == '-'):
+                return Qt.AlignRight | Qt.AlignVCenter
+        return super(SpreadSheetItem, self).data(role)
+
+    def setData(self, role, value):
+        super(SpreadSheetItem, self).setData(role, value)
+        if self.tableWidget():
+            self.tableWidget().viewport().update()
+
+    def display(self):
+        # avoid circular dependencies
+        if self.isResolving:
+            return None
+        self.isResolving = True
+        result = self.computeFormula(self.formula(), self.tableWidget())
+        self.isResolving = False
+        return result
+
+    def computeFormula(self, formula, widget):
+        if formula is None:
+            return None
+        # check if the string is actually a formula or not
+        slist = formula.split(' ')
+        if not slist or not widget:
+            # it is a normal string
+            return formula
+        op = slist[0].lower()
+        firstRow = -1
+        firstCol = -1
+        secondRow = -1
+        secondCol = -1
+        if len(slist) > 1:
+            firstRow, firstCol = decode_pos(slist[1])
+        if len(slist) > 2:
+            secondRow, secondCol = decode_pos(slist[2])
+        start = widget.item(firstRow, firstCol)
+        end = widget.item(secondRow, secondCol)
+        firstVal = 0
+        try:
+            firstVal = start and int(start.text()) or 0
+        except ValueError:
+            pass
+        secondVal = 0
+        try:
+            secondVal = end and int(end.text()) or 0
+        except ValueError:
+            pass
+        result = None
+        if op == "sum":
+            sum_ = 0
+            for r in range(firstRow, secondRow + 1):
+                for c in range(firstCol, secondCol + 1):
+                    tableItem = widget.item(r, c)
+                    if tableItem and tableItem != self:
+                        try:
+                            sum_ += int(tableItem.text())
+                        except ValueError:
+                            pass
+            result = sum_
+        elif op == "+":
+            result = (firstVal + secondVal)
+        elif op == "-":
+            result = (firstVal - secondVal)
+        elif op == "*":
+            result = (firstVal * secondVal)
+        elif op == "/":
+            if secondVal == 0:
+                result = "nan"
+            else:
+                result = (firstVal / secondVal)
+        elif op == "=":
+            if start:
+                result = start.text()
+        else:
+            result = formula
+        return result
diff --git a/examples/itemviews/spreadsheet/util.py b/examples/itemviews/spreadsheet/util.py
new file mode 100644
index 0000000..97089f0
--- /dev/null
+++ b/examples/itemviews/spreadsheet/util.py
@@ -0,0 +1,51 @@
+#############################################################################
+##
+## Copyright (C) 2012 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2011 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 PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## GNU Lesser General Public License Usage
+## 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.
+##
+## Other Usage
+## Alternatively, this file may be used in accordance with the terms and
+## conditions contained in a signed written agreement between you and Nokia.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+def decode_pos(pos):
+    try:
+        row = int(pos[1:]) - 1
+        col = ord(pos[0]) - ord('A')
+    except ValueError:
+        row = -1
+        col = -1
+
+    return row, col
+
+
+def encode_pos(row, col):
+    return chr(col + ord('A')) + str(row + 1)
diff --git a/examples/itemviews/stardelegate.py b/examples/itemviews/stardelegate.py
new file mode 100755
index 0000000..c3afe0a
--- /dev/null
+++ b/examples/itemviews/stardelegate.py
@@ -0,0 +1,252 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import pyqtSignal, QPointF, QSize, Qt
+from PyQt5.QtGui import QPainter, QPolygonF
+from PyQt5.QtWidgets import (QAbstractItemView, QApplication, QStyle,
+        QStyledItemDelegate, QTableWidget, QTableWidgetItem, QWidget)
+
+
+class StarRating(object):
+    # enum EditMode
+    Editable, ReadOnly = range(2)
+
+    PaintingScaleFactor = 20
+
+    def __init__(self, starCount=1, maxStarCount=5):
+        self._starCount = starCount
+        self._maxStarCount = maxStarCount
+
+        self.starPolygon = QPolygonF([QPointF(1.0, 0.5)])
+        for i in range(5):
+            self.starPolygon << QPointF(0.5 + 0.5 * math.cos(0.8 * i * math.pi),
+                                        0.5 + 0.5 * math.sin(0.8 * i * math.pi))
+
+        self.diamondPolygon = QPolygonF()
+        self.diamondPolygon << QPointF(0.4, 0.5) \
+                            << QPointF(0.5, 0.4) \
+                            << QPointF(0.6, 0.5) \
+                            << QPointF(0.5, 0.6) \
+                            << QPointF(0.4, 0.5)
+
+    def starCount(self):
+        return self._starCount
+
+    def maxStarCount(self):
+        return self._maxStarCount
+
+    def setStarCount(self, starCount):
+        self._starCount = starCount
+
+    def setMaxStarCount(self, maxStarCount):
+        self._maxStarCount = maxStarCount
+
+    def sizeHint(self):
+        return self.PaintingScaleFactor * QSize(self._maxStarCount, 1)
+
+    def paint(self, painter, rect, palette, editMode):
+        painter.save()
+
+        painter.setRenderHint(QPainter.Antialiasing, True)
+        painter.setPen(Qt.NoPen)
+
+        if editMode == StarRating.Editable:
+            painter.setBrush(palette.highlight())
+        else:
+            painter.setBrush(palette.windowText())
+
+        yOffset = (rect.height() - self.PaintingScaleFactor) / 2
+        painter.translate(rect.x(), rect.y() + yOffset)
+        painter.scale(self.PaintingScaleFactor, self.PaintingScaleFactor)
+
+        for i in range(self._maxStarCount):
+            if i < self._starCount:
+                painter.drawPolygon(self.starPolygon, Qt.WindingFill)
+            elif editMode == StarRating.Editable:
+                painter.drawPolygon(self.diamondPolygon, Qt.WindingFill)
+
+            painter.translate(1.0, 0.0)
+
+        painter.restore()
+
+
+class StarEditor(QWidget):
+
+    editingFinished = pyqtSignal()
+
+    def __init__(self, parent = None):
+        super(StarEditor, self).__init__(parent)
+
+        self._starRating = StarRating()
+
+        self.setMouseTracking(True)
+        self.setAutoFillBackground(True)
+
+    def setStarRating(self, starRating):
+        self._starRating = starRating
+
+    def starRating(self):
+        return self._starRating
+
+    def sizeHint(self):
+        return self._starRating.sizeHint()
+
+    def paintEvent(self, event):
+        painter = QPainter(self)
+        self._starRating.paint(painter, self.rect(), self.palette(),
+                StarRating.Editable)
+
+    def mouseMoveEvent(self, event):
+        star = self.starAtPosition(event.x())
+
+        if star != self._starRating.starCount() and star != -1:
+            self._starRating.setStarCount(star)
+            self.update()
+
+    def mouseReleaseEvent(self, event):
+        self.editingFinished.emit()
+
+    def starAtPosition(self, x):
+        # Enable a star, if pointer crosses the center horizontally.
+        starwidth = self._starRating.sizeHint().width() // self._starRating.maxStarCount()
+        star = (x + starwidth / 2) // starwidth
+        if 0 <= star <= self._starRating.maxStarCount():
+            return star
+
+        return -1
+
+
+class StarDelegate(QStyledItemDelegate):
+    def paint(self, painter, option, index):
+        starRating = index.data()
+        if isinstance(starRating, StarRating):
+            if option.state & QStyle.State_Selected:
+                painter.fillRect(option.rect, option.palette.highlight())
+
+            starRating.paint(painter, option.rect, option.palette,
+                    StarRating.ReadOnly)
+        else:
+            super(StarDelegate, self).paint(painter, option, index)
+
+    def sizeHint(self, option, index):
+        starRating = index.data()
+        if isinstance(starRating, StarRating):
+            return starRating.sizeHint()
+        else:
+            return super(StarDelegate, self).sizeHint(option, index)
+
+    def createEditor(self, parent, option, index):
+        starRating = index.data()
+        if isinstance(starRating, StarRating):
+            editor = StarEditor(parent)
+            editor.editingFinished.connect(self.commitAndCloseEditor)
+            return editor
+        else:
+            return super(StarDelegate, self).createEditor(parent, option, index)
+
+    def setEditorData(self, editor, index):
+        starRating = index.data()
+        if isinstance(starRating, StarRating):
+            editor.setStarRating(starRating)
+        else:
+            super(StarDelegate, self).setEditorData(editor, index)
+
+    def setModelData(self, editor, model, index):
+        starRating = index.data()
+        if isinstance(starRating, StarRating):
+            model.setData(index, editor.starRating())
+        else:
+            super(StarDelegate, self).setModelData(editor, model, index)
+
+    def commitAndCloseEditor(self):
+        editor = self.sender()
+        self.commitData.emit(editor)
+        self.closeEditor.emit(editor)
+
+
+def populateTableWidget(tableWidget):
+    staticData = (
+        ("Mass in B-Minor", "Baroque", "J.S. Bach", 5),
+        ("Three More Foxes", "Jazz", "Maynard Ferguson", 4),
+        ("Sex Bomb", "Pop", "Tom Jones", 3),
+        ("Barbie Girl", "Pop", "Aqua", 5),
+    )
+
+    for row, (title, genre, artist, rating) in enumerate(staticData):
+        item0 = QTableWidgetItem(title)
+        item1 = QTableWidgetItem(genre)
+        item2 = QTableWidgetItem(artist)
+        item3 = QTableWidgetItem()
+        item3.setData(0, StarRating(rating))
+        tableWidget.setItem(row, 0, item0)
+        tableWidget.setItem(row, 1, item1)
+        tableWidget.setItem(row, 2, item2)
+        tableWidget.setItem(row, 3, item3)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    tableWidget = QTableWidget(4, 4)
+    tableWidget.setItemDelegate(StarDelegate())
+    tableWidget.setEditTriggers(
+            QAbstractItemView.DoubleClicked | QAbstractItemView.SelectedClicked)
+    tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
+
+    headerLabels = ("Title", "Genre", "Artist", "Rating")
+    tableWidget.setHorizontalHeaderLabels(headerLabels)
+
+    populateTableWidget(tableWidget)
+
+    tableWidget.resizeColumnsToContents()
+    tableWidget.resize(500, 300)
+    tableWidget.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/layouts/README b/examples/layouts/README
new file mode 100644
index 0000000..ddfd6ed
--- /dev/null
+++ b/examples/layouts/README
@@ -0,0 +1,27 @@
+PyQt uses a layout-based approach to widget management. Widgets are arranged in
+the optimal positions in windows based on simple layout rules, leading to a
+consistent look and feel.
+
+Custom layouts can be used to provide more control over the positions and
+sizes of child widgets.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/layouts/basiclayouts.py b/examples/layouts/basiclayouts.py
new file mode 100755
index 0000000..908dfe4
--- /dev/null
+++ b/examples/layouts/basiclayouts.py
@@ -0,0 +1,137 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog,
+        QDialogButtonBox, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout,
+        QLabel, QLineEdit, QMenu, QMenuBar, QPushButton, QSpinBox, QTextEdit,
+        QVBoxLayout)
+
+
+class Dialog(QDialog):
+    NumGridRows = 3
+    NumButtons = 4
+
+    def __init__(self):
+        super(Dialog, self).__init__()
+
+        self.createMenu()
+        self.createHorizontalGroupBox()
+        self.createGridGroupBox()
+        self.createFormGroupBox()
+
+        bigEditor = QTextEdit()
+        bigEditor.setPlainText("This widget takes up all the remaining space "
+                "in the top-level layout.")
+
+        buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+
+        buttonBox.accepted.connect(self.accept)
+        buttonBox.rejected.connect(self.reject)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.setMenuBar(self.menuBar)
+        mainLayout.addWidget(self.horizontalGroupBox)
+        mainLayout.addWidget(self.gridGroupBox)
+        mainLayout.addWidget(self.formGroupBox)
+        mainLayout.addWidget(bigEditor)
+        mainLayout.addWidget(buttonBox)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Basic Layouts")
+
+    def createMenu(self):
+        self.menuBar = QMenuBar()
+
+        self.fileMenu = QMenu("&File", self)
+        self.exitAction = self.fileMenu.addAction("E&xit")
+        self.menuBar.addMenu(self.fileMenu)
+
+        self.exitAction.triggered.connect(self.accept)
+
+    def createHorizontalGroupBox(self):
+        self.horizontalGroupBox = QGroupBox("Horizontal layout")
+        layout = QHBoxLayout()
+
+        for i in range(Dialog.NumButtons):
+            button = QPushButton("Button %d" % (i + 1))
+            layout.addWidget(button)
+
+        self.horizontalGroupBox.setLayout(layout)
+
+    def createGridGroupBox(self):
+        self.gridGroupBox = QGroupBox("Grid layout")
+        layout = QGridLayout()
+
+        for i in range(Dialog.NumGridRows):
+            label = QLabel("Line %d:" % (i + 1))
+            lineEdit = QLineEdit()
+            layout.addWidget(label, i + 1, 0)
+            layout.addWidget(lineEdit, i + 1, 1)
+
+        self.smallEditor = QTextEdit()
+        self.smallEditor.setPlainText("This widget takes up about two thirds "
+                "of the grid layout.")
+
+        layout.addWidget(self.smallEditor, 0, 2, 4, 1)
+
+        layout.setColumnStretch(1, 10)
+        layout.setColumnStretch(2, 20)
+        self.gridGroupBox.setLayout(layout)
+
+    def createFormGroupBox(self):
+        self.formGroupBox = QGroupBox("Form layout")
+        layout = QFormLayout()
+        layout.addRow(QLabel("Line 1:"), QLineEdit())
+        layout.addRow(QLabel("Line 2, long text:"), QComboBox())
+        layout.addRow(QLabel("Line 3:"), QSpinBox())
+        self.formGroupBox.setLayout(layout)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    dialog = Dialog()
+    sys.exit(dialog.exec_())
diff --git a/examples/layouts/borderlayout.py b/examples/layouts/borderlayout.py
new file mode 100755
index 0000000..3ec8f75
--- /dev/null
+++ b/examples/layouts/borderlayout.py
@@ -0,0 +1,240 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QRect, QSize, Qt
+from PyQt5.QtWidgets import (QApplication, QFrame, QLabel, QLayout,
+        QTextBrowser, QWidget, QWidgetItem)
+
+
+class ItemWrapper(object):
+    def __init__(self, i, p):
+        self.item = i
+        self.position = p
+
+
+class BorderLayout(QLayout):
+    West, North, South, East, Center = range(5)
+    MinimumSize, SizeHint = range(2)
+
+    def __init__(self, parent=None, margin=None, spacing=-1):
+        super(BorderLayout, self).__init__(parent)
+
+        if margin is not None:
+            self.setContentsMargins(margin, margin, margin, margin)
+
+        self.setSpacing(spacing)
+        self.list = []
+
+    def __del__(self):
+        l = self.takeAt(0)
+        while l is not None:
+            l = self.takeAt(0)
+
+    def addItem(self, item):
+        self.add(item, self.West)
+
+    def addWidget(self, widget, position):
+        self.add(QWidgetItem(widget), position)
+
+    def expandingDirections(self):
+        return Qt.Horizontal | Qt.Vertical
+
+    def hasHeightForWidth(self):
+        return False
+
+    def count(self):
+        return len(self.list)
+
+    def itemAt(self, index):
+        if index < len(self.list):
+            return self.list[index].item
+
+        return None
+
+    def minimumSize(self):
+        return self.calculateSize(self.MinimumSize)
+
+    def setGeometry(self, rect):
+        center = None
+        eastWidth = 0
+        westWidth = 0
+        northHeight = 0
+        southHeight = 0
+        centerHeight = 0
+
+        super(BorderLayout, self).setGeometry(rect)
+
+        for wrapper in self.list:
+            item = wrapper.item
+            position = wrapper.position
+
+            if position == self.North:
+                item.setGeometry(QRect(rect.x(), northHeight,
+                        rect.width(), item.sizeHint().height()))    
+
+                northHeight += item.geometry().height() + self.spacing()
+
+            elif position == self.South:
+                item.setGeometry(QRect(item.geometry().x(),
+                        item.geometry().y(), rect.width(),
+                        item.sizeHint().height()))
+
+                southHeight += item.geometry().height() + self.spacing()
+
+                item.setGeometry(QRect(rect.x(),
+                        rect.y() + rect.height() - southHeight + self.spacing(),
+                        item.geometry().width(), item.geometry().height()))
+
+            elif position == self.Center:
+                center = wrapper
+
+        centerHeight = rect.height() - northHeight - southHeight
+
+        for wrapper in self.list:
+            item = wrapper.item
+            position = wrapper.position
+
+            if position == self.West:
+                item.setGeometry(QRect(rect.x() + westWidth,
+                        northHeight, item.sizeHint().width(), centerHeight))    
+
+                westWidth += item.geometry().width() + self.spacing()
+
+            elif position == self.East:
+                item.setGeometry(QRect(item.geometry().x(),
+                        item.geometry().y(), item.sizeHint().width(),
+                        centerHeight))
+
+                eastWidth += item.geometry().width() + self.spacing()
+
+                item.setGeometry(QRect(rect.x() + rect.width() - eastWidth + self.spacing(),
+                        northHeight, item.geometry().width(),
+                        item.geometry().height()))
+
+        if center:
+            center.item.setGeometry(QRect(westWidth, northHeight,
+                    rect.width() - eastWidth - westWidth, centerHeight))
+
+    def sizeHint(self):
+        return self.calculateSize(self.SizeHint)
+
+    def takeAt(self, index):
+        if index >= 0 and index < len(self.list):
+            layoutStruct = self.list.pop(index)
+            return layoutStruct.item
+
+        return None
+
+    def add(self, item, position):
+        self.list.append(ItemWrapper(item, position))
+
+    def calculateSize(self, sizeType):
+        totalSize = QSize()
+
+        for wrapper in self.list:
+            position = wrapper.position
+            itemSize = QSize()
+
+            if sizeType == self.MinimumSize:
+                itemSize = wrapper.item.minimumSize()
+            else: # sizeType == self.SizeHint
+                itemSize = wrapper.item.sizeHint()
+
+            if position in (self.North, self.South, self.Center):
+                totalSize.setHeight(totalSize.height() + itemSize.height())
+
+            if position in (self.West, self.East, self.Center):
+                totalSize.setWidth(totalSize.width() + itemSize.width())
+
+        return totalSize
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        centralWidget = QTextBrowser()
+        centralWidget.setPlainText("Central widget")
+
+        layout = BorderLayout()
+        layout.addWidget(centralWidget, BorderLayout.Center)
+
+        # Because BorderLayout doesn't call its super-class addWidget() it
+        # doesn't take ownership of the widgets until setLayout() is called.
+        # Therefore we keep a local reference to each label to prevent it being
+        # garbage collected too soon.
+        label_n = self.createLabel("North")
+        layout.addWidget(label_n, BorderLayout.North)
+
+        label_w = self.createLabel("West")
+        layout.addWidget(label_w, BorderLayout.West)
+
+        label_e1 = self.createLabel("East 1")
+        layout.addWidget(label_e1, BorderLayout.East)
+
+        label_e2 = self.createLabel("East 2")
+        layout.addWidget(label_e2, BorderLayout.East)
+
+        label_s = self.createLabel("South")
+        layout.addWidget(label_s, BorderLayout.South)
+
+        self.setLayout(layout)
+
+        self.setWindowTitle("Border Layout")
+
+    def createLabel(self, text):
+        label = QLabel(text)
+        label.setFrameStyle(QFrame.Box | QFrame.Raised)
+
+        return label
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())    
diff --git a/examples/layouts/flowlayout.py b/examples/layouts/flowlayout.py
new file mode 100755
index 0000000..5173a49
--- /dev/null
+++ b/examples/layouts/flowlayout.py
@@ -0,0 +1,159 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QPoint, QRect, QSize, Qt
+from PyQt5.QtWidgets import (QApplication, QLayout, QPushButton, QSizePolicy,
+        QWidget)
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        flowLayout = FlowLayout()
+        flowLayout.addWidget(QPushButton("Short"))
+        flowLayout.addWidget(QPushButton("Longer"))
+        flowLayout.addWidget(QPushButton("Different text"))
+        flowLayout.addWidget(QPushButton("More text"))
+        flowLayout.addWidget(QPushButton("Even longer button text"))
+        self.setLayout(flowLayout)
+
+        self.setWindowTitle("Flow Layout")
+
+
+class FlowLayout(QLayout):
+    def __init__(self, parent=None, margin=0, spacing=-1):
+        super(FlowLayout, self).__init__(parent)
+
+        if parent is not None:
+            self.setContentsMargins(margin, margin, margin, margin)
+
+        self.setSpacing(spacing)
+
+        self.itemList = []
+
+    def __del__(self):
+        item = self.takeAt(0)
+        while item:
+            item = self.takeAt(0)
+
+    def addItem(self, item):
+        self.itemList.append(item)
+
+    def count(self):
+        return len(self.itemList)
+
+    def itemAt(self, index):
+        if index >= 0 and index < len(self.itemList):
+            return self.itemList[index]
+
+        return None
+
+    def takeAt(self, index):
+        if index >= 0 and index < len(self.itemList):
+            return self.itemList.pop(index)
+
+        return None
+
+    def expandingDirections(self):
+        return Qt.Orientations(Qt.Orientation(0))
+
+    def hasHeightForWidth(self):
+        return True
+
+    def heightForWidth(self, width):
+        height = self.doLayout(QRect(0, 0, width, 0), True)
+        return height
+
+    def setGeometry(self, rect):
+        super(FlowLayout, self).setGeometry(rect)
+        self.doLayout(rect, False)
+
+    def sizeHint(self):
+        return self.minimumSize()
+
+    def minimumSize(self):
+        size = QSize()
+
+        for item in self.itemList:
+            size = size.expandedTo(item.minimumSize())
+
+        margin, _, _, _ = self.getContentsMargins()
+
+        size += QSize(2 * margin, 2 * margin)
+        return size
+
+    def doLayout(self, rect, testOnly):
+        x = rect.x()
+        y = rect.y()
+        lineHeight = 0
+
+        for item in self.itemList:
+            wid = item.widget()
+            spaceX = self.spacing() + wid.style().layoutSpacing(QSizePolicy.PushButton, QSizePolicy.PushButton, Qt.Horizontal)
+            spaceY = self.spacing() + wid.style().layoutSpacing(QSizePolicy.PushButton, QSizePolicy.PushButton, Qt.Vertical)
+            nextX = x + item.sizeHint().width() + spaceX
+            if nextX - spaceX > rect.right() and lineHeight > 0:
+                x = rect.x()
+                y = y + lineHeight + spaceY
+                nextX = x + item.sizeHint().width() + spaceX
+                lineHeight = 0
+
+            if not testOnly:
+                item.setGeometry(QRect(QPoint(x, y), item.sizeHint()))
+
+            x = nextX
+            lineHeight = max(lineHeight, item.sizeHint().height())
+
+        return y + lineHeight - rect.y()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    mainWin = Window()
+    mainWin.show()
+    sys.exit(app.exec_())
diff --git a/examples/mainwindows/README b/examples/mainwindows/README
new file mode 100644
index 0000000..d6f51d6
--- /dev/null
+++ b/examples/mainwindows/README
@@ -0,0 +1,26 @@
+All the standard features of application main windows are provided by PyQt.
+
+Main windows can have pull down menus, tool bars, and dock windows. These
+separate forms of user input are unified in an integrated action system that
+also supports keyboard shortcuts and accelerator keys in menu items.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/mainwindows/application/application.py b/examples/mainwindows/application/application.py
new file mode 100755
index 0000000..e9cb9f9
--- /dev/null
+++ b/examples/mainwindows/application/application.py
@@ -0,0 +1,278 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QFile, QFileInfo, QPoint, QRect, QSettings, QSize,
+        Qt, QTextStream)
+from PyQt5.QtGui import QIcon, QKeySequence
+from PyQt5.QtWidgets import (QAction, QApplication, QFileDialog, QMainWindow,
+        QMessageBox, QTextEdit)
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.curFile = ''
+
+        self.textEdit = QTextEdit()
+        self.setCentralWidget(self.textEdit)
+
+        self.createActions()
+        self.createMenus()
+        self.createToolBars()
+        self.createStatusBar()
+
+        self.readSettings()
+
+        self.textEdit.document().contentsChanged.connect(self.documentWasModified)
+
+        self.setCurrentFile('')
+
+    def closeEvent(self, event):
+        if self.maybeSave():
+            self.writeSettings()
+            event.accept()
+        else:
+            event.ignore()
+
+    def newFile(self):
+        if self.maybeSave():
+            self.textEdit.clear()
+            self.setCurrentFile('')
+
+    def open(self):
+        if self.maybeSave():
+            fileName, _ = QFileDialog.getOpenFileName(self)
+            if fileName:
+                self.loadFile(fileName)
+
+    def save(self):
+        if self.curFile:
+            return self.saveFile(self.curFile)
+
+        return self.saveAs()
+
+    def saveAs(self):
+        fileName, _ = QFileDialog.getSaveFileName(self)
+        if fileName:
+            return self.saveFile(fileName)
+
+        return False
+
+    def about(self):
+        QMessageBox.about(self, "About Application",
+                "The <b>Application</b> example demonstrates how to write "
+                "modern GUI applications using Qt, with a menu bar, "
+                "toolbars, and a status bar.")
+
+    def documentWasModified(self):
+        self.setWindowModified(self.textEdit.document().isModified())
+
+    def createActions(self):
+        root = QFileInfo(__file__).absolutePath()
+
+        self.newAct = QAction(QIcon(root + '/images/new.png'), "&New", self,
+                shortcut=QKeySequence.New, statusTip="Create a new file",
+                triggered=self.newFile)
+
+        self.openAct = QAction(QIcon(root + '/images/open.png'), "&Open...",
+                self, shortcut=QKeySequence.Open,
+                statusTip="Open an existing file", triggered=self.open)
+
+        self.saveAct = QAction(QIcon(root + '/images/save.png'), "&Save", self,
+                shortcut=QKeySequence.Save,
+                statusTip="Save the document to disk", triggered=self.save)
+
+        self.saveAsAct = QAction("Save &As...", self,
+                shortcut=QKeySequence.SaveAs,
+                statusTip="Save the document under a new name",
+                triggered=self.saveAs)
+
+        self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q",
+                statusTip="Exit the application", triggered=self.close)
+
+        self.cutAct = QAction(QIcon(root + '/images/cut.png'), "Cu&t", self,
+                shortcut=QKeySequence.Cut,
+                statusTip="Cut the current selection's contents to the clipboard",
+                triggered=self.textEdit.cut)
+
+        self.copyAct = QAction(QIcon(root + '/images/copy.png'), "&Copy", self,
+                shortcut=QKeySequence.Copy,
+                statusTip="Copy the current selection's contents to the clipboard",
+                triggered=self.textEdit.copy)
+
+        self.pasteAct = QAction(QIcon(root + '/images/paste.png'), "&Paste",
+                self, shortcut=QKeySequence.Paste,
+                statusTip="Paste the clipboard's contents into the current selection",
+                triggered=self.textEdit.paste)
+
+        self.aboutAct = QAction("&About", self,
+                statusTip="Show the application's About box",
+                triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                statusTip="Show the Qt library's About box",
+                triggered=QApplication.instance().aboutQt)
+
+        self.cutAct.setEnabled(False)
+        self.copyAct.setEnabled(False)
+        self.textEdit.copyAvailable.connect(self.cutAct.setEnabled)
+        self.textEdit.copyAvailable.connect(self.copyAct.setEnabled)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.newAct)
+        self.fileMenu.addAction(self.openAct)
+        self.fileMenu.addAction(self.saveAct)
+        self.fileMenu.addAction(self.saveAsAct)
+        self.fileMenu.addSeparator();
+        self.fileMenu.addAction(self.exitAct)
+
+        self.editMenu = self.menuBar().addMenu("&Edit")
+        self.editMenu.addAction(self.cutAct)
+        self.editMenu.addAction(self.copyAct)
+        self.editMenu.addAction(self.pasteAct)
+
+        self.menuBar().addSeparator()
+
+        self.helpMenu = self.menuBar().addMenu("&Help")
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+    def createToolBars(self):
+        self.fileToolBar = self.addToolBar("File")
+        self.fileToolBar.addAction(self.newAct)
+        self.fileToolBar.addAction(self.openAct)
+        self.fileToolBar.addAction(self.saveAct)
+
+        self.editToolBar = self.addToolBar("Edit")
+        self.editToolBar.addAction(self.cutAct)
+        self.editToolBar.addAction(self.copyAct)
+        self.editToolBar.addAction(self.pasteAct)
+
+    def createStatusBar(self):
+        self.statusBar().showMessage("Ready")
+
+    def readSettings(self):
+        settings = QSettings("Trolltech", "Application Example")
+        pos = settings.value("pos", QPoint(200, 200))
+        size = settings.value("size", QSize(400, 400))
+        self.resize(size)
+        self.move(pos)
+
+    def writeSettings(self):
+        settings = QSettings("Trolltech", "Application Example")
+        settings.setValue("pos", self.pos())
+        settings.setValue("size", self.size())
+
+    def maybeSave(self):
+        if self.textEdit.document().isModified():
+            ret = QMessageBox.warning(self, "Application",
+                    "The document has been modified.\nDo you want to save "
+                    "your changes?",
+                    QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
+
+            if ret == QMessageBox.Save:
+                return self.save()
+
+            if ret == QMessageBox.Cancel:
+                return False
+
+        return True
+
+    def loadFile(self, fileName):
+        file = QFile(fileName)
+        if not file.open(QFile.ReadOnly | QFile.Text):
+            QMessageBox.warning(self, "Application",
+                    "Cannot read file %s:\n%s." % (fileName, file.errorString()))
+            return
+
+        inf = QTextStream(file)
+        QApplication.setOverrideCursor(Qt.WaitCursor)
+        self.textEdit.setPlainText(inf.readAll())
+        QApplication.restoreOverrideCursor()
+
+        self.setCurrentFile(fileName)
+        self.statusBar().showMessage("File loaded", 2000)
+
+    def saveFile(self, fileName):
+        file = QFile(fileName)
+        if not file.open(QFile.WriteOnly | QFile.Text):
+            QMessageBox.warning(self, "Application",
+                    "Cannot write file %s:\n%s." % (fileName, file.errorString()))
+            return False
+
+        outf = QTextStream(file)
+        QApplication.setOverrideCursor(Qt.WaitCursor)
+        outf << self.textEdit.toPlainText()
+        QApplication.restoreOverrideCursor()
+
+        self.setCurrentFile(fileName);
+        self.statusBar().showMessage("File saved", 2000)
+        return True
+
+    def setCurrentFile(self, fileName):
+        self.curFile = fileName
+        self.textEdit.document().setModified(False)
+        self.setWindowModified(False)
+
+        if self.curFile:
+            shownName = self.strippedName(self.curFile)
+        else:
+            shownName = 'untitled.txt'
+
+        self.setWindowTitle("%s[*] - Application" % shownName)
+
+    def strippedName(self, fullFileName):
+        return QFileInfo(fullFileName).fileName()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    mainWin = MainWindow()
+    mainWin.show()
+    sys.exit(app.exec_())
diff --git a/examples/mainwindows/application/images/copy.png b/examples/mainwindows/application/images/copy.png
new file mode 100644
index 0000000..2aeb282
Binary files /dev/null and b/examples/mainwindows/application/images/copy.png differ
diff --git a/examples/mainwindows/application/images/cut.png b/examples/mainwindows/application/images/cut.png
new file mode 100644
index 0000000..54638e9
Binary files /dev/null and b/examples/mainwindows/application/images/cut.png differ
diff --git a/examples/mainwindows/application/images/new.png b/examples/mainwindows/application/images/new.png
new file mode 100644
index 0000000..12131b0
Binary files /dev/null and b/examples/mainwindows/application/images/new.png differ
diff --git a/examples/mainwindows/application/images/open.png b/examples/mainwindows/application/images/open.png
new file mode 100644
index 0000000..45fa288
Binary files /dev/null and b/examples/mainwindows/application/images/open.png differ
diff --git a/examples/mainwindows/application/images/paste.png b/examples/mainwindows/application/images/paste.png
new file mode 100644
index 0000000..c14425c
Binary files /dev/null and b/examples/mainwindows/application/images/paste.png differ
diff --git a/examples/mainwindows/application/images/save.png b/examples/mainwindows/application/images/save.png
new file mode 100644
index 0000000..daba865
Binary files /dev/null and b/examples/mainwindows/application/images/save.png differ
diff --git a/examples/mainwindows/dockwidgets/dockwidgets.py b/examples/mainwindows/dockwidgets/dockwidgets.py
new file mode 100755
index 0000000..d8cf530
--- /dev/null
+++ b/examples/mainwindows/dockwidgets/dockwidgets.py
@@ -0,0 +1,303 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDate, QFile, Qt, QTextStream
+from PyQt5.QtGui import (QFont, QIcon, QKeySequence, QTextCharFormat,
+        QTextCursor, QTextTableFormat)
+from PyQt5.QtPrintSupport import QPrintDialog, QPrinter
+from PyQt5.QtWidgets import (QAction, QApplication, QDialog, QDockWidget,
+        QFileDialog, QListWidget, QMainWindow, QMessageBox, QTextEdit)
+
+import dockwidgets_rc
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.textEdit = QTextEdit()
+        self.setCentralWidget(self.textEdit)
+
+        self.createActions()
+        self.createMenus()
+        self.createToolBars()
+        self.createStatusBar()
+        self.createDockWindows()
+
+        self.setWindowTitle("Dock Widgets")
+
+        self.newLetter()
+
+    def newLetter(self):
+        self.textEdit.clear()
+
+        cursor = self.textEdit.textCursor()
+        cursor.movePosition(QTextCursor.Start)
+        topFrame = cursor.currentFrame()
+        topFrameFormat = topFrame.frameFormat()
+        topFrameFormat.setPadding(16)
+        topFrame.setFrameFormat(topFrameFormat)
+
+        textFormat = QTextCharFormat()
+        boldFormat = QTextCharFormat()
+        boldFormat.setFontWeight(QFont.Bold)
+        italicFormat = QTextCharFormat()
+        italicFormat.setFontItalic(True)
+
+        tableFormat = QTextTableFormat()
+        tableFormat.setBorder(1)
+        tableFormat.setCellPadding(16)
+        tableFormat.setAlignment(Qt.AlignRight)
+        cursor.insertTable(1, 1, tableFormat)
+        cursor.insertText("The Firm", boldFormat)
+        cursor.insertBlock()
+        cursor.insertText("321 City Street", textFormat)
+        cursor.insertBlock()
+        cursor.insertText("Industry Park")
+        cursor.insertBlock()
+        cursor.insertText("Some Country")
+        cursor.setPosition(topFrame.lastPosition())
+        cursor.insertText(QDate.currentDate().toString("d MMMM yyyy"),
+                textFormat)
+        cursor.insertBlock()
+        cursor.insertBlock()
+        cursor.insertText("Dear ", textFormat)
+        cursor.insertText("NAME", italicFormat)   
+        cursor.insertText(",", textFormat)
+        for i in range(3):
+            cursor.insertBlock()
+        cursor.insertText("Yours sincerely,", textFormat)
+        for i in range(3):
+            cursor.insertBlock()
+        cursor.insertText("The Boss", textFormat)
+        cursor.insertBlock()
+        cursor.insertText("ADDRESS", italicFormat)  
+
+    def print_(self):
+        document = self.textEdit.document()
+        printer = QPrinter()
+
+        dlg = QPrintDialog(printer, self)
+        if dlg.exec_() != QDialog.Accepted:
+            return
+
+        document.print_(printer)
+
+        self.statusBar().showMessage("Ready", 2000)
+
+    def save(self):
+        filename, _ = QFileDialog.getSaveFileName(self,
+                "Choose a file name", '.', "HTML (*.html *.htm)")
+        if not filename:
+            return
+
+        file = QFile(filename)
+        if not file.open(QFile.WriteOnly | QFile.Text):
+            QMessageBox.warning(self, "Dock Widgets",
+                    "Cannot write file %s:\n%s." % (filename, file.errorString()))
+            return
+
+        out = QTextStream(file)
+        QApplication.setOverrideCursor(Qt.WaitCursor)
+        out << self.textEdit.toHtml()
+        QApplication.restoreOverrideCursor()
+
+        self.statusBar().showMessage("Saved '%s'" % filename, 2000)
+
+    def undo(self):
+        document = self.textEdit.document()
+        document.undo()
+
+    def insertCustomer(self, customer):
+        if not customer:
+            return
+        customerList = customer.split(', ')
+        document = self.textEdit.document()
+        cursor = document.find('NAME')
+        if not cursor.isNull():
+            cursor.beginEditBlock()
+            cursor.insertText(customerList[0])
+            oldcursor = cursor
+            cursor = document.find('ADDRESS')
+            if not cursor.isNull():
+                for i in customerList[1:]:
+                    cursor.insertBlock()
+                    cursor.insertText(i)
+                cursor.endEditBlock()
+            else:
+                oldcursor.endEditBlock()
+
+    def addParagraph(self, paragraph):
+        if not paragraph:
+            return
+        document = self.textEdit.document()
+        cursor = document.find("Yours sincerely,")
+        if cursor.isNull():
+            return
+        cursor.beginEditBlock()
+        cursor.movePosition(QTextCursor.PreviousBlock, QTextCursor.MoveAnchor,
+                2)
+        cursor.insertBlock()
+        cursor.insertText(paragraph)
+        cursor.insertBlock()
+        cursor.endEditBlock()
+
+    def about(self):
+        QMessageBox.about(self, "About Dock Widgets",
+                "The <b>Dock Widgets</b> example demonstrates how to use "
+                "Qt's dock widgets. You can enter your own text, click a "
+                "customer to add a customer name and address, and click "
+                "standard paragraphs to add them.")
+
+    def createActions(self):
+        self.newLetterAct = QAction(QIcon(':/images/new.png'), "&New Letter",
+                self, shortcut=QKeySequence.New,
+                statusTip="Create a new form letter", triggered=self.newLetter)
+
+        self.saveAct = QAction(QIcon(':/images/save.png'), "&Save...", self,
+                shortcut=QKeySequence.Save,
+                statusTip="Save the current form letter", triggered=self.save)
+
+        self.printAct = QAction(QIcon(':/images/print.png'), "&Print...", self,
+                shortcut=QKeySequence.Print,
+                statusTip="Print the current form letter",
+                triggered=self.print_)
+
+        self.undoAct = QAction(QIcon(':/images/undo.png'), "&Undo", self,
+                shortcut=QKeySequence.Undo,
+                statusTip="Undo the last editing action", triggered=self.undo)
+
+        self.quitAct = QAction("&Quit", self, shortcut="Ctrl+Q",
+                statusTip="Quit the application", triggered=self.close)
+
+        self.aboutAct = QAction("&About", self,
+                statusTip="Show the application's About box",
+                triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                statusTip="Show the Qt library's About box",
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.newLetterAct)
+        self.fileMenu.addAction(self.saveAct)
+        self.fileMenu.addAction(self.printAct)
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.quitAct)
+
+        self.editMenu = self.menuBar().addMenu("&Edit")
+        self.editMenu.addAction(self.undoAct)
+
+        self.viewMenu = self.menuBar().addMenu("&View")
+
+        self.menuBar().addSeparator()
+
+        self.helpMenu = self.menuBar().addMenu("&Help")
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+    def createToolBars(self):
+        self.fileToolBar = self.addToolBar("File")
+        self.fileToolBar.addAction(self.newLetterAct)
+        self.fileToolBar.addAction(self.saveAct)
+        self.fileToolBar.addAction(self.printAct)
+
+        self.editToolBar = self.addToolBar("Edit")
+        self.editToolBar.addAction(self.undoAct)
+
+    def createStatusBar(self):
+        self.statusBar().showMessage("Ready")
+
+    def createDockWindows(self):
+        dock = QDockWidget("Customers", self)
+        dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
+        self.customerList = QListWidget(dock)
+        self.customerList.addItems((
+            "John Doe, Harmony Enterprises, 12 Lakeside, Ambleton",
+            "Jane Doe, Memorabilia, 23 Watersedge, Beaton",
+            "Tammy Shea, Tiblanka, 38 Sea Views, Carlton",
+            "Tim Sheen, Caraba Gifts, 48 Ocean Way, Deal",
+            "Sol Harvey, Chicos Coffee, 53 New Springs, Eccleston",
+            "Sally Hobart, Tiroli Tea, 67 Long River, Fedula"))
+        dock.setWidget(self.customerList)
+        self.addDockWidget(Qt.RightDockWidgetArea, dock)
+        self.viewMenu.addAction(dock.toggleViewAction())
+
+        dock = QDockWidget("Paragraphs", self)
+        self.paragraphsList = QListWidget(dock)
+        self.paragraphsList.addItems((
+            "Thank you for your payment which we have received today.",
+            "Your order has been dispatched and should be with you within "
+                "28 days.",
+            "We have dispatched those items that were in stock. The rest of "
+                "your order will be dispatched once all the remaining items "
+                "have arrived at our warehouse. No additional shipping "
+                "charges will be made.",
+            "You made a small overpayment (less than $5) which we will keep "
+                "on account for you, or return at your request.",
+            "You made a small underpayment (less than $1), but we have sent "
+                "your order anyway. We'll add this underpayment to your next "
+                "bill.",
+            "Unfortunately you did not send enough money. Please remit an "
+                "additional $. Your order will be dispatched as soon as the "
+                "complete amount has been received.",
+            "You made an overpayment (more than $5). Do you wish to buy more "
+                "items, or should we return the excess to you?"))
+        dock.setWidget(self.paragraphsList)
+        self.addDockWidget(Qt.RightDockWidgetArea, dock)
+        self.viewMenu.addAction(dock.toggleViewAction())
+
+        self.customerList.currentTextChanged.connect(self.insertCustomer)
+        self.paragraphsList.currentTextChanged.connect(self.addParagraph)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    mainWin = MainWindow()
+    mainWin.show()
+    sys.exit(app.exec_())
diff --git a/examples/mainwindows/dockwidgets/dockwidgets.qrc b/examples/mainwindows/dockwidgets/dockwidgets.qrc
new file mode 100644
index 0000000..968feac
--- /dev/null
+++ b/examples/mainwindows/dockwidgets/dockwidgets.qrc
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>images/new.png</file>
+    <file>images/print.png</file>
+    <file>images/save.png</file>
+    <file>images/undo.png</file>
+</qresource>
+</RCC>
diff --git a/examples/mainwindows/dockwidgets/dockwidgets_rc.py b/examples/mainwindows/dockwidgets/dockwidgets_rc.py
new file mode 100644
index 0000000..0be77f5
--- /dev/null
+++ b/examples/mainwindows/dockwidgets/dockwidgets_rc.py
@@ -0,0 +1,462 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 12 17:19:16 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x06\xc4\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd9\x04\xdc\xb2\xda\x02\
+\x00\x00\x06\x7b\x49\x44\x41\x54\x58\xc3\xad\x57\x69\x4c\x54\x57\
+\x14\x76\x21\x62\x95\x04\x97\xa8\x25\x18\x52\x1b\x0d\x11\x45\x04\
+\xaa\xa4\x49\xb5\x56\x4d\x6c\x69\xb0\x68\xa3\xb6\xc5\xb2\x46\xfd\
+\xa3\x2c\x61\x51\x48\x24\x08\x64\xc2\x12\xd0\x22\x42\x11\x59\x44\
+\x40\x40\xf6\x91\x7d\x53\x36\x09\xb2\xa9\x08\x0e\x24\x0c\x62\x01\
+\x83\x02\x82\x0b\x08\xa9\x5f\xcf\xb9\x99\x31\xa3\x80\x9d\xb4\xf3\
+\x92\x2f\xf3\xde\xbc\x7b\xce\xf7\xdd\x73\xce\x3d\xf7\xbe\x79\xf3\
+\x54\x2e\x3b\xbb\xe8\x2f\x1c\x1d\x23\x1d\x1d\x1d\x23\x02\x1d\x1c\
+\x2e\x48\xd2\xd3\xab\x25\x97\x2e\x15\x56\x47\x46\xde\xac\x4d\x4c\
+\xac\xa8\xad\xaa\x6a\xbf\x2f\x95\x36\x41\x89\x2b\x57\x4a\xdb\x8d\
+\x8d\xf7\x7c\x49\xa6\xf3\xe7\x69\xe8\x5a\x68\x6f\xff\x47\xa1\xfc\
+\xf1\x73\x4c\xff\x0d\xb5\x10\x10\x98\x3c\x48\x76\xc6\x1a\x13\xc1\
+\x33\xf2\xf4\x4a\x7a\x3d\x36\x09\xa8\x03\xf9\xc0\x38\x2c\x2c\x7e\
+\xce\x21\xd3\xb5\x9a\x8a\xc2\xfc\xc3\x87\xfd\xa3\x8a\xab\x64\x18\
+\x7a\x0d\xb5\xe0\xe3\x1b\x3f\x4a\x76\x3f\x11\x3e\xd3\x88\x82\xed\
+\xdb\x0f\xac\x3d\xeb\x97\x89\xde\x17\x50\x0b\xf9\xe5\x32\x18\x18\
+\x18\xc7\x91\xe9\xe7\x1a\x8b\x82\xad\x6d\x58\x79\x63\xf7\x38\x64\
+\xcf\xf1\xaf\xe0\x71\x16\x16\x07\x5b\xc8\xee\x2b\x82\x96\x46\x14\
+\xd8\xd8\x04\xfb\xa4\x15\xc9\xd0\x3a\x08\xb5\x60\xe7\x18\xf4\x9c\
+\xcc\x7e\x21\x2c\xd1\x88\x00\x4b\x4b\xaf\x8d\xa1\x97\xaa\xd0\xf0\
+\x17\xd4\x42\x08\x8d\x25\x33\x7f\xc2\x0a\x8d\x2d\x49\x17\xf7\xa4\
+\xfe\x4a\x39\xa0\x0e\x22\x92\x9a\xa0\xa7\x67\x28\xd5\xe4\x6a\x98\
+\x47\xcd\xa8\x28\xbf\xfd\x2d\x8a\xba\x31\x27\x0a\xba\x80\xdc\x4e\
+\x20\xb6\x74\x00\x86\x86\x3b\xea\xc9\xcc\x54\x63\x75\x60\x67\x17\
+\x1e\xc4\x8e\xb3\x3a\x80\x8c\x36\x20\xad\x09\x48\x69\x00\x92\xea\
+\x80\x84\x6a\x20\xa6\x1c\xc8\x6c\x04\x4a\x1e\x00\xf5\xed\xe3\x68\
+\x6a\xea\x80\xaf\xaf\xef\x2b\x32\x35\xf8\xdf\xe4\x12\x89\x44\x2e\
+\x95\x96\x20\xab\x70\x00\xa9\x52\x08\x94\x10\x31\x71\x50\xf3\x01\
+\x7a\x9e\x8c\x61\x68\x68\x08\xbd\xbd\xbd\x78\xf8\xf0\x21\x1e\x3c\
+\x78\x20\x7e\x13\x13\x13\xb1\x7b\xf7\xee\xda\x43\x87\x0e\x05\x58\
+\x5a\x5a\x6e\xe4\x54\xfe\x27\x01\xa1\xa1\xa1\x7d\x13\x13\x13\x98\
+\x9c\x9c\xc4\xd4\xd4\x14\xba\xba\xba\x70\xe7\xce\x1d\xdc\xbe\x7d\
+\x1b\xf9\xf9\xf9\x28\x29\x29\x41\x55\x55\x15\xea\xeb\xeb\xd1\xdc\
+\xdc\x2c\x04\x30\x92\x92\x92\x70\xe3\xc6\x0d\xe4\xe5\xe5\x89\xfb\
+\x13\x27\x4e\xdc\xdd\xb1\x63\x87\x99\xda\x42\xec\xec\xec\x96\xd9\
+\xda\xda\x7e\x17\x12\x12\xd2\xce\x33\x54\xa2\xb0\xb0\x50\x38\x56\
+\x25\xcf\xca\xca\x42\x42\x42\x02\xc2\xc3\xc3\x11\x17\x17\x87\xab\
+\x57\xaf\x0a\x81\x7d\x7d\x7d\xe8\xe9\xe9\x11\x36\x75\x75\x75\x38\
+\x7d\xfa\xf4\x84\xb9\xb9\xf9\x6f\xe4\x5e\xfb\x93\xe4\x47\x8f\x1e\
+\xb5\xa7\xc1\x2f\xa2\xa2\xa2\x10\x1d\x1d\x8d\x8c\x8c\x0c\xc4\xc6\
+\xc6\x22\x37\x37\x17\x39\x39\x39\x88\x8c\x8c\x04\x09\x03\xbf\xbf\
+\x76\xed\x1a\x2a\x2a\x2a\x44\xd8\x47\x46\x46\x30\x3c\x3c\x8c\x67\
+\xcf\x9e\x09\xb1\x4f\x9f\x3e\xc5\xe0\xe0\x20\x06\x06\x06\x50\x50\
+\x50\x80\x86\x86\x06\x78\x78\x78\x4c\x6e\xda\xb4\xc9\x69\xce\x76\
+\x6d\x63\x63\xb3\x2b\x2c\x2c\x4c\x84\xba\xa3\xa3\x03\xf7\xee\xdd\
+\x13\xbf\x72\xb9\x5c\x08\xb8\x7c\xf9\xb2\xf8\xef\xd5\xab\x57\x18\
+\x1f\x1f\xc7\xd8\xd8\x18\x46\x47\x47\x3f\x49\xde\xdd\xdd\x8d\xca\
+\xca\x4a\x11\xb9\xb6\xb6\x36\x1c\x38\x70\x60\x88\xa8\xbe\x99\x75\
+\x95\x1c\x39\x72\x24\x4f\x26\x93\x89\xd0\xa9\x8a\x60\x43\x26\xe2\
+\xfc\x96\x95\x95\x7d\x92\x9c\xc5\x36\x36\x36\x8a\xd0\x73\x0d\x30\
+\x79\x6b\x6b\xab\x28\x54\xf6\x1b\x14\x14\x04\x13\x13\x93\xbc\x59\
+\x7b\x05\x55\x6d\x0d\xab\x56\xe6\x4f\x55\x04\x3b\x61\x42\xbe\xe7\
+\x9c\x2a\xc9\x79\xb6\xf7\xef\xdf\x17\xa9\xe0\xda\x60\x81\x2d\x2d\
+\x2d\x82\xf0\xc9\x93\x27\x78\xfc\xf8\x31\x1e\x3d\x7a\x24\x8a\xb4\
+\xa6\xa6\x06\xc1\xc1\xc1\xa0\x5a\xe8\x20\xba\xef\x67\xa4\x82\xc2\
+\x53\xdb\xd9\xd9\x89\xb9\x44\xb4\xb7\xb7\x8b\x99\x73\xf1\x71\x11\
+\x4a\xa5\x52\x14\x17\x17\x8b\x77\x4c\xa6\x0c\x3b\x93\xb2\x60\x26\
+\xe4\x48\x30\x6e\xde\xbc\x29\x0a\xd4\xdd\xdd\x1d\x5b\xb7\x6e\x95\
+\x11\xdd\xef\x04\x9d\x0f\x04\xec\xdf\xbf\xbf\x96\x0a\x50\x38\x9d\
+\x4b\x04\x3f\xf3\xcc\xf9\x9d\x6a\xce\x95\x4b\x94\x0b\x8e\x57\x06\
+\xd7\x4c\x76\x76\xb6\x28\x64\x3f\x3f\x3f\x38\x39\x39\xe1\xd8\xb1\
+\x63\xf0\xf6\xf6\xe6\x14\xb0\x00\xfb\x19\x02\xa8\x69\x14\x14\x15\
+\x15\x21\x26\x26\x06\xce\xce\xce\x48\x49\x49\x11\x8e\x55\x45\x70\
+\x1d\x30\x31\xcf\x92\x43\xcd\x62\xd3\xd2\xd2\x70\xfd\xfa\x75\xb1\
+\x62\x92\x93\x93\x71\xfe\xfc\x79\xae\x78\xb8\xba\xba\x82\x7a\x09\
+\x32\x33\x33\xe1\x1b\xef\x0c\xef\xaa\xc3\x42\x84\xb1\xb1\xf1\xec\
+\x02\xf6\xed\xdb\x17\x74\xf7\xee\x5d\x51\x64\xfd\xfd\xfd\x48\x4f\
+\x4f\x87\x97\x97\x97\x58\x7a\x4c\xa6\x14\xc1\xa1\x8f\x8f\x8f\x17\
+\x4d\x86\x09\x79\x75\x04\x04\x04\x88\xf0\x32\x31\x17\x1a\x0b\xe2\
+\x34\x95\x97\x97\x8b\x94\xf9\x25\xba\xc2\x2b\xe7\x57\xee\x07\xd8\
+\xbc\x79\xf3\xec\x02\xf6\xee\xdd\x2b\x61\xa2\x37\x6f\xde\x08\x11\
+\x1c\x6a\x9e\x29\x3b\x63\x21\x11\x11\x11\x22\xaf\x1c\x62\x9e\xe5\
+\xb9\x73\xe7\x44\xa4\x98\x98\x9f\x79\x1c\x8b\xe3\x9c\xab\x92\xb3\
+\x0d\xe7\x9f\x7b\x01\x17\xa1\x91\x91\xd1\xec\x02\xa8\x7f\x4b\x78\
+\xc9\x4d\x4f\x4f\x7f\x20\x82\xf3\xcc\x35\xc1\x85\xe4\xe9\xe9\x89\
+\xe3\xc7\x8f\xc3\xc7\xc7\x47\x84\x97\xa3\xa0\xcc\xb9\x2a\x39\xa7\
+\x92\xdf\x5d\xb8\x70\x01\x54\x5b\x5c\xf9\xe2\xff\x33\x67\xce\xd0\
+\x8e\x69\x38\xbb\x80\x9d\x3b\x77\x4a\x58\xe9\xbb\x77\xef\xe6\x14\
+\xc1\xc5\xc7\x4d\x45\x99\xf3\x8f\xc9\xb9\x7e\x02\x03\x03\x85\x50\
+\xda\x15\xdf\xb7\x68\x1e\xcf\x4d\xce\xcd\xcd\x0d\xa6\xa6\xa6\x7d\
+\x44\xe7\x34\x43\xc0\x86\x0d\x1b\xf4\x69\x89\x64\x50\x3f\x78\xcb\
+\x61\x9b\x4b\x04\x13\xa9\x92\x73\x24\x4e\x9d\x3a\x05\x6a\x64\xa0\
+\x7d\x04\x2e\x2e\x2e\x1f\x90\x73\x0b\xe7\x0d\x8b\x6d\x79\x53\xa3\
+\x31\xc3\x44\xe7\x46\xd0\x9d\x71\x10\xe5\x7d\x5c\x57\x57\xd7\x63\
+\xcb\x96\x2d\x72\x76\xca\x45\xf7\xb1\x88\xd2\xd2\xd2\xf7\xe4\x1c\
+\x0d\xda\xe9\x60\x6d\x6d\x3d\x2b\x39\x37\x2d\xb6\xe1\xab\xa9\xa9\
+\x09\x27\x4f\x9e\x1c\x25\xff\x7c\x68\xf1\x98\xeb\xe8\x36\x5f\xa1\
+\xcc\x7c\xcd\x9a\x35\xd1\x66\x66\x66\x23\xfe\xfe\xfe\xc2\x89\x52\
+\x04\x77\x3d\x65\xd8\xb3\xb3\xcb\x20\x91\x64\x51\x04\x7c\xde\x93\
+\xf3\xe6\xc5\xdd\xf1\xe5\xcb\x97\xc2\x26\x35\x35\x15\x94\xde\xc1\
+\xa5\x4b\x97\xd6\x92\xdf\x54\xc2\x59\xc5\x7e\xb0\xe8\x93\xe7\x41\
+\xc2\x6a\xc2\x9e\x75\xeb\xd6\x95\xec\xda\xb5\x6b\x8a\x77\x40\x76\
+\x78\xeb\xd6\x2d\xb1\x13\xf2\x0a\xb0\xb2\xb2\xa6\xa2\xf4\xc3\xc5\
+\x8b\xd5\xb4\x4a\x8a\xa9\x5b\x76\x89\xd9\x72\xb8\x49\xcc\x34\x45\
+\xb2\x6f\xf1\xe2\xc5\x95\xe4\xe7\x2a\xc1\x95\xf0\xb5\xc2\xef\x22\
+\x75\xcf\x25\x3c\xd0\x40\x5b\x5b\xdb\x71\xfd\xfa\xf5\x6d\x56\x56\
+\x56\xa0\x2d\x1b\xdb\xb6\x6d\x03\x3d\x0f\xae\x5a\xb5\xaa\x59\x47\
+\x47\xa7\xd2\xc4\xc4\x7c\x88\x85\xa4\xa6\xe6\xc2\xc1\xc1\x61\x42\
+\x4f\x4f\x4f\xa6\xa5\xa5\x55\x40\xb6\x7f\x12\x4e\x28\xce\x89\x2b\
+\xfe\xcf\x59\x91\x2b\xd6\x68\xf9\xf2\xe5\x81\xfa\xfa\xfa\x8d\x0b\
+\x16\x2c\x28\xa2\xe7\x44\x82\x3b\xe1\x07\x8e\xd4\xca\x95\x2b\xe3\
+\x56\xaf\x5e\xdd\x40\xf7\x59\x84\x70\xc5\x37\x82\xa1\x22\xa5\x0b\
+\x35\xf2\xb5\xa4\x98\x05\x87\xf1\x20\x0b\x22\x2c\x53\x9c\x72\xb4\
+\x14\x9f\x65\xdf\x12\x7e\x54\x1c\x4a\x97\xa8\xf3\xc5\xfc\x0f\xd1\
+\xc2\x47\xb4\x63\xf2\xc9\xfc\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x07\x66\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x07\x2d\x49\x44\x41\x54\x78\x5e\xb5\x56\x5d\x6f\x1c\x57\
+\x19\x7e\xce\xc7\x7c\xec\x97\xd7\x6e\x9c\x38\xc6\x89\x03\x49\x9a\
+\x26\x4d\x21\xaa\x08\x95\xb8\x40\xca\x25\x08\x89\xfb\x8a\x2b\xee\
+\xb8\x41\x48\x48\x20\x21\x21\x04\x37\x5c\xf1\x03\xb8\x00\xa9\x70\
+\x83\xa2\x0a\x51\x22\x01\x37\x20\x15\xd1\xa0\xe6\xb3\xad\x53\x2b\
+\x49\x9b\xa4\xb1\xe3\x8f\xb5\xbd\x3b\x9b\x59\xef\xcc\xce\xce\xcc\
+\x39\x87\xf3\x1e\x2d\x2b\xd3\x3a\xf5\x02\xe2\x58\x8f\xde\x39\xc7\
+\x1a\x3f\xcf\xfb\xbc\xef\x79\xc7\xcc\x18\x83\xff\x75\x5d\xbc\xf8\
+\x6d\x0e\x20\x54\xaa\xa8\x68\x5d\xd6\x19\xe3\x14\xa7\x74\xa9\xea\
+\x5a\x95\x15\xad\xf4\x94\x31\x68\x7a\x15\xb9\xba\xbc\x7c\xf9\x4d\
+\x00\x99\xe5\xd5\x00\x20\xf7\x12\x5c\xf8\xc2\xb7\xbe\x94\xa5\x83\
+\x53\x40\x59\x63\xe0\x75\x3f\x0c\x6b\x42\x7a\x55\x18\x56\x07\x50\
+\x63\x8c\xd5\x00\xd4\xc1\x10\x5a\xd0\x59\x08\x98\x0a\x98\x0e\xb5\
+\x31\x81\x86\xf6\x34\x2b\x3d\x4b\x2a\x99\x27\xc5\xdc\xe9\xe7\xd9\
+\xd9\x17\xcf\xf2\xc6\xcc\x0c\x13\xcd\x19\xf1\x97\x5f\xbd\xf6\x00\
+\xc0\xab\x16\x14\xe3\x4f\x08\x38\x3c\x7f\xf8\x97\x5f\xfc\xca\xcb\
+\x2f\x65\xda\x53\x79\x51\xb0\x3b\x37\xdf\x62\x1f\xdc\x7d\x17\x5e\
+\xe0\x81\x0b\x30\xce\x01\x21\xb8\x83\xe7\x09\x16\x04\x92\x85\xa1\
+\x8f\x8a\x45\xb5\x1a\xda\x18\xa2\x5e\xab\xa2\x56\xab\x60\xee\xe8\
+\x02\x4e\x5f\xf8\x32\xae\x6c\x7f\x16\xed\xf6\x03\xf0\xd6\x32\x94\
+\x2a\xe7\x01\xbc\x62\xd1\xd9\x57\xc0\xc9\x73\xa7\xce\x7f\xe3\x7b\
+\xaf\xf2\xdf\xfd\x63\xc8\x3f\xba\xf9\x16\xe6\x16\x24\x7e\xf8\xdd\
+\x1f\xa1\x54\x40\x18\x04\xf0\x3d\x89\x6a\xa5\x82\x30\x0c\x10\xf8\
+\x9e\xdd\xfb\x90\x52\x40\x08\x01\xce\x18\x98\x05\x18\x20\xa5\xe7\
+\xce\xb3\x5c\xe1\x27\x57\x3b\x78\x78\x7b\x09\xcf\x9b\x77\xe1\xab\
+\x5c\x00\x20\x11\xa1\x05\x3e\x21\x60\x37\xc9\xb3\x37\x6f\x0f\x6b\
+\xbf\xf9\xeb\x0a\x3a\xd7\x96\xf0\xcd\x53\x06\x5f\xff\xea\xd7\xb0\
+\xb1\xbe\x8e\x7e\xd2\x47\x96\x0d\xa1\x94\x42\x59\x14\xc8\x87\x43\
+\x68\xad\x61\x8c\x71\xb1\x2c\xcb\x31\xe8\xcc\x89\x11\x3e\x4e\x1e\
+\x3a\x89\xf5\x13\xaf\xa0\x9a\xe7\x28\x57\xaf\x01\x00\x23\xec\x2b\
+\x80\x5e\x54\xf4\xc7\x94\x71\x2f\x47\x4f\x63\xdc\x78\xfb\x2a\xd6\
+\x36\xb7\x51\x14\x85\x23\xe3\x9c\xec\xa7\x0c\x25\xc1\x65\x4f\x8b\
+\x44\xd0\xa2\xdf\xfb\xbe\x6f\xcb\x50\x43\xb5\xd1\x84\xfc\x40\x21\
+\xac\x56\x21\x94\x40\xb9\x87\x6b\x5f\x01\x24\x5a\x0a\x8e\xc0\x13\
+\x80\x64\x08\xc3\x0a\x16\x17\x17\xc1\xbd\x90\x32\x27\x01\x44\x48\
+\xd9\x8d\x41\xcb\xed\x39\x07\xed\x38\xf5\x87\xf4\x5c\x3f\x88\xa0\
+\x0a\xc9\x13\x04\x82\xc1\xe3\x40\x7e\x90\x00\x80\x41\x70\x06\x5f\
+\x70\x80\x19\xd4\x6d\x16\x73\x9f\x39\x8a\x24\x2b\x9c\xfd\x45\x31\
+\x1c\x59\x6e\xe0\x7e\x94\x86\x36\xe4\x9c\x76\x0e\x39\x94\x05\x54\
+\xa9\xe0\x16\xb7\x42\x2a\x2f\xc2\xf7\x32\x27\x1c\x07\x3a\x60\x41\
+\xdc\xbe\xc7\x20\x7d\x89\xa8\x1b\xe1\xf6\xf5\x9b\xd8\xdc\x89\xc8\
+\xe2\xb1\xbd\x41\x10\x50\x19\xe8\x99\x1a\x93\x1c\xb0\x44\x15\xb2\
+\x9f\x88\xdc\x79\xd5\xda\xee\x59\x07\x7e\xfd\x46\x8c\x40\x0a\x97\
+\x18\xd8\x81\x0e\x18\x48\xce\xe0\x49\x61\x23\x50\xaf\xd7\xf1\xc2\
+\xf9\xcf\x63\xb6\x13\x8d\xad\xfe\xb7\x12\xb8\x37\x00\xce\xc8\xb1\
+\x71\x1c\x97\x85\x1a\x32\x94\x02\xa1\xa7\x21\x05\x3b\xd8\x01\x22\
+\x90\x92\x23\xb0\x90\x8c\x51\x23\x59\xd4\x51\x14\xa5\x43\xa9\x4a\
+\xa8\x51\x97\x13\x40\x11\xb0\x67\x64\x7d\x89\xe1\x30\x47\x59\x94\
+\x50\xda\xf5\x0b\x0c\x97\xa8\x86\xc7\x10\xf8\x8a\x12\x9b\xac\x04\
+\x94\x79\xe8\xb9\x46\x44\xa7\xbd\x83\x7b\xcb\x4b\x68\x77\x7b\x2e\
+\x73\xcf\xf7\xdd\x3c\xa8\x84\x15\x04\x81\x0f\x3f\x08\x21\x3d\x39\
+\xb6\x9e\x40\x37\xc3\x73\x65\xe1\xa0\xf5\xfb\xf5\x6d\x57\x02\x8f\
+\xcc\x39\x48\x00\x29\xf0\x84\x73\xc0\x92\x79\x98\x3d\x64\xa7\xd9\
+\x99\x73\x38\x39\xba\x7e\xd2\x35\xe7\x7e\x99\x18\x17\xb4\x32\xc8\
+\x4a\x20\x4e\x34\xb2\x42\x21\xb7\xfb\x6a\x40\x25\x30\x93\x36\x21\
+\x83\xeb\x01\x01\x54\x67\xe6\x30\x7f\xa6\x09\xe9\x79\x6e\x36\x64\
+\x85\x41\x77\xa0\x90\xe4\x06\x69\xae\xd1\xb7\xb1\x3f\xd4\xd8\xcd\
+\x34\x7a\x43\xe3\x62\x6c\x41\x67\x69\x6e\xa0\x0c\x5c\x89\x3a\x03\
+\x8d\x66\x35\x04\x04\x0e\x16\xc0\x19\x29\x05\x7c\xa1\xec\xf5\x3b\
+\x81\x3b\x9a\xe1\xfb\x57\x76\x30\x5b\x15\x18\x94\x06\x89\x25\x1c\
+\x14\x06\x79\x39\x82\x02\x4a\x63\x50\x8e\x9e\x15\x18\xc0\x38\x04\
+\x97\x60\xe4\x96\x2e\x1d\x6f\x73\x4a\xa0\xa0\xfd\x24\x73\x80\x6a\
+\x15\x70\x86\xe9\xa9\x06\x4a\x0e\xdc\x6f\x15\xb8\x8b\x02\xca\xd0\
+\xb0\x11\x60\x42\x42\xba\x9a\x73\x70\xc9\xc0\x8d\x86\x60\x39\xbc\
+\xb2\x0f\x3d\xe8\x23\xdd\x8d\x30\xe8\x45\x28\x8b\x1c\x53\x47\x4f\
+\x62\xfe\xd8\x09\x54\x7c\x01\x23\x30\xc9\x35\x84\xb3\x3f\xf4\x05\
+\x18\x37\x90\x9e\xef\xb2\x28\xb3\x14\x26\xdd\x45\x96\xc6\xc8\x7a\
+\x16\x49\x17\xc3\x24\x86\xca\xfa\x10\x6a\x80\x9a\xd4\x98\xae\x49\
+\x1c\x6e\x56\x71\xee\xb9\x06\xe6\x4e\x37\x70\xe4\xd0\x34\x9a\x33\
+\x1a\x6f\x74\x7c\xd7\x57\x1e\x4d\xca\xc9\x46\x31\x09\x90\x96\x34\
+\xc6\xfa\x3b\x7f\x42\xda\xfa\x10\x53\x15\x89\x43\x8d\x10\x0b\xd3\
+\x35\xcc\x1f\x6d\x62\x76\xba\x8e\x99\xc6\x09\x1c\x9d\x9d\xc6\x9c\
+\xc5\x73\x53\x75\x54\x2b\x81\x6b\xd4\x52\x29\xa4\x83\x0c\xbb\xfd\
+\x04\xbd\xfe\x10\x8b\x26\xc0\x40\x0b\xe4\x93\xcc\x01\x0e\x27\xc0\
+\x5a\xe6\x63\x3b\x6a\xe1\xe2\x91\x1c\x3f\xfd\xf1\x77\xb0\xb1\xb9\
+\x85\xcd\x8d\x75\xb4\x5a\x2d\x44\xdd\x36\x9a\xd0\x38\x73\xfc\x38\
+\x82\x30\x74\x9f\xe1\x24\xcb\xa9\xeb\xdd\x1c\x31\xc6\x8c\x46\xb2\
+\x86\x61\x40\x3d\x14\xd0\x05\x47\x3a\x89\x00\x8c\x1c\xf0\x03\x09\
+\x66\x4a\x57\x0e\xc6\x04\xee\x7d\xf8\x08\x97\x2f\x5f\xc6\x60\x30\
+\x70\x23\x76\x6a\x6a\x0a\xc7\x4e\x7c\xce\xcd\x81\x4f\x5b\x44\x19\
+\xd0\xb5\x06\x0d\xb6\xfd\x9b\xf0\x63\xa7\xcc\x91\x06\xa3\x41\xc4\
+\x19\x77\x83\x65\x7d\x7d\x9d\xc8\xdd\x97\xf1\xb8\xcd\x9c\xbe\x03\
+\x93\x2e\x9f\x26\xab\xcf\xe0\xfb\xf2\x60\x01\x9c\x8d\x26\xa1\xe4\
+\xee\x45\xce\x01\x03\x43\x84\xf4\xb1\x71\x1f\x19\x21\x04\xed\xc9\
+\xee\xc9\x04\xf8\x1c\x01\x33\x28\xd2\x0e\x98\x19\xdb\xc0\x9e\xe1\
+\x80\x13\xe0\xc8\x7d\xc1\x5d\x7d\x61\xc6\xdf\x89\x71\x8d\xff\x93\
+\x15\x48\xa0\xfb\xf0\x06\x56\x97\xde\x47\xb7\xbb\xb2\x0e\x60\x68\
+\x51\x3e\x53\x80\x10\x80\x27\xb9\x05\x95\xc0\x69\xfd\xaf\x17\xe9\
+\x67\xfd\x16\xee\xfe\xed\x0f\xb8\x7f\xeb\xc1\xf6\xda\xda\x8d\xeb\
+\x00\x56\x2c\x7a\xfb\xdf\x02\x3e\x6a\x42\xc9\x20\xe5\xbf\x32\x06\
+\x14\x5d\xad\x34\xa5\x3e\x20\xfb\x69\xff\xa9\x25\x10\x82\xbb\x9a\
+\x6b\x53\x62\xe5\xfa\x9f\x71\xef\xda\x72\x6f\x75\xe5\xd6\xad\xa2\
+\x48\x48\xc0\x7b\x16\xdd\x7d\x05\xc0\x30\x67\x89\x20\x21\x16\x9c\
+\x33\x68\xad\x31\x3b\x3b\x8b\x4b\x97\x2e\x61\x61\x61\x01\xd3\xd3\
+\xd3\x68\x34\x1a\xee\x3f\x63\x29\x85\x8d\x9e\x7b\xe6\x5c\x20\xcf\
+\x4b\x3c\x7d\x9a\x98\x76\xbb\xc7\xda\xed\x18\xbd\xdd\x0c\x77\xaf\
+\x3d\x1a\x3e\x79\x7c\xe7\x4e\x92\x6c\xbd\x0d\xe0\x9a\xc5\x47\x16\
+\xf9\x33\x07\x51\xa3\x0a\xcc\x1f\x06\xe2\xc3\x4d\x84\xba\x81\xbc\
+\xc8\x71\xe1\xc2\x4b\x38\x7f\xfe\x05\x4b\x90\x43\x29\xed\x66\x7f\
+\xb7\x9b\x22\x49\x62\xc4\x71\x86\x28\x4a\xcc\xf6\x76\x57\x6d\x6d\
+\xed\x0c\xdb\xed\xad\x7e\xaf\x17\xc5\x69\xda\xe9\xc6\xf1\x56\x7b\
+\x75\xf5\xe1\xd6\x60\xb0\xfb\x00\x00\x65\x7f\xdf\xa2\x6f\xec\xda\
+\x57\x80\xe7\x4b\x7f\xd0\x4f\x71\xf5\xb7\xaf\x61\x63\xed\x09\xce\
+\xce\x1f\x31\x0f\x1f\x6d\xe3\xf1\x4a\x8b\x45\x51\xdf\x92\x26\x26\
+\x8a\x76\xcb\x4e\x27\xca\xba\xdd\x9d\x7e\x1c\xb7\xe3\x38\xde\x89\
+\xba\xdd\xcd\x76\xbb\xbd\xd1\x4e\xd3\x5e\x44\x04\x16\xb1\x45\x6f\
+\x14\x9f\x5a\xb4\x2c\x36\x69\x3f\x26\xdf\x4f\xc0\xe3\x47\x6b\x1b\
+\x3f\xff\xc1\x2f\x16\xef\xbe\xf7\x7e\x91\x26\x59\xb1\x94\xdf\xcb\
+\xae\xbc\xfe\xf7\x7e\xad\x86\xdd\x7e\x3f\xea\x46\xd1\x46\x7b\x67\
+\x67\x6d\x7b\x38\x1c\x10\xc1\xee\x98\x64\x0c\xb7\x4f\x2c\x32\x8b\
+\xe1\x9e\x98\x5b\xde\xf2\xc0\x49\x78\x6f\xe9\xf6\xcf\x7a\xbd\x27\
+\x2f\xa7\x83\x56\x7d\x30\x88\x22\xad\x4b\x52\xdf\x27\xec\x21\x7c\
+\x3a\x7a\x4e\x1d\xc1\x98\x64\x4c\xa4\x70\xf0\xda\x5f\xc0\xc3\x47\
+\x7f\x7c\x1d\xc0\x3b\x16\xcd\x51\x26\xbd\xbd\x59\x7c\x8c\x48\x4f\
+\xc8\x31\xb9\x80\x11\xe1\xf2\x68\x3e\x14\x23\x22\x83\xff\xe3\xfa\
+\x27\x0a\xd7\x77\xe2\xf8\x4e\x6d\x80\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x06\xe8\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x06\x7a\x49\x44\x41\x54\x58\xc3\xed\
+\x57\x09\x4c\x54\x57\x14\x1d\x6a\xed\xa6\x4d\x69\x69\xb5\x2e\x15\
+\xf7\x1d\xb1\x20\x8a\x0a\x28\x2a\xb2\xa9\x88\xc0\x20\x28\x22\xae\
+\xe0\x30\x08\x6e\x6c\x23\x42\x01\xc5\x71\x41\x76\x71\xa1\x0a\x28\
+\xe2\x5a\xc0\x0a\x5a\x91\x60\xc0\x15\xad\x88\x68\xcd\x18\xd4\xaa\
+\xd4\x5a\xb1\x2e\xe8\x8c\x0a\x9e\x9e\x0f\x3f\x8d\x52\x29\x9a\x9a\
+\x36\x69\x9c\xe4\x64\x32\x33\xff\xdd\x73\xef\x39\xf7\xde\xff\x47\
+\x02\x40\xf2\x5f\x42\xf2\x36\x81\xff\x65\x02\x66\x52\x85\x91\x99\
+\x34\x58\x66\xea\x14\x14\x6f\xea\x18\x98\x66\xea\x18\x90\x3e\xd4\
+\x7e\xc1\xaa\x81\xb6\xde\x93\x25\x12\xc9\xc7\x44\x33\xc9\x9b\x7e\
+\x0d\x9b\x18\xd2\x97\xc4\x11\xc3\x9c\x17\x17\x7b\x2c\xdc\x7c\x39\
+\x60\xf9\xe1\xdb\xa1\xd1\x17\xab\x15\x2b\xae\xa8\x15\xcb\xaf\xa8\
+\x03\xa3\xce\x3c\x90\x29\x76\xdf\x1a\x6c\xe7\x97\x6f\x60\x31\x5d\
+\xc6\x23\x9f\x10\xef\xbe\x01\xe2\xc5\x96\x24\x4d\x99\x34\x37\x59\
+\x15\x91\x50\x76\x37\x3c\x41\x53\x2b\x0f\x07\x26\x2d\x00\xc6\x7a\
+\x02\xa3\xa7\x02\x23\xdd\x00\x6b\x77\xc0\x7d\x1e\x10\x16\x5d\xf9\
+\xc4\xc2\x75\xc9\xb5\xd6\xba\x7a\x52\x1e\xd7\xf9\xc7\xc4\xd3\x17\
+\xa5\x56\x28\x93\xaf\x3e\x0c\x8c\x06\xdc\x02\x49\x24\x03\x4c\xa6\
+\x01\x86\x93\x01\x3d\x29\xd0\xdb\x1e\xe8\x66\x4b\x8c\x06\xfa\xd9\
+\x00\xd2\x39\xc0\x82\xf0\x22\x75\xaf\xc1\x13\x72\x18\xc6\xe0\xf5\
+\x89\x9d\x17\xeb\x12\x8a\x49\xbe\xc9\xaa\x95\x1b\x49\xbc\x06\x70\
+\x0d\x02\x2c\xe4\xc0\x50\x56\x6c\x4c\x0c\x64\x12\x83\xbc\x09\x92\
+\xe9\x7b\x00\x3d\x5d\x80\x4e\x63\x00\x5d\x0b\x60\x88\x13\x10\x10\
+\xa5\x7e\x36\xd0\x56\x56\xc9\x70\x4e\xaf\x45\x3e\x7c\x62\x88\xdc\
+\xc6\x23\xaa\x2c\x3c\xbe\xa4\x2a\x3c\x19\x98\xba\x84\x15\xfb\x01\
+\x66\x73\x89\xf9\x94\x5b\x01\xd8\x47\x01\x93\xa9\xc6\xd4\x38\x26\
+\xc6\xf7\x71\xdf\x50\x11\x5f\xa0\xef\x14\xa0\xab\x1d\x60\xe4\x0c\
+\xcc\xa5\x45\xe6\x4e\x01\x77\x19\xd2\xf7\xb5\xaa\x96\x2d\xd9\x71\
+\x35\x26\x5d\x53\xeb\x4d\x92\xf1\x01\xf4\x96\xa4\x23\xfc\x01\x9b\
+\x08\x92\x92\x70\x7e\x3a\xb0\x7c\x2f\xb0\xbe\x10\xd8\x54\x04\x24\
+\xfc\x00\xf8\x6f\xa5\xec\x2b\xa8\x0e\x13\xed\xc3\x5e\x18\xcc\x5e\
+\xf0\x5d\xc6\xe4\xbc\xe3\xab\x19\x5a\xf1\x0a\xe4\x0a\x27\xa1\xea\
+\xc8\xc4\x92\xaa\x88\x75\x24\x0a\x63\xd5\x24\x1d\x45\xbf\x6d\x22\
+\xd9\x6c\x09\xf4\x74\x1b\x10\x7b\x08\xc8\x2a\x03\xb6\x1e\x54\xd5\
+\x84\xc4\xee\x51\x7b\x2c\x88\x7b\x18\xb9\x2e\x4f\xb3\xbd\x84\x92\
+\x67\x50\x09\x5e\x6b\x4c\x6b\x46\xd1\x2a\x45\x2c\xed\x19\x23\xbf\
+\xc7\xf0\x4b\xfe\x1c\x1f\x8e\x86\x31\xbf\xf8\x88\xd0\x7a\x5e\x72\
+\x07\xcf\x98\x0b\xb1\x69\x37\x35\xf3\xe9\xb5\x53\x08\x60\x49\x99\
+\xad\x59\xb1\x34\x06\x90\xb1\x62\xe5\x01\x60\x57\x29\xb0\xad\x40\
+\x55\x33\xc6\x23\xf4\x41\x5f\xd3\x89\x57\x3b\xf4\x1a\x5a\xac\xd3\
+\xae\xfb\x4e\x36\xda\xb1\xb5\xbb\x4a\x34\x89\xf9\xb4\x24\x91\x7d\
+\x12\x54\x1f\x63\x55\x9a\xfa\x99\x91\xb5\xe7\xed\x3a\x05\x04\xf2\
+\xc4\xd4\xb2\xdf\x0d\x2d\x67\x6d\xea\xd2\xdf\x62\xbc\xb8\x28\xb4\
+\x98\x58\xf0\x0c\xff\xd4\x8a\xd8\x2d\x9a\x5a\x2f\x25\xbd\xe5\x41\
+\x2b\xfa\x69\xbf\x0a\xf0\x48\x61\x15\x39\x40\xca\x31\x20\xfb\xf4\
+\x9d\x5a\x59\xe8\x86\x47\x02\xf1\x97\x9d\xf4\xf3\x79\x76\x39\xe1\
+\x45\x8c\x63\x3c\x7f\xdf\xc8\xf4\xdf\x32\x4f\x02\x3e\xa9\x4c\x9a\
+\x71\x7c\xe3\x81\xc8\xa4\x13\x4f\xba\x1b\x8d\x39\xcf\x6b\xfc\x04\
+\x05\x4a\x0b\x8f\x30\xab\x75\xa7\x1f\xe9\x9b\xbb\x65\xe9\x99\xb9\
+\xc8\xb9\xc1\xb6\xf9\x45\xe4\x5c\x57\x6e\x06\xa6\xd1\x6f\x3b\xca\
+\x6e\xcb\x77\x97\x24\x40\x9e\x09\xac\x2c\x00\xf6\x94\x03\x69\xfb\
+\xcb\x9e\x8e\x70\xf6\xbf\xdf\xa1\xb7\x49\x09\x83\xad\x21\x3c\x09\
+\x73\xa2\x33\xf1\x59\xff\x11\xee\x16\x5e\x21\x29\xd7\x77\xfd\x48\
+\x1b\xb6\x53\x31\x5a\x18\x9f\x45\x05\xdd\x42\x1f\x68\xb7\xea\xb8\
+\x9b\xd7\xb8\x08\x0d\x56\x96\xcb\x80\x2b\xf9\xa3\x97\xe2\x94\xda\
+\x78\x9c\xef\x85\xf0\xa4\xeb\x1a\x7f\x7a\xeb\xb6\x94\xcb\x84\x72\
+\xdb\x0b\x5d\xfd\x2d\x83\xb0\xc1\xd6\x1e\x07\xf2\xca\xd5\xcf\x16\
+\x29\xb7\x70\x96\xed\x2b\x3e\x6f\xdf\x63\x5f\x9d\x97\x12\x89\x1d\
+\xd1\xf5\xf9\x55\x6b\xe2\xb0\x68\xda\xb2\x0d\xfb\x7f\xcd\x64\x1f\
+\x84\x91\x58\xf9\x1d\x10\x9e\x74\xf8\x71\x57\x03\x2b\xa1\xfa\x30\
+\xc2\x58\xb0\xe0\xdc\xae\x5c\x60\x4e\x28\x3b\xdb\x07\x70\x5c\x54\
+\x5d\xeb\x42\x52\x07\x62\x1c\xbb\x55\x4a\xc9\x66\x6d\x01\x42\xe9\
+\x75\x2a\x2b\xc9\x2d\xbb\x53\x3b\x51\xae\xac\xee\xd4\x6f\x44\x29\
+\x03\xc4\x10\x33\x89\x21\x44\xeb\x86\xab\x55\xb8\x17\x64\x1c\xbc\
+\x58\x9d\xce\xa4\xe3\x38\x11\x69\x07\xef\xd4\x9a\x3b\xf9\xdf\x6f\
+\xa1\xdd\x3a\x93\x3f\xbb\x12\x6d\xeb\x12\xd8\xb9\x9f\xbe\x72\xa6\
+\x4d\xbc\x00\x53\x8e\x8b\x55\x58\x7d\xd5\x93\xd6\x03\x9e\x94\x6e\
+\x29\x3b\x3c\x93\x92\xe7\x9c\xba\x51\x23\x4a\x7e\x92\x87\x95\x84\
+\x83\x58\x75\x0b\xe2\x9d\x86\xf7\x06\xa9\x3c\xe6\x42\xf1\x65\x36\
+\x28\x7b\x60\xe7\x51\xf5\x33\x47\x2f\x65\xb5\x78\x36\x98\x30\x24\
+\x3e\xa8\x4b\x60\x0f\x09\x66\x2b\xeb\x67\x7a\x24\x95\xb0\x67\x87\
+\x4f\xa1\xff\x3e\x94\x2c\x92\x33\x9d\x41\xf2\xb5\x59\x27\x9e\x8c\
+\x24\x79\xbb\x6e\x03\x8f\xf0\x60\x24\x31\x96\x68\xdf\xd8\x0d\x45\
+\x68\xee\xf4\xbc\xb2\xbb\x85\x2a\x20\xff\x02\x30\x2f\x72\x8b\x5a\
+\x54\x4d\x48\xdc\x96\xf8\xa2\x6e\xe2\x84\x04\x72\x8a\xd9\x9d\xdc\
+\x6c\x76\x4c\xc2\x81\x92\x4f\xe5\x78\x79\xd3\xb3\x10\xf6\x46\xf2\
+\x19\x56\x70\xec\x46\x0d\x1b\xb4\x52\xbb\x95\x6e\x8e\xb8\x3c\xac\
+\x88\x36\x8d\x91\x0b\xbb\xc3\xc3\x3f\x59\x55\xfe\x0b\x70\xfa\x2a\
+\xf7\xc4\xd2\xad\x8f\x44\xdf\x57\x13\x13\x5e\x48\x5c\x48\x20\xef\
+\x14\xc7\x8a\xdd\xed\xbe\x11\x98\xc1\xa5\x31\x97\xcd\x16\x4c\x55\
+\xa2\x38\x66\x6b\x0a\xea\xc9\xdb\x77\x1f\x54\xc8\xcb\x17\x0a\xd6\
+\x8a\xd9\xbf\xbc\x72\xa7\x20\x1d\x26\xb0\xf3\x50\xe9\x4d\x4d\x79\
+\x25\xc9\xa3\xb6\x3e\x14\xc9\x85\x7e\x11\xee\x80\xba\x2f\x9c\x15\
+\x12\x28\xa2\x44\x71\x5c\x16\x41\x9c\xed\xc5\x6c\xb6\x65\x5c\xa3\
+\xd1\xec\xdc\xb5\xdc\x6c\x99\x97\xb8\x52\xb3\x4e\x3e\xee\x3d\x64\
+\xc2\x51\x9d\xb6\xdd\x3c\xc5\xec\x1b\x7d\xa0\x60\xbc\x39\x71\x19\
+\x45\xb7\x4a\x2a\x34\xb5\xce\xb2\x15\xf7\xba\x19\x5a\x97\x8b\x23\
+\xea\x4c\x74\x24\x9a\x37\x3c\x70\xee\xec\xcf\xc0\xc1\x9f\x48\x56\
+\x5a\xdf\x6c\x7b\xe8\x5b\x76\x05\xb0\x8f\xf2\x15\xdc\x00\xce\x56\
+\x01\xeb\x76\x17\xa9\xfb\x98\x48\x77\xf0\x48\x1f\xe2\xfd\x46\x1e\
+\x4a\xec\x42\x13\xf7\x5e\xcb\x3f\x7d\x53\x33\x76\x7a\xc4\xed\xce\
+\xfa\xa3\x84\xfd\xb0\x52\xbc\xeb\xfd\x95\x5c\x9c\xd5\x8c\xec\xa2\
+\xcb\x9a\xec\xe2\x4b\x4f\xb3\x8a\x54\x35\xd9\x47\x55\x35\x39\xc4\
+\xde\x63\xc4\x71\x55\xcd\xf7\x44\xee\x09\x01\x97\x9e\xba\xfa\xae\
+\xae\x6a\xa5\xab\xe7\x23\xfa\xaf\xd5\xe0\xf9\xa0\x87\x47\xc0\xfa\
+\x8b\xab\xd3\x0a\xab\x0c\x2d\x67\x9e\xfb\xaa\xe7\xe0\x03\xfc\x3a\
+\x82\xb0\x17\x65\x6f\xfe\x52\xc9\x0c\x46\xcf\x70\x19\x60\x35\xbb\
+\xa0\xdf\xf0\xc9\xe7\xf5\xcc\x5c\x2f\x35\x8a\x61\xae\xaa\x36\x5d\
+\x0c\x72\xc4\xb9\xef\xf2\x12\x1b\x9a\x75\x37\xb2\x35\xef\x3d\xd4\
+\x71\xe3\x87\x2d\x3f\x8d\xe2\x67\x39\x31\x92\x68\xd7\xd4\xa3\x97\
+\xb0\xb9\x06\x88\x8b\x61\x76\x13\x70\x13\x44\x13\x1f\xa5\xb4\x1a\
+\xc4\x11\x3e\x6b\x13\x5f\x0b\xf7\x31\xd1\x2a\xed\x57\x79\xee\x6b\
+\x26\x26\xd1\x46\x6c\xb0\xbf\x43\x9b\x26\x9e\x6a\xb5\xea\x96\x8b\
+\x44\xd2\x92\x78\xef\x25\x49\xfe\xfb\xaf\xb7\xff\x8c\xde\x26\xd0\
+\x14\xfe\x00\xc6\x8f\x6d\x5f\x51\xaa\x96\x24\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\xd1\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x03\x63\x49\x44\x41\x54\x58\xc3\xc5\
+\x97\xcd\x6f\x1b\x55\x14\xc5\x7f\x77\x66\x92\x89\xd3\x7c\xd4\xad\
+\x17\x09\x20\xd2\x4d\x55\x51\x10\x08\x51\x84\xca\x0a\x09\xd8\x20\
+\xc4\xa2\x52\x17\x2c\x2a\x24\x28\x6b\x36\x2c\x90\xfa\x1f\xc0\x82\
+\x0d\xa8\x3b\x04\x2c\xd8\x82\x10\xaa\xda\x45\x05\x64\x07\x08\x04\
+\xa1\x34\x40\x85\x11\x6e\x21\xb5\x13\x9c\xe6\xc3\xb5\xd3\x79\xef\
+\x5d\x16\xf3\xec\x8c\x9d\xc4\xa6\xf5\x54\x1d\xe9\x4a\x1e\x69\x3c\
+\xe7\xdc\x73\xce\xbb\xef\x8d\xa8\x2a\xf7\xf2\x0a\xb8\xc7\x57\xf4\
+\x7f\x1e\x7a\xff\x35\x79\xf2\xe6\x16\x91\x55\xa4\x30\xca\x13\xc6\
+\x12\xaa\x22\x00\x51\xc0\x4c\x18\x30\xeb\x94\xc0\x3a\x1a\xd5\x35\
+\x3e\x7b\xfb\x73\xe6\x81\xa6\xaa\xba\x41\xef\x96\x41\x16\x9c\x7d\
+\x5d\xce\x3c\xf8\xc8\x0b\xaf\x3a\xa7\xa1\xaa\x06\x0f\x1c\x7d\x76\
+\xdc\x39\x15\x54\x05\x60\xaa\x34\x17\x8d\x17\xef\x1f\x09\xc2\x82\
+\x98\xad\x86\x7e\xf1\xde\x89\xea\x77\x8b\xff\xbe\xfb\xe1\x57\x7c\
+\x02\xd4\x55\xd5\xf6\x05\x50\xd5\xbe\x75\xf6\x34\x3f\xaa\xaa\xaa\
+\x3a\x5f\xb6\xab\x9c\x5a\x6d\xb5\x6e\x6a\xb5\xba\xa4\xc6\x18\xbd\
+\xb2\xf0\x75\xf2\xe6\x8b\x7c\xfb\xfc\xa3\xbc\x02\x14\xdb\x4d\xee\
+\x55\x03\x33\xe0\x94\x10\x2c\x60\x7c\x39\xd2\xfb\xb4\x04\x8b\x31\
+\xb7\x58\x5e\xae\x11\x86\x21\x87\x1e\x7a\x3a\x3a\xf9\xc6\x07\x8f\
+\x1d\x9e\xe1\xe5\x97\x8e\xf1\x1c\x30\x21\x22\x72\xc7\x21\x4c\xbd\
+\xd6\x2e\xd0\xb4\x1c\xe0\x50\x2c\xaa\x09\xcd\x66\x23\x0d\x55\x14\
+\xf1\xf0\xf1\x93\xa3\xa7\xdf\xfa\xf8\x99\xb9\x12\xa7\x80\x43\x40\
+\x61\xc8\x55\x90\x02\x81\x45\x31\x9e\x40\x02\x18\xc4\x93\xc9\xe6\
+\x6d\xdf\xbe\x09\x8e\x3c\x75\x22\x2e\x4d\x72\x1c\x38\x0a\x4c\x0e\
+\xb5\x0a\x14\x87\x60\xd2\xd4\x6e\xe7\x97\x54\x19\x08\x02\xc5\x98\
+\x16\x17\x2f\x5e\x60\x6d\x6d\x83\x20\x80\xfd\xfb\x8b\x68\x54\x8c\
+\x61\x75\x0e\x98\x00\xaa\x77\xac\x80\x64\x2c\xd0\x4e\x1e\x12\xda\
+\xd9\x18\x1d\x15\x66\x66\x0f\xd2\x6c\xd6\xd9\xdc\xac\x61\xcc\x26\
+\x85\xc2\x08\xad\xe6\x2a\x5e\xfe\x68\x48\x05\xac\x57\x40\x3b\x7d\
+\x4b\x46\x85\x20\x54\xee\x9b\x2d\x31\x35\xf9\x38\xc6\x18\xa2\x28\
+\x22\x8e\x0f\x70\x7e\x04\xcd\x65\x10\x09\xce\x77\x4c\xc6\x06\x45\
+\x11\x04\x25\x10\x21\x8e\x85\x38\xce\x5a\x3d\x46\x18\x74\xa4\xd3\
+\x1c\x32\x90\xf8\xb7\xa4\xa0\xda\x87\x6e\x4a\xce\xe5\x37\x8a\xdb\
+\x5e\xb7\x3b\x6f\x83\x48\x4f\x2c\xb7\x1b\x15\xff\x9f\x9c\x08\x08\
+\x0e\xcd\x58\xd0\x26\xa1\x3b\xd6\xc3\x36\x1d\xc9\x57\x81\xd4\x82\
+\xfe\x24\x7b\xe9\xe5\x48\x40\xfd\xe0\x91\x2e\x03\xba\x41\xe9\x49\
+\x9a\xe6\x69\x41\x56\x01\xd9\xa5\x63\x7a\x08\xe5\xae\x40\x9a\x01\
+\xd3\xe9\x51\x76\x89\x1c\x3e\x96\xd2\x09\xa7\xcd\xdf\x82\xde\x5e\
+\xa5\x13\xc6\x14\x7a\xfb\x79\xbd\x1b\x0a\x24\x3b\xe4\xee\xf6\x5c\
+\xbb\x16\x67\xce\x0a\xec\x9c\x84\xba\xeb\x73\xd9\xdd\x43\xf3\x1f\
+\x44\x83\x62\xd7\xfd\xfb\x2e\x0c\xa2\xac\xf3\xfd\x94\x68\x0f\xec\
+\x5c\x97\x61\xba\x15\x0f\x3a\xe1\xc7\xc0\x38\x50\x64\x6d\x25\x70\
+\x1b\x4d\x5a\xb9\x6d\x46\x3b\x2d\x80\xf4\x48\x39\x86\x30\x8d\x52\
+\xa4\x56\x59\xb1\x95\xc5\xcb\xf6\xa7\x2f\x3f\x4a\xae\x2c\xfe\xd0\
+\xb8\x74\x95\x3f\x80\x55\x60\x6b\x48\x05\xd4\x1f\x40\x15\x25\x04\
+\x0a\x08\x53\x28\x07\xa8\x55\x56\xed\xc2\xfc\xb9\xe4\xd7\x6f\x3e\
+\x35\xe5\x72\x79\xfd\xef\x3a\xcb\xdf\xff\xc9\x6f\xe5\x2a\x65\xe0\
+\x1a\x70\x19\x58\x1f\x32\x03\xa0\x8c\xa1\x4c\x03\x07\x3d\xe8\x85\
+\x0e\xe8\x2f\xd7\xa8\x5c\xaa\xf0\xfb\xd2\x0d\xfe\x02\x6a\xc0\x12\
+\xf0\x8f\x3f\x86\xd5\x81\xcd\x21\x15\x38\x42\xad\xb2\x6c\x17\xe6\
+\xcf\xef\x05\x7a\x1d\xb8\xea\x41\xeb\xc0\x86\x07\xdd\xd2\x01\x5f\
+\x3e\x03\x09\xac\x37\x39\xf7\xce\xa9\xc2\xf4\xf5\x1b\xd8\x9f\x2b\
+\x2c\xed\x01\xba\xe2\x65\x6e\x00\x89\xde\xc6\x17\xef\xc0\x4f\x33\
+\x11\x29\x01\xc7\x80\xc3\xc0\x2d\x0f\x38\x14\xe8\xed\x12\x18\x01\
+\xa6\xfd\xd1\xda\x7a\x69\x87\x02\xcd\x5e\xff\x01\xf9\x68\x10\x8e\
+\x11\x57\x76\x24\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x09\
+\x00\x57\xb8\x67\
+\x00\x70\
+\x00\x72\x00\x69\x00\x6e\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x08\xc8\x58\x67\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x04\xb2\x58\xc7\
+\x00\x75\
+\x00\x6e\x00\x64\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x07\
+\x04\xca\x57\xa7\
+\x00\x6e\
+\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x40\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x32\
+\x00\x00\x00\x56\x00\x00\x00\x00\x00\x01\x00\x00\x15\x1e\
+\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x06\xc8\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/mainwindows/dockwidgets/images/new.png b/examples/mainwindows/dockwidgets/images/new.png
new file mode 100644
index 0000000..dd795cf
Binary files /dev/null and b/examples/mainwindows/dockwidgets/images/new.png differ
diff --git a/examples/mainwindows/dockwidgets/images/print.png b/examples/mainwindows/dockwidgets/images/print.png
new file mode 100644
index 0000000..2afb769
Binary files /dev/null and b/examples/mainwindows/dockwidgets/images/print.png differ
diff --git a/examples/mainwindows/dockwidgets/images/save.png b/examples/mainwindows/dockwidgets/images/save.png
new file mode 100644
index 0000000..46eac82
Binary files /dev/null and b/examples/mainwindows/dockwidgets/images/save.png differ
diff --git a/examples/mainwindows/dockwidgets/images/undo.png b/examples/mainwindows/dockwidgets/images/undo.png
new file mode 100644
index 0000000..eee23d2
Binary files /dev/null and b/examples/mainwindows/dockwidgets/images/undo.png differ
diff --git a/examples/mainwindows/mdi/images/copy.png b/examples/mainwindows/mdi/images/copy.png
new file mode 100644
index 0000000..2aeb282
Binary files /dev/null and b/examples/mainwindows/mdi/images/copy.png differ
diff --git a/examples/mainwindows/mdi/images/cut.png b/examples/mainwindows/mdi/images/cut.png
new file mode 100644
index 0000000..54638e9
Binary files /dev/null and b/examples/mainwindows/mdi/images/cut.png differ
diff --git a/examples/mainwindows/mdi/images/new.png b/examples/mainwindows/mdi/images/new.png
new file mode 100644
index 0000000..12131b0
Binary files /dev/null and b/examples/mainwindows/mdi/images/new.png differ
diff --git a/examples/mainwindows/mdi/images/open.png b/examples/mainwindows/mdi/images/open.png
new file mode 100644
index 0000000..45fa288
Binary files /dev/null and b/examples/mainwindows/mdi/images/open.png differ
diff --git a/examples/mainwindows/mdi/images/paste.png b/examples/mainwindows/mdi/images/paste.png
new file mode 100644
index 0000000..c14425c
Binary files /dev/null and b/examples/mainwindows/mdi/images/paste.png differ
diff --git a/examples/mainwindows/mdi/images/save.png b/examples/mainwindows/mdi/images/save.png
new file mode 100644
index 0000000..daba865
Binary files /dev/null and b/examples/mainwindows/mdi/images/save.png differ
diff --git a/examples/mainwindows/mdi/mdi.py b/examples/mainwindows/mdi/mdi.py
new file mode 100755
index 0000000..fc2dc9d
--- /dev/null
+++ b/examples/mainwindows/mdi/mdi.py
@@ -0,0 +1,446 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QFile, QFileInfo, QPoint, QSettings, QSignalMapper,
+        QSize, QTextStream, Qt)
+from PyQt5.QtGui import QIcon, QKeySequence
+from PyQt5.QtWidgets import (QAction, QApplication, QFileDialog, QMainWindow,
+        QMdiArea, QMessageBox, QTextEdit, QWidget)
+
+import mdi_rc
+
+
+class MdiChild(QTextEdit):
+    sequenceNumber = 1
+
+    def __init__(self):
+        super(MdiChild, self).__init__()
+
+        self.setAttribute(Qt.WA_DeleteOnClose)
+        self.isUntitled = True
+
+    def newFile(self):
+        self.isUntitled = True
+        self.curFile = "document%d.txt" % MdiChild.sequenceNumber
+        MdiChild.sequenceNumber += 1
+        self.setWindowTitle(self.curFile + '[*]')
+
+        self.document().contentsChanged.connect(self.documentWasModified)
+
+    def loadFile(self, fileName):
+        file = QFile(fileName)
+        if not file.open(QFile.ReadOnly | QFile.Text):
+            QMessageBox.warning(self, "MDI",
+                    "Cannot read file %s:\n%s." % (fileName, file.errorString()))
+            return False
+
+        instr = QTextStream(file)
+        QApplication.setOverrideCursor(Qt.WaitCursor)
+        self.setPlainText(instr.readAll())
+        QApplication.restoreOverrideCursor()
+
+        self.setCurrentFile(fileName)
+
+        self.document().contentsChanged.connect(self.documentWasModified)
+
+        return True
+
+    def save(self):
+        if self.isUntitled:
+            return self.saveAs()
+        else:
+            return self.saveFile(self.curFile)
+
+    def saveAs(self):
+        fileName, _ = QFileDialog.getSaveFileName(self, "Save As", self.curFile)
+        if not fileName:
+            return False
+
+        return self.saveFile(fileName)
+
+    def saveFile(self, fileName):
+        file = QFile(fileName)
+
+        if not file.open(QFile.WriteOnly | QFile.Text):
+            QMessageBox.warning(self, "MDI",
+                    "Cannot write file %s:\n%s." % (fileName, file.errorString()))
+            return False
+
+        outstr = QTextStream(file)
+        QApplication.setOverrideCursor(Qt.WaitCursor)
+        outstr << self.toPlainText()
+        QApplication.restoreOverrideCursor()
+
+        self.setCurrentFile(fileName)
+        return True
+
+    def userFriendlyCurrentFile(self):
+        return self.strippedName(self.curFile)
+
+    def currentFile(self):
+        return self.curFile
+
+    def closeEvent(self, event):
+        if self.maybeSave():
+            event.accept()
+        else:
+            event.ignore()
+
+    def documentWasModified(self):
+        self.setWindowModified(self.document().isModified())
+
+    def maybeSave(self):
+        if self.document().isModified():
+            ret = QMessageBox.warning(self, "MDI",
+                    "'%s' has been modified.\nDo you want to save your "
+                    "changes?" % self.userFriendlyCurrentFile(),
+                    QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
+
+            if ret == QMessageBox.Save:
+                return self.save()
+
+            if ret == QMessageBox.Cancel:
+                return False
+
+        return True
+
+    def setCurrentFile(self, fileName):
+        self.curFile = QFileInfo(fileName).canonicalFilePath()
+        self.isUntitled = False
+        self.document().setModified(False)
+        self.setWindowModified(False)
+        self.setWindowTitle(self.userFriendlyCurrentFile() + "[*]")
+
+    def strippedName(self, fullFileName):
+        return QFileInfo(fullFileName).fileName()
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.mdiArea = QMdiArea()
+        self.mdiArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
+        self.mdiArea.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
+        self.setCentralWidget(self.mdiArea)
+
+        self.mdiArea.subWindowActivated.connect(self.updateMenus)
+        self.windowMapper = QSignalMapper(self)
+        self.windowMapper.mapped[QWidget].connect(self.setActiveSubWindow)
+
+        self.createActions()
+        self.createMenus()
+        self.createToolBars()
+        self.createStatusBar()
+        self.updateMenus()
+
+        self.readSettings()
+
+        self.setWindowTitle("MDI")
+
+    def closeEvent(self, event):
+        self.mdiArea.closeAllSubWindows()
+        if self.mdiArea.currentSubWindow():
+            event.ignore()
+        else:
+            self.writeSettings()
+            event.accept()
+
+    def newFile(self):
+        child = self.createMdiChild()
+        child.newFile()
+        child.show()
+
+    def open(self):
+        fileName, _ = QFileDialog.getOpenFileName(self)
+        if fileName:
+            existing = self.findMdiChild(fileName)
+            if existing:
+                self.mdiArea.setActiveSubWindow(existing)
+                return
+
+            child = self.createMdiChild()
+            if child.loadFile(fileName):
+                self.statusBar().showMessage("File loaded", 2000)
+                child.show()
+            else:
+                child.close()
+
+    def save(self):
+        if self.activeMdiChild() and self.activeMdiChild().save():
+            self.statusBar().showMessage("File saved", 2000)
+
+    def saveAs(self):
+        if self.activeMdiChild() and self.activeMdiChild().saveAs():
+            self.statusBar().showMessage("File saved", 2000)
+
+    def cut(self):
+        if self.activeMdiChild():
+            self.activeMdiChild().cut()
+
+    def copy(self):
+        if self.activeMdiChild():
+            self.activeMdiChild().copy()
+
+    def paste(self):
+        if self.activeMdiChild():
+            self.activeMdiChild().paste()
+
+    def about(self):
+        QMessageBox.about(self, "About MDI",
+                "The <b>MDI</b> example demonstrates how to write multiple "
+                "document interface applications using Qt.")
+
+    def updateMenus(self):
+        hasMdiChild = (self.activeMdiChild() is not None)
+        self.saveAct.setEnabled(hasMdiChild)
+        self.saveAsAct.setEnabled(hasMdiChild)
+        self.pasteAct.setEnabled(hasMdiChild)
+        self.closeAct.setEnabled(hasMdiChild)
+        self.closeAllAct.setEnabled(hasMdiChild)
+        self.tileAct.setEnabled(hasMdiChild)
+        self.cascadeAct.setEnabled(hasMdiChild)
+        self.nextAct.setEnabled(hasMdiChild)
+        self.previousAct.setEnabled(hasMdiChild)
+        self.separatorAct.setVisible(hasMdiChild)
+
+        hasSelection = (self.activeMdiChild() is not None and
+                        self.activeMdiChild().textCursor().hasSelection())
+        self.cutAct.setEnabled(hasSelection)
+        self.copyAct.setEnabled(hasSelection)
+
+    def updateWindowMenu(self):
+        self.windowMenu.clear()
+        self.windowMenu.addAction(self.closeAct)
+        self.windowMenu.addAction(self.closeAllAct)
+        self.windowMenu.addSeparator()
+        self.windowMenu.addAction(self.tileAct)
+        self.windowMenu.addAction(self.cascadeAct)
+        self.windowMenu.addSeparator()
+        self.windowMenu.addAction(self.nextAct)
+        self.windowMenu.addAction(self.previousAct)
+        self.windowMenu.addAction(self.separatorAct)
+
+        windows = self.mdiArea.subWindowList()
+        self.separatorAct.setVisible(len(windows) != 0)
+
+        for i, window in enumerate(windows):
+            child = window.widget()
+
+            text = "%d %s" % (i + 1, child.userFriendlyCurrentFile())
+            if i < 9:
+                text = '&' + text
+
+            action = self.windowMenu.addAction(text)
+            action.setCheckable(True)
+            action.setChecked(child is self.activeMdiChild())
+            action.triggered.connect(self.windowMapper.map)
+            self.windowMapper.setMapping(action, window)
+
+    def createMdiChild(self):
+        child = MdiChild()
+        self.mdiArea.addSubWindow(child)
+
+        child.copyAvailable.connect(self.cutAct.setEnabled)
+        child.copyAvailable.connect(self.copyAct.setEnabled)
+
+        return child
+
+    def createActions(self):
+        self.newAct = QAction(QIcon(':/images/new.png'), "&New", self,
+                shortcut=QKeySequence.New, statusTip="Create a new file",
+                triggered=self.newFile)
+
+        self.openAct = QAction(QIcon(':/images/open.png'), "&Open...", self,
+                shortcut=QKeySequence.Open, statusTip="Open an existing file",
+                triggered=self.open)
+
+        self.saveAct = QAction(QIcon(':/images/save.png'), "&Save", self,
+                shortcut=QKeySequence.Save,
+                statusTip="Save the document to disk", triggered=self.save)
+
+        self.saveAsAct = QAction("Save &As...", self,
+                shortcut=QKeySequence.SaveAs,
+                statusTip="Save the document under a new name",
+                triggered=self.saveAs)
+
+        self.exitAct = QAction("E&xit", self, shortcut=QKeySequence.Quit,
+                statusTip="Exit the application",
+                triggered=QApplication.instance().closeAllWindows)
+
+        self.cutAct = QAction(QIcon(':/images/cut.png'), "Cu&t", self,
+                shortcut=QKeySequence.Cut,
+                statusTip="Cut the current selection's contents to the clipboard",
+                triggered=self.cut)
+
+        self.copyAct = QAction(QIcon(':/images/copy.png'), "&Copy", self,
+                shortcut=QKeySequence.Copy,
+                statusTip="Copy the current selection's contents to the clipboard",
+                triggered=self.copy)
+
+        self.pasteAct = QAction(QIcon(':/images/paste.png'), "&Paste", self,
+                shortcut=QKeySequence.Paste,
+                statusTip="Paste the clipboard's contents into the current selection",
+                triggered=self.paste)
+
+        self.closeAct = QAction("Cl&ose", self,
+                statusTip="Close the active window",
+                triggered=self.mdiArea.closeActiveSubWindow)
+
+        self.closeAllAct = QAction("Close &All", self,
+                statusTip="Close all the windows",
+                triggered=self.mdiArea.closeAllSubWindows)
+
+        self.tileAct = QAction("&Tile", self, statusTip="Tile the windows",
+                triggered=self.mdiArea.tileSubWindows)
+
+        self.cascadeAct = QAction("&Cascade", self,
+                statusTip="Cascade the windows",
+                triggered=self.mdiArea.cascadeSubWindows)
+
+        self.nextAct = QAction("Ne&xt", self, shortcut=QKeySequence.NextChild,
+                statusTip="Move the focus to the next window",
+                triggered=self.mdiArea.activateNextSubWindow)
+
+        self.previousAct = QAction("Pre&vious", self,
+                shortcut=QKeySequence.PreviousChild,
+                statusTip="Move the focus to the previous window",
+                triggered=self.mdiArea.activatePreviousSubWindow)
+
+        self.separatorAct = QAction(self)
+        self.separatorAct.setSeparator(True)
+
+        self.aboutAct = QAction("&About", self,
+                statusTip="Show the application's About box",
+                triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                statusTip="Show the Qt library's About box",
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.newAct)
+        self.fileMenu.addAction(self.openAct)
+        self.fileMenu.addAction(self.saveAct)
+        self.fileMenu.addAction(self.saveAsAct)
+        self.fileMenu.addSeparator()
+        action = self.fileMenu.addAction("Switch layout direction")
+        action.triggered.connect(self.switchLayoutDirection)
+        self.fileMenu.addAction(self.exitAct)
+
+        self.editMenu = self.menuBar().addMenu("&Edit")
+        self.editMenu.addAction(self.cutAct)
+        self.editMenu.addAction(self.copyAct)
+        self.editMenu.addAction(self.pasteAct)
+
+        self.windowMenu = self.menuBar().addMenu("&Window")
+        self.updateWindowMenu()
+        self.windowMenu.aboutToShow.connect(self.updateWindowMenu)
+
+        self.menuBar().addSeparator()
+
+        self.helpMenu = self.menuBar().addMenu("&Help")
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+    def createToolBars(self):
+        self.fileToolBar = self.addToolBar("File")
+        self.fileToolBar.addAction(self.newAct)
+        self.fileToolBar.addAction(self.openAct)
+        self.fileToolBar.addAction(self.saveAct)
+
+        self.editToolBar = self.addToolBar("Edit")
+        self.editToolBar.addAction(self.cutAct)
+        self.editToolBar.addAction(self.copyAct)
+        self.editToolBar.addAction(self.pasteAct)
+
+    def createStatusBar(self):
+        self.statusBar().showMessage("Ready")
+
+    def readSettings(self):
+        settings = QSettings('Trolltech', 'MDI Example')
+        pos = settings.value('pos', QPoint(200, 200))
+        size = settings.value('size', QSize(400, 400))
+        self.move(pos)
+        self.resize(size)
+
+    def writeSettings(self):
+        settings = QSettings('Trolltech', 'MDI Example')
+        settings.setValue('pos', self.pos())
+        settings.setValue('size', self.size())
+
+    def activeMdiChild(self):
+        activeSubWindow = self.mdiArea.activeSubWindow()
+        if activeSubWindow:
+            return activeSubWindow.widget()
+        return None
+
+    def findMdiChild(self, fileName):
+        canonicalFilePath = QFileInfo(fileName).canonicalFilePath()
+
+        for window in self.mdiArea.subWindowList():
+            if window.widget().currentFile() == canonicalFilePath:
+                return window
+        return None
+
+    def switchLayoutDirection(self):
+        if self.layoutDirection() == Qt.LeftToRight:
+            QApplication.setLayoutDirection(Qt.RightToLeft)
+        else:
+            QApplication.setLayoutDirection(Qt.LeftToRight)
+
+    def setActiveSubWindow(self, window):
+        if window:
+            self.mdiArea.setActiveSubWindow(window)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    mainWin = MainWindow()
+    mainWin.show()
+    sys.exit(app.exec_())
diff --git a/examples/mainwindows/mdi/mdi.qrc b/examples/mainwindows/mdi/mdi.qrc
new file mode 100644
index 0000000..0a776fa
--- /dev/null
+++ b/examples/mainwindows/mdi/mdi.qrc
@@ -0,0 +1,10 @@
+<!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/examples/mainwindows/mdi/mdi_rc.py b/examples/mainwindows/mdi/mdi_rc.py
new file mode 100644
index 0000000..f805b75
--- /dev/null
+++ b/examples/mainwindows/mdi/mdi_rc.py
@@ -0,0 +1,604 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 12 17:31:28 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x04\xa3\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\x35\x49\x44\x41\x54\x58\xc3\xe5\
+\x97\xcd\x8f\x54\x45\x14\xc5\x7f\xb7\xea\xd6\x7b\xaf\xdb\x6e\xc7\
+\xf9\x40\x9d\x89\x46\x4d\x34\x99\x44\x8d\x1a\x48\x98\xc4\x8c\x1f\
+\x1b\xfe\x02\x4c\x5c\xf1\x07\x18\x16\x2e\x4d\x5c\x6b\x58\xc3\x8e\
+\xc4\x8d\x1b\x17\xce\x82\x68\x74\x41\x5c\x18\x0d\xe2\xc4\xc6\x00\
+\x3d\x60\x50\x51\x19\x60\x02\xa2\x0e\x0c\x83\xd3\xfd\x5e\xf7\x94\
+\x8b\xaa\xee\xf9\x60\xe6\x0d\x84\x51\x16\x56\x52\xa9\xce\x7b\xb7\
+\xeb\x9e\x3a\xf7\xd4\xa9\x7a\xea\xbd\xe7\x7e\x36\xe5\x3e\xb7\x3e\
+\x80\x5d\xbb\x76\xbd\x03\xec\xfd\x8f\xf2\x4e\x35\x1a\x8d\x03\xeb\
+\x19\xd8\xbb\xef\xbd\xa3\x3b\x1f\x1f\x76\x00\x9c\x3c\x3a\xcf\xcc\
+\x97\x37\x58\x9c\xef\xdc\x53\xa6\xda\xa0\xf2\xdc\x6b\x03\xbc\xb8\
+\x67\x10\x80\x8b\x7f\x16\x7c\xf8\xee\x1e\x80\xdb\x00\x70\xfc\xec\
+\x1c\xdf\x3f\x30\x04\x78\x2e\xfd\xb8\xc0\xfe\xb7\xce\x6f\xcb\x72\
+\x0f\x1d\x79\x9a\x0b\x23\x96\xd3\x9f\x1f\x64\xfc\xd5\x7d\x9b\x6b\
+\x40\x45\xb0\x16\x40\x78\x70\x2c\x23\xcb\xb2\x6d\x01\x30\x30\x96\
+\x61\x8d\x50\x1b\x7c\x14\x23\x25\x22\x14\x2b\xd8\x18\x91\xd5\x95\
+\x73\xe7\xce\x83\x2a\xb8\x04\xd2\x14\xb2\x0c\xd2\x2c\x8c\x49\x0a\
+\x49\x12\xde\x77\x3a\x90\xe7\x90\xb7\xa1\xd5\x82\x76\x2b\x8e\x6d\
+\x28\x72\xb2\xfa\x38\xd6\x0a\xe3\xaf\xbc\x49\x6b\xf1\xfa\xe6\x00\
+\xac\x15\xac\x15\x04\xb0\x46\xd8\xbd\x7b\xe7\x16\x6b\xeb\x86\xae\
+\x80\x5a\xa8\x56\x81\xea\x6d\x51\x8d\xaf\x04\xb5\x82\xf7\xa0\xa6\
+\x84\x01\x67\x05\x35\x82\x08\xa8\x0a\x95\x2c\xc3\x23\x20\x1e\x08\
+\xc0\xf0\x1e\x2f\x02\xde\x23\x12\x26\x15\x7c\x88\x23\xc4\x21\x1e\
+\x3c\x21\x5e\x40\x4d\x58\x18\x40\xd7\x4a\x89\x06\xac\xa0\xda\x63\
+\x00\x9a\x33\xbf\x05\x8a\x53\x07\x69\x02\x95\x04\xb2\x34\xf6\x04\
+\x12\x07\x4e\xa1\xe8\x40\x5e\x40\x2b\x8f\xbd\x05\x4b\x39\xb4\x73\
+\xc8\x0b\x54\x87\x71\x3d\x00\x2a\xe5\x25\x70\x31\x40\xd5\x30\x39\
+\xf9\xd2\xd6\x0a\xf3\x3e\xd0\xaf\x16\xaa\x1b\x8b\xf6\xd8\x27\x61\
+\x61\xbd\x1c\x25\x25\x20\x00\xf0\x81\x8d\x34\x4d\xa3\x3a\xc3\xb3\
+\x98\x11\x89\x6c\x07\xda\x63\x09\x56\x98\x5f\x29\x46\xfc\x61\xcd\
+\x72\x7f\x61\x1d\x2d\xd1\x80\x3a\x09\x54\x49\x18\x4f\x34\x2f\xe0\
+\x9d\x85\xc4\x21\x89\xc3\x67\x09\x92\x69\xd8\x11\x89\xe2\x13\x87\
+\x58\x8b\xef\x76\x91\xbc\x80\xbc\x03\xed\x02\xdf\x6a\x23\xed\x02\
+\xf2\x02\x9f\x77\x50\x1d\x45\xd5\x20\x78\x3a\xeb\x54\x78\x9b\x06\
+\x9c\x33\x78\x0f\x03\x8f\x24\xbc\xfe\xf2\xf3\x77\x68\xe8\x36\x68\
+\xa4\xbe\xf1\xeb\xc6\xfc\xdf\xb1\x04\x52\x5e\x82\x44\x4d\x5f\x84\
+\x8f\x0d\xa5\x38\xe7\xb6\xc5\x88\x9e\x18\x4b\xb9\x76\xb3\x03\x08\
+\x9d\x52\x11\xaa\x90\xb8\x50\xef\x5a\xc5\x30\x7d\xb1\xcb\x40\xc5\
+\xb0\x0e\xf4\x26\xad\x57\xf9\x55\x2e\xe1\xe1\xc6\xd2\x32\xf5\xcc\
+\x70\x7d\xc9\x84\x2d\xe9\x4a\x19\x10\x9c\x1a\xc0\x73\xe5\x66\x97\
+\x2b\x37\xbb\xac\x51\x57\x3f\xd7\xaa\x64\x7e\xc5\x27\xa2\x29\xac\
+\x05\x15\xc3\x9c\x0b\xb5\x77\xa6\x6c\x17\xa8\xc1\xa9\x20\xc8\x1a\
+\x35\xaf\x9b\x35\x1a\x8f\x59\x31\x9e\xfe\x7b\xe9\xef\x14\x00\xf1\
+\x82\xef\x9b\x58\x30\x2b\x57\x56\x02\x55\x21\xd1\x90\xfc\xe7\x53\
+\xdf\xf2\xeb\x99\x13\x2c\x2d\xde\xb8\xa7\xfa\x57\x6a\x03\x3c\xf5\
+\xec\x4e\x9e\x79\x61\x02\x0f\xa8\x33\x5b\x31\x10\x03\x7c\x87\xf7\
+\xf7\xbf\xc1\xc2\xc2\x02\xb7\x6e\xdd\xa2\x28\x0a\x44\x04\x6b\x2d\
+\xd6\x5a\x54\x15\x55\xc5\x39\x87\xaa\x62\xad\xc5\x98\xf0\xdf\xe5\
+\xe5\x65\xf2\x3c\xef\xf7\x23\xcd\xf9\xb8\xf2\x2d\x18\x70\x56\x50\
+\x17\x18\xdc\x31\x3a\xb6\x72\x4f\x38\x7e\x9c\xe9\xe9\x69\x8c\x31\
+\x78\xef\x99\x98\x98\x60\x72\x72\xf2\x8e\x59\xd8\x31\x3a\xd6\xdf\
+\x86\xae\xd4\x09\x55\x70\x36\xac\xa2\x56\xaf\xf7\x6b\x39\x33\x33\
+\xc3\xd0\xd0\x10\xd6\x5a\xbc\xf7\x34\x9b\xcd\xbb\x02\x50\xab\xd7\
+\x70\xd1\x88\xb4\xd4\x88\x14\x9c\x0b\x27\x5c\xa0\x2a\x00\xa8\x56\
+\xab\x64\x59\xd6\xa7\xb8\x37\xde\x69\x73\x1a\xa9\x17\x41\x4b\xad\
+\x38\x1e\xc7\xbd\x23\xb4\xd7\x8c\x31\x88\x44\xdf\x8f\x3a\xb8\xab\
+\x9b\xaf\x35\xa8\x0d\xf3\xf6\x18\x2e\x3d\x8e\x83\x29\x6d\xe3\xd5\
+\xdb\x12\xa9\xf7\xe5\x56\x6c\xad\xf4\x91\x0e\x8e\x0c\xc3\xf2\xef\
+\xdb\x02\xe0\xa1\x91\x61\xd4\xc2\xb5\x2b\x97\x59\x9c\xbf\xbe\x05\
+\x03\x36\xf8\xc0\x60\xad\x02\x0b\xdb\xc3\xc0\x50\xad\xc2\xec\xc5\
+\x4b\x9c\xfd\xee\x1b\xce\x9f\x9c\x9e\x03\xa6\x36\x04\x60\x24\x5e\
+\x4a\x05\x12\x0b\xed\x91\x27\xa9\x3d\x0c\x6f\x1f\x38\xc8\x66\xc7\
+\x81\x27\x3a\xf1\x2a\xe7\x35\x1e\x32\x81\x14\x28\xba\x70\xf9\xea\
+\x55\xce\x34\x8e\xd1\xfc\xfa\x8b\xb9\xd9\x1f\x4e\x1d\x02\x0e\x6f\
+\x08\xe0\xb3\x8f\x3e\xe0\xa7\xd3\x27\x57\x99\xe9\xda\xa3\x86\x55\
+\xe6\xbb\x1e\x04\x1b\x3c\x5f\x1d\x6f\x7c\x77\xee\x8f\xd9\x5f\x0e\
+\x01\x87\x1b\x8d\xc6\x5f\x1b\x01\x98\x9a\xfe\xf4\xe3\x7f\xf5\x73\
+\x6c\x7d\xf2\x35\x00\xe2\xb7\xda\x81\xff\xdd\xd7\xf1\x3f\x4d\xf0\
+\x4b\xb9\xe8\x46\x89\xaf\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x08\x19\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x07\xab\x49\x44\x41\x54\x58\xc3\xad\
+\x57\x5b\x50\x93\x67\x1a\xf6\xca\xce\xec\xcc\xf6\x62\x2f\xbc\xd9\
+\xe9\xce\xec\x6e\xbd\xda\xd9\x9b\xb5\xce\xba\x3b\x7b\xb0\xad\xcc\
+\x7a\xb1\xce\xce\x3a\xb3\x76\x54\x70\x75\xdb\xe2\x81\xd6\xb6\x54\
+\x04\xbb\xa5\x20\x6d\xc1\x82\x06\x08\x07\x51\x42\x80\x80\x80\x02\
+\x21\x81\x10\x92\x40\x48\x10\x73\x24\x21\x67\x72\x80\x04\x42\x20\
+\x9c\x09\x47\xb5\x54\x78\xf6\xfb\x7e\x13\x16\x30\x58\x8b\x7d\x67\
+\x9e\xf9\x2f\x92\xfc\xcf\xfb\x3e\xcf\xfb\xbe\xdf\x97\x5d\x00\x76\
+\xfd\x98\x20\xf1\x0b\x82\x14\x02\x03\xc1\x75\x82\x03\xcf\xfd\xfe\
+\x8f\x48\xbc\x9b\x20\xe1\x57\xaf\xef\xb5\x2a\x8c\xd6\x65\xdb\x02\
+\x60\x19\x1e\x5b\x09\x27\xf1\x33\xfa\x19\x81\x22\xfc\xdc\x3e\x76\
+\x48\x7e\x8a\xa0\xb9\xb6\x59\x1c\x32\xcf\xad\x42\x39\xfe\x1d\x44\
+\xf6\x51\xd8\xc7\xe6\xe8\x87\x86\x3d\x7b\xf6\x58\x53\x52\xae\x2c\
+\xca\x3a\x3a\x10\x4e\xe2\xe5\x49\xc3\xc4\x31\x04\xb7\x3e\x49\xf9\
+\x2c\x60\x9b\x5d\x59\x53\x4d\x03\x4d\xb6\x11\x34\xeb\xfb\x20\x31\
+\x79\x60\x19\x9d\xc5\xbb\xef\xbe\x3f\xc5\xab\xbe\x83\xf1\x89\x29\
+\x4c\x4f\xcf\xae\x92\xef\xd7\xbc\x74\x02\x11\x9f\x0f\xbe\x1d\xe3\
+\xb2\x04\x43\x4f\xb4\x33\x40\x8b\x7b\x06\xcd\x3d\x2e\x34\xeb\xec\
+\xa8\x57\xf6\x20\x87\x53\x85\x32\x5e\x35\x43\xbc\xb0\xf4\x90\x81\
+\xc1\x60\x5c\x26\xbf\x4b\x7c\xe1\x04\x48\x1c\x24\x38\x41\xfd\xdd\
+\xea\x73\x27\xf1\xb9\x27\x04\x48\x87\x97\xc1\xd7\xbb\x20\x22\x55\
+\x37\xdc\x37\xa2\xb8\x4e\x88\x2c\x56\x3e\xcc\x56\xdb\x3a\x71\x04\
+\x2c\x16\x6b\x2c\xfc\xce\xe7\x27\x10\x91\x36\x93\x95\x3f\x46\x7d\
+\xa5\xfe\x12\xc4\x6f\xf4\x59\x31\xb6\x02\x7e\xef\x20\x5a\x7b\x9c\
+\xe0\x3f\x30\xa1\x4c\x28\x43\x46\x0e\x1b\xb2\x0e\xf9\x26\xd2\xf9\
+\xc5\x65\xcc\x2d\x2c\x21\x34\xbf\x88\xbd\x7b\xf7\x5a\xc9\x3b\x7e\
+\xba\x6d\x02\x24\x7e\x43\x90\x46\x3d\x35\x13\x69\x75\xb3\x80\xd2\
+\x3f\x0f\xcb\xc4\xe2\x9a\x50\xa1\x5a\xb4\x6c\xf1\x59\xa0\xb6\xa0\
+\xa6\x5d\x8d\x2f\xb2\x73\x71\xb7\x9e\xff\x0c\x31\x25\x9d\x09\xcd\
+\x63\x62\x6a\x06\x83\x43\x81\x27\xe4\xdd\xbc\x2d\xd3\xb0\x3b\x92\
+\x03\x33\x26\xd4\x53\xb5\xd3\xfb\x58\x4f\x88\xc5\x03\x21\x88\x2c\
+\x43\x50\xba\x46\xd0\xed\x09\x42\xe5\x9b\x42\x9b\x73\xfc\xa9\xcf\
+\x5a\x1b\xee\x2a\x74\xc8\xbc\xc9\x45\x09\xa7\x6c\x93\xcf\x9b\x88\
+\x27\xa7\x11\x18\x1d\xc3\x80\x6f\x08\xa2\xd6\xd6\x25\xc2\x51\xdb\
+\x28\x12\x87\xc6\x1f\xaf\x82\x2f\x62\x94\x4d\x89\x24\x90\x22\xea\
+\x52\x2d\x9a\x42\xab\xe8\x18\x79\x04\xa1\xc5\xcf\x10\x53\x74\xf6\
+\x0d\xa3\xd3\xe1\x87\xd4\x3c\x80\x16\xbd\x03\x0d\x5d\x06\x14\xd5\
+\x0a\x90\x91\x95\x0d\x2f\x79\xf1\xc6\xaa\xa9\xd4\xb3\x73\x0b\x4c\
+\xc5\x94\xd8\xdd\xef\x85\xc9\x62\x05\xb7\xbc\x12\xa5\xe5\x95\x4b\
+\x13\xf3\xcb\xab\x23\x0f\x01\x37\xd9\x11\xe6\xd9\x15\x84\x97\x15\
+\x13\x06\xcb\x3c\xd0\x68\xf2\xa3\xdd\xee\x5f\x27\x96\x3b\x86\x20\
+\xb3\x78\xd7\x7d\xe6\x08\xa4\xf8\x3c\x33\x1b\x2a\x8d\x36\xaa\xdc\
+\x53\x33\x21\x8c\x8e\x8d\x33\x15\xd3\x26\xe4\x37\x09\xf1\xc1\xc5\
+\x8f\x51\x73\xaf\x01\xbe\x65\x60\xfc\x11\xa0\x23\x13\x23\xf2\xce\
+\xa1\xbe\x5d\xb9\xb8\x51\x01\x83\x81\x74\x74\x4d\xa7\x1e\x0a\x67\
+\x80\xa9\xb8\xdd\xea\x83\xd8\xe8\x42\x93\xca\xcc\xf8\x7c\xe5\xcb\
+\x2c\x88\xda\x24\x51\x89\xa7\x67\xe7\x18\x1b\x86\x86\x47\x60\x77\
+\x38\x49\x82\x3a\x24\x7c\xf8\x21\xae\xb3\x0b\xe1\x99\x5c\x80\x6f\
+\x09\xd0\x90\xde\xe1\x0f\x2c\x81\xab\x1f\xc4\x7d\xef\x04\xdd\x07\
+\x1d\x61\xeb\xff\x9f\xc0\x1d\xb9\x16\x1d\xf6\x21\x48\xcc\xfd\x4f\
+\x7d\xee\xd4\x22\x9d\x55\x84\xaa\x9a\xba\x4d\x3e\x47\xe4\x8e\xf8\
+\x3c\x3c\x12\x84\xd3\xdd\x0f\xbd\xc1\x88\xc2\xe2\x62\x9c\x7e\x2f\
+\x1e\x3d\x03\x01\xf4\x2f\x02\x83\x84\xbc\xc5\xff\x2d\xee\x3a\x43\
+\x28\x51\x91\xf7\xf6\x05\xf1\x4e\xdc\xbf\x7d\x84\x33\x69\xe3\x20\
+\x18\xf4\x33\xab\xe0\xc9\x54\x68\x35\x38\xd1\xd8\xdd\x0b\x9e\x58\
+\x89\xac\x5c\xf6\x33\x3e\x47\xaa\x9e\x9c\x9e\x65\xe4\xee\xf7\x0e\
+\xa2\xd7\x6c\x41\x43\x03\x1f\x27\x62\xe3\x20\xe9\xd6\xc0\x45\xcf\
+\x01\x52\x90\x24\xb8\x86\xb2\x9e\x00\x6e\xb4\xdb\x50\xd1\x1b\x44\
+\x85\xce\x8b\x4a\x7e\x0b\x6d\xbe\x9b\x5b\x27\xd1\xa0\x99\xf8\x16\
+\x65\x22\x05\xee\x29\xf4\x28\x13\xc8\x90\x78\x35\x0b\x1a\xad\x3e\
+\xaa\xdc\x63\x13\x93\xf0\x0d\x0d\xc3\x66\xef\x83\xb4\x5d\x8e\xc4\
+\x4b\x97\x90\xc3\xca\xc3\xd4\x63\xc0\x4e\x7a\x49\x31\x4e\xfa\x89\
+\x94\x7f\x5b\x3b\x84\x7c\x85\x13\x25\x6a\x1f\x4a\xd5\x03\xe8\xf2\
+\x30\xa3\x28\x22\xf8\xf9\x33\x09\x74\x8f\x2e\xa1\xa8\xbe\x15\xa5\
+\x7c\x09\xb2\x4a\x2a\xf0\xcf\xe3\x71\x51\xe5\xf6\x07\x46\xd1\xe7\
+\xf2\x40\xab\x37\x20\xfd\x6a\x06\x92\xbf\x48\x83\xcd\x37\x02\x27\
+\xa9\xda\x40\x1a\x4c\xe0\x7b\x88\x52\x9d\x1f\x45\xdd\xfd\x0c\x71\
+\x41\x97\x1b\xc5\xdd\x1e\x88\x9c\x41\xfc\xf9\xcd\xb7\x5d\x84\xeb\
+\x6c\xb4\x43\xd0\x28\xf7\x4e\x23\xa7\xfc\x1e\xb2\x4b\xab\xf1\x51\
+\xea\x57\x48\xfe\x6f\xea\xfa\x58\x51\xb9\x47\x82\xe3\xf0\x0c\xf8\
+\x60\x34\x99\x51\xc9\xab\xc2\xfb\x67\xcf\x41\xfe\x40\x03\x3f\xe9\
+\x6e\xb2\x8d\x19\xb9\x6f\x69\x06\x19\xd2\x9b\x2a\x2f\x72\xe5\x0e\
+\xe4\x75\xf6\xa1\xf0\xbe\x1b\x1c\x95\x1b\xf9\x9c\xca\x29\xc2\x53\
+\xb8\xdd\x29\xdc\x2b\x76\x04\x90\x51\xc8\xc5\x95\x6b\x79\x38\x11\
+\x9f\x80\x9b\xb7\x6e\x33\x63\x15\x91\xdb\x6a\x73\x40\x22\x6d\xc7\
+\x85\x84\x0f\x50\x74\xbb\x0c\xf3\x2b\x80\x9f\x34\x58\xf7\x24\x20\
+\x1c\x7c\x84\x4a\xd3\x18\x38\xfa\x61\x86\x9c\x56\xfd\x55\xb3\x1e\
+\xac\x0e\x3b\xb8\x3a\x1f\xd9\x21\x1e\x7a\x2f\xe0\x13\xbc\xba\x5d\
+\x02\x26\xbe\xc1\x83\x94\x6f\xd8\x38\x9f\x9c\x8a\x03\x7f\x3d\x04\
+\x63\xaf\x99\xe9\x6e\x2a\xb7\x46\xd7\x83\xa4\xcb\xc9\x48\xff\x3a\
+\x8b\x8c\xd5\x3c\x53\xb5\x71\xf6\xa9\xdc\x35\xf6\x69\x5c\x97\x59\
+\x19\xd9\xbf\x6e\x21\xa7\xa0\xd4\x82\x74\xbe\x1a\x57\x9b\x34\x60\
+\xc9\xcc\x10\xbb\x82\xf8\xe5\xaf\x5f\xa7\x67\xc0\x3b\xe1\x75\x1f\
+\x35\xcc\x35\xdd\x66\x7c\x94\x96\x85\xb8\x73\x17\xf1\x97\x43\x31\
+\x4c\xd5\x74\x99\xf0\xaa\xaa\x71\xfa\xf4\x19\x68\xcc\x0e\x8c\x92\
+\x2d\x36\x14\x1e\xab\x5a\xc7\x0c\x78\xe6\x71\x70\x0d\x23\x4c\xa3\
+\x65\x8a\x0c\x8c\xec\xb4\xfa\x9c\xb6\x5e\x94\x74\x39\xd0\x66\xf7\
+\xaf\x1e\x3d\x11\x4b\x47\x2e\x6f\xc3\x79\x13\x35\x2c\x5c\x99\x1a\
+\xf1\x97\x3e\xc7\xd1\xd8\x33\xf8\x38\x31\x09\x86\x5e\x13\x1a\x9b\
+\x04\xf8\xdd\x1b\xfb\x51\x4f\xd4\xf1\x90\x99\xee\x9a\x00\xaa\xad\
+\x93\x60\x2b\x5d\x0c\x39\xf5\xbc\xf0\xbe\x67\xbd\xea\xcc\x16\x3d\
+\x4a\x55\x1e\x08\x6d\x01\x94\xd4\xf1\x43\xe1\x65\x53\x40\xf0\xca\
+\xf7\x25\x60\x2b\x6e\x6a\xc7\xa9\x84\x44\xc4\x1c\x39\x8a\xdc\x7c\
+\x36\x5a\x5a\xc5\x38\x14\x13\x83\x2f\x39\x35\xc8\x14\x6a\x98\xe6\
+\xa2\xd5\xd2\x27\xf5\x9a\x7a\x4c\x13\xa1\x49\x64\xb7\x99\x90\xdb\
+\x6e\x46\xb9\xda\x8d\x06\xa5\x76\x39\x2c\x39\x3d\xf9\x4e\x13\xec\
+\xd9\x72\xd4\x47\x0d\x3b\xab\x46\x88\x63\xff\x39\x8f\xdf\xee\xfb\
+\x3d\x1a\xf9\x02\x9c\xbf\x90\x80\x93\xf1\x17\x70\xa3\xad\x07\x19\
+\xc4\x4f\x4a\x14\xe9\x6e\xba\x58\xa8\xef\x2c\xfa\x94\x98\x50\x28\
+\xb7\x40\xe9\x0e\x3c\xf9\x57\xec\x29\x2a\x77\x2d\xc1\x67\x04\xfb\
+\xb6\xb9\xe4\x44\x8d\xbe\xcc\xb2\x5a\xfc\xe3\xe4\x19\x1c\x3c\xf4\
+\x37\xb0\x72\xf3\xb0\xef\xc0\x1f\x50\x20\xd1\x21\x89\x27\x65\x2a\
+\xa6\x4b\x85\x3e\xbf\x21\xd5\x46\xe4\x2e\x90\x5b\x21\xb0\x0c\xae\
+\xe5\xdc\xe2\xd2\x11\x13\x13\xe4\x87\x6f\x3c\xaf\x3c\xe7\x96\x15\
+\x35\x9c\x69\x45\xe5\xf8\xfb\xb1\x58\x1c\x3f\x19\x87\x37\xf6\xef\
+\xc7\x8d\x3a\x11\x92\xab\xa4\x0c\x21\xed\x70\xea\x35\x55\x21\x8b\
+\x34\x5b\xc9\x03\x37\x2a\x34\x6e\xd4\x49\x3a\x17\xc3\x72\x73\x08\
+\x8e\x6d\x95\xfb\x87\x24\xe0\x4a\x65\x73\x70\xe4\xf8\x29\x1c\x3e\
+\x7c\x98\x8c\x63\x2e\x32\x05\x2a\x5c\x22\xd5\xd3\x5d\x7e\x4d\xdc\
+\x0b\x36\xe9\x74\x76\xa7\x1d\x77\x8c\xe4\x88\xb6\xf9\x9e\x84\xb7\
+\x1a\x95\xfb\x22\xbd\x49\xfd\x80\x0b\x6d\xf4\x04\x32\x4a\x78\x4c\
+\x0f\x9c\x4b\x49\xc3\xb5\xa6\x2e\x7c\xc2\x6d\x65\x36\x59\xf1\x83\
+\x01\x5c\x97\x9a\xc1\x51\x7b\x20\xf3\x04\xd7\xce\x25\x26\x05\x36\
+\xc8\xfd\xc7\x9d\xc8\x1d\xd5\x82\xdc\x1a\x01\xce\x5e\x4e\x45\x81\
+\x58\x85\x78\xf6\x5d\x5c\xa9\x55\x90\xaa\xfb\xc0\x96\xdb\x50\xad\
+\x75\xe3\xae\x54\x41\x2f\x10\xca\x0d\x72\xbf\xba\xd3\x6a\xa3\x05\
+\xb7\xa2\x51\xf8\x1d\xaf\x43\x8d\x4f\xb9\x2d\x88\xcb\xe6\xe1\x9a\
+\x48\x8f\xaa\x1e\x2f\x9a\x35\xe6\xc7\x7f\x7a\xf3\x2d\x57\x78\xac\
+\xa8\xdc\xaf\xbd\xac\xdc\xd1\xe2\x08\xdd\x05\x5c\x75\x1f\xde\xcb\
+\xaf\x45\xb9\x76\x00\x32\x67\x60\xf5\xc2\xa7\x97\xa9\xdc\xf7\x08\
+\xd2\xa9\xdc\x3b\xf8\x03\xf3\xc2\xf1\x13\x82\xca\x1c\xee\x9d\x50\
+\x0b\x39\x94\xb8\x0d\xc2\xc8\x16\xa3\x17\x87\xc3\x2f\x22\xf7\x0e\
+\xff\xda\x6d\x8a\xdd\x61\x99\xd5\x1b\xb6\xd8\x6b\xbb\x5e\x32\xbe\
+\x2f\x89\xff\x01\x66\xb9\x5f\xfc\x11\x80\x3d\xcf\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x2b\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\xbd\x49\x44\x41\x54\x58\xc3\xed\
+\x57\x6b\x4c\x93\x57\x18\x3e\x23\x71\xc9\x32\xe9\x16\x97\xa8\x54\
+\x65\x38\x9d\x02\x15\xf6\x03\x87\x32\x93\x01\x66\x2c\x5b\x70\xc4\
+\x30\xff\x60\xa2\x2e\x1a\x3a\x1d\x4e\x03\xba\x31\x89\x5b\xb3\x80\
+\xd9\x0c\x84\x02\x19\x58\x1c\x14\x8b\x85\xb2\x82\x95\x5e\xe4\x66\
+\x0b\x8e\x31\xf8\xc3\x46\xcb\x2d\x81\x15\xdc\xa8\xc2\x1c\x1b\xb7\
+\x6a\x69\x91\xf2\xee\xbc\x87\xaf\x0c\xdc\xb8\x0d\x61\xd9\xb2\x93\
+\x3c\xed\x97\xf3\x7d\xfd\xde\xe7\xbc\xef\xf3\x5e\x4a\x00\x80\xfc\
+\x93\x20\xff\x0a\x02\x74\x09\x28\x44\x14\xd9\x14\x71\x14\x01\x2b\
+\x46\x80\xae\xdd\x64\xdd\xc6\x66\x22\x4c\xf8\x95\xc4\x8b\x47\xc8\
+\xa1\xd3\xf7\xc8\x8e\x97\x3b\x38\x32\x61\x2b\x41\x20\x85\x9c\xbe\
+\x30\x48\x2e\xdd\x80\x19\x40\x32\xab\x79\x4d\xf4\xbe\xfb\x72\x13\
+\x68\x64\x06\x91\x04\x5e\xa3\x51\xf4\x06\xee\x85\x47\xf5\xd0\xbd\
+\x83\xcb\x4d\x20\x9b\x9d\xf6\x40\x74\x2f\xbd\x16\x32\x3d\x20\x89\
+\x3f\x48\xa5\x2c\x1b\x01\x8c\x31\x79\xc1\xbb\x9d\x88\x4b\xc6\xd7\
+\xc6\x26\x0e\xa0\x10\xb9\xfd\x42\xfe\xc5\x2b\x36\x46\x8c\x12\x5c\
+\x4e\x02\x93\xa7\xa7\xa7\x0d\xcc\xd3\x39\xb9\x98\x63\x36\x14\x0a\
+\xd2\xe4\xa3\x2b\x41\x20\x8c\x29\x9e\x2a\xdf\x37\x47\xeb\xdc\x7b\
+\xb5\xcc\x89\x9e\x40\x44\x96\x54\x83\x2b\x2c\x0b\x36\x46\x48\x08\
+\x13\xf5\x64\x2a\x7b\x2e\x54\x03\x01\xf8\x03\x37\xbf\xc0\x0e\x34\
+\x2a\x54\xdf\x62\x88\x52\xd5\x2c\x58\x03\x74\x1d\x16\x08\x04\x7a\
+\x45\x55\xf5\xc8\xa0\x6d\x74\xc2\xd4\x73\xf7\x21\xbe\x73\x51\x95\
+\x90\xae\x8f\xd0\x13\xcf\xe5\x94\x83\x87\xb4\x02\x9e\xcc\x2e\x03\
+\xd4\x06\xdd\xaf\x99\xcb\xb0\xaf\xaf\xaf\x3e\xbf\xd2\x60\xb5\xdb\
+\xed\x80\xf8\x79\xe4\x3e\xc4\x5e\xab\xb4\xb9\x88\x2f\x86\x80\x27\
+\xd3\xc0\x67\xf9\x8e\x19\xf5\x60\xd7\x5e\x33\xba\x76\xda\x73\xee\
+\x68\xd8\xc7\xc7\x47\x9f\xab\xab\xb0\x0e\x0f\x0d\xc1\x10\x87\xb2\
+\xf6\x2e\xe7\x96\x37\xf7\x77\x73\x61\xd8\xbd\xe8\x5e\x80\x2f\x66\
+\x9a\xa0\x86\xdf\xa9\x36\x42\xf7\xf0\x03\xd8\x19\x9f\xd4\xcf\xa5\
+\xe7\x1a\x8a\x98\x2d\x7e\xfe\x6d\x97\x54\x1a\x6b\x5f\x5f\x1f\xb8\
+\xd0\xd1\x73\x07\x62\x72\x15\x56\x4e\xc4\x87\x97\xd4\x8c\x30\x14\
+\xe9\x15\xb7\x1e\x38\x1c\x0e\x40\xa4\xd6\x19\x31\x9e\x85\x9b\x05\
+\x7e\x6d\xa9\x25\x1a\x5b\x97\xd9\x0c\xe6\x2e\x0a\xf3\x24\x14\xdf\
+\x36\x8e\x7b\xbd\x1e\xd1\xcd\x42\xc8\x09\x6f\xa9\x04\x3c\xd1\xbd\
+\x56\xab\x15\x10\x77\x7f\x1b\x84\xf3\x92\x5c\xbb\x52\xa9\x84\xfa\
+\xfa\x7a\x30\x99\x4c\x0c\x75\xdf\x35\xc1\x51\xb1\x64\x18\xc9\x51\
+\x44\x3e\xb6\x76\xcc\xb4\x40\x4f\x93\x5f\x7e\xd3\xd6\xdf\xdf\x0f\
+\x32\x99\x0c\x44\x22\x11\xa8\x54\x2a\x90\x4a\xa5\xa0\xd1\x68\x20\
+\x4b\x5b\x39\xbe\xe9\x95\xe0\x1f\xb8\x53\xaf\x79\x2c\xf3\x00\x97\
+\x8e\x22\x9e\xc7\x86\xe6\x53\x29\x19\xf6\x82\x82\x02\xe6\xe2\xa0\
+\xa0\x20\xe0\xf1\x78\x60\xb1\x58\x40\x5b\x5e\x01\xfb\xcf\x26\x0c\
+\x2d\xa6\x53\xce\x67\x94\xcf\x09\x4c\x83\xe2\x5b\x7b\xe6\xc2\x60\
+\x9a\xb2\x14\x14\x0a\x05\x88\xc5\x62\xc8\xcc\xcc\x84\xa2\xa2\x22\
+\x50\xab\xd5\xd0\xd9\xd9\xc9\x60\xec\xfe\xc9\xb9\xc9\xdb\xa7\x75\
+\x2e\xb7\xcf\x4b\x80\xae\xb7\xd8\x29\x70\x0e\xc0\x6a\x97\xac\x78\
+\x88\xca\x7f\x82\xe2\x29\x89\x0e\x3e\x97\x2b\x21\x5b\x96\x0f\x07\
+\x63\xe3\x47\x84\x1f\x26\xd8\x92\x72\x64\x8e\x6f\x1a\xbf\x07\xa3\
+\xd1\x08\x2d\xad\x2d\xf0\xcb\xc0\x20\x1c\x38\xf1\xbe\x05\xb3\x62\
+\xc1\x04\x5c\x69\x84\x85\x85\x84\x46\xdc\x26\xe7\x32\xac\x2c\xcf\
+\x33\xb5\x13\xec\x3b\xe3\xba\xd3\x33\xaf\x82\xe5\xfe\x7a\x89\x06\
+\x9e\xde\xfc\x62\x1b\xf7\x3c\x92\x8d\x7b\x66\xab\x4f\x5b\xca\x35\
+\xed\x58\x43\x43\x3d\x34\x34\x34\x80\xa5\xb7\x17\x32\x14\xc5\xc3\
+\xf3\xe9\xc0\x65\x3c\x92\xe5\x28\x9e\x36\x5d\xe5\x9c\x2a\x32\x78\
+\x7d\xf4\x83\x2e\x5a\x6c\x12\x31\x0c\x1b\x25\xea\x71\xf7\x2f\xcb\
+\x27\xef\x05\x87\x5f\xfe\xd3\xe4\x44\x0b\x4c\x68\xf4\xc9\x3e\x75\
+\x95\x1e\x0c\x06\x03\xb4\xb7\xb7\xc3\xd7\xc6\x96\x31\xae\x81\x09\
+\x66\xf1\x36\x6d\x38\x68\x3c\x49\x3a\x3a\x65\xf8\x62\x81\x83\x44\
+\xbd\x57\x43\xb6\x0a\x5e\x9b\x2a\xc3\x94\x5c\xb0\x42\x0f\xab\x24\
+\xb4\x04\x9f\x4a\xaa\x9b\x43\x37\x31\x28\xd4\x4f\xf2\x0a\xc7\x74\
+\x3a\x1d\xd4\xd6\xd6\x82\xc9\x7c\xdb\xb9\x61\x9b\xf7\x5f\xea\x62\
+\xb2\xe5\x7e\x9c\x75\x1f\x0d\xf3\xb2\xd4\x4e\xf2\xf6\xb1\xeb\x2e\
+\xb6\xae\x94\xc3\x90\x6c\x97\x55\xc1\x4b\x57\xab\x80\x9c\x4d\x6e\
+\x5a\xd0\x1c\x49\xbd\xb1\xe7\x88\xb0\xef\xca\x57\xc5\x50\x5a\x5a\
+\x0a\x1d\x3f\xf6\x4c\x04\x06\x87\x74\x3c\xaa\x0b\xc2\x84\x46\x8d\
+\x07\xc8\x6f\x02\xd9\xf9\xaa\x7e\x9a\xf1\x30\x46\x8e\x36\x20\xaf\
+\xbc\x4a\x78\x43\x69\x00\x92\x28\x1d\x98\xcd\x95\xb3\x79\xc3\x7d\
+\x3d\xbf\xf9\x44\x6a\xa6\x5d\x2e\x97\x43\x53\x4b\x2b\x44\x1c\x7b\
+\xf7\xce\xf4\x14\x25\xae\xf1\x8a\xf5\x77\x9c\xf5\x70\x02\xc2\xd9\
+\x0f\x89\xd1\x81\x03\x4f\x8e\xf7\xdc\xd2\x69\xe7\xf3\xdf\x75\xfc\
+\x6f\x14\x2e\x36\xd2\xef\xd8\x17\x69\x49\xbe\x2c\x9d\xc8\xd3\x96\
+\x3b\xa7\x0f\x31\x8c\x25\xc6\xdf\x9f\xba\x77\x5f\x71\x35\xa0\x41\
+\x6c\xb5\x08\x8c\xf9\x94\xf1\xe0\xf0\x33\x4b\x9a\x7c\x68\x13\x5a\
+\xbd\xce\xa3\xd9\x6b\x4f\x48\xf7\x0c\x0f\xb0\x0f\xfe\xf3\x87\xc8\
+\xf9\x2f\xee\xb9\x49\x6e\x00\xf6\x7b\x3e\xed\xf7\x08\x1e\x2a\x3e\
+\x5d\xe5\x58\xaa\xf1\x47\x5a\xf5\xb6\x59\x0b\x11\x1d\xb3\x43\xc9\
+\x91\x38\x09\x39\xf9\xa9\x96\x21\xfa\x5c\x1a\x0d\xcf\xb3\xff\xff\
+\x37\xfc\x4f\x13\xf8\x1d\xe7\x87\x19\xb9\x44\xc3\x01\xcf\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x3a\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\xcc\x49\x44\x41\x54\x58\xc3\xb5\
+\x97\x5d\x4c\x5b\x65\x1c\xc6\x77\x6f\xbc\xd9\xe5\x12\x49\x20\x71\
+\xd7\x26\xe3\x4e\x13\xb8\x70\xd1\x85\x44\xbd\x50\xe3\x10\x18\xe5\
+\x2b\x2e\x26\x4a\x04\x27\x86\xaa\x8b\x99\xe0\xd0\xa2\x6c\x19\x86\
+\x39\x17\xdc\x1a\x16\x98\x80\x40\x6c\xa6\x43\xca\x20\x2b\x83\x1e\
+\x28\xcc\xda\xd1\x96\xd2\xd2\x4a\x7b\xfa\x01\xa5\xd0\xef\x16\x1e\
+\xdf\xff\xdb\x1d\xc7\xcc\x04\x2a\x87\x93\x3c\x39\x6f\x21\x9c\xe7\
+\xf7\x3c\xef\x47\x0f\x87\x00\x1c\xca\x46\xcf\xbd\xfa\xe9\xbb\x4c\
+\x5a\x26\x61\x0f\x6a\x60\xca\xd9\xe9\x79\xd9\x9a\x3f\x5d\x50\xf2\
+\xa5\xc1\xe9\x8f\xa7\x57\xc3\x40\x30\x02\x84\xa2\x19\xad\xc7\x32\
+\x8a\x27\x81\x58\x22\x73\xbf\x79\x6b\xda\x4b\x10\x72\x02\x1c\x7b\
+\xe7\xac\xda\x1c\xd8\xc8\x98\x12\x40\x84\x99\x85\xe3\x19\x91\x31\
+\x29\x1a\x4b\x61\x25\x94\x44\x38\x9a\x42\x73\x87\xc6\xbe\x13\xc4\
+\xff\x02\x90\x12\x93\x79\x24\xf1\xc8\x58\x92\xcf\x1f\x84\x5d\x8c\
+\xc2\xe5\x09\x22\x12\x4b\xa3\xf4\xc3\xef\x4d\x34\x75\x59\x01\xb0\
+\xeb\xd8\x36\xd5\x90\x9e\x3a\xfc\xcc\xb9\xe7\x5f\x2e\x11\x3f\x56\
+\x9e\x45\x45\x55\x0d\x2a\x99\xde\xaf\xad\xc3\x9d\xb1\x89\xc7\x00\
+\xac\xb6\x25\xfc\xb9\xe8\x87\x6b\x15\x58\xf6\x04\x10\x08\xc6\xd2\
+\xaf\x9c\xbe\x70\x9f\x41\x1c\xd9\x15\x80\x5d\x87\x99\x1a\x8a\x8a\
+\x8a\xcc\x92\x5a\x5b\x5b\xdd\xa4\xaf\x55\xad\xfe\xaf\x54\xdf\xa6\
+\x06\x06\x06\x31\x39\x35\x85\xd9\xb9\x39\xe8\x26\x26\x50\x50\x50\
+\x80\x21\xcd\x6f\x7c\xde\x49\xa6\xf9\x05\xcc\x98\x5c\x1c\xc0\xe1\
+\x4f\x41\xf4\x85\xf0\x43\xaf\xce\xcd\x00\x6a\xf6\x02\x50\x43\x66\
+\xd8\xe5\x8a\xc7\xe3\xf0\x7a\xbd\x48\xa7\xd3\x98\x9c\x9c\x44\x65\
+\x65\x35\x66\x67\x8d\xbc\x81\x07\x66\x1b\x74\xd3\x16\x0e\x40\x32\
+\x2d\x78\xf0\xdd\x8d\x51\x8f\xac\x00\xe1\x70\x18\x46\xa3\x91\x8f\
+\x53\xa9\x14\x7e\xea\xed\x45\xe3\x27\x9f\x61\x86\x41\x38\x96\xdc\
+\x50\x77\x75\xe3\x4c\x43\x23\xce\x35\x9d\xc7\xed\x91\x71\x5c\xbc\
+\x3e\x2c\x2f\xc0\xc6\xc6\x06\xf4\x7a\xfd\x63\x40\x7d\x7d\xfd\x50\
+\x32\x88\xd0\x46\x1c\x66\x9b\x0b\x82\xc1\x88\xa9\x19\x13\xac\x0e\
+\x11\x97\xba\x64\x6e\x80\x00\xa6\xd8\x3a\xd8\x7e\x45\x22\x11\x94\
+\x2b\x2a\x30\xae\x13\x40\xe7\x04\x6d\x57\xda\xaa\x34\xbe\x7c\x53\
+\xe6\x35\x40\x66\x3a\x9d\x0e\xc3\xc3\xc3\xe8\x65\xf5\xf7\xf7\xf7\
+\x43\xab\xd5\xa2\xaa\xba\x06\x63\x77\xf5\x90\x0e\x2a\x77\x90\xed\
+\x04\xb6\x0e\xda\xbb\x65\x06\xa0\x79\xb7\xdb\xed\x18\x1a\x1a\x42\
+\x67\x67\x27\x7a\x7a\x7a\x38\x50\x49\x69\x19\x6e\x69\xf5\x10\xd7\
+\x00\x6f\x08\xb0\xf9\x00\x67\x00\xb8\xd0\x25\x33\xc0\xd6\xd6\x16\
+\xdf\x09\x81\x40\x00\xa2\x28\xc2\xef\xf7\x63\x6d\x6d\x0d\xa7\x14\
+\x95\xd0\xfc\xae\xe7\xa9\xc9\x7c\xc1\x0b\x98\x3d\x40\x9b\xdc\x00\
+\xdb\x41\x36\x37\x37\xf9\x76\xa4\x56\x14\x15\xd5\xe8\xfb\x55\xe0\
+\xa9\x1d\x81\x47\x00\xe7\x3b\x0f\x00\x80\xcc\x25\x80\x24\x33\x4f\
+\x24\x12\x28\x2b\xaf\xe2\x00\x7f\xb8\x00\x8b\x98\x01\xa0\x36\x5a\
+\xd5\x07\x30\x05\xff\x98\x27\x93\x3c\x3d\x4d\x49\xc9\xa9\x4a\x0e\
+\xa0\xb7\xb3\x03\x89\x3d\xc5\xf8\x17\x30\xb1\x00\x7c\x71\xf5\x00\
+\x00\xa4\xea\xc9\x98\x14\x8b\xc5\x50\xa6\xa8\x82\x7a\x48\xc0\x98\
+\x19\xb8\x6b\x05\xe6\x9c\x99\xfb\xe7\x57\x64\x04\x90\xd2\x53\x6a\
+\x02\x88\x46\xa3\xdc\x3c\x14\x0a\xa1\xb8\xb4\x02\xd7\x06\x05\xdc\
+\x66\x87\xe4\xa0\x01\x1c\x64\xc4\x04\x28\x3b\x64\x06\x48\x3d\x9c\
+\x73\x12\x99\xd3\xb9\x40\x20\xc5\x65\x55\xb8\xd8\x2d\xa0\x7f\x3a\
+\x63\xae\x7d\x90\x69\xe0\xa3\x76\x99\x00\xfe\x5d\x3d\xa5\x26\xad\
+\xae\xae\x72\x88\xb7\x4a\x2a\x70\xb9\x57\xc0\x3d\x1b\xb8\x7e\x9e\
+\x01\xee\xcc\x03\x67\x2e\xed\x13\x40\xaa\x9d\x44\x8b\x8e\x92\xd3\
+\x71\x4c\xdf\x01\x2b\x2b\x2b\x58\x5f\x5f\xe7\x10\x27\x59\x03\xdf\
+\x74\x09\x50\x4f\x00\xbf\xcc\x65\x1a\xb8\x32\x06\x34\xec\xa7\x01\
+\xc9\x58\xda\xeb\x64\x4e\x69\x29\x39\x1d\x44\x04\x40\xf5\xd3\xcf\
+\xde\x7c\x5b\x81\x96\xeb\x02\x4f\x7e\x75\x1c\xb8\x71\x0f\xf8\x71\
+\x2c\x9e\x7e\xbd\x4e\x6d\xa6\x37\xaa\xac\x00\x9e\x64\x2c\x6d\x37\
+\x32\x25\x00\xd1\x23\xf2\xe4\x12\xcc\x1b\x27\x15\x68\xef\x11\xa0\
+\xbc\x66\x5b\x7f\x4f\x35\xe2\x3c\x71\x9a\xbf\x8e\x69\xf7\xfc\x4a\
+\x26\x01\x90\xa9\x24\x69\xb5\x53\x42\x32\x0f\x06\x83\x70\xb9\x5c\
+\xdc\x90\x5e\x4a\xe8\xb3\xc7\xe3\x81\xdb\xed\xc6\xf1\x13\xaf\x25\
+\x9f\x7d\xa1\x9c\x4c\x3b\x98\x8a\x99\x8e\x3e\xc9\x78\x47\x00\x95\
+\x4a\xc5\x01\xa4\x15\x2e\xcd\x37\x19\x52\x52\x3a\xf7\x29\xb5\xc3\
+\xe1\xe0\x22\xe3\xc5\xc5\x45\x0e\xf5\xe2\xf1\x97\x5c\xf4\x1e\xb9\
+\x93\xe9\xae\x00\x2d\x2d\x2d\x6e\xe9\x60\xa1\xd4\xd2\x97\x0d\x8d\
+\x97\x97\x97\xe1\xf3\xf9\x60\xb3\xd9\xf8\x7d\x69\x69\x89\x43\x10\
+\x00\x8d\x0b\x0b\x0b\xcd\xb2\x00\xd0\xa2\x92\x52\x93\x11\x8d\xe9\
+\x4e\xdf\x78\x54\x3b\x35\x60\xb5\x5a\x79\xf5\xd4\x0a\xfd\xce\x60\
+\x30\x24\xf2\xf2\xf2\xee\xb3\x67\x1c\xd9\x17\x40\x53\x53\x93\x5b\
+\x9a\x67\x4a\x4f\x22\x13\xaa\x9a\xc6\x16\x8b\x99\x37\x40\x9f\x47\
+\x47\x47\x23\x6d\x6d\x6d\xde\xfc\xfc\x7c\x13\xfb\xdb\x41\xa6\xb2\
+\xbd\x9a\xff\x27\x40\x73\x73\x33\x9f\x02\x4a\x47\x10\x54\x3f\x55\
+\x3f\x3f\x3f\xcf\xeb\xd6\x68\x34\x91\xba\xba\x3a\xe7\xc3\xb4\x5d\
+\x4c\x1f\x30\x1d\xcd\xc6\x78\x47\x00\xa5\x52\xe9\x76\x3a\x9d\xbc\
+\x62\x4a\x4a\x6f\x3e\x94\xb4\xbe\xbe\xde\x99\x93\x93\x23\x99\x16\
+\x67\x53\x75\x56\x00\x8d\x8d\x8d\x6e\x8b\xc5\x82\x81\x81\x81\x48\
+\x6d\x6d\xad\x33\x37\x37\x57\x56\xd3\xdd\x00\xf8\x7f\x46\x4c\xc2\
+\x41\x99\x6e\xd7\xdf\x43\x39\x56\x18\x85\x70\xc8\x04\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x06\x6d\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x06\x34\x49\x44\x41\x54\x78\x5e\xad\x97\x5b\x6c\x54\xc7\
+\x1d\xc6\x7f\x73\xce\xd9\x8b\xbd\xf6\xfa\x16\xa0\xbe\x00\x0e\xb2\
+\x69\x63\x24\x42\x4a\x21\x22\xa1\x2d\x95\x62\xa5\x2f\xee\x4b\x68\
+\x2b\x95\xa6\x55\xa5\xc6\x60\x55\xaa\xda\xb4\xaa\xfa\x56\x09\x55\
+\xca\x03\x94\x27\xda\x07\x84\x14\x29\xad\xc4\x8b\xa5\x52\x83\x79\
+\x08\xc5\x18\x39\x0e\x69\xd3\x84\x9a\x9b\x63\x6a\xec\xb2\x04\x1b\
+\x3b\xbb\xf6\x7a\x8f\xbd\xbb\xde\xb3\x67\xa6\xc3\x68\x85\xe5\x72\
+\x6c\x88\xc9\x27\x7d\xfa\x9f\x9d\x87\xfd\x7e\xf3\x9f\x99\x73\x11\
+\x4a\x29\x82\x24\x84\x78\x05\x78\x9e\xc7\x6b\x48\x29\xf5\x77\xd6\
+\x28\x27\x20\xb8\x43\xbb\x01\x68\x97\x52\xbe\xc6\x63\x64\x59\xd6\
+\x07\x1a\xf6\xbb\x40\xb7\x06\x39\xff\x14\x00\x26\xfc\xb7\xed\xf5\
+\xe2\x60\x5d\x44\x44\x6e\xce\x89\x8a\x2b\x57\xae\x50\x5d\x53\x8d\
+\x40\x00\xa0\x50\x08\x65\x28\x41\x29\x66\xd3\x69\x5e\xa9\x17\x2f\
+\xbc\xb4\x4e\x6c\x3b\xf1\x1f\xb9\x47\x83\x7c\x5b\x43\x4c\x3c\x4d\
+\x07\xf6\xff\x60\x8b\xdd\x2c\x25\xf8\x4a\x32\x3c\x3c\x4c\x65\x65\
+\x25\x2b\xc9\x75\x5d\x1e\xc0\x6e\xa9\xb0\x22\x1b\xa2\x2a\x72\x3f\
+\xa7\xea\x81\xb5\x03\x08\x2d\x05\x48\xa1\x0d\xf4\x5d\xbc\x48\x2e\
+\x97\xc3\x2f\x16\x51\x4a\x91\xcf\xe7\x59\x5c\x5c\xa4\x50\x28\x50\
+\xd4\x63\xb5\xb5\xb5\x94\x01\x58\x80\xf8\x82\xf6\x80\x01\x00\x36\
+\x44\x05\x1f\x0f\xbc\x4b\x3e\x3b\x8f\x85\x44\x95\x32\xe2\xb6\xc4\
+\xb6\x04\x21\x21\x70\x3e\x53\x6c\x8c\x3b\x80\x44\x2a\x04\xf0\x9c\
+\x10\x02\xe0\xcb\x40\x05\x50\x0f\x34\x60\xc4\x48\x69\x9f\x24\x02\
+\x01\x4e\x9c\x38\x21\x00\x81\x05\xd2\x87\x96\x96\x67\x09\x65\x6d\
+\x14\xe5\x28\xa5\xb4\x41\x08\x58\x57\x19\x25\xe2\xd8\x44\x42\x16\
+\xc3\x13\x73\x5c\xbc\x3d\x41\xf7\x58\x8e\x5c\x24\xbe\xa9\xbd\x7d\
+\xf7\xef\x2d\xcb\x5a\xdc\xb1\x63\x47\x59\x55\x55\x95\xd3\xd8\xd8\
+\x18\x7e\xe0\x86\x86\x86\xd0\xa5\x4b\x97\xdc\xae\xae\xae\x08\xf0\
+\xd6\xaa\x1d\x00\x13\x44\x55\x2c\xc2\x73\xd5\x31\xf2\x9e\x4f\xa1\
+\x28\x91\x4a\x61\x09\x41\xd8\xb1\x88\x86\x6c\xe6\x72\x05\x12\xa2\
+\x8e\x3f\x9f\xff\x2b\x0d\x4d\x1b\x01\x22\xc0\x66\x96\x84\xef\xfb\
+\x78\x9e\x47\x75\x75\xb5\x9e\x50\x4b\xf4\xea\xd5\xab\x87\x84\x10\
+\x28\xa5\xde\x5a\x11\xc0\xb2\x41\x00\xb6\x2d\x90\xda\xb6\x14\x38\
+\x08\xa4\x12\x58\xc2\x8c\x1b\x8f\x4c\xb9\xec\x7b\xf5\x3b\xd4\x37\
+\x36\x11\x7c\x2f\xc1\x84\x67\x32\x19\xca\xcb\xcb\xcd\x66\x3e\x76\
+\xec\xd8\x26\xbd\x7f\x0e\x2e\x41\x2c\x01\xd0\xd9\xd9\xa9\x0e\x1d\
+\x3a\xa4\x6c\x21\x08\x59\x10\xb6\x2d\x1c\xc7\xc6\x42\x50\xb4\xcd\
+\x1a\x1b\x00\xc7\xb2\x88\x38\x96\xae\x02\x60\x59\x78\x10\xc0\xdc\
+\xdc\x1c\x35\x35\x35\x06\x20\x1a\x8d\x72\xe4\xc8\x91\xcd\xc0\x03\
+\x88\x1b\x1a\xa2\xc7\x62\xb9\xb0\x6d\x74\x30\x66\x8d\xcb\x23\x36\
+\xb1\xa8\xa3\xc7\x2c\x32\x8b\x1e\x93\x99\x1c\x63\xa9\x79\xee\xcc\
+\x2e\xe8\xdf\x45\x72\xf9\x3c\xab\xc8\x2c\x41\x36\x9b\x35\xa7\x66\
+\xe9\xff\x6d\x0e\x1c\x38\xb0\x1e\xe8\x00\x58\x06\xa0\xb4\x74\x16\
+\x8e\x0d\xe1\x90\xc0\x53\x8a\xb1\xa4\xcb\x8d\x8c\x83\xd3\xb2\x97\
+\xa6\x7d\xaf\xb3\xb5\xe3\x17\xac\xdb\xfb\x3a\x0d\x2f\xb4\x73\xfb\
+\xce\x24\xfd\xfd\xfd\x24\x93\x49\x94\x52\xe6\xfa\xf8\xf1\xe3\xe8\
+\xba\xac\x33\xe7\xce\x9d\xe3\xe8\xd1\xa3\x1c\x3e\x7c\x98\xde\xde\
+\x5e\x12\x89\x84\x04\x2c\xa1\x15\xdc\x01\xed\xff\xce\xe6\xf8\xe7\
+\x94\x4f\x6b\xc7\xcf\xf8\xe6\x2f\xdf\x26\xf6\xf5\x37\x99\x7c\xa6\
+\x83\x6b\xfe\x2e\xae\xf1\x2d\x64\x6b\x17\xad\x7b\x7f\x4e\x5e\x56\
+\x73\xfa\x6f\x67\xd1\x77\x4d\xee\xdc\x9d\xe2\x1b\xaf\x76\x72\xfd\
+\xfa\x75\x03\xa0\x67\x6b\xd6\x3f\x16\x8b\x99\xeb\x78\x3c\x8e\xe3\
+\x38\x25\x38\x04\xc0\x23\x00\x96\x25\x98\xca\x41\x3a\xde\xca\xfe\
+\xdf\xbd\x4d\xd5\xae\xd7\x28\x84\x62\x08\xdb\x42\x59\x82\x6c\x41\
+\x72\x7f\x66\x91\x4f\xee\x66\x18\xb8\xea\x72\xfa\x1f\x61\x64\xd5\
+\x5e\xae\x8f\xdc\x67\x32\xd7\xc6\x85\x0f\xee\x9b\x00\xed\x87\xa1\
+\xcd\xcd\xcd\xb4\xb5\xb5\x19\x37\x35\x35\xa1\xa1\x14\x20\x83\x1f\
+\x46\x16\xdc\x71\x15\xdf\xff\xe9\x6f\xa8\x6c\xd8\x48\xe2\xec\x3b\
+\x4c\x8f\x5e\xc3\x89\x94\xb1\xb5\x79\x07\x9b\x5b\xb6\xf3\x49\x79\
+\x25\x63\x09\x97\xcf\x66\xf2\xdc\x9d\xce\x32\xa1\xed\x88\x0d\x4c\
+\x27\xe7\xd8\xb7\x2b\xca\xfa\x25\x00\x33\x7b\x3d\x6b\xea\xea\xea\
+\x00\xcc\x75\x2a\x95\x32\x00\x4a\x2b\x10\xa0\xb9\x5a\x70\xe1\x9d\
+\x63\x28\x2c\xca\xe6\xc6\xd9\x10\x8f\x52\x94\x92\x7b\xc3\x7d\x24\
+\x65\x05\xdb\xda\x7f\x4c\x4d\xdb\xcb\x7c\x3c\x9c\x66\xd2\x5f\xc0\
+\xcd\x78\x2c\xcc\x6b\x2f\x78\x20\x00\xb5\x74\x3a\x42\xa1\x90\x09\
+\x2d\xdd\xea\x1f\x8e\x01\x2a\xf8\x3e\x60\xc1\xc6\xb8\xa0\x50\x1c\
+\x23\x1c\x8b\x53\xb7\xa5\x96\x92\x78\x76\x7d\x05\xe9\xac\xc7\x68\
+\xff\x9f\x98\xae\xbc\x4c\xcb\xf6\x83\xb8\x0b\x61\xbc\x82\xa4\x58\
+\x94\x78\xda\x21\xc7\x42\x2d\xaa\x80\xe3\x69\xa0\x96\xd5\x15\x01\
+\x00\xd6\xc7\x43\x84\xca\x23\xfc\xbf\x6a\x63\x21\x9e\xa9\x0c\x73\
+\xe1\xdf\x83\xec\xd9\xf9\x13\xca\xa3\x0e\xb9\x32\x47\x03\x28\x03\
+\x61\x6b\x00\x16\x4b\x21\xa5\x1c\x25\x30\x2a\x15\xa4\x5c\x05\x40\
+\x58\xa5\x2a\xcc\xf5\x23\xfa\x70\x6c\x86\xf1\x59\x8f\xef\xfd\xfa\
+\x8f\xdc\xca\xd4\xe0\x44\x5c\xa2\x11\x1b\xcf\x93\x14\x3d\x07\xd3\
+\x01\xa5\x90\x52\xf2\x50\x6a\x59\x01\x56\x05\x10\x08\x4c\x0d\x04\
+\x18\x9d\x76\xf9\xd5\x5f\x86\x18\xbd\xb7\x80\x3d\x93\x67\xd3\xba\
+\x32\xf2\x79\x5f\xbb\x68\xea\xce\xaf\xd4\x70\xf9\xdd\xe0\x25\x00\
+\x9e\x78\x09\x4c\xb8\x10\x3c\xa2\xd6\x2f\x55\xf2\x87\x1f\x3e\xcf\
+\xf5\x4f\x33\x44\x1b\xb7\xb1\xf3\xc5\x97\x59\x12\x5c\x4e\x60\x8e\
+\xdb\x53\x01\x28\xc0\x12\x25\x00\x6d\xd4\x52\x7d\xb1\xb5\x96\xdd\
+\x5b\xe2\x74\xbf\x97\xa5\x6a\xf7\x57\xf9\xd1\x1b\x6f\x10\xa0\xb5\
+\x03\x98\xb5\x37\xd5\xd8\x08\x01\xd2\xcb\x53\x70\x53\x78\xf3\x33\
+\x14\xb3\x69\x0a\x19\x1f\x25\xfd\xd5\x82\xd6\x08\xf0\xf0\x29\xe7\
+\xe3\xe7\x33\x14\xe6\x75\xa8\x0e\xd6\x00\xcb\xf7\x89\x10\xc1\x33\
+\x7d\xfa\xd7\x72\x8c\xb2\x13\x37\x03\xc7\x01\xb2\x1e\xfe\xad\x94\
+\xcc\x6f\xf7\x44\x54\x03\xd8\x5f\x70\x07\x08\x92\x09\xfd\xd7\x3d\
+\x3f\xfd\x7e\x42\xa6\xcf\xdf\xf6\xef\x02\xee\x76\x3b\xfc\x92\x06\
+\xa8\xe3\x73\xca\x75\x5d\x1f\x70\x57\xed\x00\x40\x32\xab\x0a\x1f\
+\x7e\x2a\xd3\xbd\xb7\xfc\xd4\xcd\x69\x39\x05\xf4\x03\x97\x74\x68\
+\xbf\x10\xa2\xd3\xb6\xed\xaf\x7d\x9e\x25\x58\x58\x58\xf0\x07\x06\
+\x06\xd2\x27\x4f\x9e\x9c\x06\xba\x83\x00\x3e\x1a\x49\xca\xad\xe3\
+\xb3\x2a\xd7\x3b\xe2\xa7\x6e\x4c\xcb\xd1\x52\xe8\x59\x1d\x74\x8b\
+\x00\x3d\x09\xc0\xd0\xd0\x90\xdb\xd3\xd3\x93\xd2\x4e\xcf\xce\xce\
+\x9e\x2e\xbd\x1d\xdf\x08\x02\xe8\xee\xea\x29\x00\x8c\x04\x84\x06\
+\x85\xaf\x08\x30\x35\x35\x55\xd0\x2f\x22\xa9\x53\xa7\x4e\x25\xc7\
+\xc7\xc7\x2f\x03\x67\x81\x7e\x1d\xec\xae\xb8\x09\x4b\xdf\x76\xda\
+\x4f\x26\x85\x01\x40\x08\x40\x61\x5a\xfc\xde\xe0\x60\xba\xbb\xbb\
+\x3b\xa5\xdf\x8a\xcc\x24\xd0\x5e\xed\x73\xcd\x61\xed\x9a\x77\x33\
+\x6e\x11\x60\x70\xf0\xfd\x74\x5f\x5f\x5f\xfa\xcc\x99\x33\xa6\xc5\
+\xa5\xd0\x8f\x78\x02\x89\xb5\x9e\x63\x21\x44\x18\x78\x13\xd8\x4f\
+\x69\x73\x06\xb4\xf8\xb1\xfa\x1f\xbd\xfa\x2a\x5f\xf2\xd8\x15\x9d\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\x54\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x02\xe6\x49\x44\x41\x54\x58\xc3\xd5\
+\x97\xcd\x4e\x13\x61\x14\x86\xeb\x35\x94\x95\x7b\x71\xe1\xd2\xc4\
+\xe0\x05\xb8\xe2\x0e\x5c\xb8\xf4\x02\x5c\xb1\x30\xea\x05\x18\x96\
+\x26\x62\x58\xb8\xb0\x91\x58\x20\xd1\x9d\xbf\x89\xa4\x14\xb1\x52\
+\xa4\x48\x45\x94\xfe\xd0\x02\x43\xff\xa6\x9d\x19\xa6\x65\x80\xe3\
+\x79\x7b\xfa\x85\x51\x4a\x82\xc9\x21\x86\x49\xde\x9c\x33\xa7\xf3\
+\xcd\xfb\x9c\xf3\x4d\x9b\x4e\x84\x88\x22\xff\x53\x91\x73\x01\xc0\
+\xc7\xd5\x90\x6e\xff\xa5\xfb\xac\xc7\x3d\x3d\x64\x0d\xa9\x02\xf0\
+\x31\x32\x3c\x3c\xbc\x6a\x34\x3a\x3a\xba\x19\x56\x3c\x1e\xaf\x26\
+\x93\xc9\x56\x3a\x9d\x76\x13\x89\x44\x6b\x60\x60\x20\xcd\x6b\x6e\
+\x68\x02\xa4\x38\xd2\xe1\xe1\x71\x99\xba\xef\xb7\xc9\xb2\x2c\xda\
+\xdf\xdf\x27\x86\xf1\x78\xcd\x18\xeb\x8a\x1a\x40\x3f\xf3\xb0\x1c\
+\xc7\xa5\x4c\x66\xb9\x0b\x14\x04\x01\xc5\x62\xb1\x3a\xaf\x7b\x70\
+\x1a\x88\x53\x01\x1c\x1c\x10\x77\x77\xb2\x6c\xdb\xa1\xf9\xf9\xcf\
+\x64\x0e\xd7\x75\xe9\xf9\xc4\x44\x17\x42\x05\x00\x26\x7b\xc1\xc9\
+\xaa\x37\x1c\x4a\xce\xcd\x53\xf8\x70\x5d\x0f\x8b\x17\x54\x00\x82\
+\x10\x40\x67\x4f\x14\xce\xed\xa6\x47\x1f\x67\x66\xe9\xf5\x9b\xb7\
+\x14\x9f\x9c\xa4\xa9\xa9\x69\x7a\xf7\xfe\x03\x45\xa3\xd1\x65\x5e\
+\x7f\x41\x05\xc0\xef\x10\xed\xb6\x25\x86\x85\x9a\xe3\x05\x94\x5d\
+\xcd\xd1\xe4\xf4\x2b\x7a\x32\xfe\x94\x9e\xc5\x5e\xd0\x4c\x62\x0e\
+\x8b\x17\x55\x00\xda\x81\x18\xf5\x13\x20\x3c\xff\x90\x6a\xcd\x36\
+\x15\x37\xab\x94\x2f\x6e\x53\x89\x63\x8d\xb7\x85\xd7\x7e\x51\x01\
+\xf0\x79\xcc\xcd\x5d\x1e\xb5\xc7\x7b\xdb\xee\x9f\x3b\xbe\xe4\x88\
+\x5d\xb8\xbd\xee\xe2\x94\xca\x33\xe0\x75\xe4\xc6\x75\x57\x62\xd8\
+\x10\x39\xea\xe6\x33\x44\xd4\x01\xa7\x06\xe0\xf4\x3a\xad\x39\x22\
+\x98\x98\x68\x72\x80\x98\x6b\x50\x53\x9d\x00\x00\x2a\x2d\xb9\x31\
+\xe2\x4e\x53\x8c\x10\x0d\x04\xf2\x6d\xfb\x28\xb6\x7c\x45\x00\x9b\
+\x3b\xdb\x6a\xfc\x69\x8e\x3c\x6c\x88\x1a\xae\x39\x13\x80\x3a\x8f\
+\xb7\x54\x23\x2a\xd7\xc5\x04\x06\x06\x00\x35\x28\x9c\x17\xab\xbc\
+\x25\xbb\xca\x13\xc0\x4d\x61\x0e\x15\x2a\x72\x6e\xcc\x7e\x5a\x02\
+\x68\x6a\xdd\xad\xf1\x94\x27\x00\x53\xdc\x1c\x71\x6d\x5b\x40\x60\
+\x9a\xab\x1c\x75\x9e\xeb\x81\x41\x15\x47\x11\xc0\x6a\x89\x31\x0c\
+\xd6\x77\x04\x20\x0c\x64\x26\x62\xb6\x69\x75\x8b\xa8\xaa\x09\x50\
+\xb6\xc5\xbc\xd0\x03\xf8\xbe\x29\x63\x87\x29\x60\x0c\x18\x84\x1c\
+\x00\x5b\x4d\x45\x00\x74\x03\x53\x98\xad\x94\xc5\x1c\xe7\x46\xe6\
+\x1c\x00\xc8\x71\x5d\xa9\xa1\x08\x80\xfd\xfc\x56\x12\x73\x33\x01\
+\x08\x35\x18\x42\xe8\xda\x7c\x8e\x29\xa8\x4e\x00\x5b\x00\x03\xc8\
+\x98\x67\x36\x04\x00\x32\xe6\x85\xde\xf8\x17\x0b\xfc\x2c\xd8\x8a\
+\x00\x18\x67\x3a\x4f\xb4\x54\x14\x23\x98\x02\x00\x02\x0c\x3e\xfb\
+\xc5\x53\x28\xf0\x43\xb8\x66\x49\xf7\x6b\xf9\x52\x87\xd7\xbe\x54\
+\x01\xc8\x55\x8f\xba\x4e\xad\x4b\x0e\x90\xaf\x85\xde\xb7\xc2\x92\
+\x3d\x4f\xa6\xb3\xde\xa3\xb1\x71\xeb\xda\xd0\xf5\x15\x98\xb3\x6e\
+\xa9\x00\x6c\x34\xa4\x6b\x18\xff\xe0\x11\x7f\x5a\x17\x53\xd4\x13\
+\x0b\x59\x6f\xe4\xee\xbd\xe2\xa5\xc1\xcb\x4b\x7c\x6d\x8c\x75\x87\
+\x35\xa8\xfa\xb7\x1c\xdd\x65\xd9\x3c\x8f\x1f\x19\xfe\x9e\xcf\x1e\
+\x37\xbd\xc9\xba\x78\x26\x6f\x46\x00\x68\xf2\xff\x81\x99\x94\x9e\
+\xe9\x3f\xbf\x19\x01\x42\xd3\xf4\xfc\xbd\x9c\x9e\xa5\x7e\x03\x51\
+\x6c\x25\xa1\x92\x95\x0a\x77\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x08\
+\x08\xc8\x58\x67\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x06\xc1\x59\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x07\
+\x0a\xc7\x57\x87\
+\x00\x63\
+\x00\x75\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x06\x7c\x5a\x07\
+\x00\x63\
+\x00\x6f\x00\x70\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0a\xa8\xba\x47\
+\x00\x70\
+\x00\x61\x00\x73\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x07\
+\x04\xca\x57\xa7\
+\x00\x6e\
+\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x02\
+\x00\x00\x00\x80\x00\x00\x00\x00\x00\x01\x00\x00\x1d\xa2\
+\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x11\xf3\
+\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x04\xa7\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x17\x31\
+\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xc4\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/mainwindows/menus.py b/examples/mainwindows/menus.py
new file mode 100755
index 0000000..7223701
--- /dev/null
+++ b/examples/mainwindows/menus.py
@@ -0,0 +1,286 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtGui import QKeySequence
+from PyQt5.QtWidgets import (QAction, QActionGroup, QApplication, QFrame,
+        QLabel, QMainWindow, QMenu, QMessageBox, QSizePolicy, QVBoxLayout,
+        QWidget)
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        widget = QWidget()
+        self.setCentralWidget(widget)
+
+        topFiller = QWidget()
+        topFiller.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
+
+        self.infoLabel = QLabel(
+                "<i>Choose a menu option, or right-click to invoke a context menu</i>",
+                alignment=Qt.AlignCenter)
+        self.infoLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken)
+
+        bottomFiller = QWidget()
+        bottomFiller.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
+
+        vbox = QVBoxLayout()
+        vbox.setContentsMargins(5, 5, 5, 5)
+        vbox.addWidget(topFiller)
+        vbox.addWidget(self.infoLabel)
+        vbox.addWidget(bottomFiller)
+        widget.setLayout(vbox)
+
+        self.createActions()
+        self.createMenus()
+
+        message = "A context menu is available by right-clicking"
+        self.statusBar().showMessage(message)
+
+        self.setWindowTitle("Menus")
+        self.setMinimumSize(160,160)
+        self.resize(480,320)
+
+    def contextMenuEvent(self, event):
+        menu = QMenu(self)
+        menu.addAction(self.cutAct)
+        menu.addAction(self.copyAct)
+        menu.addAction(self.pasteAct)
+        menu.exec_(event.globalPos())
+
+    def newFile(self):
+        self.infoLabel.setText("Invoked <b>File|New</b>")
+
+    def open(self):
+        self.infoLabel.setText("Invoked <b>File|Open</b>")
+        	
+    def save(self):
+        self.infoLabel.setText("Invoked <b>File|Save</b>")
+
+    def print_(self):
+        self.infoLabel.setText("Invoked <b>File|Print</b>")
+
+    def undo(self):
+        self.infoLabel.setText("Invoked <b>Edit|Undo</b>")
+
+    def redo(self):
+        self.infoLabel.setText("Invoked <b>Edit|Redo</b>")
+
+    def cut(self):
+        self.infoLabel.setText("Invoked <b>Edit|Cut</b>")
+
+    def copy(self):
+        self.infoLabel.setText("Invoked <b>Edit|Copy</b>")
+
+    def paste(self):
+        self.infoLabel.setText("Invoked <b>Edit|Paste</b>")
+
+    def bold(self):
+        self.infoLabel.setText("Invoked <b>Edit|Format|Bold</b>")
+
+    def italic(self):
+        self.infoLabel.setText("Invoked <b>Edit|Format|Italic</b>")
+
+    def leftAlign(self):
+        self.infoLabel.setText("Invoked <b>Edit|Format|Left Align</b>")
+
+    def rightAlign(self):
+        self.infoLabel.setText("Invoked <b>Edit|Format|Right Align</b>")
+
+    def justify(self):
+        self.infoLabel.setText("Invoked <b>Edit|Format|Justify</b>")
+
+    def center(self):
+        self.infoLabel.setText("Invoked <b>Edit|Format|Center</b>")
+
+    def setLineSpacing(self):
+        self.infoLabel.setText("Invoked <b>Edit|Format|Set Line Spacing</b>")
+
+    def setParagraphSpacing(self):
+        self.infoLabel.setText("Invoked <b>Edit|Format|Set Paragraph Spacing</b>")
+
+    def about(self):
+        self.infoLabel.setText("Invoked <b>Help|About</b>")
+        QMessageBox.about(self, "About Menu",
+                "The <b>Menu</b> example shows how to create menu-bar menus "
+                "and context menus.")
+
+    def aboutQt(self):
+        self.infoLabel.setText("Invoked <b>Help|About Qt</b>")
+
+    def createActions(self):
+        self.newAct = QAction("&New", self, shortcut=QKeySequence.New,
+                statusTip="Create a new file", triggered=self.newFile)
+
+        self.openAct = QAction("&Open...", self, shortcut=QKeySequence.Open,
+                statusTip="Open an existing file", triggered=self.open)
+
+        self.saveAct = QAction("&Save", self, shortcut=QKeySequence.Save,
+                statusTip="Save the document to disk", triggered=self.save)
+
+        self.printAct = QAction("&Print...", self, shortcut=QKeySequence.Print,
+                statusTip="Print the document", triggered=self.print_)
+
+        self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q",
+                statusTip="Exit the application", triggered=self.close)
+
+        self.undoAct = QAction("&Undo", self, shortcut=QKeySequence.Undo,
+                statusTip="Undo the last operation", triggered=self.undo)
+
+        self.redoAct = QAction("&Redo", self, shortcut=QKeySequence.Redo,
+                statusTip="Redo the last operation", triggered=self.redo)
+
+        self.cutAct = QAction("Cu&t", self, shortcut=QKeySequence.Cut,
+                statusTip="Cut the current selection's contents to the clipboard",
+                triggered=self.cut)
+
+        self.copyAct = QAction("&Copy", self, shortcut=QKeySequence.Copy,
+                statusTip="Copy the current selection's contents to the clipboard",
+                triggered=self.copy)
+
+        self.pasteAct = QAction("&Paste", self, shortcut=QKeySequence.Paste,
+                statusTip="Paste the clipboard's contents into the current selection",
+                triggered=self.paste)
+
+        self.boldAct = QAction("&Bold", self, checkable=True,
+                shortcut="Ctrl+B", statusTip="Make the text bold",
+                triggered=self.bold)
+
+        boldFont = self.boldAct.font()
+        boldFont.setBold(True)
+        self.boldAct.setFont(boldFont)
+
+        self.italicAct = QAction("&Italic", self, checkable=True,
+                shortcut="Ctrl+I", statusTip="Make the text italic",
+                triggered=self.italic)
+
+        italicFont = self.italicAct.font()
+        italicFont.setItalic(True)
+        self.italicAct.setFont(italicFont)
+
+        self.setLineSpacingAct = QAction("Set &Line Spacing...", self,
+                statusTip="Change the gap between the lines of a paragraph",
+                triggered=self.setLineSpacing)
+
+        self.setParagraphSpacingAct = QAction("Set &Paragraph Spacing...",
+                self, statusTip="Change the gap between paragraphs",
+                triggered=self.setParagraphSpacing)
+
+        self.aboutAct = QAction("&About", self,
+                statusTip="Show the application's About box",
+                triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                statusTip="Show the Qt library's About box",
+                triggered=self.aboutQt)
+        self.aboutQtAct.triggered.connect(QApplication.instance().aboutQt)
+
+        self.leftAlignAct = QAction("&Left Align", self, checkable=True,
+                shortcut="Ctrl+L", statusTip="Left align the selected text",
+                triggered=self.leftAlign)
+
+        self.rightAlignAct = QAction("&Right Align", self, checkable=True,
+                shortcut="Ctrl+R", statusTip="Right align the selected text",
+                triggered=self.rightAlign)
+
+        self.justifyAct = QAction("&Justify", self, checkable=True,
+                shortcut="Ctrl+J", statusTip="Justify the selected text",
+                triggered=self.justify)
+
+        self.centerAct = QAction("&Center", self, checkable=True,
+                shortcut="Ctrl+C", statusTip="Center the selected text",
+                triggered=self.center)
+
+        self.alignmentGroup = QActionGroup(self)
+        self.alignmentGroup.addAction(self.leftAlignAct)
+        self.alignmentGroup.addAction(self.rightAlignAct)
+        self.alignmentGroup.addAction(self.justifyAct)
+        self.alignmentGroup.addAction(self.centerAct)
+        self.leftAlignAct.setChecked(True)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.newAct)
+        self.fileMenu.addAction(self.openAct)
+        self.fileMenu.addAction(self.saveAct)
+        self.fileMenu.addAction(self.printAct)
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.exitAct)
+
+        self.editMenu = self.menuBar().addMenu("&Edit")
+        self.editMenu.addAction(self.undoAct)
+        self.editMenu.addAction(self.redoAct)
+        self.editMenu.addSeparator()
+        self.editMenu.addAction(self.cutAct)
+        self.editMenu.addAction(self.copyAct)
+        self.editMenu.addAction(self.pasteAct)
+        self.editMenu.addSeparator()
+
+        self.helpMenu = self.menuBar().addMenu("&Help")
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+        self.formatMenu = self.editMenu.addMenu("&Format")
+        self.formatMenu.addAction(self.boldAct)
+        self.formatMenu.addAction(self.italicAct)
+        self.formatMenu.addSeparator().setText("Alignment")
+        self.formatMenu.addAction(self.leftAlignAct)
+        self.formatMenu.addAction(self.rightAlignAct)
+        self.formatMenu.addAction(self.justifyAct)
+        self.formatMenu.addAction(self.centerAct)
+        self.formatMenu.addSeparator()
+        self.formatMenu.addAction(self.setLineSpacingAct)
+        self.formatMenu.addAction(self.setParagraphSpacingAct)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/mainwindows/recentfiles.py b/examples/mainwindows/recentfiles.py
new file mode 100755
index 0000000..9d2651d
--- /dev/null
+++ b/examples/mainwindows/recentfiles.py
@@ -0,0 +1,236 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFile, QFileInfo, QSettings, Qt, QTextStream
+from PyQt5.QtGui import QKeySequence
+from PyQt5.QtWidgets import (QAction, QApplication, QFileDialog, QMainWindow,
+        QMessageBox, QTextEdit)
+
+
+class MainWindow(QMainWindow):
+    MaxRecentFiles = 5
+    windowList = []
+
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.recentFileActs = []
+
+        self.setAttribute(Qt.WA_DeleteOnClose)
+
+        self.textEdit = QTextEdit()
+        self.setCentralWidget(self.textEdit)
+
+        self.createActions()
+        self.createMenus()
+        self.statusBar()
+
+        self.setWindowTitle("Recent Files")
+        self.resize(400, 300)
+
+    def newFile(self):
+        other = MainWindow()
+        MainWindow.windowList.append(other)
+        other.show()
+
+    def open(self):
+        fileName, _ = QFileDialog.getOpenFileName(self)
+        if fileName:
+            self.loadFile(fileName)
+        	
+    def save(self):
+        if self.curFile:
+            self.saveFile(self.curFile)
+        else:
+            self.saveAs()
+
+    def saveAs(self):
+        fileName, _ = QFileDialog.getSaveFileName(self)
+        if fileName:
+            self.saveFile(fileName)
+
+    def openRecentFile(self):
+        action = self.sender()
+        if action:
+            self.loadFile(action.data())
+
+    def about(self):
+        QMessageBox.about(self, "About Recent Files",
+                "The <b>Recent Files</b> example demonstrates how to provide "
+                "a recently used file menu in a Qt application.")
+
+    def createActions(self):
+        self.newAct = QAction("&New", self, shortcut=QKeySequence.New,
+                statusTip="Create a new file", triggered=self.newFile)
+
+        self.openAct = QAction("&Open...", self, shortcut=QKeySequence.Open,
+                statusTip="Open an existing file", triggered=self.open)
+
+        self.saveAct = QAction("&Save", self, shortcut=QKeySequence.Save,
+                statusTip="Save the document to disk", triggered=self.save)
+
+        self.saveAsAct = QAction("Save &As...", self,
+                shortcut=QKeySequence.SaveAs,
+                statusTip="Save the document under a new name",
+                triggered=self.saveAs)
+
+        for i in range(MainWindow.MaxRecentFiles):
+            self.recentFileActs.append(
+                    QAction(self, visible=False,
+                            triggered=self.openRecentFile))
+
+        self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q",
+                statusTip="Exit the application",
+                triggered=QApplication.instance().closeAllWindows)
+
+        self.aboutAct = QAction("&About", self,
+                statusTip="Show the application's About box",
+                triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                statusTip="Show the Qt library's About box",
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.newAct)
+        self.fileMenu.addAction(self.openAct)
+        self.fileMenu.addAction(self.saveAct)
+        self.fileMenu.addAction(self.saveAsAct)
+        self.separatorAct = self.fileMenu.addSeparator()
+        for i in range(MainWindow.MaxRecentFiles):
+            self.fileMenu.addAction(self.recentFileActs[i])
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.exitAct)
+        self.updateRecentFileActions()
+
+        self.menuBar().addSeparator()
+
+        self.helpMenu = self.menuBar().addMenu("&Help")
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+    def loadFile(self, fileName):
+        file = QFile(fileName)
+        if not file.open( QFile.ReadOnly | QFile.Text):
+            QMessageBox.warning(self, "Recent Files",
+                    "Cannot read file %s:\n%s." % (fileName, file.errorString()))
+            return
+
+        instr = QTextStream(file)
+        QApplication.setOverrideCursor(Qt.WaitCursor)
+        self.textEdit.setPlainText(instr.readAll())
+        QApplication.restoreOverrideCursor()
+
+        self.setCurrentFile(fileName)
+        self.statusBar().showMessage("File loaded", 2000)
+
+    def saveFile(self, fileName):
+        file = QFile(fileName)
+        if not file.open( QFile.WriteOnly | QFile.Text):
+            QMessageBox.warning(self, "Recent Files",
+                    "Cannot write file %s:\n%s." % (fileName, file.errorString()))
+            return
+
+        outstr = QTextStream(file)
+        QApplication.setOverrideCursor(Qt.WaitCursor)
+        outstr << self.textEdit.toPlainText()
+        QApplication.restoreOverrideCursor()
+
+        self.setCurrentFile(fileName)
+        self.statusBar().showMessage("File saved", 2000)
+
+    def setCurrentFile(self, fileName):
+        self.curFile = fileName
+        if self.curFile:
+            self.setWindowTitle("%s - Recent Files" % self.strippedName(self.curFile))
+        else:
+            self.setWindowTitle("Recent Files")
+
+        settings = QSettings('Trolltech', 'Recent Files Example')
+        files = settings.value('recentFileList', [])
+
+        try:
+            files.remove(fileName)
+        except ValueError:
+            pass
+
+        files.insert(0, fileName)
+        del files[MainWindow.MaxRecentFiles:]
+
+        settings.setValue('recentFileList', files)
+
+        for widget in QApplication.topLevelWidgets():
+            if isinstance(widget, MainWindow):
+                widget.updateRecentFileActions()
+
+    def updateRecentFileActions(self):
+        settings = QSettings('Trolltech', 'Recent Files Example')
+        files = settings.value('recentFileList', [])
+
+        numRecentFiles = min(len(files), MainWindow.MaxRecentFiles)
+
+        for i in range(numRecentFiles):
+            text = "&%d %s" % (i + 1, self.strippedName(files[i]))
+            self.recentFileActs[i].setText(text)
+            self.recentFileActs[i].setData(files[i])
+            self.recentFileActs[i].setVisible(True)
+
+        for j in range(numRecentFiles, MainWindow.MaxRecentFiles):
+            self.recentFileActs[j].setVisible(False)
+
+        self.separatorAct.setVisible((numRecentFiles > 0))
+
+    def strippedName(self, fullFileName):
+        return QFileInfo(fullFileName).fileName()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    mainWin = MainWindow()
+    mainWin.show()
+    sys.exit(app.exec_())
diff --git a/examples/mainwindows/sdi/images/copy.png b/examples/mainwindows/sdi/images/copy.png
new file mode 100644
index 0000000..2aeb282
Binary files /dev/null and b/examples/mainwindows/sdi/images/copy.png differ
diff --git a/examples/mainwindows/sdi/images/cut.png b/examples/mainwindows/sdi/images/cut.png
new file mode 100644
index 0000000..54638e9
Binary files /dev/null and b/examples/mainwindows/sdi/images/cut.png differ
diff --git a/examples/mainwindows/sdi/images/new.png b/examples/mainwindows/sdi/images/new.png
new file mode 100644
index 0000000..12131b0
Binary files /dev/null and b/examples/mainwindows/sdi/images/new.png differ
diff --git a/examples/mainwindows/sdi/images/open.png b/examples/mainwindows/sdi/images/open.png
new file mode 100644
index 0000000..45fa288
Binary files /dev/null and b/examples/mainwindows/sdi/images/open.png differ
diff --git a/examples/mainwindows/sdi/images/paste.png b/examples/mainwindows/sdi/images/paste.png
new file mode 100644
index 0000000..c14425c
Binary files /dev/null and b/examples/mainwindows/sdi/images/paste.png differ
diff --git a/examples/mainwindows/sdi/images/save.png b/examples/mainwindows/sdi/images/save.png
new file mode 100644
index 0000000..daba865
Binary files /dev/null and b/examples/mainwindows/sdi/images/save.png differ
diff --git a/examples/mainwindows/sdi/sdi.py b/examples/mainwindows/sdi/sdi.py
new file mode 100755
index 0000000..f20eef8
--- /dev/null
+++ b/examples/mainwindows/sdi/sdi.py
@@ -0,0 +1,317 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (QFile, QFileInfo, QPoint, QSettings, QSize, Qt,
+        QTextStream)
+from PyQt5.QtGui import QIcon, QKeySequence
+from PyQt5.QtWidgets import (QAction, QApplication, QFileDialog, QMainWindow,
+        QMessageBox, QTextEdit)
+
+import sdi_rc
+
+
+class MainWindow(QMainWindow):
+    sequenceNumber = 1
+    windowList = []
+
+    def __init__(self, fileName=None):
+        super(MainWindow, self).__init__()
+
+        self.init()
+        if fileName:
+            self.loadFile(fileName)
+        else:
+            self.setCurrentFile('')
+
+    def closeEvent(self, event):
+        if self.maybeSave():
+            self.writeSettings()
+            event.accept()
+        else:
+            event.ignore()
+
+    def newFile(self):
+        other = MainWindow()
+        MainWindow.windowList.append(other)
+        other.move(self.x() + 40, self.y() + 40)
+        other.show()
+
+    def open(self):
+        fileName, _ = QFileDialog.getOpenFileName(self)
+        if fileName:
+            existing = self.findMainWindow(fileName)
+            if existing:
+                existing.show()
+                existing.raise_()
+                existing.activateWindow()
+                return
+
+            if self.isUntitled and self.textEdit.document().isEmpty() and not self.isWindowModified():
+                self.loadFile(fileName)
+            else:
+                other = MainWindow(fileName)
+                if other.isUntitled:
+                    del other
+                    return
+
+                MainWindow.windowList.append(other)
+                other.move(self.x() + 40, self.y() + 40)
+                other.show()
+
+    def save(self):
+        if self.isUntitled:
+            return self.saveAs()
+        else:
+            return self.saveFile(self.curFile)
+
+    def saveAs(self):
+        fileName, _ = QFileDialog.getSaveFileName(self, "Save As",
+                self.curFile)
+        if not fileName:
+            return False
+
+        return self.saveFile(fileName)
+
+    def about(self):
+        QMessageBox.about(self, "About SDI",
+                "The <b>SDI</b> example demonstrates how to write single "
+                "document interface applications using Qt.")
+
+    def documentWasModified(self):
+        self.setWindowModified(True)
+
+    def init(self):
+        self.setAttribute(Qt.WA_DeleteOnClose)
+        self.isUntitled = True
+        self.textEdit = QTextEdit()
+        self.setCentralWidget(self.textEdit)
+
+        self.createActions()
+        self.createMenus()
+        self.createToolBars()
+        self.createStatusBar()
+
+        self.readSettings()
+
+        self.textEdit.document().contentsChanged.connect(self.documentWasModified)
+
+    def createActions(self):
+        self.newAct = QAction(QIcon(':/images/new.png'), "&New", self,
+                shortcut=QKeySequence.New, statusTip="Create a new file",
+                triggered=self.newFile)
+
+        self.openAct = QAction(QIcon(':/images/open.png'), "&Open...", self,
+                shortcut=QKeySequence.Open, statusTip="Open an existing file",
+                triggered=self.open)
+
+        self.saveAct = QAction(QIcon(':/images/save.png'), "&Save", self,
+                shortcut=QKeySequence.Save,
+                statusTip="Save the document to disk", triggered=self.save)
+
+        self.saveAsAct = QAction("Save &As...", self,
+                shortcut=QKeySequence.SaveAs,
+                statusTip="Save the document under a new name",
+                triggered=self.saveAs)
+
+        self.closeAct = QAction("&Close", self, shortcut="Ctrl+W",
+                statusTip="Close this window", triggered=self.close)
+
+        self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q",
+                statusTip="Exit the application",
+                triggered=QApplication.instance().closeAllWindows)
+
+        self.cutAct = QAction(QIcon(':/images/cut.png'), "Cu&t", self,
+                enabled=False, shortcut=QKeySequence.Cut,
+                statusTip="Cut the current selection's contents to the clipboard",
+                triggered=self.textEdit.cut)
+
+        self.copyAct = QAction(QIcon(':/images/copy.png'), "&Copy", self,
+                enabled=False, shortcut=QKeySequence.Copy,
+                statusTip="Copy the current selection's contents to the clipboard",
+                triggered=self.textEdit.copy)
+
+        self.pasteAct = QAction(QIcon(':/images/paste.png'), "&Paste", self,
+                shortcut=QKeySequence.Paste,
+                statusTip="Paste the clipboard's contents into the current selection",
+                triggered=self.textEdit.paste)
+
+        self.aboutAct = QAction("&About", self,
+                statusTip="Show the application's About box",
+                triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                statusTip="Show the Qt library's About box",
+                triggered=QApplication.instance().aboutQt)
+
+        self.textEdit.copyAvailable.connect(self.cutAct.setEnabled)
+        self.textEdit.copyAvailable.connect(self.copyAct.setEnabled)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.newAct)
+        self.fileMenu.addAction(self.openAct)
+        self.fileMenu.addAction(self.saveAct)
+        self.fileMenu.addAction(self.saveAsAct)
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.closeAct)
+        self.fileMenu.addAction(self.exitAct)
+
+        self.editMenu = self.menuBar().addMenu("&Edit")
+        self.editMenu.addAction(self.cutAct)
+        self.editMenu.addAction(self.copyAct)
+        self.editMenu.addAction(self.pasteAct)
+
+        self.menuBar().addSeparator()
+
+        self.helpMenu = self.menuBar().addMenu("&Help")
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+    def createToolBars(self):
+        self.fileToolBar = self.addToolBar("File")
+        self.fileToolBar.addAction(self.newAct)
+        self.fileToolBar.addAction(self.openAct)
+        self.fileToolBar.addAction(self.saveAct)
+
+        self.editToolBar = self.addToolBar("Edit")
+        self.editToolBar.addAction(self.cutAct)
+        self.editToolBar.addAction(self.copyAct)
+        self.editToolBar.addAction(self.pasteAct)
+
+    def createStatusBar(self):
+        self.statusBar().showMessage("Ready")
+
+    def readSettings(self):
+        settings = QSettings('Trolltech', 'SDI Example')
+        pos = settings.value('pos', QPoint(200, 200))
+        size = settings.value('size', QSize(400, 400))
+        self.move(pos)
+        self.resize(size)
+
+    def writeSettings(self):
+        settings = QSettings('Trolltech', 'SDI Example')
+        settings.setValue('pos', self.pos())
+        settings.setValue('size', self.size())
+
+    def maybeSave(self):
+        if self.textEdit.document().isModified():
+            ret = QMessageBox.warning(self, "SDI",
+                    "The document has been modified.\nDo you want to save "
+                    "your changes?",
+                    QMessageBox.Save | QMessageBox.Discard |
+                    QMessageBox.Cancel)
+
+            if ret == QMessageBox.Save:
+                return self.save()
+
+            if ret == QMessageBox.Cancel:
+                return False
+
+        return True
+
+    def loadFile(self, fileName):
+        file = QFile(fileName)
+        if not file.open(QFile.ReadOnly | QFile.Text):
+            QMessageBox.warning(self, "SDI",
+                    "Cannot read file %s:\n%s." % (fileName, file.errorString()))
+            return
+
+        instr = QTextStream(file)
+        QApplication.setOverrideCursor(Qt.WaitCursor)
+        self.textEdit.setPlainText(instr.readAll())
+        QApplication.restoreOverrideCursor()
+
+        self.setCurrentFile(fileName)
+        self.statusBar().showMessage("File loaded", 2000)
+
+    def saveFile(self, fileName):
+        file = QFile(fileName)
+        if not file.open(QFile.WriteOnly | QFile.Text):
+            QMessageBox.warning(self, "SDI",
+                    "Cannot write file %s:\n%s." % (fileName, file.errorString()))
+            return False
+
+        outstr = QTextStream(file)
+        QApplication.setOverrideCursor(Qt.WaitCursor)
+        outstr << self.textEdit.toPlainText()
+        QApplication.restoreOverrideCursor()
+
+        self.setCurrentFile(fileName)
+        self.statusBar().showMessage("File saved", 2000)
+        return True
+
+    def setCurrentFile(self, fileName):
+        self.isUntitled = not fileName
+        if self.isUntitled:
+            self.curFile = "document%d.txt" % MainWindow.sequenceNumber
+            MainWindow.sequenceNumber += 1
+        else:
+            self.curFile = QFileInfo(fileName).canonicalFilePath()
+
+        self.textEdit.document().setModified(False)
+        self.setWindowModified(False)
+
+        self.setWindowTitle("%s[*] - SDI" % self.strippedName(self.curFile))
+
+    def strippedName(self, fullFileName):
+        return QFileInfo(fullFileName).fileName()
+
+    def findMainWindow(self, fileName):
+        canonicalFilePath = QFileInfo(fileName).canonicalFilePath()
+
+        for widget in QApplication.instance().topLevelWidgets():
+            if isinstance(widget, MainWindow) and widget.curFile == canonicalFilePath:
+                return widget
+
+        return None
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    mainWin = MainWindow()
+    mainWin.show()
+    sys.exit(app.exec_())
diff --git a/examples/mainwindows/sdi/sdi.qrc b/examples/mainwindows/sdi/sdi.qrc
new file mode 100644
index 0000000..0a776fa
--- /dev/null
+++ b/examples/mainwindows/sdi/sdi.qrc
@@ -0,0 +1,10 @@
+<!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/examples/mainwindows/sdi/sdi_rc.py b/examples/mainwindows/sdi/sdi_rc.py
new file mode 100644
index 0000000..af3d187
--- /dev/null
+++ b/examples/mainwindows/sdi/sdi_rc.py
@@ -0,0 +1,604 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Sun May 12 18:04:51 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x03\x54\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x02\xe6\x49\x44\x41\x54\x58\xc3\xd5\
+\x97\xcd\x4e\x13\x61\x14\x86\xeb\x35\x94\x95\x7b\x71\xe1\xd2\xc4\
+\xe0\x05\xb8\xe2\x0e\x5c\xb8\xf4\x02\x5c\xb1\x30\xea\x05\x18\x96\
+\x26\x62\x58\xb8\xb0\x91\x58\x20\xd1\x9d\xbf\x89\xa4\x14\xb1\x52\
+\xa4\x48\x45\x94\xfe\xd0\x02\x43\xff\xa6\x9d\x19\xa6\x65\x80\xe3\
+\x79\x7b\xfa\x85\x51\x4a\x82\xc9\x21\x86\x49\xde\x9c\x33\xa7\xf3\
+\xcd\xfb\x9c\xf3\x4d\x9b\x4e\x84\x88\x22\xff\x53\x91\x73\x01\xc0\
+\xc7\xd5\x90\x6e\xff\xa5\xfb\xac\xc7\x3d\x3d\x64\x0d\xa9\x02\xf0\
+\x31\x32\x3c\x3c\xbc\x6a\x34\x3a\x3a\xba\x19\x56\x3c\x1e\xaf\x26\
+\x93\xc9\x56\x3a\x9d\x76\x13\x89\x44\x6b\x60\x60\x20\xcd\x6b\x6e\
+\x68\x02\xa4\x38\xd2\xe1\xe1\x71\x99\xba\xef\xb7\xc9\xb2\x2c\xda\
+\xdf\xdf\x27\x86\xf1\x78\xcd\x18\xeb\x8a\x1a\x40\x3f\xf3\xb0\x1c\
+\xc7\xa5\x4c\x66\xb9\x0b\x14\x04\x01\xc5\x62\xb1\x3a\xaf\x7b\x70\
+\x1a\x88\x53\x01\x1c\x1c\x10\x77\x77\xb2\x6c\xdb\xa1\xf9\xf9\xcf\
+\x64\x0e\xd7\x75\xe9\xf9\xc4\x44\x17\x42\x05\x00\x26\x7b\xc1\xc9\
+\xaa\x37\x1c\x4a\xce\xcd\x53\xf8\x70\x5d\x0f\x8b\x17\x54\x00\x82\
+\x10\x40\x67\x4f\x14\xce\xed\xa6\x47\x1f\x67\x66\xe9\xf5\x9b\xb7\
+\x14\x9f\x9c\xa4\xa9\xa9\x69\x7a\xf7\xfe\x03\x45\xa3\xd1\x65\x5e\
+\x7f\x41\x05\xc0\xef\x10\xed\xb6\x25\x86\x85\x9a\xe3\x05\x94\x5d\
+\xcd\xd1\xe4\xf4\x2b\x7a\x32\xfe\x94\x9e\xc5\x5e\xd0\x4c\x62\x0e\
+\x8b\x17\x55\x00\xda\x81\x18\xf5\x13\x20\x3c\xff\x90\x6a\xcd\x36\
+\x15\x37\xab\x94\x2f\x6e\x53\x89\x63\x8d\xb7\x85\xd7\x7e\x51\x01\
+\xf0\x79\xcc\xcd\x5d\x1e\xb5\xc7\x7b\xdb\xee\x9f\x3b\xbe\xe4\x88\
+\x5d\xb8\xbd\xee\xe2\x94\xca\x33\xe0\x75\xe4\xc6\x75\x57\x62\xd8\
+\x10\x39\xea\xe6\x33\x44\xd4\x01\xa7\x06\xe0\xf4\x3a\xad\x39\x22\
+\x98\x98\x68\x72\x80\x98\x6b\x50\x53\x9d\x00\x00\x2a\x2d\xb9\x31\
+\xe2\x4e\x53\x8c\x10\x0d\x04\xf2\x6d\xfb\x28\xb6\x7c\x45\x00\x9b\
+\x3b\xdb\x6a\xfc\x69\x8e\x3c\x6c\x88\x1a\xae\x39\x13\x80\x3a\x8f\
+\xb7\x54\x23\x2a\xd7\xc5\x04\x06\x06\x00\x35\x28\x9c\x17\xab\xbc\
+\x25\xbb\xca\x13\xc0\x4d\x61\x0e\x15\x2a\x72\x6e\xcc\x7e\x5a\x02\
+\x68\x6a\xdd\xad\xf1\x94\x27\x00\x53\xdc\x1c\x71\x6d\x5b\x40\x60\
+\x9a\xab\x1c\x75\x9e\xeb\x81\x41\x15\x47\x11\xc0\x6a\x89\x31\x0c\
+\xd6\x77\x04\x20\x0c\x64\x26\x62\xb6\x69\x75\x8b\xa8\xaa\x09\x50\
+\xb6\xc5\xbc\xd0\x03\xf8\xbe\x29\x63\x87\x29\x60\x0c\x18\x84\x1c\
+\x00\x5b\x4d\x45\x00\x74\x03\x53\x98\xad\x94\xc5\x1c\xe7\x46\xe6\
+\x1c\x00\xc8\x71\x5d\xa9\xa1\x08\x80\xfd\xfc\x56\x12\x73\x33\x01\
+\x08\x35\x18\x42\xe8\xda\x7c\x8e\x29\xa8\x4e\x00\x5b\x00\x03\xc8\
+\x98\x67\x36\x04\x00\x32\xe6\x85\xde\xf8\x17\x0b\xfc\x2c\xd8\x8a\
+\x00\x18\x67\x3a\x4f\xb4\x54\x14\x23\x98\x02\x00\x02\x0c\x3e\xfb\
+\xc5\x53\x28\xf0\x43\xb8\x66\x49\xf7\x6b\xf9\x52\x87\xd7\xbe\x54\
+\x01\xc8\x55\x8f\xba\x4e\xad\x4b\x0e\x90\xaf\x85\xde\xb7\xc2\x92\
+\x3d\x4f\xa6\xb3\xde\xa3\xb1\x71\xeb\xda\xd0\xf5\x15\x98\xb3\x6e\
+\xa9\x00\x6c\x34\xa4\x6b\x18\xff\xe0\x11\x7f\x5a\x17\x53\xd4\x13\
+\x0b\x59\x6f\xe4\xee\xbd\xe2\xa5\xc1\xcb\x4b\x7c\x6d\x8c\x75\x87\
+\x35\xa8\xfa\xb7\x1c\xdd\x65\xd9\x3c\x8f\x1f\x19\xfe\x9e\xcf\x1e\
+\x37\xbd\xc9\xba\x78\x26\x6f\x46\x00\x68\xf2\xff\x81\x99\x94\x9e\
+\xe9\x3f\xbf\x19\x01\x42\xd3\xf4\xfc\xbd\x9c\x9e\xa5\x7e\x03\x51\
+\x6c\x25\xa1\x92\x95\x0a\x77\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x06\x6d\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x06\x34\x49\x44\x41\x54\x78\x5e\xad\x97\x5b\x6c\x54\xc7\
+\x1d\xc6\x7f\x73\xce\xd9\x8b\xbd\xf6\xfa\x16\xa0\xbe\x00\x0e\xb2\
+\x69\x63\x24\x42\x4a\x21\x22\xa1\x2d\x95\x62\xa5\x2f\xee\x4b\x68\
+\x2b\x95\xa6\x55\xa5\xc6\x60\x55\xaa\xda\xb4\xaa\xfa\x56\x09\x55\
+\xca\x03\x94\x27\xda\x07\x84\x14\x29\xad\xc4\x8b\xa5\x52\x83\x79\
+\x08\xc5\x18\x39\x0e\x69\xd3\x84\x9a\x9b\x63\x6a\xec\xb2\x04\x1b\
+\x3b\xbb\xf6\x7a\x8f\xbd\xbb\xde\xb3\x67\xa6\xc3\x68\x85\xe5\x72\
+\x6c\x88\xc9\x27\x7d\xfa\x9f\x9d\x87\xfd\x7e\xf3\x9f\x99\x73\x11\
+\x4a\x29\x82\x24\x84\x78\x05\x78\x9e\xc7\x6b\x48\x29\xf5\x77\xd6\
+\x28\x27\x20\xb8\x43\xbb\x01\x68\x97\x52\xbe\xc6\x63\x64\x59\xd6\
+\x07\x1a\xf6\xbb\x40\xb7\x06\x39\xff\x14\x00\x26\xfc\xb7\xed\xf5\
+\xe2\x60\x5d\x44\x44\x6e\xce\x89\x8a\x2b\x57\xae\x50\x5d\x53\x8d\
+\x40\x00\xa0\x50\x08\x65\x28\x41\x29\x66\xd3\x69\x5e\xa9\x17\x2f\
+\xbc\xb4\x4e\x6c\x3b\xf1\x1f\xb9\x47\x83\x7c\x5b\x43\x4c\x3c\x4d\
+\x07\xf6\xff\x60\x8b\xdd\x2c\x25\xf8\x4a\x32\x3c\x3c\x4c\x65\x65\
+\x25\x2b\xc9\x75\x5d\x1e\xc0\x6e\xa9\xb0\x22\x1b\xa2\x2a\x72\x3f\
+\xa7\xea\x81\xb5\x03\x08\x2d\x05\x48\xa1\x0d\xf4\x5d\xbc\x48\x2e\
+\x97\xc3\x2f\x16\x51\x4a\x91\xcf\xe7\x59\x5c\x5c\xa4\x50\x28\x50\
+\xd4\x63\xb5\xb5\xb5\x94\x01\x58\x80\xf8\x82\xf6\x80\x01\x00\x36\
+\x44\x05\x1f\x0f\xbc\x4b\x3e\x3b\x8f\x85\x44\x95\x32\xe2\xb6\xc4\
+\xb6\x04\x21\x21\x70\x3e\x53\x6c\x8c\x3b\x80\x44\x2a\x04\xf0\x9c\
+\x10\x02\xe0\xcb\x40\x05\x50\x0f\x34\x60\xc4\x48\x69\x9f\x24\x02\
+\x01\x4e\x9c\x38\x21\x00\x81\x05\xd2\x87\x96\x96\x67\x09\x65\x6d\
+\x14\xe5\x28\xa5\xb4\x41\x08\x58\x57\x19\x25\xe2\xd8\x44\x42\x16\
+\xc3\x13\x73\x5c\xbc\x3d\x41\xf7\x58\x8e\x5c\x24\xbe\xa9\xbd\x7d\
+\xf7\xef\x2d\xcb\x5a\xdc\xb1\x63\x47\x59\x55\x55\x95\xd3\xd8\xd8\
+\x18\x7e\xe0\x86\x86\x86\xd0\xa5\x4b\x97\xdc\xae\xae\xae\x08\xf0\
+\xd6\xaa\x1d\x00\x13\x44\x55\x2c\xc2\x73\xd5\x31\xf2\x9e\x4f\xa1\
+\x28\x91\x4a\x61\x09\x41\xd8\xb1\x88\x86\x6c\xe6\x72\x05\x12\xa2\
+\x8e\x3f\x9f\xff\x2b\x0d\x4d\x1b\x01\x22\xc0\x66\x96\x84\xef\xfb\
+\x78\x9e\x47\x75\x75\xb5\x9e\x50\x4b\xf4\xea\xd5\xab\x87\x84\x10\
+\x28\xa5\xde\x5a\x11\xc0\xb2\x41\x00\xb6\x2d\x90\xda\xb6\x14\x38\
+\x08\xa4\x12\x58\xc2\x8c\x1b\x8f\x4c\xb9\xec\x7b\xf5\x3b\xd4\x37\
+\x36\x11\x7c\x2f\xc1\x84\x67\x32\x19\xca\xcb\xcb\xcd\x66\x3e\x76\
+\xec\xd8\x26\xbd\x7f\x0e\x2e\x41\x2c\x01\xd0\xd9\xd9\xa9\x0e\x1d\
+\x3a\xa4\x6c\x21\x08\x59\x10\xb6\x2d\x1c\xc7\xc6\x42\x50\xb4\xcd\
+\x1a\x1b\x00\xc7\xb2\x88\x38\x96\xae\x02\x60\x59\x78\x10\xc0\xdc\
+\xdc\x1c\x35\x35\x35\x06\x20\x1a\x8d\x72\xe4\xc8\x91\xcd\xc0\x03\
+\x88\x1b\x1a\xa2\xc7\x62\xb9\xb0\x6d\x74\x30\x66\x8d\xcb\x23\x36\
+\xb1\xa8\xa3\xc7\x2c\x32\x8b\x1e\x93\x99\x1c\x63\xa9\x79\xee\xcc\
+\x2e\xe8\xdf\x45\x72\xf9\x3c\xab\xc8\x2c\x41\x36\x9b\x35\xa7\x66\
+\xe9\xff\x6d\x0e\x1c\x38\xb0\x1e\xe8\x00\x58\x06\xa0\xb4\x74\x16\
+\x8e\x0d\xe1\x90\xc0\x53\x8a\xb1\xa4\xcb\x8d\x8c\x83\xd3\xb2\x97\
+\xa6\x7d\xaf\xb3\xb5\xe3\x17\xac\xdb\xfb\x3a\x0d\x2f\xb4\x73\xfb\
+\xce\x24\xfd\xfd\xfd\x24\x93\x49\x94\x52\xe6\xfa\xf8\xf1\xe3\xe8\
+\xba\xac\x33\xe7\xce\x9d\xe3\xe8\xd1\xa3\x1c\x3e\x7c\x98\xde\xde\
+\x5e\x12\x89\x84\x04\x2c\xa1\x15\xdc\x01\xed\xff\xce\xe6\xf8\xe7\
+\x94\x4f\x6b\xc7\xcf\xf8\xe6\x2f\xdf\x26\xf6\xf5\x37\x99\x7c\xa6\
+\x83\x6b\xfe\x2e\xae\xf1\x2d\x64\x6b\x17\xad\x7b\x7f\x4e\x5e\x56\
+\x73\xfa\x6f\x67\xd1\x77\x4d\xee\xdc\x9d\xe2\x1b\xaf\x76\x72\xfd\
+\xfa\x75\x03\xa0\x67\x6b\xd6\x3f\x16\x8b\x99\xeb\x78\x3c\x8e\xe3\
+\x38\x25\x38\x04\xc0\x23\x00\x96\x25\x98\xca\x41\x3a\xde\xca\xfe\
+\xdf\xbd\x4d\xd5\xae\xd7\x28\x84\x62\x08\xdb\x42\x59\x82\x6c\x41\
+\x72\x7f\x66\x91\x4f\xee\x66\x18\xb8\xea\x72\xfa\x1f\x61\x64\xd5\
+\x5e\xae\x8f\xdc\x67\x32\xd7\xc6\x85\x0f\xee\x9b\x00\xed\x87\xa1\
+\xcd\xcd\xcd\xb4\xb5\xb5\x19\x37\x35\x35\xa1\xa1\x14\x20\x83\x1f\
+\x46\x16\xdc\x71\x15\xdf\xff\xe9\x6f\xa8\x6c\xd8\x48\xe2\xec\x3b\
+\x4c\x8f\x5e\xc3\x89\x94\xb1\xb5\x79\x07\x9b\x5b\xb6\xf3\x49\x79\
+\x25\x63\x09\x97\xcf\x66\xf2\xdc\x9d\xce\x32\xa1\xed\x88\x0d\x4c\
+\x27\xe7\xd8\xb7\x2b\xca\xfa\x25\x00\x33\x7b\x3d\x6b\xea\xea\xea\
+\x00\xcc\x75\x2a\x95\x32\x00\x4a\x2b\x10\xa0\xb9\x5a\x70\xe1\x9d\
+\x63\x28\x2c\xca\xe6\xc6\xd9\x10\x8f\x52\x94\x92\x7b\xc3\x7d\x24\
+\x65\x05\xdb\xda\x7f\x4c\x4d\xdb\xcb\x7c\x3c\x9c\x66\xd2\x5f\xc0\
+\xcd\x78\x2c\xcc\x6b\x2f\x78\x20\x00\xb5\x74\x3a\x42\xa1\x90\x09\
+\x2d\xdd\xea\x1f\x8e\x01\x2a\xf8\x3e\x60\xc1\xc6\xb8\xa0\x50\x1c\
+\x23\x1c\x8b\x53\xb7\xa5\x96\x92\x78\x76\x7d\x05\xe9\xac\xc7\x68\
+\xff\x9f\x98\xae\xbc\x4c\xcb\xf6\x83\xb8\x0b\x61\xbc\x82\xa4\x58\
+\x94\x78\xda\x21\xc7\x42\x2d\xaa\x80\xe3\x69\xa0\x96\xd5\x15\x01\
+\x00\xd6\xc7\x43\x84\xca\x23\xfc\xbf\x6a\x63\x21\x9e\xa9\x0c\x73\
+\xe1\xdf\x83\xec\xd9\xf9\x13\xca\xa3\x0e\xb9\x32\x47\x03\x28\x03\
+\x61\x6b\x00\x16\x4b\x21\xa5\x1c\x25\x30\x2a\x15\xa4\x5c\x05\x40\
+\x58\xa5\x2a\xcc\xf5\x23\xfa\x70\x6c\x86\xf1\x59\x8f\xef\xfd\xfa\
+\x8f\xdc\xca\xd4\xe0\x44\x5c\xa2\x11\x1b\xcf\x93\x14\x3d\x07\xd3\
+\x01\xa5\x90\x52\xf2\x50\x6a\x59\x01\x56\x05\x10\x08\x4c\x0d\x04\
+\x18\x9d\x76\xf9\xd5\x5f\x86\x18\xbd\xb7\x80\x3d\x93\x67\xd3\xba\
+\x32\xf2\x79\x5f\xbb\x68\xea\xce\xaf\xd4\x70\xf9\xdd\xe0\x25\x00\
+\x9e\x78\x09\x4c\xb8\x10\x3c\xa2\xd6\x2f\x55\xf2\x87\x1f\x3e\xcf\
+\xf5\x4f\x33\x44\x1b\xb7\xb1\xf3\xc5\x97\x59\x12\x5c\x4e\x60\x8e\
+\xdb\x53\x01\x28\xc0\x12\x25\x00\x6d\xd4\x52\x7d\xb1\xb5\x96\xdd\
+\x5b\xe2\x74\xbf\x97\xa5\x6a\xf7\x57\xf9\xd1\x1b\x6f\x10\xa0\xb5\
+\x03\x98\xb5\x37\xd5\xd8\x08\x01\xd2\xcb\x53\x70\x53\x78\xf3\x33\
+\x14\xb3\x69\x0a\x19\x1f\x25\xfd\xd5\x82\xd6\x08\xf0\xf0\x29\xe7\
+\xe3\xe7\x33\x14\xe6\x75\xa8\x0e\xd6\x00\xcb\xf7\x89\x10\xc1\x33\
+\x7d\xfa\xd7\x72\x8c\xb2\x13\x37\x03\xc7\x01\xb2\x1e\xfe\xad\x94\
+\xcc\x6f\xf7\x44\x54\x03\xd8\x5f\x70\x07\x08\x92\x09\xfd\xd7\x3d\
+\x3f\xfd\x7e\x42\xa6\xcf\xdf\xf6\xef\x02\xee\x76\x3b\xfc\x92\x06\
+\xa8\xe3\x73\xca\x75\x5d\x1f\x70\x57\xed\x00\x40\x32\xab\x0a\x1f\
+\x7e\x2a\xd3\xbd\xb7\xfc\xd4\xcd\x69\x39\x05\xf4\x03\x97\x74\x68\
+\xbf\x10\xa2\xd3\xb6\xed\xaf\x7d\x9e\x25\x58\x58\x58\xf0\x07\x06\
+\x06\xd2\x27\x4f\x9e\x9c\x06\xba\x83\x00\x3e\x1a\x49\xca\xad\xe3\
+\xb3\x2a\xd7\x3b\xe2\xa7\x6e\x4c\xcb\xd1\x52\xe8\x59\x1d\x74\x8b\
+\x00\x3d\x09\xc0\xd0\xd0\x90\xdb\xd3\xd3\x93\xd2\x4e\xcf\xce\xce\
+\x9e\x2e\xbd\x1d\xdf\x08\x02\xe8\xee\xea\x29\x00\x8c\x04\x84\x06\
+\x85\xaf\x08\x30\x35\x35\x55\xd0\x2f\x22\xa9\x53\xa7\x4e\x25\xc7\
+\xc7\xc7\x2f\x03\x67\x81\x7e\x1d\xec\xae\xb8\x09\x4b\xdf\x76\xda\
+\x4f\x26\x85\x01\x40\x08\x40\x61\x5a\xfc\xde\xe0\x60\xba\xbb\xbb\
+\x3b\xa5\xdf\x8a\xcc\x24\xd0\x5e\xed\x73\xcd\x61\xed\x9a\x77\x33\
+\x6e\x11\x60\x70\xf0\xfd\x74\x5f\x5f\x5f\xfa\xcc\x99\x33\xa6\xc5\
+\xa5\xd0\x8f\x78\x02\x89\xb5\x9e\x63\x21\x44\x18\x78\x13\xd8\x4f\
+\x69\x73\x06\xb4\xf8\xb1\xfa\x1f\xbd\xfa\x2a\x5f\xf2\xd8\x15\x9d\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\xa3\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\x35\x49\x44\x41\x54\x58\xc3\xe5\
+\x97\xcd\x8f\x54\x45\x14\xc5\x7f\xb7\xea\xd6\x7b\xaf\xdb\x6e\xc7\
+\xf9\x40\x9d\x89\x46\x4d\x34\x99\x44\x8d\x1a\x48\x98\xc4\x8c\x1f\
+\x1b\xfe\x02\x4c\x5c\xf1\x07\x18\x16\x2e\x4d\x5c\x6b\x58\xc3\x8e\
+\xc4\x8d\x1b\x17\xce\x82\x68\x74\x41\x5c\x18\x0d\xe2\xc4\xc6\x00\
+\x3d\x60\x50\x51\x19\x60\x02\xa2\x0e\x0c\x83\xd3\xfd\x5e\xf7\x94\
+\x8b\xaa\xee\xf9\x60\xe6\x0d\x84\x51\x16\x56\x52\xa9\xce\x7b\xb7\
+\xeb\x9e\x3a\xf7\xd4\xa9\x7a\xea\xbd\xe7\x7e\x36\xe5\x3e\xb7\x3e\
+\x80\x5d\xbb\x76\xbd\x03\xec\xfd\x8f\xf2\x4e\x35\x1a\x8d\x03\xeb\
+\x19\xd8\xbb\xef\xbd\xa3\x3b\x1f\x1f\x76\x00\x9c\x3c\x3a\xcf\xcc\
+\x97\x37\x58\x9c\xef\xdc\x53\xa6\xda\xa0\xf2\xdc\x6b\x03\xbc\xb8\
+\x67\x10\x80\x8b\x7f\x16\x7c\xf8\xee\x1e\x80\xdb\x00\x70\xfc\xec\
+\x1c\xdf\x3f\x30\x04\x78\x2e\xfd\xb8\xc0\xfe\xb7\xce\x6f\xcb\x72\
+\x0f\x1d\x79\x9a\x0b\x23\x96\xd3\x9f\x1f\x64\xfc\xd5\x7d\x9b\x6b\
+\x40\x45\xb0\x16\x40\x78\x70\x2c\x23\xcb\xb2\x6d\x01\x30\x30\x96\
+\x61\x8d\x50\x1b\x7c\x14\x23\x25\x22\x14\x2b\xd8\x18\x91\xd5\x95\
+\x73\xe7\xce\x83\x2a\xb8\x04\xd2\x14\xb2\x0c\xd2\x2c\x8c\x49\x0a\
+\x49\x12\xde\x77\x3a\x90\xe7\x90\xb7\xa1\xd5\x82\x76\x2b\x8e\x6d\
+\x28\x72\xb2\xfa\x38\xd6\x0a\xe3\xaf\xbc\x49\x6b\xf1\xfa\xe6\x00\
+\xac\x15\xac\x15\x04\xb0\x46\xd8\xbd\x7b\xe7\x16\x6b\xeb\x86\xae\
+\x80\x5a\xa8\x56\x81\xea\x6d\x51\x8d\xaf\x04\xb5\x82\xf7\xa0\xa6\
+\x84\x01\x67\x05\x35\x82\x08\xa8\x0a\x95\x2c\xc3\x23\x20\x1e\x08\
+\xc0\xf0\x1e\x2f\x02\xde\x23\x12\x26\x15\x7c\x88\x23\xc4\x21\x1e\
+\x3c\x21\x5e\x40\x4d\x58\x18\x40\xd7\x4a\x89\x06\xac\xa0\xda\x63\
+\x00\x9a\x33\xbf\x05\x8a\x53\x07\x69\x02\x95\x04\xb2\x34\xf6\x04\
+\x12\x07\x4e\xa1\xe8\x40\x5e\x40\x2b\x8f\xbd\x05\x4b\x39\xb4\x73\
+\xc8\x0b\x54\x87\x71\x3d\x00\x2a\xe5\x25\x70\x31\x40\xd5\x30\x39\
+\xf9\xd2\xd6\x0a\xf3\x3e\xd0\xaf\x16\xaa\x1b\x8b\xf6\xd8\x27\x61\
+\x61\xbd\x1c\x25\x25\x20\x00\xf0\x81\x8d\x34\x4d\xa3\x3a\xc3\xb3\
+\x98\x11\x89\x6c\x07\xda\x63\x09\x56\x98\x5f\x29\x46\xfc\x61\xcd\
+\x72\x7f\x61\x1d\x2d\xd1\x80\x3a\x09\x54\x49\x18\x4f\x34\x2f\xe0\
+\x9d\x85\xc4\x21\x89\xc3\x67\x09\x92\x69\xd8\x11\x89\xe2\x13\x87\
+\x58\x8b\xef\x76\x91\xbc\x80\xbc\x03\xed\x02\xdf\x6a\x23\xed\x02\
+\xf2\x02\x9f\x77\x50\x1d\x45\xd5\x20\x78\x3a\xeb\x54\x78\x9b\x06\
+\x9c\x33\x78\x0f\x03\x8f\x24\xbc\xfe\xf2\xf3\x77\x68\xe8\x36\x68\
+\xa4\xbe\xf1\xeb\xc6\xfc\xdf\xb1\x04\x52\x5e\x82\x44\x4d\x5f\x84\
+\x8f\x0d\xa5\x38\xe7\xb6\xc5\x88\x9e\x18\x4b\xb9\x76\xb3\x03\x08\
+\x9d\x52\x11\xaa\x90\xb8\x50\xef\x5a\xc5\x30\x7d\xb1\xcb\x40\xc5\
+\xb0\x0e\xf4\x26\xad\x57\xf9\x55\x2e\xe1\xe1\xc6\xd2\x32\xf5\xcc\
+\x70\x7d\xc9\x84\x2d\xe9\x4a\x19\x10\x9c\x1a\xc0\x73\xe5\x66\x97\
+\x2b\x37\xbb\xac\x51\x57\x3f\xd7\xaa\x64\x7e\xc5\x27\xa2\x29\xac\
+\x05\x15\xc3\x9c\x0b\xb5\x77\xa6\x6c\x17\xa8\xc1\xa9\x20\xc8\x1a\
+\x35\xaf\x9b\x35\x1a\x8f\x59\x31\x9e\xfe\x7b\xe9\xef\x14\x00\xf1\
+\x82\xef\x9b\x58\x30\x2b\x57\x56\x02\x55\x21\xd1\x90\xfc\xe7\x53\
+\xdf\xf2\xeb\x99\x13\x2c\x2d\xde\xb8\xa7\xfa\x57\x6a\x03\x3c\xf5\
+\xec\x4e\x9e\x79\x61\x02\x0f\xa8\x33\x5b\x31\x10\x03\x7c\x87\xf7\
+\xf7\xbf\xc1\xc2\xc2\x02\xb7\x6e\xdd\xa2\x28\x0a\x44\x04\x6b\x2d\
+\xd6\x5a\x54\x15\x55\xc5\x39\x87\xaa\x62\xad\xc5\x98\xf0\xdf\xe5\
+\xe5\x65\xf2\x3c\xef\xf7\x23\xcd\xf9\xb8\xf2\x2d\x18\x70\x56\x50\
+\x17\x18\xdc\x31\x3a\xb6\x72\x4f\x38\x7e\x9c\xe9\xe9\x69\x8c\x31\
+\x78\xef\x99\x98\x98\x60\x72\x72\xf2\x8e\x59\xd8\x31\x3a\xd6\xdf\
+\x86\xae\xd4\x09\x55\x70\x36\xac\xa2\x56\xaf\xf7\x6b\x39\x33\x33\
+\xc3\xd0\xd0\x10\xd6\x5a\xbc\xf7\x34\x9b\xcd\xbb\x02\x50\xab\xd7\
+\x70\xd1\x88\xb4\xd4\x88\x14\x9c\x0b\x27\x5c\xa0\x2a\x00\xa8\x56\
+\xab\x64\x59\xd6\xa7\xb8\x37\xde\x69\x73\x1a\xa9\x17\x41\x4b\xad\
+\x38\x1e\xc7\xbd\x23\xb4\xd7\x8c\x31\x88\x44\xdf\x8f\x3a\xb8\xab\
+\x9b\xaf\x35\xa8\x0d\xf3\xf6\x18\x2e\x3d\x8e\x83\x29\x6d\xe3\xd5\
+\xdb\x12\xa9\xf7\xe5\x56\x6c\xad\xf4\x91\x0e\x8e\x0c\xc3\xf2\xef\
+\xdb\x02\xe0\xa1\x91\x61\xd4\xc2\xb5\x2b\x97\x59\x9c\xbf\xbe\x05\
+\x03\x36\xf8\xc0\x60\xad\x02\x0b\xdb\xc3\xc0\x50\xad\xc2\xec\xc5\
+\x4b\x9c\xfd\xee\x1b\xce\x9f\x9c\x9e\x03\xa6\x36\x04\x60\x24\x5e\
+\x4a\x05\x12\x0b\xed\x91\x27\xa9\x3d\x0c\x6f\x1f\x38\xc8\x66\xc7\
+\x81\x27\x3a\xf1\x2a\xe7\x35\x1e\x32\x81\x14\x28\xba\x70\xf9\xea\
+\x55\xce\x34\x8e\xd1\xfc\xfa\x8b\xb9\xd9\x1f\x4e\x1d\x02\x0e\x6f\
+\x08\xe0\xb3\x8f\x3e\xe0\xa7\xd3\x27\x57\x99\xe9\xda\xa3\x86\x55\
+\xe6\xbb\x1e\x04\x1b\x3c\x5f\x1d\x6f\x7c\x77\xee\x8f\xd9\x5f\x0e\
+\x01\x87\x1b\x8d\xc6\x5f\x1b\x01\x98\x9a\xfe\xf4\xe3\x7f\xf5\x73\
+\x6c\x7d\xf2\x35\x00\xe2\xb7\xda\x81\xff\xdd\xd7\xf1\x3f\x4d\xf0\
+\x4b\xb9\xe8\x46\x89\xaf\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x08\x19\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x07\xab\x49\x44\x41\x54\x58\xc3\xad\
+\x57\x5b\x50\x93\x67\x1a\xf6\xca\xce\xec\xcc\xf6\x62\x2f\xbc\xd9\
+\xe9\xce\xec\x6e\xbd\xda\xd9\x9b\xb5\xce\xba\x3b\x7b\xb0\xad\xcc\
+\x7a\xb1\xce\xce\x3a\xb3\x76\x54\x70\x75\xdb\xe2\x81\xd6\xb6\x54\
+\x04\xbb\xa5\x20\x6d\xc1\x82\x06\x08\x07\x51\x42\x80\x80\x80\x02\
+\x21\x81\x10\x92\x40\x48\x10\x73\x24\x21\x67\x72\x80\x04\x42\x20\
+\x9c\x09\x47\xb5\x54\x78\xf6\xfb\x7e\x13\x16\x30\x58\x8b\x7d\x67\
+\x9e\xf9\x2f\x92\xfc\xcf\xfb\x3e\xcf\xfb\xbe\xdf\x97\x5d\x00\x76\
+\xfd\x98\x20\xf1\x0b\x82\x14\x02\x03\xc1\x75\x82\x03\xcf\xfd\xfe\
+\x8f\x48\xbc\x9b\x20\xe1\x57\xaf\xef\xb5\x2a\x8c\xd6\x65\xdb\x02\
+\x60\x19\x1e\x5b\x09\x27\xf1\x33\xfa\x19\x81\x22\xfc\xdc\x3e\x76\
+\x48\x7e\x8a\xa0\xb9\xb6\x59\x1c\x32\xcf\xad\x42\x39\xfe\x1d\x44\
+\xf6\x51\xd8\xc7\xe6\xe8\x87\x86\x3d\x7b\xf6\x58\x53\x52\xae\x2c\
+\xca\x3a\x3a\x10\x4e\xe2\xe5\x49\xc3\xc4\x31\x04\xb7\x3e\x49\xf9\
+\x2c\x60\x9b\x5d\x59\x53\x4d\x03\x4d\xb6\x11\x34\xeb\xfb\x20\x31\
+\x79\x60\x19\x9d\xc5\xbb\xef\xbe\x3f\xc5\xab\xbe\x83\xf1\x89\x29\
+\x4c\x4f\xcf\xae\x92\xef\xd7\xbc\x74\x02\x11\x9f\x0f\xbe\x1d\xe3\
+\xb2\x04\x43\x4f\xb4\x33\x40\x8b\x7b\x06\xcd\x3d\x2e\x34\xeb\xec\
+\xa8\x57\xf6\x20\x87\x53\x85\x32\x5e\x35\x43\xbc\xb0\xf4\x90\x81\
+\xc1\x60\x5c\x26\xbf\x4b\x7c\xe1\x04\x48\x1c\x24\x38\x41\xfd\xdd\
+\xea\x73\x27\xf1\xb9\x27\x04\x48\x87\x97\xc1\xd7\xbb\x20\x22\x55\
+\x37\xdc\x37\xa2\xb8\x4e\x88\x2c\x56\x3e\xcc\x56\xdb\x3a\x71\x04\
+\x2c\x16\x6b\x2c\xfc\xce\xe7\x27\x10\x91\x36\x93\x95\x3f\x46\x7d\
+\xa5\xfe\x12\xc4\x6f\xf4\x59\x31\xb6\x02\x7e\xef\x20\x5a\x7b\x9c\
+\xe0\x3f\x30\xa1\x4c\x28\x43\x46\x0e\x1b\xb2\x0e\xf9\x26\xd2\xf9\
+\xc5\x65\xcc\x2d\x2c\x21\x34\xbf\x88\xbd\x7b\xf7\x5a\xc9\x3b\x7e\
+\xba\x6d\x02\x24\x7e\x43\x90\x46\x3d\x35\x13\x69\x75\xb3\x80\xd2\
+\x3f\x0f\xcb\xc4\xe2\x9a\x50\xa1\x5a\xb4\x6c\xf1\x59\xa0\xb6\xa0\
+\xa6\x5d\x8d\x2f\xb2\x73\x71\xb7\x9e\xff\x0c\x31\x25\x9d\x09\xcd\
+\x63\x62\x6a\x06\x83\x43\x81\x27\xe4\xdd\xbc\x2d\xd3\xb0\x3b\x92\
+\x03\x33\x26\xd4\x53\xb5\xd3\xfb\x58\x4f\x88\xc5\x03\x21\x88\x2c\
+\x43\x50\xba\x46\xd0\xed\x09\x42\xe5\x9b\x42\x9b\x73\xfc\xa9\xcf\
+\x5a\x1b\xee\x2a\x74\xc8\xbc\xc9\x45\x09\xa7\x6c\x93\xcf\x9b\x88\
+\x27\xa7\x11\x18\x1d\xc3\x80\x6f\x08\xa2\xd6\xd6\x25\xc2\x51\xdb\
+\x28\x12\x87\xc6\x1f\xaf\x82\x2f\x62\x94\x4d\x89\x24\x90\x22\xea\
+\x52\x2d\x9a\x42\xab\xe8\x18\x79\x04\xa1\xc5\xcf\x10\x53\x74\xf6\
+\x0d\xa3\xd3\xe1\x87\xd4\x3c\x80\x16\xbd\x03\x0d\x5d\x06\x14\xd5\
+\x0a\x90\x91\x95\x0d\x2f\x79\xf1\xc6\xaa\xa9\xd4\xb3\x73\x0b\x4c\
+\xc5\x94\xd8\xdd\xef\x85\xc9\x62\x05\xb7\xbc\x12\xa5\xe5\x95\x4b\
+\x13\xf3\xcb\xab\x23\x0f\x01\x37\xd9\x11\xe6\xd9\x15\x84\x97\x15\
+\x13\x06\xcb\x3c\xd0\x68\xf2\xa3\xdd\xee\x5f\x27\x96\x3b\x86\x20\
+\xb3\x78\xd7\x7d\xe6\x08\xa4\xf8\x3c\x33\x1b\x2a\x8d\x36\xaa\xdc\
+\x53\x33\x21\x8c\x8e\x8d\x33\x15\xd3\x26\xe4\x37\x09\xf1\xc1\xc5\
+\x8f\x51\x73\xaf\x01\xbe\x65\x60\xfc\x11\xa0\x23\x13\x23\xf2\xce\
+\xa1\xbe\x5d\xb9\xb8\x51\x01\x83\x81\x74\x74\x4d\xa7\x1e\x0a\x67\
+\x80\xa9\xb8\xdd\xea\x83\xd8\xe8\x42\x93\xca\xcc\xf8\x7c\xe5\xcb\
+\x2c\x88\xda\x24\x51\x89\xa7\x67\xe7\x18\x1b\x86\x86\x47\x60\x77\
+\x38\x49\x82\x3a\x24\x7c\xf8\x21\xae\xb3\x0b\xe1\x99\x5c\x80\x6f\
+\x09\xd0\x90\xde\xe1\x0f\x2c\x81\xab\x1f\xc4\x7d\xef\x04\xdd\x07\
+\x1d\x61\xeb\xff\x9f\xc0\x1d\xb9\x16\x1d\xf6\x21\x48\xcc\xfd\x4f\
+\x7d\xee\xd4\x22\x9d\x55\x84\xaa\x9a\xba\x4d\x3e\x47\xe4\x8e\xf8\
+\x3c\x3c\x12\x84\xd3\xdd\x0f\xbd\xc1\x88\xc2\xe2\x62\x9c\x7e\x2f\
+\x1e\x3d\x03\x01\xf4\x2f\x02\x83\x84\xbc\xc5\xff\x2d\xee\x3a\x43\
+\x28\x51\x91\xf7\xf6\x05\xf1\x4e\xdc\xbf\x7d\x84\x33\x69\xe3\x20\
+\x18\xf4\x33\xab\xe0\xc9\x54\x68\x35\x38\xd1\xd8\xdd\x0b\x9e\x58\
+\x89\xac\x5c\xf6\x33\x3e\x47\xaa\x9e\x9c\x9e\x65\xe4\xee\xf7\x0e\
+\xa2\xd7\x6c\x41\x43\x03\x1f\x27\x62\xe3\x20\xe9\xd6\xc0\x45\xcf\
+\x01\x52\x90\x24\xb8\x86\xb2\x9e\x00\x6e\xb4\xdb\x50\xd1\x1b\x44\
+\x85\xce\x8b\x4a\x7e\x0b\x6d\xbe\x9b\x5b\x27\xd1\xa0\x99\xf8\x16\
+\x65\x22\x05\xee\x29\xf4\x28\x13\xc8\x90\x78\x35\x0b\x1a\xad\x3e\
+\xaa\xdc\x63\x13\x93\xf0\x0d\x0d\xc3\x66\xef\x83\xb4\x5d\x8e\xc4\
+\x4b\x97\x90\xc3\xca\xc3\xd4\x63\xc0\x4e\x7a\x49\x31\x4e\xfa\x89\
+\x94\x7f\x5b\x3b\x84\x7c\x85\x13\x25\x6a\x1f\x4a\xd5\x03\xe8\xf2\
+\x30\xa3\x28\x22\xf8\xf9\x33\x09\x74\x8f\x2e\xa1\xa8\xbe\x15\xa5\
+\x7c\x09\xb2\x4a\x2a\xf0\xcf\xe3\x71\x51\xe5\xf6\x07\x46\xd1\xe7\
+\xf2\x40\xab\x37\x20\xfd\x6a\x06\x92\xbf\x48\x83\xcd\x37\x02\x27\
+\xa9\xda\x40\x1a\x4c\xe0\x7b\x88\x52\x9d\x1f\x45\xdd\xfd\x0c\x71\
+\x41\x97\x1b\xc5\xdd\x1e\x88\x9c\x41\xfc\xf9\xcd\xb7\x5d\x84\xeb\
+\x6c\xb4\x43\xd0\x28\xf7\x4e\x23\xa7\xfc\x1e\xb2\x4b\xab\xf1\x51\
+\xea\x57\x48\xfe\x6f\xea\xfa\x58\x51\xb9\x47\x82\xe3\xf0\x0c\xf8\
+\x60\x34\x99\x51\xc9\xab\xc2\xfb\x67\xcf\x41\xfe\x40\x03\x3f\xe9\
+\x6e\xb2\x8d\x19\xb9\x6f\x69\x06\x19\xd2\x9b\x2a\x2f\x72\xe5\x0e\
+\xe4\x75\xf6\xa1\xf0\xbe\x1b\x1c\x95\x1b\xf9\x9c\xca\x29\xc2\x53\
+\xb8\xdd\x29\xdc\x2b\x76\x04\x90\x51\xc8\xc5\x95\x6b\x79\x38\x11\
+\x9f\x80\x9b\xb7\x6e\x33\x63\x15\x91\xdb\x6a\x73\x40\x22\x6d\xc7\
+\x85\x84\x0f\x50\x74\xbb\x0c\xf3\x2b\x80\x9f\x34\x58\xf7\x24\x20\
+\x1c\x7c\x84\x4a\xd3\x18\x38\xfa\x61\x86\x9c\x56\xfd\x55\xb3\x1e\
+\xac\x0e\x3b\xb8\x3a\x1f\xd9\x21\x1e\x7a\x2f\xe0\x13\xbc\xba\x5d\
+\x02\x26\xbe\xc1\x83\x94\x6f\xd8\x38\x9f\x9c\x8a\x03\x7f\x3d\x04\
+\x63\xaf\x99\xe9\x6e\x2a\xb7\x46\xd7\x83\xa4\xcb\xc9\x48\xff\x3a\
+\x8b\x8c\xd5\x3c\x53\xb5\x71\xf6\xa9\xdc\x35\xf6\x69\x5c\x97\x59\
+\x19\xd9\xbf\x6e\x21\xa7\xa0\xd4\x82\x74\xbe\x1a\x57\x9b\x34\x60\
+\xc9\xcc\x10\xbb\x82\xf8\xe5\xaf\x5f\xa7\x67\xc0\x3b\xe1\x75\x1f\
+\x35\xcc\x35\xdd\x66\x7c\x94\x96\x85\xb8\x73\x17\xf1\x97\x43\x31\
+\x4c\xd5\x74\x99\xf0\xaa\xaa\x71\xfa\xf4\x19\x68\xcc\x0e\x8c\x92\
+\x2d\x36\x14\x1e\xab\x5a\xc7\x0c\x78\xe6\x71\x70\x0d\x23\x4c\xa3\
+\x65\x8a\x0c\x8c\xec\xb4\xfa\x9c\xb6\x5e\x94\x74\x39\xd0\x66\xf7\
+\xaf\x1e\x3d\x11\x4b\x47\x2e\x6f\xc3\x79\x13\x35\x2c\x5c\x99\x1a\
+\xf1\x97\x3e\xc7\xd1\xd8\x33\xf8\x38\x31\x09\x86\x5e\x13\x1a\x9b\
+\x04\xf8\xdd\x1b\xfb\x51\x4f\xd4\xf1\x90\x99\xee\x9a\x00\xaa\xad\
+\x93\x60\x2b\x5d\x0c\x39\xf5\xbc\xf0\xbe\x67\xbd\xea\xcc\x16\x3d\
+\x4a\x55\x1e\x08\x6d\x01\x94\xd4\xf1\x43\xe1\x65\x53\x40\xf0\xca\
+\xf7\x25\x60\x2b\x6e\x6a\xc7\xa9\x84\x44\xc4\x1c\x39\x8a\xdc\x7c\
+\x36\x5a\x5a\xc5\x38\x14\x13\x83\x2f\x39\x35\xc8\x14\x6a\x98\xe6\
+\xa2\xd5\xd2\x27\xf5\x9a\x7a\x4c\x13\xa1\x49\x64\xb7\x99\x90\xdb\
+\x6e\x46\xb9\xda\x8d\x06\xa5\x76\x39\x2c\x39\x3d\xf9\x4e\x13\xec\
+\xd9\x72\xd4\x47\x0d\x3b\xab\x46\x88\x63\xff\x39\x8f\xdf\xee\xfb\
+\x3d\x1a\xf9\x02\x9c\xbf\x90\x80\x93\xf1\x17\x70\xa3\xad\x07\x19\
+\xc4\x4f\x4a\x14\xe9\x6e\xba\x58\xa8\xef\x2c\xfa\x94\x98\x50\x28\
+\xb7\x40\xe9\x0e\x3c\xf9\x57\xec\x29\x2a\x77\x2d\xc1\x67\x04\xfb\
+\xb6\xb9\xe4\x44\x8d\xbe\xcc\xb2\x5a\xfc\xe3\xe4\x19\x1c\x3c\xf4\
+\x37\xb0\x72\xf3\xb0\xef\xc0\x1f\x50\x20\xd1\x21\x89\x27\x65\x2a\
+\xa6\x4b\x85\x3e\xbf\x21\xd5\x46\xe4\x2e\x90\x5b\x21\xb0\x0c\xae\
+\xe5\xdc\xe2\xd2\x11\x13\x13\xe4\x87\x6f\x3c\xaf\x3c\xe7\x96\x15\
+\x35\x9c\x69\x45\xe5\xf8\xfb\xb1\x58\x1c\x3f\x19\x87\x37\xf6\xef\
+\xc7\x8d\x3a\x11\x92\xab\xa4\x0c\x21\xed\x70\xea\x35\x55\x21\x8b\
+\x34\x5b\xc9\x03\x37\x2a\x34\x6e\xd4\x49\x3a\x17\xc3\x72\x73\x08\
+\x8e\x6d\x95\xfb\x87\x24\xe0\x4a\x65\x73\x70\xe4\xf8\x29\x1c\x3e\
+\x7c\x98\x8c\x63\x2e\x32\x05\x2a\x5c\x22\xd5\xd3\x5d\x7e\x4d\xdc\
+\x0b\x36\xe9\x74\x76\xa7\x1d\x77\x8c\xe4\x88\xb6\xf9\x9e\x84\xb7\
+\x1a\x95\xfb\x22\xbd\x49\xfd\x80\x0b\x6d\xf4\x04\x32\x4a\x78\x4c\
+\x0f\x9c\x4b\x49\xc3\xb5\xa6\x2e\x7c\xc2\x6d\x65\x36\x59\xf1\x83\
+\x01\x5c\x97\x9a\xc1\x51\x7b\x20\xf3\x04\xd7\xce\x25\x26\x05\x36\
+\xc8\xfd\xc7\x9d\xc8\x1d\xd5\x82\xdc\x1a\x01\xce\x5e\x4e\x45\x81\
+\x58\x85\x78\xf6\x5d\x5c\xa9\x55\x90\xaa\xfb\xc0\x96\xdb\x50\xad\
+\x75\xe3\xae\x54\x41\x2f\x10\xca\x0d\x72\xbf\xba\xd3\x6a\xa3\x05\
+\xb7\xa2\x51\xf8\x1d\xaf\x43\x8d\x4f\xb9\x2d\x88\xcb\xe6\xe1\x9a\
+\x48\x8f\xaa\x1e\x2f\x9a\x35\xe6\xc7\x7f\x7a\xf3\x2d\x57\x78\xac\
+\xa8\xdc\xaf\xbd\xac\xdc\xd1\xe2\x08\xdd\x05\x5c\x75\x1f\xde\xcb\
+\xaf\x45\xb9\x76\x00\x32\x67\x60\xf5\xc2\xa7\x97\xa9\xdc\xf7\x08\
+\xd2\xa9\xdc\x3b\xf8\x03\xf3\xc2\xf1\x13\x82\xca\x1c\xee\x9d\x50\
+\x0b\x39\x94\xb8\x0d\xc2\xc8\x16\xa3\x17\x87\xc3\x2f\x22\xf7\x0e\
+\xff\xda\x6d\x8a\xdd\x61\x99\xd5\x1b\xb6\xd8\x6b\xbb\x5e\x32\xbe\
+\x2f\x89\xff\x01\x66\xb9\x5f\xfc\x11\x80\x3d\xcf\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x2b\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\xbd\x49\x44\x41\x54\x58\xc3\xed\
+\x57\x6b\x4c\x93\x57\x18\x3e\x23\x71\xc9\x32\xe9\x16\x97\xa8\x54\
+\x65\x38\x9d\x02\x15\xf6\x03\x87\x32\x93\x01\x66\x2c\x5b\x70\xc4\
+\x30\xff\x60\xa2\x2e\x1a\x3a\x1d\x4e\x03\xba\x31\x89\x5b\xb3\x80\
+\xd9\x0c\x84\x02\x19\x58\x1c\x14\x8b\x85\xb2\x82\x95\x5e\xe4\x66\
+\x0b\x8e\x31\xf8\xc3\x46\xcb\x2d\x81\x15\xdc\xa8\xc2\x1c\x1b\xb7\
+\x6a\x69\x91\xf2\xee\xbc\x87\xaf\x0c\xdc\xb8\x0d\x61\xd9\xb2\x93\
+\x3c\xed\x97\xf3\x7d\xfd\xde\xe7\xbc\xef\xf3\x5e\x4a\x00\x80\xfc\
+\x93\x20\xff\x0a\x02\x74\x09\x28\x44\x14\xd9\x14\x71\x14\x01\x2b\
+\x46\x80\xae\xdd\x64\xdd\xc6\x66\x22\x4c\xf8\x95\xc4\x8b\x47\xc8\
+\xa1\xd3\xf7\xc8\x8e\x97\x3b\x38\x32\x61\x2b\x41\x20\x85\x9c\xbe\
+\x30\x48\x2e\xdd\x80\x19\x40\x32\xab\x79\x4d\xf4\xbe\xfb\x72\x13\
+\x68\x64\x06\x91\x04\x5e\xa3\x51\xf4\x06\xee\x85\x47\xf5\xd0\xbd\
+\x83\xcb\x4d\x20\x9b\x9d\xf6\x40\x74\x2f\xbd\x16\x32\x3d\x20\x89\
+\x3f\x48\xa5\x2c\x1b\x01\x8c\x31\x79\xc1\xbb\x9d\x88\x4b\xc6\xd7\
+\xc6\x26\x0e\xa0\x10\xb9\xfd\x42\xfe\xc5\x2b\x36\x46\x8c\x12\x5c\
+\x4e\x02\x93\xa7\xa7\xa7\x0d\xcc\xd3\x39\xb9\x98\x63\x36\x14\x0a\
+\xd2\xe4\xa3\x2b\x41\x20\x8c\x29\x9e\x2a\xdf\x37\x47\xeb\xdc\x7b\
+\xb5\xcc\x89\x9e\x40\x44\x96\x54\x83\x2b\x2c\x0b\x36\x46\x48\x08\
+\x13\xf5\x64\x2a\x7b\x2e\x54\x03\x01\xf8\x03\x37\xbf\xc0\x0e\x34\
+\x2a\x54\xdf\x62\x88\x52\xd5\x2c\x58\x03\x74\x1d\x16\x08\x04\x7a\
+\x45\x55\xf5\xc8\xa0\x6d\x74\xc2\xd4\x73\xf7\x21\xbe\x73\x51\x95\
+\x90\xae\x8f\xd0\x13\xcf\xe5\x94\x83\x87\xb4\x02\x9e\xcc\x2e\x03\
+\xd4\x06\xdd\xaf\x99\xcb\xb0\xaf\xaf\xaf\x3e\xbf\xd2\x60\xb5\xdb\
+\xed\x80\xf8\x79\xe4\x3e\xc4\x5e\xab\xb4\xb9\x88\x2f\x86\x80\x27\
+\xd3\xc0\x67\xf9\x8e\x19\xf5\x60\xd7\x5e\x33\xba\x76\xda\x73\xee\
+\x68\xd8\xc7\xc7\x47\x9f\xab\xab\xb0\x0e\x0f\x0d\xc1\x10\x87\xb2\
+\xf6\x2e\xe7\x96\x37\xf7\x77\x73\x61\xd8\xbd\xe8\x5e\x80\x2f\x66\
+\x9a\xa0\x86\xdf\xa9\x36\x42\xf7\xf0\x03\xd8\x19\x9f\xd4\xcf\xa5\
+\xe7\x1a\x8a\x98\x2d\x7e\xfe\x6d\x97\x54\x1a\x6b\x5f\x5f\x1f\xb8\
+\xd0\xd1\x73\x07\x62\x72\x15\x56\x4e\xc4\x87\x97\xd4\x8c\x30\x14\
+\xe9\x15\xb7\x1e\x38\x1c\x0e\x40\xa4\xd6\x19\x31\x9e\x85\x9b\x05\
+\x7e\x6d\xa9\x25\x1a\x5b\x97\xd9\x0c\xe6\x2e\x0a\xf3\x24\x14\xdf\
+\x36\x8e\x7b\xbd\x1e\xd1\xcd\x42\xc8\x09\x6f\xa9\x04\x3c\xd1\xbd\
+\x56\xab\x15\x10\x77\x7f\x1b\x84\xf3\x92\x5c\xbb\x52\xa9\x84\xfa\
+\xfa\x7a\x30\x99\x4c\x0c\x75\xdf\x35\xc1\x51\xb1\x64\x18\xc9\x51\
+\x44\x3e\xb6\x76\xcc\xb4\x40\x4f\x93\x5f\x7e\xd3\xd6\xdf\xdf\x0f\
+\x32\x99\x0c\x44\x22\x11\xa8\x54\x2a\x90\x4a\xa5\xa0\xd1\x68\x20\
+\x4b\x5b\x39\xbe\xe9\x95\xe0\x1f\xb8\x53\xaf\x79\x2c\xf3\x00\x97\
+\x8e\x22\x9e\xc7\x86\xe6\x53\x29\x19\xf6\x82\x82\x02\xe6\xe2\xa0\
+\xa0\x20\xe0\xf1\x78\x60\xb1\x58\x40\x5b\x5e\x01\xfb\xcf\x26\x0c\
+\x2d\xa6\x53\xce\x67\x94\xcf\x09\x4c\x83\xe2\x5b\x7b\xe6\xc2\x60\
+\x9a\xb2\x14\x14\x0a\x05\x88\xc5\x62\xc8\xcc\xcc\x84\xa2\xa2\x22\
+\x50\xab\xd5\xd0\xd9\xd9\xc9\x60\xec\xfe\xc9\xb9\xc9\xdb\xa7\x75\
+\x2e\xb7\xcf\x4b\x80\xae\xb7\xd8\x29\x70\x0e\xc0\x6a\x97\xac\x78\
+\x88\xca\x7f\x82\xe2\x29\x89\x0e\x3e\x97\x2b\x21\x5b\x96\x0f\x07\
+\x63\xe3\x47\x84\x1f\x26\xd8\x92\x72\x64\x8e\x6f\x1a\xbf\x07\xa3\
+\xd1\x08\x2d\xad\x2d\xf0\xcb\xc0\x20\x1c\x38\xf1\xbe\x05\xb3\x62\
+\xc1\x04\x5c\x69\x84\x85\x85\x84\x46\xdc\x26\xe7\x32\xac\x2c\xcf\
+\x33\xb5\x13\xec\x3b\xe3\xba\xd3\x33\xaf\x82\xe5\xfe\x7a\x89\x06\
+\x9e\xde\xfc\x62\x1b\xf7\x3c\x92\x8d\x7b\x66\xab\x4f\x5b\xca\x35\
+\xed\x58\x43\x43\x3d\x34\x34\x34\x80\xa5\xb7\x17\x32\x14\xc5\xc3\
+\xf3\xe9\xc0\x65\x3c\x92\xe5\x28\x9e\x36\x5d\xe5\x9c\x2a\x32\x78\
+\x7d\xf4\x83\x2e\x5a\x6c\x12\x31\x0c\x1b\x25\xea\x71\xf7\x2f\xcb\
+\x27\xef\x05\x87\x5f\xfe\xd3\xe4\x44\x0b\x4c\x68\xf4\xc9\x3e\x75\
+\x95\x1e\x0c\x06\x03\xb4\xb7\xb7\xc3\xd7\xc6\x96\x31\xae\x81\x09\
+\x66\xf1\x36\x6d\x38\x68\x3c\x49\x3a\x3a\x65\xf8\x62\x81\x83\x44\
+\xbd\x57\x43\xb6\x0a\x5e\x9b\x2a\xc3\x94\x5c\xb0\x42\x0f\xab\x24\
+\xb4\x04\x9f\x4a\xaa\x9b\x43\x37\x31\x28\xd4\x4f\xf2\x0a\xc7\x74\
+\x3a\x1d\xd4\xd6\xd6\x82\xc9\x7c\xdb\xb9\x61\x9b\xf7\x5f\xea\x62\
+\xb2\xe5\x7e\x9c\x75\x1f\x0d\xf3\xb2\xd4\x4e\xf2\xf6\xb1\xeb\x2e\
+\xb6\xae\x94\xc3\x90\x6c\x97\x55\xc1\x4b\x57\xab\x80\x9c\x4d\x6e\
+\x5a\xd0\x1c\x49\xbd\xb1\xe7\x88\xb0\xef\xca\x57\xc5\x50\x5a\x5a\
+\x0a\x1d\x3f\xf6\x4c\x04\x06\x87\x74\x3c\xaa\x0b\xc2\x84\x46\x8d\
+\x07\xc8\x6f\x02\xd9\xf9\xaa\x7e\x9a\xf1\x30\x46\x8e\x36\x20\xaf\
+\xbc\x4a\x78\x43\x69\x00\x92\x28\x1d\x98\xcd\x95\xb3\x79\xc3\x7d\
+\x3d\xbf\xf9\x44\x6a\xa6\x5d\x2e\x97\x43\x53\x4b\x2b\x44\x1c\x7b\
+\xf7\xce\xf4\x14\x25\xae\xf1\x8a\xf5\x77\x9c\xf5\x70\x02\xc2\xd9\
+\x0f\x89\xd1\x81\x03\x4f\x8e\xf7\xdc\xd2\x69\xe7\xf3\xdf\x75\xfc\
+\x6f\x14\x2e\x36\xd2\xef\xd8\x17\x69\x49\xbe\x2c\x9d\xc8\xd3\x96\
+\x3b\xa7\x0f\x31\x8c\x25\xc6\xdf\x9f\xba\x77\x5f\x71\x35\xa0\x41\
+\x6c\xb5\x08\x8c\xf9\x94\xf1\xe0\xf0\x33\x4b\x9a\x7c\x68\x13\x5a\
+\xbd\xce\xa3\xd9\x6b\x4f\x48\xf7\x0c\x0f\xb0\x0f\xfe\xf3\x87\xc8\
+\xf9\x2f\xee\xb9\x49\x6e\x00\xf6\x7b\x3e\xed\xf7\x08\x1e\x2a\x3e\
+\x5d\xe5\x58\xaa\xf1\x47\x5a\xf5\xb6\x59\x0b\x11\x1d\xb3\x43\xc9\
+\x91\x38\x09\x39\xf9\xa9\x96\x21\xfa\x5c\x1a\x0d\xcf\xb3\xff\xff\
+\x37\xfc\x4f\x13\xf8\x1d\xe7\x87\x19\xb9\x44\xc3\x01\xcf\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x3a\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\xcc\x49\x44\x41\x54\x58\xc3\xb5\
+\x97\x5d\x4c\x5b\x65\x1c\xc6\x77\x6f\xbc\xd9\xe5\x12\x49\x20\x71\
+\xd7\x26\xe3\x4e\x13\xb8\x70\xd1\x85\x44\xbd\x50\xe3\x10\x18\xe5\
+\x2b\x2e\x26\x4a\x04\x27\x86\xaa\x8b\x99\xe0\xd0\xa2\x6c\x19\x86\
+\x39\x17\xdc\x1a\x16\x98\x80\x40\x6c\xa6\x43\xca\x20\x2b\x83\x1e\
+\x28\xcc\xda\xd1\x96\xd2\xd2\x4a\x7b\xfa\x01\xa5\xd0\xef\x16\x1e\
+\xdf\xff\xdb\x1d\xc7\xcc\x04\x2a\x87\x93\x3c\x39\x6f\x21\x9c\xe7\
+\xf7\x3c\xef\x47\x0f\x87\x00\x1c\xca\x46\xcf\xbd\xfa\xe9\xbb\x4c\
+\x5a\x26\x61\x0f\x6a\x60\xca\xd9\xe9\x79\xd9\x9a\x3f\x5d\x50\xf2\
+\xa5\xc1\xe9\x8f\xa7\x57\xc3\x40\x30\x02\x84\xa2\x19\xad\xc7\x32\
+\x8a\x27\x81\x58\x22\x73\xbf\x79\x6b\xda\x4b\x10\x72\x02\x1c\x7b\
+\xe7\xac\xda\x1c\xd8\xc8\x98\x12\x40\x84\x99\x85\xe3\x19\x91\x31\
+\x29\x1a\x4b\x61\x25\x94\x44\x38\x9a\x42\x73\x87\xc6\xbe\x13\xc4\
+\xff\x02\x90\x12\x93\x79\x24\xf1\xc8\x58\x92\xcf\x1f\x84\x5d\x8c\
+\xc2\xe5\x09\x22\x12\x4b\xa3\xf4\xc3\xef\x4d\x34\x75\x59\x01\xb0\
+\xeb\xd8\x36\xd5\x90\x9e\x3a\xfc\xcc\xb9\xe7\x5f\x2e\x11\x3f\x56\
+\x9e\x45\x45\x55\x0d\x2a\x99\xde\xaf\xad\xc3\x9d\xb1\x89\xc7\x00\
+\xac\xb6\x25\xfc\xb9\xe8\x87\x6b\x15\x58\xf6\x04\x10\x08\xc6\xd2\
+\xaf\x9c\xbe\x70\x9f\x41\x1c\xd9\x15\x80\x5d\x87\x99\x1a\x8a\x8a\
+\x8a\xcc\x92\x5a\x5b\x5b\xdd\xa4\xaf\x55\xad\xfe\xaf\x54\xdf\xa6\
+\x06\x06\x06\x31\x39\x35\x85\xd9\xb9\x39\xe8\x26\x26\x50\x50\x50\
+\x80\x21\xcd\x6f\x7c\xde\x49\xa6\xf9\x05\xcc\x98\x5c\x1c\xc0\xe1\
+\x4f\x41\xf4\x85\xf0\x43\xaf\xce\xcd\x00\x6a\xf6\x02\x50\x43\x66\
+\xd8\xe5\x8a\xc7\xe3\xf0\x7a\xbd\x48\xa7\xd3\x98\x9c\x9c\x44\x65\
+\x65\x35\x66\x67\x8d\xbc\x81\x07\x66\x1b\x74\xd3\x16\x0e\x40\x32\
+\x2d\x78\xf0\xdd\x8d\x51\x8f\xac\x00\xe1\x70\x18\x46\xa3\x91\x8f\
+\x53\xa9\x14\x7e\xea\xed\x45\xe3\x27\x9f\x61\x86\x41\x38\x96\xdc\
+\x50\x77\x75\xe3\x4c\x43\x23\xce\x35\x9d\xc7\xed\x91\x71\x5c\xbc\
+\x3e\x2c\x2f\xc0\xc6\xc6\x06\xf4\x7a\xfd\x63\x40\x7d\x7d\xfd\x50\
+\x32\x88\xd0\x46\x1c\x66\x9b\x0b\x82\xc1\x88\xa9\x19\x13\xac\x0e\
+\x11\x97\xba\x64\x6e\x80\x00\xa6\xd8\x3a\xd8\x7e\x45\x22\x11\x94\
+\x2b\x2a\x30\xae\x13\x40\xe7\x04\x6d\x57\xda\xaa\x34\xbe\x7c\x53\
+\xe6\x35\x40\x66\x3a\x9d\x0e\xc3\xc3\xc3\xe8\x65\xf5\xf7\xf7\xf7\
+\x43\xab\xd5\xa2\xaa\xba\x06\x63\x77\xf5\x90\x0e\x2a\x77\x90\xed\
+\x04\xb6\x0e\xda\xbb\x65\x06\xa0\x79\xb7\xdb\xed\x18\x1a\x1a\x42\
+\x67\x67\x27\x7a\x7a\x7a\x38\x50\x49\x69\x19\x6e\x69\xf5\x10\xd7\
+\x00\x6f\x08\xb0\xf9\x00\x67\x00\xb8\xd0\x25\x33\xc0\xd6\xd6\x16\
+\xdf\x09\x81\x40\x00\xa2\x28\xc2\xef\xf7\x63\x6d\x6d\x0d\xa7\x14\
+\x95\xd0\xfc\xae\xe7\xa9\xc9\x7c\xc1\x0b\x98\x3d\x40\x9b\xdc\x00\
+\xdb\x41\x36\x37\x37\xf9\x76\xa4\x56\x14\x15\xd5\xe8\xfb\x55\xe0\
+\xa9\x1d\x81\x47\x00\xe7\x3b\x0f\x00\x80\xcc\x25\x80\x24\x33\x4f\
+\x24\x12\x28\x2b\xaf\xe2\x00\x7f\xb8\x00\x8b\x98\x01\xa0\x36\x5a\
+\xd5\x07\x30\x05\xff\x98\x27\x93\x3c\x3d\x4d\x49\xc9\xa9\x4a\x0e\
+\xa0\xb7\xb3\x03\x89\x3d\xc5\xf8\x17\x30\xb1\x00\x7c\x71\xf5\x00\
+\x00\xa4\xea\xc9\x98\x14\x8b\xc5\x50\xa6\xa8\x82\x7a\x48\xc0\x98\
+\x19\xb8\x6b\x05\xe6\x9c\x99\xfb\xe7\x57\x64\x04\x90\xd2\x53\x6a\
+\x02\x88\x46\xa3\xdc\x3c\x14\x0a\xa1\xb8\xb4\x02\xd7\x06\x05\xdc\
+\x66\x87\xe4\xa0\x01\x1c\x64\xc4\x04\x28\x3b\x64\x06\x48\x3d\x9c\
+\x73\x12\x99\xd3\xb9\x40\x20\xc5\x65\x55\xb8\xd8\x2d\xa0\x7f\x3a\
+\x63\xae\x7d\x90\x69\xe0\xa3\x76\x99\x00\xfe\x5d\x3d\xa5\x26\xad\
+\xae\xae\x72\x88\xb7\x4a\x2a\x70\xb9\x57\xc0\x3d\x1b\xb8\x7e\x9e\
+\x01\xee\xcc\x03\x67\x2e\xed\x13\x40\xaa\x9d\x44\x8b\x8e\x92\xd3\
+\x71\x4c\xdf\x01\x2b\x2b\x2b\x58\x5f\x5f\xe7\x10\x27\x59\x03\xdf\
+\x74\x09\x50\x4f\x00\xbf\xcc\x65\x1a\xb8\x32\x06\x34\xec\xa7\x01\
+\xc9\x58\xda\xeb\x64\x4e\x69\x29\x39\x1d\x44\x04\x40\xf5\xd3\xcf\
+\xde\x7c\x5b\x81\x96\xeb\x02\x4f\x7e\x75\x1c\xb8\x71\x0f\xf8\x71\
+\x2c\x9e\x7e\xbd\x4e\x6d\xa6\x37\xaa\xac\x00\x9e\x64\x2c\x6d\x37\
+\x32\x25\x00\xd1\x23\xf2\xe4\x12\xcc\x1b\x27\x15\x68\xef\x11\xa0\
+\xbc\x66\x5b\x7f\x4f\x35\xe2\x3c\x71\x9a\xbf\x8e\x69\xf7\xfc\x4a\
+\x26\x01\x90\xa9\x24\x69\xb5\x53\x42\x32\x0f\x06\x83\x70\xb9\x5c\
+\xdc\x90\x5e\x4a\xe8\xb3\xc7\xe3\x81\xdb\xed\xc6\xf1\x13\xaf\x25\
+\x9f\x7d\xa1\x9c\x4c\x3b\x98\x8a\x99\x8e\x3e\xc9\x78\x47\x00\x95\
+\x4a\xc5\x01\xa4\x15\x2e\xcd\x37\x19\x52\x52\x3a\xf7\x29\xb5\xc3\
+\xe1\xe0\x22\xe3\xc5\xc5\x45\x0e\xf5\xe2\xf1\x97\x5c\xf4\x1e\xb9\
+\x93\xe9\xae\x00\x2d\x2d\x2d\x6e\xe9\x60\xa1\xd4\xd2\x97\x0d\x8d\
+\x97\x97\x97\xe1\xf3\xf9\x60\xb3\xd9\xf8\x7d\x69\x69\x89\x43\x10\
+\x00\x8d\x0b\x0b\x0b\xcd\xb2\x00\xd0\xa2\x92\x52\x93\x11\x8d\xe9\
+\x4e\xdf\x78\x54\x3b\x35\x60\xb5\x5a\x79\xf5\xd4\x0a\xfd\xce\x60\
+\x30\x24\xf2\xf2\xf2\xee\xb3\x67\x1c\xd9\x17\x40\x53\x53\x93\x5b\
+\x9a\x67\x4a\x4f\x22\x13\xaa\x9a\xc6\x16\x8b\x99\x37\x40\x9f\x47\
+\x47\x47\x23\x6d\x6d\x6d\xde\xfc\xfc\x7c\x13\xfb\xdb\x41\xa6\xb2\
+\xbd\x9a\xff\x27\x40\x73\x73\x33\x9f\x02\x4a\x47\x10\x54\x3f\x55\
+\x3f\x3f\x3f\xcf\xeb\xd6\x68\x34\x91\xba\xba\x3a\xe7\xc3\xb4\x5d\
+\x4c\x1f\x30\x1d\xcd\xc6\x78\x47\x00\xa5\x52\xe9\x76\x3a\x9d\xbc\
+\x62\x4a\x4a\x6f\x3e\x94\xb4\xbe\xbe\xde\x99\x93\x93\x23\x99\x16\
+\x67\x53\x75\x56\x00\x8d\x8d\x8d\x6e\x8b\xc5\x82\x81\x81\x81\x48\
+\x6d\x6d\xad\x33\x37\x37\x57\x56\xd3\xdd\x00\xf8\x7f\x46\x4c\xc2\
+\x41\x99\x6e\xd7\xdf\x43\x39\x56\x18\x85\x70\xc8\x04\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x07\
+\x04\xca\x57\xa7\
+\x00\x6e\
+\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0a\xa8\xba\x47\
+\x00\x70\
+\x00\x61\x00\x73\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x08\xc8\x58\x67\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x06\xc1\x59\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x07\
+\x0a\xc7\x57\x87\
+\x00\x63\
+\x00\x75\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x06\x7c\x5a\x07\
+\x00\x63\
+\x00\x6f\x00\x70\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xbc\
+\x00\x00\x00\x54\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x70\
+\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x09\xc9\
+\x00\x00\x00\x26\x00\x00\x00\x00\x00\x01\x00\x00\x03\x58\
+\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x16\x8d\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/mainwindows/separations.py b/examples/mainwindows/separations.py
new file mode 100755
index 0000000..b75933b
--- /dev/null
+++ b/examples/mainwindows/separations.py
@@ -0,0 +1,486 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (pyqtSignal, QBuffer, QByteArray, QFileInfo,
+        QIODevice, QMimeData, QPoint, QSize, Qt)
+from PyQt5.QtGui import (qBlue, QColor, QDrag, qGreen, QImage, QKeySequence,
+        QPalette, QPixmap, qRed)
+from PyQt5.QtWidgets import (QApplication, QColorDialog, QFileDialog, QFrame,
+        QGridLayout, QLabel, QLayout, QMainWindow, QMenu, QMessageBox,
+        QPushButton, QVBoxLayout)
+
+
+class FinalWidget(QFrame):
+
+    def __init__(self, parent, name, labelSize):
+        super(FinalWidget, self).__init__(parent)
+
+        self.dragStartPosition = QPoint()
+
+        self.hasImage = False
+        self.imageLabel = QLabel()
+        self.imageLabel.setFrameShadow(QFrame.Sunken)
+        self.imageLabel.setFrameShape(QFrame.StyledPanel)
+        self.imageLabel.setMinimumSize(labelSize)
+        self.nameLabel = QLabel(name)
+
+        layout = QVBoxLayout()
+        layout.addWidget(self.imageLabel, 1)
+        layout.addWidget(self.nameLabel, 0)
+        self.setLayout(layout)
+
+    def mouseMoveEvent(self, event):
+        """ If the mouse moves far enough when the left mouse button is held
+            down, start a drag and drop operation.
+        """
+        if not event.buttons() & Qt.LeftButton:
+            return
+
+        if (event.pos() - self.dragStartPosition).manhattanLength() \
+             < QApplication.startDragDistance():
+            return
+
+        if not self.hasImage:
+            return
+
+        drag = QDrag(self)
+        mimeData = QMimeData()
+
+        output = QByteArray()
+        outputBuffer = QBuffer(output)
+        outputBuffer.open(QIODevice.WriteOnly)
+        self.imageLabel.pixmap().toImage().save(outputBuffer, 'PNG')
+        outputBuffer.close()
+        mimeData.setData('image/png', output)
+
+        drag.setMimeData(mimeData)
+        drag.setPixmap(self.imageLabel.pixmap().scaled(64, 64, Qt.KeepAspectRatio))
+        drag.setHotSpot(QPoint(drag.pixmap().width() / 2,
+                                      drag.pixmap().height()))
+        drag.start()
+
+    def mousePressEvent(self, event):
+        """ Check for left mouse button presses in order to enable drag and
+            drop.
+        """
+        if event.button() == Qt.LeftButton:
+            self.dragStartPosition = event.pos()
+
+    def pixmap(self):
+        return self.imageLabel.pixmap()
+
+    def setPixmap(self, pixmap):
+        self.imageLabel.setPixmap(pixmap)
+        self.hasImage = True
+
+
+class ScreenWidget(QFrame):
+    # Separation.
+    Cyan, Magenta, Yellow = range(3)
+
+    convertMap = {
+        Cyan: qRed,
+        Magenta: qGreen,
+        Yellow: qBlue,
+    }
+
+    imageChanged = pyqtSignal()
+
+    def __init__(self, parent, initialColor, name, mask, labelSize):
+        """ Initializes the paint color, the mask color (cyan, magenta, or
+        yellow), connects the color selector and invert checkbox to functions,
+        and creates a two-by-two grid layout.
+        """
+        super(ScreenWidget, self).__init__(parent)
+
+        self.originalImage = QImage()
+        self.newImage = QImage()
+
+        self.paintColor = initialColor
+        self.maskColor = mask
+        self.inverted = False
+
+        self.imageLabel = QLabel()
+        self.imageLabel.setFrameShadow(QFrame.Sunken)
+        self.imageLabel.setFrameShape(QFrame.StyledPanel)
+        self.imageLabel.setMinimumSize(labelSize)
+
+        self.nameLabel = QLabel(name)
+        self.colorButton = QPushButton("Modify...")
+        self.colorButton.setBackgroundRole(QPalette.Button)
+        self.colorButton.setMinimumSize(32, 32)
+
+        palette = QPalette(self.colorButton.palette())
+        palette.setColor(QPalette.Button, initialColor)
+        self.colorButton.setPalette(palette)
+
+        self.invertButton = QPushButton("Invert")
+        self.invertButton.setEnabled(False)
+
+        self.colorButton.clicked.connect(self.setColor)
+        self.invertButton.clicked.connect(self.invertImage)
+
+        gridLayout = QGridLayout()
+        gridLayout.addWidget(self.imageLabel, 0, 0, 1, 2)
+        gridLayout.addWidget(self.nameLabel, 1, 0)
+        gridLayout.addWidget(self.colorButton, 1, 1)
+        gridLayout.addWidget(self.invertButton, 2, 1, 1, 1)
+        self.setLayout(gridLayout)
+
+    def createImage(self):
+        """ Creates a new image by separating out the cyan, magenta, or yellow
+            component, depending on the mask color specified in the constructor.
+            The amount of the component found in each pixel of the image is used
+            to determine how much of a user-selected ink is used for each pixel
+            in the new image for the label widget.
+        """
+        self.newImage = newImage = self.originalImage.copy()
+
+        # Create CMY components for the ink being used.
+        cyanInk = float(255 - QColor(self.paintColor).red()) / 255.0
+        magentaInk = float(255 - QColor(self.paintColor).green()) / 255.0
+        yellowInk = float(255 - QColor(self.paintColor).blue()) / 255.0
+
+        convert = self.convertMap[self.maskColor]
+
+        for y in range(newImage.height()):
+            for x in range(newImage.width()):
+                p = self.originalImage.pixel(x, y)
+
+                # Separate the source pixel into its cyan component.
+                if self.inverted:
+                    amount = convert(p)
+                else:
+                    amount = 255 - convert(p)
+
+                newColor = QColor(
+                    255 - min(int(amount * cyanInk), 255),
+                    255 - min(int(amount * magentaInk), 255),
+                    255 - min(int(amount * yellowInk), 255))
+
+                newImage.setPixel(x, y, newColor.rgb())
+
+        self.imageLabel.setPixmap(QPixmap.fromImage(newImage))
+
+    def image(self):
+        """ Returns a reference to the modified image. """
+        return self.newImage
+
+    def invertImage(self):
+        """ Sets whether the amount of ink applied to the canvas is to be
+            inverted (subtracted from the maximum value) before the ink is
+            applied.
+        """
+        self.inverted = not self.inverted
+        self.createImage()
+        self.imageChanged.emit()
+
+    def setColor(self):
+        """ Separate the current image into cyan, magenta, and yellow
+            components.  Create a representation of how each component might
+            appear when applied to a blank white piece of paper.
+        """
+        newColor = QColorDialog.getColor(self.paintColor)
+
+        if newColor.isValid():
+            self.paintColor = newColor
+            palette = QPalette(self.colorButton.palette())
+            palette.setColor(QPalette.Button, self.paintColor)
+            self.colorButton.setPalette(palette)
+            self.createImage()
+            self.imageChanged.emit()
+
+    def setImage(self, image):
+        """ Records the original image selected by the user, creates a color
+            separation, and enables the invert image checkbox.
+        """
+        self.originalImage = image
+        self.createImage()
+        self.invertButton.setEnabled(True)
+
+
+class Viewer(QMainWindow):
+    # Brightness.
+    Gloom, Quarter, Half, ThreeQuarters, Full = range(5)
+
+    # Brightness value map.
+    brightnessValueMap = {
+        Gloom: 0,
+        Quarter: 64,
+        Half: 128,
+        ThreeQuarters: 191,
+        Full: 255,
+    }
+
+    def __init__(self):
+        """ Constructor initializes a default value for the brightness, creates
+            the main menu entries, and constructs a central widget that contains
+            enough space for images to be displayed.
+        """
+        super(Viewer, self).__init__()
+
+        self.scaledImage = QImage()
+        self.menuMap = {}
+        self.path = ''
+        self.brightness = 255
+
+        self.setWindowTitle("QImage Color Separations")
+
+        self.createMenus()
+        self.setCentralWidget(self.createCentralWidget())
+
+    def createMenus(self):
+        """ Creates a main menu with two entries: a File menu, to allow the image
+            to be selected, and a Brightness menu to allow the brightness of the
+            separations to be changed.
+            Initially, the Brightness menu items are disabled, but the first entry in
+            the menu is checked to reflect the default brightness.
+        """
+        self.fileMenu = QMenu("&File", self)
+        self.brightnessMenu = QMenu("&Brightness", self)
+
+        self.openAction = self.fileMenu.addAction("&Open...")
+        self.openAction.setShortcut(QKeySequence('Ctrl+O'))
+        self.saveAction = self.fileMenu.addAction("&Save...")
+        self.saveAction.setShortcut(QKeySequence('Ctrl+S'))
+        self.saveAction.setEnabled(False)
+        self.quitAction = self.fileMenu.addAction("E&xit")
+        self.quitAction.setShortcut(QKeySequence('Ctrl+Q'))
+
+        self.noBrightness = self.brightnessMenu.addAction("&0%")
+        self.noBrightness.setCheckable(True)
+        self.quarterBrightness = self.brightnessMenu.addAction("&25%")
+        self.quarterBrightness.setCheckable(True)
+        self.halfBrightness = self.brightnessMenu.addAction("&50%")
+        self.halfBrightness.setCheckable(True)
+        self.threeQuartersBrightness = self.brightnessMenu.addAction("&75%")
+        self.threeQuartersBrightness.setCheckable(True)
+        self.fullBrightness = self.brightnessMenu.addAction("&100%")
+        self.fullBrightness.setCheckable(True)
+
+        self.menuMap[self.noBrightness] = self.Gloom
+        self.menuMap[self.quarterBrightness] = self.Quarter
+        self.menuMap[self.halfBrightness] = self.Half
+        self.menuMap[self.threeQuartersBrightness] = self.ThreeQuarters
+        self.menuMap[self.fullBrightness] = self.Full
+
+        self.currentBrightness = self.fullBrightness
+        self.currentBrightness.setChecked(True)
+        self.brightnessMenu.setEnabled(False)
+
+        self.menuBar().addMenu(self.fileMenu)
+        self.menuBar().addMenu(self.brightnessMenu)
+
+        self.openAction.triggered.connect(self.chooseFile)
+        self.saveAction.triggered.connect(self.saveImage)
+        self.quitAction.triggered.connect(QApplication.instance().quit)
+        self.brightnessMenu.triggered.connect(self.setBrightness)
+
+    def createCentralWidget(self):
+        """ Constructs a central widget for the window consisting of a two-by-two
+            grid of labels, each of which will contain an image. We restrict the
+            size of the labels to 256 pixels, and ensure that the window cannot
+            be resized.
+        """
+        frame = QFrame(self)
+        grid = QGridLayout(frame)
+        grid.setSpacing(8)
+        grid.setContentsMargins(4, 4, 4, 4)
+
+        self.layout().setSizeConstraint(QLayout.SetFixedSize)
+
+        labelSize = QSize(256, 256)
+
+        self.finalWidget = FinalWidget(frame, "Final image", labelSize)
+
+        self.cyanWidget = ScreenWidget(frame, Qt.cyan, "Cyan",
+                ScreenWidget.Cyan, labelSize)
+        self.magentaWidget = ScreenWidget(frame, Qt.magenta, "Magenta",
+                ScreenWidget.Magenta, labelSize)
+        self.yellowWidget = ScreenWidget(frame, Qt.yellow, "Yellow",
+                ScreenWidget.Yellow, labelSize)
+
+        self.cyanWidget.imageChanged.connect(self.createImage)
+        self.magentaWidget.imageChanged.connect(self.createImage)
+        self.yellowWidget.imageChanged.connect(self.createImage)
+
+        grid.addWidget(self.finalWidget, 0, 0, Qt.AlignTop | Qt.AlignHCenter)
+        grid.addWidget(self.cyanWidget, 0, 1, Qt.AlignTop | Qt.AlignHCenter)
+        grid.addWidget(self.magentaWidget, 1, 0, Qt.AlignTop | Qt.AlignHCenter)
+        grid.addWidget(self.yellowWidget, 1, 1, Qt.AlignTop | Qt.AlignHCenter)
+
+        return frame
+
+    def chooseFile(self):
+        """ Provides a dialog window to allow the user to specify an image file.
+            If a file is selected, the appropriate function is called to process
+            and display it.
+        """
+        imageFile, _ = QFileDialog.getOpenFileName(self,
+                "Choose an image file to open", self.path, "Images (*.*)")
+
+        if imageFile != '':
+            self.openImageFile(imageFile)
+            self.path = imageFile
+
+    def setBrightness(self, action):
+        """ Changes the value of the brightness according to the entry selected in the
+            Brightness menu. The selected entry is checked, and the previously selected
+            entry is unchecked.
+            The color separations are updated to use the new value for the brightness.
+        """
+        if action not in self.menuMap or self.scaledImage.isNull():
+            return
+
+        self.brightness = self.brightnessValueMap.get(self.menuMap[action])
+        if self.brightness is None:
+            return
+
+        self.currentBrightness.setChecked(False)
+        self.currentBrightness = action
+        self.currentBrightness.setChecked(True)
+
+        self.createImage()
+
+    def openImageFile(self, imageFile):
+        """ Load the image from the file given, and create four pixmaps based
+            on the original image.
+            The window caption is set, and the Brightness menu enabled if the image file
+            can be loaded.
+        """
+        originalImage = QImage()
+
+        if originalImage.load(imageFile):
+            self.setWindowTitle(imageFile)
+            self.saveAction.setEnabled(True)
+            self.brightnessMenu.setEnabled(True)
+
+            self.scaledImage = originalImage.scaled(256, 256, Qt.KeepAspectRatio)
+
+            self.cyanWidget.setImage(self.scaledImage)
+            self.magentaWidget.setImage(self.scaledImage)
+            self.yellowWidget.setImage(self.scaledImage)
+            self.createImage()
+        else:
+            QMessageBox.warning(self, "Cannot open file",
+                    "The selected file could not be opened.",
+                    QMessageBox.Cancel, QMessageBox.NoButton,
+                    QMessageBox.NoButton)
+
+    def createImage(self):
+        """ Creates an image by combining the contents of the three screens
+            to present a page preview.
+            The image associated with each screen is separated into cyan,
+            magenta, and yellow components. We add up the values for each
+            component from the three screen images, and subtract the totals
+            from the maximum value for each corresponding primary color.
+        """
+        newImage = self.scaledImage.copy()
+
+        image1 = self.cyanWidget.image()
+        image2 = self.magentaWidget.image()
+        image3 = self.yellowWidget.image()
+        darkness = 255 - self.brightness
+
+        for y in range(newImage.height()):
+            for x in range(newImage.width()):
+                # Create three screens, using the quantities of the source CMY
+                # components to determine how much of each of the inks are to
+                # be put on each screen.
+                p1 = image1.pixel(x, y)
+                cyan1 = float(255 - qRed(p1))
+                magenta1 = float(255 - qGreen(p1))
+                yellow1 = float(255 - qBlue(p1))
+
+                p2 = image2.pixel(x, y)
+                cyan2 = float(255 - qRed(p2))
+                magenta2 = float(255 - qGreen(p2))
+                yellow2 = float(255 - qBlue(p2))
+
+                p3 = image3.pixel(x, y)
+                cyan3 = float(255 - qRed(p3))
+                magenta3 = float(255 - qGreen(p3))
+                yellow3 = float(255 - qBlue(p3))
+
+                newColor = QColor(
+                    max(255 - int(cyan1 + cyan2 + cyan3) - darkness, 0),
+                    max(255 - int(magenta1 + magenta2 + magenta3) - darkness, 0),
+                    max(255 - int(yellow1 + yellow2 + yellow3) - darkness, 0))
+
+                newImage.setPixel(x, y, newColor.rgb())
+
+        self.finalWidget.setPixmap(QPixmap.fromImage(newImage))
+
+    def saveImage(self):
+        """ Provides a dialog window to allow the user to save the image file.
+        """
+        imageFile, _ = QFileDialog.getSaveFileName(self,
+                "Choose a filename to save the image", "", "Images (*.png)")
+
+        info = QFileInfo(imageFile)
+
+        if info.baseName() != '':
+            newImageFile = QFileInfo(info.absoluteDir(),
+                    info.baseName() + '.png').absoluteFilePath()
+
+            if not self.finalWidget.pixmap().save(newImageFile, 'PNG'):
+                QMessageBox.warning(self, "Cannot save file",
+                        "The file could not be saved.",
+                        QMessageBox.Cancel, QMessageBox.NoButton,
+                        QMessageBox.NoButton)
+        else:
+            QMessageBox.warning(self, "Cannot save file",
+                    "Please enter a valid filename.", QMessageBox.Cancel,
+                    QMessageBox.NoButton, QMessageBox.NoButton)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Viewer()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/multimedia/README b/examples/multimedia/README
new file mode 100644
index 0000000..a51c002
--- /dev/null
+++ b/examples/multimedia/README
@@ -0,0 +1,22 @@
+PyQt contains classes that provide support for audio, video, radio and cameras.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/multimedia/audiodevices/audiodevices.py b/examples/multimedia/audiodevices/audiodevices.py
new file mode 100755
index 0000000..840f5d6
--- /dev/null
+++ b/examples/multimedia/audiodevices/audiodevices.py
@@ -0,0 +1,279 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtMultimedia import QAudio, QAudioDeviceInfo, QAudioFormat
+from PyQt5.QtWidgets import QApplication, QTableWidgetItem, QMainWindow
+
+from ui_audiodevicesbase import Ui_AudioDevicesBase
+
+
+class AudioDevicesBase(QMainWindow, Ui_AudioDevicesBase):
+
+    def __init__(self, parent=None):
+        super(AudioDevicesBase, self).__init__(parent)
+
+        self.setupUi(self)
+
+
+class AudioTest(AudioDevicesBase):
+
+    def __init__(self, parent=None):
+        super(AudioTest, self).__init__(parent)
+
+        self.deviceInfo = QAudioDeviceInfo()
+        self.settings = QAudioFormat()
+        self.mode = QAudio.AudioOutput
+
+        self.testButton.clicked.connect(self.test)
+        self.modeBox.activated.connect(self.modeChanged)
+        self.deviceBox.activated.connect(self.deviceChanged)
+        self.sampleRateBox.activated.connect(self.sampleRateChanged)
+        self.channelsBox.activated.connect(self.channelChanged)
+        self.codecsBox.activated.connect(self.codecChanged)
+        self.sampleSizesBox.activated.connect(self.sampleSizeChanged)
+        self.sampleTypesBox.activated.connect(self.sampleTypeChanged)
+        self.endianBox.activated.connect(self.endianChanged)
+        self.populateTableButton.clicked.connect(self.populateTable)
+
+        self.modeBox.setCurrentIndex(0)
+        self.modeChanged(0)
+        self.deviceBox.setCurrentIndex(0)
+        self.deviceChanged(0)
+
+    def test(self):
+        self.testResult.clear()
+
+        if not self.deviceInfo.isNull():
+            if self.deviceInfo.isFormatSupported(self.settings):
+                self.testResult.setText("Success")
+                self.nearestSampleRate.setText("")
+                self.nearestChannel.setText("")
+                self.nearestCodec.setText("")
+                self.nearestSampleSize.setText("")
+                self.nearestSampleType.setText("")
+                self.nearestEndian.setText("")
+            else:
+                nearest = self.deviceInfo.nearestFormat(self.settings)
+                self.testResult.setText("Failed")
+                self.nearestSampleRate.setText(str(nearest.sampleRate()))
+                self.nearestChannel.setText(str(nearest.channelCount()))
+                self.nearestCodec.setText(nearest.codec())
+                self.nearestSampleSize.setText(str(nearest.sampleSize()))
+                self.nearestSampleType.setText(
+                        self.sampleTypeToString(nearest.sampleType()))
+                self.nearestEndian.setText(
+                        self.endianToString(nearest.byteOrder()))
+        else:
+            self.testResult.setText("No Device")
+
+    sampleTypeMap = {
+        QAudioFormat.SignedInt: "SignedInt",
+        QAudioFormat.UnSignedInt: "UnSignedInt",
+        QAudioFormat.Float: "Float"
+    }
+
+    @classmethod
+    def sampleTypeToString(cls, sampleType):
+        return cls.sampleTypeMap.get(sampleType, "Unknown")
+
+    endianMap = {
+        QAudioFormat.LittleEndian: "LittleEndian",
+        QAudioFormat.BigEndian: "BigEndian"
+    }
+
+    @classmethod
+    def endianToString(cls, endian):
+        return cls.endianMap.get(endian, "Unknown")
+
+    def modeChanged(self, idx):
+        self.testResult.clear()
+
+        if idx == 0:
+            self.mode = QAudio.AudioInput
+        else:
+            self.mode = QAudio.AudioOutput
+
+        self.deviceBox.clear()
+        for deviceInfo in QAudioDeviceInfo.availableDevices(self.mode):
+            self.deviceBox.addItem(deviceInfo.deviceName(), deviceInfo)
+
+        self.deviceBox.setCurrentIndex(0)
+        self.deviceChanged(0)
+
+    def deviceChanged(self, idx):
+        self.testResult.clear()
+
+        if self.deviceBox.count() == 0:
+            return
+
+        self.deviceInfo = self.deviceBox.itemData(idx)
+
+        self.sampleRateBox.clear()
+        sampleRatez = self.deviceInfo.supportedSampleRates()
+        self.sampleRateBox.addItems([str(sr) for sr in sampleRatez])
+        if len(sampleRatez) != 0:
+            self.settings.setSampleRate(sampleRatez[0])
+
+        self.channelsBox.clear()
+        chz = self.deviceInfo.supportedChannelCounts()
+        self.channelsBox.addItems([str(ch) for ch in chz])
+        if len(chz) != 0:
+            self.settings.setChannelCount(chz[0])
+
+        self.codecsBox.clear()
+        codecs = self.deviceInfo.supportedCodecs()
+        self.codecsBox.addItems([str(c) for c in codecs])
+        if len(codecs) != 0:
+            self.settings.setCodec(codecs[0])
+
+        # Create a failed condition.
+        self.codecsBox.addItem("audio/test")
+
+        self.sampleSizesBox.clear()
+        sampleSizez = self.deviceInfo.supportedSampleSizes()
+        self.sampleSizesBox.addItems([str(ss) for ss in sampleSizez])
+        if len(sampleSizez) != 0:
+            self.settings.setSampleSize(sampleSizez[0])
+
+        self.sampleTypesBox.clear()
+        sampleTypez = self.deviceInfo.supportedSampleTypes()
+        self.sampleTypesBox.addItems(
+                [self.sampleTypeToString(st) for st in sampleTypez])
+        if len(sampleTypez) != 0:
+            self.settings.setSampleType(sampleTypez[0])
+
+        self.endianBox.clear()
+        endianz = self.deviceInfo.supportedByteOrders()
+        self.endianBox.addItems([self.endianToString(e) for e in endianz])
+        if len(endianz) != 0:
+            self.settings.setByteOrder(endianz[0])
+
+        self.allFormatsTable.clearContents()
+
+    def populateTable(self):
+        row = 0
+        format = QAudioFormat()
+
+        for codec in self.deviceInfo.supportedCodecs():
+            format.setCodec(codec)
+
+            for sampleRate in self.deviceInfo.supportedSampleRates():
+                format.setSampleRate(sampleRate)
+
+                for channels in self.deviceInfo.supportedChannelCounts():
+                    format.setChannelCount(channels)
+
+                    for sampleType in self.deviceInfo.supportedSampleTypes():
+                        format.setSampleType(sampleType)
+
+                        for sampleSize in self.deviceInfo.supportedSampleSizes():
+                            format.setSampleSize(sampleSize)
+
+                            for endian in self.deviceInfo.supportedByteOrders():
+                                format.setByteOrder(endian)
+
+                                if self.deviceInfo.isFormatSupported(format):
+                                    self.allFormatsTable.setRowCount(row + 1)
+
+                                    self.setFormatValue(row, 0, format.codec())
+                                    self.setFormatValue(row, 1,
+                                            str(format.sampleRate()))
+                                    self.setFormatValue(row, 2,
+                                            str(format.channelCount()))
+                                    self.setFormatValue(row, 3,
+                                            self.sampleTypeToString(
+                                                    format.sampleType()))
+                                    self.setFormatValue(row, 4,
+                                            str(format.sampleSize()))
+                                    self.setFormatValue(row, 5,
+                                            self.endianToString(
+                                                    format.byteOrder()))
+
+                                    row += 1
+
+    def setFormatValue(self, row, column, value):
+        self.allFormatsTable.setItem(row, column, QTableWidgetItem(value))
+
+    def sampleRateChanged(self, idx):
+        self.settings.setSampleRate(int(self.sampleRateBox.itemText(idx)))
+
+    def channelChanged(self, idx):
+        self.settings.setChannelCount(int(self.channelsBox.itemText(idx)))
+
+    def codecChanged(self, idx):
+        self.settings.setCodec(self.codecsBox.itemText(idx))
+
+    def sampleSizeChanged(self, idx):
+        self.settings.setSampleSize(int(self.sampleSizesBox.itemText(idx)))
+
+    def sampleTypeChanged(self, idx):
+        sampleType = int(self.sampleTypesBox.itemText(idx))
+
+        if sampleType == QAudioFormat.SignedInt:
+            self.settings.setSampleType(QAudioFormat.SignedInt)
+        elif sampleType == QAudioFormat.UnSignedInt:
+            self.settings.setSampleType(QAudioFormat.UnSignedInt)
+        elif sampleType == QAudioFormat.Float:
+            self.settings.setSampleType(QAudioFormat.Float)
+
+    def endianChanged(self, idx):
+        endian = int(self.endianBox.itemText(idx))
+
+        if endian == QAudioFormat.LittleEndian:
+            self.settings.setByteOrder(QAudioFormat.LittleEndian)
+        elif endian == QAudioFormat.BigEndian:
+            self.settings.setByteOrder(QAudioFormat.BigEndian)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    app.setApplicationName("Audio Device Test")
+
+    audio = AudioTest()
+    audio.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/multimedia/audiodevices/audiodevicesbase.ui b/examples/multimedia/audiodevices/audiodevicesbase.ui
new file mode 100644
index 0000000..5a4ef2d
--- /dev/null
+++ b/examples/multimedia/audiodevices/audiodevicesbase.ui
@@ -0,0 +1,390 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AudioDevicesBase</class>
+ <widget class="QMainWindow" name="AudioDevicesBase">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>679</width>
+    <height>598</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Audio Devices</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <item>
+     <widget class="QScrollArea" name="scrollArea">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="widgetResizable">
+       <bool>true</bool>
+      </property>
+      <widget class="QWidget" name="scrollAreaWidgetContents">
+       <property name="geometry">
+        <rect>
+         <x>0</x>
+         <y>0</y>
+         <width>659</width>
+         <height>558</height>
+        </rect>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_4">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout_2">
+          <item row="0" column="0">
+           <widget class="QLabel" name="modeLabel">
+            <property name="text">
+             <string>Mode</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QLabel" name="deviceLabel">
+            <property name="text">
+             <string>Device</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QComboBox" name="modeBox">
+            <item>
+             <property name="text">
+              <string>Input</string>
+             </property>
+            </item>
+            <item>
+             <property name="text">
+              <string>Output</string>
+             </property>
+            </item>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QComboBox" name="deviceBox"/>
+          </item>
+          <item row="2" column="0" colspan="2">
+           <widget class="QTabWidget" name="tabWidget">
+            <property name="currentIndex">
+             <number>0</number>
+            </property>
+            <widget class="QWidget" name="testFormatTab">
+             <attribute name="title">
+              <string>Test format</string>
+             </attribute>
+             <layout class="QGridLayout" name="gridLayout">
+              <item row="0" column="1">
+               <widget class="QLabel" name="actualLabel">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="frameShape">
+                 <enum>QFrame::NoFrame</enum>
+                </property>
+                <property name="frameShadow">
+                 <enum>QFrame::Plain</enum>
+                </property>
+                <property name="text">
+                 <string><i>Actual Settings</i></string>
+                </property>
+                <property name="textFormat">
+                 <enum>Qt::RichText</enum>
+                </property>
+                <property name="alignment">
+                 <set>Qt::AlignCenter</set>
+                </property>
+               </widget>
+              </item>
+              <item row="0" column="2">
+               <widget class="QLabel" name="nearestLabel">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="frameShape">
+                 <enum>QFrame::NoFrame</enum>
+                </property>
+                <property name="frameShadow">
+                 <enum>QFrame::Plain</enum>
+                </property>
+                <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-family:'MS Shell Dlg 2'; font-size:8.25pt; 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;">Nearest Settings</span></p></body></html></string>
+                </property>
+                <property name="textFormat">
+                 <enum>Qt::RichText</enum>
+                </property>
+                <property name="alignment">
+                 <set>Qt::AlignCenter</set>
+                </property>
+               </widget>
+              </item>
+              <item row="3" column="1">
+               <widget class="QComboBox" name="sampleRateBox">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+               </widget>
+              </item>
+              <item row="3" column="2">
+               <widget class="QLineEdit" name="nearestSampleRate">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="5" column="1">
+               <widget class="QComboBox" name="channelsBox"/>
+              </item>
+              <item row="5" column="2">
+               <widget class="QLineEdit" name="nearestChannel">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="9" column="1">
+               <widget class="QComboBox" name="sampleSizesBox"/>
+              </item>
+              <item row="9" column="2">
+               <widget class="QLineEdit" name="nearestSampleSize">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="14" column="1">
+               <widget class="QComboBox" name="endianBox"/>
+              </item>
+              <item row="14" column="2">
+               <widget class="QLineEdit" name="nearestEndian">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="15" column="1">
+               <widget class="QPushButton" name="testButton">
+                <property name="text">
+                 <string>Test</string>
+                </property>
+               </widget>
+              </item>
+              <item row="15" column="2">
+               <widget class="QLabel" name="testResult">
+                <property name="text">
+                 <string/>
+                </property>
+               </widget>
+              </item>
+              <item row="3" column="0">
+               <widget class="QLabel" name="actualFreqLabel">
+                <property name="text">
+                 <string>Frequency (Hz)</string>
+                </property>
+               </widget>
+              </item>
+              <item row="5" column="0">
+               <widget class="QLabel" name="actualChannelLabel">
+                <property name="text">
+                 <string>Channels</string>
+                </property>
+               </widget>
+              </item>
+              <item row="9" column="0">
+               <widget class="QLabel" name="actualSampleSizeLabel">
+                <property name="text">
+                 <string>Sample size (bits)</string>
+                </property>
+               </widget>
+              </item>
+              <item row="14" column="0">
+               <widget class="QLabel" name="actualEndianLabel">
+                <property name="text">
+                 <string>Endianess</string>
+                </property>
+               </widget>
+              </item>
+              <item row="16" column="0" colspan="3">
+               <widget class="QLabel" name="label">
+                <property name="sizePolicy">
+                 <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+                  <horstretch>0</horstretch>
+                  <verstretch>0</verstretch>
+                 </sizepolicy>
+                </property>
+                <property name="text">
+                 <string>Note: an invalid codec 'audio/test' exists in order to allow an invalid format to be constructed, and therefore to trigger a 'nearest format' calculation.</string>
+                </property>
+                <property name="wordWrap">
+                 <bool>true</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="2" column="0">
+               <widget class="QLabel" name="actualCodecLabel">
+                <property name="text">
+                 <string>Codec</string>
+                </property>
+               </widget>
+              </item>
+              <item row="2" column="2">
+               <widget class="QLineEdit" name="nearestCodec">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+              <item row="2" column="1">
+               <widget class="QComboBox" name="codecsBox"/>
+              </item>
+              <item row="6" column="0">
+               <widget class="QLabel" name="actualSampleTypeLabel">
+                <property name="text">
+                 <string>SampleType</string>
+                </property>
+               </widget>
+              </item>
+              <item row="6" column="1">
+               <widget class="QComboBox" name="sampleTypesBox"/>
+              </item>
+              <item row="6" column="2">
+               <widget class="QLineEdit" name="nearestSampleType">
+                <property name="enabled">
+                 <bool>false</bool>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </widget>
+            <widget class="QWidget" name="tab">
+             <attribute name="title">
+              <string>All formats</string>
+             </attribute>
+             <layout class="QVBoxLayout" name="verticalLayout_2">
+              <item>
+               <widget class="QPushButton" name="populateTableButton">
+                <property name="text">
+                 <string>Populate table</string>
+                </property>
+               </widget>
+              </item>
+              <item>
+               <widget class="QTableWidget" name="allFormatsTable">
+                <property name="editTriggers">
+                 <set>QAbstractItemView::NoEditTriggers</set>
+                </property>
+                <property name="dragDropOverwriteMode">
+                 <bool>false</bool>
+                </property>
+                <property name="selectionMode">
+                 <enum>QAbstractItemView::NoSelection</enum>
+                </property>
+                <property name="selectionBehavior">
+                 <enum>QAbstractItemView::SelectItems</enum>
+                </property>
+                <property name="textElideMode">
+                 <enum>Qt::ElideNone</enum>
+                </property>
+                <property name="sortingEnabled">
+                 <bool>false</bool>
+                </property>
+                <property name="wordWrap">
+                 <bool>false</bool>
+                </property>
+                <property name="cornerButtonEnabled">
+                 <bool>false</bool>
+                </property>
+                <attribute name="horizontalHeaderHighlightSections">
+                 <bool>false</bool>
+                </attribute>
+                <attribute name="verticalHeaderVisible">
+                 <bool>false</bool>
+                </attribute>
+                <attribute name="verticalHeaderHighlightSections">
+                 <bool>false</bool>
+                </attribute>
+                <column>
+                 <property name="text">
+                  <string>Codec</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+                <column>
+                 <property name="text">
+                  <string>Frequency (Hz)</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+                <column>
+                 <property name="text">
+                  <string>Channels</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+                <column>
+                 <property name="text">
+                  <string>Sample type</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+                <column>
+                 <property name="text">
+                  <string>Sample size (bits)</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+                <column>
+                 <property name="text">
+                  <string>Endianness</string>
+                 </property>
+                 <property name="textAlignment">
+                  <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+                 </property>
+                </column>
+               </widget>
+              </item>
+             </layout>
+            </widget>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/multimedia/audiodevices/ui_audiodevicesbase.py b/examples/multimedia/audiodevices/ui_audiodevicesbase.py
new file mode 100644
index 0000000..c02c3a9
--- /dev/null
+++ b/examples/multimedia/audiodevices/ui_audiodevicesbase.py
@@ -0,0 +1,252 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'audiodevicesbase.ui'
+#
+# Created: Tue Jun 25 12:31:11 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-478d7f271b71
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_AudioDevicesBase(object):
+    def setupUi(self, AudioDevicesBase):
+        AudioDevicesBase.setObjectName("AudioDevicesBase")
+        AudioDevicesBase.resize(679, 598)
+        self.centralwidget = QtWidgets.QWidget(AudioDevicesBase)
+        self.centralwidget.setObjectName("centralwidget")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())
+        self.scrollArea.setSizePolicy(sizePolicy)
+        self.scrollArea.setWidgetResizable(True)
+        self.scrollArea.setObjectName("scrollArea")
+        self.scrollAreaWidgetContents = QtWidgets.QWidget()
+        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 659, 558))
+        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
+        self.gridLayout_4 = QtWidgets.QGridLayout(self.scrollAreaWidgetContents)
+        self.gridLayout_4.setObjectName("gridLayout_4")
+        self.gridLayout_2 = QtWidgets.QGridLayout()
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.modeLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
+        self.modeLabel.setObjectName("modeLabel")
+        self.gridLayout_2.addWidget(self.modeLabel, 0, 0, 1, 1)
+        self.deviceLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents)
+        self.deviceLabel.setObjectName("deviceLabel")
+        self.gridLayout_2.addWidget(self.deviceLabel, 0, 1, 1, 1)
+        self.modeBox = QtWidgets.QComboBox(self.scrollAreaWidgetContents)
+        self.modeBox.setObjectName("modeBox")
+        self.modeBox.addItem("")
+        self.modeBox.addItem("")
+        self.gridLayout_2.addWidget(self.modeBox, 1, 0, 1, 1)
+        self.deviceBox = QtWidgets.QComboBox(self.scrollAreaWidgetContents)
+        self.deviceBox.setObjectName("deviceBox")
+        self.gridLayout_2.addWidget(self.deviceBox, 1, 1, 1, 1)
+        self.tabWidget = QtWidgets.QTabWidget(self.scrollAreaWidgetContents)
+        self.tabWidget.setObjectName("tabWidget")
+        self.testFormatTab = QtWidgets.QWidget()
+        self.testFormatTab.setObjectName("testFormatTab")
+        self.gridLayout = QtWidgets.QGridLayout(self.testFormatTab)
+        self.gridLayout.setObjectName("gridLayout")
+        self.actualLabel = QtWidgets.QLabel(self.testFormatTab)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.actualLabel.sizePolicy().hasHeightForWidth())
+        self.actualLabel.setSizePolicy(sizePolicy)
+        self.actualLabel.setFrameShape(QtWidgets.QFrame.NoFrame)
+        self.actualLabel.setFrameShadow(QtWidgets.QFrame.Plain)
+        self.actualLabel.setTextFormat(QtCore.Qt.RichText)
+        self.actualLabel.setAlignment(QtCore.Qt.AlignCenter)
+        self.actualLabel.setObjectName("actualLabel")
+        self.gridLayout.addWidget(self.actualLabel, 0, 1, 1, 1)
+        self.nearestLabel = QtWidgets.QLabel(self.testFormatTab)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.nearestLabel.sizePolicy().hasHeightForWidth())
+        self.nearestLabel.setSizePolicy(sizePolicy)
+        self.nearestLabel.setFrameShape(QtWidgets.QFrame.NoFrame)
+        self.nearestLabel.setFrameShadow(QtWidgets.QFrame.Plain)
+        self.nearestLabel.setTextFormat(QtCore.Qt.RichText)
+        self.nearestLabel.setAlignment(QtCore.Qt.AlignCenter)
+        self.nearestLabel.setObjectName("nearestLabel")
+        self.gridLayout.addWidget(self.nearestLabel, 0, 2, 1, 1)
+        self.sampleRateBox = QtWidgets.QComboBox(self.testFormatTab)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.sampleRateBox.sizePolicy().hasHeightForWidth())
+        self.sampleRateBox.setSizePolicy(sizePolicy)
+        self.sampleRateBox.setObjectName("sampleRateBox")
+        self.gridLayout.addWidget(self.sampleRateBox, 3, 1, 1, 1)
+        self.nearestSampleRate = QtWidgets.QLineEdit(self.testFormatTab)
+        self.nearestSampleRate.setEnabled(False)
+        self.nearestSampleRate.setObjectName("nearestSampleRate")
+        self.gridLayout.addWidget(self.nearestSampleRate, 3, 2, 1, 1)
+        self.channelsBox = QtWidgets.QComboBox(self.testFormatTab)
+        self.channelsBox.setObjectName("channelsBox")
+        self.gridLayout.addWidget(self.channelsBox, 5, 1, 1, 1)
+        self.nearestChannel = QtWidgets.QLineEdit(self.testFormatTab)
+        self.nearestChannel.setEnabled(False)
+        self.nearestChannel.setObjectName("nearestChannel")
+        self.gridLayout.addWidget(self.nearestChannel, 5, 2, 1, 1)
+        self.sampleSizesBox = QtWidgets.QComboBox(self.testFormatTab)
+        self.sampleSizesBox.setObjectName("sampleSizesBox")
+        self.gridLayout.addWidget(self.sampleSizesBox, 9, 1, 1, 1)
+        self.nearestSampleSize = QtWidgets.QLineEdit(self.testFormatTab)
+        self.nearestSampleSize.setEnabled(False)
+        self.nearestSampleSize.setObjectName("nearestSampleSize")
+        self.gridLayout.addWidget(self.nearestSampleSize, 9, 2, 1, 1)
+        self.endianBox = QtWidgets.QComboBox(self.testFormatTab)
+        self.endianBox.setObjectName("endianBox")
+        self.gridLayout.addWidget(self.endianBox, 14, 1, 1, 1)
+        self.nearestEndian = QtWidgets.QLineEdit(self.testFormatTab)
+        self.nearestEndian.setEnabled(False)
+        self.nearestEndian.setObjectName("nearestEndian")
+        self.gridLayout.addWidget(self.nearestEndian, 14, 2, 1, 1)
+        self.testButton = QtWidgets.QPushButton(self.testFormatTab)
+        self.testButton.setObjectName("testButton")
+        self.gridLayout.addWidget(self.testButton, 15, 1, 1, 1)
+        self.testResult = QtWidgets.QLabel(self.testFormatTab)
+        self.testResult.setText("")
+        self.testResult.setObjectName("testResult")
+        self.gridLayout.addWidget(self.testResult, 15, 2, 1, 1)
+        self.actualFreqLabel = QtWidgets.QLabel(self.testFormatTab)
+        self.actualFreqLabel.setObjectName("actualFreqLabel")
+        self.gridLayout.addWidget(self.actualFreqLabel, 3, 0, 1, 1)
+        self.actualChannelLabel = QtWidgets.QLabel(self.testFormatTab)
+        self.actualChannelLabel.setObjectName("actualChannelLabel")
+        self.gridLayout.addWidget(self.actualChannelLabel, 5, 0, 1, 1)
+        self.actualSampleSizeLabel = QtWidgets.QLabel(self.testFormatTab)
+        self.actualSampleSizeLabel.setObjectName("actualSampleSizeLabel")
+        self.gridLayout.addWidget(self.actualSampleSizeLabel, 9, 0, 1, 1)
+        self.actualEndianLabel = QtWidgets.QLabel(self.testFormatTab)
+        self.actualEndianLabel.setObjectName("actualEndianLabel")
+        self.gridLayout.addWidget(self.actualEndianLabel, 14, 0, 1, 1)
+        self.label = QtWidgets.QLabel(self.testFormatTab)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
+        self.label.setSizePolicy(sizePolicy)
+        self.label.setWordWrap(True)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 16, 0, 1, 3)
+        self.actualCodecLabel = QtWidgets.QLabel(self.testFormatTab)
+        self.actualCodecLabel.setObjectName("actualCodecLabel")
+        self.gridLayout.addWidget(self.actualCodecLabel, 2, 0, 1, 1)
+        self.nearestCodec = QtWidgets.QLineEdit(self.testFormatTab)
+        self.nearestCodec.setEnabled(False)
+        self.nearestCodec.setObjectName("nearestCodec")
+        self.gridLayout.addWidget(self.nearestCodec, 2, 2, 1, 1)
+        self.codecsBox = QtWidgets.QComboBox(self.testFormatTab)
+        self.codecsBox.setObjectName("codecsBox")
+        self.gridLayout.addWidget(self.codecsBox, 2, 1, 1, 1)
+        self.actualSampleTypeLabel = QtWidgets.QLabel(self.testFormatTab)
+        self.actualSampleTypeLabel.setObjectName("actualSampleTypeLabel")
+        self.gridLayout.addWidget(self.actualSampleTypeLabel, 6, 0, 1, 1)
+        self.sampleTypesBox = QtWidgets.QComboBox(self.testFormatTab)
+        self.sampleTypesBox.setObjectName("sampleTypesBox")
+        self.gridLayout.addWidget(self.sampleTypesBox, 6, 1, 1, 1)
+        self.nearestSampleType = QtWidgets.QLineEdit(self.testFormatTab)
+        self.nearestSampleType.setEnabled(False)
+        self.nearestSampleType.setObjectName("nearestSampleType")
+        self.gridLayout.addWidget(self.nearestSampleType, 6, 2, 1, 1)
+        self.tabWidget.addTab(self.testFormatTab, "")
+        self.tab = QtWidgets.QWidget()
+        self.tab.setObjectName("tab")
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.populateTableButton = QtWidgets.QPushButton(self.tab)
+        self.populateTableButton.setObjectName("populateTableButton")
+        self.verticalLayout_2.addWidget(self.populateTableButton)
+        self.allFormatsTable = QtWidgets.QTableWidget(self.tab)
+        self.allFormatsTable.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
+        self.allFormatsTable.setDragDropOverwriteMode(False)
+        self.allFormatsTable.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection)
+        self.allFormatsTable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectItems)
+        self.allFormatsTable.setTextElideMode(QtCore.Qt.ElideNone)
+        self.allFormatsTable.setWordWrap(False)
+        self.allFormatsTable.setCornerButtonEnabled(False)
+        self.allFormatsTable.setObjectName("allFormatsTable")
+        self.allFormatsTable.setColumnCount(6)
+        self.allFormatsTable.setRowCount(0)
+        item = QtWidgets.QTableWidgetItem()
+        item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
+        self.allFormatsTable.setHorizontalHeaderItem(0, item)
+        item = QtWidgets.QTableWidgetItem()
+        item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
+        self.allFormatsTable.setHorizontalHeaderItem(1, item)
+        item = QtWidgets.QTableWidgetItem()
+        item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
+        self.allFormatsTable.setHorizontalHeaderItem(2, item)
+        item = QtWidgets.QTableWidgetItem()
+        item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
+        self.allFormatsTable.setHorizontalHeaderItem(3, item)
+        item = QtWidgets.QTableWidgetItem()
+        item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
+        self.allFormatsTable.setHorizontalHeaderItem(4, item)
+        item = QtWidgets.QTableWidgetItem()
+        item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
+        self.allFormatsTable.setHorizontalHeaderItem(5, item)
+        self.allFormatsTable.horizontalHeader().setHighlightSections(False)
+        self.allFormatsTable.verticalHeader().setVisible(False)
+        self.allFormatsTable.verticalHeader().setHighlightSections(False)
+        self.verticalLayout_2.addWidget(self.allFormatsTable)
+        self.tabWidget.addTab(self.tab, "")
+        self.gridLayout_2.addWidget(self.tabWidget, 2, 0, 1, 2)
+        self.gridLayout_4.addLayout(self.gridLayout_2, 0, 0, 1, 1)
+        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
+        self.verticalLayout.addWidget(self.scrollArea)
+        AudioDevicesBase.setCentralWidget(self.centralwidget)
+        self.statusbar = QtWidgets.QStatusBar(AudioDevicesBase)
+        self.statusbar.setObjectName("statusbar")
+        AudioDevicesBase.setStatusBar(self.statusbar)
+
+        self.retranslateUi(AudioDevicesBase)
+        self.tabWidget.setCurrentIndex(0)
+        QtCore.QMetaObject.connectSlotsByName(AudioDevicesBase)
+
+    def retranslateUi(self, AudioDevicesBase):
+        _translate = QtCore.QCoreApplication.translate
+        AudioDevicesBase.setWindowTitle(_translate("AudioDevicesBase", "Audio Devices"))
+        self.modeLabel.setText(_translate("AudioDevicesBase", "Mode"))
+        self.deviceLabel.setText(_translate("AudioDevicesBase", "Device"))
+        self.modeBox.setItemText(0, _translate("AudioDevicesBase", "Input"))
+        self.modeBox.setItemText(1, _translate("AudioDevicesBase", "Output"))
+        self.actualLabel.setText(_translate("AudioDevicesBase", "<i>Actual Settings</i>"))
+        self.nearestLabel.setText(_translate("AudioDevicesBase", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
+"<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;\">Nearest Settings</span></p></body></html>"))
+        self.testButton.setText(_translate("AudioDevicesBase", "Test"))
+        self.actualFreqLabel.setText(_translate("AudioDevicesBase", "Frequency (Hz)"))
+        self.actualChannelLabel.setText(_translate("AudioDevicesBase", "Channels"))
+        self.actualSampleSizeLabel.setText(_translate("AudioDevicesBase", "Sample size (bits)"))
+        self.actualEndianLabel.setText(_translate("AudioDevicesBase", "Endianess"))
+        self.label.setText(_translate("AudioDevicesBase", "Note: an invalid codec \'audio/test\' exists in order to allow an invalid format to be constructed, and therefore to trigger a \'nearest format\' calculation."))
+        self.actualCodecLabel.setText(_translate("AudioDevicesBase", "Codec"))
+        self.actualSampleTypeLabel.setText(_translate("AudioDevicesBase", "SampleType"))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.testFormatTab), _translate("AudioDevicesBase", "Test format"))
+        self.populateTableButton.setText(_translate("AudioDevicesBase", "Populate table"))
+        self.allFormatsTable.setSortingEnabled(False)
+        item = self.allFormatsTable.horizontalHeaderItem(0)
+        item.setText(_translate("AudioDevicesBase", "Codec"))
+        item = self.allFormatsTable.horizontalHeaderItem(1)
+        item.setText(_translate("AudioDevicesBase", "Frequency (Hz)"))
+        item = self.allFormatsTable.horizontalHeaderItem(2)
+        item.setText(_translate("AudioDevicesBase", "Channels"))
+        item = self.allFormatsTable.horizontalHeaderItem(3)
+        item.setText(_translate("AudioDevicesBase", "Sample type"))
+        item = self.allFormatsTable.horizontalHeaderItem(4)
+        item.setText(_translate("AudioDevicesBase", "Sample size (bits)"))
+        item = self.allFormatsTable.horizontalHeaderItem(5)
+        item.setText(_translate("AudioDevicesBase", "Endianness"))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("AudioDevicesBase", "All formats"))
+
diff --git a/examples/multimedia/audiooutput.py b/examples/multimedia/audiooutput.py
new file mode 100755
index 0000000..da197af
--- /dev/null
+++ b/examples/multimedia/audiooutput.py
@@ -0,0 +1,295 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from math import pi, sin
+from struct import pack
+
+from PyQt5.QtCore import QByteArray, QIODevice, Qt, QTimer, qWarning
+from PyQt5.QtMultimedia import (QAudio, QAudioDeviceInfo, QAudioFormat,
+        QAudioOutput)
+from PyQt5.QtWidgets import (QApplication, QComboBox, QHBoxLayout, QLabel,
+        QMainWindow, QPushButton, QSlider, QVBoxLayout, QWidget)
+
+
+class Generator(QIODevice):
+
+    def __init__(self, format, durationUs, sampleRate, parent):
+        super(Generator, self).__init__(parent)
+
+        self.m_pos = 0
+        self.m_buffer = QByteArray()
+
+        self.generateData(format, durationUs, sampleRate)
+
+    def start(self):
+        self.open(QIODevice.ReadOnly)
+
+    def stop(self):
+        self.m_pos = 0
+        self.close()
+
+    def generateData(self, format, durationUs, sampleRate):
+        pack_format = ''
+
+        if format.sampleSize() == 8:
+            if format.sampleType() == QAudioFormat.UnSignedInt:
+                scaler = lambda x: ((1.0 + x) / 2 * 255)
+                pack_format = 'B'
+            elif format.sampleType() == QAudioFormat.SignedInt:
+                scaler = lambda x: x * 127
+                pack_format = 'b'
+        elif format.sampleSize() == 16:
+            if format.sampleType() == QAudioFormat.UnSignedInt:
+                scaler = lambda x: (1.0 + x) / 2 * 65535
+                pack_format = '<H' if format.byteOrder() == QAudioFormat.LittleEndian else '>H'
+            elif format.sampleType() == QAudioFormat.SignedInt:
+                scaler = lambda x: x * 32767
+                pack_format = '<h' if format.byteOrder() == QAudioFormat.LittleEndian else '>h'
+
+        assert(pack_format != '')
+
+        channelBytes = format.sampleSize() // 8
+        sampleBytes = format.channelCount() * channelBytes
+
+        length = (format.sampleRate() * format.channelCount() * (format.sampleSize() // 8)) * durationUs // 100000
+
+        self.m_buffer.clear()
+        sampleIndex = 0
+        factor = 2 * pi * sampleRate / format.sampleRate()
+
+        while length != 0:
+            x = sin((sampleIndex % format.sampleRate()) * factor)
+            packed = pack(pack_format, int(scaler(x)))
+
+            for _ in range(format.channelCount()):
+                self.m_buffer.append(packed)
+                length -= channelBytes
+
+            sampleIndex += 1
+
+    def readData(self, maxlen):
+        data = QByteArray()
+        total = 0
+
+        while maxlen > total:
+            chunk = min(self.m_buffer.size() - self.m_pos, maxlen - total)
+            data.append(self.m_buffer.mid(self.m_pos, chunk))
+            self.m_pos = (self.m_pos + chunk) % self.m_buffer.size()
+            total += chunk
+
+        return data.data()
+
+    def writeData(self, data):
+        return 0
+
+    def bytesAvailable(self):
+        return self.m_buffer.size() + super(Generator, self).bytesAvailable()
+
+
+class AudioTest(QMainWindow):
+
+    PUSH_MODE_LABEL = "Enable push mode"
+    PULL_MODE_LABEL = "Enable pull mode"
+    SUSPEND_LABEL = "Suspend playback"
+    RESUME_LABEL = "Resume playback"
+
+    DurationSeconds = 1
+    ToneSampleRateHz = 600
+    DataSampleRateHz = 44100
+
+    def __init__(self):
+        super(AudioTest, self).__init__()
+
+        self.m_device = QAudioDeviceInfo.defaultOutputDevice()
+        self.m_output = None
+
+        self.initializeWindow()
+        self.initializeAudio()
+
+    def initializeWindow(self):
+        layout = QVBoxLayout()
+
+        self.m_deviceBox = QComboBox(activated=self.deviceChanged)
+        for deviceInfo in QAudioDeviceInfo.availableDevices(QAudio.AudioOutput):
+            self.m_deviceBox.addItem(deviceInfo.deviceName(), deviceInfo)
+
+        layout.addWidget(self.m_deviceBox)
+
+        self.m_modeButton = QPushButton(clicked=self.toggleMode)
+        self.m_modeButton.setText(self.PUSH_MODE_LABEL)
+
+        layout.addWidget(self.m_modeButton)
+
+        self.m_suspendResumeButton = QPushButton(
+                clicked=self.toggleSuspendResume)
+        self.m_suspendResumeButton.setText(self.SUSPEND_LABEL)
+
+        layout.addWidget(self.m_suspendResumeButton)
+
+        volumeBox = QHBoxLayout()
+        volumeLabel = QLabel("Volume:")
+        self.m_volumeSlider = QSlider(Qt.Horizontal, minimum=0, maximum=100,
+                singleStep=10, valueChanged=self.volumeChanged)
+        volumeBox.addWidget(volumeLabel)
+        volumeBox.addWidget(self.m_volumeSlider)
+
+        layout.addLayout(volumeBox)
+
+        window = QWidget()
+        window.setLayout(layout)
+
+        self.setCentralWidget(window)
+
+    def initializeAudio(self):
+        self.m_pullTimer = QTimer(self, timeout=self.pullTimerExpired)
+        self.m_pullMode = True
+
+        self.m_format = QAudioFormat()
+        self.m_format.setSampleRate(self.DataSampleRateHz)
+        self.m_format.setChannelCount(1)
+        self.m_format.setSampleSize(16)
+        self.m_format.setCodec('audio/pcm')
+        self.m_format.setByteOrder(QAudioFormat.LittleEndian)
+        self.m_format.setSampleType(QAudioFormat.SignedInt)
+
+        info = QAudioDeviceInfo(QAudioDeviceInfo.defaultOutputDevice())
+        if not info.isFormatSupported(self.m_format):
+            qWarning("Default format not supported - trying to use nearest")
+            self.m_format = info.nearestFormat(self.m_format)
+
+        self.m_generator = Generator(self.m_format,
+                self.DurationSeconds * 1000000, self.ToneSampleRateHz, self)
+
+        self.createAudioOutput()
+
+    def createAudioOutput(self):
+        self.m_audioOutput = QAudioOutput(self.m_device, self.m_format)
+        self.m_audioOutput.notify.connect(self.notified)
+        self.m_audioOutput.stateChanged.connect(self.handleStateChanged)
+
+        self.m_generator.start()
+        self.m_audioOutput.start(self.m_generator)
+        self.m_volumeSlider.setValue(self.m_audioOutput.volume() * 100)
+
+    def deviceChanged(self, index):
+        self.m_pullTimer.stop()
+        self.m_generator.stop()
+        self.m_audioOutput.stop()
+        self.m_device = self.m_deviceBox.itemData(index)
+
+        self.createAudioOutput()
+
+    def volumeChanged(self, value):
+        if self.m_audioOutput is not None:
+            self.m_audioOutput.setVolume(value / 100.0)
+
+    def notified(self):
+        qWarning("bytesFree = %d, elapsedUSecs = %d, processedUSecs = %d" % (
+                self.m_audioOutput.bytesFree(),
+                self.m_audioOutput.elapsedUSecs(),
+                self.m_audioOutput.processedUSecs()))
+
+    def pullTimerExpired(self):
+        if self.m_audioOutput is not None and self.m_audioOutput.state() != QAudio.StoppedState:
+            chunks = self.m_audioOutput.bytesFree() // self.m_audioOutput.periodSize()
+            for _ in range(chunks):
+                data = self.m_generator.read(self.m_audioOutput.periodSize())
+                if data is None or len(data) != self.m_audioOutput.periodSize():
+                    break
+
+                self.m_output.write(data)
+
+    def toggleMode(self):
+        self.m_pullTimer.stop()
+        self.m_audioOutput.stop()
+
+        if self.m_pullMode:
+            self.m_modeButton.setText(self.PULL_MODE_LABEL)
+            self.m_output = self.m_audioOutput.start()
+            self.m_pullMode = False
+            self.m_pullTimer.start(20)
+        else:
+            self.m_modeButton.setText(self.PUSH_MODE_LABEL)
+            self.m_pullMode = True
+            self.m_audioOutput.start(self.m_generator)
+
+        self.m_suspendResumeButton.setText(self.SUSPEND_LABEL)
+
+    def toggleSuspendResume(self):
+        if self.m_audioOutput.state() == QAudio.SuspendedState:
+            qWarning("status: Suspended, resume()")
+            self.m_audioOutput.resume()
+            self.m_suspendResumeButton.setText(self.SUSPEND_LABEL)
+        elif self.m_audioOutput.state() == QAudio.ActiveState:
+            qWarning("status: Active, suspend()")
+            self.m_audioOutput.suspend()
+            self.m_suspendResumeButton.setText(self.RESUME_LABEL)
+        elif self.m_audioOutput.state() == QAudio.StoppedState:
+            qWarning("status: Stopped, resume()")
+            self.m_audioOutput.resume()
+            self.m_suspendResumeButton.setText(self.SUSPEND_LABEL)
+        elif self.m_audioOutput.state() == QAudio.IdleState:
+            qWarning("status: IdleState")
+
+    stateMap = {
+        QAudio.ActiveState: "ActiveState",
+        QAudio.SuspendedState: "SuspendedState",
+        QAudio.StoppedState: "StoppedState",
+        QAudio.IdleState: "IdleState"}
+
+    def handleStateChanged(self, state):
+        qWarning("state = " + self.stateMap.get(state, "Unknown"))
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    app.setApplicationName("Audio Output Test")
+
+    audio = AudioTest()
+    audio.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/multimediawidgets/README b/examples/multimediawidgets/README
new file mode 100644
index 0000000..082d228
--- /dev/null
+++ b/examples/multimediawidgets/README
@@ -0,0 +1,24 @@
+PyQt contains classes that provide support for audio, video, radio and cameras.
+The QtMultimediaWidgets module allows them to be used in widget-based
+applications.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/multimediawidgets/camera/camera.py b/examples/multimediawidgets/camera/camera.py
new file mode 100755
index 0000000..6a5ecb8
--- /dev/null
+++ b/examples/multimediawidgets/camera/camera.py
@@ -0,0 +1,512 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QByteArray, qFuzzyCompare, Qt, QTimer
+from PyQt5.QtGui import QPalette, QPixmap
+from PyQt5.QtMultimedia import (QAudioEncoderSettings, QCamera,
+        QCameraImageCapture, QImageEncoderSettings, QMediaMetaData,
+        QMediaRecorder, QMultimedia, QVideoEncoderSettings)
+from PyQt5.QtWidgets import (QAction, QActionGroup, QApplication, QDialog,
+        QMainWindow, QMessageBox)
+
+from ui_camera import Ui_Camera
+from ui_imagesettings import Ui_ImageSettingsUi
+from ui_videosettings import Ui_VideoSettingsUi
+
+
+class ImageSettings(QDialog):
+
+    def __init__(self, imageCapture, parent=None):
+        super(ImageSettings, self).__init__(parent)
+
+        self.ui = Ui_ImageSettingsUi()
+        self.imagecapture = imageCapture
+
+        self.ui.setupUi(self)
+
+        self.ui.imageCodecBox.addItem("Default image format", "")
+        for codecName in self.imagecapture.supportedImageCodecs():
+            description = self.imagecapture.imageCodecDescription(codecName)
+            self.ui.imageCodecBox.addItem(codecName + ": " + description,
+                    codecName)
+
+        self.ui.imageQualitySlider.setRange(0, QMultimedia.VeryHighQuality)
+
+        self.ui.imageResolutionBox.addItem("Default resolution")
+        supportedResolutions, _ = self.imagecapture.supportedResolutions()
+        for resolution in supportedResolutions:
+            self.ui.imageResolutionBox.addItem(
+                    "%dx%d" % (resolution.width(), resolution.height()),
+                    resolution)
+
+    def imageSettings(self):
+        settings = self.imagecapture.encodingSettings()
+        settings.setCodec(self.boxValue(self.ui.imageCodecBox))
+        settings.setQuality(
+                QMultimedia.EncodingQuality(
+                        self.ui.imageQualitySlider.value()))
+        settings.setResolution(self.boxValue(self.ui.imageResolutionBox))
+
+        return settings
+
+    def setImageSettings(self, settings):
+        self.selectComboBoxItem(self.ui.imageCodecBox, settings.codec())
+        self.selectComboBoxItem(self.ui.imageResolutionBox,
+                settings.resolution())
+        self.ui.imageQualitySlider.setValue(settings.quality())
+
+    @staticmethod
+    def boxValue(box):
+        idx = box.currentIndex()
+        if idx == -1:
+            return None
+
+        return box.itemData(idx)
+
+    @staticmethod
+    def selectComboBoxItem(box, value):
+        for i in range(box.count()):
+            if box.itemData(i) == value:
+                box.setCurrentIndex(i)
+                break
+
+
+class VideoSettings(QDialog):
+
+    def __init__(self, mediaRecorder, parent=None):
+        super(VideoSettings, self).__init__(parent)
+
+        self.ui = Ui_VideoSettingsUi()
+        self.mediaRecorder = mediaRecorder
+
+        self.ui.setupUi(self)
+
+        self.ui.audioCodecBox.addItem("Default audio codec", "")
+        for codecName in self.mediaRecorder.supportedAudioCodecs():
+            description = self.mediaRecorder.audioCodecDescription(codecName)
+            self.ui.audioCodecBox.addItem(codecName + ": " + description,
+                    codecName)
+
+        supportedSampleRates, _ = self.mediaRecorder.supportedAudioSampleRates()
+        for sampleRate in supportedSampleRates:
+            self.ui.audioSampleRateBox.addItem(str(sampleRate), sampleRate)
+
+        self.ui.audioQualitySlider.setRange(0, QMultimedia.VeryHighQuality)
+
+        self.ui.videoCodecBox.addItem("Default video codec", "")
+        for codecName in self.mediaRecorder.supportedVideoCodecs():
+            description = self.mediaRecorder.videoCodecDescription(codecName)
+            self.ui.videoCodecBox.addItem(codecName + ": " + description,
+                    codecName)
+
+        self.ui.videoQualitySlider.setRange(0, QMultimedia.VeryHighQuality)
+
+        self.ui.videoResolutionBox.addItem("Default")
+        supportedResolutions, _ = self.mediaRecorder.supportedResolutions()
+        for resolution in supportedResolutions:
+            self.ui.videoResolutionBox.addItem(
+                    "%dx%d" % (resolution.width(), resolution.height()),
+                    resolution)
+
+        self.ui.videoFramerateBox.addItem("Default")
+        supportedFrameRates, _ = self.mediaRecorder.supportedFrameRates()
+        for rate in supportedFrameRates:
+            self.ui.videoFramerateBox.addItem("%0.2f" % rate, rate)
+
+        self.ui.containerFormatBox.addItem("Default container", "")
+        for format in self.mediaRecorder.supportedContainers():
+            self.ui.containerFormatBox.addItem(
+                    format + ":" + self.mediaRecorder.containerDescription(
+                            format),
+                    format)
+
+    def audioSettings(self):
+        settings = self.mediaRecorder.audioSettings()
+        settings.setCodec(self.boxValue(self.ui.audioCodecBox))
+        settings.setQuality(
+                QMultimedia.EncodingQuality(
+                        self.ui.audioQualitySlider.value()))
+        settings.setSampleRate(self.boxValue(self.ui.audioSampleRateBox))
+
+        return settings
+
+    def setAudioSettings(self, settings):
+        self.selectComboBoxItem(self.ui.audioCodecBox, settings.codec())
+        self.selectComboBoxItem(self.ui.audioSampleRateBox,
+                settings.sampleRate())
+        self.ui.audioQualitySlider.setValue(settings.quality())
+
+    def videoSettings(self):
+        settings = self.mediaRecorder.videoSettings()
+        settings.setCodec(self.boxValue(self.ui.videoCodecBox))
+        settings.setQuality(
+                QMultimedia.EncodingQuality(
+                        self.ui.videoQualitySlider.value()))
+        settings.setResolution(self.boxValue(self.ui.videoResolutionBox))
+        settings.setFrameRate(self.boxValue(self.ui.videoFramerateBox))
+
+        return settings
+
+    def setVideoSettings(self, settings):
+        self.selectComboBoxItem(self.ui.videoCodecBox, settings.codec())
+        self.selectComboBoxItem(self.ui.videoResolutionBox,
+                settings.resolution())
+        self.ui.videoQualitySlider.setValue(settings.quality())
+
+        for i in range(1, self.ui.videoFramerateBox.count()):
+            itemRate = self.ui.videoFramerateBox.itemData(i)
+            if qFuzzyCompare(itemRate, settings.frameRate()):
+                self.ui.videoFramerateBox.setCurrentIndex(i)
+                break
+
+    def format(self):
+        return self.boxValue(self.ui.containerFormatBox)
+
+    def setFormat(self, format):
+        self.selectComboBoxItem(self.ui.containerFormatBox, format)
+
+    @staticmethod
+    def boxValue(box):
+        idx = box.currentIndex()
+        if idx == -1:
+            return None
+
+        return box.itemData(idx)
+
+    @staticmethod
+    def selectComboBoxItem(box, value):
+        for i in range(box.count()):
+            if box.itemData(i) == value:
+                box.setCurrentIndex(i)
+                break
+
+
+class Camera(QMainWindow):
+
+    def __init__(self, parent=None):
+        super(Camera, self).__init__(parent)
+
+        self.ui = Ui_Camera()
+        self.camera = None
+        self.imageCapture = None
+        self.mediaRecorder = None
+        self.isCapturingImage = False
+        self.applicationExiting = False
+
+        self.imageSettings = QImageEncoderSettings()
+        self.audioSettings = QAudioEncoderSettings()
+        self.videoSettings = QVideoEncoderSettings()
+        self.videoContainerFormat = ''
+
+        self.ui.setupUi(self)
+
+        cameraDevice = QByteArray()
+
+        videoDevicesGroup = QActionGroup(self)
+        videoDevicesGroup.setExclusive(True)
+
+        for deviceName in QCamera.availableDevices():
+            description = QCamera.deviceDescription(deviceName)
+            videoDeviceAction = QAction(description, videoDevicesGroup)
+            videoDeviceAction.setCheckable(True)
+            videoDeviceAction.setData(deviceName)
+
+            if cameraDevice.isEmpty():
+                cameraDevice = deviceName
+                videoDeviceAction.setChecked(True)
+
+            self.ui.menuDevices.addAction(videoDeviceAction)
+
+        videoDevicesGroup.triggered.connect(self.updateCameraDevice)
+        self.ui.captureWidget.currentChanged.connect(self.updateCaptureMode)
+
+        self.ui.lockButton.hide()
+
+        self.setCamera(cameraDevice)
+
+    def setCamera(self, cameraDevice):
+        if cameraDevice.isEmpty():
+            self.camera = QCamera()
+        else:
+            self.camera = QCamera(cameraDevice)
+
+        self.camera.stateChanged.connect(self.updateCameraState)
+        self.camera.error.connect(self.displayCameraError)
+
+        self.mediaRecorder = QMediaRecorder(self.camera)
+        self.mediaRecorder.stateChanged.connect(self.updateRecorderState)
+
+        self.imageCapture = QCameraImageCapture(self.camera)
+
+        self.mediaRecorder.durationChanged.connect(self.updateRecordTime)
+        self.mediaRecorder.error.connect(self.displayRecorderError)
+
+        self.mediaRecorder.setMetaData(QMediaMetaData.Title, "Test Title")
+
+        self.ui.exposureCompensation.valueChanged.connect(
+                self.setExposureCompensation)
+
+        self.camera.setViewfinder(self.ui.viewfinder)
+
+        self.updateCameraState(self.camera.state())
+        self.updateLockStatus(self.camera.lockStatus(), QCamera.UserRequest)
+        self.updateRecorderState(self.mediaRecorder.state())
+
+        self.imageCapture.readyForCaptureChanged.connect(self.readyForCapture)
+        self.imageCapture.imageCaptured.connect(self.processCapturedImage)
+        self.imageCapture.imageSaved.connect(self.imageSaved)
+
+        self.camera.lockStatusChanged.connect(self.updateLockStatus)
+
+        self.ui.captureWidget.setTabEnabled(0,
+                self.camera.isCaptureModeSupported(QCamera.CaptureStillImage))
+        self.ui.captureWidget.setTabEnabled(1,
+                self.camera.isCaptureModeSupported(QCamera.CaptureVideo))
+
+        self.updateCaptureMode()
+        self.camera.start()
+
+    def keyPressEvent(self, event):
+        if event.isAutoRepeat():
+            return
+
+        if event.key() == Qt.Key_CameraFocus:
+            self.displayViewfinder()
+            self.camera.searchAndLock()
+            event.accept()
+        elif event.key() == Qt.Key_Camera:
+            if self.camera.captureMode() == QCamera.CaptureStillImage:
+                self.takeImage()
+            elif self.mediaRecorder.state() == QMediaRecorder.RecordingState:
+                self.stop()
+            else:
+                self.record()
+
+            event.accept()
+        else:
+            super(Camera, self).keyPressEvent(event)
+
+    def keyReleaseEvent(self, event):
+        if event.isAutoRepeat():
+            return
+
+        if event.key() == Qt.Key_CameraFocus:
+            self.camera.unlock()
+        else:
+            super(Camera, self).keyReleaseEvent(event)
+
+    def updateRecordTime(self):
+        msg = "Recorded %d sec" % self.mediaRecorder.duration() // 1000
+        self.ui.statusbar.showMessage(msg)
+
+    def processCapturedImage(self, requestId, img):
+        scaledImage = img.scaled(self.ui.viewfinder.size(), Qt.KeepAspectRatio,
+                Qt.SmoothTransformation)
+
+        self.ui.lastImagePreviewLabel.setPixmap(QPixmap.fromImage(scaledImage))
+
+        self.displayCapturedImage()
+        QTimer.singleShot(4000, self.displayViewfinder)
+
+    def configureCaptureSettings(self):
+        if self.camera.captureMode() == QCamera.CaptureStillImage:
+            self.configureImageSettings()
+        elif self.camera.captureMode() == QCamera.CaptureVideo:
+            self.configureVideoSettings()
+
+    def configureVideoSettings(self):
+        settingsDialog = VideoSettings(self.mediaRecorder)
+
+        settingsDialog.setAudioSettings(self.audioSettings)
+        settingsDialog.setVideoSettings(self.videoSettings)
+        settingsDialog.setFormat(self.videoContainerFormat)
+
+        if settingsDialog.exec_():
+            self.audioSettings = settingsDialog.audioSettings()
+            self.videoSettings = settingsDialog.videoSettings()
+            self.videoContainerFormat = settingsDialog.format()
+
+            self.mediaRecorder.setEncodingSettings(self.audioSettings,
+                    self.videoSettings, self.videoContainerFormat)
+
+    def configureImageSettings(self):
+        settingsDialog = ImageSettings(self.imageCapture)
+
+        settingsDialog.setImageSettings(self.imageSettings)
+
+        if settingsDialog.exec_():
+            self.imageSettings = settingsDialog.imageSettings()
+            self.imageCapture.setEncodingSettings(self.imageSettings)
+
+    def record(self):
+        self.mediaRecorder.record()
+        self.updateRecordTime()
+
+    def pause(self):
+        self.mediaRecorder.pause()
+
+    def stop(self):
+        self.mediaRecorder.stop()
+
+    def setMuted(self, muted):
+        self.mediaRecorder.setMuted(muted)
+
+    def toggleLock(self):
+        if self.camera.lockStatus() in (QCamera.Searching, QCamera.Locked):
+            self.camera.unlock()
+        elif self.camera.lockStatus() == QCamera.Unlocked:
+            self.camera.searchAndLock()
+
+    def updateLockStatus(self, status, reason):
+        indicationColor = Qt.black
+
+        if status == QCamera.Searching:
+            self.ui.statusbar.showMessage("Focusing...")
+            self.ui.lockButton.setText("Focusing...")
+            indicationColor = Qt.yellow
+        elif status == QCamera.Locked:
+            self.ui.lockButton.setText("Unlock")
+            self.ui.statusbar.showMessage("Focused", 2000)
+            indicationColor = Qt.darkGreen
+        elif status == QCamera.Unlocked:
+            self.ui.lockButton.setText("Focus")
+
+            if reason == QCamera.LockFailed:
+                self.ui.statusbar.showMessage("Focus Failed", 2000)
+                indicationColor = Qt.red
+
+        palette = self.ui.lockButton.palette()
+        palette.setColor(QPalette.ButtonText, indicationColor)
+        self.ui.lockButton.setPalette(palette)
+
+    def takeImage(self):
+        self.isCapturingImage = True
+        self.imageCapture.capture()
+
+    def startCamera(self):
+        self.camera.start()
+
+    def stopCamera(self):
+        self.camera.stop()
+
+    def updateCaptureMode(self):
+        tabIndex = self.ui.captureWidget.currentIndex()
+        captureMode = QCamera.CaptureStillImage if tabIndex == 0 else QCamera.CaptureVideo
+
+        if self.camera.isCaptureModeSupported(captureMode):
+            self.camera.setCaptureMode(captureMode)
+
+    def updateCameraState(self, state):
+        if state == QCamera.ActiveState:
+            self.ui.actionStartCamera.setEnabled(False)
+            self.ui.actionStopCamera.setEnabled(True)
+            self.ui.captureWidget.setEnabled(True)
+            self.ui.actionSettings.setEnabled(True)
+        elif state in (QCamera.UnloadedState, QCamera.LoadedState):
+            self.ui.actionStartCamera.setEnabled(True)
+            self.ui.actionStopCamera.setEnabled(False)
+            self.ui.captureWidget.setEnabled(False)
+            self.ui.actionSettings.setEnabled(False)
+
+    def updateRecorderState(self, state):
+        if state == QMediaRecorder.StoppedState:
+            self.ui.recordButton.setEnabled(True)
+            self.ui.pauseButton.setEnabled(True)
+            self.ui.stopButton.setEnabled(False)
+        elif state == QMediaRecorder.PausedState:
+            self.ui.recordButton.setEnabled(True)
+            self.ui.pauseButton.setEnabled(False)
+            self.ui.stopButton.setEnabled(True)
+        elif state == QMediaRecorder.RecordingState:
+            self.ui.recordButton.setEnabled(False)
+            self.ui.pauseButton.setEnabled(True)
+            self.ui.stopButton.setEnabled(True)
+
+    def setExposureCompensation(self, index):
+        self.camera.exposure().setExposureCompensation(index * 0.5)
+
+    def displayRecorderError(self):
+        QMessageBox.warning(self, "Capture error",
+                self.mediaRecorder.errorString())
+
+    def displayCameraError(self):
+        QMessageBox.warning(self, "Camera error", self.camera.errorString())
+
+    def updateCameraDevice(self, action):
+        self.setCamera(action.data())
+
+    def displayViewfinder(self):
+        self.ui.stackedWidget.setCurrentIndex(0)
+
+    def displayCapturedImage(self):
+        self.ui.stackedWidget.setCurrentIndex(1)
+
+    def readyForCapture(self, ready):
+        self.ui.takeImageButton.setEnabled(ready)
+
+    def imageSaved(self, id, fileName):
+        self.isCapturingImage = False
+
+        if self.applicationExiting:
+            self.close()
+
+    def closeEvent(self, event):
+        if self.isCapturingImage:
+            self.setEnabled(False)
+            self.applicationExiting = True
+            event.ignore()
+        else:
+            event.accept()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    camera = Camera()
+    camera.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/multimediawidgets/camera/camera.ui b/examples/multimediawidgets/camera/camera.ui
new file mode 100644
index 0000000..10a2908
--- /dev/null
+++ b/examples/multimediawidgets/camera/camera.ui
@@ -0,0 +1,492 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Camera</class>
+ <widget class="QMainWindow" name="Camera">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>668</width>
+    <height>422</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Camera</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QGridLayout" name="gridLayout_3">
+    <item row="0" column="0" rowspan="3">
+     <widget class="QStackedWidget" name="stackedWidget">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+        <horstretch>1</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="palette">
+       <palette>
+        <active>
+         <colorrole role="Base">
+          <brush brushstyle="SolidPattern">
+           <color alpha="255">
+            <red>255</red>
+            <green>255</green>
+            <blue>255</blue>
+           </color>
+          </brush>
+         </colorrole>
+         <colorrole role="Window">
+          <brush brushstyle="SolidPattern">
+           <color alpha="255">
+            <red>145</red>
+            <green>145</green>
+            <blue>145</blue>
+           </color>
+          </brush>
+         </colorrole>
+        </active>
+        <inactive>
+         <colorrole role="Base">
+          <brush brushstyle="SolidPattern">
+           <color alpha="255">
+            <red>255</red>
+            <green>255</green>
+            <blue>255</blue>
+           </color>
+          </brush>
+         </colorrole>
+         <colorrole role="Window">
+          <brush brushstyle="SolidPattern">
+           <color alpha="255">
+            <red>145</red>
+            <green>145</green>
+            <blue>145</blue>
+           </color>
+          </brush>
+         </colorrole>
+        </inactive>
+        <disabled>
+         <colorrole role="Base">
+          <brush brushstyle="SolidPattern">
+           <color alpha="255">
+            <red>145</red>
+            <green>145</green>
+            <blue>145</blue>
+           </color>
+          </brush>
+         </colorrole>
+         <colorrole role="Window">
+          <brush brushstyle="SolidPattern">
+           <color alpha="255">
+            <red>145</red>
+            <green>145</green>
+            <blue>145</blue>
+           </color>
+          </brush>
+         </colorrole>
+        </disabled>
+       </palette>
+      </property>
+      <property name="currentIndex">
+       <number>0</number>
+      </property>
+      <widget class="QWidget" name="viewfinderPage">
+       <layout class="QGridLayout" name="gridLayout_5">
+        <item row="0" column="0">
+         <widget class="QCameraViewfinder" name="viewfinder" native="true"/>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="previewPage">
+       <layout class="QGridLayout" name="gridLayout_4">
+        <item row="0" column="0">
+         <widget class="QLabel" name="lastImagePreviewLabel">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="frameShape">
+           <enum>QFrame::Box</enum>
+          </property>
+          <property name="text">
+           <string/>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+    <item row="1" column="1" colspan="2">
+     <widget class="QPushButton" name="lockButton">
+      <property name="text">
+       <string>Focus</string>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="1" colspan="2">
+     <widget class="QTabWidget" name="captureWidget">
+      <property name="currentIndex">
+       <number>0</number>
+      </property>
+      <widget class="QWidget" name="tab_2">
+       <attribute name="title">
+        <string>Image</string>
+       </attribute>
+       <layout class="QGridLayout" name="gridLayout">
+        <item row="0" column="0">
+         <widget class="QPushButton" name="takeImageButton">
+          <property name="text">
+           <string>Capture Photo</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <spacer name="verticalSpacer_2">
+          <property name="orientation">
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>20</width>
+            <height>161</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item row="2" column="0">
+         <widget class="QLabel" name="label">
+          <property name="text">
+           <string>Exposure Compensation:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="0">
+         <widget class="QSlider" name="exposureCompensation">
+          <property name="minimum">
+           <number>-4</number>
+          </property>
+          <property name="maximum">
+           <number>4</number>
+          </property>
+          <property name="pageStep">
+           <number>2</number>
+          </property>
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="tickPosition">
+           <enum>QSlider::TicksAbove</enum>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="tab">
+       <attribute name="title">
+        <string>Video</string>
+       </attribute>
+       <layout class="QGridLayout" name="gridLayout_2">
+        <item row="0" column="0">
+         <widget class="QPushButton" name="recordButton">
+          <property name="text">
+           <string>Record</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QPushButton" name="pauseButton">
+          <property name="text">
+           <string>Pause</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0">
+         <widget class="QPushButton" name="stopButton">
+          <property name="text">
+           <string>Stop</string>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="0">
+         <spacer name="verticalSpacer">
+          <property name="orientation">
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>20</width>
+            <height>76</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item row="4" column="0">
+         <widget class="QPushButton" name="muteButton">
+          <property name="text">
+           <string>Mute</string>
+          </property>
+          <property name="checkable">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menubar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>668</width>
+     <height>29</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menuFile">
+    <property name="title">
+     <string>File</string>
+    </property>
+    <addaction name="actionStartCamera"/>
+    <addaction name="actionStopCamera"/>
+    <addaction name="separator"/>
+    <addaction name="actionSettings"/>
+    <addaction name="separator"/>
+    <addaction name="actionExit"/>
+   </widget>
+   <widget class="QMenu" name="menuDevices">
+    <property name="title">
+     <string>Devices</string>
+    </property>
+   </widget>
+   <addaction name="menuFile"/>
+   <addaction name="menuDevices"/>
+  </widget>
+  <widget class="QStatusBar" name="statusbar"/>
+  <action name="actionExit">
+   <property name="text">
+    <string>Exit</string>
+   </property>
+  </action>
+  <action name="actionStartCamera">
+   <property name="text">
+    <string>Start Camera</string>
+   </property>
+  </action>
+  <action name="actionStopCamera">
+   <property name="text">
+    <string>Stop Camera</string>
+   </property>
+  </action>
+  <action name="actionSettings">
+   <property name="text">
+    <string>Settings</string>
+   </property>
+  </action>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QCameraViewfinder</class>
+   <extends>QWidget</extends>
+   <header>PyQt5.QtMultimediaWidgets</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>recordButton</sender>
+   <signal>clicked()</signal>
+   <receiver>Camera</receiver>
+   <slot>record()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>647</x>
+     <y>149</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>61</x>
+     <y>238</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>stopButton</sender>
+   <signal>clicked()</signal>
+   <receiver>Camera</receiver>
+   <slot>stop()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>647</x>
+     <y>225</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>140</x>
+     <y>236</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>pauseButton</sender>
+   <signal>clicked()</signal>
+   <receiver>Camera</receiver>
+   <slot>pause()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>647</x>
+     <y>187</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>234</x>
+     <y>237</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>actionExit</sender>
+   <signal>triggered()</signal>
+   <receiver>Camera</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>154</x>
+     <y>130</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>takeImageButton</sender>
+   <signal>clicked()</signal>
+   <receiver>Camera</receiver>
+   <slot>takeImage()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>625</x>
+     <y>132</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>603</x>
+     <y>169</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>lockButton</sender>
+   <signal>clicked()</signal>
+   <receiver>Camera</receiver>
+   <slot>toggleLock()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>658</x>
+     <y>75</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>453</x>
+     <y>119</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>muteButton</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>Camera</receiver>
+   <slot>setMuted(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>647</x>
+     <y>377</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>5</x>
+     <y>280</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>exposureCompensation</sender>
+   <signal>valueChanged(int)</signal>
+   <receiver>Camera</receiver>
+   <slot>setExposureCompensation(int)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>559</x>
+     <y>367</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>665</x>
+     <y>365</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>actionSettings</sender>
+   <signal>triggered()</signal>
+   <receiver>Camera</receiver>
+   <slot>configureCaptureSettings()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>333</x>
+     <y>210</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>actionStartCamera</sender>
+   <signal>triggered()</signal>
+   <receiver>Camera</receiver>
+   <slot>startCamera()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>333</x>
+     <y>210</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>actionStopCamera</sender>
+   <signal>triggered()</signal>
+   <receiver>Camera</receiver>
+   <slot>stopCamera()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>333</x>
+     <y>210</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+ <slots>
+  <slot>record()</slot>
+  <slot>pause()</slot>
+  <slot>stop()</slot>
+  <slot>enablePreview(bool)</slot>
+  <slot>configureCaptureSettings()</slot>
+  <slot>takeImage()</slot>
+  <slot>startCamera()</slot>
+  <slot>toggleLock()</slot>
+  <slot>setMuted(bool)</slot>
+  <slot>stopCamera()</slot>
+  <slot>setExposureCompensation(int)</slot>
+ </slots>
+</ui>
diff --git a/examples/multimediawidgets/camera/imagesettings.ui b/examples/multimediawidgets/camera/imagesettings.ui
new file mode 100644
index 0000000..f790c77
--- /dev/null
+++ b/examples/multimediawidgets/camera/imagesettings.ui
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ImageSettingsUi</class>
+ <widget class="QDialog" name="ImageSettingsUi">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>332</width>
+    <height>270</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Image</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="0" colspan="2">
+       <widget class="QLabel" name="label_8">
+        <property name="text">
+         <string>Resolution:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="2">
+       <widget class="QComboBox" name="imageResolutionBox"/>
+      </item>
+      <item row="2" column="0" colspan="2">
+       <widget class="QLabel" name="label_6">
+        <property name="text">
+         <string>Image Format:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0" colspan="2">
+       <widget class="QComboBox" name="imageCodecBox"/>
+      </item>
+      <item row="4" column="0">
+       <widget class="QLabel" name="label_7">
+        <property name="text">
+         <string>Quality:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="1">
+       <widget class="QSlider" name="imageQualitySlider">
+        <property name="maximum">
+         <number>4</number>
+        </property>
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>14</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="0">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>ImageSettingsUi</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>322</x>
+     <y>272</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>44</x>
+     <y>230</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>ImageSettingsUi</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>405</x>
+     <y>262</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>364</x>
+     <y>227</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/examples/multimediawidgets/camera/ui_camera.py b/examples/multimediawidgets/camera/ui_camera.py
new file mode 100644
index 0000000..f806617
--- /dev/null
+++ b/examples/multimediawidgets/camera/ui_camera.py
@@ -0,0 +1,182 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'camera.ui'
+#
+# Created: Fri Jun 28 12:10:56 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-478d7f271b71
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_Camera(object):
+    def setupUi(self, Camera):
+        Camera.setObjectName("Camera")
+        Camera.resize(668, 422)
+        self.centralwidget = QtWidgets.QWidget(Camera)
+        self.centralwidget.setObjectName("centralwidget")
+        self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget)
+        self.gridLayout_3.setObjectName("gridLayout_3")
+        self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(1)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.stackedWidget.sizePolicy().hasHeightForWidth())
+        self.stackedWidget.setSizePolicy(sizePolicy)
+        palette = QtGui.QPalette()
+        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
+        brush = QtGui.QBrush(QtGui.QColor(145, 145, 145))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)
+        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
+        brush = QtGui.QBrush(QtGui.QColor(145, 145, 145))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)
+        brush = QtGui.QBrush(QtGui.QColor(145, 145, 145))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
+        brush = QtGui.QBrush(QtGui.QColor(145, 145, 145))
+        brush.setStyle(QtCore.Qt.SolidPattern)
+        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)
+        self.stackedWidget.setPalette(palette)
+        self.stackedWidget.setObjectName("stackedWidget")
+        self.viewfinderPage = QtWidgets.QWidget()
+        self.viewfinderPage.setObjectName("viewfinderPage")
+        self.gridLayout_5 = QtWidgets.QGridLayout(self.viewfinderPage)
+        self.gridLayout_5.setObjectName("gridLayout_5")
+        self.viewfinder = QCameraViewfinder(self.viewfinderPage)
+        self.viewfinder.setObjectName("viewfinder")
+        self.gridLayout_5.addWidget(self.viewfinder, 0, 0, 1, 1)
+        self.stackedWidget.addWidget(self.viewfinderPage)
+        self.previewPage = QtWidgets.QWidget()
+        self.previewPage.setObjectName("previewPage")
+        self.gridLayout_4 = QtWidgets.QGridLayout(self.previewPage)
+        self.gridLayout_4.setObjectName("gridLayout_4")
+        self.lastImagePreviewLabel = QtWidgets.QLabel(self.previewPage)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.lastImagePreviewLabel.sizePolicy().hasHeightForWidth())
+        self.lastImagePreviewLabel.setSizePolicy(sizePolicy)
+        self.lastImagePreviewLabel.setFrameShape(QtWidgets.QFrame.Box)
+        self.lastImagePreviewLabel.setText("")
+        self.lastImagePreviewLabel.setObjectName("lastImagePreviewLabel")
+        self.gridLayout_4.addWidget(self.lastImagePreviewLabel, 0, 0, 1, 1)
+        self.stackedWidget.addWidget(self.previewPage)
+        self.gridLayout_3.addWidget(self.stackedWidget, 0, 0, 3, 1)
+        self.lockButton = QtWidgets.QPushButton(self.centralwidget)
+        self.lockButton.setObjectName("lockButton")
+        self.gridLayout_3.addWidget(self.lockButton, 1, 1, 1, 2)
+        self.captureWidget = QtWidgets.QTabWidget(self.centralwidget)
+        self.captureWidget.setObjectName("captureWidget")
+        self.tab_2 = QtWidgets.QWidget()
+        self.tab_2.setObjectName("tab_2")
+        self.gridLayout = QtWidgets.QGridLayout(self.tab_2)
+        self.gridLayout.setObjectName("gridLayout")
+        self.takeImageButton = QtWidgets.QPushButton(self.tab_2)
+        self.takeImageButton.setObjectName("takeImageButton")
+        self.gridLayout.addWidget(self.takeImageButton, 0, 0, 1, 1)
+        spacerItem = QtWidgets.QSpacerItem(20, 161, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+        self.gridLayout.addItem(spacerItem, 1, 0, 1, 1)
+        self.label = QtWidgets.QLabel(self.tab_2)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 2, 0, 1, 1)
+        self.exposureCompensation = QtWidgets.QSlider(self.tab_2)
+        self.exposureCompensation.setMinimum(-4)
+        self.exposureCompensation.setMaximum(4)
+        self.exposureCompensation.setPageStep(2)
+        self.exposureCompensation.setOrientation(QtCore.Qt.Horizontal)
+        self.exposureCompensation.setTickPosition(QtWidgets.QSlider.TicksAbove)
+        self.exposureCompensation.setObjectName("exposureCompensation")
+        self.gridLayout.addWidget(self.exposureCompensation, 3, 0, 1, 1)
+        self.captureWidget.addTab(self.tab_2, "")
+        self.tab = QtWidgets.QWidget()
+        self.tab.setObjectName("tab")
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.tab)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.recordButton = QtWidgets.QPushButton(self.tab)
+        self.recordButton.setObjectName("recordButton")
+        self.gridLayout_2.addWidget(self.recordButton, 0, 0, 1, 1)
+        self.pauseButton = QtWidgets.QPushButton(self.tab)
+        self.pauseButton.setObjectName("pauseButton")
+        self.gridLayout_2.addWidget(self.pauseButton, 1, 0, 1, 1)
+        self.stopButton = QtWidgets.QPushButton(self.tab)
+        self.stopButton.setObjectName("stopButton")
+        self.gridLayout_2.addWidget(self.stopButton, 2, 0, 1, 1)
+        spacerItem1 = QtWidgets.QSpacerItem(20, 76, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+        self.gridLayout_2.addItem(spacerItem1, 3, 0, 1, 1)
+        self.muteButton = QtWidgets.QPushButton(self.tab)
+        self.muteButton.setCheckable(True)
+        self.muteButton.setObjectName("muteButton")
+        self.gridLayout_2.addWidget(self.muteButton, 4, 0, 1, 1)
+        self.captureWidget.addTab(self.tab, "")
+        self.gridLayout_3.addWidget(self.captureWidget, 2, 1, 1, 2)
+        Camera.setCentralWidget(self.centralwidget)
+        self.menubar = QtWidgets.QMenuBar(Camera)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 668, 29))
+        self.menubar.setObjectName("menubar")
+        self.menuFile = QtWidgets.QMenu(self.menubar)
+        self.menuFile.setObjectName("menuFile")
+        self.menuDevices = QtWidgets.QMenu(self.menubar)
+        self.menuDevices.setObjectName("menuDevices")
+        Camera.setMenuBar(self.menubar)
+        self.statusbar = QtWidgets.QStatusBar(Camera)
+        self.statusbar.setObjectName("statusbar")
+        Camera.setStatusBar(self.statusbar)
+        self.actionExit = QtWidgets.QAction(Camera)
+        self.actionExit.setObjectName("actionExit")
+        self.actionStartCamera = QtWidgets.QAction(Camera)
+        self.actionStartCamera.setObjectName("actionStartCamera")
+        self.actionStopCamera = QtWidgets.QAction(Camera)
+        self.actionStopCamera.setObjectName("actionStopCamera")
+        self.actionSettings = QtWidgets.QAction(Camera)
+        self.actionSettings.setObjectName("actionSettings")
+        self.menuFile.addAction(self.actionStartCamera)
+        self.menuFile.addAction(self.actionStopCamera)
+        self.menuFile.addSeparator()
+        self.menuFile.addAction(self.actionSettings)
+        self.menuFile.addSeparator()
+        self.menuFile.addAction(self.actionExit)
+        self.menubar.addAction(self.menuFile.menuAction())
+        self.menubar.addAction(self.menuDevices.menuAction())
+
+        self.retranslateUi(Camera)
+        self.stackedWidget.setCurrentIndex(0)
+        self.captureWidget.setCurrentIndex(0)
+        self.recordButton.clicked.connect(Camera.record)
+        self.stopButton.clicked.connect(Camera.stop)
+        self.pauseButton.clicked.connect(Camera.pause)
+        self.actionExit.triggered.connect(Camera.close)
+        self.takeImageButton.clicked.connect(Camera.takeImage)
+        self.lockButton.clicked.connect(Camera.toggleLock)
+        self.muteButton.toggled['bool'].connect(Camera.setMuted)
+        self.exposureCompensation.valueChanged['int'].connect(Camera.setExposureCompensation)
+        self.actionSettings.triggered.connect(Camera.configureCaptureSettings)
+        self.actionStartCamera.triggered.connect(Camera.startCamera)
+        self.actionStopCamera.triggered.connect(Camera.stopCamera)
+        QtCore.QMetaObject.connectSlotsByName(Camera)
+
+    def retranslateUi(self, Camera):
+        _translate = QtCore.QCoreApplication.translate
+        Camera.setWindowTitle(_translate("Camera", "Camera"))
+        self.lockButton.setText(_translate("Camera", "Focus"))
+        self.takeImageButton.setText(_translate("Camera", "Capture Photo"))
+        self.label.setText(_translate("Camera", "Exposure Compensation:"))
+        self.captureWidget.setTabText(self.captureWidget.indexOf(self.tab_2), _translate("Camera", "Image"))
+        self.recordButton.setText(_translate("Camera", "Record"))
+        self.pauseButton.setText(_translate("Camera", "Pause"))
+        self.stopButton.setText(_translate("Camera", "Stop"))
+        self.muteButton.setText(_translate("Camera", "Mute"))
+        self.captureWidget.setTabText(self.captureWidget.indexOf(self.tab), _translate("Camera", "Video"))
+        self.menuFile.setTitle(_translate("Camera", "File"))
+        self.menuDevices.setTitle(_translate("Camera", "Devices"))
+        self.actionExit.setText(_translate("Camera", "Exit"))
+        self.actionStartCamera.setText(_translate("Camera", "Start Camera"))
+        self.actionStopCamera.setText(_translate("Camera", "Stop Camera"))
+        self.actionSettings.setText(_translate("Camera", "Settings"))
+
+from PyQt5.QtMultimediaWidgets import QCameraViewfinder
diff --git a/examples/multimediawidgets/camera/ui_imagesettings.py b/examples/multimediawidgets/camera/ui_imagesettings.py
new file mode 100644
index 0000000..b7e4106
--- /dev/null
+++ b/examples/multimediawidgets/camera/ui_imagesettings.py
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'imagesettings.ui'
+#
+# Created: Fri Jun 28 11:48:28 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-478d7f271b71
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_ImageSettingsUi(object):
+    def setupUi(self, ImageSettingsUi):
+        ImageSettingsUi.setObjectName("ImageSettingsUi")
+        ImageSettingsUi.resize(332, 270)
+        self.gridLayout = QtWidgets.QGridLayout(ImageSettingsUi)
+        self.gridLayout.setObjectName("gridLayout")
+        self.groupBox_2 = QtWidgets.QGroupBox(ImageSettingsUi)
+        self.groupBox_2.setObjectName("groupBox_2")
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_2)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.label_8 = QtWidgets.QLabel(self.groupBox_2)
+        self.label_8.setObjectName("label_8")
+        self.gridLayout_2.addWidget(self.label_8, 0, 0, 1, 2)
+        self.imageResolutionBox = QtWidgets.QComboBox(self.groupBox_2)
+        self.imageResolutionBox.setObjectName("imageResolutionBox")
+        self.gridLayout_2.addWidget(self.imageResolutionBox, 1, 0, 1, 2)
+        self.label_6 = QtWidgets.QLabel(self.groupBox_2)
+        self.label_6.setObjectName("label_6")
+        self.gridLayout_2.addWidget(self.label_6, 2, 0, 1, 2)
+        self.imageCodecBox = QtWidgets.QComboBox(self.groupBox_2)
+        self.imageCodecBox.setObjectName("imageCodecBox")
+        self.gridLayout_2.addWidget(self.imageCodecBox, 3, 0, 1, 2)
+        self.label_7 = QtWidgets.QLabel(self.groupBox_2)
+        self.label_7.setObjectName("label_7")
+        self.gridLayout_2.addWidget(self.label_7, 4, 0, 1, 1)
+        self.imageQualitySlider = QtWidgets.QSlider(self.groupBox_2)
+        self.imageQualitySlider.setMaximum(4)
+        self.imageQualitySlider.setOrientation(QtCore.Qt.Horizontal)
+        self.imageQualitySlider.setObjectName("imageQualitySlider")
+        self.gridLayout_2.addWidget(self.imageQualitySlider, 4, 1, 1, 1)
+        self.gridLayout.addWidget(self.groupBox_2, 0, 0, 1, 1)
+        spacerItem = QtWidgets.QSpacerItem(20, 14, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+        self.gridLayout.addItem(spacerItem, 1, 0, 1, 1)
+        self.buttonBox = QtWidgets.QDialogButtonBox(ImageSettingsUi)
+        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.gridLayout.addWidget(self.buttonBox, 2, 0, 1, 1)
+
+        self.retranslateUi(ImageSettingsUi)
+        self.buttonBox.accepted.connect(ImageSettingsUi.accept)
+        self.buttonBox.rejected.connect(ImageSettingsUi.reject)
+        QtCore.QMetaObject.connectSlotsByName(ImageSettingsUi)
+
+    def retranslateUi(self, ImageSettingsUi):
+        _translate = QtCore.QCoreApplication.translate
+        ImageSettingsUi.setWindowTitle(_translate("ImageSettingsUi", "Dialog"))
+        self.groupBox_2.setTitle(_translate("ImageSettingsUi", "Image"))
+        self.label_8.setText(_translate("ImageSettingsUi", "Resolution:"))
+        self.label_6.setText(_translate("ImageSettingsUi", "Image Format:"))
+        self.label_7.setText(_translate("ImageSettingsUi", "Quality:"))
+
diff --git a/examples/multimediawidgets/camera/ui_videosettings.py b/examples/multimediawidgets/camera/ui_videosettings.py
new file mode 100644
index 0000000..46bba09
--- /dev/null
+++ b/examples/multimediawidgets/camera/ui_videosettings.py
@@ -0,0 +1,117 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'videosettings.ui'
+#
+# Created: Fri Jun 28 11:48:14 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-478d7f271b71
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_VideoSettingsUi(object):
+    def setupUi(self, VideoSettingsUi):
+        VideoSettingsUi.setObjectName("VideoSettingsUi")
+        VideoSettingsUi.resize(561, 369)
+        self.gridLayout_4 = QtWidgets.QGridLayout(VideoSettingsUi)
+        self.gridLayout_4.setObjectName("gridLayout_4")
+        self.scrollArea = QtWidgets.QScrollArea(VideoSettingsUi)
+        self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame)
+        self.scrollArea.setWidgetResizable(True)
+        self.scrollArea.setObjectName("scrollArea")
+        self.scrollAreaWidgetContents = QtWidgets.QWidget()
+        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 543, 250))
+        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
+        self.gridLayout_3 = QtWidgets.QGridLayout(self.scrollAreaWidgetContents)
+        self.gridLayout_3.setObjectName("gridLayout_3")
+        self.groupBox = QtWidgets.QGroupBox(self.scrollAreaWidgetContents)
+        self.groupBox.setObjectName("groupBox")
+        self.gridLayout = QtWidgets.QGridLayout(self.groupBox)
+        self.gridLayout.setObjectName("gridLayout")
+        self.label_2 = QtWidgets.QLabel(self.groupBox)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout.addWidget(self.label_2, 0, 0, 1, 2)
+        self.audioCodecBox = QtWidgets.QComboBox(self.groupBox)
+        self.audioCodecBox.setObjectName("audioCodecBox")
+        self.gridLayout.addWidget(self.audioCodecBox, 1, 0, 1, 2)
+        self.label_5 = QtWidgets.QLabel(self.groupBox)
+        self.label_5.setObjectName("label_5")
+        self.gridLayout.addWidget(self.label_5, 2, 0, 1, 2)
+        self.audioSampleRateBox = QtWidgets.QComboBox(self.groupBox)
+        self.audioSampleRateBox.setObjectName("audioSampleRateBox")
+        self.gridLayout.addWidget(self.audioSampleRateBox, 3, 0, 1, 2)
+        self.label_3 = QtWidgets.QLabel(self.groupBox)
+        self.label_3.setObjectName("label_3")
+        self.gridLayout.addWidget(self.label_3, 4, 0, 1, 1)
+        self.audioQualitySlider = QtWidgets.QSlider(self.groupBox)
+        self.audioQualitySlider.setMaximum(4)
+        self.audioQualitySlider.setOrientation(QtCore.Qt.Horizontal)
+        self.audioQualitySlider.setObjectName("audioQualitySlider")
+        self.gridLayout.addWidget(self.audioQualitySlider, 4, 1, 1, 1)
+        self.gridLayout_3.addWidget(self.groupBox, 0, 0, 1, 1)
+        self.groupBox_2 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents)
+        self.groupBox_2.setObjectName("groupBox_2")
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_2)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.label_8 = QtWidgets.QLabel(self.groupBox_2)
+        self.label_8.setObjectName("label_8")
+        self.gridLayout_2.addWidget(self.label_8, 0, 0, 1, 2)
+        self.videoResolutionBox = QtWidgets.QComboBox(self.groupBox_2)
+        self.videoResolutionBox.setObjectName("videoResolutionBox")
+        self.gridLayout_2.addWidget(self.videoResolutionBox, 1, 0, 1, 2)
+        self.label_9 = QtWidgets.QLabel(self.groupBox_2)
+        self.label_9.setObjectName("label_9")
+        self.gridLayout_2.addWidget(self.label_9, 2, 0, 1, 2)
+        self.videoFramerateBox = QtWidgets.QComboBox(self.groupBox_2)
+        self.videoFramerateBox.setObjectName("videoFramerateBox")
+        self.gridLayout_2.addWidget(self.videoFramerateBox, 3, 0, 1, 2)
+        self.label_6 = QtWidgets.QLabel(self.groupBox_2)
+        self.label_6.setObjectName("label_6")
+        self.gridLayout_2.addWidget(self.label_6, 4, 0, 1, 2)
+        self.videoCodecBox = QtWidgets.QComboBox(self.groupBox_2)
+        self.videoCodecBox.setObjectName("videoCodecBox")
+        self.gridLayout_2.addWidget(self.videoCodecBox, 5, 0, 1, 2)
+        self.label_7 = QtWidgets.QLabel(self.groupBox_2)
+        self.label_7.setObjectName("label_7")
+        self.gridLayout_2.addWidget(self.label_7, 6, 0, 1, 1)
+        self.videoQualitySlider = QtWidgets.QSlider(self.groupBox_2)
+        self.videoQualitySlider.setMaximum(4)
+        self.videoQualitySlider.setOrientation(QtCore.Qt.Horizontal)
+        self.videoQualitySlider.setObjectName("videoQualitySlider")
+        self.gridLayout_2.addWidget(self.videoQualitySlider, 6, 1, 1, 1)
+        self.gridLayout_3.addWidget(self.groupBox_2, 0, 1, 3, 1)
+        self.label_4 = QtWidgets.QLabel(self.scrollAreaWidgetContents)
+        self.label_4.setObjectName("label_4")
+        self.gridLayout_3.addWidget(self.label_4, 1, 0, 1, 1)
+        self.containerFormatBox = QtWidgets.QComboBox(self.scrollAreaWidgetContents)
+        self.containerFormatBox.setObjectName("containerFormatBox")
+        self.gridLayout_3.addWidget(self.containerFormatBox, 2, 0, 1, 1)
+        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
+        self.gridLayout_4.addWidget(self.scrollArea, 0, 0, 1, 1)
+        spacerItem = QtWidgets.QSpacerItem(20, 14, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+        self.gridLayout_4.addItem(spacerItem, 1, 0, 1, 1)
+        self.buttonBox = QtWidgets.QDialogButtonBox(VideoSettingsUi)
+        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.gridLayout_4.addWidget(self.buttonBox, 2, 0, 1, 1)
+
+        self.retranslateUi(VideoSettingsUi)
+        self.buttonBox.accepted.connect(VideoSettingsUi.accept)
+        self.buttonBox.rejected.connect(VideoSettingsUi.reject)
+        QtCore.QMetaObject.connectSlotsByName(VideoSettingsUi)
+
+    def retranslateUi(self, VideoSettingsUi):
+        _translate = QtCore.QCoreApplication.translate
+        VideoSettingsUi.setWindowTitle(_translate("VideoSettingsUi", "Dialog"))
+        self.groupBox.setTitle(_translate("VideoSettingsUi", "Audio"))
+        self.label_2.setText(_translate("VideoSettingsUi", "Audio Codec:"))
+        self.label_5.setText(_translate("VideoSettingsUi", "Sample Rate:"))
+        self.label_3.setText(_translate("VideoSettingsUi", "Quality:"))
+        self.groupBox_2.setTitle(_translate("VideoSettingsUi", "Video"))
+        self.label_8.setText(_translate("VideoSettingsUi", "Resolution:"))
+        self.label_9.setText(_translate("VideoSettingsUi", "Framerate:"))
+        self.label_6.setText(_translate("VideoSettingsUi", "Video Codec:"))
+        self.label_7.setText(_translate("VideoSettingsUi", "Quality:"))
+        self.label_4.setText(_translate("VideoSettingsUi", "Container Format:"))
+
diff --git a/examples/multimediawidgets/camera/videosettings.ui b/examples/multimediawidgets/camera/videosettings.ui
new file mode 100644
index 0000000..f6aa004
--- /dev/null
+++ b/examples/multimediawidgets/camera/videosettings.ui
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>VideoSettingsUi</class>
+ <widget class="QDialog" name="VideoSettingsUi">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>561</width>
+    <height>369</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_4">
+   <item row="0" column="0">
+    <widget class="QScrollArea" name="scrollArea">
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="widgetResizable">
+      <bool>true</bool>
+     </property>
+     <widget class="QWidget" name="scrollAreaWidgetContents">
+      <property name="geometry">
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>543</width>
+        <height>250</height>
+       </rect>
+      </property>
+      <layout class="QGridLayout" name="gridLayout_3">
+       <item row="0" column="0">
+        <widget class="QGroupBox" name="groupBox">
+         <property name="title">
+          <string>Audio</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout">
+          <item row="0" column="0" colspan="2">
+           <widget class="QLabel" name="label_2">
+            <property name="text">
+             <string>Audio Codec:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" colspan="2">
+           <widget class="QComboBox" name="audioCodecBox"/>
+          </item>
+          <item row="2" column="0" colspan="2">
+           <widget class="QLabel" name="label_5">
+            <property name="text">
+             <string>Sample Rate:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="3" column="0" colspan="2">
+           <widget class="QComboBox" name="audioSampleRateBox"/>
+          </item>
+          <item row="4" column="0">
+           <widget class="QLabel" name="label_3">
+            <property name="text">
+             <string>Quality:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="4" column="1">
+           <widget class="QSlider" name="audioQualitySlider">
+            <property name="maximum">
+             <number>4</number>
+            </property>
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="0" column="1" rowspan="3">
+        <widget class="QGroupBox" name="groupBox_2">
+         <property name="title">
+          <string>Video</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_2">
+          <item row="0" column="0" colspan="2">
+           <widget class="QLabel" name="label_8">
+            <property name="text">
+             <string>Resolution:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" colspan="2">
+           <widget class="QComboBox" name="videoResolutionBox"/>
+          </item>
+          <item row="2" column="0" colspan="2">
+           <widget class="QLabel" name="label_9">
+            <property name="text">
+             <string>Framerate:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="3" column="0" colspan="2">
+           <widget class="QComboBox" name="videoFramerateBox"/>
+          </item>
+          <item row="4" column="0" colspan="2">
+           <widget class="QLabel" name="label_6">
+            <property name="text">
+             <string>Video Codec:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="5" column="0" colspan="2">
+           <widget class="QComboBox" name="videoCodecBox"/>
+          </item>
+          <item row="6" column="0">
+           <widget class="QLabel" name="label_7">
+            <property name="text">
+             <string>Quality:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="6" column="1">
+           <widget class="QSlider" name="videoQualitySlider">
+            <property name="maximum">
+             <number>4</number>
+            </property>
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="label_4">
+         <property name="text">
+          <string>Container Format:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0">
+        <widget class="QComboBox" name="containerFormatBox"/>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>14</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="0">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>VideoSettingsUi</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>322</x>
+     <y>272</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>44</x>
+     <y>230</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>VideoSettingsUi</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>405</x>
+     <y>262</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>364</x>
+     <y>227</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/examples/multimediawidgets/player.py b/examples/multimediawidgets/player.py
new file mode 100755
index 0000000..c0ec162
--- /dev/null
+++ b/examples/multimediawidgets/player.py
@@ -0,0 +1,691 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Q_ARG, QAbstractItemModel,
+        QFileInfo, qFuzzyCompare, QMetaObject, QModelIndex, QObject, Qt,
+        QThread, QTime, QUrl)
+from PyQt5.QtGui import QColor, qGray, QImage, QPainter, QPalette
+from PyQt5.QtMultimedia import (QAbstractVideoBuffer, QMediaContent,
+        QMediaMetaData, QMediaPlayer, QMediaPlaylist, QVideoFrame, QVideoProbe)
+from PyQt5.QtMultimediaWidgets import QVideoWidget
+from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog, QFileDialog,
+        QFormLayout, QHBoxLayout, QLabel, QListView, QMessageBox, QPushButton,
+        QSizePolicy, QSlider, QStyle, QToolButton, QVBoxLayout, QWidget)
+
+
+class VideoWidget(QVideoWidget):
+
+    def __init__(self, parent=None):
+        super(VideoWidget, self).__init__(parent)
+
+        self.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
+
+        p = self.palette()
+        p.setColor(QPalette.Window, Qt.black)
+        self.setPalette(p)
+
+        self.setAttribute(Qt.WA_OpaquePaintEvent)
+
+    def keyPressEvent(self, event):
+        if event.key() == Qt.Key_Escape and self.isFullScreen():
+            self.setFullScreen(False)
+            event.accept()
+        elif event.key() == Qt.Key_Enter and event.modifiers() & Qt.Key_Alt:
+            self.setFullScreen(not self.isFullScreen())
+            event.accept()
+        else:
+            super(VideoWidget, self).keyPressEvent(event)
+
+    def mouseDoubleClickEvent(self, event):
+        self.setFullScreen(not self.isFullScreen())
+        event.accept()
+
+
+class PlaylistModel(QAbstractItemModel):
+
+    Title, ColumnCount = range(2)
+
+    def __init__(self, parent=None):
+        super(PlaylistModel, self).__init__(parent)
+
+        self.m_playlist = None
+
+    def rowCount(self, parent=QModelIndex()):
+        return self.m_playlist.mediaCount() if self.m_playlist is not None and not parent.isValid() else 0
+
+    def columnCount(self, parent=QModelIndex()):
+        return self.ColumnCount if not parent.isValid() else 0
+
+    def index(self, row, column, parent=QModelIndex()):
+        return self.createIndex(row, column) if self.m_playlist is not None and not parent.isValid() and row >= 0 and row < self.m_playlist.mediaCount() and column >= 0 and column < self.ColumnCount else QModelIndex()
+
+    def parent(self, child):
+        return QModelIndex()
+
+    def data(self, index, role=Qt.DisplayRole):
+        if index.isValid() and role == Qt.DisplayRole:
+            if index.column() == self.Title:
+                location = self.m_playlist.media(index.row()).canonicalUrl()
+                return QFileInfo(location.path()).fileName()
+
+            return self.m_data[index]
+
+        return None
+
+    def playlist(self):
+        return self.m_playlist
+
+    def setPlaylist(self, playlist):
+        if self.m_playlist is not None:
+            self.m_playlist.mediaAboutToBeInserted.disconnect(
+                    self.beginInsertItems)
+            self.m_playlist.mediaInserted.disconnect(self.endInsertItems)
+            self.m_playlist.mediaAboutToBeRemoved.disconnect(
+                    self.beginRemoveItems)
+            self.m_playlist.mediaRemoved.disconnect(self.endRemoveItems)
+            self.m_playlist.mediaChanged.disconnect(self.changeItems)
+
+        self.beginResetModel()
+        self.m_playlist = playlist
+
+        if self.m_playlist is not None:
+            self.m_playlist.mediaAboutToBeInserted.connect(
+                    self.beginInsertItems)
+            self.m_playlist.mediaInserted.connect(self.endInsertItems)
+            self.m_playlist.mediaAboutToBeRemoved.connect(
+                    self.beginRemoveItems)
+            self.m_playlist.mediaRemoved.connect(self.endRemoveItems)
+            self.m_playlist.mediaChanged.connect(self.changeItems)
+
+        self.endResetModel()
+
+    def beginInsertItems(self, start, end):
+        self.beginInsertRows(QModelIndex(), start, end)
+
+    def endInsertItems(self):
+        self.endInsertRows()
+
+    def beginRemoveItems(self, start, end):
+        self.beginRemoveRows(QModelIndex(), start, end)
+
+    def endRemoveItems(self):
+        self.endRemoveRows()
+
+    def changeItems(self, start, end):
+        self.dataChanged.emit(self.index(start, 0),
+                self.index(end, self.ColumnCount))
+
+
+class PlayerControls(QWidget):
+
+    play = pyqtSignal()
+    pause = pyqtSignal()
+    stop = pyqtSignal()
+    next = pyqtSignal()
+    previous = pyqtSignal()
+    changeVolume = pyqtSignal(int)
+    changeMuting = pyqtSignal(bool)
+    changeRate = pyqtSignal(float)
+
+    def __init__(self, parent=None):
+        super(PlayerControls, self).__init__(parent)
+
+        self.playerState = QMediaPlayer.StoppedState
+        self.playerMuted = False
+
+        self.playButton = QToolButton(clicked=self.playClicked)
+        self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
+
+        self.stopButton = QToolButton(clicked=self.stop)
+        self.stopButton.setIcon(self.style().standardIcon(QStyle.SP_MediaStop))
+        self.stopButton.setEnabled(False)
+
+        self.nextButton = QToolButton(clicked=self.next)
+        self.nextButton.setIcon(
+                self.style().standardIcon(QStyle.SP_MediaSkipForward))
+
+        self.previousButton = QToolButton(clicked=self.previous)
+        self.previousButton.setIcon(
+                self.style().standardIcon(QStyle.SP_MediaSkipBackward))
+
+        self.muteButton = QToolButton(clicked=self.muteClicked)
+        self.muteButton.setIcon(
+                self.style().standardIcon(QStyle.SP_MediaVolume))
+
+        self.volumeSlider = QSlider(Qt.Horizontal,
+                sliderMoved=self.changeVolume)
+        self.volumeSlider.setRange(0, 100)
+
+        self.rateBox = QComboBox(activated=self.updateRate)
+        self.rateBox.addItem("0.5x", 0.5)
+        self.rateBox.addItem("1.0x", 1.0)
+        self.rateBox.addItem("2.0x", 2.0)
+        self.rateBox.setCurrentIndex(1)
+
+        layout = QHBoxLayout()
+        layout.setContentsMargins(0, 0, 0, 0)
+        layout.addWidget(self.stopButton)
+        layout.addWidget(self.previousButton)
+        layout.addWidget(self.playButton)
+        layout.addWidget(self.nextButton)
+        layout.addWidget(self.muteButton)
+        layout.addWidget(self.volumeSlider)
+        layout.addWidget(self.rateBox)
+        self.setLayout(layout)
+
+    def state(self):
+        return self.playerState
+
+    def setState(self,state):
+        if state != self.playerState:
+            self.playerState = state
+
+            if state == QMediaPlayer.StoppedState:
+                self.stopButton.setEnabled(False)
+                self.playButton.setIcon(
+                        self.style().standardIcon(QStyle.SP_MediaPlay))
+            elif state == QMediaPlayer.PlayingState:
+                self.stopButton.setEnabled(True)
+                self.playButton.setIcon(
+                        self.style().standardIcon(QStyle.SP_MediaPause))
+            elif state == QMediaPlayer.PausedState:
+                self.stopButton.setEnabled(True)
+                self.playButton.setIcon(
+                        self.style().standardIcon(QStyle.SP_MediaPlay))
+
+    def volume(self):
+        return self.volumeSlider.value()
+
+    def setVolume(self, volume):
+        self.volumeSlider.setValue(volume)
+
+    def isMuted(self):
+        return self.playerMuted
+
+    def setMuted(self, muted):
+        if muted != self.playerMuted:
+            self.playerMuted = muted
+
+            self.muteButton.setIcon(
+                    self.style().standardIcon(
+                            QStyle.SP_MediaVolumeMuted if muted else QStyle.SP_MediaVolume))
+
+    def playClicked(self):
+        if self.playerState in (QMediaPlayer.StoppedState, QMediaPlayer.PausedState):
+            self.play.emit()
+        elif self.playerState == QMediaPlayer.PlayingState:
+            self.pause.emit()
+
+    def muteClicked(self):
+        self.changeMuting.emit(not self.playerMuted)
+
+    def playbackRate(self):
+        return self.rateBox.itemData(self.rateBox.currentIndex())
+
+    def setPlaybackRate(self, rate):
+        for i in range(self.rateBox.count()):
+            if qFuzzyCompare(rate, self.rateBox.itemData(i)):
+                self.rateBox.setCurrentIndex(i)
+                return
+
+        self.rateBox.addItem("%dx" % rate, rate)
+        self.rateBox.setCurrentIndex(self.rateBox.count() - 1)
+
+    def updateRate(self):
+        self.changeRate.emit(self.playbackRate())
+
+
+class FrameProcessor(QObject):
+
+    histogramReady = pyqtSignal(list)
+
+    @pyqtSlot(QVideoFrame, int)
+    def processFrame(self, frame, levels):
+        histogram = [0.0] * levels
+
+        if levels and frame.map(QAbstractVideoBuffer.ReadOnly):
+            pixelFormat = frame.pixelFormat()
+
+            if pixelFormat == QVideoFrame.Format_YUV420P or pixelFormat == QVideoFrame.Format_NV12:
+                # Process YUV data.
+                bits = frame.bits()
+                for idx in range(frame.height() * frame.width()):
+                    histogram[(bits[idx] * levels) >> 8] += 1.0
+            else:
+                imageFormat = QVideoFrame.imageFormatFromPixelFormat(pixelFormat)
+                if imageFormat != QImage.Format_Invalid:
+                    # Process RGB data.
+                    image = QImage(frame.bits(), frame.width(), frame.height(), imageFormat)
+
+                    for y in range(image.height()):
+                        for x in range(image.width()):
+                            pixel = image.pixel(x, y)
+                            histogram[(qGray(pixel) * levels) >> 8] += 1.0
+
+            # Find the maximum value.
+            maxValue = 0.0
+            for value in histogram:
+                if value > maxValue:
+                    maxValue = value
+
+            # Normalise the values between 0 and 1.
+            if maxValue > 0.0:
+                for i in range(len(histogram)):
+                    histogram[i] /= maxValue
+
+            frame.unmap()
+
+        self.histogramReady.emit(histogram)
+
+
+class HistogramWidget(QWidget):
+
+    def __init__(self, parent=None):
+        super(HistogramWidget, self).__init__(parent)
+
+        self.m_levels = 128
+        self.m_isBusy = False
+        self.m_histogram = []
+        self.m_processor = FrameProcessor()
+        self.m_processorThread = QThread()
+
+        self.m_processor.moveToThread(self.m_processorThread)
+        self.m_processor.histogramReady.connect(self.setHistogram)
+
+    def __del__(self):
+        self.m_processorThread.quit()
+        self.m_processorThread.wait(10000)
+
+    def setLevels(self, levels):
+        self.m_levels = levels
+
+    def processFrame(self, frame):
+        if self.m_isBusy:
+            return
+
+        self.m_isBusy = True
+        QMetaObject.invokeMethod(self.m_processor, 'processFrame',
+                Qt.QueuedConnection, Q_ARG(QVideoFrame, frame),
+                Q_ARG(int, self.m_levels))
+
+    @pyqtSlot(list)
+    def setHistogram(self, histogram):
+        self.m_isBusy = False
+        self.m_histogram = list(histogram)
+        self.update()
+
+    def paintEvent(self, event):
+        painter = QPainter(self)
+
+        if len(self.m_histogram) == 0:
+            painter.fillRect(0, 0, self.width(), self.height(),
+                    QColor.fromRgb(0, 0, 0))
+            return
+
+        barWidth = self.width() / float(len(self.m_histogram))
+
+        for i, value in enumerate(self.m_histogram):
+            h = value * self.height()
+            # Draw the level.
+            painter.fillRect(barWidth * i, self.height() - h,
+                    barWidth * (i + 1), self.height(), Qt.red)
+            # Clear the rest of the control.
+            painter.fillRect(barWidth * i, 0, barWidth * (i + 1),
+                    self.height() - h, Qt.black)
+
+
+class Player(QWidget):
+
+    fullScreenChanged = pyqtSignal(bool)
+
+    def __init__(self, playlist, parent=None):
+        super(Player, self).__init__(parent)
+
+        self.colorDialog = None
+        self.trackInfo = ""
+        self.statusInfo = ""
+        self.duration = 0
+
+        self.player = QMediaPlayer()
+        self.playlist = QMediaPlaylist()
+        self.player.setPlaylist(self.playlist)
+
+        self.player.durationChanged.connect(self.durationChanged)
+        self.player.positionChanged.connect(self.positionChanged)
+        self.player.metaDataChanged.connect(self.metaDataChanged)
+        self.playlist.currentIndexChanged.connect(self.playlistPositionChanged)
+        self.player.mediaStatusChanged.connect(self.statusChanged)
+        self.player.bufferStatusChanged.connect(self.bufferingProgress)
+        self.player.videoAvailableChanged.connect(self.videoAvailableChanged)
+        self.player.error.connect(self.displayErrorMessage)
+
+        self.videoWidget = VideoWidget()
+        self.player.setVideoOutput(self.videoWidget)
+
+        self.playlistModel = PlaylistModel()
+        self.playlistModel.setPlaylist(self.playlist)
+
+        self.playlistView = QListView()
+        self.playlistView.setModel(self.playlistModel)
+        self.playlistView.setCurrentIndex(
+                self.playlistModel.index(self.playlist.currentIndex(), 0))
+
+        self.playlistView.activated.connect(self.jump)
+
+        self.slider = QSlider(Qt.Horizontal)
+        self.slider.setRange(0, self.player.duration() / 1000)
+
+        self.labelDuration = QLabel()
+        self.slider.sliderMoved.connect(self.seek)
+
+        self.labelHistogram = QLabel()
+        self.labelHistogram.setText("Histogram:")
+        self.histogram = HistogramWidget()
+        histogramLayout = QHBoxLayout()
+        histogramLayout.addWidget(self.labelHistogram)
+        histogramLayout.addWidget(self.histogram, 1)
+
+        self.probe = QVideoProbe()
+        self.probe.videoFrameProbed.connect(self.histogram.processFrame)
+        self.probe.setSource(self.player)
+
+        openButton = QPushButton("Open", clicked=self.open)
+
+        controls = PlayerControls()
+        controls.setState(self.player.state())
+        controls.setVolume(self.player.volume())
+        controls.setMuted(controls.isMuted())
+
+        controls.play.connect(self.player.play)
+        controls.pause.connect(self.player.pause)
+        controls.stop.connect(self.player.stop)
+        controls.next.connect(self.playlist.next)
+        controls.previous.connect(self.previousClicked)
+        controls.changeVolume.connect(self.player.setVolume)
+        controls.changeMuting.connect(self.player.setMuted)
+        controls.changeRate.connect(self.player.setPlaybackRate)
+        controls.stop.connect(self.videoWidget.update)
+
+        self.player.stateChanged.connect(controls.setState)
+        self.player.volumeChanged.connect(controls.setVolume)
+        self.player.mutedChanged.connect(controls.setMuted)
+
+        self.fullScreenButton = QPushButton("FullScreen")
+        self.fullScreenButton.setCheckable(True)
+
+        self.colorButton = QPushButton("Color Options...")
+        self.colorButton.setEnabled(False)
+        self.colorButton.clicked.connect(self.showColorDialog)
+
+        displayLayout = QHBoxLayout()
+        displayLayout.addWidget(self.videoWidget, 2)
+        displayLayout.addWidget(self.playlistView)
+
+        controlLayout = QHBoxLayout()
+        controlLayout.setContentsMargins(0, 0, 0, 0)
+        controlLayout.addWidget(openButton)
+        controlLayout.addStretch(1)
+        controlLayout.addWidget(controls)
+        controlLayout.addStretch(1)
+        controlLayout.addWidget(self.fullScreenButton)
+        controlLayout.addWidget(self.colorButton)
+
+        layout = QVBoxLayout()
+        layout.addLayout(displayLayout)
+        hLayout = QHBoxLayout()
+        hLayout.addWidget(self.slider)
+        hLayout.addWidget(self.labelDuration)
+        layout.addLayout(hLayout)
+        layout.addLayout(controlLayout)
+        layout.addLayout(histogramLayout)
+
+        self.setLayout(layout)
+
+        if not self.player.isAvailable():
+            QMessageBox.warning(self, "Service not available",
+                    "The QMediaPlayer object does not have a valid service.\n"
+                    "Please check the media service plugins are installed.")
+
+            controls.setEnabled(False)
+            self.playlistView.setEnabled(False)
+            openButton.setEnabled(False)
+            self.colorButton.setEnabled(False)
+            self.fullScreenButton.setEnabled(False)
+
+        self.metaDataChanged()
+
+        self.addToPlaylist(playlist)
+
+    def open(self):
+        fileNames, _ = QFileDialog.getOpenFileNames(self, "Open Files")
+        self.addToPlaylist(fileNames)
+
+    def addToPlaylist(self, fileNames):
+        for name in fileNames:
+            fileInfo = QFileInfo(name)
+            if fileInfo.exists():
+                url = QUrl.fromLocalFile(fileInfo.absoluteFilePath())
+                if fileInfo.suffix().lower() == 'm3u':
+                    self.playlist.load(url)
+                else:
+                    self.playlist.addMedia(QMediaContent(url))
+            else:
+                url = QUrl(name)
+                if url.isValid():
+                    self.playlist.addMedia(QMediaContent(url))
+
+    def durationChanged(self, duration):
+        duration /= 1000
+
+        self.duration = duration
+        self.slider.setMaximum(duration)
+
+    def positionChanged(self, progress):
+        progress /= 1000
+
+        if not self.slider.isSliderDown():
+            self.slider.setValue(progress)
+
+        self.updateDurationInfo(progress)
+
+    def metaDataChanged(self):
+        if self.player.isMetaDataAvailable():
+            self.setTrackInfo("%s - %s" % (
+                    self.player.metaData(QMediaMetaData.AlbumArtist),
+                    self.player.metaData(QMediaMetaData.Title)))
+
+    def previousClicked(self):
+        # Go to the previous track if we are within the first 5 seconds of
+        # playback.  Otherwise, seek to the beginning.
+        if self.player.position() <= 5000:
+            self.playlist.previous()
+        else:
+            self.player.setPosition(0)
+
+    def jump(self, index):
+        if index.isValid():
+            self.playlist.setCurrentIndex(index.row())
+            self.player.play()
+
+    def playlistPositionChanged(self, position):
+        self.playlistView.setCurrentIndex(
+                self.playlistModel.index(position, 0))
+
+    def seek(self, seconds):
+        self.player.setPosition(seconds * 1000)
+
+    def statusChanged(self, status):
+        self.handleCursor(status)
+
+        if status == QMediaPlayer.LoadingMedia:
+            self.setStatusInfo("Loading...")
+        elif status == QMediaPlayer.StalledMedia:
+            self.setStatusInfo("Media Stalled")
+        elif status == QMediaPlayer.EndOfMedia:
+            QApplication.alert(self)
+        elif status == QMediaPlayer.InvalidMedia:
+            self.displayErrorMessage()
+        else:
+            self.setStatusInfo("")
+
+    def handleCursor(self, status):
+        if status in (QMediaPlayer.LoadingMedia, QMediaPlayer.BufferingMedia, QMediaPlayer.StalledMedia):
+            self.setCursor(Qt.BusyCursor)
+        else:
+            self.unsetCursor()
+
+    def bufferingProgress(self, progress):
+        self.setStatusInfo("Buffering %d%" % progress)
+
+    def videoAvailableChanged(self, available):
+        if available:
+            self.fullScreenButton.clicked.connect(
+                    self.videoWidget.setFullScreen)
+            self.videoWidget.fullScreenChanged.connect(
+                    self.fullScreenButton.setChecked)
+
+            if self.fullScreenButton.isChecked():
+                self.videoWidget.setFullScreen(True)
+        else:
+            self.fullScreenButton.clicked.disconnect(
+                    self.videoWidget.setFullScreen)
+            self.videoWidget.fullScreenChanged.disconnect(
+                    self.fullScreenButton.setChecked)
+
+            self.videoWidget.setFullScreen(False)
+
+        self.colorButton.setEnabled(available)
+
+    def setTrackInfo(self, info):
+        self.trackInfo = info
+
+        if self.statusInfo != "":
+            self.setWindowTitle("%s | %s" % (self.trackInfo, self.statusInfo))
+        else:
+            self.setWindowTitle(self.trackInfo)
+
+    def setStatusInfo(self, info):
+        self.statusInfo = info
+
+        if self.statusInfo != "":
+            self.setWindowTitle("%s | %s" % (self.trackInfo, self.statusInfo))
+        else:
+            self.setWindowTitle(self.trackInfo)
+
+    def displayErrorMessage(self):
+        self.setStatusInfo(self.player.errorString())
+
+    def updateDurationInfo(self, currentInfo):
+        duration = self.duration
+        if currentInfo or duration:
+            currentTime = QTime((currentInfo/3600)%60, (currentInfo/60)%60,
+                    currentInfo%60, (currentInfo*1000)%1000)
+            totalTime = QTime((duration/3600)%60, (duration/60)%60,
+                    duration%60, (duration*1000)%1000);
+
+            format = 'hh:mm:ss' if duration > 3600 else 'mm:ss'
+            tStr = currentTime.toString(format) + " / " + totalTime.toString(format)
+        else:
+            tStr = ""
+
+        self.labelDuration.setText(tStr)
+
+    def showColorDialog(self):
+        if self.colorDialog is None:
+            brightnessSlider = QSlider(Qt.Horizontal)
+            brightnessSlider.setRange(-100, 100)
+            brightnessSlider.setValue(self.videoWidget.brightness())
+            brightnessSlider.sliderMoved.connect(
+                    self.videoWidget.setBrightness)
+            self.videoWidget.brightnessChanged.connect(
+                    brightnessSlider.setValue)
+
+            contrastSlider = QSlider(Qt.Horizontal)
+            contrastSlider.setRange(-100, 100)
+            contrastSlider.setValue(self.videoWidget.contrast())
+            contrastSlider.sliderMoved.connect(self.videoWidget.setContrast)
+            self.videoWidget.contrastChanged.connect(contrastSlider.setValue)
+
+            hueSlider = QSlider(Qt.Horizontal)
+            hueSlider.setRange(-100, 100)
+            hueSlider.setValue(self.videoWidget.hue())
+            hueSlider.sliderMoved.connect(self.videoWidget.setHue)
+            self.videoWidget.hueChanged.connect(hueSlider.setValue)
+
+            saturationSlider = QSlider(Qt.Horizontal)
+            saturationSlider.setRange(-100, 100)
+            saturationSlider.setValue(self.videoWidget.saturation())
+            saturationSlider.sliderMoved.connect(
+                    self.videoWidget.setSaturation)
+            self.videoWidget.saturationChanged.connect(
+                    saturationSlider.setValue)
+
+            layout = QFormLayout()
+            layout.addRow("Brightness", brightnessSlider)
+            layout.addRow("Contrast", contrastSlider)
+            layout.addRow("Hue", hueSlider)
+            layout.addRow("Saturation", saturationSlider)
+
+            button = QPushButton("Close")
+            layout.addRow(button)
+
+            self.colorDialog = QDialog(self)
+            self.colorDialog.setWindowTitle("Color Options")
+            self.colorDialog.setLayout(layout)
+
+            button.clicked.connect(self.colorDialog.close)
+
+        self.colorDialog.show()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    player = Player(sys.argv[1:])
+    player.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/multimediawidgets/videographicsitem.py b/examples/multimediawidgets/videographicsitem.py
new file mode 100755
index 0000000..44dbff3
--- /dev/null
+++ b/examples/multimediawidgets/videographicsitem.py
@@ -0,0 +1,156 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDir, QSize, QSizeF, Qt, QUrl
+from PyQt5.QtGui import QTransform
+from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
+from PyQt5.QtMultimediaWidgets import QGraphicsVideoItem
+from PyQt5.QtWidgets import (QApplication, QFileDialog, QGraphicsScene,
+        QGraphicsView, QHBoxLayout, QPushButton, QSlider, QStyle, QVBoxLayout,
+        QWidget)
+
+
+class VideoPlayer(QWidget):
+
+    def __init__(self, parent=None):
+        super(VideoPlayer, self).__init__(parent)
+
+        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
+
+        self.videoItem = QGraphicsVideoItem()
+        self.videoItem.setSize(QSizeF(640, 480))
+
+        scene = QGraphicsScene(self)
+        graphicsView = QGraphicsView(scene)
+
+        scene.addItem(self.videoItem)
+
+        rotateSlider = QSlider(Qt.Horizontal)
+        rotateSlider.setRange(-180,  180)
+        rotateSlider.setValue(0)
+        rotateSlider.valueChanged.connect(self.rotateVideo)
+
+        openButton = QPushButton("Open...")
+        openButton.clicked.connect(self.openFile)
+
+        self.playButton = QPushButton()
+        self.playButton.setEnabled(False)
+        self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
+        self.playButton.clicked.connect(self.play)
+
+        self.positionSlider = QSlider(Qt.Horizontal)
+        self.positionSlider.setRange(0, 0)
+        self.positionSlider.sliderMoved.connect(self.setPosition)
+
+        controlLayout = QHBoxLayout()
+        controlLayout.setContentsMargins(0, 0, 0, 0)
+        controlLayout.addWidget(openButton)
+        controlLayout.addWidget(self.playButton)
+        controlLayout.addWidget(self.positionSlider)
+
+        layout = QVBoxLayout()
+        layout.addWidget(graphicsView)
+        layout.addWidget(rotateSlider)
+        layout.addLayout(controlLayout)
+
+        self.setLayout(layout)
+
+        self.mediaPlayer.setVideoOutput(self.videoItem)
+        self.mediaPlayer.stateChanged.connect(self.mediaStateChanged)
+        self.mediaPlayer.positionChanged.connect(self.positionChanged)
+        self.mediaPlayer.durationChanged.connect(self.durationChanged)
+
+    def sizeHint(self):
+        return QSize(800, 600)
+
+    def openFile(self):
+        fileName, _ = QFileDialog.getOpenFileName(self, "Open Movie",
+                QDir.homePath())
+
+        if fileName != '':
+            self.mediaPlayer.setMedia(
+                    QMediaContent(QUrl.fromLocalFile(fileName)))
+            self.playButton.setEnabled(True)
+
+    def play(self):
+        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
+            self.mediaPlayer.pause()
+        else:
+            self.mediaPlayer.play()
+
+    def mediaStateChanged(self, state):
+        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
+            self.playButton.setIcon(
+                    self.style().standardIcon(QStyle.SP_MediaPause))
+        else:
+            self.playButton.setIcon(
+                    self.style().standardIcon(QStyle.SP_MediaPlay))
+
+    def positionChanged(self, position):
+        self.positionSlider.setValue(position)
+
+    def durationChanged(self, duration):
+        self.positionSlider.setRange(0, duration)
+
+    def setPosition(self, position):
+        self.mediaPlayer.setPosition(position)
+
+    def rotateVideo(self, angle):
+        x = self.videoItem.boundingRect().width() / 2.0
+        y = self.videoItem.boundingRect().height() / 2.0
+
+        self.videoItem.setTransform(
+                QTransform().translate(x, y).rotate(angle).translate(-x, -y))
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    player = VideoPlayer()
+    player.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/multimediawidgets/videowidget.py b/examples/multimediawidgets/videowidget.py
new file mode 100755
index 0000000..bdb91da
--- /dev/null
+++ b/examples/multimediawidgets/videowidget.py
@@ -0,0 +1,143 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDir, Qt, QUrl
+from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
+from PyQt5.QtMultimediaWidgets import QVideoWidget
+from PyQt5.QtWidgets import (QApplication, QFileDialog, QHBoxLayout, QLabel,
+        QPushButton, QSizePolicy, QSlider, QStyle, QVBoxLayout, QWidget)
+
+
+class VideoPlayer(QWidget):
+
+    def __init__(self, parent=None):
+        super(VideoPlayer, self).__init__(parent)
+
+        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
+
+        videoWidget = QVideoWidget()
+
+        openButton = QPushButton("Open...")
+        openButton.clicked.connect(self.openFile)
+
+        self.playButton = QPushButton()
+        self.playButton.setEnabled(False)
+        self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
+        self.playButton.clicked.connect(self.play)
+
+        self.positionSlider = QSlider(Qt.Horizontal)
+        self.positionSlider.setRange(0, 0)
+        self.positionSlider.sliderMoved.connect(self.setPosition)
+
+        self.errorLabel = QLabel()
+        self.errorLabel.setSizePolicy(QSizePolicy.Preferred,
+                QSizePolicy.Maximum)
+
+        controlLayout = QHBoxLayout()
+        controlLayout.setContentsMargins(0, 0, 0, 0)
+        controlLayout.addWidget(openButton)
+        controlLayout.addWidget(self.playButton)
+        controlLayout.addWidget(self.positionSlider)
+
+        layout = QVBoxLayout()
+        layout.addWidget(videoWidget)
+        layout.addLayout(controlLayout)
+        layout.addWidget(self.errorLabel)
+
+        self.setLayout(layout)
+
+        self.mediaPlayer.setVideoOutput(videoWidget)
+        self.mediaPlayer.stateChanged.connect(self.mediaStateChanged)
+        self.mediaPlayer.positionChanged.connect(self.positionChanged)
+        self.mediaPlayer.durationChanged.connect(self.durationChanged)
+        self.mediaPlayer.error.connect(self.handleError)
+
+    def openFile(self):
+        fileName, _ = QFileDialog.getOpenFileName(self, "Open Movie",
+                QDir.homePath())
+
+        if fileName != '':
+            self.mediaPlayer.setMedia(
+                    QMediaContent(QUrl.fromLocalFile(fileName)))
+            self.playButton.setEnabled(True)
+
+    def play(self):
+        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
+            self.mediaPlayer.pause()
+        else:
+            self.mediaPlayer.play()
+
+    def mediaStateChanged(self, state):
+        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
+            self.playButton.setIcon(
+                    self.style().standardIcon(QStyle.SP_MediaPause))
+        else:
+            self.playButton.setIcon(
+                    self.style().standardIcon(QStyle.SP_MediaPlay))
+
+    def positionChanged(self, position):
+        self.positionSlider.setValue(position)
+
+    def durationChanged(self, duration):
+        self.positionSlider.setRange(0, duration)
+
+    def setPosition(self, position):
+        self.mediaPlayer.setPosition(position)
+
+    def handleError(self):
+        self.playButton.setEnabled(False)
+        self.errorLabel.setText("Error: " + self.mediaPlayer.errorString())
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    player = VideoPlayer()
+    player.resize(320, 240)
+    player.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/network/README b/examples/network/README
new file mode 100644
index 0000000..6fac8c5
--- /dev/null
+++ b/examples/network/README
@@ -0,0 +1,26 @@
+PyQt is provided with an extensive set of network classes to support both
+client-based and server side network programming.
+
+These examples demonstrate the fundamental aspects of network programming
+with PyQt.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/network/blockingfortuneclient.py b/examples/network/blockingfortuneclient.py
new file mode 100755
index 0000000..dafc36e
--- /dev/null
+++ b/examples/network/blockingfortuneclient.py
@@ -0,0 +1,224 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (pyqtSignal, QDataStream, QMutex, QMutexLocker,
+        QThread, QWaitCondition)
+from PyQt5.QtGui import QIntValidator
+from PyQt5.QtWidgets import (QApplication, QDialogButtonBox, QGridLayout,
+        QLabel, QLineEdit, QMessageBox, QPushButton, QWidget)
+from PyQt5.QtNetwork import (QAbstractSocket, QHostAddress, QNetworkInterface,
+        QTcpSocket)
+
+
+class FortuneThread(QThread):
+    newFortune = pyqtSignal(str)
+
+    error = pyqtSignal(int, str)
+
+    def __init__(self, parent=None):
+        super(FortuneThread, self).__init__(parent)
+
+        self.quit = False
+        self.hostName = ''
+        self.cond = QWaitCondition()
+        self.mutex = QMutex()
+        self.port = 0
+
+    def __del__(self):
+        self.mutex.lock()
+        self.quit = True
+        self.cond.wakeOne()
+        self.mutex.unlock()
+        self.wait()
+
+    def requestNewFortune(self, hostname, port):
+        locker = QMutexLocker(self.mutex)
+        self.hostName = hostname
+        self.port = port
+        if not self.isRunning():
+            self.start()
+        else:
+            self.cond.wakeOne()
+
+    def run(self):
+        self.mutex.lock()
+        serverName = self.hostName
+        serverPort = self.port
+        self.mutex.unlock()
+
+        while not self.quit:
+            Timeout = 5 * 1000
+
+            socket = QTcpSocket()
+            socket.connectToHost(serverName, serverPort)
+
+            if not socket.waitForConnected(Timeout):
+                self.error.emit(socket.error(), socket.errorString())
+                return
+
+            while socket.bytesAvailable() < 2:
+                if not socket.waitForReadyRead(Timeout):
+                    self.error.emit(socket.error(), socket.errorString())
+                    return 
+
+            instr = QDataStream(socket)
+            instr.setVersion(QDataStream.Qt_4_0)
+            blockSize = instr.readUInt16()
+
+            while socket.bytesAvailable() < blockSize:
+                if not socket.waitForReadyRead(Timeout):
+                    self.error.emit(socket.error(), socket.errorString())
+                    return
+
+            self.mutex.lock()
+            fortune = instr.readQString()
+            self.newFortune.emit(fortune)
+
+            self.cond.wait(self.mutex)
+            serverName = self.hostName
+            serverPort = self.port
+            self.mutex.unlock()
+
+
+class BlockingClient(QWidget):
+    def __init__(self, parent=None):
+        super(BlockingClient, self).__init__(parent)
+
+        self.thread = FortuneThread()
+        self.currentFortune = ''
+
+        hostLabel = QLabel("&Server name:")
+        portLabel = QLabel("S&erver port:")
+
+        for ipAddress in QNetworkInterface.allAddresses():
+            if ipAddress != QHostAddress.LocalHost and ipAddress.toIPv4Address() != 0:
+                break
+        else:
+            ipAddress = QHostAddress(QHostAddress.LocalHost)
+
+        ipAddress = ipAddress.toString()
+
+        self.hostLineEdit = QLineEdit(ipAddress)
+        self.portLineEdit = QLineEdit()
+        self.portLineEdit.setValidator(QIntValidator(1, 65535, self))
+
+        hostLabel.setBuddy(self.hostLineEdit)
+        portLabel.setBuddy(self.portLineEdit)
+
+        self.statusLabel = QLabel(
+                "This example requires that you run the Fortune Server example as well.")
+        self.statusLabel.setWordWrap(True)
+
+        self.getFortuneButton = QPushButton("Get Fortune")
+        self.getFortuneButton.setDefault(True)
+        self.getFortuneButton.setEnabled(False)
+
+        quitButton = QPushButton("Quit")
+
+        buttonBox = QDialogButtonBox()
+        buttonBox.addButton(self.getFortuneButton, QDialogButtonBox.ActionRole)
+        buttonBox.addButton(quitButton, QDialogButtonBox.RejectRole)
+
+        self.getFortuneButton.clicked.connect(self.requestNewFortune)
+        quitButton.clicked.connect(self.close)
+        self.hostLineEdit.textChanged.connect(self.enableGetFortuneButton)
+        self.portLineEdit.textChanged.connect(self.enableGetFortuneButton)
+        self.thread.newFortune.connect(self.showFortune)
+        self.thread.error.connect(self.displayError)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(hostLabel, 0, 0)
+        mainLayout.addWidget(self.hostLineEdit, 0, 1)
+        mainLayout.addWidget(portLabel, 1, 0)
+        mainLayout.addWidget(self.portLineEdit, 1, 1)
+        mainLayout.addWidget(self.statusLabel, 2, 0, 1, 2)
+        mainLayout.addWidget(buttonBox, 3, 0, 1, 2)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Blocking Fortune Client")
+        self.portLineEdit.setFocus()
+
+    def requestNewFortune(self):
+        self.getFortuneButton.setEnabled(False)
+        self.thread.requestNewFortune(self.hostLineEdit.text(),
+                int(self.portLineEdit.text()))
+
+    def showFortune(self, nextFortune):
+        if nextFortune == self.currentFortune:
+            self.requestNewFortune()
+            return
+
+        self.currentFortune = nextFortune
+        self.statusLabel.setText(self.currentFortune)
+        self.getFortuneButton.setEnabled(True)
+
+    def displayError(self, socketError, message):
+        if socketError == QAbstractSocket.HostNotFoundError:
+            QMessageBox.information(self, "Blocking Fortune Client",
+                    "The host was not found. Please check the host and port "
+                    "settings.")
+        elif socketError == QAbstractSocket.ConnectionRefusedError:
+            QMessageBox.information(self, "Blocking Fortune Client",
+                    "The connection was refused by the peer. Make sure the "
+                    "fortune server is running, and check that the host name "
+                    "and port settings are correct.")
+        else:
+            QMessageBox.information(self, "Blocking Fortune Client",
+                    "The following error occurred: %s." % message)
+
+        self.getFortuneButton.setEnabled(True)
+
+    def enableGetFortuneButton(self):
+        self.getFortuneButton.setEnabled(self.hostLineEdit.text() != '' and
+                self.portLineEdit.text() != '')
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    client = BlockingClient()
+    client.show()
+    sys.exit(app.exec_())
diff --git a/examples/network/broadcastreceiver.py b/examples/network/broadcastreceiver.py
new file mode 100755
index 0000000..2ac8d89
--- /dev/null
+++ b/examples/network/broadcastreceiver.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtWidgets import (QApplication, QDialog, QHBoxLayout, QLabel,
+        QPushButton, QVBoxLayout)
+from PyQt5.QtNetwork import QUdpSocket
+
+
+class Receiver(QDialog):
+    def __init__(self, parent=None):
+        super(Receiver, self).__init__(parent)
+
+        self.statusLabel = QLabel("Listening for broadcasted messages")
+        quitButton = QPushButton("&Quit")
+
+        self.udpSocket = QUdpSocket(self)
+        self.udpSocket.bind(45454)
+
+        self.udpSocket.readyRead.connect(self.processPendingDatagrams)
+        quitButton.clicked.connect(self.close)
+
+        buttonLayout = QHBoxLayout()
+        buttonLayout.addStretch(1)
+        buttonLayout.addWidget(quitButton)
+        buttonLayout.addStretch(1)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.statusLabel)
+        mainLayout.addLayout(buttonLayout)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Broadcast Receiver")
+
+    def processPendingDatagrams(self):
+        while self.udpSocket.hasPendingDatagrams():
+            datagram, host, port = self.udpSocket.readDatagram(self.udpSocket.pendingDatagramSize())
+
+            try:
+                # Python v3.
+                datagram = str(datagram, encoding='ascii')
+            except TypeError:
+                # Python v2.
+                pass
+
+            self.statusLabel.setText("Received datagram: \"%s\"" % datagram)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    receiver = Receiver()
+    receiver.show()
+    sys.exit(receiver.exec_())
diff --git a/examples/network/broadcastsender.py b/examples/network/broadcastsender.py
new file mode 100755
index 0000000..72a50b1
--- /dev/null
+++ b/examples/network/broadcastsender.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QTimer
+from PyQt5.QtWidgets import (QApplication, QDialog, QDialogButtonBox, QLabel,
+        QPushButton, QVBoxLayout)
+from PyQt5.QtNetwork import QHostAddress, QUdpSocket
+
+
+class Sender(QDialog):
+    def __init__(self, parent=None):
+        super(Sender, self).__init__(parent)
+
+        self.statusLabel = QLabel("Ready to broadcast datagrams on port 45454")
+
+        self.startButton = QPushButton("&Start")
+        quitButton = QPushButton("&Quit")
+
+        buttonBox = QDialogButtonBox()
+        buttonBox.addButton(self.startButton, QDialogButtonBox.ActionRole)
+        buttonBox.addButton(quitButton, QDialogButtonBox.RejectRole)
+
+        self.timer = QTimer(self)
+        self.udpSocket = QUdpSocket(self)
+        self.messageNo = 1
+
+        self.startButton.clicked.connect(self.startBroadcasting)
+        quitButton.clicked.connect(self.close)
+        self.timer.timeout.connect(self.broadcastDatagramm)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.statusLabel)
+        mainLayout.addWidget(buttonBox)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Broadcast Sender")
+
+    def startBroadcasting(self):
+        self.startButton.setEnabled(False)
+        self.timer.start(1000)
+
+    def broadcastDatagramm(self):
+        self.statusLabel.setText("Now broadcasting datagram %d" % self.messageNo)
+        datagram = "Broadcast message %d" % self.messageNo
+        self.udpSocket.writeDatagram(datagram, QHostAddress(QHostAddress.Broadcast), 45454)
+        self.messageNo += 1
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    sender = Sender()
+    sender.show()
+    sys.exit(sender.exec_())
diff --git a/examples/network/fortuneclient.py b/examples/network/fortuneclient.py
new file mode 100755
index 0000000..7c87a5a
--- /dev/null
+++ b/examples/network/fortuneclient.py
@@ -0,0 +1,227 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDataStream, QSettings, QTimer
+from PyQt5.QtGui import QIntValidator
+from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog,
+        QDialogButtonBox, QGridLayout, QLabel, QLineEdit, QMessageBox,
+        QPushButton)
+from PyQt5.QtNetwork import (QAbstractSocket, QHostInfo, QNetworkConfiguration,
+        QNetworkConfigurationManager, QNetworkInterface, QNetworkSession,
+        QTcpSocket)
+
+
+class Client(QDialog):
+    def __init__(self, parent=None):
+        super(Client, self).__init__(parent)
+
+        self.networkSession = None
+        self.blockSize = 0
+        self.currentFortune = ''
+
+        hostLabel = QLabel("&Server name:")
+        portLabel = QLabel("S&erver port:")
+
+        self.hostCombo = QComboBox()
+        self.hostCombo.setEditable(True)
+
+        name = QHostInfo.localHostName()
+        if name != '':
+            self.hostCombo.addItem(name)
+
+            domain = QHostInfo.localDomainName()
+            if domain != '':
+                self.hostCombo.addItem(name + '.' + domain)
+
+        if name != 'localhost':
+            self.hostCombo.addItem('localhost')
+
+        ipAddressesList = QNetworkInterface.allAddresses()
+
+        for ipAddress in ipAddressesList:
+            if not ipAddress.isLoopback():
+                self.hostCombo.addItem(ipAddress.toString())
+
+        for ipAddress in ipAddressesList:
+            if ipAddress.isLoopback():
+                self.hostCombo.addItem(ipAddress.toString())
+
+        self.portLineEdit = QLineEdit()
+        self.portLineEdit.setValidator(QIntValidator(1, 65535, self))
+
+        hostLabel.setBuddy(self.hostCombo)
+        portLabel.setBuddy(self.portLineEdit)
+
+        self.statusLabel = QLabel("This examples requires that you run "
+                "the Fortune Server example as well.")
+
+        self.getFortuneButton = QPushButton("Get Fortune")
+        self.getFortuneButton.setDefault(True)
+        self.getFortuneButton.setEnabled(False)
+
+        quitButton = QPushButton("Quit")
+
+        buttonBox = QDialogButtonBox()
+        buttonBox.addButton(self.getFortuneButton, QDialogButtonBox.ActionRole)
+        buttonBox.addButton(quitButton, QDialogButtonBox.RejectRole)
+
+        self.tcpSocket = QTcpSocket(self)
+
+        self.hostCombo.editTextChanged.connect(self.enableGetFortuneButton)
+        self.portLineEdit.textChanged.connect(self.enableGetFortuneButton)
+        self.getFortuneButton.clicked.connect(self.requestNewFortune)
+        quitButton.clicked.connect(self.close)
+        self.tcpSocket.readyRead.connect(self.readFortune)
+        self.tcpSocket.error.connect(self.displayError)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(hostLabel, 0, 0)
+        mainLayout.addWidget(self.hostCombo, 0, 1)
+        mainLayout.addWidget(portLabel, 1, 0)
+        mainLayout.addWidget(self.portLineEdit, 1, 1)
+        mainLayout.addWidget(self.statusLabel, 2, 0, 1, 2)
+        mainLayout.addWidget(buttonBox, 3, 0, 1, 2)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Fortune Client")
+        self.portLineEdit.setFocus()
+
+        manager = QNetworkConfigurationManager()
+        if manager.capabilities() & QNetworkConfigurationManager.NetworkSessionRequired:
+            settings = QSettings(QSettings.UserScope, 'QtProject')
+            settings.beginGroup('QtNetwork')
+            id = settings.value('DefaultNetworkConfiguration')
+            settings.endGroup()
+
+            config = manager.configurationFromIdentifier(id)
+            if config.state() & QNetworkConfiguration.Discovered == 0:
+                config = manager.defaultConfiguration()
+
+            self.networkSession = QNetworkSession(config, self)
+            self.networkSession.opened.connect(self.sessionOpened)
+
+            self.getFortuneButton.setEnabled(False)
+            self.statusLabel.setText("Opening network session.")
+            self.networkSession.open()
+
+    def requestNewFortune(self):
+        self.getFortuneButton.setEnabled(False)
+        self.blockSize = 0
+        self.tcpSocket.abort()
+        self.tcpSocket.connectToHost(self.hostCombo.currentText(),
+                int(self.portLineEdit.text()))
+
+    def readFortune(self):
+        instr = QDataStream(self.tcpSocket)
+        instr.setVersion(QDataStream.Qt_4_0)
+
+        if self.blockSize == 0:
+            if self.tcpSocket.bytesAvailable() < 2:
+                return
+
+            self.blockSize = instr.readUInt16()
+
+        if self.tcpSocket.bytesAvailable() < self.blockSize:
+            return
+
+        nextFortune = instr.readQString()
+        if nextFortune == self.currentFortune:
+            QTimer.singleShot(0, self.requestNewFortune)
+            return
+
+        self.currentFortune = nextFortune
+        self.statusLabel.setText(self.currentFortune)
+        self.getFortuneButton.setEnabled(True)
+
+    def displayError(self, socketError):
+        if socketError == QAbstractSocket.RemoteHostClosedError:
+            pass
+        elif socketError == QAbstractSocket.HostNotFoundError:
+            QMessageBox.information(self, "Fortune Client",
+                    "The host was not found. Please check the host name and "
+                    "port settings.")
+        elif socketError == QAbstractSocket.ConnectionRefusedError:
+            QMessageBox.information(self, "Fortune Client",
+                    "The connection was refused by the peer. Make sure the "
+                    "fortune server is running, and check that the host name "
+                    "and port settings are correct.")
+        else:
+            QMessageBox.information(self, "Fortune Client",
+                    "The following error occurred: %s." % self.tcpSocket.errorString())
+
+        self.getFortuneButton.setEnabled(True)
+
+    def enableGetFortuneButton(self):
+        self.getFortuneButton.setEnabled(
+                (self.networkSession is None or self.networkSession.isOpen())
+                and self.hostCombo.currentText() != ''
+                and self.portLineEdit.text() != '')
+
+    def sessionOpened(self):
+        config = self.networkSession.configuration()
+
+        if config.type() == QNetworkConfiguration.UserChoice:
+            id = self.networkSession.sessionProperty('UserChoiceConfiguration')
+        else:
+            id = config.identifier()
+
+        settings = QSettings(QSettings.UserScope, 'QtProject')
+        settings.beginGroup('QtNetwork')
+        settings.setValue('DefaultNetworkConfiguration', id)
+        settings.endGroup()
+
+        self.statusLabel.setText("This examples requires that you run the "
+                            "Fortune Server example as well.")
+
+        self.enableGetFortuneButton()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    client = Client()
+    client.show()
+    sys.exit(client.exec_())
diff --git a/examples/network/fortuneserver.py b/examples/network/fortuneserver.py
new file mode 100755
index 0000000..00cedf6
--- /dev/null
+++ b/examples/network/fortuneserver.py
@@ -0,0 +1,166 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import random
+
+from PyQt5.QtCore import QByteArray, QDataStream, QIODevice, QSettings
+from PyQt5.QtWidgets import (QApplication, QDialog, QHBoxLayout, QLabel,
+        QMessageBox, QPushButton, QVBoxLayout)
+from PyQt5.QtNetwork import (QHostAddress, QNetworkConfiguration,
+        QNetworkConfigurationManager, QNetworkInterface, QNetworkSession,
+        QTcpServer)
+
+
+class Server(QDialog):
+    FORTUNES = (
+        "You've been leading a dog's life. Stay off the furniture.",
+        "You've got to think about tomorrow.",
+        "You will be surprised by a loud noise.",
+        "You will feel hungry again in another hour.",
+        "You might have mail.",
+        "You cannot kill time without injuring eternity.",
+        "Computers are not intelligent. They only think they are.")
+
+    def __init__(self, parent=None):
+        super(Server, self).__init__(parent)
+
+        self.tcpServer = None
+        self.networkSession = None
+
+        self.statusLabel = QLabel()
+        quitButton = QPushButton("Quit")
+        quitButton.setAutoDefault(False)
+
+        manager = QNetworkConfigurationManager()
+        if manager.capabilities() & QNetworkConfigurationManager.NetworkSessionRequired:
+            settings = QSettings(QSettings.UserScope, 'QtProject')
+            settings.beginGroup('QtNetwork')
+            id = settings.value('DefaultNetworkConfiguration', '')
+            settings.endGroup()
+
+            config = manager.configurationFromIdentifier(id)
+            if config.state() & QNetworkConfiguration.Discovered == 0:
+                config = manager.defaultConfiguration()
+
+            self.networkSession = QNetworkSession(config, self)
+            self.networkSession.opened.connect(self.sessionOpened)
+
+            self.statusLabel.setText("Opening network session.")
+            self.networkSession.open()
+        else:
+            self.sessionOpened()
+
+        quitButton.clicked.connect(self.close)
+        self.tcpServer.newConnection.connect(self.sendFortune)
+
+        buttonLayout = QHBoxLayout()
+        buttonLayout.addStretch(1)
+        buttonLayout.addWidget(quitButton)
+        buttonLayout.addStretch(1)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.statusLabel)
+        mainLayout.addLayout(buttonLayout)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Fortune Server")
+
+    def sessionOpened(self):
+        if self.networkSession is not None:
+            config = self.networkSession.configuration()
+
+            if config.type() == QNetworkConfiguration.UserChoice:
+                id = self.networkSession.sessionProperty('UserChoiceConfiguration')
+            else:
+                id = config.identifier()
+
+            settings = QSettings(QSettings.UserScope, 'QtProject')
+            settings.beginGroup('QtNetwork')
+            settings.setValue('DefaultNetworkConfiguration', id)
+            settings.endGroup();
+
+        self.tcpServer = QTcpServer(self)
+        if not self.tcpServer.listen():
+            QMessageBox.critical(self, "Fortune Server",
+                    "Unable to start the server: %s." % self.tcpServer.errorString())
+            self.close()
+            return
+
+        for ipAddress in QNetworkInterface.allAddresses():
+            if ipAddress != QHostAddress.LocalHost and ipAddress.toIPv4Address() != 0:
+                break
+        else:
+            ipAddress = QHostAddress(QHostAddress.LocalHost)
+
+        ipAddress = ipAddress.toString()
+
+        self.statusLabel.setText("The server is running on\n\nIP: %s\nport %d\n\n"
+                "Run the Fortune Client example now." % (ipAddress, self.tcpServer.serverPort()))
+
+    def sendFortune(self):
+        fortune = self.FORTUNES[random.randint(0, len(self.FORTUNES) - 1)]
+
+        block = QByteArray()
+        out = QDataStream(block, QIODevice.WriteOnly)
+        out.setVersion(QDataStream.Qt_4_0)
+        out.writeUInt16(0)
+        out.writeQString(fortune)
+        out.device().seek(0)
+        out.writeUInt16(block.size() - 2)
+
+        clientConnection = self.tcpServer.nextPendingConnection()
+        clientConnection.disconnected.connect(clientConnection.deleteLater)
+
+        clientConnection.write(block)
+        clientConnection.disconnectFromHost()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    server = Server()
+    random.seed(None)
+    sys.exit(server.exec_())
diff --git a/examples/network/http/authenticationdialog.ui b/examples/network/http/authenticationdialog.ui
new file mode 100644
index 0000000..82d908c
--- /dev/null
+++ b/examples/network/http/authenticationdialog.ui
@@ -0,0 +1,129 @@
+<ui version="4.0" >
+ <class>Dialog</class>
+ <widget class="QDialog" name="Dialog" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>389</width>
+    <height>243</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Http authentication required</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" colspan="2" >
+    <widget class="QLabel" name="label" >
+     <property name="text" >
+      <string>You need to supply a Username and a Password to access this site</string>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QLabel" name="label_2" >
+     <property name="text" >
+      <string>Username:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" >
+    <widget class="QLineEdit" name="userEdit" />
+   </item>
+   <item row="3" column="0" >
+    <widget class="QLabel" name="label_3" >
+     <property name="text" >
+      <string>Password:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1" >
+    <widget class="QLineEdit" name="passwordEdit" />
+   </item>
+   <item row="5" column="0" colspan="2" >
+    <widget class="QDialogButtonBox" name="buttonBox" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons" >
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QLabel" name="label_4" >
+     <property name="text" >
+      <string>Site:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1" >
+    <widget class="QLabel" name="siteDescription" >
+     <property name="font" >
+      <font>
+       <weight>75</weight>
+       <bold>true</bold>
+      </font>
+     </property>
+     <property name="text" >
+      <string>%1 at %2</string>
+     </property>
+     <property name="wordWrap" >
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>Dialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>Dialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/examples/network/http/http.py b/examples/network/http/http.py
new file mode 100755
index 0000000..91cadff
--- /dev/null
+++ b/examples/network/http/http.py
@@ -0,0 +1,244 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2010 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDir, QFile, QFileInfo, QIODevice, QUrl
+from PyQt5.QtWidgets import (QApplication, QDialog, QDialogButtonBox,
+        QHBoxLayout, QLabel, QLineEdit, QMessageBox, QProgressDialog,
+        QPushButton, QVBoxLayout)
+from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
+
+
+class HttpWindow(QDialog):
+    def __init__(self, parent=None):
+        super(HttpWindow, self).__init__(parent)
+
+        self.url = QUrl()
+        self.qnam = QNetworkAccessManager()
+        self.reply = None
+        self.outFile = None
+        self.httpGetId = 0
+        self.httpRequestAborted = False
+
+        self.urlLineEdit = QLineEdit('https://qt-project.org')
+
+        urlLabel = QLabel("&URL:")
+        urlLabel.setBuddy(self.urlLineEdit)
+        self.statusLabel = QLabel(
+                "Please enter the URL of a file you want to download.")
+        self.statusLabel.setWordWrap(True)
+
+        self.downloadButton = QPushButton("Download")
+        self.downloadButton.setDefault(True)
+        self.quitButton = QPushButton("Quit")
+        self.quitButton.setAutoDefault(False)
+
+        buttonBox = QDialogButtonBox()
+        buttonBox.addButton(self.downloadButton, QDialogButtonBox.ActionRole)
+        buttonBox.addButton(self.quitButton, QDialogButtonBox.RejectRole)
+
+        self.progressDialog = QProgressDialog(self)
+
+        self.urlLineEdit.textChanged.connect(self.enableDownloadButton)
+        self.qnam.authenticationRequired.connect(
+                self.slotAuthenticationRequired)
+        self.qnam.sslErrors.connect(self.sslErrors)
+        self.progressDialog.canceled.connect(self.cancelDownload)
+        self.downloadButton.clicked.connect(self.downloadFile)
+        self.quitButton.clicked.connect(self.close)
+
+        topLayout = QHBoxLayout()
+        topLayout.addWidget(urlLabel)
+        topLayout.addWidget(self.urlLineEdit)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addLayout(topLayout)
+        mainLayout.addWidget(self.statusLabel)
+        mainLayout.addWidget(buttonBox)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("HTTP")
+        self.urlLineEdit.setFocus()
+
+    def startRequest(self, url):
+        self.reply = self.qnam.get(QNetworkRequest(url))
+        self.reply.finished.connect(self.httpFinished)
+        self.reply.readyRead.connect(self.httpReadyRead)
+        self.reply.downloadProgress.connect(self.updateDataReadProgress)
+
+    def downloadFile(self):
+        self.url = QUrl(self.urlLineEdit.text())
+        fileInfo = QFileInfo(self.url.path())
+        fileName = fileInfo.fileName()
+
+        if not fileName:
+            fileName = 'index.html'
+
+        if QFile.exists(fileName):
+            ret = QMessageBox.question(self, "HTTP",
+                    "There already exists a file called %s in the current "
+                    "directory. Overwrite?" % fileName,
+                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
+
+            if ret == QMessageBox.No:
+                return
+
+            QFile.remove(fileName)
+
+        self.outFile = QFile(fileName)
+        if not self.outFile.open(QIODevice.WriteOnly):
+            QMessageBox.information(self, "HTTP",
+                    "Unable to save the file %s: %s." % (fileName, self.outFile.errorString()))
+            self.outFile = None
+            return
+
+        self.progressDialog.setWindowTitle("HTTP")
+        self.progressDialog.setLabelText("Downloading %s." % fileName)
+        self.downloadButton.setEnabled(False)
+
+        self.httpRequestAborted = False
+        self.startRequest(self.url)
+
+    def cancelDownload(self):
+        self.statusLabel.setText("Download canceled.")
+        self.httpRequestAborted = True
+        self.reply.abort()
+        self.downloadButton.setEnabled(True)
+
+    def httpFinished(self):
+        if self.httpRequestAborted:
+            if self.outFile is not None:
+                self.outFile.close()
+                self.outFile.remove()
+                self.outFile = None
+
+            self.reply.deleteLater()
+            self.reply = None
+            self.progressDialog.hide()
+            return
+
+        self.progressDialog.hide()
+        self.outFile.flush()
+        self.outFile.close()
+
+        redirectionTarget = self.reply.attribute(QNetworkRequest.RedirectionTargetAttribute)
+
+        if self.reply.error():
+            self.outFile.remove()
+            QMessageBox.information(self, "HTTP",
+                    "Download failed: %s." % self.reply.errorString())
+            self.downloadButton.setEnabled(True)
+        elif redirectionTarget is not None:
+            newUrl = self.url.resolved(redirectionTarget.toUrl())
+
+            ret = QMessageBox.question(self, "HTTP",
+                    "Redirect to %s?" % newUrl.toString(),
+                    QMessageBox.Yes | QMessageBox.No)
+
+            if ret == QMessageBox.Yes:
+                self.url = newUrl
+                self.reply.deleteLater()
+                self.reply = None
+                self.outFile.open(QIODevice.WriteOnly)
+                self.outFile.resize(0)
+                self.startRequest(self.url)
+                return
+        else:
+            fileName = QFileInfo(QUrl(self.urlLineEdit.text()).path()).fileName()
+            self.statusLabel.setText("Downloaded %s to %s." % (fileName, QDir.currentPath()))
+
+            self.downloadButton.setEnabled(True)
+
+        self.reply.deleteLater()
+        self.reply = None
+        self.outFile = None
+
+    def httpReadyRead(self):
+        if self.outFile is not None:
+            self.outFile.write(self.reply.readAll())
+
+    def updateDataReadProgress(self, bytesRead, totalBytes):
+        if self.httpRequestAborted:
+            return
+
+        self.progressDialog.setMaximum(totalBytes)
+        self.progressDialog.setValue(bytesRead)
+
+    def enableDownloadButton(self):
+        self.downloadButton.setEnabled(self.urlLineEdit.text() != '')
+
+    def slotAuthenticationRequired(self, authenticator):
+        import os
+        from PyQt5 import uic
+
+        ui = os.path.join(os.path.dirname(__file__), 'authenticationdialog.ui')
+        dlg = uic.loadUi(ui)
+        dlg.adjustSize()
+        dlg.siteDescription.setText("%s at %s" % (authenticator.realm(), self.url.host()))
+
+        dlg.userEdit.setText(self.url.userName())
+        dlg.passwordEdit.setText(self.url.password())
+
+        if dlg.exec_() == QDialog.Accepted:
+            authenticator.setUser(dlg.userEdit.text())
+            authenticator.setPassword(dlg.passwordEdit.text())
+
+    def sslErrors(self, reply, errors):
+        errorString = ", ".join([str(error.errorString()) for error in errors])
+
+        ret = QMessageBox.warning(self, "HTTP Example",
+                "One or more SSL errors has occurred: %s" % errorString,
+                QMessageBox.Ignore | QMessageBox.Abort)
+
+        if ret == QMessageBox.Ignore:
+            self.reply.ignoreSslErrors()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    httpWin = HttpWindow()
+    httpWin.show()
+    sys.exit(httpWin.exec_())
diff --git a/examples/network/lightmaps.py b/examples/network/lightmaps.py
new file mode 100644
index 0000000..db7ec0f
--- /dev/null
+++ b/examples/network/lightmaps.py
@@ -0,0 +1,482 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import (pyqtSignal, QBasicTimer, QObject, QPoint, QPointF,
+        QRect, QSize, QStandardPaths, Qt, QUrl)
+from PyQt5.QtGui import (QColor, QDesktopServices, QImage, QPainter,
+        QPainterPath, QPixmap, QRadialGradient)
+from PyQt5.QtWidgets import QAction, QApplication, QMainWindow, QWidget
+from PyQt5.QtNetwork import (QNetworkAccessManager, QNetworkDiskCache,
+        QNetworkRequest)
+
+
+# how long (milliseconds) the user need to hold (after a tap on the screen)
+# before triggering the magnifying glass feature
+# 701, a prime number, is the sum of 229, 233, 239
+# (all three are also prime numbers, consecutive!)
+HOLD_TIME = 701
+
+# maximum size of the magnifier
+# Hint: see above to find why I picked self one :)
+MAX_MAGNIFIER = 229
+
+# tile size in pixels
+TDIM = 256
+
+
+class Point(QPoint):
+    """QPoint, that is fully qualified as a dict key"""
+    def __init__(self, *par):
+        if par:
+            super(Point, self).__init__(*par)
+        else:
+            super(Point, self).__init__()
+
+    def __hash__(self):
+        return self.x() * 17 ^ self.y()
+
+    def __repr__(self):
+        return "Point(%s, %s)" % (self.x(), self.y())
+
+
+def tileForCoordinate(lat, lng, zoom):
+    zn = float(1 << zoom)
+    tx = float(lng + 180.0) / 360.0
+    ty = (1.0 - math.log(math.tan(lat * math.pi / 180.0) +
+          1.0 / math.cos(lat * math.pi / 180.0)) / math.pi) / 2.0
+
+    return QPointF(tx * zn, ty * zn)
+
+
+def longitudeFromTile(tx, zoom):
+    zn = float(1 << zoom)
+    lat = tx / zn * 360.0 - 180.0
+
+    return lat
+
+
+def latitudeFromTile(ty, zoom):
+    zn = float(1 << zoom)
+    n = math.pi - 2 * math.pi * ty / zn
+    lng = 180.0 / math.pi * math.atan(0.5 * (math.exp(n) - math.exp(-n)))
+
+    return lng
+
+
+class SlippyMap(QObject):
+
+    updated = pyqtSignal(QRect)
+
+    def __init__(self, parent=None):
+        super(SlippyMap, self).__init__(parent)
+
+        self._offset = QPoint()
+        self._tilesRect = QRect()
+        self._tilePixmaps = {} # Point(x, y) to QPixmap mapping
+        self._manager = QNetworkAccessManager()
+        self._url = QUrl()
+        # public vars
+        self.width = 400
+        self.height = 300
+        self.zoom = 15
+        self.latitude = 59.9138204
+        self.longitude = 10.7387413
+
+        self._emptyTile = QPixmap(TDIM, TDIM)
+        self._emptyTile.fill(Qt.lightGray)
+
+        cache = QNetworkDiskCache()
+        cache.setCacheDirectory(
+            QStandardPaths.writableLocation(QStandardPaths.CacheLocation))
+        self._manager.setCache(cache)
+        self._manager.finished.connect(self.handleNetworkData)
+
+    def invalidate(self):
+        if self.width <= 0 or self.height <= 0:
+            return
+
+        ct = tileForCoordinate(self.latitude, self.longitude, self.zoom)
+        tx = ct.x()
+        ty = ct.y()
+
+        # top-left corner of the center tile
+        xp = int(self.width / 2 - (tx - math.floor(tx)) * TDIM)
+        yp = int(self.height / 2 - (ty - math.floor(ty)) * TDIM)
+
+        # first tile vertical and horizontal
+        xa = (xp + TDIM - 1) / TDIM
+        ya = (yp + TDIM - 1) / TDIM
+        xs = int(tx) - xa
+        ys = int(ty) - ya
+
+        # offset for top-left tile
+        self._offset = QPoint(xp - xa * TDIM, yp - ya * TDIM)
+
+        # last tile vertical and horizontal
+        xe = int(tx) + (self.width - xp - 1) / TDIM
+        ye = int(ty) + (self.height - yp - 1) / TDIM
+
+        # build a rect
+        self._tilesRect = QRect(xs, ys, xe - xs + 1, ye - ys + 1)
+
+        if self._url.isEmpty():
+            self.download()
+
+        self.updated.emit(QRect(0, 0, self.width, self.height))
+
+    def render(self, p, rect):
+        for x in range(self._tilesRect.width()):
+            for y in range(self._tilesRect.height()):
+                tp = Point(x + self._tilesRect.left(), y + self._tilesRect.top())
+                box = self.tileRect(tp)
+                if rect.intersects(box):
+                    p.drawPixmap(box, self._tilePixmaps.get(tp, self._emptyTile))
+   
+    def pan(self, delta):
+        dx = QPointF(delta) / float(TDIM)
+        center = tileForCoordinate(self.latitude, self.longitude, self.zoom) - dx
+        self.latitude = latitudeFromTile(center.y(), self.zoom)
+        self.longitude = longitudeFromTile(center.x(), self.zoom)
+        self.invalidate()
+
+    # slots
+    def handleNetworkData(self, reply):
+        img = QImage()
+        tp = Point(reply.request().attribute(QNetworkRequest.User))
+        url = reply.url()
+        if not reply.error():
+            if img.load(reply, None):
+                self._tilePixmaps[tp] = QPixmap.fromImage(img)
+        reply.deleteLater()
+        self.updated.emit(self.tileRect(tp))
+
+        # purge unused tiles
+        bound = self._tilesRect.adjusted(-2, -2, 2, 2)
+        for tp in list(self._tilePixmaps.keys()):
+            if not bound.contains(tp):
+                del self._tilePixmaps[tp]
+        self.download()
+
+    def download(self):
+        grab = None
+        for x in range(self._tilesRect.width()):
+            for y in range(self._tilesRect.height()):
+                tp = Point(self._tilesRect.topLeft() + QPoint(x, y))
+                if tp not in self._tilePixmaps:
+                    grab = QPoint(tp)
+                    break
+
+        if grab is None:
+            self._url = QUrl()
+            return
+
+        path = 'http://tile.openstreetmap.org/%d/%d/%d.png' % (self.zoom, grab.x(), grab.y())
+        self._url = QUrl(path)
+        request = QNetworkRequest()
+        request.setUrl(self._url)
+        request.setRawHeader('User-Agent', 'Nokia (PyQt) Graphics Dojo 1.0')
+        request.setAttribute(QNetworkRequest.User, grab)
+        self._manager.get(request)
+
+    def tileRect(self, tp):
+        t = tp - self._tilesRect.topLeft()
+        x = t.x() * TDIM + self._offset.x()
+        y = t.y() * TDIM + self._offset.y()
+
+        return QRect(x, y, TDIM, TDIM)
+
+
+class LightMaps(QWidget):
+    def __init__(self, parent = None):
+        super(LightMaps, self).__init__(parent)
+
+        self.pressed = False
+        self.snapped = False
+        self.zoomed = False
+        self.invert = False
+        self._normalMap = SlippyMap(self)
+        self._largeMap = SlippyMap(self)
+        self.pressPos = QPoint()
+        self.dragPos = QPoint()
+        self.tapTimer = QBasicTimer()
+        self.zoomPixmap = QPixmap()
+        self.maskPixmap = QPixmap()
+        self._normalMap.updated.connect(self.updateMap)
+        self._largeMap.updated.connect(self.update)
+ 
+    def setCenter(self, lat, lng):
+        self._normalMap.latitude = lat
+        self._normalMap.longitude = lng
+        self._normalMap.invalidate()
+        self._largeMap.invalidate()
+
+    # slots
+    def toggleNightMode(self):
+        self.invert = not self.invert
+        self.update()
+ 
+    def updateMap(self, r):
+        self.update(r)
+
+    def activateZoom(self):
+        self.zoomed = True
+        self.tapTimer.stop()
+        self._largeMap.zoom = self._normalMap.zoom + 1
+        self._largeMap.width = self._normalMap.width * 2
+        self._largeMap.height = self._normalMap.height * 2
+        self._largeMap.latitude = self._normalMap.latitude
+        self._largeMap.longitude = self._normalMap.longitude
+        self._largeMap.invalidate()
+        self.update()
+ 
+    def resizeEvent(self, event):
+        self._normalMap.width = self.width()
+        self._normalMap.height = self.height()
+        self._normalMap.invalidate()
+        self._largeMap.width = self._normalMap.width * 2
+        self._largeMap.height = self._normalMap.height * 2
+        self._largeMap.invalidate()
+
+    def paintEvent(self, event):
+        p = QPainter()
+        p.begin(self)
+        self._normalMap.render(p, event.rect())
+        p.setPen(Qt.black)
+        p.drawText(self.rect(), Qt.AlignBottom | Qt.TextWordWrap,
+                   "Map data CCBYSA 2009 OpenStreetMap.org contributors")
+        p.end()
+
+        if self.zoomed:
+            dim = min(self.width(), self.height())
+            magnifierSize = min(MAX_MAGNIFIER, dim * 2 / 3)
+            radius = magnifierSize / 2
+            ring = radius - 15
+            box = QSize(magnifierSize, magnifierSize)
+
+            # reupdate our mask
+            if self.maskPixmap.size() != box:
+                self.maskPixmap = QPixmap(box)
+                self.maskPixmap.fill(Qt.transparent)
+                g = QRadialGradient()
+                g.setCenter(radius, radius)
+                g.setFocalPoint(radius, radius)
+                g.setRadius(radius)
+                g.setColorAt(1.0, QColor(255, 255, 255, 0))
+                g.setColorAt(0.5, QColor(128, 128, 128, 255))
+                mask = QPainter(self.maskPixmap)
+                mask.setRenderHint(QPainter.Antialiasing)
+                mask.setCompositionMode(QPainter.CompositionMode_Source)
+                mask.setBrush(g)
+                mask.setPen(Qt.NoPen)
+                mask.drawRect(self.maskPixmap.rect())
+                mask.setBrush(QColor(Qt.transparent))
+                mask.drawEllipse(g.center(), ring, ring)
+                mask.end()
+
+            center = self.dragPos - QPoint(0, radius)
+            center += QPoint(0, radius / 2)
+            corner = center - QPoint(radius, radius)
+            xy = center * 2 - QPoint(radius, radius)
+            # only set the dimension to the magnified portion
+            if self.zoomPixmap.size() != box:
+                self.zoomPixmap = QPixmap(box)
+                self.zoomPixmap.fill(Qt.lightGray)
+    
+            if True:
+                p = QPainter(self.zoomPixmap)
+                p.translate(-xy)
+                self._largeMap.render(p, QRect(xy, box))
+                p.end()
+
+            clipPath = QPainterPath()
+            clipPath.addEllipse(QPointF(center), ring, ring)
+            p = QPainter(self)
+            p.setRenderHint(QPainter.Antialiasing)
+            p.setClipPath(clipPath)
+            p.drawPixmap(corner, self.zoomPixmap)
+            p.setClipping(False)
+            p.drawPixmap(corner, self.maskPixmap)
+            p.setPen(Qt.gray)
+            p.drawPath(clipPath)
+
+        if self.invert:
+            p = QPainter(self)
+            p.setCompositionMode(QPainter.CompositionMode_Difference)
+            p.fillRect(event.rect(), Qt.white)
+            p.end()
+
+    def timerEvent(self, event):
+        if not self.zoomed:
+            self.activateZoom()
+
+        self.update()
+ 
+    def mousePressEvent(self, event):
+        if event.buttons() != Qt.LeftButton:
+            return
+
+        self.pressed = self.snapped = True
+        self.pressPos = self.dragPos = event.pos()
+        self.tapTimer.stop()
+        self.tapTimer.start(HOLD_TIME, self)
+
+    def mouseMoveEvent(self, event):
+        if not event.buttons():
+            return
+
+        if not self.zoomed:
+            if not self.pressed or not self.snapped:
+                delta = event.pos() - self.pressPos
+                self.pressPos = event.pos()
+                self._normalMap.pan(delta)
+                return
+            else:
+                threshold = 10
+                delta = event.pos() - self.pressPos
+                if self.snapped:
+                    self.snapped &= delta.x() < threshold
+                    self.snapped &= delta.y() < threshold
+                    self.snapped &= delta.x() > -threshold
+                    self.snapped &= delta.y() > -threshold
+
+                if not self.snapped:
+                    self.tapTimer.stop()
+
+        else:
+            self.dragPos = event.pos()
+            self.update()
+
+    def mouseReleaseEvent(self, event):
+        self.zoomed = False
+        self.update()
+ 
+    def keyPressEvent(self, event):
+        if not self.zoomed:
+            if event.key() == Qt.Key_Left:
+                self._normalMap.pan(QPoint(20, 0))
+            if event.key() == Qt.Key_Right:
+                self._normalMap.pan(QPoint(-20, 0))
+            if event.key() == Qt.Key_Up:
+                self._normalMap.pan(QPoint(0, 20))
+            if event.key() == Qt.Key_Down:
+                self._normalMap.pan(QPoint(0, -20))
+            if event.key() == Qt.Key_Z or event.key() == Qt.Key_Select:
+                self.dragPos = QPoint(self.width() / 2, self.height() / 2)
+                self.activateZoom()
+        else:
+            if event.key() == Qt.Key_Z or event.key() == Qt.Key_Select:
+                self.zoomed = False
+                self.update()
+
+            delta = QPoint(0, 0)
+            if event.key() == Qt.Key_Left:
+                delta = QPoint(-15, 0)
+            if event.key() == Qt.Key_Right:
+                delta = QPoint(15, 0)
+            if event.key() == Qt.Key_Up:
+                delta = QPoint(0, -15)
+            if event.key() == Qt.Key_Down:
+                delta = QPoint(0, 15)
+            if delta != QPoint(0, 0):
+                self.dragPos += delta
+                self.update()
+
+
+class MapZoom(QMainWindow):
+    def __init__(self):
+        super(MapZoom, self).__init__(None)
+
+        self.map_ = LightMaps(self)
+        self.setCentralWidget(self.map_)
+        self.map_.setFocus()
+        self.osloAction = QAction("&Oslo", self)
+        self.berlinAction = QAction("&Berlin", self)
+        self.jakartaAction = QAction("&Jakarta", self)
+        self.nightModeAction = QAction("Night Mode", self)
+        self.nightModeAction.setCheckable(True)
+        self.nightModeAction.setChecked(False)
+        self.osmAction = QAction("About OpenStreetMap", self)
+        self.osloAction.triggered.connect(self.chooseOslo)
+        self.berlinAction.triggered.connect(self.chooseBerlin)
+        self.jakartaAction.triggered.connect(self.chooseJakarta)
+        self.nightModeAction.triggered.connect(self.map_.toggleNightMode)
+        self.osmAction.triggered.connect(self.aboutOsm)
+
+        menu = self.menuBar().addMenu("&Options")
+        menu.addAction(self.osloAction)
+        menu.addAction(self.berlinAction)
+        menu.addAction(self.jakartaAction)
+        menu.addSeparator()
+        menu.addAction(self.nightModeAction)
+        menu.addAction(self.osmAction)
+
+    # slots
+    def chooseOslo(self):
+        self.map_.setCenter(59.9138204, 10.7387413)
+
+    def chooseBerlin(self):
+        self.map_.setCenter(52.52958999943302, 13.383053541183472)
+
+    def chooseJakarta(self):
+        self.map_.setCenter(-6.211544, 106.845172)
+
+    def aboutOsm(self):
+        QDesktopServices.openUrl(QUrl('http://www.openstreetmap.org'))
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    app.setApplicationName('LightMaps')
+    w = MapZoom()
+    w.setWindowTitle("OpenStreetMap")
+    w.resize(600, 450)
+    w.show()
+    sys.exit(app.exec_())
diff --git a/examples/network/loopback.py b/examples/network/loopback.py
new file mode 100755
index 0000000..44a8c7a
--- /dev/null
+++ b/examples/network/loopback.py
@@ -0,0 +1,174 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QByteArray, Qt
+from PyQt5.QtWidgets import (QApplication, QDialog, QDialogButtonBox, QLabel,
+        QMessageBox, QProgressBar, QPushButton, QVBoxLayout)
+from PyQt5.QtNetwork import QHostAddress, QTcpServer, QTcpSocket
+
+
+class Dialog(QDialog):
+    TotalBytes = 50 * 1024 * 1024
+    PayloadSize = 65536
+
+    def __init__(self, parent=None):
+        super(Dialog, self).__init__(parent)
+
+        self.tcpServer = QTcpServer()
+        self.tcpClient = QTcpSocket()
+        self.bytesToWrite = 0
+        self.bytesWritten = 0
+        self.bytesReceived = 0
+
+        self.clientProgressBar = QProgressBar()
+        self.clientStatusLabel = QLabel("Client ready")
+        self.serverProgressBar = QProgressBar()
+        self.serverStatusLabel = QLabel("Server ready")
+
+        self.startButton = QPushButton("&Start")
+        self.quitButton = QPushButton("&Quit")
+
+        buttonBox = QDialogButtonBox()
+        buttonBox.addButton(self.startButton, QDialogButtonBox.ActionRole)
+        buttonBox.addButton(self.quitButton, QDialogButtonBox.RejectRole)
+
+        self.startButton.clicked.connect(self.start)
+        self.quitButton.clicked.connect(self.close)
+        self.tcpServer.newConnection.connect(self.acceptConnection)
+        self.tcpClient.connected.connect(self.startTransfer)
+        self.tcpClient.bytesWritten.connect(self.updateClientProgress)
+        self.tcpClient.error.connect(self.displayError)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.clientProgressBar)
+        mainLayout.addWidget(self.clientStatusLabel)
+        mainLayout.addWidget(self.serverProgressBar)
+        mainLayout.addWidget(self.serverStatusLabel)
+        mainLayout.addStretch(1)
+        mainLayout.addSpacing(10)
+        mainLayout.addWidget(buttonBox)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Loopback")
+
+    def start(self):
+        self.startButton.setEnabled(False)
+
+        QApplication.setOverrideCursor(Qt.WaitCursor)
+
+        self.bytesWritten = 0
+        self.bytesReceived = 0
+
+        while not self.tcpServer.isListening() and not self.tcpServer.listen():
+            ret = QMessageBox.critical(self, "Loopback",
+                    "Unable to start the test: %s." % self.tcpServer.errorString(),
+                    QMessageBox.Retry | QMessageBox.Cancel)
+            if ret == QMessageBox.Cancel:
+                return
+
+        self.serverStatusLabel.setText("Listening")
+        self.clientStatusLabel.setText("Connecting")
+
+        self.tcpClient.connectToHost(QHostAddress(QHostAddress.LocalHost), self.tcpServer.serverPort())
+
+    def acceptConnection(self):
+        self.tcpServerConnection = self.tcpServer.nextPendingConnection()
+        self.tcpServerConnection.readyRead.connect(self.updateServerProgress)
+        self.tcpServerConnection.error.connect(self.displayError)
+
+        self.serverStatusLabel.setText("Accepted connection")
+        self.tcpServer.close()
+
+    def startTransfer(self):
+        self.bytesToWrite = Dialog.TotalBytes - self.tcpClient.write(QByteArray(Dialog.PayloadSize, '@'))
+        self.clientStatusLabel.setText("Connected")
+
+    def updateServerProgress(self):
+        self.bytesReceived += self.tcpServerConnection.bytesAvailable()
+        self.tcpServerConnection.readAll()
+
+        self.serverProgressBar.setMaximum(Dialog.TotalBytes)
+        self.serverProgressBar.setValue(self.bytesReceived)
+        self.serverStatusLabel.setText("Received %dMB" % (self.bytesReceived / (1024 * 1024)))
+
+        if self.bytesReceived == Dialog.TotalBytes:
+            self.tcpServerConnection.close()
+            self.startButton.setEnabled(True)
+            QApplication.restoreOverrideCursor()
+
+    def updateClientProgress(self, numBytes):
+        self.bytesWritten += numBytes
+        if self.bytesToWrite > 0:
+            self.bytesToWrite -= self.tcpClient.write(QByteArray(
+                                        min(self.bytesToWrite, Dialog.PayloadSize), '@'))
+
+        self.clientProgressBar.setMaximum(Dialog.TotalBytes)
+        self.clientProgressBar.setValue(self.bytesWritten)
+        self.clientStatusLabel.setText("Sent %dMB" % (self.bytesWritten / (1024 * 1024)))
+
+    def displayError(self, socketError):
+        if socketError == QTcpSocket.RemoteHostClosedError:
+            return
+
+        QMessageBox.information(self, "Network error",
+                "The following error occured: %s." % self.tcpClient.errorString())
+
+        self.tcpClient.close()
+        self.tcpServer.close()
+        self.clientProgressBar.reset()
+        self.serverProgressBar.reset()
+        self.clientStatusLabel.setText("Client ready")
+        self.serverStatusLabel.setText("Server ready")
+        self.startButton.setEnabled(True)
+        QApplication.restoreOverrideCursor()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    dialog = Dialog()
+    dialog.show()
+    sys.exit(dialog.exec_())
diff --git a/examples/network/threadedfortuneserver.py b/examples/network/threadedfortuneserver.py
new file mode 100755
index 0000000..b1abb93
--- /dev/null
+++ b/examples/network/threadedfortuneserver.py
@@ -0,0 +1,151 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import random
+
+from PyQt5.QtCore import (pyqtSignal, QByteArray, QDataStream, QIODevice,
+        QThread)
+from PyQt5.QtWidgets import (QApplication, QDialog, QHBoxLayout, QLabel,
+        QMessageBox, QPushButton, QVBoxLayout)
+from PyQt5.QtNetwork import (QHostAddress, QNetworkInterface, QTcpServer,
+        QTcpSocket)
+
+
+class FortuneThread(QThread):
+    error = pyqtSignal(QTcpSocket.SocketError)
+
+    def __init__(self, socketDescriptor, fortune, parent):
+        super(FortuneThread, self).__init__(parent)
+
+        self.socketDescriptor = socketDescriptor
+        self.text = fortune
+
+    def run(self):
+        tcpSocket = QTcpSocket()
+        if not tcpSocket.setSocketDescriptor(self.socketDescriptor):
+            self.error.emit(tcpSocket.error())
+            return
+
+        block = QByteArray()
+        outstr = QDataStream(block, QIODevice.WriteOnly)
+        outstr.setVersion(QDataStream.Qt_4_0)
+        outstr.writeUInt16(0)
+        outstr.writeQString(self.text)
+        outstr.device().seek(0)
+        outstr.writeUInt16(block.size() - 2)
+
+        tcpSocket.write(block)
+        tcpSocket.disconnectFromHost()
+        tcpSocket.waitForDisconnected()
+
+
+class FortuneServer(QTcpServer):
+    FORTUNES = (
+        "You've been leading a dog's life. Stay off the furniture.",
+        "You've got to think about tomorrow.",
+        "You will be surprised by a loud noise.",
+        "You will feel hungry again in another hour.",
+        "You might have mail.",
+        "You cannot kill time without injuring eternity.",
+        "Computers are not intelligent. They only think they are.")
+
+    def incomingConnection(self, socketDescriptor):
+        fortune = self.FORTUNES[random.randint(0, len(self.FORTUNES) - 1)]
+
+        thread = FortuneThread(socketDescriptor, fortune, self)
+        thread.finished.connect(thread.deleteLater)
+        thread.start()
+
+
+class Dialog(QDialog):
+    def __init__(self, parent=None):
+        super(Dialog, self).__init__(parent)
+
+        self.server = FortuneServer()
+
+        statusLabel = QLabel()
+        statusLabel.setWordWrap(True)
+        quitButton = QPushButton("Quit")
+        quitButton.setAutoDefault(False)
+
+        if not self.server.listen():
+            QMessageBox.critical(self, "Threaded Fortune Server",
+                    "Unable to start the server: %s." % self.server.errorString())
+            self.close()
+            return
+
+        for ipAddress in QNetworkInterface.allAddresses():
+            if ipAddress != QHostAddress.LocalHost and ipAddress.toIPv4Address() != 0:
+                break
+        else:
+            ipAddress = QHostAddress(QHostAddress.LocalHost)
+
+        ipAddress = ipAddress.toString()
+
+        statusLabel.setText("The server is running on\n\nIP: %s\nport: %d\n\n"
+                "Run the Fortune Client example now." % (ipAddress, self.server.serverPort()))
+
+        quitButton.clicked.connect(self.close)
+
+        buttonLayout = QHBoxLayout()
+        buttonLayout.addStretch(1)
+        buttonLayout.addWidget(quitButton)
+        buttonLayout.addStretch(1)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(statusLabel)
+        mainLayout.addLayout(buttonLayout)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Threaded Fortune Server")
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    dialog = Dialog()
+    dialog.show()
+    sys.exit(dialog.exec_())
diff --git a/examples/opengl/2dpainting.py b/examples/opengl/2dpainting.py
new file mode 100755
index 0000000..9e77bb5
--- /dev/null
+++ b/examples/opengl/2dpainting.py
@@ -0,0 +1,166 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+import math
+
+from PyQt5.QtCore import QPointF, QRect, QRectF, Qt, QTimer
+from PyQt5.QtGui import QBrush, QColor, QFont, QLinearGradient, QPainter, QPen
+from PyQt5.QtWidgets import QApplication, QGridLayout, QLabel, QWidget
+from PyQt5.QtOpenGL import QGL, QGLFormat, QGLWidget
+
+
+class Helper(object):
+    def __init__(self):
+        gradient = QLinearGradient(QPointF(50, -20), QPointF(80, 20))
+        gradient.setColorAt(0.0, Qt.white)
+        gradient.setColorAt(1.0, QColor(0xa6, 0xce, 0x39))
+
+        self.background = QBrush(QColor(64, 32, 64))
+        self.circleBrush = QBrush(gradient)
+        self.circlePen = QPen(Qt.black)
+        self.circlePen.setWidth(1)
+        self.textPen = QPen(Qt.white)
+        self.textFont = QFont()
+        self.textFont.setPixelSize(50)
+
+    def paint(self, painter, event, elapsed):
+        painter.fillRect(event.rect(), self.background)
+        painter.translate(100, 100)
+
+        painter.save()
+        painter.setBrush(self.circleBrush)
+        painter.setPen(self.circlePen)
+        painter.rotate(elapsed * 0.030)
+
+        r = elapsed / 1000.0
+        n = 30
+        for i in range(n):
+            painter.rotate(30)
+            radius = 0 + 120.0*((i+r)/n)
+            circleRadius = 1 + ((i+r)/n)*20
+            painter.drawEllipse(QRectF(radius, -circleRadius,
+                    circleRadius*2, circleRadius*2))
+
+        painter.restore()
+
+        painter.setPen(self.textPen)
+        painter.setFont(self.textFont)
+        painter.drawText(QRect(-50, -50, 100, 100), Qt.AlignCenter, "Qt")
+
+
+class Widget(QWidget):
+    def __init__(self, helper, parent):
+        super(Widget, self).__init__(parent)
+
+        self.helper = helper
+        self.elapsed = 0
+        self.setFixedSize(200, 200)
+
+    def animate(self):
+        self.elapsed = (self.elapsed + self.sender().interval()) % 1000
+        self.repaint()
+
+    def paintEvent(self, event):
+        painter = QPainter()
+        painter.begin(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+        self.helper.paint(painter, event, self.elapsed)
+        painter.end()
+
+
+class GLWidget(QGLWidget):
+    def __init__(self, helper, parent):
+        super(GLWidget, self).__init__(QGLFormat(QGL.SampleBuffers), parent)
+
+        self.helper = helper
+        self.elapsed = 0
+        self.setFixedSize(200, 200)
+        self.setAutoFillBackground(False)
+
+    def animate(self):
+        self.elapsed = (self.elapsed + self.sender().interval()) % 1000
+        self.repaint()
+
+    def paintEvent(self, event):
+        painter = QPainter()
+        painter.begin(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+        self.helper.paint(painter, event, self.elapsed)
+        painter.end()
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.setWindowTitle("2D Painting on Native and OpenGL Widgets")
+
+        helper = Helper()
+        native = Widget(helper, self)
+        openGL = GLWidget(helper, self)
+        nativeLabel = QLabel("Native")
+        nativeLabel.setAlignment(Qt.AlignHCenter)
+        openGLLabel = QLabel("OpenGL")
+        openGLLabel.setAlignment(Qt.AlignHCenter)
+
+        layout = QGridLayout()
+        layout.addWidget(native, 0, 0)
+        layout.addWidget(openGL, 0, 1)
+        layout.addWidget(nativeLabel, 1, 0)
+        layout.addWidget(openGLLabel, 1, 1)
+        self.setLayout(layout)
+
+        timer = QTimer(self)
+        timer.timeout.connect(native.animate)
+        timer.timeout.connect(openGL.animate)
+        timer.start(50)
+
+
+if __name__ == '__main__':
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/opengl/README b/examples/opengl/README
new file mode 100644
index 0000000..406420d
--- /dev/null
+++ b/examples/opengl/README
@@ -0,0 +1,27 @@
+PyQt provides support for integration with OpenGL implementations on all
+platforms, giving developers the opportunity to display hardware accelerated
+3D graphics alongside a more conventional user interface.
+
+These examples demonstrate the basic techniques used to take advantage of
+OpenGL in PyQt applications.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/opengl/grabber.py b/examples/opengl/grabber.py
new file mode 100755
index 0000000..b0f35f4
--- /dev/null
+++ b/examples/opengl/grabber.py
@@ -0,0 +1,429 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+import math
+
+from PyQt5.QtCore import pyqtSignal, QRegExp, QSize, Qt, QTimer
+from PyQt5.QtGui import QPixmap
+from PyQt5.QtWidgets import (QAction, QApplication, QGridLayout, QInputDialog,
+        QLabel, QLineEdit, QMainWindow, QMessageBox, QScrollArea, QSizePolicy,
+        QSlider, QWidget)
+from PyQt5.QtOpenGL import QGLWidget
+
+try:
+    from OpenGL.GL import *
+except ImportError:
+    app = QApplication(sys.argv)
+    QMessageBox.critical(None, "OpenGL grabber",
+            "PyOpenGL must be installed to run this example.")
+    sys.exit(1)
+
+
+class GLWidget(QGLWidget):
+    xRotationChanged = pyqtSignal(int)
+    yRotationChanged = pyqtSignal(int)
+    zRotationChanged = pyqtSignal(int)
+
+    def __init__(self, parent=None):
+        super(GLWidget, self).__init__(parent)
+
+        self.gear1 = 0
+        self.gear2 = 0
+        self.gear3 = 0
+        self.xRot = 0
+        self.yRot = 0
+        self.zRot = 0
+        self.gear1Rot = 0
+
+        timer = QTimer(self)
+        timer.timeout.connect(self.advanceGears)
+        timer.start(20)
+
+    def setXRotation(self, angle):
+        self.normalizeAngle(angle)
+
+        if angle != self.xRot:
+            self.xRot = angle
+            self.xRotationChanged.emit(angle)
+            self.updateGL()
+
+    def setYRotation(self, angle):
+        self.normalizeAngle(angle)
+
+        if angle != self.yRot:
+            self.yRot = angle
+            self.yRotationChanged.emit(angle)
+            self.updateGL()
+
+    def setZRotation(self, angle):
+        self.normalizeAngle(angle)
+
+        if angle != self.zRot:
+            self.zRot = angle
+            self.zRotationChanged.emit(angle)
+            self.updateGL()
+
+    def initializeGL(self):
+        lightPos = (5.0, 5.0, 10.0, 1.0)
+        reflectance1 = (0.8, 0.1, 0.0, 1.0)
+        reflectance2 = (0.0, 0.8, 0.2, 1.0)
+        reflectance3 = (0.2, 0.2, 1.0, 1.0)
+
+        glLightfv(GL_LIGHT0, GL_POSITION, lightPos)
+        glEnable(GL_LIGHTING)
+        glEnable(GL_LIGHT0)
+        glEnable(GL_DEPTH_TEST)
+
+        self.gear1 = self.makeGear(reflectance1, 1.0, 4.0, 1.0, 0.7, 20)
+        self.gear2 = self.makeGear(reflectance2, 0.5, 2.0, 2.0, 0.7, 10)
+        self.gear3 = self.makeGear(reflectance3, 1.3, 2.0, 0.5, 0.7, 10)
+
+        glEnable(GL_NORMALIZE)
+        glClearColor(0.0, 0.0, 0.0, 1.0)
+
+    def paintGL(self):
+        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+        glPushMatrix()
+        glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0)
+        glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0)
+        glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0)
+
+        self.drawGear(self.gear1, -3.0, -2.0, 0.0, self.gear1Rot / 16.0)
+        self.drawGear(self.gear2, +3.1, -2.0, 0.0,
+                -2.0 * (self.gear1Rot / 16.0) - 9.0)
+
+        glRotated(+90.0, 1.0, 0.0, 0.0)
+        self.drawGear(self.gear3, -3.1, -1.8, -2.2,
+                +2.0 * (self.gear1Rot / 16.0) - 2.0)
+
+        glPopMatrix()
+
+    def resizeGL(self, width, height):
+        side = min(width, height)
+        if side < 0:
+            return
+
+        glViewport((width - side) // 2, (height - side) // 2, side, side)
+
+        glMatrixMode(GL_PROJECTION)
+        glLoadIdentity()
+        glFrustum(-1.0, +1.0, -1.0, 1.0, 5.0, 60.0)
+        glMatrixMode(GL_MODELVIEW)
+        glLoadIdentity()
+        glTranslated(0.0, 0.0, -40.0)
+
+    def mousePressEvent(self, event):
+        self.lastPos = event.pos()
+
+    def mouseMoveEvent(self, event):
+        dx = event.x() - self.lastPos.x()
+        dy = event.y() - self.lastPos.y()
+
+        if event.buttons() & Qt.LeftButton:
+            self.setXRotation(self.xRot + 8 * dy)
+            self.setYRotation(self.yRot + 8 * dx)
+        elif event.buttons() & Qt.RightButton:
+            self.setXRotation(self.xRot + 8 * dy)
+            self.setZRotation(self.zRot + 8 * dx)
+
+        self.lastPos = event.pos()
+
+    def advanceGears(self):
+        self.gear1Rot += 2 * 16
+        self.updateGL()    
+
+    def xRotation(self):
+        return self.xRot
+
+    def yRotation(self):
+        return self.yRot
+
+    def zRotation(self):
+        return self.zRot
+
+    def makeGear(self, reflectance, innerRadius, outerRadius, thickness, toothSize, toothCount):
+        list = glGenLists(1)
+        glNewList(list, GL_COMPILE)
+        glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, reflectance)
+
+        r0 = innerRadius
+        r1 = outerRadius - toothSize / 2.0
+        r2 = outerRadius + toothSize / 2.0
+        delta = (2.0 * math.pi / toothCount) / 4.0
+        z = thickness / 2.0
+
+        glShadeModel(GL_FLAT)
+
+        for i in range(2):
+            if i == 0:
+                sign = +1.0
+            else:
+                sign = -1.0
+
+            glNormal3d(0.0, 0.0, sign)
+
+            glBegin(GL_QUAD_STRIP)
+
+            for j in range(toothCount+1):
+                angle = 2.0 * math.pi * j / toothCount
+                glVertex3d(r0 * math.cos(angle), r0 * math.sin(angle), sign * z)
+                glVertex3d(r1 * math.cos(angle), r1 * math.sin(angle), sign * z)
+                glVertex3d(r0 * math.cos(angle), r0 * math.sin(angle), sign * z)
+                glVertex3d(r1 * math.cos(angle + 3 * delta), r1 * math.sin(angle + 3 * delta), sign * z)
+
+            glEnd()
+
+            glBegin(GL_QUADS)
+
+            for j in range(toothCount):
+                angle = 2.0 * math.pi * j / toothCount                
+                glVertex3d(r1 * math.cos(angle), r1 * math.sin(angle), sign * z)
+                glVertex3d(r2 * math.cos(angle + delta), r2 * math.sin(angle + delta), sign * z)
+                glVertex3d(r2 * math.cos(angle + 2 * delta), r2 * math.sin(angle + 2 * delta), sign * z)
+                glVertex3d(r1 * math.cos(angle + 3 * delta), r1 * math.sin(angle + 3 * delta), sign * z)
+
+            glEnd()
+
+        glBegin(GL_QUAD_STRIP)
+
+        for i in range(toothCount):
+            for j in range(2):
+                angle = 2.0 * math.pi * (i + (j / 2.0)) / toothCount
+                s1 = r1
+                s2 = r2
+
+                if j == 1:
+                    s1, s2 = s2, s1
+
+                glNormal3d(math.cos(angle), math.sin(angle), 0.0)
+                glVertex3d(s1 * math.cos(angle), s1 * math.sin(angle), +z)
+                glVertex3d(s1 * math.cos(angle), s1 * math.sin(angle), -z)
+
+                glNormal3d(s2 * math.sin(angle + delta) - s1 * math.sin(angle), s1 * math.cos(angle) - s2 * math.cos(angle + delta), 0.0)
+                glVertex3d(s2 * math.cos(angle + delta), s2 * math.sin(angle + delta), +z)
+                glVertex3d(s2 * math.cos(angle + delta), s2 * math.sin(angle + delta), -z)
+
+        glVertex3d(r1, 0.0, +z)
+        glVertex3d(r1, 0.0, -z)
+        glEnd()
+
+        glShadeModel(GL_SMOOTH)
+
+        glBegin(GL_QUAD_STRIP)
+
+        for i in range(toothCount+1):
+            angle = i * 2.0 * math.pi / toothCount
+            glNormal3d(-math.cos(angle), -math.sin(angle), 0.0)
+            glVertex3d(r0 * math.cos(angle), r0 * math.sin(angle), +z)
+            glVertex3d(r0 * math.cos(angle), r0 * math.sin(angle), -z)
+
+        glEnd()
+
+        glEndList()
+
+        return list    
+
+    def drawGear(self, gear, dx, dy, dz, angle):
+        glPushMatrix()
+        glTranslated(dx, dy, dz)
+        glRotated(angle, 0.0, 0.0, 1.0)
+        glCallList(gear)
+        glPopMatrix()
+
+    def normalizeAngle(self, angle):
+        while (angle < 0):
+            angle += 360 * 16
+
+        while (angle > 360 * 16):
+            angle -= 360 * 16
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):        
+        super(MainWindow, self).__init__()
+
+        centralWidget = QWidget()
+        self.setCentralWidget(centralWidget)
+
+        self.glWidget = GLWidget()
+        self.pixmapLabel = QLabel()
+
+        self.glWidgetArea = QScrollArea()
+        self.glWidgetArea.setWidget(self.glWidget)
+        self.glWidgetArea.setWidgetResizable(True)
+        self.glWidgetArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        self.glWidgetArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        self.glWidgetArea.setSizePolicy(QSizePolicy.Ignored,
+                QSizePolicy.Ignored)
+        self.glWidgetArea.setMinimumSize(50, 50)
+
+        self.pixmapLabelArea = QScrollArea()
+        self.pixmapLabelArea.setWidget(self.pixmapLabel)
+        self.pixmapLabelArea.setSizePolicy(QSizePolicy.Ignored,
+                QSizePolicy.Ignored)
+        self.pixmapLabelArea.setMinimumSize(50, 50)
+
+        xSlider = self.createSlider(self.glWidget.xRotationChanged,
+                self.glWidget.setXRotation)
+        ySlider = self.createSlider(self.glWidget.yRotationChanged,
+                self.glWidget.setYRotation)
+        zSlider = self.createSlider(self.glWidget.zRotationChanged,
+                self.glWidget.setZRotation)
+
+        self.createActions()
+        self.createMenus()
+
+        centralLayout = QGridLayout()
+        centralLayout.addWidget(self.glWidgetArea, 0, 0)
+        centralLayout.addWidget(self.pixmapLabelArea, 0, 1)
+        centralLayout.addWidget(xSlider, 1, 0, 1, 2)
+        centralLayout.addWidget(ySlider, 2, 0, 1, 2)
+        centralLayout.addWidget(zSlider, 3, 0, 1, 2)
+        centralWidget.setLayout(centralLayout)
+
+        xSlider.setValue(15 * 16)
+        ySlider.setValue(345 * 16)
+        zSlider.setValue(0 * 16)
+
+        self.setWindowTitle("Grabber")
+        self.resize(400, 300)
+
+    def renderIntoPixmap(self):
+        size = self.getSize()
+
+        if size.isValid():
+            pixmap = self.glWidget.renderPixmap(size.width(), size.height())
+            self.setPixmap(pixmap)
+
+    def grabFrameBuffer(self):
+        image = self.glWidget.grabFrameBuffer()
+        self.setPixmap(QPixmap.fromImage(image))
+
+    def clearPixmap(self):
+        self.setPixmap(QPixmap())
+
+    def about(self):
+        QMessageBox.about(self, "About Grabber",
+                "The <b>Grabber</b> example demonstrates two approaches for "
+                "rendering OpenGL into a Qt pixmap.")
+
+    def createActions(self):
+        self.renderIntoPixmapAct = QAction("&Render into Pixmap...",
+                self, shortcut="Ctrl+R", triggered=self.renderIntoPixmap)
+
+        self.grabFrameBufferAct = QAction("&Grab Frame Buffer", self,
+                shortcut="Ctrl+G", triggered=self.grabFrameBuffer)
+
+        self.clearPixmapAct = QAction("&Clear Pixmap", self,
+                shortcut="Ctrl+L", triggered=self.clearPixmap)
+
+        self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q",
+                triggered=self.close)
+
+        self.aboutAct = QAction("&About", self, triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.renderIntoPixmapAct)
+        self.fileMenu.addAction(self.grabFrameBufferAct)
+        self.fileMenu.addAction(self.clearPixmapAct)
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.exitAct)
+
+        self.helpMenu = self.menuBar().addMenu("&Help")
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+    def createSlider(self, changedSignal, setterSlot):
+        slider = QSlider(Qt.Horizontal)
+        slider.setRange(0, 360 * 16)
+        slider.setSingleStep(16)
+        slider.setPageStep(15 * 16)
+        slider.setTickInterval(15 * 16)
+        slider.setTickPosition(QSlider.TicksRight)
+
+        slider.valueChanged.connect(setterSlot)
+        changedSignal.connect(slider.setValue)
+
+        return slider
+
+    def setPixmap(self, pixmap):
+        self.pixmapLabel.setPixmap(pixmap)
+        size = pixmap.size()
+
+        if size - QSize(1, 0) == self.pixmapLabelArea.maximumViewportSize():
+            size -= QSize(1, 0)
+
+        self.pixmapLabel.resize(size)
+
+    def getSize(self):
+        text, ok = QInputDialog.getText(self, "Grabber",
+                "Enter pixmap size:", QLineEdit.Normal,
+                "%d x %d" % (self.glWidget.width(), self.glWidget.height()))
+
+        if not ok:
+            return QSize()
+
+        regExp = QRegExp(r'([0-9]+) *x *([0-9]+)')
+
+        if regExp.exactMatch(text):
+            width = int(regExp.cap(1))
+            height = int(regExp.cap(2))
+            if width > 0 and width < 2048 and height > 0 and height < 2048:
+                return QSize(width, height)
+
+        return self.glWidget.size()
+
+
+if __name__ == '__main__':
+
+    app = QApplication(sys.argv)
+    mainWin = MainWindow()
+    mainWin.show()
+    sys.exit(app.exec_())    
diff --git a/examples/opengl/hellogl.py b/examples/opengl/hellogl.py
new file mode 100755
index 0000000..f8af60d
--- /dev/null
+++ b/examples/opengl/hellogl.py
@@ -0,0 +1,279 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+import math
+
+from PyQt5.QtCore import pyqtSignal, QPoint, QSize, Qt
+from PyQt5.QtGui import QColor
+from PyQt5.QtWidgets import (QApplication, QHBoxLayout, QMessageBox, QSlider,
+        QWidget)
+from PyQt5.QtOpenGL import QGLWidget
+
+try:
+    from OpenGL import GL
+except ImportError:
+    app = QApplication(sys.argv)
+    QMessageBox.critical(None, "OpenGL hellogl",
+            "PyOpenGL must be installed to run this example.")
+    sys.exit(1)
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.glWidget = GLWidget()
+
+        self.xSlider = self.createSlider()
+        self.ySlider = self.createSlider()
+        self.zSlider = self.createSlider()
+
+        self.xSlider.valueChanged.connect(self.glWidget.setXRotation)
+        self.glWidget.xRotationChanged.connect(self.xSlider.setValue)
+        self.ySlider.valueChanged.connect(self.glWidget.setYRotation)
+        self.glWidget.yRotationChanged.connect(self.ySlider.setValue)
+        self.zSlider.valueChanged.connect(self.glWidget.setZRotation)
+        self.glWidget.zRotationChanged.connect(self.zSlider.setValue)
+
+        mainLayout = QHBoxLayout()
+        mainLayout.addWidget(self.glWidget)
+        mainLayout.addWidget(self.xSlider)
+        mainLayout.addWidget(self.ySlider)
+        mainLayout.addWidget(self.zSlider)
+        self.setLayout(mainLayout)
+
+        self.xSlider.setValue(15 * 16)
+        self.ySlider.setValue(345 * 16)
+        self.zSlider.setValue(0 * 16)
+
+        self.setWindowTitle("Hello GL")
+
+    def createSlider(self):
+        slider = QSlider(Qt.Vertical)
+
+        slider.setRange(0, 360 * 16)
+        slider.setSingleStep(16)
+        slider.setPageStep(15 * 16)
+        slider.setTickInterval(15 * 16)
+        slider.setTickPosition(QSlider.TicksRight)
+
+        return slider
+
+
+class GLWidget(QGLWidget):
+    xRotationChanged = pyqtSignal(int)
+    yRotationChanged = pyqtSignal(int)
+    zRotationChanged = pyqtSignal(int)
+
+    def __init__(self, parent=None):
+        super(GLWidget, self).__init__(parent)
+
+        self.object = 0
+        self.xRot = 0
+        self.yRot = 0
+        self.zRot = 0
+
+        self.lastPos = QPoint()
+
+        self.trolltechGreen = QColor.fromCmykF(0.40, 0.0, 1.0, 0.0)
+        self.trolltechPurple = QColor.fromCmykF(0.39, 0.39, 0.0, 0.0)
+
+    def minimumSizeHint(self):
+        return QSize(50, 50)
+
+    def sizeHint(self):
+        return QSize(400, 400)
+
+    def setXRotation(self, angle):
+        angle = self.normalizeAngle(angle)
+        if angle != self.xRot:
+            self.xRot = angle
+            self.xRotationChanged.emit(angle)
+            self.updateGL()
+
+    def setYRotation(self, angle):
+        angle = self.normalizeAngle(angle)
+        if angle != self.yRot:
+            self.yRot = angle
+            self.yRotationChanged.emit(angle)
+            self.updateGL()
+
+    def setZRotation(self, angle):
+        angle = self.normalizeAngle(angle)
+        if angle != self.zRot:
+            self.zRot = angle
+            self.zRotationChanged.emit(angle)
+            self.updateGL()
+
+    def initializeGL(self):
+        self.qglClearColor(self.trolltechPurple.darker())
+        self.object = self.makeObject()
+        GL.glShadeModel(GL.GL_FLAT)
+        GL.glEnable(GL.GL_DEPTH_TEST)
+        GL.glEnable(GL.GL_CULL_FACE)
+
+    def paintGL(self):
+        GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT)
+        GL.glLoadIdentity()
+        GL.glTranslated(0.0, 0.0, -10.0)
+        GL.glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0)
+        GL.glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0)
+        GL.glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0)
+        GL.glCallList(self.object)
+
+    def resizeGL(self, width, height):
+        side = min(width, height)
+        if side < 0:
+            return
+
+        GL.glViewport((width - side) // 2, (height - side) // 2, side, side)
+
+        GL.glMatrixMode(GL.GL_PROJECTION)
+        GL.glLoadIdentity()
+        GL.glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0)
+        GL.glMatrixMode(GL.GL_MODELVIEW)
+
+    def mousePressEvent(self, event):
+        self.lastPos = event.pos()
+
+    def mouseMoveEvent(self, event):
+        dx = event.x() - self.lastPos.x()
+        dy = event.y() - self.lastPos.y()
+
+        if event.buttons() & Qt.LeftButton:
+            self.setXRotation(self.xRot + 8 * dy)
+            self.setYRotation(self.yRot + 8 * dx)
+        elif event.buttons() & Qt.RightButton:
+            self.setXRotation(self.xRot + 8 * dy)
+            self.setZRotation(self.zRot + 8 * dx)
+
+        self.lastPos = event.pos()
+
+    def makeObject(self):
+        genList = GL.glGenLists(1)
+        GL.glNewList(genList, GL.GL_COMPILE)
+
+        GL.glBegin(GL.GL_QUADS)
+
+        x1 = +0.06
+        y1 = -0.14
+        x2 = +0.14
+        y2 = -0.06
+        x3 = +0.08
+        y3 = +0.00
+        x4 = +0.30
+        y4 = +0.22
+
+        self.quad(x1, y1, x2, y2, y2, x2, y1, x1)
+        self.quad(x3, y3, x4, y4, y4, x4, y3, x3)
+
+        self.extrude(x1, y1, x2, y2)
+        self.extrude(x2, y2, y2, x2)
+        self.extrude(y2, x2, y1, x1)
+        self.extrude(y1, x1, x1, y1)
+        self.extrude(x3, y3, x4, y4)
+        self.extrude(x4, y4, y4, x4)
+        self.extrude(y4, x4, y3, x3)
+
+        NumSectors = 200
+
+        for i in range(NumSectors):
+            angle1 = (i * 2 * math.pi) / NumSectors
+            x5 = 0.30 * math.sin(angle1)
+            y5 = 0.30 * math.cos(angle1)
+            x6 = 0.20 * math.sin(angle1)
+            y6 = 0.20 * math.cos(angle1)
+
+            angle2 = ((i + 1) * 2 * math.pi) / NumSectors
+            x7 = 0.20 * math.sin(angle2)
+            y7 = 0.20 * math.cos(angle2)
+            x8 = 0.30 * math.sin(angle2)
+            y8 = 0.30 * math.cos(angle2)
+
+            self.quad(x5, y5, x6, y6, x7, y7, x8, y8)
+
+            self.extrude(x6, y6, x7, y7)
+            self.extrude(x8, y8, x5, y5)
+
+        GL.glEnd()
+        GL.glEndList()
+
+        return genList
+
+    def quad(self, x1, y1, x2, y2, x3, y3, x4, y4):
+        self.qglColor(self.trolltechGreen)
+
+        GL.glVertex3d(x1, y1, -0.05)
+        GL.glVertex3d(x2, y2, -0.05)
+        GL.glVertex3d(x3, y3, -0.05)
+        GL.glVertex3d(x4, y4, -0.05)
+
+        GL.glVertex3d(x4, y4, +0.05)
+        GL.glVertex3d(x3, y3, +0.05)
+        GL.glVertex3d(x2, y2, +0.05)
+        GL.glVertex3d(x1, y1, +0.05)
+
+    def extrude(self, x1, y1, x2, y2):
+        self.qglColor(self.trolltechGreen.darker(250 + int(100 * x1)))
+
+        GL.glVertex3d(x1, y1, +0.05)
+        GL.glVertex3d(x2, y2, +0.05)
+        GL.glVertex3d(x2, y2, -0.05)
+        GL.glVertex3d(x1, y1, -0.05)
+
+    def normalizeAngle(self, angle):
+        while angle < 0:
+            angle += 360 * 16
+        while angle > 360 * 16:
+            angle -= 360 * 16
+        return angle
+
+
+if __name__ == '__main__':
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/opengl/openglwindow.py b/examples/opengl/openglwindow.py
new file mode 100644
index 0000000..d8d454f
--- /dev/null
+++ b/examples/opengl/openglwindow.py
@@ -0,0 +1,220 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## Contact: http://www.qt-project.org/legal
+##
+## This file is part of the documentation of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import array
+
+from PyQt5.QtCore import QEvent
+from PyQt5.QtGui import (QGuiApplication, QMatrix4x4, QOpenGLContext,
+        QOpenGLShader, QOpenGLShaderProgram, QSurfaceFormat, QWindow)
+
+
+class OpenGLWindow(QWindow):
+    def __init__(self, parent=None):
+        super(OpenGLWindow, self).__init__(parent)
+
+        self.m_update_pending = False
+        self.m_animating = False
+        self.m_context = None
+        self.m_gl = None
+
+        self.setSurfaceType(QWindow.OpenGLSurface)
+
+    def initialize(self):
+        pass
+
+    def setAnimating(self, animating):
+        self.m_animating = animating
+
+        if animating:
+            self.renderLater()
+
+    def renderLater(self):
+        if not self.m_update_pending:
+            self.m_update_pending = True
+            QGuiApplication.postEvent(self, QEvent(QEvent.UpdateRequest))
+
+    def renderNow(self):
+        if not self.isExposed():
+            return
+
+        self.m_update_pending = False
+
+        needsInitialize = False
+
+        if self.m_context is None:
+            self.m_context = QOpenGLContext(self)
+            self.m_context.setFormat(self.requestedFormat())
+            self.m_context.create()
+
+            needsInitialize = True
+
+        self.m_context.makeCurrent(self)
+
+        if needsInitialize:
+            self.m_gl = self.m_context.versionFunctions()
+            self.m_gl.initializeOpenGLFunctions()
+
+            self.initialize()
+
+        self.render(self.m_gl)
+
+        self.m_context.swapBuffers(self)
+
+        if self.m_animating:
+            self.renderLater()
+
+    def event(self, event):
+        if event.type() == QEvent.UpdateRequest:
+            self.renderNow()
+            return True
+
+        return super(OpenGLWindow, self).event(event)
+
+    def exposeEvent(self, event):
+        self.renderNow()
+
+    def resizeEvent(self, event):
+        self.renderNow()
+
+
+class TriangleWindow(OpenGLWindow):
+    vertexShaderSource = '''
+attribute highp vec4 posAttr;
+attribute lowp vec4 colAttr;
+varying lowp vec4 col;
+uniform highp mat4 matrix;
+void main() {
+    col = colAttr;
+    gl_Position = matrix * posAttr;
+}
+'''
+
+    fragmentShaderSource = '''
+varying lowp vec4 col;
+void main() {
+    gl_FragColor = col;
+}
+'''
+
+    def __init__(self):
+        super(TriangleWindow, self).__init__()
+
+        self.m_program = 0
+        self.m_frame = 0
+
+        self.m_posAttr = 0
+        self.m_colAttr = 0
+        self.m_matrixUniform = 0
+
+    def initialize(self):
+        self.m_program = QOpenGLShaderProgram(self)
+
+        self.m_program.addShaderFromSourceCode(QOpenGLShader.Vertex,
+                self.vertexShaderSource)
+        self.m_program.addShaderFromSourceCode(QOpenGLShader.Fragment,
+                self.fragmentShaderSource)
+
+        self.m_program.link()
+
+        self.m_posAttr = self.m_program.attributeLocation('posAttr')
+        self.m_colAttr = self.m_program.attributeLocation('colAttr')
+        self.m_matrixUniform = self.m_program.uniformLocation('matrix')
+
+    def render(self, gl):
+        gl.glViewport(0, 0, self.width(), self.height())
+
+        gl.glClear(gl.GL_COLOR_BUFFER_BIT)
+
+        self.m_program.bind()
+
+        matrix = QMatrix4x4()
+        matrix.perspective(60, 4.0/3.0, 0.1, 100.0)
+        matrix.translate(0, 0, -2)
+        matrix.rotate(100.0 * self.m_frame / self.screen().refreshRate(),
+                0, 1, 0)
+
+        self.m_program.setUniformValue(self.m_matrixUniform, matrix)
+
+        vertices = array.array('f', [
+                 0.0,  0.707,
+                -0.5, -0.5,
+                 0.5, -0.5])
+
+        gl.glVertexAttribPointer(self.m_posAttr, 2, gl.GL_FLOAT, False, 0,
+                vertices)
+        gl.glEnableVertexAttribArray(self.m_posAttr)
+
+        colors = array.array('f', [
+                1.0, 0.0, 0.0,
+                0.0, 1.0, 0.0,
+                0.0, 0.0, 1.0])
+
+        gl.glVertexAttribPointer(self.m_colAttr, 3, gl.GL_FLOAT, False, 0,
+                colors)
+        gl.glEnableVertexAttribArray(self.m_colAttr)
+
+        gl.glDrawArrays(gl.GL_TRIANGLES, 0, 3)
+
+        self.m_program.release()
+
+        self.m_frame += 1
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QGuiApplication(sys.argv)
+
+    format = QSurfaceFormat()
+    format.setSamples(4)
+
+    window = TriangleWindow()
+    window.setFormat(format)
+    window.resize(640, 480)
+    window.show()
+
+    window.setAnimating(True)
+
+    sys.exit(app.exec_())
diff --git a/examples/opengl/overpainting.py b/examples/opengl/overpainting.py
new file mode 100755
index 0000000..83d7451
--- /dev/null
+++ b/examples/opengl/overpainting.py
@@ -0,0 +1,371 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+import math, random
+
+from PyQt5.QtCore import (QPoint, QPointF, QRect, QRectF, QSize, Qt, QTime,
+        QTimer)
+from PyQt5.QtGui import (QBrush, QColor, QFontMetrics, QImage, QPainter,
+        QRadialGradient)
+from PyQt5.QtWidgets import QApplication, QMessageBox
+from PyQt5.QtOpenGL import QGL, QGLFormat, QGLWidget
+
+try:
+    from OpenGL.GL import *
+except ImportError:
+    app = QApplication(sys.argv)
+    QMessageBox.critical(None, "OpenGL overpainting",
+            "PyOpenGL must be installed to run this example.")
+    sys.exit(1)
+
+
+class Bubble(object):
+    def __init__(self, position, radius, velocity):
+        self.position = position
+        self.vel = velocity
+        self.radius = radius
+
+        self.innerColor = self.randomColor()
+        self.outerColor = self.randomColor()
+        self.updateBrush()
+
+    def updateBrush(self):
+        gradient = QRadialGradient(QPointF(self.radius, self.radius), self.radius, QPointF(self.radius*0.5, self.radius*0.5))
+
+        gradient.setColorAt(0, QColor(255, 255, 255, 255))
+        gradient.setColorAt(0.25, self.innerColor)
+        gradient.setColorAt(1, self.outerColor)
+        self.brush = QBrush(gradient)
+
+    def drawBubble(self, painter):
+        painter.save()
+        painter.translate(self.position.x() - self.radius,
+                self.position.y() - self.radius)
+        painter.setBrush(self.brush)
+        painter.drawEllipse(0, 0, int(2*self.radius), int(2*self.radius))
+        painter.restore()
+
+    def randomColor(self):
+        red = random.randrange(205, 256)
+        green = random.randrange(205, 256)
+        blue = random.randrange(205, 256)
+        alpha = random.randrange(91, 192)
+
+        return QColor(red, green, blue, alpha)
+
+    def move(self, bbox):
+        self.position += self.vel
+        leftOverflow = self.position.x() - self.radius - bbox.left()
+        rightOverflow = self.position.x() + self.radius - bbox.right()
+        topOverflow = self.position.y() - self.radius - bbox.top()
+        bottomOverflow = self.position.y() + self.radius - bbox.bottom()
+
+        if leftOverflow < 0.0:
+            self.position.setX(self.position.x() - 2 * leftOverflow)
+            self.vel.setX(-self.vel.x())
+        elif rightOverflow > 0.0:
+            self.position.setX(self.position.x() - 2 * rightOverflow)
+            self.vel.setX(-self.vel.x())
+
+        if topOverflow < 0.0:
+            self.position.setY(self.position.y() - 2 * topOverflow)
+            self.vel.setY(-self.vel.y())
+        elif bottomOverflow > 0.0:
+            self.position.setY(self.position.y() - 2 * bottomOverflow)
+            self.vel.setY(-self.vel.y())
+
+    def rect(self):
+        return QRectF(self.position.x() - self.radius,
+                self.position.y() - self.radius, 2 * self.radius,
+                2 * self.radius)
+
+
+class GLWidget(QGLWidget):
+    def __init__(self, parent=None):
+        super(GLWidget, self).__init__(QGLFormat(QGL.SampleBuffers), parent)
+
+        midnight = QTime(0, 0, 0)
+        random.seed(midnight.secsTo(QTime.currentTime()))
+
+        self.object = 0
+        self.xRot = 0
+        self.yRot = 0
+        self.zRot = 0
+        self.image = QImage()
+        self.bubbles = []
+        self.lastPos = QPoint()
+
+        self.trolltechGreen = QColor.fromCmykF(0.40, 0.0, 1.0, 0.0)
+        self.trolltechPurple = QColor.fromCmykF(0.39, 0.39, 0.0, 0.0)
+
+        self.animationTimer = QTimer()
+        self.animationTimer.setSingleShot(False)
+        self.animationTimer.timeout.connect(self.animate)
+        self.animationTimer.start(25)
+
+        self.setAutoFillBackground(False)
+        self.setMinimumSize(200, 200)
+        self.setWindowTitle("Overpainting a Scene")
+
+    def __del__(self):
+        self.makeCurrent()
+        glDeleteLists(self.object, 1)
+
+    def setXRotation(self, angle):
+        angle = self.normalizeAngle(angle)
+        if angle != self.xRot:
+            self.xRot = angle
+
+    def setYRotation(self, angle):
+        angle = self.normalizeAngle(angle)
+        if angle != self.yRot:
+            self.yRot = angle
+
+    def setZRotation(self, angle):
+        angle = self.normalizeAngle(angle)
+        if angle != self.zRot:
+            self.zRot = angle
+
+    def initializeGL(self):
+        self.object = self.makeObject()
+
+    def mousePressEvent(self, event):
+        self.lastPos = event.pos()
+
+    def mouseMoveEvent(self, event):
+        dx = event.x() - self.lastPos.x()
+        dy = event.y() - self.lastPos.y()
+
+        if event.buttons() & Qt.LeftButton:
+            self.setXRotation(self.xRot + 8 * dy)
+            self.setYRotation(self.yRot + 8 * dx)
+        elif event.buttons() & Qt.RightButton:
+            self.setXRotation(self.xRot + 8 * dy)
+            self.setZRotation(self.zRot + 8 * dx)
+
+        self.lastPos = event.pos()
+
+    def paintEvent(self, event):
+        self.makeCurrent()
+
+        glMatrixMode(GL_MODELVIEW)
+        glPushMatrix()
+
+        self.qglClearColor(self.trolltechPurple.darker())
+        glShadeModel(GL_SMOOTH)
+        glEnable(GL_DEPTH_TEST)
+        #glEnable(GL_CULL_FACE)
+        glEnable(GL_LIGHTING)
+        glEnable(GL_LIGHT0)
+        glEnable(GL_MULTISAMPLE)
+        lightPosition = (0.5, 5.0, 7.0, 1.0)
+        glLightfv(GL_LIGHT0, GL_POSITION, lightPosition)
+
+        self.setupViewport(self.width(), self.height())
+
+        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+        glLoadIdentity()
+        glTranslated(0.0, 0.0, -10.0)
+        glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0)
+        glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0)
+        glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0)
+        glCallList(self.object)
+
+        glMatrixMode(GL_MODELVIEW)
+        glPopMatrix()
+
+        painter = QPainter(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+
+        for bubble in self.bubbles:
+            if bubble.rect().intersects(QRectF(event.rect())):
+                bubble.drawBubble(painter)
+
+        self.drawInstructions(painter)
+        painter.end()
+
+    def resizeGL(self, width, height):
+        self.setupViewport(width, height)
+
+    def showEvent(self, event):
+        self.createBubbles(20 - len(self.bubbles))
+
+    def sizeHint(self):
+        return QSize(400, 400)
+
+    def makeObject(self):
+        list = glGenLists(1)
+        glNewList(list, GL_COMPILE)
+
+        glEnable(GL_NORMALIZE)
+        glBegin(GL_QUADS)
+
+        logoDiffuseColor = (self.trolltechGreen.red()/255.0,
+                            self.trolltechGreen.green()/255.0,
+                            self.trolltechGreen.blue()/255.0, 1.0)
+        glMaterialfv(GL_FRONT, GL_DIFFUSE, logoDiffuseColor)
+
+        x1 = +0.06
+        y1 = -0.14
+        x2 = +0.14
+        y2 = -0.06
+        x3 = +0.08
+        y3 = +0.00
+        x4 = +0.30
+        y4 = +0.22
+
+        self.quad(x1, y1, x2, y2, y2, x2, y1, x1)
+        self.quad(x3, y3, x4, y4, y4, x4, y3, x3)
+
+        self.extrude(x1, y1, x2, y2)
+        self.extrude(x2, y2, y2, x2)
+        self.extrude(y2, x2, y1, x1)
+        self.extrude(y1, x1, x1, y1)
+        self.extrude(x3, y3, x4, y4)
+        self.extrude(x4, y4, y4, x4)
+        self.extrude(y4, x4, y3, x3)
+
+        NumSectors = 200
+
+        for i in range(NumSectors):
+            angle1 = (i * 2 * math.pi) / NumSectors
+            x5 = 0.30 * math.sin(angle1)
+            y5 = 0.30 * math.cos(angle1)
+            x6 = 0.20 * math.sin(angle1)
+            y6 = 0.20 * math.cos(angle1)
+
+            angle2 = ((i + 1) * 2 * math.pi) / NumSectors
+            x7 = 0.20 * math.sin(angle2)
+            y7 = 0.20 * math.cos(angle2)
+            x8 = 0.30 * math.sin(angle2)
+            y8 = 0.30 * math.cos(angle2)
+
+            self.quad(x5, y5, x6, y6, x7, y7, x8, y8)
+
+            self.extrude(x6, y6, x7, y7)
+            self.extrude(x8, y8, x5, y5)
+
+        glEnd()
+
+        glEndList()
+        return list
+
+    def quad(self, x1, y1, x2, y2, x3, y3, x4, y4):
+        glNormal3d(0.0, 0.0, -1.0)
+        glVertex3d(x1, y1, -0.05)
+        glVertex3d(x2, y2, -0.05)
+        glVertex3d(x3, y3, -0.05)
+        glVertex3d(x4, y4, -0.05)
+
+        glNormal3d(0.0, 0.0, 1.0)
+        glVertex3d(x4, y4, +0.05)
+        glVertex3d(x3, y3, +0.05)
+        glVertex3d(x2, y2, +0.05)
+        glVertex3d(x1, y1, +0.05)
+
+    def extrude(self, x1, y1, x2, y2):
+        self.qglColor(self.trolltechGreen.darker(250 + int(100 * x1)))
+
+        glNormal3d((x1 + x2)/2.0, (y1 + y2)/2.0, 0.0)
+        glVertex3d(x1, y1, +0.05)
+        glVertex3d(x2, y2, +0.05)
+        glVertex3d(x2, y2, -0.05)
+        glVertex3d(x1, y1, -0.05)
+
+    def normalizeAngle(self, angle):
+        while angle < 0:
+            angle += 360 * 16
+        while angle > 360 * 16:
+            angle -= 360 * 16
+        return angle
+
+    def createBubbles(self, number):
+        for i in range(number):
+            position = QPointF(self.width()*(0.1 + 0.8*random.random()),
+                               self.height()*(0.1 + 0.8*random.random()))
+            radius = min(self.width(), self.height())*(0.0125 + 0.0875*random.random())
+            velocity = QPointF(self.width()*0.0125*(-0.5 + random.random()),
+                               self.height()*0.0125*(-0.5 + random.random()))
+
+            self.bubbles.append(Bubble(position, radius, velocity))
+
+    def animate(self):
+        for bubble in self.bubbles:
+            bubble.move(self.rect())
+
+        self.update()
+
+    def setupViewport(self, width, height):
+        side = min(width, height)
+        glViewport((width - side) // 2, (height - side) // 2, side, side)
+
+        glMatrixMode(GL_PROJECTION)
+        glLoadIdentity()
+        glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0)
+        glMatrixMode(GL_MODELVIEW)
+
+    def drawInstructions(self, painter):
+        text = "Click and drag with the left mouse button to rotate the Qt " \
+                "logo."
+        metrics = QFontMetrics(self.font())
+        border = max(4, metrics.leading())
+
+        rect = metrics.boundingRect(0, 0, self.width() - 2*border,
+                int(self.height()*0.125), Qt.AlignCenter | Qt.TextWordWrap,
+                text)
+        painter.setRenderHint(QPainter.TextAntialiasing)
+        painter.fillRect(QRect(0, 0, self.width(), rect.height() + 2*border), QColor(0, 0, 0, 127))
+        painter.setPen(Qt.white)
+        painter.fillRect(QRect(0, 0, self.width(), rect.height() + 2*border), QColor(0, 0, 0, 127))
+        painter.drawText((self.width() - rect.width())/2, border, rect.width(),
+                rect.height(), Qt.AlignCenter | Qt.TextWordWrap, text)
+
+
+if __name__ == '__main__':
+
+    app = QApplication(sys.argv)
+    window = GLWidget()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/opengl/samplebuffers.py b/examples/opengl/samplebuffers.py
new file mode 100755
index 0000000..70007b2
--- /dev/null
+++ b/examples/opengl/samplebuffers.py
@@ -0,0 +1,193 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+import math
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtGui import QColor
+from PyQt5.QtWidgets import QApplication, QMessageBox
+from PyQt5.QtOpenGL import QGL, QGLFormat, QGLWidget
+
+try:
+    from OpenGL import GL
+except ImportError:
+    app = QApplication(sys.argv)
+    QMessageBox.critical(None, "OpenGL samplebuffers",
+            "PyOpenGL must be installed to run this example.")
+    sys.exit(1)
+
+
+class GLWidget(QGLWidget):
+    GL_MULTISAMPLE = 0x809D
+    rot = 0.0
+
+    def __init__(self, parent):
+        super(GLWidget, self).__init__(QGLFormat(QGL.SampleBuffers), parent)
+
+        self.list_ = []
+
+        self.startTimer(40)
+        self.setWindowTitle("Sample Buffers")
+
+    def initializeGL(self):
+        GL.glMatrixMode(GL.GL_PROJECTION)
+        GL.glLoadIdentity()
+        GL.glOrtho( -.5, .5, .5, -.5, -1000, 1000)
+        GL.glMatrixMode(GL.GL_MODELVIEW)
+        GL.glLoadIdentity()
+        GL.glClearColor(1.0, 1.0, 1.0, 1.0)
+
+        self.makeObject()
+
+    def resizeGL(self, w, h):
+        GL.glViewport(0, 0, w, h)
+
+    def paintGL(self):
+        GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT)
+
+        GL.glMatrixMode(GL.GL_MODELVIEW)
+        GL.glPushMatrix()
+        GL.glEnable(GLWidget.GL_MULTISAMPLE)
+        GL.glTranslatef( -0.25, -0.10, 0.0)
+        GL.glScalef(0.75, 1.15, 0.0)
+        GL.glRotatef(GLWidget.rot, 0.0, 0.0, 1.0)
+        GL.glCallList(self.list_)
+        GL.glPopMatrix()
+
+        GL.glPushMatrix()
+        GL.glDisable(GLWidget.GL_MULTISAMPLE)
+        GL.glTranslatef(0.25, -0.10, 0.0)
+        GL.glScalef(0.75, 1.15, 0.0)
+        GL.glRotatef(GLWidget.rot, 0.0, 0.0, 1.0)
+        GL.glCallList(self.list_)
+        GL.glPopMatrix()
+
+        GLWidget.rot += 0.2
+
+        self.qglColor(Qt.black)
+        self.renderText(-0.35, 0.4, 0.0, "Multisampling enabled")
+        self.renderText(0.15, 0.4, 0.0, "Multisampling disabled")
+
+    def timerEvent(self, event):
+        self.update()
+
+    def makeObject(self):
+        trolltechGreen = QColor.fromCmykF(0.40, 0.0, 1.0, 0.0)
+        NumSectors = 15
+        x1 = +0.06
+        y1 = -0.14
+        x2 = +0.14
+        y2 = -0.06
+        x3 = +0.08
+        y3 = +0.00
+        x4 = +0.30
+        y4 = +0.22
+
+        self.list_ = GL.glGenLists(1)
+        GL.glNewList(self.list_, GL.GL_COMPILE)
+
+        for i in range(NumSectors):
+            angle1 = float((i * 2 * math.pi) / NumSectors)
+            x5 = 0.30 * math.sin(angle1)
+            y5 = 0.30 * math.cos(angle1)
+            x6 = 0.20 * math.sin(angle1)
+            y6 = 0.20 * math.cos(angle1)
+
+            angle2 = float(((i + 1) * 2 * math.pi) / NumSectors)
+            x7 = 0.20 * math.sin(angle2)
+            y7 = 0.20 * math.cos(angle2)
+            x8 = 0.30 * math.sin(angle2)
+            y8 = 0.30 * math.cos(angle2)
+
+            self.qglColor(trolltechGreen)
+            self.quad(GL.GL_QUADS, x5, y5, x6, y6, x7, y7, x8, y8)
+            self.qglColor(Qt.black)
+            self.quad(GL.GL_LINE_LOOP, x5, y5, x6, y6, x7, y7, x8, y8)
+
+        self.qglColor(trolltechGreen)
+        self.quad(GL.GL_QUADS, x1, y1, x2, y2, y2, x2, y1, x1)
+        self.quad(GL.GL_QUADS, x3, y3, x4, y4, y4, x4, y3, x3)
+
+        self.qglColor(Qt.black)
+        self.quad(GL.GL_LINE_LOOP, x1, y1, x2, y2, y2, x2, y1, x1)
+        self.quad(GL.GL_LINE_LOOP, x3, y3, x4, y4, y4, x4, y3, x3)
+
+        GL.glEndList()
+
+    def quad(self, primitive, x1, y1, x2, y2, x3, y3, x4, y4):
+        GL.glBegin(primitive)
+
+        GL.glVertex2d(x1, y1)
+        GL.glVertex2d(x2, y2)
+        GL.glVertex2d(x3, y3)
+        GL.glVertex2d(x4, y4)
+
+        GL.glEnd()
+
+
+if __name__ == '__main__':
+
+    app = QApplication(sys.argv)
+
+    f = QGLFormat.defaultFormat()
+    f.setSampleBuffers(True)
+    QGLFormat.setDefaultFormat(f)
+
+    if not QGLFormat.hasOpenGL():
+        QMessageBox.information(None, "OpenGL samplebuffers",
+                "This system does not support OpenGL.")
+        sys.exit(0)
+
+    widget = GLWidget(None)
+
+    if not widget.format().sampleBuffers():
+        QMessageBox.information(None, "OpenGL samplebuffers",
+                "This system does not have sample buffer support.")
+        sys.exit(0)
+
+    widget.resize(640, 480)
+    widget.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/opengl/textures/images/side1.png b/examples/opengl/textures/images/side1.png
new file mode 100644
index 0000000..2e6b471
Binary files /dev/null and b/examples/opengl/textures/images/side1.png differ
diff --git a/examples/opengl/textures/images/side2.png b/examples/opengl/textures/images/side2.png
new file mode 100644
index 0000000..d1acf1b
Binary files /dev/null and b/examples/opengl/textures/images/side2.png differ
diff --git a/examples/opengl/textures/images/side3.png b/examples/opengl/textures/images/side3.png
new file mode 100644
index 0000000..a638613
Binary files /dev/null and b/examples/opengl/textures/images/side3.png differ
diff --git a/examples/opengl/textures/images/side4.png b/examples/opengl/textures/images/side4.png
new file mode 100644
index 0000000..ebbc1e3
Binary files /dev/null and b/examples/opengl/textures/images/side4.png differ
diff --git a/examples/opengl/textures/images/side5.png b/examples/opengl/textures/images/side5.png
new file mode 100644
index 0000000..fa2f709
Binary files /dev/null and b/examples/opengl/textures/images/side5.png differ
diff --git a/examples/opengl/textures/images/side6.png b/examples/opengl/textures/images/side6.png
new file mode 100644
index 0000000..97141e4
Binary files /dev/null and b/examples/opengl/textures/images/side6.png differ
diff --git a/examples/opengl/textures/textures.py b/examples/opengl/textures/textures.py
new file mode 100755
index 0000000..92eed8b
--- /dev/null
+++ b/examples/opengl/textures/textures.py
@@ -0,0 +1,267 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import pyqtSignal, QPoint, QSize, Qt, QTimer
+from PyQt5.QtGui import (QColor, QMatrix4x4, QOpenGLShader,
+        QOpenGLShaderProgram, QPixmap)
+from PyQt5.QtWidgets import QApplication, QGridLayout, QMessageBox, QWidget
+from PyQt5.QtOpenGL import QGLWidget
+
+try:
+    from OpenGL.GL import *
+except ImportError:
+    app = QApplication(sys.argv)
+    QMessageBox.critical(None, "OpenGL textures",
+            "PyOpenGL must be installed to run this example.")
+    sys.exit(1)
+
+import textures_rc
+
+
+class GLWidget(QGLWidget):
+
+    clicked = pyqtSignal()
+
+    PROGRAM_VERTEX_ATTRIBUTE, PROGRAM_TEXCOORD_ATTRIBUTE = range(2)
+
+    vsrc = """
+attribute highp vec4 vertex;
+attribute mediump vec4 texCoord;
+varying mediump vec4 texc;
+uniform mediump mat4 matrix;
+void main(void)
+{
+    gl_Position = matrix * vertex;
+    texc = texCoord;
+}
+"""
+
+    fsrc = """
+uniform sampler2D texture;
+varying mediump vec4 texc;
+void main(void)
+{
+    gl_FragColor = texture2D(texture, texc.st);
+}
+"""
+
+    coords = (
+        (( +1, -1, -1 ), ( -1, -1, -1 ), ( -1, +1, -1 ), ( +1, +1, -1 )),
+        (( +1, +1, -1 ), ( -1, +1, -1 ), ( -1, +1, +1 ), ( +1, +1, +1 )),
+        (( +1, -1, +1 ), ( +1, -1, -1 ), ( +1, +1, -1 ), ( +1, +1, +1 )),
+        (( -1, -1, -1 ), ( -1, -1, +1 ), ( -1, +1, +1 ), ( -1, +1, -1 )),
+        (( +1, -1, +1 ), ( -1, -1, +1 ), ( -1, -1, -1 ), ( +1, -1, -1 )),
+        (( -1, -1, +1 ), ( +1, -1, +1 ), ( +1, +1, +1 ), ( -1, +1, +1 ))
+    )
+
+    def __init__(self, parent=None, shareWidget=None):
+        super(GLWidget, self).__init__(parent, shareWidget)
+
+        self.clearColor = Qt.black
+        self.xRot = 0
+        self.yRot = 0
+        self.zRot = 0
+
+        self.clearColor = QColor()
+        self.lastPos = QPoint()
+
+        self.program = None
+
+    def minimumSizeHint(self):
+        return QSize(50, 50)
+
+    def sizeHint(self):
+        return QSize(200, 200)
+
+    def rotateBy(self, xAngle, yAngle, zAngle):
+        self.xRot += xAngle
+        self.yRot += yAngle
+        self.zRot += zAngle
+        self.updateGL()
+
+    def setClearColor(self, color):
+        self.clearColor = color
+        self.updateGL()
+
+    def initializeGL(self):
+        self.makeObject()
+
+        glEnable(GL_DEPTH_TEST)
+        glEnable(GL_CULL_FACE)
+
+        vshader = QOpenGLShader(QOpenGLShader.Vertex, self)
+        vshader.compileSourceCode(self.vsrc)
+
+        fshader = QOpenGLShader(QOpenGLShader.Fragment, self)
+        fshader.compileSourceCode(self.fsrc)
+
+        self.program = QOpenGLShaderProgram(self)
+        self.program.addShader(vshader)
+        self.program.addShader(fshader)
+        self.program.bindAttributeLocation('vertex',
+                self.PROGRAM_VERTEX_ATTRIBUTE)
+        self.program.bindAttributeLocation('texCoord',
+                self.PROGRAM_TEXCOORD_ATTRIBUTE)
+        self.program.link()
+
+        self.program.bind()
+        self.program.setUniformValue('texture', 0)
+
+        self.program.enableAttributeArray(self.PROGRAM_VERTEX_ATTRIBUTE)
+        self.program.enableAttributeArray(self.PROGRAM_TEXCOORD_ATTRIBUTE)
+        self.program.setAttributeArray(self.PROGRAM_VERTEX_ATTRIBUTE,
+                self.vertices)
+        self.program.setAttributeArray(self.PROGRAM_TEXCOORD_ATTRIBUTE,
+                self.texCoords)
+
+    def paintGL(self):
+        self.qglClearColor(self.clearColor)
+        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+        m = QMatrix4x4()
+        m.ortho(-0.5, 0.5, 0.5, -0.5, 4.0, 15.0)
+        m.translate(0.0, 0.0, -10.0)
+        m.rotate(self.xRot / 16.0, 1.0, 0.0, 0.0)
+        m.rotate(self.yRot / 16.0, 0.0, 1.0, 0.0)
+        m.rotate(self.zRot / 16.0, 0.0, 0.0, 1.0)
+
+        self.program.setUniformValue('matrix', m)
+
+        for i in range(6):
+            glBindTexture(GL_TEXTURE_2D, self.textures[i])
+            glDrawArrays(GL_TRIANGLE_FAN, i * 4, 4)
+
+    def resizeGL(self, width, height):
+        side = min(width, height)
+        glViewport((width - side) // 2, (height - side) // 2, side, side)
+
+    def mousePressEvent(self, event):
+        self.lastPos = event.pos()
+
+    def mouseMoveEvent(self, event):
+        dx = event.x() - self.lastPos.x()
+        dy = event.y() - self.lastPos.y()
+
+        if event.buttons() & Qt.LeftButton:
+            self.rotateBy(8 * dy, 8 * dx, 0)
+        elif event.buttons() & Qt.RightButton:
+            self.rotateBy(8 * dy, 0, 8 * dx)
+
+        self.lastPos = event.pos()
+
+    def mouseReleaseEvent(self, event):
+        self.clicked.emit()
+
+    def makeObject(self):
+        self.textures = []
+        self.texCoords = []
+        self.vertices = []
+
+        for i in range(6):
+            self.textures.append(
+                    self.bindTexture(QPixmap(':/images/side%d.png' % (i + 1))))
+
+            for j in range(4):
+                self.texCoords.append(((j == 0 or j == 3), (j == 0 or j == 1)))
+
+                x, y, z = self.coords[i][j]
+                self.vertices.append((0.2 * x, 0.2 * y, 0.2 * z))
+
+
+class Window(QWidget):
+    NumRows = 2
+    NumColumns = 3
+
+    def __init__(self):
+        super(Window, self).__init__()
+
+        mainLayout = QGridLayout()
+        self.glWidgets = []
+
+        for i in range(Window.NumRows):
+            row = []
+
+            for j in range(Window.NumColumns):
+                clearColor = QColor()
+                clearColor.setHsv(((i * Window.NumColumns) + j) * 255
+                                  / (Window.NumRows * Window.NumColumns - 1),
+                                  255, 63)
+
+                widget = GLWidget(None, None)
+                widget.setClearColor(clearColor)
+                widget.rotateBy(+42 * 16, +42 * 16, -21 * 16)
+                mainLayout.addWidget(widget, i, j)
+
+                widget.clicked.connect(self.setCurrentGlWidget)
+
+                row.append(widget)
+
+            self.glWidgets.append(row)
+
+        self.setLayout(mainLayout)
+
+        self.currentGlWidget = self.glWidgets[0][0]
+
+        timer = QTimer(self)
+        timer.timeout.connect(self.rotateOneStep)
+        timer.start(20)
+
+        self.setWindowTitle("Textures")
+
+    def setCurrentGlWidget(self):
+        self.currentGlWidget = self.sender()
+
+    def rotateOneStep(self):
+        if self.currentGlWidget:
+            self.currentGlWidget.rotateBy(+2 * 16, +2 * 16, -1 * 16)
+
+
+if __name__ == '__main__':
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/opengl/textures/textures.qrc b/examples/opengl/textures/textures.qrc
new file mode 100644
index 0000000..efa9e9c
--- /dev/null
+++ b/examples/opengl/textures/textures.qrc
@@ -0,0 +1,10 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>images/side1.png</file>
+    <file>images/side2.png</file>
+    <file>images/side3.png</file>
+    <file>images/side4.png</file>
+    <file>images/side5.png</file>
+    <file>images/side6.png</file>
+</qresource>
+</RCC>
diff --git a/examples/opengl/textures/textures_rc.py b/examples/opengl/textures/textures_rc.py
new file mode 100644
index 0000000..4d0880b
--- /dev/null
+++ b/examples/opengl/textures/textures_rc.py
@@ -0,0 +1,698 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Mon May 13 18:10:16 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x06\x56\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\
+\x00\x00\x00\x8a\x50\x4c\x54\x45\x00\xfc\x78\x00\xfc\x80\xe8\xfc\
+\xf0\xf0\xfc\xf8\x08\xfc\x80\xf8\xfc\xf8\x48\xfc\xa0\x58\xfc\xa8\
+\x90\xfc\xc8\xa8\xfc\xd0\xb8\xfc\xd8\x38\xfc\x98\xd8\xfc\xe8\xe0\
+\xfc\xf0\x20\xfc\x90\x10\xfc\x88\x80\xfc\xc0\x30\xfc\x98\x88\xfc\
+\xc0\x18\xfc\x88\xd0\xfc\xe8\xc8\xfc\xe0\x28\xfc\x90\x78\xfc\xb8\
+\xb0\xfc\xd8\xa0\xfc\xd0\x40\xfc\xa0\x70\xfc\xb8\xf0\xfc\xf0\x98\
+\xfc\xc8\xc0\xfc\xe0\x68\xfc\xb0\x50\xfc\xa8\xb0\xfc\xd0\x60\xfc\
+\xb0\x10\xfc\x80\xe0\xfc\xe8\x60\xfc\xa8\x40\xfc\x98\xd0\xfc\xe0\
+\x70\xfc\xb0\x20\xfc\x88\x30\xfc\x90\x80\xfc\xb8\x90\xfc\xc0\x50\
+\xfc\xa0\x40\x29\x71\xf3\x00\x00\x05\x87\x49\x44\x41\x54\x78\x5e\
+\xed\xdc\xe7\x96\xdb\x46\x0c\x80\x51\x4c\x63\xef\x4d\xbd\x6c\x75\
+\x49\xf2\xfe\xaf\x17\x25\xff\x7c\x08\x0f\xa5\xa5\xe8\x33\x43\xe0\
+\x7b\x02\xe3\xda\x96\x20\x70\xb5\x60\x88\x07\x0c\xc0\x00\x0c\xc0\
+\x00\x0c\x60\x80\x60\xbf\x02\x30\x00\x03\x30\x80\x21\x14\x03\x30\
+\x00\x03\x30\x00\x03\x30\x00\x03\x30\x00\x03\x30\x00\x03\x30\x00\
+\x03\x30\x00\x03\x30\x00\x03\x30\x00\x03\x30\x00\x03\x30\xc0\xb3\
+\x63\x00\x06\x60\x00\x06\x60\x00\x06\x60\x00\x06\x60\x00\x06\x60\
+\x00\x06\x60\x00\x06\x60\x00\x06\xc8\x92\xe8\x10\xa6\x43\xab\xb5\
+\x10\xba\x6c\x8b\x21\x0d\x0f\x51\xdc\x2b\x0a\x00\x6a\xbb\xf9\xd4\
+\x80\x07\xc5\xb5\xda\xca\x35\x03\x64\xcd\xa7\x80\xa9\x86\x43\xa2\
+\x56\x09\x20\xff\xae\xe1\xce\x44\xb0\x53\x6b\x03\xe8\x43\x01\x8f\
+\xa4\xc3\x64\x4d\x00\xdb\x14\x1e\xaf\x88\xd4\x4a\x00\xb6\x35\x7c\
+\xad\xb2\x92\x2b\x00\xe8\x53\xf8\x7a\xba\xf1\x1d\x20\x0f\x61\x5e\
+\xc5\xd6\x6b\x80\x48\xc3\xec\xf6\xb9\xb7\x00\x5d\x0d\xcf\xe8\x2d\
+\xf6\x14\x60\x23\xe0\x49\x7d\x28\x0f\x01\xba\x1a\x9e\x57\x91\x79\
+\x07\x10\x69\x78\x66\x65\xef\x17\x80\xbc\xc2\x93\xd3\x5b\xaf\x00\
+\x7e\xc0\xd3\x13\x3b\x8f\x00\x24\x2c\x90\x48\xfc\x01\xe8\x61\x89\
+\xf4\xd9\x1b\x80\x2d\x2c\x52\x99\xf9\x02\x10\xc1\x32\xfd\x54\x9e\
+\x00\x6c\x60\xa1\x2e\x9e\x00\x84\xb0\x54\xb1\x1f\x00\x9f\xb0\x54\
+\xa5\xf4\x02\xa0\x80\xc5\xba\x78\x01\x20\x60\xb1\x44\xe7\x01\x80\
+\x84\x05\xdb\x7b\x00\xd0\xc3\x64\x42\x0b\xf8\x62\xbd\xeb\x00\xf6\
+\x3d\xa8\x0c\xaa\xb8\x97\xe6\x96\x92\x7d\x5c\x05\x25\x3c\x5a\xe8\
+\x34\x80\x7d\x0f\xaa\xab\x6e\xa4\xd5\x6d\x06\x78\x28\x21\x9d\x07\
+\xd8\x00\x96\x3e\x64\x06\xef\x7c\x15\xf0\x40\x7f\x39\x0f\x10\xc2\
+\xb8\xb2\x51\x16\xb2\x6e\x0f\xf7\x57\x38\x0f\x90\x8e\x00\xc4\xf7\
+\xa3\xb1\x17\x97\x70\x77\x99\xc3\x00\xf8\x1e\x34\xf4\x66\xb2\x7c\
+\x0f\xf7\xd6\xb8\x0b\x80\xef\x41\x57\x65\xee\xe9\x15\xee\xec\xd3\
+\x59\x00\x7c\x0f\x3a\x98\x3b\x3b\xc0\x7d\x09\xc7\x01\x7a\x64\xfe\
+\xe7\x7e\x8a\xfc\xe6\x36\xc0\xcb\x2f\x00\xff\xcc\x7a\xf9\xc4\xdb\
+\x39\x09\x80\xef\x41\xad\x34\x0f\x94\x6b\xb8\xa7\x83\x93\x00\xf8\
+\x7f\xe5\x93\x79\xa8\x1d\xdc\x53\xe0\x22\x00\xbe\x07\xb5\x33\x77\
+\x08\xbc\xda\x6d\x80\x74\xce\xfd\xe2\x0c\x77\x34\xb8\x08\x80\xef\
+\x41\x89\x79\xb4\x3d\x4c\xd7\x3a\x08\x80\xef\x41\x42\x2d\xf2\x4c\
+\x41\x3b\x0d\x20\x67\x9e\x6f\x5a\x98\x4c\x38\x0d\xd0\xcf\xdc\xda\
+\x2f\xbe\xff\x0b\x78\x99\xb9\xb2\x25\x30\x59\xe9\x34\x40\x34\xf7\
+\x0f\x2a\x60\xaa\xc2\x69\x80\xc3\xdc\xf3\x5d\x0a\x53\xa5\x4e\x03\
+\x84\x73\x77\xf6\x03\x4c\x15\xba\x07\x80\xef\x41\xb9\xf9\x4a\x27\
+\xcf\x3f\x0b\x14\x73\x17\xb6\xc4\xf3\x4f\x83\x62\xee\x5f\x54\x07\
+\x53\xf5\x2e\x03\x48\x64\x0f\x7e\xac\xdc\xef\x8b\x50\x8f\xec\xc1\
+\x8f\xa5\x60\xa2\xd4\x69\x80\x78\xfe\x63\x4c\x98\x68\xe3\x1c\x00\
+\xbe\x07\x35\x4b\x01\x6c\xdd\x06\x28\xf4\xcc\x97\xaa\x23\xd8\xd3\
+\xca\x21\x00\xbc\xfc\x5b\xb2\x8b\x2a\x63\x96\x79\x11\x0c\xd6\xfe\
+\xd5\xd9\x0c\xec\x9d\xd6\x0e\x70\xf6\xfb\xf1\xf8\xfc\x62\xb0\x76\
+\x35\x6b\x07\x68\xc0\xda\x76\xf5\x00\x97\x89\x83\xe8\xea\x01\x52\
+\xb0\x55\xad\x1f\xa0\x04\x4b\x5a\xae\x1e\x20\x77\xe0\x27\x45\xdd\
+\x7d\x13\x10\xef\xeb\x07\xb8\x80\xa5\x57\xb3\x7e\x80\xda\x02\x20\
+\xb2\xf5\x03\x48\xe1\xf5\x17\x26\xe6\x77\xb2\xbe\x05\x10\x00\xb8\
+\x5a\x00\x1a\xb3\x7e\x00\xa5\x6d\x3f\x16\x40\x00\x60\x07\xbf\xef\
+\x4c\x01\x20\xb0\x3d\x0f\x22\x00\x60\x79\x0f\x68\x25\x05\x80\xca\
+\x76\x0a\xa5\x00\xd0\xc2\xef\xfa\x30\x04\x00\x2c\xc7\xa0\xe2\x48\
+\x02\x20\x05\x3c\x10\xbd\xa1\x00\x90\x58\x56\x20\x12\x00\xa9\xe5\
+\x51\x00\x05\x80\x33\xe0\xc1\xa0\x68\x00\xa4\x80\xa7\x33\x43\x02\
+\x20\x06\x3c\xb1\x35\x34\x00\x0a\xc0\x8b\x0c\x0d\x80\x06\xf0\x0e\
+\x86\x06\x40\xae\x01\xed\x6a\x88\x00\x04\x80\xb6\x57\x44\x00\x62\
+\x40\xab\x95\xa1\x01\x20\x5b\xc0\x1a\xa4\x21\x02\x10\x5a\xe6\xa7\
+\x00\x10\x5b\xe6\xa7\x00\x90\x97\x96\xf9\x29\x00\x7c\x02\x52\x2d\
+\x0d\x15\x80\x0d\x20\xa5\x47\x43\x05\x20\x11\xf8\xfb\x3f\x11\x00\
+\xfc\x05\x20\x50\x86\x0a\x80\xaa\xf1\xfd\x97\x0c\x40\x88\x3e\x02\
+\xa1\x03\xd0\xa0\x0f\xc1\xe9\x00\xc4\x02\xfb\xfc\x4b\x07\xa0\xd7\
+\x30\x6a\x63\xe8\x00\x64\x25\x8c\xaa\x0c\x1d\x00\x59\x60\xf7\x2f\
+\x3a\x00\xc7\xf1\x1b\xa0\x38\x19\x3a\x00\x2a\xc5\x7e\x7d\x36\x21\
+\x80\x60\x3c\x7f\x6c\x08\x01\x5c\xb1\x5f\x20\x4f\x05\x00\x9f\x3f\
+\x31\x54\x00\xf0\xf9\xcf\x86\x08\x00\x3e\x7f\xd9\x1b\x42\x00\xc1\
+\x78\xfe\xce\xd0\x01\x50\xfb\xd1\xfc\x6d\x66\x88\x00\xe0\xf3\x17\
+\x99\xa1\x03\x70\x1c\xef\x3f\x43\x6e\xe8\x00\xc8\x1a\x3b\x7f\xd3\
+\x01\x90\x03\x76\xfe\xa6\x03\x90\x8f\xe7\x4f\x95\xa1\x03\x90\x17\
+\xd8\xf9\x9b\x0e\x40\xf6\x03\x3b\x7f\xd3\x01\xc8\x5a\xec\xfc\x4d\
+\x07\xa0\x6b\x91\xf3\x37\x21\x80\xbe\x44\xce\xdf\x84\x00\xfa\x37\
+\xe4\xfc\x4d\x08\xe0\xac\x91\xf3\x37\x21\x80\x64\x3c\x7f\x63\x08\
+\x01\x6c\x35\x72\xfe\x26\x04\xf0\x22\x90\xf3\x37\x21\x80\x58\x20\
+\xe7\x6f\x42\x00\x3b\x81\x9c\xbf\x09\x01\x9c\x04\x72\xfe\x26\x04\
+\x10\x61\xe7\x6f\x42\x00\x0d\x76\xfe\x26\x04\x50\x61\xe7\x6f\x42\
+\x00\x9b\xf1\xf9\xb7\x33\xf3\x53\xd2\x13\x80\xef\xb3\xbe\xfe\xa4\
+\xe4\x7b\xd7\x9f\x93\x78\x77\x8a\xaa\xcd\xe1\x12\x5e\x83\x7d\x3a\
+\x14\xed\x9b\x00\x80\xc4\x0b\x80\x0b\x8c\xcb\xc7\x63\xe6\xd9\x6d\
+\xcc\x97\xdb\x98\xcd\x6d\xcc\xd7\xff\xc6\xfc\x59\xb4\xa5\x06\x5b\
+\x95\x0f\x00\x1f\x80\x74\x89\x9a\xea\x36\x66\x78\x1b\xb3\xb6\x8e\
+\x69\x2f\xf2\x00\x20\x84\x05\xdb\xb9\x0f\x70\x85\x25\x4b\x5c\x07\
+\x50\x01\x2c\xda\xd9\x71\x00\xb5\x87\x65\xeb\xdc\x06\x50\x29\x2c\
+\x5c\xe6\x34\x80\xac\x61\xe9\xe4\xa2\x00\xee\xcf\x0f\x47\x87\x01\
+\xe4\x00\xcb\xa7\xdc\x05\xc8\x0b\xf8\x03\x19\x67\x01\xde\x0b\x20\
+\x0d\x90\xb5\x40\x1a\xa0\x6b\x81\x34\x40\x57\x02\x69\x80\xbe\x04\
+\xda\x00\x01\xfc\x89\x18\x80\x01\x18\x80\x01\x18\x40\x51\x07\x90\
+\xc4\x01\x18\x20\xa7\x0e\x90\x51\x07\xe8\x09\x00\xb8\x7a\x16\xf7\
+\x3f\x06\x60\x00\x06\x60\x00\x06\x60\x00\x06\x60\x00\x06\x60\x00\
+\x06\x60\x00\x06\x60\x00\x06\x60\x00\x06\x60\x00\x06\x60\x00\x06\
+\x60\x00\x06\x60\x00\x06\x60\x00\x06\x60\x00\x06\x60\x00\x06\x20\
+\x18\x03\xfc\x1f\x03\x30\x00\xf1\x18\x80\x01\x48\xc7\x00\x0c\xf0\
+\x2f\x7c\x1e\x36\xaa\xe0\x1e\x55\xda\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x08\xa7\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\
+\x00\x00\x00\xf0\x50\x4c\x54\x45\xf8\x00\x78\xf8\xfc\xf8\xf8\xf8\
+\xf8\xf8\x0c\x80\xf8\xf4\xf8\xf8\x00\x80\xf8\x08\x80\xf8\xe0\xf0\
+\xf8\x1c\x88\xf8\x24\x90\xf8\x28\x90\xf8\x2c\x90\xf8\x38\x98\xf8\
+\x44\xa0\xf8\x5c\xa8\xf8\x60\xb0\xf8\x68\xb0\xf8\x6c\xb0\xf8\x84\
+\xc0\xf8\x94\xc8\xf8\x04\x80\xf8\x9c\xc8\xf8\xa8\xd0\xf8\xac\xd0\
+\xf8\xbc\xd8\xf8\xcc\xe0\xf8\xd0\xe8\xf8\xd8\xe8\xf8\xdc\xe8\xf8\
+\xe4\xf0\xf8\xe8\xf0\xf8\xf0\xf8\xf8\x14\x88\xf8\x18\x88\xf8\x98\
+\xc8\xf8\xc4\xe0\xf8\xec\xf0\xf8\xb8\xd8\xf8\x54\xa8\xf8\x8c\xc0\
+\xf8\xd4\xe8\xf8\x64\xb0\xf8\x78\xb8\xf8\x7c\xb8\xf8\xc8\xe0\xf8\
+\x10\x88\xf8\x90\xc8\xf8\xb4\xd8\xf8\x10\x80\xf8\x3c\x98\xf8\xc0\
+\xe0\xf8\x70\xb8\xf8\x40\xa0\xf8\xd0\xe0\xf8\x80\xc0\xf8\x48\xa0\
+\xf8\x88\xc0\xf8\x4c\xa0\xf8\x50\xa8\xf8\x20\x90\xf8\x30\x90\xf8\
+\xa0\xd0\xf8\xa4\xd0\xf8\x30\x98\xf8\x34\x98\xf8\xe0\xe8\xf8\x60\
+\xa8\xf8\xf0\xf0\xf8\xb0\xd0\xf8\xc0\xd8\xf8\x20\x88\xf8\xb0\xd8\
+\xf8\xa0\xc8\xf8\x90\xc0\xf8\x74\xb8\xf8\x40\x98\xf8\x58\xa8\xf8\
+\x80\xb8\xf8\x50\xa0\xf8\x70\xb0\xcd\x8c\x3c\xfc\x00\x00\x07\x72\
+\x49\x44\x41\x54\x78\x5e\xed\xdd\xe7\x72\xa5\x3a\x16\x86\xe1\x6f\
+\x89\xb4\x73\xce\x39\x3b\xe7\x9c\xdd\x39\x9e\x99\xfb\xbf\x9b\xa9\
+\xea\x2a\xff\xe8\x33\x48\x80\xb7\x7e\x08\xb4\xde\x0b\x70\x95\x9f\
+\x0d\x08\x04\x08\x90\xe5\x81\x01\x18\x80\x01\x18\x80\x01\x08\x16\
+\xf6\x37\x00\x03\x30\x00\x03\x90\x45\x31\x00\x03\x30\x00\x03\x30\
+\x00\x03\x30\x00\x03\x30\x00\x03\x30\x00\x03\x30\x00\x03\x30\x00\
+\x03\x30\x00\x03\x30\x00\x03\x30\x00\x03\x18\x10\x03\x30\x00\x03\
+\x30\x00\x03\x30\x00\x03\x30\x00\x03\x30\x00\x03\x4c\x83\xc1\x72\
+\xfd\xb9\xd3\x3e\xb1\x0c\x60\xfc\xe5\xe9\xba\x7a\xf3\x32\x6f\xe1\
+\xad\xcd\xca\x12\x00\xd1\x5f\xec\x95\x4e\xf1\xff\xcd\xd7\xd9\x07\
+\x70\x7b\x07\x67\x2d\x48\xab\xbb\x99\x06\x18\x2f\xee\x7c\xa8\x2b\
+\xf4\x33\x0b\xf0\xa9\x5d\xf6\x10\x5d\xab\x91\x4d\x80\x7e\xd5\x47\
+\xcc\x4a\xa3\xec\x01\x74\x5f\x91\x20\x27\xc8\x16\x80\x68\xe7\x91\
+\xa8\x1d\xca\x14\xc0\x73\x1e\xc9\xda\xa7\x2c\x01\xf4\x8a\x48\x58\
+\x8d\x32\x04\x30\xba\x47\x74\x7e\xb1\x5c\xb9\x68\xec\x34\x17\xed\
+\xc5\x71\xe3\xe7\x01\x65\x07\x40\x34\x7c\x28\xf3\x0a\x95\x1f\xbd\
+\x71\x66\x2f\x86\x0e\x8b\x50\x95\xaf\x75\x57\x59\xbe\x1a\x14\xfb\
+\x1e\xe4\x15\xaf\x77\x33\x7e\x39\xdc\x2f\x42\x9a\x53\xbb\xca\xfc\
+\x7c\xc0\x4e\x0b\xb2\xf2\x0b\x37\xf3\x13\x22\x93\x1b\xc8\x7a\xe9\
+\x5a\x30\x23\x74\x3e\x87\xa4\x87\x8e\x0d\x53\x62\xcd\x16\xc2\x73\
+\x76\x04\x65\x1f\xc0\xfd\x08\x49\xf7\x81\x0d\x93\xa2\xc1\x0b\xc2\
+\x3b\xea\x58\x31\x2b\x7c\x35\x47\x78\x97\x63\xb2\x01\xa0\xe7\x20\
+\xbc\x03\x22\x1b\x00\x9e\x5b\x08\xcd\xe9\x92\x15\x00\x3b\x08\x6f\
+\x3e\x20\x2b\x00\x1a\x08\x2f\x3f\x22\x2b\x00\x6e\x11\xde\xe3\x84\
+\x2c\x00\x90\xff\xff\x85\x09\x59\x00\x20\xdf\xff\xf3\x63\xb2\x02\
+\xe0\x3b\xc2\x9b\x8d\xc8\x0a\x80\x75\x0b\xa1\xf9\x87\x64\x05\xc0\
+\x95\x83\xf0\x3a\x64\x05\x40\x30\x47\x78\x75\xb2\x02\xc0\x7d\x44\
+\x78\xaf\xc2\x0e\x80\x2a\xc2\x73\x46\x64\x05\xc0\x02\x92\x16\x64\
+\x05\x40\xbf\x85\xf0\xca\x64\x05\xc0\x2a\x87\xf0\xfc\x91\x1d\x00\
+\x15\x48\x6a\x90\x15\x00\xdf\x20\xe9\xab\xb0\x02\x60\x35\x83\xa4\
+\x67\xb2\x02\x60\x03\x49\x2f\x64\x05\xc0\x37\xc8\xfa\x6c\x05\x80\
+\xfb\x00\x49\x45\xb2\x02\xe0\x1a\xb2\xda\x56\x00\x04\x3e\x24\xcd\
+\x5c\x2b\x00\x36\x90\xb5\x4f\x36\x00\x1c\x42\xda\xd0\x0a\x80\x1b\
+\xc8\x2a\x91\x0d\x00\x4b\x48\x3b\xb6\x02\xa0\x0c\x69\x81\x0d\x00\
+\x4b\x48\x7b\x25\x1b\x00\xee\x20\xed\xc0\x06\x80\xa1\x07\x69\xe7\
+\x36\x00\xd4\x21\xcd\x11\x16\x00\x4c\x1d\x48\x2b\x93\x05\x00\xc7\
+\x90\x77\x60\x03\x40\x01\xf2\x4e\x2c\x00\xe8\x43\xd1\xc4\x02\x80\
+\x0b\xc8\x9b\x53\xf6\x01\xc4\x1c\xf2\xca\x16\x00\xac\xa1\xe8\xc2\
+\x02\x80\x0a\x14\x35\x2d\x00\x38\x82\xa2\x5e\xf6\x01\x96\x50\x35\
+\x22\x69\xa3\x4e\xa3\x7a\x59\x9c\x3b\xbe\xe7\xcf\x72\x85\xb3\x8f\
+\x8d\xce\x20\x95\x00\xfb\x50\xe4\x09\x0a\xed\x43\xf3\x3e\x6c\xc3\
+\x71\xee\x76\xfa\xa9\x03\x28\x22\xe9\x28\x38\x6d\x96\x20\x2f\xdf\
+\x08\x52\x05\x10\x00\x48\x34\x19\x10\xd4\x1d\xa8\xf3\xca\xe7\x29\
+\x02\x68\x43\xd5\x1d\xfd\xab\x49\xbd\x85\x18\x95\x97\xa9\x01\xa8\
+\x42\xd5\x1e\xfd\x5d\xd3\x41\xcc\x36\x93\x94\x00\xe4\x13\xbc\xfa\
+\x3d\x7c\x45\xfc\x8e\x9e\x52\x01\x30\x49\xf0\xee\xff\xc2\x47\xa2\
+\xee\xa7\x29\x00\xe8\x42\x59\x9b\xde\x22\xb7\x82\xa4\x15\x3f\x98\
+\x0f\x70\x01\x65\x5d\x7a\x6b\xfc\x82\xe4\xcd\x96\xc6\x03\xfc\x82\
+\xb2\xf5\x1b\xc0\x6e\x0e\xef\xc9\x59\x9a\x0e\x70\x04\x65\x87\x6f\
+\xe7\xcb\x0e\xde\x97\xd3\x37\x1b\x60\x0c\x75\xbb\xf4\xa7\x2f\x3e\
+\xde\xdb\xd1\xae\xd1\x00\x6b\x20\xc6\xb5\x50\xcf\xc7\xfb\x2b\x4c\
+\x4d\x06\xd8\x81\xba\x31\x11\xd1\xd2\xc7\x36\x6d\x4c\x06\xa8\x40\
+\xdd\x8a\x88\x06\xa7\xd8\xae\x63\x83\x01\xce\xa0\x6e\x4a\x14\xcc\
+\xb1\x65\xfe\xc8\x5c\x80\x1c\xd4\xb9\xf4\xa9\x88\xad\xbb\x31\x16\
+\x40\x78\x50\x27\xc4\x25\x34\xd4\x35\x15\x60\x84\x88\x44\x0d\x3a\
+\xca\x09\x43\x01\xbe\x20\xa2\x05\xf4\xb4\x30\x14\xe0\x09\x11\xb5\
+\xa0\xa7\x07\x61\x26\xc0\x2d\x92\xe5\x5f\x1e\x3c\x1f\x06\x2b\xe1\
+\x8e\x07\x9d\xfd\x33\x0f\xf1\xfb\x6e\x26\xc0\x3e\x12\xd4\xba\xff\
+\x2c\xfe\xe2\x9b\x34\x0b\x88\xdb\xa3\x99\x00\x7b\x88\x9d\x57\x0d\
+\x1b\xcd\xbb\xb1\x09\xae\x8c\x04\xd8\x20\x6e\x85\x43\xd9\x1a\x63\
+\x2d\xc4\xaa\x6e\x24\xc0\x25\x62\xb6\x71\x49\xd6\x72\x86\x38\xcd\
+\x84\x89\x00\x8f\xd0\xf0\xf3\x8d\x0a\x88\xd3\x89\x89\x00\x0f\x88\
+\x55\x85\x94\x4d\x62\x09\x5c\x98\x08\x90\x43\x9c\x4a\x82\xd4\x8d\
+\xbf\x22\xba\x82\x89\x00\x33\xc4\xc8\x1f\xc6\x7d\xdf\x54\x5d\x60\
+\x20\xc0\x91\xae\x75\x81\x17\x88\xae\x6d\x20\x80\xaf\xed\x42\xe6\
+\x0e\x91\xd5\x0c\x04\x68\x69\xfb\xe1\x3e\x44\x5b\x96\x0c\x04\xd0\
+\x38\x7e\x37\x10\x95\x93\xce\x2d\xe0\x27\xc5\xcb\x9d\x21\xaa\xa1\
+\x79\x00\x0e\x22\x1b\xe8\xbb\xb2\xfc\x9c\xc6\x61\xf0\x6b\xa2\x47\
+\xce\xd5\x35\xcd\x03\xc8\xe9\x3c\x74\xd7\x10\xd1\xbe\x79\x00\x79\
+\x9d\xd3\x99\x7d\x44\x54\x31\x0f\xa0\x88\xa8\x02\x8d\x7f\xed\xd2\
+\x3c\x80\x57\x44\x34\xa7\x04\xfd\x03\x75\x05\xf3\x00\x7e\x21\xa2\
+\x32\x91\xbe\x7d\xe0\x21\x85\x33\x42\x35\x9d\xc7\xd4\xb9\x79\x00\
+\x75\xbd\x1f\x48\xf9\x0d\x65\xa7\xe6\x01\x34\x10\x51\x87\x92\xd4\
+\x84\xb2\x96\x79\x00\xdf\x11\xd1\x17\xd2\x78\x10\xf0\xcc\x03\x58\
+\x23\xa2\x5d\x4a\x92\x68\x41\x95\x6f\x1e\xc0\x15\x22\x1a\xeb\x7b\
+\xff\x0e\x98\x99\x07\x30\x41\x44\x2b\x4a\xd4\x7d\xda\x86\x41\x72\
+\xa0\xce\xd5\x79\xab\xad\x60\x20\xc0\x2b\xd4\x09\xd2\x38\x0c\xbc\
+\xa6\xf0\x21\x29\xad\x4f\x1e\xff\x32\x10\xa0\xa1\x77\x17\x38\x87\
+\xaa\xdf\x06\x02\x74\xa1\x6e\x4a\x89\x1a\xa6\x6d\x3e\x80\x86\x50\
+\x37\xd1\xf9\xe4\xed\xc2\x40\x00\xd1\xd2\x7a\x37\x67\x05\x55\x6b\
+\xe3\x00\xa2\x87\x81\x01\x25\xca\x85\xaa\x91\x89\x00\x75\x28\xeb\
+\x69\xbc\xd1\xe0\x09\x13\x01\x3a\x3a\xaf\x06\x49\x40\x51\x81\x4c\
+\x04\x08\xb4\xce\x64\x4f\xa1\xa8\x6a\x24\x00\xe5\x74\x8e\x5c\x2b\
+\x28\x5a\x98\x09\xf0\x1b\xaa\x36\x1a\x87\xc1\x81\x99\x00\x4d\xa8\
+\x7a\xa1\x44\x0d\x20\xcf\x27\x33\x01\x46\x3a\xa7\xf1\x7a\x90\xf7\
+\xcb\x50\x00\x2a\x40\xd5\x58\xdb\x98\x72\x9b\xca\x05\x14\xf0\x4d\
+\xdb\x92\x54\xc3\x74\x2e\xa1\x71\xa0\xeb\xb4\xaa\x48\xa6\x02\xd0\
+\x0c\x8a\x6e\xb4\x2d\x4b\x68\x2e\x40\x15\x8a\x1c\xa1\xe9\x6e\x73\
+\xdf\xec\x85\x94\xf4\xac\xa7\x38\xf5\x20\x2b\x4f\xe6\x02\xd0\x57\
+\x5d\x07\x81\x73\x48\x3b\x36\x19\xe0\x5a\xd7\xa9\xd0\x0e\x64\x39\
+\x53\x93\x01\x02\x0f\x8a\x76\x75\x1c\x03\xeb\x64\x32\x00\xdd\xe8\
+\xd9\x07\x84\x0f\x59\x43\xb3\x01\xba\x7a\x9e\x13\x5b\x2b\x06\x53\
+\xb3\x01\xd4\xa7\xc3\xdd\xad\xdf\x40\xf2\x06\xa6\x03\x3c\xeb\x78\
+\xc6\xd7\x75\x20\xe9\x23\x99\x0e\x40\x79\x28\x5a\x6e\xa9\xe8\x07\
+\xe6\x03\x3c\x69\xd8\x04\x8a\xf2\x69\x25\xf3\x01\x44\x7e\xeb\xa9\
+\xd1\x13\x48\xca\x7d\x32\x13\x40\x3d\x10\x24\xff\x17\x5e\x20\x69\
+\x4d\x69\x00\xa0\xff\x40\x51\x65\x8b\xa9\xb5\x3a\xa5\x03\x20\x70\
+\xb6\xda\x09\x82\x53\x84\x97\x77\x8d\x04\x50\xcf\xe6\x24\xff\xde\
+\xac\x28\x21\xbc\xd6\x21\xa5\x05\x80\x4a\x50\x34\x1b\xbd\xef\x1c\
+\xa8\x4d\xe9\x01\x18\x1d\x41\x51\x6e\xf0\x9e\x25\xd9\xf6\x29\x45\
+\x00\x74\x02\x55\x4e\x8f\x24\x89\x1a\x24\x6d\x28\x55\x00\x74\x0b\
+\x55\xde\xbe\xa0\xb0\xc6\x67\x90\x54\x72\x53\x06\x40\x35\x28\x2b\
+\x86\x0c\xe9\xe2\xd8\x81\xa4\xb3\x29\xa5\x0d\x80\x36\x50\x57\xea\
+\xfe\xfd\xa3\x7e\xda\xc9\x41\xd6\x8d\x4b\xe9\x03\x10\x51\x02\x70\
+\x2a\xed\xbe\xf8\x03\xb0\x3a\xff\x51\x6e\x41\xda\x46\x50\x0a\x01\
+\x48\x54\x11\x23\x27\x97\x9f\x3b\x50\x56\x13\x69\xfd\xf4\xf6\x35\
+\x34\xe4\x3f\xa7\xf8\xeb\xf3\x1d\x1f\xdb\x56\xd8\xa5\x14\x03\xd0\
+\x6e\x01\xdb\x55\x75\x29\xd5\x00\xe4\xfe\xf4\xf0\xfe\x0a\x3d\xa2\
+\x94\x03\x10\x2d\x1f\xf1\xce\xfc\x5b\x41\x19\x00\x20\x5a\xcc\xf0\
+\x8e\x5a\x1f\x03\xa2\x6c\x00\xd0\xf4\x36\x31\x81\xff\xdf\x80\x28\
+\x33\x00\x44\xee\xa2\x88\x04\xcd\xff\x59\x11\xa5\x0f\x40\xdd\xf9\
+\xde\x29\x62\xe5\x54\x7b\x44\x94\x3d\x00\x22\xf1\xad\x96\x43\x44\
+\xb9\x4a\x57\x10\xa5\x1a\x40\xdd\xb0\xbd\x57\x6c\x21\x34\xaf\xb0\
+\xf7\xf4\x21\x23\xdf\x1e\x57\x27\x76\x3b\xb7\xf5\xbb\x52\x61\xee\
+\xf8\x9e\xe7\xcc\x1f\x8a\xa5\x9b\xfa\xf1\xc9\x50\x98\xf0\xa1\xa5\
+\x6c\xc7\x00\x0c\xc0\x00\x0c\xc0\x00\x0c\xc0\x00\x0c\xc0\x00\x0c\
+\xc0\x00\x0c\xc0\x00\x0c\xc0\x00\x0c\xc0\x00\x0c\xc0\x00\x0c\xc0\
+\x00\x0c\xc0\x00\x0c\xc0\x00\x0c\xc0\x00\x0c\xc0\x00\x0c\xc0\x00\
+\x16\xc6\x00\x7f\x62\x00\x06\xb0\x37\x06\x60\x00\x06\x60\x00\x06\
+\xf8\x1f\xee\xa8\x2b\x99\x18\xa3\x27\x20\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\xa7\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\
+\x00\x00\x00\x9f\x50\x4c\x54\x45\xf8\x7c\x00\xf8\xfc\xf8\xf8\x88\
+\x10\xf8\xf8\xf0\xf8\x8c\x18\xf8\xa8\x50\xf8\xb0\x60\xf8\xc8\x90\
+\xf8\x80\x00\xf8\xf4\xe8\xf8\xdc\xb8\xf8\xe8\xd0\xf8\xb4\x68\xf8\
+\xc4\x88\xf8\xe0\xc0\xf8\x98\x30\xf8\x84\x08\xf8\xc0\x80\xf8\xf0\
+\xe0\xf8\xac\x58\xf8\xe4\xc8\xf8\xf8\xf8\xf8\xd0\xa0\xf8\xd4\xa8\
+\xf8\xec\xd8\xf8\x90\x20\xf8\xa0\x40\xf8\xa4\x48\xf8\xf0\xe8\xf8\
+\x9c\x38\xf8\xd4\xb0\xf8\xbc\x78\xf8\x84\x10\xf8\xb8\x78\xf8\xcc\
+\x98\xf8\xb0\x68\xf8\xb8\x70\xf8\xd8\xb8\xf8\x98\x38\xf8\x8c\x20\
+\xf8\xe4\xd0\xf8\x80\x08\xf8\xec\xe0\xf8\x94\x28\xf8\xa4\x50\xf8\
+\xd8\xb0\xf8\x94\x30\xf8\xb4\x70\xf8\xc8\x98\xf8\xf4\xf0\xf8\xe0\
+\xc8\xf8\xa8\x58\xf8\x88\x18\x03\x44\x9e\x16\x00\x00\x02\xc3\x49\
+\x44\x41\x54\x78\x5e\xed\xd6\x57\x6e\xdd\x40\x0c\x46\xe1\x9f\xea\
+\xed\xf6\xde\x5c\x4b\x7a\xcf\xfe\xd7\x16\x40\x08\x10\xc8\xc6\x8d\
+\xe4\x07\x23\xf1\xf0\x9c\x1d\xf0\xc3\x60\x48\x99\xf3\x04\x00\x00\
+\x00\x00\x00\x80\xc9\x61\x5d\x00\x00\x00\x00\xc0\x1c\x05\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x32\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\xca\xda\x35\x40\xb5\x28\x52\xbf\x00\xf3\
+\xd9\x4e\xd2\x1b\xaf\x00\x9b\x43\xa1\x36\x97\x00\xf5\x5d\x24\xc9\
+\x2b\x40\x99\x4f\x24\xb9\x05\xb8\x4f\x0b\xc9\x2d\x40\x7d\x9d\x48\
+\xf2\x06\xd0\x7d\xfa\x6e\x01\x2e\xd2\x42\x72\x0b\xf0\xbd\x89\x24\
+\x79\x05\xd8\xb6\x07\x8f\x57\x80\x32\x7f\x90\xe4\x15\x20\x5e\x1f\
+\x0a\xc9\x2b\xc0\xea\x22\x9d\x4a\xf2\x0a\x50\x65\x57\x92\xbc\x02\
+\x54\xb7\x91\x24\xaf\x00\xe3\xe6\xa7\x24\xaf\x00\x55\x3b\xbd\x57\
+\x80\x2a\x8b\x24\x39\x05\x88\x37\x8b\x2b\x49\x4e\x01\x8e\x37\x87\
+\x77\x92\x9c\x02\xd4\xb3\x53\x21\xc9\x27\x40\xfc\xe9\x36\x51\x9b\
+\x47\x80\xe5\x68\x5f\x48\xf2\x09\x50\xe7\x69\xa4\x36\x8f\x00\xdb\
+\x8f\xed\xf0\x7e\x01\x2a\x0d\xaa\x48\x9b\x24\x4c\x80\xb1\x06\x34\
+\xbd\x9b\x9b\x95\x51\x90\x00\x4b\xf5\x16\xcd\xca\xd6\xaa\x09\x12\
+\xe0\xbd\x7a\xda\xe5\xb1\xb5\xd9\x3a\x48\x80\x58\x7f\xed\xf3\xba\
+\xf3\x58\x02\x04\xb0\x48\xe7\xdb\xdf\x77\x16\x46\x98\x00\xa7\xf3\
+\x1f\xff\xd2\x3a\x95\x61\x02\x64\x67\xc6\xcf\xb6\xf6\xa8\x38\x4c\
+\x80\xfc\xdc\xde\x7b\x5a\x20\x00\xfd\x7b\x30\x19\x7d\x33\x73\x03\
+\x60\x53\x75\xdb\xdd\xac\xcc\x3c\x01\x1c\x3a\x00\x93\x8d\x99\xf9\
+\x02\xf8\xaa\x3f\xed\x2b\x33\x77\x00\x73\xfd\xae\x58\xbc\x35\xf3\
+\x04\xd0\xbd\x04\xa6\xcd\xd6\xcc\x27\x40\x2e\x29\xba\x2c\xcd\xbc\
+\x02\x94\x45\x32\x8a\xcd\xfc\x02\xd8\xd8\xcc\x5c\x03\xd8\xeb\x06\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x60\xe5\x1d\xe0\xa8\xde\xca\xa0\x01\xc6\xea\xad\x0e\
+\x1a\x60\xa4\xde\xd6\x41\x03\x9c\xd4\x5b\x16\x32\xc0\x58\xfd\x45\
+\xab\x80\x01\x26\x1a\x50\x1e\x2e\x40\xa6\x21\x5d\xcd\x03\x05\x88\
+\x17\x1a\xd6\x87\x63\x90\x00\x17\x3b\x0d\x2d\xa9\x82\x03\x58\xce\
+\x76\x7a\x4e\xfb\x4d\xfc\x3a\x01\x2e\x9f\x76\xdd\xa4\x93\xa9\x9e\
+\x5d\x31\xf9\xf1\xe5\xf2\x51\xa3\xff\x1e\x20\xd6\x8b\x16\xbd\x0c\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xd8\x01\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x0e\x03\xa0\x0d\x00\x00\xfc\x06\x00\x00\x00\x00\x00\
+\xc0\x2f\xab\x25\xe7\xf8\xca\xd9\x09\x7e\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x07\x0e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\
+\x00\x00\x00\x8d\x50\x4c\x54\x45\x78\xfc\x00\xf0\xfc\xe8\x80\xfc\
+\x08\x80\xfc\x00\xf8\xfc\xf0\xf8\xfc\xf8\x90\xfc\x28\x98\xfc\x38\
+\xa0\xfc\x40\xa8\xfc\x50\xa8\xfc\x58\xb0\xfc\x68\xb8\xfc\x70\xb8\
+\xfc\x78\xc0\xfc\x80\xc0\xfc\x88\xc8\xfc\x90\xd0\xfc\xa0\xd0\xfc\
+\xa8\xd8\xfc\xb0\xd8\xfc\xb8\xe0\xfc\xc0\xe0\xfc\xc8\xe8\xfc\xd0\
+\xe8\xfc\xd8\xf0\xfc\xe0\x88\xfc\x10\x88\xfc\x18\x90\xfc\x20\x98\
+\xfc\x30\xb0\xfc\x60\xc8\xfc\x98\xa0\xfc\x48\xe0\xfc\xd0\xb0\xfc\
+\x70\xc8\xfc\xa0\xf0\xfc\xf0\x98\xfc\x40\xd0\xfc\xb0\xe8\xfc\xe0\
+\xd8\xfc\xc0\x88\xfc\x20\x80\xfc\x10\xa8\xfc\x60\x90\xfc\x30\xc0\
+\xfc\x90\xa0\xfc\x50\x31\x3a\xb9\x29\x00\x00\x06\x3c\x49\x44\x41\
+\x54\x78\x5e\xed\xdd\x67\x73\xdc\x36\x10\x06\x60\x54\xf6\xde\xdb\
+\x35\x15\x77\xe7\xff\xff\xbc\x24\xf6\x38\x8a\xe6\x44\x91\x77\x22\
+\x66\x16\xdc\x7d\x3f\xcb\x33\xe4\x63\x10\x3c\xa2\x2d\xd3\xc8\x43\
+\x00\x04\x40\x00\x04\x40\x00\x5a\x33\x84\x79\x0d\x40\x00\x04\x40\
+\x00\x1a\x51\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\
+\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\
+\x00\x08\x80\x00\x3e\x16\x02\x20\x00\x02\x20\x00\x02\x20\x00\x02\
+\x20\x00\x02\x20\x00\x02\x20\x00\x65\x12\x40\x29\xf0\x00\x9f\x24\
+\x13\xe3\x74\x78\x3e\x07\xc7\x28\x4e\xb3\xc7\xa2\xac\x9a\xb6\xeb\
+\xf9\x2a\x17\xc5\xfb\xae\x6d\xea\xaa\x2c\xf2\xc7\xd3\xcf\x34\x89\
+\xa3\xf0\x18\xf8\x67\xcf\x3d\x38\xd3\x38\x08\xc9\x98\xf8\x0c\x1c\
+\xa0\x11\x6c\x2e\x52\x0c\xe3\xe4\x38\x07\xd7\x3b\x9f\xfd\x20\x38\
+\x86\x0f\xd1\xd5\xfd\x2d\xe7\x0c\x1c\x20\x62\x86\x33\x01\x07\x48\
+\x4c\x03\x84\xc0\x01\x32\xd3\x00\x05\x70\x80\xdc\x34\x00\x07\x0e\
+\x50\x19\x06\x70\x34\x70\x80\xc6\x30\x40\x00\x1d\xa0\x33\x0c\xf0\
+\x13\x3a\x00\x37\x0c\x50\x41\x07\xd0\x86\x01\x3e\x83\x07\x10\x46\
+\x01\xa4\x06\x0f\x30\x1a\x05\x18\xe0\x03\x38\x46\x01\x1c\xf8\x00\
+\xae\x51\x80\x03\x7c\x00\xcf\x28\x80\x0b\x1f\xc0\xc7\x0e\x70\xc4\
+\x0e\xf0\x80\x1d\x20\xc6\x0e\x90\x62\x7f\x0b\x64\x46\x01\x7e\xc0\
+\x07\xc8\xb1\xff\x10\x2a\x8c\x02\x4c\xf0\x01\x4a\xec\xdf\x02\x15\
+\xf6\xaf\xc1\x86\x19\x8d\x02\x0f\x70\xc1\xfe\x16\x68\x4d\x02\xc8\
+\x16\x3e\x40\x77\x35\x1f\xf8\x7b\x42\xf0\xbf\x19\xc1\x30\x8a\xe3\
+\x24\x4d\xb3\xd3\x29\x2f\x8a\xb2\xaa\xea\xe6\x9f\xd4\x5f\xaa\xb2\
+\x2c\xfe\x9d\x12\xcd\xb2\x34\x49\xe2\x38\x0a\xc3\xe3\xf7\xc0\xf7\
+\xcf\x9e\xe7\xba\x07\xc7\x99\xbe\x8e\xc3\x20\x12\x0d\x1f\xa0\x7f\
+\x05\x10\x6b\xa3\x81\x0f\x90\xe0\x03\xe0\xaf\x00\x52\xec\x00\x19\
+\x3e\x80\xa7\x57\x00\x27\x7c\x00\xea\x15\xc0\x23\x76\x80\x1c\x3b\
+\x40\x81\x1d\xa0\xc4\x0e\x50\x61\x07\xf8\x82\x1d\xa0\xc6\x0e\xd0\
+\x60\x07\x68\xb1\x03\x74\xd8\x01\x7a\xec\x00\x1c\x39\x00\x01\x28\
+\xec\x00\x1a\x39\x80\xc4\x0e\x20\x90\x03\x10\xc0\x80\x1d\x60\xc4\
+\x0e\x30\x61\x07\x70\xb0\x03\xfc\xc0\x0e\x70\xc0\x0e\xe0\x62\x07\
+\xf0\x30\x02\x2c\x6f\xf4\xe5\xf5\x29\x0e\x3c\xe7\xd7\x6e\x61\xf9\
+\x6d\x9c\x1c\xd7\x7f\x48\x8b\xfa\x69\x87\x00\xfe\x15\xc0\x25\xf3\
+\x27\x36\x93\xc9\x4f\x4a\xb5\x67\x00\x55\x04\x03\x5b\x88\x7c\x4e\
+\x2f\x3b\x9a\x1d\x0e\xfe\x7f\xf7\xbe\x60\xeb\x32\xc6\xdd\x5e\xd6\
+\x07\x1c\xff\x00\xd4\x47\xc1\x6e\x89\x7b\x52\xbb\x58\x22\x13\xfe\
+\x36\xc9\x1c\x76\x73\x86\x54\xed\x00\x20\xd2\x5a\xb7\x2f\xff\xf9\
+\x06\x08\x80\x2f\x93\x8b\xf5\x27\x97\xdd\x9f\xaf\xe5\x02\x00\xf8\
+\x95\xa2\xee\xc4\x3e\x96\x80\x5b\x07\x50\xb3\x4d\x33\x5c\x35\x02\
+\x74\xab\xc5\x63\xcb\x00\x3e\xb1\xad\x73\xe6\xfa\x25\x28\xb7\xcc\
+\x38\xdc\x26\x80\x8c\x19\x15\x40\xba\x6d\xce\xe9\xed\x01\x88\x99\
+\x11\x01\x65\x0d\x40\xc8\x8c\xc4\xb7\x06\x20\x60\x66\x92\xda\x02\
+\xe0\x1b\x02\x90\x95\x25\x00\x1e\x33\x94\x49\xd9\x01\x70\x60\xa6\
+\x12\xd9\x01\x30\x19\x03\x90\x17\x2b\x00\x06\x66\x2c\xcf\x56\x00\
+\x48\x66\x2e\xb5\x05\x00\x8a\x19\x8c\x67\x01\x40\xcf\x4c\xa6\x81\
+\x0f\xd0\xce\x74\x60\x87\x20\xc9\xab\xb6\x7f\xd2\x5a\xf3\xbe\xab\
+\x4e\x71\x70\x4f\x6f\x19\xc0\x07\xa8\xaf\x01\xc4\x39\x6d\xde\xb2\
+\xe2\x65\x38\xde\x08\x20\x14\x78\x80\x92\xbd\x8e\xf4\x0b\xa5\xe7\
+\xd3\x84\xe2\x26\x81\x5c\x6b\xab\x0e\x55\x1d\x13\xbe\x24\xa6\xb2\
+\xd1\x40\x37\x08\xe3\x58\xdd\xf1\xb4\xca\x4c\xa5\xeb\x5b\x81\xe4\
+\xda\x9a\x83\x95\x45\xba\x5a\x8d\xfb\xab\x05\x4a\xe8\x00\xd1\x7d\
+\x23\xfa\x8f\x6b\x1b\x41\x04\x1d\xa0\x0f\xe5\x5d\xc3\xf9\xed\xca\
+\x9e\xe0\x00\xbf\xbe\x40\x7b\xbe\x6b\x24\xbb\x3f\xac\x02\x90\x0a\
+\x3c\x80\xd6\x75\x7a\x0f\x9c\x5a\x27\xd0\xec\xb7\xc4\x06\x9f\xd6\
+\x00\xe4\xfb\x05\xd0\xdd\xc0\x96\x93\xc0\x06\x30\x7f\x0e\x59\x00\
+\x1b\xc0\xfc\x98\xba\xbb\x6b\x00\x35\x2e\x02\x38\xbb\x06\xd0\xb9\
+\xed\x35\x46\xcc\x0f\x2a\x0f\x66\x01\xe0\xf7\x83\x02\x36\x80\xf9\
+\x61\x75\xb9\x77\x80\x14\x7b\x0b\xe8\x17\x00\xc6\xbd\x03\x68\x17\
+\xf5\x6b\x70\xf9\x19\x70\x77\x0f\xd0\x00\x2f\xb6\x66\x3e\x02\xe3\
+\xb7\xc0\xfa\x15\x06\xf1\xfe\x01\x42\x8c\xe3\x01\xeb\x57\x1a\xb6\
+\xfb\x07\x28\xcd\xfe\x10\x84\x0f\xd0\xc2\xae\x36\x67\x3e\x9f\x2d\
+\xae\x36\x67\xbe\x5e\x5b\x86\x00\x40\xbd\x07\xd0\x21\x00\xd0\x0b\
+\x5d\x00\xea\x16\x10\x63\x00\xe8\xd9\x7c\x6a\x0c\x00\xdd\x7b\x03\
+\x82\x18\x00\xea\x79\x80\x10\x32\x40\xeb\x73\xe3\x43\xe3\x2d\x5c\
+\x00\x1e\xca\xad\x36\xb8\x25\x36\x2e\x94\x4c\xbf\x31\xc6\x04\x37\
+\x5c\xaf\xae\x80\x0a\xf0\x69\xda\x72\x41\xbb\x33\x3f\x1e\x0a\x03\
+\x60\x7e\x97\x8c\xec\x36\x00\x50\x72\x0e\x20\x05\x00\xb0\xd0\x66\
+\xff\x32\xb9\xf7\x76\x50\x50\x01\xf2\x4d\x0b\x43\x47\x73\x00\x27\
+\x0d\x15\xa0\xdf\x74\x63\xcf\xd7\xd9\xcf\x00\x00\x00\xcb\xf3\x79\
+\x91\xb1\x51\xf1\x12\x30\x40\xf8\x02\x20\x6b\x43\x43\xa2\x9e\x06\
+\x0c\x50\xb0\x97\x8c\xfc\x43\x00\x5c\xcc\x15\xd9\x82\x0c\xc0\xb7\
+\xdb\xe4\x9a\xce\xbe\x02\x21\x03\x68\x67\xab\x6b\xe5\xc3\xdc\x03\
+\x00\x06\x60\xf9\xc1\x95\xe5\xe6\xef\xc0\xa1\x07\x04\xb0\x7c\x6e\
+\x86\xb8\xfb\x79\xed\xe4\xdc\x47\x00\x70\x00\xfe\xfa\xc2\xc7\x6e\
+\xdb\x25\x52\x21\xfc\xfa\x02\x07\xb6\x85\x40\x34\xd7\x01\x40\x03\
+\x58\xbe\xf4\xb1\xdd\x6e\x24\xc4\x51\x16\x00\x94\x57\xdd\x56\x7d\
+\x33\x40\x25\xdf\x04\x18\x7b\x6d\x01\xc0\xd3\xd5\xc5\x8b\xfc\x46\
+\x80\x2f\x82\xbd\x15\x71\xd1\x30\x01\x96\xbb\xaf\xf0\xa6\xa6\x5b\
+\xc8\xb7\xef\xbf\xd2\x50\x01\x96\xfb\x2f\xa7\x59\x0f\x90\xcc\xdc\
+\x7f\xad\xe1\x02\x2c\x4f\xea\xcb\x68\x65\x23\xe8\x5d\xf6\x66\x86\
+\x46\xc3\x03\x58\xfe\x25\x70\xf3\xde\xc9\xb9\x9d\x93\x63\xa7\xa1\
+\x03\x2c\x2f\xf3\x9e\xb2\xa5\x56\x90\x4f\x73\xff\xb4\xd3\x16\x01\
+\x3c\xb0\xb9\x0c\x51\x33\x0f\xc0\x93\x71\xe9\x14\x39\xf8\x00\xcb\
+\xeb\xdc\xa7\xa8\x52\xfa\x3a\x5d\xf6\x2c\xe7\xd8\x64\x62\x59\x7d\
+\x01\xce\xde\x8f\x3c\x1c\xb3\xb2\xe5\x7f\xfe\xba\xc9\x93\xf3\xc0\
+\xe6\x33\x54\x1a\x00\x80\x81\xf3\x73\xa4\x18\xc6\x41\xb2\xa5\xb8\
+\xbd\xb6\x0e\xe0\xc8\x36\x8b\x48\x6d\xac\x2f\x70\xda\x0c\xc0\xeb\
+\xb4\x8d\x00\xed\x46\x00\x43\x6e\x6b\x7d\x01\xb1\x05\x80\x0c\xb9\
+\xb6\x15\xc0\xdb\xe0\xf6\xbf\x77\x16\xd7\x17\x88\x3f\x0c\xe0\xb7\
+\x56\x57\x98\x28\x3e\x06\x20\x83\x8b\xe5\x25\x36\xfa\x8f\x00\x8c\
+\x09\xb7\xbf\xc8\x4a\x34\xdc\x09\x20\xcf\xe5\x3e\xaa\xcc\xa8\xdc\
+\xbd\xe3\xee\xbd\xac\xdf\x51\x99\x9d\x2e\x71\x6e\x01\x10\x7e\xce\
+\x6d\xab\x33\xb4\x6c\x90\x79\x72\x0d\xc0\x70\x4e\x2a\x65\x67\xa1\
+\xa5\xe5\xd4\xa9\x3f\xbd\xa3\x30\xb8\x61\xde\xc1\xaa\x34\x65\x20\
+\xea\x52\xa4\x91\xef\x1d\xa6\x41\x08\xc9\xa4\x18\x27\xc7\xf5\xfc\
+\x28\x2b\x5b\x05\xb0\xd4\xd6\xbe\x43\x00\x04\x40\x00\x04\x40\x00\
+\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\
+\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\
+\x00\x04\x40\x00\x04\x40\x00\x08\x43\x00\xbf\x42\x00\x04\x80\x37\
+\x04\x40\x00\x04\x40\x00\x04\xf0\x37\x14\x0d\x3b\x00\xae\xfd\xb0\
+\xa7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\xc6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\
+\x00\x00\x00\xa5\x50\x4c\x54\x45\x00\x7c\xf8\xf8\xfc\xf8\x00\x80\
+\xf8\x40\xa0\xf8\xc0\xe0\xf8\xc8\xe4\xf8\xd8\xec\xf8\xe8\xf4\xf8\
+\xf0\xf8\xf8\x10\x88\xf8\xe0\xf0\xf8\xa0\xd0\xf8\xb8\xdc\xf8\x18\
+\x8c\xf8\x68\xb4\xf8\x78\xbc\xf8\x80\xc0\xf8\x50\xa8\xf8\xb0\xd8\
+\xf8\x58\xac\xf8\x60\xb0\xf8\xd0\xe8\xf8\x28\x94\xf8\x30\x98\xf8\
+\x38\x9c\xf8\x08\x84\xf8\x48\xa4\xf8\x88\xc4\xf8\x98\xcc\xf8\x08\
+\x80\xf8\x70\xb8\xf8\xa8\xd4\xf8\x50\xa4\xf8\x38\x98\xf8\x20\x90\
+\xf8\x18\x88\xf8\x90\xc8\xf8\xf8\xf8\xf8\x10\x84\xf8\xa0\xcc\xf8\
+\x70\xb4\xf8\xe0\xec\xf8\xb8\xd8\xf8\x80\xbc\xf8\xf0\xf4\xf8\xc0\
+\xdc\xf8\x68\xb0\xf8\x58\xa8\xf8\x28\x90\xf8\xc8\xe0\xf8\x40\x9c\
+\xf8\xd0\xe4\xf8\x90\xc4\xf8\xd8\xe8\xf8\x30\x94\xf8\x65\x60\x50\
+\xf2\x00\x00\x03\xdc\x49\x44\x41\x54\x78\x5e\xed\xdd\xd7\x8a\x23\
+\x59\x10\x84\xe1\x38\xa7\xbc\x93\xf7\xb6\xdd\xf8\x59\x6f\xde\xff\
+\xd1\xf6\x66\xa1\x33\x6f\x4a\xbd\x2c\x34\x9a\x13\xf1\x3f\x80\x2e\
+\xbe\x02\x51\x91\x08\x84\x40\x1e\x04\x20\x00\x01\x08\x40\x00\x01\
+\x84\x79\x00\x01\x08\x40\x00\x81\x28\x01\x08\x40\x00\x02\x10\x80\
+\x00\x04\x20\x00\x01\x08\x40\x00\x02\x10\x80\x00\x04\x20\x00\x01\
+\x08\x40\x00\x02\x10\x80\x00\xee\x21\x01\x08\x40\x00\x02\x10\x80\
+\x00\x04\x20\x00\x01\x7c\xe9\x26\xdb\x1d\x29\x40\x9d\x1f\xe7\x03\
+\x00\x0c\x84\x00\x65\x37\xd9\x46\xfc\xdb\x9e\x01\xc0\x3f\xf8\x67\
+\xb8\x28\x00\xfc\x83\x67\x01\xf0\x0f\xfe\xa1\x81\x89\x09\xa0\x35\
+\x0f\x9e\x11\xa0\x1a\x60\x22\x04\x58\x82\x1b\xe0\x0a\x6e\x80\xaa\
+\x21\x07\x98\x83\x1b\xa0\x03\x37\x40\xdb\x90\x03\x1c\xc0\x0d\xd0\
+\x81\x1b\xa0\xfd\x48\x0e\x70\x00\x37\x40\x07\x6e\x80\xb6\x21\x07\
+\x78\x00\x37\x40\x07\x6e\x80\xaa\xa1\x06\xf0\x1b\x20\x12\x02\x5c\
+\x61\xba\xd0\x01\xf8\x2b\xd0\x53\xcd\x07\xb0\x82\xa9\x0f\x74\x00\
+\x3d\x4c\xab\x40\x07\x50\x3f\x19\x80\xa6\xe2\x03\xf8\x0c\x53\x17\
+\xe8\x00\x7e\x8b\x06\x20\x0b\x7c\x00\x1b\xbc\x16\x4b\x3e\x80\x19\
+\x4c\xd3\x40\x07\x50\x9e\xdd\x2b\x00\x1f\x40\x06\xd3\x22\xd0\x01\
+\x9c\x60\x3a\x04\x36\x00\x3f\x02\xcf\x25\x1f\xc0\x12\xa6\x59\xa0\
+\x03\xe8\xe1\x46\x10\x1b\x80\x7f\x07\xc6\xd7\x40\x07\x30\x85\x69\
+\x1e\xe8\x00\xfe\x8a\x06\x60\xdf\xf2\x01\x64\x30\x1d\x03\x1d\x40\
+\x07\xd3\x26\xd0\x01\xf8\x3b\x70\xce\x07\x30\xf1\x67\x20\x3a\x80\
+\x22\xba\x33\x10\x1f\xc0\x16\xa6\x53\xa0\x03\x38\xc1\xb4\x0d\x6c\
+\x00\x7e\x04\xc5\x82\x0f\xe0\x67\x98\x26\x81\x00\x60\xf4\x1b\x90\
+\x0f\x60\xeb\x0f\xe1\x74\x00\x9f\x60\x7a\x0c\x74\x00\xf5\x33\x4c\
+\x39\x1f\xc0\x05\xa6\x2c\xd0\x01\x94\x11\xa6\x82\x0f\xe0\xe0\xcf\
+\x20\x74\x00\x0b\x98\x62\xc9\x07\xf0\xab\x5f\x81\x74\x00\x2f\x30\
+\x9d\x5b\x3a\x00\x7f\x06\xb9\x04\x3a\x80\x0b\x4c\x1f\x2b\x3a\x80\
+\x32\xfa\x43\x28\x1d\xc0\x1c\xa6\xa1\xa6\x03\xc8\x61\x3b\x05\x3a\
+\x80\x2d\x4c\x4f\x81\x0e\xa0\x83\xed\x4a\x07\xf0\xe1\xc9\x1f\x02\
+\xe9\x00\xfe\x84\xad\xa7\x03\xf8\xde\xf8\x19\x4c\x07\x30\x85\xad\
+\xa0\x03\x68\xcf\x7e\x06\xd3\x01\xac\xfc\x0c\xa6\x03\x28\xa3\x9f\
+\xc1\x74\x00\xbf\xf8\x19\x4c\x07\xf0\x07\xfc\x0c\xa6\x03\x38\xf8\
+\x19\x4c\x07\x90\xc3\xcf\x60\x3a\x80\x9d\x9f\xc1\x74\x00\x3d\xfc\
+\x0c\xa6\x03\xd8\xf9\x19\x4c\x07\xd0\xc3\x76\xe5\x03\xd8\xfa\x19\
+\x4c\x07\xb0\x80\xad\xe7\x03\xd8\xfa\x19\x4c\x07\xb0\x80\xad\xe0\
+\x03\x78\xf4\x33\x98\x0e\xa0\x87\x6d\xcd\x07\xf0\x3b\x4c\x0f\x81\
+\x0e\x20\x87\xad\xe0\x03\xc8\xfc\x25\x94\x0e\xa0\x80\xed\x27\x3e\
+\x80\xb9\x7f\x09\xa4\x03\x58\x47\x98\xae\x7c\x00\x2b\x3f\x03\xe9\
+\x00\xda\x08\xd3\x0b\x1f\xc0\x05\xa6\x7d\x4d\x07\x50\xed\xfd\x29\
+\x98\x0e\x60\x06\x53\x2c\xe9\x00\x3e\x3c\xfb\x19\x44\x07\xf0\x09\
+\xb6\x9c\x0f\x60\x03\xd3\x2e\xd0\x01\xf4\xb0\x5d\xf9\x00\x0e\xfe\
+\x16\x4e\x07\xb0\x86\xed\xc4\x07\xb0\x82\x69\x08\x74\x00\xfe\x25\
+\xe8\xc4\x07\x70\x84\x69\x08\x7c\x00\x03\xde\xb5\xf2\xde\x00\xae\
+\x78\xdf\xfa\x7b\x03\xc8\xc8\x01\xd6\x20\x07\x98\x90\x03\xd4\x7b\
+\x72\x80\x17\x90\x03\x6c\xc8\x01\x72\x90\x03\x2c\xc9\x01\xaa\x48\
+\x0e\xb0\x06\x39\x40\x88\xec\x00\x7f\xeb\x4b\x90\x1c\xe0\xc8\x0e\
+\xd0\xb3\x03\xb4\xec\x00\xa1\x61\x07\xc8\xd8\x01\x3e\x53\x03\xfc\
+\xff\xf8\xfe\x68\x49\x00\x02\x10\x80\x00\x04\x20\x00\x01\x08\x40\
+\x00\x02\x10\x80\x00\x04\x20\x80\x1a\xa3\xd5\xc9\x03\xb4\x18\xad\
+\x4a\x1e\xa0\xc0\x68\x65\xf2\x00\x0b\x8c\x96\x27\x0f\x70\xc4\x68\
+\x5d\xf2\x00\x4b\x8c\x36\x4d\x1e\x60\xc0\x68\x59\xea\x00\x6b\x8c\
+\xb7\x4f\x1d\xe0\x1b\x6e\x94\x27\x0e\x30\xe0\x46\xab\xb4\x01\x4e\
+\xb8\xd5\xbe\x4a\x19\xa0\x1a\x70\xb3\x69\xca\x00\x4b\xdc\x2e\x96\
+\xe9\x02\xcc\xf0\x96\x36\x75\xaa\x00\x17\xbc\xad\xac\x4e\x12\x60\
+\xbd\xc3\x5b\xdb\x14\xc9\x01\xd4\x8b\x79\xc4\xdb\x8b\xcb\xfc\x07\
+\x06\x98\x4d\x7d\xd3\xcb\xf2\x31\xe2\xbf\xd6\x64\x93\xd7\x4f\x28\
+\x7f\x28\x80\x78\x97\x3f\x11\xf1\x00\x02\x10\x80\x00\x04\x20\x00\
+\x01\x08\x40\x00\x69\x27\x00\x01\x08\x40\x00\x02\x10\x80\x00\x04\
+\x20\x00\x01\x08\x40\x00\x02\x10\x80\x00\x04\x20\x00\x01\x08\x40\
+\x00\x02\x10\x80\x00\x04\x20\x00\x01\x08\x40\x00\x02\x10\x80\x00\
+\xc8\x32\x00\x02\x10\x80\x00\xa8\x13\x80\x00\xa8\x13\x80\x00\xfe\
+\x01\x16\xa0\xe8\xd8\xab\x02\x68\x83\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x08\x45\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x01\x00\x00\x00\x01\x00\x08\x03\x00\x00\x00\x6b\xac\x58\x54\
+\x00\x00\x00\xed\x50\x4c\x54\x45\x78\x00\xf8\xf8\xfc\xf8\x80\x08\
+\xf8\xf8\xf4\xf8\xf8\xf8\xf8\x80\x00\xf8\x80\x0c\xf8\x80\x04\xf8\
+\xf0\xe8\xf8\xa8\x58\xf8\xe8\xdc\xf8\xe8\xd4\xf8\xf0\xec\xf8\x90\
+\x2c\xf8\xa0\x4c\xf8\xa8\x54\xf8\x90\x28\xf8\xa8\x5c\xf8\xc0\x84\
+\xf8\xc0\x8c\xf8\xc8\x90\xf8\xc8\x9c\xf8\xd0\xa4\xf8\xd0\xac\xf8\
+\xd8\xb4\xf8\xd8\xbc\xf8\xe0\xc0\xf8\xe0\xcc\xf8\x90\x24\xf8\xe8\
+\xd8\xf8\xf0\xe4\xf8\x88\x10\xf8\x88\x18\xf8\xf8\xf0\xf8\x88\x1c\
+\xf8\x90\x20\xf8\xb8\x7c\xf8\x98\x3c\xf8\xb0\x64\xf8\xe0\xc8\xf8\
+\x98\x34\xf8\xc8\x94\xf8\x98\x30\xf8\xb0\x6c\xf8\xd0\xa8\xf8\xd8\
+\xb0\xf8\xb0\x60\xf8\xb8\x74\xf8\xd8\xb8\xf8\xb8\x78\xf8\xa0\x48\
+\xf8\xc0\x80\xf8\xe8\xd0\xf8\xc0\x88\xf8\xa0\x44\xf8\xc8\x98\xf8\
+\xf0\xe0\xf8\x98\x38\xf8\xe0\xc4\xf8\xb0\x68\xf8\xf0\xf0\xf8\xd0\
+\xa0\xf8\xb0\x70\xf8\xb8\x70\xf8\x88\x14\xf8\xb8\x80\xf8\x88\x20\
+\xf8\xd0\xb0\xf8\xe8\xe0\xf8\xd8\xc0\xf8\xc0\x90\xf8\xa8\x50\xf8\
+\x90\x30\xf8\xe0\xd0\xf8\x98\x40\xf8\xa8\x60\xf8\xc8\xa0\xf8\xa0\
+\x50\xf8\xa0\x40\xf8\x19\x22\x9d\x39\x00\x00\x07\x13\x49\x44\x41\
+\x54\x78\x5e\xed\xdd\x85\x92\xb3\xe8\x12\xc7\xe1\x7f\xa3\x71\x77\
+\x77\x19\x77\xb7\xcf\x75\xf7\xfe\x2f\xe7\x54\xed\xf9\x6a\x76\x33\
+\x48\x84\x77\xaa\x68\xe8\xdf\x1d\xe4\x09\x81\xd0\xc0\x0b\x28\xe6\
+\x41\x00\x04\x40\x00\x04\x40\x00\x08\x31\x6c\x15\x40\x00\x04\x40\
+\x00\x28\x46\x09\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\
+\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\
+\x00\x08\x80\x00\x28\x4f\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\
+\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\x40\x00\x04\xc0\x48\xd7\
+\xcb\x4f\xf9\x9f\xd9\x51\x5f\xb3\x61\x5b\x2f\xa3\xce\x34\xff\x5c\
+\x3e\x48\x1b\x71\x00\x48\x5f\x1f\x7d\xb7\xe1\x9e\xbd\x57\x5c\x76\
+\xa3\x0c\x30\xac\x15\x07\x58\xd7\x20\xf9\xf8\x10\x49\x00\xbd\x76\
+\x66\x63\xb3\xec\xbf\x0e\xf4\xa8\x01\xcc\x8f\x34\x6c\x93\xf5\x9c\
+\x8a\x10\x80\xf1\x7b\x0f\x5b\x67\xe6\xe7\x11\x01\x78\x28\xbd\x60\
+\xb7\x92\xa9\x08\x00\x64\x26\x16\x76\xce\x7e\x1e\x32\x07\x78\x98\
+\x58\x08\xd4\xb8\xc5\x19\x40\x2f\xf7\x11\x34\xf3\x49\x67\x0b\x50\
+\x1b\x41\x45\xb7\x09\x9e\x00\x99\x05\x14\x35\xba\x60\x09\x70\x08\
+\x65\x69\x2d\x8e\x00\x13\xa8\xcb\xba\x63\x08\x70\x06\x85\x59\x6d\
+\x7e\x00\x7d\xa8\x6c\x90\xe0\x06\x90\x82\xda\xa6\x06\x33\x80\x1a\
+\x14\x77\xcc\x0c\xe0\x19\x8a\x33\xe7\xbc\x00\x6e\xa1\xba\x05\x2b\
+\x00\x43\x83\xf2\x96\x9c\x00\x7e\x40\x7d\x03\x83\x11\xc0\x35\xd4\
+\x87\x47\x46\x00\x33\xa8\x0f\x59\x46\x00\x59\xbc\x47\x73\x36\x00\
+\xba\x09\x8f\xcc\x42\xfe\xc3\x75\xe3\xae\x9d\x4e\xb7\x5b\xf5\xe5\
+\x69\xee\x23\xb6\xe8\x94\x0d\x40\x0b\xae\x8d\x9e\x1a\x8e\x19\x57\
+\xe2\x60\xf6\x82\x0d\x2b\xb0\x01\x28\xbb\x8e\x79\x9b\xe4\x9e\xd1\
+\xc8\x61\xb3\x52\x5c\x00\x92\x70\x94\xec\x92\x4f\xe9\x3c\x36\xa9\
+\xce\x05\x60\x8c\x37\x15\x5a\xb4\xa6\x66\x07\xeb\x9b\x30\x01\x48\
+\xe0\x4d\x33\x9d\xd6\x36\x2c\x62\x6d\x39\x26\x00\x0d\xac\x64\x56\
+\x69\xa3\x4a\x58\xd7\x77\x26\x00\xe7\x2b\x00\x76\x83\x36\xac\x82\
+\x35\x8d\x19\x00\x38\xc6\x61\xe6\x27\xda\xb8\x63\xf8\xd7\x67\x02\
+\xb0\x72\x60\xaf\xd2\x16\xfd\x84\x6f\x26\x0f\x80\xcf\xf8\x4f\x33\
+\xda\xa6\x94\x05\xbf\x34\x1e\x00\x07\xf8\xb7\xac\x1e\x60\xf7\xc1\
+\xf5\x27\x70\x8c\xd7\xcc\x36\x6d\xd7\xb0\x0f\x9f\x46\x3c\x00\xa6\
+\x78\xed\x58\xed\x30\x71\xca\x03\x40\x7b\x05\xe8\x3f\xd0\xb6\x5d\
+\xc0\xa7\x24\x03\x80\x95\x8f\xf0\x35\xd0\xdf\x68\x67\xe7\x2c\x00\
+\xaa\xc1\xa6\x78\x33\x78\xd7\x60\x01\x70\xff\x0a\x50\x52\x3d\x4e\
+\x4c\xb0\x00\xd8\xc3\x9f\xb4\x0c\xed\xd0\x17\x78\xb6\x47\x1c\x00\
+\x74\x1b\x7f\xfa\x45\xbb\x74\x03\xcf\x26\x2c\x00\xee\xf0\x27\xb4\
+\x68\x97\x32\xf0\xec\x07\x0b\x80\x4a\xc0\x53\x37\x03\x5e\x2d\x88\
+\x05\x40\x32\xe0\xf5\x5c\x1d\x5e\x55\x79\x00\x74\x02\x4e\xf1\x13\
+\xf0\x68\x64\xf0\x00\xf8\x5d\xfd\x7f\xbf\x69\xb7\xba\xbc\x2e\x8e\
+\xaa\xaf\x01\xf7\x0a\x46\x4c\x00\x2a\x70\xef\x0b\xc5\x04\xe0\x08\
+\xae\xcd\x28\x2e\x00\x63\xb8\x55\xd0\xe3\x02\x90\x82\x5b\xda\x05\
+\xc5\x05\xe0\x12\x2e\x99\x87\x14\x1b\x80\x02\x5c\xfa\x4a\xb1\x01\
+\x68\xc2\xa5\x12\xc5\x07\x60\x1a\x68\x0e\xc4\x1f\xe0\x10\x8e\xcc\
+\x25\xc5\x07\xe0\x61\x84\xb7\x69\x75\x8a\x11\x40\x11\x6f\xfb\xd8\
+\xa6\x18\x01\x94\xf1\xb6\xab\x0c\xc5\x08\xa0\x6e\x62\x35\xbb\x4c\
+\x14\x23\x80\x9a\x89\xd5\x0a\x3f\x28\x4e\x00\x25\x13\x2b\xd9\x1f\
+\x0c\x8a\x11\x40\x22\x87\xd5\xa6\x69\xa2\x18\x01\x54\xfb\x58\x69\
+\x54\x23\x8a\x11\x40\x3d\x8b\x95\xb4\x89\x4e\xf1\x01\x48\x94\x0b\
+\x58\xc9\xde\x4f\x10\xc5\x05\x20\x5d\xbe\xb2\x1d\xcf\xcc\xd7\xdb\
+\x99\x88\x02\x64\x12\x7f\xea\xa5\xd2\x77\xf5\xf2\xfe\xd4\x82\x47\
+\xfd\x45\xb1\xd4\xe8\x45\x0d\x20\x63\x62\xbb\x46\xc9\xeb\x9b\x28\
+\x01\xd4\xb1\x43\x7b\x97\xbd\xc8\x00\xcc\xb0\x53\x66\xfe\x2e\x22\
+\x00\x1f\xb1\x6b\x57\xf3\x28\x00\x74\x11\xa0\xe4\x0d\x7f\x80\x25\
+\x82\x64\x55\xd9\x03\xe4\x10\xac\x6f\x43\xde\x00\x86\x85\x80\x75\
+\xd2\xac\x01\x5a\x08\x5c\xff\x8e\x33\xc0\x04\xc1\xd3\x4e\x18\x03\
+\x2c\xa0\x20\xad\xc9\x16\x20\x63\x42\x45\x56\x9a\x2b\xc0\x01\xd4\
+\x34\xce\x30\x05\x98\x41\x51\x39\xa6\x00\x23\xa8\xea\x9a\x25\x40\
+\x17\xca\xb2\x7a\x1c\x01\x2a\x58\xcd\xb4\xb1\x73\x45\x8e\x00\x47\
+\x00\x80\x71\xee\x78\x79\x38\x4f\x65\x74\x22\x22\x3d\xd1\x6d\x56\
+\x27\xb9\x01\xb6\xae\xcd\x10\xc0\x38\x9d\x7e\x38\x79\x20\xb7\x7a\
+\x8f\x79\x0b\x5b\x95\x67\x08\xe0\x9f\xf1\xe9\xcc\xc4\xe6\x99\x29\
+\xf6\x00\xce\x52\x47\x5b\x10\x9c\x46\x10\x80\xa8\xfb\x0d\x9b\x36\
+\x88\x24\x00\x51\xfd\x05\x1b\xd6\x8a\x26\x00\x25\xae\xb0\x59\xc7\
+\x11\x05\x20\x63\x1f\x1b\xf5\x3d\x66\x77\x8a\x3a\xcb\x44\x16\x80\
+\xce\xb1\x49\xcd\xe8\x02\xd0\x3d\x36\xa8\x1c\x61\x00\xe3\x16\xeb\
+\xbb\x8f\x30\x00\xf5\x2c\xac\xed\x8a\x17\x80\xfa\x4b\x28\x59\x5e\
+\x00\xea\x07\xa8\x83\x68\x03\x34\xb1\x2e\x8b\x17\x80\xfa\x4d\xc0\
+\x8e\x38\x40\x1d\x6b\x32\x23\x0e\x60\xf4\xe1\x5f\x9f\x17\x80\xfa\
+\x29\xfa\x38\xea\x00\x27\xf0\x6f\x2f\xea\x00\x43\x13\xbe\xfd\xcd\
+\x0b\x40\xfd\x71\xe0\x5b\xe4\x01\xf6\xa3\x7a\x2e\xa0\x68\x71\xc5\
+\x65\xe4\x01\x1a\xf0\xed\x2e\xf2\x00\x69\xf8\x65\xea\x91\x07\xe8\
+\xc1\xaf\x02\x45\x1e\xe0\x01\x7e\x25\xa3\x0f\x60\xc0\xaf\x4a\xf4\
+\x01\x74\xf8\x75\x13\x5a\x80\xcc\x61\x89\x94\x94\x80\x4f\x0b\x0a\
+\x25\x40\xe6\xd3\xf3\x9e\x09\x34\xde\xff\x4d\x4d\xa5\x30\x02\x9c\
+\x66\x4d\x95\x5f\xcf\x1c\x3e\x75\xc3\x08\x30\xc5\x9f\x70\xf2\xde\
+\xb7\xd5\x15\x28\x8c\x00\x4f\xaf\x00\xb7\xa4\xa0\x12\xbc\xab\x84\
+\x12\xa0\x86\xd7\x0e\x29\x78\xbf\xe0\x59\x5f\x0f\x25\x40\x5a\xed\
+\xd0\xbe\x03\xcf\x26\x14\x4a\x00\xd2\xf0\xda\xe3\x7b\x1e\x05\xed\
+\x5e\x48\x01\x6e\xf1\xda\x48\x7f\xc7\xb1\xf0\x8c\x42\x0a\x70\xaf\
+\x72\x2b\x2d\xc2\x2b\x3b\x15\x56\x80\x6b\xfc\x9b\xf6\x99\x02\xa5\
+\x5b\x3e\x7b\x80\xb0\x02\xcc\x15\xde\xd3\x5d\x87\x57\x23\x3d\x94\
+\x00\xce\xf7\x6b\xd5\x28\x48\x3f\xe1\x55\x9d\x42\x09\xe0\x3c\x72\
+\xf5\x13\xb4\x7b\x6d\x78\x75\x45\x21\x06\xc8\xe3\xbf\x9d\xd1\xee\
+\xe5\xe1\x91\xd5\x0d\x33\xc0\x07\xac\x74\xa9\xfe\x09\x3b\x1c\x50\
+\x98\x01\xea\x58\xc9\x6c\x06\x5c\x9e\xdd\xd9\x3d\x85\x1a\xa0\xab\
+\xe8\x09\xaf\x4b\x78\xb4\xa7\x87\x1b\xc0\xb0\xb1\xda\xc7\x1b\xda\
+\xa1\xb9\x0d\xf7\xac\x14\x85\x1b\x80\xb2\x78\x53\xa7\x47\x5b\x97\
+\x19\xc3\x3d\xbb\x41\x61\x07\x48\xc2\x21\xf0\x99\xb6\x4c\xbf\x85\
+\x7b\x66\x8d\x42\x0f\x50\x82\xa3\xc1\x05\x6d\x95\x91\x83\x47\x4b\
+\x0a\x3f\x40\x1d\xce\xac\x4f\xb4\x45\xc3\x2b\xef\x39\x28\x03\x80\
+\x2e\xdc\xda\xd7\x69\xd3\x7a\x0b\x78\x74\x4c\x1c\x00\xc8\x86\x5b\
+\x9d\x2f\xb4\x59\x8d\x17\x78\x74\x49\x3c\x00\xb2\x70\x2f\xf9\x99\
+\xd6\x37\x7c\x82\x47\x76\x8d\x98\x00\x24\xe1\x91\xbd\x7f\x43\x6b\
+\x7a\x1c\xc0\x23\xab\x49\x5c\x00\x4a\xf0\xcc\x4e\xde\x91\x77\x46\
+\xb5\x00\xaf\x46\x17\xc4\x06\xa0\x0e\xbf\x3a\xe7\x69\x72\xad\x7d\
+\x3c\x80\x67\x67\x09\xe2\x03\xd0\xc5\x9a\xc6\xb3\xc7\x2e\xad\xd4\
+\x3b\xd8\xef\xc0\x3b\xfb\x2b\xaf\xc5\xd4\x6c\xac\x4f\xdb\xcb\x3f\
+\x95\x96\xd7\xd7\x95\xd2\x69\xf2\xf6\x05\xbe\x75\xda\xc4\x0b\x20\
+\x0b\xa5\x1d\x0d\x89\x19\x40\x12\x0a\xcb\xb6\x88\xb8\x01\x94\xa0\
+\x2c\xab\xc2\x71\x5d\xe1\x43\xa8\xaa\x98\x20\x62\x08\x90\x82\x9a\
+\xbe\xb5\xb9\x2e\xaa\xaa\x21\x78\x66\xf2\x82\x88\x2b\xc0\x02\x41\
+\x33\x8b\x5d\x22\xbe\x00\x33\x04\xab\x73\xd9\x23\xe2\x0c\x40\x27\
+\x7f\x99\xd8\x35\xed\x57\x8b\x88\x98\x03\x10\xf5\xce\x0b\xd8\x21\
+\x2d\x57\x1d\x12\x31\x05\x70\x9e\xdd\x8c\xb1\x55\xe3\xfd\x13\x9d\
+\x88\x58\x03\x38\x57\x0d\xd7\xb0\x49\x66\xa1\x58\x49\x93\x23\x7e\
+\x00\xce\x8c\x76\x25\x99\xf5\x53\xd0\x3a\xf9\xcb\xe6\x90\x1c\x71\
+\x06\x70\x96\x6a\x5c\x4f\x8e\xce\xa6\xd9\x51\xdf\xd2\x6c\xd8\xd6\
+\x60\x9c\x5d\xfc\x9d\xbb\xbf\x3c\x98\xf7\xc8\x11\x03\x00\xee\x09\
+\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\
+\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\
+\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x80\x00\x08\x40\x0c\x13\
+\x80\x7f\x12\x00\x01\x88\x6f\x02\x20\x00\x02\x20\x00\x02\xf0\x3f\
+\x0e\x78\x2e\x0b\xe6\xfc\x06\xa8\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x09\
+\x0a\x85\xa4\xa7\
+\x00\x73\
+\x00\x69\x00\x64\x00\x65\x00\x32\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0a\x89\xa4\xa7\
+\x00\x73\
+\x00\x69\x00\x64\x00\x65\x00\x36\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0a\x84\xa4\xa7\
+\x00\x73\
+\x00\x69\x00\x64\x00\x65\x00\x31\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0a\x88\xa4\xa7\
+\x00\x73\
+\x00\x69\x00\x64\x00\x65\x00\x35\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0a\x87\xa4\xa7\
+\x00\x73\
+\x00\x69\x00\x64\x00\x65\x00\x34\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0a\x86\xa4\xa7\
+\x00\x73\
+\x00\x69\x00\x64\x00\x65\x00\x33\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00\x02\
+\x00\x00\x00\x42\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x05\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x8c\
+\x00\x00\x00\x72\x00\x00\x00\x00\x00\x01\x00\x00\x19\xc2\
+\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x12\xb0\
+\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x06\x5a\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/painting/README b/examples/painting/README
new file mode 100644
index 0000000..7266f6e
--- /dev/null
+++ b/examples/painting/README
@@ -0,0 +1,28 @@
+PyQt's painting system is able to render vector graphics, images, and outline
+font-based text with sub-pixel accuracy using anti-aliasing to improve
+rendering quality.
+
+These examples show the most common techniques that are used when painting
+with PyQt, from basic concepts such as drawing simple primitives to the use of
+transformations.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/painting/basicdrawing/basicdrawing.py b/examples/painting/basicdrawing/basicdrawing.py
new file mode 100755
index 0000000..fd4c69b
--- /dev/null
+++ b/examples/painting/basicdrawing/basicdrawing.py
@@ -0,0 +1,349 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QPoint, QRect, QSize, Qt
+from PyQt5.QtGui import (QBrush, QConicalGradient, QLinearGradient, QPainter,
+        QPainterPath, QPalette, QPen, QPixmap, QPolygon, QRadialGradient)
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QGridLayout,
+        QLabel, QSpinBox, QWidget)
+
+import basicdrawing_rc
+
+
+class RenderArea(QWidget):
+    points = QPolygon([
+        QPoint(10, 80),
+        QPoint(20, 10),
+        QPoint(80, 30),
+        QPoint(90, 70)
+    ])
+
+    Line, Points, Polyline, Polygon, Rect, RoundedRect, Ellipse, Arc, Chord, \
+            Pie, Path, Text, Pixmap = range(13)
+
+    def __init__(self, parent=None):
+        super(RenderArea, self).__init__(parent)
+
+        self.pen = QPen()
+        self.brush = QBrush()
+        self.pixmap = QPixmap()
+
+        self.shape = RenderArea.Polygon
+        self.antialiased = False
+        self.transformed = False
+        self.pixmap.load(':/images/qt-logo.png')
+
+        self.setBackgroundRole(QPalette.Base)
+        self.setAutoFillBackground(True)
+
+    def minimumSizeHint(self):
+        return QSize(100, 100)
+
+    def sizeHint(self):
+        return QSize(400, 200)
+
+    def setShape(self, shape):
+        self.shape = shape
+        self.update()
+
+    def setPen(self, pen):
+        self.pen = pen
+        self.update()
+
+    def setBrush(self, brush):
+        self.brush = brush
+        self.update()
+
+    def setAntialiased(self, antialiased):
+        self.antialiased = antialiased
+        self.update()
+
+    def setTransformed(self, transformed):
+        self.transformed = transformed
+        self.update()
+
+    def paintEvent(self, event):
+        rect = QRect(10, 20, 80, 60)
+
+        path = QPainterPath()
+        path.moveTo(20, 80)
+        path.lineTo(20, 30)
+        path.cubicTo(80, 0, 50, 50, 80, 80)
+
+        startAngle = 30 * 16
+        arcLength = 120 * 16
+
+        painter = QPainter(self)
+        painter.setPen(self.pen)
+        painter.setBrush(self.brush)
+        if self.antialiased:
+            painter.setRenderHint(QPainter.Antialiasing)
+
+        for x in range(0, self.width(), 100):
+            for y in range(0, self.height(), 100):
+                painter.save()
+                painter.translate(x, y)
+                if self.transformed:
+                    painter.translate(50, 50)
+                    painter.rotate(60.0)
+                    painter.scale(0.6, 0.9)
+                    painter.translate(-50, -50)
+
+                if self.shape == RenderArea.Line:
+                    painter.drawLine(rect.bottomLeft(), rect.topRight())
+                elif self.shape == RenderArea.Points:
+                    painter.drawPoints(RenderArea.points)
+                elif self.shape == RenderArea.Polyline:
+                    painter.drawPolyline(RenderArea.points)
+                elif self.shape == RenderArea.Polygon:
+                    painter.drawPolygon(RenderArea.points)
+                elif self.shape == RenderArea.Rect:
+                    painter.drawRect(rect)
+                elif self.shape == RenderArea.RoundedRect:
+                    painter.drawRoundedRect(rect, 25, 25, Qt.RelativeSize)
+                elif self.shape == RenderArea.Ellipse:
+                    painter.drawEllipse(rect)
+                elif self.shape == RenderArea.Arc:
+                    painter.drawArc(rect, startAngle, arcLength)
+                elif self.shape == RenderArea.Chord:
+                    painter.drawChord(rect, startAngle, arcLength)
+                elif self.shape == RenderArea.Pie:
+                    painter.drawPie(rect, startAngle, arcLength)
+                elif self.shape == RenderArea.Path:
+                    painter.drawPath(path)
+                elif self.shape == RenderArea.Text:
+                    painter.drawText(rect, Qt.AlignCenter,
+                            "PyQt by\nRiverbank Computing")
+                elif self.shape == RenderArea.Pixmap:
+                    painter.drawPixmap(10, 10, self.pixmap)
+
+                painter.restore()
+
+        painter.setPen(self.palette().dark().color())
+        painter.setBrush(Qt.NoBrush)
+        painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))
+
+
+IdRole = Qt.UserRole
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.renderArea = RenderArea()
+
+        self.shapeComboBox = QComboBox()
+        self.shapeComboBox.addItem("Polygon", RenderArea.Polygon)
+        self.shapeComboBox.addItem("Rectangle", RenderArea.Rect)
+        self.shapeComboBox.addItem("Rounded Rectangle", RenderArea.RoundedRect)
+        self.shapeComboBox.addItem("Ellipse", RenderArea.Ellipse)
+        self.shapeComboBox.addItem("Pie", RenderArea.Pie)
+        self.shapeComboBox.addItem("Chord", RenderArea.Chord)
+        self.shapeComboBox.addItem("Path", RenderArea.Path)
+        self.shapeComboBox.addItem("Line", RenderArea.Line)
+        self.shapeComboBox.addItem("Polyline", RenderArea.Polyline)
+        self.shapeComboBox.addItem("Arc", RenderArea.Arc)
+        self.shapeComboBox.addItem("Points", RenderArea.Points)
+        self.shapeComboBox.addItem("Text", RenderArea.Text)
+        self.shapeComboBox.addItem("Pixmap", RenderArea.Pixmap)
+
+        shapeLabel = QLabel("&Shape:")
+        shapeLabel.setBuddy(self.shapeComboBox)
+
+        self.penWidthSpinBox = QSpinBox()
+        self.penWidthSpinBox.setRange(0, 20)
+        self.penWidthSpinBox.setSpecialValueText("0 (cosmetic pen)")
+
+        penWidthLabel = QLabel("Pen &Width:")
+        penWidthLabel.setBuddy(self.penWidthSpinBox)
+
+        self.penStyleComboBox = QComboBox()
+        self.penStyleComboBox.addItem("Solid", Qt.SolidLine)
+        self.penStyleComboBox.addItem("Dash", Qt.DashLine)
+        self.penStyleComboBox.addItem("Dot", Qt.DotLine)
+        self.penStyleComboBox.addItem("Dash Dot", Qt.DashDotLine)
+        self.penStyleComboBox.addItem("Dash Dot Dot", Qt.DashDotDotLine)
+        self.penStyleComboBox.addItem("None", Qt.NoPen)
+
+        penStyleLabel = QLabel("&Pen Style:")
+        penStyleLabel.setBuddy(self.penStyleComboBox)
+
+        self.penCapComboBox = QComboBox()
+        self.penCapComboBox.addItem("Flat", Qt.FlatCap)
+        self.penCapComboBox.addItem("Square", Qt.SquareCap)
+        self.penCapComboBox.addItem("Round", Qt.RoundCap)
+
+        penCapLabel = QLabel("Pen &Cap:")
+        penCapLabel.setBuddy(self.penCapComboBox)
+
+        self.penJoinComboBox = QComboBox()
+        self.penJoinComboBox.addItem("Miter", Qt.MiterJoin)
+        self.penJoinComboBox.addItem("Bevel", Qt.BevelJoin)
+        self.penJoinComboBox.addItem("Round", Qt.RoundJoin)
+
+        penJoinLabel = QLabel("Pen &Join:")
+        penJoinLabel.setBuddy(self.penJoinComboBox)
+
+        self.brushStyleComboBox = QComboBox()
+        self.brushStyleComboBox.addItem("Linear Gradient",
+                Qt.LinearGradientPattern)
+        self.brushStyleComboBox.addItem("Radial Gradient",
+                Qt.RadialGradientPattern)
+        self.brushStyleComboBox.addItem("Conical Gradient",
+                Qt.ConicalGradientPattern)
+        self.brushStyleComboBox.addItem("Texture", Qt.TexturePattern)
+        self.brushStyleComboBox.addItem("Solid", Qt.SolidPattern)
+        self.brushStyleComboBox.addItem("Horizontal", Qt.HorPattern)
+        self.brushStyleComboBox.addItem("Vertical", Qt.VerPattern)
+        self.brushStyleComboBox.addItem("Cross", Qt.CrossPattern)
+        self.brushStyleComboBox.addItem("Backward Diagonal", Qt.BDiagPattern)
+        self.brushStyleComboBox.addItem("Forward Diagonal", Qt.FDiagPattern)
+        self.brushStyleComboBox.addItem("Diagonal Cross", Qt.DiagCrossPattern)
+        self.brushStyleComboBox.addItem("Dense 1", Qt.Dense1Pattern)
+        self.brushStyleComboBox.addItem("Dense 2", Qt.Dense2Pattern)
+        self.brushStyleComboBox.addItem("Dense 3", Qt.Dense3Pattern)
+        self.brushStyleComboBox.addItem("Dense 4", Qt.Dense4Pattern)
+        self.brushStyleComboBox.addItem("Dense 5", Qt.Dense5Pattern)
+        self.brushStyleComboBox.addItem("Dense 6", Qt.Dense6Pattern)
+        self.brushStyleComboBox.addItem("Dense 7", Qt.Dense7Pattern)
+        self.brushStyleComboBox.addItem("None", Qt.NoBrush)
+
+        brushStyleLabel = QLabel("&Brush Style:")
+        brushStyleLabel.setBuddy(self.brushStyleComboBox)
+
+        otherOptionsLabel = QLabel("Other Options:")
+        self.antialiasingCheckBox = QCheckBox("&Antialiasing")
+        self.transformationsCheckBox = QCheckBox("&Transformations")
+
+        self.shapeComboBox.activated.connect(self.shapeChanged)
+        self.penWidthSpinBox.valueChanged.connect(self.penChanged)
+        self.penStyleComboBox.activated.connect(self.penChanged)
+        self.penCapComboBox.activated.connect(self.penChanged)
+        self.penJoinComboBox.activated.connect(self.penChanged)
+        self.brushStyleComboBox.activated.connect(self.brushChanged)
+        self.antialiasingCheckBox.toggled.connect(self.renderArea.setAntialiased)
+        self.transformationsCheckBox.toggled.connect(self.renderArea.setTransformed)
+
+        mainLayout = QGridLayout()
+        mainLayout.setColumnStretch(0, 1)
+        mainLayout.setColumnStretch(3, 1)
+        mainLayout.addWidget(self.renderArea, 0, 0, 1, 4)
+        mainLayout.setRowMinimumHeight(1, 6)
+        mainLayout.addWidget(shapeLabel, 2, 1, Qt.AlignRight)
+        mainLayout.addWidget(self.shapeComboBox, 2, 2)
+        mainLayout.addWidget(penWidthLabel, 3, 1, Qt.AlignRight)
+        mainLayout.addWidget(self.penWidthSpinBox, 3, 2)
+        mainLayout.addWidget(penStyleLabel, 4, 1, Qt.AlignRight)
+        mainLayout.addWidget(self.penStyleComboBox, 4, 2)
+        mainLayout.addWidget(penCapLabel, 5, 1, Qt.AlignRight)
+        mainLayout.addWidget(self.penCapComboBox, 5, 2)
+        mainLayout.addWidget(penJoinLabel, 6, 1, Qt.AlignRight)
+        mainLayout.addWidget(self.penJoinComboBox, 6, 2)
+        mainLayout.addWidget(brushStyleLabel, 7, 1, Qt.AlignRight)
+        mainLayout.addWidget(self.brushStyleComboBox, 7, 2)
+        mainLayout.setRowMinimumHeight(8, 6)
+        mainLayout.addWidget(otherOptionsLabel, 9, 1, Qt.AlignRight)
+        mainLayout.addWidget(self.antialiasingCheckBox, 9, 2)
+        mainLayout.addWidget(self.transformationsCheckBox, 10, 2)
+        self.setLayout(mainLayout)
+
+        self.shapeChanged()
+        self.penChanged()
+        self.brushChanged()
+        self.antialiasingCheckBox.setChecked(True)
+
+        self.setWindowTitle("Basic Drawing")
+
+    def shapeChanged(self):
+        shape = self.shapeComboBox.itemData(self.shapeComboBox.currentIndex(),
+                IdRole)
+        self.renderArea.setShape(shape)
+
+    def penChanged(self):
+        width = self.penWidthSpinBox.value()
+        style = Qt.PenStyle(self.penStyleComboBox.itemData(
+                self.penStyleComboBox.currentIndex(), IdRole))
+        cap = Qt.PenCapStyle(self.penCapComboBox.itemData(
+                self.penCapComboBox.currentIndex(), IdRole))
+        join = Qt.PenJoinStyle(self.penJoinComboBox.itemData(
+                self.penJoinComboBox.currentIndex(), IdRole))
+
+        self.renderArea.setPen(QPen(Qt.blue, width, style, cap, join))
+
+    def brushChanged(self):
+        style = Qt.BrushStyle(self.brushStyleComboBox.itemData(
+                self.brushStyleComboBox.currentIndex(), IdRole))
+
+        if style == Qt.LinearGradientPattern:
+            linearGradient = QLinearGradient(0, 0, 100, 100)
+            linearGradient.setColorAt(0.0, Qt.white)
+            linearGradient.setColorAt(0.2, Qt.green)
+            linearGradient.setColorAt(1.0, Qt.black)
+            self.renderArea.setBrush(QBrush(linearGradient))
+        elif style == Qt.RadialGradientPattern:
+            radialGradient = QRadialGradient(50, 50, 50, 70, 70)
+            radialGradient.setColorAt(0.0, Qt.white)
+            radialGradient.setColorAt(0.2, Qt.green)
+            radialGradient.setColorAt(1.0, Qt.black)
+            self.renderArea.setBrush(QBrush(radialGradient))
+        elif style == Qt.ConicalGradientPattern:
+            conicalGradient = QConicalGradient(50, 50, 150)
+            conicalGradient.setColorAt(0.0, Qt.white)
+            conicalGradient.setColorAt(0.2, Qt.green)
+            conicalGradient.setColorAt(1.0, Qt.black)
+            self.renderArea.setBrush(QBrush(conicalGradient))
+        elif style == Qt.TexturePattern:
+            self.renderArea.setBrush(QBrush(QPixmap(':/images/brick.png')))
+        else:
+            self.renderArea.setBrush(QBrush(Qt.green, style))
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/painting/basicdrawing/basicdrawing.qrc b/examples/painting/basicdrawing/basicdrawing.qrc
new file mode 100644
index 0000000..9d8a23a
--- /dev/null
+++ b/examples/painting/basicdrawing/basicdrawing.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>images/brick.png</file>
+    <file>images/qt-logo.png</file>
+</qresource>
+</RCC>
diff --git a/examples/painting/basicdrawing/basicdrawing_rc.py b/examples/painting/basicdrawing/basicdrawing_rc.py
new file mode 100644
index 0000000..ff6fdcb
--- /dev/null
+++ b/examples/painting/basicdrawing/basicdrawing_rc.py
@@ -0,0 +1,326 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Tue May 14 09:37:31 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x0e\x70\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x50\x00\x00\x00\x50\x08\x06\x00\x00\x00\x8e\x11\xf2\xad\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x01\x3d\x00\x00\x01\x3d\
+\x01\x9f\xdc\x2b\xea\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x0d\xed\x49\x44\
+\x41\x54\x78\x9c\xed\x5c\x79\x70\x1c\xd5\x9d\xfe\x7a\x46\x73\x69\
+\x34\xba\x0f\xcb\x96\x35\xbe\x8d\x90\x10\xbe\x30\x8e\x85\xed\x10\
+\x67\x51\x44\x4c\x16\x58\x76\x97\xb0\xb0\x04\x36\x45\x2a\x86\x62\
+\xf1\x06\xb6\x48\xc2\x62\x90\x8b\x50\xd9\xb0\x5b\x9b\x84\x85\x62\
+\xd9\x0a\x09\x6c\x41\xc0\x2c\xb5\x0e\x87\x11\xc2\x16\xb2\x25\x1b\
+\xb0\x6c\xd9\x96\xe4\xdb\xb2\x75\x59\xb2\x67\xac\xd1\x68\xa6\xef\
+\xee\xf7\xf6\x8f\xd6\x31\xb6\xa7\xbb\x67\xa4\x19\x8d\x30\xf9\xaa\
+\x5c\xe5\x79\xfd\xbd\xee\x5f\x7f\xfa\xbd\x7e\xc7\xef\xf7\x1e\x43\
+\x29\x45\xbc\xf0\xd4\x78\xcb\x01\x54\x03\xa8\x04\x90\xe3\x70\x5a\
+\x0a\x2a\x96\x67\x2c\xc8\xcc\xb6\x7a\xac\x69\x8c\xcd\x66\x63\x60\
+\xb3\x5b\xa8\xa2\x50\x91\xe7\xd4\x7e\x91\xa7\xc7\x65\x89\xb4\xc8\
+\x32\xdd\xa9\x2a\xb4\x69\xcf\x96\x0e\x12\xf7\x43\xa7\x29\x98\x58\
+\x05\xf4\xd4\x78\xad\x00\x9e\x06\xf0\x20\x80\x12\x00\xb0\x58\x19\
+\x2c\x2a\x4f\x47\xc5\x72\x37\xec\x0e\x4b\x4c\xf7\x51\x15\x8a\x70\
+\x48\xe5\x78\x96\x9c\x17\x05\x72\x52\x92\xc8\x7e\x45\xa2\x0d\x8a\
+\x42\x1b\xf7\x6c\xe9\x90\x26\xf8\x1e\x29\x43\x4c\x02\x7a\x6a\xbc\
+\x33\x00\xfc\x11\xc0\xba\xd1\x32\xbb\xc3\x82\xea\x3b\xf3\xe0\xc9\
+\xb2\x26\xc4\x10\xa2\x52\x84\x43\xaa\xc0\xb3\xe4\x82\x28\x90\x53\
+\x92\x48\x0e\xc8\x32\xfd\x4c\x91\xe9\x8e\x3d\x5b\x3a\x84\x84\x3c\
+\x24\x09\x30\x15\xd0\x53\xe3\xf5\x02\xf8\x1c\xc0\x8c\xc8\xf2\xb5\
+\xd5\xd9\x28\x99\xeb\x4c\xa2\x69\x1a\x08\x01\xd8\x90\x2a\xf2\xac\
+\xea\x13\x04\xd2\x29\x89\xa4\x55\x96\xe8\x2e\x55\xa1\x9f\x34\xd7\
+\x76\x84\x93\x6e\x80\x09\x62\x11\xf0\x1d\x00\x7f\x1d\x59\xb6\xb0\
+\x3c\x1d\x37\xac\xc9\x4c\xa6\x5d\xa6\xa0\x14\x60\xc3\xaa\xc4\x85\
+\x55\xbf\xc8\x93\x33\x92\x48\x0f\xca\x12\xd9\xad\x28\xb4\xbe\xb9\
+\xb6\x63\x70\xaa\xec\x30\x14\xd0\x53\xe3\xfd\x26\x80\x86\xc8\x32\
+\xb7\xc7\x8a\x0d\x77\xe7\xc3\x6a\x65\x92\x6c\xda\xc4\x40\x29\xc0\
+\x85\x55\x99\x63\xd5\x41\x41\x13\xf6\xb0\x2c\x91\x26\x45\xa6\x75\
+\xcd\xb5\x1d\x17\x12\xfd\x3c\x33\x01\x9b\x01\xac\x8e\x2c\x9b\xb7\
+\xd8\x85\x55\x37\x67\x25\xda\x8e\x29\x01\xc7\xaa\x0a\x17\x26\x01\
+\x81\x27\x5d\x92\x40\xda\x64\x89\xec\x91\x15\x5a\xd7\xfc\x6c\x47\
+\xcf\x44\xef\xa9\x2b\xa0\xa7\xc6\x9b\x06\x80\x05\x60\x8f\x2c\x5f\
+\x71\x53\x26\x16\x55\xa4\x4f\xf4\x79\xd3\x12\x3c\x47\x54\x2e\xac\
+\x0e\x09\x1c\xe9\x11\x45\xd2\x2e\x4b\x74\xaf\x22\x93\xba\xa6\x67\
+\x3b\x4e\x9b\xd5\x35\x12\xf0\x5a\x00\x1d\x97\x97\xdf\x72\x47\x1e\
+\xf2\x8b\x6c\x93\xb7\xfa\x2b\x00\x91\x27\x84\x0d\xab\xc1\xbe\x6e\
+\xb1\x64\x4f\x6d\x07\x17\x8d\x63\x34\x78\xab\xb8\xbc\x80\x61\x80\
+\x9c\xbc\xb4\x84\x19\x38\xdd\xe1\x70\x59\x2c\xb9\x05\xb6\x1c\xe6\
+\xb2\x56\x18\x09\x23\x01\xe7\x5c\x5e\x60\xb3\x5b\x60\x4d\x9b\x9e\
+\x9d\x47\xaa\x60\x24\x60\x6c\x53\x8b\xaf\x39\xfe\x2c\xd2\x24\xf1\
+\x67\x01\x27\x89\x94\xf6\x08\x92\x48\xc0\xb1\x04\x16\xd8\x30\x23\
+\xb7\x00\x79\x99\x39\x10\x55\x0e\x41\xd1\x0f\x51\xe1\x53\x69\x5a\
+\xcc\x98\x52\x01\x55\x15\xe8\xeb\x12\x70\xf6\xa4\x00\x22\xda\xb0\
+\x7e\xc5\x6a\x3c\x76\xeb\x46\x5c\xef\x5d\x72\x09\x8f\x52\x82\xfe\
+\xf0\x59\x9c\x09\x74\xe0\xb8\x7f\x3f\x5a\xfa\xea\xa1\x12\x65\x2a\
+\x4d\x8d\x19\x53\x26\xa0\x6f\x40\xc2\xde\x86\x61\x88\x3c\xc1\xa3\
+\x77\xdf\x83\x67\xbe\xff\x9c\x2e\x97\x61\x2c\x98\xe9\x99\x87\x99\
+\x9e\x79\xa8\x2a\xbd\x0d\x77\x94\xfd\x18\x75\x27\xdf\x40\x53\xd7\
+\x36\xc8\x64\x7a\xad\x78\x4d\x89\x80\xed\xfb\x59\xb4\xed\x0b\x21\
+\x27\xd7\x89\x4f\x5f\xdc\x8a\xf2\xd9\x95\x71\xd5\xcf\x71\x15\xe1\
+\xee\xca\xc7\xf1\x8d\xd2\xef\xe2\xa5\x2f\x1e\xc7\x90\xe0\x37\xe4\
+\xab\x32\xc5\x91\x43\x2c\x00\xe0\xae\x6f\xdd\x8a\x9c\xac\x0c\x0c\
+\x09\x3e\x04\xf8\x0b\x18\xe2\x2f\x40\x54\x13\xf7\x79\x48\xba\x80\
+\xc7\xdb\x39\x1c\xde\x17\x82\xdb\x6d\xc3\x07\xcf\xbf\x13\xb7\x78\
+\x91\xf0\x66\x97\xe1\xa7\xeb\x7e\x8f\x17\x3f\xff\x09\x7a\x82\xc7\
+\x75\x79\xbe\xf3\x32\xda\x5a\xc2\x60\x18\x06\xdb\x9e\x78\x02\x05\
+\x99\x85\x63\xd7\x5a\xfa\xea\xf1\x6a\xcb\x53\x13\xb6\xe1\x72\x24\
+\xb5\x17\xee\xef\x11\x71\xa0\x69\x18\x0c\xc3\xe0\xf5\xa7\x7f\x8b\
+\xeb\x4a\xaf\x9f\xf4\x3d\xb3\x9d\x05\x78\x64\xd5\xbf\x23\xc3\x9e\
+\xad\xcb\xf1\x0d\x68\xcd\xbc\xb0\xd0\x7d\x89\x78\xc9\x40\xd2\x04\
+\xa4\x00\x5a\xf7\x86\x40\x01\x54\xdd\x50\x86\x5b\x2a\x6b\x4c\xeb\
+\x88\xb2\x84\xf7\xf6\xbe\x8b\x8f\x0f\x7e\x68\xc8\xcb\x76\xe6\xe3\
+\x81\x65\x9b\xc1\x20\xfa\xac\xc8\xd7\xaf\x09\x58\xb1\x70\x41\xbc\
+\x66\xc7\x8d\xa4\x09\xd8\x79\x8c\xc7\xd0\xa0\x82\x34\x9b\x05\xbf\
+\xdd\xf8\x6b\x53\xfe\xfe\x73\x3b\xb0\xa5\xf1\xfb\x78\x69\x57\x2d\
+\xee\xd9\xfc\x30\xca\x7f\xb4\x04\x6f\x34\xfe\x4e\x97\x5f\x51\xb4\
+\x1a\xab\x4b\x37\x5c\x51\x4e\x08\x85\xef\x82\x0c\x00\x58\x5b\x59\
+\x35\xf1\x17\x88\x11\x49\x11\x90\x52\x8a\xb6\x7d\xda\x6a\xfb\x77\
+\xd6\xac\xc4\x82\xa2\x45\x86\xfc\xfe\xd0\x19\xfc\xfe\x40\x2d\x7c\
+\x6c\x2f\xe6\x5f\xe3\xc2\xcd\xdf\xcd\x45\x77\x4f\x00\x8f\xfe\xaa\
+\x16\xfb\x3b\xbf\xd0\xad\x57\xbd\xf0\xbe\x2b\xbc\x30\x70\x51\x81\
+\x2a\x6b\x2b\x4c\x7f\xb9\xf2\xce\x49\xbe\x89\x39\x92\x22\xa0\x6f\
+\x40\x06\xc7\xaa\x00\x80\x1f\xd6\x3c\x68\xca\x7f\xb5\xe5\xe7\x90\
+\xd4\xf1\xb8\x51\x7e\x91\x0d\x73\x16\x38\xa1\xa8\x14\x0f\xbe\xb0\
+\x51\xb7\x5e\x51\x86\x17\x95\x33\x6e\xba\xec\xd9\x5a\xf3\xcd\xce\
+\x71\x62\x7e\xd1\x57\xb4\x09\xf7\x76\x8a\x00\x80\xac\x6c\x07\xd6\
+\x57\x54\x1b\x72\xfd\x6c\x1f\xfa\x86\xaf\x5c\xb7\xac\x5c\xe9\x01\
+\x00\x74\x9e\xf1\xe3\x95\x4f\x5e\xd4\xad\xbf\x6e\xee\x5d\x97\xfc\
+\xf6\xf5\x6b\xcd\xb7\x6c\x5e\x69\x5c\x36\x4f\x14\x49\x19\xc6\xf4\
+\x9c\xd5\xbc\x69\xf5\x12\xf3\x21\x4b\x67\xa0\x3d\x6a\x79\x86\xc7\
+\x0a\x57\xba\x05\x3c\x47\xb0\xf3\x50\x23\x7e\x74\xcb\x23\x51\x79\
+\x8b\xf2\x97\x61\xef\x27\x3c\xba\xbb\x82\xf8\x76\xd5\x52\xfc\xdf\
+\x53\x7f\x40\x8f\xbf\x1b\xc5\x39\xc5\x51\xf9\x59\xce\x02\x2c\xce\
+\x5f\x0e\x56\x1e\x06\x2b\x0d\x83\x93\x86\x27\x35\x2e\x4c\xb8\x80\
+\xc3\x01\x15\x6c\x48\x6b\xbe\x77\x54\x7d\xcf\x94\xaf\x27\x20\x00\
+\xe4\x16\xda\xd1\x77\x56\xc0\xd1\x4e\xfd\x95\x75\x9b\xc5\x8e\x55\
+\x65\x2b\x71\xa6\xb3\x1e\x84\x02\x8b\x8a\xaf\xc1\xa2\xe2\x6b\x74\
+\xf9\x0b\xf3\x96\xe0\x9f\xaa\x5e\xba\xa4\x6c\x4f\xf7\x07\xf8\x43\
+\xeb\x16\x53\x5b\xa3\x21\xe1\x4d\x78\x28\x20\x8f\xfd\x7f\xcd\x35\
+\xeb\x0c\x98\x1a\xce\x04\xae\x88\x1a\x8c\x21\xaf\x40\x0b\x1d\xf4\
+\x9e\x0b\x80\x50\xfd\x6c\x90\xf5\xcb\xd6\xc6\x61\xe1\x95\x60\x98\
+\x89\x2f\x12\x27\x5c\xc0\xe1\x80\xe6\x7d\x4e\x57\x1a\x4a\xf2\xbd\
+\x86\x5c\x0a\x8a\xde\xe0\x09\xdd\xeb\x79\x85\x5a\x03\x91\x25\x82\
+\xcf\x4f\x34\xe9\xf2\x16\xcf\x5e\x3c\x01\x4b\x13\x83\x24\x08\xa8\
+\xad\x9a\x14\xe5\x9b\x07\xde\x25\x45\x80\x42\x64\xdd\xeb\x99\xd9\
+\xe3\xc1\xab\x96\x53\xfb\x74\x79\x79\x9e\xdc\x38\x2c\x4c\x2c\x12\
+\xfe\x0d\x0c\x8e\x34\xe1\xd2\x99\xd1\x3f\xe2\x91\x30\xfb\x78\xdb\
+\x22\x42\x39\x41\x2e\xa4\xcb\xcb\x72\xe5\xe2\x5b\x1b\x72\x11\x0e\
+\xf6\x63\xc9\xc3\x2b\x90\x9b\x99\x89\x9d\xcf\xef\x8c\xca\x1d\x08\
+\xf6\xe0\xc8\xc0\x21\xd8\x2d\x76\x38\x6d\x6e\x64\xa7\x67\x21\xc8\
+\x5f\x34\xb5\x55\x0f\x09\x17\x90\x63\xb5\x6f\xd5\xac\xfc\x22\x53\
+\xae\xa8\x44\x8d\x14\x8e\x21\xcd\x36\xde\x40\x38\x81\xd5\xe5\x65\
+\xd8\x73\x50\x5c\xe2\xc0\x59\x81\xc3\xe9\xce\x20\x7a\x1c\xfa\x82\
+\xf4\x86\x8f\xe1\xed\x63\x13\xeb\x30\xa2\x21\xe1\x4d\x58\x91\x35\
+\x01\xdd\xae\x0c\x53\xae\xa8\x1a\x27\x5d\x59\x2c\xda\x3f\x00\x60\
+\x45\x7d\x01\x2d\x8c\x05\x6e\x7b\x6a\xb2\x25\x12\x2a\x20\x21\x14\
+\xaa\xd6\x87\x20\x33\x16\x01\x4d\x3c\x10\xc0\x58\x18\x95\xe3\x8d\
+\x9b\xbb\xc7\x91\x63\x6e\x60\x12\x90\x50\x01\xd5\x88\x55\xf7\x98\
+\x3c\x30\x86\xb8\x87\x6d\xa4\x19\x73\xe2\xd7\x40\x40\x59\x1e\x1f\
+\xab\x65\xb9\xcc\x7b\xe1\x58\x66\x00\x69\x23\x1d\xb1\x99\x80\x99\
+\x8e\xd4\xf4\xc4\x89\x6d\xc2\xca\x78\x9e\x8d\xdb\xe5\x36\xe5\x4b\
+\x31\x78\xe0\x68\x47\x22\x88\xc6\xdf\x4b\x8f\xfd\x2a\xf0\x40\x5b\
+\x44\x9e\xf4\x60\xc8\x3c\xc7\xd1\x6a\x89\x61\x10\x30\x92\xfc\xa4\
+\xb7\x78\x3a\x0a\x0b\x93\x9a\x10\x77\x42\x9f\x6a\x77\x30\x18\x7d\
+\xcf\x0b\x41\x9f\x39\xdf\xea\x32\xe5\x28\x23\x5e\xed\x72\x38\x0c\
+\x79\xac\x3c\x6c\x6e\x60\x12\x90\x50\x01\x19\x86\x81\xcd\xa6\x29\
+\x78\x31\x68\x3e\x38\xb5\xa7\x99\xe7\x58\x8f\x76\x4c\x0e\xbb\x31\
+\x97\x95\xae\x02\x01\x01\xc0\xe1\xd4\x6e\x39\x38\x1c\x30\xe7\xc6\
+\xe0\x81\xb2\x3c\xea\x81\x26\x02\x5e\x0d\x1e\x08\x00\x0e\xa7\xb6\
+\xed\x61\x30\x6c\xfe\x42\x0e\x6b\x0c\x1e\xa8\x8e\x0a\x68\x2c\xf6\
+\x55\xe3\x81\x4e\xa7\xd6\x84\x87\x43\xe6\x3b\x10\xec\x26\x02\x52\
+\x68\x1b\x73\x00\x20\xdd\x44\x40\xee\x6a\xf1\x40\xfb\x48\x13\x0e\
+\x71\xe6\xb3\x0c\x7b\x9a\xb1\x28\x6a\xc4\xb8\xd2\xed\x30\xce\xcb\
+\xbe\x6a\x3c\xd0\x31\x32\x94\x61\x39\xf3\xcd\x45\x66\xdf\x40\x25\
+\x62\x66\xe3\x72\xea\x0b\x28\x28\x2c\x08\x55\x63\x33\x30\xc1\x48\
+\x9a\x07\xf2\x9c\xfe\x3a\xdf\x28\x1c\x69\x2e\xc3\x29\x98\x24\x8e\
+\x7b\x60\x61\x56\x81\x2e\x2f\x68\x92\x2b\x93\x4c\x24\x5c\x40\x4f\
+\xd6\xe8\xcc\x41\xc5\xc0\xd0\x39\x53\x7e\x69\x96\x7e\xfc\x22\xe0\
+\x1f\xff\x23\x7c\xb3\x62\xbd\x2e\xef\x84\xbf\x35\x0e\x0b\x13\x8b\
+\x84\x0b\x58\x50\x3c\xb2\x0a\x4a\x81\x6d\x5f\xbe\x67\xca\xf7\x66\
+\x97\xe9\x5e\x1b\xf4\x6b\x6d\xd8\xe3\xb1\x63\x6e\xe1\x7c\x5d\xde\
+\x51\xdf\x97\xf1\x19\x99\x40\x24\x5c\xc0\x74\xb7\x15\x6e\x8f\x36\
+\x94\x69\x38\xb8\xcb\x94\x3f\x27\x47\x5f\xc0\x80\x6f\x64\x75\x7b\
+\x96\x7e\x82\x10\xa5\x04\xc7\xfc\x2d\x31\xdb\x67\xd6\xf3\xc7\x8b\
+\xa4\x4c\x20\x0b\x47\xbc\xf0\xd0\x49\xfd\x14\xb4\x51\xc4\xe2\x81\
+\xd7\xcd\xd7\x4f\x0d\xe9\x0e\x9e\x00\x2b\x05\xb5\x1f\x31\x44\xd7\
+\x66\x66\xea\x7b\xf2\x44\x90\x14\x01\x4b\xe7\x69\xf3\xd6\xbe\xbe\
+\x20\x8e\xf4\xb6\x19\x72\xb3\x9d\x05\x51\x5f\x2a\x38\xa8\x8c\x75\
+\x22\x35\x2b\xbe\xa3\x5b\xff\x58\x44\xf3\xb5\x3b\x34\x01\x65\x89\
+\x42\x52\xc4\xa8\xfc\xbc\xf4\x62\x38\xd3\x12\xb7\x55\x2d\x29\x02\
+\xce\xf4\x3a\xe0\x72\x5b\x41\x29\xc5\x0b\xef\xbd\x60\xca\xff\x9b\
+\x8a\xc7\xae\x28\x3b\xf8\xa5\x36\x10\x5f\x5a\x31\x07\x77\xae\xfa\
+\x5b\xdd\xba\x47\x22\x04\x4c\x77\x6b\x9f\x0e\x4a\x29\x4e\xf6\x47\
+\xf7\x7e\x06\x0c\xfe\xaa\x7c\x13\x2e\x76\x66\xe2\xf4\xbe\x0c\xe4\
+\x0e\xaf\xc5\x43\x95\xe6\xd9\x63\x7a\x48\x4a\x6a\x07\xc3\x30\x98\
+\xb7\xd8\x85\x8e\x03\x61\x7c\xdc\xdc\x0c\xf5\x11\xc5\x70\xe9\xaa\
+\xac\x60\x25\x2a\x67\xac\xc1\xe1\x81\xdd\x00\x80\xbe\x6e\x11\x7d\
+\x67\x05\xd8\x1d\x16\xfc\xee\xf1\x57\x75\xeb\xf5\x87\xce\xe0\xb8\
+\x7f\xff\xd8\x6f\x77\xc6\xf8\xee\xf9\xe3\x7d\x47\x75\xb3\x61\xd7\
+\xce\xf9\x1e\xd6\x6e\x1a\xcf\x9a\x50\x88\x04\x1c\x8e\xf9\xf5\x2e\
+\x41\xd2\x16\xd1\x16\x57\xa4\xc3\x66\x67\x10\x1a\x96\x51\xfb\xce\
+\x66\x53\xfe\xbd\xd7\x3f\x89\xb2\x82\x1b\x71\xe4\x40\x18\xcd\xf5\
+\x41\xac\x5c\x3a\x1f\x6f\xd5\xbe\x64\x98\x1a\xb7\xed\xe8\x2b\xa0\
+\x11\x19\x0b\x69\x36\x06\xd9\xb9\xda\x1f\x6a\xc7\xa1\xe8\x61\xcd\
+\x68\x88\xff\xd8\x8d\x71\x24\x4d\x40\x67\xba\x05\x4b\x57\x69\x19\
+\x56\x2f\xfe\xf1\x4d\x9c\x3e\x7f\xca\x90\x9f\xe5\xcc\xc7\x63\xab\
+\x7f\x83\xad\x8f\xd5\xa3\xfd\xb5\x5d\xd8\xf1\x8b\x9d\x86\x59\xad\
+\x27\xfc\x07\xd0\xda\xdf\x70\x45\xf9\x75\x2b\xb4\x58\xcc\x3b\x1f\
+\xd7\xc3\x1f\x8a\x6d\x80\x3d\x99\xdd\x7f\x49\x5d\xc6\x5d\x50\x96\
+\x8e\xa2\x59\x76\x48\x22\xc1\xbd\xbf\xfc\x7b\xc3\xfc\x96\x51\xcc\
+\xc8\x99\x89\x59\x79\xb3\x0d\x39\x01\xfe\x3c\xfe\xab\xe5\x67\x51\
+\xaf\xcd\x9e\xeb\x44\xc9\x5c\x27\x04\x41\xc5\x7d\x2f\xdc\xa7\xdb\
+\x99\x8c\xe2\xdc\xf0\x69\x34\x74\x6e\x35\xb5\x4b\x0f\xc9\xcd\xd2\
+\x67\x80\xb5\xd5\x39\xd8\xf9\xc1\x20\xda\x8f\xf6\xe1\xb6\xda\x0d\
+\xf8\x70\xf3\x47\x93\xba\x65\x48\x0c\xe0\x3f\xbf\x78\x1c\x21\x51\
+\x67\xbd\x91\xd1\x0e\xc4\xe8\x3c\xc6\xe3\xd4\xc9\x53\x58\xb9\xe9\
+\x1b\x78\xa0\xfa\x1e\xdc\xb8\x78\x15\x96\xcd\xbd\x01\x61\x39\x80\
+\x63\xbe\x16\x1c\xf3\xed\xc3\x51\xdf\x3e\x0c\x8b\x13\xcf\x4a\x00\
+\x8c\x37\x5c\x3f\x09\xe0\xf9\xc8\x32\xbb\xc3\x82\xbb\x1e\x88\x3f\
+\xeb\x5d\x96\x28\x76\xd5\x05\x70\xbe\x4f\xc2\x9a\x1b\xcb\xf1\xf6\
+\x93\x6f\xc3\xe3\xf4\xc4\x7d\x9f\xee\xe0\x71\xbc\xfc\xc5\x3f\x63\
+\x90\x1f\x88\xbb\xee\x64\xd0\xbe\x3f\x9c\xd3\x5c\xdb\x31\x14\xed\
+\xda\x94\x44\x62\x6c\x76\x06\xeb\x37\xe4\xe2\xc6\x75\x59\xf8\xbc\
+\xf5\x08\xca\xff\x61\x05\xb6\xee\x79\x2b\xe6\xfa\x7e\xb6\x0f\x6f\
+\x1e\xfe\x57\xfc\x72\xd7\x0f\xa7\x5c\x3c\x33\x4c\x5d\x28\x8b\x01\
+\xe6\x97\xb9\x70\xc7\xfd\x85\x28\x5f\xee\xc4\x53\xaf\x6f\xc6\x82\
+\x1f\x94\x63\xe3\xcb\x0f\x19\x2e\x3a\x10\xaa\x62\xcb\x67\xf7\xa2\
+\xf1\xcc\xff\x6a\xc3\x8d\x69\x86\x29\x8f\x05\xa6\x59\x19\x94\xce\
+\x77\x62\x6d\x75\x0e\x06\x03\x2c\xde\xf8\x53\x1d\x9e\xdb\xaa\x9f\
+\xec\x63\x61\xac\x58\x98\xb7\x74\x0a\x2d\x8c\x0f\x29\xdb\x2f\x6c\
+\xb1\x00\xb3\x4a\xb5\x89\xfd\x8e\x2f\xf7\x18\x72\xab\xbc\xb7\x4d\
+\x85\x49\x51\xa1\x28\x14\x94\x42\x77\xb9\x3b\xa5\x1b\xae\x4b\xe6\
+\x6a\x73\xe6\xde\xde\x21\x9c\x3a\xaf\x9f\xa9\xba\xb4\xf8\x66\xd4\
+\x2c\xbc\x3f\x25\xf9\x2f\x6c\x48\xe5\x8d\x4e\x9b\x4b\xa9\x80\x33\
+\x4b\x1d\xb0\x5a\xb5\x99\xc0\x7f\xd7\xbd\x62\xc8\xbd\xfd\xda\x8d\
+\xf8\x55\xf5\x47\xf8\xc7\x55\x2f\xe3\xf6\xb2\x87\xa7\xc6\x40\x00\
+\x02\x47\x0c\x33\x04\x52\x2a\x60\x9a\x8d\x81\x77\x81\x16\x17\x79\
+\xaf\xa1\x0e\xb2\x6a\x1c\x06\x60\x18\x0b\xae\x2d\x5a\x86\xf9\xb9\
+\x57\x9c\xc8\x92\x34\xf0\x1c\x31\x5c\x4e\x4a\xf9\x99\x09\xcb\xab\
+\x32\x91\xe1\xb1\xa2\x7f\x20\x84\x07\xfe\xe3\xfe\x54\x9b\x73\x09\
+\x14\x85\x82\x0d\x29\x9b\x8c\x38\x29\x17\xd0\x66\x67\x50\xf5\x17\
+\xd9\xb0\x58\x80\x3f\x7d\xda\x8c\x37\x76\xbd\x96\x6a\x93\xc6\x70\
+\xbe\x57\x3a\xd8\xf4\x6c\xc7\x49\x23\x4e\xca\x05\x04\x80\xbc\x42\
+\x1b\xd6\xd5\xe4\x20\x3b\x2f\x0d\x3f\xf9\xf5\x16\xfc\xdb\xfb\xcf\
+\xa5\xfc\x8c\x04\x49\x24\x34\x18\x50\x1e\x32\xe3\x4d\x9b\x73\x9c\
+\x8a\x67\x3b\x50\x5c\xe2\x40\x7f\x9f\x88\x6d\xad\x6f\xe1\xc3\xfd\
+\xef\x63\xd1\xac\x85\x58\xb2\xb0\x12\x4b\xe7\x5d\x07\xc2\xa8\x60\
+\xa5\x20\xfc\xec\x39\x74\x1b\xec\x56\x4f\x04\x64\x89\xd2\xce\xe3\
+\xfc\xbd\xbb\x9f\x69\xd7\xdf\x5b\x31\x82\x69\x23\x20\x00\x80\x01\
+\x8a\x4b\x34\x21\xb5\x6d\x38\x27\xd0\x1a\x3c\x81\xd6\xd6\x77\xa7\
+\xcc\x04\x81\x27\x6a\xd7\x29\xe1\xc7\x8d\xff\xd2\xfe\x66\x2c\xfc\
+\xe9\x25\x60\x8a\x40\x29\x30\x3c\xa4\x84\x2e\x5e\x90\xff\x47\x12\
+\xc8\x13\x8d\x4f\xb7\xeb\x6f\x09\xb8\x0c\x5f\x2b\x01\x47\x4e\xb7\
+\x94\x38\x56\xf5\x89\x02\x3d\x2d\x8b\xe4\x80\xaa\xd2\xcf\xd2\xdd\
+\xd6\xfa\xf7\x1f\x3d\x68\x9e\xcc\x13\x05\x57\xa5\x80\x94\x02\x1c\
+\xab\x4a\x5c\x98\xf8\xc5\x91\x83\x6b\x55\x85\x36\x38\x5d\x96\xfa\
+\x8f\x36\x1d\x4a\xe8\xc1\xb5\x5f\x79\x01\xb5\xf3\x52\xc9\x45\x81\
+\x1f\x13\xaa\xd1\x62\x61\x3e\xf9\xf4\xc9\xc3\xc1\xa9\x78\xbe\x91\
+\x80\x93\x89\xb5\x24\x1c\x1c\xab\xca\x5c\x98\x8c\x1c\x2c\x4b\x0e\
+\xaa\x0a\xdd\xc5\x30\xf8\x78\xc7\x4f\xdb\xcc\x53\x61\x93\x08\x23\
+\x01\x5f\x03\x70\x37\x80\x25\x06\x9c\x84\x83\x67\x89\xc2\x86\x47\
+\x4f\xe0\x25\x87\x14\x99\xee\x06\x83\xba\x86\x9f\xb5\x99\x67\xad\
+\xa7\x00\xba\x02\x86\xb6\x77\x5d\x18\x39\x06\xf9\x03\x00\x37\xe9\
+\xf1\x26\x0a\x9e\x25\x0a\xc7\xaa\x01\x81\x23\x5d\xe2\xa8\x50\xc0\
+\xf6\x86\x9f\xb7\x25\xfc\xa8\xe2\x64\xc2\xf0\x1b\x18\xda\xde\x15\
+\xf4\xd4\x78\x6f\x01\xf0\x2e\x80\x5b\x27\xf2\x80\x91\x13\x72\x47\
+\x85\x3a\x2c\x4b\xb4\x89\x12\xba\xbd\xf1\xe9\xf6\xfe\x89\xdc\x6f\
+\xba\xc1\xb4\x13\x09\x6d\xef\xe2\x3d\x35\xde\xdb\x01\xbc\x0e\xad\
+\x49\x47\x85\xc0\x13\x95\x0d\xa9\x41\x81\x27\x5d\xa2\x40\xda\x14\
+\x99\x36\x29\x32\xdd\xbe\xfb\x99\xf6\xde\x44\x1a\x3c\xdd\x10\x53\
+\x2f\x1c\xda\xde\x25\x7b\x6a\xbc\x7f\x67\xb5\x82\x13\x78\xf2\x03\
+\x36\xa4\x0e\x09\x3c\xe9\x91\x04\xd2\x2e\x49\xb4\x59\x55\xe8\xf6\
+\xdd\xcf\xb4\x9f\x4d\xb2\xad\xd3\x12\xff\x0f\xd4\xc9\xcc\xde\x09\
+\x31\x84\xf7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x02\xff\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x10\x08\x02\x00\x00\x00\xf8\x62\xea\x0e\
+\x00\x00\x02\xc6\x49\x44\x41\x54\x78\x5e\x2d\x94\x5b\x6e\x14\x31\
+\x10\x45\xaf\x1f\xdd\x93\x87\x26\x3b\x61\x13\x6c\x82\x2c\x05\x09\
+\x85\xf5\xc0\x17\x1f\x91\xf8\x60\x09\x2c\x01\x96\x00\x4a\x08\x93\
+\x7e\xda\x2e\xd3\x07\x5b\xb2\x3c\xb7\xed\xaa\xba\xe5\x5b\x55\xe3\
+\x7e\xff\xf8\xe4\x83\x8e\x25\x2f\xef\x24\xa7\x5a\xa5\xaa\x6a\x32\
+\x93\x8a\x8a\xa9\x16\xf1\x79\xec\x19\x33\xe7\xe4\x3c\x27\xcd\x06\
+\x50\xba\x57\x18\x15\x4f\x0a\x83\x42\x94\x8b\xba\x7f\x77\x1f\xe5\
+\xb4\x5d\x7e\x1e\xa7\xde\xcb\x60\x92\x0b\x38\x94\x24\xcb\xca\x3b\
+\x7b\x2d\x44\xb7\xa4\x92\x89\xee\xa3\x24\x61\x73\x2c\x0c\xb8\x75\
+\x9c\x11\x74\xb8\xd6\xd5\x59\xe1\xa4\x8f\x0f\x0f\xd5\x14\x49\xdf\
+\x6b\x7b\xf9\x1e\x07\xf9\xa1\xa7\xa0\x22\xdb\xb4\x4d\x4a\xb3\xd2\
+\xda\x92\x85\xac\xac\x30\xf9\x08\x4d\x49\x4a\x0b\x87\x32\x59\x85\
+\xd2\x7b\x72\x1f\x6f\x95\xee\xf4\xf5\xdb\xa3\x19\x0f\x8d\x3e\xca\
+\x07\xd0\x7e\x79\x3c\xf0\xe9\x2c\x13\x49\xa5\x49\xeb\x93\xd6\xbf\
+\x5a\x9e\xb5\xbd\x76\x11\xf6\x49\x79\xc3\xd8\xb2\x20\x98\x94\x93\
+\xbc\x07\xd7\x8a\x2c\xa7\x3b\xd2\x1f\x6e\x39\x21\x90\x14\x11\x34\
+\x70\x67\x41\xf1\x4a\x68\x35\x08\xb9\xb9\xee\xc5\xc8\x8b\x0a\x42\
+\x69\x3f\xc0\x26\x09\x17\xcb\xec\x82\x09\x25\x11\x30\xe2\xbe\x47\
+\xc8\x10\x16\x5f\x08\xc4\x93\x79\x84\xc2\x08\x46\x90\x4a\xc4\x7d\
+\xd6\xf2\x87\xac\xab\xc0\x79\x26\x5f\x3c\x0d\x29\x9c\x47\x3d\x21\
+\x9d\xd2\x84\x4b\x74\x94\x24\x9c\x90\x8e\xc7\xad\x70\x53\x03\x08\
+\xbc\x58\x4e\x56\x10\x61\xbb\x68\x7d\x39\xa2\x03\xa8\x81\x61\x3d\
+\x3f\xc1\x44\x6d\x33\x42\x43\x30\x37\x2f\x70\x2d\x00\x33\x82\xaa\
+\xe2\x95\x56\x42\x21\x11\x46\xad\x6e\x99\x23\x42\x1f\xeb\xb9\xfb\
+\x13\x55\xec\x14\x79\x07\xca\xa1\x80\x84\xb1\x0f\xc8\x32\xdc\x48\
+\xb5\xe9\x86\x86\xbe\x35\x71\x81\x2f\x9a\x61\x1a\xbc\x6c\x04\x94\
+\x0d\xe6\xfd\x42\xee\xfb\x2b\x5a\xf1\xa6\x05\x07\x1f\xa1\x2c\x49\
+\x00\x4f\xd9\x54\x7b\xdc\x38\x8a\x11\xf2\x54\x51\xea\x1d\xc1\x51\
+\x55\xac\xd6\x8a\x46\x2e\x56\xf0\xa7\xb5\x0d\x4c\x9b\x2e\xad\x23\
+\x49\xb6\x4b\x81\x08\xec\x36\x62\x23\x75\xee\x10\x28\xcc\x70\xcb\
+\x67\x97\xce\xc3\x11\xf9\x31\x59\xa6\x43\xbc\x27\x90\x25\xc8\x5a\
+\xe5\x6b\xe5\x24\x2f\x90\x95\x95\xd4\xe4\xe0\xa8\x4e\xb6\x73\x9b\
+\x92\xe4\x35\xde\xc8\x0d\xaa\x6a\xd5\x6e\x94\x3d\xa1\x48\xc3\x24\
+\x5a\x65\xfa\x45\x0a\x96\x7b\x3d\x10\x77\x54\x0a\xca\x85\x39\xd8\
+\xa7\x3e\x50\x88\x96\xb9\x95\xa3\x2a\xb5\x80\xd3\xcc\x5e\x79\x19\
+\x41\xb9\x45\x15\x02\x46\xcb\xe8\x30\x3f\x43\x30\x9e\xb9\x2b\x3b\
+\x59\xcb\x14\x22\x4b\x7d\x1a\xda\x28\xc1\x9d\x50\xb5\xff\x3d\xc4\
+\x6b\x85\x13\x98\x96\x15\xb8\x71\x93\x62\xc0\x3e\xa2\x7b\xd6\x97\
+\xcf\x4c\xf6\xe9\xdc\xa7\x54\x28\x40\xd6\xfb\x2c\xd2\xbf\x40\x69\
+\xd6\x95\xad\x6d\x0c\x1d\xd8\x2f\x0a\x9b\xc2\xd4\xab\xc8\x1a\x60\
+\x8a\x9d\x09\x02\x7d\x78\xff\xd0\x06\x2f\x8c\x30\x4b\x62\xfa\x33\
+\xba\x1b\x93\xd5\x0b\x53\xba\x32\x92\x41\x46\x94\x91\x70\x2e\x61\
+\x2f\x07\x06\x08\x62\x30\x25\x94\x7b\xfb\x46\xf2\x78\x49\x5d\x38\
+\x80\x5a\x3b\x61\x41\x38\x74\x07\x34\x3b\xd2\xaf\xed\x05\x70\x74\
+\x17\x34\x81\xc0\x35\x8e\xd0\x5b\xee\x1f\xb6\x84\x15\x24\xe2\x59\
+\x92\x70\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0b\
+\x05\x52\xbf\x27\
+\x00\x71\
+\x00\x74\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0f\x9e\x84\x47\
+\x00\x62\
+\x00\x72\x00\x69\x00\x63\x00\x6b\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x74\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/painting/basicdrawing/images/brick.png b/examples/painting/basicdrawing/images/brick.png
new file mode 100644
index 0000000..87e7df5
Binary files /dev/null and b/examples/painting/basicdrawing/images/brick.png differ
diff --git a/examples/painting/basicdrawing/images/qt-logo.png b/examples/painting/basicdrawing/images/qt-logo.png
new file mode 100644
index 0000000..a8b452e
Binary files /dev/null and b/examples/painting/basicdrawing/images/qt-logo.png differ
diff --git a/examples/painting/concentriccircles.py b/examples/painting/concentriccircles.py
new file mode 100755
index 0000000..90ed072
--- /dev/null
+++ b/examples/painting/concentriccircles.py
@@ -0,0 +1,146 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QRect, QRectF, QSize, Qt, QTimer
+from PyQt5.QtGui import QColor, QPainter, QPalette, QPen
+from PyQt5.QtWidgets import (QApplication, QFrame, QGridLayout, QLabel,
+        QSizePolicy, QWidget)
+
+
+class CircleWidget(QWidget):
+    def __init__(self, parent=None):
+        super(CircleWidget, self).__init__(parent)
+
+        self.floatBased = False
+        self.antialiased = False
+        self.frameNo = 0
+
+        self.setBackgroundRole(QPalette.Base)
+        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
+
+    def setFloatBased(self, floatBased):
+        self.floatBased = floatBased
+        self.update()
+
+    def setAntialiased(self, antialiased):
+        self.antialiased = antialiased
+        self.update()
+
+    def minimumSizeHint(self):
+        return QSize(50, 50)
+
+    def sizeHint(self):
+        return QSize(180, 180)
+
+    def nextAnimationFrame(self):
+        self.frameNo += 1
+        self.update()
+
+    def paintEvent(self, event):
+        painter = QPainter(self)
+        painter.setRenderHint(QPainter.Antialiasing, self.antialiased)
+        painter.translate(self.width() / 2, self.height() / 2)
+
+        for diameter in range(0, 256, 9):
+            delta = abs((self.frameNo % 128) - diameter / 2)
+            alpha = 255 - (delta * delta) / 4 - diameter
+            if alpha > 0:
+                painter.setPen(QPen(QColor(0, diameter / 2, 127, alpha), 3))
+
+                if self.floatBased:
+                    painter.drawEllipse(QRectF(-diameter / 2.0,
+                            -diameter / 2.0, diameter, diameter))
+                else:
+                    painter.drawEllipse(QRect(-diameter / 2,
+                            -diameter / 2, diameter, diameter))
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        aliasedLabel = self.createLabel("Aliased")
+        antialiasedLabel = self.createLabel("Antialiased")
+        intLabel = self.createLabel("Int")
+        floatLabel = self.createLabel("Float")
+
+        layout = QGridLayout()
+        layout.addWidget(aliasedLabel, 0, 1)
+        layout.addWidget(antialiasedLabel, 0, 2)
+        layout.addWidget(intLabel, 1, 0)
+        layout.addWidget(floatLabel, 2, 0)
+
+        timer = QTimer(self)
+
+        for i in range(2):
+            for j in range(2):
+                w = CircleWidget()
+                w.setAntialiased(j != 0)
+                w.setFloatBased(i != 0)
+
+                timer.timeout.connect(w.nextAnimationFrame)
+
+                layout.addWidget(w, i + 1, j + 1)
+
+        timer.start(100)
+        self.setLayout(layout)
+
+        self.setWindowTitle("Concentric Circles")
+
+    def createLabel(self, text):
+        label = QLabel(text)
+        label.setAlignment(Qt.AlignCenter)
+        label.setMargin(2)
+        label.setFrameStyle(QFrame.Box | QFrame.Sunken)
+        return label
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/painting/painterpaths.py b/examples/painting/painterpaths.py
new file mode 100755
index 0000000..71c45fc
--- /dev/null
+++ b/examples/painting/painterpaths.py
@@ -0,0 +1,298 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from math import cos, pi, sin
+
+from PyQt5.QtCore import QSize, Qt
+from PyQt5.QtGui import (QBrush, QColor, QFont, QLinearGradient, QPainter,
+        QPainterPath, QPalette, QPen)
+from PyQt5.QtWidgets import (QApplication, QComboBox, QGridLayout, QLabel,
+        QSizePolicy, QSpinBox, QWidget)
+
+
+class RenderArea(QWidget):
+    def __init__(self, path, parent=None):
+        super(RenderArea, self).__init__(parent)
+
+        self.path = path
+
+        self.penWidth = 1
+        self.rotationAngle = 0
+        self.setBackgroundRole(QPalette.Base)
+
+    def minimumSizeHint(self):
+        return QSize(50, 50)
+
+    def sizeHint(self):
+        return QSize(100, 100)
+
+    def setFillRule(self, rule):
+        self.path.setFillRule(rule)
+        self.update()
+
+    def setFillGradient(self, color1, color2):
+        self.fillColor1 = color1
+        self.fillColor2 = color2
+        self.update()
+
+    def setPenWidth(self, width):
+        self.penWidth = width
+        self.update()
+
+    def setPenColor(self, color):
+        self.penColor = color
+        self.update()
+
+    def setRotationAngle(self, degrees):
+        self.rotationAngle = degrees
+        self.update()
+
+    def paintEvent(self, event):
+        painter = QPainter(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.scale(self.width() / 100.0, self.height() / 100.0)
+        painter.translate(50.0, 50.0)
+        painter.rotate(-self.rotationAngle)
+        painter.translate(-50.0, -50.0)
+
+        painter.setPen(
+                QPen(self.penColor, self.penWidth, Qt.SolidLine, Qt.RoundCap,
+                        Qt.RoundJoin))
+        gradient = QLinearGradient(0, 0, 0, 100)
+        gradient.setColorAt(0.0, self.fillColor1)
+        gradient.setColorAt(1.0, self.fillColor2)
+        painter.setBrush(QBrush(gradient))
+        painter.drawPath(self.path)
+
+
+class Window(QWidget):
+    NumRenderAreas = 9
+
+    def __init__(self):
+        super(Window, self).__init__()
+
+        rectPath = QPainterPath()
+        rectPath.moveTo(20.0, 30.0)
+        rectPath.lineTo(80.0, 30.0)
+        rectPath.lineTo(80.0, 70.0)
+        rectPath.lineTo(20.0, 70.0)
+        rectPath.closeSubpath()
+
+        roundRectPath = QPainterPath()
+        roundRectPath.moveTo(80.0, 35.0)
+        roundRectPath.arcTo(70.0, 30.0, 10.0, 10.0, 0.0, 90.0)
+        roundRectPath.lineTo(25.0, 30.0)
+        roundRectPath.arcTo(20.0, 30.0, 10.0, 10.0, 90.0, 90.0)
+        roundRectPath.lineTo(20.0, 65.0)
+        roundRectPath.arcTo(20.0, 60.0, 10.0, 10.0, 180.0, 90.0)
+        roundRectPath.lineTo(75.0, 70.0)
+        roundRectPath.arcTo(70.0, 60.0, 10.0, 10.0, 270.0, 90.0)
+        roundRectPath.closeSubpath()
+
+        ellipsePath = QPainterPath()
+        ellipsePath.moveTo(80.0, 50.0)
+        ellipsePath.arcTo(20.0, 30.0, 60.0, 40.0, 0.0, 360.0)
+
+        piePath = QPainterPath()
+        piePath.moveTo(50.0, 50.0)
+        piePath.lineTo(65.0, 32.6795)
+        piePath.arcTo(20.0, 30.0, 60.0, 40.0, 60.0, 240.0)
+        piePath.closeSubpath()
+
+        polygonPath = QPainterPath()
+        polygonPath.moveTo(10.0, 80.0)
+        polygonPath.lineTo(20.0, 10.0)
+        polygonPath.lineTo(80.0, 30.0)
+        polygonPath.lineTo(90.0, 70.0)
+        polygonPath.closeSubpath()
+
+        groupPath = QPainterPath()
+        groupPath.moveTo(60.0, 40.0)
+        groupPath.arcTo(20.0, 20.0, 40.0, 40.0, 0.0, 360.0)
+        groupPath.moveTo(40.0, 40.0)
+        groupPath.lineTo(40.0, 80.0)
+        groupPath.lineTo(80.0, 80.0)
+        groupPath.lineTo(80.0, 40.0)
+        groupPath.closeSubpath()
+
+        textPath = QPainterPath()
+        timesFont = QFont('Times', 50)
+        timesFont.setStyleStrategy(QFont.ForceOutline)
+        textPath.addText(10, 70, timesFont, "Qt")
+
+        bezierPath = QPainterPath()
+        bezierPath.moveTo(20, 30)
+        bezierPath.cubicTo(80, 0, 50, 50, 80, 80)
+
+        starPath = QPainterPath()
+        starPath.moveTo(90, 50)
+        for i in range(1, 5):
+            starPath.lineTo(50 + 40 * cos(0.8 * i * pi),
+                    50 + 40 * sin(0.8 * i * pi))
+        starPath.closeSubpath()
+
+        self.renderAreas = [RenderArea(rectPath), RenderArea(roundRectPath),
+                RenderArea(ellipsePath), RenderArea(piePath),
+                RenderArea(polygonPath), RenderArea(groupPath),
+                RenderArea(textPath), RenderArea(bezierPath),
+                RenderArea(starPath)]
+        assert len(self.renderAreas) == 9
+
+        self.fillRuleComboBox = QComboBox()
+        self.fillRuleComboBox.addItem("Odd Even", Qt.OddEvenFill)
+        self.fillRuleComboBox.addItem("Winding", Qt.WindingFill)
+
+        fillRuleLabel = QLabel("Fill &Rule:")
+        fillRuleLabel.setBuddy(self.fillRuleComboBox)
+
+        self.fillColor1ComboBox = QComboBox()
+        self.populateWithColors(self.fillColor1ComboBox)
+        self.fillColor1ComboBox.setCurrentIndex(
+                self.fillColor1ComboBox.findText("mediumslateblue"))
+
+        self.fillColor2ComboBox = QComboBox()
+        self.populateWithColors(self.fillColor2ComboBox)
+        self.fillColor2ComboBox.setCurrentIndex(
+                self.fillColor2ComboBox.findText("cornsilk"))
+
+        fillGradientLabel = QLabel("&Fill Gradient:")
+        fillGradientLabel.setBuddy(self.fillColor1ComboBox)
+
+        fillToLabel = QLabel("to")
+        fillToLabel.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
+
+        self.penWidthSpinBox = QSpinBox()
+        self.penWidthSpinBox.setRange(0, 20)
+
+        penWidthLabel = QLabel("&Pen Width:")
+        penWidthLabel.setBuddy(self.penWidthSpinBox)
+
+        self.penColorComboBox = QComboBox()
+        self.populateWithColors(self.penColorComboBox)
+        self.penColorComboBox.setCurrentIndex(
+                self.penColorComboBox.findText('darkslateblue'))
+
+        penColorLabel = QLabel("Pen &Color:")
+        penColorLabel.setBuddy(self.penColorComboBox)
+
+        self.rotationAngleSpinBox = QSpinBox()
+        self.rotationAngleSpinBox.setRange(0, 359)
+        self.rotationAngleSpinBox.setWrapping(True)
+        self.rotationAngleSpinBox.setSuffix(u'\N{DEGREE SIGN}')
+
+        rotationAngleLabel = QLabel("&Rotation Angle:")
+        rotationAngleLabel.setBuddy(self.rotationAngleSpinBox)
+
+        self.fillRuleComboBox.activated.connect(self.fillRuleChanged)
+        self.fillColor1ComboBox.activated.connect(self.fillGradientChanged)
+        self.fillColor2ComboBox.activated.connect(self.fillGradientChanged)
+        self.penColorComboBox.activated.connect(self.penColorChanged)
+
+        for i in range(Window.NumRenderAreas):
+            self.penWidthSpinBox.valueChanged.connect(self.renderAreas[i].setPenWidth)
+            self.rotationAngleSpinBox.valueChanged.connect(self.renderAreas[i].setRotationAngle)
+
+        topLayout = QGridLayout()
+        for i in range(Window.NumRenderAreas):
+            topLayout.addWidget(self.renderAreas[i], i / 3, i % 3)
+
+        mainLayout = QGridLayout()
+        mainLayout.addLayout(topLayout, 0, 0, 1, 4)
+        mainLayout.addWidget(fillRuleLabel, 1, 0)
+        mainLayout.addWidget(self.fillRuleComboBox, 1, 1, 1, 3)
+        mainLayout.addWidget(fillGradientLabel, 2, 0)
+        mainLayout.addWidget(self.fillColor1ComboBox, 2, 1)
+        mainLayout.addWidget(fillToLabel, 2, 2)
+        mainLayout.addWidget(self.fillColor2ComboBox, 2, 3)
+        mainLayout.addWidget(penWidthLabel, 3, 0)
+        mainLayout.addWidget(self.penWidthSpinBox, 3, 1, 1, 3)
+        mainLayout.addWidget(penColorLabel, 4, 0)
+        mainLayout.addWidget(self.penColorComboBox, 4, 1, 1, 3)
+        mainLayout.addWidget(rotationAngleLabel, 5, 0)
+        mainLayout.addWidget(self.rotationAngleSpinBox, 5, 1, 1, 3)
+        self.setLayout(mainLayout)
+
+        self.fillRuleChanged()
+        self.fillGradientChanged()
+        self.penColorChanged()
+        self.penWidthSpinBox.setValue(2)
+
+        self.setWindowTitle("Painter Paths")
+
+    def fillRuleChanged(self):
+        rule = Qt.FillRule(self.currentItemData(self.fillRuleComboBox))
+
+        for i in range(Window.NumRenderAreas):
+            self.renderAreas[i].setFillRule(rule)
+
+    def fillGradientChanged(self):
+        color1 = QColor(self.currentItemData(self.fillColor1ComboBox))
+        color2 = QColor(self.currentItemData(self.fillColor2ComboBox))
+
+        for i in range(Window.NumRenderAreas):
+            self.renderAreas[i].setFillGradient(color1, color2)
+
+    def penColorChanged(self):
+        color = QColor(self.currentItemData(self.penColorComboBox))
+
+        for i in range(Window.NumRenderAreas):
+            self.renderAreas[i].setPenColor(color)
+
+    def populateWithColors(self, comboBox):
+        colorNames = QColor.colorNames()
+        for name in colorNames:
+            comboBox.addItem(name, name)
+
+    def currentItemData(self, comboBox):
+        return comboBox.itemData(comboBox.currentIndex())
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/painting/svgviewer/files/bubbles.svg b/examples/painting/svgviewer/files/bubbles.svg
new file mode 100644
index 0000000..5173012
--- /dev/null
+++ b/examples/painting/svgviewer/files/bubbles.svg
@@ -0,0 +1,215 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg width="20cm" height="15cm" viewBox="0 0 800 600"
+    xmlns="http://www.w3.org/2000/svg"
+    xmlns:xlink="http://www.w3.org/1999/xlink/"
+    baseProfile="tiny" version="1.2">
+  <title>Spheres</title>
+  <desc>Semi-transparent bubbles on a colored background.</desc>
+    <defs>
+      <!-- Create radial gradients for each bubble. -->
+      <radialGradient id="blueBubble" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" stop-opacity="1" />
+        <stop offset="25%" stop-color="#cdcdff" stop-opacity=".65" />
+        <stop offset="100%" stop-color="#cdaacd" stop-opacity=".75" />
+      </radialGradient>
+      <radialGradient id="redBubble" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" stop-opacity="1" />
+        <stop offset="25%" stop-color="#ffcdcd" stop-opacity=".65" />
+        <stop offset="100%" stop-color="#bbbb99" stop-opacity=".75" />
+      </radialGradient>
+      <radialGradient id="greenBubble" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" stop-opacity="1" />
+        <stop offset="25%" stop-color="#cdffcd" stop-opacity=".65" />
+        <stop offset="100%" stop-color="#99aaaa" stop-opacity=".75" />
+      </radialGradient>
+      <radialGradient id="yellowBubble" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" stop-opacity="1" />
+        <stop offset="25%" stop-color="#ffffcd" stop-opacity=".65" />
+        <stop offset="100%" stop-color="#bbbbaa" stop-opacity=".75" />
+      </radialGradient>
+      <radialGradient id="background" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="400" fx="250" fy="250">
+        <stop offset="0%" stop-color="#ffffee" />
+        <stop offset="100%" stop-color="#ccccaa" />
+      </radialGradient>
+      <linearGradient id="surface" gradientUnits="userSpaceOnUse"
+                      x1="-100" y1="200" x2="400" y2="200">
+        <stop offset="0%" stop-color="#ffffcc" />
+        <stop offset="100%" stop-color="#bbbb88" />
+      </linearGradient>
+
+      <!-- Create radial gradients for each circle to make them look like
+           spheres. -->
+      <radialGradient id="blueSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="blue" />
+        <stop offset="100%" stop-color="#222244" />
+      </radialGradient>
+      <radialGradient id="redSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="red" />
+        <stop offset="100%" stop-color="#442222" />
+      </radialGradient>
+      <radialGradient id="greenSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="green" />
+        <stop offset="100%" stop-color="#113311" />
+      </radialGradient>
+      <radialGradient id="yellowSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="yellow" />
+        <stop offset="100%" stop-color="#444422" />
+      </radialGradient>
+      <radialGradient id="shadowGrad" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="50">
+        <stop offset="0%" stop-color="black" stop-opacity="1.0" />
+        <stop offset="100%" stop-color="black" stop-opacity="0.0" />
+      </radialGradient>
+
+      <!-- Define a shadow for each sphere. -->
+      <circle id="shadow" fill="url(#shadowGrad)" cx="0" cy="0" r="100" />
+      <g id="bubble">
+        <circle fill="black" cx="0" cy="0" r="50" />
+        <circle fill="#a6ce39" cx="0" cy="0" r="33" />
+        <path fill="black" d="M 37,50 L 50,37 L 12,-1 L 22,-11 L 10,-24 L -24,10
+                              L -11,22 L -1,12 Z" />
+        <circle cx="0" cy="0" r="100" />
+      </g>
+    </defs>
+  <g>
+    <rect fill="url(#background)" x="0" y="0" width="800" height="600" />
+  </g>
+
+  <g transform="translate(200,700)">
+    <use xlink:href="#bubble" fill="url(#blueBubble)" />
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="1s" dur="10s" fill="freeze" repeatCount="indefinite" />
+  </g>
+  <g transform="translate(315,700)">
+    <g transform="scale(0.5,0.5)">
+      <use xlink:href="#bubble" fill="url(#redBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="3s" dur="7s" fill="freeze" repeatCount="indefinite" />
+  </g>
+  <g transform="translate(80,700)">
+    <g transform="scale(0.65,0.65)">
+      <use xlink:href="#bubble" fill="url(#greenBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="5s" dur="9s" fill="freeze" repeatCount="indefinite" />
+  </g>
+  <g transform="translate(255,700)">
+    <g transform="scale(0.3,0.3)">
+      <use xlink:href="#bubble" fill="url(#yellowBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="2s" dur="6s" fill="freeze" repeatCount="indefinite" />
+  </g>
+  <g transform="translate(565,700)">
+    <g transform="scale(0.4,0.4)">
+      <use xlink:href="#bubble" fill="url(#blueBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="4s" dur="8s" fill="freeze" repeatCount="indefinite" />
+  </g>
+  <g transform="translate(715,700)">
+    <g transform="scale(0.6,0.6)">
+      <use xlink:href="#bubble" fill="url(#redBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="1s" dur="4s" fill="freeze" repeatCount="indefinite" />
+  </g>
+  <g transform="translate(645,700)">
+    <g transform="scale(0.375,0.375)">
+      <use xlink:href="#bubble" fill="url(#greenBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="0s" dur="11s" fill="freeze" repeatCount="indefinite" />
+  </g>
+  <g transform="translate(555,700)">
+    <g transform="scale(0.9,0.9)">
+      <use xlink:href="#bubble" fill="url(#yellowBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="3s" dur="7.5s" fill="freeze" repeatCount="indefinite" />
+  </g>
+
+  <g transform="translate(360,700)">
+    <g transform="scale(0.5,0.5)">
+      <use xlink:href="#bubble" fill="url(#blueBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="3s" dur="6s" fill="freeze" repeatCount="indefinite" />
+  </g>
+  <g transform="translate(215,700)">
+    <g transform="scale(0.45,0.45)">
+      <use xlink:href="#bubble" fill="url(#redBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="5.5s" dur="7s" fill="freeze" repeatCount="indefinite" />
+  </g>
+  <g transform="translate(420,700)">
+    <g transform="scale(0.75,0.75)">
+      <use xlink:href="#bubble" fill="url(#greenBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="1s" dur="9s" fill="freeze" repeatCount="indefinite" />
+  </g>
+  <g transform="translate(815,700)">
+    <g transform="scale(0.6,0.6)">
+      <use xlink:href="#bubble" fill="url(#yellowBubble)" />
+    </g>
+    <animateTransform attributeName="transform" type="translate" additive="sum"
+        values="0,0; 0,-800" begin="2s" dur="9.5s" fill="freeze" repeatCount="indefinite" />
+  </g>
+
+  <g transform="translate(225,375)" >
+    <g transform="scale(1.0,0.5)" >
+      <path d="M 0 0 L 350 0 L 450 450 L -100 450 z"
+            fill="url(#surface)" stroke="none" />
+    </g>
+  </g>
+    <g transform="translate(200,0)" >
+    <g transform="translate(200,490) scale(2.0,1.0) rotate(45)" >
+      <rect fill="#a6ce39" x="-69" y="-69" width="138" height="138" />
+      <circle fill="black" cx="0" cy="0" r="50" />
+      <circle fill="#a6ce39" cx="0" cy="0" r="33" />
+      <path fill="black" d="M 37,50 L 50,37 L 12,-1 L 22,-11 L 10,-24 L -24,10
+                            L -11,22 L -1,12 Z" />
+      <animateTransform attributeName="transform"  type="rotate" additive="sum" values="0; 360"
+	         begin="0s" dur="10s" fill="freeze" repeatCount="indefinite" />
+    </g>
+    <g transform="translate(200,375)">
+      <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+      <circle fill="url(#blueSphere)" cx="0" cy="0" r="100" />
+    </g>
+    <g transform="translate(315,440)">
+      <g transform="scale(0.5,0.5)">
+        <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+        <circle fill="url(#redSphere)" cx="0" cy="0" r="100" />
+      </g>
+    </g>
+    <g transform="translate(80,475)">
+      <g transform="scale(0.65,0.65)">
+        <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+        <circle fill="url(#greenSphere)" cx="0" cy="0" r="100" />
+      </g>
+    </g>
+    <g transform="translate(255,525)">
+      <g transform="scale(0.3,0.3)">
+        <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+        <circle fill="url(#yellowSphere)" cx="0" cy="0" r="100" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/examples/painting/svgviewer/files/cubic.svg b/examples/painting/svgviewer/files/cubic.svg
new file mode 100644
index 0000000..492bb72
--- /dev/null
+++ b/examples/painting/svgviewer/files/cubic.svg
@@ -0,0 +1,77 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="10cm" height="10cm" viewBox="0 0 1000 1000"
+     xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny">
+  <title>Example cubic02 - cubic Bezier commands in path data</title>
+  <desc>Picture showing examples of "C" and "S" commands,
+        along with annotations showing the control points
+        and end points</desc>
+
+  <rect fill="none" stroke="blue" stroke-width="1" x="1" y="1" width="998" height="998" />
+
+  <!-- Path 1 -->
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="100,200 100,100" />
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="400,100 400,200" />
+  <path fill="none" stroke="red" stroke-width="5" d="M100,200 C100,100 400,100 400,200" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="100" cy="200" r="10" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="400" cy="200" r="10" />
+  <circle class="CtlPoint" cx="100" cy="100" r="10" />
+  <circle class="CtlPoint" cx="400" cy="100" r="10" />
+  <text text-anchor="middle" font-size="22" font-family="Verdana" x="250" y="275">M100,200 C100,100 400,100 400,200</text>
+
+  <!-- Path 2 -->
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="100,500 25,400" />
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="475,400 400,500" />
+  <path fill="none" stroke="red" stroke-width="5" d="M100,500 C25,400 475,400 400,500" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="100" cy="500" r="10" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="400" cy="500" r="10" />
+  <circle fill="#888888" stroke="none" cx="25" cy="400" r="10" />
+  <circle fill="#888888" stroke="none" cx="475" cy="400" r="10" />
+  <text text-anchor="middle" font-size="22" font-family="Verdana" x="250" y="575">M100,500 C25,400 475,400 400,500</text>
+
+  <!-- Path 3 -->
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="100,800 175,700" />
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="325,700 400,800" />
+  <path fill="none" stroke="red" stroke-width="5" d="M100,800 C175,700 325,700 400,800" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="100" cy="800" r="10" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="400" cy="800" r="10" />
+  <circle fill="#888888" stroke="none" cx="175" cy="700" r="10" />
+  <circle fill="#888888" stroke="none" cx="325" cy="700" r="10" />
+  <text text-anchor="middle" font-size="22" font-family="Verdana" x="250" y="875">M100,800 C175,700 325,700 400,800</text>
+
+  <!-- Path 4 -->
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="600,200 675,100" />
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="975,100 900,200" />
+  <path fill="none" stroke="red" stroke-width="5" d="M600,200 C675,100 975,100 900,200" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="600" cy="200" r="10" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="900" cy="200" r="10" />
+  <circle fill="#888888" stroke="none" cx="675" cy="100" r="10" />
+  <circle fill="#888888" stroke="none" cx="975" cy="100" r="10" />
+  <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="275">M600,200 C675,100 975,100 900,200</text>
+
+  <!-- Path 5 -->
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="600,500 600,350" />
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="900,650 900,500" />
+  <path fill="none" stroke="red" stroke-width="5" d="M600,500 C600,350 900,650 900,500" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="600" cy="500" r="10" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="900" cy="500" r="10" />
+  <circle fill="#888888" stroke="none" cx="600" cy="350" r="10" />
+  <circle fill="#888888" stroke="none" cx="900" cy="650" r="10" />
+  <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="575">M600,500 C600,350 900,650 900,500</text>
+
+  <!-- Path 6 (C and S command) -->
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="600,800 625,700" />
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="725,700 750,800" />
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="750,800 775,900" />
+  <polyline fill="none" stroke="#888888" stroke-width="2" points="875,900 900,800" />
+  <path fill="none" stroke="red" stroke-width="5" d="M600,800 C625,700 725,700 750,800
+                                       S875,900 900,800" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="600" cy="800" r="10" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="750" cy="800" r="10" />
+  <circle fill="none" stroke="#888888" stroke-width="2" cx="900" cy="800" r="10" />
+  <circle fill="#888888" stroke="none" cx="625" cy="700" r="10" />
+  <circle fill="#888888" stroke="none" cx="725" cy="700" r="10" />
+  <circle fill="#888888" stroke="none" cx="875" cy="900" r="10" />
+  <circle fill="none" stroke="blue" stroke-width="4" cx="775" cy="900" r="9" />
+  <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="945">M600,800 C625,700 725,700 750,800</text>
+  <text text-anchor="middle" font-size="22" font-family="Verdana" x="750" y="975">S875,900 900,800</text>
+</svg>
diff --git a/examples/painting/svgviewer/files/spheres.svg b/examples/painting/svgviewer/files/spheres.svg
new file mode 100644
index 0000000..b23164b
--- /dev/null
+++ b/examples/painting/svgviewer/files/spheres.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="8cm" height="8cm" viewBox="0 0 400 400"
+    xmlns="http://www.w3.org/2000/svg"
+    xmlns:xlink="http://www.w3.org/1999/xlink/"
+    baseProfile="tiny" version="1.2">
+  <title>Spheres</title>
+  <desc>Gradient filled spheres with different colors.</desc>
+    <defs>
+      <!-- Create radial gradients for each circle to make them look like
+           spheres. -->
+      <radialGradient id="blueSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="blue" />
+        <stop offset="100%" stop-color="#222244" />
+      </radialGradient>
+      <radialGradient id="redSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="red" />
+        <stop offset="100%" stop-color="#442222" />
+      </radialGradient>
+      <radialGradient id="greenSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="green" />
+        <stop offset="100%" stop-color="#113311" />
+      </radialGradient>
+      <radialGradient id="yellowSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="yellow" />
+        <stop offset="100%" stop-color="#444422" />
+      </radialGradient>
+      <radialGradient id="shadowGrad" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="50">
+        <stop offset="0%" stop-color="black" stop-opacity="1.0" />
+        <stop offset="100%" stop-color="white" stop-opacity="0.0" />
+      </radialGradient>
+
+      <!-- Define a shadow for each sphere. -->
+      <circle id="shadow" fill="url(#shadowGrad)" cx="0" cy="0" r="100" />
+    </defs>
+  <g fill="#ffee99" stroke="none" >
+    <rect x="0" y="0" width="400" height="400" />
+  </g>
+  <g fill="white" stroke="none" >
+    <rect x="0" y="175" width="400" height="225" />
+  </g>
+  <g transform="translate(200,175)">
+    <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+    <circle fill="url(#blueSphere)" cx="0" cy="0" r="100" />
+  </g>
+  <g transform="translate(315,240)">
+    <g transform="scale(0.5,0.5)">
+      <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+      <circle fill="url(#redSphere)" cx="0" cy="0" r="100" />
+    </g>
+  </g>
+  <g transform="translate(80,275)">
+    <g transform="scale(0.65,0.65)">
+      <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+      <circle fill="url(#greenSphere)" cx="0" cy="0" r="100" />
+    </g>
+  </g>
+  <g transform="translate(255,325)">
+    <g transform="scale(0.3,0.3)">
+      <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+      <circle fill="url(#yellowSphere)" cx="0" cy="0" r="100" />
+    </g>
+  </g>
+</svg>
diff --git a/examples/painting/svgviewer/svgviewer.py b/examples/painting/svgviewer/svgviewer.py
new file mode 100755
index 0000000..fa1c997
--- /dev/null
+++ b/examples/painting/svgviewer/svgviewer.py
@@ -0,0 +1,298 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFile, QSize, Qt
+from PyQt5.QtGui import QBrush, QColor, QImage, QPainter, QPixmap, QPen
+from PyQt5.QtWidgets import (QActionGroup, QApplication, QFileDialog,
+        QGraphicsItem, QGraphicsRectItem, QGraphicsScene, QGraphicsView,
+        QMainWindow, QMenu, QMessageBox, QWidget)
+from PyQt5.QtOpenGL import QGL, QGLFormat, QGLWidget
+from PyQt5.QtSvg import QGraphicsSvgItem
+
+import svgviewer_rc
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.currentPath = ''
+
+        self.view = SvgView()
+
+        fileMenu = QMenu("&File", self)
+        openAction = fileMenu.addAction("&Open...")
+        openAction.setShortcut("Ctrl+O")
+        quitAction = fileMenu.addAction("E&xit")
+        quitAction.setShortcut("Ctrl+Q")
+
+        self.menuBar().addMenu(fileMenu)
+
+        viewMenu = QMenu("&View", self)
+        self.backgroundAction = viewMenu.addAction("&Background")
+        self.backgroundAction.setEnabled(False)
+        self.backgroundAction.setCheckable(True)
+        self.backgroundAction.setChecked(False)
+        self.backgroundAction.toggled.connect(self.view.setViewBackground)
+
+        self.outlineAction = viewMenu.addAction("&Outline")
+        self.outlineAction.setEnabled(False)
+        self.outlineAction.setCheckable(True)
+        self.outlineAction.setChecked(True)
+        self.outlineAction.toggled.connect(self.view.setViewOutline)
+
+        self.menuBar().addMenu(viewMenu)
+
+        rendererMenu = QMenu("&Renderer", self)
+        self.nativeAction = rendererMenu.addAction("&Native")
+        self.nativeAction.setCheckable(True)
+        self.nativeAction.setChecked(True)
+
+        if QGLFormat.hasOpenGL():
+            self.glAction = rendererMenu.addAction("&OpenGL")
+            self.glAction.setCheckable(True)
+
+        self.imageAction = rendererMenu.addAction("&Image")
+        self.imageAction.setCheckable(True)
+
+        if QGLFormat.hasOpenGL():
+            rendererMenu.addSeparator()
+            self.highQualityAntialiasingAction = rendererMenu.addAction("&High Quality Antialiasing")
+            self.highQualityAntialiasingAction.setEnabled(False)
+            self.highQualityAntialiasingAction.setCheckable(True)
+            self.highQualityAntialiasingAction.setChecked(False)
+            self.highQualityAntialiasingAction.toggled.connect(self.view.setHighQualityAntialiasing)
+
+        rendererGroup = QActionGroup(self)
+        rendererGroup.addAction(self.nativeAction)
+
+        if QGLFormat.hasOpenGL():
+            rendererGroup.addAction(self.glAction)
+
+        rendererGroup.addAction(self.imageAction)
+
+        self.menuBar().addMenu(rendererMenu)
+
+        openAction.triggered.connect(self.openFile)
+        quitAction.triggered.connect(QApplication.instance().quit)
+        rendererGroup.triggered.connect(self.setRenderer)
+
+        self.setCentralWidget(self.view)
+        self.setWindowTitle("SVG Viewer")
+
+    def openFile(self, path=None):
+        if not path:
+            path, _ = QFileDialog.getOpenFileName(self, "Open SVG File",
+                    self.currentPath, "SVG files (*.svg *.svgz *.svg.gz)")
+
+        if path:
+            svg_file = QFile(path)
+            if not svg_file.exists():
+                QMessageBox.critical(self, "Open SVG File",
+                        "Could not open file '%s'." % path)
+
+                self.outlineAction.setEnabled(False)
+                self.backgroundAction.setEnabled(False)
+                return
+
+            self.view.openFile(svg_file)
+
+            if not path.startswith(':/'):
+                self.currentPath = path
+                self.setWindowTitle("%s - SVGViewer" % self.currentPath)
+
+            self.outlineAction.setEnabled(True)
+            self.backgroundAction.setEnabled(True)
+
+            self.resize(self.view.sizeHint() + QSize(80, 80 + self.menuBar().height()))
+
+    def setRenderer(self, action):
+        if QGLFormat.hasOpenGL():
+            self.highQualityAntialiasingAction.setEnabled(False)
+
+        if action == self.nativeAction:
+            self.view.setRenderer(SvgView.Native)
+        elif action == self.glAction:
+            if QGLFormat.hasOpenGL():
+                self.highQualityAntialiasingAction.setEnabled(True)
+                self.view.setRenderer(SvgView.OpenGL)
+        elif action == self.imageAction:
+            self.view.setRenderer(SvgView.Image)
+
+
+class SvgView(QGraphicsView):
+    Native, OpenGL, Image = range(3)
+
+    def __init__(self, parent=None):
+        super(SvgView, self).__init__(parent)
+
+        self.renderer = SvgView.Native
+        self.svgItem = None
+        self.backgroundItem = None
+        self.outlineItem = None
+        self.image = QImage()
+
+        self.setScene(QGraphicsScene(self))
+        self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
+        self.setDragMode(QGraphicsView.ScrollHandDrag)
+        self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate)
+
+        # Prepare background check-board pattern.
+        tilePixmap = QPixmap(64, 64)
+        tilePixmap.fill(Qt.white)
+        tilePainter = QPainter(tilePixmap)
+        color = QColor(220, 220, 220)
+        tilePainter.fillRect(0, 0, 32, 32, color)
+        tilePainter.fillRect(32, 32, 32, 32, color)
+        tilePainter.end()
+
+        self.setBackgroundBrush(QBrush(tilePixmap))
+
+    def drawBackground(self, p, rect):
+        p.save()
+        p.resetTransform()
+        p.drawTiledPixmap(self.viewport().rect(),
+                self.backgroundBrush().texture())
+        p.restore()
+
+    def openFile(self, svg_file):
+        if not svg_file.exists():
+            return
+
+        s = self.scene()
+
+        if self.backgroundItem:
+            drawBackground = self.backgroundItem.isVisible()
+        else:
+            drawBackground = False
+
+        if self.outlineItem:
+            drawOutline = self.outlineItem.isVisible()
+        else:
+            drawOutline = True
+
+        s.clear()
+        self.resetTransform()
+
+        self.svgItem = QGraphicsSvgItem(svg_file.fileName())
+        self.svgItem.setFlags(QGraphicsItem.ItemClipsToShape)
+        self.svgItem.setCacheMode(QGraphicsItem.NoCache)
+        self.svgItem.setZValue(0)
+
+        self.backgroundItem = QGraphicsRectItem(self.svgItem.boundingRect())
+        self.backgroundItem.setBrush(Qt.white)
+        self.backgroundItem.setPen(QPen(Qt.NoPen))
+        self.backgroundItem.setVisible(drawBackground)
+        self.backgroundItem.setZValue(-1)
+
+        self.outlineItem = QGraphicsRectItem(self.svgItem.boundingRect())
+        outline = QPen(Qt.black, 2, Qt.DashLine)
+        outline.setCosmetic(True)
+        self.outlineItem.setPen(outline)
+        self.outlineItem.setBrush(QBrush(Qt.NoBrush))
+        self.outlineItem.setVisible(drawOutline)
+        self.outlineItem.setZValue(1)
+
+        s.addItem(self.backgroundItem)
+        s.addItem(self.svgItem)
+        s.addItem(self.outlineItem)
+
+        s.setSceneRect(self.outlineItem.boundingRect().adjusted(-10, -10, 10, 10))
+
+    def setRenderer(self, renderer):
+        self.renderer = renderer
+
+        if self.renderer == SvgView.OpenGL:
+            if QGLFormat.hasOpenGL():
+                self.setViewport(QGLWidget(QGLFormat(QGL.SampleBuffers)))
+        else:
+            self.setViewport(QWidget())
+
+    def setHighQualityAntialiasing(self, highQualityAntialiasing):
+        if QGLFormat.hasOpenGL():
+            self.setRenderHint(QPainter.HighQualityAntialiasing,
+                    highQualityAntialiasing)
+
+    def setViewBackground(self, enable):
+        if self.backgroundItem:
+            self.backgroundItem.setVisible(enable)
+
+    def setViewOutline(self, enable):
+        if self.outlineItem:
+            self.outlineItem.setVisible(enable)
+
+    def paintEvent(self, event):
+        if self.renderer == SvgView.Image:
+            if self.image.size() != self.viewport().size():
+                self.image = QImage(self.viewport().size(),
+                        QImage.Format_ARGB32_Premultiplied)
+
+            imagePainter = QPainter(self.image)
+            QGraphicsView.render(self, imagePainter)
+            imagePainter.end()
+
+            p = QPainter(self.viewport())
+            p.drawImage(0, 0, self.image)
+        else:
+            super(SvgView, self).paintEvent(event)
+
+    def wheelEvent(self, event):
+        factor = pow(1.2, event.delta() / 240.0)
+        self.scale(factor, factor)
+        event.accept()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    window = MainWindow()
+    if len(sys.argv) == 2:
+        window.openFile(sys.argv[1])
+    else:
+        window.openFile(':/files/bubbles.svg')
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/painting/svgviewer/svgviewer.qrc b/examples/painting/svgviewer/svgviewer.qrc
new file mode 100644
index 0000000..b1b0f24
--- /dev/null
+++ b/examples/painting/svgviewer/svgviewer.qrc
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+	<file>files/bubbles.svg</file>
+	<file>files/cubic.svg</file>
+	<file>files/spheres.svg</file>
+</qresource>
+</RCC>
+
diff --git a/examples/painting/svgviewer/svgviewer_rc.py b/examples/painting/svgviewer/svgviewer_rc.py
new file mode 100644
index 0000000..2ddde14
--- /dev/null
+++ b/examples/painting/svgviewer/svgviewer_rc.py
@@ -0,0 +1,250 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Tue May 14 10:02:47 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x03\x58\
+\x00\
+\x00\x14\xa0\x78\x9c\xb5\x98\x6f\x6f\xa2\x40\x10\xc6\xdf\xfb\x29\
+\xe6\xf6\xde\xdc\x25\x52\x11\xf9\x7b\x51\x9b\x94\xdc\xcb\x4b\x4c\
+\x9a\xdc\x7b\x0a\xab\x6c\x0e\xc1\xc0\xb6\xda\xfb\xf4\x37\xbb\xeb\
+\xd2\xd6\x03\x6d\x65\x4b\x22\x15\x2b\xbf\x79\x66\xe6\x61\x19\x99\
+\xdf\x1e\xb6\x05\x3c\xd1\xba\x61\x55\xb9\x20\xd3\x1b\x9b\x40\xc3\
+\x93\x32\x4b\x8a\xaa\xa4\x0b\x52\x56\xe4\x76\x39\x9a\x37\x4f\x1b\
+\xd8\xb3\x8c\xe7\xf8\x15\x3b\xdd\x12\xc8\x29\xdb\xe4\x5c\x1f\x3d\
+\x31\xba\xbf\xab\x0e\x0b\x62\x83\x0d\x53\xdb\x56\x3b\x32\x02\xb1\
+\x61\x80\xb2\x59\x90\x9c\xf3\xdd\x8f\xc9\x64\xbf\xdf\xdf\xec\x67\
+\x37\x55\xbd\x99\x38\xf8\x9d\x09\x92\xc9\xeb\xf8\x0e\x81\x87\xa4\
+\xa1\xab\xba\x5a\xb3\x02\x05\x70\x56\x3e\x93\x25\x92\xe6\x9c\xf1\
+\x82\x2e\x7f\x1e\x92\xed\xae\xa0\x90\x3e\x3e\xb0\xd4\x76\xc0\x52\
+\xef\xe0\x8e\xfe\x65\xb4\x86\xb4\xda\x6e\x51\x7d\x03\xac\x84\x5d\
+\xc2\x73\xc8\x12\x9e\xcc\x27\xea\x5c\x41\xc9\x68\x93\x2e\x57\x2c\
+\xe5\x8f\x35\x85\x26\xaf\xf6\xac\xdc\x00\x55\xd0\x06\xaa\x35\x90\
+\x98\x00\x12\x80\xdc\x93\x96\x36\x56\x99\xe0\x26\xca\x22\x4a\x81\
+\xe4\xa4\x2c\x2b\x9e\x70\xd4\xdd\xb4\x20\x9e\xa3\xb2\xaa\xe4\x75\
+\x55\xc0\xae\x62\x25\x6f\x5e\xce\x44\x26\xc5\x97\xfa\x78\x3e\x91\
+\x42\x46\x42\x52\x4d\x53\x0e\x98\x6d\x21\xca\x5d\x52\xd1\x80\xba\
+\xfa\x83\xb9\x3f\x14\x8f\xed\x91\xa5\xcb\x4f\xe0\x20\xf7\xcf\x72\
+\x7f\xfc\x34\x8a\xc2\x97\x9e\xc8\x83\x89\x62\x7f\xb1\x2c\x58\x89\
+\x3a\x4c\xc1\xb2\x64\x01\x76\x55\xf1\x5c\xb0\x92\x76\x46\xfc\x1a\
+\xca\xed\x34\x28\x36\x45\xc9\x16\x0d\xb7\xc7\x8e\x6a\xf0\x18\x5f\
+\x32\xd0\x70\xaa\xab\x68\xe0\x2a\x7a\x4b\x15\xca\xbb\x88\x35\xcd\
+\x4e\x69\x1e\x81\x6c\x41\x7e\x69\x7d\xf1\xf4\x15\xb2\x03\x9d\xb2\
+\x3a\x2d\x3e\x2a\x37\x3d\xc8\x02\xe0\x1b\xac\xbe\x84\xd5\xe2\x83\
+\xc1\x4c\xf7\x22\x33\x2d\x92\x06\xeb\x14\xf3\x62\x25\x4a\x76\x22\
+\x65\xfa\xa1\xd3\xdc\xfe\xd3\x38\x3d\x70\x10\x3b\x2b\x29\xd3\xbc\
+\xc2\xff\x6d\x59\x96\x15\x98\xc8\x1a\x5d\x6d\x35\xec\x2f\xe6\xe2\
+\x38\xc7\xc3\x75\xb2\x65\x05\x72\x7e\xd3\x3a\x4b\xca\x44\x3a\xd3\
+\xf1\x6c\xe9\x4d\x27\xf0\xc8\xf2\x62\x37\xf0\xca\xc4\x60\x27\x56\
+\x75\x0c\x5a\xd5\xc3\x58\x8e\x37\x76\xcd\x39\x35\x90\x34\x99\x80\
+\x37\xd8\xa9\x42\x5e\xec\x1c\x89\xdd\xe4\xe1\x46\xf5\x3e\xc1\xa8\
+\x17\x98\x27\x14\x1d\x24\x95\x06\x51\x04\xf7\x6a\x02\x16\xaa\x0f\
+\x61\xce\xbf\x5e\xeb\xdf\x33\x3d\xea\xb4\xef\xcc\xa0\x7d\x43\xb1\
+\xd2\x62\xcc\xc0\x98\x7f\x67\x8e\xa4\xc9\x0c\xc2\xc1\xfe\x0d\xe5\
+\xb5\xad\x04\x42\x0f\x7a\xb8\x81\xc3\x4f\x30\xf0\x05\xe6\x19\xfb\
+\x4d\xb5\xfd\x82\xab\x11\x33\xa7\x17\x61\xce\xc1\x61\xeb\xe0\x73\
+\x5d\xea\xb4\xb0\x6b\xc8\xc2\xfe\x71\xf9\xf7\x31\xb6\xb9\x61\x21\
+\x52\x34\x88\x06\x0f\x0b\x5a\x5f\xec\x6b\x64\x37\xfa\x6a\xbb\xf9\
+\x9f\x30\x2c\x44\xef\x64\x9e\xf1\x9f\xaf\x2d\xdc\x3b\x38\x5c\x44\
+\x44\xfd\x88\xe1\x16\x0e\xde\x0c\x11\x97\xba\xd4\x69\x61\xcf\xa0\
+\x85\xc5\x1d\x40\xfc\x9d\x79\xc6\x2c\x8c\x34\xdf\x53\x19\x0c\x9b\
+\x22\xb4\xbe\xf8\x28\x10\x7a\xd0\xc3\x2d\x6c\x70\x8c\x88\x86\x8f\
+\x11\xad\x2c\xd9\x94\xeb\x2c\xac\x11\xfe\x7f\x08\x73\x16\xf6\x5a\
+\x0b\x9f\xeb\x52\xa7\x85\x7d\xf8\x16\xcb\x9f\x8d\xf7\xfa\x87\xe8\
+\x77\x83\xa6\x16\x37\x05\xdf\x31\x39\x5a\x04\xc7\x3b\x0b\xa6\xfe\
+\x66\xb4\x18\x48\x55\x34\x08\xf0\xa2\x8f\x8c\x51\x43\x45\x93\xf5\
+\x1f\x36\x06\xe9\x5a\xc6\xbe\x4e\xff\x6d\x19\xda\x07\x00\x17\xb6\
+\xfb\x1e\x49\xc3\x2f\x5c\x83\xe3\x93\x74\xb5\x61\x66\x34\x7c\x24\
+\xf3\xfb\xe7\xa9\xf7\x22\x82\xe1\x88\x50\xdf\x12\xa3\x8f\x14\xa7\
+\xeb\x21\x8f\x7b\xd4\x74\x0a\x8c\xcc\xaf\x4f\x91\xab\xd7\xa7\x73\
+\x26\xd6\xeb\x93\xd9\xd0\x62\x69\x3c\xb5\xbd\x8e\x34\x17\x4f\x06\
+\x97\xa3\x7f\xef\x90\xc3\xc1\
+\x00\x00\x02\xd2\
+\x00\
+\x00\x0c\x36\x78\x9c\xd5\x56\x7f\x6b\xdb\x30\x10\xfd\xbf\x9f\xe2\
+\xa6\x32\x68\x20\x89\x7f\x24\x6e\x9b\xe2\xa4\xb0\x0d\xf6\xe7\x06\
+\xa5\x1f\xc0\xb5\xcf\xb6\x88\x62\x05\x49\xad\x9b\x6f\xbf\x93\xe5\
+\x39\x4e\x9b\x36\x4b\xe9\x0a\x15\x18\x4b\xf6\xdd\xd3\xbd\xa7\x83\
+\xa7\xf8\xfa\x71\x25\xe0\x01\x95\xe6\xb2\x9a\xb3\x60\xec\x33\xd0\
+\x26\xa9\xb2\x44\xc8\x0a\xe7\xac\x92\xec\x7a\x71\x12\xeb\x87\x02\
+\x6a\x9e\x99\x72\xce\x2e\xd3\x15\x83\x12\x79\x51\x9a\x76\xf1\xc0\
+\xb1\xfe\x26\x1f\xe7\xcc\x07\x1f\xa6\x7e\xf3\xb0\x13\xa0\x41\xd8\
+\x95\x9e\xb3\xd2\x98\xf5\x95\xe7\xd5\x75\x3d\xae\x27\x63\xa9\x0a\
+\x2f\xf4\x7d\xdf\x23\xd0\x5e\xd8\xd5\xa3\xe0\xd5\x72\x5f\x70\x30\
+\x9b\xcd\xbc\xe6\xaf\xe7\xe2\xef\x12\x8d\xbf\x95\xcc\xb9\xa0\x0a\
+\x0d\xaf\x36\xac\xcf\x20\x64\x0b\x8a\x8a\x0d\x37\x02\x17\x37\xeb\
+\x12\x15\xea\xd8\x73\x4b\xfb\x23\x43\x9d\x2e\x7e\xaa\x24\xe3\x58\
+\x19\x20\x10\x81\x19\x68\x17\x47\x24\x4d\x09\x19\xcf\x73\x5a\xd1\
+\xdf\x54\x0a\xa9\xf4\x38\xf6\x9a\xa4\x66\x73\xca\xcf\xb5\x9b\xd2\
+\xe2\xcb\x68\x04\xdf\x15\x26\x06\xc1\x22\x26\x02\x8a\x16\x59\x43\
+\x2e\x15\x60\x92\x96\x90\x72\x95\x0a\x04\x23\x61\x95\x2c\xe9\x5d\
+\xe2\x0a\x84\x94\x4b\x10\x7c\x89\x2d\x52\x33\xda\x2a\xc6\x30\x1a\
+\x75\x3b\x38\xd8\xae\x5e\x9e\xcd\xd9\x9d\xb8\x47\x47\x8c\x75\xdb\
+\xdd\x56\xdc\x90\xd4\xf7\x1a\xd5\xcd\x3a\x49\xf1\x57\x75\xab\x91\
+\xf5\xc1\x7b\x23\xb5\x87\xc5\x20\xdd\x34\x2f\x45\xaa\xd1\x89\x41\
+\x4e\x5f\x47\x91\x9d\x6c\xdc\x64\xd1\xa5\xc7\xda\xc8\x35\xc8\x3c\
+\xd7\x48\xa7\xee\x7f\xb5\x4d\x22\xd7\xa3\x46\x9e\x39\xab\x4b\x6e\
+\xa8\x14\xef\xa5\xf8\x8b\xe8\x49\x82\x25\xf0\x4a\x3c\x55\xf3\x24\
+\xe1\x34\xa4\x31\x9d\xf6\x72\x62\x6f\x57\x98\xd7\xf4\x52\x98\x7d\
+\x6a\xb9\xa8\xfe\xe3\xd4\x9a\x4e\xad\x5e\x6f\x54\xab\x50\x88\xd5\
+\xa7\xd6\xab\x61\x70\x9c\x62\x41\x30\x99\x04\xc1\x1b\x15\xdb\xa0\
+\x10\xb2\xfe\xd4\x92\x39\x0a\xc7\x76\x99\xed\xb3\x37\x6a\xa6\xcb\
+\x24\x93\xb5\xfd\xf4\xff\x14\x3b\x42\xb0\x3b\x91\xa4\xcb\xf6\x93\
+\xa4\xbd\xb9\xd9\xb4\x6e\x78\x84\x22\xad\xea\xbb\x20\xfe\x0e\xc8\
+\x73\x89\xfa\x4e\xf2\x03\x73\x5e\x21\x24\xe0\xd4\xd9\x3a\x88\x33\
+\x86\x1d\x5f\x68\x4d\x65\xab\x25\x6b\xbc\x8c\xe4\x53\xe2\xec\x74\
+\x2b\xef\x80\xbd\x20\x55\x5b\x93\xf5\x36\x67\x68\x71\xd1\x22\x9c\
+\x92\xfd\xe1\x6c\x66\x99\x28\xb9\x6c\x6e\x01\x15\xf1\x6a\xe3\x15\
+\xa6\x06\x1c\xa2\x03\x6c\x2f\x06\xd6\xf5\xbb\x8b\xc1\xb4\xdb\x21\
+\xf6\x8a\x1d\xf0\x4e\xa4\x83\xd0\xc1\x45\xb4\x1f\x3c\x0c\xa3\x67\
+\xe0\x46\x25\x95\x26\xbd\x56\x74\x23\xb0\x53\x41\x96\x7c\x46\xd7\
+\x8c\x21\xa1\x0c\xda\x36\x88\xa9\xb3\xa0\xb9\x48\x5c\x95\x0a\x73\
+\x22\xfa\x57\xb9\xfd\xd9\xd1\x30\x8a\x06\xa0\xd3\x44\xe0\x19\xf5\
+\xc2\xd0\x1f\x13\x54\xa7\x5b\x7b\x00\x3d\xd1\xb7\xbe\xfc\xba\xe8\
+\x07\xaa\x9e\x04\xd1\x30\x9c\xfa\x5d\xd5\x3b\x61\xae\x1a\xaa\xc4\
+\x55\xd3\xb5\xc3\x7b\x52\xdb\x4b\xae\x33\xd1\xc3\x0d\x55\xfc\x03\
+\xc9\x4b\x7f\x18\xf6\x4e\x66\x2f\xc7\x73\x4b\xf2\xfc\x43\x59\xf6\
+\xcc\xef\x7d\x78\x86\x51\x34\x9c\x84\x07\x88\x4e\xa8\xb2\xc9\x47\
+\xd2\xec\x3b\xd6\x31\x3c\x63\x7b\x69\x5f\x9c\xfc\x01\x4d\xb4\x75\
+\x0c\
+\x00\x00\x05\xf1\
+\x00\
+\x00\x27\x73\x78\x9c\xdd\x9a\x6d\x6f\x9b\x48\x10\x80\x3f\x5f\x7e\
+\xc5\x94\xea\xa4\x5a\xb2\xcd\xf2\x66\x9b\xd6\x4e\xa5\x26\x51\x75\
+\x52\xaf\x8d\x9a\xe4\x4e\x77\xdf\xd6\xb0\xd8\x28\x18\x2c\xc0\x71\
+\xdc\x5f\x7f\xb3\xcb\xbb\x63\xc7\x90\x92\x5c\x5c\xa4\x64\x17\xbc\
+\xcc\xee\x3c\xbb\x3b\x33\x0c\x8c\x3f\xde\x2f\x3c\xb8\x63\x61\xe4\
+\x06\xfe\x44\x52\xfa\x44\x82\x28\xa6\xbe\x4d\xbd\xc0\x67\x13\xc9\
+\x0f\xa4\x8f\xa7\x27\xe3\x37\xe7\xdf\xce\xae\xff\xb9\xbc\x80\xe8\
+\x6e\x06\x97\x37\x9f\xbe\xfc\x71\x06\x52\x4f\x96\xff\xd6\xce\x64\
+\xf9\xfc\xfa\x1c\xae\xfe\xfa\x0c\x78\xb3\x2c\x5f\x7c\x95\x40\x9a\
+\xc7\xf1\xf2\xbd\x2c\xaf\xd7\xeb\xfe\x5a\xeb\x07\xe1\x4c\xbe\xfe\
+\x2e\xab\x84\x28\xf2\xf7\x8b\xb3\x1e\xb6\xed\xf1\x13\x62\x12\x9d\
+\xdf\x2c\xa3\x50\x85\xf4\xed\xd8\x96\xb0\x2b\xde\xc3\xda\xb5\xe3\
+\xf9\x44\x52\x89\xb5\x90\x60\xce\xdc\xd9\x3c\xc6\xb1\x19\xfc\xec\
+\xce\x65\xeb\x4f\xc1\xfd\x44\x22\x40\x60\x44\x08\x0c\x08\x91\x4e\
+\x00\x0f\x54\xc4\x8f\x26\x3b\xfa\xc6\xbe\x08\xef\xa3\xd4\xec\xfd\
+\xbd\xe7\xfa\xb7\xbb\x1a\x2b\xa6\x69\xca\xe2\x57\x39\x69\x3f\xa5\
+\x11\xbb\x0c\x03\xc7\xf5\x10\x47\xec\xfa\x1b\xa9\x8c\x4b\xc5\x21\
+\x03\x8c\x63\x37\xf6\xd8\xe9\xd5\x72\xce\x42\x16\x8d\xe5\xe4\x94\
+\xff\x60\xb3\xc8\x3a\xbd\x62\x0b\xb7\x17\x87\xd4\x8f\x96\x34\x64\
+\x7e\x0c\xd3\xd5\x74\xea\xb1\x08\x02\x1f\x28\x58\x81\x17\x84\xcc\
+\xc6\x8e\xac\xdb\x59\x18\xac\x7c\xbb\x3f\x96\xc5\x7d\xa2\x7f\x14\
+\xe1\x44\x49\x15\x4f\xde\xf4\x7a\x70\x16\x32\x1a\x33\x08\xa9\xed\
+\x52\x0f\x66\xbc\x44\xa1\x11\x38\x41\x08\x8c\x5a\xf3\x54\x7c\x1f\
+\x7a\xbd\xfc\xbe\xa4\xf1\xe7\xb4\x2d\xb8\xf6\x44\x9a\x7a\x2b\xf6\
+\x49\xb4\x94\x72\x21\x37\xbe\x1b\x23\xc3\x55\xc4\xc2\xab\x25\xb5\
+\xd8\x37\xff\x26\x62\x52\x2a\x64\xfb\xb0\xf8\x2c\x48\x60\x6d\x44\
+\x11\x22\x0e\x9c\x0a\x70\xf0\x6a\xcf\xe0\x95\x4d\x52\x39\xcd\x6f\
+\x1f\x47\x71\xb0\x84\xc0\x71\x22\x86\xf3\x49\x7e\xe7\x4b\x2d\x58\
+\xf6\x04\x80\x89\xb4\x9e\xbb\x31\x4b\x2f\x05\xd8\xb9\x1b\xa3\x00\
+\x45\x02\x79\x9f\x00\xd5\xd8\x92\xf0\xd6\xb2\x2d\xdb\x71\xb6\x65\
+\xf4\x07\xc6\x23\x52\x70\xd0\x0f\xc5\x50\x6a\xd9\x0f\xc4\x0c\xcb\
+\x62\xc6\x72\x15\xe9\x63\xa4\x71\x76\x7f\x31\xd0\x8e\xc3\x51\xff\
+\x34\xe8\x29\x1e\xa6\xd9\x1e\xe8\x59\xc8\x98\xff\x8b\xa1\xe6\x2b\
+\xba\x05\xd4\xa6\x49\xf1\x68\x0f\xf5\x86\x79\x5e\xb0\xfe\xc5\x58\
+\x3b\x4e\x2b\xac\xf9\xb2\x6e\x93\x75\xe1\x19\xda\x22\xad\x67\xa4\
+\xd5\x8c\xb4\xda\x80\xb4\xe0\xc4\x58\x43\xa3\x8a\x07\x87\x72\x98\
+\x00\x3a\x5f\x46\xc3\x0a\x81\x68\x15\x3a\xa8\xe4\x13\xd5\xbf\x57\
+\x70\x25\x89\xc5\xb5\x51\x78\x54\x81\x95\x7b\x35\x85\xb0\x51\x93\
+\x2b\x8d\x74\xb7\xac\xe6\x0b\x62\x34\xaa\xe8\x5e\x55\xf2\xf4\xa4\
+\x91\x83\xb7\xdc\xd0\xf2\x18\xc4\x01\x2c\xe8\x2d\x96\x73\xb6\x00\
+\x2f\x08\x6e\xc1\x73\x6f\x59\x19\x42\x94\x44\x24\x75\x42\x81\x24\
+\x78\x79\x55\x5b\x79\x2f\xe2\xe1\xf6\xce\xe5\x0a\x34\x9b\x12\x15\
+\x0f\x5d\x7f\xba\x43\x3f\x6a\x5c\x38\xfe\x66\xb4\x74\x9d\xf3\xfa\
+\x19\xaf\x7c\xd4\xbc\x84\x06\xcd\x88\x29\x8a\xa6\x29\xca\x4f\x39\
+\xd7\xa3\x46\x96\xa8\xd0\x74\x95\xf1\x75\xf6\x44\x66\xd1\x9c\xda\
+\xc1\x9a\x5f\x7a\x3e\x62\x0d\x80\x4d\x3d\x74\xda\x0f\xa2\x11\xfe\
+\x78\xdd\x80\xc8\x4e\x21\xa4\x22\xe4\x21\xa2\xb2\x27\x39\x67\x0e\
+\xfa\x19\x7c\xc8\x4c\xe8\x14\x1e\x24\x71\x0c\x15\xbf\x90\x3a\x95\
+\x82\x25\xea\xec\x7a\x1e\xe2\x0b\xbd\x77\x6f\x0b\xbc\x1d\x69\x0f\
+\xaa\x62\x4c\xb3\xc4\xab\x24\xc1\x61\x49\xdd\xb4\x8b\x44\x6c\xaa\
+\xdc\x03\x59\xc6\x16\xa3\xca\x4d\x6f\xe9\xc0\x62\x9a\xb9\xe3\x36\
+\x4d\xab\xde\xb6\xa4\xf1\xbc\xda\x13\x0e\xe9\x4f\xd0\x86\x5d\x83\
+\xc0\x17\x30\x48\x57\x1b\x62\xa9\xa8\xdd\x9e\x82\xa5\xca\x4b\x5e\
+\x51\x48\xb7\xa7\xea\x58\xc1\xff\x5d\x85\xec\x59\x2c\xd9\x81\xcd\
+\x14\xa5\xab\xaa\xa2\xd2\x55\x54\xf8\x77\xe7\xe0\x0f\x01\x93\x67\
+\xe9\xc3\xbe\x9c\x3d\xed\x8f\xb3\x2b\x21\xb3\xe2\xf2\x44\x14\xc1\
+\x20\x4e\x44\x22\x36\x91\x9a\x26\x4d\x46\x5c\x72\x96\x33\x19\xe4\
+\xdd\x88\x2e\x84\x5c\x10\x99\x08\x5c\x09\x8b\x89\x24\xaa\x1e\x06\
+\x1b\xef\x30\x06\xea\x0e\x09\xe9\xa4\xd3\x35\xc6\x3d\x03\x22\x0d\
+\xf2\x7e\x1e\x32\x87\xc7\x30\x69\xa8\x5f\x1e\x4a\x9e\x41\xe8\xe4\
+\xca\x8c\xa9\xef\x2e\x50\xe0\x75\xd6\x09\xd0\x38\x0e\xdd\xe9\x2a\
+\x66\x5f\xe9\x82\xa5\x5d\xf2\x1f\x24\x88\x37\x4b\x56\x1a\x83\x04\
+\xd4\xb6\xdd\xd8\xbd\x63\x3c\xe0\x5b\x14\xfb\xf4\x8e\x62\x47\xb8\
+\x8f\x49\x97\x7c\x00\x9c\x1e\xa1\xe2\x94\xcd\x5c\x9e\x82\x89\x70\
+\x62\x57\x82\x68\x94\x0d\xce\x41\x73\xfd\x03\xc5\x85\x6c\x89\x81\
+\xd4\x19\xb2\x42\x14\xae\x6f\xf3\xcd\x50\x98\xb1\x14\xfa\x3e\x20\
+\x9a\x62\x54\x80\x54\x9a\x45\x16\xf5\xd8\x3b\xd2\x37\xba\xf8\xd7\
+\xc9\x97\x78\x2d\x6a\x79\x36\xa0\x04\x2d\x9f\xff\x17\xa6\xa7\x65\
+\xf4\x86\xed\xc2\x1b\x91\xc3\xec\x06\x1c\xde\xa0\x29\xbd\xd2\x23\
+\xfe\x2b\xe0\x67\x64\xfc\xcc\x76\xf9\xa9\x46\x8d\xc5\xa7\x21\x3f\
+\xad\x21\xbe\xf2\x63\xfb\x2b\xe0\xa7\x66\xfc\x06\xed\xf2\x33\x06\
+\x35\xf8\xe9\xc8\x4f\x6f\xc8\x6f\xa7\xc9\xfb\xbf\xe8\xe9\x19\xbd\
+\x51\xbb\xf4\x86\x75\x4c\xdf\x80\xef\xde\x23\x36\x7d\xb9\xe3\xd0\
+\xdb\x85\x37\xd0\xeb\x6c\xdd\x21\x37\x7e\xf8\xff\xa8\xad\x1f\xc9\
+\x7d\xaf\xd2\xf2\xf6\xad\x63\xfe\x4c\x24\x68\x1e\xb7\xf9\x2b\xdc\
+\x6f\xdf\x78\x0a\xc1\xc7\xc2\x97\x41\x0d\x17\xfc\x94\xf0\xe5\x55\
+\x59\x40\xed\x99\xfc\x87\x5a\xc7\x02\xea\x1c\x9f\x7e\xcc\xe1\x9f\
+\xd1\x37\x9e\x29\x00\xd4\xd5\x1a\xcb\x4f\x18\xc1\x23\xb7\x81\xca\
+\x33\x45\x80\xa3\xe7\xf2\xc1\xaf\xcc\x04\xe6\x11\xa0\xd9\xba\x09\
+\x54\x55\xa3\x2b\x5c\x2c\xec\x67\xa8\xf4\x49\x62\x03\x21\x87\x28\
+\x12\x07\x22\x57\xc0\x3f\x31\xf8\x02\x9a\x91\x94\x3a\x96\xba\xc8\
+\x1d\xf0\x77\x09\xa2\xfa\xa3\x9a\x4b\x2a\xa7\x4b\x92\x17\x16\x1d\
+\x9e\xbc\x09\x83\x5b\xf1\x25\x85\xcf\xb6\x71\x17\xd4\x1f\x79\x2a\
+\x27\x7b\x14\xa8\xb6\xd2\x4d\xd2\x81\x44\x27\x15\x75\x42\xbd\x3a\
+\x10\x06\xb1\xd8\x8b\x15\xf5\x4a\xf9\x84\x3c\x99\xc2\x73\x5c\x03\
+\x53\x24\x12\x44\x99\xa6\x12\x14\x6d\x54\xfa\xfc\x42\xab\xbc\xc0\
+\x68\x9e\xca\x79\x52\x22\xe7\x45\xd2\x38\x8f\x26\x71\x9a\x6c\x88\
+\x74\x47\x24\xdc\xb7\xb7\x43\xb1\x0d\x3e\x00\x7a\x67\xe9\xe4\xb7\
+\x7c\x00\x0f\xe2\xa9\xa6\xb9\x8c\x9a\x4b\xe9\x40\xc0\x99\xa5\xfd\
+\xf6\x3c\x92\x76\x0d\x23\x5b\x62\xc5\xb6\xd9\x33\xbd\x79\xa8\x90\
+\x24\xb1\x0f\xe5\x0c\x0f\x8e\x9e\x67\x63\x74\x9d\x94\x46\x5f\x27\
+\xa0\x69\x5d\xc9\x9d\x6a\xe6\x6f\x83\x6a\x64\x46\x8b\x44\xdf\x01\
+\x85\x47\xb8\xa5\x2b\xb3\x55\x2f\x87\xf2\x32\x1a\x97\xde\xe8\xb4\
+\xa9\x33\xcf\x7a\x18\xea\x41\xa5\xb7\xf2\x1e\x2f\xa3\x72\xf9\x95\
+\x4c\x73\x9d\x45\x31\xe6\x1f\xa1\x9d\x9e\xfc\x07\x24\xe4\x53\x30\
+\
+"
+
+qt_resource_name = b"\
+\x00\x05\
+\x00\x6d\x02\xc3\
+\x00\x66\
+\x00\x69\x00\x6c\x00\x65\x00\x73\
+\x00\x09\
+\x08\xf6\x8f\xa7\
+\x00\x63\
+\x00\x75\x00\x62\x00\x69\x00\x63\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0b\
+\x08\x32\x87\x47\
+\x00\x73\
+\x00\x70\x00\x68\x00\x65\x00\x72\x00\x65\x00\x73\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0b\
+\x02\x19\x2b\xe7\
+\x00\x62\
+\x00\x75\x00\x62\x00\x62\x00\x6c\x00\x65\x00\x73\x00\x2e\x00\x73\x00\x76\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x02\
+\x00\x00\x00\x44\x00\x01\x00\x00\x00\x01\x00\x00\x06\x32\
+\x00\x00\x00\x28\x00\x01\x00\x00\x00\x01\x00\x00\x03\x5c\
+\x00\x00\x00\x10\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/painting/transformations.py b/examples/painting/transformations.py
new file mode 100755
index 0000000..97cc6aa
--- /dev/null
+++ b/examples/painting/transformations.py
@@ -0,0 +1,249 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QPointF, QSize, Qt
+from PyQt5.QtGui import QBrush, QFont, QFontMetrics, QPainter, QPainterPath
+from PyQt5.QtWidgets import QApplication, QComboBox, QGridLayout, QWidget
+
+
+NoTransformation, Translate, Rotate, Scale = range(4)
+
+class RenderArea(QWidget):
+    def __init__(self, parent=None):
+        super(RenderArea, self).__init__(parent)
+
+        newFont = self.font()
+        newFont.setPixelSize(12)
+        self.setFont(newFont)
+
+        fontMetrics = QFontMetrics(newFont)
+        self.xBoundingRect = fontMetrics.boundingRect("x")
+        self.yBoundingRect = fontMetrics.boundingRect("y")
+        self.shape = QPainterPath()
+        self.operations = []
+
+    def setOperations(self, operations):
+        self.operations = operations
+        self.update()
+
+    def setShape(self, shape):
+        self.shape = shape
+        self.update()
+
+    def minimumSizeHint(self):
+        return QSize(182, 182)
+
+    def sizeHint(self):
+        return QSize(232, 232)
+
+    def paintEvent(self, event):
+        painter = QPainter(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.fillRect(event.rect(), QBrush(Qt.white))
+
+        painter.translate(66, 66)
+
+        painter.save()
+        self.transformPainter(painter)
+        self.drawShape(painter)
+        painter.restore()
+
+        self.drawOutline(painter)
+
+        self.transformPainter(painter)
+        self.drawCoordinates(painter)
+
+    def drawCoordinates(self, painter):
+        painter.setPen(Qt.red)
+
+        painter.drawLine(0, 0, 50, 0)
+        painter.drawLine(48, -2, 50, 0)
+        painter.drawLine(48, 2, 50, 0)
+        painter.drawText(60 - self.xBoundingRect.width() / 2,
+                         0 + self.xBoundingRect.height() / 2, "x")
+
+        painter.drawLine(0, 0, 0, 50)
+        painter.drawLine(-2, 48, 0, 50)
+        painter.drawLine(2, 48, 0, 50)
+        painter.drawText(0 - self.yBoundingRect.width() / 2,
+                         60 + self.yBoundingRect.height() / 2, "y")
+
+    def drawOutline(self, painter):
+        painter.setPen(Qt.darkGreen)
+        painter.setPen(Qt.DashLine)
+        painter.setBrush(Qt.NoBrush)
+        painter.drawRect(0, 0, 100, 100)
+
+    def drawShape(self, painter):
+        painter.fillPath(self.shape, Qt.blue)
+
+    def transformPainter(self, painter):
+        for operation in self.operations:
+            if operation == Translate:
+                painter.translate(50, 50)
+
+            elif operation == Scale:
+                painter.scale(0.75, 0.75)
+
+            elif operation == Rotate:
+                painter.rotate(60)
+
+
+class Window(QWidget):
+
+    operationTable = (NoTransformation, Rotate, Scale, Translate)
+    NumTransformedAreas = 3
+
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.originalRenderArea = RenderArea()
+
+        self.shapeComboBox = QComboBox()
+        self.shapeComboBox.addItem("Clock")
+        self.shapeComboBox.addItem("House")
+        self.shapeComboBox.addItem("Text")
+        self.shapeComboBox.addItem("Truck")
+
+        layout = QGridLayout()
+        layout.addWidget(self.originalRenderArea, 0, 0)
+        layout.addWidget(self.shapeComboBox, 1, 0)
+
+        self.transformedRenderAreas = list(range(Window.NumTransformedAreas))
+        self.operationComboBoxes = list(range(Window.NumTransformedAreas))
+
+        for i in range(Window.NumTransformedAreas):
+            self.transformedRenderAreas[i] = RenderArea()
+
+            self.operationComboBoxes[i] = QComboBox()
+            self.operationComboBoxes[i].addItem("No transformation")
+            self.operationComboBoxes[i].addItem(u"Rotate by 60\N{DEGREE SIGN}")
+            self.operationComboBoxes[i].addItem("Scale to 75%")
+            self.operationComboBoxes[i].addItem("Translate by (50, 50)")
+
+            self.operationComboBoxes[i].activated.connect(self.operationChanged)
+
+            layout.addWidget(self.transformedRenderAreas[i], 0, i + 1)
+            layout.addWidget(self.operationComboBoxes[i], 1, i + 1)
+
+        self.setLayout(layout)
+        self.setupShapes()
+        self.shapeSelected(0)
+
+        self.setWindowTitle("Transformations")
+
+    def setupShapes(self):
+        truck = QPainterPath()
+        truck.setFillRule(Qt.WindingFill)
+        truck.moveTo(0.0, 87.0)
+        truck.lineTo(0.0, 60.0)
+        truck.lineTo(10.0, 60.0)
+        truck.lineTo(35.0, 35.0)
+        truck.lineTo(100.0, 35.0)
+        truck.lineTo(100.0, 87.0)
+        truck.lineTo(0.0, 87.0)
+        truck.moveTo(17.0, 60.0)
+        truck.lineTo(55.0, 60.0)
+        truck.lineTo(55.0, 40.0)
+        truck.lineTo(37.0, 40.0)
+        truck.lineTo(17.0, 60.0)
+        truck.addEllipse(17.0, 75.0, 25.0, 25.0)
+        truck.addEllipse(63.0, 75.0, 25.0, 25.0)
+
+        clock = QPainterPath()
+        clock.addEllipse(-50.0, -50.0, 100.0, 100.0)
+        clock.addEllipse(-48.0, -48.0, 96.0, 96.0)
+        clock.moveTo(0.0, 0.0)
+        clock.lineTo(-2.0, -2.0)
+        clock.lineTo(0.0, -42.0)
+        clock.lineTo(2.0, -2.0)
+        clock.lineTo(0.0, 0.0)
+        clock.moveTo(0.0, 0.0)
+        clock.lineTo(2.732, -0.732)
+        clock.lineTo(24.495, 14.142)
+        clock.lineTo(0.732, 2.732)
+        clock.lineTo(0.0, 0.0)
+
+        house = QPainterPath()
+        house.moveTo(-45.0, -20.0)
+        house.lineTo(0.0, -45.0)
+        house.lineTo(45.0, -20.0)
+        house.lineTo(45.0, 45.0)
+        house.lineTo(-45.0, 45.0)
+        house.lineTo(-45.0, -20.0)
+        house.addRect(15.0, 5.0, 20.0, 35.0)
+        house.addRect(-35.0, -15.0, 25.0, 25.0)
+
+        text = QPainterPath()
+        font = QFont()
+        font.setPixelSize(50)
+        fontBoundingRect = QFontMetrics(font).boundingRect("Qt")
+        text.addText(-QPointF(fontBoundingRect.center()), font, "Qt")
+
+        self.shapes = (clock, house, text, truck)
+
+        self.shapeComboBox.activated.connect(self.shapeSelected)
+
+    def operationChanged(self):
+        operations = []
+        for i in range(Window.NumTransformedAreas):
+            index = self.operationComboBoxes[i].currentIndex()
+            operations.append(Window.operationTable[index])
+            self.transformedRenderAreas[i].setOperations(operations[:])
+
+    def shapeSelected(self, index):
+        shape = self.shapes[index]
+        self.originalRenderArea.setShape(shape)
+        for i in range(Window.NumTransformedAreas):
+            self.transformedRenderAreas[i].setShape(shape)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/pyuic/compile-on-the-fly.py b/examples/pyuic/compile-on-the-fly.py
new file mode 100755
index 0000000..e033935
--- /dev/null
+++ b/examples/pyuic/compile-on-the-fly.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Riverbank Computing Limited nor the names of
+##     its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import pyqtSlot
+from PyQt5.QtWidgets import QApplication, QDialog
+from PyQt5.uic import loadUiType
+
+
+app = QApplication(sys.argv)
+form_class, base_class = loadUiType('demo.ui')
+
+
+class DemoImpl(QDialog, form_class):
+    def __init__(self, *args):
+        super(DemoImpl, self).__init__(*args)
+
+        self.setupUi(self)
+    
+    @pyqtSlot()
+    def on_button1_clicked(self):
+        for s in "This is a demo".split(" "):
+            self.list.addItem(s)
+
+
+form = DemoImpl()
+form.show()
+sys.exit(app.exec_())
diff --git a/examples/pyuic/demo.ui b/examples/pyuic/demo.ui
new file mode 100644
index 0000000..300215c
--- /dev/null
+++ b/examples/pyuic/demo.ui
@@ -0,0 +1,146 @@
+<ui version="4.0" >
+ <author></author>
+ <comment></comment>
+ <exportmacro></exportmacro>
+ <class>DemoDialog</class>
+ <widget class="QDialog" name="DemoDialog" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>PyQt5.uic Demo Dialog</string>
+  </property>
+  <layout class="QGridLayout" >
+   <property name="margin" >
+    <number>9</number>
+   </property>
+   <property name="spacing" >
+    <number>6</number>
+   </property>
+   <item row="2" column="0" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="0" >
+    <spacer>
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" >
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item rowspan="3" row="0" column="1" >
+    <widget class="QListWidget" name="list" />
+   </item>
+   <item row="1" column="0" >
+    <layout class="QVBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item>
+      <widget class="QPushButton" name="button1" >
+       <property name="text" >
+        <string>Add items</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="button2" >
+       <property name="text" >
+        <string>Clear list</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="3" column="0" colspan="2" >
+    <layout class="QHBoxLayout" >
+     <property name="margin" >
+      <number>0</number>
+     </property>
+     <property name="spacing" >
+      <number>6</number>
+     </property>
+     <item>
+      <spacer>
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" >
+        <size>
+         <width>131</width>
+         <height>31</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="okButton" >
+       <property name="text" >
+        <string>OK</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <pixmapfunction></pixmapfunction>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>okButton</sender>
+   <signal>clicked()</signal>
+   <receiver>DemoDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>369</x>
+     <y>256</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>96</x>
+     <y>254</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>button2</sender>
+   <signal>clicked()</signal>
+   <receiver>list</receiver>
+   <slot>clear()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>92</x>
+     <y>112</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>279</x>
+     <y>123</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/examples/pyuic/load_ui1.py b/examples/pyuic/load_ui1.py
new file mode 100755
index 0000000..28a0898
--- /dev/null
+++ b/examples/pyuic/load_ui1.py
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Riverbank Computing Limited nor the names of
+##     its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtWidgets import QApplication
+from PyQt5.uic import loadUi
+
+
+app = QApplication(sys.argv)
+widget = loadUi('demo.ui')
+widget.show()
+sys.exit(app.exec_())
diff --git a/examples/pyuic/load_ui2.py b/examples/pyuic/load_ui2.py
new file mode 100755
index 0000000..4956670
--- /dev/null
+++ b/examples/pyuic/load_ui2.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Riverbank Computing Limited nor the names of
+##     its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import pyqtSlot
+from PyQt5.QtWidgets import QApplication, QDialog
+from PyQt5.uic import loadUi
+
+
+class DemoImpl(QDialog):
+    def __init__(self, *args):
+        super(DemoImpl, self).__init__(*args)
+
+        loadUi('demo.ui', self)
+
+    @pyqtSlot()
+    def on_button1_clicked(self):
+        for s in "This is a demo".split(" "):
+            self.list.addItem(s)
+
+
+app = QApplication(sys.argv)
+widget = DemoImpl()
+widget.show()
+sys.exit(app.exec_())
diff --git a/examples/qml/referenceexamples/adding.py b/examples/qml/referenceexamples/adding.py
new file mode 100755
index 0000000..ce8b3d8
--- /dev/null
+++ b/examples/qml/referenceexamples/adding.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import pyqtProperty, QCoreApplication, QObject, QUrl
+from PyQt5.QtQml import qmlRegisterType, QQmlComponent, QQmlEngine
+
+
+QML = b'''
+import People 1.0
+
+Person {
+    name: "Bob Jones"
+    shoeSize: 12
+}
+'''
+
+
+class Person(QObject):
+    def __init__(self, parent=None):
+        super(Person, self).__init__(parent)
+
+        self._name = ''
+        self._shoeSize = 0
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @pyqtProperty(int)
+    def shoeSize(self):
+        return self._shoeSize
+
+    @shoeSize.setter
+    def shoeSize(self, shoeSize):
+        self._shoeSize = shoeSize
+
+
+app = QCoreApplication(sys.argv)
+
+qmlRegisterType(Person, "People", 1, 0, "Person")
+
+engine = QQmlEngine()
+
+component = QQmlComponent(engine)
+component.setData(QML, QUrl())
+
+person = component.create()
+
+if person is not None:
+    print("The person's name is \"%s\"" % person.name)
+    print("They wear a %d sized shoe" % person.shoeSize)
+else:
+    print("Unable to create component instance")
+    for e in component.errors():
+        print("Error:", e.toString());
diff --git a/examples/qml/referenceexamples/attached.py b/examples/qml/referenceexamples/attached.py
new file mode 100755
index 0000000..f158ef1
--- /dev/null
+++ b/examples/qml/referenceexamples/attached.py
@@ -0,0 +1,232 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import (pyqtProperty, Q_CLASSINFO, QCoreApplication, QDate,
+        QObject, QUrl)
+from PyQt5.QtGui import QColor
+from PyQt5.QtQml import (qmlAttachedPropertiesObject, qmlRegisterType,
+        QQmlComponent, QQmlEngine, QQmlListProperty)
+
+
+QML = b'''
+import People 1.0
+import QtQuick 2.0
+
+BirthdayParty {
+    Boy {
+        name: "Robert Campbell"
+        BirthdayParty.rsvp: "2009-07-01"
+    }
+
+    Boy {
+        name: "Leo Hodges"
+        shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
+        BirthdayParty.rsvp: "2009-07-06"
+    }
+
+    host: Boy {
+        name: "Jack Smith"
+        shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
+    }
+}
+'''
+
+
+class ShoeDescription(QObject):
+    def __init__(self, parent=None):
+        super(ShoeDescription, self).__init__(parent)
+
+        self._size = 0
+        self._color = QColor()
+        self._brand = ''
+        self._price = 0.0
+
+    @pyqtProperty(int)
+    def size(self):
+        return self._size
+
+    @size.setter
+    def size(self, size):
+        self._size = size
+
+    @pyqtProperty(QColor)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        self._color = color
+
+    @pyqtProperty(str)
+    def brand(self):
+        return self._brand
+
+    @brand.setter
+    def brand(self, brand):
+        self._brand = brand
+
+    @pyqtProperty(float)
+    def price(self):
+        return self._price
+
+    @price.setter
+    def price(self, price):
+        self._price = price
+
+
+class Person(QObject):
+    def __init__(self, parent=None):
+        super(Person, self).__init__(parent)
+
+        self._name = ''
+        self._shoe = ShoeDescription()
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @pyqtProperty(ShoeDescription)
+    def shoe(self):
+        return self._shoe
+
+
+class Boy(Person):
+    pass
+
+
+class Girl(Person):
+    pass
+
+
+class BirthdayPartyAttached(QObject):
+    def __init__(self, parent):
+        super(BirthdayPartyAttached, self).__init__(parent)
+
+        self._rsvp = QDate()
+
+    @pyqtProperty(QDate)
+    def rsvp(self):
+        return self._rsvp
+
+    @rsvp.setter
+    def rsvp(self, rsvp):
+        self._rsvp = rsvp
+
+
+class BirthdayParty(QObject):
+    Q_CLASSINFO('DefaultProperty', 'guests')
+
+    def __init__(self, parent=None):
+        super(BirthdayParty, self).__init__(parent)
+
+        self._host = None
+        self._guests = []
+
+    @pyqtProperty(Person)
+    def host(self):
+        return self._host
+
+    @host.setter
+    def host(self, host):
+        self._host = host
+
+    @pyqtProperty(QQmlListProperty)
+    def guests(self):
+        return QQmlListProperty(Person, self, self._guests)
+
+    def guestCount(self):
+        return len(self._guests)
+
+    def guest(self, idx):
+        return self._guests[idx]
+
+
+app = QCoreApplication(sys.argv)
+
+qmlRegisterType(BirthdayPartyAttached)
+qmlRegisterType(BirthdayParty, "People", 1, 0, "BirthdayParty",
+        attachedProperties=BirthdayPartyAttached)
+qmlRegisterType(ShoeDescription)
+qmlRegisterType(Person)
+qmlRegisterType(Boy, "People", 1, 0, "Boy")
+qmlRegisterType(Girl, "People", 1, 0, "Girl")
+
+engine = QQmlEngine()
+
+component = QQmlComponent(engine)
+component.setData(QML, QUrl())
+
+party = component.create()
+
+if party is not None and party.host is not None:
+    print("\"%s\" is having a birthday!" % party.host.name)
+
+    if isinstance(party.host, Boy):
+        print("He is inviting:")
+    else:
+        print("She is inviting:")
+
+    for ii in range(party.guestCount()):
+        guest = party.guest(ii)
+
+        attached = qmlAttachedPropertiesObject(BirthdayParty, guest, False)
+
+        if attached is not None:
+            rsvpDate = attached.property('rsvp')
+        else:
+            rsvpDate = QDate()
+
+        if rsvpDate.isNull():
+            print("    \"%s\" RSVP date: Hasn't RSVP'd" % guest.name)
+        else:
+            print("    \"%s\" RSVP date: %s" % (guest.name, rsvpDate.toString()))
+else:
+    for e in component.errors():
+        print("Error:", e.toString());
diff --git a/examples/qml/referenceexamples/binding.py b/examples/qml/referenceexamples/binding.py
new file mode 100755
index 0000000..e51251a
--- /dev/null
+++ b/examples/qml/referenceexamples/binding.py
@@ -0,0 +1,335 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import (pyqtProperty, pyqtSignal, pyqtSlot, Q_CLASSINFO,
+        QCoreApplication, QDate, QObject, QTime, QTimer, QUrl)
+from PyQt5.QtGui import QColor
+from PyQt5.QtQml import (qmlAttachedPropertiesObject, qmlRegisterType,
+        QQmlComponent, QQmlEngine, QQmlListProperty, QQmlProperty,
+        QQmlPropertyValueSource)
+
+
+QML = b'''
+import People 1.0
+import QtQuick 2.0
+
+BirthdayParty {
+    id: theParty
+
+    HappyBirthdaySong on announcement { name: theParty.host.name }
+
+    host: Boy {
+        name: "Bob Jones"
+        shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
+    }
+
+    onPartyStarted: console.log("This party started rockin' at " + time);
+
+    Boy {
+        name: "Leo Hodges"
+        BirthdayParty.rsvp: "2009-07-06"
+        shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
+    }
+
+    Boy {
+        name: "Jack Smith"
+        shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
+    }
+
+    Girl {
+        name: "Anne Brown"
+        BirthdayParty.rsvp: "2009-07-01"
+        shoe.size: 7
+        shoe.color: "red"
+        shoe.brand: "Marc Jacobs"
+        shoe.price: 699.99
+    }
+}
+'''
+
+
+class ShoeDescription(QObject):
+    def __init__(self, parent=None):
+        super(ShoeDescription, self).__init__(parent)
+
+        self._size = 0
+        self._color = QColor()
+        self._brand = ''
+        self._price = 0.0
+
+    shoeChanged = pyqtSignal()
+
+    @pyqtProperty(int, notify=shoeChanged)
+    def size(self):
+        return self._size
+
+    @size.setter
+    def size(self, size):
+        if self._size != size:
+            self._size = size
+            self.shoeChanged.emit()
+
+    @pyqtProperty(QColor, notify=shoeChanged)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        if self._color != color:
+            self._color = color
+            self.shoeChanged.emit()
+
+    @pyqtProperty(str, notify=shoeChanged)
+    def brand(self):
+        return self._brand
+
+    @brand.setter
+    def brand(self, brand):
+        if self._brand != brand:
+            self._brand = brand
+            self.shoeChanged.emit()
+
+    @pyqtProperty(float, notify=shoeChanged)
+    def price(self):
+        return self._price
+
+    @price.setter
+    def price(self, price):
+        if self._price != price:
+            self._price = price
+            self.shoeChanged.emit()
+
+
+class Person(QObject):
+    def __init__(self, parent=None):
+        super(Person, self).__init__(parent)
+
+        self._name = ''
+        self._shoe = ShoeDescription()
+
+    nameChanged = pyqtSignal()
+
+    @pyqtProperty(str, notify=nameChanged)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        if self._name != name:
+            self._name = name
+            self.nameChanged.emit()
+
+    @pyqtProperty(ShoeDescription)
+    def shoe(self):
+        return self._shoe
+
+
+class Boy(Person):
+    pass
+
+
+class Girl(Person):
+    pass
+
+
+class BirthdayPartyAttached(QObject):
+    def __init__(self, parent):
+        super(BirthdayPartyAttached, self).__init__(parent)
+
+        self._rsvp = QDate()
+
+    rsvpChanged = pyqtSignal()
+
+    @pyqtProperty(QDate, notify=rsvpChanged)
+    def rsvp(self):
+        return self._rsvp
+
+    @rsvp.setter
+    def rsvp(self, rsvp):
+        if self._rsvp != rsvp:
+            self._rsvp = rsvp
+            self.rsvpChanged.emit()
+
+
+class BirthdayParty(QObject):
+    Q_CLASSINFO('DefaultProperty', 'guests')
+
+    partyStarted = pyqtSignal(QTime, arguments=['time'])
+
+    def __init__(self, parent=None):
+        super(BirthdayParty, self).__init__(parent)
+
+        self._host = None
+        self._guests = []
+
+    hostChanged = pyqtSignal()
+
+    @pyqtProperty(Person, notify=hostChanged)
+    def host(self):
+        return self._host
+
+    @host.setter
+    def host(self, host):
+        if self._host != host:
+            self._host = host
+            self.hostChanged.emit()
+
+    @pyqtProperty(QQmlListProperty)
+    def guests(self):
+        return QQmlListProperty(Person, self, self._guests)
+
+    def guestCount(self):
+        return len(self._guests)
+
+    def guest(self, idx):
+        return self._guests[idx]
+
+    @pyqtProperty(str)
+    def announcement(self):
+        return ''
+
+    @announcement.setter
+    def announcement(self, announcement):
+        print(announcement)
+
+    def startParty(self):
+        self.partyStarted.emit(QTime.currentTime())
+
+
+class HappyBirthdaySong(QObject, QQmlPropertyValueSource):
+    def __init__(self, parent=None):
+        super(HappyBirthdaySong, self).__init__(parent)
+
+        self._line = -1
+        self._lyrics = []
+        self._target = QQmlProperty()
+        self._name = ''
+
+        timer = QTimer(self)
+        timer.timeout.connect(self.advance)
+        timer.start(1000)
+
+    nameChanged = pyqtSignal()
+
+    @pyqtProperty(str, notify=nameChanged)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        if self._name != name:
+            self._name = name
+
+            self._lyrics = [
+                "",
+                "Happy birthday to you,",
+                "Happy birthday to you,",
+                "Happy birthday dear %s," % self._name,
+                "Happy birthday to you!"
+            ]
+
+            self.nameChanged.emit()
+
+    def setTarget(self, target):
+        self._target = target
+
+    @pyqtSlot()
+    def advance(self):
+        self._line += 1
+
+        if self._line < len(self._lyrics):
+            self._target.write(self._lyrics[self._line])
+        else:
+            QCoreApplication.instance().quit()
+
+
+app = QCoreApplication(sys.argv)
+
+qmlRegisterType(BirthdayPartyAttached)
+qmlRegisterType(BirthdayParty, "People", 1, 0, "BirthdayParty",
+        attachedProperties=BirthdayPartyAttached)
+qmlRegisterType(HappyBirthdaySong, "People", 1, 0, "HappyBirthdaySong")
+qmlRegisterType(ShoeDescription)
+qmlRegisterType(Person)
+qmlRegisterType(Boy, "People", 1, 0, "Boy")
+qmlRegisterType(Girl, "People", 1, 0, "Girl")
+
+engine = QQmlEngine()
+
+component = QQmlComponent(engine)
+component.setData(QML, QUrl())
+
+party = component.create()
+
+if party is not None and party.host is not None:
+    print("\"%s\" is having a birthday!" % party.host.name)
+
+    if isinstance(party.host, Boy):
+        print("He is inviting:")
+    else:
+        print("She is inviting:")
+
+    for ii in range(party.guestCount()):
+        guest = party.guest(ii)
+
+        attached = qmlAttachedPropertiesObject(BirthdayParty, guest, False)
+
+        if attached is not None:
+            rsvpDate = attached.property('rsvp')
+        else:
+            rsvpDate = QDate()
+
+        if rsvpDate.isNull():
+            print("    \"%s\" RSVP date: Hasn't RSVP'd" % guest.name)
+        else:
+            print("    \"%s\" RSVP date: %s" % (guest.name, rsvpDate.toString()))
+
+    party.startParty()
+else:
+    for e in component.errors():
+        print("Error:", e.toString());
+
+sys.exit(app.exec_())
diff --git a/examples/qml/referenceexamples/coercion.py b/examples/qml/referenceexamples/coercion.py
new file mode 100755
index 0000000..80f78d0
--- /dev/null
+++ b/examples/qml/referenceexamples/coercion.py
@@ -0,0 +1,154 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import pyqtProperty, QCoreApplication, QObject, QUrl
+from PyQt5.QtQml import (qmlRegisterType, QQmlComponent, QQmlEngine,
+        QQmlListProperty)
+
+
+QML = b'''
+import People 1.0
+
+BirthdayParty {
+    host: Boy {
+        name: "Bob Jones"
+        shoeSize: 12
+    }
+
+    guests: [
+        Boy { name: "Leo Hodges" },
+        Boy { name: "Jack Smith" },
+        Girl { name: "Anne Brown" }
+    ]
+}
+'''
+
+
+class Person(QObject):
+    def __init__(self, parent=None):
+        super(Person, self).__init__(parent)
+
+        self._name = ''
+        self._shoeSize = 0
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @pyqtProperty(int)
+    def shoeSize(self):
+        return self._shoeSize
+
+    @shoeSize.setter
+    def shoeSize(self, shoeSize):
+        self._shoeSize = shoeSize
+
+
+class Boy(Person):
+    pass
+
+
+class Girl(Person):
+    pass
+
+
+class BirthdayParty(QObject):
+    def __init__(self, parent=None):
+        super(BirthdayParty, self).__init__(parent)
+
+        self._host = None
+        self._guests = []
+
+    @pyqtProperty(Person)
+    def host(self):
+        return self._host
+
+    @host.setter
+    def host(self, host):
+        self._host = host
+
+    @pyqtProperty(QQmlListProperty)
+    def guests(self):
+        return QQmlListProperty(Person, self, self._guests)
+
+    def guestCount(self):
+        return len(self._guests)
+
+    def guest(self, idx):
+        return self._guests[idx]
+
+
+app = QCoreApplication(sys.argv)
+
+qmlRegisterType(BirthdayParty, "People", 1, 0, "BirthdayParty")
+qmlRegisterType(Person)
+qmlRegisterType(Boy, "People", 1, 0, "Boy")
+qmlRegisterType(Girl, "People", 1, 0, "Girl")
+
+engine = QQmlEngine()
+
+component = QQmlComponent(engine)
+component.setData(QML, QUrl())
+
+party = component.create()
+
+if party is not None and party.host is not None:
+    print("\"%s\" is having a birthday!" % party.host.name)
+
+    if isinstance(party.host, Boy):
+        print("He is inviting:")
+    else:
+        print("She is inviting:")
+
+    for ii in range(party.guestCount()):
+        print("    \"%s\"" % party.guest(ii).name)
+else:
+    for e in component.errors():
+        print("Error:", e.toString());
diff --git a/examples/qml/referenceexamples/default.py b/examples/qml/referenceexamples/default.py
new file mode 100755
index 0000000..b523c72
--- /dev/null
+++ b/examples/qml/referenceexamples/default.py
@@ -0,0 +1,155 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import (pyqtProperty, Q_CLASSINFO, QCoreApplication, QObject,
+        QUrl)
+from PyQt5.QtQml import (qmlRegisterType, QQmlComponent, QQmlEngine,
+        QQmlListProperty)
+
+
+QML = b'''
+import People 1.0
+
+BirthdayParty {
+    host: Boy {
+        name: "Bob Jones"
+        shoeSize: 12
+    }
+
+    Boy { name: "Leo Hodges" }
+    Boy { name: "Jack Smith" }
+    Girl { name: "Anne Brown" }
+}
+'''
+
+
+class Person(QObject):
+    def __init__(self, parent=None):
+        super(Person, self).__init__(parent)
+
+        self._name = ''
+        self._shoeSize = 0
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @pyqtProperty(int)
+    def shoeSize(self):
+        return self._shoeSize
+
+    @shoeSize.setter
+    def shoeSize(self, shoeSize):
+        self._shoeSize = shoeSize
+
+
+class Boy(Person):
+    pass
+
+
+class Girl(Person):
+    pass
+
+
+class BirthdayParty(QObject):
+    Q_CLASSINFO('DefaultProperty', 'guests')
+
+    def __init__(self, parent=None):
+        super(BirthdayParty, self).__init__(parent)
+
+        self._host = None
+        self._guests = []
+
+    @pyqtProperty(Person)
+    def host(self):
+        return self._host
+
+    @host.setter
+    def host(self, host):
+        self._host = host
+
+    @pyqtProperty(QQmlListProperty)
+    def guests(self):
+        return QQmlListProperty(Person, self, self._guests)
+
+    def guestCount(self):
+        return len(self._guests)
+
+    def guest(self, idx):
+        return self._guests[idx]
+
+
+app = QCoreApplication(sys.argv)
+
+qmlRegisterType(BirthdayParty, "People", 1, 0, "BirthdayParty")
+qmlRegisterType(Person)
+qmlRegisterType(Boy, "People", 1, 0, "Boy")
+qmlRegisterType(Girl, "People", 1, 0, "Girl")
+
+engine = QQmlEngine()
+
+component = QQmlComponent(engine)
+component.setData(QML, QUrl())
+
+party = component.create()
+
+if party is not None and party.host is not None:
+    print("\"%s\" is having a birthday!" % party.host.name)
+
+    if isinstance(party.host, Boy):
+        print("He is inviting:")
+    else:
+        print("She is inviting:")
+
+    for ii in range(party.guestCount()):
+        print("    \"%s\"" % party.guest(ii).name)
+else:
+    for e in component.errors():
+        print("Error:", e.toString());
diff --git a/examples/qml/referenceexamples/grouped.py b/examples/qml/referenceexamples/grouped.py
new file mode 100755
index 0000000..d9703e1
--- /dev/null
+++ b/examples/qml/referenceexamples/grouped.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import (pyqtProperty, Q_CLASSINFO, QCoreApplication, QObject,
+        QUrl)
+from PyQt5.QtGui import QColor
+from PyQt5.QtQml import (qmlRegisterType, QQmlComponent, QQmlEngine,
+        QQmlListProperty)
+
+
+QML = b'''
+import People 1.0
+import QtQuick 2.0
+
+BirthdayParty {
+    host: Boy {
+        name: "Bob Jones"
+        shoe { size: 12; color: "white"; brand: "Bikey"; price: 90.0 }
+    }
+
+    Boy {
+        name: "Leo Hodges"
+        shoe { size: 10; color: "black"; brand: "Thebok"; price: 59.95 }
+    }
+
+    Boy {
+        name: "Jack Smith"
+        shoe {
+            size: 8
+            color: "blue"
+            brand: "Luma"
+            price: 19.95
+        }
+    }
+
+    Girl {
+        name: "Anne Brown"
+        shoe.size: 7
+        shoe.color: "red"
+        shoe.brand: "Job Macobs"
+        shoe.price: 699.99
+    }
+}
+'''
+
+
+class ShoeDescription(QObject):
+    def __init__(self, parent=None):
+        super(ShoeDescription, self).__init__(parent)
+
+        self._size = 0
+        self._color = QColor()
+        self._brand = ''
+        self._price = 0.0
+
+    @pyqtProperty(int)
+    def size(self):
+        return self._size
+
+    @size.setter
+    def size(self, size):
+        self._size = size
+
+    @pyqtProperty(QColor)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        self._color = color
+
+    @pyqtProperty(str)
+    def brand(self):
+        return self._brand
+
+    @brand.setter
+    def brand(self, brand):
+        self._brand = brand
+
+    @pyqtProperty(float)
+    def price(self):
+        return self._price
+
+    @price.setter
+    def price(self, price):
+        self._price = price
+
+
+class Person(QObject):
+    def __init__(self, parent=None):
+        super(Person, self).__init__(parent)
+
+        self._name = ''
+        self._shoe = ShoeDescription()
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @pyqtProperty(ShoeDescription)
+    def shoe(self):
+        return self._shoe
+
+
+class Boy(Person):
+    pass
+
+
+class Girl(Person):
+    pass
+
+
+class BirthdayParty(QObject):
+    Q_CLASSINFO('DefaultProperty', 'guests')
+
+    def __init__(self, parent=None):
+        super(BirthdayParty, self).__init__(parent)
+
+        self._host = None
+        self._guests = []
+
+    @pyqtProperty(Person)
+    def host(self):
+        return self._host
+
+    @host.setter
+    def host(self, host):
+        self._host = host
+
+    @pyqtProperty(QQmlListProperty)
+    def guests(self):
+        return QQmlListProperty(Person, self, self._guests)
+
+    def guestCount(self):
+        return len(self._guests)
+
+    def guest(self, idx):
+        return self._guests[idx]
+
+
+app = QCoreApplication(sys.argv)
+
+qmlRegisterType(BirthdayParty, "People", 1, 0, "BirthdayParty")
+qmlRegisterType(ShoeDescription)
+qmlRegisterType(Person)
+qmlRegisterType(Boy, "People", 1, 0, "Boy")
+qmlRegisterType(Girl, "People", 1, 0, "Girl")
+
+engine = QQmlEngine()
+
+component = QQmlComponent(engine)
+component.setData(QML, QUrl())
+
+party = component.create()
+
+if party is not None and party.host is not None:
+    print("\"%s\" is having a birthday!" % party.host.name)
+
+    if isinstance(party.host, Boy):
+        print("He is inviting:")
+    else:
+        print("She is inviting:")
+
+    bestShoe = None
+
+    for ii in range(party.guestCount()):
+        guest = party.guest(ii)
+
+        print("    \"%s\"" % guest.name)
+
+        if bestShoe is None or bestShoe.shoe.price < guest.shoe.price:
+            bestShoe = guest
+
+    if bestShoe is not None:
+        print("\"%s\" is wearing the best shoes!" % bestShoe.name)
+else:
+    for e in component.errors():
+        print("Error:", e.toString());
diff --git a/examples/qml/referenceexamples/methods.py b/examples/qml/referenceexamples/methods.py
new file mode 100755
index 0000000..4fb48a2
--- /dev/null
+++ b/examples/qml/referenceexamples/methods.py
@@ -0,0 +1,150 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import (pyqtProperty, pyqtSlot, QCoreApplication, QObject,
+        QUrl)
+from PyQt5.QtQml import (qmlRegisterType, QQmlComponent, QQmlEngine,
+        QQmlListProperty)
+
+
+QML = b'''
+import QtQuick 2.0
+import People 1.0
+
+BirthdayParty {
+    host: Person {
+        name: "Bob Jones"
+        shoeSize: 12
+    }
+
+    guests: [
+        Person { name: "Leo Hodges" },
+        Person { name: "Jack Smith" },
+        Person { name: "Anne Brown" }
+    ]
+
+    Component.onCompleted: invite("William Green")
+}
+'''
+
+
+class Person(QObject):
+    def __init__(self, parent=None):
+        super(Person, self).__init__(parent)
+
+        self._name = ''
+        self._shoeSize = 0
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @pyqtProperty(int)
+    def shoeSize(self):
+        return self._shoeSize
+
+    @shoeSize.setter
+    def shoeSize(self, shoeSize):
+        self._shoeSize = shoeSize
+
+
+class BirthdayParty(QObject):
+    def __init__(self, parent=None):
+        super(BirthdayParty, self).__init__(parent)
+
+        self._host = None
+        self._guests = []
+
+    @pyqtProperty(Person)
+    def host(self):
+        return self._host
+
+    @host.setter
+    def host(self, host):
+        self._host = host
+
+    @pyqtProperty(QQmlListProperty)
+    def guests(self):
+        return QQmlListProperty(Person, self, self._guests)
+
+    def guestCount(self):
+        return len(self._guests)
+
+    def guest(self, idx):
+        return self._guests[idx]
+
+    @pyqtSlot(str)
+    def invite(self, name):
+        person = Person(self)
+        person.name = name
+        self._guests.append(person)
+
+
+app = QCoreApplication(sys.argv)
+
+qmlRegisterType(BirthdayParty, "People", 1, 0, "BirthdayParty")
+qmlRegisterType(Person, "People", 1, 0, "Person")
+
+engine = QQmlEngine()
+
+component = QQmlComponent(engine)
+component.setData(QML, QUrl())
+
+party = component.create()
+
+if party is not None and party.host is not None:
+    print("\"%s\" is having a birthday!" % party.host.name)
+    print("They are inviting:")
+
+    for ii in range(party.guestCount()):
+        print("    \"%s\"" % party.guest(ii).name)
+else:
+    for e in component.errors():
+        print("Error:", e.toString());
diff --git a/examples/qml/referenceexamples/properties.py b/examples/qml/referenceexamples/properties.py
new file mode 100755
index 0000000..ae1cf9d
--- /dev/null
+++ b/examples/qml/referenceexamples/properties.py
@@ -0,0 +1,141 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import pyqtProperty, QCoreApplication, QObject, QUrl
+from PyQt5.QtQml import (qmlRegisterType, QQmlComponent, QQmlEngine,
+        QQmlListProperty)
+
+
+QML = b'''
+import QtQuick 2.0
+import People 1.0
+
+BirthdayParty {
+    host: Person {
+        name: "Bob Jones"
+        shoeSize: 12
+    }
+
+    guests: [
+        Person { name: "Leo Hodges" },
+        Person { name: "Jack Smith" },
+        Person { name: "Anne Brown" }
+    ]
+}
+'''
+
+
+class Person(QObject):
+    def __init__(self, parent=None):
+        super(Person, self).__init__(parent)
+
+        self._name = ''
+        self._shoeSize = 0
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @pyqtProperty(int)
+    def shoeSize(self):
+        return self._shoeSize
+
+    @shoeSize.setter
+    def shoeSize(self, shoeSize):
+        self._shoeSize = shoeSize
+
+
+class BirthdayParty(QObject):
+    def __init__(self, parent=None):
+        super(BirthdayParty, self).__init__(parent)
+
+        self._host = None
+        self._guests = []
+
+    @pyqtProperty(Person)
+    def host(self):
+        return self._host
+
+    @host.setter
+    def host(self, host):
+        self._host = host
+
+    @pyqtProperty(QQmlListProperty)
+    def guests(self):
+        return QQmlListProperty(Person, self, self._guests)
+
+    def guestCount(self):
+        return len(self._guests)
+
+    def guest(self, idx):
+        return self._guests[idx]
+
+
+app = QCoreApplication(sys.argv)
+
+qmlRegisterType(BirthdayParty, "People", 1, 0, "BirthdayParty")
+qmlRegisterType(Person, "People", 1, 0, "Person")
+
+engine = QQmlEngine()
+
+component = QQmlComponent(engine)
+component.setData(QML, QUrl())
+
+party = component.create()
+
+if party is not None and party.host is not None:
+    print("\"%s\" is having a birthday!" % party.host.name)
+    print("They are inviting:")
+
+    for ii in range(party.guestCount()):
+        print("    \"%s\"" % party.guest(ii).name)
+else:
+    for e in component.errors():
+        print("Error:", e.toString());
diff --git a/examples/qml/referenceexamples/signal.py b/examples/qml/referenceexamples/signal.py
new file mode 100755
index 0000000..b40039b
--- /dev/null
+++ b/examples/qml/referenceexamples/signal.py
@@ -0,0 +1,250 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import (pyqtProperty, pyqtSignal, Q_CLASSINFO,
+        QCoreApplication, QDate, QObject, QTime, QUrl)
+from PyQt5.QtGui import QColor
+from PyQt5.QtQml import (qmlAttachedPropertiesObject, qmlRegisterType,
+        QQmlComponent, QQmlEngine, QQmlListProperty)
+
+
+QML = b'''
+import People 1.0
+import QtQuick 2.0
+
+BirthdayParty {
+    onPartyStarted: console.log("This party started rockin' at " + time);
+
+    host: Boy {
+        name: "Bob Jones"
+        shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
+    }
+
+    Boy {
+        name: "Leo Hodges"
+        BirthdayParty.rsvp: "2009-07-06"
+        shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
+    }
+
+    Boy {
+        name: "Jack Smith"
+        shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
+    }
+
+    Girl {
+        name: "Anne Brown"
+        BirthdayParty.rsvp: "2009-07-01"
+        shoe.size: 7
+        shoe.color: "red"
+        shoe.brand: "Marc Jacobs"
+        shoe.price: 699.99
+    }
+}
+'''
+
+
+class ShoeDescription(QObject):
+    def __init__(self, parent=None):
+        super(ShoeDescription, self).__init__(parent)
+
+        self._size = 0
+        self._color = QColor()
+        self._brand = ''
+        self._price = 0.0
+
+    @pyqtProperty(int)
+    def size(self):
+        return self._size
+
+    @size.setter
+    def size(self, size):
+        self._size = size
+
+    @pyqtProperty(QColor)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        self._color = color
+
+    @pyqtProperty(str)
+    def brand(self):
+        return self._brand
+
+    @brand.setter
+    def brand(self, brand):
+        self._brand = brand
+
+    @pyqtProperty(float)
+    def price(self):
+        return self._price
+
+    @price.setter
+    def price(self, price):
+        self._price = price
+
+
+class Person(QObject):
+    def __init__(self, parent=None):
+        super(Person, self).__init__(parent)
+
+        self._name = ''
+        self._shoe = ShoeDescription()
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @pyqtProperty(ShoeDescription)
+    def shoe(self):
+        return self._shoe
+
+
+class Boy(Person):
+    pass
+
+
+class Girl(Person):
+    pass
+
+
+class BirthdayPartyAttached(QObject):
+    def __init__(self, parent):
+        super(BirthdayPartyAttached, self).__init__(parent)
+
+        self._rsvp = QDate()
+
+    @pyqtProperty(QDate)
+    def rsvp(self):
+        return self._rsvp
+
+    @rsvp.setter
+    def rsvp(self, rsvp):
+        self._rsvp = rsvp
+
+
+class BirthdayParty(QObject):
+    Q_CLASSINFO('DefaultProperty', 'guests')
+
+    partyStarted = pyqtSignal(QTime, arguments=['time'])
+
+    def __init__(self, parent=None):
+        super(BirthdayParty, self).__init__(parent)
+
+        self._host = None
+        self._guests = []
+
+    @pyqtProperty(Person)
+    def host(self):
+        return self._host
+
+    @host.setter
+    def host(self, host):
+        self._host = host
+
+    @pyqtProperty(QQmlListProperty)
+    def guests(self):
+        return QQmlListProperty(Person, self, self._guests)
+
+    def guestCount(self):
+        return len(self._guests)
+
+    def guest(self, idx):
+        return self._guests[idx]
+
+    def startParty(self):
+        self.partyStarted.emit(QTime.currentTime())
+
+
+app = QCoreApplication(sys.argv)
+
+qmlRegisterType(BirthdayPartyAttached)
+qmlRegisterType(BirthdayParty, "People", 1, 0, "BirthdayParty",
+        attachedProperties=BirthdayPartyAttached)
+qmlRegisterType(ShoeDescription)
+qmlRegisterType(Person)
+qmlRegisterType(Boy, "People", 1, 0, "Boy")
+qmlRegisterType(Girl, "People", 1, 0, "Girl")
+
+engine = QQmlEngine()
+
+component = QQmlComponent(engine)
+component.setData(QML, QUrl())
+
+party = component.create()
+
+if party is not None and party.host is not None:
+    print("\"%s\" is having a birthday!" % party.host.name)
+
+    if isinstance(party.host, Boy):
+        print("He is inviting:")
+    else:
+        print("She is inviting:")
+
+    for ii in range(party.guestCount()):
+        guest = party.guest(ii)
+
+        attached = qmlAttachedPropertiesObject(BirthdayParty, guest, False)
+
+        if attached is not None:
+            rsvpDate = attached.property('rsvp')
+        else:
+            rsvpDate = QDate()
+
+        if rsvpDate.isNull():
+            print("    \"%s\" RSVP date: Hasn't RSVP'd" % guest.name)
+        else:
+            print("    \"%s\" RSVP date: %s" % (guest.name, rsvpDate.toString()))
+
+    party.startParty()
+else:
+    for e in component.errors():
+        print("Error:", e.toString());
diff --git a/examples/qml/referenceexamples/valuesource.py b/examples/qml/referenceexamples/valuesource.py
new file mode 100755
index 0000000..a880243
--- /dev/null
+++ b/examples/qml/referenceexamples/valuesource.py
@@ -0,0 +1,333 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import (pyqtProperty, pyqtSignal, pyqtSlot, Q_CLASSINFO,
+        QCoreApplication, QDate, QObject, QTime, QTimer, QUrl)
+from PyQt5.QtGui import QColor
+from PyQt5.QtQml import (qmlAttachedPropertiesObject, qmlRegisterType,
+        QQmlComponent, QQmlEngine, QQmlListProperty, QQmlProperty,
+        QQmlPropertyValueSource)
+
+
+QML = b'''
+import People 1.0
+import QtQuick 2.0
+
+BirthdayParty {
+    HappyBirthdaySong on announcement { name: "Bob Jones" }
+
+    onPartyStarted: console.log("This party started rockin' at " + time);
+
+    host: Boy {
+        name: "Bob Jones"
+        shoe { size: 12; color: "white"; brand: "Nike"; price: 90.0 }
+    }
+
+    Boy {
+        name: "Leo Hodges"
+        BirthdayParty.rsvp: "2009-07-06"
+        shoe { size: 10; color: "black"; brand: "Reebok"; price: 59.95 }
+    }
+
+    Boy {
+        name: "Jack Smith"
+        shoe { size: 8; color: "blue"; brand: "Puma"; price: 19.95 }
+    }
+
+    Girl {
+        name: "Anne Brown"
+        BirthdayParty.rsvp: "2009-07-01"
+        shoe.size: 7
+        shoe.color: "red"
+        shoe.brand: "Marc Jacobs"
+        shoe.price: 699.99
+    }
+}
+'''
+
+
+class ShoeDescription(QObject):
+    def __init__(self, parent=None):
+        super(ShoeDescription, self).__init__(parent)
+
+        self._size = 0
+        self._color = QColor()
+        self._brand = ''
+        self._price = 0.0
+
+    shoeChanged = pyqtSignal()
+
+    @pyqtProperty(int, notify=shoeChanged)
+    def size(self):
+        return self._size
+
+    @size.setter
+    def size(self, size):
+        if self._size != size:
+            self._size = size
+            self.shoeChanged.emit()
+
+    @pyqtProperty(QColor, notify=shoeChanged)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        if self._color != color:
+            self._color = color
+            self.shoeChanged.emit()
+
+    @pyqtProperty(str, notify=shoeChanged)
+    def brand(self):
+        return self._brand
+
+    @brand.setter
+    def brand(self, brand):
+        if self._brand != brand:
+            self._brand = brand
+            self.shoeChanged.emit()
+
+    @pyqtProperty(float, notify=shoeChanged)
+    def price(self):
+        return self._price
+
+    @price.setter
+    def price(self, price):
+        if self._price != price:
+            self._price = price
+            self.shoeChanged.emit()
+
+
+class Person(QObject):
+    def __init__(self, parent=None):
+        super(Person, self).__init__(parent)
+
+        self._name = ''
+        self._shoe = ShoeDescription()
+
+    nameChanged = pyqtSignal()
+
+    @pyqtProperty(str, notify=nameChanged)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        if self._name != name:
+            self._name = name
+            self.nameChanged.emit()
+
+    @pyqtProperty(ShoeDescription)
+    def shoe(self):
+        return self._shoe
+
+
+class Boy(Person):
+    pass
+
+
+class Girl(Person):
+    pass
+
+
+class BirthdayPartyAttached(QObject):
+    def __init__(self, parent):
+        super(BirthdayPartyAttached, self).__init__(parent)
+
+        self._rsvp = QDate()
+
+    rsvpChanged = pyqtSignal()
+
+    @pyqtProperty(QDate, notify=rsvpChanged)
+    def rsvp(self):
+        return self._rsvp
+
+    @rsvp.setter
+    def rsvp(self, rsvp):
+        if self._rsvp != rsvp:
+            self._rsvp = rsvp
+            self.rsvpChanged.emit()
+
+
+class BirthdayParty(QObject):
+    Q_CLASSINFO('DefaultProperty', 'guests')
+
+    partyStarted = pyqtSignal(QTime, arguments=['time'])
+
+    def __init__(self, parent=None):
+        super(BirthdayParty, self).__init__(parent)
+
+        self._host = None
+        self._guests = []
+
+    hostChanged = pyqtSignal()
+
+    @pyqtProperty(Person, notify=hostChanged)
+    def host(self):
+        return self._host
+
+    @host.setter
+    def host(self, host):
+        if self._host != host:
+            self._host = host
+            self.hostChanged.emit()
+
+    @pyqtProperty(QQmlListProperty)
+    def guests(self):
+        return QQmlListProperty(Person, self, self._guests)
+
+    def guestCount(self):
+        return len(self._guests)
+
+    def guest(self, idx):
+        return self._guests[idx]
+
+    @pyqtProperty(str)
+    def announcement(self):
+        return ''
+
+    @announcement.setter
+    def announcement(self, announcement):
+        print(announcement)
+
+    def startParty(self):
+        self.partyStarted.emit(QTime.currentTime())
+
+
+class HappyBirthdaySong(QObject, QQmlPropertyValueSource):
+    def __init__(self, parent=None):
+        super(HappyBirthdaySong, self).__init__(parent)
+
+        self._line = -1
+        self._lyrics = []
+        self._target = QQmlProperty()
+        self._name = ''
+
+        timer = QTimer(self)
+        timer.timeout.connect(self.advance)
+        timer.start(1000)
+
+    nameChanged = pyqtSignal()
+
+    @pyqtProperty(str, notify=nameChanged)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        if self._name != name:
+            self._name = name
+
+            self._lyrics = [
+                "",
+                "Happy birthday to you,",
+                "Happy birthday to you,",
+                "Happy birthday dear %s," % self._name,
+                "Happy birthday to you!"
+            ]
+
+            self.nameChanged.emit()
+
+    def setTarget(self, target):
+        self._target = target
+
+    @pyqtSlot()
+    def advance(self):
+        self._line += 1
+
+        if self._line < len(self._lyrics):
+            self._target.write(self._lyrics[self._line])
+        else:
+            QCoreApplication.instance().quit()
+
+
+app = QCoreApplication(sys.argv)
+
+qmlRegisterType(BirthdayPartyAttached)
+qmlRegisterType(BirthdayParty, "People", 1, 0, "BirthdayParty",
+        attachedProperties=BirthdayPartyAttached)
+qmlRegisterType(HappyBirthdaySong, "People", 1, 0, "HappyBirthdaySong")
+qmlRegisterType(ShoeDescription)
+qmlRegisterType(Person)
+qmlRegisterType(Boy, "People", 1, 0, "Boy")
+qmlRegisterType(Girl, "People", 1, 0, "Girl")
+
+engine = QQmlEngine()
+
+component = QQmlComponent(engine)
+component.setData(QML, QUrl())
+
+party = component.create()
+
+if party is not None and party.host is not None:
+    print("\"%s\" is having a birthday!" % party.host.name)
+
+    if isinstance(party.host, Boy):
+        print("He is inviting:")
+    else:
+        print("She is inviting:")
+
+    for ii in range(party.guestCount()):
+        guest = party.guest(ii)
+
+        attached = qmlAttachedPropertiesObject(BirthdayParty, guest, False)
+
+        if attached is not None:
+            rsvpDate = attached.property('rsvp')
+        else:
+            rsvpDate = QDate()
+
+        if rsvpDate.isNull():
+            print("    \"%s\" RSVP date: Hasn't RSVP'd" % guest.name)
+        else:
+            print("    \"%s\" RSVP date: %s" % (guest.name, rsvpDate.toString()))
+
+    party.startParty()
+else:
+    for e in component.errors():
+        print("Error:", e.toString());
+
+sys.exit(app.exec_())
diff --git a/examples/qtdemo/colors.py b/examples/qtdemo/colors.py
new file mode 100644
index 0000000..bebdc7a
--- /dev/null
+++ b/examples/qtdemo/colors.py
@@ -0,0 +1,279 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtGui import QColor, QFont
+from PyQt5.QtWidgets import QMessageBox, QWidget
+
+
+class Colors(object):
+    # Colors:
+    sceneBg1 = QColor(91, 91, 91)
+    sceneBg1Line = QColor(114, 108, 104)
+    sceneBg2 = QColor(0, 0, 0)
+    sceneLine = QColor(255, 255, 255)
+    paperBg = QColor(100, 100, 100)
+    menuTextFg = QColor(255, 0, 0)
+    buttonBgLow = QColor(255, 255, 255, 90)
+    buttonBgHigh = QColor(255, 255, 255, 20)
+    buttonText = QColor(255, 255, 255)
+    tt_green = QColor(166, 206, 57)
+    fadeOut = QColor(206, 246, 117, 0)
+    heading = QColor(190, 230, 80)
+    contentColor = "<font color='#eeeeee'>"
+    glVersion = "Not detected!"
+
+    # Guides:
+    stageStartY = 8
+    stageHeight = 536
+    stageStartX = 8
+    stageWidth = 785
+    contentStartY = 22
+    contentHeight = 510
+
+    # Properties:
+    noTicker = False
+    noRescale = False
+    noAnimations = False
+    noBlending = False
+    noScreenSync = False
+    fullscreen = False
+    usePixmaps = False
+    useLoop = False
+    showBoundingRect = False
+    showFps = False
+    noAdapt = False
+    noWindowMask = True
+    useButtonBalls = False
+    useEightBitPalette = False
+    noTimerUpdate = False
+    noTickerMorph = False
+    adapted = False
+    verbose = False
+    pause = True
+
+    fps = 100
+    menuCount = 18
+    animSpeed = 1.0
+    benchmarkFps = -1.0
+    tickerLetterCount = 80;
+    tickerMoveSpeed = 0.4
+    tickerMorphSpeed = 2.5
+    tickerText = ".EROM ETAERC .SSEL EDOC"
+    rootMenuName = "PyQt Examples"
+
+    @staticmethod
+    def contentFont():
+        font = QFont()
+        font.setStyleStrategy(QFont.PreferAntialias)
+
+        if sys.platform == 'darwin':
+            font.setPixelSize(14)
+            font.setFamily('Arial')
+        else:
+            font.setPixelSize(13)
+            font.setFamily('Verdana')
+
+        return font
+
+    @staticmethod
+    def headingFont():
+        font = QFont()
+        font.setStyleStrategy(QFont.PreferAntialias)
+
+        font.setPixelSize(23)
+        font.setBold(True)
+        font.setFamily('Verdana')
+
+        return font;
+
+    @staticmethod
+    def buttonFont():
+        font = QFont()
+        font.setStyleStrategy(QFont.PreferAntialias)
+
+        font.setPixelSize(11)
+        font.setFamily('Verdana')
+
+        return font
+
+    @staticmethod
+    def tickerFont():
+        font = QFont()
+        font.setStyleStrategy(QFont.PreferAntialias)
+
+        if sys.platform == 'darwin':
+            font.setPixelSize(11)
+            font.setBold(True)
+            font.setFamily('Arial')
+        else:
+            font.setPixelSize(10)
+            font.setBold(True)
+            font.setFamily('sans serif')
+
+        return font
+
+    @classmethod
+    def debug(cls, *args):
+        if cls.verbose:
+            sys.stderr.write("%s\n" % " ".join([str(arg) for arg in args]))
+
+    @classmethod
+    def parseArgs(cls, argv):
+        # Some arguments should be processed before others.  Handle them now.
+        if "-verbose" in argv:
+            cls.verbose = True
+
+        # Handle the rest of the arguments.  They may override attributes
+        # already set.
+        for s in argv:
+            if s == "-no-ticker":
+                cls.noTicker = True
+            elif s.startswith("-ticker"):
+                cls.noTicker =  not bool(parseFloat(s, "-ticker"))
+            elif s == "-no-animations":
+                cls.noAnimations = True
+            elif s.startswith("-animations"):
+                cls.noAnimations = not bool(parseFloat(s, "-animations"))
+            elif s == "-no-adapt":
+                # Don't adapt the animations based on the actual performance.
+                cls.noAdapt = True
+            elif s == "-low":
+                cls.setLowSettings()
+            elif s == "-no-rescale":
+                cls.noRescale = True
+            elif s == "-use-pixmaps":
+                cls.usePixmaps = True
+            elif s == "-fullscreen":
+                cls.fullscreen = True
+            elif s == "-show-br":
+                cls.showBoundingRect = True
+            elif s == "-show-fps":
+                cls.showFps = True
+            elif s == "-no-blending":
+                cls.noBlending = True
+            elif s == "-no-sync":
+                cls.noScreenSync = True
+            elif s.startswith("-menu"):
+                cls.menuCount = int(parseFloat(s, "-menu"))
+            elif s.startswith("-use-timer-update"):
+                cls.noTimerUpdate = not bool(parseFloat(s, "-use-timer-update"))
+            elif s.startswith("-pause"):
+                cls.pause = bool(parseFloat(s, "-pause"))
+            elif s == "-no-ticker-morph":
+                cls.noTickerMorph = True
+            elif s == "-use-window-mask":
+                cls.noWindowMask = False
+            elif s == "-use-loop":
+                cls.useLoop = True
+            elif s == "-use-8bit":
+                cls.useEightBitPalette = True
+            elif s.startswith("-8bit"):
+                cls.useEightBitPalette = bool(parseFloat(s, "-8bit"))
+            elif s == "-use-balls":
+                cls.useButtonBalls = True
+            elif s.startswith("-ticker-letters"):
+                cls.tickerLetterCount = int(parseFloat(s, "-ticker-letters"))
+            elif s.startswith("-ticker-text"):
+                cls.tickerText = parseText(s, "-ticker-text")
+            elif s.startswith("-ticker-speed"):
+                cls.tickerMoveSpeed = parseFloat(s, "-ticker-speed")
+            elif s.startswith("-ticker-morph-speed"):
+                cls.tickerMorphSpeed = parseFloat(s, "-ticker-morph-speed")
+            elif s.startswith("-animation-speed"):
+                cls.animSpeed = parseFloat(s, "-animation-speed")
+            elif s.startswith("-fps"):
+                cls.fps = int(parseFloat(s, "-fps"))
+            elif s.startswith("-h") or s.startswith("-help"):
+                QMessageBox.warning(None, "Arguments",
+                        "Usage: qtdemo.py [-verbose] [-no-adapt] "
+                        "[-fullscreen] [-ticker[0|1]] "
+                        "[-animations[0|1]] [-no-blending] [-no-sync] "
+                        "[-use-timer-update[0|1]] [-pause[0|1]] "
+                        "[-use-window-mask] [-no-rescale] [-use-pixmaps] "
+                        "[-show-fps] [-show-br] [-8bit[0|1]] [-menu<int>] "
+                        "[-use-loop] [-use-balls] [-animation-speed<float>] "
+                        "[-fps<int>] [-low] [-ticker-letters<int>] "
+                        "[-ticker-speed<float>] [-no-ticker-morph] "
+                        "[-ticker-morph-speed<float>] [-ticker-text<string>]")
+                sys.exit(0)
+
+        cls.postConfigure()
+
+    @classmethod
+    def setLowSettings(cls):
+        cls.noTicker = True
+        cls.noTimerUpdate = True
+        cls.fps = 30
+        cls.usePixmaps = True
+        cls.noAnimations = True
+        cls.noBlending = True
+
+    @classmethod
+    def postConfigure(cls):
+        if not cls.noAdapt:
+            w = QWidget()
+
+            if w.depth() < 16:
+                cls.useEightBitPalette = True
+                cls.adapted = True
+                cls.debug("- Adapt: Color depth less than 16 bit. Using 8 bit palette")
+
+
+def parseFloat(argument, name):
+    try:
+        value = float(parseText(argument, name))
+    except ValueError:
+        value = 0.0
+
+    return value
+
+
+def parseText(argument, name):
+    if len(name) == len(argument):
+        QMessageBox.warning(None, "Arguments",
+                "No argument number found for %s. Remember to put name and "
+                "value adjacent! (e.g. -fps100)")
+        sys.exit(0)
+
+    return argument[len(name):]
diff --git a/examples/qtdemo/demoitem.py b/examples/qtdemo/demoitem.py
new file mode 100644
index 0000000..4e19f27
--- /dev/null
+++ b/examples/qtdemo/demoitem.py
@@ -0,0 +1,236 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QPointF, QRectF, qRound
+from PyQt5.QtGui import QColor, QPainter, QPixmap, QTransform
+from PyQt5.QtWidgets import QGraphicsObject
+
+from colors import Colors
+
+
+class SharedImage(object):
+    def __init__(self):
+        self.refCount = 0
+        self.image = None
+        self.pixmap = None
+        self.transform = QTransform()
+        self.unscaledBoundingRect = QRectF()
+
+
+class DemoItem(QGraphicsObject):
+    _sharedImageHash = {}
+
+    _transform = QTransform()
+
+    def __init__(self, parent=None):
+        super(DemoItem, self).__init__(parent)
+
+        self.noSubPixeling = False
+        self.currentAnimation = None
+        self.currGuide = None
+        self.guideFrame = 0.0
+
+        self._sharedImage = SharedImage()
+        self._sharedImage.refCount += 1
+        self._hashKey = ''
+
+    def __del__(self):
+        self._sharedImage.refCount -= 1
+        if self._sharedImage.refCount == 0:
+            if self._hashKey:
+                del DemoItem._sharedImageHash[self._hashKey]
+
+    def animationStarted(self, id=0):
+        pass
+
+    def animationStopped(self, id=0):
+        pass
+
+    def setRecursiveVisible(self, visible):
+        self.setVisible(visible)
+        for c in self.childItems():
+            c.setVisible(visible)
+
+    def useGuide(self, guide, startFrame):
+        self.guideFrame = startFrame
+        while self.guideFrame > guide.startLength + guide.length():
+            if guide.nextGuide == guide.firstGuide:
+                break
+
+            guide = guide.nextGuide
+
+        self.currGuide = guide
+
+    def guideAdvance(self, distance):
+        self.guideFrame += distance
+        while self.guideFrame > self.currGuide.startLength + self.currGuide.length():
+            self.currGuide = self.currGuide.nextGuide
+            if self.currGuide == self.currGuide.firstGuide:
+                self.guideFrame -= self.currGuide.lengthAll()
+
+    def guideMove(self, moveSpeed):
+        self.currGuide.guide(self, moveSpeed)
+
+    def setPosUsingSheepDog(self, dest, sceneFence):
+        self.setPos(dest)
+        if sceneFence.isNull():
+            return
+
+        itemWidth = self.boundingRect().width()
+        itemHeight = self.boundingRect().height()
+        fenceRight = sceneFence.x() + sceneFence.width()
+        fenceBottom = sceneFence.y() + sceneFence.height()
+
+        if self.scenePos().x() < sceneFence.x():
+            self.moveBy(self.mapFromScene(QPointF(sceneFence.x(), 0)).x(), 0)
+
+        if self.scenePos().x() > fenceRight - itemWidth:
+            self.moveBy(self.mapFromScene(QPointF(fenceRight - itemWidth, 0)).x(), 0)
+
+        if self.scenePos().y() < sceneFence.y():
+            self.moveBy(0, self.mapFromScene(QPointF(0, sceneFence.y())).y())
+
+        if self.scenePos().y() > fenceBottom - itemHeight:
+            self.moveBy(0, self.mapFromScene(QPointF(0, fenceBottom - itemHeight)).y())
+
+    def setGuidedPos(self, pos):
+        # Make sure we have a copy.
+        self.guidedPos = QPointF(pos)
+
+    def getGuidedPos(self):
+        # Return a copy so that it can be changed.
+        return QPointF(self.guidedPos)
+
+    @staticmethod
+    def setTransform(transform):
+        DemoItem._transform = transform
+
+    def useSharedImage(self, hashKey):
+        self._hashKey = hashKey
+        if hashKey not in DemoItem._sharedImageHash:
+            DemoItem._sharedImageHash[hashKey] = self._sharedImage
+        else:
+            self._sharedImage.refCount -= 1
+            self._sharedImage = DemoItem._sharedImageHash[hashKey]
+            self._sharedImage.refCount += 1
+
+    def createImage(self, transform):
+        return None
+
+    def _validateImage(self):
+        if (self._sharedImage.transform != DemoItem._transform and not Colors.noRescale) or (self._sharedImage.image is None and self._sharedImage.pixmap is None):
+            # (Re)create image according to new transform.
+            self._sharedImage.image = None
+            self._sharedImage.pixmap = None
+            self._sharedImage.transform = DemoItem._transform
+
+            # Let subclass create and draw a new image according to the new
+            # transform.
+            if Colors.noRescale:
+                transform = QTransform()
+            else:
+                transform = DemoItem._transform
+            image = self.createImage(transform)
+            if image is not None:
+                if Colors.showBoundingRect:
+                    # Draw red transparent rect.
+                    painter = QPainter(image)
+                    painter.fillRect(image.rect(), QColor(255, 0, 0, 50))
+                    painter.end()
+
+                self._sharedImage.unscaledBoundingRect = self._sharedImage.transform.inverted()[0].mapRect(QRectF(image.rect()))
+
+                if Colors.usePixmaps:
+                    if image.isNull():
+                        self._sharedImage.pixmap = QPixmap(1, 1)
+                    else:
+                        self._sharedImage.pixmap = QPixmap(image.size())
+
+                    self._sharedImage.pixmap.fill(QColor(0, 0, 0, 0))
+                    painter = QPainter(self._sharedImage.pixmap)
+                    painter.drawImage(0, 0, image)
+                else:
+                    self._sharedImage.image = image
+
+                return True
+            else:
+                return False
+
+        return True
+
+    def boundingRect(self):
+        self._validateImage()
+        return self._sharedImage.unscaledBoundingRect
+
+    def paint(self, painter, option=None, widget=None):
+        if self._validateImage():
+            wasSmoothPixmapTransform = painter.testRenderHint(QPainter.SmoothPixmapTransform)
+            painter.setRenderHint(QPainter.SmoothPixmapTransform)
+
+            if Colors.noRescale:
+                # Let the painter scale the image for us.  This may degrade
+                # both quality and performance.
+                if self._sharedImage.image is not None:
+                    painter.drawImage(self.pos(), self._sharedImage.image)
+                else:
+                    painter.drawPixmap(self.pos(), self._sharedImage.pixmap)
+            else:
+                m = painter.worldTransform()
+                painter.setWorldTransform(QTransform())
+
+                x = m.dx()
+                y = m.dy()
+                if self.noSubPixeling:
+                    x = qRound(x)
+                    y = qRound(y)
+
+                if self._sharedImage.image is not None:
+                    painter.drawImage(QPointF(x, y), self._sharedImage.image)
+                else:
+                    painter.drawPixmap(QPointF(x, y), self._sharedImage.pixmap)
+
+            if not wasSmoothPixmapTransform:
+                painter.setRenderHint(QPainter.SmoothPixmapTransform,
+                        False)
+
+    def collidesWithItem(self, item, mode):
+        return False
diff --git a/examples/qtdemo/demoitemanimation.py b/examples/qtdemo/demoitemanimation.py
new file mode 100644
index 0000000..4942f27
--- /dev/null
+++ b/examples/qtdemo/demoitemanimation.py
@@ -0,0 +1,124 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QPropertyAnimation, QTimer
+
+from colors import Colors
+
+
+class DemoItemAnimation(QPropertyAnimation):
+    ANIM_IN, ANIM_OUT, ANIM_UNSPECIFIED = range(3)
+
+    def __init__(self, item, inOrOut=ANIM_UNSPECIFIED):
+        super(DemoItemAnimation, self).__init__(item, 'pos')
+
+        self._startDelay = 0
+        self._inOrOut = inOrOut
+        self._hideOnFinished = False
+
+    def prepare(self):
+        self.targetObject().prepare()
+
+    def setHideOnFinished(self, hide):
+        self._hideOnFinshed = hide
+
+    def setStartDelay(self, delay):
+        self._startDelay = delay
+
+    def setDuration(self, duration):
+        duration = int(duration * Colors.animSpeed)
+        super(DemoItemAnimation, self).setDuration(duration)
+
+    def notOwnerOfItem(self):
+        return self is not self.targetObject().currentAnimation
+
+    def play(self, fromStart=True, force=False):
+        item = self.targetObject()
+
+        # If the item that this animation controls in currently under the
+        # control of another animation, stop that animation first.
+        if item.currentAnimation is not None:
+            item.currentAnimation.stop()
+
+        item.currentAnimation = self
+
+        if Colors.noAnimations and not force:
+            # If animations are disabled just move to the end position.
+            item.setPos(self.endValue())
+        else:
+            if self.isVisible():
+                # If the item is already visible, start the animation from the
+                # item's current position rather than from the start.
+                self.setStartValue(item.pos())
+
+            if fromStart:
+                self.setCurrentTime(0)
+                item.setPos(self.startValue())
+
+        if self._inOrOut == DemoItemAnimation.ANIM_IN:
+            item.setRecursiveVisible(True)
+
+        if not Colors.noAnimations or force:
+            if self._startDelay:
+                QTimer.singleShot(self._startDelay, self.start)
+            else:
+                self.start()
+
+    def setCurveShape(self, shape):
+        self.setEasingCurve(shape)
+
+    def setEnabled(self, enabled):
+        self.targetObject().setEnabled(enabled)
+
+    def isVisible(self):
+        return self.targetObject().isVisible()
+
+    def updateState(self, new, old):
+        item = self.targetObject()
+
+        if new == QPropertyAnimation.Running:
+            item.animationStarted(self._inOrOut)
+        elif new == QPropertyAnimation.Stopped:
+            if self._hideOnFinished:
+                item.setRecursiveVisible(False)
+
+            item.animationStopped(self._inOrOut)
diff --git a/examples/qtdemo/demotextitem.py b/examples/qtdemo/demotextitem.py
new file mode 100644
index 0000000..e91a2ba
--- /dev/null
+++ b/examples/qtdemo/demotextitem.py
@@ -0,0 +1,113 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QRectF
+from PyQt5.QtGui import QColor, QImage, QPainter
+from PyQt5.QtWidgets import QGraphicsTextItem, QStyleOptionGraphicsItem
+
+from demoitem import DemoItem
+
+
+class DemoTextItem(DemoItem):
+    STATIC_TEXT, DYNAMIC_TEXT = range(2)
+
+    def __init__(self, text, font, textColor, textWidth, parent=None, type=STATIC_TEXT, bgColor=QColor()):
+        super(DemoTextItem, self).__init__(parent)
+
+        self.type = type
+        self.text = text
+        self.font = font
+        self.textColor = textColor
+        self.bgColor = bgColor
+        self.textWidth = textWidth
+        self.noSubPixeling = True
+
+    def setText(self, text):
+        self.text = text
+        self.update()
+
+    def createImage(self, transform):
+        if self.type == DemoTextItem.DYNAMIC_TEXT:
+            return None
+
+        sx = min(transform.m11(), transform.m22())
+        sy = max(transform.m22(), sx)
+
+        textItem = QGraphicsTextItem()
+        textItem.setHtml(self.text)
+        textItem.setTextWidth(self.textWidth)
+        textItem.setFont(self.font)
+        textItem.setDefaultTextColor(self.textColor)
+        textItem.document().setDocumentMargin(2)
+
+        w = textItem.boundingRect().width()
+        h = textItem.boundingRect().height()
+        image = QImage(int(w * sx), int(h * sy),
+                QImage.Format_ARGB32_Premultiplied)
+        image.fill(QColor(0, 0, 0, 0).rgba())
+        painter = QPainter(image)
+        painter.scale(sx, sy)
+        style = QStyleOptionGraphicsItem()
+        textItem.paint(painter, style, None)
+
+        return image
+
+    def animationStarted(self, id=0):
+        self.noSubPixeling = False
+
+    def animationStopped(self, id=0):
+        self.noSubPixeling = True
+
+    def boundingRect(self):
+        if self.type == DemoTextItem.STATIC_TEXT:
+            return super(DemoTextItem, self).boundingRect()
+
+        # Sorry for using magic number.
+        return QRectF(0, 0, 50, 20)
+
+    def paint(self, painter, option, widget):
+        if self.type == DemoTextItem.STATIC_TEXT:
+            super(DemoTextItem, self).paint(painter, option, widget)
+            return
+
+        painter.setPen(self.textColor)
+        painter.drawText(0, 0, self.text)
diff --git a/examples/qtdemo/examplecontent.py b/examples/qtdemo/examplecontent.py
new file mode 100644
index 0000000..2a7e36f
--- /dev/null
+++ b/examples/qtdemo/examplecontent.py
@@ -0,0 +1,151 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from xml.dom.minidom import parseString
+
+from PyQt5.QtCore import QRectF, QRegExp, Qt
+from PyQt5.QtGui import QImage
+
+from colors import Colors
+from demoitem import DemoItem
+from demoitemanimation import DemoItemAnimation
+from demotextitem import DemoTextItem
+from headingitem import HeadingItem
+from imageitem import ImageItem
+
+
+class ExampleContent(DemoItem):
+    def __init__(self, name, parent=None):
+        super(ExampleContent, self).__init__(parent)
+
+        # Prevent a circular import.
+        from menumanager import MenuManager
+        self._menu_manager = MenuManager.instance()
+
+        self.name = name
+        self.heading = None
+        self.description = None
+        self.screenshot = None
+
+        self._prepared = False
+
+    def prepare(self):
+        if not self._prepared:
+            self.createContent()
+            self._prepared = True
+
+    def animationStopped(self, id):
+        if id == DemoItemAnimation.ANIM_OUT:
+            # Free up some memory.
+            self.heading = None
+            self.description = None
+            self.screenshot = None
+            self._prepared = False
+
+    def loadDescription(self):
+        contents = self._menu_manager.getHtml(self.name).data().decode('utf8')
+        if contents == '':
+            paragraphs = []
+        else:
+            exampleDoc = parseString(contents)
+            paragraphs = exampleDoc.getElementsByTagName('p')
+
+        if len(paragraphs) < 1:
+            Colors.debug("- ExampleContent.loadDescription(): Could not load description:", self._menu_manager.info[self.name].get('docfile'))
+
+        description = Colors.contentColor + "Could not load description. Ensure that the documentation for Qt is built."
+        for p in paragraphs:
+            description = self.extractTextFromParagraph(p)
+            if self.isSummary(description):
+                break
+
+        return Colors.contentColor + description
+
+    def isSummary(self, text):
+        re = QRegExp("(In )?((The|This) )?(%s )?.*(tutorial|example|demo|application)" % self.name, Qt.CaseInsensitive)
+
+        return ('[' not in text) and (re.indexIn(text) >= 0)
+
+    def extractTextFromParagraph(self, parentNode):
+        description = ''
+        node = parentNode.firstChild
+
+        while node is not None:
+            if node.nodeType == node.TEXT_NODE:
+                description += Colors.contentColor + node.nodeValue
+            elif node.hasChildNodes():
+                if node.nodeName == 'b':
+                    beginTag = '<b>'
+                    endTag = '</b>'
+                elif node.nodeName == 'a':
+                    beginTag = Colors.contentColor
+                    endTag = '</font>'
+                elif node.nodeName == 'i':
+                    beginTag = '<i>'
+                    endTag = '</i>'
+                elif node.nodeName == 'tt':
+                    beginTag = '<tt>'
+                    endTag = '</tt>'
+                else:
+                    beginTag = endTag = ''
+
+                description += beginTag + self.extractTextFromParagraph(node) + endTag
+
+            node = node.nextSibling
+
+        return description
+
+    def createContent(self):
+        # Create the items.
+        self.heading = HeadingItem(self.name, self)
+        self.description = DemoTextItem(self.loadDescription(),
+                Colors.contentFont(), Colors.heading, 500, self)
+        imgHeight = 340 - int(self.description.boundingRect().height()) + 50
+        self.screenshot = ImageItem(QImage.fromData(self._menu_manager.getImage(self.name)), 550, imgHeight, self)
+
+        # Place the items on screen.
+        self.heading.setPos(0, 3)
+        self.description.setPos(0, self.heading.pos().y() + self.heading.boundingRect().height() + 10)
+        self.screenshot.setPos(0, self.description.pos().y() + self.description.boundingRect().height() + 10)
+
+    def boundingRect(self):
+        return QRectF(0, 0, 500, 100)
diff --git a/examples/qtdemo/guide.py b/examples/qtdemo/guide.py
new file mode 100644
index 0000000..e03cdc4
--- /dev/null
+++ b/examples/qtdemo/guide.py
@@ -0,0 +1,140 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QLineF, QPointF
+
+
+class Guide(object):
+    def __init__(self, follows=None):
+        self.scaleX = 1.0
+        self.scaleY = 1.0
+
+        if follows is not None:
+            while follows.nextGuide is not follows.firstGuide:
+                follows = follows.nextGuide
+
+            follows.nextGuide = self
+            self.prevGuide = follows
+            self.firstGuide = follows.firstGuide
+            self.nextGuide = follows.firstGuide
+            self.startLength = int(follows.startLength + follows.length()) + 1
+        else:
+            self.prevGuide = self
+            self.firstGuide = self
+            self.nextGuide = self
+            self.startLength = 0
+
+    def setScale(self, scaleX, scaleY, all=True):
+        self.scaleX = scaleX
+        self.scaleY = scaleY
+
+        if all:
+            next = self.nextGuide
+            while next is not self:
+                next.scaleX = scaleX
+                next.scaleY = scaleY
+                next = next.nextGuide
+
+    def setFence(self, fence, all=True):
+        self.fence = fence
+
+        if all:
+            next = self.nextGuide
+            while next is not self:
+                next.fence = fence
+                next = next.nextGuide
+
+    def lengthAll(self):
+        len = self.length()
+        next = self.nextGuide
+        while next is not self:
+            len += next.length()
+            next = next.nextGuide
+
+        return len
+
+    def move(self, item, dest, moveSpeed):
+        walkLine = QLineF(item.getGuidedPos(), dest)
+        if moveSpeed >= 0 and walkLine.length() > moveSpeed:
+            # The item is too far away from it's destination point so we move
+            # it towards it instead.
+            dx = walkLine.dx()
+            dy = walkLine.dy()
+
+            if abs(dx) > abs(dy):
+                # Walk along x-axis.
+                if dx != 0:
+                    d = moveSpeed * dy / abs(dx)
+
+                    if dx > 0:
+                        s = moveSpeed
+                    else:
+                        s = -moveSpeed
+
+                    dest.setX(item.getGuidedPos().x() + s)
+                    dest.setY(item.getGuidedPos().y() + d)
+            else:
+                # Walk along y-axis.
+                if dy != 0:
+                    d = moveSpeed * dx / abs(dy)
+
+                    if dy > 0:
+                        s = moveSpeed
+                    else:
+                        s = -moveSpeed
+
+                    dest.setX(item.getGuidedPos().x() + d)
+                    dest.setY(item.getGuidedPos().y() + s)
+
+        item.setGuidedPos(dest)
+
+    def startPos(self):
+        return QPointF(0, 0)
+
+    def endPos(self):
+        return QPointF(0, 0)
+
+    def length(self):
+        return 1.0
+
+    def guide(self, item, moveSpeed):
+        raise NotImplementedError
diff --git a/examples/qtdemo/guidecircle.py b/examples/qtdemo/guidecircle.py
new file mode 100644
index 0000000..72d2a8b
--- /dev/null
+++ b/examples/qtdemo/guidecircle.py
@@ -0,0 +1,90 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import QPointF
+
+from guide import Guide
+
+
+PI2 = 2 * math.pi
+
+
+class GuideCircle(Guide):
+    CW = 1
+    CCW = -1
+
+    def __init__(self, rect, startAngle=0.0, span=360.0, dir=CCW, follows=None):
+        super(GuideCircle, self).__init__(follows)
+
+        self.radiusX = rect.width() / 2.0
+        self.radiusY = rect.height() / 2.0
+        self.posX = rect.topLeft().x()
+        self.posY = rect.topLeft().y()
+        self.spanRad = span * PI2 / -360.0
+
+        if dir == GuideCircle.CCW:
+            self.startAngleRad = startAngle * PI2 / -360.0
+            self.endAngleRad = self.startAngleRad + self.spanRad
+            self.stepAngleRad = self.spanRad / self.length()
+        else:
+            self.startAngleRad = self.spanRad + (startAngle * PI2 / -360.0)
+            self.endAngleRad = startAngle * PI2 / -360.0
+            self.stepAngleRad = -self.spanRad / self.length()
+
+    def length(self):
+        return abs(self.radiusX * self.spanRad)
+
+    def startPos(self):
+        return QPointF((self.posX + self.radiusX + self.radiusX * math.cos(self.startAngleRad)) * self.scaleX,
+                (self.posY + self.radiusY + self.radiusY * math.sin(self.startAngleRad)) * self.scaleY)
+
+    def endPos(self):
+        return QPointF((self.posX + self.radiusX + self.radiusX * math.cos(self.endAngleRad)) * self.scaleX,
+                (self.posY + self.radiusY + self.radiusY * math.sin(self.endAngleRad)) * self.scaleY)
+
+    def guide(self, item, moveSpeed):
+        frame = item.guideFrame - self.startLength
+        end = QPointF((self.posX + self.radiusX + self.radiusX * math.cos(self.startAngleRad + (frame * self.stepAngleRad))) * self.scaleX,
+                (self.posY + self.radiusY + self.radiusY * math.sin(self.startAngleRad + (frame * self.stepAngleRad))) * self.scaleY)
+        self.move(item, end, moveSpeed)
diff --git a/examples/qtdemo/guideline.py b/examples/qtdemo/guideline.py
new file mode 100644
index 0000000..ed55f6f
--- /dev/null
+++ b/examples/qtdemo/guideline.py
@@ -0,0 +1,75 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QLineF, QPointF
+
+from guide import Guide
+
+
+class GuideLine(Guide):
+    def __init__(self, line_or_point, follows=None):
+        super(GuideLine, self).__init__(follows)
+
+        if isinstance(line_or_point, QLineF):
+            self.line = line_or_point
+        elif follows is not None:
+            self.line = QLineF(self.prevGuide.endPos(), line_or_point)
+        else:
+            self.line = QLineF(QPointF(0, 0), line_or_point)
+
+    def length(self):
+        return self.line.length()
+
+    def startPos(self):
+        return QPointF(self.line.p1().x() * self.scaleX,
+                self.line.p1().y() * self.scaleY)
+
+    def endPos(self):
+        return QPointF(self.line.p2().x() * self.scaleX,
+                self.line.p2().y() * self.scaleY)
+
+    def guide(self, item, moveSpeed):
+        frame = item.guideFrame - self.startLength
+        endX = (self.line.p1().x() + (frame * self.line.dx() / self.length())) * self.scaleX
+        endY = (self.line.p1().y() + (frame * self.line.dy() / self.length())) * self.scaleY
+        pos = QPointF(endX, endY)
+        self.move(item, pos, moveSpeed)
diff --git a/examples/qtdemo/headingitem.py b/examples/qtdemo/headingitem.py
new file mode 100644
index 0000000..2c4ba75
--- /dev/null
+++ b/examples/qtdemo/headingitem.py
@@ -0,0 +1,105 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtGui import (QColor, QFontMetrics, QImage, QLinearGradient,
+        QPainter, QPen)
+
+from colors import Colors
+from demoitem import DemoItem
+
+
+class HeadingItem(DemoItem):
+    def __init__(self, text, parent=None):
+        super(HeadingItem, self).__init__(parent)
+
+        self.text = text
+        self.noSubPixeling = True
+
+    def createImage(self, transform):
+        sx = min(transform.m11(), transform.m22())
+        sy = max(transform.m22(), sx)
+        fm = QFontMetrics(Colors.headingFont())
+
+        w = fm.width(self.text) + 1
+        h = fm.height()
+        xShadow = 3.0
+        yShadow = 3.0
+
+        image = QImage(int((w + xShadow) * sx), int((h + yShadow) * sy),
+                QImage.Format_ARGB32_Premultiplied)
+        image.fill(QColor(0, 0, 0, 0).rgba())
+        painter = QPainter(image)
+        painter.setFont(Colors.headingFont())
+        painter.scale(sx, sy)
+
+        # Draw shadow.
+        brush_shadow = QLinearGradient(xShadow, yShadow, w, yShadow)
+        brush_shadow.setSpread(QLinearGradient.PadSpread)
+        if Colors.useEightBitPalette:
+            brush_shadow.setColorAt(0.0, QColor(0, 0, 0))
+        else:
+            brush_shadow.setColorAt(0.0, QColor(0, 0, 0, 100))
+        pen_shadow = QPen()
+        pen_shadow.setBrush(brush_shadow)
+        painter.setPen(pen_shadow)
+        painter.drawText(int(xShadow), int(yShadow), int(w), int(h),
+                Qt.AlignLeft, self.text)
+
+        # Draw text.
+        brush_text = QLinearGradient(0, 0, w, w)
+        brush_text.setSpread(QLinearGradient.PadSpread)
+        brush_text.setColorAt(0.0, QColor(255, 255, 255))
+        brush_text.setColorAt(0.2, QColor(255, 255, 255))
+        brush_text.setColorAt(0.5, QColor(190, 190, 190))
+        pen_text = QPen()
+        pen_text.setBrush(brush_text)
+        painter.setPen(pen_text)
+        painter.drawText(0, 0, int(w), int(h), Qt.AlignLeft, self.text)
+
+        return image
+
+    def animationStarted(self, id=0):
+        self.noSubPixeling = False
+
+    def animationStopped(self, id=0):
+        self.noSubPixeling = True
diff --git a/examples/qtdemo/imageitem.py b/examples/qtdemo/imageitem.py
new file mode 100644
index 0000000..583dee0
--- /dev/null
+++ b/examples/qtdemo/imageitem.py
@@ -0,0 +1,118 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QPoint
+from PyQt5.QtGui import QColor, QImage, QLinearGradient, QPainter
+
+from colors import Colors
+from demoitem import DemoItem
+
+
+class ImageItem(DemoItem):
+    def __init__(self, image, maxWidth, maxHeight, parent=None, adjustSize=False, scale=1.0):
+        super(ImageItem, self).__init__(parent)
+
+        self.image = image
+        self.maxWidth = maxWidth
+        self.maxHeight = maxHeight
+        self.adjustSize = adjustSize
+        self.scale = scale
+
+    def createImage(self, transform):
+        original = QImage(self.image)
+        if original.isNull():
+            return original
+
+        size = transform.map(QPoint(self.maxWidth, self.maxHeight))
+        w = size.x()
+        h = size.y()
+
+        # Optimization: if image is smaller than maximum allowed size, just
+        # return the loaded image.
+        if original.size().height() <= h and original.size().width() <= w and not self.adjustSize and self.scale == 1:
+            return original
+
+        # Calculate what the size of the final image will be.
+        w = min(w, float(original.size().width()) * self.scale)
+        h = min(h, float(original.size().height()) * self.scale)
+
+        adjustx = 1.0
+        adjusty = 1.0
+        if self.adjustSize:
+            adjustx = min(transform.m11(), transform.m22())
+            adjusty = max(transform.m22(), adjustx)
+            w *= adjustx
+            h *= adjusty
+
+        # Create a new image with correct size, and draw original on it.
+        image = QImage(int(w + 2), int(h + 2),
+                QImage.Format_ARGB32_Premultiplied)
+        image.fill(QColor(0, 0, 0, 0).rgba())
+        painter = QPainter(image)
+        painter.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
+        if self.adjustSize:
+            painter.scale(adjustx, adjusty)
+        if self.scale != 1:
+            painter.scale(self.scale, self.scale)
+        painter.drawImage(0, 0, original)
+
+        if not self.adjustSize:
+            # Blur out edges.
+            blur = 30
+
+            if h < original.height():
+                brush1 = QLinearGradient(0, h - blur, 0, h)
+                brush1.setSpread(QLinearGradient.PadSpread)
+                brush1.setColorAt(0.0, QColor(0, 0, 0, 0))
+                brush1.setColorAt(1.0, Colors.sceneBg1)
+                painter.fillRect(0, int(h) - blur, original.width(), int(h),
+                        brush1)
+
+            if w < original.width():
+                brush2 = QLinearGradient(w - blur, 0, w, 0)
+                brush2.setSpread(QLinearGradient.PadSpread)
+                brush2.setColorAt(0.0, QColor(0, 0, 0, 0))
+                brush2.setColorAt(1.0, Colors.sceneBg1)
+                painter.fillRect(int(w) - blur, 0, int(w), original.height(),
+                        brush2)
+
+        return image
diff --git a/examples/qtdemo/images/demobg.png b/examples/qtdemo/images/demobg.png
new file mode 100644
index 0000000..3280afa
Binary files /dev/null and b/examples/qtdemo/images/demobg.png differ
diff --git a/examples/qtdemo/images/qtlogo_small.png b/examples/qtdemo/images/qtlogo_small.png
new file mode 100644
index 0000000..21b17df
Binary files /dev/null and b/examples/qtdemo/images/qtlogo_small.png differ
diff --git a/examples/qtdemo/images/trolltech-logo.png b/examples/qtdemo/images/trolltech-logo.png
new file mode 100644
index 0000000..186c69c
Binary files /dev/null and b/examples/qtdemo/images/trolltech-logo.png differ
diff --git a/examples/qtdemo/itemcircleanimation.py b/examples/qtdemo/itemcircleanimation.py
new file mode 100644
index 0000000..7c6dfbc
--- /dev/null
+++ b/examples/qtdemo/itemcircleanimation.py
@@ -0,0 +1,392 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+import random
+
+from PyQt5.QtCore import QLineF, QPointF, QRectF, Qt, QTime
+
+from colors import Colors
+from demoitem import DemoItem
+from demoitemanimation import DemoItemAnimation
+from guidecircle import GuideCircle
+from guideline import GuideLine
+from letteritem import LetterItem
+
+
+class TickerPostEffect(object):
+    def tick(self, adjust):
+        pass
+
+    def transform(self, item, pos):
+        pass
+
+
+class PostRotateXY(TickerPostEffect):
+    def __init__(self, speedx, speedy, curvx, curvy):
+        super(PostRotateXY, self).__init__()
+
+        self.currRotX = 0.0
+        self.currRotY = 0.0
+
+        self.speedx = speedx
+        self.speedy = speedy
+        self.curvx = curvx
+        self.curvy = curvy
+
+    def tick(self, adjust):
+        self.currRotX += self.speedx * adjust
+        self.currRotY += self.speedy * adjust
+
+    def transform(self, item, pos):
+        parent = item.parentItem()
+        center = parent.boundingRect().center()
+        pos.setX(center.x() + (pos.x() - center.x()) * math.cos(self.currRotX + pos.x() * self.curvx))
+        pos.setY(center.y() + (pos.y() - center.y()) * math.cos(self.currRotY + pos.y() * self.curvy))
+
+
+class PostRotateXYTwist(PostRotateXY):
+    def transform(self, item, pos):
+        parent = item.parentItem()
+        center = parent.boundingRect().center()
+        pos.setX(center.x() + (pos.x() - center.x()) * math.cos(self.currRotX + pos.y() * self.curvx))
+        pos.setY(center.y() + (pos.y() - center.y()) * math.cos(self.currRotY + pos.x() * self.curvy))
+
+
+class TickerEffect(object):
+    Normal, Intro, Outro = range(3)
+
+    def __init__(self, letters):
+        self.postEffect = TickerPostEffect()
+        self.status = TickerEffect.Intro
+        self.letters = letters
+        self.morphSpeed = self.normalMorphSpeed = Colors.tickerMorphSpeed
+        self.moveSpeed = self.normalMoveSpeed = Colors.tickerMoveSpeed
+        self.useSheepDog = True
+        self.morphBetweenModels = not Colors.noTickerMorph
+
+    def setPostEffect(self, effect):
+        self.postEffect = effect
+
+    def slowDownAfterIntro(self, adjust):
+        if self.morphBetweenModels:
+            if self.status == TickerEffect.Intro:
+                dec = 0.1 * adjust
+                self.moveSpeed -= dec
+                if self.moveSpeed < Colors.tickerMoveSpeed:
+                    self.moveSpeed = self.normalMoveSpeed
+                    self.morphSpeed = self.normalMorphSpeed
+                    self.status = TickerEffect.Normal
+
+    def moveLetters(self, adjust):
+        adaptedMoveSpeed = self.moveSpeed * adjust
+        adaptedMorphSpeed = self.morphSpeed * adjust
+        self.postEffect.tick(adjust)
+
+        if self.morphBetweenModels:
+            move_speed = adaptedMoveSpeed
+            morph_speed = adaptedMorphSpeed
+        else:
+            move_speed = Colors.tickerMoveSpeed
+            morph_speed = -1
+
+        for letter in self.letters:
+            letter.guideAdvance(move_speed)
+            letter.guideMove(morph_speed)
+
+            pos = letter.getGuidedPos()
+            self.postEffect.transform(letter, pos)
+
+            if self.useSheepDog:
+                letter.setPosUsingSheepDog(pos, QRectF(0, 0, 800, 600))
+            else:
+                letter.setPos(pos)
+
+    def tick(self, adjust):
+        self.slowDownAfterIntro(adjust)
+        self.moveLetters(adjust)
+
+
+class EffectWhirlWind(TickerEffect):
+    def __init__(self, letters):
+        super(EffectWhirlWind, self).__init__(letters)
+
+        self.moveSpeed = 50
+
+        for letter in self.letters:
+            letter.setGuidedPos(QPointF(0, 100))
+
+
+class EffectSnake(TickerEffect):
+    def __init__(self, letters):
+        super(EffectSnake, self).__init__(letters)
+
+        self.moveSpeed = 40
+
+        for i, letter in enumerate(self.letters):
+            letter.setGuidedPos(QPointF(0, -250 - (i * 5)))
+
+
+class EffectScan(TickerEffect):
+    def __init__(self, letters):
+        super(EffectScan, self).__init__(letters)
+
+        for letter in self.letters:
+            letter.setGuidedPos(QPointF(100, -300))
+
+
+class EffectRaindrops(TickerEffect):
+    def __init__(self, letters):
+        super(EffectRaindrops, self).__init__(letters)
+
+        for letter in self.letters:
+            letter.setGuidedPos(QPointF(random.randint(-100, 100),
+                    random.randint(-200, 1100)))
+
+
+class EffectLine(TickerEffect):
+    def __init__(self, letters):
+        super(EffectLine, self).__init__(letters)
+
+        for i, letter in enumerate(self.letters):
+            letter.setGuidedPos(QPointF(100, 500 + i * 20))
+
+
+class ItemCircleAnimation(DemoItem):
+    def __init__(self, parent=None):
+        super(ItemCircleAnimation, self).__init__(parent)
+
+        self.letterList = []
+        self.letterCount = Colors.tickerLetterCount
+        self.scale = 1.0
+        self.showCount = -1
+        self.tickOnPaint = False
+        self.paused = False
+        self.doIntroTransitions = True
+        self.setAcceptHoverEvents(True)
+        self.setCursor(Qt.OpenHandCursor)
+        self.setupGuides()
+        self.setupLetters()
+        self.useGuideQt()
+        self.effect = None
+
+        self.mouseMoveLastPosition = QPointF()
+        self.tickTimer = QTime()
+
+    def createLetter(self, c):
+        letter = LetterItem(c, self)
+        self.letterList.append(letter)
+
+    def setupLetters(self):
+        self.letterList = []
+
+        s = Colors.tickerText
+        tlen = len(s)
+        room = self.letterCount
+        while room >= tlen:
+            for c in s:
+                self.createLetter(c)
+
+            room -= tlen
+
+        # Fill in with blanks.
+        while room > 0:
+            self.createLetter(' ')
+            room -= 1
+
+    def setupGuides(self):
+        x = 0
+        y = 20
+
+        self.qtGuide1 = GuideCircle(QRectF(x, y, 260, 260), -36, 342)
+        GuideLine(QPointF(x + 240, y + 268), self.qtGuide1)
+        GuideLine(QPointF(x + 265, y + 246), self.qtGuide1)
+        GuideLine(QPointF(x + 158, y + 134), self.qtGuide1)
+        GuideLine(QPointF(x + 184, y + 109), self.qtGuide1)
+        GuideLine(QPointF(x + 160, y +  82), self.qtGuide1)
+        GuideLine(QPointF(x +  77, y + 163), self.qtGuide1)
+        GuideLine(QPointF(x + 100, y + 190), self.qtGuide1)
+        GuideLine(QPointF(x + 132, y + 159), self.qtGuide1)
+        GuideLine(QPointF(x + 188, y + 211), self.qtGuide1)
+        GuideCircle(QRectF(x + 30, y + 30, 200, 200), -30, 336, GuideCircle.CW, self.qtGuide1)
+        GuideLine(QPointF(x + 238, y + 201), self.qtGuide1)
+
+        y = 30
+        self.qtGuide2 = GuideCircle(QRectF(x + 30, y + 30, 200, 200), 135, 270, GuideCircle.CCW)
+        GuideLine(QPointF(x + 222, y + 38), self.qtGuide2)
+        GuideCircle(QRectF(x, y, 260, 260), 135, 270, GuideCircle.CW, self.qtGuide2)
+        GuideLine(QPointF(x + 59, y + 59), self.qtGuide2)
+
+        x = 115
+        y = 10
+        self.qtGuide3 = GuideLine(QLineF(x, y, x + 30, y))
+        GuideLine(QPointF(x + 30, y + 170), self.qtGuide3)
+        GuideLine(QPointF(x, y + 170), self.qtGuide3)
+        GuideLine(QPointF(x, y), self.qtGuide3)
+
+        self.qtGuide1.setFence(QRectF(0, 0, 800, 600))
+        self.qtGuide2.setFence(QRectF(0, 0, 800, 600))
+        self.qtGuide3.setFence(QRectF(0, 0, 800, 600))
+
+    def useGuide(self, guide, firstLetter, lastLetter):
+        padding = guide.lengthAll() / float(lastLetter - firstLetter)
+
+        for i, letter in enumerate(self.letterList[firstLetter:lastLetter]):
+            letter.useGuide(guide, i * padding)
+
+    def useGuideQt(self):
+        if self.currGuide is not self.qtGuide1:
+            self.useGuide(self.qtGuide1, 0, self.letterCount)
+            self.currGuide = self.qtGuide1
+
+    def useGuideTt(self):
+        if self.currGuide is not self.qtGuide2:
+            split = int(self.letterCount * 5.0 / 7.0)
+            self.useGuide(self.qtGuide2, 0, split)
+            self.useGuide(self.qtGuide3, split, self.letterCount)
+            self.currGuide = self.qtGuide2
+
+    def boundingRect(self):
+        return QRectF(0, 0, 300, 320)
+
+    def prepare(self):
+        pass
+
+    def switchToNextEffect(self):
+        self.showCount += 1
+
+        if self.showCount == 1:
+            self.effect = EffectSnake(self.letterList)
+        elif self.showCount == 2:
+            self.effect = EffectLine(self.letterList)
+            self.effect.setPostEffect(PostRotateXYTwist(0.01, 0.0, 0.003, 0.0))
+        elif self.showCount == 3:
+            self.effect = EffectRaindrops(self.letterList)
+            self.effect.setPostEffect(PostRotateXYTwist(0.01, 0.005, 0.003, 0.003))
+        elif self.showCount == 4:
+            self.effect = EffectScan(self.letterList)
+            self.effect.normalMoveSpeed = 0
+            self.effect.setPostEffect(PostRotateXY(0.008, 0.0, 0.005, 0.0))
+        else:
+            self.showCount = 0
+            self.effect = EffectWhirlWind(self.letterList)
+
+    def animationStarted(self, id):
+        if id == DemoItemAnimation.ANIM_IN:
+            if self.doIntroTransitions:
+                # Make all letters disappear.
+                for letter in self.letterList:
+                    letter.setPos(1000, 0)
+
+                self.switchToNextEffect()
+                self.useGuideQt()
+                self.scale = 1.0
+
+                # The first time we run, we have a rather large delay to
+                # perform benchmark before the ticker shows.  But now, since we
+                # are showing, use a more appropriate value.
+                self.currentAnimation.setStartDelay(1500)
+        elif self.effect is not None:
+            self.effect.useSheepDog = False
+
+        self.tickTimer = QTime.currentTime()
+
+    def swapModel(self):
+        if self.currGuide is self.qtGuide2:
+            self.useGuideQt()
+        else:
+            self.useGuideTt()
+
+    def hoverEnterEvent(self, event):
+        # Skip swap here to enhance ticker dragging.
+        pass
+
+    def hoverLeaveEvent(self, event):
+        self.swapModel()
+
+    def setTickerScale(self, s):
+        self.scale = s
+        self.qtGuide1.setScale(self.scale, self.scale)
+        self.qtGuide2.setScale(self.scale, self.scale)
+        self.qtGuide3.setScale(self.scale, self.scale)
+
+    def mousePressEvent(self, event):
+        self.mouseMoveLastPosition = event.scenePos();
+
+        if event.button() == Qt.LeftButton:
+            self.setCursor(Qt.ClosedHandCursor)
+        else:
+            self.switchToNextEffect()
+
+    def mouseReleaseEvent(self, event):
+        if event.button() == Qt.LeftButton:
+            self.setCursor(Qt.OpenHandCursor)
+
+    def mouseMoveEvent(self, event):
+        newPosition = event.scenePos()
+        self.setPosUsingSheepDog(self.pos() + newPosition - self.mouseMoveLastPosition, QRectF(-260, -280, 1350, 1160))
+        self.mouseMoveLastPosition = newPosition
+
+    def wheelEvent(self, event):
+        if event.angleDelta().y() > 0:
+            self.effect.moveSpeed -= 0.20
+        else:
+            self.effect.moveSpeed += 0.20
+
+        if self.effect.moveSpeed < 0:
+            self.effect.moveSpeed = 0.0
+
+    def pause(self, on):
+        self.paused = on
+        self.tickTimer = QTime.currentTime()
+
+    def tick(self):
+        if self.paused or not self.effect:
+            return
+
+        t = self.tickTimer.msecsTo(QTime.currentTime())
+        self.tickTimer = QTime.currentTime()
+        self.effect.tick(t / 10.0)
+
+    def paint(self, painter, opt, widget):
+        if self.tickOnPaint:
+            self.tick()
diff --git a/examples/qtdemo/letteritem.py b/examples/qtdemo/letteritem.py
new file mode 100644
index 0000000..70fe1f3
--- /dev/null
+++ b/examples/qtdemo/letteritem.py
@@ -0,0 +1,85 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QRect, Qt
+from PyQt5.QtGui import QColor, QImage, QLinearGradient, QPainter
+
+from colors import Colors
+from demoitem import DemoItem
+
+
+class LetterItem(DemoItem):
+    def __init__(self, letter, parent=None):
+        super(LetterItem, self).__init__(parent)
+
+        self.letter = letter
+
+        self.useSharedImage(__file__ + letter)
+
+    def createImage(self, transform):
+        scaledRect = transform.mapRect(QRect(0, 0, 25, 25))
+        image = QImage(scaledRect.width(), scaledRect.height(),
+                QImage.Format_ARGB32_Premultiplied)
+        image.fill(0)
+        painter = QPainter(image)
+        painter.scale(transform.m11(), transform.m22())
+        painter.setRenderHints(QPainter.TextAntialiasing | QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
+        painter.setPen(Qt.NoPen)
+
+        if Colors.useEightBitPalette:
+            painter.setBrush(QColor(102, 175, 54))
+            painter.drawEllipse(0, 0, 25, 25)
+            painter.setFont(Colors.tickerFont())
+            painter.setPen(QColor(255, 255, 255))
+            painter.drawText(10, 15, self.letter)
+        else:
+            brush = QLinearGradient(0, 0, 0, 25)
+            brush.setSpread(QLinearGradient.PadSpread)
+            brush.setColorAt(0.0, QColor(102, 175, 54, 200))
+            brush.setColorAt(1.0, QColor(102, 175, 54, 60))
+            painter.setBrush(brush)
+            painter.drawEllipse(0, 0, 25, 25)
+            painter.setFont(Colors.tickerFont())
+            painter.setPen(QColor(255, 255, 255, 255))
+            painter.drawText(10, 15, self.letter)
+
+        return image
diff --git a/examples/qtdemo/mainwindow.py b/examples/qtdemo/mainwindow.py
new file mode 100644
index 0000000..7e24772
--- /dev/null
+++ b/examples/qtdemo/mainwindow.py
@@ -0,0 +1,389 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QPoint, QRect, qRound, Qt, QTime, QTimer
+from PyQt5.QtGui import (QFontMetricsF, QImage, QPainter, QPixmap, QPolygon,
+        QRegion)
+from PyQt5.QtWidgets import (QApplication, QFrame, QGraphicsScene,
+        QGraphicsView, QGraphicsWidget, QMessageBox, QWidget)
+
+from colors import Colors
+from demoitem import DemoItem
+from demotextitem import DemoTextItem
+from imageitem import ImageItem
+from menumanager import MenuManager
+
+
+class MainWindow(QGraphicsView):
+    def __init__(self, parent=None):
+        super(MainWindow, self).__init__(parent)
+
+        self.updateTimer = QTimer(self)
+        self.demoStartTime = QTime()
+        self.fpsTime = QTime()
+        self.background = QPixmap()
+
+        self.scene = None
+        self.mainSceneRoot = None
+        self.frameTimeList = []
+        self.fpsHistory = []
+
+        self.currentFps = Colors.fps
+        self.fpsMedian = -1
+        self.fpsLabel = None
+        self.pausedLabel = None
+        self.doneAdapt = False
+        self.useTimer = False
+        self.updateTimer.setSingleShot(True)
+        self.companyLogo = None
+        self.qtLogo = None
+
+        self.setupWidget()
+        self.setupScene()
+        self.setupSceneItems()
+        self.drawBackgroundToPixmap()
+
+    def setupWidget(self):
+        desktop = QApplication.desktop()
+        screenRect = desktop.screenGeometry(desktop.primaryScreen())
+        windowRect = QRect(0, 0, 800, 600)
+
+        if screenRect.width() < 800:
+            windowRect.setWidth(screenRect.width())
+
+        if screenRect.height() < 600:
+            windowRect.setHeight(screenRect.height())
+
+        windowRect.moveCenter(screenRect.center())
+        self.setGeometry(windowRect)
+        self.setMinimumSize(80, 60)
+
+        self.setWindowTitle("PyQt Examples")
+        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
+        self.setFrameStyle(QFrame.NoFrame)
+        self.setRenderingSystem()
+        self.updateTimer.timeout.connect(self.tick)
+
+    def setRenderingSystem(self):
+        self.setCacheMode(QGraphicsView.CacheBackground)
+        self.setViewport(QWidget())
+
+    def start(self):
+        self.switchTimerOnOff(True)
+        self.demoStartTime.restart()
+        MenuManager.instance().itemSelected(MenuManager.ROOT,
+                Colors.rootMenuName)
+        Colors.debug("- starting demo")
+
+    def enableMask(self, enable):
+        if not enable or Colors.noWindowMask:
+            self.clearMask()
+        else:
+            region = QPolygon([
+                    # North side.
+                    0, 0,
+                    800, 0,
+                    # East side.
+                    # 800, 70,
+                    # 790, 90,
+                    # 790, 480,
+                    # 800, 500,
+                    800, 600,
+                    # South side.
+                    700, 600,
+                    670, 590,
+                    130, 590,
+                    100, 600,
+                    0, 600,
+                    # West side.
+                    # 0, 550,
+                    # 10, 530,
+                    # 10, 520,
+                    # 0, 520,
+                    0, 0])
+
+            self.setMask(QRegion(region))
+
+    def setupScene(self):
+        self.scene = QGraphicsScene(self)
+        self.scene.setSceneRect(0, 0, 800, 600)
+        self.setScene(self.scene)
+        self.scene.setItemIndexMethod(QGraphicsScene.NoIndex)
+
+    def switchTimerOnOff(self, on):
+        ticker = MenuManager.instance().ticker
+        if ticker and ticker.scene():
+            ticker.tickOnPaint = not on or Colors.noTimerUpdate
+
+        if on and not Colors.noTimerUpdate:
+            self.useTimer = True
+            self.fpsTime = QTime.currentTime()
+            self.updateTimer.start(int(1000 / Colors.fps))
+            update_mode = QGraphicsView.NoViewportUpdate
+        else:
+            self.useTimer = False
+            self.updateTimer.stop()
+
+            if Colors.noTicker:
+                update_mode = QGraphicsView.MinimalViewportUpdate
+            else:
+                update_mode = QGraphicsView.SmartViewportUpdate
+
+        self.setViewportUpdateMode(update_mode)
+
+    def measureFps(self):
+        # Calculate time difference.
+        t = self.fpsTime.msecsTo(QTime.currentTime())
+        if t == 0:
+            t = 0.01
+
+        self.currentFps = (1000.0 / t)
+        self.fpsHistory.append(self.currentFps)
+        self.fpsTime = QTime.currentTime()
+
+        # Calculate median.
+        size = len(self.fpsHistory)
+
+        if size == 10:
+            self.fpsHistory.sort()
+            self.fpsMedian = self.fpsHistory[int(size / 2)]
+            if self.fpsMedian == 0:
+                self.fpsMedian = 0.01
+
+            self.fpsHistory = []
+
+            return True
+
+        return False
+
+    def forceFpsMedianCalculation(self):
+        # Used for adaption in case things are so slow that no median has yet
+        # been calculated.
+        if self.fpsMedian != -1:
+            return
+
+        size = len(self.fpsHistory)
+
+        if size == 0:
+            self.fpsMedian = 0.01
+            return
+
+        self.fpsHistory.sort()
+        self.fpsMedian = self.fpsHistory[size // 2]
+        if self.fpsMedian == 0:
+            self.fpsMedian = 0.01
+
+    def tick(self):
+        medianChanged = self.measureFps()
+        self.checkAdapt()
+
+        if medianChanged and self.fpsLabel and Colors.showFps:
+            self.fpsLabel.setText("FPS: %d" % int(self.currentFps))
+
+        if MenuManager.instance().ticker:
+            MenuManager.instance().ticker.tick()
+
+        self.viewport().update()
+
+        if self.useTimer:
+            self.updateTimer.start(int(1000 / Colors.fps))
+
+    def setupSceneItems(self):
+        if Colors.showFps:
+            self.fpsLabel = DemoTextItem("FPS: --", Colors.buttonFont(),
+                    Qt.white, -1, None, DemoTextItem.DYNAMIC_TEXT)
+            self.fpsLabel.setZValue(1000)
+            self.fpsLabel.setPos(Colors.stageStartX,
+                    600 - QFontMetricsF(Colors.buttonFont()).height() - 5)
+
+        self.mainSceneRoot = QGraphicsWidget()
+        self.scene.addItem(self.mainSceneRoot)
+
+        self.companyLogo = ImageItem(QImage(':/images/trolltech-logo.png'),
+                1000, 1000, None, True, 0.5)
+        self.qtLogo = ImageItem(QImage(':/images/qtlogo_small.png'), 1000,
+                1000, None, True, 0.5)
+        self.companyLogo.setZValue(100)
+        self.qtLogo.setZValue(100)
+        self.pausedLabel = DemoTextItem("PAUSED", Colors.buttonFont(),
+                Qt.white, -1, None)
+        self.pausedLabel.setZValue(100)
+        fm = QFontMetricsF(Colors.buttonFont())
+        self.pausedLabel.setPos(Colors.stageWidth - fm.width("PAUSED"),
+                590 - fm.height())
+        self.pausedLabel.setRecursiveVisible(False)
+
+    def checkAdapt(self):
+        if self.doneAdapt or Colors.noTimerUpdate or self.demoStartTime.elapsed() < 2000:
+            return
+
+        self.doneAdapt = True
+        self.forceFpsMedianCalculation()
+        Colors.benchmarkFps = self.fpsMedian
+        Colors.debug("- benchmark: %d FPS" % int(Colors.benchmarkFps))
+
+        if Colors.noAdapt:
+            return
+
+        if self.fpsMedian < 30:
+            ticker = MenuManager.instance().ticker
+            if ticker and ticker.scene():
+                self.scene.removeItem(ticker)
+                Colors.noTimerUpdate = True
+                self.switchTimerOnOff(False)
+
+                if self.fpsLabel:
+                    self.fpsLabel.setText("FPS: (%d)" % int(self.fpsMedian))
+
+                Colors.debug("- benchmark adaption: removed ticker (fps < 30)")
+
+            if self.fpsMedian < 20:
+                Colors.noAnimations = True
+                Colors.debug("- benchmark adaption: animations switched off (fps < 20)")
+
+            Colors.adapted = True
+
+    def drawBackgroundToPixmap(self):
+        r = self.scene.sceneRect()
+        self.background = QPixmap(qRound(r.width()), qRound(r.height()))
+        self.background.fill(Qt.black)
+        painter = QPainter(self.background)
+
+        bg = QImage(':/images/demobg.png')
+        painter.drawImage(0, 0, bg)
+
+    def drawBackground(self, painter, rect):
+        painter.drawPixmap(QPoint(0, 0), self.background)
+
+    def toggleFullscreen(self):
+        if self.isFullScreen():
+            self.enableMask(True)
+            self.showNormal()
+            if MenuManager.instance().ticker:
+                MenuManager.instance().ticker.pause(False)
+        else:
+            self.enableMask(False)
+            self.showFullScreen()
+
+    def keyPressEvent(self, event):
+        if event.key() == Qt.Key_Escape:
+            QApplication.quit()
+        elif event.key() == Qt.Key_F1:
+            s = ""
+            s += "\nAdapt: "
+            s += ["on", "off"][Colors.noAdapt]
+            s += "\nAdaption occured: "
+            s += ["no", "yes"][Colors.adapted]
+            w = QWidget()
+            s += "\nColor bit depth: %d" % w.depth()
+            s += "\nWanted FPS: %d" % Colors.fps
+            s += "\nBenchmarked FPS: ";
+            if Colors.benchmarkFps != -1:
+                s += "%d" % Colors.benchmarkFps
+            else:
+                s += "not calculated"
+            s += "\nAnimations: ";
+            s += ["on", "off"][Colors.noAnimations]
+            s += "\nBlending: ";
+            s += ["on", "off"][Colors.useEightBitPalette]
+            s += "\nTicker: ";
+            s += ["on", "off"][Colors.noTicker]
+            s += "\nPixmaps: ";
+            s += ["off", "on"][Colors.usePixmaps]
+            s += "\nRescale images on resize: ";
+            s += ["on", "off"][Colors.noRescale]
+            s += "\nTimer based updates: ";
+            s += ["on", "off"][Colors.noTimerUpdate]
+            s += "\nSeparate loop: ";
+            s += ["no", "yes"][Colors.useLoop]
+            s += "\nScreen sync: ";
+            s += ["yes", "no"][Colors.noScreenSync]
+            QMessageBox.information(None, "Current configuration", s)
+
+        super(MainWindow, self).keyPressEvent(event)
+
+    def focusInEvent(self, event):
+        if not Colors.pause:
+            return
+
+        if MenuManager.instance().ticker:
+            MenuManager.instance().ticker.pause(False)
+
+        code = MenuManager.instance().currentMenuCode
+        if code in (MenuManager.ROOT, MenuManager.MENU1):
+            self.switchTimerOnOff(True)
+
+        self.pausedLabel.setRecursiveVisible(False)
+
+    def focusOutEvent(self, event):
+        if not Colors.pause:
+            return
+
+        if MenuManager.instance().ticker:
+            MenuManager.instance().ticker.pause(True)
+
+        code = MenuManager.instance().currentMenuCode
+        if code in (MenuManager.ROOT, MenuManager.MENU1):
+            self.switchTimerOnOff(False)
+
+        self.pausedLabel.setRecursiveVisible(True)
+
+    def resizeEvent(self, event):
+        self.resetTransform()
+        self.scale(event.size().width() / 800.0, event.size().height() / 600.0)
+
+        super(MainWindow, self).resizeEvent(event)
+
+        DemoItem.setTransform(self.transform())
+
+        if self.companyLogo:
+            r = self.scene.sceneRect()
+            ttb = self.companyLogo.boundingRect()
+            self.companyLogo.setPos(int((r.width() - ttb.width()) / 2),
+                    595 - ttb.height())
+            qtb = self.qtLogo.boundingRect()
+            self.qtLogo.setPos(802 - qtb.width(), 0)
+
+        # Changing size will almost always hurt FPS during the change so ignore
+        # it.
+        self.fpsHistory = []
diff --git a/examples/qtdemo/menucontent.py b/examples/qtdemo/menucontent.py
new file mode 100644
index 0000000..37f423d
--- /dev/null
+++ b/examples/qtdemo/menucontent.py
@@ -0,0 +1,133 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFile, QFileInfo, QRectF, QTextStream
+
+from colors import Colors
+from demoitem import DemoItem
+from demoitemanimation import DemoItemAnimation
+from demotextitem import DemoTextItem
+from headingitem import HeadingItem
+
+
+class MenuContentItem(DemoItem):
+    def __init__(self, el, parent=None):
+        super(MenuContentItem, self).__init__(parent)
+
+        self.name = el.getAttribute('name')
+        self.heading = None
+        self.description1 = None
+        self.description2 = None
+
+        readme_dir = QFileInfo(__file__).dir()
+        readme_dir.cdUp()
+        readme_dir.cd(el.getAttribute('dirname'))
+
+        self.readmePath = readme_dir.absoluteFilePath('README')
+
+        self._prepared = False
+
+    def prepare(self):
+        if not self._prepared:
+            self.createContent()
+            self._prepared= True
+
+    def animationStopped(self, id):
+        if self.name == Colors.rootMenuName:
+            # Optimization hack.
+            return
+
+        if id == DemoItemAnimation.ANIM_OUT:
+            # Free up some memory
+            self.heading = None
+            self.description1 = None
+            self.description2 = None
+            self._prepared = False
+
+    def loadDescription(self, startPara, nrPara):
+        readme = QFile(self.readmePath)
+        if not readme.open(QFile.ReadOnly):
+            Colors.debug("- MenuContentItem.loadDescription: Could not load:", self.readmePath)
+            return ""
+
+        in_str = QTextStream(readme)
+        # Skip a certain number of paragraphs.
+        while startPara:
+            if not in_str.readLine():
+                startPara -= 1
+
+        # Read in the number of wanted paragraphs.
+        result = ''
+        line = in_str.readLine()
+        while True:
+            result += line + " "
+            line = in_str.readLine()
+            if not line:
+                nrPara -= 1
+                line = "<br><br>" + in_str.readLine()
+
+            if nrPara == 0 or in_str.atEnd():
+                break
+
+        return Colors.contentColor + result
+
+    def createContent(self):
+        # Create the items.
+        self.heading = HeadingItem(self.name, self)
+        para1 = self.loadDescription(0, 1)
+        if not para1:
+            para1 = Colors.contentColor + "Could not load description. Ensure that the documentation for Qt is built."
+        bgcolor = Colors.sceneBg1.darker(200)
+        bgcolor.setAlpha(100)
+        self.description1 = DemoTextItem(para1, Colors.contentFont(),
+                Colors.heading, 500, self, DemoTextItem.STATIC_TEXT)
+        self.description2 = DemoTextItem(self.loadDescription(1, 2),
+                Colors.contentFont(), Colors.heading, 250, self,
+                DemoTextItem.STATIC_TEXT)
+
+        # Place the items on screen.
+        self.heading.setPos(0, 3)
+        self.description1.setPos(0, self.heading.pos().y() + self.heading.boundingRect().height() + 10)
+        self.description2.setPos(0, self.description1.pos().y() + self.description1.boundingRect().height() + 15)
+
+    def boundingRect(self):
+        return QRectF(0, 0, 500, 350)
diff --git a/examples/qtdemo/menumanager.py b/examples/qtdemo/menumanager.py
new file mode 100644
index 0000000..0d136fa
--- /dev/null
+++ b/examples/qtdemo/menumanager.py
@@ -0,0 +1,828 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+from xml.dom.minidom import parseString
+
+from PyQt5.QtCore import (QByteArray, QDir, QEasingCurve, QFile, QFileInfo,
+        QLibraryInfo, QObject, QPointF, QProcess, QProcessEnvironment,
+        QStandardPaths, Qt, QT_VERSION, QT_VERSION_STR, QTextStream, QUrl)
+from PyQt5.QtWidgets import QApplication, QMessageBox
+
+from colors import Colors
+from demoitemanimation import DemoItemAnimation
+from examplecontent import ExampleContent
+from itemcircleanimation import ItemCircleAnimation
+from menucontent import MenuContentItem
+from score import Score
+from textbutton import TextButton
+
+
+class MenuManager(QObject):
+    ROOT, MENU1, MENU2, LAUNCH, DOCUMENTATION, QUIT, FULLSCREEN, UP, DOWN, \
+            BACK, LAUNCH_QML = range(11)
+
+    pInstance = None
+
+    def __init__(self):
+        super(MenuManager, self).__init__()
+
+        self.contentsDoc = None
+        self.assistantProcess = QProcess()
+        self.helpRootUrl = ''
+        self.docDir = QDir()
+        self.imgDir = QDir()
+
+        self.info = {}
+        self.window = None
+
+        self.ticker = None
+        self.tickerInAnim = None
+        self.upButton = None
+        self.downButton = None
+        self.score = Score()
+        self.currentMenu = "[no menu visible]"
+        self.currentCategory = "[no category visible]"
+        self.currentMenuButtons = "[no menu buttons visible]"
+        self.currentInfo = "[no info visible]"
+        self.currentMenuCode = -1
+        self.readXmlDocument()
+
+    @classmethod
+    def instance(cls):
+        if cls.pInstance is None:
+            cls.pInstance = cls()
+
+        return cls.pInstance
+
+    def getResource(self, name):
+        return QByteArray()
+
+    def readXmlDocument(self):
+        xml_file = QFile(':/xml/examples.xml')
+        xml_file.open(QFile.ReadOnly | QFile.Text)
+        contents = xml_file.readAll().data()
+        xml_file.close()
+
+        self.contentsDoc = parseString(contents)
+
+    def itemSelected(self, userCode, menuName):
+        if userCode == MenuManager.LAUNCH:
+            self.launchExample(self.currentInfo)
+        elif userCode == MenuManager.LAUNCH_QML:
+            self.launchQml(self.currentInfo)
+        elif userCode == MenuManager.DOCUMENTATION:
+            self.showDocInAssistant(self.currentInfo)
+        elif userCode == MenuManager.QUIT:
+            QApplication.quit()
+        elif userCode == MenuManager.FULLSCREEN:
+            self.window.toggleFullscreen()
+        elif userCode == MenuManager.ROOT:
+            # Out.
+            self.score.queueMovie(self.currentMenu + ' -out', Score.FROM_START,
+                    Score.LOCK_ITEMS)
+            self.score.queueMovie(self.currentMenuButtons + ' -out',
+                    Score.FROM_START, Score.LOCK_ITEMS)
+            self.score.queueMovie(self.currentInfo + ' -out')
+            self.score.queueMovie(self.currentInfo + ' -buttons -out',
+                    Score.NEW_ANIMATION_ONLY)
+            self.score.queueMovie('back -out', Score.ONLY_IF_VISIBLE)
+
+            # Book-keeping.
+            self.currentMenuCode = MenuManager.ROOT
+            self.currentMenu = menuName + ' -menu1'
+            self.currentMenuButtons = menuName + ' -buttons'
+            self.currentInfo = menuName + ' -info'
+
+            # In.
+            self.score.queueMovie('upndown -shake')
+            self.score.queueMovie(self.currentMenu, Score.FROM_START,
+                    Score.UNLOCK_ITEMS)
+            self.score.queueMovie(self.currentMenuButtons, Score.FROM_START,
+                    Score.UNLOCK_ITEMS)
+            self.score.queueMovie(self.currentInfo)
+
+            if not Colors.noTicker:
+                self.ticker.doIntroTransitions = True
+                self.tickerInAnim.setStartDelay(2000)
+                self.ticker.useGuideQt()
+                self.score.queueMovie('ticker', Score.NEW_ANIMATION_ONLY)
+        elif userCode == MenuManager.MENU1:
+            # Out.
+            self.score.queueMovie(self.currentMenu + ' -out', Score.FROM_START,
+                    Score.LOCK_ITEMS)
+            self.score.queueMovie(self.currentMenuButtons + ' -out',
+                    Score.FROM_START, Score.LOCK_ITEMS)
+            self.score.queueMovie(self.currentInfo + ' -out')
+
+            # Book-keeping.
+            self.currentMenuCode = MenuManager.MENU1
+            self.currentCategory = menuName
+            self.currentMenu = menuName + ' -menu1'
+            self.currentInfo = menuName + ' -info'
+
+            # In.
+            self.score.queueMovie('upndown -shake')
+            self.score.queueMovie('back -in')
+            self.score.queueMovie(self.currentMenu, Score.FROM_START,
+                    Score.UNLOCK_ITEMS)
+            self.score.queueMovie(self.currentInfo)
+
+            if not Colors.noTicker:
+                self.ticker.useGuideTt()
+        elif userCode == MenuManager.MENU2:
+            # Out.
+            self.score.queueMovie(self.currentInfo + ' -out',
+                    Score.NEW_ANIMATION_ONLY)
+            self.score.queueMovie(self.currentInfo + ' -buttons -out',
+                    Score.NEW_ANIMATION_ONLY)
+
+            # Book-keeping.
+            self.currentMenuCode = MenuManager.MENU2
+            self.currentInfo = menuName
+
+            # In/shake.
+            self.score.queueMovie('upndown -shake')
+            self.score.queueMovie('back -shake')
+            self.score.queueMovie(self.currentMenu + ' -shake')
+            self.score.queueMovie(self.currentInfo, Score.NEW_ANIMATION_ONLY)
+            self.score.queueMovie(self.currentInfo + ' -buttons',
+                    Score.NEW_ANIMATION_ONLY)
+
+            if not Colors.noTicker:
+                self.score.queueMovie('ticker -out', Score.NEW_ANIMATION_ONLY)
+        elif userCode == MenuManager.UP:
+            backMenu = self.info[self.currentMenu]['back']
+            if backMenu:
+                self.score.queueMovie(self.currentMenu + ' -top_out',
+                        Score.FROM_START, Score.LOCK_ITEMS)
+                self.score.queueMovie(backMenu + ' -bottom_in',
+                        Score.FROM_START, Score.UNLOCK_ITEMS)
+                self.currentMenu = backMenu
+        elif userCode == MenuManager.DOWN:
+            moreMenu = self.info[self.currentMenu]['more']
+            if moreMenu:
+                self.score.queueMovie(self.currentMenu + ' -bottom_out',
+                        Score.FROM_START, Score.LOCK_ITEMS)
+                self.score.queueMovie(moreMenu + ' -top_in', Score.FROM_START,
+                        Score.UNLOCK_ITEMS)
+                self.currentMenu = moreMenu
+        elif userCode == MenuManager.BACK:
+            if self.currentMenuCode == MenuManager.MENU2:
+                # Out.
+                self.score.queueMovie(self.currentInfo + ' -out',
+                        Score.NEW_ANIMATION_ONLY)
+                self.score.queueMovie(self.currentInfo + ' -buttons -out',
+                        Score.NEW_ANIMATION_ONLY)
+
+                # Book-keeping.
+                self.currentMenuCode = MenuManager.MENU1
+                self.currentMenuButtons = self.currentCategory + ' -buttons'
+                self.currentInfo = self.currentCategory + ' -info'
+
+                # In/shake.
+                self.score.queueMovie('upndown -shake')
+                self.score.queueMovie(self.currentMenu + ' -shake')
+                self.score.queueMovie(self.currentInfo,
+                        Score.NEW_ANIMATION_ONLY)
+                self.score.queueMovie(self.currentInfo + ' -buttons',
+                        Score.NEW_ANIMATION_ONLY)
+
+                if not Colors.noTicker:
+                    self.ticker.doIntroTransitions = False
+                    self.tickerInAnim.setStartDelay(500)
+                    self.score.queueMovie('ticker', Score.NEW_ANIMATION_ONLY)
+            elif self.currentMenuCode != MenuManager.ROOT:
+                self.itemSelected(MenuManager.ROOT, Colors.rootMenuName)
+
+        # Update back and more buttons.
+        if self.info.setdefault(self.currentMenu, {}).get('back'):
+            back_state = TextButton.OFF
+        else:
+            back_state = TextButton.DISABLED
+
+        if self.info[self.currentMenu].get('more'):
+            more_state = TextButton.OFF
+        else:
+            more_state = TextButton.DISABLED
+
+        self.upButton.setState(back_state)
+        self.downButton.setState(more_state)
+
+        if self.score.hasQueuedMovies():
+            self.score.playQue()
+            # Playing new movies might include loading etc., so ignore the FPS
+            # at this point.
+            self.window.fpsHistory = []
+
+    def showDocInAssistant(self, name):
+        url = self.resolveDocUrl(name)
+        Colors.debug("Sending URL to Assistant:", url)
+
+        # Start assistant if it's not already running.
+        if self.assistantProcess.state() != QProcess.Running:
+            app = QLibraryInfo.location(QLibraryInfo.BinariesPath) + QDir.separator()
+
+            if sys.platform == 'darwin':
+                app += 'Assistant.app/Contents/MacOS/Assistant'
+            else:
+                app += 'assistant'
+
+            args = ['-enableRemoteControl']
+            self.assistantProcess.start(app, args)
+            if not self.assistantProcess.waitForStarted():
+                QMessageBox.critical(None, "PyQt Demo",
+                        "Could not start %s." % app)
+                return
+
+        # Send command through remote control even if the process was just
+        # started to activate assistant and bring it to the front.
+        cmd_str = QTextStream(self.assistantProcess)
+        cmd_str << 'SetSource ' << url << '\n'
+
+    def launchExample(self, name):
+        executable = self.resolveExeFile(name)
+
+        process = QProcess(self)
+        process.error.connect(self.launchError)
+
+        if sys.platform == 'win32':
+            # Make sure it finds the DLLs on Windows.
+            env = QProcessEnvironment.systemEnvironment()
+            env.insert('PATH',
+                    QLibraryInfo.location(QLibraryInfo.BinariesPath) + ';' +
+                            env.value('PATH'))
+            process.setProcessEnvironment(env)
+
+        if self.info[name]['changedirectory'] != 'false':
+            workingDirectory = self.resolveDataDir(name)
+            process.setWorkingDirectory(workingDirectory)
+            Colors.debug("Setting working directory:", workingDirectory)
+
+        Colors.debug("Launching:", executable)
+        process.start(sys.executable, [executable])
+
+    def launchQml(self, name):
+        import_path = self.resolveDataDir(name)
+        qml = self.resolveQmlFile(name)
+
+        process = QProcess(self)
+        process.error.connect(self.launchError)
+
+        env = QProcessEnvironment.systemEnvironment()
+        env.insert('QML2_IMPORT_PATH', import_path)
+        process.setProcessEnvironment(env)
+
+        executable = QLibraryInfo.location(QLibraryInfo.BinariesPath) + '/qmlscene'
+        Colors.debug("Launching:", executable)
+        process.start(executable, [qml])
+
+    def launchError(self, error):
+        if error != QProcess.Crashed:
+            QMessageBox.critical(None, "Failed to launch the example",
+                    "Could not launch the example. Ensure that it has been "
+                    "built.",
+                    QMessageBox.Cancel)
+
+    def init(self, window):
+        self.window = window
+
+        # Create div.
+        self.createTicker()
+        self.createUpnDownButtons()
+        self.createBackButton()
+
+        # Create first level menu.
+        rootElement = self.contentsDoc.documentElement
+        self.createRootMenu(rootElement)
+
+        # Create second level menus.
+        level2Menu = self._first_element(rootElement)
+        while level2Menu is not None:
+            self.createSubMenu(level2Menu)
+
+            # Create leaf menu and example info.
+            example = self._first_element(level2Menu)
+            while example is not None:
+                self.readInfoAboutExample(example)
+                self.createLeafMenu(example)
+                example = self._next_element(example)
+
+            level2Menu = self._next_element(level2Menu)
+
+    @classmethod
+    def _first_element(cls, node):
+        return cls._skip_nonelements(node.firstChild)
+
+    @classmethod
+    def _next_element(cls, node):
+        return cls._skip_nonelements(node.nextSibling)
+
+    @staticmethod
+    def _skip_nonelements(node):
+        while node is not None and node.nodeType != node.ELEMENT_NODE:
+            node = node.nextSibling
+
+        return node
+
+    def readInfoAboutExample(self, example):
+        name = example.getAttribute('name')
+        if name in self.info:
+            Colors.debug("__WARNING: MenuManager.readInfoAboutExample: "
+                         "Demo/example with name", name, "appears twice in "
+                         "the xml-file!__")
+
+        self.info.setdefault(name, {})['filename'] = example.getAttribute('filename')
+        self.info[name]['dirname'] = example.parentNode.getAttribute('dirname')
+        self.info[name]['changedirectory'] = example.getAttribute('changedirectory')
+        self.info[name]['image'] = example.getAttribute('image')
+        self.info[name]['qml'] = example.getAttribute('qml')
+
+    def resolveDir(self, name):
+        dirName = self.info[name]['dirname']
+        fileName = self.info[name]['filename'].split('/')
+
+        dir = QFileInfo(__file__).dir()
+        # To the 'examples' directory.
+        dir.cdUp()
+
+        dir.cd(dirName)
+
+        if len(fileName) > 1:
+            dir.cd('/'.join(fileName[:-1]))
+
+        # This may legitimately fail if the example is just a simple .py file.
+        dir.cd(fileName[-1])
+
+        return dir
+
+    def resolveDataDir(self, name):
+        return self.resolveDir(name).absolutePath()
+
+    def resolveExeFile(self, name):
+        dir = self.resolveDir(name)
+
+        fileName = self.info[name]['filename'].split('/')[-1]
+
+        pyFile = QFile(dir.path() + '/' + fileName + '.py')
+        if pyFile.exists():
+            return pyFile.fileName()
+
+        pywFile = QFile(dir.path() + '/' + fileName + '.pyw')
+        if pywFile.exists():
+            return pywFile.fileName()
+
+        Colors.debug("- WARNING: Could not resolve executable:", dir.path(),
+                fileName)
+        return '__executable not found__'
+
+    def resolveQmlFile(self, name):
+        dir = self.resolveDir(name)
+
+        fileName = self.info[name]['filename'].split('/')[-1]
+
+        qmlFile = QFile(dir.path() + '/' + fileName + '.qml')
+        if qmlFile.exists():
+            return qmlFile.fileName()
+
+        Colors.debug("- WARNING: Could not resolve QML file:", dir.path(),
+                fileName)
+        return '__QML not found__'
+
+    def resolveDocUrl(self, name):
+        dirName = self.info[name]['dirname']
+        fileName = self.info[name]['filename']
+
+        return self.helpRootUrl + dirName.replace('/', '-') + '-' + fileName + '.html'
+
+    def resolveImageUrl(self, name):
+        return self.helpRootUrl + 'images/' + name
+
+    def getHtml(self, name):
+        return self.getResource(self.resolveDocUrl(name))
+
+    def getImage(self, name):
+        imageName = self.info[name]['image']
+        fileName = self.info[name]['filename']
+
+        if self.info[name]['qml'] == 'true':
+            fileName = 'qml-' + fileName.split('/')[-1]
+
+        if not imageName:
+            imageName = fileName + '-example.png'
+
+            if self.getResource(self.resolveImageUrl(imageName)).isEmpty():
+                imageName = fileName + '.png'
+
+            if self.getResource(self.resolveImageUrl(imageName)).isEmpty():
+                imageName = fileName + 'example.png'
+
+        return self.getResource(self.resolveImageUrl(imageName))
+
+    def createRootMenu(self, el):
+        name = el.getAttribute('name')
+        self.createMenu(el, MenuManager.MENU1)
+        self.createInfo(
+                MenuContentItem(el, self.window.mainSceneRoot),
+                name + ' -info')
+
+        menuButtonsIn = self.score.insertMovie(name + ' -buttons')
+        menuButtonsOut = self.score.insertMovie(name + ' -buttons -out')
+        self.createLowLeftButton("Quit", MenuManager.QUIT, menuButtonsIn,
+                menuButtonsOut, None)
+        self.createLowRightButton("Toggle fullscreen", MenuManager.FULLSCREEN,
+                menuButtonsIn, menuButtonsOut, None)
+
+    def createSubMenu(self, el):
+        name = el.getAttribute('name')
+        self.createMenu(el, MenuManager.MENU2)
+        self.createInfo(
+                MenuContentItem(el, self.window.mainSceneRoot),
+                name + ' -info')
+
+    def createLeafMenu(self, el):
+        name = el.getAttribute('name')
+        self.createInfo(ExampleContent(name, self.window.mainSceneRoot), name)
+
+        infoButtonsIn = self.score.insertMovie(name + ' -buttons')
+        infoButtonsOut = self.score.insertMovie(name + ' -buttons -out')
+        self.createLowRightLeafButton("Documentation", 600,
+                MenuManager.DOCUMENTATION, infoButtonsIn, infoButtonsOut, None)
+        if el.getAttribute('executable') != 'false':
+            self.createLowRightLeafButton("Launch", 405, MenuManager.LAUNCH,
+                    infoButtonsIn, infoButtonsOut, None)
+        elif el.getAttribute('qml') == 'true':
+            self.createLowRightLeafButton("Display", 405,
+                    MenuManager.LAUNCH_QML, infoButtonsIn, infoButtonsOut,
+                    None)
+
+    def createMenu(self, category, type):
+        sw = self.window.scene.sceneRect().width()
+        xOffset = 15
+        yOffset = 10
+        maxExamples = Colors.menuCount
+        menuIndex = 1
+        name = category.getAttribute('name')
+        currentNode = self._first_element(category)
+        currentMenu = '%s -menu%d' % (name, menuIndex)
+
+        while currentNode is not None:
+            movieIn = self.score.insertMovie(currentMenu)
+            movieOut = self.score.insertMovie(currentMenu + ' -out')
+            movieNextTopOut = self.score.insertMovie(currentMenu + ' -top_out')
+            movieNextBottomOut = self.score.insertMovie(currentMenu + ' -bottom_out')
+            movieNextTopIn = self.score.insertMovie(currentMenu + ' -top_in')
+            movieNextBottomIn = self.score.insertMovie(currentMenu + ' -bottom_in')
+            movieShake = self.score.insertMovie(currentMenu + ' -shake')
+
+            i = 0
+            while currentNode is not None and i < maxExamples:
+                # Create a normal menu button.
+                label = currentNode.getAttribute('name')
+                item = TextButton(label, TextButton.LEFT, type,
+                        self.window.mainSceneRoot)
+
+                item.setRecursiveVisible(False)
+                item.setZValue(10)
+                ih = item.sceneBoundingRect().height()
+                iw = item.sceneBoundingRect().width()
+                ihp = ih + 3
+
+                # Create in-animation.
+                anim = DemoItemAnimation(item, DemoItemAnimation.ANIM_IN)
+                anim.setDuration(1000 + (i * 20))
+                anim.setStartValue(QPointF(xOffset, -ih))
+                anim.setKeyValueAt(0.20, QPointF(xOffset, -ih))
+                anim.setKeyValueAt(0.50, QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY + (10 * float(i / 4.0))))
+                anim.setKeyValueAt(0.60, QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY))
+                anim.setKeyValueAt(0.70, QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY + (5 * float(i / 4.0))))
+                anim.setKeyValueAt(0.80, QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY))
+                anim.setKeyValueAt(0.90, QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY + (2 * float(i / 4.0))))
+                anim.setEndValue(QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY))
+                movieIn.append(anim)
+
+                # Create out-animation.
+                anim = DemoItemAnimation(item, DemoItemAnimation.ANIM_OUT)
+                anim.setHideOnFinished(True)
+                anim.setDuration(700 + (30 * i))
+                anim.setStartValue(QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY))
+                anim.setKeyValueAt(0.60, QPointF(xOffset, 600 - ih - ih))
+                anim.setKeyValueAt(0.65, QPointF(xOffset + 20, 600 - ih))
+                anim.setEndValue(QPointF(sw + iw, 600 - ih))
+                movieOut.append(anim)
+
+                # Create shake-animation.
+                anim = DemoItemAnimation(item)
+                anim.setDuration(700)
+                anim.setStartValue(QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY))
+                anim.setKeyValueAt(0.55, QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY - i*2.0))
+                anim.setKeyValueAt(0.70, QPointF(xOffset - 10, (i * ihp) + yOffset + Colors.contentStartY - i*1.5))
+                anim.setKeyValueAt(0.80, QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY - i*1.0))
+                anim.setKeyValueAt(0.90, QPointF(xOffset - 2, (i * ihp) + yOffset + Colors.contentStartY - i*0.5))
+                anim.setEndValue(QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY))
+                movieShake.append(anim)
+
+                # Create next-menu top-out-animation.
+                anim = DemoItemAnimation(item, DemoItemAnimation.ANIM_OUT)
+                anim.setHideOnFinished(True)
+                anim.setDuration(200 + (30 * i))
+                anim.setStartValue(QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY))
+                anim.setKeyValueAt(0.70, QPointF(xOffset, yOffset + Colors.contentStartY))
+                anim.setEndValue(QPointF(-iw, yOffset + Colors.contentStartY))
+                movieNextTopOut.append(anim)
+
+                # Create next-menu bottom-out-animation.
+                anim = DemoItemAnimation(item, DemoItemAnimation.ANIM_OUT)
+                anim.setHideOnFinished(True)
+                anim.setDuration(200 + (30 * i))
+                anim.setStartValue(QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY))
+                anim.setKeyValueAt(0.70, QPointF(xOffset, (maxExamples * ihp) + yOffset + Colors.contentStartY))
+                anim.setEndValue(QPointF(-iw, (maxExamples * ihp) + yOffset + Colors.contentStartY))
+                movieNextBottomOut.append(anim)
+
+                # Create next-menu top-in-animation.
+                anim = DemoItemAnimation(item, DemoItemAnimation.ANIM_IN)
+                anim.setDuration(700 - (30 * i))
+                anim.setStartValue(QPointF(-iw, yOffset + Colors.contentStartY))
+                anim.setKeyValueAt(0.30, QPointF(xOffset, yOffset + Colors.contentStartY))
+                anim.setEndValue(QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY))
+                movieNextTopIn.append(anim)
+
+                # Create next-menu bottom-in-animation.
+                reverse = maxExamples - i
+                anim = DemoItemAnimation(item, DemoItemAnimation.ANIM_IN)
+                anim.setDuration(1000 - (30 * reverse))
+                anim.setStartValue(QPointF(-iw, (maxExamples * ihp) + yOffset + Colors.contentStartY))
+                anim.setKeyValueAt(0.30, QPointF(xOffset, (maxExamples * ihp) + yOffset + Colors.contentStartY))
+                anim.setEndValue(QPointF(xOffset, (i * ihp) + yOffset + Colors.contentStartY))
+                movieNextBottomIn.append(anim)
+
+                i += 1
+                currentNode = self._next_element(currentNode)
+
+            if currentNode is not None and i == maxExamples:
+                # We need another menu, so register for 'more' and 'back'
+                # buttons.
+                menuIndex += 1
+                self.info.setdefault(currentMenu, {})['more'] = '%s -menu%d' % (name, menuIndex)
+                currentMenu = '%s -menu%d' % (name, menuIndex)
+                self.info.setdefault(currentMenu, {})['back'] = '%s -menu%d' % (name, menuIndex - 1)
+
+    def createLowLeftButton(self, label, type, movieIn, movieOut, movieShake, menuString=""):
+        button = TextButton(label, TextButton.RIGHT, type,
+                self.window.mainSceneRoot, TextButton.PANEL)
+        if menuString:
+            button.setMenuString(menuString)
+        button.setRecursiveVisible(False)
+        button.setZValue(10)
+
+        iw = button.sceneBoundingRect().width()
+        xOffset = 15
+
+        # Create in-animation.
+        buttonIn = DemoItemAnimation(button, DemoItemAnimation.ANIM_IN)
+        buttonIn.setDuration(1800)
+        buttonIn.setStartValue(QPointF(-iw, Colors.contentStartY + Colors.contentHeight - 35))
+        buttonIn.setKeyValueAt(0.5, QPointF(-iw, Colors.contentStartY + Colors.contentHeight - 35))
+        buttonIn.setKeyValueAt(0.7, QPointF(xOffset, Colors.contentStartY + Colors.contentHeight - 35))
+        buttonIn.setEndValue(QPointF(xOffset, Colors.contentStartY + Colors.contentHeight - 26))
+        movieIn.append(buttonIn)
+
+        # Create out-animation.
+        buttonOut = DemoItemAnimation(button, DemoItemAnimation.ANIM_OUT)
+        buttonOut.setHideOnFinished(True)
+        buttonOut.setDuration(400)
+        buttonOut.setStartValue(QPointF(xOffset, Colors.contentStartY + Colors.contentHeight - 26))
+        buttonOut.setEndValue(QPointF(-iw, Colors.contentStartY + Colors.contentHeight - 26))
+        movieOut.append(buttonOut)
+
+        if movieShake is not None:
+            shakeAnim = DemoItemAnimation(button, DemoItemAnimation.ANIM_UNSPECIFIED)
+            shakeAnim.setDuration(650)
+            shakeAnim.setStartValue(buttonIn.endValue())
+            shakeAnim.setKeyValueAt(0.60, buttonIn.endValue())
+            shakeAnim.setKeyValueAt(0.70, buttonIn.endValue() + QPointF(-3, 0))
+            shakeAnim.setKeyValueAt(0.80, buttonIn.endValue() + QPointF(2, 0))
+            shakeAnim.setKeyValueAt(0.90, buttonIn.endValue() + QPointF(-1, 0))
+            shakeAnim.setEndValue(buttonIn.endValue())
+            movieShake.append(shakeAnim)
+
+    def createLowRightButton(self, label, type, movieIn, movieOut, movieShake):
+        item = TextButton(label, TextButton.RIGHT, type,
+                self.window.mainSceneRoot, TextButton.PANEL)
+        item.setRecursiveVisible(False)
+        item.setZValue(10)
+
+        sw = self.window.scene.sceneRect().width()
+        xOffset = 70
+
+        # Create in-animation.
+        anim = DemoItemAnimation(item, DemoItemAnimation.ANIM_IN)
+        anim.setDuration(1800)
+        anim.setStartValue(QPointF(sw, Colors.contentStartY + Colors.contentHeight - 35))
+        anim.setKeyValueAt(0.5, QPointF(sw, Colors.contentStartY + Colors.contentHeight - 35))
+        anim.setKeyValueAt(0.7, QPointF(xOffset + 535, Colors.contentStartY + Colors.contentHeight - 35))
+        anim.setEndValue(QPointF(xOffset + 535, Colors.contentStartY + Colors.contentHeight - 26))
+        movieIn.append(anim)
+
+        # Create out-animation.
+        anim = DemoItemAnimation(item, DemoItemAnimation.ANIM_OUT)
+        anim.setHideOnFinished(True)
+        anim.setDuration(400)
+        anim.setStartValue(QPointF(xOffset + 535, Colors.contentStartY + Colors.contentHeight - 26))
+        anim.setEndValue(QPointF(sw, Colors.contentStartY + Colors.contentHeight - 26))
+        movieOut.append(anim)
+
+    def createLowRightLeafButton(self, label, xOffset, type, movieIn, movieOut, movieShake):
+        item = TextButton(label, TextButton.RIGHT, type,
+                self.window.mainSceneRoot, TextButton.PANEL)
+        item.setRecursiveVisible(False)
+        item.setZValue(10)
+
+        sw = self.window.scene.sceneRect().width()
+        sh = self.window.scene.sceneRect().height()
+
+        # Create in-animation.
+        anim = DemoItemAnimation(item, DemoItemAnimation.ANIM_IN)
+        anim.setDuration(1050)
+        anim.setStartValue(QPointF(sw, Colors.contentStartY + Colors.contentHeight - 35))
+        anim.setKeyValueAt(0.10, QPointF(sw, Colors.contentStartY + Colors.contentHeight - 35))
+        anim.setKeyValueAt(0.30, QPointF(xOffset, Colors.contentStartY + Colors.contentHeight - 35))
+        anim.setKeyValueAt(0.35, QPointF(xOffset + 30, Colors.contentStartY + Colors.contentHeight - 35))
+        anim.setKeyValueAt(0.40, QPointF(xOffset, Colors.contentStartY + Colors.contentHeight - 35))
+        anim.setKeyValueAt(0.45, QPointF(xOffset + 5, Colors.contentStartY + Colors.contentHeight - 35))
+        anim.setKeyValueAt(0.50, QPointF(xOffset, Colors.contentStartY + Colors.contentHeight - 35))
+        anim.setEndValue(QPointF(xOffset, Colors.contentStartY + Colors.contentHeight - 26))
+        movieIn.append(anim)
+
+        # Create out-animation.
+        anim = DemoItemAnimation(item, DemoItemAnimation.ANIM_OUT)
+        anim.setHideOnFinished(True)
+        anim.setDuration(300)
+        anim.setStartValue(QPointF(xOffset, Colors.contentStartY + Colors.contentHeight - 26))
+        anim.setEndValue(QPointF(xOffset, sh))
+        movieOut.append(anim)
+
+    def createInfo(self, item, name):
+        movie_in = self.score.insertMovie(name)
+        movie_out = self.score.insertMovie(name + ' -out')
+        item.setZValue(8)
+        item.setRecursiveVisible(False)
+
+        xOffset = 230.0
+        infoIn = DemoItemAnimation(item, DemoItemAnimation.ANIM_IN)
+        infoIn.setDuration(650)
+        infoIn.setStartValue(QPointF(self.window.scene.sceneRect().width(), Colors.contentStartY))
+        infoIn.setKeyValueAt(0.60, QPointF(xOffset, Colors.contentStartY))
+        infoIn.setKeyValueAt(0.70, QPointF(xOffset + 20, Colors.contentStartY))
+        infoIn.setKeyValueAt(0.80, QPointF(xOffset, Colors.contentStartY))
+        infoIn.setKeyValueAt(0.90, QPointF(xOffset + 7, Colors.contentStartY))
+        infoIn.setEndValue(QPointF(xOffset, Colors.contentStartY))
+        movie_in.append(infoIn)
+
+        infoOut = DemoItemAnimation(item, DemoItemAnimation.ANIM_OUT)
+        infoOut.setCurveShape(QEasingCurve.InQuad)
+        infoOut.setDuration(300)
+        infoOut.setHideOnFinished(True)
+        infoOut.setStartValue(QPointF(xOffset, Colors.contentStartY))
+        infoOut.setEndValue(QPointF(-600, Colors.contentStartY))
+        movie_out.append(infoOut)
+
+    def createTicker(self):
+        if Colors.noTicker:
+            return
+
+        movie_in = self.score.insertMovie('ticker')
+        movie_out = self.score.insertMovie('ticker -out')
+        movie_activate = self.score.insertMovie('ticker -activate')
+        movie_deactivate = self.score.insertMovie('ticker -deactivate')
+
+        self.ticker = ItemCircleAnimation()
+        self.ticker.setZValue(50)
+        self.ticker.hide()
+
+        # Move ticker in.
+        qtendpos = 485
+        qtPosY = 120
+        self.tickerInAnim = DemoItemAnimation(self.ticker,
+                DemoItemAnimation.ANIM_IN)
+        self.tickerInAnim.setDuration(500)
+        self.tickerInAnim.setStartValue(QPointF(self.window.scene.sceneRect().width(), Colors.contentStartY + qtPosY))
+        self.tickerInAnim.setKeyValueAt(0.60, QPointF(qtendpos, Colors.contentStartY + qtPosY))
+        self.tickerInAnim.setKeyValueAt(0.70, QPointF(qtendpos + 30, Colors.contentStartY + qtPosY))
+        self.tickerInAnim.setKeyValueAt(0.80, QPointF(qtendpos, Colors.contentStartY + qtPosY))
+        self.tickerInAnim.setKeyValueAt(0.90, QPointF(qtendpos + 5, Colors.contentStartY + qtPosY))
+        self.tickerInAnim.setEndValue(QPointF(qtendpos, Colors.contentStartY + qtPosY))
+        movie_in.append(self.tickerInAnim)
+
+        # Move ticker out.
+        qtOut = DemoItemAnimation(self.ticker, DemoItemAnimation.ANIM_OUT)
+        qtOut.setHideOnFinished(True)
+        qtOut.setDuration(500)
+        qtOut.setStartValue(QPointF(qtendpos, Colors.contentStartY + qtPosY))
+        qtOut.setEndValue(QPointF(self.window.scene.sceneRect().width() + 700, Colors.contentStartY + qtPosY))
+        movie_out.append(qtOut)
+
+        # Move ticker in on activate.
+        qtActivate = DemoItemAnimation(self.ticker)
+        qtActivate.setDuration(400)
+        qtActivate.setStartValue(QPointF(self.window.scene.sceneRect().width(), Colors.contentStartY + qtPosY))
+        qtActivate.setKeyValueAt(0.60, QPointF(qtendpos, Colors.contentStartY + qtPosY))
+        qtActivate.setKeyValueAt(0.70, QPointF(qtendpos + 30, Colors.contentStartY + qtPosY))
+        qtActivate.setKeyValueAt(0.80, QPointF(qtendpos, Colors.contentStartY + qtPosY))
+        qtActivate.setKeyValueAt(0.90, QPointF(qtendpos + 5, Colors.contentStartY + qtPosY))
+        qtActivate.setEndValue(QPointF(qtendpos, Colors.contentStartY + qtPosY))
+        movie_activate.append(qtActivate)
+
+        # Move ticker out on deactivate.
+        qtDeactivate = DemoItemAnimation(self.ticker)
+        qtDeactivate.setHideOnFinished(True)
+        qtDeactivate.setDuration(400)
+        qtDeactivate.setStartValue(QPointF(qtendpos, Colors.contentStartY + qtPosY))
+        qtDeactivate.setEndValue(QPointF(qtendpos, 800))
+        movie_deactivate.append(qtDeactivate)
+
+    def createUpnDownButtons(self):
+        xOffset = 15.0
+        yOffset = 450.0
+
+        self.upButton = TextButton("", TextButton.LEFT, MenuManager.UP,
+                self.window.mainSceneRoot, TextButton.UP)
+        self.upButton.prepare()
+        self.upButton.setPos(xOffset, yOffset)
+        self.upButton.setState(TextButton.DISABLED)
+
+        self.downButton = TextButton("", TextButton.LEFT, MenuManager.DOWN,
+                self.window.mainSceneRoot, TextButton.DOWN)
+        self.downButton.prepare()
+        self.downButton.setPos(xOffset + 10 + self.downButton.sceneBoundingRect().width(), yOffset)
+
+        movieShake = self.score.insertMovie('upndown -shake')
+
+        shakeAnim = DemoItemAnimation(self.upButton,
+                DemoItemAnimation.ANIM_UNSPECIFIED)
+        shakeAnim.setDuration(650)
+        shakeAnim.setStartValue(self.upButton.pos())
+        shakeAnim.setKeyValueAt(0.60, self.upButton.pos())
+        shakeAnim.setKeyValueAt(0.70, self.upButton.pos() + QPointF(-2, 0))
+        shakeAnim.setKeyValueAt(0.80, self.upButton.pos() + QPointF(1, 0))
+        shakeAnim.setKeyValueAt(0.90, self.upButton.pos() + QPointF(-1, 0))
+        shakeAnim.setEndValue(self.upButton.pos())
+        movieShake.append(shakeAnim)
+
+        shakeAnim = DemoItemAnimation(self.downButton,
+                DemoItemAnimation.ANIM_UNSPECIFIED)
+        shakeAnim.setDuration(650)
+        shakeAnim.setStartValue(self.downButton.pos())
+        shakeAnim.setKeyValueAt(0.60, self.downButton.pos())
+        shakeAnim.setKeyValueAt(0.70, self.downButton.pos() + QPointF(-5, 0))
+        shakeAnim.setKeyValueAt(0.80, self.downButton.pos() + QPointF(-3, 0))
+        shakeAnim.setKeyValueAt(0.90, self.downButton.pos() + QPointF(-1, 0))
+        shakeAnim.setEndValue(self.downButton.pos())
+        movieShake.append(shakeAnim)
+
+    def createBackButton(self):
+        backIn = self.score.insertMovie('back -in')
+        backOut = self.score.insertMovie('back -out')
+        backShake = self.score.insertMovie('back -shake')
+        self.createLowLeftButton("Back", MenuManager.ROOT, backIn, backOut,
+                backShake, Colors.rootMenuName)
diff --git a/examples/qtdemo/qtdemo.py b/examples/qtdemo/qtdemo.py
new file mode 100755
index 0000000..010a765
--- /dev/null
+++ b/examples/qtdemo/qtdemo.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QEventLoop, QTime
+from PyQt5.QtWidgets import QApplication, QMessageBox
+
+import qtdemo_rc
+
+from colors import Colors
+from mainwindow import MainWindow
+from menumanager import MenuManager
+
+
+def artisticSleep(sleepTime):
+    time = QTime()
+    time.restart()
+    while time.elapsed() < sleepTime:
+        QApplication.processEvents(QEventLoop.AllEvents, 50)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    Colors.parseArgs(sys.argv)
+
+    if sys.platform == 'win32':
+        QMessageBox.information(None, "Documentation Warning",
+                "If you are using the GPL version of PyQt from the binary "
+                "installer then you will probably see warning messages about "
+                "missing documentation.  This is because the installer does "
+                "not include a copy of the Qt documentation as it is so "
+                "large.")
+
+    mainWindow = MainWindow()
+    MenuManager.instance().init(mainWindow)
+    mainWindow.setFocus()
+
+    if Colors.fullscreen:
+        mainWindow.showFullScreen()
+    else:
+        mainWindow.enableMask(True)
+        mainWindow.show()
+
+    artisticSleep(500)
+    mainWindow.start()
+
+    sys.exit(app.exec_())
diff --git a/examples/qtdemo/qtdemo.qrc b/examples/qtdemo/qtdemo.qrc
new file mode 100644
index 0000000..1a3ebcd
--- /dev/null
+++ b/examples/qtdemo/qtdemo.qrc
@@ -0,0 +1,8 @@
+<RCC>
+    <qresource prefix="/">
+        <file>xml/examples.xml</file>
+        <file>images/qtlogo_small.png</file>
+        <file>images/trolltech-logo.png</file>
+        <file>images/demobg.png</file>
+    </qresource>
+</RCC>
diff --git a/examples/qtdemo/qtdemo_rc.py b/examples/qtdemo/qtdemo_rc.py
new file mode 100644
index 0000000..f020e40
--- /dev/null
+++ b/examples/qtdemo/qtdemo_rc.py
@@ -0,0 +1,3217 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Mon Aug 12 12:53:21 2013
+#      by: The Resource Compiler for PyQt (Qt v5.1.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x5b\xfb\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x01\xb6\x00\x00\x00\xb2\x08\x06\x00\x00\x00\x2e\xef\xea\xd2\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x09\x62\x00\x00\x09\x62\
+\x01\x62\xdb\xcf\x8c\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x20\x00\x49\x44\
+\x41\x54\x78\x9c\xec\x9d\x79\x78\x54\xe5\xf5\xc7\xbf\xe7\xde\x99\
+\xc9\x9e\xb0\xef\x10\x76\x04\x51\xb6\x30\x13\x16\x95\xa8\x45\x41\
+\x48\x82\x0a\x5a\xb5\x6e\x48\x26\x8a\xda\x45\xdb\xda\xf6\xd7\xd2\
+\x68\x6d\xed\xa6\xad\x56\x21\xc1\xbd\xd6\x56\xa3\x90\x09\xd4\x05\
+\x17\xe2\x02\x24\x21\xb2\x08\x75\x63\xdf\x77\x92\x90\x75\x96\xfb\
+\x9e\xdf\x1f\x59\x98\xb9\xf7\x4e\xb6\x19\x48\x80\xf7\xf3\x3c\x79\
+\x9e\xcc\x7b\xdf\xe5\xdc\x7b\x67\xee\xb9\xe7\xbc\xe7\x3d\x2f\x31\
+\x33\xc2\x01\xcd\x1c\x16\x91\xa0\x79\xfb\x78\xc1\x5d\x88\xd0\x99\
+\x80\x2e\x00\x77\x21\xa2\xce\x00\x77\x51\x2c\x4a\xd7\x7e\x03\x23\
+\x86\xc7\x77\xb6\xf4\x8c\x8b\x57\xbb\xc4\x25\x58\x62\x62\xe3\x55\
+\x1b\x11\xd8\xe7\x63\x9f\xd7\xcb\x3e\xcd\xc7\x1e\xcd\xcb\x35\xee\
+\x5a\xde\xe7\x75\x6b\x5b\x3c\x6e\xb1\x46\x58\xa2\xde\xfb\xf4\x97\
+\x25\x87\xc2\x22\xa4\x44\x22\x91\x48\xce\x7b\xa8\xad\x8a\x2d\xe6\
+\x9a\xc4\x09\x0a\xd1\x4c\x10\x5f\x02\xe0\x12\x00\xc3\x00\xa8\x86\
+\x7a\xb1\x2a\x86\x8e\x8a\xc6\x90\x91\x51\x88\x8c\x52\xda\x34\x56\
+\x4d\x95\xd0\xaa\x2a\xb5\x52\x77\x8d\xd8\xeb\xae\xd5\xb6\xfa\xdc\
+\xb4\x56\x78\x3d\xab\x3e\x79\xec\x9b\x5d\x6d\xea\x50\x22\x91\x48\
+\x24\xe7\x2d\xad\x52\x6c\xf1\xa9\x7d\xbb\x09\x9f\xe5\x36\x62\xba\
+\x0b\xe0\x4b\x9b\xaa\x9b\xd0\xd9\x82\x31\x8e\x38\xf4\x4d\x8c\x00\
+\x51\xc8\x72\x9a\x52\x5b\xa3\x89\xea\x0a\x51\x5e\x5b\xa3\xed\x73\
+\xd7\x8a\xaf\x3c\x5e\xac\xf3\xf8\x3c\xab\xd6\x2e\xfa\xf6\x9b\x33\
+\x33\xa2\x44\x22\x91\x48\x3a\x3a\x2d\x52\x6c\x34\x8f\xd4\x98\xca\
+\x01\x0f\x10\xe3\x31\x00\xb1\xcd\xd5\xbf\xe8\xd2\x18\x8c\x71\xc4\
+\x42\x55\xcf\x90\x46\x6b\x06\x4f\xad\x10\x95\x15\x5a\x45\x4d\x8d\
+\x38\xe0\x71\xf3\x57\x1e\xb7\xb6\xde\xe3\xe6\x0f\xd6\x3e\xfa\xbf\
+\x8d\xed\x22\x90\x44\x22\x91\x48\xce\x1a\xcd\x2a\xb6\x98\x99\x03\
+\xc7\xa9\xcc\x39\x0c\x24\x35\xd7\x59\x74\xac\x8a\x49\x29\x09\xe8\
+\xd9\xd7\x16\x36\x01\xc3\x89\xc7\x23\xb8\xaa\x42\x54\xd6\x54\x6b\
+\x87\xdc\x35\xe2\x1b\xaf\x47\xac\xf7\xfa\xd4\x0f\xd7\xe0\xcb\x62\
+\x5e\xc4\xa2\xbd\xe5\x93\x48\x24\x12\x49\xe8\x34\xa9\xd8\xe2\xae\
+\x4d\x9c\x07\xc2\x6b\x00\xac\xcd\x75\x14\x1b\xaf\x62\xfa\x9c\xae\
+\x6d\x9e\x47\x6b\x4f\x7c\x3e\xe6\xaa\x53\x5a\x75\x4d\x95\x38\xec\
+\x76\x8b\xef\xbc\x1e\xfe\x42\xf3\x8a\x8f\x89\xff\xf7\xd9\xea\x45\
+\xec\x6b\x6f\xf9\x24\x12\x89\x44\xd2\x72\x82\x2a\xb6\xf8\x99\x89\
+\x19\xcc\x58\x0c\xa0\x59\x4d\x15\x19\xa5\x60\xfa\x9c\xae\x88\x8d\
+\x37\xc4\x8e\x9c\xd3\x68\x3e\x46\x55\xa5\x56\x53\x53\x25\x8e\xd4\
+\xd6\x68\xdb\xbd\x5e\x7c\xe1\x71\x8b\x02\x0b\xaa\x0a\x56\x2f\xda\
+\x55\xdb\xde\xf2\x49\x24\x12\x89\xc4\x88\xa9\x62\x8b\xbd\x36\xf1\
+\x87\x44\xf8\x5b\x4b\x3a\xb0\xda\x08\x57\xa7\x76\x41\xe7\x6e\xcd\
+\x1a\x75\xe7\x0d\x42\x30\x2a\x4f\x69\xee\xda\x2a\x71\xac\xb6\x56\
+\xec\xf0\xb8\x79\xa3\xd7\xe3\xfb\xe4\x24\x94\x0f\xb7\x2e\xda\x5a\
+\xd9\xde\xf2\x49\x24\x12\xc9\x85\x8c\x41\xb1\xc5\xcf\x4c\x9c\xc2\
+\x8c\x4f\x60\x12\xba\x6f\xc6\xb4\x19\x9d\xd1\x27\x31\xe2\x4c\xc8\
+\x76\xce\xc1\x02\xa8\xaa\xd4\x3c\xd5\x55\xda\x71\x77\x0d\xef\xf2\
+\xd4\x8a\x4d\x6e\xaf\x58\xa3\x31\xde\x5f\xbb\x68\xeb\xc9\xf6\x96\
+\x4f\x22\x91\x48\x2e\x04\x02\x14\x5b\xe7\x39\x83\x3a\x69\xb5\x62\
+\x13\x03\x89\x2d\x69\xdc\x6f\x60\x04\x2e\xbf\xb6\xf3\x19\x13\xee\
+\x7c\x81\x19\xa8\xa9\xd2\xbc\x55\x55\xda\x49\x77\x8d\xd8\xed\x76\
+\x8b\x2d\xde\x5a\xfe\xdc\xea\xae\x7e\xef\xc3\xc7\x77\x1e\x69\x6f\
+\xf9\x24\x12\x89\xe4\x7c\x22\x40\xb1\xc5\xcd\x18\xf8\x6f\x80\x6f\
+\x6e\x49\x43\x45\x21\x5c\x77\x53\x37\xc4\x25\x9c\x5f\xf3\x6a\x67\
+\x9b\xea\x6a\xe1\xab\xae\xd0\xca\xfc\x17\x9f\x7b\x54\xdf\x7b\x6b\
+\x7e\xf5\xd5\x9e\xf6\x96\x4d\x22\x91\x48\xce\x45\x1a\x15\x5b\xcc\
+\x35\x89\x13\x14\x05\x25\x2d\x6d\x38\x6a\x6c\x0c\xc6\x26\xc7\x9d\
+\x31\xc1\x2e\x74\x6a\xab\x35\x51\x5d\x25\xca\x6a\xaa\xc5\x3e\x4f\
+\xad\xf8\xca\xe3\xd1\xd6\x69\x9a\x78\xff\xb3\x45\x5f\x7f\xd7\xde\
+\xb2\x49\x24\x12\x49\x47\xa6\x51\xb1\xc5\xcd\x4c\x7c\x0b\x8c\x1b\
+\x5a\xd2\xc8\x62\x21\xcc\xb9\xa3\x07\xac\xd6\xf6\x59\x80\x7d\x21\
+\xa3\x5f\x7c\xee\x75\x8b\x22\x8f\x8f\x3f\x5c\xb3\x68\xeb\xa6\xf6\
+\x96\x4d\x22\x91\x48\x3a\x02\xc4\xcc\x88\x9f\x31\x78\x04\x43\xfb\
+\x0a\x2d\x08\xed\x07\x80\x01\x83\x23\x31\x75\x7a\xa7\x33\x2c\x9a\
+\xa4\x35\x34\x2c\x3e\xaf\xad\xd2\x0e\xba\xdd\xe2\x1b\x8f\x5b\x94\
+\xc8\xc5\xe7\x12\x89\xe4\x42\x84\x98\x19\x71\x33\x06\xfc\x03\xa0\
+\x85\x2d\x6d\x34\xf9\xaa\x4e\x18\x38\x2c\xf2\x4c\xca\x25\x09\x13\
+\xfe\x8b\xcf\x6b\x6b\xc5\xb7\x5e\xb7\x56\xe2\x13\xca\xc7\xaa\xd8\
+\xb2\x46\x2e\x3e\x97\x48\x24\xe7\x23\xf5\x8a\x2d\x71\x1b\x80\xa1\
+\x2d\x69\xa0\x28\x84\x1b\xee\xec\x01\xab\x4d\xba\x21\xcf\x65\x34\
+\x1f\xa3\xb2\x42\xab\xa9\xad\x96\x8b\xcf\x25\x12\xc9\xf9\x05\x45\
+\xce\x1c\x94\x68\x11\xda\xee\x96\x36\xe8\x33\x20\x02\xd3\x66\xca\
+\x10\xff\xf3\x15\x21\x18\x55\x15\xa2\xb6\xba\x4a\x1c\x73\xd7\xfa\
+\x76\x78\xdc\xd8\xe8\xf5\x68\x9f\x9c\x64\xfa\x48\x2e\x3e\x97\x48\
+\x24\xe7\x02\x14\x37\x23\xf1\x6e\x66\x7e\xa1\xa5\x0d\x46\x4f\x88\
+\xc5\xa5\x13\x9b\x4d\xf0\x2f\x39\xcf\x30\x5b\x7c\xee\xf5\xf2\x67\
+\x5e\xe6\x0f\xe4\xe2\x73\x89\x44\xd2\x91\xa0\x98\x19\x89\x2f\x12\
+\xf3\x5d\x2d\x6d\x30\xf1\xb2\x78\x0c\xbb\x38\xfa\x4c\xca\x24\x39\
+\x87\x60\x06\xaa\x2b\x35\x6f\x75\x95\x76\xb2\xb6\x56\xec\x3a\x5a\
+\x56\x3b\xbb\x64\xd1\xb7\xc7\xdb\x5b\x2e\x89\x44\x72\xe1\x62\x51\
+\x18\xbd\x5b\xb3\x87\x76\x54\xf4\xb9\x97\xbd\x5f\x72\xe6\x20\x02\
+\x62\xe2\x54\x6b\x4c\x9c\xda\x13\x40\xcf\xca\x4d\xa2\x0f\x00\xa9\
+\xd8\x24\x12\x49\xbb\xa1\x30\xb8\x47\x6b\x1a\x44\xc5\xc8\x4c\x23\
+\x12\x89\x44\x22\xe9\xb8\x28\x00\x5a\xa5\xd8\x22\xa5\xc5\x26\x91\
+\x48\x24\x92\x0e\x8c\x02\xa0\x7b\x6b\x1a\xc8\x6c\x23\x12\x89\x44\
+\x22\xe9\xc8\x28\x00\x5a\xb5\xe7\x0c\x91\x54\x6c\x12\x89\x44\x22\
+\xe9\xb8\x48\xbf\xa2\x44\x22\x91\x48\xce\x2b\xa4\x62\x93\x48\x24\
+\x12\xc9\x79\x85\x54\x6c\x12\x89\x44\x22\x39\xaf\x90\x8a\x4d\x22\
+\x91\x48\x24\xe7\x15\x52\xb1\x49\x24\x12\x89\xe4\xbc\x42\x2a\x36\
+\x89\x44\x22\x91\x9c\x57\x48\xc5\x26\x91\x48\x24\x92\xf3\x0a\xa9\
+\xd8\x24\x12\x89\x44\x72\x5e\x61\x69\x6f\x01\xce\x16\x5e\x0f\x43\
+\xf3\x05\xa6\x7b\xb6\x59\xad\x88\x8b\x89\x41\xad\xaf\x1a\x9a\x90\
+\x9b\x49\x4b\x24\x12\xc9\xf9\xc0\x79\xa5\xd8\x3c\x6e\x81\x7d\x3b\
+\xdd\x28\x2f\xf5\xa1\xa6\x5a\x43\x4d\x95\x40\x6d\x8d\x40\xef\x1e\
+\x5d\x31\x66\xc8\x48\x24\x76\xeb\x83\xfe\xdd\xfb\x63\x50\xcf\xc1\
+\x18\xde\xe7\x22\xf4\xeb\x3a\x00\x0a\xd5\x19\xad\x1e\xad\x16\x35\
+\xde\x4a\x54\x7a\xca\xb1\xa7\xec\x6b\xec\x2a\xdd\x8a\x9d\x27\xb7\
+\xe0\x60\xc5\x4e\x08\x16\xed\x7c\x66\x12\x89\x44\x22\x69\x29\xe7\
+\xbc\x62\xf3\xf9\x18\x07\x76\xbb\xb1\x7b\x5b\x0d\x0e\xed\x73\x43\
+\xd4\xeb\xa0\xbe\x7d\xe2\x31\x7b\xca\x34\x2c\x9c\xb9\x10\xc3\x7a\
+\x5f\xd4\x6c\x3f\x36\x35\x12\x36\x35\x12\x09\x91\xdd\xd0\x37\x7e\
+\x08\x26\x0f\x98\x05\x00\x70\xfb\x6a\xb0\xbb\xec\x2b\xec\x3c\xb9\
+\x05\xdb\x4e\x6c\xc4\x57\x47\x8b\xc0\x68\xcd\x46\x3f\x12\x89\x44\
+\x22\x39\x9b\x9c\xb3\x8a\xad\xba\x52\xc3\xa6\xe2\x4a\xec\xdf\x59\
+\x0b\x5f\xbd\x8b\x91\x08\x98\x31\x2d\x09\x8f\xcc\x7d\x04\xe3\x07\
+\x4f\x0c\xcb\x38\x11\x96\x28\x8c\xe8\x36\x01\x23\xba\x4d\xc0\x0c\
+\xdc\x89\x43\x15\xbb\xf1\xde\xb6\x57\x50\xbc\xff\x7d\x08\xd6\xc2\
+\x32\x86\x44\x22\x91\x48\xc2\xc7\x39\xa9\xd8\x76\x7c\x53\x83\x0d\
+\x6b\x4f\xc1\xeb\x39\x6d\x39\x75\xed\x1a\x85\x7f\xfc\xf8\x09\xcc\
+\x9a\x90\x7e\x46\xc7\xee\x1d\x37\x10\x77\x8d\x5f\x84\xd9\x17\x2d\
+\xc0\xfb\xdb\xfe\x89\xb5\x7b\x57\xc2\x27\x3c\x67\x74\x4c\x89\x44\
+\x22\x91\xb4\x9c\x73\x4a\xb1\x55\x57\x69\x28\x2a\x38\x85\x43\xfb\
+\xdc\x8d\x65\x44\xc0\xcc\x14\x07\x5e\x78\xf0\x45\xc4\x44\xc4\x9e\
+\x35\x59\xba\x45\xf7\xc1\xad\x63\x7e\x8e\x59\x23\xe6\xe3\xdd\x6d\
+\xaf\xa0\x60\x67\xae\x74\x51\x4a\x24\x12\x49\x07\xe0\x9c\x51\x6c\
+\x7b\x77\xd4\xa2\xe8\x93\xf2\x00\x2b\x2d\x36\xce\x8a\xec\x9f\xfe\
+\x09\xa9\x13\xaf\x6f\x37\xb9\x12\x22\xbb\xe1\xe6\x4b\x1e\xc2\xb0\
+\xae\x63\xf1\xf2\x86\x47\xe1\xd1\x6a\xc3\x3e\x06\x03\x10\xba\x88\
+\x4e\x45\x51\x40\x8a\x54\xa4\x12\x89\x44\xa2\xe7\x9c\x50\x6c\x07\
+\xf6\xb8\xb1\xe6\xc3\x32\xb0\xdf\x73\x3c\x32\x52\xc5\xdb\x8f\xbd\
+\x88\xc9\x23\x2e\x6f\x3f\xc1\xfc\x98\xd0\xe7\x2a\x74\x8b\xee\x8b\
+\xe7\x8a\x1e\x46\x59\xed\xb1\xb0\xf6\xfd\xf5\xc6\x2a\x6c\x2a\xaa\
+\x08\x28\x1b\x77\xc9\x40\x7c\xf0\x87\xf7\x50\x56\x73\x0c\x65\xb5\
+\xc7\x50\x56\x73\x14\x65\xb5\xc7\x50\x5a\x7b\xac\xbe\xac\xee\x73\
+\x79\xed\x09\x39\x17\x28\x91\x48\x2e\x28\x3a\xbc\x62\x3b\x7e\xd8\
+\x8b\xcf\x3f\x08\x54\x6a\x16\x0b\x61\xe9\x2f\xff\xd4\x61\x94\x5a\
+\x03\x89\x9d\x2e\xc2\x2f\xae\x78\x19\x8b\x8b\x7e\x8a\xdd\x65\x5f\
+\x85\xad\xdf\xa3\x87\x8d\x73\x78\x8e\x51\xe3\x11\xa1\x46\xa1\x67\
+\xec\x00\xf4\x8c\x1d\x10\xb4\xed\x47\x3b\xdf\xc0\x9b\x5b\x9e\x0c\
+\x9b\x2c\x92\x3a\x32\x96\x3b\x86\x93\x82\x9f\x04\x14\x32\xbc\xd9\
+\xe9\x45\x0f\x9c\xc9\x71\x9d\xf9\x8e\x3b\xc0\x98\x14\x50\x48\x58\
+\x97\x9d\x5a\xf4\xca\x99\x1c\x57\x22\x39\x97\xe8\xd0\x8a\xad\xbc\
+\xd4\x87\x82\x77\x4b\x03\x16\x56\x93\x02\x3c\xf1\xc0\xc3\x48\x9f\
+\x78\x63\x3b\x4a\x16\x9c\x4e\x91\xdd\xf0\xf0\xd4\x25\x78\x79\xe3\
+\xa3\x28\x39\xf0\x61\xe8\x1d\x72\x9d\x72\xd7\x73\xcd\xf8\x6b\x43\
+\xef\xfb\x1c\x22\xab\x20\xc5\x72\xb8\xb4\xf2\x22\x4d\x51\xfa\x12\
+\xa1\x17\x6b\x38\xc1\x50\x76\xf8\x3a\x47\xee\x7a\x69\xda\xea\xf0\
+\xfb\x7f\x9b\x41\x25\xa5\x8f\x80\x70\x06\x14\x12\xdc\x00\xce\xa8\
+\x62\x83\x40\x0a\x08\x77\xe8\xca\x22\x01\x48\xc5\x26\x91\xd4\xd3\
+\x61\x15\x5b\x75\x95\x86\xd5\xff\x2d\x85\xc7\x1d\xb8\x38\xfa\x27\
+\x3f\xb8\x0d\xce\xe9\xf7\xb7\x93\x54\x2d\xc3\xaa\x46\x60\xfe\x84\
+\x47\x71\xb2\xfa\x30\x76\x96\x6e\x0d\xa9\xaf\xb2\x52\xaf\xe1\x1a\
+\xd8\x22\x14\xa4\x8c\xbe\x2a\xa4\x7e\xcf\x15\x32\x96\x3b\x86\x43\
+\xc1\x8f\x09\xb8\x11\x8a\xd2\x8d\x00\x80\xeb\x5e\x70\x08\x02\xb6\
+\xf2\x6a\xce\x74\x25\x3f\xbf\x24\xad\x30\xa3\xbd\x65\x95\x48\x24\
+\x1d\x83\x0e\x9b\x2b\x72\xcd\x07\xe5\xa8\xae\x0c\x9c\x1b\x9a\x32\
+\xf1\x22\xfc\xf6\xe6\xc7\xdb\x49\xa2\xd6\xa1\x90\x8a\x7b\x92\x7e\
+\x87\x68\x6b\x5c\x48\xfd\x1c\x33\xb1\xd6\x06\xf5\xef\x0e\x55\xe9\
+\xb0\xef\x24\x61\xc3\x99\xef\xb8\x9f\x14\x6c\x22\x20\x13\x40\xb7\
+\x20\xd5\x88\x81\xf8\xb3\x29\x97\x44\x22\xe9\xd8\x74\x48\xc5\xb6\
+\x6f\x57\x2d\x8e\xe9\xe6\x95\x2c\x56\xc2\x33\xf7\xfe\xbd\x9d\x24\
+\x6a\x1b\x5d\xa3\x7b\xe3\x07\x63\x7f\x15\x52\x1f\xc7\x0e\x19\xe7\
+\xd7\x26\x8c\xbc\x24\xa4\x3e\xcf\x05\x32\xf3\x92\x33\xc0\x78\x06\
+\x40\x94\xc9\xe1\x32\x00\x6b\x01\x1c\x39\xbb\x52\x49\x24\x92\x73\
+\x81\x0e\xa7\xd8\x58\x00\x9b\x0a\x2b\x0d\xe5\xa9\x57\x4e\x6d\x51\
+\x6a\xac\x8e\xc6\xf8\x3e\x29\xb8\x7c\x60\xdb\x97\x23\xe8\x15\x3c\
+\x00\x5c\x35\xf6\xca\x50\x44\xea\xf0\xdc\xb7\xcc\x3e\x98\x89\xff\
+\x61\x72\x68\x13\x04\x5d\x56\xea\x49\xec\x96\x9d\x56\x34\x25\x3b\
+\xad\xa8\x97\x6a\xb1\x75\x11\x0a\xff\xe2\xac\x0b\x29\x91\x48\x3a\
+\x2c\x1d\xce\x9f\xb5\xfd\xeb\x6a\x54\x94\x07\x66\xda\x8f\x8a\xb6\
+\xe0\xa9\x7b\xce\x8c\xb5\xb6\xe1\xe0\x6a\xbc\xf4\xe1\x0b\x78\xe7\
+\xa3\x0d\x38\x71\xb2\x1a\x56\xab\x82\xa1\x03\x7b\x63\xf2\xe8\x24\
+\xdc\xfd\xbd\xf9\xb8\xb8\xff\xa5\x21\x8f\x31\xef\x92\x1f\x63\xc7\
+\xc9\xcd\x38\x70\x6a\x47\xab\xda\x55\x55\x08\x54\x55\x04\xce\xaf\
+\xa9\x2a\x61\xc6\xf8\xd4\x90\x65\xea\xc8\xf8\x14\xe5\x2e\x02\x5b\
+\x75\xc5\xa7\x34\x52\xe7\x3e\x3f\x67\xed\x76\xff\xc2\xe7\xae\xfb\
+\xac\x14\x40\xa9\x59\x3f\xce\x9c\x24\xab\xe8\x65\x19\xa9\x0a\xbe\
+\x18\xe0\xa3\x1e\xaf\xef\xcb\x17\xe7\x6e\x68\xd5\x5a\x8c\xdb\x57\
+\x8d\x89\x89\xae\x8d\x98\xc0\x4c\xfd\x40\xf0\x42\x51\x76\xf4\x89\
+\x8d\xfc\xb2\x75\x67\x74\x9a\xbb\xf2\xc6\x75\x8a\x50\x22\x26\x42\
+\x88\x9e\x04\x75\xbf\x4f\xe1\xaf\x97\xa6\x16\x9e\x71\xcb\xf3\xbe\
+\x65\xf6\xc1\x3e\x05\x49\x80\xa2\xa9\xd0\xf6\x59\x23\xca\x36\x3f\
+\x3d\x63\x9b\xbb\xb9\x76\xce\x65\x49\xbd\x85\xaa\x0e\x55\x80\xfe\
+\x0d\xe7\x8f\x1a\xef\x8e\xec\xb9\x25\xe5\xc1\xda\xdc\x93\x3b\xb9\
+\x8b\xc5\xa2\x8d\x60\x15\xfd\xc0\xb0\x02\xca\x0e\xa8\xde\x1d\xd9\
+\xb3\x4a\x8e\x87\xf7\xac\x24\x12\x73\x3a\x94\x62\xf3\x7a\x19\x5b\
+\x4a\x8c\xd6\xda\xdd\x69\x73\xd0\x25\xb6\x6b\x58\xc7\xda\x57\xfe\
+\x2d\x5e\xdb\xf4\x44\x5d\x58\x7e\x02\xe0\xb8\x2a\x1a\x25\x9f\xfb\
+\x70\x68\x9f\x1b\x5b\xbf\xde\x8f\xad\x5f\xef\xc7\x8b\xcb\x5d\xb8\
+\x6b\xce\x6c\xfc\xe5\xae\xbf\x37\xee\x02\xd0\x16\xac\x8a\x0d\xf7\
+\x4c\x78\x0c\x8f\xae\xbe\xb5\x55\xd9\x49\xcc\xac\xb5\x3e\xbd\x13\
+\x10\x17\x19\xda\xbc\x5d\x47\x26\x2b\x8b\x14\x1a\x6b\xbf\xc3\x70\
+\x80\xf1\xf8\xf3\x69\x81\x4a\x2d\x18\x99\x79\xf6\xdb\x98\xe8\x21\
+\xf4\x54\x47\x29\xcc\x36\x26\x00\x20\x58\x6d\x56\x38\x5d\x8e\x43\
+\x4c\x28\xf0\xb9\xbd\x3f\x6c\x4a\xc9\x65\x65\x91\x72\x70\x9c\xfd\
+\x0f\x51\x1c\x99\xd9\x38\x87\xc7\x00\x34\x81\x83\xe5\xd5\xdf\x11\
+\x71\x3e\x40\x2d\x3a\x27\xe7\xca\xa4\x68\x68\x96\x3f\x00\x7c\x8d\
+\x8d\x6c\xc3\x99\x99\x40\x04\x86\x80\xc2\xd0\x9c\x2e\xfb\x7f\x85\
+\x50\x1f\x59\x3a\x67\xdd\xd7\x2d\xea\xb0\x85\x64\xe4\xd9\xc7\x82\
+\xe8\x71\x02\xec\x50\xa9\x2e\xf0\xa6\x6e\x54\xb8\x3d\x5d\x4e\x38\
+\xf3\x1d\x2f\x44\x58\x4f\xfe\xc6\x4c\xc1\x65\xba\xec\xb3\x05\xe3\
+\x01\x52\xd5\xab\x95\x86\x13\xad\x3f\x7f\xd8\x54\x38\x5d\x8e\xe3\
+\x20\x5e\x96\x9d\x5a\xdc\x18\x19\x9a\xb9\xdc\x31\x89\x15\xfc\x58\
+\xb5\x21\x9d\x01\xeb\xe9\xaf\xba\x00\x34\x15\x4e\x97\xe3\x14\x80\
+\xf5\xd9\x69\x45\x57\x87\xf3\x3c\x25\x12\x3d\x1d\xca\x15\xf9\xd5\
+\xc6\x2a\xd4\xd6\x04\x5a\x28\x5d\xba\x44\xe1\xd1\x5b\x7e\x1f\xd6\
+\x71\xf6\x95\x7f\x8b\x27\xd7\x2c\x0c\x58\x6b\x16\x97\xa0\x62\xda\
+\x8c\xce\x18\x3a\x32\xba\xb1\xcc\xe7\x63\x2c\xcd\xcd\xc7\xb8\xfb\
+\x26\xa2\xb2\xb6\xc2\xac\xab\x16\xd3\x27\x7e\x08\x2e\xed\x75\x59\
+\xab\xda\x98\xcd\xaf\x5d\x3a\x6c\x44\x48\x72\x74\x74\x0e\x8e\x71\
+\x5c\x0d\xa0\xbf\xbe\x5c\x51\xc4\x07\xcd\xb5\x7d\xf0\xdd\xe4\xf8\
+\x4c\x97\xe3\x35\x26\xfa\x27\x80\xb1\x00\x6c\x26\xd5\x7a\x13\xe3\
+\xfb\x56\x9b\x65\xd3\xbd\x79\x93\xa6\x99\xf5\x93\x95\x45\xca\x81\
+\xb1\xf6\x97\xc0\xf8\x19\xcc\x03\x53\x86\x33\xe8\xe1\xe6\xe4\x01\
+\x80\x05\x2b\x1c\x83\x20\xd4\xb5\x00\x3f\x08\x60\x04\x8c\xda\x50\
+\x05\x28\x55\x51\x44\x61\x66\xbe\x3d\x6c\x0b\x33\x33\xf2\xed\xb7\
+\x12\xd1\x5a\x02\x66\xc2\x3c\xf0\xa6\x2b\x18\x3f\x73\x7b\xba\x7c\
+\xbc\x30\x37\x25\x20\x17\x5d\x86\x2b\xf9\x61\x06\xe5\x13\xd1\xf7\
+\x4c\xe4\x6d\xa0\x1b\x40\x23\x4e\xb7\x71\xcc\x61\x05\x9f\x02\x98\
+\x0b\x40\x6f\x6d\x37\x10\x0f\x60\x74\xeb\xcf\x46\x22\x69\x1d\x1d\
+\x46\xb1\x55\x57\x69\xf8\xf6\xcb\x2a\x43\xf9\x4f\x6f\xcb\x84\xcd\
+\x62\xf6\x7c\x6a\x1b\x47\x2a\xf7\xe0\xa9\xb5\x0f\xa0\xda\x6b\x54\
+\x54\xa4\x00\xf6\x2b\xe2\x91\x38\x34\x32\xa0\x7c\xe7\xee\xe3\x48\
+\x7d\x34\x2d\xe4\xb1\xa7\x0f\xbd\xad\x55\xf5\xcd\x2c\xb6\x94\xb1\
+\x1d\x6b\x51\x7a\xd8\x51\xd8\x6c\x1d\x43\x69\xaf\x8d\x25\x9b\x9b\
+\x6a\x96\x95\x45\x8a\xdb\xc3\x05\x0c\xdc\xaa\x3b\x54\x06\xd0\x1b\
+\x00\x76\x07\x16\x53\x1f\x41\xe2\xa3\xcc\x3c\xbb\x61\xbc\x43\x63\
+\x1d\x4b\x08\xb8\x5d\x57\xec\x23\xe0\x7d\x02\x3e\x03\x5a\x66\x76\
+\x3b\x57\x26\x5d\xa4\x08\x94\x80\x31\xc6\xaf\xd8\xcb\xc0\x3b\x0c\
+\x5a\xa3\xab\x1e\xcf\x4c\xaf\xcd\xcf\x9f\x1a\xb2\x39\xee\xcc\x77\
+\xfc\x94\x98\x5e\x43\x60\xe0\xcd\x51\x26\xfc\x1b\xc0\x3e\x5d\xf5\
+\xc9\x9a\xad\xe6\x8f\x0d\x1f\x32\xf2\x27\xa5\x12\xf8\xcf\x26\xdd\
+\xee\x66\xc2\xbf\x09\xf4\x32\x08\x9b\x01\x34\x86\xeb\x66\xac\xb0\
+\x5f\x4c\xc0\x1b\x30\x7a\x80\x8e\x00\xc8\x03\x71\x0e\x80\x22\x00\
+\x35\x21\x9c\x96\x44\xd2\x62\x3a\x8c\x62\xdb\xfe\x55\x4d\xe3\xf6\
+\x33\x0d\x24\x74\x8a\xc0\xfd\x33\x7e\x14\xd6\x71\x5e\xdf\xfc\x27\
+\x54\x79\x82\x4e\x0f\x00\x00\xec\x97\x27\x20\x26\x4e\x0d\x28\x5b\
+\xbf\x71\x07\x1e\x5c\x7a\x5f\x48\x63\x0f\xed\x3a\x06\x83\x3a\x5f\
+\xdc\xa2\xba\x1e\xb7\x40\x59\xa9\x6e\x57\x6f\x02\x52\x27\xce\x09\
+\x49\x86\x8e\x0e\x33\x7a\x99\x14\x7f\xb7\x68\x51\xd3\xbb\xbd\x1e\
+\x18\x37\x71\x3e\x80\x71\xba\xe2\x55\xa5\x9e\xaa\x9e\xd9\x69\x85\
+\x37\xe7\xa4\x15\x0f\x26\xe6\x3f\xe8\x8e\x2b\x4c\xf4\x84\x7f\x41\
+\xe6\xca\xe4\x61\x0c\x5e\xa0\xab\x27\x58\xe1\xc9\x4b\xd2\x8a\xae\
+\x5d\x92\x56\x74\x39\x31\x7f\xaf\x25\xe7\x42\x42\xcd\x02\xd0\xc5\
+\xbf\x1f\x85\x44\x4a\x4e\x5a\xd1\x75\x39\x69\x85\x53\x41\xf8\xad\
+\xae\x49\x7f\x8b\xf0\xb4\xee\xed\x47\xc7\xdd\xb9\xe3\xbb\x83\xb1\
+\x48\x57\xfc\x95\x27\x21\x3a\x31\x27\xb5\xe8\x96\x3e\x09\xd1\x83\
+\x01\xde\xe2\x7f\x90\xc1\x99\xf7\x2f\x77\x74\x05\x00\x85\x79\x96\
+\x49\xb7\xcf\x67\xa7\x15\x0d\xca\x49\x2d\xba\x65\x49\x5a\xe1\x5d\
+\xd9\xa9\x45\x63\x23\x6c\x27\xe3\x54\x1f\xdf\x5d\xd7\x86\xae\x81\
+\xce\x4a\x63\xd0\x9a\x3e\x09\xd1\xfd\xb2\xd3\x8a\xe6\x64\xa7\x16\
+\x3b\xb3\xd3\x8a\x92\x4b\x3d\x89\x71\xa4\x52\xeb\xdc\x16\x12\x49\
+\x1b\xe8\x30\x8a\x6d\xdf\x2e\x63\xf2\x88\xc9\x63\xc3\x1b\xd6\xbe\
+\xf1\xd0\x6a\x7c\x73\xbc\xa4\xd9\x7a\x56\x1b\xc1\x71\x45\x82\xa1\
+\xfc\x55\xd7\x3b\xf8\xf6\x60\x68\xd3\x20\x2d\xb5\xda\x8e\x1f\xf6\
+\x1a\xec\x82\x6e\xdd\xa2\xd1\xbb\x73\xdf\x90\xc6\xef\xf0\x30\xf7\
+\x36\x29\x6d\xf2\x4d\x64\x7e\xfe\xd4\x38\x62\x7a\x4c\xdf\x93\xaa\
+\xf1\xbd\x6f\xce\xdd\xea\x01\x00\x06\xb3\x2d\xa2\x34\x0b\x06\xcb\
+\x0d\x49\x19\x79\xc9\x37\x34\x36\xd2\xf8\x4e\x93\x21\xfe\x95\x33\
+\xbb\x78\x7d\xc3\x87\x25\xe9\xc5\x1f\x11\x61\x65\x53\x32\xdd\xbb\
+\x7c\xe2\x68\x66\xcc\xd5\x15\xaf\x5a\x9c\xba\xbe\xd1\x52\xab\x89\
+\xac\xfd\x8b\xa1\x21\x21\xa4\x94\x32\x56\x9b\xf5\xa7\x00\x62\xfc\
+\xcb\x98\xe8\xb1\x86\xec\x2c\x8b\xa6\xad\xf6\x11\x93\x3e\x12\x4b\
+\xf1\x11\xa6\x03\x00\x83\xa7\x1a\x44\x62\xfe\x44\x5f\xf6\xf4\x8c\
+\x6d\xee\xe7\xae\x2f\xde\x59\x37\x00\x8c\x6d\xc0\x9f\x2c\x9a\xb6\
+\x3a\xe0\xcd\xec\xcd\xb9\x6f\x6a\x4b\x66\x15\x6e\x6b\xe5\x29\x49\
+\x24\xad\xa6\x43\x28\xb6\x8a\x72\x0d\xe5\x27\x7d\x86\xf2\x9b\xae\
+\xd0\x3f\x17\xda\x0e\x83\xf1\xd6\xff\x9e\x69\x71\xfd\x5e\xfd\x6c\
+\xe8\xd6\x33\x70\xaa\x40\xd3\x18\x8f\xbc\xf4\x48\x48\x72\x8c\xed\
+\x3d\x0d\xdd\x62\x9a\x57\x4e\x47\x4d\xe6\xd7\x2e\x1e\x32\x38\xa4\
+\xb1\xcf\x05\x88\x8c\x16\x1b\x03\xa7\x9a\x6a\x63\x15\x9e\x34\x00\
+\x3d\x75\xc5\x47\x1a\x1f\xbc\xf5\xd4\x07\x49\xac\xd5\xb7\x57\x28\
+\xc0\x42\x33\x09\x5c\x61\x83\x1b\x54\x30\xfe\xd7\x94\x4c\x42\xa1\
+\x9f\x40\x3f\x3f\x45\x14\xd0\xe6\xd5\xe9\x9b\xab\x00\xe8\x22\x05\
+\x29\xc5\x99\x93\x14\x6c\x8e\xaa\x49\x7e\x92\x3b\x39\x0a\xc0\x42\
+\x7d\xb9\xa2\x71\xc0\xdb\x18\x83\xf4\xee\x48\x30\x70\x4d\x43\x75\
+\xc3\x31\xa2\x3b\x9b\x1a\x57\xb0\xe9\x73\xe4\x96\xac\x82\x94\x0e\
+\x15\x9c\x26\xb9\x70\xe8\x10\x8a\x6d\xbf\x89\xb5\x16\x15\x6d\x41\
+\xba\x3d\x7c\xf9\x20\x77\x95\xfe\x0f\xc7\xab\x0e\xb4\xaa\xcd\xa8\
+\x71\xc6\xfd\xdd\x56\x17\x6e\xc6\x8e\x23\x6d\x7f\xe9\x54\x48\xc1\
+\xd5\x43\xbe\xdf\x6c\x3d\xb3\xf9\xb5\x29\xa3\x93\xdb\x3c\xee\xb9\
+\x03\x75\xd2\x97\x28\x40\x93\x61\xe9\xac\x28\xc3\x0d\x65\xa0\xbd\
+\xa6\x75\x99\x76\x1a\xeb\x62\x28\x50\x17\xa6\x0e\xc0\xf0\xd6\xc1\
+\xc6\x79\x29\x10\xd3\xe1\xa6\x64\x22\x90\x71\x9d\x08\xf3\x37\x26\
+\x55\xf7\xeb\x3e\xc7\x89\xde\x96\x09\x4d\xf5\x1d\x8c\x1a\x8b\x77\
+\x08\x80\x68\x5d\x31\xb3\x55\x0b\xf8\xc2\x2a\xac\x1d\x34\x34\x26\
+\x4c\xab\xff\xcf\xcc\x25\x71\x55\xa6\xcb\xb1\xec\x9e\x65\x53\x12\
+\xcd\xc6\x25\x22\xb3\x36\x03\x0f\x96\x57\x7f\x92\x91\x67\x1f\xdb\
+\xac\xe0\x12\x49\x98\xe9\x10\x6f\x54\x66\x6e\xc8\x09\xa3\x87\x87\
+\x35\x6d\xd4\xa6\x43\x05\xad\x6e\xd3\x6f\x60\x04\x62\xe2\x54\x54\
+\x55\x9c\x4e\xed\xa5\xf9\x18\xbf\x7f\xe3\x77\x78\xe1\xc1\xb6\xe7\
+\x9c\x9d\xd4\xff\x3a\xe4\x6e\xfd\x1b\x34\x61\xb4\x52\x01\x40\xd3\
+\x80\x93\xc7\x8c\xa9\xb4\x52\xed\xa1\x07\xb0\x9c\x03\x18\xac\x33\
+\xc1\x68\x72\x07\x59\x06\x0f\xd5\x87\xee\x11\x84\x41\x19\x01\x00\
+\x14\xec\x32\x09\xfd\x18\x30\x2f\x77\x9e\xda\xc5\x26\x7a\x99\x45\
+\x85\x28\x6c\x62\xe1\x28\x38\x4c\x4d\x84\x90\x30\x30\x44\x5f\x46\
+\xcc\xa3\x33\xf3\x1d\x99\xba\x62\x43\x64\x14\x31\xf5\x08\xde\x73\
+\x13\x63\x5a\xd4\x21\x10\x06\xa1\xaa\x48\xa8\xb7\x67\xe6\x3b\x4e\
+\xd7\x23\xc5\x2c\xd2\xb3\x1b\x00\x08\x05\xcf\x28\x02\x86\x6d\xe8\
+\x19\x98\xa3\xaa\xbe\x6b\x33\xf3\x1d\xff\x97\x9d\x5a\xfc\x14\xfb\
+\xef\xb7\xc1\xbe\xe7\x41\xea\x8f\x00\x44\xea\x9a\x4d\x26\xa2\x92\
+\x8c\x3c\xc7\xdf\xbd\x9d\xa2\x7f\xd5\x1e\xc9\xaa\x25\x17\x26\xed\
+\x6e\xb1\xd5\x56\x0b\x1c\x3f\x62\x7c\x88\xdf\x78\x79\x78\x1f\xe2\
+\x9b\x0e\x19\xa6\x09\x5a\x44\x9f\x01\x11\x86\xb2\xcf\x37\x6f\x08\
+\x49\x96\x48\x4b\x34\x06\x77\x1e\x8d\x63\x87\x3d\x38\xb8\xd7\x1d\
+\xf0\xd7\xd5\x9a\x88\x68\xad\x2f\xa2\x63\x6c\xb0\x5a\x4f\x3f\xae\
+\xe3\xe2\xad\x61\x59\x2c\xde\xd1\x21\xe0\xa4\xa1\x8c\x9a\xce\x05\
+\x49\xa2\xce\xe2\x0a\x44\x31\x35\xcf\x99\x78\xb7\x49\xb1\xb5\xab\
+\x75\x5f\x7f\x4d\x61\xb3\xc0\x15\x68\x26\x8a\x4d\x15\xc1\x2d\xb6\
+\x7a\xcb\xcf\x60\x79\x32\xd1\x0f\x99\xb1\xd8\xff\x0f\xc0\x28\x43\
+\x07\x82\x8d\x13\xbc\x2d\x81\xd9\xa0\x4c\x01\xc4\x1a\xc6\x24\xfc\
+\xd1\xa4\x5e\x74\x56\x16\x29\x4b\x67\x17\x7d\x0c\xe6\xdf\x00\x30\
+\x0b\xd6\x89\x62\xc6\x5f\x33\xf2\xed\xab\xfd\xad\xb7\xec\xf4\x92\
+\x1d\xcc\x94\x01\xa0\xda\xa4\x8d\x4a\x84\x9f\xd8\xca\xab\xbf\x70\
+\xae\x9c\x34\xbe\x4d\xe7\x25\x91\xb4\x92\x76\x57\x6c\xfb\x77\x1b\
+\x5f\xe2\xac\x36\x05\xdf\xbf\x4c\x1f\x6d\xdd\x76\x0e\x55\xec\xc2\
+\x91\x4a\x53\xcf\x54\xb3\x98\x29\xb6\x43\x87\x4e\x61\xef\xf1\xdd\
+\x21\xc9\x34\xb2\xbb\x1d\x45\x05\xe5\x28\x78\xa7\x34\xe0\x6f\xb0\
+\xed\x4a\x3c\x3d\x77\x19\x0e\xbe\xb1\x0d\x27\xf3\x77\xe3\x88\xeb\
+\x6b\x6c\x78\x69\x15\xde\xff\xf3\xdb\x21\x8d\x77\xae\x20\xd8\x44\
+\xb1\x35\x97\xe4\x98\x60\x78\x33\x22\xf3\x1c\x93\x20\x4d\x18\x6f\
+\x28\x00\x85\x34\x4d\xd1\xc8\xd4\x45\x10\x41\x6c\x08\x53\x67\x68\
+\xaa\x59\x5d\x00\xb0\x46\x99\x8f\xdd\x52\x9a\x53\xe4\xc1\x60\x36\
+\x58\x4c\xad\x1a\x76\xef\xb8\x29\x31\x00\x90\x9d\x5e\xfc\x98\x42\
+\xe2\x72\x10\x0c\x6e\xdb\xba\x81\x70\x85\xaa\xfa\xbe\xcc\x5c\xee\
+\x68\xdc\x17\x2e\x27\xbd\xf0\x9f\x2c\x30\x0e\x8c\xf5\xa6\x6d\x80\
+\x51\xd0\x44\x61\x66\x9e\xa3\x79\x3f\xbc\x44\x12\x22\xed\xee\x8a\
+\xdc\xb7\xcb\x38\x7d\x32\x7a\xc4\x00\x44\xdb\xf4\x53\x05\x6d\x67\
+\xfb\xc9\x26\x97\x40\x35\x49\xcf\xbe\x36\x28\x2a\x41\x68\x7e\x9e\
+\x17\x06\x5e\xfb\xe4\x15\xfc\xf2\x06\x7d\x54\x75\xcb\x19\xd5\xa3\
+\x65\xf3\x65\xd1\xb6\x68\x0c\xeb\xd5\xf6\x45\xd9\xc9\xfd\xae\xc5\
+\xa0\x4e\xa3\x50\xe5\x3d\x85\x2a\xcf\x29\x54\x79\x4f\xa1\xda\x53\
+\x8e\x2a\xcf\x29\x54\x7a\xcb\x51\xed\x39\x5d\x7e\xaa\xf6\x04\xdc\
+\x5a\xfb\x2e\x35\x22\xe0\x84\xbe\x8c\x81\x11\xf3\x72\xe7\xa9\x6f\
+\xce\x7d\x33\xc8\x56\xe0\xb4\xcf\x10\x42\x4a\xa6\xd1\x95\x50\x48\
+\xed\x65\x92\xfd\xc5\xd3\x63\xd3\xfa\x03\x87\xc7\x25\x75\x13\x6c\
+\x7c\xd7\xf3\x5a\x95\x44\xe8\xe4\x62\x85\xba\x04\x5b\xcd\xd6\xeb\
+\x8b\x75\x87\x0e\x8e\xb5\x7b\x60\x70\x33\xd2\x13\x5c\xb7\x06\xac\
+\x49\x48\xf1\x6d\x6a\xae\x8e\x69\x3b\xc6\x2e\x36\x2e\xa7\x3e\xc5\
+\x44\x4e\x93\xea\x06\x62\xac\x47\x1a\x27\x76\x17\xa7\xae\x5f\xb3\
+\x30\x37\x65\x8c\xcf\x56\xfd\x17\x00\x19\x30\x2e\xd4\x8e\x67\x05\
+\xcf\x65\x65\xd1\x84\x86\xa5\x18\x39\x73\x8a\xbe\xcb\x2a\x48\x99\
+\x7c\xa0\xbc\xe6\x97\x04\xfe\x15\x8c\x6e\x56\x2b\x13\x9e\xb9\x7f\
+\xb9\x63\xd5\x3f\xe6\x14\x19\xee\xb3\x44\x12\x2e\xda\x55\xb1\x79\
+\x3d\x8c\x23\x07\x8c\x8a\x6d\xf6\xe4\x6b\x4c\x6a\xb7\x9d\xc3\x15\
+\x7b\xda\xdc\xd6\x62\x21\xf4\xe8\x6d\xc5\xe1\xfd\x81\xc1\x1c\x1f\
+\xac\x2f\x08\x49\xb1\x25\x76\x1a\x89\x2e\x09\x9d\x70\xaa\xec\xcc\
+\xfe\xbe\x63\x6c\x09\x18\xdc\xa5\x65\xcb\x26\x3a\xc2\x6e\xdb\x0c\
+\xfe\x8c\x40\x77\xeb\x8a\x63\x13\x22\xf6\x5e\x0c\xc0\x34\x47\x23\
+\x41\xec\x63\xdd\x73\x37\xc8\x7a\x38\x08\x42\x2f\x93\xb9\xb1\xdd\
+\x8b\x16\xb1\x58\xb0\x2c\xf9\x98\xa2\x1a\x0f\xb2\x8f\x07\x01\x08\
+\xf4\x3f\x73\xc0\xfa\xb4\x00\x16\x2d\x62\xe1\x74\x39\xf6\x41\x37\
+\xcf\x46\xe0\xaf\xb3\x53\x8b\xfe\x13\xac\x5d\xa8\x30\x29\x3b\x4d\
+\x3c\x88\xb1\x74\xd8\xf7\x76\x76\x46\x89\xd1\xdf\xdf\x0c\xcf\xce\
+\x5d\x5d\x09\x20\x33\x63\xb9\xfd\xdf\xa4\xd2\x8b\x60\xe8\xc3\x72\
+\xc7\xee\x1f\xe7\x18\x0d\xbf\xfb\x52\x1f\xe2\xff\xa8\x73\x65\xd2\
+\x9b\xd0\xd4\x17\x00\x4c\xd6\xb5\xe9\xea\x23\x9e\x01\xe0\xb5\xd6\
+\xca\x23\x91\xb4\x94\x76\x75\x45\x96\x9e\xf0\x42\x98\x78\xf2\xaf\
+\xba\xb4\x45\xeb\x5f\x5b\xcc\xe1\xca\xdd\x21\xb5\xef\xd2\xdd\x18\
+\x7d\xbd\x73\xdf\xa1\x90\xfa\x54\x48\xc1\xf4\x64\xc3\xf2\x9f\x0b\
+\x1e\x2f\xbc\x79\x00\x0c\x21\xa1\x2a\x58\xff\x80\x6c\x44\x00\xbb\
+\x4c\x8a\x4d\x2d\x36\x32\x53\x78\x44\x3b\x00\xa0\x5c\xab\x3c\x0a\
+\xb3\x08\x4c\xc2\x20\x63\x4f\xdc\x39\x98\x3c\xf5\xec\x36\xb4\x00\
+\x0c\xd1\x9b\xe1\xc4\xeb\x71\x9b\xb9\x0e\x15\xee\x6d\x8c\x1a\x6d\
+\x0d\x39\x73\x8a\x3f\x11\x04\xfd\xa2\x75\x00\x80\xca\x62\xa4\x59\
+\x79\xf6\xac\x92\x6f\x14\x55\x9d\x07\x18\xdd\xc4\x20\x0c\x6b\xf8\
+\xd7\xe9\x9a\x7c\x89\xd3\xe5\xf8\x5d\xc6\x72\xc7\xac\x79\xb9\xf3\
+\x82\xba\x77\x25\x92\xd6\xd0\xae\x8a\xed\x54\x99\x31\x2a\x50\x55\
+\x09\x63\x06\xea\x13\x48\x84\xc6\xe1\x8a\xdd\x21\xb5\x8f\x4b\x30\
+\x1a\xb6\x65\x65\xb5\xf0\x6a\xad\x7e\x09\x0e\x60\xda\xa5\x32\x09\
+\x83\x9e\x97\xd2\x37\x96\x31\xf0\xa1\xbe\x9c\x19\xbf\xba\xef\xbf\
+\x97\x99\x2a\x13\x9f\xc7\x97\x0b\x63\xba\xa6\x5e\x0b\x5d\x76\x43\
+\xce\x49\x80\x0d\xa9\x5f\x88\xf9\x3f\x00\xf0\xe6\xdc\xad\x1e\x66\
+\xbc\x67\x38\x0e\x61\x0c\xf0\x20\x25\xd8\xc6\xa7\x75\xa3\x80\x0c\
+\xfd\x00\x7c\x57\x5b\xd7\xa8\xb5\x84\x17\xe7\x6e\x38\x46\xc0\x17\
+\xfa\x72\x12\x34\x3f\xd4\xbe\x97\xce\x2e\xfa\x18\x40\xab\xd6\xcb\
+\x2c\x9e\xb5\xf6\x00\x80\x4f\xf5\xe5\xcc\xc4\x04\x22\xa7\xcb\xee\
+\x02\xb4\x2f\x01\xfc\x8a\x14\xac\xe8\x6c\xdb\xb3\x7b\xc1\x0a\x87\
+\xc9\x4b\x84\x44\xd2\x3a\xda\x57\xb1\x95\x1a\xa7\x4c\xba\x74\x89\
+\x0e\x6b\x98\xbf\x57\x73\xe3\x44\x4d\x93\x4b\x8e\x9a\x25\x2e\xc1\
+\xf8\x22\x29\x04\x63\xcb\x9e\x36\x4d\x85\x34\xe2\x18\x16\xd4\x08\
+\xb9\xb0\x61\x32\x73\xd7\xf5\xd3\x7c\x9e\xec\x07\xdf\x1d\x66\x08\
+\xfe\x78\x71\xee\x86\x63\x20\xbc\xac\x2b\x56\x35\x28\x8f\xfa\x17\
+\x2c\x58\xe1\xb8\x12\x80\x3e\x37\xe4\xb7\x27\x3d\x89\xff\x6a\xf8\
+\xa0\xd4\xe5\x3c\xd4\x41\xb7\xdd\x97\x3f\xb1\x71\xa2\x73\x7e\xfe\
+\xd4\x38\x30\xeb\x73\x52\x06\x10\xeb\x51\x9e\x05\x58\xb7\x5e\x8c\
+\xfa\xa0\xa7\xfa\x4c\x53\x0b\x97\xe7\xe5\x8e\x0e\x29\x31\x2a\x33\
+\xfd\xd2\xa4\x38\xc3\x99\xef\xb8\x2e\x58\x1b\x02\x91\x33\x27\xc9\
+\xda\x94\xd2\x9d\x9f\x3f\xb5\x0f\x60\xb4\x76\x89\xd5\xa2\xac\x2c\
+\xf3\xad\x2f\xea\x16\x8c\xb3\xc1\xa2\x63\x88\xa2\x05\x2e\xfb\x74\
+\x80\xf4\xfb\x2f\xf5\x53\x34\x43\x3a\x30\x89\xa4\xd5\xb4\xeb\x1c\
+\x5b\xb9\x3e\x17\x22\x80\xbe\xbd\xba\x87\x75\x8c\x23\x95\x7b\xc1\
+\x4d\xa7\x19\x6c\x96\x78\x13\x8b\x0d\x00\x36\xee\xda\x80\xf1\x83\
+\x27\xb6\xb9\xdf\x1e\x71\x7d\xd1\xbb\x4b\x0f\x1c\x3a\x79\xb4\xcd\
+\x7d\x9c\x8f\xf4\xdd\x5c\xf4\xaf\x83\x75\x5b\xd7\xe8\x95\xd0\x5c\
+\xb7\xa7\xcb\x0c\x67\x5e\xf2\x2a\x26\xac\x53\x58\xf4\x13\x44\xc3\
+\x14\xf0\x57\x60\xf1\x57\x90\x7a\x0f\xfc\x72\x16\x32\xf8\x0e\xa7\
+\xcb\xd1\x9f\x18\xff\x06\xd1\x78\x05\x30\x44\xe4\x11\x23\xcb\x3f\
+\x28\x45\xf5\x46\xaf\xf0\xd9\xaa\x8f\x23\x30\x23\xbe\x55\x63\xe5\
+\x03\xa7\xcb\xb1\x84\x89\xaa\x2c\x82\x6f\x85\x49\x86\x14\xf8\x45\
+\xb0\x3c\x39\x77\x6d\x4d\x66\xbe\xe3\xb1\xfa\x90\x7e\x7f\x9c\x87\
+\xca\xab\x93\x9c\x2e\xc7\x7b\xcc\xfc\x25\x11\x75\x66\xe0\x62\xaa\
+\x0b\xfb\x1f\xd5\xd9\x16\xfd\x09\x4c\xe4\x6c\x29\xd9\xe9\x85\xab\
+\x9c\xf9\x8e\x4f\xc0\xb8\xc2\xaf\x38\x06\x8c\x7c\xa7\x2b\x39\x17\
+\x2c\xd6\x33\x94\xdd\x04\x1e\x02\x60\x14\x08\x17\x67\xc0\x3e\x12\
+\x3d\x70\x1b\x2b\x14\xe9\x74\x39\x9e\x23\xc6\x46\x56\x68\x23\x43\
+\x6c\x84\x80\x97\x14\x9a\x60\x01\x6e\x04\xa0\x7f\xc3\xdb\xad\x41\
+\xeb\x74\x70\xac\x7d\xab\xd3\xe5\xd8\x4c\xa0\x4d\x0c\xde\x48\x0a\
+\x1d\x63\xe6\xb1\x64\xc3\x6c\x80\xfa\xe8\xda\xf8\x84\xd7\x5a\x64\
+\xb1\x6a\xb7\x9a\x04\xba\x00\x84\x96\x25\x53\x95\x48\x9a\xa0\x5d\
+\x15\x9b\x99\x2b\x72\x48\x9f\x01\x61\x1d\xe3\x78\xb5\x31\xc9\x42\
+\x6b\x89\x8c\x56\x60\xb5\x12\xbc\xde\xc0\xc0\x82\xaf\xf6\x7c\x15\
+\xa4\x45\xcb\x19\x3d\x7c\x08\x0e\x15\x4a\xc5\xe6\xcf\xa2\x45\x2c\
+\x16\xe4\x27\xdf\xaa\x08\x5e\x01\x82\xfe\xcd\x21\x16\xc4\xd7\x13\
+\x70\x3d\x13\x81\x00\x30\x94\x8a\xec\xf4\xe2\x1d\xce\xe5\xc9\x57\
+\x42\xe1\xb7\x70\x3a\xbd\x16\x01\xb8\x8a\x09\x57\x99\x24\xe4\xf7\
+\x12\xe1\x91\x25\x69\x45\xff\xf6\x2f\x7c\x76\xee\xea\xca\x8c\x3c\
+\xfb\xf7\x88\xe8\x63\x00\xfe\xae\xcf\xfe\x00\x1e\x27\xe6\xc6\xf8\
+\x40\x06\x2d\x22\xf0\xe5\x38\xad\x80\x03\x1e\xd5\xbd\xe3\xa3\x9f\
+\x3f\x78\xaa\x7a\x10\x18\x0f\xc1\x4f\x29\x30\x30\x01\xc0\x04\x22\
+\x32\x36\x0a\x03\x8a\x50\xee\x64\x12\xaf\x32\xe0\xef\xeb\x56\x00\
+\xbe\x09\x44\x37\x91\x49\x38\x27\xa9\xc4\xf5\x4b\xae\x3b\x33\xe1\
+\x4a\x30\x5f\x49\x20\xd4\x5f\x60\x33\x2a\x14\x16\x37\x69\x75\xd2\
+\xc7\x00\x98\xcc\xf5\xf3\xa0\x5c\xbf\x48\xdc\xa4\x99\x20\xc6\xed\
+\xcf\xcf\x5d\x7b\xd2\x99\xef\xd8\x19\xa4\xdf\xef\x5a\x7a\x9e\x12\
+\x49\x30\xda\xcd\x15\xe9\xf3\x71\x40\x46\x8f\x06\x2e\x1e\x68\x3a\
+\x17\xdd\x66\x6a\x7d\x66\x6b\x46\x5b\x8f\xd9\x3c\xdb\xf6\x83\x66\
+\x31\x0b\xad\xe3\xe2\x61\xe7\x7f\xfe\xc7\xb6\xb0\x34\xb5\xf0\x08\
+\x8e\x6a\x53\xea\x33\xf2\x1b\xd6\xb6\x99\x91\x3d\xa7\xf0\x73\x45\
+\x55\x27\x00\x58\xd7\x4c\xd5\xbd\x42\xa1\xcb\x97\xa4\x16\x99\x86\
+\x80\xe6\xa4\x17\x6f\xa2\xba\xa4\xc0\xc1\x76\x7c\xf6\x31\xd1\x8f\
+\x72\xd2\x0a\x1f\x65\xa2\x15\xc1\x06\x59\x34\x6d\xb5\x2f\x3b\xb5\
+\xe8\xe7\x42\xa1\xa9\x00\xbe\x6d\xc1\x29\x30\x41\x09\x6d\xe3\x3f\
+\x00\x8b\xd3\xd7\xed\xee\xbd\xa9\x78\x1a\x98\x7e\x8c\x96\x6d\x15\
+\xe3\x11\x82\x5b\x9c\x15\x84\x80\x2f\x04\x70\xdd\xe2\xf4\xf5\xc5\
+\x2d\x16\x8a\xb1\x8d\xc0\xb7\x2c\x49\xaf\x7b\x91\x28\x75\x27\xbe\
+\x07\x82\x3e\x6b\x42\x29\x54\x4d\x9f\xcc\x5a\x22\x69\x35\xed\x66\
+\xb1\x55\x98\x58\x6b\x00\x30\x6e\x70\x78\x93\x13\x78\xc2\xb4\x2e\
+\x2b\x2a\x46\x31\x3c\xe6\x8e\x97\xb6\xe8\x79\xdb\x24\xc3\xfa\x0f\
+\x0c\xb9\x8f\xf3\x95\xfa\x10\xf5\x5f\x3a\x73\x92\x16\x71\x77\xf5\
+\x1a\x52\x70\x29\x18\xbd\x41\xd4\x1d\xcc\xc7\x00\xde\x4d\xa4\xec\
+\x11\x82\x1b\xc3\xcd\xeb\x03\x16\x26\x2f\x7c\xc7\xde\x4b\xf3\x61\
+\x2c\x33\xc6\x02\x34\x8a\x81\x83\x04\x7c\xc9\x0a\x6f\xee\x1b\x17\
+\xf3\xad\x3e\xf3\xbc\x9e\x25\xa9\x45\x25\x77\x15\xa4\xf4\x8f\x28\
+\xaf\x4a\x03\x90\xc4\x75\x2e\xb5\x5d\x60\xfa\xb4\x26\xba\x66\x4d\
+\x7d\x02\x63\x58\x2d\xe2\x0d\x9f\x47\xa9\x33\xba\x14\x36\xed\x73\
+\xe9\xec\xc2\xc2\xac\x82\x94\xd1\x07\x2b\x2b\x86\xb2\xa6\x8e\xac\
+\x77\x3b\x8e\x00\xa1\x12\x82\x77\x90\xaa\x6c\x27\x9f\xb6\x43\x58\
+\x79\xe7\x92\x59\x25\xcd\xbc\x89\xd1\xeb\x60\xe8\x27\x77\x0d\xae\
+\x83\xfa\xb5\x65\x7f\x9b\x9f\x3f\xf5\x05\x9b\x70\x8f\x14\x8a\x32\
+\x12\xc0\x28\x06\xfa\x13\x63\x3f\x31\x6d\x07\xc4\x0e\x82\xba\xa3\
+\xd7\xe6\xc2\xbd\x8b\x16\xb1\xc8\x2a\x48\xb1\xec\xaf\xa8\x2e\xb2\
+\x68\x4a\xa2\x50\x44\x22\x33\x25\x82\x78\x00\x80\x68\x02\x1f\x21\
+\xa6\xc3\x10\x78\x6f\xc9\x9c\xa2\xc6\xb5\x78\x7d\x37\xaf\xff\xf2\
+\xe8\xd8\x89\x03\x04\xf1\x00\xc1\x4a\x22\x13\x25\x12\x73\x22\x40\
+\x9d\xc0\x7c\x0c\x84\xc3\x44\xfc\xd9\x92\xb4\xe2\x80\x20\x92\x7a\
+\xf7\xef\x34\xe7\xf2\xe4\xa9\x50\xc4\xcd\x4c\x58\xe7\x8d\x8f\x79\
+\x5b\xa6\xdd\x92\x84\x03\x8a\xbd\x76\x40\x8b\x36\x4d\x6c\x60\xee\
+\xdd\x3d\x61\xb5\x85\xee\x3c\xd9\xb3\xbd\x16\x6b\x3e\x2c\x0b\x14\
+\x86\x80\x83\xcb\xb6\x22\x36\x32\xe4\xbd\x16\x1b\x59\xb5\xfd\x5f\
+\x78\xfb\x7f\x4f\x87\xdc\xcf\x9a\x0f\xcb\xb0\x67\x7b\xe0\x6f\x6e\
+\xd8\x90\x1e\xd8\xf0\x8f\x60\x89\x16\x5a\xc6\xe7\xdb\xdf\xc7\x8c\
+\x07\x32\x1a\x3f\x3f\xf5\xd0\x2f\x70\xcf\xd5\xfa\x74\x82\x67\x87\
+\x70\xac\x63\xfb\x7a\x53\xf5\x98\x4f\x17\x6d\x31\x5d\x6f\x26\x91\
+\x48\x24\x67\x83\x76\xb3\xd8\xcc\x02\x47\xe2\xe3\x23\xc2\xaa\xd4\
+\x80\xf0\x59\x6c\x16\x8b\x51\x99\xbb\x3d\xa1\x85\xfb\x03\x40\xff\
+\xae\x89\x48\xbe\x32\x01\x9a\x8f\xe1\xf3\x30\xfe\x55\xf0\x2a\x96\
+\xae\x7c\x05\x51\x91\x11\x88\x8e\x8c\x46\x4c\x54\x24\xa6\x4f\xf8\
+\x1e\x16\x5c\x7d\x6f\xc8\x63\x49\x24\x12\xc9\x85\x40\xbb\x29\x36\
+\xb3\xc0\x91\x5e\x3d\x9a\x5b\xf3\xda\x7a\xdc\xbe\x30\x29\x36\xeb\
+\x99\x51\x6c\xdd\x63\xfb\x62\xf0\xf0\xd3\xa9\x05\x37\x15\x96\xe1\
+\xab\x6f\xab\x02\xea\x68\x9a\x68\xb3\x62\x7b\x77\xeb\x1b\x58\xb9\
+\xf9\x4d\xd8\x2c\x11\xb0\x29\x51\xb0\x59\x6c\xb0\xaa\x91\x88\xb4\
+\x44\x22\x26\x32\x16\xf1\xd1\x71\x88\x8f\x4e\x40\xa7\xa8\x78\xec\
+\xab\x68\xc9\x34\x90\x44\x22\x91\x74\x6c\xda\x4d\xb1\x99\x05\x8e\
+\xf4\xee\x16\xde\x50\x7f\x00\xf0\x68\xe1\x71\xd9\x9b\x59\x6c\x1e\
+\x4f\x93\xd3\x34\x2d\x22\xda\x1a\x87\x18\x5b\x02\xaa\x3c\x4d\x6e\
+\x12\xdd\x66\x6c\xd1\x80\x2f\x76\x3f\x7c\xf0\x4b\xbd\xce\xa8\xcb\
+\x07\xe1\x05\x10\x72\xa8\x82\x44\x22\x91\x74\x2c\xda\x2d\x2a\xd2\
+\xeb\x31\x4e\xed\xc5\x44\x85\x2f\xf1\x71\x03\xe1\x8a\x8a\xb4\x58\
+\x8d\x97\x2a\x1c\x8a\x0d\x00\xba\xc7\xf4\x0b\x4b\x3f\x12\x89\x44\
+\x22\x69\xcf\x70\x7f\xaf\x51\xb1\xc5\x46\x86\x5f\xb1\x85\x6d\x8e\
+\xcd\xc4\x15\xe9\xf5\x86\xb6\xf0\xbb\x81\xee\xd1\xfa\x35\xac\x12\
+\x89\x44\x22\x69\x2b\xed\xba\x8e\x4d\x4f\x74\x64\x4c\xd8\xc7\x71\
+\xfb\xce\x9c\x2b\xd2\xeb\x0b\x8f\x62\x8b\xb2\x86\x37\x60\x46\x22\
+\x91\x48\x2e\x64\xda\xd1\x62\x33\x2a\x85\xb8\xe8\xd8\xb0\x8f\xe3\
+\xd6\xc2\xe5\x8a\x34\x2a\x36\x16\x40\xb5\x27\xf4\xfe\x23\x2c\x21\
+\xed\x4b\x29\x91\x48\x24\x12\x3f\xda\x45\xb1\x09\xc1\xa6\xdb\xd5\
+\xc4\x47\x85\xdf\x72\x09\x9b\xc5\x66\xa2\xd8\x00\xa0\xb4\x32\xf4\
+\xfd\xd4\x6c\x6a\x28\x1b\x1f\x4b\x24\x12\x89\xc4\x9f\x76\x89\x8a\
+\x34\x9b\x5f\x03\x80\xf8\xe8\xf0\x2b\xb6\x33\xb9\x8e\x0d\x00\xca\
+\xaa\x4a\xd1\xb7\x8b\xc9\xee\x28\xad\x20\x42\x2a\xb6\x26\xc9\x2a\
+\x48\xb1\x1c\x3a\x55\x75\x35\x33\x4d\x25\x50\x5f\x06\xf7\xaa\xdb\
+\x69\x9b\x77\x30\xd1\x4e\x45\x13\x5f\x2c\x9e\xb3\x7e\x6b\x7b\xcb\
+\xd9\x16\x9c\x39\x49\x56\xf4\x39\xbd\x21\xa9\x4f\x44\x1e\x78\x21\
+\xf5\x73\x19\xab\x2a\x91\x84\x40\xbb\x28\x36\x7d\x32\xe1\x06\xe2\
+\xa3\x3b\x85\x7d\x2c\x77\xd8\xa2\x22\xcd\x15\x5b\x79\x75\x99\x69\
+\x79\x6b\x90\x16\x9b\x39\x59\x59\xa4\x1c\x1c\x67\x7f\x08\x8c\x9f\
+\x01\xd4\x0d\x00\x18\xfe\x09\x76\x09\x60\x40\x28\xea\x1b\x00\x6e\
+\x6e\x37\x41\x43\x80\x7a\x29\xb3\x59\xa3\xb7\x1b\x3e\xab\xe4\xfb\
+\x3e\x80\x33\xb6\xcb\xb6\x44\x72\x21\xd0\xa1\x2c\xb6\x84\x98\x84\
+\xb0\x8f\xe5\x0e\xd3\x3a\x36\x35\x88\xc5\x56\x5e\x1d\xfa\xfa\x33\
+\xa9\xd8\x8c\xdc\xbe\x6a\x4c\x4c\xd4\x58\xfb\x3b\x60\x5c\xde\xde\
+\xb2\x9c\x49\x58\x50\x6a\xd8\xd3\xfb\x4b\x24\x17\x38\xed\x32\xc7\
+\x16\x54\xb1\x45\x9f\x01\xc5\x16\xa6\xcc\x23\xd6\x20\x16\x5b\x59\
+\x55\x18\x2c\x36\x19\x3c\x12\x00\x81\x28\xaa\x26\xe2\x15\xc0\x54\
+\xa9\x1d\x00\xf0\x3c\x31\x1e\x24\xe6\xbf\x13\xf0\x3e\x48\x1c\x3a\
+\xcb\x22\x86\x85\xac\x2c\x52\xa0\x60\x66\x7b\xcb\x21\x91\x9c\x6f\
+\x74\x28\x8b\xad\x73\x6c\x78\x53\x6a\xf9\x84\x17\x82\x8d\x19\x4e\
+\xda\x42\xb0\x39\xb6\x8a\x9a\xd0\xa7\x43\xa4\xc5\x16\x88\x33\x6f\
+\xe2\x95\x4c\x74\x83\xf1\x08\x3f\x9b\x9d\x56\x7c\xff\xd9\x97\xe8\
+\xcc\x70\x60\xec\xc4\x64\x62\x84\x3f\xdd\x8e\x44\x72\x81\xd3\x3e\
+\x8a\xcd\x64\x0d\x1b\x00\x74\x8e\xe9\x1a\xd6\x71\xc2\x65\xad\x01\
+\x80\x1a\xc4\x62\xab\xa8\x39\x15\x72\xdf\x32\x78\x24\x10\x26\xba\
+\xdb\x58\xc8\x1b\x22\x22\x4a\x1f\x6a\xaa\x5d\x86\x2b\xf9\x61\x62\
+\xae\x5b\x33\x62\xd1\xfe\x93\x3d\xab\xe4\x1b\x00\x98\x97\x3b\x4f\
+\xed\x6c\xdb\x3f\x0a\xd0\x1c\x20\x9e\xc8\x4c\xcb\x72\xd2\x8a\xde\
+\xf7\x6f\x7b\xdf\x32\xfb\x60\x9f\x45\xb1\x13\xb3\x1d\x44\x17\x41\
+\xf0\x51\x52\x78\xbb\xe2\xc3\xeb\xcf\x5d\x5f\xbc\xd3\x6c\xbc\xac\
+\x82\x14\xcb\x91\x93\x55\x03\x7c\x2a\x06\x2b\xac\x0c\x16\xc4\x83\
+\x09\x18\x0c\x20\x1a\xc4\x07\x20\xb0\x5f\x40\x79\x67\x69\x7a\xe1\
+\x17\xfe\xed\x32\xf3\xec\xb7\x31\x68\x28\x80\xc9\x7a\x37\x24\xb1\
+\xb8\xd1\x99\xe7\xb8\xa8\xf1\xb3\x82\x95\x4b\x52\x8b\x4a\x1a\x3f\
+\x83\xe8\xde\xfc\xa4\xe1\x82\x15\x07\x40\x0e\x26\x0c\x62\xf0\x41\
+\x12\xf8\x0e\x42\xfb\x67\xf6\xf5\x25\x2d\xb2\x5e\x9d\xcb\x93\xa7\
+\x82\xf8\xdc\x62\x06\xd1\x00\x00\x20\x00\x49\x44\x41\x54\x6a\x00\
+\x60\xf0\xee\x9c\xf4\xe2\x97\x1b\x8f\xe5\x25\x0d\x81\xa2\x4e\x65\
+\xe0\x32\x30\x12\x40\xb4\x01\xcc\x1b\xbc\x09\xd1\x9f\xf8\x6f\x2b\
+\x93\xb1\xdc\x31\x5c\x21\x5c\xc6\xc4\xe3\x00\x1a\x08\xc6\x2e\x28\
+\xf8\x16\x3e\xed\xed\xe6\xe4\x98\x97\x3b\x4f\xed\x62\xd9\x33\x9a\
+\x55\x8c\x05\x63\x0c\x80\xe1\x0c\xec\x6c\xd8\x5a\x28\xd2\x52\xfa\
+\xe5\xd3\x33\xb6\xb9\x0d\x72\xaf\x4c\xea\x06\x9f\xda\xf8\x72\xe3\
+\xe9\x14\xfd\x44\x83\x4c\x3f\xc9\x9d\x1c\x55\x65\x11\x13\x40\xc2\
+\x01\xd0\x25\xb0\x68\xbf\xc9\x9e\x55\xb2\xb7\xa1\x6e\x56\x41\x8a\
+\xe5\x40\x59\xd5\x68\x22\x72\x80\x61\x07\xa1\x27\x80\xfd\x0c\xfe\
+\x92\x3c\xe2\x5f\xd9\x73\x4b\xce\x4c\x5e\x3b\xc9\x59\xa7\x5d\x14\
+\x9b\x16\x44\xb1\xc5\x46\x86\x77\x1d\x5b\xb8\xf2\x44\x02\x4d\x58\
+\x6c\xd5\x95\x21\xf7\x2d\x2d\xb6\xd3\x38\x73\x93\x12\x60\x53\xe7\
+\xe8\xcb\x09\x78\xca\xec\x41\x17\x58\x87\x1f\xae\x7f\x58\x01\x9a\
+\x6a\x05\xf0\xab\x0c\x97\xfd\xea\xce\x36\xfa\x17\x80\x1e\x00\x00\
+\x26\x10\xd3\xd7\x00\xde\x07\x00\xe7\xb2\xa4\xde\x50\xd5\xb7\xa0\
+\xd2\x64\xaa\xdf\x42\x1a\xf5\xbb\x64\x33\x13\x34\x15\x8f\x3a\xf3\
+\x1c\xaf\x7a\x3a\x45\x67\xfa\x3f\xd4\x17\xe4\x25\x4f\x50\x88\x0b\
+\xa1\x92\x85\x00\x30\x71\xa0\x8e\xe2\xba\xdd\xa7\x15\xf0\xa3\x4e\
+\x97\xe3\x53\xa8\xca\x8f\xb3\x67\xad\xdb\x50\x27\x28\xdd\x06\xe0\
+\x1a\x32\x9d\x5c\xa3\x1b\x40\xf0\xb7\x56\x0f\x03\x28\x01\xea\x14\
+\x4e\x06\x4d\x5c\xae\x81\x2e\xa9\x1f\x04\x68\xd8\xd0\x9b\x00\xa8\
+\xea\xe3\x99\x2e\xfb\xdf\x4e\x7a\x06\x3e\x52\xbf\xdf\x59\x70\x14\
+\x31\x15\xa0\x45\x75\x4d\xa9\x22\xab\x20\xe5\x35\x7c\x52\x20\x0e\
+\x8c\xb3\xe7\x10\xa9\xf3\x1b\xfb\xad\xbb\x1e\x37\x02\x80\xad\xbc\
+\x7a\xed\x5d\x79\xe3\xae\x7b\x29\x7d\x63\x99\x33\xcf\x7e\x2f\x29\
+\xf4\x77\x06\xac\x8d\x35\x1b\x76\xdb\x56\xd5\x47\x33\xf2\x92\x7f\
+\x98\x93\x5e\xf8\x4f\xb3\xa1\x33\x96\x3b\x86\x77\xb1\xe1\x75\x06\
+\x26\xf8\xef\xa2\xdd\x30\x1e\x09\x82\xdb\xdb\x65\x67\xc6\x0a\xfb\
+\xcd\x39\xb3\x8b\xf5\xfb\x42\x75\x03\x61\x51\xc3\x87\x88\x53\x35\
+\x6b\x00\x7c\xe0\xcc\xb3\x3f\x04\x1b\xfd\x01\x7e\xf2\x90\x57\x7d\
+\x0a\xc0\x5e\x00\xc8\x5c\xee\x98\xc4\x0a\xbf\x45\x44\x7d\x02\x06\
+\xab\x3b\x7f\xc0\xa6\xfe\x29\x33\xcf\xf1\x8b\x25\xe9\x45\xcf\x34\
+\x79\xdd\x24\xe7\x04\xed\x32\xc7\x16\x2c\x10\xa3\xb2\x36\x74\x25\
+\x11\x30\x8e\x12\x5e\xbd\x4d\x26\x57\xcb\xa7\x85\x9e\x2f\xd2\xa2\
+\xda\x42\xee\xe3\x7c\x81\x23\x94\x79\x00\x0c\x93\x8e\x9a\x50\x0a\
+\x5a\xd9\xd5\xf4\xcc\x7c\x47\x12\x81\xde\x43\x83\x52\xd3\x91\xe1\
+\xb2\x4f\x86\xaa\x7e\x01\x60\x72\x13\xfd\x10\x08\x77\xd8\xca\xab\
+\x57\x12\xe8\xf4\x17\x57\x85\x15\x2d\x7f\x31\xbc\x1c\x9a\x58\xb9\
+\xf0\x1d\x7b\xaf\x96\x0a\x6f\x90\x35\x6f\xe2\x0c\x90\x5a\x82\x46\
+\xa5\x66\x8a\x85\x41\x0f\x77\x8a\xd8\x63\xaa\x50\x9a\x20\xee\x50\
+\x59\xd5\x15\x07\xc7\x4e\xfc\x17\x31\xe6\x37\x51\x6f\xb2\x8d\xac\
+\x9f\x3a\xf3\x1c\x2f\x83\xe8\x39\x00\xd6\x20\xf5\x3a\x13\xf1\xab\
+\x99\xcb\x1d\x93\xf4\x07\x9c\x2e\xc7\x3d\xa4\x60\x23\x03\x13\x9a\
+\x94\x88\x31\x98\x04\xad\xc9\xcc\x77\xfc\xa4\xe9\x7a\x62\xba\x33\
+\x2f\xf9\x47\x20\xfa\x8b\x5e\x1e\x41\x4c\xf5\x63\x3a\x59\x41\x01\
+\x40\x4d\xe5\xae\x8b\x61\xc2\xd3\x19\xae\xe4\xdf\x34\x39\x9e\xe4\
+\x9c\xa0\x7d\x14\x9b\x7a\xe6\xdc\x7a\xfe\x84\x33\xa3\x87\x10\x0c\
+\x36\x59\x54\x1e\x17\x15\xba\x95\xe9\x13\xa1\x6f\x7f\x73\xde\xc0\
+\xa6\x0f\xee\x5d\x4b\xaf\x2f\xdc\xdf\xca\x9e\xc6\x33\xe3\x35\x00\
+\xaa\xd9\xc1\x05\xcb\x92\xfb\x11\xe8\x23\x00\xbd\xfd\x8a\x0f\x31\
+\xe8\xa7\x04\xbe\x19\xc0\x5a\x5d\x93\xab\x32\x5c\x76\xfd\x43\xdf\
+\x0d\x60\x23\xc0\x2f\x31\xd1\x8f\xc0\x74\x0d\x98\x1f\x06\xb0\xaa\
+\xfe\x98\x3f\xbd\x35\x2f\xbd\x0c\x00\x60\x7e\x0d\x8c\x2c\x93\x3a\
+\x00\xf8\x6d\x30\xb2\x1a\xff\x80\x92\x05\xf9\xc9\x97\x12\x29\x2b\
+\x01\x9c\x5e\x0f\x43\xd8\x09\xd0\xfd\x04\xdc\x01\x20\x60\x0d\x1f\
+\x31\xbe\x9f\xb1\xdc\x31\xcb\xec\xbc\x83\xc1\x44\x6f\x01\x74\x33\
+\x00\x51\x17\x94\x43\xd7\x11\xf0\x08\xea\xf6\x80\xf0\xef\xfd\x12\
+\x10\xee\xa8\x3b\x0d\xfe\x80\x89\xbe\x4f\xcc\x3f\x00\xb0\xc3\xd0\
+\xa7\x82\xbf\xf8\x7f\xbe\x37\x6f\xa2\x1d\x40\x0e\x00\xff\xa4\xb0\
+\xa5\xcc\x78\x92\x14\x4a\x07\xf0\x3c\x02\xaf\x89\x95\x19\x7f\xcd\
+\x70\xd9\xaf\x0e\x2a\x37\x68\x2e\x88\x1f\x0f\x76\x3c\x23\x2f\xf9\
+\x06\x00\x4b\x00\x34\xbe\x3d\x12\xf0\x05\x01\x77\x80\xf0\x00\xea\
+\x82\x91\x4e\x9f\x1d\xf8\xff\x16\x2c\x9f\x34\x32\x58\x7f\x92\x73\
+\x83\x76\x71\x45\xaa\x41\x46\xad\xa8\x0d\xef\xba\x54\x9b\x1a\x09\
+\x02\x35\xae\x7d\x0a\x85\x60\x01\x2f\x31\xe1\x50\x6c\x9a\x27\xe4\
+\x3e\xce\x17\x08\x30\x5a\x35\x14\xf8\xf0\x69\x21\x0a\x80\x11\x00\
+\x00\xc6\x36\x10\x16\x93\x42\x3b\xc1\xc2\xed\x23\x75\xbb\x85\xc4\
+\x2f\x18\x08\xf0\x01\x13\xf3\x0f\xb2\xd3\x8b\x3e\x02\x80\x7b\x97\
+\x4f\x59\x2d\x14\xdf\x76\x00\x8d\x59\x03\x08\xb8\x1d\x75\x0f\x5f\
+\x28\x87\x7c\x5f\xf4\x19\x1e\x17\xbb\x68\xda\x6a\xbd\xc9\xbe\x0a\
+\xc0\x5f\x33\x5d\xf6\x9b\x18\x14\xb0\x1e\x8d\x81\x94\x79\xb9\xa3\
+\x6d\x6f\xce\xdd\xfa\x1a\x00\x38\x5d\x8e\x1f\x01\x88\x08\xa8\x43\
+\xca\x5b\x39\x69\x85\x01\xed\x9c\x79\xc9\x6f\x83\x02\x5e\x42\x7d\
+\xa4\xe1\xfa\x25\x73\x0a\x37\x03\x80\x73\x65\x52\x31\x34\xf5\x4b\
+\xf8\x59\x2c\xa4\xe0\x76\x00\x2b\x5b\x76\xa9\x00\xd4\x2b\x4d\x66\
+\xfa\x7d\x76\x7a\xd1\xaf\xeb\xcb\xde\x71\xba\x92\xfb\x00\xfc\xa0\
+\xbe\x32\x01\x5f\x94\x7a\xab\x67\xbd\x39\x77\xab\x07\x00\x32\xf3\
+\xed\xc7\x99\xe9\x5d\x5d\xb5\x49\x3f\xc9\x9d\x1c\xf5\xe4\xdc\xb5\
+\x35\xf5\xe7\xf6\x17\x40\xe7\x7f\x25\x38\x73\xd2\x8a\x72\xeb\x3f\
+\xb9\x32\xf2\x93\x77\x12\xf3\xef\x03\xaa\x30\xfd\x1e\xc0\x87\x41\
+\xe4\x4e\xf4\xfb\x7f\x35\x80\xd7\x89\x78\xbf\xd0\xc8\x52\x65\xab\
+\xdd\x13\xeb\x8b\xd2\x5b\xaf\xc7\x49\x58\x66\x2e\x9e\xb3\xe6\x28\
+\x00\x38\xf3\x1d\xbb\xc0\x01\xd7\xc9\xaa\xa8\xfc\x7d\x00\xd2\x72\
+\x3b\x87\xe9\x58\xae\xc8\x30\x44\x18\xfa\x43\xa0\xb0\xcd\x5f\x05\
+\xf3\x38\x86\x63\x5e\xd0\x2b\x9a\x9c\x3a\xba\xa0\x30\x55\x6c\x8c\
+\x50\x26\xf5\xf7\xc7\x78\xd5\x31\xd9\x69\x45\x4f\x2d\x99\x5d\xe8\
+\x5a\x92\x5a\xfc\x5e\x04\xfb\xdc\x0c\xbe\x47\x57\xef\xd0\x92\xf4\
+\xe2\x8f\x1a\x3e\xd4\x3f\xf8\x4a\xfc\x2b\x30\x30\xe9\xc1\x77\x93\
+\xe3\x01\x20\x3b\xa3\xc4\x6b\xa2\xd4\x1a\xe9\xbd\x69\x7d\x2e\x0c\
+\xd6\x0e\x6c\x5d\x23\xa2\x2e\x6e\x8d\xf0\x19\x79\xf6\xb1\x20\xd6\
+\xcf\x39\x6e\x59\x32\xa7\x68\x73\xc3\x87\xfa\x20\x99\xed\xba\x3a\
+\x57\xcf\xcb\x9d\x67\x6a\xad\x36\x05\x33\xbd\xee\xff\x99\x98\xbf\
+\x0c\x52\x35\xb7\x41\xa9\x01\x00\x29\x96\x2d\x26\x75\xa8\x32\xd2\
+\x37\x18\x00\x32\x5d\xf6\xd9\x0c\x5c\xa6\x3b\xfc\x4d\x76\x6a\xa3\
+\x52\xab\x2b\x39\xec\xfb\x0b\x80\xd2\xc0\x6a\x98\xe8\xcc\x73\xa4\
+\x37\x2d\x38\x2d\xcb\x4e\x2b\xba\x32\x3b\xad\xe8\xf9\x25\xa9\xc5\
+\xef\xe5\xcc\x29\x5a\x19\xe7\x8b\x9c\x0e\x60\x74\x60\x35\x7c\xd0\
+\xa0\xd4\x00\xa0\xcf\xc6\xe2\x77\x01\x04\xdc\x47\x66\x5c\xd3\xe4\
+\x58\x92\x0e\x4f\xbb\x28\x36\x4b\x10\x57\x64\x65\x98\x2d\x36\x00\
+\xb0\x59\xc2\xa3\xd8\x82\x45\x72\x86\xc3\x15\xe9\x95\x16\x5b\x23\
+\xcc\x46\xc5\xc6\x84\xb6\xfb\xa8\x89\x5e\x6a\xb0\x18\x1a\xf0\x42\
+\xb9\x09\x7e\xae\xa9\x7a\xbe\x31\x8c\x0b\xec\xd3\x15\x59\x6a\x3d\
+\x7c\x55\x4b\x86\x5d\xb4\x88\x05\x00\x83\xfb\x54\x03\x8d\x6a\x49\
+\xfb\x06\x48\x51\x6e\x83\xce\xca\x61\x32\xca\x0a\xa3\xac\x9d\xbb\
+\x58\xf6\xd8\x5b\x33\x16\x00\x4f\xbf\xce\x91\xdb\x02\x4a\x14\xde\
+\x66\x56\x51\xb0\x08\x50\x78\x8b\x67\xad\x3d\x00\xbf\xbd\x6c\x4f\
+\x37\x57\xfa\x00\x00\x33\x4d\x37\xf6\x62\xec\x3b\x3b\xa3\xc4\x4b\
+\x80\x71\x2b\x77\x05\x26\xed\xfd\xe4\x51\xf9\x59\x43\xef\xa0\x1f\
+\x18\x87\xa4\x80\x6b\x57\x7f\x9f\x0e\xfa\x97\x11\x38\xe9\xfe\xe5\
+\x8e\xf0\x86\x68\x4b\xce\x2a\xed\xe4\x8a\x0c\x66\xb1\x85\x37\x78\
+\x04\x00\x22\xd4\x28\x54\xe8\x5e\x00\xdb\x42\xb0\x48\xce\xb8\x30\
+\x24\x6e\xf6\x6a\xd2\x62\x6b\x84\x0c\x0a\x07\xc4\xdc\xe6\xdc\x1c\
+\xc4\xd8\x65\x1c\x82\x87\x9a\x8c\x6b\x50\x16\x64\xa2\x98\xa8\x2e\
+\xe8\x61\x79\xb0\xf1\x16\xe6\xa6\xc4\xc2\x56\xd5\xd9\x07\x4b\x27\
+\x98\xbd\x38\x8a\xa0\x01\x17\xa6\xb0\xe0\xa1\xa4\x3f\x7b\xdd\xc3\
+\xb9\xae\x0c\xfb\xf5\x41\x96\xac\x62\x02\x80\x75\xad\x18\xed\x5b\
+\xbd\x15\xaa\x91\xe2\x51\xd8\xf8\xdd\x67\xa1\x9a\x59\x68\x26\x93\
+\xc5\x42\xad\x13\x8f\x47\x18\xa2\x40\x19\x7b\x82\x08\xb2\x03\x40\
+\xb2\xae\xee\xa0\xa0\x62\xd7\x61\xb8\xcf\x00\x8c\xf7\x99\x85\xd9\
+\x4b\xc1\x7e\x00\x03\xfc\x3e\x2b\x1e\x85\xc7\x21\xb8\xfb\x53\xd2\
+\xc1\xe9\x58\x8a\x2d\xcc\x51\x91\x40\xf8\x02\x48\x82\x59\x6c\xe1\
+\xc8\x6f\xe9\x15\xd2\x62\xf3\xe3\x24\x02\xe7\x4d\xc0\xa0\xf8\xb6\
+\x76\xc6\xcc\x26\x6f\x35\x34\x04\xfa\x79\x57\xc6\x0c\x67\xbe\xa3\
+\x40\x57\xd1\xb8\xb5\x39\xa3\x31\x3d\x0e\x81\x68\xc1\xf2\x89\x97\
+\x83\x94\xab\x15\xe2\xab\x19\x98\x00\x5b\x43\xb8\xb9\x79\xb4\x3d\
+\x29\xd4\xaa\x09\x5f\xa2\xd3\x09\x92\x4f\x8f\xcb\xb7\x3a\xf3\x1d\
+\x57\xea\x0a\x07\x37\x25\x6b\x0b\x07\x3b\xd9\xd2\xaa\xbe\x2e\x51\
+\xc7\x5b\xd7\x35\x0d\xd7\x97\x31\x91\xa9\x62\x63\xc6\x76\x93\x95\
+\x10\xc6\xf3\xf3\x97\x47\xf3\x04\xdc\xe7\xac\x2c\x52\x30\xd6\x3e\
+\xd0\x44\x8e\x5f\x38\xf3\x1d\xf7\xe9\x8a\x47\x18\x85\x50\xc2\x9f\
+\x06\x49\x72\xd6\xe8\x50\x8a\xad\xda\x1d\x9e\x84\xc5\xfe\x44\xa8\
+\x67\x58\xb1\x45\x85\xfe\xfd\x97\x16\x5b\x00\x86\x87\xab\xe2\x17\
+\xc0\x11\x1e\xd8\xec\xed\x7f\x20\x18\x03\x9b\x6d\x4a\x75\xca\xc2\
+\xb9\x32\x29\x3a\x43\x9b\xf8\x2a\x14\xba\x01\xad\x08\x4f\x62\xd1\
+\x6a\xeb\xd3\x4c\xd6\xe1\x60\x18\x14\x85\x09\x1d\xe2\xe1\x4c\x20\
+\xca\x80\xdd\xb0\x05\x86\x02\x3e\x6a\x56\x1f\x04\xb3\xc5\xdd\xad\
+\xda\x42\x63\xff\x25\x8e\x3e\x0a\x38\xc2\xe4\xd0\xd8\x16\xdd\x2c\
+\xa5\x63\x5c\x3b\x49\xdb\xe8\x50\x73\x6c\x55\xee\xaa\xb0\x8f\x15\
+\xae\x3c\x8c\xc1\x5c\x91\xe1\xc8\x6f\x29\x2d\xb6\x00\x0c\x8a\x8d\
+\x81\x6e\x61\x1e\xa3\xcd\x5f\x34\x66\xc4\x3f\xf8\x6e\x72\x3c\x69\
+\xea\xa7\x80\x21\xed\x57\x2d\x80\x75\x0c\x3c\xc3\xe0\x85\x00\x8e\
+\x84\x24\x65\x1d\xa1\xfc\x28\xda\x6c\xe9\x86\x13\x06\x33\xcc\xee\
+\x2b\x73\xb0\x74\x62\x66\xf7\xbb\x55\x16\xa2\x35\xc2\x1a\xd2\xc3\
+\x84\x44\xc7\xb8\x76\x92\xb6\xd1\x2e\x16\x1b\x29\x75\x7f\xfa\x75\
+\x61\xd5\xb5\xe1\x4b\x81\xd5\xc0\x99\xb6\xd8\x12\xa4\x2b\x32\xbc\
+\x10\x1f\x80\xd1\xa8\x19\xb1\x30\x37\x25\xf6\xd9\xb9\xab\xc3\xe4\
+\xab\xe6\xdd\x00\x5d\x1a\x38\x2e\xfd\x35\x3b\xb5\xf0\xe1\x96\xb4\
+\xce\xc8\x4b\xbe\x81\xc8\xb0\xc0\xb8\x54\x08\x65\xca\xd2\x39\xeb\
+\xbe\x6e\x28\x70\xba\x1c\x0f\x02\xf5\x99\x50\xda\x2a\x29\x68\x37\
+\x81\x7b\xe8\xca\x7e\x9a\x93\x56\xf8\x97\x60\x6d\x3a\x28\xfb\xa0\
+\x53\x58\x44\x26\x11\xb0\x00\x08\xd4\xc7\x60\x03\x13\x4c\xd3\x9a\
+\x05\xe3\xb9\xeb\x3e\x2b\x75\xba\x1c\xe5\xd0\x59\xad\x2c\x30\x3b\
+\x67\x4e\x51\x6b\x96\x41\x48\xce\x41\xda\xc5\x62\x03\xcc\x53\x54\
+\x55\x9f\x01\x8b\x2d\x5c\x73\x6c\x9a\xc9\x3a\x36\x22\x20\x36\x32\
+\x74\x2f\x59\xb8\xf6\x8c\x3b\x1f\x20\x61\xba\xf6\x4a\xf1\x45\xd4\
+\x4c\x0c\xdf\x28\xca\x6e\x7d\x09\x83\x9b\xca\x4a\x11\x08\xf1\x15\
+\x86\x22\xf0\x33\xfe\x4a\x2d\x5c\x28\xc4\xbb\x4d\xc6\x6a\xb9\xac\
+\x1d\x06\xd6\x47\x6d\x02\xa0\xde\xc6\xb2\x20\xf7\x42\x18\x17\x80\
+\xb7\x00\xc3\x1c\x9e\x42\x4d\x66\x1f\x91\x9c\x27\xb4\x9b\x62\x8b\
+\x8a\x36\x2e\xb1\x39\x78\x22\x1c\x9e\x9b\x40\xce\x64\xf0\x88\xc5\
+\x12\x9e\xcb\x57\x56\x73\x2c\x2c\xfd\x9c\x0f\x9c\xf4\x0e\x2c\x00\
+\xc1\x70\x41\x88\x45\x18\xb7\x77\x11\x86\x87\x24\x01\x8e\xac\x2c\
+\xb3\xa4\x69\x46\x88\x8c\xdb\xe9\x30\xd3\x46\xff\xcf\x77\x15\xa4\
+\x44\x42\x17\x04\xd3\x26\x04\x9b\x3d\xd0\x9b\x4a\x01\xd6\x21\x61\
+\x56\x8c\xeb\xe1\x18\xa6\x8a\x0d\x30\x2b\xe7\xaf\x5a\x3b\x26\x99\
+\x65\x43\x01\xb7\xea\xda\x2d\x74\xd9\xfb\x67\xb8\x92\x7f\xe3\x74\
+\x39\xb6\x3a\x5d\x8e\x57\x9d\xf9\xc9\x29\xad\x95\x43\x72\xf6\x69\
+\x37\xc5\x16\x13\x67\x54\x6c\x07\x8e\x9d\x01\xc5\x76\x06\x5d\x91\
+\x16\x6b\x78\x2e\x5f\x69\xad\xf9\x1c\xfa\x85\xc8\x9b\x73\xdf\xd4\
+\x88\x29\x4f\x5f\xce\xa0\x1f\x39\x5d\x93\x1c\x61\x19\x44\x15\xaf\
+\x03\x08\x5c\x34\xc9\x18\x7c\x60\x8c\xc3\x90\x7c\xd9\x14\x93\xbd\
+\x90\x48\x09\x8c\xda\xb3\x9d\xaa\x99\x04\x5d\x66\x13\x13\x0c\x5f\
+\x2a\x62\x0e\x70\x9d\xf9\x14\xcb\x8b\xd0\x2d\x20\x06\xe0\xb8\x37\
+\x7f\xe2\x94\x16\xc9\xda\x41\xd0\x14\xcb\x62\x00\x01\x3e\x77\x26\
+\x4c\x5e\xe8\x0a\x0c\x2a\x59\xb0\x2c\xb9\x1f\x80\x40\x37\x31\x70\
+\x4a\xb5\x46\xbc\xd8\xda\x31\x05\x90\x6d\x28\x24\xdc\x3c\x3f\x7f\
+\x6a\x8b\xac\xb6\x07\xdf\x4d\x8e\xf7\x81\xd6\x11\x38\x0b\xc0\xc5\
+\x00\x7e\x00\xe6\x8f\x33\x5d\xf6\x9b\x5a\x2b\x8b\xe4\xec\xd2\xa1\
+\x14\xdb\xb1\x93\xa1\xaf\x37\xd3\x63\x0b\x93\x62\x33\x0b\x1e\xb1\
+\x86\xc9\x62\x2b\xad\x91\x8a\xcd\x1f\x4d\xc1\x8b\x00\xf4\x99\x39\
+\x2d\x20\xf1\x7a\x66\xbe\xfd\xfa\x85\xb9\x29\x8d\xab\xe2\xe7\xe7\
+\x4f\x8d\xab\x7f\x18\xb6\x98\xec\x59\x25\xc7\xc1\x78\x52\x5f\x4e\
+\xc4\x2f\x67\xb8\x8c\xca\xed\xf6\x55\x63\x62\x32\xf3\x1d\x49\x99\
+\xae\xe4\x1b\xeb\x2b\x1a\xd6\x42\x09\xa6\xeb\x9d\xb9\x49\x09\x40\
+\xdd\xf6\x28\x60\x38\x9b\x97\x84\x0e\xeb\x4b\x98\x10\xe0\x72\x7d\
+\x3e\x75\xed\x76\x00\x2f\x18\xc7\x53\x5c\x66\xd6\xc3\x83\xef\x26\
+\xc7\x2f\x58\x91\x9c\x9c\xe9\xb2\xcf\x6e\x7e\xfc\xb3\xc7\x0b\xa9\
+\x9f\x1f\x44\x5d\xee\x4e\x7f\x22\x7d\xa0\xbf\xce\xcf\x9f\x1a\x07\
+\xd4\x45\x9a\x92\xca\x4f\x41\x97\x04\x9b\xc0\x7f\x7b\xee\xba\xcf\
+\x5a\xfd\x70\xc8\x49\x2b\x7a\x1f\x84\x4f\x74\xc5\x11\x16\xf6\x7e\
+\x92\xe9\x4a\x36\x2c\x94\x77\xae\x4c\xea\x96\x99\x6f\xbf\xfc\xde\
+\xbc\x49\xd3\x00\xc0\xed\xe5\x6b\x00\xf4\x35\x74\xcc\x94\xd1\x5a\
+\x59\x24\x67\x97\x76\x09\x1e\x01\x80\x58\x13\xc5\x56\x5a\x1a\xfe\
+\x39\xb6\xc8\x33\xe8\x8a\xb4\x5a\x5b\x9d\xb1\xc8\x94\x32\xa9\xd8\
+\x02\x58\x3a\xbb\xb0\xd0\x99\xef\x78\x14\x8c\xdf\x06\x1c\x60\x0c\
+\x66\xd0\xdb\x3e\x5b\xb5\x3b\xd3\xe5\xd8\xca\x40\x3f\x0b\xd0\x13\
+\x2a\xbd\x01\xe0\xe6\xd6\x8c\xe1\x53\xac\x7f\xb5\xb0\xd7\x89\xc0\
+\x14\x5e\xb1\x04\x2c\x73\xba\x1c\x47\x08\xd8\x24\x00\x8d\x80\x51\
+\x51\x88\x4c\xac\xdf\xc8\xe6\x30\x80\xb7\x08\xb4\x9c\xc1\xb7\xf8\
+\xf7\x47\xe0\x29\xb0\xa9\xfb\x9d\x2e\xfb\xc7\xf5\x81\x29\x03\x01\
+\x30\x83\xd6\x13\x38\x48\x06\x10\xf1\x3f\x80\x2e\xf2\x2f\x21\xc6\
+\x7c\xa7\x2b\x79\x0a\x20\xbe\x03\x68\x04\x80\xef\x14\x55\xbd\x57\
+\x68\xda\x2d\x08\x5c\xf6\xd0\x15\xcc\x1f\x3b\x5d\x8e\xfd\x44\xd8\
+\xc4\x0c\x1b\x80\x51\x00\xfa\x29\x00\x18\xb4\x09\xc0\x8a\xd6\x5c\
+\x93\x33\x0d\x59\xe8\x09\xd6\x78\x16\x02\x77\x5b\x98\x6b\x61\xef\
+\x4c\xa7\xcb\xf1\x19\xa0\x4e\x25\x40\x97\xca\x87\x0f\xba\xd9\xfb\
+\x54\x9b\xc7\xd4\xf0\x0b\x56\xf0\x29\x02\x9f\x75\x43\x19\xbc\xd5\
+\xe9\x72\xec\x24\xe0\x4b\x01\xee\x4c\x44\x17\x83\xd5\xee\x0c\x80\
+\x49\xfb\x0f\x80\x02\x12\xd4\x99\x4d\x96\x1d\x32\x21\xbc\x3b\x22\
+\x4b\xc2\x4e\x87\xb2\xd8\xaa\xab\x7d\xa8\x72\x87\x77\x91\xf6\x99\
+\x0c\xf7\xb7\x59\x43\x7f\x2f\xa8\xf6\x56\xc0\xad\x85\x3f\x1a\xf4\
+\x5c\x27\x27\xb5\xf8\x51\x80\x7f\x01\xa3\x1b\x0e\x00\x22\xea\xb7\
+\x3d\x69\x73\xc4\xe1\x0b\xa9\x9f\x57\x58\xac\x3c\x0e\xe6\x0f\xff\
+\x9e\x0c\x5c\x43\xc0\x4c\xd4\x29\xa8\xc6\xad\xc2\x00\x60\x49\x5a\
+\xe1\x5b\x00\x72\x4d\xda\xc5\x02\x94\x5a\xdf\xc6\x47\xc0\x9d\x4c\
+\x58\x10\x4c\x06\x01\xfa\x3b\x8c\x96\x29\x00\xbe\xa8\xbe\x9f\x11\
+\x04\xd8\x16\xcf\x5a\x7b\x40\xd5\x78\xac\x89\xf5\x01\x00\xfd\x98\
+\x31\x0b\xc0\x74\xf8\x2f\x28\x37\xdf\xec\xad\x5d\x59\x32\xab\x70\
+\x9b\xd0\x68\x02\x18\xfa\x3d\xd6\x62\x00\x5c\x0b\x83\x52\xc3\x2a\
+\x45\x58\xc7\xbd\x94\xbe\xb1\xac\xcd\x63\xce\x29\x5a\xc7\x0a\x4f\
+\x06\xa0\x9f\xa3\x23\x00\x43\x18\x98\x43\xa0\x69\x08\xd8\xc9\x5c\
+\x21\x00\xd0\x98\x3e\x83\xd9\x4a\x7b\xa2\x8f\xdb\x2a\x8f\xe4\xec\
+\xd0\xa1\x14\x1b\x00\x6c\xd9\xbb\xd9\xb4\xbc\xad\x84\x6d\x8e\xcd\
+\x24\x2a\x32\x22\xa2\x55\xd9\x91\x4c\x91\x6e\x48\x73\x18\xcc\xd9\
+\x69\xc5\x4f\x40\x55\x1c\x04\x5a\x0a\x20\xd8\xc3\xcd\x07\x88\x56\
+\xad\x71\x6a\xe0\xd9\x99\xc5\x87\xb3\xd3\x8a\x52\x41\xb8\x93\x80\
+\x42\xc0\x34\x27\xa5\x00\xb0\x07\xa0\x0f\x01\xbc\xda\x58\x7a\x44\
+\xbb\xb5\x7e\x8b\x1a\x7d\x1b\x0f\x80\x22\x06\x66\x2d\x49\x2b\x7a\
+\x75\x69\x6a\xe1\x97\x08\xb2\x9e\x6d\x69\x5a\xd1\x67\xcc\x3c\x1f\
+\x30\x5d\x90\xcc\x00\xf6\x09\xc6\xff\x00\xe0\xb9\xeb\x8b\x77\xe6\
+\xa4\x16\xa7\x00\xfc\x43\xd4\x25\x67\x36\x73\x6f\x68\x20\xec\x24\
+\xe0\x7d\x30\xde\x6c\xf2\xe4\xdb\x89\xa5\xd7\x17\xee\x8f\x88\x38\
+\x79\x19\x03\x7f\x44\xdd\x79\xe8\xb3\x13\xb8\x09\xf8\xa2\x6e\x49\
+\x43\xf1\xb5\xfe\x09\x8b\xdb\x4a\xce\xec\xe2\xf5\x11\xb6\x93\xe3\
+\x01\xfc\x1e\xc0\x97\xd0\xcd\xf5\xd5\xe3\x01\xe8\x1b\x00\x2b\xa8\
+\x7e\x13\xda\xa5\x73\xd6\x7d\x4d\x4c\xf7\xe1\x74\x1e\x4e\x37\x01\
+\xff\xb2\xb8\xa3\x7e\x1b\xaa\x4c\x92\x33\x4b\xbb\xb9\x22\x63\x62\
+\xcd\x15\xdb\x37\xfb\xbf\x46\xf2\xb0\xf0\xcd\x8b\x9f\xc9\xa8\x48\
+\x9b\x35\x1c\x8a\x2d\xfc\x01\x33\xe7\x13\xf5\xbb\x4e\x67\x38\x73\
+\x92\x16\x6a\xbd\x6c\x89\x56\xc1\xfd\x34\x85\x7b\x11\x70\x44\x11\
+\xb4\xeb\x84\xb7\xff\xbe\x86\xdd\xa2\xbd\x1e\xef\x25\x51\x31\x96\
+\x80\x2f\x96\x4a\xa5\xcd\xce\xcd\x64\xa7\x16\xbd\x02\xe0\x15\xa0\
+\x2e\x0a\x4e\x23\x5c\x2c\xa0\xda\x14\xe6\xed\x36\xdb\x89\x1d\x66\
+\x3b\x77\x67\x67\x94\x78\x01\xfc\x75\x5e\xee\xe8\x67\xba\xd8\x62\
+\x87\x0a\xf0\x08\x80\x8f\x44\xda\x4a\xbf\xd0\xd7\xd7\x3c\xea\xa8\
+\x88\x18\x9f\x0d\x00\x22\xaa\x2c\x01\x3b\x15\xe4\xa4\x17\xbf\x7c\
+\x57\x41\xca\x7f\x2c\x65\x35\x17\xab\x8a\x48\x14\x1a\x79\x18\xca\
+\x8e\xa8\xc8\xe3\x3b\xf5\xfd\x30\x98\x91\x86\xa7\x01\x3c\x4d\x20\
+\xba\x67\x85\x7d\x20\xf9\x70\x31\xa9\x60\xd6\xb0\x8d\x8e\x69\xbb\
+\xea\xe5\x6a\x96\x9a\x28\xf7\x33\x71\xbe\x88\x97\xfd\xcb\xdc\x55\
+\x16\xc3\x03\x5f\x39\xe4\xfb\xc2\xd2\x4f\x31\x44\x29\x66\xfb\xed\
+\x26\xde\x58\x57\x58\x86\x2b\x11\xde\x80\x97\xe5\x63\x55\xd5\x86\
+\x85\xd9\xf5\xe7\xf5\x08\x00\x38\x73\x92\xac\xd4\x5d\x1d\x25\x88\
+\x86\x12\x29\xdf\xf5\x49\x88\xf8\xba\x21\x5f\x65\x8e\x89\xdc\xa5\
+\x35\x83\xb7\x75\x8f\xd9\x6d\x90\x27\x67\xe6\xa6\xf2\x97\x4c\xea\
+\xeb\xc6\xfc\x15\x80\x5f\x65\x15\xa4\x58\x0e\x56\x56\x0c\x65\x4d\
+\x1d\xa9\x10\x55\x92\xa0\x6d\xbd\x36\x17\xee\xad\x4f\x88\x1c\xc0\
+\x92\xf4\xc2\x9c\x79\xb9\xf3\x5e\x48\x88\xdc\x73\x45\x84\x0f\x9b\
+\xff\x31\xa7\xe8\x44\x13\xc3\x48\x3a\x08\x14\x7b\xed\x80\x56\xe5\
+\xae\x9b\x7b\x77\x4f\x58\x6d\xe1\xf1\x72\xfc\x27\xe7\x08\x84\x08\
+\x1c\xfe\xc1\xdb\x6e\xc6\xe3\xb7\xfe\x31\x2c\xfd\x03\xc0\xb6\x13\
+\x9b\xf0\x97\xcf\x5b\x30\x8f\xdf\x0c\x9f\xbc\x5b\x8a\x03\x7b\x02\
+\x9f\x6f\x97\x8e\xea\x8f\x35\x7f\xfd\x3c\xa4\x7e\x3f\xdb\x93\x87\
+\xd7\x36\xfd\xa1\xf1\xf3\xa6\xc2\x0a\x7c\xb5\x29\xf0\x65\xfc\x7b\
+\x97\x8d\xc3\xb2\x5f\x1a\x02\x05\x5b\xc4\x47\x3b\xdf\xc0\x9b\x5b\
+\x0c\x71\x12\x67\x8c\xaf\x37\x55\x8f\xf9\x74\xd1\x96\x60\x5b\x9d\
+\x48\x24\x12\xc9\x19\xa7\xdd\x5c\x91\x00\x10\x13\x67\x1c\x7e\xcf\
+\xe1\xbd\x61\x1d\xa3\x47\x4c\xab\x02\xe6\x82\x52\x53\x6d\x9c\x0a\
+\xe9\xd6\x29\xf4\x39\xe4\xa3\x95\x26\xeb\x56\x25\x12\x89\x44\xd2\
+\x66\xda\x55\xb1\xc5\xc6\x1b\x3d\xa1\xfb\x8e\x9a\x4d\x37\xb4\x9d\
+\x84\xc8\x6e\x61\x99\x67\xab\x28\x37\xc6\x30\x0c\xea\x33\x30\xe4\
+\x7e\xf7\x94\x85\x3d\x59\x85\x44\x22\x91\x5c\xd0\xb4\xab\x62\xeb\
+\xda\xc3\x38\x47\xb5\x63\xef\x41\x93\x9a\xa1\xd1\x3d\x36\x34\xab\
+\xcd\x5d\x2b\xe0\xf5\x18\x3d\xb6\x23\xfb\x1b\x77\xbb\x68\x0d\x0c\
+\xc6\x9e\x32\xb3\xed\xa1\x24\x12\x89\x44\xd2\x56\xda\x55\xb1\x75\
+\xef\x65\x54\x6c\xe5\x65\x6e\x6c\x3b\x14\xde\x87\x7d\xa8\xee\xc8\
+\x8a\x72\xf3\xbd\xb5\xc6\x0c\x1a\x17\x52\xbf\x47\x2a\xf7\xa0\xd6\
+\x17\xfe\xb5\x7b\x12\x89\x44\x72\x21\xd3\xae\x8a\xad\x5b\x2f\x1b\
+\x0c\xbb\x03\x03\xc8\x5f\xdf\xb6\x40\x89\x60\xf4\x88\x19\xd0\x7c\
+\xa5\x26\x30\x73\x43\x12\x01\x63\x13\xf5\x09\xde\x5b\xc7\x9e\x52\
+\xe9\x86\x94\x48\x24\x92\x70\xd3\xae\x8a\xcd\x6a\x25\x74\xee\x6a\
+\xb4\xda\x3e\xfd\x72\x6d\x58\xc7\xe9\x11\xdb\xaa\x3d\x0a\x0d\x98\
+\x59\x6c\x71\xf1\x36\x44\xda\x9a\x4b\x05\xd8\x34\xbb\xe5\xfc\x9a\
+\x44\x22\x91\x84\x9d\x76\x5b\xc7\xd6\x40\xf7\xde\x56\x9c\x3c\x1e\
+\xb8\xf4\xe6\x7f\xdb\xdb\xb2\x43\x45\x70\x86\x74\xb9\x24\xa4\xf6\
+\x15\x65\x46\x8b\xad\x57\xf7\xd0\x23\x22\xcf\x46\xe0\x88\xd2\xf1\
+\x12\x50\x5c\x90\x38\x5d\x93\x2f\x21\xf2\x05\xe4\x1d\x64\xb6\x1c\
+\xc8\x4e\x5b\xbb\xa5\xbd\x64\x92\x9c\x3f\xdc\x9b\x37\xd1\xce\x0a\
+\x75\xf1\x2f\xd3\x88\xbe\x5d\x3a\xbb\x68\x57\x7b\xc9\xd4\x9e\x74\
+\x00\xc5\x66\xc3\xb7\x5b\x02\xf7\x23\x3b\x7a\xb4\x12\xc7\x4e\x1d\
+\x41\xf7\xf8\x90\xf6\x68\x6c\xa4\x57\xec\x40\x74\x8e\xea\xd1\xe6\
+\x2c\x1f\x47\x0e\x1a\x13\x15\xd8\x47\x8d\x0d\x49\x26\xc1\x1a\xf6\
+\x96\x7f\x1b\x52\x1f\x2d\x21\xca\xaa\xcf\x52\x24\x69\x17\x58\x7b\
+\x88\x41\x77\xe8\xca\x5e\x01\x70\x67\xbb\xc8\x23\x39\xaf\x10\x8a\
+\xf2\x27\x30\x02\xf6\x09\x54\x98\x7f\x01\xe0\x89\x76\x12\xa9\x5d\
+\x69\x77\xc5\xd6\xa3\x97\xcd\x50\xc6\x5c\x37\xcf\x36\xff\xaa\xd0\
+\x17\x56\x37\x30\xb2\xbb\x1d\x6b\xf7\xb6\x7e\xe3\xdc\xd2\xe3\x5e\
+\xd4\xd6\x18\xd7\xb0\xdd\x30\xe5\xfa\x90\xe4\xf9\xee\xf8\x06\x78\
+\x35\x43\x42\x8b\xb0\x13\x6d\x0d\x7d\x23\xd4\xb3\x49\xa6\x2b\xf9\
+\x46\x26\xfe\x3f\xb3\x63\xcc\xe4\x06\xf3\x21\x52\x70\x90\xc0\x07\
+\x85\x46\x9b\x96\xce\x29\xfe\x2f\x83\x5b\x95\x64\x40\x22\x91\x9c\
+\xdf\xb4\xeb\x1c\x1b\x00\x44\x46\x2b\x88\x4b\x30\xa6\xd7\x5a\xbd\
+\xa9\x20\xac\xe3\x8c\xea\xde\xb6\xad\xbc\x0e\xed\x37\x5a\x6b\x51\
+\xd1\x16\x5c\x79\xc9\xf4\x90\xe4\x29\x39\xf0\x61\x48\xed\x5b\x4a\
+\xb4\x35\xfe\xac\x8c\x13\x36\x88\xbb\x81\x31\xc6\xec\x8f\xc0\x76\
+\x22\xa4\x81\x71\x2f\x33\x3d\x46\x0a\x56\x64\xb8\x1c\x5f\x65\xe4\
+\xd9\xef\x24\xd3\x30\x24\x89\x44\x72\x21\xd2\xee\x8a\x0d\x00\xfa\
+\x26\x1a\x83\x30\xd6\x6e\x0e\x6f\x32\xe4\x8b\xba\x4f\x6c\x53\xc2\
+\xf3\xc3\xfb\x8c\x56\xd5\xc5\xc3\x13\xa1\xb4\x6c\xb3\x65\x53\x04\
+\x6b\xd8\x70\x68\xb5\xe9\x31\x45\x35\xca\xe8\xf1\xb6\x28\xfd\x9f\
+\x29\xb1\x11\x09\xcd\x57\x3a\xa7\xe1\x8b\x88\xe8\xa5\x0c\xd7\xc4\
+\x67\xda\x5b\x12\x89\x44\xd2\x31\xe8\x10\x8a\x6d\xc8\x48\x63\x66\
+\x90\x63\xc7\xaa\xb0\xa2\x64\x59\xd8\xc6\x88\x8b\xe8\x8c\x91\x3d\
+\x82\x6c\x8b\x15\x84\x9a\x2a\x81\xa3\x87\x8d\x4a\x25\x7d\xea\x75\
+\x21\xc9\xf2\xf5\xb1\x62\x54\x79\xca\x4d\x8f\x59\x6d\xc6\x5b\x52\
+\x55\x53\x6d\x52\xb3\x65\xf4\x8c\x4d\x44\xd7\x68\x43\xce\xd8\x73\
+\x0d\xaf\xc2\x4a\x0a\x03\xd7\x13\xf8\x51\x93\x6d\x4f\x00\xd0\x42\
+\xa7\xcb\xf1\xf8\xd9\x17\x4d\x22\x91\x74\x34\x3a\x84\x62\x4b\xe8\
+\x6c\x41\x77\x93\xb9\xb6\x67\xf3\x8d\x3b\xbb\x87\xc2\xf4\xa1\xb7\
+\xb5\xaa\xfe\xa6\xa2\x0a\x08\x2d\x70\xfa\xa6\x5b\xb7\x68\x3c\x30\
+\xf3\xc7\x21\xc9\xd1\x94\x1b\xd2\x66\x92\x60\xba\xaa\xc6\x90\x48\
+\xbd\xc5\x10\x08\xf6\xbe\x3a\xb7\x29\x03\xc7\x0e\x7b\xb1\xf5\x8b\
+\x2a\x6c\x29\xa9\x6c\xfc\x73\x1f\xeb\x86\xee\x51\xa1\x2d\x8d\x38\
+\x43\x88\xc5\xe9\xeb\x0a\x72\xd2\x8a\x96\x2f\x49\x2b\x5e\x84\xa3\
+\xda\x14\x00\xaf\x9b\xd4\xfb\xa9\x73\x65\x52\x8b\x16\x2d\x12\x88\
+\x1a\x76\x6e\x0e\x95\x79\xb9\xa3\x6d\x59\x59\x21\x98\xf0\xcd\xe0\
+\xcc\x49\xb2\xce\xcb\x1d\x6d\xfc\x81\x74\x00\x9c\x39\x49\xd6\x9f\
+\xe4\x4e\x0e\xcf\x16\x1a\x6d\xe0\xae\x82\x94\xc8\x07\xdf\x1d\x16\
+\xd1\x5e\xe3\x9f\x4b\x3c\xf8\xee\xb0\x08\x67\x4e\x52\x9b\xb7\x24\
+\x99\x97\x3b\xda\x76\x36\xef\xf5\x83\xef\x26\xb7\x79\x1e\xa5\xdd\
+\x83\x47\x1a\x18\x32\x32\x0a\xc7\x0e\x07\xce\x67\x15\x6f\xfa\x0e\
+\xc7\x2b\x8e\xa1\x5b\x5c\xf7\x20\xad\x5a\xc7\xc8\xee\x76\xf4\x4b\
+\x18\x86\xfd\xe5\xdb\x9a\xad\x7b\xe2\xa8\x17\xbb\xbe\x33\x6e\x00\
+\x9a\x39\xe7\xd6\x90\xdc\x90\x3e\xe1\xc5\xa6\x43\x66\xfb\x45\xd6\
+\x61\x31\x51\x6c\x35\xb5\xa1\x05\x99\x4c\x1f\xf6\x03\xec\x2d\xff\
+\x16\x6b\xbf\xf9\x1c\xbb\xb6\xd7\x62\xcf\xb6\x1a\x54\x55\x68\x00\
+\x01\x09\x09\x11\x98\x32\x7e\x0c\xee\x9d\xe1\xc4\xb4\xd1\x57\xe3\
+\xf9\x92\xff\xc3\xb1\x03\x1d\x3b\x31\x73\x76\x46\x89\xf7\xf6\x55\
+\x63\x32\xa2\x6a\x22\x67\x02\xe8\xe4\x77\xc8\x4a\x9a\xe5\xe7\x00\
+\x16\x9a\xb5\x73\xba\x26\x39\x98\x79\x16\x11\xdb\x33\x60\xb7\x03\
+\xde\x4e\x4e\x97\xa3\x92\x41\x5f\x29\x8c\x17\xdc\x9d\xa2\x5e\x7d\
+\x49\xb7\x1d\x4b\x46\xbe\xe3\x79\x02\x92\x00\x80\x04\x3d\xb7\x24\
+\xbd\x30\x07\x00\x32\x56\xd8\x27\x2a\x02\xf3\x18\x34\xb9\xb3\x2d\
+\x66\xc2\xc1\xb1\x76\x77\xa6\xcb\xb1\x8e\x99\xd7\x28\x16\xcb\x8b\
+\x8b\x67\xad\x3d\xd0\xd6\xf3\xcb\x2a\x48\xb1\x1c\x2c\xaf\x9e\x4f\
+\xa0\x64\x06\x8f\x41\x4f\xf5\xe2\xce\x88\x51\x9c\x2e\xc7\x37\x00\
+\xbe\x64\xd0\x46\xab\x27\x6a\xc9\xb3\x73\x57\x37\xee\xca\x9b\xe9\
+\xb2\xff\x99\x89\xbe\x17\xd0\x91\xc0\x17\xd9\xe9\x45\xf3\xcd\xaf\
+\x85\xe3\x77\x20\xcc\x6a\xf8\x4c\x02\x27\x96\xa4\x17\x5d\xd5\x12\
+\xf9\x32\xf3\xed\xd7\x43\xe0\x72\x26\xb2\xa3\xa7\x3a\xae\x0a\x5a\
+\xa4\xd3\xe5\x38\xc1\x40\x91\x02\x5e\xb2\x24\xad\xb8\x71\xf3\xd6\
+\x0c\x97\x63\x31\x11\x26\xe9\xba\x78\x3f\x3b\xb5\xe8\xe7\x66\x7d\
+\xeb\xeb\xb3\xc0\xee\x9c\xf4\xa2\x74\xff\x6b\x73\xa8\xbc\xfa\x16\
+\x01\x4c\x22\x66\xbb\x8d\xe8\x12\x37\xba\x58\x9c\x2e\xc7\x31\x80\
+\x3f\x63\x81\x67\x72\xe6\x14\x07\xfc\xc0\xe6\xe7\x4f\xed\x63\x81\
+\xf7\x9d\x86\xcf\x16\xe6\xd9\xcf\xa6\x15\xef\x9b\x97\x3b\x4f\xed\
+\x62\xdd\x33\x4f\x10\x26\x11\x23\x19\x84\x4b\x41\xbc\x18\xa0\x94\
+\x40\xa9\xe8\x60\x76\x6a\xe1\x4c\x73\x79\xed\xf7\x11\x51\x46\x63\
+\x4d\x66\xc1\x04\x1f\x40\x01\x2f\x22\xac\xe1\xff\x72\xe6\x14\x19\
+\xa2\xd7\x16\xac\x70\x5c\xa9\x30\x0c\xdb\x6f\x10\x70\xcf\x92\xd4\
+\xa2\x12\x7d\x79\xa6\x2b\xf9\x2e\x26\xfe\x61\x63\x81\x60\xad\x26\
+\xda\x7d\x79\x14\xcc\xd7\xd4\xde\x9d\x3b\xbe\xbb\x35\xc2\xf2\x3b\
+\x30\x4d\x05\xba\x8c\x40\x4f\xc0\x99\xe7\xd8\x49\x0a\x36\xb2\xd0\
+\x7e\x99\x9d\x5e\x12\x74\x6d\x15\x81\x28\x23\xdf\x7e\x23\x33\x2e\
+\x23\xc0\xde\xd9\x16\x33\xb6\x0a\x5a\x84\xd3\xe5\x38\xce\x40\x31\
+\x11\x9e\xcb\x4e\x2d\xfa\xaf\xbe\x9d\x33\xdf\xb1\xa9\xe1\x7f\x05\
+\xe2\xae\xc5\xa9\xeb\x37\x12\x88\x16\xb8\xec\xe9\x44\x34\x05\x60\
+\x07\x18\xe3\x41\xb8\x33\x3b\xb5\xa8\x71\xc3\xde\xcc\x7c\x47\x12\
+\x98\x67\x33\xc8\x0e\x60\x22\x80\xae\x4e\x97\xa3\x0a\xc0\x77\x20\
+\xbc\x58\x13\x59\xfb\xd2\xab\xd3\x37\xb7\x28\x55\x53\x87\xb0\xd8\
+\x00\x20\x71\x48\xa4\x61\x3b\x1c\xaf\x57\xe0\x49\xd7\x9f\xc3\x3a\
+\xce\x35\x43\x7f\xd0\xa2\x7a\x1b\xd6\x56\x18\xca\xba\x74\x8d\xc2\
+\xc3\xe9\x8f\x84\x34\xfe\x96\x23\x9f\xa3\xda\x6b\xec\xbb\x81\xe8\
+\x18\x63\x20\xcd\xc9\xf2\xd0\x76\x15\x8f\xb6\xc6\xe1\x7e\xc7\x93\
+\xf8\xc1\x98\xdf\xe0\xea\x51\xb3\xb0\x20\x6d\x1e\xfe\xf9\xe8\x93\
+\xd8\xf3\xc6\x17\xd8\xff\xef\xef\xf0\xc6\x4f\x73\x31\x6d\xf4\xd5\
+\x00\xea\x76\xb7\x3c\x17\x78\x75\xfa\xe6\x2a\x62\x7e\x45\x5f\xce\
+\xe0\x6b\xcc\xea\x67\xba\x1c\x3f\x07\xc4\x5a\xaa\x8b\xb8\x9c\x8e\
+\xd3\x0a\x31\x96\xc0\x76\x26\xce\x8e\x28\xaf\xfe\xfc\xde\x95\x93\
+\x03\xd6\x9a\x11\x30\xb4\x21\x78\x85\x89\x6f\xad\xeb\xcb\x7e\x13\
+\x09\xfa\x9c\x41\x0f\x03\x98\x0c\x20\x02\x40\x3c\x03\xd7\x80\xe8\
+\x51\xa1\x69\x9f\xdd\x9b\x37\x69\x60\x5b\xce\x2b\x73\x65\xf2\xb0\
+\x83\x65\xd5\x6b\x01\x2c\x61\xf0\x9d\x00\xc6\x01\xb0\xa1\xee\x25\
+\x74\x34\x80\x5b\x08\xfc\x67\x9f\xad\xfa\x8b\x8c\x3c\x7b\xe3\x9a\
+\x13\x01\xec\x32\x04\xdc\x10\x6e\x6a\xe2\x0d\xfd\x16\xff\xba\x4c\
+\xdc\xec\x5a\x98\xdb\x57\x8d\x89\xc9\xcc\x77\xbc\xc1\x4c\x6f\x33\
+\xd1\x0f\x01\x4c\x02\x1a\x9f\xa8\x5d\x09\x98\xc9\xa0\xfc\x4c\x97\
+\xe3\xb5\x06\x2b\x4a\x01\x76\x9b\x04\x02\xdd\x64\xd6\xff\xbc\xdc\
+\x79\x2a\xe9\xe4\x02\xa1\x71\xbb\x8f\xbb\x73\xc7\x77\x3f\x50\x5e\
+\xf5\x01\x03\xaf\x10\x90\x09\xa2\xf1\x00\xac\xa8\xdb\x0d\xbb\x07\
+\x40\x37\x90\x42\x05\xce\x7c\xc7\x1f\xfd\x83\x89\x6c\x42\xb3\xf9\
+\xf7\xe9\x03\x5d\xf3\xe0\xbb\xc9\xf1\x5d\xac\x7b\x56\x31\xe1\x75\
+\x02\x1e\x00\x61\x22\x80\x08\x82\xba\xcf\x28\x2f\xcf\x70\x2e\x4b\
+\x0a\xe6\xcf\x9f\x1b\x50\x17\xe4\x26\x41\x15\xfa\x3e\x14\xe2\xab\
+\xcd\x1a\xab\x82\x67\x98\x05\x4a\xb1\xc0\x95\x66\xf5\x19\xe2\xba\
+\xc0\xfb\xa6\xf8\x82\x3f\xec\x69\xba\xd5\x66\xfd\x1a\x4c\x19\x00\
+\x46\x01\x50\x01\xa8\x20\x0c\x63\xc6\x3c\x90\xfa\x65\x46\xbe\xfd\
+\x56\xb3\x96\xf3\xf3\xa7\xc6\x65\xb8\xec\xcb\xc0\x78\x93\x80\x07\
+\x00\x38\x50\xf7\x3d\x07\x80\x6e\x04\xcc\x04\x63\xa5\x33\xcf\xf1\
+\x82\xe1\x3b\xe6\x2f\x1f\xe8\xba\x79\xb9\xa3\x6d\x19\x79\x8e\xb7\
+\x08\x58\x06\xe6\x87\xc0\x98\x0a\x20\x9a\x41\x8d\x0f\x3b\xa7\xcb\
+\xf1\x63\x66\xac\x63\xd0\x6f\x50\xb7\x9b\x7a\xd7\xfa\x43\x31\x00\
+\xc6\x81\xf1\x4c\x54\x4d\x64\xe1\x3d\xcb\xa6\x24\x9a\x9f\x6b\x20\
+\x1d\x46\xb1\xa9\x16\xc2\xa0\xe1\x46\x2b\xf7\xad\x8f\xde\x31\xa9\
+\xdd\x76\xec\xfd\xae\xc1\xf8\x3e\x29\x4d\xd6\xd9\xb3\xa3\xd6\x60\
+\x3d\x5a\xac\x84\x17\x1f\x79\x1a\xaa\xd2\x76\x23\x97\xc1\x58\xf9\
+\xcd\xf3\x4d\xd6\xe9\xdc\xd5\x02\x7d\x8c\xcb\xa9\x72\x37\x8e\x96\
+\x1d\x6e\xf3\xb8\x00\xa0\x28\x2a\xae\x1b\x9f\x86\xc7\x6f\xfd\x23\
+\x1e\xbb\xf5\x09\xa4\x4f\xbc\x01\x5d\xe2\xba\x19\xea\x9d\x53\xa1\
+\x85\xa4\x98\x45\x18\x25\x66\x15\xa4\x34\xde\xa4\x79\xb9\xa3\x6d\
+\x19\x2e\x47\x2e\xd7\xad\xe7\xf1\xff\xbe\xfb\xa0\xdb\x49\x99\x81\
+\x09\xac\x69\xae\x79\xb9\xf3\xcc\x77\xc1\x05\x26\x67\xe6\xdb\xff\
+\x8f\x41\xff\x46\x9d\xb2\x01\xcc\x77\xb2\x1e\x24\x48\x7c\xba\xf0\
+\x1d\x7b\xaf\x96\x9f\x0c\x90\x99\x6f\xbf\x96\x35\xde\x58\xff\x90\
+\xf5\xc7\x53\x2f\xaf\x3f\xc3\x89\xa8\xd0\x99\xef\x98\x0b\x00\xc4\
+\xe2\x7d\x93\x2e\x63\x44\x6f\x8b\x21\xef\x5b\xbd\xd2\x1d\xe4\x5f\
+\xc6\xac\x34\xf9\x43\x73\xae\x4c\x1a\x10\x55\x13\x59\xc8\x8c\x79\
+\xba\x43\xd5\xd0\xbd\x0f\x31\x70\xab\xdb\xdb\xf9\x09\x00\xd0\x88\
+\xde\x35\xe9\x2e\x71\xa1\xcb\x6e\xf0\x79\x77\x8a\xdc\x3d\x1e\x40\
+\x80\xfb\x49\x21\x5a\x01\x00\x0b\xf2\x93\x2f\xb5\xda\xac\x5f\x10\
+\x68\x9a\xae\x99\xf1\xfa\x33\x7e\xb6\x20\xdf\xf1\x60\xb0\x73\x61\
+\xe0\x1a\xb7\x47\xfc\x8d\xc9\xa8\x3c\x34\x81\x0d\x30\xee\xea\x0d\
+\x56\x94\xcb\xf4\x65\x3f\xc9\x9d\x1c\x45\xa0\x00\x6b\x94\x99\xdf\
+\x61\xe2\x0f\x0c\xed\x89\x92\xcd\x65\x31\x9c\x0f\x00\x80\x14\x18\
+\xc6\xab\x3f\x32\xd9\xff\x93\x02\xf1\x9e\x79\x3d\x00\x40\x0a\x4e\
+\x2b\x08\xb3\x49\xfd\x68\x62\x7a\x4e\xff\x3d\x5d\xb0\xc2\x31\xc8\
+\xc2\xbe\x62\x00\xe9\xba\xfa\xc6\xc9\x7e\xc2\xdd\xe8\xa9\x06\x9d\
+\xdb\x66\xd0\x35\x5d\xac\xd1\xbf\x05\xb1\xe9\xfa\xa8\xac\x82\x14\
+\x8b\xd3\xe5\xf8\x17\x80\x27\x11\xe8\x41\xf4\xc1\x78\x1f\x46\xab\
+\xaa\x77\x45\x4b\xdc\xa9\x1d\x46\xb1\x01\xc0\x90\x91\xd1\x86\xb2\
+\x43\x87\x2b\xf0\xc1\x66\xb3\xdf\x46\xdb\xb9\x63\xdc\xaf\xd1\x23\
+\xc6\x7c\x2e\xa9\xaa\x42\xc3\x46\x13\x6b\xed\x37\x0b\x16\xe2\xaa\
+\xd1\x21\x86\xf8\xef\xff\x00\xfb\x4f\x6d\x6f\xb2\x8e\xc5\x4a\x88\
+\x35\xd9\x5d\xfc\xa3\x2d\x86\xdf\xca\x05\x0f\x33\xcc\xdc\x7d\x96\
+\x83\x65\x15\x8d\x6f\x75\x5d\x22\x62\xee\x26\xe0\x46\x5d\x9d\xe7\
+\xad\x02\xbd\x34\x8f\xda\x1b\xba\xb9\x3a\x06\x26\x74\x8a\xd8\x7b\
+\x07\xcc\xb1\x30\xd3\x63\xa8\xd3\xff\xab\x09\x74\x71\x9f\x84\xe8\
+\x4e\x04\x9a\x0b\xa3\xe2\xe9\xef\xf3\xd0\xed\x2d\x3d\x97\x79\xb9\
+\xa3\x6d\xcc\xf4\x1c\xea\xde\x50\xfd\x04\xa2\x1f\x7b\xd8\xd3\x53\
+\x10\xf5\x03\xe1\x4f\xba\x66\x11\x60\x3c\xed\x5c\x99\x14\x5d\xef\
+\x52\x32\xb8\x95\x14\x8d\x2f\xd7\x97\x69\x0a\xeb\x1f\xe8\xc2\xe7\
+\xf5\x34\xf5\x80\x04\x34\xcb\x9f\x50\x67\x31\xfa\x93\xe9\x49\x88\
+\xee\x2a\x14\x0c\x01\xb0\x29\xe0\x08\xd3\x83\x99\x2b\x93\x87\x2d\
+\x4d\x2d\xfc\x12\x30\xde\x27\x1f\xc8\xf0\xe0\x26\x36\x3c\xe4\x2b\
+\x4e\xba\x2b\x3f\x01\x00\x85\x39\x07\x80\xff\x8f\xd6\x0b\xc6\x9c\
+\x3e\x09\xd1\x9d\x14\x21\x2e\x01\x38\x60\x5b\x10\x62\x7e\x3c\xd8\
+\x1c\x0d\x01\xb3\x01\xba\x4b\x57\x5c\x0b\xa0\x56\x21\xd4\x00\x30\
+\xec\x1e\x4c\x04\xc3\x75\xac\xb4\xf9\xa6\xe0\xb4\x15\x03\x00\x10\
+\x50\xde\x11\xac\x98\xfd\x58\xc7\xe9\xe7\x49\xeb\xe5\x33\xcd\xa4\
+\xce\x8c\xc9\xfa\x25\x2c\x0b\x56\x38\x06\x01\x08\xb4\x1c\x05\x35\
+\x7d\xdf\x98\x37\xb0\xc2\xa3\xb3\xd3\x8a\x3a\xa9\x24\x2e\x02\xa0\
+\xdf\x17\x2c\xde\xe7\x43\x80\x5b\x98\x34\x3c\x05\xf0\x45\xfe\xbd\
+\x10\xe8\xee\x08\xdb\xc9\x2e\x1a\xa9\xc3\x00\x6c\xd5\xf5\xf1\x50\
+\xe6\xca\xe4\x61\xe6\xe3\x23\x99\x89\x7e\xa6\x2b\xf5\x00\xa8\x51\
+\x58\xf0\x81\xb2\xaa\xdb\x00\xdc\x12\xd8\x04\xaf\x7a\x3d\xde\x3e\
+\xf0\x68\x3d\x09\xb4\x34\xb0\x29\x5d\xc2\x3d\x95\x05\x4d\x9c\x31\
+\x80\x0e\xa6\xd8\x3a\x77\xb5\xa0\x6f\xa2\x71\x1e\xf8\xb7\xaf\x86\
+\x37\xd8\x2d\xd2\x12\x83\xfb\x1c\x7f\x46\xcf\xd8\x40\xab\xb6\xec\
+\xa4\x0f\xab\x96\x9f\x40\x75\xd5\xe9\xdc\x90\x56\x9b\x82\x87\xee\
+\xb8\x0d\x3f\x9e\xfd\xd3\x90\xc6\x14\xac\xc1\xf5\x4d\xcb\x82\x61\
+\xba\xf6\x34\xc6\x09\x7c\xb2\x25\xf8\xbc\xdc\x85\x0a\xab\xc2\x74\
+\x1e\x8b\x49\x1d\x0a\xd4\x4d\x96\x33\xe3\x57\xba\xc3\x07\x3c\x09\
+\xd1\x0f\xfc\x63\x4e\xd1\x89\xe7\xe7\xae\x3d\xa9\x5a\x6c\xf7\x43\
+\xf7\x66\x48\x2c\xd2\x9a\x19\xba\x46\x68\x74\xfb\x92\xb4\xc2\xaf\
+\x16\x4d\x5b\xed\x5b\x92\x56\xf8\x16\x88\xff\x61\xa8\xa5\x04\xfe\
+\x60\x9b\xa2\xb3\x35\xfa\x01\xe8\xac\x28\x10\xbd\x96\x9d\x5e\xf8\
+\xb7\x97\xd2\x37\x96\x2d\x4d\x2d\x3c\x92\x9d\x5a\xf4\x73\x10\xf4\
+\x5f\x84\x5e\x2c\x2c\x3f\x04\x00\x02\x19\xac\x36\xa6\xc0\x6c\x14\
+\x00\xa0\x70\xa0\x62\x63\x50\xc9\x8b\x73\x37\x1c\x0b\x26\xdb\xbd\
+\xcb\x27\x8e\x06\x58\x67\xa9\xf1\xdb\xd9\x69\x45\xd9\x2f\x4d\x5b\
+\x5d\xbb\x74\x76\xd1\x2e\x66\xf1\x4b\xc3\x30\x1a\xcf\xaa\x97\xc1\
+\xf0\xf0\x65\x98\x59\x24\x81\x73\x5b\x0c\xbc\xff\xe6\xdc\xad\x9e\
+\x4c\x57\xf2\x4c\xd4\xb9\xc2\xfc\xaa\xd2\xd3\xd9\xe9\x45\x79\x8b\
+\xa6\xad\xf6\x2d\x9e\xb3\x7e\x2b\x18\xbf\xd3\x75\x16\x53\xeb\xe1\
+\x60\x73\x86\x0d\x0f\x99\x5a\x80\x7f\xe8\x61\x4f\xe7\xec\xb4\xa2\
+\xa8\xba\xbf\x75\x45\x20\x98\x59\xbf\x06\xc5\xa6\xb0\xc1\xe2\x3b\
+\xf2\x7c\x7a\xd1\x86\x7e\x9b\x8b\x36\x02\x38\xa1\x3b\x66\xeb\x6c\
+\x8b\x0b\x50\x62\x1e\x0f\xa6\xa2\xce\x3d\x68\x46\x97\x05\x2b\x26\
+\x8e\xf2\x2f\x20\xe6\xc9\xba\x3a\xa5\x27\x7d\x89\xc5\x41\xda\x03\
+\x00\xc3\x22\xe6\xe4\xcc\x2e\xfe\x1f\x00\x3c\x97\xba\xfe\x5b\x00\
+\xff\x31\x54\x62\x34\xba\xb4\x17\xe4\x25\x4f\x20\x42\xc0\xf7\x9f\
+\x80\xd7\x97\xa4\x15\xbe\xf4\xf4\x8c\x6d\xee\xe7\x53\xd7\x6e\x27\
+\x90\x7e\x7e\xb4\xf1\x5e\x9b\x60\x41\xdd\x39\x0a\x22\xfe\x35\x54\
+\xad\x7b\x76\x5a\x51\x44\x76\x5a\x51\x74\xef\x84\x98\xb7\x49\xa1\
+\x5f\xeb\xea\x1f\x25\x55\xbb\xf7\xc5\xb9\x1b\x8e\x65\xcf\x2d\x29\
+\xf7\x92\xe5\x21\xe8\xac\x72\x02\x35\xf7\xfb\xec\x58\x8a\x0d\x00\
+\x92\xa6\xc6\xc3\x62\x09\x74\x88\x7d\xf9\xd5\x3e\x2c\x7e\x3f\xbc\
+\xcb\x94\x7a\xc7\x0d\xc2\xaf\x53\x5e\xc3\xb5\xc3\xee\x80\xa7\x96\
+\xb0\x71\x5d\x05\xde\x5f\x76\xa2\x71\xa7\x6c\x52\x80\x8b\x2f\xea\
+\x8b\xcf\x9f\x5d\x81\xdf\xde\x1c\xba\x62\xfd\x7c\x8f\x0b\xc7\xaa\
+\xf6\xb7\xa8\xee\xa0\x11\x46\x97\xec\xfb\x85\x6b\x42\x96\xe1\x7c\
+\xc3\xab\x79\x83\x04\x68\xf0\x10\x00\x70\xbb\x3b\xdf\x0d\x20\x60\
+\xcf\x22\x66\x94\xf8\x07\x88\x3c\x77\xdd\x67\xa5\x00\x74\x37\x86\
+\xae\x6c\xc6\xdd\xb1\x6d\xe9\xf5\x85\x01\x6d\x58\xf0\x2a\xa3\x18\
+\x18\xe3\xcc\x4b\x1a\xd2\xd4\x39\x00\x40\x56\x16\x29\x20\xd2\x2b\
+\x60\x30\xf3\x6b\xfa\x32\x12\x30\xbc\x1d\x11\xf3\xcf\xb2\x0a\x52\
+\x2c\x82\x8c\x8a\x8d\x80\x29\xfa\x88\x4d\x06\x07\x28\x10\x22\x6e\
+\xd2\x0d\xc9\xaa\xf2\x6b\xe8\xbd\xd4\xac\x04\x58\x35\x2c\x54\xb3\
+\x9c\x97\xd7\x02\x00\x84\xd1\x1d\x49\x3a\xc5\x96\x55\x90\x62\x01\
+\xf3\x54\xff\x32\x05\x58\x01\x00\x02\x58\x64\xe8\x59\x70\xa0\x55\
+\xc5\x8a\x61\x7c\x22\xbe\xd6\x44\x26\xff\x1a\x7f\xcb\x4e\x2b\x7e\
+\xfa\xa5\xf4\x8d\x65\x01\x5d\x9b\xbc\x20\x00\x34\xfa\x9e\xdc\xc9\
+\x01\xb9\x18\x05\x29\x01\x8a\x93\x40\xef\x32\x98\x17\x2d\x62\x01\
+\xe0\x63\x7d\x0f\x4c\x9c\xac\xfb\xec\xff\xd2\x21\xea\xff\x4e\xf7\
+\x27\x28\xe0\x7a\x10\x68\x8a\xae\xcb\x0f\xdf\x9c\xfb\xa6\xf9\x9e\
+\x5a\x75\xec\xcc\x9e\x55\xb2\xd7\xbf\x80\x89\xf4\xd6\x16\x08\xd4\
+\x68\x6d\x29\x24\x7e\x63\x90\x1b\xb4\x2e\xe0\xb3\xea\x33\xf4\x81\
+\x86\x7b\x1d\x04\x02\xbd\xba\x24\xb5\xf8\x77\xd9\xb3\x4a\x8e\x37\
+\x94\x1d\x2a\xaf\xf9\x01\x18\x83\x03\xeb\x61\x63\xf6\xac\x92\x46\
+\x97\xe7\x0b\xa9\x9f\x57\x00\xd8\xad\xeb\xee\xf2\xe6\xa2\x33\x3b\
+\x9c\x62\x8b\x89\x53\x71\xc9\x44\x63\x7e\xc3\xc7\x5e\x7c\x1a\xa5\
+\x55\x27\xc3\x3a\x96\x55\xb1\x61\xce\xa8\xfb\xf0\xe7\x99\xbf\x45\
+\x4b\x17\x00\x00\x1b\x60\x49\x44\x41\x54\xf9\xf8\x59\xda\xaf\x91\
+\x71\xe3\x1c\xdc\x3a\xfb\x7b\x78\xee\xe7\x8b\xb0\xe7\xcd\x8d\x28\
+\x7c\x6a\x2d\x46\xf5\xd3\x7b\x5f\x5a\x8f\x57\x73\xe3\xbf\xdf\xbe\
+\xd0\xe2\xfa\xbd\xfb\xdb\x10\xa3\x73\x47\x1e\x3f\x56\x8d\xff\x6e\
+\x70\x85\x2c\xcb\xf9\x44\xfd\x03\xc9\xb0\x16\x82\x88\x12\x01\x80\
+\x14\x93\xf9\x0b\x82\x71\xb3\x3f\xd2\x2b\x36\xc4\x2a\x3d\xac\xfa\
+\x87\x88\x3f\x86\xb0\x51\x66\xcb\x6e\xb3\x8a\xa4\x58\x06\x9b\x95\
+\xfb\x73\x78\x4c\xf2\x00\x00\x86\xac\xda\xa4\x6a\x7b\x0c\xe3\x90\
+\xb2\xd3\xa4\x8b\x4e\xfb\x2b\xaa\xfb\x6b\x50\x57\x03\xd0\x2f\xbc\
+\x4c\x38\x3c\x2e\x69\x4c\xc3\x07\xe7\xca\xa4\x8b\x00\xea\x13\xd8\
+\x67\x33\x8a\x8d\x31\xcd\x20\x9b\x22\x02\xae\x63\xb9\x36\xe0\x10\
+\x00\xfd\x43\xf6\xf2\xbb\x0a\x52\x22\xc9\xeb\xfb\x10\x46\x57\xed\
+\xa8\xfb\x97\x3b\x1a\xe6\x7f\x70\xb0\xbc\x76\x02\x00\xff\xe5\x17\
+\x82\x55\xed\x1d\xe7\xca\xa4\x68\x02\x1b\x17\xa0\x5a\xb4\x80\xf1\
+\x35\x56\x8d\xa1\xbc\x4c\xa6\x81\x44\x8d\x03\xc0\xfc\xbc\xeb\xdd\
+\xa7\x7a\x97\x1d\x29\x11\xa7\x15\xaf\x33\x37\x29\x81\xc0\x01\xf3\
+\x97\xfe\xd7\xd1\x6c\x9e\x0d\xe0\x00\xab\x93\xfd\x5c\xaf\x04\x6c\
+\x04\x10\x38\x67\x4c\x81\x8a\x0d\x75\x81\x4a\x7e\xe3\x35\xe3\x86\
+\x04\x6f\xd2\x97\x10\x60\x96\x14\xb9\xab\x5f\x8d\x69\xfa\x83\x44\
+\xf8\xce\xff\x73\x69\x4d\xed\x61\x18\xe3\xcc\x2e\xbf\xab\x20\x25\
+\xe8\x76\x27\x66\xdf\x31\x01\x36\x8c\x05\x66\xb3\xcd\x38\xf5\xf7\
+\x36\xb2\x3a\xc2\x67\xf0\x44\xf8\xd3\x61\xc2\xfd\xfd\xb9\xe8\xd2\
+\x18\xec\xde\x56\x8b\x52\xbf\xac\xff\x15\xa7\x3c\xc8\x78\x66\x01\
+\x72\x1f\x79\x3b\xec\xe3\x75\x8b\xeb\x81\x1b\x27\x7d\x1f\x37\x4e\
+\xfa\x7e\xd8\xfb\x06\x80\xbc\xaf\x17\xa3\xac\xf6\x78\xf3\x15\xeb\
+\x21\x00\x17\x8d\x89\xc1\x17\x6b\x4e\x05\x94\x3f\xf1\xef\xbf\xe2\
+\xba\xf1\xcd\x5a\xe1\x17\x1a\x86\xef\x30\x0b\xaa\x0b\x0a\x61\x18\
+\xac\x25\x02\x8e\x18\x82\x3a\x84\x72\x02\x14\xf8\x3b\xd5\x14\x1e\
+\x0c\xa0\x20\xc8\x98\x06\xd3\x5b\xb1\x7a\xf7\x40\x33\x7a\x95\x04\
+\x44\x8f\xa0\x92\x37\x8c\x45\x62\x44\x90\xa0\x9d\xbd\xfa\x02\xaf\
+\xc7\xbd\xd3\x6a\x33\x1a\x93\xaa\xc6\x83\x97\xa6\x7f\xbe\xcb\x99\
+\xef\x58\xab\x4f\x86\x2b\x84\x7a\x05\xea\x1e\x9c\x80\x4f\x49\xd1\
+\xd9\x5e\x47\x97\xce\x5e\x5f\x92\x13\x44\xb6\x85\xb9\x29\xb1\xb0\
+\xc1\x70\x0e\xcc\x6a\xa9\xff\x75\xec\x1e\x03\xf8\xbc\x74\x0c\x80\
+\xff\xb5\x8d\x8c\x3a\x59\xd5\xe7\xb9\xb9\x25\x3b\x9d\x2e\xc7\x5a\
+\x04\xba\xf3\xc8\xa3\x2a\x53\x00\xe4\xd7\x7d\xd4\x52\xfc\x8d\x42\
+\x06\xad\xcb\x99\x55\x72\xfc\xde\xe5\x13\x47\x0b\xe3\xeb\xb7\x66\
+\xd1\x94\x2a\xff\xf1\x23\x54\x08\x5f\xdd\x4d\xf4\x3f\xbb\xc4\xac\
+\x2c\x52\x30\xc6\x34\x6e\x03\xac\x59\x0c\xd7\xd7\x4f\x80\x55\x20\
+\x04\xcc\xb5\x2a\xac\x5d\xd6\x20\x2f\x47\x58\xaf\x20\x16\xfe\x37\
+\xdc\xe7\x11\x9e\x46\x65\xa6\x0a\xf5\x03\x41\x81\x39\x66\x89\xd1\
+\x28\xc8\xc2\xdc\x94\x58\xb2\xf1\x78\xbf\x01\x57\x83\x60\x01\xd3\
+\x69\x77\xa5\x9f\x05\x3b\x3f\x7f\x6a\x9c\x85\x11\xb0\x4d\x89\xaa\
+\x28\x66\x2e\x53\xbf\x2e\x8d\xd6\x99\x22\x88\x05\x19\x62\x9f\x09\
+\x00\x9c\x2b\x93\xba\x01\xaa\x61\x5e\x92\x84\x56\x1e\x78\xaf\xa3\
+\xe1\xf3\xa2\x14\x80\xbf\x05\x1b\x19\x59\x56\xdb\x0b\x46\xeb\xaa\
+\x5e\x16\xc5\xe4\x5a\xd3\x10\xbd\x7e\x64\xc2\x61\xfd\xef\x93\x89\
+\x4a\xf5\x22\x0b\x9d\xa5\xa7\xa7\xc3\x59\x6c\x40\xdd\x26\x9e\xf6\
+\xcb\xe3\x0d\xd9\xff\xde\xff\xb4\x24\xec\x81\x24\x67\x9a\xe2\xfd\
+\xef\xe3\xc3\x1d\xff\x6e\x75\xbb\xe1\x97\x44\xa3\x47\xef\xc0\xb9\
+\xb6\x4d\x5b\xf7\xe0\xc9\x15\xfa\xf8\x81\x0b\x97\xdb\x57\x8d\x89\
+\x81\x89\x62\x23\x70\x05\x00\x30\x8c\x8a\x0d\xc0\x93\x3e\x2f\x1d\
+\xf2\xff\x33\x8b\xd8\x22\x81\xe0\x8b\x43\x99\x0d\x2e\xd0\x7a\xf7\
+\x89\x21\x64\x9e\x98\x9a\x55\x6c\x0a\x63\xb8\xa1\x90\x70\xcc\xdf\
+\x25\xd3\x40\xfd\x5c\x98\x61\xfd\x07\x13\x0d\x02\x00\x36\x71\xa3\
+\x11\x9d\x0e\x20\x61\x22\xdd\xfc\x1a\xde\x6b\x2a\x89\xb4\x66\xa9\
+\x0e\xe2\x4a\x15\x85\x86\xeb\x18\xa8\xd4\x00\x00\x3e\xa5\xee\x3a\
+\x12\x60\x78\x63\x27\x9c\x96\x4b\x1f\xed\xa8\x80\x57\x00\x00\x5b\
+\x54\xb3\xf1\x55\x1f\x68\x6f\xc0\xf8\xa0\xbd\x30\x09\xea\xdd\x3d\
+\x66\x6c\xd0\xfb\x18\x11\xe9\x0d\xba\x40\x94\x60\x9c\x67\x13\x50\
+\x1a\xe5\x55\x84\xa6\x9f\x5f\x5b\xeb\xef\xd2\x5c\x9c\xbe\x6e\x37\
+\x00\x7d\xa4\xd8\xa0\x7b\x97\x4f\xe9\x01\x00\x5a\x44\xd5\x54\xf8\
+\x7d\x77\x05\xf3\xc7\x10\xa4\x9f\x3f\x1d\xd8\xb0\xfc\xc4\x0a\x5f\
+\x32\x02\x9e\xd7\xbc\xa5\xd9\xb5\x92\xc4\xad\xcb\xec\xa0\x59\x4d\
+\xef\xb5\x20\xa5\xc8\xe4\x5e\x77\x31\xd6\xa3\xa0\x09\x0f\x98\x8d\
+\x19\xdf\xa9\x7e\xca\x40\x57\xfa\x07\xfd\x58\xc4\x30\x58\x1c\x84\
+\x26\x7e\x9f\xe8\xa0\x8a\x0d\x00\xba\xf6\xb0\x62\xc4\x25\xba\x00\
+\x31\x06\x16\xfe\xfd\x67\xa8\xf5\xb4\x3d\x13\xc7\xd9\x64\x7f\xf9\
+\x36\xfc\x73\xd3\xef\xdb\xd4\x96\x00\x4c\x4a\x49\x40\x54\x74\xe0\
+\x2d\xfa\xc3\x8b\x4b\xb0\x7e\x47\x61\x18\xa4\x0b\xc4\x2b\x3c\xd8\
+\x70\x70\xf5\x59\xd9\x4a\x27\x5c\x58\x6b\xe3\xcc\x13\x61\x12\xca\
+\xeb\xd7\x51\x75\x32\x3d\xde\x12\x14\x0e\x9e\x64\x93\x0c\xee\xbe\
+\x86\x72\x83\xc2\xa1\x16\x24\x28\x65\xb0\x51\x4e\x36\x86\x9c\xfb\
+\x8d\x63\xcc\x1c\xc0\x75\x0f\x1a\x52\x4c\x02\x48\x80\xcb\x08\x44\
+\x75\x7f\x08\x5c\xeb\x62\x1e\x8e\xdf\x88\x50\x8c\xca\xaa\x55\x30\
+\x12\x00\xf3\xb0\x7f\xe6\xba\x79\x36\x67\x4e\x92\x95\x01\x9d\xdb\
+\xad\x2e\xcc\x9f\x05\x87\x34\xbe\x2a\xa2\xdb\x94\x2c\x95\x2d\xda\
+\x07\xd0\x99\x13\x04\x1e\x5f\xff\x32\x05\x26\xd2\x05\xa6\xb0\xf1\
+\x3a\x12\x8c\x61\xff\x8a\xd7\x01\x00\x22\x30\x02\xd4\x67\xf5\xc6\
+\x7e\x66\x65\x7c\xa6\x1f\x93\x35\xdf\x54\x00\x60\xc1\x3a\xd7\x78\
+\x73\x6e\xc8\xd6\x43\x4a\x68\xd7\x9a\x84\xd6\xe2\x3d\xb2\xea\x23\
+\x3e\x9b\x7d\xe9\x0b\x8e\xd2\xe4\x7d\xed\x90\xae\xc8\x06\xc6\x4d\
+\x8a\x43\x75\xa5\x86\xbd\x3b\x4f\x2b\xb2\x43\x87\x4e\xe1\xaa\x5f\
+\x5c\x8d\x82\x3f\xad\x86\x55\x6d\x73\x76\x98\x33\x4e\x95\xe7\x14\
+\x16\x17\xff\x0c\x1e\xad\xed\x4a\x38\x26\x5e\xc5\xf4\xff\x6f\xef\
+\xde\xe3\xa3\xaa\xae\x3d\x80\xff\xd6\x99\xc9\x84\x3c\x40\x10\x21\
+\x88\x0a\xd6\xd2\x6a\x14\x44\xac\x64\x10\x15\xa5\x55\x14\x45\x5e\
+\x16\x3f\xad\xf5\xd3\x16\x2b\x89\x7c\x68\xef\xa7\x9f\xb6\x5e\xeb\
+\xe3\x36\x45\x5a\xb9\xf7\x7a\xab\xd6\xda\x4a\x82\xca\xbd\xf5\xd3\
+\xf6\x02\xed\x85\xa0\x05\xc2\x43\x5e\x21\x24\x21\x18\x81\xf0\x1c\
+\x9e\x42\x08\x09\x81\x24\xf3\x3e\x73\xce\xd9\xeb\xfe\x31\x49\x98\
+\x99\x33\x93\x07\x99\x30\x79\xec\xef\x5f\xc9\xe4\x64\xce\xce\x4c\
+\x66\xd6\x9c\xbd\xd7\x5a\x7b\xd6\x75\xd8\xb6\xee\x12\x1a\x2e\x05\
+\x97\x28\xfc\x7e\x03\x8f\xff\xe2\x19\xe4\xbd\xb4\x18\xb3\x27\x44\
+\xad\x73\x6d\x37\xc1\x02\x47\xea\xca\x51\x76\xb6\x10\x9f\x9f\xdb\
+\x02\xbf\xde\xae\xa2\xfe\x6e\x23\x89\xf5\x81\xd1\x2e\x35\x48\x60\
+\xdf\xbb\x53\x1d\x6a\x4e\x81\xbd\x1e\x11\x6b\x57\x04\x94\x30\xc8\
+\xb4\x76\x15\x89\x21\x5a\xaf\xcb\x88\xfe\x4b\xa6\x17\x36\x0b\x44\
+\x5b\x13\x0b\x43\xa4\x9c\x65\x73\x69\xfc\xb0\x85\x0b\x49\x69\x4a\
+\x44\x68\x91\x93\x7f\x4f\x12\x32\x2c\xa6\x02\x44\x6a\x5a\x87\xc8\
+\x9f\x56\x52\x91\xbd\x26\xeb\x02\x18\xa1\xed\x7a\xae\x9b\xf7\xc9\
+\xf8\xdb\x15\x9d\xac\xac\x84\xae\xa7\xc0\xb0\x5a\x92\x5a\x9d\xce\
+\x62\xa2\x6a\x8a\x7a\x41\xc7\x6b\x00\xc5\x1c\x60\x23\x58\x2c\xc2\
+\x09\x04\xd7\xad\x72\x0a\xec\x55\x00\x5a\x0a\xe0\x9b\x03\x45\xea\
+\x90\x7e\x77\x72\x68\x99\x03\xe1\xc4\x92\xe9\x25\x07\x83\xe7\x57\
+\xaa\x89\x4d\xdb\x46\x31\x40\x2b\xda\x3a\x77\xf0\xae\x0c\x03\xa0\
+\x0e\xbf\xcf\xe5\x4d\x2b\xaf\xcb\x29\xb0\xef\x41\x53\xd7\x99\x26\
+\xd6\x54\x7f\xca\xc4\xf9\xab\xee\xdb\x0b\x25\xbc\xf4\x41\x90\xb9\
+\x0e\x90\xc0\x9b\x18\x34\x3f\x7c\xe0\x64\x07\xf0\x89\x02\x3c\x18\
+\xf2\xa8\xee\x6e\xea\x22\xe3\xce\x29\xc8\xaa\x04\x68\xcc\xe5\xe3\
+\xf1\x00\x80\xe5\x0c\x9e\x18\xfa\x19\x89\x98\x5b\x9f\x86\xbc\x02\
+\x86\x81\xb3\x4a\xf4\x8f\x61\xab\x01\x6a\xb3\xfd\x11\xc1\x88\xdd\
+\x79\x22\x02\x83\x39\x07\xf6\x1a\x44\x96\x2f\x30\x76\x83\xa8\xcd\
+\xd7\x0c\xb3\x68\xf5\x13\x78\xb7\x0e\x6c\x44\xc0\xc4\x87\x07\xc2\
+\x28\xac\x47\xd5\xe9\xcb\x8f\xeb\xbe\x83\x67\xf0\xc8\xab\x53\xb0\
+\xf9\x8d\x8d\x9d\x2a\x98\xee\x2a\xba\xd0\xb0\xb4\xfc\x55\xd4\x79\
+\xcf\xb5\x7d\x70\x1b\xd2\xfa\x2b\x78\x74\xf6\x60\x1c\x3d\xe0\xc3\
+\xc1\x0a\x37\x54\xbf\x80\xdf\x6f\x60\xee\xa2\x97\x90\xff\x8d\x8f\
+\xf0\xbb\x79\x6f\xe2\x8e\x9b\xee\x6c\xf7\xfd\x35\xfa\xeb\x70\xd6\
+\x79\x0c\x07\x6a\x8a\xb1\xbb\x6a\x13\x9c\x6a\x64\x56\x72\xcf\xc1\
+\xc4\x77\x44\x69\x95\xa2\xa9\x83\x52\x2b\x9a\xbe\x3e\x85\xc8\xa4\
+\x0c\xc6\x5f\xf3\x66\x96\xc4\x7d\x27\x00\x02\x51\x36\xb2\x4c\x9f\
+\x22\x85\xd2\xf6\x8b\x54\x40\x9c\x89\x72\x61\x67\xad\x1d\x3f\x7e\
+\x28\x80\xb0\xca\x7c\x6b\x86\x32\x4c\x8f\x56\x47\xcf\xc1\xb5\x0d\
+\x06\xf3\x0b\x6c\xdf\xc0\x40\x58\x47\x09\x32\x30\x89\x95\xf0\xbe\
+\x4b\x0c\x2a\x69\xca\x0a\x8d\x29\x25\x09\xa7\x54\xf3\xce\x4d\x00\
+\xac\xaf\x75\x74\xf7\x6f\x26\xac\x27\x46\x68\x8b\x2f\x6b\xaa\x37\
+\x79\x02\x2b\xe1\xa9\xfc\x24\xb8\xa5\x25\x17\x83\x4f\x45\x79\xaf\
+\x25\x8b\x35\x69\x7e\x5b\x63\x6f\x76\xa5\x5d\x60\x10\x9c\x8e\x0c\
+\x0d\x6c\x10\x02\x93\x60\x31\x06\x47\xac\xf9\x9c\x6d\x4a\x38\x09\
+\xa3\x0a\xed\x33\x1b\xd9\x0c\x84\xa7\xf4\x4f\xf8\xfe\x86\xb1\x69\
+\x29\xe8\x17\x7a\xbf\x97\xb7\xfa\x60\xda\x06\x0a\x59\x4b\x23\xba\
+\x7f\xe1\x42\x52\xe8\xae\xac\xd0\x85\x42\xcf\x25\xcd\xbb\xe3\x4a\
+\xfe\xa0\xd6\x24\x25\x25\x9d\x30\x74\xf3\x93\x2d\x84\xf2\xca\xd2\
+\x59\xbb\x0e\xc5\xfb\x7c\x08\xbe\x3e\xc3\x03\x9b\x82\x95\x79\xd3\
+\x4b\x3a\xdd\x6e\xaa\xfb\x45\x85\x08\x8a\x02\x3c\x30\x65\x20\xb6\
+\xae\xab\xc7\xf9\x90\xbd\xd1\xf6\xec\x3d\x81\xc7\x73\x9f\xc0\xba\
+\xd7\xd7\x75\xaa\x77\x63\xbc\x35\xf8\x2f\x60\x49\xd9\x4b\x38\x59\
+\x7f\x20\x6e\xf7\x69\xb1\x12\x32\xc7\xa6\xe2\xd6\x31\xa9\x70\x36\
+\x68\x70\xd6\x1b\x68\xac\xd7\x71\xe6\xd2\x29\x3c\xf1\xea\x53\x18\
+\x74\x4d\x3a\x46\x5c\x3f\x0c\x5f\xbb\xe9\x16\x8c\xbd\xe5\x4e\x8c\
+\x1f\x65\x47\x7a\x4a\x3a\xfc\x9a\x07\xd5\xee\x93\xa8\x72\x1e\x47\
+\x95\xf3\x18\xaa\x9c\xc7\x63\xee\x2a\xd0\x13\x11\xd3\x43\x51\xae\
+\x74\x76\x37\xa7\xf3\x13\x70\x8a\x23\x0a\x60\x59\x09\x4f\xff\x8f\
+\x97\xec\x82\x7b\x47\x03\x86\xa9\x08\xd3\xa6\xa6\xb4\x19\xd8\xac\
+\xc4\x67\x0c\x36\xbf\x7d\xeb\xc2\x32\x1c\x11\x81\x4d\x87\x65\x78\
+\x44\x56\x38\x00\x80\xd9\x38\xd5\xfc\xb5\x60\x2a\xa4\xa6\xf6\x5f\
+\x2d\x48\x79\x90\x88\xd3\x42\x2f\xbe\x28\x46\x56\x60\xa8\x77\xa7\
+\x96\x38\xa3\x5d\xf9\x32\x6b\x37\x02\xe8\x50\x60\x83\xa0\x75\x20\
+\x0e\xeb\x5d\xc9\xa0\x07\x00\xba\x2f\x62\x06\xae\x25\xb0\xc5\x0a\
+\xac\xba\xa6\x8e\x04\xd0\xae\xc0\x76\xa5\x04\x50\xa8\x20\xbc\x0e\
+\x92\x14\x7e\x80\x98\x32\x42\x47\x4b\x88\x3e\x9d\xbb\x6c\x66\x45\
+\x43\x4e\x81\xbd\x1c\xe1\x35\x78\xe3\x53\xfd\xc9\x0f\x70\xc8\x7b\
+\x2f\x31\xb7\x94\x06\x10\xd1\x36\x06\xff\xb8\xe5\x68\xc6\x98\xea\
+\x71\xe3\xef\x07\x5f\xce\x18\x25\xc2\x96\x15\x73\x2a\xa3\x7e\xdc\
+\xe8\x8c\x3f\x3d\xb1\xa3\x3e\xa7\xc0\xde\x80\x88\x29\x7c\x8b\xc5\
+\x18\x09\x20\xee\x81\x8d\x09\xa7\x88\x23\xfa\x88\x32\x5d\xd1\xeb\
+\x33\x7b\x95\xfd\xeb\xa4\x1b\x35\x79\x73\xca\x1b\x81\x1e\x10\xd8\
+\x80\xe0\x1e\x65\x93\x1e\x1b\x84\xad\xff\xac\x47\x6d\xf5\xe5\xe7\
+\xb3\xb8\xfc\x30\x66\x2e\x9a\x8e\x35\xbf\xea\xf8\xce\xd8\x5d\xe1\
+\x68\xdd\xe7\xc8\x2f\x7f\x05\x2e\xb5\x6b\x5e\x6f\x8a\x02\x0c\xbc\
+\x36\x09\x03\xaf\x8d\x36\x05\x7b\x09\x2e\x5c\x42\x51\x5d\x39\x8a\
+\xea\x3e\xea\x92\xf3\x77\x27\x3f\x5e\x65\x1f\xcc\x0a\xcc\xdb\x35\
+\x10\xde\x69\xfe\x92\x99\x2b\x40\x34\x2b\xec\xe7\x8c\xd9\x0b\x17\
+\xd2\xcb\x91\x53\x7c\x9d\x46\xc6\x83\xa6\x18\x4b\x28\x0a\x6d\x54\
+\x1c\x4b\x9d\xfa\x95\x63\x83\x92\x4f\x9f\x88\xac\xe9\x61\xdd\x18\
+\x05\xe0\xf3\xb0\xdb\x98\x6f\x8c\xb2\xa5\xea\xc9\xfc\xd9\x7b\xce\
+\x37\x17\xb8\x25\xd9\xc4\x46\x5d\x8b\xcc\x10\xe4\x07\x99\x11\xd6\
+\xda\x87\xb9\xed\xc0\x06\x00\xc4\xa8\x88\x6c\x3f\x45\x44\x73\x00\
+\x74\x28\x93\x8b\x34\x7d\x13\x6c\x16\x1d\xa1\xef\x3b\x0a\xbe\x05\
+\x0e\xcd\x0e\x84\x93\x6b\xc5\xf6\xe6\x6f\xde\x9d\x5a\xe2\xcc\x59\
+\x63\x37\x3d\x36\xa4\x28\xb3\x11\xd9\xed\x24\xce\x6e\xbc\x26\x75\
+\xd7\xb9\x46\xaf\x0b\xa1\x65\x08\x0c\x3b\x83\x23\xda\x91\xc5\x7e\
+\x1c\x99\x69\x23\x51\x58\x9a\xff\x00\x66\x84\x4e\x4f\xaa\xa9\x9a\
+\xb5\xb8\xf9\x1b\x12\x96\xed\xac\x84\x55\x46\x28\xcc\xf4\x8b\x88\
+\xfb\x8c\xfb\xfa\x5a\xcb\xf9\x19\x9f\x9b\x5a\x8d\xb1\x32\x1b\x30\
+\x17\xd9\x77\xfa\x5c\xc1\x4c\xdd\x88\xc4\x10\x9e\xb9\x70\xeb\xe4\
+\x9f\xe7\x3e\xb4\x25\xb2\x3c\x24\xaa\x17\x0a\x26\x3c\xce\xcc\xbf\
+\x26\x05\xe3\x61\xb3\xf8\xb2\xd7\xd8\x57\x27\x59\xf9\x67\xdd\xe7\
+\x52\xa7\x0d\x56\x2b\x61\xf2\xb4\x41\xb8\x7d\x5c\x1a\x42\x2f\xd0\
+\xb6\xec\xda\x8f\x7b\xfe\xc5\x8e\xca\x33\x5d\xfa\x3f\xde\xa6\x4d\
+\xc7\xff\x8a\xb7\x8b\x7f\xdc\x65\x41\x4d\xba\x2c\xe7\xd3\x7b\x52\
+\x35\xa2\x7c\x98\x33\xa3\x8e\x0e\xaf\x28\x6b\xa9\x07\xb1\x24\x25\
+\xbf\x07\xa0\x21\xe2\x98\x51\xd5\xe3\xb2\xb2\x11\x47\xcf\xad\xbc\
+\x7b\x08\x18\x91\x9d\x37\xc0\xcc\x0b\xdb\xf3\xfb\x2b\xe6\xac\x30\
+\xc0\x64\xea\xf0\xae\x10\x99\xf6\x47\x22\x62\x53\x0f\x44\x66\x7e\
+\x3d\x34\xb3\xf1\x8f\x8f\x97\x9d\x47\x64\x4d\x54\x30\x63\x31\xe4\
+\xf1\xe2\x73\xf9\x33\xcb\xda\xf5\xa2\x61\x85\x22\xbb\x7a\x00\xa0\
+\x67\xe6\xaf\x19\x1f\xb5\x1d\x54\x2c\x4d\x9f\xa6\x8b\xc3\x6e\x6c\
+\x6a\x88\xdb\x72\xaf\x84\xf5\x79\xd9\xe5\x61\xc9\x39\x2c\x78\x91\
+\x79\x50\x9c\xd3\x89\x29\xc6\x76\x69\x7a\x73\xdd\x1c\x71\x73\x3f\
+\x00\xa1\x5b\x23\x05\xac\x5a\x6a\xcc\x7d\xa8\x14\x45\x44\xa9\x67\
+\xa3\x27\x2f\x7f\x89\x92\xb7\xe6\x14\xb7\xac\x55\xbe\x3f\x6b\x67\
+\x2d\xcc\x57\x47\xe1\x5d\x3d\x58\xef\xb2\xc0\x16\xed\xb9\x66\xf0\
+\xb3\xc1\xee\x33\xf1\xa5\x23\x69\x09\x80\xc8\x3a\xa8\x11\xe7\x1a\
+\xbd\x3f\x69\xcf\xef\xcf\x5d\x3d\x6e\x20\x83\xff\x16\xd2\x5b\x35\
+\x85\x18\xdf\xd5\x35\xe5\x9d\x1e\x71\xc5\xd6\xcc\x62\x21\xdc\x65\
+\xef\x8f\x91\xa3\x52\x50\xba\xb5\x11\x97\x2e\x04\xff\xff\x8f\x38\
+\xce\x63\xd2\x82\x59\xf8\xe1\xcc\x69\x78\xf3\x87\x6f\x5f\xd5\x75\
+\xb7\xe3\x97\xf6\xe1\xd3\x23\x1f\xe0\x60\x6d\xe9\x55\x3b\x67\x1f\
+\x64\xc9\x5e\x9d\xf5\x43\x02\x52\xa0\xd0\x18\xb0\x65\x0a\xc8\x94\
+\x2a\xec\x12\x0a\xfd\x20\xf4\x4a\xac\x69\x6a\xe5\x4d\x00\x61\xad\
+\x63\x98\xf1\x7e\xce\x9a\xac\x5b\x05\x29\xcb\xd5\x64\xdf\x7e\x5b\
+\x63\x5a\x72\x52\xb2\x96\x29\x58\xc9\x64\x46\x26\x11\x7c\x79\x33\
+\x4a\x5f\x8b\x39\x1a\xa6\xaf\xe5\x14\x4c\x1c\xa3\x30\xbb\x98\x78\
+\xb2\xd5\x66\x7b\x01\xe0\xf0\xb5\x02\x42\x51\xfe\xf4\xb2\xd8\x1b\
+\xef\x45\x48\x0b\x28\x1f\x79\x6c\xc6\xaf\x01\xb4\x24\x86\x30\x30\
+\x21\xa7\x20\xeb\x3d\x0b\xf1\x1f\x0c\x85\x09\x86\x75\x3e\x22\x5b\
+\x3b\x31\x1c\x0d\xda\xcd\x1f\x9b\x86\x08\x14\x12\x2e\xb7\x4a\x32\
+\xff\x09\xad\x67\x43\x86\xca\x9b\x5e\xb2\x25\x7b\x75\xd6\x46\x0a\
+\xdf\x16\x27\x59\xb0\xb2\x33\x7b\xcd\x84\x97\x89\x95\xcf\x50\x13\
+\x38\x2c\xae\xb3\x66\x58\xac\xc8\x64\x16\x99\x0c\xca\x24\x60\x47\
+\xde\x8c\xd2\xb0\x5e\x9c\x04\xac\xe5\x28\xed\xa9\x5a\x84\xac\xaf\
+\x35\x6b\xd0\x6e\xfe\x78\x90\xed\xcb\x97\x10\xde\xbf\x70\xa8\x20\
+\x51\xfe\x42\xc1\x84\x17\xd9\xa2\xef\x1a\x9e\xde\xff\xd8\x59\x97\
+\xf7\x26\x8b\xa0\xe0\xf9\x15\xca\x54\x40\xcb\x97\x4c\x2f\xe9\x54\
+\x93\x55\x22\x14\x32\x9b\x9a\x01\x87\xda\xd1\xda\x55\x39\x9f\x17\
+\xbb\x90\x61\xf1\x20\xbc\x07\x68\xe8\x35\xf7\x16\x44\x22\x6c\x05\
+\x23\x33\xc6\xf1\xc7\x5a\xdb\x6a\xa6\xb3\x62\x3c\xd7\x29\x42\x51\
+\x76\xe5\x14\x4c\xf8\xa5\x22\x8c\x6d\xe2\x02\x1f\xb1\x66\x28\xc3\
+\x74\x56\x32\x59\x41\x26\x31\x67\x82\xb0\x39\x74\x0b\x9a\xf6\xf8\
+\x70\x7a\x91\xeb\x85\x35\xf6\xc5\xcc\xf8\x5d\xc4\x8f\xde\xca\x29\
+\xb0\xdf\xaa\x90\xf8\x38\x80\xe4\x7d\x42\x78\x2c\xc9\x6c\xcb\x14\
+\x16\xca\x54\x58\x64\x32\x91\xc8\x9b\x5e\xfa\x52\x12\x27\x8d\x05\
+\x45\x4b\xfb\xe7\x47\x7a\x54\x60\x6b\x36\x68\xb0\x15\x8f\xce\x1e\
+\x8c\x23\xfb\x3d\xd8\x57\xe6\x86\xae\x33\x34\x4d\x60\xe9\xca\x35\
+\x58\xbb\x73\x2b\xf2\x7e\xf6\x36\x1e\xbc\x23\xea\x2e\x11\x71\x73\
+\xe8\x42\x19\xd6\x1e\x5d\x86\xa3\x75\x9f\xb7\x7d\xb0\xd4\x59\x56\
+\x22\x5a\x06\xc0\xdc\xef\x20\xc8\x4b\xc4\xd3\x96\x3e\x59\x6a\xaa\
+\x83\xf0\xa5\xf8\x7f\x9f\xe2\xeb\x37\x0d\x30\xcd\xe5\xff\x54\x61\
+\xfe\x69\x8a\xaf\x1f\xc3\x66\x90\xe0\xe0\x34\x00\x11\xc0\xe0\xad\
+\xad\x8e\x86\xf0\x1c\x60\x3c\x27\xa8\xf9\x5b\xd3\x01\x87\x85\x41\
+\x1d\xba\x2a\x7c\x6b\x4e\xb1\x2f\xbb\xc0\xfe\x2c\x05\x7b\xf9\x85\
+\xac\x71\xd0\x02\x83\x69\x41\xb0\xa7\x87\xe9\x8f\xbf\xa8\x40\xc9\
+\x8e\xd6\x56\x89\x88\x0a\xc1\x1c\x75\xcf\x33\x00\x50\xda\xb1\xbe\
+\x16\x7e\x7f\xd6\x9f\x03\xc6\x3a\x84\x64\x35\x02\x48\x21\xe6\x77\
+\x00\x03\xc8\xb0\xb0\x02\x6e\x4a\xa0\x6c\x4a\x85\x21\x98\xb6\xa4\
+\x30\x88\xd6\x29\xcc\xff\x1e\xe3\x34\x86\x95\xcd\x01\x77\xc5\x9c\
+\x15\xc6\xbc\x4f\xec\x0b\x14\x81\x7f\x20\x7c\xfd\x67\x30\x83\x3f\
+\x82\x61\xc1\xb9\x46\x2f\x2b\x00\x31\x38\x58\x63\xc1\x00\x13\x77\
+\x3a\xc1\xc2\x20\x14\x2a\xad\xec\xe5\x44\x64\xae\xcf\x0b\x95\x97\
+\x5d\xae\x65\x17\xd8\xb7\x11\x10\x75\x3f\x37\xc1\xe6\xd6\x5b\xc4\
+\xbc\x2d\x32\x9b\xb2\x05\xc7\x7f\x4a\xd0\x74\xfe\xe8\xcf\x75\x3a\
+\xc0\xef\x09\x45\x01\x32\xc0\x3a\x40\x20\x6e\xe9\x6b\x40\x1c\xb5\
+\xa3\x49\x9b\xd4\x01\xa9\x7f\xb2\x35\x7a\x67\xc0\xfc\x61\x27\x47\
+\xb0\x92\x63\x85\xc6\x20\x1b\x31\x01\xc4\x0c\x0e\x9e\xb6\x04\x00\
+\x14\x0b\x79\x62\x54\x60\x3a\x7b\xcc\x54\x64\x24\xa2\x60\x87\x92\
+\x27\x9f\x19\x82\xbb\x27\xf6\xc7\xe0\xa1\xc1\x75\xa7\xaa\x73\x4e\
+\x4c\xff\xd7\xe7\x71\xef\xcf\xee\xc3\x9b\xab\xdf\x88\x7b\x1b\xae\
+\x2a\xe7\x71\x2c\xde\x36\x17\xef\x14\xff\x44\x06\xb5\xc4\xd3\x98\
+\xf0\x21\x59\xe8\xae\x25\xd3\xcb\xb6\x47\x3b\xe0\xcf\x53\xf6\x7a\
+\xea\x03\x23\x1f\x60\xa2\x57\x10\xb1\x4d\x4d\x13\x53\x5c\x22\x8a\
+\xb2\x8a\xd5\x6e\xbc\xcc\x97\xe2\xbb\xe7\x4a\xb2\xc8\xf2\x67\x94\
+\x16\x1a\x64\x19\x0f\xa0\xed\xcc\x23\x42\x91\x30\xe8\xae\xf7\x67\
+\xee\xda\x1a\xed\xc7\xf5\xaa\x7b\x27\xa2\x6f\xa9\x03\x00\x9a\x2d\
+\x49\x69\xf7\xd5\x24\x00\xe4\xcd\x28\xde\x6f\xb1\xda\xc6\x20\xfa\
+\xce\xe5\xc1\x11\x45\x12\xe6\xdb\x62\x75\xfb\x6f\xba\x83\xe2\xf7\
+\x66\x95\x46\x4d\xd3\x5d\xfa\x64\xe9\x67\xc2\xa0\x31\xcc\xd1\x5a\
+\x55\x45\x3f\x3f\x8b\x28\x19\x39\x1d\xb4\xf4\xc9\xd2\x93\x60\xc4\
+\xdc\x99\x98\x15\xa3\xcd\x0f\x08\xc4\x14\x6b\xcc\xde\xc6\x80\xc7\
+\x34\xd5\xc3\x86\x88\xfa\xbf\x0c\x00\xcc\x51\x1b\x34\xc7\xd5\x95\
+\x3c\xd7\x8c\x2b\x7b\xac\x97\x3d\xb4\xc5\x3f\xfc\x8b\xb2\xc9\x0c\
+\x7a\x11\x51\xb6\x0b\x8a\x7e\xae\xe0\x6d\x7c\xde\xd8\x8b\x28\x49\
+\x2d\x04\xfe\x73\x8f\xbc\x62\x0b\x95\x92\xaa\xe0\xb6\x3b\xd3\x70\
+\xdb\x9d\x69\x70\xbb\x0c\x7c\x79\xcc\x8f\xd3\xc7\xfd\xa8\x3c\x74\
+\x16\x95\x87\xf2\xf0\xc6\x87\xf9\x18\x7d\xdb\x08\x7c\xfb\xa1\x19\
+\xf8\xd1\xb7\xb2\x91\xde\x2f\x66\x71\x7c\xbb\x08\xd6\x71\xaa\xe1\
+\x60\x9c\x46\x2f\x45\x12\x8c\x1a\x02\x4c\x2f\x76\x02\x58\x00\x97\
+\x88\xf8\x2c\x01\x67\x18\x74\x46\xe8\xb4\x39\xb2\x19\x71\x34\x4d\
+\x57\x34\x8b\xe7\xaf\x1a\xff\x09\x5b\x68\x26\x33\x65\x22\xb8\xf1\
+\xe2\xad\x00\x02\x04\x1c\x63\xb0\x03\xa4\x38\x58\xc0\xc1\x64\x5a\
+\x9f\x8a\x1c\xcc\x09\x00\x2e\x30\x32\x00\x54\x13\x68\xaf\x20\x7c\
+\xa1\x18\x5c\xb6\x64\x56\xd9\xae\xe8\xbf\xc4\xc7\x01\x2a\x35\xdf\
+\x16\xee\x83\xe9\xc5\xc7\x16\xac\x9c\x3c\x41\xb7\x79\xa7\x83\xe8\
+\xee\xa6\xc4\x8a\x71\x08\xa6\x42\xee\x65\x46\x05\x11\xf6\xd4\xab\
+\x23\x97\xb7\xd6\x00\x77\xc5\x9c\xca\x40\x76\x81\xfd\x23\x02\xb2\
+\x00\xbe\x09\xe1\xfd\x21\x8b\xde\x9d\x5a\xe2\x8c\xf5\xbb\xb1\x34\
+\xa5\xd7\x7f\xef\x85\x35\x59\x1f\x43\x60\x92\x00\xdd\x4e\x84\x4c\
+\x00\xb7\x00\xa8\x03\xe1\x18\x98\x1d\x4c\x8a\x43\x61\x38\x0c\x81\
+\xe8\x9d\x04\x18\x1f\x80\xcc\x4d\x73\x05\xd1\x7f\xb7\x76\xfe\xa5\
+\xb3\x4b\xce\x12\xe8\xd1\xec\x35\x59\xdf\x26\xe6\x2c\x06\x65\x82\
+\x90\x09\xc6\x48\x00\xe7\x19\xec\x50\xa0\x38\x98\xd8\x01\x01\x07\
+\x59\x45\x11\x00\x08\xa1\xa9\xb0\x58\x4c\xff\x53\xaa\xc7\xda\xae\
+\xcc\x42\x56\x68\x19\x31\xcf\x40\xb0\xa0\x38\x34\x71\xe4\x64\xde\
+\xb4\xf2\x68\xbd\x0d\xc3\x58\x14\x63\x9d\xc1\xca\x77\x4c\xf7\x0b\
+\x54\x44\xcb\x6e\xcc\x9b\x5d\x5e\x9d\x53\x60\x5f\x8d\xc8\x54\x78\
+\x40\xf8\xd3\xfc\xe6\xa9\xcb\xa0\x83\x40\x44\x39\x07\x2b\xa6\x0f\
+\x10\xc2\x0a\x27\x0c\xd3\xeb\xcb\x14\x50\xda\x7a\xae\x09\x70\x30\
+\xc3\x01\x62\x07\xb3\xe2\x30\x94\xa4\xd0\xff\x7b\xd3\x63\xad\x58\
+\x95\x98\x45\xb2\x4d\xcb\x07\xff\x35\x6f\xd5\xbd\xff\x54\x14\x31\
+\x9b\x80\x4c\x66\xce\x04\xd1\x6d\x00\x74\x30\x1f\x03\x29\x0e\x66\
+\x38\x48\xe1\x63\x2c\x78\x2f\x10\xbc\x1a\x5e\x50\x90\xf5\xa8\x0e\
+\x7a\x01\xc0\x0f\x40\x38\x09\xe0\x83\xeb\x07\xa4\xfd\x85\xd2\x1f\
+\x1b\xd1\xa1\x4d\x93\xe7\x3c\x97\x61\xda\xe9\xba\x3b\x5a\xf7\xf7\
+\x8b\x61\xbd\x26\x01\xe0\x5b\xf7\xdf\x85\xd5\xaf\x76\xbe\x91\xf0\
+\x4b\x85\x4f\x74\xa8\xf7\x63\x5f\x72\xe8\x0b\xef\xd8\xed\xb9\xfb\
+\x4d\x35\x3d\xdd\x11\x81\xa8\xb5\x76\x52\x00\x90\xb3\xc6\xbe\x35\
+\xb2\xf7\x22\xc0\x2f\xe7\xcd\x28\x8b\x35\x9d\xd6\xad\xcc\xdd\x3a\
+\xb9\x9f\xad\xd1\x7b\x10\x21\x6f\xc8\x04\xfc\x60\xc9\x8c\xd2\x3f\
+\xc7\xeb\x1c\xed\x79\x1c\xbb\xd2\xd5\x38\x3f\x81\x28\xbb\x20\xab\
+\x08\x21\x8d\x88\x19\x94\x9b\x3f\xa3\xe4\xf5\xae\x3c\x6f\x77\x73\
+\x35\x9f\xeb\xce\x9c\xab\xc7\x4e\x45\xb6\x25\x63\xb8\x79\x4f\xb3\
+\xbd\x87\x8f\x46\x39\xb2\xe3\x46\x67\xb4\xd6\xf8\x5d\xea\x29\x12\
+\xf9\x66\xdc\x15\xe6\xae\x1e\x37\x30\xd8\xc8\x36\x28\x67\xf5\x3d\
+\x5f\xb5\x35\x7a\xff\x80\xf0\xab\x8c\x3a\x9b\xed\xd2\xf2\x78\x9e\
+\x37\xd1\x8f\x63\xbc\xcf\xbf\x60\xe5\xe4\xf4\x79\x6b\x26\x64\x34\
+\x6f\xf4\x39\xef\xff\x26\xdc\x38\x6f\xb5\xfd\x75\x84\x77\xd7\xd7\
+\x92\x92\x44\xac\xde\xd1\xbd\xd6\xd5\x7c\xae\x3b\x73\xae\x1e\x3f\
+\x15\x19\x4b\xc6\x0d\x36\x1c\xde\x17\x7e\xf5\x5b\x57\xe7\xc5\xf1\
+\x1a\x07\xbe\x9a\x11\x7d\xb3\xd7\xf6\x1a\x9d\x31\x11\x45\xa7\xe5\
+\x16\x32\xd1\x18\x01\x25\xbe\xf5\x61\x52\xbb\x25\x2b\xb6\xef\xb0\
+\x81\xf7\x73\x0a\xec\x5e\x80\x1b\x40\x96\xe1\x91\xc7\x30\xd1\x4b\
+\xef\x4e\x75\xb4\xd9\x1e\xa9\x2f\x33\x92\x3d\xf7\x2b\x4c\xeb\xb2\
+\x0b\xb2\xfc\x39\xb0\xd7\x29\x96\x28\x45\xfd\x8c\x37\x9a\xca\x2a\
+\xa4\x6e\xa8\xd7\x5e\xb1\x0d\xbd\xde\x66\xda\x1d\x00\x00\xfe\xbe\
+\xb3\xf3\x1f\x56\x6f\x1f\x6a\xc7\x80\xe4\xc1\x6d\x1f\xd8\x07\xb1\
+\xcd\xe8\x7c\x1f\x31\xa9\xb3\x52\x23\xd6\xd4\x00\x00\x0c\xfc\x21\
+\x7f\x7a\x49\xef\xaf\xde\x8f\x9f\x7e\x40\xd4\x4e\x35\x2b\xf3\x67\
+\x96\xb5\xab\x46\x51\x4a\x8c\x5e\x1b\xd8\x92\x6c\x84\x6b\x87\x98\
+\x3b\x74\x7c\x56\xd1\xf9\x16\x6b\xc9\x96\x14\x3c\x7b\xd7\x2f\x3b\
+\x7d\x3f\xbd\x8d\xae\x33\x8a\x73\x2b\xe3\x9b\x86\x2a\xb5\x1b\x0b\
+\x9c\x6f\xca\xe0\x0b\xed\xbc\xed\x06\xa1\x88\x88\xa6\xe4\xcf\x28\
+\x35\x15\x77\x4b\x66\xcc\x96\x7a\x80\x0e\x23\x3c\xab\xd4\x07\xa0\
+\x9c\x88\x9f\xca\x9b\x51\xfa\x74\xa2\xa7\x5f\xa5\xd6\xf5\xda\xa9\
+\x48\x00\x18\x76\xa3\x0d\x17\x6b\xc3\x13\x48\xf6\x1f\x69\xb3\x75\
+\x5f\xbb\x8c\x1d\x36\x09\xf6\x9b\xa6\xa2\xf4\x4c\xcf\xda\x1f\xae\
+\x2b\x05\x54\x6e\x57\x1b\x9c\x9e\xa4\x5e\xf5\x4c\x49\x1b\x32\x24\
+\xec\x03\xa0\xe7\xc2\x90\xe8\xdb\xd6\x24\x58\xde\xcc\xd2\xd5\x00\
+\x56\x03\xc0\xfc\x55\xf7\x0d\x55\x92\x35\x45\x4e\x97\x75\x5c\xde\
+\x8c\x5d\xa5\x40\xb0\x40\xfa\xf9\x95\x13\xaf\x4d\x4a\x41\xca\x92\
+\x69\xbb\xce\xc9\x60\xd6\x73\xf4\xda\xac\x48\x00\x70\xd6\xeb\xf8\
+\x74\xb9\x39\x7b\xf1\xc3\x7f\x5b\x8c\xa7\x27\x3e\xd3\xe9\xfb\xf7\
+\x6a\x2e\x2c\xdf\xff\x16\x4a\xcf\xae\x07\xc7\xb9\xf5\x60\x4f\xd4\
+\x78\x49\xf7\xfc\xef\xdc\x3d\xed\xde\x93\x49\x92\x24\xa9\x2b\xf4\
+\xea\x2b\xb6\x01\x83\xac\xb8\x6e\x58\x12\xea\xce\x87\x7f\xc0\x5e\
+\xfa\xcf\x65\x71\x09\x6c\xa9\x49\xfd\x31\xf7\xee\x5c\x4c\x19\xf5\
+\x2c\x76\x57\x6d\x40\x9d\xa7\x1a\xb5\xce\xf3\xf0\xf8\x9d\x48\x4f\
+\x49\x47\xbd\x5a\x8d\x46\xb5\xef\x94\x05\x78\xdc\xc6\x99\x44\x8f\
+\x41\x92\x24\xa9\x57\x07\x36\x00\x18\x75\x5b\x2a\xea\xce\x87\x6f\
+\xd5\x52\xbe\xdf\x81\x3a\xd7\x05\x5c\xd7\x7f\x48\x8c\xdf\xea\x98\
+\x1b\x06\x7c\x15\x37\x0c\x30\x77\xc0\xf9\x9f\x8a\x45\x28\xfe\xb2\
+\x7b\xec\x3c\x70\x35\xf8\xbd\x46\x71\xdb\x47\x49\x92\x24\x75\xad\
+\x5e\x9b\x3c\xd2\x6c\xc4\xa8\x7e\x48\x4a\x0a\x9f\x3a\xd5\x35\xc6\
+\xbb\x9f\x98\x9a\xa9\x4b\x9d\xe4\xf7\x73\x87\x9a\xa0\x4a\x92\x24\
+\x75\x85\x5e\x1f\xd8\xac\x56\xc2\xa8\xdb\x53\x4d\xb7\xff\xa5\xb0\
+\x00\x86\xe8\x75\xb9\x0e\x09\xe3\xf7\x19\xa2\x08\x07\x36\x24\x7a\
+\x1c\x92\x24\x49\xbd\x3e\xb0\x01\xc0\xe8\x6f\xa4\xa3\x5f\x6a\xf8\
+\x9f\x5a\x5b\xeb\xc1\x2b\x1f\xc7\x6c\x7e\x2e\x75\x50\x5d\x8d\xb6\
+\x9b\xe3\xbd\x79\xa7\x24\x49\xd2\x15\xe8\x13\x81\x2d\xc9\x46\x18\
+\x37\xc1\xdc\xfc\xf8\xc3\xd5\xab\x70\xf6\xe2\xe9\x04\x8c\xa8\xf7\
+\x71\xbb\x02\xbf\x4a\xf4\x18\x24\x49\x92\x80\x3e\x12\xd8\x00\xe0\
+\x2b\x5f\x4f\xc1\x90\x61\xe1\xfd\x23\x55\xbf\x81\x79\xbf\xcf\x49\
+\xd0\x88\x7a\x8f\x4b\x17\xb4\xc6\x6d\xaf\x1d\x92\xd3\x90\x92\x24\
+\x75\x0b\x7d\x26\xb0\x01\xc0\xfd\x8f\x0c\x44\x7a\x7f\x4b\xd8\x6d\
+\x45\xbb\x0f\xe1\xe5\x8f\x5f\x4c\xd0\x88\x7a\x87\x0b\xb5\xda\x7f\
+\x24\x7a\x0c\x92\x24\x49\xcd\xfa\x54\x60\x4b\x49\x53\xf0\xcd\x27\
+\xaf\x45\x4a\x5a\xf8\x9f\xfd\xc7\xbf\xad\xc0\xe2\x7f\x2c\x4a\xd0\
+\xa8\x7a\xb6\x0b\x35\x81\x9a\xad\xaf\xec\x5f\x9c\xe8\x71\x48\x92\
+\x24\x35\xeb\x53\x81\x0d\x00\xd2\x07\x58\xf0\xcd\x69\xd7\x22\x7d\
+\xc0\xe5\x2b\x37\x66\x60\xf1\x47\x1f\xe0\x3f\x57\xfd\x26\x81\x23\
+\xeb\x79\x84\x00\x2e\xd6\xfa\xbf\x9f\xe8\x71\x48\x92\x24\x85\xea\
+\x73\x81\x0d\x00\xae\x19\x64\xc5\xe3\x4f\x5f\x87\xcc\xb1\x69\x2d\
+\x3b\x00\xb0\x00\x16\xe5\x2f\xc5\xe4\x57\x1e\xc4\xf1\xda\xf8\xec\
+\xdb\xd6\xdb\x9d\x3d\xee\xdb\x20\xd7\xd6\x24\x49\xea\x6e\xfa\x64\
+\x60\x03\x82\xf5\x6d\xe3\xee\xed\x8f\xe9\xdf\x1b\x82\x3b\xee\xbe\
+\x5c\x0e\x50\x5e\x71\x0a\xf7\x3c\x3f\x05\x8f\xbc\xf6\x30\x96\x6d\
+\xfe\x10\xaa\xd6\xae\xdd\xe3\x4d\x02\x86\x1f\x7e\x3d\xe6\x6e\xe8\
+\x3d\x5e\xed\xb9\xc0\xb9\xf5\x9e\xfd\x53\x13\x3d\x0e\x49\x92\xa4\
+\x48\xbd\xba\x09\x72\x47\x79\x3d\x06\xdc\x4e\x03\xee\x46\x03\x2e\
+\xa7\x01\xb7\x53\x87\xae\x2a\xb8\xe5\xe6\xa1\x18\x79\xfd\x0d\xb8\
+\x79\xe8\xcd\x18\x75\xfd\x28\xdc\x3a\xfc\x76\xa4\x25\xf7\x87\x57\
+\x73\xc2\x1b\x70\xc1\xa3\x39\xe1\x0e\x34\xe0\x82\xa7\x0a\x17\x3c\
+\x55\xa8\xf3\x56\xa1\xd1\xdf\x7b\x7b\x44\xba\x1a\x75\xb5\xf6\x48\
+\xfd\xc8\x4d\xbf\x3d\x51\x93\xe8\xb1\x48\x92\x24\x45\x92\x81\x4d\
+\xea\x90\xc6\x7a\xdd\x73\xc6\xa1\x4f\xd8\xf9\xdb\xbd\x95\x89\x1e\
+\x8b\x24\x49\x52\x34\xbd\xbe\x09\xb2\x14\x3f\x17\x6a\x02\x35\x35\
+\x0e\xd7\x9d\x3b\xdf\x3c\x56\x9b\xe8\xb1\x48\x92\x24\xc5\x22\x03\
+\x9b\xd4\xa6\x40\x40\x70\xd5\xe9\xc0\xaa\x73\x1e\xe3\xbb\x95\x6f\
+\x1e\xbb\xb2\x45\x47\x49\x92\xa4\xab\x44\x06\x36\x29\x26\x4d\x63\
+\xae\xad\x56\x2b\x5d\xb5\xda\x53\xdb\x16\x1d\x74\x24\x7a\x3c\x92\
+\x24\x49\xed\x21\x03\x9b\xd4\x22\x10\x10\xec\x71\x09\x97\xd7\xa5\
+\x3b\x3c\x1e\xf1\x37\xd7\xe9\xe4\xf7\xcb\xf3\xf6\x7a\x13\x3d\x2e\
+\x49\x92\xa4\x8e\x90\x81\xad\x0f\xd2\x34\xc1\x6e\xa7\x70\xfb\x3d\
+\xc6\x39\xd5\x2f\x0e\x05\x54\x51\xa2\x06\x78\x43\xf1\xeb\x07\x2a\
+\x12\x3d\x36\x49\x92\xa4\xce\x92\x81\xad\x17\xd3\x34\x66\x8f\xd3\
+\xf0\x78\xbd\xc6\x39\xd5\x27\x0e\xeb\x01\x2e\x55\x55\xde\xb8\xf3\
+\xf5\xca\xdd\x89\x1e\x9b\x24\x49\x52\x57\x91\x81\xad\x17\xd0\x75\
+\x66\x8f\xd3\xf0\x7a\xbd\xa2\x5a\xf5\x8b\xc3\xaa\xca\x65\xba\x46\
+\x1b\x8b\x72\xf7\x96\x24\x7a\x6c\x92\x24\x49\x57\x9b\x0c\x6c\x3d\
+\x88\xae\x33\x3c\x4e\xc3\xeb\xf3\x8a\x6a\xbf\x4f\x1c\xd1\x03\x62\
+\xb7\xd0\x78\xd3\x56\x1c\x28\x96\x9b\x7c\x4a\x92\x24\x05\xc9\xc0\
+\xd6\x0d\x19\x3a\xc3\xed\x32\x7c\x3e\x8f\x71\x5e\xf5\xf3\x51\x2d\
+\xc0\xbb\x35\x1d\x9b\x76\x88\xfd\x3b\x64\x00\x93\x24\x49\x6a\x9d\
+\x0c\x6c\x09\x24\x8c\xe6\x00\x26\x6a\xfc\x3e\xc3\x11\x50\xb9\x5c\
+\x57\xc5\x66\x8b\x72\x70\xdb\x96\x5c\xd6\x13\x3d\x3e\x49\x92\xa4\
+\x9e\x48\x06\xb6\xab\x40\x08\x86\xc7\x29\xfc\x5e\xb7\x51\xab\xaa\
+\xc2\x11\x08\x70\xb9\xae\x6b\x9f\x5d\x34\x2c\x5b\x2b\x73\x2b\x65\
+\xc1\xb3\x24\x49\x52\x1c\xc9\xc0\x16\x47\x42\x00\x6e\xa7\xae\xfa\
+\xbc\x5c\xeb\xf7\x19\xc7\x34\x55\xec\xd1\x03\xb4\x45\x81\xeb\xb3\
+\x2d\xb9\x27\xfd\x89\x1e\x9f\x24\x49\x52\x5f\x60\x05\x10\x00\x60\
+\x4b\xf4\x40\x7a\x12\x16\x80\xdb\xa5\xab\x3e\xaf\xb8\xe0\xf7\x8a\
+\xe3\x81\x00\x7f\x1e\x08\x88\x2d\xbe\xaa\x7e\x9b\xcb\xf3\xf6\xc8\
+\x82\x66\x49\x92\xa4\x04\xb2\xb2\xc0\x34\x28\x58\x45\x40\x5a\xa2\
+\x07\xd3\xdd\x30\x03\x1e\x97\x11\xf0\xba\x8d\x3a\xbf\x5f\x1c\x0f\
+\x04\xc4\xe7\x9a\xdf\xd8\x7a\x09\xca\xa6\xca\xdc\x4a\x77\xa2\xc7\
+\x27\x49\x92\x24\x99\x59\xdd\x85\xa7\x37\x5e\xf3\xf8\x57\x1e\x16\
+\x2c\xd6\x02\x18\x94\xe8\x01\x25\x02\x33\xe0\x75\x19\x9a\xd7\x23\
+\xea\xfc\x3e\x71\x42\x55\xf5\x0a\x4d\xc5\xb6\x00\xd4\x0d\x25\xb9\
+\x0e\x67\xa2\xc7\x27\x49\x92\x24\xb5\x9f\x15\x00\x1a\xd7\x9e\x2c\
+\xe9\xff\xe8\x88\x49\x50\x68\x03\x80\xeb\x13\x3c\xa6\x2e\xc3\x0c\
+\x78\xdd\x86\xe6\x75\x8b\x8b\x3e\xbf\x71\x32\xa0\x8a\x2f\x74\x15\
+\xdb\x9c\xf5\xd6\xc2\x8a\xb7\x2b\x1a\x12\x3d\x3e\x49\x92\x24\xa9\
+\xf3\x5a\x92\x47\x5c\x85\x5f\x56\x0e\x9c\x36\xf2\x7e\xc3\xc0\x46\
+\x00\xb7\x24\x70\x4c\x71\xe1\x71\x1b\xba\xd7\x63\x5c\xf4\xfb\xc4\
+\xc9\x80\x9f\xf7\x6a\x01\xb1\x5d\x13\x58\x5f\x9c\x5b\x79\x29\xd1\
+\x63\x93\x24\x49\x92\xba\x4e\x58\x56\x64\xc3\xa7\xa7\x4f\xa4\x3d\
+\x76\xf3\xfd\x8a\xc2\x1b\xc0\x18\x9d\xa8\x41\x75\x84\xd7\x23\x74\
+\xaf\x5b\xaf\xf7\x7b\xf9\xa4\x1a\x30\xf6\xa9\x1a\xb6\x8b\x06\x5f\
+\xa1\xdc\x0c\x53\x92\x24\xa9\x6f\x32\xa5\xfb\x7b\xd6\x9f\xaa\x1e\
+\x38\x6d\xe4\x24\xc3\xe0\xb5\x00\x4d\x48\xc4\xa0\xa2\xf1\x79\x84\
+\xe1\x71\x1b\xf5\x7e\x9f\x71\x2a\xe0\x17\xfb\x34\x55\x14\x59\x55\
+\xdf\xda\x4d\xbf\x3d\x51\x93\xe8\xb1\x49\x92\x24\x49\xdd\x47\xd4\
+\x3a\xb6\x86\x4f\x4f\xd7\x0f\x7b\x74\xd8\xc3\x1e\x4b\xf2\x2a\x30\
+\x1e\xb9\x9a\x03\xf2\x79\x85\xe1\x71\x19\x0d\xaa\x4f\x9c\x0e\xf8\
+\xc4\x7e\x4d\x13\x45\x8a\x6a\x5d\xb7\xf9\x37\x5f\x54\x5d\xcd\x71\
+\x48\x92\x24\x49\x3d\x53\xcc\x02\xed\xf3\x85\xe7\x3d\xf4\xf4\xe8\
+\x69\xe9\x6e\xd7\x5f\xc1\x78\x2a\xde\x27\xf6\xfb\x0c\xe1\x75\x8b\
+\x06\x9f\x57\x9c\x09\xa8\x62\xbf\x16\xe0\x9d\x01\x18\xeb\x76\xbe\
+\x7a\xf0\x74\xbc\xcf\x25\x49\x92\x24\xf5\x1d\xc4\xcc\xad\x1f\xf0\
+\x34\x59\xd2\x5c\x37\xe5\x11\xe8\x47\x00\x30\xe7\xb9\x0c\x24\xd9\
+\xa8\xdd\x27\x50\xfd\x42\x78\x5c\x46\xa3\xdf\x6b\x9c\x51\xfd\x7c\
+\x40\x0b\x88\x9d\x01\x95\xd6\xef\x5c\xb4\xff\x78\xe7\x86\x2e\x49\
+\x92\x24\x49\x66\x6d\xb6\xd4\xe2\x15\x6c\x00\x78\x7e\xc0\xd4\x11\
+\xf5\x0c\xfa\x45\xac\xe3\x02\x7e\x21\xdc\x6e\xc3\xe9\xf7\x88\xb3\
+\x7e\xd5\x38\xa0\x05\x50\x6c\xe8\xfa\xfa\x1d\xb9\x87\x8e\xc6\x75\
+\xc4\x92\x24\x49\x92\xd4\x8a\x76\xf7\x8a\x74\xae\xfb\xf2\xc5\x01\
+\x8f\x8d\xa8\x0f\xa8\xfc\xba\xdb\x69\xb8\xbd\x5e\xa3\x2a\xe0\x17\
+\x07\x02\x2a\x76\x09\x43\x14\x6e\xcf\xad\x3c\xd8\x95\x03\x95\x24\
+\x49\x92\xa4\xf6\xf8\x7f\x5e\xef\x4b\xab\x90\x53\xcc\xdc\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x0d\xda\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x9b\x00\x00\x00\x9b\x08\x06\x00\x00\x00\x75\x61\xe9\x8c\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x09\x70\x48\x59\x73\x00\x00\x1c\x20\x00\x00\x1c\x20\x01\xcd\x0f\
+\x9b\x9e\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd8\x09\x11\x0f\x0b\
+\x3b\x8e\xaf\x11\xbb\x00\x00\x0d\x6c\x49\x44\x41\x54\x78\xda\xed\
+\xdd\x79\x90\x14\xd5\x1d\x07\xf0\xef\xeb\xee\xb9\x97\x3d\x58\xdc\
+\x65\x97\x5d\x90\x43\x41\x44\x40\x51\x2e\xc5\x12\x8c\x15\xd4\x78\
+\x25\x6a\x2a\xc6\x23\xa9\x44\x4d\x8c\x7f\x24\x50\xa9\x32\xc6\x24\
+\x9a\x90\x32\x52\x89\x65\x2a\x1e\xf1\x0f\xad\x58\x6a\xa9\xd1\x32\
+\xc1\x24\xe5\x5d\x46\x2d\x90\x2b\x22\x0a\x72\xec\x02\xbb\xb0\xd7\
+\xcc\x1e\xd3\x73\xf4\x74\x4f\x1f\xef\xe5\x8f\x5d\xd6\x1d\x7a\x50\
+\xae\xe9\x85\x9e\xdf\xb7\x8a\x82\xaa\xf7\xb6\x67\xe6\xcd\x87\xf7\
+\x5e\xbf\x7e\xdd\xcb\x00\x2c\x04\xb0\x18\x14\x4a\x89\x23\x03\xe8\
+\x00\x20\x00\x34\x53\x73\x50\x4a\x8d\x0d\x04\x8e\xe2\x25\x36\x02\
+\x47\xf1\x14\x1b\x81\xa3\x78\x8a\xed\x20\x38\x10\x38\x8a\x17\xd8\
+\x08\x1c\xc5\x53\x6c\x04\x8e\xe2\x29\x36\x02\x47\xf1\x14\x1b\x81\
+\xa3\x78\x8a\x8d\xc0\x51\x3c\xc5\x46\xe0\x28\x9e\x62\x23\x70\x14\
+\x4f\xb1\x11\x38\x8a\xa7\xd8\x08\x1c\xc5\x53\x6c\x04\x8e\xe2\x29\
+\x36\x02\x47\xf1\x14\x1b\x81\xa3\x1c\x71\xd8\x09\x3c\xd6\xa2\xa1\
+\x3f\x94\xa3\xcd\xa4\xd8\x14\x34\x46\xcf\x85\xcc\x6a\xea\x9a\xc2\
+\xe1\x99\xb3\x2a\xa2\x4d\x93\xc2\x91\x50\x58\x0a\x58\x06\xcf\xea\
+\xaa\x95\xd0\x55\x7b\x40\xed\xd2\x7b\x7a\x5b\xb4\x9e\x54\xa7\x91\
+\xea\x6f\xcf\x65\xac\x9c\x63\x97\x2b\x36\x02\x77\xb4\x09\x48\x01\
+\x69\x7e\xed\x75\xa2\x3a\xb4\x40\x38\x02\xf3\xce\xaf\xc4\xfc\x05\
+\x95\x90\x65\xc0\xb2\x04\x84\x28\xfe\x63\xdc\x11\x96\xa5\x3b\xa9\
+\x5c\xd2\x4a\xe8\xaa\xdd\x9f\xea\xd6\xe3\xbd\xad\x5a\x8f\x7a\xc0\
+\x50\xd5\x4e\x5d\x33\xd2\xb6\x59\x0e\xd8\x08\xdc\xd1\x34\xfe\xc5\
+\xf5\xb7\xb0\xca\xc0\x5c\x6e\x09\xcc\x9a\x53\x81\xa5\x4b\x6b\x60\
+\x59\x1c\x9c\x1f\xdb\xf1\xb8\x23\x2c\x3b\xcf\xb3\x66\xce\x4e\x6b\
+\xfd\x56\x4f\xaa\xcb\xe8\xce\xf4\xe4\x07\x12\x2d\xd9\xde\xde\x56\
+\x4d\x1d\x6d\x84\xac\x44\xc7\x25\x70\x5f\x95\x19\x55\xb3\xa5\x69\
+\x63\x6e\xe3\x5c\x20\x1a\x91\x71\xfd\x0d\x75\x88\xc5\x64\x38\x8e\
+\x38\xe1\x2f\xc5\x1d\xe1\xd8\x79\x9e\x36\x73\x76\x3a\xdb\x67\xc5\
+\xd3\x3d\x46\x77\xba\xdb\xe8\xef\x6b\xd5\x7a\x13\xad\x9a\x6a\xa4\
+\xbc\x41\xa8\x94\xe8\xb8\x1f\x8d\x40\x47\x29\xf6\xbf\xbc\x3e\x32\
+\x0f\x00\xe0\x00\x4d\xcd\x21\x54\x56\xca\x30\x4d\x51\x92\xd7\x92\
+\x64\x26\x07\xa3\x72\x4d\x30\x2a\xd7\x54\x8c\x0b\x4d\x1a\x3f\xa3\
+\x02\x00\x20\xb8\x70\x4c\x83\x67\xac\x9c\x9d\x32\xd2\x76\x52\x4f\
+\xda\xfd\xf1\x56\xad\x2b\xd9\x9e\xeb\x4d\x75\xe9\xe9\xe4\x01\x3d\
+\x2b\x1c\x88\x93\x1d\x1b\x81\xfb\xaa\x84\xa5\xc6\xc1\x6f\x5c\xa0\
+\xaa\x4a\x19\x1a\x64\x84\xb7\xe0\x25\x26\x87\xa2\x72\x75\x28\x2a\
+\x57\x57\x8c\x0b\x4d\x02\x80\xe6\x79\x55\x00\x20\x1c\x9b\x9b\xb9\
+\x7e\xab\xe3\x85\x3b\xb7\x3e\x7e\xc2\xd0\x97\xf8\xf3\x7c\x34\x02\
+\x1d\xa5\xa0\xe5\x59\xf8\xe0\x3f\x65\x99\x9d\x6c\xef\x8e\xc9\x8a\
+\x14\x8a\xd4\x04\x1a\x4e\xe8\x47\xf6\xe0\x8d\x13\x38\x4a\xc9\x87\
+\xd1\x43\xc1\x09\xd0\x9d\xf7\xc7\x15\x59\x66\x90\x24\x81\x5c\xde\
+\x80\x69\xd9\x90\x65\x09\x12\x93\xc0\x05\x87\x10\x1c\xb2\xa4\x20\
+\x20\x87\xc0\xc0\xca\x1a\x1b\x00\xac\x1f\xfa\x9b\xc0\x1d\xed\x98\
+\xc6\x80\x60\x50\x42\xbc\x57\xc3\x9e\xbd\x3a\xce\xaa\x3f\x0f\xcb\
+\xe7\x5e\x8a\xa9\xe3\x4f\x47\x34\x1c\x41\xde\xce\xa1\x27\xdb\x8e\
+\xed\x89\x8f\xb0\x77\xe0\x53\x98\xdc\x42\x48\x8e\x14\x1f\xca\x24\
+\x80\x73\x0e\x2e\x04\x18\x24\x30\xc6\x7c\x89\x8d\xc0\x1d\x23\x34\
+\x59\x96\xb0\x76\x7d\x02\x03\x1d\x35\x58\x7d\xeb\x6a\x7c\xf3\xc2\
+\xe5\x90\x8b\x5c\x68\xbc\x7a\xc6\x1d\x68\xed\xdf\x8a\x35\x3b\x9e\
+\xc0\xa7\xf1\xb5\x08\x2b\x51\x57\x1d\x5d\x77\x10\x0a\x84\x10\x0e\
+\x2a\xc8\x5b\x39\x08\x21\xc0\x98\xe4\xc9\x67\x91\x46\xa1\xfd\xd6\
+\x03\x58\x47\x8c\x8e\xb0\x37\x50\x18\x3e\xf8\x30\x81\xfd\xdb\xa2\
+\x58\xf3\xcb\xe7\x71\xc3\xc5\xc5\xa1\x1d\xcc\xb4\xda\x39\x58\x71\
+\xd1\x13\x58\x36\xe5\x46\xe8\x56\xb6\x60\x08\x4e\xa5\x6c\x3c\xf3\
+\x6c\x1b\xce\x8b\xfe\x00\x7f\xbc\xe2\x35\xfc\x7a\xd9\x0b\x98\x58\
+\x7d\x16\x2c\x27\xef\x5b\x6c\x04\xee\x08\x13\x08\x30\xec\xda\xad\
+\x61\xdb\xe6\x2c\x9e\xfe\xf9\xc3\x98\x3d\x79\xba\xab\x4e\x3a\x97\
+\xc5\xfe\x44\x0f\xf8\x88\xcb\x0e\x0c\x0c\xb7\xcc\xbd\x17\xe7\x35\
+\x2e\x85\x61\xe7\x86\xb0\x01\x3d\x71\x03\xb0\x22\x58\x74\xe6\x22\
+\x84\x58\x15\x9a\x2a\xa7\x21\x16\x18\x03\x2e\xb8\xaf\xb1\x11\xb8\
+\x23\x18\x3e\x2d\x4b\x60\xed\xba\x38\xae\x5d\xf2\x0d\x5c\xb5\xe0\
+\x32\x57\x9d\x1d\x7d\x1b\x70\xff\xbb\xdf\xc1\xa5\xab\x96\xe2\xfa\
+\xdf\xff\x08\xa9\x5c\x66\xc4\xca\x8a\x8c\x1b\x67\xad\x40\x45\xb0\
+\x0a\x5c\x38\x00\x80\x8e\xce\x1c\x26\x8f\x9f\x88\xe9\x4d\x53\x47\
+\x67\xb5\x67\x94\xdb\x94\xc0\x7d\xc9\xf0\xd9\xbe\x5f\x87\x3e\x00\
+\xdc\x7d\xcd\xf7\x5c\xe5\x99\xfc\x00\x9e\xda\xf4\x1b\xa8\x4e\x1b\
+\x16\x2f\x89\xe2\x9f\xeb\x5f\xc0\x8a\x27\xef\x2f\xa8\xd3\x58\x39\
+\x05\x0b\x9b\x2f\x07\x64\x13\xba\x69\xa2\x6d\x6f\x02\xf3\xa6\x9e\
+\x8d\x50\x20\x38\x5c\x87\x83\x43\x80\xc3\x8b\x05\x65\xe9\x24\x68\
+\x57\x02\x77\x98\x9e\x6d\xe7\xae\x34\xa6\x36\x4f\xc7\x85\x33\xe7\
+\xbb\xca\x37\x77\xbe\x83\xb8\xd6\x8e\x00\x8b\xa2\x6a\x4c\x10\xf3\
+\x17\x36\xe1\xb9\xb7\x5f\x41\x6b\xd7\xbe\x82\x7a\x17\x4c\x58\x8e\
+\xb6\xbd\x26\x14\x6d\x12\x16\xcd\xf8\x1a\xae\x5b\x72\x45\x21\x6a\
+\x36\x78\x8e\x68\x39\xe6\x70\x0f\xe8\x67\x6c\x04\xae\x08\x34\x5d\
+\xe7\x38\xd0\x99\xc5\x45\xb3\xce\x47\x38\x18\x72\xd5\xd9\x93\xfc\
+\x0c\x8c\x0d\x9e\x29\x38\x8e\x40\x63\x43\x04\xa6\x91\xc2\xda\xed\
+\x9b\x0a\xea\x9d\x5e\x75\x36\xb6\xae\x53\x30\x81\x5d\x82\x0f\x57\
+\xaf\xc1\x4d\x97\x5c\x5b\x50\x7e\xf3\xdc\x7b\xf1\xc0\xb2\x97\x70\
+\xdf\xd2\xe7\x30\xb3\x6e\x21\x4c\xc7\xf0\xcd\xd2\x07\x2d\x8b\x1c\
+\x49\x0f\x20\x31\x64\x32\x36\x78\xc6\xc6\xec\xc9\x67\x15\xad\xd3\
+\xaf\x75\x41\x1e\xc2\xc6\x39\x10\x8b\x49\x40\x80\xe1\xf3\x03\x2d\
+\x05\xf5\xc2\xc1\x30\xce\x99\x72\x36\x2c\xc7\x2a\x7a\x9c\xda\x68\
+\x03\x6a\xa3\x83\x57\xa5\xc6\x46\xc6\xc3\x29\x61\xef\x26\x9d\x64\
+\xed\x4c\x3d\x1c\x06\x17\x5e\xb3\x59\x07\xe0\x12\x26\x37\x4c\x74\
+\x95\x9b\x8e\x01\x35\xdf\x07\x69\x08\x9b\x10\x02\xa1\x90\x04\x39\
+\xa6\x60\x77\xe7\x3e\x57\xfd\x85\x33\xe7\x42\xcd\x25\x61\x98\x79\
+\x88\x43\x76\x64\x0a\x6f\xa6\x6b\x27\x5d\xcf\x46\x3d\xdc\x88\x61\
+\x34\x9d\xb6\x00\x25\x84\x09\xb5\xf5\xae\xf2\xbc\xad\xc3\xb0\xb4\
+\x82\xd5\xff\x40\x40\x42\x34\xa2\x20\xa1\xf6\xbb\xea\x5f\xbd\x6c\
+\x36\x6e\x7b\xe4\x2e\xfc\xeb\xce\xf7\xb1\xf5\xb1\xd7\x51\x19\x1d\
+\x33\x5c\xf6\xec\x96\x3f\xa0\x25\xb1\x1d\x95\xe1\x1a\xf4\x99\x6d\
+\x08\xc9\xe1\xb2\xc2\x46\xe0\xc0\x90\xd5\x6c\x28\xa1\x28\xc6\x55\
+\x8e\x75\x95\xda\xdc\x82\x23\x9c\xe1\x6b\xa0\x42\x0c\xae\xa3\x85\
+\x82\x12\x72\xa6\x7b\x81\xb6\x26\x56\x03\xc1\x6c\x24\xd3\x49\xf0\
+\x43\x7a\xb6\xb8\xbe\x07\x7b\xb2\xeb\x11\xd4\xc3\x50\xa4\x20\x64\
+\x16\x28\x59\x57\xa7\x9c\xc4\x2d\x5e\xd6\xe0\x2c\x8b\x23\x1c\x08\
+\x61\x4c\xa4\xc2\x55\xe6\x08\x1b\xa2\xc8\xdc\x4a\x56\x24\x58\xb6\
+\x05\x2e\x38\xa4\x11\x97\xa0\x82\x72\x14\x12\x53\x20\x15\xb9\xf4\
+\xa0\xb0\x20\x82\x52\x64\xc4\xb5\xd4\xd2\x8d\xa9\xd2\x49\xde\xe6\
+\x65\x3b\x87\xe3\x5c\x40\x92\x24\xc8\x52\x91\x6b\x53\x42\x14\x25\
+\x21\x49\x0c\x8e\xe3\x80\xf3\xc2\x52\x99\x29\x05\xf8\x46\x6d\x2e\
+\x7a\x0a\xb4\x7b\x79\x82\x63\xc7\xf6\x23\x83\x27\x00\xe2\x78\x0f\
+\x55\xb6\xd8\xca\x12\x9c\x24\x31\x38\xdc\x81\x5d\xec\xd6\x50\x56\
+\x7c\xc7\x1a\xe7\x02\xb2\x2c\xbb\x76\x71\x70\x70\xd7\x59\x28\x61\
+\x23\x70\x5f\x9c\x5d\x2a\x12\xf2\x96\x89\x8c\xa1\xb9\xe7\x66\x4c\
+\x19\x5e\xd0\x2d\x98\xcb\x71\x01\x59\x92\x21\x1d\xb2\x47\xcd\x8b\
+\xab\x03\x7e\xc3\x56\x56\xe0\xa2\x51\x05\x76\x5e\x47\x32\xa3\xba\
+\x21\xca\x41\xc8\x4c\xc6\xc8\x99\x9b\x10\x80\x6d\x73\x84\x02\x01\
+\xd7\x86\x48\xc3\xd6\x86\xea\x32\xc2\x46\xe0\x0e\x9d\xff\x0b\x54\
+\x55\x2a\x80\x9d\x47\x4f\xb2\xd7\x55\x1e\x94\xc3\x88\x04\x2a\x86\
+\x87\x46\xc6\x06\x2f\x59\xe5\xf3\x1c\xb1\xb0\x7b\xc3\x64\x26\x9f\
+\xf4\x6c\x1b\x91\xdf\xb0\xf9\x1e\x9c\x10\x40\x2c\x2a\x03\x8c\x63\
+\x7f\xa2\xb3\x28\xb6\xca\xd0\xd8\x82\xa1\xd1\xb6\x05\x72\xba\x8d\
+\xc6\xda\x3a\x57\xfd\xfe\x5c\x37\x84\xe0\xa3\x7e\xa2\x20\x9d\xc2\
+\xdf\x89\x6f\xc1\x71\x2e\x10\xab\x90\x81\x30\xc3\xce\x8e\x3d\x45\
+\xeb\x8c\x8d\x8c\x1f\xc6\x26\x49\x0c\x86\xc1\x01\xdd\xc6\x99\x8d\
+\x93\x5d\x75\xdb\xd5\x1d\xc5\x97\x50\xe0\xed\x9d\xaa\xd2\x29\xfe\
+\xbd\xf8\x12\x1c\xe7\x40\x34\x26\x63\x5c\x5d\x04\x9b\x77\x7f\x5a\
+\xb4\x4e\x53\xd5\xb4\xe1\xa1\x91\x31\x40\xd3\x1c\xc0\x02\x66\x34\
+\x17\x6e\x8c\xd4\xad\x2c\xba\xb3\xfb\x86\xae\x0c\x14\xc3\x26\xc0\
+\x18\x30\x68\x51\x10\xb6\x72\x04\x27\x4b\x0c\xd3\xa6\x54\x62\xd3\
+\xae\xad\xd8\xdd\xb9\xd7\x55\x3e\xab\x7e\x31\xc2\x4a\x6c\xf0\x16\
+\x3e\x99\x61\xff\x01\x0d\x15\x95\x75\x58\x32\x6b\x41\x41\xbd\xd6\
+\x81\x4f\xd0\xab\x75\x42\x91\x15\x70\x21\x5c\x4b\x20\xe3\xa2\x0d\
+\xe8\x4b\x27\xd1\xd5\x93\x05\xb7\x15\x94\xf2\x66\x2b\xc9\x27\xdf\
+\x8d\xef\xc0\x39\x8e\xc0\xd4\xa9\x31\xd8\xb6\x8a\x97\x3f\xf8\xb7\
+\xab\x7c\x62\xd5\x0c\xcc\x69\xb8\x18\x39\x27\x85\x78\x9f\x86\x2d\
+\x1b\x3b\xf1\xc3\x2b\x6e\xc2\x84\xda\xc2\x9b\xd8\x37\x76\xbc\x05\
+\x87\xdb\xa8\x88\x05\xa0\x19\x1a\x92\xd9\x54\x41\xf9\xd7\xa7\xdd\
+\x86\x4b\xeb\x57\xe0\x8e\xd9\x8f\xe2\xaa\x19\xb7\x23\x6f\x1b\x84\
+\xad\xdc\xc0\x39\x8e\x40\x4d\x8d\x82\xe9\xb3\x6a\xf0\xd8\x9a\xbf\
+\x21\x91\x72\xef\xe6\xb8\x65\xee\x3d\xb8\xa0\xfe\x1a\xb4\x6f\xaf\
+\xc6\x4f\xae\x5d\x89\x07\xbf\x7f\x8f\x6b\xae\xb6\xb9\xf3\x6d\x28\
+\x2c\x8c\x86\xf1\x61\x58\x39\x15\x1b\x77\x6d\x29\xa8\x33\x7e\xcc\
+\x44\xfc\xf4\xf2\x9f\xe1\xca\xf9\x4b\x51\x1d\xab\x2e\xe9\x7a\x9c\
+\x9f\xb0\xf9\x10\x1c\x30\x7f\x7e\x2d\xe2\xd9\x36\xdc\xf7\xf4\x43\
+\xae\xf2\xaa\xd0\x69\xb8\x7b\xd1\x43\xf8\xef\x03\xef\xe2\xd1\x1f\
+\xff\x16\xe1\xe0\x17\xdb\x83\x1c\x6e\xe3\xef\xdb\x1e\x81\x6e\x65\
+\x21\x38\x43\x5d\x7d\x08\xcd\xd3\x63\x58\xfd\xe2\x93\x48\x69\x5a\
+\xd1\xd7\x53\xf5\x44\x49\xef\xa6\x97\xe1\xbf\x9c\x12\xbf\xa0\x97\
+\x9d\x51\xb9\x8c\x49\x2c\x20\x1c\x81\xa6\x89\x61\x34\x36\x86\x5c\
+\xcf\x66\x13\x02\x88\x46\x24\x34\x36\xc6\xf0\xd2\x1b\x1f\x42\x42\
+\x04\x17\x9f\x53\x78\x3f\x82\x24\x31\x28\x87\xec\xe6\x70\xb8\x8d\
+\x67\x3e\x59\x85\x8d\x1d\x6f\x22\xac\xc4\x86\x4f\x22\xa6\x4c\x1e\
+\x83\xae\xcc\x7e\x6c\x68\xd9\x80\x70\x8c\x23\x65\x75\x63\x6f\xf2\
+\x33\x6c\xe8\x78\x1d\xaf\x7e\xfe\x18\xfe\xd7\xf5\x2e\x14\xe9\xe0\
+\x13\x95\x06\x1f\x2e\xb8\xe5\xe5\xae\xf7\x4e\xd4\x67\x56\xe0\xcf\
+\xf8\x66\x7b\x92\x65\x09\x34\x4d\x88\xe0\x5b\x37\x4c\xc0\x9f\xdf\
+\x79\x10\x7b\xe3\x6d\xb8\xff\xbb\x2b\x31\xb1\xce\xfd\x80\x21\x21\
+\x04\x76\xf5\x6d\xc6\x3f\x76\x3c\x8e\x9d\xbd\x9b\x10\x19\x82\x76\
+\xf0\x0c\x57\x96\x81\x8b\x16\xd6\x23\x97\x6f\xc5\x8b\x9f\xff\x0e\
+\xb2\x24\x43\x0c\x5d\x37\x55\xa4\x00\x14\x39\x58\xd2\x9e\xcd\xaf\
+\xd8\x7c\x05\xce\xb4\x38\xc6\xd5\x86\x70\xfd\x75\x13\xb0\xef\xc0\
+\x6b\xb8\x6c\xd5\x1b\x98\x3d\x7e\x09\x9e\x59\xf9\x30\xa2\xa1\x2f\
+\x9e\xe9\xd1\x97\xeb\xc4\x9f\xd6\xde\x05\xd3\x31\x86\x7b\xb4\x43\
+\x7b\x4a\xd3\xe4\x50\x58\x08\x4a\x91\x9b\x68\x4a\x1d\x09\xfe\x8e\
+\x6f\xe6\x70\xb6\x2d\x20\x04\xc3\x59\x67\x8c\x43\x43\x93\x8d\x57\
+\x5e\x7f\x1e\x9b\x5b\x3e\x29\xa8\x73\x5a\xac\x09\x67\xd7\x2d\x80\
+\x61\x6b\xc8\x0f\xdd\x09\x7f\x9c\x11\x84\xad\x4c\xc1\x09\x01\x18\
+\x06\x47\x73\x73\x05\x10\x95\xf1\xe6\xe6\xf7\x5d\x75\x6e\x3d\xf7\
+\x57\xb8\x79\xce\x2f\xb0\xb0\xf9\xca\x21\x2b\xc7\xee\xc5\x31\xb9\
+\x4e\xd8\xca\x18\x1c\xe7\x83\x8f\x45\x3d\x63\x66\x35\x9e\x7d\xfb\
+\x55\xd7\xba\xd9\xd8\x48\x3d\xae\x9a\x71\x3b\x96\x9f\x79\x2b\x84\
+\x00\x8e\x67\x1b\x5b\xb6\xcf\xec\x26\x6c\x65\x0e\xce\x71\x80\xc5\
+\x8b\xc6\xa1\xd7\xd8\x87\x95\x7f\x5d\x55\x92\x51\x90\x31\x60\xf7\
+\x07\x7d\x9b\x68\xe9\xc3\x07\xcb\x22\x47\xb2\xf4\xf1\x65\xc3\x69\
+\x38\x2c\x61\xda\x19\x55\x78\x7f\xdb\x06\xac\xdb\xbe\x05\x0d\x63\
+\x4f\x43\x24\x14\x80\x0d\x13\x39\x2b\x8d\x3d\x03\x9f\x61\x6b\xcf\
+\x07\x43\xbb\x7a\x8f\xfe\x0c\xb3\x67\x57\x7a\xe3\x87\x7f\x69\x7b\
+\xef\x44\x7e\x66\x05\xe5\x17\x5f\x9c\xa5\xda\xb6\x40\x45\x4c\xc6\
+\x95\xcb\x1b\x31\x90\xfa\x18\x8f\x7d\x7c\x17\xc6\xee\xae\x46\x40\
+\x09\xc0\x72\xf2\x30\x1d\x63\xf8\x26\xe6\xa3\x9b\x17\x0a\xd1\xbd\
+\x3d\xb3\xee\xad\x07\x5b\x5e\xa3\xa5\x0f\x02\x37\x62\x38\x15\x70\
+\x1c\xa0\x32\x16\x03\x20\x60\xf2\x1c\xf2\xe6\xe0\xf3\xd9\x8e\xe4\
+\x69\x92\xdc\x11\xb6\xa5\x3b\x29\x5d\xb5\x12\xb9\xa4\xd5\x9f\xea\
+\x36\xe2\xfb\x37\xab\x7b\xdb\x37\xaa\x3d\xa5\x78\xbf\xe5\x8a\xcd\
+\x37\xe0\x0e\x0e\xab\x00\x3b\x6c\x4f\xe6\x58\xdc\x30\x73\x4e\xca\
+\xd4\x1c\x55\x4f\x59\x03\xa9\x6e\xa3\xa7\xb7\x45\xeb\x4a\x1e\xd0\
+\xd5\xfe\x7d\xb9\xb4\xa9\x79\xf3\x0b\xd7\xca\x19\xdb\xe8\x82\x13\
+\x82\x9f\xe8\x7b\x02\x1c\x9b\x9b\x96\xce\xd3\xf9\xac\x9d\xcc\xc4\
+\xf3\x9d\xa9\x6e\x23\xa1\x76\x18\x7d\xf1\x1d\x99\xde\x64\x87\x9e\
+\x75\xcc\xd1\xdd\x1b\x5e\xee\xd8\x46\x0f\x5c\x47\xee\x3f\x62\x52\
+\xec\x86\x63\x59\x11\x70\x6c\x6e\xda\x06\xcf\x98\x9a\xa3\x66\x12\
+\xf9\xae\x54\xb7\x11\x57\x3b\x8c\xfe\xf8\xce\x4c\x7c\xa0\x5d\xcf\
+\xda\x79\xee\x9c\x8c\x0d\x4d\xd8\x46\x09\x9c\xd8\xa6\x6e\x84\xc1\
+\x33\x38\xbd\xe2\x16\x00\xa1\xc3\xcd\xa9\xcc\x9c\xa3\xea\xaa\x15\
+\xcf\x25\xad\x81\x54\xa7\xd1\x9d\x68\xc9\x76\xab\x1d\x7a\x4a\xed\
+\x34\x34\xaf\x86\x3f\xc2\xe6\x87\x1e\xae\x35\xbd\x03\x79\xe7\x29\
+\xfb\x82\x31\xdf\x36\xd2\x96\x93\xee\x37\x07\x0c\xd5\xee\x57\x3b\
+\x8d\x9e\xde\x3d\x5a\x77\xf2\x40\x2e\x35\xd0\xa6\xa7\xcd\x53\xec\
+\x97\xd8\x1e\x76\xb9\x87\x8c\xb9\xb2\x10\xf4\x40\xc2\x92\x44\xa6\
+\x26\x70\xcf\xa6\x70\x0a\xec\x87\x23\x6c\x04\x8e\x42\xd8\x08\x1c\
+\x61\x23\x70\x84\x8d\x42\xe0\x08\x1b\x81\x23\x6c\x04\x8e\x42\xd8\
+\x08\x1c\x61\x23\x70\x84\x8d\x42\xe0\x08\x1b\x81\x23\x6c\x14\x02\
+\x47\xd8\x08\x1c\x61\x23\x70\x84\x8d\x42\xe0\x08\x1b\x81\x23\x6c\
+\x14\x02\x47\xd8\x08\x1c\x61\x23\x70\xd4\x14\x84\x8d\xc0\x11\x36\
+\x02\x47\xd8\x28\x04\x8e\xb0\x11\x38\xc2\x46\x21\x70\x84\x8d\xc0\
+\x11\x36\x02\x47\xd8\x28\x04\x8e\xb0\x11\x38\xc2\x46\x21\x70\x84\
+\x8d\xc0\x11\x36\x4a\xf9\x80\x23\x6c\x04\x8e\xb0\x11\x38\xff\x81\
+\x23\x6c\x04\x8e\xb0\x51\xfc\x07\x8e\xb0\x11\x38\xc2\x46\xf1\x1f\
+\x38\xc2\x46\xe0\x08\x1b\xa5\x28\x38\x9c\xca\xe0\x08\x1b\x81\x23\
+\x6c\x14\xff\x81\x23\x6c\x04\x8e\xb0\x51\xfc\x07\x8e\xb0\x11\x38\
+\xc2\x46\xf1\x1f\x38\xc2\x46\xe0\x08\x1b\xc5\x7f\xe0\x08\x1b\x81\
+\x23\x6c\x14\xff\x81\x23\x6c\x04\x8e\xb0\x51\xfc\x07\x8e\xb0\x11\
+\x38\xc2\x46\xf1\x1f\x38\xc2\x46\xe0\x08\x1b\xc5\x7f\xe0\x08\x1b\
+\x81\x23\x6c\x14\xff\x81\x23\x6c\x04\x8e\xb0\x51\xfc\x07\x8e\xb0\
+\x11\x38\xcf\xc0\x11\x36\x8a\x67\xe0\x08\x1b\xc5\x33\x70\x84\x8d\
+\xe2\x19\x38\xc2\x46\xf1\x0c\x1c\x61\xa3\x78\x06\x8e\xb0\x51\x3c\
+\x03\x47\xd8\x28\x9e\x81\x23\x6c\x14\xcf\xc0\x11\x36\x8a\x67\xe0\
+\x08\x1b\xc5\x33\x70\x84\x8d\xe2\x19\x38\xc2\x46\xf1\x0c\x1c\x61\
+\xa3\x78\x06\x8e\xb0\x51\x3c\x03\x47\xd8\x28\x9e\x81\x23\x6c\x14\
+\xcf\xc0\x11\x36\x8a\x67\xe0\x08\x1b\xc5\x33\x70\x84\x8d\xe2\x19\
+\x38\xc2\x46\xf1\x0c\x1c\x61\xa3\x78\x06\x8e\xb0\x51\x3c\x03\x47\
+\xd8\x28\x9e\x81\x23\x6c\x14\xcf\xc0\x11\x36\x8a\x67\xe0\x08\x1b\
+\xc5\x33\x70\xff\x07\x60\xd3\xdf\x18\x28\x5f\x8f\x64\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x50\xc3\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x03\x20\x00\x00\x02\x58\x08\x03\x00\x00\x00\xad\xa8\x72\x42\
+\x00\x00\x01\x6b\x50\x4c\x54\x45\x41\x41\x41\x23\x23\x23\x6b\x6b\
+\x6b\x35\x35\x35\x57\x57\x57\x36\x36\x36\x62\x62\x62\x15\x15\x15\
+\x54\x54\x54\x59\x59\x59\x58\x58\x58\x55\x55\x55\x56\x56\x56\x5a\
+\x5a\x5a\x67\x67\x67\x5b\x5b\x5b\x37\x37\x37\x5c\x5c\x5c\x5d\x5d\
+\x5d\x5e\x5e\x5e\x38\x38\x38\x5f\x5f\x5f\x60\x60\x60\x39\x39\x39\
+\x61\x61\x61\x64\x64\x64\x63\x63\x63\x27\x27\x27\x65\x65\x65\x66\
+\x66\x66\x68\x68\x68\x33\x33\x33\x69\x69\x69\x6a\x6a\x6a\x34\x34\
+\x34\x30\x30\x30\x2d\x2d\x2d\x32\x32\x32\x2b\x2b\x2b\x25\x25\x25\
+\x2e\x2e\x2e\x31\x31\x31\x24\x24\x24\x2f\x2f\x2f\x2c\x2c\x2c\x2a\
+\x2a\x2a\x29\x29\x29\x26\x26\x26\x28\x28\x28\x1a\x1a\x1a\x22\x22\
+\x22\x21\x21\x21\x1d\x1d\x1d\x20\x20\x20\x1b\x1b\x1b\x1e\x1e\x1e\
+\x1f\x1f\x1f\x77\x77\x77\x1c\x1c\x1c\x11\x11\x11\x6f\x6f\x6f\x17\
+\x17\x17\x14\x14\x14\x89\x89\x89\x19\x19\x19\x16\x16\x16\x18\x18\
+\x18\x12\x12\x12\x6d\x6d\x6d\x6e\x6e\x6e\x6c\x6c\x6c\x70\x70\x70\
+\x71\x71\x71\x72\x72\x72\x74\x74\x74\x13\x13\x13\x75\x75\x75\x73\
+\x73\x73\x76\x76\x76\x81\x81\x81\x88\x88\x88\x85\x85\x85\x79\x79\
+\x79\x86\x86\x86\x83\x83\x83\x82\x82\x82\x84\x84\x84\x87\x87\x87\
+\x7d\x7d\x7d\x80\x80\x80\x7f\x7f\x7f\x7e\x7e\x7e\x7c\x7c\x7c\x7b\
+\x7b\x7b\x7a\x7a\x7a\x78\x78\x78\x4d\x4d\x4d\x4f\x4f\x4f\x4e\x4e\
+\x4e\x44\x44\x44\x45\x45\x45\x4c\x4c\x4c\x50\x50\x50\x47\x47\x47\
+\x4a\x4a\x4a\x43\x43\x43\x3c\x3c\x3c\x4b\x4b\x4b\x48\x48\x48\x46\
+\x46\x46\x51\x51\x51\x52\x52\x52\x42\x42\x42\x49\x49\x49\x3e\x3e\
+\x3e\x40\x40\x40\x3d\x3d\x3d\x53\x53\x53\x3b\x3b\x3b\x3a\x3a\x3a\
+\x3f\x3f\x3f\x8f\x60\xec\x98\x00\x00\x4f\x13\x49\x44\x41\x54\x78\
+\x5e\xec\x99\x37\x8e\xc5\x30\x10\x43\xe7\xa8\xa3\xe8\x18\x7e\xd8\
+\x74\xfc\xa5\x82\x05\xa9\x5a\xbb\x5b\x01\xc3\xe2\xd5\x76\xf1\x40\
+\x0e\x44\x0b\x2d\x08\x8d\xc8\xbb\x6b\xa4\xff\x58\x9c\x73\x0f\xe7\
+\x98\x27\xd6\x5a\x1b\xad\x94\xb2\x1e\xd9\x76\x64\x38\x90\x88\xf5\
+\x13\xf9\x13\x02\x01\xd1\x52\x0c\x78\x22\x11\x3f\x7d\xe1\xfd\x6c\
+\x25\x71\xc8\x83\x99\xf5\x04\x47\x94\x55\xc1\x0f\xef\xf7\x1d\x92\
+\x9c\x7e\x1c\x87\x18\x70\x05\x02\x1a\x91\xca\x8a\x15\xe9\x0c\xc5\
+\x94\x4a\x12\x94\x88\xcb\x25\xa2\x94\xf2\xa5\x44\x8e\x52\x22\x62\
+\xc0\x15\x08\x68\x4c\x6a\x54\x06\xbc\x06\xa4\x13\x84\xcf\xcd\xa6\
+\x54\x92\x84\xd9\x18\x96\x16\xb3\x36\x55\x89\xdc\x1e\x59\x02\x01\
+\xe5\xd6\x78\xad\x8d\x01\x1f\x1b\xf2\xcf\xd1\x98\x92\xed\x0e\x92\
+\x84\xb9\x95\x97\x56\x29\x11\x1f\x4b\xa4\x19\x59\x62\xc0\x05\x08\
+\x28\xb4\x46\xb2\x22\x1a\xd0\x29\x92\x29\xa5\x49\xd0\x22\x4d\x89\
+\x54\x97\xfa\x9d\x23\x44\x20\xa0\xba\x30\xac\xb5\xb3\xed\x10\xd9\
+\x94\xd2\x24\xe1\x70\x1f\xc7\xb3\x44\x34\x62\xca\xc8\xba\x73\x84\
+\x08\x04\x34\x54\x6a\x18\x33\x1b\xe4\xab\x2f\xcc\x26\x99\x72\x4a\
+\x92\x0f\xf7\xb3\x44\x98\xab\x4b\x1d\x23\xeb\xc6\x11\x22\x10\xd0\
+\xb6\xc5\x0e\xc8\x06\x4c\xc8\x77\x5f\x38\x4d\x29\x92\x0c\x51\x92\
+\x5c\x22\xe9\x4d\xa4\x19\x59\xd7\x8f\x10\x81\xe0\x97\x3d\x7b\x59\
+\x69\x18\x88\xe2\x38\x3c\xc4\x2c\x8a\x0d\xe2\x22\x10\x0a\x55\x54\
+\x70\x21\x3e\x41\x21\xcb\x5c\x4b\x2f\xb9\xa8\x99\x99\x4c\xa6\xb5\
+\x56\xab\xb5\x6a\x93\xc6\x26\x8f\xef\x7f\x5c\xf8\x00\x2e\x5c\xf9\
+\x2d\x7e\x6f\x70\x18\xce\x19\x12\x45\xd3\x28\xfa\x4d\x58\x94\x65\
+\x19\xcf\xd2\x34\xcd\xd3\x38\x8e\xe9\x1d\x88\x1b\x90\xb7\x90\x4c\
+\x41\x85\xcd\x18\x63\x7c\xc0\x39\xcf\x27\x79\x4e\xe9\x88\x52\x21\
+\x86\x42\x14\xc5\xb8\x90\x52\x86\x32\x49\x92\x30\x81\x40\xc5\x9f\
+\x81\x3d\x00\x77\x02\xde\x08\xb4\x21\x68\x63\x38\x0f\xe1\x0c\x09\
+\x4e\x83\xc0\xf7\x8f\x7c\xdf\xb6\x4f\x6c\xd7\x75\xfb\xae\xe3\x38\
+\x3d\xc7\xf3\xbc\x9e\x06\x2b\xd3\x34\xad\x6b\xab\x69\xf6\x57\xeb\
+\xba\xae\x2f\xab\xaa\x6a\x2f\xda\x76\x47\x0e\x08\x21\xdb\xe3\x17\
+\x30\x31\x55\x4b\x6b\x09\xcd\x1b\xec\xb1\x82\xad\xd6\x6a\x8b\xa9\
+\x37\xe5\xa6\xac\xd4\x3d\xac\x55\xf7\xb0\x9d\x7a\x85\x08\x86\x6c\
+\xbe\x5d\xfc\x1c\x8d\xbf\x3f\x55\x3e\xa0\xfc\xec\x74\x3a\xcf\xdd\
+\xae\x61\xbc\x1a\xba\xae\xcf\x0f\x61\xf1\xb7\xf9\xcf\x17\x3b\xe7\
+\xd6\xdc\xb4\x11\x86\xe1\x1d\x9f\xc6\xa7\xf8\xa4\x5a\xb1\x45\x2c\
+\xcb\x27\x70\xc6\x81\x70\xdb\x19\x5f\x82\x49\x99\x84\xdf\x50\x4a\
+\xc1\x34\xa4\x49\x1c\x12\x3b\x3f\xbf\xef\xb7\xaa\xbc\x7c\xb5\x11\
+\xc8\x52\x4c\x91\xf7\xbd\x78\xef\x35\xa3\x47\xbb\x8f\x3e\x69\x73\
+\x7f\xe4\x90\x2f\x6a\x0f\x79\xcb\xaa\xfc\xa1\x8c\x7c\x59\xd5\x6a\
+\xf5\xb2\xba\x5a\x57\xbc\xee\x6a\x35\xf1\x2b\xdd\x8e\xc1\x4a\xdd\
+\xc0\x2f\x4e\x91\xc9\x6b\xa4\x73\x86\x78\xf7\xee\x09\xdd\xbb\xaf\
+\x70\xef\x8e\xe9\xde\x7d\x49\xf7\x2e\x6e\x5e\x6b\x82\x7b\x37\x93\
+\xe8\x74\x3a\x8d\x8e\xe3\x38\xa6\x8d\xd4\x4b\x88\x41\x55\x6b\x21\
+\xe5\x03\x64\xaf\x89\xe4\x2c\xcb\xca\xe4\x33\x99\x4c\x23\xd5\x68\
+\x34\xcc\xa2\x69\xd6\xeb\x85\x7a\xdd\x30\xb2\x86\x51\xab\xdd\xd5\
+\xe4\x25\xe0\x52\x2f\xf7\x90\x0f\x39\xe4\x6d\x1e\xf9\x3d\x85\x64\
+\x2a\x00\x64\xb8\xbf\xbf\xbf\xe8\x2d\xe6\xf3\xf3\xc3\xf3\x73\x82\
+\x04\x69\xdf\x23\xdd\xcf\x48\xf7\xb3\x10\xc0\xe5\xa7\x2f\x5d\xd7\
+\xd7\xe9\x6b\x44\x95\x7c\xfe\xb1\x7a\xf7\x0e\x8f\x43\x56\x64\xae\
+\xfb\xff\x29\x12\xd9\x05\xab\xe9\x1c\x7a\x2e\x36\xe4\xe3\x85\xf7\
+\x80\x7f\x4d\x0f\xf8\x33\xe2\x83\x9e\xed\x27\x5f\x7f\xb6\x5b\x09\
+\x24\xd3\x41\x1a\x0e\x52\xb7\x11\x17\x0d\xaa\x2a\xf0\x38\x20\x3e\
+\x9a\xc4\x87\x05\x3e\x32\xc4\x47\x83\xf8\x30\xc1\x47\x9d\xf8\x30\
+\x88\x8f\x1a\xf8\x90\x88\xcb\x47\x81\x7c\x46\xe4\x10\x7a\x96\xa4\
+\x24\x1f\xef\x13\x95\x4a\x65\x88\x35\x64\x7f\xb4\x00\x20\xbd\x73\
+\x64\x70\x7b\x0b\x3e\x6e\x88\x8f\x7b\xc9\xc7\x67\x4d\x40\x1c\x8a\
+\xa1\x41\xc5\xd1\xa0\xe2\x68\x50\x29\x2a\x54\x71\x34\xa8\xa6\xe0\
+\x03\x11\xc1\x97\x0e\xd4\x1b\xe2\xe3\x74\x02\x3c\x88\x8f\x33\xf0\
+\x21\xf7\x3e\x27\xc4\xc7\x2b\xe2\x63\x0c\x3e\x5e\x22\x07\x2f\x90\
+\xe6\x04\xc9\x24\x90\x46\x07\x31\x81\x87\x4d\x7c\x94\x96\x7c\xb4\
+\xaa\xc0\x83\xf8\x68\x12\x1f\x16\xf8\xc8\x10\x1f\x0d\xe2\xc3\x04\
+\x1f\x75\xa4\x60\x20\x77\x35\x44\xae\x7e\x97\xc0\x63\x8f\xf8\xc8\
+\x11\x1f\xb4\xd6\xa6\xfe\xe5\x23\x95\x48\xa7\xfb\x95\x8a\x5c\x44\
+\x16\x8b\x1e\xd6\x10\x2c\x22\x00\x44\xee\xb4\xb0\x88\x10\x1f\x88\
+\x26\xe0\xa7\xaf\xeb\x6f\xf3\xc1\xd1\x50\x1b\x6b\x5e\x1c\x0d\xaa\
+\x29\xf1\x41\x25\x36\xe0\xe3\x0d\xf1\x71\x0a\x3e\x5e\x13\x1f\x4b\
+\x37\x38\x41\xec\x57\x48\x69\x8c\x1c\x10\x1f\x4d\xe2\xc3\x02\x1e\
+\x09\xe2\xa3\x43\x7c\x38\xe0\xc3\x26\x3e\x4a\x4b\x3e\x5a\xe0\xe3\
+\x80\xf8\x68\x12\x1f\x16\xf8\xc8\x20\xf9\x06\x92\x32\x91\x42\x1d\
+\xc9\x02\x8f\x1a\xf1\x41\xbb\x43\x6c\xad\x80\x07\xf1\x91\x23\x3e\
+\x68\x2f\x9a\x5a\xf2\x51\x4c\x24\x8f\xd2\xe9\xe5\x22\x32\x9f\xcf\
+\xd7\x6e\xb2\x34\x01\x3f\x79\x71\x34\xa8\x18\x1a\x54\x1c\x0d\x2a\
+\x45\x85\x2a\x8e\x06\x95\x44\xc3\x2d\x11\x98\x0f\xa6\x1e\x09\x57\
+\x3d\x10\x9b\xf8\x28\x11\x1f\x2d\xe0\x01\xf5\x80\x7b\x10\x1f\x13\
+\x0b\x78\x10\x1f\x1d\xe2\xc3\x01\x1f\x36\xf1\x51\x5a\xf2\xd1\x02\
+\x1f\x07\x48\xb9\x89\xec\x59\x48\x3e\x83\x78\xea\x61\xd6\x89\x0f\
+\x4f\x3d\x6a\x9e\x7a\x00\x0f\xf0\x91\x23\x3e\xc8\xd5\x52\x4b\x3e\
+\x8a\xc5\x62\xe2\x28\x99\xc6\x22\x42\x26\x22\x4d\xbd\x37\x57\x9b\
+\xac\x98\x48\x88\x2e\x8e\x06\x15\x43\x83\x8a\xa3\x41\xa5\xa8\x50\
+\xc5\xd1\xa0\x92\x68\x78\x15\x44\xd2\x57\xdf\x2d\x49\xf5\x78\x28\
+\x35\x37\x89\x0f\xa6\x1e\x35\x57\x3d\xd6\xab\xf9\x7b\xaa\x4f\xe0\
+\xa3\x60\x76\x93\x49\x2c\x22\xd8\x65\x0d\x21\x22\x6c\x93\x05\x40\
+\xda\x31\x94\x10\xad\xe6\xe9\x68\xd5\x5c\x95\x08\xa2\x1e\x52\xcd\
+\x4f\x99\x9a\xff\x16\x9d\x9a\x5b\x4c\xcd\x4d\x4f\xcd\x0d\x24\x5b\
+\xf3\xd4\xfc\xf2\xab\x6a\x8e\x2a\x82\x8f\x42\xe1\x63\xa7\xdb\x4d\
+\xd2\x22\x52\xe9\xf3\x4d\x96\x27\x21\xf7\x52\x42\x34\x01\x71\x51\
+\x73\x24\x6a\x35\x57\x25\x02\xaa\xf9\xe9\x43\xa9\xb9\x45\x7c\x30\
+\xf5\x90\x6a\x9e\x65\x6a\x5e\xf6\x51\xf3\x14\x0d\x23\x0a\xe0\xa3\
+\xe0\xb4\xbb\x8f\xb1\x88\xa8\x4d\x96\xf7\x26\xeb\xdb\x12\xa2\x4b\
+\xab\x39\xab\x73\x11\x48\xcd\x4f\xa3\x53\xf3\x16\x53\x73\x0b\xc9\
+\xb9\xea\x81\x14\x3d\x35\x37\x02\xa8\x39\xf8\x28\x10\x1f\xd9\xac\
+\xd3\x7e\x8a\x35\x44\x9a\x3a\xc6\x21\xcb\x4d\x16\x46\x86\x7e\x12\
+\xa2\x4b\xab\xf9\x2a\x1f\x53\xf1\x63\xd4\xbc\x85\x54\x99\x7a\x58\
+\x52\x3d\x98\x9a\x1b\x01\xd4\x1c\xf9\x58\x40\x66\x59\x00\xf2\xb4\
+\xdd\xee\x76\x1f\xb3\x4d\x96\x94\x90\xdb\xb8\x4b\x88\x56\x73\x24\
+\xa4\x9a\x73\x3e\xa6\xe2\x47\xa8\x79\xb5\x85\xac\x99\x0a\x86\x52\
+\x73\xe2\x23\x3b\xcb\x22\xf5\xc1\xa0\xdd\x66\x9b\x2c\x77\x5c\x18\
+\x77\x09\xd1\x6a\x8e\x0a\xad\xe6\x9c\x8f\xa9\xd8\xbe\x9a\xb7\x88\
+\x8f\x35\x53\xc1\x90\x6a\x0e\x3c\x88\x0f\x94\x73\x38\x18\x3c\xc5\
+\x1a\x22\xdf\x64\x79\xe3\x42\x6f\x9c\xae\x24\x44\x13\x10\x33\x35\
+\x47\x85\x56\x73\xce\x07\x22\xb6\xa6\xe6\xfe\x53\xc1\xf0\x6a\x9e\
+\xf5\xf8\xc8\x3a\x87\x87\xcf\xda\xed\xb6\xbb\xc9\xf2\xde\xf4\xce\
+\x95\x84\xc4\x51\xd2\xb5\x9a\xa3\xa2\x53\x73\x55\xe2\x01\xd5\xdc\
+\x61\x6a\xee\x3b\x15\x0c\xaf\xe6\x8a\x0f\x00\xf2\x8c\x6d\xb2\x20\
+\x21\x0b\x39\x4e\xe7\x12\xa2\x09\x88\x95\x9a\x57\xa2\x54\x73\x55\
+\xe2\xc1\xd4\xdc\x21\x3e\xbe\x39\x15\x8c\x4a\xcd\x91\x65\x39\xcf\
+\x0f\xdd\x4d\x96\x1c\x17\xba\xe3\x74\x2e\x21\xbe\x92\xae\x4b\xab\
+\xb9\x2a\x11\x99\x9a\x4f\x98\x9a\x3b\x88\xe9\x33\x15\x8c\x5e\xcd\
+\x55\x19\xbd\x9e\xdc\x64\x75\xbb\x18\x17\x56\xe4\x26\x8b\x49\x48\
+\xdc\x25\x5d\xab\x39\x2a\x84\x9a\xb3\x12\x11\xa9\xf9\x04\xb1\x98\
+\x7a\x38\x3e\x53\xc1\xf0\x6a\x5e\x5c\x51\x73\xaf\xee\x2e\x6c\x00\
+\xe2\x6e\xb2\x92\x49\xfe\xa6\x97\x49\x88\x26\x20\xa6\x6a\x8e\x0a\
+\xa3\xe6\xac\x2e\xc4\x86\x6a\x3e\x66\x6a\x6e\x4d\x10\x36\x15\x74\
+\x98\x7a\x44\xad\xe6\xc5\x15\x35\xf7\x8a\xfe\x92\xb4\x47\x3d\xda\
+\x64\xd1\xb8\x70\xbd\x84\x74\xef\x63\x2b\xe9\x5a\xcd\x91\x10\x6a\
+\xce\x0b\x3f\x98\x8a\x8d\xd4\xbc\xc5\xd4\x7c\x42\x7c\xf8\x4c\x05\
+\xc3\xab\x79\x9e\xa9\x79\x91\xf8\x60\xea\xe1\xd5\x1d\xf1\x01\x40\
+\x1e\x61\x0d\xf1\xde\xf4\x02\x90\xe1\xae\x48\x88\x56\x73\x54\x08\
+\x35\xe7\x75\x01\x3e\x2e\xc4\x06\x6a\x3e\x26\x3e\xd8\x54\x70\xc2\
+\xa7\x82\x11\xab\x79\x9e\xa9\xf9\xa7\x22\xc2\xd4\xc3\x2b\xef\x57\
+\x7b\xfb\x78\x24\x37\x59\xee\x9b\x5e\x2e\x21\x37\x31\x96\x10\xad\
+\xe6\xa8\x68\xd4\x1c\x75\x21\xf9\xb8\x10\x81\xd5\x7c\x4c\x7c\xf8\
+\x4d\x05\xa3\x55\x73\xa8\x07\xc2\xa6\x82\xc5\x55\xf5\x40\xd4\x51\
+\x14\xc6\x70\x44\x9b\xac\xc1\x80\xc6\xe9\xe9\xb4\x2b\x21\x72\x12\
+\xe2\x37\x29\xd4\xa5\xd5\x5c\xd5\x2d\xf1\x41\x25\xbe\x4f\xcd\xd9\
+\x54\x70\xec\x37\x15\x8c\x58\xcd\xf3\x5c\xcd\xd7\xab\x07\xca\x45\
+\xc3\x2d\x7b\x38\xc4\x26\x0b\x16\xf2\x35\x09\xf1\x9f\x14\xea\xd2\
+\x6a\x4e\x68\xb8\x25\xbe\x47\xcd\x83\x7d\xb0\x1b\x5e\xcd\xd9\x54\
+\x30\xef\x3f\x15\x94\xc5\x8f\x32\x02\x20\x8f\x46\xee\x9b\xde\xb5\
+\x12\xe2\x3f\x29\xd4\xa5\xd5\x5c\xf1\x71\x2b\xd6\xa9\x39\x3f\x87\
+\xca\x7f\x2a\x18\xbd\x9a\x07\x9a\x0a\x2a\x35\x57\x65\x0f\x8f\x47\
+\xb0\x10\x26\x21\x0b\x26\x21\xf1\x97\x74\xad\xe6\xa8\xcd\xd5\x5c\
+\x95\x58\xf2\xb1\xe5\x63\xae\xcc\xf5\xc7\x5c\x95\x83\x4e\x05\x67\
+\x0a\x0d\x25\xe9\xc3\xe1\x8a\x84\x78\xff\x84\xec\x84\xa4\x6b\x35\
+\x47\x85\x51\x73\x55\x82\x1d\x73\x85\x6c\xe7\x98\x2b\x33\xc0\x31\
+\x57\xea\x83\x5d\x5f\x35\x57\x65\xf4\x57\x24\x64\xa7\x26\x85\x5a\
+\xcd\x51\xa1\xd4\x5c\xd5\x4c\xac\x3f\xe6\xea\x6c\x3b\xc7\x5c\x65\
+\xfd\x8e\xb9\x0a\xa0\xe6\xbc\xec\x7e\x7f\x78\xcc\x25\x64\xb4\xbf\
+\x33\x93\x42\xad\xe6\xa8\x50\x6a\xae\x6a\x36\x9b\x89\xff\xc3\x31\
+\x57\xd5\x60\x1f\xec\x72\x35\x5f\x2d\x00\x72\x3c\xf4\x24\xc4\xfb\
+\xf1\x56\x4a\x08\x9f\x14\x6a\x02\xe2\xa8\xe6\x48\x28\x35\x57\x35\
+\x43\x6e\xc4\x1b\xe2\x63\x1b\xc7\x5c\x21\x7e\xc7\x5c\x05\x55\x73\
+\x46\x05\x2f\xbb\xff\xc4\x95\x10\xef\x73\x2c\x75\xfa\x0f\x9b\x14\
+\x6a\x02\x58\x69\x35\x67\x75\x23\xf9\x98\x89\xed\x1f\x73\x55\x8f\
+\xe0\x83\x5d\xdf\x43\xeb\xed\x27\xae\x84\xd0\x37\xef\xee\x3f\x21\
+\xde\xe7\x8a\x7c\x52\xa8\x09\x88\xbf\x9a\xa3\x36\x51\x73\xf7\x80\
+\x7f\x2a\xb1\x32\x15\x8c\x5e\xcd\xa3\xf8\x97\xd6\x5f\x3d\x78\x19\
+\x47\xfd\xbe\x3b\x09\x71\x3f\xc7\xaa\x90\x84\xb8\x93\x42\x00\x32\
+\xd8\x19\x49\xd7\x6a\x8e\x6c\xa6\xe6\x4b\x3e\x66\xe2\xa1\x8f\xb9\
+\xca\x44\xf5\x2f\x2d\x57\x0f\x9f\x9a\x96\x8e\xa4\x84\xc8\xcf\xb1\
+\xba\x52\x42\xd4\xa4\x70\x77\x24\x5d\xab\x39\x6a\x43\x35\x57\x7c\
+\xcc\x44\xb4\x6a\x1e\xfd\x31\x57\xfe\x53\xc1\xd5\xba\x9a\x5e\x01\
+\x10\x4f\x42\xf8\x8f\xe9\x00\x64\x57\x24\x5d\xab\x39\x6a\x73\x35\
+\x57\x25\xa2\x3d\xe6\xaa\x1c\xf0\x98\xab\xf0\x6a\xce\xeb\x0a\x7c\
+\x00\x10\x29\x21\xcf\x7b\x87\xab\x93\xc2\xdd\x90\x74\xad\xe6\xa8\
+\x30\x6a\xae\x4a\x44\x77\xcc\x15\xe2\xa9\x87\xb5\x76\x2a\xf8\x0f\
+\x7b\x77\xb6\xdb\x44\x10\x44\x61\xb8\xc4\x26\x02\x21\x60\x87\xd5\
+\xd8\x10\xc0\x24\x2c\x66\x79\x00\x2e\x59\x2f\x78\x87\x01\x32\x43\
+\xc3\xe0\x4e\x20\x2c\x79\x7c\x9a\xce\xc4\x47\x62\x1c\x55\xb7\xdc\
+\xe3\x2e\x44\x59\xd1\xff\x06\x75\xf1\xa9\xed\x93\x8e\x68\x8e\x34\
+\xff\x9f\x73\xed\xc1\xc4\x29\xbd\xf9\x4d\xc8\x5f\x2f\x85\x3c\xd2\
+\x35\x4a\x73\xc4\x50\x07\x33\x57\x03\x4f\x8f\x25\xd1\x1c\xd9\xf1\
+\xf7\xe1\xd2\x9f\x4c\xfc\x4b\xe1\x9d\x39\x2f\x85\x1c\xd2\x35\x4a\
+\x73\xc4\x18\x43\x09\x66\xae\x46\xcc\xcc\xd5\x72\x68\x3e\xbb\x0f\
+\x87\xf4\xc9\x9c\x97\xc2\x10\xa4\x6b\x94\xe6\xc8\xbe\x71\x1f\x4a\
+\xb3\x40\x8d\x57\xc1\x5c\x34\xc7\x7d\x38\x83\x4c\xf0\x52\xf8\xbf\
+\x22\x5d\x69\x8e\x44\xd0\x1c\x31\xfe\x3e\xf6\x29\x9e\xe6\xcc\xab\
+\x60\x2e\x9a\x23\x6b\x9b\x5b\xe3\xf1\xc1\x4b\xe1\xcd\x47\xc1\x5f\
+\xe7\xd5\x28\xcd\x11\xd3\xdc\x87\xa1\x30\x9a\x6f\x80\xe6\xcc\xab\
+\x60\x2e\x9a\xfb\x00\xe9\x63\x20\x3d\xf6\xeb\xbc\x1a\xa5\xf9\xec\
+\x3e\x0c\x71\x34\x0f\x9f\xb9\xca\x4c\x73\xa4\xbf\xe9\x0e\xa4\x85\
+\xf4\xd0\xdf\xdc\x6a\x94\xe6\xb8\x0f\x43\xf3\x68\x3e\x00\xcd\x99\
+\x99\x2b\x41\x34\x47\xd6\x36\xe7\x21\x3d\xf8\x37\xb7\x1a\xa5\x39\
+\x42\x9e\xe6\xcc\xcc\xd5\x06\xe8\xd1\xc1\x02\xf5\x6a\x1a\x9a\x23\
+\xee\x40\xb6\xc6\x2d\xa4\x07\xff\xe6\x56\xa3\x34\x47\xc8\xd1\x03\
+\x34\x5f\xca\xcc\xd5\x0a\x33\x73\x15\x4f\x73\x45\x3a\x13\xa5\xb9\
+\x4b\x04\xcd\x91\x9a\xda\x33\x57\x2f\x73\xcf\x5c\xc5\xd3\x5c\x3e\
+\xd2\x35\x59\x68\x8e\x44\xd0\x1c\xd9\xab\x6b\xca\x3d\x73\xb5\x0a\
+\x7a\x2c\x46\x73\xa4\x27\x0e\xe9\x9a\x2c\x34\x47\x22\x68\x8e\xd4\
+\xee\x3e\x6a\x1a\x2d\x67\xe6\xea\x1c\x33\x73\xb5\x28\xcd\x11\x3b\
+\x1d\x09\x43\xba\x26\x0b\xcd\x91\x08\x9a\x23\xb5\xbf\x8f\x9a\x96\
+\x3b\x73\x75\x26\x64\xe6\x2a\x9e\xe6\x88\xb5\x53\x3b\x12\x85\x74\
+\x4d\x16\x9a\x23\x11\x34\x47\x6a\x7f\x1f\x2e\xd4\xc9\xcc\x55\x3f\
+\xe1\xcc\x15\x4f\x73\xc4\xfe\xb9\x0f\x3b\x12\x84\x74\xcd\x3f\x49\
+\xf3\xd9\x7d\xd4\xd4\xe5\xcc\x95\x65\x5e\x05\x93\xd0\x1c\xb1\x07\
+\xf7\x61\x47\x8a\xf4\x56\x94\xe6\x4d\x82\x68\x8e\xfb\xa8\x29\x21\
+\xcd\xd3\xcf\x5c\xf1\xf4\x40\xa6\x87\xf7\x61\x15\xe9\xed\x28\xcd\
+\x7d\x42\x69\x8e\x50\xba\x99\xab\xf5\xd4\x33\x57\x3c\x3d\x10\x8b\
+\xfb\x10\x8b\x74\xdd\x62\xc8\x42\x73\x24\x9c\xe6\x08\xa5\x9a\xb9\
+\x5a\x3f\xa4\x47\x2f\x66\xe6\x0a\xe1\xe8\xc1\xd2\xdc\xfa\xc8\x45\
+\xba\x6e\x31\x64\xa1\x39\x12\x41\x73\x84\x68\x21\x9a\xb7\x67\xae\
+\x7a\x9e\x1e\xa9\x69\xbe\xc3\xd3\x1c\x11\x89\x74\xdd\x62\xc8\x42\
+\x73\x24\x82\xe6\x48\x49\x25\x2d\x40\xf3\x4b\x9e\xe6\x19\xbe\xb0\
+\xdb\xa6\x39\x22\x1a\xe9\xba\xc5\x20\x9f\xe6\x48\x59\x92\xfb\x8b\
+\xa0\x79\x7b\xe6\xea\x6c\x8a\x99\xab\x44\x34\x97\x8f\x74\xdd\x62\
+\x90\x4f\x73\xa4\xf4\xf7\x51\x52\x1c\xcd\x33\xcc\x5c\x85\xd1\x5c\
+\x91\xce\x44\x69\x8e\xf0\x34\xdf\x2b\xdd\x87\x7c\x78\x9a\xaf\x80\
+\xe6\x19\x66\xae\x82\x68\xae\x48\x67\xa2\x34\x47\x42\x68\x8e\xfb\
+\x20\x86\xe6\xf9\x67\xae\x78\x9a\xcb\x47\xba\xd2\x1c\xc9\x42\x73\
+\x24\x88\xe6\xb8\x8f\x92\x8e\x9c\xb9\x1a\x32\x33\x57\x52\x68\x2e\
+\x1f\xe9\x4a\x73\x24\x0b\xcd\x91\x50\x9a\x23\xc4\xcd\x5c\x0d\x98\
+\x99\x2b\x29\x34\x47\x2a\xa9\x48\xd7\x2d\x86\x2c\x34\x47\xc2\x69\
+\x8e\x50\xc8\xcc\x95\x7c\x9a\x23\x55\xb5\x3d\x14\x8d\x74\xdd\x62\
+\x90\x4f\x73\xa4\xa0\xd6\x02\x35\x33\x73\x25\x91\xe6\x48\xe5\xee\
+\xa3\x1a\x0a\x46\xba\x6e\x31\xc8\xa7\x39\x52\x14\xbb\xc4\xbd\x0a\
+\xca\xa7\x39\x52\xf9\xfb\xa8\x86\x8a\x74\x26\x4a\x73\x73\x24\xcd\
+\x91\xc2\xdd\x47\x41\xb2\x67\xae\x78\x7a\x20\xdb\xcd\x7d\x54\x43\
+\xf1\x48\xd7\x2d\x86\x2c\x34\x47\x38\x9a\xbb\x14\xfe\x3e\x0a\x92\
+\x3c\x73\xc5\xd3\x03\xa9\x66\xf7\x21\x1e\xe9\x3a\x93\x98\x97\xe6\
+\x86\xa7\x79\xb9\xdb\xdc\x47\x41\x78\x15\x94\x4d\x73\xcb\xd0\x1c\
+\xf7\x21\x1c\xe9\x3a\x93\x98\x97\xe6\x26\x84\xe6\xb3\xfb\x28\x28\
+\xf5\xcc\x55\x37\x34\xb7\x3c\xcd\x11\xc9\x48\xd7\x99\xc4\xbc\x34\
+\x37\x41\x34\xc7\x7d\xec\x52\x52\x9a\xaf\x76\x43\x73\xcb\xd3\x1c\
+\x11\x8f\x74\x9d\x49\x94\x4f\x73\x84\x84\xce\x5c\xc5\xd3\x1c\xe9\
+\x1e\xe9\x9a\xdf\xec\xdc\xd9\x6e\x13\x61\x0c\xc5\x71\x4b\x2c\x2a\
+\x10\x54\xa0\x6c\x01\x24\xa4\xb6\xec\xeb\x23\xd5\x0e\x5b\x28\x74\
+\x67\x79\xfc\xa2\x69\xc8\xb9\xc8\x78\x24\x47\x91\xec\x2f\x3a\x37\
+\xff\x27\x18\x5f\xfc\x46\xfa\x4e\xd3\x34\x47\x3c\x9a\x23\xb2\xd2\
+\x99\xab\x51\x47\x8f\x14\x9a\x13\xe9\xc1\x90\xe6\xfb\x2e\xcd\x11\
+\x93\xa5\x69\x7e\xbd\x7f\x81\xfa\x38\x85\xe6\x44\x7a\x30\xa4\xf9\
+\xbe\x4b\x73\xc4\xcc\x64\x39\x9a\x77\xf4\x30\x67\xe6\x2a\x81\xe6\
+\xcd\x20\x9d\x34\x47\x12\x68\x8e\xb8\x34\x47\xcc\xcc\xa6\x12\xa5\
+\xb9\x62\x81\xda\x99\xb9\x4a\xa0\x79\x2b\x48\x27\xcd\x91\x04\x9a\
+\x23\x2e\xcd\x91\x69\x77\x1f\x26\x21\x9a\xfb\x33\x57\xf9\x34\xaf\
+\x8f\x74\xd2\x1c\xa9\x49\x73\xc4\x66\xf7\x61\x32\x4c\xf3\xdb\xa0\
+\x79\xc2\xcc\x55\x88\xe6\xc8\x66\x49\xa4\x93\xe6\x48\x79\x9a\xcf\
+\xef\xc3\xc4\xa1\x79\xee\xcc\x55\x9c\xe6\x88\x4e\xc6\x05\x91\x4e\
+\x9a\x23\x25\x68\x8e\xf4\xd0\x1c\xf7\x61\xd2\x3b\x73\xb5\x95\x3a\
+\x73\x15\xa7\x39\xa2\x3a\xd1\x31\x91\x3e\x1c\xd2\x1c\xe9\xa7\x39\
+\x22\x43\x33\x57\x87\x91\x99\x2b\x24\x46\x8f\x38\xcd\xfd\xa8\xea\
+\x44\x75\x5c\x1e\xe9\xa4\x39\x92\x40\x73\xc4\xa3\x39\x22\x1d\xcd\
+\xeb\xcc\x5c\xc5\xe9\x81\xe8\xc5\x7d\xe8\xb8\x38\xd2\x49\x73\x24\
+\x81\xe6\x88\x4f\x73\x44\x40\x8f\x7b\xd5\xdf\xd2\x0e\xd3\x7c\xf2\
+\xff\x3e\xb4\x36\xd2\x49\x73\x24\x93\xe6\x32\x40\x73\x44\xa5\xa5\
+\xb7\xb4\x03\x51\xdc\x47\x69\xa4\x93\xe6\x48\x55\x9a\x23\xaa\x2a\
+\x0d\xbd\xa5\xf5\xa3\xb8\x8f\xd2\x48\x27\xcd\x91\xaa\x34\x47\xba\
+\xaf\x49\x8a\xcf\x5c\xe1\x2d\xad\x1f\x9c\x06\x91\x1e\x0b\x69\xee\
+\xdf\xc7\xec\x6b\x92\x8e\x1e\xcd\xd3\x1c\x21\xd2\x83\x21\xcd\xf1\
+\xeb\x0a\x99\x7f\x4d\xb2\xb5\x2e\x34\x27\xd2\x03\x21\xcd\x91\x3e\
+\x9a\x83\xb4\xb2\x26\x34\x27\xd2\x03\x21\xcd\x91\x7e\x9a\x83\xb4\
+\xb2\x16\x34\x27\xd2\x03\x21\xcd\x11\x8f\xe6\x88\xac\x01\xcd\x5b\
+\x43\x3a\x69\x8e\x14\xa5\x39\x22\xcd\xd3\x7c\xd5\x48\x27\xcd\x49\
+\x73\xe4\x8b\xd4\x9c\xb9\x8a\xd3\x1c\xb1\x9b\x44\x7a\x20\xa4\xb9\
+\x7f\x1f\xff\x98\x2b\x29\x34\x3f\x58\x35\xcd\x11\xb3\x69\x1c\xe9\
+\x0c\x69\x6e\x0b\x9a\xed\xac\x2b\x09\x34\x3f\x58\x35\xcd\x91\x8e\
+\x5a\xed\x20\x9d\x34\x47\x72\x69\x6e\x0b\x9a\x9d\x59\x57\x7c\x9a\
+\x8f\x52\x16\xa8\xe3\x34\x47\x66\xd4\x5a\x02\xe9\x4c\x0a\xcd\x91\
+\x14\x9a\x23\x0b\x90\x9d\x83\x57\x1c\x9a\x67\xcf\x5c\xc5\x69\xae\
+\x73\x6a\x85\x91\xce\xa4\xd0\x1c\xc9\xa5\xb9\x2d\xd2\x1c\xe0\x95\
+\xc0\xcc\x55\x69\x9a\x83\x5a\x51\xa4\x33\x29\x34\x47\x0a\xd2\x1c\
+\xe0\x15\x6f\xe6\x6a\x04\x7a\x34\x40\x73\x50\x8b\x48\x8f\x26\x85\
+\xe6\x48\x49\x9a\x23\x12\x98\xb9\xaa\x4d\x73\x84\x48\x0f\x84\x34\
+\xef\xbb\x0f\x44\xb0\x40\xed\xcc\x5c\xb5\x41\x73\x84\x48\x0f\xe4\
+\x9c\xbd\x7b\xdb\x8d\xa3\x88\xc2\x28\xbc\x25\x3a\x96\xa1\x1b\x29\
+\x17\xc8\x31\xe6\x22\x52\x8e\x1c\x0f\x8f\x94\x04\x1c\x3b\xe1\x14\
+\x27\x18\x78\x7c\xe6\xe0\x99\xd5\xa6\x25\xca\xea\xd2\xee\xbf\xaa\
+\x66\xcf\xc5\x7a\x83\xba\xf8\x34\xfa\x77\x17\x42\x73\x22\xa1\x39\
+\x99\xa8\xf7\x77\x4b\x6c\x69\xeb\xa0\x39\xa9\x0f\xe9\x41\x73\x22\
+\xa1\x39\x99\xa8\x77\x45\x00\x4b\x6c\x69\xe5\x34\x7f\x79\x47\x9a\
+\xe7\x23\x3d\x06\x1f\x12\x9a\x13\x09\xcd\xc9\x44\xbd\x1b\x02\x58\
+\xe1\x67\xae\xee\x48\xf3\x7c\xa4\xc7\xe0\x43\x42\x73\x22\xa1\x39\
+\x99\xa8\xf7\x86\x00\x56\xfe\x99\xab\x34\xcd\xf3\x91\x1e\x83\x0f\
+\x09\xcd\x49\x19\x34\x27\x7b\x02\x58\x26\xcd\x2f\xfc\x68\x8e\x35\
+\xd2\x34\xcf\x47\x7a\x0c\x3e\x82\xe6\x04\x02\x58\x8a\xe6\xfa\x2d\
+\x6d\x9a\xe6\xf9\x48\x8f\xc1\x47\xd0\x9c\x8c\x1d\x60\xca\x2d\x6d\
+\x3e\xcd\x9b\x41\x7a\xd0\x9c\x48\x68\x4e\x6e\x3b\xc0\x24\x5b\x5a\
+\x07\x9a\x93\x77\x67\xd5\x21\x3d\x68\x4e\x24\x34\x27\xff\x75\x80\
+\x09\xb6\xb4\x0e\x34\x27\x2b\x97\x9d\x65\x20\x3d\x06\x1f\x0a\x9a\
+\x13\x09\xcd\xc9\x04\x03\x17\xa6\xdf\xd2\xe6\xd3\x9c\x6c\x70\x76\
+\x36\x17\xe9\x31\xf8\x90\xd0\x9c\x94\x41\x73\xb2\xa2\x82\xe5\x6e\
+\x69\xf5\x34\x27\x37\x38\x3b\x9b\x87\xf4\xb8\xc5\x20\xa1\x39\x29\
+\x83\xe6\x64\xe3\x05\xab\x9d\xe6\x64\x2f\xb4\x8f\xe7\x22\x3d\x6e\
+\x31\x04\xcd\xc9\xd6\x0b\xd6\x08\xcd\x47\x42\x9b\x8b\xf4\xb8\xc5\
+\x10\x34\x27\x3b\x2f\x58\x13\x34\x1f\x09\xad\x62\xa4\x07\xcd\x89\
+\x84\xe6\x04\x34\x58\x03\x34\x1f\x09\x2d\x07\xe9\x41\x73\x22\xa1\
+\x39\x91\xd0\x9c\x8c\xd1\x60\xd5\xd3\x7c\x24\xb4\x1c\xa4\x07\xcd\
+\x89\x84\xe6\x44\x42\x73\x72\x5b\x0e\x56\xd1\x96\x96\x90\x11\x3d\
+\x72\x90\x1e\x34\x27\x12\x9a\x93\x22\x68\x4e\xac\x8a\x2d\x6d\x9a\
+\xe6\x59\x48\x0f\x9a\x13\x09\xcd\x49\x19\x34\x27\xd7\x56\xfe\x96\
+\x36\x4d\x73\x92\x8f\xf4\x38\x93\x18\x34\x27\xd7\xbf\x5a\xf1\x5b\
+\xda\x34\xcd\xdb\x42\x7a\xd0\x9c\x48\x68\x4e\xd6\xb8\xb0\xc2\xcf\
+\x5c\xa5\x69\xde\x16\xd2\x83\xe6\x44\x42\x73\xb2\x15\x86\x35\x43\
+\x73\xf2\x49\xb5\x48\x0f\x9a\x13\x09\xcd\xc9\x4e\x18\xd6\x08\xcd\
+\xc9\xb9\x1d\xcd\x47\x7a\xd0\x9c\x08\x68\x4e\x24\x34\x27\x08\xc3\
+\x9a\xa0\x39\x59\x4b\xee\x68\x2e\xd2\x83\xe6\x44\x40\x73\x22\xa7\
+\x39\xcc\xb0\x06\x68\x4e\xb6\x92\x3b\x9a\x87\xf4\xa0\x39\x39\x74\
+\x9a\xc3\x0c\xab\x9e\xe6\x64\xc7\xb9\xa3\x39\x48\x0f\x9a\x93\xa0\
+\x39\xb1\x56\x68\x3e\xe2\x5c\x2e\xd2\xe3\xe3\x82\x7a\x9a\x13\x09\
+\xcd\x89\x09\xce\x5c\x39\xd0\x7c\xc4\xb9\x86\x90\x1e\x34\x37\x09\
+\xcd\xc9\xf1\xb1\x15\x7d\xe6\x8a\xa4\xe9\x41\x5a\x41\x7a\x7c\x5c\
+\x50\x42\x73\xb2\x1e\x81\x58\xde\x96\x96\xb8\x6e\x69\xd3\xf4\x20\
+\xad\x20\x3d\xbe\xfb\x2f\xa1\x39\xd9\x8e\x40\x6c\x44\x0f\xc1\x05\
+\xea\x7c\x9a\x4f\x4c\x97\x89\xf4\xa0\x39\x11\xd0\x9c\x48\x68\x4e\
+\x76\x23\x29\x13\x6c\x69\x5d\x68\x2e\x40\x7a\x7c\xf7\xbf\x59\x9a\
+\x33\xb2\x35\x87\x2d\xad\x80\xe6\x02\xa4\xc7\x77\xff\x1b\xa6\x39\
+\x47\x1a\x2c\x7f\x4b\xab\xa7\x79\x93\x48\x0f\x9a\x93\xc5\x69\x7e\
+\xbc\x8f\xe5\x6e\x69\xf5\x34\x6f\x12\xe9\x41\x73\x22\xa0\x39\xb1\
+\xbc\x33\x57\x7a\x9a\x7b\x21\x3d\x68\x4e\x04\x34\x27\x12\x9a\x13\
+\xab\x9b\xe6\x4d\x22\x3d\x68\x4e\x24\x34\x27\x7d\x6f\x45\x9e\xb9\
+\x9a\x41\x73\xf2\xe1\xb4\x6a\xa4\x07\xcd\x89\x84\xe6\xa4\x5f\xfd\
+\xac\xc0\x33\x57\x33\x68\x4e\x56\xec\x3b\x9d\x8b\xf4\xa0\x79\xd0\
+\x9c\x6c\xbe\x99\x73\x69\xe5\x9f\xb9\x4a\xd3\x9c\x6c\xec\x77\x3a\
+\x0f\xe9\x41\xf3\xa0\x39\xe9\xb7\xef\xa3\xb7\xb2\x68\xfe\x6e\x06\
+\xcd\xc9\x8d\xfd\x4e\x1b\x42\x7a\xd0\x9c\x2c\x48\xf3\x7e\xf7\x3e\
+\x7a\x9b\x41\x73\xd5\x96\x36\xf1\x3e\xf6\x00\xec\x9a\x41\x7a\xd0\
+\x9c\x2c\x49\x73\xde\x47\x6f\x82\x2d\xad\x0b\xcd\x01\xa0\x03\xd2\
+\x83\xe6\x17\x12\x9a\x93\x85\x69\x7e\xb9\x8f\x55\xb4\xa5\xfd\x9f\
+\x00\xc0\x46\x91\x2e\xa1\x39\x91\xd0\x9c\x2c\x4e\x73\x62\x82\x2d\
+\xad\x0f\xcd\x49\x7b\x48\x97\xd0\x9c\x48\x68\x4e\x04\x34\x27\x26\
+\xd8\xd2\x7a\xd0\x9c\xb4\x87\x74\x09\xcd\xc9\xe1\xd1\x9c\x0c\x83\
+\xb1\xa5\xad\x98\xe6\xa4\x3d\xa4\x4b\x68\x4e\x0e\x8f\xe6\x64\xfd\
+\x89\x74\x6b\x85\xe6\x8d\x22\x3d\x68\x7e\xdb\x1f\xee\x34\x27\xc3\
+\xfa\x7d\x0c\x56\x03\xcd\xd3\xf4\xf0\x44\x7a\xd0\x9c\x48\x68\x4e\
+\xdc\x69\x4e\x86\xed\xfb\xf8\xc5\xca\xa7\x79\x9a\x1e\x9e\x48\x0f\
+\x9a\x13\x09\xcd\xc9\x82\x34\x1f\x76\xef\x63\xb0\xd2\x69\x9e\xa6\
+\x47\x93\x48\x87\xe6\x44\x42\x73\x22\xa1\x39\x59\x92\xe6\xbc\x8f\
+\xc1\x2a\xa1\x79\x9a\x1e\x64\xa8\x1e\xe9\xd0\x9c\x48\x68\x4e\x24\
+\x34\x27\x0b\xd3\x7c\xd8\xc7\xa4\x67\xae\xf2\xff\x15\x9c\xe6\xf2\
+\x9f\x93\xca\x91\x0e\xcd\x89\x84\xe6\xe4\xd0\x68\x4e\xac\xbc\x33\
+\x57\x33\x68\x4e\xd6\x50\x3c\x71\x40\xba\x7e\xf0\x11\x34\x27\xee\
+\x34\x27\x56\xfc\x99\xab\x34\xcd\xc9\x16\x8a\x27\x0e\x48\x57\x0f\
+\x3e\x82\xe6\xc4\x9d\xe6\xe4\xbc\x03\xe9\x44\xb8\xa5\x9d\x41\x73\
+\xb2\xd3\xe2\x89\x23\xd2\x83\xe6\x57\x12\x9a\x13\x77\x9a\x93\xee\
+\xbc\xeb\xac\xa4\x33\x57\x59\x34\x47\x8b\x7e\x48\x0f\x9a\x5f\x49\
+\x68\x4e\xdc\x69\x4e\xba\xf5\xfb\xe8\x6c\x42\x8f\x3a\x69\x8e\x16\
+\x3d\x91\xae\x1f\x7c\x48\x68\x4e\x24\x34\x27\xee\x34\x27\xdd\xf6\
+\x7d\x74\x36\xa1\x47\x8d\x34\x47\x8b\x9e\x48\xd7\x0f\x3e\x24\x34\
+\x27\x87\x43\xf3\x6e\xf7\x3e\xce\x6d\x44\x8f\xaa\x69\x4e\x1c\x90\
+\xae\xa4\x39\x91\xd0\x9c\x1c\x10\xcd\x79\x1f\x20\xfd\x75\xd5\x34\
+\x27\x8e\x48\xd7\xdf\x62\x08\x9a\x13\x57\x9a\x77\xfb\x58\x33\x34\
+\xf7\x46\xba\xfe\x16\x43\xd0\x9c\x38\xd3\x9c\x58\x1d\x34\x4f\xd3\
+\xc3\x1f\xe9\x41\x73\x22\xa1\x39\x71\xa7\x39\xb1\xa2\xcf\x5c\xdd\
+\x95\x1e\x02\xa4\x0b\x68\x4e\x24\x34\x27\x12\x9a\x93\x05\x68\x4e\
+\xac\xf8\x33\x57\x69\x7a\x08\x90\x2e\xa0\x39\x91\xd0\x9c\x48\x68\
+\x4e\x16\xa0\x39\x79\xd1\x59\x16\xcd\xfd\xb7\xb4\x69\x7a\x08\x90\
+\x2e\xa0\x39\x91\xd0\x9c\x1c\x04\xcd\x79\x1f\x9d\x15\x7a\x81\xfa\
+\xce\xff\x0a\x4e\x73\xd5\x67\x20\x5d\x49\xf3\x7f\xd9\xbb\x93\x5d\
+\x27\x62\x20\x8c\xc2\x25\x71\x91\xb0\xa1\x25\xa4\x10\xb1\x60\x81\
+\xc4\x38\x0f\x8f\x44\x0c\x5c\x86\x30\xcf\x8f\x4f\x43\x48\xce\xdd\
+\xf5\xc2\x65\x7e\x5f\x53\xbd\x38\x6f\x50\x8b\x4f\xad\x72\x2d\xd2\
+\x7c\x8e\x84\xe6\xe4\x3f\xa1\x39\xf3\x71\x64\x8a\x5d\x5a\x7f\x9a\
+\x93\x59\x95\xeb\x86\x48\xd7\x5f\x30\x08\x9a\x93\x56\x34\x67\x3e\
+\x8e\xac\x7e\x97\x56\x4f\x73\xf2\x47\x95\xeb\x96\x48\x0f\x9a\x13\
+\x09\xcd\x49\x3b\x9a\x33\x1f\x4f\xad\x76\x97\x56\x4f\x73\xf2\x97\
+\x96\xeb\x76\x48\x0f\x9a\x13\x09\xcd\x49\x53\x9a\x13\xab\xdb\xa5\
+\xd5\xd3\x9c\x1c\x68\xb9\x6e\x85\xf4\xa0\x39\x91\xd0\x9c\x34\xa6\
+\x39\x31\x9f\x67\xae\xf4\x34\x87\x96\x02\xa4\x2b\x2e\x18\x08\x68\
+\x4e\x24\x34\x27\xcd\x69\x4e\x6c\x0c\x9a\x43\x4b\x01\xd2\x15\x17\
+\x0c\x04\x34\x27\xe3\xd3\x9c\x58\x2f\x34\xdf\xd6\xd2\x9c\xb4\x47\
+\xba\xfe\x82\x41\xd0\x9c\xb8\xd3\x9c\xe4\x62\x7d\xd0\x7c\x5b\x4b\
+\x73\xd2\x1e\xe9\xfa\xe3\x82\x41\x73\xe2\x4e\x73\x92\x73\xc9\xd6\
+\xc5\x33\x57\xb5\x34\x27\x02\xa4\x0b\x8e\x0b\xca\x69\x4e\x24\x34\
+\x27\xee\x34\x27\x39\xe7\x92\xb3\xe9\x69\xbe\x75\xa1\xb9\x00\xe9\
+\x41\xf3\x17\x12\x9a\x13\x77\x9a\x93\xbc\x9b\x8f\x6c\xd0\xbc\xdf\
+\x5d\xda\x65\x7a\x28\x90\x1e\xc7\x05\x25\x34\x27\x0d\x69\x5e\xf6\
+\xf3\x91\xad\xff\x5d\xda\x65\x7a\x28\x90\x1e\x77\xff\x07\xa6\x39\
+\xf3\x51\xac\xf7\x5d\xda\x65\x7a\x28\x90\x1e\x77\xff\xc7\xa6\x79\
+\x3e\xc4\xfa\xde\xa5\x5d\xa6\x87\x0c\xe9\xfa\xbb\xff\x41\x73\xe2\
+\x4c\x73\x62\x3d\x3f\x73\xb5\xfc\x57\x50\x86\x74\xfd\xdd\xff\xa0\
+\x39\x71\xa7\x39\xb1\x41\x68\x4e\xde\x7e\x5d\xc9\x91\x1e\x77\xff\
+\xdb\xd3\x9c\xb8\xd3\x9c\xa4\x64\x43\xd0\x9c\xfc\x76\xe8\xaa\x3d\
+\xd2\x83\xe6\x44\x42\x73\xe2\x4e\x73\x92\x52\xda\xd8\x00\x34\x27\
+\x3b\x87\xae\x5a\x23\x3d\x68\x4e\x24\x34\x27\xee\x34\x27\x69\xfe\
+\x36\xc9\x4e\x3d\xcd\xc9\x1e\xa3\xab\xb6\x48\x0f\x9a\x93\xd1\x68\
+\x4e\x36\xbb\xf9\x48\x36\x0c\xcd\xc1\x68\x6b\xa4\xeb\x69\x4e\x04\
+\x34\x27\xe3\xd2\x3c\xed\xe7\x23\xd9\x20\x34\x07\xa3\x02\xa4\x0b\
+\x69\x1e\x34\x27\x7e\x34\x67\x3e\x92\xf5\xf2\xcc\x55\x15\xcd\xc1\
+\xa8\x00\xe9\x42\x9a\x07\xcd\x89\x2b\xcd\xd3\x21\xd6\xc7\x33\x57\
+\xf5\x34\x27\x12\xa4\x07\xcd\x8b\x80\xe6\xc4\x99\xe6\xc4\x7a\x78\
+\xe6\xaa\x9e\xe6\x44\x82\xf4\xa0\x79\x11\xd0\x9c\x38\xd3\x9c\x80\
+\x74\xe1\x2e\xad\x13\xcd\x05\x48\x97\xd3\x9c\x48\x68\x4e\x04\x34\
+\x27\xee\x34\x27\xd3\x64\xea\x67\xae\x9c\x68\x2e\x46\xba\x84\xe6\
+\x44\x4b\xf3\x32\x16\xcd\xc9\x34\x7f\x06\x3d\x4e\x31\xcd\xc5\x48\
+\x97\xd0\x9c\x68\x69\x5e\xba\xa0\x39\xa9\xa4\x39\x39\x9e\xe6\xef\
+\xd8\xca\x00\x34\xd7\x22\x5d\x42\x73\x12\x34\x3f\x99\x4a\x9a\x93\
+\x69\x37\x1f\x93\x0d\x40\x73\x29\xd2\x25\x34\x27\x41\xf3\x93\x71\
+\xa3\xf9\xb4\x9f\x8f\xc9\x46\xa1\x39\x79\x79\xee\xdf\x21\xbd\x21\
+\xcd\x7f\xb1\x77\x27\xbb\x4e\xc4\x40\x14\x86\x4b\x02\xa4\x30\xc9\
+\xd8\x46\x62\xc1\x02\x89\x71\x1e\x1e\x89\xf1\x32\xa4\x49\x33\x75\
+\x2e\x8f\x4f\x94\xdb\xc9\xb9\x1b\xd4\x24\xc7\xd2\x69\x97\xdc\x8b\
+\xff\x0d\x6a\xf1\xa9\x55\xe5\x8a\x68\x8e\x08\x68\x8e\x94\xa3\x39\
+\xe6\xe3\xba\xf9\xa0\x39\xb2\x41\x6b\x22\x90\x5e\x23\xcd\x11\x09\
+\xcd\x11\x01\xcd\x91\xa2\x34\x3f\xd9\xc7\x2a\xa0\xf9\x24\x3d\x90\
+\x2d\x5a\x13\x81\xf4\x8a\x69\xde\x49\x68\x8e\x78\xa2\x39\x62\x73\
+\x3f\x73\x35\x4d\x0f\x64\x94\x6b\x22\x90\x4e\x2c\x7c\x68\x69\xde\
+\x49\x68\x8e\xf8\xa2\x39\x62\xb3\x3a\x73\xc5\xd0\xa3\xdb\xcb\x35\
+\x11\x48\x27\x16\x3e\x94\x34\xef\x24\x34\x47\x7c\xd1\x1c\x09\xc1\
+\x0a\xd3\x7c\x49\xd0\x9c\xa1\x47\x07\xb9\x12\x48\x27\x16\x3e\x94\
+\x34\xef\x0a\xd2\xbc\xd1\x1c\x59\x85\x10\x4c\x77\x81\x9a\xff\x2b\
+\x88\x40\xae\x04\xd2\xa9\x85\x8f\x46\x73\xa4\x66\x9a\x23\x61\x15\
+\x36\x9f\xcd\x64\x97\x96\xa7\x39\x42\x20\x9d\x5e\xf8\x68\x34\x3f\
+\xa9\x99\xe6\x48\x38\x9b\x8f\x95\xcd\x62\x97\x96\xa7\x39\x42\x20\
+\xbd\x62\x9a\x23\x12\x9a\x23\x12\x9a\x23\x85\x68\x1e\x76\xf3\x11\
+\x6c\x06\xbb\xb4\x3c\xcd\x11\x02\xe9\x15\xd3\x1c\x91\xd0\x1c\x71\
+\x42\x73\xcc\x47\x30\xf9\x2e\x6d\x21\x9a\x13\x48\xa7\x69\x8e\x48\
+\x68\x8e\x48\x68\x8e\xf8\xa1\x79\xd8\xc7\xca\x9c\xb9\xd2\xd3\x9c\
+\x47\x3a\xbf\xf0\x21\xa1\x39\x52\x8a\xe6\x8d\xe6\x48\x34\x1f\x34\
+\xe7\x91\xce\xdf\x62\x90\xd0\x1c\x69\x34\x1f\x33\x86\xa2\xf9\x98\
+\x18\x7b\xf3\x42\x73\x1e\xe9\xfc\x2d\x86\x46\x73\x44\x42\x73\x84\
+\xa2\xf9\x98\x18\x63\x1f\xcd\x07\xcd\x79\xa4\xf3\xb7\x18\x1a\xcd\
+\x11\x09\xcd\x11\x8a\xe6\x63\xe2\x76\x3e\xa2\xb9\xa1\x39\x32\x10\
+\x48\xaf\x99\xe6\x88\x84\xe6\x88\x84\xe6\x48\x01\x9a\x87\x7e\x9c\
+\x8f\x68\x5e\x68\x8e\xac\x49\xa4\xf3\xb7\x18\x24\x34\x47\x24\x34\
+\x47\x24\x34\x47\x8a\xd0\x7c\x3f\x1f\xd1\xaa\xd8\xa5\x9d\xa6\x07\
+\xb2\xe6\x90\xce\x9f\x49\x94\xd0\x1c\x91\xd0\x1c\x71\x41\x73\xcc\
+\xc7\x60\x35\xec\xd2\x4e\xd3\x03\x59\x53\x48\xe7\xcf\x24\xca\x68\
+\x8e\x85\x8f\x46\x73\xe4\x48\x9a\x8f\x49\x43\xb2\x9a\x76\x69\xff\
+\x67\x3e\x18\xa4\xf3\x67\x12\x65\x34\xc7\xc2\x47\xa3\x39\x72\x24\
+\xcd\xc7\xa4\x34\xa4\x64\x73\xda\xa5\xe5\xe8\x31\x86\x42\x3a\x7f\
+\x26\xb1\xd1\x1c\x91\xd0\x1c\x21\x68\xbe\x49\xda\xce\x47\xb2\x59\
+\x9f\xb9\x42\xa6\xe9\x81\x10\x48\x77\x40\x73\x44\x4b\xf3\x5e\x42\
+\x73\x84\xa2\x79\x9f\xc6\xf9\x48\xe6\x85\xe6\x08\x81\x74\x47\x34\
+\x5f\x4a\x68\x8e\x48\x68\x8e\x90\x34\xdf\xcf\xc7\x60\x4e\x68\x8e\
+\x10\x48\xf7\x43\xf3\xa5\x96\xe6\x7d\xe5\x34\xc7\x7c\x24\xf3\x41\
+\x73\x84\x41\x3a\x4f\x73\x44\x40\x73\x44\x4b\xf3\xbe\x7e\x9a\xef\
+\x92\xb3\x79\xa1\x39\x8f\x74\x9e\xe6\x88\x88\xe6\x58\xf8\x68\x34\
+\x47\x26\x69\xfe\xaf\xf9\x58\xe4\x9c\xcd\x03\xcd\x59\xa4\x97\x7f\
+\xc1\xa0\xd1\x1c\x91\xd0\x1c\x39\x84\xe6\x31\x61\x3e\x52\x5e\xe4\
+\xcd\x67\x0e\x68\x4e\x22\xbd\xfc\xe3\x82\x8d\xe6\x88\x84\xe6\xc8\
+\x21\x34\xef\x41\x8f\x94\xf2\xd9\x7c\x2c\x4c\x7d\xe6\x8a\xa7\x39\
+\x8f\x74\x9e\xe6\xc8\xbc\x68\x6e\x5a\x9a\x0f\x12\x9a\x23\x87\xd0\
+\x3c\x9e\xa7\x79\xde\xcd\x47\x36\xf1\x99\x2b\x9e\xe6\x04\xd2\x9d\
+\xd2\x1c\xd1\xd2\x7c\x90\xd0\x1c\x39\x84\xe6\xf1\x3c\xcd\x33\xe6\
+\x23\xdb\x51\xf4\xe0\x69\xde\x95\xa6\x39\xf2\xad\x3f\x00\xe9\x9e\
+\x1f\x17\x3c\x96\xe6\x7f\xd9\xbb\xb7\xe5\xc6\x89\x20\x0c\xc0\x5d\
+\x15\x47\x45\xb2\xab\x12\x86\x95\x90\x8c\x5c\x5b\xb5\x10\x60\x09\
+\x87\x7d\x24\x20\x8b\xc9\x01\xcc\x21\x66\xe3\xc7\x67\x34\x9a\x7f\
+\x46\x5e\x55\x6d\x3a\xc6\x35\x3d\x1e\x8d\x2e\xfe\x37\xe8\x8b\xaf\
+\xbb\x47\x7d\xa0\x0b\x06\x47\x4c\x73\x57\x1f\x25\x31\xe8\x21\xf0\
+\x07\xea\xfd\xeb\x43\x99\x78\xce\x45\xba\x87\xe3\x82\xfe\x69\x8e\
+\xd8\x9f\xe6\x89\xe6\x88\xb2\x2c\x8f\xe2\x2d\x2d\xbf\x3e\x34\x8c\
+\xe7\x5c\xa4\x4f\xe5\xee\x7f\xa2\x79\xfe\x14\x9a\x23\x4a\xf5\x3d\
+\xa3\xf0\xdf\xd2\xf2\xeb\xc3\xc0\x78\xce\x45\xba\x87\xbb\xff\x89\
+\xe6\x3a\x64\x69\x9e\x3f\x85\xe6\x88\x67\xba\x3e\x4a\x0a\xfd\x2d\
+\x2d\xdf\x1f\x16\xc6\x73\x1e\xd2\x89\x3c\x1c\x17\x4c\x34\x57\x21\
+\x4b\xf3\xfc\x29\x34\x47\x94\xa6\x3e\x4a\x3a\xa6\xb7\xb4\x1f\x0a\
+\x07\x63\x0e\xd2\xe1\x8f\x49\xdc\xfd\x17\xa2\x39\x42\x96\xe6\xab\
+\xbd\x68\x6e\xeb\xa3\xa4\xb0\x7f\x73\xc5\xa7\x39\x08\xc0\x43\xba\
+\xf6\x39\x45\x4d\x73\x84\x10\xcd\x11\xb2\x34\xcf\xf7\xa3\xb9\xab\
+\x8f\x2a\x1e\x9a\x23\x18\x48\xc7\x10\x3d\x62\x9a\x23\x84\x68\x8e\
+\x38\x56\x9a\x9b\xa8\xaa\xe7\x14\x09\xcd\x11\x0c\xa4\x6f\xed\x10\
+\x3d\x5a\x9a\x23\xf6\xa2\x79\xa2\xb9\x89\x4a\xd5\x47\x45\xe1\xd3\
+\xfc\x1d\x87\xe6\x2a\x78\x48\x57\xf5\xb1\xc5\x10\x3d\x52\x9a\x23\
+\xf6\xa2\x79\xa2\xb9\x89\x4a\xd7\x47\x45\xb1\xd0\x9c\x87\xf4\xbe\
+\xc9\x8b\x25\x93\x44\x73\x99\xbb\xff\xe1\xd3\xbc\x7c\x6e\xea\xa3\
+\xa2\x38\x68\xce\x43\xfa\x66\xb3\xc1\x10\x44\x23\xdd\xdb\xdd\xff\
+\x44\xf3\xeb\xe3\xa2\xb9\xad\x8f\x4a\x94\xe6\xb7\x07\xa2\x39\x0f\
+\xe9\xdd\x10\x64\xa3\x87\x20\x40\xfa\x24\x68\x8e\x10\xa1\x39\xe2\
+\xd8\x68\x5e\x55\x08\x0a\xf5\x2d\x2d\x9f\xe6\x3c\xa4\xab\x26\xd6\
+\x70\x53\x51\x37\x79\x27\x40\x73\x84\x08\xcd\x11\xc7\x47\x73\xc4\
+\xac\xa6\x30\xdf\xd2\xf2\x69\xce\x42\xba\xae\x0f\x55\x20\xaa\xc9\
+\x0b\xa4\xc3\x1f\x7e\x8e\x0b\x0a\xd1\x1c\x21\x42\x73\xc4\xf1\xd1\
+\x1c\x51\xcf\xea\x9a\x42\x7c\x4b\xcb\xa7\x39\x13\xe9\xa6\x89\x75\
+\xb1\x01\xd2\xd1\xbf\xf2\x73\x5c\x50\x88\xe6\x88\x27\xd1\x3c\xd1\
+\x1c\x51\x77\xf5\x51\x53\xd8\x6f\x69\xf9\x34\x77\xf1\xd9\x2e\xd2\
+\xfb\x26\xd6\x43\xd7\xc4\x02\xd2\x31\x44\xf7\x73\xf7\x5f\x88\xe6\
+\x88\x40\x68\x8e\x08\x93\xe6\xe3\xfa\xa8\xfb\xfa\xa8\x89\x37\x15\
+\x0c\x9f\xe6\x08\xa5\x84\x5d\xa4\xf7\x4d\x2c\x55\x20\x40\xfa\xfd\
+\x3d\x86\xe8\xbe\xee\xfe\x27\x9a\x23\x02\xa6\x79\x39\xa4\x79\x8d\
+\xfa\x98\x51\x1c\x34\x47\x68\x2a\x0c\x91\x8e\x26\xd6\x03\x90\xae\
+\x00\x62\x87\xe8\x7e\xee\xfe\x27\x9a\x23\x04\x69\x8e\x18\xd1\x1c\
+\xb1\x4b\x73\xf5\x99\xa0\x08\x68\x8e\x00\x15\x1c\xd2\xd1\xc4\xb2\
+\x48\xff\x47\x01\xe4\xe4\x1e\x43\xf4\xc9\xd0\x1c\x21\x42\x73\x84\
+\x20\xcd\x11\x23\x9a\x23\xde\xa7\x79\x8d\xc8\x28\x1a\x9a\x3b\x2a\
+\xac\x0d\xd2\x47\x9b\x26\x2f\x4d\x93\x17\x4b\x26\xe2\x77\xff\xb7\
+\xb2\xc7\x05\xd7\x31\xdc\xfd\xe7\xff\x26\x71\x44\x73\xc4\x88\xe6\
+\x88\x2c\xcb\x28\x12\x9a\x0f\xbc\x60\x90\x8e\x26\x96\x45\xba\xde\
+\xe4\xd5\x43\x10\x20\xdd\x0f\xcd\x11\x42\x34\x47\xc4\x45\x73\xfe\
+\x05\x03\x04\x9f\xe6\x88\xf3\x4c\x7d\x14\x05\xcd\x07\x5e\x30\x48\
+\x77\x4d\x2c\x20\xbd\x6f\xf2\x62\x53\x51\x37\x79\x7d\xde\xfd\x17\
+\xa2\x39\x22\x2e\x9a\xf3\x2f\x18\x20\xf8\x34\x47\x64\xba\x3e\xce\
+\x29\xb8\xdf\x5c\xf1\xe9\x81\x18\x78\x01\x48\x1f\x6d\x9a\xe8\x4d\
+\xc5\x8d\xdb\x54\x84\x3f\x3c\xdd\xfd\x17\xa2\x39\x62\x1a\x34\x2f\
+\x0e\x47\xf3\x3a\x33\xf5\x91\x51\xf8\xbf\xb9\x62\xd2\xdc\xc5\x5c\
+\x37\xb1\xde\xb8\x4d\x13\x65\xf4\xfe\xb9\xed\x4b\x20\xbd\x1f\xa2\
+\x7b\xbf\xfb\x9f\x68\x8e\x38\x3c\xcd\x8b\x43\xd2\xdc\xd6\x47\x46\
+\xa1\xff\xe6\x8a\x4d\x73\x17\xeb\xdd\x4d\x13\x6c\x62\xdd\x6e\x80\
+\x74\x2c\x99\x4c\x93\xe6\xab\xc7\x68\x9e\x68\xee\xea\x63\x41\x0c\
+\x9a\x4b\xbe\xa5\xe5\xd3\xdc\xc5\x7c\x67\xd3\x44\x37\xb1\xba\x26\
+\x2f\x90\x4e\x84\x21\xfa\x14\x69\xbe\x62\xd0\x3c\xd1\xdc\xc4\x62\
+\xb1\xa0\xc0\xdf\xd2\xf2\x69\xee\x62\x3e\xd8\x34\x41\x13\x0b\x9b\
+\x58\x5d\x7d\x10\x86\xe8\x3e\x69\x8e\x10\xa2\x39\x82\x41\xf3\x44\
+\x73\x13\x0b\xf5\x9d\x11\xf3\x2d\x6d\xf8\x34\x77\x31\xb7\x9b\x26\
+\xa6\x89\x85\xe7\x84\x9b\xfe\x77\x0d\x76\x88\xee\x8f\xe6\x08\x59\
+\x9a\xaf\x18\x34\x4f\x34\x37\x71\xa6\xeb\x63\x41\x4c\x7a\x84\x4f\
+\xf3\x31\xd2\x2f\xb0\x69\x62\x91\xfe\x6a\x8b\x21\x88\x46\x88\x2f\
+\x9a\x23\x64\x69\xbe\x62\xd3\x3c\xd1\x3c\x5b\x98\xfa\x58\x10\x93\
+\x1e\xe1\xd3\xdc\xc5\x4a\x23\x5d\x19\xfd\xe2\xab\xae\x89\xf5\x0d\
+\x90\x6e\x9b\xbc\x40\xba\x1f\x9a\x23\x8e\x87\xe6\x89\xe6\xb6\x3e\
+\x16\xc4\x9c\x0a\x86\x4f\x73\xc4\xd5\x8b\x42\x21\xfd\x73\xbb\x69\
+\x02\xa4\xa3\xc9\x4b\x40\xfa\x8b\x2b\xb1\xbb\xff\x89\xe6\xb3\xb0\
+\x69\x7e\xb6\x40\x50\x24\x34\x47\x74\xee\x2e\x14\xd2\x2f\x55\x81\
+\x28\xa4\xbf\xb2\x48\x37\x4d\x5e\x6c\x2a\xc2\x1f\x13\xa5\xf9\x5a\
+\x88\xe6\x88\xd0\x69\x8e\x68\x72\x8a\x81\xe6\x08\x33\xd7\x28\xba\
+\x26\xd6\xa5\x6a\x62\x01\xe9\xaa\x3e\xdc\x26\x96\xab\x8f\xab\xa9\
+\xd2\x7c\x2d\x4b\xf3\x59\xe8\x34\x47\x34\x4d\xde\x50\x34\x34\x7f\
+\x6b\xe7\xe2\x45\xd7\xc4\xba\x7c\xf3\x1a\x48\xd7\x4d\x2c\xdd\xe4\
+\x35\x48\xc7\x10\x5d\xea\xee\xbf\x2c\xcd\xd7\xb2\x34\x9f\x85\x4e\
+\x73\x44\xd3\xd5\x47\x43\xb1\xd0\x7c\xb0\x57\xb5\xd2\xcf\xa5\x80\
+\xf4\x8f\xf5\x75\xa9\xe1\x26\xd6\x5f\x58\x32\x11\xa1\xf9\xb5\x10\
+\xcd\x11\xb2\x34\x9f\x85\x4e\x73\x44\xd3\xd7\x47\x43\x71\xd0\x7c\
+\x67\x2f\xb7\x50\x05\x02\xa4\x9f\x9e\xf6\xff\xc4\x7a\x67\x37\xb1\
+\x54\x8f\x17\x43\x74\x01\x9a\x5f\xcb\xd2\x7c\xcd\xa2\x79\xa2\x79\
+\x8e\xfa\x68\x28\x06\x9a\x9b\xd2\x40\x14\x5f\x02\xe9\xba\x89\xa5\
+\xaf\x4b\x01\xe9\x18\x82\x68\xac\xf8\xa3\x39\x22\xd1\x7c\x54\x1f\
+\xe2\x34\x1f\xd7\x87\x2e\x0d\x13\x14\xf6\x5b\x5a\x3e\xcd\x11\x43\
+\xa4\x77\x9b\x58\xdd\x3f\x7f\xbe\x00\xd2\xed\x10\xc4\x21\xfd\x0f\
+\xa9\xbb\xff\x89\xe6\xe7\xf2\x34\x47\xbc\x4f\xf3\x06\xd1\x52\xe0\
+\x6f\x69\xf9\x34\x47\x00\xe9\xae\x89\x05\xa4\xf7\x4d\x5e\x0c\x41\
+\xd4\x37\x51\x9a\x23\x84\x68\x8e\xf0\x4d\xf3\x6a\x44\x73\xc4\x88\
+\xe6\x88\xa2\x6d\x29\xf0\xb7\xb4\x7c\x9a\xef\x22\xdd\x35\xb1\x80\
+\x74\xd7\xe4\xb5\x48\x97\xa1\x39\x42\x88\xe6\x08\x21\x9a\x23\x7c\
+\xd3\xbc\x1a\xd1\x1c\x31\xa2\x39\xa2\x55\xf5\xd1\x92\x87\xb7\xb4\
+\x7e\x68\xee\xa2\xe8\xea\xc3\x34\xb1\x80\xf4\x5b\xd3\xe4\xc5\xa6\
+\xa2\x6e\xf2\x4a\xd0\x1c\x21\x44\x73\x84\x10\xcd\x11\x07\xa5\x39\
+\xff\x37\x89\x63\x9a\x67\x23\x9a\x23\x5a\x5d\x1f\x2d\x05\xfe\x9b\
+\x2b\x3e\xcd\x5d\x14\xb6\x89\x05\xa4\xab\x4d\x45\x34\x79\x81\x74\
+\xf8\x43\x84\xe6\x77\x42\x34\x47\x44\x40\x73\xd6\x05\x03\x04\x9f\
+\xe6\x88\xd6\xd4\x47\x41\xd1\xd0\xdc\x45\x81\x26\x16\x90\x6e\x9e\
+\x13\x6e\xb7\x0e\xe9\x1a\x30\x42\x34\xbf\x13\xa2\x39\x22\x0e\x9a\
+\xf3\x2f\x18\xec\x41\x73\x5b\x1f\x2d\x05\xfe\x9b\x2b\x3e\xcd\x5d\
+\x14\x3b\x9b\x26\xba\x89\x75\xdb\xff\x13\x0b\x48\x37\x43\x74\x11\
+\x9a\xdf\x25\x9a\x3f\x52\x1f\xc5\x3e\x17\x0c\x0e\x4a\x73\x57\x1f\
+\x4b\x0a\xfb\x37\x57\x7c\x9a\xbb\xb8\xf9\x79\xb8\x69\xa2\x9b\x58\
+\xbb\x9b\x58\x37\x18\xa2\x27\x9a\xab\x10\xa2\x39\x82\x41\x73\xc6\
+\x05\x83\x43\xd3\xdc\xc4\x72\xb9\xa4\xb0\x7f\x73\xc5\xa7\x39\x42\
+\x3d\xf3\xc8\x2d\xd2\x4f\x54\x81\x5c\xf6\x4d\x2c\x87\xf4\x9b\x1b\
+\x0c\xd1\x13\xcd\x7f\x17\xa2\x39\x82\x45\x73\x84\x37\x9a\x9b\x98\
+\x2f\xd5\x47\xe1\xd1\xfc\xed\x1e\x34\x47\xe8\x5b\x06\xb9\x41\xba\
+\x6a\x62\x9d\xa0\x89\x05\xa4\xa3\xc9\xab\x29\x23\x47\x73\x84\x10\
+\xcd\x11\x42\x34\x47\xb0\x68\x8e\xf0\x46\x73\x13\x4b\x5d\x1f\x73\
+\x62\xd0\x5c\x66\x61\x97\x4f\x73\x04\x6e\xe1\xe4\x1a\xe9\xba\x89\
+\x75\xa2\x9b\x58\x16\xe9\x7d\x93\xd7\x6e\xba\x4b\xd1\x1c\x21\x44\
+\x73\x84\x10\xcd\x11\x2c\x9a\x23\x3c\xd3\xbc\x5d\x9a\xfa\x58\x52\
+\xe0\x0b\xbb\x7c\x9a\xbb\x5b\x6a\x79\x77\x3d\xe7\xf5\xf7\x68\x62\
+\x39\xa4\xdf\x9f\xf6\x4d\x5e\x6c\xba\xcb\x1e\x17\x14\xa2\x39\xe2\
+\x03\x34\x4f\x34\xb7\xf5\xb1\xa4\xe3\x79\x4b\xfb\x18\x3d\x50\x1f\
+\x0a\xe9\xb6\x89\x35\x44\xfa\x76\x6b\x9a\xbc\x40\xfa\x83\xe4\xdd\
+\xff\x78\x69\xfe\x1f\x7b\x77\xdb\xdc\xc4\x0d\x45\x01\xf8\x8e\xc1\
+\x0c\xa6\xb5\x70\xd3\x40\x78\xeb\xc6\x9b\x34\x9d\x78\x92\x32\xfc\
+\x24\x1c\xc0\xbc\xb4\x86\x05\x5c\x3b\x3f\x1f\x69\x57\x67\xaf\x8a\
+\xb2\xd5\x38\x53\xe7\x6a\x85\xfc\xe1\xfc\x83\xf3\xe1\x39\xb2\xb4\
+\x09\xd0\x5c\x57\x03\x41\x7d\xb9\x4b\x1b\xa6\x47\x1b\x63\x8c\x58\
+\x0e\xd2\xb5\xd1\x9b\x91\x77\x02\xa4\xc3\x1f\xf2\xdf\xfd\xcf\x34\
+\x5f\xc4\x46\x73\x84\x52\x14\xfd\x5d\xda\x30\xcd\x51\x0d\xc4\xd8\
+\x8e\x58\x8c\xf4\x13\x3b\x62\x11\x01\xe9\x75\x25\x33\xcd\x6d\xc8\
+\xd2\x7c\x1c\x1b\xcd\x11\x4a\xa9\x3d\x72\x4f\x05\x7b\x4d\x73\x8e\
+\x71\x33\x62\x01\xe9\x76\xc4\x3a\xd2\x23\x16\x90\x6e\x0f\xd1\x33\
+\xcd\xeb\x90\xa5\xf9\x38\x36\x9a\x23\x94\xe9\x87\xa2\x64\x68\xce\
+\x31\x7e\x7a\xe6\x20\x5d\xf7\xc3\x8e\x58\x40\xfa\x2b\x1c\xa2\xcb\
+\xd2\x1c\x21\x44\x73\x84\x2c\xcd\xc7\xb1\xd1\x1c\xb1\xd7\xf4\x43\
+\x51\x32\x34\xe7\x98\x9f\x32\xd2\x79\xc4\x02\xd2\x75\xad\x70\x88\
+\x2e\x49\x73\x84\x10\xcd\x11\xb2\x34\x1f\xc7\x4a\x73\x85\x7e\x28\
+\x4a\x82\xe6\x5d\x48\x1f\x0e\x27\xf8\xfa\x1a\x90\xbe\xaf\x37\x2c\
+\x1c\xa2\xcb\xd1\x1c\x21\x44\x73\xc4\xd5\x34\xcf\x34\xe7\x7e\x28\
+\x4a\x86\xe6\x3e\xd2\xf1\xe6\xcf\x66\xdd\x22\xbd\x19\x79\x75\xf3\
+\x80\x74\x49\x9a\x57\xb1\xd2\x3c\xd3\x5c\x21\x7e\xa5\x54\x68\xee\
+\x23\x1d\xd7\xa5\x36\x40\xfa\x57\xa2\x7a\xe4\x6d\x5f\x6a\x90\xa1\
+\x39\x42\x9a\xe6\x99\xe6\x08\x8f\xe6\xdc\x0f\x45\x51\x3f\x73\x15\
+\xa6\x79\x17\xd2\x67\x33\x5c\x97\x02\xd2\xcd\x75\xc2\x49\x33\xf2\
+\x02\xe9\x99\xe6\x4e\xfc\x70\x34\x47\x78\x34\x77\xfb\xa1\x28\xf2\
+\x67\xae\xc2\x34\xf7\xe3\xe2\x94\xaf\x4b\x01\xe9\x66\xe4\xad\x47\
+\xac\xf7\x8c\xf4\x75\xa6\x79\x1b\xa9\xd2\x1c\xe1\xd1\x1c\x71\x25\
+\xcd\xb9\x1f\x8a\xa2\x7e\xe6\x2a\x4c\x73\x3f\xaa\xe1\x48\x17\xe4\
+\x79\xf3\xf5\x1c\x20\xdd\x8e\xbc\x54\x39\x48\x5f\x2f\xe5\x69\xce\
+\x21\x42\x73\x44\xe2\x34\x1f\x79\x34\x47\x74\xd0\x9c\xfb\xa1\x28\
+\x48\x73\xf9\xbb\xb4\x61\x9a\x73\x54\xd5\xb0\x1a\x69\xa4\xcf\x66\
+\xfc\x30\xaf\xee\xc7\x0a\xd7\x09\x19\xe9\xba\xc4\xf2\x34\x47\x88\
+\xd0\x1c\x91\x04\xcd\xc3\xcf\x24\x32\xcd\x11\xdd\x34\xe7\xa0\xe8\
+\x9f\xb9\x0a\xd3\x9c\xa3\x32\xfd\xd0\x05\xd1\x23\x56\x8b\x74\x3b\
+\x62\xe9\x7e\x00\xe9\x1b\x83\xf4\xb5\x8b\x74\x21\x9a\x23\x44\x68\
+\x8e\x48\x80\xe6\x81\x2f\x18\x6c\x4f\x73\x8e\x82\x82\xf4\x88\x9f\
+\xe6\x88\xaa\xe9\x47\x35\xd2\x23\x16\x90\xee\x8c\x58\x40\xfa\x81\
+\x41\xfa\xda\x41\xba\x10\xcd\x11\xd7\xa6\x79\xa6\x79\xf8\x0b\x06\
+\xd7\xa3\x39\xe2\x41\x51\x90\x47\x8f\xbe\xd2\x7c\x88\x7e\x54\x8c\
+\xf4\xd3\x76\xc4\x62\xa4\x1f\x18\xa4\x6f\x18\xe9\x42\x34\x47\x44\
+\x42\x73\x44\x84\x34\x0f\x7f\xc1\xe0\x7f\xa6\x39\xa2\xd0\xfd\x28\
+\xc8\xa3\x47\x4f\x69\xce\xfd\x60\xa4\xf3\x88\xc5\x48\x3f\x30\x48\
+\xdf\xb4\x48\xcf\x34\x77\x23\x42\x9a\x87\xbf\x60\xb0\x03\x9a\x9b\
+\x28\xea\x7e\x14\xe4\x9d\x0a\xf6\x95\xe6\xe8\x07\x90\x8e\xeb\x52\
+\x9b\x7f\x21\x7d\xdf\x20\x7d\x03\xa4\x67\x9a\xbb\x21\x47\xf3\xf0\
+\x17\x0c\x6e\x98\xe6\xaa\xb0\xfd\x78\x40\xa9\xd0\x1c\x01\xa4\x9f\
+\x1c\x1a\xa4\xf3\x3f\x4d\x2e\x87\x06\xe9\xfb\x2e\xd2\xdf\x46\x46\
+\xf3\xb9\x08\xcd\x11\x72\x34\x0f\x7f\xc1\xe0\xc6\x69\xde\xf6\xa3\
+\xa0\xbe\xd3\xdc\xa9\x06\x23\xbd\x19\xb1\x74\x41\xf8\x9f\x26\xb7\
+\xbe\x47\xba\x7f\x34\x28\x4b\xf3\x79\x07\xcd\xf3\x77\xff\x05\x68\
+\x5e\x14\x08\x8a\xfc\x99\xab\x2d\xe8\xc1\x48\xb7\x23\x96\x8b\xf4\
+\x5b\x06\xe9\x13\x46\xba\xef\x73\x21\x9a\x23\xa2\xa3\xb9\xe0\x77\
+\xff\xe5\x69\x8e\x98\x4e\x29\xf2\x67\xae\xc2\xf4\xf0\x63\x64\xaf\
+\x4b\x39\x48\x3f\x32\x48\x9f\xb4\x48\x5f\x2f\xbf\xdf\x77\x65\x69\
+\x3e\xf7\x69\x9e\xbf\xfb\x2f\x47\x73\xc4\x54\xff\x68\xc7\x34\x7f\
+\xbd\x33\x9a\x83\x1e\x7e\x8c\xea\x11\xcb\x43\xfa\x10\x48\x7f\x8d\
+\x43\xf4\xb6\x1f\xb2\x34\x9f\x27\x4e\x73\x44\x4f\x68\x8e\x78\x68\
+\xfa\xf1\x90\x22\x7a\x81\x7a\xfb\x53\xc1\xab\x63\xa4\x47\x2c\x20\
+\xfd\xd8\x20\xfd\xd0\x41\x7a\xd3\x8f\xa5\x7b\x35\x6a\x97\x34\xcf\
+\x34\x47\xf4\x84\xe6\x88\x69\xd3\x8f\x29\xf5\xe4\x2e\x6d\x98\xe6\
+\x1c\xa3\x17\x2d\xd2\xcf\x0c\xd2\x4f\x1c\xa4\xd7\x23\x2f\x0e\xd1\
+\xa3\xa4\xf9\x42\x9e\xe6\x99\xe6\x53\xf4\x63\x4a\x71\xdf\xa5\x0d\
+\xd3\x3c\x8c\xf4\x13\x46\xba\x1d\x79\x71\x88\x1e\x21\xcd\x17\x82\
+\x34\x47\x64\x9a\x73\x3f\xa6\x14\xf5\x5d\xda\x30\xcd\xc3\x48\x9f\
+\x31\xd2\xcd\xc8\xbb\x31\x6f\xfe\x00\xe9\x68\x05\x87\x2c\xcd\x17\
+\x51\xd0\x3c\xd3\x9c\xfb\x51\x52\xac\x77\x69\xc3\x34\x0f\x22\xfd\
+\x77\x83\xf4\x63\x20\x9d\x47\x5e\x20\xdd\xef\x87\x2c\xcd\x17\x91\
+\xd0\x3c\xd3\x1c\x51\x96\x8f\x28\xfa\x67\xae\xc2\x34\xf7\x91\xfe\
+\xdc\x20\xfd\xdc\x45\xfa\xe5\x25\x46\x5e\x20\xdd\x3f\xfa\x10\xa2\
+\x39\x22\x12\x9a\x67\x9a\x23\x4a\xdd\x8f\x92\x12\xa1\xb9\x8f\xf4\
+\x73\x46\xba\x36\x3a\x46\x5e\x20\xdd\xf7\xf9\x0f\x45\xf3\x4c\x73\
+\x84\x47\x73\x44\x59\xf7\xa3\xa4\x34\x68\xee\x23\xfd\x0f\x20\xdd\
+\xf4\xa3\x1e\xb1\xf8\x9f\x58\x4b\x7b\x88\xee\x4d\x57\x99\xe6\x88\
+\xc4\x69\x8e\xf0\x68\x8e\x78\x64\xfb\x51\x52\xcf\x69\x1e\x46\xba\
+\x1e\xb1\x56\xf5\x88\x45\x40\xfa\x12\x87\xe8\xd1\xd2\x7c\x29\x44\
+\x73\x44\x12\x34\x0f\xf7\xa3\x9b\xe6\x6d\x3f\x4a\x4a\x81\xe6\x3e\
+\xd2\xff\x04\xd2\xeb\x11\x6b\x65\x46\x2c\x20\x5d\x8f\xbc\x38\x44\
+\x8f\x8d\xe6\x08\x21\x9a\x23\xd2\xa0\x39\xa2\x8b\xe6\xaa\x9b\xe6\
+\x4e\x3f\xee\x50\x8f\x69\x1e\x46\xba\x1e\xb1\xcc\x9b\x0d\x47\xab\
+\x2f\x40\xba\x19\x79\xdb\x43\xf4\x8e\x0b\x1f\x42\x34\x47\x08\xd1\
+\x1c\x11\x3f\xcd\xaf\xff\x4c\xa2\x13\xff\x4d\x73\x1b\x83\x3b\x03\
+\xea\xd3\x5d\xda\xad\x90\x6e\x47\x2c\x5d\x90\xc3\x15\x90\x6e\x47\
+\x5e\x1c\xa2\x33\xcd\x9d\x10\xa2\x39\x42\x88\xe6\x88\xde\xd1\x3c\
+\xfc\x05\x83\xed\x69\x6e\x63\xa0\xfb\x31\xa0\xfe\xdc\xa5\xdd\x12\
+\xe9\x76\xc4\x72\x90\xde\x8e\xbc\xb8\x89\x0e\x9a\x3b\x21\x44\x73\
+\xc4\xce\x68\xfe\x8d\xbd\x7b\xdd\x6d\x22\x06\xa2\x00\x3c\x0a\x04\
+\xc5\x84\x4b\x0b\xe1\x2a\x48\xa1\x21\xa8\x15\x97\x67\x82\x50\xee\
+\x2d\x49\x9a\x06\x78\x7c\xd6\xce\x1e\x4f\x9a\xfc\x18\x2d\x23\x65\
+\x6c\x77\xff\x9c\x37\x58\xad\xbe\xe3\xb1\xa7\x3c\x9a\xcb\x1b\x0c\
+\x14\x34\xaf\xa2\x13\xbe\x8f\x0e\xe5\x72\x97\xb6\x19\xd2\xb9\xc4\
+\x8a\x48\xaf\x4b\xde\xdf\x27\x67\x40\xfa\x76\xb5\xdb\xd2\xfc\xb2\
+\x3f\x4c\x68\xae\xdf\x60\xa0\xa7\xf9\xe3\x4e\xfd\x7d\x74\x28\x8f\
+\xbb\xb4\x8d\x91\x8e\x12\x0b\x48\x5f\x2c\x50\xf2\x02\xe9\xdb\xfe\
+\x68\x69\x7e\xd9\x1f\x46\x34\xd7\x6f\x30\xd0\xd3\x3c\x7e\x1f\x37\
+\x28\xf9\x67\xae\x9a\x87\x8b\x25\x16\x90\x5e\x0d\x9a\x60\x12\x0b\
+\x48\x47\x7f\x95\x2c\xcd\xa7\x46\x34\x47\xec\x8a\xe6\xf2\x06\x03\
+\x03\x9a\x77\x3a\x08\x2a\x86\xe6\x1c\xee\xbd\x7f\xb3\x81\x91\x7e\
+\xb8\x39\x89\x55\xff\x3f\xe6\xc2\x54\x89\x09\xcd\x11\x46\x34\x47\
+\xec\x8a\xe6\xf2\x06\x03\x13\x9a\x73\x50\x31\x34\xe7\x98\x8c\xaa\
+\x0f\x24\x22\x1d\x25\xd6\xfa\x75\x5b\x1c\x12\x0a\x53\x25\x66\x34\
+\x9f\x1a\xd1\x1c\xa1\xa4\xb9\xf5\x72\x41\x3d\xcd\x39\xa8\x18\x9a\
+\x73\xb8\xd1\x1a\xd2\xff\x1c\xf8\x12\xab\xbb\x58\x00\xe9\xbe\xc4\
+\xc2\x21\xa1\x30\x55\x62\x44\xf3\x69\xde\x34\xd7\x6f\x30\xb0\xa7\
+\x39\x07\x15\x43\x73\x0e\x37\x02\xd2\x07\x71\xd2\x04\x48\x0f\x93\
+\xbc\x7c\x48\x28\x4c\x95\x58\xd0\x7c\x9a\x3b\xcd\xf5\x1b\x0c\xec\
+\x69\xce\x41\xd9\xd2\x5c\x46\x7a\x65\xf4\x41\x28\xb1\x22\xd2\x43\
+\xc9\x7b\x76\xf1\x15\x93\xbc\xe2\x54\x49\x4b\x73\x27\xd0\x5c\xb1\
+\xc1\x20\x61\x9a\x73\x50\xa6\x34\x97\x91\xce\x25\x16\x90\xbe\x59\
+\xf2\xce\x33\xa0\xf9\xd2\x88\xe6\x08\x81\xe6\x8a\x0d\x06\x49\xd3\
+\x9c\x83\xd2\x7c\xe6\x4a\x8d\xf4\xba\xc4\x1a\xf0\xa4\xc9\x6c\x56\
+\x97\xbc\x40\x3a\xfe\x1f\x09\xd3\x7c\x69\x4b\x73\xd7\x84\xe6\xfb\
+\x25\xd1\x9c\x83\x92\x7b\xe6\x4a\x1f\xce\x97\x58\x07\xa1\xc4\x62\
+\xa4\xd3\xac\x9e\xc4\x02\xd2\xe1\x0f\x61\xaa\xc4\x90\xe6\x4b\x5b\
+\x9a\xbb\x26\x34\xdf\x2f\x82\xe6\x22\xd2\x15\xf4\x50\xd2\x9c\x0d\
+\xa1\x0f\xe7\x4b\xac\xb0\x1d\x04\x48\x0f\x25\x16\x5f\xb7\xc5\xf7\
+\xf1\x4d\x98\x2a\xb1\xa1\x39\xc2\x96\xe6\xae\x09\xcd\xf7\x8b\xa0\
+\xb9\x88\x74\x89\x1e\x3b\x7b\x81\x5a\x8f\xf4\xf1\xc1\x3a\xd2\x51\
+\x62\x7d\x02\xd2\x71\x48\x28\x4c\x95\x18\xd2\x7c\x69\x49\xf3\x96\
+\xe6\x1c\x94\xdc\x5d\x5a\x7d\x38\x5f\x62\x45\xa4\x57\xdf\x87\x2f\
+\xb1\x06\xb3\x88\xf4\xd3\x53\x7c\x1f\xc2\x54\xc9\x55\xa5\x79\x4b\
+\x73\x0e\x4a\xee\x2e\xad\x3e\x26\x3c\x69\x32\xe0\x12\x0b\x48\xf7\
+\x25\x2f\x0e\xd1\xc5\x0b\x1f\x2d\xcd\x43\x94\x48\x73\x7c\x1f\x42\
+\x50\xc2\x77\x69\xf5\x48\xe7\x12\x0b\x48\x8f\x25\x2f\xe6\x77\x33\
+\xa0\x79\xcf\x88\xe6\x88\x12\x69\x8e\xea\x4a\x0c\x4a\xf6\x2e\xad\
+\x1e\xe9\x6f\xe2\xa4\x09\x90\xce\x93\xbc\x40\x7a\xfa\x34\xef\x19\
+\xd1\x1c\x91\x27\xcd\x11\x5b\x34\x47\x80\x19\x52\x50\xa2\xcf\x5c\
+\xe9\x91\x7e\xed\x08\x6f\x9a\x00\xe9\x55\xc9\xfb\x63\x75\xdd\x16\
+\x48\x17\x68\x1e\xc2\x96\xe6\x3d\x23\x9a\x23\xb2\xa6\xf9\x70\x8b\
+\xe6\x08\x08\x43\x0e\xca\x93\xe6\x32\xd2\x0f\x8f\xba\xdd\x3d\x5f\
+\x62\x01\xe9\x71\x31\xc8\x05\x90\xde\x60\xaa\xc4\x88\xe6\x3d\x23\
+\x9a\x23\xb2\xa6\xf9\x70\x8b\xe6\xdb\xd5\x95\x1c\x94\x21\xcd\x65\
+\xa4\x8f\xc3\xa4\x49\x77\x8f\x27\x4d\xc2\xa4\x62\xb8\x6e\x0b\xa4\
+\xc3\x1f\xc2\x54\x89\x21\xcd\xe7\xff\x4f\xf3\x96\xe6\x43\x15\xcd\
+\x39\xa8\x18\x9a\x73\xb8\xe3\x71\x78\xd3\xa4\x1b\x27\x4d\xc2\x24\
+\xd6\xf7\xf5\x49\xac\xd5\x21\xba\x30\x55\x92\x2b\xcd\x5b\x9a\x0f\
+\x95\x34\xe7\xa0\x62\x68\xce\xe1\xea\x12\x0b\x48\x3f\x0f\x6f\x62\
+\xad\x5f\xb7\xc5\x21\xba\x70\xe1\xc3\x82\xe6\x2d\xcd\xf5\x1b\x0c\
+\xf4\x34\xe7\xa0\x62\x68\xce\xe1\x8e\x5f\x57\x06\x01\xd2\x43\x89\
+\x45\xbe\xc4\x02\xd2\xcf\xe7\x38\x24\xcc\x80\xe6\x88\x2b\x47\x73\
+\x84\x09\xcd\x39\x28\x43\x9a\xcb\x48\x1f\x47\xa4\xd7\x25\x16\xd1\
+\x23\x20\xdd\x97\xbc\xf8\x3e\x72\xa1\x79\xbf\x50\x9a\xcb\x1b\x0c\
+\x8c\x68\xce\x41\xc9\xdd\xa5\xd5\xc7\xe4\x18\x48\x8f\x25\x16\x01\
+\xe9\xd5\xf7\x51\x75\x58\x38\x44\x97\x69\x8e\xb0\xa4\x79\xbf\x50\
+\x9a\xcb\x1b\x0c\xcc\x68\xce\x41\xc9\xde\xa5\xd5\x23\x9d\x4b\x2c\
+\x20\x9d\x4b\x5e\x20\x5d\xa4\x79\x08\x4b\x9a\xf7\x33\xa5\xb9\x7e\
+\x83\x81\x21\xcd\x39\x28\xd1\xbb\xb4\x7a\xa4\x77\x31\x69\x12\x91\
+\x7e\x82\xeb\xe8\x71\xd2\x5d\xa4\x79\x08\x4b\x9a\xf7\xf3\xa3\xb9\
+\x7e\x83\x81\x3d\xcd\x39\x28\xc9\xbb\xb4\x7a\xa4\x73\x89\x05\xa4\
+\xfb\xc5\x20\x67\x61\x31\x08\x90\x8e\x6a\x57\x98\x2a\x51\xd0\xbc\
+\xa5\xb9\x62\x83\x81\x25\xcd\x39\x28\xc1\x67\xae\xf4\x48\xe7\x12\
+\x0b\x48\xdf\x9c\x54\x0c\xfe\x90\x69\x3e\x49\x84\xe6\x88\x04\x69\
+\x2e\x6f\x30\xc8\x90\xe6\x1c\x54\x0c\xcd\x39\x26\xbe\xc4\x7a\xb5\
+\x3e\x69\x42\xe4\xaf\x13\xfa\x92\x17\x48\x5f\x1d\xa2\x67\x42\x73\
+\x44\x82\x34\x97\x37\x18\x64\x49\x73\x0e\x2a\x86\xe6\x1c\x6e\x63\
+\xd2\x24\x94\x58\x97\xde\x8c\xc3\x21\x7a\x16\x34\x47\xd8\xd0\xfc\
+\x1f\x7b\x77\xbb\xdb\x44\x0f\x44\x01\x78\x44\x02\xc2\xe1\xb3\x7c\
+\xf3\x0a\x08\x04\x78\x05\x82\x8b\x4a\x21\x21\x21\x6d\x5a\x9a\x86\
+\x25\x97\x8f\xf1\xee\xf1\x10\xb9\x12\x8a\xad\xd1\x68\x47\xfe\x73\
+\xee\x60\x7f\x3c\x67\x3d\x33\x1a\xc7\x05\xf5\x69\xce\x41\x66\x68\
+\xce\xe1\x42\x89\x05\xa4\x6f\xfe\xbc\xc4\x22\xff\x81\x34\x40\xfa\
+\x32\x0e\x11\x16\x0e\x7c\x9c\x59\xbc\xfb\x7f\xae\x7f\x5c\x50\x9f\
+\xe6\x1c\x64\x86\xe6\x1c\x6e\xef\xa5\xc9\x06\x25\x56\x8b\xf4\x50\
+\xf2\x62\x08\xbd\x60\xe0\x03\x34\xaf\x77\xff\x2d\xd2\x9c\x83\xcc\
+\xd0\x9c\xc3\xc5\x97\x26\xfe\xfb\xf0\x1f\x48\xbc\xbe\x86\xef\x63\
+\x89\xef\xa3\x60\x17\xc3\xba\xde\xfd\x37\x4c\x73\x0e\x52\x5b\x73\
+\x25\x8f\xf4\x50\x62\xad\x36\xd7\x77\x97\x40\xba\x37\xfa\xc5\xce\
+\x77\x58\x98\xb4\xcd\xde\xc5\x70\x56\xef\xfe\x9b\xa6\x39\x07\x89\
+\xaf\xb9\xd2\x42\x7a\x57\x62\xad\x06\x1b\x20\x3d\x94\x58\xa1\xe4\
+\x05\xd2\x33\x76\x31\xd8\xa3\x39\xa2\xd2\xfc\xaa\x20\xe1\x35\x57\
+\x7a\x48\x47\x89\x05\xa4\xb7\xe3\x84\x61\x1c\xbd\x43\xfa\x74\x5a\
+\x69\x1e\xa3\xd2\xfc\xea\xa0\x62\x9a\xeb\xd3\x23\x45\xfa\xe7\xc9\
+\x64\xd0\x8e\x4b\x01\xe9\xb1\xc4\xba\x00\xd2\xe1\x8f\x8c\x81\x0f\
+\xeb\x34\xaf\x34\xe7\x20\xc1\x59\x5a\x3d\xa4\x8f\x27\xdd\x4e\x13\
+\x20\xfd\x47\x3b\x4e\xb8\x8d\x48\x87\xcf\x33\x06\x3e\xec\xd3\xbc\
+\xd2\x9c\x83\xa4\x66\x69\x55\x91\xee\x3f\x10\xbc\x34\x59\xc5\x97\
+\x58\xb3\xf5\x16\x48\xc7\x10\x48\xd6\xc0\x87\x3e\xcd\x2b\xcd\x11\
+\x52\x34\xe7\x20\x99\x59\x5a\x65\xa4\x8f\x27\x8c\x74\x94\x58\xb3\
+\x19\x90\x7e\x72\x82\x21\xc2\x8c\x5d\x0c\x6a\x34\x9f\x57\x9a\x67\
+\x5c\x30\x28\x0e\x92\x98\xa5\x55\x47\xfa\xf8\x1d\x90\xce\x25\x16\
+\x90\xee\x4b\xde\x38\x84\x9e\xb1\x8b\x41\x9b\xe6\x95\xe6\x08\x49\
+\x9a\x73\x90\xe0\x2c\xad\x3e\xd2\x9b\x66\xb2\xdd\x7f\x69\xb2\xff\
+\x92\xd7\x00\xcd\x8d\xd0\xbc\xfc\x82\x81\x50\x90\x19\x9a\xa7\x48\
+\x0f\x25\x56\x18\x97\x02\xd2\xc3\xb8\x2d\x4f\x82\xf4\x96\xe6\x53\
+\x63\x34\x2f\xbf\x60\x20\x16\x64\x84\xe6\x29\xd2\x43\x89\xd5\xac\
+\xb6\x8c\xf4\xee\x25\xaf\xef\xb0\x80\xf4\xdc\x5d\x0c\xba\x34\x1f\
+\x1a\xa0\xb9\xc0\x05\x03\x99\x20\x0b\x34\x4f\x91\x8e\x12\xcb\x7f\
+\x20\x40\x7a\x77\xf8\x20\x94\xbc\x40\x7a\xde\x9a\x44\x5d\x9a\x0f\
+\x0d\xd0\x5c\xe0\xb8\xa0\x54\x90\x01\x9a\xa7\x48\x8f\x25\x56\x44\
+\xba\x2f\xb1\xc2\x38\xe1\x0e\x48\x0f\x25\x6f\xce\xc0\x87\x2e\xcd\
+\x87\x3d\xa3\xb9\xfc\x71\x41\xe1\x20\x33\x34\xe7\x70\x5c\x62\x35\
+\x58\xcc\x8b\x71\x42\x46\x3a\xfc\x91\xb1\x8b\x41\x8d\xe6\xc3\x9e\
+\xd1\x5c\xfe\xb8\xa0\x78\x90\x19\x9a\x73\xb8\xae\xc4\x02\xd2\x51\
+\x62\x2d\x16\x8c\x74\xf8\xbc\x70\x17\x03\xd4\x51\x69\xae\x73\x5c\
+\x50\x3e\xc8\x0c\xcd\x39\xbe\x84\x12\x0b\x48\x6f\x4b\xac\xc6\x97\
+\x58\x8c\x74\x0c\x11\xf6\x9b\xe6\x23\x6d\x9a\xeb\x1f\x17\x94\x0f\
+\x32\x43\x73\x0e\xc7\x2f\x4d\x1a\x2e\xb1\x18\xe9\xf3\x39\x86\xd0\
+\xfb\x4c\xf3\x91\x3e\xcd\xf5\xef\xfe\xcb\x07\x99\xa1\x39\x87\x1b\
+\x03\xe9\x5c\x62\x31\xd2\x7d\xc9\x1b\x7f\xa2\x97\xec\x62\x50\xa2\
+\x39\x42\x8a\xe6\xfd\xba\xfb\x2f\x1f\x24\x48\x73\x7d\xa4\xa3\xc4\
+\x62\xa4\xb7\x25\x2f\x26\x6d\xf3\xd7\x24\xea\xd2\x7c\x24\x45\xf3\
+\xbe\xdd\xfd\x97\x0f\x92\xa4\xb9\x3e\xd2\x43\x89\xc5\x48\x47\xc9\
+\x8b\xef\x23\x77\x4d\xa2\x2e\xcd\x47\x85\x34\x37\x74\xf7\x5f\x3e\
+\xc8\x04\xcd\x53\xa4\xfb\x9d\x3f\xb8\x9e\xc3\x48\x0f\x25\x2f\xf9\
+\x0e\x0b\x48\xcf\x5b\x93\x68\x80\xe6\x56\xee\xfe\xcb\x07\x99\xa1\
+\x39\x87\x6b\x4f\x40\x87\x71\x10\x46\xfa\x3a\x96\xbc\x40\xfa\xf1\
+\x71\xce\x2e\x06\x03\x34\x2f\xbd\x60\x60\x9f\xe6\x1c\x64\x86\xe6\
+\x1c\xae\x7d\x69\xf2\xe8\xfd\x5f\x48\xc7\x38\xe1\xe5\x12\x48\x87\
+\x3f\xfa\x4d\x73\x97\xd2\xbc\xfc\x82\x41\xa5\x39\x07\x99\xa1\x39\
+\x87\xeb\x76\x9a\x30\xd2\xbf\x7f\xc5\x38\x21\x90\xde\xce\xd7\x96\
+\xef\x62\xd0\xa5\xb9\x4b\x69\x5e\x72\xc1\xa0\xd2\x3c\x0d\x32\x43\
+\x73\x0e\x17\x4a\x2c\x46\xfa\xd3\x58\x62\x01\xe9\xdd\xfc\x79\xf1\
+\x9a\x44\x5d\x9a\xbb\x43\x68\x7e\x54\x69\x9e\x15\x64\x81\xe6\x29\
+\xd2\x07\x8c\xf4\xae\xc4\x5a\xaf\x17\x40\xfa\x74\x8a\x21\xc2\xb2\
+\x35\x89\x4a\x34\x47\x1c\x42\xf3\xf3\x4a\xf3\x12\xa4\x8b\xd1\x43\
+\x1f\xe9\xb1\xc4\x5a\x03\xe9\x5d\xc9\x8b\xd1\xa8\xec\x35\x89\xba\
+\x34\x77\x87\xd0\xfc\xa8\xd2\xbc\x04\xe9\x62\xf4\xd0\x47\x3a\x97\
+\x58\x40\x7a\x28\x79\xe3\x4f\xf4\xfc\x35\x89\xa6\x69\x5e\x69\xce\
+\x41\x66\xe8\x91\x22\x9d\x4b\x2c\x20\x1d\x25\x2f\x26\x6d\x2b\xcd\
+\x2b\xcd\xff\x11\x64\x84\x1e\x29\xd2\xb9\xc4\x02\xd2\x4f\x63\xc9\
+\x0b\xa4\xdb\xa0\xf9\x1d\x8b\x34\xc7\xf7\xa1\x1d\x24\x31\x4b\xab\
+\x8f\xf4\xf4\xa5\x89\xff\x3e\x4e\xdb\x9d\x8a\x73\x20\x7d\xf6\x4d\
+\x68\x17\xc3\x6d\x1b\x77\xff\x7f\xb3\x77\x6f\xcb\x4d\xc3\x60\x10\
+\x80\x19\x82\x19\x4e\x25\x2e\x94\xe3\x70\x2c\x30\x03\xc3\x4b\x39\
+\x6d\x08\xc5\xb4\x6e\x13\x5a\xd2\xc7\x47\x92\xff\xb5\xec\x72\xc1\
+\x85\xf9\xf3\xab\xca\xde\xe8\x0d\x7c\xf1\xad\xd6\x5a\x53\x9a\xc7\
+\xe8\xca\x18\xe9\x0a\x34\xb7\x47\x7a\x9c\xb8\x05\xd2\x9d\xd1\x8f\
+\x07\x4d\x2c\xf8\x63\xf4\x82\x81\x2d\xcd\x77\x52\xa2\xb9\xc6\x82\
+\x81\x39\xd2\x15\x68\x6e\x8e\x74\x17\x62\x15\x65\xbf\x69\x22\x21\
+\x16\x9a\x58\xf8\x3e\x16\xe3\x17\x0c\x6c\x69\xbe\x93\x12\xcd\x55\
+\x16\x0c\xec\x91\xae\x40\x73\x73\xa4\xbb\x10\xab\x28\xbb\xa6\x89\
+\x84\x58\x2b\xb7\xde\xd9\x21\x5d\x2e\x09\xc7\x2e\x18\xd8\xd2\x7c\
+\x91\x12\xcd\x95\x16\x0c\xec\x91\xae\x40\x73\x7b\xa4\x4f\x8a\x88\
+\xf4\xf8\xe6\x0f\x90\xee\x32\x2c\x7c\x1f\xff\x67\xc1\x80\x34\x57\
+\x5b\x30\xb0\x47\xba\x02\xcd\xcd\x91\xee\x8c\x0e\xa4\xc7\x10\x0b\
+\x48\x97\x90\x17\xfd\x2b\x05\x9a\x93\xe6\x0a\x0b\x06\x66\x48\x57\
+\xa0\xb9\x39\xd2\xbb\x89\xdb\x2e\xc4\xaa\x81\x74\x09\x79\xa5\xe9\
+\x3e\x82\xe6\xa4\xb9\xc1\xb8\xa0\x39\xd2\x23\x01\x72\x40\x7a\x0c\
+\xb1\x80\x74\x09\x79\x0f\x0f\xa4\xe9\xae\xb0\x60\x90\x2b\xcd\xed\
+\xc7\x05\xed\x91\x1e\x09\x90\x03\xd2\x63\x88\x05\xa4\x2f\xbb\x90\
+\x17\x48\x57\x58\x30\xc8\x8a\xe6\xf6\xe3\x82\xf6\x48\xd7\xa0\xb9\
+\x3d\xd2\x11\x62\x4d\x62\xd3\xc4\x15\xb1\x24\xe4\x05\xd2\x15\x9e\
+\x49\xcc\x8c\xe6\xf6\xe3\x82\xf6\x48\x57\xa1\xb9\x3d\xd2\xaf\x36\
+\x4d\x42\x53\xb1\xdf\xc4\x82\x3f\x46\x2f\x18\x64\x40\xf3\xd4\xc7\
+\x05\xed\x91\x1e\x09\x90\x05\xd2\x27\x57\x9b\x26\x6d\x13\xeb\x12\
+\x4d\x2c\x7c\x1f\x8d\xc2\x82\x41\xd2\x34\xcf\x6f\xf7\x5f\x1f\xe9\
+\xa0\x79\x46\x87\xfb\x40\x06\x4d\x93\x18\x62\x01\xe9\x33\xb9\x44\
+\x27\xcd\x93\xdf\xfd\xb7\x47\x7a\x24\x40\x36\x48\x1f\x36\x4d\x10\
+\x62\x2d\x81\xf4\x10\xf2\xa2\xda\xae\xb0\x60\x60\x4a\xf3\xcc\x76\
+\xff\xed\x91\x1e\x09\x90\x0f\xd2\x3f\xf7\x91\x8e\x10\x0b\x48\x0f\
+\x4d\x77\x7c\x1f\x0a\x0b\x06\xa6\x34\xcf\x6e\xf7\xdf\x1e\xe9\x20\
+\x40\x4e\x48\x9f\x00\xe9\x85\x47\xfa\xda\x87\x58\x40\x7a\x55\xf5\
+\x9b\xee\xd7\x72\xf7\x7f\x97\xbb\xff\x9b\x44\x3a\x08\x90\x23\xd2\
+\x27\x2b\x79\xd3\x04\x48\x97\x26\xef\x0c\x4d\xf7\x6b\xb8\xfb\xbf\
+\xab\x3d\x2e\x48\x9a\x0f\x91\x0e\x02\x64\x87\xf4\xf5\x7a\xbf\x76\
+\x1f\x48\xaf\x69\x72\x24\x21\xef\x6c\x0e\xa4\x2b\x2e\x18\x54\xdc\
+\xfd\x57\xa0\xb9\x01\xd2\xcf\xf2\x44\xfa\xde\x9e\x5f\xcf\x59\xad\
+\xca\x0e\xe9\xbe\xa9\xd8\x6b\x62\x85\x90\x77\x2b\x77\xff\x49\x73\
+\x22\x1d\x0f\x8f\xae\x0a\x20\x1d\x0f\xbb\xe3\xcd\xd1\xe0\x8f\xed\
+\xdc\xfd\x27\xcd\x89\xf4\xb0\x9e\xd3\x43\x7a\xdb\xc4\x3a\x72\x21\
+\x2f\x90\xde\x96\x78\x0d\x68\x6e\x3e\x2e\x48\x9a\x13\xe9\x3e\xc4\
+\x72\x06\x01\xd2\x25\xc4\x72\xeb\x9d\x40\x3a\x2e\xd1\x0d\x68\x6e\
+\xbe\xfb\x4f\x9a\x13\xe9\x3e\xc4\xea\x90\x1e\xdf\xfc\x01\xd2\x17\
+\x27\x0b\xb9\x44\xd7\x58\x30\x48\x9f\xe6\xa4\x39\x91\x5e\x02\xe9\
+\x31\xc4\x02\xd2\x25\xe4\x45\xff\x6a\x7b\x69\x4e\x9a\x13\xe9\x31\
+\xc4\x02\xd2\x07\x4d\x77\x5d\x9a\x93\xe6\xef\x92\xa6\x39\x91\xde\
+\x7b\xd3\x04\x48\xaf\xe4\x77\x74\x69\xba\x2b\xd2\x9c\x34\x7f\x97\
+\x34\xcd\x89\x74\x59\xcf\x89\x4d\x93\x10\x62\xc9\x25\x88\x20\x5d\
+\x8d\xe6\xa4\xf9\xd3\xb4\x69\x4e\xa4\x5f\x5d\xcf\x39\xc6\xef\x84\
+\xb3\x19\x90\x7e\x71\x31\x82\xe6\xa4\xb9\xd6\x82\x81\xfe\x41\xa4\
+\x7f\xf0\xbf\x83\xec\xd7\xe7\xb1\x69\x22\x21\x56\x6c\x62\x85\x92\
+\xa2\xd6\x82\x41\x5e\x34\x57\x58\x30\x30\x3d\x88\xf4\xaf\xa5\x7f\
+\xd3\xc4\xb5\xdd\x81\xf4\x18\x62\x01\xe9\xf0\xb9\xc6\x82\x41\x06\
+\x34\x57\x5c\x30\xb0\x3f\x88\xf4\xa2\x1c\x3c\x3c\xda\x85\x58\x67\
+\x40\x7a\x23\x97\xe8\x1a\x0b\x06\x19\xd0\x5c\x75\x5c\xd0\xfe\x20\
+\xd2\x8b\xb2\xb7\x0e\x12\x43\x2c\x20\xbd\x69\x70\x89\xae\x30\x2e\
+\x98\x38\xcd\xed\xc7\x05\xed\x0f\x22\xdd\x85\x58\x40\x7a\xf7\x30\
+\xef\x12\x48\xf7\x97\x20\x8d\x5c\xa2\x2b\x8c\x0b\x26\x4e\x73\xfb\
+\x71\x41\xfb\x83\x48\x2f\x80\x74\x09\xb1\xce\x9d\x41\x80\xf4\x41\
+\xd3\x9d\x34\x37\x1b\x17\xb4\x3f\x88\xf4\x18\x62\x01\xe9\x61\x18\
+\x24\x2c\xad\x01\xe9\x9a\xe3\x82\x66\x34\xe7\xb8\xe0\xbf\x0f\x22\
+\x3d\x86\x58\x40\xfa\xb7\x1f\x6d\x88\xd5\x34\x40\xba\xe6\xb8\xa0\
+\x29\xcd\xed\x77\xff\x13\x3f\x88\xf4\xe1\x7a\x4e\x78\xb8\x3a\xac\
+\x77\xa2\xa9\x18\x4a\x8a\x7a\x0b\x06\x8a\x34\xe7\xee\xff\xf8\x83\
+\x48\x47\x88\x05\xa4\x2f\x8f\xf0\x66\x1c\x90\x0e\x7f\x68\x2c\x18\
+\x68\xd2\x9c\xbb\xff\xe3\x0f\x22\x7d\xd8\x34\x41\x88\x55\x55\x87\
+\x40\x7a\x5b\xe2\xd5\x19\x17\x1c\x49\x73\xee\xfe\x2b\x1f\x44\xfa\
+\x95\xa6\x49\x08\xb1\xfc\x3a\x61\x05\xa4\x9f\xca\xaa\x41\x82\x34\
+\xe7\xee\xbf\xfe\x41\xa4\xf7\x9b\x26\x87\xb5\x6f\x9a\x84\x75\x42\
+\x20\xfd\xf4\x54\x2e\xd1\x13\xa4\xb9\xfe\xb8\x20\x69\x4e\xa4\xc7\
+\xa6\x89\x0f\xb1\xda\x37\x4d\x80\x74\x1f\xf2\xe2\x12\xdd\x60\x5c\
+\x70\x9a\xce\xb8\x20\x69\x4e\xa4\x87\x10\x6b\xee\x42\x2c\x20\x5d\
+\x42\x5e\x69\xba\x6f\x7c\x5c\x70\x9a\xce\xb8\x20\x69\x4e\xa4\x4b\
+\x88\x15\x91\x7e\x30\x9f\x49\xc8\x0b\xa4\x6f\x74\xf7\x7f\x9a\xd2\
+\xee\x3f\x69\x4e\xa4\x5f\xfe\x0a\x6f\x9a\x00\xe9\xed\xef\x84\x7e\
+\x58\x0a\x48\xdf\xe8\xee\x7f\x93\xd0\xee\x3f\x69\x4e\xa4\xd7\xf5\
+\x79\x08\xb1\x80\x74\xd7\x54\xf4\xeb\xb6\x68\x62\x85\x90\x77\x83\
+\xe3\x82\xd3\x74\x76\xff\x49\x73\x22\xfd\xd9\xdb\xb5\xfb\x40\x5c\
+\x88\x05\xa4\x77\xbf\x13\xa2\x89\x05\x7f\x6c\x1d\xcd\x49\x73\x22\
+\xdd\x87\x58\xeb\xba\x46\xd3\x64\x7e\x72\xb9\xc4\xef\x84\x40\x7a\
+\x5b\xe2\xdd\x46\x9a\x93\xe6\x44\xba\x0f\xb1\xd6\xf5\x44\x90\x1e\
+\x43\xac\x03\x20\xfd\x42\x2e\xd1\x33\xdb\xfd\xd7\xa7\x79\x1e\xdf\
+\x07\x91\xee\x8c\xde\x43\x3a\xde\xfc\x01\xd2\x43\xc8\x8b\x6a\xbb\
+\xfa\xee\x7f\x46\x34\xcf\x24\xba\x22\xd2\xc3\xc4\x2d\x90\x8e\x10\
+\x0b\x48\x97\x90\x17\xfd\x2b\x83\xdd\x7f\x4b\x9a\xdb\x2f\x18\xd8\
+\x1f\x44\x7a\xb9\xd7\x43\xba\x84\x58\x82\xf4\x45\xd8\x7c\xc6\x25\
+\xfa\xb5\xdd\xfd\xff\xc3\xde\xdd\x34\x35\xed\x45\x61\x00\x67\xa4\
+\x38\x5a\x5f\xa8\xfe\xab\x28\xa3\xc2\x1f\xc7\x85\x1f\x81\x19\x96\
+\x82\xc0\x80\x0b\x97\x82\x82\x4d\x0b\x6d\x8a\x7d\xb7\xe4\xe3\x7b\
+\xcf\xbd\xe7\xe4\x26\x38\xe3\x5d\x64\xda\xbc\xdc\x27\x8b\xf3\x0d\
+\xb2\xf8\x3d\xe7\x24\x4f\x06\x9a\xfb\xd4\x60\xe0\x1e\x40\xba\x0e\
+\xb1\x04\xe9\x71\x71\x0e\x5f\xba\xe7\xd0\xfb\x9f\x13\xcd\x3d\x6b\
+\x30\x70\x0f\x20\x5d\xda\x73\xec\xa5\x09\x85\xbc\xe6\x52\x51\x90\
+\x0e\x9a\x57\xb3\xc1\xc0\x3d\x80\xf4\xf9\x2a\x7f\x0e\xd2\x16\xa4\
+\x5f\xea\x7f\xc6\xc9\x3f\x47\x75\xc8\xeb\x07\xcd\xbd\x6b\x30\x70\
+\x0f\x20\x5d\x3e\x07\x11\xa4\xeb\x10\x4b\xb7\xdb\x0a\xd2\xc9\x1f\
+\xd5\xa3\x39\xca\x05\xdd\x03\x48\x6f\xf2\xe7\x20\x16\xe9\xfa\x9f\
+\x58\x14\xf2\x0a\xd2\xcd\x92\xb0\x7a\x34\x47\xb9\xa0\x7b\x00\xe9\
+\x4d\xfe\x1c\x44\x90\x2e\x21\x56\xdc\x6e\xfb\x80\x97\x84\xe5\xa3\
+\x39\xca\x05\xb3\x0f\x20\xbd\xf9\x61\xc3\x56\xdc\x4a\x88\xd5\xbb\
+\x14\xa4\xab\x90\x97\x97\xe8\xe5\xa3\x39\xca\x05\xb3\x0f\x20\xfd\
+\x63\x02\xe9\xf6\xd2\x44\x90\x4e\x21\x2f\x2f\x09\x0b\x47\x73\x94\
+\x0b\x2e\x61\x00\xe9\x4d\x41\xba\xbd\x34\x11\xa4\x0f\x24\xe4\x65\
+\xa4\x17\x8a\xe6\xe8\xfd\x5f\xea\x00\xd2\xed\x3f\x4d\x0c\xd2\xe9\
+\x52\xf1\x86\x42\x5e\xb9\xe4\x2d\x14\xcd\xd1\xfb\xbf\xd4\x01\xa4\
+\xdb\x10\x2b\x46\xba\x84\xbc\x82\xf4\x7c\x68\x8e\xde\xff\xfc\x07\
+\x90\x2e\x21\x56\xc0\x48\x37\x21\x96\x2e\x3e\xb0\x48\xcf\x83\xe6\
+\xe8\xfd\xcf\x7f\x00\xe9\x36\xc4\x12\xa4\xeb\x10\x8b\x8b\x0f\x04\
+\xe9\x9d\x85\xd0\x1c\xbd\xff\x05\x1f\x40\xba\x0d\xb1\x04\xe9\x3a\
+\xc4\xa2\x90\x37\x89\xf4\xce\xe3\x05\xd0\xbc\xf0\xbd\xff\xa0\x39\
+\x90\x7e\xf7\xc7\xa3\x12\x62\xa5\x91\xde\x21\xa4\xfb\xd7\xfb\x0f\
+\x9a\x03\xe9\xe9\x4b\x13\x1b\x62\xa5\x90\xde\x21\xa4\x7b\xd9\xfb\
+\x0f\x9a\x03\xe9\xf6\xd2\x24\x0e\xb1\x82\x18\xe9\x5d\x42\x7a\x87\
+\x90\xee\x53\xef\x3f\x68\x2e\x03\x48\xb7\x97\x26\x36\xc4\xb2\x48\
+\x1f\x13\xd2\xfb\x8c\xf4\xcc\x34\x97\x01\x9a\x97\x6e\x00\xe9\x36\
+\xc4\x4a\x20\x7d\x4c\x48\xef\x33\xd2\xb3\xd2\x5c\x06\x68\x5e\xba\
+\x01\xa4\x47\x91\x0e\xb1\x26\xa9\x4b\x93\xc1\x98\x90\xde\x67\xa4\
+\x7b\x4b\x73\xd0\x1c\x48\x8f\x2b\x6e\x53\x48\xbf\x21\xa4\x77\x05\
+\xe9\x7e\xd2\x1c\x34\x07\xd2\xe7\x61\x38\x69\x44\x14\x62\xfd\x03\
+\xe9\xb5\x9a\xdf\x34\xdf\xf6\x95\xe6\x40\xba\x32\x7a\xb8\x16\x45\
+\xc9\x4b\x93\x80\x90\x7e\x9d\x40\x3a\xf9\xc3\x67\x9a\x6f\x7b\x4b\
+\x73\x20\x9d\xdb\x73\x92\x48\xef\xdd\x41\xba\x59\x12\xfa\x4b\xf3\
+\x6d\x8f\x69\x0e\xa4\x53\x7b\x4e\x38\x49\x22\x7d\x44\x48\xff\x15\
+\x23\x5d\x96\x84\xd5\xa3\x39\x1a\x0c\xdc\x03\x48\xa7\x10\xeb\x6f\
+\xa4\xb7\x63\xa4\xf7\x1f\xf1\x92\xb0\x7a\x34\x47\x83\x81\x7b\x00\
+\xe9\x1b\x5b\x69\xa4\xaf\x10\xd2\xdb\x82\x74\x0a\x79\x79\x89\x5e\
+\x7a\x9a\xa3\xc1\x20\xfb\x00\xd2\xa7\x49\xa4\x9b\x90\x97\x97\x84\
+\x25\xa6\x39\xca\x05\xb3\x0f\x20\x7d\x4e\x48\x8f\x12\x48\xb7\x21\
+\x2f\x23\xbd\x40\x34\x47\xb9\xe0\x92\x07\x90\x7e\x7b\x07\xe9\x57\
+\x12\xf2\x0a\xd2\x0b\x44\x73\x94\x0b\x2e\x7b\x00\xe9\x1b\xe9\x7f\
+\x36\xa8\x10\x8b\x43\x5e\x46\x7a\xbd\x5e\x18\x9a\xa3\x5c\x70\xc9\
+\x03\x48\x9f\x4d\x9a\xd3\x24\xd2\x2f\xe9\xc7\xbc\xfa\x73\x29\xfb\
+\x7e\xe4\x40\x73\x94\x0b\xe6\x3f\x80\xf4\x2d\xfa\x1c\xa4\x11\x4d\
+\x2d\xd2\xd5\xfb\xd1\x52\x2f\x08\x87\xbc\x74\xc9\x4b\x4b\xc2\x9c\
+\x68\x8e\xde\xff\xfc\x07\x90\x4e\xed\x20\x82\x74\x0e\xb1\x74\xc8\
+\x6b\x42\x2c\xb3\x24\x5c\x00\xcd\xd1\xfb\x5f\xfc\x01\xa4\x4b\x3b\
+\x88\x46\x3a\xff\xd3\x44\xbd\x20\xd7\x84\xf4\xae\x6a\x80\x96\x25\
+\xe1\x02\x68\x5e\x86\xde\x7f\x0c\x20\x7d\x35\x9c\x31\xd2\x23\x0a\
+\xb1\x54\xc8\x4b\x21\x96\x41\xba\x5a\x82\xf0\x92\x30\x03\xcd\x4b\
+\xdc\xfb\x8f\x01\xa4\xef\x08\xd2\x4d\x88\x35\x52\x46\x17\xa4\xeb\
+\x90\x97\x97\xe8\x19\x68\x5e\xde\xde\x7f\x0c\x20\x7d\xe7\x36\xd4\
+\x48\x1f\xf5\x66\x89\x10\x4b\x23\x3d\x75\xc9\x9b\x81\xe6\x65\xeb\
+\xfd\xb7\x34\xc7\x00\xd2\xe9\xd2\xa4\x31\x51\x21\x56\x68\x2f\x4d\
+\xe8\x12\x6b\x2c\x21\x6f\x4d\x90\xee\xa0\x79\xf9\x7a\xff\xdd\x34\
+\xc7\x00\xd2\x93\x21\xd6\xf5\x94\x90\x4e\x21\x16\x87\xbc\xca\xe8\
+\x82\x74\x07\xcd\x33\x34\x18\x14\x98\xe6\x18\x40\xfa\xed\x7c\xcd\
+\x84\x58\x41\xd0\x26\xa4\x9b\x4b\x2c\x09\x79\x05\xe9\x8a\x1f\x6e\
+\x9a\xcb\xa8\x0e\xcd\x31\x80\x74\x6e\x97\x5a\xe9\x05\x81\xb9\xc4\
+\xea\x27\x43\x5e\x83\x74\xf2\xb9\x93\xe6\x32\xaa\x44\x73\x0c\x20\
+\x5d\x42\x5e\x7b\x89\x65\x43\x5e\x7d\xa9\xc8\x4b\x10\x07\xcd\x65\
+\x54\x8b\xe6\x18\x40\x7a\x68\x42\x5e\x0e\xb1\x46\x7c\xa9\x78\x35\
+\x18\x0f\xcd\xa5\xa2\x2c\x41\xbc\xa4\x39\x06\x90\x4e\xef\x47\xc4\
+\x21\x16\x87\xbc\x2d\xfe\xdc\x56\xbf\x1f\xb2\x04\xf1\x92\xe6\x18\
+\x40\xba\x5e\x82\xd0\x8f\x79\x83\x38\xe4\xa5\x10\x4b\x23\x9d\x42\
+\xde\x56\x6a\x09\x52\x29\x9a\xbb\xdf\x0f\x0c\x20\x7d\xd6\x88\x2f\
+\x15\xa7\x37\x5d\x1d\xf2\x9a\x10\x6b\x28\x9f\xa3\xd7\xeb\x82\xf4\
+\x8a\xd1\xdc\x1d\x5d\x61\x00\xe9\xea\xfd\x50\x21\xaf\x7c\x6e\xdb\
+\xa5\x90\xb7\xa5\x42\x2c\x7b\xc9\x5b\xab\xf3\x11\x56\xe9\x68\x9e\
+\xbd\xc1\x00\x03\x48\xb7\x97\xbc\xe6\x52\xd1\x84\x58\xc3\xa1\x29\
+\x06\xa9\xa9\xc7\x5c\xf2\x96\x82\xe6\xf9\x36\x18\x00\xe9\xba\x2a\
+\xa6\x62\x43\xbf\x1f\xea\x05\x99\x24\x2e\x79\x07\xea\x77\x71\xe4\
+\x0f\x4d\x8f\xe1\xfa\x3a\x45\x52\x82\xea\xba\xe2\xc2\xe6\x93\x4d\
+\x5e\x46\x68\x1d\x73\x74\xaa\xa8\x7b\xb0\xf9\x49\x3d\x6f\xf6\xf7\
+\xf7\xf6\x9e\x7e\x3e\x3c\x3a\xfa\xff\xf4\xf4\xf8\xf8\xe0\xe4\xe4\
+\xcb\xee\xde\xc5\xc5\xd7\xaf\x87\x3f\xbe\x7f\x3f\x3f\x3e\x3f\x3b\
+\xfb\xb6\xfb\x87\x9d\xb8\x37\x02\x10\x06\xc1\x00\xea\x38\xde\xc5\
+\x1d\x1c\x01\x12\x02\x4a\xfc\xd9\x7f\x0c\xbf\x02\xbd\x14\x96\x96\
+\xbe\xe2\x35\x77\x2a\x04\x7d\xaa\x7a\x6a\x54\x8f\x0a\x91\x99\xed\
+\x16\xe5\x35\xc3\x5b\x5b\x97\x88\x34\xb9\xf3\x05\x22\x66\x26\x7e\
+\x9a\xe1\xab\xfe\x86\x34\x4e\x17\xfb\xf5\xb3\xe2\x36\x0c\xc4\x71\
+\x3c\x73\xda\x87\xf0\xb1\x25\x2a\x6a\x6d\xc9\xfa\x63\x89\x94\x2d\
+\xbb\xed\xb1\xef\xff\x3e\xfd\x79\x2c\x77\x26\x58\x21\x50\x48\x2f\
+\xd9\x39\x7c\x21\x90\xf8\x12\x7f\x18\xe9\x6c\xbd\x1f\x5c\x34\x98\
+\x68\xac\xb5\xd9\x3e\x38\x44\x54\x69\x4f\x09\x21\xc4\x12\x31\x09\
+\xc9\x29\x63\x2e\x6b\x96\x5c\x6b\x5d\x2a\x32\x73\x0a\xe6\x56\xf8\
+\x2b\x79\xe1\xdf\xe2\x29\x21\x05\x22\x5b\xac\x31\x2e\x3b\xe7\x86\
+\x3c\x78\xef\xe3\x84\x09\xd3\x34\x8e\x34\x62\xe8\x8c\x59\x33\x06\
+\x7c\x6a\x99\x30\x92\xb8\x05\xbf\xcd\xbe\x05\x8f\xc2\x70\xea\xdf\
+\x14\x89\xc3\x48\x52\x8b\x31\x17\x63\x38\xd6\x5e\xac\x6d\x59\x24\
+\x84\x99\x39\x01\x23\x79\xdb\x13\x7f\x46\xcc\x96\x8c\xe1\xbc\xaa\
+\xd4\x5a\xdf\xeb\x96\x52\xde\x4b\x69\x79\xd9\x93\x7e\xa4\x94\x0e\
+\xb9\x60\x7e\x1f\xb3\xfc\x5a\x30\x6b\xe6\xef\x33\xe6\x89\xb3\x02\
+\x71\xa3\xf8\x30\x0f\xf6\x41\x94\x1b\x8d\x10\x40\x83\xc3\x34\x5a\
+\x98\x86\x04\x3e\x4a\x59\x3a\x2a\xde\x5a\xd2\x8e\x64\x25\xc4\xac\
+\xf8\x29\x40\x47\x89\xac\x35\xd5\x30\x12\xbc\xbb\x11\x46\xf8\x95\
+\x87\x05\x54\x54\x48\xa2\xa8\xf0\x18\x49\x6e\x11\x15\x2a\x1a\x84\
+\xc4\x60\x5a\x6c\x57\x05\xb1\x0a\x8e\x02\x21\x89\x18\xc9\xee\x83\
+\x69\x6c\xa9\xaf\x15\x23\x61\x1f\xac\xa2\x05\x02\x5e\x52\x4b\xd7\
+\x87\x52\xc1\x20\x0e\x61\x01\xcf\x9d\xd3\xa7\x2f\xc3\x79\xf2\x9e\
+\x9c\x33\xe6\x7f\x20\xb9\x5a\x1d\xd7\x48\x00\x22\x29\x1a\x7a\x7f\
+\x08\x8d\xae\x94\xb9\xf6\x7d\xf0\x12\x31\xd9\x01\x48\xf6\xb2\x44\
+\x38\xfd\x85\xc1\x39\x2e\x8c\xdb\x5b\x43\x16\x06\x83\x38\xc6\x76\
+\x7d\x90\xf8\x08\xf7\x7c\x00\xc3\x71\x6b\x08\x0d\xa5\x42\x27\xdd\
+\xf3\xa1\xb6\x86\xa8\xd0\x61\x01\x4f\x1e\x00\x99\x3e\x9f\xc7\xc9\
+\xae\xff\x74\x70\xec\xe3\x51\x51\x52\x88\x28\x68\x1f\xbc\x3f\x38\
+\xd7\xfb\xa3\xf9\x28\xe5\xfe\xf9\xaa\x2e\x9b\x8f\x0c\x1f\x11\x40\
+\x12\x91\xa5\xdd\x87\x3e\x64\xed\xb9\xe9\x43\x16\x46\x9f\x46\xed\
+\x1e\xa8\x4c\xdf\x87\xa6\x21\x21\xf1\xd1\x3f\x50\x29\x1f\xb9\xe7\
+\x43\xaf\x8e\xd2\xf3\xa1\x68\xf4\x23\x07\x2a\xa5\x42\x87\x05\x7c\
+\xe4\x74\x5e\x2f\x21\x66\xf2\xc3\x10\x36\x24\x98\xf8\x80\x34\x24\
+\xc8\x76\xd2\xaa\xb7\x4e\x5a\x97\x18\x77\x1f\xea\x26\x72\xcc\x7c\
+\x9d\x45\xef\x0f\xa2\x64\x31\x85\xcf\x57\xc3\x20\x3e\xfa\x47\x2b\
+\xed\xa3\x7f\xf5\x10\x1a\xf7\xaf\x1e\x57\x3e\xf6\x30\x92\x96\x46\
+\xa3\x65\xde\x12\x44\x4a\xef\x68\x85\x88\x94\x2a\x3e\xfe\xed\xea\
+\x01\x1e\x7a\x7f\xec\x51\x3e\x9a\x80\x8f\x9c\xfe\xb0\x63\x77\xbb\
+\x6d\x02\x41\x18\x86\x8d\xaa\x28\x17\xc1\x01\x52\x59\xb3\x04\x30\
+\xd0\xb5\xa9\x51\xaa\x46\xfd\x39\xcc\xfd\xdf\x4f\x3f\x66\x3f\xd8\
+\x89\x77\xdd\xf6\xc0\x87\x8c\x94\x57\x89\x92\xc3\x3c\x9a\x1d\x1f\
+\xcb\xd6\xe4\xd8\x21\x63\x33\x62\xb2\x1c\xe3\x1e\x1d\x2d\xcf\x42\
+\x4a\xea\x5c\x07\x92\x8b\x5b\xf3\x4a\x29\xf1\x4d\x92\x0e\x69\x2c\
+\x71\xc1\xc7\x6c\x01\x73\xca\x79\x7f\xe8\xa7\x95\x3a\xd2\x91\xa4\
+\x94\x68\xa7\x30\xf3\x9a\xb4\x94\x3c\x5c\x22\x36\x29\xc5\xaa\x4d\
+\x92\x92\xa2\x37\x49\x5a\x8a\x3e\xcd\x93\x52\x82\x8f\xbf\x1c\x21\
+\xef\x3c\x42\xd2\x9b\xe4\x1b\xb3\xe7\x50\x1c\xcb\xde\x74\xd5\xc9\
+\xf6\x18\x41\xf2\xf8\x00\x09\xe5\x0d\x9b\x14\x3e\xbc\x28\x05\xc9\
+\xae\x80\x22\x51\x52\xd4\xf5\x9e\xce\x34\x11\x93\x43\x04\x18\xb8\
+\x35\x97\xe5\xf4\x98\xe5\xf4\xc8\xf3\x70\x7a\x08\x03\xaa\xc8\x3a\
+\xcc\x92\x2a\x25\xe5\xac\xf2\x81\xcb\xc4\x08\x92\x38\x6a\xa7\xfc\
+\x4b\x8a\x7a\x73\x09\x8d\x28\x5a\x0a\x7d\xdc\x93\x12\x7c\xe8\x78\
+\x24\xcc\x5b\x48\x40\xa2\x12\x36\x89\x96\xb2\xe7\xf0\xb9\xe8\xca\
+\xb6\x36\x79\x57\x55\xd5\x70\xc2\xd8\xc7\x86\xf2\xfa\x9e\x5c\xb2\
+\x71\xf4\x8b\x85\x52\xf8\xf0\x62\xe6\xed\x8e\x17\x2e\x17\x86\x66\
+\xee\x27\x73\xfe\xef\x70\x95\x37\x16\xab\xc3\xfa\xd5\x21\x9f\x41\
+\x71\x6b\x6c\x2a\x1a\x1f\x63\x4c\x63\x8c\xfc\xc8\x04\x33\x4e\xb8\
+\x6c\x66\x22\x38\x1e\x09\x33\x6f\x09\x52\x04\x49\xc8\x85\xa1\x19\
+\xe4\x8e\x94\x90\x48\x0a\xf3\x6b\x4d\x52\xca\x0d\x92\xe7\x28\x4a\
+\x0a\x69\xa4\xa5\x30\x7b\x0e\x4f\x75\x71\x7c\x69\xfb\xba\x36\x40\
+\x82\xf1\xa9\x30\xc3\xe3\x62\x2b\xcf\x65\x91\x82\xc9\xbc\x94\x0f\
+\xaf\x2f\x9c\xd2\x2b\x12\xa6\x59\xfe\xdb\xe3\x50\x8f\x26\x74\x25\
+\x8d\x86\x34\xf8\xa9\x6e\xbf\xac\x0e\x79\x4b\x75\xa4\x61\x30\x6b\
+\xea\xda\xd6\x18\x46\xfd\x42\x90\x30\x94\x12\xe7\x2c\x39\x61\x26\
+\x46\x49\x19\x95\x14\x95\x20\x65\x48\x4a\xb1\x5f\xb7\x24\xa5\xb8\
+\x3b\x52\xbe\xc3\x88\x64\xfa\x0f\x29\x6f\x8c\xde\x29\xc1\xc7\xef\
+\x9b\xec\x39\x94\x4f\x9f\x8a\xa2\x7b\x29\x4b\x20\xc1\x48\x46\x83\
+\x79\x5c\x44\x5e\xe0\xa2\x16\x4b\xd6\x8b\x14\xc4\x2d\x5c\xce\xf8\
+\x52\xb7\xfd\xe4\x23\x5c\xe2\x5c\x19\x8a\xe2\xc1\x31\x0c\xfa\x55\
+\x05\x96\x55\x53\x81\x06\x41\xb4\x6d\x3d\xb4\x18\xa4\x2c\x73\x7e\
+\x87\x50\x0a\xd3\xac\x31\x19\xc8\xdc\xc6\x75\x18\x89\x20\x61\x82\
+\x94\xb4\x99\x5e\x49\xd1\x3b\x45\x9b\x79\x1d\x98\xa4\x94\x1f\x19\
+\x26\x4e\x90\x72\x56\x52\x7e\xc2\x48\x32\xcf\x3e\x82\x84\xb9\xbe\
+\xc3\x88\x24\x16\xb0\xe7\x0f\x3b\x76\xcf\x9b\xb8\x12\x46\x71\xdc\
+\x08\x59\xdb\xba\xb0\xe4\xc2\x85\x25\xcc\xf8\x05\x63\xe3\x0d\x79\
+\x41\x91\x12\x6d\xd2\xde\x4f\x72\x53\x45\x80\x42\x3e\xfe\x3d\x73\
+\x66\x3c\x8f\x0d\xb3\xab\xd5\x4d\x4a\x4e\xf1\x17\x44\x49\xba\x9f\
+\x1e\x43\x90\x44\xe1\xbc\x5a\x64\x4a\x15\x35\x56\xe4\x58\xfb\x5d\
+\x69\x9a\xb6\xc1\xba\xa6\xb1\xe8\xd2\x29\x17\x4a\x59\xb9\xdc\x74\
+\x9d\x96\xd2\x4f\x92\x12\xce\x79\x9c\x9e\x34\x45\xa8\x02\x2c\xb6\
+\xd3\xef\xaa\x48\xa3\x24\x0d\x28\xc8\xd3\x1c\x43\xea\x3a\xad\xeb\
+\x5a\xe9\xd4\xcc\x26\xc7\x18\x72\x91\x94\x2e\xab\x21\xd5\x0c\x70\
+\x98\xe5\x0d\xb9\x88\x19\x93\xdf\x98\xd9\xb9\x3c\x74\x18\x73\xdb\
+\x63\xcc\x84\x0b\x91\xd8\xdc\x0f\x29\x7f\x92\x0b\x43\x2e\x26\x22\
+\x85\x48\x86\x3c\xb9\xbc\xb8\xfc\xd8\x62\x0c\x91\x0c\x11\x29\x44\
+\x72\x96\x6b\x82\x53\x12\xd7\x30\x02\x24\xd8\x32\xc3\xd6\xdf\x14\
+\x35\xa0\xab\xc1\xa5\x6b\x30\xa6\xaf\x2a\x2b\x65\x03\x28\x46\xca\
+\xca\xc4\x4a\xc1\x61\xc1\x98\x9b\x51\x26\x70\xb6\xd3\xb8\xdf\x6b\
+\x67\xf6\x63\xb8\xbd\x1a\xfa\x38\xe0\x4c\x18\x1a\xb9\x06\xa1\x54\
+\xaf\x54\x5d\x23\x4a\x4d\x23\x66\x10\x9a\x19\x52\xda\x88\x14\x22\
+\xb1\x11\x29\x67\x66\xb6\x36\x45\x71\x07\x32\x8c\x48\xe9\x3c\x52\
+\x26\x01\x97\xc7\xd4\x84\x48\x6c\x44\x0a\x91\x30\x44\xf2\xca\x88\
+\x8f\xbf\x90\xb2\x05\x92\xe7\x3b\x06\x48\xfe\xd9\x5d\xe4\x9a\xe0\
+\xed\x23\x4b\x92\x38\xce\x43\xac\x99\x63\xd5\xf7\x84\xde\x16\x90\
+\xb2\x54\xd8\x1a\x21\x17\x5e\x17\x72\xa9\x20\xa5\x62\x96\x9b\x25\
+\x56\xae\x31\x66\xc5\xc8\x17\x4c\x4c\x8b\x5d\x44\x54\x60\x3a\x50\
+\x46\x1a\x98\x7e\xa0\x32\x34\xa8\x22\x25\x83\x0c\xeb\x16\x0c\x86\
+\xe0\x55\x96\x31\x7e\x29\xcc\x86\x21\x12\x97\xd5\x90\x66\xd6\x60\
+\xcc\x0d\xb9\x9c\x9b\xf1\x4a\x69\xbd\x52\x98\x5b\x67\xe6\x91\xd1\
+\x52\xee\x53\x1b\xef\x4d\x11\x29\x44\x22\x79\xb2\x99\xf8\x70\x79\
+\xde\x62\x0c\x91\xf8\x72\x4d\x70\x9c\xbf\x7d\x9c\x4e\x4a\x23\xa9\
+\x63\x2c\x8f\xb0\xaf\x26\x74\xde\x80\x64\x74\x99\x80\x44\x61\x2d\
+\xa0\xe4\x5d\x8e\xf5\xfa\x39\x2c\xad\x30\x22\x39\x4b\x29\x11\x3d\
+\x72\x71\x9c\x1e\x60\x42\x08\xcc\xd0\xc0\xf4\xc7\x8c\x06\x57\x83\
+\xb7\x22\x53\xbd\x1a\x54\xb4\x96\xc6\x7c\xde\xce\xf9\x96\x21\x92\
+\x21\xbd\x4b\xea\xb2\x51\x18\x43\x2e\xa5\x8d\x48\x69\x44\x4a\x75\
+\x26\x65\x6b\x22\x52\x0a\xaf\x94\xf6\xc1\xe5\xd6\x2b\xa5\x17\x29\
+\xb8\x24\x40\xc2\x94\xbf\x60\x84\x59\xbd\xc2\xc8\x65\x44\xca\xf8\
+\x92\xd8\x23\x22\x48\x7c\xb9\x26\x88\xf6\xc7\xe3\xdb\xe2\x03\xcb\
+\x4e\x98\x3a\x25\x49\xa2\x92\x2f\xa6\x4e\x0c\x35\x20\x09\xb1\x0a\
+\x50\x8c\x94\x31\x12\xac\xd3\x21\x92\xbe\xc1\x98\x94\xa1\x19\x1b\
+\xbf\x19\x03\x02\xc1\x5b\x06\xdb\x54\x7c\xaa\xd2\xff\x20\x1f\x4e\
+\x87\x3e\x0e\xb8\x10\x9a\xc1\x1c\x73\x09\x0b\xbe\x72\xe9\x6c\xa8\
+\xc7\xa6\x1f\xe2\x97\xa2\x44\x4a\xee\x95\xd2\x88\x14\x22\x61\x88\
+\xe4\x8e\x29\xb0\xdd\x10\xf1\x41\x1a\x97\xf1\xde\x14\x91\x42\x24\
+\x36\xaf\x2e\x44\xf2\xc4\xcc\xb0\x17\x9b\xd1\x25\xf9\x93\x80\x6b\
+\x82\xc3\xe1\x73\x1f\xee\xa1\x64\xfe\x86\x51\xca\xd7\x02\x65\x9a\
+\x1a\xa4\x00\x49\x6d\x6e\xca\xf0\xf8\xb6\x64\x00\x25\x2b\x32\x8c\
+\x52\x3a\x35\x48\xe1\x4d\x61\xfa\x51\x68\xc6\xc4\x63\x06\x6f\x4b\
+\x04\x2a\xc0\xc2\xd0\x68\xf4\x9f\xd5\xe6\x74\x68\x1a\x58\xab\x0f\
+\x06\x40\x84\x08\xc0\x16\xe1\x24\xad\x47\x0a\xd3\x33\xda\x4c\x0a\
+\x24\x4c\xb6\x21\x12\x27\xa5\x64\x6a\x6c\x65\xe2\x7f\xfa\xaa\x7c\
+\x52\x88\xc4\x66\x24\x45\x2e\xc9\xd8\x07\x69\x98\xa4\xe2\x83\x34\
+\x98\xd2\xef\x83\x34\x98\x97\x51\x80\xe4\xc7\x8c\x81\x94\x67\x20\
+\xf9\x5d\xae\x09\xde\x83\x43\x7c\xf8\xfc\xdc\x47\x7b\x28\x09\x8f\
+\xd8\x97\x02\x64\x46\x4a\x86\x9c\x14\xa0\x24\xe6\xc9\x2d\x8e\xa3\
+\xc8\x9c\x93\x30\xb4\x52\x0a\x40\x31\x52\x5a\x04\x52\x30\x9d\xba\
+\xaf\x31\x46\xa4\x78\xcc\x30\xd5\xc6\xbe\xca\x73\xa6\xcf\xcd\xdf\
+\x6a\x79\x59\xb6\x68\xf5\xe9\xd0\xb7\x22\x5c\x1b\x10\x00\xbb\xd6\
+\xa7\x0d\xe1\xab\x68\xcc\xc5\x2b\x65\x74\x49\x26\xcf\x5c\x2e\xa5\
+\x57\x0a\xa8\xcc\xf2\x9c\xc1\x25\x01\x12\xa6\xda\xc2\x08\xb3\xbc\
+\x23\x12\x27\x65\xc7\x68\x29\x0f\x05\x03\x24\xb7\xad\x4d\xf7\xd8\
+\x61\xcc\x7d\x8f\x31\x3f\x53\x8c\x21\x92\x5f\x2e\xaf\x36\x23\x29\
+\x40\xe2\xbb\x24\x3c\x22\x7f\xc8\x35\xc1\xbf\xef\xa7\xf7\xf7\x20\
+\x88\x0f\x50\x12\x7f\x62\xd1\x1e\xfb\x7f\xb1\xa7\xe8\x08\x25\x16\
+\xc9\x69\xf8\x78\x23\x48\xf4\x39\x59\x8e\x90\x60\x08\x91\x5c\x84\
+\x66\x4c\xa6\x66\xd2\xb3\x00\x05\xe3\xbe\x9c\x72\x1f\xc3\x61\x43\
+\x0b\x80\x05\xd8\x28\xa2\x28\x8e\xd7\xb1\xa6\x11\x63\x08\x7f\x66\
+\xd3\x86\x18\xd3\x49\xe4\x92\xc0\x88\xef\x92\x28\xf1\x41\x1a\x36\
+\xa4\xc1\x34\xe2\x83\x34\x18\xd2\xb0\xd9\x89\x0f\x79\xe6\x6a\x5b\
+\xef\x25\xe1\x11\x61\xec\x11\x71\x3e\x6c\x44\x4a\x29\x3e\x48\xc3\
+\x86\x34\x98\xbf\x10\x70\xcd\x7f\xec\x9d\x5b\x6f\x22\x49\x12\x85\
+\x63\x85\xd0\xbe\xd6\x43\x49\x3c\xec\x83\x25\x63\x66\xed\xb5\xf7\
+\x7e\xd5\x4a\x23\xed\xee\x2f\x71\x1b\xc6\x18\x37\xf8\x52\xc5\x50\
+\xfc\xfc\x8d\x3c\x11\xae\xc8\x66\xc2\x95\x80\xc7\xd3\x34\xce\x94\
+\xf8\xc4\xcc\x48\xf3\xf6\x29\xe2\xe4\xa9\xc2\x34\x5e\xcd\x66\x4f\
+\x4f\x83\x20\xc9\x80\xa8\xae\xd9\x94\x7d\xb1\x2e\x82\x60\x2c\x49\
+\xa5\x92\xf0\xe7\x45\x12\x3e\x43\x09\x26\x7c\xce\x55\x92\x7e\xef\
+\x8a\x1d\x61\x40\x12\x00\x6a\x38\x40\x6c\x69\x4d\x51\x0c\x87\xe2\
+\x4c\x6b\x8f\xca\x14\x02\xb9\x86\xef\xf0\xbf\x0f\x7e\x9c\x89\x24\
+\x2c\xc8\x19\xa3\x38\x63\x51\xca\x33\x98\xe2\x4c\x12\x33\x25\x5a\
+\xb7\x2c\x93\xc4\xa6\xd8\x24\x19\xf9\xa6\x0c\x3d\x53\x20\x89\xc2\
+\x35\x85\x87\x88\x37\x49\x30\x44\x00\x0c\x11\x81\x0c\x11\xc3\x7f\
+\x80\x68\x92\x84\x4d\x8b\x3f\x80\x6d\x5a\x58\xb2\x52\xc8\xa0\xfb\
+\xc9\x64\x3c\x5e\x8d\xc7\xb3\x59\x33\x9b\x61\x9c\x40\x97\x5d\x01\
+\xc1\x82\x29\x45\x5d\xb7\x92\x2c\x45\x92\x7b\x5e\xb7\x5a\x49\x18\
+\x97\x25\x9f\xf3\xa2\x10\x49\xfa\x57\x06\xe8\xa2\x80\x33\xc0\x17\
+\x33\xc5\x00\x17\x62\xc8\x7f\x68\x03\x39\x10\xed\x52\xa5\x4e\x0d\
+\xa8\x51\x0e\x06\x8c\xb2\x74\x27\xc9\x0b\x6c\x92\xf0\x10\xf1\x26\
+\x89\x6d\x5a\x50\x43\x01\x35\x04\x50\x03\x10\x35\x34\xb8\x7b\x93\
+\x04\x6a\x08\xa0\x86\x02\x6a\x08\xa0\x06\x00\x35\x04\x1b\x6a\x28\
+\xa0\x86\x00\x6a\x28\x2c\x89\x64\x03\xb6\x04\x2d\x16\x93\xc9\x8b\
+\x24\x8c\x19\x9f\x66\x0f\x04\x49\x88\x4f\x49\x2c\x49\x7f\xbd\x0e\
+\xeb\x16\x9f\xd3\x20\xc9\xc9\x3d\xe7\x91\x51\xc3\xe7\x22\xe0\x32\
+\xec\x5c\x97\x25\x26\x49\x51\x88\x24\x6a\x8a\xc1\x4c\x39\x4d\x9a\
+\x62\x59\x9c\x61\x77\xb9\x3d\xf8\x21\xc3\xc1\xfc\x50\x0c\x06\xf1\
+\x3f\x16\x9e\x1f\xb6\x69\x41\x0d\x05\xd4\x10\x38\x71\x9d\x01\x35\
+\x04\x50\x03\x80\x1a\x02\xa8\xa1\x80\x1a\x00\xd4\x10\x40\x0d\x05\
+\xd4\x00\xa0\x86\x00\x6a\x08\x9c\xd1\xc1\x80\x1a\x02\xa8\xa1\x70\
+\x42\x7a\x0a\x19\x34\x5d\x2c\x96\x2a\xc9\x64\x7c\x0f\x49\x76\x87\
+\xcc\x1e\xc2\x96\x46\x3c\x44\x6c\xd3\xe2\x83\x4d\x6b\x84\x38\xd2\
+\x30\x86\x4d\x3b\x44\xca\x12\x92\xc4\xa6\x18\x6c\xa6\x7c\x07\x48\
+\x69\xa1\x30\x53\x4c\x8d\xd3\xf0\x4d\xd4\x00\x70\x61\x75\x55\x30\
+\xd8\x0f\xa4\x0e\x8b\x1e\xb1\x2e\x6c\x85\xe3\x87\x25\x11\xa8\xa1\
+\x80\x1a\x02\x37\xa4\x8f\xb6\x0c\xe9\x40\x57\x48\x07\x92\x21\xdd\
+\xf5\x23\x0e\xe9\xe6\x07\xd4\x10\x64\x03\x76\x00\xcd\xa7\xd5\x14\
+\x92\xf0\x09\x92\x4c\x76\x86\x2e\x68\x3c\x43\x48\x86\x48\xfd\x32\
+\x44\xe0\x87\x0c\x91\x15\x9f\x8b\xb0\x69\x5d\x60\xc9\x12\x88\x24\
+\x6a\x0a\xb2\x01\x60\x92\xc0\x0f\xc3\x77\x0a\x33\x05\x6a\x88\x15\
+\xed\xe8\xe8\x01\xea\x47\xdf\xfc\x00\xf8\xd8\xb7\x80\x4d\x35\x00\
+\x2f\xa4\x33\x9c\xe8\xa1\x21\x5d\xb1\x65\x48\x07\xfc\x90\x1e\xf9\
+\xb1\x19\x3d\x80\xae\xe8\x01\x74\x45\x0f\x20\x1b\xb0\x13\x68\xbe\
+\x9e\xcf\xa7\x41\x92\x29\x24\xd9\x19\x41\x12\x1e\x22\x8d\x44\x7d\
+\x2c\x59\x54\xcb\x10\xe9\x55\x55\xf0\x83\xcf\xc9\x3d\x9f\x51\xd8\
+\xb4\x86\x3c\x43\x24\x89\x0c\x83\x1a\x97\x0a\x33\xa5\x34\x53\xa2\
+\x74\x02\x35\x04\x96\xe8\x21\xc4\x06\xc4\x9e\xe0\x11\xd4\x30\x3f\
+\x00\x58\x81\x6f\xe9\xe8\x01\x40\x0d\x45\x14\x3d\x52\xd1\x1c\x6a\
+\x08\x2e\x53\xd1\xfc\x2a\x15\xcd\xa1\x86\xa0\x2b\x7a\x00\x89\xe8\
+\xb1\x73\x34\xcf\xa0\xf5\xf3\x7c\x1e\x24\x99\x43\x92\x17\xec\x20\
+\x89\x0e\x91\x99\x0e\x91\xf2\x65\x88\xac\xfb\xeb\x4a\x86\xc8\x7d\
+\xf0\x03\xe0\x21\x82\x25\x8b\x81\x21\x02\x40\x0d\x85\x3b\x53\xfa\
+\xbe\x29\x6a\x45\xbb\x7d\xa1\xbe\x80\x24\xea\x07\x10\x19\x60\x0b\
+\x55\x67\xf4\x48\x45\xf3\x93\x54\x34\x87\x1a\x82\xae\xe8\x01\x44\
+\xd1\xc3\x8f\xe6\x50\x43\xd0\x15\x3d\x80\x44\xf4\xd8\x23\x9a\x67\
+\xd0\xdd\xf3\xf3\xf3\xfa\xf9\x59\x24\x99\x57\x91\x29\x69\xc0\x0f\
+\x0c\x11\x9e\x21\x21\xae\x6b\x52\x2f\x88\x90\xd4\xe3\x21\x32\x0a\
+\x92\x5c\xac\xf8\x04\x40\x12\x00\x92\x28\x22\x3f\xa0\x06\x10\xa5\
+\x77\xdf\x14\x51\x43\x9d\xc1\x37\xf8\x01\xf4\xa5\x0b\x6c\xad\x28\
+\x22\x3f\xfc\xe8\x91\x8a\xe6\x7f\x4c\x45\x73\xa8\x21\xe8\x8a\x1e\
+\x40\x57\xf4\x00\xbc\xe8\xc1\xd5\x47\x22\x9a\x43\x0d\x85\xd3\x9f\
+\xef\x80\x0c\xba\xbb\xbb\xab\x45\x12\x06\x24\xd9\x16\x96\x5d\x56\
+\x3c\x43\x64\x88\xa0\x4f\x91\x9b\xac\xd0\x3c\xf6\xc2\x10\x39\x0d\
+\x92\x9c\x2c\xcd\x0f\xc6\x50\xc1\x93\xa4\x69\x14\xae\x29\x45\xe1\
+\x4e\x12\xa8\x01\x03\x54\x08\x46\xfb\x2d\xac\x56\x4c\xf5\x23\x0e\
+\xe9\xea\x47\x28\x41\x22\x35\x0c\xfd\x54\x34\x3f\x49\x45\x73\xa8\
+\x21\xe8\x8a\x1e\x40\x57\xf4\x00\x36\xa3\x07\x90\x88\x1e\x5e\x34\
+\xdf\x3f\x7a\x64\xd0\xe7\xcf\x74\xc7\xa7\x66\x3c\xd7\x90\x64\x3b\
+\xb0\x24\x36\x44\x38\xaa\xaf\xc2\x10\x19\xe0\xba\xd7\x6e\xb2\xd6\
+\x8c\xd3\x20\xc9\x49\xd8\xb4\x46\x6d\x12\x51\x53\x9a\xc6\x9d\x24\
+\xe7\x0a\xad\x2a\x14\xae\x29\x3d\x33\xc5\xbe\xf5\x21\x89\xf8\x11\
+\x87\x74\xf3\x23\x11\xcd\xbd\xe8\xe1\xb7\x82\xc0\x11\xb7\x82\x19\
+\xf4\x99\x15\x31\x49\xb6\x85\x0c\x1b\xbd\x00\x9b\xf0\xc1\x10\x41\
+\x27\x52\x86\x21\x52\xd4\xb5\x2d\x59\xec\x47\x18\x22\xa3\x25\x9f\
+\x8b\x20\x89\x20\x9e\x24\xae\x29\xe5\xb9\x3b\x49\xac\xfe\x6e\x63\
+\xb8\x98\x22\xdf\x0c\x45\x01\x49\x2c\xa4\xdb\xb7\xaf\xd9\x0a\x02\
+\xdf\x48\x2b\x98\x41\x4f\x3f\xf0\x81\x24\x66\xca\x16\x40\x6c\xa9\
+\xc2\x10\x41\x08\x59\x45\x37\x59\x7c\x24\x84\x04\x49\x4e\xd9\x11\
+\xf6\x83\xd5\xb0\x21\x62\x71\x44\x61\xa6\x34\xb6\x73\xf9\x93\x04\
+\x6a\x00\x9b\x99\x64\x13\x3c\x68\xcc\x0f\x81\x6a\x95\x5b\xc1\xad\
+\x91\x41\xd7\xec\x07\x4b\x02\x40\x92\x24\xc2\x32\x26\x77\x5f\x53\
+\x3e\xcb\xe9\xcb\x4d\x56\xa3\x21\xe4\x89\x0a\x92\x67\x4e\xea\x75\
+\x0f\x4b\x56\x3c\x44\x04\xf7\xee\x24\x69\xcc\x8f\x78\xd3\xf2\xae\
+\x80\x0b\x33\xc5\xac\x88\x66\x4a\x51\xe8\x10\xc1\x37\x13\x02\xce\
+\x1c\x53\x2b\x98\x8a\xe6\xd9\x80\xb7\x81\xae\xaf\xaf\x67\xd7\xd7\
+\x2a\x49\x1a\x41\x92\xbb\x3b\x84\x95\x2a\x14\x28\xcb\xf6\x26\x0b\
+\x9d\xfa\x20\x0c\x11\xdc\xf4\xf6\xc3\x10\x81\x1f\xac\x46\x65\x43\
+\x44\x30\x6a\x61\xa6\x0c\x23\x53\xdc\x49\x82\x21\x22\x30\x3f\x64\
+\x7e\xd8\x4c\x51\x2b\xe2\x6f\xe6\x07\x9e\x40\xdc\xa9\x15\x04\x3e\
+\x6e\x2b\x98\x41\x37\x37\xb3\x1b\x48\xb2\x9d\x29\xc4\x63\xe6\x33\
+\x42\x08\x86\xc8\x72\x3a\xd5\x90\xde\x70\x46\x97\x90\x5e\x10\x1f\
+\xa0\x17\x86\xc8\xa9\x0d\x11\xc1\xd2\x9d\x24\x50\x43\x70\xe9\x4e\
+\x92\xd2\xfc\x28\x3a\x26\x49\x64\x4a\xfc\xef\x30\x49\xe0\xc7\xcf\
+\xda\x0a\x02\x47\xdc\x0a\x66\xd0\xcd\xf8\x86\xcf\x2c\x00\x92\x74\
+\x20\x48\xc2\x7a\xe0\x5a\x58\x42\x3a\xfb\x81\x10\xb2\x68\x43\xc8\
+\xec\xa9\xd4\x10\x42\x75\xaf\x0e\x6a\xb4\x43\x04\x80\x1a\x0a\x51\
+\x63\x13\x2b\x77\x92\x0c\x36\x4c\x71\x9e\x56\x77\x4c\x89\x43\x48\
+\x5f\xfc\xf8\xfa\xad\x20\xf0\x8d\xb4\x82\x19\x04\x3f\x36\x30\xf3\
+\xc0\x8e\x68\x4e\xb1\x90\x0e\x3f\x36\xf6\x2b\xfd\x53\x81\x32\x3f\
+\xea\x76\x88\x00\x90\x44\xe1\x9a\x02\x35\x14\x51\x45\xe2\x5e\xfc\
+\xc6\x8f\x8c\xc4\xa6\x68\xf4\xf8\x32\xa4\xf7\x1d\x3f\x72\x2b\x98\
+\x44\x06\x7d\xe2\x33\x66\x98\x1f\x2e\x34\xa7\xd8\x7e\xc5\x67\x19\
+\x42\xc8\xfd\x54\x9b\x42\x09\xe9\x65\x18\x22\xc5\x13\x99\x1f\x50\
+\x03\xa8\x2a\x77\x92\x38\x71\x1d\xb8\x7c\x41\x73\xce\x8e\x00\x83\
+\x33\x48\x02\x94\xde\x24\x89\x17\x2a\x33\x05\x0d\xa0\xea\x72\xcc\
+\xad\xe0\xcf\x1f\xcd\x33\xe8\xf6\xf6\xd3\x84\xfd\x10\x8c\x5f\x81\
+\xe4\x14\x0d\xe9\x77\x12\xd2\xe5\x92\x77\x19\xef\x57\xec\x07\x42\
+\x08\x7f\xa8\x47\x44\x8c\x70\xd3\x5b\x03\x21\xae\xaf\x15\xd5\x08\
+\x92\x00\x51\x5c\x77\x27\x89\x7b\xf1\x5b\x9a\x1f\x9b\x49\x44\x00\
+\x21\x2c\x9a\xab\x1f\xbb\xb7\x82\xc0\xc7\x6d\x05\x33\x58\x90\xc9\
+\xed\x2d\x20\xa6\x38\xe0\x21\x72\xcd\xc7\xdf\xaf\x30\x3f\xf8\x0c\
+\xc6\x7c\xca\x20\x89\xec\x57\x14\x0d\x11\x5c\x67\xb9\x93\xc4\xbd\
+\xf8\xf5\x8b\x91\x81\x7b\x9d\x35\xf0\xde\xeb\xb8\xda\x8c\xe6\xea\
+\x47\x6e\x05\x77\x45\x06\xdd\x2e\xe0\xc7\xeb\x60\x49\x38\x84\xb0\
+\x1f\x21\xa4\xd7\xe1\x92\x77\x7d\x27\xfb\x95\x96\x20\x2b\x29\x41\
+\xf8\xd8\x7e\xd5\xe7\x4f\x6d\x7e\x40\x0d\x85\x7f\x9d\xb5\xbc\x68\
+\x31\x0c\x92\x00\xb6\x69\x49\x12\x11\x60\xc9\x52\x40\x0d\xa0\x88\
+\x43\x7a\x34\x49\xcc\x8f\x43\x6c\x05\x81\x03\x6e\x05\x33\x08\x7e\
+\xbc\x0e\xa4\x13\xdc\x03\x7b\xfb\x15\x7f\x16\x2b\x5c\xf2\x06\x49\
+\xca\x10\x42\x0a\x0b\xe9\x44\x02\x2c\x59\x0a\x2c\x59\x00\x92\x88\
+\x20\xf6\x03\x6a\x00\x50\x43\x61\x71\xdd\xbd\xce\xb2\x90\xae\xa6\
+\x28\xfa\xe6\x47\x6e\x05\xf7\x41\x06\x3d\xf0\x59\x08\x7e\xea\x07\
+\xf6\x2b\x84\xf4\xa7\x10\xd2\xd1\xa4\xaf\x43\x48\xaf\xe6\x7c\xee\
+\x59\x0f\xdd\xaf\x58\x0f\xdd\xaf\xc4\x0f\x32\x3f\xa0\x86\x02\x6a\
+\x00\xfe\x75\xd6\xd2\xae\x7b\xdd\xeb\x2c\xa8\xa1\x88\x43\xba\xfb\
+\x72\x39\xd4\x10\xe4\x56\x70\x4f\x64\x04\x41\xa6\x26\x49\x8c\xee\
+\xfd\x6a\x2e\xf7\x57\x8d\xf8\x61\xfb\x95\x96\x20\xd4\x17\xb0\x15\
+\xdd\xd7\xbd\xa3\xd4\x75\x6f\xea\xe9\x2c\xc0\xde\xf0\x70\xa2\x47\
+\x3f\xb7\x82\xfb\x22\x83\x1e\x1f\xa7\x8f\x8f\x8f\x22\x49\x8c\xee\
+\xfd\x8a\x8f\xee\x57\x7c\xa2\xfd\xaa\x1d\x22\x80\x0e\x11\xbb\xce\
+\x12\x74\x5c\x67\x5d\x00\xc8\x1f\x02\xbb\xee\x6d\x1a\xf7\xba\x37\
+\x0e\xe9\x6e\xf4\xe8\xff\x52\xad\x20\x70\x64\xad\x60\x06\xc1\x8f\
+\x4d\x40\x92\xc9\x2d\x0f\x90\xee\xfd\x0a\x7e\xd8\x7e\x55\x30\xa0\
+\x06\x40\x91\x1f\xb5\x77\xdd\x0b\x35\x14\x3b\x84\xf4\xa6\x23\xa4\
+\x5b\xf4\x00\x0e\xbe\x15\x04\x0e\xb8\x15\xcc\x20\xcf\x8f\xad\xf7\
+\x2b\xfe\xc8\x7e\x55\xa8\x1f\x50\xc3\x42\xba\x22\x15\xd2\xab\x54\
+\x48\x3f\x77\x2f\xb1\xdc\xdf\x7d\x33\x3f\x8a\xdc\x0a\xbe\x19\x19\
+\xf4\x53\x3f\x24\xae\x4f\xbe\xec\x07\xeb\xb0\x5f\xe1\x4d\xc2\xa5\
+\xbc\x04\x02\x3f\xb4\xff\x98\xa9\x1f\x50\x03\xa0\x8e\x4b\x2c\x00\
+\x7e\x28\xb6\x0c\xe9\xc0\x66\x48\xf7\x7e\x41\x34\xfd\xae\xa0\x22\
+\xb7\x82\x29\x64\x04\x41\xe6\x8f\x80\xf8\xf1\xf0\x80\x62\x84\xfb\
+\x73\x7d\x7a\x91\x42\x3f\x88\x37\x09\x2b\xd6\x03\xd1\x63\xda\x46\
+\x8f\x49\xc9\x7a\xa8\x1f\x50\x03\x20\xe7\x12\x6b\xef\x67\xb2\x9a\
+\xe4\x33\x59\xbf\xd4\x2f\x88\x02\x1f\xab\x15\xcc\x20\x55\x43\xf1\
+\x00\x3f\x42\x7f\xbe\xf1\xfc\x15\x5e\x92\xb2\xfd\x8a\x8f\xed\x57\
+\xa5\x0d\x11\x0b\xe9\x82\x54\x48\x5f\xa7\x42\x7a\xe2\x99\xac\xf7\
+\xfd\x05\xd1\xdc\x0a\x66\xd0\x8f\xf3\x1f\xf9\x08\xb6\xdd\xaf\xf8\
+\x63\xfb\xd5\xd8\x86\x88\x85\x74\x41\x57\x48\x07\x12\x21\x5d\xd4\
+\x50\x74\x85\x74\xe0\x5b\xfc\x05\x51\xe0\x80\x5b\xc1\x0c\x32\x3f\
+\xb6\xde\xaf\xa6\x53\xdb\xaf\xc6\xda\x9f\xc7\x21\x5d\xd1\x15\xd2\
+\x81\xed\x42\x3a\x90\x0a\xe9\x65\xac\x86\x21\xb7\x82\x6f\x44\x06\
+\xa9\x1f\x21\x7f\xb4\x57\xbb\x9f\xa4\x3a\xbf\x96\xf7\x07\xd7\x61\
+\xbf\xaa\x9e\x51\x9d\xc3\x0f\x5c\xed\xa2\xfa\xd0\x7e\xd0\x42\xba\
+\x77\xc9\xeb\x37\xe9\x6b\xf7\x49\x13\xa8\x01\xac\xfc\x4b\xac\xe8\
+\x71\xf7\x54\xf4\xc8\xad\xe0\xdb\x91\x41\xf0\x43\xab\x0f\x54\xe7\
+\xa8\x3e\x50\x9d\xa3\xfa\x90\xea\xbc\x92\xe8\xa1\xf9\x1c\x8f\x96\
+\x88\x1f\xa2\x86\x85\x74\x85\x1f\xd2\x23\x3f\xbc\xe8\xb1\x4c\x45\
+\x8f\x26\x1d\x3d\xde\xb3\x15\x04\x3e\x56\x2b\x98\x41\xec\x87\x55\
+\x1f\x9f\xda\xea\xe3\x87\xb6\xfa\xb0\x57\xa3\x34\x9a\x5b\xf4\x18\
+\xa7\xa2\x47\xfa\x75\x90\x0b\x2f\x9a\xfb\xd1\xa3\x49\x44\x8f\x43\
+\x6a\x05\x81\x23\x68\x05\x33\x48\xa3\xc7\x83\x46\x0f\x89\xe6\xd4\
+\x46\xf3\xaa\x8d\xe6\xab\x36\x9a\x97\xea\x47\x2a\x7a\xf4\x52\xd1\
+\xa3\x8a\xa2\x87\x1f\xcd\xdd\xfe\xbc\x74\xfe\xb8\xc7\x11\xb4\x82\
+\xc0\xe1\xb5\x82\xb9\x49\x7f\x90\x68\x2e\xd1\x63\xd6\x46\x8f\x5a\
+\xa3\x47\x1b\xcd\xed\xa9\x2b\xf8\x91\x8a\x1e\x94\x8a\x1e\x55\x14\
+\x3d\x52\xd1\x7c\xb0\x43\x34\x87\x1a\x82\xdc\x0a\xbe\x11\x19\xb4\
+\xd5\x53\x57\x5a\x0d\x5a\xf4\x28\x53\xd1\x83\x52\xd1\xa3\x72\xa2\
+\x87\x1f\xcd\x2d\x7a\xbc\xd3\xdf\x15\x04\x72\x2b\xe8\x21\x83\xa2\
+\xa7\xae\x34\x9a\xd7\x12\xcd\xdf\xd2\x0a\xd2\xd1\xb7\x82\xc0\xf1\
+\xb7\x82\x19\xb4\x65\x2b\xb8\x78\xd7\x56\x10\x38\xbc\x56\x30\xb7\
+\x82\x19\xf4\x2d\xb6\x82\xe5\x91\xb4\x82\x87\xff\xc7\x3d\x32\xe8\
+\x23\xb4\x82\x40\x6e\x05\xf7\x40\x06\xe5\x56\x50\x90\x5b\x41\x0f\
+\x19\xf4\x0e\xad\xa0\x13\xcd\x8f\xae\x15\x04\x8e\xbf\x15\xcc\xa0\
+\xdc\x0a\xe6\x56\xf0\x75\x64\xd0\x2b\xad\xe0\xf4\x2b\xb5\x82\xb9\
+\x15\x3c\xa8\x68\x9e\x41\x1f\xa1\x15\x04\x72\x2b\xb8\x07\x32\x28\
+\xb7\x82\xb9\x15\x7c\x1d\x19\x64\xad\xe0\xfc\x7d\x5a\xc1\xea\xe8\
+\x5b\x41\xe0\x38\x5b\xc1\x0c\x3a\xb8\x56\x10\xc8\xad\xe0\x61\x20\
+\x83\x72\x2b\x98\x5b\xc1\xd7\x91\x41\xb9\x15\xcc\xad\xe0\xeb\xc8\
+\xa0\xdc\x0a\x46\xd1\x43\xf1\xb5\x5a\xc1\xff\xb7\x77\x2f\x2b\x0d\
+\x04\x61\x10\x85\x4b\x24\xb8\xcd\x42\x70\xe1\x42\x30\x26\x5e\x46\
+\x63\xbc\x8b\x20\xa8\xaf\xa2\x20\x0a\x82\x68\x50\x1f\xdf\xb5\x81\
+\xbf\x99\xc8\x74\x4f\xf7\xdf\x67\x73\xde\xa1\xf8\x16\x05\x3c\xe4\
+\x17\x45\x57\xc1\x79\x15\x2a\x38\xf5\xa9\x82\x44\xa8\x20\x2a\x68\
+\x87\xa8\x74\x15\x5c\x45\x05\x23\x86\xe8\xaf\x0a\x3e\x56\xa1\x82\
+\x23\x54\xb0\x65\x88\x50\x41\x54\xd0\x0e\x51\x52\x15\xfc\x72\xab\
+\x82\x33\x9f\x2a\x48\x94\xbd\x0a\x0e\x51\xc1\xfe\x42\x84\x0a\xa2\
+\x82\x76\x88\x02\xe7\x1e\x6e\x55\xb0\x41\x05\x5b\x86\x28\xa8\x82\
+\xa8\xe0\xa4\x6e\x15\x24\x4a\xaa\x82\xdf\xbe\x54\xd0\xff\xb9\x07\
+\x51\xf6\x2a\x38\x40\x05\xfb\x0b\x91\x27\x15\x1c\xa3\x82\x1d\x87\
+\xc8\x56\x41\x55\xa1\x82\x3b\xa8\x60\x20\x44\xdd\xaa\xe0\xab\x2b\
+\x15\x44\x05\x89\x7a\x53\xc1\x75\x17\x2a\xe8\xfc\xdc\x83\xa8\x28\
+\x15\xdc\x46\x05\xd3\x86\xc8\x93\x0a\xee\xa3\x82\x1d\x87\xc8\x50\
+\x41\x63\x9a\xfb\x53\xc1\x43\x54\x30\x10\x22\x54\x10\x15\xb4\x43\
+\x14\x43\x05\x51\x41\x2f\xd3\x9c\x94\xa5\x82\x5b\xa8\x60\xda\x10\
+\x54\x10\x15\x0c\x84\xb4\x54\xc1\x8f\x2a\x54\xf0\x08\x15\x5c\x08\
+\x51\x3c\x15\xdc\x40\x05\x8b\x0f\x41\x05\x51\xc1\x40\x88\x50\x41\
+\x54\xd0\x0e\x91\x57\x15\x3c\x43\x05\x3b\x08\x51\x3b\x15\x9c\x57\
+\xa1\x82\x53\x54\x70\x21\x44\xa8\x20\x2a\x68\x87\x28\x0b\x15\x9c\
+\xa1\x82\x79\x86\xa8\x58\x15\x1c\xa1\x82\xf1\x43\x84\x0a\xa2\x82\
+\x76\x88\x96\x57\xc1\xc6\x9b\x0a\x9a\xd3\x1c\x15\x24\x4a\xa3\x82\
+\x43\x54\xb0\xc8\x10\xa1\x82\xa8\xa0\x1d\xa2\x62\x55\xb0\x41\x05\
+\xe3\x87\xa8\x06\x15\x9c\xa0\x82\xff\x0c\xd1\xf2\x2a\xb8\xe7\x4c\
+\x05\x39\xf7\xb0\x43\x94\x46\x05\x07\xa8\x60\x91\x21\xca\x4e\x05\
+\xc7\xa8\x60\x3e\x21\x72\xa1\x82\x17\xa8\x60\x9c\x90\x5f\x2f\xd0\
+\xd0\x9a\x63\x93\x03\x4d\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x0a\x2a\
+\x00\
+\x00\x2c\xbc\x78\x9c\x9d\x5a\x49\x73\xdb\x3a\x12\xbe\xe7\x57\xa0\
+\x7c\x57\x3c\x76\xd6\xa9\x4a\xf2\xea\x59\xb2\x1d\xd7\xd8\xb1\x62\
+\xaa\x9c\xb9\x4d\x41\x24\x44\x61\x4c\x12\x0c\x48\x6a\xc9\xaf\x9f\
+\xc6\x0e\x48\x22\x48\xcf\x4d\xf8\x80\xee\x06\x1a\x8d\xde\xa8\x2f\
+\x7f\xed\xca\x02\x6d\x08\x6f\x28\xab\xbe\x9e\x5d\xbc\xfd\xc7\x19\
+\x22\x55\xca\x32\x5a\xe5\x5f\xcf\x68\xc3\x26\x9f\x3f\x7f\xf8\xe7\
+\xe4\xe2\xec\xaf\x6f\x6f\xbe\xa4\xb8\x25\x39\xe3\x94\x34\xa8\xc2\
+\x25\xf9\x7a\x36\xdf\xff\x6c\xd1\xf5\x0e\x97\x75\x41\x9a\xb3\x6f\
+\x6f\x10\x32\x6b\xf6\x28\xa3\x5c\x2d\x6a\xbb\x16\x68\x70\xd1\x9c\
+\xe3\x2c\xe3\xa4\x69\x96\x8c\xbd\x9c\x69\x0e\x7f\x2b\x08\x5d\x01\
+\x86\x16\x7a\xa5\xe4\x04\xbc\x88\xe2\x8c\x56\xb4\x20\x6a\x79\x8d\
+\x79\x7b\x61\x68\xe7\x30\x40\x30\xa2\x25\xce\x61\xe8\x71\x9f\x18\
+\x99\x13\x49\x30\x69\x52\x4e\x48\xd5\xac\x59\xfb\xb6\xae\xf2\x33\
+\x74\x1e\x15\x70\x19\x08\xb8\x1c\x16\x70\x39\x81\xa9\x49\xca\xaa\
+\x16\xa7\xa3\x24\xbc\x0b\x24\xbc\x1b\x96\xf0\xee\x95\x47\x78\x1f\
+\x08\x78\x1f\x17\xf0\x3a\xd6\x1f\x02\xd6\x1f\x86\xf7\xfe\xe1\x95\
+\x02\x3e\x06\x02\x3e\x0e\x0b\xf8\xf8\x4a\x01\x9f\x02\x01\x9f\x86\
+\x05\x7c\x3a\x2d\xe0\xcb\xb9\x31\xf6\x1e\xcb\xc7\x15\x70\x6e\xe1\
+\x61\x59\x6b\x37\x00\xba\xe1\x00\x6c\x19\x7f\xe9\xb7\x75\x45\x4d\
+\xb2\x96\x8a\xc7\x15\x70\x20\x19\x5a\x28\xb4\xff\xa4\xb8\xae\xd3\
+\x35\x63\x0d\xe1\x96\xd6\x43\xfa\xe9\x08\x6e\xa8\x38\xa2\x1a\x5d\
+\xcb\x11\x9a\x76\x7c\x13\x17\x57\xb2\x0d\x59\x16\x2c\x7d\xb1\x5b\
+\x7d\x60\x1b\x41\x7a\xa5\xc1\x7e\xd2\xa6\x85\x13\x59\xb2\x44\x8f\
+\x62\xeb\x69\xfa\x52\xe2\xca\x51\x98\xf1\xb8\x6b\xf9\xdd\xc1\x7a\
+\x43\xfc\x53\x0e\x06\x2e\xe1\xd4\x15\xc6\x76\x98\xe2\x6a\x83\xed\
+\x89\xa6\x7a\x14\x53\x5e\x46\x84\x7f\x5c\x36\x2d\x07\x17\x42\x5b\
+\x52\x4a\xc8\x0a\xd5\x13\xe8\x0e\x66\xd0\x83\x9a\x1a\x64\xc7\x96\
+\xff\x25\x69\x5b\xd0\xa6\x0d\x98\x3d\x4a\x18\xdd\x03\x3e\x9a\x15\
+\x88\x87\xbb\x3c\x62\x95\x48\x78\x24\xab\x26\x25\x15\xc9\x39\xae\
+\xd7\xe7\x69\xd7\xb4\xac\xcc\x09\x2b\x49\xcb\xf7\x56\x4f\x12\x45\
+\xb7\x16\x7e\xc5\x75\x9e\xbb\x28\x43\x76\x2d\xa9\x32\xcf\x86\xe5\
+\x15\x8f\x08\x2e\xe9\x1a\xd7\x2d\xe1\x17\x93\x25\x18\x7d\x6a\xaf\
+\xef\x4a\x8f\x22\xd7\xad\x08\x2f\x27\xb0\xef\x35\xcb\xdc\x0b\x30\
+\xc3\x41\xd2\x77\x93\x25\x95\x7b\x76\x52\xed\x78\x90\xf8\xfd\x44\
+\xe9\x73\xce\x59\x4d\x78\xbb\x5f\xec\x6b\xf7\x9c\xb4\x52\xcd\x1c\
+\xd2\x93\x83\x4c\x3f\x4c\xc4\x6d\xd7\x8a\x8c\x3a\x7e\xf2\xae\xe7\
+\x1e\x3c\xc8\xe9\xe3\xa4\x2e\xba\x9c\x56\x60\xdf\x75\x6d\x5d\xaf\
+\x82\x20\xd9\xd8\x91\xb4\x6b\xf1\xb2\x00\x70\x05\xd7\x47\xce\xd0\
+\xef\xb2\x80\xac\x81\x77\x64\xac\x05\x64\xa4\xa1\x79\xe5\x1c\x1d\
+\x24\x25\x33\x03\x45\xde\x68\x91\x76\x05\x06\xa3\x58\x31\x5e\xba\
+\xb7\x6a\x50\x74\x23\xe1\x48\x28\x31\x47\x08\x14\xfd\x8b\x66\x39\
+\x01\x0d\x99\xc9\xd1\x27\x78\x69\x99\xd5\xce\x4c\x0f\xfb\xdf\xd2\
+\x5e\x38\x04\xfb\x72\x12\x18\x82\x63\x58\x48\x48\x47\xb3\x46\x62\
+\x62\xd5\x44\xd3\xcb\xd0\x15\x7b\x9f\x26\xc6\x59\xb6\x1e\x32\xf2\
+\x1c\xf0\xc0\x98\x33\xe2\x99\x1e\xf6\x5f\x02\xab\x56\x34\x57\x54\
+\x56\x91\x12\xeb\xb8\x0a\x94\x33\x3d\x17\x09\x58\xe2\xbd\x37\x9e\
+\x8b\xbe\x36\xc0\x08\xe2\x15\x3c\xb3\x95\x1f\x60\x6f\x00\x40\x37\
+\x02\x19\x41\x0d\x91\xab\xca\x30\xcf\x0e\x8e\x9d\x68\x18\x99\xf3\
+\x47\x58\x80\xe9\x87\xc7\x5f\xe0\xe5\x08\xc9\xe0\x78\x37\xb0\x68\
+\x4b\xff\x80\x1c\x4b\xaa\x40\xb0\x41\x85\x6a\x4b\x08\xd6\x1a\x63\
+\x98\xd0\xaa\xe5\x2c\xeb\x52\xa1\xe5\x01\xcb\x48\x0b\xdc\x34\xa1\
+\xa8\xa9\x80\xac\xa0\x91\xc6\xc1\x71\x0e\x8a\xc9\xb8\x67\xe8\x00\
+\x21\xc0\xd0\x8c\xc7\xcc\x1d\x22\x0b\xde\x93\xcc\x14\x26\xee\x99\
+\x48\x18\x5d\x5b\xbc\xff\x0c\x42\x78\x2e\xdc\x0c\x05\x9b\x6b\x7c\
+\xf9\x12\x45\x77\x0a\x1e\xc1\xa0\x05\x83\x3b\xa6\x5f\x48\x34\x46\
+\xce\xea\x06\x02\xbb\xa3\x64\x35\x4a\x24\x10\xb1\x4e\x2e\xbc\x09\
+\xdc\x62\x45\x5a\x67\xa1\x12\x44\x0f\x06\x8d\x78\xa8\xee\xcf\x9f\
+\xc2\x4a\x9c\xeb\x91\xb6\x0a\xef\x36\xd4\xba\x63\x37\x31\x78\xa3\
+\x64\xb5\x82\x54\xc2\xee\xec\x56\x04\x77\x88\x95\xe8\x5a\xe3\xbd\
+\x3b\x2b\x68\xbe\x6e\xbd\x9b\xbc\xd7\x63\x69\x0b\xc9\x1a\x67\x6c\
+\x3b\xda\x77\xe6\x5a\xea\x86\x92\xed\xd1\x4e\x9e\x05\x18\xc9\xee\
+\x20\x21\xe6\x60\x44\xac\xb3\x57\xfa\xb7\xc4\xd0\xbd\x06\x23\x7e\
+\x07\x9e\x00\x64\x9e\x15\xe4\x3d\x56\x03\xd7\x0a\x43\x3f\x14\x18\
+\x79\x52\xac\x28\xa8\xb0\xd9\x92\xa6\xc4\x79\x3e\x0d\xa2\x07\x89\
+\x46\xac\x89\x62\x38\x76\x29\x53\x2a\xcf\xd9\x0a\x0c\x25\x0a\x8c\
+\x5b\xb2\xb8\x76\xce\x96\xac\x3d\xf9\x12\xd1\x93\x9a\x8a\x1c\xbe\
+\x5c\x92\x2c\x23\x87\x9e\xef\x5a\xc3\x63\x3c\x5f\x8d\xb3\x0a\x6f\
+\x68\x2e\x82\xad\xab\xc8\x32\xf4\xc3\x80\xa6\xb3\x30\xd6\x10\x68\
+\x9d\x1a\x3e\x77\xf3\x69\x24\x78\xae\x31\x27\x59\x49\x4a\xe6\x72\
+\xcf\x44\x62\xe8\x41\x83\x26\x86\x7a\x2b\xcd\xf3\xf8\xcf\xc5\x80\
+\xb7\x84\x7a\x07\x17\x90\x53\xb4\x5d\x45\xd2\x82\x92\xca\xea\xf8\
+\x5e\xcc\x88\xbc\x42\x4c\xa1\xa9\x9e\xd3\xb2\x8e\xc9\x46\xc6\x6d\
+\x9f\x10\x6a\xbb\x8d\xcb\x83\x42\x79\x89\x9e\x3b\x21\x4f\x91\xfd\
+\x1f\x0e\x40\x54\x2a\xe2\xdd\x59\x03\x90\x05\xca\xb3\x44\x7a\x37\
+\xac\xd2\x6b\x90\x0c\x10\xe4\x87\x41\x45\x21\x93\x6d\x94\xc0\xe4\
+\xf9\x8d\x9c\x1d\xae\x2b\x20\xcd\xe4\x56\xc5\x53\x35\x88\xac\x96\
+\x69\x5a\x8f\x74\x9d\xc3\xbd\x4e\x3c\x2b\x18\x18\x09\x15\x89\x24\
+\x94\x68\x9e\x4d\x4d\xc5\x0c\xba\x96\x53\xe8\xc6\xcc\x69\xf5\x1f\
+\x93\xc9\x89\xa1\x48\xcc\xca\x25\xdb\xca\x14\xb3\x84\x6c\xda\x5d\
+\xf5\x54\x4c\x98\xe4\xf3\x41\x4f\xc5\xfc\x07\xf7\xdd\xe5\x8c\x72\
+\x22\xf7\xa0\xfc\x65\x2c\x22\x91\x36\x5d\xc3\x73\xb0\x5e\xe7\x46\
+\x00\xa0\x25\x1e\x75\x39\xe2\xa0\x32\x76\x42\x42\x19\x68\xfc\x5a\
+\x4f\x40\xee\x4a\xc8\xb0\xb2\x6b\xba\x23\x45\xe0\x30\x1c\xf0\xba\
+\x38\x88\xec\x4d\x58\x1b\xee\x0b\x83\xa7\x9d\x08\x15\x40\xc6\xc2\
+\x42\x3d\x91\x28\x9a\x3d\x3e\x8c\xa8\x87\xe5\xda\x23\x8d\x68\x16\
+\xe3\xf4\xa1\x78\x9c\x32\x08\xcd\x66\xb4\x45\x34\x35\xad\x96\x6c\
+\x07\xf2\x08\x38\x5f\xab\xac\x04\x60\x74\xc5\x76\x50\x50\x99\x89\
+\x18\x0f\x4e\x70\xd6\xac\x09\x71\x25\x84\x07\x45\xf3\x68\x7e\x24\
+\x19\xb0\x43\xa9\x83\xfe\x48\x85\x72\x57\xac\xea\x61\xdc\x15\x1d\
+\x10\x29\x17\x64\x48\x23\xc7\x5d\x32\xd8\xf4\x41\xf6\x70\x25\xb1\
+\x11\xd9\xc3\xaa\x60\xdb\x90\xf4\x06\x90\x90\x70\xf0\xb8\x25\xa6\
+\xd5\x16\x0a\x16\xe6\x1c\xf0\x03\x40\x70\xeb\x0a\x8b\x35\x07\x0b\
+\x9a\x86\x8d\x2d\x1f\x8a\x78\x0e\x96\xbe\x28\x7b\x73\x49\x34\x40\
+\xda\xd0\xe2\x5d\xae\x8c\xda\x5d\xce\xee\xa2\x86\xe4\x56\x26\xf1\
+\x95\x25\xa9\x3a\xaf\xdf\x22\x07\xfd\xab\xc1\xcb\x41\x5c\x0d\xea\
+\xbd\x27\x09\xa9\x8a\x2f\xba\x25\x52\x63\x55\x92\x36\xa1\x7f\x4f\
+\xfc\x89\x91\xd7\xd6\x15\x2d\x2d\xc1\x27\x62\xbb\x73\x87\xf4\xdf\
+\x59\x97\x51\xf0\x07\x1b\x48\x0d\x5d\x3b\x58\x60\xf0\x4a\x34\x18\
+\xe9\x06\x8b\x85\x60\x59\xb5\x97\xe8\x4a\xda\x47\x8d\xbd\x76\xe7\
+\x07\x36\xe0\x0e\x60\x2d\x21\xd2\x38\x81\xaa\x8d\x87\xdb\x10\x99\
+\xe7\x33\xcd\x08\x43\x73\x3d\x1b\xeb\xae\x96\x84\x5b\xd5\x4d\xf5\
+\xa8\x7f\xfd\x46\xf0\x35\x55\x82\xf0\xf6\x86\x54\x09\xb4\xb5\xc2\
+\x9d\x9c\x1a\xe0\xa3\xce\x1d\x72\xf8\xa5\xb1\x71\x3a\x84\xaa\x4d\
+\x36\xfe\x35\x8b\x1f\x6a\x28\x8a\xa1\x7e\x4f\x23\x7a\xe8\xb0\xe2\
+\x64\x56\x79\xa5\x27\x8f\x12\xcb\x88\xe7\xe2\x0c\x67\x29\x94\x2a\
+\xe2\x41\x50\x2f\x63\xbc\x32\x13\xe8\xc9\xce\x8c\x60\xd3\x90\x2a\
+\x3b\xc5\x24\xd1\x78\xc4\x0d\x9e\x3a\xd1\xf8\x83\x9c\x4c\x7b\x0f\
+\x13\xde\x7e\xf2\x75\xdb\xd6\x67\x08\x12\xc8\x2a\x07\xd3\xd5\x39\
+\x90\xed\x43\xaa\x35\xdf\x17\x8b\xf9\x88\x9d\xc8\x8a\x16\x42\xb0\
+\x7d\x11\x8f\x35\xa9\x12\x11\xdd\x5b\x08\xbe\x91\xd8\xd7\xae\x45\
+\x84\x24\xd9\xc9\xa3\x2c\xf4\xa4\xbc\xdb\xb7\xe1\x89\x06\x0d\x8d\
+\xc1\x0e\xf2\xc2\xdf\xcf\xed\x7d\xbf\x8d\x5d\x66\x35\x84\x0e\xbf\
+\x28\xbf\x9c\xa1\xb9\x85\xfa\x0f\x00\x2f\x6b\xb9\x74\x5b\xbe\x35\
+\xc3\x88\xda\x49\x01\xc5\xa1\xdd\xd9\x77\x31\x44\xb0\xb7\x08\x89\
+\x3a\x8b\x8a\x75\xe1\x89\x74\xb0\x8b\x12\x83\xd2\x0e\x0f\xf7\x18\
+\x60\x11\xbf\x2f\x81\x65\xb7\x5a\x11\xee\x1a\x7c\x6a\xd5\x95\x41\
+\x23\xb7\x4b\x76\x6d\xc7\x9d\xc3\x5e\xd8\xf1\xb8\x3b\x3c\xdc\xb6\
+\xbd\x90\x78\x4a\x03\x25\xfe\xd6\xa3\x52\x29\xcd\xcc\x80\xb1\xfa\
+\xa2\x12\xe1\x90\xd3\x34\xa5\x3c\xf5\xc2\xe4\xd4\x4e\xa0\xa9\x99\
+\x89\x95\xf6\xb0\x4b\xa1\xdf\x76\xdd\x04\x3b\x87\xd4\x68\xae\xc0\
+\x88\xc6\x37\xb9\x48\xc7\xbd\x54\xf6\xf9\x56\xd6\x25\x71\xa3\x6a\
+\x39\xae\x1a\xd1\xca\x0f\x83\xf4\xe2\x10\x1e\xa7\x77\x38\xe8\xda\
+\x6f\xf4\x3d\xc1\x58\xf5\xf8\x62\x1f\x14\x88\x68\xfb\x7a\x9f\x12\
+\xf4\x38\x62\x99\x22\x5b\xf4\xbf\x3f\x3c\xca\xf4\x71\xe8\xd3\x43\
+\xb3\xaf\x5a\xbc\x5b\x83\xcb\x91\x6e\xc7\x53\x95\x9c\x40\xdf\xfd\
+\x99\xb8\x71\x8a\xca\xcc\x37\x4e\x59\xaf\x0e\x11\xa9\x2f\x8b\x01\
+\xd9\xa3\x86\xc6\xa9\xb7\xf9\xed\xea\x9d\x9f\x11\xa7\x94\xe2\x74\
+\x4d\x32\x59\x21\x3a\xb5\x0a\x08\x2d\x14\xd6\xbf\xcf\xdf\x1d\xe1\
+\xfb\xa0\xb2\xfa\x29\x90\xe1\x9a\x8a\x8b\x82\x12\x6c\x05\x17\x52\
+\x6e\xc0\xe2\xc9\xce\xa9\x0d\x0c\x73\x3b\xe6\x71\x4c\x38\xa8\x2e\
+\x15\x23\x9a\x30\x2a\x44\xbd\x40\x09\x09\x15\x29\x20\x40\xdb\x5b\
+\x7a\xf0\x90\x91\x52\x19\x2b\x9c\x4c\x39\x88\x38\x8e\x8c\xa4\x9e\
+\xb7\x50\xa3\xa1\x36\x4c\xca\x64\x09\xec\xb5\x31\x54\x03\x66\xea\
+\xf0\x7e\x16\xf4\xe2\xb3\x2d\x5e\xee\x84\x6b\xa9\xf4\xd5\xd0\x3f\
+\x83\x55\x0c\x27\x39\xd9\xd5\xee\x56\xf3\xae\xc0\xa2\xdf\x58\x8b\
+\x3f\x80\xd0\x81\x2f\x01\x0d\x69\x85\x0b\x6e\x54\xf7\xc6\xda\xb1\
+\x46\x75\xc3\x67\xac\x92\x0f\xf2\xe8\xc1\xe4\x19\x57\xa2\xb1\x9a\
+\x8a\x9c\xcf\x75\xac\x05\x04\x39\x8a\xc4\x62\x79\xb3\xf9\xb6\x79\
+\xe2\x6b\xe7\x00\xa1\xf4\x64\x61\xee\x6b\xfc\x5b\x98\xfe\xf6\xb6\
+\xe8\x70\x2a\xba\x6d\xd8\x2a\x7d\x6a\x30\xd1\x9c\x88\xc7\xa4\x8c\
+\x84\xaa\x16\xe6\x15\xaa\xb9\xa7\xc9\x95\xd3\x16\x4e\xe8\xeb\x6a\
+\xa6\xb0\x61\x65\xe5\x9c\x75\xf5\x92\xed\x5c\x5a\x03\x63\xd1\x09\
+\x89\x9a\xa4\xff\x6d\x69\xf0\x8b\x92\xec\x3f\x85\xa1\xee\x4e\x40\
+\x23\x82\x5d\x41\x2b\xa9\x13\xef\xb3\x7c\xa5\x54\x32\xf4\x27\x1d\
+\x6a\x1d\xa9\xf8\x7f\x0e\x19\x51\x6e\x35\x29\xa7\x4b\xcf\x01\x27\
+\x76\x1c\xa1\x59\xe3\x9a\x64\x81\xe6\x13\x09\x0d\x2b\xbe\x29\xa0\
+\xa6\xf2\x52\x2d\x33\x1c\x6c\x5d\x79\x7f\x21\xd2\x4d\xab\xa1\xbf\
+\x11\xed\x0b\xff\x6f\x47\x6a\x64\x3a\xff\x72\x38\x81\xa5\x70\xd2\
+\x6c\xcb\x58\x36\xd4\x0f\x94\x04\x41\xeb\x4b\x20\x28\x51\x50\xc0\
+\x56\x40\x93\x94\x41\xf2\x48\x26\xb5\xfc\x62\x04\xc1\x6a\x80\x7f\
+\x4b\x20\xf9\xda\xb9\x90\x2b\x46\xd1\x47\x2b\xbc\x77\x4b\xeb\xc0\
+\x81\xa3\x85\x04\xfa\x89\xb6\x34\xcf\x8b\xbd\x73\x46\x6a\x14\x5b\
+\x2f\x72\xef\x55\x81\x73\xcf\x83\x09\x08\xdd\x28\x6c\xa4\x13\x24\
+\xcb\x17\x97\x86\xfc\x22\xcb\x7f\xd1\x48\xa2\x25\xf2\x25\x48\x39\
+\xb8\x6c\x9b\x7b\x45\x5f\x09\x0e\xdc\xa2\x91\xe4\x94\x1f\x3c\xba\
+\xef\x8b\x87\x7b\x34\x77\x68\xa4\xdc\xc4\x55\xba\x87\x10\xba\xf5\
+\xfe\x55\x77\x23\x30\x74\x65\xc0\x88\x47\x61\x50\xf3\x10\x70\x85\
+\xf6\xa0\xb7\x12\x41\x53\x09\xc5\x5a\x6e\xe2\x6f\x1c\xe2\x3f\xba\
+\xb8\xf0\x74\x84\xae\x21\xb1\x10\xbd\x2b\xd1\x6d\x5e\xb8\x05\x43\
+\xdd\xe2\x86\x14\xc4\xd7\x9c\xcf\x2a\xb1\x73\xe3\x2e\x6e\x57\x16\
+\x90\xe4\x8b\xd8\x6b\xef\xff\xdf\x42\x99\x06\x8b\x38\x95\x35\x29\
+\xb1\x4f\x93\x48\x04\x3d\x43\xfc\xce\xfc\xf8\xed\xef\xc1\xfe\xa6\
+\xa4\xf9\xf6\xe6\x7f\x2a\xff\xfd\x30\
+"
+
+qt_resource_name = b"\
+\x00\x03\
+\x00\x00\x7f\x3c\
+\x00\x78\
+\x00\x6d\x00\x6c\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x12\
+\x0e\x78\xbb\xe7\
+\x00\x74\
+\x00\x72\x00\x6f\x00\x6c\x00\x6c\x00\x74\x00\x65\x00\x63\x00\x68\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\
+\x00\x67\
+\x00\x10\
+\x0f\xfa\x57\xe7\
+\x00\x71\
+\x00\x74\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x5f\x00\x73\x00\x6d\x00\x61\x00\x6c\x00\x6c\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x05\x87\x0f\xc7\
+\x00\x64\
+\x00\x65\x00\x6d\x00\x6f\x00\x62\x00\x67\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x0f\x5b\x57\xdc\
+\x00\x65\
+\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x73\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x06\
+\x00\x00\x00\x0c\x00\x02\x00\x00\x00\x03\x00\x00\x00\x03\
+\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x69\xdd\
+\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x48\x00\x00\x00\x00\x00\x01\x00\x00\x5b\xff\
+\x00\x00\x00\x88\x00\x01\x00\x00\x00\x01\x00\x00\xba\xa4\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/qtdemo/scanitem.py b/examples/qtdemo/scanitem.py
new file mode 100644
index 0000000..4be2b08
--- /dev/null
+++ b/examples/qtdemo/scanitem.py
@@ -0,0 +1,78 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QRect
+from PyQt5.QtGui import QColor, QImage, QPainter, QPen
+
+from colors import Colors
+from demoitem import DemoItem
+
+
+class ScanItem(DemoItem):
+    ITEM_WIDTH = 16
+    ITEM_HEIGHT = 16
+
+    def __init__(self, parent=None):
+        super(ScanItem, self).__init__(parent)
+
+        self.useSharedImage(__file__)
+
+    def createImage(self, transform):
+        scaledRect = transform.mapRect(QRect(0, 0, ScanItem.ITEM_WIDTH, ScanItem.ITEM_HEIGHT))
+        image = QImage(scaledRect.width(), scaledRect.height(),
+                QImage.Format_ARGB32_Premultiplied)
+        image.fill(QColor(0, 0, 0, 0).rgba())
+        painter = QPainter(image)
+        painter.setRenderHint(QPainter.Antialiasing)
+
+        if Colors.useEightBitPalette:
+            painter.setPen(QPen(QColor(100, 100, 100), 2))
+            painter.setBrush(QColor(206, 246, 117))
+            painter.drawEllipse(1, 1, scaledRect.width() - 2,
+                    scaledRect.height() - 2)
+        else:
+            painter.setPen(QPen(QColor(0, 0, 0, 15), 1))
+            painter.setBrush(QColor(0, 0, 0, 15))
+            painter.drawEllipse(1, 1, scaledRect.width() - 2,
+                    scaledRect.height() - 2)
+
+        return image
diff --git a/examples/qtdemo/score.py b/examples/qtdemo/score.py
new file mode 100644
index 0000000..2eb393b
--- /dev/null
+++ b/examples/qtdemo/score.py
@@ -0,0 +1,109 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from colors import Colors
+
+
+class Score(object):
+    LOCK_ITEMS, UNLOCK_ITEMS, SKIP_LOCK = range(3)
+
+    FROM_CURRENT, FROM_START, NEW_ANIMATION_ONLY, ONLY_IF_VISIBLE = range(4)
+
+    def __init__(self):
+        self._index = {}
+        self._playlist = []
+
+    def hasQueuedMovies(self):
+        return len(self._playlist) > 0
+
+    def prepare(self, movie, runMode, lockMode):
+        if lockMode == Score.LOCK_ITEMS:
+            for item in movie:
+                if runMode != Score.ONLY_IF_VISIBLE or item.isVisible():
+                    item.setEnabled(False)
+                    item.prepare()
+        elif lockMode == Score.UNLOCK_ITEMS:
+            for item in movie:
+                if runMode != Score.ONLY_IF_VISIBLE or item.isVisible():
+                    item.setEnabled(True)
+                    item.prepare()
+        else:
+            for item in movie:
+                if runMode != Score.ONLY_IF_VISIBLE or item.isVisible():
+                    item.prepare()
+
+    def _play(self, movie, runMode):
+        if runMode == Score.NEW_ANIMATION_ONLY:
+            for item in movie:
+                if item.notOwnerOfItem():
+                    item.play(True)
+        elif runMode == Score.ONLY_IF_VISIBLE:
+            for item in movie:
+                if item.isVisible():
+                    item.play(runMode == Score.FROM_START)
+        else:
+            for item in movie:
+                item.play(runMode == Score.FROM_START)
+
+    def queueMovie(self, indexName, runMode=FROM_START, lockMode=SKIP_LOCK):
+        try:
+            movie = self._index[indexName]
+        except KeyError:
+            Colors.debug("Queuing movie:", indexName, "(does not exist)")
+            return
+
+        self.prepare(movie, runMode, lockMode)
+        self._playlist.append((movie, runMode))
+        Colors.debug("Queuing movie:", indexName)
+
+    def playQue(self):
+        for movie, runMode in self._playlist:
+            self._play(movie, runMode)
+
+        self._playlist = []
+        Colors.debug("********* Playing que *********")
+
+    def insertMovie(self, indexName):
+        movie = []
+        self._index[indexName] = movie
+
+        return movie
diff --git a/examples/qtdemo/textbutton.py b/examples/qtdemo/textbutton.py
new file mode 100644
index 0000000..c673406
--- /dev/null
+++ b/examples/qtdemo/textbutton.py
@@ -0,0 +1,345 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QPointF, QRect, QRectF, QSize, Qt
+from PyQt5.QtGui import (QColor, QImage, QLinearGradient, QPainter,
+        QPainterPath, QPen)
+
+from colors import Colors
+from demoitem import DemoItem
+from demoitemanimation import DemoItemAnimation
+from demotextitem import DemoTextItem
+from scanitem import ScanItem
+
+
+class ButtonBackground(DemoItem):
+    def __init__(self, type, highlighted, pressed, logicalSize, parent):
+        super(ButtonBackground, self).__init__(parent)
+
+        self.type = type
+        self.highlighted = highlighted
+        self.pressed = pressed
+        self.logicalSize = logicalSize
+        self.useSharedImage('%s%d%d%d' % (__file__, type, highlighted, pressed))
+
+    def createImage(self, transform):
+        if self.type in (TextButton.SIDEBAR, TextButton.PANEL):
+            return self.createRoundButtonBackground(transform)
+        else:
+            return self.createArrowBackground(transform)
+
+    def createRoundButtonBackground(self, transform):
+        scaledRect = transform.mapRect(QRect(0, 0,
+                self.logicalSize.width(), self.logicalSize.height()))
+
+        image = QImage(scaledRect.width(), scaledRect.height(),
+                QImage.Format_ARGB32_Premultiplied)
+        image.fill(QColor(0, 0, 0, 0).rgba())
+        painter = QPainter(image)
+        painter.setRenderHint(QPainter.SmoothPixmapTransform)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.setPen(Qt.NoPen)
+
+        if Colors.useEightBitPalette:
+            painter.setPen(QColor(120, 120, 120))
+            if self.pressed:
+                painter.setBrush(QColor(60, 60, 60))
+            elif self.highlighted:
+                painter.setBrush(QColor(100, 100, 100))
+            else:
+                painter.setBrush(QColor(80, 80, 80))
+        else:
+            outlinebrush = QLinearGradient(0, 0, 0, scaledRect.height())
+            brush = QLinearGradient(0, 0, 0, scaledRect.height())
+
+            brush.setSpread(QLinearGradient.PadSpread)
+            highlight = QColor(255, 255, 255, 70)
+            shadow = QColor(0, 0, 0, 70)
+            sunken = QColor(220, 220, 220, 30)
+
+            if self.type == TextButton.PANEL:
+                normal1 = QColor(200, 170, 160, 50)
+                normal2 = QColor(50, 10, 0, 50)
+            else:
+                normal1 = QColor(255, 255, 245, 60)
+                normal2 = QColor(255, 255, 235, 10)
+
+            if self.pressed:
+                outlinebrush.setColorAt(0, shadow)
+                outlinebrush.setColorAt(1, highlight)
+                brush.setColorAt(0, sunken)
+                painter.setPen(Qt.NoPen)
+            else:
+                outlinebrush.setColorAt(1, shadow)
+                outlinebrush.setColorAt(0, highlight)
+                brush.setColorAt(0, normal1)
+                if not self.highlighted:
+                    brush.setColorAt(1, normal2)
+                painter.setPen(QPen(outlinebrush, 1))
+
+            painter.setBrush(brush)
+
+        if self.type == TextButton.PANEL:
+            painter.drawRect(0, 0, scaledRect.width(), scaledRect.height())
+        else:
+            painter.drawRoundedRect(0, 0, scaledRect.width(),
+                    scaledRect.height(), 10, 90, Qt.RelativeSize)
+
+        return image
+
+    def createArrowBackground(self, transform):
+        scaledRect = transform.mapRect(QRect(0, 0,
+                self.logicalSize.width(), self.logicalSize.height()))
+
+        image = QImage(scaledRect.width(), scaledRect.height(),
+                QImage.Format_ARGB32_Premultiplied)
+        image.fill(QColor(0, 0, 0, 0).rgba())
+        painter = QPainter(image)
+        painter.setRenderHint(QPainter.SmoothPixmapTransform)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.setPen(Qt.NoPen)
+
+        if Colors.useEightBitPalette:
+            painter.setPen(QColor(120, 120, 120))
+            if self.pressed:
+                painter.setBrush(QColor(60, 60, 60))
+            elif self.highlighted:
+                painter.setBrush(QColor(100, 100, 100))
+            else:
+                painter.setBrush(QColor(80, 80, 80))
+        else:
+            outlinebrush = QLinearGradient(0, 0, 0, scaledRect.height())
+            brush = QLinearGradient(0, 0, 0, scaledRect.height())
+
+            brush.setSpread(QLinearGradient.PadSpread)
+            highlight = QColor(255, 255, 255, 70)
+            shadow = QColor(0, 0, 0, 70)
+            sunken = QColor(220, 220, 220, 30)
+            normal1 = QColor(200, 170, 160, 50)
+            normal2 = QColor(50, 10, 0, 50)
+
+            if self.pressed:
+                outlinebrush.setColorAt(0, shadow)
+                outlinebrush.setColorAt(1, highlight)
+                brush.setColorAt(0, sunken)
+                painter.setPen(Qt.NoPen)
+            else:
+                outlinebrush.setColorAt(1, shadow)
+                outlinebrush.setColorAt(0, highlight)
+                brush.setColorAt(0, normal1)
+                if not self.highlighted:
+                    brush.setColorAt(1, normal2)
+                painter.setPen(QPen(outlinebrush, 1))
+
+            painter.setBrush(brush);
+
+        painter.drawRect(0, 0, scaledRect.width(), scaledRect.height())
+
+        xOff = scaledRect.width() / 2
+        yOff = scaledRect.height() / 2
+        sizex = 3.0 * transform.m11()
+        sizey = 1.5 * transform.m22()
+        if self.type == TextButton.UP:
+            sizey *= -1
+        path = QPainterPath()
+        path.moveTo(xOff, yOff + (5 * sizey))
+        path.lineTo(xOff - (4 * sizex), yOff - (3 * sizey))
+        path.lineTo(xOff + (4 * sizex), yOff - (3 * sizey))
+        path.lineTo(xOff, yOff + (5 * sizey))
+        painter.drawPath(path)
+
+        return image
+
+
+class TextButton(DemoItem):
+    BUTTON_WIDTH = 180
+    BUTTON_HEIGHT = 19
+
+    LEFT, RIGHT = range(2)
+
+    SIDEBAR, PANEL, UP, DOWN = range(4)
+
+    ON, OFF, HIGHLIGHT, DISABLED = range(4)
+
+    def __init__(self, text, align=LEFT, userCode=0, parent=None, type=SIDEBAR):
+        super(TextButton, self).__init__(parent)
+
+        # Prevent a circular import.
+        from menumanager import MenuManager
+        self._menu_manager = MenuManager.instance()
+
+        self.menuString = text
+        self.buttonLabel = text
+        self.alignment = align
+        self.buttonType = type
+        self.userCode = userCode
+        self.scanAnim = None
+        self.bgOn = None
+        self.bgOff = None
+        self.bgHighlight = None
+        self.bgDisabled = None
+        self.state = TextButton.OFF
+
+        self.setAcceptHoverEvents(True)
+        self.setCursor(Qt.PointingHandCursor)
+
+        # Calculate the button size.
+        if type in (TextButton.SIDEBAR, TextButton.PANEL):
+            self.logicalSize = QSize(TextButton.BUTTON_WIDTH, TextButton.BUTTON_HEIGHT)
+        else:
+            self.logicalSize = QSize(int((TextButton.BUTTON_WIDTH / 2.0) - 5), int(TextButton.BUTTON_HEIGHT * 1.5))
+
+        self._prepared = False
+
+    def setMenuString(self, menu):
+        self.menuString = menu
+
+    def prepare(self):
+        if not self._prepared:
+            self.setupHoverText()
+            self.setupScanItem()
+            self.setupButtonBg()
+            self._prepared = True
+
+    def boundingRect(self):
+        return QRectF(0, 0, self.logicalSize.width(),
+                self.logicalSize.height())
+
+    def setupHoverText(self):
+        if not self.buttonLabel:
+            return
+
+        textItem = DemoTextItem(self.buttonLabel, Colors.buttonFont(),
+                Colors.buttonText, -1, self)
+        textItem.setZValue(self.zValue() + 2)
+        textItem.setPos(16, 0)
+
+    def setupScanItem(self):
+        if Colors.useButtonBalls:
+            scanItem = ScanItem(self)
+            scanItem.setZValue(self.zValue() + 1)
+
+            self.scanAnim = DemoItemAnimation(scanItem)
+
+            x = 1.0
+            y = 1.5
+            stop = TextButton.BUTTON_WIDTH - scanItem.boundingRect().width() - x
+            if self.alignment == TextButton.LEFT:
+                self.scanAnim.setDuration(2500)
+                self.scanAnim.setKeyValueAt(0.0, QPointF(x, y))
+                self.scanAnim.setKeyValueAt(0.5, QPointF(x, y))
+                self.scanAnim.setKeyValueAt(0.7, QPointF(stop, y))
+                self.scanAnim.setKeyValueAt(1.0, QPointF(x, y))
+                scanItem.setPos(QPointF(x, y))
+            else:
+                self.scanAnim.setKeyValueAt(0.0, QPointF(stop, y))
+                self.scanAnim.setKeyValueAt(0.5, QPointF(x, y))
+                self.scanAnim.setKeyValueAt(1.0, QPointF(stop, y))
+                scanItem.setPos(QPointF(stop, y))
+
+    def setState(self, state):
+        self.state = state
+        self.bgOn.setRecursiveVisible(state == TextButton.ON)
+        self.bgOff.setRecursiveVisible(state == TextButton.OFF)
+        self.bgHighlight.setRecursiveVisible(state == TextButton.HIGHLIGHT)
+        self.bgDisabled.setRecursiveVisible(state == TextButton.DISABLED)
+        if state == TextButton.DISABLED:
+            self.setCursor(Qt.ArrowCursor)
+        else:
+            self.setCursor(Qt.PointingHandCursor)
+
+    def setupButtonBg(self):
+        self.bgOn = ButtonBackground(self.buttonType, True, True,
+                self.logicalSize, self)
+        self.bgOff = ButtonBackground(self.buttonType, False, False,
+                self.logicalSize, self)
+        self.bgHighlight = ButtonBackground(self.buttonType, True, False,
+                self.logicalSize, self)
+        self.bgDisabled = ButtonBackground(self.buttonType, True, True,
+                self.logicalSize, self)
+        self.setState(TextButton.OFF)
+
+    def hoverEnterEvent(self, event):
+        if not self.isEnabled() or self.state == TextButton.DISABLED:
+            return
+
+        if self.state == TextButton.OFF:
+            self.setState(TextButton.HIGHLIGHT)
+
+            if Colors.noAnimations and Colors.useButtonBalls:
+                # Wait a bit in the beginning to enhance the effect.  We have
+                # to do this here so that the adaption can be dynamic.
+                self.scanAnim.setDuration(1000)
+                self.scanAnim.setKeyValueAt(0.2, self.scanAnim.posAt(0))
+
+            if (self._menu_manager.window.fpsMedian > 10 or Colors.noAdapt or
+                    Colors.noTimerUpdate):
+                if Colors.useButtonBalls:
+                    self.scanAnim.play(True, True)
+
+    def hoverLeaveEvent(self, event):
+        if self.state == TextButton.DISABLED:
+            return
+
+        self.setState(TextButton.OFF)
+
+        if Colors.noAnimations and Colors.useButtonBalls:
+            self.scanAnim.stop()
+
+    def mousePressEvent(self, event):
+        if self.state == TextButton.DISABLED:
+            return
+
+        if self.state == TextButton.HIGHLIGHT or self.state == TextButton.OFF:
+            self.setState(TextButton.ON)
+
+    def mouseReleaseEvent(self, event):
+        if self.state == TextButton.ON:
+            self.setState(TextButton.OFF)
+            if self.isEnabled() and self.boundingRect().contains(event.pos()):
+                self._menu_manager.itemSelected(self.userCode, self.menuString)
+
+    def animationStarted(self, _):
+        if self.state == TextButton.DISABLED:
+            return
+
+        self.setState(TextButton.OFF)
diff --git a/examples/qtdemo/xml/examples.xml b/examples/qtdemo/xml/examples.xml
new file mode 100644
index 0000000..24bae89
--- /dev/null
+++ b/examples/qtdemo/xml/examples.xml
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<categories name="PyQt Examples">
+  <category dirname="tutorials/addressbook" name="Address Book Tutorial">
+    <example filename="part1" name="Part 1" image="addressbook-tutorial-part1-screenshot.png" />
+    <example filename="part2" name="Part 2" image="addressbook-tutorial-part2-add-contact.png" />
+    <example filename="part3" name="Part 3" image="addressbook-tutorial-part3-screenshot.png" />
+    <example filename="part4" name="Part 4" image="addressbook-tutorial-screenshot.png" />
+    <example filename="part5" name="Part 5" image="addressbook-tutorial-part5-screenshot.png" />
+    <example filename="part6" name="Part 6" image="addressbook-tutorial-part6-screenshot.png" />
+    <example filename="part7" name="Part 7" image="addressbook-tutorial-part7-screenshot.png" />
+  </category>
+  <category dirname="animation" name="Animation Framework">
+    <example filename="animatedtiles" name="Animated Tiles" />
+    <example filename="appchooser" name="Appchooser" />
+    <example filename="easing" name="Easing Curves" />
+    <example filename="moveblocks" name="Moving Blocks" />
+    <example filename="states" name="States" />
+    <example filename="stickman" name="Stickman" />
+  </category>
+  <category dirname="quick" name="Quick">
+    <example filename="animation" name="Animation" />
+    <example filename="canvas" name="Canvas" />
+    <example filename="models/abstractitemmodel" name="Abstract Item Model" />
+    <example filename="models/objectlistmodel" name="Object List Model" />
+    <example filename="models/stringlistmodel" name="String List Model" />
+    <example filename="scenegraph/customgeometry" name="Custom Geometry" />
+  </category>
+  <category dirname="quick/tutorials/extending" name="Quick Tutorial">
+    <example filename="chapter1-basics" name="Basics" />
+    <example filename="chapter2-methods" name="Methods" />
+    <example filename="chapter3-bindings" name="Bindings" />
+    <example filename="chapter4-customPropertyTypes" name="Custom Property Types" />
+    <example filename="chapter5-listproperties" name="List Properties" />
+    <example filename="chapter6-plugins/app" name="Plugins" executable="false" qml="true" />
+  </category>
+  <category dirname="designer" name="Qt Designer">
+    <example filename="calculatorform" name="Calculator Form" />
+    <example filename="plugins" name="Custom Widget Plugins" />
+  </category>
+  <category dirname="desktop" name="Desktop">
+    <example filename="systray" name="System Tray" image="systemtray-example.png"/>
+    <example filename="screenshot" name="Screenshot" />
+  </category>
+  <category dirname="dialogs" name="Dialogs">
+    <example filename="configdialog" name="Configuration Dialog" />
+    <example filename="extension" name="Extension Dialog" />
+    <example filename="findfiles" name="Find Files Dialog" />
+    <example filename="standarddialogs" name="Standard Dialogs" />
+    <example filename="tabdialog" name="Tab Dialog" />
+    <example filename="trivialwizard" name="Trivial Wizard" image="trivialwizard-example-introduction.png"/>
+    <example filename="classwizard" name="Class Wizard" />
+  </category>
+  <category dirname="draganddrop" name="Drag and Drop">
+    <example filename="delayedencoding" name="Delayed Encoding" />
+    <example filename="draggableicons" name="Draggable Icons" />
+    <example filename="draggabletext" name="Draggable Text" />
+    <example filename="dropsite" name="Drop Site" />
+    <example filename="fridgemagnets" name="Fridge Magnets" />
+    <example filename="puzzle" name="Puzzle" image="draganddroppuzzle-example.png"/>
+  </category>
+  <category dirname="effects" name="Graphics Effects">
+    <example filename="lighting" name="Lighting and Shadows" />
+  </category>
+  <category dirname="graphicsview" name="Graphics View">
+    <example filename="anchorlayout" name="Anchor Layout" />
+    <example filename="elasticnodes" name="Elastic Nodes" />
+    <example filename="collidingmice" name="Colliding Mice" />
+    <example filename="diagramscene" name="Diagram Scene" />
+    <example filename="dragdroprobot" name="Drag and Drop Robot" />
+    <example filename="embeddeddialogs" name="Embedded Dialogs" />
+    <example filename="padnavigator" name="Pad Navigator Example" />
+  </category>
+  <category dirname="ipc" name="IPC">
+    <example filename="sharedmemory" name="Shared Memory" image="sharedmemory-example_1.png"/>
+    <example filename="localfortuneclient" name="Local Fortune Client" image="localfortuneclient-example.png"/>
+    <example filename="localfortuneserver" name="Local Fortune Server" image="localfortuneserver-example.png"/>
+  </category>
+  <category dirname="itemviews" name="Item Views">
+    <example filename="basicsortfiltermodel" name="Basic Sort/Filter Model" />
+    <example filename="chart" name="Chart" />
+    <example filename="customsortfiltermodel" name="Custom Sort/Filter Model" />
+    <example filename="coloreditorfactory" name="Color Editor Factory" image="coloreditorfactoryimage.png"/>
+    <example filename="combowidgetmapper" name="Combo Widget Mapper" />
+    <example filename="dirview" name="Directory View" />
+    <example filename="fetchmore" name="Fetch More" />
+    <example filename="editabletreemodel" name="Editable Tree Model" />
+    <example filename="pixelator" name="Pixelator" />
+    <example filename="puzzle" name="Puzzle " image="itemviewspuzzle-example.png"/>
+    <example filename="simpledommodel" name="Simple DOM Model" />
+    <example filename="simpletreemodel" name="Simple Tree Model" />
+    <example filename="simplewidgetmapper" name="Simple Widget Mapper" />
+    <example filename="spinboxdelegate" name="Spin Box Delegate" />
+    <example filename="spreadsheet" name="Spreadsheet"/>
+    <example filename="stardelegate" name="Star Delegate" />
+  </category>
+  <category dirname="layouts" name="Layouts">
+    <example filename="basiclayouts" name="Basic Layouts" />
+    <example filename="borderlayout" name="Border Layout" />
+    <example filename="flowlayout" name="Flow Layout" />
+  </category>
+  <category dirname="mainwindows" name="Main Windows">
+    <example filename="application" name="Application" />
+    <example filename="dockwidgets" name="Dock Widgets" />
+    <example filename="mdi" name="MDI" />
+    <example filename="sdi" name="SDI" />
+    <example filename="menus" name="Menus" />
+    <example filename="recentfiles" name="Recent Files" />
+    <example filename="separations" name="Color Separations" />
+  </category>
+  <category dirname="multimedia" name="Multimedia">
+    <example filename="audiodevices" name="Audio Devices" />
+    <example filename="audiooutput" name="Audio Output" />
+  </category>
+  <category dirname="multimediawidgets" name="Multimedia Widgets">
+    <example filename="player" name="Audio and Video Player" />
+    <example filename="camera" name="Camera" />
+    <example filename="videographicsitem" name="Video Graphics Item" />
+    <example filename="videowidget" name="Video Widget" />
+  </category>
+  <category dirname="network" name="Networking">
+    <example filename="blockingfortuneclient" name="Blocking Fortune Client" />
+    <example filename="broadcastreceiver" name="Broadcast Receiver" />
+    <example filename="broadcastsender" name="Broadcast Sender" />
+    <example filename="fortuneclient" name="Fortune Client" />
+    <example filename="fortuneserver" name="Fortune Server" />
+    <example filename="http" changedirectory="false" name="HTTP Client" />
+    <example filename="lightmaps" name="OpenStreetMap"/>
+    <example filename="threadedfortuneserver" name="Threaded Fort. Server" />
+  </category>
+  <category dirname="opengl" name="OpenGL">
+    <example filename="2dpainting" name="2D Painting" />
+    <example filename="grabber" name="Grabber" />
+    <example filename="hellogl" name="Hello GL" />
+    <example filename="openglwindow" name="OpenGL Window" />
+    <example filename="overpainting" name="Overpainting" />
+    <example filename="samplebuffers" name="Sample Buffers" />
+    <example filename="textures" name="Textures" />
+  </category>
+  <category dirname="painting" name="Painting">
+    <example filename="basicdrawing" name="Basic Drawing" />
+    <example filename="concentriccircles" name="Concentric Circles" />
+    <example filename="painterpaths" name="Painter Paths" />
+    <example filename="svgviewer" name="SVG Viewer" />
+    <example filename="transformations" name="Transformations" />
+  </category>
+  <category dirname="richtext" name="Rich Text">
+    <example filename="calendar" name="Calendar" />
+    <example filename="orderform" name="Order Form" />
+    <example filename="syntaxhighlighter" name="Syntax Highlighter" />
+    <example filename="textedit" name="Text Edit" />
+    <example filename="textobject" name="Text Object" />
+  </category>
+  <category dirname="sql" name="SQL">
+    <example filename="cachedtable" name="Cached Table" />
+    <example filename="querymodel" name="Query Model" />
+    <example filename="relationaltablemodel" name="Relational Table Model" />
+    <example filename="tablemodel" name="Table Model" />
+  </category>
+  <category dirname="threads" name="Threading">
+    <example filename="mandelbrot" name="Mandelbrot" />
+  </category>
+  <category dirname="tools" name="Tools">
+    <example filename="codecs" name="Codecs" />
+    <example filename="customcompleter" name="Custom Completer" />
+    <example filename="i18n" name="Internationalization" />
+    <example filename="regexp" name="Regular Expressions" />
+    <example filename="settingseditor" name="Settings Editor" />
+  </category>
+  <category dirname="widgets" name="Widgets">
+    <example filename="analogclock" name="Analog Clock" />
+    <example filename="calculator" name="Calculator " />
+    <example filename="calendarwidget" name="Calendar Widget" />
+    <example filename="charactermap" name="Character Map" />
+    <example filename="codeeditor" name="Code Editor" />
+    <example filename="digitalclock" name="Digital Clock" />
+    <example filename="groupbox" name="Group Box" />
+    <example filename="icons" name="Icons" />
+    <example filename="imageviewer" name="Image Viewer" />
+    <example filename="lineedits" name="Line Edits" />
+    <example filename="movie" name="Movie Player" />
+    <example filename="scribble" name="Scribble" />
+    <example filename="shapedclock" name="Shaped Clock" />
+    <example filename="sliders" name="Sliders" />
+    <example filename="spinboxes" name="Spin Boxes" />
+    <example filename="styles" name="Styles" image="styles-enabledwood.png"/>
+    <example filename="stylesheet" name="Style Sheet" image="stylesheet-coffee-plastique.png"/>
+    <example filename="tetrix" name="Tetrix " />
+    <example filename="tooltips" name="Tool Tips" />
+    <example filename="wiggly" name="Wiggly" />
+    <example filename="windowflags" name="Window Flags" />
+  </category>
+  <category dirname="webkit" name="WebKit">
+    <example filename="formextractor" name="Form Extractor" />
+    <example filename="previewer" name="HTML Previewer" />
+    <example filename="fancybrowser" name="Fancy Browser" />
+    <example filename="googlechat" name="Google Chat" />
+    <example filename="domtraversal" name="Web Element DOM Traversal" />
+    <example filename="simpleselector" name="Web Element Selector" />
+  </category>
+  <category dirname="xmlpatterns" name="XML Patterns">
+    <example filename="schema" name="XML Schema Validation" />
+  </category>
+</categories>
diff --git a/examples/quick/README b/examples/quick/README
new file mode 100644
index 0000000..bccac31
--- /dev/null
+++ b/examples/quick/README
@@ -0,0 +1,22 @@
+PyQt's QtQuick module provides the framework to execute programs written in
+QML.
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/quick/animation/animation.py b/examples/quick/animation/animation.py
new file mode 100644
index 0000000..dd7c548
--- /dev/null
+++ b/examples/quick/animation/animation.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+import os.path
+
+from PyQt5.QtCore import QUrl
+from PyQt5.QtGui import QGuiApplication
+from PyQt5.QtQuick import QQuickView
+
+# Access the shared module.
+sys.path.insert(1,
+        os.path.join(
+                os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
+                'shared'))
+import shared_rc
+
+import animation_rc
+
+
+app = QGuiApplication(sys.argv)
+
+view = QQuickView()
+view.engine().quit.connect(app.quit)
+
+view.setSource(QUrl('qrc:///animation/animation.qml'))
+view.show()
+
+sys.exit(app.exec_())
diff --git a/examples/quick/animation/animation.qml b/examples/quick/animation/animation.qml
new file mode 100644
index 0000000..2bf5a05
--- /dev/null
+++ b/examples/quick/animation/animation.qml
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../shared" as Examples
+
+Item {
+    height: 480
+    width: 320
+    Examples.LauncherList {
+        id: ll
+        anchors.fill: parent
+        Component.onCompleted: {
+            addExample("ColorAnimation", "Interpolates between colors",  Qt.resolvedUrl("basics/color-animation.qml"));
+            addExample("PropertyAnimation", "Interpolates between numbers", Qt.resolvedUrl("basics/property-animation.qml"));
+            addExample("Behaviors", "Animates procedural movement", Qt.resolvedUrl("behaviors/behavior-example.qml"));
+            addExample("Wiggly Text", "Text that wiggles as you drag it", Qt.resolvedUrl("behaviors/wigglytext.qml"));
+            addExample("Tv Tennis", "Paddles that follow a ball", Qt.resolvedUrl("behaviors/tvtennis.qml"));
+            addExample("Easing Curves", "Compare available easing curves", Qt.resolvedUrl("easing/easing.qml"));
+            addExample("States", "Simple states", Qt.resolvedUrl("states/states.qml"));
+            addExample("Transitions", "Simple states with animated transitions", Qt.resolvedUrl("states/transitions.qml"));
+            addExample("PathAnimation", "Animate along a path", Qt.resolvedUrl("pathanimation/pathanimation.qml"));
+            addExample("PathInterpolator", "Interpolates along a path", Qt.resolvedUrl("pathinterpolator/pathinterpolator.qml"));
+        }
+    }
+}
diff --git a/examples/quick/animation/animation.qrc b/examples/quick/animation/animation.qrc
new file mode 100644
index 0000000..d1217ac
--- /dev/null
+++ b/examples/quick/animation/animation.qrc
@@ -0,0 +1,22 @@
+<RCC>
+    <qresource prefix="/animation">
+        <file>animation.qml</file>
+        <file>basics/images/face-smile.png</file>
+        <file>basics/images/moon.png</file>
+        <file>basics/images/shadow.png</file>
+        <file>basics/images/star.png</file>
+        <file>basics/images/sun.png</file>
+        <file>basics/color-animation.qml</file>
+        <file>basics/property-animation.qml</file>
+        <file>behaviors/behavior-example.qml</file>
+        <file>behaviors/SideRect.qml</file>
+        <file>behaviors/tvtennis.qml</file>
+        <file>behaviors/wigglytext.qml</file>
+        <file>easing/easing.qml</file>
+        <file>pathanimation/pathanimation.qml</file>
+        <file>pathinterpolator/pathinterpolator.qml</file>
+        <file>states/qt-logo.png</file>
+        <file>states/states.qml</file>
+        <file>states/transitions.qml</file>
+    </qresource>
+</RCC>
diff --git a/examples/quick/animation/animation_rc.py b/examples/quick/animation/animation_rc.py
new file mode 100644
index 0000000..92a7f17
--- /dev/null
+++ b/examples/quick/animation/animation_rc.py
@@ -0,0 +1,5071 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Mon Jul 22 18:46:29 2013
+#      by: The Resource Compiler for PyQt (Qt v5.1.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x0d\x2b\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x22\x2e\x2e\x2f\x73\x68\x61\x72\x65\x64\x22\x20\
+\x61\x73\x20\x45\x78\x61\x6d\x70\x6c\x65\x73\x0a\x0a\x49\x74\x65\
+\x6d\x20\x7b\x0a\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\
+\x34\x38\x30\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x33\
+\x32\x30\x0a\x20\x20\x20\x20\x45\x78\x61\x6d\x70\x6c\x65\x73\x2e\
+\x4c\x61\x75\x6e\x63\x68\x65\x72\x4c\x69\x73\x74\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x6c\x6c\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\
+\x6c\x6c\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x2e\x6f\x6e\x43\
+\x6f\x6d\x70\x6c\x65\x74\x65\x64\x3a\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x45\x78\x61\x6d\x70\
+\x6c\x65\x28\x22\x43\x6f\x6c\x6f\x72\x41\x6e\x69\x6d\x61\x74\x69\
+\x6f\x6e\x22\x2c\x20\x22\x49\x6e\x74\x65\x72\x70\x6f\x6c\x61\x74\
+\x65\x73\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x63\x6f\x6c\x6f\x72\
+\x73\x22\x2c\x20\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\x64\
+\x55\x72\x6c\x28\x22\x62\x61\x73\x69\x63\x73\x2f\x63\x6f\x6c\x6f\
+\x72\x2d\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x71\x6d\x6c\x22\
+\x29\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x61\x64\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\x22\x50\x72\x6f\x70\
+\x65\x72\x74\x79\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x22\x2c\x20\
+\x22\x49\x6e\x74\x65\x72\x70\x6f\x6c\x61\x74\x65\x73\x20\x62\x65\
+\x74\x77\x65\x65\x6e\x20\x6e\x75\x6d\x62\x65\x72\x73\x22\x2c\x20\
+\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\x64\x55\x72\x6c\x28\x22\
+\x62\x61\x73\x69\x63\x73\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x2d\
+\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x71\x6d\x6c\x22\x29\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\
+\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\x22\x42\x65\x68\x61\x76\x69\
+\x6f\x72\x73\x22\x2c\x20\x22\x41\x6e\x69\x6d\x61\x74\x65\x73\x20\
+\x70\x72\x6f\x63\x65\x64\x75\x72\x61\x6c\x20\x6d\x6f\x76\x65\x6d\
+\x65\x6e\x74\x22\x2c\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\
+\x64\x55\x72\x6c\x28\x22\x62\x65\x68\x61\x76\x69\x6f\x72\x73\x2f\
+\x62\x65\x68\x61\x76\x69\x6f\x72\x2d\x65\x78\x61\x6d\x70\x6c\x65\
+\x2e\x71\x6d\x6c\x22\x29\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x61\x64\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\
+\x22\x57\x69\x67\x67\x6c\x79\x20\x54\x65\x78\x74\x22\x2c\x20\x22\
+\x54\x65\x78\x74\x20\x74\x68\x61\x74\x20\x77\x69\x67\x67\x6c\x65\
+\x73\x20\x61\x73\x20\x79\x6f\x75\x20\x64\x72\x61\x67\x20\x69\x74\
+\x22\x2c\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\x64\x55\x72\
+\x6c\x28\x22\x62\x65\x68\x61\x76\x69\x6f\x72\x73\x2f\x77\x69\x67\
+\x67\x6c\x79\x74\x65\x78\x74\x2e\x71\x6d\x6c\x22\x29\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x45\
+\x78\x61\x6d\x70\x6c\x65\x28\x22\x54\x76\x20\x54\x65\x6e\x6e\x69\
+\x73\x22\x2c\x20\x22\x50\x61\x64\x64\x6c\x65\x73\x20\x74\x68\x61\
+\x74\x20\x66\x6f\x6c\x6c\x6f\x77\x20\x61\x20\x62\x61\x6c\x6c\x22\
+\x2c\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\x64\x55\x72\x6c\
+\x28\x22\x62\x65\x68\x61\x76\x69\x6f\x72\x73\x2f\x74\x76\x74\x65\
+\x6e\x6e\x69\x73\x2e\x71\x6d\x6c\x22\x29\x29\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x45\x78\x61\x6d\
+\x70\x6c\x65\x28\x22\x45\x61\x73\x69\x6e\x67\x20\x43\x75\x72\x76\
+\x65\x73\x22\x2c\x20\x22\x43\x6f\x6d\x70\x61\x72\x65\x20\x61\x76\
+\x61\x69\x6c\x61\x62\x6c\x65\x20\x65\x61\x73\x69\x6e\x67\x20\x63\
+\x75\x72\x76\x65\x73\x22\x2c\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\
+\x76\x65\x64\x55\x72\x6c\x28\x22\x65\x61\x73\x69\x6e\x67\x2f\x65\
+\x61\x73\x69\x6e\x67\x2e\x71\x6d\x6c\x22\x29\x29\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x45\x78\x61\
+\x6d\x70\x6c\x65\x28\x22\x53\x74\x61\x74\x65\x73\x22\x2c\x20\x22\
+\x53\x69\x6d\x70\x6c\x65\x20\x73\x74\x61\x74\x65\x73\x22\x2c\x20\
+\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\x64\x55\x72\x6c\x28\x22\
+\x73\x74\x61\x74\x65\x73\x2f\x73\x74\x61\x74\x65\x73\x2e\x71\x6d\
+\x6c\x22\x29\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x61\x64\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\x22\x54\x72\
+\x61\x6e\x73\x69\x74\x69\x6f\x6e\x73\x22\x2c\x20\x22\x53\x69\x6d\
+\x70\x6c\x65\x20\x73\x74\x61\x74\x65\x73\x20\x77\x69\x74\x68\x20\
+\x61\x6e\x69\x6d\x61\x74\x65\x64\x20\x74\x72\x61\x6e\x73\x69\x74\
+\x69\x6f\x6e\x73\x22\x2c\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\
+\x65\x64\x55\x72\x6c\x28\x22\x73\x74\x61\x74\x65\x73\x2f\x74\x72\
+\x61\x6e\x73\x69\x74\x69\x6f\x6e\x73\x2e\x71\x6d\x6c\x22\x29\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\
+\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\x22\x50\x61\x74\x68\x41\x6e\
+\x69\x6d\x61\x74\x69\x6f\x6e\x22\x2c\x20\x22\x41\x6e\x69\x6d\x61\
+\x74\x65\x20\x61\x6c\x6f\x6e\x67\x20\x61\x20\x70\x61\x74\x68\x22\
+\x2c\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\x64\x55\x72\x6c\
+\x28\x22\x70\x61\x74\x68\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2f\
+\x70\x61\x74\x68\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x71\x6d\
+\x6c\x22\x29\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x61\x64\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\x22\x50\x61\
+\x74\x68\x49\x6e\x74\x65\x72\x70\x6f\x6c\x61\x74\x6f\x72\x22\x2c\
+\x20\x22\x49\x6e\x74\x65\x72\x70\x6f\x6c\x61\x74\x65\x73\x20\x61\
+\x6c\x6f\x6e\x67\x20\x61\x20\x70\x61\x74\x68\x22\x2c\x20\x51\x74\
+\x2e\x72\x65\x73\x6f\x6c\x76\x65\x64\x55\x72\x6c\x28\x22\x70\x61\
+\x74\x68\x69\x6e\x74\x65\x72\x70\x6f\x6c\x61\x74\x6f\x72\x2f\x70\
+\x61\x74\x68\x69\x6e\x74\x65\x72\x70\x6f\x6c\x61\x74\x6f\x72\x2e\
+\x71\x6d\x6c\x22\x29\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x0e\x0c\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x52\x65\
+\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x77\x69\x6e\x64\x6f\x77\x0a\x20\x20\x20\x20\x77\x69\x64\
+\x74\x68\x3a\x20\x33\x32\x30\x0a\x20\x20\x20\x20\x68\x65\x69\x67\
+\x68\x74\x3a\x20\x34\x38\x30\x0a\x0a\x20\x20\x20\x20\x43\x61\x6e\
+\x76\x61\x73\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x63\x61\x6e\x76\x61\x73\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\
+\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x74\x69\x61\x6c\x69\x61\x73\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\
+\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x50\x61\x69\x6e\
+\x74\x3a\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x76\x61\x72\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x3d\x20\x63\
+\x61\x6e\x76\x61\x73\x2e\x67\x65\x74\x43\x6f\x6e\x74\x65\x78\x74\
+\x28\x22\x32\x64\x22\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x63\x6c\x65\x61\x72\
+\x52\x65\x63\x74\x28\x30\x2c\x20\x30\x2c\x20\x77\x69\x64\x74\x68\
+\x2c\x20\x68\x65\x69\x67\x68\x74\x29\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x73\x74\
+\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x20\x3d\x20\x22\x62\x6c\x61\
+\x63\x6b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x6f\x6e\x74\x65\x78\x74\x2e\x70\x61\x74\x68\x20\x3d\x20\x6d\
+\x6f\x74\x69\x6f\x6e\x50\x61\x74\x68\x2e\x70\x61\x74\x68\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\
+\x78\x74\x2e\x73\x74\x72\x6f\x6b\x65\x28\x29\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\
+\x20\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\x20\x20\x20\x20\x50\x61\x74\
+\x68\x49\x6e\x74\x65\x72\x70\x6f\x6c\x61\x74\x6f\x72\x20\x7b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x6d\x6f\x74\x69\
+\x6f\x6e\x50\x61\x74\x68\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x70\x61\x74\x68\x3a\x20\x50\x61\x74\x68\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x61\x72\x74\x58\x3a\
+\x20\x35\x30\x3b\x20\x73\x74\x61\x72\x74\x59\x3a\x20\x35\x30\x0a\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x50\x61\x74\
+\x68\x43\x75\x62\x69\x63\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x78\x3a\x20\x77\x69\x6e\x64\
+\x6f\x77\x2e\x77\x69\x64\x74\x68\x20\x2d\x20\x35\x30\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x79\x3a\
+\x20\x77\x69\x6e\x64\x6f\x77\x2e\x68\x65\x69\x67\x68\x74\x20\x2d\
+\x20\x35\x30\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x31\x58\x3a\x20\
+\x78\x3b\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x31\x59\x3a\x20\x35\x30\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x32\x58\x3a\x20\x35\x30\x3b\x20\
+\x63\x6f\x6e\x74\x72\x6f\x6c\x32\x59\x3a\x20\x79\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x43\x68\x61\x6e\x67\x65\
+\x64\x3a\x20\x63\x61\x6e\x76\x61\x73\x2e\x72\x65\x71\x75\x65\x73\
+\x74\x50\x61\x69\x6e\x74\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x53\x65\x71\x75\
+\x65\x6e\x74\x69\x61\x6c\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\
+\x6f\x6e\x20\x70\x72\x6f\x67\x72\x65\x73\x73\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x75\x6e\x6e\x69\x6e\
+\x67\x3a\x20\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x6c\x6f\x6f\x70\x73\x3a\x20\x2d\x31\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x50\x61\x75\x73\x65\x41\
+\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x64\x75\x72\x61\x74\
+\x69\x6f\x6e\x3a\x20\x31\x30\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\x62\x65\x72\x41\x6e\
+\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x70\x72\
+\x6f\x67\x72\x65\x73\x73\x41\x6e\x69\x6d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x75\x6e\x6e\x69\
+\x6e\x67\x3a\x20\x66\x61\x6c\x73\x65\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x3a\x20\
+\x30\x3b\x20\x74\x6f\x3a\x20\x31\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x75\x72\x61\x74\x69\x6f\
+\x6e\x3a\x20\x32\x30\x30\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x65\x61\x73\x69\x6e\x67\x2e\x74\
+\x79\x70\x65\x3a\x20\x45\x61\x73\x69\x6e\x67\x2e\x49\x6e\x51\x75\
+\x61\x64\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\
+\x0a\x20\x20\x20\x20\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\x0a\x20\x20\
+\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x62\x6f\x78\x0a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x35\x30\
+\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x35\x30\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2e\x77\x69\x64\x74\
+\x68\x3a\x20\x31\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x74\
+\x69\x61\x6c\x69\x61\x73\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\x0a\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x62\x69\x6e\x64\x20\
+\x6f\x75\x72\x20\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73\x20\x74\
+\x6f\x20\x66\x6f\x6c\x6c\x6f\x77\x20\x74\x68\x65\x20\x70\x61\x74\
+\x68\x20\x61\x73\x20\x70\x72\x6f\x67\x72\x65\x73\x73\x20\x63\x68\
+\x61\x6e\x67\x65\x73\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x78\x3a\
+\x20\x6d\x6f\x74\x69\x6f\x6e\x50\x61\x74\x68\x2e\x78\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x79\x3a\x20\x6d\x6f\x74\x69\x6f\x6e\x50\
+\x61\x74\x68\x2e\x79\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x72\x6f\
+\x74\x61\x74\x69\x6f\x6e\x3a\x20\x6d\x6f\x74\x69\x6f\x6e\x50\x61\
+\x74\x68\x2e\x61\x6e\x67\x6c\x65\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x54\x72\x61\x6e\
+\x73\x6c\x61\x74\x65\x20\x7b\x20\x78\x3a\x20\x2d\x62\x6f\x78\x2e\
+\x77\x69\x64\x74\x68\x2f\x32\x3b\x20\x79\x3a\x20\x2d\x62\x6f\x78\
+\x2e\x68\x65\x69\x67\x68\x74\x2f\x32\x20\x7d\x0a\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\
+\x63\x65\x6e\x74\x65\x72\x49\x6e\x3a\x20\x70\x61\x72\x65\x6e\x74\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\x65\x78\
+\x74\x3a\x20\x22\x42\x6f\x78\x22\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x10\x5b\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x49\x74\
+\x65\x6d\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\x3a\x20\x77\x69\x6e\
+\x64\x6f\x77\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x33\
+\x32\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x34\x38\x30\x0a\
+\x0a\x20\x20\x20\x20\x2f\x2f\x20\x4c\x65\x74\x27\x73\x20\x64\x72\
+\x61\x77\x20\x74\x68\x65\x20\x73\x6b\x79\x2e\x2e\x2e\x0a\x20\x20\
+\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x20\x7b\x20\
+\x6c\x65\x66\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x6c\x65\x66\
+\x74\x3b\x20\x74\x6f\x70\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x74\
+\x6f\x70\x3b\x20\x72\x69\x67\x68\x74\x3a\x20\x70\x61\x72\x65\x6e\
+\x74\x2e\x72\x69\x67\x68\x74\x3b\x20\x62\x6f\x74\x74\x6f\x6d\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\
+\x43\x65\x6e\x74\x65\x72\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x3a\x20\x47\x72\x61\x64\x69\
+\x65\x6e\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x47\x72\x61\x64\x69\x65\x6e\x74\x53\x74\x6f\x70\x20\x7b\
+\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x30\x2e\x30\x3b\x20\
+\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x44\x65\x65\x70\x53\x6b\x79\x42\
+\x6c\x75\x65\x22\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x47\x72\x61\x64\x69\x65\x6e\x74\x53\x74\x6f\x70\x20\
+\x7b\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x31\x2e\x30\x3b\
+\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x4c\x69\x67\x68\x74\x53\x6b\
+\x79\x42\x6c\x75\x65\x22\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x2f\x2f\
+\x20\x2e\x2e\x2e\x61\x6e\x64\x20\x74\x68\x65\x20\x67\x72\x6f\x75\
+\x6e\x64\x2e\x0a\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\
+\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\
+\x6f\x72\x73\x20\x7b\x20\x6c\x65\x66\x74\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x2e\x6c\x65\x66\x74\x3b\x20\x74\x6f\x70\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\
+\x74\x65\x72\x3b\x20\x72\x69\x67\x68\x74\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x2e\x72\x69\x67\x68\x74\x3b\x20\x62\x6f\x74\x74\x6f\x6d\
+\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x62\x6f\x74\x74\x6f\x6d\x20\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\
+\x6e\x74\x3a\x20\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x47\x72\x61\x64\x69\
+\x65\x6e\x74\x53\x74\x6f\x70\x20\x7b\x20\x70\x6f\x73\x69\x74\x69\
+\x6f\x6e\x3a\x20\x30\x2e\x30\x3b\x20\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x22\x46\x6f\x72\x65\x73\x74\x47\x72\x65\x65\x6e\x22\x20\x7d\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x47\x72\x61\x64\
+\x69\x65\x6e\x74\x53\x74\x6f\x70\x20\x7b\x20\x70\x6f\x73\x69\x74\
+\x69\x6f\x6e\x3a\x20\x31\x2e\x30\x3b\x20\x63\x6f\x6c\x6f\x72\x3a\
+\x20\x22\x44\x61\x72\x6b\x47\x72\x65\x65\x6e\x22\x20\x7d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\
+\x20\x20\x20\x20\x2f\x2f\x20\x54\x68\x65\x20\x73\x68\x61\x64\x6f\
+\x77\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x73\x6d\x69\x6c\x65\x79\
+\x20\x66\x61\x63\x65\x0a\x20\x20\x20\x20\x49\x6d\x61\x67\x65\x20\
+\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\
+\x73\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\
+\x65\x72\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\x7a\
+\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x79\x3a\x20\x73\x6d\x69\x6c\x65\x79\x2e\x6d\x69\
+\x6e\x48\x65\x69\x67\x68\x74\x20\x2b\x20\x35\x38\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x73\x6f\x75\x72\x63\x65\x3a\x20\x22\x69\x6d\
+\x61\x67\x65\x73\x2f\x73\x68\x61\x64\x6f\x77\x2e\x70\x6e\x67\x22\
+\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x54\x68\x65\
+\x20\x73\x63\x61\x6c\x65\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\
+\x64\x65\x70\x65\x6e\x64\x73\x20\x6f\x6e\x20\x74\x68\x65\x20\x79\
+\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x73\x6d\x69\x6c\x65\x79\x20\x66\x61\x63\x65\x2e\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x73\x63\x61\x6c\x65\x3a\x20\x73\x6d\x69\
+\x6c\x65\x79\x2e\x79\x20\x2a\x20\x30\x2e\x35\x20\x2f\x20\x28\x73\
+\x6d\x69\x6c\x65\x79\x2e\x6d\x69\x6e\x48\x65\x69\x67\x68\x74\x20\
+\x2d\x20\x73\x6d\x69\x6c\x65\x79\x2e\x6d\x61\x78\x48\x65\x69\x67\
+\x68\x74\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x49\
+\x6d\x61\x67\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\
+\x64\x3a\x20\x73\x6d\x69\x6c\x65\x79\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x6e\x74\x20\x6d\
+\x61\x78\x48\x65\x69\x67\x68\x74\x3a\x20\x77\x69\x6e\x64\x6f\x77\
+\x2e\x68\x65\x69\x67\x68\x74\x20\x2f\x20\x33\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x6e\x74\
+\x20\x6d\x69\x6e\x48\x65\x69\x67\x68\x74\x3a\x20\x32\x20\x2a\x20\
+\x77\x69\x6e\x64\x6f\x77\x2e\x68\x65\x69\x67\x68\x74\x20\x2f\x20\
+\x33\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\
+\x72\x73\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\
+\x74\x65\x72\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\
+\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x79\x3a\x20\x6d\x69\x6e\x48\x65\x69\x67\x68\
+\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x75\x72\x63\x65\
+\x3a\x20\x22\x69\x6d\x61\x67\x65\x73\x2f\x66\x61\x63\x65\x2d\x73\
+\x6d\x69\x6c\x65\x2e\x70\x6e\x67\x22\x0a\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x2f\x2f\x20\x41\x6e\x69\x6d\x61\x74\x65\x20\x74\x68\
+\x65\x20\x79\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x2e\x20\x53\x65\
+\x74\x74\x69\x6e\x67\x20\x6c\x6f\x6f\x70\x73\x20\x74\x6f\x20\x41\
+\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\x6e\x66\x69\x6e\x69\x74\
+\x65\x20\x6d\x61\x6b\x65\x73\x20\x74\x68\x65\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x2f\x2f\x20\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\
+\x20\x72\x65\x70\x65\x61\x74\x20\x69\x6e\x64\x65\x66\x69\x6e\x69\
+\x74\x65\x6c\x79\x2c\x20\x6f\x74\x68\x65\x72\x77\x69\x73\x65\x20\
+\x69\x74\x20\x77\x6f\x75\x6c\x64\x20\x6f\x6e\x6c\x79\x20\x72\x75\
+\x6e\x20\x6f\x6e\x63\x65\x2e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x53\x65\x71\x75\x65\x6e\x74\x69\x61\x6c\x41\x6e\x69\x6d\x61\x74\
+\x69\x6f\x6e\x20\x6f\x6e\x20\x79\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x6c\x6f\x6f\x70\x73\x3a\x20\x41\x6e\
+\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\x6e\x66\x69\x6e\x69\x74\x65\
+\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\
+\x20\x4d\x6f\x76\x65\x20\x66\x72\x6f\x6d\x20\x6d\x69\x6e\x48\x65\
+\x69\x67\x68\x74\x20\x74\x6f\x20\x6d\x61\x78\x48\x65\x69\x67\x68\
+\x74\x20\x69\x6e\x20\x33\x30\x30\x6d\x73\x2c\x20\x75\x73\x69\x6e\
+\x67\x20\x74\x68\x65\x20\x4f\x75\x74\x45\x78\x70\x6f\x20\x65\x61\
+\x73\x69\x6e\x67\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\x62\x65\x72\
+\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\
+\x3a\x20\x73\x6d\x69\x6c\x65\x79\x2e\x6d\x69\x6e\x48\x65\x69\x67\
+\x68\x74\x3b\x20\x74\x6f\x3a\x20\x73\x6d\x69\x6c\x65\x79\x2e\x6d\
+\x61\x78\x48\x65\x69\x67\x68\x74\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x65\x61\x73\x69\x6e\x67\x2e\
+\x74\x79\x70\x65\x3a\x20\x45\x61\x73\x69\x6e\x67\x2e\x4f\x75\x74\
+\x45\x78\x70\x6f\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\
+\x33\x30\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2f\
+\x2f\x20\x54\x68\x65\x6e\x20\x6d\x6f\x76\x65\x20\x62\x61\x63\x6b\
+\x20\x74\x6f\x20\x6d\x69\x6e\x48\x65\x69\x67\x68\x74\x20\x69\x6e\
+\x20\x31\x20\x73\x65\x63\x6f\x6e\x64\x2c\x20\x75\x73\x69\x6e\x67\
+\x20\x74\x68\x65\x20\x4f\x75\x74\x42\x6f\x75\x6e\x63\x65\x20\x65\
+\x61\x73\x69\x6e\x67\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\x62\x65\
+\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x72\x6f\
+\x6d\x3a\x20\x73\x6d\x69\x6c\x65\x79\x2e\x6d\x61\x78\x48\x65\x69\
+\x67\x68\x74\x3b\x20\x74\x6f\x3a\x20\x73\x6d\x69\x6c\x65\x79\x2e\
+\x6d\x69\x6e\x48\x65\x69\x67\x68\x74\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x65\x61\x73\x69\x6e\x67\
+\x2e\x74\x79\x70\x65\x3a\x20\x45\x61\x73\x69\x6e\x67\x2e\x4f\x75\
+\x74\x42\x6f\x75\x6e\x63\x65\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\
+\x6e\x3a\x20\x31\x30\x30\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x2f\x2f\x20\x54\x68\x65\x6e\x20\x70\x61\x75\x73\x65\
+\x20\x66\x6f\x72\x20\x35\x30\x30\x6d\x73\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x50\x61\x75\x73\x65\x41\x6e\x69\x6d\
+\x61\x74\x69\x6f\x6e\x20\x7b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\
+\x3a\x20\x35\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x21\x20\x5b\x30\
+\x5d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x13\x5d\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x51\x74\x51\x75\x69\x63\x6b\x2e\x50\x61\x72\x74\
+\x69\x63\x6c\x65\x73\x20\x32\x2e\x30\x0a\x0a\x49\x74\x65\x6d\x20\
+\x7b\x0a\x20\x20\x20\x20\x69\x64\x3a\x20\x77\x69\x6e\x64\x6f\x77\
+\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x33\x32\x30\x3b\
+\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x34\x38\x30\x0a\x0a\x20\x20\
+\x20\x20\x2f\x2f\x20\x4c\x65\x74\x27\x73\x20\x64\x72\x61\x77\x20\
+\x74\x68\x65\x20\x73\x6b\x79\x2e\x2e\x2e\x0a\x20\x20\x20\x20\x52\
+\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x20\x7b\x20\x6c\x65\x66\
+\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x6c\x65\x66\x74\x3b\x20\
+\x74\x6f\x70\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x74\x6f\x70\x3b\
+\x20\x72\x69\x67\x68\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x72\
+\x69\x67\x68\x74\x3b\x20\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\
+\x74\x65\x72\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\
+\x21\x20\x5b\x30\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x67\x72\
+\x61\x64\x69\x65\x6e\x74\x3a\x20\x47\x72\x61\x64\x69\x65\x6e\x74\
+\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x47\
+\x72\x61\x64\x69\x65\x6e\x74\x53\x74\x6f\x70\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x6f\
+\x73\x69\x74\x69\x6f\x6e\x3a\x20\x30\x2e\x30\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x65\x71\x75\
+\x65\x6e\x74\x69\x61\x6c\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\
+\x6f\x6e\x20\x63\x6f\x6c\x6f\x72\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6c\
+\x6f\x6f\x70\x73\x3a\x20\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\
+\x49\x6e\x66\x69\x6e\x69\x74\x65\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x43\x6f\x6c\
+\x6f\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x66\x72\
+\x6f\x6d\x3a\x20\x22\x44\x65\x65\x70\x53\x6b\x79\x42\x6c\x75\x65\
+\x22\x3b\x20\x74\x6f\x3a\x20\x22\x23\x30\x45\x31\x35\x33\x33\x22\
+\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\x35\x30\x30\x30\
+\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x43\x6f\x6c\x6f\x72\x41\x6e\x69\x6d\
+\x61\x74\x69\x6f\x6e\x20\x7b\x20\x66\x72\x6f\x6d\x3a\x20\x22\x23\
+\x30\x45\x31\x35\x33\x33\x22\x3b\x20\x74\x6f\x3a\x20\x22\x44\x65\
+\x65\x70\x53\x6b\x79\x42\x6c\x75\x65\x22\x3b\x20\x64\x75\x72\x61\
+\x74\x69\x6f\x6e\x3a\x20\x35\x30\x30\x30\x20\x7d\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x47\x72\x61\x64\x69\x65\x6e\
+\x74\x53\x74\x6f\x70\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\
+\x3a\x20\x31\x2e\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x53\x65\x71\x75\x65\x6e\x74\x69\x61\x6c\
+\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x6f\x6e\x20\x63\x6f\x6c\
+\x6f\x72\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x6f\x6f\x70\x73\x3a\x20\
+\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\x6e\x66\x69\x6e\x69\
+\x74\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x43\x6f\x6c\x6f\x72\x41\x6e\x69\x6d\
+\x61\x74\x69\x6f\x6e\x20\x7b\x20\x66\x72\x6f\x6d\x3a\x20\x22\x53\
+\x6b\x79\x42\x6c\x75\x65\x22\x3b\x20\x74\x6f\x3a\x20\x22\x23\x34\
+\x33\x37\x32\x38\x34\x22\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\
+\x3a\x20\x35\x30\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x43\x6f\x6c\
+\x6f\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x66\x72\
+\x6f\x6d\x3a\x20\x22\x23\x34\x33\x37\x32\x38\x34\x22\x3b\x20\x74\
+\x6f\x3a\x20\x22\x53\x6b\x79\x42\x6c\x75\x65\x22\x3b\x20\x64\x75\
+\x72\x61\x74\x69\x6f\x6e\x3a\x20\x35\x30\x30\x30\x20\x7d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\
+\x20\x20\x20\x20\x2f\x2f\x20\x74\x68\x65\x20\x73\x75\x6e\x2c\x20\
+\x6d\x6f\x6f\x6e\x2c\x20\x61\x6e\x64\x20\x73\x74\x61\x72\x73\x0a\
+\x20\x20\x20\x20\x49\x74\x65\x6d\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x70\x61\x72\x65\x6e\x74\
+\x2e\x77\x69\x64\x74\x68\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\
+\x32\x20\x2a\x20\x70\x61\x72\x65\x6e\x74\x2e\x68\x65\x69\x67\x68\
+\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\x62\x65\x72\
+\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x6f\x6e\x20\x72\x6f\x74\
+\x61\x74\x69\x6f\x6e\x20\x7b\x20\x66\x72\x6f\x6d\x3a\x20\x30\x3b\
+\x20\x74\x6f\x3a\x20\x33\x36\x30\x3b\x20\x64\x75\x72\x61\x74\x69\
+\x6f\x6e\x3a\x20\x31\x30\x30\x30\x30\x3b\x20\x6c\x6f\x6f\x70\x73\
+\x3a\x20\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\x6e\x66\x69\
+\x6e\x69\x74\x65\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x49\
+\x6d\x61\x67\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x73\x6f\x75\x72\x63\x65\x3a\x20\x22\x69\x6d\x61\x67\
+\x65\x73\x2f\x73\x75\x6e\x2e\x70\x6e\x67\x22\x3b\x20\x79\x3a\x20\
+\x31\x30\x3b\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x68\x6f\x72\x69\
+\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\
+\x65\x6e\x74\x65\x72\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x72\x6f\x74\x61\x74\x69\x6f\x6e\x3a\x20\x2d\x33\x20\x2a\
+\x20\x70\x61\x72\x65\x6e\x74\x2e\x72\x6f\x74\x61\x74\x69\x6f\x6e\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x49\x6d\x61\x67\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x75\x72\x63\x65\x3a\x20\x22\
+\x69\x6d\x61\x67\x65\x73\x2f\x6d\x6f\x6f\x6e\x2e\x70\x6e\x67\x22\
+\x3b\x20\x79\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x68\x65\x69\x67\
+\x68\x74\x20\x2d\x20\x37\x34\x3b\x20\x61\x6e\x63\x68\x6f\x72\x73\
+\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\
+\x72\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\
+\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x72\x6f\x74\x61\x74\x69\x6f\x6e\x3a\
+\x20\x2d\x70\x61\x72\x65\x6e\x74\x2e\x72\x6f\x74\x61\x74\x69\x6f\
+\x6e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x50\x61\x72\x74\x69\x63\x6c\x65\x53\x79\x73\x74\
+\x65\x6d\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x69\x64\x3a\x20\x70\x61\x72\x74\x69\x63\x6c\x65\x73\x79\x73\
+\x74\x65\x6d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x78\x3a\x20\x30\x3b\x20\x79\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\
+\x68\x65\x69\x67\x68\x74\x2f\x32\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x2e\x77\x69\x64\x74\x68\x3b\x20\x68\x65\x69\x67\x68\x74\
+\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x68\x65\x69\x67\x68\x74\x2f\
+\x32\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x49\x6d\
+\x61\x67\x65\x50\x61\x72\x74\x69\x63\x6c\x65\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\
+\x75\x72\x63\x65\x3a\x20\x22\x69\x6d\x61\x67\x65\x73\x2f\x73\x74\
+\x61\x72\x2e\x70\x6e\x67\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x67\x72\x6f\x75\x70\x73\x3a\x20\
+\x5b\x22\x73\x74\x61\x72\x22\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x22\x23\x30\x30\x33\x33\x33\x33\x33\x33\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x65\x71\x75\
+\x65\x6e\x74\x69\x61\x6c\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\
+\x6f\x6e\x20\x6f\x70\x61\x63\x69\x74\x79\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x6c\x6f\x6f\x70\x73\x3a\x20\x41\x6e\x69\x6d\x61\x74\x69\x6f\
+\x6e\x2e\x49\x6e\x66\x69\x6e\x69\x74\x65\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x4e\
+\x75\x6d\x62\x65\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\
+\x20\x66\x72\x6f\x6d\x3a\x20\x30\x3b\x20\x74\x6f\x3a\x20\x31\x3b\
+\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\x35\x30\x30\x30\x20\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\x62\x65\x72\x41\x6e\x69\x6d\
+\x61\x74\x69\x6f\x6e\x20\x7b\x20\x66\x72\x6f\x6d\x3a\x20\x31\x3b\
+\x20\x74\x6f\x3a\x20\x30\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\
+\x3a\x20\x35\x30\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x45\x6d\x69\x74\x74\x65\x72\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x67\
+\x72\x6f\x75\x70\x3a\x20\x22\x73\x74\x61\x72\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\
+\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\x65\x6e\
+\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x65\x6d\x69\x74\x52\x61\x74\x65\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x2e\x77\x69\x64\x74\x68\x20\x2f\x20\x35\x30\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x69\
+\x66\x65\x53\x70\x61\x6e\x3a\x20\x35\x30\x30\x30\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\
+\x2f\x2f\x20\x2e\x2e\x2e\x61\x6e\x64\x20\x74\x68\x65\x20\x67\x72\
+\x6f\x75\x6e\x64\x2e\x0a\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\
+\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x63\x68\x6f\x72\x73\x20\x7b\x20\x6c\x65\x66\x74\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x6c\x65\x66\x74\x3b\x20\x74\x6f\x70\x3a\x20\
+\x70\x61\x72\x65\x6e\x74\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\
+\x65\x6e\x74\x65\x72\x3b\x20\x72\x69\x67\x68\x74\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x72\x69\x67\x68\x74\x3b\x20\x62\x6f\x74\x74\
+\x6f\x6d\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x62\x6f\x74\x74\x6f\
+\x6d\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\
+\x69\x65\x6e\x74\x3a\x20\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x47\x72\x61\
+\x64\x69\x65\x6e\x74\x53\x74\x6f\x70\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x6f\x73\x69\
+\x74\x69\x6f\x6e\x3a\x20\x30\x2e\x30\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x65\x71\x75\x65\x6e\
+\x74\x69\x61\x6c\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x6f\x6e\
+\x20\x63\x6f\x6c\x6f\x72\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x6f\x6f\
+\x70\x73\x3a\x20\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\x6e\
+\x66\x69\x6e\x69\x74\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x43\x6f\x6c\x6f\x72\
+\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x66\x72\x6f\x6d\
+\x3a\x20\x22\x46\x6f\x72\x65\x73\x74\x47\x72\x65\x65\x6e\x22\x3b\
+\x20\x74\x6f\x3a\x20\x22\x23\x30\x30\x31\x36\x30\x30\x22\x3b\x20\
+\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\x35\x30\x30\x30\x20\x7d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x43\x6f\x6c\x6f\x72\x41\x6e\x69\x6d\x61\x74\
+\x69\x6f\x6e\x20\x7b\x20\x66\x72\x6f\x6d\x3a\x20\x22\x23\x30\x30\
+\x31\x36\x30\x30\x22\x3b\x20\x74\x6f\x3a\x20\x22\x46\x6f\x72\x65\
+\x73\x74\x47\x72\x65\x65\x6e\x22\x3b\x20\x64\x75\x72\x61\x74\x69\
+\x6f\x6e\x3a\x20\x35\x30\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x47\x72\x61\x64\x69\x65\x6e\x74\x53\
+\x74\x6f\x70\x20\x7b\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\
+\x31\x2e\x30\x3b\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x44\x61\x72\
+\x6b\x47\x72\x65\x65\x6e\x22\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x01\xa9\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x2c\x00\x00\x00\x06\x08\x04\x00\x00\x00\x12\xba\xb4\xda\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0d\xd6\x00\x00\x0d\xd6\x01\x90\x6f\x79\x9c\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x0a\x15\x02\x2e\x16\x28\
+\xc5\x30\x58\x00\x00\x01\x2d\x49\x44\x41\x54\x28\xcf\x55\x92\xcd\
+\x4a\x42\x01\x10\x85\xbf\x73\xed\x56\x22\xa5\x29\x45\x11\x85\x44\
+\x50\xed\xb4\x1e\xa0\x75\xaf\xd1\x0b\xf4\x06\x81\xd0\xb6\xa7\x69\
+\xd1\xb6\x4d\xcb\xca\x5d\x10\x11\x81\xf4\x03\x59\x61\xa5\xe6\x4d\
+\xef\x69\x71\xaf\x8a\x33\x8b\xe1\x0c\x73\xce\x30\x87\x11\xc0\x0e\
+\xb3\xc1\x4d\x0c\x00\xd5\x12\x45\xe7\xc9\x92\xd1\x92\x4b\x2c\x30\
+\x47\x4e\x59\x42\x87\x0a\x80\x98\x3f\x47\x74\xd5\xf6\x37\x1f\x6a\
+\xd2\x24\x76\x87\x16\xef\xf5\xcf\x84\x5f\x09\xd6\xe2\x33\x6a\x08\
+\x76\xb8\x05\xaa\xeb\x1c\x78\x95\x2d\x36\x55\xa6\x08\x60\xc6\xa1\
+\x11\xd6\x44\x3f\xc1\x7a\xe3\xd1\xf7\xba\xa3\xe1\xf3\xfa\x73\xa2\
+\x28\x80\xbd\xec\xe0\x84\x23\x65\x9c\x0a\x28\x66\x60\x24\x27\x8a\
+\x80\xd2\x6a\x84\x53\x65\x19\x6c\xc1\x94\x35\x5c\xa7\xc8\xa7\x85\
+\xe3\x8b\x7e\x8d\x00\x60\xad\x4f\x83\x27\xff\x8e\xa8\x81\x43\x02\
+\x2c\x13\xe3\x24\x6d\x26\x33\xb6\x6d\x65\x08\x93\xe5\x02\xe8\xf2\
+\xc2\x53\x77\x90\xe2\xc4\x0a\xa8\xec\x6b\xd7\x8b\x2a\xb3\xe1\x65\
+\xad\x30\x3d\xb4\x23\xbd\x62\x84\x3c\x69\x43\x8f\x67\xbf\xe8\x81\
+\x06\xaf\x5c\xdd\x5c\x82\xd8\x1e\x5a\x71\xcd\x61\xd0\x8b\x6f\xd3\
+\xf1\x4a\x81\x79\xe5\xc9\x39\xc4\xcc\x91\x27\x47\x96\x19\x85\x08\
+\x6c\x22\x22\x3a\xb4\x69\xe9\x07\x39\xa2\x4d\x8b\xaf\x7a\x2b\xe1\
+\x8e\xdf\xe0\x1f\x5d\xe3\x8b\x95\xa8\x58\x6d\x6b\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x09\x81\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x08\x04\x00\x00\x00\x00\x60\xb9\x55\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x09\x70\x48\x59\x73\x00\x00\x1b\xaf\x00\x00\x1b\xaf\x01\x5e\x1a\
+\x91\x1c\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd8\x07\x14\x0b\x14\
+\x1b\xf7\x7c\xd9\x62\x00\x00\x00\x02\x62\x4b\x47\x44\x00\xff\x87\
+\x8f\xcc\xbf\x00\x00\x09\x05\x49\x44\x41\x54\x68\xde\xed\xd8\x69\
+\xc8\xa5\xe7\x59\x07\xf0\xdf\xfd\x6c\x67\x7d\xcf\xbb\xce\x64\x99\
+\x4c\xc8\x58\xeb\x92\x8a\x26\xa1\x62\x09\xb5\x35\xd4\x98\x82\xb4\
+\x1f\x04\xad\x52\x42\x2c\xd1\x4a\x70\x0b\x22\x16\x63\xc4\x2f\x6d\
+\x15\x2d\x82\x1f\x84\x8a\xb6\x4a\xd5\x62\x15\xa9\x21\x69\x49\x2d\
+\xd5\x42\x48\x71\xa5\x1a\x13\x0d\x66\x71\x32\x33\xc9\xcc\x64\xde\
+\xfd\xbc\x67\x79\x76\x3f\xcc\x31\x52\x9d\x49\xde\x89\x29\x7e\x99\
+\xeb\xe1\x7c\x79\x0e\xf7\x7d\xfd\x9f\xeb\xfa\xdf\xcb\xff\xcf\xd5\
+\xb8\x1a\x57\xe3\x6a\xfc\x3f\x47\x78\x3d\x83\xda\x8b\xe3\xc2\xd7\
+\xbc\x6a\x5f\xdf\x64\xe1\x0a\x13\x13\xd5\xf1\xb9\xe4\x1f\x7b\xff\
+\xb2\x74\x7a\xe9\xc2\xb0\x88\xd7\xf2\xb7\xee\xbe\x7f\x6f\x50\xa4\
+\x65\x54\xa9\xb4\xda\xf0\xf5\x01\xd0\x12\xc4\xcf\x77\x3e\x79\xed\
+\x8b\xef\x7a\xeb\x3b\x06\xb7\xae\x9e\xb8\xb1\x77\xd4\x48\x61\xe2\
+\xe5\x49\xfd\xcc\xce\x93\x4f\x3c\xb6\xf2\xa5\x1f\x3b\x1f\xe5\x6a\
+\x4d\x78\x63\x01\xb4\x84\x2a\x7e\x62\xf0\x89\xdb\x8e\xdf\x77\xe2\
+\xae\x1b\x46\xb1\x54\x22\x15\x2f\x7e\xb5\x5c\xae\x71\x6e\x3e\x79\
+\xf4\xa9\xdf\x7b\xe0\xf1\x30\x55\x1d\x16\x44\x38\x54\xfa\xe8\x4c\
+\xf7\x57\xbf\xe3\xe8\x2f\xbf\xf9\xae\x61\xd4\x59\x0c\x2b\xb5\x12\
+\x41\x2a\x96\x20\x68\x35\x52\x71\xfb\xf4\xe3\xcf\x7f\xf8\x57\xbe\
+\x62\xa6\x0e\xed\x1b\x00\xa0\x25\xf9\xdc\xea\x43\x3f\xfb\x96\xfb\
+\x97\x06\x7d\x8d\x58\x2b\xd2\xd5\x6a\x05\xd1\x82\x19\x17\x39\x19\
+\xa4\x96\xac\xd9\x6f\xbe\xfc\xfb\x37\x7c\xf8\x07\xcf\x26\xc5\x6b\
+\x33\xe2\x35\xfe\x6f\x43\x93\xfe\xfa\x8d\x27\x7f\xfb\x9b\xbf\xaf\
+\x27\x12\xf4\x0c\xc4\x2a\x41\x25\xb7\x64\x66\xa0\x2f\x57\xa0\x55\
+\x29\x25\xd6\xad\x9a\xf9\xfc\x33\xfb\xf7\xfd\xc6\x57\xba\xf9\x6b\
+\xb5\x22\xbc\x7a\xfa\x2a\xfd\xb9\x6f\xdb\xfb\xd4\xcd\x6f\x69\x0d\
+\x45\x36\x44\xd8\xd4\x88\x55\x22\x43\x24\x46\x52\x85\x42\xa2\x42\
+\x2b\xd3\x15\xa9\xfd\xdd\xee\xf6\x8f\xff\xda\xe7\xb3\xf9\xab\x43\
+\x08\xaf\xfe\xf5\x3f\xff\xad\x27\x3f\x7b\xeb\x89\xc2\x48\xaa\xa7\
+\x2f\xb6\x6f\x86\x46\x2c\xd2\x11\x49\xa4\x56\x64\x0a\x41\xa3\x95\
+\x4b\xa4\x12\x91\xb1\xbf\x9f\x4c\xef\xfd\xd8\xc3\xd9\x3c\x34\x97\
+\xcf\x12\xbd\x4a\xef\xe3\x8f\x1f\x7b\xea\x0f\x6e\x3c\x91\x4b\x34\
+\x2a\x41\xee\x82\x03\xb5\xb9\x46\xad\x54\x2a\xb4\x22\x07\xa6\x22\
+\x8d\xda\x5c\xa1\x35\x71\xa0\x94\x79\xd3\x20\xfc\xce\x2f\xdd\x2e\
+\x7d\x35\x22\x44\x97\x67\xfe\x53\xa3\x87\x3e\x3a\xb8\x25\x53\x98\
+\xa3\xb6\x63\xcf\x4c\xad\x46\xad\x52\xa9\x14\xa8\xe4\xa6\x5a\x53\
+\x07\x6a\x13\x63\xb5\xa9\x5a\xe3\x88\x63\xcb\xe1\xe3\x7f\x71\x4c\
+\xdc\x5e\x71\x05\xc2\x41\xe7\x43\xf7\xf4\xde\x97\x2b\x25\x06\x5a\
+\x95\x4a\xae\x56\x29\xd5\x0b\x00\x13\x53\x07\x2a\xb5\x03\x63\xff\
+\xe1\x05\xbb\x22\x7b\x66\xc6\xe6\x6a\xac\xba\xee\x4d\x0f\x7f\x64\
+\x77\x78\xf9\x4a\x47\x97\x2b\xff\x27\x8f\xfb\x85\x83\x50\x68\x44\
+\x12\x99\x44\xb5\x48\x5b\xab\x95\xaf\x70\xbe\x23\x12\xab\x9d\x93\
+\xab\x5c\xb0\x6b\x2c\xd3\x55\x0b\x5a\x91\x9e\x63\xef\x7b\xe0\x7b\
+\xa5\xed\x15\x55\x20\xec\x75\x1f\xf9\xc9\xce\xb5\x73\x53\xa5\xc8\
+\x1a\x22\xa5\x5c\xb9\x80\x51\x2b\x1c\x31\x72\x54\x6c\x66\x26\xb6\
+\xaf\x51\x29\xcd\xcd\xbd\x24\x95\x69\x04\x73\xb5\xe5\x10\x1e\xd8\
+\x1e\x5d\xae\x06\x97\x7e\x1d\xfd\xc9\xf5\xd9\xdd\x5b\x32\xb1\x33\
+\x1a\x17\xd4\xb6\x35\x6a\x3d\x41\xd0\xc8\x94\x4e\xdb\x56\x88\x05\
+\xb5\xa0\x52\xa8\x34\x4a\x95\x1d\x07\x62\xad\x97\x75\x55\x62\x37\
+\xdd\xfa\xe0\xbb\x2e\x57\x83\xe8\x52\x0d\x28\xb3\x87\x7e\xa8\xb3\
+\x9a\x2b\xc5\x2a\xcf\x38\x6b\x2a\x52\x6b\x95\x1a\x41\xaa\x12\x4b\
+\x44\x9e\xb5\x6b\xc9\xc8\x4c\xa1\x52\x89\x4d\x54\x2a\x73\xbb\xb6\
+\xcc\x6c\xab\x94\x22\xe1\xde\x69\xff\xd2\x4b\x3e\xb9\x54\x03\x76\
+\xfa\xf5\x7b\x27\x22\x91\x58\x50\x39\x27\xb2\x64\xae\xaf\x2f\x51\
+\xcb\x75\xc5\x98\x58\x36\x34\x93\xdb\x95\x08\xe6\x0b\xf6\x4f\xb5\
+\x26\xe6\xd6\x25\x0a\x67\x65\x86\xdf\xfd\x47\xc7\x3f\x38\x56\x1d\
+\xae\x05\xf1\x9f\x1d\xeb\xde\x96\x8b\x16\x4f\x58\x6c\xbc\xdb\x26\
+\xa8\xf5\xac\x18\xe8\x8a\x24\x3a\x2a\x5b\xce\xc8\xd5\x82\x4c\xe1\
+\x82\xb3\x76\x8d\xed\x1b\x3b\x30\x12\x9b\x3a\x63\xd0\x79\xfc\xdd\
+\x4d\xd2\x1e\xa6\x05\x2d\xf1\x63\x6f\x5f\x8e\x57\x16\x15\x88\xb4\
+\x22\x1d\x7d\xb1\x6a\xc1\xed\xd8\xc4\x81\x03\x63\x5f\xf5\xaf\x5e\
+\xf0\x92\xd3\x1a\xa5\xc6\x86\x75\x3d\xec\x78\xd9\x39\x5b\x4a\xc7\
+\x14\x4a\x7b\xa2\x77\x5e\xe8\x5c\xaa\x09\x97\xa8\xc0\x3c\x9d\xde\
+\xd6\xd3\x11\xeb\x4a\x25\x82\xa1\x23\x06\xfa\x2a\xfb\x6a\x43\x19\
+\x82\xc8\x58\xd7\xd0\x11\x43\x4b\xf6\xe5\x56\xbc\x6c\xba\x98\xb2\
+\x10\x99\x38\x2f\x17\xa3\xd2\xbd\xf9\xc5\xc1\xa5\x00\xfc\x6f\x0e\
+\x84\xb3\x59\x7e\x73\x63\xcd\xbe\x7a\x71\xd2\xcf\xec\x18\x62\x5d\
+\x17\x67\x95\x2a\xb1\x46\x6b\xc5\x51\x8d\xae\xb1\xd6\x48\xd0\xd1\
+\x88\x0c\xd5\x2a\xc1\x81\x53\x06\x6e\xf2\x84\x81\xe6\xd8\xc9\xd1\
+\x6d\xe7\x0f\xc7\x81\xa4\x5e\x49\xc4\x6a\x41\x10\x89\xa4\xc6\x4e\
+\x8b\x9c\x57\x6a\x24\x32\xb9\x4a\x23\x59\xe0\x5f\x73\xad\xe3\x36\
+\xf4\x74\x8c\xed\x23\x52\x23\x32\x74\xc1\xb2\x5b\xf5\xf5\xd3\x27\
+\x8e\x1c\xb2\x02\xf3\x24\x1e\x32\x5f\x10\xf0\xe2\x64\xdb\x12\xa5\
+\x75\x89\x5a\x26\x11\xd4\xe8\x2b\xec\x18\xa8\xf5\xad\x6b\xcd\x0d\
+\x24\x5a\xa5\x56\xfb\xca\xd9\x78\xde\xba\x3d\x9c\x5d\x3d\x1c\x00\
+\xe3\xb8\xea\xb7\x72\xab\xf6\x25\x82\x58\xad\xa7\xd1\x51\x68\xec\
+\xca\xad\xd9\x50\x4a\x0d\x70\x56\x6c\x59\x5f\xd0\x58\x53\x58\xb1\
+\xa9\xd6\x58\x31\xd1\x48\x6d\x99\x89\x44\x86\x36\xb3\x43\xee\x03\
+\x49\x93\xcd\x2a\xad\xbe\x89\x46\xb6\x38\xfb\x23\x8d\xcc\x5c\xa3\
+\x23\x13\x49\xdd\x60\x2a\x93\x6a\xb5\x52\xb9\xa0\xe3\x5a\xab\x4e\
+\x79\x41\xe5\x66\x73\xbb\xce\xa8\x34\x9e\x75\xd4\xb2\x61\x7e\x48\
+\x00\xd7\x95\xcd\x7e\x6a\xa4\x35\x51\xaa\x24\x0a\x41\x62\xc9\x75\
+\x36\x25\x22\x1d\xec\x2a\x65\x06\xfa\xb6\x65\x5a\xa9\x46\xb0\xa6\
+\xd5\x1a\x4b\x54\x22\x1d\xa5\x80\xcc\x50\xed\xc4\xb6\xf6\x30\x24\
+\x6c\x3b\xa5\x9d\x52\x6a\xc9\xd0\x9a\x8e\x8e\xd1\x62\xb2\xb1\x46\
+\x64\x6a\xa2\x55\x39\xab\x95\xdb\x93\x49\x6d\x18\x89\xc5\x56\x14\
+\x36\x0d\x0d\x44\x12\xad\xae\x56\xd0\x91\x9a\x15\xdf\x79\xe1\x70\
+\x00\x74\xca\xf8\xb9\xd2\x5c\xed\x7a\x03\x3d\xd7\xb9\xd1\x31\xad\
+\xcc\x5c\x26\x93\xca\x0d\xf5\xf4\xd0\x13\xa9\x4c\x4d\xcd\x05\x7d\
+\xbb\x06\x36\xf4\x64\x7a\x56\x0d\x75\xb4\xfa\xae\x91\x89\x4e\x1f\
+\x3d\x38\x64\x05\x06\xe5\xca\x3f\x8c\x1d\x68\xd5\x3a\x96\x24\xba\
+\x52\xcb\x3a\x12\x23\xeb\xfa\xd8\x15\x54\xf6\xcd\xa4\x3a\xfa\xb6\
+\x44\x8b\x0d\x87\x0d\xeb\x82\x53\xb6\xf5\xf5\x2c\x59\xb6\x26\xd6\
+\x3e\x7b\xcd\xf4\x50\x00\x02\xf5\x9d\x8f\x4d\xaa\x8e\x58\x2a\xb5\
+\x62\xcd\x96\xb9\x0a\x1d\x99\xa9\x46\x2a\x48\xd5\x86\x96\x0d\xf4\
+\x05\xab\x12\xcc\x35\xfa\x36\x44\xc6\x72\x53\xb1\x1b\x5c\x8b\x7d\
+\x53\x1e\x5f\xca\x0f\xd9\x02\xcd\x5d\x2f\x66\x5f\xcd\xf5\x0c\x0d\
+\x25\x0e\xbc\x60\x57\xb0\x2c\x35\x33\xd4\x15\x8b\xa4\x86\x8e\x5b\
+\x46\xd7\xaa\x5d\xad\xa0\xc5\x58\xaa\x51\x68\x0d\x1c\x68\xc5\xba\
+\x6a\xf3\xea\x5b\xbe\x10\xca\x70\xc8\x0b\x49\x73\xdd\xa4\xf7\xf0\
+\xbe\x5c\x22\xd1\xd7\x35\x30\xd7\xd8\x51\xaa\x95\x12\x41\x24\xa8\
+\x95\x62\x99\xc6\xbe\x21\x8b\xa5\x3a\xf1\x82\x58\x1f\x13\x95\x7d\
+\x41\x57\x2d\xfb\x9b\x1f\x78\x4e\x73\xe8\x1b\x51\x28\xee\xfc\xf3\
+\x62\xf3\x94\x2d\x73\x89\xcc\x9a\xcc\x81\x48\x5f\x2a\x68\xc4\x12\
+\x89\x48\xdf\xdc\x35\x06\xfa\x46\x12\x41\xae\xd5\xd3\xd3\xba\xc6\
+\x37\x48\xa5\x3a\x56\xf4\x0c\xf5\x3e\xb1\x3e\x39\x34\x80\x40\xfd\
+\xa3\xa7\xfa\x9f\xde\xb7\xb7\x10\x60\x37\x39\xea\x88\x0d\x41\xc7\
+\xaa\x55\x99\xc6\x11\xdf\x68\xd9\x9a\x8e\x65\x43\x1d\x94\xba\x3a\
+\x3a\x26\x62\x89\xca\x8a\x91\x23\x12\x91\xe6\xc9\x0f\x3e\xaa\xbc\
+\xb4\x38\x48\x2e\x2d\x0b\xd2\xf9\xed\xbf\xfb\x85\x1f\x99\x1f\x99\
+\xaa\xd4\x62\x1d\x43\x5d\x2f\x5a\x36\xf6\x76\x54\x46\x12\xb4\x6a\
+\x91\x60\xa6\x92\x0a\x26\x2e\x28\xb4\x82\x9e\xbe\x0d\x53\x5b\xca\
+\xb6\xf3\xd1\xb5\x5d\xf5\x15\x5c\x4a\x03\xf5\x4f\x3c\x7f\xf4\x23\
+\x5b\xc6\x52\x33\x85\xc6\x4c\xe5\x84\x75\x6f\x36\xd5\xb5\x2c\xd6\
+\x9a\x5e\xb4\x44\x34\x5a\xb1\x78\xa1\x98\x6a\xad\x20\xe8\x18\x5e\
+\x5c\x9a\x9f\xfd\xc0\x5f\x46\x45\xb8\x42\x61\xd2\x66\xf9\xfd\x9f\
+\x2e\x3e\x37\x31\x53\xc8\x8d\xf4\x17\xd3\xcd\xa4\x1a\x34\x6a\x99\
+\xa0\x5d\x80\x28\xcc\xe4\xe6\x2a\x8d\x5a\x25\x35\x32\xb5\x63\x76\
+\xea\x96\x07\x47\xfb\x9a\x2b\x54\x46\x81\xfa\xdb\x77\xef\xbd\x7f\
+\xf2\x4f\xe7\x55\x76\x8c\xed\x69\x74\x6d\xe8\x2e\x2e\xe0\x16\x20\
+\x6a\x8d\xd2\x5c\x21\x57\x2a\xd5\x5a\xad\x56\xe2\x82\x67\x6d\xcd\
+\xba\x3f\x75\xe7\x49\x55\xb8\x72\x71\x1a\xa8\xde\x73\xfa\xfb\x3f\
+\xb0\x73\x72\x47\xa6\x96\x3b\xef\x82\xd2\x8e\x99\xa9\xdc\x4c\xbe\
+\xd0\x87\xa5\x42\x6e\xa2\x54\x2c\xae\xed\x30\x76\xce\x7e\x9e\xfd\
+\xcc\x3d\x7f\x1d\x2e\xb9\x01\xbd\x26\x00\x42\x1b\x15\x77\xff\xdb\
+\x9d\x3f\xbc\xfd\xdc\xa6\x99\xc4\xc4\xdc\xa6\xa9\x3d\x07\x0e\x34\
+\xaf\xa4\x9f\x99\x98\x9a\x9b\xab\xc4\x62\x23\x41\x29\x37\x9f\x8c\
+\x7e\xfa\x9e\xcf\xf4\xa6\xaf\xdb\x1f\xb8\xe8\x11\x94\xd9\x1f\x7f\
+\xd3\x5f\xfd\x56\xb8\xe3\x46\x89\xd6\x92\xd4\x9a\x9e\xae\x65\x8d\
+\xa0\xc4\xae\x62\x21\xd9\x5a\x8d\xa0\x35\x57\x19\x9f\xb9\xfe\xfe\
+\xbb\x1f\xed\xcd\xfe\x4f\x0e\xc9\x45\x08\x92\x7f\x5e\xff\xcd\x0f\
+\xf5\xee\xbb\xbe\xb3\x2a\x31\xd7\x97\x1a\x18\xa2\x90\xb3\xd0\xcb\
+\x17\xd7\xc2\x45\xf1\xbe\xd9\x0e\x1e\xb9\xf9\xc1\xbb\xfe\x3d\x2b\
+\x5e\xdb\x2b\x3b\x9c\x4b\x16\x9f\xee\x7f\xea\xbb\xf6\x7e\x31\xbd\
+\x63\x2d\x74\x05\xb1\xbe\x1b\x94\x5e\xd2\x08\x22\x85\x5a\x8b\x5a\
+\x2b\x55\x3e\xd9\xff\xd8\xbb\x1f\x39\xb6\xaf\x3a\x8c\x69\x79\x68\
+\x9f\xb0\x4e\x9e\x1e\xfd\xe9\x3b\xda\xf7\xa7\x77\x0d\x87\x89\xc8\
+\x35\x32\xbb\x22\x5d\xc1\xae\x1c\x43\x75\x59\x7f\x39\xfb\xc3\xef\
+\xf9\xe2\xf5\xbb\x49\xf1\x06\xfa\x84\xff\xed\x99\x88\x37\x7b\x5f\
+\x3a\x7e\xf2\x8e\xe4\x6d\xc9\x2d\x9d\x9b\x56\xfb\xeb\x21\x11\x54\
+\xed\x7e\x3e\x3e\x99\x3f\xdd\xf9\xdb\xf5\x2f\xbe\xf3\xf9\xe1\x54\
+\xf9\x86\x3b\xa5\x5f\x63\xd7\x46\x75\x3c\xcf\x36\xbb\xdb\x83\x9d\
+\xe1\xb3\xbd\xc9\xa8\x1a\xdf\xbe\xf3\xb6\x49\x51\xc6\x79\x52\x44\
+\xb5\xfa\xeb\xe6\x15\xff\x0f\xcb\x3a\x2c\x9e\xff\x72\xca\xdb\x8b\
+\x7c\xbd\x1a\x57\xe3\x6a\x5c\x8d\x2b\x8f\xff\x04\x03\x78\x12\x78\
+\x73\x21\x26\xd6\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x1f\xd9\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x44\x00\x00\x00\x44\x08\x06\x00\x00\x00\x38\x13\x93\xb2\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01\
+\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd8\x07\x11\
+\x12\x27\x26\x7f\x56\x98\x8e\x00\x00\x1f\x59\x49\x44\x41\x54\x78\
+\xda\xec\x99\xd9\x93\x25\xc7\x75\xde\xbf\x93\x4b\x55\xdd\xba\x7b\
+\xdf\x7b\xbb\xa7\xbb\x67\x45\x63\x1b\x0c\x16\x82\x00\x4c\x52\x32\
+\x05\x8b\xa2\x8d\xb0\x41\x2b\xa8\x08\xca\x8e\xf0\x03\xc3\x0f\x8e\
+\xf0\x9b\x1e\xec\xd0\xb3\xe9\x3f\xc1\x0e\x3f\xf9\xc9\x2f\x76\x84\
+\x65\x87\x45\xd3\x72\x50\xa4\xc4\x45\xd6\x42\x12\xfb\x32\x20\x30\
+\x0b\x66\xc1\x4c\x4f\xef\xcb\x5d\xea\xd6\x92\xcb\x71\xf5\x5d\x66\
+\x01\x86\x20\x68\x52\x0a\x84\xc2\xa7\xfb\x8b\x93\x5d\x35\x51\x59\
+\xf9\x9b\xcc\x73\x4e\x66\xe1\xff\xdb\xa7\xc4\x7e\xef\xf7\x26\xfa\
+\x88\xf1\x9f\x9d\x14\xf8\x39\x76\xf1\x22\x68\x77\x17\x84\xbf\x4d\
+\xc6\x0c\x3a\xd2\x47\xae\xff\xd5\x3f\x88\x98\x41\xaf\xbf\xfe\xb3\
+\x07\xbc\xbd\x0d\x3d\x1a\x41\xe2\xaf\xc1\xc4\xdf\x3c\x88\x13\x04\
+\x00\x07\x07\x80\x19\x85\x0a\x1f\xb6\x5c\x54\x36\xdf\x87\x58\x6a\
+\xdd\x1f\x08\x1f\x40\x74\x3a\x08\xaa\x55\xf0\xdf\x0a\x20\x38\xdf\
+\xd3\x7c\xfd\x14\xb2\xbf\x00\xcb\x7e\x10\xf1\xf7\x3a\x84\x99\xf1\
+\x1f\x00\x5e\xa0\xda\x58\x81\x5a\x5e\x06\xf8\x5f\x97\x7a\xa3\x2d\
+\x98\x67\xf7\xff\xf4\xb7\x44\xe1\x65\x08\x40\x02\x9f\x62\x20\xcc\
+\x10\xcc\x9f\xb4\xc7\x4e\x80\x74\x45\xad\xfc\x36\xe0\x35\x05\xa0\
+\x07\x14\xe6\x56\x7f\x46\x12\xd9\x6a\xc5\x43\x23\x03\xf0\xb5\x27\
+\x09\xf6\xb4\xc6\x6b\x9f\x9d\xbe\xe7\x4a\xa1\xa5\x56\x75\x64\xf0\
+\x44\x9f\x62\x20\x58\x2f\xd5\x87\xe6\x3f\x06\x7e\x2e\x98\xb1\x0a\
+\xb1\xdd\x09\x19\x00\x8c\x54\xa8\x06\x11\xe6\xd6\xe8\x2a\x66\x84\
+\x08\xa0\xd1\x04\x50\x95\x04\xae\x69\xe4\x21\xf8\xa0\x45\x96\x07\
+\x35\x52\x45\xc0\x01\xf2\x7b\xff\x43\xbe\xf1\x29\x03\xb2\x0a\x0f\
+\x09\x8d\x73\x08\xf0\x5f\x9e\x13\xe5\xd4\xff\x88\xf1\xbf\x29\xf5\
+\x3f\x00\xcf\x8e\x99\xc6\x35\x7c\xf3\x11\x29\x44\x00\xd4\x8b\xda\
+\x9d\x00\x9b\x06\x20\x17\x15\x39\x24\x18\x84\x61\x33\x04\xc2\x00\
+\x67\xdf\xf1\xc9\x5b\x4f\x6a\x5f\x1d\x55\x2d\xc1\xc9\x0c\x16\x33\
+\xe3\xf4\x77\x01\x77\x45\x7c\x2a\x80\x30\x4f\x45\x84\x23\x2b\xd0\
+\x11\x75\x3c\x34\x8c\xc0\x8f\x09\xcc\x8c\x1b\xd3\x8c\x82\x7f\xfc\
+\x8c\xc2\x52\x2c\x44\x91\x13\x69\xd5\x46\x98\x84\x34\x8c\x42\xcf\
+\x07\x35\xdc\x84\xc4\xab\xb1\x86\xf3\x2d\x62\x5b\xc7\x11\x90\x4b\
+\x10\xf0\x59\x1d\x64\x03\xfc\xa4\xa3\xaa\xd0\x0b\x54\xdb\xac\x68\
+\xcd\x09\xd5\xc1\x98\xdb\x35\xa3\x71\x21\xfd\x74\x00\xc1\x4b\x2b\
+\xc0\x4f\x9e\x98\x4e\xff\x1a\x2c\xac\x77\x38\xb1\xdf\xc0\xda\x52\
+\x95\xff\xec\x14\xf1\x00\x84\xb7\x21\xf0\x26\x08\xa6\x84\x85\xb5\
+\xaa\x8f\xfb\xe4\x39\x6f\xb9\x46\xbd\xc9\x87\x61\xc3\x52\xda\xc6\
+\x01\x2a\x1e\xcd\x06\x50\xb6\x55\xba\x20\x72\xd2\x7e\xaf\x1b\x41\
+\xa0\x0b\x9f\x2a\x04\x08\x51\x2d\xd7\x8c\x28\x42\x97\xaa\x8c\xff\
+\x33\x88\xff\x11\xc0\x6f\xfd\xb6\x44\x8a\x18\x80\xc5\x7d\x8c\x5f\
+\x79\x06\xd7\x5e\x5d\x10\x7f\x63\x40\xe8\x73\xb7\x80\x3d\x61\xdd\
+\x0f\x5f\x68\xe7\xff\xe1\x59\x42\x15\x23\x5f\x3b\xd0\x50\xfb\x5d\
+\x88\x95\xc6\xc6\x3a\x44\xb1\x5b\xd5\x90\x41\x00\x4e\x22\x40\x1e\
+\x13\x76\x37\x84\xb3\x8b\x12\xe1\xaa\x70\xd4\x56\xe0\xae\xcf\x9b\
+\x0b\x6c\xf4\x12\xc3\x76\xa0\x4d\x17\x59\xdc\x22\x6a\x2d\xb1\xa5\
+\x65\x8f\x34\x42\x23\x68\xbb\x68\xd0\x43\x56\x23\xf9\x01\x01\xa7\
+\x20\xf0\x0d\x08\x37\x32\x6d\x64\xce\xd2\xb9\xff\x76\x07\xc2\x37\
+\x66\xba\xf4\x0f\x09\x3e\x8a\x96\xf7\x8f\xe1\xaf\x05\x08\x73\xa9\
+\x1b\x1f\xcd\x26\xf4\xe2\x9b\xce\x09\xef\x82\xc7\xbb\x5d\x5c\x38\
+\xed\x09\x66\xc8\xdd\x5b\xb1\xd7\x74\x6a\x71\xfb\x74\x53\x0b\x17\
+\xc0\x57\xeb\x25\x24\xc1\x4e\xac\xb1\xc7\x22\xa9\x71\x9b\x45\x7a\
+\x9c\x29\x5f\x82\x77\xab\x44\x74\x1c\xd2\x1e\x87\x4a\x7a\x40\xda\
+\x93\xb9\x38\x06\x61\xcb\x6b\x69\x17\x94\xb4\xd8\xa8\x35\x04\xc3\
+\x45\xb5\xaf\x33\x37\xb6\x1a\x21\x94\x37\xcf\xd6\x04\xb8\x81\xf4\
+\x47\x19\xff\x27\x10\x03\xe0\x77\x7e\x97\xf0\xb5\x93\x12\x5f\xff\
+\x02\x61\xd7\xb7\x20\x42\x84\x7f\xff\xa7\x7e\xba\xb4\x3f\xd9\x58\
+\x15\x7e\x11\xeb\x80\x00\x68\x66\x18\x22\x80\x2f\x0a\x81\xa2\xc3\
+\xf8\xef\x7f\x32\xc4\x6f\xbd\xd0\xc1\xd6\x1a\x51\xbe\x3f\xe4\xd5\
+\xc3\x82\xaa\xbb\x27\xa8\xe8\x35\xc1\x83\x2b\x6c\xa3\x36\xa9\x81\
+\xf7\x72\xbc\x40\xd2\x4b\xf2\x69\x8f\xd9\xf6\x40\xd6\xb2\xb7\x3d\
+\x22\x51\x10\x4c\x05\x94\xd5\x20\xe4\x12\x8c\x3c\x09\xa6\x18\x72\
+\x68\x40\xc5\xea\xd1\x35\x72\x24\x61\x73\x4b\x54\x89\x0b\x90\x11\
+\x14\x9f\x14\x3c\xd8\x23\xb5\x4b\xf8\x67\x20\x3c\xb1\x4a\x18\xbc\
+\x1f\xa2\xd7\xcd\xf9\x56\x7b\x89\x84\x34\x68\x8a\x8c\xdf\x07\xc1\
+\x43\xe1\x03\xb8\x5f\x29\x90\x09\x80\xfd\xb6\x87\x38\xd4\x60\x56\
+\xcc\xc8\xf0\xbd\x55\x81\xea\xc9\x0a\x7e\x47\xa5\xc8\xf7\x76\x7c\
+\xd1\x3a\x27\x0e\x4f\xae\xbb\xf8\x6a\x26\xeb\x3b\x1a\xfd\xea\x43\
+\x3e\xaf\x0a\x29\x4c\xcc\x9a\x9c\xd0\x87\x55\x40\x9e\x06\x8d\xbb\
+\x24\xd0\x64\x98\x04\xec\xbb\xa5\x04\x88\x43\x2f\x10\x11\xd4\x2a\
+\xbc\xdf\x65\x36\x25\x3c\xee\x93\x77\x75\x68\xdf\x23\xcb\x1b\x40\
+\xde\x14\x92\x95\x2c\x4e\xd4\x9c\x75\x3d\x11\x5f\xbb\x89\x1a\x14\
+\xde\x58\xf4\x18\x9f\xaa\xa2\x91\x66\xfe\xda\xf2\xa2\x57\x88\x94\
+\x76\x3b\x69\x76\x51\xe9\x95\x7a\xac\xc4\x30\xa5\x33\xf0\xbf\x32\
+\x20\xfc\xda\xd3\x84\x7e\x93\xcd\xf9\xeb\x94\x8d\x4f\xa3\xfe\xdc\
+\xe5\xa8\x28\x92\x20\x3d\x36\xca\xea\x7b\x46\x0b\x3e\x5d\x45\x7c\
+\x2b\x01\xc4\x88\xa9\xf1\x19\x31\x58\xd9\xe4\xd6\xcd\x82\x6b\xdb\
+\x6d\x91\xc4\x5f\x60\x9d\xed\x11\xcb\x98\x55\x52\x61\x1b\x9f\x2d\
+\xf2\x2c\x34\x63\x71\x22\x4f\x72\xef\xbc\x6b\x17\x89\x3f\xcb\x5e\
+\x84\x52\x17\xac\x2b\x32\x90\xca\x45\x61\x65\x2c\x75\x2c\xf6\x55\
+\x20\x12\x22\x57\x27\x5f\x6c\x31\x78\x95\x7c\x68\xd8\x46\x0f\xc9\
+\x60\xeb\x0d\x56\x83\xc0\xe7\x31\xcb\xfc\x58\x15\x61\x5e\x60\xdc\
+\x8d\x04\xa1\x27\x38\xbf\x80\x4a\x1a\xeb\x66\xd2\x12\x94\xed\xe3\
+\xd5\x67\x0c\xbf\x9b\x10\x92\x0f\x08\x7f\x34\xf6\xf4\x8d\x5f\x0c\
+\xc8\x3c\x95\xde\xb1\xdd\xae\x18\xb7\xeb\x6a\xf7\x12\x8a\x85\xd8\
+\x7a\x5c\xfc\xac\xa4\xd5\x2b\x0d\xd1\xda\xce\x92\x7e\x66\xeb\x68\
+\xb4\x91\xb6\x5a\xa2\xb2\x9d\xc1\x74\x42\xa4\xf1\xdf\x05\x35\x36\
+\xa8\xde\x27\x2e\xe4\x93\xc4\xf6\xba\xc9\x71\xac\xbf\x67\x1a\xe9\
+\x61\xfa\xa4\x3d\x90\x0b\xc4\xdd\x66\xd8\x79\x88\x64\xbc\x40\x95\
+\x46\x05\x42\x84\xf0\x5c\xc0\xbb\x14\xf9\x70\x7f\x6d\x78\xe3\x92\
+\x85\xdc\x19\x04\x2d\x33\xa8\xf5\xdc\x4e\x54\x37\x8b\x2a\x20\x86\
+\xaf\xb7\x41\xa9\xe1\xf0\x16\x88\xb8\x2d\xf8\x98\x62\xc1\x44\xa9\
+\x4d\xe0\xe9\x34\x6a\xa3\x97\x5c\x10\x76\x64\x77\x6b\x81\x5a\xc9\
+\x2d\xf1\x5f\x9f\x49\xf8\x74\x1c\x50\x5e\x57\x78\x1f\x29\x7d\xe3\
+\x3d\x30\xdf\x33\xf3\xef\x31\xfa\x19\x40\x08\x80\x20\x82\xbb\x7d\
+\xed\xa5\x17\x03\x08\xd1\x80\x17\x07\xb8\xbe\xa5\xb0\x54\x3d\xe3\
+\x97\xae\xd7\xac\x3f\x18\xc9\xd1\x32\x64\xaa\xba\xac\x92\x00\x2a\
+\x0f\x61\xa2\x67\x41\x6e\x19\xf1\xd6\x8e\xf3\xf2\x73\xfd\x75\x5a\
+\x3c\xbc\x9c\x9f\xd0\xc1\xb9\x85\xea\xf1\x5f\x13\xe1\xea\xe3\x10\
+\x95\x1a\x40\x1e\x80\x03\x88\xef\xea\x7c\x16\xeb\x59\xc2\x67\x23\
+\xe4\x1b\xef\x20\x59\xff\x91\xb3\xfe\x9d\xeb\x0b\x67\xe8\xed\x7a\
+\xa3\x1d\x88\x70\xf4\x7f\xa0\xb2\xcb\x64\xaa\x19\x8a\x76\xe0\x39\
+\xec\x8b\xb4\x77\xcc\x55\xb7\xff\x44\x88\x95\x1e\x7a\xd7\x16\x7c\
+\x67\xeb\xa2\xfc\x83\xd5\x1d\x73\x6a\xb5\x89\x6a\xa0\xb5\x55\x7b\
+\xf4\xfc\xff\x72\x33\x18\x6a\xd6\x93\xfb\x44\x40\x80\xdb\x51\x39\
+\x42\x02\x8b\x2a\x0a\x22\x80\x7f\xfc\x95\x00\x5e\x9c\x00\xd9\x5d\
+\xd0\xc0\xf3\xd1\xca\xec\xec\x3d\x04\x5b\x14\x28\x02\xcd\xd6\x76\
+\x48\x27\x9a\x44\xd1\xf6\x36\x7c\x76\xb0\x9f\x74\xf7\xae\x8e\x1f\
+\x0c\xc4\x13\x4b\x8d\x73\x5f\x23\xd5\x5e\x04\xa8\x28\x65\x26\x22\
+\xe1\x66\x50\xf8\x43\x9d\x0b\x70\x29\xf2\xaa\xf4\x1a\xf0\x01\x6c\
+\x7f\x07\x83\x8b\x7f\xe8\x1d\xbf\x77\x73\x61\xcd\x7c\xa7\xd6\xd0\
+\xeb\xe4\x9a\x01\x7b\xbd\x45\x45\x53\x41\x0f\x7f\x08\x5e\xea\xfa\
+\x85\xad\x08\xd5\xdd\xb7\xe4\xb5\xd3\x7b\xde\x1f\x5b\x72\xce\xe7\
+\xba\x3a\xb8\x85\xcf\xfd\xc4\x21\x41\x90\x8d\x51\x09\x16\x90\x09\
+\x89\xe2\x7e\xfb\x21\xc2\xc7\x18\xe7\x20\x18\x54\xad\x46\xa4\x14\
+\xfa\x24\x61\xf8\x3b\x5f\x0e\x10\x46\x6b\x0e\x79\x21\x83\x0f\x86\
+\xde\xd5\xcf\x52\x34\xfe\x75\x42\xea\xbd\xa5\x88\x44\x5e\x77\x9c\
+\xd6\xf7\x6e\x14\x4f\x8e\xae\x04\x9f\x69\xac\xfd\x4e\x58\x39\xfd\
+\x14\x20\x6d\xa9\x0c\x24\x66\x20\xc4\xac\x77\xa2\x7b\xdf\x84\x71\
+\x67\x43\xe4\x01\xf6\x04\x38\x55\xfa\x00\x6c\x34\xb2\xf5\xf3\x3c\
+\xbc\xf1\xad\xfd\xd6\x69\x73\xbe\xb5\x18\x5d\x26\x1f\xe7\x20\xf3\
+\x3a\xd0\x24\xae\x8f\x88\x55\xfe\x8e\xdc\x3f\x75\xc8\x59\xad\x46\
+\x52\xac\x7b\xb7\xb9\x81\xcf\xbc\x5d\xde\x43\xd3\x14\x90\x66\x0f\
+\x87\xf5\x63\x28\x48\xe3\xbe\x46\x9f\xa4\xfe\x80\x47\xc0\x16\x5d\
+\xef\x51\xc8\x4b\x9d\x01\xf6\x7a\x21\x8b\xc5\x35\x66\xdb\x12\xf1\
+\x8d\x5d\xb6\xc1\x53\x1c\xf0\xf3\x04\x53\x35\x69\x1e\xef\x5c\x49\
+\x1e\x2d\x36\x6b\x0f\x34\xcf\xfd\xd3\x40\x2f\xad\x82\xe4\x18\x50\
+\x79\xe9\x3d\x48\x10\x70\x24\x22\x90\x00\x00\xba\xf7\x2d\xf8\x4e\
+\xc7\xec\xf9\x8e\x77\x80\xb7\x1a\x30\x21\xcc\xee\x26\x06\x97\xbf\
+\x99\x56\x8e\x25\x17\xba\x27\xc3\x57\x05\x55\x06\x1c\x39\x26\xa2\
+\x4b\x74\xd8\x5b\x87\xaf\x39\x38\xf3\xb6\x3b\xfe\xf6\x36\x2d\x8f\
+\xaa\x4e\xa0\x4e\x21\x86\xa9\x43\x7f\x2f\x84\x3b\x43\xbf\x44\x96\
+\x99\xef\x53\x92\x04\x9b\x91\x42\x8b\xcf\x1c\x9c\x42\xa8\x3d\x76\
+\xb4\x83\x0b\x5b\x9c\x75\xce\xa1\xb2\xbe\x05\x56\xbb\x96\xfd\xe9\
+\x9d\xab\xe3\x47\xf3\xab\x65\x99\xfa\xe4\x0b\x52\x77\x9b\x80\xd8\
+\x02\x94\x05\x49\x9a\xc1\x10\xf7\x42\xa1\x0f\x01\x01\x6e\x83\x20\
+\x62\xc0\x97\x02\x83\xe1\x21\x90\xc1\xf3\x08\x6a\xa1\x86\xda\xa9\
+\xbf\x57\x19\xbc\xf7\x47\x67\x89\x72\x74\xd7\xe8\x16\x31\x5d\xe7\
+\x51\xab\xc5\xde\xe7\x22\x5a\xff\x4b\x77\xfc\x6a\xe1\xeb\xfe\xa4\
+\x02\x0c\x79\x6c\x2b\x85\xb4\xa1\xc1\xbf\xb2\x3a\x24\x8e\xe1\x31\
+\xc0\x81\x1d\xfa\x82\xba\xdb\xa7\x11\x66\xc7\xc4\x66\x57\xa2\x08\
+\xdb\x5c\xb4\x9e\x62\xbd\x37\xda\xbb\x9a\xd7\xd3\xf7\xb3\xe5\xda\
+\xc9\xcf\x4b\xbd\xd8\x05\xe4\x0e\x48\x79\x90\x10\x13\x41\x4e\x60\
+\x4c\xdb\x13\x4f\xf7\x5d\x32\x24\x18\xcc\x53\x18\x4c\x0c\x82\x9f\
+\x42\x61\x3f\x79\x1e\x38\x45\xd0\x6d\x23\x3e\x76\x2e\x1c\x5e\x7d\
+\xf9\xac\xae\xc3\x37\xda\x8d\x43\x41\x79\xc4\xcd\x8d\x1b\xdc\x4d\
+\x7b\xd0\x7a\x89\x0f\xa2\xcd\x62\x37\xda\x09\xfd\x56\x86\xbf\x03\
+\xbe\xdf\xec\x4f\x12\x90\x73\x40\xa3\x01\x10\x81\x05\xee\x63\xfc\
+\x2f\x63\xe2\x37\x1e\xa7\x7b\xb6\xf1\xff\x0e\x84\x11\x04\x5f\x87\
+\x93\xeb\xd5\x4d\xb2\xc5\x3e\x2f\x6e\xb4\xb8\xbe\xcd\x10\x69\x30\
+\xd8\x16\xcf\x0f\xdf\xcb\x9e\x08\x74\x45\x05\xab\x27\x40\x6a\xaf\
+\xd4\x18\x24\x0a\x40\x18\x40\x9a\x69\xfc\x50\x16\x50\xa5\x97\x33\
+\x89\xb9\x9f\xb7\xe7\xb2\xb7\xdb\x98\xb7\xc5\x91\x0a\x90\xcc\x41\
+\xc1\x00\xe1\xf2\x0a\x02\x0a\xc3\xfd\x77\xd2\x07\xb3\x24\xa9\x71\
+\x7d\x2b\xe3\x7a\xfe\x18\x8f\x9a\x8f\xd0\xcd\xe3\x2c\xb6\x5b\x03\
+\x69\xf6\x0c\x0e\x00\xfc\xe1\x1d\x08\xa3\x11\x44\x51\x20\x28\x61\
+\x54\x82\x00\x91\xf7\x50\x1f\x3f\x43\xbe\xdc\x26\xf4\xc3\x10\x4b\
+\x9f\x27\xfe\x71\xc5\xe2\xfd\xc2\xe2\xdc\x9b\x12\x57\x7b\xa1\x36\
+\x79\x0d\x19\x57\x84\x19\x1b\x48\xde\xf0\x61\x72\xc2\xf2\xb8\xb6\
+\x77\xc9\x9e\x50\xb9\xab\xea\x93\x55\xc8\xaa\x03\xa9\x0c\x10\xa2\
+\x94\x04\x49\x9e\xce\x12\x55\x4a\x8a\xf9\x72\x99\xc7\x8f\xfb\xc6\
+\x10\xa2\xd9\xec\x20\x94\xf2\xf0\xce\x83\xd8\x01\xec\x01\xe1\xc0\
+\xd2\x41\xd4\x18\xba\x5b\x83\xbb\xb9\x55\xdf\xb9\x36\x7c\xe4\x44\
+\x37\x1c\x52\xbf\xb5\x09\x47\x2f\x09\xb1\xbb\x23\x82\xdc\x20\xb5\
+\x02\x1d\x08\xf3\x1b\xa0\x64\x84\x20\x4d\x10\x46\x4a\x04\x5c\x44\
+\x2e\x48\x9a\x46\x93\x19\xb7\x5a\xbb\x96\xe8\xe3\x80\x7c\x6d\xdd\
+\xe3\x7c\x3b\x47\xb6\x14\xc3\x50\x0f\xc7\x75\x88\xfe\xe7\x06\xa8\
+\x6e\x31\xdb\x7a\x87\x32\x3e\xc3\x2a\x69\x72\x78\x40\x94\xbb\xf1\
+\xfe\x35\xd7\xc2\x6e\xd1\x51\x75\x40\xb6\x24\x48\xe7\x53\x10\x13\
+\x18\x7e\x2a\x75\xd4\x26\x80\xc4\x9d\xb8\x41\x62\x0e\x63\xea\x79\
+\xee\xe7\xc5\x10\x03\x82\xc1\x98\xb6\x79\x02\xa4\x94\x77\x93\x4c\
+\x25\xb4\x83\x6a\x29\xa8\x43\x50\xba\xe9\xd7\x92\x2d\x75\xb5\xb6\
+\x30\x78\x95\x42\xdb\xf7\xcc\x01\x69\x8a\x6c\x1d\x8a\x3b\xd0\x0a\
+\x14\x91\x53\x56\x6c\x3c\xa0\x44\xb6\xea\x51\x54\x0e\x30\x92\x63\
+\xfa\xd2\xb7\xec\xcf\x8f\x21\xff\xb6\xd4\x73\xe7\x99\x5e\x3c\x3f\
+\xe2\xbf\xfa\xc2\x18\x49\xb5\xe1\x14\xad\x08\xee\xb4\x81\x84\x58\
+\xed\x0e\x20\xb8\x47\x45\xf3\xb3\xd6\x27\x4b\xfd\x0b\x07\x4f\x85\
+\x92\x85\x6c\x02\xa2\x92\x02\x22\x03\x89\xa0\xf4\x1e\x74\x24\xc9\
+\x13\x0f\xba\x13\x3f\x40\x98\x81\x21\x1c\x39\x06\x4d\x59\x30\x03\
+\x13\xcd\xda\xbe\x94\xf0\x53\x38\xd2\xdf\x06\xc2\xa5\x80\x02\x14\
+\xe6\x50\x4d\x20\x4c\x9d\xda\xbe\x94\x9c\xa8\x3c\x2b\x9b\x3a\xa4\
+\xe3\x3e\xf0\x35\x8e\x90\x13\x6a\x69\x19\xeb\x52\xb1\x7f\x4a\x08\
+\xd3\x48\xe1\xc4\x2d\x5c\x39\xdc\xa2\x7f\xf1\xbf\xfd\x27\x0f\xaa\
+\x27\x41\x68\xaf\x48\xfe\xf1\x29\x0d\x47\x8c\xf6\xf6\xd8\x57\xd3\
+\xeb\x22\xd7\x23\x64\xfa\x21\x76\xb5\x07\x09\x69\x8f\xd5\x60\x7c\
+\xb0\x99\xf5\x64\xdf\x75\x64\x1b\x90\x75\x80\x54\x0a\xf8\x3e\x20\
+\x9a\x20\xa9\x26\x30\x20\x78\x36\x70\x31\xf3\xd3\x6c\x33\xaf\x43\
+\x78\x36\x43\xf8\xc3\x33\x64\x96\xf3\xe7\xc1\x75\x0e\x98\x85\x2d\
+\xbd\x03\x63\x50\xfa\x04\xa2\x06\xc8\x52\x7e\xdf\x3d\x9c\x17\xf2\
+\x19\x55\x0d\x96\xe4\xb8\xbe\xcb\x3b\xbd\x0c\x79\x7d\x13\x2c\x2e\
+\x82\xec\x79\xe8\xf5\x21\x64\x48\xf8\x52\xa1\x8a\x1f\x7e\x91\xa8\
+\x17\xb2\x2a\xb6\x2c\xae\xbf\xed\xe9\xab\xf7\x01\xc2\xfc\x2c\x6d\
+\xbe\xd4\x15\xbe\xe9\x94\xe9\xb3\x0a\x7d\x2a\xa1\x43\x99\xa6\x3e\
+\xd6\x46\x57\x48\xba\x1a\x54\x92\x92\xca\x76\x18\xae\x05\xa7\x8e\
+\x8f\x77\xdd\x9a\x12\x4c\xa2\x06\x88\x0a\x81\xa4\x03\xdb\x75\x10\
+\x45\x20\x31\x85\x41\xe4\xa6\x30\x04\x95\x9a\xfb\x29\x98\x3b\x46\
+\x00\xf1\x3d\xcb\x87\xe7\x40\xc0\x20\x2e\x3d\x1d\xc1\x98\x2e\x41\
+\xb6\xf9\xa4\x1f\x94\x6d\x11\x11\x64\x95\x11\x0c\x59\x8f\x6e\x85\
+\x8f\xc4\x72\x81\xd9\x05\x29\xd1\xf8\x2d\x0a\xd3\xcb\x9e\xd5\x01\
+\xc9\x76\x1d\x72\xb1\xc7\x16\xc0\x3e\x8c\xaa\xa6\x7d\xf0\xfe\x18\
+\xd7\xd7\x09\x6f\xfc\x8c\x19\x42\xf4\x0a\xf3\xf7\xbf\xea\x5d\x8d\
+\x8d\x14\x4c\x10\x71\x05\xd6\x36\x22\xa9\x9a\xde\xe7\x1d\xb6\x76\
+\x99\xa1\x57\x60\xd2\x2e\xa9\x51\xc5\xda\xa1\x2e\xb6\x8b\x66\x54\
+\x01\x64\x0c\x50\x40\x93\xc0\x09\x0c\xc0\x6e\x1d\xa0\x95\x59\x69\
+\x2e\x66\x33\x62\x92\x7e\xef\xa4\x5b\xfa\x98\xda\x70\x1e\x37\x44\
+\xe9\x99\x27\x20\xe0\xa7\x50\x88\x0c\xe0\x37\x27\xfd\x90\x14\x93\
+\xf8\x24\x62\x0b\x15\x32\xc6\xbb\x45\xcd\x1d\x1f\xed\x28\xad\x6f\
+\x91\xaf\x55\x9c\xa9\x9e\x62\x5f\xed\x92\xab\x24\x1c\x60\x93\x0a\
+\x7f\x08\xcf\x0e\xac\x3d\x17\x0b\xca\x2f\x36\x20\x7f\xf3\x3a\xf1\
+\xd7\xe1\xe9\x81\xab\x5e\x7d\xa4\x2a\xc5\x37\x59\x62\x62\x19\x11\
+\x32\xfe\xe9\x17\xf7\xa8\x6f\x2a\x42\xa4\x0d\x26\x71\x40\xec\x3c\
+\xe0\xaa\xcc\xea\x4c\x36\xd4\x67\x31\xf6\x75\x6a\x01\x22\xc2\x14\
+\xc6\xe4\x05\x69\x0a\xc5\x33\x88\x3b\x00\x55\x66\x30\xe4\x6c\x56\
+\xcc\x62\xc7\xc7\x00\x61\xf0\x0c\x0a\x26\x30\xe6\xd9\x05\x2e\x03\
+\xbb\x3d\x00\x23\x40\xd1\x2c\x58\x3b\x50\x00\x88\x10\xf0\x03\xd3\
+\x28\x52\xf4\x64\x14\x19\xb0\x8e\x85\xc7\xba\xf7\xce\xb0\x35\x03\
+\xb6\xb2\x21\xb4\x0a\xe1\x91\x40\xf8\x04\xc8\x53\x26\xed\x10\x2c\
+\x95\x30\x7e\xec\xef\x17\x43\x68\x76\xac\x28\x8f\x3c\x7b\x90\x4d\
+\xfe\x5c\xa8\x65\x48\xec\x91\x21\x53\xdf\xf5\xb9\x7d\x57\x40\x24\
+\xb0\x32\x4f\x12\xb3\x20\x99\x1f\x13\x21\x40\x1a\xb7\x8b\x2e\x92\
+\x47\x22\x00\x19\xd8\x6f\x81\xb8\x0a\xa0\x0a\xa2\x10\x20\x59\x8a\
+\x26\xe2\x79\xda\x9d\xc3\xe1\xc9\x2f\xc0\x7c\xd7\x1f\x1e\x44\x1e\
+\x8c\x02\xf0\x23\x80\xc7\x00\x0c\x48\x60\xd6\x17\x4d\xa5\x4b\x85\
+\x0c\x0c\x7d\x85\xad\x7e\x80\x58\x31\xbc\x30\x20\x1c\x90\x70\x06\
+\x51\x3e\x92\x2c\xb6\x20\x39\xc9\x02\xd8\x40\x39\x2f\xfe\xf4\x03\
+\x2f\x7f\xff\x16\xd3\xc7\x04\xd5\xe9\xa2\x75\x60\x6f\xa1\x2c\x0b\
+\x4d\x29\x05\x79\x5a\xa9\x2a\x57\x59\x20\xc1\x1d\x19\xc9\x65\xef\
+\x78\x15\xe4\x17\x9d\x75\x75\xa2\x19\x0c\x45\xc0\x0c\xc6\xbc\x3c\
+\xa7\xf9\x7e\x85\x32\x00\x06\xcc\x0a\x60\x0d\x22\x35\xed\x9a\xe4\
+\xed\x40\x8b\x79\xc1\x3a\x7b\x05\x86\x03\xc8\x81\xd9\x00\x6c\x41\
+\xb0\x60\x9a\x1d\x15\x88\x3b\x7d\x91\xb8\xab\x3f\xcd\x13\xb6\x45\
+\x9e\x6c\xc5\x0b\xf6\x6d\x78\x7d\x49\x78\x79\x9d\x7c\xbc\xc9\x2a\
+\xe8\x63\xd4\xf0\x08\xaa\x72\x3f\xcb\x2c\x2d\x1b\xbf\x52\xc2\xf8\
+\xd8\x2c\x43\x34\x39\xb1\x66\xbc\xf8\x05\x12\xbb\xa0\x20\x68\xd0\
+\x64\x30\x3c\x76\xa8\x7a\xc3\x85\x0d\x3c\xe5\x35\x52\x59\xdd\x53\
+\xd6\x71\xb9\xeb\x08\xca\x41\x12\x00\x61\x1e\x1b\xee\x8d\x11\x84\
+\xbb\xda\x1e\x44\x05\x40\x16\x84\xf9\xb5\x79\x6d\x32\xcf\x34\x3c\
+\x0b\xa2\x77\xd5\x1f\xf0\xb3\xe7\xcf\xb2\x12\xcd\x9e\x2f\x66\xa2\
+\xa9\x48\x01\x42\x30\xf2\x34\x1b\x43\x16\x5b\x50\xd8\x70\xc4\x9b\
+\x52\xc8\x3d\x8b\x64\xa4\xab\x28\x70\x0e\x7e\x95\xc0\x9f\x78\x2f\
+\x43\x93\x63\xfc\x1f\x79\x7c\xbe\x53\xb8\xaf\x9f\x2c\x8a\xa7\x43\
+\x5d\x49\x04\xc3\x14\xda\xcb\x7c\x07\xc8\x2b\x42\x9a\x88\xe0\x9a\
+\x2e\xf3\x4e\x7c\x64\xd0\xf3\xf6\x3d\x9b\xb7\xa9\xc7\x47\xff\x1d\
+\x89\xbb\xc0\x4c\x99\xcd\xd2\xf0\x5c\x5c\xea\x6e\x78\x53\xc7\xb7\
+\x9f\x49\xa0\xf9\x3d\x31\xbd\xed\x0a\xd9\x86\xab\xf4\x00\xd5\x17\
+\x42\xe7\xb0\xb2\xd0\xd5\x22\x85\x33\xff\x6f\x67\xaa\x54\x8a\xff\
+\xd5\x1e\xcb\xb5\x43\xaa\x14\xcb\x16\x81\x4d\x11\x65\x5e\x06\xec\
+\xe0\x58\xb2\x45\x08\x42\x9b\x42\x1e\x81\x3f\x1c\x17\x69\xee\xee\
+\x34\x3f\xbc\x81\xc3\x5d\xd0\xe6\xe9\x78\x7e\x53\xf8\x29\x14\xe2\
+\xf9\xc0\x67\xc6\x77\x4a\xfd\x79\x11\x77\x9f\x98\xcc\x04\x0e\x2b\
+\x95\x36\x99\xe6\x39\xb8\xb8\x03\x5b\x39\xe5\x38\xdc\xa0\xc3\x33\
+\x5b\x28\xf4\x96\xb8\x11\x0c\x8b\xef\xa2\x50\x82\x0b\x0f\x97\x11\
+\x7c\x66\xe5\x41\x11\xbc\x02\x43\xbf\xff\x8a\x57\xb7\x3f\x16\xbf\
+\xfe\x9e\x32\x03\x1b\x11\xf9\x8a\xe4\xbc\xe6\x99\xea\x18\x50\x15\
+\x1e\x55\xb2\xa6\x89\xdc\x74\x48\x9a\x1e\x53\xbe\x0c\x99\x2e\x43\
+\x65\x8b\x51\x65\xb7\x97\x51\x0e\x78\xbe\x3b\x22\x62\x6e\x3f\xeb\
+\x3c\x8a\x48\xce\xe2\x47\x30\x2f\xf1\x67\xf7\x78\x5a\x81\x92\x9d\
+\x0a\xe6\xde\x9a\x9e\xf8\xee\x1c\x34\x6f\xce\xfb\xbd\x5d\xc3\xc9\
+\xc8\x5c\x81\x4e\xce\xb3\x34\xd7\x21\x8a\x9b\xd2\xc6\x3b\xde\x57\
+\x47\x82\x82\x02\xa2\xb0\xca\x49\x4f\x82\x5c\xee\xac\x55\x70\xde\
+\x6f\x12\xe3\x91\xed\x0f\xcd\x10\xc1\xae\x60\x1a\x2b\xe6\xb1\x52\
+\xbc\x4f\x85\x20\x08\x22\x67\xfb\x44\x0b\x45\xc5\xa7\x79\x5b\x0a\
+\x5e\x84\x18\xb4\x21\x47\x4b\x90\xc5\x29\x92\xf9\xf3\x9e\xb1\xc2\
+\x16\x04\x7f\x77\xd9\xcd\xf7\x72\x61\x9e\xa3\x00\x28\x00\x23\x9a\
+\xc0\x98\x45\xe3\x59\xe6\x11\xd3\xd4\x4a\x73\x20\xa6\x54\x3e\x53\
+\x31\x03\xce\x77\x01\xc0\xed\xbe\x98\xa7\x30\xd8\x96\x62\xf2\x52\
+\xf3\x90\xd9\x8f\x09\x6e\x44\x2a\x1b\xb2\x32\x03\x61\xf7\xf7\xd0\
+\xac\x8e\x71\xe5\xc0\xd2\x23\x82\x81\x18\x17\xde\xbd\xcc\x4f\x03\
+\xc0\xd7\x3f\xb4\x64\x68\x7a\x2e\xcf\xf3\x77\xb7\x76\x22\x08\x03\
+\x04\x02\x12\x04\xc1\x09\x79\x6f\x22\x23\x0c\x97\x9e\x24\x2c\x74\
+\xd4\xf5\xe3\x01\x91\xe7\x62\xb2\x8c\x00\xcf\x13\x71\x29\xb0\x2f\
+\x25\xa6\x0f\x9c\x1f\x1c\xa3\x02\x50\x04\x3a\x12\xc2\x09\x1c\x40\
+\x01\x2c\xef\xaa\xdd\xdd\x34\xad\x96\x62\xd2\xb3\x57\x9c\xa6\x70\
+\x30\xee\x00\xe0\x59\x3f\xde\xdf\x6e\xb3\x01\xa0\xa5\xd5\x41\x7c\
+\x02\x3e\x1a\xc2\x07\xd6\xb9\x30\x23\x17\x8c\x89\x50\x20\xab\x46\
+\xf6\xcc\x6a\xae\x46\x36\x87\xbf\x61\x9e\x7e\x0e\x96\xce\x82\x3f\
+\x12\x43\x78\x7a\x49\x1e\x29\x4d\x11\x28\x85\x88\x3c\x42\xa9\x21\
+\xd9\x01\x8e\x26\x48\x24\xc9\xc2\xa0\x50\x29\x39\x3d\x42\x21\x46\
+\x51\x28\x86\x54\x4b\x12\x9f\x17\x0d\x6f\x18\xc2\x7b\xb0\x63\xc0\
+\xf9\x69\x51\x36\x03\x04\x26\x60\x32\x2b\x2a\x00\xe2\x59\xa1\x16\
+\x02\x08\x40\xac\x01\x88\xdb\x40\x88\x1d\x18\x06\x40\x51\x4a\x81\
+\x20\xa6\xb7\xc0\x60\x6f\x67\x25\xca\x0c\xbc\xf3\xe0\xb9\xb7\x0c\
+\x9f\x03\x54\x13\x5b\x41\x3d\xbf\x06\x0d\xc3\xd2\xb6\x40\xf9\x59\
+\xd6\xb6\xee\xe3\xf4\x06\xd5\x87\x1b\xd0\x8e\x9c\x61\x82\x9a\xfc\
+\x58\x2e\x60\x30\x86\xa5\x16\x78\x06\xe4\xde\x70\x17\x04\xc8\x9d\
+\x43\xc6\x02\x24\x23\x60\xbc\x0b\xce\x23\x45\xcd\xcb\x4b\x15\x88\
+\x66\x8f\xad\x3e\x09\xef\x4e\x92\x28\x8e\x6b\x4a\xe3\xa0\x6b\x0e\
+\xfd\xcd\xa2\xc1\x29\x80\xda\x11\x10\x37\x7b\xc1\x52\x8a\x01\x8f\
+\xd9\xa0\x23\x80\x62\x00\x13\x4d\x97\x0d\x02\x30\x34\xc0\xe2\xae\
+\x58\x61\x01\x36\xd3\xeb\x90\x53\x96\x3c\xbb\x8e\x1c\xf0\x66\x0e\
+\x63\x2a\x3b\xf3\x05\xc3\x64\x84\xea\x4a\x30\x14\x1c\xe5\xc8\xc5\
+\xbb\xc4\xea\x32\xf9\xca\x26\xbc\x4a\x50\x65\x63\xc5\xfe\x58\x46\
+\x03\xf6\x51\x22\x19\x90\x04\x04\x9e\xe0\x58\xc1\xa5\x63\x98\xc8\
+\xc0\x28\xdc\xd9\x70\xba\x89\xe6\xfd\xbf\xfb\x19\xa0\x0a\x8a\x6f\
+\x44\x3a\x6e\xb8\xd0\x39\x5a\x62\xa7\x56\x04\x5b\xcd\xc8\x0c\xb4\
+\x19\x50\x98\x99\xda\xaa\xe8\xef\x5f\x27\x56\x09\x93\x6c\x32\x28\
+\xf0\xf0\xd6\x81\x4a\xb1\x93\xb3\x8a\x35\x00\x73\x00\xe2\x08\x34\
+\x03\x42\xa8\x00\x08\x67\x85\x9a\x9c\xcd\x22\x0f\x66\x3b\xdd\xd6\
+\x43\x81\x6f\x43\x72\x60\x7f\x04\x43\x97\x7e\x5c\xea\x08\x84\x9b\
+\xca\xb9\x09\x14\x97\x00\x85\x97\x66\xb1\x1d\xf7\x49\x8a\x88\x29\
+\x78\x8c\x6d\xdc\x2b\xe1\x5c\x84\xd1\x17\x90\x86\xb7\xf2\xcb\x2b\
+\x3e\x0e\x5d\xa6\xf4\xd0\xe2\xf0\x86\xc1\x6f\x6e\x7a\xa2\x9f\x93\
+\x76\x8f\x12\x0e\x7e\xd8\x10\x68\x91\x42\x56\xd5\x36\xac\x69\x35\
+\x14\x4d\x81\x3c\x40\x30\x48\xb9\xb1\x73\x02\x94\x86\x9c\x05\x55\
+\x2a\xa2\xad\x46\x1d\xe3\xdd\x7a\xbe\xec\x46\x79\x19\x51\x18\x22\
+\x74\x60\x53\x4a\xcd\x45\x60\x2f\x41\xac\x27\x50\x80\x70\x02\x83\
+\x11\x4f\x00\x4d\x97\x8e\x9c\x25\x0c\x7f\x7b\x26\x30\xc4\xac\x40\
+\xb3\xf0\xac\x01\x9e\xc6\x1a\x76\x34\x01\xe0\x8d\x03\xcf\x95\x79\
+\xd8\x21\xa0\x3b\xc1\xcd\x30\xac\x8e\x31\x8e\x03\x62\x79\x80\x4a\
+\xf2\x01\x77\x0f\x12\x42\xe5\x34\xb2\xc6\x62\x75\xdc\x3e\x04\x57\
+\x0e\x39\x53\xdb\xd4\x8a\x87\xf8\x8b\xa7\x0c\xf3\x77\x98\xe8\xe7\
+\x9d\x87\xec\x75\x81\xfa\xa2\x06\x28\x52\xa1\x0d\x78\xf1\x52\x07\
+\xa2\xe8\x61\x14\xf7\xe8\x60\x61\xc4\x39\xbf\x46\xfa\xf0\x1d\x08\
+\x7e\x54\xab\xf0\xe1\xd6\x83\xe1\x9b\xc3\xb7\xcc\xf3\xaa\xef\x95\
+\x88\x3d\x48\x39\xf8\x52\x90\x0e\x42\x03\xd0\x33\x28\xa5\xc0\x41\
+\xa9\x29\x14\x20\x9e\x01\xd1\x00\xd1\x2c\x7e\x14\x13\x40\xc4\x00\
+\xc3\xce\x3e\x54\xc9\x52\x02\x3c\x9b\xc3\xbe\xb0\xe0\x23\x19\x5b\
+\xb6\x1d\xec\x00\x48\x8d\x2a\x56\x1e\x09\xb7\x69\x61\xe3\x55\x1e\
+\x37\x2e\x50\xb2\x5a\xc1\xe0\xf8\x02\x0e\xa4\x46\x7d\xf4\x32\x9e\
+\x7c\x79\xdb\x32\xaa\x22\xab\x09\xea\x2f\x77\x91\x75\x2b\xa4\x5d\
+\x1f\x5b\x8f\x67\xcc\xc7\x2d\xd1\x1f\xf3\x7d\xce\x43\xbe\x04\xbc\
+\x16\x48\x2f\xc6\xda\xad\xfe\xa4\xa6\xac\xec\x71\xd6\xe8\xd2\xee\
+\x72\x42\x49\xfd\xa2\x43\xf2\xaa\x50\x49\x40\x42\xae\xc2\x55\x8f\
+\x93\x3a\xb8\x06\x91\xe7\x9d\xc5\xb8\x3a\x68\xe6\xb7\xcc\x61\x7e\
+\x82\x62\x26\xd2\x16\x98\x7d\x76\xf0\xca\x80\xf4\x11\x24\x06\x4b\
+\x9a\x0c\x8c\x84\x06\x73\x58\xfa\x18\x34\x81\xa2\x01\xd0\xac\xf6\
+\xc8\x66\x99\xc4\x80\xbd\x2a\x45\xa5\x00\x76\xd3\xb8\xe1\x8b\x02\
+\x3e\x37\x13\x20\x3e\x77\xf0\x23\x0f\xd3\x27\x0e\xba\xd1\x95\x48\
+\x55\x2f\x21\x69\xac\xa0\x9a\xe5\xbe\xfd\xee\x77\xe5\x50\x5d\xc1\
+\xf8\x41\xe5\x93\xa5\x65\xfa\xf3\xaf\x9c\x56\x0a\x87\x7e\xe9\xfa\
+\x9e\x78\xe0\x6d\x6b\xfd\xc5\xc0\x79\x54\x72\x03\xdb\x78\xe5\x1d\
+\x07\xe0\x5e\x20\xcc\x80\x31\x3f\x08\xe4\x39\x8e\xc8\xe8\xba\xd8\
+\x3f\xc6\xd8\x3a\xb6\x2e\x92\xc6\x55\xb8\x28\xc3\x99\xf7\x58\xac\
+\xfb\x88\x6c\x0c\x27\xd2\x0d\xa9\xec\xc8\xdb\xda\x39\x21\x02\x29\
+\xa2\x83\xd7\xbb\x0f\x85\xd1\xee\xdb\xbe\x2d\xf6\x4c\x5d\x04\x1e\
+\x24\x2c\xbc\xa0\xd2\x67\x20\x9d\xcd\x4e\xcf\xdd\xf4\x70\xc7\x63\
+\xba\x29\x63\x0d\x88\xca\x54\x20\x80\xf3\x52\x7e\xe6\x01\xcc\x33\
+\x96\xb5\xf0\xd6\xc0\x67\x39\x7c\x9a\x81\x73\x3b\x81\xe2\xc7\x0e\
+\xc5\x3e\x38\x13\xea\xe6\xf1\x07\xe4\x0f\x04\xe8\x00\xe3\x38\xe5\
+\xac\x9e\x50\xb5\xf9\xeb\xdc\xec\xd7\xe8\xc4\x5b\x2f\x59\xa5\x5e\
+\x95\x2f\x7f\x49\x08\xd2\x11\xed\x9c\xec\xf9\xbd\x93\x2c\xe2\x6c\
+\x80\xd5\x0b\x85\x5e\xfa\x80\xfc\x1a\xc2\xfd\x7d\x14\xed\x36\x9c\
+\xba\xeb\xe3\xb6\x4a\x12\xe6\x7a\x15\x63\x91\xd4\x46\xf2\xc6\x2a\
+\xe3\xd6\x90\xe9\x9f\xbc\x7c\x1b\x18\xdd\x0c\x32\xa8\x47\x48\xa2\
+\xdb\x86\x29\x1a\x14\x6e\x5c\x66\x32\x07\x30\xf5\xcf\x36\x3b\x66\
+\x23\x5f\x33\xdf\x1f\x5d\x74\x5f\xa6\x5d\x5f\x25\xe9\x66\xb9\x2b\
+\x05\xe4\x08\x10\x35\x48\x11\x83\xa9\x0a\xcc\x37\x78\xe4\xc0\x02\
+\xa0\x79\x1c\xf1\x76\x96\x41\x6c\x29\x53\x2a\x07\x9b\x0c\x5c\xa4\
+\xf0\x69\x02\x37\x1e\x4e\xa1\xe4\xa6\x6c\x3b\x98\x3d\x46\x6e\x83\
+\xb4\xf7\x70\xe5\xa5\x4a\x0d\x97\xc1\xd9\x16\x01\x3b\x3c\x5e\x8c\
+\x39\xaf\x8c\xbc\xa9\x57\x29\x6f\xfc\x06\xb5\xf6\xdf\x94\xcf\x7d\
+\xfb\x26\x35\x30\x02\x30\xe2\xef\x7d\x55\x60\x54\x55\xe2\xc6\x33\
+\xa4\x2e\x9c\x73\x38\xf7\x6d\xd7\xee\x81\xee\x9e\x21\x5c\xca\x94\
+\x84\x66\x76\x50\xea\xc7\xb8\xc7\x7e\xf4\x82\xe0\xb0\x68\x78\x56\
+\x4d\xe9\x87\x87\x08\x6e\xec\xc2\x77\x56\xc8\x23\x66\xdd\xff\x80\
+\xd4\x60\xa3\x77\x32\x1c\xf8\x3c\x7c\x38\xbd\x36\x7c\x08\xe4\x54\
+\xc0\x0e\xcc\x39\x80\xc3\xdb\xb1\x82\x59\x43\xb2\x02\x4a\x31\xe6\
+\x05\x99\x9b\x01\x19\x83\xdd\x00\x6c\x8f\x34\x84\x37\xa5\xcf\x07\
+\x70\xe3\x3e\x5c\x72\x50\xaa\x0f\x9f\x15\xf0\x47\x30\x76\x19\x69\
+\xa2\x46\xcd\x33\xad\x0f\x9a\x8d\x66\x0b\x45\x26\x48\x8f\xd7\xa1\
+\x31\xa0\x78\xfb\xd0\xa5\x6d\x2b\x07\x15\xe3\x51\x0e\xdc\x05\xa7\
+\x7d\x51\x6b\xf3\xc1\xfe\x25\x54\x86\x63\x8a\xbe\xe9\x01\x14\xb8\
+\xd7\xf8\xae\x4a\x15\x1f\x6b\xfc\xc6\x17\x25\x32\x53\x65\xa9\xac\
+\x1f\xdd\xba\x29\x85\x51\xe0\xe5\x16\x88\x0c\x54\xff\x8a\x17\x7d\
+\x29\x4d\xe3\x51\x61\x9b\x27\x7b\xa7\xb2\xab\x7b\x42\x04\xa3\x1b\
+\x83\x13\xd8\xb2\x81\xb2\x0e\x68\x26\x60\xbf\x0d\x38\x9e\x64\x08\
+\x18\x0b\x8a\x0a\xb0\x1e\x83\xd4\x10\x90\x11\x08\x04\x66\x03\xb8\
+\xf1\x0c\xc6\x21\x7c\x5e\x2a\xdb\x2b\x2f\xed\xc0\x8f\x4a\xfe\x79\
+\x06\x37\x9a\x2c\x13\x64\x85\x3a\xa8\x9f\xaa\xbe\xde\x5e\xc6\x9b\
+\xb0\xaa\xc3\xf9\xd2\x73\x30\xd9\x75\x0a\x46\x1f\x18\xce\x87\xae\
+\x39\x30\xaa\xbd\x35\x96\xdf\x1d\x5a\xf7\xf4\xda\x86\x15\xed\x15\
+\x69\x2a\x0f\xbb\xd6\xd6\xcd\xd1\xd6\x70\xbf\xba\x68\x1d\xd1\x2f\
+\xf2\xb1\x7b\x9e\x82\x1f\x3b\x27\x70\xf6\x98\x80\x70\x96\xce\xfd\
+\x10\xfc\x1f\x17\x09\x4f\xb4\x35\x32\xa3\x11\x8c\x04\x2a\x03\xe5\
+\x93\x07\x1f\x25\x17\xbf\x08\x35\x24\x90\x7b\xd0\x07\xc3\xc6\xde\
+\xc6\xa1\xee\xbf\x6b\x3e\x1b\xc0\xb6\x82\x05\x90\x6c\x12\x64\x2d\
+\x82\x8c\x17\x20\x2a\xa5\xa2\x16\x44\xd0\x00\xa9\x18\x24\xc3\xd9\
+\x9e\xde\x95\xbf\x19\xd8\x26\xf0\xc5\x00\x3e\x2b\x81\xa4\xfb\x25\
+\x90\x83\xb2\x6d\xe0\x06\x8c\xe2\x90\xbc\x11\xc1\x5e\x67\xad\xfe\
+\x56\xbd\xa3\xdf\x12\x1c\xf4\x99\xf9\x32\xcc\xd2\x29\x32\xf1\x32\
+\xc8\x7e\xcb\xfa\xfc\x0d\xa7\xde\xef\x47\x8f\x0b\x8b\xee\x9e\xa7\
+\xd9\xae\x20\x7f\xf3\xc9\x80\xba\xc3\x45\x45\x63\x23\x6a\x65\xd4\
+\x68\x18\x43\xf4\x11\x20\xbf\xb8\xf1\xbf\x07\xa1\x0d\x81\xb5\x96\
+\xf4\xd9\xd9\xd3\x70\xf1\x57\x48\xf7\x6f\x40\xfb\x27\x39\x3a\x6c\
+\x20\xdc\xd9\x38\xaa\x53\x46\x3b\xee\xd1\xdd\x2b\xe9\xe3\xdc\x37\
+\x6b\x51\xc5\x6b\xd9\x00\x64\x5d\x40\xc6\x11\x44\x54\x87\x08\x6b\
+\x20\x55\x01\xc9\x00\x10\x62\xba\xd3\x75\x05\xbc\x1d\x83\xf3\x21\
+\x7c\xa9\xc9\x12\x49\x18\x66\x00\x64\x99\xca\x64\x53\xbe\xd5\x7b\
+\x30\x7c\x35\x8e\x3a\x55\x62\xb5\x0e\xe0\x7d\x20\x32\x4c\xee\xa7\
+\x94\x76\x1f\x60\xab\x57\x49\xf2\xcb\x90\x38\x4f\xd7\xde\xee\xd3\
+\x3f\xdf\x61\x7c\xc8\xf8\x66\x2d\x80\xb4\x1a\xed\x2c\x47\x08\x4b\
+\xf4\xcb\x02\x61\x00\x7f\x79\x5a\xc2\x3d\xbc\xc6\x85\x7c\xce\xeb\
+\xc1\x79\x52\xe2\x69\xae\xee\xf5\x50\xb9\x75\x41\x8e\x35\xb3\x55\
+\x27\x18\xbe\xe3\x91\x05\xc3\x5d\xf9\xe2\xee\xe5\xd1\x32\x0f\x6d\
+\x2f\x0a\xbd\x54\xf1\x2c\xb9\x44\x04\xd2\x12\x50\xb3\xc3\x67\xef\
+\xc1\x7e\x56\x6c\x15\x80\x4f\x01\x33\x06\xb2\x5c\x3a\xd5\x55\x9b\
+\x8b\xa7\xbb\xc3\xb8\x91\xfd\x4f\x92\xe6\x7d\xd8\x3a\x38\xeb\xae\
+\x12\xf1\x3b\x90\x7a\x13\x1c\xc7\x24\xc7\xef\x71\xde\x5c\x86\x95\
+\x4d\x06\x6e\x0a\x61\xaf\xe0\x4b\x3f\x48\xe9\x67\x8d\x01\xd3\xea\
+\x8f\x08\xfc\xcb\x01\x79\xfd\x29\x81\xfe\xea\x1a\x48\xac\x38\xde\
+\x7b\x87\x85\x7e\x52\xb4\xf6\x7a\x14\xef\xbe\xcf\x7d\xda\xa3\xbc\
+\xfe\x00\x64\x56\x21\x35\x0e\xbc\x8f\x3e\x03\xed\x9f\xf0\x59\x71\
+\x73\x5c\x8c\x1f\x3e\xb8\x26\x97\xcc\x81\x3b\xe1\x92\xa2\x2e\x89\
+\x95\x54\x0c\x21\x40\x44\x0c\x06\x4d\x98\x38\x57\x7a\x12\x46\xc4\
+\x6a\xb7\xb2\x10\x1d\xb4\x56\x69\x33\x8a\xa3\x2d\x51\xe1\x05\x1a\
+\xb4\x6e\xb2\x3e\xfc\x36\x60\x36\x29\x5f\x5d\xe0\xac\x7e\x9c\x44\
+\xfe\x12\xc2\xda\x88\x1d\x35\x9c\xb5\x57\x15\xc5\x4d\xf6\x68\x53\
+\x68\x37\x41\xc3\x1d\xfc\xda\x4b\x05\x7d\xc2\x91\x2a\xfc\x82\xb6\
+\x7f\xf9\x05\x72\xdb\xe2\xa4\x14\x42\xa1\xe8\xbf\x24\xeb\xd1\x29\
+\xd4\xb7\x61\xe3\xc3\xd7\xe4\x7e\xbe\x61\x87\xa7\x8f\xe9\x60\x7c\
+\x93\x21\x63\xb2\x95\x16\xb4\x6e\x90\x4f\xbf\x2f\x03\x55\xab\xb5\
+\x68\x5c\x53\xdd\x13\xd6\xda\x6b\xb6\x70\x91\xc9\x7d\x3b\x4d\xff\
+\x6f\x35\xd7\xd6\x22\xc7\x71\x85\xbf\x53\x5d\xd5\x97\x99\x9e\xd9\
+\xd9\x9b\xb4\xab\x45\x09\x8e\x8d\x91\x9d\x7b\x6c\x07\x41\xae\xe4\
+\x21\xc6\xc1\xe0\x40\x88\xf1\x63\xf2\x4f\xf2\x98\x37\xe7\x37\xc4\
+\x2f\x06\x93\x10\x84\x83\x13\x25\xe0\x80\x43\x30\x09\xb1\x12\x22\
+\x6b\xa3\xcb\x6a\xa5\xd5\xcc\x8e\x76\x67\x76\x67\x7a\xfa\x5a\xdd\
+\x55\x75\xbc\x0c\xc8\x66\x61\x4d\x14\x90\x60\xfd\xc1\x81\xe2\x9c\
+\xee\xea\x3e\x1f\x14\x1c\x4e\x9f\xaf\xcb\xa4\xa9\x5c\x64\x1a\x96\
+\xca\x47\x19\x45\x8a\x83\x50\x09\xbf\x4b\x24\x95\xdd\x91\xb6\xc3\
+\x90\xb6\x60\xa1\xba\xe0\xc3\xdf\x3a\x49\x2f\x52\xb5\xaa\x38\x9c\
+\x4c\x11\x4c\x77\x50\xc5\x23\xb6\x7e\x4c\x3a\xbb\x4b\x61\x2f\x15\
+\x42\x2d\xa2\xd1\x43\x8a\x64\x06\xeb\x2f\x98\x6a\xb1\x2b\xef\xe0\
+\xe0\x61\xf5\x35\x84\xff\x03\xfc\xc1\x4b\xc4\xb5\x3a\xc3\x16\x9e\
+\x08\xb2\x7d\x28\xb3\xec\x3a\x07\x6b\x82\xaa\x29\x26\xf9\x2e\xcc\
+\xf9\xc8\x36\x99\x24\xcf\xfa\x2c\x4a\x21\x54\xf7\x07\xac\xf2\x0e\
+\xe5\xf6\x1a\x7a\xb3\x67\xa9\x08\x2d\xf2\xc5\xa7\xe1\x19\xb0\xe5\
+\x36\x93\xe8\x92\x4c\xb7\x00\x16\x96\x99\x85\xb0\x1a\x2e\xec\xc0\
+\xa9\x08\x0a\x2b\xf0\xf5\x3d\x91\xc5\x39\x3b\x15\x20\x32\x6d\xa0\
+\xfc\x3d\xb7\x70\x81\x0e\xce\x75\x09\xc5\x6f\x10\x67\xa3\x66\x12\
+\x36\xaa\x5e\xfb\x3c\x02\x7d\x80\xad\x0f\xef\xe3\xeb\xdf\xe9\xc2\
+\x35\xad\xa6\x2a\x0f\x4b\xdf\x53\x9d\x0a\x01\xc1\x96\xf8\xee\xd9\
+\x9c\xe8\xad\x47\x38\xda\xbd\xfd\x33\x82\x09\x62\x08\x91\x57\x45\
+\x7f\x68\xeb\x49\x80\xa5\x7e\xe4\xe2\xfe\x2e\x2c\x76\xa0\xef\x5b\
+\x1c\x85\x28\x1c\x67\x64\xf2\x44\x88\xc5\x45\xf8\xc6\x63\x8d\x77\
+\xad\xe9\x4c\x6d\xac\xc7\x2e\x5b\x03\x83\xae\xc2\xb6\x0f\xe0\xd4\
+\x75\x98\x70\x87\x39\xd8\x01\xfb\xdb\x1e\xa9\x9b\xec\xe4\x2d\xb8\
+\x60\x0b\xd6\xdf\x86\xf3\x47\xe0\x60\x06\xf2\x36\x61\xc2\x5d\x90\
+\xb8\x09\xbd\x7a\x46\xc0\xfe\x81\x7b\x33\xcd\x4d\x6f\x05\x39\x6b\
+\xb5\x6a\x35\x54\x73\x13\x14\x2b\x3c\xfb\xb4\x87\x6f\x3c\x3f\x85\
+\xe0\x44\x85\x7e\x28\x7b\x65\x69\xab\xe9\x14\x44\x16\xff\xfe\xaf\
+\x7a\x64\xb3\xee\xf3\x9e\xeb\x38\x97\x80\xad\xe8\x85\xdf\x65\xad\
+\x0b\x4e\xd0\xf9\xc4\x47\xd0\x1f\xcb\xd5\x64\x4c\x4f\x6d\x31\x2e\
+\xc2\xe1\xca\xb5\x5a\x84\xa3\x06\xde\x59\xe5\xc2\x66\x83\xc9\xfe\
+\x0b\x55\x3d\xa0\x85\x24\x27\xcf\x0d\x49\x2f\x68\x20\xb8\x03\x8e\
+\xf6\xc0\xed\x11\xb1\xda\x84\x09\xfa\xe4\xc2\x3e\xb1\x3f\x10\xe4\
+\xf7\x45\x13\x0c\x60\xa2\x3e\x5c\xb4\x0f\x29\x86\x8e\xc3\x3d\x12\
+\xe1\x1e\x37\xf2\x26\x8e\x58\x46\x12\x4e\x6c\x94\x5c\xe6\x5e\xb1\
+\x01\xb7\x2e\x30\x1e\x1a\xbc\x7d\x55\xc3\xb8\xfb\xc8\xbb\x1d\x5c\
+\xba\x4c\xf4\xdc\xe5\x1c\xd6\xe6\x2d\xca\x49\xfe\xf2\x8a\xc1\xe2\
+\x66\x85\xb2\x7e\xb4\xa3\xdd\xd0\x53\x43\xdf\xfe\x13\x33\x03\x88\
+\x6f\x0b\x11\xd9\x0c\x97\xea\x86\x5e\x3d\x3e\x00\xcb\x7f\xfd\x16\
+\xa1\x97\x6f\x20\x2c\x0e\x78\x5f\xdc\xf0\xf2\x36\xbb\x2f\x6d\x2b\
+\xba\xfe\x4c\xc1\x82\x6e\x13\xda\x35\xc0\x77\x61\x5b\x11\x64\x93\
+\x0a\x8a\x0b\xeb\xea\x82\x6a\xc9\xc2\x77\x47\x88\x2d\x98\xa7\xc4\
+\x88\xe0\xdb\x94\x55\x54\x31\xd3\x2e\x99\x60\xea\x42\xbb\xca\x79\
+\x37\x54\x4b\x83\x4d\x27\xfc\x9e\xe3\xf5\x0d\xf1\x5c\xba\x49\x00\
+\xf0\xfa\x9f\x35\xff\xe5\x9b\x0e\x1b\x50\xfc\x56\xa7\xa6\x8b\xef\
+\x36\xfc\xf6\x0b\x84\xef\x01\xf4\xe5\x7d\x00\xfb\xee\x91\x10\x72\
+\xbc\xe7\x3a\x07\xa1\x37\x33\x9f\xaa\x79\xeb\x99\x2e\xb7\x8b\x16\
+\xa2\xd9\x75\xef\xbd\x49\xe9\x7e\x08\xe1\x7c\x90\x37\x5b\x6b\xb1\
+\x9b\x6c\x8a\xa0\xf7\x24\x28\xdd\x22\x8e\x9f\x62\xf0\x90\x89\xad\
+\x57\xb8\xcc\x29\x03\x64\x4a\x92\xf2\xe1\x44\x91\x13\x45\x12\x82\
+\x5b\x24\x68\x76\xb4\x2c\x30\x8b\x9c\x5b\xd8\xbf\x45\xd5\xd2\x79\
+\xf4\xa3\x01\xce\x4d\x3e\x80\x6d\x3d\x8f\xf7\x5f\xba\x83\x8b\xef\
+\x94\x00\x40\xdf\xff\x7b\xc3\x7f\xfc\x82\x87\x37\x40\x00\x98\x5e\
+\xfe\x07\x3f\x76\x01\x11\x11\xf8\xd3\xc8\x70\xff\xfc\x9a\x70\x61\
+\xb2\xa2\x65\x7a\xcf\x3b\x3b\xc9\xe8\xe7\x00\xce\x42\x41\xb7\x1b\
+\x12\xc8\xbc\x85\x5e\xc5\xd6\x4b\xc1\x61\x0a\xa8\x0c\x1e\x0e\xd9\
+\xb5\x0b\xe4\x3a\x11\x23\x37\x43\xea\xe7\xc4\x61\xe5\x25\x87\x23\
+\xf6\xc4\x1e\x02\xae\x5c\x68\x34\xb4\xcc\xe1\xb5\x1d\xf9\xdb\xd7\
+\x64\xcb\xc5\x30\x17\x94\xb7\x92\x64\x88\x93\x2d\xac\xec\x3d\xc1\
+\x7f\xfb\x29\x1e\x80\x5e\xbc\x6d\xe9\x52\xca\xa7\x42\xa6\xda\xb4\
+\xc7\xb1\xf3\x0f\xcb\x68\x21\x1b\x13\x61\x0e\xab\xb1\x2c\x6f\x7c\
+\x95\x91\xbb\x5b\xb0\x2c\x29\xc4\x0c\x2e\xd6\x50\x34\x21\x2d\x0b\
+\x61\xa4\xc6\x2b\x9b\x1a\x9d\x1b\x1a\x8b\xae\x82\xa1\x1c\xe9\x9a\
+\x26\x60\x06\x87\xc6\x6b\x8d\x26\x08\x18\xf0\x6d\x23\x7b\x4b\x95\
+\x0b\xf4\xd4\x35\x26\x06\x00\xb1\x36\x19\xd8\xd6\x14\xe8\x0e\xe3\
+\x53\xa7\xdb\x65\x86\xf0\xcf\xe4\xd2\x93\xd9\x08\x9d\xd4\x01\x40\
+\x9a\x42\x18\x2b\x04\x74\x37\x47\x44\x39\xc2\x82\x51\x1e\x79\x21\
+\x3d\x40\xa5\xe8\xd9\x06\x3e\xcd\x8f\x1f\xde\x87\x43\x7e\xb5\x86\
+\x28\x2b\x2c\x11\xc8\xe7\x92\x24\x15\x4d\x67\xbf\x81\x63\x03\x92\
+\x06\x57\x3f\xc7\x75\x30\xee\xdb\xc0\x2d\x30\x00\xa2\xc2\xa1\x35\
+\xbd\xed\x56\xfa\xcb\xa7\x51\xc8\xec\x61\x21\x49\x69\xbd\xf8\xb8\
+\x2a\x8c\x7c\x48\xd5\x04\x35\x4c\x93\xa1\x56\x0c\x6e\x19\xc4\x3a\
+\xb7\xca\x09\xa3\x9a\x12\x19\x58\xbb\x52\x3f\xf8\xa6\x8c\x97\x8d\
+\x83\xd7\x68\x0c\x86\x04\x51\x95\x5c\xa3\x54\xd6\x7a\xf3\xae\x90\
+\xcc\x4b\xcc\x15\x33\xbb\x07\xec\x17\xc8\xaf\xaf\x7b\xf3\x87\x8a\
+\xc3\xca\x06\xc9\xa4\xde\x79\x32\x3a\x4d\x42\x66\x00\x70\x10\xce\
+\x1c\x2b\x91\x2d\x22\x39\x5c\xc9\x91\x4d\x33\xfa\xd1\x3b\x40\x27\
+\xd1\x48\x3c\x0b\x12\xf0\xa4\xd0\x90\x96\xb9\xd8\x33\xc7\xa6\xa6\
+\xcf\xd7\x06\xa5\x63\x90\x69\x38\xf4\xf2\x2a\x16\x12\xeb\x55\x8d\
+\x5f\xdf\xd7\x78\xc6\x92\x1f\xb1\x71\x9d\x49\xd2\xf6\xe3\x39\x21\
+\xd4\x05\x84\x2b\x53\xaf\xb3\x47\x38\x2d\x60\x9e\xdb\x71\x5f\x01\
+\xb2\x0d\x3a\xfc\xe1\x17\xe9\x63\xdf\xaf\x30\x5f\xdb\x2b\x3f\xe9\
+\xf2\x95\xd7\x3c\x7e\x73\x59\x30\x9f\xbc\x17\xbf\xf7\x15\xe2\xbb\
+\xe7\x96\x5d\xe6\xf7\x3e\x89\x2d\xcd\xaf\x4f\xf6\x82\x80\xab\x40\
+\x1d\xbb\xef\x10\x82\x79\x6e\xa7\x13\x3c\x83\xe0\x14\xfe\x89\xb1\
+\xff\xbc\x12\x31\xff\x02\xfc\x3f\x48\xb6\xe3\xb8\x55\x65\x22\xfe\
+\xc4\x77\xec\xcf\x12\xde\x09\x64\xd2\xa9\x25\x44\xeb\xf9\x0b\xd3\
+\x89\xc9\x5e\xfb\xb1\x7c\xc8\x3d\xe4\xbd\x7b\xf0\x4f\x20\xeb\xb1\
+\x25\x2f\x1e\xd7\x11\x1a\x0c\x4e\xae\x57\xe6\x49\xdc\xad\x2c\x1e\
+\x02\x45\x01\x1b\x45\x30\x27\xd4\x42\x0f\xea\xa1\xcf\x06\x98\xe7\
+\xf6\x99\xc4\x47\x00\x82\xcc\x5d\x48\x6e\xc3\x72\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x5d\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x14\x00\x00\x00\x14\x08\x04\x00\x00\x00\x27\x80\xd5\x86\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x0a\x15\x04\x24\x38\x0a\
+\x71\xa9\xaf\x00\x00\x00\xe1\x49\x44\x41\x54\x28\xcf\xb5\x92\xcd\
+\x4a\xc3\x40\x14\x85\xbf\x9b\x4e\xd3\x96\x3a\xd6\xb6\x8a\xd0\x12\
+\x14\xd2\x8d\x5b\x5f\xc4\x07\x77\xe5\x0b\xf4\x07\x0a\x8a\x8b\x2c\
+\x8c\x6d\x35\x0a\xc7\x45\x2d\x9d\x10\x09\x01\xe9\x59\x0c\xc3\xcc\
+\xc7\xbd\x97\x73\x2e\x9c\x5c\x79\x70\x86\x8a\xfe\xc2\x1a\x4a\x17\
+\xea\x53\x5f\xf1\xb7\xde\x19\x9d\x6a\xfd\x28\xc4\xfc\xfe\xd2\xc3\
+\xcb\x01\xf8\x00\x8d\xca\xd8\x1b\x8a\x19\x72\xcb\x8d\x62\x59\x88\
+\xba\xf2\x24\x3e\x26\x21\xe1\x8a\x31\xb0\xe6\xf3\xf8\xe3\x0e\xb3\
+\x78\xd4\x62\x40\xc2\x8c\x07\x52\xe6\x88\x9d\xbe\xd8\xd8\x36\x00\
+\x3d\xa0\x36\x6d\x1c\x2d\x2e\x49\xb9\xc3\x98\x30\x22\xc3\xa8\xb4\
+\x76\x18\x1b\x5e\x78\x65\x41\xc4\x92\x8c\x82\x77\x3e\x2a\xad\x6d\
+\x07\xa0\x6f\x9e\xe8\x72\xcd\x33\x8f\xac\xad\x38\x7a\x61\x65\x6b\
+\x64\x38\xee\x31\x56\x64\x14\xa6\xc0\xb4\x6a\x7c\x9a\x2a\xd5\xb8\
+\x36\xd2\xfd\xb3\xce\x35\x52\xaf\x41\xf2\xea\xca\x41\x5e\x8f\xe5\
+\x4d\xd7\xcc\xff\x7f\xa1\x7f\x00\x8c\x7c\x48\xb7\x46\x58\x24\x0f\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x3c\x30\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x40\x10\x06\x00\x00\x00\xfa\xf9\xad\x9d\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd6\x00\x00\x0d\xd6\
+\x01\x90\x6f\x79\x9c\x00\x00\x00\x09\x76\x70\x41\x67\x00\x00\x00\
+\x40\x00\x00\x00\x40\x00\xea\xf3\xf8\x60\x00\x00\x00\x06\x62\x4b\
+\x47\x44\xff\xff\xff\xff\xff\xff\x09\x58\xf7\xdc\x00\x00\x3b\x8d\
+\x49\x44\x41\x54\x78\xda\xec\x7c\x77\x54\x55\xd7\xb6\xfe\x3e\x85\
+\x73\xe8\x1d\x3b\x45\x41\x63\x01\xc1\x8a\x15\x30\xf6\x0a\x18\x63\
+\x57\x34\x1a\xbb\x80\x9a\xd8\x15\x34\x9a\x68\x2c\x18\x35\xc6\x12\
+\x01\x8d\xc6\x18\x0b\xa6\xa8\x89\x0d\x35\x1a\x4b\x54\x34\x31\x76\
+\xc0\x86\x14\x91\x22\x07\x4e\xdb\xe5\xcd\x39\xf7\x5a\xe3\x37\x72\
+\xff\xf9\xe5\xe6\xdd\xfb\xde\x1d\xef\xde\x64\x70\xbf\xac\x5d\x56\
+\x99\xdf\x6c\x6b\xae\x7d\xae\x56\xf8\xcf\x3f\xff\xd6\xff\xfc\x9f\
+\x53\x00\x45\xc9\x56\x00\x62\x14\x65\x5b\x36\xe0\x2e\x45\xb9\x96\
+\x03\x58\xa9\x28\x5f\x7f\x25\x08\x9a\x65\x8a\x72\xa1\x13\xe0\x53\
+\x45\xc9\x57\x60\xf9\x5a\x8e\xfc\x3a\x7f\x8e\xbf\xc7\xfb\xe1\xfd\
+\xfe\x47\x01\xfe\xd7\x09\x56\x90\x88\x08\x45\x39\x12\x04\x44\x69\
+\x14\xe5\xf8\x45\x58\xc6\x6c\x45\xb9\x74\x55\x10\xf4\x9b\x05\x41\
+\xea\x25\x08\xc6\x61\x82\xd0\x24\x41\x10\x9c\xfb\x0a\x42\x4d\x96\
+\x20\xb8\xcf\x14\x04\xbf\xf5\x82\xe0\x09\xef\xd8\x26\x09\x82\xf7\
+\x2d\x41\x78\x92\x09\xf8\x1b\x47\x7e\x9d\x3f\xc7\xdf\xe3\xfd\xf0\
+\x7e\xf9\x38\x7c\x5c\x3e\x0f\x3e\xaf\xff\x28\xc0\x3f\x8c\xe8\x54\
+\x84\x20\x45\x39\x5b\x0b\xf0\x9c\xa2\x5c\x4d\x86\xe9\x7e\x27\x08\
+\x67\xa6\x09\x82\x61\x28\x90\xb5\x43\x10\x5c\xe0\xcf\xf1\x03\x41\
+\xf0\x81\xeb\x96\xf7\x05\xa1\xfe\x49\x41\xd0\x01\x69\xc1\xd0\xd6\
+\xb4\x10\x84\x16\xf0\x27\xaf\x02\x5e\x80\x64\x61\xb5\x20\xb4\x9f\
+\x24\x9c\xd4\xdc\x13\x84\x8e\x56\x61\xaf\x62\x15\x84\xce\x36\x8e\
+\xfc\x3a\x7f\x8e\xbf\xc7\xfb\xe1\xfd\xf2\x71\xf8\xb8\x7c\x1e\x7c\
+\x5e\x7c\x9e\x7c\xde\x7c\x1d\xff\x51\x80\x3f\x4d\xf8\xf7\xa7\x41\
+\xe8\x5e\x40\x4a\x29\x58\xda\x73\x01\x58\x01\x0b\x1c\x21\x08\xd5\
+\x56\x10\xf6\x9b\x70\xaf\x44\x10\x02\xca\xc0\x22\x77\x01\x31\xf5\
+\x85\xba\x8a\xbf\x10\xd7\xd1\xfa\xda\xa7\x74\xb4\xe3\x91\x91\x27\
+\x8a\x5f\x3d\x16\x3d\x2f\x2c\x1e\x50\xf4\xe0\xd1\x8e\x5a\xfe\x69\
+\x19\x45\x39\x0f\x6f\xd6\xef\x9f\x7e\xa8\x38\xe1\xd1\xad\xc0\x47\
+\xfb\x0a\x4b\xb2\xf3\x4e\x36\x92\xbe\xbe\x5f\x32\x2d\x2f\x3f\xe4\
+\xfc\xa1\xb0\x92\x35\x79\x9e\x84\x3e\x79\xf1\xc1\xe1\x70\xbd\x41\
+\xee\x92\xa0\xd6\xfb\x0a\x8b\xcf\x3d\x4a\xaf\xff\x18\xde\x2b\xc9\
+\xdd\x52\x6b\x47\x5a\x46\xc9\xb3\x27\xfb\xbd\xde\x58\x3c\xe0\xf5\
+\xb0\xd2\x4c\xc7\x5f\x47\x9e\xe0\xe3\xf2\x79\xf0\x79\xf1\x79\xf2\
+\x79\xf3\x75\xf0\x75\xf1\x75\xfe\xdb\x2b\x80\xa2\x10\x78\x42\xec\
+\xad\x01\xbc\x29\x08\x9d\x3e\x03\x2b\xdb\x24\x08\xae\x8b\x05\xc1\
+\xe9\x8a\x20\x38\x14\x0b\x82\x6f\x01\x3c\x09\x16\x17\xe2\x2b\x34\
+\x85\x37\xde\x6a\x6f\x28\x6f\x5c\x1c\xef\x6c\x79\xc7\xbb\x70\xde\
+\x23\x1f\xbf\xa2\x0d\x47\x0a\x33\x1e\xae\x09\xaa\xb3\x6f\xa8\xe8\
+\x6c\xb9\x17\xb2\xf8\xc3\x1a\x97\xb9\xde\xb3\x9b\x7d\x3a\x62\xaa\
+\xe7\xcc\x86\xd6\x88\x6d\x9d\xfb\x7b\x9f\x0c\x7b\xa7\x43\x9f\xe0\
+\x21\xde\xae\x6d\x13\xa2\x97\x7b\x79\x79\xcd\x8a\x8c\xe8\x71\xc5\
+\x69\xa1\xf7\xa1\x4e\x69\xbd\xeb\xea\x74\xde\x6b\x3b\xad\xef\xdd\
+\x0c\x70\x4c\xa4\x4b\xf7\xcf\x9c\x16\x7a\x25\xb4\x9d\x18\x15\x0a\
+\xcf\x59\xc3\xda\x75\xd0\x07\x0f\xf1\x90\x1b\x9d\x8d\x18\xdd\xb9\
+\xbf\xcb\x2c\x1f\xc7\xa6\xcb\x47\x4c\x95\xa6\xd8\x5e\x84\xd4\xff\
+\xb0\xa6\x78\x5f\xee\xc6\x86\xed\xf6\x0d\x2d\xee\x9c\x77\xb8\xd6\
+\xb1\x0d\x47\xca\xed\x25\x25\x2e\x43\xde\xf1\xe6\xf3\xe4\xf3\xe6\
+\xeb\xe0\xeb\xe2\xeb\xe4\xeb\xe6\x72\xf8\xb7\x51\x00\x48\xaa\xb6\
+\x01\xc4\x09\xc2\x0f\x8f\x61\xf8\xd6\x82\x60\x9d\x0f\xee\x74\x0a\
+\x08\x4a\x07\x96\xd3\x1d\x9e\xd8\x07\x82\x1b\x22\x7d\x6d\x5f\xa3\
+\xb9\xd9\xf9\x44\x49\xec\x93\x72\x8f\x09\xef\x9b\x0a\xbe\x7b\xf0\
+\xc8\x3f\x6b\xf7\x2d\xf9\xb2\x3d\xaa\xd1\xde\x05\x0b\x3c\x02\xea\
+\x7f\x14\xea\xdc\x61\xab\x8f\x77\xeb\x69\x5d\xbe\x77\x5e\xe3\x9e\
+\xd5\x61\xdf\x00\x3b\xd8\xdc\x89\xb6\x2b\x47\x82\x2d\x1a\x8e\xb7\
+\x0c\x98\xe0\x03\xbd\x3a\x34\x1d\x36\x39\x12\xa3\x76\xc8\x8a\x29\
+\x38\xca\x90\x86\x9a\x29\x75\xa0\xbd\x29\x30\x79\xca\x3d\xc2\x98\
+\x29\x16\x40\xdf\x86\xdf\x4c\x1d\x0e\xb8\x22\xf8\xd9\xd4\xfb\xf0\
+\x5c\xf5\x1b\x77\xa6\xf4\x86\xa8\xdf\x24\x6c\xf1\xc4\x46\x40\x9d\
+\xad\xcd\xd3\x91\x10\xfd\xdd\x07\x46\xee\x1b\x50\x0f\x66\x3a\xb2\
+\x75\x4d\xe7\xcf\x60\xdc\xb5\xfe\xe3\x42\x3f\xef\xb0\x55\x13\x22\
+\x5f\x69\x34\x72\xc1\x82\xa2\x5e\x8f\x1c\x03\x0a\x77\xdf\x7a\x99\
+\xff\xb4\xad\x67\xe8\xfb\x26\xbe\x0e\xbe\x2e\xbe\x4e\xbe\x6e\x2e\
+\x07\x2e\x97\xff\xb3\x0a\xa0\x28\x1b\xa7\x00\x3c\x11\x84\xc6\xe0\
+\x1e\x75\x7b\x40\xa4\x53\xc1\x2a\x1e\x81\x5b\x0c\x14\x84\x06\xa5\
+\xc2\x38\xc1\x45\x88\x6c\xbd\xec\xa5\xe6\x69\x6d\xf7\xf8\x44\xa9\
+\x28\xfb\x51\xbb\x06\xb9\xe9\x3b\x0d\x15\x86\x36\x8d\x92\x46\xe7\
+\xfa\x48\x6f\x4c\x6f\x25\xf9\xb4\xf1\x18\xdb\xee\x68\x9f\x4b\x20\
+\xba\x1f\x5a\x2d\x1b\xd9\x01\xc4\x79\xb4\x71\xad\x71\x41\x40\xdc\
+\x17\xf5\x5b\x8c\xfa\x1c\xa3\xaf\xdf\xc4\xb8\x72\x40\xad\x97\x67\
+\xf7\xdf\xa0\xf7\x59\x6e\x72\x87\x7d\x80\x1a\x97\xab\x11\x69\x18\
+\x95\x9d\xa6\x35\xbf\x0a\xf8\x8d\xe3\xaa\x37\xe6\x32\x9c\x44\xd7\
+\xa7\x36\xbb\x4a\xcf\x9d\x08\x8f\x05\x8c\x77\x2b\x8b\xc4\xf7\x5e\
+\x7b\x0a\xdd\xab\xa0\xbf\xe5\xbe\xcf\xe3\x3c\x61\xe6\x13\xea\xd5\
+\x1d\x3d\x00\xc6\x5b\x19\x5c\x35\x6e\x03\x28\xc8\x96\xb0\x75\x23\
+\x3a\xc2\x4a\x96\xb4\xf9\xa9\xf7\x31\x41\xf0\x6a\xd1\x4c\xd7\xca\
+\xcf\xa7\x8d\xf1\x3b\xa7\x5f\x1b\xed\x1b\x9d\xfb\x32\x3f\x5f\x08\
+\x98\x9b\xbe\xb3\x74\xcd\xf3\xc1\x1e\x4e\x89\x12\x5f\x27\x5f\x37\
+\x97\x03\x97\x0b\x97\xd3\xbf\x9c\x02\xfc\x75\x17\x7f\xea\x4b\x58\
+\x6c\x2b\x41\x08\xfb\x09\xe8\xf2\x85\xff\xee\x09\x62\x1a\x07\x49\
+\xd6\x58\xb0\x88\x10\x53\x8b\x0a\x77\x63\xe3\x01\x8b\x9f\x07\xdd\
+\x33\xd7\x99\xf0\xe9\x73\x6d\x67\xa1\x5f\x40\x8b\x09\xb7\x7d\x6e\
+\x34\xbe\x14\x91\xec\x9e\xed\x1a\xda\xfa\x7c\x9f\xe3\x60\xd1\x3f\
+\xb7\x78\x39\xa2\x03\x8a\xc8\x7f\xf1\x50\x20\x4c\x3b\xc7\xfb\x49\
+\xcf\xa1\xb8\x61\x73\xdd\x11\x11\x0e\x23\x7d\x62\x8c\x0c\xa4\x3c\
+\x5c\x1f\xe2\xd3\x86\x96\xf6\x9b\x6b\x28\x00\xa8\x80\xa3\x13\xe1\
+\x2d\x87\x2d\x84\xdf\x38\xbc\xa7\xb6\x75\x9b\x09\x2b\x75\x6a\xfb\
+\x13\x87\x89\x6a\xdb\x70\x91\x70\xbc\xa3\x23\xeb\xa7\x01\xeb\x37\
+\x98\xc6\x71\x0c\xcc\xc6\xbb\xae\xfd\x23\x3c\xe1\xee\x04\xef\x65\
+\x3d\x61\x45\xba\xb7\xea\x2f\x1c\x06\x2b\x75\xf0\x6b\xba\x6f\x38\
+\x50\xe8\xdc\x29\x22\xa2\xb7\x01\x56\x9a\xd1\x24\xa6\xe5\x1b\xee\
+\xd9\xfa\xcd\xda\x5f\x03\x0a\x26\xdc\x2e\x0c\x7b\xf8\x41\xdd\xef\
+\x3e\x7d\x6e\x3a\x5d\xb9\xc8\x98\x38\x60\x31\x97\x03\x97\x0b\x97\
+\x13\x97\xdb\x3f\x3b\x44\x68\xff\x29\xdb\x34\x9a\xf0\xe9\x3e\x28\
+\x26\xf8\xdb\x0f\xf4\xf5\x82\x3b\x20\x16\xdf\x3d\xc2\x51\x65\xa1\
+\x20\x34\xef\xf4\xf2\x97\xe7\x5f\xb9\xfd\x30\xf9\xe7\xca\xd3\x25\
+\xf3\xea\xc6\xae\xaa\xe3\x31\xa1\xf6\xae\xc6\x73\x82\xf7\xb8\x9d\
+\x09\x6b\x10\x95\x07\x22\xf8\xb9\xc5\xd7\xf1\x9f\x80\x60\xbb\xd7\
+\xdf\x1e\x9b\x0e\x13\x6d\xe4\x3e\xb6\xc3\x56\x4c\xa3\x8c\xf7\x1a\
+\x8e\xc7\x1d\xb9\x6e\xb3\x67\x36\x11\x75\xde\x30\x8c\x86\x5e\xa6\
+\xfd\x86\xcd\x21\x8e\x20\x43\x76\x27\x3c\x2b\x9f\xa6\xab\x15\x72\
+\x3a\x61\x8a\x34\x96\x30\x5c\x3e\x43\xe8\x81\x48\xd7\x13\x09\x6f\
+\x4a\xeb\xe9\xbd\xc7\xf2\x0d\xc2\x23\x72\x00\x5b\x5c\x0a\xfd\x6f\
+\xb2\xe6\xa9\x3a\xae\x71\x2e\xce\x43\xbf\xc7\xf3\x2c\xce\xcb\xf1\
+\x72\xd0\x2c\x98\xa7\xb7\x7b\x54\x47\x58\xa9\xae\xaa\xee\xfc\xd8\
+\xa5\x14\x82\xb6\xc6\xc7\xc3\x3e\x61\x71\x98\x5b\xd7\x19\x82\xe0\
+\xb1\xaa\x4e\xbf\x10\x53\xf0\x9e\xea\xbd\xa5\x43\xea\x5f\x58\x55\
+\xe7\xd5\xec\x82\x22\xf7\x39\x93\x7f\xe6\x72\xe1\x72\xe2\x72\xe3\
+\x72\xe4\x72\xfd\x97\x55\x80\xff\xa7\xa9\x5f\x79\xa8\xc4\xcb\xe0\
+\x90\x8d\x9f\xc1\x7f\x43\xac\xf3\x6b\xac\xa0\x53\xeb\x10\xd6\xf5\
+\xc5\xd1\xdc\x97\xde\x91\x8b\x5c\xe4\x04\x4b\x56\x5d\xaf\x49\x77\
+\xbd\xa3\x82\x8e\xb5\x18\x66\xec\xed\x34\x25\xd4\xb5\xa7\x09\xf3\
+\xe5\xa0\x8a\x01\x60\x71\xba\x37\x3d\x6e\x76\xb0\xc0\xdb\x6f\x1a\
+\x23\xfd\x5f\x11\xe1\xbf\xb9\x8c\x24\xc1\xef\x12\x32\x55\x62\xc5\
+\x75\x2a\x81\xf6\x03\x84\x8a\xed\xaa\x4a\xac\xed\x01\x61\x84\xbd\
+\xb9\x7a\xdf\x46\xef\x09\xe1\xf6\x13\x84\x81\x76\x17\x95\x58\xd6\
+\xbe\x69\x2f\x21\x8c\x66\xd7\xc3\xb1\x3f\xea\x77\x3b\xeb\xaf\x33\
+\x61\x90\xad\x9e\xfa\xbe\xcd\x99\xdd\x7f\x48\x78\x44\x82\x95\xa2\
+\x6f\xd0\x54\xe0\x3c\xb5\x5f\x38\xef\x40\xdb\x35\x36\xf5\x0f\x40\
+\xc5\xf5\xb8\xd1\x71\x15\x86\x8e\x06\x3b\x07\x8c\xc6\xdc\xa4\xc5\
+\xf6\x9e\x2b\x40\x11\xda\x37\x3a\xd7\xec\xaa\xb1\xb7\x32\xda\xde\
+\xa8\x5e\x87\x49\x77\x8b\xf4\xf9\x05\x3e\x89\x8b\x5c\xb8\x9c\xb8\
+\xdc\xb8\x1c\xb9\x5c\xb9\x9c\xff\x05\x3d\xc0\xa9\xbd\x30\xc1\x86\
+\x82\x50\xab\x1b\x2c\xd3\x00\x4b\xae\x44\x4d\x96\xae\x49\xbb\x34\
+\x42\x78\x7e\x81\xf7\xc3\xb9\xbe\x0d\x96\xb7\x72\x68\xa5\x5f\x5d\
+\x67\x73\xaf\x49\x1e\x63\x83\x8f\x44\x0c\x14\x82\x0c\x35\x4d\x7b\
+\xf7\xf4\x83\xa7\x75\xb5\xcd\xd1\xa9\x30\xa1\xf1\x4e\xd3\x82\x3f\
+\xc0\x98\xac\x6f\xe3\xfa\x88\x96\xda\x4d\xce\x50\x09\xb6\x4c\x45\
+\x94\x13\xcd\x1f\x51\x7b\x6c\xcd\x97\x84\x89\x35\x05\x84\x19\x35\
+\xfb\x08\xb3\x2c\xf3\x08\x0f\x5b\xf6\xab\x04\x5a\x9b\x13\x8e\xb3\
+\x9e\x20\xcc\xb4\x75\x22\x0c\xb4\xff\xa2\x12\xc9\x30\xd5\x3e\x8d\
+\x70\x83\x8d\x29\x8e\xb5\x1e\xe1\x19\xeb\x65\xc2\x1b\xe6\xaf\x68\
+\xfc\x0c\xb3\x99\xda\x49\x35\x73\xd9\xf8\x91\x84\x4b\xcd\xf7\x00\
+\x80\x5b\xeb\x7e\x9a\x77\x84\x72\x03\x73\x0c\x5d\xb0\xcb\x41\x58\
+\x57\xbc\x53\xb3\x90\xdb\xb0\xce\x8d\xbe\x2b\xa3\x13\xc0\x33\x3c\
+\x6f\xdc\xa3\x17\xd0\xeb\xf6\x4b\x48\x7c\xcb\x03\x42\x90\xf1\x5d\
+\x87\x39\x75\xcb\x7a\x4d\x2a\xba\x9b\xfb\xb9\x5f\xff\xe5\xad\xb8\
+\xdc\xb8\x1c\xb9\x5c\xb9\x9c\xff\x65\x14\x40\x51\x76\x1e\x07\xb8\
+\x05\x51\x0f\x73\xeb\xef\x91\x42\xc8\x72\xbd\x95\x77\x94\xa7\x42\
+\x87\xe6\xfd\x0a\x2f\xe4\xb6\xf7\x89\x5a\x72\xd0\x68\x31\x7c\x58\
+\xdb\x18\x69\x71\xeb\xda\xd0\x2b\x3c\x1d\xb3\xec\x90\xb7\x62\x32\
+\x31\xff\xf5\x9a\xdd\xa6\x0a\x05\x65\x78\x51\x6b\x2f\xe0\x78\xcd\
+\x2d\x6d\x37\x72\xdc\xd9\xe6\x3b\xe4\x88\xe5\xaa\x5f\x49\xf0\x65\
+\x55\x3f\x11\xe6\x55\xbd\x26\x0c\x30\x85\x10\x46\x57\xab\x44\xa4\
+\x9b\xf7\x51\x3b\xdf\x5c\xa4\x7a\x00\xeb\x56\x95\x10\xdb\x6a\x95\
+\x40\xbb\x4a\x68\xb4\x4a\xb8\x10\x6b\x3f\x45\x98\x20\x8a\xec\xfa\
+\x4b\xc2\x7c\x55\x01\x84\x68\xdb\x15\x6a\x0b\x56\x15\xcb\xad\x4d\
+\x09\x0f\x9b\xef\xd2\x38\x63\x6b\x3e\x54\xc7\x37\xad\x40\x94\xf2\
+\xaa\x82\x19\xfe\xa6\xce\xaf\xaa\x2d\xfa\x17\x39\xc7\x6c\x24\xff\
+\x00\xff\x00\xee\x32\x5c\xac\xf5\x33\xac\xfb\xb5\xe7\xe3\x36\x8d\
+\x40\x62\xa6\x86\x0d\x63\x92\x41\x7a\x27\x1b\xed\x46\xbb\x77\xbc\
+\xe4\xa8\xab\x3d\x32\xd2\x52\x32\x2f\x7f\x85\x6f\xe2\x92\x83\x5c\
+\x8e\x5c\xae\x5c\xce\x5c\xee\xff\x4b\x0a\x40\xdb\xb9\x2f\xd5\x6d\
+\x4b\x60\x04\x4c\x08\xb6\x35\xe8\x30\x3d\x12\x84\x76\x8a\x0f\x64\
+\xb4\x8d\x5f\x6c\xca\x0d\xf7\x5a\x3d\x47\x67\x58\xa0\x1f\xeb\xdb\
+\x2f\xf2\x9e\x5b\x97\x80\x25\x2d\x1e\x02\xf1\x9b\x83\xc6\x77\xb6\
+\xc3\xc0\xe7\xdc\xcb\x9b\x4f\x45\xe2\xf5\xbe\x6e\x3b\x41\xa7\x3d\
+\x95\x38\xdb\x74\x35\x72\xbf\x0e\x26\xc1\xcd\x2c\xa7\x92\x89\x3c\
+\xb3\xa2\x1b\x09\x34\xbd\xf2\x13\xa6\x08\xdf\x13\x26\xd6\xac\x54\
+\x89\xb5\x4c\x26\xcc\x01\x4b\x25\xb4\x75\x24\x2c\x63\xa1\x20\x10\
+\xfb\x25\xcb\x3e\xa0\x12\x0e\xae\x9f\x62\xbd\xcd\x46\x78\xd6\x4a\
+\x6d\x21\xd5\xb6\x83\x30\xc9\x7e\x80\xbd\xb7\x88\x85\x00\x67\x1a\
+\x2f\xdb\x3a\x82\x8d\xb3\x8d\x30\xdf\xbc\x8a\xae\x0f\xaa\xf9\x94\
+\xda\x01\x26\x5f\x55\x41\x5f\x0f\x46\x84\x79\xa7\x12\xa6\x57\x8c\
+\xc3\x51\x61\x5d\xad\x61\x9d\x31\x4a\xaa\x6d\x1a\x2a\x84\x6e\x85\
+\xeb\x4c\x90\xc3\x37\x6e\x52\xf3\x6d\x48\x69\x60\x62\xe7\x87\x40\
+\xef\xfd\x80\x84\xe6\x3f\x82\xad\x6f\x37\x3c\xf7\x0b\x8d\xbc\x57\
+\xec\x92\x1f\xea\xbd\x71\x8e\x8e\xcb\x95\xcb\x99\xcb\x9d\xf3\xf0\
+\x97\x15\xe0\xaf\xc7\x7a\xff\x30\x78\xfd\x29\x4c\x02\xc4\xe0\x5c\
+\x4f\xf8\x54\x86\xdc\x39\xa0\x65\xc9\xb4\x67\xad\xdd\xea\x8c\x72\
+\xd1\x6c\x94\x37\x7b\x4f\xec\xf5\xc2\x75\x5d\x7d\xe7\xc6\x70\x47\
+\xbf\x37\x20\xad\xdd\xef\x20\x80\xe5\xee\xee\x21\x2b\xd0\x12\x74\
+\xb3\x1d\x17\x30\xcb\x8d\xc4\x14\x4d\x1a\x53\x1e\x4e\x16\xf4\xa8\
+\x74\x31\x40\xb2\x34\xa8\x3c\x96\xda\x87\x5f\xcf\x46\x94\xc3\xaa\
+\x8f\xb2\xe7\x2f\x11\x66\x58\x3a\x32\x42\xa6\x31\xa2\xae\xaa\x04\
+\xab\xc4\x09\x1b\x6c\xa3\x54\xe2\xed\x1f\x33\x8b\x5f\xa8\x86\x02\
+\x5b\x3d\x96\x1b\x94\x10\x2a\x4c\x51\x62\xd9\xf5\x04\x22\x48\x00\
+\xa2\xfa\xa9\x0a\x81\x0a\x44\xd8\x5f\xf5\x14\x36\x2b\xe1\x0d\x6b\
+\x5f\xc2\x74\x0b\xad\x43\xce\x32\x6f\x21\x74\x37\xbd\x47\xa8\x7a\
+\x84\x08\xa9\x6b\x45\x16\x60\x8c\xf4\xea\xd5\x2b\x54\x37\xb9\x2b\
+\x2a\x06\x85\xaa\x61\x28\x07\xed\x26\xc7\xd5\x18\xdd\x5d\xc4\xc6\
+\x10\xca\x74\x2b\xfc\xa5\x76\x80\x2e\x23\xeb\x4f\x0f\xd9\x0c\x12\
+\x0e\x10\xa6\xf9\x8c\xe9\xf5\xa2\xb4\x71\xc1\x69\xb7\x57\xa3\x5c\
+\xb8\x9c\xb9\xdc\x39\x0f\x9c\x97\xff\x01\x0f\xf0\xfb\x64\xb4\x5b\
+\xb0\xe5\x50\xd0\xd3\x5a\xb0\x50\xb0\x9b\x5a\x2f\x5e\x3f\x2c\x0b\
+\x34\x3c\x8f\x56\xac\xef\x56\x65\x7b\x0a\x09\x1e\x6e\xa5\x7e\xcf\
+\x1a\x3c\x10\x82\x1c\x4c\x0d\xba\x84\x07\xe2\x14\x3d\x69\xb3\x23\
+\x78\xea\x26\x38\x37\x43\x84\x98\x7c\x5f\xb5\xe8\xd7\xe3\x55\x82\
+\xcb\xca\x50\x20\xd2\xd8\xf2\x34\x6a\x9f\x06\x8b\xa1\x58\xcf\x88\
+\x4f\xb3\x7c\xc6\x5c\x71\x47\x46\x44\x27\xc2\x64\x44\x22\xf6\xa4\
+\x4a\xa4\x9d\x59\xbe\xbd\x84\x3d\xb7\x83\x29\x48\x7f\x46\x7c\x0b\
+\x44\x81\x2b\x4c\xb4\xed\x04\xbb\xee\x4c\x18\x64\xef\xc7\x92\xc1\
+\x1d\x2c\x34\x5c\x25\x8c\xb3\x9f\x60\x78\x52\x1d\xcf\xce\xc7\xb5\
+\x31\x45\xfc\x9a\x29\x44\x11\xa2\x1c\x5b\xfd\x3e\x5b\x1f\x86\xae\
+\x65\x40\x7c\x32\x10\x1d\x24\xcd\x2c\x3b\x44\xd7\xa5\xca\x56\x54\
+\x14\x4e\xb0\x3a\xc1\xf5\x08\xfd\x5b\x4e\x4e\x28\x27\xf7\xb2\x10\
+\x13\x6e\x77\x1b\x3c\x6c\x09\xbb\x11\xd7\x85\x7e\x6d\x1b\x94\x08\
+\x41\xb6\x8f\xaa\xd3\xbd\x9c\x12\x3c\xaa\xd6\x96\x1d\x30\x86\x46\
+\x2b\x5c\xee\x9c\x07\xce\xcb\x3f\x4d\x01\x68\x1b\x42\x35\xec\xd7\
+\x30\x6d\x1d\x44\x61\x3d\xa4\x6e\xee\x67\xe4\x5a\x72\x91\x10\x19\
+\xd2\xb6\x62\x77\xe1\x39\xcf\x16\xd3\x17\xb9\xd4\x75\x6f\xe9\xb3\
+\xdf\x18\x69\x18\x5a\x77\x44\xd3\xf9\x30\x40\x77\xef\x39\x98\xfc\
+\x08\x71\xfa\xb6\xae\x03\x60\xa1\xc9\x9a\x08\x19\x09\xae\x10\x54\
+\x8b\x3b\x22\xe7\xd4\x1c\x87\xeb\xe3\xe4\xc4\xaa\x36\xe4\xf2\xe5\
+\x6a\x3f\x12\x50\x92\x79\x18\x61\x8a\xb5\x83\x4a\xa8\xf5\x63\x96\
+\xdd\x77\x26\x8c\xb1\x8d\x64\x04\x9d\x64\x84\xab\xf7\x63\x98\x0b\
+\x8f\x66\x84\x97\x03\xa1\xf4\x1e\xb3\x74\xc5\xf6\x23\xc3\x2b\x0c\
+\xaf\x32\x3c\xc1\xc6\xe1\x0a\xd1\x89\xbd\x37\x8a\x29\xd0\x1a\x86\
+\x3b\x98\x02\x9d\x64\x9e\x85\x85\x0a\xd6\xbf\x07\xeb\x67\xbd\x65\
+\x0a\xe1\x20\x73\x2f\x35\x27\xa8\x6e\x4c\x8a\x10\x4b\x21\xec\x31\
+\x24\xad\xbd\x09\x03\x49\x81\x96\x09\xad\x94\x70\xda\x56\x3e\x77\
+\x73\xc3\x42\x96\xe7\xae\xc6\x10\x5a\xf4\x3d\xea\x4e\x6d\x02\x1e\
+\xcf\xe5\xa6\xfb\x14\xdf\x19\xc6\xc8\xd7\x01\x25\x2f\x3d\xdf\x9c\
+\xbe\x86\xcb\x9d\xf3\xc0\x79\xe1\x3c\xfd\x13\x3c\xc0\xd3\x9b\x58\
+\x24\x11\x04\xd3\x10\x2a\x61\x2e\x52\x40\xfc\x75\x56\x95\xcc\x7c\
+\xf6\x8b\x9b\xc7\xdb\xed\xf4\x9b\xf5\x33\xdc\x4c\xc1\x3e\x8e\x53\
+\x7d\x9f\x07\x5c\x87\xa9\xfc\xe6\x37\x24\x58\x07\x6f\x6c\x30\xd6\
+\xf6\x7a\x0c\xb8\x4b\xbb\x5b\x1f\x42\xc9\x50\xa5\x6e\x36\x4e\x51\
+\x53\xa9\x45\x8c\xd3\x24\x0b\x09\x54\x15\x1f\x27\xae\x05\x3c\x8b\
+\x16\xce\x5c\xec\x54\xc2\x58\x24\x84\x88\x9e\x4e\x18\xce\x88\xf1\
+\x60\xed\x40\x9e\xd5\x73\x0b\xb7\xaa\x84\x7a\x02\x21\x44\x94\x55\
+\x55\x94\x7c\xeb\x6a\x76\x5f\x7d\x5e\xb1\x3a\x33\xec\xc8\xae\xd7\
+\x65\x49\xe0\x42\xd6\xdf\x54\xa6\x18\xdb\x59\x9b\xf5\xc7\x43\x88\
+\x7d\x14\xbb\xdf\x8f\xcd\x4b\x1d\x27\x8e\xcd\x27\x16\x15\x8b\x72\
+\x87\xe6\x44\x74\x39\x5a\xba\x90\xa5\x84\x8b\xa3\x89\xa2\x08\x65\
+\x3d\xc9\xc1\x4b\xfb\x2d\xe0\x38\x8d\x46\xf7\x01\xc8\xe9\x9c\xf6\
+\x96\x03\x86\xca\x4c\xc3\x0b\xaf\xf1\x40\xd0\x07\xbe\x6f\x85\x6c\
+\xc2\x8a\xa3\xdf\x1e\x7f\x09\xec\x7d\x94\xbe\x99\xfb\x67\xc1\xba\
+\xd2\xf6\x05\x13\xdc\xf3\xdf\x6e\xc7\x79\xe0\xbc\x70\x9e\xfe\x61\
+\x0a\xa0\x28\x29\x4c\xa3\x1e\xfa\x02\xad\x40\xa9\x01\x68\x72\xbb\
+\x61\x8d\xb1\x7d\xab\xf9\xa6\xc9\x50\xcb\x7b\x55\x76\xd7\x5b\x43\
+\x42\x9c\x6d\xee\x01\x3e\x70\x57\xff\x9b\xef\x9e\x80\x41\x58\x52\
+\x75\x3e\xe0\x0b\xae\x0f\x68\x6e\x44\x85\x9a\x71\xda\x5d\x86\x95\
+\x34\xe4\x60\xc7\xfd\xe8\xf2\xb4\xde\x4e\x3f\x02\x7a\x6a\x5a\xe9\
+\x1b\x63\x4a\x06\x2a\x90\x81\x34\x0b\xb1\x64\xb1\xd1\x4a\x0c\xc5\
+\xe8\x4c\xc1\x83\x59\x98\x27\x13\xbc\x62\x6b\xce\xd0\x99\x65\xf9\
+\xdc\x82\x47\x30\x02\xfb\x12\x96\xa9\x84\xca\x39\x56\x2b\xb5\xf3\
+\xac\x57\x98\x22\xfc\x40\xd7\xd3\x2c\x80\xe4\x61\xb6\x32\x17\xce\
+\xb3\xfd\x1f\x58\xfb\x3e\x53\x90\x66\x84\xd9\xac\xff\x72\xd6\x7f\
+\xa0\x75\xdb\x1f\xe7\x41\x48\x6d\x52\x64\x75\xde\x09\xe0\xe9\x9a\
+\xe3\xd3\xa0\x20\xfd\x00\x8f\x08\x99\x12\x84\x00\x92\x0c\xca\x27\
+\x4e\xf3\xad\xb1\x37\xc9\xe5\x1d\xc7\x22\x80\x18\x28\x30\xfd\x0c\
+\xd7\x1b\x41\x8e\xf4\x11\xca\xd1\x69\xa4\xef\x7b\x58\xf9\xf4\xe9\
+\x81\x67\x8d\x4e\xcd\x3c\x32\xbc\x37\x0a\x82\x2d\xd6\x94\xea\xba\
+\x7f\x48\x08\xe7\x81\xf3\xc2\x79\xe2\xbc\xfd\x03\x3c\x40\xb7\x16\
+\x18\x99\xe1\xd1\x79\x30\x48\x7b\xa1\xbb\x74\x0f\x62\xcf\xde\x57\
+\x96\x82\xb7\x5c\x83\xe2\x63\x8c\xe3\x8c\xb3\x9c\x67\xba\x8f\x35\
+\x18\x3c\x92\x6a\x6d\x81\x09\xcf\x76\x5b\xe7\x87\x1a\xfc\x44\x6f\
+\x22\xe2\x97\x69\xc7\xeb\xf5\x34\x54\x23\xc7\x8e\x84\xc1\xce\x48\
+\xe4\x2c\xcd\x72\x63\x21\x7d\x42\xd1\x4d\x13\xaf\xd6\xd9\xd0\x32\
+\x78\x8c\x56\xce\x82\x20\xbf\x06\x4c\x60\x2e\xd2\x43\x29\x27\x0b\
+\x8e\x55\xca\xc9\x32\x33\x99\xe5\x3e\x96\xf3\xad\x3c\x3b\xef\xcb\
+\x08\x2c\x56\x09\x23\xa4\xdd\x01\x23\x72\xbe\x7a\xdd\xb2\x9a\xdd\
+\xff\x91\xb5\xf7\x33\x5c\xa5\xbe\xaf\xde\x97\xf3\x2d\xea\xfd\xc3\
+\xd6\x7b\xec\xfd\x62\x66\xd1\x38\x6e\x05\x53\x84\x23\x30\x5e\x27\
+\xca\xf2\xcb\x6d\x18\x82\x02\x15\x05\x3d\x88\x02\x61\x1a\xfb\x57\
+\x32\x71\xde\x2c\x94\x94\x10\x26\x88\x6b\xd1\x00\xf0\x0f\x3d\xa2\
+\xb6\x95\x61\x28\xc9\xe5\x57\x67\x92\x8f\x6e\xb0\x93\x13\x79\x84\
+\xe5\x0e\x73\xa9\x50\xad\x43\xbb\xd6\x7e\xe2\xe6\xe6\xf7\x36\x78\
+\x80\x15\x9e\x19\xb5\x6a\xc0\x23\x64\x1a\x8f\xbb\x6c\x71\x1f\x5b\
+\x2e\x16\xba\xba\xd5\x8a\x8f\xe1\xbc\x70\x9e\x38\x6f\xff\x00\x05\
+\x70\xf8\x02\x23\x12\xd6\xe4\x20\x12\x9d\xb4\xbf\x10\x77\x0b\x6f\
+\x07\x94\xd9\x72\xaa\x1f\x38\xaf\xed\x33\xc5\xf1\xb8\x73\x27\xb7\
+\x6b\x30\xed\x6f\xdd\x07\xfa\x6c\x42\x8d\x35\xde\x35\x4e\x46\xd7\
+\xaf\x49\x56\xca\x91\x20\xcd\x13\xed\x6b\xd2\xf8\x6e\x0e\x7e\x84\
+\x82\x7e\x0f\x6d\x5c\x72\xe4\x96\x8c\x88\x6d\xaa\x45\x9a\x2f\x11\
+\x66\x59\x0a\xff\x90\x65\xe7\xa3\x25\x2a\x15\xd0\xae\x8b\x16\xa4\
+\xe4\x58\xac\xa4\x18\x0a\x5e\xb7\xce\xb7\x4e\xa9\x6e\x0b\x72\x8c\
+\xdf\x72\xec\x08\xa4\x40\x13\x37\x4f\x9b\xb6\x01\x1c\xe0\x6f\x9b\
+\x7e\xbb\xfd\xe0\x6b\x14\x24\xec\x16\xd0\x82\x33\xe5\x68\x8b\x85\
+\xea\x0b\x89\x96\x3a\x88\xca\x19\x8b\x23\x43\x0b\xe1\x7a\x6b\x1d\
+\xca\x49\xa2\xa0\x8d\xef\x25\x59\x9a\x62\x3f\xb7\x6f\xdf\xdf\x01\
+\xfd\xee\x99\xd6\x3f\x2d\x0e\xc6\x19\xbf\x65\x4b\x56\x0c\x8c\x3b\
+\xc5\xb2\xc0\xd4\x0e\x1d\xbd\x0c\x1e\x83\x88\xce\x47\x05\x51\x1e\
+\x2b\x39\x2c\x94\x30\xcf\x23\xe7\xb3\x90\x70\xd8\x52\x44\x98\x41\
+\x75\x01\x78\xce\x82\xcf\x05\x29\xa9\xd2\x35\x54\x06\xf0\x08\xdd\
+\x49\x3e\x5e\x0e\x4d\x48\x6e\x8f\x75\x6d\x30\x14\x68\x36\x08\x11\
+\x78\xd5\x70\xd4\xd8\x1b\xf0\x5b\xb7\x44\xac\x06\x18\xdf\x70\x1e\
+\xe9\x0a\xdb\x67\x7b\xed\x9a\x02\x67\xef\x3e\x53\x38\x2f\x9c\x27\
+\xce\xdb\x5f\x54\x00\xda\xe7\x1f\x27\x9a\x04\xdb\x1c\x70\xec\xdf\
+\x09\x23\x94\x2f\xc1\x0c\xd3\xca\x6e\x17\x6b\x9c\x3a\x75\xbd\xae\
+\xff\x44\xbb\xcf\x78\xce\x7b\x8e\xc3\x24\xe7\x7a\xee\x37\x70\x58\
+\xa7\xba\x4e\xab\x71\xc2\xda\x5d\xe2\x0c\x74\xe9\xb0\x70\xd4\xfc\
+\x7c\x25\x42\x2c\x65\xc9\xd9\x22\xcc\x82\xe5\x70\xaa\xa0\x55\x48\
+\xeb\x2b\x1b\xa2\xa5\x4b\x52\x59\x3a\x09\xea\xf0\x6b\x2d\xab\xa8\
+\x75\x60\x8a\xc1\x2d\xee\x1e\xdf\x7f\x33\x57\x3e\x15\x5b\xf2\x18\
+\xac\x08\x6e\x7a\x6f\x6b\xdf\xa3\xb0\x3b\xb8\x78\xf1\x4a\x5f\xdc\
+\x36\x46\xe5\xc5\x08\xc3\x57\x01\x61\xfa\xa9\x25\x9b\xa0\x20\x53\
+\xf0\xfe\x8b\x8b\x2f\xe6\x92\xc2\x94\x9b\xef\xa1\x65\x82\xe0\x57\
+\x21\xca\x59\x0c\xb3\x21\x14\x50\xdb\x8c\xed\x58\x45\x81\x36\xbe\
+\x57\x50\x08\xb6\xf4\xce\xee\xc9\x3f\x6e\x02\x91\x76\x0d\x8b\xc9\
+\x1a\x0e\xf3\xba\xd4\xfb\xea\xa8\xf2\x1c\x41\xd8\x5c\xb0\xb5\xc3\
+\x51\x3f\x9a\xc7\x52\xcb\x7c\xb6\xad\x1b\xce\xea\x12\xab\x98\x02\
+\x5f\xe1\xa1\x84\x25\xb5\x5b\x09\xcf\x54\x3d\xa3\x6d\x6f\xd7\xf2\
+\x24\x52\xc8\x31\x15\x98\xbb\x47\xc8\x87\xaa\x7b\xb2\x10\x52\x8f\
+\x14\x64\x9c\x14\x8a\x9b\x51\xf0\x80\xcd\x29\x77\x7a\x53\x1a\x08\
+\x84\x75\x73\x9c\xe2\x3c\x0d\x93\x43\x97\x45\xee\x63\x00\x9d\x74\
+\xc3\x1c\x7b\x7b\xcf\xa9\xf0\x2a\xb9\xe9\x9c\xd5\xf5\x3a\xe7\x89\
+\xf3\xc6\x79\xfc\x0b\x1e\xe0\x8d\xd9\x78\x72\x06\xb6\xbd\x18\x5c\
+\x4a\x13\x69\xb8\x0c\x95\x77\x5f\x93\xe5\xf6\x6b\xbd\xe3\xe8\x98\
+\x64\x87\x3b\x60\xe9\xc3\xe0\xee\x53\xc7\xf9\xce\x25\x48\xbc\xfe\
+\x6d\x25\x9c\x92\xb9\x1c\xda\xb6\x85\xcb\x5d\x5f\x7f\x81\x0b\x94\
+\xdc\x2a\xc9\xc5\x4b\x33\xca\x96\x02\x78\x8a\x6b\x8a\xd0\x25\xc7\
+\x8a\x2d\x9e\x53\x68\x10\x1f\x15\x9a\xe9\x7e\x83\x8a\x64\x44\x39\
+\xc1\x5c\x9b\xb9\x64\x47\x86\x23\x98\x67\xa8\x43\x98\x81\x96\x59\
+\x79\xa4\x62\x19\x3e\xff\xd5\xe5\xaf\x46\x5c\x80\x0f\xb3\x9a\xad\
+\x0e\x4c\xf3\xeb\x89\x5f\xed\xd9\xa7\x97\x95\x01\x4e\x91\x3e\xc7\
+\x4a\xdf\xb1\x76\xc7\xe7\x5f\xed\x47\x96\x2d\x5b\x8c\x6a\xe9\xd6\
+\x3c\x99\x65\xe7\x6f\x10\x46\xb1\xd2\xee\x52\xcb\x64\x7a\xae\x0c\
+\xc7\x3f\xfa\xde\x71\xc7\x2b\x75\xf1\x70\xc7\x76\xc5\x8e\xd5\xf8\
+\xf6\xb6\xab\xd8\x6f\x68\x68\x90\xe2\x07\x96\x7f\x70\xf4\x81\x1d\
+\x3f\xb5\xa1\x79\x8c\x2b\x4f\x50\x4b\xc6\x30\x3f\xb2\x70\x2b\x21\
+\x28\x56\x1f\xa6\x18\x4d\x99\x62\xbf\x40\x94\x06\x56\x76\x43\x14\
+\xc5\xe2\x62\xda\x43\xac\x2d\x70\x40\x83\xb0\xaf\x2d\xa4\xf9\x88\
+\xa1\xa5\x0d\x00\xb2\x25\xb7\xf2\x0a\xc0\x04\xa9\xe5\xeb\xa7\x80\
+\x29\xa0\x20\x0e\x48\xa5\xc3\x4a\x25\x1f\x6d\xdb\x71\xbe\x53\x5f\
+\x60\x66\xa5\xe1\x43\x0c\xa5\xd6\x5e\xa6\x11\x4e\x75\x62\x92\x39\
+\x4f\x9c\x37\xce\xe3\x5f\x50\x00\x73\x06\x1e\xa5\xc2\x42\xbe\xc5\
+\x33\x6b\x6b\x43\x7b\xa9\x30\xb8\xee\x02\xd9\x45\x8c\x32\x1c\x0b\
+\x5b\xeb\xe0\x60\xa8\x31\xde\x85\x27\xde\x31\xdc\xd1\x4f\x44\x57\
+\xa6\x1d\x8f\x2e\x5b\x89\x13\xd7\x95\x1f\x41\x57\x68\x9f\xf1\xf2\
+\x24\x60\xb2\xfd\xc4\x0b\x5c\x78\x8a\x75\xe4\x63\xaa\xbf\x59\xfb\
+\xe5\x8e\x26\x5c\x90\xbb\x13\xc7\xb1\x2f\x2a\x54\x5d\x7f\xfa\xeb\
+\x46\xea\xa9\x9c\x39\x92\x09\xd0\x91\x6d\xa7\x2c\x6c\x7f\x7d\x8f\
+\x11\x05\x16\xf6\x6a\xdd\xab\x57\xe5\x70\x3a\x57\xe2\x52\x78\xec\
+\x15\x64\xc7\xe7\x97\x1f\xdf\x7a\x38\x1c\xf8\xf3\xfa\xf2\xe7\xcf\
+\xfd\x05\xa1\x3c\xbd\xa8\xe8\x29\x2c\xfb\x77\xc3\xed\x15\x79\xeb\
+\x91\x1e\x79\x5d\xcd\xbc\x3f\x86\x1a\xf3\x71\x75\x1c\x56\xda\x4d\
+\xa9\xb9\x84\xa3\x48\x33\x6b\x40\x6c\xbf\x3d\xff\x75\x76\x7e\x1a\
+\xf4\xb3\xa1\x78\x01\xf6\x73\x24\xfe\xcb\x3b\xd8\xef\xb9\x5b\x3f\
+\xf4\xc1\x71\x4a\x0f\x16\xae\x7a\x95\x0b\xf3\x38\xf4\xca\x8d\x55\
+\xfc\x92\x60\x5e\x88\xeb\xcd\x97\x99\x42\x14\xb1\x79\xd7\x61\x49\
+\xe7\x7c\xc2\x74\xb5\xa4\x6d\x3f\x55\x54\x07\x3d\x81\xad\x38\x3f\
+\x05\x43\x9b\x6d\x75\xee\x69\x34\x18\xeb\xc8\xfc\x68\x3a\x99\x68\
+\x5e\xf0\x36\x7a\x48\xfb\xa8\x92\x07\x24\xd7\x25\x58\x28\xd3\x2c\
+\xd3\xdc\xb4\xd6\x05\x3c\x62\xa8\xa5\x07\x45\xd4\xbf\x6f\xa8\x31\
+\xe0\xbc\x7f\xb1\x5f\x34\xf8\x86\xad\xe5\x3c\x71\xde\x38\x8f\x7f\
+\x41\x01\x9c\xcb\xe8\x8b\x9d\x75\xf2\x7c\xf8\xef\x91\xa6\x6e\x65\
+\xce\xc6\x99\xa1\x2e\xba\x2f\x35\x4b\xf4\x27\x9c\x4e\xe8\xdf\xd2\
+\xeb\x71\x5b\xa7\x49\xd5\xfd\x24\x47\x61\xae\xa8\xc4\x9a\x2e\x50\
+\x2a\xd7\xa0\xbc\x0c\xd1\x7e\x82\x2c\xfb\xb1\xb5\x38\x3f\x03\xf0\
+\x89\xa5\xcf\x7d\x74\x85\x81\xd6\xad\xf7\xa6\x02\xc2\x2e\xfd\xf1\
+\x59\xb2\x88\x9d\xa5\xd7\x10\xe5\x96\xd5\x05\x4c\x80\xc3\x99\xa5\
+\xaa\x02\x5b\x0a\x96\xca\x3d\x03\x11\x45\x16\x1b\xa4\x04\x4a\x61\
+\xa0\xf9\x7d\x6d\xdb\xed\x50\x5f\x28\xba\xf2\xb2\x45\x19\xd4\xd2\
+\xef\x34\xb9\x7b\xf9\xc1\x08\xb8\x3e\x55\x3c\xa8\xa0\x23\xdc\x6e\
+\x73\x56\x6b\xff\xb2\xbb\xf9\x23\xc2\x28\x44\xb2\xfc\x42\x86\x77\
+\xff\x70\xbd\x25\x5e\xb7\x2d\xb4\x95\x60\x32\x67\x5f\x28\x9e\xc6\
+\x7e\xee\xec\xbb\x57\x07\xfb\x2d\xec\x53\x32\x12\xc7\xb1\x0c\xb7\
+\xd5\x85\x71\x31\xcf\x0e\x17\x1b\xa8\x8a\xca\x0f\x89\xcc\x2a\xe1\
+\xb1\x68\xf9\xb4\x9e\xde\xdc\xf3\x50\x3b\x51\x75\xf5\xd2\xf5\x57\
+\x83\x48\x4e\x0f\x9f\x74\x23\xb9\xdc\x7f\xb0\x1d\x3d\x90\x75\xeb\
+\xfd\xd5\xe8\x49\x2d\xfb\x73\xdd\x00\x37\xd8\x3b\x15\x6c\x01\x4c\
+\x13\xbb\x94\xb5\xa4\x5c\x28\xc7\xb4\x99\x4a\xc9\x55\xca\x58\xb0\
+\xf3\xe5\x0e\x2b\xf5\x26\xc0\xab\xda\x6a\xbd\xe4\x74\xa2\x3a\xb2\
+\xfc\x6b\xe3\xa1\x50\x17\xce\x1b\xe7\xf1\xcf\x2a\x00\x2f\xf8\xc4\
+\x80\xe6\x54\xe3\x76\x42\xee\xa2\x9c\x87\xa4\xa2\xbf\xe5\x7b\x93\
+\xd1\xa0\x0d\x4b\xd7\xf9\xe8\xda\x68\x27\x60\xc5\x4a\xf7\x93\xf6\
+\x3c\xc5\xa6\x56\x94\xa5\x67\xcb\x69\x54\xc0\x89\x90\x06\x54\x1c\
+\xa1\x02\x6c\x68\xf1\xc7\x80\x09\xd6\x8f\x9f\xfe\x4a\xd8\x31\x37\
+\x1d\x3d\x83\xcd\xf9\x49\x3c\xc5\xfe\xd0\x92\xe6\x24\x90\x75\x55\
+\x55\x84\xb1\x64\x91\x24\x48\x46\xf8\x0b\x86\x66\x26\xc0\x4b\xec\
+\x14\x10\xb6\x49\x3e\x13\xbd\x34\xba\x67\x58\x32\x75\xcb\x75\x03\
+\x17\x5d\x53\x4b\x24\x35\x32\x7d\x60\xa7\x5e\xcd\xf3\xc4\x25\x88\
+\x01\xee\x01\x01\x7e\x73\x31\x47\x51\x92\x99\xcb\x4f\xaa\x19\xaa\
+\x8e\x57\x63\x20\x8c\xae\xa9\x51\x3d\x4f\x0d\x3e\xf7\x8e\x92\x8a\
+\x0a\x11\x18\x1d\x98\x55\xeb\x0e\x28\xd2\x7d\xc9\x9f\xfa\xbd\xad\
+\x56\x19\x6a\x7a\xda\x67\x20\x3a\xf6\x75\x29\xc5\x71\x7d\x7a\x78\
+\xde\xd2\x7d\xc7\xe6\x7f\x89\x70\xac\xf9\x67\xd5\x53\xd5\xbc\x60\
+\xd7\x8d\x4c\x91\xef\xaa\xf3\x67\x9e\x67\xa7\xe9\x2d\x3a\xd4\x16\
+\x5f\xd6\x27\xb9\xf4\x7f\xea\x0d\x98\x66\x6d\x9e\x57\x46\x55\x85\
+\x05\x4f\xb0\x52\x98\x65\x77\x29\xde\x8a\x72\x15\x5d\xcb\x63\x28\
+\x67\x88\x35\x3d\xa7\xed\x63\xa5\xf5\x2a\xe0\x72\x5d\xb0\x76\x19\
+\x30\x15\x0c\x38\x1b\xe6\xbb\xbf\xda\x6e\xdc\x16\x96\xce\x79\xe3\
+\x3c\x72\x5e\xff\x84\x07\xd8\x8e\xa9\xcb\x78\x78\x69\x32\xfc\x0d\
+\x91\xb2\x64\xd0\x77\xd7\x53\x72\xb4\x38\x59\x77\x35\x70\xac\x6e\
+\xa3\x6e\x82\xf6\x13\x2c\x3a\x6a\x97\xd3\x31\x2d\x24\x57\xe4\x9a\
+\x83\x94\x00\xf2\x00\x82\x34\xb6\xaa\x07\xe1\xe2\xca\x54\xf4\x00\
+\xe2\xc9\x97\xd3\x31\xc9\x12\xd7\x96\xe2\xc6\x24\x49\x9c\xc9\x6a\
+\xfc\x89\xa6\x21\xa8\xe9\x40\x44\x2d\x12\x08\x17\x4c\xb8\xf9\x18\
+\x6b\x33\x8b\xac\x69\xaf\x5e\x67\xc4\x45\xa3\x8b\xf6\x88\x76\xfd\
+\x05\x0b\x31\x71\x37\x63\xcf\x76\x82\x18\x1f\x7e\x23\x8c\x4e\xe5\
+\xdb\xfd\xde\x7a\x37\x62\x83\x6b\xfe\xfe\x0e\x50\x8a\x1d\xa2\x8f\
+\x1f\x1f\x89\x04\xc4\x29\xe9\x8c\x10\xb9\x9a\xd5\xec\xab\xf7\xb2\
+\x0a\xdd\x51\x42\xb9\x66\x12\x3d\xb7\x14\xc7\x1b\xba\x65\xf0\xe0\
+\x48\x98\x8f\xbf\x7f\xc0\x4e\xec\xa7\x9d\x5f\x1b\x54\x77\x21\xec\
+\x4c\x68\x28\xe2\xa0\xd3\xb1\x87\x3b\x4d\xa3\x79\x5c\xb3\xaf\x61\
+\x87\x42\x4c\xa1\x58\x05\xd3\x43\x0d\x65\xca\xa0\x1a\xd5\xf2\x13\
+\xf8\xfa\x18\x26\xd1\xf3\x37\xa5\xc3\xa6\x76\x80\x19\xd2\xda\xf2\
+\x40\x40\x0f\x71\xcd\x4b\x3b\xe5\x04\xd7\x5e\x8e\x42\x14\xd7\x55\
+\x78\xd2\xf3\x03\x4d\xdd\x09\xcf\xe0\x7c\x95\x54\x21\xd6\x62\xc1\
+\x0a\xaa\x66\xbc\xdc\x12\xeb\x04\x60\x98\xcb\xe1\xee\x77\xe2\x19\
+\x9d\x77\xe0\x58\xce\x1b\xe7\x91\xf3\xfa\x27\x14\xa0\x8d\x4e\xcd\
+\x1a\xf5\x1a\xf8\x9b\x60\x4f\x94\x3a\x80\x26\x75\x56\x24\x29\x40\
+\xb7\xba\xb6\x51\x73\x5e\x13\x8f\x77\x61\x93\x97\x23\x5e\xa3\x02\
+\x47\x9a\xd9\x0c\xe8\x21\x1d\xae\x39\x86\x6d\x59\x36\x23\x61\xe1\
+\xd2\xd8\x6a\x3f\x6c\x4b\x4b\x4d\xe8\xf2\xd2\xe4\x33\xa6\x89\x94\
+\x64\xdd\x00\x8b\x23\x97\x6f\x6e\x4a\x0a\x30\x08\x05\x42\x96\xdd\
+\x8b\x1d\xb3\x1a\x18\xf1\x4d\xa8\xcd\x15\x24\x8a\x11\x18\x80\x1e\
+\x40\xd3\x4a\x8e\xae\x84\xed\xde\xd2\xae\x0b\xb7\x0d\x03\x82\x7d\
+\x7e\xf2\x5f\x12\x9d\x05\xb1\x79\x40\xcd\x5c\x0f\x48\x36\xde\xbf\
+\xb8\xd8\x65\x0d\xe8\x7f\x70\x1b\xff\x53\xd6\xe1\x8c\xe8\xf7\x59\
+\x3f\x9f\xb2\x90\xc3\x4b\xb4\xed\xd5\xeb\xd5\x2b\x55\x82\xaa\x87\
+\xc2\x7b\x73\xfc\xaf\x59\xe0\xfc\x7f\x6e\xfb\x25\xaf\xd6\x00\x11\
+\xaf\x06\xd4\x6c\xc1\x7e\x7d\x96\x07\x84\xe1\x38\x4b\xae\x2f\xb0\
+\x0e\xdf\x4a\xf3\x88\xc2\x79\x90\x42\xdd\x61\xfd\x00\x92\x42\xd4\
+\x30\xe2\xa9\x7f\x25\x80\xad\x23\x91\xd6\xf9\x18\xd6\x3b\x94\x5c\
+\x7a\x94\x65\x18\x25\xcb\x79\xb8\x3e\xe5\x2c\x28\xc4\x4a\x94\xa7\
+\xbc\x84\xe4\x17\x2d\x0d\xac\xfe\x9d\xe4\xea\x0e\x8a\x89\x72\x5e\
+\x52\x8d\xf3\x8f\x95\x93\xc8\xa3\x44\x08\x37\xc5\x53\x78\xaa\xa8\
+\x69\x88\xbc\x28\xef\x4a\x6b\x75\x99\xb5\x8d\x9c\x37\xce\x23\xe7\
+\xf5\x4f\x28\xc0\x5d\x03\x7d\x75\x23\x60\xae\xa9\x6b\x23\x46\x8b\
+\x0b\xf0\x5b\x5b\xe5\x90\xec\xaf\x29\xf0\x8a\xd7\x36\x84\x63\x9c\
+\x18\xf5\xc7\x57\xf6\xfa\xa8\xa1\xf2\x75\xb3\x99\xd0\x9d\x26\xf4\
+\x58\x5e\x62\x71\xa4\x6d\x60\x00\x79\x86\x9b\xb0\x40\x33\x5d\x97\
+\x68\xbb\xf5\x58\x6e\x49\x49\x5d\x05\xbb\x9f\x2d\xbb\x33\x97\x5f\
+\x06\xc4\x12\x31\x35\x5b\x18\x41\x73\x59\x5b\xc5\x00\xd6\x76\x67\
+\x9e\x40\x36\x41\x3d\xc1\xf3\xac\x3e\xe4\x12\xbc\x9f\x11\x9d\xe1\
+\xb1\x05\x04\x73\x6a\xf4\xc5\x95\x45\xf0\xdc\xe0\xf8\x3e\x8e\x2e\
+\x2d\x68\xd7\x71\xea\x85\x41\xb5\x48\x14\x28\x79\x80\xa3\x0c\x6f\
+\x33\x74\xe0\xd7\x19\x91\xd5\xec\x3d\x08\x19\x6f\x3d\xed\x33\xc5\
+\x75\x06\xf4\x7b\xed\xe2\xde\x22\x38\xff\x4f\x1f\x9b\x91\xb7\xe5\
+\x67\xb8\x9d\xa1\x6f\x7b\x69\x32\x9b\xc7\x7b\x6c\x5e\xef\x33\x7c\
+\x9b\xcd\x9f\x7b\x98\x9e\x4c\x21\xbe\x64\xe3\x7c\x48\xae\x5c\x66\
+\xdf\x2f\x28\x66\x55\x4e\x2d\x2d\x45\x24\x27\x77\x0b\xf7\x14\x3f\
+\x00\x64\x82\xfc\xea\xe0\x75\x29\x91\xee\x57\xa8\xef\x29\x88\x46\
+\x9c\x27\xec\x23\x5a\x50\xf1\x37\x86\x9c\xfc\x01\x39\x58\xab\xf3\
+\x8a\xe7\xbc\x71\x1e\x39\xaf\x7f\x42\x01\x5a\xbf\xc7\x34\xe5\x30\
+\x56\xef\xec\xdd\x45\xd0\x1e\xe3\x47\x82\x8f\x92\xa8\x29\x34\x1a\
+\x85\x4f\xc0\x49\x7a\xc0\xdd\x56\x4a\x86\xf4\x88\x5c\x79\xb9\xfd\
+\x80\xba\x8f\xa7\x82\x07\x10\xac\x96\x4e\x01\xf7\xd3\x7e\xbf\xcc\
+\xba\x5a\x75\xf5\x96\x2b\xaa\x00\x2c\x53\x48\x00\x79\x64\x99\x47\
+\x40\x01\xf6\xd1\xc2\xa2\xab\x55\xc1\xe5\x71\xac\xe9\xc9\x04\xe6\
+\xc7\x2c\xbf\x31\x13\x6c\x3b\x26\xe8\x26\x28\x08\xd1\xb5\x68\x04\
+\x60\xf8\xcb\xed\x4b\xd3\x00\x95\x17\x4d\xde\xd9\x03\x98\x59\xfd\
+\xfb\xe9\x9d\xaa\x62\x99\xd4\xfe\x72\x19\x21\x65\x48\x30\xf5\xcb\
+\xf1\x77\x7e\x9d\x3d\xf7\x3d\x6b\x0f\x61\xfd\xbc\xa2\x7e\x7b\x4d\
+\x68\x8b\xe3\x94\x1c\x48\x09\xa7\x71\xc5\xa2\xa6\xcc\xb2\x27\x11\
+\xb6\x84\xf7\x11\x89\x70\x52\x24\xc3\x1f\xd6\x73\x83\xcd\x3b\x80\
+\x14\x25\x43\x0e\x30\x17\xd2\xba\xdd\xac\x1d\xc8\x60\xf2\xe8\x8b\
+\xa7\x1c\x25\x80\x15\xc6\xdc\xad\x3f\x10\xd1\x1e\x78\x9d\xe4\x5a\
+\xac\xf6\x67\xb3\xa9\xf2\xb6\xf7\x23\x4c\x11\x67\x62\x2e\x26\x44\
+\x90\x61\x8e\x10\xb6\x6b\xee\x18\x8d\x9c\x37\xce\x23\xf2\xfa\xe7\
+\x3c\x00\x69\x8d\x26\x08\x6e\x29\x80\x8d\xa4\x4f\x15\x2f\xa8\x2a\
+\xb5\xd3\xcc\x13\x56\x69\x32\x1c\x7a\x09\x15\x50\x9d\x87\x18\x0e\
+\xb8\x41\x49\x21\xcd\x3d\x23\xed\xc4\xb6\xb2\x5e\x5a\x47\x95\x30\
+\x45\x5c\xac\xee\xdf\xe9\x9b\xbd\x6c\x25\xc3\x3e\x83\xce\xc1\x03\
+\x60\xe2\x64\xf9\xa4\x20\x59\xa0\xe9\xc3\x71\x81\xb0\x70\x27\x12\
+\xc8\x2b\xe6\x01\x02\xd8\x6e\xc0\x9d\x11\x93\xc7\x2c\x33\xdd\xb4\
+\x82\x59\x5c\x0f\x86\x13\xd9\xfd\xcd\x84\x39\x55\x21\x88\x50\x77\
+\x08\x52\x05\x6e\xf2\xa5\xf6\x99\x6a\x76\x3e\x6f\x0a\xe1\x16\xab\
+\x22\x12\x43\xc8\xfb\x5b\xc9\x14\x26\x44\x7d\x0f\xc7\xa1\x7e\xda\
+\x12\xba\x55\x74\x53\xdb\x55\x3e\x6c\x5c\x7a\x5e\x2a\xc3\x79\xd0\
+\xfb\xef\x52\xfb\x30\x22\xdd\xe7\x8a\x74\x91\x30\x9c\xd6\x75\x13\
+\xd6\xd5\x98\xe4\x71\x06\x2c\x9c\xea\x0e\x60\x10\x14\x3a\xac\x16\
+\x6c\x03\x3e\xa0\xca\xe4\x58\x7b\xa9\x4a\xb4\x34\x80\x42\x46\x3e\
+\x2b\x95\x1f\x16\x07\x92\x01\xad\x97\x80\x78\x2a\x71\x8d\xc5\xfb\
+\xe0\x2b\xa2\x29\x34\xcf\x12\xd2\x1d\x7a\x71\xde\x38\x8f\x9c\xd7\
+\xbf\xbb\x14\x2c\x79\x48\x8d\xe8\x23\xcf\x0a\xf8\x17\x1d\x4e\xbe\
+\xf0\x98\x88\xcf\x91\xdd\xe4\x7c\x22\x70\xa9\x92\x4f\xa5\xd6\x0c\
+\x74\x41\x98\xff\x2b\x71\xa4\x18\xb1\xca\x52\xc2\x7c\xf6\x55\x6e\
+\xba\xec\x4f\xb5\xf3\xa5\xe2\x40\x2a\x9d\x0e\x12\x3f\x27\x85\x88\
+\xa2\x8f\x2b\x53\x65\x0f\xd2\xf0\x0a\x08\x05\xc7\x98\x02\x38\xfc\
+\x11\x99\x20\xcf\x30\x05\x39\x0c\x04\x93\xc5\x32\xa2\xae\x57\xb7\
+\xfd\x03\xd1\xaf\x4c\x8d\xd5\x76\xd5\x05\x42\x99\x3d\x7f\xda\x74\
+\x5b\xed\x07\x89\x25\x1c\xc2\xf0\x39\x53\x00\x3d\xeb\x87\xb7\x4d\
+\x88\x52\x1e\xeb\xff\xba\xc9\x8f\xdd\xe7\xef\x85\xa8\xc4\x57\xef\
+\xf9\x83\xe2\x96\xb1\x79\x06\xb0\xf9\x4b\xe4\xfa\x93\x64\x59\xad\
+\x0f\xc0\xba\xbf\xa6\xdc\x28\xc1\x4e\x04\xcb\x09\x62\x03\xf2\x04\
+\x49\xd2\x35\x92\x6f\x39\x1a\x16\x45\x7b\x24\xf8\xa6\x90\xa6\x28\
+\xe4\x21\xf2\x95\x40\x34\x2c\x90\x7b\x8e\x3a\x0e\x79\xe4\x2c\xf8\
+\x37\x96\x7e\x51\x50\x29\x28\x82\x27\xe7\xed\x2f\x94\x82\x6b\x7a\
+\xa1\x1d\x43\xc7\x1a\xc0\x3c\x65\x90\x02\x7a\x26\x49\x8a\x08\xb1\
+\xbf\x8b\xd8\x5f\x51\xa0\xde\x97\x0a\x77\xf0\x54\x3f\x90\x34\x31\
+\x57\x89\x21\x8d\x76\x17\xe0\x2d\xa4\x58\x33\x4e\x9d\xb0\x00\x08\
+\xa7\x5f\x19\x42\x04\x79\x88\x54\x25\x4b\x3d\x0e\xc5\x85\x3c\xdb\
+\x54\xe0\x20\x1e\x82\xc2\xca\xb9\xcb\x4d\xd1\x33\x58\x16\x58\x8a\
+\xc8\x63\xa4\x28\x63\xd5\xe3\x5f\xca\x15\x88\x38\x16\x3b\x29\x29\
+\x24\x01\xcf\x65\x96\x3b\x89\xb0\x1c\x92\x2e\x22\x08\x2d\x9b\x08\
+\xfb\x94\x59\xe0\x10\x46\x04\x5d\x97\x38\x51\x44\x34\x29\x82\x89\
+\x2b\x04\xc3\x2a\x76\xbf\x31\xeb\xe7\x5d\x46\xf8\x10\xee\x39\x98\
+\x2b\xdf\xc3\xc6\x5f\xc9\xfa\x67\xf3\xc2\x79\x92\x8b\x2f\x60\x38\
+\x8f\xad\x43\xb5\xf4\x70\x3c\x1b\xb0\xd7\xb7\x8f\x14\xa1\x7e\x71\
+\xc5\xf1\x7a\x22\x7e\x67\x70\xbf\x5f\x6e\xae\x58\x4a\x72\x09\x24\
+\x43\x12\x40\x6e\x99\x74\x0a\x9a\x4a\xf6\xfa\x18\xf2\xfd\x78\x34\
+\x34\x90\xe4\x78\x92\x77\x96\x50\x81\x28\x1d\x52\xa8\x60\x04\x1e\
+\x20\x1c\xb0\x5c\x89\x50\x92\xa9\xfc\xf3\x4c\x69\x05\x3c\x31\xde\
+\x38\x8f\x9c\xd7\x3f\xa1\x00\x37\xd6\xe2\x74\xe1\x6f\x30\x0a\x51\
+\xbb\x4f\x0b\xc9\x84\xb5\x99\xe2\x2c\xd8\x95\x2b\xd6\x13\x4a\x36\
+\x0c\x95\x4c\x35\xf3\xb1\x0a\x3e\x95\x25\x2d\x25\xc2\xd3\x24\x37\
+\x95\x68\x20\x7c\x19\x2d\x28\x95\x50\x50\xc6\x69\x3e\xa1\x1e\x13\
+\x34\xdf\xd0\x61\x4e\x9c\x06\x0a\x40\x3f\x4d\xb8\xba\x48\x02\x97\
+\xb6\xca\xf2\xd9\x64\x4c\x1a\x9f\x2e\x7b\xde\x56\x6e\x49\xfe\xc3\
+\x43\x39\x4c\x2e\x30\xc8\x6e\x67\x1f\x74\x2c\x22\x5c\xcf\x3e\xfd\
+\x4a\x64\x87\x2c\x89\xd6\x05\x84\x51\xac\x04\xeb\xce\x14\xa6\xcc\
+\x5c\x8b\x11\x52\xc8\x14\xe8\x0d\x86\x46\x96\x6c\x0e\x63\xed\x17\
+\x0c\x6b\x54\x57\x5e\x13\xc9\xdb\x0c\x9b\xb0\xed\xdc\x25\xd6\xef\
+\x5d\xb5\x5f\x66\xc1\x01\x96\xa6\x6c\x3e\x7d\x54\xb4\x14\x03\xd0\
+\x4e\x9e\x30\xc7\x3e\x92\x14\xdf\x83\x3e\x20\x49\x80\x3c\x1e\x14\
+\xbe\xe8\xab\xe2\xed\xf8\x1d\xc0\x07\x9b\x37\x17\x58\xa0\xdf\x33\
+\x51\x3f\xdf\x11\x43\xb1\xe0\x83\xf2\x21\xc2\x63\x84\x5d\xe8\x09\
+\xc0\xcf\x6e\x20\xcb\x4e\xd1\x20\x0a\xa0\x10\xa9\x28\x1f\x39\x5d\
+\x13\x87\x72\x94\x97\x92\x42\x6c\x90\x25\x34\x3c\x25\x4b\xb9\x21\
+\x24\x00\xbe\x10\x6e\x28\x17\xac\x27\x38\x6f\x9c\x47\xce\xeb\x9f\
+\x50\x80\x66\x36\x8c\x2b\xea\xa7\xc7\xd2\x75\xf8\xc8\x08\x52\x14\
+\xb3\x51\xbe\x2d\xbc\x2d\xb7\xac\xac\x94\x53\x94\x2c\x1a\x28\x4d\
+\x2a\x53\x1d\xbe\xe4\xa6\x69\x85\x9a\x08\x47\x15\xe7\xd4\xaf\x79\
+\x35\x99\x64\xf9\x49\x80\x28\x80\x24\x01\x17\x96\x01\x81\x81\x3e\
+\xea\x84\xeb\xf0\xdc\x9b\xcb\x3a\x5a\x1d\xaa\xf1\xc7\x51\xf5\xb6\
+\xa3\xa3\x5a\x9f\x94\x99\x6c\x29\x42\x9a\xe5\x3c\xcd\x9b\xe8\xf8\
+\x40\x11\x92\x28\x84\x84\x83\x80\xe8\x30\x49\x6a\x40\x18\x28\xf6\
+\x57\x91\x29\x88\x87\x7d\x9a\x8a\x36\x17\x76\x98\xf2\x50\x2d\xf1\
+\xda\x4e\xb0\x73\xfc\x2b\x0c\x7f\x64\x38\x82\x1d\x32\xf5\x65\xd8\
+\x91\x5d\xef\xfb\x37\xcf\xef\x27\x3c\xc3\xbe\xf4\x29\x47\xa4\x71\
+\x38\x76\x56\x91\xcd\x23\x42\xac\x4f\xa8\x56\x06\x2b\x00\xd1\xb2\
+\xa3\xc1\xb2\x13\x31\x33\x91\x3e\x47\x89\xae\x5a\xb0\xdd\x8e\x87\
+\x42\xf5\x3e\xae\xdd\x04\xd7\x39\x70\xf1\x9b\xef\x18\x3e\xa4\xdc\
+\x29\x8e\xc9\x29\x49\xa3\xd2\x14\x4b\x0a\x91\x09\x06\xb4\x8b\xfa\
+\x4b\x11\x10\x53\xe0\xa8\xed\x09\x19\xdc\x75\x2d\xca\x3d\x4f\x3a\
+\x2c\xc4\xe0\x66\x13\x42\x70\x34\x60\x16\x1c\x2b\x35\xa8\xac\xe4\
+\xbc\x71\x1e\x39\xaf\x7f\x42\x01\xae\x4b\xaa\xa6\x88\x0a\xfc\xed\
+\x74\x98\xab\x87\x5c\xd6\xa4\x97\xfd\x34\xbf\x4a\xfd\x4a\x0f\xc8\
+\xb2\x1c\xa5\x84\xa3\x1d\xc0\x84\x3c\x71\x42\xa0\x00\xad\x11\xc5\
+\x52\xed\x72\x8a\x69\x87\x35\x83\x99\xe5\x9f\x63\x96\x9f\x49\xe7\
+\xfb\xb1\x9a\x5b\x64\xd9\xe1\x88\xb5\x57\xf9\x86\x68\x37\x81\x25\
+\x74\x4f\x4e\x75\x01\x02\x7f\x0a\xbe\xd6\x40\x84\xdd\xc4\xd4\xed\
+\x4b\x33\x30\xfb\x35\xcf\xb3\x5e\x71\x98\x4b\x02\xf4\x50\x14\xa6\
+\x08\x5d\x98\xa0\x45\x00\x2c\x99\xbc\x64\x04\x9c\x22\x54\xc4\x5f\
+\x18\x2e\x62\x38\x4a\x45\x7b\x0b\x86\xf5\x99\x47\xe1\xed\x2e\x1c\
+\xd9\xf5\xce\xac\xed\xca\xaf\xf3\xf7\x18\xae\x55\x91\x8d\xe7\x21\
+\x8a\x7c\x7c\xa6\x98\xa5\x8c\x78\x57\x95\x78\xfc\x45\x91\xa5\xaf\
+\x6d\x21\xa4\xce\xc2\xb4\x1d\xa9\x0d\xd1\x33\x9c\xd7\xfe\xf2\x12\
+\xdf\x5b\x71\x61\xf6\xb7\xf8\x43\x97\xfa\x0f\x6b\x0f\xd3\xfd\x4a\
+\xef\x91\x5c\xc0\xea\xa3\x01\xe9\x34\x50\xf5\x04\x42\x8a\x40\x72\
+\x54\x92\xb0\xe2\xa7\x24\x4b\x87\xb4\xdd\x08\xfd\x35\xb3\xf1\x84\
+\x41\x96\x31\x44\x00\x2f\x2d\x91\x17\x69\x81\xe6\x5d\xa9\x6e\xe9\
+\x01\xce\x1b\xe7\x11\x79\xfd\x93\x1e\x60\x52\x24\xea\x21\x74\xb5\
+\x0d\xfe\x0e\x3a\x64\x62\x15\xa9\xca\x47\xd6\x6b\x46\xc9\xde\x05\
+\x7b\xe5\x33\x40\x7d\x0e\xdc\x19\x23\x97\x91\x27\x88\x93\x72\x35\
+\x5e\x38\x21\xf1\x9a\x06\x27\x98\x20\x86\x6a\x67\xe1\x82\xc0\x75\
+\xc5\x53\x4c\x8f\xc0\x05\x91\x46\xdf\x54\xdb\xb8\x20\x2c\x71\x68\
+\x2a\x40\x11\x7a\xf9\xec\xd6\xc1\xe1\xc8\x1a\x97\x79\x06\xfc\xbf\
+\x5b\x38\x5a\x90\x1d\x84\xf5\x81\xb7\xda\x4e\xb7\x57\xe9\x40\x0e\
+\xcb\x0a\x2e\x6a\x83\x99\x22\x78\x90\x20\x02\x71\x39\x24\xf8\xcf\
+\x19\x11\xd7\x18\x01\x07\xd9\x75\x15\x15\xb8\xff\x47\xe2\x66\x30\
+\x1c\xcd\x08\xe7\xc4\xb6\x60\xed\x50\xae\x40\x7f\x83\x07\x19\xee\
+\x20\x0c\x12\xff\x66\x5c\xc2\x9b\xd0\x66\xc4\x63\xf2\xfb\xa4\xd1\
+\x8b\xa1\x78\x1a\x3f\xf8\xf5\xb4\x12\x5c\xc7\xd1\x26\xd9\xd1\x18\
+\xea\xd6\x5d\x5f\xe0\xe8\x03\x6d\x3f\x28\x65\x6b\xbf\xc0\xd8\x0e\
+\x84\x93\x45\x83\x3c\x6e\x52\xac\x8f\x21\x79\xa5\x40\x1b\x10\x25\
+\xac\x45\x57\x9f\x24\x75\xd5\x6e\xc4\xeb\x20\xe7\xe5\x84\xa3\x51\
+\xee\x72\xba\x7c\x06\xd9\x92\x77\xca\x32\xf2\x22\x9f\xd6\x58\xa4\
+\x9f\x0a\xf6\x72\xde\x38\x8f\x9c\xd7\xff\xaf\x02\xb0\x9f\x2f\x40\
+\x94\x76\x72\xc1\x24\xc2\xa1\x52\x0f\x76\x65\xba\x20\x1a\xf4\x7b\
+\xac\xa5\x77\xe6\x49\x33\xe5\x1b\x72\x36\x7e\xc3\x2b\x5f\x57\xf2\
+\xb1\xe2\x2d\x85\x69\x91\xd0\x04\x69\xb4\x3e\x98\xec\x73\x07\x4d\
+\x30\x43\x8e\x46\x01\x28\x8f\xc1\xf2\xbb\x91\x2b\x23\x0d\x57\xc0\
+\x03\xd0\x82\x37\x28\x81\x9a\x4a\xba\x1f\x88\x23\xf6\xd9\xd7\x65\
+\xa0\x03\x24\x4f\xf3\x3b\x4c\xef\xd7\x10\x3c\xc8\xad\xf1\x77\xf7\
+\xd9\xe0\xd4\xab\xbb\xef\x18\xa9\x12\x62\xe0\xa7\xc7\xf6\xe8\x91\
+\x20\x9b\x33\x7c\xb4\x9d\xaf\x86\x08\x79\xa0\x1a\x63\x45\x91\x11\
+\xb9\x98\x11\xb5\x86\xe1\x74\x86\xfd\xff\x48\x28\xb3\xf4\x72\xf1\
+\x24\xc3\x53\xfc\xf9\xbf\x55\x14\x86\x03\xb8\x42\xf1\xfe\x99\x02\
+\x1c\x00\x48\x55\x3c\xa5\x53\x18\x6d\x6d\x57\x15\x98\xe7\xd6\xa9\
+\xfb\x86\xa1\x82\xf4\xb8\x30\x66\x66\xe5\x2d\x58\xc7\x37\x77\x8f\
+\xe3\x17\x4c\x8b\x3a\xcd\x18\xd0\x08\xda\x3d\x7a\x74\xb4\xea\xab\
+\x30\x44\x82\x1c\x34\xaa\xe2\x90\x1c\x52\x85\x70\x40\xb4\xfc\x70\
+\x34\x10\x25\x53\x88\xd6\xc6\xab\xbb\x29\x92\x63\xb4\xf8\x8b\xe6\
+\x5b\xc2\xfa\x3a\x94\x73\x10\x78\x82\x46\xc0\x90\xbf\x7c\x46\xc9\
+\x26\x83\x24\xb4\x4f\xd0\x39\xd9\x3e\xba\x33\x8f\xf3\xc6\x79\xe4\
+\xbc\xfe\x1d\xdb\xc0\x1a\x6f\xcc\x78\x0d\xc9\xb8\x97\xac\x2e\xd0\
+\xbc\x74\x74\xb4\x8d\xbc\xfd\x85\x78\x4c\x7e\x20\x7f\x67\x2d\x16\
+\x4f\x4b\x83\xe4\x34\x4c\x2f\xe4\x31\x44\x6c\xa6\x38\x53\x77\x41\
+\x3d\xdf\xd6\x03\x2a\x31\xe2\x5a\xad\x4e\x4d\x5e\xb4\x4f\x51\x83\
+\xc1\x13\x78\x21\x61\x6c\xe1\x29\x02\x28\x02\x2d\x50\x21\x01\x40\
+\x41\x08\x5d\xfc\xb4\x8e\x23\x8a\xf4\x13\xb0\x94\x3b\xfd\x40\x1b\
+\x58\xa8\xe5\xb8\xf5\x3e\xc6\xb6\x0f\x87\x7e\x36\xcc\x0c\x21\xa1\
+\x93\x7d\x68\x7b\xdc\x77\x7f\x7e\x6a\xbf\xcd\x36\x0d\x0f\x7f\xaa\
+\x0b\x64\x19\xfa\x49\x46\x22\x48\x80\x1e\x2a\xa1\x82\x07\x23\x90\
+\x2b\x06\x27\x96\x13\x98\x6f\x6f\xc0\x92\x35\x97\xbf\x79\x6e\x14\
+\x57\x08\xe6\x51\xd6\x30\x45\xc3\xfb\x1b\x00\xa1\x9f\xea\xcd\x35\
+\x77\xa4\x74\xac\x40\x1e\x6c\x80\xbf\x43\x88\x4e\x18\x71\xdf\xf4\
+\x1d\x84\xb4\x0f\x36\x5f\xc0\x24\xb2\x66\xae\xe5\xb2\x02\xdb\xb2\
+\x79\x9f\xcd\x1c\xd3\x06\x0e\x7d\x26\xef\x1b\x36\x14\x09\x53\x92\
+\x60\x9d\xa4\xb8\xb8\x6e\x4a\x0e\x83\x00\x29\x77\x60\xed\x68\x6d\
+\x43\x35\x84\x92\xdc\x52\xe4\xc3\xda\xd6\x78\x17\xe4\xfa\x01\x8e\
+\x2f\x8e\xd1\xeb\x71\x6f\x21\x3d\xd2\x76\x43\xdb\x96\xba\x22\x0f\
+\xf6\x89\xf2\x67\xd2\xc7\xd6\x62\x8d\x87\x71\x89\x35\xe8\xf6\x17\
+\x9c\x37\xce\xe3\x5f\x38\x0e\x76\x1a\x8f\xa9\x9e\xee\xae\x03\xe4\
+\xd8\xe6\x48\x17\xd9\xb1\x87\x70\xf0\x69\x77\xeb\x22\xa5\xbf\x7d\
+\x65\xee\x29\xe9\xb4\x94\x2b\x43\x6a\x01\x8a\xe0\x26\xa7\xa0\x85\
+\x4b\x87\xf4\x9b\xd0\xa2\xa5\x01\x30\x34\x4e\xf8\xa1\x7e\x0e\x2d\
+\x60\x29\x2d\xa0\x42\x09\xd4\xee\x26\x45\x08\x44\xe2\x15\x14\x80\
+\x86\x2c\x39\x88\x29\x86\x22\x7c\x43\xe7\xe0\xa7\x2a\xc0\x02\x12\
+\x6f\x8c\x3a\x20\xc1\xb4\x37\x7a\xaf\x9a\x1f\x0b\xfd\x3b\xf7\x73\
+\xda\x66\x2c\x82\x2c\xba\x43\xf1\xd7\x48\xf8\xf2\x4d\x1b\xe2\xb0\
+\x80\xd2\x46\xdf\xb7\x1e\xfe\x74\x6c\xc2\x5b\xb3\x36\xa2\xe0\xbf\
+\xaa\x93\x95\x82\xc9\xdd\x93\x98\x27\xe7\xd1\x42\xa5\xd1\xa2\xab\
+\xd4\x85\x3c\x50\x39\xc5\xe8\xb3\x44\x34\xa1\x78\x92\xe1\x43\x76\
+\x1d\x09\x3f\xa2\x3e\x27\xfb\x4b\x07\x31\xf9\x7c\xf6\xe6\xb3\x3d\
+\x22\x78\x8c\xac\xf2\xa3\x7b\xb1\xa2\x99\x94\xbd\x68\x2d\x6e\xef\
+\xda\x45\xf6\x1f\x85\xae\x3d\x35\x79\x5d\xae\x05\x76\x19\x05\xd5\
+\x2f\xe6\xc9\x87\x61\x9e\xcd\x9d\x3a\x1a\xe1\x0c\x61\x73\xdb\x8f\
+\xa7\xc5\x82\x47\x98\x11\x3a\xc2\x22\x36\x20\xcb\x7d\x54\xf9\x44\
+\x55\x28\x72\xed\x09\x80\x5e\x18\xe3\x01\x35\x38\x3f\xe6\x09\xce\
+\x82\x7c\x76\x93\xad\xa6\x68\xdf\x21\xf5\xeb\xac\xdf\xa3\x9e\x1a\
+\x82\x5c\xf1\x54\x70\x80\x1e\x14\x4d\x1e\x23\x1e\x92\x33\x30\xba\
+\x4b\xa7\xe5\x5c\x30\x94\x3c\xf9\xb2\x2d\x2c\xf7\x14\xe7\x89\xf3\
+\xc6\x79\xfc\x0b\x0a\x70\x1f\x36\x2b\xa8\xc3\xd2\x0a\x70\xbc\x0f\
+\xdc\x03\x9c\xe1\xd9\xc2\x48\xb3\xbb\xc6\x66\x99\x73\xd9\x22\x8e\
+\x16\x07\xe0\xcf\xac\x45\x51\xec\x2a\x75\xc5\x18\x24\x5d\x23\x82\
+\x8f\x88\x33\x0d\x06\xd2\xd4\x47\x0e\xc7\x28\x62\x5e\xd3\x3f\x57\
+\x2b\x55\xda\xd9\xe4\xda\x3c\xe8\x34\x31\x93\x5c\x3f\x55\x0e\x01\
+\x31\x76\x96\x13\x56\x28\x19\x42\x10\x8e\x6c\xed\x8b\x1f\x92\xc4\
+\x07\x45\x1d\x7e\x06\x0b\xfe\xb1\xe8\x50\xee\x14\x10\x74\x4c\x5a\
+\xc7\x3e\x11\xe7\x40\xd0\x5f\x4b\x4b\x15\x88\x99\xba\x89\x96\x79\
+\x0a\x24\xa3\x57\x17\x5e\xb8\x8d\xd9\xf8\x47\x93\x3f\xbc\x83\xa7\
+\x88\x71\x9a\xc1\x3f\xe1\xa7\x57\x9d\xd6\x76\xfe\xbc\x12\x44\xf0\
+\xf6\xef\x43\xf6\x54\x81\x0b\x4d\x6c\x39\xe3\x14\x56\xfe\x66\x79\
+\x25\xba\x63\x61\x68\xf6\xb7\x49\x59\x58\xd8\x49\x2a\x9f\xd1\x05\
+\xeb\x06\x6f\xb7\x1f\xf2\x7d\xd5\x6e\x78\x6f\x4d\xe7\x2e\xf8\xc3\
+\x8d\x41\x29\x71\x47\xb0\x9f\xd4\x8a\x94\x54\x33\xac\xeb\x4c\xda\
+\x89\x6d\xf6\x4e\xf8\x05\x54\x75\x35\xba\x5c\xa7\x13\x30\x0f\x48\
+\xad\xa2\xa2\x22\x7b\x85\x41\x6e\x72\xd2\xe5\xf0\xe1\x49\x17\x41\
+\xaf\xcb\xbb\x2c\x7e\xea\xa5\xfe\x9a\xa1\x90\xbe\x63\x00\xba\xba\
+\x11\xf1\xf9\xb4\xee\x23\x6c\xdd\x37\x51\x0e\x64\x18\x9e\x9a\x8d\
+\x6a\x1d\x45\x07\x08\x87\x40\x92\x5e\x8f\x06\x21\x9e\x72\x78\x9f\
+\xce\x02\xc6\x18\x7a\x63\xb6\x2f\x85\x6a\x83\x51\xee\xd2\x18\xfc\
+\x44\x4c\xea\x0a\x3c\x0c\x02\x3b\xef\xaf\xe9\x6c\xa9\x77\xd9\xc2\
+\x79\xe2\xbc\x71\x1e\xff\x6e\x05\xd0\x68\x26\xf7\x55\xb3\x46\xc3\
+\x3a\x18\x6e\xa0\xab\x8f\x33\x24\x14\x65\x81\x72\x1f\xc7\x72\xcb\
+\xf3\xf3\x1b\xad\x2f\xa4\x64\xf1\xb6\xe9\x7b\xf1\x9a\x78\x0a\x2d\
+\xcd\x5e\x2a\xce\x94\xa3\x30\xa2\x4a\xaf\x0c\x58\xb1\xcb\x16\x47\
+\x3b\x0d\xa7\x0f\x1e\x5a\x90\x42\x44\x4b\x63\xf4\x3d\x01\x61\x49\
+\xba\xef\xd4\x8f\x3a\x35\xb3\x59\x08\x40\x41\x01\x92\xeb\xe3\x8a\
+\xf0\x18\xc4\x1b\x8e\xc9\xa5\xb5\xee\x73\x13\x7e\x77\xe1\x9e\x77\
+\x02\x04\xff\xc5\xaf\xdb\x4f\x44\x41\x21\x65\x5b\xc7\x0c\xf7\xa5\
+\x30\xb3\x76\xdf\xb7\x1a\x1f\x9e\x07\x44\xf4\x95\x97\x20\x11\xce\
+\x36\x69\x8c\x92\x09\x78\x40\x0a\xc3\x4d\x8f\xa1\x96\xb5\x03\xe6\
+\x2a\x25\xa3\x1e\xad\xc3\xca\xda\x6f\xdd\x2f\xf8\x62\xe5\xf1\x66\
+\xe5\xf9\x8d\xf8\xcb\x9f\x9c\xb8\x73\x4f\xf0\x27\x63\xbf\x9e\xbf\
+\xb0\x02\x7f\x60\xf2\xb2\xdf\xa3\x31\x58\xd2\x36\xdc\x01\x17\x9e\
+\x83\x9f\x57\x4a\xfe\x4a\x2c\x60\x67\x79\x20\xc6\x78\xe7\xa9\x52\
+\x22\x8e\xd3\xee\x68\xab\x59\xe1\x20\xda\xcf\xee\x7c\x5e\x7f\xc1\
+\x65\x41\xd8\xe3\xbb\xe3\xe3\x4e\xe0\x29\x02\xdc\x5c\xc5\x1f\x3b\
+\x91\x02\x8f\x50\x3f\xf5\x82\xca\x49\x1c\x11\x4f\xeb\x52\x32\x71\
+\xbd\x2c\x04\xe0\x7a\x63\x01\x67\x91\x47\x4c\xd2\x7d\x4b\xc9\x5f\
+\x8e\xbe\x07\x60\xb2\xbd\x3e\xc9\xed\xa6\x38\xc0\x11\x72\x08\x0c\
+\x40\x86\xdf\xf1\x90\xdd\x7e\x0d\xb7\x95\xf6\x53\x20\x77\x98\xaf\
+\x65\xbe\xe8\x23\xae\x37\x7d\x2f\x4f\x31\xbe\x69\x59\x72\x7e\x23\
+\xe7\x89\xf3\xc6\x79\xfc\x6f\x7c\x15\x6c\x1f\x83\x9b\x0c\xc3\x40\
+\x3d\x46\xbe\x3d\x3e\xf7\xdd\xbf\x13\xf6\xdf\xbd\xf7\xba\xa5\xf4\
+\xbe\xd9\x76\xf9\xb2\x38\xca\x6e\xc3\x98\x2b\x1e\xb4\x1f\xb0\xd9\
+\xb0\x40\x2b\xce\xf8\xaf\xf6\xae\x34\x2c\xca\x23\xf9\xcf\x05\xa3\
+\xdc\x87\xa0\x01\x05\x11\x85\xa0\x08\x82\x07\x9b\xa8\x51\xa2\x46\
+\xa3\x89\x78\xc7\xa8\x59\xa3\x49\xd4\x28\x1e\xa8\x10\x5c\x8f\xf5\
+\x4a\x34\x5e\xa0\x39\x30\x2a\x1e\xeb\x8d\x22\xe2\xf1\xf7\x40\x40\
+\x10\xf1\x44\x81\x88\x80\xc8\x3d\xc3\x31\x07\xcc\xcd\x0c\x33\xc3\
+\x6c\x55\x0d\xfd\x61\xbf\xed\xf3\xfc\x93\x27\xbb\x1b\xe7\xcb\xef\
+\x99\x9e\xf7\xed\xb7\xfa\x57\xd5\xd5\xdd\xd5\xd5\xef\xf0\xb6\xa2\
+\x9a\x3b\x8e\x76\x0d\xa2\xd3\xf3\xd1\x76\x12\x40\x68\x90\xf0\x01\
+\x59\xfa\x25\xc1\xf6\x4e\x43\x28\x26\x85\x5b\x28\x60\x59\x48\x84\
+\x58\x0d\x01\x7b\x4a\x28\x10\x16\x66\xcd\xd6\xe5\xd4\x50\xca\xd4\
+\x21\x79\x26\x60\x76\x6b\x42\x1a\x34\x6f\xe4\xc8\x90\x7d\x79\xd0\
+\x63\x4f\x1c\x4f\x69\x9f\x05\x9e\xe2\x8c\x6d\xe6\xde\xa4\x9f\x61\
+\x28\x50\xaf\xbe\xb2\xa4\x14\xf6\xed\xa3\x07\xca\x06\x9a\x21\x53\
+\x7e\x1e\xd7\x8f\x0f\x84\xda\xef\x32\x8f\xb4\x24\x02\xae\x37\x17\
+\xa0\x42\x1d\x82\x4d\xc9\x96\x51\xf8\xbb\x29\x15\xd1\xe1\x0e\x94\
+\x03\xda\x3d\x01\xc3\xd9\x8c\x8a\xef\x48\x40\x57\x1d\x54\x1e\xb4\
+\x2e\x08\xe2\x07\x9f\x8d\x5c\xe6\xfd\x05\xb4\xeb\x64\x6e\xc6\xed\
+\x9f\xaf\x83\x03\x0b\x4d\x91\xcc\xc8\x03\xf1\x7d\xc3\x36\x3f\x88\
+\xc7\x30\x90\xe2\xf8\x35\x11\xcd\x85\x86\xb7\x52\x36\x34\xb8\x5d\
+\x17\x6a\x5f\x35\xb6\x8b\x14\x1f\xd9\xa9\xf8\x30\x6b\xbb\x79\x0b\
+\x28\x36\xb7\x92\xff\x2b\xa9\xe8\xb2\xcd\xb7\x74\xe0\x6c\x99\xb0\
+\x0b\x75\xa0\x8d\xb4\x97\x17\x65\x1e\x68\xf7\x29\x6e\x92\x9b\x64\
+\x38\x19\x34\x7e\x64\x7c\x82\x49\xa3\xa6\x65\xed\x12\x5c\x9d\x28\
+\x57\x98\x33\xda\x4e\x3c\x7c\xc8\xf4\xc2\xf4\xc4\xf4\xf6\x1b\xa4\
+\x85\x67\x97\xa0\xfd\x72\xe3\x2c\xe0\xb8\xdb\x6f\x7b\x6c\x76\x83\
+\x45\x95\xe8\x4b\x5d\x2f\xc1\x5e\xdd\x8d\x2b\x5b\xf5\x7e\x46\xa1\
+\x51\xa3\x1f\x6f\x94\x1a\xca\x31\x0b\xd6\xb8\xdb\x98\x81\xf9\xf1\
+\xe4\x09\x02\x28\x4e\x90\xe5\x30\x82\x02\x17\xd1\xf6\x13\xe9\x64\
+\xdd\x86\x2e\x07\x29\xd4\x19\x65\x73\x9d\x2c\x7f\x3e\x7f\x70\xa7\
+\x21\x5c\xb1\x8e\xc1\x40\x18\xa5\x81\x13\x8e\xea\xa8\x26\xe2\xe6\
+\x83\x47\x48\xa7\x39\x86\xa3\xc1\x80\xe5\x3a\x5d\x49\x00\xc6\xe7\
+\x24\x5e\x87\xa0\x27\xf7\xe1\xb9\x86\x9d\x12\xe0\x5c\x60\x49\x9b\
+\xe0\x05\xcc\xc6\x03\x6f\x44\x2c\x07\x0a\x2e\x3f\xaf\x2d\x4c\xef\
+\x0d\xab\x88\x6b\x79\x63\xce\x7a\x82\x2b\x2f\x3c\xff\xcb\x4f\x43\
+\x61\x72\x36\xf3\xe8\xf2\x7d\x30\x87\x59\xbb\xf6\x70\xca\x1e\x18\
+\xeb\x37\x99\xcf\xee\xf8\x01\x3c\xd3\x81\xd1\xd9\x21\xa7\x60\x08\
+\x48\xdd\x58\x63\xb9\x0e\x0a\x39\x3c\x29\x33\x78\x1d\x6c\x56\x2d\
+\xd9\xb9\x2a\x0d\x4f\x31\xf7\xfd\xc9\xe3\xfa\xb9\x73\x38\xad\x92\
+\xcc\x39\x62\x46\x17\xaf\x8b\x28\xa5\xed\x59\xf3\x0a\xca\xe6\xdd\
+\x0c\x81\x30\x2e\x19\x70\x0b\x05\xc8\x20\x49\x96\x07\x88\x7b\x22\
+\xe8\xe1\x48\xf1\xe9\xb4\xbe\x9f\xcf\xf7\xa7\xf2\x1a\x9b\xfb\x74\
+\x48\x7d\x44\x97\x32\xe2\xe9\x23\x7b\x2f\xea\x40\x7b\x1d\xa2\x69\
+\x6e\x95\x8c\xe7\x06\x4c\x8e\xc6\xf5\x98\xda\x66\x1c\xd0\xfe\x18\
+\xcf\x31\xe8\x2b\x8d\xb9\xc6\x0a\xfd\x78\x6d\x17\x7e\x8e\x76\xe8\
+\x95\xad\x4c\x2f\x4c\x4f\x4c\x6f\xff\x6f\x03\xe0\x72\xb7\x90\x43\
+\x86\xa3\xc9\x32\x5c\x4e\x38\x9c\x16\x7c\x0e\x76\x57\xd4\x6d\xb9\
+\x4b\x92\xe5\xca\x63\x89\xf4\x5e\x7b\xbc\x76\x74\x6e\xb8\xf1\x55\
+\x7b\x0a\x4e\xbe\x8c\xbb\xf4\xb3\x31\x26\x6e\x0a\x36\xce\x35\x7f\
+\x4c\xb1\xea\x10\xfb\xf5\xd6\x4d\x0e\x97\xde\x94\xf9\xb2\xc1\xa1\
+\x80\x8e\x70\x3e\xed\xfa\x21\x19\x42\xa2\x6d\x1c\x29\x3c\x41\xb0\
+\x86\x42\xcc\x55\x3c\x37\x5a\x5e\xb5\x76\x06\x94\xaa\x21\x62\x46\
+\x79\xf7\xd4\x73\x7c\x01\x23\x89\xe8\xbf\x72\xee\x52\x02\x45\xa6\
+\x3e\x02\x70\xa5\x3e\xb0\xb2\x00\x7b\x4a\x4b\x48\xda\x68\xf4\x44\
+\x8d\xdf\xec\x82\x40\x8b\x60\x88\xac\x60\x53\x14\xdc\x76\xd7\xad\
+\xf8\x38\xf4\xec\xc1\x57\x06\x15\x66\x41\xbf\x18\x6e\x7c\x2f\xe4\
+\x99\x05\x3c\xc9\xd3\xc8\x05\xc5\xe0\x89\x86\x08\xc2\xfb\xe4\x40\
+\xfd\x7d\x7e\xe8\x11\x78\x52\x84\x2f\xa1\x52\xba\x6e\xc6\x00\xcb\
+\xde\x86\x97\xdb\x4f\x03\x86\xc8\xf7\x5d\x3c\x82\x43\x57\xdb\xcb\
+\x57\x76\xd8\x1e\x73\x26\x65\xfc\x1c\x07\x87\x5c\x4d\x72\x3d\xa7\
+\x00\xcd\xdf\xa9\xc7\x53\xee\x1e\xca\x4f\x06\x3d\xd5\xea\x09\x78\
+\x6e\xa4\xf8\x44\xc1\x5a\xda\x2b\x71\xb5\xa5\xcd\x21\xb3\xbc\xeb\
+\x3a\x8a\xa8\x46\x3b\x64\xd2\xa6\xda\x4a\xe7\xd1\xd4\x71\x2e\xe1\
+\xeb\x27\xcd\x77\x8c\x8f\x31\x90\x6b\x3c\xa4\x9f\xa0\xfd\x19\xf0\
+\x76\xfb\x63\x8c\x64\x4a\xd2\xda\x8f\x69\xd2\x73\xc3\x41\x0f\xf1\
+\xa8\x07\xa6\x17\xa6\x27\xa6\xb7\xdf\xf0\x6c\xa0\xcf\x20\x1c\x89\
+\x78\x17\x1c\x77\xe3\xc8\xe3\x15\xef\xae\x81\xfa\x0b\x75\xf1\x82\
+\x64\x5d\xc2\xf9\x43\xaa\x50\x83\xbb\x7e\x92\xcc\xbe\xdd\x5b\xff\
+\x50\x3b\x94\x04\x3e\xa7\xd9\x8e\x89\x4c\xb0\xf5\x71\x97\x2c\xbd\
+\xd5\xb1\x8a\xd0\xd7\xbd\x0f\xc5\xb0\x07\x3a\xfb\x52\xe0\xc8\xdb\
+\x7e\x38\x2a\x94\x33\x5f\x18\x48\x0f\x52\x08\xc6\x12\x91\x16\x72\
+\x8d\xa1\x40\xec\x7e\xc0\xbb\x80\x0b\x3a\x3d\xc3\x34\xfa\xfd\x39\
+\x12\x6b\xf1\x45\xa4\x3d\xb3\x04\x4e\x0c\x11\x58\x65\x96\xe1\x90\
+\x61\x72\xd0\x08\xd0\x70\x0c\xe7\x1b\x3c\x00\x43\x75\xc3\x8a\xbf\
+\xa0\x4d\xe3\xab\xf9\x9f\x00\x66\x2b\x6b\xb3\x7c\x00\x8f\x29\x63\
+\xee\xf4\xa4\xf2\x6d\xf7\xcf\xe0\x75\xda\x80\xe2\x6d\x74\x16\x59\
+\x5f\xeb\x47\x59\xb9\xd1\xaa\xa9\xb4\x99\x93\x4c\x21\xde\xf9\xb0\
+\xe6\x89\xb1\x1a\x22\x29\x7c\x7e\x47\x36\x19\x68\x0d\x28\x7e\x81\
+\x75\xee\x02\x72\xa2\x3c\xd5\x28\xb7\x25\x0a\xdb\x81\x72\x43\xbb\
+\x66\x90\xab\x57\x08\x03\x49\xf1\xc1\xf6\xcb\x48\xf1\x72\x67\x67\
+\xab\x87\x70\xeb\x43\xf5\x3c\x77\xaa\x44\x83\x33\x1d\x41\x43\x6f\
+\xbf\xd0\x16\xaf\x5e\x0b\xd8\x5f\xaf\xc7\x44\x13\xd5\x23\xfd\x2e\
+\x7d\x7f\x99\xbd\xf6\x28\xbf\x5c\x37\xec\xfc\x21\xa6\x07\xa6\x17\
+\xa6\xa7\xdf\xfc\x70\x28\x05\x12\xc8\xa2\xea\x41\x5d\xe6\xf7\x5c\
+\x86\x3b\x5a\xc0\xe2\x4e\xf8\x0c\xf1\x38\xc8\xa9\x7f\x78\x50\xe4\
+\x61\x98\xac\xfe\x32\x45\xaa\x2f\x37\x6c\xd2\xb7\x9a\xf7\xb4\xef\
+\xd2\xce\x54\xe0\x9b\x79\xd7\xeb\xce\xa8\xa7\xa3\xab\x36\x57\x0a\
+\xee\x21\xa1\x9c\x41\x2e\x0a\xea\xd9\x85\x9e\xc3\x00\x20\x11\xc2\
+\x6d\x0d\x60\x9a\x69\xa3\x53\x0b\xf5\x7c\x67\xbb\x14\x8a\x24\x4e\
+\xb5\xd5\x76\xf6\x18\x54\x24\xba\xce\x03\xa4\x80\x6c\xde\x09\x34\
+\x08\x20\x7a\x8b\x75\x3b\x96\x14\x70\x19\x0c\x24\x86\x14\x92\x46\
+\xdf\x7d\x2d\xcf\x48\x21\xce\x60\x20\xe4\x7a\xc1\x63\x4c\x21\xc5\
+\xbc\xc7\x51\x90\x07\xd9\x64\x59\xd5\x89\xa3\xa9\xde\xc9\x54\x3e\
+\x0a\x70\x4a\x67\x8f\xc6\xc9\x29\xde\xbf\x00\x15\xd9\xa9\xe8\xe3\
+\xa8\x60\x32\xc4\x2c\xea\xe1\x35\x28\x07\xc5\x21\xb2\xe8\x90\x67\
+\x28\xca\x49\x7b\x21\x9b\x05\x1a\xa2\xee\x73\x5b\x5b\x5a\xd6\x29\
+\xec\x6e\xd3\xe6\xd9\x48\xa7\x10\xda\x3d\x7d\xe6\xb6\x90\x7e\x4f\
+\xf4\x18\x46\x79\x13\x35\xae\x2e\x18\x58\x83\x65\x1e\xbe\x06\x22\
+\xa3\xad\x54\xb5\x0d\x9d\xb9\xee\x8c\x12\x54\xaa\x4f\xd3\x4f\xd3\
+\xab\xcc\x7b\xea\x95\xfa\x18\xd5\xdd\x14\x29\xe3\x9d\xe9\x81\xe9\
+\x85\xe9\xe9\x77\x7c\x3f\xc0\xcc\x60\xa4\x87\x9b\xcd\x05\xf1\xdb\
+\x25\x3e\xd7\x7b\x40\xbf\x11\xf5\xb3\x4f\x77\xcc\x32\xb6\xa5\x26\
+\xd7\x4e\xd5\xc4\xaa\x96\xe7\x2c\x34\x2c\xd5\x2f\xd1\x7a\x72\x14\
+\x86\x77\x34\x3f\x4a\x37\x60\x7a\xb5\x6e\x96\x92\x8b\x99\x7f\x66\
+\x27\x5b\xdc\xc6\x75\xe1\x2a\xdd\xa7\xd3\xe9\xd8\x69\x6f\xc5\x93\
+\x61\x8c\xf2\xdc\x41\x04\xf9\xb8\x85\x93\x87\x70\x72\xdc\x44\xc4\
+\x4d\xa1\xa1\x02\x56\x76\xb6\x42\x5a\x46\x1e\x17\xcc\x20\x83\xf0\
+\xe5\xfb\x13\xe1\xd9\x7c\x24\x32\x11\x14\x95\x4b\x0a\x49\x23\x03\
+\xe1\x90\xc2\xac\x8a\x5a\x08\x48\x06\x63\x35\x14\x40\xf4\x20\xd9\
+\xe8\x39\x08\x23\xb1\xde\xce\x72\x76\x5d\x0d\xdc\x17\xc3\x0c\x0c\
+\x40\x01\xf5\xd2\xf2\x15\x9e\x53\x0c\x08\x06\xc1\x9b\x86\x86\x06\
+\x72\x8c\x01\x4c\xb0\x24\x0a\x86\xe0\xf3\x40\x4e\x4f\x3a\xda\x75\
+\x99\xe4\x86\xc8\xa7\xe3\x3e\x1a\xdb\x3f\x73\x9b\x46\xcf\x71\xf6\
+\xfc\x84\xba\x94\xdb\x5b\xdf\x13\xba\x76\xc3\xa1\xcf\x62\x2e\xb0\
+\x45\x17\xef\xa0\xf3\xc4\xf7\x25\x18\x26\xaa\x7f\x90\xad\x07\x86\
+\xbf\x6e\x5b\x0c\x09\x24\x8a\x9a\x31\x9a\xef\x54\xd5\x39\x0b\xed\
+\x3e\x75\x9c\x6d\xac\x48\x4d\x65\xbc\x33\x3d\x30\xbd\xfc\xce\x2f\
+\x88\x60\x9e\x80\xfa\x8a\x0c\x67\x99\x5d\x6f\x43\x8f\xe1\x68\xfb\
+\x05\xce\xf1\x85\x45\xdd\x8b\x3c\xdd\x8f\xfc\xfd\x6d\x43\x8f\xdc\
+\x11\xbb\xaa\xa3\x34\xbb\xcb\xba\x18\xba\x6a\x63\x95\x85\x60\xc1\
+\xb7\x94\x53\x1b\xcf\x82\xa8\x87\xb5\x1e\x2d\x55\x14\xc9\xea\x25\
+\xe8\x4b\x22\xec\xef\xd6\x0d\x73\x55\x78\x27\x7b\x0e\xc7\x9a\xb9\
+\x91\xde\x34\x69\xb4\x58\x7a\xa0\x41\x40\x9e\x81\xfb\x3d\x40\xd8\
+\x14\x71\xde\x44\xbf\xdf\xb5\xdf\x0d\x48\x07\xcf\xc9\x43\x70\x6c\
+\x62\x01\x57\x5a\xe6\x0b\x34\xa4\x90\x51\xfc\xb5\xd6\x1e\xcc\x57\
+\x53\x8f\x7e\x0e\x8a\x42\xcf\x92\xc5\xe6\x16\xbc\x62\xc2\x6c\x7e\
+\x78\x27\xbe\x4f\x58\xcd\xab\x23\x7c\x46\xd7\x45\xc1\xf7\xe9\x9d\
+\x06\x56\x4f\x9e\x20\x94\xbf\x9d\x96\xaf\x2b\xe9\x39\xe0\xca\x6d\
+\x63\x49\x8e\x55\x20\x07\xa2\xd2\xce\x2a\xd7\x14\xe7\xbf\x93\xdc\
+\xc7\xdc\xf9\xd4\x8e\xd6\x1e\x49\x56\xe6\xbc\x83\xf1\x57\xfe\x81\
+\x9e\xcb\xe8\x7b\x24\xb6\xdb\x92\x66\x8a\x16\x7c\x45\xbc\x94\x60\
+\xde\xbf\xa1\x59\xb5\x15\x79\x32\x3c\xd4\x2d\xc2\xc0\x91\xe8\x7b\
+\x75\xb2\x7a\x60\x59\x17\xad\x94\xd7\xae\xab\x3e\x72\x27\x70\xa2\
+\xef\x1e\xe0\xf9\x1a\xe3\x9d\xe9\x81\xe9\xe5\x77\x35\x80\x7f\x35\
+\x84\x48\x4f\x6b\x6c\x19\x17\x75\xe6\x4c\x8f\x7c\x0f\x3c\x8f\x93\
+\x10\xf4\xca\x17\x76\xe5\xf3\x86\x8a\xf2\x0c\x1d\xaa\xee\x3f\xce\
+\x68\x8a\x56\xdf\x54\xff\xb5\x7e\xab\x21\x5e\xf3\xa5\x1c\x14\xa8\
+\xd7\xb7\x3a\xd7\xa9\xa0\xc1\xb7\x34\xee\xcd\xef\x80\xe8\x1b\x61\
+\xeb\xe6\x38\x9d\x2c\x8a\x71\x5b\x0d\xb8\x40\x70\xaa\xd7\x47\xf4\
+\x0a\x19\x7f\xdf\x29\x56\xa2\x7c\x8e\xd2\x64\x8a\xf3\xd6\x21\x22\
+\x36\xc1\xe3\x2b\x72\x72\x0a\xb7\x5c\x6b\x0f\x72\x6a\x21\x9c\xea\
+\xb0\x9b\x30\xbd\xeb\x41\xec\xc1\xdc\xcf\x85\xe3\xc9\xb3\xb8\x08\
+\xbf\xa3\x9e\x5e\x68\x7b\x06\x91\x93\x6d\xd3\xcf\x8a\x82\xfb\x0c\
+\x59\x39\x5d\x57\x43\xd7\x5d\xb6\x28\x84\x71\x68\x60\xa0\xe0\x59\
+\xac\x5e\x3c\xce\xce\x5b\xe0\xb0\x8c\x70\xb5\x93\x13\x51\x9e\x43\
+\x72\x14\x5a\x46\x79\xfe\x44\x72\x5a\xde\xba\x6d\xf5\x70\x24\xf7\
+\x16\xfe\x3d\xdf\xd1\x80\x31\x82\x6d\xbd\xe6\x51\x79\x18\xb6\xd3\
+\xe2\x03\x5b\x50\x2e\xc0\xc3\xbb\x6a\xbe\xe4\x53\xe0\xe5\x6d\xe0\
+\xa5\x1e\x30\x5e\xfd\x85\x1c\x3c\x46\xe3\x70\xd5\x54\xb5\x7d\xfd\
+\xd6\xfa\xc3\xfa\x50\xd5\xe9\x1f\x67\x30\x5e\x19\xcf\x8c\x77\xa6\
+\x87\x3f\xec\x2d\x61\x5c\xee\x07\xd8\x3f\xa3\x78\xbb\xf9\x10\x0e\
+\x31\x8d\xe8\xa3\xea\x0e\x6a\x90\x9c\x0f\x2a\xf7\x99\xcb\xa9\xbf\
+\xa9\x7f\xad\xd2\xf0\x94\x2f\x0f\x5c\x15\xef\x53\x4e\x52\x69\xc4\
+\x63\xf5\x7a\xf5\x36\x69\x34\x04\x29\xe3\x65\x99\x95\x68\xf1\x76\
+\x8a\x55\xb5\x0b\xf0\x4e\xfd\x3a\xca\x76\x85\xde\xe3\x70\x91\xde\
+\x28\xa2\xf1\x6a\x06\x5c\x65\xd3\xcf\xcf\x0f\x51\xb0\xb6\xef\x60\
+\xc0\x41\xfc\x7b\x7e\xab\x89\xf8\x2d\x3e\x3e\xe4\x19\x56\x79\xdb\
+\xd3\xf7\xe3\x3d\x0e\x92\x44\xb5\x1e\x36\xe8\x51\xb8\xff\x70\x5f\
+\x4d\x4d\xcc\x75\x81\xfa\xb9\xa3\x79\x6e\xce\xce\xd6\x72\x1c\x83\
+\xe9\x6d\x45\x2d\x0c\xa9\xfc\x0a\x94\xe3\x75\x3c\x67\x0b\x29\x98\
+\xe7\xb2\x85\x4e\xed\x16\xbb\xaf\xa1\xdf\xa7\x42\xbd\xe8\xe2\x7b\
+\xf7\x78\x08\x08\x43\x8d\xb7\x37\x51\xd0\xdb\x27\x84\xe4\x5a\xed\
+\xb7\x90\xde\xf0\xd1\xaf\xaf\x3b\xe6\xeb\xdb\xd8\x90\xdc\x83\x04\
+\x22\x2f\x03\xed\xf3\xdf\xc5\x2c\x7d\xb3\x59\xaf\x6f\x6b\xc3\x93\
+\x4b\x8a\x44\x6c\xb7\x7e\x87\x5c\x5e\x89\x27\x9c\x26\xa8\xef\xc9\
+\x20\xa0\x26\x56\x29\x8b\x55\x47\xc5\x63\x2b\x8a\xd5\xdd\x15\xb3\
+\x0f\x5c\x65\x3c\x32\x5e\x19\xcf\x8c\xf7\xff\xa0\xf7\x04\xbe\x03\
+\xea\x02\xf7\xca\x93\xbd\x8f\x63\x52\xe0\x5e\xef\x22\x68\x8e\x4d\
+\xe0\x76\x9f\x81\x9c\x29\x69\x09\xe5\x5d\xd5\x1d\xca\x39\x7b\x52\
+\x6b\xb6\xb4\x2c\x56\x0c\xa8\x4c\xd5\x97\xa9\xc2\xa5\x15\x60\x08\
+\x0d\xd2\xb9\xaf\xd6\x03\x11\x4d\x52\xfb\x32\x88\x1c\x1a\x2f\xa8\
+\xae\x34\x7f\x8d\x9b\x4c\xa6\xd7\x14\x48\xa9\xe1\xe5\xba\xf1\xb0\
+\xff\xd9\xce\xec\xb5\x11\xf0\x84\x6d\x40\xdf\x7a\xc0\x44\x5b\xcf\
+\xc0\xb3\xe8\x80\x6d\xba\x05\x7c\x83\x8a\x12\xfc\xd0\x4f\x43\x4d\
+\x52\xfa\xdf\x23\x0f\xe0\xea\x97\x6e\x35\x08\x5f\x27\xf4\x04\xdc\
+\xfd\xbd\xf6\x52\x79\x6d\xaf\x54\x2a\x2f\xea\xd9\x93\xb0\x16\x10\
+\xcb\x95\x50\x8e\xd7\x9d\xe8\x95\x8c\x8a\xe6\x2a\xe1\x3e\x7c\x7e\
+\x98\x5f\x0e\xfe\xce\x2b\xf6\xff\x15\x0d\x81\xbf\xb6\xaf\x88\x14\
+\xac\x0d\xf8\x00\x10\x5e\x51\x1b\x98\xd4\x29\x97\x1a\x30\xc7\x66\
+\x1c\xde\xcf\x71\xe1\xed\xc7\x63\xdc\x90\xf9\x78\x11\xe7\x1a\xc6\
+\x27\xea\x93\xcd\xe5\xd4\xce\xe8\x72\x3c\xb1\xd7\x24\xdd\x5d\x71\
+\x18\xf0\x9c\x7a\x8c\x14\x0c\xb8\x5a\xda\xe2\xa4\x28\xaf\x4c\x2d\
+\xf3\x57\x05\x28\x5a\xf7\xa4\x32\xde\x18\x8f\x8c\x57\xc6\xf3\x7f\
+\xdc\x8b\x22\x69\x04\xa2\x31\x68\xb6\x12\x4f\xc8\x0a\x67\x0a\xf7\
+\xe1\x26\xe9\xc0\xd8\xde\xb0\x23\x20\xd2\x84\x4c\xf3\x0b\xe6\x88\
+\x2e\xfb\x56\xb7\x69\x3d\xd4\x11\x3b\x6f\x16\xdf\x68\xb6\x6f\xb9\
+\xf3\xb8\x5d\xb3\x44\x75\x4b\x7e\xa6\x23\x59\x37\x5e\x16\xfd\x7a\
+\x1e\x10\xf2\x5d\x53\x7c\x91\x12\x8f\x38\xc9\x8e\x94\x7f\x08\xb6\
+\xbe\x5e\x33\x44\xe6\x80\xab\x08\x93\x03\x25\x98\x58\x78\x75\xae\
+\x4a\xc0\x13\x36\x1e\xde\x19\x80\x39\xc2\x07\xfe\x57\x00\x8b\x84\
+\x4b\x02\x03\x51\x0e\xe1\xec\xa0\x5f\x50\x11\xc2\xd2\xfe\xef\x92\
+\xe1\x0c\xeb\x3f\x80\x14\x74\xbd\xbf\x17\xa2\xcd\xb8\xa0\xf3\x80\
+\x5b\x6c\x66\xf6\xff\x94\x70\x1c\x21\x95\xd3\xf5\x2f\xe1\x3a\x44\
+\x5b\x40\x7c\x7f\x61\x12\xd5\xc3\xed\xb2\x38\x08\x27\x6d\xb5\xc2\
+\x88\xb7\x23\xb0\x5c\xf8\x0d\x1a\x04\xcc\xf5\xf3\x48\x0e\x05\xef\
+\x1f\x28\x97\x65\x85\xc9\x84\x72\x1a\x5f\x6b\x66\xca\xa0\x3d\x86\
+\x47\xd2\x65\x65\x90\x32\xa6\x2b\x6d\xba\x59\x54\x04\xb8\x43\xb6\
+\xa1\x02\x0c\x5e\xf3\xb5\xea\xb0\xfc\x5c\x47\x72\x91\x63\xd3\x67\
+\xf2\xaf\x1f\xb7\x57\x05\x6b\x3e\x56\x95\xef\xbc\xc9\x78\x62\xbc\
+\x31\x1e\x19\xaf\x8c\xe7\x3f\xcc\x00\xfe\xfd\x49\xe2\x98\x9b\x64\
+\x08\x65\x36\xdd\xf1\xa8\x65\xc8\x0b\x7f\x48\xfa\x6e\x10\x0e\x19\
+\x11\x08\x63\xd8\xb5\xb1\xea\xdb\xdc\xb0\xb6\x9d\xdf\xce\x7c\xf0\
+\xa5\x78\x82\x8c\x7b\xf1\xe3\x66\x55\xcb\x05\x79\xa6\x3a\x5c\xf7\
+\x4d\x4b\x55\x2d\x2c\xa3\xb4\xb1\x0d\x71\x85\x89\x40\x58\x92\xd8\
+\xe6\xc9\x13\xa0\x20\xbe\xf9\xf6\x0b\x0d\x10\x5b\xa1\x8a\x69\x98\
+\x85\x6f\xe1\x33\x34\xeb\x71\xac\xb7\x74\xac\x14\x2e\xa2\x9e\x3a\
+\xcd\x75\x35\x79\x84\xfb\x5e\x73\x00\x8b\x6c\x67\xf9\xfa\x02\x2a\
+\xbb\x2c\xf6\x2f\x06\xac\xed\x52\x16\x10\x47\xf8\x76\x60\x29\xca\
+\x09\x98\xc4\x10\xcb\xbb\x42\x39\xfd\x7e\x03\xae\xc3\xfb\x76\xfa\
+\xd7\xe3\x77\xa1\xb5\x9e\xfd\x82\x6f\xbd\x96\xe2\x90\xc3\xef\x03\
+\xcf\xa1\x65\xa5\xf0\x67\x5c\x23\x18\x0c\x98\xf4\x69\x6c\x57\x2e\
+\x68\x80\xfb\xf4\xbf\x48\x76\xbd\x10\x80\x21\xcf\x02\xb9\x2b\xa0\
+\x1d\xf9\x8d\x37\x8a\x72\xe0\xfb\x8d\x96\xaa\x3a\x30\xd4\xe6\xe4\
+\x96\xd8\x96\x03\xea\xf0\xfc\xcd\xa2\x1f\xa5\x49\x17\x3f\x56\x8f\
+\xe1\x14\xb4\x4d\xfa\x76\x26\xe3\x85\xf1\xc4\x78\x63\x3c\x32\x5e\
+\xff\x6b\xde\x16\xce\x2c\x95\xcb\x1d\x0b\xea\x80\x0d\x0e\x55\xe9\
+\x63\x68\xd0\x93\xa0\x1b\xbe\xe0\xe8\x65\xf3\x46\xe6\x86\x42\xe3\
+\x72\x73\x9d\xdd\x9d\x27\x9b\x3e\xdb\x9d\x91\xbf\xa6\x29\xa9\xe5\
+\xd3\x5d\xde\xcf\xeb\x1a\xee\xc9\x86\x17\xd6\x28\xc3\x5a\x27\x4a\
+\x4c\xa6\xb9\xba\x9f\xa5\xbb\x5f\x5d\x00\x22\x6d\xc4\x33\x9e\xd8\
+\x03\xc6\xd5\xaa\xf2\x4e\x01\xa1\x0f\xc4\x79\x8f\xa0\x66\x83\x41\
+\xb2\xb4\x44\x0b\x0a\x90\x2a\x63\x70\xd7\xd0\xb4\x51\x77\xbd\x15\
+\x73\xe3\x32\xdb\x1f\x1b\xd6\x51\x16\x7d\x26\x6f\xaa\xf5\x45\x10\
+\x14\x79\xcb\xe6\x5c\xb6\xf3\x42\xe4\xa6\x3b\xc8\x10\x19\x5a\x8e\
+\x43\x39\xae\xf7\x8f\xe1\x75\x70\xda\x61\x0f\xde\xd7\x51\x60\x78\
+\x8c\xb9\x81\xe6\x23\xba\xd3\x78\xa6\xd1\x34\x57\x11\x53\x7f\x0f\
+\xfb\xa4\xf4\x6f\x25\x3a\x90\x43\x27\xbe\xff\x08\x0c\x43\x97\x5f\
+\xe7\x7e\xff\x3e\xc8\xa7\x15\x9d\x7a\x12\x0d\xdf\x1b\xa4\x17\xd0\
+\xc5\x2b\xba\xb5\x06\x37\xcb\x4d\x73\x9f\x7d\x28\x1e\x2b\x6b\x2b\
+\x2c\xcc\x3f\xd5\x58\x2e\x17\xec\xb2\x77\x16\x39\xfb\x9a\xc6\xed\
+\xce\x60\x3c\x30\x5e\x18\x4f\x8c\x37\xc6\xe3\x7f\xfd\xff\x05\x70\
+\xb9\x2b\x0e\x02\xf8\xf2\xf3\x2a\x63\x81\xc6\x8f\x7c\x1c\x9d\x60\
+\x0d\xa0\x0a\x1f\x3d\x2c\x54\x03\xcb\x9a\x7e\x43\xa6\x07\xf0\x38\
+\xe2\xe3\xbd\x5b\x7a\x9b\x3d\xdb\xba\x6f\x08\xbe\x75\xb2\x3a\x4b\
+\xb2\x28\x69\xe7\x73\xa3\xf8\x84\x54\x5e\x26\x94\xcf\x95\x77\x6f\
+\x9a\x68\x5c\xaa\x8b\x95\x1a\x5f\x3f\x05\x17\x7a\x5f\x7c\xba\xa0\
+\x00\x08\xdf\x5e\x1b\x93\x7b\x15\x70\x68\xf5\xa8\xec\xe7\x40\xbc\
+\x6d\x2d\x2f\x47\x09\x8a\x79\x5b\xb4\xfd\x41\x77\x9c\x5d\x37\x06\
+\x3c\xb9\x88\xcb\xab\x66\x43\xf1\x34\xc0\xbf\x49\x33\x4a\xc4\x40\
+\x71\xbb\x74\x6e\x69\x1b\xe1\xb2\x52\x21\x2b\x07\x2c\x6f\xee\x8a\
+\xd7\xe9\xff\xd2\x10\xf1\x54\x0e\xf5\xcc\x16\x5d\xcb\x6f\xc3\xd3\
+\xc7\xb5\x6e\x39\xae\xf4\x9c\x95\xd9\x16\x78\xfe\xb7\x35\x27\x72\
+\x7f\x85\xef\xd7\xc5\x25\x05\x66\xc0\x33\x52\xfb\x0a\x30\xa4\x96\
+\x15\xf2\xae\x4d\xde\xc6\xa5\xcf\x76\x8a\xbc\x24\x0f\xca\x84\xb7\
+\xaa\xab\xbc\x25\x82\xa4\x9d\x2d\xe7\xcc\xd7\x74\x15\x1b\x46\x0c\
+\xfe\x20\x40\x0b\xed\x1c\xc4\xda\xcd\x78\x60\xbc\x30\x9e\xfe\x47\
+\xff\x31\x84\xb6\x99\x17\x5b\xb7\x27\x27\xf4\xc6\x2d\x15\xe7\x9f\
+\xdc\x85\x40\xb7\x70\xe8\x59\x7f\x20\xa2\x71\xf6\xb8\x39\x43\x22\
+\x61\x60\x8f\xec\xaf\xf7\x73\xe4\xf0\x12\x57\x35\xae\xd7\x17\xe9\
+\xbe\x88\xbb\xf1\x7f\x6b\x5e\xdf\x93\x6e\x48\x0c\xcb\x39\x5b\x7d\
+\x41\xb2\x39\xff\x65\x65\x68\xe3\x81\x66\x5b\xf9\x08\xc5\x6a\xd9\
+\x11\xd1\xcb\x8e\xbd\x5a\x0f\x89\xdd\xab\x76\x50\xc4\x57\x62\xc1\
+\xf3\x6a\x50\x90\xa6\x36\x3d\x3f\x0e\x30\xaf\xfa\xf3\x9c\x22\xc0\
+\xfa\xaa\xaa\x4c\x47\x40\x51\xe5\xf2\x3b\x77\x00\xbb\x55\xf5\xca\
+\xf0\x06\xec\x07\x68\x0f\x28\x80\x72\x19\x62\x55\x47\x66\x2f\x40\
+\x71\xf5\xca\xbb\x27\xf0\xfa\xba\xf4\xfc\x24\xc0\xaf\xc4\x1e\xcf\
+\x5b\xa1\x7e\x4f\xa9\xd7\x2b\x09\xc4\xde\x0e\xc8\xf7\xe2\x73\x5f\
+\x07\x36\x2e\x69\x2e\x93\x8f\xc8\x1d\x5c\xf5\x89\x64\x48\xfe\xcb\
+\xeb\xd9\xaf\x07\x49\xdf\x4d\x0c\x6b\x0c\xd1\x27\xe9\x82\xe2\x6e\
+\xb0\x76\xb0\x76\xb1\x76\xb2\x76\x33\x1e\x18\x2f\x7f\x8a\xff\x0c\
+\xfa\xd7\x21\x62\x84\x1d\x2d\x96\x1c\x1f\x2d\xc3\xfc\x9d\x5e\x7c\
+\xbb\xcf\x81\xe6\xfb\xa3\x72\x07\x40\x04\xbf\xae\x78\x82\x39\x02\
+\xd4\x91\x55\x15\x2e\x08\x48\xe7\x14\x1c\x70\x33\xd7\xd9\x1c\x31\
+\xa8\x63\x4b\x9e\x2a\x9b\xfa\x2b\xa7\xaf\x4b\x49\x3b\x5a\x76\xa6\
+\xf9\x6c\xd2\x8e\x0c\xdb\x0a\x73\xd3\xc8\xac\x4b\x05\xbe\xb5\x7b\
+\x9a\x3d\x2a\x83\xcb\x83\x1a\xba\x34\x9e\x93\x67\x8a\x44\x4d\xef\
+\x8b\x17\xb7\x2d\x92\xad\x93\x04\xd5\x39\x9b\xe7\x29\x16\x4a\x0b\
+\x6a\xaa\x2d\x93\xd5\xb3\xa5\xc7\xaa\xeb\x38\xc7\xd4\xe3\xa5\x69\
+\x88\xca\xe9\xd2\xcc\x9a\x34\xcb\x64\x79\xbc\xc4\xab\xce\xd7\x3c\
+\x4f\x54\xd2\x34\x58\xbc\xa8\x6d\x51\xf9\x40\xb1\xb4\xf1\x17\x79\
+\x66\x81\x6d\xed\xd6\xe6\x92\xca\xe0\xdb\x17\x5e\xed\x6d\xf2\xcf\
+\xba\x74\xc9\xb1\x74\x5c\xf3\xa2\xa4\x1d\x4f\xbf\x6f\xfa\x55\x19\
+\xb6\x2e\xc5\x74\xda\x66\xbe\xa1\x2a\xb6\x84\xc9\xc9\xe4\x66\xed\
+\x60\xed\x62\xed\x64\xed\x66\x3c\xfc\xe9\xff\x35\x8c\xcb\xdd\x8c\
+\x50\xc3\xe5\x7e\x84\x81\xd5\x56\xe1\x86\xc7\x73\x30\xef\xa5\xb7\
+\x77\x0f\x3e\x10\x17\x30\xf6\xed\xf7\x1e\xe1\xe4\x68\xf2\x93\x77\
+\xc0\x21\x17\x2c\x1f\xd7\x18\x01\x61\x9b\x94\x5d\x61\xf9\xfd\xa2\
+\x39\x85\xdf\xff\x4d\xb8\xcd\x7e\x99\xf1\xcc\x5a\x51\xdd\x4d\x6d\
+\xb8\xf6\xd6\x8a\xa8\xa7\xaa\xa6\xaf\x95\x35\x71\x9e\x19\x91\xd5\
+\x63\xe5\xc6\x6d\x57\xd3\x9e\x95\x0e\x93\x14\xec\x4b\x48\x91\x94\
+\x7c\xdf\xf4\x28\x69\xc2\x99\xdc\xe2\x88\xc6\xb1\xc9\xcb\x01\xbb\
+\x23\x9e\x2f\xb7\x96\x5f\x3a\x5a\xea\x21\x49\xdd\x97\x90\xe1\x5c\
+\xed\x2f\x97\x6e\xbb\xfa\xf4\x52\xd3\x30\x65\x56\x9c\x67\xdd\x16\
+\xad\x11\xeb\x15\x2e\x87\xe7\x24\xae\x15\xb1\xe7\x32\x39\x98\x5c\
+\x4c\x4e\x26\x37\x6b\x07\x6b\x17\x6b\xe7\x9f\xfe\x5f\xc3\xfe\x7d\
+\x83\x18\x2d\x01\x1c\xc5\xe5\x0e\x4b\xc4\xbd\x45\xf7\xe8\x29\x30\
+\xd2\x1b\xde\x0a\xb1\x71\x8d\x80\xb1\xf3\xc0\x84\xab\x21\x37\x60\
+\x9d\x2c\x8e\xda\x39\xe6\x07\xc8\xf7\x99\x31\x6d\xd6\xf0\xaf\xa0\
+\xe7\xf9\x4c\x8a\x8a\x80\xa9\xd8\x85\xb9\xef\xcf\x1d\x7c\x12\xf2\
+\x87\x96\xbe\x23\x1d\x00\x3b\x08\xfb\x7c\xc2\x4f\xf6\xed\x03\x29\
+\xa6\x8b\x43\x12\xfb\x86\x41\x66\xa1\x3f\x43\x56\xce\xae\x63\xf7\
+\xb1\x7a\x58\xbd\xec\x39\xec\xb9\x4c\x0e\x26\x17\x93\x93\xc9\xcd\
+\xda\xf1\xe6\x7f\x03\x7f\xdb\x65\x66\x21\x97\x3b\x05\x48\xc5\xbc\
+\xba\x0f\x87\xe3\x7b\x78\x5c\x14\xe3\xd6\x40\x4f\xf3\xee\xb9\xb9\
+\xc7\x03\x18\x5b\xcf\x0d\x08\x33\x42\xc0\x44\xbd\xf6\x2f\x13\x87\
+\x06\xc1\xd4\x6c\xe5\xd8\xf1\x3e\x33\x61\x11\xb6\x6e\x52\xfc\x7b\
+\x0a\xe8\xa1\x0d\x51\x8e\x73\xb4\xb0\xce\x7e\xc1\x90\x95\xb3\xeb\
+\xd8\x7d\xac\x1e\x56\x2f\x7b\x0e\x7b\x2e\x93\x83\xc9\xf5\xe6\x9f\
+\x43\xff\x70\x03\x89\xa4\xfc\x77\x98\x54\x51\x1e\x11\x97\x3b\x24\
+\x0c\x10\x32\x6f\x67\xcd\xc6\x40\x33\x8c\xbd\xf9\x80\x3e\x5c\xae\
+\x1f\x17\x37\x51\x18\xb2\x72\x76\x1d\xbb\x8f\xd5\xc3\xea\x7d\xf3\
+\xdf\xc1\x6f\x3e\x6f\x0c\xe0\xcd\xe7\x7f\xe7\xf3\x4f\xda\xd9\x47\
+\x7f\x10\xe1\xae\x91\x00\x00\x00\x22\x7a\x54\x58\x74\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x00\x00\x78\xda\x2b\x2f\x2f\xd7\xcb\xcc\xcb\
+\x2e\x4e\x4e\x2c\x48\xd5\xcb\x2f\x4a\x07\x00\x36\xd8\x06\x58\x10\
+\x53\xca\x5c\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x09\x61\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x52\x65\
+\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x6d\x79\x52\x65\x63\x74\x0a\x0a\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\x74\x65\
+\x78\x74\x0a\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x37\
+\x35\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x35\x30\x0a\x20\x20\
+\x20\x20\x72\x61\x64\x69\x75\x73\x3a\x20\x36\x0a\x20\x20\x20\x20\
+\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x23\x36\x34\x36\x34\x36\x34\x22\
+\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2e\x77\x69\x64\x74\
+\x68\x3a\x20\x34\x3b\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\
+\x6f\x72\x3a\x20\x22\x77\x68\x69\x74\x65\x22\x0a\x0a\x20\x20\x20\
+\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\
+\x6c\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x68\x6f\x76\x65\x72\x45\x6e\x61\x62\x6c\x65\x64\x3a\x20\
+\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x45\
+\x6e\x74\x65\x72\x65\x64\x3a\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x66\x6f\x63\x75\x73\x52\x65\x63\x74\x2e\
+\x78\x20\x3d\x20\x6d\x79\x52\x65\x63\x74\x2e\x78\x3b\x20\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x6f\x63\x75\x73\
+\x52\x65\x63\x74\x2e\x79\x20\x3d\x20\x6d\x79\x52\x65\x63\x74\x2e\
+\x79\x3b\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x66\x6f\x63\x75\x73\x52\x65\x63\x74\x2e\x74\x65\x78\x74\x20\x3d\
+\x20\x6d\x79\x52\x65\x63\x74\x2e\x74\x65\x78\x74\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\
+\x00\x00\x11\x18\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x52\x65\
+\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x70\x61\x67\x65\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\
+\x3a\x20\x33\x32\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x34\
+\x38\x30\x3b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\
+\x42\x6c\x61\x63\x6b\x22\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x4d\
+\x61\x6b\x65\x20\x61\x20\x62\x61\x6c\x6c\x20\x74\x6f\x20\x62\x6f\
+\x75\x6e\x63\x65\x0a\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\
+\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\
+\x20\x62\x61\x6c\x6c\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\
+\x2f\x20\x41\x64\x64\x20\x61\x20\x70\x72\x6f\x70\x65\x72\x74\x79\
+\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x74\x61\x72\x67\x65\x74\x20\
+\x79\x20\x63\x6f\x6f\x72\x64\x69\x6e\x61\x74\x65\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x76\x61\
+\x72\x69\x61\x6e\x74\x20\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x20\
+\x3a\x20\x22\x72\x69\x67\x68\x74\x22\x0a\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x78\x3a\x20\x32\x30\x3b\x20\x77\x69\x64\x74\x68\x3a\
+\x20\x32\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x32\x30\x3b\
+\x20\x7a\x3a\x20\x31\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\
+\x6c\x6f\x72\x3a\x20\x22\x4c\x69\x6d\x65\x22\x0a\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x2f\x2f\x20\x4d\x6f\x76\x65\x20\x74\x68\x65\
+\x20\x62\x61\x6c\x6c\x20\x74\x6f\x20\x74\x68\x65\x20\x72\x69\x67\
+\x68\x74\x20\x61\x6e\x64\x20\x62\x61\x63\x6b\x20\x74\x6f\x20\x74\
+\x68\x65\x20\x6c\x65\x66\x74\x20\x72\x65\x70\x65\x61\x74\x65\x64\
+\x6c\x79\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x53\x65\x71\x75\x65\
+\x6e\x74\x69\x61\x6c\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x6f\
+\x6e\x20\x78\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x6c\x6f\x6f\x70\x73\x3a\x20\x41\x6e\x69\x6d\x61\x74\x69\
+\x6f\x6e\x2e\x49\x6e\x66\x69\x6e\x69\x74\x65\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\x62\x65\x72\x41\x6e\
+\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x74\x6f\x3a\x20\x70\x61\
+\x67\x65\x2e\x77\x69\x64\x74\x68\x20\x2d\x20\x34\x30\x3b\x20\x64\
+\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\x32\x30\x30\x30\x20\x7d\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x50\x72\x6f\x70\
+\x65\x72\x74\x79\x41\x63\x74\x69\x6f\x6e\x20\x7b\x20\x74\x61\x72\
+\x67\x65\x74\x3a\x20\x62\x61\x6c\x6c\x3b\x20\x70\x72\x6f\x70\x65\
+\x72\x74\x79\x3a\x20\x22\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x22\
+\x3b\x20\x76\x61\x6c\x75\x65\x3a\x20\x22\x6c\x65\x66\x74\x22\x20\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x4e\x75\
+\x6d\x62\x65\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\
+\x74\x6f\x3a\x20\x32\x30\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\
+\x3a\x20\x32\x30\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x50\x72\x6f\x70\x65\x72\x74\x79\x41\x63\x74\
+\x69\x6f\x6e\x20\x7b\x20\x74\x61\x72\x67\x65\x74\x3a\x20\x62\x61\
+\x6c\x6c\x3b\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x3a\x20\x22\x64\
+\x69\x72\x65\x63\x74\x69\x6f\x6e\x22\x3b\x20\x76\x61\x6c\x75\x65\
+\x3a\x20\x22\x72\x69\x67\x68\x74\x22\x20\x7d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\
+\x2f\x20\x4d\x61\x6b\x65\x20\x79\x20\x6d\x6f\x76\x65\x20\x77\x69\
+\x74\x68\x20\x61\x20\x76\x65\x6c\x6f\x63\x69\x74\x79\x20\x6f\x66\
+\x20\x32\x30\x30\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x42\x65\
+\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\x79\x20\x7b\x20\x53\x70\
+\x72\x69\x6e\x67\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x7b\x20\x76\
+\x65\x6c\x6f\x63\x69\x74\x79\x3a\x20\x32\x30\x30\x3b\x20\x7d\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x2e\x6f\x6e\x43\
+\x6f\x6d\x70\x6c\x65\x74\x65\x64\x3a\x20\x79\x20\x3d\x20\x70\x61\
+\x67\x65\x2e\x68\x65\x69\x67\x68\x74\x2d\x31\x30\x3b\x20\x2f\x2f\
+\x20\x73\x74\x61\x72\x74\x20\x74\x68\x65\x20\x62\x61\x6c\x6c\x20\
+\x6d\x6f\x74\x69\x6f\x6e\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x2f\x2f\x20\x44\x65\x74\x65\x63\x74\x20\x74\x68\x65\x20\x62\x61\
+\x6c\x6c\x20\x68\x69\x74\x74\x69\x6e\x67\x20\x74\x68\x65\x20\x74\
+\x6f\x70\x20\x6f\x72\x20\x62\x6f\x74\x74\x6f\x6d\x20\x6f\x66\x20\
+\x74\x68\x65\x20\x76\x69\x65\x77\x20\x61\x6e\x64\x20\x62\x6f\x75\
+\x6e\x63\x65\x20\x69\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\
+\x6e\x59\x43\x68\x61\x6e\x67\x65\x64\x3a\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x79\x20\x3c\
+\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x79\x20\x3d\x20\x70\x61\x67\x65\x2e\
+\x68\x65\x69\x67\x68\x74\x20\x2d\x20\x32\x30\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\
+\x69\x66\x20\x28\x79\x20\x3e\x3d\x20\x70\x61\x67\x65\x2e\x68\x65\
+\x69\x67\x68\x74\x20\x2d\x20\x32\x30\x29\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x79\x20\x3d\
+\x20\x30\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\
+\x7d\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x50\x6c\x61\x63\x65\x20\
+\x62\x61\x74\x73\x20\x74\x6f\x20\x74\x68\x65\x20\x6c\x65\x66\x74\
+\x20\x61\x6e\x64\x20\x72\x69\x67\x68\x74\x20\x6f\x66\x20\x74\x68\
+\x65\x20\x76\x69\x65\x77\x2c\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x74\x68\x65\x20\x79\x0a\x20\x20\x20\x20\x2f\x2f\x20\x63\
+\x6f\x6f\x72\x64\x69\x6e\x61\x74\x65\x73\x20\x6f\x66\x20\x74\x68\
+\x65\x20\x62\x61\x6c\x6c\x2e\x0a\x20\x20\x20\x20\x52\x65\x63\x74\
+\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3a\x20\x6c\x65\x66\x74\x42\x61\x74\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x4c\x69\x6d\x65\
+\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x78\x3a\x20\x32\x3b\x20\
+\x77\x69\x64\x74\x68\x3a\x20\x32\x30\x3b\x20\x68\x65\x69\x67\x68\
+\x74\x3a\x20\x39\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\
+\x20\x21\x5b\x30\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x79\x3a\
+\x20\x62\x61\x6c\x6c\x2e\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x20\
+\x3d\x3d\x20\x27\x6c\x65\x66\x74\x27\x20\x3f\x20\x62\x61\x6c\x6c\
+\x2e\x79\x20\x2d\x20\x34\x35\x20\x3a\x20\x70\x61\x67\x65\x2e\x68\
+\x65\x69\x67\x68\x74\x2f\x32\x20\x2d\x34\x35\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\
+\x20\x79\x20\x7b\x20\x53\x70\x72\x69\x6e\x67\x41\x6e\x69\x6d\x61\
+\x74\x69\x6f\x6e\x7b\x20\x76\x65\x6c\x6f\x63\x69\x74\x79\x3a\x20\
+\x33\x30\x30\x20\x7d\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x2f\x2f\x20\x21\x5b\x30\x5d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\
+\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x72\x69\x67\x68\x74\x42\
+\x61\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\
+\x3a\x20\x22\x4c\x69\x6d\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x78\x3a\x20\x70\x61\x67\x65\x2e\x77\x69\x64\x74\x68\x20\x2d\
+\x20\x32\x32\x3b\x20\x77\x69\x64\x74\x68\x3a\x20\x32\x30\x3b\x20\
+\x68\x65\x69\x67\x68\x74\x3a\x20\x39\x30\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x79\x3a\x20\x62\x61\x6c\x6c\x2e\x64\x69\x72\x65\x63\
+\x74\x69\x6f\x6e\x20\x3d\x3d\x20\x27\x72\x69\x67\x68\x74\x27\x20\
+\x3f\x20\x62\x61\x6c\x6c\x2e\x79\x20\x2d\x20\x34\x35\x20\x3a\x20\
+\x70\x61\x67\x65\x2e\x68\x65\x69\x67\x68\x74\x2f\x32\x20\x2d\x34\
+\x35\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x42\x65\x68\x61\x76\
+\x69\x6f\x72\x20\x6f\x6e\x20\x79\x20\x7b\x20\x53\x70\x72\x69\x6e\
+\x67\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x7b\x20\x76\x65\x6c\x6f\
+\x63\x69\x74\x79\x3a\x20\x33\x30\x30\x20\x7d\x20\x7d\x0a\x20\x20\
+\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x54\x68\x65\x20\
+\x72\x65\x73\x74\x2c\x20\x74\x6f\x20\x6d\x61\x6b\x65\x20\x69\x74\
+\x20\x6c\x6f\x6f\x6b\x20\x72\x65\x61\x6c\x69\x73\x74\x69\x63\x2c\
+\x20\x69\x66\x20\x6e\x65\x69\x74\x68\x65\x72\x20\x65\x76\x65\x72\
+\x20\x73\x63\x6f\x72\x65\x73\x2e\x2e\x2e\x0a\x20\x20\x20\x20\x52\
+\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x20\x63\x6f\x6c\x6f\x72\
+\x3a\x20\x22\x4c\x69\x6d\x65\x22\x3b\x20\x78\x3a\x20\x70\x61\x67\
+\x65\x2e\x77\x69\x64\x74\x68\x2f\x32\x2d\x38\x30\x3b\x20\x79\x3a\
+\x20\x30\x3b\x20\x77\x69\x64\x74\x68\x3a\x20\x34\x30\x3b\x20\x68\
+\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x20\x7d\x0a\x20\x20\x20\x20\
+\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x20\x63\x6f\x6c\x6f\
+\x72\x3a\x20\x22\x42\x6c\x61\x63\x6b\x22\x3b\x20\x78\x3a\x20\x70\
+\x61\x67\x65\x2e\x77\x69\x64\x74\x68\x2f\x32\x2d\x37\x30\x3b\x20\
+\x79\x3a\x20\x31\x30\x3b\x20\x77\x69\x64\x74\x68\x3a\x20\x32\x30\
+\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x34\x30\x20\x7d\x0a\x20\
+\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x20\x63\
+\x6f\x6c\x6f\x72\x3a\x20\x22\x4c\x69\x6d\x65\x22\x3b\x20\x78\x3a\
+\x20\x70\x61\x67\x65\x2e\x77\x69\x64\x74\x68\x2f\x32\x2b\x34\x30\
+\x3b\x20\x79\x3a\x20\x30\x3b\x20\x77\x69\x64\x74\x68\x3a\x20\x34\
+\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x20\x7d\x0a\
+\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x20\
+\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x42\x6c\x61\x63\x6b\x22\x3b\x20\
+\x78\x3a\x20\x70\x61\x67\x65\x2e\x77\x69\x64\x74\x68\x2f\x32\x2b\
+\x35\x30\x3b\x20\x79\x3a\x20\x31\x30\x3b\x20\x77\x69\x64\x74\x68\
+\x3a\x20\x32\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x34\x30\
+\x20\x7d\x0a\x20\x20\x20\x20\x52\x65\x70\x65\x61\x74\x65\x72\x20\
+\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6d\x6f\x64\x65\x6c\x3a\
+\x20\x70\x61\x67\x65\x2e\x68\x65\x69\x67\x68\x74\x20\x2f\x20\x32\
+\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\
+\x67\x6c\x65\x20\x7b\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x4c\x69\
+\x6d\x65\x22\x3b\x20\x78\x3a\x20\x70\x61\x67\x65\x2e\x77\x69\x64\
+\x74\x68\x2f\x32\x2d\x35\x3b\x20\x79\x3a\x20\x69\x6e\x64\x65\x78\
+\x20\x2a\x20\x32\x30\x3b\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\
+\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x31\x30\x20\x7d\x0a\x20\
+\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x0f\xfa\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x52\x65\
+\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x0a\x0a\x20\x20\x20\
+\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\
+\x20\x74\x65\x78\x74\x3a\x20\x22\x44\x72\x61\x67\x20\x6d\x65\x21\
+\x22\x0a\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x62\
+\x6f\x6f\x6c\x20\x61\x6e\x69\x6d\x61\x74\x65\x64\x3a\x20\x74\x72\
+\x75\x65\x0a\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x33\
+\x32\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x34\x38\x30\x3b\
+\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x23\x34\x37\x34\x37\x34\x37\
+\x22\x3b\x20\x66\x6f\x63\x75\x73\x3a\x20\x74\x72\x75\x65\x0a\x0a\
+\x20\x20\x20\x20\x4b\x65\x79\x73\x2e\x6f\x6e\x50\x72\x65\x73\x73\
+\x65\x64\x3a\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\
+\x20\x28\x65\x76\x65\x6e\x74\x2e\x6b\x65\x79\x20\x3d\x3d\x20\x51\
+\x74\x2e\x4b\x65\x79\x5f\x44\x65\x6c\x65\x74\x65\x20\x7c\x7c\x20\
+\x65\x76\x65\x6e\x74\x2e\x6b\x65\x79\x20\x3d\x3d\x20\x51\x74\x2e\
+\x4b\x65\x79\x5f\x42\x61\x63\x6b\x73\x70\x61\x63\x65\x29\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x61\
+\x69\x6e\x65\x72\x2e\x72\x65\x6d\x6f\x76\x65\x28\x29\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x65\x6c\x73\x65\x20\x69\x66\x20\x28\x65\
+\x76\x65\x6e\x74\x2e\x74\x65\x78\x74\x20\x21\x3d\x20\x22\x22\x29\
+\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\
+\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x61\x70\x70\x65\x6e\x64\x28\
+\x65\x76\x65\x6e\x74\x2e\x74\x65\x78\x74\x29\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\
+\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x61\x70\x70\x65\x6e\x64\
+\x28\x74\x65\x78\x74\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x61\x6e\x69\x6d\x61\
+\x74\x65\x64\x20\x3d\x20\x66\x61\x6c\x73\x65\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x76\x61\x72\x20\x6c\x61\x73\x74\x4c\x65\x74\x74\
+\x65\x72\x20\x3d\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x63\
+\x68\x69\x6c\x64\x72\x65\x6e\x5b\x63\x6f\x6e\x74\x61\x69\x6e\x65\
+\x72\x2e\x63\x68\x69\x6c\x64\x72\x65\x6e\x2e\x6c\x65\x6e\x67\x74\
+\x68\x20\x2d\x20\x31\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x76\
+\x61\x72\x20\x6e\x65\x77\x4c\x65\x74\x74\x65\x72\x20\x3d\x20\x6c\
+\x65\x74\x74\x65\x72\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x2e\x63\
+\x72\x65\x61\x74\x65\x4f\x62\x6a\x65\x63\x74\x28\x63\x6f\x6e\x74\
+\x61\x69\x6e\x65\x72\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6e\
+\x65\x77\x4c\x65\x74\x74\x65\x72\x2e\x74\x65\x78\x74\x20\x3d\x20\
+\x74\x65\x78\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6e\x65\x77\
+\x4c\x65\x74\x74\x65\x72\x2e\x66\x6f\x6c\x6c\x6f\x77\x20\x3d\x20\
+\x6c\x61\x73\x74\x4c\x65\x74\x74\x65\x72\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x61\x6e\x69\
+\x6d\x61\x74\x65\x64\x20\x3d\x20\x74\x72\x75\x65\x0a\x20\x20\x20\
+\x20\x7d\x0a\x0a\x20\x20\x20\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\
+\x20\x72\x65\x6d\x6f\x76\x65\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x69\x66\x20\x28\x63\x6f\x6e\x74\x61\x69\x6e\x65\
+\x72\x2e\x63\x68\x69\x6c\x64\x72\x65\x6e\x2e\x6c\x65\x6e\x67\x74\
+\x68\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\
+\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x63\x68\x69\x6c\x64\x72\x65\
+\x6e\x5b\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x63\x68\x69\x6c\
+\x64\x72\x65\x6e\x2e\x6c\x65\x6e\x67\x74\x68\x20\x2d\x20\x31\x5d\
+\x2e\x64\x65\x73\x74\x72\x6f\x79\x28\x29\x0a\x20\x20\x20\x20\x7d\
+\x0a\x0a\x20\x20\x20\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x64\
+\x6f\x4c\x61\x79\x6f\x75\x74\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x76\x61\x72\x20\x66\x6f\x6c\x6c\x6f\x77\x20\x3d\
+\x20\x6e\x75\x6c\x6c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x66\x6f\
+\x72\x20\x28\x76\x61\x72\x20\x69\x20\x3d\x20\x30\x3b\x20\x69\x20\
+\x3c\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x74\x65\x78\x74\
+\x2e\x6c\x65\x6e\x67\x74\x68\x3b\x20\x2b\x2b\x69\x29\x20\x7b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\
+\x6e\x65\x77\x4c\x65\x74\x74\x65\x72\x20\x3d\x20\x6c\x65\x74\x74\
+\x65\x72\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x2e\x63\x72\x65\x61\
+\x74\x65\x4f\x62\x6a\x65\x63\x74\x28\x63\x6f\x6e\x74\x61\x69\x6e\
+\x65\x72\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x6e\x65\x77\x4c\x65\x74\x74\x65\x72\x2e\x74\x65\x78\x74\x20\x3d\
+\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x74\x65\x78\x74\x5b\
+\x69\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6e\
+\x65\x77\x4c\x65\x74\x74\x65\x72\x2e\x66\x6f\x6c\x6c\x6f\x77\x20\
+\x3d\x20\x66\x6f\x6c\x6c\x6f\x77\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x66\x6f\x6c\x6c\x6f\x77\x20\x3d\x20\x6e\x65\
+\x77\x4c\x65\x74\x74\x65\x72\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x43\x6f\x6d\
+\x70\x6f\x6e\x65\x6e\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x69\x64\x3a\x20\x6c\x65\x74\x74\x65\x72\x43\x6f\x6d\x70\x6f\
+\x6e\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x54\x65\x78\
+\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3a\x20\x6c\x65\x74\x74\x65\x72\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\
+\x76\x61\x72\x69\x61\x6e\x74\x20\x66\x6f\x6c\x6c\x6f\x77\x0a\x0a\
+\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x78\x3a\x20\x66\x6f\x6c\x6c\x6f\x77\x20\x3f\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x2e\x78\x20\x2b\x20\x66\x6f\x6c\x6c\x6f\
+\x77\x2e\x77\x69\x64\x74\x68\x20\x3a\x20\x63\x6f\x6e\x74\x61\x69\
+\x6e\x65\x72\x2e\x77\x69\x64\x74\x68\x20\x2f\x20\x36\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x79\x3a\x20\x66\x6f\x6c\
+\x6c\x6f\x77\x20\x3f\x20\x66\x6f\x6c\x6c\x6f\x77\x2e\x79\x20\x3a\
+\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x68\x65\x69\x67\x68\
+\x74\x20\x2f\x20\x32\x0a\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x6f\x6e\x74\x2e\
+\x70\x69\x78\x65\x6c\x53\x69\x7a\x65\x3a\x20\x34\x30\x3b\x20\x66\
+\x6f\x6e\x74\x2e\x62\x6f\x6c\x64\x3a\x20\x74\x72\x75\x65\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\
+\x3a\x20\x22\x23\x39\x39\x39\x39\x39\x39\x22\x3b\x20\x73\x74\x79\
+\x6c\x65\x43\x6f\x6c\x6f\x72\x3a\x20\x22\x23\x32\x32\x32\x32\x32\
+\x32\x22\x3b\x20\x73\x74\x79\x6c\x65\x3a\x20\x54\x65\x78\x74\x2e\
+\x52\x61\x69\x73\x65\x64\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\x20\x7b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x64\x72\x61\x67\x2e\x74\x61\x72\x67\x65\x74\
+\x3a\x20\x6c\x65\x74\x74\x65\x72\x3b\x20\x64\x72\x61\x67\x2e\x61\
+\x78\x69\x73\x3a\x20\x44\x72\x61\x67\x2e\x58\x41\x6e\x64\x59\x41\
+\x78\x69\x73\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x6f\x6e\x50\x72\x65\x73\x73\x65\x64\x3a\x20\x6c\
+\x65\x74\x74\x65\x72\x2e\x63\x6f\x6c\x6f\x72\x20\x3d\x20\x22\x23\
+\x64\x64\x64\x64\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x52\x65\x6c\x65\x61\x73\
+\x65\x64\x3a\x20\x6c\x65\x74\x74\x65\x72\x2e\x63\x6f\x6c\x6f\x72\
+\x20\x3d\x20\x22\x23\x39\x39\x39\x39\x39\x39\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x2f\x2f\x21\x20\
+\x5b\x31\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\x78\x20\x7b\x20\
+\x65\x6e\x61\x62\x6c\x65\x64\x3a\x20\x63\x6f\x6e\x74\x61\x69\x6e\
+\x65\x72\x2e\x61\x6e\x69\x6d\x61\x74\x65\x64\x3b\x20\x53\x70\x72\
+\x69\x6e\x67\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x73\
+\x70\x72\x69\x6e\x67\x3a\x20\x33\x3b\x20\x64\x61\x6d\x70\x69\x6e\
+\x67\x3a\x20\x30\x2e\x33\x3b\x20\x6d\x61\x73\x73\x3a\x20\x31\x2e\
+\x30\x20\x7d\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\x79\x20\
+\x7b\x20\x65\x6e\x61\x62\x6c\x65\x64\x3a\x20\x63\x6f\x6e\x74\x61\
+\x69\x6e\x65\x72\x2e\x61\x6e\x69\x6d\x61\x74\x65\x64\x3b\x20\x53\
+\x70\x72\x69\x6e\x67\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\
+\x20\x73\x70\x72\x69\x6e\x67\x3a\x20\x33\x3b\x20\x64\x61\x6d\x70\
+\x69\x6e\x67\x3a\x20\x30\x2e\x33\x3b\x20\x6d\x61\x73\x73\x3a\x20\
+\x31\x2e\x30\x20\x7d\x20\x7d\x0a\x2f\x2f\x21\x20\x5b\x31\x5d\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\
+\x0a\x20\x20\x20\x20\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x2e\x6f\
+\x6e\x43\x6f\x6d\x70\x6c\x65\x74\x65\x64\x3a\x20\x64\x6f\x4c\x61\
+\x79\x6f\x75\x74\x28\x29\x0a\x7d\x0a\
+\x00\x00\x11\x5c\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x52\x65\
+\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x77\x69\
+\x64\x74\x68\x3a\x20\x33\x32\x30\x3b\x20\x68\x65\x69\x67\x68\x74\
+\x3a\x20\x34\x38\x30\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\
+\x20\x22\x23\x33\x34\x33\x34\x33\x34\x22\x0a\x0a\x20\x20\x20\x20\
+\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x63\x65\x6e\x74\
+\x65\x72\x49\x6e\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x32\x30\x30\x3b\
+\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x32\x30\x30\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x72\x61\x64\x69\x75\x73\x3a\x20\x33\x30\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\
+\x74\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\x74\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2e\x77\x69\x64\x74\
+\x68\x3a\x20\x34\x3b\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\
+\x6f\x72\x3a\x20\x22\x77\x68\x69\x74\x65\x22\x0a\x0a\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x53\x69\x64\x65\x52\x65\x63\x74\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\
+\x20\x6c\x65\x66\x74\x52\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x20\x7b\x20\
+\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\
+\x70\x61\x72\x65\x6e\x74\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\
+\x65\x6e\x74\x65\x72\x3b\x20\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\
+\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\
+\x6c\x65\x66\x74\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x74\x65\x78\x74\x3a\x20\x22\x4c\x65\x66\x74\x22\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x53\x69\x64\x65\x52\x65\x63\x74\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x72\x69\
+\x67\x68\x74\x52\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x20\x7b\x20\x76\x65\
+\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\
+\x74\x65\x72\x3b\x20\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\
+\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x72\x69\
+\x67\x68\x74\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x74\x65\x78\x74\x3a\x20\x22\x52\x69\x67\x68\x74\x22\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x53\x69\x64\x65\x52\x65\x63\x74\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x74\x6f\
+\x70\x52\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x20\x7b\x20\x76\x65\x72\x74\
+\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x2e\x74\x6f\x70\x3b\x20\x68\x6f\x72\x69\x7a\x6f\x6e\x74\
+\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\x65\x6e\x74\
+\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\
+\x72\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x74\x65\x78\x74\x3a\x20\x22\x54\x6f\x70\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x53\
+\x69\x64\x65\x52\x65\x63\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x62\x6f\x74\x74\x6f\x6d\
+\x52\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x20\x7b\x20\x76\x65\x72\x74\x69\
+\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\x65\x6e\
+\x74\x2e\x62\x6f\x74\x74\x6f\x6d\x3b\x20\x68\x6f\x72\x69\x7a\x6f\
+\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\
+\x74\x65\x72\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x74\x65\x78\x74\x3a\x20\x22\x42\x6f\x74\x74\x6f\x6d\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\
+\x20\x66\x6f\x63\x75\x73\x52\x65\x63\x74\x0a\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\
+\x20\x73\x74\x72\x69\x6e\x67\x20\x74\x65\x78\x74\x0a\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x78\x3a\x20\x36\x32\x3b\
+\x20\x79\x3a\x20\x37\x35\x3b\x20\x77\x69\x64\x74\x68\x3a\x20\x37\
+\x35\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x35\x30\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x61\x64\x69\x75\x73\
+\x3a\x20\x36\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x62\x6f\x72\x64\x65\x72\x2e\x77\x69\x64\x74\x68\x3a\x20\x34\x3b\
+\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\x6f\x72\x3a\x20\x22\
+\x77\x68\x69\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x66\x69\x72\x65\x62\
+\x72\x69\x63\x6b\x22\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x2f\x2f\x20\x53\x65\x74\x20\x61\x6e\x20\x27\x65\x6c\
+\x61\x73\x74\x69\x63\x27\x20\x62\x65\x68\x61\x76\x69\x6f\x72\x20\
+\x6f\x6e\x20\x74\x68\x65\x20\x66\x6f\x63\x75\x73\x52\x65\x63\x74\
+\x27\x73\x20\x78\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x2e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x42\x65\x68\x61\x76\
+\x69\x6f\x72\x20\x6f\x6e\x20\x78\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\x62\x65\
+\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x65\x61\x73\
+\x69\x6e\x67\x2e\x74\x79\x70\x65\x3a\x20\x45\x61\x73\x69\x6e\x67\
+\x2e\x4f\x75\x74\x45\x6c\x61\x73\x74\x69\x63\x3b\x20\x65\x61\x73\
+\x69\x6e\x67\x2e\x61\x6d\x70\x6c\x69\x74\x75\x64\x65\x3a\x20\x33\
+\x2e\x30\x3b\x20\x65\x61\x73\x69\x6e\x67\x2e\x70\x65\x72\x69\x6f\
+\x64\x3a\x20\x32\x2e\x30\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\
+\x3a\x20\x33\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x53\x65\x74\x20\x61\x6e\
+\x20\x27\x65\x6c\x61\x73\x74\x69\x63\x27\x20\x62\x65\x68\x61\x76\
+\x69\x6f\x72\x20\x6f\x6e\x20\x74\x68\x65\x20\x66\x6f\x63\x75\x73\
+\x52\x65\x63\x74\x27\x73\x20\x79\x20\x70\x72\x6f\x70\x65\x72\x74\
+\x79\x2e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x42\
+\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\x79\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x4e\
+\x75\x6d\x62\x65\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\
+\x20\x65\x61\x73\x69\x6e\x67\x2e\x74\x79\x70\x65\x3a\x20\x45\x61\
+\x73\x69\x6e\x67\x2e\x4f\x75\x74\x45\x6c\x61\x73\x74\x69\x63\x3b\
+\x20\x65\x61\x73\x69\x6e\x67\x2e\x61\x6d\x70\x6c\x69\x74\x75\x64\
+\x65\x3a\x20\x33\x2e\x30\x3b\x20\x65\x61\x73\x69\x6e\x67\x2e\x70\
+\x65\x72\x69\x6f\x64\x3a\x20\x32\x2e\x30\x3b\x20\x64\x75\x72\x61\
+\x74\x69\x6f\x6e\x3a\x20\x33\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x54\x65\x78\x74\x20\
+\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x69\x64\x3a\x20\x66\x6f\x63\x75\x73\x54\x65\x78\x74\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x74\x65\x78\x74\x3a\x20\x66\x6f\x63\x75\x73\x52\x65\x63\x74\x2e\
+\x74\x65\x78\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x63\x65\x6e\
+\x74\x65\x72\x49\x6e\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\
+\x6c\x6f\x72\x3a\x20\x22\x77\x68\x69\x74\x65\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x6f\x6e\
+\x74\x2e\x70\x69\x78\x65\x6c\x53\x69\x7a\x65\x3a\x20\x31\x36\x3b\
+\x20\x66\x6f\x6e\x74\x2e\x62\x6f\x6c\x64\x3a\x20\x74\x72\x75\x65\
+\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x2f\x2f\x20\x53\x65\x74\x20\x61\x20\x62\x65\x68\x61\x76\
+\x69\x6f\x72\x20\x6f\x6e\x20\x74\x68\x65\x20\x66\x6f\x63\x75\x73\
+\x54\x65\x78\x74\x27\x73\x20\x78\x20\x70\x72\x6f\x70\x65\x72\x74\
+\x79\x3a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x2f\x2f\x20\x53\x65\x74\x20\x74\x68\x65\x20\x6f\x70\
+\x61\x63\x69\x74\x79\x20\x74\x6f\x20\x30\x2c\x20\x73\x65\x74\x20\
+\x74\x68\x65\x20\x6e\x65\x77\x20\x74\x65\x78\x74\x20\x76\x61\x6c\
+\x75\x65\x2c\x20\x74\x68\x65\x6e\x20\x73\x65\x74\x20\x74\x68\x65\
+\x20\x6f\x70\x61\x63\x69\x74\x79\x20\x62\x61\x63\x6b\x20\x74\x6f\
+\x20\x31\x2e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\
+\x74\x65\x78\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x65\x71\x75\x65\
+\x6e\x74\x69\x61\x6c\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\x62\x65\x72\x41\
+\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x74\x61\x72\x67\x65\
+\x74\x3a\x20\x66\x6f\x63\x75\x73\x54\x65\x78\x74\x3b\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x3a\x20\x22\x6f\x70\x61\x63\x69\x74\x79\
+\x22\x3b\x20\x74\x6f\x3a\x20\x30\x3b\x20\x64\x75\x72\x61\x74\x69\
+\x6f\x6e\x3a\x20\x31\x35\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x4e\x75\x6d\x62\x65\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\
+\x6e\x20\x7b\x20\x74\x61\x72\x67\x65\x74\x3a\x20\x66\x6f\x63\x75\
+\x73\x54\x65\x78\x74\x3b\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x3a\
+\x20\x22\x6f\x70\x61\x63\x69\x74\x79\x22\x3b\x20\x74\x6f\x3a\x20\
+\x31\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\x31\x35\x30\
+\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x0d\x4f\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x52\x65\
+\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x77\x69\x6e\x64\x6f\x77\x0a\x20\x20\x20\x20\x77\x69\x64\
+\x74\x68\x3a\x20\x33\x32\x30\x0a\x20\x20\x20\x20\x68\x65\x69\x67\
+\x68\x74\x3a\x20\x34\x38\x30\x0a\x0a\x20\x20\x20\x20\x43\x61\x6e\
+\x76\x61\x73\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x63\x61\x6e\x76\x61\x73\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\
+\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x74\x69\x61\x6c\x69\x61\x73\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\
+\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x50\x61\x69\x6e\
+\x74\x3a\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x76\x61\x72\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x3d\x20\x63\
+\x61\x6e\x76\x61\x73\x2e\x67\x65\x74\x43\x6f\x6e\x74\x65\x78\x74\
+\x28\x22\x32\x64\x22\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x63\x6c\x65\x61\x72\
+\x52\x65\x63\x74\x28\x30\x2c\x20\x30\x2c\x20\x77\x69\x64\x74\x68\
+\x2c\x20\x68\x65\x69\x67\x68\x74\x29\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x73\x74\
+\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x20\x3d\x20\x22\x62\x6c\x61\
+\x63\x6b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x6f\x6e\x74\x65\x78\x74\x2e\x70\x61\x74\x68\x20\x3d\x20\x70\
+\x61\x74\x68\x41\x6e\x69\x6d\x2e\x70\x61\x74\x68\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\x78\x74\
+\x2e\x73\x74\x72\x6f\x6b\x65\x28\x29\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x53\
+\x65\x71\x75\x65\x6e\x74\x69\x61\x6c\x41\x6e\x69\x6d\x61\x74\x69\
+\x6f\x6e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x72\x75\x6e\
+\x6e\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x6c\x6f\x6f\x70\x73\x3a\x20\x2d\x31\x0a\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x50\x61\x75\x73\x65\x41\x6e\x69\x6d\x61\
+\x74\x69\x6f\x6e\x20\x7b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\
+\x20\x31\x30\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x50\x61\x74\x68\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\
+\x70\x61\x74\x68\x41\x6e\x69\x6d\x0a\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\
+\x32\x30\x30\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x65\x61\x73\x69\x6e\x67\x2e\x74\x79\x70\x65\x3a\x20\x45\x61\
+\x73\x69\x6e\x67\x2e\x49\x6e\x51\x75\x61\x64\x0a\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\x61\x72\x67\x65\x74\x3a\
+\x20\x62\x6f\x78\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\x3a\x20\x50\x61\
+\x74\x68\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x52\x69\x67\x68\
+\x74\x46\x69\x72\x73\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x50\x6f\x69\x6e\x74\x3a\x20\
+\x51\x74\x2e\x70\x6f\x69\x6e\x74\x28\x62\x6f\x78\x2e\x77\x69\x64\
+\x74\x68\x2f\x32\x2c\x20\x62\x6f\x78\x2e\x68\x65\x69\x67\x68\x74\
+\x2f\x32\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x70\x61\x74\x68\x3a\x20\x50\x61\x74\x68\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x61\
+\x72\x74\x58\x3a\x20\x35\x30\x3b\x20\x73\x74\x61\x72\x74\x59\x3a\
+\x20\x35\x30\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x50\x61\x74\x68\x43\x75\x62\x69\x63\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x78\x3a\x20\x77\x69\x6e\x64\x6f\x77\x2e\x77\
+\x69\x64\x74\x68\x20\x2d\x20\x35\x30\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x79\x3a\
+\x20\x77\x69\x6e\x64\x6f\x77\x2e\x68\x65\x69\x67\x68\x74\x20\x2d\
+\x20\x35\x30\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x72\x6f\x6c\
+\x31\x58\x3a\x20\x78\x3b\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x31\x59\
+\x3a\x20\x35\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x72\x6f\x6c\
+\x32\x58\x3a\x20\x35\x30\x3b\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x32\
+\x59\x3a\x20\x79\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x43\x68\x61\x6e\x67\x65\
+\x64\x3a\x20\x63\x61\x6e\x76\x61\x73\x2e\x72\x65\x71\x75\x65\x73\
+\x74\x50\x61\x69\x6e\x74\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x21\x20\x5b\x30\x5d\
+\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x52\x65\x63\x74\
+\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3a\x20\x62\x6f\x78\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x78\x3a\x20\x32\x35\x3b\x20\x79\x3a\x20\x32\x35\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x35\x30\x3b\
+\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x35\x30\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2e\x77\x69\x64\x74\x68\
+\x3a\x20\x31\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x74\x69\
+\x61\x6c\x69\x61\x73\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\x0a\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\
+\x72\x73\x2e\x63\x65\x6e\x74\x65\x72\x49\x6e\x3a\x20\x70\x61\x72\
+\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x74\x65\x78\x74\x3a\x20\x22\x42\x6f\x78\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x13\x44\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x2f\x2a\
+\x0a\x20\x20\x20\x20\x54\x68\x69\x73\x20\x69\x73\x20\x65\x78\x61\
+\x63\x74\x6c\x79\x20\x74\x68\x65\x20\x73\x61\x6d\x65\x20\x61\x73\
+\x20\x73\x74\x61\x74\x65\x73\x2e\x71\x6d\x6c\x2c\x20\x65\x78\x63\
+\x65\x70\x74\x20\x74\x68\x61\x74\x20\x77\x65\x20\x68\x61\x76\x65\
+\x20\x61\x70\x70\x65\x6e\x64\x65\x64\x0a\x20\x20\x20\x20\x61\x20\
+\x73\x65\x74\x20\x6f\x66\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\
+\x6e\x73\x20\x74\x6f\x20\x61\x70\x70\x6c\x79\x20\x61\x6e\x69\x6d\
+\x61\x74\x69\x6f\x6e\x73\x20\x77\x68\x65\x6e\x20\x74\x68\x65\x20\
+\x69\x74\x65\x6d\x20\x63\x68\x61\x6e\x67\x65\x73\x20\x0a\x20\x20\
+\x20\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x65\x61\x63\x68\x20\x73\
+\x74\x61\x74\x65\x2e\x0a\x2a\x2f\x0a\x0a\x52\x65\x63\x74\x61\x6e\
+\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\x3a\x20\x70\x61\
+\x67\x65\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x36\x34\
+\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x34\x38\x30\x0a\x20\
+\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x23\x33\x34\x33\x34\
+\x33\x34\x22\x0a\x0a\x20\x20\x20\x20\x49\x6d\x61\x67\x65\x20\x7b\
+\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x75\x73\
+\x65\x72\x49\x63\x6f\x6e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x78\
+\x3a\x20\x74\x6f\x70\x4c\x65\x66\x74\x52\x65\x63\x74\x2e\x78\x3b\
+\x20\x79\x3a\x20\x74\x6f\x70\x4c\x65\x66\x74\x52\x65\x63\x74\x2e\
+\x79\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x75\x72\x63\x65\
+\x3a\x20\x22\x71\x74\x2d\x6c\x6f\x67\x6f\x2e\x70\x6e\x67\x22\x0a\
+\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x52\x65\x63\x74\x61\
+\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\
+\x64\x3a\x20\x74\x6f\x70\x4c\x65\x66\x74\x52\x65\x63\x74\x0a\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x20\
+\x7b\x20\x6c\x65\x66\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x6c\
+\x65\x66\x74\x3b\x20\x74\x6f\x70\x3a\x20\x70\x61\x72\x65\x6e\x74\
+\x2e\x74\x6f\x70\x3b\x20\x6c\x65\x66\x74\x4d\x61\x72\x67\x69\x6e\
+\x3a\x20\x31\x30\x3b\x20\x74\x6f\x70\x4d\x61\x72\x67\x69\x6e\x3a\
+\x20\x32\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\
+\x64\x74\x68\x3a\x20\x34\x36\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\
+\x20\x35\x34\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\
+\x72\x3a\x20\x22\x54\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\x74\x22\
+\x3b\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x22\x47\x72\x61\x79\x22\x3b\x20\x72\x61\x64\x69\x75\x73\x3a\x20\
+\x36\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x43\x6c\
+\x69\x63\x6b\x69\x6e\x67\x20\x69\x6e\x20\x68\x65\x72\x65\x20\x73\
+\x65\x74\x73\x20\x74\x68\x65\x20\x73\x74\x61\x74\x65\x20\x74\x6f\
+\x20\x74\x68\x65\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x73\x74\x61\
+\x74\x65\x2c\x20\x72\x65\x74\x75\x72\x6e\x69\x6e\x67\x20\x74\x68\
+\x65\x20\x69\x6d\x61\x67\x65\x20\x74\x6f\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x2f\x2f\x20\x69\x74\x73\x20\x69\x6e\x69\x74\x69\x61\
+\x6c\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\x20\x7b\x20\x61\
+\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\
+\x65\x6e\x74\x3b\x20\x6f\x6e\x43\x6c\x69\x63\x6b\x65\x64\x3a\x20\
+\x70\x61\x67\x65\x2e\x73\x74\x61\x74\x65\x20\x3d\x20\x27\x27\x20\
+\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x52\x65\x63\
+\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x69\x64\x3a\x20\x6d\x69\x64\x64\x6c\x65\x52\x69\x67\x68\x74\
+\x52\x65\x63\x74\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x63\x68\x6f\x72\x73\x20\x7b\x20\x72\x69\x67\x68\x74\x3a\x20\x70\
+\x61\x72\x65\x6e\x74\x2e\x72\x69\x67\x68\x74\x3b\x20\x76\x65\x72\
+\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\
+\x65\x6e\x74\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\
+\x65\x72\x3b\x20\x72\x69\x67\x68\x74\x4d\x61\x72\x67\x69\x6e\x3a\
+\x20\x32\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\
+\x64\x74\x68\x3a\x20\x34\x36\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\
+\x20\x35\x34\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\
+\x72\x3a\x20\x22\x54\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\x74\x22\
+\x3b\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x22\x47\x72\x61\x79\x22\x3b\x20\x72\x61\x64\x69\x75\x73\x3a\x20\
+\x36\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x43\x6c\
+\x69\x63\x6b\x69\x6e\x67\x20\x69\x6e\x20\x68\x65\x72\x65\x20\x73\
+\x65\x74\x73\x20\x74\x68\x65\x20\x73\x74\x61\x74\x65\x20\x74\x6f\
+\x20\x27\x6d\x69\x64\x64\x6c\x65\x52\x69\x67\x68\x74\x27\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\
+\x20\x7b\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x3b\x20\x6f\x6e\x43\x6c\x69\x63\x6b\
+\x65\x64\x3a\x20\x70\x61\x67\x65\x2e\x73\x74\x61\x74\x65\x20\x3d\
+\x20\x27\x6d\x69\x64\x64\x6c\x65\x52\x69\x67\x68\x74\x27\x20\x7d\
+\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x52\x65\x63\x74\
+\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3a\x20\x62\x6f\x74\x74\x6f\x6d\x4c\x65\x66\x74\x52\x65\
+\x63\x74\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\
+\x6f\x72\x73\x20\x7b\x20\x6c\x65\x66\x74\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x2e\x6c\x65\x66\x74\x3b\x20\x62\x6f\x74\x74\x6f\x6d\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x2e\x62\x6f\x74\x74\x6f\x6d\x3b\x20\
+\x6c\x65\x66\x74\x4d\x61\x72\x67\x69\x6e\x3a\x20\x31\x30\x3b\x20\
+\x62\x6f\x74\x74\x6f\x6d\x4d\x61\x72\x67\x69\x6e\x3a\x20\x32\x30\
+\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\
+\x3a\x20\x34\x36\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x35\x34\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x22\x54\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\x74\x22\x3b\x20\x62\
+\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x47\x72\
+\x61\x79\x22\x3b\x20\x72\x61\x64\x69\x75\x73\x3a\x20\x36\x0a\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x43\x6c\x69\x63\x6b\
+\x69\x6e\x67\x20\x69\x6e\x20\x68\x65\x72\x65\x20\x73\x65\x74\x73\
+\x20\x74\x68\x65\x20\x73\x74\x61\x74\x65\x20\x74\x6f\x20\x27\x62\
+\x6f\x74\x74\x6f\x6d\x4c\x65\x66\x74\x27\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\x20\x7b\x20\x61\
+\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\
+\x65\x6e\x74\x3b\x20\x6f\x6e\x43\x6c\x69\x63\x6b\x65\x64\x3a\x20\
+\x70\x61\x67\x65\x2e\x73\x74\x61\x74\x65\x20\x3d\x20\x27\x62\x6f\
+\x74\x74\x6f\x6d\x4c\x65\x66\x74\x27\x20\x7d\x0a\x20\x20\x20\x20\
+\x7d\x0a\x0a\x20\x20\x20\x20\x73\x74\x61\x74\x65\x73\x3a\x20\x5b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x49\x6e\x20\x73\
+\x74\x61\x74\x65\x20\x27\x6d\x69\x64\x64\x6c\x65\x52\x69\x67\x68\
+\x74\x27\x2c\x20\x6d\x6f\x76\x65\x20\x74\x68\x65\x20\x69\x6d\x61\
+\x67\x65\x20\x74\x6f\x20\x6d\x69\x64\x64\x6c\x65\x52\x69\x67\x68\
+\x74\x52\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x53\x74\
+\x61\x74\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x6e\x61\x6d\x65\x3a\x20\x22\x6d\x69\x64\x64\x6c\x65\x52\
+\x69\x67\x68\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x50\x72\x6f\x70\x65\x72\x74\x79\x43\x68\x61\x6e\x67\x65\
+\x73\x20\x7b\x20\x74\x61\x72\x67\x65\x74\x3a\x20\x75\x73\x65\x72\
+\x49\x63\x6f\x6e\x3b\x20\x78\x3a\x20\x6d\x69\x64\x64\x6c\x65\x52\
+\x69\x67\x68\x74\x52\x65\x63\x74\x2e\x78\x3b\x20\x79\x3a\x20\x6d\
+\x69\x64\x64\x6c\x65\x52\x69\x67\x68\x74\x52\x65\x63\x74\x2e\x79\
+\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x2c\x0a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x49\x6e\x20\x73\x74\x61\
+\x74\x65\x20\x27\x62\x6f\x74\x74\x6f\x6d\x4c\x65\x66\x74\x27\x2c\
+\x20\x6d\x6f\x76\x65\x20\x74\x68\x65\x20\x69\x6d\x61\x67\x65\x20\
+\x74\x6f\x20\x62\x6f\x74\x74\x6f\x6d\x4c\x65\x66\x74\x52\x65\x63\
+\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x53\x74\x61\x74\x65\x20\
+\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6e\x61\
+\x6d\x65\x3a\x20\x22\x62\x6f\x74\x74\x6f\x6d\x4c\x65\x66\x74\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x50\x72\x6f\
+\x70\x65\x72\x74\x79\x43\x68\x61\x6e\x67\x65\x73\x20\x7b\x20\x74\
+\x61\x72\x67\x65\x74\x3a\x20\x75\x73\x65\x72\x49\x63\x6f\x6e\x3b\
+\x20\x78\x3a\x20\x62\x6f\x74\x74\x6f\x6d\x4c\x65\x66\x74\x52\x65\
+\x63\x74\x2e\x78\x3b\x20\x79\x3a\x20\x62\x6f\x74\x74\x6f\x6d\x4c\
+\x65\x66\x74\x52\x65\x63\x74\x2e\x79\x20\x20\x7d\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x5d\x0a\x0a\x20\x20\
+\x20\x20\x2f\x2f\x20\x21\x5b\x30\x5d\x0a\x20\x20\x20\x20\x2f\x2f\
+\x20\x54\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x73\x20\x64\x65\x66\
+\x69\x6e\x65\x20\x68\x6f\x77\x20\x74\x68\x65\x20\x70\x72\x6f\x70\
+\x65\x72\x74\x69\x65\x73\x20\x63\x68\x61\x6e\x67\x65\x20\x77\x68\
+\x65\x6e\x20\x74\x68\x65\x20\x69\x74\x65\x6d\x20\x6d\x6f\x76\x65\
+\x73\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x65\x61\x63\x68\x20\x73\
+\x74\x61\x74\x65\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x69\x74\
+\x69\x6f\x6e\x73\x3a\x20\x5b\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x2f\x2f\x20\x57\x68\x65\x6e\x20\x74\x72\x61\x6e\x73\x69\x74\
+\x69\x6f\x6e\x69\x6e\x67\x20\x74\x6f\x20\x27\x6d\x69\x64\x64\x6c\
+\x65\x52\x69\x67\x68\x74\x27\x20\x6d\x6f\x76\x65\x20\x78\x2c\x79\
+\x20\x6f\x76\x65\x72\x20\x61\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\
+\x20\x6f\x66\x20\x31\x20\x73\x65\x63\x6f\x6e\x64\x2c\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x77\x69\x74\x68\x20\x4f\x75\
+\x74\x42\x6f\x75\x6e\x63\x65\x20\x65\x61\x73\x69\x6e\x67\x20\x66\
+\x75\x6e\x63\x74\x69\x6f\x6e\x2e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x54\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x3a\x20\
+\x22\x2a\x22\x3b\x20\x74\x6f\x3a\x20\x22\x6d\x69\x64\x64\x6c\x65\
+\x52\x69\x67\x68\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x4e\x75\x6d\x62\x65\x72\x41\x6e\x69\x6d\x61\x74\x69\
+\x6f\x6e\x20\x7b\x20\x70\x72\x6f\x70\x65\x72\x74\x69\x65\x73\x3a\
+\x20\x22\x78\x2c\x79\x22\x3b\x20\x65\x61\x73\x69\x6e\x67\x2e\x74\
+\x79\x70\x65\x3a\x20\x45\x61\x73\x69\x6e\x67\x2e\x4f\x75\x74\x42\
+\x6f\x75\x6e\x63\x65\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\
+\x20\x31\x30\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x2c\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x57\
+\x68\x65\x6e\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x69\x6e\
+\x67\x20\x74\x6f\x20\x27\x62\x6f\x74\x74\x6f\x6d\x4c\x65\x66\x74\
+\x27\x20\x6d\x6f\x76\x65\x20\x78\x2c\x79\x20\x6f\x76\x65\x72\x20\
+\x61\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x20\x6f\x66\x20\x32\x20\
+\x73\x65\x63\x6f\x6e\x64\x73\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x2f\x2f\x20\x77\x69\x74\x68\x20\x49\x6e\x4f\x75\x74\x51\x75\
+\x61\x64\x20\x65\x61\x73\x69\x6e\x67\x20\x66\x75\x6e\x63\x74\x69\
+\x6f\x6e\x2e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x54\x72\x61\x6e\
+\x73\x69\x74\x69\x6f\x6e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x3a\x20\x22\x2a\x22\x3b\x20\
+\x74\x6f\x3a\x20\x22\x62\x6f\x74\x74\x6f\x6d\x4c\x65\x66\x74\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\
+\x62\x65\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x70\
+\x72\x6f\x70\x65\x72\x74\x69\x65\x73\x3a\x20\x22\x78\x2c\x79\x22\
+\x3b\x20\x65\x61\x73\x69\x6e\x67\x2e\x74\x79\x70\x65\x3a\x20\x45\
+\x61\x73\x69\x6e\x67\x2e\x49\x6e\x4f\x75\x74\x51\x75\x61\x64\x3b\
+\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\x32\x30\x30\x30\x20\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x2c\x0a\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x46\x6f\x72\x20\x61\x6e\x79\
+\x20\x6f\x74\x68\x65\x72\x20\x73\x74\x61\x74\x65\x20\x63\x68\x61\
+\x6e\x67\x65\x73\x20\x6d\x6f\x76\x65\x20\x78\x2c\x79\x20\x6c\x69\
+\x6e\x65\x61\x72\x6c\x79\x20\x6f\x76\x65\x72\x20\x64\x75\x72\x61\
+\x74\x69\x6f\x6e\x20\x6f\x66\x20\x32\x30\x30\x6d\x73\x2e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x54\x72\x61\x6e\x73\x69\x74\x69\x6f\
+\x6e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x4e\x75\x6d\x62\x65\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\
+\x7b\x20\x70\x72\x6f\x70\x65\x72\x74\x69\x65\x73\x3a\x20\x22\x78\
+\x2c\x79\x22\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\x32\
+\x30\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\
+\x20\x20\x20\x2f\x2f\x20\x21\x5b\x30\x5d\x0a\x20\x20\x20\x20\x5d\
+\x0a\x7d\x0a\
+\x00\x00\x14\x1d\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x2e\x00\x00\x00\x37\x08\x06\x00\x00\x00\x73\x60\x78\x64\
+\x00\x00\x13\xe4\x49\x44\x41\x54\x78\x9c\x62\xfc\xff\xff\x3f\xc3\
+\xdf\x7f\x7f\x99\x99\x99\x98\xff\x3e\x78\xf1\x58\x66\xe9\x9e\x55\
+\x09\x87\x2f\x9e\xb6\x79\xf7\xe9\xad\x98\xa4\xf2\x3f\x7e\x51\xb9\
+\xbf\xfc\xcc\x1c\x3f\xf8\xfe\xfd\xff\xc7\xca\xc5\xc6\xf7\x46\x9c\
+\x5b\xf6\x96\x24\xaf\xd2\x35\x29\x3e\xa5\xcb\xd2\xbc\x4a\xd7\xc4\
+\x78\x64\xef\x08\x70\x8a\x3e\x63\x63\x66\xff\xc5\x80\x05\xfc\x67\
+\xf8\xcf\xf4\xef\xff\x3f\x26\x06\x86\xff\x0c\x8c\x0c\x8c\xff\x19\
+\x19\x18\xff\x33\x30\x42\x69\x0a\x00\x00\x00\x00\xff\xff\x62\xfc\
+\xfb\xf7\x2f\x33\x13\x13\xd3\xdf\x59\x9b\x17\xa6\x54\xcf\x6d\xed\
+\x7d\xf3\xe6\x0d\x1f\x17\x2f\xdb\x7f\x7b\x2f\x61\x46\x59\x45\x4e\
+\x06\x86\x7f\x8c\x0c\x0c\xff\x99\x18\x18\x18\x18\x18\xfe\xfd\xff\
+\xc7\xf0\xe7\xdf\x6f\x86\x7f\xff\xff\x30\x30\x30\x30\x32\xb0\x30\
+\xb1\x32\x70\xb2\xf0\x7c\xe3\x63\x17\x7a\x26\xcc\x25\x75\x5f\x9c\
+\x47\xee\xa6\x04\x8f\xc2\x75\x09\x5e\x85\x9b\xa2\x5c\x52\xf7\x05\
+\x38\xc5\x9e\xb1\xb3\x70\xfc\xc0\x6e\xf5\x7f\xc6\x7f\xff\xff\x31\
+\xc3\x39\x24\x7a\x08\x00\x00\x00\xff\xff\x62\xfc\xff\xff\x3f\xc3\
+\xa4\xb5\xb3\x73\xf2\xbb\xf3\x26\x73\xf2\x09\xff\x63\x67\x63\xfb\
+\xef\x1e\x2c\xc4\x20\x21\xc3\xc6\xf8\xed\xeb\x3f\x46\x46\x88\x39\
+\x8c\x70\x0b\x18\x99\xfe\x33\x32\x30\xfc\x67\x60\x60\x60\xf8\xff\
+\xff\x3f\xd3\xbf\xff\x7f\x19\xff\xfc\xff\x03\xf1\xd0\xbf\x3f\x0c\
+\xff\x19\xfe\x33\xb0\x30\xb2\x32\xb0\xb3\x70\xff\xe5\x67\x17\x7e\
+\x21\xcc\x25\x79\x5f\x8c\x47\xee\xa6\x14\xaf\xe2\x75\x09\x1e\x85\
+\xeb\xa2\x3c\x32\x77\x85\x39\x25\x9e\x70\xb0\x72\x7d\xc5\xe7\xa1\
+\xff\x70\x4b\x19\xff\x31\x62\xf1\x10\x00\x00\x00\xff\xff\x6c\x92\
+\xbd\x0a\xc2\x30\x14\x46\xbf\x2f\x16\x7f\xd2\x06\x21\x83\xc6\x41\
+\xc5\x5d\x70\xec\xa8\xbb\xcf\xe2\x6b\xba\x76\x70\x28\xa8\x83\xe0\
+\xd6\xb1\x88\x20\x24\xf7\x3a\x88\x5b\x5e\xe0\x1c\x0e\x1c\x36\xb7\
+\xcb\x76\x7f\x3a\x9e\x85\xea\xe2\x87\xb2\xab\x4b\x53\x1f\xa6\x78\
+\xbf\x04\x66\x90\x03\x67\x4c\xa0\xfe\x0a\xa9\xc4\x7f\x8f\x64\xa2\
+\x44\x24\x89\x48\x1a\xa1\x2a\x30\x2c\x30\x2e\xac\xb8\x91\xef\xfc\
+\x24\x3c\x66\xe5\xf2\xba\x70\x9b\x36\x54\xeb\x76\x5e\xad\xee\xde\
+\x86\xa7\x1d\xba\x9e\x79\x0f\x45\xc5\x28\x94\x04\xf0\x05\x00\x00\
+\xff\xff\x62\x99\xbc\x76\x56\xee\xa7\xef\x5f\x79\xf9\xb9\xf9\xfe\
+\x32\xb2\xff\x65\x56\xd6\xe4\x62\xf8\xfd\xeb\x3f\x03\x23\x13\x51\
+\x8e\x66\x60\x60\x60\x60\xfc\xcf\xf0\x9f\xf1\xff\x7f\xf4\x18\x66\
+\xfc\xcf\xca\xc4\xf6\x9f\x8d\x99\x1d\xc9\x43\x0c\x8c\xff\xfe\xff\
+\x65\xfe\xf8\xe3\xb5\xc4\xbb\xef\xcf\x24\x6e\xbc\x39\x65\x01\xf1\
+\x10\x33\x03\x3b\x33\xe7\x7f\x1e\x36\xc1\xb7\x82\x9c\xe2\x0f\xc5\
+\x79\x64\x6f\x8b\xf3\x28\x5c\x97\xe4\x55\xb8\x2e\xce\x23\x77\x5b\
+\x98\x4b\xe2\x11\x0f\x9b\xc0\x3b\x26\x46\xa6\xbf\x30\xd3\x01\x00\
+\x00\x00\xff\xff\x62\x54\x89\x34\xbe\xfb\xf4\xed\x0b\x25\x86\xff\
+\xcc\xff\x85\x44\x58\x18\xbd\xc3\x45\x88\x76\x31\xb9\x00\x9a\x9e\
+\xff\x31\xa2\x79\xe8\xef\x7f\x48\x0c\xfd\xf9\xf7\x9b\xe1\xff\xff\
+\x7f\x0c\x8c\x8c\xcc\x0c\x6c\xcc\x1c\x0c\x3c\xac\xfc\x1f\x04\x39\
+\xc5\x1e\x89\x72\xcb\xde\x91\xe0\x51\xb8\x26\xc9\xab\x70\x03\x00\
+\x00\x00\xff\xff\xbc\xd1\xb1\x0d\x80\x30\x10\x03\x40\x3b\x05\x54\
+\x54\xb4\x91\x32\x0e\xa2\x65\xff\x45\xc8\xff\xdb\x54\x94\xb4\x8c\
+\x70\x3a\x6e\xe7\xb8\x01\x2f\x73\x1a\x7d\xac\x38\xae\x1d\x11\x06\
+\x3f\xbe\x7e\x00\x99\xa0\x5e\x90\xad\x56\x4e\x96\x02\xa9\x84\x5c\
+\x20\x1b\x1e\x00\x00\x00\xff\xff\xb4\x92\x21\x12\x00\x20\x0c\xc3\
+\xda\x5b\x81\xff\x7f\x98\xa0\x26\x70\x18\x2a\x73\x11\x11\x0d\x30\
+\xdd\xd6\xfb\x3d\xbe\x0c\x61\x81\x91\xae\x92\x72\xa8\x0c\x96\xbc\
+\x9b\x1d\x00\x00\x00\xff\xff\x94\x94\xb1\x0d\x00\x20\x0c\xc3\xdc\
+\x96\xff\x4f\x76\x19\xd8\x10\x42\x70\x40\x6c\x79\xc9\xd8\x96\x7f\
+\x22\x21\x33\xa8\x2a\x6c\xd1\x05\xc8\x08\xd6\x27\x34\xb6\x57\xc6\
+\x93\xe7\x10\x34\x01\x00\x00\xff\xff\x8c\x91\xc1\x0a\x80\x20\x10\
+\x05\x67\xdd\x35\xa5\xfe\xff\x3b\x83\x28\x41\xad\xad\x4b\x67\xeb\
+\xdd\x67\x18\x78\x36\x02\x46\xc1\x6a\x42\x9e\x8d\xbd\x1c\xac\x5b\
+\x21\x6a\x24\x4d\x09\x01\xaa\x37\x4e\xef\x68\x30\xb2\x2d\x04\x51\
+\xfc\xbe\x3e\xac\xef\xed\x3f\xf7\x00\x00\x00\xff\xff\x22\xd9\xe1\
+\xff\xff\x31\x30\x70\x70\x32\x33\x7c\xfb\xfa\x87\xe1\xf4\xc9\xc7\
+\x0c\x52\x5c\xea\x0c\x5e\x26\x3e\x0c\xc6\xaa\x86\x0c\xa2\x02\x22\
+\x0c\x8c\x8c\x0c\x0c\x5f\x7e\x7d\x60\x78\xf6\xe9\x1e\xc3\xb5\xd7\
+\x27\x19\xae\xbe\x3a\xc1\xf0\xf5\xf7\x27\x06\x6e\x56\x3e\x9c\x8e\
+\x67\x64\x64\x60\x80\x95\x4a\x4c\x8c\x4c\x0c\xff\xff\xff\x67\xf8\
+\x4f\xc0\x13\x00\x00\x00\x00\xff\xff\x22\xc9\xe1\xff\xff\x43\x1c\
+\x7d\xe7\xc6\x17\x86\xa3\xfb\xde\x32\x54\x84\x54\x30\x14\x85\x67\
+\x30\xb0\xb3\xb3\x32\xfc\x87\x54\xe9\x70\xb5\x5a\x62\x16\x0c\xae\
+\x2a\xd1\x0c\xcf\x3f\x3f\x60\x58\x73\x75\x22\xc3\xe9\x27\x3b\x19\
+\xb8\xd8\xf8\x18\x30\x8b\x4d\x06\x86\x5f\x3f\xff\x31\xb0\xb0\xb0\
+\x30\x30\x32\xfd\x65\xf8\xf6\xfb\x0b\x03\x0b\x13\x0b\x03\x2b\x13\
+\x3b\x5e\xc7\x03\x00\x00\x00\xff\xff\x22\x3a\x3b\xfe\xff\xc7\xc0\
+\xc0\xce\xc1\xc4\x70\xe3\xf2\x57\x86\x9d\x6b\x5f\x30\xcc\x2e\x9c\
+\xce\x50\x19\x97\xcb\xc0\xc2\xca\xc4\xf0\xf7\xdf\x5f\x86\xff\xff\
+\xff\xc1\x2b\x9b\x3f\x7f\x7f\x33\xfc\xfe\x03\x29\xd2\x24\x79\xe5\
+\x19\x72\x2d\xfa\x19\x42\x74\xf2\x19\xbe\xfd\xfa\xcc\xc0\x04\x2d\
+\x01\xfe\xff\x67\x60\x60\x65\x63\x64\x78\xf5\xec\x0f\xc3\x92\x59\
+\x0f\x18\x3c\xc4\x4b\x18\xba\xbc\x36\x32\xd4\xd8\x2f\x66\x30\x94\
+\x74\x64\xf8\xf1\xe7\x1b\x5c\x2d\x36\x00\x00\x00\x00\xff\xff\x8c\
+\xd4\x21\x0e\xc2\x40\x10\x40\xd1\x3f\x33\xbb\x75\x0d\x06\x01\x0e\
+\x53\x82\x44\x35\x58\x24\xa6\x12\x8d\x20\xe1\x04\x78\x6e\xc4\x01\
+\xb8\x0c\x69\x10\x08\x0c\x49\x31\x5d\xb6\x83\x42\x92\x70\x82\xff\
+\xd4\xff\x0b\xfe\x8d\x3c\xee\x99\xcb\xf9\xca\x69\x7f\x64\xbb\x6e\
+\xe8\x53\x42\x45\x31\x35\x44\x14\xd3\x80\x49\x20\x58\xa4\x08\x05\
+\x0e\x0c\xee\x64\xcf\x34\x8b\x03\x9b\xf9\x8e\xae\x7f\xa2\x62\xb8\
+\x3b\xaa\xc2\xad\x7d\x11\xbd\xa4\xae\x56\x8c\xe2\x94\x6a\xbc\x64\
+\x52\xce\x78\x0f\x09\xf8\xfd\xe4\x0f\x00\x00\x00\xff\xff\x22\x3a\
+\xc4\x19\x19\x99\x18\x0e\xee\x7e\xce\xa0\xa9\xac\xcb\x50\x16\x95\
+\xcb\xc0\xc0\xc0\xc0\xc0\xca\xc2\xc2\xc0\xc8\xc8\xc8\xf0\xff\x3f\
+\x24\x99\xdc\x78\x7b\x92\xa1\x66\x43\x3a\x83\x4f\x65\x04\xc3\xda\
+\x43\x5b\xa0\x21\xc6\x08\x0f\xb9\x10\xed\x3c\x06\x45\x41\x6d\x86\
+\x9f\x7f\xbe\x31\x30\x33\x31\x33\xfc\xff\xc7\xc8\xf0\xf4\xf1\x17\
+\x06\x6d\x25\x55\x06\x19\x51\x69\xa8\x63\x19\x18\xfe\x13\x51\x12\
+\x01\x00\x00\x00\xff\xff\x84\xd4\x2b\x0e\xc2\x40\x14\x46\xe1\xf3\
+\xdf\xa6\x4c\x05\xeb\x40\xa0\x50\x2c\x02\x0d\x49\x75\x05\x0e\xc9\
+\x1e\x58\x09\x8a\x2d\x90\x60\x70\x24\x78\x12\x14\x62\x12\x02\x02\
+\x0c\x8f\xb6\x77\xb0\x18\xc2\x0e\x8e\xf8\x72\xfe\x86\xa7\x04\x9d\
+\x20\xe2\xe9\x4d\x3c\xde\x99\x4d\x2a\x42\x5e\xd0\xb4\x0d\x92\xf0\
+\xe4\x48\xe2\x70\xdd\xb3\xd8\x4c\x89\xb6\xe5\xd6\xdd\x31\x9e\x97\
+\x2c\xd7\x2b\x4c\xc2\xdd\xf1\xd4\x92\x67\x81\x51\xaf\xa2\xf6\x1a\
+\x99\x78\x3d\xc4\xe5\xfc\x64\xd8\x1f\x00\x7c\xed\x34\xc3\x64\x98\
+\x0c\xfd\xe0\xf2\x01\x00\x00\xff\xff\x22\x1c\xe2\xff\x21\x65\xf5\
+\x8d\x2b\x1f\x19\x04\x84\xc4\x19\xfc\xad\x3d\x19\x18\x18\x18\x18\
+\x98\xa1\x2d\x30\x58\x64\x6e\xbe\x31\x8b\xe1\xdf\xff\xbf\x0c\xec\
+\x0c\x02\x0c\xa6\xe6\x92\x0c\x72\x9a\x22\x0c\x55\x33\xda\x18\xbe\
+\xff\x82\x84\x2e\x23\xb4\x08\x36\x94\x74\x60\x90\xe1\x57\x66\x60\
+\x62\xfd\xc5\xf0\xf2\xc5\x67\x86\xdf\x2f\xdf\x33\x58\xe9\x98\x20\
+\x2c\x63\x60\x60\xf8\xf5\xf7\x3b\xc3\xd7\xdf\x9f\x18\xbe\xff\xf9\
+\xca\xf0\xeb\x2f\xf6\x56\x31\x00\x00\x00\xff\xff\x22\xe8\x70\x26\
+\x66\x06\x86\x9f\xdf\x19\x18\xee\xdf\xfb\xc8\x60\xa9\x63\xc4\x20\
+\x25\x2c\x09\x0f\xe5\xff\x0c\xff\x19\x18\x19\x99\x18\x3e\xfc\x78\
+\xcd\xf0\xe0\xfd\x55\x06\x0e\x16\x2e\x86\x3f\xff\x7e\x33\xfc\xfe\
+\xf3\x87\x41\x53\x47\x90\xe1\xe1\xe3\xfb\x0c\x07\x2e\x1c\x85\x84\
+\xe6\xff\x7f\x0c\x7f\xff\xfd\x65\x60\x67\xe1\x64\xe0\xfd\x64\xc4\
+\xb0\x62\xfe\x43\x86\x64\xd3\x46\x86\xcd\x33\x76\x30\xb8\x98\x38\
+\x40\x03\x03\x52\xc8\x29\x08\x6a\x33\x98\xc9\xb8\x33\x68\x88\x98\
+\x30\x48\xf2\x28\x60\x75\x17\x00\x00\x00\xff\xff\xc2\x5b\x1c\xfe\
+\xff\xcf\xc0\xc0\xc2\xc2\xc8\xf0\xfe\xdd\x5f\x86\xef\xef\x7f\x30\
+\x58\xe9\x9a\x42\x1c\xf1\xef\x1f\x03\x13\x33\xa4\xbc\x65\x64\x64\
+\x64\x78\xf9\xe5\x21\xc3\x97\x5f\x1f\x19\xd8\x59\xb8\x20\xc9\xe2\
+\xef\x7f\x06\x61\x31\x36\x06\x06\xe6\x7f\x0c\xa7\xae\x9d\x63\xf0\
+\x34\x73\x85\xe7\x03\x06\x06\x06\x06\x4d\x51\x33\x86\x77\x8f\xfa\
+\x19\x54\xc5\xb4\x19\x34\xe5\xd5\x18\xfe\xfe\xfb\x0b\x75\x38\x24\
+\x16\x2d\x65\xbd\x19\x2c\x64\x3c\x19\x18\x19\x99\x18\x9e\x7f\xbe\
+\xcf\xd0\xb0\x2f\x02\xc3\x6d\x00\x00\x00\x00\xff\xff\xc2\x1f\xe2\
+\xff\x19\x18\x98\x98\x19\x19\xde\xbf\xfd\xcd\xc0\xf0\x8f\x99\x41\
+\x5f\x45\x8b\x81\x81\x81\x81\x81\x11\xde\x02\x83\x44\xed\x9b\x6f\
+\xcf\x19\xfe\xfc\xfb\xcd\xc0\xc8\xc0\xc8\xc0\xc8\x08\x49\xab\x9c\
+\xdc\x4c\x0c\xcc\x5c\x2c\x0c\x37\x1f\xdf\x83\xeb\x61\x64\x82\xe8\
+\xd3\x53\xd1\x64\xe0\xe2\xe3\x67\xf8\xf3\xf7\x0f\x6e\x8b\x09\x54\
+\x40\x00\x00\x00\x00\xff\xff\x22\x98\x54\x18\x19\x19\x18\x3e\xbc\
+\xff\xc5\xc0\xc4\xce\xc9\xa0\x20\x21\x07\x11\x83\x86\x1c\xcc\xe8\
+\x4f\x3f\xde\x42\x9a\xa1\x50\xfe\xbf\x7f\x0c\x0c\xac\xac\x0c\x0c\
+\xdc\xdc\xac\x0c\xcf\xdf\xbc\x84\x58\xc4\xc8\x04\xd7\x27\x25\x2c\
+\xc1\xa0\xa9\x26\xc5\x70\xf1\xfe\x25\x86\xa7\xaf\x9f\xc3\x43\x1a\
+\x06\xfe\xfc\xfd\xcb\xf0\xfb\xcf\x3f\x14\xbb\xd0\x01\x00\x00\x00\
+\xff\xff\x22\x5c\x73\xfe\x67\x60\xf8\xfc\xe9\x37\x03\x2f\x17\x37\
+\x83\x28\xbf\x30\xd4\x33\xd0\x4e\x15\x54\xc9\xb7\xdf\x9f\x51\x3c\
+\xc2\xc0\x00\xc9\x1b\x1c\x1c\x2c\x0c\xef\x3f\x7f\x82\xeb\xf9\x0f\
+\x0d\x49\x4e\x76\x4e\x86\x88\x28\x2d\x86\xd4\xce\x64\x06\x13\x69\
+\x17\x86\xc3\x53\x37\x32\xfc\xff\xff\x9f\xe1\x1f\xc3\x3f\x06\x66\
+\x46\x66\x86\xed\x37\x17\x32\xec\xba\xbd\x82\x41\x84\x5b\x92\x01\
+\xa9\xef\x80\x02\x00\x00\x00\x00\xff\xff\x7c\x95\x4d\x0a\x80\x20\
+\x18\x44\x9f\xf9\x43\x88\x50\xf7\xbf\x5b\x27\x88\x36\x2d\x34\x31\
+\xfd\x5a\xb8\x11\x8a\xf6\x03\xf3\x86\x19\x98\x7f\x70\xd5\x77\x9e\
+\x62\x21\xf8\x85\xe0\xc3\xa7\x2c\xdf\x91\xf1\x2c\x44\x7a\x53\xce\
+\x69\xe2\x95\x28\xb5\x60\xb5\x05\x81\x86\x30\x29\x85\xb7\x2b\xd6\
+\x18\x8c\x1e\x11\x7a\xf4\xd4\x4e\xf6\xbc\x91\xe4\xa0\xb6\x8a\xd3\
+\xf3\xcb\xf3\x01\x00\x00\xff\xff\x84\x97\xc1\x0a\x80\x30\x0c\x43\
+\x5f\xb7\xae\x9b\xc5\xff\xff\x57\xad\x16\x0f\x9e\x64\x03\xef\x21\
+\x79\x10\x08\xe4\x7f\xc7\x81\x88\x64\xb3\x41\x57\x5b\x6a\x22\x63\
+\x3a\x1e\x22\xa0\x5a\x38\xe2\xe4\xba\x63\x82\xf3\xb6\x93\x99\x7c\
+\x7b\x7a\x4d\x8a\x54\x9a\x0c\xac\x3a\x5d\x7d\x99\xf9\x00\x00\x00\
+\xff\xff\x22\xaa\x1c\xff\xfb\xf7\x3f\x03\x0b\x33\x33\x03\x13\x13\
+\x13\xb2\xf9\x70\x00\x69\xf5\xa1\xbb\x1c\x92\xb1\xff\xfe\xfb\x0b\
+\x75\x20\x2a\x60\x65\x62\x83\x26\x1d\x6c\x69\x18\xd2\x3a\xfc\xff\
+\xff\x1f\xce\x5a\x14\x00\x00\x00\xff\xff\x22\xb2\xad\x02\x29\xf6\
+\x18\x71\xf6\xe7\xb0\x97\x00\x8c\x50\x29\x6c\xb2\x4c\x8c\xc4\x0d\
+\x21\xe0\x02\x00\x00\x00\x00\xff\xff\x22\xca\xe1\x4c\x4c\x8c\x0c\
+\x7f\xff\xfd\x63\xf8\x87\xa5\x49\xca\xc0\xc0\x80\xbd\x5a\x86\x3a\
+\x98\x91\x11\x7b\xb9\x40\x69\xcf\x08\x00\x00\x00\xff\xff\x22\xaa\
+\x38\x64\x61\x85\xa4\xd5\xdf\x7f\x7e\xc3\x1d\x85\x0c\x58\x18\x59\
+\xb1\xb6\x9d\xff\xfd\xfd\xcf\xc0\xcc\xc4\xc4\xc0\x84\x65\x80\xe6\
+\xf7\xbf\x9f\xd0\xa2\x8e\xbc\x91\x38\x00\x00\x00\x00\xff\xff\x22\
+\x1c\xe2\x8c\x0c\x0c\xec\xec\x2c\x0c\xdf\x7e\x7c\x67\xf8\xf1\x0b\
+\x7b\xbb\x81\x95\x99\x1d\xc3\xfe\xff\x0c\x0c\x0c\x7f\xfe\xfe\x63\
+\x60\x65\x65\x65\x60\x61\x46\x76\x38\x24\xfc\x7f\xfc\xf9\x06\x2d\
+\x22\xc9\x03\x00\x00\x00\x00\xff\xff\x22\x58\x73\x32\x32\x32\x30\
+\x70\x73\x43\xfa\x96\x1f\xbf\x7e\x82\x0a\xff\x87\x3b\x8e\x81\x81\
+\x81\x81\x93\x95\x9b\x01\x32\xa8\x89\x70\xda\xff\x7f\x0c\x0c\xbf\
+\x7f\xfd\x65\xe0\x64\xe7\x80\x14\x85\x50\x09\x58\x3e\xf9\xfa\xeb\
+\x23\x24\x89\x91\xe9\x72\x00\x00\x00\x00\xff\xff\x22\x2a\x8d\xf3\
+\xf2\xb1\x32\x7c\xff\xf1\x8d\xe1\xe5\xfb\xd7\x10\x07\xff\x47\x38\
+\x90\x81\x81\x81\x81\x87\x4d\x80\x81\x81\x01\x29\xf4\x18\x21\x0e\
+\xff\xf9\xf3\x2f\x03\x1f\x17\x2f\x44\x0e\xaa\x89\x91\x81\x91\xe1\
+\xcf\xbf\xdf\x0c\x9f\x7e\xbe\x63\x60\x66\x64\x21\xd8\xb7\xc4\x05\
+\x00\x00\x00\x00\xff\xff\xc2\xef\x70\xa8\x03\xf8\x05\xd9\x18\x18\
+\xfe\xfc\x64\xb8\xf7\xec\x21\xd4\xe1\xa8\x96\x09\x70\x88\xa2\x74\
+\xb3\x18\x19\x19\x18\xfe\xfc\x81\x54\x5c\x62\x82\x42\x0c\x0c\x0c\
+\x90\x9e\x10\xcc\x8d\x9f\x7e\xbe\x83\x38\x9c\x89\x85\x81\xdc\x20\
+\x07\x00\x00\x00\xff\xff\x22\x18\xe2\x7f\xff\xfd\x67\xe0\x17\x64\
+\x61\x60\x60\x61\x60\xb8\x78\xe7\x2a\x9a\xbf\x20\x61\x2e\xc2\x25\
+\xc5\xc0\xc6\xc2\x09\x29\x29\xa0\xed\xf7\x9f\x3f\xfe\x33\xfc\xfc\
+\xf6\x87\x41\x5e\x42\x06\xee\x59\x58\xe8\xbe\xfc\xf2\x88\xe1\xeb\
+\xaf\x8f\x0c\xcc\x8c\xcc\x64\xa7\x71\x00\x00\x00\x00\xff\xff\xc2\
+\xeb\x70\x46\x46\x06\x86\xbf\x7f\xfe\x33\xf0\xf0\x31\x31\xf0\x0a\
+\x73\x32\x9c\xbc\x7a\x8e\x81\x81\x81\x81\x81\x19\x5e\x11\x41\x1c\
+\x2e\xca\x2d\xc3\x20\xc0\x2e\xc2\xf0\x17\xda\x4f\x64\x62\x66\x60\
+\xf8\xfc\xe1\x0f\x03\xc3\xaf\xff\x0c\xba\xca\x9a\x50\xd3\x10\x2d\
+\xbe\x7b\xef\x2e\x33\xfc\xfe\xfb\x0b\x9a\xc6\x91\x9d\x8e\x48\x4e\
+\x4c\x8c\x4c\x0c\xac\x2c\x2c\x0c\xcc\xcc\xd8\xcb\x7b\x00\x00\x00\
+\x00\xff\xff\x22\x5c\xe5\xff\x63\x60\x60\x65\x67\x60\x50\x50\xe2\
+\x67\x38\x7b\xe3\x32\xc3\xa3\x57\x8f\xa1\x5d\x36\x48\xfb\xfa\xdf\
+\xff\x7f\x0c\x9c\xac\x3c\x0c\x4a\x42\x3a\x0c\xbf\xfe\xfd\x64\x60\
+\x64\x60\x62\x60\x62\x62\x64\x78\xfa\xe8\x3b\x03\x2b\x27\x2f\x83\
+\x8d\xae\x05\xc4\x22\xa4\x6e\xd8\xb5\x57\x27\x18\x58\xa0\xc9\x04\
+\xa5\x3c\x87\xfa\x81\x87\x4d\x90\xe1\xeb\xef\x8f\x0c\x2f\xdf\xbd\
+\x61\x78\xf7\xf1\x23\xd6\x16\x22\x00\x00\x00\xff\xff\x22\xaa\x38\
+\xfc\xf7\xf7\x3f\x83\x9a\x06\x2f\xc3\xe7\x8f\x6f\x18\x36\x1f\xdb\
+\xc9\xc0\xc0\xc0\x80\x51\x8d\xdb\x2b\x86\x30\xfc\xfb\xfb\x97\x81\
+\x99\xed\x1f\xc3\xcf\x6f\x4c\x0c\xa7\x8e\x3e\x60\x08\x75\xf2\x66\
+\x50\x93\x51\x61\xf8\xf7\xef\x1f\x03\x23\x23\x24\x24\x9f\x7c\xba\
+\xc3\x70\xfb\xed\x45\x06\x0e\x56\x2e\x06\x56\x36\x26\x86\xcf\xdf\
+\xbe\x30\x30\x30\x40\x6a\x66\x58\x6d\x6a\x25\xef\xc5\x60\x2d\x92\
+\xc0\xa0\xfc\x27\x80\x21\x55\x77\x02\x83\x28\x8f\x34\x24\x86\x90\
+\x3c\x00\x00\x00\x00\xff\xff\x22\xaa\x02\xfa\xfd\xeb\x3f\x83\x84\
+\x0c\x1b\x83\x84\x12\x1f\xc3\xf4\xf5\x8b\x18\x7e\xfd\xf9\xc5\xc0\
+\xc2\xcc\xcc\xf0\x9f\xe1\x3f\x7c\xe4\x49\x5b\xcc\x82\x21\x4c\x2f\
+\x9f\xe1\xd3\xa7\xef\x0c\x5b\xd6\x3d\x64\xb0\xd5\x73\x61\x98\x98\
+\xd7\x0a\x35\x83\x91\xe1\x1f\x03\xc4\xa3\xfb\xef\xad\x62\xf8\xfa\
+\xeb\x13\x03\x0b\x0b\x33\x83\x98\x18\x27\xc3\xc3\x17\x4f\x19\x9e\
+\xbf\x7b\x01\x0d\x70\x48\x90\xf3\xb2\x09\x33\x14\xb9\xb6\x30\xb4\
+\x25\xb4\x31\x38\xe9\x3a\x33\xc0\x87\xe7\x90\x9a\x1c\x00\x00\x00\
+\x00\xff\xff\x22\xae\xad\xc2\xc0\xc0\xf0\x9f\xf1\x1f\x83\xad\x93\
+\x04\xc3\xd5\x5b\x17\x19\xa6\xac\x9b\xcd\xc0\xc0\xc0\xc0\xf0\xfb\
+\xcf\x1f\xb8\xc3\xfe\xff\xff\xcf\xe0\xa7\x91\xc1\x50\x67\xb7\x86\
+\x61\x4d\xf9\x46\x86\xbd\x13\xd7\x30\x88\xf0\x8b\x40\xc6\x56\x18\
+\xfe\x32\x30\x33\xb2\x30\xdc\x7b\x77\x99\xe1\xd0\x83\xf5\x0c\xdc\
+\x6c\x7c\x0c\xbf\x7e\xfd\x66\x50\xd7\xe1\x67\xf8\xf8\xf1\x15\xc3\
+\xca\x3d\x9b\x20\xf6\xfc\x83\xe5\x03\xb4\x21\x38\x2c\x39\x18\x00\
+\x00\x00\xff\xff\x22\x6a\x08\x8e\x91\x91\x81\xe1\xf7\xcf\xff\x0c\
+\x12\x32\x2c\x0c\xd6\xee\x32\x0c\x95\x53\xdb\x18\x4c\x35\x8d\x18\
+\x6c\x75\x2d\x19\x7e\xff\xf9\xcd\xc0\xc4\xc4\xc4\xc0\xcc\xc4\xc4\
+\xf0\xff\xff\x3f\x06\x55\x29\x55\x06\x55\x29\x48\x29\x02\x49\xbf\
+\xff\x19\x98\x19\x59\x18\x3e\xfd\x7c\xc7\x30\xe7\x6c\x2d\xc3\xdf\
+\x7f\xbf\x19\xd8\x59\x38\x19\x7e\xff\xfe\xc7\x20\x24\xc6\xcc\xe0\
+\x1a\x28\xcb\xd0\xb1\xaa\x9b\x41\x5c\x58\x94\x21\xc4\xde\x9f\x81\
+\x99\x81\x91\xe1\xff\xff\x7f\x0c\x9f\x7f\x7d\x60\x78\xf8\xe1\x3a\
+\xc3\xa9\x27\x3b\x19\xde\x7c\x7b\xc6\xc0\xca\xcc\x86\xd2\x52\x04\
+\x00\x00\x00\xff\xff\x62\xe4\xf1\x90\xfb\xcf\xc8\xc8\xc0\xf0\xeb\
+\xe7\x7f\x06\x59\x45\x76\x06\xb7\x40\xdc\x03\xfb\xff\xff\x33\x30\
+\x70\x70\x30\x33\x9c\x3a\xf2\x96\xe1\xe6\xf9\xbf\x0c\x4b\x6b\x66\
+\x33\x78\x59\x3a\x42\xca\x75\x68\x1a\xfe\xf7\xff\x1f\xc3\xff\xff\
+\x90\x92\x07\x36\x9e\xf8\xe4\xe3\x6d\x86\xe9\xa7\xca\x18\x9e\x7e\
+\xba\xcb\xc0\xc9\xca\x03\x1f\xfc\xfc\xff\x9f\x81\x81\x9d\x9d\x89\
+\xe1\xcb\x97\x5f\x0c\x2f\x5f\x7e\x65\x50\x93\x51\x66\x10\x17\x12\
+\x63\xf8\xf1\xe7\x1b\xc3\xfb\xef\x2f\x19\x3e\xfe\x78\x03\xcf\xfc\
+\xe8\x19\x14\x00\x00\x00\xff\xff\x22\xc9\xe1\x30\xcb\x38\x39\x59\
+\x18\x1e\xde\xff\xcc\x70\xf1\xf4\x47\x06\x6f\xfd\x50\x86\x64\xcf\
+\x78\x06\x1d\x25\x4d\x06\x56\x68\x6f\x06\xe6\xe0\x6f\xbf\x3f\x33\
+\xac\xbd\x3a\x99\xe1\xf0\x83\x0d\x0c\x7f\xfe\xfd\x82\x8c\x02\xa0\
+\x8d\xd8\xc2\x86\xac\x59\x58\x98\x18\x7e\xfc\xfa\xc1\xf0\xfb\xcf\
+\x1f\xc8\x8c\x03\x13\x2b\xb4\xe4\x61\xc4\x3a\xca\x0b\x00\x00\x00\
+\xff\xff\x22\x79\x0e\x82\x91\x91\x81\xe1\xfb\xb7\x3f\x0c\x32\x72\
+\xdc\x0c\x7e\xe1\xd2\x0c\x77\x19\x37\x31\x18\x25\x58\x31\xb4\x2e\
+\xee\x63\x60\x60\x60\x60\xf8\xfb\x17\x61\xc9\x9f\x7f\xbf\x18\x0e\
+\xde\x5f\xcb\xc0\xc0\xc0\xc0\xc0\xc5\xca\x8b\xd5\x01\x8c\x4c\x90\
+\x51\x81\x9f\x3f\xff\x32\x30\x33\xb0\x31\x70\xb0\x72\x33\xb0\xb3\
+\x70\x32\x30\x33\x42\x27\x0b\xb0\x0f\x4d\xff\x07\x00\x00\x00\xff\
+\xff\x22\x6b\xf2\x84\x91\x89\x81\xe1\xd7\xaf\x7f\x0c\x3f\xbe\xfd\
+\x65\x50\x53\x15\x67\x10\x94\xe0\x65\xd8\x7a\x6c\x0f\x03\x03\x03\
+\x03\x03\x13\x33\x33\x3c\xc9\xf0\xb1\x0b\x33\xb8\xa9\xc6\x30\x7c\
+\xf8\xf1\x8a\xe1\xe3\xcf\xb7\xd0\x34\x8f\x3d\x2a\x19\x19\x19\x50\
+\x7a\x3d\x78\xdb\x30\xff\x19\xfe\x00\x00\x00\x00\xff\xff\x22\x6b\
+\x46\x02\x6e\xd1\x3f\x06\x86\xff\x8c\x7f\x18\xd4\x35\x04\x19\xce\
+\x1c\xbd\xca\x70\xe9\xde\x15\x06\x3d\x25\x1d\xc8\x80\x11\xb4\x76\
+\x0d\xd4\xca\x66\x90\xe1\x53\x65\x78\xf1\xe9\x11\xc3\xb1\x27\x9b\
+\x19\x3e\xfc\x78\x85\xb3\xfd\x4e\x84\xad\xff\xff\xfd\xff\xc3\xc8\
+\xcf\x2e\xfa\x0c\x00\x00\x00\xff\xff\xa2\x6c\xba\x8a\x91\x81\xe1\
+\xf7\xef\xff\x0c\xea\xba\xbc\x0c\x7f\xfe\x7f\x63\x98\xb1\x71\x21\
+\x03\x03\x03\x03\xc3\x9f\xbf\x7f\xe0\x0d\x31\x16\x46\x56\x06\x2b\
+\x39\x1f\x86\x20\x9d\x2c\x06\x5e\x36\x01\x86\xbf\xff\xfe\x30\xe0\
+\xcc\x40\x04\x00\x13\x23\xe3\xbf\xdf\x7f\x7f\x32\xa8\x0a\x1b\xed\
+\x07\x00\x00\x00\xff\xff\xa2\xc8\xe1\x8c\x8c\x0c\x0c\x7f\x7f\xff\
+\x67\xe0\x15\x60\x64\x70\x74\x97\x65\x98\xb9\x76\x31\xc3\xf6\x13\
+\x7b\x19\xd8\x58\xd9\xe0\x0e\xff\xcf\xf0\x9f\x88\xf9\x1f\xa2\xc0\
+\xff\xff\x0c\xff\x99\x98\x99\xd8\x7e\x3b\x28\x06\xcf\x02\x00\x00\
+\x00\xff\xff\xa2\x78\x82\x90\x91\x89\x81\xe1\xe7\x8f\x7f\x0c\xda\
+\x86\x3c\x0c\xf6\x3e\xc2\x0c\x69\x93\x32\x19\x66\x6c\x9a\xcf\xf0\
+\xe1\xf3\x67\x86\xff\xff\x11\x6d\x94\x6f\xbf\x3f\x33\xfc\xf9\xff\
+\x1b\xe7\xc8\x14\x0e\xd3\xff\x33\x32\x32\xfd\x63\x62\x64\xfe\xc3\
+\xc2\xc4\xfa\xfb\xfd\xf7\x57\x8c\x0e\x0a\xa1\x53\xd4\x45\x8d\x8e\
+\x03\x00\x00\x00\xff\xff\x22\xb9\x38\xc4\x05\x60\x65\xfc\xb7\xef\
+\xbf\x19\x9e\x3c\xfd\xc0\x20\x29\x20\xc5\xa0\x28\x29\xc7\xc0\xce\
+\xc6\xce\xf0\xfd\xf7\x67\x86\x8f\x3f\xde\x41\x47\xbc\x30\xd3\x36\
+\x64\x62\x16\xba\x82\x02\xba\xd8\xe0\x3f\xc3\x3f\xe6\x7f\xff\x20\
+\x0b\x1c\xfe\xfe\xfb\xfd\xef\xf7\xdf\x5f\x4c\xb6\xf2\x41\x2b\x52\
+\x4d\x5b\x62\x58\x98\x58\xfe\x02\x00\x00\x00\xff\xff\x22\x3b\x73\
+\x62\x58\xce\xc8\xc0\xf0\xe3\xfb\x5f\x06\x16\x66\x66\x06\x35\x15\
+\x31\x86\x5f\xbf\xbf\x31\xdc\xff\x78\x09\x3e\xb5\x0d\x9d\x66\xf9\
+\x0f\x59\x09\xc1\x04\x6f\xe3\xfe\x67\xf8\xc7\xfc\xf7\xdf\x5f\xc6\
+\xbf\xff\x7e\x33\xfe\xfd\xf7\x87\xe1\xef\xbf\xbf\x0c\x8c\x0c\x90\
+\x7e\x2c\x17\x2b\xdf\x17\x71\x4e\xb1\xc7\xa2\x5c\x32\xb7\xcd\x64\
+\xdc\x97\x9a\xcb\x7a\xac\x82\x0c\xb4\xff\x67\x04\x00\x00\x00\xff\
+\xff\x62\x81\xac\x7a\xf8\x4f\x95\x09\x70\x48\xf3\xfa\x3f\xc3\xcf\
+\x1f\x7f\xfe\x33\x32\xb2\xfc\xe7\x64\x65\x83\x2f\xd7\xf8\xf7\xff\
+\x2f\xf3\xdf\x7f\x7f\x18\x7f\xff\xfb\xcd\xf8\xe7\xdf\x1f\x86\x7f\
+\xff\x20\x6b\x5e\xd8\x20\x0e\xfc\x2a\xc0\x21\xff\x58\x94\x5b\xe6\
+\xb6\x24\xaf\xc2\x75\x49\x5e\xc5\xab\x92\xbc\x0a\x37\x45\xb8\xa4\
+\x1e\xf0\x71\x08\xbd\x66\x62\x64\xfe\xc7\xc0\xc0\xc0\xf0\xff\xff\
+\x3f\x26\x06\x68\xac\x00\x00\x00\x00\xff\xff\x62\xf9\xf3\xe7\x0f\
+\x03\x1b\x1b\xdb\x3f\x06\x86\xdf\x4c\x24\x25\x3f\x88\x53\xff\x33\
+\x32\x32\xa0\x85\xe0\x7f\xe6\x7f\xff\xff\x30\xfe\xfe\xfb\x8b\xf1\
+\xef\x9f\xdf\xf0\x10\x64\x61\x66\x67\xe0\x66\xe5\xfb\x2a\xc6\x21\
+\xff\x58\x94\x5b\xfa\x0e\xc4\x81\x4a\x57\x25\x78\x14\x6e\x8a\x72\
+\x4b\xdd\x47\x76\x20\x3a\x80\x2c\xc8\xf9\xcf\xc0\xc4\xc8\x0c\xcf\
+\xe5\x00\x00\x00\x00\xff\xff\x62\x11\x13\x10\x7e\xf2\xf4\xed\x73\
+\x59\x76\x66\xee\xbf\xff\xff\x33\x30\x63\x77\x3c\xe3\x7f\xa4\xc5\
+\x2e\x28\x69\x10\x11\x82\x10\x33\x59\x61\x0e\xe4\x16\x7d\x22\xca\
+\x2d\x73\x5b\x82\x57\xe1\xba\x14\xaf\xe2\x35\x09\x1e\x85\x9b\x22\
+\xdc\xd2\xf7\xf9\x39\x84\x5e\xe1\x72\xe0\xff\xff\xff\x98\xff\xc3\
+\x63\x1f\xba\x18\x81\x91\xf1\x3f\x13\x96\x21\x5b\x00\x00\x00\x00\
+\xff\xff\x62\xd9\xd3\xbf\xc1\x2e\xa4\x2e\x6e\xd3\xc5\x2b\x97\x74\
+\x59\x98\xa5\xfe\x42\x06\x53\x99\xfe\x33\x31\x22\x56\x01\xfd\xfd\
+\xff\x87\xf1\xcf\x5f\xc8\x0a\x86\xbf\xff\xa1\x21\xc8\xc4\xce\xc0\
+\xcd\xc6\xf7\x5d\x94\x43\x0e\x12\x82\x3c\x8a\xd7\x24\x79\x15\xaf\
+\x49\xf0\xca\xdf\x10\xe5\x96\xb9\xcf\xcf\x2e\xf4\x8a\x89\x09\xb7\
+\x03\xff\x41\x17\xcc\x40\x03\x05\xb2\x04\x84\x91\xe9\x2f\xb1\x91\
+\x0e\x00\x00\x00\xff\xff\x62\xfc\xff\xff\x3f\xc3\xeb\x8f\x6f\x84\
+\xbd\x4a\xa2\x37\x3f\xfe\x76\xd9\x32\x38\x46\xee\xdf\xd7\x6f\xdf\
+\x99\xfe\x33\x40\x06\x32\x59\x99\xd8\x18\xb8\x58\x79\x3f\x09\x70\
+\x88\x3d\x11\xe1\x96\xbe\x23\xc1\xa3\x70\x43\x92\x57\xe1\x9a\x38\
+\x8f\xfc\x4d\x51\x6e\xa9\x07\xfc\xec\xc2\x78\x1d\x88\x2d\x04\x89\
+\x74\x1b\x5e\x00\x00\x00\x00\xff\xff\x62\xfc\xf3\xf7\x0f\x33\x33\
+\x13\xf3\xdf\x57\xef\xde\xf3\x66\xcf\x4e\xde\x2e\xa1\xfd\x56\x4f\
+\x96\x4f\xfd\xac\x04\xaf\xc2\x75\x69\x3e\x95\x4b\x52\xbc\x8a\xd7\
+\xc4\xb8\x65\xef\x08\x70\x8a\xbe\x64\x66\x62\xc6\xde\xe2\xf9\xff\
+\x8f\xf9\x1f\xc3\x3f\x68\xc3\x96\x11\x69\xa9\x13\xd9\x9d\x78\x82\
+\x00\x00\x00\x00\xff\xff\x03\x00\x3c\x1e\x17\xa6\x18\xe4\xa8\x9e\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x0f\x24\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x52\x65\
+\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x70\x61\x67\x65\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\
+\x3a\x20\x36\x34\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x34\
+\x38\x30\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x23\
+\x33\x34\x33\x34\x33\x34\x22\x0a\x0a\x20\x20\x20\x20\x49\x6d\x61\
+\x67\x65\x20\x7b\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x75\x73\x65\x72\x49\x63\x6f\x6e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x78\x3a\x20\x74\x6f\x70\x4c\x65\x66\x74\x52\x65\x63\
+\x74\x2e\x78\x3b\x20\x79\x3a\x20\x74\x6f\x70\x4c\x65\x66\x74\x52\
+\x65\x63\x74\x2e\x79\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\
+\x75\x72\x63\x65\x3a\x20\x22\x71\x74\x2d\x6c\x6f\x67\x6f\x2e\x70\
+\x6e\x67\x22\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x52\
+\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x69\x64\x3a\x20\x74\x6f\x70\x4c\x65\x66\x74\x52\x65\
+\x63\x74\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\
+\x6f\x72\x73\x20\x7b\x20\x6c\x65\x66\x74\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x2e\x6c\x65\x66\x74\x3b\x20\x74\x6f\x70\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x74\x6f\x70\x3b\x20\x6c\x65\x66\x74\x4d\x61\
+\x72\x67\x69\x6e\x3a\x20\x31\x30\x3b\x20\x74\x6f\x70\x4d\x61\x72\
+\x67\x69\x6e\x3a\x20\x32\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x34\x36\x3b\x20\x68\x65\x69\
+\x67\x68\x74\x3a\x20\x35\x34\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x54\x72\x61\x6e\x73\x70\x61\x72\
+\x65\x6e\x74\x22\x3b\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\
+\x6f\x72\x3a\x20\x22\x47\x72\x61\x79\x22\x3b\x20\x72\x61\x64\x69\
+\x75\x73\x3a\x20\x36\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\
+\x2f\x20\x43\x6c\x69\x63\x6b\x69\x6e\x67\x20\x69\x6e\x20\x68\x65\
+\x72\x65\x20\x73\x65\x74\x73\x20\x74\x68\x65\x20\x73\x74\x61\x74\
+\x65\x20\x74\x6f\x20\x74\x68\x65\x20\x64\x65\x66\x61\x75\x6c\x74\
+\x20\x73\x74\x61\x74\x65\x2c\x20\x72\x65\x74\x75\x72\x6e\x69\x6e\
+\x67\x20\x74\x68\x65\x20\x69\x6d\x61\x67\x65\x20\x74\x6f\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x69\x74\x73\x20\x69\x6e\
+\x69\x74\x69\x61\x6c\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\
+\x20\x7b\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x3b\x20\x6f\x6e\x43\x6c\x69\x63\x6b\
+\x65\x64\x3a\x20\x70\x61\x67\x65\x2e\x73\x74\x61\x74\x65\x20\x3d\
+\x20\x27\x27\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\
+\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x6d\x69\x64\x64\x6c\x65\x52\
+\x69\x67\x68\x74\x52\x65\x63\x74\x0a\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x20\x7b\x20\x72\x69\x67\x68\
+\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x72\x69\x67\x68\x74\x3b\
+\x20\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\
+\x43\x65\x6e\x74\x65\x72\x3b\x20\x72\x69\x67\x68\x74\x4d\x61\x72\
+\x67\x69\x6e\x3a\x20\x32\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x34\x36\x3b\x20\x68\x65\x69\
+\x67\x68\x74\x3a\x20\x35\x34\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x54\x72\x61\x6e\x73\x70\x61\x72\
+\x65\x6e\x74\x22\x3b\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\
+\x6f\x72\x3a\x20\x22\x47\x72\x61\x79\x22\x3b\x20\x72\x61\x64\x69\
+\x75\x73\x3a\x20\x36\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\
+\x2f\x20\x43\x6c\x69\x63\x6b\x69\x6e\x67\x20\x69\x6e\x20\x68\x65\
+\x72\x65\x20\x73\x65\x74\x73\x20\x74\x68\x65\x20\x73\x74\x61\x74\
+\x65\x20\x74\x6f\x20\x27\x6d\x69\x64\x64\x6c\x65\x52\x69\x67\x68\
+\x74\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x4d\x6f\x75\x73\x65\
+\x41\x72\x65\x61\x20\x7b\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\
+\x69\x6c\x6c\x3a\x20\x70\x61\x72\x65\x6e\x74\x3b\x20\x6f\x6e\x43\
+\x6c\x69\x63\x6b\x65\x64\x3a\x20\x70\x61\x67\x65\x2e\x73\x74\x61\
+\x74\x65\x20\x3d\x20\x27\x6d\x69\x64\x64\x6c\x65\x52\x69\x67\x68\
+\x74\x27\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\
+\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x69\x64\x3a\x20\x62\x6f\x74\x74\x6f\x6d\x4c\x65\
+\x66\x74\x52\x65\x63\x74\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x61\x6e\x63\x68\x6f\x72\x73\x20\x7b\x20\x6c\x65\x66\x74\x3a\x20\
+\x70\x61\x72\x65\x6e\x74\x2e\x6c\x65\x66\x74\x3b\x20\x62\x6f\x74\
+\x74\x6f\x6d\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x62\x6f\x74\x74\
+\x6f\x6d\x3b\x20\x6c\x65\x66\x74\x4d\x61\x72\x67\x69\x6e\x3a\x20\
+\x31\x30\x3b\x20\x62\x6f\x74\x74\x6f\x6d\x4d\x61\x72\x67\x69\x6e\
+\x3a\x20\x32\x30\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\
+\x69\x64\x74\x68\x3a\x20\x34\x36\x3b\x20\x68\x65\x69\x67\x68\x74\
+\x3a\x20\x35\x34\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\
+\x6f\x72\x3a\x20\x22\x54\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\x74\
+\x22\x3b\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\x6f\x72\x3a\
+\x20\x22\x47\x72\x61\x79\x22\x3b\x20\x72\x61\x64\x69\x75\x73\x3a\
+\x20\x36\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x43\
+\x6c\x69\x63\x6b\x69\x6e\x67\x20\x69\x6e\x20\x68\x65\x72\x65\x20\
+\x73\x65\x74\x73\x20\x74\x68\x65\x20\x73\x74\x61\x74\x65\x20\x74\
+\x6f\x20\x27\x62\x6f\x74\x74\x6f\x6d\x4c\x65\x66\x74\x27\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\
+\x20\x7b\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x3b\x20\x6f\x6e\x43\x6c\x69\x63\x6b\
+\x65\x64\x3a\x20\x70\x61\x67\x65\x2e\x73\x74\x61\x74\x65\x20\x3d\
+\x20\x27\x62\x6f\x74\x74\x6f\x6d\x4c\x65\x66\x74\x27\x20\x7d\x0a\
+\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x73\x74\x61\x74\x65\
+\x73\x3a\x20\x5b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\
+\x21\x5b\x30\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\
+\x49\x6e\x20\x73\x74\x61\x74\x65\x20\x27\x6d\x69\x64\x64\x6c\x65\
+\x52\x69\x67\x68\x74\x27\x2c\x20\x6d\x6f\x76\x65\x20\x74\x68\x65\
+\x20\x69\x6d\x61\x67\x65\x20\x74\x6f\x20\x6d\x69\x64\x64\x6c\x65\
+\x52\x69\x67\x68\x74\x52\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x53\x74\x61\x74\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x6e\x61\x6d\x65\x3a\x20\x22\x6d\x69\x64\
+\x64\x6c\x65\x52\x69\x67\x68\x74\x22\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x50\x72\x6f\x70\x65\x72\x74\x79\x43\x68\
+\x61\x6e\x67\x65\x73\x20\x7b\x20\x74\x61\x72\x67\x65\x74\x3a\x20\
+\x75\x73\x65\x72\x49\x63\x6f\x6e\x3b\x20\x78\x3a\x20\x6d\x69\x64\
+\x64\x6c\x65\x52\x69\x67\x68\x74\x52\x65\x63\x74\x2e\x78\x3b\x20\
+\x79\x3a\x20\x6d\x69\x64\x64\x6c\x65\x52\x69\x67\x68\x74\x52\x65\
+\x63\x74\x2e\x79\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\
+\x2c\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x49\x6e\
+\x20\x73\x74\x61\x74\x65\x20\x27\x62\x6f\x74\x74\x6f\x6d\x4c\x65\
+\x66\x74\x27\x2c\x20\x6d\x6f\x76\x65\x20\x74\x68\x65\x20\x69\x6d\
+\x61\x67\x65\x20\x74\x6f\x20\x62\x6f\x74\x74\x6f\x6d\x4c\x65\x66\
+\x74\x52\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x53\x74\
+\x61\x74\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x6e\x61\x6d\x65\x3a\x20\x22\x62\x6f\x74\x74\x6f\x6d\x4c\
+\x65\x66\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x50\x72\x6f\x70\x65\x72\x74\x79\x43\x68\x61\x6e\x67\x65\x73\
+\x20\x7b\x20\x74\x61\x72\x67\x65\x74\x3a\x20\x75\x73\x65\x72\x49\
+\x63\x6f\x6e\x3b\x20\x78\x3a\x20\x62\x6f\x74\x74\x6f\x6d\x4c\x65\
+\x66\x74\x52\x65\x63\x74\x2e\x78\x3b\x20\x79\x3a\x20\x62\x6f\x74\
+\x74\x6f\x6d\x4c\x65\x66\x74\x52\x65\x63\x74\x2e\x79\x20\x20\x7d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x2f\x2f\x20\x21\x5b\x30\x5d\x0a\x20\x20\x20\x20\x5d\
+\x0a\x7d\x0a\
+\x00\x00\x08\xe9\
+\x00\
+\x00\x20\xce\x78\x9c\xe5\x59\x51\x73\xda\xb8\x16\x7e\xe7\x57\x9c\
+\xc9\xed\x4c\x9b\x1d\x4a\xd2\x24\xed\x76\x61\xfa\x60\x8c\x43\x3c\
+\x03\x98\xd8\xa6\xb9\x99\x9d\x9d\x1d\x61\x04\xe8\xc6\x58\x54\x96\
+\x93\x72\x3b\xfd\xef\x7b\x24\xdb\x04\x1b\xbb\x1b\xdf\xd9\x3e\x5d\
+\xc8\x10\x7c\x24\x7d\xe7\x3b\x9f\xce\x91\x84\x7d\xf6\xcb\x3f\xf8\
+\x6a\xe9\x3f\x30\xf9\x76\x27\xd8\x6a\x2d\xe1\x8d\x79\x0a\x17\xe7\
+\xef\x2e\x61\xc0\x56\x8c\xc0\x34\x0c\x80\x44\x8b\x33\x2e\x80\xc9\
+\x18\xe2\x64\x1e\xb3\x05\x23\x62\xf7\xe6\x2d\xa3\xf1\x69\x27\x1d\
+\x1c\x49\x12\xc8\x2e\xac\xa5\xdc\x76\xcf\xce\x9e\x9e\x9e\x3a\x5f\
+\xe4\xdb\xad\xe0\xff\xa1\x81\xec\x70\xb1\x3a\x0b\xe9\x8a\x84\x99\
+\x2f\x7f\xcd\x62\x58\xb2\x90\x02\xfe\xdf\x12\x21\x81\x2f\x41\xae\
+\x29\xd0\xaf\x64\xb3\x0d\x69\x9c\x5f\xdf\x4a\xf0\x39\x0f\x1f\x98\
+\xec\x64\x43\x5f\xdd\xfa\x7f\xf6\xad\xa1\x3d\xf9\x73\x64\x9b\xd6\
+\xc4\xb3\xba\x7d\x6f\xf0\x4a\xb5\xdc\xf3\x04\x36\x64\x07\x49\x4c\
+\x71\x6c\xee\x20\x89\x16\x54\x68\x2c\x49\xc5\x66\x0f\x8c\x83\x20\
+\x64\x01\x8d\xb0\x33\xc1\xae\x3c\x0c\xf9\x53\xdc\xcd\x9c\x9c\xb8\
+\x74\xc1\x62\x29\xd8\x3c\x91\x8c\x47\x2a\x7c\x0d\xcb\x22\x88\x79\
+\x22\x02\xaa\x2d\x73\x16\xa1\x0a\x38\x16\x71\xdb\xf0\xc4\xe4\x1a\
+\x50\x23\xf5\x9f\x27\x52\xc1\x6c\xf8\x82\x2d\x59\x40\x14\x46\x1b\
+\x88\xa0\xb0\x45\x0e\x4c\x4a\xba\x00\x94\xe6\x91\x2d\xf0\x8b\x5c\
+\x13\xa9\x29\xa5\x1c\x58\xb4\x82\x80\x47\x0b\xa6\x06\xc5\x6a\x90\
+\x46\xa2\x52\x71\x03\x80\x5f\xa0\xc8\x4d\x47\x94\x91\x0a\xf8\x82\
+\xc2\x26\x89\x25\x08\x2a\x09\x92\x55\xb0\x64\xce\x1f\x55\x53\x36\
+\xbb\x29\x0a\x40\xc4\x25\x86\xdf\x4e\x95\x0a\x11\x50\xe1\x1c\x3a\
+\x8e\x16\x25\x56\xe8\x35\x08\x09\xdb\x50\xd1\xa9\xa3\x82\x2e\x0f\
+\x44\xc9\xa9\x60\xa8\x8b\x24\xa0\x3f\x8b\x0d\x7a\xcd\x61\x54\x97\
+\x05\x0f\x92\x0d\xc5\x74\xcc\x67\x4e\x25\x2e\xc7\x16\x81\xd9\x81\
+\x39\xc0\x48\x18\x3f\xab\xaf\x67\x0d\x1b\x73\x84\xc3\x78\xf6\x61\
+\x4e\x28\xd3\xe3\x15\x7c\x44\x36\x54\x91\x2b\xd4\x86\x2e\x0c\xaf\
+\x54\x18\x18\xd4\xf3\x90\x38\x77\x80\x43\x55\x67\x8c\x2d\xf5\xc3\
+\x45\xac\xb3\x76\x4e\x55\x86\x61\x94\x1c\x68\xb4\x40\x2b\x55\xc9\
+\x84\x3c\x37\x5c\x52\x48\x25\xc4\x71\x98\xcc\xec\x91\x2e\x72\xb4\
+\x25\xb6\xa7\xa2\xc5\x7c\x29\x9f\x54\x8a\x65\xf9\x07\xf1\x96\x06\
+\x2a\xfb\x70\x2c\x53\x69\x29\x54\xde\x45\x69\x06\xc6\x71\x16\x5e\
+\x5e\x8f\x37\xb6\x07\x9e\x73\xed\xdf\x19\xae\x05\xf8\x7d\xea\x3a\
+\x9f\xed\x81\x35\x80\xfe\x3d\x36\x5a\x60\x3a\xd3\x7b\xd7\x1e\xde\
+\xf8\x70\xe3\x8c\x06\x96\xeb\x81\x31\x19\xa0\x75\xe2\xbb\x76\x7f\
+\xe6\x3b\xae\xa7\xcb\xc6\xf0\x70\xf0\x89\x6e\x33\x26\xf7\x60\xfd\
+\x7b\xea\x5a\x9e\x07\x8e\x0b\xf6\x78\x3a\xb2\x11\x0f\x1d\xb8\xc6\
+\xc4\xb7\x2d\xaf\x0d\xf6\xc4\x1c\xcd\x06\xf6\x64\xd8\x06\xc4\x80\
+\x89\xe3\x2b\x90\x91\x3d\xb6\x7d\xec\xe9\x3b\x6d\xed\xfa\x78\x24\
+\x38\xd7\x30\xb6\x5c\xf3\x06\x2f\x8d\xbe\x3d\xb2\xfd\x7b\xed\xf2\
+\xda\xf6\x27\xca\xdd\xb5\xe3\x2a\x20\x03\xa6\x86\xeb\xdb\xe6\x6c\
+\x64\xb8\x30\x9d\xb9\x53\xc7\xb3\x40\xc5\x37\xb0\x3d\x73\x64\xd8\
+\x63\x6b\xd0\x41\x0e\xe8\x17\xac\xcf\xd6\xc4\x07\xef\xc6\x18\x8d\
+\x8a\xe1\x2a\x1c\xe7\x6e\x62\xb9\x2a\x86\xc3\x70\xa1\x6f\x21\x53\
+\xa3\x3f\xb2\x94\x3b\x1d\xed\xc0\x76\x2d\xd3\x57\x61\x3d\x7f\x33\
+\x51\x44\x24\x39\x6a\x2b\x20\x6f\x6a\x99\x36\x7e\x47\x5d\x2c\x0c\
+\xca\x70\xef\xdb\x19\xac\x67\xdd\xce\xb0\x1f\x36\xc2\xc0\x18\x1b\
+\x43\x8c\xf1\xcd\xdf\xab\x83\x93\x64\xce\x5c\x6b\xac\xb8\xa3\x24\
+\xde\xac\xef\xf9\xb6\x3f\xf3\x2d\x18\x3a\xce\x40\xcb\xee\x59\xee\
+\x67\x5c\x26\xbd\x1e\x8c\x1c\x4f\x0b\x37\xf3\x2c\x4d\x66\x60\xf8\
+\x86\x76\x8f\x28\x28\x1c\xf6\xc0\xef\xfd\x99\x67\x6b\x09\xed\x89\
+\x6f\xb9\xee\x6c\xea\xdb\xce\xe4\x14\xe7\xfc\x0e\x15\x42\xa6\x06\
+\x8e\x1e\x68\xad\x9d\x89\x8a\x39\xcd\x1d\xcb\x71\xef\x15\xb4\xd2\
+\x43\xcf\x46\x1b\xee\x6e\x2c\xb4\xbb\x4a\x5e\xad\x9a\xa1\xe4\xf0\
+\x50\x3d\xd3\x3f\xec\x86\x2e\x51\x4c\x1d\xd8\x73\xbc\x30\xb1\x86\
+\x23\x7b\x68\x4d\x4c\x4b\x75\x70\x14\xd0\x9d\xed\x59\xa7\x38\x79\
+\xb6\xa7\x3a\xd8\xda\x39\x66\x04\xba\x9d\xe9\xd8\xd5\xa4\x21\x37\
+\x3d\x5d\xd7\xc5\x74\x6e\xeb\xd9\x05\xfb\x1a\x8c\xc1\x67\x5b\xf1\
+\xcf\xfa\x63\x3e\x78\x76\x96\x3e\x5a\x3e\xf3\x26\x53\xbf\x73\x72\
+\xb0\xd9\x58\x93\x41\xbe\xd5\xbc\x4a\xcd\xff\xdc\xeb\xac\xd5\x62\
+\x9b\x2d\xc7\xfd\xef\x56\xde\x26\x2c\x78\x80\x8b\xce\x79\xab\xe5\
+\xe2\x9e\x49\xa2\x15\xee\x5e\xdf\x5a\xaa\xca\xd9\xa2\x8b\x65\x8d\
+\xab\xc2\x93\xbe\x7c\x62\x0b\xb9\xee\xc2\xe5\xc5\x79\x0f\xd6\x54\
+\x2d\xa3\x5d\xb8\xfa\x88\x17\x01\x0f\xb9\xe8\xc2\xc9\xbf\x2e\x2e\
+\xd5\xfb\xa4\xa5\xbb\xe3\xda\x81\x45\x2f\x77\xf0\x48\x04\x50\x12\
+\xe3\xea\x69\x26\xe2\x91\x76\xe1\x77\x38\xef\x5c\xb4\xf3\x8f\x77\
+\x97\xea\xf3\xc3\xfb\xbd\xe1\x63\x5b\x8f\xff\xd1\x0b\xfb\x5f\x5c\
+\xa9\xbe\xbf\x7d\xd4\x9f\x1a\xe2\x37\x84\x78\x87\x7f\xf0\x47\x4a\
+\x60\x84\x6b\xea\x18\xb7\xa6\x30\x0b\x27\x0f\x29\xe5\xe2\xef\xb6\
+\xb8\x3a\xe6\x76\xd5\xd7\x0a\xa9\x5a\xc0\xe1\x9b\x5e\x39\x31\x1e\
+\x4b\x77\xec\x8c\x58\x44\x89\x38\xe9\x81\xc4\x21\x5d\x28\x58\x7b\
+\x30\x27\x61\x68\x66\x02\x0c\x88\x78\xc0\xbd\xe9\x04\xbe\xbf\x08\
+\xd8\x8e\x6e\x13\xb2\x28\x03\xa7\xd6\x22\xb0\x8d\x3b\x12\x89\x1a\
+\x40\x3b\x89\xac\xc2\xce\xcc\x45\x70\x8f\x84\x1b\x1e\xbd\x9c\x74\
+\x0d\xf6\xbe\xa1\x88\xee\x73\xdc\xfe\x78\x03\xde\xd5\xaa\xec\x1b\
+\x8e\x15\x77\x04\x26\x2d\x7d\x39\x7f\x33\x99\xb3\xe0\x98\xbd\x36\
+\x17\xd1\x87\x3c\x6c\xa2\x78\x25\x70\x6e\x2f\x22\xdf\x53\x75\xa0\
+\x68\xa4\x79\x0d\xed\x6a\xfc\x29\x25\xc1\x7a\x9a\x2c\x97\x8d\x84\
+\xaf\x0b\xa0\x52\x1c\x75\x98\x96\x61\x03\xdd\x71\xf6\x84\xac\xcc\
+\x76\x21\x8b\xd0\x8e\x08\xd6\xac\x61\xae\x1f\x43\xe7\xf6\x92\x32\
+\x89\xd8\x36\x61\x5d\x87\xfe\xdc\x52\xaa\xa6\x10\x4f\x7b\xfd\x30\
+\x79\xb1\x8b\x3c\xb3\x2b\x03\xa8\x94\xc7\x5c\xa3\x49\x50\x3c\xb7\
+\x35\x11\x9f\x45\x95\xe2\xa3\xb9\x88\x3e\xc2\xc3\xed\x50\x50\xfa\
+\xe2\x15\x41\xeb\x50\x81\x9e\xdb\x4b\xfa\x50\xd2\x08\x3d\xd3\xb9\
+\x92\x7d\xb5\x07\xb5\x26\x34\x0d\xa0\x46\xa0\xe7\x96\x52\x82\x86\
+\x78\x1a\x7e\x79\x04\x1e\xee\x15\xc7\xec\x95\xf5\x98\x79\x53\x7d\
+\x90\x62\x15\x7c\x66\x2e\x95\x2c\x25\x61\x23\xdd\xab\x89\x57\x63\
+\x27\xe2\x4b\xc2\xd9\xcb\x73\x52\x6b\x5b\x43\xbd\x4a\x1c\x4f\x52\
+\x1a\x36\x29\x2c\x3b\xb2\xbe\x6e\xf9\x31\x7d\x65\x2d\x41\x3f\xec\
+\x1a\x56\x6c\x15\x72\x66\x2e\x42\xbb\x7c\x47\x1a\xb2\xae\x81\xdf\
+\x37\x14\x1d\x8c\xf1\xb7\x70\xb2\x69\xbc\xe0\xd4\x04\x50\xa5\xce\
+\x98\x2d\x22\x75\xda\x6b\x16\x85\xc9\x44\xd5\x26\x8b\xd6\xd2\x62\
+\xc6\x05\x4e\x76\xf8\xd0\x64\x9f\xad\x80\xce\xcc\x45\xec\x3e\x8b\
+\xbf\x34\x54\xbe\x9a\x76\x25\xba\xcb\xe3\x5d\x5f\xf0\xa7\x66\xeb\
+\x4c\x0d\xf9\x2a\x69\x3c\xfc\x89\xdf\xcc\x03\x4e\x5f\x48\x62\x59\
+\x75\x4e\xc8\x1a\x2a\x96\x4a\x3c\xe4\xd0\xc8\xe5\x4d\xf6\xdb\x1a\
+\x2f\xcf\x2d\xe5\x0d\x8b\xe3\x6f\x04\xdc\x17\x9b\x15\x41\x5d\x28\
+\x75\x6e\x3c\xb2\x58\x84\xb4\xf9\x94\xd4\x47\x53\x23\x5b\xc3\x39\
+\xe9\x93\xe0\xe1\x38\x0a\x65\x2d\x15\x1a\x11\xfc\xe5\x07\x71\xa4\
+\x57\x05\x9c\x99\x4b\x7b\x3a\x79\xa4\xea\x86\x24\x96\x70\xbc\x6e\
+\x34\x09\xd5\xdc\x2b\x9d\x8c\x11\x6b\x87\x45\xd1\x6c\x21\xaa\x89\
+\xa1\x4a\x9f\x21\x61\x51\x3c\xe7\xa2\xc9\xaf\x89\x3e\x4f\xa2\xa0\
+\x6a\x8b\x49\x1b\x4a\x09\xc4\xc2\x47\x2a\x1a\x4c\x6c\x25\x78\x6e\
+\x2f\x95\x1a\xdb\x0c\x05\xd9\x35\x13\xbf\x06\xbf\x8e\xbe\x2a\xb1\
+\x26\x4e\x52\x9d\xeb\x14\xaa\x89\x43\x9d\x51\x9a\x3a\xea\xd3\xff\
+\x32\x7a\xf4\x13\x3a\xb5\xd6\x9e\x6d\x7b\x19\xf8\xf7\xf4\xe7\xbc\
+\xc9\x37\x5b\x1e\x69\xf4\xc2\xcf\x79\xfc\x81\x4f\x57\xc8\xa7\xb5\
+\xb7\xda\x92\x6e\x0e\x3a\xa9\x57\x7e\xbf\xe2\xfd\x87\x5e\x7e\x1f\
+\x23\xbd\xb3\xd1\xd1\x57\xad\x42\x67\x9f\x7e\x55\x21\x48\xfc\xd7\
+\xd5\x81\xf4\x80\x44\xc1\x9a\x8b\xb8\x13\xa0\x7f\x2a\xec\xa8\xab\
+\x1e\x1f\x50\x75\x2c\xcc\x6f\x7e\xdc\xad\x59\xba\xbe\x15\xa0\xca\
+\xb7\x54\x0e\x5f\x8a\x7c\x1c\x72\xf9\xee\xe0\x0e\xca\xbb\x0b\xf5\
+\xc6\xd0\xbf\x76\xe1\xf2\xf0\x3e\xcb\x33\xef\xab\x0f\x47\x48\x58\
+\x13\x58\xdc\x9d\x3d\xca\xe5\x95\x7a\x23\x4a\xd6\x90\x8d\x44\x47\
+\x82\xe0\x69\x21\xc6\xaf\x17\x2a\x26\xc9\x48\xc8\xf4\x5c\x74\x41\
+\x8a\x84\x1e\x01\xe7\x61\x63\x55\xe0\x22\x48\x42\x53\x87\x9f\x07\
+\x5f\x32\x17\x46\xff\x0f\x3a\x5c\xd4\xe8\x70\x38\x51\xf0\x16\x7e\
+\xfd\xf0\xff\x23\x8b\xc0\xf6\x7d\x2e\xec\xe3\xb8\x7a\xaf\xde\x27\
+\x7f\x17\x6f\x9a\x91\xe5\x68\x2f\x8e\x86\x55\x8a\xf9\x93\x35\x39\
+\x1a\x3e\xe6\x58\xf2\x86\xa0\xa4\x42\x09\xf5\xe2\x91\x19\xb2\xe0\
+\x81\xa2\x28\x6c\x09\x6f\x94\x30\x9d\x58\x62\xd9\xc3\xa7\x4f\xf0\
+\xfa\xf5\x29\x1c\x5a\xe0\x44\x3f\xe5\xc1\xd8\x69\x18\xd3\x62\xd3\
+\xeb\xd7\x95\xf8\x39\xfd\x25\x0b\xc3\x9c\xf4\x0f\x3b\x6e\x88\x58\
+\xe1\x76\xd4\x85\xb7\xef\xe1\xec\x0c\xc6\xe4\x81\x1e\x04\x31\x67\
+\xab\x95\x7e\x72\x43\xd2\xa7\x61\x22\x9f\xe8\xb6\x7a\x0c\x43\xc3\
+\xe5\x11\xf6\xf7\x63\x4d\x34\xe5\x18\xba\xe0\x69\xee\xd5\xc2\x64\
+\x0b\x6d\x1a\x70\x65\x8f\x69\x76\x23\x16\x97\xd6\x68\x85\x78\xb8\
+\xb2\x21\x77\x2a\x0f\xd2\xab\xa2\xc4\xb2\x2c\xda\xaf\xcd\x07\x2b\
+\xfd\x0f\x28\x4b\x41\xa2\x38\x7d\x78\xd6\x05\x7f\x7f\x51\xc3\x7d\
+\x92\x6c\xe6\x54\x18\x11\xdb\xa4\x4f\xcd\xbe\xe5\x37\x8d\x19\xc5\
+\xe1\x27\x5f\xd5\x04\xa6\x5b\x45\xba\x6f\xa8\xcf\xbd\x69\xae\x77\
+\x8f\xec\x96\x32\x86\xd3\x7f\xbe\x7e\xa3\x44\x39\xed\xc1\x22\x11\
+\x1a\x18\x93\xf8\xfc\xfc\xbc\x22\x02\xf5\xd2\xd1\xd5\x72\xd0\x32\
+\xfc\x74\x1e\xdf\x5b\xd5\x57\x85\x0d\xf0\x5a\x15\x00\x99\x17\x16\
+\x8b\x1f\xa6\xad\x7a\xd8\x87\xd7\x37\x59\x7d\x87\x64\xc7\x13\xd9\
+\x49\xcb\x7d\xdf\x09\xc3\x4f\x36\xe5\x09\x52\x6b\x4f\xda\xbd\xb4\
+\x5c\x6d\xa9\x7a\x96\x89\x22\x6d\xd4\x8d\xf5\xc2\xbd\xf4\xde\x7e\
+\x27\x7e\xde\x93\xeb\x42\x59\xe2\xb9\x42\xab\x5d\xa5\x97\xee\x71\
+\xb0\xc7\x63\xb9\xeb\xa7\x9f\x9f\xb0\xd2\x4b\x07\x8a\xd3\x02\x3d\
+\x41\x65\x22\xa2\xc3\x67\x0d\xbd\x56\xa9\xed\xf7\x3f\x7a\x19\x8f\
+\xef\xad\xbf\x00\x85\x55\xe9\x23\
+"
+
+qt_resource_name = b"\
+\x00\x09\
+\x00\x38\x80\xfe\
+\x00\x61\
+\x00\x6e\x00\x69\x00\x6d\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\
+\x00\x06\
+\x06\xb8\xa0\x47\
+\x00\x65\
+\x00\x61\x00\x73\x00\x69\x00\x6e\x00\x67\
+\x00\x0d\
+\x01\x01\x29\x3c\
+\x00\x61\
+\x00\x6e\x00\x69\x00\x6d\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x06\
+\x07\xaa\x8a\xc3\
+\x00\x73\
+\x00\x74\x00\x61\x00\x74\x00\x65\x00\x73\
+\x00\x0d\
+\x05\x2d\x81\x1e\
+\x00\x70\
+\x00\x61\x00\x74\x00\x68\x00\x61\x00\x6e\x00\x69\x00\x6d\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\
+\x00\x09\
+\x0e\x8c\x57\xf3\
+\x00\x62\
+\x00\x65\x00\x68\x00\x61\x00\x76\x00\x69\x00\x6f\x00\x72\x00\x73\
+\x00\x06\
+\x06\x88\x9f\xa3\
+\x00\x62\
+\x00\x61\x00\x73\x00\x69\x00\x63\x00\x73\
+\x00\x10\
+\x09\x74\x70\xe2\
+\x00\x70\
+\x00\x61\x00\x74\x00\x68\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x70\x00\x6f\x00\x6c\x00\x61\x00\x74\x00\x6f\x00\x72\
+\x00\x14\
+\x00\xf7\xc0\xdc\
+\x00\x70\
+\x00\x61\x00\x74\x00\x68\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x70\x00\x6f\x00\x6c\x00\x61\x00\x74\x00\x6f\x00\x72\x00\x2e\
+\x00\x71\x00\x6d\x00\x6c\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x16\
+\x07\xe4\x0e\x9c\
+\x00\x70\
+\x00\x72\x00\x6f\x00\x70\x00\x65\x00\x72\x00\x74\x00\x79\x00\x2d\x00\x61\x00\x6e\x00\x69\x00\x6d\x00\x61\x00\x74\x00\x69\x00\x6f\
+\x00\x6e\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x13\
+\x09\x74\xb2\xfc\
+\x00\x63\
+\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2d\x00\x61\x00\x6e\x00\x69\x00\x6d\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x2e\x00\x71\
+\x00\x6d\x00\x6c\
+\x00\x0a\
+\x0b\x69\x6b\xa7\
+\x00\x73\
+\x00\x68\x00\x61\x00\x64\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x06\x61\x59\xc7\
+\x00\x6d\
+\x00\x6f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x07\
+\x0a\xc1\x57\xa7\
+\x00\x73\
+\x00\x75\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x0a\x85\x58\x07\
+\x00\x73\
+\x00\x74\x00\x61\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x03\x18\xd8\x27\
+\x00\x66\
+\x00\x61\x00\x63\x00\x65\x00\x2d\x00\x73\x00\x6d\x00\x69\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x00\x98\x05\x3c\
+\x00\x53\
+\x00\x69\x00\x64\x00\x65\x00\x52\x00\x65\x00\x63\x00\x74\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0c\
+\x0a\x81\x10\x9c\
+\x00\x74\
+\x00\x76\x00\x74\x00\x65\x00\x6e\x00\x6e\x00\x69\x00\x73\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0e\
+\x03\x4b\xca\x1c\
+\x00\x77\
+\x00\x69\x00\x67\x00\x67\x00\x6c\x00\x79\x00\x74\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x14\
+\x02\xfe\x8d\x7c\
+\x00\x62\
+\x00\x65\x00\x68\x00\x61\x00\x76\x00\x69\x00\x6f\x00\x72\x00\x2d\x00\x65\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x2e\
+\x00\x71\x00\x6d\x00\x6c\
+\x00\x11\
+\x01\x2b\x0f\x3c\
+\x00\x70\
+\x00\x61\x00\x74\x00\x68\x00\x61\x00\x6e\x00\x69\x00\x6d\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\
+\x00\x0f\
+\x06\xe3\xac\x1c\
+\x00\x74\
+\x00\x72\x00\x61\x00\x6e\x00\x73\x00\x69\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x73\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0b\
+\x05\x52\xbf\x27\
+\x00\x71\
+\x00\x74\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x0a\xcd\x05\x3c\
+\x00\x73\
+\x00\x74\x00\x61\x00\x74\x00\x65\x00\x73\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0a\
+\x00\x47\x29\x7c\
+\x00\x65\
+\x00\x61\x00\x73\x00\x69\x00\x6e\x00\x67\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x02\
+\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x5c\x00\x02\x00\x00\x00\x01\x00\x00\x00\x1a\
+\x00\x00\x00\x94\x00\x02\x00\x00\x00\x03\x00\x00\x00\x12\
+\x00\x00\x00\x18\x00\x02\x00\x00\x00\x01\x00\x00\x00\x11\
+\x00\x00\x00\x4a\x00\x02\x00\x00\x00\x03\x00\x00\x00\x0e\
+\x00\x00\x00\xa6\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0d\
+\x00\x00\x00\x7c\x00\x02\x00\x00\x00\x04\x00\x00\x00\x09\
+\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x00\xa7\xa3\
+\x00\x00\x02\x44\x00\x00\x00\x00\x00\x01\x00\x00\xd2\x22\
+\x00\x00\x02\x22\x00\x00\x00\x00\x00\x01\x00\x00\xc2\x24\
+\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\xb1\x08\
+\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x2f\
+\x00\x00\x02\xbe\x00\x00\x00\x00\x00\x01\x00\x01\x04\x1d\
+\x00\x00\x02\x9a\x00\x00\x00\x00\x00\x01\x00\x00\xf0\xd5\
+\x00\x00\x02\xda\x00\x00\x00\x00\x00\x01\x00\x01\x18\x3e\
+\x00\x00\x02\xf4\x00\x01\x00\x00\x00\x01\x00\x01\x27\x66\
+\x00\x00\x00\xfa\x00\x02\x00\x00\x00\x05\x00\x00\x00\x15\
+\x00\x00\x01\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x3f\
+\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x9e\
+\x00\x00\x01\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x6b\x6f\
+\x00\x00\x01\x84\x00\x00\x00\x00\x00\x01\x00\x00\x40\xac\
+\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x6a\x0e\
+\x00\x00\x01\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x4a\x31\
+\x00\x00\x01\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xff\
+\x00\x00\x02\x72\x00\x00\x00\x00\x00\x01\x00\x00\xe3\x82\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/quick/animation/basics/color-animation.qml b/examples/quick/animation/basics/color-animation.qml
new file mode 100644
index 0000000..0de4177
--- /dev/null
+++ b/examples/quick/animation/basics/color-animation.qml
@@ -0,0 +1,123 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+
+Item {
+    id: window
+    width: 320; height: 480
+
+    // Let's draw the sky...
+    Rectangle {
+        anchors { left: parent.left; top: parent.top; right: parent.right; bottom: parent.verticalCenter }
+        //! [0]
+        gradient: Gradient {
+            GradientStop {
+                position: 0.0
+                SequentialAnimation on color {
+                    loops: Animation.Infinite
+                    ColorAnimation { from: "DeepSkyBlue"; to: "#0E1533"; duration: 5000 }
+                    ColorAnimation { from: "#0E1533"; to: "DeepSkyBlue"; duration: 5000 }
+                }
+            }
+            GradientStop {
+                position: 1.0
+                SequentialAnimation on color {
+                    loops: Animation.Infinite
+                    ColorAnimation { from: "SkyBlue"; to: "#437284"; duration: 5000 }
+                    ColorAnimation { from: "#437284"; to: "SkyBlue"; duration: 5000 }
+                }
+            }
+        }
+        //! [0]
+    }
+
+    // the sun, moon, and stars
+    Item {
+        width: parent.width; height: 2 * parent.height
+        NumberAnimation on rotation { from: 0; to: 360; duration: 10000; loops: Animation.Infinite }
+        Image {
+            source: "images/sun.png"; y: 10; anchors.horizontalCenter: parent.horizontalCenter
+            rotation: -3 * parent.rotation
+        }
+        Image {
+            source: "images/moon.png"; y: parent.height - 74; anchors.horizontalCenter: parent.horizontalCenter
+            rotation: -parent.rotation
+        }
+        ParticleSystem {
+            id: particlesystem
+            x: 0; y: parent.height/2
+            width: parent.width; height: parent.height/2
+            ImageParticle {
+                source: "images/star.png"
+                groups: ["star"]
+                color: "#00333333"
+                SequentialAnimation on opacity {
+                    loops: Animation.Infinite
+                    NumberAnimation { from: 0; to: 1; duration: 5000 }
+                    NumberAnimation { from: 1; to: 0; duration: 5000 }
+                }
+            }
+            Emitter {
+                group: "star"
+                anchors.fill: parent
+                emitRate: parent.width / 50
+                lifeSpan: 5000
+            }
+        }
+    }
+
+    // ...and the ground.
+    Rectangle {
+        anchors { left: parent.left; top: parent.verticalCenter; right: parent.right; bottom: parent.bottom }
+        gradient: Gradient {
+            GradientStop {
+                position: 0.0
+                SequentialAnimation on color {
+                    loops: Animation.Infinite
+                    ColorAnimation { from: "ForestGreen"; to: "#001600"; duration: 5000 }
+                    ColorAnimation { from: "#001600"; to: "ForestGreen"; duration: 5000 }
+                }
+            }
+            GradientStop { position: 1.0; color: "DarkGreen" }
+        }
+    }
+}
diff --git a/examples/quick/animation/basics/images/face-smile.png b/examples/quick/animation/basics/images/face-smile.png
new file mode 100644
index 0000000..3d66d72
Binary files /dev/null and b/examples/quick/animation/basics/images/face-smile.png differ
diff --git a/examples/quick/animation/basics/images/moon.png b/examples/quick/animation/basics/images/moon.png
new file mode 100644
index 0000000..9407b2b
Binary files /dev/null and b/examples/quick/animation/basics/images/moon.png differ
diff --git a/examples/quick/animation/basics/images/shadow.png b/examples/quick/animation/basics/images/shadow.png
new file mode 100644
index 0000000..8270565
Binary files /dev/null and b/examples/quick/animation/basics/images/shadow.png differ
diff --git a/examples/quick/animation/basics/images/star.png b/examples/quick/animation/basics/images/star.png
new file mode 100644
index 0000000..27ef924
Binary files /dev/null and b/examples/quick/animation/basics/images/star.png differ
diff --git a/examples/quick/animation/basics/images/sun.png b/examples/quick/animation/basics/images/sun.png
new file mode 100644
index 0000000..7713ca5
Binary files /dev/null and b/examples/quick/animation/basics/images/sun.png differ
diff --git a/examples/quick/animation/basics/property-animation.qml b/examples/quick/animation/basics/property-animation.qml
new file mode 100644
index 0000000..ae808ba
--- /dev/null
+++ b/examples/quick/animation/basics/property-animation.qml
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+    id: window
+    width: 320; height: 480
+
+    // Let's draw the sky...
+    Rectangle {
+        anchors { left: parent.left; top: parent.top; right: parent.right; bottom: parent.verticalCenter }
+        gradient: Gradient {
+            GradientStop { position: 0.0; color: "DeepSkyBlue" }
+            GradientStop { position: 1.0; color: "LightSkyBlue" }
+        }
+    }
+
+    // ...and the ground.
+    Rectangle {
+        anchors { left: parent.left; top: parent.verticalCenter; right: parent.right; bottom: parent.bottom }
+        gradient: Gradient {
+            GradientStop { position: 0.0; color: "ForestGreen" }
+            GradientStop { position: 1.0; color: "DarkGreen" }
+        }
+    }
+
+    // The shadow for the smiley face
+    Image {
+        anchors.horizontalCenter: parent.horizontalCenter
+        y: smiley.minHeight + 58
+        source: "images/shadow.png"
+
+        // The scale property depends on the y position of the smiley face.
+        scale: smiley.y * 0.5 / (smiley.minHeight - smiley.maxHeight)
+    }
+
+    Image {
+        id: smiley
+        property int maxHeight: window.height / 3
+        property int minHeight: 2 * window.height / 3
+
+        anchors.horizontalCenter: parent.horizontalCenter
+        y: minHeight
+        source: "images/face-smile.png"
+
+        //! [0]
+        // Animate the y property. Setting loops to Animation.Infinite makes the
+        // animation repeat indefinitely, otherwise it would only run once.
+        SequentialAnimation on y {
+            loops: Animation.Infinite
+
+            // Move from minHeight to maxHeight in 300ms, using the OutExpo easing function
+            NumberAnimation {
+                from: smiley.minHeight; to: smiley.maxHeight
+                easing.type: Easing.OutExpo; duration: 300
+            }
+
+            // Then move back to minHeight in 1 second, using the OutBounce easing function
+            NumberAnimation {
+                from: smiley.maxHeight; to: smiley.minHeight
+                easing.type: Easing.OutBounce; duration: 1000
+            }
+
+            // Then pause for 500ms
+            PauseAnimation { duration: 500 }
+        }
+        //! [0]
+    }
+}
diff --git a/examples/quick/animation/behaviors/SideRect.qml b/examples/quick/animation/behaviors/SideRect.qml
new file mode 100644
index 0000000..be7dad3
--- /dev/null
+++ b/examples/quick/animation/behaviors/SideRect.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+    id: myRect
+
+    property string text
+
+    width: 75; height: 50
+    radius: 6
+    color: "#646464"
+    border.width: 4; border.color: "white"
+
+    MouseArea {
+        anchors.fill: parent
+        hoverEnabled: true
+        onEntered: {
+            focusRect.x = myRect.x; 
+            focusRect.y = myRect.y; 
+            focusRect.text = myRect.text;
+        }
+    }
+}
diff --git a/examples/quick/animation/behaviors/behavior-example.qml b/examples/quick/animation/behaviors/behavior-example.qml
new file mode 100644
index 0000000..4c41c1c
--- /dev/null
+++ b/examples/quick/animation/behaviors/behavior-example.qml
@@ -0,0 +1,120 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+    width: 320; height: 480
+    color: "#343434"
+
+    Rectangle {
+        anchors.centerIn: parent
+        width: 200; height: 200
+        radius: 30
+        color: "transparent"
+        border.width: 4; border.color: "white"
+
+
+        SideRect {
+            id: leftRect
+            anchors { verticalCenter: parent.verticalCenter; horizontalCenter: parent.left }
+            text: "Left"
+        }
+
+        SideRect {
+            id: rightRect
+            anchors { verticalCenter: parent.verticalCenter; horizontalCenter: parent.right }
+            text: "Right"
+        }
+
+        SideRect {
+            id: topRect
+            anchors { verticalCenter: parent.top; horizontalCenter: parent.horizontalCenter }
+            text: "Top"
+        }
+
+        SideRect {
+            id: bottomRect
+            anchors { verticalCenter: parent.bottom; horizontalCenter: parent.horizontalCenter }
+            text: "Bottom"
+        }
+
+
+        Rectangle {
+            id: focusRect
+
+            property string text
+
+            x: 62; y: 75; width: 75; height: 50
+            radius: 6
+            border.width: 4; border.color: "white"
+            color: "firebrick"
+
+            // Set an 'elastic' behavior on the focusRect's x property.
+            Behavior on x {
+                NumberAnimation { easing.type: Easing.OutElastic; easing.amplitude: 3.0; easing.period: 2.0; duration: 300 }
+            }
+
+            //! [0]
+            // Set an 'elastic' behavior on the focusRect's y property.
+            Behavior on y {
+                NumberAnimation { easing.type: Easing.OutElastic; easing.amplitude: 3.0; easing.period: 2.0; duration: 300 }
+            }
+            //! [0]
+
+            Text {
+                id: focusText
+                text: focusRect.text
+                anchors.centerIn: parent
+                color: "white"
+                font.pixelSize: 16; font.bold: true
+
+                // Set a behavior on the focusText's x property:
+                // Set the opacity to 0, set the new text value, then set the opacity back to 1.
+                Behavior on text {
+                    SequentialAnimation {
+                        NumberAnimation { target: focusText; property: "opacity"; to: 0; duration: 150 }
+                        NumberAnimation { target: focusText; property: "opacity"; to: 1; duration: 150 }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/examples/quick/animation/behaviors/tvtennis.qml b/examples/quick/animation/behaviors/tvtennis.qml
new file mode 100644
index 0000000..4ca909c
--- /dev/null
+++ b/examples/quick/animation/behaviors/tvtennis.qml
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+    id: page
+    width: 320; height: 480;
+    color: "Black"
+
+    // Make a ball to bounce
+    Rectangle {
+        id: ball
+
+        // Add a property for the target y coordinate
+        property variant direction : "right"
+
+        x: 20; width: 20; height: 20; z: 1
+        color: "Lime"
+
+        // Move the ball to the right and back to the left repeatedly
+        SequentialAnimation on x {
+            loops: Animation.Infinite
+            NumberAnimation { to: page.width - 40; duration: 2000 }
+            PropertyAction { target: ball; property: "direction"; value: "left" }
+            NumberAnimation { to: 20; duration: 2000 }
+            PropertyAction { target: ball; property: "direction"; value: "right" }
+        }
+
+        // Make y move with a velocity of 200 
+        Behavior on y { SpringAnimation{ velocity: 200; }
+        }
+
+        Component.onCompleted: y = page.height-10; // start the ball motion
+
+        // Detect the ball hitting the top or bottom of the view and bounce it
+        onYChanged: {
+            if (y <= 0) {
+                y = page.height - 20;
+            } else if (y >= page.height - 20) {
+                y = 0;
+            }
+        }
+    }
+
+    // Place bats to the left and right of the view, following the y
+    // coordinates of the ball.
+    Rectangle {
+        id: leftBat
+        color: "Lime"
+        x: 2; width: 20; height: 90
+        // ![0]
+        y: ball.direction == 'left' ? ball.y - 45 : page.height/2 -45;
+        Behavior on y { SpringAnimation{ velocity: 300 } }
+        // ![0]
+    }
+    Rectangle {
+        id: rightBat
+        color: "Lime"
+        x: page.width - 22; width: 20; height: 90
+        y: ball.direction == 'right' ? ball.y - 45 : page.height/2 -45;
+        Behavior on y { SpringAnimation{ velocity: 300 } }
+    }
+
+    // The rest, to make it look realistic, if neither ever scores...
+    Rectangle { color: "Lime"; x: page.width/2-80; y: 0; width: 40; height: 60 }
+    Rectangle { color: "Black"; x: page.width/2-70; y: 10; width: 20; height: 40 }
+    Rectangle { color: "Lime"; x: page.width/2+40; y: 0; width: 40; height: 60 }
+    Rectangle { color: "Black"; x: page.width/2+50; y: 10; width: 20; height: 40 }
+    Repeater {
+        model: page.height / 20
+        Rectangle { color: "Lime"; x: page.width/2-5; y: index * 20; width: 10; height: 10 }
+    }
+}
diff --git a/examples/quick/animation/behaviors/wigglytext.qml b/examples/quick/animation/behaviors/wigglytext.qml
new file mode 100644
index 0000000..72f4872
--- /dev/null
+++ b/examples/quick/animation/behaviors/wigglytext.qml
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+    id: container
+
+    property string text: "Drag me!"
+    property bool animated: true
+
+    width: 320; height: 480; color: "#474747"; focus: true
+
+    Keys.onPressed: {
+        if (event.key == Qt.Key_Delete || event.key == Qt.Key_Backspace)
+            container.remove()
+        else if (event.text != "") {
+            container.append(event.text)
+        }
+    }
+
+    function append(text) {
+        container.animated = false
+        var lastLetter = container.children[container.children.length - 1]
+        var newLetter = letterComponent.createObject(container)
+        newLetter.text = text
+        newLetter.follow = lastLetter
+        container.animated = true
+    }
+
+    function remove() {
+        if (container.children.length)
+            container.children[container.children.length - 1].destroy()
+    }
+
+    function doLayout() {
+        var follow = null
+        for (var i = 0; i < container.text.length; ++i) {
+            var newLetter = letterComponent.createObject(container)
+            newLetter.text = container.text[i]
+            newLetter.follow = follow
+            follow = newLetter
+        }
+    }
+
+    Component {
+        id: letterComponent
+        Text {
+            id: letter
+            property variant follow
+
+//! [0]
+            x: follow ? follow.x + follow.width : container.width / 6
+            y: follow ? follow.y : container.height / 2
+//! [0]
+
+            font.pixelSize: 40; font.bold: true
+            color: "#999999"; styleColor: "#222222"; style: Text.Raised
+
+            MouseArea {
+                anchors.fill: parent
+                drag.target: letter; drag.axis: Drag.XAndYAxis
+                onPressed: letter.color = "#dddddd"
+                onReleased: letter.color = "#999999"
+            }
+
+//! [1]
+            Behavior on x { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } }
+            Behavior on y { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } }
+//! [1]
+        }
+    }
+
+    Component.onCompleted: doLayout()
+}
diff --git a/examples/quick/animation/easing/easing.qml b/examples/quick/animation/easing/easing.qml
new file mode 100644
index 0000000..23c6b0e
--- /dev/null
+++ b/examples/quick/animation/easing/easing.qml
@@ -0,0 +1,156 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+    id: window
+    width: 320; height: 480; color: "#232323"
+
+    property var easingCurve: [ 0.2, 0.2, 0.13, 0.65, 0.2, 0.8,
+                                0.624, 0.98, 0.93, 0.95, 1, 1 ]
+
+    ListModel {
+        id: easingTypes
+        ListElement { name: "Easing.Linear"; type: Easing.Linear; ballColor: "DarkRed" }
+        ListElement { name: "Easing.InQuad"; type: Easing.InQuad; ballColor: "IndianRed" }
+        ListElement { name: "Easing.OutQuad"; type: Easing.OutQuad; ballColor: "Salmon" }
+        ListElement { name: "Easing.InOutQuad"; type: Easing.InOutQuad; ballColor: "Tomato" }
+        ListElement { name: "Easing.OutInQuad"; type: Easing.OutInQuad; ballColor: "DarkOrange" }
+        ListElement { name: "Easing.InCubic"; type: Easing.InCubic; ballColor: "Gold" }
+        ListElement { name: "Easing.OutCubic"; type: Easing.OutCubic; ballColor: "Yellow" }
+        ListElement { name: "Easing.InOutCubic"; type: Easing.InOutCubic; ballColor: "PeachPuff" }
+        ListElement { name: "Easing.OutInCubic"; type: Easing.OutInCubic; ballColor: "Thistle" }
+        ListElement { name: "Easing.InQuart"; type: Easing.InQuart; ballColor: "Orchid" }
+        ListElement { name: "Easing.OutQuart"; type: Easing.OutQuart; ballColor: "Purple" }
+        ListElement { name: "Easing.InOutQuart"; type: Easing.InOutQuart; ballColor: "SlateBlue" }
+        ListElement { name: "Easing.OutInQuart"; type: Easing.OutInQuart; ballColor: "Chartreuse" }
+        ListElement { name: "Easing.InQuint"; type: Easing.InQuint; ballColor: "LimeGreen" }
+        ListElement { name: "Easing.OutQuint"; type: Easing.OutQuint; ballColor: "SeaGreen" }
+        ListElement { name: "Easing.InOutQuint"; type: Easing.InOutQuint; ballColor: "DarkGreen" }
+        ListElement { name: "Easing.OutInQuint"; type: Easing.OutInQuint; ballColor: "Olive" }
+        ListElement { name: "Easing.InSine"; type: Easing.InSine; ballColor: "DarkSeaGreen" }
+        ListElement { name: "Easing.OutSine"; type: Easing.OutSine; ballColor: "Teal" }
+        ListElement { name: "Easing.InOutSine"; type: Easing.InOutSine; ballColor: "Turquoise" }
+        ListElement { name: "Easing.OutInSine"; type: Easing.OutInSine; ballColor: "SteelBlue" }
+        ListElement { name: "Easing.InExpo"; type: Easing.InExpo; ballColor: "SkyBlue" }
+        ListElement { name: "Easing.OutExpo"; type: Easing.OutExpo; ballColor: "RoyalBlue" }
+        ListElement { name: "Easing.InOutExpo"; type: Easing.InOutExpo; ballColor: "MediumBlue" }
+        ListElement { name: "Easing.OutInExpo"; type: Easing.OutInExpo; ballColor: "MidnightBlue" }
+        ListElement { name: "Easing.InCirc"; type: Easing.InCirc; ballColor: "CornSilk" }
+        ListElement { name: "Easing.OutCirc"; type: Easing.OutCirc; ballColor: "Bisque" }
+        ListElement { name: "Easing.InOutCirc"; type: Easing.InOutCirc; ballColor: "RosyBrown" }
+        ListElement { name: "Easing.OutInCirc"; type: Easing.OutInCirc; ballColor: "SandyBrown" }
+        ListElement { name: "Easing.InElastic"; type: Easing.InElastic; ballColor: "DarkGoldenRod" }
+        ListElement { name: "Easing.OutElastic"; type: Easing.OutElastic; ballColor: "Chocolate" }
+        ListElement { name: "Easing.InOutElastic"; type: Easing.InOutElastic; ballColor: "SaddleBrown" }
+        ListElement { name: "Easing.OutInElastic"; type: Easing.OutInElastic; ballColor: "Brown" }
+        ListElement { name: "Easing.InBack"; type: Easing.InBack; ballColor: "Maroon" }
+        ListElement { name: "Easing.OutBack"; type: Easing.OutBack; ballColor: "LavenderBlush" }
+        ListElement { name: "Easing.InOutBack"; type: Easing.InOutBack; ballColor: "MistyRose" }
+        ListElement { name: "Easing.OutInBack"; type: Easing.OutInBack; ballColor: "Gainsboro" }
+        ListElement { name: "Easing.OutBounce"; type: Easing.OutBounce; ballColor: "Silver" }
+        ListElement { name: "Easing.InBounce"; type: Easing.InBounce; ballColor: "DimGray" }
+        ListElement { name: "Easing.InOutBounce"; type: Easing.InOutBounce; ballColor: "SlateGray" }
+        ListElement { name: "Easing.OutInBounce"; type: Easing.OutInBounce; ballColor: "DarkSlateGray" }
+        ListElement { name: "Easing.Bezier"; type: Easing.Bezier; ballColor: "Chartreuse"; }
+    }
+
+    Component {
+        id: delegate
+
+        Item {
+            height: 56; width: window.width
+
+            Text { text: name; anchors.centerIn: parent; color: "White" }
+
+            Rectangle {
+                id: slot1; color: "#121212"; x: 30; height: 46; width: 46
+                border.color: "#343434"; border.width: 1; radius: 12; antialiasing: true
+                anchors.verticalCenter: parent.verticalCenter
+            }
+
+            Rectangle {
+                id: slot2; color: "#121212"; x: window.width - 76; height: 46; width: 46
+                border.color: "#343434"; border.width: 1; radius: 12; antialiasing: true
+                anchors.verticalCenter: parent.verticalCenter
+            }
+
+            Rectangle {
+                id: rect; x: 30; color: "#454545"
+                border.color: "White"; border.width: 2
+                height: 46; width: 46; radius: 12; antialiasing: true
+                anchors.verticalCenter: parent.verticalCenter
+
+                MouseArea {
+                    onClicked: if (rect.state == '') rect.state = "right"; else rect.state = ''
+                    anchors.fill: parent
+                    anchors.margins: -5 // Make MouseArea bigger than the rectangle, itself
+                }
+
+                states : State {
+                    name: "right"
+                    PropertyChanges { target: rect; x: window.width - 76; color: ballColor }
+                }
+
+                transitions: Transition {
+                    NumberAnimation { properties: "x"; easing.type: type; easing.bezierCurve: getBezierCurve(name); duration: 1000 }
+                    ColorAnimation { properties: "color"; easing.type: type; easing.bezierCurve: getBezierCurve(name); duration: 1000 }
+                }
+            }
+        }
+    }
+
+    Flickable {
+        anchors.fill: parent
+        contentHeight: layout.height
+        Column {
+            id: layout
+            Repeater { model: easingTypes; delegate: delegate }
+        }
+    }
+
+    function getBezierCurve(name)
+    {
+        if (name === "Easing.Bezier")
+            return easingCurve;
+        return [];
+    }
+}
diff --git a/examples/quick/animation/pathanimation/pathanimation.qml b/examples/quick/animation/pathanimation/pathanimation.qml
new file mode 100644
index 0000000..979d8f6
--- /dev/null
+++ b/examples/quick/animation/pathanimation/pathanimation.qml
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+    id: window
+    width: 320
+    height: 480
+
+    Canvas {
+        id: canvas
+        anchors.fill: parent
+        antialiasing: true
+
+        onPaint: {
+            var context = canvas.getContext("2d")
+            context.clearRect(0, 0, width, height)
+            context.strokeStyle = "black"
+            context.path = pathAnim.path
+            context.stroke()
+        }
+    }
+
+    SequentialAnimation {
+        running: true
+        loops: -1
+
+        PauseAnimation { duration: 1000 }
+        //! [0]
+        PathAnimation {
+            id: pathAnim
+
+            duration: 2000
+            easing.type: Easing.InQuad
+
+            target: box
+            orientation: PathAnimation.RightFirst
+            anchorPoint: Qt.point(box.width/2, box.height/2)
+            path: Path {
+                startX: 50; startY: 50
+
+                PathCubic {
+                    x: window.width - 50
+                    y: window.height - 50
+
+                    control1X: x; control1Y: 50
+                    control2X: 50; control2Y: y
+                }
+
+                onChanged: canvas.requestPaint()
+            }
+        }
+        //! [0]
+    }
+
+    Rectangle {
+        id: box
+
+        x: 25; y: 25
+        width: 50; height: 50
+        border.width: 1
+        antialiasing: true
+
+        Text {
+            anchors.centerIn: parent
+            text: "Box"
+        }
+    }
+}
diff --git a/examples/quick/animation/pathinterpolator/pathinterpolator.qml b/examples/quick/animation/pathinterpolator/pathinterpolator.qml
new file mode 100644
index 0000000..723dc34
--- /dev/null
+++ b/examples/quick/animation/pathinterpolator/pathinterpolator.qml
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+    id: window
+    width: 320
+    height: 480
+
+    Canvas {
+        id: canvas
+        anchors.fill: parent
+        antialiasing: true
+
+        onPaint: {
+            var context = canvas.getContext("2d")
+            context.clearRect(0, 0, width, height)
+            context.strokeStyle = "black"
+            context.path = motionPath.path
+            context.stroke()
+        }
+    }
+
+    //! [0]
+    PathInterpolator {
+        id: motionPath
+
+        path: Path {
+            startX: 50; startY: 50
+
+            PathCubic {
+                x: window.width - 50
+                y: window.height - 50
+
+                control1X: x; control1Y: 50
+                control2X: 50; control2Y: y
+            }
+
+            onChanged: canvas.requestPaint()
+        }
+
+        SequentialAnimation on progress {
+            running: true
+            loops: -1
+            PauseAnimation { duration: 1000 }
+            NumberAnimation {
+                id: progressAnim
+                running: false
+                from: 0; to: 1
+                duration: 2000
+                easing.type: Easing.InQuad
+            }
+        }
+    }
+    //! [0]
+
+    Rectangle {
+        id: box
+
+        width: 50; height: 50
+        border.width: 1
+        antialiasing: true
+
+        //bind our attributes to follow the path as progress changes
+        x: motionPath.x
+        y: motionPath.y
+        rotation: motionPath.angle
+        transform: Translate { x: -box.width/2; y: -box.height/2 }
+
+        Text {
+            anchors.centerIn: parent
+            text: "Box"
+        }
+    }
+}
diff --git a/examples/quick/animation/states/qt-logo.png b/examples/quick/animation/states/qt-logo.png
new file mode 100644
index 0000000..14ddf2a
Binary files /dev/null and b/examples/quick/animation/states/qt-logo.png differ
diff --git a/examples/quick/animation/states/states.qml b/examples/quick/animation/states/states.qml
new file mode 100644
index 0000000..26acaf7
--- /dev/null
+++ b/examples/quick/animation/states/states.qml
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+    id: page
+    width: 640; height: 480
+    color: "#343434"
+
+    Image { 
+        id: userIcon
+        x: topLeftRect.x; y: topLeftRect.y
+        source: "qt-logo.png"
+    }
+
+    Rectangle {
+        id: topLeftRect
+
+        anchors { left: parent.left; top: parent.top; leftMargin: 10; topMargin: 20 }
+        width: 46; height: 54
+        color: "Transparent"; border.color: "Gray"; radius: 6
+
+        // Clicking in here sets the state to the default state, returning the image to
+        // its initial position
+        MouseArea { anchors.fill: parent; onClicked: page.state = '' }
+    }
+
+    Rectangle {
+        id: middleRightRect
+
+        anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 20 }
+        width: 46; height: 54
+        color: "Transparent"; border.color: "Gray"; radius: 6
+
+        // Clicking in here sets the state to 'middleRight'
+        MouseArea { anchors.fill: parent; onClicked: page.state = 'middleRight' }
+    }
+
+    Rectangle {
+        id: bottomLeftRect
+
+        anchors { left: parent.left; bottom: parent.bottom; leftMargin: 10; bottomMargin: 20 }
+        width: 46; height: 54
+        color: "Transparent"; border.color: "Gray"; radius: 6
+
+        // Clicking in here sets the state to 'bottomLeft'
+        MouseArea { anchors.fill: parent; onClicked: page.state = 'bottomLeft' }
+    }
+
+    states: [
+        // ![0]
+        // In state 'middleRight', move the image to middleRightRect
+        State {
+            name: "middleRight"
+            PropertyChanges { target: userIcon; x: middleRightRect.x; y: middleRightRect.y }
+        },
+
+        // In state 'bottomLeft', move the image to bottomLeftRect
+        State {
+            name: "bottomLeft"
+            PropertyChanges { target: userIcon; x: bottomLeftRect.x; y: bottomLeftRect.y  }
+        }
+        // ![0]
+    ]
+}
diff --git a/examples/quick/animation/states/transitions.qml b/examples/quick/animation/states/transitions.qml
new file mode 100644
index 0000000..8216182
--- /dev/null
+++ b/examples/quick/animation/states/transitions.qml
@@ -0,0 +1,132 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+/*
+    This is exactly the same as states.qml, except that we have appended
+    a set of transitions to apply animations when the item changes 
+    between each state.
+*/
+
+Rectangle {
+    id: page
+    width: 640; height: 480
+    color: "#343434"
+
+    Image { 
+        id: userIcon
+        x: topLeftRect.x; y: topLeftRect.y
+        source: "qt-logo.png"
+    }
+
+    Rectangle {
+        id: topLeftRect
+
+        anchors { left: parent.left; top: parent.top; leftMargin: 10; topMargin: 20 }
+        width: 46; height: 54
+        color: "Transparent"; border.color: "Gray"; radius: 6
+
+        // Clicking in here sets the state to the default state, returning the image to
+        // its initial position
+        MouseArea { anchors.fill: parent; onClicked: page.state = '' }
+    }
+
+    Rectangle {
+        id: middleRightRect
+
+        anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 20 }
+        width: 46; height: 54
+        color: "Transparent"; border.color: "Gray"; radius: 6
+
+        // Clicking in here sets the state to 'middleRight'
+        MouseArea { anchors.fill: parent; onClicked: page.state = 'middleRight' }
+    }
+
+    Rectangle {
+        id: bottomLeftRect
+
+        anchors { left: parent.left; bottom: parent.bottom; leftMargin: 10; bottomMargin: 20 }
+        width: 46; height: 54
+        color: "Transparent"; border.color: "Gray"; radius: 6
+
+        // Clicking in here sets the state to 'bottomLeft'
+        MouseArea { anchors.fill: parent; onClicked: page.state = 'bottomLeft' }
+    }
+
+    states: [
+        // In state 'middleRight', move the image to middleRightRect
+        State {
+            name: "middleRight"
+            PropertyChanges { target: userIcon; x: middleRightRect.x; y: middleRightRect.y }
+        },
+
+        // In state 'bottomLeft', move the image to bottomLeftRect
+        State {
+            name: "bottomLeft"
+            PropertyChanges { target: userIcon; x: bottomLeftRect.x; y: bottomLeftRect.y  }
+        }
+    ]
+
+    // ![0]
+    // Transitions define how the properties change when the item moves between each state
+    transitions: [
+
+        // When transitioning to 'middleRight' move x,y over a duration of 1 second,
+        // with OutBounce easing function.
+        Transition {
+            from: "*"; to: "middleRight"
+            NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce; duration: 1000 }
+        },
+
+        // When transitioning to 'bottomLeft' move x,y over a duration of 2 seconds,
+        // with InOutQuad easing function.
+        Transition {
+            from: "*"; to: "bottomLeft"
+            NumberAnimation { properties: "x,y"; easing.type: Easing.InOutQuad; duration: 2000 }
+        },
+
+        // For any other state changes move x,y linearly over duration of 200ms.
+        Transition {
+            NumberAnimation { properties: "x,y"; duration: 200 }
+        }
+    // ![0]
+    ]
+}
diff --git a/examples/quick/canvas/bezierCurve/bezierCurve.qml b/examples/quick/canvas/bezierCurve/bezierCurve.qml
new file mode 100644
index 0000000..386d1d7
--- /dev/null
+++ b/examples/quick/canvas/bezierCurve/bezierCurve.qml
@@ -0,0 +1,123 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../contents"
+Item {
+  id:container
+  width:320
+  height:480
+
+  Column {
+    spacing:5
+    anchors.fill:parent
+    Text { font.pointSize:15; text:"Bezier Curve"; anchors.horizontalCenter:parent.horizontalCenter}
+
+    Canvas {
+      id:canvas
+      width:320
+      height:280
+      property string strokeStyle:"red"
+      property string fillStyle:"red"
+      property int lineWidth:lineWidthCtrl.value
+      property bool fill:true
+      property bool stroke:true
+      property real alpha:alphaCtrl.value
+      property real scaleX : scaleXCtrl.value
+      property real scaleY : scaleYCtrl.value
+      property real rotate : rotateCtrl.value
+      antialiasing: true
+
+      Behavior on scaleX { SpringAnimation { spring: 2; damping: 0.2; loops:Animation.Infinite } }
+      Behavior on scaleY { SpringAnimation { spring: 2; damping: 0.2; loops:Animation.Infinite} }
+      Behavior on rotate { SpringAnimation { spring: 2; damping: 0.2; loops:Animation.Infinite} }
+
+    onLineWidthChanged:requestPaint();
+    onFillChanged:requestPaint();
+    onStrokeChanged:requestPaint();
+    onAlphaChanged:requestPaint();
+    onScaleXChanged:requestPaint();
+    onScaleYChanged:requestPaint();
+    onRotateChanged:requestPaint();
+
+    onPaint: {
+      var ctx = canvas.getContext('2d');
+      ctx.save();
+      ctx.clearRect(0, 0, canvas.width, canvas.height);
+      ctx.globalAlpha = canvas.alpha;
+      ctx.strokeStyle = canvas.strokeStyle;
+      ctx.fillStyle = canvas.fillStyle;
+      ctx.lineWidth = canvas.lineWidth;
+      ctx.scale(canvas.scaleX, canvas.scaleY);
+      ctx.rotate(canvas.rotate);
+      //! [0]
+      ctx.beginPath();
+      ctx.moveTo(75,40);
+      ctx.bezierCurveTo(75,37,70,25,50,25);
+      ctx.bezierCurveTo(20,25,20,62.5,20,62.5);
+      ctx.bezierCurveTo(20,80,40,102,75,120);
+      ctx.bezierCurveTo(110,102,130,80,130,62.5);
+      ctx.bezierCurveTo(130,62.5,130,25,100,25);
+      ctx.bezierCurveTo(85,25,75,37,75,40);
+      ctx.closePath();
+      //! [0]
+      if (canvas.fill)
+         ctx.fill();
+      if (canvas.stroke)
+         ctx.stroke();
+      ctx.restore();
+    }
+  }
+
+    Rectangle {
+        id:controls
+        width:320
+        height:150
+        Column {
+          spacing:3
+          Slider {id:lineWidthCtrl; width:300; height:20; min:1; max:10; init:2; name:"Line width"}
+          Slider {id:scaleXCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleX"}
+          Slider {id:scaleYCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleY"}
+          Slider {id:rotateCtrl; width:300; height:20; min:0; max:Math.PI*2; init:0; name:"Rotate"}
+          Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
+        }
+    }
+  }
+}
diff --git a/examples/quick/canvas/canvas.py b/examples/quick/canvas/canvas.py
new file mode 100644
index 0000000..55048bf
--- /dev/null
+++ b/examples/quick/canvas/canvas.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+import os.path
+
+from PyQt5.QtCore import QUrl
+from PyQt5.QtGui import QGuiApplication
+from PyQt5.QtQuick import QQuickView
+
+# Access the shared module.
+sys.path.insert(1,
+        os.path.join(
+                os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
+                'shared'))
+import shared_rc
+
+import canvas_rc
+
+
+app = QGuiApplication(sys.argv)
+
+view = QQuickView()
+view.engine().quit.connect(app.quit)
+
+view.setSource(QUrl('qrc:///canvas/canvas.qml'))
+view.show()
+
+sys.exit(app.exec_())
diff --git a/examples/quick/canvas/canvas.qml b/examples/quick/canvas/canvas.qml
new file mode 100644
index 0000000..ffa9a2c
--- /dev/null
+++ b/examples/quick/canvas/canvas.qml
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../shared" as Examples
+
+Item {
+    height: 480
+    width: 320
+    Examples.LauncherList {
+        id: ll
+        anchors.fill: parent
+        Component.onCompleted: {
+            addExample("Red heart", "Draws a red heart with bezier curves",  Qt.resolvedUrl("bezierCurve/bezierCurve.qml"));
+            addExample("Talk bubble", "Draws a talk bubble with quadratic curves",  Qt.resolvedUrl("quadraticCurveTo/quadraticCurveTo.qml"));
+            addExample("Squircle", "Draws a smooth squircle with simple lines",  Qt.resolvedUrl("squircle/squircle.qml"));
+            addExample("Rounded rectangle", "Draws a rounded rectangle with lines and arcs",  Qt.resolvedUrl("roundedrect/roundedrect.qml"));
+            addExample("Smile face", "Draws a smile face with complex paths",  Qt.resolvedUrl("smile/smile.qml"));
+            addExample("Clip", "Shows the canvas clip feature",  Qt.resolvedUrl("clip/clip.qml"));
+            addExample("Tiger", "Draw a tiger with a collection of SVG paths",  Qt.resolvedUrl("tiger/tiger.qml"));
+        }
+    }
+}
diff --git a/examples/quick/canvas/canvas.qrc b/examples/quick/canvas/canvas.qrc
new file mode 100644
index 0000000..06d39f3
--- /dev/null
+++ b/examples/quick/canvas/canvas.qrc
@@ -0,0 +1,32 @@
+<RCC>
+    <qresource prefix="/canvas">
+        <file>canvas.qml</file>
+        <file>bezierCurve/bezierCurve.qml</file>
+        <file>clip/clip.qml</file>
+        <file>contents/Button.qml</file>
+        <file>contents/qt-logo.png</file>
+        <file>contents/ScrollBar.qml</file>
+        <file>contents/Slider.qml</file>
+        <file>contents/TitleBar.qml</file>
+        <file>contents/ToolBar.qml</file>
+        <file>contents/images/button-pressed.png</file>
+        <file>contents/images/button.png</file>
+        <file>contents/images/default.svg</file>
+        <file>contents/images/gloss.png</file>
+        <file>contents/images/lineedit.png</file>
+        <file>contents/images/lineedit.sci</file>
+        <file>contents/images/quit.png</file>
+        <file>contents/images/stripes.png</file>
+        <file>contents/images/titlebar.png</file>
+        <file>contents/images/titlebar.sci</file>
+        <file>contents/images/toolbutton.png</file>
+        <file>contents/images/toolbutton.sci</file>
+        <file>quadraticCurveTo/quadraticCurveTo.qml</file>
+        <file>roundedrect/roundedrect.qml</file>
+        <file>smile/smile.qml</file>
+        <file>squircle/squircle.png</file>
+        <file>squircle/squircle.qml</file>
+        <file>tiger/tiger.js</file>
+        <file>tiger/tiger.qml</file>
+    </qresource>
+</RCC>
diff --git a/examples/quick/canvas/canvas_rc.py b/examples/quick/canvas/canvas_rc.py
new file mode 100644
index 0000000..2045ea9
--- /dev/null
+++ b/examples/quick/canvas/canvas_rc.py
@@ -0,0 +1,11837 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Mon Jul 22 19:21:56 2013
+#      by: The Resource Compiler for PyQt (Qt v5.1.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x0b\xfd\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x22\x2e\x2e\x2f\x73\x68\x61\x72\x65\x64\x22\x20\
+\x61\x73\x20\x45\x78\x61\x6d\x70\x6c\x65\x73\x0a\x0a\x49\x74\x65\
+\x6d\x20\x7b\x0a\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\
+\x34\x38\x30\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x33\
+\x32\x30\x0a\x20\x20\x20\x20\x45\x78\x61\x6d\x70\x6c\x65\x73\x2e\
+\x4c\x61\x75\x6e\x63\x68\x65\x72\x4c\x69\x73\x74\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x6c\x6c\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\
+\x6c\x6c\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x2e\x6f\x6e\x43\
+\x6f\x6d\x70\x6c\x65\x74\x65\x64\x3a\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x45\x78\x61\x6d\x70\
+\x6c\x65\x28\x22\x52\x65\x64\x20\x68\x65\x61\x72\x74\x22\x2c\x20\
+\x22\x44\x72\x61\x77\x73\x20\x61\x20\x72\x65\x64\x20\x68\x65\x61\
+\x72\x74\x20\x77\x69\x74\x68\x20\x62\x65\x7a\x69\x65\x72\x20\x63\
+\x75\x72\x76\x65\x73\x22\x2c\x20\x20\x51\x74\x2e\x72\x65\x73\x6f\
+\x6c\x76\x65\x64\x55\x72\x6c\x28\x22\x62\x65\x7a\x69\x65\x72\x43\
+\x75\x72\x76\x65\x2f\x62\x65\x7a\x69\x65\x72\x43\x75\x72\x76\x65\
+\x2e\x71\x6d\x6c\x22\x29\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x61\x64\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\
+\x22\x54\x61\x6c\x6b\x20\x62\x75\x62\x62\x6c\x65\x22\x2c\x20\x22\
+\x44\x72\x61\x77\x73\x20\x61\x20\x74\x61\x6c\x6b\x20\x62\x75\x62\
+\x62\x6c\x65\x20\x77\x69\x74\x68\x20\x71\x75\x61\x64\x72\x61\x74\
+\x69\x63\x20\x63\x75\x72\x76\x65\x73\x22\x2c\x20\x20\x51\x74\x2e\
+\x72\x65\x73\x6f\x6c\x76\x65\x64\x55\x72\x6c\x28\x22\x71\x75\x61\
+\x64\x72\x61\x74\x69\x63\x43\x75\x72\x76\x65\x54\x6f\x2f\x71\x75\
+\x61\x64\x72\x61\x74\x69\x63\x43\x75\x72\x76\x65\x54\x6f\x2e\x71\
+\x6d\x6c\x22\x29\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x61\x64\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\x22\x53\
+\x71\x75\x69\x72\x63\x6c\x65\x22\x2c\x20\x22\x44\x72\x61\x77\x73\
+\x20\x61\x20\x73\x6d\x6f\x6f\x74\x68\x20\x73\x71\x75\x69\x72\x63\
+\x6c\x65\x20\x77\x69\x74\x68\x20\x73\x69\x6d\x70\x6c\x65\x20\x6c\
+\x69\x6e\x65\x73\x22\x2c\x20\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\
+\x76\x65\x64\x55\x72\x6c\x28\x22\x73\x71\x75\x69\x72\x63\x6c\x65\
+\x2f\x73\x71\x75\x69\x72\x63\x6c\x65\x2e\x71\x6d\x6c\x22\x29\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\
+\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\x22\x52\x6f\x75\x6e\x64\x65\
+\x64\x20\x72\x65\x63\x74\x61\x6e\x67\x6c\x65\x22\x2c\x20\x22\x44\
+\x72\x61\x77\x73\x20\x61\x20\x72\x6f\x75\x6e\x64\x65\x64\x20\x72\
+\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x77\x69\x74\x68\x20\x6c\x69\
+\x6e\x65\x73\x20\x61\x6e\x64\x20\x61\x72\x63\x73\x22\x2c\x20\x20\
+\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\x64\x55\x72\x6c\x28\x22\
+\x72\x6f\x75\x6e\x64\x65\x64\x72\x65\x63\x74\x2f\x72\x6f\x75\x6e\
+\x64\x65\x64\x72\x65\x63\x74\x2e\x71\x6d\x6c\x22\x29\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x64\x64\x45\
+\x78\x61\x6d\x70\x6c\x65\x28\x22\x53\x6d\x69\x6c\x65\x20\x66\x61\
+\x63\x65\x22\x2c\x20\x22\x44\x72\x61\x77\x73\x20\x61\x20\x73\x6d\
+\x69\x6c\x65\x20\x66\x61\x63\x65\x20\x77\x69\x74\x68\x20\x63\x6f\
+\x6d\x70\x6c\x65\x78\x20\x70\x61\x74\x68\x73\x22\x2c\x20\x20\x51\
+\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\x64\x55\x72\x6c\x28\x22\x73\
+\x6d\x69\x6c\x65\x2f\x73\x6d\x69\x6c\x65\x2e\x71\x6d\x6c\x22\x29\
+\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\
+\x64\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\x22\x43\x6c\x69\x70\x22\
+\x2c\x20\x22\x53\x68\x6f\x77\x73\x20\x74\x68\x65\x20\x63\x61\x6e\
+\x76\x61\x73\x20\x63\x6c\x69\x70\x20\x66\x65\x61\x74\x75\x72\x65\
+\x22\x2c\x20\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\x64\x55\
+\x72\x6c\x28\x22\x63\x6c\x69\x70\x2f\x63\x6c\x69\x70\x2e\x71\x6d\
+\x6c\x22\x29\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x61\x64\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\x22\x54\x69\
+\x67\x65\x72\x22\x2c\x20\x22\x44\x72\x61\x77\x20\x61\x20\x74\x69\
+\x67\x65\x72\x20\x77\x69\x74\x68\x20\x61\x20\x63\x6f\x6c\x6c\x65\
+\x63\x74\x69\x6f\x6e\x20\x6f\x66\x20\x53\x56\x47\x20\x70\x61\x74\
+\x68\x73\x22\x2c\x20\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\
+\x64\x55\x72\x6c\x28\x22\x74\x69\x67\x65\x72\x2f\x74\x69\x67\x65\
+\x72\x2e\x71\x6d\x6c\x22\x29\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x13\x00\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x22\x2e\x2e\x2f\x63\x6f\x6e\x74\x65\x6e\x74\x73\
+\x22\x0a\x69\x6d\x70\x6f\x72\x74\x20\x22\x74\x69\x67\x65\x72\x2e\
+\x6a\x73\x22\x20\x61\x73\x20\x54\x69\x67\x65\x72\x0a\x49\x74\x65\
+\x6d\x20\x7b\x0a\x20\x20\x69\x64\x3a\x63\x6f\x6e\x74\x61\x69\x6e\
+\x65\x72\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x33\x32\x30\x0a\x20\
+\x20\x68\x65\x69\x67\x68\x74\x3a\x34\x38\x30\x0a\x0a\x20\x20\x43\
+\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\x20\x73\x70\x61\x63\
+\x69\x6e\x67\x3a\x35\x0a\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\
+\x73\x2e\x66\x69\x6c\x6c\x3a\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\
+\x20\x20\x54\x65\x78\x74\x20\x7b\x20\x66\x6f\x6e\x74\x2e\x70\x6f\
+\x69\x6e\x74\x53\x69\x7a\x65\x3a\x31\x35\x3b\x20\x74\x65\x78\x74\
+\x3a\x22\x54\x69\x67\x65\x72\x20\x77\x69\x74\x68\x20\x53\x56\x47\
+\x20\x70\x61\x74\x68\x22\x3b\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\
+\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\
+\x3a\x70\x61\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\
+\x61\x6c\x43\x65\x6e\x74\x65\x72\x7d\x0a\x0a\x20\x20\x20\x20\x43\
+\x61\x6e\x76\x61\x73\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3a\x63\x61\x6e\x76\x61\x73\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x77\x69\x64\x74\x68\x3a\x33\x32\x30\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x38\x30\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x74\x69\x61\x6c\x69\x61\x73\
+\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\
+\x67\x20\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3a\x22\x73\
+\x74\x65\x65\x6c\x62\x6c\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\
+\x67\x20\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\x3a\x22\x79\x65\x6c\
+\x6c\x6f\x77\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\
+\x70\x65\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x66\x69\x6c\x6c\x3a\
+\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\
+\x70\x65\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x73\x74\x72\x6f\x6b\
+\x65\x3a\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\
+\x72\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x61\x6c\x70\
+\x68\x61\x3a\x61\x6c\x70\x68\x61\x43\x74\x72\x6c\x2e\x76\x61\x6c\
+\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\
+\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x73\x63\x61\x6c\x65\x58\x20\
+\x3a\x20\x73\x63\x61\x6c\x65\x58\x43\x74\x72\x6c\x2e\x76\x61\x6c\
+\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\
+\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x73\x63\x61\x6c\x65\x59\x20\
+\x3a\x20\x73\x63\x61\x6c\x65\x59\x43\x74\x72\x6c\x2e\x76\x61\x6c\
+\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\
+\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x72\x6f\x74\x61\x74\x65\x20\
+\x3a\x20\x72\x6f\x74\x61\x74\x65\x43\x74\x72\x6c\x2e\x76\x61\x6c\
+\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\
+\x72\x74\x79\x20\x69\x6e\x74\x20\x66\x72\x61\x6d\x65\x3a\x30\x0a\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x46\x69\x6c\x6c\x43\
+\x68\x61\x6e\x67\x65\x64\x3a\x20\x72\x65\x71\x75\x65\x73\x74\x50\
+\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x6f\x6e\x53\x74\x72\x6f\x6b\x65\x43\x68\x61\x6e\x67\x65\x64\x3a\
+\x20\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x41\x6c\x70\x68\x61\
+\x43\x68\x61\x6e\x67\x65\x64\x3a\x20\x72\x65\x71\x75\x65\x73\x74\
+\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x6f\x6e\x53\x63\x61\x6c\x65\x58\x43\x68\x61\x6e\x67\x65\x64\
+\x3a\x20\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x53\x63\x61\x6c\
+\x65\x59\x43\x68\x61\x6e\x67\x65\x64\x3a\x20\x72\x65\x71\x75\x65\
+\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x6f\x6e\x52\x6f\x74\x61\x74\x65\x43\x68\x61\x6e\x67\
+\x65\x64\x3a\x20\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\
+\x28\x29\x3b\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x50\
+\x61\x69\x6e\x74\x65\x64\x20\x3a\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x63\x61\x6e\x76\x61\x73\x2e\x66\x72\
+\x61\x6d\x65\x2b\x2b\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x69\x66\x20\x28\x63\x61\x6e\x76\x61\x73\x2e\x66\x72\
+\x61\x6d\x65\x20\x3c\x20\x54\x69\x67\x65\x72\x2e\x74\x69\x67\x65\
+\x72\x2e\x6c\x65\x6e\x67\x74\x68\x29\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x65\x71\x75\x65\x73\
+\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x50\x61\
+\x69\x6e\x74\x3a\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x76\x61\x72\x20\x63\x74\x78\x20\x3d\x20\x63\x61\x6e\
+\x76\x61\x73\x2e\x67\x65\x74\x43\x6f\x6e\x74\x65\x78\x74\x28\x27\
+\x32\x64\x27\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x63\x74\x78\x2e\x73\x61\x76\x65\x28\x29\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x63\x6c\
+\x65\x61\x72\x52\x65\x63\x74\x28\x30\x2c\x20\x30\x2c\x20\x63\x61\
+\x6e\x76\x61\x73\x2e\x77\x69\x64\x74\x68\x2c\x20\x63\x61\x6e\x76\
+\x61\x73\x2e\x68\x65\x69\x67\x68\x74\x29\x3b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x67\x6c\x6f\x62\
+\x61\x6c\x41\x6c\x70\x68\x61\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\
+\x2e\x61\x6c\x70\x68\x61\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x63\x61\x6c\x65\x28\x63\x61\
+\x6e\x76\x61\x73\x2e\x73\x63\x61\x6c\x65\x58\x2c\x20\x63\x61\x6e\
+\x76\x61\x73\x2e\x73\x63\x61\x6c\x65\x59\x29\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x72\x6f\x74\
+\x61\x74\x65\x28\x63\x61\x6e\x76\x61\x73\x2e\x72\x6f\x74\x61\x74\
+\x65\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x74\x78\x2e\x67\x6c\x6f\x62\x61\x6c\x43\x6f\x6d\x70\x6f\x73\
+\x69\x74\x65\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20\x3d\x20\x22\
+\x73\x6f\x75\x72\x63\x65\x2d\x6f\x76\x65\x72\x22\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x74\x72\
+\x61\x6e\x73\x6c\x61\x74\x65\x28\x63\x61\x6e\x76\x61\x73\x2e\x77\
+\x69\x64\x74\x68\x2f\x32\x2c\x20\x63\x61\x6e\x76\x61\x73\x2e\x68\
+\x65\x69\x67\x68\x74\x2f\x32\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\x65\
+\x53\x74\x79\x6c\x65\x20\x3d\x20\x51\x74\x2e\x72\x67\x62\x61\x28\
+\x2e\x33\x2c\x20\x2e\x33\x2c\x20\x2e\x33\x2c\x31\x29\x3b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6c\
+\x69\x6e\x65\x57\x69\x64\x74\x68\x20\x3d\x20\x31\x3b\x0a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x21\x20\x5b\
+\x30\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\
+\x6f\x72\x20\x28\x76\x61\x72\x20\x69\x20\x3d\x20\x30\x3b\x20\x69\
+\x20\x3c\x20\x63\x61\x6e\x76\x61\x73\x2e\x66\x72\x61\x6d\x65\x20\
+\x26\x26\x20\x69\x20\x3c\x20\x54\x69\x67\x65\x72\x2e\x74\x69\x67\
+\x65\x72\x2e\x6c\x65\x6e\x67\x74\x68\x3b\x20\x69\x2b\x2b\x29\x20\
+\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x69\x66\x20\x28\x54\x69\x67\x65\x72\x2e\x74\x69\x67\x65\
+\x72\x5b\x69\x5d\x2e\x77\x69\x64\x74\x68\x20\x21\x3d\x20\x75\x6e\
+\x64\x65\x66\x69\x6e\x65\x64\x29\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\
+\x2e\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x20\x3d\x20\x54\x69\x67\
+\x65\x72\x2e\x74\x69\x67\x65\x72\x5b\x69\x5d\x2e\x77\x69\x64\x74\
+\x68\x3b\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x69\x66\x20\x28\x54\x69\x67\x65\x72\x2e\x74\x69\
+\x67\x65\x72\x5b\x69\x5d\x2e\x70\x61\x74\x68\x20\x21\x3d\x20\x75\
+\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x70\x61\x74\x68\x20\x3d\x20\x54\x69\x67\x65\x72\x2e\x74\
+\x69\x67\x65\x72\x5b\x69\x5d\x2e\x70\x61\x74\x68\x3b\x0a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\
+\x66\x20\x28\x54\x69\x67\x65\x72\x2e\x74\x69\x67\x65\x72\x5b\x69\
+\x5d\x2e\x66\x69\x6c\x6c\x20\x21\x3d\x20\x75\x6e\x64\x65\x66\x69\
+\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\
+\x69\x6c\x6c\x53\x74\x79\x6c\x65\x20\x3d\x20\x54\x69\x67\x65\x72\
+\x2e\x74\x69\x67\x65\x72\x5b\x69\x5d\x2e\x66\x69\x6c\x6c\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x28\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x69\x66\x20\x28\x54\x69\x67\x65\x72\x2e\x74\x69\x67\
+\x65\x72\x5b\x69\x5d\x2e\x73\x74\x72\x6f\x6b\x65\x20\x21\x3d\x20\
+\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\
+\x20\x3d\x20\x54\x69\x67\x65\x72\x2e\x74\x69\x67\x65\x72\x5b\x69\
+\x5d\x2e\x73\x74\x72\x6f\x6b\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x73\x74\x72\x6f\x6b\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\
+\x72\x65\x73\x74\x6f\x72\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x52\
+\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x69\x64\x3a\x63\x6f\x6e\x74\x72\x6f\x6c\x73\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x33\x32\x30\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\
+\x31\x35\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x43\x6f\x6c\x75\
+\x6d\x6e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\
+\x70\x61\x63\x69\x6e\x67\x3a\x33\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x73\x63\
+\x61\x6c\x65\x58\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\
+\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\
+\x6d\x69\x6e\x3a\x30\x2e\x31\x3b\x20\x6d\x61\x78\x3a\x31\x30\x3b\
+\x20\x69\x6e\x69\x74\x3a\x30\x2e\x35\x3b\x20\x6e\x61\x6d\x65\x3a\
+\x22\x53\x63\x61\x6c\x65\x58\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x73\
+\x63\x61\x6c\x65\x59\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\
+\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\
+\x20\x6d\x69\x6e\x3a\x30\x2e\x31\x3b\x20\x6d\x61\x78\x3a\x31\x30\
+\x3b\x20\x69\x6e\x69\x74\x3a\x30\x2e\x35\x3b\x20\x6e\x61\x6d\x65\
+\x3a\x22\x53\x63\x61\x6c\x65\x59\x22\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\
+\x72\x6f\x74\x61\x74\x65\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\
+\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\
+\x3b\x20\x6d\x69\x6e\x3a\x30\x3b\x20\x6d\x61\x78\x3a\x4d\x61\x74\
+\x68\x2e\x50\x49\x2a\x32\x3b\x20\x69\x6e\x69\x74\x3a\x30\x3b\x20\
+\x6e\x61\x6d\x65\x3a\x22\x52\x6f\x74\x61\x74\x65\x22\x7d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\
+\x7b\x69\x64\x3a\x61\x6c\x70\x68\x61\x43\x74\x72\x6c\x3b\x20\x77\
+\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\
+\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x30\x3b\x20\x6d\x61\x78\x3a\
+\x31\x3b\x20\x69\x6e\x69\x74\x3a\x31\x3b\x20\x6e\x61\x6d\x65\x3a\
+\x22\x41\x6c\x70\x68\x61\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x01\x6d\xec\
+\x76\
+\x61\x72\x20\x74\x69\x67\x65\x72\x20\x3d\x20\x5b\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\
+\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\
+\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\
+\x31\x37\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\
+\x2d\x31\x32\x32\x2e\x33\x30\x34\x20\x38\x34\x2e\x32\x38\x35\x43\
+\x2d\x31\x32\x32\x2e\x33\x30\x34\x20\x38\x34\x2e\x32\x38\x35\x20\
+\x2d\x31\x32\x32\x2e\x32\x30\x33\x20\x38\x36\x2e\x31\x37\x39\x20\
+\x2d\x31\x32\x33\x2e\x30\x32\x37\x20\x38\x36\x2e\x31\x36\x43\x2d\
+\x31\x32\x33\x2e\x38\x35\x31\x20\x38\x36\x2e\x31\x34\x31\x20\x2d\
+\x31\x34\x30\x2e\x33\x30\x35\x20\x33\x38\x2e\x30\x36\x36\x20\x2d\
+\x31\x36\x30\x2e\x38\x33\x33\x20\x34\x30\x2e\x33\x30\x39\x43\x2d\
+\x31\x36\x30\x2e\x38\x33\x33\x20\x34\x30\x2e\x33\x30\x39\x20\x2d\
+\x31\x34\x33\x2e\x30\x35\x20\x33\x32\x2e\x39\x35\x36\x20\x2d\x31\
+\x32\x32\x2e\x33\x30\x34\x20\x38\x34\x2e\x32\x38\x35\x7a\x22\x7d\
+\x0a\x20\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\
+\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\
+\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x37\x32\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x31\x38\x2e\x37\x37\x34\
+\x20\x38\x31\x2e\x32\x36\x32\x43\x2d\x31\x31\x38\x2e\x37\x37\x34\
+\x20\x38\x31\x2e\x32\x36\x32\x20\x2d\x31\x31\x39\x2e\x33\x32\x33\
+\x20\x38\x33\x2e\x30\x37\x38\x20\x2d\x31\x32\x30\x2e\x30\x39\x32\
+\x20\x38\x32\x2e\x37\x37\x39\x43\x2d\x31\x32\x30\x2e\x38\x36\x20\
+\x38\x32\x2e\x34\x38\x31\x20\x2d\x31\x31\x39\x2e\x39\x37\x37\x20\
+\x33\x31\x2e\x36\x37\x35\x20\x2d\x31\x34\x30\x2e\x30\x34\x33\x20\
+\x32\x36\x2e\x38\x30\x31\x43\x2d\x31\x34\x30\x2e\x30\x34\x33\x20\
+\x32\x36\x2e\x38\x30\x31\x20\x2d\x31\x32\x30\x2e\x38\x32\x20\x32\
+\x35\x2e\x39\x33\x37\x20\x2d\x31\x31\x38\x2e\x37\x37\x34\x20\x38\
+\x31\x2e\x32\x36\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\
+\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\
+\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\
+\x37\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\
+\x39\x31\x2e\x32\x38\x34\x20\x31\x32\x33\x2e\x35\x39\x43\x2d\x39\
+\x31\x2e\x32\x38\x34\x20\x31\x32\x33\x2e\x35\x39\x20\x2d\x38\x39\
+\x2e\x36\x34\x38\x20\x31\x32\x34\x2e\x35\x35\x20\x2d\x39\x30\x2e\
+\x31\x31\x38\x20\x31\x32\x35\x2e\x32\x32\x37\x43\x2d\x39\x30\x2e\
+\x35\x38\x39\x20\x31\x32\x35\x2e\x39\x30\x34\x20\x2d\x31\x33\x39\
+\x2e\x37\x36\x33\x20\x31\x31\x33\x2e\x31\x30\x32\x20\x2d\x31\x34\
+\x39\x2e\x32\x31\x38\x20\x31\x33\x31\x2e\x34\x35\x39\x43\x2d\x31\
+\x34\x39\x2e\x32\x31\x38\x20\x31\x33\x31\x2e\x34\x35\x39\x20\x2d\
+\x31\x34\x35\x2e\x35\x33\x39\x20\x31\x31\x32\x2e\x35\x37\x32\x20\
+\x2d\x39\x31\x2e\x32\x38\x34\x20\x31\x32\x33\x2e\x35\x39\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\
+\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\
+\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x37\x32\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x39\x34\x2e\x30\x39\x33\x20\
+\x31\x33\x33\x2e\x38\x30\x31\x43\x2d\x39\x34\x2e\x30\x39\x33\x20\
+\x31\x33\x33\x2e\x38\x30\x31\x20\x2d\x39\x32\x2e\x32\x33\x37\x20\
+\x31\x33\x34\x2e\x31\x39\x37\x20\x2d\x39\x32\x2e\x34\x37\x31\x20\
+\x31\x33\x34\x2e\x39\x38\x38\x43\x2d\x39\x32\x2e\x37\x30\x34\x20\
+\x31\x33\x35\x2e\x37\x37\x39\x20\x2d\x31\x34\x33\x2e\x34\x30\x37\
+\x20\x31\x33\x39\x2e\x31\x32\x31\x20\x2d\x31\x34\x36\x2e\x35\x39\
+\x37\x20\x31\x35\x39\x2e\x35\x32\x32\x43\x2d\x31\x34\x36\x2e\x35\
+\x39\x37\x20\x31\x35\x39\x2e\x35\x32\x32\x20\x2d\x31\x34\x39\x2e\
+\x30\x35\x35\x20\x31\x34\x30\x2e\x34\x33\x37\x20\x2d\x39\x34\x2e\
+\x30\x39\x33\x20\x31\x33\x33\x2e\x38\x30\x31\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\
+\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\
+\x68\x22\x3a\x30\x2e\x31\x37\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x2d\x39\x38\x2e\x33\x30\x34\x20\x31\x32\x38\
+\x2e\x32\x37\x36\x43\x2d\x39\x38\x2e\x33\x30\x34\x20\x31\x32\x38\
+\x2e\x32\x37\x36\x20\x2d\x39\x36\x2e\x35\x32\x36\x20\x31\x32\x38\
+\x2e\x39\x33\x39\x20\x2d\x39\x36\x2e\x38\x37\x32\x20\x31\x32\x39\
+\x2e\x36\x38\x37\x43\x2d\x39\x37\x2e\x32\x31\x38\x20\x31\x33\x30\
+\x2e\x34\x33\x35\x20\x2d\x31\x34\x37\x2e\x38\x36\x36\x20\x31\x32\
+\x36\x2e\x33\x34\x36\x20\x2d\x31\x35\x33\x2e\x39\x39\x38\x20\x31\
+\x34\x36\x2e\x30\x36\x34\x43\x2d\x31\x35\x33\x2e\x39\x39\x38\x20\
+\x31\x34\x36\x2e\x30\x36\x34\x20\x2d\x31\x35\x33\x2e\x36\x34\x36\
+\x20\x31\x32\x36\x2e\x38\x32\x35\x20\x2d\x39\x38\x2e\x33\x30\x34\
+\x20\x31\x32\x38\x2e\x32\x37\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\
+\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\
+\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\
+\x30\x2e\x31\x37\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x2d\x31\x30\x39\x2e\x30\x30\x39\x20\x31\x31\x30\x2e\x30\
+\x37\x32\x43\x2d\x31\x30\x39\x2e\x30\x30\x39\x20\x31\x31\x30\x2e\
+\x30\x37\x32\x20\x2d\x31\x30\x37\x2e\x37\x30\x31\x20\x31\x31\x31\
+\x2e\x34\x34\x36\x20\x2d\x31\x30\x38\x2e\x33\x34\x20\x31\x31\x31\
+\x2e\x39\x36\x37\x43\x2d\x31\x30\x38\x2e\x39\x37\x39\x20\x31\x31\
+\x32\x2e\x34\x38\x38\x20\x2d\x31\x35\x32\x2e\x37\x32\x32\x20\x38\
+\x36\x2e\x36\x33\x34\x20\x2d\x31\x36\x36\x2e\x38\x36\x39\x20\x31\
+\x30\x31\x2e\x36\x37\x36\x43\x2d\x31\x36\x36\x2e\x38\x36\x39\x20\
+\x31\x30\x31\x2e\x36\x37\x36\x20\x2d\x31\x35\x38\x2e\x31\x32\x38\
+\x20\x38\x34\x2e\x35\x33\x33\x20\x2d\x31\x30\x39\x2e\x30\x30\x39\
+\x20\x31\x31\x30\x2e\x30\x37\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\
+\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\
+\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\
+\x30\x2e\x31\x37\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x2d\x31\x31\x36\x2e\x35\x35\x34\x20\x31\x31\x34\x2e\x32\
+\x36\x33\x43\x2d\x31\x31\x36\x2e\x35\x35\x34\x20\x31\x31\x34\x2e\
+\x32\x36\x33\x20\x2d\x31\x31\x35\x2e\x30\x39\x38\x20\x31\x31\x35\
+\x2e\x34\x38\x20\x2d\x31\x31\x35\x2e\x36\x37\x34\x20\x31\x31\x36\
+\x2e\x30\x37\x31\x43\x2d\x31\x31\x36\x2e\x32\x35\x20\x31\x31\x36\
+\x2e\x36\x36\x31\x20\x2d\x31\x36\x32\x2e\x36\x33\x38\x20\x39\x35\
+\x2e\x39\x32\x32\x20\x2d\x31\x37\x34\x2e\x39\x39\x32\x20\x31\x31\
+\x32\x2e\x34\x36\x39\x43\x2d\x31\x37\x34\x2e\x39\x39\x32\x20\x31\
+\x31\x32\x2e\x34\x36\x39\x20\x2d\x31\x36\x38\x2e\x32\x34\x37\x20\
+\x39\x34\x2e\x34\x34\x37\x20\x2d\x31\x31\x36\x2e\x35\x35\x34\x20\
+\x31\x31\x34\x2e\x32\x36\x33\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\
+\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\
+\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\
+\x2e\x31\x37\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x2d\x31\x31\x39\x2e\x31\x35\x34\x20\x31\x31\x38\x2e\x33\x33\
+\x35\x43\x2d\x31\x31\x39\x2e\x31\x35\x34\x20\x31\x31\x38\x2e\x33\
+\x33\x35\x20\x2d\x31\x31\x37\x2e\x35\x34\x36\x20\x31\x31\x39\x2e\
+\x33\x34\x33\x20\x2d\x31\x31\x38\x2e\x30\x33\x36\x20\x31\x32\x30\
+\x2e\x30\x30\x36\x43\x2d\x31\x31\x38\x2e\x35\x32\x36\x20\x31\x32\
+\x30\x2e\x36\x36\x39\x20\x2d\x31\x36\x37\x2e\x33\x30\x38\x20\x31\
+\x30\x36\x2e\x34\x34\x36\x20\x2d\x31\x37\x37\x2e\x32\x39\x31\x20\
+\x31\x32\x34\x2e\x35\x32\x32\x43\x2d\x31\x37\x37\x2e\x32\x39\x31\
+\x20\x31\x32\x34\x2e\x35\x32\x32\x20\x2d\x31\x37\x33\x2e\x30\x36\
+\x36\x20\x31\x30\x35\x2e\x37\x34\x39\x20\x2d\x31\x31\x39\x2e\x31\
+\x35\x34\x20\x31\x31\x38\x2e\x33\x33\x35\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\
+\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\
+\x22\x3a\x30\x2e\x31\x37\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x31\x30\x38\x2e\x34\x32\x20\x31\x31\x38\x2e\
+\x39\x34\x39\x43\x2d\x31\x30\x38\x2e\x34\x32\x20\x31\x31\x38\x2e\
+\x39\x34\x39\x20\x2d\x31\x30\x37\x2e\x32\x39\x38\x20\x31\x32\x30\
+\x2e\x34\x38\x20\x2d\x31\x30\x37\x2e\x39\x39\x39\x20\x31\x32\x30\
+\x2e\x39\x31\x35\x43\x2d\x31\x30\x38\x2e\x37\x20\x31\x32\x31\x2e\
+\x33\x35\x20\x2d\x31\x34\x38\x2e\x37\x36\x39\x20\x39\x30\x2e\x31\
+\x30\x32\x20\x2d\x31\x36\x34\x2e\x37\x32\x37\x20\x31\x30\x33\x2e\
+\x32\x30\x37\x43\x2d\x31\x36\x34\x2e\x37\x32\x37\x20\x31\x30\x33\
+\x2e\x32\x30\x37\x20\x2d\x31\x35\x33\x2e\x38\x36\x32\x20\x38\x37\
+\x2e\x33\x32\x36\x20\x2d\x31\x30\x38\x2e\x34\x32\x20\x31\x31\x38\
+\x2e\x39\x34\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\
+\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\
+\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x37\
+\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\
+\x32\x38\x2e\x32\x20\x39\x30\x43\x2d\x31\x32\x38\x2e\x32\x20\x39\
+\x30\x20\x2d\x31\x32\x37\x2e\x36\x20\x39\x31\x2e\x38\x20\x2d\x31\
+\x32\x38\x2e\x34\x20\x39\x32\x43\x2d\x31\x32\x39\x2e\x32\x20\x39\
+\x32\x2e\x32\x20\x2d\x31\x35\x37\x2e\x38\x20\x35\x30\x2e\x32\x20\
+\x2d\x31\x37\x37\x2e\x30\x30\x31\x20\x35\x37\x2e\x38\x43\x2d\x31\
+\x37\x37\x2e\x30\x30\x31\x20\x35\x37\x2e\x38\x20\x2d\x31\x36\x31\
+\x2e\x38\x20\x34\x36\x20\x2d\x31\x32\x38\x2e\x32\x20\x39\x30\x7a\
+\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\
+\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\
+\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\
+\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x37\x32\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x32\x37\x2e\x35\x30\
+\x35\x20\x39\x36\x2e\x39\x37\x39\x43\x2d\x31\x32\x37\x2e\x35\x30\
+\x35\x20\x39\x36\x2e\x39\x37\x39\x20\x2d\x31\x32\x36\x2e\x35\x33\
+\x20\x39\x38\x2e\x36\x30\x38\x20\x2d\x31\x32\x37\x2e\x32\x36\x39\
+\x20\x39\x38\x2e\x39\x37\x35\x43\x2d\x31\x32\x38\x2e\x30\x30\x37\
+\x20\x39\x39\x2e\x33\x34\x33\x20\x2d\x31\x36\x34\x2e\x39\x39\x32\
+\x20\x36\x34\x2e\x34\x39\x39\x20\x2d\x31\x38\x32\x2e\x31\x30\x31\
+\x20\x37\x36\x2e\x30\x36\x31\x43\x2d\x31\x38\x32\x2e\x31\x30\x31\
+\x20\x37\x36\x2e\x30\x36\x31\x20\x2d\x31\x36\x39\x2e\x38\x30\x34\
+\x20\x36\x31\x2e\x32\x36\x31\x20\x2d\x31\x32\x37\x2e\x35\x30\x35\
+\x20\x39\x36\x2e\x39\x37\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\
+\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\
+\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\
+\x2e\x31\x37\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x2d\x31\x32\x37\x2e\x36\x32\x20\x31\x30\x31\x2e\x33\x34\x39\
+\x43\x2d\x31\x32\x37\x2e\x36\x32\x20\x31\x30\x31\x2e\x33\x34\x39\
+\x20\x2d\x31\x32\x36\x2e\x34\x39\x38\x20\x31\x30\x32\x2e\x38\x38\
+\x20\x2d\x31\x32\x37\x2e\x31\x39\x39\x20\x31\x30\x33\x2e\x33\x31\
+\x35\x43\x2d\x31\x32\x37\x2e\x39\x20\x31\x30\x33\x2e\x37\x34\x39\
+\x20\x2d\x31\x36\x37\x2e\x39\x36\x39\x20\x37\x32\x2e\x35\x30\x32\
+\x20\x2d\x31\x38\x33\x2e\x39\x32\x37\x20\x38\x35\x2e\x36\x30\x37\
+\x43\x2d\x31\x38\x33\x2e\x39\x32\x37\x20\x38\x35\x2e\x36\x30\x37\
+\x20\x2d\x31\x37\x33\x2e\x30\x36\x32\x20\x36\x39\x2e\x37\x32\x36\
+\x20\x2d\x31\x32\x37\x2e\x36\x32\x20\x31\x30\x31\x2e\x33\x34\x39\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\
+\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x32\x39\x2e\
+\x38\x33\x20\x31\x30\x33\x2e\x30\x36\x35\x43\x2d\x31\x32\x39\x2e\
+\x33\x32\x37\x20\x31\x30\x39\x2e\x31\x31\x33\x20\x2d\x31\x32\x38\
+\x2e\x33\x33\x39\x20\x31\x31\x35\x2e\x36\x38\x32\x20\x2d\x31\x32\
+\x36\x2e\x36\x20\x31\x31\x38\x2e\x38\x30\x31\x43\x2d\x31\x32\x36\
+\x2e\x36\x20\x31\x31\x38\x2e\x38\x30\x31\x20\x2d\x31\x33\x30\x2e\
+\x32\x20\x31\x33\x31\x2e\x32\x30\x31\x20\x2d\x31\x32\x31\x2e\x34\
+\x20\x31\x34\x34\x2e\x34\x30\x31\x43\x2d\x31\x32\x31\x2e\x34\x20\
+\x31\x34\x34\x2e\x34\x30\x31\x20\x2d\x31\x32\x31\x2e\x38\x20\x31\
+\x35\x31\x2e\x36\x30\x31\x20\x2d\x31\x32\x30\x2e\x32\x20\x31\x35\
+\x34\x2e\x38\x30\x31\x43\x2d\x31\x32\x30\x2e\x32\x20\x31\x35\x34\
+\x2e\x38\x30\x31\x20\x2d\x31\x31\x36\x2e\x32\x20\x31\x36\x33\x2e\
+\x32\x30\x31\x20\x2d\x31\x31\x31\x2e\x34\x20\x31\x36\x34\x2e\x30\
+\x30\x31\x43\x2d\x31\x30\x37\x2e\x35\x31\x36\x20\x31\x36\x34\x2e\
+\x36\x34\x38\x20\x2d\x39\x38\x2e\x37\x39\x33\x20\x31\x36\x37\x2e\
+\x37\x31\x37\x20\x2d\x38\x38\x2e\x39\x33\x32\x20\x31\x36\x39\x2e\
+\x31\x32\x31\x43\x2d\x38\x38\x2e\x39\x33\x32\x20\x31\x36\x39\x2e\
+\x31\x32\x31\x20\x2d\x37\x31\x2e\x38\x20\x31\x38\x33\x2e\x32\x30\
+\x31\x20\x2d\x37\x35\x20\x31\x39\x36\x2e\x30\x30\x31\x43\x2d\x37\
+\x35\x20\x31\x39\x36\x2e\x30\x30\x31\x20\x2d\x37\x35\x2e\x34\x20\
+\x32\x31\x32\x2e\x34\x30\x31\x20\x2d\x37\x39\x20\x32\x31\x34\x2e\
+\x30\x30\x31\x43\x2d\x37\x39\x20\x32\x31\x34\x2e\x30\x30\x31\x20\
+\x2d\x36\x37\x2e\x34\x20\x32\x30\x32\x2e\x38\x30\x31\x20\x2d\x37\
+\x37\x20\x32\x31\x39\x2e\x36\x30\x31\x4c\x2d\x38\x31\x2e\x34\x20\
+\x32\x33\x38\x2e\x34\x30\x31\x43\x2d\x38\x31\x2e\x34\x20\x32\x33\
+\x38\x2e\x34\x30\x31\x20\x2d\x35\x35\x2e\x38\x20\x32\x31\x36\x2e\
+\x38\x30\x31\x20\x2d\x37\x31\x2e\x34\x20\x32\x33\x35\x2e\x32\x30\
+\x31\x4c\x2d\x38\x31\x2e\x34\x20\x32\x36\x31\x2e\x32\x30\x31\x43\
+\x2d\x38\x31\x2e\x34\x20\x32\x36\x31\x2e\x32\x30\x31\x20\x2d\x36\
+\x31\x2e\x38\x20\x32\x34\x32\x2e\x38\x30\x31\x20\x2d\x36\x39\x20\
+\x32\x35\x31\x2e\x32\x30\x31\x4c\x2d\x37\x32\x2e\x32\x20\x32\x36\
+\x30\x2e\x30\x30\x31\x43\x2d\x37\x32\x2e\x32\x20\x32\x36\x30\x2e\
+\x30\x30\x31\x20\x2d\x32\x39\x20\x32\x33\x32\x2e\x38\x30\x31\x20\
+\x2d\x35\x39\x2e\x38\x20\x32\x36\x32\x2e\x34\x30\x31\x43\x2d\x35\
+\x39\x2e\x38\x20\x32\x36\x32\x2e\x34\x30\x31\x20\x2d\x35\x31\x2e\
+\x38\x20\x32\x35\x38\x2e\x38\x30\x31\x20\x2d\x34\x37\x2e\x34\x20\
+\x32\x36\x31\x2e\x36\x30\x31\x43\x2d\x34\x37\x2e\x34\x20\x32\x36\
+\x31\x2e\x36\x30\x31\x20\x2d\x34\x30\x2e\x36\x20\x32\x36\x30\x2e\
+\x34\x30\x31\x20\x2d\x34\x31\x2e\x34\x20\x32\x36\x32\x2e\x30\x30\
+\x31\x43\x2d\x34\x31\x2e\x34\x20\x32\x36\x32\x2e\x30\x30\x31\x20\
+\x2d\x36\x32\x2e\x32\x20\x32\x37\x32\x2e\x34\x30\x31\x20\x2d\x36\
+\x35\x2e\x38\x20\x32\x39\x30\x2e\x38\x30\x31\x43\x2d\x36\x35\x2e\
+\x38\x20\x32\x39\x30\x2e\x38\x30\x31\x20\x2d\x35\x37\x2e\x34\x20\
+\x32\x38\x30\x2e\x38\x30\x31\x20\x2d\x36\x30\x2e\x36\x20\x32\x39\
+\x31\x2e\x36\x30\x31\x4c\x2d\x36\x30\x2e\x32\x20\x33\x30\x33\x2e\
+\x32\x30\x31\x43\x2d\x36\x30\x2e\x32\x20\x33\x30\x33\x2e\x32\x30\
+\x31\x20\x2d\x35\x36\x2e\x32\x20\x32\x38\x31\x2e\x36\x30\x31\x20\
+\x2d\x35\x36\x2e\x36\x20\x33\x31\x39\x2e\x32\x30\x31\x43\x2d\x35\
+\x36\x2e\x36\x20\x33\x31\x39\x2e\x32\x30\x31\x20\x2d\x33\x37\x2e\
+\x34\x20\x33\x30\x31\x2e\x32\x30\x31\x20\x2d\x34\x39\x20\x33\x32\
+\x32\x2e\x30\x30\x31\x4c\x2d\x34\x39\x20\x33\x33\x38\x2e\x38\x30\
+\x31\x43\x2d\x34\x39\x20\x33\x33\x38\x2e\x38\x30\x31\x20\x2d\x33\
+\x33\x2e\x38\x20\x33\x32\x32\x2e\x34\x30\x31\x20\x2d\x34\x30\x2e\
+\x32\x20\x33\x33\x35\x2e\x32\x30\x31\x43\x2d\x34\x30\x2e\x32\x20\
+\x33\x33\x35\x2e\x32\x30\x31\x20\x2d\x33\x30\x2e\x32\x20\x33\x32\
+\x36\x2e\x34\x30\x31\x20\x2d\x33\x34\x2e\x32\x20\x33\x34\x31\x2e\
+\x36\x30\x31\x43\x2d\x33\x34\x2e\x32\x20\x33\x34\x31\x2e\x36\x30\
+\x31\x20\x2d\x33\x35\x20\x33\x35\x32\x2e\x30\x30\x31\x20\x2d\x33\
+\x30\x2e\x36\x20\x33\x34\x30\x2e\x38\x30\x31\x43\x2d\x33\x30\x2e\
+\x36\x20\x33\x34\x30\x2e\x38\x30\x31\x20\x2d\x31\x34\x2e\x36\x20\
+\x33\x31\x30\x2e\x32\x30\x31\x20\x2d\x32\x30\x2e\x36\x20\x33\x33\
+\x36\x2e\x34\x30\x31\x43\x2d\x32\x30\x2e\x36\x20\x33\x33\x36\x2e\
+\x34\x30\x31\x20\x2d\x32\x31\x2e\x34\x20\x33\x35\x35\x2e\x36\x30\
+\x31\x20\x2d\x31\x36\x2e\x36\x20\x33\x34\x30\x2e\x38\x30\x31\x43\
+\x2d\x31\x36\x2e\x36\x20\x33\x34\x30\x2e\x38\x30\x31\x20\x2d\x31\
+\x36\x2e\x32\x20\x33\x35\x31\x2e\x32\x30\x31\x20\x2d\x37\x20\x33\
+\x35\x38\x2e\x34\x30\x31\x43\x2d\x37\x20\x33\x35\x38\x2e\x34\x30\
+\x31\x20\x2d\x38\x2e\x32\x20\x33\x30\x37\x2e\x36\x30\x31\x20\x34\
+\x2e\x36\x20\x33\x34\x33\x2e\x36\x30\x31\x4c\x38\x2e\x36\x20\x33\
+\x36\x30\x2e\x30\x30\x31\x43\x38\x2e\x36\x20\x33\x36\x30\x2e\x30\
+\x30\x31\x20\x31\x31\x2e\x34\x20\x33\x35\x30\x2e\x38\x30\x31\x20\
+\x31\x31\x20\x33\x34\x35\x2e\x36\x30\x31\x43\x31\x31\x20\x33\x34\
+\x35\x2e\x36\x30\x31\x20\x32\x35\x2e\x38\x20\x33\x32\x39\x2e\x32\
+\x30\x31\x20\x31\x39\x20\x33\x35\x33\x2e\x36\x30\x31\x43\x31\x39\
+\x20\x33\x35\x33\x2e\x36\x30\x31\x20\x33\x34\x2e\x32\x20\x33\x33\
+\x30\x2e\x38\x30\x31\x20\x33\x31\x20\x33\x34\x34\x2e\x30\x30\x31\
+\x43\x33\x31\x20\x33\x34\x34\x2e\x30\x30\x31\x20\x32\x33\x2e\x34\
+\x20\x33\x36\x30\x2e\x30\x30\x31\x20\x32\x35\x20\x33\x36\x34\x2e\
+\x38\x30\x31\x43\x32\x35\x20\x33\x36\x34\x2e\x38\x30\x31\x20\x34\
+\x31\x2e\x38\x20\x33\x33\x30\x2e\x30\x30\x31\x20\x34\x33\x20\x33\
+\x32\x38\x2e\x34\x30\x31\x43\x34\x33\x20\x33\x32\x38\x2e\x34\x30\
+\x31\x20\x34\x31\x20\x33\x37\x30\x2e\x38\x30\x32\x20\x35\x31\x2e\
+\x38\x20\x33\x33\x34\x2e\x38\x30\x31\x43\x35\x31\x2e\x38\x20\x33\
+\x33\x34\x2e\x38\x30\x31\x20\x35\x37\x2e\x34\x20\x33\x34\x36\x2e\
+\x38\x30\x31\x20\x35\x34\x2e\x36\x20\x33\x35\x31\x2e\x32\x30\x31\
+\x43\x35\x34\x2e\x36\x20\x33\x35\x31\x2e\x32\x30\x31\x20\x36\x32\
+\x2e\x36\x20\x33\x34\x33\x2e\x32\x30\x31\x20\x36\x31\x2e\x38\x20\
+\x33\x34\x30\x2e\x30\x30\x31\x43\x36\x31\x2e\x38\x20\x33\x34\x30\
+\x2e\x30\x30\x31\x20\x36\x36\x2e\x34\x20\x33\x33\x31\x2e\x38\x30\
+\x31\x20\x36\x39\x2e\x32\x20\x33\x34\x35\x2e\x34\x30\x31\x43\x36\
+\x39\x2e\x32\x20\x33\x34\x35\x2e\x34\x30\x31\x20\x37\x31\x20\x33\
+\x35\x34\x2e\x38\x30\x31\x20\x37\x32\x2e\x36\x20\x33\x35\x31\x2e\
+\x36\x30\x31\x43\x37\x32\x2e\x36\x20\x33\x35\x31\x2e\x36\x30\x31\
+\x20\x37\x36\x2e\x36\x20\x33\x37\x35\x2e\x36\x30\x32\x20\x37\x37\
+\x2e\x38\x20\x33\x35\x32\x2e\x38\x30\x31\x43\x37\x37\x2e\x38\x20\
+\x33\x35\x32\x2e\x38\x30\x31\x20\x37\x39\x2e\x34\x20\x33\x33\x39\
+\x2e\x32\x30\x31\x20\x37\x32\x2e\x32\x20\x33\x32\x37\x2e\x36\x30\
+\x31\x43\x37\x32\x2e\x32\x20\x33\x32\x37\x2e\x36\x30\x31\x20\x37\
+\x33\x20\x33\x32\x34\x2e\x34\x30\x31\x20\x37\x30\x2e\x32\x20\x33\
+\x32\x30\x2e\x34\x30\x31\x43\x37\x30\x2e\x32\x20\x33\x32\x30\x2e\
+\x34\x30\x31\x20\x38\x33\x2e\x38\x20\x33\x34\x32\x2e\x30\x30\x31\
+\x20\x37\x36\x2e\x36\x20\x33\x31\x33\x2e\x32\x30\x31\x43\x37\x36\
+\x2e\x36\x20\x33\x31\x33\x2e\x32\x30\x31\x20\x38\x37\x2e\x38\x30\
+\x31\x20\x33\x32\x31\x2e\x32\x30\x31\x20\x38\x39\x2e\x30\x30\x31\
+\x20\x33\x32\x31\x2e\x32\x30\x31\x43\x38\x39\x2e\x30\x30\x31\x20\
+\x33\x32\x31\x2e\x32\x30\x31\x20\x37\x35\x2e\x34\x20\x32\x39\x38\
+\x2e\x30\x30\x31\x20\x38\x34\x2e\x32\x20\x33\x30\x32\x2e\x38\x30\
+\x31\x43\x38\x34\x2e\x32\x20\x33\x30\x32\x2e\x38\x30\x31\x20\x37\
+\x39\x20\x32\x39\x32\x2e\x34\x30\x31\x20\x39\x37\x2e\x30\x30\x31\
+\x20\x33\x30\x34\x2e\x34\x30\x31\x43\x39\x37\x2e\x30\x30\x31\x20\
+\x33\x30\x34\x2e\x34\x30\x31\x20\x38\x31\x20\x32\x38\x38\x2e\x34\
+\x30\x31\x20\x39\x38\x2e\x36\x30\x31\x20\x32\x39\x38\x2e\x30\x30\
+\x31\x43\x39\x38\x2e\x36\x30\x31\x20\x32\x39\x38\x2e\x30\x30\x31\
+\x20\x31\x30\x36\x2e\x36\x30\x31\x20\x33\x30\x34\x2e\x34\x30\x31\
+\x20\x39\x39\x2e\x30\x30\x31\x20\x32\x39\x34\x2e\x34\x30\x31\x43\
+\x39\x39\x2e\x30\x30\x31\x20\x32\x39\x34\x2e\x34\x30\x31\x20\x38\
+\x34\x2e\x36\x20\x32\x37\x38\x2e\x34\x30\x31\x20\x31\x30\x36\x2e\
+\x36\x30\x31\x20\x32\x39\x36\x2e\x34\x30\x31\x43\x31\x30\x36\x2e\
+\x36\x30\x31\x20\x32\x39\x36\x2e\x34\x30\x31\x20\x31\x31\x38\x2e\
+\x32\x30\x31\x20\x33\x31\x32\x2e\x38\x30\x31\x20\x31\x31\x39\x2e\
+\x30\x30\x31\x20\x33\x31\x35\x2e\x36\x30\x31\x43\x31\x31\x39\x2e\
+\x30\x30\x31\x20\x33\x31\x35\x2e\x36\x30\x31\x20\x31\x30\x39\x2e\
+\x30\x30\x31\x20\x32\x38\x36\x2e\x34\x30\x31\x20\x31\x30\x34\x2e\
+\x36\x30\x31\x20\x32\x38\x33\x2e\x36\x30\x31\x43\x31\x30\x34\x2e\
+\x36\x30\x31\x20\x32\x38\x33\x2e\x36\x30\x31\x20\x31\x31\x33\x2e\
+\x30\x30\x31\x20\x32\x34\x37\x2e\x32\x30\x31\x20\x31\x35\x34\x2e\
+\x32\x30\x31\x20\x32\x36\x32\x2e\x38\x30\x31\x43\x31\x35\x34\x2e\
+\x32\x30\x31\x20\x32\x36\x32\x2e\x38\x30\x31\x20\x31\x36\x31\x2e\
+\x30\x30\x31\x20\x32\x38\x30\x2e\x30\x30\x31\x20\x31\x36\x35\x2e\
+\x34\x30\x31\x20\x32\x36\x31\x2e\x36\x30\x31\x43\x31\x36\x35\x2e\
+\x34\x30\x31\x20\x32\x36\x31\x2e\x36\x30\x31\x20\x31\x37\x38\x2e\
+\x32\x30\x31\x20\x32\x35\x35\x2e\x32\x30\x31\x20\x31\x38\x39\x2e\
+\x34\x30\x31\x20\x32\x38\x32\x2e\x38\x30\x31\x43\x31\x38\x39\x2e\
+\x34\x30\x31\x20\x32\x38\x32\x2e\x38\x30\x31\x20\x31\x39\x33\x2e\
+\x34\x30\x31\x20\x32\x36\x39\x2e\x32\x30\x31\x20\x31\x39\x32\x2e\
+\x36\x30\x31\x20\x32\x36\x36\x2e\x34\x30\x31\x43\x31\x39\x32\x2e\
+\x36\x30\x31\x20\x32\x36\x36\x2e\x34\x30\x31\x20\x31\x39\x39\x2e\
+\x34\x30\x31\x20\x32\x36\x37\x2e\x36\x30\x31\x20\x31\x39\x38\x2e\
+\x36\x30\x31\x20\x32\x36\x36\x2e\x34\x30\x31\x43\x31\x39\x38\x2e\
+\x36\x30\x31\x20\x32\x36\x36\x2e\x34\x30\x31\x20\x32\x31\x31\x2e\
+\x38\x30\x31\x20\x32\x37\x30\x2e\x38\x30\x31\x20\x32\x31\x33\x2e\
+\x30\x30\x31\x20\x32\x37\x30\x2e\x30\x30\x31\x43\x32\x31\x33\x2e\
+\x30\x30\x31\x20\x32\x37\x30\x2e\x30\x30\x31\x20\x32\x31\x39\x2e\
+\x38\x30\x31\x20\x32\x37\x36\x2e\x38\x30\x31\x20\x32\x32\x30\x2e\
+\x32\x30\x31\x20\x32\x37\x33\x2e\x32\x30\x31\x43\x32\x32\x30\x2e\
+\x32\x30\x31\x20\x32\x37\x33\x2e\x32\x30\x31\x20\x32\x32\x39\x2e\
+\x34\x30\x31\x20\x32\x37\x36\x2e\x30\x30\x31\x20\x32\x32\x37\x2e\
+\x34\x30\x31\x20\x32\x37\x32\x2e\x34\x30\x31\x43\x32\x32\x37\x2e\
+\x34\x30\x31\x20\x32\x37\x32\x2e\x34\x30\x31\x20\x32\x33\x36\x2e\
+\x32\x30\x31\x20\x32\x38\x38\x2e\x30\x30\x31\x20\x32\x33\x36\x2e\
+\x36\x30\x31\x20\x32\x39\x31\x2e\x36\x30\x31\x4c\x32\x33\x39\x2e\
+\x30\x30\x31\x20\x32\x37\x37\x2e\x36\x30\x31\x4c\x32\x34\x31\x2e\
+\x30\x30\x31\x20\x32\x38\x30\x2e\x34\x30\x31\x43\x32\x34\x31\x2e\
+\x30\x30\x31\x20\x32\x38\x30\x2e\x34\x30\x31\x20\x32\x34\x32\x2e\
+\x36\x30\x31\x20\x32\x37\x32\x2e\x38\x30\x31\x20\x32\x34\x31\x2e\
+\x38\x30\x31\x20\x32\x37\x31\x2e\x36\x30\x31\x43\x32\x34\x31\x2e\
+\x30\x30\x31\x20\x32\x37\x30\x2e\x34\x30\x31\x20\x32\x36\x31\x2e\
+\x38\x30\x31\x20\x32\x37\x38\x2e\x34\x30\x31\x20\x32\x36\x36\x2e\
+\x36\x30\x31\x20\x32\x39\x39\x2e\x32\x30\x31\x4c\x32\x36\x38\x2e\
+\x36\x30\x31\x20\x33\x30\x37\x2e\x36\x30\x31\x43\x32\x36\x38\x2e\
+\x36\x30\x31\x20\x33\x30\x37\x2e\x36\x30\x31\x20\x32\x37\x34\x2e\
+\x36\x30\x31\x20\x32\x39\x32\x2e\x38\x30\x31\x20\x32\x37\x33\x2e\
+\x30\x30\x31\x20\x32\x38\x38\x2e\x38\x30\x31\x43\x32\x37\x33\x2e\
+\x30\x30\x31\x20\x32\x38\x38\x2e\x38\x30\x31\x20\x32\x37\x38\x2e\
+\x32\x30\x31\x20\x32\x38\x39\x2e\x36\x30\x31\x20\x32\x37\x38\x2e\
+\x36\x30\x31\x20\x32\x39\x34\x2e\x30\x30\x31\x43\x32\x37\x38\x2e\
+\x36\x30\x31\x20\x32\x39\x34\x2e\x30\x30\x31\x20\x32\x38\x32\x2e\
+\x36\x30\x31\x20\x32\x37\x30\x2e\x38\x30\x31\x20\x32\x37\x37\x2e\
+\x38\x30\x31\x20\x32\x36\x34\x2e\x38\x30\x31\x43\x32\x37\x37\x2e\
+\x38\x30\x31\x20\x32\x36\x34\x2e\x38\x30\x31\x20\x32\x38\x32\x2e\
+\x32\x30\x31\x20\x32\x36\x34\x2e\x30\x30\x31\x20\x32\x38\x33\x2e\
+\x34\x30\x31\x20\x32\x36\x37\x2e\x36\x30\x31\x4c\x32\x38\x33\x2e\
+\x34\x30\x31\x20\x32\x36\x30\x2e\x34\x30\x31\x43\x32\x38\x33\x2e\
+\x34\x30\x31\x20\x32\x36\x30\x2e\x34\x30\x31\x20\x32\x39\x30\x2e\
+\x36\x30\x31\x20\x32\x36\x31\x2e\x32\x30\x31\x20\x32\x39\x30\x2e\
+\x36\x30\x31\x20\x32\x35\x38\x2e\x38\x30\x31\x43\x32\x39\x30\x2e\
+\x36\x30\x31\x20\x32\x35\x38\x2e\x38\x30\x31\x20\x32\x39\x35\x2e\
+\x30\x30\x31\x20\x32\x35\x34\x2e\x38\x30\x31\x20\x32\x39\x37\x2e\
+\x30\x30\x31\x20\x32\x35\x39\x2e\x36\x30\x31\x43\x32\x39\x37\x2e\
+\x30\x30\x31\x20\x32\x35\x39\x2e\x36\x30\x31\x20\x32\x38\x34\x2e\
+\x36\x30\x31\x20\x32\x32\x34\x2e\x34\x30\x31\x20\x33\x30\x33\x2e\
+\x30\x30\x31\x20\x32\x34\x33\x2e\x36\x30\x31\x43\x33\x30\x33\x2e\
+\x30\x30\x31\x20\x32\x34\x33\x2e\x36\x30\x31\x20\x33\x31\x30\x2e\
+\x32\x30\x31\x20\x32\x35\x34\x2e\x34\x30\x31\x20\x33\x30\x36\x2e\
+\x36\x30\x31\x20\x32\x33\x35\x2e\x36\x30\x31\x43\x33\x30\x33\x2e\
+\x30\x30\x31\x20\x32\x31\x36\x2e\x38\x30\x31\x20\x32\x39\x39\x2e\
+\x30\x30\x31\x20\x32\x31\x35\x2e\x32\x30\x31\x20\x33\x30\x33\x2e\
+\x38\x30\x31\x20\x32\x31\x34\x2e\x38\x30\x31\x43\x33\x30\x33\x2e\
+\x38\x30\x31\x20\x32\x31\x34\x2e\x38\x30\x31\x20\x33\x30\x34\x2e\
+\x36\x30\x31\x20\x32\x31\x31\x2e\x32\x30\x31\x20\x33\x30\x32\x2e\
+\x36\x30\x31\x20\x32\x30\x39\x2e\x36\x30\x31\x43\x33\x30\x30\x2e\
+\x36\x30\x31\x20\x32\x30\x38\x2e\x30\x30\x31\x20\x33\x30\x33\x2e\
+\x38\x30\x31\x20\x32\x30\x39\x2e\x36\x30\x31\x20\x33\x30\x33\x2e\
+\x38\x30\x31\x20\x32\x30\x39\x2e\x36\x30\x31\x43\x33\x30\x33\x2e\
+\x38\x30\x31\x20\x32\x30\x39\x2e\x36\x30\x31\x20\x33\x30\x38\x2e\
+\x36\x30\x31\x20\x32\x31\x33\x2e\x36\x30\x31\x20\x33\x30\x33\x2e\
+\x34\x30\x31\x20\x31\x39\x31\x2e\x36\x30\x31\x43\x33\x30\x33\x2e\
+\x34\x30\x31\x20\x31\x39\x31\x2e\x36\x30\x31\x20\x33\x30\x39\x2e\
+\x38\x30\x31\x20\x31\x39\x33\x2e\x32\x30\x31\x20\x32\x39\x37\x2e\
+\x38\x30\x31\x20\x31\x36\x34\x2e\x30\x30\x31\x43\x32\x39\x37\x2e\
+\x38\x30\x31\x20\x31\x36\x34\x2e\x30\x30\x31\x20\x33\x30\x30\x2e\
+\x36\x30\x31\x20\x31\x36\x31\x2e\x36\x30\x31\x20\x32\x39\x36\x2e\
+\x36\x30\x31\x20\x31\x35\x33\x2e\x32\x30\x31\x43\x32\x39\x36\x2e\
+\x36\x30\x31\x20\x31\x35\x33\x2e\x32\x30\x31\x20\x33\x30\x34\x2e\
+\x36\x30\x31\x20\x31\x35\x37\x2e\x36\x30\x31\x20\x33\x30\x37\x2e\
+\x34\x30\x31\x20\x31\x35\x36\x2e\x30\x30\x31\x43\x33\x30\x37\x2e\
+\x34\x30\x31\x20\x31\x35\x36\x2e\x30\x30\x31\x20\x33\x30\x37\x2e\
+\x30\x30\x31\x20\x31\x35\x34\x2e\x34\x30\x31\x20\x33\x30\x33\x2e\
+\x38\x30\x31\x20\x31\x35\x30\x2e\x34\x30\x31\x43\x33\x30\x33\x2e\
+\x38\x30\x31\x20\x31\x35\x30\x2e\x34\x30\x31\x20\x32\x38\x32\x2e\
+\x32\x30\x31\x20\x39\x35\x2e\x36\x20\x33\x30\x32\x2e\x36\x30\x31\
+\x20\x31\x31\x37\x2e\x36\x30\x31\x43\x33\x30\x32\x2e\x36\x30\x31\
+\x20\x31\x31\x37\x2e\x36\x30\x31\x20\x33\x31\x34\x2e\x34\x35\x31\
+\x20\x31\x33\x31\x2e\x31\x35\x31\x20\x33\x30\x38\x2e\x30\x35\x31\
+\x20\x31\x30\x38\x2e\x33\x35\x31\x43\x33\x30\x38\x2e\x30\x35\x31\
+\x20\x31\x30\x38\x2e\x33\x35\x31\x20\x32\x39\x38\x2e\x39\x34\x20\
+\x38\x34\x2e\x33\x34\x31\x20\x32\x39\x39\x2e\x37\x31\x37\x20\x38\
+\x30\x2e\x30\x34\x35\x4c\x2d\x31\x32\x39\x2e\x38\x33\x20\x31\x30\
+\x33\x2e\x30\x36\x35\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x37\x32\x32\x36\x22\x2c\
+\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\
+\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\
+\x32\x39\x39\x2e\x37\x31\x37\x20\x38\x30\x2e\x32\x34\x35\x43\x33\
+\x30\x30\x2e\x33\x34\x35\x20\x38\x30\x2e\x34\x32\x36\x20\x33\x30\
+\x32\x2e\x35\x35\x31\x20\x38\x31\x2e\x35\x35\x20\x33\x30\x33\x2e\
+\x38\x30\x31\x20\x38\x33\x2e\x32\x43\x33\x30\x33\x2e\x38\x30\x31\
+\x20\x38\x33\x2e\x32\x20\x33\x31\x30\x2e\x36\x30\x31\x20\x39\x34\
+\x20\x33\x30\x35\x2e\x34\x30\x31\x20\x37\x35\x2e\x36\x43\x33\x30\
+\x35\x2e\x34\x30\x31\x20\x37\x35\x2e\x36\x20\x32\x39\x36\x2e\x32\
+\x30\x31\x20\x34\x36\x2e\x38\x20\x33\x30\x35\x2e\x30\x30\x31\x20\
+\x35\x38\x43\x33\x30\x35\x2e\x30\x30\x31\x20\x35\x38\x20\x33\x31\
+\x31\x2e\x30\x30\x31\x20\x36\x35\x2e\x32\x20\x33\x30\x37\x2e\x38\
+\x30\x31\x20\x35\x31\x2e\x36\x43\x33\x30\x33\x2e\x39\x33\x36\x20\
+\x33\x35\x2e\x31\x37\x33\x20\x33\x30\x31\x2e\x34\x30\x31\x20\x32\
+\x38\x2e\x38\x20\x33\x30\x31\x2e\x34\x30\x31\x20\x32\x38\x2e\x38\
+\x43\x33\x30\x31\x2e\x34\x30\x31\x20\x32\x38\x2e\x38\x20\x33\x31\
+\x33\x2e\x30\x30\x31\x20\x33\x33\x2e\x36\x20\x32\x38\x36\x2e\x32\
+\x30\x31\x20\x2d\x36\x4c\x32\x39\x35\x2e\x30\x30\x31\x20\x2d\x32\
+\x2e\x34\x43\x32\x39\x35\x2e\x30\x30\x31\x20\x2d\x32\x2e\x34\x20\
+\x32\x37\x35\x2e\x34\x30\x31\x20\x2d\x34\x32\x20\x32\x35\x33\x2e\
+\x38\x30\x31\x20\x2d\x34\x37\x2e\x32\x4c\x32\x34\x35\x2e\x38\x30\
+\x31\x20\x2d\x35\x33\x2e\x32\x43\x32\x34\x35\x2e\x38\x30\x31\x20\
+\x2d\x35\x33\x2e\x32\x20\x32\x38\x34\x2e\x32\x30\x31\x20\x2d\x39\
+\x31\x2e\x32\x20\x32\x37\x31\x2e\x34\x30\x31\x20\x2d\x31\x32\x38\
+\x43\x32\x37\x31\x2e\x34\x30\x31\x20\x2d\x31\x32\x38\x20\x32\x36\
+\x34\x2e\x36\x30\x31\x20\x2d\x31\x33\x33\x2e\x32\x20\x32\x35\x35\
+\x2e\x30\x30\x31\x20\x2d\x31\x32\x34\x43\x32\x35\x35\x2e\x30\x30\
+\x31\x20\x2d\x31\x32\x34\x20\x32\x34\x38\x2e\x36\x30\x31\x20\x2d\
+\x31\x31\x39\x2e\x32\x20\x32\x34\x32\x2e\x36\x30\x31\x20\x2d\x31\
+\x32\x30\x2e\x38\x43\x32\x34\x32\x2e\x36\x30\x31\x20\x2d\x31\x32\
+\x30\x2e\x38\x20\x32\x31\x31\x2e\x38\x30\x31\x20\x2d\x31\x31\x39\
+\x2e\x36\x20\x32\x30\x39\x2e\x38\x30\x31\x20\x2d\x31\x31\x39\x2e\
+\x36\x43\x32\x30\x37\x2e\x38\x30\x31\x20\x2d\x31\x31\x39\x2e\x36\
+\x20\x31\x37\x33\x2e\x30\x30\x31\x20\x2d\x31\x35\x36\x2e\x38\x20\
+\x31\x30\x37\x2e\x34\x30\x31\x20\x2d\x31\x33\x39\x2e\x32\x43\x31\
+\x30\x37\x2e\x34\x30\x31\x20\x2d\x31\x33\x39\x2e\x32\x20\x31\x30\
+\x32\x2e\x32\x30\x31\x20\x2d\x31\x33\x37\x2e\x32\x20\x39\x37\x2e\
+\x38\x30\x31\x20\x2d\x31\x33\x38\x2e\x34\x43\x39\x37\x2e\x38\x30\
+\x31\x20\x2d\x31\x33\x38\x2e\x34\x20\x37\x39\x2e\x34\x20\x2d\x31\
+\x35\x34\x2e\x34\x20\x33\x30\x2e\x36\x20\x2d\x31\x33\x31\x2e\x36\
+\x43\x33\x30\x2e\x36\x20\x2d\x31\x33\x31\x2e\x36\x20\x32\x30\x2e\
+\x36\x20\x2d\x31\x32\x39\x2e\x36\x20\x31\x39\x20\x2d\x31\x32\x39\
+\x2e\x36\x43\x31\x37\x2e\x34\x20\x2d\x31\x32\x39\x2e\x36\x20\x31\
+\x34\x2e\x36\x20\x2d\x31\x32\x39\x2e\x36\x20\x36\x2e\x36\x20\x2d\
+\x31\x32\x33\x2e\x32\x43\x2d\x31\x2e\x34\x20\x2d\x31\x31\x36\x2e\
+\x38\x20\x2d\x31\x2e\x38\x20\x2d\x31\x31\x36\x20\x2d\x33\x2e\x38\
+\x20\x2d\x31\x31\x34\x2e\x34\x43\x2d\x33\x2e\x38\x20\x2d\x31\x31\
+\x34\x2e\x34\x20\x2d\x32\x30\x2e\x32\x20\x2d\x31\x30\x33\x2e\x32\
+\x20\x2d\x32\x35\x20\x2d\x31\x30\x32\x2e\x34\x43\x2d\x32\x35\x20\
+\x2d\x31\x30\x32\x2e\x34\x20\x2d\x33\x36\x2e\x36\x20\x2d\x39\x36\
+\x20\x2d\x34\x31\x20\x2d\x38\x36\x4c\x2d\x34\x34\x2e\x36\x20\x2d\
+\x38\x34\x2e\x38\x43\x2d\x34\x34\x2e\x36\x20\x2d\x38\x34\x2e\x38\
+\x20\x2d\x34\x36\x2e\x32\x20\x2d\x37\x37\x2e\x36\x20\x2d\x34\x36\
+\x2e\x36\x20\x2d\x37\x36\x2e\x34\x43\x2d\x34\x36\x2e\x36\x20\x2d\
+\x37\x36\x2e\x34\x20\x2d\x35\x31\x2e\x34\x20\x2d\x37\x32\x2e\x38\
+\x20\x2d\x35\x32\x2e\x32\x20\x2d\x36\x37\x2e\x32\x43\x2d\x35\x32\
+\x2e\x32\x20\x2d\x36\x37\x2e\x32\x20\x2d\x36\x31\x20\x2d\x36\x31\
+\x2e\x32\x20\x2d\x36\x30\x2e\x36\x20\x2d\x35\x36\x2e\x38\x43\x2d\
+\x36\x30\x2e\x36\x20\x2d\x35\x36\x2e\x38\x20\x2d\x36\x32\x2e\x32\
+\x20\x2d\x35\x31\x2e\x36\x20\x2d\x36\x33\x20\x2d\x34\x36\x2e\x38\
+\x43\x2d\x36\x33\x20\x2d\x34\x36\x2e\x38\x20\x2d\x37\x30\x2e\x32\
+\x20\x2d\x34\x32\x20\x2d\x36\x39\x2e\x34\x20\x2d\x33\x39\x2e\x32\
+\x43\x2d\x36\x39\x2e\x34\x20\x2d\x33\x39\x2e\x32\x20\x2d\x37\x37\
+\x20\x2d\x32\x35\x2e\x32\x20\x2d\x37\x35\x2e\x38\x20\x2d\x31\x38\
+\x2e\x34\x43\x2d\x37\x35\x2e\x38\x20\x2d\x31\x38\x2e\x34\x20\x2d\
+\x38\x32\x2e\x32\x20\x2d\x31\x38\x2e\x38\x20\x2d\x38\x35\x20\x2d\
+\x31\x36\x2e\x34\x43\x2d\x38\x35\x20\x2d\x31\x36\x2e\x34\x20\x2d\
+\x38\x35\x2e\x38\x20\x2d\x31\x31\x2e\x36\x20\x2d\x38\x37\x2e\x34\
+\x20\x2d\x31\x31\x2e\x32\x43\x2d\x38\x37\x2e\x34\x20\x2d\x31\x31\
+\x2e\x32\x20\x2d\x39\x30\x2e\x32\x20\x2d\x31\x30\x20\x2d\x38\x37\
+\x2e\x38\x20\x2d\x36\x43\x2d\x38\x37\x2e\x38\x20\x2d\x36\x20\x2d\
+\x38\x39\x2e\x34\x20\x2d\x33\x2e\x32\x20\x2d\x38\x39\x2e\x38\x20\
+\x2d\x31\x2e\x36\x43\x2d\x38\x39\x2e\x38\x20\x2d\x31\x2e\x36\x20\
+\x2d\x38\x39\x20\x31\x2e\x32\x20\x2d\x39\x33\x2e\x34\x20\x36\x2e\
+\x38\x43\x2d\x39\x33\x2e\x34\x20\x36\x2e\x38\x20\x2d\x39\x39\x2e\
+\x38\x20\x32\x35\x2e\x36\x20\x2d\x39\x37\x2e\x38\x20\x33\x30\x2e\
+\x38\x43\x2d\x39\x37\x2e\x38\x20\x33\x30\x2e\x38\x20\x2d\x39\x37\
+\x2e\x34\x20\x33\x35\x2e\x36\x20\x2d\x31\x30\x30\x2e\x32\x20\x33\
+\x37\x2e\x32\x43\x2d\x31\x30\x30\x2e\x32\x20\x33\x37\x2e\x32\x20\
+\x2d\x31\x30\x33\x2e\x38\x20\x33\x36\x2e\x38\x20\x2d\x39\x35\x2e\
+\x34\x20\x34\x38\x2e\x38\x43\x2d\x39\x35\x2e\x34\x20\x34\x38\x2e\
+\x38\x20\x2d\x39\x34\x2e\x36\x20\x35\x30\x20\x2d\x39\x37\x2e\x38\
+\x20\x35\x32\x2e\x34\x43\x2d\x39\x37\x2e\x38\x20\x35\x32\x2e\x34\
+\x20\x2d\x31\x31\x35\x20\x35\x36\x20\x2d\x31\x31\x37\x2e\x34\x20\
+\x37\x32\x2e\x34\x43\x2d\x31\x31\x37\x2e\x34\x20\x37\x32\x2e\x34\
+\x20\x2d\x31\x33\x31\x20\x38\x37\x2e\x32\x20\x2d\x31\x33\x31\x20\
+\x39\x32\x2e\x34\x43\x2d\x31\x33\x31\x20\x39\x34\x2e\x37\x30\x35\
+\x20\x2d\x31\x33\x30\x2e\x37\x32\x39\x20\x39\x37\x2e\x38\x35\x32\
+\x20\x2d\x31\x33\x30\x2e\x30\x33\x20\x31\x30\x32\x2e\x34\x36\x35\
+\x43\x2d\x31\x33\x30\x2e\x30\x33\x20\x31\x30\x32\x2e\x34\x36\x35\
+\x20\x2d\x31\x33\x30\x2e\x36\x20\x31\x31\x30\x2e\x38\x30\x31\x20\
+\x2d\x31\x30\x33\x20\x31\x31\x31\x2e\x36\x30\x31\x43\x2d\x37\x35\
+\x2e\x34\x20\x31\x31\x32\x2e\x34\x30\x31\x20\x32\x39\x39\x2e\x37\
+\x31\x37\x20\x38\x30\x2e\x32\x34\x35\x20\x32\x39\x39\x2e\x37\x31\
+\x37\x20\x38\x30\x2e\x32\x34\x35\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x37\x32\x32\
+\x36\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\
+\x31\x31\x35\x2e\x36\x20\x31\x30\x32\x2e\x36\x43\x2d\x31\x34\x30\
+\x2e\x36\x20\x36\x33\x2e\x32\x20\x2d\x31\x32\x36\x2e\x32\x20\x31\
+\x31\x39\x2e\x36\x30\x31\x20\x2d\x31\x32\x36\x2e\x32\x20\x31\x31\
+\x39\x2e\x36\x30\x31\x43\x2d\x31\x31\x37\x2e\x34\x20\x31\x35\x34\
+\x2e\x30\x30\x31\x20\x31\x32\x2e\x32\x20\x31\x31\x36\x2e\x34\x30\
+\x31\x20\x31\x32\x2e\x32\x20\x31\x31\x36\x2e\x34\x30\x31\x43\x31\
+\x32\x2e\x32\x20\x31\x31\x36\x2e\x34\x30\x31\x20\x31\x38\x31\x2e\
+\x30\x30\x31\x20\x38\x36\x20\x31\x39\x32\x2e\x32\x30\x31\x20\x38\
+\x32\x43\x32\x30\x33\x2e\x34\x30\x31\x20\x37\x38\x20\x32\x39\x38\
+\x2e\x36\x30\x31\x20\x38\x34\x2e\x34\x20\x32\x39\x38\x2e\x36\x30\
+\x31\x20\x38\x34\x2e\x34\x4c\x32\x39\x33\x2e\x30\x30\x31\x20\x36\
+\x37\x2e\x36\x43\x32\x32\x38\x2e\x32\x30\x31\x20\x32\x31\x2e\x32\
+\x20\x32\x30\x39\x2e\x30\x30\x31\x20\x34\x34\x2e\x34\x20\x31\x39\
+\x35\x2e\x34\x30\x31\x20\x34\x30\x2e\x34\x43\x31\x38\x31\x2e\x38\
+\x30\x31\x20\x33\x36\x2e\x34\x20\x31\x38\x34\x2e\x32\x30\x31\x20\
+\x34\x36\x20\x31\x38\x31\x2e\x30\x30\x31\x20\x34\x36\x2e\x38\x43\
+\x31\x37\x37\x2e\x38\x30\x31\x20\x34\x37\x2e\x36\x20\x31\x33\x38\
+\x2e\x36\x30\x31\x20\x32\x32\x2e\x38\x20\x31\x33\x32\x2e\x32\x30\
+\x31\x20\x32\x33\x2e\x36\x43\x31\x32\x35\x2e\x38\x30\x31\x20\x32\
+\x34\x2e\x34\x20\x31\x30\x30\x2e\x34\x35\x39\x20\x30\x2e\x36\x34\
+\x39\x20\x31\x31\x35\x2e\x34\x30\x31\x20\x33\x32\x2e\x34\x43\x31\
+\x33\x31\x2e\x34\x30\x31\x20\x36\x36\x2e\x34\x20\x35\x37\x20\x37\
+\x31\x2e\x36\x20\x34\x30\x2e\x32\x20\x36\x30\x2e\x34\x43\x32\x33\
+\x2e\x34\x20\x34\x39\x2e\x32\x20\x34\x37\x2e\x34\x20\x37\x38\x2e\
+\x38\x20\x34\x37\x2e\x34\x20\x37\x38\x2e\x38\x43\x36\x35\x2e\x38\
+\x20\x39\x38\x2e\x38\x20\x33\x31\x2e\x34\x20\x38\x32\x20\x33\x31\
+\x2e\x34\x20\x38\x32\x43\x2d\x33\x20\x36\x39\x2e\x32\x20\x2d\x32\
+\x37\x20\x39\x34\x2e\x38\x20\x2d\x33\x30\x2e\x32\x20\x39\x35\x2e\
+\x36\x43\x2d\x33\x33\x2e\x34\x20\x39\x36\x2e\x34\x20\x2d\x33\x38\
+\x2e\x32\x20\x39\x39\x2e\x36\x20\x2d\x33\x39\x20\x39\x33\x2e\x32\
+\x43\x2d\x33\x39\x2e\x38\x20\x38\x36\x2e\x38\x20\x2d\x34\x37\x2e\
+\x33\x31\x20\x37\x30\x2e\x30\x39\x39\x20\x2d\x37\x39\x20\x39\x36\
+\x2e\x34\x43\x2d\x39\x39\x20\x31\x31\x33\x2e\x30\x30\x31\x20\x2d\
+\x31\x31\x32\x2e\x38\x20\x39\x31\x20\x2d\x31\x31\x32\x2e\x38\x20\
+\x39\x31\x4c\x2d\x31\x31\x35\x2e\x36\x20\x31\x30\x32\x2e\x36\x7a\
+\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\
+\x22\x23\x65\x38\x37\x66\x33\x61\x22\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x31\x33\x33\x2e\x35\x31\x20\x32\x35\x2e\
+\x33\x34\x36\x43\x31\x32\x37\x2e\x31\x31\x20\x32\x36\x2e\x31\x34\
+\x36\x20\x31\x30\x31\x2e\x37\x34\x33\x20\x32\x2e\x34\x30\x37\x20\
+\x31\x31\x36\x2e\x37\x31\x20\x33\x34\x2e\x31\x34\x36\x43\x31\x33\
+\x33\x2e\x33\x31\x20\x36\x39\x2e\x33\x34\x36\x20\x35\x38\x2e\x33\
+\x31\x20\x37\x33\x2e\x33\x34\x36\x20\x34\x31\x2e\x35\x31\x20\x36\
+\x32\x2e\x31\x34\x36\x43\x32\x34\x2e\x37\x30\x39\x20\x35\x30\x2e\
+\x39\x34\x36\x20\x34\x38\x2e\x37\x31\x20\x38\x30\x2e\x35\x34\x36\
+\x20\x34\x38\x2e\x37\x31\x20\x38\x30\x2e\x35\x34\x36\x43\x36\x37\
+\x2e\x31\x31\x20\x31\x30\x30\x2e\x35\x34\x36\x20\x33\x32\x2e\x37\
+\x30\x39\x20\x38\x33\x2e\x37\x34\x36\x20\x33\x32\x2e\x37\x30\x39\
+\x20\x38\x33\x2e\x37\x34\x36\x43\x2d\x31\x2e\x36\x39\x31\x20\x37\
+\x30\x2e\x39\x34\x36\x20\x2d\x32\x35\x2e\x36\x39\x31\x20\x39\x36\
+\x2e\x35\x34\x36\x20\x2d\x32\x38\x2e\x38\x39\x31\x20\x39\x37\x2e\
+\x33\x34\x36\x43\x2d\x33\x32\x2e\x30\x39\x31\x20\x39\x38\x2e\x31\
+\x34\x36\x20\x2d\x33\x36\x2e\x38\x39\x31\x20\x31\x30\x31\x2e\x33\
+\x34\x36\x20\x2d\x33\x37\x2e\x36\x39\x31\x20\x39\x34\x2e\x39\x34\
+\x36\x43\x2d\x33\x38\x2e\x34\x39\x31\x20\x38\x38\x2e\x35\x34\x36\
+\x20\x2d\x34\x35\x2e\x38\x37\x20\x37\x32\x2e\x30\x31\x32\x20\x2d\
+\x37\x37\x2e\x36\x39\x31\x20\x39\x38\x2e\x31\x34\x36\x43\x2d\x39\
+\x38\x2e\x39\x32\x37\x20\x31\x31\x35\x2e\x34\x39\x32\x20\x2d\x31\
+\x31\x32\x2e\x34\x31\x38\x20\x39\x34\x2e\x30\x33\x37\x20\x2d\x31\
+\x31\x32\x2e\x34\x31\x38\x20\x39\x34\x2e\x30\x33\x37\x4c\x2d\x31\
+\x31\x35\x2e\x36\x31\x38\x20\x31\x30\x34\x2e\x31\x34\x36\x43\x2d\
+\x31\x34\x30\x2e\x36\x31\x38\x20\x36\x34\x2e\x33\x34\x36\x20\x2d\
+\x31\x32\x35\x2e\x35\x34\x36\x20\x31\x32\x32\x2e\x36\x35\x35\x20\
+\x2d\x31\x32\x35\x2e\x35\x34\x36\x20\x31\x32\x32\x2e\x36\x35\x35\
+\x43\x2d\x31\x31\x36\x2e\x37\x34\x35\x20\x31\x35\x37\x2e\x30\x35\
+\x36\x20\x31\x33\x2e\x35\x30\x39\x20\x31\x31\x38\x2e\x31\x34\x36\
+\x20\x31\x33\x2e\x35\x30\x39\x20\x31\x31\x38\x2e\x31\x34\x36\x43\
+\x31\x33\x2e\x35\x30\x39\x20\x31\x31\x38\x2e\x31\x34\x36\x20\x31\
+\x38\x32\x2e\x33\x31\x20\x38\x37\x2e\x37\x34\x36\x20\x31\x39\x33\
+\x2e\x35\x31\x20\x38\x33\x2e\x37\x34\x36\x43\x32\x30\x34\x2e\x37\
+\x31\x20\x37\x39\x2e\x37\x34\x36\x20\x32\x39\x39\x2e\x30\x33\x38\
+\x20\x38\x36\x2e\x30\x37\x33\x20\x32\x39\x39\x2e\x30\x33\x38\x20\
+\x38\x36\x2e\x30\x37\x33\x4c\x32\x39\x33\x2e\x35\x31\x20\x36\x38\
+\x2e\x37\x36\x34\x43\x32\x32\x38\x2e\x37\x31\x20\x32\x32\x2e\x33\
+\x36\x34\x20\x32\x31\x30\x2e\x33\x31\x20\x34\x36\x2e\x31\x34\x36\
+\x20\x31\x39\x36\x2e\x37\x31\x20\x34\x32\x2e\x31\x34\x36\x43\x31\
+\x38\x33\x2e\x31\x31\x20\x33\x38\x2e\x31\x34\x36\x20\x31\x38\x35\
+\x2e\x35\x31\x20\x34\x37\x2e\x37\x34\x36\x20\x31\x38\x32\x2e\x33\
+\x31\x20\x34\x38\x2e\x35\x34\x36\x43\x31\x37\x39\x2e\x31\x31\x20\
+\x34\x39\x2e\x33\x34\x36\x20\x31\x33\x39\x2e\x39\x31\x20\x32\x34\
+\x2e\x35\x34\x36\x20\x31\x33\x33\x2e\x35\x31\x20\x32\x35\x2e\x33\
+\x34\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x65\x61\x38\x63\x34\x64\x22\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x33\x34\x2e\x38\x31\x39\
+\x20\x32\x37\x2e\x30\x39\x31\x43\x31\x32\x38\x2e\x34\x31\x39\x20\
+\x32\x37\x2e\x38\x39\x31\x20\x31\x30\x33\x2e\x36\x38\x35\x20\x33\
+\x2e\x38\x36\x32\x20\x31\x31\x38\x2e\x30\x31\x39\x20\x33\x35\x2e\
+\x38\x39\x31\x43\x31\x33\x34\x2e\x32\x31\x39\x20\x37\x32\x2e\x30\
+\x39\x32\x20\x35\x39\x2e\x36\x31\x39\x20\x37\x35\x2e\x30\x39\x32\
+\x20\x34\x32\x2e\x38\x31\x39\x20\x36\x33\x2e\x38\x39\x32\x43\x32\
+\x36\x2e\x30\x31\x39\x20\x35\x32\x2e\x36\x39\x32\x20\x35\x30\x2e\
+\x30\x31\x39\x20\x38\x32\x2e\x32\x39\x32\x20\x35\x30\x2e\x30\x31\
+\x39\x20\x38\x32\x2e\x32\x39\x32\x43\x36\x38\x2e\x34\x31\x39\x20\
+\x31\x30\x32\x2e\x32\x39\x32\x20\x33\x34\x2e\x30\x31\x39\x20\x38\
+\x35\x2e\x34\x39\x32\x20\x33\x34\x2e\x30\x31\x39\x20\x38\x35\x2e\
+\x34\x39\x32\x43\x2d\x30\x2e\x33\x38\x31\x20\x37\x32\x2e\x36\x39\
+\x32\x20\x2d\x32\x34\x2e\x33\x38\x32\x20\x39\x38\x2e\x32\x39\x32\
+\x20\x2d\x32\x37\x2e\x35\x38\x32\x20\x39\x39\x2e\x30\x39\x32\x43\
+\x2d\x33\x30\x2e\x37\x38\x32\x20\x39\x39\x2e\x38\x39\x32\x20\x2d\
+\x33\x35\x2e\x35\x38\x32\x20\x31\x30\x33\x2e\x30\x39\x32\x20\x2d\
+\x33\x36\x2e\x33\x38\x32\x20\x39\x36\x2e\x36\x39\x32\x43\x2d\x33\
+\x37\x2e\x31\x38\x32\x20\x39\x30\x2e\x32\x39\x32\x20\x2d\x34\x34\
+\x2e\x34\x33\x20\x37\x33\x2e\x39\x32\x35\x20\x2d\x37\x36\x2e\x33\
+\x38\x32\x20\x39\x39\x2e\x38\x39\x32\x43\x2d\x39\x38\x2e\x38\x35\
+\x35\x20\x31\x31\x37\x2e\x39\x38\x33\x20\x2d\x31\x31\x32\x2e\x30\
+\x33\x36\x20\x39\x37\x2e\x30\x37\x34\x20\x2d\x31\x31\x32\x2e\x30\
+\x33\x36\x20\x39\x37\x2e\x30\x37\x34\x4c\x2d\x31\x31\x35\x2e\x36\
+\x33\x36\x20\x31\x30\x35\x2e\x36\x39\x32\x43\x2d\x31\x33\x39\x2e\
+\x34\x33\x36\x20\x36\x36\x2e\x36\x39\x32\x20\x2d\x31\x32\x34\x2e\
+\x38\x39\x31\x20\x31\x32\x35\x2e\x37\x31\x20\x2d\x31\x32\x34\x2e\
+\x38\x39\x31\x20\x31\x32\x35\x2e\x37\x31\x43\x2d\x31\x31\x36\x2e\
+\x30\x39\x31\x20\x31\x36\x30\x2e\x31\x31\x20\x31\x34\x2e\x38\x31\
+\x39\x20\x31\x31\x39\x2e\x38\x39\x32\x20\x31\x34\x2e\x38\x31\x39\
+\x20\x31\x31\x39\x2e\x38\x39\x32\x43\x31\x34\x2e\x38\x31\x39\x20\
+\x31\x31\x39\x2e\x38\x39\x32\x20\x31\x38\x33\x2e\x36\x31\x39\x20\
+\x38\x39\x2e\x34\x39\x32\x20\x31\x39\x34\x2e\x38\x31\x39\x20\x38\
+\x35\x2e\x34\x39\x32\x43\x32\x30\x36\x2e\x30\x31\x39\x20\x38\x31\
+\x2e\x34\x39\x32\x20\x32\x39\x39\x2e\x34\x37\x34\x20\x38\x37\x2e\
+\x37\x34\x36\x20\x32\x39\x39\x2e\x34\x37\x34\x20\x38\x37\x2e\x37\
+\x34\x36\x4c\x32\x39\x34\x2e\x30\x32\x20\x36\x39\x2e\x39\x32\x38\
+\x43\x32\x32\x39\x2e\x32\x31\x39\x20\x32\x33\x2e\x35\x32\x38\x20\
+\x32\x31\x31\x2e\x36\x31\x39\x20\x34\x37\x2e\x38\x39\x31\x20\x31\
+\x39\x38\x2e\x30\x31\x39\x20\x34\x33\x2e\x38\x39\x31\x43\x31\x38\
+\x34\x2e\x34\x31\x39\x20\x33\x39\x2e\x38\x39\x31\x20\x31\x38\x36\
+\x2e\x38\x31\x39\x20\x34\x39\x2e\x34\x39\x31\x20\x31\x38\x33\x2e\
+\x36\x31\x39\x20\x35\x30\x2e\x32\x39\x32\x43\x31\x38\x30\x2e\x34\
+\x31\x39\x20\x35\x31\x2e\x30\x39\x32\x20\x31\x34\x31\x2e\x32\x31\
+\x39\x20\x32\x36\x2e\x32\x39\x31\x20\x31\x33\x34\x2e\x38\x31\x39\
+\x20\x32\x37\x2e\x30\x39\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x65\x63\x39\x39\x36\x31\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x33\
+\x36\x2e\x31\x32\x38\x20\x32\x38\x2e\x38\x33\x37\x43\x31\x32\x39\
+\x2e\x37\x32\x38\x20\x32\x39\x2e\x36\x33\x37\x20\x31\x30\x34\x2e\
+\x39\x39\x39\x20\x35\x2e\x36\x30\x35\x20\x31\x31\x39\x2e\x33\x32\
+\x38\x20\x33\x37\x2e\x36\x33\x37\x43\x31\x33\x36\x2e\x31\x32\x38\
+\x20\x37\x35\x2e\x31\x39\x33\x20\x36\x30\x2e\x33\x39\x34\x20\x37\
+\x36\x2e\x34\x38\x32\x20\x34\x34\x2e\x31\x32\x38\x20\x36\x35\x2e\
+\x36\x33\x37\x43\x32\x37\x2e\x33\x32\x38\x20\x35\x34\x2e\x34\x33\
+\x37\x20\x35\x31\x2e\x33\x32\x38\x20\x38\x34\x2e\x30\x33\x37\x20\
+\x35\x31\x2e\x33\x32\x38\x20\x38\x34\x2e\x30\x33\x37\x43\x36\x39\
+\x2e\x37\x32\x38\x20\x31\x30\x34\x2e\x30\x33\x37\x20\x33\x35\x2e\
+\x33\x32\x38\x20\x38\x37\x2e\x32\x33\x37\x20\x33\x35\x2e\x33\x32\
+\x38\x20\x38\x37\x2e\x32\x33\x37\x43\x30\x2e\x39\x32\x38\x20\x37\
+\x34\x2e\x34\x33\x37\x20\x2d\x32\x33\x2e\x30\x37\x32\x20\x31\x30\
+\x30\x2e\x30\x33\x37\x20\x2d\x32\x36\x2e\x32\x37\x32\x20\x31\x30\
+\x30\x2e\x38\x33\x37\x43\x2d\x32\x39\x2e\x34\x37\x32\x20\x31\x30\
+\x31\x2e\x36\x33\x37\x20\x2d\x33\x34\x2e\x32\x37\x32\x20\x31\x30\
+\x34\x2e\x38\x33\x37\x20\x2d\x33\x35\x2e\x30\x37\x32\x20\x39\x38\
+\x2e\x34\x33\x37\x43\x2d\x33\x35\x2e\x38\x37\x32\x20\x39\x32\x2e\
+\x30\x33\x37\x20\x2d\x34\x32\x2e\x39\x38\x39\x20\x37\x35\x2e\x38\
+\x33\x39\x20\x2d\x37\x35\x2e\x30\x37\x33\x20\x31\x30\x31\x2e\x36\
+\x33\x37\x43\x2d\x39\x38\x2e\x37\x38\x32\x20\x31\x32\x30\x2e\x34\
+\x37\x34\x20\x2d\x31\x31\x31\x2e\x36\x35\x35\x20\x31\x30\x30\x2e\
+\x31\x31\x20\x2d\x31\x31\x31\x2e\x36\x35\x35\x20\x31\x30\x30\x2e\
+\x31\x31\x4c\x2d\x31\x31\x35\x2e\x36\x35\x35\x20\x31\x30\x37\x2e\
+\x32\x33\x37\x43\x2d\x31\x33\x37\x2e\x34\x35\x35\x20\x37\x30\x2e\
+\x34\x33\x37\x20\x2d\x31\x32\x34\x2e\x32\x33\x36\x20\x31\x32\x38\
+\x2e\x37\x36\x35\x20\x2d\x31\x32\x34\x2e\x32\x33\x36\x20\x31\x32\
+\x38\x2e\x37\x36\x35\x43\x2d\x31\x31\x35\x2e\x34\x33\x36\x20\x31\
+\x36\x33\x2e\x31\x36\x35\x20\x31\x36\x2e\x31\x32\x38\x20\x31\x32\
+\x31\x2e\x36\x33\x37\x20\x31\x36\x2e\x31\x32\x38\x20\x31\x32\x31\
+\x2e\x36\x33\x37\x43\x31\x36\x2e\x31\x32\x38\x20\x31\x32\x31\x2e\
+\x36\x33\x37\x20\x31\x38\x34\x2e\x39\x32\x38\x20\x39\x31\x2e\x32\
+\x33\x37\x20\x31\x39\x36\x2e\x31\x32\x39\x20\x38\x37\x2e\x32\x33\
+\x37\x43\x32\x30\x37\x2e\x33\x32\x39\x20\x38\x33\x2e\x32\x33\x37\
+\x20\x32\x39\x39\x2e\x39\x31\x31\x20\x38\x39\x2e\x34\x31\x39\x20\
+\x32\x39\x39\x2e\x39\x31\x31\x20\x38\x39\x2e\x34\x31\x39\x4c\x32\
+\x39\x34\x2e\x35\x32\x39\x20\x37\x31\x2e\x30\x39\x32\x43\x32\x32\
+\x39\x2e\x37\x32\x39\x20\x32\x34\x2e\x36\x39\x31\x20\x32\x31\x32\
+\x2e\x39\x32\x39\x20\x34\x39\x2e\x36\x33\x37\x20\x31\x39\x39\x2e\
+\x33\x32\x39\x20\x34\x35\x2e\x36\x33\x37\x43\x31\x38\x35\x2e\x37\
+\x32\x38\x20\x34\x31\x2e\x36\x33\x37\x20\x31\x38\x38\x2e\x31\x32\
+\x38\x20\x35\x31\x2e\x32\x33\x37\x20\x31\x38\x34\x2e\x39\x32\x38\
+\x20\x35\x32\x2e\x30\x33\x37\x43\x31\x38\x31\x2e\x37\x32\x38\x20\
+\x35\x32\x2e\x38\x33\x37\x20\x31\x34\x32\x2e\x35\x32\x38\x20\x32\
+\x38\x2e\x30\x33\x37\x20\x31\x33\x36\x2e\x31\x32\x38\x20\x32\x38\
+\x2e\x38\x33\x37\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x65\x65\x61\x35\x37\x35\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x33\x37\x2e\x34\
+\x33\x38\x20\x33\x30\x2e\x35\x38\x33\x43\x31\x33\x31\x2e\x30\x33\
+\x37\x20\x33\x31\x2e\x33\x38\x33\x20\x31\x30\x36\x2e\x38\x31\x34\
+\x20\x37\x2e\x31\x32\x39\x20\x31\x32\x30\x2e\x36\x33\x37\x20\x33\
+\x39\x2e\x33\x38\x33\x43\x31\x33\x37\x2e\x34\x33\x38\x20\x37\x38\
+\x2e\x35\x38\x33\x20\x36\x32\x2e\x32\x33\x37\x20\x37\x38\x2e\x35\
+\x38\x33\x20\x34\x35\x2e\x34\x33\x37\x20\x36\x37\x2e\x33\x38\x33\
+\x43\x32\x38\x2e\x36\x33\x37\x20\x35\x36\x2e\x31\x38\x33\x20\x35\
+\x32\x2e\x36\x33\x37\x20\x38\x35\x2e\x37\x38\x33\x20\x35\x32\x2e\
+\x36\x33\x37\x20\x38\x35\x2e\x37\x38\x33\x43\x37\x31\x2e\x30\x33\
+\x37\x20\x31\x30\x35\x2e\x37\x38\x33\x20\x33\x36\x2e\x36\x33\x37\
+\x20\x38\x38\x2e\x39\x38\x33\x20\x33\x36\x2e\x36\x33\x37\x20\x38\
+\x38\x2e\x39\x38\x33\x43\x32\x2e\x32\x33\x37\x20\x37\x36\x2e\x31\
+\x38\x33\x20\x2d\x32\x31\x2e\x37\x36\x33\x20\x31\x30\x31\x2e\x37\
+\x38\x33\x20\x2d\x32\x34\x2e\x39\x36\x33\x20\x31\x30\x32\x2e\x35\
+\x38\x33\x43\x2d\x32\x38\x2e\x31\x36\x33\x20\x31\x30\x33\x2e\x33\
+\x38\x33\x20\x2d\x33\x32\x2e\x39\x36\x33\x20\x31\x30\x36\x2e\x35\
+\x38\x33\x20\x2d\x33\x33\x2e\x37\x36\x33\x20\x31\x30\x30\x2e\x31\
+\x38\x33\x43\x2d\x33\x34\x2e\x35\x36\x33\x20\x39\x33\x2e\x37\x38\
+\x33\x20\x2d\x34\x31\x2e\x35\x34\x38\x20\x37\x37\x2e\x37\x35\x32\
+\x20\x2d\x37\x33\x2e\x37\x36\x33\x20\x31\x30\x33\x2e\x33\x38\x33\
+\x43\x2d\x39\x38\x2e\x37\x30\x39\x20\x31\x32\x32\x2e\x39\x36\x35\
+\x20\x2d\x31\x31\x31\x2e\x32\x37\x33\x20\x31\x30\x33\x2e\x31\x34\
+\x36\x20\x2d\x31\x31\x31\x2e\x32\x37\x33\x20\x31\x30\x33\x2e\x31\
+\x34\x36\x4c\x2d\x31\x31\x35\x2e\x36\x37\x33\x20\x31\x30\x38\x2e\
+\x37\x38\x33\x43\x2d\x31\x33\x35\x2e\x34\x37\x33\x20\x37\x33\x2e\
+\x39\x38\x32\x20\x2d\x31\x32\x33\x2e\x35\x38\x32\x20\x31\x33\x31\
+\x2e\x38\x31\x39\x20\x2d\x31\x32\x33\x2e\x35\x38\x32\x20\x31\x33\
+\x31\x2e\x38\x31\x39\x43\x2d\x31\x31\x34\x2e\x37\x38\x32\x20\x31\
+\x36\x36\x2e\x32\x32\x20\x31\x37\x2e\x34\x33\x37\x20\x31\x32\x33\
+\x2e\x33\x38\x33\x20\x31\x37\x2e\x34\x33\x37\x20\x31\x32\x33\x2e\
+\x33\x38\x33\x43\x31\x37\x2e\x34\x33\x37\x20\x31\x32\x33\x2e\x33\
+\x38\x33\x20\x31\x38\x36\x2e\x32\x33\x38\x20\x39\x32\x2e\x39\x38\
+\x33\x20\x31\x39\x37\x2e\x34\x33\x38\x20\x38\x38\x2e\x39\x38\x33\
+\x43\x32\x30\x38\x2e\x36\x33\x38\x20\x38\x34\x2e\x39\x38\x33\x20\
+\x33\x30\x30\x2e\x33\x34\x37\x20\x39\x31\x2e\x30\x39\x32\x20\x33\
+\x30\x30\x2e\x33\x34\x37\x20\x39\x31\x2e\x30\x39\x32\x4c\x32\x39\
+\x35\x2e\x30\x33\x38\x20\x37\x32\x2e\x32\x35\x35\x43\x32\x33\x30\
+\x2e\x32\x33\x38\x20\x32\x35\x2e\x38\x35\x35\x20\x32\x31\x34\x2e\
+\x32\x33\x38\x20\x35\x31\x2e\x33\x38\x33\x20\x32\x30\x30\x2e\x36\
+\x33\x38\x20\x34\x37\x2e\x33\x38\x33\x43\x31\x38\x37\x2e\x30\x33\
+\x38\x20\x34\x33\x2e\x33\x38\x33\x20\x31\x38\x39\x2e\x34\x33\x38\
+\x20\x35\x32\x2e\x39\x38\x33\x20\x31\x38\x36\x2e\x32\x33\x38\x20\
+\x35\x33\x2e\x37\x38\x33\x43\x31\x38\x33\x2e\x30\x33\x38\x20\x35\
+\x34\x2e\x35\x38\x33\x20\x31\x34\x33\x2e\x38\x33\x38\x20\x32\x39\
+\x2e\x37\x38\x33\x20\x31\x33\x37\x2e\x34\x33\x38\x20\x33\x30\x2e\
+\x35\x38\x33\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x66\x31\x62\x32\x38\x38\x22\x2c\x0a\x20\
+\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x33\x38\x2e\x37\x34\
+\x37\x20\x33\x32\x2e\x33\x32\x38\x43\x31\x33\x32\x2e\x33\x34\x37\
+\x20\x33\x33\x2e\x31\x32\x38\x20\x31\x30\x36\x2e\x33\x38\x33\x20\
+\x39\x2e\x36\x37\x37\x20\x31\x32\x31\x2e\x39\x34\x37\x20\x34\x31\
+\x2e\x31\x32\x38\x43\x31\x34\x31\x2e\x31\x34\x37\x20\x37\x39\x2e\
+\x39\x32\x38\x20\x36\x33\x2e\x35\x34\x36\x20\x38\x30\x2e\x33\x32\
+\x38\x20\x34\x36\x2e\x37\x34\x36\x20\x36\x39\x2e\x31\x32\x38\x43\
+\x32\x39\x2e\x39\x34\x36\x20\x35\x37\x2e\x39\x32\x38\x20\x35\x33\
+\x2e\x39\x34\x36\x20\x38\x37\x2e\x35\x32\x38\x20\x35\x33\x2e\x39\
+\x34\x36\x20\x38\x37\x2e\x35\x32\x38\x43\x37\x32\x2e\x33\x34\x36\
+\x20\x31\x30\x37\x2e\x35\x32\x38\x20\x33\x37\x2e\x39\x34\x36\x20\
+\x39\x30\x2e\x37\x32\x38\x20\x33\x37\x2e\x39\x34\x36\x20\x39\x30\
+\x2e\x37\x32\x38\x43\x33\x2e\x35\x34\x36\x20\x37\x37\x2e\x39\x32\
+\x38\x20\x2d\x32\x30\x2e\x34\x35\x34\x20\x31\x30\x33\x2e\x35\x32\
+\x38\x20\x2d\x32\x33\x2e\x36\x35\x34\x20\x31\x30\x34\x2e\x33\x32\
+\x38\x43\x2d\x32\x36\x2e\x38\x35\x34\x20\x31\x30\x35\x2e\x31\x32\
+\x38\x20\x2d\x33\x31\x2e\x36\x35\x34\x20\x31\x30\x38\x2e\x33\x32\
+\x38\x20\x2d\x33\x32\x2e\x34\x35\x34\x20\x31\x30\x31\x2e\x39\x32\
+\x38\x43\x2d\x33\x33\x2e\x32\x35\x34\x20\x39\x35\x2e\x35\x32\x38\
+\x20\x2d\x34\x30\x2e\x31\x30\x38\x20\x37\x39\x2e\x36\x36\x35\x20\
+\x2d\x37\x32\x2e\x34\x35\x34\x20\x31\x30\x35\x2e\x31\x32\x38\x43\
+\x2d\x39\x38\x2e\x36\x33\x36\x20\x31\x32\x35\x2e\x34\x35\x36\x20\
+\x2d\x31\x31\x30\x2e\x38\x39\x31\x20\x31\x30\x36\x2e\x31\x38\x33\
+\x20\x2d\x31\x31\x30\x2e\x38\x39\x31\x20\x31\x30\x36\x2e\x31\x38\
+\x33\x4c\x2d\x31\x31\x35\x2e\x36\x39\x31\x20\x31\x31\x30\x2e\x33\
+\x32\x38\x43\x2d\x31\x33\x33\x2e\x36\x39\x31\x20\x37\x37\x2e\x31\
+\x32\x38\x20\x2d\x31\x32\x32\x2e\x39\x32\x37\x20\x31\x33\x34\x2e\
+\x38\x37\x34\x20\x2d\x31\x32\x32\x2e\x39\x32\x37\x20\x31\x33\x34\
+\x2e\x38\x37\x34\x43\x2d\x31\x31\x34\x2e\x31\x32\x37\x20\x31\x36\
+\x39\x2e\x32\x37\x34\x20\x31\x38\x2e\x37\x34\x36\x20\x31\x32\x35\
+\x2e\x31\x32\x38\x20\x31\x38\x2e\x37\x34\x36\x20\x31\x32\x35\x2e\
+\x31\x32\x38\x43\x31\x38\x2e\x37\x34\x36\x20\x31\x32\x35\x2e\x31\
+\x32\x38\x20\x31\x38\x37\x2e\x35\x34\x37\x20\x39\x34\x2e\x37\x32\
+\x38\x20\x31\x39\x38\x2e\x37\x34\x37\x20\x39\x30\x2e\x37\x32\x38\
+\x43\x32\x30\x39\x2e\x39\x34\x37\x20\x38\x36\x2e\x37\x32\x38\x20\
+\x33\x30\x30\x2e\x37\x38\x33\x20\x39\x32\x2e\x37\x36\x34\x20\x33\
+\x30\x30\x2e\x37\x38\x33\x20\x39\x32\x2e\x37\x36\x34\x4c\x32\x39\
+\x35\x2e\x35\x34\x37\x20\x37\x33\x2e\x34\x31\x39\x43\x32\x33\x30\
+\x2e\x37\x34\x37\x20\x32\x37\x2e\x30\x31\x39\x20\x32\x31\x35\x2e\
+\x35\x34\x37\x20\x35\x33\x2e\x31\x32\x38\x20\x32\x30\x31\x2e\x39\
+\x34\x37\x20\x34\x39\x2e\x31\x32\x38\x43\x31\x38\x38\x2e\x33\x34\
+\x37\x20\x34\x35\x2e\x31\x32\x38\x20\x31\x39\x30\x2e\x37\x34\x37\
+\x20\x35\x34\x2e\x37\x32\x38\x20\x31\x38\x37\x2e\x35\x34\x37\x20\
+\x35\x35\x2e\x35\x32\x38\x43\x31\x38\x34\x2e\x33\x34\x37\x20\x35\
+\x36\x2e\x33\x32\x38\x20\x31\x34\x35\x2e\x31\x34\x37\x20\x33\x31\
+\x2e\x35\x32\x38\x20\x31\x33\x38\x2e\x37\x34\x37\x20\x33\x32\x2e\
+\x33\x32\x38\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x66\x33\x62\x66\x39\x63\x22\x2c\x0a\x20\
+\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x34\x30\x2e\x30\x35\
+\x36\x20\x33\x34\x2e\x30\x37\x33\x43\x31\x33\x33\x2e\x36\x35\x35\
+\x20\x33\x34\x2e\x38\x37\x33\x20\x31\x30\x37\x2e\x33\x31\x33\x20\
+\x31\x31\x2e\x36\x31\x33\x20\x31\x32\x33\x2e\x32\x35\x35\x20\x34\
+\x32\x2e\x38\x37\x33\x43\x31\x34\x33\x2e\x36\x35\x36\x20\x38\x32\
+\x2e\x38\x37\x34\x20\x36\x34\x2e\x38\x35\x35\x20\x38\x32\x2e\x30\
+\x37\x34\x20\x34\x38\x2e\x30\x35\x35\x20\x37\x30\x2e\x38\x37\x34\
+\x43\x33\x31\x2e\x32\x35\x35\x20\x35\x39\x2e\x36\x37\x34\x20\x35\
+\x35\x2e\x32\x35\x35\x20\x38\x39\x2e\x32\x37\x34\x20\x35\x35\x2e\
+\x32\x35\x35\x20\x38\x39\x2e\x32\x37\x34\x43\x37\x33\x2e\x36\x35\
+\x35\x20\x31\x30\x39\x2e\x32\x37\x34\x20\x33\x39\x2e\x32\x35\x35\
+\x20\x39\x32\x2e\x34\x37\x34\x20\x33\x39\x2e\x32\x35\x35\x20\x39\
+\x32\x2e\x34\x37\x34\x43\x34\x2e\x38\x35\x35\x20\x37\x39\x2e\x36\
+\x37\x34\x20\x2d\x31\x39\x2e\x31\x34\x35\x20\x31\x30\x35\x2e\x32\
+\x37\x34\x20\x2d\x32\x32\x2e\x33\x34\x35\x20\x31\x30\x36\x2e\x30\
+\x37\x34\x43\x2d\x32\x35\x2e\x35\x34\x35\x20\x31\x30\x36\x2e\x38\
+\x37\x34\x20\x2d\x33\x30\x2e\x33\x34\x35\x20\x31\x31\x30\x2e\x30\
+\x37\x34\x20\x2d\x33\x31\x2e\x31\x34\x35\x20\x31\x30\x33\x2e\x36\
+\x37\x34\x43\x2d\x33\x31\x2e\x39\x34\x35\x20\x39\x37\x2e\x32\x37\
+\x34\x20\x2d\x33\x38\x2e\x36\x36\x38\x20\x38\x31\x2e\x35\x37\x38\
+\x20\x2d\x37\x31\x2e\x31\x34\x35\x20\x31\x30\x36\x2e\x38\x37\x34\
+\x43\x2d\x39\x38\x2e\x35\x36\x34\x20\x31\x32\x37\x2e\x39\x34\x37\
+\x20\x2d\x31\x31\x30\x2e\x35\x30\x39\x20\x31\x30\x39\x2e\x32\x31\
+\x39\x20\x2d\x31\x31\x30\x2e\x35\x30\x39\x20\x31\x30\x39\x2e\x32\
+\x31\x39\x4c\x2d\x31\x31\x35\x2e\x37\x30\x39\x20\x31\x31\x31\x2e\
+\x38\x37\x34\x43\x2d\x31\x33\x31\x2e\x37\x30\x39\x20\x38\x31\x2e\
+\x36\x37\x34\x20\x2d\x31\x32\x32\x2e\x32\x37\x33\x20\x31\x33\x37\
+\x2e\x39\x32\x39\x20\x2d\x31\x32\x32\x2e\x32\x37\x33\x20\x31\x33\
+\x37\x2e\x39\x32\x39\x43\x2d\x31\x31\x33\x2e\x34\x37\x33\x20\x31\
+\x37\x32\x2e\x33\x32\x39\x20\x32\x30\x2e\x30\x35\x35\x20\x31\x32\
+\x36\x2e\x38\x37\x34\x20\x32\x30\x2e\x30\x35\x35\x20\x31\x32\x36\
+\x2e\x38\x37\x34\x43\x32\x30\x2e\x30\x35\x35\x20\x31\x32\x36\x2e\
+\x38\x37\x34\x20\x31\x38\x38\x2e\x38\x35\x36\x20\x39\x36\x2e\x34\
+\x37\x34\x20\x32\x30\x30\x2e\x30\x35\x36\x20\x39\x32\x2e\x34\x37\
+\x34\x43\x32\x31\x31\x2e\x32\x35\x36\x20\x38\x38\x2e\x34\x37\x34\
+\x20\x33\x30\x31\x2e\x32\x32\x20\x39\x34\x2e\x34\x33\x37\x20\x33\
+\x30\x31\x2e\x32\x32\x20\x39\x34\x2e\x34\x33\x37\x4c\x32\x39\x36\
+\x2e\x30\x35\x36\x20\x37\x34\x2e\x35\x38\x33\x43\x32\x33\x31\x2e\
+\x32\x35\x36\x20\x32\x38\x2e\x31\x38\x33\x20\x32\x31\x36\x2e\x38\
+\x35\x36\x20\x35\x34\x2e\x38\x37\x34\x20\x32\x30\x33\x2e\x32\x35\
+\x36\x20\x35\x30\x2e\x38\x37\x34\x43\x31\x38\x39\x2e\x36\x35\x36\
+\x20\x34\x36\x2e\x38\x37\x33\x20\x31\x39\x32\x2e\x30\x35\x36\x20\
+\x35\x36\x2e\x34\x37\x34\x20\x31\x38\x38\x2e\x38\x35\x36\x20\x35\
+\x37\x2e\x32\x37\x34\x43\x31\x38\x35\x2e\x36\x35\x36\x20\x35\x38\
+\x2e\x30\x37\x34\x20\x31\x34\x36\x2e\x34\x35\x36\x20\x33\x33\x2e\
+\x32\x37\x33\x20\x31\x34\x30\x2e\x30\x35\x36\x20\x33\x34\x2e\x30\
+\x37\x33\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x66\x35\x63\x63\x62\x30\x22\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x34\x31\x2e\x33\x36\x35\
+\x20\x33\x35\x2e\x38\x31\x39\x43\x31\x33\x34\x2e\x39\x36\x35\x20\
+\x33\x36\x2e\x36\x31\x39\x20\x31\x30\x37\x2e\x35\x32\x33\x20\x31\
+\x33\x2e\x39\x34\x34\x20\x31\x32\x34\x2e\x35\x36\x35\x20\x34\x34\
+\x2e\x36\x31\x39\x43\x31\x34\x36\x2e\x35\x36\x35\x20\x38\x34\x2e\
+\x32\x31\x39\x20\x36\x36\x2e\x31\x36\x34\x20\x38\x33\x2e\x38\x31\
+\x39\x20\x34\x39\x2e\x33\x36\x34\x20\x37\x32\x2e\x36\x31\x39\x43\
+\x33\x32\x2e\x35\x36\x34\x20\x36\x31\x2e\x34\x31\x39\x20\x35\x36\
+\x2e\x35\x36\x34\x20\x39\x31\x2e\x30\x31\x39\x20\x35\x36\x2e\x35\
+\x36\x34\x20\x39\x31\x2e\x30\x31\x39\x43\x37\x34\x2e\x39\x36\x34\
+\x20\x31\x31\x31\x2e\x30\x31\x39\x20\x34\x30\x2e\x35\x36\x34\x20\
+\x39\x34\x2e\x32\x31\x39\x20\x34\x30\x2e\x35\x36\x34\x20\x39\x34\
+\x2e\x32\x31\x39\x43\x36\x2e\x31\x36\x34\x20\x38\x31\x2e\x34\x31\
+\x39\x20\x2d\x31\x37\x2e\x38\x33\x36\x20\x31\x30\x37\x2e\x30\x31\
+\x39\x20\x2d\x32\x31\x2e\x30\x33\x36\x20\x31\x30\x37\x2e\x38\x31\
+\x39\x43\x2d\x32\x34\x2e\x32\x33\x36\x20\x31\x30\x38\x2e\x36\x31\
+\x39\x20\x2d\x32\x39\x2e\x30\x33\x36\x20\x31\x31\x31\x2e\x38\x31\
+\x39\x20\x2d\x32\x39\x2e\x38\x33\x36\x20\x31\x30\x35\x2e\x34\x31\
+\x39\x43\x2d\x33\x30\x2e\x36\x33\x36\x20\x39\x39\x2e\x30\x31\x39\
+\x20\x2d\x33\x37\x2e\x32\x32\x37\x20\x38\x33\x2e\x34\x39\x32\x20\
+\x2d\x36\x39\x2e\x38\x33\x36\x20\x31\x30\x38\x2e\x36\x31\x39\x43\
+\x2d\x39\x38\x2e\x34\x39\x31\x20\x31\x33\x30\x2e\x34\x33\x38\x20\
+\x2d\x31\x31\x30\x2e\x31\x32\x37\x20\x31\x31\x32\x2e\x32\x35\x36\
+\x20\x2d\x31\x31\x30\x2e\x31\x32\x37\x20\x31\x31\x32\x2e\x32\x35\
+\x36\x4c\x2d\x31\x31\x35\x2e\x37\x32\x37\x20\x31\x31\x33\x2e\x34\
+\x31\x39\x43\x2d\x31\x33\x30\x2e\x31\x32\x38\x20\x38\x35\x2e\x30\
+\x31\x39\x20\x2d\x31\x32\x31\x2e\x36\x31\x38\x20\x31\x34\x30\x2e\
+\x39\x38\x33\x20\x2d\x31\x32\x31\x2e\x36\x31\x38\x20\x31\x34\x30\
+\x2e\x39\x38\x33\x43\x2d\x31\x31\x32\x2e\x38\x31\x38\x20\x31\x37\
+\x35\x2e\x33\x38\x34\x20\x32\x31\x2e\x33\x36\x34\x20\x31\x32\x38\
+\x2e\x36\x31\x39\x20\x32\x31\x2e\x33\x36\x34\x20\x31\x32\x38\x2e\
+\x36\x31\x39\x43\x32\x31\x2e\x33\x36\x34\x20\x31\x32\x38\x2e\x36\
+\x31\x39\x20\x31\x39\x30\x2e\x31\x36\x35\x20\x39\x38\x2e\x32\x31\
+\x39\x20\x32\x30\x31\x2e\x33\x36\x35\x20\x39\x34\x2e\x32\x31\x39\
+\x43\x32\x31\x32\x2e\x35\x36\x35\x20\x39\x30\x2e\x32\x31\x39\x20\
+\x33\x30\x31\x2e\x36\x35\x36\x20\x39\x36\x2e\x31\x31\x20\x33\x30\
+\x31\x2e\x36\x35\x36\x20\x39\x36\x2e\x31\x31\x4c\x32\x39\x36\x2e\
+\x35\x36\x35\x20\x37\x35\x2e\x37\x34\x36\x43\x32\x33\x31\x2e\x37\
+\x36\x35\x20\x32\x39\x2e\x33\x34\x36\x20\x32\x31\x38\x2e\x31\x36\
+\x35\x20\x35\x36\x2e\x36\x31\x39\x20\x32\x30\x34\x2e\x35\x36\x35\
+\x20\x35\x32\x2e\x36\x31\x39\x43\x31\x39\x30\x2e\x39\x36\x35\x20\
+\x34\x38\x2e\x36\x31\x39\x20\x31\x39\x33\x2e\x33\x36\x35\x20\x35\
+\x38\x2e\x32\x31\x39\x20\x31\x39\x30\x2e\x31\x36\x35\x20\x35\x39\
+\x2e\x30\x31\x39\x43\x31\x38\x36\x2e\x39\x36\x35\x20\x35\x39\x2e\
+\x38\x31\x39\x20\x31\x34\x37\x2e\x37\x36\x35\x20\x33\x35\x2e\x30\
+\x31\x39\x20\x31\x34\x31\x2e\x33\x36\x35\x20\x33\x35\x2e\x38\x31\
+\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x66\x38\x64\x38\x63\x34\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x34\x32\x2e\x36\x37\x34\x20\
+\x33\x37\x2e\x35\x36\x35\x43\x31\x33\x36\x2e\x32\x37\x34\x20\x33\
+\x38\x2e\x33\x36\x35\x20\x31\x30\x38\x2e\x38\x33\x32\x20\x31\x35\
+\x2e\x36\x38\x39\x20\x31\x32\x35\x2e\x38\x37\x34\x20\x34\x36\x2e\
+\x33\x36\x35\x43\x31\x34\x37\x2e\x38\x37\x34\x20\x38\x35\x2e\x39\
+\x36\x35\x20\x36\x37\x2e\x34\x37\x34\x20\x38\x35\x2e\x35\x36\x35\
+\x20\x35\x30\x2e\x36\x37\x34\x20\x37\x34\x2e\x33\x36\x35\x43\x33\
+\x33\x2e\x38\x37\x34\x20\x36\x33\x2e\x31\x36\x35\x20\x35\x37\x2e\
+\x38\x37\x34\x20\x39\x32\x2e\x37\x36\x35\x20\x35\x37\x2e\x38\x37\
+\x34\x20\x39\x32\x2e\x37\x36\x35\x43\x37\x36\x2e\x32\x37\x34\x20\
+\x31\x31\x32\x2e\x37\x36\x35\x20\x34\x31\x2e\x38\x37\x34\x20\x39\
+\x35\x2e\x39\x36\x35\x20\x34\x31\x2e\x38\x37\x34\x20\x39\x35\x2e\
+\x39\x36\x35\x43\x37\x2e\x34\x37\x33\x20\x38\x33\x2e\x31\x36\x35\
+\x20\x2d\x31\x36\x2e\x35\x32\x37\x20\x31\x30\x38\x2e\x37\x36\x35\
+\x20\x2d\x31\x39\x2e\x37\x32\x37\x20\x31\x30\x39\x2e\x35\x36\x35\
+\x43\x2d\x32\x32\x2e\x39\x32\x37\x20\x31\x31\x30\x2e\x33\x36\x35\
+\x20\x2d\x32\x37\x2e\x37\x32\x37\x20\x31\x31\x33\x2e\x35\x36\x35\
+\x20\x2d\x32\x38\x2e\x35\x32\x37\x20\x31\x30\x37\x2e\x31\x36\x35\
+\x43\x2d\x32\x39\x2e\x33\x32\x37\x20\x31\x30\x30\x2e\x37\x36\x35\
+\x20\x2d\x33\x35\x2e\x37\x38\x36\x20\x38\x35\x2e\x34\x30\x35\x20\
+\x2d\x36\x38\x2e\x35\x32\x37\x20\x31\x31\x30\x2e\x33\x36\x35\x43\
+\x2d\x39\x38\x2e\x34\x31\x38\x20\x31\x33\x32\x2e\x39\x32\x39\x20\
+\x2d\x31\x30\x39\x2e\x37\x34\x35\x20\x31\x31\x35\x2e\x32\x39\x33\
+\x20\x2d\x31\x30\x39\x2e\x37\x34\x35\x20\x31\x31\x35\x2e\x32\x39\
+\x33\x4c\x2d\x31\x31\x35\x2e\x37\x34\x35\x20\x31\x31\x34\x2e\x39\
+\x36\x35\x43\x2d\x31\x32\x39\x2e\x33\x34\x36\x20\x38\x38\x2e\x35\
+\x36\x34\x20\x2d\x31\x32\x30\x2e\x39\x36\x33\x20\x31\x34\x34\x2e\
+\x30\x33\x38\x20\x2d\x31\x32\x30\x2e\x39\x36\x33\x20\x31\x34\x34\
+\x2e\x30\x33\x38\x43\x2d\x31\x31\x32\x2e\x31\x36\x33\x20\x31\x37\
+\x38\x2e\x34\x33\x38\x20\x32\x32\x2e\x36\x37\x33\x20\x31\x33\x30\
+\x2e\x33\x36\x35\x20\x32\x32\x2e\x36\x37\x33\x20\x31\x33\x30\x2e\
+\x33\x36\x35\x43\x32\x32\x2e\x36\x37\x33\x20\x31\x33\x30\x2e\x33\
+\x36\x35\x20\x31\x39\x31\x2e\x34\x37\x34\x20\x39\x39\x2e\x39\x36\
+\x35\x20\x32\x30\x32\x2e\x36\x37\x34\x20\x39\x35\x2e\x39\x36\x35\
+\x43\x32\x31\x33\x2e\x38\x37\x34\x20\x39\x31\x2e\x39\x36\x35\x20\
+\x33\x30\x32\x2e\x30\x39\x33\x20\x39\x37\x2e\x37\x38\x33\x20\x33\
+\x30\x32\x2e\x30\x39\x33\x20\x39\x37\x2e\x37\x38\x33\x4c\x32\x39\
+\x37\x2e\x30\x37\x35\x20\x37\x36\x2e\x39\x31\x43\x32\x33\x32\x2e\
+\x32\x37\x34\x20\x33\x30\x2e\x35\x31\x20\x32\x31\x39\x2e\x34\x37\
+\x34\x20\x35\x38\x2e\x33\x36\x35\x20\x32\x30\x35\x2e\x38\x37\x34\
+\x20\x35\x34\x2e\x33\x36\x35\x43\x31\x39\x32\x2e\x32\x37\x34\x20\
+\x35\x30\x2e\x33\x36\x35\x20\x31\x39\x34\x2e\x36\x37\x34\x20\x35\
+\x39\x2e\x39\x36\x35\x20\x31\x39\x31\x2e\x34\x37\x34\x20\x36\x30\
+\x2e\x37\x36\x35\x43\x31\x38\x38\x2e\x32\x37\x34\x20\x36\x31\x2e\
+\x35\x36\x35\x20\x31\x34\x39\x2e\x30\x37\x34\x20\x33\x36\x2e\x37\
+\x36\x35\x20\x31\x34\x32\x2e\x36\x37\x34\x20\x33\x37\x2e\x35\x36\
+\x35\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x66\x61\x65\x35\x64\x37\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x34\x33\x2e\x39\x38\x33\x20\
+\x33\x39\x2e\x33\x31\x43\x31\x33\x37\x2e\x35\x38\x33\x20\x34\x30\
+\x2e\x31\x31\x20\x31\x31\x30\x2e\x35\x32\x39\x20\x31\x37\x2e\x32\
+\x32\x33\x20\x31\x32\x37\x2e\x31\x38\x33\x20\x34\x38\x2e\x31\x31\
+\x43\x31\x34\x39\x2e\x31\x38\x33\x20\x38\x38\x2e\x39\x31\x20\x36\
+\x38\x2e\x37\x38\x33\x20\x38\x37\x2e\x33\x31\x20\x35\x31\x2e\x39\
+\x38\x33\x20\x37\x36\x2e\x31\x31\x43\x33\x35\x2e\x31\x38\x33\x20\
+\x36\x34\x2e\x39\x31\x20\x35\x39\x2e\x31\x38\x33\x20\x39\x34\x2e\
+\x35\x31\x20\x35\x39\x2e\x31\x38\x33\x20\x39\x34\x2e\x35\x31\x43\
+\x37\x37\x2e\x35\x38\x33\x20\x31\x31\x34\x2e\x35\x31\x20\x34\x33\
+\x2e\x31\x38\x33\x20\x39\x37\x2e\x37\x31\x20\x34\x33\x2e\x31\x38\
+\x33\x20\x39\x37\x2e\x37\x31\x43\x38\x2e\x37\x38\x33\x20\x38\x34\
+\x2e\x39\x31\x20\x2d\x31\x35\x2e\x32\x31\x37\x20\x31\x31\x30\x2e\
+\x35\x31\x20\x2d\x31\x38\x2e\x34\x31\x37\x20\x31\x31\x31\x2e\x33\
+\x31\x43\x2d\x32\x31\x2e\x36\x31\x38\x20\x31\x31\x32\x2e\x31\x31\
+\x20\x2d\x32\x36\x2e\x34\x31\x38\x20\x31\x31\x35\x2e\x33\x31\x20\
+\x2d\x32\x37\x2e\x32\x31\x38\x20\x31\x30\x38\x2e\x39\x31\x43\x2d\
+\x32\x38\x2e\x30\x31\x38\x20\x31\x30\x32\x2e\x35\x31\x20\x2d\x33\
+\x34\x2e\x33\x34\x36\x20\x38\x37\x2e\x33\x31\x38\x20\x2d\x36\x37\
+\x2e\x32\x31\x38\x20\x31\x31\x32\x2e\x31\x31\x43\x2d\x39\x38\x2e\
+\x33\x34\x35\x20\x31\x33\x35\x2e\x34\x32\x20\x2d\x31\x30\x39\x2e\
+\x33\x36\x33\x20\x31\x31\x38\x2e\x33\x32\x39\x20\x2d\x31\x30\x39\
+\x2e\x33\x36\x33\x20\x31\x31\x38\x2e\x33\x32\x39\x4c\x2d\x31\x31\
+\x35\x2e\x37\x36\x34\x20\x31\x31\x36\x2e\x35\x31\x43\x2d\x31\x32\
+\x38\x2e\x37\x36\x34\x20\x39\x32\x2e\x35\x31\x20\x2d\x31\x32\x30\
+\x2e\x33\x30\x39\x20\x31\x34\x37\x2e\x30\x39\x33\x20\x2d\x31\x32\
+\x30\x2e\x33\x30\x39\x20\x31\x34\x37\x2e\x30\x39\x33\x43\x2d\x31\
+\x31\x31\x2e\x35\x30\x39\x20\x31\x38\x31\x2e\x34\x39\x33\x20\x32\
+\x33\x2e\x39\x38\x33\x20\x31\x33\x32\x2e\x31\x31\x20\x32\x33\x2e\
+\x39\x38\x33\x20\x31\x33\x32\x2e\x31\x31\x43\x32\x33\x2e\x39\x38\
+\x33\x20\x31\x33\x32\x2e\x31\x31\x20\x31\x39\x32\x2e\x37\x38\x33\
+\x20\x31\x30\x31\x2e\x37\x31\x20\x32\x30\x33\x2e\x39\x38\x33\x20\
+\x39\x37\x2e\x37\x31\x43\x32\x31\x35\x2e\x31\x38\x33\x20\x39\x33\
+\x2e\x37\x31\x20\x33\x30\x32\x2e\x35\x32\x39\x20\x39\x39\x2e\x34\
+\x35\x36\x20\x33\x30\x32\x2e\x35\x32\x39\x20\x39\x39\x2e\x34\x35\
+\x36\x4c\x32\x39\x37\x2e\x35\x38\x33\x20\x37\x38\x2e\x30\x37\x34\
+\x43\x32\x33\x32\x2e\x37\x38\x33\x20\x33\x31\x2e\x36\x37\x33\x20\
+\x32\x32\x30\x2e\x37\x38\x33\x20\x36\x30\x2e\x31\x31\x20\x32\x30\
+\x37\x2e\x31\x38\x33\x20\x35\x36\x2e\x31\x31\x43\x31\x39\x33\x2e\
+\x35\x38\x33\x20\x35\x32\x2e\x31\x31\x20\x31\x39\x35\x2e\x39\x38\
+\x33\x20\x36\x31\x2e\x37\x31\x20\x31\x39\x32\x2e\x37\x38\x33\x20\
+\x36\x32\x2e\x35\x31\x43\x31\x38\x39\x2e\x35\x38\x33\x20\x36\x33\
+\x2e\x33\x31\x20\x31\x35\x30\x2e\x33\x38\x33\x20\x33\x38\x2e\x35\
+\x31\x20\x31\x34\x33\x2e\x39\x38\x33\x20\x33\x39\x2e\x33\x31\x7a\
+\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\
+\x22\x23\x66\x63\x66\x32\x65\x62\x22\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x31\x34\x35\x2e\x32\x39\x32\x20\x34\x31\
+\x2e\x30\x35\x35\x43\x31\x33\x38\x2e\x38\x39\x32\x20\x34\x31\x2e\
+\x38\x35\x35\x20\x31\x31\x32\x2e\x39\x31\x37\x20\x31\x38\x2e\x34\
+\x31\x31\x20\x31\x32\x38\x2e\x34\x39\x32\x20\x34\x39\x2e\x38\x35\
+\x35\x43\x31\x34\x39\x2e\x36\x39\x32\x20\x39\x32\x2e\x36\x35\x36\
+\x20\x37\x30\x2e\x30\x39\x32\x20\x38\x39\x2e\x30\x35\x36\x20\x35\
+\x33\x2e\x32\x39\x32\x20\x37\x37\x2e\x38\x35\x36\x43\x33\x36\x2e\
+\x34\x39\x32\x20\x36\x36\x2e\x36\x35\x36\x20\x36\x30\x2e\x34\x39\
+\x32\x20\x39\x36\x2e\x32\x35\x36\x20\x36\x30\x2e\x34\x39\x32\x20\
+\x39\x36\x2e\x32\x35\x36\x43\x37\x38\x2e\x38\x39\x32\x20\x31\x31\
+\x36\x2e\x32\x35\x36\x20\x34\x34\x2e\x34\x39\x32\x20\x39\x39\x2e\
+\x34\x35\x36\x20\x34\x34\x2e\x34\x39\x32\x20\x39\x39\x2e\x34\x35\
+\x36\x43\x31\x30\x2e\x30\x39\x32\x20\x38\x36\x2e\x36\x35\x36\x20\
+\x2d\x31\x33\x2e\x39\x30\x38\x20\x31\x31\x32\x2e\x32\x35\x36\x20\
+\x2d\x31\x37\x2e\x31\x30\x38\x20\x31\x31\x33\x2e\x30\x35\x36\x43\
+\x2d\x32\x30\x2e\x33\x30\x38\x20\x31\x31\x33\x2e\x38\x35\x36\x20\
+\x2d\x32\x35\x2e\x31\x30\x38\x20\x31\x31\x37\x2e\x30\x35\x36\x20\
+\x2d\x32\x35\x2e\x39\x30\x38\x20\x31\x31\x30\x2e\x36\x35\x36\x43\
+\x2d\x32\x36\x2e\x37\x30\x38\x20\x31\x30\x34\x2e\x32\x35\x36\x20\
+\x2d\x33\x32\x2e\x39\x30\x35\x20\x38\x39\x2e\x32\x33\x32\x20\x2d\
+\x36\x35\x2e\x39\x30\x38\x20\x31\x31\x33\x2e\x38\x35\x36\x43\x2d\
+\x39\x38\x2e\x32\x37\x33\x20\x31\x33\x37\x2e\x39\x31\x31\x20\x2d\
+\x31\x30\x38\x2e\x39\x38\x32\x20\x31\x32\x31\x2e\x33\x36\x35\x20\
+\x2d\x31\x30\x38\x2e\x39\x38\x32\x20\x31\x32\x31\x2e\x33\x36\x35\
+\x4c\x2d\x31\x31\x35\x2e\x37\x38\x32\x20\x31\x31\x38\x2e\x30\x35\
+\x36\x43\x2d\x31\x32\x38\x2e\x35\x38\x32\x20\x39\x34\x2e\x38\x35\
+\x36\x20\x2d\x31\x31\x39\x2e\x36\x35\x34\x20\x31\x35\x30\x2e\x31\
+\x34\x37\x20\x2d\x31\x31\x39\x2e\x36\x35\x34\x20\x31\x35\x30\x2e\
+\x31\x34\x37\x43\x2d\x31\x31\x30\x2e\x38\x35\x34\x20\x31\x38\x34\
+\x2e\x35\x34\x37\x20\x32\x35\x2e\x32\x39\x32\x20\x31\x33\x33\x2e\
+\x38\x35\x36\x20\x32\x35\x2e\x32\x39\x32\x20\x31\x33\x33\x2e\x38\
+\x35\x36\x43\x32\x35\x2e\x32\x39\x32\x20\x31\x33\x33\x2e\x38\x35\
+\x36\x20\x31\x39\x34\x2e\x30\x39\x33\x20\x31\x30\x33\x2e\x34\x35\
+\x36\x20\x32\x30\x35\x2e\x32\x39\x33\x20\x39\x39\x2e\x34\x35\x36\
+\x43\x32\x31\x36\x2e\x34\x39\x33\x20\x39\x35\x2e\x34\x35\x36\x20\
+\x33\x30\x32\x2e\x39\x36\x35\x20\x31\x30\x31\x2e\x31\x32\x38\x20\
+\x33\x30\x32\x2e\x39\x36\x35\x20\x31\x30\x31\x2e\x31\x32\x38\x4c\
+\x32\x39\x38\x2e\x30\x39\x33\x20\x37\x39\x2e\x32\x33\x37\x43\x32\
+\x33\x33\x2e\x32\x39\x32\x20\x33\x32\x2e\x38\x33\x37\x20\x32\x32\
+\x32\x2e\x30\x39\x33\x20\x36\x31\x2e\x38\x35\x36\x20\x32\x30\x38\
+\x2e\x34\x39\x33\x20\x35\x37\x2e\x38\x35\x36\x43\x31\x39\x34\x2e\
+\x38\x39\x33\x20\x35\x33\x2e\x38\x35\x35\x20\x31\x39\x37\x2e\x32\
+\x39\x33\x20\x36\x33\x2e\x34\x35\x36\x20\x31\x39\x34\x2e\x30\x39\
+\x33\x20\x36\x34\x2e\x32\x35\x36\x43\x31\x39\x30\x2e\x38\x39\x32\
+\x20\x36\x35\x2e\x30\x35\x36\x20\x31\x35\x31\x2e\x36\x39\x32\x20\
+\x34\x30\x2e\x32\x35\x35\x20\x31\x34\x35\x2e\x32\x39\x32\x20\x34\
+\x31\x2e\x30\x35\x35\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x31\x35\
+\x2e\x38\x20\x31\x31\x39\x2e\x36\x30\x31\x43\x2d\x31\x32\x38\x2e\
+\x36\x20\x39\x37\x2e\x36\x20\x2d\x31\x31\x39\x20\x31\x35\x33\x2e\
+\x32\x30\x31\x20\x2d\x31\x31\x39\x20\x31\x35\x33\x2e\x32\x30\x31\
+\x43\x2d\x31\x31\x30\x2e\x32\x20\x31\x38\x37\x2e\x36\x30\x31\x20\
+\x32\x36\x2e\x36\x20\x31\x33\x35\x2e\x36\x30\x31\x20\x32\x36\x2e\
+\x36\x20\x31\x33\x35\x2e\x36\x30\x31\x43\x32\x36\x2e\x36\x20\x31\
+\x33\x35\x2e\x36\x30\x31\x20\x31\x39\x35\x2e\x34\x30\x31\x20\x31\
+\x30\x35\x2e\x32\x20\x32\x30\x36\x2e\x36\x30\x31\x20\x31\x30\x31\
+\x2e\x32\x43\x32\x31\x37\x2e\x38\x30\x31\x20\x39\x37\x2e\x32\x20\
+\x33\x30\x33\x2e\x34\x30\x31\x20\x31\x30\x32\x2e\x38\x20\x33\x30\
+\x33\x2e\x34\x30\x31\x20\x31\x30\x32\x2e\x38\x4c\x32\x39\x38\x2e\
+\x36\x30\x31\x20\x38\x30\x2e\x34\x43\x32\x33\x33\x2e\x38\x30\x31\
+\x20\x33\x34\x20\x32\x32\x33\x2e\x34\x30\x31\x20\x36\x33\x2e\x36\
+\x20\x32\x30\x39\x2e\x38\x30\x31\x20\x35\x39\x2e\x36\x43\x31\x39\
+\x36\x2e\x32\x30\x31\x20\x35\x35\x2e\x36\x20\x31\x39\x38\x2e\x36\
+\x30\x31\x20\x36\x35\x2e\x32\x20\x31\x39\x35\x2e\x34\x30\x31\x20\
+\x36\x36\x43\x31\x39\x32\x2e\x32\x30\x31\x20\x36\x36\x2e\x38\x20\
+\x31\x35\x33\x2e\x30\x30\x31\x20\x34\x32\x20\x31\x34\x36\x2e\x36\
+\x30\x31\x20\x34\x32\x2e\x38\x43\x31\x34\x30\x2e\x32\x30\x31\x20\
+\x34\x33\x2e\x36\x20\x31\x31\x34\x2e\x39\x38\x31\x20\x31\x39\x2e\
+\x37\x39\x33\x20\x31\x32\x39\x2e\x38\x30\x31\x20\x35\x31\x2e\x36\
+\x43\x31\x35\x32\x2e\x30\x32\x38\x20\x39\x39\x2e\x33\x30\x37\x20\
+\x36\x39\x2e\x30\x34\x31\x20\x38\x39\x2e\x32\x32\x37\x20\x35\x34\
+\x2e\x36\x20\x37\x39\x2e\x36\x43\x33\x37\x2e\x38\x20\x36\x38\x2e\
+\x34\x20\x36\x31\x2e\x38\x20\x39\x38\x20\x36\x31\x2e\x38\x20\x39\
+\x38\x43\x38\x30\x2e\x32\x20\x31\x31\x38\x2e\x30\x30\x31\x20\x34\
+\x35\x2e\x38\x20\x31\x30\x31\x2e\x32\x20\x34\x35\x2e\x38\x20\x31\
+\x30\x31\x2e\x32\x43\x31\x31\x2e\x34\x20\x38\x38\x2e\x34\x20\x2d\
+\x31\x32\x2e\x36\x20\x31\x31\x34\x2e\x30\x30\x31\x20\x2d\x31\x35\
+\x2e\x38\x20\x31\x31\x34\x2e\x38\x30\x31\x43\x2d\x31\x39\x20\x31\
+\x31\x35\x2e\x36\x30\x31\x20\x2d\x32\x33\x2e\x38\x20\x31\x31\x38\
+\x2e\x38\x30\x31\x20\x2d\x32\x34\x2e\x36\x20\x31\x31\x32\x2e\x34\
+\x30\x31\x43\x2d\x32\x35\x2e\x34\x20\x31\x30\x36\x20\x2d\x33\x31\
+\x2e\x34\x36\x35\x20\x39\x31\x2e\x31\x34\x34\x20\x2d\x36\x34\x2e\
+\x36\x20\x31\x31\x35\x2e\x36\x30\x31\x43\x2d\x39\x38\x2e\x32\x20\
+\x31\x34\x30\x2e\x34\x30\x31\x20\x2d\x31\x30\x38\x2e\x36\x20\x31\
+\x32\x34\x2e\x34\x30\x31\x20\x2d\x31\x30\x38\x2e\x36\x20\x31\x32\
+\x34\x2e\x34\x30\x31\x4c\x2d\x31\x31\x35\x2e\x38\x20\x31\x31\x39\
+\x2e\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x37\x34\x2e\x32\
+\x20\x31\x34\x39\x2e\x36\x30\x31\x43\x2d\x37\x34\x2e\x32\x20\x31\
+\x34\x39\x2e\x36\x30\x31\x20\x2d\x38\x31\x2e\x34\x20\x31\x36\x31\
+\x2e\x32\x30\x31\x20\x2d\x36\x30\x2e\x36\x20\x31\x37\x34\x2e\x34\
+\x30\x31\x43\x2d\x36\x30\x2e\x36\x20\x31\x37\x34\x2e\x34\x30\x31\
+\x20\x2d\x35\x39\x2e\x32\x20\x31\x37\x35\x2e\x38\x30\x31\x20\x2d\
+\x37\x37\x2e\x32\x20\x31\x37\x31\x2e\x36\x30\x31\x43\x2d\x37\x37\
+\x2e\x32\x20\x31\x37\x31\x2e\x36\x30\x31\x20\x2d\x38\x33\x2e\x34\
+\x20\x31\x36\x39\x2e\x36\x30\x31\x20\x2d\x38\x35\x20\x31\x35\x39\
+\x2e\x32\x30\x31\x43\x2d\x38\x35\x20\x31\x35\x39\x2e\x32\x30\x31\
+\x20\x2d\x38\x39\x2e\x38\x20\x31\x35\x34\x2e\x38\x30\x31\x20\x2d\
+\x39\x34\x2e\x36\x20\x31\x34\x39\x2e\x32\x30\x31\x43\x2d\x39\x39\
+\x2e\x34\x20\x31\x34\x33\x2e\x36\x30\x31\x20\x2d\x37\x34\x2e\x32\
+\x20\x31\x34\x39\x2e\x36\x30\x31\x20\x2d\x37\x34\x2e\x32\x20\x31\
+\x34\x39\x2e\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x36\x35\x2e\
+\x38\x20\x31\x30\x32\x43\x36\x35\x2e\x38\x20\x31\x30\x32\x20\x38\
+\x33\x2e\x34\x39\x38\x20\x31\x32\x38\x2e\x38\x32\x31\x20\x38\x32\
+\x2e\x39\x20\x31\x33\x33\x2e\x36\x30\x31\x43\x38\x31\x2e\x36\x20\
+\x31\x34\x34\x2e\x30\x30\x31\x20\x38\x31\x2e\x34\x20\x31\x35\x33\
+\x2e\x36\x30\x31\x20\x38\x34\x2e\x36\x20\x31\x35\x37\x2e\x36\x30\
+\x31\x43\x38\x37\x2e\x38\x30\x31\x20\x31\x36\x31\x2e\x36\x30\x31\
+\x20\x39\x36\x2e\x36\x30\x31\x20\x31\x39\x34\x2e\x38\x30\x31\x20\
+\x39\x36\x2e\x36\x30\x31\x20\x31\x39\x34\x2e\x38\x30\x31\x43\x39\
+\x36\x2e\x36\x30\x31\x20\x31\x39\x34\x2e\x38\x30\x31\x20\x39\x36\
+\x2e\x32\x30\x31\x20\x31\x39\x36\x2e\x30\x30\x31\x20\x31\x30\x38\
+\x2e\x36\x30\x31\x20\x31\x35\x38\x2e\x30\x30\x31\x43\x31\x30\x38\
+\x2e\x36\x30\x31\x20\x31\x35\x38\x2e\x30\x30\x31\x20\x31\x32\x30\
+\x2e\x32\x30\x31\x20\x31\x34\x32\x2e\x30\x30\x31\x20\x31\x30\x30\
+\x2e\x32\x30\x31\x20\x31\x32\x33\x2e\x36\x30\x31\x43\x31\x30\x30\
+\x2e\x32\x30\x31\x20\x31\x32\x33\x2e\x36\x30\x31\x20\x36\x35\x20\
+\x39\x34\x2e\x38\x20\x36\x35\x2e\x38\x20\x31\x30\x32\x7a\x22\x7d\
+\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\
+\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x35\x34\x2e\x32\x20\x31\x37\x36\x2e\x34\x30\
+\x31\x43\x2d\x35\x34\x2e\x32\x20\x31\x37\x36\x2e\x34\x30\x31\x20\
+\x2d\x34\x33\x20\x31\x38\x33\x2e\x36\x30\x31\x20\x2d\x35\x37\x2e\
+\x34\x20\x32\x31\x34\x2e\x38\x30\x31\x4c\x2d\x35\x31\x20\x32\x31\
+\x32\x2e\x34\x30\x31\x43\x2d\x35\x31\x20\x32\x31\x32\x2e\x34\x30\
+\x31\x20\x2d\x35\x31\x2e\x38\x20\x32\x32\x33\x2e\x36\x30\x31\x20\
+\x2d\x35\x35\x20\x32\x32\x36\x2e\x30\x30\x31\x4c\x2d\x34\x37\x2e\
+\x38\x20\x32\x32\x32\x2e\x38\x30\x31\x43\x2d\x34\x37\x2e\x38\x20\
+\x32\x32\x32\x2e\x38\x30\x31\x20\x2d\x34\x33\x20\x32\x33\x30\x2e\
+\x38\x30\x31\x20\x2d\x34\x37\x20\x32\x33\x35\x2e\x36\x30\x31\x43\
+\x2d\x34\x37\x20\x32\x33\x35\x2e\x36\x30\x31\x20\x2d\x33\x30\x2e\
+\x32\x20\x32\x34\x33\x2e\x36\x30\x31\x20\x2d\x33\x31\x20\x32\x35\
+\x30\x2e\x30\x30\x31\x43\x2d\x33\x31\x20\x32\x35\x30\x2e\x30\x30\
+\x31\x20\x2d\x32\x34\x2e\x36\x20\x32\x34\x32\x2e\x30\x30\x31\x20\
+\x2d\x32\x38\x2e\x36\x20\x32\x33\x35\x2e\x36\x30\x31\x43\x2d\x33\
+\x32\x2e\x36\x20\x32\x32\x39\x2e\x32\x30\x31\x20\x2d\x33\x39\x2e\
+\x38\x20\x32\x33\x33\x2e\x32\x30\x31\x20\x2d\x33\x39\x20\x32\x31\
+\x34\x2e\x38\x30\x31\x4c\x2d\x34\x37\x2e\x38\x20\x32\x31\x38\x2e\
+\x30\x30\x31\x43\x2d\x34\x37\x2e\x38\x20\x32\x31\x38\x2e\x30\x30\
+\x31\x20\x2d\x34\x32\x2e\x32\x20\x32\x30\x39\x2e\x32\x30\x31\x20\
+\x2d\x34\x32\x2e\x32\x20\x32\x30\x32\x2e\x38\x30\x31\x4c\x2d\x35\
+\x30\x2e\x32\x20\x32\x30\x35\x2e\x32\x30\x31\x43\x2d\x35\x30\x2e\
+\x32\x20\x32\x30\x35\x2e\x32\x30\x31\x20\x2d\x33\x34\x2e\x37\x33\
+\x31\x20\x31\x37\x38\x2e\x36\x32\x33\x20\x2d\x34\x35\x2e\x34\x20\
+\x31\x37\x37\x2e\x32\x30\x31\x43\x2d\x35\x31\x2e\x34\x20\x31\x37\
+\x36\x2e\x34\x30\x31\x20\x2d\x35\x34\x2e\x32\x20\x31\x37\x36\x2e\
+\x34\x30\x31\x20\x2d\x35\x34\x2e\x32\x20\x31\x37\x36\x2e\x34\x30\
+\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x32\x31\x2e\x38\x20\x31\x39\
+\x33\x2e\x32\x30\x31\x43\x2d\x32\x31\x2e\x38\x20\x31\x39\x33\x2e\
+\x32\x30\x31\x20\x2d\x31\x39\x20\x31\x38\x38\x2e\x38\x30\x31\x20\
+\x2d\x32\x31\x2e\x38\x20\x31\x38\x39\x2e\x36\x30\x31\x43\x2d\x32\
+\x34\x2e\x36\x20\x31\x39\x30\x2e\x34\x30\x31\x20\x2d\x35\x35\x2e\
+\x38\x20\x32\x30\x35\x2e\x32\x30\x31\x20\x2d\x36\x31\x2e\x38\x20\
+\x32\x31\x34\x2e\x38\x30\x31\x43\x2d\x36\x31\x2e\x38\x20\x32\x31\
+\x34\x2e\x38\x30\x31\x20\x2d\x32\x37\x2e\x34\x20\x31\x39\x30\x2e\
+\x34\x30\x31\x20\x2d\x32\x31\x2e\x38\x20\x31\x39\x33\x2e\x32\x30\
+\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x31\x2e\x34\x20\x32\x30\
+\x31\x2e\x32\x30\x31\x43\x2d\x31\x31\x2e\x34\x20\x32\x30\x31\x2e\
+\x32\x30\x31\x20\x2d\x38\x2e\x36\x20\x31\x39\x36\x2e\x38\x30\x31\
+\x20\x2d\x31\x31\x2e\x34\x20\x31\x39\x37\x2e\x36\x30\x31\x43\x2d\
+\x31\x34\x2e\x32\x20\x31\x39\x38\x2e\x34\x30\x31\x20\x2d\x34\x35\
+\x2e\x34\x20\x32\x31\x33\x2e\x32\x30\x31\x20\x2d\x35\x31\x2e\x34\
+\x20\x32\x32\x32\x2e\x38\x30\x31\x43\x2d\x35\x31\x2e\x34\x20\x32\
+\x32\x32\x2e\x38\x30\x31\x20\x2d\x31\x37\x20\x31\x39\x38\x2e\x34\
+\x30\x31\x20\x2d\x31\x31\x2e\x34\x20\x32\x30\x31\x2e\x32\x30\x31\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x31\x2e\x38\x20\x31\x38\x36\x2e\x30\
+\x30\x31\x43\x31\x2e\x38\x20\x31\x38\x36\x2e\x30\x30\x31\x20\x34\
+\x2e\x36\x20\x31\x38\x31\x2e\x36\x30\x31\x20\x31\x2e\x38\x20\x31\
+\x38\x32\x2e\x34\x30\x31\x43\x2d\x31\x20\x31\x38\x33\x2e\x32\x30\
+\x31\x20\x2d\x33\x32\x2e\x32\x20\x31\x39\x38\x2e\x30\x30\x31\x20\
+\x2d\x33\x38\x2e\x32\x20\x32\x30\x37\x2e\x36\x30\x31\x43\x2d\x33\
+\x38\x2e\x32\x20\x32\x30\x37\x2e\x36\x30\x31\x20\x2d\x33\x2e\x38\
+\x20\x31\x38\x33\x2e\x32\x30\x31\x20\x31\x2e\x38\x20\x31\x38\x36\
+\x2e\x30\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x32\x31\x2e\x34\
+\x20\x32\x32\x39\x2e\x36\x30\x31\x43\x2d\x32\x31\x2e\x34\x20\x32\
+\x32\x39\x2e\x36\x30\x31\x20\x2d\x32\x31\x2e\x34\x20\x32\x32\x33\
+\x2e\x36\x30\x31\x20\x2d\x32\x34\x2e\x32\x20\x32\x32\x34\x2e\x34\
+\x30\x31\x43\x2d\x32\x37\x20\x32\x32\x35\x2e\x32\x30\x31\x20\x2d\
+\x36\x33\x20\x32\x34\x32\x2e\x38\x30\x31\x20\x2d\x36\x39\x20\x32\
+\x35\x32\x2e\x34\x30\x31\x43\x2d\x36\x39\x20\x32\x35\x32\x2e\x34\
+\x30\x31\x20\x2d\x32\x37\x20\x32\x32\x36\x2e\x38\x30\x31\x20\x2d\
+\x32\x31\x2e\x34\x20\x32\x32\x39\x2e\x36\x30\x31\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\
+\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x32\x30\x2e\x32\x20\x32\x31\x38\x2e\x38\x30\x31\
+\x43\x2d\x32\x30\x2e\x32\x20\x32\x31\x38\x2e\x38\x30\x31\x20\x2d\
+\x31\x39\x20\x32\x31\x34\x2e\x30\x30\x31\x20\x2d\x32\x31\x2e\x38\
+\x20\x32\x31\x34\x2e\x38\x30\x31\x43\x2d\x32\x33\x2e\x38\x20\x32\
+\x31\x34\x2e\x38\x30\x31\x20\x2d\x35\x30\x2e\x32\x20\x32\x32\x36\
+\x2e\x34\x30\x31\x20\x2d\x35\x36\x2e\x32\x20\x32\x33\x36\x2e\x30\
+\x30\x31\x43\x2d\x35\x36\x2e\x32\x20\x32\x33\x36\x2e\x30\x30\x31\
+\x20\x2d\x32\x36\x2e\x36\x20\x32\x31\x34\x2e\x34\x30\x31\x20\x2d\
+\x32\x30\x2e\x32\x20\x32\x31\x38\x2e\x38\x30\x31\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\
+\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x33\x34\x2e\x36\x20\x32\x36\x36\x2e\x34\x30\x31\
+\x4c\x2d\x34\x34\x2e\x36\x20\x32\x37\x34\x2e\x30\x30\x31\x43\x2d\
+\x34\x34\x2e\x36\x20\x32\x37\x34\x2e\x30\x30\x31\x20\x2d\x33\x34\
+\x2e\x32\x20\x32\x36\x36\x2e\x34\x30\x31\x20\x2d\x33\x30\x2e\x36\
+\x20\x32\x36\x37\x2e\x36\x30\x31\x43\x2d\x33\x30\x2e\x36\x20\x32\
+\x36\x37\x2e\x36\x30\x31\x20\x2d\x33\x37\x2e\x34\x20\x32\x37\x38\
+\x2e\x38\x30\x31\x20\x2d\x33\x38\x2e\x32\x20\x32\x38\x34\x2e\x30\
+\x30\x31\x43\x2d\x33\x38\x2e\x32\x20\x32\x38\x34\x2e\x30\x30\x31\
+\x20\x2d\x32\x37\x2e\x38\x20\x32\x37\x31\x2e\x32\x30\x31\x20\x2d\
+\x32\x32\x2e\x32\x20\x32\x37\x31\x2e\x36\x30\x31\x43\x2d\x32\x32\
+\x2e\x32\x20\x32\x37\x31\x2e\x36\x30\x31\x20\x2d\x31\x34\x2e\x36\
+\x20\x32\x37\x32\x2e\x30\x30\x31\x20\x2d\x31\x34\x2e\x36\x20\x32\
+\x38\x32\x2e\x38\x30\x31\x43\x2d\x31\x34\x2e\x36\x20\x32\x38\x32\
+\x2e\x38\x30\x31\x20\x2d\x39\x20\x32\x37\x32\x2e\x34\x30\x31\x20\
+\x2d\x35\x2e\x38\x20\x32\x37\x32\x2e\x38\x30\x31\x43\x2d\x35\x2e\
+\x38\x20\x32\x37\x32\x2e\x38\x30\x31\x20\x2d\x34\x2e\x36\x20\x32\
+\x37\x39\x2e\x32\x30\x31\x20\x2d\x35\x2e\x38\x20\x32\x38\x36\x2e\
+\x30\x30\x31\x43\x2d\x35\x2e\x38\x20\x32\x38\x36\x2e\x30\x30\x31\
+\x20\x2d\x31\x2e\x38\x20\x32\x37\x38\x2e\x34\x30\x31\x20\x32\x2e\
+\x32\x20\x32\x38\x30\x2e\x30\x30\x31\x43\x32\x2e\x32\x20\x32\x38\
+\x30\x2e\x30\x30\x31\x20\x38\x2e\x36\x20\x32\x37\x38\x2e\x30\x30\
+\x31\x20\x37\x2e\x38\x20\x32\x38\x39\x2e\x36\x30\x31\x43\x37\x2e\
+\x38\x20\x32\x38\x39\x2e\x36\x30\x31\x20\x37\x2e\x38\x20\x33\x30\
+\x30\x2e\x30\x30\x31\x20\x37\x20\x33\x30\x32\x2e\x38\x30\x31\x43\
+\x37\x20\x33\x30\x32\x2e\x38\x30\x31\x20\x31\x32\x2e\x36\x20\x32\
+\x37\x36\x2e\x34\x30\x31\x20\x31\x35\x20\x32\x37\x36\x2e\x30\x30\
+\x31\x43\x31\x35\x20\x32\x37\x36\x2e\x30\x30\x31\x20\x32\x33\x20\
+\x32\x37\x34\x2e\x38\x30\x31\x20\x32\x37\x2e\x38\x20\x32\x38\x33\
+\x2e\x36\x30\x31\x43\x32\x37\x2e\x38\x20\x32\x38\x33\x2e\x36\x30\
+\x31\x20\x32\x33\x2e\x38\x20\x32\x37\x36\x2e\x30\x30\x31\x20\x32\
+\x38\x2e\x36\x20\x32\x37\x38\x2e\x30\x30\x31\x43\x32\x38\x2e\x36\
+\x20\x32\x37\x38\x2e\x30\x30\x31\x20\x33\x39\x2e\x34\x20\x32\x37\
+\x39\x2e\x36\x30\x31\x20\x34\x32\x2e\x36\x20\x32\x38\x36\x2e\x34\
+\x30\x31\x43\x34\x32\x2e\x36\x20\x32\x38\x36\x2e\x34\x30\x31\x20\
+\x33\x35\x2e\x38\x20\x32\x37\x34\x2e\x34\x30\x31\x20\x34\x31\x2e\
+\x34\x20\x32\x37\x37\x2e\x36\x30\x31\x43\x34\x31\x2e\x34\x20\x32\
+\x37\x37\x2e\x36\x30\x31\x20\x34\x38\x2e\x32\x20\x32\x37\x37\x2e\
+\x36\x30\x31\x20\x34\x39\x2e\x34\x20\x32\x38\x34\x2e\x30\x30\x31\
+\x43\x34\x39\x2e\x34\x20\x32\x38\x34\x2e\x30\x30\x31\x20\x35\x37\
+\x2e\x38\x20\x33\x30\x35\x2e\x32\x30\x31\x20\x35\x39\x2e\x38\x20\
+\x33\x30\x36\x2e\x38\x30\x31\x43\x35\x39\x2e\x38\x20\x33\x30\x36\
+\x2e\x38\x30\x31\x20\x35\x32\x2e\x32\x20\x32\x38\x35\x2e\x32\x30\
+\x31\x20\x35\x33\x2e\x38\x20\x32\x38\x35\x2e\x32\x30\x31\x43\x35\
+\x33\x2e\x38\x20\x32\x38\x35\x2e\x32\x30\x31\x20\x35\x31\x2e\x38\
+\x20\x32\x37\x33\x2e\x32\x30\x31\x20\x35\x37\x20\x32\x38\x38\x2e\
+\x30\x30\x31\x43\x35\x37\x20\x32\x38\x38\x2e\x30\x30\x31\x20\x35\
+\x33\x2e\x38\x20\x32\x37\x34\x2e\x30\x30\x31\x20\x35\x39\x2e\x34\
+\x20\x32\x37\x34\x2e\x38\x30\x31\x43\x36\x35\x20\x32\x37\x35\x2e\
+\x36\x30\x31\x20\x36\x39\x2e\x34\x20\x32\x38\x35\x2e\x36\x30\x31\
+\x20\x37\x37\x2e\x38\x20\x32\x38\x33\x2e\x32\x30\x31\x43\x37\x37\
+\x2e\x38\x20\x32\x38\x33\x2e\x32\x30\x31\x20\x38\x37\x2e\x34\x30\
+\x31\x20\x32\x38\x38\x2e\x38\x30\x31\x20\x38\x39\x2e\x34\x30\x31\
+\x20\x32\x31\x39\x2e\x36\x30\x31\x4c\x2d\x33\x34\x2e\x36\x20\x32\
+\x36\x36\x2e\x34\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x32\x39\
+\x2e\x38\x20\x31\x37\x33\x2e\x36\x30\x31\x43\x2d\x32\x39\x2e\x38\
+\x20\x31\x37\x33\x2e\x36\x30\x31\x20\x2d\x31\x35\x20\x31\x36\x37\
+\x2e\x36\x30\x31\x20\x32\x35\x20\x31\x37\x33\x2e\x36\x30\x31\x43\
+\x32\x35\x20\x31\x37\x33\x2e\x36\x30\x31\x20\x33\x32\x2e\x32\x20\
+\x31\x37\x34\x2e\x30\x30\x31\x20\x33\x39\x20\x31\x36\x35\x2e\x32\
+\x30\x31\x43\x34\x35\x2e\x38\x20\x31\x35\x36\x2e\x34\x30\x31\x20\
+\x37\x32\x2e\x36\x20\x31\x34\x39\x2e\x32\x30\x31\x20\x37\x39\x20\
+\x31\x35\x31\x2e\x32\x30\x31\x4c\x38\x38\x2e\x36\x30\x31\x20\x31\
+\x35\x37\x2e\x36\x30\x31\x4c\x38\x39\x2e\x34\x30\x31\x20\x31\x35\
+\x38\x2e\x38\x30\x31\x43\x38\x39\x2e\x34\x30\x31\x20\x31\x35\x38\
+\x2e\x38\x30\x31\x20\x31\x30\x31\x2e\x38\x30\x31\x20\x31\x36\x39\
+\x2e\x32\x30\x31\x20\x31\x30\x32\x2e\x32\x30\x31\x20\x31\x37\x36\
+\x2e\x38\x30\x31\x43\x31\x30\x32\x2e\x36\x30\x31\x20\x31\x38\x34\
+\x2e\x34\x30\x31\x20\x38\x37\x2e\x38\x30\x31\x20\x32\x33\x32\x2e\
+\x34\x30\x31\x20\x37\x38\x2e\x32\x20\x32\x34\x38\x2e\x34\x30\x31\
+\x43\x36\x38\x2e\x36\x20\x32\x36\x34\x2e\x34\x30\x31\x20\x35\x39\
+\x20\x32\x37\x36\x2e\x38\x30\x31\x20\x33\x39\x2e\x38\x20\x32\x37\
+\x34\x2e\x34\x30\x31\x43\x33\x39\x2e\x38\x20\x32\x37\x34\x2e\x34\
+\x30\x31\x20\x31\x39\x20\x32\x37\x30\x2e\x34\x30\x31\x20\x2d\x36\
+\x2e\x36\x20\x32\x37\x34\x2e\x34\x30\x31\x43\x2d\x36\x2e\x36\x20\
+\x32\x37\x34\x2e\x34\x30\x31\x20\x2d\x33\x35\x2e\x38\x20\x32\x37\
+\x32\x2e\x38\x30\x31\x20\x2d\x33\x38\x2e\x36\x20\x32\x36\x34\x2e\
+\x38\x30\x31\x43\x2d\x34\x31\x2e\x34\x20\x32\x35\x36\x2e\x38\x30\
+\x31\x20\x2d\x32\x37\x2e\x34\x20\x32\x34\x31\x2e\x36\x30\x31\x20\
+\x2d\x32\x37\x2e\x34\x20\x32\x34\x31\x2e\x36\x30\x31\x43\x2d\x32\
+\x37\x2e\x34\x20\x32\x34\x31\x2e\x36\x30\x31\x20\x2d\x32\x33\x20\
+\x32\x33\x33\x2e\x32\x30\x31\x20\x2d\x32\x34\x2e\x32\x20\x32\x31\
+\x38\x2e\x38\x30\x31\x43\x2d\x32\x35\x2e\x34\x20\x32\x30\x34\x2e\
+\x34\x30\x31\x20\x2d\x32\x35\x20\x31\x37\x36\x2e\x34\x30\x31\x20\
+\x2d\x32\x39\x2e\x38\x20\x31\x37\x33\x2e\x36\x30\x31\x7a\x22\x7d\
+\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\
+\x65\x35\x36\x36\x38\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x37\x2e\x38\x20\x31\x37\x35\x2e\x36\x30\x31\
+\x43\x30\x2e\x36\x20\x31\x39\x34\x2e\x30\x30\x31\x20\x2d\x32\x39\
+\x20\x32\x35\x39\x2e\x32\x30\x31\x20\x2d\x32\x39\x20\x32\x35\x39\
+\x2e\x32\x30\x31\x43\x2d\x33\x31\x20\x32\x36\x30\x2e\x38\x30\x31\
+\x20\x2d\x31\x36\x2e\x33\x34\x20\x32\x36\x36\x2e\x38\x34\x36\x20\
+\x2d\x36\x2e\x32\x20\x32\x36\x34\x2e\x34\x30\x31\x43\x34\x2e\x37\
+\x34\x36\x20\x32\x36\x31\x2e\x37\x36\x33\x20\x34\x35\x20\x32\x36\
+\x36\x2e\x30\x30\x31\x20\x34\x35\x20\x32\x36\x36\x2e\x30\x30\x31\
+\x43\x36\x38\x2e\x36\x20\x32\x35\x30\x2e\x34\x30\x31\x20\x38\x31\
+\x2e\x34\x20\x32\x30\x36\x2e\x30\x30\x31\x20\x38\x31\x2e\x34\x20\
+\x32\x30\x36\x2e\x30\x30\x31\x43\x38\x31\x2e\x34\x20\x32\x30\x36\
+\x2e\x30\x30\x31\x20\x39\x31\x2e\x38\x30\x31\x20\x31\x38\x32\x2e\
+\x30\x30\x31\x20\x37\x34\x2e\x32\x20\x31\x37\x38\x2e\x38\x30\x31\
+\x43\x35\x36\x2e\x36\x20\x31\x37\x35\x2e\x36\x30\x31\x20\x2d\x37\
+\x2e\x38\x20\x31\x37\x35\x2e\x36\x30\x31\x20\x2d\x37\x2e\x38\x20\
+\x31\x37\x35\x2e\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x62\x32\x33\x32\x35\x39\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x39\
+\x2e\x38\x33\x31\x20\x32\x30\x36\x2e\x34\x39\x37\x43\x2d\x36\x2e\
+\x35\x30\x35\x20\x31\x39\x33\x2e\x37\x30\x37\x20\x2d\x34\x2e\x39\
+\x32\x31\x20\x31\x38\x31\x2e\x39\x30\x36\x20\x2d\x37\x2e\x38\x20\
+\x31\x37\x35\x2e\x36\x30\x31\x43\x2d\x37\x2e\x38\x20\x31\x37\x35\
+\x2e\x36\x30\x31\x20\x35\x34\x2e\x36\x20\x31\x38\x32\x2e\x30\x30\
+\x31\x20\x36\x35\x2e\x38\x20\x31\x36\x31\x2e\x32\x30\x31\x43\x37\
+\x30\x2e\x30\x34\x31\x20\x31\x35\x33\x2e\x33\x32\x36\x20\x38\x34\
+\x2e\x38\x30\x31\x20\x31\x38\x34\x2e\x30\x30\x31\x20\x38\x34\x2e\
+\x34\x20\x31\x39\x33\x2e\x36\x30\x31\x43\x38\x34\x2e\x34\x20\x31\
+\x39\x33\x2e\x36\x30\x31\x20\x32\x31\x2e\x34\x20\x32\x30\x38\x2e\
+\x30\x30\x31\x20\x36\x2e\x36\x20\x31\x39\x36\x2e\x38\x30\x31\x4c\
+\x2d\x39\x2e\x38\x33\x31\x20\x32\x30\x36\x2e\x34\x39\x37\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x61\x35\x32\x36\x34\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x2d\x35\x2e\x34\x20\x32\x32\x32\x2e\x38\x30\
+\x31\x43\x2d\x35\x2e\x34\x20\x32\x32\x32\x2e\x38\x30\x31\x20\x2d\
+\x33\x2e\x34\x20\x32\x33\x30\x2e\x30\x30\x31\x20\x2d\x35\x2e\x38\
+\x20\x32\x33\x34\x2e\x30\x30\x31\x43\x2d\x35\x2e\x38\x20\x32\x33\
+\x34\x2e\x30\x30\x31\x20\x2d\x37\x2e\x34\x20\x32\x33\x34\x2e\x38\
+\x30\x31\x20\x2d\x38\x2e\x36\x20\x32\x33\x35\x2e\x32\x30\x31\x43\
+\x2d\x38\x2e\x36\x20\x32\x33\x35\x2e\x32\x30\x31\x20\x2d\x37\x2e\
+\x34\x20\x32\x33\x38\x2e\x38\x30\x31\x20\x2d\x31\x2e\x34\x20\x32\
+\x34\x30\x2e\x34\x30\x31\x43\x2d\x31\x2e\x34\x20\x32\x34\x30\x2e\
+\x34\x30\x31\x20\x30\x2e\x36\x20\x32\x34\x34\x2e\x38\x30\x31\x20\
+\x33\x20\x32\x34\x35\x2e\x32\x30\x31\x43\x35\x2e\x34\x20\x32\x34\
+\x35\x2e\x36\x30\x31\x20\x31\x30\x2e\x32\x20\x32\x35\x31\x2e\x32\
+\x30\x31\x20\x31\x34\x2e\x32\x20\x32\x35\x30\x2e\x30\x30\x31\x43\
+\x31\x38\x2e\x32\x20\x32\x34\x38\x2e\x38\x30\x31\x20\x32\x39\x2e\
+\x34\x20\x32\x34\x34\x2e\x38\x30\x31\x20\x32\x39\x2e\x34\x20\x32\
+\x34\x34\x2e\x38\x30\x31\x43\x32\x39\x2e\x34\x20\x32\x34\x34\x2e\
+\x38\x30\x31\x20\x33\x35\x20\x32\x34\x31\x2e\x36\x30\x31\x20\x34\
+\x33\x2e\x38\x20\x32\x34\x35\x2e\x32\x30\x31\x43\x34\x33\x2e\x38\
+\x20\x32\x34\x35\x2e\x32\x30\x31\x20\x34\x36\x2e\x31\x37\x35\x20\
+\x32\x34\x34\x2e\x33\x39\x39\x20\x34\x36\x2e\x36\x20\x32\x34\x30\
+\x2e\x34\x30\x31\x43\x34\x37\x2e\x31\x20\x32\x33\x35\x2e\x37\x30\
+\x31\x20\x35\x30\x2e\x32\x20\x32\x33\x32\x2e\x30\x30\x31\x20\x35\
+\x32\x2e\x32\x20\x32\x33\x30\x2e\x30\x30\x31\x43\x35\x34\x2e\x32\
+\x20\x32\x32\x38\x2e\x30\x30\x31\x20\x36\x33\x2e\x38\x20\x32\x31\
+\x35\x2e\x32\x30\x31\x20\x36\x32\x2e\x36\x20\x32\x31\x34\x2e\x38\
+\x30\x31\x43\x36\x31\x2e\x34\x20\x32\x31\x34\x2e\x34\x30\x31\x20\
+\x2d\x35\x2e\x34\x20\x32\x32\x32\x2e\x38\x30\x31\x20\x2d\x35\x2e\
+\x34\x20\x32\x32\x32\x2e\x38\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\
+\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x37\x32\
+\x37\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\
+\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x39\x2e\x38\x20\x31\x37\x34\x2e\x34\x30\x31\
+\x43\x2d\x39\x2e\x38\x20\x31\x37\x34\x2e\x34\x30\x31\x20\x2d\x31\
+\x32\x2e\x36\x20\x31\x39\x36\x2e\x38\x30\x31\x20\x2d\x39\x2e\x34\
+\x20\x32\x30\x35\x2e\x32\x30\x31\x43\x2d\x36\x2e\x32\x20\x32\x31\
+\x33\x2e\x36\x30\x31\x20\x2d\x37\x20\x32\x31\x35\x2e\x36\x30\x31\
+\x20\x2d\x37\x2e\x38\x20\x32\x31\x39\x2e\x36\x30\x31\x43\x2d\x38\
+\x2e\x36\x20\x32\x32\x33\x2e\x36\x30\x31\x20\x2d\x34\x2e\x32\x20\
+\x32\x33\x33\x2e\x36\x30\x31\x20\x31\x2e\x34\x20\x32\x33\x39\x2e\
+\x36\x30\x31\x4c\x31\x33\x2e\x34\x20\x32\x34\x31\x2e\x32\x30\x31\
+\x43\x31\x33\x2e\x34\x20\x32\x34\x31\x2e\x32\x30\x31\x20\x32\x38\
+\x2e\x36\x20\x32\x33\x37\x2e\x36\x30\x31\x20\x33\x37\x2e\x38\x20\
+\x32\x34\x30\x2e\x34\x30\x31\x43\x33\x37\x2e\x38\x20\x32\x34\x30\
+\x2e\x34\x30\x31\x20\x34\x36\x2e\x37\x39\x34\x20\x32\x34\x31\x2e\
+\x37\x34\x34\x20\x35\x30\x2e\x32\x20\x32\x32\x36\x2e\x38\x30\x31\
+\x43\x35\x30\x2e\x32\x20\x32\x32\x36\x2e\x38\x30\x31\x20\x35\x35\
+\x20\x32\x32\x30\x2e\x34\x30\x31\x20\x36\x32\x2e\x32\x20\x32\x31\
+\x37\x2e\x36\x30\x31\x43\x36\x39\x2e\x34\x20\x32\x31\x34\x2e\x38\
+\x30\x31\x20\x37\x36\x2e\x36\x20\x31\x37\x33\x2e\x32\x30\x31\x20\
+\x37\x32\x2e\x36\x20\x31\x36\x35\x2e\x32\x30\x31\x43\x36\x38\x2e\
+\x36\x20\x31\x35\x37\x2e\x32\x30\x31\x20\x35\x34\x2e\x32\x20\x31\
+\x35\x32\x2e\x38\x30\x31\x20\x33\x38\x2e\x32\x20\x31\x36\x38\x2e\
+\x34\x30\x31\x43\x32\x32\x2e\x32\x20\x31\x38\x34\x2e\x30\x30\x31\
+\x20\x32\x30\x2e\x32\x20\x31\x36\x37\x2e\x32\x30\x31\x20\x2d\x39\
+\x2e\x38\x20\x31\x37\x34\x2e\x34\x30\x31\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\
+\x66\x63\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\
+\x22\x3a\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x2d\x38\x2e\x32\x20\x32\x34\x39\x2e\x32\x30\x31\x43\x2d\
+\x38\x2e\x32\x20\x32\x34\x39\x2e\x32\x30\x31\x20\x2d\x39\x20\x32\
+\x34\x37\x2e\x32\x30\x31\x20\x2d\x31\x33\x2e\x34\x20\x32\x34\x36\
+\x2e\x38\x30\x31\x43\x2d\x31\x33\x2e\x34\x20\x32\x34\x36\x2e\x38\
+\x30\x31\x20\x2d\x33\x35\x2e\x38\x20\x32\x34\x33\x2e\x32\x30\x31\
+\x20\x2d\x34\x34\x2e\x32\x20\x32\x33\x30\x2e\x38\x30\x31\x43\x2d\
+\x34\x34\x2e\x32\x20\x32\x33\x30\x2e\x38\x30\x31\x20\x2d\x35\x31\
+\x20\x32\x32\x35\x2e\x32\x30\x31\x20\x2d\x34\x36\x2e\x36\x20\x32\
+\x33\x36\x2e\x38\x30\x31\x43\x2d\x34\x36\x2e\x36\x20\x32\x33\x36\
+\x2e\x38\x30\x31\x20\x2d\x33\x36\x2e\x32\x20\x32\x35\x37\x2e\x32\
+\x30\x31\x20\x2d\x32\x39\x2e\x34\x20\x32\x36\x30\x2e\x30\x30\x31\
+\x43\x2d\x32\x39\x2e\x34\x20\x32\x36\x30\x2e\x30\x30\x31\x20\x2d\
+\x31\x33\x20\x32\x36\x34\x2e\x30\x30\x31\x20\x2d\x38\x2e\x32\x20\
+\x32\x34\x39\x2e\x32\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x33\x66\x34\x63\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x37\x31\
+\x2e\x37\x34\x32\x20\x31\x38\x35\x2e\x32\x32\x39\x43\x37\x32\x2e\
+\x34\x30\x31\x20\x31\x37\x37\x2e\x33\x32\x33\x20\x37\x34\x2e\x33\
+\x35\x34\x20\x31\x36\x38\x2e\x37\x30\x39\x20\x37\x32\x2e\x36\x20\
+\x31\x36\x35\x2e\x32\x30\x31\x43\x36\x36\x2e\x31\x35\x34\x20\x31\
+\x35\x32\x2e\x33\x30\x37\x20\x34\x39\x2e\x31\x38\x31\x20\x31\x35\
+\x37\x2e\x36\x39\x35\x20\x33\x38\x2e\x32\x20\x31\x36\x38\x2e\x34\
+\x30\x31\x43\x32\x32\x2e\x32\x20\x31\x38\x34\x2e\x30\x30\x31\x20\
+\x32\x30\x2e\x32\x20\x31\x36\x37\x2e\x32\x30\x31\x20\x2d\x39\x2e\
+\x38\x20\x31\x37\x34\x2e\x34\x30\x31\x43\x2d\x39\x2e\x38\x20\x31\
+\x37\x34\x2e\x34\x30\x31\x20\x2d\x31\x31\x2e\x35\x34\x35\x20\x31\
+\x38\x38\x2e\x33\x36\x34\x20\x2d\x31\x30\x2e\x37\x30\x35\x20\x31\
+\x39\x38\x2e\x33\x37\x36\x43\x2d\x31\x30\x2e\x37\x30\x35\x20\x31\
+\x39\x38\x2e\x33\x37\x36\x20\x32\x36\x2e\x36\x20\x31\x38\x36\x2e\
+\x38\x30\x31\x20\x32\x37\x2e\x34\x20\x31\x39\x32\x2e\x34\x30\x31\
+\x43\x32\x37\x2e\x34\x20\x31\x39\x32\x2e\x34\x30\x31\x20\x32\x39\
+\x20\x31\x38\x39\x2e\x32\x30\x31\x20\x33\x38\x2e\x32\x20\x31\x38\
+\x39\x2e\x32\x30\x31\x43\x34\x37\x2e\x34\x20\x31\x38\x39\x2e\x32\
+\x30\x31\x20\x37\x30\x2e\x31\x34\x32\x20\x31\x38\x38\x2e\x30\x32\
+\x39\x20\x37\x31\x2e\x37\x34\x32\x20\x31\x38\x35\x2e\x32\x32\x39\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x73\x74\x72\x6f\x6b\x65\
+\x22\x3a\x22\x23\x61\x35\x31\x39\x32\x36\x22\x2c\x20\x22\x77\x69\
+\x64\x74\x68\x22\x3a\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x32\x38\x2e\x36\x20\x31\x37\x35\x2e\x32\x30\x31\x43\
+\x32\x38\x2e\x36\x20\x31\x37\x35\x2e\x32\x30\x31\x20\x33\x33\x2e\
+\x34\x20\x31\x38\x30\x2e\x30\x30\x31\x20\x32\x39\x2e\x38\x20\x31\
+\x38\x39\x2e\x36\x30\x31\x43\x32\x39\x2e\x38\x20\x31\x38\x39\x2e\
+\x36\x30\x31\x20\x31\x35\x2e\x34\x20\x32\x30\x35\x2e\x36\x30\x31\
+\x20\x31\x37\x2e\x34\x20\x32\x31\x39\x2e\x36\x30\x31\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\
+\x66\x66\x66\x63\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\
+\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\
+\x74\x68\x22\x3a\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x31\x39\x2e\x34\x20\x32\x36\x30\x2e\x30\x30\
+\x31\x43\x2d\x31\x39\x2e\x34\x20\x32\x36\x30\x2e\x30\x30\x31\x20\
+\x2d\x32\x33\x2e\x38\x20\x32\x34\x37\x2e\x32\x30\x31\x20\x2d\x31\
+\x35\x20\x32\x35\x34\x2e\x30\x30\x31\x43\x2d\x31\x35\x20\x32\x35\
+\x34\x2e\x30\x30\x31\x20\x2d\x31\x30\x2e\x32\x20\x32\x35\x36\x2e\
+\x30\x30\x31\x20\x2d\x31\x31\x2e\x34\x20\x32\x35\x37\x2e\x36\x30\
+\x31\x43\x2d\x31\x32\x2e\x36\x20\x32\x35\x39\x2e\x32\x30\x31\x20\
+\x2d\x31\x38\x2e\x32\x20\x32\x36\x33\x2e\x32\x30\x31\x20\x2d\x31\
+\x39\x2e\x34\x20\x32\x36\x30\x2e\x30\x30\x31\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\
+\x66\x66\x63\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\
+\x68\x22\x3a\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x31\x34\x2e\x33\x36\x20\x32\x36\x31\x2e\x32\x30\
+\x31\x43\x2d\x31\x34\x2e\x33\x36\x20\x32\x36\x31\x2e\x32\x30\x31\
+\x20\x2d\x31\x37\x2e\x38\x38\x20\x32\x35\x30\x2e\x39\x36\x31\x20\
+\x2d\x31\x30\x2e\x38\x34\x20\x32\x35\x36\x2e\x34\x30\x31\x43\x2d\
+\x31\x30\x2e\x38\x34\x20\x32\x35\x36\x2e\x34\x30\x31\x20\x2d\x36\
+\x2e\x34\x31\x39\x20\x32\x35\x38\x2e\x38\x34\x39\x20\x2d\x37\x2e\
+\x39\x36\x20\x32\x35\x39\x2e\x32\x38\x31\x43\x2d\x31\x32\x2e\x35\
+\x32\x20\x32\x36\x30\x2e\x35\x36\x31\x20\x2d\x37\x2e\x39\x36\x20\
+\x32\x36\x33\x2e\x31\x32\x31\x20\x2d\x31\x34\x2e\x33\x36\x20\x32\
+\x36\x31\x2e\x32\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x63\x63\x22\
+\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\
+\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\
+\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x39\
+\x2e\x35\x36\x20\x32\x36\x31\x2e\x32\x30\x31\x43\x2d\x39\x2e\x35\
+\x36\x20\x32\x36\x31\x2e\x32\x30\x31\x20\x2d\x31\x33\x2e\x30\x38\
+\x20\x32\x35\x30\x2e\x39\x36\x31\x20\x2d\x36\x2e\x30\x34\x20\x32\
+\x35\x36\x2e\x34\x30\x31\x43\x2d\x36\x2e\x30\x34\x20\x32\x35\x36\
+\x2e\x34\x30\x31\x20\x2d\x31\x2e\x36\x36\x35\x20\x32\x35\x38\x2e\
+\x37\x31\x31\x20\x2d\x33\x2e\x31\x36\x20\x32\x35\x39\x2e\x32\x38\
+\x31\x43\x2d\x36\x2e\x35\x32\x20\x32\x36\x30\x2e\x35\x36\x31\x20\
+\x2d\x33\x2e\x31\x36\x20\x32\x36\x33\x2e\x31\x32\x31\x20\x2d\x39\
+\x2e\x35\x36\x20\x32\x36\x31\x2e\x32\x30\x31\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\
+\x66\x66\x63\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\
+\x68\x22\x3a\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x32\x2e\x39\x36\x20\x32\x36\x31\x2e\x34\x30\x31\
+\x43\x2d\x32\x2e\x39\x36\x20\x32\x36\x31\x2e\x34\x30\x31\x20\x2d\
+\x36\x2e\x34\x38\x20\x32\x35\x31\x2e\x31\x36\x31\x20\x30\x2e\x35\
+\x36\x20\x32\x35\x36\x2e\x36\x30\x31\x43\x30\x2e\x35\x36\x20\x32\
+\x35\x36\x2e\x36\x30\x31\x20\x34\x2e\x39\x34\x33\x20\x32\x35\x38\
+\x2e\x39\x33\x33\x20\x33\x2e\x34\x34\x31\x20\x32\x35\x39\x2e\x34\
+\x38\x31\x43\x30\x2e\x34\x38\x20\x32\x36\x30\x2e\x35\x36\x31\x20\
+\x33\x2e\x34\x34\x31\x20\x32\x36\x33\x2e\x33\x32\x31\x20\x2d\x32\
+\x2e\x39\x36\x20\x32\x36\x31\x2e\x34\x30\x31\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\
+\x66\x66\x63\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\
+\x68\x22\x3a\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x33\x2e\x35\x32\x20\x32\x36\x31\x2e\x33\x32\x31\x43\
+\x33\x2e\x35\x32\x20\x32\x36\x31\x2e\x33\x32\x31\x20\x30\x20\x32\
+\x35\x31\x2e\x30\x38\x31\x20\x37\x2e\x30\x34\x31\x20\x32\x35\x36\
+\x2e\x35\x32\x31\x43\x37\x2e\x30\x34\x31\x20\x32\x35\x36\x2e\x35\
+\x32\x31\x20\x31\x30\x2e\x38\x38\x31\x20\x32\x35\x38\x2e\x31\x32\
+\x31\x20\x39\x2e\x39\x32\x31\x20\x32\x35\x39\x2e\x34\x30\x31\x43\
+\x38\x2e\x39\x36\x31\x20\x32\x36\x30\x2e\x36\x38\x31\x20\x39\x2e\
+\x39\x32\x31\x20\x32\x36\x33\x2e\x32\x34\x31\x20\x33\x2e\x35\x32\
+\x20\x32\x36\x31\x2e\x33\x32\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x63\
+\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\
+\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\
+\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\
+\x31\x30\x2e\x32\x20\x32\x36\x32\x2e\x30\x30\x31\x43\x31\x30\x2e\
+\x32\x20\x32\x36\x32\x2e\x30\x30\x31\x20\x35\x2e\x34\x20\x32\x34\
+\x39\x2e\x36\x30\x31\x20\x31\x34\x2e\x36\x20\x32\x35\x36\x2e\x30\
+\x30\x31\x43\x31\x34\x2e\x36\x20\x32\x35\x36\x2e\x30\x30\x31\x20\
+\x31\x39\x2e\x34\x20\x32\x35\x38\x2e\x30\x30\x31\x20\x31\x38\x2e\
+\x32\x20\x32\x35\x39\x2e\x36\x30\x31\x43\x31\x37\x20\x32\x36\x31\
+\x2e\x32\x30\x31\x20\x31\x38\x2e\x32\x20\x32\x36\x34\x2e\x34\x30\
+\x31\x20\x31\x30\x2e\x32\x20\x32\x36\x32\x2e\x30\x30\x31\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\
+\x22\x23\x61\x35\x32\x36\x34\x63\x22\x2c\x20\x22\x77\x69\x64\x74\
+\x68\x22\x3a\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x2d\x31\x38\x2e\x32\x20\x32\x34\x34\x2e\x38\x30\x31\x43\x2d\
+\x31\x38\x2e\x32\x20\x32\x34\x34\x2e\x38\x30\x31\x20\x2d\x35\x20\
+\x32\x34\x32\x2e\x30\x30\x31\x20\x31\x20\x32\x34\x35\x2e\x32\x30\
+\x31\x43\x31\x20\x32\x34\x35\x2e\x32\x30\x31\x20\x37\x20\x32\x34\
+\x36\x2e\x34\x30\x31\x20\x38\x2e\x32\x20\x32\x34\x36\x2e\x30\x30\
+\x31\x43\x39\x2e\x34\x20\x32\x34\x35\x2e\x36\x30\x31\x20\x31\x32\
+\x2e\x36\x20\x32\x34\x35\x2e\x32\x30\x31\x20\x31\x32\x2e\x36\x20\
+\x32\x34\x35\x2e\x32\x30\x31\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x61\x35\x32\x36\x34\x63\
+\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x32\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x35\x2e\x38\x20\x32\x35\
+\x33\x2e\x36\x30\x31\x43\x31\x35\x2e\x38\x20\x32\x35\x33\x2e\x36\
+\x30\x31\x20\x32\x37\x2e\x38\x20\x32\x34\x30\x2e\x30\x30\x31\x20\
+\x33\x39\x2e\x38\x20\x32\x34\x34\x2e\x34\x30\x31\x43\x34\x36\x2e\
+\x38\x31\x36\x20\x32\x34\x36\x2e\x39\x37\x34\x20\x34\x35\x2e\x38\
+\x20\x32\x34\x33\x2e\x36\x30\x31\x20\x34\x36\x2e\x36\x20\x32\x34\
+\x30\x2e\x38\x30\x31\x43\x34\x37\x2e\x34\x20\x32\x33\x38\x2e\x30\
+\x30\x31\x20\x34\x37\x2e\x36\x20\x32\x33\x33\x2e\x38\x30\x31\x20\
+\x35\x32\x2e\x36\x20\x32\x33\x30\x2e\x38\x30\x31\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\
+\x66\x66\x63\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\
+\x68\x22\x3a\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x33\x33\x20\x32\x33\x37\x2e\x36\x30\x31\x43\x33\x33\
+\x20\x32\x33\x37\x2e\x36\x30\x31\x20\x32\x39\x20\x32\x32\x36\x2e\
+\x38\x30\x31\x20\x32\x36\x2e\x32\x20\x32\x33\x39\x2e\x36\x30\x31\
+\x43\x32\x33\x2e\x34\x20\x32\x35\x32\x2e\x34\x30\x31\x20\x32\x30\
+\x2e\x32\x20\x32\x35\x36\x2e\x30\x30\x31\x20\x31\x38\x2e\x36\x20\
+\x32\x35\x38\x2e\x38\x30\x31\x43\x31\x38\x2e\x36\x20\x32\x35\x38\
+\x2e\x38\x30\x31\x20\x31\x38\x2e\x36\x20\x32\x36\x34\x2e\x30\x30\
+\x31\x20\x32\x37\x20\x32\x36\x33\x2e\x36\x30\x31\x43\x32\x37\x20\
+\x32\x36\x33\x2e\x36\x30\x31\x20\x33\x37\x2e\x38\x20\x32\x36\x33\
+\x2e\x32\x30\x31\x20\x33\x38\x2e\x32\x20\x32\x36\x30\x2e\x34\x30\
+\x31\x43\x33\x38\x2e\x36\x20\x32\x35\x37\x2e\x36\x30\x31\x20\x33\
+\x37\x20\x32\x34\x36\x2e\x30\x30\x31\x20\x33\x33\x20\x32\x33\x37\
+\x2e\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x73\x74\
+\x72\x6f\x6b\x65\x22\x3a\x22\x23\x61\x35\x32\x36\x34\x63\x22\x2c\
+\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x32\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x34\x37\x20\x32\x34\x34\x2e\x38\x30\
+\x31\x43\x34\x37\x20\x32\x34\x34\x2e\x38\x30\x31\x20\x35\x30\x2e\
+\x36\x20\x32\x34\x32\x2e\x34\x30\x31\x20\x35\x33\x20\x32\x34\x33\
+\x2e\x36\x30\x31\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x73\x74\x72\
+\x6f\x6b\x65\x22\x3a\x22\x23\x61\x35\x32\x36\x34\x63\x22\x2c\x20\
+\x22\x77\x69\x64\x74\x68\x22\x3a\x32\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x35\x33\x2e\x35\x20\x32\x32\x38\x2e\x34\
+\x30\x31\x43\x35\x33\x2e\x35\x20\x32\x32\x38\x2e\x34\x30\x31\x20\
+\x35\x36\x2e\x34\x20\x32\x32\x33\x2e\x35\x30\x31\x20\x36\x31\x2e\
+\x32\x20\x32\x32\x32\x2e\x37\x30\x31\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x62\x32\x62\x32\x62\
+\x32\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\
+\x32\x35\x2e\x38\x20\x32\x36\x35\x2e\x32\x30\x31\x43\x2d\x32\x35\
+\x2e\x38\x20\x32\x36\x35\x2e\x32\x30\x31\x20\x2d\x37\x2e\x38\x20\
+\x32\x36\x38\x2e\x34\x30\x31\x20\x2d\x33\x2e\x34\x20\x32\x36\x36\
+\x2e\x38\x30\x31\x43\x2d\x33\x2e\x34\x20\x32\x36\x36\x2e\x38\x30\
+\x31\x20\x35\x2e\x34\x20\x32\x36\x36\x2e\x38\x30\x31\x20\x2d\x33\
+\x20\x32\x36\x38\x2e\x38\x30\x31\x43\x2d\x33\x20\x32\x36\x38\x2e\
+\x38\x30\x31\x20\x2d\x31\x35\x2e\x38\x20\x32\x36\x38\x2e\x38\x30\
+\x31\x20\x2d\x32\x33\x2e\x38\x20\x32\x36\x37\x2e\x36\x30\x31\x43\
+\x2d\x32\x33\x2e\x38\x20\x32\x36\x37\x2e\x36\x30\x31\x20\x2d\x33\
+\x35\x2e\x34\x20\x32\x36\x32\x2e\x30\x30\x31\x20\x2d\x32\x35\x2e\
+\x38\x20\x32\x36\x35\x2e\x32\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\
+\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\
+\x63\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\
+\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\
+\x3a\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x2d\x31\x31\x2e\x38\x20\x31\x37\x32\x2e\x30\x30\x31\x43\x2d\
+\x31\x31\x2e\x38\x20\x31\x37\x32\x2e\x30\x30\x31\x20\x35\x2e\x38\
+\x20\x31\x37\x32\x2e\x30\x30\x31\x20\x37\x2e\x38\x20\x31\x37\x32\
+\x2e\x38\x30\x31\x43\x37\x2e\x38\x20\x31\x37\x32\x2e\x38\x30\x31\
+\x20\x31\x35\x20\x32\x30\x33\x2e\x36\x30\x31\x20\x31\x31\x2e\x34\
+\x20\x32\x31\x31\x2e\x32\x30\x31\x43\x31\x31\x2e\x34\x20\x32\x31\
+\x31\x2e\x32\x30\x31\x20\x31\x30\x2e\x32\x20\x32\x31\x34\x2e\x30\
+\x30\x31\x20\x37\x2e\x34\x20\x32\x30\x38\x2e\x34\x30\x31\x43\x37\
+\x2e\x34\x20\x32\x30\x38\x2e\x34\x30\x31\x20\x2d\x31\x31\x20\x31\
+\x37\x35\x2e\x36\x30\x31\x20\x2d\x31\x34\x2e\x32\x20\x31\x37\x33\
+\x2e\x36\x30\x31\x43\x2d\x31\x37\x2e\x34\x20\x31\x37\x31\x2e\x36\
+\x30\x31\x20\x2d\x31\x33\x20\x31\x37\x32\x2e\x30\x30\x31\x20\x2d\
+\x31\x31\x2e\x38\x20\x31\x37\x32\x2e\x30\x30\x31\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\
+\x66\x66\x66\x63\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\
+\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\
+\x74\x68\x22\x3a\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x38\x38\x2e\x39\x20\x31\x36\x39\x2e\x33\x30\
+\x31\x43\x2d\x38\x38\x2e\x39\x20\x31\x36\x39\x2e\x33\x30\x31\x20\
+\x2d\x38\x30\x20\x31\x37\x31\x2e\x30\x30\x31\x20\x2d\x36\x37\x2e\
+\x34\x20\x31\x37\x33\x2e\x36\x30\x31\x43\x2d\x36\x37\x2e\x34\x20\
+\x31\x37\x33\x2e\x36\x30\x31\x20\x2d\x36\x32\x2e\x36\x20\x31\x39\
+\x36\x2e\x30\x30\x31\x20\x2d\x35\x39\x2e\x34\x20\x32\x30\x30\x2e\
+\x38\x30\x31\x43\x2d\x35\x36\x2e\x32\x20\x32\x30\x35\x2e\x36\x30\
+\x31\x20\x2d\x35\x39\x2e\x38\x20\x32\x30\x35\x2e\x36\x30\x31\x20\
+\x2d\x36\x33\x2e\x34\x20\x32\x30\x32\x2e\x38\x30\x31\x43\x2d\x36\
+\x37\x20\x32\x30\x30\x2e\x30\x30\x31\x20\x2d\x38\x31\x2e\x38\x20\
+\x31\x38\x36\x2e\x30\x30\x31\x20\x2d\x38\x33\x2e\x38\x20\x31\x38\
+\x31\x2e\x36\x30\x31\x43\x2d\x38\x35\x2e\x38\x20\x31\x37\x37\x2e\
+\x32\x30\x31\x20\x2d\x38\x38\x2e\x39\x20\x31\x36\x39\x2e\x33\x30\
+\x31\x20\x2d\x38\x38\x2e\x39\x20\x31\x36\x39\x2e\x33\x30\x31\x7a\
+\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\
+\x22\x23\x66\x66\x66\x66\x63\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\
+\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\
+\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x2d\x36\x37\x2e\x30\x33\x39\x20\x31\
+\x37\x33\x2e\x38\x31\x38\x43\x2d\x36\x37\x2e\x30\x33\x39\x20\x31\
+\x37\x33\x2e\x38\x31\x38\x20\x2d\x36\x31\x2e\x32\x33\x39\x20\x31\
+\x37\x35\x2e\x33\x36\x36\x20\x2d\x36\x30\x2e\x32\x33\x20\x31\x37\
+\x37\x2e\x35\x38\x31\x43\x2d\x35\x39\x2e\x32\x32\x32\x20\x31\x37\
+\x39\x2e\x37\x39\x35\x20\x2d\x36\x31\x2e\x34\x33\x32\x20\x31\x38\
+\x33\x2e\x30\x39\x32\x20\x2d\x36\x31\x2e\x34\x33\x32\x20\x31\x38\
+\x33\x2e\x30\x39\x32\x43\x2d\x36\x31\x2e\x34\x33\x32\x20\x31\x38\
+\x33\x2e\x30\x39\x32\x20\x2d\x36\x32\x2e\x34\x33\x32\x20\x31\x38\
+\x36\x2e\x33\x39\x37\x20\x2d\x36\x33\x2e\x36\x33\x34\x20\x31\x38\
+\x34\x2e\x32\x33\x35\x43\x2d\x36\x34\x2e\x38\x33\x36\x20\x31\x38\
+\x32\x2e\x30\x37\x32\x20\x2d\x36\x37\x2e\x37\x30\x38\x20\x31\x37\
+\x34\x2e\x34\x31\x32\x20\x2d\x36\x37\x2e\x30\x33\x39\x20\x31\x37\
+\x33\x2e\x38\x31\x38\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x36\x37\x20\
+\x31\x37\x33\x2e\x36\x30\x31\x43\x2d\x36\x37\x20\x31\x37\x33\x2e\
+\x36\x30\x31\x20\x2d\x36\x33\x2e\x34\x20\x31\x37\x38\x2e\x38\x30\
+\x31\x20\x2d\x35\x39\x2e\x38\x20\x31\x37\x38\x2e\x38\x30\x31\x43\
+\x2d\x35\x36\x2e\x32\x20\x31\x37\x38\x2e\x38\x30\x31\x20\x2d\x35\
+\x35\x2e\x38\x31\x38\x20\x31\x37\x38\x2e\x33\x38\x38\x20\x2d\x35\
+\x33\x20\x31\x37\x39\x2e\x30\x30\x31\x43\x2d\x34\x38\x2e\x34\x20\
+\x31\x38\x30\x2e\x30\x30\x31\x20\x2d\x34\x38\x2e\x38\x20\x31\x37\
+\x38\x2e\x30\x30\x31\x20\x2d\x34\x32\x2e\x32\x20\x31\x37\x39\x2e\
+\x32\x30\x31\x43\x2d\x33\x39\x2e\x35\x36\x20\x31\x37\x39\x2e\x36\
+\x38\x31\x20\x2d\x33\x37\x20\x31\x37\x38\x2e\x38\x30\x31\x20\x2d\
+\x33\x34\x2e\x32\x20\x31\x38\x30\x2e\x30\x30\x31\x43\x2d\x33\x31\
+\x2e\x34\x20\x31\x38\x31\x2e\x32\x30\x31\x20\x2d\x32\x38\x2e\x32\
+\x20\x31\x38\x30\x2e\x34\x30\x31\x20\x2d\x32\x37\x20\x31\x37\x38\
+\x2e\x34\x30\x31\x43\x2d\x32\x35\x2e\x38\x20\x31\x37\x36\x2e\x34\
+\x30\x31\x20\x2d\x32\x31\x20\x31\x37\x32\x2e\x32\x30\x31\x20\x2d\
+\x32\x31\x20\x31\x37\x32\x2e\x32\x30\x31\x43\x2d\x32\x31\x20\x31\
+\x37\x32\x2e\x32\x30\x31\x20\x2d\x33\x33\x2e\x38\x20\x31\x37\x34\
+\x2e\x30\x30\x31\x20\x2d\x33\x36\x2e\x36\x20\x31\x37\x34\x2e\x38\
+\x30\x31\x43\x2d\x33\x36\x2e\x36\x20\x31\x37\x34\x2e\x38\x30\x31\
+\x20\x2d\x35\x39\x20\x31\x37\x36\x2e\x30\x30\x31\x20\x2d\x36\x37\
+\x20\x31\x37\x33\x2e\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x63\
+\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\
+\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\
+\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\
+\x2d\x32\x32\x2e\x34\x20\x31\x37\x33\x2e\x38\x30\x31\x43\x2d\x32\
+\x32\x2e\x34\x20\x31\x37\x33\x2e\x38\x30\x31\x20\x2d\x32\x38\x2e\
+\x38\x35\x20\x31\x37\x37\x2e\x33\x30\x31\x20\x2d\x32\x39\x2e\x32\
+\x35\x20\x31\x37\x39\x2e\x37\x30\x31\x43\x2d\x32\x39\x2e\x36\x35\
+\x20\x31\x38\x32\x2e\x31\x30\x31\x20\x2d\x32\x34\x20\x31\x38\x35\
+\x2e\x38\x30\x31\x20\x2d\x32\x34\x20\x31\x38\x35\x2e\x38\x30\x31\
+\x43\x2d\x32\x34\x20\x31\x38\x35\x2e\x38\x30\x31\x20\x2d\x32\x31\
+\x2e\x32\x35\x20\x31\x39\x30\x2e\x34\x30\x31\x20\x2d\x32\x30\x2e\
+\x36\x35\x20\x31\x38\x38\x2e\x30\x30\x31\x43\x2d\x32\x30\x2e\x30\
+\x35\x20\x31\x38\x35\x2e\x36\x30\x31\x20\x2d\x32\x31\x2e\x36\x20\
+\x31\x37\x34\x2e\x32\x30\x31\x20\x2d\x32\x32\x2e\x34\x20\x31\x37\
+\x33\x2e\x38\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x63\x63\x22\x2c\
+\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\
+\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x35\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x35\x39\
+\x2e\x38\x38\x35\x20\x31\x37\x39\x2e\x32\x36\x35\x43\x2d\x35\x39\
+\x2e\x38\x38\x35\x20\x31\x37\x39\x2e\x32\x36\x35\x20\x2d\x35\x32\
+\x2e\x38\x37\x38\x20\x31\x39\x30\x2e\x34\x35\x33\x20\x2d\x35\x32\
+\x2e\x36\x36\x31\x20\x31\x37\x39\x2e\x32\x34\x32\x43\x2d\x35\x32\
+\x2e\x36\x36\x31\x20\x31\x37\x39\x2e\x32\x34\x32\x20\x2d\x35\x32\
+\x2e\x31\x30\x34\x20\x31\x37\x37\x2e\x39\x38\x34\x20\x2d\x35\x33\
+\x2e\x38\x36\x34\x20\x31\x37\x37\x2e\x39\x36\x32\x43\x2d\x35\x39\
+\x2e\x39\x33\x39\x20\x31\x37\x37\x2e\x38\x38\x36\x20\x2d\x35\x38\
+\x2e\x34\x31\x38\x20\x31\x37\x33\x2e\x37\x38\x34\x20\x2d\x35\x39\
+\x2e\x38\x38\x35\x20\x31\x37\x39\x2e\x32\x36\x35\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\
+\x66\x66\x66\x63\x63\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\
+\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\
+\x74\x68\x22\x3a\x30\x2e\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x35\x32\x2e\x37\x30\x37\x20\x31\x37\x39\x2e\
+\x35\x31\x34\x43\x2d\x35\x32\x2e\x37\x30\x37\x20\x31\x37\x39\x2e\
+\x35\x31\x34\x20\x2d\x34\x34\x2e\x37\x38\x36\x20\x31\x39\x30\x2e\
+\x37\x30\x31\x20\x2d\x34\x35\x2e\x34\x32\x32\x20\x31\x37\x39\x2e\
+\x34\x32\x31\x43\x2d\x34\x35\x2e\x34\x32\x32\x20\x31\x37\x39\x2e\
+\x34\x32\x31\x20\x2d\x34\x35\x2e\x34\x31\x35\x20\x31\x37\x39\x2e\
+\x30\x38\x39\x20\x2d\x34\x37\x2e\x31\x36\x38\x20\x31\x37\x38\x2e\
+\x39\x33\x36\x43\x2d\x35\x31\x2e\x39\x31\x35\x20\x31\x37\x38\x2e\
+\x35\x32\x32\x20\x2d\x35\x31\x2e\x35\x37\x20\x31\x37\x34\x2e\x30\
+\x30\x34\x20\x2d\x35\x32\x2e\x37\x30\x37\x20\x31\x37\x39\x2e\x35\
+\x31\x34\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x63\x63\x22\x2c\x20\x22\x73\
+\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\
+\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x35\x2c\x0a\x20\
+\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x34\x35\x2e\x34\x39\
+\x34\x20\x31\x37\x39\x2e\x35\x32\x32\x43\x2d\x34\x35\x2e\x34\x39\
+\x34\x20\x31\x37\x39\x2e\x35\x32\x32\x20\x2d\x33\x37\x2e\x35\x33\
+\x34\x20\x31\x39\x30\x2e\x31\x35\x20\x2d\x33\x38\x2e\x32\x30\x33\
+\x20\x31\x38\x30\x2e\x34\x38\x34\x43\x2d\x33\x38\x2e\x32\x30\x33\
+\x20\x31\x38\x30\x2e\x34\x38\x34\x20\x2d\x33\x38\x2e\x30\x38\x34\
+\x20\x31\x37\x39\x2e\x32\x35\x31\x20\x2d\x33\x39\x2e\x37\x33\x38\
+\x20\x31\x37\x38\x2e\x39\x35\x43\x2d\x34\x33\x2e\x36\x33\x20\x31\
+\x37\x38\x2e\x32\x34\x34\x20\x2d\x34\x33\x2e\x38\x34\x31\x20\x31\
+\x37\x34\x2e\x39\x39\x35\x20\x2d\x34\x35\x2e\x34\x39\x34\x20\x31\
+\x37\x39\x2e\x35\x32\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x63\x63\x22\
+\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\
+\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\
+\x35\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x33\
+\x38\x2e\x36\x31\x38\x20\x31\x37\x39\x2e\x36\x30\x32\x43\x2d\x33\
+\x38\x2e\x36\x31\x38\x20\x31\x37\x39\x2e\x36\x30\x32\x20\x2d\x33\
+\x30\x2e\x37\x31\x38\x20\x31\x39\x31\x2e\x31\x36\x33\x20\x2d\x33\
+\x30\x2e\x33\x37\x20\x31\x38\x31\x2e\x33\x38\x32\x43\x2d\x33\x30\
+\x2e\x33\x37\x20\x31\x38\x31\x2e\x33\x38\x32\x20\x2d\x32\x38\x2e\
+\x37\x32\x36\x20\x31\x38\x30\x2e\x30\x30\x34\x20\x2d\x33\x30\x2e\
+\x34\x37\x32\x20\x31\x37\x39\x2e\x37\x38\x32\x43\x2d\x33\x36\x2e\
+\x32\x39\x20\x31\x37\x39\x2e\x30\x34\x32\x20\x2d\x33\x35\x2e\x34\
+\x39\x32\x20\x31\x37\x34\x2e\x35\x38\x38\x20\x2d\x33\x38\x2e\x36\
+\x31\x38\x20\x31\x37\x39\x2e\x36\x30\x32\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x65\x35\x65\
+\x35\x62\x32\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x2d\x37\x34\x2e\x37\x39\x32\x20\x31\x38\x33\x2e\x31\x33\x32\
+\x4c\x2d\x38\x32\x2e\x34\x35\x20\x31\x38\x31\x2e\x36\x30\x31\x43\
+\x2d\x38\x35\x2e\x30\x35\x20\x31\x37\x36\x2e\x36\x30\x31\x20\x2d\
+\x38\x37\x2e\x31\x35\x20\x31\x37\x30\x2e\x34\x35\x31\x20\x2d\x38\
+\x37\x2e\x31\x35\x20\x31\x37\x30\x2e\x34\x35\x31\x43\x2d\x38\x37\
+\x2e\x31\x35\x20\x31\x37\x30\x2e\x34\x35\x31\x20\x2d\x38\x30\x2e\
+\x38\x20\x31\x37\x31\x2e\x34\x35\x31\x20\x2d\x36\x38\x2e\x33\x20\
+\x31\x37\x34\x2e\x32\x35\x31\x43\x2d\x36\x38\x2e\x33\x20\x31\x37\
+\x34\x2e\x32\x35\x31\x20\x2d\x36\x37\x2e\x34\x32\x34\x20\x31\x37\
+\x37\x2e\x35\x36\x39\x20\x2d\x36\x35\x2e\x39\x35\x32\x20\x31\x38\
+\x33\x2e\x33\x36\x34\x4c\x2d\x37\x34\x2e\x37\x39\x32\x20\x31\x38\
+\x33\x2e\x31\x33\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x65\x35\x65\x35\x62\x32\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x39\x2e\x37\
+\x32\x34\x20\x31\x37\x38\x2e\x34\x37\x43\x2d\x31\x31\x2e\x33\x39\
+\x20\x31\x37\x35\x2e\x39\x36\x34\x20\x2d\x31\x32\x2e\x37\x30\x37\
+\x20\x31\x37\x34\x2e\x32\x30\x36\x20\x2d\x31\x33\x2e\x33\x35\x37\
+\x20\x31\x37\x33\x2e\x38\x43\x2d\x31\x36\x2e\x33\x37\x20\x31\x37\
+\x31\x2e\x39\x31\x37\x20\x2d\x31\x32\x2e\x32\x32\x37\x20\x31\x37\
+\x32\x2e\x32\x39\x34\x20\x2d\x31\x31\x2e\x30\x39\x38\x20\x31\x37\
+\x32\x2e\x32\x39\x34\x43\x2d\x31\x31\x2e\x30\x39\x38\x20\x31\x37\
+\x32\x2e\x32\x39\x34\x20\x35\x2e\x34\x37\x33\x20\x31\x37\x32\x2e\
+\x32\x39\x34\x20\x37\x2e\x33\x35\x36\x20\x31\x37\x33\x2e\x30\x34\
+\x37\x43\x37\x2e\x33\x35\x36\x20\x31\x37\x33\x2e\x30\x34\x37\x20\
+\x37\x2e\x38\x38\x20\x31\x37\x35\x2e\x32\x38\x39\x20\x38\x2e\x35\
+\x36\x34\x20\x31\x37\x38\x2e\x36\x38\x43\x38\x2e\x35\x36\x34\x20\
+\x31\x37\x38\x2e\x36\x38\x20\x2d\x31\x2e\x35\x32\x34\x20\x31\x37\
+\x36\x2e\x36\x37\x20\x2d\x39\x2e\x37\x32\x34\x20\x31\x37\x38\x2e\
+\x34\x37\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x63\x63\x37\x32\x32\x36\x22\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x34\x33\x2e\x38\x38\x20\x34\
+\x30\x2e\x33\x32\x31\x43\x37\x31\x2e\x36\x30\x31\x20\x34\x34\x2e\
+\x32\x38\x31\x20\x39\x37\x2e\x31\x32\x31\x20\x38\x2e\x36\x34\x31\
+\x20\x39\x38\x2e\x38\x38\x31\x20\x2d\x31\x2e\x30\x34\x43\x31\x30\
+\x30\x2e\x36\x34\x31\x20\x2d\x31\x30\x2e\x37\x32\x20\x39\x30\x2e\
+\x35\x32\x31\x20\x2d\x32\x32\x2e\x36\x20\x39\x30\x2e\x35\x32\x31\
+\x20\x2d\x32\x32\x2e\x36\x43\x39\x31\x2e\x38\x34\x31\x20\x2d\x32\
+\x35\x2e\x36\x38\x20\x38\x37\x2e\x30\x30\x31\x20\x2d\x33\x39\x2e\
+\x37\x36\x20\x38\x31\x2e\x37\x32\x31\x20\x2d\x34\x39\x43\x37\x36\
+\x2e\x34\x34\x31\x20\x2d\x35\x38\x2e\x32\x34\x20\x36\x30\x2e\x35\
+\x34\x20\x2d\x35\x37\x2e\x32\x36\x36\x20\x34\x33\x20\x2d\x35\x38\
+\x2e\x32\x34\x43\x32\x37\x2e\x31\x36\x20\x2d\x35\x39\x2e\x31\x32\
+\x20\x38\x2e\x36\x38\x20\x2d\x33\x35\x2e\x38\x20\x37\x2e\x33\x36\
+\x20\x2d\x33\x34\x2e\x30\x34\x43\x36\x2e\x30\x34\x20\x2d\x33\x32\
+\x2e\x32\x38\x20\x31\x32\x2e\x32\x20\x36\x2e\x30\x30\x31\x20\x31\
+\x33\x2e\x35\x32\x20\x31\x31\x2e\x37\x32\x31\x43\x31\x34\x2e\x38\
+\x34\x20\x31\x37\x2e\x34\x34\x31\x20\x31\x32\x2e\x32\x20\x34\x33\
+\x2e\x38\x34\x31\x20\x31\x32\x2e\x32\x20\x34\x33\x2e\x38\x34\x31\
+\x43\x34\x36\x2e\x34\x34\x20\x33\x34\x2e\x37\x34\x31\x20\x31\x36\
+\x2e\x31\x36\x20\x33\x36\x2e\x33\x36\x31\x20\x34\x33\x2e\x38\x38\
+\x20\x34\x30\x2e\x33\x32\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x65\x61\x38\x65\x35\x31\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x38\x2e\
+\x30\x38\x38\x20\x2d\x33\x33\x2e\x33\x39\x32\x43\x36\x2e\x37\x39\
+\x32\x20\x2d\x33\x31\x2e\x36\x36\x34\x20\x31\x32\x2e\x38\x34\x20\
+\x35\x2e\x39\x32\x31\x20\x31\x34\x2e\x31\x33\x36\x20\x31\x31\x2e\
+\x35\x33\x37\x43\x31\x35\x2e\x34\x33\x32\x20\x31\x37\x2e\x31\x35\
+\x33\x20\x31\x32\x2e\x38\x34\x20\x34\x33\x2e\x30\x37\x33\x20\x31\
+\x32\x2e\x38\x34\x20\x34\x33\x2e\x30\x37\x33\x43\x34\x35\x2e\x35\
+\x31\x32\x20\x33\x34\x2e\x31\x39\x33\x20\x31\x36\x2e\x37\x32\x38\
+\x20\x33\x35\x2e\x37\x32\x39\x20\x34\x33\x2e\x39\x34\x34\x20\x33\
+\x39\x2e\x36\x31\x37\x43\x37\x31\x2e\x31\x36\x31\x20\x34\x33\x2e\
+\x35\x30\x35\x20\x39\x36\x2e\x32\x31\x37\x20\x38\x2e\x35\x31\x33\
+\x20\x39\x37\x2e\x39\x34\x35\x20\x2d\x30\x2e\x39\x39\x32\x43\x39\
+\x39\x2e\x36\x37\x33\x20\x2d\x31\x30\x2e\x34\x39\x36\x20\x38\x39\
+\x2e\x37\x33\x37\x20\x2d\x32\x32\x2e\x31\x36\x20\x38\x39\x2e\x37\
+\x33\x37\x20\x2d\x32\x32\x2e\x31\x36\x43\x39\x31\x2e\x30\x33\x33\
+\x20\x2d\x32\x35\x2e\x31\x38\x34\x20\x38\x36\x2e\x32\x38\x31\x20\
+\x2d\x33\x39\x2e\x30\x30\x38\x20\x38\x31\x2e\x30\x39\x37\x20\x2d\
+\x34\x38\x2e\x30\x38\x43\x37\x35\x2e\x39\x31\x33\x20\x2d\x35\x37\
+\x2e\x31\x35\x32\x20\x36\x30\x2e\x33\x30\x32\x20\x2d\x35\x36\x2e\
+\x31\x39\x35\x20\x34\x33\x2e\x30\x38\x20\x2d\x35\x37\x2e\x31\x35\
+\x32\x43\x32\x37\x2e\x35\x32\x38\x20\x2d\x35\x38\x2e\x30\x31\x36\
+\x20\x39\x2e\x33\x38\x34\x20\x2d\x33\x35\x2e\x31\x32\x20\x38\x2e\
+\x30\x38\x38\x20\x2d\x33\x33\x2e\x33\x39\x32\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x65\x66\
+\x61\x61\x37\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x38\x2e\x38\x31\x36\x20\x2d\x33\x32\x2e\x37\x34\x34\x43\
+\x37\x2e\x35\x34\x34\x20\x2d\x33\x31\x2e\x30\x34\x38\x20\x31\x33\
+\x2e\x34\x38\x20\x35\x2e\x38\x34\x31\x20\x31\x34\x2e\x37\x35\x32\
+\x20\x31\x31\x2e\x33\x35\x33\x43\x31\x36\x2e\x30\x32\x34\x20\x31\
+\x36\x2e\x38\x36\x35\x20\x31\x33\x2e\x34\x38\x20\x34\x32\x2e\x33\
+\x30\x35\x20\x31\x33\x2e\x34\x38\x20\x34\x32\x2e\x33\x30\x35\x43\
+\x34\x34\x2e\x38\x38\x34\x20\x33\x33\x2e\x31\x34\x35\x20\x31\x37\
+\x2e\x32\x39\x36\x20\x33\x35\x2e\x30\x39\x37\x20\x34\x34\x2e\x30\
+\x30\x38\x20\x33\x38\x2e\x39\x31\x33\x43\x37\x30\x2e\x37\x32\x31\
+\x20\x34\x32\x2e\x37\x32\x39\x20\x39\x35\x2e\x33\x31\x33\x20\x38\
+\x2e\x33\x38\x35\x20\x39\x37\x2e\x30\x30\x39\x20\x2d\x30\x2e\x39\
+\x34\x34\x43\x39\x38\x2e\x37\x30\x35\x20\x2d\x31\x30\x2e\x32\x37\
+\x32\x20\x38\x38\x2e\x39\x35\x33\x20\x2d\x32\x31\x2e\x37\x32\x20\
+\x38\x38\x2e\x39\x35\x33\x20\x2d\x32\x31\x2e\x37\x32\x43\x39\x30\
+\x2e\x32\x32\x35\x20\x2d\x32\x34\x2e\x36\x38\x38\x20\x38\x35\x2e\
+\x35\x36\x31\x20\x2d\x33\x38\x2e\x32\x35\x36\x20\x38\x30\x2e\x34\
+\x37\x33\x20\x2d\x34\x37\x2e\x31\x36\x43\x37\x35\x2e\x33\x38\x35\
+\x20\x2d\x35\x36\x2e\x30\x36\x34\x20\x36\x30\x2e\x30\x36\x33\x20\
+\x2d\x35\x35\x2e\x31\x32\x35\x20\x34\x33\x2e\x31\x36\x20\x2d\x35\
+\x36\x2e\x30\x36\x34\x43\x32\x37\x2e\x38\x39\x36\x20\x2d\x35\x36\
+\x2e\x39\x31\x32\x20\x31\x30\x2e\x30\x38\x38\x20\x2d\x33\x34\x2e\
+\x34\x34\x20\x38\x2e\x38\x31\x36\x20\x2d\x33\x32\x2e\x37\x34\x34\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x66\x34\x63\x36\x61\x38\x22\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x39\x2e\x35\x34\x34\x20\x2d\x33\x32\
+\x2e\x30\x39\x36\x43\x38\x2e\x32\x39\x36\x20\x2d\x33\x30\x2e\x34\
+\x33\x32\x20\x31\x34\x2e\x31\x32\x20\x35\x2e\x37\x36\x31\x20\x31\
+\x35\x2e\x33\x36\x38\x20\x31\x31\x2e\x31\x36\x39\x43\x31\x36\x2e\
+\x36\x31\x36\x20\x31\x36\x2e\x35\x37\x37\x20\x31\x34\x2e\x31\x32\
+\x20\x34\x31\x2e\x35\x33\x37\x20\x31\x34\x2e\x31\x32\x20\x34\x31\
+\x2e\x35\x33\x37\x43\x34\x33\x2e\x35\x35\x36\x20\x33\x32\x2e\x34\
+\x39\x37\x20\x31\x37\x2e\x38\x36\x34\x20\x33\x34\x2e\x34\x36\x35\
+\x20\x34\x34\x2e\x30\x37\x32\x20\x33\x38\x2e\x32\x30\x39\x43\x37\
+\x30\x2e\x32\x38\x31\x20\x34\x31\x2e\x39\x35\x33\x20\x39\x34\x2e\
+\x34\x30\x39\x20\x38\x2e\x32\x35\x37\x20\x39\x36\x2e\x30\x37\x33\
+\x20\x2d\x30\x2e\x38\x39\x35\x43\x39\x37\x2e\x37\x33\x37\x20\x2d\
+\x31\x30\x2e\x30\x34\x38\x20\x38\x38\x2e\x31\x36\x39\x20\x2d\x32\
+\x31\x2e\x32\x38\x20\x38\x38\x2e\x31\x36\x39\x20\x2d\x32\x31\x2e\
+\x32\x38\x43\x38\x39\x2e\x34\x31\x37\x20\x2d\x32\x34\x2e\x31\x39\
+\x32\x20\x38\x34\x2e\x38\x34\x31\x20\x2d\x33\x37\x2e\x35\x30\x34\
+\x20\x37\x39\x2e\x38\x34\x39\x20\x2d\x34\x36\x2e\x32\x34\x43\x37\
+\x34\x2e\x38\x35\x37\x20\x2d\x35\x34\x2e\x39\x37\x36\x20\x35\x39\
+\x2e\x38\x32\x34\x20\x2d\x35\x34\x2e\x30\x35\x35\x20\x34\x33\x2e\
+\x32\x34\x20\x2d\x35\x34\x2e\x39\x37\x36\x43\x32\x38\x2e\x32\x36\
+\x34\x20\x2d\x35\x35\x2e\x38\x30\x38\x20\x31\x30\x2e\x37\x39\x32\
+\x20\x2d\x33\x33\x2e\x37\x36\x20\x39\x2e\x35\x34\x34\x20\x2d\x33\
+\x32\x2e\x30\x39\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x39\x65\x32\x64\x33\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x30\x2e\x32\
+\x37\x32\x20\x2d\x33\x31\x2e\x34\x34\x38\x43\x39\x2e\x30\x34\x38\
+\x20\x2d\x32\x39\x2e\x38\x31\x36\x20\x31\x34\x2e\x37\x36\x20\x35\
+\x2e\x36\x38\x31\x20\x31\x35\x2e\x39\x38\x34\x20\x31\x30\x2e\x39\
+\x38\x35\x43\x31\x37\x2e\x32\x30\x38\x20\x31\x36\x2e\x32\x38\x39\
+\x20\x31\x34\x2e\x37\x36\x20\x34\x30\x2e\x37\x36\x39\x20\x31\x34\
+\x2e\x37\x36\x20\x34\x30\x2e\x37\x36\x39\x43\x34\x32\x2e\x36\x32\
+\x38\x20\x33\x31\x2e\x38\x34\x39\x20\x31\x38\x2e\x34\x33\x32\x20\
+\x33\x33\x2e\x38\x33\x33\x20\x34\x34\x2e\x31\x33\x36\x20\x33\x37\
+\x2e\x35\x30\x35\x43\x36\x39\x2e\x38\x34\x31\x20\x34\x31\x2e\x31\
+\x37\x37\x20\x39\x33\x2e\x35\x30\x35\x20\x38\x2e\x31\x32\x39\x20\
+\x39\x35\x2e\x31\x33\x37\x20\x2d\x30\x2e\x38\x34\x38\x43\x39\x36\
+\x2e\x37\x36\x39\x20\x2d\x39\x2e\x38\x32\x34\x20\x38\x37\x2e\x33\
+\x38\x35\x20\x2d\x32\x30\x2e\x38\x34\x20\x38\x37\x2e\x33\x38\x35\
+\x20\x2d\x32\x30\x2e\x38\x34\x43\x38\x38\x2e\x36\x30\x39\x20\x2d\
+\x32\x33\x2e\x36\x39\x36\x20\x38\x34\x2e\x31\x32\x31\x20\x2d\x33\
+\x36\x2e\x37\x35\x32\x20\x37\x39\x2e\x32\x32\x35\x20\x2d\x34\x35\
+\x2e\x33\x32\x43\x37\x34\x2e\x33\x32\x39\x20\x2d\x35\x33\x2e\x38\
+\x38\x38\x20\x35\x39\x2e\x35\x38\x35\x20\x2d\x35\x32\x2e\x39\x38\
+\x35\x20\x34\x33\x2e\x33\x32\x20\x2d\x35\x33\x2e\x38\x38\x38\x43\
+\x32\x38\x2e\x36\x33\x32\x20\x2d\x35\x34\x2e\x37\x30\x34\x20\x31\
+\x31\x2e\x34\x39\x36\x20\x2d\x33\x33\x2e\x30\x38\x20\x31\x30\x2e\
+\x32\x37\x32\x20\x2d\x33\x31\x2e\x34\x34\x38\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\
+\x66\x66\x66\x66\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x34\x34\x2e\x32\x20\x33\x36\x2e\x38\x43\x36\x39\x2e\x34\
+\x20\x34\x30\x2e\x34\x20\x39\x32\x2e\x36\x30\x31\x20\x38\x20\x39\
+\x34\x2e\x32\x30\x31\x20\x2d\x30\x2e\x38\x43\x39\x35\x2e\x38\x30\
+\x31\x20\x2d\x39\x2e\x36\x20\x38\x36\x2e\x36\x30\x31\x20\x2d\x32\
+\x30\x2e\x34\x20\x38\x36\x2e\x36\x30\x31\x20\x2d\x32\x30\x2e\x34\
+\x43\x38\x37\x2e\x38\x30\x31\x20\x2d\x32\x33\x2e\x32\x20\x38\x33\
+\x2e\x34\x20\x2d\x33\x36\x20\x37\x38\x2e\x36\x20\x2d\x34\x34\x2e\
+\x34\x43\x37\x33\x2e\x38\x20\x2d\x35\x32\x2e\x38\x20\x35\x39\x2e\
+\x33\x34\x36\x20\x2d\x35\x31\x2e\x39\x31\x34\x20\x34\x33\x2e\x34\
+\x20\x2d\x35\x32\x2e\x38\x43\x32\x39\x20\x2d\x35\x33\x2e\x36\x20\
+\x31\x32\x2e\x32\x20\x2d\x33\x32\x2e\x34\x20\x31\x31\x20\x2d\x33\
+\x30\x2e\x38\x43\x39\x2e\x38\x20\x2d\x32\x39\x2e\x32\x20\x31\x35\
+\x2e\x34\x20\x35\x2e\x36\x20\x31\x36\x2e\x36\x20\x31\x30\x2e\x38\
+\x43\x31\x37\x2e\x38\x20\x31\x36\x20\x31\x35\x2e\x34\x20\x34\x30\
+\x20\x31\x35\x2e\x34\x20\x34\x30\x43\x34\x30\x2e\x39\x20\x33\x31\
+\x2e\x34\x20\x31\x39\x20\x33\x33\x2e\x32\x20\x34\x34\x2e\x32\x20\
+\x33\x36\x2e\x38\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x39\x30\x2e\x36\x30\
+\x31\x20\x32\x2e\x38\x43\x39\x30\x2e\x36\x30\x31\x20\x32\x2e\x38\
+\x20\x36\x32\x2e\x38\x20\x31\x30\x2e\x34\x20\x35\x31\x2e\x32\x20\
+\x38\x2e\x38\x43\x35\x31\x2e\x32\x20\x38\x2e\x38\x20\x33\x35\x2e\
+\x34\x20\x32\x2e\x32\x20\x32\x36\x2e\x36\x20\x32\x34\x43\x32\x36\
+\x2e\x36\x20\x32\x34\x20\x32\x33\x20\x33\x31\x2e\x32\x20\x32\x31\
+\x20\x33\x33\x2e\x32\x43\x31\x39\x20\x33\x35\x2e\x32\x20\x39\x30\
+\x2e\x36\x30\x31\x20\x32\x2e\x38\x20\x39\x30\x2e\x36\x30\x31\x20\
+\x32\x2e\x38\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\
+\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x39\x34\x2e\x34\x30\x31\
+\x20\x30\x2e\x36\x43\x39\x34\x2e\x34\x30\x31\x20\x30\x2e\x36\x20\
+\x36\x35\x2e\x34\x20\x31\x32\x2e\x38\x20\x35\x35\x2e\x34\x20\x31\
+\x32\x2e\x34\x43\x35\x35\x2e\x34\x20\x31\x32\x2e\x34\x20\x33\x39\
+\x20\x37\x2e\x38\x20\x33\x30\x2e\x36\x20\x32\x32\x2e\x34\x43\x33\
+\x30\x2e\x36\x20\x32\x32\x2e\x34\x20\x32\x32\x2e\x32\x20\x33\x31\
+\x2e\x36\x20\x31\x39\x20\x33\x33\x2e\x32\x43\x31\x39\x20\x33\x33\
+\x2e\x32\x20\x31\x38\x2e\x36\x20\x33\x34\x2e\x38\x20\x32\x35\x20\
+\x33\x30\x2e\x38\x4c\x33\x35\x2e\x34\x20\x33\x36\x43\x33\x35\x2e\
+\x34\x20\x33\x36\x20\x35\x30\x2e\x32\x20\x34\x35\x2e\x36\x20\x35\
+\x39\x2e\x38\x20\x32\x39\x2e\x36\x43\x35\x39\x2e\x38\x20\x32\x39\
+\x2e\x36\x20\x36\x33\x2e\x38\x20\x31\x38\x2e\x34\x20\x36\x33\x2e\
+\x38\x20\x31\x36\x2e\x34\x43\x36\x33\x2e\x38\x20\x31\x34\x2e\x34\
+\x20\x38\x35\x20\x38\x2e\x38\x20\x38\x36\x2e\x36\x30\x31\x20\x38\
+\x2e\x34\x43\x38\x38\x2e\x32\x30\x31\x20\x38\x20\x39\x34\x2e\x38\
+\x30\x31\x20\x33\x2e\x38\x20\x39\x34\x2e\x34\x30\x31\x20\x30\x2e\
+\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x39\x39\x63\x63\x33\x32\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x34\x37\x20\x33\x36\x2e\x35\x31\
+\x34\x43\x34\x30\x2e\x31\x32\x38\x20\x33\x36\x2e\x35\x31\x34\x20\
+\x33\x31\x2e\x37\x35\x35\x20\x33\x32\x2e\x36\x34\x39\x20\x33\x31\
+\x2e\x37\x35\x35\x20\x32\x36\x2e\x34\x43\x33\x31\x2e\x37\x35\x35\
+\x20\x32\x30\x2e\x31\x35\x32\x20\x34\x30\x2e\x31\x32\x38\x20\x31\
+\x33\x2e\x38\x38\x37\x20\x34\x37\x20\x31\x33\x2e\x38\x38\x37\x43\
+\x35\x33\x2e\x38\x37\x34\x20\x31\x33\x2e\x38\x38\x37\x20\x35\x39\
+\x2e\x34\x34\x36\x20\x31\x38\x2e\x39\x35\x32\x20\x35\x39\x2e\x34\
+\x34\x36\x20\x32\x35\x2e\x32\x43\x35\x39\x2e\x34\x34\x36\x20\x33\
+\x31\x2e\x34\x34\x39\x20\x35\x33\x2e\x38\x37\x34\x20\x33\x36\x2e\
+\x35\x31\x34\x20\x34\x37\x20\x33\x36\x2e\x35\x31\x34\x7a\x22\x7d\
+\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\
+\x36\x35\x39\x39\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x34\x33\x2e\x33\x37\x37\x20\x31\x39\x2e\x38\x33\
+\x43\x33\x38\x2e\x35\x33\x31\x20\x32\x30\x2e\x35\x35\x32\x20\x33\
+\x33\x2e\x34\x34\x32\x20\x32\x32\x2e\x30\x35\x35\x20\x33\x33\x2e\
+\x35\x31\x34\x20\x32\x31\x2e\x38\x33\x39\x43\x33\x35\x2e\x30\x35\
+\x34\x20\x31\x37\x2e\x32\x32\x20\x34\x31\x2e\x34\x31\x35\x20\x31\
+\x33\x2e\x38\x38\x37\x20\x34\x37\x20\x31\x33\x2e\x38\x38\x37\x43\
+\x35\x31\x2e\x32\x39\x36\x20\x31\x33\x2e\x38\x38\x37\x20\x35\x35\
+\x2e\x30\x38\x34\x20\x31\x35\x2e\x38\x36\x35\x20\x35\x37\x2e\x33\
+\x32\x20\x31\x38\x2e\x38\x37\x35\x43\x35\x37\x2e\x33\x32\x20\x31\
+\x38\x2e\x38\x37\x35\x20\x35\x32\x2e\x30\x30\x34\x20\x31\x38\x2e\
+\x35\x34\x35\x20\x34\x33\x2e\x33\x37\x37\x20\x31\x39\x2e\x38\x33\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x35\x35\x2e\x34\x20\x31\x39\x2e\x36\
+\x43\x35\x35\x2e\x34\x20\x31\x39\x2e\x36\x20\x35\x31\x20\x31\x36\
+\x2e\x34\x20\x35\x31\x20\x31\x38\x2e\x36\x43\x35\x31\x20\x31\x38\
+\x2e\x36\x20\x35\x34\x2e\x36\x20\x32\x33\x20\x35\x35\x2e\x34\x20\
+\x31\x39\x2e\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x34\x35\x2e\x34\x20\
+\x32\x37\x2e\x37\x32\x36\x43\x34\x32\x2e\x39\x30\x31\x20\x32\x37\
+\x2e\x37\x32\x36\x20\x34\x30\x2e\x38\x37\x35\x20\x32\x35\x2e\x37\
+\x20\x34\x30\x2e\x38\x37\x35\x20\x32\x33\x2e\x32\x43\x34\x30\x2e\
+\x38\x37\x35\x20\x32\x30\x2e\x37\x30\x31\x20\x34\x32\x2e\x39\x30\
+\x31\x20\x31\x38\x2e\x36\x37\x35\x20\x34\x35\x2e\x34\x20\x31\x38\
+\x2e\x36\x37\x35\x43\x34\x37\x2e\x39\x20\x31\x38\x2e\x36\x37\x35\
+\x20\x34\x39\x2e\x39\x32\x36\x20\x32\x30\x2e\x37\x30\x31\x20\x34\
+\x39\x2e\x39\x32\x36\x20\x32\x33\x2e\x32\x43\x34\x39\x2e\x39\x32\
+\x36\x20\x32\x35\x2e\x37\x20\x34\x37\x2e\x39\x20\x32\x37\x2e\x37\
+\x32\x36\x20\x34\x35\x2e\x34\x20\x32\x37\x2e\x37\x32\x36\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x63\x63\x37\x32\x32\x36\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x2d\x35\x38\x2e\x36\x20\x31\x34\x2e\x34\x43\
+\x2d\x35\x38\x2e\x36\x20\x31\x34\x2e\x34\x20\x2d\x36\x31\x2e\x38\
+\x20\x2d\x36\x2e\x38\x20\x2d\x35\x39\x2e\x34\x20\x2d\x31\x31\x2e\
+\x32\x43\x2d\x35\x39\x2e\x34\x20\x2d\x31\x31\x2e\x32\x20\x2d\x34\
+\x38\x2e\x36\x20\x2d\x32\x31\x2e\x32\x20\x2d\x34\x39\x20\x2d\x32\
+\x34\x2e\x38\x43\x2d\x34\x39\x20\x2d\x32\x34\x2e\x38\x20\x2d\x34\
+\x39\x2e\x34\x20\x2d\x34\x32\x2e\x38\x20\x2d\x35\x30\x2e\x36\x20\
+\x2d\x34\x33\x2e\x36\x43\x2d\x35\x31\x2e\x38\x20\x2d\x34\x34\x2e\
+\x34\x20\x2d\x35\x39\x2e\x34\x20\x2d\x35\x30\x2e\x34\x20\x2d\x36\
+\x35\x2e\x34\x20\x2d\x34\x34\x43\x2d\x36\x35\x2e\x34\x20\x2d\x34\
+\x34\x20\x2d\x37\x35\x2e\x38\x20\x2d\x32\x36\x20\x2d\x37\x35\x20\
+\x2d\x31\x39\x2e\x36\x4c\x2d\x37\x35\x20\x2d\x31\x37\x2e\x36\x43\
+\x2d\x37\x35\x20\x2d\x31\x37\x2e\x36\x20\x2d\x38\x32\x2e\x36\x20\
+\x2d\x31\x38\x20\x2d\x38\x34\x2e\x32\x20\x2d\x31\x36\x43\x2d\x38\
+\x34\x2e\x32\x20\x2d\x31\x36\x20\x2d\x38\x35\x2e\x34\x20\x2d\x31\
+\x30\x2e\x38\x20\x2d\x38\x36\x2e\x36\x20\x2d\x31\x30\x2e\x34\x43\
+\x2d\x38\x36\x2e\x36\x20\x2d\x31\x30\x2e\x34\x20\x2d\x38\x39\x2e\
+\x34\x20\x2d\x38\x20\x2d\x38\x37\x2e\x34\x20\x2d\x35\x2e\x32\x43\
+\x2d\x38\x37\x2e\x34\x20\x2d\x35\x2e\x32\x20\x2d\x38\x39\x2e\x34\
+\x20\x2d\x32\x2e\x38\x20\x2d\x38\x39\x20\x31\x2e\x32\x4c\x2d\x38\
+\x31\x2e\x34\x20\x35\x2e\x32\x43\x2d\x38\x31\x2e\x34\x20\x35\x2e\
+\x32\x20\x2d\x37\x39\x2e\x34\x20\x31\x39\x2e\x36\x20\x2d\x36\x38\
+\x2e\x36\x20\x32\x34\x2e\x38\x43\x2d\x36\x33\x2e\x37\x36\x34\x20\
+\x32\x37\x2e\x31\x32\x39\x20\x2d\x36\x30\x2e\x36\x20\x32\x30\x2e\
+\x34\x20\x2d\x35\x38\x2e\x36\x20\x31\x34\x2e\x34\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\
+\x66\x66\x66\x66\x66\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x35\x39\x2e\x36\x20\x31\x32\x2e\x35\x36\x43\x2d\
+\x35\x39\x2e\x36\x20\x31\x32\x2e\x35\x36\x20\x2d\x36\x32\x2e\x34\
+\x38\x20\x2d\x36\x2e\x35\x32\x20\x2d\x36\x30\x2e\x33\x32\x20\x2d\
+\x31\x30\x2e\x34\x38\x43\x2d\x36\x30\x2e\x33\x32\x20\x2d\x31\x30\
+\x2e\x34\x38\x20\x2d\x35\x30\x2e\x36\x20\x2d\x31\x39\x2e\x34\x38\
+\x20\x2d\x35\x30\x2e\x39\x36\x20\x2d\x32\x32\x2e\x37\x32\x43\x2d\
+\x35\x30\x2e\x39\x36\x20\x2d\x32\x32\x2e\x37\x32\x20\x2d\x35\x31\
+\x2e\x33\x32\x20\x2d\x33\x38\x2e\x39\x32\x20\x2d\x35\x32\x2e\x34\
+\x20\x2d\x33\x39\x2e\x36\x34\x43\x2d\x35\x33\x2e\x34\x38\x20\x2d\
+\x34\x30\x2e\x33\x36\x20\x2d\x36\x30\x2e\x33\x32\x20\x2d\x34\x35\
+\x2e\x37\x36\x20\x2d\x36\x35\x2e\x37\x32\x20\x2d\x34\x30\x43\x2d\
+\x36\x35\x2e\x37\x32\x20\x2d\x34\x30\x20\x2d\x37\x35\x2e\x30\x38\
+\x20\x2d\x32\x33\x2e\x38\x20\x2d\x37\x34\x2e\x33\x36\x20\x2d\x31\
+\x38\x2e\x30\x34\x4c\x2d\x37\x34\x2e\x33\x36\x20\x2d\x31\x36\x2e\
+\x32\x34\x43\x2d\x37\x34\x2e\x33\x36\x20\x2d\x31\x36\x2e\x32\x34\
+\x20\x2d\x38\x31\x2e\x32\x20\x2d\x31\x36\x2e\x36\x20\x2d\x38\x32\
+\x2e\x36\x34\x20\x2d\x31\x34\x2e\x38\x43\x2d\x38\x32\x2e\x36\x34\
+\x20\x2d\x31\x34\x2e\x38\x20\x2d\x38\x33\x2e\x37\x32\x20\x2d\x31\
+\x30\x2e\x31\x32\x20\x2d\x38\x34\x2e\x38\x20\x2d\x39\x2e\x37\x36\
+\x43\x2d\x38\x34\x2e\x38\x20\x2d\x39\x2e\x37\x36\x20\x2d\x38\x37\
+\x2e\x33\x32\x20\x2d\x37\x2e\x36\x20\x2d\x38\x35\x2e\x35\x32\x20\
+\x2d\x35\x2e\x30\x38\x43\x2d\x38\x35\x2e\x35\x32\x20\x2d\x35\x2e\
+\x30\x38\x20\x2d\x38\x37\x2e\x33\x32\x20\x2d\x32\x2e\x39\x32\x20\
+\x2d\x38\x36\x2e\x39\x36\x20\x30\x2e\x36\x38\x4c\x2d\x38\x30\x2e\
+\x31\x32\x20\x34\x2e\x32\x38\x43\x2d\x38\x30\x2e\x31\x32\x20\x34\
+\x2e\x32\x38\x20\x2d\x37\x38\x2e\x33\x32\x20\x31\x37\x2e\x32\x34\
+\x20\x2d\x36\x38\x2e\x36\x20\x32\x31\x2e\x39\x32\x43\x2d\x36\x34\
+\x2e\x32\x34\x38\x20\x32\x34\x2e\x30\x31\x35\x20\x2d\x36\x31\x2e\
+\x34\x20\x31\x37\x2e\x39\x36\x20\x2d\x35\x39\x2e\x36\x20\x31\x32\
+\x2e\x35\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x65\x62\x39\x35\x35\x63\x22\x2c\x0a\x20\
+\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x35\x31\x2e\x30\x35\
+\x20\x2d\x34\x32\x2e\x36\x31\x43\x2d\x35\x32\x2e\x31\x34\x20\x2d\
+\x34\x33\x2e\x34\x37\x20\x2d\x35\x39\x2e\x36\x33\x20\x2d\x34\x39\
+\x2e\x32\x34\x20\x2d\x36\x35\x2e\x34\x38\x20\x2d\x34\x33\x43\x2d\
+\x36\x35\x2e\x34\x38\x20\x2d\x34\x33\x20\x2d\x37\x35\x2e\x36\x32\
+\x20\x2d\x32\x35\x2e\x34\x35\x20\x2d\x37\x34\x2e\x38\x34\x20\x2d\
+\x31\x39\x2e\x32\x31\x4c\x2d\x37\x34\x2e\x38\x34\x20\x2d\x31\x37\
+\x2e\x32\x36\x43\x2d\x37\x34\x2e\x38\x34\x20\x2d\x31\x37\x2e\x32\
+\x36\x20\x2d\x38\x32\x2e\x32\x35\x20\x2d\x31\x37\x2e\x36\x35\x20\
+\x2d\x38\x33\x2e\x38\x31\x20\x2d\x31\x35\x2e\x37\x43\x2d\x38\x33\
+\x2e\x38\x31\x20\x2d\x31\x35\x2e\x37\x20\x2d\x38\x34\x2e\x39\x38\
+\x20\x2d\x31\x30\x2e\x36\x33\x20\x2d\x38\x36\x2e\x31\x35\x20\x2d\
+\x31\x30\x2e\x32\x34\x43\x2d\x38\x36\x2e\x31\x35\x20\x2d\x31\x30\
+\x2e\x32\x34\x20\x2d\x38\x38\x2e\x38\x38\x20\x2d\x37\x2e\x39\x20\
+\x2d\x38\x36\x2e\x39\x33\x20\x2d\x35\x2e\x31\x37\x43\x2d\x38\x36\
+\x2e\x39\x33\x20\x2d\x35\x2e\x31\x37\x20\x2d\x38\x38\x2e\x38\x38\
+\x20\x2d\x32\x2e\x38\x33\x20\x2d\x38\x38\x2e\x34\x39\x20\x31\x2e\
+\x30\x37\x4c\x2d\x38\x31\x2e\x30\x38\x20\x34\x2e\x39\x37\x43\x2d\
+\x38\x31\x2e\x30\x38\x20\x34\x2e\x39\x37\x20\x2d\x37\x39\x2e\x31\
+\x33\x20\x31\x39\x2e\x30\x31\x20\x2d\x36\x38\x2e\x36\x20\x32\x34\
+\x2e\x30\x38\x43\x2d\x36\x33\x2e\x38\x38\x36\x20\x32\x36\x2e\x33\
+\x35\x20\x2d\x36\x30\x2e\x38\x20\x31\x39\x2e\x37\x39\x20\x2d\x35\
+\x38\x2e\x38\x35\x20\x31\x33\x2e\x39\x34\x43\x2d\x35\x38\x2e\x38\
+\x35\x20\x31\x33\x2e\x39\x34\x20\x2d\x36\x31\x2e\x39\x37\x20\x2d\
+\x36\x2e\x37\x33\x20\x2d\x35\x39\x2e\x36\x33\x20\x2d\x31\x31\x2e\
+\x30\x32\x43\x2d\x35\x39\x2e\x36\x33\x20\x2d\x31\x31\x2e\x30\x32\
+\x20\x2d\x34\x39\x2e\x31\x20\x2d\x32\x30\x2e\x37\x37\x20\x2d\x34\
+\x39\x2e\x34\x39\x20\x2d\x32\x34\x2e\x32\x38\x43\x2d\x34\x39\x2e\
+\x34\x39\x20\x2d\x32\x34\x2e\x32\x38\x20\x2d\x34\x39\x2e\x38\x38\
+\x20\x2d\x34\x31\x2e\x38\x33\x20\x2d\x35\x31\x2e\x30\x35\x20\x2d\
+\x34\x32\x2e\x36\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x32\x62\x38\x39\x32\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x35\x31\x2e\
+\x35\x20\x2d\x34\x31\x2e\x36\x32\x43\x2d\x35\x32\x2e\x34\x38\x20\
+\x2d\x34\x32\x2e\x35\x34\x20\x2d\x35\x39\x2e\x38\x36\x20\x2d\x34\
+\x38\x2e\x30\x38\x20\x2d\x36\x35\x2e\x35\x36\x20\x2d\x34\x32\x43\
+\x2d\x36\x35\x2e\x35\x36\x20\x2d\x34\x32\x20\x2d\x37\x35\x2e\x34\
+\x34\x20\x2d\x32\x34\x2e\x39\x20\x2d\x37\x34\x2e\x36\x38\x20\x2d\
+\x31\x38\x2e\x38\x32\x4c\x2d\x37\x34\x2e\x36\x38\x20\x2d\x31\x36\
+\x2e\x39\x32\x43\x2d\x37\x34\x2e\x36\x38\x20\x2d\x31\x36\x2e\x39\
+\x32\x20\x2d\x38\x31\x2e\x39\x20\x2d\x31\x37\x2e\x33\x20\x2d\x38\
+\x33\x2e\x34\x32\x20\x2d\x31\x35\x2e\x34\x43\x2d\x38\x33\x2e\x34\
+\x32\x20\x2d\x31\x35\x2e\x34\x20\x2d\x38\x34\x2e\x35\x36\x20\x2d\
+\x31\x30\x2e\x34\x36\x20\x2d\x38\x35\x2e\x37\x20\x2d\x31\x30\x2e\
+\x30\x38\x43\x2d\x38\x35\x2e\x37\x20\x2d\x31\x30\x2e\x30\x38\x20\
+\x2d\x38\x38\x2e\x33\x36\x20\x2d\x37\x2e\x38\x20\x2d\x38\x36\x2e\
+\x34\x36\x20\x2d\x35\x2e\x31\x34\x43\x2d\x38\x36\x2e\x34\x36\x20\
+\x2d\x35\x2e\x31\x34\x20\x2d\x38\x38\x2e\x33\x36\x20\x2d\x32\x2e\
+\x38\x36\x20\x2d\x38\x37\x2e\x39\x38\x20\x30\x2e\x39\x34\x4c\x2d\
+\x38\x30\x2e\x37\x36\x20\x34\x2e\x37\x34\x43\x2d\x38\x30\x2e\x37\
+\x36\x20\x34\x2e\x37\x34\x20\x2d\x37\x38\x2e\x38\x36\x20\x31\x38\
+\x2e\x34\x32\x20\x2d\x36\x38\x2e\x36\x20\x32\x33\x2e\x33\x36\x43\
+\x2d\x36\x34\x2e\x30\x30\x36\x20\x32\x35\x2e\x35\x37\x32\x20\x2d\
+\x36\x31\x20\x31\x39\x2e\x31\x38\x20\x2d\x35\x39\x2e\x31\x20\x31\
+\x33\x2e\x34\x38\x43\x2d\x35\x39\x2e\x31\x20\x31\x33\x2e\x34\x38\
+\x20\x2d\x36\x32\x2e\x31\x34\x20\x2d\x36\x2e\x36\x36\x20\x2d\x35\
+\x39\x2e\x38\x36\x20\x2d\x31\x30\x2e\x38\x34\x43\x2d\x35\x39\x2e\
+\x38\x36\x20\x2d\x31\x30\x2e\x38\x34\x20\x2d\x34\x39\x2e\x36\x20\
+\x2d\x32\x30\x2e\x33\x34\x20\x2d\x34\x39\x2e\x39\x38\x20\x2d\x32\
+\x33\x2e\x37\x36\x43\x2d\x34\x39\x2e\x39\x38\x20\x2d\x32\x33\x2e\
+\x37\x36\x20\x2d\x35\x30\x2e\x33\x36\x20\x2d\x34\x30\x2e\x38\x36\
+\x20\x2d\x35\x31\x2e\x35\x20\x2d\x34\x31\x2e\x36\x32\x7a\x22\x7d\
+\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\
+\x66\x38\x64\x63\x63\x38\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x35\x31\x2e\x39\x35\x20\x2d\x34\x30\x2e\x36\
+\x33\x43\x2d\x35\x32\x2e\x38\x32\x20\x2d\x34\x31\x2e\x36\x31\x20\
+\x2d\x36\x30\x2e\x30\x39\x20\x2d\x34\x36\x2e\x39\x32\x20\x2d\x36\
+\x35\x2e\x36\x34\x20\x2d\x34\x31\x43\x2d\x36\x35\x2e\x36\x34\x20\
+\x2d\x34\x31\x20\x2d\x37\x35\x2e\x32\x36\x20\x2d\x32\x34\x2e\x33\
+\x35\x20\x2d\x37\x34\x2e\x35\x32\x20\x2d\x31\x38\x2e\x34\x33\x4c\
+\x2d\x37\x34\x2e\x35\x32\x20\x2d\x31\x36\x2e\x35\x38\x43\x2d\x37\
+\x34\x2e\x35\x32\x20\x2d\x31\x36\x2e\x35\x38\x20\x2d\x38\x31\x2e\
+\x35\x35\x20\x2d\x31\x36\x2e\x39\x35\x20\x2d\x38\x33\x2e\x30\x33\
+\x20\x2d\x31\x35\x2e\x31\x43\x2d\x38\x33\x2e\x30\x33\x20\x2d\x31\
+\x35\x2e\x31\x20\x2d\x38\x34\x2e\x31\x34\x20\x2d\x31\x30\x2e\x32\
+\x39\x20\x2d\x38\x35\x2e\x32\x35\x20\x2d\x39\x2e\x39\x32\x43\x2d\
+\x38\x35\x2e\x32\x35\x20\x2d\x39\x2e\x39\x32\x20\x2d\x38\x37\x2e\
+\x38\x34\x20\x2d\x37\x2e\x37\x20\x2d\x38\x35\x2e\x39\x39\x20\x2d\
+\x35\x2e\x31\x31\x43\x2d\x38\x35\x2e\x39\x39\x20\x2d\x35\x2e\x31\
+\x31\x20\x2d\x38\x37\x2e\x38\x34\x20\x2d\x32\x2e\x38\x39\x20\x2d\
+\x38\x37\x2e\x34\x37\x20\x30\x2e\x38\x31\x4c\x2d\x38\x30\x2e\x34\
+\x34\x20\x34\x2e\x35\x31\x43\x2d\x38\x30\x2e\x34\x34\x20\x34\x2e\
+\x35\x31\x20\x2d\x37\x38\x2e\x35\x39\x20\x31\x37\x2e\x38\x33\x20\
+\x2d\x36\x38\x2e\x36\x20\x32\x32\x2e\x36\x34\x43\x2d\x36\x34\x2e\
+\x31\x32\x37\x20\x32\x34\x2e\x37\x39\x34\x20\x2d\x36\x31\x2e\x32\
+\x20\x31\x38\x2e\x35\x37\x20\x2d\x35\x39\x2e\x33\x35\x20\x31\x33\
+\x2e\x30\x32\x43\x2d\x35\x39\x2e\x33\x35\x20\x31\x33\x2e\x30\x32\
+\x20\x2d\x36\x32\x2e\x33\x31\x20\x2d\x36\x2e\x35\x39\x20\x2d\x36\
+\x30\x2e\x30\x39\x20\x2d\x31\x30\x2e\x36\x36\x43\x2d\x36\x30\x2e\
+\x30\x39\x20\x2d\x31\x30\x2e\x36\x36\x20\x2d\x35\x30\x2e\x31\x20\
+\x2d\x31\x39\x2e\x39\x31\x20\x2d\x35\x30\x2e\x34\x37\x20\x2d\x32\
+\x33\x2e\x32\x34\x43\x2d\x35\x30\x2e\x34\x37\x20\x2d\x32\x33\x2e\
+\x32\x34\x20\x2d\x35\x30\x2e\x38\x34\x20\x2d\x33\x39\x2e\x38\x39\
+\x20\x2d\x35\x31\x2e\x39\x35\x20\x2d\x34\x30\x2e\x36\x33\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x2d\x35\x39\x2e\x36\x20\x31\x32\x2e\x34\x36\
+\x43\x2d\x35\x39\x2e\x36\x20\x31\x32\x2e\x34\x36\x20\x2d\x36\x32\
+\x2e\x34\x38\x20\x2d\x36\x2e\x35\x32\x20\x2d\x36\x30\x2e\x33\x32\
+\x20\x2d\x31\x30\x2e\x34\x38\x43\x2d\x36\x30\x2e\x33\x32\x20\x2d\
+\x31\x30\x2e\x34\x38\x20\x2d\x35\x30\x2e\x36\x20\x2d\x31\x39\x2e\
+\x34\x38\x20\x2d\x35\x30\x2e\x39\x36\x20\x2d\x32\x32\x2e\x37\x32\
+\x43\x2d\x35\x30\x2e\x39\x36\x20\x2d\x32\x32\x2e\x37\x32\x20\x2d\
+\x35\x31\x2e\x33\x32\x20\x2d\x33\x38\x2e\x39\x32\x20\x2d\x35\x32\
+\x2e\x34\x20\x2d\x33\x39\x2e\x36\x34\x43\x2d\x35\x33\x2e\x31\x36\
+\x20\x2d\x34\x30\x2e\x36\x38\x20\x2d\x36\x30\x2e\x33\x32\x20\x2d\
+\x34\x35\x2e\x37\x36\x20\x2d\x36\x35\x2e\x37\x32\x20\x2d\x34\x30\
+\x43\x2d\x36\x35\x2e\x37\x32\x20\x2d\x34\x30\x20\x2d\x37\x35\x2e\
+\x30\x38\x20\x2d\x32\x33\x2e\x38\x20\x2d\x37\x34\x2e\x33\x36\x20\
+\x2d\x31\x38\x2e\x30\x34\x4c\x2d\x37\x34\x2e\x33\x36\x20\x2d\x31\
+\x36\x2e\x32\x34\x43\x2d\x37\x34\x2e\x33\x36\x20\x2d\x31\x36\x2e\
+\x32\x34\x20\x2d\x38\x31\x2e\x32\x20\x2d\x31\x36\x2e\x36\x20\x2d\
+\x38\x32\x2e\x36\x34\x20\x2d\x31\x34\x2e\x38\x43\x2d\x38\x32\x2e\
+\x36\x34\x20\x2d\x31\x34\x2e\x38\x20\x2d\x38\x33\x2e\x37\x32\x20\
+\x2d\x31\x30\x2e\x31\x32\x20\x2d\x38\x34\x2e\x38\x20\x2d\x39\x2e\
+\x37\x36\x43\x2d\x38\x34\x2e\x38\x20\x2d\x39\x2e\x37\x36\x20\x2d\
+\x38\x37\x2e\x33\x32\x20\x2d\x37\x2e\x36\x20\x2d\x38\x35\x2e\x35\
+\x32\x20\x2d\x35\x2e\x30\x38\x43\x2d\x38\x35\x2e\x35\x32\x20\x2d\
+\x35\x2e\x30\x38\x20\x2d\x38\x37\x2e\x33\x32\x20\x2d\x32\x2e\x39\
+\x32\x20\x2d\x38\x36\x2e\x39\x36\x20\x30\x2e\x36\x38\x4c\x2d\x38\
+\x30\x2e\x31\x32\x20\x34\x2e\x32\x38\x43\x2d\x38\x30\x2e\x31\x32\
+\x20\x34\x2e\x32\x38\x20\x2d\x37\x38\x2e\x33\x32\x20\x31\x37\x2e\
+\x32\x34\x20\x2d\x36\x38\x2e\x36\x20\x32\x31\x2e\x39\x32\x43\x2d\
+\x36\x34\x2e\x32\x34\x38\x20\x32\x34\x2e\x30\x31\x35\x20\x2d\x36\
+\x31\x2e\x34\x20\x31\x37\x2e\x38\x36\x20\x2d\x35\x39\x2e\x36\x20\
+\x31\x32\x2e\x34\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x36\x32\x2e\
+\x37\x20\x36\x2e\x32\x43\x2d\x36\x32\x2e\x37\x20\x36\x2e\x32\x20\
+\x2d\x38\x34\x2e\x33\x20\x2d\x34\x20\x2d\x38\x35\x2e\x32\x20\x2d\
+\x34\x2e\x38\x43\x2d\x38\x35\x2e\x32\x20\x2d\x34\x2e\x38\x20\x2d\
+\x37\x36\x2e\x31\x20\x33\x2e\x34\x20\x2d\x37\x35\x2e\x33\x20\x33\
+\x2e\x34\x43\x2d\x37\x34\x2e\x35\x20\x33\x2e\x34\x20\x2d\x36\x32\
+\x2e\x37\x20\x36\x2e\x32\x20\x2d\x36\x32\x2e\x37\x20\x36\x2e\x32\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x2d\x37\x39\x2e\x38\x20\x30\x43\x2d\
+\x37\x39\x2e\x38\x20\x30\x20\x2d\x36\x31\x2e\x34\x20\x33\x2e\x36\
+\x20\x2d\x36\x31\x2e\x34\x20\x38\x43\x2d\x36\x31\x2e\x34\x20\x31\
+\x30\x2e\x39\x31\x32\x20\x2d\x36\x31\x2e\x36\x34\x33\x20\x32\x34\
+\x2e\x33\x33\x31\x20\x2d\x36\x37\x20\x32\x32\x2e\x38\x43\x2d\x37\
+\x35\x2e\x34\x20\x32\x30\x2e\x34\x20\x2d\x37\x31\x2e\x38\x20\x36\
+\x20\x2d\x37\x39\x2e\x38\x20\x30\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x39\x39\x63\x63\x33\
+\x32\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\
+\x37\x31\x2e\x34\x20\x33\x2e\x38\x43\x2d\x37\x31\x2e\x34\x20\x33\
+\x2e\x38\x20\x2d\x36\x32\x2e\x34\x32\x32\x20\x35\x2e\x32\x37\x34\
+\x20\x2d\x36\x31\x2e\x34\x20\x38\x43\x2d\x36\x30\x2e\x38\x20\x39\
+\x2e\x36\x20\x2d\x36\x30\x2e\x31\x33\x37\x20\x31\x37\x2e\x39\x30\
+\x38\x20\x2d\x36\x35\x2e\x36\x20\x31\x39\x43\x2d\x37\x30\x2e\x31\
+\x35\x32\x20\x31\x39\x2e\x39\x31\x31\x20\x2d\x37\x32\x2e\x33\x38\
+\x32\x20\x39\x2e\x36\x39\x20\x2d\x37\x31\x2e\x34\x20\x33\x2e\x38\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x31\x34\x2e\x35\x39\x35\x20\x34\x36\
+\x2e\x33\x34\x39\x43\x31\x34\x2e\x30\x39\x38\x20\x34\x34\x2e\x36\
+\x30\x37\x20\x31\x35\x2e\x34\x30\x39\x20\x34\x34\x2e\x37\x33\x38\
+\x20\x31\x37\x2e\x32\x20\x34\x34\x2e\x32\x43\x31\x39\x2e\x32\x20\
+\x34\x33\x2e\x36\x20\x33\x31\x2e\x34\x20\x33\x39\x2e\x38\x20\x33\
+\x32\x2e\x32\x20\x33\x37\x2e\x32\x43\x33\x33\x20\x33\x34\x2e\x36\
+\x20\x34\x36\x2e\x32\x20\x33\x39\x20\x34\x36\x2e\x32\x20\x33\x39\
+\x43\x34\x38\x20\x33\x39\x2e\x38\x20\x35\x32\x2e\x34\x20\x34\x32\
+\x2e\x34\x20\x35\x32\x2e\x34\x20\x34\x32\x2e\x34\x43\x35\x37\x2e\
+\x32\x20\x34\x33\x2e\x36\x20\x36\x33\x2e\x38\x20\x34\x34\x20\x36\
+\x33\x2e\x38\x20\x34\x34\x43\x36\x36\x2e\x32\x20\x34\x35\x20\x36\
+\x39\x2e\x36\x20\x34\x37\x2e\x38\x20\x36\x39\x2e\x36\x20\x34\x37\
+\x2e\x38\x43\x38\x34\x2e\x32\x20\x35\x38\x20\x39\x36\x2e\x36\x30\
+\x31\x20\x35\x30\x2e\x38\x20\x39\x36\x2e\x36\x30\x31\x20\x35\x30\
+\x2e\x38\x43\x31\x31\x36\x2e\x36\x30\x31\x20\x34\x34\x2e\x32\x20\
+\x31\x31\x30\x2e\x36\x30\x31\x20\x32\x37\x20\x31\x31\x30\x2e\x36\
+\x30\x31\x20\x32\x37\x43\x31\x30\x37\x2e\x36\x30\x31\x20\x31\x38\
+\x20\x31\x31\x30\x2e\x38\x30\x31\x20\x31\x34\x2e\x36\x20\x31\x31\
+\x30\x2e\x38\x30\x31\x20\x31\x34\x2e\x36\x43\x31\x31\x31\x2e\x30\
+\x30\x31\x20\x31\x30\x2e\x38\x20\x31\x31\x38\x2e\x32\x30\x31\x20\
+\x31\x37\x2e\x32\x20\x31\x31\x38\x2e\x32\x30\x31\x20\x31\x37\x2e\
+\x32\x43\x31\x32\x30\x2e\x38\x30\x31\x20\x32\x31\x2e\x34\x20\x31\
+\x32\x31\x2e\x36\x30\x31\x20\x32\x36\x2e\x34\x20\x31\x32\x31\x2e\
+\x36\x30\x31\x20\x32\x36\x2e\x34\x43\x31\x32\x39\x2e\x36\x30\x31\
+\x20\x33\x37\x2e\x36\x20\x31\x32\x36\x2e\x32\x30\x31\x20\x31\x39\
+\x2e\x38\x20\x31\x32\x36\x2e\x32\x30\x31\x20\x31\x39\x2e\x38\x43\
+\x31\x32\x36\x2e\x34\x30\x31\x20\x31\x38\x2e\x38\x20\x31\x32\x33\
+\x2e\x36\x30\x31\x20\x31\x35\x2e\x32\x20\x31\x32\x33\x2e\x36\x30\
+\x31\x20\x31\x34\x43\x31\x32\x33\x2e\x36\x30\x31\x20\x31\x32\x2e\
+\x38\x20\x31\x32\x31\x2e\x38\x30\x31\x20\x39\x2e\x34\x20\x31\x32\
+\x31\x2e\x38\x30\x31\x20\x39\x2e\x34\x43\x31\x31\x38\x2e\x38\x30\
+\x31\x20\x36\x20\x31\x32\x31\x2e\x32\x30\x31\x20\x2d\x31\x20\x31\
+\x32\x31\x2e\x32\x30\x31\x20\x2d\x31\x43\x31\x32\x33\x2e\x30\x30\
+\x31\x20\x2d\x31\x34\x2e\x38\x20\x31\x32\x30\x2e\x38\x30\x31\x20\
+\x2d\x31\x33\x20\x31\x32\x30\x2e\x38\x30\x31\x20\x2d\x31\x33\x43\
+\x31\x31\x39\x2e\x36\x30\x31\x20\x2d\x31\x34\x2e\x38\x20\x31\x31\
+\x30\x2e\x34\x30\x31\x20\x2d\x34\x2e\x38\x20\x31\x31\x30\x2e\x34\
+\x30\x31\x20\x2d\x34\x2e\x38\x43\x31\x30\x38\x2e\x32\x30\x31\x20\
+\x2d\x31\x2e\x34\x20\x31\x30\x32\x2e\x32\x30\x31\x20\x30\x2e\x32\
+\x20\x31\x30\x32\x2e\x32\x30\x31\x20\x30\x2e\x32\x43\x39\x39\x2e\
+\x34\x30\x31\x20\x32\x20\x39\x36\x2e\x30\x30\x31\x20\x30\x2e\x36\
+\x20\x39\x36\x2e\x30\x30\x31\x20\x30\x2e\x36\x43\x39\x33\x2e\x34\
+\x30\x31\x20\x30\x2e\x32\x20\x38\x37\x2e\x38\x30\x31\x20\x37\x2e\
+\x32\x20\x38\x37\x2e\x38\x30\x31\x20\x37\x2e\x32\x43\x39\x30\x2e\
+\x36\x30\x31\x20\x37\x20\x39\x33\x2e\x30\x30\x31\x20\x31\x31\x2e\
+\x34\x20\x39\x35\x2e\x34\x30\x31\x20\x31\x31\x2e\x36\x43\x39\x37\
+\x2e\x38\x30\x31\x20\x31\x31\x2e\x38\x20\x39\x39\x2e\x36\x30\x31\
+\x20\x39\x2e\x32\x20\x31\x30\x31\x2e\x32\x30\x31\x20\x38\x2e\x36\
+\x43\x31\x30\x32\x2e\x38\x30\x31\x20\x38\x20\x31\x30\x35\x2e\x36\
+\x30\x31\x20\x31\x33\x2e\x38\x20\x31\x30\x35\x2e\x36\x30\x31\x20\
+\x31\x33\x2e\x38\x43\x31\x30\x36\x2e\x30\x30\x31\x20\x31\x36\x2e\
+\x34\x20\x31\x30\x30\x2e\x34\x30\x31\x20\x32\x31\x2e\x32\x20\x31\
+\x30\x30\x2e\x34\x30\x31\x20\x32\x31\x2e\x32\x43\x31\x30\x30\x2e\
+\x30\x30\x31\x20\x32\x35\x2e\x38\x20\x39\x38\x2e\x34\x30\x31\x20\
+\x32\x34\x2e\x32\x20\x39\x38\x2e\x34\x30\x31\x20\x32\x34\x2e\x32\
+\x43\x39\x35\x2e\x34\x30\x31\x20\x32\x33\x2e\x36\x20\x39\x34\x2e\
+\x32\x30\x31\x20\x32\x37\x2e\x34\x20\x39\x33\x2e\x32\x30\x31\x20\
+\x33\x32\x43\x39\x32\x2e\x32\x30\x31\x20\x33\x36\x2e\x36\x20\x38\
+\x38\x2e\x30\x30\x31\x20\x33\x37\x20\x38\x38\x2e\x30\x30\x31\x20\
+\x33\x37\x43\x38\x36\x2e\x34\x30\x31\x20\x34\x34\x2e\x34\x20\x38\
+\x35\x2e\x32\x20\x34\x31\x2e\x34\x20\x38\x35\x2e\x32\x20\x34\x31\
+\x2e\x34\x43\x38\x35\x20\x33\x35\x2e\x38\x20\x37\x39\x20\x34\x31\
+\x2e\x36\x20\x37\x39\x20\x34\x31\x2e\x36\x43\x37\x37\x2e\x38\x20\
+\x34\x33\x2e\x36\x20\x37\x33\x2e\x32\x20\x34\x31\x2e\x34\x20\x37\
+\x33\x2e\x32\x20\x34\x31\x2e\x34\x43\x36\x36\x2e\x34\x20\x33\x39\
+\x2e\x34\x20\x36\x38\x2e\x38\x20\x33\x37\x2e\x34\x20\x36\x38\x2e\
+\x38\x20\x33\x37\x2e\x34\x43\x37\x30\x2e\x36\x20\x33\x35\x2e\x32\
+\x20\x38\x31\x2e\x38\x20\x33\x37\x2e\x34\x20\x38\x31\x2e\x38\x20\
+\x33\x37\x2e\x34\x43\x38\x34\x20\x33\x35\x2e\x38\x20\x37\x36\x20\
+\x33\x31\x2e\x38\x20\x37\x36\x20\x33\x31\x2e\x38\x43\x37\x35\x2e\
+\x34\x20\x33\x30\x20\x37\x36\x2e\x34\x20\x32\x35\x2e\x36\x20\x37\
+\x36\x2e\x34\x20\x32\x35\x2e\x36\x43\x37\x37\x2e\x36\x20\x32\x32\
+\x2e\x34\x20\x38\x34\x2e\x34\x20\x31\x36\x2e\x38\x20\x38\x34\x2e\
+\x34\x20\x31\x36\x2e\x38\x43\x39\x33\x2e\x38\x30\x31\x20\x31\x35\
+\x2e\x36\x20\x39\x31\x2e\x30\x30\x31\x20\x31\x34\x20\x39\x31\x2e\
+\x30\x30\x31\x20\x31\x34\x43\x38\x34\x2e\x38\x30\x31\x20\x38\x2e\
+\x38\x20\x37\x39\x20\x31\x36\x2e\x34\x20\x37\x39\x20\x31\x36\x2e\
+\x34\x43\x37\x36\x2e\x38\x20\x32\x32\x2e\x36\x20\x35\x39\x2e\x34\
+\x20\x33\x37\x2e\x36\x20\x35\x39\x2e\x34\x20\x33\x37\x2e\x36\x43\
+\x35\x34\x2e\x36\x20\x34\x31\x20\x35\x37\x2e\x32\x20\x33\x34\x2e\
+\x32\x20\x35\x33\x2e\x32\x20\x33\x37\x2e\x36\x43\x34\x39\x2e\x32\
+\x20\x34\x31\x20\x32\x38\x2e\x36\x20\x33\x32\x20\x32\x38\x2e\x36\
+\x20\x33\x32\x43\x31\x37\x2e\x30\x33\x38\x20\x33\x30\x2e\x38\x30\
+\x37\x20\x31\x34\x2e\x33\x30\x36\x20\x34\x36\x2e\x35\x34\x39\x20\
+\x31\x30\x2e\x37\x37\x37\x20\x34\x33\x2e\x34\x32\x39\x43\x31\x30\
+\x2e\x37\x37\x37\x20\x34\x33\x2e\x34\x32\x39\x20\x31\x36\x2e\x31\
+\x39\x35\x20\x35\x31\x2e\x39\x34\x39\x20\x31\x34\x2e\x35\x39\x35\
+\x20\x34\x36\x2e\x33\x34\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x32\x30\
+\x39\x2e\x34\x30\x31\x20\x2d\x31\x32\x30\x43\x32\x30\x39\x2e\x34\
+\x30\x31\x20\x2d\x31\x32\x30\x20\x31\x38\x33\x2e\x38\x30\x31\x20\
+\x2d\x31\x31\x32\x20\x31\x38\x31\x2e\x30\x30\x31\x20\x2d\x39\x33\
+\x2e\x32\x43\x31\x38\x31\x2e\x30\x30\x31\x20\x2d\x39\x33\x2e\x32\
+\x20\x31\x37\x38\x2e\x36\x30\x31\x20\x2d\x37\x30\x2e\x34\x20\x31\
+\x39\x39\x2e\x30\x30\x31\x20\x2d\x35\x32\x2e\x38\x43\x31\x39\x39\
+\x2e\x30\x30\x31\x20\x2d\x35\x32\x2e\x38\x20\x31\x39\x39\x2e\x34\
+\x30\x31\x20\x2d\x34\x36\x2e\x34\x20\x32\x30\x31\x2e\x34\x30\x31\
+\x20\x2d\x34\x33\x2e\x32\x43\x32\x30\x31\x2e\x34\x30\x31\x20\x2d\
+\x34\x33\x2e\x32\x20\x31\x39\x39\x2e\x38\x30\x31\x20\x2d\x33\x38\
+\x2e\x34\x20\x32\x31\x38\x2e\x36\x30\x31\x20\x2d\x34\x36\x4c\x32\
+\x34\x35\x2e\x38\x30\x31\x20\x2d\x35\x34\x2e\x34\x43\x32\x34\x35\
+\x2e\x38\x30\x31\x20\x2d\x35\x34\x2e\x34\x20\x32\x35\x32\x2e\x32\
+\x30\x31\x20\x2d\x35\x36\x2e\x38\x20\x32\x35\x37\x2e\x34\x30\x31\
+\x20\x2d\x36\x35\x2e\x36\x43\x32\x36\x32\x2e\x36\x30\x31\x20\x2d\
+\x37\x34\x2e\x34\x20\x32\x37\x37\x2e\x38\x30\x31\x20\x2d\x39\x33\
+\x2e\x32\x20\x32\x37\x34\x2e\x32\x30\x31\x20\x2d\x31\x31\x38\x2e\
+\x34\x43\x32\x37\x34\x2e\x32\x30\x31\x20\x2d\x31\x31\x38\x2e\x34\
+\x20\x32\x37\x35\x2e\x34\x30\x31\x20\x2d\x31\x32\x39\x2e\x36\x20\
+\x32\x36\x39\x2e\x34\x30\x31\x20\x2d\x31\x33\x30\x43\x32\x36\x39\
+\x2e\x34\x30\x31\x20\x2d\x31\x33\x30\x20\x32\x36\x31\x2e\x30\x30\
+\x31\x20\x2d\x31\x33\x31\x2e\x36\x20\x32\x35\x33\x2e\x38\x30\x31\
+\x20\x2d\x31\x32\x34\x43\x32\x35\x33\x2e\x38\x30\x31\x20\x2d\x31\
+\x32\x34\x20\x32\x34\x37\x2e\x30\x30\x31\x20\x2d\x31\x32\x30\x2e\
+\x38\x20\x32\x34\x34\x2e\x36\x30\x31\x20\x2d\x31\x32\x31\x2e\x32\
+\x4c\x32\x30\x39\x2e\x34\x30\x31\x20\x2d\x31\x32\x30\x7a\x22\x7d\
+\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\
+\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x32\x36\x34\x2e\x30\x32\x32\x20\x2d\x31\x32\x30\
+\x2e\x39\x39\x43\x32\x36\x34\x2e\x30\x32\x32\x20\x2d\x31\x32\x30\
+\x2e\x39\x39\x20\x32\x36\x36\x2e\x31\x32\x32\x20\x2d\x31\x32\x39\
+\x2e\x39\x32\x20\x32\x36\x31\x2e\x32\x38\x32\x20\x2d\x31\x32\x35\
+\x2e\x30\x38\x43\x32\x36\x31\x2e\x32\x38\x32\x20\x2d\x31\x32\x35\
+\x2e\x30\x38\x20\x32\x35\x34\x2e\x32\x34\x32\x20\x2d\x31\x31\x39\
+\x2e\x33\x36\x20\x32\x34\x36\x2e\x37\x36\x31\x20\x2d\x31\x31\x39\
+\x2e\x33\x36\x43\x32\x34\x36\x2e\x37\x36\x31\x20\x2d\x31\x31\x39\
+\x2e\x33\x36\x20\x32\x33\x32\x2e\x32\x34\x31\x20\x2d\x31\x31\x37\
+\x2e\x31\x36\x20\x32\x32\x37\x2e\x38\x34\x31\x20\x2d\x31\x30\x33\
+\x2e\x39\x36\x43\x32\x32\x37\x2e\x38\x34\x31\x20\x2d\x31\x30\x33\
+\x2e\x39\x36\x20\x32\x32\x33\x2e\x38\x38\x31\x20\x2d\x37\x37\x2e\
+\x31\x32\x20\x32\x33\x31\x2e\x38\x30\x31\x20\x2d\x37\x31\x2e\x34\
+\x43\x32\x33\x31\x2e\x38\x30\x31\x20\x2d\x37\x31\x2e\x34\x20\x32\
+\x33\x36\x2e\x36\x34\x31\x20\x2d\x36\x33\x2e\x39\x32\x20\x32\x34\
+\x33\x2e\x36\x38\x31\x20\x2d\x37\x30\x2e\x35\x32\x43\x32\x35\x30\
+\x2e\x37\x32\x32\x20\x2d\x37\x37\x2e\x31\x32\x20\x32\x36\x36\x2e\
+\x32\x32\x32\x20\x2d\x31\x30\x37\x2e\x33\x35\x20\x32\x36\x34\x2e\
+\x30\x32\x32\x20\x2d\x31\x32\x30\x2e\x39\x39\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x33\x32\
+\x33\x32\x33\x32\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x32\x36\x33\x2e\x36\x34\x38\x20\x2d\x31\x32\x30\x2e\x36\
+\x33\x32\x43\x32\x36\x33\x2e\x36\x34\x38\x20\x2d\x31\x32\x30\x2e\
+\x36\x33\x32\x20\x32\x36\x35\x2e\x37\x33\x38\x20\x2d\x31\x32\x39\
+\x2e\x33\x37\x36\x20\x32\x36\x30\x2e\x39\x38\x36\x20\x2d\x31\x32\
+\x34\x2e\x36\x32\x34\x43\x32\x36\x30\x2e\x39\x38\x36\x20\x2d\x31\
+\x32\x34\x2e\x36\x32\x34\x20\x32\x35\x34\x2e\x30\x37\x34\x20\x2d\
+\x31\x31\x39\x2e\x30\x30\x38\x20\x32\x34\x36\x2e\x37\x32\x39\x20\
+\x2d\x31\x31\x39\x2e\x30\x30\x38\x43\x32\x34\x36\x2e\x37\x32\x39\
+\x20\x2d\x31\x31\x39\x2e\x30\x30\x38\x20\x32\x33\x32\x2e\x34\x37\
+\x33\x20\x2d\x31\x31\x36\x2e\x38\x34\x38\x20\x32\x32\x38\x2e\x31\
+\x35\x33\x20\x2d\x31\x30\x33\x2e\x38\x38\x38\x43\x32\x32\x38\x2e\
+\x31\x35\x33\x20\x2d\x31\x30\x33\x2e\x38\x38\x38\x20\x32\x32\x34\
+\x2e\x32\x36\x35\x20\x2d\x37\x37\x2e\x35\x33\x36\x20\x32\x33\x32\
+\x2e\x30\x34\x31\x20\x2d\x37\x31\x2e\x39\x32\x43\x32\x33\x32\x2e\
+\x30\x34\x31\x20\x2d\x37\x31\x2e\x39\x32\x20\x32\x33\x36\x2e\x37\
+\x39\x33\x20\x2d\x36\x34\x2e\x35\x37\x36\x20\x32\x34\x33\x2e\x37\
+\x30\x35\x20\x2d\x37\x31\x2e\x30\x35\x36\x43\x32\x35\x30\x2e\x36\
+\x31\x38\x20\x2d\x37\x37\x2e\x35\x33\x36\x20\x32\x36\x35\x2e\x38\
+\x30\x38\x20\x2d\x31\x30\x37\x2e\x32\x34\x20\x32\x36\x33\x2e\x36\
+\x34\x38\x20\x2d\x31\x32\x30\x2e\x36\x33\x32\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x36\x36\
+\x36\x36\x36\x36\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x32\x36\x33\x2e\x32\x37\x34\x20\x2d\x31\x32\x30\x2e\x32\
+\x37\x34\x43\x32\x36\x33\x2e\x32\x37\x34\x20\x2d\x31\x32\x30\x2e\
+\x32\x37\x34\x20\x32\x36\x35\x2e\x33\x35\x34\x20\x2d\x31\x32\x38\
+\x2e\x38\x33\x32\x20\x32\x36\x30\x2e\x36\x39\x20\x2d\x31\x32\x34\
+\x2e\x31\x36\x38\x43\x32\x36\x30\x2e\x36\x39\x20\x2d\x31\x32\x34\
+\x2e\x31\x36\x38\x20\x32\x35\x33\x2e\x39\x30\x36\x20\x2d\x31\x31\
+\x38\x2e\x36\x35\x36\x20\x32\x34\x36\x2e\x36\x39\x37\x20\x2d\x31\
+\x31\x38\x2e\x36\x35\x36\x43\x32\x34\x36\x2e\x36\x39\x37\x20\x2d\
+\x31\x31\x38\x2e\x36\x35\x36\x20\x32\x33\x32\x2e\x37\x30\x35\x20\
+\x2d\x31\x31\x36\x2e\x35\x33\x36\x20\x32\x32\x38\x2e\x34\x36\x35\
+\x20\x2d\x31\x30\x33\x2e\x38\x31\x36\x43\x32\x32\x38\x2e\x34\x36\
+\x35\x20\x2d\x31\x30\x33\x2e\x38\x31\x36\x20\x32\x32\x34\x2e\x36\
+\x34\x39\x20\x2d\x37\x37\x2e\x39\x35\x32\x20\x32\x33\x32\x2e\x32\
+\x38\x31\x20\x2d\x37\x32\x2e\x34\x34\x43\x32\x33\x32\x2e\x32\x38\
+\x31\x20\x2d\x37\x32\x2e\x34\x34\x20\x32\x33\x36\x2e\x39\x34\x35\
+\x20\x2d\x36\x35\x2e\x32\x33\x32\x20\x32\x34\x33\x2e\x37\x32\x39\
+\x20\x2d\x37\x31\x2e\x35\x39\x32\x43\x32\x35\x30\x2e\x35\x31\x34\
+\x20\x2d\x37\x37\x2e\x39\x35\x32\x20\x32\x36\x35\x2e\x33\x39\x34\
+\x20\x2d\x31\x30\x37\x2e\x31\x33\x20\x32\x36\x33\x2e\x32\x37\x34\
+\x20\x2d\x31\x32\x30\x2e\x32\x37\x34\x7a\x22\x7d\x0a\x20\x2c\x0a\
+\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x39\x39\x39\x39\
+\x39\x39\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\
+\x32\x36\x32\x2e\x39\x20\x2d\x31\x31\x39\x2e\x39\x31\x36\x43\x32\
+\x36\x32\x2e\x39\x20\x2d\x31\x31\x39\x2e\x39\x31\x36\x20\x32\x36\
+\x34\x2e\x39\x37\x20\x2d\x31\x32\x38\x2e\x32\x38\x38\x20\x32\x36\
+\x30\x2e\x33\x39\x34\x20\x2d\x31\x32\x33\x2e\x37\x31\x32\x43\x32\
+\x36\x30\x2e\x33\x39\x34\x20\x2d\x31\x32\x33\x2e\x37\x31\x32\x20\
+\x32\x35\x33\x2e\x37\x33\x38\x20\x2d\x31\x31\x38\x2e\x33\x30\x34\
+\x20\x32\x34\x36\x2e\x36\x36\x35\x20\x2d\x31\x31\x38\x2e\x33\x30\
+\x34\x43\x32\x34\x36\x2e\x36\x36\x35\x20\x2d\x31\x31\x38\x2e\x33\
+\x30\x34\x20\x32\x33\x32\x2e\x39\x33\x37\x20\x2d\x31\x31\x36\x2e\
+\x32\x32\x34\x20\x32\x32\x38\x2e\x37\x37\x37\x20\x2d\x31\x30\x33\
+\x2e\x37\x34\x34\x43\x32\x32\x38\x2e\x37\x37\x37\x20\x2d\x31\x30\
+\x33\x2e\x37\x34\x34\x20\x32\x32\x35\x2e\x30\x33\x33\x20\x2d\x37\
+\x38\x2e\x33\x36\x38\x20\x32\x33\x32\x2e\x35\x32\x31\x20\x2d\x37\
+\x32\x2e\x39\x36\x43\x32\x33\x32\x2e\x35\x32\x31\x20\x2d\x37\x32\
+\x2e\x39\x36\x20\x32\x33\x37\x2e\x30\x39\x37\x20\x2d\x36\x35\x2e\
+\x38\x38\x38\x20\x32\x34\x33\x2e\x37\x35\x33\x20\x2d\x37\x32\x2e\
+\x31\x32\x38\x43\x32\x35\x30\x2e\x34\x31\x20\x2d\x37\x38\x2e\x33\
+\x36\x38\x20\x32\x36\x34\x2e\x39\x38\x20\x2d\x31\x30\x37\x2e\x30\
+\x32\x20\x32\x36\x32\x2e\x39\x20\x2d\x31\x31\x39\x2e\x39\x31\x36\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x32\x36\x32\x2e\x35\x32\x36\x20\x2d\
+\x31\x31\x39\x2e\x35\x35\x38\x43\x32\x36\x32\x2e\x35\x32\x36\x20\
+\x2d\x31\x31\x39\x2e\x35\x35\x38\x20\x32\x36\x34\x2e\x35\x38\x36\
+\x20\x2d\x31\x32\x37\x2e\x37\x34\x34\x20\x32\x36\x30\x2e\x30\x39\
+\x38\x20\x2d\x31\x32\x33\x2e\x32\x35\x36\x43\x32\x36\x30\x2e\x30\
+\x39\x38\x20\x2d\x31\x32\x33\x2e\x32\x35\x36\x20\x32\x35\x33\x2e\
+\x35\x36\x39\x20\x2d\x31\x31\x37\x2e\x39\x35\x32\x20\x32\x34\x36\
+\x2e\x36\x33\x33\x20\x2d\x31\x31\x37\x2e\x39\x35\x32\x43\x32\x34\
+\x36\x2e\x36\x33\x33\x20\x2d\x31\x31\x37\x2e\x39\x35\x32\x20\x32\
+\x33\x33\x2e\x31\x36\x39\x20\x2d\x31\x31\x35\x2e\x39\x31\x32\x20\
+\x32\x32\x39\x2e\x30\x38\x39\x20\x2d\x31\x30\x33\x2e\x36\x37\x32\
+\x43\x32\x32\x39\x2e\x30\x38\x39\x20\x2d\x31\x30\x33\x2e\x36\x37\
+\x32\x20\x32\x32\x35\x2e\x34\x31\x37\x20\x2d\x37\x38\x2e\x37\x38\
+\x34\x20\x32\x33\x32\x2e\x37\x36\x31\x20\x2d\x37\x33\x2e\x34\x38\
+\x43\x32\x33\x32\x2e\x37\x36\x31\x20\x2d\x37\x33\x2e\x34\x38\x20\
+\x32\x33\x37\x2e\x32\x34\x39\x20\x2d\x36\x36\x2e\x35\x34\x34\x20\
+\x32\x34\x33\x2e\x37\x37\x37\x20\x2d\x37\x32\x2e\x36\x36\x34\x43\
+\x32\x35\x30\x2e\x33\x30\x35\x20\x2d\x37\x38\x2e\x37\x38\x34\x20\
+\x32\x36\x34\x2e\x35\x36\x36\x20\x2d\x31\x30\x36\x2e\x39\x31\x20\
+\x32\x36\x32\x2e\x35\x32\x36\x20\x2d\x31\x31\x39\x2e\x35\x35\x38\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x32\x36\x32\x2e\x31\x35\x31\x20\x2d\
+\x31\x31\x39\x2e\x32\x43\x32\x36\x32\x2e\x31\x35\x31\x20\x2d\x31\
+\x31\x39\x2e\x32\x20\x32\x36\x34\x2e\x32\x30\x31\x20\x2d\x31\x32\
+\x37\x2e\x32\x20\x32\x35\x39\x2e\x38\x30\x31\x20\x2d\x31\x32\x32\
+\x2e\x38\x43\x32\x35\x39\x2e\x38\x30\x31\x20\x2d\x31\x32\x32\x2e\
+\x38\x20\x32\x35\x33\x2e\x34\x30\x31\x20\x2d\x31\x31\x37\x2e\x36\
+\x20\x32\x34\x36\x2e\x36\x30\x31\x20\x2d\x31\x31\x37\x2e\x36\x43\
+\x32\x34\x36\x2e\x36\x30\x31\x20\x2d\x31\x31\x37\x2e\x36\x20\x32\
+\x33\x33\x2e\x34\x30\x31\x20\x2d\x31\x31\x35\x2e\x36\x20\x32\x32\
+\x39\x2e\x34\x30\x31\x20\x2d\x31\x30\x33\x2e\x36\x43\x32\x32\x39\
+\x2e\x34\x30\x31\x20\x2d\x31\x30\x33\x2e\x36\x20\x32\x32\x35\x2e\
+\x38\x30\x31\x20\x2d\x37\x39\x2e\x32\x20\x32\x33\x33\x2e\x30\x30\
+\x31\x20\x2d\x37\x34\x43\x32\x33\x33\x2e\x30\x30\x31\x20\x2d\x37\
+\x34\x20\x32\x33\x37\x2e\x34\x30\x31\x20\x2d\x36\x37\x2e\x32\x20\
+\x32\x34\x33\x2e\x38\x30\x31\x20\x2d\x37\x33\x2e\x32\x43\x32\x35\
+\x30\x2e\x32\x30\x31\x20\x2d\x37\x39\x2e\x32\x20\x32\x36\x34\x2e\
+\x31\x35\x31\x20\x2d\x31\x30\x36\x2e\x38\x20\x32\x36\x32\x2e\x31\
+\x35\x31\x20\x2d\x31\x31\x39\x2e\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\
+\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x39\x39\x32\x36\
+\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\
+\x35\x30\x2e\x36\x20\x38\x34\x43\x35\x30\x2e\x36\x20\x38\x34\x20\
+\x33\x30\x2e\x32\x20\x36\x34\x2e\x38\x20\x32\x32\x2e\x32\x20\x36\
+\x34\x43\x32\x32\x2e\x32\x20\x36\x34\x20\x2d\x31\x32\x2e\x32\x20\
+\x36\x30\x20\x2d\x32\x37\x20\x37\x38\x43\x2d\x32\x37\x20\x37\x38\
+\x20\x2d\x39\x2e\x34\x20\x35\x37\x2e\x36\x20\x31\x38\x2e\x32\x20\
+\x36\x33\x2e\x32\x43\x31\x38\x2e\x32\x20\x36\x33\x2e\x32\x20\x2d\
+\x33\x2e\x34\x20\x35\x38\x2e\x38\x20\x2d\x31\x35\x2e\x38\x20\x36\
+\x32\x43\x2d\x31\x35\x2e\x38\x20\x36\x32\x20\x2d\x33\x32\x2e\x36\
+\x20\x36\x32\x20\x2d\x34\x32\x2e\x32\x20\x37\x36\x4c\x2d\x34\x35\
+\x20\x38\x30\x2e\x38\x43\x2d\x34\x35\x20\x38\x30\x2e\x38\x20\x2d\
+\x34\x31\x20\x36\x36\x20\x2d\x32\x32\x2e\x36\x20\x36\x30\x43\x2d\
+\x32\x32\x2e\x36\x20\x36\x30\x20\x30\x2e\x32\x20\x35\x35\x2e\x32\
+\x20\x31\x31\x20\x36\x30\x43\x31\x31\x20\x36\x30\x20\x2d\x31\x30\
+\x2e\x36\x20\x35\x33\x2e\x32\x20\x2d\x32\x30\x2e\x36\x20\x35\x35\
+\x2e\x32\x43\x2d\x32\x30\x2e\x36\x20\x35\x35\x2e\x32\x20\x2d\x35\
+\x31\x20\x35\x32\x2e\x38\x20\x2d\x36\x33\x2e\x38\x20\x37\x39\x2e\
+\x32\x43\x2d\x36\x33\x2e\x38\x20\x37\x39\x2e\x32\x20\x2d\x35\x39\
+\x2e\x38\x20\x36\x34\x2e\x38\x20\x2d\x34\x35\x20\x35\x37\x2e\x36\
+\x43\x2d\x34\x35\x20\x35\x37\x2e\x36\x20\x2d\x33\x31\x2e\x34\x20\
+\x34\x38\x2e\x38\x20\x2d\x31\x31\x20\x35\x31\x2e\x36\x43\x2d\x31\
+\x31\x20\x35\x31\x2e\x36\x20\x33\x2e\x34\x20\x35\x34\x2e\x38\x20\
+\x38\x2e\x36\x20\x35\x37\x2e\x32\x43\x31\x33\x2e\x38\x20\x35\x39\
+\x2e\x36\x20\x31\x32\x2e\x36\x20\x35\x36\x2e\x38\x20\x34\x2e\x32\
+\x20\x35\x32\x43\x34\x2e\x32\x20\x35\x32\x20\x2d\x31\x2e\x34\x20\
+\x34\x32\x20\x2d\x31\x35\x2e\x34\x20\x34\x32\x2e\x34\x43\x2d\x31\
+\x35\x2e\x34\x20\x34\x32\x2e\x34\x20\x2d\x35\x38\x2e\x32\x20\x34\
+\x36\x20\x2d\x36\x38\x2e\x36\x20\x35\x38\x43\x2d\x36\x38\x2e\x36\
+\x20\x35\x38\x20\x2d\x35\x35\x20\x34\x36\x2e\x38\x20\x2d\x34\x34\
+\x2e\x36\x20\x34\x34\x43\x2d\x34\x34\x2e\x36\x20\x34\x34\x20\x2d\
+\x32\x32\x2e\x32\x20\x33\x36\x20\x2d\x31\x33\x2e\x38\x20\x33\x36\
+\x2e\x38\x43\x2d\x31\x33\x2e\x38\x20\x33\x36\x2e\x38\x20\x31\x31\
+\x20\x33\x37\x2e\x38\x20\x31\x38\x2e\x36\x20\x33\x33\x2e\x38\x43\
+\x31\x38\x2e\x36\x20\x33\x33\x2e\x38\x20\x37\x2e\x34\x20\x33\x38\
+\x2e\x38\x20\x31\x30\x2e\x36\x20\x34\x32\x43\x31\x33\x2e\x38\x20\
+\x34\x35\x2e\x32\x20\x32\x30\x2e\x36\x20\x35\x32\x2e\x38\x20\x32\
+\x30\x2e\x36\x20\x35\x34\x43\x32\x30\x2e\x36\x20\x35\x35\x2e\x32\
+\x20\x34\x34\x2e\x38\x20\x37\x37\x2e\x33\x20\x34\x38\x2e\x34\x20\
+\x38\x31\x2e\x37\x4c\x35\x30\x2e\x36\x20\x38\x34\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\
+\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x31\x38\x39\x20\x32\x37\x38\x43\x31\x38\x39\x20\x32\
+\x37\x38\x20\x31\x37\x33\x2e\x35\x20\x32\x34\x31\x2e\x35\x20\x31\
+\x36\x31\x20\x32\x33\x32\x43\x31\x36\x31\x20\x32\x33\x32\x20\x31\
+\x38\x37\x20\x32\x34\x38\x20\x31\x39\x30\x2e\x35\x20\x32\x36\x36\
+\x43\x31\x39\x30\x2e\x35\x20\x32\x36\x36\x20\x31\x39\x30\x2e\x35\
+\x20\x32\x37\x36\x20\x31\x38\x39\x20\x32\x37\x38\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\
+\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x32\x33\x36\x20\x32\x38\x35\x2e\x35\x43\x32\x33\x36\
+\x20\x32\x38\x35\x2e\x35\x20\x32\x30\x39\x2e\x35\x20\x32\x33\x30\
+\x2e\x35\x20\x31\x39\x31\x20\x32\x30\x36\x2e\x35\x43\x31\x39\x31\
+\x20\x32\x30\x36\x2e\x35\x20\x32\x33\x34\x2e\x35\x20\x32\x34\x34\
+\x20\x32\x33\x39\x2e\x35\x20\x32\x37\x30\x2e\x35\x4c\x32\x34\x30\
+\x20\x32\x37\x36\x4c\x32\x33\x37\x20\x32\x37\x33\x2e\x35\x43\x32\
+\x33\x37\x20\x32\x37\x33\x2e\x35\x20\x32\x33\x36\x2e\x35\x20\x32\
+\x38\x32\x2e\x35\x20\x32\x33\x36\x20\x32\x38\x35\x2e\x35\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x32\x39\x32\x2e\x35\x20\x32\x33\x37\x43\x32\
+\x39\x32\x2e\x35\x20\x32\x33\x37\x20\x32\x33\x30\x20\x31\x37\x37\
+\x2e\x35\x20\x32\x32\x38\x2e\x35\x20\x31\x37\x35\x43\x32\x32\x38\
+\x2e\x35\x20\x31\x37\x35\x20\x32\x38\x39\x20\x32\x34\x31\x20\x32\
+\x39\x32\x20\x32\x34\x38\x2e\x35\x43\x32\x39\x32\x20\x32\x34\x38\
+\x2e\x35\x20\x32\x39\x30\x20\x32\x33\x39\x2e\x35\x20\x32\x39\x32\
+\x2e\x35\x20\x32\x33\x37\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x30\x34\
+\x20\x32\x38\x30\x2e\x35\x43\x31\x30\x34\x20\x32\x38\x30\x2e\x35\
+\x20\x31\x32\x33\x2e\x35\x20\x32\x32\x38\x2e\x35\x20\x31\x34\x32\
+\x2e\x35\x20\x32\x35\x31\x43\x31\x34\x32\x2e\x35\x20\x32\x35\x31\
+\x20\x31\x35\x37\x2e\x35\x20\x32\x36\x31\x20\x31\x35\x37\x20\x32\
+\x36\x34\x43\x31\x35\x37\x20\x32\x36\x34\x20\x31\x35\x33\x20\x32\
+\x35\x37\x2e\x35\x20\x31\x33\x35\x20\x32\x35\x38\x43\x31\x33\x35\
+\x20\x32\x35\x38\x20\x31\x31\x36\x20\x32\x35\x35\x20\x31\x30\x34\
+\x20\x32\x38\x30\x2e\x35\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x32\x39\x34\
+\x2e\x35\x20\x31\x35\x33\x43\x32\x39\x34\x2e\x35\x20\x31\x35\x33\
+\x20\x32\x34\x39\x2e\x35\x20\x31\x32\x34\x2e\x35\x20\x32\x34\x32\
+\x20\x31\x32\x33\x43\x32\x33\x30\x2e\x31\x39\x33\x20\x31\x32\x30\
+\x2e\x36\x33\x39\x20\x32\x39\x31\x2e\x35\x20\x31\x35\x32\x20\x32\
+\x39\x36\x2e\x35\x20\x31\x36\x32\x2e\x35\x43\x32\x39\x36\x2e\x35\
+\x20\x31\x36\x32\x2e\x35\x20\x32\x39\x38\x2e\x35\x20\x31\x36\x30\
+\x20\x32\x39\x34\x2e\x35\x20\x31\x35\x33\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\
+\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x31\x34\x33\x2e\x38\x30\x31\x20\x32\x35\x39\x2e\x36\x30\x31\
+\x43\x31\x34\x33\x2e\x38\x30\x31\x20\x32\x35\x39\x2e\x36\x30\x31\
+\x20\x31\x36\x34\x2e\x32\x30\x31\x20\x32\x35\x37\x2e\x36\x30\x31\
+\x20\x31\x37\x31\x2e\x30\x30\x31\x20\x32\x35\x30\x2e\x38\x30\x31\
+\x4c\x31\x37\x35\x2e\x34\x30\x31\x20\x32\x35\x34\x2e\x34\x30\x31\
+\x4c\x31\x39\x33\x2e\x30\x30\x31\x20\x32\x31\x36\x2e\x30\x30\x31\
+\x4c\x31\x39\x36\x2e\x36\x30\x31\x20\x32\x32\x31\x2e\x32\x30\x31\
+\x43\x31\x39\x36\x2e\x36\x30\x31\x20\x32\x32\x31\x2e\x32\x30\x31\
+\x20\x32\x31\x31\x2e\x30\x30\x31\x20\x32\x30\x36\x2e\x34\x30\x31\
+\x20\x32\x31\x30\x2e\x32\x30\x31\x20\x31\x39\x38\x2e\x34\x30\x31\
+\x43\x32\x30\x39\x2e\x34\x30\x31\x20\x31\x39\x30\x2e\x34\x30\x31\
+\x20\x32\x32\x33\x2e\x30\x30\x31\x20\x32\x30\x34\x2e\x34\x30\x31\
+\x20\x32\x32\x33\x2e\x30\x30\x31\x20\x32\x30\x34\x2e\x34\x30\x31\
+\x43\x32\x32\x33\x2e\x30\x30\x31\x20\x32\x30\x34\x2e\x34\x30\x31\
+\x20\x32\x32\x32\x2e\x32\x30\x31\x20\x31\x39\x32\x2e\x38\x30\x31\
+\x20\x32\x32\x39\x2e\x34\x30\x31\x20\x31\x39\x39\x2e\x36\x30\x31\
+\x43\x32\x32\x39\x2e\x34\x30\x31\x20\x31\x39\x39\x2e\x36\x30\x31\
+\x20\x32\x32\x37\x2e\x30\x30\x31\x20\x31\x38\x34\x2e\x30\x30\x31\
+\x20\x32\x33\x35\x2e\x34\x30\x31\x20\x31\x39\x32\x2e\x30\x30\x31\
+\x43\x32\x33\x35\x2e\x34\x30\x31\x20\x31\x39\x32\x2e\x30\x30\x31\
+\x20\x32\x32\x34\x2e\x38\x36\x34\x20\x31\x36\x31\x2e\x38\x34\x34\
+\x20\x32\x34\x37\x2e\x34\x30\x31\x20\x31\x38\x37\x2e\x36\x30\x31\
+\x43\x32\x35\x33\x2e\x30\x30\x31\x20\x31\x39\x34\x2e\x30\x30\x31\
+\x20\x32\x34\x38\x2e\x36\x30\x31\x20\x31\x38\x37\x2e\x32\x30\x31\
+\x20\x32\x34\x38\x2e\x36\x30\x31\x20\x31\x38\x37\x2e\x32\x30\x31\
+\x43\x32\x34\x38\x2e\x36\x30\x31\x20\x31\x38\x37\x2e\x32\x30\x31\
+\x20\x32\x32\x32\x2e\x36\x30\x31\x20\x31\x33\x39\x2e\x32\x30\x31\
+\x20\x32\x34\x34\x2e\x32\x30\x31\x20\x31\x35\x33\x2e\x36\x30\x31\
+\x43\x32\x34\x34\x2e\x32\x30\x31\x20\x31\x35\x33\x2e\x36\x30\x31\
+\x20\x32\x34\x36\x2e\x32\x30\x31\x20\x31\x33\x30\x2e\x38\x30\x31\
+\x20\x32\x34\x35\x2e\x30\x30\x31\x20\x31\x32\x36\x2e\x34\x30\x31\
+\x43\x32\x34\x33\x2e\x38\x30\x31\x20\x31\x32\x32\x2e\x30\x30\x31\
+\x20\x32\x34\x31\x2e\x38\x30\x31\x20\x39\x39\x2e\x36\x20\x32\x33\
+\x37\x2e\x30\x30\x31\x20\x39\x34\x2e\x34\x43\x32\x33\x32\x2e\x32\
+\x30\x31\x20\x38\x39\x2e\x32\x20\x32\x33\x37\x2e\x34\x30\x31\x20\
+\x38\x37\x2e\x36\x20\x32\x34\x33\x2e\x30\x30\x31\x20\x39\x32\x2e\
+\x38\x43\x32\x34\x33\x2e\x30\x30\x31\x20\x39\x32\x2e\x38\x20\x32\
+\x33\x31\x2e\x38\x30\x31\x20\x36\x38\x2e\x38\x20\x32\x34\x35\x2e\
+\x30\x30\x31\x20\x38\x30\x2e\x38\x43\x32\x34\x35\x2e\x30\x30\x31\
+\x20\x38\x30\x2e\x38\x20\x32\x34\x31\x2e\x34\x30\x31\x20\x36\x35\
+\x2e\x36\x20\x32\x33\x37\x2e\x30\x30\x31\x20\x36\x32\x2e\x38\x43\
+\x32\x33\x37\x2e\x30\x30\x31\x20\x36\x32\x2e\x38\x20\x32\x33\x31\
+\x2e\x34\x30\x31\x20\x34\x35\x2e\x36\x20\x32\x34\x36\x2e\x36\x30\
+\x31\x20\x35\x36\x2e\x34\x43\x32\x34\x36\x2e\x36\x30\x31\x20\x35\
+\x36\x2e\x34\x20\x32\x34\x32\x2e\x32\x30\x31\x20\x34\x34\x20\x32\
+\x33\x39\x2e\x30\x30\x31\x20\x34\x30\x2e\x38\x43\x32\x33\x39\x2e\
+\x30\x30\x31\x20\x34\x30\x2e\x38\x20\x32\x32\x37\x2e\x34\x30\x31\
+\x20\x31\x33\x2e\x32\x20\x32\x33\x34\x2e\x36\x30\x31\x20\x31\x38\
+\x4c\x32\x33\x39\x2e\x30\x30\x31\x20\x32\x31\x2e\x36\x43\x32\x33\
+\x39\x2e\x30\x30\x31\x20\x32\x31\x2e\x36\x20\x32\x33\x32\x2e\x32\
+\x30\x31\x20\x37\x2e\x36\x20\x32\x33\x38\x2e\x36\x30\x31\x20\x31\
+\x32\x43\x32\x34\x35\x2e\x30\x30\x31\x20\x31\x36\x2e\x34\x20\x32\
+\x34\x35\x2e\x30\x30\x31\x20\x31\x36\x20\x32\x34\x35\x2e\x30\x30\
+\x31\x20\x31\x36\x43\x32\x34\x35\x2e\x30\x30\x31\x20\x31\x36\x20\
+\x32\x32\x33\x2e\x38\x30\x31\x20\x2d\x31\x37\x2e\x32\x20\x32\x34\
+\x34\x2e\x32\x30\x31\x20\x30\x2e\x34\x43\x32\x34\x34\x2e\x32\x30\
+\x31\x20\x30\x2e\x34\x20\x32\x33\x36\x2e\x30\x34\x32\x20\x2d\x31\
+\x33\x2e\x35\x31\x38\x20\x32\x33\x32\x2e\x36\x30\x31\x20\x2d\x32\
+\x30\x2e\x34\x43\x32\x33\x32\x2e\x36\x30\x31\x20\x2d\x32\x30\x2e\
+\x34\x20\x32\x31\x33\x2e\x38\x30\x31\x20\x2d\x34\x30\x2e\x38\x20\
+\x32\x32\x38\x2e\x32\x30\x31\x20\x2d\x33\x34\x2e\x34\x4c\x32\x33\
+\x33\x2e\x30\x30\x31\x20\x2d\x33\x32\x2e\x38\x43\x32\x33\x33\x2e\
+\x30\x30\x31\x20\x2d\x33\x32\x2e\x38\x20\x32\x32\x34\x2e\x32\x30\
+\x31\x20\x2d\x34\x32\x2e\x38\x20\x32\x31\x36\x2e\x32\x30\x31\x20\
+\x2d\x34\x34\x2e\x34\x43\x32\x30\x38\x2e\x32\x30\x31\x20\x2d\x34\
+\x36\x20\x32\x31\x38\x2e\x36\x30\x31\x20\x2d\x35\x32\x2e\x34\x20\
+\x32\x32\x35\x2e\x30\x30\x31\x20\x2d\x35\x30\x2e\x34\x43\x32\x33\
+\x31\x2e\x34\x30\x31\x20\x2d\x34\x38\x2e\x34\x20\x32\x34\x37\x2e\
+\x30\x30\x31\x20\x2d\x34\x30\x2e\x38\x20\x32\x34\x37\x2e\x30\x30\
+\x31\x20\x2d\x34\x30\x2e\x38\x43\x32\x34\x37\x2e\x30\x30\x31\x20\
+\x2d\x34\x30\x2e\x38\x20\x32\x35\x39\x2e\x38\x30\x31\x20\x2d\x32\
+\x32\x20\x32\x36\x33\x2e\x38\x30\x31\x20\x2d\x32\x31\x2e\x36\x43\
+\x32\x36\x33\x2e\x38\x30\x31\x20\x2d\x32\x31\x2e\x36\x20\x32\x34\
+\x33\x2e\x38\x30\x31\x20\x2d\x32\x39\x2e\x32\x20\x32\x34\x39\x2e\
+\x38\x30\x31\x20\x2d\x32\x31\x2e\x32\x43\x32\x34\x39\x2e\x38\x30\
+\x31\x20\x2d\x32\x31\x2e\x32\x20\x32\x36\x34\x2e\x32\x30\x31\x20\
+\x2d\x37\x2e\x32\x20\x32\x35\x37\x2e\x30\x30\x31\x20\x2d\x37\x2e\
+\x36\x43\x32\x35\x37\x2e\x30\x30\x31\x20\x2d\x37\x2e\x36\x20\x32\
+\x35\x31\x2e\x30\x30\x31\x20\x2d\x30\x2e\x34\x20\x32\x35\x35\x2e\
+\x38\x30\x31\x20\x38\x2e\x34\x43\x32\x35\x35\x2e\x38\x30\x31\x20\
+\x38\x2e\x34\x20\x32\x33\x37\x2e\x33\x34\x32\x20\x2d\x39\x2e\x39\
+\x39\x31\x20\x32\x35\x32\x2e\x32\x30\x31\x20\x31\x35\x2e\x36\x4c\
+\x32\x35\x39\x2e\x30\x30\x31\x20\x33\x32\x43\x32\x35\x39\x2e\x30\
+\x30\x31\x20\x33\x32\x20\x32\x33\x34\x2e\x36\x30\x31\x20\x37\x2e\
+\x32\x20\x32\x34\x35\x2e\x38\x30\x31\x20\x32\x39\x2e\x32\x43\x32\
+\x34\x35\x2e\x38\x30\x31\x20\x32\x39\x2e\x32\x20\x32\x36\x33\x2e\
+\x30\x30\x31\x20\x35\x32\x2e\x38\x20\x32\x36\x35\x2e\x30\x30\x31\
+\x20\x35\x33\x2e\x32\x43\x32\x36\x37\x2e\x30\x30\x31\x20\x35\x33\
+\x2e\x36\x20\x32\x37\x31\x2e\x34\x30\x31\x20\x36\x32\x2e\x34\x20\
+\x32\x37\x31\x2e\x34\x30\x31\x20\x36\x32\x2e\x34\x4c\x32\x36\x37\
+\x2e\x30\x30\x31\x20\x36\x30\x2e\x34\x4c\x32\x37\x32\x2e\x32\x30\
+\x31\x20\x36\x39\x2e\x32\x43\x32\x37\x32\x2e\x32\x30\x31\x20\x36\
+\x39\x2e\x32\x20\x32\x36\x31\x2e\x30\x30\x31\x20\x35\x37\x2e\x32\
+\x20\x32\x36\x37\x2e\x30\x30\x31\x20\x37\x30\x2e\x34\x4c\x32\x37\
+\x32\x2e\x36\x30\x31\x20\x38\x34\x2e\x38\x43\x32\x37\x32\x2e\x36\
+\x30\x31\x20\x38\x34\x2e\x38\x20\x32\x35\x32\x2e\x32\x30\x31\x20\
+\x36\x32\x2e\x38\x20\x32\x36\x35\x2e\x38\x30\x31\x20\x39\x32\x2e\
+\x34\x43\x32\x36\x35\x2e\x38\x30\x31\x20\x39\x32\x2e\x34\x20\x32\
+\x34\x39\x2e\x34\x30\x31\x20\x38\x37\x2e\x32\x20\x32\x35\x38\x2e\
+\x32\x30\x31\x20\x31\x30\x34\x2e\x34\x43\x32\x35\x38\x2e\x32\x30\
+\x31\x20\x31\x30\x34\x2e\x34\x20\x32\x35\x36\x2e\x36\x30\x31\x20\
+\x31\x32\x30\x2e\x34\x30\x31\x20\x32\x35\x37\x2e\x30\x30\x31\x20\
+\x31\x32\x35\x2e\x36\x30\x31\x43\x32\x35\x37\x2e\x34\x30\x31\x20\
+\x31\x33\x30\x2e\x38\x30\x31\x20\x32\x35\x38\x2e\x36\x30\x31\x20\
+\x31\x35\x39\x2e\x32\x30\x31\x20\x32\x35\x34\x2e\x32\x30\x31\x20\
+\x31\x36\x37\x2e\x32\x30\x31\x43\x32\x34\x39\x2e\x38\x30\x31\x20\
+\x31\x37\x35\x2e\x32\x30\x31\x20\x32\x36\x30\x2e\x32\x30\x31\x20\
+\x31\x39\x34\x2e\x34\x30\x31\x20\x32\x36\x32\x2e\x32\x30\x31\x20\
+\x31\x39\x38\x2e\x34\x30\x31\x43\x32\x36\x34\x2e\x32\x30\x31\x20\
+\x32\x30\x32\x2e\x34\x30\x31\x20\x32\x36\x37\x2e\x38\x30\x31\x20\
+\x32\x31\x33\x2e\x32\x30\x31\x20\x32\x35\x39\x2e\x30\x30\x31\x20\
+\x32\x30\x34\x2e\x30\x30\x31\x43\x32\x35\x30\x2e\x32\x30\x31\x20\
+\x31\x39\x34\x2e\x38\x30\x31\x20\x32\x35\x34\x2e\x36\x30\x31\x20\
+\x32\x30\x30\x2e\x34\x30\x31\x20\x32\x35\x36\x2e\x36\x30\x31\x20\
+\x32\x30\x39\x2e\x32\x30\x31\x43\x32\x35\x38\x2e\x36\x30\x31\x20\
+\x32\x31\x38\x2e\x30\x30\x31\x20\x32\x36\x34\x2e\x36\x30\x31\x20\
+\x32\x33\x33\x2e\x36\x30\x31\x20\x32\x36\x33\x2e\x38\x30\x31\x20\
+\x32\x33\x39\x2e\x32\x30\x31\x43\x32\x36\x33\x2e\x38\x30\x31\x20\
+\x32\x33\x39\x2e\x32\x30\x31\x20\x32\x36\x32\x2e\x36\x30\x31\x20\
+\x32\x34\x30\x2e\x34\x30\x31\x20\x32\x35\x39\x2e\x34\x30\x31\x20\
+\x32\x33\x36\x2e\x38\x30\x31\x43\x32\x35\x39\x2e\x34\x30\x31\x20\
+\x32\x33\x36\x2e\x38\x30\x31\x20\x32\x34\x34\x2e\x36\x30\x31\x20\
+\x32\x31\x34\x2e\x30\x30\x31\x20\x32\x34\x36\x2e\x32\x30\x31\x20\
+\x32\x32\x38\x2e\x34\x30\x31\x43\x32\x34\x36\x2e\x32\x30\x31\x20\
+\x32\x32\x38\x2e\x34\x30\x31\x20\x32\x34\x35\x2e\x30\x30\x31\x20\
+\x32\x33\x36\x2e\x34\x30\x31\x20\x32\x34\x31\x2e\x38\x30\x31\x20\
+\x32\x34\x35\x2e\x32\x30\x31\x43\x32\x34\x31\x2e\x38\x30\x31\x20\
+\x32\x34\x35\x2e\x32\x30\x31\x20\x32\x33\x38\x2e\x36\x30\x31\x20\
+\x32\x35\x36\x2e\x30\x30\x31\x20\x32\x33\x38\x2e\x36\x30\x31\x20\
+\x32\x34\x37\x2e\x32\x30\x31\x43\x32\x33\x38\x2e\x36\x30\x31\x20\
+\x32\x34\x37\x2e\x32\x30\x31\x20\x32\x33\x35\x2e\x34\x30\x31\x20\
+\x32\x33\x30\x2e\x34\x30\x31\x20\x32\x33\x32\x2e\x36\x30\x31\x20\
+\x32\x33\x38\x2e\x30\x30\x31\x43\x32\x32\x39\x2e\x38\x30\x31\x20\
+\x32\x34\x35\x2e\x36\x30\x31\x20\x32\x32\x36\x2e\x32\x30\x31\x20\
+\x32\x35\x31\x2e\x36\x30\x31\x20\x32\x32\x33\x2e\x34\x30\x31\x20\
+\x32\x35\x34\x2e\x30\x30\x31\x43\x32\x32\x30\x2e\x36\x30\x31\x20\
+\x32\x35\x36\x2e\x34\x30\x31\x20\x32\x31\x35\x2e\x34\x30\x31\x20\
+\x32\x33\x33\x2e\x36\x30\x31\x20\x32\x31\x34\x2e\x32\x30\x31\x20\
+\x32\x34\x34\x2e\x30\x30\x31\x43\x32\x31\x34\x2e\x32\x30\x31\x20\
+\x32\x34\x34\x2e\x30\x30\x31\x20\x32\x30\x32\x2e\x32\x30\x31\x20\
+\x32\x33\x31\x2e\x36\x30\x31\x20\x31\x39\x37\x2e\x34\x30\x31\x20\
+\x32\x34\x38\x2e\x30\x30\x31\x4c\x31\x38\x35\x2e\x38\x30\x31\x20\
+\x32\x36\x34\x2e\x34\x30\x31\x43\x31\x38\x35\x2e\x38\x30\x31\x20\
+\x32\x36\x34\x2e\x34\x30\x31\x20\x31\x38\x35\x2e\x34\x30\x31\x20\
+\x32\x35\x32\x2e\x30\x30\x31\x20\x31\x38\x34\x2e\x32\x30\x31\x20\
+\x32\x35\x38\x2e\x30\x30\x31\x43\x31\x38\x34\x2e\x32\x30\x31\x20\
+\x32\x35\x38\x2e\x30\x30\x31\x20\x31\x35\x34\x2e\x32\x30\x31\x20\
+\x32\x36\x34\x2e\x30\x30\x31\x20\x31\x34\x33\x2e\x38\x30\x31\x20\
+\x32\x35\x39\x2e\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x30\
+\x39\x2e\x34\x30\x31\x20\x2d\x39\x37\x2e\x32\x43\x31\x30\x39\x2e\
+\x34\x30\x31\x20\x2d\x39\x37\x2e\x32\x20\x39\x37\x2e\x38\x30\x31\
+\x20\x2d\x31\x30\x35\x2e\x32\x20\x39\x33\x2e\x38\x30\x31\x20\x2d\
+\x31\x30\x34\x2e\x38\x43\x38\x39\x2e\x38\x30\x31\x20\x2d\x31\x30\
+\x34\x2e\x34\x20\x31\x32\x31\x2e\x34\x30\x31\x20\x2d\x31\x31\x33\
+\x2e\x36\x20\x31\x36\x32\x2e\x36\x30\x31\x20\x2d\x38\x36\x43\x31\
+\x36\x32\x2e\x36\x30\x31\x20\x2d\x38\x36\x20\x31\x36\x37\x2e\x34\
+\x30\x31\x20\x2d\x38\x33\x2e\x32\x20\x31\x37\x31\x2e\x30\x30\x31\
+\x20\x2d\x38\x33\x2e\x36\x43\x31\x37\x31\x2e\x30\x30\x31\x20\x2d\
+\x38\x33\x2e\x36\x20\x31\x37\x34\x2e\x32\x30\x31\x20\x2d\x38\x31\
+\x2e\x32\x20\x31\x37\x31\x2e\x34\x30\x31\x20\x2d\x37\x37\x2e\x36\
+\x43\x31\x37\x31\x2e\x34\x30\x31\x20\x2d\x37\x37\x2e\x36\x20\x31\
+\x36\x32\x2e\x36\x30\x31\x20\x2d\x36\x38\x20\x31\x37\x33\x2e\x38\
+\x30\x31\x20\x2d\x35\x36\x2e\x38\x43\x31\x37\x33\x2e\x38\x30\x31\
+\x20\x2d\x35\x36\x2e\x38\x20\x31\x39\x32\x2e\x32\x30\x31\x20\x2d\
+\x35\x30\x20\x31\x38\x36\x2e\x36\x30\x31\x20\x2d\x35\x38\x2e\x38\
+\x43\x31\x38\x36\x2e\x36\x30\x31\x20\x2d\x35\x38\x2e\x38\x20\x31\
+\x39\x37\x2e\x34\x30\x31\x20\x2d\x35\x34\x2e\x38\x20\x31\x39\x39\
+\x2e\x38\x30\x31\x20\x2d\x35\x30\x2e\x38\x43\x32\x30\x32\x2e\x32\
+\x30\x31\x20\x2d\x34\x36\x2e\x38\x20\x32\x30\x31\x2e\x30\x30\x31\
+\x20\x2d\x35\x30\x2e\x38\x20\x32\x30\x31\x2e\x30\x30\x31\x20\x2d\
+\x35\x30\x2e\x38\x43\x32\x30\x31\x2e\x30\x30\x31\x20\x2d\x35\x30\
+\x2e\x38\x20\x31\x39\x34\x2e\x36\x30\x31\x20\x2d\x35\x38\x20\x31\
+\x38\x38\x2e\x36\x30\x31\x20\x2d\x36\x33\x2e\x32\x43\x31\x38\x38\
+\x2e\x36\x30\x31\x20\x2d\x36\x33\x2e\x32\x20\x31\x38\x33\x2e\x34\
+\x30\x31\x20\x2d\x36\x35\x2e\x32\x20\x31\x38\x30\x2e\x36\x30\x31\
+\x20\x2d\x37\x33\x2e\x36\x43\x31\x37\x37\x2e\x38\x30\x31\x20\x2d\
+\x38\x32\x20\x31\x37\x35\x2e\x34\x30\x31\x20\x2d\x39\x32\x20\x31\
+\x37\x39\x2e\x38\x30\x31\x20\x2d\x39\x35\x2e\x32\x43\x31\x37\x39\
+\x2e\x38\x30\x31\x20\x2d\x39\x35\x2e\x32\x20\x31\x37\x35\x2e\x38\
+\x30\x31\x20\x2d\x39\x30\x2e\x38\x20\x31\x37\x36\x2e\x36\x30\x31\
+\x20\x2d\x39\x34\x2e\x38\x43\x31\x37\x37\x2e\x34\x30\x31\x20\x2d\
+\x39\x38\x2e\x38\x20\x31\x38\x31\x2e\x30\x30\x31\x20\x2d\x31\x30\
+\x32\x2e\x34\x20\x31\x38\x32\x2e\x36\x30\x31\x20\x2d\x31\x30\x32\
+\x2e\x38\x43\x31\x38\x34\x2e\x32\x30\x31\x20\x2d\x31\x30\x33\x2e\
+\x32\x20\x32\x30\x30\x2e\x36\x30\x31\x20\x2d\x31\x31\x39\x20\x32\
+\x30\x37\x2e\x34\x30\x31\x20\x2d\x31\x31\x39\x2e\x34\x43\x32\x30\
+\x37\x2e\x34\x30\x31\x20\x2d\x31\x31\x39\x2e\x34\x20\x31\x39\x38\
+\x2e\x32\x30\x31\x20\x2d\x31\x31\x38\x20\x31\x39\x35\x2e\x32\x30\
+\x31\x20\x2d\x31\x31\x39\x43\x31\x39\x32\x2e\x32\x30\x31\x20\x2d\
+\x31\x32\x30\x20\x31\x36\x35\x2e\x36\x30\x31\x20\x2d\x31\x33\x31\
+\x2e\x34\x20\x31\x35\x39\x2e\x36\x30\x31\x20\x2d\x31\x33\x32\x2e\
+\x36\x43\x31\x35\x39\x2e\x36\x30\x31\x20\x2d\x31\x33\x32\x2e\x36\
+\x20\x31\x34\x32\x2e\x38\x30\x31\x20\x2d\x31\x33\x39\x2e\x32\x20\
+\x31\x35\x34\x2e\x38\x30\x31\x20\x2d\x31\x33\x37\x2e\x32\x43\x31\
+\x35\x34\x2e\x38\x30\x31\x20\x2d\x31\x33\x37\x2e\x32\x20\x31\x39\
+\x30\x2e\x36\x30\x31\x20\x2d\x31\x33\x33\x2e\x34\x20\x32\x30\x38\
+\x2e\x38\x30\x31\x20\x2d\x31\x32\x30\x2e\x32\x43\x32\x30\x38\x2e\
+\x38\x30\x31\x20\x2d\x31\x32\x30\x2e\x32\x20\x32\x30\x31\x2e\x36\
+\x30\x31\x20\x2d\x31\x32\x38\x2e\x36\x20\x31\x38\x33\x2e\x32\x30\
+\x31\x20\x2d\x31\x33\x35\x2e\x36\x43\x31\x38\x33\x2e\x32\x30\x31\
+\x20\x2d\x31\x33\x35\x2e\x36\x20\x31\x36\x31\x2e\x30\x30\x31\x20\
+\x2d\x31\x34\x38\x2e\x32\x20\x31\x32\x35\x2e\x38\x30\x31\x20\x2d\
+\x31\x34\x33\x2e\x32\x43\x31\x32\x35\x2e\x38\x30\x31\x20\x2d\x31\
+\x34\x33\x2e\x32\x20\x31\x30\x38\x2e\x30\x30\x31\x20\x2d\x31\x34\
+\x30\x20\x31\x30\x30\x2e\x32\x30\x31\x20\x2d\x31\x33\x38\x2e\x32\
+\x43\x31\x30\x30\x2e\x32\x30\x31\x20\x2d\x31\x33\x38\x2e\x32\x20\
+\x39\x37\x2e\x36\x30\x31\x20\x2d\x31\x33\x38\x2e\x38\x20\x39\x37\
+\x2e\x30\x30\x31\x20\x2d\x31\x33\x39\x2e\x32\x43\x39\x36\x2e\x34\
+\x30\x31\x20\x2d\x31\x33\x39\x2e\x36\x20\x38\x34\x2e\x36\x20\x2d\
+\x31\x34\x38\x2e\x36\x20\x35\x37\x20\x2d\x31\x34\x31\x2e\x36\x43\
+\x35\x37\x20\x2d\x31\x34\x31\x2e\x36\x20\x34\x30\x20\x2d\x31\x33\
+\x37\x20\x33\x31\x2e\x34\x20\x2d\x31\x33\x32\x2e\x32\x43\x33\x31\
+\x2e\x34\x20\x2d\x31\x33\x32\x2e\x32\x20\x31\x36\x2e\x32\x20\x2d\
+\x31\x33\x31\x20\x31\x32\x2e\x36\x20\x2d\x31\x32\x37\x2e\x38\x43\
+\x31\x32\x2e\x36\x20\x2d\x31\x32\x37\x2e\x38\x20\x2d\x36\x20\x2d\
+\x31\x31\x33\x2e\x32\x20\x2d\x38\x20\x2d\x31\x31\x32\x2e\x34\x43\
+\x2d\x31\x30\x20\x2d\x31\x31\x31\x2e\x36\x20\x2d\x32\x31\x2e\x34\
+\x20\x2d\x31\x30\x34\x20\x2d\x32\x32\x2e\x32\x20\x2d\x31\x30\x33\
+\x2e\x36\x43\x2d\x32\x32\x2e\x32\x20\x2d\x31\x30\x33\x2e\x36\x20\
+\x32\x2e\x34\x20\x2d\x31\x31\x30\x2e\x32\x20\x34\x2e\x38\x20\x2d\
+\x31\x31\x32\x2e\x36\x43\x37\x2e\x32\x20\x2d\x31\x31\x35\x20\x32\
+\x34\x2e\x36\x20\x2d\x31\x31\x37\x2e\x36\x20\x32\x37\x20\x2d\x31\
+\x31\x36\x2e\x32\x43\x32\x39\x2e\x34\x20\x2d\x31\x31\x34\x2e\x38\
+\x20\x33\x37\x2e\x38\x20\x2d\x31\x31\x35\x2e\x34\x20\x32\x38\x2e\
+\x32\x20\x2d\x31\x31\x34\x2e\x38\x43\x32\x38\x2e\x32\x20\x2d\x31\
+\x31\x34\x2e\x38\x20\x31\x30\x33\x2e\x38\x30\x31\x20\x2d\x31\x30\
+\x30\x20\x31\x30\x34\x2e\x36\x30\x31\x20\x2d\x39\x38\x43\x31\x30\
+\x35\x2e\x34\x30\x31\x20\x2d\x39\x36\x20\x31\x30\x39\x2e\x34\x30\
+\x31\x20\x2d\x39\x37\x2e\x32\x20\x31\x30\x39\x2e\x34\x30\x31\x20\
+\x2d\x39\x37\x2e\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x37\x32\x32\x36\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x38\x30\x2e\
+\x38\x30\x31\x20\x2d\x31\x30\x36\x2e\x34\x43\x31\x38\x30\x2e\x38\
+\x30\x31\x20\x2d\x31\x30\x36\x2e\x34\x20\x31\x37\x30\x2e\x36\x30\
+\x31\x20\x2d\x31\x31\x33\x2e\x38\x20\x31\x36\x38\x2e\x36\x30\x31\
+\x20\x2d\x31\x31\x33\x2e\x38\x43\x31\x36\x36\x2e\x36\x30\x31\x20\
+\x2d\x31\x31\x33\x2e\x38\x20\x31\x35\x34\x2e\x32\x30\x31\x20\x2d\
+\x31\x32\x34\x20\x31\x35\x30\x2e\x30\x30\x31\x20\x2d\x31\x32\x33\
+\x2e\x36\x43\x31\x34\x35\x2e\x38\x30\x31\x20\x2d\x31\x32\x33\x2e\
+\x32\x20\x31\x33\x33\x2e\x36\x30\x31\x20\x2d\x31\x33\x33\x2e\x32\
+\x20\x31\x30\x36\x2e\x32\x30\x31\x20\x2d\x31\x32\x35\x43\x31\x30\
+\x36\x2e\x32\x30\x31\x20\x2d\x31\x32\x35\x20\x31\x30\x35\x2e\x36\
+\x30\x31\x20\x2d\x31\x32\x37\x20\x31\x30\x39\x2e\x32\x30\x31\x20\
+\x2d\x31\x32\x37\x2e\x38\x43\x31\x30\x39\x2e\x32\x30\x31\x20\x2d\
+\x31\x32\x37\x2e\x38\x20\x31\x31\x35\x2e\x36\x30\x31\x20\x2d\x31\
+\x33\x30\x20\x31\x31\x36\x2e\x30\x30\x31\x20\x2d\x31\x33\x30\x2e\
+\x36\x43\x31\x31\x36\x2e\x30\x30\x31\x20\x2d\x31\x33\x30\x2e\x36\
+\x20\x31\x33\x36\x2e\x32\x30\x31\x20\x2d\x31\x33\x34\x2e\x38\x20\
+\x31\x34\x33\x2e\x34\x30\x31\x20\x2d\x31\x33\x31\x2e\x32\x43\x31\
+\x34\x33\x2e\x34\x30\x31\x20\x2d\x31\x33\x31\x2e\x32\x20\x31\x35\
+\x32\x2e\x36\x30\x31\x20\x2d\x31\x32\x38\x2e\x36\x20\x31\x35\x38\
+\x2e\x38\x30\x31\x20\x2d\x31\x32\x32\x2e\x34\x43\x31\x35\x38\x2e\
+\x38\x30\x31\x20\x2d\x31\x32\x32\x2e\x34\x20\x31\x37\x30\x2e\x30\
+\x30\x31\x20\x2d\x31\x31\x39\x2e\x32\x20\x31\x37\x33\x2e\x32\x30\
+\x31\x20\x2d\x31\x32\x30\x2e\x32\x43\x31\x37\x33\x2e\x32\x30\x31\
+\x20\x2d\x31\x32\x30\x2e\x32\x20\x31\x38\x32\x2e\x30\x30\x31\x20\
+\x2d\x31\x31\x38\x20\x31\x38\x32\x2e\x34\x30\x31\x20\x2d\x31\x31\
+\x36\x2e\x32\x43\x31\x38\x32\x2e\x34\x30\x31\x20\x2d\x31\x31\x36\
+\x2e\x32\x20\x31\x38\x38\x2e\x32\x30\x31\x20\x2d\x31\x31\x33\x2e\
+\x32\x20\x31\x38\x36\x2e\x34\x30\x31\x20\x2d\x31\x31\x30\x2e\x36\
+\x43\x31\x38\x36\x2e\x34\x30\x31\x20\x2d\x31\x31\x30\x2e\x36\x20\
+\x31\x38\x36\x2e\x38\x30\x31\x20\x2d\x31\x30\x39\x20\x31\x38\x30\
+\x2e\x38\x30\x31\x20\x2d\x31\x30\x36\x2e\x34\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\
+\x37\x32\x32\x36\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x31\x36\x38\x2e\x33\x33\x20\x2d\x31\x30\x38\x2e\x35\x30\
+\x39\x43\x31\x36\x39\x2e\x31\x33\x37\x20\x2d\x31\x30\x37\x2e\x38\
+\x37\x37\x20\x31\x37\x30\x2e\x31\x35\x36\x20\x2d\x31\x30\x37\x2e\
+\x37\x37\x39\x20\x31\x37\x30\x2e\x37\x36\x31\x20\x2d\x31\x30\x36\
+\x2e\x39\x37\x43\x31\x37\x30\x2e\x39\x39\x35\x20\x2d\x31\x30\x36\
+\x2e\x36\x35\x36\x20\x31\x37\x30\x2e\x37\x30\x36\x20\x2d\x31\x30\
+\x36\x2e\x33\x33\x20\x31\x37\x30\x2e\x33\x39\x31\x20\x2d\x31\x30\
+\x36\x2e\x32\x33\x33\x43\x31\x36\x39\x2e\x33\x34\x38\x20\x2d\x31\
+\x30\x35\x2e\x39\x31\x36\x20\x31\x36\x38\x2e\x32\x39\x32\x20\x2d\
+\x31\x30\x36\x2e\x34\x38\x36\x20\x31\x36\x37\x2e\x31\x35\x20\x2d\
+\x31\x30\x35\x2e\x38\x39\x38\x43\x31\x36\x36\x2e\x37\x34\x38\x20\
+\x2d\x31\x30\x35\x2e\x36\x39\x31\x20\x31\x36\x36\x2e\x31\x30\x36\
+\x20\x2d\x31\x30\x35\x2e\x38\x37\x33\x20\x31\x36\x35\x2e\x35\x35\
+\x33\x20\x2d\x31\x30\x36\x2e\x30\x32\x32\x43\x31\x36\x33\x2e\x39\
+\x32\x31\x20\x2d\x31\x30\x36\x2e\x34\x36\x33\x20\x31\x36\x32\x2e\
+\x30\x39\x32\x20\x2d\x31\x30\x36\x2e\x34\x38\x38\x20\x31\x36\x30\
+\x2e\x34\x30\x31\x20\x2d\x31\x30\x35\x2e\x38\x43\x31\x35\x38\x2e\
+\x34\x31\x36\x20\x2d\x31\x30\x36\x2e\x39\x32\x39\x20\x31\x35\x36\
+\x2e\x30\x35\x36\x20\x2d\x31\x30\x36\x2e\x33\x34\x35\x20\x31\x35\
+\x33\x2e\x39\x37\x35\x20\x2d\x31\x30\x37\x2e\x33\x34\x36\x43\x31\
+\x35\x33\x2e\x39\x31\x37\x20\x2d\x31\x30\x37\x2e\x33\x37\x33\x20\
+\x31\x35\x33\x2e\x36\x39\x35\x20\x2d\x31\x30\x37\x2e\x30\x32\x37\
+\x20\x31\x35\x33\x2e\x36\x32\x31\x20\x2d\x31\x30\x37\x2e\x30\x35\
+\x34\x43\x31\x35\x30\x2e\x35\x37\x35\x20\x2d\x31\x30\x38\x2e\x31\
+\x39\x39\x20\x31\x34\x36\x2e\x38\x33\x32\x20\x2d\x31\x30\x37\x2e\
+\x39\x31\x36\x20\x31\x34\x34\x2e\x34\x30\x31\x20\x2d\x31\x31\x30\
+\x2e\x32\x43\x31\x34\x31\x2e\x39\x37\x33\x20\x2d\x31\x31\x30\x2e\
+\x36\x31\x32\x20\x31\x33\x39\x2e\x36\x31\x36\x20\x2d\x31\x31\x31\
+\x2e\x30\x37\x34\x20\x31\x33\x37\x2e\x31\x38\x38\x20\x2d\x31\x31\
+\x31\x2e\x37\x35\x34\x43\x31\x33\x35\x2e\x33\x37\x20\x2d\x31\x31\
+\x32\x2e\x32\x36\x33\x20\x31\x33\x33\x2e\x39\x36\x31\x20\x2d\x31\
+\x31\x33\x2e\x32\x35\x32\x20\x31\x33\x32\x2e\x33\x34\x31\x20\x2d\
+\x31\x31\x34\x2e\x30\x38\x34\x43\x31\x33\x30\x2e\x39\x36\x34\x20\
+\x2d\x31\x31\x34\x2e\x37\x39\x32\x20\x31\x32\x39\x2e\x35\x30\x37\
+\x20\x2d\x31\x31\x35\x2e\x33\x31\x34\x20\x31\x32\x37\x2e\x39\x37\
+\x33\x20\x2d\x31\x31\x35\x2e\x36\x38\x36\x43\x31\x32\x36\x2e\x31\
+\x31\x20\x2d\x31\x31\x36\x2e\x31\x33\x38\x20\x31\x32\x34\x2e\x32\
+\x37\x39\x20\x2d\x31\x31\x36\x2e\x30\x32\x36\x20\x31\x32\x32\x2e\
+\x33\x38\x36\x20\x2d\x31\x31\x36\x2e\x35\x34\x36\x43\x31\x32\x32\
+\x2e\x32\x39\x33\x20\x2d\x31\x31\x36\x2e\x35\x37\x31\x20\x31\x32\
+\x32\x2e\x31\x30\x31\x20\x2d\x31\x31\x36\x2e\x32\x32\x37\x20\x31\
+\x32\x32\x2e\x30\x31\x39\x20\x2d\x31\x31\x36\x2e\x32\x35\x34\x43\
+\x31\x32\x31\x2e\x36\x39\x35\x20\x2d\x31\x31\x36\x2e\x33\x36\x32\
+\x20\x31\x32\x31\x2e\x34\x30\x35\x20\x2d\x31\x31\x36\x2e\x39\x34\
+\x35\x20\x31\x32\x31\x2e\x32\x33\x34\x20\x2d\x31\x31\x36\x2e\x38\
+\x39\x32\x43\x31\x31\x39\x2e\x35\x35\x33\x20\x2d\x31\x31\x36\x2e\
+\x33\x37\x20\x31\x31\x38\x2e\x30\x36\x35\x20\x2d\x31\x31\x37\x2e\
+\x33\x34\x32\x20\x31\x31\x36\x2e\x34\x30\x31\x20\x2d\x31\x31\x37\
+\x43\x31\x31\x35\x2e\x32\x32\x33\x20\x2d\x31\x31\x38\x2e\x32\x32\
+\x34\x20\x31\x31\x33\x2e\x34\x39\x35\x20\x2d\x31\x31\x37\x2e\x39\
+\x37\x39\x20\x31\x31\x31\x2e\x39\x34\x39\x20\x2d\x31\x31\x38\x2e\
+\x34\x32\x31\x43\x31\x30\x38\x2e\x39\x38\x35\x20\x2d\x31\x31\x39\
+\x2e\x32\x36\x39\x20\x31\x30\x35\x2e\x38\x33\x31\x20\x2d\x31\x31\
+\x37\x2e\x39\x39\x39\x20\x31\x30\x32\x2e\x38\x30\x31\x20\x2d\x31\
+\x31\x39\x43\x31\x30\x36\x2e\x39\x31\x34\x20\x2d\x31\x32\x30\x2e\
+\x38\x34\x32\x20\x31\x31\x31\x2e\x36\x30\x31\x20\x2d\x31\x31\x39\
+\x2e\x36\x31\x20\x31\x31\x35\x2e\x36\x36\x33\x20\x2d\x31\x32\x31\
+\x2e\x36\x37\x39\x43\x31\x31\x37\x2e\x39\x39\x31\x20\x2d\x31\x32\
+\x32\x2e\x38\x36\x35\x20\x31\x32\x30\x2e\x36\x35\x33\x20\x2d\x31\
+\x32\x31\x2e\x37\x36\x33\x20\x31\x32\x33\x2e\x32\x32\x33\x20\x2d\
+\x31\x32\x32\x2e\x35\x32\x33\x43\x31\x32\x33\x2e\x37\x31\x20\x2d\
+\x31\x32\x32\x2e\x36\x36\x37\x20\x31\x32\x34\x2e\x34\x30\x31\x20\
+\x2d\x31\x32\x32\x2e\x38\x36\x39\x20\x31\x32\x34\x2e\x38\x30\x31\
+\x20\x2d\x31\x32\x32\x2e\x32\x43\x31\x32\x34\x2e\x39\x33\x35\x20\
+\x2d\x31\x32\x32\x2e\x33\x33\x35\x20\x31\x32\x35\x2e\x31\x31\x37\
+\x20\x2d\x31\x32\x32\x2e\x35\x37\x34\x20\x31\x32\x35\x2e\x31\x37\
+\x35\x20\x2d\x31\x32\x32\x2e\x35\x34\x36\x43\x31\x32\x37\x2e\x36\
+\x32\x35\x20\x2d\x31\x32\x31\x2e\x33\x38\x39\x20\x31\x32\x39\x2e\
+\x39\x34\x20\x2d\x31\x32\x30\x2e\x31\x31\x35\x20\x31\x33\x32\x2e\
+\x34\x32\x32\x20\x2d\x31\x31\x39\x2e\x30\x34\x39\x43\x31\x33\x32\
+\x2e\x37\x36\x33\x20\x2d\x31\x31\x38\x2e\x39\x30\x33\x20\x31\x33\
+\x33\x2e\x32\x39\x35\x20\x2d\x31\x31\x39\x2e\x31\x33\x35\x20\x31\
+\x33\x33\x2e\x35\x34\x37\x20\x2d\x31\x31\x38\x2e\x39\x33\x33\x43\
+\x31\x33\x35\x2e\x30\x36\x37\x20\x2d\x31\x31\x37\x2e\x37\x31\x37\
+\x20\x31\x33\x37\x2e\x30\x31\x20\x2d\x31\x31\x37\x2e\x38\x32\x20\
+\x31\x33\x38\x2e\x34\x30\x31\x20\x2d\x31\x31\x36\x2e\x36\x43\x31\
+\x34\x30\x2e\x30\x39\x39\x20\x2d\x31\x31\x37\x2e\x31\x30\x32\x20\
+\x31\x34\x31\x2e\x38\x39\x32\x20\x2d\x31\x31\x36\x2e\x37\x32\x32\
+\x20\x31\x34\x33\x2e\x36\x32\x31\x20\x2d\x31\x31\x37\x2e\x33\x34\
+\x36\x43\x31\x34\x33\x2e\x36\x39\x38\x20\x2d\x31\x31\x37\x2e\x33\
+\x37\x33\x20\x31\x34\x33\x2e\x39\x33\x32\x20\x2d\x31\x31\x37\x2e\
+\x30\x33\x32\x20\x31\x34\x33\x2e\x39\x36\x35\x20\x2d\x31\x31\x37\
+\x2e\x30\x35\x34\x43\x31\x34\x35\x2e\x30\x39\x35\x20\x2d\x31\x31\
+\x37\x2e\x38\x30\x32\x20\x31\x34\x36\x2e\x32\x35\x20\x2d\x31\x31\
+\x37\x2e\x35\x33\x31\x20\x31\x34\x37\x2e\x31\x34\x32\x20\x2d\x31\
+\x31\x37\x2e\x32\x32\x37\x43\x31\x34\x37\x2e\x34\x38\x20\x2d\x31\
+\x31\x37\x2e\x31\x31\x32\x20\x31\x34\x38\x2e\x31\x34\x33\x20\x2d\
+\x31\x31\x36\x2e\x38\x36\x35\x20\x31\x34\x38\x2e\x34\x34\x38\x20\
+\x2d\x31\x31\x36\x2e\x37\x39\x31\x43\x31\x34\x39\x2e\x35\x37\x34\
+\x20\x2d\x31\x31\x36\x2e\x35\x31\x35\x20\x31\x35\x30\x2e\x34\x33\
+\x20\x2d\x31\x31\x36\x2e\x30\x33\x35\x20\x31\x35\x31\x2e\x36\x30\
+\x39\x20\x2d\x31\x31\x35\x2e\x38\x35\x32\x43\x31\x35\x31\x2e\x37\
+\x32\x33\x20\x2d\x31\x31\x35\x2e\x38\x33\x34\x20\x31\x35\x31\x2e\
+\x39\x30\x38\x20\x2d\x31\x31\x36\x2e\x31\x37\x34\x20\x31\x35\x31\
+\x2e\x39\x38\x20\x2d\x31\x31\x36\x2e\x31\x34\x36\x43\x31\x35\x33\
+\x2e\x31\x30\x33\x20\x2d\x31\x31\x35\x2e\x37\x30\x38\x20\x31\x35\
+\x34\x2e\x31\x34\x35\x20\x2d\x31\x31\x35\x2e\x37\x36\x34\x20\x31\
+\x35\x34\x2e\x38\x30\x31\x20\x2d\x31\x31\x34\x2e\x36\x43\x31\x35\
+\x34\x2e\x39\x33\x36\x20\x2d\x31\x31\x34\x2e\x37\x33\x35\x20\x31\
+\x35\x35\x2e\x31\x30\x31\x20\x2d\x31\x31\x34\x2e\x39\x37\x33\x20\
+\x31\x35\x35\x2e\x31\x38\x33\x20\x2d\x31\x31\x34\x2e\x39\x34\x36\
+\x43\x31\x35\x36\x2e\x32\x31\x20\x2d\x31\x31\x34\x2e\x36\x30\x38\
+\x20\x31\x35\x36\x2e\x38\x35\x39\x20\x2d\x31\x31\x33\x2e\x38\x35\
+\x33\x20\x31\x35\x37\x2e\x39\x36\x20\x2d\x31\x31\x33\x2e\x36\x31\
+\x32\x43\x31\x35\x38\x2e\x34\x34\x35\x20\x2d\x31\x31\x33\x2e\x35\
+\x30\x36\x20\x31\x35\x39\x2e\x30\x35\x37\x20\x2d\x31\x31\x32\x2e\
+\x38\x38\x20\x31\x35\x39\x2e\x36\x33\x33\x20\x2d\x31\x31\x32\x2e\
+\x37\x30\x34\x43\x31\x36\x32\x2e\x30\x32\x35\x20\x2d\x31\x31\x31\
+\x2e\x39\x37\x33\x20\x31\x36\x33\x2e\x38\x36\x38\x20\x2d\x31\x31\
+\x30\x2e\x34\x34\x34\x20\x31\x36\x36\x2e\x30\x36\x32\x20\x2d\x31\
+\x30\x39\x2e\x35\x34\x39\x43\x31\x36\x36\x2e\x38\x32\x31\x20\x2d\
+\x31\x30\x39\x2e\x32\x33\x39\x20\x31\x36\x37\x2e\x36\x39\x37\x20\
+\x2d\x31\x30\x39\x2e\x30\x30\x35\x20\x31\x36\x38\x2e\x33\x33\x20\
+\x2d\x31\x30\x38\x2e\x35\x30\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x37\x32\x32\
+\x36\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x39\
+\x31\x2e\x36\x39\x36\x20\x2d\x31\x32\x32\x2e\x37\x33\x39\x43\x38\
+\x39\x2e\x31\x37\x38\x20\x2d\x31\x32\x34\x2e\x34\x36\x34\x20\x38\
+\x36\x2e\x38\x31\x20\x2d\x31\x32\x35\x2e\x35\x37\x20\x38\x34\x2e\
+\x33\x36\x38\x20\x2d\x31\x32\x37\x2e\x33\x35\x36\x43\x38\x34\x2e\
+\x31\x38\x37\x20\x2d\x31\x32\x37\x2e\x34\x38\x39\x20\x38\x33\x2e\
+\x38\x32\x37\x20\x2d\x31\x32\x37\x2e\x33\x31\x39\x20\x38\x33\x2e\
+\x36\x32\x35\x20\x2d\x31\x32\x37\x2e\x34\x34\x31\x43\x38\x32\x2e\
+\x36\x31\x38\x20\x2d\x31\x32\x38\x2e\x30\x35\x20\x38\x31\x2e\x37\
+\x33\x20\x2d\x31\x32\x38\x2e\x36\x33\x31\x20\x38\x30\x2e\x37\x34\
+\x38\x20\x2d\x31\x32\x39\x2e\x33\x32\x37\x43\x38\x30\x2e\x32\x30\
+\x39\x20\x2d\x31\x32\x39\x2e\x37\x30\x39\x20\x37\x39\x2e\x33\x38\
+\x38\x20\x2d\x31\x32\x39\x2e\x36\x39\x38\x20\x37\x38\x2e\x38\x38\
+\x20\x2d\x31\x32\x39\x2e\x39\x35\x36\x43\x37\x36\x2e\x33\x33\x36\
+\x20\x2d\x31\x33\x31\x2e\x32\x34\x38\x20\x37\x33\x2e\x37\x30\x37\
+\x20\x2d\x31\x33\x31\x2e\x38\x30\x36\x20\x37\x31\x2e\x32\x20\x2d\
+\x31\x33\x33\x43\x37\x31\x2e\x38\x38\x32\x20\x2d\x31\x33\x33\x2e\
+\x36\x33\x38\x20\x37\x33\x2e\x30\x30\x34\x20\x2d\x31\x33\x33\x2e\
+\x33\x39\x34\x20\x37\x33\x2e\x36\x20\x2d\x31\x33\x34\x2e\x32\x43\
+\x37\x33\x2e\x37\x39\x35\x20\x2d\x31\x33\x33\x2e\x39\x32\x20\x37\
+\x34\x2e\x30\x33\x33\x20\x2d\x31\x33\x33\x2e\x36\x33\x36\x20\x37\
+\x34\x2e\x33\x38\x36\x20\x2d\x31\x33\x33\x2e\x38\x32\x37\x43\x37\
+\x36\x2e\x30\x36\x34\x20\x2d\x31\x33\x34\x2e\x37\x33\x31\x20\x37\
+\x37\x2e\x39\x31\x34\x20\x2d\x31\x33\x34\x2e\x38\x38\x34\x20\x37\
+\x39\x2e\x35\x39\x20\x2d\x31\x33\x34\x2e\x37\x39\x34\x43\x38\x31\
+\x2e\x32\x39\x34\x20\x2d\x31\x33\x34\x2e\x37\x30\x32\x20\x38\x33\
+\x2e\x30\x31\x34\x20\x2d\x31\x33\x34\x2e\x33\x39\x37\x20\x38\x34\
+\x2e\x37\x38\x39\x20\x2d\x31\x33\x34\x2e\x31\x32\x35\x43\x38\x35\
+\x2e\x30\x39\x36\x20\x2d\x31\x33\x34\x2e\x30\x37\x38\x20\x38\x35\
+\x2e\x32\x39\x35\x20\x2d\x31\x33\x33\x2e\x35\x35\x35\x20\x38\x35\
+\x2e\x36\x31\x38\x20\x2d\x31\x33\x33\x2e\x34\x35\x38\x43\x38\x37\
+\x2e\x38\x34\x36\x20\x2d\x31\x33\x32\x2e\x37\x39\x35\x20\x39\x30\
+\x2e\x32\x33\x35\x20\x2d\x31\x33\x33\x2e\x33\x32\x20\x39\x32\x2e\
+\x33\x35\x34\x20\x2d\x31\x33\x32\x2e\x34\x38\x32\x43\x39\x33\x2e\
+\x39\x34\x35\x20\x2d\x31\x33\x31\x2e\x38\x35\x33\x20\x39\x35\x2e\
+\x35\x31\x35\x20\x2d\x31\x33\x31\x2e\x30\x33\x20\x39\x36\x2e\x37\
+\x35\x34\x20\x2d\x31\x32\x39\x2e\x37\x35\x35\x43\x39\x37\x2e\x30\
+\x30\x36\x20\x2d\x31\x32\x39\x2e\x34\x39\x35\x20\x39\x36\x2e\x36\
+\x38\x31\x20\x2d\x31\x32\x39\x2e\x31\x39\x34\x20\x39\x36\x2e\x34\
+\x30\x31\x20\x2d\x31\x32\x39\x43\x39\x36\x2e\x37\x38\x39\x20\x2d\
+\x31\x32\x39\x2e\x31\x30\x39\x20\x39\x37\x2e\x30\x36\x32\x20\x2d\
+\x31\x32\x38\x2e\x39\x30\x33\x20\x39\x37\x2e\x31\x37\x33\x20\x2d\
+\x31\x32\x38\x2e\x35\x39\x43\x39\x37\x2e\x32\x35\x37\x20\x2d\x31\
+\x32\x38\x2e\x33\x35\x31\x20\x39\x37\x2e\x32\x35\x37\x20\x2d\x31\
+\x32\x38\x2e\x30\x34\x39\x20\x39\x37\x2e\x31\x37\x33\x20\x2d\x31\
+\x32\x37\x2e\x38\x31\x43\x39\x37\x2e\x30\x36\x31\x20\x2d\x31\x32\
+\x37\x2e\x34\x39\x38\x20\x39\x36\x2e\x37\x38\x32\x20\x2d\x31\x32\
+\x37\x2e\x33\x39\x37\x20\x39\x36\x2e\x34\x30\x38\x20\x2d\x31\x32\
+\x37\x2e\x33\x34\x36\x43\x39\x35\x2e\x30\x30\x31\x20\x2d\x31\x32\
+\x37\x2e\x31\x35\x36\x20\x39\x36\x2e\x37\x37\x33\x20\x2d\x31\x32\
+\x38\x2e\x35\x33\x36\x20\x39\x36\x2e\x30\x37\x33\x20\x2d\x31\x32\
+\x38\x2e\x30\x38\x38\x43\x39\x34\x2e\x38\x20\x2d\x31\x32\x37\x2e\
+\x32\x37\x34\x20\x39\x35\x2e\x35\x34\x36\x20\x2d\x31\x32\x35\x2e\
+\x38\x36\x38\x20\x39\x34\x2e\x38\x30\x31\x20\x2d\x31\x32\x34\x2e\
+\x36\x43\x39\x34\x2e\x35\x32\x31\x20\x2d\x31\x32\x34\x2e\x37\x39\
+\x34\x20\x39\x34\x2e\x32\x39\x31\x20\x2d\x31\x32\x35\x2e\x30\x31\
+\x32\x20\x39\x34\x2e\x34\x30\x31\x20\x2d\x31\x32\x35\x2e\x34\x43\
+\x39\x34\x2e\x36\x33\x35\x20\x2d\x31\x32\x34\x2e\x38\x37\x38\x20\
+\x39\x34\x2e\x30\x33\x33\x20\x2d\x31\x32\x34\x2e\x35\x38\x38\x20\
+\x39\x33\x2e\x38\x36\x35\x20\x2d\x31\x32\x34\x2e\x32\x37\x32\x43\
+\x39\x33\x2e\x34\x38\x20\x2d\x31\x32\x33\x2e\x35\x34\x37\x20\x39\
+\x32\x2e\x35\x38\x31\x20\x2d\x31\x32\x32\x2e\x31\x33\x32\x20\x39\
+\x31\x2e\x36\x39\x36\x20\x2d\x31\x32\x32\x2e\x37\x33\x39\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x63\x63\x37\x32\x32\x36\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x35\x39\x2e\x31\x39\x38\x20\x2d\x31\x31\x35\
+\x2e\x33\x39\x31\x43\x35\x36\x2e\x30\x34\x34\x20\x2d\x31\x31\x36\
+\x2e\x31\x38\x35\x20\x35\x32\x2e\x39\x39\x34\x20\x2d\x31\x31\x36\
+\x2e\x30\x37\x20\x34\x39\x2e\x39\x37\x38\x20\x2d\x31\x31\x37\x2e\
+\x33\x34\x36\x43\x34\x39\x2e\x39\x31\x31\x20\x2d\x31\x31\x37\x2e\
+\x33\x37\x34\x20\x34\x39\x2e\x36\x38\x38\x20\x2d\x31\x31\x37\x2e\
+\x30\x32\x37\x20\x34\x39\x2e\x36\x32\x34\x20\x2d\x31\x31\x37\x2e\
+\x30\x35\x34\x43\x34\x38\x2e\x32\x35\x38\x20\x2d\x31\x31\x37\x2e\
+\x36\x34\x38\x20\x34\x37\x2e\x33\x34\x20\x2d\x31\x31\x38\x2e\x36\
+\x31\x34\x20\x34\x36\x2e\x32\x36\x34\x20\x2d\x31\x31\x39\x2e\x36\
+\x36\x43\x34\x35\x2e\x33\x35\x31\x20\x2d\x31\x32\x30\x2e\x35\x34\
+\x38\x20\x34\x33\x2e\x36\x39\x33\x20\x2d\x31\x32\x30\x2e\x31\x36\
+\x31\x20\x34\x32\x2e\x34\x31\x39\x20\x2d\x31\x32\x30\x2e\x36\x34\
+\x38\x43\x34\x32\x2e\x30\x39\x35\x20\x2d\x31\x32\x30\x2e\x37\x37\
+\x32\x20\x34\x31\x2e\x38\x39\x32\x20\x2d\x31\x32\x31\x2e\x32\x38\
+\x34\x20\x34\x31\x2e\x35\x39\x31\x20\x2d\x31\x32\x31\x2e\x33\x32\
+\x33\x43\x34\x30\x2e\x33\x37\x32\x20\x2d\x31\x32\x31\x2e\x34\x38\
+\x20\x33\x39\x2e\x34\x34\x35\x20\x2d\x31\x32\x32\x2e\x34\x32\x39\
+\x20\x33\x38\x2e\x34\x20\x2d\x31\x32\x33\x43\x34\x30\x2e\x37\x33\
+\x36\x20\x2d\x31\x32\x33\x2e\x37\x39\x35\x20\x34\x33\x2e\x31\x34\
+\x37\x20\x2d\x31\x32\x33\x2e\x37\x36\x34\x20\x34\x35\x2e\x36\x30\
+\x39\x20\x2d\x31\x32\x34\x2e\x31\x34\x38\x43\x34\x35\x2e\x37\x32\
+\x32\x20\x2d\x31\x32\x34\x2e\x31\x36\x36\x20\x34\x35\x2e\x38\x36\
+\x37\x20\x2d\x31\x32\x33\x2e\x38\x34\x35\x20\x34\x36\x20\x2d\x31\
+\x32\x33\x2e\x38\x34\x35\x43\x34\x36\x2e\x31\x33\x36\x20\x2d\x31\
+\x32\x33\x2e\x38\x34\x35\x20\x34\x36\x2e\x32\x36\x36\x20\x2d\x31\
+\x32\x34\x2e\x30\x36\x36\x20\x34\x36\x2e\x34\x20\x2d\x31\x32\x34\
+\x2e\x32\x43\x34\x36\x2e\x35\x39\x35\x20\x2d\x31\x32\x33\x2e\x39\
+\x32\x20\x34\x36\x2e\x38\x39\x37\x20\x2d\x31\x32\x33\x2e\x35\x39\
+\x34\x20\x34\x37\x2e\x31\x35\x34\x20\x2d\x31\x32\x33\x2e\x38\x34\
+\x38\x43\x34\x37\x2e\x37\x30\x32\x20\x2d\x31\x32\x34\x2e\x33\x38\
+\x38\x20\x34\x38\x2e\x32\x35\x38\x20\x2d\x31\x32\x34\x2e\x31\x39\
+\x38\x20\x34\x38\x2e\x37\x39\x38\x20\x2d\x31\x32\x34\x2e\x31\x35\
+\x38\x43\x34\x38\x2e\x39\x34\x32\x20\x2d\x31\x32\x34\x2e\x31\x34\
+\x38\x20\x34\x39\x2e\x30\x36\x37\x20\x2d\x31\x32\x33\x2e\x38\x34\
+\x35\x20\x34\x39\x2e\x32\x20\x2d\x31\x32\x33\x2e\x38\x34\x35\x43\
+\x34\x39\x2e\x33\x33\x36\x20\x2d\x31\x32\x33\x2e\x38\x34\x35\x20\
+\x34\x39\x2e\x34\x36\x37\x20\x2d\x31\x32\x34\x2e\x31\x35\x36\x20\
+\x34\x39\x2e\x36\x20\x2d\x31\x32\x34\x2e\x31\x35\x36\x43\x34\x39\
+\x2e\x37\x33\x36\x20\x2d\x31\x32\x34\x2e\x31\x35\x35\x20\x34\x39\
+\x2e\x38\x36\x37\x20\x2d\x31\x32\x33\x2e\x38\x34\x35\x20\x35\x30\
+\x20\x2d\x31\x32\x33\x2e\x38\x34\x35\x43\x35\x30\x2e\x31\x33\x36\
+\x20\x2d\x31\x32\x33\x2e\x38\x34\x35\x20\x35\x30\x2e\x32\x36\x36\
+\x20\x2d\x31\x32\x34\x2e\x30\x36\x36\x20\x35\x30\x2e\x34\x20\x2d\
+\x31\x32\x34\x2e\x32\x43\x35\x31\x2e\x30\x39\x32\x20\x2d\x31\x32\
+\x33\x2e\x34\x31\x38\x20\x35\x31\x2e\x39\x37\x37\x20\x2d\x31\x32\
+\x33\x2e\x39\x37\x32\x20\x35\x32\x2e\x37\x39\x39\x20\x2d\x31\x32\
+\x33\x2e\x37\x39\x33\x43\x35\x33\x2e\x38\x33\x37\x20\x2d\x31\x32\
+\x33\x2e\x35\x36\x36\x20\x35\x34\x2e\x31\x30\x34\x20\x2d\x31\x32\
+\x32\x2e\x34\x31\x38\x20\x35\x35\x2e\x31\x37\x38\x20\x2d\x31\x32\
+\x32\x2e\x31\x32\x43\x35\x39\x2e\x38\x39\x33\x20\x2d\x31\x32\x30\
+\x2e\x38\x31\x36\x20\x36\x34\x2e\x30\x33\x20\x2d\x31\x31\x38\x2e\
+\x36\x37\x31\x20\x36\x38\x2e\x33\x39\x33\x20\x2d\x31\x31\x36\x2e\
+\x35\x38\x34\x43\x36\x38\x2e\x37\x20\x2d\x31\x31\x36\x2e\x34\x33\
+\x37\x20\x36\x38\x2e\x39\x31\x20\x2d\x31\x31\x36\x2e\x31\x38\x39\
+\x20\x36\x38\x2e\x38\x20\x2d\x31\x31\x35\x2e\x38\x43\x36\x39\x2e\
+\x30\x36\x37\x20\x2d\x31\x31\x35\x2e\x38\x20\x36\x39\x2e\x33\x38\
+\x20\x2d\x31\x31\x35\x2e\x38\x38\x38\x20\x36\x39\x2e\x35\x37\x20\
+\x2d\x31\x31\x35\x2e\x37\x35\x36\x43\x37\x30\x2e\x36\x32\x38\x20\
+\x2d\x31\x31\x35\x2e\x30\x32\x34\x20\x37\x31\x2e\x36\x36\x39\x20\
+\x2d\x31\x31\x34\x2e\x34\x37\x36\x20\x37\x32\x2e\x33\x36\x36\x20\
+\x2d\x31\x31\x33\x2e\x33\x37\x38\x43\x37\x32\x2e\x35\x38\x32\x20\
+\x2d\x31\x31\x33\x2e\x30\x33\x39\x20\x37\x32\x2e\x32\x35\x33\x20\
+\x2d\x31\x31\x32\x2e\x36\x33\x32\x20\x37\x32\x2e\x30\x32\x20\x2d\
+\x31\x31\x32\x2e\x36\x38\x34\x43\x36\x37\x2e\x35\x39\x31\x20\x2d\
+\x31\x31\x33\x2e\x36\x37\x39\x20\x36\x33\x2e\x35\x38\x35\x20\x2d\
+\x31\x31\x34\x2e\x32\x38\x37\x20\x35\x39\x2e\x31\x39\x38\x20\x2d\
+\x31\x31\x35\x2e\x33\x39\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x37\x32\x32\x36\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x34\x35\
+\x2e\x33\x33\x38\x20\x2d\x37\x31\x2e\x31\x37\x39\x43\x34\x33\x2e\
+\x37\x34\x36\x20\x2d\x37\x32\x2e\x33\x39\x38\x20\x34\x33\x2e\x31\
+\x36\x32\x20\x2d\x37\x34\x2e\x34\x32\x39\x20\x34\x32\x2e\x30\x33\
+\x34\x20\x2d\x37\x36\x2e\x32\x32\x31\x43\x34\x31\x2e\x38\x32\x20\
+\x2d\x37\x36\x2e\x35\x36\x31\x20\x34\x32\x2e\x30\x39\x34\x20\x2d\
+\x37\x36\x2e\x38\x37\x35\x20\x34\x32\x2e\x34\x31\x31\x20\x2d\x37\
+\x36\x2e\x39\x36\x34\x43\x34\x32\x2e\x39\x37\x31\x20\x2d\x37\x37\
+\x2e\x31\x32\x33\x20\x34\x33\x2e\x35\x31\x34\x20\x2d\x37\x36\x2e\
+\x36\x34\x35\x20\x34\x33\x2e\x39\x32\x33\x20\x2d\x37\x36\x2e\x34\
+\x34\x33\x43\x34\x35\x2e\x36\x36\x38\x20\x2d\x37\x35\x2e\x35\x38\
+\x31\x20\x34\x37\x2e\x32\x30\x33\x20\x2d\x37\x34\x2e\x33\x33\x39\
+\x20\x34\x39\x2e\x32\x20\x2d\x37\x34\x2e\x32\x43\x35\x31\x2e\x31\
+\x39\x20\x2d\x37\x31\x2e\x39\x36\x36\x20\x35\x35\x2e\x34\x35\x20\
+\x2d\x37\x31\x2e\x35\x38\x31\x20\x35\x35\x2e\x34\x35\x37\x20\x2d\
+\x36\x38\x2e\x32\x43\x35\x35\x2e\x34\x35\x38\x20\x2d\x36\x37\x2e\
+\x33\x34\x31\x20\x35\x34\x2e\x30\x33\x20\x2d\x36\x38\x2e\x32\x35\
+\x39\x20\x35\x33\x2e\x36\x20\x2d\x36\x37\x2e\x34\x43\x35\x31\x2e\
+\x31\x34\x39\x20\x2d\x36\x38\x2e\x34\x30\x33\x20\x34\x38\x2e\x37\
+\x36\x20\x2d\x36\x38\x2e\x33\x20\x34\x36\x2e\x33\x38\x20\x2d\x36\
+\x39\x2e\x37\x36\x37\x43\x34\x35\x2e\x37\x36\x33\x20\x2d\x37\x30\
+\x2e\x31\x34\x38\x20\x34\x36\x2e\x30\x39\x33\x20\x2d\x37\x30\x2e\
+\x36\x30\x31\x20\x34\x35\x2e\x33\x33\x38\x20\x2d\x37\x31\x2e\x31\
+\x37\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x63\x63\x37\x32\x32\x36\x22\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x37\x2e\x38\x20\x2d\x31\
+\x32\x33\x2e\x37\x35\x36\x43\x31\x37\x2e\x39\x33\x35\x20\x2d\x31\
+\x32\x33\x2e\x37\x35\x35\x20\x32\x34\x2e\x39\x36\x36\x20\x2d\x31\
+\x32\x33\x2e\x35\x32\x32\x20\x32\x34\x2e\x39\x34\x39\x20\x2d\x31\
+\x32\x33\x2e\x34\x30\x38\x43\x32\x34\x2e\x39\x30\x34\x20\x2d\x31\
+\x32\x33\x2e\x30\x39\x39\x20\x31\x37\x2e\x31\x37\x34\x20\x2d\x31\
+\x32\x32\x2e\x30\x35\x20\x31\x36\x2e\x38\x31\x20\x2d\x31\x32\x32\
+\x2e\x32\x32\x43\x31\x36\x2e\x36\x34\x36\x20\x2d\x31\x32\x32\x2e\
+\x32\x39\x36\x20\x39\x2e\x31\x33\x34\x20\x2d\x31\x31\x39\x2e\x38\
+\x36\x36\x20\x39\x20\x2d\x31\x32\x30\x43\x39\x2e\x32\x36\x38\x20\
+\x2d\x31\x32\x30\x2e\x31\x33\x35\x20\x31\x37\x2e\x35\x33\x34\x20\
+\x2d\x31\x32\x33\x2e\x37\x35\x36\x20\x31\x37\x2e\x38\x20\x2d\x31\
+\x32\x33\x2e\x37\x35\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x33\x33\x2e\
+\x32\x20\x2d\x31\x31\x34\x43\x33\x33\x2e\x32\x20\x2d\x31\x31\x34\
+\x20\x31\x38\x2e\x34\x20\x2d\x31\x31\x32\x2e\x32\x20\x31\x34\x20\
+\x2d\x31\x31\x31\x43\x39\x2e\x36\x20\x2d\x31\x30\x39\x2e\x38\x20\
+\x2d\x39\x20\x2d\x31\x30\x32\x2e\x32\x20\x2d\x31\x32\x20\x2d\x31\
+\x30\x30\x2e\x32\x43\x2d\x31\x32\x20\x2d\x31\x30\x30\x2e\x32\x20\
+\x2d\x32\x35\x2e\x34\x20\x2d\x39\x34\x2e\x38\x20\x2d\x34\x32\x2e\
+\x34\x20\x2d\x37\x34\x2e\x38\x43\x2d\x34\x32\x2e\x34\x20\x2d\x37\
+\x34\x2e\x38\x20\x2d\x33\x34\x2e\x38\x20\x2d\x37\x38\x2e\x32\x20\
+\x2d\x33\x32\x2e\x36\x20\x2d\x38\x31\x43\x2d\x33\x32\x2e\x36\x20\
+\x2d\x38\x31\x20\x2d\x31\x39\x20\x2d\x39\x33\x2e\x36\x20\x2d\x31\
+\x39\x2e\x32\x20\x2d\x39\x31\x43\x2d\x31\x39\x2e\x32\x20\x2d\x39\
+\x31\x20\x2d\x37\x20\x2d\x39\x39\x2e\x36\x20\x2d\x37\x2e\x36\x20\
+\x2d\x39\x37\x2e\x34\x43\x2d\x37\x2e\x36\x20\x2d\x39\x37\x2e\x34\
+\x20\x31\x36\x2e\x38\x20\x2d\x31\x30\x38\x2e\x36\x20\x31\x34\x2e\
+\x38\x20\x2d\x31\x30\x35\x2e\x34\x43\x31\x34\x2e\x38\x20\x2d\x31\
+\x30\x35\x2e\x34\x20\x33\x36\x2e\x34\x20\x2d\x31\x31\x30\x20\x33\
+\x35\x2e\x34\x20\x2d\x31\x30\x38\x43\x33\x35\x2e\x34\x20\x2d\x31\
+\x30\x38\x20\x35\x34\x2e\x32\x20\x2d\x31\x30\x33\x2e\x36\x20\x35\
+\x31\x2e\x34\x20\x2d\x31\x30\x33\x2e\x34\x43\x35\x31\x2e\x34\x20\
+\x2d\x31\x30\x33\x2e\x34\x20\x34\x35\x2e\x36\x20\x2d\x31\x30\x32\
+\x2e\x32\x20\x35\x32\x20\x2d\x39\x38\x2e\x36\x43\x35\x32\x20\x2d\
+\x39\x38\x2e\x36\x20\x34\x38\x2e\x36\x20\x2d\x39\x34\x2e\x32\x20\
+\x34\x33\x2e\x32\x20\x2d\x39\x38\x2e\x32\x43\x33\x37\x2e\x38\x20\
+\x2d\x31\x30\x32\x2e\x32\x20\x34\x30\x2e\x38\x20\x2d\x31\x30\x30\
+\x20\x33\x35\x2e\x38\x20\x2d\x39\x39\x43\x33\x35\x2e\x38\x20\x2d\
+\x39\x39\x20\x33\x33\x2e\x32\x20\x2d\x39\x38\x2e\x32\x20\x32\x38\
+\x2e\x36\x20\x2d\x31\x30\x32\x2e\x32\x43\x32\x38\x2e\x36\x20\x2d\
+\x31\x30\x32\x2e\x32\x20\x32\x33\x20\x2d\x31\x30\x36\x2e\x38\x20\
+\x31\x34\x2e\x32\x20\x2d\x31\x30\x33\x2e\x32\x43\x31\x34\x2e\x32\
+\x20\x2d\x31\x30\x33\x2e\x32\x20\x2d\x31\x36\x2e\x34\x20\x2d\x39\
+\x30\x2e\x36\x20\x2d\x31\x38\x2e\x34\x20\x2d\x39\x30\x43\x2d\x31\
+\x38\x2e\x34\x20\x2d\x39\x30\x20\x2d\x32\x32\x20\x2d\x38\x37\x2e\
+\x32\x20\x2d\x32\x34\x2e\x34\x20\x2d\x38\x33\x2e\x36\x43\x2d\x32\
+\x34\x2e\x34\x20\x2d\x38\x33\x2e\x36\x20\x2d\x33\x30\x2e\x32\x20\
+\x2d\x37\x39\x2e\x32\x20\x2d\x33\x33\x2e\x32\x20\x2d\x37\x37\x2e\
+\x38\x43\x2d\x33\x33\x2e\x32\x20\x2d\x37\x37\x2e\x38\x20\x2d\x34\
+\x36\x20\x2d\x36\x36\x2e\x32\x20\x2d\x34\x37\x2e\x32\x20\x2d\x36\
+\x34\x2e\x38\x43\x2d\x34\x37\x2e\x32\x20\x2d\x36\x34\x2e\x38\x20\
+\x2d\x35\x30\x2e\x36\x20\x2d\x35\x39\x2e\x36\x20\x2d\x35\x31\x2e\
+\x34\x20\x2d\x35\x39\x2e\x32\x43\x2d\x35\x31\x2e\x34\x20\x2d\x35\
+\x39\x2e\x32\x20\x2d\x34\x35\x20\x2d\x36\x33\x20\x2d\x34\x33\x20\
+\x2d\x36\x35\x43\x2d\x34\x33\x20\x2d\x36\x35\x20\x2d\x32\x39\x20\
+\x2d\x37\x35\x20\x2d\x32\x33\x2e\x36\x20\x2d\x37\x35\x2e\x38\x43\
+\x2d\x32\x33\x2e\x36\x20\x2d\x37\x35\x2e\x38\x20\x2d\x31\x39\x2e\
+\x32\x20\x2d\x37\x38\x2e\x38\x20\x2d\x31\x38\x2e\x34\x20\x2d\x38\
+\x30\x2e\x32\x43\x2d\x31\x38\x2e\x34\x20\x2d\x38\x30\x2e\x32\x20\
+\x2d\x34\x20\x2d\x38\x39\x2e\x34\x20\x30\x2e\x32\x20\x2d\x38\x39\
+\x2e\x34\x43\x30\x2e\x32\x20\x2d\x38\x39\x2e\x34\x20\x39\x2e\x34\
+\x20\x2d\x38\x34\x2e\x32\x20\x31\x31\x2e\x38\x20\x2d\x39\x31\x2e\
+\x32\x43\x31\x31\x2e\x38\x20\x2d\x39\x31\x2e\x32\x20\x31\x37\x2e\
+\x36\x20\x2d\x39\x33\x20\x32\x33\x2e\x32\x20\x2d\x39\x31\x2e\x38\
+\x43\x32\x33\x2e\x32\x20\x2d\x39\x31\x2e\x38\x20\x32\x36\x2e\x34\
+\x20\x2d\x39\x34\x2e\x34\x20\x32\x35\x2e\x36\x20\x2d\x39\x36\x2e\
+\x36\x43\x32\x35\x2e\x36\x20\x2d\x39\x36\x2e\x36\x20\x32\x37\x2e\
+\x32\x20\x2d\x39\x38\x2e\x34\x20\x32\x38\x2e\x32\x20\x2d\x39\x34\
+\x2e\x36\x43\x32\x38\x2e\x32\x20\x2d\x39\x34\x2e\x36\x20\x33\x31\
+\x2e\x36\x20\x2d\x39\x31\x20\x33\x36\x2e\x34\x20\x2d\x39\x33\x43\
+\x33\x36\x2e\x34\x20\x2d\x39\x33\x20\x34\x30\x2e\x34\x20\x2d\x39\
+\x33\x2e\x32\x20\x33\x38\x2e\x34\x20\x2d\x39\x30\x2e\x38\x43\x33\
+\x38\x2e\x34\x20\x2d\x39\x30\x2e\x38\x20\x33\x34\x20\x2d\x38\x37\
+\x20\x32\x32\x2e\x32\x20\x2d\x38\x36\x2e\x38\x43\x32\x32\x2e\x32\
+\x20\x2d\x38\x36\x2e\x38\x20\x39\x2e\x38\x20\x2d\x38\x36\x2e\x32\
+\x20\x2d\x36\x2e\x36\x20\x2d\x37\x38\x2e\x36\x43\x2d\x36\x2e\x36\
+\x20\x2d\x37\x38\x2e\x36\x20\x2d\x33\x36\x2e\x34\x20\x2d\x36\x38\
+\x2e\x32\x20\x2d\x34\x35\x2e\x36\x20\x2d\x35\x37\x2e\x38\x43\x2d\
+\x34\x35\x2e\x36\x20\x2d\x35\x37\x2e\x38\x20\x2d\x35\x32\x20\x2d\
+\x34\x39\x20\x2d\x35\x37\x2e\x34\x20\x2d\x34\x37\x2e\x38\x43\x2d\
+\x35\x37\x2e\x34\x20\x2d\x34\x37\x2e\x38\x20\x2d\x36\x33\x2e\x32\
+\x20\x2d\x34\x37\x20\x2d\x36\x39\x2e\x32\x20\x2d\x33\x39\x2e\x36\
+\x43\x2d\x36\x39\x2e\x32\x20\x2d\x33\x39\x2e\x36\x20\x2d\x35\x39\
+\x2e\x34\x20\x2d\x34\x35\x2e\x34\x20\x2d\x35\x30\x2e\x34\x20\x2d\
+\x34\x35\x2e\x34\x43\x2d\x35\x30\x2e\x34\x20\x2d\x34\x35\x2e\x34\
+\x20\x2d\x34\x36\x2e\x34\x20\x2d\x34\x37\x2e\x38\x20\x2d\x35\x30\
+\x2e\x32\x20\x2d\x34\x34\x2e\x32\x43\x2d\x35\x30\x2e\x32\x20\x2d\
+\x34\x34\x2e\x32\x20\x2d\x35\x33\x2e\x38\x20\x2d\x33\x36\x2e\x36\
+\x20\x2d\x35\x32\x2e\x32\x20\x2d\x33\x31\x2e\x32\x43\x2d\x35\x32\
+\x2e\x32\x20\x2d\x33\x31\x2e\x32\x20\x2d\x35\x32\x2e\x38\x20\x2d\
+\x32\x36\x20\x2d\x35\x33\x2e\x36\x20\x2d\x32\x34\x2e\x34\x43\x2d\
+\x35\x33\x2e\x36\x20\x2d\x32\x34\x2e\x34\x20\x2d\x36\x31\x2e\x34\
+\x20\x2d\x31\x31\x2e\x36\x20\x2d\x36\x31\x2e\x34\x20\x2d\x39\x2e\
+\x32\x43\x2d\x36\x31\x2e\x34\x20\x2d\x36\x2e\x38\x20\x2d\x36\x30\
+\x2e\x32\x20\x33\x20\x2d\x35\x39\x2e\x38\x20\x33\x2e\x36\x43\x2d\
+\x35\x39\x2e\x34\x20\x34\x2e\x32\x20\x2d\x36\x30\x2e\x38\x20\x32\
+\x20\x2d\x35\x37\x20\x34\x2e\x34\x43\x2d\x35\x33\x2e\x32\x20\x36\
+\x2e\x38\x20\x2d\x35\x30\x2e\x34\x20\x38\x2e\x34\x20\x2d\x34\x39\
+\x2e\x36\x20\x31\x31\x2e\x32\x43\x2d\x34\x38\x2e\x38\x20\x31\x34\
+\x20\x2d\x35\x31\x2e\x36\x20\x35\x2e\x38\x20\x2d\x35\x31\x2e\x38\
+\x20\x34\x43\x2d\x35\x32\x20\x32\x2e\x32\x20\x2d\x35\x36\x2e\x32\
+\x20\x2d\x35\x20\x2d\x35\x35\x2e\x34\x20\x2d\x37\x2e\x34\x43\x2d\
+\x35\x35\x2e\x34\x20\x2d\x37\x2e\x34\x20\x2d\x35\x34\x2e\x34\x20\
+\x2d\x36\x2e\x34\x20\x2d\x35\x33\x2e\x36\x20\x2d\x35\x43\x2d\x35\
+\x33\x2e\x36\x20\x2d\x35\x20\x2d\x35\x34\x2e\x32\x20\x2d\x35\x2e\
+\x36\x20\x2d\x35\x33\x2e\x36\x20\x2d\x39\x2e\x32\x43\x2d\x35\x33\
+\x2e\x36\x20\x2d\x39\x2e\x32\x20\x2d\x35\x32\x2e\x38\x20\x2d\x31\
+\x34\x2e\x34\x20\x2d\x35\x31\x2e\x34\x20\x2d\x31\x37\x2e\x36\x43\
+\x2d\x35\x30\x20\x2d\x32\x30\x2e\x38\x20\x2d\x34\x38\x20\x2d\x32\
+\x34\x2e\x36\x20\x2d\x34\x37\x2e\x36\x20\x2d\x32\x35\x2e\x34\x43\
+\x2d\x34\x37\x2e\x32\x20\x2d\x32\x36\x2e\x32\x20\x2d\x34\x37\x2e\
+\x32\x20\x2d\x33\x32\x20\x2d\x34\x35\x2e\x38\x20\x2d\x32\x39\x2e\
+\x34\x4c\x2d\x34\x32\x2e\x34\x20\x2d\x32\x36\x2e\x38\x43\x2d\x34\
+\x32\x2e\x34\x20\x2d\x32\x36\x2e\x38\x20\x2d\x34\x35\x2e\x32\x20\
+\x2d\x32\x39\x2e\x34\x20\x2d\x34\x33\x20\x2d\x33\x31\x2e\x36\x43\
+\x2d\x34\x33\x20\x2d\x33\x31\x2e\x36\x20\x2d\x34\x34\x20\x2d\x33\
+\x37\x2e\x32\x20\x2d\x34\x32\x2e\x32\x20\x2d\x33\x39\x2e\x38\x43\
+\x2d\x34\x32\x2e\x32\x20\x2d\x33\x39\x2e\x38\x20\x2d\x33\x35\x2e\
+\x32\x20\x2d\x34\x38\x2e\x32\x20\x2d\x33\x33\x2e\x36\x20\x2d\x34\
+\x39\x2e\x32\x43\x2d\x33\x32\x20\x2d\x35\x30\x2e\x32\x20\x2d\x33\
+\x33\x2e\x34\x20\x2d\x34\x39\x2e\x38\x20\x2d\x33\x33\x2e\x34\x20\
+\x2d\x34\x39\x2e\x38\x43\x2d\x33\x33\x2e\x34\x20\x2d\x34\x39\x2e\
+\x38\x20\x2d\x32\x37\x2e\x34\x20\x2d\x35\x34\x20\x2d\x33\x33\x2e\
+\x32\x20\x2d\x35\x32\x2e\x34\x43\x2d\x33\x33\x2e\x32\x20\x2d\x35\
+\x32\x2e\x34\x20\x2d\x33\x37\x2e\x32\x20\x2d\x35\x30\x2e\x38\x20\
+\x2d\x34\x30\x2e\x32\x20\x2d\x35\x30\x2e\x38\x43\x2d\x34\x30\x2e\
+\x32\x20\x2d\x35\x30\x2e\x38\x20\x2d\x34\x37\x2e\x38\x20\x2d\x34\
+\x38\x2e\x38\x20\x2d\x34\x33\x2e\x38\x20\x2d\x35\x33\x43\x2d\x33\
+\x39\x2e\x38\x20\x2d\x35\x37\x2e\x32\x20\x2d\x32\x39\x2e\x38\x20\
+\x2d\x36\x32\x2e\x36\x20\x2d\x32\x36\x20\x2d\x36\x32\x2e\x34\x4c\
+\x2d\x32\x35\x2e\x32\x20\x2d\x36\x30\x2e\x38\x4c\x2d\x31\x34\x20\
+\x2d\x36\x33\x2e\x32\x4c\x2d\x31\x35\x2e\x32\x20\x2d\x36\x32\x2e\
+\x34\x43\x2d\x31\x35\x2e\x32\x20\x2d\x36\x32\x2e\x34\x20\x2d\x31\
+\x35\x2e\x34\x20\x2d\x36\x32\x2e\x36\x20\x2d\x31\x31\x2e\x32\x20\
+\x2d\x36\x33\x43\x2d\x37\x20\x2d\x36\x33\x2e\x34\x20\x2d\x31\x2e\
+\x32\x20\x2d\x36\x32\x20\x30\x2e\x32\x20\x2d\x36\x33\x2e\x38\x43\
+\x31\x2e\x36\x20\x2d\x36\x35\x2e\x36\x20\x35\x20\x2d\x36\x36\x2e\
+\x36\x20\x34\x2e\x36\x20\x2d\x36\x35\x2e\x32\x43\x34\x2e\x32\x20\
+\x2d\x36\x33\x2e\x38\x20\x34\x20\x2d\x36\x31\x2e\x38\x20\x34\x20\
+\x2d\x36\x31\x2e\x38\x43\x34\x20\x2d\x36\x31\x2e\x38\x20\x39\x20\
+\x2d\x36\x37\x2e\x36\x20\x38\x2e\x34\x20\x2d\x36\x35\x2e\x34\x43\
+\x37\x2e\x38\x20\x2d\x36\x33\x2e\x32\x20\x2d\x30\x2e\x34\x20\x2d\
+\x35\x38\x20\x2d\x31\x2e\x38\x20\x2d\x35\x31\x2e\x38\x4c\x38\x2e\
+\x36\x20\x2d\x36\x30\x4c\x31\x32\x2e\x32\x20\x2d\x36\x33\x43\x31\
+\x32\x2e\x32\x20\x2d\x36\x33\x20\x31\x35\x2e\x38\x20\x2d\x36\x30\
+\x2e\x38\x20\x31\x36\x20\x2d\x36\x32\x2e\x34\x43\x31\x36\x2e\x32\
+\x20\x2d\x36\x34\x20\x32\x30\x2e\x38\x20\x2d\x36\x39\x2e\x38\x20\
+\x32\x32\x20\x2d\x36\x39\x2e\x36\x43\x32\x33\x2e\x32\x20\x2d\x36\
+\x39\x2e\x34\x20\x32\x35\x2e\x32\x20\x2d\x37\x32\x2e\x32\x20\x32\
+\x35\x20\x2d\x36\x39\x2e\x36\x43\x32\x34\x2e\x38\x20\x2d\x36\x37\
+\x20\x33\x32\x2e\x34\x20\x2d\x36\x31\x2e\x36\x20\x33\x32\x2e\x34\
+\x20\x2d\x36\x31\x2e\x36\x43\x33\x32\x2e\x34\x20\x2d\x36\x31\x2e\
+\x36\x20\x33\x35\x2e\x36\x20\x2d\x36\x33\x2e\x34\x20\x33\x37\x20\
+\x2d\x36\x32\x43\x33\x38\x2e\x34\x20\x2d\x36\x30\x2e\x36\x20\x34\
+\x32\x2e\x36\x20\x2d\x38\x31\x2e\x38\x20\x34\x32\x2e\x36\x20\x2d\
+\x38\x31\x2e\x38\x4c\x36\x37\x2e\x36\x20\x2d\x39\x32\x2e\x34\x4c\
+\x31\x31\x31\x2e\x32\x30\x31\x20\x2d\x39\x35\x2e\x38\x4c\x39\x34\
+\x2e\x32\x30\x31\x20\x2d\x31\x30\x32\x2e\x36\x4c\x33\x33\x2e\x32\
+\x20\x2d\x31\x31\x34\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x73\
+\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x34\x63\x30\x30\x30\x30\x22\
+\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x32\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x35\x31\x2e\x34\x20\x38\x35\x43\
+\x35\x31\x2e\x34\x20\x38\x35\x20\x33\x36\x2e\x34\x20\x36\x38\x2e\
+\x32\x20\x32\x38\x20\x36\x35\x2e\x36\x43\x32\x38\x20\x36\x35\x2e\
+\x36\x20\x31\x34\x2e\x36\x20\x35\x38\x2e\x38\x20\x2d\x31\x30\x20\
+\x36\x36\x2e\x36\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x73\x74\x72\
+\x6f\x6b\x65\x22\x3a\x22\x23\x34\x63\x30\x30\x30\x30\x22\x2c\x20\
+\x22\x77\x69\x64\x74\x68\x22\x3a\x32\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x32\x34\x2e\x38\x20\x36\x34\x2e\x32\x43\
+\x32\x34\x2e\x38\x20\x36\x34\x2e\x32\x20\x2d\x30\x2e\x34\x20\x35\
+\x36\x2e\x32\x20\x2d\x31\x35\x2e\x38\x20\x36\x30\x2e\x34\x43\x2d\
+\x31\x35\x2e\x38\x20\x36\x30\x2e\x34\x20\x2d\x33\x34\x2e\x32\x20\
+\x36\x32\x2e\x34\x20\x2d\x34\x32\x2e\x36\x20\x37\x36\x2e\x32\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\
+\x22\x23\x34\x63\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\
+\x68\x22\x3a\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x32\x31\x2e\x32\x20\x36\x33\x43\x32\x31\x2e\x32\x20\x36\x33\
+\x20\x34\x2e\x32\x20\x35\x35\x2e\x38\x20\x2d\x31\x30\x2e\x36\x20\
+\x35\x33\x2e\x36\x43\x2d\x31\x30\x2e\x36\x20\x35\x33\x2e\x36\x20\
+\x2d\x32\x37\x2e\x32\x20\x35\x31\x20\x2d\x34\x33\x2e\x38\x20\x35\
+\x38\x2e\x32\x43\x2d\x34\x33\x2e\x38\x20\x35\x38\x2e\x32\x20\x2d\
+\x35\x36\x20\x36\x34\x2e\x32\x20\x2d\x36\x31\x2e\x34\x20\x37\x34\
+\x2e\x34\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x73\x74\x72\x6f\x6b\
+\x65\x22\x3a\x22\x23\x34\x63\x30\x30\x30\x30\x22\x2c\x20\x22\x77\
+\x69\x64\x74\x68\x22\x3a\x32\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x32\x32\x2e\x32\x20\x36\x33\x2e\x34\x43\x32\x32\
+\x2e\x32\x20\x36\x33\x2e\x34\x20\x36\x2e\x38\x20\x35\x32\x2e\x34\
+\x20\x35\x2e\x38\x20\x35\x31\x43\x35\x2e\x38\x20\x35\x31\x20\x2d\
+\x31\x2e\x32\x20\x34\x30\x20\x2d\x31\x34\x2e\x32\x20\x33\x39\x2e\
+\x36\x43\x2d\x31\x34\x2e\x32\x20\x33\x39\x2e\x36\x20\x2d\x33\x35\
+\x2e\x36\x20\x34\x30\x2e\x34\x20\x2d\x35\x32\x2e\x38\x20\x34\x38\
+\x2e\x34\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x32\x30\x2e\x38\x39\x35\x20\x35\
+\x34\x2e\x34\x30\x37\x43\x32\x32\x2e\x34\x33\x37\x20\x35\x35\x2e\
+\x38\x37\x20\x34\x39\x2e\x34\x20\x38\x34\x2e\x38\x20\x34\x39\x2e\
+\x34\x20\x38\x34\x2e\x38\x43\x38\x34\x2e\x36\x20\x31\x32\x31\x2e\
+\x34\x30\x31\x20\x35\x36\x2e\x36\x20\x38\x37\x2e\x32\x20\x35\x36\
+\x2e\x36\x20\x38\x37\x2e\x32\x43\x34\x39\x20\x38\x32\x2e\x34\x20\
+\x33\x39\x2e\x38\x20\x36\x33\x2e\x36\x20\x33\x39\x2e\x38\x20\x36\
+\x33\x2e\x36\x43\x33\x38\x2e\x36\x20\x36\x30\x2e\x38\x20\x35\x33\
+\x2e\x38\x20\x37\x30\x2e\x38\x20\x35\x33\x2e\x38\x20\x37\x30\x2e\
+\x38\x43\x35\x37\x2e\x38\x20\x37\x31\x2e\x36\x20\x37\x31\x2e\x34\
+\x20\x39\x30\x2e\x38\x20\x37\x31\x2e\x34\x20\x39\x30\x2e\x38\x43\
+\x36\x34\x2e\x36\x20\x38\x38\x2e\x34\x20\x36\x39\x2e\x34\x20\x39\
+\x35\x2e\x36\x20\x36\x39\x2e\x34\x20\x39\x35\x2e\x36\x43\x37\x32\
+\x2e\x32\x20\x39\x37\x2e\x36\x20\x39\x32\x2e\x36\x30\x31\x20\x31\
+\x31\x33\x2e\x32\x30\x31\x20\x39\x32\x2e\x36\x30\x31\x20\x31\x31\
+\x33\x2e\x32\x30\x31\x43\x39\x36\x2e\x32\x30\x31\x20\x31\x31\x37\
+\x2e\x32\x30\x31\x20\x31\x30\x30\x2e\x32\x30\x31\x20\x31\x31\x38\
+\x2e\x38\x30\x31\x20\x31\x30\x30\x2e\x32\x30\x31\x20\x31\x31\x38\
+\x2e\x38\x30\x31\x43\x31\x31\x34\x2e\x32\x30\x31\x20\x31\x31\x33\
+\x2e\x36\x30\x31\x20\x31\x30\x37\x2e\x38\x30\x31\x20\x31\x32\x36\
+\x2e\x38\x30\x31\x20\x31\x30\x37\x2e\x38\x30\x31\x20\x31\x32\x36\
+\x2e\x38\x30\x31\x43\x31\x31\x30\x2e\x32\x30\x31\x20\x31\x33\x33\
+\x2e\x36\x30\x31\x20\x31\x31\x35\x2e\x38\x30\x31\x20\x31\x32\x32\
+\x2e\x30\x30\x31\x20\x31\x31\x35\x2e\x38\x30\x31\x20\x31\x32\x32\
+\x2e\x30\x30\x31\x43\x31\x32\x37\x2e\x30\x30\x31\x20\x31\x30\x35\
+\x2e\x32\x20\x31\x31\x30\x2e\x36\x30\x31\x20\x31\x30\x37\x2e\x36\
+\x30\x31\x20\x31\x31\x30\x2e\x36\x30\x31\x20\x31\x30\x37\x2e\x36\
+\x30\x31\x43\x38\x30\x2e\x36\x20\x31\x31\x30\x2e\x34\x30\x31\x20\
+\x37\x33\x2e\x38\x20\x39\x34\x2e\x34\x20\x37\x33\x2e\x38\x20\x39\
+\x34\x2e\x34\x43\x37\x31\x2e\x34\x20\x39\x32\x20\x38\x30\x2e\x32\
+\x20\x39\x34\x2e\x34\x20\x38\x30\x2e\x32\x20\x39\x34\x2e\x34\x43\
+\x38\x38\x2e\x36\x30\x31\x20\x39\x36\x2e\x34\x20\x37\x33\x20\x38\
+\x32\x20\x37\x33\x20\x38\x32\x43\x37\x35\x2e\x34\x20\x38\x32\x20\
+\x38\x34\x2e\x36\x20\x38\x38\x2e\x38\x20\x38\x34\x2e\x36\x20\x38\
+\x38\x2e\x38\x43\x39\x35\x2e\x30\x30\x31\x20\x39\x38\x20\x39\x37\
+\x2e\x30\x30\x31\x20\x39\x36\x20\x39\x37\x2e\x30\x30\x31\x20\x39\
+\x36\x43\x31\x31\x35\x2e\x30\x30\x31\x20\x38\x37\x2e\x32\x20\x31\
+\x32\x35\x2e\x34\x30\x31\x20\x39\x34\x2e\x38\x20\x31\x32\x35\x2e\
+\x34\x30\x31\x20\x39\x34\x2e\x38\x43\x31\x32\x37\x2e\x34\x30\x31\
+\x20\x39\x36\x2e\x34\x20\x31\x32\x31\x2e\x38\x30\x31\x20\x31\x30\
+\x33\x2e\x32\x20\x31\x32\x33\x2e\x34\x30\x31\x20\x31\x30\x38\x2e\
+\x34\x30\x31\x43\x31\x32\x35\x2e\x30\x30\x31\x20\x31\x31\x33\x2e\
+\x36\x30\x31\x20\x31\x32\x39\x2e\x38\x30\x31\x20\x31\x32\x36\x2e\
+\x30\x30\x31\x20\x31\x32\x39\x2e\x38\x30\x31\x20\x31\x32\x36\x2e\
+\x30\x30\x31\x43\x31\x32\x37\x2e\x34\x30\x31\x20\x31\x32\x37\x2e\
+\x36\x30\x31\x20\x31\x32\x37\x2e\x38\x30\x31\x20\x31\x33\x38\x2e\
+\x34\x30\x31\x20\x31\x32\x37\x2e\x38\x30\x31\x20\x31\x33\x38\x2e\
+\x34\x30\x31\x43\x31\x34\x34\x2e\x36\x30\x31\x20\x31\x36\x31\x2e\
+\x36\x30\x31\x20\x31\x33\x35\x2e\x30\x30\x31\x20\x31\x35\x39\x2e\
+\x36\x30\x31\x20\x31\x33\x35\x2e\x30\x30\x31\x20\x31\x35\x39\x2e\
+\x36\x30\x31\x43\x31\x31\x39\x2e\x34\x30\x31\x20\x31\x35\x39\x2e\
+\x32\x30\x31\x20\x31\x33\x34\x2e\x32\x30\x31\x20\x31\x36\x36\x2e\
+\x38\x30\x31\x20\x31\x33\x34\x2e\x32\x30\x31\x20\x31\x36\x36\x2e\
+\x38\x30\x31\x43\x31\x33\x37\x2e\x34\x30\x31\x20\x31\x36\x38\x2e\
+\x38\x30\x31\x20\x31\x34\x36\x2e\x32\x30\x31\x20\x31\x37\x36\x2e\
+\x30\x30\x31\x20\x31\x34\x36\x2e\x32\x30\x31\x20\x31\x37\x36\x2e\
+\x30\x30\x31\x43\x31\x34\x33\x2e\x34\x30\x31\x20\x31\x37\x34\x2e\
+\x38\x30\x31\x20\x31\x34\x31\x2e\x38\x30\x31\x20\x31\x38\x30\x2e\
+\x30\x30\x31\x20\x31\x34\x31\x2e\x38\x30\x31\x20\x31\x38\x30\x2e\
+\x30\x30\x31\x43\x31\x34\x36\x2e\x36\x30\x31\x20\x31\x38\x34\x2e\
+\x30\x30\x31\x20\x31\x34\x33\x2e\x38\x30\x31\x20\x31\x38\x38\x2e\
+\x38\x30\x31\x20\x31\x34\x33\x2e\x38\x30\x31\x20\x31\x38\x38\x2e\
+\x38\x30\x31\x43\x31\x33\x37\x2e\x38\x30\x31\x20\x31\x39\x30\x2e\
+\x30\x30\x31\x20\x31\x33\x36\x2e\x36\x30\x31\x20\x31\x39\x34\x2e\
+\x30\x30\x31\x20\x31\x33\x36\x2e\x36\x30\x31\x20\x31\x39\x34\x2e\
+\x30\x30\x31\x43\x31\x34\x33\x2e\x34\x30\x31\x20\x32\x30\x32\x2e\
+\x30\x30\x31\x20\x31\x33\x33\x2e\x34\x30\x31\x20\x32\x30\x32\x2e\
+\x34\x30\x31\x20\x31\x33\x33\x2e\x34\x30\x31\x20\x32\x30\x32\x2e\
+\x34\x30\x31\x43\x31\x33\x37\x2e\x30\x30\x31\x20\x32\x30\x36\x2e\
+\x38\x30\x31\x20\x31\x33\x32\x2e\x32\x30\x31\x20\x32\x31\x38\x2e\
+\x38\x30\x31\x20\x31\x33\x32\x2e\x32\x30\x31\x20\x32\x31\x38\x2e\
+\x38\x30\x31\x43\x31\x32\x37\x2e\x34\x30\x31\x20\x32\x31\x38\x2e\
+\x38\x30\x31\x20\x31\x32\x31\x2e\x30\x30\x31\x20\x32\x32\x34\x2e\
+\x34\x30\x31\x20\x31\x32\x31\x2e\x30\x30\x31\x20\x32\x32\x34\x2e\
+\x34\x30\x31\x43\x31\x32\x33\x2e\x34\x30\x31\x20\x32\x32\x39\x2e\
+\x32\x30\x31\x20\x31\x31\x33\x2e\x30\x30\x31\x20\x32\x33\x34\x2e\
+\x38\x30\x31\x20\x31\x31\x33\x2e\x30\x30\x31\x20\x32\x33\x34\x2e\
+\x38\x30\x31\x43\x31\x30\x34\x2e\x36\x30\x31\x20\x32\x33\x36\x2e\
+\x34\x30\x31\x20\x31\x30\x37\x2e\x34\x30\x31\x20\x32\x34\x33\x2e\
+\x32\x30\x31\x20\x31\x30\x37\x2e\x34\x30\x31\x20\x32\x34\x33\x2e\
+\x32\x30\x31\x43\x39\x39\x2e\x34\x30\x31\x20\x32\x34\x39\x2e\x32\
+\x30\x31\x20\x39\x37\x2e\x30\x30\x31\x20\x32\x36\x35\x2e\x32\x30\
+\x31\x20\x39\x37\x2e\x30\x30\x31\x20\x32\x36\x35\x2e\x32\x30\x31\
+\x43\x39\x36\x2e\x32\x30\x31\x20\x32\x37\x35\x2e\x36\x30\x31\x20\
+\x39\x33\x2e\x38\x30\x31\x20\x32\x37\x38\x2e\x38\x30\x31\x20\x39\
+\x39\x2e\x30\x30\x31\x20\x32\x37\x36\x2e\x38\x30\x31\x43\x31\x30\
+\x34\x2e\x32\x30\x31\x20\x32\x37\x34\x2e\x38\x30\x31\x20\x31\x30\
+\x33\x2e\x34\x30\x31\x20\x32\x36\x32\x2e\x34\x30\x31\x20\x31\x30\
+\x33\x2e\x34\x30\x31\x20\x32\x36\x32\x2e\x34\x30\x31\x43\x39\x38\
+\x2e\x36\x30\x31\x20\x32\x34\x36\x2e\x38\x30\x31\x20\x31\x34\x31\
+\x2e\x34\x30\x31\x20\x32\x33\x30\x2e\x38\x30\x31\x20\x31\x34\x31\
+\x2e\x34\x30\x31\x20\x32\x33\x30\x2e\x38\x30\x31\x43\x31\x34\x35\
+\x2e\x34\x30\x31\x20\x32\x32\x39\x2e\x32\x30\x31\x20\x31\x34\x36\
+\x2e\x32\x30\x31\x20\x32\x32\x34\x2e\x30\x30\x31\x20\x31\x34\x36\
+\x2e\x32\x30\x31\x20\x32\x32\x34\x2e\x30\x30\x31\x43\x31\x34\x38\
+\x2e\x32\x30\x31\x20\x32\x32\x34\x2e\x34\x30\x31\x20\x31\x35\x37\
+\x2e\x30\x30\x31\x20\x32\x33\x32\x2e\x30\x30\x31\x20\x31\x35\x37\
+\x2e\x30\x30\x31\x20\x32\x33\x32\x2e\x30\x30\x31\x43\x31\x36\x34\
+\x2e\x36\x30\x31\x20\x32\x34\x33\x2e\x32\x30\x31\x20\x31\x36\x35\
+\x2e\x30\x30\x31\x20\x32\x33\x34\x2e\x30\x30\x31\x20\x31\x36\x35\
+\x2e\x30\x30\x31\x20\x32\x33\x34\x2e\x30\x30\x31\x43\x31\x36\x36\
+\x2e\x32\x30\x31\x20\x32\x33\x30\x2e\x34\x30\x31\x20\x31\x36\x34\
+\x2e\x36\x30\x31\x20\x32\x32\x34\x2e\x34\x30\x31\x20\x31\x36\x34\
+\x2e\x36\x30\x31\x20\x32\x32\x34\x2e\x34\x30\x31\x43\x31\x37\x30\
+\x2e\x36\x30\x31\x20\x32\x30\x32\x2e\x38\x30\x31\x20\x31\x35\x36\
+\x2e\x36\x30\x31\x20\x31\x39\x36\x2e\x34\x30\x31\x20\x31\x35\x36\
+\x2e\x36\x30\x31\x20\x31\x39\x36\x2e\x34\x30\x31\x43\x31\x34\x36\
+\x2e\x36\x30\x31\x20\x31\x36\x32\x2e\x38\x30\x31\x20\x31\x36\x30\
+\x2e\x36\x30\x31\x20\x31\x37\x31\x2e\x32\x30\x31\x20\x31\x36\x30\
+\x2e\x36\x30\x31\x20\x31\x37\x31\x2e\x32\x30\x31\x43\x31\x36\x33\
+\x2e\x34\x30\x31\x20\x31\x37\x36\x2e\x38\x30\x31\x20\x31\x37\x34\
+\x2e\x32\x30\x31\x20\x31\x38\x32\x2e\x30\x30\x31\x20\x31\x37\x34\
+\x2e\x32\x30\x31\x20\x31\x38\x32\x2e\x30\x30\x31\x4c\x31\x37\x37\
+\x2e\x38\x30\x31\x20\x31\x37\x39\x2e\x36\x30\x31\x43\x31\x37\x36\
+\x2e\x32\x30\x31\x20\x31\x37\x34\x2e\x38\x30\x31\x20\x31\x38\x34\
+\x2e\x36\x30\x31\x20\x31\x36\x38\x2e\x38\x30\x31\x20\x31\x38\x34\
+\x2e\x36\x30\x31\x20\x31\x36\x38\x2e\x38\x30\x31\x43\x31\x38\x37\
+\x2e\x34\x30\x31\x20\x31\x37\x35\x2e\x32\x30\x31\x20\x31\x39\x33\
+\x2e\x34\x30\x31\x20\x31\x36\x37\x2e\x32\x30\x31\x20\x31\x39\x33\
+\x2e\x34\x30\x31\x20\x31\x36\x37\x2e\x32\x30\x31\x43\x31\x39\x37\
+\x2e\x30\x30\x31\x20\x31\x34\x32\x2e\x38\x30\x31\x20\x32\x30\x39\
+\x2e\x34\x30\x31\x20\x31\x35\x37\x2e\x32\x30\x31\x20\x32\x30\x39\
+\x2e\x34\x30\x31\x20\x31\x35\x37\x2e\x32\x30\x31\x43\x32\x31\x33\
+\x2e\x34\x30\x31\x20\x31\x35\x38\x2e\x34\x30\x31\x20\x32\x31\x34\
+\x2e\x36\x30\x31\x20\x31\x35\x31\x2e\x36\x30\x31\x20\x32\x31\x34\
+\x2e\x36\x30\x31\x20\x31\x35\x31\x2e\x36\x30\x31\x43\x32\x31\x38\
+\x2e\x32\x30\x31\x20\x31\x34\x31\x2e\x32\x30\x31\x20\x32\x31\x34\
+\x2e\x36\x30\x31\x20\x31\x32\x37\x2e\x36\x30\x31\x20\x32\x31\x34\
+\x2e\x36\x30\x31\x20\x31\x32\x37\x2e\x36\x30\x31\x43\x32\x31\x38\
+\x2e\x32\x30\x31\x20\x31\x32\x37\x2e\x32\x30\x31\x20\x32\x32\x37\
+\x2e\x38\x30\x31\x20\x31\x33\x33\x2e\x32\x30\x31\x20\x32\x32\x37\
+\x2e\x38\x30\x31\x20\x31\x33\x33\x2e\x32\x30\x31\x43\x32\x33\x30\
+\x2e\x36\x30\x31\x20\x31\x32\x39\x2e\x36\x30\x31\x20\x32\x32\x31\
+\x2e\x34\x30\x31\x20\x31\x31\x32\x2e\x38\x30\x31\x20\x32\x32\x35\
+\x2e\x34\x30\x31\x20\x31\x31\x35\x2e\x32\x30\x31\x43\x32\x32\x39\
+\x2e\x34\x30\x31\x20\x31\x31\x37\x2e\x36\x30\x31\x20\x32\x33\x33\
+\x2e\x38\x30\x31\x20\x31\x31\x39\x2e\x32\x30\x31\x20\x32\x33\x33\
+\x2e\x38\x30\x31\x20\x31\x31\x39\x2e\x32\x30\x31\x43\x32\x33\x34\
+\x2e\x36\x30\x31\x20\x31\x31\x37\x2e\x32\x30\x31\x20\x32\x32\x34\
+\x2e\x36\x30\x31\x20\x31\x30\x34\x2e\x38\x30\x31\x20\x32\x32\x34\
+\x2e\x36\x30\x31\x20\x31\x30\x34\x2e\x38\x30\x31\x43\x32\x32\x30\
+\x2e\x32\x30\x31\x20\x31\x30\x32\x20\x32\x31\x35\x2e\x30\x30\x31\
+\x20\x38\x31\x2e\x36\x20\x32\x31\x35\x2e\x30\x30\x31\x20\x38\x31\
+\x2e\x36\x43\x32\x32\x32\x2e\x32\x30\x31\x20\x38\x35\x2e\x32\x20\
+\x32\x31\x32\x2e\x32\x30\x31\x20\x37\x30\x20\x32\x31\x32\x2e\x32\
+\x30\x31\x20\x37\x30\x43\x32\x31\x32\x2e\x32\x30\x31\x20\x36\x36\
+\x2e\x38\x20\x32\x31\x38\x2e\x32\x30\x31\x20\x35\x35\x2e\x36\x20\
+\x32\x31\x38\x2e\x32\x30\x31\x20\x35\x35\x2e\x36\x43\x32\x31\x37\
+\x2e\x34\x30\x31\x20\x34\x38\x2e\x38\x20\x32\x31\x38\x2e\x32\x30\
+\x31\x20\x34\x39\x2e\x32\x20\x32\x31\x38\x2e\x32\x30\x31\x20\x34\
+\x39\x2e\x32\x43\x32\x32\x31\x2e\x30\x30\x31\x20\x35\x30\x2e\x34\
+\x20\x32\x32\x39\x2e\x30\x30\x31\x20\x35\x32\x20\x32\x32\x32\x2e\
+\x32\x30\x31\x20\x34\x35\x2e\x36\x43\x32\x31\x35\x2e\x34\x30\x31\
+\x20\x33\x39\x2e\x32\x20\x32\x32\x33\x2e\x30\x30\x31\x20\x33\x34\
+\x2e\x34\x20\x32\x32\x33\x2e\x30\x30\x31\x20\x33\x34\x2e\x34\x43\
+\x32\x32\x37\x2e\x34\x30\x31\x20\x33\x31\x2e\x36\x20\x32\x31\x33\
+\x2e\x38\x30\x31\x20\x33\x32\x20\x32\x31\x33\x2e\x38\x30\x31\x20\
+\x33\x32\x43\x32\x30\x38\x2e\x36\x30\x31\x20\x32\x37\x2e\x36\x20\
+\x32\x30\x39\x2e\x30\x30\x31\x20\x32\x33\x2e\x36\x20\x32\x30\x39\
+\x2e\x30\x30\x31\x20\x32\x33\x2e\x36\x43\x32\x31\x37\x2e\x30\x30\
+\x31\x20\x32\x35\x2e\x36\x20\x32\x30\x32\x2e\x36\x30\x31\x20\x31\
+\x31\x2e\x32\x20\x32\x30\x30\x2e\x32\x30\x31\x20\x37\x2e\x36\x43\
+\x31\x39\x37\x2e\x38\x30\x31\x20\x34\x20\x32\x30\x37\x2e\x34\x30\
+\x31\x20\x2d\x31\x2e\x32\x20\x32\x30\x37\x2e\x34\x30\x31\x20\x2d\
+\x31\x2e\x32\x43\x32\x32\x30\x2e\x36\x30\x31\x20\x2d\x34\x2e\x38\
+\x20\x32\x30\x39\x2e\x30\x30\x31\x20\x2d\x38\x20\x32\x30\x39\x2e\
+\x30\x30\x31\x20\x2d\x38\x43\x31\x38\x39\x2e\x34\x30\x31\x20\x2d\
+\x37\x2e\x36\x20\x32\x30\x30\x2e\x32\x30\x31\x20\x2d\x31\x38\x2e\
+\x34\x20\x32\x30\x30\x2e\x32\x30\x31\x20\x2d\x31\x38\x2e\x34\x43\
+\x32\x30\x36\x2e\x32\x30\x31\x20\x2d\x31\x38\x20\x32\x30\x34\x2e\
+\x36\x30\x31\x20\x2d\x32\x30\x2e\x34\x20\x32\x30\x34\x2e\x36\x30\
+\x31\x20\x2d\x32\x30\x2e\x34\x43\x31\x39\x39\x2e\x34\x30\x31\x20\
+\x2d\x32\x31\x2e\x36\x20\x31\x38\x39\x2e\x38\x30\x31\x20\x2d\x32\
+\x38\x20\x31\x38\x39\x2e\x38\x30\x31\x20\x2d\x32\x38\x43\x31\x38\
+\x35\x2e\x38\x30\x31\x20\x2d\x33\x31\x2e\x36\x20\x31\x38\x39\x2e\
+\x34\x30\x31\x20\x2d\x33\x30\x2e\x38\x20\x31\x38\x39\x2e\x34\x30\
+\x31\x20\x2d\x33\x30\x2e\x38\x43\x32\x30\x36\x2e\x32\x30\x31\x20\
+\x2d\x32\x39\x2e\x36\x20\x31\x37\x37\x2e\x34\x30\x31\x20\x2d\x34\
+\x30\x2e\x38\x20\x31\x37\x37\x2e\x34\x30\x31\x20\x2d\x34\x30\x2e\
+\x38\x43\x31\x38\x35\x2e\x34\x30\x31\x20\x2d\x34\x30\x2e\x38\x20\
+\x31\x36\x37\x2e\x34\x30\x31\x20\x2d\x35\x31\x2e\x32\x20\x31\x36\
+\x37\x2e\x34\x30\x31\x20\x2d\x35\x31\x2e\x32\x43\x31\x36\x35\x2e\
+\x34\x30\x31\x20\x2d\x35\x32\x2e\x38\x20\x31\x36\x32\x2e\x32\x30\
+\x31\x20\x2d\x36\x30\x2e\x34\x20\x31\x36\x32\x2e\x32\x30\x31\x20\
+\x2d\x36\x30\x2e\x34\x43\x31\x35\x36\x2e\x32\x30\x31\x20\x2d\x36\
+\x35\x2e\x36\x20\x31\x35\x31\x2e\x34\x30\x31\x20\x2d\x37\x32\x2e\
+\x34\x20\x31\x35\x31\x2e\x34\x30\x31\x20\x2d\x37\x32\x2e\x34\x43\
+\x31\x35\x31\x2e\x30\x30\x31\x20\x2d\x37\x36\x2e\x38\x20\x31\x34\
+\x36\x2e\x32\x30\x31\x20\x2d\x38\x31\x2e\x36\x20\x31\x34\x36\x2e\
+\x32\x30\x31\x20\x2d\x38\x31\x2e\x36\x43\x31\x33\x34\x2e\x36\x30\
+\x31\x20\x2d\x39\x35\x2e\x32\x20\x31\x32\x39\x2e\x30\x30\x31\x20\
+\x2d\x39\x34\x2e\x38\x20\x31\x32\x39\x2e\x30\x30\x31\x20\x2d\x39\
+\x34\x2e\x38\x43\x31\x31\x34\x2e\x32\x30\x31\x20\x2d\x39\x38\x2e\
+\x34\x20\x31\x30\x39\x2e\x30\x30\x31\x20\x2d\x39\x37\x2e\x36\x20\
+\x31\x30\x39\x2e\x30\x30\x31\x20\x2d\x39\x37\x2e\x36\x4c\x35\x36\
+\x2e\x32\x20\x2d\x39\x33\x2e\x32\x43\x32\x39\x2e\x38\x20\x2d\x38\
+\x30\x2e\x34\x20\x33\x37\x2e\x36\x20\x2d\x35\x39\x2e\x34\x20\x33\
+\x37\x2e\x36\x20\x2d\x35\x39\x2e\x34\x43\x34\x34\x20\x2d\x35\x31\
+\x20\x35\x33\x2e\x32\x20\x2d\x35\x34\x2e\x38\x20\x35\x33\x2e\x32\
+\x20\x2d\x35\x34\x2e\x38\x43\x35\x37\x2e\x38\x20\x2d\x36\x31\x20\
+\x36\x39\x2e\x34\x20\x2d\x35\x38\x2e\x38\x20\x36\x39\x2e\x34\x20\
+\x2d\x35\x38\x2e\x38\x43\x38\x39\x2e\x38\x30\x31\x20\x2d\x35\x35\
+\x2e\x36\x20\x38\x37\x2e\x32\x30\x31\x20\x2d\x35\x39\x2e\x32\x20\
+\x38\x37\x2e\x32\x30\x31\x20\x2d\x35\x39\x2e\x32\x43\x38\x34\x2e\
+\x38\x30\x31\x20\x2d\x36\x33\x2e\x38\x20\x36\x38\x2e\x36\x20\x2d\
+\x37\x30\x20\x36\x38\x2e\x34\x20\x2d\x37\x30\x2e\x36\x43\x36\x38\
+\x2e\x32\x20\x2d\x37\x31\x2e\x32\x20\x35\x39\x2e\x34\x20\x2d\x37\
+\x34\x2e\x36\x20\x35\x39\x2e\x34\x20\x2d\x37\x34\x2e\x36\x43\x35\
+\x36\x2e\x34\x20\x2d\x37\x35\x2e\x38\x20\x35\x32\x20\x2d\x38\x35\
+\x20\x35\x32\x20\x2d\x38\x35\x43\x34\x38\x2e\x38\x20\x2d\x38\x38\
+\x2e\x34\x20\x36\x34\x2e\x36\x20\x2d\x38\x32\x2e\x36\x20\x36\x34\
+\x2e\x36\x20\x2d\x38\x32\x2e\x36\x43\x36\x33\x2e\x34\x20\x2d\x38\
+\x31\x2e\x36\x20\x37\x30\x2e\x38\x20\x2d\x37\x37\x2e\x36\x20\x37\
+\x30\x2e\x38\x20\x2d\x37\x37\x2e\x36\x43\x38\x38\x2e\x32\x30\x31\
+\x20\x2d\x37\x38\x2e\x36\x20\x39\x38\x2e\x38\x30\x31\x20\x2d\x36\
+\x37\x2e\x38\x20\x39\x38\x2e\x38\x30\x31\x20\x2d\x36\x37\x2e\x38\
+\x43\x31\x30\x39\x2e\x36\x30\x31\x20\x2d\x35\x31\x2e\x32\x20\x31\
+\x30\x39\x2e\x38\x30\x31\x20\x2d\x35\x39\x2e\x34\x20\x31\x30\x39\
+\x2e\x38\x30\x31\x20\x2d\x35\x39\x2e\x34\x43\x31\x31\x32\x2e\x36\
+\x30\x31\x20\x2d\x36\x38\x2e\x38\x20\x31\x30\x30\x2e\x38\x30\x31\
+\x20\x2d\x39\x30\x20\x31\x30\x30\x2e\x38\x30\x31\x20\x2d\x39\x30\
+\x43\x31\x30\x31\x2e\x32\x30\x31\x20\x2d\x39\x32\x20\x31\x30\x39\
+\x2e\x34\x30\x31\x20\x2d\x38\x35\x2e\x34\x20\x31\x30\x39\x2e\x34\
+\x30\x31\x20\x2d\x38\x35\x2e\x34\x43\x31\x31\x30\x2e\x38\x30\x31\
+\x20\x2d\x38\x37\x2e\x34\x20\x31\x31\x31\x2e\x36\x30\x31\x20\x2d\
+\x38\x31\x2e\x36\x20\x31\x31\x31\x2e\x36\x30\x31\x20\x2d\x38\x31\
+\x2e\x36\x43\x31\x31\x31\x2e\x38\x30\x31\x20\x2d\x37\x39\x2e\x32\
+\x20\x31\x31\x35\x2e\x36\x30\x31\x20\x2d\x37\x31\x2e\x32\x20\x31\
+\x31\x35\x2e\x36\x30\x31\x20\x2d\x37\x31\x2e\x32\x43\x31\x31\x38\
+\x2e\x34\x30\x31\x20\x2d\x35\x38\x2e\x32\x20\x31\x32\x32\x2e\x30\
+\x30\x31\x20\x2d\x36\x35\x2e\x36\x20\x31\x32\x32\x2e\x30\x30\x31\
+\x20\x2d\x36\x35\x2e\x36\x4c\x31\x32\x36\x2e\x36\x30\x31\x20\x2d\
+\x35\x36\x2e\x32\x43\x31\x32\x38\x2e\x30\x30\x31\x20\x2d\x35\x33\
+\x2e\x36\x20\x31\x32\x32\x2e\x30\x30\x31\x20\x2d\x34\x36\x20\x31\
+\x32\x32\x2e\x30\x30\x31\x20\x2d\x34\x36\x43\x31\x32\x31\x2e\x38\
+\x30\x31\x20\x2d\x34\x33\x2e\x32\x20\x31\x32\x32\x2e\x36\x30\x31\
+\x20\x2d\x34\x33\x2e\x34\x20\x31\x31\x37\x2e\x30\x30\x31\x20\x2d\
+\x33\x35\x2e\x38\x43\x31\x31\x31\x2e\x34\x30\x31\x20\x2d\x32\x38\
+\x2e\x32\x20\x31\x31\x34\x2e\x38\x30\x31\x20\x2d\x32\x33\x2e\x38\
+\x20\x31\x31\x34\x2e\x38\x30\x31\x20\x2d\x32\x33\x2e\x38\x43\x31\
+\x31\x33\x2e\x34\x30\x31\x20\x2d\x31\x37\x2e\x32\x20\x31\x32\x32\
+\x2e\x32\x30\x31\x20\x2d\x31\x37\x2e\x36\x20\x31\x32\x32\x2e\x32\
+\x30\x31\x20\x2d\x31\x37\x2e\x36\x43\x31\x32\x34\x2e\x38\x30\x31\
+\x20\x2d\x31\x35\x2e\x34\x20\x31\x32\x38\x2e\x32\x30\x31\x20\x2d\
+\x31\x35\x2e\x34\x20\x31\x32\x38\x2e\x32\x30\x31\x20\x2d\x31\x35\
+\x2e\x34\x43\x31\x33\x30\x2e\x30\x30\x31\x20\x2d\x31\x33\x2e\x34\
+\x20\x31\x33\x32\x2e\x34\x30\x31\x20\x2d\x31\x34\x20\x31\x33\x32\
+\x2e\x34\x30\x31\x20\x2d\x31\x34\x43\x31\x33\x34\x2e\x30\x30\x31\
+\x20\x2d\x31\x37\x2e\x38\x20\x31\x34\x30\x2e\x32\x30\x31\x20\x2d\
+\x31\x35\x2e\x38\x20\x31\x34\x30\x2e\x32\x30\x31\x20\x2d\x31\x35\
+\x2e\x38\x43\x31\x34\x31\x2e\x36\x30\x31\x20\x2d\x31\x38\x2e\x32\
+\x20\x31\x34\x39\x2e\x38\x30\x31\x20\x2d\x31\x38\x2e\x36\x20\x31\
+\x34\x39\x2e\x38\x30\x31\x20\x2d\x31\x38\x2e\x36\x43\x31\x35\x30\
+\x2e\x38\x30\x31\x20\x2d\x32\x31\x2e\x32\x20\x31\x35\x31\x2e\x32\
+\x30\x31\x20\x2d\x32\x32\x2e\x38\x20\x31\x35\x34\x2e\x36\x30\x31\
+\x20\x2d\x32\x33\x2e\x34\x43\x31\x35\x38\x2e\x30\x30\x31\x20\x2d\
+\x32\x34\x20\x31\x33\x33\x2e\x34\x30\x31\x20\x2d\x36\x37\x20\x31\
+\x33\x33\x2e\x34\x30\x31\x20\x2d\x36\x37\x43\x31\x33\x39\x2e\x38\
+\x30\x31\x20\x2d\x36\x37\x2e\x38\x20\x31\x33\x31\x2e\x36\x30\x31\
+\x20\x2d\x38\x30\x2e\x32\x20\x31\x33\x31\x2e\x36\x30\x31\x20\x2d\
+\x38\x30\x2e\x32\x43\x31\x32\x39\x2e\x34\x30\x31\x20\x2d\x38\x36\
+\x2e\x38\x20\x31\x34\x30\x2e\x38\x30\x31\x20\x2d\x37\x32\x2e\x32\
+\x20\x31\x34\x33\x2e\x30\x30\x31\x20\x2d\x37\x30\x2e\x38\x43\x31\
+\x34\x35\x2e\x32\x30\x31\x20\x2d\x36\x39\x2e\x34\x20\x31\x34\x36\
+\x2e\x32\x30\x31\x20\x2d\x36\x37\x2e\x32\x20\x31\x34\x34\x2e\x36\
+\x30\x31\x20\x2d\x36\x37\x2e\x34\x43\x31\x34\x33\x2e\x30\x30\x31\
+\x20\x2d\x36\x37\x2e\x36\x20\x31\x34\x31\x2e\x32\x30\x31\x20\x2d\
+\x36\x35\x2e\x34\x20\x31\x34\x32\x2e\x36\x30\x31\x20\x2d\x36\x35\
+\x2e\x32\x43\x31\x34\x34\x2e\x30\x30\x31\x20\x2d\x36\x35\x20\x31\
+\x35\x37\x2e\x30\x30\x31\x20\x2d\x35\x30\x20\x31\x36\x30\x2e\x34\
+\x30\x31\x20\x2d\x33\x39\x2e\x38\x43\x31\x36\x33\x2e\x38\x30\x31\
+\x20\x2d\x32\x39\x2e\x36\x20\x31\x36\x39\x2e\x38\x30\x31\x20\x2d\
+\x32\x35\x2e\x36\x20\x31\x37\x36\x2e\x30\x30\x31\x20\x2d\x31\x39\
+\x2e\x36\x43\x31\x38\x32\x2e\x32\x30\x31\x20\x2d\x31\x33\x2e\x36\
+\x20\x31\x38\x31\x2e\x34\x30\x31\x20\x31\x30\x2e\x36\x20\x31\x38\
+\x31\x2e\x34\x30\x31\x20\x31\x30\x2e\x36\x43\x31\x38\x31\x2e\x30\
+\x30\x31\x20\x31\x39\x2e\x34\x20\x31\x38\x37\x2e\x30\x30\x31\x20\
+\x33\x30\x20\x31\x38\x37\x2e\x30\x30\x31\x20\x33\x30\x43\x31\x38\
+\x39\x2e\x30\x30\x31\x20\x33\x33\x2e\x38\x20\x31\x38\x34\x2e\x38\
+\x30\x31\x20\x35\x32\x20\x31\x38\x34\x2e\x38\x30\x31\x20\x35\x32\
+\x43\x31\x38\x32\x2e\x38\x30\x31\x20\x35\x34\x2e\x32\x20\x31\x38\
+\x34\x2e\x32\x30\x31\x20\x35\x35\x20\x31\x38\x34\x2e\x32\x30\x31\
+\x20\x35\x35\x43\x31\x38\x35\x2e\x32\x30\x31\x20\x35\x36\x2e\x32\
+\x20\x31\x39\x32\x2e\x30\x30\x31\x20\x36\x39\x2e\x34\x20\x31\x39\
+\x32\x2e\x30\x30\x31\x20\x36\x39\x2e\x34\x43\x31\x39\x30\x2e\x32\
+\x30\x31\x20\x36\x39\x2e\x32\x20\x31\x39\x33\x2e\x38\x30\x31\x20\
+\x37\x32\x2e\x38\x20\x31\x39\x33\x2e\x38\x30\x31\x20\x37\x32\x2e\
+\x38\x43\x31\x39\x39\x2e\x30\x30\x31\x20\x37\x38\x2e\x38\x20\x31\
+\x39\x32\x2e\x36\x30\x31\x20\x37\x35\x2e\x38\x20\x31\x39\x32\x2e\
+\x36\x30\x31\x20\x37\x35\x2e\x38\x43\x31\x38\x36\x2e\x36\x30\x31\
+\x20\x37\x34\x2e\x32\x20\x31\x39\x33\x2e\x36\x30\x31\x20\x38\x34\
+\x20\x31\x39\x33\x2e\x36\x30\x31\x20\x38\x34\x43\x31\x39\x34\x2e\
+\x38\x30\x31\x20\x38\x35\x2e\x38\x20\x31\x38\x35\x2e\x38\x30\x31\
+\x20\x38\x31\x2e\x32\x20\x31\x38\x35\x2e\x38\x30\x31\x20\x38\x31\
+\x2e\x32\x43\x31\x37\x36\x2e\x36\x30\x31\x20\x38\x30\x2e\x36\x20\
+\x31\x38\x38\x2e\x32\x30\x31\x20\x38\x37\x2e\x38\x20\x31\x38\x38\
+\x2e\x32\x30\x31\x20\x38\x37\x2e\x38\x43\x31\x39\x36\x2e\x38\x30\
+\x31\x20\x39\x35\x20\x31\x38\x35\x2e\x34\x30\x31\x20\x39\x30\x2e\
+\x36\x20\x31\x38\x35\x2e\x34\x30\x31\x20\x39\x30\x2e\x36\x43\x31\
+\x38\x30\x2e\x38\x30\x31\x20\x38\x38\x2e\x38\x20\x31\x38\x34\x2e\
+\x30\x30\x31\x20\x39\x35\x2e\x36\x20\x31\x38\x34\x2e\x30\x30\x31\
+\x20\x39\x35\x2e\x36\x43\x31\x38\x37\x2e\x32\x30\x31\x20\x39\x37\
+\x2e\x32\x20\x32\x30\x34\x2e\x34\x30\x31\x20\x31\x30\x34\x2e\x32\
+\x20\x32\x30\x34\x2e\x34\x30\x31\x20\x31\x30\x34\x2e\x32\x43\x32\
+\x30\x34\x2e\x38\x30\x31\x20\x31\x30\x38\x2e\x30\x30\x31\x20\x32\
+\x30\x31\x2e\x38\x30\x31\x20\x31\x31\x33\x2e\x30\x30\x31\x20\x32\
+\x30\x31\x2e\x38\x30\x31\x20\x31\x31\x33\x2e\x30\x30\x31\x43\x32\
+\x30\x32\x2e\x32\x30\x31\x20\x31\x31\x37\x2e\x30\x30\x31\x20\x32\
+\x30\x30\x2e\x30\x30\x31\x20\x31\x32\x30\x2e\x34\x30\x31\x20\x32\
+\x30\x30\x2e\x30\x30\x31\x20\x31\x32\x30\x2e\x34\x30\x31\x43\x31\
+\x39\x38\x2e\x38\x30\x31\x20\x31\x32\x38\x2e\x36\x30\x31\x20\x31\
+\x39\x38\x2e\x32\x30\x31\x20\x31\x32\x39\x2e\x34\x30\x31\x20\x31\
+\x39\x38\x2e\x32\x30\x31\x20\x31\x32\x39\x2e\x34\x30\x31\x43\x31\
+\x39\x34\x2e\x30\x30\x31\x20\x31\x32\x39\x2e\x36\x30\x31\x20\x31\
+\x38\x36\x2e\x36\x30\x31\x20\x31\x34\x33\x2e\x34\x30\x31\x20\x31\
+\x38\x36\x2e\x36\x30\x31\x20\x31\x34\x33\x2e\x34\x30\x31\x43\x31\
+\x38\x34\x2e\x38\x30\x31\x20\x31\x34\x36\x2e\x30\x30\x31\x20\x31\
+\x37\x34\x2e\x36\x30\x31\x20\x31\x35\x38\x2e\x30\x30\x31\x20\x31\
+\x37\x34\x2e\x36\x30\x31\x20\x31\x35\x38\x2e\x30\x30\x31\x43\x31\
+\x37\x32\x2e\x36\x30\x31\x20\x31\x36\x35\x2e\x30\x30\x31\x20\x31\
+\x35\x34\x2e\x36\x30\x31\x20\x31\x35\x37\x2e\x38\x30\x31\x20\x31\
+\x35\x34\x2e\x36\x30\x31\x20\x31\x35\x37\x2e\x38\x30\x31\x43\x31\
+\x34\x38\x2e\x30\x30\x31\x20\x31\x36\x31\x2e\x32\x30\x31\x20\x31\
+\x35\x30\x2e\x30\x30\x31\x20\x31\x35\x37\x2e\x38\x30\x31\x20\x31\
+\x35\x30\x2e\x30\x30\x31\x20\x31\x35\x37\x2e\x38\x30\x31\x43\x31\
+\x34\x39\x2e\x36\x30\x31\x20\x31\x35\x35\x2e\x36\x30\x31\x20\x31\
+\x35\x34\x2e\x34\x30\x31\x20\x31\x34\x39\x2e\x36\x30\x31\x20\x31\
+\x35\x34\x2e\x34\x30\x31\x20\x31\x34\x39\x2e\x36\x30\x31\x43\x31\
+\x36\x31\x2e\x34\x30\x31\x20\x31\x34\x37\x2e\x30\x30\x31\x20\x31\
+\x35\x38\x2e\x38\x30\x31\x20\x31\x33\x36\x2e\x32\x30\x31\x20\x31\
+\x35\x38\x2e\x38\x30\x31\x20\x31\x33\x36\x2e\x32\x30\x31\x43\x31\
+\x36\x32\x2e\x38\x30\x31\x20\x31\x33\x34\x2e\x38\x30\x31\x20\x31\
+\x35\x31\x2e\x36\x30\x31\x20\x31\x33\x32\x2e\x30\x30\x31\x20\x31\
+\x35\x31\x2e\x38\x30\x31\x20\x31\x33\x30\x2e\x38\x30\x31\x43\x31\
+\x35\x32\x2e\x30\x30\x31\x20\x31\x32\x39\x2e\x36\x30\x31\x20\x31\
+\x35\x37\x2e\x38\x30\x31\x20\x31\x32\x38\x2e\x32\x30\x31\x20\x31\
+\x35\x37\x2e\x38\x30\x31\x20\x31\x32\x38\x2e\x32\x30\x31\x43\x31\
+\x36\x35\x2e\x38\x30\x31\x20\x31\x32\x36\x2e\x32\x30\x31\x20\x31\
+\x36\x31\x2e\x34\x30\x31\x20\x31\x32\x33\x2e\x38\x30\x31\x20\x31\
+\x36\x31\x2e\x34\x30\x31\x20\x31\x32\x33\x2e\x38\x30\x31\x43\x31\
+\x36\x30\x2e\x38\x30\x31\x20\x31\x31\x39\x2e\x38\x30\x31\x20\x31\
+\x36\x33\x2e\x38\x30\x31\x20\x31\x31\x34\x2e\x32\x30\x31\x20\x31\
+\x36\x33\x2e\x38\x30\x31\x20\x31\x31\x34\x2e\x32\x30\x31\x43\x31\
+\x37\x35\x2e\x34\x30\x31\x20\x31\x31\x33\x2e\x34\x30\x31\x20\x31\
+\x36\x33\x2e\x38\x30\x31\x20\x39\x37\x2e\x32\x20\x31\x36\x33\x2e\
+\x38\x30\x31\x20\x39\x37\x2e\x32\x43\x31\x35\x33\x2e\x30\x30\x31\
+\x20\x38\x39\x2e\x36\x20\x31\x35\x32\x2e\x30\x30\x31\x20\x38\x33\
+\x2e\x38\x20\x31\x35\x32\x2e\x30\x30\x31\x20\x38\x33\x2e\x38\x43\
+\x31\x36\x34\x2e\x36\x30\x31\x20\x37\x35\x2e\x36\x20\x31\x35\x36\
+\x2e\x34\x30\x31\x20\x36\x33\x2e\x32\x20\x31\x35\x36\x2e\x36\x30\
+\x31\x20\x35\x39\x2e\x36\x43\x31\x35\x36\x2e\x38\x30\x31\x20\x35\
+\x36\x20\x31\x35\x38\x2e\x30\x30\x31\x20\x33\x34\x2e\x34\x20\x31\
+\x35\x38\x2e\x30\x30\x31\x20\x33\x34\x2e\x34\x43\x31\x35\x36\x2e\
+\x30\x30\x31\x20\x32\x38\x2e\x32\x20\x31\x35\x33\x2e\x30\x30\x31\
+\x20\x31\x34\x2e\x36\x20\x31\x35\x33\x2e\x30\x30\x31\x20\x31\x34\
+\x2e\x36\x43\x31\x35\x35\x2e\x32\x30\x31\x20\x39\x2e\x34\x20\x31\
+\x36\x32\x2e\x36\x30\x31\x20\x2d\x33\x2e\x32\x20\x31\x36\x32\x2e\
+\x36\x30\x31\x20\x2d\x33\x2e\x32\x43\x31\x36\x35\x2e\x34\x30\x31\
+\x20\x2d\x37\x2e\x34\x20\x31\x37\x34\x2e\x32\x30\x31\x20\x2d\x31\
+\x32\x2e\x32\x20\x31\x37\x32\x2e\x30\x30\x31\x20\x2d\x31\x35\x2e\
+\x32\x43\x31\x36\x39\x2e\x38\x30\x31\x20\x2d\x31\x38\x2e\x32\x20\
+\x31\x36\x32\x2e\x30\x30\x31\x20\x2d\x31\x36\x2e\x34\x20\x31\x36\
+\x32\x2e\x30\x30\x31\x20\x2d\x31\x36\x2e\x34\x43\x31\x35\x34\x2e\
+\x32\x30\x31\x20\x2d\x31\x37\x2e\x38\x20\x31\x35\x34\x2e\x38\x30\
+\x31\x20\x2d\x31\x32\x2e\x36\x20\x31\x35\x34\x2e\x38\x30\x31\x20\
+\x2d\x31\x32\x2e\x36\x43\x31\x35\x33\x2e\x32\x30\x31\x20\x2d\x31\
+\x31\x2e\x36\x20\x31\x35\x32\x2e\x34\x30\x31\x20\x2d\x36\x2e\x36\
+\x20\x31\x35\x32\x2e\x34\x30\x31\x20\x2d\x36\x2e\x36\x43\x31\x35\
+\x31\x2e\x36\x38\x20\x31\x2e\x33\x33\x33\x20\x31\x34\x32\x2e\x38\
+\x30\x31\x20\x37\x2e\x36\x20\x31\x34\x32\x2e\x38\x30\x31\x20\x37\
+\x2e\x36\x43\x31\x33\x31\x2e\x36\x30\x31\x20\x31\x33\x2e\x38\x20\
+\x31\x34\x30\x2e\x38\x30\x31\x20\x31\x37\x2e\x38\x20\x31\x34\x30\
+\x2e\x38\x30\x31\x20\x31\x37\x2e\x38\x43\x31\x34\x36\x2e\x38\x30\
+\x31\x20\x32\x34\x2e\x34\x20\x31\x33\x37\x2e\x30\x30\x31\x20\x32\
+\x34\x2e\x36\x20\x31\x33\x37\x2e\x30\x30\x31\x20\x32\x34\x2e\x36\
+\x43\x31\x32\x36\x2e\x30\x30\x31\x20\x32\x32\x2e\x38\x20\x31\x33\
+\x34\x2e\x32\x30\x31\x20\x33\x33\x20\x31\x33\x34\x2e\x32\x30\x31\
+\x20\x33\x33\x43\x31\x34\x35\x2e\x30\x30\x31\x20\x34\x35\x2e\x38\
+\x20\x31\x34\x32\x2e\x30\x30\x31\x20\x34\x38\x2e\x36\x20\x31\x34\
+\x32\x2e\x30\x30\x31\x20\x34\x38\x2e\x36\x43\x31\x33\x31\x2e\x38\
+\x30\x31\x20\x34\x39\x2e\x36\x20\x31\x34\x34\x2e\x34\x30\x31\x20\
+\x35\x38\x2e\x38\x20\x31\x34\x34\x2e\x34\x30\x31\x20\x35\x38\x2e\
+\x38\x43\x31\x34\x34\x2e\x34\x30\x31\x20\x35\x38\x2e\x38\x20\x31\
+\x34\x33\x2e\x36\x30\x31\x20\x35\x36\x2e\x38\x20\x31\x34\x33\x2e\
+\x38\x30\x31\x20\x35\x38\x2e\x36\x43\x31\x34\x34\x2e\x30\x30\x31\
+\x20\x36\x30\x2e\x34\x20\x31\x34\x37\x2e\x30\x30\x31\x20\x36\x34\
+\x2e\x36\x20\x31\x34\x37\x2e\x38\x30\x31\x20\x36\x36\x2e\x36\x43\
+\x31\x34\x38\x2e\x36\x30\x31\x20\x36\x38\x2e\x36\x20\x31\x34\x34\
+\x2e\x36\x30\x31\x20\x36\x38\x2e\x38\x20\x31\x34\x34\x2e\x36\x30\
+\x31\x20\x36\x38\x2e\x38\x43\x31\x34\x35\x2e\x32\x30\x31\x20\x37\
+\x38\x2e\x34\x20\x31\x32\x39\x2e\x38\x30\x31\x20\x37\x34\x2e\x32\
+\x20\x31\x32\x39\x2e\x38\x30\x31\x20\x37\x34\x2e\x32\x43\x31\x32\
+\x39\x2e\x38\x30\x31\x20\x37\x34\x2e\x32\x20\x31\x32\x39\x2e\x38\
+\x30\x31\x20\x37\x34\x2e\x32\x20\x31\x32\x38\x2e\x32\x30\x31\x20\
+\x37\x34\x2e\x34\x43\x31\x32\x36\x2e\x36\x30\x31\x20\x37\x34\x2e\
+\x36\x20\x31\x31\x35\x2e\x34\x30\x31\x20\x37\x33\x2e\x38\x20\x31\
+\x30\x39\x2e\x36\x30\x31\x20\x37\x31\x2e\x36\x43\x31\x30\x33\x2e\
+\x38\x30\x31\x20\x36\x39\x2e\x34\x20\x39\x37\x2e\x30\x30\x31\x20\
+\x36\x39\x2e\x34\x20\x39\x37\x2e\x30\x30\x31\x20\x36\x39\x2e\x34\
+\x43\x39\x37\x2e\x30\x30\x31\x20\x36\x39\x2e\x34\x20\x39\x33\x2e\
+\x30\x30\x31\x20\x37\x31\x2e\x32\x20\x38\x35\x2e\x34\x20\x37\x31\
+\x43\x37\x37\x2e\x38\x20\x37\x30\x2e\x38\x20\x36\x39\x2e\x38\x20\
+\x37\x33\x2e\x36\x20\x36\x39\x2e\x38\x20\x37\x33\x2e\x36\x43\x36\
+\x35\x2e\x34\x20\x37\x33\x2e\x32\x20\x37\x34\x20\x36\x38\x2e\x38\
+\x20\x37\x34\x2e\x32\x20\x36\x39\x43\x37\x34\x2e\x34\x20\x36\x39\
+\x2e\x32\x20\x38\x30\x20\x36\x33\x2e\x36\x20\x37\x32\x20\x36\x34\
+\x2e\x32\x43\x35\x30\x2e\x32\x30\x33\x20\x36\x35\x2e\x38\x33\x35\
+\x20\x33\x39\x2e\x34\x20\x35\x35\x2e\x36\x20\x33\x39\x2e\x34\x20\
+\x35\x35\x2e\x36\x43\x33\x37\x2e\x34\x20\x35\x34\x2e\x32\x20\x33\
+\x34\x2e\x38\x20\x35\x31\x2e\x34\x20\x33\x34\x2e\x38\x20\x35\x31\
+\x2e\x34\x43\x32\x34\x2e\x38\x20\x34\x39\x2e\x34\x20\x33\x36\x2e\
+\x32\x20\x36\x33\x2e\x38\x20\x33\x36\x2e\x32\x20\x36\x33\x2e\x38\
+\x43\x33\x37\x2e\x34\x20\x36\x35\x2e\x32\x20\x33\x36\x20\x36\x36\
+\x2e\x32\x20\x33\x36\x20\x36\x36\x2e\x32\x43\x33\x35\x2e\x32\x20\
+\x36\x34\x2e\x36\x20\x32\x37\x2e\x34\x20\x35\x39\x2e\x32\x20\x32\
+\x37\x2e\x34\x20\x35\x39\x2e\x32\x43\x32\x34\x2e\x35\x38\x39\x20\
+\x35\x38\x2e\x32\x32\x37\x20\x32\x33\x2e\x32\x32\x36\x20\x35\x36\
+\x2e\x38\x39\x33\x20\x32\x30\x2e\x38\x39\x35\x20\x35\x34\x2e\x34\
+\x30\x37\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x34\x63\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x33\x20\x34\x32\x2e\x38\
+\x43\x2d\x33\x20\x34\x32\x2e\x38\x20\x38\x2e\x36\x20\x34\x38\x2e\
+\x34\x20\x31\x31\x2e\x32\x20\x35\x31\x2e\x32\x43\x31\x33\x2e\x38\
+\x20\x35\x34\x20\x32\x37\x2e\x38\x20\x36\x35\x2e\x34\x20\x32\x37\
+\x2e\x38\x20\x36\x35\x2e\x34\x43\x32\x37\x2e\x38\x20\x36\x35\x2e\
+\x34\x20\x32\x32\x2e\x34\x20\x36\x33\x2e\x34\x20\x31\x39\x2e\x38\
+\x20\x36\x31\x2e\x36\x43\x31\x37\x2e\x32\x20\x35\x39\x2e\x38\x20\
+\x36\x2e\x34\x20\x35\x31\x2e\x36\x20\x36\x2e\x34\x20\x35\x31\x2e\
+\x36\x43\x36\x2e\x34\x20\x35\x31\x2e\x36\x20\x32\x2e\x36\x20\x34\
+\x35\x2e\x36\x20\x2d\x33\x20\x34\x32\x2e\x38\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x39\x39\
+\x63\x63\x33\x32\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x2d\x36\x31\x2e\x30\x30\x39\x20\x31\x31\x2e\x36\x30\x33\
+\x43\x2d\x36\x30\x2e\x36\x37\x32\x20\x31\x31\x2e\x34\x35\x35\x20\
+\x2d\x36\x31\x2e\x31\x39\x36\x20\x38\x2e\x37\x34\x33\x20\x2d\x36\
+\x31\x2e\x34\x20\x38\x2e\x32\x43\x2d\x36\x32\x2e\x34\x32\x32\x20\
+\x35\x2e\x34\x37\x34\x20\x2d\x37\x31\x2e\x34\x20\x34\x20\x2d\x37\
+\x31\x2e\x34\x20\x34\x43\x2d\x37\x31\x2e\x36\x32\x37\x20\x35\x2e\
+\x33\x36\x35\x20\x2d\x37\x31\x2e\x36\x38\x32\x20\x36\x2e\x39\x36\
+\x31\x20\x2d\x37\x31\x2e\x35\x37\x36\x20\x38\x2e\x35\x39\x39\x43\
+\x2d\x37\x31\x2e\x35\x37\x36\x20\x38\x2e\x35\x39\x39\x20\x2d\x36\
+\x36\x2e\x37\x30\x38\x20\x31\x34\x2e\x31\x31\x38\x20\x2d\x36\x31\
+\x2e\x30\x30\x39\x20\x31\x31\x2e\x36\x30\x33\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x36\x35\
+\x39\x39\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x2d\x36\x31\x2e\x30\x30\x39\x20\x31\x31\x2e\x34\x30\x33\
+\x43\x2d\x36\x31\x2e\x34\x35\x38\x20\x31\x31\x2e\x35\x36\x31\x20\
+\x2d\x36\x31\x2e\x30\x32\x34\x20\x38\x2e\x36\x36\x39\x20\x2d\x36\
+\x31\x2e\x32\x20\x38\x2e\x32\x43\x2d\x36\x32\x2e\x32\x32\x32\x20\
+\x35\x2e\x34\x37\x34\x20\x2d\x37\x31\x2e\x34\x20\x33\x2e\x39\x20\
+\x2d\x37\x31\x2e\x34\x20\x33\x2e\x39\x43\x2d\x37\x31\x2e\x36\x32\
+\x37\x20\x35\x2e\x32\x36\x35\x20\x2d\x37\x31\x2e\x36\x38\x32\x20\
+\x36\x2e\x38\x36\x31\x20\x2d\x37\x31\x2e\x35\x37\x36\x20\x38\x2e\
+\x34\x39\x39\x43\x2d\x37\x31\x2e\x35\x37\x36\x20\x38\x2e\x34\x39\
+\x39\x20\x2d\x36\x37\x2e\x33\x30\x38\x20\x31\x33\x2e\x36\x31\x38\
+\x20\x2d\x36\x31\x2e\x30\x30\x39\x20\x31\x31\x2e\x34\x30\x33\x7a\
+\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x2d\x36\x35\x2e\x34\x20\x31\x31\x2e\x35\
+\x34\x36\x43\x2d\x36\x36\x2e\x30\x32\x35\x20\x31\x31\x2e\x35\x34\
+\x36\x20\x2d\x36\x36\x2e\x35\x33\x31\x20\x31\x30\x2e\x34\x30\x36\
+\x20\x2d\x36\x36\x2e\x35\x33\x31\x20\x39\x43\x2d\x36\x36\x2e\x35\
+\x33\x31\x20\x37\x2e\x35\x39\x35\x20\x2d\x36\x36\x2e\x30\x32\x35\
+\x20\x36\x2e\x34\x35\x35\x20\x2d\x36\x35\x2e\x34\x20\x36\x2e\x34\
+\x35\x35\x43\x2d\x36\x34\x2e\x37\x37\x35\x20\x36\x2e\x34\x35\x35\
+\x20\x2d\x36\x34\x2e\x32\x36\x38\x20\x37\x2e\x35\x39\x35\x20\x2d\
+\x36\x34\x2e\x32\x36\x38\x20\x39\x43\x2d\x36\x34\x2e\x32\x36\x38\
+\x20\x31\x30\x2e\x34\x30\x36\x20\x2d\x36\x34\x2e\x37\x37\x35\x20\
+\x31\x31\x2e\x35\x34\x36\x20\x2d\x36\x35\x2e\x34\x20\x31\x31\x2e\
+\x35\x34\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\
+\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x36\x35\x2e\x34\x20\
+\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x31\x31\x20\x31\x30\x39\
+\x2e\x36\x30\x31\x43\x2d\x31\x31\x31\x20\x31\x30\x39\x2e\x36\x30\
+\x31\x20\x2d\x31\x31\x36\x2e\x36\x20\x31\x31\x39\x2e\x36\x30\x31\
+\x20\x2d\x39\x31\x2e\x38\x20\x31\x31\x33\x2e\x36\x30\x31\x43\x2d\
+\x39\x31\x2e\x38\x20\x31\x31\x33\x2e\x36\x30\x31\x20\x2d\x37\x37\
+\x2e\x38\x20\x31\x31\x32\x2e\x34\x30\x31\x20\x2d\x37\x35\x2e\x34\
+\x20\x31\x31\x30\x2e\x30\x30\x31\x43\x2d\x37\x34\x2e\x32\x20\x31\
+\x31\x30\x2e\x38\x30\x31\x20\x2d\x36\x35\x2e\x38\x33\x34\x20\x31\
+\x31\x33\x2e\x37\x33\x34\x20\x2d\x36\x33\x20\x31\x31\x34\x2e\x34\
+\x30\x31\x43\x2d\x35\x36\x2e\x32\x20\x31\x31\x36\x2e\x30\x30\x31\
+\x20\x2d\x34\x37\x2e\x38\x20\x31\x30\x36\x20\x2d\x34\x37\x2e\x38\
+\x20\x31\x30\x36\x43\x2d\x34\x37\x2e\x38\x20\x31\x30\x36\x20\x2d\
+\x34\x33\x2e\x32\x20\x39\x35\x2e\x35\x20\x2d\x34\x30\x2e\x34\x20\
+\x39\x35\x2e\x35\x43\x2d\x33\x37\x2e\x36\x20\x39\x35\x2e\x35\x20\
+\x2d\x34\x30\x2e\x38\x20\x39\x37\x2e\x31\x20\x2d\x34\x30\x2e\x38\
+\x20\x39\x37\x2e\x31\x43\x2d\x34\x30\x2e\x38\x20\x39\x37\x2e\x31\
+\x20\x2d\x34\x37\x2e\x34\x20\x31\x30\x37\x2e\x32\x30\x31\x20\x2d\
+\x34\x37\x20\x31\x30\x38\x2e\x38\x30\x31\x43\x2d\x34\x37\x20\x31\
+\x30\x38\x2e\x38\x30\x31\x20\x2d\x35\x32\x2e\x32\x20\x31\x32\x38\
+\x2e\x38\x30\x31\x20\x2d\x36\x38\x2e\x32\x20\x31\x32\x39\x2e\x36\
+\x30\x31\x43\x2d\x36\x38\x2e\x32\x20\x31\x32\x39\x2e\x36\x30\x31\
+\x20\x2d\x38\x34\x2e\x33\x35\x20\x31\x33\x30\x2e\x35\x35\x31\x20\
+\x2d\x38\x33\x20\x31\x33\x36\x2e\x34\x30\x31\x43\x2d\x38\x33\x20\
+\x31\x33\x36\x2e\x34\x30\x31\x20\x2d\x37\x34\x2e\x32\x20\x31\x33\
+\x34\x2e\x30\x30\x31\x20\x2d\x37\x31\x2e\x38\x20\x31\x33\x36\x2e\
+\x34\x30\x31\x43\x2d\x37\x31\x2e\x38\x20\x31\x33\x36\x2e\x34\x30\
+\x31\x20\x2d\x36\x31\x20\x31\x33\x36\x2e\x30\x30\x31\x20\x2d\x36\
+\x39\x20\x31\x34\x32\x2e\x34\x30\x31\x4c\x2d\x37\x35\x2e\x38\x20\
+\x31\x35\x34\x2e\x30\x30\x31\x43\x2d\x37\x35\x2e\x38\x20\x31\x35\
+\x34\x2e\x30\x30\x31\x20\x2d\x37\x35\x2e\x36\x36\x20\x31\x35\x37\
+\x2e\x39\x31\x39\x20\x2d\x38\x35\x2e\x38\x20\x31\x35\x34\x2e\x34\
+\x30\x31\x43\x2d\x39\x35\x2e\x36\x20\x31\x35\x31\x2e\x30\x30\x31\
+\x20\x2d\x31\x30\x35\x2e\x39\x20\x31\x33\x38\x2e\x31\x30\x31\x20\
+\x2d\x31\x30\x35\x2e\x39\x20\x31\x33\x38\x2e\x31\x30\x31\x43\x2d\
+\x31\x30\x35\x2e\x39\x20\x31\x33\x38\x2e\x31\x30\x31\x20\x2d\x31\
+\x32\x31\x2e\x38\x35\x20\x31\x32\x33\x2e\x35\x35\x31\x20\x2d\x31\
+\x31\x31\x20\x31\x30\x39\x2e\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x65\x35\x39\
+\x39\x39\x39\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x2d\x31\x31\x32\x2e\x32\x20\x31\x31\x33\x2e\x36\x30\x31\x43\
+\x2d\x31\x31\x32\x2e\x32\x20\x31\x31\x33\x2e\x36\x30\x31\x20\x2d\
+\x31\x31\x34\x2e\x32\x20\x31\x32\x33\x2e\x32\x30\x31\x20\x2d\x37\
+\x37\x2e\x34\x20\x31\x31\x32\x2e\x38\x30\x31\x43\x2d\x37\x37\x2e\
+\x34\x20\x31\x31\x32\x2e\x38\x30\x31\x20\x2d\x37\x33\x20\x31\x31\
+\x32\x2e\x38\x30\x31\x20\x2d\x37\x30\x2e\x36\x20\x31\x31\x33\x2e\
+\x36\x30\x31\x43\x2d\x36\x38\x2e\x32\x20\x31\x31\x34\x2e\x34\x30\
+\x31\x20\x2d\x35\x36\x2e\x32\x20\x31\x31\x37\x2e\x32\x30\x31\x20\
+\x2d\x35\x34\x2e\x32\x20\x31\x31\x36\x2e\x30\x30\x31\x43\x2d\x35\
+\x34\x2e\x32\x20\x31\x31\x36\x2e\x30\x30\x31\x20\x2d\x36\x31\x2e\
+\x34\x20\x31\x32\x39\x2e\x36\x30\x31\x20\x2d\x37\x33\x20\x31\x32\
+\x38\x2e\x30\x30\x31\x43\x2d\x37\x33\x20\x31\x32\x38\x2e\x30\x30\
+\x31\x20\x2d\x38\x36\x2e\x32\x20\x31\x32\x39\x2e\x36\x30\x31\x20\
+\x2d\x38\x35\x2e\x38\x20\x31\x33\x34\x2e\x34\x30\x31\x43\x2d\x38\
+\x35\x2e\x38\x20\x31\x33\x34\x2e\x34\x30\x31\x20\x2d\x38\x31\x2e\
+\x38\x20\x31\x34\x31\x2e\x36\x30\x31\x20\x2d\x37\x37\x20\x31\x34\
+\x34\x2e\x30\x30\x31\x43\x2d\x37\x37\x20\x31\x34\x34\x2e\x30\x30\
+\x31\x20\x2d\x37\x34\x2e\x32\x20\x31\x34\x36\x2e\x34\x30\x31\x20\
+\x2d\x37\x34\x2e\x36\x20\x31\x34\x39\x2e\x36\x30\x31\x43\x2d\x37\
+\x35\x20\x31\x35\x32\x2e\x38\x30\x31\x20\x2d\x37\x37\x2e\x38\x20\
+\x31\x35\x34\x2e\x34\x30\x31\x20\x2d\x37\x39\x2e\x38\x20\x31\x35\
+\x35\x2e\x32\x30\x31\x43\x2d\x38\x31\x2e\x38\x20\x31\x35\x36\x2e\
+\x30\x30\x31\x20\x2d\x38\x35\x20\x31\x35\x32\x2e\x38\x30\x31\x20\
+\x2d\x38\x36\x2e\x36\x20\x31\x35\x32\x2e\x38\x30\x31\x43\x2d\x38\
+\x38\x2e\x32\x20\x31\x35\x32\x2e\x38\x30\x31\x20\x2d\x39\x36\x2e\
+\x36\x20\x31\x34\x36\x2e\x34\x30\x31\x20\x2d\x31\x30\x31\x20\x31\
+\x34\x31\x2e\x36\x30\x31\x43\x2d\x31\x30\x35\x2e\x34\x20\x31\x33\
+\x36\x2e\x38\x30\x31\x20\x2d\x31\x31\x33\x2e\x38\x20\x31\x32\x34\
+\x2e\x38\x30\x31\x20\x2d\x31\x31\x33\x2e\x34\x20\x31\x32\x32\x2e\
+\x30\x30\x31\x43\x2d\x31\x31\x33\x20\x31\x31\x39\x2e\x32\x30\x31\
+\x20\x2d\x31\x31\x32\x2e\x32\x20\x31\x31\x33\x2e\x36\x30\x31\x20\
+\x2d\x31\x31\x32\x2e\x32\x20\x31\x31\x33\x2e\x36\x30\x31\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x62\x32\x36\x35\x36\x35\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x2d\x31\x30\x39\x20\x31\x33\x31\x2e\x30\x35\
+\x31\x43\x2d\x31\x30\x36\x2e\x34\x20\x31\x33\x35\x2e\x30\x30\x31\
+\x20\x2d\x31\x30\x33\x2e\x32\x20\x31\x33\x39\x2e\x32\x30\x31\x20\
+\x2d\x31\x30\x31\x20\x31\x34\x31\x2e\x36\x30\x31\x43\x2d\x39\x36\
+\x2e\x36\x20\x31\x34\x36\x2e\x34\x30\x31\x20\x2d\x38\x38\x2e\x32\
+\x20\x31\x35\x32\x2e\x38\x30\x31\x20\x2d\x38\x36\x2e\x36\x20\x31\
+\x35\x32\x2e\x38\x30\x31\x43\x2d\x38\x35\x20\x31\x35\x32\x2e\x38\
+\x30\x31\x20\x2d\x38\x31\x2e\x38\x20\x31\x35\x36\x2e\x30\x30\x31\
+\x20\x2d\x37\x39\x2e\x38\x20\x31\x35\x35\x2e\x32\x30\x31\x43\x2d\
+\x37\x37\x2e\x38\x20\x31\x35\x34\x2e\x34\x30\x31\x20\x2d\x37\x35\
+\x20\x31\x35\x32\x2e\x38\x30\x31\x20\x2d\x37\x34\x2e\x36\x20\x31\
+\x34\x39\x2e\x36\x30\x31\x43\x2d\x37\x34\x2e\x32\x20\x31\x34\x36\
+\x2e\x34\x30\x31\x20\x2d\x37\x37\x20\x31\x34\x34\x2e\x30\x30\x31\
+\x20\x2d\x37\x37\x20\x31\x34\x34\x2e\x30\x30\x31\x43\x2d\x38\x30\
+\x2e\x30\x36\x36\x20\x31\x34\x32\x2e\x34\x36\x38\x20\x2d\x38\x32\
+\x2e\x38\x30\x36\x20\x31\x33\x38\x2e\x39\x37\x36\x20\x2d\x38\x34\
+\x2e\x33\x38\x35\x20\x31\x33\x36\x2e\x36\x35\x33\x43\x2d\x38\x34\
+\x2e\x33\x38\x35\x20\x31\x33\x36\x2e\x36\x35\x33\x20\x2d\x38\x34\
+\x2e\x32\x20\x31\x33\x39\x2e\x32\x30\x31\x20\x2d\x38\x39\x2e\x34\
+\x20\x31\x33\x38\x2e\x34\x30\x31\x43\x2d\x39\x34\x2e\x36\x20\x31\
+\x33\x37\x2e\x36\x30\x31\x20\x2d\x39\x39\x2e\x38\x20\x31\x33\x34\
+\x2e\x38\x30\x31\x20\x2d\x31\x30\x31\x2e\x34\x20\x31\x33\x31\x2e\
+\x36\x30\x31\x43\x2d\x31\x30\x33\x20\x31\x32\x38\x2e\x34\x30\x31\
+\x20\x2d\x31\x30\x35\x2e\x34\x20\x31\x32\x36\x2e\x30\x30\x31\x20\
+\x2d\x31\x30\x33\x2e\x38\x20\x31\x32\x39\x2e\x36\x30\x31\x43\x2d\
+\x31\x30\x32\x2e\x32\x20\x31\x33\x33\x2e\x32\x30\x31\x20\x2d\x39\
+\x39\x2e\x38\x20\x31\x33\x36\x2e\x38\x30\x31\x20\x2d\x39\x38\x2e\
+\x32\x20\x31\x33\x37\x2e\x32\x30\x31\x43\x2d\x39\x36\x2e\x36\x20\
+\x31\x33\x37\x2e\x36\x30\x31\x20\x2d\x39\x37\x20\x31\x33\x38\x2e\
+\x38\x30\x31\x20\x2d\x39\x39\x2e\x34\x20\x31\x33\x38\x2e\x34\x30\
+\x31\x43\x2d\x31\x30\x31\x2e\x38\x20\x31\x33\x38\x2e\x30\x30\x31\
+\x20\x2d\x31\x30\x34\x2e\x36\x20\x31\x33\x37\x2e\x36\x30\x31\x20\
+\x2d\x31\x30\x39\x20\x31\x33\x32\x2e\x34\x30\x31\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x39\
+\x39\x32\x36\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x31\x31\x31\x2e\x36\x20\x31\x31\x30\x2e\x30\x30\
+\x31\x43\x2d\x31\x31\x31\x2e\x36\x20\x31\x31\x30\x2e\x30\x30\x31\
+\x20\x2d\x31\x30\x39\x2e\x38\x20\x39\x36\x2e\x34\x20\x2d\x31\x30\
+\x38\x2e\x36\x20\x39\x32\x2e\x34\x43\x2d\x31\x30\x38\x2e\x36\x20\
+\x39\x32\x2e\x34\x20\x2d\x31\x30\x39\x2e\x34\x20\x38\x35\x2e\x36\
+\x20\x2d\x31\x30\x37\x20\x38\x31\x2e\x34\x43\x2d\x31\x30\x34\x2e\
+\x36\x20\x37\x37\x2e\x32\x20\x2d\x31\x30\x32\x2e\x36\x20\x37\x31\
+\x20\x2d\x39\x39\x2e\x36\x20\x36\x35\x2e\x36\x43\x2d\x39\x36\x2e\
+\x36\x20\x36\x30\x2e\x32\x20\x2d\x39\x36\x2e\x34\x20\x35\x36\x2e\
+\x32\x20\x2d\x39\x32\x2e\x34\x20\x35\x34\x2e\x36\x43\x2d\x38\x38\
+\x2e\x34\x20\x35\x33\x20\x2d\x38\x32\x2e\x34\x20\x34\x34\x2e\x34\
+\x20\x2d\x37\x39\x2e\x36\x20\x34\x33\x2e\x34\x43\x2d\x37\x36\x2e\
+\x38\x20\x34\x32\x2e\x34\x20\x2d\x37\x37\x20\x34\x33\x2e\x32\x20\
+\x2d\x37\x37\x20\x34\x33\x2e\x32\x43\x2d\x37\x37\x20\x34\x33\x2e\
+\x32\x20\x2d\x37\x30\x2e\x32\x20\x32\x38\x2e\x34\x20\x2d\x35\x36\
+\x2e\x36\x20\x33\x32\x2e\x34\x43\x2d\x35\x36\x2e\x36\x20\x33\x32\
+\x2e\x34\x20\x2d\x37\x32\x2e\x38\x20\x32\x39\x2e\x36\x20\x2d\x35\
+\x37\x20\x32\x30\x2e\x32\x43\x2d\x35\x37\x20\x32\x30\x2e\x32\x20\
+\x2d\x36\x31\x2e\x38\x20\x32\x31\x2e\x33\x20\x2d\x35\x38\x2e\x35\
+\x20\x31\x34\x2e\x33\x43\x2d\x35\x36\x2e\x32\x39\x39\x20\x39\x2e\
+\x36\x33\x32\x20\x2d\x35\x36\x2e\x38\x20\x31\x36\x2e\x34\x20\x2d\
+\x36\x37\x2e\x38\x20\x32\x38\x2e\x32\x43\x2d\x36\x37\x2e\x38\x20\
+\x32\x38\x2e\x32\x20\x2d\x37\x32\x2e\x38\x20\x33\x36\x2e\x38\x20\
+\x2d\x37\x38\x20\x33\x39\x2e\x38\x43\x2d\x38\x33\x2e\x32\x20\x34\
+\x32\x2e\x38\x20\x2d\x39\x35\x2e\x32\x20\x34\x39\x2e\x38\x20\x2d\
+\x39\x36\x2e\x34\x20\x35\x33\x2e\x36\x43\x2d\x39\x37\x2e\x36\x20\
+\x35\x37\x2e\x34\x20\x2d\x31\x30\x30\x2e\x38\x20\x36\x33\x2e\x32\
+\x20\x2d\x31\x30\x32\x2e\x38\x20\x36\x34\x2e\x38\x43\x2d\x31\x30\
+\x34\x2e\x38\x20\x36\x36\x2e\x34\x20\x2d\x31\x30\x37\x2e\x36\x20\
+\x37\x30\x2e\x36\x20\x2d\x31\x30\x38\x20\x37\x34\x43\x2d\x31\x30\
+\x38\x20\x37\x34\x20\x2d\x31\x30\x39\x2e\x32\x20\x37\x38\x20\x2d\
+\x31\x31\x30\x2e\x36\x20\x37\x39\x2e\x32\x43\x2d\x31\x31\x32\x20\
+\x38\x30\x2e\x34\x20\x2d\x31\x31\x32\x2e\x32\x20\x38\x33\x2e\x36\
+\x20\x2d\x31\x31\x32\x2e\x32\x20\x38\x35\x2e\x36\x43\x2d\x31\x31\
+\x32\x2e\x32\x20\x38\x37\x2e\x36\x20\x2d\x31\x31\x34\x2e\x32\x20\
+\x39\x30\x2e\x34\x20\x2d\x31\x31\x34\x20\x39\x32\x2e\x38\x43\x2d\
+\x31\x31\x34\x20\x39\x32\x2e\x38\x20\x2d\x31\x31\x33\x2e\x32\x20\
+\x31\x31\x31\x2e\x38\x30\x31\x20\x2d\x31\x31\x33\x2e\x36\x20\x31\
+\x31\x33\x2e\x38\x30\x31\x4c\x2d\x31\x31\x31\x2e\x36\x20\x31\x31\
+\x30\x2e\x30\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x32\x30\
+\x2e\x32\x20\x31\x31\x34\x2e\x36\x30\x31\x43\x2d\x31\x32\x30\x2e\
+\x32\x20\x31\x31\x34\x2e\x36\x30\x31\x20\x2d\x31\x32\x32\x2e\x32\
+\x20\x31\x31\x33\x2e\x32\x30\x31\x20\x2d\x31\x32\x36\x2e\x36\x20\
+\x31\x31\x39\x2e\x32\x30\x31\x43\x2d\x31\x32\x36\x2e\x36\x20\x31\
+\x31\x39\x2e\x32\x30\x31\x20\x2d\x31\x31\x39\x2e\x33\x20\x31\x35\
+\x32\x2e\x32\x30\x31\x20\x2d\x31\x31\x39\x2e\x33\x20\x31\x35\x33\
+\x2e\x36\x30\x31\x43\x2d\x31\x31\x39\x2e\x33\x20\x31\x35\x33\x2e\
+\x36\x30\x31\x20\x2d\x31\x31\x38\x2e\x32\x20\x31\x35\x31\x2e\x35\
+\x30\x31\x20\x2d\x31\x31\x39\x2e\x35\x20\x31\x34\x34\x2e\x33\x30\
+\x31\x43\x2d\x31\x32\x30\x2e\x38\x20\x31\x33\x37\x2e\x31\x30\x31\
+\x20\x2d\x31\x32\x31\x2e\x37\x20\x31\x32\x34\x2e\x34\x30\x31\x20\
+\x2d\x31\x32\x31\x2e\x37\x20\x31\x32\x34\x2e\x34\x30\x31\x4c\x2d\
+\x31\x32\x30\x2e\x32\x20\x31\x31\x34\x2e\x36\x30\x31\x7a\x22\x7d\
+\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\
+\x39\x39\x32\x36\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x39\x38\x2e\x36\x20\x35\x34\x43\x2d\x39\x38\
+\x2e\x36\x20\x35\x34\x20\x2d\x31\x31\x36\x2e\x32\x20\x35\x37\x2e\
+\x32\x20\x2d\x31\x31\x35\x2e\x38\x20\x38\x36\x2e\x34\x4c\x2d\x31\
+\x31\x36\x2e\x36\x20\x31\x31\x31\x2e\x32\x30\x31\x43\x2d\x31\x31\
+\x36\x2e\x36\x20\x31\x31\x31\x2e\x32\x30\x31\x20\x2d\x31\x31\x37\
+\x2e\x38\x20\x38\x35\x2e\x36\x20\x2d\x31\x31\x39\x20\x38\x34\x43\
+\x2d\x31\x32\x30\x2e\x32\x20\x38\x32\x2e\x34\x20\x2d\x31\x31\x36\
+\x2e\x32\x20\x37\x31\x2e\x32\x20\x2d\x31\x31\x39\x2e\x34\x20\x37\
+\x37\x2e\x32\x43\x2d\x31\x31\x39\x2e\x34\x20\x37\x37\x2e\x32\x20\
+\x2d\x31\x33\x33\x2e\x34\x20\x39\x31\x2e\x32\x20\x2d\x31\x32\x35\
+\x2e\x34\x20\x31\x31\x32\x2e\x34\x30\x31\x43\x2d\x31\x32\x35\x2e\
+\x34\x20\x31\x31\x32\x2e\x34\x30\x31\x20\x2d\x31\x32\x33\x2e\x39\
+\x20\x31\x31\x35\x2e\x37\x30\x31\x20\x2d\x31\x32\x36\x2e\x39\x20\
+\x31\x31\x31\x2e\x31\x30\x31\x43\x2d\x31\x32\x36\x2e\x39\x20\x31\
+\x31\x31\x2e\x31\x30\x31\x20\x2d\x31\x33\x31\x2e\x35\x20\x39\x38\
+\x2e\x35\x20\x2d\x31\x33\x30\x2e\x34\x20\x39\x32\x2e\x31\x43\x2d\
+\x31\x33\x30\x2e\x34\x20\x39\x32\x2e\x31\x20\x2d\x31\x33\x30\x2e\
+\x32\x20\x38\x39\x2e\x39\x20\x2d\x31\x32\x38\x2e\x33\x20\x38\x37\
+\x2e\x31\x43\x2d\x31\x32\x38\x2e\x33\x20\x38\x37\x2e\x31\x20\x2d\
+\x31\x31\x39\x2e\x37\x20\x37\x35\x2e\x34\x20\x2d\x31\x31\x37\x20\
+\x37\x33\x2e\x31\x43\x2d\x31\x31\x37\x20\x37\x33\x2e\x31\x20\x2d\
+\x31\x31\x35\x2e\x32\x20\x35\x38\x2e\x37\x20\x2d\x39\x39\x2e\x38\
+\x20\x35\x33\x2e\x35\x43\x2d\x39\x39\x2e\x38\x20\x35\x33\x2e\x35\
+\x20\x2d\x39\x34\x2e\x31\x20\x35\x31\x2e\x32\x20\x2d\x39\x38\x2e\
+\x36\x20\x35\x34\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x34\x30\x2e\x38\x20\
+\x2d\x31\x32\x2e\x32\x43\x34\x31\x2e\x34\x36\x20\x2d\x31\x32\x2e\
+\x35\x35\x34\x20\x34\x31\x2e\x34\x35\x31\x20\x2d\x31\x33\x2e\x35\
+\x32\x34\x20\x34\x32\x2e\x30\x33\x31\x20\x2d\x31\x33\x2e\x36\x39\
+\x37\x43\x34\x33\x2e\x31\x38\x20\x2d\x31\x34\x2e\x30\x34\x31\x20\
+\x34\x33\x2e\x33\x34\x34\x20\x2d\x31\x35\x2e\x31\x30\x38\x20\x34\
+\x33\x2e\x38\x36\x32\x20\x2d\x31\x35\x2e\x38\x39\x32\x43\x34\x34\
+\x2e\x37\x33\x35\x20\x2d\x31\x37\x2e\x32\x31\x31\x20\x34\x34\x2e\
+\x39\x32\x38\x20\x2d\x31\x38\x2e\x37\x34\x34\x20\x34\x35\x2e\x35\
+\x31\x20\x2d\x32\x30\x2e\x32\x33\x35\x43\x34\x35\x2e\x37\x38\x32\
+\x20\x2d\x32\x30\x2e\x39\x33\x35\x20\x34\x35\x2e\x38\x30\x39\x20\
+\x2d\x32\x31\x2e\x38\x39\x20\x34\x35\x2e\x34\x39\x36\x20\x2d\x32\
+\x32\x2e\x35\x35\x43\x34\x34\x2e\x33\x32\x32\x20\x2d\x32\x35\x2e\
+\x30\x33\x31\x20\x34\x33\x2e\x36\x32\x20\x2d\x32\x37\x2e\x34\x38\
+\x20\x34\x32\x2e\x31\x37\x38\x20\x2d\x32\x39\x2e\x39\x30\x36\x43\
+\x34\x31\x2e\x39\x31\x20\x2d\x33\x30\x2e\x33\x35\x36\x20\x34\x31\
+\x2e\x36\x34\x38\x20\x2d\x33\x31\x2e\x31\x35\x20\x34\x31\x2e\x34\
+\x34\x37\x20\x2d\x33\x31\x2e\x37\x34\x38\x43\x34\x30\x2e\x39\x38\
+\x34\x20\x2d\x33\x33\x2e\x31\x33\x32\x20\x33\x39\x2e\x37\x32\x37\
+\x20\x2d\x33\x34\x2e\x31\x32\x33\x20\x33\x38\x2e\x38\x36\x37\x20\
+\x2d\x33\x35\x2e\x34\x34\x33\x43\x33\x38\x2e\x35\x37\x39\x20\x2d\
+\x33\x35\x2e\x38\x38\x34\x20\x33\x39\x2e\x31\x30\x34\x20\x2d\x33\
+\x36\x2e\x38\x30\x39\x20\x33\x38\x2e\x33\x38\x38\x20\x2d\x33\x36\
+\x2e\x38\x39\x33\x43\x33\x37\x2e\x34\x39\x31\x20\x2d\x33\x36\x2e\
+\x39\x39\x38\x20\x33\x36\x2e\x30\x34\x32\x20\x2d\x33\x37\x2e\x35\
+\x37\x38\x20\x33\x35\x2e\x38\x30\x39\x20\x2d\x33\x36\x2e\x35\x35\
+\x32\x43\x33\x35\x2e\x32\x32\x31\x20\x2d\x33\x33\x2e\x39\x36\x35\
+\x20\x33\x36\x2e\x32\x33\x32\x20\x2d\x33\x31\x2e\x34\x34\x32\x20\
+\x33\x37\x2e\x32\x20\x2d\x32\x39\x43\x33\x36\x2e\x34\x31\x38\x20\
+\x2d\x32\x38\x2e\x33\x30\x38\x20\x33\x36\x2e\x37\x35\x32\x20\x2d\
+\x32\x37\x2e\x33\x38\x37\x20\x33\x36\x2e\x39\x30\x34\x20\x2d\x32\
+\x36\x2e\x36\x32\x43\x33\x37\x2e\x36\x31\x34\x20\x2d\x32\x33\x2e\
+\x30\x31\x34\x20\x33\x36\x2e\x34\x31\x36\x20\x2d\x31\x39\x2e\x36\
+\x36\x32\x20\x33\x35\x2e\x36\x35\x35\x20\x2d\x31\x36\x2e\x31\x38\
+\x38\x43\x33\x35\x2e\x36\x33\x32\x20\x2d\x31\x36\x2e\x30\x38\x34\
+\x20\x33\x35\x2e\x39\x37\x34\x20\x2d\x31\x35\x2e\x38\x38\x36\x20\
+\x33\x35\x2e\x39\x34\x36\x20\x2d\x31\x35\x2e\x38\x32\x34\x43\x33\
+\x34\x2e\x37\x32\x34\x20\x2d\x31\x33\x2e\x31\x33\x38\x20\x33\x33\
+\x2e\x32\x37\x32\x20\x2d\x31\x30\x2e\x36\x39\x33\x20\x33\x31\x2e\
+\x34\x35\x33\x20\x2d\x38\x2e\x33\x31\x32\x43\x33\x30\x2e\x36\x39\
+\x35\x20\x2d\x37\x2e\x33\x32\x20\x32\x39\x2e\x38\x32\x33\x20\x2d\
+\x36\x2e\x34\x30\x34\x20\x32\x39\x2e\x33\x32\x36\x20\x2d\x35\x2e\
+\x33\x34\x31\x43\x32\x38\x2e\x39\x35\x38\x20\x2d\x34\x2e\x35\x35\
+\x34\x20\x32\x38\x2e\x35\x35\x20\x2d\x33\x2e\x35\x38\x38\x20\x32\
+\x38\x2e\x38\x20\x2d\x32\x2e\x36\x43\x32\x35\x2e\x33\x36\x35\x20\
+\x30\x2e\x31\x38\x20\x32\x33\x2e\x31\x31\x35\x20\x34\x2e\x30\x32\
+\x35\x20\x32\x30\x2e\x35\x30\x34\x20\x37\x2e\x38\x37\x31\x43\x32\
+\x30\x2e\x30\x34\x32\x20\x38\x2e\x35\x35\x31\x20\x32\x30\x2e\x33\
+\x33\x33\x20\x39\x2e\x37\x36\x20\x32\x30\x2e\x38\x38\x34\x20\x31\
+\x30\x2e\x30\x32\x39\x43\x32\x31\x2e\x36\x39\x37\x20\x31\x30\x2e\
+\x34\x32\x37\x20\x32\x32\x2e\x36\x35\x33\x20\x39\x2e\x34\x30\x33\
+\x20\x32\x33\x2e\x31\x32\x33\x20\x38\x2e\x35\x35\x37\x43\x32\x33\
+\x2e\x35\x31\x32\x20\x37\x2e\x38\x35\x39\x20\x32\x33\x2e\x38\x36\
+\x35\x20\x37\x2e\x32\x30\x39\x20\x32\x34\x2e\x33\x35\x36\x20\x36\
+\x2e\x35\x36\x36\x43\x32\x34\x2e\x34\x38\x39\x20\x36\x2e\x33\x39\
+\x31\x20\x32\x34\x2e\x33\x31\x20\x35\x2e\x39\x37\x32\x20\x32\x34\
+\x2e\x34\x34\x35\x20\x35\x2e\x38\x35\x31\x43\x32\x37\x2e\x30\x37\
+\x38\x20\x33\x2e\x35\x30\x34\x20\x32\x38\x2e\x37\x34\x37\x20\x30\
+\x2e\x35\x36\x38\x20\x33\x31\x2e\x32\x20\x2d\x31\x2e\x38\x43\x33\
+\x33\x2e\x31\x35\x20\x2d\x32\x2e\x31\x32\x39\x20\x33\x34\x2e\x36\
+\x38\x37\x20\x2d\x33\x2e\x31\x32\x37\x20\x33\x36\x2e\x34\x33\x35\
+\x20\x2d\x34\x2e\x31\x34\x43\x33\x36\x2e\x37\x34\x33\x20\x2d\x34\
+\x2e\x33\x31\x39\x20\x33\x37\x2e\x32\x36\x37\x20\x2d\x34\x2e\x30\
+\x37\x20\x33\x37\x2e\x35\x35\x37\x20\x2d\x34\x2e\x32\x36\x35\x43\
+\x33\x39\x2e\x33\x31\x20\x2d\x35\x2e\x34\x34\x32\x20\x33\x39\x2e\
+\x33\x30\x38\x20\x2d\x37\x2e\x34\x37\x38\x20\x33\x39\x2e\x34\x31\
+\x34\x20\x2d\x39\x2e\x33\x38\x38\x43\x33\x39\x2e\x34\x36\x34\x20\
+\x2d\x31\x30\x2e\x32\x37\x32\x20\x33\x39\x2e\x36\x36\x20\x2d\x31\
+\x31\x2e\x35\x38\x39\x20\x34\x30\x2e\x38\x20\x2d\x31\x32\x2e\x32\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x33\x31\x2e\x39\x35\x39\x20\x2d\x31\
+\x36\x2e\x36\x36\x36\x43\x33\x32\x2e\x30\x38\x33\x20\x2d\x31\x36\
+\x2e\x37\x34\x33\x20\x33\x31\x2e\x39\x32\x38\x20\x2d\x31\x37\x2e\
+\x31\x36\x36\x20\x33\x32\x2e\x30\x33\x37\x20\x2d\x31\x37\x2e\x33\
+\x38\x32\x43\x33\x32\x2e\x31\x39\x39\x20\x2d\x31\x37\x2e\x37\x30\
+\x36\x20\x33\x32\x2e\x36\x30\x32\x20\x2d\x31\x37\x2e\x38\x39\x34\
+\x20\x33\x32\x2e\x37\x36\x34\x20\x2d\x31\x38\x2e\x32\x31\x38\x43\
+\x33\x32\x2e\x38\x37\x33\x20\x2d\x31\x38\x2e\x34\x33\x34\x20\x33\
+\x32\x2e\x37\x31\x20\x2d\x31\x38\x2e\x38\x31\x34\x20\x33\x32\x2e\
+\x38\x34\x36\x20\x2d\x31\x38\x2e\x39\x35\x36\x43\x33\x35\x2e\x31\
+\x37\x39\x20\x2d\x32\x31\x2e\x34\x30\x33\x20\x33\x35\x2e\x34\x33\
+\x36\x20\x2d\x32\x34\x2e\x34\x32\x37\x20\x33\x34\x2e\x34\x20\x2d\
+\x32\x37\x2e\x34\x43\x33\x35\x2e\x34\x32\x34\x20\x2d\x32\x38\x2e\
+\x30\x32\x20\x33\x35\x2e\x34\x38\x35\x20\x2d\x32\x39\x2e\x32\x38\
+\x32\x20\x33\x35\x2e\x30\x36\x20\x2d\x33\x30\x2e\x31\x32\x39\x43\
+\x33\x34\x2e\x32\x30\x37\x20\x2d\x33\x31\x2e\x38\x32\x39\x20\x33\
+\x34\x2e\x30\x31\x34\x20\x2d\x33\x33\x2e\x37\x35\x35\x20\x33\x33\
+\x2e\x30\x33\x39\x20\x2d\x33\x35\x2e\x32\x39\x38\x43\x33\x32\x2e\
+\x32\x33\x37\x20\x2d\x33\x36\x2e\x35\x36\x37\x20\x33\x30\x2e\x36\
+\x35\x39\x20\x2d\x33\x37\x2e\x38\x31\x31\x20\x32\x39\x2e\x32\x38\
+\x38\x20\x2d\x33\x36\x2e\x35\x30\x38\x43\x32\x38\x2e\x38\x36\x37\
+\x20\x2d\x33\x36\x2e\x31\x30\x38\x20\x32\x38\x2e\x35\x34\x36\x20\
+\x2d\x33\x35\x2e\x33\x32\x31\x20\x32\x38\x2e\x38\x32\x34\x20\x2d\
+\x33\x34\x2e\x36\x30\x39\x43\x32\x38\x2e\x38\x38\x38\x20\x2d\x33\
+\x34\x2e\x34\x34\x36\x20\x32\x39\x2e\x31\x37\x33\x20\x2d\x33\x34\
+\x2e\x33\x20\x32\x39\x2e\x31\x34\x36\x20\x2d\x33\x34\x2e\x32\x31\
+\x38\x43\x32\x39\x2e\x30\x33\x39\x20\x2d\x33\x33\x2e\x38\x39\x34\
+\x20\x32\x38\x2e\x34\x39\x33\x20\x2d\x33\x33\x2e\x36\x37\x20\x32\
+\x38\x2e\x34\x38\x37\x20\x2d\x33\x33\x2e\x33\x39\x38\x43\x32\x38\
+\x2e\x34\x35\x37\x20\x2d\x33\x31\x2e\x39\x30\x32\x20\x32\x37\x2e\
+\x35\x30\x33\x20\x2d\x33\x30\x2e\x33\x39\x31\x20\x32\x38\x2e\x31\
+\x33\x33\x20\x2d\x32\x39\x2e\x30\x36\x32\x43\x32\x38\x2e\x39\x30\
+\x35\x20\x2d\x32\x37\x2e\x34\x33\x33\x20\x32\x39\x2e\x37\x32\x34\
+\x20\x2d\x32\x35\x2e\x35\x37\x36\x20\x33\x30\x2e\x34\x20\x2d\x32\
+\x33\x2e\x38\x43\x32\x39\x2e\x31\x36\x36\x20\x2d\x32\x31\x2e\x36\
+\x38\x34\x20\x33\x30\x2e\x31\x39\x39\x20\x2d\x31\x39\x2e\x32\x33\
+\x35\x20\x32\x38\x2e\x34\x34\x36\x20\x2d\x31\x37\x2e\x33\x35\x38\
+\x43\x32\x38\x2e\x33\x31\x20\x2d\x31\x37\x2e\x32\x31\x32\x20\x32\
+\x38\x2e\x33\x31\x39\x20\x2d\x31\x36\x2e\x38\x32\x36\x20\x32\x38\
+\x2e\x34\x34\x31\x20\x2d\x31\x36\x2e\x36\x32\x34\x43\x32\x38\x2e\
+\x37\x33\x33\x20\x2d\x31\x36\x2e\x31\x33\x38\x20\x32\x39\x2e\x31\
+\x33\x39\x20\x2d\x31\x35\x2e\x37\x33\x32\x20\x32\x39\x2e\x36\x32\
+\x35\x20\x2d\x31\x35\x2e\x34\x34\x43\x32\x39\x2e\x38\x32\x37\x20\
+\x2d\x31\x35\x2e\x33\x31\x39\x20\x33\x30\x2e\x31\x37\x35\x20\x2d\
+\x31\x35\x2e\x33\x31\x37\x20\x33\x30\x2e\x33\x37\x35\x20\x2d\x31\
+\x35\x2e\x34\x34\x31\x43\x33\x30\x2e\x39\x35\x33\x20\x2d\x31\x35\
+\x2e\x38\x30\x33\x20\x33\x31\x2e\x33\x35\x31\x20\x2d\x31\x36\x2e\
+\x32\x39\x20\x33\x31\x2e\x39\x35\x39\x20\x2d\x31\x36\x2e\x36\x36\
+\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x39\x34\x2e\x37\x37\x31\x20\x2d\
+\x32\x36\x2e\x39\x37\x37\x43\x39\x36\x2e\x31\x36\x20\x2d\x32\x35\
+\x2e\x31\x38\x35\x20\x39\x36\x2e\x34\x35\x20\x2d\x32\x32\x2e\x33\
+\x39\x20\x39\x34\x2e\x34\x30\x31\x20\x2d\x32\x31\x43\x39\x34\x2e\
+\x39\x35\x31\x20\x2d\x31\x37\x2e\x36\x39\x31\x20\x39\x38\x2e\x33\
+\x30\x32\x20\x2d\x31\x39\x2e\x36\x37\x20\x31\x30\x30\x2e\x34\x30\
+\x31\x20\x2d\x32\x30\x2e\x32\x43\x31\x30\x30\x2e\x32\x39\x32\x20\
+\x2d\x32\x30\x2e\x35\x38\x38\x20\x31\x30\x30\x2e\x35\x31\x39\x20\
+\x2d\x32\x30\x2e\x39\x33\x32\x20\x31\x30\x30\x2e\x38\x30\x32\x20\
+\x2d\x32\x30\x2e\x39\x33\x37\x43\x31\x30\x31\x2e\x38\x35\x39\x20\
+\x2d\x32\x30\x2e\x39\x35\x32\x20\x31\x30\x32\x2e\x35\x33\x39\x20\
+\x2d\x32\x31\x2e\x39\x38\x34\x20\x31\x30\x33\x2e\x36\x30\x31\x20\
+\x2d\x32\x31\x2e\x38\x43\x31\x30\x34\x2e\x30\x33\x35\x20\x2d\x32\
+\x33\x2e\x33\x35\x37\x20\x31\x30\x35\x2e\x36\x37\x33\x20\x2d\x32\
+\x34\x2e\x30\x35\x39\x20\x31\x30\x36\x2e\x33\x31\x37\x20\x2d\x32\
+\x35\x2e\x34\x33\x39\x43\x31\x30\x38\x2e\x30\x34\x33\x20\x2d\x32\
+\x39\x2e\x31\x33\x34\x20\x31\x30\x37\x2e\x34\x35\x32\x20\x2d\x33\
+\x33\x2e\x34\x30\x37\x20\x31\x30\x34\x2e\x38\x36\x38\x20\x2d\x33\
+\x36\x2e\x36\x35\x33\x43\x31\x30\x34\x2e\x36\x36\x36\x20\x2d\x33\
+\x36\x2e\x39\x30\x37\x20\x31\x30\x34\x2e\x38\x38\x33\x20\x2d\x33\
+\x37\x2e\x34\x32\x34\x20\x31\x30\x34\x2e\x37\x35\x39\x20\x2d\x33\
+\x37\x2e\x37\x38\x36\x43\x31\x30\x34\x2e\x30\x30\x33\x20\x2d\x33\
+\x39\x2e\x39\x39\x37\x20\x31\x30\x31\x2e\x39\x33\x35\x20\x2d\x34\
+\x30\x2e\x33\x31\x32\x20\x31\x30\x30\x2e\x30\x30\x31\x20\x2d\x34\
+\x31\x43\x39\x38\x2e\x38\x32\x34\x20\x2d\x34\x34\x2e\x38\x37\x35\
+\x20\x39\x38\x2e\x31\x36\x33\x20\x2d\x34\x38\x2e\x39\x30\x36\x20\
+\x39\x36\x2e\x34\x30\x31\x20\x2d\x35\x32\x2e\x36\x43\x39\x34\x2e\
+\x37\x38\x37\x20\x2d\x35\x32\x2e\x38\x35\x20\x39\x34\x2e\x30\x38\
+\x39\x20\x2d\x35\x34\x2e\x35\x38\x39\x20\x39\x32\x2e\x37\x35\x32\
+\x20\x2d\x35\x35\x2e\x33\x30\x39\x43\x39\x31\x2e\x34\x31\x39\x20\
+\x2d\x35\x36\x2e\x30\x32\x38\x20\x39\x30\x2e\x38\x35\x31\x20\x2d\
+\x35\x34\x2e\x34\x34\x39\x20\x39\x30\x2e\x38\x39\x32\x20\x2d\x35\
+\x33\x2e\x34\x30\x33\x43\x39\x30\x2e\x38\x39\x39\x20\x2d\x35\x33\
+\x2e\x31\x39\x38\x20\x39\x31\x2e\x33\x35\x31\x20\x2d\x35\x32\x2e\
+\x39\x37\x34\x20\x39\x31\x2e\x31\x38\x31\x20\x2d\x35\x32\x2e\x36\
+\x30\x39\x43\x39\x31\x2e\x31\x30\x35\x20\x2d\x35\x32\x2e\x34\x34\
+\x35\x20\x39\x30\x2e\x38\x34\x35\x20\x2d\x35\x32\x2e\x33\x33\x34\
+\x20\x39\x30\x2e\x38\x34\x35\x20\x2d\x35\x32\x2e\x32\x43\x39\x30\
+\x2e\x38\x34\x36\x20\x2d\x35\x32\x2e\x30\x36\x35\x20\x39\x31\x2e\
+\x30\x36\x37\x20\x2d\x35\x31\x2e\x39\x33\x34\x20\x39\x31\x2e\x32\
+\x30\x31\x20\x2d\x35\x31\x2e\x38\x43\x39\x30\x2e\x32\x38\x33\x20\
+\x2d\x35\x30\x2e\x39\x38\x20\x38\x38\x2e\x38\x36\x20\x2d\x35\x30\
+\x2e\x35\x30\x33\x20\x38\x38\x2e\x35\x36\x35\x20\x2d\x34\x39\x2e\
+\x33\x35\x38\x43\x38\x37\x2e\x36\x31\x31\x20\x2d\x34\x35\x2e\x36\
+\x34\x38\x20\x39\x30\x2e\x31\x38\x34\x20\x2d\x34\x32\x2e\x35\x32\
+\x33\x20\x39\x31\x2e\x38\x35\x32\x20\x2d\x33\x39\x2e\x33\x32\x32\
+\x43\x39\x32\x2e\x34\x34\x33\x20\x2d\x33\x38\x2e\x31\x38\x37\x20\
+\x39\x31\x2e\x37\x30\x37\x20\x2d\x33\x36\x2e\x39\x31\x36\x20\x39\
+\x30\x2e\x39\x34\x37\x20\x2d\x33\x35\x2e\x37\x30\x38\x43\x39\x30\
+\x2e\x35\x30\x39\x20\x2d\x33\x35\x2e\x30\x31\x33\x20\x39\x30\x2e\
+\x36\x31\x37\x20\x2d\x33\x33\x2e\x38\x38\x36\x20\x39\x30\x2e\x38\
+\x39\x33\x20\x2d\x33\x33\x2e\x30\x33\x43\x39\x31\x2e\x36\x34\x35\
+\x20\x2d\x33\x30\x2e\x36\x39\x39\x20\x39\x33\x2e\x32\x33\x36\x20\
+\x2d\x32\x38\x2e\x39\x36\x20\x39\x34\x2e\x37\x37\x31\x20\x2d\x32\
+\x36\x2e\x39\x37\x37\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x35\x37\x2e\x36\
+\x31\x31\x20\x2d\x38\x2e\x35\x39\x31\x43\x35\x36\x2e\x31\x32\x34\
+\x20\x2d\x36\x2e\x37\x34\x20\x35\x32\x2e\x37\x31\x32\x20\x2d\x34\
+\x2e\x31\x37\x31\x20\x35\x35\x2e\x36\x32\x39\x20\x2d\x32\x2e\x32\
+\x34\x33\x43\x35\x35\x2e\x38\x32\x33\x20\x2d\x32\x2e\x31\x31\x34\
+\x20\x35\x36\x2e\x31\x39\x33\x20\x2d\x32\x2e\x31\x31\x20\x35\x36\
+\x2e\x33\x36\x36\x20\x2d\x32\x2e\x32\x34\x34\x43\x35\x38\x2e\x33\
+\x38\x37\x20\x2d\x33\x2e\x38\x30\x39\x20\x36\x30\x2e\x33\x39\x20\
+\x2d\x34\x2e\x37\x31\x32\x20\x36\x32\x2e\x38\x32\x36\x20\x2d\x35\
+\x2e\x32\x39\x34\x43\x36\x32\x2e\x39\x35\x20\x2d\x35\x2e\x33\x32\
+\x33\x20\x36\x33\x2e\x32\x32\x34\x20\x2d\x34\x2e\x38\x35\x36\x20\
+\x36\x33\x2e\x35\x39\x33\x20\x2d\x35\x2e\x30\x31\x37\x43\x36\x35\
+\x2e\x32\x30\x36\x20\x2d\x35\x2e\x37\x32\x20\x36\x37\x2e\x32\x31\
+\x36\x20\x2d\x35\x2e\x36\x36\x32\x20\x36\x38\x2e\x34\x20\x2d\x37\
+\x43\x37\x32\x2e\x31\x36\x37\x20\x2d\x36\x2e\x37\x37\x36\x20\x37\
+\x35\x2e\x37\x33\x32\x20\x2d\x37\x2e\x38\x39\x32\x20\x37\x39\x2e\
+\x31\x32\x33\x20\x2d\x39\x2e\x32\x43\x38\x30\x2e\x32\x38\x34\x20\
+\x2d\x39\x2e\x36\x34\x38\x20\x38\x31\x2e\x35\x35\x34\x20\x2d\x31\
+\x30\x2e\x32\x30\x37\x20\x38\x32\x2e\x37\x35\x35\x20\x2d\x31\x30\
+\x2e\x37\x30\x39\x43\x38\x34\x2e\x31\x33\x31\x20\x2d\x31\x31\x2e\
+\x32\x38\x35\x20\x38\x35\x2e\x33\x33\x35\x20\x2d\x31\x32\x2e\x32\
+\x31\x33\x20\x38\x36\x2e\x34\x34\x37\x20\x2d\x31\x33\x2e\x33\x35\
+\x34\x43\x38\x36\x2e\x35\x38\x20\x2d\x31\x33\x2e\x34\x39\x20\x38\
+\x36\x2e\x39\x33\x34\x20\x2d\x31\x33\x2e\x34\x20\x38\x37\x2e\x32\
+\x30\x31\x20\x2d\x31\x33\x2e\x34\x43\x38\x37\x2e\x31\x36\x31\x20\
+\x2d\x31\x34\x2e\x32\x36\x33\x20\x38\x38\x2e\x31\x32\x33\x20\x2d\
+\x31\x34\x2e\x33\x39\x20\x38\x38\x2e\x33\x37\x20\x2d\x31\x35\x2e\
+\x30\x31\x32\x43\x38\x38\x2e\x34\x36\x32\x20\x2d\x31\x35\x2e\x32\
+\x34\x34\x20\x38\x38\x2e\x33\x31\x32\x20\x2d\x31\x35\x2e\x36\x34\
+\x20\x38\x38\x2e\x34\x34\x35\x20\x2d\x31\x35\x2e\x37\x34\x32\x43\
+\x39\x30\x2e\x35\x38\x33\x20\x2d\x31\x37\x2e\x33\x37\x32\x20\x39\
+\x31\x2e\x35\x30\x33\x20\x2d\x31\x39\x2e\x33\x39\x20\x39\x30\x2e\
+\x33\x33\x34\x20\x2d\x32\x31\x2e\x37\x36\x37\x43\x39\x30\x2e\x30\
+\x34\x39\x20\x2d\x32\x32\x2e\x33\x34\x35\x20\x38\x39\x2e\x38\x20\
+\x2d\x32\x32\x2e\x39\x36\x33\x20\x38\x39\x2e\x32\x33\x34\x20\x2d\
+\x32\x33\x2e\x34\x33\x39\x43\x38\x38\x2e\x31\x34\x39\x20\x2d\x32\
+\x34\x2e\x33\x35\x20\x38\x37\x2e\x30\x34\x37\x20\x2d\x32\x33\x2e\
+\x34\x39\x36\x20\x38\x36\x20\x2d\x32\x33\x2e\x38\x43\x38\x35\x2e\
+\x38\x34\x31\x20\x2d\x32\x33\x2e\x31\x37\x32\x20\x38\x35\x2e\x31\
+\x31\x32\x20\x2d\x32\x33\x2e\x33\x34\x34\x20\x38\x34\x2e\x37\x32\
+\x36\x20\x2d\x32\x33\x2e\x31\x34\x36\x43\x38\x33\x2e\x38\x36\x37\
+\x20\x2d\x32\x32\x2e\x37\x30\x37\x20\x38\x32\x2e\x35\x33\x34\x20\
+\x2d\x32\x33\x2e\x32\x39\x32\x20\x38\x31\x2e\x36\x37\x35\x20\x2d\
+\x32\x32\x2e\x38\x35\x34\x43\x38\x30\x2e\x33\x31\x33\x20\x2d\x32\
+\x32\x2e\x31\x35\x39\x20\x37\x39\x2e\x30\x37\x32\x20\x2d\x32\x31\
+\x2e\x39\x39\x20\x37\x37\x2e\x36\x35\x20\x2d\x32\x31\x2e\x36\x31\
+\x33\x43\x37\x37\x2e\x33\x33\x38\x20\x2d\x32\x31\x2e\x35\x33\x31\
+\x20\x37\x36\x2e\x35\x36\x20\x2d\x32\x31\x2e\x36\x32\x37\x20\x37\
+\x36\x2e\x34\x20\x2d\x32\x31\x43\x37\x36\x2e\x32\x36\x36\x20\x2d\
+\x32\x31\x2e\x31\x33\x34\x20\x37\x36\x2e\x31\x31\x38\x20\x2d\x32\
+\x31\x2e\x33\x36\x38\x20\x37\x36\x2e\x30\x31\x32\x20\x2d\x32\x31\
+\x2e\x33\x34\x36\x43\x37\x34\x2e\x31\x30\x34\x20\x2d\x32\x30\x2e\
+\x39\x35\x20\x37\x32\x2e\x38\x34\x34\x20\x2d\x32\x30\x2e\x37\x33\
+\x36\x20\x37\x31\x2e\x35\x34\x33\x20\x2d\x31\x39\x2e\x30\x34\x34\
+\x43\x37\x31\x2e\x34\x34\x20\x2d\x31\x38\x2e\x39\x31\x31\x20\x37\
+\x30\x2e\x39\x39\x38\x20\x2d\x31\x39\x2e\x30\x39\x20\x37\x30\x2e\
+\x38\x33\x39\x20\x2d\x31\x38\x2e\x39\x35\x35\x43\x36\x39\x2e\x38\
+\x38\x32\x20\x2d\x31\x38\x2e\x31\x34\x37\x20\x36\x39\x2e\x34\x37\
+\x37\x20\x2d\x31\x36\x2e\x39\x31\x33\x20\x36\x38\x2e\x33\x37\x36\
+\x20\x2d\x31\x36\x2e\x32\x34\x31\x43\x36\x38\x2e\x31\x37\x35\x20\
+\x2d\x31\x36\x2e\x31\x31\x38\x20\x36\x37\x2e\x38\x32\x33\x20\x2d\
+\x31\x36\x2e\x32\x38\x36\x20\x36\x37\x2e\x36\x32\x39\x20\x2d\x31\
+\x36\x2e\x31\x35\x37\x43\x36\x36\x2e\x39\x38\x33\x20\x2d\x31\x35\
+\x2e\x37\x32\x36\x20\x36\x36\x2e\x36\x31\x36\x20\x2d\x31\x35\x2e\
+\x30\x38\x35\x20\x36\x35\x2e\x39\x37\x34\x20\x2d\x31\x34\x2e\x36\
+\x33\x38\x43\x36\x35\x2e\x36\x34\x35\x20\x2d\x31\x34\x2e\x34\x30\
+\x39\x20\x36\x35\x2e\x32\x34\x35\x20\x2d\x31\x34\x2e\x37\x33\x34\
+\x20\x36\x35\x2e\x32\x37\x37\x20\x2d\x31\x34\x2e\x39\x39\x43\x36\
+\x35\x2e\x35\x32\x32\x20\x2d\x31\x36\x2e\x39\x33\x37\x20\x36\x36\
+\x2e\x31\x37\x35\x20\x2d\x31\x38\x2e\x37\x32\x34\x20\x36\x35\x2e\
+\x36\x20\x2d\x32\x30\x2e\x36\x43\x36\x37\x2e\x36\x37\x37\x20\x2d\
+\x32\x33\x2e\x31\x32\x20\x37\x30\x2e\x31\x39\x34\x20\x2d\x32\x35\
+\x2e\x30\x36\x39\x20\x37\x32\x20\x2d\x32\x37\x2e\x38\x43\x37\x32\
+\x2e\x30\x31\x35\x20\x2d\x32\x39\x2e\x39\x36\x36\x20\x37\x32\x2e\
+\x37\x30\x37\x20\x2d\x33\x32\x2e\x31\x31\x32\x20\x37\x32\x2e\x35\
+\x39\x34\x20\x2d\x33\x34\x2e\x31\x38\x39\x43\x37\x32\x2e\x35\x38\
+\x34\x20\x2d\x33\x34\x2e\x33\x38\x32\x20\x37\x32\x2e\x32\x39\x36\
+\x20\x2d\x33\x35\x2e\x31\x31\x35\x20\x37\x32\x2e\x31\x37\x20\x2d\
+\x33\x35\x2e\x34\x36\x32\x43\x37\x31\x2e\x38\x35\x38\x20\x2d\x33\
+\x36\x2e\x33\x31\x36\x20\x37\x32\x2e\x37\x36\x34\x20\x2d\x33\x37\
+\x2e\x33\x38\x32\x20\x37\x31\x2e\x39\x32\x20\x2d\x33\x38\x2e\x31\
+\x30\x36\x43\x37\x30\x2e\x35\x31\x36\x20\x2d\x33\x39\x2e\x33\x30\
+\x39\x20\x36\x39\x2e\x32\x32\x34\x20\x2d\x33\x38\x2e\x34\x33\x33\
+\x20\x36\x38\x2e\x34\x20\x2d\x33\x37\x43\x36\x36\x2e\x35\x36\x32\
+\x20\x2d\x33\x36\x2e\x36\x31\x20\x36\x34\x2e\x34\x39\x36\x20\x2d\
+\x33\x35\x2e\x39\x31\x37\x20\x36\x32\x2e\x39\x31\x38\x20\x2d\x33\
+\x37\x2e\x31\x35\x31\x43\x36\x31\x2e\x39\x31\x31\x20\x2d\x33\x37\
+\x2e\x39\x33\x38\x20\x36\x31\x2e\x33\x33\x33\x20\x2d\x33\x38\x2e\
+\x38\x34\x34\x20\x36\x30\x2e\x35\x33\x34\x20\x2d\x33\x39\x2e\x39\
+\x43\x35\x39\x2e\x35\x34\x39\x20\x2d\x34\x31\x2e\x32\x30\x32\x20\
+\x35\x39\x2e\x38\x38\x34\x20\x2d\x34\x32\x2e\x36\x33\x38\x20\x35\
+\x39\x2e\x39\x35\x34\x20\x2d\x34\x34\x2e\x32\x30\x32\x43\x35\x39\
+\x2e\x39\x36\x20\x2d\x34\x34\x2e\x33\x33\x20\x35\x39\x2e\x36\x34\
+\x35\x20\x2d\x34\x34\x2e\x34\x36\x36\x20\x35\x39\x2e\x36\x34\x35\
+\x20\x2d\x34\x34\x2e\x36\x43\x35\x39\x2e\x36\x34\x36\x20\x2d\x34\
+\x34\x2e\x37\x33\x35\x20\x35\x39\x2e\x38\x36\x36\x20\x2d\x34\x34\
+\x2e\x38\x36\x36\x20\x36\x30\x20\x2d\x34\x35\x43\x35\x39\x2e\x32\
+\x39\x34\x20\x2d\x34\x35\x2e\x36\x32\x36\x20\x35\x39\x2e\x30\x31\
+\x39\x20\x2d\x34\x36\x2e\x36\x38\x34\x20\x35\x38\x20\x2d\x34\x37\
+\x43\x35\x38\x2e\x33\x30\x35\x20\x2d\x34\x38\x2e\x30\x39\x32\x20\
+\x35\x37\x2e\x36\x32\x39\x20\x2d\x34\x38\x2e\x39\x37\x36\x20\x35\
+\x36\x2e\x37\x35\x38\x20\x2d\x34\x39\x2e\x32\x37\x38\x43\x35\x34\
+\x2e\x37\x36\x33\x20\x2d\x34\x39\x2e\x39\x36\x39\x20\x35\x33\x2e\
+\x30\x38\x36\x20\x2d\x34\x38\x2e\x30\x35\x37\x20\x35\x31\x2e\x31\
+\x39\x34\x20\x2d\x34\x37\x2e\x39\x38\x34\x43\x35\x30\x2e\x36\x38\
+\x20\x2d\x34\x37\x2e\x39\x36\x35\x20\x35\x30\x2e\x32\x31\x33\x20\
+\x2d\x34\x39\x2e\x30\x30\x33\x20\x34\x39\x2e\x35\x36\x34\x20\x2d\
+\x34\x39\x2e\x33\x32\x38\x43\x34\x39\x2e\x31\x33\x32\x20\x2d\x34\
+\x39\x2e\x35\x34\x34\x20\x34\x38\x2e\x34\x32\x38\x20\x2d\x34\x39\
+\x2e\x35\x37\x37\x20\x34\x38\x2e\x30\x36\x36\x20\x2d\x34\x39\x2e\
+\x33\x31\x31\x43\x34\x37\x2e\x33\x37\x38\x20\x2d\x34\x38\x2e\x38\
+\x30\x37\x20\x34\x36\x2e\x37\x38\x39\x20\x2d\x34\x38\x2e\x36\x39\
+\x33\x20\x34\x36\x2e\x30\x33\x31\x20\x2d\x34\x38\x2e\x34\x38\x38\
+\x43\x34\x34\x2e\x34\x31\x34\x20\x2d\x34\x38\x2e\x30\x35\x32\x20\
+\x34\x33\x2e\x31\x33\x36\x20\x2d\x34\x36\x2e\x39\x35\x38\x20\x34\
+\x31\x2e\x36\x35\x36\x20\x2d\x34\x36\x2e\x31\x30\x33\x43\x34\x30\
+\x2e\x31\x37\x31\x20\x2d\x34\x35\x2e\x32\x34\x36\x20\x33\x39\x2e\
+\x32\x31\x36\x20\x2d\x34\x33\x2e\x38\x30\x39\x20\x33\x38\x2e\x31\
+\x33\x36\x20\x2d\x34\x32\x2e\x34\x38\x39\x43\x33\x37\x2e\x31\x39\
+\x35\x20\x2d\x34\x31\x2e\x33\x33\x37\x20\x33\x37\x2e\x30\x35\x39\
+\x20\x2d\x33\x38\x2e\x39\x32\x33\x20\x33\x38\x2e\x34\x37\x39\x20\
+\x2d\x33\x38\x2e\x34\x32\x33\x43\x34\x30\x2e\x33\x32\x32\x20\x2d\
+\x33\x37\x2e\x37\x37\x33\x20\x34\x31\x2e\x36\x32\x36\x20\x2d\x34\
+\x30\x2e\x34\x37\x36\x20\x34\x33\x2e\x35\x39\x32\x20\x2d\x34\x30\
+\x2e\x31\x35\x43\x34\x33\x2e\x39\x30\x34\x20\x2d\x34\x30\x2e\x30\
+\x39\x39\x20\x34\x34\x2e\x31\x31\x20\x2d\x33\x39\x2e\x37\x38\x38\
+\x20\x34\x34\x20\x2d\x33\x39\x2e\x34\x43\x34\x34\x2e\x33\x38\x39\
+\x20\x2d\x33\x39\x2e\x32\x39\x31\x20\x34\x34\x2e\x36\x30\x37\x20\
+\x2d\x33\x39\x2e\x35\x32\x20\x34\x34\x2e\x38\x20\x2d\x33\x39\x2e\
+\x38\x43\x34\x35\x2e\x36\x35\x38\x20\x2d\x33\x38\x2e\x37\x38\x31\
+\x20\x34\x36\x2e\x38\x32\x32\x20\x2d\x33\x38\x2e\x34\x34\x34\x20\
+\x34\x37\x2e\x37\x36\x20\x2d\x33\x37\x2e\x35\x37\x31\x43\x34\x38\
+\x2e\x37\x33\x20\x2d\x33\x36\x2e\x36\x36\x37\x20\x35\x30\x2e\x34\
+\x37\x36\x20\x2d\x33\x37\x2e\x30\x38\x35\x20\x35\x31\x2e\x34\x39\
+\x31\x20\x2d\x33\x36\x2e\x30\x38\x38\x43\x35\x33\x2e\x30\x32\x20\
+\x2d\x33\x34\x2e\x35\x38\x36\x20\x35\x32\x2e\x34\x36\x31\x20\x2d\
+\x33\x31\x2e\x39\x30\x35\x20\x35\x34\x2e\x34\x20\x2d\x33\x30\x2e\
+\x36\x43\x35\x33\x2e\x38\x31\x34\x20\x2d\x32\x39\x2e\x32\x38\x37\
+\x20\x35\x33\x2e\x32\x30\x37\x20\x2d\x32\x38\x2e\x30\x31\x20\x35\
+\x32\x2e\x38\x37\x32\x20\x2d\x32\x36\x2e\x35\x38\x33\x43\x35\x32\
+\x2e\x35\x39\x20\x2d\x32\x35\x2e\x33\x37\x37\x20\x35\x33\x2e\x35\
+\x38\x34\x20\x2d\x32\x34\x2e\x31\x38\x20\x35\x34\x2e\x37\x39\x35\
+\x20\x2d\x32\x34\x2e\x32\x37\x31\x43\x35\x36\x2e\x30\x35\x33\x20\
+\x2d\x32\x34\x2e\x33\x36\x35\x20\x35\x36\x2e\x33\x31\x35\x20\x2d\
+\x32\x35\x2e\x31\x32\x34\x20\x35\x36\x2e\x38\x20\x2d\x32\x36\x2e\
+\x32\x43\x35\x37\x2e\x30\x36\x37\x20\x2d\x32\x35\x2e\x39\x33\x33\
+\x20\x35\x37\x2e\x35\x33\x36\x20\x2d\x32\x35\x2e\x36\x33\x36\x20\
+\x35\x37\x2e\x34\x39\x35\x20\x2d\x32\x35\x2e\x34\x32\x43\x35\x37\
+\x2e\x30\x33\x38\x20\x2d\x32\x33\x2e\x30\x33\x33\x20\x35\x36\x2e\
+\x30\x31\x31\x20\x2d\x32\x31\x2e\x30\x34\x20\x35\x35\x2e\x35\x35\
+\x33\x20\x2d\x31\x38\x2e\x36\x30\x39\x43\x35\x35\x2e\x34\x39\x34\
+\x20\x2d\x31\x38\x2e\x32\x39\x32\x20\x35\x35\x2e\x31\x38\x39\x20\
+\x2d\x31\x38\x2e\x30\x39\x20\x35\x34\x2e\x38\x20\x2d\x31\x38\x2e\
+\x32\x43\x35\x34\x2e\x33\x33\x32\x20\x2d\x31\x34\x2e\x30\x35\x31\
+\x20\x35\x30\x2e\x32\x38\x20\x2d\x31\x31\x2e\x36\x35\x37\x20\x34\
+\x37\x2e\x37\x33\x35\x20\x2d\x38\x2e\x34\x39\x32\x43\x34\x37\x2e\
+\x33\x33\x32\x20\x2d\x37\x2e\x39\x39\x20\x34\x37\x2e\x33\x32\x38\
+\x20\x2d\x36\x2e\x37\x34\x31\x20\x34\x37\x2e\x37\x33\x37\x20\x2d\
+\x36\x2e\x33\x33\x38\x43\x34\x39\x2e\x31\x34\x20\x2d\x34\x2e\x39\
+\x35\x31\x20\x35\x31\x2e\x31\x20\x2d\x36\x2e\x34\x39\x37\x20\x35\
+\x32\x2e\x38\x20\x2d\x37\x43\x35\x33\x2e\x30\x31\x33\x20\x2d\x38\
+\x2e\x32\x30\x36\x20\x35\x33\x2e\x38\x37\x32\x20\x2d\x39\x2e\x31\
+\x34\x38\x20\x35\x35\x2e\x32\x30\x34\x20\x2d\x39\x2e\x30\x39\x32\
+\x43\x35\x35\x2e\x34\x36\x20\x2d\x39\x2e\x30\x38\x32\x20\x35\x35\
+\x2e\x36\x39\x35\x20\x2d\x39\x2e\x36\x32\x34\x20\x35\x36\x2e\x30\
+\x31\x39\x20\x2d\x39\x2e\x37\x35\x34\x43\x35\x36\x2e\x33\x36\x37\
+\x20\x2d\x39\x2e\x38\x39\x32\x20\x35\x36\x2e\x38\x36\x39\x20\x2d\
+\x39\x2e\x36\x36\x38\x20\x35\x37\x2e\x31\x35\x35\x20\x2d\x39\x2e\
+\x38\x36\x36\x43\x35\x38\x2e\x38\x38\x34\x20\x2d\x31\x31\x2e\x30\
+\x36\x31\x20\x36\x30\x2e\x32\x39\x32\x20\x2d\x31\x32\x2e\x31\x36\
+\x37\x20\x36\x32\x2e\x30\x33\x20\x2d\x31\x33\x2e\x33\x35\x36\x43\
+\x36\x32\x2e\x32\x32\x32\x20\x2d\x31\x33\x2e\x34\x38\x37\x20\x36\
+\x32\x2e\x35\x36\x36\x20\x2d\x31\x33\x2e\x33\x32\x38\x20\x36\x32\
+\x2e\x37\x38\x32\x20\x2d\x31\x33\x2e\x34\x33\x36\x43\x36\x33\x2e\
+\x31\x30\x37\x20\x2d\x31\x33\x2e\x35\x39\x38\x20\x36\x33\x2e\x32\
+\x39\x34\x20\x2d\x31\x33\x2e\x39\x38\x35\x20\x36\x33\x2e\x36\x31\
+\x37\x20\x2d\x31\x34\x2e\x31\x37\x43\x36\x33\x2e\x39\x36\x35\x20\
+\x2d\x31\x34\x2e\x33\x37\x20\x36\x34\x2e\x32\x30\x37\x20\x2d\x31\
+\x34\x2e\x30\x38\x20\x36\x34\x2e\x34\x20\x2d\x31\x33\x2e\x38\x43\
+\x36\x33\x2e\x37\x35\x34\x20\x2d\x31\x33\x2e\x34\x35\x31\x20\x36\
+\x33\x2e\x37\x35\x20\x2d\x31\x32\x2e\x34\x39\x34\x20\x36\x33\x2e\
+\x31\x36\x38\x20\x2d\x31\x32\x2e\x32\x39\x32\x43\x36\x32\x2e\x33\
+\x39\x33\x20\x2d\x31\x32\x2e\x30\x32\x34\x20\x36\x31\x2e\x38\x33\
+\x32\x20\x2d\x31\x31\x2e\x35\x31\x31\x20\x36\x31\x2e\x31\x35\x38\
+\x20\x2d\x31\x31\x2e\x30\x36\x34\x43\x36\x30\x2e\x38\x36\x36\x20\
+\x2d\x31\x30\x2e\x38\x37\x31\x20\x36\x30\x2e\x32\x30\x37\x20\x2d\
+\x31\x31\x2e\x31\x31\x39\x20\x36\x30\x2e\x31\x30\x33\x20\x2d\x31\
+\x30\x2e\x39\x34\x43\x35\x39\x2e\x35\x30\x35\x20\x2d\x39\x2e\x39\
+\x31\x32\x20\x35\x38\x2e\x33\x32\x31\x20\x2d\x39\x2e\x34\x37\x34\
+\x20\x35\x37\x2e\x36\x31\x31\x20\x2d\x38\x2e\x35\x39\x31\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x32\x2e\x32\x20\x2d\x35\x38\x43\x32\x2e\x32\
+\x20\x2d\x35\x38\x20\x2d\x37\x2e\x30\x33\x38\x20\x2d\x36\x30\x2e\
+\x38\x37\x32\x20\x2d\x31\x38\x2e\x32\x20\x2d\x33\x35\x2e\x32\x43\
+\x2d\x31\x38\x2e\x32\x20\x2d\x33\x35\x2e\x32\x20\x2d\x32\x30\x2e\
+\x36\x20\x2d\x33\x30\x20\x2d\x32\x33\x20\x2d\x32\x38\x43\x2d\x32\
+\x35\x2e\x34\x20\x2d\x32\x36\x20\x2d\x33\x36\x2e\x36\x20\x2d\x32\
+\x32\x2e\x34\x20\x2d\x33\x38\x2e\x36\x20\x2d\x31\x38\x2e\x34\x4c\
+\x2d\x34\x39\x20\x2d\x32\x2e\x34\x43\x2d\x34\x39\x20\x2d\x32\x2e\
+\x34\x20\x2d\x33\x34\x2e\x32\x20\x2d\x31\x38\x2e\x34\x20\x2d\x33\
+\x31\x20\x2d\x32\x30\x2e\x38\x43\x2d\x33\x31\x20\x2d\x32\x30\x2e\
+\x38\x20\x2d\x32\x33\x20\x2d\x32\x39\x2e\x32\x20\x2d\x32\x36\x2e\
+\x32\x20\x2d\x32\x32\x2e\x34\x43\x2d\x32\x36\x2e\x32\x20\x2d\x32\
+\x32\x2e\x34\x20\x2d\x34\x30\x2e\x32\x20\x2d\x31\x31\x2e\x36\x20\
+\x2d\x33\x39\x20\x2d\x32\x2e\x34\x43\x2d\x33\x39\x20\x2d\x32\x2e\
+\x34\x20\x2d\x34\x34\x2e\x36\x20\x31\x32\x20\x2d\x34\x35\x2e\x34\
+\x20\x31\x34\x43\x2d\x34\x35\x2e\x34\x20\x31\x34\x20\x2d\x32\x39\
+\x2e\x34\x20\x2d\x31\x38\x20\x2d\x32\x37\x20\x2d\x31\x39\x2e\x32\
+\x43\x2d\x32\x34\x2e\x36\x20\x2d\x32\x30\x2e\x34\x20\x2d\x32\x33\
+\x2e\x34\x20\x2d\x32\x30\x2e\x34\x20\x2d\x32\x34\x2e\x36\x20\x2d\
+\x31\x36\x2e\x38\x43\x2d\x32\x35\x2e\x38\x20\x2d\x31\x33\x2e\x32\
+\x20\x2d\x32\x36\x2e\x32\x20\x33\x2e\x32\x20\x2d\x32\x39\x20\x35\
+\x2e\x32\x43\x2d\x32\x39\x20\x35\x2e\x32\x20\x2d\x32\x31\x20\x2d\
+\x31\x35\x2e\x32\x20\x2d\x32\x31\x2e\x38\x20\x2d\x31\x38\x2e\x34\
+\x43\x2d\x32\x31\x2e\x38\x20\x2d\x31\x38\x2e\x34\x20\x2d\x31\x38\
+\x2e\x36\x20\x2d\x32\x32\x20\x2d\x31\x36\x2e\x32\x20\x2d\x31\x36\
+\x2e\x38\x4c\x2d\x31\x37\x2e\x34\x20\x2d\x30\x2e\x38\x4c\x2d\x31\
+\x33\x20\x31\x31\x2e\x32\x43\x2d\x31\x33\x20\x31\x31\x2e\x32\x20\
+\x2d\x31\x35\x2e\x34\x20\x30\x20\x2d\x31\x33\x2e\x38\x20\x2d\x31\
+\x35\x2e\x36\x43\x2d\x31\x33\x2e\x38\x20\x2d\x31\x35\x2e\x36\x20\
+\x2d\x31\x35\x2e\x38\x20\x2d\x32\x36\x20\x2d\x31\x31\x2e\x38\x20\
+\x2d\x32\x30\x2e\x34\x43\x2d\x37\x2e\x38\x20\x2d\x31\x34\x2e\x38\
+\x20\x31\x2e\x38\x20\x2d\x38\x2e\x38\x20\x31\x2e\x38\x20\x2d\x34\
+\x43\x31\x2e\x38\x20\x2d\x34\x20\x2d\x33\x2e\x34\x20\x2d\x32\x31\
+\x2e\x36\x20\x2d\x31\x32\x2e\x36\x20\x2d\x32\x36\x2e\x34\x4c\x2d\
+\x31\x36\x2e\x36\x20\x2d\x32\x30\x2e\x34\x4c\x2d\x31\x37\x2e\x38\
+\x20\x2d\x32\x32\x2e\x34\x43\x2d\x31\x37\x2e\x38\x20\x2d\x32\x32\
+\x2e\x34\x20\x2d\x32\x31\x2e\x34\x20\x2d\x32\x33\x2e\x32\x20\x2d\
+\x31\x37\x20\x2d\x33\x30\x43\x2d\x31\x32\x2e\x36\x20\x2d\x33\x36\
+\x2e\x38\x20\x2d\x31\x33\x20\x2d\x33\x37\x2e\x36\x20\x2d\x31\x33\
+\x20\x2d\x33\x37\x2e\x36\x43\x2d\x31\x33\x20\x2d\x33\x37\x2e\x36\
+\x20\x2d\x36\x2e\x36\x20\x2d\x33\x30\x2e\x34\x20\x2d\x35\x20\x2d\
+\x33\x30\x2e\x34\x43\x2d\x35\x20\x2d\x33\x30\x2e\x34\x20\x38\x2e\
+\x32\x20\x2d\x33\x38\x20\x39\x2e\x34\x20\x2d\x31\x33\x2e\x36\x43\
+\x39\x2e\x34\x20\x2d\x31\x33\x2e\x36\x20\x31\x36\x2e\x32\x20\x2d\
+\x32\x38\x20\x37\x20\x2d\x33\x34\x2e\x38\x43\x37\x20\x2d\x33\x34\
+\x2e\x38\x20\x2d\x37\x2e\x38\x20\x2d\x33\x36\x2e\x38\x20\x2d\x36\
+\x2e\x36\x20\x2d\x34\x32\x4c\x30\x2e\x36\x20\x2d\x35\x34\x2e\x34\
+\x43\x34\x2e\x32\x20\x2d\x35\x39\x2e\x36\x20\x32\x2e\x36\x20\x2d\
+\x35\x36\x2e\x38\x20\x32\x2e\x36\x20\x2d\x35\x36\x2e\x38\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x2d\x31\x37\x2e\x38\x20\x2d\x34\x31\x2e\x36\
+\x43\x2d\x31\x37\x2e\x38\x20\x2d\x34\x31\x2e\x36\x20\x2d\x33\x30\
+\x2e\x36\x20\x2d\x34\x31\x2e\x36\x20\x2d\x33\x33\x2e\x38\x20\x2d\
+\x33\x36\x2e\x34\x4c\x2d\x34\x31\x20\x2d\x32\x36\x2e\x38\x43\x2d\
+\x34\x31\x20\x2d\x32\x36\x2e\x38\x20\x2d\x32\x33\x2e\x38\x20\x2d\
+\x33\x36\x2e\x38\x20\x2d\x31\x39\x2e\x38\x20\x2d\x33\x38\x43\x2d\
+\x31\x35\x2e\x38\x20\x2d\x33\x39\x2e\x32\x20\x2d\x31\x37\x2e\x38\
+\x20\x2d\x34\x31\x2e\x36\x20\x2d\x31\x37\x2e\x38\x20\x2d\x34\x31\
+\x2e\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x35\x37\x2e\x38\x20\x2d\
+\x33\x35\x2e\x32\x43\x2d\x35\x37\x2e\x38\x20\x2d\x33\x35\x2e\x32\
+\x20\x2d\x35\x39\x2e\x38\x20\x2d\x33\x34\x20\x2d\x36\x30\x2e\x32\
+\x20\x2d\x33\x31\x2e\x32\x43\x2d\x36\x30\x2e\x36\x20\x2d\x32\x38\
+\x2e\x34\x20\x2d\x36\x33\x20\x2d\x32\x38\x20\x2d\x36\x32\x2e\x32\
+\x20\x2d\x32\x35\x2e\x32\x43\x2d\x36\x31\x2e\x34\x20\x2d\x32\x32\
+\x2e\x34\x20\x2d\x35\x39\x2e\x34\x20\x2d\x32\x30\x20\x2d\x35\x39\
+\x2e\x34\x20\x2d\x32\x34\x43\x2d\x35\x39\x2e\x34\x20\x2d\x32\x38\
+\x20\x2d\x35\x37\x2e\x38\x20\x2d\x33\x30\x20\x2d\x35\x37\x20\x2d\
+\x33\x31\x2e\x32\x43\x2d\x35\x36\x2e\x32\x20\x2d\x33\x32\x2e\x34\
+\x20\x2d\x35\x34\x2e\x36\x20\x2d\x33\x36\x2e\x38\x20\x2d\x35\x37\
+\x2e\x38\x20\x2d\x33\x35\x2e\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\
+\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\
+\x36\x36\x2e\x36\x20\x32\x36\x43\x2d\x36\x36\x2e\x36\x20\x32\x36\
+\x20\x2d\x37\x35\x20\x32\x32\x20\x2d\x37\x38\x2e\x32\x20\x31\x38\
+\x2e\x34\x43\x2d\x38\x31\x2e\x34\x20\x31\x34\x2e\x38\x20\x2d\x38\
+\x30\x2e\x39\x34\x38\x20\x31\x39\x2e\x39\x36\x36\x20\x2d\x38\x35\
+\x2e\x38\x20\x31\x39\x2e\x36\x43\x2d\x39\x31\x2e\x36\x34\x37\x20\
+\x31\x39\x2e\x31\x35\x39\x20\x2d\x39\x30\x2e\x36\x20\x33\x2e\x32\
+\x20\x2d\x39\x30\x2e\x36\x20\x33\x2e\x32\x4c\x2d\x39\x34\x2e\x36\
+\x20\x31\x30\x2e\x38\x43\x2d\x39\x34\x2e\x36\x20\x31\x30\x2e\x38\
+\x20\x2d\x39\x35\x2e\x38\x20\x32\x35\x2e\x32\x20\x2d\x38\x37\x2e\
+\x38\x20\x32\x32\x2e\x38\x43\x2d\x38\x33\x2e\x38\x39\x33\x20\x32\
+\x31\x2e\x36\x32\x38\x20\x2d\x38\x32\x2e\x36\x20\x32\x33\x2e\x32\
+\x20\x2d\x38\x34\x2e\x32\x20\x32\x34\x43\x2d\x38\x35\x2e\x38\x20\
+\x32\x34\x2e\x38\x20\x2d\x37\x38\x2e\x36\x20\x32\x35\x2e\x32\x20\
+\x2d\x38\x31\x2e\x34\x20\x32\x36\x2e\x38\x43\x2d\x38\x34\x2e\x32\
+\x20\x32\x38\x2e\x34\x20\x2d\x36\x39\x2e\x38\x20\x32\x33\x2e\x32\
+\x20\x2d\x37\x32\x2e\x32\x20\x33\x33\x2e\x36\x4c\x2d\x36\x36\x2e\
+\x36\x20\x32\x36\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x37\x39\x2e\x32\
+\x20\x34\x30\x2e\x34\x43\x2d\x37\x39\x2e\x32\x20\x34\x30\x2e\x34\
+\x20\x2d\x39\x34\x2e\x36\x20\x34\x34\x2e\x38\x20\x2d\x39\x38\x2e\
+\x32\x20\x33\x35\x2e\x32\x43\x2d\x39\x38\x2e\x32\x20\x33\x35\x2e\
+\x32\x20\x2d\x31\x30\x33\x20\x33\x37\x2e\x36\x20\x2d\x31\x30\x30\
+\x2e\x38\x20\x34\x30\x2e\x36\x43\x2d\x39\x38\x2e\x36\x20\x34\x33\
+\x2e\x36\x20\x2d\x39\x37\x2e\x34\x20\x34\x34\x20\x2d\x39\x37\x2e\
+\x34\x20\x34\x34\x43\x2d\x39\x37\x2e\x34\x20\x34\x34\x20\x2d\x39\
+\x32\x20\x34\x35\x2e\x32\x20\x2d\x39\x32\x2e\x36\x20\x34\x36\x43\
+\x2d\x39\x33\x2e\x32\x20\x34\x36\x2e\x38\x20\x2d\x39\x35\x2e\x36\
+\x20\x35\x30\x2e\x32\x20\x2d\x39\x35\x2e\x36\x20\x35\x30\x2e\x32\
+\x43\x2d\x39\x35\x2e\x36\x20\x35\x30\x2e\x32\x20\x2d\x38\x35\x2e\
+\x34\x20\x34\x34\x2e\x32\x20\x2d\x37\x39\x2e\x32\x20\x34\x30\x2e\
+\x34\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x34\x39\x2e\x32\x30\x31\x20\
+\x31\x31\x38\x2e\x36\x30\x31\x43\x31\x34\x38\x2e\x37\x37\x34\x20\
+\x31\x32\x30\x2e\x37\x33\x35\x20\x31\x34\x37\x2e\x31\x30\x33\x20\
+\x31\x32\x31\x2e\x35\x33\x36\x20\x31\x34\x35\x2e\x32\x30\x31\x20\
+\x31\x32\x32\x2e\x32\x30\x31\x43\x31\x34\x33\x2e\x32\x38\x34\x20\
+\x31\x32\x31\x2e\x32\x34\x33\x20\x31\x34\x30\x2e\x36\x38\x36\x20\
+\x31\x31\x38\x2e\x31\x33\x37\x20\x31\x33\x38\x2e\x38\x30\x31\x20\
+\x31\x32\x30\x2e\x32\x30\x31\x43\x31\x33\x38\x2e\x33\x32\x37\x20\
+\x31\x31\x39\x2e\x37\x32\x31\x20\x31\x33\x37\x2e\x35\x34\x38\x20\
+\x31\x31\x39\x2e\x36\x36\x31\x20\x31\x33\x37\x2e\x32\x30\x34\x20\
+\x31\x31\x38\x2e\x39\x39\x39\x43\x31\x33\x36\x2e\x37\x33\x39\x20\
+\x31\x31\x38\x2e\x31\x30\x31\x20\x31\x33\x37\x2e\x30\x31\x31\x20\
+\x31\x31\x37\x2e\x30\x35\x35\x20\x31\x33\x36\x2e\x36\x36\x39\x20\
+\x31\x31\x36\x2e\x32\x35\x37\x43\x31\x33\x36\x2e\x31\x32\x34\x20\
+\x31\x31\x34\x2e\x39\x38\x35\x20\x31\x33\x35\x2e\x34\x31\x35\x20\
+\x31\x31\x33\x2e\x36\x31\x39\x20\x31\x33\x35\x2e\x36\x30\x31\x20\
+\x31\x31\x32\x2e\x32\x30\x31\x43\x31\x33\x37\x2e\x34\x30\x37\x20\
+\x31\x31\x31\x2e\x34\x38\x39\x20\x31\x33\x38\x2e\x30\x30\x32\x20\
+\x31\x30\x39\x2e\x35\x38\x33\x20\x31\x33\x37\x2e\x35\x32\x38\x20\
+\x31\x30\x37\x2e\x38\x32\x43\x31\x33\x37\x2e\x34\x35\x39\x20\x31\
+\x30\x37\x2e\x35\x36\x33\x20\x31\x33\x37\x2e\x30\x33\x20\x31\x30\
+\x37\x2e\x33\x36\x36\x20\x31\x33\x37\x2e\x32\x33\x20\x31\x30\x37\
+\x2e\x30\x31\x37\x43\x31\x33\x37\x2e\x34\x31\x36\x20\x31\x30\x36\
+\x2e\x36\x39\x34\x20\x31\x33\x37\x2e\x37\x33\x34\x20\x31\x30\x36\
+\x2e\x34\x36\x37\x20\x31\x33\x38\x2e\x30\x30\x31\x20\x31\x30\x36\
+\x2e\x32\x43\x31\x33\x37\x2e\x38\x36\x36\x20\x31\x30\x36\x2e\x33\
+\x33\x35\x20\x31\x33\x37\x2e\x37\x32\x31\x20\x31\x30\x36\x2e\x35\
+\x36\x38\x20\x31\x33\x37\x2e\x36\x31\x20\x31\x30\x36\x2e\x35\x34\
+\x38\x43\x31\x33\x37\x20\x31\x30\x36\x2e\x34\x34\x32\x20\x31\x33\
+\x37\x2e\x31\x32\x34\x20\x31\x30\x35\x2e\x38\x30\x35\x20\x31\x33\
+\x37\x2e\x32\x35\x34\x20\x31\x30\x35\x2e\x34\x31\x38\x43\x31\x33\
+\x37\x2e\x38\x33\x39\x20\x31\x30\x33\x2e\x36\x37\x32\x20\x31\x33\
+\x39\x2e\x38\x35\x33\x20\x31\x30\x33\x2e\x34\x30\x38\x20\x31\x34\
+\x31\x2e\x32\x30\x31\x20\x31\x30\x34\x2e\x36\x43\x31\x34\x31\x2e\
+\x34\x35\x37\x20\x31\x30\x34\x2e\x30\x33\x35\x20\x31\x34\x31\x2e\
+\x39\x36\x36\x20\x31\x30\x34\x2e\x32\x32\x39\x20\x31\x34\x32\x2e\
+\x34\x30\x31\x20\x31\x30\x34\x2e\x32\x43\x31\x34\x32\x2e\x33\x35\
+\x31\x20\x31\x30\x33\x2e\x36\x32\x31\x20\x31\x34\x32\x2e\x37\x35\
+\x39\x20\x31\x30\x33\x2e\x30\x39\x34\x20\x31\x34\x32\x2e\x39\x35\
+\x37\x20\x31\x30\x32\x2e\x36\x37\x34\x43\x31\x34\x33\x2e\x34\x37\
+\x35\x20\x31\x30\x31\x2e\x35\x37\x36\x20\x31\x34\x35\x2e\x31\x30\
+\x34\x20\x31\x30\x32\x2e\x36\x38\x32\x20\x31\x34\x35\x2e\x39\x30\
+\x31\x20\x31\x30\x32\x2e\x30\x37\x43\x31\x34\x36\x2e\x39\x37\x37\
+\x20\x31\x30\x31\x2e\x32\x34\x35\x20\x31\x34\x38\x2e\x30\x34\x20\
+\x31\x30\x30\x2e\x35\x34\x36\x20\x31\x34\x39\x2e\x31\x31\x38\x20\
+\x31\x30\x31\x2e\x31\x34\x39\x43\x31\x35\x30\x2e\x39\x32\x37\x20\
+\x31\x30\x32\x2e\x31\x36\x32\x20\x31\x35\x32\x2e\x36\x33\x36\x20\
+\x31\x30\x33\x2e\x33\x37\x34\x20\x31\x35\x33\x2e\x38\x33\x35\x20\
+\x31\x30\x35\x2e\x31\x31\x35\x43\x31\x35\x34\x2e\x34\x31\x20\x31\
+\x30\x35\x2e\x39\x34\x39\x20\x31\x35\x34\x2e\x36\x35\x20\x31\x30\
+\x37\x2e\x32\x33\x20\x31\x35\x34\x2e\x35\x39\x32\x20\x31\x30\x38\
+\x2e\x31\x38\x38\x43\x31\x35\x34\x2e\x35\x35\x34\x20\x31\x30\x38\
+\x2e\x38\x33\x35\x20\x31\x35\x33\x2e\x31\x37\x33\x20\x31\x30\x38\
+\x2e\x34\x38\x33\x20\x31\x35\x32\x2e\x38\x33\x20\x31\x30\x39\x2e\
+\x34\x31\x32\x43\x31\x35\x32\x2e\x31\x38\x35\x20\x31\x31\x31\x2e\
+\x31\x36\x20\x31\x35\x34\x2e\x30\x31\x36\x20\x31\x31\x31\x2e\x36\
+\x37\x39\x20\x31\x35\x34\x2e\x37\x37\x32\x20\x31\x31\x33\x2e\x30\
+\x31\x37\x43\x31\x35\x34\x2e\x39\x37\x20\x31\x31\x33\x2e\x33\x36\
+\x36\x20\x31\x35\x34\x2e\x37\x30\x36\x20\x31\x31\x33\x2e\x36\x37\
+\x20\x31\x35\x34\x2e\x33\x39\x31\x20\x31\x31\x33\x2e\x37\x36\x38\
+\x43\x31\x35\x33\x2e\x39\x38\x20\x31\x31\x33\x2e\x38\x39\x36\x20\
+\x31\x35\x33\x2e\x31\x39\x36\x20\x31\x31\x33\x2e\x37\x30\x37\x20\
+\x31\x35\x33\x2e\x33\x33\x34\x20\x31\x31\x34\x2e\x31\x36\x43\x31\
+\x35\x34\x2e\x33\x30\x36\x20\x31\x31\x37\x2e\x33\x35\x33\x20\x31\
+\x35\x31\x2e\x35\x35\x20\x31\x31\x38\x2e\x30\x33\x31\x20\x31\x34\
+\x39\x2e\x32\x30\x31\x20\x31\x31\x38\x2e\x36\x30\x31\x7a\x22\x7d\
+\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\
+\x66\x66\x66\x66\x66\x66\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x31\x33\x39\x2e\x36\x20\x31\x33\x38\x2e\x32\x30\
+\x31\x43\x31\x33\x39\x2e\x35\x39\x33\x20\x31\x33\x36\x2e\x34\x36\
+\x33\x20\x31\x33\x37\x2e\x39\x39\x32\x20\x31\x33\x34\x2e\x37\x30\
+\x37\x20\x31\x33\x39\x2e\x32\x30\x31\x20\x31\x33\x33\x2e\x30\x30\
+\x31\x43\x31\x33\x39\x2e\x33\x33\x36\x20\x31\x33\x33\x2e\x31\x33\
+\x35\x20\x31\x33\x39\x2e\x34\x36\x37\x20\x31\x33\x33\x2e\x33\x35\
+\x36\x20\x31\x33\x39\x2e\x36\x30\x31\x20\x31\x33\x33\x2e\x33\x35\
+\x36\x43\x31\x33\x39\x2e\x37\x33\x36\x20\x31\x33\x33\x2e\x33\x35\
+\x36\x20\x31\x33\x39\x2e\x38\x36\x37\x20\x31\x33\x33\x2e\x31\x33\
+\x35\x20\x31\x34\x30\x2e\x30\x30\x31\x20\x31\x33\x33\x2e\x30\x30\
+\x31\x43\x31\x34\x31\x2e\x34\x39\x36\x20\x31\x33\x35\x2e\x32\x31\
+\x37\x20\x31\x34\x35\x2e\x31\x34\x38\x20\x31\x33\x36\x2e\x31\x34\
+\x35\x20\x31\x34\x35\x2e\x30\x30\x36\x20\x31\x33\x38\x2e\x39\x39\
+\x31\x43\x31\x34\x34\x2e\x39\x38\x34\x20\x31\x33\x39\x2e\x34\x33\
+\x38\x20\x31\x34\x33\x2e\x38\x39\x37\x20\x31\x34\x30\x2e\x33\x35\
+\x36\x20\x31\x34\x34\x2e\x38\x30\x31\x20\x31\x34\x31\x2e\x30\x30\
+\x31\x43\x31\x34\x32\x2e\x39\x38\x38\x20\x31\x34\x32\x2e\x33\x34\
+\x39\x20\x31\x34\x32\x2e\x39\x33\x33\x20\x31\x34\x34\x2e\x37\x31\
+\x39\x20\x31\x34\x32\x2e\x30\x30\x31\x20\x31\x34\x36\x2e\x36\x30\
+\x31\x43\x31\x34\x30\x2e\x37\x36\x33\x20\x31\x34\x36\x2e\x33\x31\
+\x35\x20\x31\x33\x39\x2e\x35\x35\x31\x20\x31\x34\x35\x2e\x39\x35\
+\x32\x20\x31\x33\x38\x2e\x34\x30\x31\x20\x31\x34\x35\x2e\x34\x30\
+\x31\x43\x31\x33\x38\x2e\x37\x35\x33\x20\x31\x34\x33\x2e\x39\x31\
+\x35\x20\x31\x33\x38\x2e\x36\x33\x36\x20\x31\x34\x32\x2e\x32\x33\
+\x31\x20\x31\x33\x39\x2e\x34\x35\x36\x20\x31\x34\x30\x2e\x39\x31\
+\x31\x43\x31\x33\x39\x2e\x38\x39\x20\x31\x34\x30\x2e\x32\x31\x33\
+\x20\x31\x33\x39\x2e\x36\x30\x33\x20\x31\x33\x39\x2e\x31\x33\x34\
+\x20\x31\x33\x39\x2e\x36\x20\x31\x33\x38\x2e\x32\x30\x31\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x2d\x32\x36\x2e\x36\x20\x31\x32\x39\x2e\x32\
+\x30\x31\x43\x2d\x32\x36\x2e\x36\x20\x31\x32\x39\x2e\x32\x30\x31\
+\x20\x2d\x34\x33\x2e\x34\x35\x38\x20\x31\x33\x39\x2e\x33\x33\x37\
+\x20\x2d\x32\x39\x2e\x34\x20\x31\x32\x34\x2e\x30\x30\x31\x43\x2d\
+\x32\x30\x2e\x36\x20\x31\x31\x34\x2e\x34\x30\x31\x20\x2d\x31\x30\
+\x2e\x36\x20\x31\x30\x38\x2e\x38\x30\x31\x20\x2d\x31\x30\x2e\x36\
+\x20\x31\x30\x38\x2e\x38\x30\x31\x43\x2d\x31\x30\x2e\x36\x20\x31\
+\x30\x38\x2e\x38\x30\x31\x20\x2d\x30\x2e\x32\x20\x31\x30\x34\x2e\
+\x34\x20\x33\x2e\x34\x20\x31\x30\x33\x2e\x32\x43\x37\x20\x31\x30\
+\x32\x20\x32\x32\x2e\x32\x20\x39\x36\x2e\x38\x20\x32\x35\x2e\x34\
+\x20\x39\x36\x2e\x34\x43\x32\x38\x2e\x36\x20\x39\x36\x20\x33\x38\
+\x2e\x32\x20\x39\x32\x20\x34\x35\x20\x39\x36\x43\x35\x31\x2e\x38\
+\x20\x31\x30\x30\x20\x35\x39\x2e\x38\x20\x31\x30\x34\x2e\x34\x20\
+\x35\x39\x2e\x38\x20\x31\x30\x34\x2e\x34\x43\x35\x39\x2e\x38\x20\
+\x31\x30\x34\x2e\x34\x20\x34\x33\x2e\x34\x20\x39\x36\x20\x33\x39\
+\x2e\x38\x20\x39\x38\x2e\x34\x43\x33\x36\x2e\x32\x20\x31\x30\x30\
+\x2e\x38\x20\x32\x39\x20\x31\x30\x30\x2e\x34\x20\x32\x33\x20\x31\
+\x30\x33\x2e\x36\x43\x32\x33\x20\x31\x30\x33\x2e\x36\x20\x38\x2e\
+\x32\x20\x31\x30\x38\x2e\x30\x30\x31\x20\x35\x20\x31\x31\x30\x2e\
+\x30\x30\x31\x43\x31\x2e\x38\x20\x31\x31\x32\x2e\x30\x30\x31\x20\
+\x2d\x38\x2e\x36\x20\x31\x32\x33\x2e\x36\x30\x31\x20\x2d\x31\x30\
+\x2e\x32\x20\x31\x32\x32\x2e\x38\x30\x31\x43\x2d\x31\x31\x2e\x38\
+\x20\x31\x32\x32\x2e\x30\x30\x31\x20\x2d\x39\x2e\x38\x20\x31\x32\
+\x31\x2e\x36\x30\x31\x20\x2d\x38\x2e\x36\x20\x31\x31\x38\x2e\x38\
+\x30\x31\x43\x2d\x37\x2e\x34\x20\x31\x31\x36\x2e\x30\x30\x31\x20\
+\x2d\x39\x2e\x34\x20\x31\x31\x34\x2e\x34\x30\x31\x20\x2d\x31\x37\
+\x2e\x34\x20\x31\x32\x30\x2e\x38\x30\x31\x43\x2d\x32\x35\x2e\x34\
+\x20\x31\x32\x37\x2e\x32\x30\x31\x20\x2d\x32\x36\x2e\x36\x20\x31\
+\x32\x39\x2e\x32\x30\x31\x20\x2d\x32\x36\x2e\x36\x20\x31\x32\x39\
+\x2e\x32\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x39\x2e\x31\
+\x39\x35\x20\x31\x32\x33\x2e\x32\x33\x34\x43\x2d\x31\x39\x2e\x31\
+\x39\x35\x20\x31\x32\x33\x2e\x32\x33\x34\x20\x2d\x31\x37\x2e\x37\
+\x38\x35\x20\x31\x31\x30\x2e\x31\x39\x34\x20\x2d\x39\x2e\x33\x30\
+\x37\x20\x31\x31\x31\x2e\x38\x35\x39\x43\x2d\x39\x2e\x33\x30\x37\
+\x20\x31\x31\x31\x2e\x38\x35\x39\x20\x2d\x31\x2e\x30\x38\x31\x20\
+\x31\x30\x37\x2e\x36\x38\x39\x20\x31\x2e\x36\x34\x31\x20\x31\x30\
+\x35\x2e\x37\x32\x31\x43\x31\x2e\x36\x34\x31\x20\x31\x30\x35\x2e\
+\x37\x32\x31\x20\x39\x2e\x37\x38\x20\x31\x30\x34\x2e\x30\x31\x39\
+\x20\x31\x31\x2e\x30\x39\x20\x31\x30\x33\x2e\x34\x30\x32\x43\x32\
+\x39\x2e\x35\x36\x39\x20\x39\x34\x2e\x37\x30\x32\x20\x34\x34\x2e\
+\x32\x38\x38\x20\x39\x39\x2e\x32\x32\x31\x20\x34\x34\x2e\x38\x33\
+\x35\x20\x39\x38\x2e\x31\x30\x31\x43\x34\x35\x2e\x33\x38\x31\x20\
+\x39\x36\x2e\x39\x38\x32\x20\x36\x35\x2e\x30\x30\x36\x20\x31\x30\
+\x34\x2e\x30\x39\x39\x20\x36\x38\x2e\x36\x31\x35\x20\x31\x30\x38\
+\x2e\x31\x38\x35\x43\x36\x39\x2e\x30\x30\x36\x20\x31\x30\x38\x2e\
+\x36\x32\x38\x20\x35\x38\x2e\x33\x38\x34\x20\x31\x30\x32\x2e\x35\
+\x38\x38\x20\x34\x38\x2e\x36\x38\x36\x20\x31\x30\x30\x2e\x36\x39\
+\x37\x43\x34\x30\x2e\x34\x31\x33\x20\x39\x39\x2e\x30\x38\x33\x20\
+\x31\x38\x2e\x38\x31\x31\x20\x31\x30\x30\x2e\x39\x34\x34\x20\x37\
+\x2e\x39\x30\x35\x20\x31\x30\x36\x2e\x34\x38\x43\x34\x2e\x39\x33\
+\x32\x20\x31\x30\x37\x2e\x39\x38\x39\x20\x2d\x34\x2e\x30\x31\x33\
+\x20\x31\x31\x33\x2e\x37\x37\x33\x20\x2d\x36\x2e\x35\x34\x34\x20\
+\x31\x31\x33\x2e\x36\x36\x32\x43\x2d\x39\x2e\x30\x37\x35\x20\x31\
+\x31\x33\x2e\x35\x35\x20\x2d\x31\x39\x2e\x31\x39\x35\x20\x31\x32\
+\x33\x2e\x32\x33\x34\x20\x2d\x31\x39\x2e\x31\x39\x35\x20\x31\x32\
+\x33\x2e\x32\x33\x34\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x32\x33\x20\
+\x31\x34\x38\x2e\x38\x30\x31\x43\x2d\x32\x33\x20\x31\x34\x38\x2e\
+\x38\x30\x31\x20\x2d\x33\x38\x2e\x32\x20\x31\x34\x36\x2e\x34\x30\
+\x31\x20\x2d\x32\x31\x2e\x34\x20\x31\x34\x34\x2e\x38\x30\x31\x43\
+\x2d\x32\x31\x2e\x34\x20\x31\x34\x34\x2e\x38\x30\x31\x20\x2d\x33\
+\x2e\x34\x20\x31\x34\x32\x2e\x38\x30\x31\x20\x30\x2e\x36\x20\x31\
+\x33\x37\x2e\x36\x30\x31\x43\x30\x2e\x36\x20\x31\x33\x37\x2e\x36\
+\x30\x31\x20\x31\x34\x2e\x32\x20\x31\x32\x38\x2e\x34\x30\x31\x20\
+\x31\x37\x20\x31\x32\x38\x2e\x30\x30\x31\x43\x31\x39\x2e\x38\x20\
+\x31\x32\x37\x2e\x36\x30\x31\x20\x34\x39\x2e\x38\x20\x31\x32\x30\
+\x2e\x34\x30\x31\x20\x35\x30\x2e\x32\x20\x31\x31\x38\x2e\x30\x30\
+\x31\x43\x35\x30\x2e\x36\x20\x31\x31\x35\x2e\x36\x30\x31\x20\x35\
+\x36\x2e\x32\x20\x31\x31\x35\x2e\x36\x30\x31\x20\x35\x37\x2e\x38\
+\x20\x31\x31\x36\x2e\x34\x30\x31\x43\x35\x39\x2e\x34\x20\x31\x31\
+\x37\x2e\x32\x30\x31\x20\x35\x38\x2e\x36\x20\x31\x31\x38\x2e\x34\
+\x30\x31\x20\x35\x35\x2e\x38\x20\x31\x31\x39\x2e\x32\x30\x31\x43\
+\x35\x33\x20\x31\x32\x30\x2e\x30\x30\x31\x20\x32\x31\x2e\x38\x20\
+\x31\x33\x36\x2e\x34\x30\x31\x20\x31\x35\x2e\x34\x20\x31\x33\x37\
+\x2e\x36\x30\x31\x43\x39\x20\x31\x33\x38\x2e\x38\x30\x31\x20\x2d\
+\x32\x2e\x36\x20\x31\x34\x36\x2e\x34\x30\x31\x20\x2d\x37\x2e\x34\
+\x20\x31\x34\x37\x2e\x36\x30\x31\x43\x2d\x31\x32\x2e\x32\x20\x31\
+\x34\x38\x2e\x38\x30\x31\x20\x2d\x32\x33\x20\x31\x34\x38\x2e\x38\
+\x30\x31\x20\x2d\x32\x33\x20\x31\x34\x38\x2e\x38\x30\x31\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x2d\x33\x2e\x34\x38\x20\x31\x34\x31\x2e\x34\
+\x30\x33\x43\x2d\x33\x2e\x34\x38\x20\x31\x34\x31\x2e\x34\x30\x33\
+\x20\x2d\x31\x32\x2e\x30\x36\x32\x20\x31\x34\x30\x2e\x35\x37\x34\
+\x20\x2d\x33\x2e\x34\x36\x31\x20\x31\x33\x39\x2e\x37\x35\x35\x43\
+\x2d\x33\x2e\x34\x36\x31\x20\x31\x33\x39\x2e\x37\x35\x35\x20\x35\
+\x2e\x33\x35\x35\x20\x31\x33\x36\x2e\x33\x33\x31\x20\x37\x2e\x34\
+\x30\x33\x20\x31\x33\x33\x2e\x36\x36\x38\x43\x37\x2e\x34\x30\x33\
+\x20\x31\x33\x33\x2e\x36\x36\x38\x20\x31\x34\x2e\x33\x36\x37\x20\
+\x31\x32\x38\x2e\x39\x35\x37\x20\x31\x35\x2e\x38\x20\x31\x32\x38\
+\x2e\x37\x35\x33\x43\x31\x37\x2e\x32\x33\x34\x20\x31\x32\x38\x2e\
+\x35\x34\x38\x20\x33\x31\x2e\x31\x39\x34\x20\x31\x32\x34\x2e\x38\
+\x36\x31\x20\x33\x31\x2e\x33\x39\x39\x20\x31\x32\x33\x2e\x36\x33\
+\x33\x43\x33\x31\x2e\x36\x30\x34\x20\x31\x32\x32\x2e\x34\x30\x34\
+\x20\x36\x35\x2e\x36\x37\x20\x31\x30\x39\x2e\x38\x32\x33\x20\x37\
+\x30\x2e\x30\x39\x20\x31\x31\x33\x2e\x30\x31\x33\x43\x37\x33\x2e\
+\x30\x30\x31\x20\x31\x31\x35\x2e\x31\x31\x34\x20\x36\x33\x2e\x31\
+\x20\x31\x31\x33\x2e\x34\x33\x37\x20\x35\x33\x2e\x34\x36\x36\x20\
+\x31\x31\x37\x2e\x38\x34\x37\x43\x35\x32\x2e\x31\x31\x31\x20\x31\
+\x31\x38\x2e\x34\x36\x37\x20\x31\x38\x2e\x32\x35\x38\x20\x31\x33\
+\x33\x2e\x30\x35\x34\x20\x31\x34\x2e\x39\x38\x31\x20\x31\x33\x33\
+\x2e\x36\x36\x38\x43\x31\x31\x2e\x37\x30\x34\x20\x31\x33\x34\x2e\
+\x32\x38\x33\x20\x35\x2e\x37\x36\x35\x20\x31\x33\x38\x2e\x31\x37\
+\x34\x20\x33\x2e\x33\x30\x37\x20\x31\x33\x38\x2e\x37\x38\x38\x43\
+\x30\x2e\x38\x35\x20\x31\x33\x39\x2e\x34\x30\x33\x20\x2d\x33\x2e\
+\x34\x38\x20\x31\x34\x31\x2e\x34\x30\x33\x20\x2d\x33\x2e\x34\x38\
+\x20\x31\x34\x31\x2e\x34\x30\x33\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\
+\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\
+\x31\x31\x2e\x34\x20\x31\x34\x33\x2e\x36\x30\x31\x43\x2d\x31\x31\
+\x2e\x34\x20\x31\x34\x33\x2e\x36\x30\x31\x20\x2d\x36\x2e\x32\x20\
+\x31\x34\x33\x2e\x32\x30\x31\x20\x2d\x37\x2e\x34\x20\x31\x34\x34\
+\x2e\x38\x30\x31\x43\x2d\x38\x2e\x36\x20\x31\x34\x36\x2e\x34\x30\
+\x31\x20\x2d\x31\x31\x20\x31\x34\x35\x2e\x36\x30\x31\x20\x2d\x31\
+\x31\x20\x31\x34\x35\x2e\x36\x30\x31\x4c\x2d\x31\x31\x2e\x34\x20\
+\x31\x34\x33\x2e\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\
+\x38\x2e\x36\x20\x31\x34\x35\x2e\x32\x30\x31\x43\x2d\x31\x38\x2e\
+\x36\x20\x31\x34\x35\x2e\x32\x30\x31\x20\x2d\x31\x33\x2e\x34\x20\
+\x31\x34\x34\x2e\x38\x30\x31\x20\x2d\x31\x34\x2e\x36\x20\x31\x34\
+\x36\x2e\x34\x30\x31\x43\x2d\x31\x35\x2e\x38\x20\x31\x34\x38\x2e\
+\x30\x30\x31\x20\x2d\x31\x38\x2e\x32\x20\x31\x34\x37\x2e\x32\x30\
+\x31\x20\x2d\x31\x38\x2e\x32\x20\x31\x34\x37\x2e\x32\x30\x31\x4c\
+\x2d\x31\x38\x2e\x36\x20\x31\x34\x35\x2e\x32\x30\x31\x7a\x22\x7d\
+\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\
+\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x32\x39\x20\x31\x34\x36\x2e\x38\x30\x31\x43\
+\x2d\x32\x39\x20\x31\x34\x36\x2e\x38\x30\x31\x20\x2d\x32\x33\x2e\
+\x38\x20\x31\x34\x36\x2e\x34\x30\x31\x20\x2d\x32\x35\x20\x31\x34\
+\x38\x2e\x30\x30\x31\x43\x2d\x32\x36\x2e\x32\x20\x31\x34\x39\x2e\
+\x36\x30\x31\x20\x2d\x32\x38\x2e\x36\x20\x31\x34\x38\x2e\x38\x30\
+\x31\x20\x2d\x32\x38\x2e\x36\x20\x31\x34\x38\x2e\x38\x30\x31\x4c\
+\x2d\x32\x39\x20\x31\x34\x36\x2e\x38\x30\x31\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\
+\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x2d\x33\x36\x2e\x36\x20\x31\x34\x37\x2e\x36\x30\x31\x43\
+\x2d\x33\x36\x2e\x36\x20\x31\x34\x37\x2e\x36\x30\x31\x20\x2d\x33\
+\x31\x2e\x34\x20\x31\x34\x37\x2e\x32\x30\x31\x20\x2d\x33\x32\x2e\
+\x36\x20\x31\x34\x38\x2e\x38\x30\x31\x43\x2d\x33\x33\x2e\x38\x20\
+\x31\x35\x30\x2e\x34\x30\x31\x20\x2d\x33\x36\x2e\x32\x20\x31\x34\
+\x39\x2e\x36\x30\x31\x20\x2d\x33\x36\x2e\x32\x20\x31\x34\x39\x2e\
+\x36\x30\x31\x4c\x2d\x33\x36\x2e\x36\x20\x31\x34\x37\x2e\x36\x30\
+\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x2e\x38\x20\x31\x30\x38\x2e\
+\x30\x30\x31\x43\x31\x2e\x38\x20\x31\x30\x38\x2e\x30\x30\x31\x20\
+\x36\x2e\x32\x20\x31\x30\x38\x2e\x30\x30\x31\x20\x35\x20\x31\x30\
+\x39\x2e\x36\x30\x31\x43\x33\x2e\x38\x20\x31\x31\x31\x2e\x32\x30\
+\x31\x20\x30\x2e\x36\x20\x31\x31\x30\x2e\x38\x30\x31\x20\x30\x2e\
+\x36\x20\x31\x31\x30\x2e\x38\x30\x31\x4c\x31\x2e\x38\x20\x31\x30\
+\x38\x2e\x30\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x38\x2e\x32\
+\x20\x31\x31\x33\x2e\x36\x30\x31\x43\x2d\x38\x2e\x32\x20\x31\x31\
+\x33\x2e\x36\x30\x31\x20\x2d\x31\x2e\x36\x39\x34\x20\x31\x31\x31\
+\x2e\x34\x36\x20\x2d\x34\x2e\x32\x20\x31\x31\x34\x2e\x38\x30\x31\
+\x43\x2d\x35\x2e\x34\x20\x31\x31\x36\x2e\x34\x30\x31\x20\x2d\x37\
+\x2e\x38\x20\x31\x31\x35\x2e\x36\x30\x31\x20\x2d\x37\x2e\x38\x20\
+\x31\x31\x35\x2e\x36\x30\x31\x4c\x2d\x38\x2e\x32\x20\x31\x31\x33\
+\x2e\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x39\x2e\x34\
+\x20\x31\x31\x38\x2e\x34\x30\x31\x43\x2d\x31\x39\x2e\x34\x20\x31\
+\x31\x38\x2e\x34\x30\x31\x20\x2d\x31\x34\x2e\x32\x20\x31\x31\x38\
+\x2e\x30\x30\x31\x20\x2d\x31\x35\x2e\x34\x20\x31\x31\x39\x2e\x36\
+\x30\x31\x43\x2d\x31\x36\x2e\x36\x20\x31\x32\x31\x2e\x32\x30\x31\
+\x20\x2d\x31\x39\x20\x31\x32\x30\x2e\x34\x30\x31\x20\x2d\x31\x39\
+\x20\x31\x32\x30\x2e\x34\x30\x31\x4c\x2d\x31\x39\x2e\x34\x20\x31\
+\x31\x38\x2e\x34\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x32\x37\
+\x20\x31\x32\x34\x2e\x34\x30\x31\x43\x2d\x32\x37\x20\x31\x32\x34\
+\x2e\x34\x30\x31\x20\x2d\x32\x31\x2e\x38\x20\x31\x32\x34\x2e\x30\
+\x30\x31\x20\x2d\x32\x33\x20\x31\x32\x35\x2e\x36\x30\x31\x43\x2d\
+\x32\x34\x2e\x32\x20\x31\x32\x37\x2e\x32\x30\x31\x20\x2d\x32\x36\
+\x2e\x36\x20\x31\x32\x36\x2e\x34\x30\x31\x20\x2d\x32\x36\x2e\x36\
+\x20\x31\x32\x36\x2e\x34\x30\x31\x4c\x2d\x32\x37\x20\x31\x32\x34\
+\x2e\x34\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x33\x33\x2e\x38\
+\x20\x31\x32\x39\x2e\x32\x30\x31\x43\x2d\x33\x33\x2e\x38\x20\x31\
+\x32\x39\x2e\x32\x30\x31\x20\x2d\x32\x38\x2e\x36\x20\x31\x32\x38\
+\x2e\x38\x30\x31\x20\x2d\x32\x39\x2e\x38\x20\x31\x33\x30\x2e\x34\
+\x30\x31\x43\x2d\x33\x31\x20\x31\x33\x32\x2e\x30\x30\x31\x20\x2d\
+\x33\x33\x2e\x34\x20\x31\x33\x31\x2e\x32\x30\x31\x20\x2d\x33\x33\
+\x2e\x34\x20\x31\x33\x31\x2e\x32\x30\x31\x4c\x2d\x33\x33\x2e\x38\
+\x20\x31\x32\x39\x2e\x32\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\
+\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x35\
+\x2e\x32\x38\x32\x20\x31\x33\x35\x2e\x35\x39\x38\x43\x35\x2e\x32\
+\x38\x32\x20\x31\x33\x35\x2e\x35\x39\x38\x20\x31\x32\x2e\x32\x30\
+\x33\x20\x31\x33\x35\x2e\x30\x36\x36\x20\x31\x30\x2e\x36\x30\x36\
+\x20\x31\x33\x37\x2e\x31\x39\x35\x43\x39\x2e\x30\x30\x39\x20\x31\
+\x33\x39\x2e\x33\x32\x35\x20\x35\x2e\x38\x31\x34\x20\x31\x33\x38\
+\x2e\x32\x36\x20\x35\x2e\x38\x31\x34\x20\x31\x33\x38\x2e\x32\x36\
+\x4c\x35\x2e\x32\x38\x32\x20\x31\x33\x35\x2e\x35\x39\x38\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x31\x35\x2e\x36\x38\x32\x20\x31\x33\x30\x2e\
+\x37\x39\x38\x43\x31\x35\x2e\x36\x38\x32\x20\x31\x33\x30\x2e\x37\
+\x39\x38\x20\x32\x32\x2e\x36\x30\x33\x20\x31\x33\x30\x2e\x32\x36\
+\x36\x20\x32\x31\x2e\x30\x30\x36\x20\x31\x33\x32\x2e\x33\x39\x35\
+\x43\x31\x39\x2e\x34\x30\x39\x20\x31\x33\x34\x2e\x35\x32\x35\x20\
+\x31\x36\x2e\x32\x31\x34\x20\x31\x33\x33\x2e\x34\x36\x20\x31\x36\
+\x2e\x32\x31\x34\x20\x31\x33\x33\x2e\x34\x36\x4c\x31\x35\x2e\x36\
+\x38\x32\x20\x31\x33\x30\x2e\x37\x39\x38\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\
+\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x32\x36\x2e\x34\x38\x32\x20\x31\x32\x36\x2e\x33\x39\x38\x43\
+\x32\x36\x2e\x34\x38\x32\x20\x31\x32\x36\x2e\x33\x39\x38\x20\x33\
+\x33\x2e\x34\x30\x33\x20\x31\x32\x35\x2e\x38\x36\x36\x20\x33\x31\
+\x2e\x38\x30\x36\x20\x31\x32\x37\x2e\x39\x39\x35\x43\x33\x30\x2e\
+\x32\x30\x39\x20\x31\x33\x30\x2e\x31\x32\x35\x20\x32\x37\x2e\x30\
+\x31\x34\x20\x31\x32\x39\x2e\x30\x36\x20\x32\x37\x2e\x30\x31\x34\
+\x20\x31\x32\x39\x2e\x30\x36\x4c\x32\x36\x2e\x34\x38\x32\x20\x31\
+\x32\x36\x2e\x33\x39\x38\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x33\x36\x2e\
+\x38\x38\x32\x20\x31\x32\x31\x2e\x35\x39\x38\x43\x33\x36\x2e\x38\
+\x38\x32\x20\x31\x32\x31\x2e\x35\x39\x38\x20\x34\x33\x2e\x38\x30\
+\x33\x20\x31\x32\x31\x2e\x30\x36\x36\x20\x34\x32\x2e\x32\x30\x36\
+\x20\x31\x32\x33\x2e\x31\x39\x35\x43\x34\x30\x2e\x36\x30\x39\x20\
+\x31\x32\x35\x2e\x33\x32\x35\x20\x33\x37\x2e\x34\x31\x34\x20\x31\
+\x32\x34\x2e\x32\x36\x20\x33\x37\x2e\x34\x31\x34\x20\x31\x32\x34\
+\x2e\x32\x36\x4c\x33\x36\x2e\x38\x38\x32\x20\x31\x32\x31\x2e\x35\
+\x39\x38\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x39\x2e\x32\x38\x32\x20\x31\
+\x30\x33\x2e\x35\x39\x38\x43\x39\x2e\x32\x38\x32\x20\x31\x30\x33\
+\x2e\x35\x39\x38\x20\x31\x36\x2e\x32\x30\x33\x20\x31\x30\x33\x2e\
+\x30\x36\x36\x20\x31\x34\x2e\x36\x30\x36\x20\x31\x30\x35\x2e\x31\
+\x39\x35\x43\x31\x33\x2e\x30\x30\x39\x20\x31\x30\x37\x2e\x33\x32\
+\x35\x20\x39\x2e\x30\x31\x34\x20\x31\x30\x37\x2e\x30\x36\x20\x39\
+\x2e\x30\x31\x34\x20\x31\x30\x37\x2e\x30\x36\x4c\x39\x2e\x32\x38\
+\x32\x20\x31\x30\x33\x2e\x35\x39\x38\x7a\x22\x7d\x0a\x20\x2c\x0a\
+\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\
+\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\
+\x31\x39\x2e\x32\x38\x32\x20\x31\x30\x30\x2e\x33\x39\x38\x43\x31\
+\x39\x2e\x32\x38\x32\x20\x31\x30\x30\x2e\x33\x39\x38\x20\x32\x36\
+\x2e\x32\x30\x33\x20\x39\x39\x2e\x38\x36\x36\x20\x32\x34\x2e\x36\
+\x30\x36\x20\x31\x30\x31\x2e\x39\x39\x35\x43\x32\x33\x2e\x30\x30\
+\x39\x20\x31\x30\x34\x2e\x31\x32\x35\x20\x31\x38\x2e\x36\x31\x34\
+\x20\x31\x30\x33\x2e\x38\x36\x20\x31\x38\x2e\x36\x31\x34\x20\x31\
+\x30\x33\x2e\x38\x36\x4c\x31\x39\x2e\x32\x38\x32\x20\x31\x30\x30\
+\x2e\x33\x39\x38\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x33\x2e\x34\x20\
+\x31\x34\x30\x2e\x34\x30\x31\x43\x2d\x33\x2e\x34\x20\x31\x34\x30\
+\x2e\x34\x30\x31\x20\x31\x2e\x38\x20\x31\x34\x30\x2e\x30\x30\x31\
+\x20\x30\x2e\x36\x20\x31\x34\x31\x2e\x36\x30\x31\x43\x2d\x30\x2e\
+\x36\x20\x31\x34\x33\x2e\x32\x30\x31\x20\x2d\x33\x20\x31\x34\x32\
+\x2e\x34\x30\x31\x20\x2d\x33\x20\x31\x34\x32\x2e\x34\x30\x31\x4c\
+\x2d\x33\x2e\x34\x20\x31\x34\x30\x2e\x34\x30\x31\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x39\
+\x39\x32\x36\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x37\x36\x2e\x36\x20\x34\x31\x2e\x32\x43\x2d\x37\
+\x36\x2e\x36\x20\x34\x31\x2e\x32\x20\x2d\x38\x31\x20\x35\x30\x20\
+\x2d\x38\x31\x2e\x34\x20\x35\x33\x2e\x32\x43\x2d\x38\x31\x2e\x34\
+\x20\x35\x33\x2e\x32\x20\x2d\x38\x30\x2e\x36\x20\x34\x34\x2e\x34\
+\x20\x2d\x37\x39\x2e\x34\x20\x34\x32\x2e\x34\x43\x2d\x37\x38\x2e\
+\x32\x20\x34\x30\x2e\x34\x20\x2d\x37\x36\x2e\x36\x20\x34\x31\x2e\
+\x32\x20\x2d\x37\x36\x2e\x36\x20\x34\x31\x2e\x32\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x39\
+\x39\x32\x36\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x39\x35\x20\x35\x35\x2e\x32\x43\x2d\x39\x35\x20\
+\x35\x35\x2e\x32\x20\x2d\x39\x38\x2e\x32\x20\x36\x39\x2e\x36\x20\
+\x2d\x39\x37\x2e\x38\x20\x37\x32\x2e\x34\x43\x2d\x39\x37\x2e\x38\
+\x20\x37\x32\x2e\x34\x20\x2d\x39\x39\x20\x36\x30\x2e\x38\x20\x2d\
+\x39\x38\x2e\x36\x20\x35\x39\x2e\x36\x43\x2d\x39\x38\x2e\x32\x20\
+\x35\x38\x2e\x34\x20\x2d\x39\x35\x20\x35\x35\x2e\x32\x20\x2d\x39\
+\x35\x20\x35\x35\x2e\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x37\x34\
+\x2e\x32\x20\x2d\x31\x39\x2e\x34\x4c\x2d\x37\x34\x2e\x34\x20\x2d\
+\x31\x36\x2e\x32\x4c\x2d\x37\x36\x2e\x36\x20\x2d\x31\x36\x43\x2d\
+\x37\x36\x2e\x36\x20\x2d\x31\x36\x20\x2d\x36\x32\x2e\x34\x20\x2d\
+\x33\x2e\x34\x20\x2d\x36\x31\x2e\x38\x20\x34\x2e\x32\x43\x2d\x36\
+\x31\x2e\x38\x20\x34\x2e\x32\x20\x2d\x36\x31\x20\x2d\x34\x20\x2d\
+\x37\x34\x2e\x32\x20\x2d\x31\x39\x2e\x34\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\
+\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x2d\x37\x30\x2e\x32\x31\x36\x20\x2d\x31\x38\x2e\x31\x33\x35\
+\x43\x2d\x37\x30\x2e\x36\x34\x37\x20\x2d\x31\x38\x2e\x35\x35\x31\
+\x20\x2d\x37\x30\x2e\x34\x32\x38\x20\x2d\x31\x39\x2e\x32\x39\x36\
+\x20\x2d\x37\x30\x2e\x38\x33\x36\x20\x2d\x31\x39\x2e\x35\x35\x36\
+\x43\x2d\x37\x31\x2e\x36\x34\x35\x20\x2d\x32\x30\x2e\x30\x37\x32\
+\x20\x2d\x36\x39\x2e\x35\x33\x38\x20\x2d\x32\x30\x2e\x31\x32\x39\
+\x20\x2d\x36\x39\x2e\x37\x36\x36\x20\x2d\x32\x30\x2e\x38\x34\x35\
+\x43\x2d\x37\x30\x2e\x31\x34\x39\x20\x2d\x32\x32\x2e\x30\x35\x31\
+\x20\x2d\x36\x39\x2e\x39\x36\x32\x20\x2d\x32\x32\x2e\x30\x37\x32\
+\x20\x2d\x37\x30\x2e\x30\x38\x34\x20\x2d\x32\x33\x2e\x33\x34\x38\
+\x43\x2d\x37\x30\x2e\x31\x34\x31\x20\x2d\x32\x33\x2e\x39\x34\x36\
+\x20\x2d\x36\x39\x2e\x35\x35\x33\x20\x2d\x32\x35\x2e\x34\x38\x36\
+\x20\x2d\x36\x39\x2e\x31\x36\x38\x20\x2d\x32\x35\x2e\x39\x32\x36\
+\x43\x2d\x36\x37\x2e\x37\x32\x32\x20\x2d\x32\x37\x2e\x35\x37\x38\
+\x20\x2d\x36\x39\x2e\x30\x34\x36\x20\x2d\x33\x30\x2e\x35\x31\x20\
+\x2d\x36\x37\x2e\x34\x30\x36\x20\x2d\x33\x32\x2e\x30\x36\x31\x43\
+\x2d\x36\x37\x2e\x31\x30\x32\x20\x2d\x33\x32\x2e\x33\x35\x20\x2d\
+\x36\x36\x2e\x37\x32\x36\x20\x2d\x33\x32\x2e\x39\x30\x32\x20\x2d\
+\x36\x36\x2e\x34\x34\x31\x20\x2d\x33\x33\x2e\x33\x32\x43\x2d\x36\
+\x35\x2e\x37\x38\x32\x20\x2d\x33\x34\x2e\x32\x38\x33\x20\x2d\x36\
+\x34\x2e\x35\x39\x38\x20\x2d\x33\x34\x2e\x37\x37\x31\x20\x2d\x36\
+\x33\x2e\x36\x34\x38\x20\x2d\x33\x35\x2e\x35\x39\x39\x43\x2d\x36\
+\x33\x2e\x33\x33\x20\x2d\x33\x35\x2e\x38\x37\x35\x20\x2d\x36\x33\
+\x2e\x35\x33\x31\x20\x2d\x33\x36\x2e\x37\x30\x32\x20\x2d\x36\x32\
+\x2e\x39\x36\x32\x20\x2d\x33\x36\x2e\x36\x31\x43\x2d\x36\x32\x2e\
+\x32\x34\x38\x20\x2d\x33\x36\x2e\x34\x39\x35\x20\x2d\x36\x31\x2e\
+\x30\x30\x37\x20\x2d\x33\x36\x2e\x36\x32\x35\x20\x2d\x36\x31\x2e\
+\x30\x35\x32\x20\x2d\x33\x35\x2e\x37\x38\x34\x43\x2d\x36\x31\x2e\
+\x31\x36\x35\x20\x2d\x33\x33\x2e\x36\x36\x34\x20\x2d\x36\x32\x2e\
+\x34\x39\x34\x20\x2d\x33\x31\x2e\x39\x34\x34\x20\x2d\x36\x33\x2e\
+\x37\x37\x34\x20\x2d\x33\x30\x2e\x32\x37\x36\x43\x2d\x36\x33\x2e\
+\x33\x32\x33\x20\x2d\x32\x39\x2e\x35\x37\x32\x20\x2d\x36\x33\x2e\
+\x37\x38\x31\x20\x2d\x32\x38\x2e\x39\x33\x37\x20\x2d\x36\x34\x2e\
+\x30\x36\x35\x20\x2d\x32\x38\x2e\x33\x38\x43\x2d\x36\x35\x2e\x34\
+\x20\x2d\x32\x35\x2e\x37\x36\x20\x2d\x36\x35\x2e\x32\x31\x31\x20\
+\x2d\x32\x32\x2e\x39\x31\x39\x20\x2d\x36\x35\x2e\x33\x38\x35\x20\
+\x2d\x32\x30\x2e\x30\x37\x39\x43\x2d\x36\x35\x2e\x33\x39\x20\x2d\
+\x31\x39\x2e\x39\x39\x34\x20\x2d\x36\x35\x2e\x36\x39\x37\x20\x2d\
+\x31\x39\x2e\x39\x31\x36\x20\x2d\x36\x35\x2e\x36\x38\x39\x20\x2d\
+\x31\x39\x2e\x38\x36\x33\x43\x2d\x36\x35\x2e\x33\x33\x36\x20\x2d\
+\x31\x37\x2e\x35\x32\x38\x20\x2d\x36\x34\x2e\x37\x35\x32\x20\x2d\
+\x31\x35\x2e\x33\x32\x39\x20\x2d\x36\x33\x2e\x38\x37\x33\x20\x2d\
+\x31\x33\x2e\x31\x43\x2d\x36\x33\x2e\x35\x30\x37\x20\x2d\x31\x32\
+\x2e\x31\x37\x20\x2d\x36\x33\x2e\x30\x33\x36\x20\x2d\x31\x31\x2e\
+\x32\x37\x35\x20\x2d\x36\x32\x2e\x38\x38\x36\x20\x2d\x31\x30\x2e\
+\x33\x34\x38\x43\x2d\x36\x32\x2e\x37\x37\x35\x20\x2d\x39\x2e\x36\
+\x36\x32\x20\x2d\x36\x32\x2e\x36\x37\x32\x20\x2d\x38\x2e\x38\x32\
+\x39\x20\x2d\x36\x33\x2e\x30\x38\x20\x2d\x38\x2e\x31\x32\x34\x43\
+\x2d\x36\x31\x2e\x30\x34\x35\x20\x2d\x35\x2e\x32\x33\x34\x20\x2d\
+\x36\x32\x2e\x33\x35\x34\x20\x2d\x32\x2e\x35\x38\x33\x20\x2d\x36\
+\x31\x2e\x31\x38\x35\x20\x30\x2e\x39\x34\x38\x43\x2d\x36\x30\x2e\
+\x39\x37\x38\x20\x31\x2e\x35\x37\x33\x20\x2d\x35\x39\x2e\x32\x38\
+\x36\x20\x33\x2e\x34\x38\x37\x20\x2d\x35\x39\x2e\x37\x34\x39\x20\
+\x33\x2e\x33\x32\x36\x43\x2d\x36\x32\x2e\x32\x36\x32\x20\x32\x2e\
+\x34\x35\x35\x20\x2d\x36\x32\x2e\x33\x37\x34\x20\x32\x2e\x30\x35\
+\x37\x20\x2d\x36\x32\x2e\x35\x35\x31\x20\x31\x2e\x33\x30\x34\x43\
+\x2d\x36\x32\x2e\x36\x39\x37\x20\x30\x2e\x36\x38\x31\x20\x2d\x36\
+\x33\x2e\x30\x32\x37\x20\x2d\x30\x2e\x36\x39\x36\x20\x2d\x36\x33\
+\x2e\x32\x36\x34\x20\x2d\x31\x2e\x32\x39\x38\x43\x2d\x36\x33\x2e\
+\x33\x32\x38\x20\x2d\x31\x2e\x34\x36\x32\x20\x2d\x36\x33\x2e\x34\
+\x39\x39\x20\x2d\x33\x2e\x33\x34\x36\x20\x2d\x36\x33\x2e\x35\x37\
+\x37\x20\x2d\x33\x2e\x34\x36\x38\x43\x2d\x36\x35\x2e\x30\x39\x20\
+\x2d\x35\x2e\x38\x35\x20\x2d\x36\x33\x2e\x37\x33\x32\x20\x2d\x35\
+\x2e\x36\x37\x34\x20\x2d\x36\x35\x2e\x31\x30\x32\x20\x2d\x38\x2e\
+\x30\x33\x32\x43\x2d\x36\x36\x2e\x35\x33\x20\x2d\x38\x2e\x37\x31\
+\x32\x20\x2d\x36\x37\x2e\x34\x39\x36\x20\x2d\x39\x2e\x38\x31\x36\
+\x20\x2d\x36\x38\x2e\x36\x31\x39\x20\x2d\x31\x30\x2e\x39\x37\x38\
+\x43\x2d\x36\x38\x2e\x38\x31\x37\x20\x2d\x31\x31\x2e\x31\x38\x32\
+\x20\x2d\x36\x37\x2e\x36\x37\x34\x20\x2d\x31\x31\x2e\x39\x30\x36\
+\x20\x2d\x36\x37\x2e\x38\x35\x35\x20\x2d\x31\x32\x2e\x31\x31\x39\
+\x43\x2d\x36\x38\x2e\x39\x34\x37\x20\x2d\x31\x33\x2e\x34\x30\x38\
+\x20\x2d\x37\x30\x2e\x31\x20\x2d\x31\x34\x2e\x31\x37\x35\x20\x2d\
+\x36\x39\x2e\x37\x36\x34\x20\x2d\x31\x35\x2e\x36\x36\x38\x43\x2d\
+\x36\x39\x2e\x36\x30\x39\x20\x2d\x31\x36\x2e\x33\x35\x38\x20\x2d\
+\x36\x39\x2e\x34\x37\x32\x20\x2d\x31\x37\x2e\x34\x31\x35\x20\x2d\
+\x37\x30\x2e\x32\x31\x36\x20\x2d\x31\x38\x2e\x31\x33\x35\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x2d\x37\x33\x2e\x38\x20\x2d\x31\x36\x2e\x34\
+\x43\x2d\x37\x33\x2e\x38\x20\x2d\x31\x36\x2e\x34\x20\x2d\x37\x33\
+\x2e\x34\x20\x2d\x39\x2e\x36\x20\x2d\x37\x31\x20\x2d\x38\x43\x2d\
+\x36\x38\x2e\x36\x20\x2d\x36\x2e\x34\x20\x2d\x36\x39\x2e\x38\x20\
+\x2d\x37\x2e\x32\x20\x2d\x37\x33\x20\x2d\x38\x2e\x34\x43\x2d\x37\
+\x36\x2e\x32\x20\x2d\x39\x2e\x36\x20\x2d\x37\x35\x20\x2d\x31\x30\
+\x2e\x34\x20\x2d\x37\x35\x20\x2d\x31\x30\x2e\x34\x43\x2d\x37\x35\
+\x20\x2d\x31\x30\x2e\x34\x20\x2d\x37\x37\x2e\x38\x20\x2d\x31\x30\
+\x20\x2d\x37\x35\x2e\x34\x20\x2d\x38\x43\x2d\x37\x33\x20\x2d\x36\
+\x20\x2d\x36\x39\x2e\x34\x20\x2d\x33\x2e\x36\x20\x2d\x37\x31\x20\
+\x2d\x33\x2e\x36\x43\x2d\x37\x32\x2e\x36\x20\x2d\x33\x2e\x36\x20\
+\x2d\x38\x30\x2e\x32\x20\x2d\x37\x2e\x36\x20\x2d\x38\x30\x2e\x32\
+\x20\x2d\x31\x30\x2e\x34\x43\x2d\x38\x30\x2e\x32\x20\x2d\x31\x33\
+\x2e\x32\x20\x2d\x38\x31\x2e\x32\x20\x2d\x31\x37\x2e\x33\x20\x2d\
+\x38\x31\x2e\x32\x20\x2d\x31\x37\x2e\x33\x43\x2d\x38\x31\x2e\x32\
+\x20\x2d\x31\x37\x2e\x33\x20\x2d\x38\x30\x2e\x31\x20\x2d\x31\x38\
+\x2e\x31\x20\x2d\x37\x35\x2e\x33\x20\x2d\x31\x38\x43\x2d\x37\x35\
+\x2e\x33\x20\x2d\x31\x38\x20\x2d\x37\x33\x2e\x39\x20\x2d\x31\x37\
+\x2e\x33\x20\x2d\x37\x33\x2e\x38\x20\x2d\x31\x36\x2e\x34\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\
+\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\
+\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x2d\x37\x34\x2e\x36\x20\x32\x2e\x32\x43\
+\x2d\x37\x34\x2e\x36\x20\x32\x2e\x32\x20\x2d\x38\x33\x2e\x31\x32\
+\x20\x2d\x30\x2e\x35\x39\x31\x20\x2d\x31\x30\x31\x2e\x36\x20\x32\
+\x2e\x38\x43\x2d\x31\x30\x31\x2e\x36\x20\x32\x2e\x38\x20\x2d\x39\
+\x32\x2e\x35\x36\x39\x20\x30\x2e\x37\x32\x32\x20\x2d\x37\x33\x2e\
+\x38\x20\x33\x43\x2d\x36\x33\x2e\x35\x20\x34\x2e\x32\x35\x20\x2d\
+\x37\x34\x2e\x36\x20\x32\x2e\x32\x20\x2d\x37\x34\x2e\x36\x20\x32\
+\x2e\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\
+\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\
+\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\
+\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x37\x32\x2e\x35\x30\
+\x32\x20\x32\x2e\x31\x32\x39\x43\x2d\x37\x32\x2e\x35\x30\x32\x20\
+\x32\x2e\x31\x32\x39\x20\x2d\x38\x30\x2e\x37\x34\x38\x20\x2d\x31\
+\x2e\x33\x38\x39\x20\x2d\x39\x39\x2e\x34\x35\x33\x20\x30\x2e\x33\
+\x39\x32\x43\x2d\x39\x39\x2e\x34\x35\x33\x20\x30\x2e\x33\x39\x32\
+\x20\x2d\x39\x30\x2e\x32\x37\x35\x20\x2d\x30\x2e\x38\x39\x37\x20\
+\x2d\x37\x31\x2e\x37\x37\x34\x20\x32\x2e\x39\x39\x35\x43\x2d\x36\
+\x31\x2e\x36\x32\x20\x35\x2e\x31\x33\x31\x20\x2d\x37\x32\x2e\x35\
+\x30\x32\x20\x32\x2e\x31\x32\x39\x20\x2d\x37\x32\x2e\x35\x30\x32\
+\x20\x32\x2e\x31\x32\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\
+\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\
+\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\
+\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x37\
+\x30\x2e\x37\x31\x34\x20\x32\x2e\x32\x32\x32\x43\x2d\x37\x30\x2e\
+\x37\x31\x34\x20\x32\x2e\x32\x32\x32\x20\x2d\x37\x38\x2e\x36\x37\
+\x36\x20\x2d\x31\x2e\x38\x39\x39\x20\x2d\x39\x37\x2e\x34\x36\x31\
+\x20\x2d\x31\x2e\x35\x31\x34\x43\x2d\x39\x37\x2e\x34\x36\x31\x20\
+\x2d\x31\x2e\x35\x31\x34\x20\x2d\x38\x38\x2e\x32\x31\x33\x20\x2d\
+\x32\x2e\x31\x31\x38\x20\x2d\x37\x30\x2e\x30\x35\x32\x20\x33\x2e\
+\x31\x34\x43\x2d\x36\x30\x2e\x30\x38\x36\x20\x36\x2e\x30\x32\x35\
+\x20\x2d\x37\x30\x2e\x37\x31\x34\x20\x32\x2e\x32\x32\x32\x20\x2d\
+\x37\x30\x2e\x37\x31\x34\x20\x32\x2e\x32\x32\x32\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\
+\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\
+\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\
+\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x36\x39\x2e\x34\x34\x34\x20\x32\x2e\x34\x34\
+\x35\x43\x2d\x36\x39\x2e\x34\x34\x34\x20\x32\x2e\x34\x34\x35\x20\
+\x2d\x37\x36\x2e\x32\x36\x38\x20\x2d\x31\x2e\x38\x36\x32\x20\x2d\
+\x39\x33\x2e\x31\x34\x32\x20\x2d\x32\x2e\x39\x36\x43\x2d\x39\x33\
+\x2e\x31\x34\x32\x20\x2d\x32\x2e\x39\x36\x20\x2d\x38\x34\x2e\x38\
+\x30\x33\x20\x2d\x32\x2e\x37\x39\x20\x2d\x36\x38\x2e\x39\x32\x32\
+\x20\x33\x2e\x33\x31\x39\x43\x2d\x36\x30\x2e\x32\x30\x36\x20\x36\
+\x2e\x36\x37\x32\x20\x2d\x36\x39\x2e\x34\x34\x34\x20\x32\x2e\x34\
+\x34\x35\x20\x2d\x36\x39\x2e\x34\x34\x34\x20\x32\x2e\x34\x34\x35\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\
+\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\
+\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x34\x35\x2e\x38\x34\x20\x31\x32\
+\x2e\x39\x36\x31\x43\x34\x35\x2e\x38\x34\x20\x31\x32\x2e\x39\x36\
+\x31\x20\x34\x34\x2e\x39\x31\x20\x31\x33\x2e\x36\x30\x35\x20\x34\
+\x35\x2e\x31\x32\x34\x20\x31\x32\x2e\x34\x32\x34\x43\x34\x35\x2e\
+\x33\x33\x39\x20\x31\x31\x2e\x32\x34\x33\x20\x37\x33\x2e\x35\x34\
+\x37\x20\x2d\x31\x2e\x39\x32\x37\x20\x37\x37\x2e\x31\x36\x31\x20\
+\x2d\x31\x2e\x36\x37\x37\x43\x37\x37\x2e\x31\x36\x31\x20\x2d\x31\
+\x2e\x36\x37\x37\x20\x34\x36\x2e\x39\x31\x33\x20\x31\x31\x2e\x35\
+\x32\x39\x20\x34\x35\x2e\x38\x34\x20\x31\x32\x2e\x39\x36\x31\x7a\
+\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\
+\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\
+\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\
+\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x34\x32\x2e\x34\x34\x36\x20\x31\x33\
+\x2e\x36\x43\x34\x32\x2e\x34\x34\x36\x20\x31\x33\x2e\x36\x20\x34\
+\x31\x2e\x35\x37\x20\x31\x34\x2e\x33\x31\x35\x20\x34\x31\x2e\x36\
+\x39\x31\x20\x31\x33\x2e\x31\x32\x31\x43\x34\x31\x2e\x38\x31\x32\
+\x20\x31\x31\x2e\x39\x32\x37\x20\x36\x38\x2e\x38\x39\x39\x20\x2d\
+\x33\x2e\x34\x31\x38\x20\x37\x32\x2e\x35\x32\x31\x20\x2d\x33\x2e\
+\x34\x35\x32\x43\x37\x32\x2e\x35\x32\x31\x20\x2d\x33\x2e\x34\x35\
+\x32\x20\x34\x33\x2e\x34\x30\x34\x20\x31\x32\x2e\x30\x38\x39\x20\
+\x34\x32\x2e\x34\x34\x36\x20\x31\x33\x2e\x36\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\
+\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\
+\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x33\x39\x2e\x31\x36\x20\x31\x34\x2e\x39\x37\x35\x43\
+\x33\x39\x2e\x31\x36\x20\x31\x34\x2e\x39\x37\x35\x20\x33\x38\x2e\
+\x33\x33\x32\x20\x31\x35\x2e\x37\x34\x37\x20\x33\x38\x2e\x33\x37\
+\x34\x20\x31\x34\x2e\x35\x34\x37\x43\x33\x38\x2e\x34\x31\x36\x20\
+\x31\x33\x2e\x33\x34\x38\x20\x35\x38\x2e\x32\x33\x33\x20\x2d\x32\
+\x2e\x31\x34\x39\x20\x36\x38\x2e\x30\x34\x35\x20\x2d\x34\x2e\x30\
+\x32\x33\x43\x36\x38\x2e\x30\x34\x35\x20\x2d\x34\x2e\x30\x32\x33\
+\x20\x35\x30\x2e\x30\x31\x35\x20\x34\x2e\x31\x30\x34\x20\x33\x39\
+\x2e\x31\x36\x20\x31\x34\x2e\x39\x37\x35\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\
+\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\
+\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x33\x36\x2e\x32\x38\x34\x20\x31\x36\x2e\x38\x33\x38\x43\
+\x33\x36\x2e\x32\x38\x34\x20\x31\x36\x2e\x38\x33\x38\x20\x33\x35\
+\x2e\x35\x33\x39\x20\x31\x37\x2e\x35\x33\x32\x20\x33\x35\x2e\x35\
+\x37\x37\x20\x31\x36\x2e\x34\x35\x33\x43\x33\x35\x2e\x36\x31\x35\
+\x20\x31\x35\x2e\x33\x37\x33\x20\x35\x33\x2e\x34\x34\x39\x20\x31\
+\x2e\x34\x32\x36\x20\x36\x32\x2e\x32\x38\x20\x2d\x30\x2e\x32\x36\
+\x43\x36\x32\x2e\x32\x38\x20\x2d\x30\x2e\x32\x36\x20\x34\x36\x2e\
+\x30\x35\x34\x20\x37\x2e\x30\x35\x34\x20\x33\x36\x2e\x32\x38\x34\
+\x20\x31\x36\x2e\x38\x33\x38\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x34\x2e\
+\x36\x20\x31\x36\x34\x2e\x38\x30\x31\x43\x34\x2e\x36\x20\x31\x36\
+\x34\x2e\x38\x30\x31\x20\x2d\x31\x30\x2e\x36\x20\x31\x36\x32\x2e\
+\x34\x30\x31\x20\x36\x2e\x32\x20\x31\x36\x30\x2e\x38\x30\x31\x43\
+\x36\x2e\x32\x20\x31\x36\x30\x2e\x38\x30\x31\x20\x32\x34\x2e\x32\
+\x20\x31\x35\x38\x2e\x38\x30\x31\x20\x32\x38\x2e\x32\x20\x31\x35\
+\x33\x2e\x36\x30\x31\x43\x32\x38\x2e\x32\x20\x31\x35\x33\x2e\x36\
+\x30\x31\x20\x34\x31\x2e\x38\x20\x31\x34\x34\x2e\x34\x30\x31\x20\
+\x34\x34\x2e\x36\x20\x31\x34\x34\x2e\x30\x30\x31\x43\x34\x37\x2e\
+\x34\x20\x31\x34\x33\x2e\x36\x30\x31\x20\x36\x33\x2e\x38\x20\x31\
+\x34\x30\x2e\x30\x30\x31\x20\x36\x34\x2e\x32\x20\x31\x33\x37\x2e\
+\x36\x30\x31\x43\x36\x34\x2e\x36\x20\x31\x33\x35\x2e\x32\x30\x31\
+\x20\x37\x30\x2e\x36\x20\x31\x33\x32\x2e\x38\x30\x31\x20\x37\x32\
+\x2e\x32\x20\x31\x33\x33\x2e\x36\x30\x31\x43\x37\x33\x2e\x38\x20\
+\x31\x33\x34\x2e\x34\x30\x31\x20\x37\x33\x2e\x38\x20\x31\x34\x33\
+\x2e\x36\x30\x31\x20\x37\x31\x20\x31\x34\x34\x2e\x34\x30\x31\x43\
+\x36\x38\x2e\x32\x20\x31\x34\x35\x2e\x32\x30\x31\x20\x34\x39\x2e\
+\x34\x20\x31\x35\x32\x2e\x34\x30\x31\x20\x34\x33\x20\x31\x35\x33\
+\x2e\x36\x30\x31\x43\x33\x36\x2e\x36\x20\x31\x35\x34\x2e\x38\x30\
+\x31\x20\x32\x35\x20\x31\x36\x32\x2e\x34\x30\x31\x20\x32\x30\x2e\
+\x32\x20\x31\x36\x33\x2e\x36\x30\x31\x43\x31\x35\x2e\x34\x20\x31\
+\x36\x34\x2e\x38\x30\x31\x20\x34\x2e\x36\x20\x31\x36\x34\x2e\x38\
+\x30\x31\x20\x34\x2e\x36\x20\x31\x36\x34\x2e\x38\x30\x31\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x37\x37\x2e\x36\x20\x31\x32\x37\x2e\x34\x30\
+\x31\x43\x37\x37\x2e\x36\x20\x31\x32\x37\x2e\x34\x30\x31\x20\x37\
+\x34\x2e\x36\x20\x31\x32\x39\x2e\x30\x30\x31\x20\x37\x33\x2e\x34\
+\x20\x31\x33\x31\x2e\x36\x30\x31\x43\x37\x33\x2e\x34\x20\x31\x33\
+\x31\x2e\x36\x30\x31\x20\x36\x37\x20\x31\x34\x32\x2e\x32\x30\x31\
+\x20\x35\x32\x2e\x38\x20\x31\x34\x35\x2e\x34\x30\x31\x43\x35\x32\
+\x2e\x38\x20\x31\x34\x35\x2e\x34\x30\x31\x20\x32\x39\x2e\x38\x20\
+\x31\x35\x34\x2e\x34\x30\x31\x20\x32\x32\x20\x31\x35\x36\x2e\x34\
+\x30\x31\x43\x32\x32\x20\x31\x35\x36\x2e\x34\x30\x31\x20\x38\x2e\
+\x36\x20\x31\x36\x31\x2e\x34\x30\x31\x20\x31\x2e\x32\x20\x31\x36\
+\x30\x2e\x36\x30\x31\x43\x31\x2e\x32\x20\x31\x36\x30\x2e\x36\x30\
+\x31\x20\x2d\x35\x2e\x38\x20\x31\x36\x30\x2e\x38\x30\x31\x20\x30\
+\x2e\x34\x20\x31\x36\x32\x2e\x34\x30\x31\x43\x30\x2e\x34\x20\x31\
+\x36\x32\x2e\x34\x30\x31\x20\x32\x30\x2e\x36\x20\x31\x36\x30\x2e\
+\x34\x30\x31\x20\x32\x34\x20\x31\x35\x38\x2e\x36\x30\x31\x43\x32\
+\x34\x20\x31\x35\x38\x2e\x36\x30\x31\x20\x33\x39\x2e\x36\x20\x31\
+\x35\x33\x2e\x34\x30\x31\x20\x34\x32\x2e\x36\x20\x31\x35\x30\x2e\
+\x38\x30\x31\x43\x34\x35\x2e\x36\x20\x31\x34\x38\x2e\x32\x30\x31\
+\x20\x36\x33\x2e\x38\x20\x31\x34\x33\x2e\x32\x30\x31\x20\x36\x36\
+\x20\x31\x34\x31\x2e\x32\x30\x31\x43\x36\x38\x2e\x32\x20\x31\x33\
+\x39\x2e\x32\x30\x31\x20\x37\x38\x20\x31\x33\x30\x2e\x38\x30\x31\
+\x20\x37\x37\x2e\x36\x20\x31\x32\x37\x2e\x34\x30\x31\x7a\x22\x7d\
+\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\
+\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x31\x38\x2e\x38\x38\x32\x20\x31\x35\x38\x2e\x39\
+\x31\x31\x43\x31\x38\x2e\x38\x38\x32\x20\x31\x35\x38\x2e\x39\x31\
+\x31\x20\x32\x34\x2e\x31\x31\x31\x20\x31\x35\x38\x2e\x36\x38\x35\
+\x20\x32\x32\x2e\x39\x35\x38\x20\x31\x36\x30\x2e\x32\x33\x34\x43\
+\x32\x31\x2e\x38\x30\x35\x20\x31\x36\x31\x2e\x37\x38\x34\x20\x31\
+\x39\x2e\x33\x35\x37\x20\x31\x36\x30\x2e\x39\x31\x20\x31\x39\x2e\
+\x33\x35\x37\x20\x31\x36\x30\x2e\x39\x31\x4c\x31\x38\x2e\x38\x38\
+\x32\x20\x31\x35\x38\x2e\x39\x31\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\
+\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\
+\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\
+\x31\x31\x2e\x36\x38\x20\x31\x36\x30\x2e\x32\x36\x33\x43\x31\x31\
+\x2e\x36\x38\x20\x31\x36\x30\x2e\x32\x36\x33\x20\x31\x36\x2e\x39\
+\x30\x38\x20\x31\x36\x30\x2e\x30\x33\x37\x20\x31\x35\x2e\x37\x35\
+\x36\x20\x31\x36\x31\x2e\x35\x38\x36\x43\x31\x34\x2e\x36\x30\x33\
+\x20\x31\x36\x33\x2e\x31\x33\x36\x20\x31\x32\x2e\x31\x35\x35\x20\
+\x31\x36\x32\x2e\x32\x36\x33\x20\x31\x32\x2e\x31\x35\x35\x20\x31\
+\x36\x32\x2e\x32\x36\x33\x4c\x31\x31\x2e\x36\x38\x20\x31\x36\x30\
+\x2e\x32\x36\x33\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x2e\x32\x35\x31\
+\x20\x31\x36\x31\x2e\x35\x31\x31\x43\x31\x2e\x32\x35\x31\x20\x31\
+\x36\x31\x2e\x35\x31\x31\x20\x36\x2e\x34\x38\x20\x31\x36\x31\x2e\
+\x32\x38\x34\x20\x35\x2e\x33\x32\x37\x20\x31\x36\x32\x2e\x38\x33\
+\x34\x43\x34\x2e\x31\x37\x34\x20\x31\x36\x34\x2e\x33\x38\x33\x20\
+\x31\x2e\x37\x32\x36\x20\x31\x36\x33\x2e\x35\x31\x20\x31\x2e\x37\
+\x32\x36\x20\x31\x36\x33\x2e\x35\x31\x4c\x31\x2e\x32\x35\x31\x20\
+\x31\x36\x31\x2e\x35\x31\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x36\
+\x2e\x33\x38\x33\x20\x31\x36\x32\x2e\x30\x35\x35\x43\x2d\x36\x2e\
+\x33\x38\x33\x20\x31\x36\x32\x2e\x30\x35\x35\x20\x2d\x31\x2e\x31\
+\x35\x34\x20\x31\x36\x31\x2e\x38\x32\x39\x20\x2d\x32\x2e\x33\x30\
+\x37\x20\x31\x36\x33\x2e\x33\x37\x38\x43\x2d\x33\x2e\x34\x36\x20\
+\x31\x36\x34\x2e\x39\x32\x38\x20\x2d\x35\x2e\x39\x30\x38\x20\x31\
+\x36\x34\x2e\x30\x35\x34\x20\x2d\x35\x2e\x39\x30\x38\x20\x31\x36\
+\x34\x2e\x30\x35\x34\x4c\x2d\x36\x2e\x33\x38\x33\x20\x31\x36\x32\
+\x2e\x30\x35\x35\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x33\x35\x2e\x34\x31\
+\x35\x20\x31\x35\x31\x2e\x35\x31\x33\x43\x33\x35\x2e\x34\x31\x35\
+\x20\x31\x35\x31\x2e\x35\x31\x33\x20\x34\x32\x2e\x33\x37\x35\x20\
+\x31\x35\x31\x2e\x32\x31\x32\x20\x34\x30\x2e\x38\x34\x20\x31\x35\
+\x33\x2e\x32\x37\x34\x43\x33\x39\x2e\x33\x30\x36\x20\x31\x35\x35\
+\x2e\x33\x33\x36\x20\x33\x36\x2e\x30\x34\x37\x20\x31\x35\x34\x2e\
+\x31\x37\x34\x20\x33\x36\x2e\x30\x34\x37\x20\x31\x35\x34\x2e\x31\
+\x37\x34\x4c\x33\x35\x2e\x34\x31\x35\x20\x31\x35\x31\x2e\x35\x31\
+\x33\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x34\x35\x2e\x37\x33\x20\x31\x34\
+\x37\x2e\x30\x38\x38\x43\x34\x35\x2e\x37\x33\x20\x31\x34\x37\x2e\
+\x30\x38\x38\x20\x35\x31\x2e\x36\x38\x39\x20\x31\x34\x33\x2e\x37\
+\x38\x37\x20\x35\x31\x2e\x31\x35\x35\x20\x31\x34\x38\x2e\x38\x34\
+\x39\x43\x35\x30\x2e\x38\x38\x35\x20\x31\x35\x31\x2e\x34\x30\x35\
+\x20\x34\x36\x2e\x33\x36\x32\x20\x31\x34\x39\x2e\x37\x34\x39\x20\
+\x34\x36\x2e\x33\x36\x32\x20\x31\x34\x39\x2e\x37\x34\x39\x4c\x34\
+\x35\x2e\x37\x33\x20\x31\x34\x37\x2e\x30\x38\x38\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\
+\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x35\x34\x2e\x38\x36\x32\x20\x31\x34\x34\x2e\x32\x37\
+\x34\x43\x35\x34\x2e\x38\x36\x32\x20\x31\x34\x34\x2e\x32\x37\x34\
+\x20\x36\x32\x2e\x30\x32\x31\x20\x31\x34\x30\x2e\x35\x37\x33\x20\
+\x36\x30\x2e\x32\x38\x37\x20\x31\x34\x36\x2e\x30\x33\x35\x43\x35\
+\x39\x2e\x35\x30\x39\x20\x31\x34\x38\x2e\x34\x38\x35\x20\x35\x35\
+\x2e\x34\x39\x33\x20\x31\x34\x36\x2e\x39\x33\x35\x20\x35\x35\x2e\
+\x34\x39\x33\x20\x31\x34\x36\x2e\x39\x33\x35\x4c\x35\x34\x2e\x38\
+\x36\x32\x20\x31\x34\x34\x2e\x32\x37\x34\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\
+\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x36\x34\x2e\x33\x37\x36\x20\x31\x33\x39\x2e\x34\x34\x39\x43\
+\x36\x34\x2e\x33\x37\x36\x20\x31\x33\x39\x2e\x34\x34\x39\x20\x36\
+\x38\x2e\x37\x33\x35\x20\x31\x33\x34\x2e\x35\x34\x38\x20\x36\x39\
+\x2e\x38\x30\x31\x20\x31\x34\x31\x2e\x32\x31\x43\x37\x30\x2e\x32\
+\x30\x37\x20\x31\x34\x33\x2e\x37\x34\x38\x20\x36\x35\x2e\x30\x30\
+\x38\x20\x31\x34\x32\x2e\x31\x31\x20\x36\x35\x2e\x30\x30\x38\x20\
+\x31\x34\x32\x2e\x31\x31\x4c\x36\x34\x2e\x33\x37\x36\x20\x31\x33\
+\x39\x2e\x34\x34\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x32\x36\x2e\x38\
+\x33\x34\x20\x31\x35\x35\x2e\x39\x39\x37\x43\x32\x36\x2e\x38\x33\
+\x34\x20\x31\x35\x35\x2e\x39\x39\x37\x20\x33\x32\x2e\x30\x36\x32\
+\x20\x31\x35\x35\x2e\x37\x37\x20\x33\x30\x2e\x39\x31\x20\x31\x35\
+\x37\x2e\x33\x32\x43\x32\x39\x2e\x37\x35\x37\x20\x31\x35\x38\x2e\
+\x38\x36\x39\x20\x32\x37\x2e\x33\x30\x38\x20\x31\x35\x37\x2e\x39\
+\x39\x36\x20\x32\x37\x2e\x33\x30\x38\x20\x31\x35\x37\x2e\x39\x39\
+\x36\x4c\x32\x36\x2e\x38\x33\x34\x20\x31\x35\x35\x2e\x39\x39\x37\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\
+\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\
+\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x36\x32\x2e\x34\x33\x34\x20\x33\
+\x34\x2e\x36\x30\x33\x43\x36\x32\x2e\x34\x33\x34\x20\x33\x34\x2e\
+\x36\x30\x33\x20\x36\x31\x2e\x37\x30\x38\x20\x33\x35\x2e\x32\x36\
+\x38\x20\x36\x31\x2e\x37\x30\x37\x20\x33\x34\x2e\x31\x39\x37\x43\
+\x36\x31\x2e\x37\x30\x37\x20\x33\x33\x2e\x31\x32\x37\x20\x37\x39\
+\x2e\x31\x39\x31\x20\x31\x39\x2e\x38\x36\x33\x20\x38\x38\x2e\x30\
+\x33\x34\x20\x31\x38\x2e\x34\x37\x39\x43\x38\x38\x2e\x30\x33\x34\
+\x20\x31\x38\x2e\x34\x37\x39\x20\x37\x31\x2e\x39\x33\x35\x20\x32\
+\x35\x2e\x32\x30\x38\x20\x36\x32\x2e\x34\x33\x34\x20\x33\x34\x2e\
+\x36\x30\x33\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\
+\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x36\x35\x2e\x34\x20\x39\
+\x38\x2e\x34\x43\x36\x35\x2e\x34\x20\x39\x38\x2e\x34\x20\x38\x37\
+\x2e\x34\x30\x31\x20\x31\x32\x30\x2e\x38\x30\x31\x20\x39\x36\x2e\
+\x36\x30\x31\x20\x31\x32\x34\x2e\x34\x30\x31\x43\x39\x36\x2e\x36\
+\x30\x31\x20\x31\x32\x34\x2e\x34\x30\x31\x20\x31\x30\x35\x2e\x38\
+\x30\x31\x20\x31\x33\x35\x2e\x36\x30\x31\x20\x31\x30\x31\x2e\x38\
+\x30\x31\x20\x31\x36\x31\x2e\x36\x30\x31\x43\x31\x30\x31\x2e\x38\
+\x30\x31\x20\x31\x36\x31\x2e\x36\x30\x31\x20\x39\x38\x2e\x36\x30\
+\x31\x20\x31\x36\x39\x2e\x32\x30\x31\x20\x39\x35\x2e\x34\x30\x31\
+\x20\x31\x34\x38\x2e\x34\x30\x31\x43\x39\x35\x2e\x34\x30\x31\x20\
+\x31\x34\x38\x2e\x34\x30\x31\x20\x39\x38\x2e\x36\x30\x31\x20\x31\
+\x32\x33\x2e\x32\x30\x31\x20\x38\x37\x2e\x34\x30\x31\x20\x31\x33\
+\x39\x2e\x32\x30\x31\x43\x38\x37\x2e\x34\x30\x31\x20\x31\x33\x39\
+\x2e\x32\x30\x31\x20\x37\x39\x20\x31\x32\x39\x2e\x33\x30\x31\x20\
+\x38\x35\x2e\x34\x20\x31\x32\x39\x2e\x36\x30\x31\x43\x38\x35\x2e\
+\x34\x20\x31\x32\x39\x2e\x36\x30\x31\x20\x38\x38\x2e\x36\x30\x31\
+\x20\x31\x33\x31\x2e\x36\x30\x31\x20\x38\x39\x2e\x30\x30\x31\x20\
+\x31\x33\x30\x2e\x30\x30\x31\x43\x38\x39\x2e\x34\x30\x31\x20\x31\
+\x32\x38\x2e\x34\x30\x31\x20\x38\x31\x2e\x34\x20\x31\x31\x34\x2e\
+\x38\x30\x31\x20\x36\x34\x2e\x32\x20\x31\x30\x30\x2e\x34\x43\x34\
+\x37\x20\x38\x36\x20\x36\x35\x2e\x34\x20\x39\x38\x2e\x34\x20\x36\
+\x35\x2e\x34\x20\x39\x38\x2e\x34\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\
+\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\
+\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\
+\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\
+\x37\x20\x31\x33\x37\x2e\x32\x30\x31\x43\x37\x20\x31\x33\x37\x2e\
+\x32\x30\x31\x20\x36\x2e\x38\x20\x31\x33\x35\x2e\x34\x30\x31\x20\
+\x38\x2e\x36\x20\x31\x33\x36\x2e\x32\x30\x31\x43\x31\x30\x2e\x34\
+\x20\x31\x33\x37\x2e\x30\x30\x31\x20\x31\x30\x34\x2e\x36\x30\x31\
+\x20\x31\x34\x33\x2e\x32\x30\x31\x20\x31\x33\x36\x2e\x32\x30\x31\
+\x20\x31\x36\x37\x2e\x32\x30\x31\x43\x31\x33\x36\x2e\x32\x30\x31\
+\x20\x31\x36\x37\x2e\x32\x30\x31\x20\x39\x31\x2e\x30\x30\x31\x20\
+\x31\x34\x34\x2e\x30\x30\x31\x20\x37\x20\x31\x33\x37\x2e\x32\x30\
+\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\
+\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\
+\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x37\x2e\x34\x20\x31\x33\
+\x32\x2e\x38\x30\x31\x43\x31\x37\x2e\x34\x20\x31\x33\x32\x2e\x38\
+\x30\x31\x20\x31\x37\x2e\x32\x20\x31\x33\x31\x2e\x30\x30\x31\x20\
+\x31\x39\x20\x31\x33\x31\x2e\x38\x30\x31\x43\x32\x30\x2e\x38\x20\
+\x31\x33\x32\x2e\x36\x30\x31\x20\x31\x35\x37\x2e\x34\x30\x31\x20\
+\x31\x33\x31\x2e\x36\x30\x31\x20\x31\x38\x31\x2e\x30\x30\x31\x20\
+\x31\x36\x34\x2e\x30\x30\x31\x43\x31\x38\x31\x2e\x30\x30\x31\x20\
+\x31\x36\x34\x2e\x30\x30\x31\x20\x31\x35\x39\x2e\x30\x30\x31\x20\
+\x31\x33\x38\x2e\x38\x30\x31\x20\x31\x37\x2e\x34\x20\x31\x33\x32\
+\x2e\x38\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\
+\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\
+\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x32\x39\x20\x31\
+\x32\x38\x2e\x38\x30\x31\x43\x32\x39\x20\x31\x32\x38\x2e\x38\x30\
+\x31\x20\x32\x38\x2e\x38\x20\x31\x32\x37\x2e\x30\x30\x31\x20\x33\
+\x30\x2e\x36\x20\x31\x32\x37\x2e\x38\x30\x31\x43\x33\x32\x2e\x34\
+\x20\x31\x32\x38\x2e\x36\x30\x31\x20\x32\x30\x35\x2e\x38\x30\x31\
+\x20\x31\x31\x35\x2e\x36\x30\x31\x20\x32\x32\x39\x2e\x34\x30\x31\
+\x20\x31\x34\x38\x2e\x30\x30\x31\x43\x32\x32\x39\x2e\x34\x30\x31\
+\x20\x31\x34\x38\x2e\x30\x30\x31\x20\x32\x31\x39\x2e\x38\x30\x31\
+\x20\x31\x32\x32\x2e\x34\x30\x31\x20\x32\x39\x20\x31\x32\x38\x2e\
+\x38\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\
+\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\
+\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x33\x39\x20\x31\x32\
+\x34\x2e\x30\x30\x31\x43\x33\x39\x20\x31\x32\x34\x2e\x30\x30\x31\
+\x20\x33\x38\x2e\x38\x20\x31\x32\x32\x2e\x32\x30\x31\x20\x34\x30\
+\x2e\x36\x20\x31\x32\x33\x2e\x30\x30\x31\x43\x34\x32\x2e\x34\x20\
+\x31\x32\x33\x2e\x38\x30\x31\x20\x31\x36\x34\x2e\x36\x30\x31\x20\
+\x38\x35\x2e\x32\x20\x31\x38\x38\x2e\x32\x30\x31\x20\x31\x31\x37\
+\x2e\x36\x30\x31\x43\x31\x38\x38\x2e\x32\x30\x31\x20\x31\x31\x37\
+\x2e\x36\x30\x31\x20\x31\x37\x34\x2e\x38\x30\x31\x20\x39\x33\x20\
+\x33\x39\x20\x31\x32\x34\x2e\x30\x30\x31\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\
+\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\
+\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x2d\x31\x39\x20\x31\x34\x36\x2e\x38\x30\x31\x43\x2d\x31\
+\x39\x20\x31\x34\x36\x2e\x38\x30\x31\x20\x2d\x31\x39\x2e\x32\x20\
+\x31\x34\x35\x2e\x30\x30\x31\x20\x2d\x31\x37\x2e\x34\x20\x31\x34\
+\x35\x2e\x38\x30\x31\x43\x2d\x31\x35\x2e\x36\x20\x31\x34\x36\x2e\
+\x36\x30\x31\x20\x32\x2e\x32\x20\x31\x34\x38\x2e\x38\x30\x31\x20\
+\x34\x2e\x32\x20\x31\x38\x37\x2e\x36\x30\x31\x43\x34\x2e\x32\x20\
+\x31\x38\x37\x2e\x36\x30\x31\x20\x2d\x33\x20\x31\x34\x35\x2e\x36\
+\x30\x31\x20\x2d\x31\x39\x20\x31\x34\x36\x2e\x38\x30\x31\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\
+\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\
+\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x2d\x32\x37\x2e\x38\x20\x31\x34\x38\x2e\
+\x34\x30\x31\x43\x2d\x32\x37\x2e\x38\x20\x31\x34\x38\x2e\x34\x30\
+\x31\x20\x2d\x32\x38\x20\x31\x34\x36\x2e\x36\x30\x31\x20\x2d\x32\
+\x36\x2e\x32\x20\x31\x34\x37\x2e\x34\x30\x31\x43\x2d\x32\x34\x2e\
+\x34\x20\x31\x34\x38\x2e\x32\x30\x31\x20\x2d\x31\x30\x2e\x32\x20\
+\x31\x34\x33\x2e\x36\x30\x31\x20\x2d\x31\x33\x20\x31\x38\x32\x2e\
+\x34\x30\x31\x43\x2d\x31\x33\x20\x31\x38\x32\x2e\x34\x30\x31\x20\
+\x2d\x31\x31\x2e\x38\x20\x31\x34\x37\x2e\x32\x30\x31\x20\x2d\x32\
+\x37\x2e\x38\x20\x31\x34\x38\x2e\x34\x30\x31\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\
+\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\
+\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x33\x35\x2e\x38\x20\x31\x34\x38\x2e\x38\x30\x31\
+\x43\x2d\x33\x35\x2e\x38\x20\x31\x34\x38\x2e\x38\x30\x31\x20\x2d\
+\x33\x36\x20\x31\x34\x37\x2e\x30\x30\x31\x20\x2d\x33\x34\x2e\x32\
+\x20\x31\x34\x37\x2e\x38\x30\x31\x43\x2d\x33\x32\x2e\x34\x20\x31\
+\x34\x38\x2e\x36\x30\x31\x20\x2d\x31\x37\x20\x31\x34\x39\x2e\x32\
+\x30\x31\x20\x2d\x32\x39\x2e\x34\x20\x31\x37\x31\x2e\x36\x30\x31\
+\x43\x2d\x32\x39\x2e\x34\x20\x31\x37\x31\x2e\x36\x30\x31\x20\x2d\
+\x31\x39\x2e\x38\x20\x31\x34\x37\x2e\x36\x30\x31\x20\x2d\x33\x35\
+\x2e\x38\x20\x31\x34\x38\x2e\x38\x30\x31\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\
+\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\
+\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x31\x31\x2e\x35\x32\x36\x20\x31\x30\x34\x2e\x34\x36\x35\
+\x43\x31\x31\x2e\x35\x32\x36\x20\x31\x30\x34\x2e\x34\x36\x35\x20\
+\x31\x31\x2e\x30\x38\x32\x20\x31\x30\x36\x2e\x34\x36\x34\x20\x31\
+\x32\x2e\x36\x33\x31\x20\x31\x30\x35\x2e\x32\x34\x37\x43\x32\x38\
+\x2e\x36\x39\x39\x20\x39\x32\x2e\x36\x32\x32\x20\x36\x31\x2e\x31\
+\x34\x31\x20\x33\x33\x2e\x37\x32\x20\x31\x31\x36\x2e\x38\x32\x36\
+\x20\x32\x38\x2e\x30\x38\x36\x43\x31\x31\x36\x2e\x38\x32\x36\x20\
+\x32\x38\x2e\x30\x38\x36\x20\x37\x38\x2e\x35\x31\x38\x20\x31\x35\
+\x2e\x39\x37\x36\x20\x31\x31\x2e\x35\x32\x36\x20\x31\x30\x34\x2e\
+\x34\x36\x35\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\
+\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\
+\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x32\x32\x2e\x37\x32\
+\x36\x20\x31\x30\x32\x2e\x36\x36\x35\x43\x32\x32\x2e\x37\x32\x36\
+\x20\x31\x30\x32\x2e\x36\x36\x35\x20\x32\x31\x2e\x33\x36\x33\x20\
+\x31\x30\x31\x2e\x34\x37\x32\x20\x32\x33\x2e\x32\x33\x31\x20\x31\
+\x30\x30\x2e\x38\x34\x37\x43\x32\x35\x2e\x30\x39\x39\x20\x31\x30\
+\x30\x2e\x32\x32\x32\x20\x31\x33\x37\x2e\x35\x34\x31\x20\x32\x37\
+\x2e\x37\x32\x20\x31\x37\x36\x2e\x38\x32\x36\x20\x33\x35\x2e\x36\
+\x38\x36\x43\x31\x37\x36\x2e\x38\x32\x36\x20\x33\x35\x2e\x36\x38\
+\x36\x20\x31\x34\x39\x2e\x37\x31\x39\x20\x32\x38\x2e\x31\x37\x36\
+\x20\x32\x32\x2e\x37\x32\x36\x20\x31\x30\x32\x2e\x36\x36\x35\x7a\
+\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\
+\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\
+\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\
+\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x31\x2e\x38\x38\x35\x20\x31\x30\x38\
+\x2e\x37\x36\x37\x43\x31\x2e\x38\x38\x35\x20\x31\x30\x38\x2e\x37\
+\x36\x37\x20\x31\x2e\x33\x37\x36\x20\x31\x31\x30\x2e\x33\x36\x36\
+\x20\x33\x2e\x30\x38\x37\x20\x31\x30\x39\x2e\x33\x39\x43\x31\x32\
+\x2e\x30\x36\x32\x20\x31\x30\x34\x2e\x32\x37\x20\x31\x35\x2e\x36\
+\x37\x37\x20\x34\x37\x2e\x30\x35\x39\x20\x35\x39\x2e\x32\x35\x34\
+\x20\x34\x35\x2e\x38\x30\x34\x43\x35\x39\x2e\x32\x35\x34\x20\x34\
+\x35\x2e\x38\x30\x34\x20\x32\x36\x2e\x38\x34\x33\x20\x33\x31\x2e\
+\x30\x39\x20\x31\x2e\x38\x38\x35\x20\x31\x30\x38\x2e\x37\x36\x37\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\
+\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\
+\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x38\x2e\x30\x33\x38\x20\
+\x31\x31\x39\x2e\x37\x39\x33\x43\x2d\x31\x38\x2e\x30\x33\x38\x20\
+\x31\x31\x39\x2e\x37\x39\x33\x20\x2d\x31\x39\x2e\x31\x31\x35\x20\
+\x31\x32\x31\x2e\x30\x37\x39\x20\x2d\x31\x37\x2e\x31\x36\x32\x20\
+\x31\x32\x30\x2e\x38\x32\x35\x43\x2d\x36\x2e\x39\x31\x36\x20\x31\
+\x31\x39\x2e\x34\x39\x33\x20\x31\x34\x2e\x34\x38\x39\x20\x37\x38\
+\x2e\x32\x32\x32\x20\x35\x38\x2e\x39\x32\x38\x20\x38\x33\x2e\x33\
+\x30\x31\x43\x35\x38\x2e\x39\x32\x38\x20\x38\x33\x2e\x33\x30\x31\
+\x20\x32\x36\x2e\x39\x36\x32\x20\x36\x38\x2e\x39\x35\x35\x20\x2d\
+\x31\x38\x2e\x30\x33\x38\x20\x31\x31\x39\x2e\x37\x39\x33\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\
+\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\
+\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x2d\x36\x2e\x38\x20\x31\x31\x33\x2e\x36\
+\x36\x37\x43\x2d\x36\x2e\x38\x20\x31\x31\x33\x2e\x36\x36\x37\x20\
+\x2d\x37\x2e\x36\x31\x31\x20\x31\x31\x35\x2e\x31\x33\x36\x20\x2d\
+\x35\x2e\x37\x34\x32\x20\x31\x31\x34\x2e\x35\x31\x31\x43\x34\x2e\
+\x30\x35\x37\x20\x31\x31\x31\x2e\x32\x33\x37\x20\x31\x37\x2e\x31\
+\x34\x31\x20\x36\x36\x2e\x36\x32\x35\x20\x36\x31\x2e\x37\x32\x39\
+\x20\x36\x33\x2e\x30\x37\x38\x43\x36\x31\x2e\x37\x32\x39\x20\x36\
+\x33\x2e\x30\x37\x38\x20\x32\x37\x2e\x36\x30\x33\x20\x35\x35\x2e\
+\x31\x33\x35\x20\x2d\x36\x2e\x38\x20\x31\x31\x33\x2e\x36\x36\x37\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\
+\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\
+\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x32\x35\x2e\x30\x37\x38\x20\
+\x31\x32\x34\x2e\x39\x31\x32\x43\x2d\x32\x35\x2e\x30\x37\x38\x20\
+\x31\x32\x34\x2e\x39\x31\x32\x20\x2d\x32\x35\x2e\x39\x35\x31\x20\
+\x31\x32\x35\x2e\x39\x35\x34\x20\x2d\x32\x34\x2e\x33\x36\x39\x20\
+\x31\x32\x35\x2e\x37\x34\x38\x43\x2d\x31\x36\x2e\x30\x37\x20\x31\
+\x32\x34\x2e\x36\x36\x39\x20\x31\x2e\x32\x36\x38\x20\x39\x31\x2e\
+\x32\x34\x20\x33\x37\x2e\x32\x36\x34\x20\x39\x35\x2e\x33\x35\x34\
+\x43\x33\x37\x2e\x32\x36\x34\x20\x39\x35\x2e\x33\x35\x34\x20\x31\
+\x31\x2e\x33\x37\x31\x20\x38\x33\x2e\x37\x33\x34\x20\x2d\x32\x35\
+\x2e\x30\x37\x38\x20\x31\x32\x34\x2e\x39\x31\x32\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\
+\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\
+\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\
+\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x33\x32\x2e\x36\x37\x37\x20\x31\x33\x30\x2e\
+\x38\x32\x31\x43\x2d\x33\x32\x2e\x36\x37\x37\x20\x31\x33\x30\x2e\
+\x38\x32\x31\x20\x2d\x33\x33\x2e\x36\x38\x32\x20\x31\x33\x31\x2e\
+\x38\x36\x36\x20\x2d\x33\x32\x2e\x30\x39\x31\x20\x31\x33\x31\x2e\
+\x37\x34\x38\x43\x2d\x32\x37\x2e\x39\x32\x33\x20\x31\x33\x31\x2e\
+\x34\x33\x39\x20\x32\x2e\x37\x31\x35\x20\x39\x38\x2e\x33\x36\x20\
+\x32\x31\x2e\x31\x38\x33\x20\x31\x31\x33\x2e\x38\x36\x32\x43\x32\
+\x31\x2e\x31\x38\x33\x20\x31\x31\x33\x2e\x38\x36\x32\x20\x39\x2e\
+\x31\x36\x38\x20\x39\x35\x2e\x31\x33\x39\x20\x2d\x33\x32\x2e\x36\
+\x37\x37\x20\x31\x33\x30\x2e\x38\x32\x31\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\
+\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\
+\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x33\x36\x2e\x38\x35\x35\x20\x39\x38\x2e\x38\x39\x38\x43\
+\x33\x36\x2e\x38\x35\x35\x20\x39\x38\x2e\x38\x39\x38\x20\x33\x35\
+\x2e\x36\x35\x34\x20\x39\x37\x2e\x35\x34\x33\x20\x33\x37\x2e\x35\
+\x38\x36\x20\x39\x37\x2e\x31\x35\x38\x43\x33\x39\x2e\x35\x31\x38\
+\x20\x39\x36\x2e\x37\x37\x34\x20\x31\x36\x30\x2e\x32\x32\x31\x20\
+\x33\x39\x2e\x30\x36\x31\x20\x31\x39\x38\x2e\x31\x38\x34\x20\x35\
+\x31\x2e\x39\x32\x37\x43\x31\x39\x38\x2e\x31\x38\x34\x20\x35\x31\
+\x2e\x39\x32\x37\x20\x31\x37\x32\x2e\x32\x34\x33\x20\x34\x31\x2e\
+\x30\x35\x33\x20\x33\x36\x2e\x38\x35\x35\x20\x39\x38\x2e\x38\x39\
+\x38\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\
+\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\
+\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x33\x2e\x34\x20\x31\x36\x33\
+\x2e\x32\x30\x31\x43\x33\x2e\x34\x20\x31\x36\x33\x2e\x32\x30\x31\
+\x20\x33\x2e\x32\x20\x31\x36\x31\x2e\x34\x30\x31\x20\x35\x20\x31\
+\x36\x32\x2e\x32\x30\x31\x43\x36\x2e\x38\x20\x31\x36\x33\x2e\x30\
+\x30\x31\x20\x32\x32\x2e\x32\x20\x31\x36\x33\x2e\x36\x30\x31\x20\
+\x39\x2e\x38\x20\x31\x38\x36\x2e\x30\x30\x31\x43\x39\x2e\x38\x20\
+\x31\x38\x36\x2e\x30\x30\x31\x20\x31\x39\x2e\x34\x20\x31\x36\x32\
+\x2e\x30\x30\x31\x20\x33\x2e\x34\x20\x31\x36\x33\x2e\x32\x30\x31\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\
+\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\
+\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x31\x33\x2e\x38\x20\x31\x36\x31\
+\x2e\x36\x30\x31\x43\x31\x33\x2e\x38\x20\x31\x36\x31\x2e\x36\x30\
+\x31\x20\x31\x33\x2e\x36\x20\x31\x35\x39\x2e\x38\x30\x31\x20\x31\
+\x35\x2e\x34\x20\x31\x36\x30\x2e\x36\x30\x31\x43\x31\x37\x2e\x32\
+\x20\x31\x36\x31\x2e\x34\x30\x31\x20\x33\x35\x20\x31\x36\x33\x2e\
+\x36\x30\x31\x20\x33\x37\x20\x32\x30\x32\x2e\x34\x30\x31\x43\x33\
+\x37\x20\x32\x30\x32\x2e\x34\x30\x31\x20\x32\x39\x2e\x38\x20\x31\
+\x36\x30\x2e\x34\x30\x31\x20\x31\x33\x2e\x38\x20\x31\x36\x31\x2e\
+\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\
+\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\
+\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x32\x30\x2e\x36\x20\
+\x31\x36\x30\x2e\x30\x30\x31\x43\x32\x30\x2e\x36\x20\x31\x36\x30\
+\x2e\x30\x30\x31\x20\x32\x30\x2e\x34\x20\x31\x35\x38\x2e\x32\x30\
+\x31\x20\x32\x32\x2e\x32\x20\x31\x35\x39\x2e\x30\x30\x31\x43\x32\
+\x34\x20\x31\x35\x39\x2e\x38\x30\x31\x20\x34\x38\x2e\x36\x20\x31\
+\x36\x33\x2e\x32\x30\x31\x20\x37\x32\x2e\x32\x20\x31\x39\x35\x2e\
+\x36\x30\x31\x43\x37\x32\x2e\x32\x20\x31\x39\x35\x2e\x36\x30\x31\
+\x20\x33\x36\x2e\x36\x20\x31\x35\x38\x2e\x38\x30\x31\x20\x32\x30\
+\x2e\x36\x20\x31\x36\x30\x2e\x30\x30\x31\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\
+\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\
+\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\
+\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x32\x38\x2e\x32\x32\x35\x20\x31\x35\x37\x2e\x39\x37\x32\
+\x43\x32\x38\x2e\x32\x32\x35\x20\x31\x35\x37\x2e\x39\x37\x32\x20\
+\x32\x37\x2e\x37\x38\x38\x20\x31\x35\x36\x2e\x32\x31\x34\x20\x32\
+\x39\x2e\x36\x37\x38\x20\x31\x35\x36\x2e\x37\x36\x38\x43\x33\x31\
+\x2e\x35\x36\x38\x20\x31\x35\x37\x2e\x33\x32\x32\x20\x35\x32\x2e\
+\x30\x30\x32\x20\x31\x35\x35\x2e\x34\x32\x33\x20\x39\x30\x2e\x30\
+\x39\x39\x20\x31\x38\x39\x2e\x35\x39\x39\x43\x39\x30\x2e\x30\x39\
+\x39\x20\x31\x38\x39\x2e\x35\x39\x39\x20\x34\x33\x2e\x39\x32\x34\
+\x20\x31\x35\x34\x2e\x36\x35\x36\x20\x32\x38\x2e\x32\x32\x35\x20\
+\x31\x35\x37\x2e\x39\x37\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\
+\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\
+\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\
+\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x33\
+\x38\x2e\x36\x32\x35\x20\x31\x35\x33\x2e\x35\x37\x32\x43\x33\x38\
+\x2e\x36\x32\x35\x20\x31\x35\x33\x2e\x35\x37\x32\x20\x33\x38\x2e\
+\x31\x38\x38\x20\x31\x35\x31\x2e\x38\x31\x34\x20\x34\x30\x2e\x30\
+\x37\x38\x20\x31\x35\x32\x2e\x33\x36\x38\x43\x34\x31\x2e\x39\x36\
+\x38\x20\x31\x35\x32\x2e\x39\x32\x32\x20\x37\x36\x2e\x38\x30\x32\
+\x20\x31\x35\x37\x2e\x34\x32\x33\x20\x31\x32\x38\x2e\x34\x39\x39\
+\x20\x31\x39\x32\x2e\x33\x39\x39\x43\x31\x32\x38\x2e\x34\x39\x39\
+\x20\x31\x39\x32\x2e\x33\x39\x39\x20\x35\x34\x2e\x33\x32\x34\x20\
+\x31\x35\x30\x2e\x32\x35\x36\x20\x33\x38\x2e\x36\x32\x35\x20\x31\
+\x35\x33\x2e\x35\x37\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\
+\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\
+\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\
+\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\
+\x2e\x38\x20\x31\x34\x32\x2e\x30\x30\x31\x43\x2d\x31\x2e\x38\x20\
+\x31\x34\x32\x2e\x30\x30\x31\x20\x2d\x32\x20\x31\x34\x30\x2e\x32\
+\x30\x31\x20\x2d\x30\x2e\x32\x20\x31\x34\x31\x2e\x30\x30\x31\x43\
+\x31\x2e\x36\x20\x31\x34\x31\x2e\x38\x30\x31\x20\x35\x35\x20\x31\
+\x34\x34\x2e\x34\x30\x31\x20\x38\x35\x2e\x34\x20\x31\x37\x31\x2e\
+\x32\x30\x31\x43\x38\x35\x2e\x34\x20\x31\x37\x31\x2e\x32\x30\x31\
+\x20\x35\x30\x2e\x34\x39\x39\x20\x31\x34\x36\x2e\x34\x32\x36\x20\
+\x2d\x31\x2e\x38\x20\x31\x34\x32\x2e\x30\x30\x31\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\
+\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\
+\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\
+\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x31\x31\x2e\x38\x20\x31\x34\x36\x2e\x30\x30\
+\x31\x43\x2d\x31\x31\x2e\x38\x20\x31\x34\x36\x2e\x30\x30\x31\x20\
+\x2d\x31\x32\x20\x31\x34\x34\x2e\x32\x30\x31\x20\x2d\x31\x30\x2e\
+\x32\x20\x31\x34\x35\x2e\x30\x30\x31\x43\x2d\x38\x2e\x34\x20\x31\
+\x34\x35\x2e\x38\x30\x31\x20\x31\x36\x2e\x32\x20\x31\x34\x39\x2e\
+\x32\x30\x31\x20\x33\x39\x2e\x38\x20\x31\x38\x31\x2e\x36\x30\x31\
+\x43\x33\x39\x2e\x38\x20\x31\x38\x31\x2e\x36\x30\x31\x20\x34\x2e\
+\x32\x20\x31\x34\x34\x2e\x38\x30\x31\x20\x2d\x31\x31\x2e\x38\x20\
+\x31\x34\x36\x2e\x30\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\
+\x22\x2c\x20\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\
+\x30\x30\x30\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\
+\x2e\x31\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x34\
+\x39\x2e\x35\x30\x33\x20\x31\x34\x38\x2e\x39\x36\x32\x43\x34\x39\
+\x2e\x35\x30\x33\x20\x31\x34\x38\x2e\x39\x36\x32\x20\x34\x38\x2e\
+\x39\x33\x38\x20\x31\x34\x37\x2e\x32\x34\x31\x20\x35\x30\x2e\x38\
+\x36\x34\x20\x31\x34\x37\x2e\x36\x35\x35\x43\x35\x32\x2e\x37\x39\
+\x20\x31\x34\x38\x2e\x30\x36\x38\x20\x38\x37\x2e\x38\x36\x20\x31\
+\x35\x30\x2e\x30\x30\x34\x20\x31\x34\x31\x2e\x39\x38\x31\x20\x31\
+\x38\x31\x2e\x30\x39\x38\x43\x31\x34\x31\x2e\x39\x38\x31\x20\x31\
+\x38\x31\x2e\x30\x39\x38\x20\x36\x34\x2e\x33\x31\x37\x20\x31\x34\
+\x36\x2e\x37\x30\x34\x20\x34\x39\x2e\x35\x30\x33\x20\x31\x34\x38\
+\x2e\x39\x36\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\
+\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\
+\x30\x22\x2c\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x35\x37\x2e\x39\
+\x30\x33\x20\x31\x34\x36\x2e\x35\x36\x32\x43\x35\x37\x2e\x39\x30\
+\x33\x20\x31\x34\x36\x2e\x35\x36\x32\x20\x35\x37\x2e\x33\x33\x38\
+\x20\x31\x34\x34\x2e\x38\x34\x31\x20\x35\x39\x2e\x32\x36\x34\x20\
+\x31\x34\x35\x2e\x32\x35\x35\x43\x36\x31\x2e\x31\x39\x20\x31\x34\
+\x35\x2e\x36\x36\x38\x20\x39\x36\x2e\x32\x36\x20\x31\x34\x37\x2e\
+\x36\x30\x34\x20\x31\x35\x30\x2e\x33\x38\x31\x20\x31\x37\x38\x2e\
+\x36\x39\x38\x43\x31\x35\x30\x2e\x33\x38\x31\x20\x31\x37\x38\x2e\
+\x36\x39\x38\x20\x37\x33\x2e\x33\x31\x37\x20\x31\x34\x33\x2e\x39\
+\x30\x34\x20\x35\x37\x2e\x39\x30\x33\x20\x31\x34\x36\x2e\x35\x36\
+\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x66\x66\x66\x66\x66\x66\x22\x2c\x20\x22\x73\x74\
+\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\
+\x20\x22\x77\x69\x64\x74\x68\x22\x3a\x30\x2e\x31\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x36\x37\x2e\x35\x30\x33\x20\
+\x31\x34\x31\x2e\x35\x36\x32\x43\x36\x37\x2e\x35\x30\x33\x20\x31\
+\x34\x31\x2e\x35\x36\x32\x20\x36\x36\x2e\x39\x33\x38\x20\x31\x33\
+\x39\x2e\x38\x34\x31\x20\x36\x38\x2e\x38\x36\x34\x20\x31\x34\x30\
+\x2e\x32\x35\x35\x43\x37\x30\x2e\x37\x39\x20\x31\x34\x30\x2e\x36\
+\x36\x38\x20\x31\x31\x33\x2e\x38\x36\x20\x31\x34\x35\x2e\x30\x30\
+\x34\x20\x32\x30\x33\x2e\x35\x38\x32\x20\x31\x37\x39\x2e\x32\x39\
+\x38\x43\x32\x30\x33\x2e\x35\x38\x32\x20\x31\x37\x39\x2e\x32\x39\
+\x38\x20\x38\x32\x2e\x39\x31\x37\x20\x31\x33\x38\x2e\x39\x30\x34\
+\x20\x36\x37\x2e\x35\x30\x33\x20\x31\x34\x31\x2e\x35\x36\x32\x7a\
+\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x2d\x34\x33\x2e\x38\x20\x31\x34\x38\x2e\
+\x34\x30\x31\x43\x2d\x34\x33\x2e\x38\x20\x31\x34\x38\x2e\x34\x30\
+\x31\x20\x2d\x33\x38\x2e\x36\x20\x31\x34\x38\x2e\x30\x30\x31\x20\
+\x2d\x33\x39\x2e\x38\x20\x31\x34\x39\x2e\x36\x30\x31\x43\x2d\x34\
+\x31\x20\x31\x35\x31\x2e\x32\x30\x31\x20\x2d\x34\x33\x2e\x34\x20\
+\x31\x35\x30\x2e\x34\x30\x31\x20\x2d\x34\x33\x2e\x34\x20\x31\x35\
+\x30\x2e\x34\x30\x31\x4c\x2d\x34\x33\x2e\x38\x20\x31\x34\x38\x2e\
+\x34\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\
+\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x33\x20\x31\x36\
+\x32\x2e\x34\x30\x31\x43\x2d\x31\x33\x20\x31\x36\x32\x2e\x34\x30\
+\x31\x20\x2d\x37\x2e\x38\x20\x31\x36\x32\x2e\x30\x30\x31\x20\x2d\
+\x39\x20\x31\x36\x33\x2e\x36\x30\x31\x43\x2d\x31\x30\x2e\x32\x20\
+\x31\x36\x35\x2e\x32\x30\x31\x20\x2d\x31\x32\x2e\x36\x20\x31\x36\
+\x34\x2e\x34\x30\x31\x20\x2d\x31\x32\x2e\x36\x20\x31\x36\x34\x2e\
+\x34\x30\x31\x4c\x2d\x31\x33\x20\x31\x36\x32\x2e\x34\x30\x31\x7a\
+\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x2d\x32\x31\x2e\x38\x20\x31\x36\x32\x2e\
+\x30\x30\x31\x43\x2d\x32\x31\x2e\x38\x20\x31\x36\x32\x2e\x30\x30\
+\x31\x20\x2d\x31\x36\x2e\x36\x20\x31\x36\x31\x2e\x36\x30\x31\x20\
+\x2d\x31\x37\x2e\x38\x20\x31\x36\x33\x2e\x32\x30\x31\x43\x2d\x31\
+\x39\x20\x31\x36\x34\x2e\x38\x30\x31\x20\x2d\x32\x31\x2e\x34\x20\
+\x31\x36\x34\x2e\x30\x30\x31\x20\x2d\x32\x31\x2e\x34\x20\x31\x36\
+\x34\x2e\x30\x30\x31\x4c\x2d\x32\x31\x2e\x38\x20\x31\x36\x32\x2e\
+\x30\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\
+\x6c\x22\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\
+\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x31\x37\x2e\x31\
+\x36\x39\x20\x31\x35\x30\x2e\x31\x38\x32\x43\x2d\x31\x31\x37\x2e\
+\x31\x36\x39\x20\x31\x35\x30\x2e\x31\x38\x32\x20\x2d\x31\x31\x32\
+\x2e\x31\x32\x34\x20\x31\x35\x31\x2e\x35\x30\x35\x20\x2d\x31\x31\
+\x33\x2e\x37\x38\x32\x20\x31\x35\x32\x2e\x36\x32\x34\x43\x2d\x31\
+\x31\x35\x2e\x34\x33\x39\x20\x31\x35\x33\x2e\x37\x34\x34\x20\x2d\
+\x31\x31\x37\x2e\x34\x34\x36\x20\x31\x35\x32\x2e\x32\x30\x32\x20\
+\x2d\x31\x31\x37\x2e\x34\x34\x36\x20\x31\x35\x32\x2e\x32\x30\x32\
+\x4c\x2d\x31\x31\x37\x2e\x31\x36\x39\x20\x31\x35\x30\x2e\x31\x38\
+\x32\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\
+\x3a\x20\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\
+\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x31\x35\x2e\x31\x36\x39\
+\x20\x31\x34\x30\x2e\x35\x38\x32\x43\x2d\x31\x31\x35\x2e\x31\x36\
+\x39\x20\x31\x34\x30\x2e\x35\x38\x32\x20\x2d\x31\x31\x30\x2e\x31\
+\x32\x34\x20\x31\x34\x31\x2e\x39\x30\x35\x20\x2d\x31\x31\x31\x2e\
+\x37\x38\x32\x20\x31\x34\x33\x2e\x30\x32\x34\x43\x2d\x31\x31\x33\
+\x2e\x34\x33\x39\x20\x31\x34\x34\x2e\x31\x34\x34\x20\x2d\x31\x31\
+\x35\x2e\x34\x34\x36\x20\x31\x34\x32\x2e\x36\x30\x32\x20\x2d\x31\
+\x31\x35\x2e\x34\x34\x36\x20\x31\x34\x32\x2e\x36\x30\x32\x4c\x2d\
+\x31\x31\x35\x2e\x31\x36\x39\x20\x31\x34\x30\x2e\x35\x38\x32\x7a\
+\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\
+\x22\x23\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\
+\x74\x68\x22\x3a\x22\x4d\x2d\x31\x32\x32\x2e\x33\x36\x39\x20\x31\
+\x33\x36\x2e\x31\x38\x32\x43\x2d\x31\x32\x32\x2e\x33\x36\x39\x20\
+\x31\x33\x36\x2e\x31\x38\x32\x20\x2d\x31\x31\x37\x2e\x33\x32\x34\
+\x20\x31\x33\x37\x2e\x35\x30\x35\x20\x2d\x31\x31\x38\x2e\x39\x38\
+\x32\x20\x31\x33\x38\x2e\x36\x32\x34\x43\x2d\x31\x32\x30\x2e\x36\
+\x33\x39\x20\x31\x33\x39\x2e\x37\x34\x34\x20\x2d\x31\x32\x32\x2e\
+\x36\x34\x36\x20\x31\x33\x38\x2e\x32\x30\x32\x20\x2d\x31\x32\x32\
+\x2e\x36\x34\x36\x20\x31\x33\x38\x2e\x32\x30\x32\x4c\x2d\x31\x32\
+\x32\x2e\x33\x36\x39\x20\x31\x33\x36\x2e\x31\x38\x32\x7a\x22\x7d\
+\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\
+\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x34\x32\x2e\x36\x20\x32\x31\x31\x2e\x32\x30\
+\x31\x43\x2d\x34\x32\x2e\x36\x20\x32\x31\x31\x2e\x32\x30\x31\x20\
+\x2d\x34\x34\x2e\x32\x20\x32\x31\x31\x2e\x32\x30\x31\x20\x2d\x34\
+\x38\x2e\x32\x20\x32\x31\x33\x2e\x32\x30\x31\x43\x2d\x35\x30\x2e\
+\x32\x20\x32\x31\x33\x2e\x32\x30\x31\x20\x2d\x36\x31\x2e\x34\x20\
+\x32\x31\x36\x2e\x38\x30\x31\x20\x2d\x36\x37\x20\x32\x32\x36\x2e\
+\x38\x30\x31\x43\x2d\x36\x37\x20\x32\x32\x36\x2e\x38\x30\x31\x20\
+\x2d\x35\x34\x2e\x36\x20\x32\x31\x37\x2e\x32\x30\x31\x20\x2d\x34\
+\x32\x2e\x36\x20\x32\x31\x31\x2e\x32\x30\x31\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\
+\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x34\x35\x2e\x31\x31\x36\x20\x33\x30\x33\x2e\x38\x34\x37\
+\x43\x34\x35\x2e\x32\x35\x37\x20\x33\x30\x34\x2e\x31\x30\x35\x20\
+\x34\x35\x2e\x33\x31\x32\x20\x33\x30\x34\x2e\x35\x32\x35\x20\x34\
+\x35\x2e\x36\x30\x34\x20\x33\x30\x34\x2e\x35\x34\x32\x43\x34\x36\
+\x2e\x32\x36\x32\x20\x33\x30\x34\x2e\x35\x38\x32\x20\x34\x37\x2e\
+\x34\x39\x35\x20\x33\x30\x34\x2e\x38\x38\x33\x20\x34\x37\x2e\x33\
+\x37\x20\x33\x30\x34\x2e\x32\x34\x37\x43\x34\x36\x2e\x35\x32\x32\
+\x20\x32\x39\x39\x2e\x39\x34\x31\x20\x34\x35\x2e\x36\x34\x38\x20\
+\x32\x39\x35\x2e\x30\x30\x34\x20\x34\x31\x2e\x35\x31\x35\x20\x32\
+\x39\x33\x2e\x31\x39\x37\x43\x34\x30\x2e\x38\x37\x36\x20\x32\x39\
+\x32\x2e\x39\x31\x38\x20\x33\x39\x2e\x34\x33\x34\x20\x32\x39\x33\
+\x2e\x33\x33\x31\x20\x33\x39\x2e\x33\x36\x20\x32\x39\x34\x2e\x32\
+\x31\x35\x43\x33\x39\x2e\x32\x33\x33\x20\x32\x39\x35\x2e\x37\x33\
+\x39\x20\x33\x39\x2e\x31\x31\x36\x20\x32\x39\x37\x2e\x30\x38\x38\
+\x20\x33\x39\x2e\x34\x32\x35\x20\x32\x39\x38\x2e\x35\x35\x34\x43\
+\x33\x39\x2e\x37\x32\x35\x20\x32\x39\x39\x2e\x39\x37\x35\x20\x34\
+\x31\x2e\x38\x38\x33\x20\x32\x39\x39\x2e\x39\x38\x35\x20\x34\x32\
+\x2e\x38\x20\x32\x39\x38\x2e\x36\x30\x31\x43\x34\x33\x2e\x37\x33\
+\x36\x20\x33\x30\x30\x2e\x32\x37\x33\x20\x34\x34\x2e\x31\x36\x38\
+\x20\x33\x30\x32\x2e\x31\x31\x36\x20\x34\x35\x2e\x31\x31\x36\x20\
+\x33\x30\x33\x2e\x38\x34\x37\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\
+\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x33\x34\
+\x2e\x30\x33\x38\x20\x33\x30\x38\x2e\x35\x38\x31\x43\x33\x34\x2e\
+\x37\x38\x36\x20\x33\x30\x39\x2e\x39\x39\x34\x20\x33\x34\x2e\x36\
+\x35\x39\x20\x33\x31\x31\x2e\x38\x35\x33\x20\x33\x36\x2e\x30\x37\
+\x34\x20\x33\x31\x32\x2e\x34\x31\x36\x43\x33\x36\x2e\x38\x31\x34\
+\x20\x33\x31\x32\x2e\x37\x31\x20\x33\x38\x2e\x36\x36\x34\x20\x33\
+\x31\x31\x2e\x37\x33\x35\x20\x33\x38\x2e\x32\x34\x36\x20\x33\x31\
+\x30\x2e\x36\x36\x31\x43\x33\x37\x2e\x34\x34\x34\x20\x33\x30\x38\
+\x2e\x36\x20\x33\x37\x2e\x30\x35\x36\x20\x33\x30\x36\x2e\x33\x36\
+\x31\x20\x33\x35\x2e\x36\x36\x37\x20\x33\x30\x34\x2e\x35\x35\x43\
+\x33\x35\x2e\x34\x36\x37\x20\x33\x30\x34\x2e\x32\x38\x38\x20\x33\
+\x35\x2e\x37\x30\x37\x20\x33\x30\x33\x2e\x37\x35\x35\x20\x33\x35\
+\x2e\x35\x34\x37\x20\x33\x30\x33\x2e\x34\x32\x37\x43\x33\x34\x2e\
+\x39\x35\x33\x20\x33\x30\x32\x2e\x32\x30\x37\x20\x33\x33\x2e\x38\
+\x30\x38\x20\x33\x30\x31\x2e\x34\x37\x32\x20\x33\x32\x2e\x34\x20\
+\x33\x30\x31\x2e\x38\x30\x31\x43\x33\x31\x2e\x32\x38\x35\x20\x33\
+\x30\x34\x2e\x30\x30\x34\x20\x33\x32\x2e\x34\x33\x33\x20\x33\x30\
+\x36\x2e\x31\x33\x33\x20\x33\x33\x2e\x39\x35\x35\x20\x33\x30\x37\
+\x2e\x38\x34\x32\x43\x33\x34\x2e\x30\x39\x31\x20\x33\x30\x37\x2e\
+\x39\x39\x34\x20\x33\x33\x2e\x39\x32\x35\x20\x33\x30\x38\x2e\x33\
+\x37\x20\x33\x34\x2e\x30\x33\x38\x20\x33\x30\x38\x2e\x35\x38\x31\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x2d\x35\x2e\x35\x36\x34\x20\x33\x30\
+\x33\x2e\x33\x39\x31\x43\x2d\x35\x2e\x36\x37\x32\x20\x33\x30\x33\
+\x2e\x30\x31\x34\x20\x2d\x35\x2e\x37\x31\x20\x33\x30\x32\x2e\x35\
+\x35\x31\x20\x2d\x35\x2e\x35\x34\x35\x20\x33\x30\x32\x2e\x32\x33\
+\x43\x2d\x35\x2e\x30\x31\x34\x20\x33\x30\x31\x2e\x31\x39\x37\x20\
+\x2d\x34\x2e\x32\x32\x31\x20\x33\x30\x30\x2e\x30\x37\x35\x20\x2d\
+\x34\x2e\x35\x35\x38\x20\x32\x39\x39\x2e\x30\x35\x33\x43\x2d\x34\
+\x2e\x39\x30\x36\x20\x32\x39\x37\x2e\x39\x39\x37\x20\x2d\x36\x2e\
+\x30\x32\x32\x20\x32\x39\x38\x2e\x31\x37\x39\x20\x2d\x36\x2e\x36\
+\x37\x32\x20\x32\x39\x38\x2e\x37\x34\x38\x43\x2d\x37\x2e\x38\x30\
+\x37\x20\x32\x39\x39\x2e\x37\x34\x32\x20\x2d\x37\x2e\x38\x35\x36\
+\x20\x33\x30\x31\x2e\x35\x36\x38\x20\x2d\x38\x2e\x35\x34\x37\x20\
+\x33\x30\x32\x2e\x39\x32\x37\x43\x2d\x38\x2e\x37\x34\x33\x20\x33\
+\x30\x33\x2e\x33\x31\x33\x20\x2d\x38\x2e\x36\x39\x32\x20\x33\x30\
+\x33\x2e\x38\x38\x36\x20\x2d\x39\x2e\x31\x33\x33\x20\x33\x30\x34\
+\x2e\x32\x37\x37\x43\x2d\x39\x2e\x36\x30\x37\x20\x33\x30\x34\x2e\
+\x36\x39\x38\x20\x2d\x31\x30\x2e\x30\x34\x37\x20\x33\x30\x36\x2e\
+\x32\x32\x32\x20\x2d\x39\x2e\x39\x35\x31\x20\x33\x30\x36\x2e\x37\
+\x39\x33\x43\x2d\x39\x2e\x38\x39\x38\x20\x33\x30\x37\x2e\x31\x30\
+\x36\x20\x2d\x31\x30\x2e\x30\x38\x31\x20\x33\x31\x37\x2e\x30\x31\
+\x34\x20\x2d\x39\x2e\x38\x35\x39\x20\x33\x31\x36\x2e\x37\x35\x31\
+\x43\x2d\x39\x2e\x32\x34\x20\x33\x31\x36\x2e\x30\x31\x38\x20\x2d\
+\x36\x2e\x31\x39\x20\x33\x30\x36\x2e\x32\x38\x34\x20\x2d\x36\x2e\
+\x31\x32\x31\x20\x33\x30\x35\x2e\x33\x39\x32\x43\x2d\x36\x2e\x30\
+\x36\x34\x20\x33\x30\x34\x2e\x36\x36\x31\x20\x2d\x35\x2e\x33\x33\
+\x32\x20\x33\x30\x34\x2e\x31\x39\x36\x20\x2d\x35\x2e\x35\x36\x34\
+\x20\x33\x30\x33\x2e\x33\x39\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\
+\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\
+\x33\x31\x2e\x32\x30\x32\x20\x32\x39\x36\x2e\x35\x39\x39\x43\x2d\
+\x32\x38\x2e\x35\x36\x38\x20\x32\x39\x34\x2e\x31\x20\x2d\x32\x35\
+\x2e\x37\x37\x38\x20\x32\x39\x31\x2e\x31\x33\x39\x20\x2d\x32\x36\
+\x2e\x32\x32\x20\x32\x38\x37\x2e\x34\x32\x37\x43\x2d\x32\x36\x2e\
+\x33\x33\x36\x20\x32\x38\x36\x2e\x34\x35\x31\x20\x2d\x32\x38\x2e\
+\x31\x31\x31\x20\x32\x38\x36\x2e\x39\x37\x38\x20\x2d\x32\x38\x2e\
+\x32\x39\x38\x20\x32\x38\x37\x2e\x38\x32\x34\x43\x2d\x32\x39\x2e\
+\x31\x20\x32\x39\x31\x2e\x34\x34\x39\x20\x2d\x33\x31\x2e\x31\x33\
+\x39\x20\x32\x39\x34\x2e\x31\x31\x20\x2d\x33\x33\x2e\x37\x30\x37\
+\x20\x32\x39\x36\x2e\x35\x30\x32\x43\x2d\x33\x35\x2e\x39\x30\x33\
+\x20\x32\x39\x38\x2e\x35\x34\x39\x20\x2d\x33\x37\x2e\x37\x36\x35\
+\x20\x33\x30\x34\x2e\x38\x39\x33\x20\x2d\x33\x38\x20\x33\x30\x35\
+\x2e\x34\x30\x31\x43\x2d\x33\x34\x2e\x33\x30\x33\x20\x33\x30\x30\
+\x2e\x31\x34\x35\x20\x2d\x33\x32\x2e\x30\x34\x36\x20\x32\x39\x37\
+\x2e\x33\x39\x39\x20\x2d\x33\x31\x2e\x32\x30\x32\x20\x32\x39\x36\
+\x2e\x35\x39\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x34\x34\x2e\x37\
+\x37\x36\x20\x32\x39\x30\x2e\x36\x33\x35\x43\x2d\x34\x34\x2e\x32\
+\x35\x33\x20\x32\x39\x30\x2e\x32\x36\x35\x20\x2d\x34\x34\x2e\x35\
+\x35\x35\x20\x32\x38\x39\x2e\x37\x37\x34\x20\x2d\x34\x34\x2e\x33\
+\x33\x38\x20\x32\x38\x39\x2e\x34\x34\x32\x43\x2d\x34\x33\x2e\x33\
+\x38\x35\x20\x32\x38\x37\x2e\x39\x38\x34\x20\x2d\x34\x32\x2e\x30\
+\x38\x34\x20\x32\x38\x36\x2e\x37\x33\x38\x20\x2d\x34\x32\x2e\x30\
+\x36\x36\x20\x32\x38\x35\x43\x2d\x34\x32\x2e\x30\x36\x33\x20\x32\
+\x38\x34\x2e\x37\x32\x33\x20\x2d\x34\x32\x2e\x34\x34\x31\x20\x32\
+\x38\x34\x2e\x34\x31\x34\x20\x2d\x34\x32\x2e\x37\x37\x36\x20\x32\
+\x38\x34\x2e\x36\x33\x38\x43\x2d\x34\x33\x2e\x30\x35\x33\x20\x32\
+\x38\x34\x2e\x38\x32\x32\x20\x2d\x34\x33\x2e\x33\x39\x35\x20\x32\
+\x38\x34\x2e\x39\x35\x32\x20\x2d\x34\x33\x2e\x35\x30\x33\x20\x32\
+\x38\x35\x2e\x30\x38\x32\x43\x2d\x34\x35\x2e\x35\x33\x33\x20\x32\
+\x38\x37\x2e\x35\x33\x31\x20\x2d\x34\x36\x2e\x39\x33\x33\x20\x32\
+\x39\x30\x2e\x32\x30\x32\x20\x2d\x34\x38\x2e\x33\x37\x36\x20\x32\
+\x39\x33\x2e\x30\x31\x34\x43\x2d\x34\x38\x2e\x35\x35\x39\x20\x32\
+\x39\x33\x2e\x33\x37\x31\x20\x2d\x34\x39\x2e\x37\x30\x33\x20\x32\
+\x39\x37\x2e\x38\x36\x32\x20\x2d\x34\x39\x2e\x33\x39\x20\x32\x39\
+\x37\x2e\x39\x37\x33\x43\x2d\x34\x39\x2e\x31\x35\x31\x20\x32\x39\
+\x38\x2e\x30\x35\x38\x20\x2d\x34\x37\x2e\x34\x33\x31\x20\x32\x39\
+\x33\x2e\x38\x37\x37\x20\x2d\x34\x37\x2e\x32\x32\x31\x20\x32\x39\
+\x33\x2e\x37\x36\x33\x43\x2d\x34\x35\x2e\x39\x35\x38\x20\x32\x39\
+\x33\x2e\x30\x37\x37\x20\x2d\x34\x35\x2e\x39\x34\x36\x20\x32\x39\
+\x31\x2e\x34\x36\x32\x20\x2d\x34\x34\x2e\x37\x37\x36\x20\x32\x39\
+\x30\x2e\x36\x33\x35\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\
+\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\
+\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x32\x38\x2e\
+\x30\x34\x33\x20\x33\x31\x30\x2e\x31\x37\x39\x43\x2d\x32\x37\x2e\
+\x35\x39\x39\x20\x33\x30\x39\x2e\x33\x31\x20\x2d\x32\x36\x2e\x30\
+\x32\x33\x20\x33\x30\x38\x2e\x31\x30\x38\x20\x2d\x32\x36\x2e\x31\
+\x33\x36\x20\x33\x30\x37\x2e\x32\x31\x39\x43\x2d\x32\x36\x2e\x32\
+\x35\x34\x20\x33\x30\x36\x2e\x32\x39\x31\x20\x2d\x32\x35\x2e\x37\
+\x38\x36\x20\x33\x30\x34\x2e\x38\x34\x38\x20\x2d\x32\x36\x2e\x36\
+\x39\x38\x20\x33\x30\x35\x2e\x35\x33\x36\x43\x2d\x32\x37\x2e\x39\
+\x35\x35\x20\x33\x30\x36\x2e\x34\x38\x34\x20\x2d\x33\x31\x2e\x34\
+\x30\x34\x20\x33\x30\x37\x2e\x38\x33\x33\x20\x2d\x33\x31\x2e\x36\
+\x37\x34\x20\x33\x31\x33\x2e\x36\x34\x31\x43\x2d\x33\x31\x2e\x37\
+\x20\x33\x31\x34\x2e\x32\x31\x32\x20\x2d\x32\x38\x2e\x37\x32\x36\
+\x20\x33\x31\x31\x2e\x35\x31\x39\x20\x2d\x32\x38\x2e\x30\x34\x33\
+\x20\x33\x31\x30\x2e\x31\x37\x39\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\
+\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\
+\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\
+\x31\x33\x2e\x36\x20\x32\x39\x33\x2e\x30\x30\x31\x43\x2d\x31\x33\
+\x2e\x32\x20\x32\x39\x32\x2e\x33\x33\x33\x20\x2d\x31\x32\x2e\x34\
+\x39\x32\x20\x32\x39\x32\x2e\x38\x30\x36\x20\x2d\x31\x32\x2e\x30\
+\x33\x33\x20\x32\x39\x32\x2e\x35\x34\x33\x43\x2d\x31\x31\x2e\x33\
+\x38\x35\x20\x32\x39\x32\x2e\x31\x37\x31\x20\x2d\x31\x30\x2e\x37\
+\x37\x34\x20\x32\x39\x31\x2e\x36\x31\x33\x20\x2d\x31\x30\x2e\x34\
+\x38\x32\x20\x32\x39\x30\x2e\x39\x36\x34\x43\x2d\x39\x2e\x35\x31\
+\x32\x20\x32\x38\x38\x2e\x38\x31\x35\x20\x2d\x37\x2e\x37\x34\x33\
+\x20\x32\x38\x36\x2e\x39\x39\x35\x20\x2d\x37\x2e\x36\x20\x32\x38\
+\x34\x2e\x36\x30\x31\x43\x2d\x39\x2e\x30\x39\x31\x20\x32\x38\x33\
+\x2e\x31\x39\x36\x20\x2d\x39\x2e\x37\x37\x20\x32\x38\x35\x2e\x32\
+\x33\x36\x20\x2d\x31\x30\x2e\x34\x20\x32\x38\x36\x2e\x32\x30\x31\
+\x43\x2d\x31\x31\x2e\x37\x32\x33\x20\x32\x38\x34\x2e\x35\x35\x34\
+\x20\x2d\x31\x32\x2e\x37\x32\x32\x20\x32\x38\x36\x2e\x34\x32\x38\
+\x20\x2d\x31\x34\x2e\x30\x32\x32\x20\x32\x38\x36\x2e\x39\x34\x37\
+\x43\x2d\x31\x34\x2e\x30\x39\x32\x20\x32\x38\x36\x2e\x39\x37\x35\
+\x20\x2d\x31\x34\x2e\x33\x30\x35\x20\x32\x38\x36\x2e\x36\x32\x38\
+\x20\x2d\x31\x34\x2e\x33\x38\x20\x32\x38\x36\x2e\x36\x35\x35\x43\
+\x2d\x31\x35\x2e\x35\x35\x37\x20\x32\x38\x37\x2e\x30\x39\x35\x20\
+\x2d\x31\x36\x2e\x32\x33\x37\x20\x32\x38\x38\x2e\x31\x37\x36\x20\
+\x2d\x31\x37\x2e\x32\x33\x35\x20\x32\x38\x38\x2e\x39\x35\x37\x43\
+\x2d\x31\x37\x2e\x34\x30\x36\x20\x32\x38\x39\x2e\x30\x39\x31\x20\
+\x2d\x31\x37\x2e\x38\x31\x31\x20\x32\x38\x38\x2e\x39\x31\x31\x20\
+\x2d\x31\x37\x2e\x39\x35\x38\x20\x32\x38\x39\x2e\x30\x34\x37\x43\
+\x2d\x31\x38\x2e\x36\x31\x20\x32\x38\x39\x2e\x36\x35\x20\x2d\x31\
+\x39\x2e\x35\x38\x33\x20\x32\x38\x39\x2e\x39\x37\x35\x20\x2d\x31\
+\x39\x2e\x38\x36\x33\x20\x32\x39\x30\x2e\x36\x35\x37\x43\x2d\x32\
+\x30\x2e\x39\x37\x33\x20\x32\x39\x33\x2e\x33\x36\x34\x20\x2d\x32\
+\x34\x2e\x31\x31\x33\x20\x32\x39\x35\x2e\x34\x35\x39\x20\x2d\x32\
+\x36\x20\x33\x30\x33\x2e\x30\x30\x31\x43\x2d\x32\x35\x2e\x36\x31\
+\x39\x20\x33\x30\x33\x2e\x39\x31\x20\x2d\x32\x31\x2e\x34\x38\x38\
+\x20\x32\x39\x36\x2e\x33\x35\x39\x20\x2d\x32\x31\x2e\x30\x30\x31\
+\x20\x32\x39\x35\x2e\x36\x36\x31\x43\x2d\x32\x30\x2e\x31\x36\x35\
+\x20\x32\x39\x34\x2e\x34\x36\x35\x20\x2d\x32\x30\x2e\x30\x34\x37\
+\x20\x32\x39\x37\x2e\x33\x32\x32\x20\x2d\x31\x38\x2e\x37\x37\x31\
+\x20\x32\x39\x36\x2e\x36\x35\x36\x43\x2d\x31\x38\x2e\x37\x32\x20\
+\x32\x39\x36\x2e\x36\x32\x39\x20\x2d\x31\x38\x2e\x35\x33\x34\x20\
+\x32\x39\x36\x2e\x38\x36\x37\x20\x2d\x31\x38\x2e\x34\x20\x32\x39\
+\x37\x2e\x30\x30\x31\x43\x2d\x31\x38\x2e\x32\x30\x36\x20\x32\x39\
+\x36\x2e\x37\x32\x31\x20\x2d\x31\x37\x2e\x39\x38\x38\x20\x32\x39\
+\x36\x2e\x34\x39\x32\x20\x2d\x31\x37\x2e\x36\x20\x32\x39\x36\x2e\
+\x36\x30\x31\x43\x2d\x31\x37\x2e\x36\x20\x32\x39\x36\x2e\x32\x30\
+\x31\x20\x2d\x31\x37\x2e\x37\x33\x34\x20\x32\x39\x35\x2e\x36\x34\
+\x35\x20\x2d\x31\x37\x2e\x35\x33\x33\x20\x32\x39\x35\x2e\x34\x38\
+\x36\x43\x2d\x31\x36\x2e\x32\x39\x36\x20\x32\x39\x34\x2e\x35\x30\
+\x39\x20\x2d\x31\x36\x2e\x33\x38\x20\x32\x39\x33\x2e\x34\x34\x31\
+\x20\x2d\x31\x35\x2e\x36\x20\x32\x39\x32\x2e\x32\x30\x31\x43\x2d\
+\x31\x35\x2e\x31\x34\x32\x20\x32\x39\x32\x2e\x39\x39\x20\x2d\x31\
+\x34\x2e\x30\x38\x31\x20\x32\x39\x32\x2e\x32\x37\x31\x20\x2d\x31\
+\x33\x2e\x36\x20\x32\x39\x33\x2e\x30\x30\x31\x7a\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\
+\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\
+\x22\x4d\x34\x36\x2e\x32\x20\x33\x34\x37\x2e\x34\x30\x31\x43\x34\
+\x36\x2e\x32\x20\x33\x34\x37\x2e\x34\x30\x31\x20\x35\x33\x2e\x36\
+\x20\x33\x32\x37\x2e\x30\x30\x31\x20\x34\x39\x2e\x32\x20\x33\x31\
+\x35\x2e\x38\x30\x31\x43\x34\x39\x2e\x32\x20\x33\x31\x35\x2e\x38\
+\x30\x31\x20\x36\x30\x2e\x36\x20\x33\x33\x37\x2e\x34\x30\x31\x20\
+\x35\x36\x20\x33\x34\x38\x2e\x36\x30\x31\x43\x35\x36\x20\x33\x34\
+\x38\x2e\x36\x30\x31\x20\x35\x35\x2e\x36\x20\x33\x33\x38\x2e\x32\
+\x30\x31\x20\x35\x31\x2e\x36\x20\x33\x33\x33\x2e\x32\x30\x31\x43\
+\x35\x31\x2e\x36\x20\x33\x33\x33\x2e\x32\x30\x31\x20\x34\x37\x2e\
+\x36\x20\x33\x34\x36\x2e\x30\x30\x31\x20\x34\x36\x2e\x32\x20\x33\
+\x34\x37\x2e\x34\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x33\x31\x2e\
+\x34\x20\x33\x34\x34\x2e\x38\x30\x31\x43\x33\x31\x2e\x34\x20\x33\
+\x34\x34\x2e\x38\x30\x31\x20\x33\x36\x2e\x38\x20\x33\x33\x36\x2e\
+\x30\x30\x31\x20\x32\x38\x2e\x38\x20\x33\x31\x37\x2e\x36\x30\x31\
+\x43\x32\x38\x2e\x38\x20\x33\x31\x37\x2e\x36\x30\x31\x20\x32\x38\
+\x20\x33\x33\x38\x2e\x30\x30\x31\x20\x32\x31\x2e\x32\x20\x33\x34\
+\x39\x2e\x30\x30\x31\x43\x32\x31\x2e\x32\x20\x33\x34\x39\x2e\x30\
+\x30\x31\x20\x33\x35\x2e\x34\x20\x33\x32\x38\x2e\x38\x30\x31\x20\
+\x33\x31\x2e\x34\x20\x33\x34\x34\x2e\x38\x30\x31\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\
+\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x32\x31\x2e\x34\x20\x33\x34\x32\x2e\x38\x30\x31\x43\
+\x32\x31\x2e\x34\x20\x33\x34\x32\x2e\x38\x30\x31\x20\x32\x31\x2e\
+\x32\x20\x33\x32\x32\x2e\x38\x30\x31\x20\x32\x31\x2e\x36\x20\x33\
+\x31\x39\x2e\x38\x30\x31\x43\x32\x31\x2e\x36\x20\x33\x31\x39\x2e\
+\x38\x30\x31\x20\x31\x37\x2e\x38\x20\x33\x33\x36\x2e\x34\x30\x31\
+\x20\x37\x2e\x36\x20\x33\x34\x36\x2e\x30\x30\x31\x43\x37\x2e\x36\
+\x20\x33\x34\x36\x2e\x30\x30\x31\x20\x32\x32\x20\x33\x33\x34\x2e\
+\x30\x30\x31\x20\x32\x31\x2e\x34\x20\x33\x34\x32\x2e\x38\x30\x31\
+\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\
+\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\
+\x61\x74\x68\x22\x3a\x22\x4d\x31\x31\x2e\x38\x20\x33\x31\x30\x2e\
+\x38\x30\x31\x43\x31\x31\x2e\x38\x20\x33\x31\x30\x2e\x38\x30\x31\
+\x20\x31\x37\x2e\x38\x20\x33\x32\x34\x2e\x34\x30\x31\x20\x37\x2e\
+\x38\x20\x33\x34\x32\x2e\x38\x30\x31\x43\x37\x2e\x38\x20\x33\x34\
+\x32\x2e\x38\x30\x31\x20\x31\x34\x2e\x32\x20\x33\x33\x30\x2e\x36\
+\x30\x31\x20\x39\x2e\x34\x20\x33\x32\x33\x2e\x36\x30\x31\x43\x39\
+\x2e\x34\x20\x33\x32\x33\x2e\x36\x30\x31\x20\x31\x32\x20\x33\x32\
+\x30\x2e\x32\x30\x31\x20\x31\x31\x2e\x38\x20\x33\x31\x30\x2e\x38\
+\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x37\x2e\x34\x20\x33\x34\
+\x32\x2e\x34\x30\x31\x43\x2d\x37\x2e\x34\x20\x33\x34\x32\x2e\x34\
+\x30\x31\x20\x2d\x38\x2e\x34\x20\x33\x32\x36\x2e\x38\x30\x31\x20\
+\x2d\x36\x2e\x36\x20\x33\x32\x34\x2e\x36\x30\x31\x43\x2d\x36\x2e\
+\x36\x20\x33\x32\x34\x2e\x36\x30\x31\x20\x2d\x36\x2e\x34\x20\x33\
+\x31\x38\x2e\x32\x30\x31\x20\x2d\x36\x2e\x38\x20\x33\x31\x37\x2e\
+\x32\x30\x31\x43\x2d\x36\x2e\x38\x20\x33\x31\x37\x2e\x32\x30\x31\
+\x20\x2d\x32\x2e\x38\x20\x33\x31\x31\x2e\x30\x30\x31\x20\x2d\x32\
+\x2e\x36\x20\x33\x31\x38\x2e\x34\x30\x31\x43\x2d\x32\x2e\x36\x20\
+\x33\x31\x38\x2e\x34\x30\x31\x20\x2d\x31\x2e\x32\x20\x33\x32\x36\
+\x2e\x32\x30\x31\x20\x31\x2e\x36\x20\x33\x33\x30\x2e\x38\x30\x31\
+\x43\x31\x2e\x36\x20\x33\x33\x30\x2e\x38\x30\x31\x20\x35\x2e\x32\
+\x20\x33\x33\x36\x2e\x32\x30\x31\x20\x35\x20\x33\x34\x32\x2e\x36\
+\x30\x31\x43\x35\x20\x33\x34\x32\x2e\x36\x30\x31\x20\x2d\x35\x20\
+\x33\x31\x32\x2e\x34\x30\x31\x20\x2d\x37\x2e\x34\x20\x33\x34\x32\
+\x2e\x34\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x31\x31\x20\x33\
+\x31\x34\x2e\x38\x30\x31\x43\x2d\x31\x31\x20\x33\x31\x34\x2e\x38\
+\x30\x31\x20\x2d\x31\x37\x2e\x36\x20\x33\x32\x35\x2e\x36\x30\x31\
+\x20\x2d\x31\x39\x2e\x34\x20\x33\x34\x34\x2e\x36\x30\x31\x43\x2d\
+\x31\x39\x2e\x34\x20\x33\x34\x34\x2e\x36\x30\x31\x20\x2d\x32\x30\
+\x2e\x38\x20\x33\x33\x38\x2e\x34\x30\x31\x20\x2d\x31\x37\x20\x33\
+\x32\x34\x2e\x30\x30\x31\x43\x2d\x31\x37\x20\x33\x32\x34\x2e\x30\
+\x30\x31\x20\x2d\x31\x32\x2e\x38\x20\x33\x30\x38\x2e\x36\x30\x31\
+\x20\x2d\x31\x31\x20\x33\x31\x34\x2e\x38\x30\x31\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\
+\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x33\x32\x2e\x38\x20\x33\x33\x34\x2e\x36\x30\x31\
+\x43\x2d\x33\x32\x2e\x38\x20\x33\x33\x34\x2e\x36\x30\x31\x20\x2d\
+\x32\x37\x2e\x38\x20\x33\x32\x39\x2e\x32\x30\x31\x20\x2d\x32\x36\
+\x2e\x34\x20\x33\x32\x34\x2e\x32\x30\x31\x43\x2d\x32\x36\x2e\x34\
+\x20\x33\x32\x34\x2e\x32\x30\x31\x20\x2d\x32\x32\x2e\x38\x20\x33\
+\x30\x38\x2e\x34\x30\x31\x20\x2d\x32\x39\x2e\x32\x20\x33\x31\x37\
+\x2e\x30\x30\x31\x43\x2d\x32\x39\x2e\x32\x20\x33\x31\x37\x2e\x30\
+\x30\x31\x20\x2d\x32\x39\x20\x33\x32\x35\x2e\x30\x30\x31\x20\x2d\
+\x33\x37\x2e\x32\x20\x33\x33\x32\x2e\x34\x30\x31\x43\x2d\x33\x37\
+\x2e\x32\x20\x33\x33\x32\x2e\x34\x30\x31\x20\x2d\x33\x32\x2e\x34\
+\x20\x33\x33\x30\x2e\x30\x30\x31\x20\x2d\x33\x32\x2e\x38\x20\x33\
+\x33\x34\x2e\x36\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\
+\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x33\x38\
+\x2e\x36\x20\x33\x32\x39\x2e\x36\x30\x31\x43\x2d\x33\x38\x2e\x36\
+\x20\x33\x32\x39\x2e\x36\x30\x31\x20\x2d\x33\x35\x2e\x32\x20\x33\
+\x31\x32\x2e\x32\x30\x31\x20\x2d\x33\x34\x2e\x34\x20\x33\x31\x31\
+\x2e\x34\x30\x31\x43\x2d\x33\x34\x2e\x34\x20\x33\x31\x31\x2e\x34\
+\x30\x31\x20\x2d\x33\x32\x2e\x36\x20\x33\x30\x38\x2e\x30\x30\x31\
+\x20\x2d\x33\x35\x2e\x34\x20\x33\x31\x31\x2e\x32\x30\x31\x43\x2d\
+\x33\x35\x2e\x34\x20\x33\x31\x31\x2e\x32\x30\x31\x20\x2d\x34\x34\
+\x2e\x32\x20\x33\x33\x30\x2e\x34\x30\x31\x20\x2d\x34\x38\x2e\x32\
+\x20\x33\x33\x37\x2e\x30\x30\x31\x43\x2d\x34\x38\x2e\x32\x20\x33\
+\x33\x37\x2e\x30\x30\x31\x20\x2d\x34\x30\x2e\x32\x20\x33\x32\x37\
+\x2e\x38\x30\x31\x20\x2d\x33\x38\x2e\x36\x20\x33\x32\x39\x2e\x36\
+\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\
+\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\
+\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\x34\x34\x2e\x34\x20\x33\
+\x31\x33\x2e\x30\x30\x31\x43\x2d\x34\x34\x2e\x34\x20\x33\x31\x33\
+\x2e\x30\x30\x31\x20\x2d\x33\x32\x2e\x38\x20\x32\x39\x30\x2e\x36\
+\x30\x31\x20\x2d\x35\x34\x2e\x36\x20\x33\x31\x36\x2e\x34\x30\x31\
+\x43\x2d\x35\x34\x2e\x36\x20\x33\x31\x36\x2e\x34\x30\x31\x20\x2d\
+\x34\x33\x2e\x36\x20\x33\x30\x36\x2e\x36\x30\x31\x20\x2d\x34\x34\
+\x2e\x34\x20\x33\x31\x33\x2e\x30\x30\x31\x7a\x22\x7d\x0a\x20\x2c\
+\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\
+\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\
+\x4d\x2d\x35\x39\x2e\x38\x20\x32\x39\x38\x2e\x34\x30\x31\x43\x2d\
+\x35\x39\x2e\x38\x20\x32\x39\x38\x2e\x34\x30\x31\x20\x2d\x35\x35\
+\x20\x32\x37\x39\x2e\x36\x30\x31\x20\x2d\x35\x32\x2e\x34\x20\x32\
+\x37\x39\x2e\x38\x30\x31\x43\x2d\x35\x32\x2e\x34\x20\x32\x37\x39\
+\x2e\x38\x30\x31\x20\x2d\x34\x34\x2e\x32\x20\x32\x37\x30\x2e\x38\
+\x30\x31\x20\x2d\x35\x30\x2e\x38\x20\x32\x38\x31\x2e\x34\x30\x31\
+\x43\x2d\x35\x30\x2e\x38\x20\x32\x38\x31\x2e\x34\x30\x31\x20\x2d\
+\x35\x36\x2e\x38\x20\x32\x39\x31\x2e\x30\x30\x31\x20\x2d\x35\x36\
+\x2e\x32\x20\x33\x30\x30\x2e\x38\x30\x31\x43\x2d\x35\x36\x2e\x32\
+\x20\x33\x30\x30\x2e\x38\x30\x31\x20\x2d\x35\x36\x2e\x38\x20\x32\
+\x39\x31\x2e\x32\x30\x31\x20\x2d\x35\x39\x2e\x38\x20\x32\x39\x38\
+\x2e\x34\x30\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x32\x37\x30\x2e\x35\
+\x20\x32\x38\x37\x43\x32\x37\x30\x2e\x35\x20\x32\x38\x37\x20\x32\
+\x35\x38\x2e\x35\x20\x32\x37\x37\x20\x32\x35\x36\x20\x32\x37\x33\
+\x2e\x35\x43\x32\x35\x36\x20\x32\x37\x33\x2e\x35\x20\x32\x36\x39\
+\x2e\x35\x20\x32\x39\x32\x20\x32\x36\x39\x2e\x35\x20\x32\x39\x39\
+\x43\x32\x36\x39\x2e\x35\x20\x32\x39\x39\x20\x32\x37\x32\x20\x32\
+\x39\x31\x2e\x35\x20\x32\x37\x30\x2e\x35\x20\x32\x38\x37\x7a\x22\
+\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\x6c\x6c\x22\x3a\x20\x22\
+\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\
+\x68\x22\x3a\x22\x4d\x32\x37\x36\x20\x32\x36\x35\x43\x32\x37\x36\
+\x20\x32\x36\x35\x20\x32\x35\x35\x20\x32\x35\x30\x20\x32\x35\x31\
+\x2e\x35\x20\x32\x34\x32\x2e\x35\x43\x32\x35\x31\x2e\x35\x20\x32\
+\x34\x32\x2e\x35\x20\x32\x37\x38\x20\x32\x37\x32\x20\x32\x37\x38\
+\x20\x32\x37\x36\x2e\x35\x43\x32\x37\x38\x20\x32\x37\x36\x2e\x35\
+\x20\x32\x37\x38\x2e\x35\x20\x32\x36\x37\x2e\x35\x20\x32\x37\x36\
+\x20\x32\x36\x35\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x32\x39\x33\x20\x31\
+\x31\x31\x43\x32\x39\x33\x20\x31\x31\x31\x20\x32\x38\x31\x20\x31\
+\x30\x33\x20\x32\x37\x39\x2e\x35\x20\x31\x30\x35\x43\x32\x37\x39\
+\x2e\x35\x20\x31\x30\x35\x20\x32\x39\x30\x20\x31\x31\x31\x2e\x35\
+\x20\x32\x39\x32\x2e\x35\x20\x31\x32\x30\x43\x32\x39\x32\x2e\x35\
+\x20\x31\x32\x30\x20\x32\x39\x31\x20\x31\x31\x31\x20\x32\x39\x33\
+\x20\x31\x31\x31\x7a\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x66\x69\
+\x6c\x6c\x22\x3a\x20\x22\x23\x63\x63\x63\x63\x63\x63\x22\x2c\x0a\
+\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x33\x30\x31\x2e\x35\
+\x20\x31\x39\x31\x2e\x35\x4c\x32\x38\x34\x20\x31\x37\x39\x2e\x35\
+\x43\x32\x38\x34\x20\x31\x37\x39\x2e\x35\x20\x33\x30\x33\x20\x31\
+\x39\x36\x2e\x35\x20\x33\x30\x33\x2e\x35\x20\x32\x30\x30\x2e\x35\
+\x4c\x33\x30\x31\x2e\x35\x20\x31\x39\x31\x2e\x35\x7a\x22\x7d\x0a\
+\x20\x2c\x0a\x20\x7b\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\
+\x30\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\
+\x22\x3a\x22\x4d\x2d\x38\x39\x2e\x32\x35\x20\x31\x36\x39\x4c\x2d\
+\x36\x37\x2e\x32\x35\x20\x31\x37\x33\x2e\x37\x35\x22\x7d\x0a\x20\
+\x2c\x0a\x20\x7b\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\
+\x30\x30\x30\x30\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\
+\x3a\x22\x4d\x2d\x33\x39\x20\x33\x33\x31\x43\x2d\x33\x39\x20\x33\
+\x33\x31\x20\x2d\x33\x39\x2e\x35\x20\x33\x32\x37\x2e\x35\x20\x2d\
+\x34\x38\x2e\x35\x20\x33\x33\x38\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\
+\x22\x73\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\
+\x30\x22\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x2d\
+\x33\x33\x2e\x35\x20\x33\x33\x36\x43\x2d\x33\x33\x2e\x35\x20\x33\
+\x33\x36\x20\x2d\x33\x31\x2e\x35\x20\x33\x32\x39\x2e\x35\x20\x2d\
+\x33\x38\x20\x33\x33\x34\x22\x7d\x0a\x20\x2c\x0a\x20\x7b\x22\x73\
+\x74\x72\x6f\x6b\x65\x22\x3a\x22\x23\x30\x30\x30\x30\x30\x30\x22\
+\x2c\x0a\x20\x20\x22\x70\x61\x74\x68\x22\x3a\x22\x4d\x32\x30\x2e\
+\x35\x20\x33\x34\x34\x2e\x35\x43\x32\x30\x2e\x35\x20\x33\x34\x34\
+\x2e\x35\x20\x32\x32\x20\x33\x33\x33\x2e\x35\x20\x31\x30\x2e\x35\
+\x20\x33\x34\x36\x2e\x35\x22\x7d\x0a\x5d\x3b\
+\x00\x00\x13\xc7\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x22\x2e\x2e\x2f\x63\x6f\x6e\x74\x65\x6e\x74\x73\
+\x22\x0a\x49\x74\x65\x6d\x20\x7b\x0a\x20\x20\x69\x64\x3a\x63\x6f\
+\x6e\x74\x61\x69\x6e\x65\x72\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\
+\x33\x32\x30\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x34\x38\x30\
+\x0a\x0a\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\
+\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x35\x0a\x20\x20\x20\x20\x61\
+\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x70\x61\x72\x65\
+\x6e\x74\x0a\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x20\x66\x6f\
+\x6e\x74\x2e\x70\x6f\x69\x6e\x74\x53\x69\x7a\x65\x3a\x31\x35\x3b\
+\x20\x74\x65\x78\x74\x3a\x22\x53\x6d\x69\x6c\x65\x20\x77\x69\x74\
+\x68\x20\x61\x72\x63\x73\x22\x3b\x20\x61\x6e\x63\x68\x6f\x72\x73\
+\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\
+\x72\x3a\x70\x61\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\
+\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x7d\x0a\x0a\x20\x20\x20\x20\
+\x43\x61\x6e\x76\x61\x73\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x69\x64\x3a\x63\x61\x6e\x76\x61\x73\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x33\x32\x30\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x38\x30\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x74\x69\x61\x6c\x69\x61\
+\x73\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\x0a\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\
+\x69\x6e\x67\x20\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3a\
+\x22\x67\x72\x65\x65\x6e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\
+\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\x3a\x22\x79\x65\x6c\x6c\x6f\
+\x77\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\
+\x72\x74\x79\x20\x69\x6e\x74\x20\x6c\x69\x6e\x65\x57\x69\x64\x74\
+\x68\x3a\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x43\x74\x72\x6c\x2e\
+\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x66\x69\x6c\x6c\
+\x3a\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x73\x74\x72\x6f\
+\x6b\x65\x3a\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x61\x6c\
+\x70\x68\x61\x3a\x61\x6c\x70\x68\x61\x43\x74\x72\x6c\x2e\x76\x61\
+\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\
+\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x73\x63\x61\x6c\x65\x58\
+\x20\x3a\x20\x73\x63\x61\x6c\x65\x58\x43\x74\x72\x6c\x2e\x76\x61\
+\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\
+\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x73\x63\x61\x6c\x65\x59\
+\x20\x3a\x20\x73\x63\x61\x6c\x65\x59\x43\x74\x72\x6c\x2e\x76\x61\
+\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\
+\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x72\x6f\x74\x61\x74\x65\
+\x20\x3a\x20\x72\x6f\x74\x61\x74\x65\x43\x74\x72\x6c\x2e\x76\x61\
+\x6c\x75\x65\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x4c\
+\x69\x6e\x65\x57\x69\x64\x74\x68\x43\x68\x61\x6e\x67\x65\x64\x3a\
+\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x46\x69\x6c\x6c\x43\x68\
+\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\
+\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\
+\x53\x74\x72\x6f\x6b\x65\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\
+\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x6f\x6e\x41\x6c\x70\x68\x61\x43\x68\x61\
+\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\
+\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x53\
+\x63\x61\x6c\x65\x58\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\
+\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x6f\x6e\x53\x63\x61\x6c\x65\x59\x43\x68\x61\
+\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\
+\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x52\
+\x6f\x74\x61\x74\x65\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\
+\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\
+\x6e\x20\x73\x63\x61\x6c\x65\x58\x20\x7b\x20\x53\x70\x72\x69\x6e\
+\x67\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x73\x70\x72\
+\x69\x6e\x67\x3a\x20\x32\x3b\x20\x64\x61\x6d\x70\x69\x6e\x67\x3a\
+\x20\x30\x2e\x32\x3b\x20\x6c\x6f\x6f\x70\x73\x3a\x41\x6e\x69\x6d\
+\x61\x74\x69\x6f\x6e\x2e\x49\x6e\x66\x69\x6e\x69\x74\x65\x20\x7d\
+\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x42\x65\x68\x61\x76\
+\x69\x6f\x72\x20\x6f\x6e\x20\x73\x63\x61\x6c\x65\x59\x20\x7b\x20\
+\x53\x70\x72\x69\x6e\x67\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\
+\x7b\x20\x73\x70\x72\x69\x6e\x67\x3a\x20\x32\x3b\x20\x64\x61\x6d\
+\x70\x69\x6e\x67\x3a\x20\x30\x2e\x32\x3b\x20\x6c\x6f\x6f\x70\x73\
+\x3a\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\x6e\x66\x69\x6e\
+\x69\x74\x65\x7d\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x42\
+\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\x72\x6f\x74\x61\x74\
+\x65\x20\x7b\x20\x53\x70\x72\x69\x6e\x67\x41\x6e\x69\x6d\x61\x74\
+\x69\x6f\x6e\x20\x7b\x20\x73\x70\x72\x69\x6e\x67\x3a\x20\x32\x3b\
+\x20\x64\x61\x6d\x70\x69\x6e\x67\x3a\x20\x30\x2e\x32\x3b\x20\x6c\
+\x6f\x6f\x70\x73\x3a\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\
+\x6e\x66\x69\x6e\x69\x74\x65\x7d\x20\x7d\x0a\x0a\x20\x20\x20\x20\
+\x6f\x6e\x50\x61\x69\x6e\x74\x3a\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x76\x61\x72\x20\x63\x74\x78\x20\x3d\x20\x63\
+\x61\x6e\x76\x61\x73\x2e\x67\x65\x74\x43\x6f\x6e\x74\x65\x78\x74\
+\x28\x27\x32\x64\x27\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x63\x74\x78\x2e\x73\x61\x76\x65\x28\x29\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x63\x6c\x65\x61\
+\x72\x52\x65\x63\x74\x28\x30\x2c\x20\x30\x2c\x20\x63\x61\x6e\x76\
+\x61\x73\x2e\x77\x69\x64\x74\x68\x2c\x20\x63\x61\x6e\x76\x61\x73\
+\x2e\x68\x65\x69\x67\x68\x74\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x74\x78\x2e\x67\x6c\x6f\x62\x61\x6c\x41\x6c\
+\x70\x68\x61\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x61\x6c\x70\
+\x68\x61\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x20\x3d\x20\
+\x63\x61\x6e\x76\x61\x73\x2e\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\
+\x6c\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\x20\x3d\x20\x63\x61\
+\x6e\x76\x61\x73\x2e\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6c\x69\
+\x6e\x65\x57\x69\x64\x74\x68\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\
+\x2e\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x3b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x63\x61\x6c\x65\x28\
+\x63\x61\x6e\x76\x61\x73\x2e\x73\x63\x61\x6c\x65\x58\x2c\x20\x63\
+\x61\x6e\x76\x61\x73\x2e\x73\x63\x61\x6c\x65\x59\x29\x3b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x72\x6f\x74\
+\x61\x74\x65\x28\x63\x61\x6e\x76\x61\x73\x2e\x72\x6f\x74\x61\x74\
+\x65\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x62\x65\x67\x69\x6e\x50\x61\x74\x68\x28\x29\x3b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6d\x6f\x76\
+\x65\x54\x6f\x28\x37\x35\x20\x2b\x20\x35\x30\x20\x20\x2a\x20\x4d\
+\x61\x74\x68\x2e\x63\x6f\x73\x28\x30\x29\x2c\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x37\x35\x20\x2d\x20\x35\x30\x20\x20\x2a\x20\x4d\x61\x74\x68\
+\x2e\x73\x69\x6e\x28\x4d\x61\x74\x68\x2e\x50\x49\x2a\x32\x29\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\
+\x61\x72\x63\x28\x37\x35\x2c\x37\x35\x2c\x35\x30\x2c\x30\x2c\x4d\
+\x61\x74\x68\x2e\x50\x49\x2a\x32\x2c\x74\x72\x75\x65\x29\x3b\x20\
+\x2f\x2f\x20\x4f\x75\x74\x65\x72\x20\x63\x69\x72\x63\x6c\x65\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6d\x6f\
+\x76\x65\x54\x6f\x28\x37\x35\x2c\x37\x30\x29\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x61\x72\x63\x28\x37\
+\x35\x2c\x37\x30\x2c\x33\x35\x2c\x30\x2c\x4d\x61\x74\x68\x2e\x50\
+\x49\x2c\x66\x61\x6c\x73\x65\x29\x3b\x20\x20\x20\x2f\x2f\x20\x4d\
+\x6f\x75\x74\x68\x20\x28\x63\x6c\x6f\x63\x6b\x77\x69\x73\x65\x29\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6d\
+\x6f\x76\x65\x54\x6f\x28\x36\x30\x2c\x36\x35\x29\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x61\x72\x63\x28\
+\x36\x30\x2c\x36\x35\x2c\x35\x2c\x30\x2c\x4d\x61\x74\x68\x2e\x50\
+\x49\x2a\x32\x2c\x74\x72\x75\x65\x29\x3b\x20\x20\x2f\x2f\x20\x4c\
+\x65\x66\x74\x20\x65\x79\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x63\x74\x78\x2e\x6d\x6f\x76\x65\x54\x6f\x28\x39\x30\x20\
+\x2b\x20\x35\x20\x20\x2a\x20\x4d\x61\x74\x68\x2e\x63\x6f\x73\x28\
+\x30\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x36\x35\x20\x2d\x20\x35\x20\
+\x20\x2a\x20\x4d\x61\x74\x68\x2e\x73\x69\x6e\x28\x4d\x61\x74\x68\
+\x2e\x50\x49\x2a\x32\x29\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x63\x74\x78\x2e\x6d\x6f\x76\x65\x54\x6f\x28\x39\x30\
+\x2c\x36\x35\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x74\x78\x2e\x61\x72\x63\x28\x39\x30\x2c\x36\x35\x2c\x35\x2c\
+\x30\x2c\x4d\x61\x74\x68\x2e\x50\x49\x2a\x32\x2c\x74\x72\x75\x65\
+\x29\x3b\x20\x20\x2f\x2f\x20\x52\x69\x67\x68\x74\x20\x65\x79\x65\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x63\
+\x6c\x6f\x73\x65\x50\x61\x74\x68\x28\x29\x3b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x63\x61\x6e\x76\x61\x73\
+\x2e\x66\x69\x6c\x6c\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x28\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x63\x61\
+\x6e\x76\x61\x73\x2e\x73\x74\x72\x6f\x6b\x65\x29\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\
+\x72\x6f\x6b\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x63\x74\x78\x2e\x72\x65\x73\x74\x6f\x72\x65\x28\x29\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\
+\x0a\x0a\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\
+\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x63\x6f\x6e\
+\x74\x72\x6f\x6c\x73\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\
+\x64\x74\x68\x3a\x33\x32\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x68\x65\x69\x67\x68\x74\x3a\x31\x35\x30\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x33\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\
+\x20\x7b\x69\x64\x3a\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x43\x74\
+\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\
+\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x31\x3b\
+\x20\x6d\x61\x78\x3a\x31\x30\x3b\x20\x69\x6e\x69\x74\x3a\x32\x3b\
+\x20\x6e\x61\x6d\x65\x3a\x22\x4c\x69\x6e\x65\x20\x77\x69\x64\x74\
+\x68\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\
+\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x73\x63\x61\x6c\x65\x58\x43\
+\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\
+\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x30\
+\x2e\x31\x3b\x20\x6d\x61\x78\x3a\x31\x30\x3b\x20\x69\x6e\x69\x74\
+\x3a\x31\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x53\x63\x61\x6c\x65\x58\
+\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\
+\x64\x65\x72\x20\x7b\x69\x64\x3a\x73\x63\x61\x6c\x65\x59\x43\x74\
+\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\
+\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x30\x2e\
+\x31\x3b\x20\x6d\x61\x78\x3a\x31\x30\x3b\x20\x69\x6e\x69\x74\x3a\
+\x31\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x53\x63\x61\x6c\x65\x59\x22\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\
+\x65\x72\x20\x7b\x69\x64\x3a\x72\x6f\x74\x61\x74\x65\x43\x74\x72\
+\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\
+\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x30\x3b\x20\
+\x6d\x61\x78\x3a\x4d\x61\x74\x68\x2e\x50\x49\x2a\x32\x3b\x20\x69\
+\x6e\x69\x74\x3a\x30\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x52\x6f\x74\
+\x61\x74\x65\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x61\x6c\x70\x68\x61\
+\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\
+\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\
+\x30\x3b\x20\x6d\x61\x78\x3a\x31\x3b\x20\x69\x6e\x69\x74\x3a\x31\
+\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x41\x6c\x70\x68\x61\x22\x7d\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\
+\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x03\x03\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\xd4\x00\x00\x00\x15\x04\x03\x00\x00\x00\xcc\x44\xdd\x3a\
+\x00\x00\x00\x30\x50\x4c\x54\x45\xff\xff\xff\x00\x00\x00\x50\x50\
+\x50\xcc\xcc\xcc\x30\x30\x30\x40\x40\x40\xb6\xb6\xb6\x74\x74\x74\
+\x62\x62\x62\x8a\x8a\x8a\x22\x22\x22\x16\x16\x16\xe6\xe6\xe6\x9e\
+\x9e\x9e\x0c\x0c\x0c\x04\x04\x04\xa7\x93\x44\x89\x00\x00\x02\x8e\
+\x49\x44\x41\x54\x48\x0d\x9d\x54\x3d\x88\x13\x41\x14\xfe\xf2\xe3\
+\x6d\x2e\xb7\xb9\x04\xc1\x43\x21\x07\x0b\x36\x87\xd5\xca\x9d\x8d\
+\x85\x06\x56\xb1\x50\x44\x50\xb0\x38\x8b\x04\x14\xdb\x08\x11\x53\
+\x89\x82\x07\x87\x36\xb1\x3f\xb8\x05\x4b\x9b\xa0\x28\x4a\x9a\x28\
+\x72\x57\x1a\x0b\x11\xad\xae\x92\x6b\xec\x3d\x44\xf0\xcd\xce\x4c\
+\xde\x9b\x64\x37\x1c\x3e\xd8\x99\x37\xef\xfb\xde\xfb\xe6\xcd\x0c\
+\x0b\x64\x9b\xff\xf4\xdb\x46\x36\xea\x22\x87\xe1\x9e\x74\x53\x78\
+\x95\x0f\xbd\xc5\x5e\x8e\xd7\xca\xcb\x87\xee\xda\xae\xd2\xb8\x30\
+\x95\xf3\xa1\xdd\x46\x64\xe9\x93\x73\x31\xc4\x67\x9c\x77\xa3\x14\
+\x9b\xb2\xb3\xc7\x80\x34\x2e\x4c\xe5\xe2\x78\xcb\xb3\xa4\x7e\x60\
+\xe2\x00\xd3\xa4\x70\x22\x91\x9a\xe2\xb2\x94\xdd\xf2\x2c\xa9\x15\
+\xbc\x6d\xeb\x2e\x86\x7a\x4a\x93\x9a\xab\x27\x52\xcc\xb5\x7d\x8f\
+\xbb\x82\xd9\xc6\x2c\xa9\x17\xb8\x34\xd2\x89\x71\xb6\x54\x69\x2f\
+\x91\x62\xae\xa6\x42\x74\x65\xb6\x31\x4b\xca\x26\x01\xb1\x76\xd3\
+\xba\x2a\x5f\x4b\xa4\x98\x6b\x3d\xee\xca\x6c\x83\x02\x77\x37\x4a\
+\x1d\x8b\xeb\xf9\x6b\xf7\xbb\xba\x6a\xb6\x58\xbb\xc5\x70\xae\x33\
+\xc2\x4d\x8e\x93\x57\xdd\xec\x0c\x1d\xae\x45\x23\xcc\x3f\xf1\x3a\
+\x4d\xc6\x22\x14\x7a\xe5\xf8\x9e\xac\x0b\xaf\x5f\x38\x9a\x21\x55\
+\xca\x37\x70\x60\x8b\x25\x73\x2b\xf0\x1a\x5c\x6e\x7d\xa0\x2c\x56\
+\x48\x84\xdd\xea\x95\xd3\x6d\xc6\x22\x94\xb0\x10\xec\x24\x59\x76\
+\x68\x85\x58\xce\x90\xda\x5a\x6c\xab\x77\x20\xec\x21\x2a\x35\x2e\
+\x27\x80\x08\x5b\x1f\x46\x15\x51\x47\x9d\x68\xae\xa9\x18\x85\x55\
+\x65\x43\xf2\x5e\x52\xb6\xa0\x50\x24\xa6\x8f\x8c\x4a\xb6\x86\xea\
+\x1d\x08\xf2\x45\x78\x59\x52\xd8\xd6\x39\x34\x2a\x53\x52\x5f\x12\
+\x6f\xed\x82\xb2\x47\xe4\x1f\x47\xa9\x2f\xa4\x2e\x0f\x06\x7f\xf4\
+\xa1\x90\xd4\x29\xa8\x77\x00\x26\x1f\xa0\xb8\x97\xd1\x15\x6e\x10\
+\x93\x31\x25\xf5\x8c\x3e\x61\x85\x25\x94\x03\x41\x21\x28\xd6\x30\
+\xa5\xbd\x43\xae\x27\xb8\xf0\xeb\xa8\x06\x5c\x6e\x5d\x5d\x95\xbd\
+\x2b\xec\x13\x93\xb1\x08\x15\xbc\xc2\xae\xcc\x2e\xd4\x91\x1b\x89\
+\xeb\x24\x2c\xd6\x38\xa5\xfd\xa5\x23\xd4\x0b\x3d\xfa\x35\x6c\x0f\
+\xb9\x9c\x80\x22\xf8\x4b\xb4\x64\x2c\xc2\xf3\xd5\x7d\x04\x82\x02\
+\xfc\xc4\xe3\x9d\x11\x53\x08\x8b\x35\x4e\xb1\xf7\xb8\xea\x70\xf1\
+\xda\xff\x25\xca\x09\x8c\x9a\xa8\xd1\xd2\xd4\xf1\x7f\xd3\x5d\xad\
+\x3d\xf8\xd4\x75\xde\x3a\xee\x74\x3f\xae\x58\x8a\xce\x8d\xf5\x44\
+\x69\xb7\xbb\x6f\xb4\x6f\xc7\x33\xf7\x9b\x2e\xd7\x02\x11\xbc\x06\
+\xf9\x52\xca\x42\x13\xb3\xa1\xe8\x68\xac\xa7\x24\xb6\x3c\x41\xa4\
+\xa5\xc3\xb5\xb0\x7a\x05\x64\x8c\x99\x80\x0e\xcb\x91\x29\x14\x6d\
+\x68\xa4\x18\x2e\x04\x5e\x5f\xb2\x6c\x7c\x3a\x26\xfe\x81\x06\x3c\
+\x9c\x94\x21\x93\x54\xf3\x9c\x7b\xd8\x09\xe2\x6c\xcb\xaa\xfe\x67\
+\x57\x63\xa9\xf9\xcd\x5b\xb6\x94\x98\x0f\x27\x75\x5d\x64\x38\xee\
+\x91\x94\xdd\xa7\xc5\x54\x52\x6a\xdc\x54\x1e\x63\xff\x00\xe5\x5b\
+\x8c\x44\xbf\xe2\x5a\x9c\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x15\x03\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x22\x2e\x2e\x2f\x63\x6f\x6e\x74\x65\x6e\x74\x73\
+\x22\x0a\x49\x74\x65\x6d\x20\x7b\x0a\x20\x20\x69\x64\x3a\x63\x6f\
+\x6e\x74\x61\x69\x6e\x65\x72\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\
+\x33\x32\x30\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x34\x38\x30\
+\x0a\x0a\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\
+\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x35\x0a\x20\x20\x20\x20\x61\
+\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x70\x61\x72\x65\
+\x6e\x74\x0a\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x20\x66\x6f\
+\x6e\x74\x2e\x70\x6f\x69\x6e\x74\x53\x69\x7a\x65\x3a\x31\x35\x3b\
+\x20\x74\x65\x78\x74\x3a\x22\x53\x71\x75\x69\x72\x63\x6c\x65\x73\
+\x22\x3b\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x68\x6f\x72\x69\x7a\
+\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x70\x61\x72\x65\
+\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\
+\x74\x65\x72\x7d\x0a\x20\x20\x20\x20\x49\x6d\x61\x67\x65\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\
+\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\
+\x3a\x70\x61\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\
+\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x73\x6f\x75\x72\x63\x65\x3a\x22\x73\x71\x75\x69\x72\x63\x6c\x65\
+\x2e\x70\x6e\x67\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\
+\x74\x68\x3a\x32\x35\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x68\x65\
+\x69\x67\x68\x74\x3a\x32\x35\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\
+\x20\x20\x43\x61\x6e\x76\x61\x73\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x69\x64\x3a\x63\x61\x6e\x76\x61\x73\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x33\x32\x30\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x35\
+\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x74\x69\x61\x6c\
+\x69\x61\x73\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\x0a\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\
+\x74\x72\x69\x6e\x67\x20\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\
+\x65\x3a\x22\x62\x6c\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\
+\x20\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\x3a\x22\x73\x74\x65\x65\
+\x6c\x62\x6c\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\
+\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x6e\x74\x20\x6c\x69\x6e\x65\
+\x57\x69\x64\x74\x68\x3a\x32\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x6e\x74\x20\x6e\x53\x69\
+\x7a\x65\x3a\x6e\x43\x74\x72\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\
+\x72\x65\x61\x6c\x20\x72\x61\x64\x69\x75\x73\x3a\x72\x43\x74\x72\
+\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x66\x69\
+\x6c\x6c\x3a\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x73\x74\
+\x72\x6f\x6b\x65\x3a\x66\x61\x6c\x73\x65\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\
+\x20\x70\x78\x3a\x78\x43\x74\x72\x6c\x2e\x76\x61\x6c\x75\x65\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\
+\x20\x72\x65\x61\x6c\x20\x70\x79\x3a\x79\x43\x74\x72\x6c\x2e\x76\
+\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\
+\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x61\x6c\x70\x68\x61\
+\x3a\x61\x6c\x70\x68\x61\x43\x74\x72\x6c\x2e\x76\x61\x6c\x75\x65\
+\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x41\x6c\x70\x68\
+\x61\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\
+\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x6f\x6e\x52\x61\x64\x69\x75\x73\x43\x68\x61\x6e\x67\x65\x64\
+\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x4c\x69\x6e\x65\x57\
+\x69\x64\x74\x68\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\
+\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x6f\x6e\x4e\x53\x69\x7a\x65\x43\x68\x61\x6e\x67\
+\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\
+\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x46\x69\x6c\
+\x6c\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\
+\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x6f\x6e\x53\x74\x72\x6f\x6b\x65\x43\x68\x61\x6e\x67\x65\x64\
+\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x50\x78\x43\x68\x61\
+\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\
+\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x50\
+\x79\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\
+\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x0a\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x6f\x6e\x50\x61\x69\x6e\x74\x3a\x20\x73\x71\x75\x63\
+\x69\x72\x6c\x65\x28\x29\x3b\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x73\x71\x75\x63\x69\x72\
+\x6c\x65\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x76\x61\x72\x20\x63\x74\x78\x20\x3d\x20\x63\x61\x6e\x76\x61\
+\x73\x2e\x67\x65\x74\x43\x6f\x6e\x74\x65\x78\x74\x28\x22\x32\x64\
+\x22\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\
+\x72\x20\x4e\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x6e\x53\x69\
+\x7a\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\
+\x72\x20\x52\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x72\x61\x64\
+\x69\x75\x73\x3b\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x4e\x3d\x4d\x61\x74\x68\x2e\x61\x62\x73\x28\x4e\x29\x3b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x4d\x3d\x4e\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\
+\x4e\x3e\x31\x30\x30\x29\x20\x4d\x3d\x31\x30\x30\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x4e\x3c\x30\x2e\
+\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x31\x29\x20\x4d\x3d\x30\
+\x2e\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x31\x3b\x0a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x61\x76\
+\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\
+\x74\x78\x2e\x67\x6c\x6f\x62\x61\x6c\x41\x6c\x70\x68\x61\x20\x3d\
+\x63\x61\x6e\x76\x61\x73\x2e\x61\x6c\x70\x68\x61\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\
+\x53\x74\x79\x6c\x65\x20\x3d\x20\x22\x67\x72\x61\x79\x22\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\
+\x6c\x6c\x52\x65\x63\x74\x28\x30\x2c\x20\x30\x2c\x20\x63\x61\x6e\
+\x76\x61\x73\x2e\x77\x69\x64\x74\x68\x2c\x20\x63\x61\x6e\x76\x61\
+\x73\x2e\x68\x65\x69\x67\x68\x74\x29\x3b\x0a\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\x65\
+\x53\x74\x79\x6c\x65\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x73\
+\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x53\x74\
+\x79\x6c\x65\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x66\x69\x6c\
+\x6c\x53\x74\x79\x6c\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x63\x74\x78\x2e\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x20\
+\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x6c\x69\x6e\x65\x57\x69\x64\
+\x74\x68\x3b\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\
+\x74\x78\x2e\x62\x65\x67\x69\x6e\x50\x61\x74\x68\x28\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x69\x20\
+\x3d\x20\x30\x2c\x20\x78\x2c\x20\x79\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x66\x6f\x72\x20\x28\x69\x3d\x30\x3b\x20\x69\
+\x3c\x28\x32\x2a\x52\x2b\x31\x29\x3b\x20\x69\x2b\x2b\x29\x7b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x78\x20\x3d\
+\x20\x4d\x61\x74\x68\x2e\x72\x6f\x75\x6e\x64\x28\x69\x2d\x52\x29\
+\x20\x2b\x20\x63\x61\x6e\x76\x61\x73\x2e\x70\x78\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x79\x20\x3d\x20\x4d\
+\x61\x74\x68\x2e\x72\x6f\x75\x6e\x64\x28\x4d\x61\x74\x68\x2e\x70\
+\x6f\x77\x28\x4d\x61\x74\x68\x2e\x61\x62\x73\x28\x4d\x61\x74\x68\
+\x2e\x70\x6f\x77\x28\x52\x2c\x4d\x29\x2d\x4d\x61\x74\x68\x2e\x70\
+\x6f\x77\x28\x4d\x61\x74\x68\x2e\x61\x62\x73\x28\x69\x2d\x52\x29\
+\x2c\x4d\x29\x29\x2c\x31\x2f\x4d\x29\x29\x20\x2b\x20\x63\x61\x6e\
+\x76\x61\x73\x2e\x70\x79\x3b\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x69\x20\x3d\x3d\x20\x30\
+\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x63\x74\x78\x2e\x6d\x6f\x76\x65\x54\x6f\x28\x78\x2c\x20\x79\
+\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x65\x6c\x73\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x74\x78\x2e\x6c\x69\x6e\x65\x54\x6f\x28\x78\
+\x2c\x20\x79\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x6f\x72\
+\x20\x28\x69\x3d\x28\x32\x2a\x52\x29\x3b\x20\x69\x3c\x28\x34\x2a\
+\x52\x2b\x31\x29\x3b\x20\x69\x2b\x2b\x29\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x78\x20\x3d\x4d\x61\x74\x68\x2e\
+\x72\x6f\x75\x6e\x64\x28\x33\x2a\x52\x2d\x69\x29\x2b\x63\x61\x6e\
+\x76\x61\x73\x2e\x70\x78\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x79\x20\x3d\x20\x4d\x61\x74\x68\x2e\x72\x6f\x75\
+\x6e\x64\x28\x2d\x4d\x61\x74\x68\x2e\x70\x6f\x77\x28\x4d\x61\x74\
+\x68\x2e\x61\x62\x73\x28\x4d\x61\x74\x68\x2e\x70\x6f\x77\x28\x52\
+\x2c\x4d\x29\x2d\x4d\x61\x74\x68\x2e\x70\x6f\x77\x28\x4d\x61\x74\
+\x68\x2e\x61\x62\x73\x28\x33\x2a\x52\x2d\x69\x29\x2c\x4d\x29\x29\
+\x2c\x31\x2f\x4d\x29\x29\x20\x2b\x20\x63\x61\x6e\x76\x61\x73\x2e\
+\x70\x79\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x74\x78\x2e\x6c\x69\x6e\x65\x54\x6f\x28\x78\x2c\x20\x79\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x63\x6c\x6f\x73\
+\x65\x50\x61\x74\x68\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x69\x66\x20\x28\x63\x61\x6e\x76\x61\x73\x2e\x73\x74\
+\x72\x6f\x6b\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\x65\
+\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x63\
+\x61\x6e\x76\x61\x73\x2e\x66\x69\x6c\x6c\x29\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\
+\x66\x69\x6c\x6c\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\
+\x74\x78\x2e\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\x20\x3d\x20\x22\
+\x79\x65\x6c\x6c\x6f\x77\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x63\x74\x78\x2e\x66\x6f\x6e\x74\x20\x3d\x20\x22\x48\
+\x65\x6c\x76\x65\x74\x69\x63\x61\x20\x20\x31\x36\x70\x78\x22\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\
+\x69\x6c\x6c\x54\x65\x78\x74\x28\x22\x7c\x58\x2d\x22\x20\x2b\x20\
+\x4d\x61\x74\x68\x2e\x72\x6f\x75\x6e\x64\x28\x63\x61\x6e\x76\x61\
+\x73\x2e\x70\x78\x29\x20\x2b\x20\x22\x7c\x5e\x22\x20\x2b\x20\x4e\
+\x20\x2b\x20\x22\x20\x2b\x20\x7c\x59\x2d\x22\x2b\x4d\x61\x74\x68\
+\x2e\x72\x6f\x75\x6e\x64\x28\x63\x61\x6e\x76\x61\x73\x2e\x70\x79\
+\x29\x2b\x22\x7c\x5e\x22\x20\x2b\x20\x4e\x20\x2b\x20\x22\x20\x3d\
+\x20\x7c\x22\x20\x2b\x20\x4d\x61\x74\x68\x2e\x72\x6f\x75\x6e\x64\
+\x28\x52\x29\x20\x2b\x20\x22\x7c\x5e\x22\x20\x2b\x20\x4e\x2c\x20\
+\x63\x61\x6e\x76\x61\x73\x2e\x70\x78\x20\x2d\x20\x31\x32\x35\x2c\
+\x20\x63\x61\x6e\x76\x61\x73\x2e\x70\x79\x29\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x72\x65\x73\x74\x6f\
+\x72\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\
+\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x52\x65\x63\x74\x61\
+\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\
+\x64\x3a\x63\x6f\x6e\x74\x72\x6f\x6c\x73\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x33\x32\x30\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x31\x35\x30\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x70\x61\x63\x69\
+\x6e\x67\x3a\x33\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\
+\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x6e\x43\x74\x72\x6c\x3b\
+\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\
+\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x31\x3b\x20\x6d\x61\
+\x78\x3a\x31\x30\x3b\x20\x69\x6e\x69\x74\x3a\x34\x3b\x20\x6e\x61\
+\x6d\x65\x3a\x22\x4e\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x72\x43\x74\
+\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\
+\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x33\x30\
+\x3b\x20\x6d\x61\x78\x3a\x31\x38\x30\x3b\x20\x69\x6e\x69\x74\x3a\
+\x31\x30\x30\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x52\x61\x64\x69\x75\
+\x73\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\
+\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x78\x43\x74\x72\x6c\x3b\x20\
+\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\
+\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x35\x30\x3b\x20\x6d\x61\
+\x78\x3a\x33\x30\x30\x3b\x20\x69\x6e\x69\x74\x3a\x31\x38\x30\x3b\
+\x20\x6e\x61\x6d\x65\x3a\x22\x58\x22\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\
+\x79\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\
+\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\
+\x3a\x33\x30\x3b\x20\x6d\x61\x78\x3a\x33\x30\x30\x3b\x20\x69\x6e\
+\x69\x74\x3a\x32\x32\x30\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x59\x22\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\
+\x65\x72\x20\x7b\x69\x64\x3a\x61\x6c\x70\x68\x61\x43\x74\x72\x6c\
+\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\
+\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x30\x3b\x20\x6d\
+\x61\x78\x3a\x31\x3b\x20\x69\x6e\x69\x74\x3a\x31\x3b\x20\x6e\x61\
+\x6d\x65\x3a\x22\x41\x6c\x70\x68\x61\x22\x7d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\
+\x7d\x0a\
+\x00\x00\x0a\x04\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x49\x74\
+\x65\x6d\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\x3a\x20\x74\x6f\x6f\
+\x6c\x62\x61\x72\x0a\x0a\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\
+\x74\x79\x20\x76\x61\x72\x69\x61\x6e\x74\x20\x6c\x61\x62\x65\x6c\
+\x73\x0a\x20\x20\x20\x20\x73\x69\x67\x6e\x61\x6c\x20\x62\x75\x74\
+\x74\x6f\x6e\x43\x6c\x69\x63\x6b\x65\x64\x28\x69\x6e\x74\x20\x69\
+\x6e\x64\x65\x78\x29\x0a\x0a\x20\x20\x20\x20\x42\x6f\x72\x64\x65\
+\x72\x49\x6d\x61\x67\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x73\x6f\x75\x72\x63\x65\x3a\x20\x22\x69\x6d\x61\x67\x65\x73\
+\x2f\x74\x69\x74\x6c\x65\x62\x61\x72\x2e\x73\x63\x69\x22\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x77\x69\x64\x74\x68\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x70\x61\x72\x65\x6e\
+\x74\x2e\x68\x65\x69\x67\x68\x74\x20\x2b\x20\x31\x34\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x79\x3a\x20\x2d\x37\x0a\x20\x20\x20\x20\
+\x7d\x0a\x0a\x20\x20\x20\x20\x52\x6f\x77\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x79\x3a\x20\x33\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x68\x6f\x72\x69\x7a\x6f\
+\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\
+\x74\x65\x72\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x52\x65\x70\x65\
+\x61\x74\x65\x72\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x6d\x6f\x64\x65\x6c\x3a\x20\x74\x6f\x6f\x6c\x62\x61\
+\x72\x2e\x6c\x61\x62\x65\x6c\x73\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x64\x65\x6c\x65\x67\x61\x74\x65\x3a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x42\
+\x75\x74\x74\x6f\x6e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\x65\x78\x74\
+\x3a\x20\x6d\x6f\x64\x65\x6c\x44\x61\x74\x61\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x6f\x6e\x43\x6c\x69\x63\x6b\x65\x64\x3a\x20\x74\x6f\x6f\x6c\x62\
+\x61\x72\x2e\x62\x75\x74\x74\x6f\x6e\x43\x6c\x69\x63\x6b\x65\x64\
+\x28\x6d\x6f\x64\x65\x6c\x2e\x69\x6e\x64\x65\x78\x29\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\
+\x0a\x7d\x0a\
+\x00\x00\x0b\xd2\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x49\x74\
+\x65\x6d\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\x3a\x20\x63\x6f\x6e\
+\x74\x61\x69\x6e\x65\x72\x0a\x0a\x20\x20\x20\x20\x73\x69\x67\x6e\
+\x61\x6c\x20\x63\x6c\x69\x63\x6b\x65\x64\x0a\x0a\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\
+\x74\x65\x78\x74\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\
+\x62\x75\x74\x74\x6f\x6e\x54\x65\x78\x74\x2e\x77\x69\x64\x74\x68\
+\x20\x2b\x20\x32\x38\x0a\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\
+\x3a\x20\x62\x75\x74\x74\x6f\x6e\x54\x65\x78\x74\x2e\x68\x65\x69\
+\x67\x68\x74\x20\x2b\x20\x31\x34\x0a\x0a\x20\x20\x20\x20\x42\x6f\
+\x72\x64\x65\x72\x49\x6d\x61\x67\x65\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x69\x64\x3a\x20\x62\x75\x74\x74\x6f\x6e\x49\x6d\
+\x61\x67\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x75\x72\
+\x63\x65\x3a\x20\x22\x69\x6d\x61\x67\x65\x73\x2f\x74\x6f\x6f\x6c\
+\x62\x75\x74\x74\x6f\x6e\x2e\x73\x63\x69\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x63\x6f\x6e\x74\x61\
+\x69\x6e\x65\x72\x2e\x77\x69\x64\x74\x68\x20\x2d\x20\x31\x30\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\
+\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x68\x65\x69\x67\x68\x74\
+\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x42\x6f\x72\x64\x65\
+\x72\x49\x6d\x61\x67\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x69\x64\x3a\x20\x70\x72\x65\x73\x73\x65\x64\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x30\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x75\x72\x63\x65\x3a\x20\
+\x22\x69\x6d\x61\x67\x65\x73\x2f\x74\x6f\x6f\x6c\x62\x75\x74\x74\
+\x6f\x6e\x2e\x73\x63\x69\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x77\x69\x64\x74\x68\x3a\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\
+\x2e\x77\x69\x64\x74\x68\x20\x2d\x20\x31\x30\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x63\x6f\x6e\x74\
+\x61\x69\x6e\x65\x72\x2e\x68\x65\x69\x67\x68\x74\x0a\x20\x20\x20\
+\x20\x7d\x0a\x20\x20\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\
+\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x6d\
+\x6f\x75\x73\x65\x52\x65\x67\x69\x6f\x6e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\
+\x20\x62\x75\x74\x74\x6f\x6e\x49\x6d\x61\x67\x65\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x6f\x6e\x43\x6c\x69\x63\x6b\x65\x64\x3a\x20\
+\x7b\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x63\x6c\x69\x63\
+\x6b\x65\x64\x28\x29\x3b\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\
+\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x69\x64\x3a\x20\x62\x75\x74\x74\x6f\x6e\x54\x65\x78\x74\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x22\x77\x68\x69\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x61\x6e\x63\x68\x6f\x72\x73\x2e\x63\x65\x6e\x74\x65\x72\x49\x6e\
+\x3a\x20\x62\x75\x74\x74\x6f\x6e\x49\x6d\x61\x67\x65\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x66\x6f\x6e\x74\x2e\x62\x6f\x6c\x64\x3a\
+\x20\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x66\x6f\
+\x6e\x74\x2e\x70\x6f\x69\x6e\x74\x53\x69\x7a\x65\x3a\x20\x31\x35\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x65\x78\x74\x3a\x20\x63\
+\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x74\x65\x78\x74\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3a\x20\x54\x65\x78\
+\x74\x2e\x52\x61\x69\x73\x65\x64\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x73\x74\x79\x6c\x65\x43\x6f\x6c\x6f\x72\x3a\x20\x22\x62\x6c\
+\x61\x63\x6b\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x73\
+\x74\x61\x74\x65\x73\x3a\x20\x5b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x53\x74\x61\x74\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x6e\x61\x6d\x65\x3a\x20\x22\x50\x72\x65\x73\
+\x73\x65\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x77\x68\x65\x6e\x3a\x20\x6d\x6f\x75\x73\x65\x52\x65\x67\x69\
+\x6f\x6e\x2e\x70\x72\x65\x73\x73\x65\x64\x20\x3d\x3d\x20\x74\x72\
+\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x50\
+\x72\x6f\x70\x65\x72\x74\x79\x43\x68\x61\x6e\x67\x65\x73\x20\x7b\
+\x20\x74\x61\x72\x67\x65\x74\x3a\x20\x70\x72\x65\x73\x73\x65\x64\
+\x3b\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x31\x20\x7d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x5d\x0a\x7d\
+\x0a\
+\x00\x00\x0f\x4b\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x51\x75\x69\x63\x6b\x20\
+\x6d\x6f\x64\x75\x6c\x65\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\
+\x20\x54\x6f\x6f\x6c\x6b\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\
+\x24\x51\x54\x5f\x42\x45\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\
+\x45\x3a\x4c\x47\x50\x4c\x24\x0a\x2a\x2a\x20\x43\x6f\x6d\x6d\x65\
+\x72\x63\x69\x61\x6c\x20\x4c\x69\x63\x65\x6e\x73\x65\x20\x55\x73\
+\x61\x67\x65\x0a\x2a\x2a\x20\x4c\x69\x63\x65\x6e\x73\x65\x65\x73\
+\x20\x68\x6f\x6c\x64\x69\x6e\x67\x20\x76\x61\x6c\x69\x64\x20\x63\
+\x6f\x6d\x6d\x65\x72\x63\x69\x61\x6c\x20\x51\x74\x20\x6c\x69\x63\
+\x65\x6e\x73\x65\x73\x20\x6d\x61\x79\x20\x75\x73\x65\x20\x74\x68\
+\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x6e\x0a\x2a\x2a\x20\x61\x63\
+\x63\x6f\x72\x64\x61\x6e\x63\x65\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x20\x63\x6f\x6d\x6d\x65\x72\x63\x69\x61\x6c\x20\x6c\x69\x63\
+\x65\x6e\x73\x65\x20\x61\x67\x72\x65\x65\x6d\x65\x6e\x74\x20\x70\
+\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\
+\x0a\x2a\x2a\x20\x53\x6f\x66\x74\x77\x61\x72\x65\x20\x6f\x72\x2c\
+\x20\x61\x6c\x74\x65\x72\x6e\x61\x74\x69\x76\x65\x6c\x79\x2c\x20\
+\x69\x6e\x20\x61\x63\x63\x6f\x72\x64\x61\x6e\x63\x65\x20\x77\x69\
+\x74\x68\x20\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x63\x6f\x6e\
+\x74\x61\x69\x6e\x65\x64\x20\x69\x6e\x0a\x2a\x2a\x20\x61\x20\x77\
+\x72\x69\x74\x74\x65\x6e\x20\x61\x67\x72\x65\x65\x6d\x65\x6e\x74\
+\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x79\x6f\x75\x20\x61\x6e\x64\
+\x20\x44\x69\x67\x69\x61\x2e\x20\x20\x46\x6f\x72\x20\x6c\x69\x63\
+\x65\x6e\x73\x69\x6e\x67\x20\x74\x65\x72\x6d\x73\x20\x61\x6e\x64\
+\x0a\x2a\x2a\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x73\
+\x65\x65\x20\x68\x74\x74\x70\x3a\x2f\x2f\x71\x74\x2e\x64\x69\x67\
+\x69\x61\x2e\x63\x6f\x6d\x2f\x6c\x69\x63\x65\x6e\x73\x69\x6e\x67\
+\x2e\x20\x20\x46\x6f\x72\x20\x66\x75\x72\x74\x68\x65\x72\x20\x69\
+\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x2a\x2a\x20\x75\x73\
+\x65\x20\x74\x68\x65\x20\x63\x6f\x6e\x74\x61\x63\x74\x20\x66\x6f\
+\x72\x6d\x20\x61\x74\x20\x68\x74\x74\x70\x3a\x2f\x2f\x71\x74\x2e\
+\x64\x69\x67\x69\x61\x2e\x63\x6f\x6d\x2f\x63\x6f\x6e\x74\x61\x63\
+\x74\x2d\x75\x73\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x47\x4e\x55\x20\
+\x4c\x65\x73\x73\x65\x72\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\
+\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\x20\x55\x73\
+\x61\x67\x65\x0a\x2a\x2a\x20\x41\x6c\x74\x65\x72\x6e\x61\x74\x69\
+\x76\x65\x6c\x79\x2c\x20\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\
+\x6d\x61\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x75\x6e\x64\x65\
+\x72\x20\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\
+\x68\x65\x20\x47\x4e\x55\x20\x4c\x65\x73\x73\x65\x72\x0a\x2a\x2a\
+\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\
+\x4c\x69\x63\x65\x6e\x73\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\
+\x32\x2e\x31\x20\x61\x73\x20\x70\x75\x62\x6c\x69\x73\x68\x65\x64\
+\x20\x62\x79\x20\x74\x68\x65\x20\x46\x72\x65\x65\x20\x53\x6f\x66\
+\x74\x77\x61\x72\x65\x0a\x2a\x2a\x20\x46\x6f\x75\x6e\x64\x61\x74\
+\x69\x6f\x6e\x20\x61\x6e\x64\x20\x61\x70\x70\x65\x61\x72\x69\x6e\
+\x67\x20\x69\x6e\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x20\x4c\x49\
+\x43\x45\x4e\x53\x45\x2e\x4c\x47\x50\x4c\x20\x69\x6e\x63\x6c\x75\
+\x64\x65\x64\x20\x69\x6e\x20\x74\x68\x65\x0a\x2a\x2a\x20\x70\x61\
+\x63\x6b\x61\x67\x69\x6e\x67\x20\x6f\x66\x20\x74\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x2e\x20\x20\x50\x6c\x65\x61\x73\x65\x20\x72\x65\
+\x76\x69\x65\x77\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\
+\x6e\x67\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x20\x74\
+\x6f\x0a\x2a\x2a\x20\x65\x6e\x73\x75\x72\x65\x20\x74\x68\x65\x20\
+\x47\x4e\x55\x20\x4c\x65\x73\x73\x65\x72\x20\x47\x65\x6e\x65\x72\
+\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\
+\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x32\x2e\x31\x20\x72\x65\
+\x71\x75\x69\x72\x65\x6d\x65\x6e\x74\x73\x0a\x2a\x2a\x20\x77\x69\
+\x6c\x6c\x20\x62\x65\x20\x6d\x65\x74\x3a\x20\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x67\x6e\x75\x2e\x6f\x72\x67\x2f\x6c\x69\
+\x63\x65\x6e\x73\x65\x73\x2f\x6f\x6c\x64\x2d\x6c\x69\x63\x65\x6e\
+\x73\x65\x73\x2f\x6c\x67\x70\x6c\x2d\x32\x2e\x31\x2e\x68\x74\x6d\
+\x6c\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x49\x6e\x20\x61\x64\x64\x69\
+\x74\x69\x6f\x6e\x2c\x20\x61\x73\x20\x61\x20\x73\x70\x65\x63\x69\
+\x61\x6c\x20\x65\x78\x63\x65\x70\x74\x69\x6f\x6e\x2c\x20\x44\x69\
+\x67\x69\x61\x20\x67\x69\x76\x65\x73\x20\x79\x6f\x75\x20\x63\x65\
+\x72\x74\x61\x69\x6e\x20\x61\x64\x64\x69\x74\x69\x6f\x6e\x61\x6c\
+\x0a\x2a\x2a\x20\x72\x69\x67\x68\x74\x73\x2e\x20\x20\x54\x68\x65\
+\x73\x65\x20\x72\x69\x67\x68\x74\x73\x20\x61\x72\x65\x20\x64\x65\
+\x73\x63\x72\x69\x62\x65\x64\x20\x69\x6e\x20\x74\x68\x65\x20\x44\
+\x69\x67\x69\x61\x20\x51\x74\x20\x4c\x47\x50\x4c\x20\x45\x78\x63\
+\x65\x70\x74\x69\x6f\x6e\x0a\x2a\x2a\x20\x76\x65\x72\x73\x69\x6f\
+\x6e\x20\x31\x2e\x31\x2c\x20\x69\x6e\x63\x6c\x75\x64\x65\x64\x20\
+\x69\x6e\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x20\x4c\x47\x50\x4c\
+\x5f\x45\x58\x43\x45\x50\x54\x49\x4f\x4e\x2e\x74\x78\x74\x20\x69\
+\x6e\x20\x74\x68\x69\x73\x20\x70\x61\x63\x6b\x61\x67\x65\x2e\x0a\
+\x2a\x2a\x0a\x2a\x2a\x20\x47\x4e\x55\x20\x47\x65\x6e\x65\x72\x61\
+\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\
+\x20\x55\x73\x61\x67\x65\x0a\x2a\x2a\x20\x41\x6c\x74\x65\x72\x6e\
+\x61\x74\x69\x76\x65\x6c\x79\x2c\x20\x74\x68\x69\x73\x20\x66\x69\
+\x6c\x65\x20\x6d\x61\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x75\
+\x6e\x64\x65\x72\x20\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\
+\x66\x20\x74\x68\x65\x20\x47\x4e\x55\x0a\x2a\x2a\x20\x47\x65\x6e\
+\x65\x72\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\
+\x6e\x73\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x33\x2e\x30\x20\
+\x61\x73\x20\x70\x75\x62\x6c\x69\x73\x68\x65\x64\x20\x62\x79\x20\
+\x74\x68\x65\x20\x46\x72\x65\x65\x20\x53\x6f\x66\x74\x77\x61\x72\
+\x65\x0a\x2a\x2a\x20\x46\x6f\x75\x6e\x64\x61\x74\x69\x6f\x6e\x20\
+\x61\x6e\x64\x20\x61\x70\x70\x65\x61\x72\x69\x6e\x67\x20\x69\x6e\
+\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x20\x4c\x49\x43\x45\x4e\x53\
+\x45\x2e\x47\x50\x4c\x20\x69\x6e\x63\x6c\x75\x64\x65\x64\x20\x69\
+\x6e\x20\x74\x68\x65\x0a\x2a\x2a\x20\x70\x61\x63\x6b\x61\x67\x69\
+\x6e\x67\x20\x6f\x66\x20\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x2e\
+\x20\x20\x50\x6c\x65\x61\x73\x65\x20\x72\x65\x76\x69\x65\x77\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x69\x6e\
+\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x20\x74\x6f\x0a\x2a\x2a\x20\
+\x65\x6e\x73\x75\x72\x65\x20\x74\x68\x65\x20\x47\x4e\x55\x20\x47\
+\x65\x6e\x65\x72\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\
+\x63\x65\x6e\x73\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x33\x2e\
+\x30\x20\x72\x65\x71\x75\x69\x72\x65\x6d\x65\x6e\x74\x73\x20\x77\
+\x69\x6c\x6c\x20\x62\x65\x0a\x2a\x2a\x20\x6d\x65\x74\x3a\x20\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x67\x6e\x75\x2e\x6f\x72\
+\x67\x2f\x63\x6f\x70\x79\x6c\x65\x66\x74\x2f\x67\x70\x6c\x2e\x68\
+\x74\x6d\x6c\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\
+\x54\x5f\x45\x4e\x44\x5f\x4c\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\
+\x2a\x0a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\
+\x0a\x69\x6d\x70\x6f\x72\x74\x20\x51\x74\x51\x75\x69\x63\x6b\x20\
+\x32\x2e\x30\x0a\x0a\x49\x74\x65\x6d\x20\x7b\x0a\x20\x20\x20\x20\
+\x69\x64\x3a\x73\x6c\x69\x64\x65\x72\x0a\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x6d\x69\x6e\x3a\
+\x30\x0a\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\
+\x65\x61\x6c\x20\x6d\x61\x78\x3a\x31\x0a\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x76\x61\x6c\x75\
+\x65\x3a\x20\x6d\x69\x6e\x20\x2b\x20\x28\x6d\x61\x78\x20\x2d\x20\
+\x6d\x69\x6e\x29\x20\x2a\x20\x28\x62\x61\x72\x2e\x78\x20\x2f\x20\
+\x28\x66\x6f\x6f\x2e\x77\x69\x64\x74\x68\x20\x2d\x20\x62\x61\x72\
+\x2e\x77\x69\x64\x74\x68\x29\x29\x0a\x20\x20\x20\x20\x70\x72\x6f\
+\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x69\x6e\x69\x74\x3a\
+\x6d\x69\x6e\x2b\x28\x6d\x61\x78\x2d\x6d\x69\x6e\x29\x2f\x32\x0a\
+\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\
+\x69\x6e\x67\x20\x6e\x61\x6d\x65\x3a\x22\x53\x6c\x69\x64\x65\x72\
+\x22\x0a\x0a\x20\x20\x20\x20\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\
+\x2e\x6f\x6e\x43\x6f\x6d\x70\x6c\x65\x74\x65\x64\x3a\x20\x73\x65\
+\x74\x56\x61\x6c\x75\x65\x28\x69\x6e\x69\x74\x29\x0a\x20\x20\x20\
+\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x73\x65\x74\x56\x61\x6c\
+\x75\x65\x28\x76\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x69\
+\x66\x20\x28\x6d\x69\x6e\x20\x3c\x20\x6d\x61\x78\x29\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x62\x61\x72\x2e\x78\x20\x3d\x20\
+\x76\x2f\x28\x6d\x61\x78\x20\x2d\x20\x6d\x69\x6e\x29\x20\x2a\x20\
+\x28\x66\x6f\x6f\x2e\x77\x69\x64\x74\x68\x20\x2d\x20\x62\x61\x72\
+\x2e\x77\x69\x64\x74\x68\x29\x3b\x0a\x20\x20\x20\x20\x7d\x0a\x20\
+\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x73\x6c\x69\x64\x65\x72\
+\x4e\x61\x6d\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\
+\x68\x6f\x72\x73\x2e\x6c\x65\x66\x74\x3a\x70\x61\x72\x65\x6e\x74\
+\x2e\x6c\x65\x66\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\
+\x69\x67\x68\x74\x3a\x20\x63\x68\x69\x6c\x64\x72\x65\x6e\x52\x65\
+\x63\x74\x2e\x68\x65\x69\x67\x68\x74\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x77\x69\x64\x74\x68\x3a\x63\x68\x69\x6c\x64\x72\x65\x6e\
+\x52\x65\x63\x74\x2e\x77\x69\x64\x74\x68\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x76\x65\x72\x74\x69\
+\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x70\x61\x72\x65\x6e\x74\
+\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\x65\x78\x74\x3a\x73\
+\x6c\x69\x64\x65\x72\x2e\x6e\x61\x6d\x65\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x66\x6f\x6e\x74\x2e\x70\x6f\x69\x6e\x74\
+\x53\x69\x7a\x65\x3a\x31\x32\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x49\x74\x65\
+\x6d\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\
+\x66\x6f\x6f\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\
+\x68\x74\x3a\x20\x36\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\
+\x64\x74\x68\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x77\x69\x64\x74\
+\x68\x20\x2d\x20\x34\x20\x2d\x20\x73\x6c\x69\x64\x65\x72\x4e\x61\
+\x6d\x65\x2e\x77\x69\x64\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x76\x65\x72\x74\x69\x63\x61\
+\x6c\x43\x65\x6e\x74\x65\x72\x3a\x70\x61\x72\x65\x6e\x74\x2e\x76\
+\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x6c\x65\
+\x66\x74\x3a\x73\x6c\x69\x64\x65\x72\x4e\x61\x6d\x65\x2e\x72\x69\
+\x67\x68\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\
+\x6f\x72\x73\x2e\x6c\x65\x66\x74\x4d\x61\x72\x67\x69\x6e\x3a\x35\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\
+\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\
+\x68\x65\x69\x67\x68\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x6c\x65\x66\x74\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x2e\x6c\x65\x66\x74\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\
+\x2e\x72\x69\x67\x68\x74\x3a\x20\x62\x61\x72\x2e\x68\x6f\x72\x69\
+\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x22\x62\x6c\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x72\x61\x64\x69\x75\x73\x3a\x20\x33\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x52\
+\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x70\
+\x61\x72\x65\x6e\x74\x2e\x68\x65\x69\x67\x68\x74\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\
+\x2e\x6c\x65\x66\x74\x3a\x20\x62\x61\x72\x2e\x68\x6f\x72\x69\x7a\
+\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\
+\x72\x69\x67\x68\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x72\x69\
+\x67\x68\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x67\x72\x61\x79\x22\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x61\x64\x69\x75\x73\
+\x3a\x20\x33\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\
+\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\
+\x6f\x6c\x6f\x72\x3a\x20\x22\x74\x72\x61\x6e\x73\x70\x61\x72\x65\
+\x6e\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x72\x61\x64\x69\x75\x73\x3a\x20\x33\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2e\x77\x69\x64\
+\x74\x68\x3a\x20\x32\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x22\x62\x6c\x61\x63\x6b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x52\x65\x63\x74\x61\
+\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x69\x64\x3a\x20\x62\x61\x72\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x79\x3a\x20\x2d\x37\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\
+\x32\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x68\
+\x65\x69\x67\x68\x74\x3a\x20\x32\x30\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x72\x61\x64\x69\x75\x73\x3a\x20\x31\x35\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\
+\x6f\x72\x3a\x20\x22\x77\x68\x69\x74\x65\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2e\x77\
+\x69\x64\x74\x68\x3a\x20\x32\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\x6f\x72\
+\x3a\x20\x22\x62\x6c\x61\x63\x6b\x22\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\x20\
+\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\
+\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x64\x72\x61\x67\x2e\x74\x61\x72\x67\
+\x65\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x72\x61\x67\x2e\
+\x61\x78\x69\x73\x3a\x20\x44\x72\x61\x67\x2e\x58\x41\x78\x69\x73\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x64\x72\x61\x67\x2e\x6d\x69\x6e\x69\x6d\x75\x6d\x58\x3a\x20\
+\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x64\x72\x61\x67\x2e\x6d\x61\x78\x69\x6d\x75\x6d\x58\x3a\
+\x20\x66\x6f\x6f\x2e\x77\x69\x64\x74\x68\x20\x2d\x20\x70\x61\x72\
+\x65\x6e\x74\x2e\x77\x69\x64\x74\x68\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x0b\x0a\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x49\x74\
+\x65\x6d\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\x3a\x20\x74\x69\x74\
+\x6c\x65\x42\x61\x72\x0a\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\
+\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\x74\x69\x74\x6c\x65\x3a\
+\x20\x22\x22\x0a\x0a\x20\x20\x20\x20\x42\x6f\x72\x64\x65\x72\x49\
+\x6d\x61\x67\x65\x20\x7b\x20\x73\x6f\x75\x72\x63\x65\x3a\x20\x22\
+\x69\x6d\x61\x67\x65\x73\x2f\x74\x69\x74\x6c\x65\x62\x61\x72\x2e\
+\x73\x63\x69\x22\x3b\x20\x77\x69\x64\x74\x68\x3a\x20\x70\x61\x72\
+\x65\x6e\x74\x2e\x77\x69\x64\x74\x68\x3b\x20\x68\x65\x69\x67\x68\
+\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x68\x65\x69\x67\x68\x74\
+\x20\x2b\x20\x31\x34\x3b\x20\x79\x3a\x20\x2d\x37\x20\x7d\x0a\x0a\
+\x20\x20\x20\x20\x49\x6d\x61\x67\x65\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x69\x64\x3a\x20\x71\x75\x69\x74\x42\x75\x74\x74\
+\x6f\x6e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\
+\x72\x73\x2e\x6c\x65\x66\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\
+\x6c\x65\x66\x74\x2f\x2f\x3b\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\
+\x6c\x65\x66\x74\x4d\x61\x72\x67\x69\x6e\x3a\x20\x30\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x76\x65\
+\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\
+\x74\x65\x72\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x75\x72\
+\x63\x65\x3a\x20\x22\x69\x6d\x61\x67\x65\x73\x2f\x71\x75\x69\x74\
+\x2e\x70\x6e\x67\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x4d\x6f\
+\x75\x73\x65\x41\x72\x65\x61\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\
+\x6c\x6c\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x43\x6c\x69\x63\x6b\x65\x64\
+\x3a\x20\x51\x74\x2e\x71\x75\x69\x74\x28\x29\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\
+\x20\x54\x65\x78\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3a\x20\x63\x61\x74\x65\x67\x6f\x72\x79\x54\x65\x78\x74\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\
+\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6c\
+\x65\x66\x74\x3a\x20\x71\x75\x69\x74\x42\x75\x74\x74\x6f\x6e\x2e\
+\x72\x69\x67\x68\x74\x3b\x20\x72\x69\x67\x68\x74\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x72\x69\x67\x68\x74\x3b\x20\x2f\x2f\x6c\x65\
+\x66\x74\x4d\x61\x72\x67\x69\x6e\x3a\x20\x31\x30\x3b\x20\x72\x69\
+\x67\x68\x74\x4d\x61\x72\x67\x69\x6e\x3a\x20\x31\x30\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x76\x65\x72\x74\x69\x63\
+\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\x65\x6e\x74\
+\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x65\x6c\x69\x64\x65\x3a\x20\x54\x65\x78\x74\x2e\x45\x6c\
+\x69\x64\x65\x4c\x65\x66\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x74\x65\x78\x74\x3a\x20\x74\x69\x74\x6c\x65\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x66\x6f\x6e\x74\x2e\x62\x6f\x6c\x64\x3a\x20\x74\
+\x72\x75\x65\x3b\x20\x66\x6f\x6e\x74\x2e\x70\x6f\x69\x6e\x74\x53\
+\x69\x7a\x65\x3a\x20\x32\x30\x3b\x20\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x22\x57\x68\x69\x74\x65\x22\x3b\x20\x73\x74\x79\x6c\x65\x3a\x20\
+\x54\x65\x78\x74\x2e\x52\x61\x69\x73\x65\x64\x3b\x20\x73\x74\x79\
+\x6c\x65\x43\x6f\x6c\x6f\x72\x3a\x20\x22\x42\x6c\x61\x63\x6b\x22\
+\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x5b\xdf\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\xfa\x00\x00\x00\xfa\x08\x06\x00\x00\x00\x88\xec\x5a\x3d\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x5b\x81\x49\x44\x41\x54\x78\xda\xec\
+\xbd\x09\xb8\x1c\x57\x75\x27\x7e\x4e\xef\x6f\x5f\xb4\xcb\xda\x2c\
+\x4b\xf2\xbe\xaf\x60\xc0\xd8\xc6\x66\x0b\x90\x00\x21\x26\x99\x24\
+\x40\x18\x26\xdf\x4c\x20\x93\x49\xbe\xcc\x7c\x59\x26\x5f\x32\x90\
+\xc9\x42\x02\x61\x48\x32\xff\x10\xf8\x87\x40\x02\x81\xb0\x24\x61\
+\x09\x8b\x01\x2f\xd8\x80\xc1\xbb\x25\x59\xfb\xae\x27\xe9\xe9\xe9\
+\xe9\xed\xbd\x9e\xb9\xb7\xaa\x5f\x77\xd5\xad\x73\x6e\xd5\x7b\xaf\
+\x5a\x96\xcd\xbd\x9f\x4a\xdd\xaf\xbb\xba\xfa\xf6\xad\x7b\xb6\xdf\
+\xd9\x90\x88\xc0\x0d\x37\xdc\x78\x61\x8f\x8c\x5b\x02\x37\xdc\x70\
+\x84\xee\x86\x1b\x6e\x38\x42\x77\xc3\x0d\x37\x1c\xa1\xbb\xe1\x86\
+\x1b\x8e\xd0\xdd\x70\xc3\x0d\x47\xe8\x6e\xb8\xe1\x46\x4a\x23\x17\
+\x77\x02\xfe\xd2\x56\xcb\x9b\x08\x10\xf4\xce\x21\x73\x0e\x05\xde\
+\xf3\x5c\x79\xd8\x7c\xee\x3d\xcd\xab\xc7\x82\x7a\x96\x55\xcf\x97\
+\xa9\xc7\x3e\x75\x0c\x43\x8d\x7a\xa1\x41\x83\x90\xcb\x0c\xac\x1c\
+\x2e\xf4\xae\x18\xc8\xaf\xdc\xb6\xae\xd4\xb3\x75\x5d\x69\x79\x6f\
+\x77\xa6\xaf\x41\x30\xa4\x2e\xd0\xf0\x27\x00\x33\xea\x38\xa1\xfe\
+\xde\xa7\x1e\xf7\xfa\x07\xea\xc7\x53\xea\x98\x0b\x4f\x04\x17\xbf\
+\x52\x41\x37\x24\x62\xe8\xf5\xe9\x39\x82\xee\x12\xaa\x97\x31\xf0\
+\x9b\xc9\x3b\xaf\x5a\x6d\x40\x3e\xd7\xfc\xcd\x81\xef\xd7\xa7\xce\
+\xce\x35\xa0\x58\xc8\x84\x2e\xe7\x7d\x4f\xeb\x3a\x14\xf8\x08\x06\
+\x7e\x83\xf0\x5b\x5a\xe7\x23\x44\x6e\x4c\xe8\x5a\x81\xb9\x50\xe0\
+\x06\xa1\x7c\x33\x1b\x6a\xb5\xa7\x66\xea\x30\xd0\x97\x05\x0a\x7e\
+\xa6\x39\xdf\x4a\xa5\x01\xd9\x2c\x7a\x47\x70\x2e\xd9\x0c\xc2\xc8\
+\xe9\x1a\x14\xf2\x08\x43\xfd\x59\x68\xd4\x29\xf0\x13\x90\x59\xe3\
+\xf9\xb5\xa2\xf6\xf5\x83\xbf\x07\x31\xbc\x46\xc1\xb5\x50\xaf\xff\
+\xde\x4b\xbf\xe5\xa8\x7a\x31\x84\x9e\xd2\x28\xa9\x63\x9b\x3a\x6e\
+\x52\xc7\x65\xea\xd8\xa0\x8e\x15\xea\x1e\x0d\xaa\xc7\x21\x75\x9f\
+\x7a\xd5\x63\x41\x11\x78\x5e\x3f\x0e\x0f\xe5\xe1\x92\x8d\xdd\x70\
+\xd9\x86\x2e\x58\x39\x94\x83\xee\x62\x16\x32\x19\x82\x5a\x5d\x6d\
+\x38\x62\x18\x09\x86\x37\x9d\x7a\x9c\x52\x7f\x8e\xa8\x3f\x76\xaa\
+\x37\x76\x37\x8f\x1d\xea\xd8\xa3\x8e\x71\x75\x4c\xb9\x5b\xef\x86\
+\x23\xf4\xf4\xc6\xcd\x8a\xe0\xde\xa4\x88\xf1\x55\xea\x50\x04\x8e\
+\xd9\x90\x94\x9f\x1f\x9a\xcb\x2b\x89\xb1\x7a\x55\x09\x5e\x7c\x45\
+\x2f\x5c\xaa\x08\xbc\xaf\x3b\x03\x75\xf5\x5a\x5d\xbd\x57\x57\x04\
+\x5c\xab\x92\x21\x01\x30\x2a\x78\x10\xe7\x25\xa9\x62\x1c\xb4\x45\
+\xfd\xb1\xc5\x90\x7e\x5a\xc2\x1f\x69\x12\xbc\xd6\x00\x34\x23\xd8\
+\xde\xd4\x04\xc6\xd4\x31\xe1\xb6\x84\x1b\x8e\xd0\x93\x8f\xd7\xab\
+\xe3\x57\x15\x8d\xdd\x2e\xea\xcb\xf3\xda\x98\x52\x6d\x7b\xfa\xf2\
+\x70\xc7\x75\x03\x70\xed\xb6\x6e\xe8\x56\xaa\x6c\x45\x11\xf7\x5c\
+\x85\xc2\xaa\x2c\x1a\x6a\xed\x3c\xc7\x08\xa9\x80\x9c\x4a\x8b\xc1\
+\xc7\x92\x4f\xfc\xde\x11\xbc\x4e\x59\xbd\x7f\x48\x3d\x39\xa8\x9e\
+\x1f\x50\xcf\x35\xf1\x3f\xa5\x0e\xfd\xda\xc9\xa6\x16\xe0\x86\x1b\
+\x8e\xd0\x9b\xe3\x0a\x75\xbc\x57\xd1\xdb\x1b\x58\x53\x2f\x68\x6e\
+\x69\x1d\xbc\xa6\xf4\xf8\x8b\x7a\xe1\xee\x9b\x07\x61\xf5\x70\x1e\
+\x2a\x8a\xe8\xe7\xd4\x11\x25\xd6\xa0\xed\x16\xbc\xd0\xfc\xc5\x82\
+\x7f\x5b\x0d\x6d\x61\x42\x50\x54\xc7\xd6\xe6\x11\x7c\xbd\xd2\x24\
+\x76\x7d\x1c\x56\xc7\xd3\xea\x78\xa6\xf9\xfc\x58\x53\x0b\x00\x17\
+\x44\xec\xc6\x8f\x13\xa1\xff\x8a\xda\xf1\xef\x55\x8f\x03\x21\x2c\
+\x88\xc3\x77\x1a\x3e\x21\xbd\xf4\xa6\x01\xb8\xeb\xda\x7e\x65\x7f\
+\x2b\x9d\xba\xdc\x88\x00\x56\x6d\xf0\xc5\x42\xc3\x68\x12\x7b\x10\
+\x94\x22\x41\xba\x07\x40\x28\x0c\x7e\xce\xbc\x26\x16\x5a\x1a\x40\
+\x48\x6b\xf0\x18\xc0\x51\x75\x1c\x57\x1f\xdd\x95\xcb\xe2\xb3\x4d\
+\x0c\xe0\x70\x93\x29\x8c\xba\xad\xe5\xc6\x0b\x8d\xd0\xbb\xd5\xf1\
+\x21\xb5\xe1\x7f\xa9\x45\x07\x36\x11\xa7\x88\x5c\x11\x06\xfc\xc4\
+\xad\xcb\xe0\xe6\xcb\x7a\xa0\x5a\xf3\x41\x36\x9e\x90\xe7\x25\xb9\
+\x49\xe9\x28\x13\x30\xc4\xa9\xf2\xe6\xc7\xd0\x50\x08\x9a\x44\x4e\
+\x68\x30\x8b\x90\x09\xa0\x19\xc0\x85\xfe\x81\x2f\xee\x2a\xb6\xf8\
+\x46\x55\x1d\x23\xea\xaf\x91\xa6\xfd\xff\x74\xd3\xfe\xd7\xc4\xbf\
+\xdf\x31\x00\x37\x9e\xaf\x84\xae\x89\xfc\x53\x6a\xef\xbf\x3e\xec\
+\x46\x03\xd6\xc3\xa3\x01\x37\x4d\x40\xaf\x7f\xe9\x72\x8f\xc8\xb5\
+\x14\xa7\x96\xdd\x4d\x0c\xd1\x62\xf8\x31\x62\xa3\x1b\x84\xd8\x42\
+\xdd\x21\xaa\x1d\x98\xae\xaa\xe0\x75\x90\xe1\x00\x08\xcc\x0f\xe1\
+\x19\x07\xb5\x5c\x40\xa0\xbd\x06\xeb\xd5\xd3\xf5\xea\xef\x1b\xbd\
+\x05\xf6\x5d\x6b\x8a\x01\xe0\xa8\xcf\x04\x3c\xc9\xff\x4c\x93\x01\
+\x1c\x80\x36\x10\xd8\x70\xdb\xd1\x8d\xf3\x91\xd0\xbb\x5a\x44\x6e\
+\xa3\xcf\x20\x8d\xd4\x09\xee\xbc\x79\x18\x6e\xbc\xa4\xdb\x27\xf2\
+\xb0\x9a\x6c\xa8\x03\x98\xd0\xce\x0e\x7c\x6e\x9e\x78\x91\x04\x29\
+\x4f\x82\xfd\x6f\x10\x39\x91\xa1\x19\x00\xef\xf7\x9d\x07\x03\x25\
+\x2c\x42\x3d\xf1\x3f\x82\x9a\x01\xac\x51\x7f\xaf\x51\x2f\x5d\xab\
+\x5f\xd4\x5f\x51\x2c\x60\x4d\x3d\x3b\xab\xde\x3f\xda\xd4\x00\xf4\
+\xa1\x3d\x02\xbb\x9a\x0c\x60\xa2\x69\x26\xb8\xe1\x46\xa7\x09\x5d\
+\x54\x7d\xff\x52\x6d\xda\xd7\x47\xe8\x0d\x18\x69\xee\x29\xb5\x04\
+\x57\x5d\xdc\x0b\x77\x5c\xdb\x07\x15\xa5\xae\x13\xfb\x1d\x68\x21\
+\x68\x62\xec\x75\x12\x08\x10\x85\xf7\x51\xf8\x4c\x50\x63\x30\x83\
+\x4e\x6c\x20\x1f\x07\x10\x52\x20\xa8\xc3\x98\x8b\x81\x39\x20\xa2\
+\x5a\x7f\xd2\x81\x42\xfa\xb8\xaa\xfd\x3e\x69\x63\x66\x52\x9d\xa3\
+\x55\xfe\xdd\x01\xe2\xdf\xde\x34\x01\x14\x73\x08\x06\x03\xb9\xe1\
+\x46\x67\x24\xfa\xbb\xd5\xf1\xf6\xd0\x1e\xb6\xd9\xe5\x4a\x92\x0f\
+\x2d\x2b\xc0\x6b\x5f\x34\x04\x9a\xc4\x5b\x81\x55\x56\x55\xdc\x24\
+\x76\xc3\xee\x0e\xba\xdd\x22\x00\x9b\xf0\x7e\x90\x18\x5b\xdf\x8d\
+\x8c\xc2\x80\xf2\xd7\xb7\xa6\x68\x9a\x1c\x10\x65\x4a\x12\xc3\x44\
+\xe3\x37\x98\x6a\x01\x42\xd6\x0f\x26\x42\x75\xd0\x55\xc6\x24\x26\
+\x9a\x2a\xff\xbe\xe6\xe3\x8e\x26\x03\x98\x07\x01\x67\xdc\xb6\x76\
+\x23\x0d\x42\xbf\x5a\x1d\x7f\x64\x3d\x83\xd1\x86\xef\xbe\x61\x10\
+\xfa\x7b\x32\x50\xb6\xb9\xcf\x42\x2a\xb3\xe0\x0a\x6b\x05\xc5\x30\
+\x5f\x18\x04\xe1\x10\x65\xa9\x8f\x02\xd3\x88\x08\x6c\x49\xc3\xa0\
+\xa8\x96\x10\x41\xee\x8d\xcf\x84\x42\x5b\x9b\xc4\x1e\xbc\x06\x05\
+\xcd\x0f\x4e\x3d\x6a\x5d\xa7\x5f\x9d\x73\x55\x4b\x03\x68\x01\x87\
+\x34\xad\x4e\xd9\x1f\x60\x02\xcf\x36\xc1\x40\x6d\x16\x9c\x00\x17\
+\x0d\xe8\x08\x7d\x01\x43\x27\xc1\xfc\xa9\xda\x50\xdd\xac\xfb\x9a\
+\x73\xa5\x55\x1a\x70\xc9\x45\xbd\x70\xe5\xe6\x2e\xcf\x4f\x1e\x26\
+\xcc\x20\x21\x92\x21\xb4\xd1\x2e\xd1\x43\xcf\x63\x00\x33\xd6\xd5\
+\x16\x20\x22\xe4\x08\xdb\x62\xc2\xd8\xce\xc3\x00\xd1\x06\x09\x3c\
+\x18\xf0\xc3\x79\x05\xcc\xd7\xd8\xbc\x01\x41\x53\xf0\x5f\xea\x51\
+\x4f\x74\x1c\xc3\x15\x06\xb7\xd1\x04\x7e\x58\x3d\x3d\xd2\x24\xfe\
+\x67\x9a\xa6\xc0\x91\x26\x13\x98\x74\x64\xe0\x08\xdd\xdc\x70\x3f\
+\xa5\xf6\xd0\x5d\x40\x82\x04\x37\xe9\x4d\x6d\xcc\x4c\x3e\x03\x2f\
+\xb9\xb2\xaf\x69\x9a\x9a\x52\xd6\x04\xca\x24\x95\x00\x2c\x51\x71\
+\x14\x66\x0c\xa6\x0d\x0f\xc0\x73\x22\xe2\xa4\x27\x58\x98\x89\x04\
+\x0a\x32\x89\x26\x11\x26\x45\xc6\x5a\x92\xc0\xcc\x24\x24\x33\x60\
+\x96\x50\xf0\x5a\x28\x98\x13\xa1\x75\xee\x55\x7f\x5e\xaa\x5e\x53\
+\x07\xdd\xd5\xd6\x60\x94\x06\xe0\x07\xfd\x1c\x6b\xaa\xff\x4f\x35\
+\xf1\x80\xe3\x4d\x33\xc0\x85\x03\xff\x58\x11\x7a\x7b\xaf\x69\xdf\
+\xf1\xff\x88\x80\x6f\x36\x57\xb5\xb2\xcd\x37\x6f\xec\x86\x4d\xab\
+\x0b\x50\xab\x19\xe2\x1e\xe3\xb2\xc9\x82\xea\xac\x00\xb8\x21\x19\
+\x34\x2a\x80\x63\x1c\x81\x4a\x28\xbc\x99\x3d\x16\x61\x76\xa6\x16\
+\x81\x0c\xa1\x05\xfe\x96\x00\x4d\xd1\xbe\x87\xa8\xaa\x24\x9a\x34\
+\x9c\x46\xc0\x68\x2c\xac\x99\x42\x4a\x03\x80\xad\xea\xb9\x8e\x06\
+\xbc\x2d\x70\xfe\x8c\x3a\xf5\x84\x7a\x7a\xac\x69\xfb\x07\x5d\x81\
+\x8e\x01\xfc\x18\x48\xf4\x3b\xd4\x06\xb8\xc1\x26\x74\xa3\x66\x25\
+\xc2\x35\xdb\x7a\xbc\x00\x99\x5a\x83\x62\xd0\x2d\x26\x35\x13\x39\
+\xb5\xc2\x40\xc3\x51\x92\xc4\x16\xe2\x8c\x20\xe2\x82\x6d\x8f\x36\
+\x29\xce\xa8\xf3\xc4\xd8\xf7\x44\x76\xf0\x22\x62\x72\x18\x04\x19\
+\xf2\xff\x53\x0c\x37\x66\x6c\x7b\x14\x18\x4d\x14\x5d\x9c\x5f\xa3\
+\x6e\xf5\xf7\x85\xfe\x81\xb7\xb6\x6c\xb6\x0c\xcc\xf4\x76\x67\xc7\
+\xd4\x74\x8e\x36\x89\x7f\x47\x13\x0b\x98\x4f\x10\x9a\x06\x17\x0d\
+\xfc\x82\x90\xe8\x6f\x8f\xec\x11\x69\x0f\x37\x63\xd9\x7b\xfb\xf2\
+\xb0\x75\x6d\xd1\x4b\x52\x09\x7d\x50\x02\xbf\x4c\xb4\x3a\xa2\x79\
+\x93\x00\xa4\xc5\xd0\xb9\x4d\xe3\x8e\x7c\xd9\xfc\x75\x85\x88\x3c\
+\xc9\x53\xc0\x05\xe9\xb4\xe8\x4d\x40\xf8\x59\x06\x85\x61\x5b\x9f\
+\x63\x18\x68\x73\xfb\x49\x6e\x43\x80\x50\xa0\x10\x19\x58\x40\x50\
+\x23\xe1\x31\x88\x6e\x45\xec\x3a\x40\x6a\x9d\x5a\x9b\x9b\xfd\x39\
+\x78\xe7\x6b\x37\xdf\x78\x36\x03\x07\xd5\xc7\x76\x35\x71\x80\x3d\
+\xcd\x47\xad\x05\x4c\x92\x9f\x80\xe8\xc6\xf3\x00\x8c\x5b\xe9\x49\
+\x74\x41\x68\x48\x6a\xfb\x96\xb5\x25\xe8\xeb\xce\x7a\x7e\xf3\x30\
+\x31\x4b\x94\xcc\x81\x68\x01\x62\xe6\xd4\x5d\xe4\xd4\xf6\xf9\xcf\
+\x81\x50\x88\x21\xe6\xb5\x79\x22\x20\x86\xc9\xa0\xf0\x39\x8c\xc3\
+\x00\x28\xe6\xbb\x63\x98\x5e\x28\x86\x80\x84\xf5\xe3\x70\x0d\x13\
+\x20\xc4\x30\xf0\x19\x99\xbf\xe9\x01\x31\xb1\x80\x08\x00\x5a\x52\
+\x8f\xab\xb3\x59\x5c\xad\x5e\xba\x39\x60\xb2\xe8\x70\xe0\xb3\x8a\
+\xdf\xef\xe9\xed\xce\xec\x51\x8c\x60\xbf\xfa\xe8\x3c\x18\xa8\xb5\
+\x82\xf1\xe6\x39\x6e\x9c\x47\x84\x7e\x9b\xba\x89\xcb\x6d\xc0\x75\
+\x54\xb3\x46\xd8\xb0\xba\xe8\x25\xac\x44\x24\xd7\x7c\x60\x8a\x75\
+\x9f\x0a\x15\x5d\x80\x01\xa1\xac\xda\x01\x86\xcf\x0b\x6d\x68\xee\
+\xcb\x51\x30\x19\xb8\xef\xa7\xb0\x2d\x2e\xa1\xf1\x68\x86\xe2\x26\
+\x8c\xfe\x0b\xf9\xd9\x6d\xae\x0d\x10\xc0\x3f\x8c\xc1\x04\xc8\xb2\
+\x8e\x1c\xb8\x19\x64\x1a\x18\x66\xd0\x18\x60\xe2\xfe\xb5\x74\x34\
+\xe0\x72\x75\xea\xf2\x9e\xae\xcc\x2d\x3e\xff\xf4\xde\xd7\xd9\x4b\
+\x67\xd4\x1a\xcc\xab\xfd\x7b\x9b\xd2\x7f\x67\x13\x08\xd4\x95\x81\
+\x5c\x34\xe0\x73\x60\xa3\xeb\x5b\x77\x37\xab\xfa\x4a\x76\xba\x46\
+\xdb\x0b\x19\xd8\xb8\xa2\x00\xb5\x3a\xe3\x87\xb3\xda\xc1\x12\x91\
+\x31\x3e\xe9\x50\x96\x1a\xda\x55\x62\x04\xc6\xb6\x0f\x20\xf7\xa2\
+\xcd\x0a\xd1\x39\x47\x6c\x73\xc1\x6f\xcf\xa9\xf9\xb6\x52\x48\x12\
+\xf7\x34\x81\x3e\x76\xae\x86\x09\xd1\xfa\x5d\x12\x16\x60\x82\x93\
+\xe6\x14\x24\xcf\x83\x14\xa3\x20\xdb\x4d\x6d\xb5\xdd\xd3\x4a\x32\
+\xcd\xb2\x61\xea\xa0\x1b\x8d\xb5\x3c\xa3\xde\xdf\xdf\x04\xfd\xb4\
+\x19\xf0\x54\xf3\x51\xd7\x04\xd0\x79\x02\x2e\x1a\xb0\x83\x12\x7d\
+\xad\x5a\xfc\x2b\x01\x2d\x04\xce\x84\xab\xf7\xf7\xe4\xa0\xbf\x37\
+\xeb\xd5\x1a\x8b\x4a\x23\x4b\x90\x4a\x9c\xb1\x1d\xdc\x58\x88\x36\
+\x24\x90\xb9\x54\x82\x0d\xce\xfe\x28\x06\xd0\x33\xed\xe9\x90\x7a\
+\x2f\x30\x87\xa0\xfa\x1f\x22\x44\x81\xc1\x20\x46\xa5\x71\x44\x7d\
+\x5f\x48\xec\x3e\xd8\xb5\x02\xf3\x9e\x44\x80\xc0\x84\xda\x0f\x5a\
+\x98\x74\xc4\xa3\x10\x62\x2a\x43\xea\xb9\x0e\x9f\xbc\xce\xf8\x2a\
+\xa5\x01\x78\x29\xc0\x87\x9b\x20\xa0\x0e\x04\x9a\x77\x05\x1e\x77\
+\x0c\x20\x1d\x42\xdf\x08\xba\xde\x1b\x25\x00\xec\xe6\x1f\x95\x61\
+\xb6\xbc\x2f\x07\x85\x1c\x36\xf7\x18\x13\x59\x13\x1b\x9c\x42\x56\
+\xac\x2a\xba\x31\xd1\x2e\xb1\xa4\x8d\x66\x55\xa1\x2d\xf3\x33\x8b\
+\x2d\x12\x73\x1d\x1b\x33\x43\xc9\x9e\x97\x18\x4d\x12\xe4\x1c\x8d\
+\xc4\x1e\x53\x6d\xe7\x08\xd0\xb0\xc9\x43\x44\xcc\x31\x04\x14\xb4\
+\xa0\x38\xf3\xc3\xd0\xe0\x5a\x4c\x8f\x04\xa6\x17\x62\x76\x43\xea\
+\x89\x3a\xbc\x68\xc0\xd7\x06\xd6\x74\xac\x29\xe9\x8f\x34\x6d\xff\
+\xaf\x35\x0f\x37\x16\x41\xe8\x3a\xef\x7a\xd0\x6a\x93\x33\x4c\xbb\
+\xaf\x27\xe3\x55\x3f\xad\xd4\x1a\x16\xa2\x84\x64\xa0\x52\x24\x8b\
+\x4c\x48\x66\x31\xcb\x4a\x11\x30\x2a\x26\x42\x62\x37\x5c\x44\x1a\
+\x52\xd8\xd6\x0f\xfa\xb7\x51\x08\xce\x11\x89\x1d\x19\x2e\x29\xe4\
+\xf8\x06\xaf\x81\x5c\xf1\x0c\xb4\xfc\x06\x48\x08\xfc\x41\x0c\x33\
+\x0c\xda\xfe\x82\x66\x11\x44\xf7\xe7\xf3\xf9\xa5\x0c\x40\x44\x01\
+\xc8\xc4\x18\x2d\x22\x34\x86\xd5\xfb\xea\x20\x5d\x8f\xf0\x6e\x75\
+\xcd\x55\x8e\xd0\xf9\x11\x5f\xd7\x9d\x60\x53\x6b\xb5\x2d\x39\x1c\
+\xa6\x90\x28\x15\x33\xcd\xd2\xbf\x86\xbb\x48\x44\xf4\x38\x0e\x82\
+\xf2\x97\x62\x50\x0a\x19\xc4\x18\x92\x08\x10\x6f\x03\x9b\xd7\x27\
+\x29\x10\x05\xf9\x69\x8b\x6a\x2d\x63\x1a\x10\x19\xd2\x13\xc3\x52\
+\x2e\xa2\x21\xd8\xfc\xf9\xe6\x3a\x30\xd7\xb1\x62\x1e\xc1\x9f\x1e\
+\xa7\xe1\x70\x38\x8b\x69\xbb\x07\x19\x07\x59\xa6\x40\x16\xcd\xd0\
+\x06\x36\x4a\x9b\x2e\x54\xfc\xd3\x8d\x45\x11\x3a\xc0\x72\xab\xe9\
+\xcc\xd1\x8b\xda\x04\x5d\x85\x60\xfd\x6f\x13\x05\xa7\xf0\xa6\x37\
+\x37\x5b\x88\x18\x88\x91\xee\x08\x32\xe3\x11\x40\x23\x8e\x10\xc8\
+\x90\x9a\x04\x82\x84\x04\x0b\x61\xa1\x45\x4a\x43\xf4\xf7\x07\x5d\
+\x74\xa1\xfa\xe8\xc0\x30\xa8\xf9\x79\x0a\x4c\x12\x0d\x75\x9a\xab\
+\x8b\x2e\xa2\xa7\x18\x50\xf5\x83\xef\x07\xd6\xbd\x75\x1f\x24\x60\
+\x8e\x7b\x44\xde\xf6\xb7\x12\x2a\x77\xad\xe0\x77\x53\xe0\xf7\xc5\
+\x5d\xc7\x8d\xc5\x12\xfa\xa0\xc8\x99\x45\xef\x13\x41\x2e\x83\xd1\
+\x30\x50\x4e\x7a\x20\x63\x9f\x45\xa4\x28\xca\x80\x80\x88\xe7\x71\
+\xf1\xe7\x20\x13\x0a\xa2\x10\xcd\x86\xbc\xf6\x60\x53\x6d\x09\xe3\
+\x25\x69\x44\x03\x01\xc6\xf5\x67\xea\xc9\x18\x05\xd8\x4c\x26\xc2\
+\x9d\x2b\xad\x23\x49\xf8\x43\xf0\x23\x68\x98\x40\x68\x30\x00\x86\
+\xc9\x91\x61\x36\x20\x0a\x73\x32\x88\xd9\xac\xff\x17\xfc\x5c\x64\
+\xb9\x31\x6a\x9e\x39\xa2\x5f\x12\xa1\x37\x22\x7b\x2e\xd6\xf4\x43\
+\x2f\xef\xbc\x2d\x71\x91\x51\xdd\xb8\x0d\x00\x16\xe4\xd6\xdc\x9c\
+\x31\xaa\xa6\x14\xe2\x6a\x6a\x05\x60\x91\x94\x24\xf8\xfa\x51\x62\
+\x3c\x41\x20\x2c\xce\x35\x21\x04\x07\xb5\xa4\xb3\xa1\x45\x20\x84\
+\xb5\x00\x34\xba\x97\x00\xa3\x15\x01\x47\x04\x46\xe0\x0c\x31\x8c\
+\x0b\x25\xc6\x10\x30\x25\x22\xda\x54\x92\x28\x2a\xd3\x34\x42\x3b\
+\x90\xc9\xda\x49\xc8\x83\x8f\x6e\x2c\x99\xd0\x63\x6b\x31\x82\x85\
+\x5e\x45\x35\x98\x6c\xba\xbf\xb9\x41\x19\xd7\x12\x51\xbc\xaa\x1c\
+\x34\x11\xc4\x24\x17\x1b\xe8\x64\x84\x8b\xc6\xb9\xfd\xb8\x6b\x12\
+\x63\x83\x12\x58\x54\xdd\x98\x44\x17\x94\x00\x3d\x26\xd3\x4d\xbc\
+\x56\x9c\x2b\x0c\x64\x93\xcb\xd4\x82\x28\x8e\xc0\x19\xd0\xd1\x0c\
+\xe4\x41\x01\xdf\x08\x4a\xfb\x58\x89\x8d\x4e\xa0\x2f\x99\xd0\x49\
+\x00\x71\xd1\x86\xdb\x70\x36\x1a\xf2\x6a\x73\x44\x1d\xa3\x98\x4d\
+\x89\x96\x1c\x73\x46\x62\xb0\x40\x0f\x25\x20\x04\x02\x1e\x15\x67\
+\x00\xaa\xa0\xda\x1d\x54\x6d\xd1\xd4\x60\x84\xf9\x12\x09\xbc\xc7\
+\xc4\x31\x92\x30\x66\xb4\xa4\xe0\x1a\x52\xdd\xca\x28\x6c\xb6\x11\
+\xa3\xfd\x44\x18\x03\x83\x71\x40\x92\xac\x3d\x06\x8f\x61\x99\x69\
+\x12\x2d\xd0\x8d\x85\x4b\x74\x1b\x61\x93\x45\x7b\x43\xc6\xdd\xc3\
+\x01\x62\xa1\x9b\x69\x84\x97\xb2\x1b\x06\x63\x24\xab\x69\xbf\x1a\
+\x92\x96\xe2\xc0\x9c\xa0\x8b\x28\x26\x72\x2e\xa8\x82\xa2\xcd\x8f\
+\xcf\x30\x29\xc4\xd8\xe8\xb2\x70\xe8\x29\x13\x0d\xc7\x69\x48\x2d\
+\x06\x21\xb9\x15\xc9\x8e\x25\x44\x18\x90\xc5\xfd\x07\xe6\xf7\x80\
+\x8c\xab\x98\x0c\x9d\x28\x66\x53\xa1\xb0\xae\xb1\x37\xdf\x8d\xc4\
+\x84\x1e\x67\x72\x51\x32\xdc\x29\xb2\x41\xcc\xe4\x0c\xc9\x25\x44\
+\x28\xa8\x65\x02\x92\x8e\x64\xd9\x60\xa6\x76\x1d\x97\x86\x07\x16\
+\x55\x46\x60\x0a\x11\xe6\x66\x8b\x51\x4f\xa0\x5a\x03\x17\x69\x67\
+\x44\xe7\x85\xf8\x90\x94\x7c\x20\x31\x9e\x18\x0c\x23\x08\x90\x91\
+\x8d\x11\x99\xf7\x8d\xd1\x98\x08\xa2\x9a\x4b\x50\x13\x20\xcb\x85\
+\x89\x93\x26\x71\x36\xa6\x1b\x8b\xb7\xd1\x69\x91\xef\x49\x46\xbd\
+\x29\x2d\x11\xa3\xa0\x1d\x97\xae\x49\x5c\xf5\x96\x60\x5b\xe6\x24\
+\x51\x65\x64\x31\x19\x18\x89\x49\xd2\x0f\x36\xd3\x70\x03\x1b\x93\
+\x48\x90\xc4\x46\x61\x09\xb2\xe4\xba\x13\xa7\xf9\x48\xb5\xf0\x2d\
+\xf9\xed\x71\x1a\x89\x29\x4d\xcd\x75\x44\x01\x59\x47\xae\x48\x06\
+\x03\xde\x44\xf8\x5e\xc0\xdb\x41\xc8\x14\xca\xc4\x18\x0d\xca\x21\
+\xed\xe9\x11\xba\x84\x83\x24\x66\x9e\x64\x17\xfb\x24\x00\x5f\x14\
+\xd8\x04\x5c\xa0\x05\x0a\x29\xae\xa6\xd4\xa1\x38\xe9\x09\x82\x4d\
+\xc8\x45\xba\x71\x84\x69\x30\x8d\x48\x91\xc7\xe0\x6f\xb3\x49\x43\
+\x4b\x96\x5a\xa4\xce\x1c\xf0\x4d\x27\x4c\x02\x09\x6a\x2d\x56\x0d\
+\x43\x42\x55\xd1\xce\x70\x38\xdf\x76\xc4\xec\x67\x54\xf0\x90\xa6\
+\x60\x32\x75\xc9\xc5\xc9\x61\x36\x92\xc6\xe5\xc6\xe2\x54\xf7\x38\
+\x20\x35\xf2\x3a\x43\x84\x14\x03\xe6\x44\xd0\x75\xe2\xed\xf2\xb8\
+\xb4\x4d\x34\x91\x5d\x8a\xb7\xfd\x42\xc4\x4a\x3c\x13\x0a\x9d\x8a\
+\x76\x42\x43\x09\xd5\x96\x6c\x52\x0c\xb7\x87\x22\x92\x6d\xe6\x88\
+\xfd\xcd\xb9\xce\x38\xe6\x03\x42\xf0\x8b\x04\x50\x9a\xf9\xef\x18\
+\x7d\x3d\xe4\x67\x27\x8b\xa9\xc3\x71\x00\x81\x31\xa2\x74\x3e\x32\
+\xc0\xa4\x14\xb8\xe3\xc6\xe2\x24\x3a\x5a\x4c\x5e\x2e\x69\x0c\x31\
+\x6a\xd3\xa1\x25\xfa\x4a\x34\x1f\x99\x40\x15\xb2\x64\x42\x71\x80\
+\x50\xa4\xec\x32\x87\x1d\x18\xea\x22\x49\x21\xb5\x0c\x40\x65\x2e\
+\x06\x92\x4c\xd0\xb6\x52\xd5\x10\xc0\x18\xd0\xe6\xee\x33\x7c\xd9\
+\x80\xbc\x47\x21\x54\x3b\xdf\xe4\x65\x04\xd1\x10\x63\xce\xb7\xcf\
+\x61\x1b\x64\x68\x28\xc4\x7b\x08\x58\x10\x93\xc3\x35\x90\x67\x4a\
+\x48\xe1\x79\x52\x40\xda\x23\x09\x8c\xca\x8d\xa5\xd9\xe8\x52\x17\
+\x24\x0b\xf8\x1d\x01\xa7\x88\x18\x3a\x37\xcb\x1a\x71\x65\x9b\x8c\
+\x89\xa0\x0d\x20\x20\x86\xfe\x98\x09\xa2\xa0\x9e\x46\x92\x44\x62\
+\x0a\x5e\xb0\xaa\x3d\x0a\xa1\xb4\x4b\xdd\x9b\xb6\x68\x41\x46\x75\
+\x47\x8b\xfa\x85\x9c\x79\x62\xb8\x43\x39\x8c\x03\x39\xd5\x19\xa2\
+\xbf\xdb\xd4\x88\x42\x8c\x9a\x33\x61\x04\x20\x2e\x52\xa7\x9f\x2c\
+\x9a\x14\x08\x18\x8b\x1b\x7a\x24\x2b\x0e\x99\xa4\x1a\xb2\x14\x8f\
+\x22\x6d\x2e\x36\x35\x93\x6b\x78\x60\x8b\x30\x93\xa4\x3a\x2c\xa0\
+\xda\x4b\x32\x04\x17\x8d\xcf\x93\xa9\x52\x7b\xfd\xd4\xa8\x49\x63\
+\xc4\x30\x2c\x21\x77\x9d\x53\x75\x23\x19\x6f\x36\x9f\x74\x0c\x63\
+\x62\x89\x33\x58\x2a\x4b\xba\xa6\x00\x4a\xda\x0a\x66\x98\xcc\x05\
+\x99\xcd\x82\x42\x11\x8c\x48\xfa\xb1\x65\x2f\x9a\x95\x76\xd1\xa9\
+\xed\x4b\x27\x74\x49\x45\x8f\xed\x64\x4c\xd6\x10\x59\x3e\xc5\x11\
+\x13\x70\x1a\x8a\x4a\x56\xb4\x65\xdb\x60\x02\x4e\xd6\x26\x62\x1d\
+\xa2\x9f\xcd\xe8\xaa\xa7\x7e\x2e\xbd\x2e\x9c\xa1\x0b\xd8\x36\xbc\
+\x0a\x87\x0d\xa8\xd6\x6a\x50\xad\x57\xbd\x4f\x65\x31\xa3\xce\x53\
+\x87\x7a\x44\xf5\xd9\x6c\x26\xeb\xfd\x8e\x3a\x34\x80\x1a\xba\xf5\
+\x54\x03\x1a\x7e\x0b\x59\x75\x6e\x4e\x9d\x97\xf3\x0a\xf6\x20\xa2\
+\x85\x90\x8d\x66\x0f\xdc\x5c\x63\x8b\x76\x80\x50\xdc\x92\x12\xd8\
+\xb4\xb6\x7c\x7e\xdb\x8d\x0f\xa2\xfb\x49\x8a\x8a\x08\x60\xa6\x35\
+\xe5\x36\xb8\x36\x60\x71\x29\xba\xb1\x78\x42\x07\x0b\x00\x97\x74\
+\x8d\x23\x35\xd0\xd0\x0e\xfa\x85\xee\xb7\x19\x70\x83\x86\x3d\x6b\
+\xa8\x14\x84\xbc\x8d\x19\x9c\x47\xf3\xb3\x59\x45\xd4\xb9\xac\x4f\
+\xd4\x33\xe5\x06\x9c\x3a\x53\x83\x53\x13\x55\x18\x1b\xaf\xc0\xc8\
+\x99\x32\x8c\x4e\xcd\xa8\xcf\xe4\x60\xa0\xd8\x0f\x97\xac\xdc\x00\
+\x5b\xd6\x6c\x81\x0b\x87\x56\xc2\xea\xfe\x65\x30\xd0\xdd\x0f\x43\
+\xbd\x43\xd0\x53\xec\x81\x35\xc3\x6b\xa0\x56\xaf\xc0\x74\x75\x1c\
+\xca\xb5\x29\x98\x2c\x9f\x86\xb3\x95\x93\x70\xb6\x3c\x02\x63\xb3\
+\x47\xe1\xf4\xdc\x51\xf5\xfa\x34\x54\xd4\x39\x19\xcc\xaa\xef\xcd\
+\x2b\xdb\x29\x13\x95\x84\x64\x03\xb3\x80\x37\x33\x42\xd5\x70\x91\
+\x97\x72\x66\x73\x0b\x0e\xed\x67\x9b\x58\x1a\x00\xa7\x8d\x09\x21\
+\x67\xdb\x41\x0c\xa2\x8b\xc2\x1e\xb1\x20\xe9\x6c\x4d\x0c\x27\xd5\
+\x97\x46\xe8\x49\x3c\x54\xa6\x2d\x4d\x86\x64\x22\x92\x03\x3e\x58\
+\x7b\xdb\x02\x0e\x44\x4a\x2b\x33\xc5\x14\xd1\xc2\x35\x9a\xf3\xc8\
+\x67\xbd\x8e\xa6\x30\x3e\x55\x83\x5d\x87\xcb\xb0\xff\xe8\x1c\x1c\
+\x38\x55\x86\xb3\x53\x15\x80\xc9\x69\xc5\x01\x72\xb0\x69\xed\x45\
+\xf0\x96\xab\x6e\x83\xbb\x2e\xbd\x05\xae\xdf\x7c\x0d\xac\xe8\x1d\
+\x84\xae\x52\xd7\x82\x17\xba\xd6\xd0\x0c\xe0\x0c\x9c\x98\xda\x0f\
+\x87\x26\x9e\x84\x03\xe3\x8f\xc3\xc8\xcc\x1e\x98\xa9\x4d\x7a\x44\
+\x9f\x53\x44\x8f\x20\x15\x73\x14\x9a\x44\xb0\xb8\x84\x24\xc9\xd1\
+\x2e\x89\x41\x68\x12\x81\x4c\xad\xf9\x44\x9b\x45\x30\xbb\x5a\xc5\
+\x31\x91\x61\x4a\xc4\x77\xbe\x0d\x4d\x97\xeb\x56\x6b\x66\xcc\xb9\
+\xb1\x70\x42\x97\xe2\x17\x6c\xde\x2b\x0e\x88\x43\x1b\x82\x17\x53\
+\x20\x91\x4d\x4f\x24\xbe\xeb\x29\x07\xd0\x18\x6a\xb2\xae\x7c\xa3\
+\x51\xc8\x03\x27\x2b\xf0\xc8\x8e\x29\xd8\x75\x68\x16\xa6\x14\xb1\
+\x43\xbd\xae\x28\x72\x16\xf2\x7d\x03\xf0\x93\x2f\x7d\x03\xbc\xed\
+\x25\x6f\x84\xdb\x2f\x7f\x29\x74\x15\xba\x96\xbe\xd0\x99\x82\xd2\
+\x08\x56\x79\xc7\xb6\x65\xb7\x78\x6a\xfd\xe8\xcc\x21\x78\x76\xec\
+\x21\xd8\x3e\x7a\x1f\x1c\x99\xdc\x01\x35\x9a\x85\x42\xb6\x4b\x4d\
+\x37\x13\xc3\x70\x49\xb0\x87\x41\x70\xcd\x21\x2f\xc1\xcd\xeb\x84\
+\x2a\xd4\x9a\x52\x9e\x04\x80\x2f\xae\xc8\xa5\x45\xbb\x9b\x67\x24\
+\x1e\x3d\x93\x6f\xd2\x98\x8c\x09\x39\x14\x93\x09\x2e\x72\x74\x9e\
+\x32\x18\x97\x30\x1f\x41\xee\x5d\xce\x31\x80\x18\x15\xd3\x2c\x53\
+\x64\x82\x74\x28\x55\x3d\x09\x7f\x7f\x46\x6d\xd6\x42\x3e\x03\x47\
+\x47\xab\x70\xdf\x13\x93\xf0\xd4\xbe\x69\xa0\x72\x5d\x1b\xdb\x4a\
+\x6f\x2f\x03\x2a\xfd\xfd\x9e\x5b\xdf\x04\xbf\xf9\xea\xff\x04\xd7\
+\x6c\xba\xb2\xa3\x0b\xaf\x89\x79\x45\xcf\x26\xef\xb8\x75\xdd\x3d\
+\xb0\xf7\xcc\x0f\xe1\x91\x63\x5f\x84\x67\xcf\x3c\x04\x95\x86\x26\
+\xf8\x92\x81\x41\x98\xf8\x86\x80\x8c\x26\xaa\xaa\x1b\x20\x7c\x32\
+\x4a\x35\x03\x53\x5d\x17\x31\x86\x7e\xc9\x82\xd4\x72\x26\x44\x50\
+\xeb\xf0\xf7\x00\x4a\x09\x48\xa6\x84\x47\x83\xb0\x91\x0c\xf3\xce\
+\x8d\xc5\x4b\x74\x14\x00\x39\x6b\x6c\xbb\x01\x9c\x70\x52\x3c\xd4\
+\x18\xd1\x06\xc4\x09\xd5\x49\xd9\xb2\xc9\xbc\xd3\xdf\x6b\x0b\x55\
+\x43\xb8\xf7\x87\x13\xf0\xe0\x13\x67\x61\x76\xb6\xae\xc5\xac\x3a\
+\xd4\xf9\xe5\x69\xb8\x66\xf3\x55\xf0\x27\x3f\xfd\xdf\xe1\xae\xab\
+\x6e\x3f\xe7\x37\x41\x13\xfd\x96\xe1\x9b\xbc\xe3\xc0\xf8\x63\x70\
+\xff\xa1\x4f\xc2\xae\x33\x0f\x37\xed\xf8\x02\x8f\x46\x73\x6a\x34\
+\x09\xe8\x75\xa4\x91\x85\xd9\xab\x1d\x40\x2e\x6d\xcd\x80\x68\x64\
+\x12\x1a\xda\x19\x4a\xf8\xc7\xc6\xa4\xfd\x2e\x00\x45\x4f\x54\x36\
+\xdc\x8d\xe4\x12\x9d\xa1\x3b\x11\xa0\x65\x55\x33\x62\x54\x47\x90\
+\x61\x7c\x8c\x4b\xcc\x30\x91\x7b\x0c\x4b\x26\x83\xa9\x14\x15\x31\
+\x9f\x38\x53\x85\x2f\x3e\x78\x06\x0e\x1c\x9e\xf1\x25\x78\x41\x11\
+\x79\xad\xaa\x24\x79\x0d\x7e\xe5\x95\xef\x80\xf7\xbd\xf9\x37\xa1\
+\xbf\xbb\xff\x39\xbf\x21\x9b\x06\xaf\x85\x4d\x03\xd7\xc0\xa3\x23\
+\x5f\x81\x6f\x1f\xfc\x28\x8c\x95\x8f\x7b\xea\x3c\x9f\x34\x43\x51\
+\x40\x93\xd0\x80\x3d\xa4\x86\x96\x0c\x43\x24\x01\x1b\xb0\xfa\x57\
+\x25\x80\xce\x52\x60\x92\xad\xa9\xcf\x15\xb5\xe4\x50\x7a\x02\xb1\
+\x80\x87\xf3\xa3\xa7\x64\xa3\xc7\xa9\xf5\x12\x87\x98\x27\x76\xae\
+\x45\x12\x71\x21\xa7\x12\x1a\x1c\x54\x39\x29\x5a\x3f\x8e\x01\xac\
+\x8a\x79\x84\x9d\x87\xe7\xe0\xf3\xdf\x39\x0d\x93\x93\x35\x9f\xc0\
+\xf5\xa8\x56\xa0\x27\x5f\x80\x0f\xfe\x87\xf7\xc2\x3b\x5f\xfe\x73\
+\xe7\xd7\x5d\x51\x73\xbf\x6e\xcd\x6b\xe1\xa2\xa1\x1b\xe1\x2b\x7b\
+\x3e\x08\x4f\x9f\xfe\x36\xe4\x33\x45\xf5\x72\x36\xde\x06\x16\x6b\
+\xb7\x0b\x5d\x60\x9b\xaa\xba\x57\xc8\x93\xe9\xc2\x52\xa9\x55\xbc\
+\xf3\xb5\x7b\x91\x9a\xae\x42\x7d\x46\xc6\x73\x13\x66\xd5\x63\xd6\
+\xc7\x14\x50\x8c\x3c\x60\x78\x84\xc1\x4c\x88\x78\x1c\x26\xe2\x46\
+\x95\xf0\x01\x27\xce\xd3\x41\xdd\x01\x16\x9e\xd4\xc2\xe6\xa4\x83\
+\xdd\x0e\xb3\xd5\xfd\x37\x83\x42\x50\xb0\x0b\x03\xa1\xb6\x25\x45\
+\xd4\x8f\xee\x9e\x55\x44\x3e\xaa\xd4\x76\xb5\x49\xf3\xd8\x22\xf2\
+\xbe\x62\x17\x7c\xe6\xbf\xfc\x1f\x78\xd5\xd5\xaf\x38\x6f\x6f\xce\
+\x40\x69\x25\xfc\xcc\xe5\xff\x0b\xd6\x1e\xfc\x04\xdc\x7b\xe8\x63\
+\xea\x27\x35\x3c\x97\x9c\x8c\x77\x70\xb8\x87\x10\x9d\x16\x58\xeb\
+\x9c\x32\x61\xfe\xed\xa1\x33\x70\xf8\xd8\x9c\x6f\xca\x34\xaf\x47\
+\xd5\x59\xf8\xe3\x7b\x7e\x07\x6e\xbf\xec\x46\x18\x9d\x3e\x02\x53\
+\x95\x31\x98\xa8\x9c\x82\xc9\xea\x18\xcc\x54\xce\xc2\x4c\x55\x99\
+\x40\xb5\x09\x98\xa9\x9d\x85\x3a\xd5\x7c\x06\x80\xb9\xa8\x74\x10\
+\x3b\xe4\x52\x14\x1b\x68\xdd\x43\x2e\x28\x28\xae\x15\xb6\x93\xe8\
+\x4b\x23\xf4\x24\x65\x9e\xcd\xf3\x6c\x25\xb9\x23\xa1\xa6\x52\x9f\
+\x72\x88\x57\x19\x23\xcf\xfd\x6b\x97\xf2\x19\xf8\xd1\xee\x19\xf8\
+\xdc\xb7\x47\xa1\xa1\xdb\x42\x65\x9b\xe7\x28\x09\xd5\x5f\xea\x86\
+\xcf\xfc\xe7\x0f\xc3\x2b\xaf\xbe\xe3\xbc\xbf\x41\xda\x4e\xbf\x6d\
+\xd3\xdb\x14\xd1\xaf\x86\x7f\xdd\xf3\x7e\xa8\x36\xe6\x20\xa7\xa4\
+\x3b\xab\x2e\x13\xc4\xac\x61\x94\xa1\xea\x00\xa1\x99\xd9\x3a\x6c\
+\x3f\x30\x0b\x93\xe3\x15\x7f\x9d\x3c\xfa\xab\x2b\x29\x9f\x83\x6b\
+\x57\xbf\x18\xd6\xf5\x5d\xa2\x8e\x28\x38\x59\xa9\xcf\xb6\x8e\xc9\
+\xf2\x18\xec\x3a\xfd\x20\x3c\x70\xf4\x53\x5e\x70\x10\x5b\x63\xcf\
+\x9c\x0f\x26\x89\x66\xa4\x68\x6e\x02\x72\xed\xaf\x93\xb4\xd2\xfd\
+\xf1\x1d\x99\x05\x7f\xc2\xe6\x4d\x91\x4a\x2f\x73\xc9\x1d\xd2\x4d\
+\x0d\xdd\x74\xa1\x5b\x84\x94\x54\xd2\x74\xed\x15\x15\x91\xcf\xab\
+\xeb\x0d\xdd\xc9\x75\xbe\x22\x6d\xbd\xae\x34\xf7\x2c\x7c\xea\x97\
+\xff\xe2\x79\x41\xe4\xc1\x71\xcd\xea\x57\xc1\x3d\x97\xfe\x3e\x14\
+\x95\xbd\x5e\x6b\x54\xf9\x0e\x28\x92\x64\x24\x99\x5b\xeb\x28\xc0\
+\x53\x13\x75\x8f\xd8\x3d\x8d\x47\x13\xba\x27\xd5\xeb\xb0\x65\xed\
+\x46\xd8\xb2\x66\xa3\x38\x27\x8d\x1d\xf4\x16\x86\x61\xb8\xeb\x02\
+\xd8\x38\x78\x25\x6c\x1a\xba\xd6\x73\x1b\x92\x64\xcf\xc5\xb6\x8e\
+\xb6\x80\xc1\x66\x33\x08\xae\x26\x9f\x1b\x4b\x20\x74\x5b\x81\x12\
+\xb2\xe9\xf9\xc1\xaa\x24\x49\x00\x00\x4b\x24\x14\x71\x29\x8d\x60\
+\xa4\x6a\xfa\x43\x07\xc1\x9c\x3c\x53\x83\xcf\x29\x22\xaf\x57\x1a\
+\xfe\xc6\x9d\x07\x7f\xaa\x73\xf0\xa7\x3f\xf3\x5b\xf0\x9a\x6b\xef\
+\x7a\x5e\xde\xac\x6d\xcb\x6e\x85\x37\x6d\xfb\x1d\x2f\xe4\xb6\xae\
+\x24\x6e\x2c\x78\x4a\x86\x04\x64\x34\x1f\xed\xbb\x1e\x19\xad\xf8\
+\x6b\x95\x09\xbc\xdf\xa8\xc3\xb5\x17\x6c\x55\xe6\x4f\xf2\x18\x02\
+\x1d\x14\x14\x2e\xdb\x05\x4c\xb6\x1f\x30\xf8\x8c\xd9\x4c\x42\x68\
+\x05\x95\x58\x0b\x70\x63\xe9\x12\x3d\x86\x01\x47\x2a\x8b\x20\x26\
+\xd3\xa8\x42\xb5\xcd\x6c\x78\x80\x54\x26\x19\xbc\x16\xcd\x55\xb5\
+\xff\x3f\xff\xc0\x18\x4c\x4e\x54\x7d\xc9\x34\x7f\xfa\xdc\x34\xbc\
+\xfd\xe5\xf7\xc0\x7b\x5e\xf9\x4b\xcf\xeb\x1b\x76\xe9\x8a\xdb\xe0\
+\x75\x17\xfd\x1a\x34\x14\xa1\x6b\xe9\xd9\x5e\x04\x23\xc5\x76\x1e\
+\xc7\x98\x4f\x4b\x25\xd3\x65\xd2\x66\xae\x07\x4f\x96\xa3\xc1\x8a\
+\x8a\xd0\x5f\x7e\xe9\x8b\x17\xb7\x31\xcc\x42\x91\x18\xe7\x9f\x45\
+\x26\x4d\xde\x00\x66\x49\xea\xfc\x92\x34\xa7\xc1\x11\x7a\x32\x82\
+\x4e\x9a\x1b\x41\x0b\xd9\x08\x71\x35\xc8\x21\xac\x3e\x58\x3d\x44\
+\xe4\x45\xbc\x7d\xfb\xd1\x09\x38\x78\x68\x46\x89\xf6\x40\x0c\x79\
+\xa5\x0c\x17\x6f\xb8\x04\xfe\xec\x9e\xdf\x7e\x41\xdc\xb4\x1b\xd6\
+\xbe\x01\x6e\xbd\xe0\x2d\x9e\x6d\x6c\xaf\x5e\x6d\x32\x5a\x34\xac\
+\x23\x84\xd9\x72\x03\x46\x4e\x57\xc2\x6b\xdb\x68\x40\xb6\xd4\x03\
+\xd7\xae\xbb\x78\x89\x33\x8d\x89\x94\xe3\x5a\x51\x01\xa7\xa6\x0b\
+\xe7\x01\x3a\x02\x4f\x55\x75\x97\xb4\x29\x5b\xdc\x43\xa8\xf0\x9f\
+\x19\xae\x28\x75\x01\x25\x39\x0a\x2f\xe4\xbf\x37\x42\x69\xd5\xbf\
+\x7c\x2e\x03\xfb\x8f\x95\xe1\xc1\xa7\x26\xda\xe8\xba\x77\x6e\x03\
+\x50\x89\xfa\xbf\xfc\xd9\xdf\x83\xa1\xde\xe1\x17\xcc\x8d\xbb\xeb\
+\xc2\xff\x04\x17\x0d\xde\xe0\x45\xd1\x85\x08\x41\x6a\xaa\xc0\x30\
+\x63\x6d\x9f\x8f\x4f\xd5\xe1\xcc\x64\xdd\x57\xdb\xe7\xe9\xa6\x5e\
+\x83\x0b\x86\xd7\xc0\xa5\xeb\x2e\x59\x9c\xa6\x67\xde\x5f\x8a\x29\
+\xb3\xcd\x7a\x64\x20\x19\xf1\xbb\x91\xb2\xea\x2e\x35\x69\x90\x4c\
+\x6b\x02\x7b\x83\x42\xab\x39\x80\x4c\x3e\x0b\x0a\x95\x57\xc8\x7b\
+\xb9\x56\x23\xf8\xea\x23\x67\xc3\xb6\xa6\x7e\x7b\x6e\x06\xde\xf1\
+\xd2\x37\xc3\x9d\x57\xde\xf6\x82\xba\x71\xb9\x6c\x11\x7e\x62\xcb\
+\xaf\x41\x77\xae\x4f\xa9\xf1\x35\xd6\x94\x61\x6f\x4c\xe0\x1e\xea\
+\x54\xdc\xe3\xca\x3e\xaf\xea\x30\xe0\xa0\x66\xdf\xa8\xc1\xd5\x6b\
+\xb7\x40\x5f\x57\xdf\x12\xcd\xb9\x00\x13\x0f\xb5\xcf\x36\x99\x00\
+\xc9\xc8\x7c\x70\xe2\x44\x8c\x3d\x9f\x58\x95\xfc\xb1\x1e\x8b\x0b\
+\x81\xb5\x81\x75\x20\xd5\x32\x13\x88\x9d\x4b\x4b\xb6\x15\x84\x60\
+\xb2\xe0\x74\x1f\xf6\x1f\x6c\x9f\x82\xc3\x47\x67\xfc\xb0\xd6\xf9\
+\x51\xaf\xc2\xb2\xa1\x95\xf0\x3f\xdf\xf0\x9e\x73\xb2\x98\x3b\x47\
+\x9e\x81\xbf\xbf\xef\x5f\xe0\x99\x23\xfb\xa0\x01\x55\x25\x31\x33\
+\xb0\x5e\x49\xc6\x9b\xb6\xde\x00\x2f\xdf\x76\x23\xac\x5f\xbe\x3e\
+\xd5\xef\x5b\xd5\x7b\x11\xbc\x7c\xc3\xdb\xe0\xcb\xfb\xfe\x02\x8a\
+\xd9\x9c\x5c\xf7\x5c\x28\xe2\xa1\x5f\xd1\x89\x3d\x91\x5b\xa3\x24\
+\xfa\xad\x6a\xbe\x8b\xd6\xd4\x89\x69\xc3\x2c\xb9\x52\x11\x44\xcc\
+\x25\x1a\x40\x15\x04\xe5\x20\x81\x6a\xef\x46\x72\x42\xe7\x08\xdc\
+\x9a\xb6\x6a\xc9\x13\xe7\xc2\x24\x11\xa3\xfd\xc4\xd8\x2a\x24\x66\
+\x4b\x22\xff\xef\x8c\x3a\x77\x7a\xb6\x01\xf7\x3d\x39\x11\xe8\x5b\
+\xde\xb6\xcd\xdf\x73\xe7\x2f\xc0\x86\x94\x09\xcc\x1c\x27\xa7\xf7\
+\xc1\x03\x87\xff\x01\x1e\x1f\xf9\x0e\x6c\x9f\x39\x05\x0f\x1f\x9f\
+\x85\x53\x47\x67\xfd\xb9\x64\xd4\x64\xbe\xfe\x77\xb0\x7c\x68\x35\
+\xbc\xed\xc5\x6f\x80\xff\xf6\xea\x77\xc1\x9a\xa1\x35\xa9\x7d\xf7\
+\xcd\x17\xbc\x11\x9e\x19\xfd\x36\x1c\x9a\x7c\x06\xf2\x99\x12\x23\
+\x05\x81\x2d\xd0\xa0\x9f\x95\x2b\x04\xc7\x4f\x1b\x40\x9c\x36\x75\
+\xf2\x25\xb8\x7e\xe3\xa5\x4b\x34\xcd\x17\xa2\xcd\x19\x11\x90\x41\
+\x10\x8f\x88\xc9\x9e\x8b\xc9\x76\x74\x63\x09\xaa\xbb\x8d\xc0\x6d\
+\xbd\xd7\xd8\x0a\xae\xc6\x45\x82\x6a\x79\xf0\xe6\x86\x6e\x20\x5f\
+\xf1\x53\x03\x70\x8f\xed\x9e\x86\xb1\xb1\x40\xb0\x87\x27\x95\x2a\
+\xb0\x76\xe5\x7a\x78\xcf\x5d\x6f\xef\xe8\x02\x3e\x75\xe2\x9b\xf0\
+\xb7\x4f\xfc\x0a\xfc\x70\xe4\x4b\x90\xcd\xd5\xe1\xe6\xcb\x56\xc1\
+\xaf\xbe\x71\x23\xbc\xea\xf6\x0b\x20\xdb\xdd\xa3\x26\xd8\x0d\xd0\
+\xd5\x0b\xa3\x53\x67\xe0\xfd\xff\xf6\x57\x70\xdb\x1f\xbe\x05\xbe\
+\xfb\xec\xf7\xd2\xe3\xd4\x99\x22\xdc\xbe\xf1\x1d\x9a\xe5\xf1\xfe\
+\x6b\x64\x9a\x2b\xea\x8a\x37\xda\x3e\x9f\xae\xc3\xe8\x78\xad\xbd\
+\x0b\x9a\x68\xfb\xf0\xe0\x0a\xb8\x66\xe3\x55\x8b\xb7\xcf\x69\x11\
+\x1b\x28\xa8\x96\xc7\xf6\x66\x13\xec\x7d\x67\xc3\xa7\x44\xe8\x10\
+\x03\x94\x91\x69\x7b\x71\xad\x7b\x6c\x2d\x95\xb8\x88\x39\x46\x95\
+\x6b\x7e\x99\x76\xa7\xcd\xce\x35\xe0\x91\x9d\xd3\xd1\x4b\x29\x69\
+\xfe\x4b\xca\x36\x1f\xec\x1d\xea\xd8\xe2\x3d\x36\xf2\x65\xf8\xec\
+\xb3\xbf\x0f\xb3\xb5\x29\x28\xe5\x7a\x3d\x62\xab\x54\x1a\xd0\x68\
+\x34\xe0\xf6\x6b\xfa\xe0\x4d\x2f\x5f\x06\x19\xcd\x7c\xbc\xc8\xbc\
+\x3c\x40\xf7\x00\xec\x1e\x39\x00\xaf\xfd\xb3\xb7\xc1\xd7\x9f\xfc\
+\x56\x6a\xf3\xd8\x3a\x7c\x0b\x5c\x32\x7c\xab\x8f\xc2\x73\xeb\x1c\
+\x6a\xcd\xd4\xd4\x84\x94\x7d\xae\x89\xbc\x3c\x57\x0f\x23\xf3\x4a\
+\x6d\xbf\x7c\xd5\x46\x58\xde\xbf\x6c\x91\xfb\x82\x64\x34\x9d\x2d\
+\x35\xcd\x85\xbd\x72\x9b\xcc\x6c\xa7\xc5\x24\xde\x38\xd5\x7d\x09\
+\x84\xbe\xa8\xae\x42\x66\xf2\x04\xf1\x1c\x97\x2c\x36\x01\x67\xa3\
+\x1b\xfe\xf4\xbc\x22\xa2\x1d\x07\xe7\xe0\xe4\x68\xd9\x87\x90\x5b\
+\x52\xa9\x06\xfd\x4a\x2a\xbd\xf3\x65\xf7\x74\x6c\xe1\x0e\x9d\x7d\
+\x0a\xfe\x6d\xf7\x9f\x7b\x5f\x98\xc3\x5c\x68\x1f\x2b\xe5\x17\x66\
+\x95\x5a\x7c\xfd\xb6\x6e\x78\xcd\x8b\x87\xc3\xf3\x2f\x76\xc1\xd9\
+\xb9\x19\xf8\x85\x8f\xfc\x06\xec\x3c\xba\x2b\xb5\xf9\xbc\x64\xdd\
+\x5b\xa1\xa0\xa4\x7b\xdb\xb7\x1e\x20\x26\x26\xd1\x45\xe3\x95\x07\
+\x4f\x94\xa3\xe1\xe3\xb5\x2a\xbc\xe4\xe2\x9b\x97\xa0\xb2\x83\xdc\
+\xa8\xc2\x5a\x87\x9d\x2b\x93\x6d\x11\x04\x91\xc8\x49\x27\xcd\x97\
+\x2e\xd1\x6d\x71\xee\xb6\x92\x4d\x12\xd2\x2a\xa9\x5a\x24\xd4\x17\
+\x8f\x7c\x14\x5b\x48\xfb\x0f\x77\x4f\x41\xc4\xc7\x5e\x99\x83\x9f\
+\xba\xf6\x15\xb0\x61\x45\x67\x6c\x73\x5d\xf7\xed\x4b\x7b\xfe\x1c\
+\xca\x8d\xd9\x66\x5c\x37\xb2\xf8\xc3\x9c\x22\xf6\x17\x5f\xda\x0b\
+\xd7\x5d\xd2\xa7\x26\x1b\xf8\xdd\xca\x06\x3e\x31\x36\x02\xff\xf1\
+\xe3\xbf\x05\x95\x6a\x39\x95\x39\x6d\x1c\xbc\x1a\x2e\x1a\xbc\xc9\
+\x8b\x85\x0f\x83\x95\x66\xeb\x2b\xbf\xc4\x83\x0e\x2c\xf2\xec\xf3\
+\x60\x69\x2e\xfd\x1b\xf2\x05\xb8\x71\xfd\x52\xec\x73\xa3\x89\x86\
+\xd8\xc2\x59\x28\x9d\x8d\x68\xb8\x66\x6d\x9b\x10\x2c\x82\xc0\x8d\
+\x85\x11\x3a\x25\x90\xf2\x68\xb9\xe1\x14\x73\xe1\x60\x88\x24\xdb\
+\xdb\xcb\x6c\xf7\xe3\x9f\xaf\xc1\xf5\x63\xa7\xab\x70\xf0\xf8\x9c\
+\x2f\xcd\xe7\xe7\xa1\x2b\x3c\xe6\x8b\xf0\x8b\x2f\xfe\xa9\x8e\x2d\
+\xda\xf7\x8f\x7d\x01\x0e\x4f\x6e\xf7\xab\xc0\x20\xd7\xa0\x62\xfe\
+\x57\xe8\xc4\x4e\x82\x57\x5c\x3f\x00\xbd\xfd\x39\x5f\x85\x9f\x1f\
+\xa5\x1e\x78\xf0\x99\x87\xe0\xa3\xf7\x7d\x3a\xb5\x79\xdd\xb0\xfa\
+\x75\x5e\xda\x28\x89\xc5\xe3\xfd\xd7\xb4\xda\x3e\x35\x53\x87\x91\
+\xb1\x6a\x3b\xd9\x87\xfc\xb5\xeb\xed\x1d\x84\xeb\x36\x5f\xbd\x78\
+\x73\xae\xd5\x73\xce\x64\xe6\x28\x84\xc3\x22\x93\x7e\x0a\x31\xb5\
+\xe7\x09\xec\xbd\xd8\xdd\x48\xcf\x46\x8f\xc3\x5a\xb8\xa2\x7e\x12\
+\x57\x10\x6d\x72\x86\xe3\x37\x87\xae\xdc\xfa\xf4\x81\x59\x68\x68\
+\xbf\x79\xf0\x92\x4a\xf5\xbc\x7c\xdd\x36\xa5\x7e\xde\xd2\x91\x05\
+\x9b\xac\x8c\xc1\x0f\x8e\x7d\x1e\xf2\x5e\xe5\x17\x13\x83\x80\x08\
+\x06\xa1\xb5\x8e\xe1\xfe\x2c\xdc\x74\x59\x9f\x4f\xe8\x41\x02\xc8\
+\x15\xe0\x7d\x5f\xfe\x6b\x18\x3d\x7b\x2a\x95\xb9\xe9\x0a\x35\xab\
+\x7a\x36\x43\x5d\xc7\x9c\x5b\x92\x47\xb4\xda\x7e\xea\x6c\xcd\x23\
+\x76\xd3\x3e\xbf\x74\xe5\x06\x2f\x58\x66\x49\x9b\xc0\x8c\xa1\x10\
+\x99\x39\x59\xcc\x37\x8b\x14\xa1\x98\xf7\xdd\x58\xa4\x8d\x2e\x71\
+\x6f\xa9\x55\x93\xd9\xff\xdb\x96\x23\x2d\x45\x45\x21\x19\x15\x52\
+\x82\x1f\x41\x98\x51\x6a\xf1\xb3\x87\x66\xdb\x11\x5d\xf3\x9f\xad\
+\x57\xe1\x4d\x4a\x6d\xcf\xe7\xf2\x1d\x59\xb0\x67\x4e\x7e\x0b\xc6\
+\xe6\x8e\x2a\x41\x98\xe0\xfa\xcd\xdf\x5d\x55\xc4\x7e\xd3\xb6\x1e\
+\xe8\x1b\x2a\xf8\x45\xe2\xe7\x87\x22\xf4\xa3\x27\x0f\xc2\x27\x1f\
+\xfe\x42\x2a\x73\xcb\x67\x8b\x70\xc5\xf2\x3b\xfc\xec\x36\x4b\x4f\
+\xb5\x6c\x16\xe0\x90\xf6\x9f\xd7\x8c\xe0\x93\x5a\x05\xae\xbd\xf0\
+\x6a\xc5\x44\x73\x8b\xa6\x71\xb1\xac\x93\x84\x9e\xb3\xc0\x9d\x59\
+\x09\x96\x78\xb0\x0f\x98\xa6\x20\x6e\xa4\xa0\xba\xdb\x7a\xb0\x45\
+\x18\x03\x86\x5b\xe3\x5a\x81\x16\xc6\xb5\x12\x6a\xdd\x13\x6e\xdd\
+\xa4\xeb\xbf\x1d\x55\x1b\xf5\xd4\x19\xed\x52\x0b\x6f\xb2\x5c\xa9\
+\x1b\xde\x70\xdd\xdd\x1d\x59\x2c\xa2\x3a\x3c\x75\xea\x5e\xa5\xfa\
+\xe6\xa2\xdd\x42\x22\x73\x6f\x2f\x4e\x5d\x29\x1d\x83\xbd\x59\xb8\
+\xfa\xc2\x1e\x5f\xaa\x07\x7f\x7a\xb6\x00\x1f\xfb\xee\x17\xa0\x9c\
+\x92\xad\x7e\xd9\xf2\x97\x41\x77\xae\x5f\xf1\x93\x46\x98\x23\x53\
+\x1b\xdb\xd0\xf3\x39\x76\xaa\x1c\x05\xea\x32\x59\xb8\x65\xd3\xe5\
+\x69\xae\x98\xb1\x2e\xc4\xac\x57\x5c\x79\x6e\x14\x6a\xd1\x2f\x30\
+\xea\xd2\x11\xfa\x02\xd5\x72\x5b\x5b\x32\x34\xd4\x2a\x64\xec\x29\
+\xb1\x08\xa4\xe1\x3e\x41\x0c\x34\xda\x0b\x7f\xa7\x56\xdb\xf7\x28\
+\xdb\x9c\xaa\x81\x4d\x4c\xbe\x44\xba\x64\xcd\x45\x9e\xea\xde\x89\
+\x71\x6a\xe6\x10\x9c\x98\xde\xeb\x4b\x73\x12\xaa\xa3\xb0\xfe\x60\
+\xf2\x84\xe7\x95\x9b\xbb\x14\x5d\xeb\x4e\x11\x01\x06\x91\x2f\xc0\
+\xd3\x87\x77\xc0\x43\xbb\x7e\x90\xca\x1c\x57\xf6\x6e\x86\x0d\xfd\
+\x57\x29\x9a\xad\x42\x57\x31\x03\x5d\xea\xfb\xbc\xc7\x92\xff\x48\
+\x58\x86\x53\x13\x93\xb0\x7b\x64\xd2\x8b\x35\xd0\xd5\x76\xbc\xda\
+\x79\xfa\x28\x76\xc1\x8b\xb6\xdc\xb0\x44\xf3\xcd\x68\xfa\x48\x46\
+\x9b\x29\xa9\xb1\x44\x04\x94\x35\xf7\x4e\xc0\x45\x28\xf5\xb1\x77\
+\x7e\x74\x71\x2c\xbe\x94\x14\x97\xd0\x42\x36\x9d\x3f\x86\x03\x13\
+\xd7\x40\x20\x40\xec\xcd\x0d\xe2\x45\x74\x55\x1b\xb0\xf7\xe8\x5c\
+\x94\xb9\xa8\xcd\x7a\xe7\x25\xb7\x40\x31\xdf\xd5\x91\xc5\x3a\x78\
+\xf6\x49\x98\xae\x9d\xf5\x7c\xe6\x91\x84\x1d\xb6\x2a\x6d\xfb\xf7\
+\xd6\x15\xa5\xaf\x1e\xce\xc3\x9a\x65\x05\x38\x72\xa2\x59\xb2\xa9\
+\x59\xc8\x91\x14\xb1\x7d\xfe\x47\x5f\xf3\x6a\xc8\xa7\x31\xb6\x0d\
+\xdf\x08\x9f\x7d\xe4\x1b\x30\x3e\x3e\x1b\x00\xdb\xfc\xfe\x52\x6f\
+\xbd\xe5\x95\x70\xd9\xea\xd5\xf0\xf8\xba\xef\xc2\xd9\x65\xd3\x70\
+\x6a\x6e\xda\xd3\x26\x66\x67\x26\x60\xcb\xaa\x0d\xb0\x69\xf9\xba\
+\x25\xc8\x6f\xbf\x0d\x15\xa9\x7b\x86\x66\x1b\x27\xb6\xce\x7f\x90\
+\x39\x34\x6b\xca\x13\x93\x80\x63\x96\x1a\xe3\xba\xdc\x7a\x97\x75\
+\xaa\xfb\xd2\x09\x3d\x8e\xf8\xad\xfe\xf4\x38\xe3\x9e\xeb\x29\xce\
+\x77\x69\xd1\x88\xf1\xd8\x44\x0d\x4e\x6a\xc4\x38\x63\x30\x9c\x6c\
+\x0e\x6e\xbf\xe4\x96\x8e\x2d\xd6\x81\xb3\x8f\x7b\x45\x1f\xc2\x73\
+\x34\xec\x5c\x2e\x60\x04\xfd\xb6\x8b\xba\x50\xe5\x45\xeb\x4a\x70\
+\xe4\xd8\x6c\x18\xed\xce\xe6\xe1\x81\x3d\x8f\x41\xb9\x32\x07\xc5\
+\x42\x69\xc9\xf3\xbc\x78\xd9\xcd\xb0\xe7\x50\x16\x9e\x7d\x76\x0c\
+\xa0\x90\x6b\x9b\x12\x8a\xa0\xdf\x7d\xcb\xad\xf0\xd3\x57\xbd\x5e\
+\x1d\xbf\x06\xd4\xa8\x43\x55\x11\xff\xd4\xdc\x14\x8c\x4e\x9c\x52\
+\x26\x51\x0e\x4a\xc5\xee\x25\xa8\x87\x59\x8f\x56\xeb\x8d\x1a\x54\
+\xa8\xea\x13\x7b\x8b\x46\xe7\x5d\x7b\xfe\xbd\x46\xf2\x7b\xd0\xe9\
+\x52\x59\x18\x44\xde\x51\x02\x6a\x21\xb2\x17\x92\xc2\x49\x6e\x2c\
+\x95\xd0\xad\x44\x1e\x8c\x7c\xb2\xf5\x5c\x26\x8b\x44\x37\x6f\xbe\
+\x6f\x9f\x1f\x38\x51\x86\x8a\x8e\xe8\xca\x05\x5c\x78\x6a\xd3\x2e\
+\xeb\x5f\x06\x37\x6d\xbe\xa6\x23\x0b\x55\xad\xcf\x29\xb5\x7d\x9f\
+\xb7\x31\x79\xc4\x97\xa9\xe4\x62\x94\x59\xd6\x7f\xad\x5f\x59\x04\
+\xcc\x65\xc2\x81\x6a\xb9\x02\xec\x1a\xd9\x07\x07\x4f\x1f\x81\x6d\
+\x6b\xb6\x2c\x79\xae\xc3\x5d\xeb\x61\x75\xef\x7a\x78\x36\x3f\xd6\
+\xae\x7a\xab\xd7\x37\x9b\x51\x56\x43\xa5\x7d\x27\x94\x4d\xae\x4b\
+\x6b\x0d\xf7\x0e\x79\xc7\x52\xc7\x85\x83\xd7\xc2\x3b\xaf\xf9\x2b\
+\xc5\x3c\xca\x50\x6e\xcc\x78\x05\x24\xe7\x6a\x53\x30\x53\x1d\xf7\
+\xa2\xf6\x66\x6a\x13\xea\xef\x49\x98\xab\xcf\xa8\xbf\x67\x3c\x86\
+\x30\x55\x1d\x83\x3a\x55\xc3\x31\xee\x6c\xc5\x57\xe0\xf7\x91\xa8\
+\x45\xb9\x91\x0e\xa1\x4b\x45\x43\xa4\x0e\x1b\x62\x33\x3f\xb3\x2e\
+\xb9\x3d\x79\x41\xbf\x3d\x32\x5a\x8d\xaa\x7f\x4a\x6d\xbf\x78\xed\
+\x16\x58\x35\xb8\xa2\x23\x0b\x35\x51\x3e\x05\x93\x95\xd1\x66\x95\
+\x53\x63\xde\x66\x76\x98\xd0\x81\x46\xbb\xda\xd6\x0e\xe7\x94\x29\
+\x9c\x81\x39\xcd\xa8\x02\x99\x58\xb3\xb3\x53\xf0\x83\xbd\x8f\xa5\
+\x42\xe8\xfa\xb6\x5e\xba\xf2\x0a\xb8\xaf\xfe\x88\x9a\x4b\xf1\x9c\
+\x6d\xa6\x62\xae\xc7\x0b\xdc\x49\x32\x34\xe1\x6b\x37\xe0\x97\x76\
+\x7f\x00\x9e\x18\xfd\x86\x57\xce\x5a\x96\xe2\x52\x97\x56\xb4\x17\
+\x9b\x74\x63\x01\x60\x1c\xca\xcc\x34\x5e\x67\x32\x91\x69\x2e\xf6\
+\xdd\x70\xba\xdb\x52\xa9\x75\x34\x5c\x9d\xe0\xd0\xa9\x8a\x81\x7a\
+\x83\x57\xb5\xf4\x86\xf5\x97\xfa\x88\x78\x07\xc6\x99\xf2\x88\xd7\
+\x25\xd5\x53\xdd\x4d\xb0\x08\x99\x3e\x60\x8c\xcb\x47\xdb\xb0\x3d\
+\x5d\x4a\x82\xf6\xe5\x7d\x40\xae\x65\xdd\xa0\xa7\x91\x3c\x7e\x78\
+\x47\x6a\xf3\xd5\x69\xb1\xe0\xb9\x18\x29\x46\xf3\x7a\x6e\x86\x2e\
+\x2c\xd9\x95\x1f\xf0\xf0\x0e\x22\xa9\xd9\x83\x71\xf3\x31\x49\x16\
+\x9c\x1b\x8b\x23\x74\x5a\xc0\x1a\xa2\x41\xdc\x44\x32\x87\x6e\x55\
+\x0c\x41\xc3\x46\xe7\x9a\x0c\xb4\x2f\x33\x31\xad\x2b\xa2\xd4\xda\
+\xf6\x79\xe0\x9a\x2f\xb9\xf8\xc6\x8e\x2d\xd4\xe8\xf4\xa1\x76\x1c\
+\x79\x2b\x44\xd3\xe6\xe6\x41\x46\xf0\xfb\x0d\x1e\x2f\x58\x96\x0f\
+\x47\xc9\x79\x97\xca\xc0\x13\x47\x77\xa7\xe6\x0b\xbe\x65\xeb\x8d\
+\x50\xd2\x85\x23\xce\x73\x80\x8a\xa0\x61\x98\x7a\xa6\xd9\x27\x6d\
+\x46\x47\xd4\x9d\x97\xe8\xb6\xaa\x32\x41\x09\x2e\xa6\xad\x46\xab\
+\xb7\x26\x69\xbc\xae\x23\x5d\x4f\x4f\xd4\xbc\x8c\xb5\x30\xf3\x68\
+\x40\xa9\xd4\x03\x57\x5e\x70\x71\xc7\x16\xea\xf4\xec\xc1\x68\x2d\
+\x36\x49\xad\x89\x44\x6e\x05\x92\x49\xd4\x6f\x58\x3e\x98\x8f\xf2\
+\x33\x25\x7d\x0f\x9d\x3a\x0c\x93\xb3\x93\xa9\xcc\x57\xf7\x6e\xdf\
+\xb6\x62\x9d\x17\x40\x74\xfe\x8f\x24\x11\x6e\x8c\x66\x42\x74\xde\
+\x6a\x2c\xcf\x3f\x42\x97\xee\x85\x10\xef\x12\xae\x2f\x0e\x42\xdd\
+\x38\xe0\xab\xa1\x90\xad\x96\x18\x79\x45\x26\x74\xe8\x26\xe9\x8c\
+\x8c\x4c\x60\x0e\xf5\x3a\xac\x1e\x5c\x09\xab\x16\x9b\x5a\x99\x50\
+\x75\x6f\x0b\x1a\x4a\xb0\x08\xc4\xbe\xdf\x68\x90\xaf\xba\xeb\x60\
+\xfd\x46\xe0\xd4\x4c\x16\x8e\x8c\x9f\x82\x33\x29\x11\x7a\xb1\xd0\
+\x05\x97\xeb\xe4\x14\xed\x1f\x7f\x5e\x98\xae\x06\x7e\x13\x29\x50\
+\x64\x54\xab\x21\x88\x96\x95\x76\x36\x7a\x0a\xaa\xbb\x4d\xda\x83\
+\xb4\xdf\x91\x69\xda\x47\x61\xa9\x4e\x82\x8b\x8d\x28\x92\xf9\xa4\
+\xa3\x47\x3d\xb7\x9a\x69\x9f\xab\xcd\xbc\x71\xc5\x7a\x18\xea\xeb\
+\x0c\xa1\x37\x1a\x35\xcf\x3e\xd7\x45\x26\xf9\x1f\x6a\x98\x1c\x6c\
+\x85\x15\x6c\xfd\x86\x81\x9e\xac\xdf\xeb\xcc\x60\x6a\x33\x95\x59\
+\x38\x70\xea\x50\x6a\xf3\xbe\x5e\x07\x0e\x05\x31\x05\x3c\x8f\x69\
+\x3c\xd2\x89\x37\x98\x05\xc7\x25\xb6\x00\x13\x9c\xe4\x44\xfa\xd2\
+\x54\x77\xc9\xcb\x21\x61\x28\x41\xd4\x5c\xec\xde\x82\xd1\x62\xff\
+\xd6\x62\xf1\xe8\x23\xee\xe3\x15\xe6\x54\x82\x4b\x57\xac\xeb\xd8\
+\x22\x95\xeb\xd3\x30\x57\x9d\xf4\xfc\xc4\xd1\xee\xcf\xc1\x46\x15\
+\xc6\xfc\x19\xfb\x58\x13\x7a\x5f\x4f\x06\x0a\x79\xa6\xea\x6d\xbd\
+\x06\x07\x53\x24\xf4\x2b\x37\x28\x89\x9e\xcd\x9e\xff\xaa\x2d\x0b\
+\x75\x08\xc4\x2d\x99\x82\xe7\x35\x27\x7b\xbe\x48\x74\xb2\x10\x7d\
+\xac\x36\x26\x65\xac\xc5\xa8\x08\x46\x5e\xb2\xfe\x73\xae\xdc\x68\
+\x66\x5c\x99\x73\x21\xd8\xb6\xe6\xa2\x8e\x2d\xd2\x5c\x6d\xda\xab\
+\x22\xe3\x75\x0d\x05\xae\x53\x08\xf2\x31\xd8\x66\x72\x4f\xd3\x9c\
+\xd1\xc5\x2c\xfb\xba\x73\x6d\xe4\x7d\xfe\x3d\x65\x82\x8c\x8c\x9f\
+\x4c\x6d\xde\x5b\x57\x6d\x86\x2e\x1d\x00\xf3\xbc\x88\x18\xc3\x18\
+\x09\xc3\x98\x77\x98\x54\xf5\x74\x23\x93\xf8\x1e\x24\x6d\x99\xc5\
+\x76\xcd\x04\x19\xb5\x13\x37\x61\x58\xdd\xd4\x5a\xf3\xd4\x4c\x03\
+\x66\xcb\xd4\x9e\x75\x4b\xa3\x40\xd8\xb6\x76\x5b\xc7\x16\xa9\x5c\
+\x9f\x81\xb9\xfa\x94\x57\x2a\x2a\xb4\x20\xb4\xd0\xcd\xeb\x67\x8a\
+\xeb\xa0\x9f\xde\x52\x36\xfa\xdb\xa9\x0e\xc7\xa6\xcf\xa6\x36\xef\
+\xe1\xee\x7e\xb8\x60\x70\xa5\xa7\x29\x9c\xd7\xa6\xb9\x50\x2a\x2c\
+\xfc\x5a\xb0\xa6\x20\xb3\xd9\x1c\x9d\xa7\xa0\xba\x9b\x00\x49\x5c\
+\x29\xb0\x08\x78\x47\x0b\x30\xf2\x39\x8e\x41\x5e\x3f\xee\xc9\xb9\
+\xba\x27\xd5\x43\xb3\x6e\x34\x20\x5f\xea\x81\xb5\xfd\x9d\xab\x0d\
+\x37\xa7\x54\xf7\x9a\x0e\xe9\x44\xae\x38\x02\x31\x78\x03\x85\x5f\
+\x37\xb4\x23\x6d\x9f\xf7\x94\x32\xd1\x9f\x9b\xc9\xc2\xe1\xb1\xe3\
+\xa9\xcd\xbb\x5f\x11\xfa\x9a\xe1\xb5\x3a\x52\xa7\xe5\xe5\x28\xe4\
+\x0a\xe7\xb7\x91\x4e\x46\x73\x3f\xd6\xb4\xe3\x8a\x60\x3a\xb5\xdd\
+\x36\x16\x56\xd7\x5d\x0a\x66\xb1\x06\xcc\x34\x78\xb5\x8c\xc8\x00\
+\xeb\xb8\xf2\xd0\xed\x5c\x74\x7d\xda\xe4\x4c\x13\x71\x2f\x84\x2b\
+\xca\x0c\x76\x0f\xc2\xb2\x0e\x76\x61\x99\xae\x8c\x85\x7f\x74\xc4\
+\x24\x41\xc6\x44\xc1\x68\xcf\xf2\x66\xcc\xbb\x06\xdc\x7b\xba\x32\
+\x61\xd5\xdd\xfb\x78\x16\xc6\x26\x46\x3d\x7f\x3d\xe2\xd2\x6b\x82\
+\xe8\x10\xd7\x8b\xd7\xac\x87\xef\x6e\xf7\xb5\x20\xca\xe4\x60\xfb\
+\x91\x67\x61\xd3\xf2\x47\x7d\x89\xdf\x3b\xe4\x7d\x4f\xaf\x62\x94\
+\xcb\xfa\x96\x05\x18\xd9\x73\xa4\xba\x23\xc8\x99\x69\x41\xb5\x12\
+\x9d\x3d\x9e\x3e\xa1\x43\x0c\x71\x73\x5e\x25\x02\x9b\x78\x87\x48\
+\x1e\x34\x71\xf6\xec\xfc\xf5\xda\x37\x77\x62\xaa\x11\xbe\xd9\xcd\
+\x56\xc8\x03\x3d\x03\x8b\xaf\x5a\x9a\x60\xe8\x98\xed\xb0\x77\x80\
+\xa2\x84\x1c\x5a\x17\x63\x43\x46\x0a\x67\x00\x94\x8a\x19\x36\x81\
+\x63\x72\x76\x4a\x09\xe0\x2a\xe4\xf3\xe9\x84\xae\xfe\xf4\xad\x17\
+\x43\x71\xf9\x3a\x28\xe6\x4a\x5e\x95\xad\x7f\xfe\xe1\x3f\xc2\x7b\
+\xbf\xf4\x11\xaf\x37\x5d\x57\xbe\xcb\x9b\x4b\x41\xbd\xf1\xbe\x37\
+\xff\x06\xbc\xf3\x8e\x9f\x5f\xd2\x77\x8d\x4d\x9d\x81\xc3\xa3\x47\
+\xbd\x12\xd4\x6b\x86\xd7\x40\x43\xdd\xbb\xac\xfa\x82\x9c\xb2\xbb\
+\xb4\x6b\x34\x9f\xcd\x7b\xdf\xa7\x1b\x5b\x64\x9a\x18\xa1\x9f\x3b\
+\xc0\x25\x34\x19\xc4\x1c\x74\x9f\xb9\xc2\x32\x1d\x24\x74\xb9\xf3\
+\x6e\xf8\x7d\x09\x84\x6a\x11\x35\x86\xfd\xec\x6c\x4f\x2d\xa6\x7a\
+\xac\x7a\x3a\xa5\x7b\x78\x07\x53\x19\xbd\x53\x1a\xb0\x52\x49\xa6\
+\xee\x62\x4f\xc7\x16\x49\xc7\x65\x93\x55\x5d\x24\x23\x5a\x4e\x04\
+\x2c\x7c\x3b\x5d\xcd\xbf\x4b\x6b\x25\x68\x00\x77\x8a\x00\xc6\x67\
+\x26\xa0\x5c\xab\xa4\x46\xe8\x2b\xfb\xd6\xc0\xb2\x81\x3c\x14\x14\
+\x91\x69\x10\xb0\xa7\x07\xa1\x52\xad\x7a\x56\x5b\xa5\xd2\xf4\x60\
+\x94\xa7\x61\x6c\x7a\x7c\xc9\xdf\xb5\xeb\xd4\x0f\xe1\xc3\x0f\xff\
+\x2e\xd4\xea\x45\x75\x3f\xba\x61\xa6\xda\x80\x6e\x28\xc0\x60\xa9\
+\x04\xd3\xb3\x00\x83\x5d\x03\x9e\xd6\xd0\x5b\xea\x85\xc1\x9e\x7e\
+\x9d\xa2\x04\x73\xb9\xdd\x1e\x03\xb0\xa3\xec\xf3\xcc\xd2\xec\xd9\
+\x6d\xb6\x77\x72\x04\xbd\x78\x42\x47\xe0\x7b\xa2\xdb\x6a\xf5\x11\
+\xb7\xc9\x89\x89\x79\x17\x52\x10\xc9\x28\x23\xd5\x24\xa0\xb3\x33\
+\x75\x88\x44\xa0\xa9\x63\x95\x92\xe8\x9d\x1c\x3a\xeb\x8a\x9d\xaf\
+\x19\xe2\x8b\x5c\x4d\xad\x28\xf1\x6b\xbd\xa4\xbb\x98\x8d\xe6\x59\
+\xab\x27\x53\x95\x39\xa8\xa6\x08\x9e\xf5\x17\x57\x79\x15\x65\x6a\
+\xcd\x5a\x71\xe4\x31\xc9\xac\x8f\x6e\xb6\xd2\x7b\xf3\x4a\xea\x66\
+\x97\xfc\x5d\x83\xfd\x45\xb8\x68\x43\x56\x5d\x4b\x5f\x78\xb6\xa9\
+\x90\x95\x95\x64\x3f\x0b\xbd\x75\x52\xf3\x38\xe6\xaf\xa7\x62\xce\
+\x53\xcd\x92\x5a\xf9\x7a\x01\x72\x98\x4f\x1e\x18\x87\x01\xbb\x3d\
+\xb2\xfe\x4e\xcc\x2f\x5d\xa2\xdb\x00\x38\x16\x47\x63\x38\xac\xd9\
+\xa6\x09\x85\xb0\x57\x8c\x66\xd0\xe8\x33\xa7\x75\x33\xc0\xc8\x7c\
+\x1a\xca\x3e\xef\x2c\xa1\xfb\xc5\x16\x19\xd4\x91\xad\x77\xc7\xcc\
+\x9f\x8c\x14\x56\xf5\xb7\xae\x49\xcf\xa9\xee\xe3\x9a\xd0\x43\xb5\
+\xd9\x97\x36\x7a\xf2\x43\x5e\x66\x98\x1f\xa7\x9f\x8d\x9a\x5d\x01\
+\xe5\x6a\xc9\x90\x5a\x43\x43\x26\x19\xa8\x7b\xd0\x69\x90\x21\x67\
+\x7c\x15\x3e\xdb\x2a\x11\x01\x7e\x6e\xba\xbe\xaf\x36\xaf\x8c\x99\
+\xf6\x6b\x46\x57\x1a\xe7\xb8\xc2\x13\xe2\x58\x5a\x64\x9c\x15\x90\
+\x0b\x80\x2b\x44\xe1\xa2\xfe\xd6\x30\x52\xe6\xb9\xba\xc1\x75\x25\
+\x11\xca\xe5\x06\x1b\xb0\xb2\x6a\x60\x65\x47\x17\x49\xbb\xd6\x88\
+\xa9\xf0\xca\xcf\x95\x59\x24\xc3\xd5\xa8\xaf\xd5\x55\xc4\x68\x62\
+\x8e\x4e\x62\x53\xd4\x32\xa7\x88\x3d\xad\x51\xc8\x94\xa0\x98\xe9\
+\xf2\x93\x47\xce\x05\x1d\x90\x5c\x6a\x9a\xe6\xdf\xa7\xf9\xbf\x83\
+\xb5\xe4\xa4\xcd\x64\x4a\x6b\x8b\x69\xe4\x24\xfa\x12\x08\x5d\x92\
+\xd8\x5c\x5d\x77\x6e\xff\xcf\x23\xeb\x18\x70\x39\xa1\xc9\x8d\xcd\
+\x0b\x87\xd5\x05\xfd\xf1\x8a\x32\x2b\xab\x66\xd5\xd2\xe6\x29\xda\
+\x8d\xd4\x51\x42\x6f\xcc\x80\x9c\xc1\x63\x6e\x34\xb3\x69\x01\x46\
+\x55\x7d\xf0\x7b\xc6\x45\x03\x90\x10\xaa\xd5\x0a\x1c\x1b\x3b\x96\
+\x1e\xa1\x67\x15\xa1\x67\x7b\xfc\x54\x50\x4b\xb1\x96\x54\x48\x04\
+\x81\xef\xbd\x16\x74\x91\x21\x13\xea\x2c\x09\x0a\xd3\x2e\xa4\x24\
+\xd2\xc7\x8d\xc5\x11\xba\x94\x89\xc9\x09\xdf\x90\x9f\x3d\x49\x81\
+\x7d\x29\x8b\x2d\xcc\xe9\xb5\xc9\x57\xad\x35\x14\xb1\x53\x94\x91\
+\x34\x1a\xb0\x76\xf8\x82\x8e\x2e\x12\x86\x22\x74\x6c\xfd\xe0\x4c\
+\xc9\x26\xa9\xa5\xe8\x15\xb8\x94\xc2\x0c\xd2\x74\x73\xe5\xb3\x5d\
+\x5e\xee\x37\x05\xba\xa8\xca\xda\x47\x6a\x0b\x66\xdc\x63\x29\x00\
+\x03\x84\xf6\x4a\xe6\x5e\xb0\x70\xa3\x40\x08\xb2\xab\x19\x97\xa6\
+\x44\x27\x46\x6b\x92\x32\x36\x51\xb2\xb7\x50\x60\x14\xc4\x4b\x08\
+\xf0\x4b\x14\xd7\x1b\x14\x65\x3e\xea\xfd\x4e\x07\x81\xe8\x16\x4c\
+\x9e\x5f\x9b\xe5\x5d\x66\x25\x1d\x88\x26\xdd\x84\x54\x78\x54\xea\
+\x39\x41\x77\x57\xc6\xab\x7f\x17\xb5\x73\xeb\x30\x91\x52\x06\x9b\
+\x07\xc2\x64\x0a\x5e\xbd\x77\x10\x60\x93\xd4\x85\x23\x99\xf6\xb2\
+\x94\xcf\x80\x31\xd7\xe0\xd4\x74\xe6\xf5\x80\x06\xe1\x34\xf7\xa5\
+\x12\x3a\xe7\x46\x8b\xad\x01\xc0\xa0\xee\xac\xdb\x04\xa3\xb6\x2c\
+\x45\x33\xc3\xb4\x44\xaf\xce\xd7\x44\x0f\x6a\x0d\xf9\x02\x0c\x97\
+\xba\x3a\xb7\x42\x6a\x2e\xba\x5e\x1c\x06\x55\x4e\x32\x23\xb9\x88\
+\x27\x76\x4c\x4a\x18\x41\x23\xbd\x0e\x67\xa7\x27\xd2\xbb\xc1\x98\
+\x85\x62\xae\x57\x31\x97\xba\xbd\x4a\x50\x6a\xd2\x1c\x85\x72\xcd\
+\x9c\x54\x10\xda\x27\xb3\x31\xec\x31\x4d\x1a\x5c\xf2\x5a\x87\x24\
+\x7a\x1c\x5d\xa3\xa1\xde\x12\x0a\x92\xd0\xb0\xe1\x18\x55\xc1\xb3\
+\xd1\x15\x91\x57\x6a\xbc\x3a\x9c\xe9\xf0\x22\x21\x32\x29\xa7\x64\
+\x04\xee\x58\xc1\x45\xbe\x81\x7c\x18\xe0\x6b\x3f\xcd\xa4\x2c\x9a\
+\x82\x51\x76\x6c\x88\x03\x76\x88\xe0\x21\xa6\x15\x32\x31\xcc\x00\
+\x39\x9f\x2d\xf1\x00\x10\x85\xe3\x2c\x5c\x10\xcd\x52\x08\x3d\xae\
+\xc9\xa2\xc4\xa4\x83\x76\x59\x24\x57\x58\xe2\xce\x1c\x7a\xda\x8c\
+\x75\x47\x8c\xda\xae\xea\xf3\x59\x1d\x08\x92\xef\x70\x01\x44\x56\
+\x30\x19\x1b\x0d\x25\xe0\x82\x97\xe0\xda\x46\x2f\x16\x78\x97\x10\
+\xa6\xbc\x63\x7b\x72\x03\xe1\x59\xd9\x84\xea\x52\xd7\x89\x75\x3b\
+\x5a\x4a\x3f\x11\x80\x98\xe7\x6c\x35\x95\x8c\xeb\x3b\xbd\x3d\x25\
+\x89\x8e\x60\x2f\x34\x81\x12\xd2\x63\x89\x7a\x43\x8c\x82\x35\xcc\
+\xa6\xd0\x1b\x5f\x4b\xf4\x46\xbd\x11\x16\x8e\xea\xdc\x82\x52\xdd\
+\xfb\x4a\x3d\x9d\x5d\xa5\x50\x0d\x77\x06\x8c\x20\x32\x28\x88\xf8\
+\xdf\xdd\xdc\x90\xfa\x41\xc7\xab\x14\x72\x7c\x90\x4a\xad\x51\x4f\
+\x75\xfa\x79\x2c\xf0\x38\x19\x76\x42\xe5\x45\x46\xe2\xda\xb4\x1e\
+\x8b\x19\x83\x28\xaf\x63\xd0\xec\x43\x8c\xb7\xfb\x1d\xa1\x2f\x52\
+\xaa\xc5\xaa\x4a\x14\xef\x67\x07\x53\xcd\x47\x36\x1c\xd6\xeb\x17\
+\xa6\x6c\x74\xaa\x11\x13\x9c\x46\x1d\x0d\x94\xf0\x1a\x1f\x53\x33\
+\x22\x2f\xa8\xad\x04\xa3\xfc\x82\xc9\x39\x6c\x6f\xc3\xe0\xc6\xa4\
+\xf0\xdc\xcd\xb5\xa9\xd7\x60\x6c\xfa\x4c\xaa\xbf\xa1\xd1\xee\x01\
+\x15\xc1\x07\x53\xc5\xe4\x10\xc2\x5d\x73\x91\xaf\xcd\x1f\xd6\x84\
+\x90\x07\x7a\x6c\x7e\x75\x27\xbd\x3b\x6c\xa3\x4b\x52\x9d\xcd\x22\
+\xc4\x84\x12\x3e\xae\x9a\x05\xf2\x80\xcb\x39\x2a\x2a\x52\xa9\xcf\
+\x79\xd5\x65\x3c\x3b\x17\x03\xcc\x28\xb4\x16\x1c\xc2\x4c\x01\x15\
+\x1f\x6c\x1c\x2f\x9c\x5f\xed\x75\x4e\x4a\x97\x71\x79\x21\xa6\xcd\
+\xef\x45\xe1\xbb\x31\x5d\xee\xc8\x00\x72\x28\x84\xaa\x72\xa5\xc4\
+\x48\xc8\x64\xb3\x00\x72\xce\xb5\xb6\x44\x42\x8f\xab\xfe\x9a\x84\
+\xf0\x63\x0d\x7f\xa1\x80\xa4\x4d\xce\x20\x9c\x33\x4d\x8d\x50\x52\
+\x6b\x92\x70\x45\x8c\x36\x9b\xc4\x05\xac\x79\x1a\x36\x7a\x7e\x88\
+\x5f\xd1\x8e\x81\x70\xa6\xe6\x93\x50\xd5\x37\xd7\x0e\x13\xf4\x4a\
+\x77\x23\x65\x30\x0e\x2d\x34\x4a\x36\x61\x4c\xac\xbb\x2c\xb6\xea\
+\x64\x70\x93\x10\xc9\x74\x7f\xce\x18\xb9\x89\x22\xa3\x05\xd0\x22\
+\x01\x70\x12\x7e\x77\xa4\x2d\x70\x07\xa6\x2e\xc0\x24\xe9\x73\x45\
+\x53\x2d\x67\xa4\x31\x91\xdd\x2c\x14\x25\x8b\xc0\x28\x89\x1c\x0f\
+\x48\xd5\x46\x97\x34\x70\x94\x3e\x60\x96\xfd\x21\xe1\xc6\x62\x60\
+\x03\x04\x43\x25\x19\x29\x61\x30\x97\x73\x62\xae\x49\x2a\x24\x0a\
+\xed\x92\x23\x51\x73\xe1\x38\x7f\x3c\xd7\xcc\x8a\x3a\xab\x31\xc4\
+\x33\x19\x26\xbc\x32\xd4\x4e\xd9\x58\xcb\x88\x40\x90\x62\xae\x9d\
+\xba\x9e\xd8\x7c\x5b\xf4\xa6\x21\x8b\x70\x26\x4e\x95\x93\x62\x66\
+\xb9\x5a\x60\x82\xe4\x67\x98\xcb\xb9\x33\xcd\x28\xba\x51\x83\xb9\
+\xf4\x44\xd1\x49\xb5\xca\x15\xf3\x93\x8d\x40\x18\x74\x0e\x6b\x9f\
+\x75\x02\xe3\x08\xe6\x36\xb4\x0a\x8a\x08\xf1\x13\xc4\x30\x71\xb3\
+\xe8\x04\x31\xae\xd9\x48\x31\x22\x79\x7d\xdd\x58\x0c\xa1\xa3\xc5\
+\x3e\x67\x43\x60\x31\x80\xc3\x04\x75\x45\x92\x4b\x01\x89\x3d\xb4\
+\x51\xa4\xff\x73\x22\x9c\xd0\x12\xf4\x61\x02\x4d\x64\x89\xc7\x6c\
+\xbe\x16\xc7\xcf\x3a\xae\xba\x27\xc2\x51\xd2\xd0\x7e\x98\x9a\xfe\
+\x92\x8a\x4e\x0c\xb1\x73\xdd\x70\x22\x4d\x15\x03\xb5\xf9\x9c\xfa\
+\xbe\x44\xd5\x1d\x2d\xc4\x6d\xc5\xa7\x98\xce\xa8\x64\x21\x4f\xa2\
+\xa8\x34\x4c\x6a\x32\x9f\xb3\x41\x46\x27\x58\x29\xe2\x8f\x62\xa5\
+\xe9\x79\x91\x8c\x95\xe6\x1a\x86\x42\x98\x0d\x2c\x83\x0c\x09\x8f\
+\x46\xcc\x41\x80\x51\x12\xc5\xdd\x68\x09\xb8\x73\x94\xbe\x78\x42\
+\x37\x09\x3a\xa9\x7b\x0b\x83\xc4\x6a\xa4\x29\xb2\xdc\xdf\x14\xd1\
+\x06\x47\x11\xd3\xd6\x3b\x7b\x83\x75\x3e\xb7\xd7\xf1\x53\x6c\x27\
+\xb5\x00\x9d\x38\x50\xa3\x7e\x41\xd2\x77\xc9\x42\xb6\x11\xbd\x7c\
+\x42\xe7\xc6\xa2\xb4\x1f\x29\x9a\x39\x62\xca\xf0\xda\x1a\x5a\x01\
+\x06\x5b\x56\xa0\x53\xdd\xd3\x97\xe8\x89\x6d\x3d\x29\xb2\x89\x51\
+\xcd\x30\x98\xd9\xd6\x7e\xbd\xe1\x35\x3d\xc8\x40\x26\x9f\x89\xa8\
+\x9d\xe4\x49\x80\x46\xc7\x16\x48\xfb\xcf\xfd\x9e\xe8\x06\x65\x10\
+\x02\x5f\x97\x1e\x63\x4d\x00\xbb\x29\x99\x7e\xba\xe5\x54\xf5\x0c\
+\x4f\x36\x1d\xa1\x0d\x8a\xb1\x15\x20\x86\x61\x9a\xf9\xea\x60\x09\
+\x9e\x31\x37\xa0\x93\xe8\x8b\x27\x74\x4a\xc0\xfd\xe3\x00\x39\x6e\
+\x1f\x90\xa5\xae\x1a\x46\x6f\xb2\x4e\xe9\xcc\xa0\xe1\x76\xcb\x64\
+\xa0\x5c\x9d\x83\xf1\x14\xd3\x3a\xad\xea\x3a\x84\xb5\x4d\x39\xc1\
+\xc7\x12\x0f\x60\x0b\x03\xf5\xf6\x6a\x06\xba\x0a\xe9\x66\xe3\x45\
+\x18\x21\x41\x02\xaf\xc9\x12\x69\x5d\x6a\x3a\x19\x49\x49\xa6\x45\
+\x02\x69\xe4\xc0\xb7\x05\x8c\x85\x57\x81\x5d\x34\xa0\x13\xb4\xd1\
+\x88\xdf\x18\x68\x74\xc6\x0c\x85\x4d\x42\x58\xd2\xb5\x30\x18\xdd\
+\xa1\xb4\xd1\xe1\x65\x12\x5c\x7d\x26\xa8\x18\x2c\x6a\x19\xfa\x4d\
+\x0c\x4a\x6f\xaa\xb6\xf3\x9f\xcf\x64\x61\xb0\xa7\xaf\xb3\x68\xdc\
+\x39\x01\xff\x4c\x13\x0d\x23\x75\x04\xe4\x29\x52\x94\x69\x92\x09\
+\xe2\xa2\xdc\xee\xcb\x8d\x25\xa8\xee\x49\xb2\x30\x93\xd8\x6f\xc1\
+\xe7\x04\x06\x01\xf0\x50\x3a\x79\x1d\x46\x7c\xf5\x3d\x3a\x07\xe2\
+\x4b\x31\xa7\x2a\xa0\xb8\xfc\x6a\x29\x36\x1b\x2d\xd9\x54\xd8\xfa\
+\xe9\x3a\xb7\x7e\x76\xbe\x06\x5e\x7c\x6f\xc6\x25\x8d\x3a\x55\xc3\
+\x33\x48\xd4\x7c\x63\xb1\x92\x1c\x18\x49\x1d\x28\x04\x4a\x66\x4e\
+\xbf\x90\x06\xc9\xa6\xf0\xa2\xdc\xe0\xc1\x49\xf7\x14\x08\x3d\x89\
+\x8a\x4e\x0b\xe5\x16\x14\x2e\xdd\xcb\x01\x70\x81\xef\xc8\x65\x33\
+\x5e\xcf\xb2\x88\x8f\xbe\x52\x86\xd3\x73\x33\x1d\x94\x4e\x08\x05\
+\xaf\x8a\xaa\x19\xb8\x61\x04\x71\x88\xee\x34\x32\x82\x6a\xda\xd4\
+\xec\xc7\xb4\x63\x67\xc1\x31\x6d\xa3\xd7\xc6\x19\x13\xa1\x03\x92\
+\xbd\x15\x0b\x40\x3c\x91\x46\xb4\x18\x0b\x92\x8b\xc8\x33\x50\xc9\
+\x16\x74\x82\x3d\x25\x42\xb7\xe5\xa4\x58\x89\xdf\x52\xa9\xc2\xf6\
+\x3e\xb5\x6f\xec\x7c\x5a\x67\x26\xc3\x13\x42\xad\xd1\xd9\x26\x82\
+\x85\x5c\x8f\x61\xe7\x32\x36\x77\x30\x0c\xd3\x74\x29\x62\x4c\xc6\
+\x55\xa4\xed\x77\xda\xa6\x08\x59\x85\x6e\x6a\xc4\xde\x8a\x99\x08\
+\x5c\x94\xab\xca\x13\xda\x38\x64\x07\x86\x82\x81\x54\x66\x95\x9f\
+\xd0\xc7\x1d\xa5\x2f\x9d\xd0\x93\x80\x71\x92\xc4\x88\x35\xea\x25\
+\x87\x3c\x85\x02\x4c\x8a\x39\x84\x62\x1e\x19\x6d\x2f\x03\x47\x47\
+\x8f\x76\x5e\x75\x47\x4e\xaf\xa6\x70\x46\x5b\x50\x55\xb5\x9a\xca\
+\xc8\x27\x70\xe9\x47\x65\xa3\xf7\x76\xf5\xa6\x36\x77\x5d\x42\xaa\
+\x5c\x9d\x6a\x55\xad\x39\x77\x01\x46\x12\xa8\x43\x86\x94\xe6\xec\
+\x40\x53\x6d\x67\x0a\x59\xb8\xa6\x0d\x29\x13\x7a\xe2\x0e\x1a\x49\
+\xb9\x05\x19\x6a\x1c\x85\x39\x03\x17\x59\x46\x7e\xab\xe1\x5c\x0e\
+\xa3\xa8\xb7\x7a\x9c\x2a\x4f\x75\x74\x91\x4a\x99\x6e\xe0\x1b\xfc\
+\x61\x42\x7b\x35\xfc\xbb\x51\x49\xbd\x99\xd9\x46\x38\x1d\xb5\xa9\
+\xdd\xa0\x07\xc6\x0d\xa6\xc7\xa4\x14\xa1\xd7\x3c\x1b\x1d\x93\x9b\
+\xd7\xe9\x89\x77\x88\x56\x19\xe2\xa2\xdb\x18\x9c\x83\xd3\x98\xcc\
+\xcf\x98\x91\x94\xce\x4e\x5f\x02\xa1\x73\x6e\x25\xb0\x00\x73\x91\
+\xbf\x31\x46\xf7\x0f\x5c\xdc\x04\xb1\xa8\x5d\x2c\x21\xa7\xa4\x79\
+\x3e\x8f\x0c\x83\x41\x18\x9d\x38\xdd\x59\x42\xcf\xf6\x00\x2e\xc8\
+\x90\xe6\xc2\x7c\x31\xf4\xac\x56\x27\x51\xf8\xd7\x53\xac\x30\xa3\
+\xfb\xc6\xe9\x03\x01\xad\x94\x9d\x9e\x5c\xb4\xdc\x67\xd1\xe5\x2a\
+\xc4\xc5\x87\x88\x1a\x23\x18\x07\x9f\x53\xe1\xc6\xe2\x55\x77\x26\
+\x43\x93\x15\xd2\x68\xd1\xf7\x49\x4a\x57\x35\x99\x88\xc1\xb9\x03\
+\x37\xd7\xeb\x57\xc6\xa8\x83\xe3\x29\x56\x4d\xe5\x86\x2e\x99\xcc\
+\xce\x59\xdc\xe7\x92\xfd\xd9\xd6\x56\x24\xe1\x93\xcd\xe4\x60\xa8\
+\x37\x3d\x89\x5e\xad\x97\x9b\x55\x6c\x33\xc0\xba\xd9\x52\x55\xd9\
+\x41\x50\xd7\x11\xac\x69\xca\x52\x4a\xab\x29\x65\x4c\xaf\x0d\x4a\
+\xcd\xff\xdc\x48\xc7\x46\xa7\x84\x52\xdd\x6a\x9e\x1b\x95\x45\xa4\
+\xd8\xf1\x26\xf7\xd6\xaf\xf6\x96\xb2\xac\xea\x77\x62\x6a\xbc\xa3\
+\x8b\xd4\x95\xef\x8f\xfe\xd0\x16\x13\xb2\x95\x54\xe5\x37\xa2\x7e\
+\x75\x6a\xb6\xd1\xec\x8f\x1e\x5e\xdc\x6c\x2e\x07\xcb\xfb\x96\xa7\
+\x27\xd1\x1b\xb3\x50\xae\xcf\x34\x09\x9d\xc9\xeb\xc7\x94\x09\x84\
+\x2c\x1b\x00\x25\xd5\xcf\xac\x17\xc8\x68\x05\xb1\x21\x7d\xae\xc4\
+\x54\x3a\x12\xdd\x52\xf3\x90\xbf\xc1\xc1\x28\xa8\x40\xa5\x15\xb4\
+\x21\x78\x12\x20\xe7\x9f\xdb\xdf\x95\x65\x30\x1b\x45\xe8\x4a\xa2\
+\x37\x3a\x18\x06\x5b\xc8\x76\x0b\x2a\x8d\xc5\x14\x21\x80\xa8\x7f\
+\x17\x03\xbc\x8b\x0c\x02\xf0\x19\x5a\x29\x9b\x4d\x55\xd0\x96\xeb\
+\x9a\xd0\xa7\xc3\xaa\x7b\x88\xff\xa4\x4c\x1c\xa1\x7e\x7b\x06\xc8\
+\x4a\x01\xe9\x4e\x8c\xba\x88\x68\xf8\xd9\x03\xea\x62\xc4\x55\x69\
+\x02\x44\xce\x46\x4f\x57\xa2\x27\x01\xec\x22\xaa\xbc\xd0\x6b\x99\
+\xab\x2b\x16\x69\xb3\xdc\x96\x3a\x7d\xdd\x19\x46\x22\x65\xe1\xec\
+\xcc\x19\x38\x33\x39\xd6\xb1\x45\xea\xce\xf7\x33\xc4\x97\xa0\xea\
+\x85\x99\xe5\xd6\xdc\xfc\xfa\x63\xd3\x73\x0d\x3f\x88\x3f\xc4\x2c\
+\x09\x86\x8a\xdd\x50\xcc\xe6\x52\x9b\xfb\x54\x65\xac\xc9\x04\x85\
+\x38\xfb\x4e\x84\xbf\xa2\x51\x18\x32\x02\xbe\x02\xf0\x93\x09\x68\
+\x18\x71\x4d\x15\x31\x09\xc3\x75\x63\xe1\x12\x9d\xa3\x59\x69\x7d\
+\x43\x1e\x33\xe2\x4b\xff\x50\x5c\x90\x43\x54\x15\xeb\xed\xce\x44\
+\x0b\x8d\x64\x32\x30\x31\x33\x09\xa7\x3b\x4a\xe8\x83\x61\xbb\x92\
+\x24\xd5\x86\x29\x74\x68\x02\x46\xe8\xcb\xd6\x72\xbd\xc1\x94\xe9\
+\x22\x65\x26\x94\x94\x9d\x9e\x4d\x6d\xee\x93\xe5\xd1\x50\xe4\xa0\
+\x35\xb5\x3e\x15\x89\x1e\x57\x3c\xc3\x28\xb0\x49\x02\x96\xc1\x16\
+\x98\x14\x40\x39\x07\xc8\xa5\x40\xe8\x28\x98\xa0\x5c\x45\x1f\xee\
+\x6f\x2e\x60\x02\x51\x70\x53\x91\xa8\x06\x6b\x55\xb7\xbb\x94\x03\
+\x2c\x64\xc2\x37\x57\x11\xfa\xd4\xec\x74\x47\x13\x5b\xba\x72\xbd\
+\x90\xcb\xe4\xda\x05\x93\x31\xa1\xcf\xd1\x0c\xed\x9d\xc7\x1b\xd4\
+\x6b\x5e\xf8\x2b\x45\x63\x5f\xfb\x4a\xdd\x50\xc8\xa5\x27\xd1\xcf\
+\x96\x47\x80\xcf\x2d\xe8\x90\x30\x24\xb2\x0b\x08\x56\x25\x67\x36\
+\x59\xa0\x76\x7f\xe8\x62\x91\x34\x69\x57\x56\x2a\x1d\x42\x97\xfa\
+\xac\xd9\x5a\xaa\x89\xaa\x3f\xf2\x20\x4c\xdc\x2e\x44\xf4\xb4\x5c\
+\x0d\xc6\x75\x17\x32\xc6\xa9\x08\xf5\xca\x2c\x1c\x9d\x18\xed\xd8\
+\x22\x15\x95\x8d\x5e\xca\xf5\xf9\x11\x6b\x24\x81\x41\x01\x0d\xc6\
+\x2c\x6e\x09\xe1\x64\x1d\xdd\x64\xd1\xeb\xf5\x0e\x60\x94\xb0\x6e\
+\xc0\x40\xcf\xa0\xd7\x7d\x26\xad\x31\x5e\x3e\xd9\xc4\x03\x28\x7a\
+\x2b\x3a\x12\x06\x2b\xd4\x86\x43\xc3\x86\x4f\xaa\x4a\x9a\x8c\x00\
+\xb9\x38\x0b\x72\xc4\x9e\xba\xea\x6e\x2b\x01\x67\x6e\xa2\x60\x06\
+\x17\x4a\x3b\xca\x4c\x53\xe5\x39\xb4\x0e\x2e\xe9\xe9\x42\x28\x15\
+\x33\x3e\x5a\x6d\x20\xef\x3b\x0e\xef\xec\x28\x18\xa7\x83\x66\x08\
+\x1a\x21\x06\xc3\x6e\xf2\x56\x71\x05\x60\xca\x3c\xfb\x11\x71\xf5\
+\x3a\xc0\xcc\x1c\x45\x89\xac\x51\x87\xa1\xde\xa1\x50\xaf\xb4\xa5\
+\x4a\xd7\x89\xca\xa8\xba\x5e\x16\xc4\x34\xe0\xb4\x07\x51\x14\x18\
+\x23\x8a\x61\xfa\x8c\x64\x21\x2e\x81\x88\x58\x93\xce\xa9\xec\x69\
+\x83\x71\x71\xdc\x3f\x88\x84\xb6\xfa\x2a\x62\x38\x6a\x89\x38\x60\
+\x4e\x02\x5e\xc2\x92\xa8\xa8\xa4\xf9\x40\x4f\x36\x10\x60\xd1\x3e\
+\xf7\xc0\xa9\xc3\x9d\x93\xe8\xb9\x1e\xaf\x23\xa9\x27\xd1\xc5\xbe\
+\x62\x71\x71\xc0\xed\x85\xab\x37\x1a\xbe\xea\x9e\x31\x7e\xb6\x7a\
+\xfd\x82\xa1\xd5\xa9\xcd\x5b\xa3\xed\x53\xe5\xd3\x5e\x47\xd5\xa8\
+\x0a\xdd\x61\x21\x18\x0c\x74\x31\xd5\xeb\x24\x25\x76\x30\x6e\x7f\
+\x38\xdf\x79\xe7\x6c\x74\x93\x3e\xad\x1f\xa0\xb6\x4b\x87\xcb\x5e\
+\x0a\x01\x73\x20\x14\x50\x0b\x87\xc5\xea\xbf\x56\xf4\x17\xd8\xfb\
+\xbb\x7b\xec\x78\xc7\x16\x49\x07\xcc\x74\x17\x06\xdb\x2e\xbc\x48\
+\xab\xe7\x84\x1d\x19\x9a\xf1\x00\x35\x25\xd1\x27\x66\xeb\x86\xdd\
+\xe9\x67\xee\xac\x4c\x31\xce\x7d\xa6\x36\xe9\x49\xf4\x16\xa1\x93\
+\xa0\x40\xa5\x25\x10\xc9\x54\x17\x38\x33\x2c\x4e\x1d\x64\x37\x89\
+\xf0\x19\x5c\xc8\xc6\x74\x84\x1e\x7b\xf3\x30\xa1\x34\x40\xe3\x86\
+\x9b\xb5\xda\x25\xc4\x2e\x02\xbc\x10\x23\x1d\xd0\xcb\x5e\x5b\x3e\
+\x94\x8d\xce\x4d\xd9\xb4\x87\x46\x8f\xc0\xd9\xa9\x33\x1d\x5b\xa8\
+\x81\xc2\x0a\x88\xa6\x9c\x22\xff\x7b\x88\xdb\xcc\xed\x35\xa8\x36\
+\x74\xc0\x4c\x2d\xba\x2f\xb3\x39\x58\x35\x90\x5e\xb0\xcc\xf8\xec\
+\x71\x25\xd5\xdb\x09\x2d\x21\xaf\x54\xa7\x24\x3a\x42\xb8\x24\x18\
+\xe7\x4f\x0f\x11\xaf\xad\xad\x32\x09\x0c\x04\x18\xff\xbf\x93\xee\
+\x4b\x57\xdd\xa5\xf5\x8c\xf3\x9f\xb3\x92\xcf\xb8\xc1\x11\x17\x0b\
+\x8a\x52\x41\x3f\x1b\xee\xcf\xeb\x38\xd1\x90\x89\x00\xd9\x2c\x8c\
+\x8c\x9f\x84\x13\x1d\x04\xe4\x86\x4a\x6b\x04\xbb\x90\x29\xe9\x8a\
+\x42\x84\x1c\xea\x72\x58\x4a\xd2\xce\xd4\xa1\xca\x34\x8c\xd4\x99\
+\x6b\x6b\x87\xd7\xa4\x36\xe7\x93\xd3\xfb\xa1\xde\x0a\x24\xa2\x64\
+\xf7\x74\xa9\x44\x4e\x64\xe9\xd6\x82\x82\x59\x13\x33\x09\x14\x84\
+\x03\x5b\xae\xca\x8d\x74\x08\x1d\x44\x41\x25\x48\x79\x34\xba\x8a\
+\x32\xa0\x0b\x0a\x9d\x54\x29\x0c\x0b\xd7\xeb\x04\xcb\xfa\xb2\x50\
+\x2a\x65\xc3\xdf\xad\x44\xfd\xcc\xcc\x14\xec\x1c\xd9\xdf\xb1\x85\
+\x5a\xde\xbd\xb1\x99\xae\x2a\xf8\x14\x43\xbf\x13\x98\x0e\x2e\xed\
+\xda\x77\x67\xa7\xea\x5e\x52\x8b\xc9\xec\xb2\xf9\x22\x6c\x5e\x75\
+\x61\x7a\x84\x3e\xbb\xbf\xd9\x09\x96\xe1\xca\x21\xb0\xb0\x43\xf6\
+\x79\x88\xbe\x31\x62\xc6\xb0\x19\x8d\x84\xbc\x2d\x1f\x6a\x4d\xdd\
+\x49\x6e\xe5\xc0\xb8\x45\x48\x7d\xa6\x84\x33\xc1\x02\xb8\x79\x58\
+\xf5\xd7\x2e\xb6\x01\x45\xe8\xbd\xbd\x59\x68\x75\x02\x6e\xed\x8b\
+\x06\x3c\xba\xff\xf1\x8e\x2d\xd4\x60\x69\x15\x14\x33\x5d\x4d\x17\
+\x9b\xe0\xef\x47\xb2\x6c\x72\x9c\xe7\x49\x30\x3e\xa3\xd4\x76\x53\
+\xa2\x37\x1a\xb0\xb6\x77\x10\x96\x75\xf7\xa7\x32\x5f\x9d\x87\xae\
+\x25\x7a\x26\x93\x0d\x61\x01\x14\x6b\x0f\xa7\x24\xd5\x83\x89\x4c\
+\x64\xda\x7b\x5c\x2f\x3d\x12\x80\xcd\x60\xd3\x0f\xb0\xd8\x8a\xce\
+\x46\xef\x9c\x44\xc7\x24\x6b\x6c\xe4\x20\x63\x60\xc7\x85\xee\x29\
+\x63\xc7\x19\x2e\x2a\xed\x0f\xce\x2b\xb5\x7d\xdd\x70\x21\x1a\x3e\
+\xaa\x4e\xfc\xd1\xe1\x67\x3b\xc6\xd9\xfb\x95\x8d\xde\x5b\x18\xf6\
+\x7b\x8d\x9b\xde\x04\x2e\x52\x0e\x05\x4c\x42\x3d\x8c\x4d\xd4\xda\
+\xf3\x6f\x51\x66\x0d\x2e\x58\xb6\x06\x06\x52\x22\xf4\xd9\xea\x04\
+\x9c\x9e\x3d\x0a\x59\xcc\xf3\x34\xdd\x09\xd0\x9a\x92\x98\x78\x5c\
+\x8d\xff\x60\xb4\x1c\xca\x20\x1f\x13\x7c\x14\xf2\xe5\xba\x58\xf7\
+\x25\x12\x3a\x47\xc8\x09\x4b\x77\x0b\xe1\x72\xc2\xa6\x33\x6b\x2a\
+\x01\x98\xa9\xac\xba\x3e\xe4\x05\x2b\xf3\xd1\x4d\x9a\xcb\xc3\x53\
+\x47\x9e\x85\xf1\x0e\x01\x72\xbd\x85\x65\x30\x50\x5c\xad\x04\x6f\
+\xcd\xc0\x1d\xa4\x05\xc0\x88\xe4\x42\xf5\xa4\xa2\x54\xf6\x53\xe3\
+\xb5\xf0\xca\xeb\xf7\xeb\x35\xd8\xba\x6a\x73\x6a\xc1\x32\x27\xa6\
+\xf7\xc1\x74\xed\x8c\x86\x30\x65\x93\x2b\x41\xfd\x8c\x45\x71\x7f\
+\x34\x0e\xd6\x74\x90\x4a\x62\x13\x3f\x51\xae\x28\x85\xf3\x9f\xa7\
+\x48\xe8\xb6\xd4\x6a\x62\x84\xf1\x82\x5a\x25\x59\x7c\xad\xec\xa9\
+\x08\xda\xb4\x5d\x33\x54\x80\x4c\xd1\xa8\x08\x9b\xc9\xc1\xe1\xb1\
+\xe3\xb0\xa7\x43\xfe\x74\x1d\xb6\xba\xaa\xfb\x42\x5f\xa2\x87\x92\
+\x2b\x4c\x49\x63\x76\x8c\xa5\x76\x59\x62\x75\x9e\x06\xe1\x4e\x8c\
+\x57\xd8\xa0\x8f\x2b\x56\x6f\x4a\x6d\xbe\xc7\x26\x77\x42\xb5\x51\
+\x6e\x7e\x0d\xa3\x29\x19\x2f\xa5\x27\x0b\x99\x80\x99\x48\xc5\x98\
+\x84\x4d\x00\x88\x29\xbe\x69\xc6\x63\xd0\x02\xfa\xce\x3b\x42\x5f\
+\xa0\x7d\x8e\xf1\x42\x2c\xbe\xe7\x35\xc3\xc5\x83\xee\x35\x22\xa6\
+\xf3\x26\x79\x80\xdc\xaa\xa1\x1c\xf4\xf6\xe4\xc2\xea\xaf\x0e\x2d\
+\xad\xcc\xc1\x83\x3b\xbf\xd7\xb1\xc5\x5a\xd7\x7f\xb9\x45\x3d\x0c\
+\x6a\x1e\xc4\x86\x97\x6a\x67\xc1\x99\xb3\x75\x98\x9c\xae\x87\x83\
+\x65\xd0\x67\x54\xd7\x6d\xbe\x26\xb5\xb9\x1e\x9c\x78\xaa\x29\xcd\
+\xcf\x65\x93\x3a\x12\x4a\x8b\x31\x4c\x10\x98\x10\x61\xd3\x97\x8b\
+\x8c\x3a\x8e\x86\xb7\xc6\xd6\xde\xc9\x8d\x05\x4a\x74\x4e\x85\x8f\
+\xdd\x3b\x09\x32\x27\x10\x19\x9b\x8d\x51\xed\x03\x80\x96\xa6\xed\
+\xee\x52\x16\x36\xad\x2c\x82\x27\xde\x0d\xef\xca\xb7\x77\xfd\xa8\
+\x63\x8b\xb5\xb6\xf7\x62\x2f\x65\xb5\x85\x64\x53\x0c\x17\x34\x7a\
+\xc3\xeb\xba\x77\xc7\xce\x54\xa0\x56\xae\x87\x1b\x54\xd4\xeb\xb0\
+\x72\x70\x39\x5c\x75\xc1\xc5\xa9\xcc\x73\xba\x3a\x0e\x47\xa7\x76\
+\x28\x33\x27\x6f\x85\x4d\x42\x38\x62\x1a\x9b\x09\x73\x61\xe6\x12\
+\x01\xe3\x02\x1a\x50\x04\x9f\xb1\x25\xb7\xc4\x68\x7b\xf3\xa9\xb1\
+\xce\x44\x4f\x01\x8c\x93\x82\x95\x92\x54\x95\x89\x2d\xf3\x6b\x0b\
+\xa4\x88\x02\x5d\xd9\x2c\xc0\x85\x6b\x8a\xd1\x22\x81\x85\x12\x3c\
+\xb4\xe7\x47\x70\xaa\x43\xfe\xf4\xe5\xdd\xeb\x61\x59\x69\x1d\xd4\
+\xc5\xf2\xd2\x46\x33\x0a\xa3\x32\xac\x6e\x28\x73\x70\xa4\x12\xd5\
+\x7a\xaa\x65\xb8\x72\xdd\xa5\xb0\xa2\x3f\x9d\x60\x99\xa3\x13\xdb\
+\x61\xb2\x32\xd6\x8c\x71\x67\xd6\x98\xe9\x82\x95\x06\x8d\x68\x26\
+\xe8\x31\x17\xa2\x28\x61\x2f\xd4\x2d\x16\x69\xd9\x65\xba\x0c\x30\
+\xda\xb4\x11\x1d\xa5\x2f\x4d\x75\x47\x81\x0e\x6d\x80\x4e\x88\xc3\
+\x62\xf4\xc3\xc4\xb5\x7f\x91\xfe\x0e\x3f\xd7\x76\xee\x85\x6b\x4a\
+\x8a\xae\xb3\x61\x86\x93\xc9\xc0\xe8\xd9\x53\xf0\xd0\xae\x1f\x74\
+\x64\xb1\xb2\x6a\x13\x6f\x1e\xbc\xde\xaf\xaa\x2a\xaa\x8a\x66\x40\
+\x10\xb6\x92\x59\x66\xca\x0d\xd8\x77\x7c\x16\xbc\xa8\x99\x10\xd1\
+\x35\xe0\x55\x97\xbf\x18\x30\x93\x4e\x32\xcb\xee\xb1\xef\x2b\x65\
+\xa7\x12\xa8\x2a\x23\x78\x05\x52\xf6\x4a\xf5\x14\x86\x94\xd6\x52\
+\x68\x27\xff\xa0\x40\xcc\x91\x4e\x36\xa6\xbf\xdc\x8c\x57\x90\x26\
+\x89\xe0\x8a\x4f\xa4\x29\xd1\x6d\x35\xf6\xa5\x2a\xb1\x66\xc1\x09\
+\x8a\x23\x62\x12\x54\xdf\x68\x01\x07\xad\xbe\x0f\x0f\x64\x61\xdd\
+\x8a\x82\xaf\xbe\x07\x6f\x74\xbd\x06\x5f\x7c\xec\x9b\x1d\x5b\xb0\
+\x4b\x96\xbd\xc4\x6b\xa5\x4c\x2d\x90\xcd\xb6\xf1\xda\x13\xcf\xe7\
+\x10\x0e\x9d\xa8\xc0\xf8\x59\xa5\x0d\x64\x03\x61\xbf\x4a\xcc\x97\
+\xba\xfb\xe0\x35\x57\xdf\x91\xca\xfc\x6a\x8d\x2a\xec\x1b\x7f\x4c\
+\x7d\x45\x01\xd8\xa8\x31\x1b\xa8\xba\xc4\x31\x50\x5c\x05\xdd\xb9\
+\x01\x2f\x0d\x37\x22\x7d\x83\x5f\x8e\x46\xef\x74\x30\xf6\x0c\x0a\
+\x1b\xd0\xa9\xe7\xe7\x40\x75\xa7\x04\x66\x37\x02\x2f\xc5\xd9\x92\
+\x41\x42\xb6\x4c\x10\x90\x43\xc6\x95\x42\x7e\x99\xe4\x82\x22\x9c\
+\x4b\x36\x74\x47\xf9\x43\xbe\x08\xdf\xd8\xfe\x10\x8c\x4f\x77\xa6\
+\x60\xe4\xfa\xfe\x2b\x94\xad\xbe\xb5\x59\x2b\x5d\xe2\x88\xbc\x2f\
+\xf8\xf1\x3d\x33\x40\xb5\x46\x78\xdf\x57\xe6\xe0\x25\xdb\x6e\x84\
+\x4b\xd6\x6e\x4d\x07\x84\x3b\xfb\x38\x9c\x9a\x3d\xa0\x08\x3d\xc7\
+\x77\xc2\x11\x04\x63\x26\x05\x69\xa8\x35\x9e\x75\x7d\x97\x29\x66\
+\x53\x0e\xdd\x3b\xed\x12\xd5\xf7\xcb\xab\xcd\x9f\x05\xef\xc8\x7a\
+\xca\x58\x1d\xe6\x6a\xb3\x5e\x70\x0f\xbf\x27\xcc\x7d\x61\x32\x57\
+\x47\xf5\x49\xc7\x02\x4a\x99\x04\x02\x5f\x92\x14\x9b\x60\x35\x2a\
+\x26\x75\x8a\xcc\xe2\xfe\x18\xff\xfd\x5a\x72\x29\xf5\xfd\xe2\x0d\
+\x25\xb8\xb7\x3b\x0b\xe5\x4a\xa0\x30\x64\x36\xe7\x75\x6e\xf9\xe6\
+\xd3\xf7\xc3\x9b\x6f\x7e\x7d\xfa\x9c\x31\x93\x85\xab\x57\xbe\xd2\
+\x43\xb5\x21\x53\x34\x1a\x4e\x20\x6b\x67\xea\x82\x31\xc7\x46\xab\
+\xb0\xf3\xe0\x8c\xfa\x03\x23\xeb\xf7\xcb\xb7\xfd\x4c\x33\x82\x6d\
+\xe9\x63\xfb\xa9\xfb\x14\x13\x2a\x43\x31\xd3\x1b\x61\x3e\xda\x62\
+\x28\x79\x15\x7a\x4c\xf3\x97\xe0\x74\x4a\xf1\x07\xd7\xae\x7e\x35\
+\x3c\x71\xea\xeb\xea\xda\x55\x28\xe6\x0a\x5e\xee\xfd\xc8\x99\x2a\
+\x3c\xb5\x77\x06\x76\x1d\x99\xf1\x6a\xd6\xcf\xd5\x2a\x90\x55\xdf\
+\xb9\x7e\x68\x05\xbc\xf9\xfa\xd7\xc0\xf2\x55\x23\x30\x52\xde\xe1\
+\xf7\xa1\x8f\xab\xef\x1e\xb4\xd7\x23\x25\xa2\x9d\xea\x9e\x02\xa1\
+\x0b\xa5\x7c\x20\x06\x53\x13\x6b\x7a\x73\xbe\xe7\xc0\xeb\x08\x42\
+\x57\x52\xff\x6f\x5d\x72\x6d\xb9\x52\xdf\x2f\xbc\xa0\x04\x3b\xf7\
+\x4c\x2b\x49\x1e\x88\x95\x56\xea\xf0\x3f\x7e\xff\x4b\x1d\x21\x74\
+\x3d\xae\x5c\x79\x17\x7c\xf7\xe8\x3f\xc1\x78\xf9\x44\x13\xd9\x46\
+\x10\xa1\x6c\xd2\x9a\x3a\xc2\x43\xdb\x27\xa1\xa2\x33\xd6\xf2\x01\
+\x25\xaa\x3c\x03\x37\x6e\xbb\x01\x5e\x77\xed\xdd\xa9\xcc\x6b\xa6\
+\x7a\x16\x9e\x1d\x7b\x48\xcd\xa9\x18\x5e\xaf\xe6\x3a\xea\xa5\x2c\
+\x16\x31\x4a\x17\x9a\xd0\xe7\xd2\xe9\x76\x73\xd1\xd0\x8d\xf0\xba\
+\x2d\xbf\x06\x9f\xfc\xd1\x87\xe0\xf1\xfd\x47\xe0\xd9\x43\x73\x70\
+\xf2\x84\x92\xf0\x15\xf5\x65\x85\x02\xf4\xf7\x0d\xc3\xcd\x9b\x6e\
+\x82\xd7\x5c\xf1\x32\x78\xdd\x75\x77\xc3\x45\xab\x37\xc0\xe7\x77\
+\xbe\x17\x8e\x9c\x78\x12\x0a\xba\x28\x26\x5a\xaa\xea\x22\xf2\x78\
+\x8f\x23\xf2\x34\x09\x1d\x92\x27\x08\x85\x24\x86\x4c\xac\x6d\x0d\
+\x61\xbe\x0a\x4d\x10\x5d\xc5\x70\xcb\x26\x06\x25\xd6\x41\x2c\xd7\
+\x6d\xe9\x81\x9d\xfb\xa6\xc3\xf3\x2a\x94\xe0\xab\x4f\x3f\x00\xbb\
+\x8e\xed\x86\x6d\x29\xa9\xc4\x61\xd0\x69\x10\x6e\xbd\xe0\x67\xe0\
+\x5f\xf7\xbc\x3f\xe0\xc2\xc2\x76\x93\xc1\xc0\x5c\x0b\x8a\xb0\x0f\
+\x2a\xdb\xfc\xa9\xdd\xd3\xbe\x34\x6f\x01\x0d\x0d\x0f\x7c\xfb\x83\
+\x37\xbc\x47\x9d\x53\x4c\x49\x9a\x7f\x07\xce\xcc\x1d\x53\x6a\x72\
+\x37\xbb\xdc\x1a\xdb\xe8\xeb\xca\x85\xe7\xd1\xf4\x12\x1c\x3c\x73\
+\x22\x35\x82\xb9\x69\xed\x9b\x80\xa6\xd7\x43\xdf\xec\xfd\x70\xf5\
+\xd0\x1c\xf4\x94\x0a\xb0\x69\x70\x39\x6c\x5b\x73\x11\x5c\xb1\xfe\
+\x32\x58\x39\xb0\x22\x74\x7e\xd8\x8b\x61\x60\x09\xad\x84\x27\x2e\
+\x01\x26\xc0\x50\x9d\x1a\xbf\x44\x42\xe7\x04\xb2\xa9\x2d\x91\xa0\
+\x99\x73\x88\x2a\xe7\x13\x35\xe3\xc2\xd1\x80\xf6\x29\xd0\x30\x21\
+\x70\xae\xee\x31\xbe\x6d\x5d\x09\xd6\x2c\x2f\xc2\xf1\x53\xe5\x36\
+\xc8\xa5\xd4\xe0\x39\xa5\x8a\x7e\xec\xfe\xcf\xc0\x1f\xdd\xf3\xdb\
+\x1d\x59\xb8\x1b\xd6\xfe\x24\x3c\x35\xfa\x2d\xd8\xaf\x6c\xe2\x62\
+\xb6\x3b\x30\xef\x36\xf3\xca\xaa\xf9\x54\xaa\x04\x5f\xf9\xfe\x38\
+\x54\xb5\x79\x91\x0b\xb8\x03\x67\xa6\xe0\x9d\x77\xff\x22\xbc\x2a\
+\x25\x10\x4e\x17\xc5\x78\x74\xe4\xab\xed\xb2\x51\x4c\xf5\xdd\x3a\
+\xe9\xec\xbf\x1c\x64\xd4\x3c\x1a\xc1\xec\xb9\x6c\x1e\x8e\x8c\x1e\
+\x86\xb9\xf2\x2c\x94\x8a\xdd\xa9\xcc\xe7\xe6\xad\x37\x79\xc7\x82\
+\x46\x50\x1d\x47\x69\x23\xba\xe6\x8a\x9d\x03\xe3\x4c\x6d\x49\xaa\
+\xa9\x20\x55\x54\x22\x2e\x03\x29\x98\x96\x08\x4c\xd1\x09\x9b\x9d\
+\xd6\xae\x51\x5e\x2c\x20\xdc\x78\x49\x6f\xd4\xa4\x28\x74\xc1\xc7\
+\x1f\xfe\x22\x8c\x4e\x9c\xea\x0c\x87\x54\x92\xfc\xf5\x5b\x7e\x03\
+\xfa\xf2\xc3\x3e\xf8\x64\x98\x35\x3a\x1d\x35\xab\x8e\x2f\x2b\x22\
+\x3f\x74\x64\xd6\x27\xf2\xf9\xe9\xcf\x4c\xc2\xf5\x5b\xaf\x87\x3f\
+\xfe\xe9\xff\x91\xda\x7c\x76\x9d\x7e\x18\x0e\x4f\x3d\x03\xb9\x6c\
+\xd1\x58\x8b\x76\x88\x9e\x6e\xe9\x36\xd4\x9f\x55\x6b\x96\x0d\xdf\
+\x86\x4c\x0e\xf6\x8c\x1e\x85\x13\x1d\x2c\x99\x9d\x68\x7f\x21\x19\
+\x9b\x8c\xa2\xea\x3b\x41\x42\xdb\xd1\x8d\x85\x11\x3a\x57\x0f\x22\
+\xce\x36\x0f\xc5\x7b\x13\x63\x5b\x05\x1e\xd1\x04\xe1\xe2\x80\x98\
+\xf0\xd0\x3e\xf5\xab\x95\xfa\xbe\x62\x59\xd1\x37\xdc\xe7\x4f\x55\
+\x52\x6a\x64\xf4\x08\x7c\xe4\x3b\x9f\xea\xd8\xe2\xad\xea\xbd\x08\
+\xde\x7c\xc9\xff\xf4\x9a\x30\x56\xea\x73\x2d\xa6\x96\xcf\x81\x47\
+\xe4\xff\xf6\xbd\x71\x78\xe4\xa9\x09\x1f\x3f\x98\x67\x78\xb3\x13\
+\x70\xcd\x85\x57\xc2\x17\xde\xf3\x7f\xbd\x42\x90\x69\x49\xf3\xef\
+\x1e\xf9\xb4\x87\x5e\x63\x24\x9a\xac\x4d\x4d\xfa\xeb\xbb\x8b\x19\
+\x58\xab\xb3\xff\x6a\x81\x7b\xa4\xe6\x3a\xab\x98\xcf\xe3\x07\x9e\
+\x7c\x6e\x76\x61\xc4\x15\x87\x51\x4d\x10\xa4\x02\xa3\xb6\x4a\x28\
+\x6e\x24\x27\x74\xae\xec\x90\xad\xa0\x6b\xd0\xf6\x66\x4f\x40\x23\
+\xbd\x10\x79\xce\xcd\x12\x76\x94\x61\x34\xbc\x7a\xef\x08\x2f\xba\
+\x5c\x49\xf5\x86\xf1\xa5\xca\xf6\xfd\xf0\xb7\x3e\x09\x27\xcf\x9e\
+\xec\xd8\x02\x6e\x1d\xbe\x19\x7e\xf6\xb2\x3f\xf4\x12\x5e\x74\x8f\
+\xb3\x6c\x8e\xe0\xcc\x54\x1d\x3e\xf3\xad\xd3\xf0\xf0\x63\x67\x7d\
+\x73\x42\xe7\xb0\x97\x67\xbc\xe3\x27\x6f\xfe\x09\xf8\xf7\xdf\xfc\
+\x24\xac\x5f\xbe\x3e\xb5\x39\xec\x1c\x7d\x40\x99\x10\x8f\x41\x3e\
+\x53\x32\xc0\xc0\xf0\xda\xea\x67\xda\xcd\xb5\x7e\x75\x31\x4a\x5c\
+\xf5\x1a\x7c\x63\xc7\xc3\xcf\xf1\x76\xc4\x68\xdd\xf7\x10\xb1\x3b\
+\x95\xbd\xf3\xaa\x3b\x81\xdc\x18\xd3\xd6\xf7\x9e\xe3\xbc\x68\xc9\
+\x79\x6d\xd9\x69\x5c\xb1\xba\xa0\xfd\xd0\xd6\x00\x2a\x4a\x3a\x5d\
+\xb3\xb5\x1b\xd6\xac\x2a\xb6\x0b\x3a\xe8\x23\x57\x80\x63\x27\x0f\
+\xc3\x1f\x7e\xe9\x2f\x3b\xba\x88\x17\x0e\x5d\x0f\xef\xbc\xe6\x2f\
+\xe1\xee\x8d\xef\x82\xc7\xb7\x37\xe0\x03\x9f\x39\x00\x4f\x3c\xa5\
+\x98\x8b\x96\xf2\xd5\x59\xe8\xce\xe5\xe1\xf6\xcb\x6f\x85\x4f\xfd\
+\xe7\xff\x03\x9f\x7f\xf7\xff\x07\xab\x06\x56\xa6\xf6\xdd\xba\x5b\
+\xea\x7d\x87\x3e\x6e\x24\x00\x1a\x80\x55\xa0\xbc\x53\xad\x41\x70\
+\xd9\xfa\x12\x64\x4a\x86\x3b\x4f\xad\xd5\x57\x9f\xba\x1f\xa6\xe7\
+\xa6\x9e\x63\x5a\x67\x36\x12\x22\x6f\xb3\x47\x02\x73\x9c\xea\xbe\
+\x78\x30\x2e\x69\x83\x06\x33\xdc\xd1\xe4\xc0\x14\x50\xd3\x83\xc0\
+\x9c\x01\xb0\xf1\xc0\x00\x32\x60\x5e\x90\xd9\x93\xe7\x1f\xbe\xf3\
+\xfa\x01\xf8\x87\xaf\x9d\x02\x0a\x66\x92\x96\xba\x95\xfa\xfe\x4f\
+\xf0\xf6\x97\xbc\x19\xae\xde\x78\x65\xc7\x16\xb2\x3b\x3f\x00\x2f\
+\xdf\xf4\x0e\x58\xff\x9a\x57\xc0\x2f\x5d\xbf\x17\x0e\x8c\x1e\xf0\
+\x5e\xdf\xb0\x6c\x1d\x6c\x5b\xbd\x19\xb6\xae\xb9\xa8\x23\xdf\xfb\
+\xfd\xa3\x9f\x85\xc3\x93\x3b\xa0\x98\xeb\x02\x6b\x5d\x2f\x6c\xbb\
+\x25\xd7\xae\x28\xc0\xe6\xb5\x25\xd8\xb3\x7f\x5a\x89\xf8\xcc\x7c\
+\x03\x7a\xd8\x77\x7c\x2f\xfc\xf3\x23\x5f\x81\x5f\x7c\xe9\x5b\x9e\
+\x1b\x1b\x9d\x6b\x9a\x88\x28\x84\xc4\x52\xb8\x77\x00\x39\x69\xbf\
+\x34\x42\x67\xcc\x6a\x56\x7d\x27\x46\xfc\x87\x52\x36\x85\xe4\x04\
+\xe4\x7c\xcf\x14\x6d\xa3\x1c\x41\x91\xc3\x3e\x54\x2d\xd5\x2f\xdb\
+\xd8\x05\x57\x5f\xdc\xab\xa4\xea\x44\xdb\x5f\x9d\xc9\xc2\xcc\xec\
+\x14\xfc\xfa\xa7\xff\x10\xbe\xfa\xeb\x1f\x57\xf6\x73\xa1\xa3\x0b\
+\x7a\xd1\x9a\x0d\xde\x71\x2e\xc6\xc9\xa9\x7d\x70\xff\xe1\x7f\x80\
+\x7c\xb6\xc8\x63\x1a\xa1\x26\x8f\xf3\xf6\xbc\xbf\x34\xb7\x28\x53\
+\x67\xcf\xa1\x99\xb0\xfd\x8b\x19\x78\xff\xd7\x3f\x06\x6f\xbd\xe5\
+\x0d\xa9\xb9\xfc\x16\x66\xa3\x73\x9a\x5d\x8c\x3d\x6e\x78\x3a\xdc\
+\x58\x8a\xea\x2e\x99\xc9\xb0\x08\x1c\x24\xd2\x6d\x13\xf8\x22\x05\
+\x04\x72\x1f\xaf\xe0\xe7\x02\xf6\x7c\x5d\xed\xe2\xbb\x95\x54\x1f\
+\x18\x0c\xc4\xc0\x7b\x9d\x1f\xba\xe1\xde\x27\xef\x83\x0f\x7e\xed\
+\x6f\x5f\x30\x37\xae\xde\xa8\xc2\x97\xf7\x7e\x10\xa6\x6b\xe3\xe1\
+\x06\x0d\x56\x49\xe9\xd7\x95\xd7\x2e\xbf\x4b\x37\x28\xa6\xb8\xad\
+\x4f\xfd\x11\x90\x8c\xf9\x12\x3c\xbd\xef\x49\xf8\xb3\x7f\xff\x9b\
+\x73\xbb\x09\x31\x1b\xae\x1e\x1b\x51\xee\x12\x76\xf4\x74\x12\x7d\
+\x89\x60\x1c\x67\x87\xc7\xd6\x05\xa7\x68\x6b\x26\xe0\x08\x9c\x69\
+\xc7\x84\xc8\x97\x0a\x26\x06\xb0\x0b\x6c\x02\x4d\xdb\xda\x7d\xf4\
+\x9a\x17\x0d\x79\xc1\x34\xe1\x20\x9a\x2e\xf8\x83\x7f\xf9\x10\x3c\
+\xbc\xfb\x91\x17\xc4\x8d\xbb\xf7\xc0\x47\x61\xf7\x99\x1f\x40\x21\
+\xdb\x05\x6c\x76\x18\xbb\x6e\xed\xa1\x53\x66\x5f\x7d\xd3\x00\x2c\
+\x5b\x59\x6a\x13\xbb\xb7\x4e\x25\xf8\xfd\x2f\x7e\x08\xbe\xf1\xe4\
+\xb7\xcf\xc9\xef\x98\xa9\x8c\xfb\x6d\xa3\x74\x08\x30\x22\xb3\x27\
+\x8c\x62\x24\x80\xb2\x70\x70\x23\x05\x89\x4e\x02\x08\x07\x02\x10\
+\x17\x57\x90\x2c\x54\xe6\x79\x21\x6a\x5e\x40\x55\x0b\xe6\x7b\x37\
+\x6f\x7c\x59\x49\xab\xab\x36\x77\xc1\xcb\xaf\x1f\x6c\x4b\x75\xaf\
+\xc9\x43\x16\xa6\x66\x67\xe0\x6d\x7f\xfb\x1b\x70\x72\xfc\xe4\xf3\
+\xfa\xa6\x3d\x31\xf2\xef\xf0\xc0\x91\x7f\x68\x12\x39\x32\x26\x8e\
+\x71\x63\x18\x0c\x44\x6b\x3f\x7d\x3d\x59\xf8\xf9\xbb\x96\xc3\x8a\
+\xe5\x4a\x03\x9a\x6f\xfa\x98\xcd\x41\xb9\x56\x85\x9f\xfd\xeb\x5f\
+\x85\x6f\x3c\xfd\x9d\x0e\x69\x23\x35\x38\x32\xf1\x0c\x7c\x65\xcf\
+\x87\xe0\xaf\x1e\x7d\x07\x1c\x98\x78\x42\x99\x13\x85\x18\x03\x9e\
+\x2b\x46\xe2\x88\x3d\x3d\x42\x27\x61\x3d\x29\x6e\x7d\x4d\x20\xc8\
+\x50\x07\xb8\xd6\x4c\x91\xe7\x4c\x38\xa4\x64\xb7\x05\xea\xaa\x6b\
+\xdf\xfa\x1d\xd7\xf5\xc1\x15\xca\x5e\xf7\xda\xa2\xcc\xff\x06\x25\
+\xad\x76\x1d\xdd\x03\x3f\xff\x91\xff\x0a\x33\xe5\xe9\xe7\xe5\x0d\
+\xdb\x33\xf6\x03\xf8\x97\xdd\xef\xf7\x1a\x31\x26\x6b\xc6\x88\x22\
+\xa0\xa2\xd7\x69\xc5\x60\x16\xde\xfe\xda\x95\x70\xd5\xc5\x4a\x8d\
+\xd7\x49\x64\x7a\xbd\xb2\x05\x18\x9d\x99\x80\xd7\x7d\xf0\x5d\xf0\
+\xde\x2f\x7e\x00\x66\xe6\x96\xbe\x56\xb5\x46\x05\x8e\x4f\xee\x82\
+\xfb\x0f\xfe\x3d\x7c\xf4\xf1\xff\x02\x1f\x7d\xe2\xdd\xf0\xe0\x91\
+\x7f\x84\x89\xaa\xee\x0d\x97\x89\x86\xbc\x72\xea\x22\xa1\xf0\xbb\
+\x5c\x1f\xb6\xa5\x83\x71\x68\x51\xd5\x59\x70\x8e\x8c\xd2\x3e\x04\
+\xd6\x38\x5a\xb3\xad\x6e\x48\x55\x03\xa3\xe4\xb3\x09\xcc\x51\x98\
+\xbb\xe3\x7c\xfd\x77\xf2\x12\x49\xde\xf4\xd2\x61\x28\xcf\x35\x60\
+\xf7\x3c\xba\xac\x47\xb1\x07\xbe\xfe\xd8\xb7\xe1\x9d\x1f\xfb\xef\
+\xf0\xf7\xef\xfa\x00\xe4\x52\x6c\x51\xdc\xe9\x71\x60\xfc\x09\xf8\
+\xec\xce\x3f\x80\x2a\xcd\xf9\x89\x2b\x9c\x6f\x19\xa3\x40\xa5\x8d\
+\x8b\x57\xab\x00\xfd\x5d\x19\x78\xcb\x9d\xcb\xe0\xea\xad\x3d\xf0\
+\xe8\xce\x29\xd8\x3f\x32\x07\x33\x33\x79\xb5\x76\x35\xf8\xdd\x4f\
+\xfd\x29\x7c\xe2\xe1\xaf\xc2\xdb\x5e\xf4\x06\x78\xed\x35\x77\x7a\
+\xe9\xb4\x85\x42\x7c\xa6\xdd\x5c\x75\x12\xce\x96\x4f\xc2\xa9\x99\
+\x83\x9e\x8f\xff\xc8\xe4\x76\x38\x39\x73\x00\x2a\xf5\x19\x2f\x4c\
+\x37\x87\x79\x3f\x74\x38\x14\xf2\xda\xec\xcc\x89\x64\xb8\x59\x0d\
+\x89\x4e\x5c\xea\xad\xeb\xd4\xb2\x34\x42\x07\x0b\xfe\x21\xbd\x89\
+\xc4\x14\x14\x40\x8b\xfa\x1e\xd8\x98\x64\xdc\x38\x4a\xd2\xc8\x30\
+\xda\x0c\x42\x17\x91\xd4\xc5\x1e\xde\x72\xfb\x32\xf8\x8c\xfa\x7b\
+\xf7\x81\xe9\x36\x12\xdf\xd5\x07\x9f\x7a\xe0\x73\x8a\x58\xb2\xf0\
+\x91\x77\xfc\x31\x14\xf3\xa5\xf3\xfe\x46\xe9\x84\x95\x2f\xec\xfa\
+\x23\x98\xab\x4f\x85\xb3\xd3\xd8\xa8\x41\x7b\x0b\xea\x70\x3b\x6b\
+\xdf\xb7\xae\xcf\xbc\x64\x63\x09\x2e\x5e\x5f\x84\xb1\xc9\x3a\x1c\
+\x3d\x55\x81\x93\x67\x6a\x30\x36\x55\x55\xc7\x21\xf8\xf0\xc3\x7f\
+\x0e\xff\xf4\xd4\xc7\xe0\xd2\x0b\xb6\xc0\xa5\x2b\x36\xc0\xfa\xe1\
+\xd5\xb0\xbc\x7f\x39\xac\x19\x5a\x03\x03\x3d\x03\x30\x31\x77\x0a\
+\xa6\x2a\x63\x70\x76\x6e\x04\xce\x54\x8e\xab\xc7\x93\x1e\xa1\xcf\
+\xd5\xa7\xbd\xef\xca\x40\xd6\xcb\x57\x2f\x78\x79\x01\xc1\x3e\x75\
+\x86\x87\x25\xc2\x9f\x4c\x17\x6c\x30\x5d\x99\x92\x99\x89\x6e\x24\
+\xf4\xa3\x03\x24\x8f\x90\x43\x03\x8c\xe3\xfa\xad\xc5\xa2\xa9\x66\
+\x9e\x3a\x2c\x80\x83\xb7\x5f\xd7\x39\xeb\x5d\x25\x84\xb7\x2a\x3b\
+\xf4\x0b\x0f\x64\xe0\xa9\x9d\x93\x7e\x15\x04\x7d\x4a\x57\x2f\x7c\
+\xe2\xfe\xcf\xa8\x4d\x3c\x0e\x7f\xf7\x1f\xff\xcc\xdb\xb4\xe7\xeb\
+\x78\xf8\xc8\x67\xe1\x6b\xfb\xff\xca\x0b\x71\xf5\x89\x9c\xf8\xe2\
+\x8a\x64\xd4\xa9\x43\x4b\xfa\x6c\xeb\x63\xf3\x6d\xa9\xc9\xef\x07\
+\xa7\xde\x1c\xea\xcb\xc2\xf2\xc1\xee\xc8\x9d\xa9\x35\x1a\x50\xa9\
+\x1d\x81\x0a\x1d\x86\x3d\x35\x6d\x46\xa8\x17\xc7\xc8\xf8\x86\x66\
+\x47\x1a\xd4\x84\x9d\x6b\x83\x85\xd6\xe2\xb9\x5c\xc2\x8a\x14\x60\
+\x15\xcc\x64\x33\x7e\x97\x13\xe8\x29\x80\x71\xe6\xba\xa2\xc0\x50\
+\x43\x79\xe8\x10\xb6\x9f\x63\x0b\xc4\x23\x93\xbd\x64\xd8\x6c\xa1\
+\x92\xd0\x92\x2b\xa0\xfd\x11\xdd\xa2\x38\xaf\x34\xcd\x9f\xbe\x6d\
+\x18\xee\xbc\x69\xd8\x7f\xb9\xd6\x24\x82\x52\x1f\x7c\xf9\xd1\x6f\
+\xc0\x2b\xff\xe4\x67\xe1\x07\x7b\x1f\x3d\xef\x6e\xce\x64\x79\x14\
+\x3e\xb7\xe3\x7f\xc1\x97\xf6\x7e\xc0\x23\xc4\xac\x97\x12\x4b\x06\
+\x81\x40\x94\x40\x42\xa6\x0d\xca\xb6\x56\xab\xe3\x8c\x01\x96\x29\
+\x6d\x48\xbb\xe0\xf4\x51\x0e\x1c\x75\x5d\x05\x0b\x8a\x90\xc7\x92\
+\x57\x4e\x4b\x13\xb1\x96\xd0\x5a\x05\x2f\xb4\x8e\x2e\xef\xd0\xad\
+\xa6\x91\x90\x01\x4f\xa5\xee\x11\xb6\x16\x5d\x5c\x77\x16\x46\x12\
+\x39\xf7\x5a\x4a\x84\x2e\x75\x40\x16\x19\x82\x69\x53\x4b\x85\x03\
+\x92\x38\xe6\xa5\xe4\x17\xb3\x41\x5f\x74\xe3\xd7\x9b\x80\xf2\x5d\
+\x37\xf6\xc3\xcf\xbd\x6a\x25\xac\x18\x6a\xa2\xcc\x3a\x7a\x44\x49\
+\xf6\x47\x0f\xee\x80\x3b\xff\xe4\x3f\xc0\x07\xbe\xf2\xd7\x6a\x93\
+\x57\xcf\x8b\x1b\xf3\xc4\xc8\xd7\xe0\xa3\x4f\xfc\x0a\xfc\xe8\xc4\
+\x97\x15\xa3\x2a\x05\x7c\xe5\x08\x7c\xbb\x66\x73\x8d\x90\xe9\x79\
+\x86\x7c\x02\x12\x0a\x15\x7f\x38\x5b\x38\xe8\xfa\x8c\x0b\x50\x89\
+\x10\x37\x41\xb4\x7d\x52\xb0\xe1\x03\x31\xed\xa8\x03\xf3\xb2\x01\
+\xbe\x04\x2e\x60\x66\xc9\x36\xba\xe4\x3f\xb7\x99\x87\x60\xb4\xcf\
+\x65\xeb\x78\x5b\xec\x78\xc9\xae\x0f\xa9\x78\xc6\x06\x42\x02\xd6\
+\xe7\x47\x7e\x5d\xd2\x39\x45\xc3\x97\x6f\xec\x82\xf5\xcb\xf3\xf0\
+\xc0\x93\x93\xf0\xfd\xed\x93\x50\x9d\x53\x22\x3f\xd7\xa5\xec\xcb\
+\x39\xf8\x6f\xff\xf8\x5e\xf8\xe2\x63\xf7\xc2\xef\xfd\xe4\x7b\xe0\
+\x8e\xcb\x5f\xf6\x9c\xdc\x90\xdd\x63\xdf\x83\x87\x94\xaa\xbe\xfb\
+\xcc\xf7\xbc\x58\x80\x62\xae\xc7\xbe\x4e\xa1\x35\x91\x54\x5e\xa3\
+\x73\xab\x64\xbb\x73\x26\x80\xf8\xbd\x94\x60\x5e\x82\xd4\x26\x46\
+\x18\x48\x15\x63\xcd\xdf\x22\x55\x8f\x45\xa7\xba\x2f\x8d\xd0\x6d\
+\xc0\x9b\xcd\x7e\x37\x2b\xc4\x58\xaa\xc5\x84\xab\x84\x30\xa5\xa4\
+\xcc\x8e\x1c\x5c\x97\x8e\x44\x7d\xdf\xb4\x9f\xbd\x0e\xdd\xa5\x0c\
+\xbc\xf6\x45\x83\x70\xed\xd6\x1e\xf8\xde\x33\x53\xf0\xe4\xbe\x69\
+\x28\xcf\x28\xe5\x46\xa9\x9c\xf7\x6f\xff\x1e\xdc\xb5\xf7\x31\x78\
+\xcb\x0d\xaf\x84\x77\xdd\xf6\x56\xb8\xfd\xb2\x5b\xbd\xd0\xd0\x4e\
+\x0e\x5d\x02\x6a\xd7\xd8\xc3\xf0\xf8\xc8\xbf\xc3\xbe\x89\x47\x3d\
+\x3f\xb3\x96\xe2\xc8\xf9\xc6\x31\x86\xb8\xad\x9c\x99\x5b\x73\x64\
+\x08\x8e\x89\x2f\xe7\x92\x4a\xd8\xe8\x35\x1b\xc1\x9a\x36\x78\x5c\
+\x3f\x35\x4e\x9a\x58\x70\x1d\x47\xe9\x29\x80\x71\x0b\x65\x02\x2c\
+\xb1\x05\x7b\x89\x33\x2a\x63\xe8\x74\x4b\x33\x3d\xa9\x4d\x8f\x95\
+\xe0\xdb\x1b\x45\xab\xf2\xf5\x46\x03\x56\x0d\xe7\xe1\xa7\x5e\x36\
+\x04\x2f\xba\xb2\x17\xb6\xef\x9f\x85\x67\x0e\xce\xc0\x89\xd3\x59\
+\x68\x94\xab\xf0\xe9\xfb\xbe\x08\x9f\x7e\xe4\xdf\xe1\x65\x5b\x6f\
+\x80\x7b\x6e\x7c\x35\xbc\xfa\xea\x3b\x60\xd3\xca\x8d\xa9\xdf\x80\
+\x4a\x7d\x16\xfe\xf1\xe9\xdf\x82\xbd\x67\x7f\xe8\xa9\xe7\x3a\x6e\
+\x3d\xd2\x68\xd1\x2c\xd8\x61\xc6\x81\x07\x13\x86\xcc\xe4\xa1\x44\
+\x80\x0b\x08\x4c\x00\x0c\xad\x2c\xce\x7b\x62\xde\x04\x53\x43\x8b\
+\xfb\x7e\x29\x22\x4b\x32\xd5\x5c\xd8\x6b\x8a\xaa\x3b\xf1\xf5\xb4\
+\x11\x12\x84\xc1\x4a\x37\xd9\xb2\xb1\x4c\xa9\x2d\x75\xe1\x24\x41\
+\xbd\x33\xb3\xe1\x42\x85\x2f\xc2\x9b\xb0\x56\xf7\xa5\xca\xca\xc1\
+\x1c\xac\xb9\xbe\x1f\x5e\x72\x55\x1f\x1c\x3f\x5d\x85\xc3\x23\x65\
+\x78\xf6\xc8\x1c\xec\x3d\x3a\x0d\xf7\xef\x78\x58\x49\xf9\xef\xc2\
+\x40\xff\x32\xb8\x76\xe3\xe5\x70\xeb\x85\x57\xc2\x2f\xdf\xf9\x8b\
+\xb0\x6e\xd9\x05\xa9\xdc\x80\x7c\xa6\xe8\x55\xab\xd1\x44\x5e\x50\
+\x52\x3c\x4c\xb4\xc4\xa0\xd2\xc4\x36\x68\x94\x83\x46\xe2\x2a\xa5\
+\x5a\x7c\xee\x26\xf3\x45\x09\xb0\x11\x40\x36\xb2\x08\x60\x89\x2b\
+\xb7\xfc\xe8\x64\x29\xff\x6c\xe2\x35\xae\x38\x64\x0a\x60\x1c\x2e\
+\x5c\xd2\xb3\xf6\x55\x8c\xfd\x4d\xc6\x7b\x56\xe6\x80\xd1\x0d\x6c\
+\x2b\xbb\x1c\xf9\xa2\xb0\xe4\xd0\xc8\xbc\x46\x95\xf5\x47\x37\xac\
+\x2a\xc0\xcb\xae\xed\x83\x9f\xbb\x6b\x19\x0c\xf4\x16\x14\x2b\x2c\
+\x79\x41\x36\x67\xe7\xa6\xe1\x3b\x4f\x3f\x08\xef\xfb\xcc\x9f\xc0\
+\xe7\x1f\xf9\x72\x6a\x37\x40\x47\xb7\x6d\x1a\xb8\xda\x6f\x08\x11\
+\x01\xc9\x38\x62\x14\x18\x69\xb0\xc7\xb8\x15\x25\x25\x0b\xb1\x72\
+\xb6\x2f\x08\x1d\x77\x80\x01\x55\x25\x65\x8e\x12\x99\x55\x51\x9c\
+\x05\x12\x30\x2f\x70\x44\x9e\x0a\xa1\x27\x09\xb0\x8a\x5d\x67\x03\
+\x55\x8d\xa4\x14\x06\x36\x68\xa8\x6f\x19\xca\x1d\x59\x31\xd0\xc0\
+\x2f\xc8\x24\xe2\xd0\x59\x4b\xce\x36\x35\xc3\x67\x35\xd1\xe7\xb3\
+\x19\x58\xa3\x54\xfb\x76\xbc\x7c\x56\x11\x7c\x97\x97\x09\xf7\xc3\
+\x43\x3b\x52\xbd\x09\x9b\x87\x6f\xf4\x22\xc5\xa8\x95\xd9\x27\x2d\
+\x2a\xca\x04\x25\xfd\x6e\x5a\x48\xd9\x5e\x8a\xf6\x4d\x03\xae\xa5\
+\x35\xd3\xde\xc9\xd6\x46\xd7\x16\xd6\x0a\x0b\xa9\xcd\xce\xb5\x07\
+\x5a\x8c\xe4\x71\x84\x6e\xdd\x03\x10\xd3\x5b\x81\x2f\x12\xc9\x11\
+\x34\x18\x99\x4a\x16\x62\x44\xb2\xdb\xe6\xa1\xec\x3a\x46\x2a\x71\
+\x80\x93\xd8\x5d\xb0\x19\x3c\xa2\xeb\xbe\xe5\x11\x56\xaf\x28\x44\
+\xa7\x94\x2f\xc0\x0f\xf6\x3d\x01\x95\x6a\x39\xb5\x9b\xb0\xa6\x67\
+\x0b\xac\xea\xde\xec\xf5\x4b\x0b\x71\x57\x32\x88\xdb\x96\x0f\x20\
+\x49\x4e\xae\xca\x0f\x59\xe2\x98\x23\x42\x9f\x2c\x08\x6c\x70\x7e\
+\x42\x9b\xa5\xe0\x77\x92\x21\xc9\x89\x12\x68\x1c\x71\xa6\x42\xf0\
+\x6d\x27\xd9\x97\xa0\xba\x2f\x40\xb2\x93\xa4\xee\xa1\xbd\xfb\x06\
+\x49\x69\x89\x8c\x1a\x29\x72\x15\xce\xfd\x22\xa5\x35\x72\xf6\x6d\
+\xf8\xbb\x74\x76\xd7\xe6\x55\x25\x3f\x92\x2e\x28\x4c\x74\xc5\xd4\
+\xd3\x47\x61\xe7\xb1\x5d\xa9\xdd\x04\x8d\xb0\x5f\xb9\xe2\x4e\xaf\
+\x6f\x5a\x94\x29\x06\xa4\x18\x02\x13\xdf\x8e\x61\xa6\x67\xc3\x49\
+\x4c\x66\x2b\xdd\x3c\x0c\x10\x22\x62\xf4\xf3\xc4\xf5\xb3\x17\xee\
+\x2b\x19\x18\x0d\x31\xe7\x73\xd2\xa4\x75\x5b\x38\x26\x4d\x8b\xd6\
+\x2d\x1d\xa1\x27\x1d\x52\x8c\x0b\x25\xfd\x30\xc5\xd8\x6a\x18\xdd\
+\x70\xb1\x9b\xd7\x72\xdf\xc9\x28\x49\x14\x34\x21\x42\xfd\xbb\xc3\
+\x9f\xd3\x75\xcf\x57\x0c\xe7\xa0\xb7\x37\x07\xf3\xcd\x41\xfd\xdf\
+\x9d\x81\xfa\xf4\x04\x3c\xb8\x27\xdd\x48\xba\xeb\xd7\xbc\x0e\x96\
+\x95\x2e\xf0\xb2\xbc\xd8\xb5\x22\x86\x48\x89\x4b\x2d\x34\xfa\x91\
+\xc7\xda\x5c\x5c\x2b\x29\x86\x39\x23\x44\x99\x29\xa2\xc5\x4c\x20\
+\xa3\xae\x00\x86\xb5\x33\x36\x13\x11\x63\x18\x92\xc5\x04\xf3\x99\
+\x60\xd9\x91\xf4\x52\x08\x5d\xea\x70\x6c\xdd\x47\xc4\x23\xaa\x84\
+\x81\x3d\x4c\x0b\xe4\xc3\xb8\x00\xdb\xcf\xdc\x50\xc1\x92\x56\x5c\
+\x81\x8b\xf0\xe7\xb5\x69\x3e\xd0\x9d\x85\x4d\x5e\xc7\xd6\x86\xb1\
+\x6a\x19\xf8\xe6\x33\x0f\xa6\x7a\x23\x74\xf7\x97\xdb\x36\xfc\xbc\
+\x47\xe8\x7e\x78\x0f\x0a\x1a\x11\x45\x25\x2c\x1b\x39\x96\x74\xad\
+\x18\x35\x0c\x89\x6f\xd0\x68\x03\xd6\x42\xd1\x72\x24\x33\x22\xb4\
+\x01\x79\x14\xc3\xc8\x84\xdf\xd6\x0e\xb3\x3d\xe9\x48\x7a\x29\x84\
+\x6e\xeb\x78\x9c\x18\xa1\xa3\x40\x81\x7e\x88\x02\x4e\xc4\x01\x49\
+\x02\x17\x20\x26\x2a\x6b\x41\x73\xe2\x12\x66\xa2\x48\xaf\x3e\x65\
+\xdb\xfa\xae\xa8\x5a\x9c\x2b\xc2\x03\x7b\x1e\x4b\xbd\x80\x85\xee\
+\xfe\x72\xcb\x9a\x37\xc2\x5c\x6d\x4a\xf1\x96\x0a\x43\xc0\x86\xed\
+\x14\x24\x2c\x14\x0a\x34\x48\xea\x7b\x28\xdc\xd4\x6c\xa9\x2c\x01\
+\x82\x64\x29\x01\x06\xd1\xd8\x08\xd6\x42\x40\xc6\xbe\x87\xb0\x7d\
+\x1f\x6a\xf8\x11\x13\x73\x1d\x06\x77\x47\x1c\x49\x2f\x55\xa2\x73\
+\x1a\x5f\xa2\x7c\x7f\x23\xa6\x9d\xab\x17\xc7\x02\x29\xc8\x00\x49\
+\x42\x6d\x6f\xce\x3e\xa5\x04\x9d\x3c\xc8\x54\x39\x03\x73\x55\xaf\
+\x69\x3f\xfb\x85\x6b\x8b\xd0\xdd\x93\xf3\xe3\xe2\xe7\x47\x36\x0b\
+\xa3\x63\x23\x70\xef\xf6\x74\xa5\xba\x8e\x84\x7b\xdd\xd6\x5f\x87\
+\xd7\x6e\x7e\x0f\xf4\x17\x56\x78\xb9\xdb\x95\xc6\x2c\x94\x6b\xd3\
+\xea\x98\x69\x1e\xd3\x6a\x2a\x35\xb9\xc7\x78\xa2\xee\x97\xa6\x6a\
+\x8c\x16\xcd\x4a\xea\xe0\x61\x0b\x56\x41\x1e\x4b\x21\x9b\x94\x08\
+\x68\x13\x88\x76\x75\x91\x88\xc3\x2a\x34\x67\xdc\xe7\x48\x9a\x1f\
+\x8b\xcb\x47\xa7\x04\x60\x1d\x26\xbc\x00\x5b\x27\x8c\x91\x10\x6c\
+\xac\x07\xc5\x24\xd6\x48\xe8\x21\x86\xa5\xba\x10\x77\xa1\x35\xf6\
+\xe1\xbe\x1c\x6c\x5a\x53\x84\xed\x3a\x2f\xd3\x88\xcf\xfe\xf4\x0f\
+\xbe\x0c\x6f\x7d\xf1\x1b\xd3\xe5\xbc\x99\x1c\xbc\x54\xa9\xf0\xd7\
+\xae\x7e\x2d\x1c\x18\x7f\x1c\x0e\x4d\x3c\x03\xc7\xce\x8c\x78\x29\
+\xa2\x7a\x94\x94\x36\x31\x03\x07\x61\x64\x7a\xaf\x9f\xcd\x16\x89\
+\x60\xe3\x7e\x37\x0a\x12\xd2\xc6\x04\x49\x6e\x05\x8d\xc1\x9e\x78\
+\x8c\xed\x1e\x49\x31\x46\x88\x96\xb5\x8a\xf9\x9e\xd0\xfd\x8d\xab\
+\x04\xec\x31\xfa\x83\xea\xbf\xc3\x8e\xa4\x97\x4a\xe8\x4c\x59\x6d\
+\x6b\x48\x35\xd9\x3e\x2c\xb9\x47\x2c\xc4\x8a\x92\x1a\xc9\x55\x9e\
+\x31\x36\x22\x49\x58\x80\xa0\x0a\x07\x5c\x75\x3a\xcc\xfd\xaa\x8b\
+\x7a\x60\xfb\x5e\xa3\x9c\x52\xbe\x08\xf7\xee\xfc\x1e\xec\x3e\xbe\
+\x07\xb6\xae\xd9\x92\xfa\x8d\xe9\x2d\x0c\xc3\x15\x2b\xef\xf0\x0e\
+\x73\x7c\x65\xcf\x5f\x78\x15\x5b\xb2\xc1\x4e\xae\x56\x42\x5e\xa0\
+\x6f\x94\x2c\x9f\x63\x03\xeb\xcc\xe4\x22\xe1\x03\x5c\x20\x14\x17\
+\x0e\x1d\xc2\x15\x24\x61\x12\x31\xb5\xb6\xab\xd7\xf6\x3b\x92\x4e\
+\xc3\x46\x8f\x25\x4a\xe6\xa6\x90\x64\x2b\x4a\x45\x28\x78\x6d\x5d\
+\xb6\x0b\x31\x0a\x38\x99\x6a\x9d\x09\xc2\x59\xed\xbd\xb0\x59\xa1\
+\x03\x68\xb6\xae\x2b\xc1\x8a\xe5\x45\x1f\xa1\x9b\x7f\x3b\x93\x85\
+\xe9\x89\x31\xf8\xf8\x77\x3f\x7f\xce\x6f\x5a\x5d\xab\xee\x22\x01\
+\x1a\x40\x18\x51\x32\xf5\xde\x54\x87\xd1\xa6\xc2\x93\x01\x74\x1a\
+\x6d\x8c\x6d\x6b\x0c\xa6\xb9\x04\x42\x5a\x2c\x17\x27\x60\x55\x17\
+\x1f\x51\x27\xcc\x3a\x92\x5e\xaa\x8d\x9e\x10\x00\x8d\x10\x28\x82\
+\x6c\xa3\x71\xdd\x5c\x88\x09\x67\x35\xa3\xea\x4c\x29\x46\x46\x53\
+\x47\x96\x21\x70\x1b\xdc\x16\x96\xeb\xff\xed\x37\x26\x44\xb8\x61\
+\x5b\x8f\x5f\x3c\x31\x38\x0a\x45\xf8\xff\xbf\xfb\x05\x38\x3d\x79\
+\xfa\x39\xb8\x75\xd2\xcd\x30\xa4\x3b\xa2\x85\x11\x70\x12\xd4\x02\
+\x94\x81\xb1\xd6\xe6\xf5\x5a\x99\x6f\x46\xcd\x81\xd0\xfd\x33\x22\
+\x20\x43\x04\x8e\x4c\xb8\xad\xd0\xe0\x23\xfa\xbb\xef\x75\x6e\xf4\
+\xb4\x24\x3a\x0a\x0c\x57\xb2\xcf\xcd\x84\x0c\xb4\x04\xcf\x04\x6f\
+\xa4\xe9\xbf\x45\x8e\xeb\x70\xc4\x4e\xe1\xe2\x08\x5c\x61\xc1\x24\
+\xea\x8a\x81\xe2\x57\x6b\x0d\xb8\xfa\xa2\x6e\x18\x9c\x0f\x89\x6d\
+\x75\x6c\x2d\xc0\xb1\x13\x07\xe0\x6f\x3a\xd8\xb1\x55\xb4\xa2\x30\
+\x89\x4a\x65\xe1\xbe\xa6\xbb\x2e\x92\x18\x43\x4c\xf4\x5d\xd0\x26\
+\xa6\x18\x20\xcf\x78\x9f\x8d\xb6\x33\x18\x0b\x42\x4c\x24\x24\x48\
+\x66\xdc\x2e\x75\xee\x13\xae\xf0\xc4\x52\x08\x3d\x61\x85\x1f\xb0\
+\x01\xaa\x12\x95\xb1\x85\x26\xa4\xc4\x0b\xb4\x17\x5c\x88\x84\xc0\
+\x12\xd8\x53\x21\xcd\x8d\x8a\x06\x76\xd4\x36\x01\x34\x0e\x36\xd0\
+\x9b\xf5\xb2\xdb\x3c\xa9\x1e\x3c\xaf\x50\x82\x0f\x7d\xf3\xef\xe1\
+\xe8\xd8\xb1\x73\x27\xcb\xc9\x54\xcd\x29\x81\xca\x2c\x55\xa6\xb1\
+\x48\x6d\x6e\xdd\x30\xee\x3b\x18\xc0\xcd\x6c\xc8\x81\x36\x97\xa9\
+\x91\xb2\x1c\xeb\x3a\xf5\xde\xff\x57\x75\xcd\x59\x17\x02\xbb\x14\
+\x42\x8f\x53\xd7\x31\x4e\xa0\x10\x63\x9b\x31\xea\x35\x4a\x3e\x75\
+\xb4\xa8\x16\xc2\x66\xa3\x45\xe6\x63\xa3\x19\x4e\xdb\x9e\xa3\xee\
+\xed\x76\xc3\xc5\xbd\xb0\x71\x5d\x57\xbb\x63\x6b\xb3\x39\xa1\xee\
+\xc3\xfe\x7b\x5f\xf8\xf3\x73\x27\xd1\xcd\xaa\xa9\xb1\x1c\x39\x81\
+\x5d\x6e\x95\x9c\xb6\x56\x3d\x12\xf6\x62\x61\x1a\xa6\xa6\x80\x96\
+\x84\x97\x20\x5e\x10\x64\x70\x6d\x57\x68\x55\x9d\xf3\x49\x47\xca\
+\x69\xa8\xee\x49\x98\x01\x25\x7c\x2d\x68\x2f\x4b\x31\xd7\x62\x59\
+\xa1\x60\xab\x5c\xb2\x83\x7b\x22\x60\x80\xf6\xc9\x12\x45\xed\xd7\
+\xa6\xad\xae\xcb\x47\xbf\xe6\x96\x41\x28\xea\x96\xc3\xa1\xde\x6e\
+\x3d\xf0\x77\xf7\x7f\x16\x3e\xf7\xc8\x97\x9e\x03\xeb\x1c\x21\x91\
+\x6d\x4a\x0c\x56\x21\x85\xa1\x26\x4a\x55\xc4\x64\x8a\x1b\x02\x24\
+\x2a\x5c\x10\xa9\x56\x93\x58\x0d\xff\x9a\x3a\x9e\x74\xa4\xdc\x09\
+\x42\xb7\x55\x31\xe2\xa4\x6f\x04\x05\x37\x22\xa0\xc4\xf0\x4d\xae\
+\x57\x76\x10\xd8\x63\xb4\x81\x48\xf4\x56\x48\xdf\x85\x58\x17\x42\
+\x08\x71\x0e\x5f\x4b\x23\xf0\x3a\x5f\xfd\x95\x37\x0f\x86\x81\xbf\
+\x0c\x42\x5d\x9d\xf7\xee\x4f\xfc\x1e\xec\x38\xb2\xf3\x1c\x1a\xea\
+\xcc\x7a\x8b\xc9\x3b\xf2\x92\x2e\x38\xc5\x93\x24\x33\xc8\x9c\x87\
+\xd9\x30\x53\x52\xdd\x39\xcf\x00\x5a\x4c\x87\x96\x86\xa1\x83\x0b\
+\xde\x0f\x2e\x47\xb5\x83\x12\xdd\x52\x6f\x20\x02\x80\xa1\xe0\x1b\
+\x45\xae\x86\x18\x57\x90\x42\xa8\x46\x2a\x6d\x6a\x53\x6a\x51\x64\
+\x83\x08\x48\x22\xca\x00\x52\xf3\x0f\x5d\x02\xf9\x96\xcb\x7a\xe0\
+\xf6\x9b\x86\xfc\x64\x97\xf9\x73\x72\x45\x38\x3e\x76\x02\xee\xf9\
+\xbf\xef\x81\x63\x1d\xb6\xd7\x51\xb2\x6d\x83\x68\x3b\xc5\xd8\xed\
+\xc4\x68\x32\x91\x9b\x4b\xbc\xd6\x13\x97\x6c\x14\x09\xc9\xc5\x04\
+\x8d\x26\x2c\xd5\x67\x59\x86\xee\x5d\xeb\xcb\xea\xb8\xcf\xb5\x65\
+\xea\x14\xa1\xc7\x6a\x76\x14\x6f\x37\x8a\x71\xd0\x96\x2f\xa4\xb8\
+\x94\x54\x4e\xb5\x94\xaa\x97\xc6\x25\x6c\x10\x9b\xdf\xde\xf0\x24\
+\x3b\xc0\xdd\xd7\xf5\xc3\x1d\x37\x0f\xfb\x97\xa9\x35\x37\x67\xb1\
+\x1b\x9e\x3c\xb0\x1d\x5e\xf9\xfe\x5f\x80\x27\x0f\x3e\x7d\x6e\xf4\
+\x77\xb3\x9c\x92\xb5\x87\x99\x99\x11\x87\x51\xa0\x93\xab\x9b\xce\
+\x01\x62\x91\x14\x52\x94\x99\x48\x12\xcd\x81\x20\x46\x72\x44\x4c\
+\x06\xed\x33\xff\x5d\x47\xc2\x69\x11\x3a\xc6\xa8\xee\xe6\xb9\x24\
+\xa9\x5d\x66\x66\x93\x79\x63\x2d\x69\xa9\x44\xd1\x02\x84\x44\x72\
+\x76\x93\xd8\xae\x87\x20\x92\x0a\x69\x9a\x17\x12\xd3\x69\xbe\x8f\
+\xba\x74\xb4\x3a\x2a\xca\x46\x7f\xc5\xb5\x7d\x70\xcf\x5d\x2b\x60\
+\xb0\x3f\xaf\x44\x7d\xb3\x4e\x7c\xa9\x1b\x9e\x3e\xf4\x2c\xbc\xe2\
+\x8f\x7f\x16\x3e\xf2\xad\xbf\xef\x88\x94\x21\x5b\xcc\x38\x97\x8e\
+\x6b\xba\x24\x39\xe9\x6a\xe2\x26\x66\xd1\x0b\x2e\xbf\x80\x84\x4d\
+\x21\xa2\xea\xb6\x8a\x41\xe6\x77\x09\x1a\x45\xfb\x3e\xfd\xa1\x3a\
+\xf1\x89\x68\x5f\x6f\x37\xd2\x91\xe8\xb6\x5e\x0b\x64\x03\xc1\x38\
+\xc0\x05\xa3\xc4\x1c\xe9\xba\x8a\xbc\x2f\xdd\xea\x47\xe6\xea\x8e\
+\xc5\x01\x76\x1c\xd3\x32\x03\x3d\xfc\x79\x63\x13\x9c\x9b\xf7\xaf\
+\xbf\xeb\x0d\xab\xe0\xb6\x1b\x06\xa1\xb7\x3b\xeb\x13\x7c\xb6\x04\
+\xa7\x26\x27\xe0\x5d\x1f\xfd\x2d\xb8\xeb\x4f\x7e\x0e\xbe\xf2\xd8\
+\xd7\x53\xad\x48\xa3\x5b\x1d\x51\x44\x03\x61\xe2\xc1\x89\x03\xd9\
+\x88\x61\x88\x14\x05\x37\xd9\x52\xce\x68\x51\xed\x39\xb7\x9d\x60\
+\xa6\x11\xc7\x64\x38\x1c\x45\xaa\x18\x04\xf7\xa9\x73\xdf\x1f\xae\
+\x29\x40\xae\x81\x83\x65\x2c\x3e\xd6\xdd\xa6\x8d\x91\xb9\xb1\x88\
+\xd7\xae\x43\x82\xc0\xe6\xb3\x43\x19\x38\xb3\xaa\x1a\x42\x96\x0d\
+\xa7\xca\x87\x92\x67\x02\x01\x3e\x6c\x82\x86\xbf\x29\x49\xbd\x5e\
+\xae\x36\xa0\xaf\x2b\x03\xaf\xba\x65\x10\x6e\xba\xac\x0f\xb6\x1f\
+\x9c\x81\x9d\x07\x67\xe1\xc4\x58\x0e\xa6\x66\x6a\xf0\xcd\x47\xef\
+\x83\x6f\x3e\xfe\x20\x5c\xb9\xe9\x72\x78\xfd\x35\x77\xc0\x5d\x57\
+\xbc\x0c\xb6\xac\xdc\x08\xab\x07\x57\x41\x36\x97\x4c\x02\xcd\xd5\
+\x26\xbd\xd4\x55\x5d\xff\xfd\xcc\xec\x71\x38\x31\xbd\xd7\xab\x1c\
+\x6b\x6d\xb2\x80\x49\x18\x1b\x32\xbf\x9f\x8b\x61\x10\x34\x20\x2e\
+\x81\x26\x51\x41\x56\xf3\x3e\x9a\x4a\x17\xf7\xbb\x5a\x27\x1e\x22\
+\xa2\x5f\xd4\xcb\xe2\xc8\xb7\x13\x84\x4e\x96\xfb\x25\xed\x07\xb3\
+\x1b\x6a\xa4\xa0\x41\x5c\x7d\xaa\x04\xbb\xc6\xd6\x8c\xb1\x35\x07\
+\xce\xe6\x86\x18\x69\x24\xb5\x80\x8a\xda\xc6\x7e\x9d\x78\x80\xfe\
+\x9e\x2c\xbc\xe4\xca\x7e\x78\x91\x22\xf8\xf1\xa9\x3a\x9c\x38\x5b\
+\x85\xb3\x93\x35\x18\x9b\xa8\xc1\x99\xa9\x43\xf0\xf1\xc7\xff\x06\
+\x3e\xb7\xe3\x13\xb0\x61\x70\x39\x5c\xb8\xf2\x42\xd8\x38\xbc\x1a\
+\x56\xf4\x0c\xc0\xb2\xbe\x61\xd8\xb8\x62\x1d\x74\x15\xba\x60\xa6\
+\x32\x01\xb3\x8a\xb0\xa7\xaa\x63\xde\x31\x31\x37\x0a\xd3\xb5\x31\
+\xaf\x53\xe9\x6c\x6d\x5a\x7f\x9b\x52\xc3\x72\x81\x8e\xaa\x1c\x9a\
+\x1d\xd3\x73\xcd\xd6\x05\x07\x0d\x13\xc7\x0c\x39\x4e\x52\xb8\x86\
+\x0d\x97\xe4\x2a\xd9\x32\x20\x28\x32\x66\x5a\x7b\xae\xa7\xd4\x71\
+\x8f\x3a\x0e\x3a\xd2\x4d\x9b\xd0\x29\x81\x76\x8c\x20\x57\x24\x46\
+\x99\x40\x16\x56\x80\x5f\xd8\x34\x18\xa7\x72\x40\xcc\x77\x18\x2a\
+\x2f\x22\x6f\xb3\xc6\x6e\x68\xbf\xce\x5c\x5d\x53\xbc\xfa\xcc\x40\
+\x6f\x06\x86\xfb\x4b\x01\x9d\x66\x40\x7d\x05\x7a\x65\x9d\x6b\xf5\
+\x1a\x54\xeb\x3b\x60\xa2\xf1\x0c\x4c\xd6\x10\xf6\x9d\x41\xf8\xd1\
+\x38\x06\xae\x4a\xad\xff\x33\xea\x0a\x99\x4c\x56\xfd\x9f\x53\x2a\
+\xbb\x32\x0d\x28\xbb\xc0\xa5\x32\x19\x21\xe3\x7e\x44\x61\x4d\xb8\
+\xe2\x1c\xc8\xdd\x0b\xf3\xa3\x31\xeb\x1d\x1b\xcb\x64\xd4\xee\xf7\
+\xb5\x93\x51\xf5\xdf\x4f\xa9\xdf\xf3\xb0\x23\xdb\x4e\x49\xf4\xb8\
+\xe2\x9c\xb1\x02\x98\xd1\xd9\xc9\xa2\x16\x10\x08\xe1\xb0\xcc\xc4\
+\x88\x2c\x8a\x01\xca\x14\xc0\xf9\xf6\xd9\x00\xfe\x24\x9d\x41\xa2\
+\xa9\x98\xf3\x52\x3e\x64\xb6\xb4\xcc\x4c\xdd\x4e\x58\x11\x6c\x16\
+\x17\xc0\xd4\x4c\x22\x8d\x0b\x53\x0d\x6a\x24\xc1\x35\xe5\x62\xc9\
+\x17\x82\xb8\x9a\x9c\xdd\x96\x05\xc8\x78\x04\x90\x2c\x8c\x59\xf4\
+\xcc\xec\x50\xef\xfd\xbc\x7a\xfc\x91\x23\xd9\x4e\x82\x71\xb6\xf2\
+\xd9\xb6\xe6\x9e\xec\x85\x84\x2a\xa6\x9c\xcd\xd6\x22\x12\x94\x41\
+\x35\x0c\x72\x7d\x09\xa2\xe6\x32\xe6\x0c\x10\x90\x0c\x44\x1e\x05\
+\xe0\x28\x42\x20\x5c\xcb\x66\xc6\x27\x6f\xad\x8d\x2e\x95\xbd\x36\
+\x10\xf1\x44\x48\x28\x87\x40\x0b\xdd\x4f\xd1\x16\xa6\x1a\x41\xca\
+\x20\x92\x69\xc6\xae\xb5\xa5\x0e\x7c\xb0\x6d\x94\x35\x86\x3d\xc8\
+\x44\xf0\xe3\xea\xbf\xdb\x1d\x91\x9f\x2b\x1b\x9d\xdb\xa3\x71\x26\
+\x18\x27\xf1\x82\x76\x1f\xc6\x6d\xdc\xc0\x06\x21\x88\xf7\x9b\x73\
+\x15\x67\x42\x15\x4a\x24\x00\x8e\x78\x02\x36\xbf\x13\x2d\x5d\x4d\
+\xcc\x9e\x67\x5c\xe7\x98\x60\x8c\x37\x57\x6f\x9e\xb8\x6c\xbb\x00\
+\xb6\x81\x49\xd0\x51\x46\xb2\xb6\xcc\x12\x09\x6b\x08\x97\xd0\x8a\
+\x68\x38\xd2\x3d\x23\xa9\xf8\x87\x14\x13\x8f\x42\x0f\x36\x56\x3b\
+\x78\x44\x1d\xff\x5b\x1d\x5f\x70\x64\x7a\xae\x09\x3d\x0e\x9c\x13\
+\xb5\x66\x12\xa4\xb5\x51\xd5\x04\x4d\x17\x91\x2d\x6c\x52\x28\x8c\
+\x18\x45\x69\xc3\x2a\x23\xb7\x51\x51\x68\xe7\x8b\x36\xf0\x8f\xf9\
+\x7d\x1c\x62\x2f\xae\x0d\x67\xff\x32\xaa\xb5\x2d\xe3\x2b\xa2\x55\
+\x08\xa1\xc0\xd8\xd4\x8a\x92\xfc\x1e\xb6\xe1\x85\xd4\x05\xd7\x72\
+\x8f\x38\xbc\x35\x12\x0b\x11\x5a\x0b\x0d\x6e\x68\xb0\xed\x5e\x75\
+\xde\xe7\xd4\xe3\xbf\xaa\xa3\xe6\x32\xd2\xce\x15\xa1\xc7\xd5\x6f\
+\x67\xf7\x58\xb0\x82\xab\xc9\xd1\x19\x26\x40\xc0\xa0\xac\x1c\xa4\
+\x6f\x22\xbf\x8c\x5f\x98\x93\x18\x28\x00\x49\x68\xaa\xea\x36\xc4\
+\xd1\x06\xce\x09\x15\x59\x24\x66\x45\xd4\x66\x3c\xac\xa4\x16\x42\
+\x4d\x89\x84\x6c\x35\x8b\x3b\x91\xc8\xd2\xdc\x81\xec\xf1\x08\x11\
+\x1c\xc3\x2c\x19\xc5\x31\x5b\x46\xf2\x47\x93\x94\xce\xaa\xa7\xa7\
+\xd5\x39\xcf\x80\x57\x02\x0a\xf6\xa8\x93\x9e\x55\x8f\x3a\x9c\xf0\
+\x8c\x23\xcb\xe7\x82\xd0\x29\x86\xd8\x59\x75\x9d\x89\x72\x23\x10\
+\x22\xdf\xa4\x1a\x63\xc8\x70\x7d\x53\x44\x08\x92\x4f\x94\xba\x08\
+\x6c\x94\x18\x67\x77\x06\xb5\x0a\x6b\xbb\x1f\x49\x6d\x8d\xc3\x15\
+\xb8\xce\xa8\x71\xa6\x83\x45\x6b\x91\x34\x1a\xab\xb9\x63\xbb\xa1\
+\x4c\xb5\x5e\xce\xcf\x1d\x24\xf6\x20\x73\xf7\xbf\x7f\x5c\x3d\x3f\
+\xa9\x1e\x0f\xaa\xc7\x67\xd4\x6b\xba\x69\xdd\xbe\xe6\xa1\x0b\x39\
+\x56\x1d\x09\x9e\x4f\xaa\xbb\xa5\xe2\x2f\xcb\x10\x42\x71\x32\x81\
+\x82\x81\x41\x9b\x31\x82\x12\x73\xd0\xb9\x69\x27\x0a\xd5\x46\x91\
+\x78\x55\x9c\xe3\x54\x41\xc6\xc1\x9e\x0f\x7c\x59\x29\xa9\x02\x29\
+\x1b\x93\x83\x31\x9c\xd0\xd6\xcf\xdd\x64\x70\xb6\xd2\xba\x71\xbe\
+\x70\xb0\xaf\xa9\x78\x3d\xe6\x5e\xa0\x25\x48\x06\x71\xca\x23\x5c\
+\x84\x23\xbe\x84\xc6\xa7\xd4\x39\xfb\xd5\x71\x08\x7c\x9f\xb7\x23\
+\xe8\xe7\x2d\x18\x17\x27\xe9\x81\x51\x85\x31\xb0\x11\x83\x6a\x61\
+\x50\x95\xb5\x01\x4c\xa6\x7f\xd8\x66\x66\x44\x5c\x3c\x42\xc4\x18\
+\xd9\xfa\x8d\x0b\xfe\x64\x32\xec\xdf\x85\x00\x16\x2c\xb0\x25\x11\
+\xa3\xd4\x3e\x9a\x53\xe7\x05\x22\xb5\x01\xa6\xb1\xd5\x62\x22\xbf\
+\x75\xd6\x23\x68\x52\x04\x8d\xb0\x1b\xbc\x3c\x70\x52\x2a\x37\x1e\
+\x55\xcf\x0f\x80\x8b\x56\x7b\x9e\x13\xba\x69\x2a\xc7\xd6\x11\x48\
+\x98\xf7\x2d\xc6\x4a\x07\x7c\xae\x12\x18\x15\x11\x5a\x24\xd8\xfc\
+\x00\x7c\xa4\x96\x8d\xd0\xe2\xd6\xc3\x2c\x77\x04\x7c\x74\x5e\x84\
+\x08\xb9\x1a\xf2\x52\x17\x59\x93\x91\x08\x36\xb0\x99\xda\x69\xeb\
+\xa4\x62\x03\xb6\xc2\x80\x59\xd9\x97\xc6\x78\x40\x3d\xd7\x6a\x76\
+\xd3\x96\xd6\x75\xd3\x69\x44\xbd\x36\xe1\x48\xe7\x85\x2a\xd1\x39\
+\x20\x96\xd3\x04\x89\x01\xb4\x44\x00\x0e\xa2\x1d\x3b\x93\x20\xc5\
+\x26\xb3\x40\x5b\xe9\x63\x09\xb4\x02\x8b\x4a\x4c\x16\xbb\xd6\x04\
+\xa2\x4c\x42\x03\x81\x99\x19\xe0\x1b\xa2\x5d\xfd\x16\xb1\x08\x4e\
+\xa5\x32\xc3\x8b\xe3\xba\xa5\xb6\xde\xd7\x75\xa3\x95\x34\xa6\x3d\
+\xea\xe5\xfd\xea\x94\x67\xd5\x7b\xba\x7b\xa4\xae\x8f\xae\x4b\xdb\
+\x3a\x82\xfe\xb1\x21\x74\x8c\x51\xdf\x01\xe2\xdb\x33\x71\xd2\x2e\
+\x88\xe4\xb2\xc8\xb0\x25\xfc\x94\x8b\xc1\x86\x80\xdd\x2d\x99\x0f\
+\x5c\xfb\x5e\xf1\x3b\x80\x37\x27\x42\xf4\x65\xd3\x50\x48\x52\x7f\
+\xa3\x0b\x49\xc4\x37\x51\x64\x19\x98\xc5\xbe\x37\x7d\xe2\xed\xcf\
+\xcf\x79\x84\xeb\x11\xb2\xa7\x72\xef\x55\xd7\xdf\xae\xde\xd7\x48\
+\xf7\x68\x13\x34\x73\xd4\xe0\xc0\x38\xcb\x6b\x62\x03\x46\x21\xf2\
+\x8d\xc0\x40\xc6\xd1\xde\x46\x28\xb6\xc1\x7d\x92\x10\x55\x81\xa8\
+\x6d\x2e\x2e\xa9\x6e\x1d\x32\xde\x00\xd3\xad\x67\xa2\xef\x71\xa5\
+\x90\x39\x9b\x04\x39\xc9\x8e\x32\x8e\xe0\x6b\x3f\x73\x3e\xd1\x6a\
+\x77\x95\xa7\x6e\xeb\x32\xc8\xbb\xd4\xb9\xbb\xd4\xeb\xc7\xd5\x49\
+\x93\x6e\xcb\x3b\x42\x8f\x07\xe0\x38\x93\xd2\x1a\x11\x67\x4a\x43\
+\xe2\x89\x9d\x62\xdc\x4c\xac\x86\x20\x11\x94\x25\x76\x9a\x05\xe0\
+\x6c\xae\x38\x86\x18\x43\x34\x27\x14\x62\x43\x09\x18\x33\xfb\x96\
+\x19\xf1\xe8\x52\xd3\x82\xe8\x04\x66\xd5\xe3\xe9\xa6\xcd\xac\xfd\
+\xd0\x3b\x3d\x29\x0d\xb8\xc7\x47\xbb\x3d\x14\xdc\x0d\x37\x16\x24\
+\xd1\xb3\xec\x7e\x43\x88\xf1\xa7\x93\x45\x85\x47\x19\x38\x32\x93\
+\x59\x50\x08\xb2\x89\xa4\x90\xda\x08\x5c\x02\xca\x62\xe2\xcf\xb9\
+\x3e\x5f\x28\x9c\xc7\xd9\xf1\x11\x8d\x82\x17\xce\x61\x53\x24\xc4\
+\x18\x74\x29\xe3\x11\xf5\x78\xb4\xe9\x83\x7e\xc6\x27\x66\x38\xa0\
+\x4e\xdb\xaf\x84\xf8\x84\x8b\x1b\x73\x23\x2d\x42\x9f\x8a\x55\xe7\
+\x63\x04\x70\x3c\x0e\x20\x35\x72\x90\x24\x2e\xf2\x80\x55\x2b\xa8\
+\x03\x99\xc2\x0b\x16\xb4\x5d\x6c\xdb\x9c\xd0\x2c\x40\x30\x80\x30\
+\x8c\x6a\x32\xa6\x8d\x1e\xfc\x4e\xc4\xba\x7a\xe1\xb8\x3a\xef\xb8\
+\x7a\xae\x6d\x68\x1d\x21\xb6\x43\x3d\x3f\x0c\xbe\xdb\xea\xb4\xdb\
+\xaa\x6e\x74\x9a\xd0\xdf\xa7\x0e\x5d\xe5\xe0\x9d\x56\x42\x36\x25\
+\x54\x24\xb9\x03\x04\xb5\x54\xaa\x67\x06\x06\x58\xc5\x00\x51\xc4\
+\x94\x9c\x02\x4a\xde\xb2\x59\x92\xcc\x28\x31\x07\x9b\x7f\x3f\x26\
+\x4e\xbd\x0d\xee\x1d\x51\x4f\xe6\x03\x49\xb4\x1d\xfd\x94\x3a\x0e\
+\xa9\xf7\x75\xe9\xd8\x93\x6e\x4b\xba\xf1\x5c\x11\xba\x92\x32\xf0\
+\x2e\xb5\x11\xe7\xd4\xf1\x2b\x89\xd4\x76\x44\x59\xf5\x8d\x48\x52\
+\x0e\x00\x48\x1a\xc0\x61\x89\x3a\x0b\xa9\xc4\xc1\x00\x14\x46\xda\
+\x23\x44\x41\xb3\x60\x82\x4a\xac\x9a\x1f\x78\xbd\xcd\xd8\x74\x82\
+\xc6\x3e\xf5\x82\xee\xdb\xbd\x4b\x5d\xeb\x09\xf5\xf7\xb3\x1e\x31\
+\x13\x9c\x70\x5b\xcf\x8d\xf3\x8d\xd0\xfd\x5d\x8c\xf0\x6e\xf5\xff\
+\x59\xf5\xfc\xb7\x63\x55\x75\xb2\xd8\xb3\x1c\x30\xc6\x69\x04\x68\
+\xf3\x23\xdb\xae\x27\xe1\x68\xc8\xcc\xc9\x90\xe2\xc1\xef\xe5\x7c\
+\xfb\x91\x48\x35\x9d\x71\xe5\x25\x61\xec\x6b\xda\xce\x7b\xd5\x7b\
+\xdb\xd5\x39\xda\x9e\x1e\x01\xdf\x75\x55\x73\xdb\xcc\x8d\xe7\x0b\
+\xa1\xcf\xef\xf3\xdf\x51\x34\x70\x46\x3d\xbe\x3f\x94\xab\x41\x36\
+\x6a\x33\xa5\x22\x31\x69\xa3\x5c\x81\x02\x88\x06\x97\x98\x8c\xc3\
+\xac\x6d\x4e\x52\x89\x67\xc9\x55\x60\x9e\x2e\xd5\xc6\x22\x65\x43\
+\xe3\xa4\xa7\x6e\x6b\x50\x8c\x60\xa7\x9a\xa3\xb2\xa5\x71\xbb\x7a\
+\x4f\xc7\x77\x6b\x06\x58\x5d\x70\x84\x9d\x1b\x6e\x9c\x97\x84\xee\
+\xd3\xc0\x9f\xa9\xff\xcb\xea\xf1\x2f\x40\xaa\x50\x63\x0b\x90\x09\
+\x75\x70\x01\xc1\xee\x95\x8a\x1d\x32\x7e\x76\xb3\xbe\x98\x15\x3c\
+\x00\x8b\x76\xe0\x8d\x7a\x93\x68\x8f\xab\xeb\x6d\x6f\xaa\xda\xda\
+\x6d\xb5\x53\x7d\x40\x3f\xea\xf7\x2a\x6e\xdb\xb8\xf1\xc2\x27\x74\
+\x9f\xee\x3e\xac\xfe\xd7\x76\xe6\x27\xc0\x07\xea\xa2\x12\x1d\x31\
+\x01\x02\x2f\xc4\xc3\x4b\xaa\x7b\x88\xe8\x89\x67\x1e\x41\x95\xdc\
+\x16\x0a\x8b\x5e\xa4\xd8\x88\x92\xcc\x5a\xcd\xd6\xea\xb6\x56\xbd\
+\xf7\xa8\x6b\x2a\x82\xf6\x50\xee\xba\x8b\x16\x73\xe3\xc7\x9b\xd0\
+\xfd\xf1\x59\xd0\xa1\x95\x08\x1f\x57\xf4\x30\x24\x4b\x4c\x1b\x30\
+\x27\xb8\xae\x6c\x95\x58\xe7\xe3\xdf\x13\x55\x3b\xf1\x2e\x30\xea\
+\x33\x25\x1d\x48\xa2\xdd\x56\xa8\x09\xfb\x80\xfa\x4e\xfd\xf7\x11\
+\x70\xd4\xec\x86\x23\xf4\xd8\xf1\x6f\x8a\x4c\xde\xa8\x68\xeb\x9f\
+\xd5\xf3\x65\xe1\xc0\x11\x34\x02\x49\xb8\x0a\xab\x31\x89\x1d\x91\
+\x92\x4b\x28\x54\x91\xf1\xde\xd7\x52\x58\xa7\x4b\x1e\x56\x6f\x3e\
+\xe3\x13\xb5\x97\x9c\x71\xb8\x79\x34\xdc\xed\x76\xc3\x11\xfa\xe2\
+\xc7\x77\x14\x9d\xdd\xad\x1e\x75\x9d\xaf\x4d\xb2\x6d\x6f\x21\x6e\
+\x64\xa4\x3a\x81\x94\xe1\x35\xa1\xfe\xd4\x29\x94\x5a\x1a\xef\xf4\
+\x08\x9a\xbc\xe0\x92\xa3\xea\x1a\xc7\xd4\x7b\xae\xc8\x81\x1b\x6e\
+\x74\x80\xd0\xf5\x78\x54\x11\xd8\xeb\xd5\xe3\x67\xd4\x71\x89\x9c\
+\xca\x86\x31\xaa\x76\xc0\x6e\x47\x9c\x06\x3f\xa8\x64\xaf\xa7\x66\
+\xfb\xf5\xc5\xd4\xa1\x88\x19\x50\xe3\x03\x33\xee\xf6\xb9\xe1\xc6\
+\xb9\x25\x74\x3d\x74\x84\xd7\x2b\x15\x9d\xfe\x8b\xb2\xa3\xaf\x89\
+\xef\xc8\xd1\xb2\xdb\x75\x91\x03\xad\x6e\xeb\xd0\xcf\xdd\xbe\x74\
+\xf6\xd4\x6e\x4d\xe4\x63\x8a\xc8\xa7\xdd\x6d\x72\xc3\x8d\xf3\x87\
+\xd0\xf5\xd0\xa1\x9d\x3f\xa1\x8e\x4f\x2a\x1a\x7e\xb9\x21\xd4\x15\
+\xc1\xd2\x09\xaf\xda\x27\xd1\x6e\x25\xa1\x75\xa6\x95\xee\xc0\xb1\
+\x4b\x9d\x37\xa6\x88\xdb\x65\x5c\xb9\xe1\xc6\xf3\x84\xd0\xf5\xd0\
+\x99\x56\x3f\x59\xc8\xe2\x1f\x93\x5f\x14\x50\xa3\xdc\x7b\xbc\xbc\
+\x68\x8d\x7e\xfb\x75\xc7\xdc\x70\xc3\x8d\x73\x38\x90\x5c\x4f\x69\
+\x37\xdc\x78\xc1\x8f\x8c\x5b\x02\x37\xdc\x70\x84\xee\x86\x1b\x6e\
+\x38\x42\x77\xc3\x0d\x37\x1c\xa1\xbb\xe1\x86\x1b\x8e\xd0\xdd\x70\
+\xc3\x0d\x47\xe8\x6e\xb8\xe1\x86\x23\x74\x37\xdc\x70\xc3\x11\xba\
+\x1b\x6e\xb8\xe1\x08\xdd\x0d\x37\x1c\xa1\xbb\xe1\x86\x1b\x8e\xd0\
+\xdd\x70\xc3\x0d\x47\xe8\x6e\xb8\xe1\x86\x23\x74\x37\xdc\x70\xc3\
+\x11\xba\x1b\x6e\xb8\xe1\x08\xdd\x0d\x37\xdc\x70\x84\xee\x86\x1b\
+\x6e\x38\x42\x77\xc3\x0d\x47\xe8\x6e\xb8\xe1\x86\x23\x74\x37\xdc\
+\x70\xc3\x11\xba\x1b\x6e\xb8\xe1\x08\xdd\x0d\x37\xdc\x70\x84\xee\
+\x86\x1b\x6e\x38\x42\x77\xc3\x0d\x37\x1c\xa1\xbb\xe1\x86\x1b\x8e\
+\xd0\xdd\x70\xc3\x11\xba\x1b\x6e\xb8\xe1\x08\xdd\x0d\x37\xdc\x70\
+\x84\xee\x86\x1b\x6e\x38\x42\x77\xc3\x0d\x37\x1c\xa1\xbb\xe1\x86\
+\x1b\x8e\xd0\xdd\x70\xc3\x0d\x47\xe8\x6e\xb8\xe1\x86\x23\x74\x37\
+\xdc\x70\xc3\x11\xba\x1b\x6e\x38\x42\x77\xc3\x0d\x37\x1c\xa1\xbb\
+\xe1\x86\x1b\xcf\xab\xf1\xff\x04\x18\x00\x0f\x62\x62\xc5\x0e\x9e\
+\x8d\xff\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x0d\x3f\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x4d\x6f\x62\x69\x6c\
+\x69\x74\x79\x20\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x73\x2e\x0a\
+\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\x47\x49\x4e\x5f\
+\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\x0a\x2a\x2a\x20\
+\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\x74\x68\x69\x73\
+\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\x74\x68\x65\x20\
+\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\x20\x42\x53\x44\
+\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\x66\x6f\x6c\x6c\
+\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\x6e\x64\x20\x75\
+\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\x20\x61\x6e\x64\
+\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\x73\x2c\x20\x77\
+\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\x75\x74\x0a\x2a\
+\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\x6f\x6e\x2c\x20\
+\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\x64\x20\x70\x72\
+\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\x6e\x64\x69\x74\
+\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\x6d\x65\x74\x3a\
+\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\
+\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\x6f\x75\x72\x63\
+\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\x72\x65\x74\x61\
+\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\x6f\x70\
+\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6e\x6f\
+\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\x74\x20\
+\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x6e\
+\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\
+\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\x2a\x2a\x20\x20\
+\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\
+\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\
+\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\x64\x75\x63\x65\
+\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\x6f\x70\x79\x72\
+\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6e\x6f\x74\x69\
+\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\x74\x20\x6f\x66\
+\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x6e\x64\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x64\x69\
+\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\x2a\x2a\x20\x20\
+\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\x65\x6e\x74\x61\
+\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\x6f\x74\x68\x65\
+\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\x70\x72\x6f\x76\
+\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x0a\x2a\x2a\
+\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\
+\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\x69\x74\x68\x65\
+\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\x66\x20\x44\x69\
+\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\x69\x74\x73\x20\
+\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\
+\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x73\x0a\x2a\
+\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\x20\x63\x6f\x6e\
+\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\x79\x20\x62\x65\
+\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\x6f\x72\x73\x65\
+\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\x70\x72\x6f\x64\
+\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\x0a\x2a\x2a\x20\
+\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\x73\x20\x73\x6f\
+\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\x75\x74\x20\x73\
+\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\x72\x20\x77\x72\
+\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\x73\x69\x6f\x6e\
+\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\x48\x49\x53\x20\
+\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\x50\x52\x4f\x56\
+\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\x43\x4f\x50\x59\
+\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\x53\x20\x41\x4e\
+\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\x53\x0a\x2a\
+\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\x44\x20\x41\x4e\
+\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\x20\x49\x4d\x50\
+\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x2c\
+\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\x54\x20\
+\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\x20\x54\
+\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\
+\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\x20\x4d\x45\x52\
+\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\x20\x41\x4e\x44\
+\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\x0a\x2a\x2a\x20\
+\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\x20\x50\x55\x52\
+\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\x43\x4c\x41\x49\
+\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\x56\x45\x4e\x54\
+\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\x4f\x50\x59\x52\
+\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\x52\x20\x4f\x52\
+\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\x53\x20\x42\x45\
+\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\x41\x4e\x59\x20\
+\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\x52\x45\x43\x54\
+\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\x2c\x0a\x2a\x2a\
+\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\x45\x4d\x50\x4c\
+\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\x45\x51\x55\x45\
+\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\x53\x20\x28\x49\
+\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\x54\x20\x4e\x4f\
+\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\x20\x54\x4f\x2c\
+\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\x20\x4f\x46\x20\
+\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\x4f\x4f\x44\x53\
+\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\x3b\x20\x4c\x4f\
+\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\x2a\x20\x44\x41\
+\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\x54\x53\x3b\x20\
+\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\x49\x4e\x54\x45\
+\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\x57\x45\x56\x45\
+\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\x20\x4f\x4e\x20\
+\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\x59\x20\x4f\x46\
+\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\x57\x48\x45\x54\
+\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\x41\x43\x54\x2c\
+\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\
+\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\x2a\x20\x28\x49\
+\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\x4c\x49\x47\x45\
+\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\x57\x49\x53\x45\
+\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\x20\x41\x4e\x59\
+\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\x54\x48\x45\x20\
+\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\x49\x53\x20\x53\
+\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\x4e\x20\x49\x46\
+\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\x54\x48\x45\x20\
+\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\x4f\x46\x20\x53\
+\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\x49\x43\x45\x4e\
+\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\x20\x51\x74\x51\
+\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x49\x74\x65\x6d\x20\x7b\
+\x0a\x20\x20\x20\x20\x69\x64\x3a\x20\x73\x63\x72\x6f\x6c\x6c\x42\
+\x61\x72\x0a\x20\x20\x20\x20\x2f\x2f\x20\x54\x68\x65\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x69\x65\x73\x20\x74\x68\x61\x74\x20\x64\x65\
+\x66\x69\x6e\x65\x20\x74\x68\x65\x20\x73\x63\x72\x6f\x6c\x6c\x62\
+\x61\x72\x27\x73\x20\x73\x74\x61\x74\x65\x2e\x0a\x20\x20\x20\x20\
+\x2f\x2f\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x61\x6e\x64\x20\
+\x70\x61\x67\x65\x53\x69\x7a\x65\x20\x61\x72\x65\x20\x69\x6e\x20\
+\x74\x68\x65\x20\x72\x61\x6e\x67\x65\x20\x30\x2e\x30\x20\x2d\x20\
+\x31\x2e\x30\x2e\x20\x20\x54\x68\x65\x79\x20\x61\x72\x65\x20\x72\
+\x65\x6c\x61\x74\x69\x76\x65\x20\x74\x6f\x20\x74\x68\x65\x0a\x20\
+\x20\x20\x20\x2f\x2f\x20\x68\x65\x69\x67\x68\x74\x20\x6f\x66\x20\
+\x74\x68\x65\x20\x70\x61\x67\x65\x2c\x20\x69\x2e\x65\x2e\x20\x61\
+\x20\x70\x61\x67\x65\x53\x69\x7a\x65\x20\x6f\x66\x20\x30\x2e\x35\
+\x20\x6d\x65\x61\x6e\x73\x20\x74\x68\x61\x74\x20\x79\x6f\x75\x20\
+\x63\x61\x6e\x20\x73\x65\x65\x20\x35\x30\x25\x0a\x20\x20\x20\x20\
+\x2f\x2f\x20\x6f\x66\x20\x74\x68\x65\x20\x68\x65\x69\x67\x68\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x76\x69\x65\x77\x2e\x0a\x20\x20\
+\x20\x20\x2f\x2f\x20\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\
+\x20\x63\x61\x6e\x20\x62\x65\x20\x65\x69\x74\x68\x65\x72\x20\x27\
+\x56\x65\x72\x74\x69\x63\x61\x6c\x27\x20\x6f\x72\x20\x27\x48\x6f\
+\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x27\x0a\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x70\x6f\x73\x69\
+\x74\x69\x6f\x6e\x0a\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\
+\x79\x20\x72\x65\x61\x6c\x20\x70\x61\x67\x65\x53\x69\x7a\x65\x0a\
+\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\
+\x69\x6e\x67\x20\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\
+\x3a\x20\x22\x56\x65\x72\x74\x69\x63\x61\x6c\x22\x0a\x20\x20\x20\
+\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x61\x6c\x69\x61\x73\x20\
+\x62\x67\x43\x6f\x6c\x6f\x72\x3a\x20\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x2e\x63\x6f\x6c\x6f\x72\x0a\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x61\x6c\x69\x61\x73\x20\x66\x67\x43\
+\x6f\x6c\x6f\x72\x3a\x20\x74\x68\x75\x6d\x62\x2e\x63\x6f\x6c\x6f\
+\x72\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x41\x20\x6c\x69\x67\x68\
+\x74\x2c\x20\x73\x65\x6d\x69\x2d\x74\x72\x61\x6e\x73\x70\x61\x72\
+\x65\x6e\x74\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x0a\x20\
+\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x62\x61\x63\x6b\x67\
+\x72\x6f\x75\x6e\x64\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x72\x61\
+\x64\x69\x75\x73\x3a\x20\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\
+\x6e\x20\x3d\x3d\x20\x27\x56\x65\x72\x74\x69\x63\x61\x6c\x27\x20\
+\x3f\x20\x28\x77\x69\x64\x74\x68\x2f\x32\x20\x2d\x20\x31\x29\x20\
+\x3a\x20\x28\x68\x65\x69\x67\x68\x74\x2f\x32\x20\x2d\x20\x31\x29\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x22\x77\x68\x69\x74\x65\x22\x3b\x20\x6f\x70\x61\x63\x69\x74\x79\
+\x3a\x20\x30\x2e\x33\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x2f\x2f\x20\
+\x53\x69\x7a\x65\x20\x74\x68\x65\x20\x62\x61\x72\x20\x74\x6f\x20\
+\x74\x68\x65\x20\x72\x65\x71\x75\x69\x72\x65\x64\x20\x73\x69\x7a\
+\x65\x2c\x20\x64\x65\x70\x65\x6e\x64\x69\x6e\x67\x20\x75\x70\x6f\
+\x6e\x20\x74\x68\x65\x20\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\
+\x6e\x2e\x0a\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\
+\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x74\
+\x68\x75\x6d\x62\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x70\x61\
+\x63\x69\x74\x79\x3a\x20\x30\x2e\x37\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x62\x6c\x61\x63\x6b\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x72\x61\x64\x69\x75\x73\x3a\
+\x20\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x3d\x3d\x20\
+\x27\x56\x65\x72\x74\x69\x63\x61\x6c\x27\x20\x3f\x20\x28\x77\x69\
+\x64\x74\x68\x2f\x32\x20\x2d\x20\x31\x29\x20\x3a\x20\x28\x68\x65\
+\x69\x67\x68\x74\x2f\x32\x20\x2d\x20\x31\x29\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x78\x3a\x20\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\
+\x6f\x6e\x20\x3d\x3d\x20\x27\x56\x65\x72\x74\x69\x63\x61\x6c\x27\
+\x20\x3f\x20\x31\x20\x3a\x20\x28\x73\x63\x72\x6f\x6c\x6c\x42\x61\
+\x72\x2e\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x2a\x20\x28\x73\x63\
+\x72\x6f\x6c\x6c\x42\x61\x72\x2e\x77\x69\x64\x74\x68\x2d\x32\x29\
+\x20\x2b\x20\x31\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x79\x3a\
+\x20\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x3d\x3d\x20\
+\x27\x56\x65\x72\x74\x69\x63\x61\x6c\x27\x20\x3f\x20\x28\x73\x63\
+\x72\x6f\x6c\x6c\x42\x61\x72\x2e\x70\x6f\x73\x69\x74\x69\x6f\x6e\
+\x20\x2a\x20\x28\x73\x63\x72\x6f\x6c\x6c\x42\x61\x72\x2e\x68\x65\
+\x69\x67\x68\x74\x2d\x32\x29\x20\x2b\x20\x31\x29\x20\x3a\x20\x31\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\
+\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x3d\x3d\x20\x27\
+\x56\x65\x72\x74\x69\x63\x61\x6c\x27\x20\x3f\x20\x28\x70\x61\x72\
+\x65\x6e\x74\x2e\x77\x69\x64\x74\x68\x2d\x32\x29\x20\x3a\x20\x28\
+\x73\x63\x72\x6f\x6c\x6c\x42\x61\x72\x2e\x70\x61\x67\x65\x53\x69\
+\x7a\x65\x20\x2a\x20\x28\x73\x63\x72\x6f\x6c\x6c\x42\x61\x72\x2e\
+\x77\x69\x64\x74\x68\x2d\x32\x29\x29\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x6f\x72\x69\x65\x6e\x74\
+\x61\x74\x69\x6f\x6e\x20\x3d\x3d\x20\x27\x56\x65\x72\x74\x69\x63\
+\x61\x6c\x27\x20\x3f\x20\x28\x73\x63\x72\x6f\x6c\x6c\x42\x61\x72\
+\x2e\x70\x61\x67\x65\x53\x69\x7a\x65\x20\x2a\x20\x28\x73\x63\x72\
+\x6f\x6c\x6c\x42\x61\x72\x2e\x68\x65\x69\x67\x68\x74\x2d\x32\x29\
+\x29\x20\x3a\x20\x28\x70\x61\x72\x65\x6e\x74\x2e\x68\x65\x69\x67\
+\x68\x74\x2d\x32\x29\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x01\x01\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x08\x00\x00\x00\x08\x08\x06\x00\x00\x00\xc4\x0f\xbe\x8b\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
+\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x08\x15\
+\x01\x1e\x17\xf8\x02\xdb\x04\x00\x00\x00\x81\x49\x44\x41\x54\x18\
+\xd3\x9d\xcd\xb1\x0d\xc2\x30\x14\x45\xd1\x1b\xf1\xf5\x95\xca\x8e\
+\x15\xb9\x77\x91\x21\x68\x90\xd2\x31\x12\x6b\xb0\x8d\x33\x02\x3d\
+\xec\x81\x2b\xe4\x02\x7f\x68\x40\x22\x52\x2a\x5e\x7b\xf4\x74\x77\
+\x71\x1c\x1f\xcf\xd6\x0e\xad\xb5\x0b\x70\xe7\xb3\x94\x52\x6f\x66\
+\x09\x15\x59\x44\x64\x06\xfa\x5f\x1c\x86\x61\xf6\xde\x2f\x00\xd3\
+\x16\x3a\xe7\x16\x55\xbd\x75\x40\x07\xbc\xbe\x58\x4a\xd9\x9b\xd9\
+\xa9\xd6\x8a\x99\x9d\xd9\x78\x66\x55\xcd\xab\xec\xff\x08\x10\x63\
+\x9c\x42\x08\x59\x55\xaf\x22\x72\x5c\x21\xf0\x06\x78\x82\x2b\x9e\
+\x02\x46\xc4\xbc\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x02\x3b\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x5e\x00\x00\x00\x18\x08\x04\x00\x00\x00\xd9\xda\x82\x94\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0f\x12\x00\x00\x0f\x12\x01\x21\x9b\xf2\x33\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x12\x16\x2e\x21\x1b\
+\x90\xc4\x33\x00\x00\x00\x19\x74\x45\x58\x74\x43\x6f\x6d\x6d\x65\
+\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\
+\x47\x49\x4d\x50\x57\x81\x0e\x17\x00\x00\x01\x9a\x49\x44\x41\x54\
+\x58\xc3\xd5\xd7\xbd\x6e\xd4\x50\x10\x05\xe0\x6f\xee\xde\xec\x26\
+\xab\x68\x05\xa1\xe1\x4d\x22\xc4\x1b\x90\x16\xf1\x98\xa9\x68\x42\
+\x81\x68\x79\x01\x7a\x24\x0a\x42\xc1\xcf\x06\x6d\xb2\x7f\xbe\x14\
+\xeb\xfd\xb3\x12\x44\x12\x0a\x7b\x2a\x5b\x77\x46\x3e\xe7\xf8\x8c\
+\x67\x1c\x97\x8a\x2b\x3f\xfd\x36\x53\x29\xba\x10\x3d\x7d\x27\x9e\
+\xc8\xfc\x30\x2b\x23\xcf\xc5\xce\x71\x5b\x49\x04\x8a\xb1\x2f\xbe\
+\x06\xf9\x46\x55\x9e\x39\xf7\xc1\x75\x03\x74\x1b\x09\x24\x1c\x79\
+\xe9\x8d\x4f\xe5\x7b\xe4\x99\x63\xe7\xde\x9a\x5a\xaa\x6a\x6e\xed\
+\x8e\x89\x0b\x9c\xf9\x2c\xd3\xf7\xce\xc4\xd4\xb2\xf5\xa6\x59\x45\
+\xb6\x70\xe1\xb5\x4a\x86\x2b\x53\x4b\x8b\x96\x82\x6d\x4a\xb9\x40\
+\x36\x97\x24\x58\xb6\x18\x7a\xd3\xc8\x21\x2c\xcd\xeb\x77\xd0\x7a\
+\x9b\xdc\xdd\x87\x49\x47\x23\xba\x0c\xbe\xb6\x4d\x18\x28\xb5\x8b\
+\xba\x11\x07\x0e\xb6\x9e\x1f\xae\x2f\x3a\xa3\xf8\xa1\x58\x63\xee\
+\xab\x5a\xfc\xb5\xb9\x0d\x7c\x7f\x6b\x9b\xbe\xd2\x29\xf3\x67\x03\
+\x69\xad\x7c\xbb\x3b\xb7\xfa\x5b\xc3\x92\x44\x0d\x3e\x3a\x41\x20\
+\x76\xc1\x93\x76\x06\x55\xec\x0d\xe6\xe6\xa2\xfc\xaf\xa7\xf7\xab\
+\xde\xbd\x6b\xd6\xf5\x14\x49\xb5\x47\x21\xb6\x0d\x1b\x9b\xf4\xd4\
+\x5a\xd5\x7b\xb5\xbc\x55\xd3\x36\xab\x4d\xad\x39\x76\xe3\x96\xb5\
+\xe8\xa1\xb6\x2a\xf7\xaa\x5d\x65\x97\x1a\xe8\x4a\xf5\x22\x36\x04\
+\xd6\x28\x33\xc5\xd0\x78\x07\x76\xec\x3d\x26\x36\x05\x8f\xe9\x87\
+\x78\x40\x76\x48\x8a\xa2\x92\xa8\x7f\x51\x43\x52\x09\x61\x20\xcb\
+\xcc\x9d\x7a\x5f\xb3\xdc\x02\x8f\x47\xab\xfd\x3f\x96\xe1\xd8\x28\
+\xbf\xab\x7f\xf2\xc2\xc4\xb1\xdc\x37\x77\x26\xfb\xe8\x57\x0b\xe0\
+\xde\xb5\xcb\xaf\x80\x17\x2c\x9d\x38\xf5\xca\x37\x23\x71\x69\x4c\
+\x39\xd2\xeb\xcc\x98\xaa\xcc\x4c\x88\xa7\x32\x23\x37\x71\xdd\xb1\
+\x7d\x72\xe8\x10\x7f\x00\x8d\x5e\x7a\xab\x47\xd7\x46\x98\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x9c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x31\x00\x00\x00\x2c\x08\x06\x00\x00\x00\xcc\xd4\x50\x59\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
+\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x08\x18\
+\x02\x2f\x2b\xe1\x1c\xc6\xb5\x00\x00\x00\x19\x74\x45\x58\x74\x43\
+\x6f\x6d\x6d\x65\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\x77\
+\x69\x74\x68\x20\x47\x49\x4d\x50\x57\x81\x0e\x17\x00\x00\x04\xf7\
+\x49\x44\x41\x54\x68\xde\xd5\x9a\xbf\x6e\x1b\x47\x10\xc6\x7f\xb3\
+\xb7\xa4\xe8\x08\x56\xd2\xda\x30\x14\x03\x2e\x92\x00\x2e\xdc\x06\
+\x70\x5e\xc1\xcf\x92\x22\x6d\x9a\x3c\x5d\x6a\x37\x56\xe3\xc2\x08\
+\xdc\x18\x10\x04\x39\x81\x4d\xde\xed\xce\xa4\xd8\xdd\xbb\xbd\xe3\
+\x91\x92\x9c\xc0\xa4\x16\x58\xdc\x81\x77\xfb\xe7\x9b\xef\x9b\x99\
+\x25\x87\x02\x2c\x00\x99\xe9\xa5\xd5\xf7\x87\x6a\x36\xb9\x1f\x75\
+\x0f\x34\x80\xab\x3a\xd5\x55\x8e\x00\xc8\x2e\x00\x5a\xae\x1e\x58\
+\xe6\x4d\xd7\x60\xa4\xba\x1e\x0b\x88\x7a\xe3\x06\xc4\xdc\x7b\x10\
+\x3e\xcb\xaa\xa9\xba\x3b\x02\x59\x4d\x59\xd0\x6a\xf3\x11\x08\x40\
+\xf0\xc0\x83\x0c\x64\x99\x81\xec\x92\xd8\x21\x41\xe8\xc4\xfa\x01\
+\xe8\x80\x16\xe8\x3c\x70\x0a\xac\x80\x93\xdc\x97\x15\x90\xa6\x02\
+\x70\x28\x10\x05\x48\x0d\xa0\xcd\x7d\x0d\xac\x0b\x88\x6f\x72\x7f\
+\x90\x81\x2c\x72\x77\x07\xf4\x8d\xa9\x2f\x68\x05\x60\x93\x01\x7c\
+\x02\xbc\x07\xce\x56\xab\x93\x57\xe7\xe7\xdf\xff\xfa\xec\xd9\x33\
+\x4e\x4f\x4f\x71\xce\xa1\x9a\xc3\x94\xbb\xdd\x8a\x5a\xc9\xd7\x65\
+\xac\x26\x69\xe5\x12\xee\x24\xbf\x22\x96\x9e\x95\x77\x98\x3c\x1b\
+\x21\x11\x10\x19\xdb\xee\xe3\xc7\x8f\xbc\x7d\xfb\x96\x77\xef\xde\
+\xfd\x16\x42\xb8\x90\xd5\xea\xe4\x8f\x97\x2f\x7f\xf9\xfd\xc9\x93\
+\x27\x84\x10\xb8\xba\xba\x22\x84\x40\xd7\x75\x80\xc3\x39\x30\x33\
+\xcc\xc6\xb3\x8b\x48\x9a\x5c\x6d\x0b\xc4\x6d\x36\x59\x3e\x2f\xe3\
+\xea\xe7\x7e\x62\x39\x11\x41\xab\x35\xcf\xbe\xfb\x96\xb3\xb3\x33\
+\x2e\x2e\x2e\x78\xf3\xe6\xcd\x9f\xf2\xe2\xc5\x0b\x7b\xfe\xfc\x39\
+\x1f\x3e\x7c\xe0\xfa\xfa\x1a\xe7\x1c\x4d\x93\x5c\x21\xc6\x48\x23\
+\x6e\x2f\x08\xef\x5c\xe6\x7a\x78\xde\x18\xa3\xcf\x8a\x25\xc5\x12\
+\x23\x9a\x63\x85\x09\x68\x9e\x57\x2a\x20\x2e\xf3\xa7\x35\x23\xf9\
+\x3d\xe7\x1c\x5d\xd7\xf1\xf0\xe1\x43\x1e\x3d\x7a\xc4\xeb\xd7\xaf\
+\xf1\xe7\xe7\xe7\x5c\x5d\x5d\x71\x79\x79\xc9\x6a\xb5\x02\xa0\x6d\
+\x5b\x16\x8b\x05\x22\xb2\xb5\x79\x26\x13\x87\x10\xb6\x40\x40\xb2\
+\x9c\x99\x81\x93\x5e\x62\xa3\x50\x63\xd6\xb3\x51\x84\x5f\x40\xa8\
+\xb3\x09\x0b\x86\x9a\x66\x43\x18\xce\x39\xae\xaf\xaf\x39\x39\x39\
+\xe1\xe9\xd3\xa7\xf8\xd5\xf2\x01\xef\xdf\xff\x45\x23\x8e\xd8\x05\
+\x54\x15\xef\x7d\xba\xb7\x80\xf4\x01\x6a\xbe\x39\xe7\xb7\x02\x7a\
+\x24\x81\x57\x80\x68\xc9\x18\x92\x36\x99\x00\x74\x3d\x13\x66\x36\
+\x62\x0a\x40\xd5\x7a\x90\x2e\x4b\x4b\xb3\x93\x8a\x08\x5d\x1b\x58\
+\x2c\x16\x5c\x5e\x5e\xf2\xf8\xf1\x63\x7c\x8c\x91\xcd\xa6\xc3\xfb\
+\x44\xd3\x62\xb1\x40\x55\xd9\xb4\x9f\x59\x2e\x97\x3d\xdd\xbb\xd9\
+\xc8\xd4\xdb\x94\x09\x43\x35\xf1\x23\x22\x43\x78\xb3\x24\x97\x58\
+\x31\x51\x83\x68\xb2\x4c\x4d\x2d\x8d\x51\x4d\x6c\xaa\xf5\xf1\xd1\
+\xf9\x86\x68\xca\x66\xbd\xc1\xf9\x06\x6f\x66\xc4\x18\x71\x6e\xd0\
+\x7e\x88\x83\x9c\x34\xea\x48\x93\x35\xcd\xa3\xe8\x64\x86\xe6\x8f\
+\x1a\xe7\xd3\x5c\x0c\x41\x41\x44\xc0\x2c\x5b\x3b\x24\x00\x56\x18\
+\xcc\x20\x45\x30\x03\x67\x0b\x2c\x56\x72\x8c\x69\x9c\x99\x21\x4e\
+\x08\x99\xb2\xa6\x59\x24\x02\xba\x6e\x83\x59\xa4\x6d\x23\xd2\x38\
+\x36\x5d\x9b\x37\xa5\x88\xd8\x60\x81\xca\x0f\x6a\x09\x98\x85\xd1\
+\xb9\x44\x44\xe8\x24\xee\x3c\xab\x18\x10\xb2\xa5\x8b\x31\x8a\x7d\
+\x0a\xab\x66\xeb\xc1\x50\x16\xab\xb1\x49\x8f\x25\xa8\x68\x88\x10\
+\x3a\x7c\x08\x81\x18\x63\x5e\x70\xbc\xc1\x51\xe8\x9b\x58\xbe\x30\
+\x53\xae\x03\x28\xdb\x1b\x0c\xea\xf0\x3a\x1d\xdb\xb3\xaa\xba\xc5\
+\xf8\x9c\x12\x34\x46\x62\x8c\xc9\x27\x62\x8c\x19\xdd\xe0\x68\xfd\
+\x35\xea\xd6\x22\xfb\x26\xbf\x55\x2a\xbe\x01\xc4\xbe\xf9\x8b\x91\
+\x52\x42\x56\xba\x18\x13\x13\xaa\x9a\x7c\x42\x75\xcb\x9a\x22\x92\
+\x68\xdc\xf6\xe8\xe2\x0c\x3b\x37\x72\xe3\x79\xa2\x32\xd8\x08\x80\
+\x31\xbf\x66\x25\x2b\x55\xed\x43\x7c\x0f\xa2\x56\xf0\x54\xf7\x83\
+\x76\xb7\x27\x16\xe3\x8b\x99\x98\x82\xef\xad\x7c\xc3\x11\x4d\x44\
+\x50\x31\xa2\x46\xda\xd0\x25\x39\x95\xc1\xa6\x83\x65\x54\x93\x8c\
+\xca\x75\xce\xda\x52\x39\xe8\x5d\x5a\x9d\xc9\xe7\x40\x14\x63\xee\
+\xf2\x43\xe7\x1c\x5a\x22\xa9\xc6\xc1\xb1\xa7\x19\xb4\xde\xfc\x1c\
+\xed\xfd\x02\x33\xec\xdc\xc5\xb1\xe7\x40\xd4\xc3\xe7\x7c\x43\x55\
+\x53\x1e\x22\xcb\xa9\x6d\x5b\xba\xae\x4b\xe8\x18\x33\x51\x72\xc7\
+\x2e\xbd\x8b\x48\x1f\xbf\xef\x02\xa2\x1c\x45\x76\x1d\x65\xc4\xd8\
+\x62\xbf\x8e\x86\xe5\x04\x10\x4d\x59\xb7\x2d\x7e\xdd\x6e\x58\xb7\
+\x1b\x9c\x73\xb3\xd6\xfe\x92\xe8\xf3\x35\x5a\x91\x7a\xf7\x79\x8d\
+\x2b\xc8\xe6\xf4\x7e\xac\x6d\x2a\x41\x3f\x97\x44\x66\xb5\x7f\xa4\
+\x4d\x55\x71\x25\xd1\xed\x43\x7b\xf4\x20\xea\x14\x7f\x5f\xda\x28\
+\x11\x9b\x25\x26\x6e\x7a\xf9\x5e\x32\x71\xec\x9b\xaf\xa5\xae\xaa\
+\x29\x3a\xdd\x27\xcb\xcf\x25\x41\x37\x77\xac\xa8\x93\xdc\xec\x79\
+\xe9\x3f\x9c\x60\xff\x4f\x19\xf5\x3e\x71\x17\xe4\xf5\xf7\xdd\x7d\
+\x99\xfc\x6b\x3b\xf9\x8d\x20\x9a\xa6\xe9\x8f\xbc\xfd\x97\xa7\x0c\
+\xc8\x39\x77\x14\xd2\xf2\xb7\x41\x2a\x22\x34\x4d\xd3\x67\xf6\x72\
+\xb6\x2a\x5f\x4e\x0e\xed\xdc\x37\x82\x88\x31\xf6\x00\x54\x75\xf4\
+\xd3\x49\xf1\x9d\x43\xcb\xc9\x37\xe2\x68\x9a\x3d\xd6\x6c\x6a\x69\
+\xb9\xa3\x8c\x54\xfe\x87\x9f\x7e\xe4\xbe\x37\x01\x7e\xae\x7e\xd6\
+\x5f\x31\x14\x5b\xea\x6a\xd1\xa1\xeb\x13\x75\x95\xa8\xab\x6a\x13\
+\x9f\x81\x4f\x1e\xf8\x3b\x3f\xd8\x30\x14\x58\x4a\x91\x45\x38\x6c\
+\xdd\xce\x26\x60\xfa\x12\x17\x93\x22\xcb\x3f\x19\xc4\x9a\x71\xdd\
+\xee\xd0\x2c\xec\x63\xa3\x30\xd2\x01\x1b\x9f\x29\x09\xd9\xfa\xd3\
+\x2a\x2a\x07\x64\x61\xca\x46\xf9\x41\xbd\x00\x29\x95\xa3\xce\x67\
+\x06\xba\x89\xf5\x8f\xa5\xfc\x3b\x27\x2b\x9d\xb2\xe2\x33\x80\xc8\
+\x71\x16\xe2\xe7\x40\x14\x46\x7a\x66\x7c\xa6\xe4\x98\xff\x12\x31\
+\x27\xab\xd1\xdf\x22\xfe\x05\x87\x94\x8c\x6a\x16\x44\xdd\xd8\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x02\x34\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x5e\x00\x00\x00\x18\x08\x04\x00\x00\x00\xd9\xda\x82\x94\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0f\x12\x00\x00\x0f\x12\x01\x21\x9b\xf2\x33\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x03\x12\x05\x2d\x12\x91\
+\x0d\xeb\xcf\x00\x00\x00\x19\x74\x45\x58\x74\x43\x6f\x6d\x6d\x65\
+\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\
+\x47\x49\x4d\x50\x57\x81\x0e\x17\x00\x00\x01\x93\x49\x44\x41\x54\
+\x58\xc3\xd5\x96\xbb\x4e\xc3\x30\x14\x86\x3f\x27\x4e\x7a\x91\x90\
+\x80\x89\x37\x61\x40\x62\x04\x09\x31\x31\xf0\xa4\x2c\x30\x20\x36\
+\xd4\x17\x60\x61\x65\x29\x12\x88\x96\x2a\x4d\x42\xed\xc3\x90\x4b\
+\x93\xa6\xad\x14\x21\x21\xfb\x78\xf0\xe5\xd8\xd2\xe7\x93\x3f\xc7\
+\x47\x4d\x81\x94\x1c\xbf\x2c\x66\x08\x68\x98\x83\x8c\x08\x09\x3c\
+\x01\xb7\xe4\x24\x24\xea\x08\x9d\x12\xca\x98\x7b\x26\xcc\x6a\xb7\
+\x72\x06\x54\x6a\x60\x10\x04\x30\x1c\x73\xca\x15\xef\x32\x53\xea\
+\x95\xa1\x3c\xf0\xc8\x4f\x89\xad\x1c\xba\x80\x94\xc8\xb6\x71\x01\
+\x80\x90\x73\xae\xf9\x50\x01\x44\x4c\x30\x58\x2c\x16\xc1\x96\x1b\
+\xa4\x6e\xb6\xf6\xfd\x77\x6b\xa3\x57\x2b\x06\xcb\x33\x63\x16\x68\
+\x50\x24\x0d\x3d\x01\xa5\xfa\x55\xeb\xc3\x15\x23\xf5\x87\x18\xaa\
+\x9e\xbb\x2b\xec\x66\xcc\xa5\x16\x50\xc6\x0a\x5d\xb8\x57\x2d\x6c\
+\xeb\xd8\x0f\xda\x04\xb7\x40\x58\xae\xeb\xb5\xb6\x00\x4c\x2b\x42\
+\x9b\xf1\x92\x1e\xde\x7e\xa7\x9b\xb3\xee\x39\x29\xa1\x37\x83\xaa\
+\xdb\xb7\x53\x2d\xa1\xd0\x99\xf5\xf3\xf6\x3b\x2d\x3b\xc6\x66\x0b\
+\x76\x71\x21\x5d\xa1\x5b\x87\xf3\xfa\xae\x04\x5a\xcb\xc6\x5d\xf8\
+\xdd\xa6\x41\xc8\xc9\x58\x79\x04\x5d\xe9\x5f\x03\xe4\xa4\x5e\xc1\
+\xeb\x66\x9f\x90\x96\x2f\xac\x1f\x16\x61\xaa\x1f\x56\xc8\x3c\x8b\
+\xbc\x29\xfb\x00\x8f\xcd\x5b\xf8\x3a\xcf\x2b\x0f\x40\xb7\x95\xeb\
+\xba\x28\x31\x43\x70\x56\xf5\xdd\x77\x38\x24\x5a\xc3\x1f\x60\xc8\
+\xf6\x3c\xea\xae\x25\xca\x98\x01\x51\x51\x98\xe5\x5c\x70\x47\x88\
+\xc1\x7a\x20\x21\xd0\x0c\xb8\x64\x49\x80\x8e\x59\x70\x03\x3c\xb1\
+\xdc\x53\x1c\xb9\x94\x5f\x46\x9c\x71\xcb\x0b\x31\x6a\xca\x27\xb9\
+\x0c\x19\x77\xca\x57\x17\xad\xa8\x7a\xe7\xbc\x81\x3a\x41\x4d\x11\
+\xbe\xf9\x62\x41\x5e\x17\xc6\xae\x5b\x48\xcc\x31\x87\xfc\x02\xe8\
+\xd1\xec\xea\x42\xfb\xcf\xc2\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x00\x57\
+\x62\
+\x6f\x72\x64\x65\x72\x2e\x6c\x65\x66\x74\x3a\x20\x31\x35\x0a\x62\
+\x6f\x72\x64\x65\x72\x2e\x74\x6f\x70\x3a\x20\x34\x0a\x62\x6f\x72\
+\x64\x65\x72\x2e\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x34\x0a\x62\x6f\
+\x72\x64\x65\x72\x2e\x72\x69\x67\x68\x74\x3a\x20\x31\x35\x0a\x73\
+\x6f\x75\x72\x63\x65\x3a\x20\x74\x6f\x6f\x6c\x62\x75\x74\x74\x6f\
+\x6e\x2e\x70\x6e\x67\x0a\
+\x00\x00\x00\x57\
+\x62\
+\x6f\x72\x64\x65\x72\x2e\x6c\x65\x66\x74\x3a\x20\x31\x30\x0a\x62\
+\x6f\x72\x64\x65\x72\x2e\x74\x6f\x70\x3a\x20\x31\x30\x0a\x62\x6f\
+\x72\x64\x65\x72\x2e\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x30\x0a\
+\x62\x6f\x72\x64\x65\x72\x2e\x72\x69\x67\x68\x74\x3a\x20\x31\x30\
+\x0a\x73\x6f\x75\x72\x63\x65\x3a\x20\x6c\x69\x6e\x65\x65\x64\x69\
+\x74\x2e\x70\x6e\x67\x0a\
+\x00\x00\x04\xd4\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x4f\x00\x00\x00\x4f\x08\x06\x00\x00\x00\xaa\x34\x98\x86\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\x01\
+\x42\x28\x9b\x78\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x08\x15\
+\x04\x1c\x13\xcb\x92\xbf\x74\x00\x00\x04\x54\x49\x44\x41\x54\x78\
+\xda\xed\x5c\xd9\x52\x1b\x31\x10\x6c\xad\x97\x60\xcc\x6d\xe3\x04\
+\x08\xb9\xf8\xff\x2f\xcb\x47\x78\xf2\xe0\x71\x50\x09\xad\x56\xc7\
+\xe8\x58\x90\xaa\x28\x5c\xae\x95\xbd\x6a\x4d\xf7\xf4\xcc\x0a\x14\
+\x11\x3d\xe1\x38\x48\xfb\x81\xf1\x7b\xea\x75\x89\x79\x50\x4a\xa1\
+\xc5\x31\x02\xd0\xef\x4c\x19\x37\x6f\x7b\x4f\x19\x8b\x53\x13\xf3\
+\xcc\x6b\x63\xe7\x81\x88\xa8\x45\x00\x47\x00\xc3\xcc\xa2\x48\x03\
+\xd8\x06\x06\x79\x80\x81\xc0\x0d\x7a\xf7\x1e\x11\x35\x17\x89\xe3\
+\x04\x30\x14\x11\x89\x53\xd7\xa8\x09\x4a\x2a\x47\xc4\x39\x37\x84\
+\x18\xc9\xda\x20\xea\x91\xe7\x43\x39\xd7\xa2\x94\x05\x2c\x1f\xaa\
+\xfa\x82\x68\xa5\x73\x4d\x10\x47\xed\xa6\xa6\x16\x12\x1c\x19\xda\
+\xb5\x07\x87\x0c\x84\x80\xef\xa4\xf8\x89\xd2\xa5\x41\x3c\x45\x1e\
+\x2c\x34\x4b\x5e\x94\xf1\xd9\x21\xf3\x42\x75\x92\x00\xa8\xd2\x91\
+\x68\x66\xdb\x50\x61\x9f\xa3\x5c\xca\xbc\x58\x19\x28\x16\x89\x66\
+\xb6\xd5\x6f\x58\x92\x72\xa9\x54\x45\x0a\x9d\x73\x45\xe3\xe8\xd0\
+\xad\x14\xca\xa9\x02\x54\x9d\x03\x3f\xbb\x57\xf4\x31\xc9\x2e\xb3\
+\x3b\xb7\xd0\xc3\x94\xf1\x8d\x00\xc3\x37\x49\x4d\x6e\x88\x34\x9d\
+\x75\xda\x86\x46\x8b\xcf\x42\x87\x19\xdd\x2a\x19\xc1\x90\xa6\xb3\
+\x2d\x61\x48\xec\x7a\xcb\xc9\x46\xcc\x2b\x9a\x9a\x27\xe1\xef\xa4\
+\xc1\xf0\x31\xd7\x31\x74\x4e\xd6\x44\x5b\x79\x96\xea\xef\x54\x24\
+\x55\x53\x33\x36\x05\x6e\xda\x3b\x10\x43\xe9\x6c\x96\x67\x4a\x48\
+\xef\x52\x93\x0d\x32\x68\x70\x10\xb0\x3e\x74\x1e\x3d\x01\xa3\xc8\
+\x12\x2e\xa7\xde\xc5\xb6\xc3\xe0\x68\x60\x04\xd5\xcf\x2e\x93\x4c\
+\x8e\x0e\x49\xa9\x48\x94\x68\x87\x29\x81\x4d\xb3\xda\x9c\x31\x82\
+\xaa\xc8\x70\xc3\x59\x2b\x8d\x84\x79\xce\xfa\xd9\x65\x92\x69\xa2\
+\xee\x8d\xd5\x91\x9c\x0b\x4d\xd5\xd2\xa8\xfa\xd9\xa4\x6d\x8e\x66\
+\x66\x8e\xa4\x21\xde\xd6\x8a\xf9\x3e\xd3\xaa\x00\xb2\x86\xb4\x56\
+\xe6\x2d\x32\xcf\xb4\x2a\x3e\xd1\xb2\xa4\x4a\x23\xc7\xa6\xfd\xc7\
+\xc0\x65\x92\x6b\xe9\xd6\x1c\x75\x42\x74\x2b\x56\xef\x7c\x9c\x05\
+\xd9\xca\xb3\x52\xbb\x1e\x1b\xc1\x53\x8b\xca\x31\xcf\x29\x57\x53\
+\xd9\x36\xf4\xe1\x4d\x69\x8b\x91\xd2\x0e\x13\x7b\xd6\x3c\x02\xf8\
+\x0b\x60\xef\x01\x62\x8d\xa6\x40\x2c\xe5\xe6\xda\x61\x22\xb2\xa3\
+\x88\x48\x31\x78\x3f\x01\x9c\x1b\x17\x1c\x8c\x6e\x72\xea\x71\x0b\
+\xfd\xb3\x25\xe7\xcd\xdd\x53\xe8\xf7\x79\xbd\x56\x5a\xe9\x71\x01\
+\xe0\x37\x80\xad\xe5\xc3\x11\xb1\xd0\x1c\x67\x5d\x72\x81\x1f\x35\
+\x4f\x19\xb5\xdb\x29\x0a\x7f\x69\x51\x98\x6b\xd7\x4b\x1f\x18\x12\
+\x07\x51\x4d\xf4\xf9\xd7\x0c\xe0\x03\xec\xc7\x30\x4a\x50\x27\x57\
+\xe4\x8b\x31\x46\x39\x1e\x96\x0c\x00\xee\x59\x0b\xaf\x1a\xd6\xad\
+\x6a\x91\xef\x6c\x97\x72\x14\xae\x00\x3c\x01\xf8\x0e\xe0\x4b\x01\
+\xca\x51\x64\x92\xa2\x84\xe4\x76\x70\x00\x3d\x39\xcf\xab\x69\xaf\
+\x25\x94\x1f\xac\x89\x43\x03\x7a\x17\x4b\x4b\xb1\xef\x0b\x7a\xe2\
+\xc1\xb6\xe6\x96\x41\xbc\x5b\x68\x06\x15\xdb\xec\xe0\xe7\x6d\x5a\
+\x56\xbe\x67\x10\xaf\x1d\x6d\xab\x5a\x99\x37\x57\x72\x0b\xa7\xed\
+\x8c\x1e\x6e\x01\x3c\x03\xb8\x69\xd8\x62\x64\x89\x44\x91\x73\x07\
+\x44\xb4\x62\x5b\xf3\x02\x60\x53\x89\x72\xc5\x93\x8d\xd8\xc9\x17\
+\x8e\xc4\x01\xc0\x57\x8e\xc4\x8d\x07\x9d\x51\x3a\x5a\x24\xe7\x89\
+\x9f\xbb\x62\x10\x47\xd6\xc4\x67\x4d\x13\x73\x2c\x2a\x26\x82\xc5\
+\x74\x39\xdb\xe9\x3f\x4d\x13\x6f\x19\xc4\xbb\x99\x48\x6c\x85\xe2\
+\xde\x20\x16\x39\x7f\xca\x40\x5e\xb2\xd9\xde\x72\xdd\xdc\x02\x55\
+\x93\xc0\x2f\x7a\x02\x9a\x41\x3c\x67\xa3\xbd\x67\x40\x55\x21\x30\
+\xc4\xfd\x64\x95\x33\xf8\x9a\x2e\x5e\x03\x78\x64\x7d\x5c\x15\xea\
+\xac\xd4\x33\xc9\x99\x80\x5c\x73\x24\x3e\x70\x19\x38\x34\x5a\x07\
+\xcb\x98\xe4\x4c\x40\x0e\x6c\xb6\x77\x9a\x36\xd6\x6c\x82\xd6\xc9\
+\xb6\x02\xd1\x78\xc6\x99\x7a\xcf\x99\x7a\x68\xad\x7e\x6e\xf3\x6f\
+\x31\xed\xb4\xde\xf1\xcf\xa5\x85\xd6\x55\x2a\x94\xe6\xc1\xb3\xd0\
+\xfa\x8a\xb5\x51\xa7\x75\x15\xfb\xb2\x28\xf0\x2c\xb4\xde\x72\xb6\
+\xde\x38\xaa\x98\x6c\x1d\xef\x45\x82\x67\xe9\x31\x5e\x03\xf8\xc6\
+\xda\x78\x56\xa8\xd2\xc0\xe2\xc1\x33\x40\x5c\x6b\x06\xfc\x5c\xd8\
+\x5c\xe7\x69\x49\x35\x48\xe9\x2f\x9c\x5c\x1e\x19\x50\x85\x0c\x7d\
+\xbf\x0f\x07\x9e\x25\xc1\x3c\x30\x88\x66\x29\x58\xaf\x93\xbc\x30\
+\x10\xf5\x16\xd9\xa5\x14\x9d\x3f\x05\x78\x46\x8b\x6c\x8b\x63\xc7\
+\xfb\xe2\xc3\x9b\xe4\x8c\x91\xb8\xe7\x16\xd9\x3a\xd6\x5c\x7f\x4a\
+\xf0\x8c\xc4\xf2\xc8\x20\xae\x42\x23\xf1\xd3\x82\x67\x80\xb8\x61\
+\x2a\xef\x0c\xb3\x8d\x0f\x6d\x92\x85\x7d\xe2\x1d\xde\xce\xe6\xcc\
+\x9a\xeb\x0e\x9e\xbd\xec\x3b\x9d\xcd\x19\xd0\x5a\x27\x79\x21\x20\
+\xde\xe0\x78\xd8\xf3\x66\x2a\xf3\x76\xf0\xdc\x20\x9e\x4e\x88\xbd\
+\xe0\xed\x1f\xf8\xf4\xc8\x0b\x8c\xc2\x2b\x00\x7f\x70\x6c\xce\xa2\
+\x83\x17\x67\xb0\x5f\x58\x0b\x57\x9d\xb6\x71\x20\xee\x00\xbc\x02\
+\x58\x77\xf0\xe2\x7d\xe1\x6b\x07\x2f\x1e\xc0\x8e\x5d\x1f\x7d\xf4\
+\xd1\x47\x1f\x7d\xf4\xd1\x47\x1f\x7d\xf4\xd1\x47\x1b\xe3\x1f\xe0\
+\x81\xec\x5e\x51\xd2\x2e\xc1\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x09\xf6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x2a\x08\x06\x00\x00\x00\x03\x06\x5d\xe2\
+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\
+\xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\
+\x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\
+\xd9\x0a\x0d\x01\x0d\x15\x98\x8e\xd7\xaa\x00\x00\x00\x19\x74\x45\
+\x58\x74\x43\x6f\x6d\x6d\x65\x6e\x74\x00\x43\x72\x65\x61\x74\x65\
+\x64\x20\x77\x69\x74\x68\x20\x47\x49\x4d\x50\x57\x81\x0e\x17\x00\
+\x00\x09\x5e\x49\x44\x41\x54\x68\xde\x9d\x5a\xcb\x6e\x64\x49\x11\
+\x3d\x11\x79\xab\xca\xed\xf6\x8c\xba\x57\xb4\x64\x46\xf4\x16\x50\
+\xef\x50\x6f\x40\xf2\x7c\x00\x42\xc0\x07\xb0\x9d\x0f\xe0\x03\xe0\
+\x03\x46\xac\xe1\x0f\xd8\xb2\x64\x56\xb3\x69\x66\x37\x4c\xaf\x5b\
+\x6a\xc9\x12\xcd\x2c\x2c\x0f\x66\xdc\x6e\xbb\x5c\x99\x11\x2c\xf2\
+\x66\xde\xc8\x57\x95\x85\x25\xcb\xae\xba\xb7\xf2\x66\x9e\x3c\x71\
+\xe2\x44\x64\x11\xcc\xcf\xc7\x27\x1f\x7d\xe6\xbd\xff\xf3\x6a\xb5\
+\xb2\x6f\x43\x55\xa1\xaa\x20\x72\xc5\x7b\x42\xf1\x7f\x82\x80\x68\
+\x7e\x01\x01\xa5\xeb\x1a\xdf\x23\xa2\x7c\x5d\x55\xf3\x7b\x1a\x04\
+\xcc\x6c\x9e\xc4\xc5\x7d\x5e\xe3\xb8\x4c\x6a\x3e\xa7\x79\x7c\x15\
+\xea\x8e\x9d\x7e\xbc\x04\x10\x11\x1e\x6d\x8e\xb0\xdb\xed\x10\x42\
+\x80\x5b\x4d\x5f\xae\x36\xeb\x3f\xad\x56\xab\x2f\x21\x7a\x9a\x66\
+\x8d\xd5\x6a\xf5\xc7\x9f\xfe\xf8\x27\x7f\x38\x3b\x3b\xc3\xd3\xa7\
+\x4f\x71\x74\x74\x54\x2c\xd6\x4e\x32\x83\x42\xe9\x9a\x80\x31\x9e\
+\x48\x9a\x64\xfd\xbe\xc8\x02\xdc\x02\x60\x39\x7e\x5a\x34\x44\xcd\
+\x3d\x25\x90\xf5\x66\xe5\x67\xba\x09\x44\x84\xbb\x0f\xb7\x58\xaf\
+\xd7\xb8\xbc\xbc\xc4\x3f\x5f\x7f\x83\x7f\x7c\xf5\x15\x8e\x8f\x8f\
+\xbf\x76\x8c\x9f\x11\x00\x9c\x9c\x9c\xfc\xfe\xc5\x8b\x17\x9f\xff\
+\xf6\xd7\xbf\xc1\xc5\xc5\x05\xae\xae\xae\xb0\xff\x87\x67\x46\xb4\
+\x0b\xb5\x93\x70\xcd\xe2\x4a\x70\xc2\x70\x11\xb4\x77\xfc\x11\x78\
+\x76\x6c\x22\x42\x98\x5f\xae\xa7\x15\x42\x08\x38\x3e\x3e\xc6\xe9\
+\x27\x3f\xc4\xab\x57\xaf\xf0\xf7\x2f\xbe\xc0\xc7\x1f\x3d\xfe\xdd\
+\x04\x00\x9b\xcd\xe6\xf3\xb3\xb3\x33\x9c\x9f\x9f\xe3\xfa\xfa\x1a\
+\xeb\xf5\x1a\x21\x84\xe1\xf2\x7b\xe8\xc7\xff\xb9\xd8\x69\x51\xdf\
+\xfd\x7c\x9e\x30\xb9\xf9\xde\x30\x60\x5b\x0b\x7c\x1a\x3f\x31\x6f\
+\x04\x2e\x11\x01\xec\x40\x0a\xdc\xee\x6e\xa1\xaa\xb8\xbb\xbb\xc3\
+\xfb\xf7\xef\xf1\xf2\xe5\x4b\x7c\xf3\xfa\x35\xbe\xbb\xbc\xf8\xf9\
+\x04\x00\x4f\x9e\x3c\xc1\x66\xb3\xc1\x7f\x76\xdf\xc5\xd8\xf3\xfe\
+\x41\x8b\x6f\x43\x43\x21\x50\x7b\x73\x9f\x9a\x69\x92\xd0\x79\x31\
+\x91\xe6\xcb\xc2\x30\x0c\x0d\x81\x02\x04\x28\x00\xd2\xfd\x80\x89\
+\x78\x68\x10\x4c\xd3\x04\x52\x00\xec\x70\x73\x73\x8d\xdb\xdb\x1b\
+\xfc\xe8\xf9\x27\xf8\xf6\xdf\xff\xfa\x6c\x02\x80\xf5\x7a\x9d\x63\
+\xe4\xe4\xe4\x04\xde\xfb\x2c\x4e\xcb\x03\x38\x3e\x3e\x0b\x22\xe5\
+\xbf\x60\x02\xb0\x4c\x5e\xe7\x9d\xa2\xc1\xce\xe6\xc5\xa9\x54\x0b\
+\x2e\xc7\xcf\xda\x41\xc8\xe3\x13\x51\x16\x57\xd6\x31\x4b\x89\x08\
+\xde\x7b\xac\xd7\x6b\xdc\xdf\xdf\x63\xe5\x1c\x76\xdb\x2d\x9c\x73\
+\xf0\xde\x63\x9a\x26\x30\x33\x26\x00\xd8\x6e\xb7\x50\x55\x30\x33\
+\x44\x04\x22\x52\xa8\x3f\x00\xf0\xbc\xc8\x7c\x0d\x01\x50\x86\x52\
+\xdc\x09\x40\x21\x79\x91\x33\x10\x2a\x5d\xf6\xe4\x49\x9a\xd7\x11\
+\x70\xc3\x02\x12\x48\x88\xe0\x26\xb0\xa5\xd8\x8c\xc8\x87\x7d\x00\
+\xb3\x03\x76\x7e\x0b\x12\x85\xd7\x00\xe7\x18\x5b\x7f\x8f\xdd\x6e\
+\x0b\x47\x40\x08\x21\x02\x30\x4d\x13\xbc\xf7\x10\x11\xec\x76\xbb\
+\x39\x85\x98\x5d\x50\x81\x97\x5d\xdc\x01\x4d\x34\x8e\x60\xa5\x39\
+\xe4\xd8\xa4\x22\x62\x1b\x20\x8b\xac\xc0\xcb\x8e\x7b\x1f\x9f\x97\
+\xb2\x89\x0a\x21\x84\x00\x12\xcb\x82\x72\xa1\x82\x25\x0c\x7b\x00\
+\xa8\x60\x61\x13\x00\xd9\x79\x88\x28\x54\x09\x22\x80\x73\x2e\x02\
+\xa0\xaa\x08\x21\x94\xbb\x4f\xbc\x7c\x58\x05\x61\xde\xcd\x0c\xc0\
+\x40\x7c\x96\xd4\x08\x28\x68\xa8\x1d\xf1\x6f\x79\x6d\xd1\x83\x32\
+\xa5\x96\x29\xb7\x2b\x31\x5d\x6d\xb2\x9b\xa1\xaa\x79\x7d\x22\x4b\
+\xe8\x4d\x00\x70\x71\x71\x81\x10\x42\x34\x0a\xce\xcd\x0f\x34\x88\
+\xaa\x00\x4c\x25\x03\xa8\xbf\xbb\x76\xa7\x2c\x00\xbd\x2c\x20\x68\
+\x73\x7b\x6f\xfc\x2c\x7e\xf5\x38\x8a\x03\x59\xa6\x15\xf0\xb4\xce\
+\x04\xc2\x94\x73\xb2\x61\x80\x15\xb9\x39\xba\xa3\x66\xcf\x13\x2c\
+\x28\xdf\xa4\x9e\xe5\x73\x41\xa4\xc9\xf1\x85\x4a\x43\xdb\xc5\x8a\
+\x0e\x19\xd0\xe4\x7d\xd1\xff\x0b\x80\x86\x01\xc9\x58\x24\x9a\x64\
+\x75\xc7\xe2\xf4\x12\x00\x90\x52\xa5\xeb\xb4\x95\x26\x95\xc0\xb2\
+\x63\xd5\x74\xdd\x07\x40\x7d\x6f\x02\xc0\x02\xcf\x03\x86\xe5\x8d\
+\xe1\xf6\xb9\x36\xcc\x0b\x00\x7a\x0c\x30\x1f\x85\xce\x0b\x87\x5d\
+\x60\x4d\x5f\xa2\x4c\x55\x0b\x52\xcf\x0f\xd4\xa9\x34\x33\x49\xb4\
+\xcb\x1a\xad\x3e\x0b\x00\x5a\xd4\x11\x9d\x4c\x13\x5a\xbf\x32\x64\
+\x40\xba\x10\x42\x88\xe8\xaa\x42\x79\x29\x70\x32\xb5\x65\xd9\x71\
+\x8b\x64\xad\x01\x3d\xfb\xfa\x10\x1f\xdf\x8b\xeb\x61\x16\x98\x9f\
+\x3f\x62\x58\xef\x9a\x5d\x23\x11\x95\x00\x84\x10\xc0\x1c\xd5\x1f\
+\x33\xf3\x95\x09\x44\x0a\x09\x91\x1d\x49\xa4\x46\x45\x8f\x8d\xd5\
+\xde\xf5\xbd\x3b\xb6\x58\x88\xc2\xef\x5b\x00\x0a\xaf\x1f\x42\xc7\
+\x8e\x1f\x06\xc0\x5e\x2f\x34\x60\x17\x3c\xc0\x04\xe6\x09\xca\x69\
+\xc1\xd1\x77\x16\x82\xa7\x0c\x82\x03\x71\x00\xe9\x62\x4b\x54\xe6\
+\x52\x78\xb0\x63\x29\xcf\x2f\xc5\x10\xcf\x52\x2e\xd0\xec\xea\xd8\
+\xf8\x7e\x40\xa1\x40\x90\xd2\xfa\xcc\xe6\xa8\x57\x10\x51\x8c\x95\
+\xac\x01\x16\xc4\xf4\x7f\xb2\xfa\x05\x03\xb2\xda\x6a\x72\x7b\xd2\
+\xe4\xd6\x62\x31\x20\x40\x23\x00\xda\xa8\x3b\xba\x79\xdb\x9a\xa3\
+\x79\xe0\xe8\x28\x21\x85\xab\x2b\x47\x5a\xd2\x5d\xcc\x06\x94\xbd\
+\x42\x2a\xd8\x2c\x08\x45\x7d\xa0\xd4\x08\xb6\x15\xfa\x86\x01\xc9\
+\x07\xa4\x1a\xdc\x0a\x54\x9d\x19\x14\x1e\xd0\x18\x12\xd2\x31\xa7\
+\x4a\x83\x58\xb6\xa6\x07\x01\x20\xbb\x78\xa9\xee\xd7\x26\xdd\x49\
+\xe5\x36\x9b\x30\x2a\xd8\x4a\xdd\x4d\x4c\x7a\x37\x14\xc1\x24\x00\
+\xb5\xd2\x2f\x00\x98\xee\xcf\xfc\xc0\x1c\x06\x83\x1c\x6c\x29\xba\
+\xa4\xc1\xb2\x93\x94\xa5\x1b\x80\xaa\x5f\xf4\x48\xca\xf1\x95\xc6\
+\x06\x88\x0c\x00\x3c\x97\xdb\x76\x1d\xd6\x08\x35\x00\x58\x27\x68\
+\x19\x10\x07\x77\x73\x36\x93\x32\xed\xcd\x13\x94\x5a\xb1\xb5\xaf\
+\xf8\x05\x45\xd9\xb5\x3e\xc2\x54\x78\x99\xaa\x62\x9d\x26\xe5\xfc\
+\x5e\x67\xa1\x3a\x04\xc4\x2f\x6c\x4b\x60\x7a\xef\xe1\xbd\xef\xa7\
+\x41\xef\xfd\x0c\x00\x81\xe7\xca\x6f\x31\x2a\x5a\xee\x14\x09\x90\
+\x1a\x1a\xb5\x23\xe3\x71\x93\xc2\xc6\x33\x72\x0c\xbb\x26\xee\x41\
+\x82\xbc\xef\xa2\xf9\xe9\x4a\x04\x95\x7e\x1a\x6e\x00\x08\x6d\x36\
+\x48\xbd\xc1\x83\x00\x40\x42\x15\x3f\x86\xf6\x3c\x3f\x80\x38\xa6\
+\xc5\x6a\xb7\xc1\x64\xca\xe4\xb1\x08\x2e\x0b\xe0\x59\xf5\x93\xcf\
+\xf6\xf3\xba\x29\x7f\x86\x2b\x81\x6d\xfc\x03\x51\x53\x81\xa6\x8d\
+\xb0\xd7\xbd\xf7\x45\xb7\xab\x09\x81\x48\x3b\xca\xfd\xbc\x9e\x80\
+\x59\x81\xaa\x55\x38\x8a\xdb\xd8\x94\x94\x61\xb5\xf4\x86\x96\x5f\
+\xa3\x0b\xb9\xf4\x5e\xba\x48\xa8\xb2\x51\x0d\xc2\xe8\x9a\xb5\xc2\
+\x5d\x1f\x40\x44\x98\xd8\xc1\x11\x83\x38\x5a\x5a\xaa\xbc\x76\x7c\
+\xbd\xd0\x95\x44\x9a\xce\x91\x63\x67\x54\x7e\x01\x23\x87\x92\x2d\
+\x51\x1d\xb5\xd4\x07\xa0\xe9\x19\x12\x8d\x59\xd2\x1a\x11\x01\x13\
+\x61\x35\x3f\x23\x98\x86\x8b\xed\x20\xd9\x4d\x75\xce\x15\x69\x30\
+\x85\x4e\x32\x51\x93\x5d\xa0\xbd\x99\x70\xf8\x67\x9a\xa6\x22\xbd\
+\x58\xaf\xa0\xaa\x39\xa5\xf6\xac\xaf\xcd\x1c\xc3\xb6\x96\x73\x0b\
+\x00\x33\xd8\x36\xac\x98\xf9\x41\x4d\x5b\x0b\x0c\x11\xe5\x31\x0b\
+\x06\x24\x00\xd2\xa0\x5c\x87\x40\xaf\xf9\xc0\x5c\x16\x3d\x46\xe5\
+\x7b\xb6\xd7\xfa\x88\xc4\x86\x51\xb9\x9c\x94\xdb\xce\xad\xae\x45\
+\xf4\xc0\x2e\xa5\xc5\xf6\xc2\xa3\x11\xc1\x84\x68\xba\xd1\x1e\x74\
+\xa4\x30\x6d\x52\x56\xe7\xb3\x75\xb1\xd4\x00\xf4\x00\xbf\x1e\x7b\
+\x82\xd4\x58\x59\x9b\x8d\x52\xff\xb2\x5b\x6b\xd0\x22\x82\x35\xf5\
+\xad\x2d\x6e\x9c\x60\x11\x02\x07\x0e\x35\x54\x15\xec\xb8\xa8\xc8\
+\x88\x08\x56\x02\x6d\x08\xd4\x42\xb9\x2f\x34\xf2\x3d\xf3\x0e\x96\
+\x34\xd6\x62\x77\xf7\xed\xbe\x4d\xc7\x54\x8d\xd5\x30\x20\x51\xae\
+\x29\x2e\x3a\x4d\x8f\x3c\x51\x73\x7f\x7e\x50\x8f\xb6\x83\x6c\x90\
+\x00\x1a\x29\x36\xb9\xa9\x55\x75\xb2\x00\xf7\x2b\xca\xfc\xda\xcc\
+\xcd\x86\x42\x76\x98\x23\x00\x2c\x6d\x7a\xdd\xde\x94\xb8\xea\x38\
+\x5d\xda\xe7\x63\x1d\x28\x45\x8e\x7b\xc1\x9f\xc7\x07\xa8\xc9\x32\
+\x44\x76\xbe\x07\x00\x98\x7b\x18\xcc\x5c\xb4\xfc\x97\x82\x6f\xa0\
+\x01\xcc\x9c\xd3\x84\x8d\xab\x91\xc8\x14\x27\xc8\x68\x5b\x65\x3d\
+\xa0\x12\x83\xf6\x1f\x87\x51\x13\xb3\xae\x78\x5e\x18\x9c\x22\xa1\
+\x69\x89\xd5\x62\x98\xcc\xd0\xd4\x5b\x3c\x11\x81\x27\xb7\xc4\x21\
+\x71\xb4\xa3\x54\xaa\xaf\xd3\x85\xe2\x42\xa1\x14\x47\x4b\xb5\x4e\
+\x63\x84\xe7\xe3\xf1\x42\x4d\xd9\x00\x4a\x00\xc3\x99\x94\x9a\x4c\
+\x96\xe4\x0d\xa1\xea\x38\xbd\x00\x41\x63\xff\xdf\xee\x3e\x11\xe6\
+\x13\xa1\x29\xdb\xef\x26\x04\x6c\x1a\x2c\xce\xf3\x98\x9a\xd6\x74\
+\xef\xb0\xe3\x21\xc7\xe2\x79\xc7\x2a\x06\xd8\x30\x23\x5d\x58\x17\
+\xef\xef\x67\x92\x51\xf7\x29\x6a\xc4\x54\xcc\xa3\x0e\xf1\x61\x16\
+\xb0\xf1\x53\x6a\x4f\x39\x51\x36\x56\x46\x3b\x39\xbd\xb6\xbe\x2d\
+\x08\x5a\x7c\x17\x80\x06\x21\x70\xa8\xad\x36\xd2\x01\x9b\x2a\x6d\
+\x08\x5a\x20\xa7\x5e\xff\xcd\xf6\xf6\xd4\x88\x12\x77\x3d\x7c\x59\
+\x01\x8e\x58\xd1\x6d\x84\xd2\xf2\x59\xea\x2c\x50\x95\x1e\xdc\x54\
+\xed\xa5\xd2\x9e\xf3\xdb\x2b\x82\xce\xb9\x0c\x84\x56\x3d\xfb\x9e\
+\x0e\xda\x94\xa7\x24\x43\x7a\x0e\x1b\xa2\x8c\xbd\xae\x53\x8a\xe7\
+\x53\x97\x59\x3d\x86\xd5\x47\xea\x49\x8b\xea\x90\xc9\x0c\x78\xf4\
+\xe8\x11\xec\x21\x69\x12\xa9\x83\x2d\x67\x3b\xa9\x43\x3d\xfa\xde\
+\xd7\x1d\x7a\x99\xc1\xc6\x3e\x4a\x00\xf6\x7d\x1d\xa6\x1f\x72\xdc\
+\xbc\x5f\x1b\xa2\x29\xd5\xc8\xbb\xdd\x2e\x56\x83\xc9\xbd\x0d\xda\
+\xdb\x65\x53\xb3\x65\xc0\xc8\xee\x1e\xf2\xec\x4b\xe3\xc3\x18\x1d\
+\x76\xfb\x8f\xbe\x8a\xe3\x7b\x6e\x40\x11\x29\x41\xb6\xa1\xb0\xdb\
+\xed\x16\x00\xb6\xdb\x2d\xb6\xdb\x2d\xa6\x47\xc7\xcb\x07\x98\xba\
+\x07\x10\xb6\x28\x22\x72\x7b\x0f\x2f\xf7\x59\xd5\x54\xce\xda\xb3\
+\xc6\xba\x38\x22\x63\xa5\xbb\x1d\x66\xe3\xe8\x7a\x61\xc0\x5c\xfa\
+\x14\xbb\xf8\x9b\x9b\x1b\x00\xf8\x8b\x9b\xbf\x21\xf2\xa9\x88\x3c\
+\x7f\xf6\x83\x67\xa6\x6e\xaf\x68\x33\xb7\x25\x12\x85\x98\x19\x4a\
+\x0a\xe2\x48\x84\xf4\x9e\x15\xd2\x89\x1d\x08\x31\x9c\x78\x4e\xa5\
+\xf6\xba\xab\xee\x27\x8e\xbf\xec\x18\xec\x1c\x54\x65\x76\x7e\xda\
+\x88\x59\x7a\x5e\xed\x5f\x1c\x31\x98\x22\x4f\x79\xb6\xe2\xab\xd5\
+\x2a\xff\x3d\x3a\x3a\xc2\xf9\xf9\x39\xde\xbd\x7b\xf7\xf5\xf7\xdf\
+\xff\xf7\x57\x6e\xfe\x8e\xd0\x5f\x2f\x2f\x2f\x7f\xf1\xfe\xfa\xfa\
+\xf9\xe3\xc7\x8f\xb1\xd9\x6c\x72\x4c\xe7\x0a\x71\xfe\x6e\x4e\xfc\
+\x25\xe8\x1e\x3a\x2f\x85\xd1\x5c\x99\xcd\xc4\x1e\x89\x55\x01\x42\
+\x95\x39\xea\xc2\xec\x50\x55\x59\x9e\x68\x12\xa6\x69\xca\x0c\xba\
+\xbb\xbb\xc3\x9b\x37\x6f\xf0\xf6\xed\x5b\xac\xd7\xeb\x5f\xde\xde\
+\x7e\xf8\x96\x00\xe0\xf4\xf4\xf4\xd9\x76\xbb\xfd\x70\x7f\xb7\xfd\
+\x9b\x73\xee\x53\xe7\x1c\x78\x72\xdd\xb3\xbf\x07\xc5\x72\x7d\x36\
+\x90\x4a\x64\xad\xbe\xea\x06\xdd\xab\x15\xc3\x13\xe8\x3d\x06\x88\
+\xcd\x59\x40\x2a\xa7\xd3\x26\xa6\xb6\xdf\xd5\xd5\x55\x9e\xc4\xff\
+\x00\x5c\x02\x19\x87\x64\x82\xd5\x44\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x08\xa9\
+\x00\
+\x00\x1d\x22\x78\x9c\xc5\x58\x59\x6f\xdb\x48\x12\x7e\xcf\xaf\x20\
+\x94\x97\x04\x2b\x51\x7d\x1f\x86\xe5\x41\xd6\x83\x19\xcc\x42\xb3\
+\x0b\x24\x13\xec\x33\x4d\xb5\x6c\x4e\x64\x52\x43\x52\xb1\x95\x5f\
+\xbf\x55\xdd\x3c\x75\x38\x76\xb2\x83\x18\x48\xc4\xee\xae\xf3\xab\
+\xea\xea\xea\xbe\xfc\xe9\xf1\x7e\x13\x7d\x76\x65\x95\x15\xf9\x62\
+\x42\x63\x32\x89\x5c\x9e\x16\xab\x2c\xbf\x5d\x4c\x3e\xfe\xf1\xcb\
+\xcc\x4c\xa2\xaa\x4e\xf2\x55\xb2\x29\x72\xb7\x98\xe4\xc5\xe4\xa7\
+\xab\x57\x97\xd5\xe7\xdb\x08\x38\xf3\xea\x62\x95\x2e\x26\x77\x75\
+\xbd\xbd\x98\xcf\xb7\xbb\x72\x13\x17\xe5\xed\x7c\x95\xce\xdd\xc6\
+\xdd\xbb\xbc\xae\xe6\x34\xa6\xf3\x49\x43\x9b\xf6\xb4\x69\xe9\x92\
+\x3a\xfb\xec\xd2\xe2\xfe\xbe\xc8\x2b\xcf\x96\x57\xaf\x5b\xca\x72\
+\xb5\xee\x48\x1f\x1e\x1e\xe2\x07\xee\x29\xa8\xb5\x76\x4e\xd8\x9c\
+\xb1\x19\x50\xcc\xaa\x7d\x5e\x27\x8f\xb3\x01\x1f\xd8\x75\x8a\x8f\
+\x11\x42\xe6\xb0\xd6\x90\x3d\x83\xe4\xe2\x71\x93\xe5\x9f\xce\xda\
+\xe0\x57\x27\xd1\x43\xb6\xaa\xef\x16\x13\x61\xb6\x8f\x93\xe8\xce\
+\x65\xb7\x77\x75\x3b\xca\x56\x8b\x09\x88\xa3\x9c\xa8\xc9\xd5\xab\
+\x28\xba\x5c\xb9\x75\xe5\x67\xf1\x03\xa6\x8d\x9f\x86\x05\x10\xe5\
+\x92\xf2\xd7\x32\x59\x65\x80\x98\x27\x19\x4f\x09\x62\x78\x43\x0c\
+\xe4\x55\x5d\x6c\x83\x74\xf8\x80\x25\x39\x89\x8a\xf5\xba\x72\xa0\
+\x99\x60\xac\x8a\xed\x2c\x2d\x36\x45\xb9\x98\xbc\x5e\xfb\xbf\x66\
+\xb2\xd8\x26\x69\x56\xef\x91\x6a\x3e\x16\xd6\xb1\xc7\x5a\x4e\x86\
+\xa2\xed\xb7\xc9\x1b\x48\xd0\xbd\x71\xf4\x59\xc2\x68\x2b\xec\x72\
+\x3e\x06\xe1\xf9\x60\x71\x76\x16\x2c\x2e\x9e\x04\x4b\xa7\xec\xc8\
+\xb9\x58\x71\xc3\xac\x36\xea\x3c\x6a\xd2\x72\x2b\x28\xb7\x43\xec\
+\xb8\x3a\x14\x9f\x26\x6b\xee\x8e\xc5\x53\xc3\x85\x51\x4c\x9c\x07\
+\x91\x9b\x81\xd1\xb1\xe1\x46\x12\x29\x8f\xd0\x3c\x23\x5e\x12\x21\
+\x8d\xa6\xfa\xbc\x78\x41\x9e\x88\xd1\x49\xa9\xff\x87\x18\x31\x75\
+\x36\x46\xcc\x3c\x19\x23\x9b\xaa\xb3\xf6\x9c\x08\x8d\xa0\x0a\xfe\
+\x46\xa1\x11\xec\x58\x2a\x33\xe9\x57\xa5\x0e\x22\xf2\x14\x64\x6b\
+\x97\xe0\x9e\xfc\x2e\xc8\x7c\x79\xb9\xb8\x2b\x1d\x54\xc1\xd7\x27\
+\xb0\x3b\x81\x29\xa7\x0a\x80\xbb\x6d\x46\x1f\xf3\xac\x86\x32\xb7\
+\xab\x5c\xf9\x01\x6c\x70\xff\xc9\x3f\x56\x10\xc7\x47\xba\x98\xcc\
+\x98\x89\xad\x32\x56\x80\x91\x7b\x3f\x96\x31\x67\xca\x50\x18\x3f\
+\x32\x18\x73\x1d\x53\xab\x2c\x48\xdb\xe3\xd0\xc6\x52\x5a\x22\x49\
+\xb7\x01\x2e\x51\x47\xb2\x79\x9e\xb1\xb0\x19\xbd\xb1\x63\x1e\x70\
+\x02\x20\x4c\x1f\x51\x1b\x8f\x25\xb5\x44\x73\x18\xef\xd1\x1a\x16\
+\x53\xca\x61\xc7\x4d\xa2\xf5\xc1\xfa\xfa\x60\x1d\xe0\x06\xe3\xbe\
+\xea\x74\xbb\xfc\x47\x99\xe4\xd5\xba\x28\xef\x17\x93\xfb\xa4\x2e\
+\xb3\xc7\x37\x24\x16\x46\x6b\x6e\xa7\x34\x66\x96\x81\x51\xd3\x19\
+\x1c\x57\x00\xb0\x9e\xc2\x92\xd5\x4c\xc0\x8c\xa0\x31\xd2\xf0\x29\
+\x67\xb1\xa0\xc2\xb2\xb7\xdf\x04\x04\x94\xf0\x93\x40\x18\x1a\x80\
+\x60\x3c\xb6\xf8\x17\x60\x80\x11\x87\x88\x00\xe8\x1e\x85\x7e\x71\
+\x3d\x5e\x04\x08\xa8\x8d\xa9\xa0\x16\xe5\x9c\xf7\x14\x0e\x76\xa2\
+\x34\xa1\x53\x16\x33\x2e\x21\xdc\x6e\x46\xd5\x74\x86\x23\x4d\xa5\
+\x1f\x20\x89\x96\x0c\x3c\x86\xa2\xa4\xc0\x2e\x85\x20\x30\x48\x04\
+\xfa\xf6\x6b\x18\x7b\x40\x2e\xe7\x78\xb2\xe1\x17\x0e\xee\x5d\x9d\
+\xac\x92\x3a\xf1\x4e\xb7\x03\xca\x29\x6d\x8f\x3d\x38\xc0\x2f\xde\
+\xff\xfc\x4b\xb7\xc7\xd2\xf4\xe2\xbf\x45\xf9\x29\xc2\xf9\xe4\xa6\
+\xd8\xc1\xde\xea\x6a\x04\x1e\x9f\xe9\x05\x7a\x94\xd4\x57\xd9\x7d\
+\x72\xeb\xf0\xa8\xfe\x07\x9c\xd4\xa0\xb4\x5b\x18\x11\xd7\xfb\xad\
+\xf3\xb2\x4a\x57\x15\xbb\x32\x75\x27\xdb\x94\x55\x7a\x9f\x21\xe5\
+\xfc\x43\x9d\x6d\x36\xbf\xa1\xe4\x7e\xdb\x37\x82\xb2\x7a\xe3\xae\
+\x1e\xa0\x5d\xb9\x73\xe5\x2c\xdd\x40\x54\xbd\xd2\x30\x3f\x22\x05\
+\x17\xdd\xd5\xbf\x92\x7c\x97\x94\xfb\x08\x1a\x0a\xe5\x09\xfd\xec\
+\x88\xce\x37\x3f\x45\xd9\x4f\x06\xf7\xdf\xdd\x76\x05\xe1\xd8\x80\
+\xf7\xfb\x24\x8f\xae\x8b\xcd\x26\x73\x65\xf4\x66\x5b\xb9\xdd\xaa\
+\x78\x7b\xca\x10\x0c\xc4\xb1\x30\x4f\x79\xa4\x17\xc5\x6f\x77\x37\
+\x9b\xac\x02\xdf\x5e\x64\xce\xa0\x2f\x82\xee\xf0\xb6\x98\x6d\xcb\
+\xe2\x4f\x97\xd6\x08\xec\x0b\xad\x3a\x61\x00\xea\x09\x51\x1b\x2a\
+\x0a\x4e\x43\x73\xea\x3a\x2d\x0d\xd1\x98\x71\x77\x83\x96\x8c\x74\
+\x63\x22\xfc\x33\xb9\x3d\xf0\x06\x67\x37\x59\x1b\xdb\xcb\x79\x33\
+\x3e\x49\x94\x6c\xb7\x1b\x57\x3f\x4d\x93\x17\x75\xb6\xce\x52\x68\
+\x6c\x8b\xfc\x14\x65\x98\x1b\xd9\x11\xbc\x38\xb4\x18\xe1\xdf\x64\
+\xa9\xcb\xab\x33\x39\x7c\xaa\x7d\x6e\x18\xaa\xf9\xcd\x7e\x56\x25\
+\x73\x16\x93\xf9\x61\x2e\xa7\x45\x0e\xe5\xe0\x66\xf7\xd2\xe4\xfb\
+\x35\x29\x4b\x57\xd7\xd1\xd2\x7d\x80\x1d\xf2\xd2\xac\x3b\x56\xea\
+\x69\x71\xb7\x0f\x77\xff\x72\xe0\x70\x53\x00\x5e\xe8\xed\x18\xc0\
+\xad\x2b\x61\x73\x57\xa7\x01\x7c\x70\x37\x71\x3b\xe9\xe5\xa5\xe9\
+\xfc\xbd\x83\x24\x5e\xed\x52\x0c\xdf\x08\xb9\x6f\x11\xf6\x73\x56\
+\x05\xaf\x4f\x08\x2b\xdd\x5f\xbb\x0c\x18\x9e\x2f\xed\xdf\x90\x59\
+\xa9\xfb\x7e\x39\xef\xea\xb3\x46\xbd\xdc\x43\x57\x66\x9f\x7d\x5c\
+\x30\x92\xd5\xf7\x1b\xf7\xe1\x2e\x29\xdd\xbb\x4d\xf6\x69\xe0\xa8\
+\xcf\x94\x26\x33\xda\x0e\x6a\x70\x72\x5c\xce\xdb\xa3\xc5\x8f\x6e\
+\x43\x63\x94\xec\x5d\xd9\x9d\x33\xdd\x66\x83\xd5\x41\x63\xac\x87\
+\xd9\xb2\x85\x02\x10\x01\xe7\xef\x11\x13\x11\x8b\x65\xb4\x8c\x18\
+\x8d\x15\x93\x11\x1c\xae\x46\xcb\xe8\x3a\x82\xbe\x83\x5b\x0b\x37\
+\x08\x98\x22\x0a\xda\x7d\x6a\x22\x38\x88\xa9\xa5\x82\xa8\xc8\x22\
+\xa3\x45\x32\x11\x1b\xb8\x93\x59\x1c\x41\x63\xa5\x08\xb1\x4a\x75\
+\x2c\x3a\x62\x2a\xe6\xba\x13\xbb\x6c\xf5\x7d\x89\x7e\x8f\x4c\x6c\
+\x28\x68\x34\xb1\xf6\xbf\xcb\x88\xd2\xd8\x08\xa4\xa6\x32\x66\x8d\
+\x19\x94\x41\x37\xe2\xcd\xa0\xd0\x13\x30\x23\x95\x1d\x7e\xf5\xab\
+\x2d\x4b\x27\x64\x79\xa8\x00\x75\x72\xdb\x90\xf5\x5a\xa1\xcd\x09\
+\x9f\x1d\xe7\x75\xc4\x45\x4c\x34\x15\x9c\x0e\x34\x70\xd0\xc0\xbc\
+\x77\xbd\x7e\xae\x62\x2a\x11\xb6\x4e\xfd\xf2\x58\x05\xea\x6d\xfc\
+\x07\x90\xe1\xf2\x14\x80\x00\x14\xb0\xcd\x51\x81\xab\x25\x00\xb8\
+\x1a\x1b\x10\x43\xcd\xb9\xe6\x88\xab\xd4\x56\x32\x8f\x7a\xac\xe1\
+\x72\x46\x79\x88\xc0\x35\xfe\x40\x50\x0c\x09\xb1\x23\xd0\xc7\x18\
+\x69\x7c\xf0\xb4\x96\x9a\x1e\x29\xf6\x20\x34\xc0\x34\x21\xbf\xc6\
+\x09\xcb\xa5\x51\x66\x10\x75\x6e\x07\xe1\xe6\x8d\x36\xff\xdb\x06\
+\x7c\xc0\xd5\x05\xbe\x13\x1d\xc2\xbe\x8c\x84\x44\x3f\x05\xe2\x32\
+\xd6\x8a\x86\x74\x88\x77\x31\xe8\x82\xc6\xbb\x8c\xe9\xa0\xed\xc0\
+\xbe\x1e\x46\xa0\x8f\x4a\x1f\xa9\x3e\x7a\x47\x0a\xbc\xff\xad\xa0\
+\x6e\xf6\x3a\xc8\x01\x64\xad\xe7\x96\x96\x29\xff\x61\xb4\x82\x24\
+\x86\x45\x6a\x85\xb6\x16\x39\x82\x79\x20\x82\x8d\xa2\xdd\x1b\x7c\
+\x2c\x1e\x95\x36\x6e\xb7\x28\xf8\x9d\xe0\xc1\x59\xb6\x60\xb5\x4b\
+\xd7\x63\x3c\x5b\x8c\x7b\xdc\x7d\x30\xb8\xdf\x7d\xa3\x08\xf5\xb1\
+\xeb\xb9\xc6\x5a\xbf\x44\xd0\x51\x43\xe3\xe7\xaf\xba\xce\x8a\x75\
+\x18\x0e\xef\x6d\x70\x91\x2b\x8b\x4f\x6e\x74\x19\xc6\x89\x59\xf3\
+\xf6\x03\x95\x04\x72\x92\x19\x2b\xbb\x15\x6c\xfd\xd3\x64\x0b\xb7\
+\xc5\xbf\xa0\x13\x74\xa3\xf9\x3f\x8b\x2c\x87\x7e\x38\xab\x5d\xd9\
+\xcd\xfb\xd1\x26\x83\x9f\xc5\x44\x74\xb3\xab\xa4\x82\x7a\x58\x26\
+\x7b\x7c\x74\xcb\x7b\x29\xa7\x2e\xa8\x87\x25\x0c\x82\xe7\x81\x64\
+\xb1\x92\xed\x4e\x08\x48\xf2\x98\x58\x03\x7f\x38\xc5\x38\x15\x46\
+\xe1\x9c\x14\x1a\x82\x35\xaa\x62\x42\xb2\x76\x5b\xc5\x96\x50\x4a\
+\xd9\x90\x45\x36\xdb\xb2\x11\xbc\xec\x94\xfa\x34\x26\x6d\x05\xc1\
+\x17\x25\x4c\x59\xdc\xdc\x54\xc4\x61\x23\x43\xb2\x42\x3a\x4a\x6e\
+\xf0\x4b\x59\x7c\x67\xc2\x2f\xb8\x6d\x11\xe2\xcb\x1a\xe1\x46\x0b\
+\xcf\x20\xbc\x74\x60\x17\x4d\x59\x38\x10\xed\xb3\x57\xc7\x03\x55\
+\x70\x5d\x1c\xb1\xf8\xda\xc5\x89\x50\x58\x0a\xbd\x68\x1a\x72\xda\
+\x2a\x6a\x28\x0d\x26\xc0\x85\x48\x62\x52\x4b\xee\x45\x8b\x66\xaf\
+\x0e\x25\x87\xa2\xe5\xcd\x41\x54\xbd\xcf\xe0\x70\xd8\xc1\xc3\xb2\
+\x15\x48\x00\x9f\x90\xba\x88\x99\x80\x2b\x94\xcf\x57\x43\xa8\x08\
+\x67\x45\x2c\x04\x23\xb0\x21\x87\x55\x4b\x72\xe5\x8f\x12\xe0\xa0\
+\x4c\x73\x2f\x97\xe0\x16\x36\x07\x9a\x9b\x9a\xe5\xeb\x57\x17\xe2\
+\x50\xb5\xb4\x32\x92\x0e\xa2\x1c\xaa\x56\x13\xde\x71\xd5\x6a\x02\
+\x3c\xe0\xea\x02\xdd\x09\x6f\xc3\x0c\x75\x0b\xf6\x6e\xa8\x9c\x4d\
+\xed\x1a\x6b\xf7\x26\xb5\x00\xe2\x95\xdd\x76\x07\x87\x95\x86\x59\
+\x8e\x5f\x0c\x8a\xb6\x08\xf1\xb0\xd6\xc8\xb0\xa8\xb9\xe2\x6d\xd4\
+\x3a\x09\x2d\xf6\xe1\xff\xe5\x09\xd1\x3e\xcf\x30\xad\x1a\xd6\x41\
+\x6a\x20\x53\x5b\x2b\x43\x28\x91\x3d\x24\x9e\x26\x60\x0b\xf3\x9a\
+\xa1\x20\x98\x90\x6e\x70\x34\x53\x5f\xde\xa0\xe0\x11\x28\x12\x43\
+\xb9\xbe\x54\xb5\x5e\xb6\x6e\x87\x62\xd5\x22\xb2\xec\x71\x6a\x09\
+\xae\x0f\xc0\xec\x00\x6e\x41\x1f\x95\xac\x41\x78\xfa\xc0\xf5\x5c\
+\x87\xda\xfb\xa2\x15\xea\xc2\xd9\x8a\x05\xf7\xdc\x37\xaf\x8f\xdf\
+\x1b\xde\x1e\x97\x30\x23\x94\x50\x90\xa7\x3f\xb0\x84\x5d\xce\x07\
+\x8d\xda\xa0\xae\x8d\xee\x6c\xa1\xca\xd5\x27\x1e\x72\xb4\xc6\x33\
+\x1f\xdf\x6f\x88\xa2\x70\x14\x4e\x9b\x0f\x7c\xc9\x69\xd6\x94\x8e\
+\x05\xb6\x0d\x53\x88\x2c\x34\x63\x4c\x00\x10\xbe\x60\xe2\x9b\x92\
+\x8c\x66\x54\xc3\xff\xef\x60\xaf\x49\xff\x8f\x44\x50\x1d\xa2\x08\
+\xdf\x7f\xe4\xf4\xdc\xe2\x80\xf3\x4b\x7f\x94\xac\x9d\x93\xe2\x9b\
+\x8e\x12\x69\x2d\xa5\xda\xfc\xd0\xa3\xe4\x3c\xcc\x34\x66\x50\xb7\
+\xa4\x0e\x4f\x44\x5a\x13\x44\x97\x51\xa5\x04\xc3\x27\x34\x49\x8d\
+\x10\x08\xb3\xa2\x4a\x98\xa9\x20\xb1\x64\xfa\x6f\x02\xf9\x64\x6e\
+\x33\xf2\xf6\x09\xd4\x47\xae\x37\x90\x43\x96\x50\x38\xbf\x8d\xf8\
+\xb1\xa7\xf7\x93\x99\x4d\xa1\xd9\xa5\x08\x39\x14\x04\x2e\xec\x34\
+\x7c\xc8\x69\xb3\x04\x89\x0d\x8d\x19\x1c\x9d\x62\x0a\x07\x12\x1c\
+\x66\xe2\xef\x4a\xec\xe7\x94\x9b\xe3\x47\xe9\x53\xe5\x86\x29\x82\
+\x0d\xe4\x8f\xed\x98\x06\x05\xa7\xfd\x6c\x3e\xfc\xcf\x25\x3e\x31\
+\x5e\xbd\xfa\x1f\x0e\x0e\xd3\xe3\
+\x00\x00\x00\x57\
+\x62\
+\x6f\x72\x64\x65\x72\x2e\x6c\x65\x66\x74\x3a\x20\x31\x30\x0a\x62\
+\x6f\x72\x64\x65\x72\x2e\x74\x6f\x70\x3a\x20\x31\x32\x0a\x62\x6f\
+\x72\x64\x65\x72\x2e\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x32\x0a\
+\x62\x6f\x72\x64\x65\x72\x2e\x72\x69\x67\x68\x74\x3a\x20\x31\x30\
+\x0a\x73\x6f\x75\x72\x63\x65\x3a\x20\x74\x69\x74\x6c\x65\x62\x61\
+\x72\x2e\x70\x6e\x67\x0a\
+\x00\x00\x09\x41\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x2a\x00\x00\x00\x2a\x08\x06\x00\x00\x00\xc5\xc3\xc9\x5b\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
+\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xda\x04\x1b\
+\x04\x2f\x1f\x95\xf4\x7e\xf3\x00\x00\x00\x19\x74\x45\x58\x74\x43\
+\x6f\x6d\x6d\x65\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\x77\
+\x69\x74\x68\x20\x47\x49\x4d\x50\x57\x81\x0e\x17\x00\x00\x08\x9c\
+\x49\x44\x41\x54\x58\xc3\xed\xd8\xcb\x6b\x1c\xc9\x1d\x07\xf0\x6f\
+\xf5\x68\x66\xa4\xe9\xe9\xd7\x8c\x34\xef\x87\xde\xb6\x25\x3f\xd6\
+\x22\x78\x2f\x59\x08\x59\x58\x91\xc3\xc2\x9c\x96\x60\x12\x1c\xc8\
+\x3f\x60\xcc\x1e\xb2\xe7\xdc\x42\x62\x72\x0e\x39\x38\xe0\x40\x72\
+\x32\xe4\x92\xd3\x1e\xf6\x12\x23\x2c\xaf\xac\x40\x62\x58\xad\xa4\
+\xd1\x8c\xe7\xa9\x79\xb5\xa6\xbb\xa7\xbb\xa7\xbb\x2a\x87\x1e\x8d\
+\xed\xc5\xd6\xc3\xab\xe4\x10\x5c\xd0\x8c\x98\x47\xd5\x87\x5f\xfd\
+\xea\xf7\x2b\x04\xbc\x1f\xef\xc7\xfb\xf1\x3f\x1f\x04\x80\x74\x81\
+\xf3\x45\x00\x70\x17\x8e\x5c\x58\x5c\xfc\x3c\x93\xcd\xb2\xb5\xb5\
+\x1f\xdc\xb9\x80\xf9\x62\x89\x44\xc2\x9a\x9b\x9b\xfb\x62\x14\x80\
+\x53\x87\xef\x2c\xc8\xa5\xc5\xa5\xbb\x93\xc1\xc9\xdf\x5d\xb9\x72\
+\x05\xd5\x6a\xb5\x90\xcf\xe7\x8a\xf5\x7a\x7d\xfb\x5d\x91\xb3\xf9\
+\xfc\xd7\xab\xab\xab\x8a\x69\x9a\x1f\x4b\x92\xac\x76\x3a\x9d\x8d\
+\xef\x0b\x25\x8b\x0b\x0b\x77\x83\xc1\xc0\xfd\x6b\x57\x57\x11\x89\
+\x46\x11\x89\x28\x38\x38\x38\x28\x64\xb3\xd9\x62\xa3\xd1\x38\x17\
+\x56\x10\x84\x54\x2a\x91\xdc\xbc\x76\xed\x6a\x3a\x37\x3b\x0b\x51\
+\x94\xd0\x6e\xb7\xd7\x25\x49\x3a\x15\xeb\x3b\x71\xbb\xe7\xe7\xef\
+\x06\x83\xc1\xfb\xab\xab\x57\x11\x0a\xf1\xd0\x34\x0d\x93\x53\x93\
+\x88\x44\xa3\x28\x95\x4a\x85\x6c\x26\x5b\x6c\x34\xcf\x86\x5d\x5d\
+\x5d\xbd\xee\xf3\xf9\x1e\xaf\x5c\xb9\x92\x48\xa6\x52\xe8\x1f\x69\
+\x98\x9a\x9a\x84\x2c\xcb\x68\xb5\xdb\xeb\xa2\x28\xaa\xdd\x6e\x77\
+\xe3\xbc\x50\x32\x3f\x37\x77\x37\x10\x08\xde\x5f\x59\x59\x05\xcf\
+\x87\xa0\xf5\xfb\xa0\x8c\xc2\xb6\x6d\xf0\xa1\x10\xa2\x91\x08\x4a\
+\xa5\x52\x21\x93\xc9\x14\x9b\xcd\xe6\x89\xd8\x95\x95\x95\xeb\xba\
+\xae\x7f\x75\x79\xf9\x52\x24\x95\x4e\xa3\x7f\xd4\x87\xeb\x3a\xb0\
+\x2d\x1b\x21\x3e\x04\x49\x92\xd1\xe9\x74\xd6\x05\x41\x50\x7b\xbd\
+\xde\xc6\x59\xa1\x5c\x36\x93\xfd\xd5\xe4\xe4\xe4\x6f\xae\x5e\x5d\
+\x05\xcf\xf3\xe8\x1f\xf5\xc1\x18\x03\xc0\xc0\x18\x7b\x89\x8d\x4e\
+\xa3\x5c\x3e\x19\xbb\xb6\xb6\xf6\x43\x55\x55\xbf\x5c\x5e\x5e\x96\
+\xd2\xe9\x34\x54\x55\x85\xe3\xb8\x60\x8c\x81\x52\x0a\xdb\xb2\xc0\
+\x0b\x61\x48\x92\x84\x6e\xb7\xbb\xce\xf3\xbc\xa6\xaa\xea\xe3\xb3\
+\x40\x15\x9f\xcf\xf7\x97\xc5\x85\x85\xa9\x6c\x2e\x87\x5e\x4f\x85\
+\xeb\xb8\x20\x60\xa0\x23\xe8\x78\x81\x70\x18\xd3\xd1\x28\x4a\xe5\
+\x72\x21\x9d\x4e\x17\x0f\x0f\x0f\x5f\xc3\x7e\xf8\xe1\x87\x9f\x1e\
+\x1e\x1e\xfe\x6d\x69\x69\x89\xcf\x64\x32\x50\xbb\x5d\xb8\x8e\x0b\
+\xc6\x00\xc6\xd8\xf8\x75\x38\xb4\xa1\x28\x0a\x08\x21\x28\x95\x4a\
+\x37\x0d\xc3\xf8\x03\x00\xeb\x34\xe8\xc0\x34\xcd\x07\xc3\xe1\xf0\
+\xb6\x8f\x70\x62\x2c\x36\x03\xd3\x34\xe1\xba\x2e\x28\xf5\x90\x8c\
+\x31\x50\x60\x8c\x8d\x46\xa3\x28\x97\xcb\x85\x64\x32\x59\x6c\xb5\
+\x5a\xdb\x00\x70\xeb\xd6\xad\x42\xa3\xd1\x78\xb4\xb0\xb0\x10\xc8\
+\x66\xb3\xe8\x74\x3a\x70\x1c\x07\x60\x0c\x8c\xd1\x11\xd4\x7b\xc2\
+\xa2\x80\x7e\xbf\x8f\x67\xcf\x9e\x55\x1a\x8d\xc6\xc7\x00\x5e\xbc\
+\xa9\x88\xbf\xb5\x8c\xa4\x92\xc9\xaf\x97\x96\x96\xd3\xf9\x7c\x1e\
+\xdd\x76\x1b\x43\xea\x82\x10\x02\x42\x08\x28\xa5\xe3\x2f\xca\xb2\
+\x0c\xc3\x30\xb0\xbd\xbd\x8d\xa9\xa9\xa9\x5f\x84\xc3\x61\xf5\xf0\
+\xf0\xf0\xd1\xfc\xfc\x3c\x72\xb9\x1c\x3a\x9d\x0e\x5c\xd7\x05\xc6\
+\x3f\xf1\x80\x20\x80\x2c\x2b\x30\x06\x06\x9e\x3c\x79\x52\xa9\x56\
+\xab\x9f\x00\xf8\xf7\xdb\xba\x0d\x4e\xc3\x5e\x5a\x5a\x4e\xe7\xf2\
+\x39\xb4\xdb\x6d\x6f\xeb\x38\xef\x67\xc7\x58\x42\x08\x64\x59\xc6\
+\x60\x30\xc0\xd3\xa7\x4f\x41\x29\xc5\xf2\xf2\x65\xe4\xf3\x39\xb4\
+\xdb\x2d\x38\xce\x10\x00\x03\x18\x19\x2d\x49\x40\x08\x20\xcb\x12\
+\x0c\xdd\xc0\x93\xcd\xcd\x4a\xad\x5e\x7b\x2b\xf2\x2c\x75\x54\xef\
+\x6b\xda\x43\xcb\xb2\x6e\xfb\x38\x4e\x4c\xa6\x52\x18\x0c\x06\x70\
+\x5c\x77\x9c\x02\xc7\x8f\x69\x9a\x08\xf3\x61\x0c\xcc\x01\x9c\xa1\
+\x83\xd5\x95\x55\xb4\x3b\x1d\x0c\x87\x43\x50\xea\x8e\xb6\x1b\xa3\
+\x43\x49\x20\xcb\x12\x34\xc3\xc0\xe6\xe6\x66\xa5\x5e\xaf\x9f\x88\
+\xc4\x59\xdb\x17\x80\x58\x32\x9e\xf8\x7a\x61\x71\x21\x3d\x37\x37\
+\x87\x46\xb3\xe9\xe5\xdb\xab\x13\x11\x02\xc2\x00\x59\x51\xe0\xf7\
+\x4f\xa0\xd5\xea\xc2\xa5\x14\xde\x7e\xb3\xd1\xe3\xa5\x8d\xa2\x44\
+\x30\x18\x18\x78\xfa\xf4\x69\x43\x55\xd5\x9f\x0c\x06\x83\xad\x8b\
+\x68\xa1\x00\xa0\x6b\xba\xf6\xd0\xb2\xec\xdb\x60\x44\x4c\x67\xd2\
+\x30\x0c\x03\xae\xeb\x8e\x23\xea\xa5\x1e\x83\x61\x18\x30\x0c\x03\
+\x8e\xe3\x82\x8e\xde\x3f\x3e\x3c\x00\x81\xa2\x28\x30\x0c\x1d\x5b\
+\x5b\x5b\x3d\xd3\x34\x3f\xd5\x34\x6d\xf3\xa2\x7a\xfd\x18\xab\xeb\
+\xfa\x43\xcb\xb2\x6e\x03\x10\xb3\xd9\x2c\x34\x4d\xf3\x0e\x09\x46\
+\xe5\x66\x54\x15\x28\xa5\xe3\x73\x73\x5c\x86\x00\x0e\x91\x88\x02\
+\xc3\x30\xb0\xb5\xb5\xd5\x07\xf0\x59\xab\xd5\xfa\xea\xac\x8b\xfb\
+\xce\x79\xa1\xd0\x75\xc3\xc3\x52\x4a\xc5\x4c\x26\x03\x5d\xd7\xe1\
+\x38\x8e\x17\x3d\xea\x95\x1e\x4a\x19\x18\xa5\x60\xcc\x05\xa3\x0c\
+\xcc\xa5\x50\x14\xef\xb0\x6d\x3f\xdb\xb6\x27\x7c\xbe\x9f\xd6\x6a\
+\xb5\xbf\x9f\xf7\x8e\x79\xee\x21\x08\x42\xd6\xef\xf7\x17\x05\x41\
+\xe0\x3e\xfa\xe8\x23\xec\xed\xed\x61\xe8\x38\xe0\xd8\xcb\xef\x1c\
+\x77\x32\x80\x43\x24\x1a\x41\xad\x56\x43\xa5\x52\x45\x28\x34\xf9\
+\xf3\x52\xb9\xfc\xf0\xbc\x6b\xbe\xd3\xc5\x55\x92\xe5\x1f\x13\x42\
+\x38\x49\x92\xd0\x6c\x36\x61\x59\x16\x28\xa5\x70\x29\x7d\xad\x98\
+\x53\x0a\xf8\x26\x26\x30\x3d\x3d\x83\x6e\xa7\x07\x97\xba\xc3\x6e\
+\xb7\xfb\xd5\xbb\xac\x79\xee\x88\xe6\x73\xb9\x3b\x03\xd3\x7c\x70\
+\xed\xea\x35\x04\x83\x41\x34\x1a\x0d\x70\xa3\x26\x70\x3c\x1d\x01\
+\xc0\x38\x2f\x9e\x00\xe0\xf7\xfb\x91\xc9\x64\xf0\xed\xce\x0e\x0e\
+\x4a\x07\x75\xcb\xb2\x6f\x69\xfd\x7e\xf9\x3c\xeb\x9e\x2b\x47\x73\
+\xd9\xdc\x1d\xcb\xf2\x90\xe1\x30\x8f\x76\xab\x05\x8e\x70\xe0\x38\
+\x02\x42\x7c\xe3\xae\x45\xc8\x88\x3b\xfa\x9b\x52\x0a\x5d\xd7\x31\
+\x3f\x37\x0f\xd7\xa5\x61\xad\xdf\xff\x6c\x30\x18\x3c\x04\xa0\x5f\
+\x38\x34\x9f\xcf\xdf\xb1\x2d\xeb\xc1\xf5\x6b\x37\xc0\x87\x79\xb4\
+\x0e\x5b\xaf\xec\x09\x01\xc7\x79\xb5\x34\x10\x08\x78\x1d\x6b\x8c\
+\xf6\x1e\x46\x19\x74\x5d\xc7\xdc\xec\x2c\x18\x63\xa2\x6d\xdb\xb7\
+\x0d\xc3\x38\x33\xf6\x4c\xd0\xd9\xd9\xd9\x9f\x59\xb6\xf5\xe0\xc6\
+\xf5\x1b\x84\x0f\xf3\x68\xb7\xda\xe3\xda\xe9\x41\x38\x00\x04\x81\
+\x80\x1f\xf9\xd9\x59\x98\x96\x09\xc7\x76\xc0\x71\x5e\xb4\x39\xe2\
+\x3d\x60\x0c\x86\x6e\x20\xff\x0e\x58\xdf\x99\x90\x96\xf5\xa7\x1b\
+\xd7\x6f\x70\xa1\xd0\xcb\x48\x12\x42\xc0\x71\xdc\xf8\x35\x10\x0c\
+\x20\x99\x4c\xe2\xf1\xe3\x7f\x80\x52\x8a\x54\x2a\x05\xcb\xb4\x46\
+\x9f\x8f\xa0\x20\xa0\x94\x61\x60\x18\xc8\xe7\x67\xc1\x70\x76\xec\
+\x89\xd0\x4c\x26\xf3\xa9\x6d\xdb\x7f\xfe\xe0\x83\x0f\x26\x78\x9e\
+\x47\xa7\xd5\x06\xc0\x40\x08\xe0\xf3\xf9\xc6\x11\xf3\xfb\xfd\x48\
+\xa6\x52\xd8\xdf\xdb\x47\xbd\xde\xa0\xba\xa6\x93\x78\x2c\x06\x59\
+\x91\x61\x59\xe6\x6b\x29\x40\x08\x01\x63\x2e\x0c\xd3\x44\x3e\x9f\
+\x07\x63\x10\x87\x43\xfb\xb6\xae\xeb\x27\x62\xdf\x0a\x4d\x26\x93\
+\x9f\x50\x4a\xff\x7a\xf3\xe6\xcd\x10\xcf\xf3\xe8\x76\xbb\x20\x78\
+\x35\x8a\x5e\x84\xfc\x7e\x3f\xe2\xc9\x04\xf6\xf7\x76\xb1\xbb\xb7\
+\x57\x39\x6c\x1d\x2e\xc7\x63\xf1\x7f\x55\x6b\xd5\x42\x34\x1a\x85\
+\x24\x49\x30\x2d\x0b\x20\x04\xe0\x08\x08\xe7\xa5\x0a\x03\x30\x18\
+\x98\xc8\xe5\xb2\xe0\x38\x4e\xb4\xed\x93\xb1\x6f\x84\xc6\x62\xb1\
+\x1f\x71\x1c\xf7\x68\x6d\x6d\x4d\xe0\x79\x1e\xbd\x5e\x0f\x8c\x31\
+\x10\xc2\xc1\xc7\xbd\xcc\x49\xbf\xdf\x8f\x78\x22\x8e\xe2\xfe\x3e\
+\x76\xf7\xf6\x2a\xcd\x66\x73\x0d\x40\xb3\xdb\xeb\x6e\xc7\xe3\xf1\
+\xe2\x8b\x6a\xa5\x10\x8d\x46\x21\x4a\x12\x2c\xcb\xfa\x4e\xf5\xf6\
+\x4a\xb8\x69\x9a\xc8\x64\xd2\x20\x64\x62\x84\xd5\xde\x88\x7d\x13\
+\x54\x9a\x9c\x9c\xdc\xbc\x74\xe9\xb2\x90\x4e\xa7\xd1\x69\xf7\x40\
+\xd9\xf1\xbd\xf3\x65\xd9\x09\x04\x03\x88\xc5\x63\x1e\x72\x77\xaf\
+\xd2\x68\x34\xd6\x00\x34\x8f\x27\xe9\x74\x3a\xdb\x89\x58\xa2\x58\
+\x79\xf1\xa2\x10\x89\x46\x21\x8a\x22\x86\xc3\x21\x38\x8e\x03\x38\
+\x02\x1f\x37\x31\x4a\x03\x06\xcb\xb2\xb0\xb8\x38\x0f\xdb\xb6\xc5\
+\x7e\xbf\xff\x4b\xcb\xb2\xfe\x08\x60\x70\x1a\xd4\x56\x22\x8a\x3d\
+\x30\x06\x9f\xf0\x53\x21\x48\xb2\x04\xcb\x34\x47\x3e\x2f\xc7\xfc\
+\x7e\x3f\x66\x66\x66\x70\x70\x70\x80\x9d\x6f\xbf\xad\xd4\x1b\xf5\
+\xd7\x90\xaf\x62\xe3\xf1\x44\xb1\xf2\xa2\x52\x88\x4e\x47\x21\x08\
+\x02\x2c\xcb\x1a\x55\x34\x6f\x2e\x9f\xcf\x07\x59\x96\xd0\x6e\xb7\
+\x51\x2c\x16\x41\x08\xf9\xb5\xa6\x69\x5f\xe2\x65\xbf\x78\xfb\xd6\
+\xf7\xfb\xfd\xc7\x61\x3e\xac\x76\xba\xdd\x75\x51\x94\xa0\x28\x32\
+\x6c\xdb\x1e\x77\x99\xe9\xe9\x69\x94\x4a\x25\xec\xec\xec\x54\xea\
+\xf5\x37\x23\x5f\xc5\x26\x13\x89\xe2\x8b\xca\x28\x0d\x44\x11\xb6\
+\x6d\x83\xc0\x43\x46\x22\x0a\xfa\xfd\x3e\x9e\x3f\x7f\x0e\xc7\x71\
+\xee\x55\x2a\x95\xdf\x7e\x17\x79\xe2\x61\x3a\x3a\x3a\xda\x08\x0b\
+\x82\xda\xed\x76\xd7\x25\x59\x82\x2c\xcb\x70\x5d\x17\x51\xef\x9f\
+\x0f\xf8\xe6\x9b\x6f\x2a\xb5\x5a\xed\x44\xe4\xf1\x68\x77\xda\xdb\
+\x89\x44\x62\xb7\x52\xa9\x14\xa6\xa7\xa7\x89\x28\x8a\x70\x1c\x17\
+\x8a\x22\x43\xd3\x34\x3c\x7f\xfe\x1c\xc3\xa1\x7d\xaf\x5c\x2e\xff\
+\xfe\x4d\xc8\x53\xcb\xd3\xd1\x91\xba\x21\x84\x05\xb5\xdb\xed\xac\
+\xcb\xb2\x8c\x44\x22\x81\xfd\xfd\xfd\x73\x21\xc7\xd8\x76\xfb\x9f\
+\x8a\xa2\x6c\x56\xab\xd5\xc2\xcc\xf4\x4c\x20\x3a\x1d\x85\xaa\x1e\
+\x8d\x90\xc3\x7b\xe5\x72\xe9\xad\xc8\x33\x15\x7c\xf5\x48\xdd\x10\
+\x04\x41\xed\x74\x3a\xeb\x96\x65\x61\x67\x67\xa7\x52\xad\x56\xcf\
+\x85\x3c\x1e\xbd\x5e\x6f\x47\x14\x84\x8d\x7a\xbd\x56\x98\x98\xf0\
+\x07\x77\x77\x77\x31\x1c\x0e\xef\x95\x4a\x07\x27\x22\xcf\x75\xcb\
+\xca\x64\x32\x5f\x28\x8a\xd2\x06\x10\xfb\xbe\x93\x65\xd2\xe9\x8f\
+\x67\x66\x66\xd4\x5c\x2e\xf7\xf9\xbb\xde\x89\x4f\xbb\xbb\x46\x2e\
+\x70\x3e\xe9\xbf\x81\x7c\x3f\xfe\xef\xc6\x7f\x00\xba\x0e\x9f\x79\
+\x33\xcd\x2d\x45\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x05\x87\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x2c\x00\x00\x00\x26\x08\x06\x00\x00\x00\xbf\x1f\x79\x67\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\xa7\x93\x00\
+\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\
+\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xd9\x08\x18\
+\x05\x1c\x2a\x67\x3f\x85\x96\x00\x00\x00\x19\x74\x45\x58\x74\x43\
+\x6f\x6d\x6d\x65\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\x77\
+\x69\x74\x68\x20\x47\x49\x4d\x50\x57\x81\x0e\x17\x00\x00\x04\xe2\
+\x49\x44\x41\x54\x58\xc3\xed\x99\xdb\x6b\x5c\x55\x18\xc5\x7f\xfb\
+\x72\xce\x4c\x26\x93\xdb\x34\x33\x49\x26\x8d\xf6\x06\xf5\x52\xaa\
+\xf6\xa2\xa2\x2f\xa3\x0f\xfa\x24\x42\x11\x45\x10\x7d\x53\x9f\x8b\
+\xe0\x93\x54\xff\x05\xfd\x07\xc4\x17\x95\xa2\x2f\x82\x97\x2a\x18\
+\x14\xfa\x50\x83\xa0\xb4\x5a\x2f\xb5\xb5\x6a\xad\x69\xd2\xc6\x34\
+\xe9\xe4\xcc\x39\xfb\xfb\x7c\x98\x4c\x4c\x6c\x35\x49\x49\x9a\x14\
+\xfb\xc1\xe6\xc0\xcc\x3e\x67\xd6\x5e\x7b\xed\xb5\xcf\x5e\x63\x98\
+\x57\x03\x5b\x07\x5e\xae\x6c\xab\x1c\x28\xdf\xda\x47\xbe\x3f\x87\
+\x69\xb3\x18\x07\x9a\x0a\xd7\xba\x5c\x12\x73\xfe\xf4\x38\x67\x8f\
+\xfe\x4e\xb1\xbf\x7d\x78\xf0\x9e\xc1\xc7\xb1\x8c\x19\x80\x6a\xf7\
+\x40\xc9\x6e\x72\xef\xec\x7a\x7a\x57\xad\x74\x4b\x09\x11\x41\x32\
+\xa1\x91\x65\xa4\x2e\xc5\xa9\xc3\x5a\xbb\xac\x1f\x34\xc6\xfc\xe7\
+\xf7\xaa\x3a\xf7\x4c\x11\x59\x70\x4f\x08\x81\x28\x8a\xc8\x05\x83\
+\x51\xc3\x99\x91\x73\x9c\x3a\x72\x92\x1d\xcf\xee\xac\x9a\xbe\x72\
+\x5f\x7f\xe7\xc6\xee\x37\xef\x79\x69\x6f\xcd\xc7\x96\x7a\x92\x12\
+\x12\xa5\x73\xaa\x40\x57\x57\x17\x91\xe6\x50\x03\xce\xb9\x15\x67\
+\x71\x3e\x60\x55\xc5\x18\x83\xaa\x22\x22\x8c\x5d\x1a\x65\x34\x3b\
+\x47\xcf\x40\x0f\x05\x5f\xe0\x8f\x63\x67\xf9\xf5\xfd\x5f\x86\xbd\
+\x2d\xda\x47\xb7\x3e\xb1\xb9\xe6\xbd\x65\xf2\xec\x04\x4c\xc5\x3c\
+\x7d\xdf\x33\xec\x1d\xdc\x45\xb9\xaf\x8c\xb7\x7e\x51\xb6\x56\xba\
+\x44\x84\x9f\xc6\x4e\xf2\xf1\x57\x87\xf8\xe0\xdb\x8f\x91\x9b\x61\
+\xe0\xf6\x0a\xe3\xc7\xcf\xd5\xdc\xc6\x9d\x43\x23\xdb\xf7\x6d\x27\
+\x6b\x18\x64\xcc\x72\xe0\xb1\x97\xb8\x7f\xf3\xbd\x74\x74\x14\x91\
+\x46\x00\xcb\xb2\xe5\xb0\x54\x50\x2d\x19\xb4\xd8\x9d\x5f\x5d\xbe\
+\x9d\x3d\x9b\xf6\x50\x8a\x37\xf0\xd9\x57\xc3\x84\x28\xa3\x7b\xa8\
+\x8c\xad\x6c\x29\x63\xd4\xf1\xe7\x85\x49\xf6\xdd\xbd\x8f\xdb\xaa\
+\xb7\x11\x7c\x40\x8c\x40\xac\x60\xb4\xa9\xb9\x20\x2b\xda\x8c\x02\
+\xa2\x68\x90\xb9\x6b\xab\x21\x8a\x44\x60\x62\xc3\x83\x3b\x1f\x60\
+\xf7\xe0\x5e\x92\xc9\x19\xa2\x1e\x8f\x2f\x54\xda\x49\xd2\x3a\x7e\
+\xcc\xb0\xbb\x7f\x27\xa8\x10\xbb\xdc\xec\x38\xa3\xbf\x17\x91\xb3\
+\xab\x2a\x83\x7f\xb2\x1c\x69\x4c\x08\x29\xb9\x5c\x4c\x6d\x4b\x8d\
+\x4f\x3f\xfa\x84\xf6\xfe\x4e\xbc\x14\x94\xac\x21\x74\x16\xba\xb9\
+\x69\x68\x13\xce\xfa\x05\x0f\x4a\xb3\x19\xbc\xcb\x2d\x5b\xc7\xaa\
+\xba\x64\x17\x69\xf5\x5d\x70\x8f\x28\x9a\x00\x1e\x86\xba\xaa\x38\
+\xf5\x44\x2e\x87\xcf\x48\x11\x11\xea\xd3\xd3\xe4\x7d\xae\x69\x67\
+\x9a\x90\x8f\xda\x08\x49\x4a\x94\xcb\x2f\x09\xc0\xd5\xd8\x5a\xab\
+\xdf\x95\xfa\x06\x32\x5c\xce\x92\x25\x33\xc4\xc5\x18\xa7\x79\xc0\
+\xe2\xbd\xc4\x20\x60\xc5\x36\xa7\xc5\x19\xf2\xa6\xad\x69\xde\xb9\
+\x68\xc9\x00\x96\x5b\x8b\x3d\xcf\xb9\x08\x55\xc5\x7b\x8f\x55\x43\
+\x72\x71\xaa\x69\x85\x8b\x4e\xad\x84\x65\xb3\xbb\x9a\x65\x57\x82\
+\x8d\x35\x05\xbc\x9e\xc0\x5d\x15\xc3\xc6\xba\xeb\x0b\xf0\xba\xd7\
+\xf0\x3f\xc1\x19\xeb\xd6\xb7\x86\xd7\x3d\xc3\xc6\x18\x04\x01\x6b\
+\x16\xbc\x8c\xcc\xa3\x78\x4d\x80\xcd\xdf\xaa\x5b\x57\x55\xc5\x72\
+\x9d\xd5\x0d\xc0\x37\x00\xff\x2f\x00\x5f\x57\x3e\xbc\xee\x18\x36\
+\xc6\xe2\x89\x17\x78\xdd\x7a\x60\xd7\x18\xd3\x3c\xe3\xa9\x12\x10\
+\xe2\x38\xd7\x02\x0c\x21\xa4\x64\x59\x63\xde\xee\xc6\x5c\xa0\xb1\
+\x56\xbb\x9c\xaa\x82\x35\x28\x82\x33\x8e\x34\x0d\x58\x6b\xb1\x22\
+\xcd\x53\xaa\xc5\xce\x1d\x57\xac\x9b\x65\x1b\x59\xb3\xa9\x57\x99\
+\x3d\x3e\x61\xb1\x58\x9c\x1a\x2c\xcc\x02\xb6\xe6\xb2\x2d\x39\x4d\
+\x53\xdc\x1a\x84\x28\xf3\xdf\x08\x54\x15\x45\xc8\xb2\x0c\xef\x63\
+\x32\x11\xac\x9f\x7d\xdf\x15\x11\x8c\x31\x73\x32\x88\xa2\x68\x4d\
+\xdd\x61\xc1\x9a\xb2\xd0\x90\x04\x69\x02\xf6\xf8\x38\x46\x1d\x04\
+\x15\xac\xb5\xa8\xcc\x8e\x4e\x15\x09\x3a\x97\xd2\x5c\xf3\x12\xc5\
+\x1a\x47\x3d\xcc\xa0\x4e\x89\x7d\x8c\x4d\xea\x0d\x4c\xa4\xd4\x93\
+\x3a\x3f\x9c\xf8\x7e\x76\x78\x4d\xb0\x21\x04\xcc\x2a\x45\x55\x4b\
+\x59\x74\x2d\xa2\x8e\x9d\xf8\x86\xa8\xa3\x99\x8d\xd8\xe9\xe9\x69\
+\xac\xb7\x4c\x4c\x4d\x30\xf2\xe5\x08\xa9\x34\x9a\x7a\x46\x9a\x89\
+\xa5\xac\x91\x4b\xd0\x34\x83\x46\x9a\x70\xe4\xcb\x23\x98\x08\x1a\
+\x8d\x06\x76\xea\x8b\x09\x62\x9f\xa7\xbc\xb5\xc2\xeb\x87\xdf\xe0\
+\xc8\xb1\x11\x10\x20\x18\x82\x86\xab\x76\x8a\x96\xa4\xfe\xab\x89\
+\x08\x21\x04\x42\x08\x73\x91\x6b\xeb\x33\x6b\x1c\x58\xc3\xc1\x8f\
+\x0e\x32\xfc\xe3\x30\x85\x6a\x9e\xf4\x42\x82\x73\xde\xbd\xd7\xb3\
+\xb9\xf4\x5c\x79\x73\x85\xd1\xe9\x3f\x38\xfc\xf9\x61\x48\x1d\xbd\
+\xa5\x0a\xdd\x1d\x5d\x08\x82\xc1\xac\xca\x02\x34\xc6\x34\xbd\xd5\
+\xda\xcb\xa2\xab\x9f\x7f\xfb\x95\xd7\xde\x7d\x95\xb7\x3e\x7c\x9b\
+\xd2\x8e\x5e\xfa\x37\x56\x39\x7d\xe8\x14\x66\x43\x79\xc3\x23\x6d\
+\x03\xd1\xfe\xda\xfe\x87\x6a\x49\x7b\xc2\x85\xef\xc6\x19\x3f\x31\
+\x4e\x6f\xa9\x97\xa2\x2d\x52\xa4\x03\x1b\x5b\x74\x99\x78\x17\x0b\
+\xc0\xb3\x2c\xbb\x2c\xa6\x6a\xb1\xac\x0a\x63\x97\xce\x33\xee\xc6\
+\xe8\xbd\xa9\x44\x79\x6b\x99\xf1\xa3\x67\x99\xfc\xa2\xfe\x82\xa9\
+\x0e\x0c\x9a\x34\x0d\x0f\x77\x6c\x2b\xbe\x78\xd7\x93\xbb\x6a\x6d\
+\x43\x05\x34\x18\x46\xcf\x8c\xd2\x98\x9a\x41\x26\x53\x1a\x64\x78\
+\xef\x57\x34\x8a\x0a\x9a\xfd\xeb\x7d\xc6\x40\x57\x5f\x0f\x85\xee\
+\x1c\xf9\x42\x91\xf3\x5f\x5f\xe0\xf8\xa1\xa3\xaf\x14\xfa\x0b\x2f\
+\x37\xff\xe3\xa8\x56\x73\x72\x49\x7a\x28\xf2\x7c\xf9\x8e\xca\x81\
+\xce\xa1\x22\x6d\xa5\x3c\xb9\xae\x36\xea\x49\x83\xbc\xcf\xb3\x5c\
+\x45\xc8\x22\x8b\x55\x35\x5c\x31\x18\x6c\x49\x64\xe6\xe2\x25\x2e\
+\x9e\x9a\xa2\x31\x16\x3e\x29\xdd\x59\x7a\xca\x17\xfc\xb8\x71\x46\
+\xfe\x02\x18\x0f\xa2\x8d\xe6\x63\xa5\x8b\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x13\xce\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x22\x2e\x2e\x2f\x63\x6f\x6e\x74\x65\x6e\x74\x73\
+\x22\x0a\x49\x74\x65\x6d\x20\x7b\x0a\x20\x20\x69\x64\x3a\x63\x6f\
+\x6e\x74\x61\x69\x6e\x65\x72\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\
+\x33\x32\x30\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x34\x38\x30\
+\x0a\x0a\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\
+\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x35\x0a\x20\x20\x20\x20\x61\
+\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x70\x61\x72\x65\
+\x6e\x74\x0a\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x20\x66\x6f\
+\x6e\x74\x2e\x70\x6f\x69\x6e\x74\x53\x69\x7a\x65\x3a\x31\x35\x3b\
+\x20\x74\x65\x78\x74\x3a\x22\x52\x6f\x75\x6e\x64\x65\x64\x20\x72\
+\x65\x63\x74\x61\x6e\x67\x6c\x65\x22\x3b\x20\x61\x6e\x63\x68\x6f\
+\x72\x73\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\
+\x74\x65\x72\x3a\x70\x61\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\x7a\
+\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x7d\x0a\x20\x20\x20\
+\x20\x43\x61\x6e\x76\x61\x73\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x69\x64\x3a\x63\x61\x6e\x76\x61\x73\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x33\x32\x30\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x38\x30\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x74\x69\x61\x6c\x69\
+\x61\x73\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\x0a\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x6e\
+\x74\x20\x72\x61\x64\x69\x75\x73\x3a\x20\x72\x43\x74\x72\x6c\x2e\
+\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x69\x6e\x74\x20\x72\x65\x63\x74\x78\
+\x3a\x20\x72\x78\x43\x74\x72\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\
+\x69\x6e\x74\x20\x72\x65\x63\x74\x79\x3a\x20\x72\x79\x43\x74\x72\
+\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x6e\x74\x20\x72\x65\x63\
+\x74\x57\x69\x64\x74\x68\x3a\x20\x77\x69\x64\x74\x68\x20\x2d\x20\
+\x32\x2a\x72\x65\x63\x74\x78\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x6e\x74\x20\x72\x65\x63\
+\x74\x48\x65\x69\x67\x68\x74\x3a\x20\x68\x65\x69\x67\x68\x74\x20\
+\x2d\x20\x32\x2a\x72\x65\x63\x74\x79\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\
+\x67\x20\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3a\x22\x62\
+\x6c\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\
+\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\x66\x69\x6c\
+\x6c\x53\x74\x79\x6c\x65\x3a\x22\x73\x74\x65\x65\x6c\x62\x6c\x75\
+\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\
+\x72\x74\x79\x20\x69\x6e\x74\x20\x6c\x69\x6e\x65\x57\x69\x64\x74\
+\x68\x3a\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x43\x74\x72\x6c\x2e\
+\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x66\x69\x6c\x6c\
+\x3a\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x73\x74\x72\x6f\
+\x6b\x65\x3a\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x61\x6c\
+\x70\x68\x61\x3a\x61\x6c\x70\x68\x61\x43\x74\x72\x6c\x2e\x76\x61\
+\x6c\x75\x65\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x4c\
+\x69\x6e\x65\x57\x69\x64\x74\x68\x43\x68\x61\x6e\x67\x65\x64\x3a\
+\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x46\x69\x6c\x6c\x43\x68\
+\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\
+\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\
+\x53\x74\x72\x6f\x6b\x65\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\
+\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x6f\x6e\x52\x61\x64\x69\x75\x73\x43\x68\
+\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\
+\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\
+\x52\x65\x63\x74\x78\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\
+\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x6f\x6e\x52\x65\x63\x74\x79\x43\x68\x61\x6e\
+\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\
+\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x41\x6c\
+\x70\x68\x61\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\
+\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x6f\x6e\x50\x61\x69\x6e\x74\x3a\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x63\
+\x74\x78\x20\x3d\x20\x67\x65\x74\x43\x6f\x6e\x74\x65\x78\x74\x28\
+\x22\x32\x64\x22\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x63\x74\x78\x2e\x73\x61\x76\x65\x28\x29\x3b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x63\
+\x6c\x65\x61\x72\x52\x65\x63\x74\x28\x30\x2c\x30\x2c\x63\x61\x6e\
+\x76\x61\x73\x2e\x77\x69\x64\x74\x68\x2c\x20\x63\x61\x6e\x76\x61\
+\x73\x2e\x68\x65\x69\x67\x68\x74\x29\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\
+\x65\x53\x74\x79\x6c\x65\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\
+\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6c\x69\x6e\
+\x65\x57\x69\x64\x74\x68\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\
+\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x53\x74\
+\x79\x6c\x65\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x66\x69\x6c\
+\x6c\x53\x74\x79\x6c\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x63\x74\x78\x2e\x67\x6c\x6f\x62\x61\x6c\x41\x6c\x70\
+\x68\x61\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x61\x6c\x70\x68\
+\x61\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x62\x65\x67\x69\x6e\x50\x61\x74\x68\x28\x29\x3b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6d\
+\x6f\x76\x65\x54\x6f\x28\x72\x65\x63\x74\x78\x2b\x72\x61\x64\x69\
+\x75\x73\x2c\x72\x65\x63\x74\x79\x29\x3b\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x74\x6f\
+\x70\x20\x73\x69\x64\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x63\x74\x78\x2e\x6c\x69\x6e\x65\x54\x6f\x28\x72\x65\
+\x63\x74\x78\x2b\x72\x65\x63\x74\x57\x69\x64\x74\x68\x2d\x72\x61\
+\x64\x69\x75\x73\x2c\x72\x65\x63\x74\x79\x29\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x64\x72\x61\x77\
+\x20\x74\x6f\x70\x20\x72\x69\x67\x68\x74\x20\x63\x6f\x72\x6e\x65\
+\x72\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x61\x72\x63\x54\x6f\x28\x72\x65\x63\x74\x78\x2b\x72\x65\
+\x63\x74\x57\x69\x64\x74\x68\x2c\x72\x65\x63\x74\x79\x2c\x72\x65\
+\x63\x74\x78\x2b\x72\x65\x63\x74\x57\x69\x64\x74\x68\x2c\x72\x65\
+\x63\x74\x79\x2b\x72\x61\x64\x69\x75\x73\x2c\x72\x61\x64\x69\x75\
+\x73\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x74\x78\x2e\x6c\x69\x6e\x65\x54\x6f\x28\x72\x65\x63\x74\x78\
+\x2b\x72\x65\x63\x74\x57\x69\x64\x74\x68\x2c\x72\x65\x63\x74\x79\
+\x2b\x72\x65\x63\x74\x48\x65\x69\x67\x68\x74\x2d\x72\x61\x64\x69\
+\x75\x73\x29\x3b\x20\x20\x20\x20\x2f\x2f\x20\x72\x69\x67\x68\x74\
+\x20\x73\x69\x64\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x2f\x2f\x20\x64\x72\x61\x77\x20\x62\x6f\x74\x74\x6f\x6d\
+\x20\x72\x69\x67\x68\x74\x20\x63\x6f\x72\x6e\x65\x72\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x61\x72\
+\x63\x54\x6f\x28\x72\x65\x63\x74\x78\x2b\x72\x65\x63\x74\x57\x69\
+\x64\x74\x68\x2c\x72\x65\x63\x74\x79\x2b\x72\x65\x63\x74\x48\x65\
+\x69\x67\x68\x74\x2c\x72\x65\x63\x74\x78\x2b\x72\x65\x63\x74\x57\
+\x69\x64\x74\x68\x2d\x72\x61\x64\x69\x75\x73\x2c\x72\x65\x63\x74\
+\x79\x2b\x72\x65\x63\x74\x48\x65\x69\x67\x68\x74\x2c\x72\x61\x64\
+\x69\x75\x73\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x63\x74\x78\x2e\x6c\x69\x6e\x65\x54\x6f\x28\x72\x65\x63\
+\x74\x78\x2b\x72\x61\x64\x69\x75\x73\x2c\x72\x65\x63\x74\x79\x2b\
+\x72\x65\x63\x74\x48\x65\x69\x67\x68\x74\x29\x3b\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x62\x6f\x74\
+\x74\x6f\x6d\x20\x73\x69\x64\x65\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x2f\x2f\x20\x64\x72\x61\x77\x20\x62\x6f\x74\
+\x74\x6f\x6d\x20\x6c\x65\x66\x74\x20\x63\x6f\x72\x6e\x65\x72\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\
+\x61\x72\x63\x54\x6f\x28\x72\x65\x63\x74\x78\x2c\x72\x65\x63\x74\
+\x79\x2b\x72\x65\x63\x74\x48\x65\x69\x67\x68\x74\x2c\x72\x65\x63\
+\x74\x78\x2c\x72\x65\x63\x74\x79\x2b\x72\x65\x63\x74\x48\x65\x69\
+\x67\x68\x74\x2d\x72\x61\x64\x69\x75\x73\x2c\x72\x61\x64\x69\x75\
+\x73\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x74\x78\x2e\x6c\x69\x6e\x65\x54\x6f\x28\x72\x65\x63\x74\x78\
+\x2c\x72\x65\x63\x74\x79\x2b\x72\x61\x64\x69\x75\x73\x29\x3b\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x2f\x2f\x20\x6c\x65\x66\x74\x20\x73\x69\x64\x65\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x64\x72\x61\x77\
+\x20\x74\x6f\x70\x20\x6c\x65\x66\x74\x20\x63\x6f\x72\x6e\x65\x72\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\
+\x2e\x61\x72\x63\x54\x6f\x28\x72\x65\x63\x74\x78\x2c\x72\x65\x63\
+\x74\x79\x2c\x72\x65\x63\x74\x78\x2b\x72\x61\x64\x69\x75\x73\x2c\
+\x72\x65\x63\x74\x79\x2c\x72\x61\x64\x69\x75\x73\x29\x3b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x63\
+\x6c\x6f\x73\x65\x50\x61\x74\x68\x28\x29\x3b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x63\x61\x6e\x76\
+\x61\x73\x2e\x66\x69\x6c\x6c\x29\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\
+\x6c\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x69\x66\x20\x28\x63\x61\x6e\x76\x61\x73\x2e\x73\x74\x72\x6f\
+\x6b\x65\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\x65\x28\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x72\x65\x73\x74\x6f\x72\x65\x28\x29\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\
+\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x63\x6f\x6e\x74\x72\x6f\x6c\
+\x73\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\
+\x33\x32\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\
+\x68\x74\x3a\x31\x35\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x43\
+\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x33\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\
+\x3a\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x43\x74\x72\x6c\x3b\x20\
+\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\
+\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x31\x3b\x20\x6d\x61\x78\
+\x3a\x31\x30\x3b\x20\x69\x6e\x69\x74\x3a\x32\x3b\x20\x6e\x61\x6d\
+\x65\x3a\x22\x4c\x69\x6e\x65\x20\x77\x69\x64\x74\x68\x22\x7d\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\
+\x20\x7b\x69\x64\x3a\x72\x78\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\
+\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\
+\x30\x3b\x20\x6d\x69\x6e\x3a\x35\x3b\x20\x6d\x61\x78\x3a\x33\x30\
+\x3b\x20\x69\x6e\x69\x74\x3a\x31\x30\x3b\x20\x6e\x61\x6d\x65\x3a\
+\x22\x72\x65\x63\x74\x78\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x72\x79\
+\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\
+\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\
+\x35\x3b\x20\x6d\x61\x78\x3a\x33\x30\x3b\x20\x69\x6e\x69\x74\x3a\
+\x31\x30\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x72\x65\x63\x74\x79\x22\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\
+\x65\x72\x20\x7b\x69\x64\x3a\x72\x43\x74\x72\x6c\x3b\x20\x77\x69\
+\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\
+\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x31\x30\x3b\x20\x6d\x61\x78\x3a\
+\x31\x30\x30\x3b\x20\x69\x6e\x69\x74\x3a\x34\x30\x3b\x20\x6e\x61\
+\x6d\x65\x3a\x22\x52\x61\x64\x69\x75\x73\x22\x7d\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\
+\x64\x3a\x61\x6c\x70\x68\x61\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\
+\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\
+\x30\x3b\x20\x6d\x69\x6e\x3a\x30\x3b\x20\x6d\x61\x78\x3a\x31\x3b\
+\x20\x69\x6e\x69\x74\x3a\x31\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x41\
+\x6c\x70\x68\x61\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\
+\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x13\xad\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x22\x2e\x2e\x2f\x63\x6f\x6e\x74\x65\x6e\x74\x73\
+\x22\x0a\x49\x74\x65\x6d\x20\x7b\x0a\x20\x20\x69\x64\x3a\x63\x6f\
+\x6e\x74\x61\x69\x6e\x65\x72\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\
+\x33\x32\x30\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x34\x38\x30\
+\x0a\x0a\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\
+\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x35\x0a\x20\x20\x20\x20\x61\
+\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x70\x61\x72\x65\
+\x6e\x74\x0a\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x20\x66\x6f\
+\x6e\x74\x2e\x70\x6f\x69\x6e\x74\x53\x69\x7a\x65\x3a\x31\x35\x3b\
+\x20\x74\x65\x78\x74\x3a\x22\x4d\x61\x6b\x65\x73\x20\x73\x71\x75\
+\x69\x72\x63\x6c\x65\x20\x69\x63\x6f\x6e\x20\x77\x69\x74\x68\x20\
+\x63\x6c\x69\x70\x22\x3b\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x68\
+\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\
+\x70\x61\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\
+\x6c\x43\x65\x6e\x74\x65\x72\x7d\x0a\x20\x20\x20\x20\x43\x61\x6e\
+\x76\x61\x73\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x63\
+\x61\x6e\x76\x61\x73\x0a\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\
+\x68\x3a\x33\x32\x30\x0a\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\
+\x68\x74\x3a\x32\x38\x30\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\
+\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\x73\x74\x72\
+\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3a\x22\x62\x6c\x75\x65\x22\x0a\
+\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\
+\x74\x72\x69\x6e\x67\x20\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\x3a\
+\x22\x73\x74\x65\x65\x6c\x62\x6c\x75\x65\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x6e\x74\x20\x6c\
+\x69\x6e\x65\x57\x69\x64\x74\x68\x3a\x32\x0a\x20\x20\x20\x20\x20\
+\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x6e\x74\x20\x6e\x53\
+\x69\x7a\x65\x3a\x6e\x43\x74\x72\x6c\x2e\x76\x61\x6c\x75\x65\x0a\
+\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\
+\x65\x61\x6c\x20\x72\x61\x64\x69\x75\x73\x3a\x72\x43\x74\x72\x6c\
+\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\
+\x70\x65\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x66\x69\x6c\x6c\x3a\
+\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\
+\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x73\x74\x72\x6f\x6b\x65\x3a\
+\x66\x61\x6c\x73\x65\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\
+\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x70\x78\x3a\x78\x43\x74\
+\x72\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x70\
+\x72\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x70\x79\x3a\
+\x79\x43\x74\x72\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\
+\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\
+\x61\x6c\x70\x68\x61\x3a\x61\x6c\x70\x68\x61\x43\x74\x72\x6c\x2e\
+\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\
+\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\x69\x6d\x61\x67\
+\x65\x66\x69\x6c\x65\x3a\x22\x2e\x2e\x2f\x63\x6f\x6e\x74\x65\x6e\
+\x74\x73\x2f\x71\x74\x2d\x6c\x6f\x67\x6f\x2e\x70\x6e\x67\x22\x0a\
+\x20\x20\x20\x20\x20\x20\x61\x6e\x74\x69\x61\x6c\x69\x61\x73\x69\
+\x6e\x67\x3a\x20\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x43\
+\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x2e\x6f\x6e\x43\x6f\x6d\x70\x6c\
+\x65\x74\x65\x64\x3a\x6c\x6f\x61\x64\x49\x6d\x61\x67\x65\x28\x63\
+\x61\x6e\x76\x61\x73\x2e\x69\x6d\x61\x67\x65\x66\x69\x6c\x65\x29\
+\x3b\x0a\x0a\x20\x20\x20\x20\x6f\x6e\x41\x6c\x70\x68\x61\x43\x68\
+\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\
+\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x6f\x6e\x52\x61\x64\x69\
+\x75\x73\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\
+\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x6f\x6e\
+\x4c\x69\x6e\x65\x57\x69\x64\x74\x68\x43\x68\x61\x6e\x67\x65\x64\
+\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\
+\x0a\x20\x20\x20\x20\x6f\x6e\x4e\x53\x69\x7a\x65\x43\x68\x61\x6e\
+\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\
+\x28\x29\x3b\x0a\x20\x20\x20\x20\x6f\x6e\x46\x69\x6c\x6c\x43\x68\
+\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\
+\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x6f\x6e\x53\x74\x72\x6f\
+\x6b\x65\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\
+\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x6f\x6e\
+\x50\x78\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\
+\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x6f\x6e\
+\x50\x79\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\
+\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x0a\x20\
+\x20\x20\x20\x6f\x6e\x49\x6d\x61\x67\x65\x4c\x6f\x61\x64\x65\x64\
+\x20\x3a\x20\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\
+\x29\x3b\x0a\x0a\x20\x20\x20\x20\x6f\x6e\x50\x61\x69\x6e\x74\x3a\
+\x20\x73\x71\x75\x63\x69\x72\x6c\x65\x28\x29\x3b\x0a\x0a\x20\x20\
+\x20\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x73\x71\x75\x63\x69\
+\x72\x6c\x65\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x76\x61\
+\x72\x20\x63\x74\x78\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x67\
+\x65\x74\x43\x6f\x6e\x74\x65\x78\x74\x28\x22\x32\x64\x22\x29\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x4e\x20\x3d\x20\x63\
+\x61\x6e\x76\x61\x73\x2e\x6e\x53\x69\x7a\x65\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x76\x61\x72\x20\x52\x20\x3d\x20\x63\x61\x6e\x76\x61\
+\x73\x2e\x72\x61\x64\x69\x75\x73\x3b\x0a\x0a\x20\x20\x20\x20\x20\
+\x20\x4e\x3d\x4d\x61\x74\x68\x2e\x61\x62\x73\x28\x4e\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x4d\x3d\x4e\x3b\x0a\x20\
+\x20\x20\x20\x20\x20\x69\x66\x20\x28\x4e\x3e\x31\x30\x30\x29\x20\
+\x4d\x3d\x31\x30\x30\x3b\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\
+\x28\x4e\x3c\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x31\
+\x29\x20\x4d\x3d\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\
+\x31\x3b\x0a\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x61\
+\x76\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\
+\x67\x6c\x6f\x62\x61\x6c\x41\x6c\x70\x68\x61\x20\x3d\x63\x61\x6e\
+\x76\x61\x73\x2e\x61\x6c\x70\x68\x61\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\x20\x3d\
+\x20\x22\x67\x72\x61\x79\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\
+\x74\x78\x2e\x66\x69\x6c\x6c\x52\x65\x63\x74\x28\x30\x2c\x20\x30\
+\x2c\x20\x63\x61\x6e\x76\x61\x73\x2e\x77\x69\x64\x74\x68\x2c\x20\
+\x63\x61\x6e\x76\x61\x73\x2e\x68\x65\x69\x67\x68\x74\x29\x3b\x0a\
+\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\
+\x65\x53\x74\x79\x6c\x65\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\
+\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\
+\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x66\x69\x6c\x6c\x53\x74\
+\x79\x6c\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6c\
+\x69\x6e\x65\x57\x69\x64\x74\x68\x20\x3d\x20\x63\x61\x6e\x76\x61\
+\x73\x2e\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x3b\x0a\x0a\x20\x20\
+\x20\x20\x20\x20\x63\x74\x78\x2e\x62\x65\x67\x69\x6e\x50\x61\x74\
+\x68\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x69\
+\x20\x3d\x20\x30\x2c\x20\x78\x2c\x20\x79\x3b\x0a\x20\x20\x20\x20\
+\x20\x20\x66\x6f\x72\x20\x28\x69\x3d\x30\x3b\x20\x69\x3c\x28\x32\
+\x2a\x52\x2b\x31\x29\x3b\x20\x69\x2b\x2b\x29\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x78\x20\x3d\x20\x4d\x61\x74\x68\x2e\x72\
+\x6f\x75\x6e\x64\x28\x69\x2d\x52\x29\x20\x2b\x20\x63\x61\x6e\x76\
+\x61\x73\x2e\x70\x78\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x79\x20\x3d\x20\x4d\x61\x74\x68\x2e\x72\x6f\x75\x6e\x64\x28\x4d\
+\x61\x74\x68\x2e\x70\x6f\x77\x28\x4d\x61\x74\x68\x2e\x61\x62\x73\
+\x28\x4d\x61\x74\x68\x2e\x70\x6f\x77\x28\x52\x2c\x4d\x29\x2d\x4d\
+\x61\x74\x68\x2e\x70\x6f\x77\x28\x4d\x61\x74\x68\x2e\x61\x62\x73\
+\x28\x69\x2d\x52\x29\x2c\x4d\x29\x29\x2c\x31\x2f\x4d\x29\x29\x20\
+\x2b\x20\x63\x61\x6e\x76\x61\x73\x2e\x70\x79\x3b\x0a\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x69\x20\x3d\x3d\x20\
+\x30\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x6d\x6f\x76\x65\x54\x6f\x28\x78\x2c\x20\x79\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x65\x6c\x73\x65\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6c\x69\x6e\
+\x65\x54\x6f\x28\x78\x2c\x20\x79\x29\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x66\x6f\x72\x20\x28\x69\
+\x3d\x28\x32\x2a\x52\x29\x3b\x20\x69\x3c\x28\x34\x2a\x52\x2b\x31\
+\x29\x3b\x20\x69\x2b\x2b\x29\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x78\x20\x3d\x4d\x61\x74\x68\x2e\x72\x6f\x75\x6e\x64\x28\x33\
+\x2a\x52\x2d\x69\x29\x2b\x63\x61\x6e\x76\x61\x73\x2e\x70\x78\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x79\x20\x3d\x20\x4d\x61\x74\
+\x68\x2e\x72\x6f\x75\x6e\x64\x28\x2d\x4d\x61\x74\x68\x2e\x70\x6f\
+\x77\x28\x4d\x61\x74\x68\x2e\x61\x62\x73\x28\x4d\x61\x74\x68\x2e\
+\x70\x6f\x77\x28\x52\x2c\x4d\x29\x2d\x4d\x61\x74\x68\x2e\x70\x6f\
+\x77\x28\x4d\x61\x74\x68\x2e\x61\x62\x73\x28\x33\x2a\x52\x2d\x69\
+\x29\x2c\x4d\x29\x29\x2c\x31\x2f\x4d\x29\x29\x20\x2b\x20\x63\x61\
+\x6e\x76\x61\x73\x2e\x70\x79\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x63\x74\x78\x2e\x6c\x69\x6e\x65\x54\x6f\x28\x78\x2c\x20\x79\
+\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x63\x74\x78\x2e\x63\x6c\x6f\x73\x65\x50\x61\x74\x68\x28\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x63\x61\x6e\x76\
+\x61\x73\x2e\x73\x74\x72\x6f\x6b\x65\x29\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\
+\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\
+\x20\x20\x20\x20\x69\x66\x20\x28\x63\x61\x6e\x76\x61\x73\x2e\x66\
+\x69\x6c\x6c\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x28\x29\x3b\x0a\x20\x20\x20\
+\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x2f\x2f\x21\x20\x5b\
+\x30\x5d\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x63\x6c\x69\
+\x70\x28\x29\x3b\x0a\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\
+\x64\x72\x61\x77\x49\x6d\x61\x67\x65\x28\x63\x61\x6e\x76\x61\x73\
+\x2e\x69\x6d\x61\x67\x65\x66\x69\x6c\x65\x2c\x20\x30\x2c\x20\x30\
+\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x2f\x2f\x21\x20\x5b\x30\x5d\
+\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x72\x65\x73\x74\x6f\
+\x72\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\
+\x0a\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x63\x6f\x6e\x74\
+\x72\x6f\x6c\x73\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\
+\x74\x68\x3a\x33\x32\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x68\
+\x65\x69\x67\x68\x74\x3a\x31\x35\x30\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x33\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\
+\x7b\x69\x64\x3a\x6e\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\
+\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\
+\x20\x6d\x69\x6e\x3a\x31\x3b\x20\x6d\x61\x78\x3a\x31\x30\x3b\x20\
+\x69\x6e\x69\x74\x3a\x34\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x4e\x22\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\
+\x65\x72\x20\x7b\x69\x64\x3a\x72\x43\x74\x72\x6c\x3b\x20\x77\x69\
+\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\
+\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x33\x30\x3b\x20\x6d\x61\x78\x3a\
+\x31\x38\x30\x3b\x20\x69\x6e\x69\x74\x3a\x31\x30\x30\x3b\x20\x6e\
+\x61\x6d\x65\x3a\x22\x52\x61\x64\x69\x75\x73\x22\x7d\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\
+\x69\x64\x3a\x78\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\
+\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\
+\x6d\x69\x6e\x3a\x35\x30\x3b\x20\x6d\x61\x78\x3a\x33\x30\x30\x3b\
+\x20\x69\x6e\x69\x74\x3a\x31\x38\x30\x3b\x20\x6e\x61\x6d\x65\x3a\
+\x22\x58\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\
+\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x79\x43\x74\x72\x6c\x3b\
+\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\
+\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x33\x30\x3b\x20\x6d\
+\x61\x78\x3a\x33\x30\x30\x3b\x20\x69\x6e\x69\x74\x3a\x32\x32\x30\
+\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x59\x22\x7d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\
+\x3a\x61\x6c\x70\x68\x61\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\
+\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\
+\x3b\x20\x6d\x69\x6e\x3a\x30\x3b\x20\x6d\x61\x78\x3a\x31\x3b\x20\
+\x69\x6e\x69\x74\x3a\x31\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x41\x6c\
+\x70\x68\x61\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\
+\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x12\x78\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x22\x2e\x2e\x2f\x63\x6f\x6e\x74\x65\x6e\x74\x73\
+\x22\x0a\x49\x74\x65\x6d\x20\x7b\x0a\x20\x20\x69\x64\x3a\x63\x6f\
+\x6e\x74\x61\x69\x6e\x65\x72\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\
+\x33\x32\x30\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x34\x38\x30\
+\x0a\x0a\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\
+\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x35\x0a\x20\x20\x20\x20\x61\
+\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x70\x61\x72\x65\
+\x6e\x74\x0a\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x20\x66\x6f\
+\x6e\x74\x2e\x70\x6f\x69\x6e\x74\x53\x69\x7a\x65\x3a\x31\x35\x3b\
+\x20\x74\x65\x78\x74\x3a\x22\x42\x65\x7a\x69\x65\x72\x20\x43\x75\
+\x72\x76\x65\x22\x3b\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x68\x6f\
+\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x70\
+\x61\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\
+\x43\x65\x6e\x74\x65\x72\x7d\x0a\x0a\x20\x20\x20\x20\x43\x61\x6e\
+\x76\x61\x73\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x63\
+\x61\x6e\x76\x61\x73\x0a\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\
+\x68\x3a\x33\x32\x30\x0a\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\
+\x68\x74\x3a\x32\x38\x30\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\
+\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\x73\x74\x72\
+\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3a\x22\x72\x65\x64\x22\x0a\x20\
+\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\
+\x72\x69\x6e\x67\x20\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\x3a\x22\
+\x72\x65\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\
+\x72\x74\x79\x20\x69\x6e\x74\x20\x6c\x69\x6e\x65\x57\x69\x64\x74\
+\x68\x3a\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x43\x74\x72\x6c\x2e\
+\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\
+\x65\x72\x74\x79\x20\x62\x6f\x6f\x6c\x20\x66\x69\x6c\x6c\x3a\x74\
+\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\
+\x74\x79\x20\x62\x6f\x6f\x6c\x20\x73\x74\x72\x6f\x6b\x65\x3a\x74\
+\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\
+\x74\x79\x20\x72\x65\x61\x6c\x20\x61\x6c\x70\x68\x61\x3a\x61\x6c\
+\x70\x68\x61\x43\x74\x72\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\
+\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\
+\x6c\x20\x73\x63\x61\x6c\x65\x58\x20\x3a\x20\x73\x63\x61\x6c\x65\
+\x58\x43\x74\x72\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\
+\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\
+\x73\x63\x61\x6c\x65\x59\x20\x3a\x20\x73\x63\x61\x6c\x65\x59\x43\
+\x74\x72\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x72\x6f\
+\x74\x61\x74\x65\x20\x3a\x20\x72\x6f\x74\x61\x74\x65\x43\x74\x72\
+\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x74\x69\x61\x6c\x69\x61\x73\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\
+\x0a\x0a\x20\x20\x20\x20\x20\x20\x42\x65\x68\x61\x76\x69\x6f\x72\
+\x20\x6f\x6e\x20\x73\x63\x61\x6c\x65\x58\x20\x7b\x20\x53\x70\x72\
+\x69\x6e\x67\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x73\
+\x70\x72\x69\x6e\x67\x3a\x20\x32\x3b\x20\x64\x61\x6d\x70\x69\x6e\
+\x67\x3a\x20\x30\x2e\x32\x3b\x20\x6c\x6f\x6f\x70\x73\x3a\x41\x6e\
+\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\x6e\x66\x69\x6e\x69\x74\x65\
+\x20\x7d\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x42\x65\x68\x61\x76\
+\x69\x6f\x72\x20\x6f\x6e\x20\x73\x63\x61\x6c\x65\x59\x20\x7b\x20\
+\x53\x70\x72\x69\x6e\x67\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\
+\x7b\x20\x73\x70\x72\x69\x6e\x67\x3a\x20\x32\x3b\x20\x64\x61\x6d\
+\x70\x69\x6e\x67\x3a\x20\x30\x2e\x32\x3b\x20\x6c\x6f\x6f\x70\x73\
+\x3a\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\x6e\x66\x69\x6e\
+\x69\x74\x65\x7d\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x42\x65\x68\
+\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\x72\x6f\x74\x61\x74\x65\x20\
+\x7b\x20\x53\x70\x72\x69\x6e\x67\x41\x6e\x69\x6d\x61\x74\x69\x6f\
+\x6e\x20\x7b\x20\x73\x70\x72\x69\x6e\x67\x3a\x20\x32\x3b\x20\x64\
+\x61\x6d\x70\x69\x6e\x67\x3a\x20\x30\x2e\x32\x3b\x20\x6c\x6f\x6f\
+\x70\x73\x3a\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\x6e\x66\
+\x69\x6e\x69\x74\x65\x7d\x20\x7d\x0a\x0a\x20\x20\x20\x20\x6f\x6e\
+\x4c\x69\x6e\x65\x57\x69\x64\x74\x68\x43\x68\x61\x6e\x67\x65\x64\
+\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\
+\x0a\x20\x20\x20\x20\x6f\x6e\x46\x69\x6c\x6c\x43\x68\x61\x6e\x67\
+\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\
+\x29\x3b\x0a\x20\x20\x20\x20\x6f\x6e\x53\x74\x72\x6f\x6b\x65\x43\
+\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\
+\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x6f\x6e\x41\x6c\x70\
+\x68\x61\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\
+\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x6f\x6e\
+\x53\x63\x61\x6c\x65\x58\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\
+\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\
+\x20\x20\x6f\x6e\x53\x63\x61\x6c\x65\x59\x43\x68\x61\x6e\x67\x65\
+\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\
+\x3b\x0a\x20\x20\x20\x20\x6f\x6e\x52\x6f\x74\x61\x74\x65\x43\x68\
+\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\
+\x6e\x74\x28\x29\x3b\x0a\x0a\x20\x20\x20\x20\x6f\x6e\x50\x61\x69\
+\x6e\x74\x3a\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\
+\x63\x74\x78\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x67\x65\x74\
+\x43\x6f\x6e\x74\x65\x78\x74\x28\x27\x32\x64\x27\x29\x3b\x0a\x20\
+\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x61\x76\x65\x28\x29\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x63\x6c\x65\x61\x72\
+\x52\x65\x63\x74\x28\x30\x2c\x20\x30\x2c\x20\x63\x61\x6e\x76\x61\
+\x73\x2e\x77\x69\x64\x74\x68\x2c\x20\x63\x61\x6e\x76\x61\x73\x2e\
+\x68\x65\x69\x67\x68\x74\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\
+\x74\x78\x2e\x67\x6c\x6f\x62\x61\x6c\x41\x6c\x70\x68\x61\x20\x3d\
+\x20\x63\x61\x6e\x76\x61\x73\x2e\x61\x6c\x70\x68\x61\x3b\x0a\x20\
+\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\x65\x53\
+\x74\x79\x6c\x65\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x73\x74\
+\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x53\x74\x79\x6c\x65\x20\x3d\
+\x20\x63\x61\x6e\x76\x61\x73\x2e\x66\x69\x6c\x6c\x53\x74\x79\x6c\
+\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6c\x69\x6e\
+\x65\x57\x69\x64\x74\x68\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\
+\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x63\x74\x78\x2e\x73\x63\x61\x6c\x65\x28\x63\x61\x6e\x76\x61\
+\x73\x2e\x73\x63\x61\x6c\x65\x58\x2c\x20\x63\x61\x6e\x76\x61\x73\
+\x2e\x73\x63\x61\x6c\x65\x59\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\
+\x63\x74\x78\x2e\x72\x6f\x74\x61\x74\x65\x28\x63\x61\x6e\x76\x61\
+\x73\x2e\x72\x6f\x74\x61\x74\x65\x29\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x2f\x2f\x21\x20\x5b\x30\x5d\x0a\x20\x20\x20\x20\x20\x20\x63\
+\x74\x78\x2e\x62\x65\x67\x69\x6e\x50\x61\x74\x68\x28\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x6d\x6f\x76\x65\x54\x6f\
+\x28\x37\x35\x2c\x34\x30\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\
+\x74\x78\x2e\x62\x65\x7a\x69\x65\x72\x43\x75\x72\x76\x65\x54\x6f\
+\x28\x37\x35\x2c\x33\x37\x2c\x37\x30\x2c\x32\x35\x2c\x35\x30\x2c\
+\x32\x35\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x62\
+\x65\x7a\x69\x65\x72\x43\x75\x72\x76\x65\x54\x6f\x28\x32\x30\x2c\
+\x32\x35\x2c\x32\x30\x2c\x36\x32\x2e\x35\x2c\x32\x30\x2c\x36\x32\
+\x2e\x35\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x62\
+\x65\x7a\x69\x65\x72\x43\x75\x72\x76\x65\x54\x6f\x28\x32\x30\x2c\
+\x38\x30\x2c\x34\x30\x2c\x31\x30\x32\x2c\x37\x35\x2c\x31\x32\x30\
+\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x62\x65\x7a\
+\x69\x65\x72\x43\x75\x72\x76\x65\x54\x6f\x28\x31\x31\x30\x2c\x31\
+\x30\x32\x2c\x31\x33\x30\x2c\x38\x30\x2c\x31\x33\x30\x2c\x36\x32\
+\x2e\x35\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x62\
+\x65\x7a\x69\x65\x72\x43\x75\x72\x76\x65\x54\x6f\x28\x31\x33\x30\
+\x2c\x36\x32\x2e\x35\x2c\x31\x33\x30\x2c\x32\x35\x2c\x31\x30\x30\
+\x2c\x32\x35\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\
+\x62\x65\x7a\x69\x65\x72\x43\x75\x72\x76\x65\x54\x6f\x28\x38\x35\
+\x2c\x32\x35\x2c\x37\x35\x2c\x33\x37\x2c\x37\x35\x2c\x34\x30\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x63\x6c\x6f\x73\
+\x65\x50\x61\x74\x68\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x2f\
+\x2f\x21\x20\x5b\x30\x5d\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\
+\x28\x63\x61\x6e\x76\x61\x73\x2e\x66\x69\x6c\x6c\x29\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x28\
+\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x63\x61\x6e\
+\x76\x61\x73\x2e\x73\x74\x72\x6f\x6b\x65\x29\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\x65\x28\
+\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x72\x65\x73\
+\x74\x6f\x72\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\
+\x7d\x0a\x0a\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\
+\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x63\x6f\
+\x6e\x74\x72\x6f\x6c\x73\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\
+\x69\x64\x74\x68\x3a\x33\x32\x30\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x68\x65\x69\x67\x68\x74\x3a\x31\x35\x30\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x33\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\
+\x72\x20\x7b\x69\x64\x3a\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x43\
+\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\
+\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x31\
+\x3b\x20\x6d\x61\x78\x3a\x31\x30\x3b\x20\x69\x6e\x69\x74\x3a\x32\
+\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x4c\x69\x6e\x65\x20\x77\x69\x64\
+\x74\x68\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\
+\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x73\x63\x61\x6c\x65\x58\
+\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\
+\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\
+\x30\x2e\x31\x3b\x20\x6d\x61\x78\x3a\x31\x30\x3b\x20\x69\x6e\x69\
+\x74\x3a\x31\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x53\x63\x61\x6c\x65\
+\x58\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\
+\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x73\x63\x61\x6c\x65\x59\x43\
+\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\
+\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x30\
+\x2e\x31\x3b\x20\x6d\x61\x78\x3a\x31\x30\x3b\x20\x69\x6e\x69\x74\
+\x3a\x31\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x53\x63\x61\x6c\x65\x59\
+\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\
+\x64\x65\x72\x20\x7b\x69\x64\x3a\x72\x6f\x74\x61\x74\x65\x43\x74\
+\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\
+\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x30\x3b\
+\x20\x6d\x61\x78\x3a\x4d\x61\x74\x68\x2e\x50\x49\x2a\x32\x3b\x20\
+\x69\x6e\x69\x74\x3a\x30\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x52\x6f\
+\x74\x61\x74\x65\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x61\x6c\x70\x68\
+\x61\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\x68\x3a\x33\x30\x30\
+\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\x3b\x20\x6d\x69\x6e\
+\x3a\x30\x3b\x20\x6d\x61\x78\x3a\x31\x3b\x20\x69\x6e\x69\x74\x3a\
+\x31\x3b\x20\x6e\x61\x6d\x65\x3a\x22\x41\x6c\x70\x68\x61\x22\x7d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\
+\x0a\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x13\x80\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x22\x2e\x2e\x2f\x63\x6f\x6e\x74\x65\x6e\x74\x73\
+\x22\x0a\x49\x74\x65\x6d\x20\x7b\x0a\x20\x20\x69\x64\x3a\x63\x6f\
+\x6e\x74\x61\x69\x6e\x65\x72\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\
+\x33\x32\x30\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x34\x38\x30\
+\x0a\x0a\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\
+\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x35\x0a\x20\x20\x20\x20\x61\
+\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x70\x61\x72\x65\
+\x6e\x74\x0a\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x20\x66\x6f\
+\x6e\x74\x2e\x70\x6f\x69\x6e\x74\x53\x69\x7a\x65\x3a\x31\x35\x3b\
+\x20\x74\x65\x78\x74\x3a\x22\x51\x75\x61\x64\x72\x61\x74\x69\x63\
+\x20\x43\x75\x72\x76\x65\x22\x3b\x20\x61\x6e\x63\x68\x6f\x72\x73\
+\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x43\x65\x6e\x74\x65\
+\x72\x3a\x70\x61\x72\x65\x6e\x74\x2e\x68\x6f\x72\x69\x7a\x6f\x6e\
+\x74\x61\x6c\x43\x65\x6e\x74\x65\x72\x7d\x0a\x0a\x20\x20\x20\x20\
+\x43\x61\x6e\x76\x61\x73\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x69\
+\x64\x3a\x63\x61\x6e\x76\x61\x73\x0a\x20\x20\x20\x20\x20\x20\x77\
+\x69\x64\x74\x68\x3a\x33\x32\x30\x0a\x20\x20\x20\x20\x20\x20\x68\
+\x65\x69\x67\x68\x74\x3a\x32\x38\x30\x0a\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\
+\x73\x74\x72\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3a\x22\x73\x74\x65\
+\x65\x6c\x62\x6c\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\x66\x69\
+\x6c\x6c\x53\x74\x79\x6c\x65\x3a\x22\x79\x65\x6c\x6c\x6f\x77\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\
+\x69\x6e\x74\x20\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x3a\x6c\x69\
+\x6e\x65\x57\x69\x64\x74\x68\x43\x74\x72\x6c\x2e\x76\x61\x6c\x75\
+\x65\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\
+\x20\x62\x6f\x6f\x6c\x20\x66\x69\x6c\x6c\x3a\x74\x72\x75\x65\x0a\
+\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x62\
+\x6f\x6f\x6c\x20\x73\x74\x72\x6f\x6b\x65\x3a\x74\x72\x75\x65\x0a\
+\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\
+\x65\x61\x6c\x20\x61\x6c\x70\x68\x61\x3a\x61\x6c\x70\x68\x61\x43\
+\x74\x72\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\
+\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x73\x63\
+\x61\x6c\x65\x58\x20\x3a\x20\x73\x63\x61\x6c\x65\x58\x43\x74\x72\
+\x6c\x2e\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x70\x72\
+\x6f\x70\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x73\x63\x61\x6c\
+\x65\x59\x20\x3a\x20\x73\x63\x61\x6c\x65\x59\x43\x74\x72\x6c\x2e\
+\x76\x61\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\
+\x65\x72\x74\x79\x20\x72\x65\x61\x6c\x20\x72\x6f\x74\x61\x74\x65\
+\x20\x3a\x20\x72\x6f\x74\x61\x74\x65\x43\x74\x72\x6c\x2e\x76\x61\
+\x6c\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x61\x6e\x74\x69\x61\x6c\
+\x69\x61\x73\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\x0a\x0a\x20\x20\
+\x20\x20\x20\x20\x6f\x6e\x4c\x69\x6e\x65\x57\x69\x64\x74\x68\x43\
+\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\
+\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x6f\x6e\x46\
+\x69\x6c\x6c\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\
+\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x6f\x6e\x53\x74\x72\x6f\x6b\x65\x43\x68\x61\x6e\x67\x65\x64\
+\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x6f\x6e\x41\x6c\x70\x68\x61\x43\x68\
+\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\
+\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x6f\x6e\x53\x63\
+\x61\x6c\x65\x58\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\
+\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\
+\x20\x20\x6f\x6e\x53\x63\x61\x6c\x65\x59\x43\x68\x61\x6e\x67\x65\
+\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\x61\x69\x6e\x74\x28\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x6f\x6e\x52\x6f\x74\x61\x74\x65\
+\x43\x68\x61\x6e\x67\x65\x64\x3a\x72\x65\x71\x75\x65\x73\x74\x50\
+\x61\x69\x6e\x74\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x42\x65\
+\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\x73\x63\x61\x6c\x65\x58\
+\x20\x7b\x20\x53\x70\x72\x69\x6e\x67\x41\x6e\x69\x6d\x61\x74\x69\
+\x6f\x6e\x20\x7b\x20\x73\x70\x72\x69\x6e\x67\x3a\x20\x32\x3b\x20\
+\x64\x61\x6d\x70\x69\x6e\x67\x3a\x20\x30\x2e\x32\x3b\x20\x6c\x6f\
+\x6f\x70\x73\x3a\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x2e\x49\x6e\
+\x66\x69\x6e\x69\x74\x65\x20\x7d\x20\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\x73\x63\x61\
+\x6c\x65\x59\x20\x7b\x20\x53\x70\x72\x69\x6e\x67\x41\x6e\x69\x6d\
+\x61\x74\x69\x6f\x6e\x20\x7b\x20\x73\x70\x72\x69\x6e\x67\x3a\x20\
+\x32\x3b\x20\x64\x61\x6d\x70\x69\x6e\x67\x3a\x20\x30\x2e\x32\x3b\
+\x20\x6c\x6f\x6f\x70\x73\x3a\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\
+\x2e\x49\x6e\x66\x69\x6e\x69\x74\x65\x7d\x20\x7d\x0a\x20\x20\x20\
+\x20\x20\x20\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\x72\
+\x6f\x74\x61\x74\x65\x20\x7b\x20\x53\x70\x72\x69\x6e\x67\x41\x6e\
+\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x73\x70\x72\x69\x6e\x67\
+\x3a\x20\x32\x3b\x20\x64\x61\x6d\x70\x69\x6e\x67\x3a\x20\x30\x2e\
+\x32\x3b\x20\x6c\x6f\x6f\x70\x73\x3a\x41\x6e\x69\x6d\x61\x74\x69\
+\x6f\x6e\x2e\x49\x6e\x66\x69\x6e\x69\x74\x65\x7d\x20\x7d\x0a\x0a\
+\x20\x20\x20\x20\x20\x20\x6f\x6e\x50\x61\x69\x6e\x74\x3a\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x63\
+\x74\x78\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x67\x65\x74\x43\
+\x6f\x6e\x74\x65\x78\x74\x28\x27\x32\x64\x27\x29\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x61\x76\x65\
+\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x63\x6c\x65\x61\x72\x52\x65\x63\x74\x28\x30\x2c\x20\x30\
+\x2c\x20\x63\x61\x6e\x76\x61\x73\x2e\x77\x69\x64\x74\x68\x2c\x20\
+\x63\x61\x6e\x76\x61\x73\x2e\x68\x65\x69\x67\x68\x74\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x67\x6c\
+\x6f\x62\x61\x6c\x41\x6c\x70\x68\x61\x20\x3d\x20\x63\x61\x6e\x76\
+\x61\x73\x2e\x61\x6c\x70\x68\x61\x3b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x74\x78\x2e\x73\x74\x72\x6f\x6b\x65\x53\x74\
+\x79\x6c\x65\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x73\x74\x72\
+\x6f\x6b\x65\x53\x74\x79\x6c\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x53\x74\x79\x6c\
+\x65\x20\x3d\x20\x63\x61\x6e\x76\x61\x73\x2e\x66\x69\x6c\x6c\x53\
+\x74\x79\x6c\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x63\x74\x78\x2e\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\x20\x3d\x20\
+\x63\x61\x6e\x76\x61\x73\x2e\x6c\x69\x6e\x65\x57\x69\x64\x74\x68\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\
+\x73\x63\x61\x6c\x65\x28\x63\x61\x6e\x76\x61\x73\x2e\x73\x63\x61\
+\x6c\x65\x58\x2c\x20\x63\x61\x6e\x76\x61\x73\x2e\x73\x63\x61\x6c\
+\x65\x59\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\
+\x74\x78\x2e\x72\x6f\x74\x61\x74\x65\x28\x63\x61\x6e\x76\x61\x73\
+\x2e\x72\x6f\x74\x61\x74\x65\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x2f\x2f\x20\x21\x5b\x30\x5d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x62\x65\x67\x69\x6e\x50\
+\x61\x74\x68\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x63\x74\x78\x2e\x6d\x6f\x76\x65\x54\x6f\x28\x37\x35\x2c\x32\
+\x35\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\
+\x78\x2e\x71\x75\x61\x64\x72\x61\x74\x69\x63\x43\x75\x72\x76\x65\
+\x54\x6f\x28\x32\x35\x2c\x32\x35\x2c\x32\x35\x2c\x36\x32\x2e\x35\
+\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\
+\x2e\x71\x75\x61\x64\x72\x61\x74\x69\x63\x43\x75\x72\x76\x65\x54\
+\x6f\x28\x32\x35\x2c\x31\x30\x30\x2c\x35\x30\x2c\x31\x30\x30\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\
+\x71\x75\x61\x64\x72\x61\x74\x69\x63\x43\x75\x72\x76\x65\x54\x6f\
+\x28\x35\x30\x2c\x31\x32\x30\x2c\x33\x30\x2c\x31\x32\x35\x29\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x71\
+\x75\x61\x64\x72\x61\x74\x69\x63\x43\x75\x72\x76\x65\x54\x6f\x28\
+\x36\x30\x2c\x31\x32\x30\x2c\x36\x35\x2c\x31\x30\x30\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x71\x75\
+\x61\x64\x72\x61\x74\x69\x63\x43\x75\x72\x76\x65\x54\x6f\x28\x31\
+\x32\x35\x2c\x31\x30\x30\x2c\x31\x32\x35\x2c\x36\x32\x2e\x35\x29\
+\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\
+\x71\x75\x61\x64\x72\x61\x74\x69\x63\x43\x75\x72\x76\x65\x54\x6f\
+\x28\x31\x32\x35\x2c\x32\x35\x2c\x37\x35\x2c\x32\x35\x29\x3b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x63\x6c\
+\x6f\x73\x65\x50\x61\x74\x68\x28\x29\x3b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x2f\x2f\x20\x21\x5b\x30\x5d\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x63\x61\x6e\x76\x61\
+\x73\x2e\x66\x69\x6c\x6c\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x28\x29\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x63\
+\x61\x6e\x76\x61\x73\x2e\x73\x74\x72\x6f\x6b\x65\x29\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x73\
+\x74\x72\x6f\x6b\x65\x28\x29\x3b\x0a\x0a\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x2f\x2f\x20\x21\x5b\x31\x5d\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x69\x6c\x6c\x53\
+\x74\x79\x6c\x65\x3d\x22\x67\x72\x65\x65\x6e\x22\x3b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\x6f\x6e\x74\
+\x20\x3d\x20\x22\x42\x6f\x6c\x64\x20\x31\x35\x70\x78\x22\x3b\x0a\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x66\
+\x69\x6c\x6c\x54\x65\x78\x74\x28\x22\x51\x4d\x4c\xe9\x85\xb7\xe6\
+\xaf\x99\xe4\xba\x86\x22\x2c\x20\x33\x30\x2c\x20\x36\x30\x29\x3b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x21\x5b\
+\x31\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\
+\x2e\x72\x65\x73\x74\x6f\x72\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\
+\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x52\
+\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x69\x64\x3a\x63\x6f\x6e\x74\x72\x6f\x6c\x73\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x33\x32\x30\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\
+\x31\x35\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x43\x6f\x6c\x75\
+\x6d\x6e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\
+\x70\x61\x63\x69\x6e\x67\x3a\x33\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\x6c\x69\
+\x6e\x65\x57\x69\x64\x74\x68\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\
+\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\
+\x30\x3b\x20\x6d\x69\x6e\x3a\x31\x3b\x20\x6d\x61\x78\x3a\x31\x30\
+\x3b\x20\x69\x6e\x69\x74\x3a\x32\x3b\x20\x6e\x61\x6d\x65\x3a\x22\
+\x4c\x69\x6e\x65\x20\x77\x69\x64\x74\x68\x22\x7d\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\
+\x64\x3a\x73\x63\x61\x6c\x65\x58\x43\x74\x72\x6c\x3b\x20\x77\x69\
+\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\
+\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x30\x2e\x31\x3b\x20\x6d\x61\x78\
+\x3a\x31\x30\x3b\x20\x69\x6e\x69\x74\x3a\x31\x3b\x20\x6e\x61\x6d\
+\x65\x3a\x22\x53\x63\x61\x6c\x65\x58\x22\x7d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\
+\x3a\x73\x63\x61\x6c\x65\x59\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\
+\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\
+\x30\x3b\x20\x6d\x69\x6e\x3a\x30\x2e\x31\x3b\x20\x6d\x61\x78\x3a\
+\x31\x30\x3b\x20\x69\x6e\x69\x74\x3a\x31\x3b\x20\x6e\x61\x6d\x65\
+\x3a\x22\x53\x63\x61\x6c\x65\x59\x22\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\x7b\x69\x64\x3a\
+\x72\x6f\x74\x61\x74\x65\x43\x74\x72\x6c\x3b\x20\x77\x69\x64\x74\
+\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\x3a\x32\x30\
+\x3b\x20\x6d\x69\x6e\x3a\x30\x3b\x20\x6d\x61\x78\x3a\x4d\x61\x74\
+\x68\x2e\x50\x49\x2a\x32\x3b\x20\x69\x6e\x69\x74\x3a\x30\x3b\x20\
+\x6e\x61\x6d\x65\x3a\x22\x52\x6f\x74\x61\x74\x65\x22\x7d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x53\x6c\x69\x64\x65\x72\x20\
+\x7b\x69\x64\x3a\x61\x6c\x70\x68\x61\x43\x74\x72\x6c\x3b\x20\x77\
+\x69\x64\x74\x68\x3a\x33\x30\x30\x3b\x20\x68\x65\x69\x67\x68\x74\
+\x3a\x32\x30\x3b\x20\x6d\x69\x6e\x3a\x30\x3b\x20\x6d\x61\x78\x3a\
+\x31\x3b\x20\x69\x6e\x69\x74\x3a\x31\x3b\x20\x6e\x61\x6d\x65\x3a\
+\x22\x41\x6c\x70\x68\x61\x22\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x7d\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x06\x98\x5c\x83\
+\x00\x63\
+\x00\x61\x00\x6e\x00\x76\x00\x61\x00\x73\
+\x00\x10\
+\x0d\xc6\xb9\xaf\
+\x00\x71\
+\x00\x75\x00\x61\x00\x64\x00\x72\x00\x61\x00\x74\x00\x69\x00\x63\x00\x43\x00\x75\x00\x72\x00\x76\x00\x65\x00\x54\x00\x6f\
+\x00\x0b\
+\x0c\xbb\x68\x25\
+\x00\x62\
+\x00\x65\x00\x7a\x00\x69\x00\x65\x00\x72\x00\x43\x00\x75\x00\x72\x00\x76\x00\x65\
+\x00\x04\
+\x00\x06\xa3\x00\
+\x00\x63\
+\x00\x6c\x00\x69\x00\x70\
+\x00\x0b\
+\x0a\x49\x53\x24\
+\x00\x72\
+\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x65\x00\x64\x00\x72\x00\x65\x00\x63\x00\x74\
+\x00\x08\
+\x06\x5a\xc8\xf3\
+\x00\x63\
+\x00\x6f\x00\x6e\x00\x74\x00\x65\x00\x6e\x00\x74\x00\x73\
+\x00\x08\
+\x08\xc0\x89\x65\
+\x00\x73\
+\x00\x71\x00\x75\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\
+\x00\x05\
+\x00\x7a\x40\x25\
+\x00\x73\
+\x00\x6d\x00\x69\x00\x6c\x00\x65\
+\x00\x0a\
+\x0c\x8b\x68\x9c\
+\x00\x63\
+\x00\x61\x00\x6e\x00\x76\x00\x61\x00\x73\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x05\
+\x00\x7a\xfd\xc2\
+\x00\x74\
+\x00\x69\x00\x67\x00\x65\x00\x72\
+\x00\x09\
+\x0d\xc5\xa5\xdc\
+\x00\x74\
+\x00\x69\x00\x67\x00\x65\x00\x72\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x08\
+\x0f\xdc\x5a\x53\
+\x00\x74\
+\x00\x69\x00\x67\x00\x65\x00\x72\x00\x2e\x00\x6a\x00\x73\
+\x00\x09\
+\x00\x28\xa4\xbc\
+\x00\x73\
+\x00\x6d\x00\x69\x00\x6c\x00\x65\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0c\
+\x09\x79\xd6\x47\
+\x00\x73\
+\x00\x71\x00\x75\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x09\x79\xd9\x3c\
+\x00\x73\
+\x00\x71\x00\x75\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0b\
+\x08\x33\x9c\x3c\
+\x00\x54\
+\x00\x6f\x00\x6f\x00\x6c\x00\x42\x00\x61\x00\x72\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0a\
+\x0b\x68\x71\x5c\
+\x00\x42\
+\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0a\
+\x0a\xce\x15\xdc\
+\x00\x53\
+\x00\x6c\x00\x69\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0c\
+\x03\xe4\x35\x1c\
+\x00\x54\
+\x00\x69\x00\x74\x00\x6c\x00\x65\x00\x42\x00\x61\x00\x72\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0b\
+\x05\x52\xbf\x27\
+\x00\x71\
+\x00\x74\x00\x2d\x00\x6c\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0d\
+\x0b\xd7\x93\x5c\
+\x00\x53\
+\x00\x63\x00\x72\x00\x6f\x00\x6c\x00\x6c\x00\x42\x00\x61\x00\x72\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0b\
+\x06\x33\x25\x47\
+\x00\x73\
+\x00\x74\x00\x72\x00\x69\x00\x70\x00\x65\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x12\
+\x01\x4a\xa3\xa7\
+\x00\x62\
+\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x70\x00\x72\x00\x65\x00\x73\x00\x73\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\
+\x00\x67\
+\x00\x0c\
+\x07\xe4\x32\x27\
+\x00\x74\
+\x00\x69\x00\x74\x00\x6c\x00\x65\x00\x62\x00\x61\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x0b\x6c\x6e\x27\
+\x00\x62\
+\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x07\xa4\x7e\x39\
+\x00\x74\
+\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x63\x00\x69\
+\x00\x0c\
+\x05\x67\xce\xf9\
+\x00\x6c\
+\x00\x69\x00\x6e\x00\x65\x00\x65\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x73\x00\x63\x00\x69\
+\x00\x09\
+\x06\xa6\x8b\x27\
+\x00\x67\
+\x00\x6c\x00\x6f\x00\x73\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x07\xa4\x70\xe7\
+\x00\x74\
+\x00\x6f\x00\x6f\x00\x6c\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x0c\xe2\x23\xc7\
+\x00\x64\
+\x00\x65\x00\x66\x00\x61\x00\x75\x00\x6c\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0c\
+\x07\xe4\x3c\xf9\
+\x00\x74\
+\x00\x69\x00\x74\x00\x6c\x00\x65\x00\x62\x00\x61\x00\x72\x00\x2e\x00\x73\x00\x63\x00\x69\
+\x00\x08\
+\x0c\x07\x58\x47\
+\x00\x71\
+\x00\x75\x00\x69\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x05\x67\xc0\x27\
+\x00\x6c\
+\x00\x69\x00\x6e\x00\x65\x00\x65\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x03\x33\xc6\x9c\
+\x00\x72\
+\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x65\x00\x64\x00\x72\x00\x65\x00\x63\x00\x74\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x08\
+\x03\x03\x5d\x7c\
+\x00\x63\
+\x00\x6c\x00\x69\x00\x70\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x0f\
+\x08\x41\x22\xfc\
+\x00\x62\
+\x00\x65\x00\x7a\x00\x69\x00\x65\x00\x72\x00\x43\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x14\
+\x09\xad\xdd\x5c\
+\x00\x71\
+\x00\x75\x00\x61\x00\x64\x00\x72\x00\x61\x00\x74\x00\x69\x00\x63\x00\x43\x00\x75\x00\x72\x00\x76\x00\x65\x00\x54\x00\x6f\x00\x2e\
+\x00\x71\x00\x6d\x00\x6c\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x02\
+\x00\x00\x00\x54\x00\x02\x00\x00\x00\x01\x00\x00\x00\x26\
+\x00\x00\x00\xaa\x00\x02\x00\x00\x00\x01\x00\x00\x00\x25\
+\x00\x00\x00\xd4\x00\x02\x00\x00\x00\x02\x00\x00\x00\x23\
+\x00\x00\x00\x7e\x00\x02\x00\x00\x00\x07\x00\x00\x00\x10\
+\x00\x00\x00\x94\x00\x02\x00\x00\x00\x02\x00\x00\x00\x0e\
+\x00\x00\x00\x62\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0d\
+\x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x38\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0c\
+\x00\x00\x00\x12\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0b\
+\x00\x00\x03\xe6\x00\x00\x00\x00\x00\x01\x00\x02\xbe\xaa\
+\x00\x00\x03\xc2\x00\x00\x00\x00\x00\x01\x00\x02\xac\x2e\
+\x00\x00\x03\x88\x00\x00\x00\x00\x00\x01\x00\x02\x84\xab\
+\x00\x00\x01\x2a\x00\x00\x00\x00\x00\x01\x00\x01\xa0\xc0\
+\x00\x00\x01\x48\x00\x00\x00\x00\x00\x01\x00\x01\xa3\xc7\
+\x00\x00\x01\xb6\x00\x00\x00\x00\x00\x01\x00\x01\xdd\xfb\
+\x00\x00\x01\xd4\x00\x00\x00\x00\x00\x01\x00\x01\xe9\x09\
+\x00\x00\x01\xf0\x00\x02\x00\x00\x00\x0c\x00\x00\x00\x17\
+\x00\x00\x01\x66\x00\x00\x00\x00\x00\x01\x00\x01\xb8\xce\
+\x00\x00\x01\x9c\x00\x00\x00\x00\x00\x01\x00\x01\xce\xac\
+\x00\x00\x01\x82\x00\x00\x00\x00\x00\x01\x00\x01\xc2\xd6\
+\x00\x00\x02\x02\x00\x00\x00\x00\x00\x01\x00\x02\x44\xec\
+\x00\x00\x02\x3e\x00\x00\x00\x00\x00\x01\x00\x02\x53\x34\
+\x00\x00\x03\x6a\x00\x00\x00\x00\x00\x01\x00\x02\x7f\x20\
+\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x02\x5d\xa6\
+\x00\x00\x02\x22\x00\x00\x00\x00\x00\x01\x00\x02\x52\x2f\
+\x00\x00\x02\xe0\x00\x00\x00\x00\x00\x01\x00\x02\x5e\x01\
+\x00\x00\x02\xf8\x00\x00\x00\x00\x00\x01\x00\x02\x62\xd9\
+\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x02\x5d\x4b\
+\x00\x00\x02\x68\x00\x00\x00\x00\x00\x01\x00\x02\x55\x73\
+\x00\x00\x03\x36\x00\x00\x00\x00\x00\x01\x00\x02\x75\x80\
+\x00\x00\x02\x86\x00\x00\x00\x00\x00\x01\x00\x02\x5b\x13\
+\x00\x00\x03\x54\x00\x00\x00\x00\x00\x01\x00\x02\x75\xdb\
+\x00\x00\x03\x1a\x00\x01\x00\x00\x00\x01\x00\x02\x6c\xd3\
+\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x01\
+\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x1f\x05\
+\x00\x00\x01\x12\x00\x00\x00\x00\x00\x01\x00\x01\x8c\xf5\
+\x00\x00\x03\xac\x00\x00\x00\x00\x00\x01\x00\x02\x98\x7d\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/quick/canvas/clip/clip.qml b/examples/quick/canvas/clip/clip.qml
new file mode 100644
index 0000000..1e9728f
--- /dev/null
+++ b/examples/quick/canvas/clip/clip.qml
@@ -0,0 +1,150 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../contents"
+Item {
+  id:container
+  width:320
+  height:480
+
+  Column {
+    spacing:5
+    anchors.fill:parent
+    Text { font.pointSize:15; text:"Makes squircle icon with clip"; anchors.horizontalCenter:parent.horizontalCenter}
+    Canvas {
+      id:canvas
+      width:320
+      height:280
+      property string strokeStyle:"blue"
+      property string fillStyle:"steelblue"
+      property int lineWidth:2
+      property int nSize:nCtrl.value
+      property real radius:rCtrl.value
+      property bool fill:true
+      property bool stroke:false
+      property real px:xCtrl.value
+      property real py:yCtrl.value
+      property real alpha:alphaCtrl.value
+      property string imagefile:"../contents/qt-logo.png"
+      antialiasing: true
+      Component.onCompleted:loadImage(canvas.imagefile);
+
+    onAlphaChanged:requestPaint();
+    onRadiusChanged:requestPaint();
+    onLineWidthChanged:requestPaint();
+    onNSizeChanged:requestPaint();
+    onFillChanged:requestPaint();
+    onStrokeChanged:requestPaint();
+    onPxChanged:requestPaint();
+    onPyChanged:requestPaint();
+    
+    onImageLoaded : requestPaint();
+
+    onPaint: squcirle();
+
+    function squcirle() {
+      var ctx = canvas.getContext("2d");
+      var N = canvas.nSize;
+      var R = canvas.radius;
+
+      N=Math.abs(N);
+      var M=N;
+      if (N>100) M=100;
+      if (N<0.00000000001) M=0.00000000001;
+
+      ctx.save();
+      ctx.globalAlpha =canvas.alpha;
+      ctx.fillStyle = "gray";
+      ctx.fillRect(0, 0, canvas.width, canvas.height);
+
+      ctx.strokeStyle = canvas.strokeStyle;
+      ctx.fillStyle = canvas.fillStyle;
+      ctx.lineWidth = canvas.lineWidth;
+
+      ctx.beginPath();
+      var i = 0, x, y;
+      for (i=0; i<(2*R+1); i++){
+         x = Math.round(i-R) + canvas.px;
+         y = Math.round(Math.pow(Math.abs(Math.pow(R,M)-Math.pow(Math.abs(i-R),M)),1/M)) + canvas.py;
+
+         if (i == 0)
+           ctx.moveTo(x, y);
+         else
+           ctx.lineTo(x, y);
+      }
+
+      for (i=(2*R); i<(4*R+1); i++){
+        x =Math.round(3*R-i)+canvas.px;
+        y = Math.round(-Math.pow(Math.abs(Math.pow(R,M)-Math.pow(Math.abs(3*R-i),M)),1/M)) + canvas.py;
+        ctx.lineTo(x, y);
+      }
+      ctx.closePath();
+      if (canvas.stroke) {
+          ctx.stroke();
+      }
+
+      if (canvas.fill) {
+          ctx.fill();
+      }
+      //! [0]
+      ctx.clip();
+
+      ctx.drawImage(canvas.imagefile, 0, 0);
+      //! [0]
+      ctx.restore();
+    }
+  }
+
+    Rectangle {
+        id:controls
+        width:320
+        height:150
+        Column {
+          spacing:3
+          Slider {id:nCtrl; width:300; height:20; min:1; max:10; init:4; name:"N"}
+          Slider {id:rCtrl; width:300; height:20; min:30; max:180; init:100; name:"Radius"}
+          Slider {id:xCtrl; width:300; height:20; min:50; max:300; init:180; name:"X"}
+          Slider {id:yCtrl; width:300; height:20; min:30; max:300; init:220; name:"Y"}
+          Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
+        }
+    }
+  }
+}
diff --git a/examples/quick/canvas/contents/Button.qml b/examples/quick/canvas/contents/Button.qml
new file mode 100644
index 0000000..efdf4ea
--- /dev/null
+++ b/examples/quick/canvas/contents/Button.qml
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+    id: container
+
+    signal clicked
+
+    property string text
+    width: buttonText.width + 28
+    height: buttonText.height + 14
+
+    BorderImage {
+        id: buttonImage
+        source: "images/toolbutton.sci"
+        width: container.width - 10
+        height: container.height
+    }
+    BorderImage {
+        id: pressed
+        opacity: 0
+        source: "images/toolbutton.sci"
+        width: container.width - 10
+        height: container.height
+    }
+    MouseArea {
+        id: mouseRegion
+        anchors.fill: buttonImage
+        onClicked: { container.clicked(); }
+    }
+    Text {
+        id: buttonText
+        color: "white"
+        anchors.centerIn: buttonImage
+        font.bold: true
+        font.pointSize: 15
+        text: container.text
+        style: Text.Raised
+        styleColor: "black"
+    }
+    states: [
+        State {
+            name: "Pressed"
+            when: mouseRegion.pressed == true
+            PropertyChanges { target: pressed; opacity: 1 }
+        }
+    ]
+}
diff --git a/examples/quick/canvas/contents/ScrollBar.qml b/examples/quick/canvas/contents/ScrollBar.qml
new file mode 100644
index 0000000..2c51e0f
--- /dev/null
+++ b/examples/quick/canvas/contents/ScrollBar.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+    id: scrollBar
+    // The properties that define the scrollbar's state.
+    // position and pageSize are in the range 0.0 - 1.0.  They are relative to the
+    // height of the page, i.e. a pageSize of 0.5 means that you can see 50%
+    // of the height of the view.
+    // orientation can be either 'Vertical' or 'Horizontal'
+    property real position
+    property real pageSize
+    property string orientation : "Vertical"
+    property alias bgColor: background.color
+    property alias fgColor: thumb.color
+
+    // A light, semi-transparent background
+    Rectangle {
+        id: background
+        radius: orientation == 'Vertical' ? (width/2 - 1) : (height/2 - 1)
+        color: "white"; opacity: 0.3
+        anchors.fill: parent
+    }
+    // Size the bar to the required size, depending upon the orientation.
+    Rectangle {
+        id: thumb
+        opacity: 0.7
+        color: "black"
+        radius: orientation == 'Vertical' ? (width/2 - 1) : (height/2 - 1)
+        x: orientation == 'Vertical' ? 1 : (scrollBar.position * (scrollBar.width-2) + 1)
+        y: orientation == 'Vertical' ? (scrollBar.position * (scrollBar.height-2) + 1) : 1
+        width: orientation == 'Vertical' ? (parent.width-2) : (scrollBar.pageSize * (scrollBar.width-2))
+        height: orientation == 'Vertical' ? (scrollBar.pageSize * (scrollBar.height-2)) : (parent.height-2)
+    }
+}
diff --git a/examples/quick/canvas/contents/Slider.qml b/examples/quick/canvas/contents/Slider.qml
new file mode 100644
index 0000000..e0fed95
--- /dev/null
+++ b/examples/quick/canvas/contents/Slider.qml
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtQuick module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+    id:slider
+    property real min:0
+    property real max:1
+    property real value: min + (max - min) * (bar.x / (foo.width - bar.width))
+    property real init:min+(max-min)/2
+    property string name:"Slider"
+
+    Component.onCompleted: setValue(init)
+    function setValue(v) {
+       if (min < max)
+          bar.x = v/(max - min) * (foo.width - bar.width);
+    }
+    Rectangle {
+        id:sliderName
+        anchors.left:parent.left
+        height: childrenRect.height
+        width:childrenRect.width
+        anchors.verticalCenter:parent.verticalCenter
+        Text {
+           text:slider.name
+           font.pointSize:12
+         }
+    }
+    Item {
+        id: foo
+        height: 6
+        width: parent.width - 4 - sliderName.width
+        anchors.verticalCenter:parent.verticalCenter
+        anchors.left:sliderName.right
+        anchors.leftMargin:5
+        Rectangle {
+            height: parent.height
+            anchors.left: parent.left
+            anchors.right: bar.horizontalCenter
+            color: "blue"
+            radius: 3
+        }
+        Rectangle {
+            height: parent.height
+            anchors.left: bar.horizontalCenter
+            anchors.right: parent.right
+            color: "gray"
+            radius: 3
+        }
+        Rectangle {
+            anchors.fill: parent
+            color: "transparent"
+            radius: 3
+            border.width: 2
+            border.color: "black"
+        }
+
+        Rectangle {
+            id: bar
+            y: -7
+            width: 20
+            height: 20
+            radius: 15
+            color: "white"
+            border.width: 2
+            border.color: "black"
+            MouseArea {
+                anchors.fill: parent
+                drag.target: parent
+                drag.axis: Drag.XAxis
+                drag.minimumX: 0
+                drag.maximumX: foo.width - parent.width
+            }
+        }
+    }
+}
diff --git a/examples/quick/canvas/contents/TitleBar.qml b/examples/quick/canvas/contents/TitleBar.qml
new file mode 100644
index 0000000..1698a2a
--- /dev/null
+++ b/examples/quick/canvas/contents/TitleBar.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+    id: titleBar
+    property string title: ""
+
+    BorderImage { source: "images/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 }
+
+    Image {
+        id: quitButton
+        anchors.left: parent.left//; anchors.leftMargin: 0
+        anchors.verticalCenter: parent.verticalCenter
+        source: "images/quit.png"
+        MouseArea {
+            anchors.fill: parent
+            onClicked: Qt.quit()
+        }
+    }
+
+    Text {
+        id: categoryText
+        anchors {
+            left: quitButton.right; right: parent.right; //leftMargin: 10; rightMargin: 10
+            verticalCenter: parent.verticalCenter
+        }
+        elide: Text.ElideLeft
+        text: title
+        font.bold: true; font.pointSize: 20; color: "White"; style: Text.Raised; styleColor: "Black"
+    }
+}
diff --git a/examples/quick/canvas/contents/ToolBar.qml b/examples/quick/canvas/contents/ToolBar.qml
new file mode 100644
index 0000000..005a6b1
--- /dev/null
+++ b/examples/quick/canvas/contents/ToolBar.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+    id: toolbar
+
+    property variant labels
+    signal buttonClicked(int index)
+
+    BorderImage {
+        source: "images/titlebar.sci"
+        width: parent.width
+        height: parent.height + 14
+        y: -7
+    }
+
+    Row {
+        y: 3
+        anchors.horizontalCenter: parent.horizontalCenter
+        Repeater {
+            model: toolbar.labels
+            delegate:
+                Button {
+                    text: modelData
+                    onClicked: toolbar.buttonClicked(model.index)
+                }
+        }
+    }
+
+}
diff --git a/examples/quick/canvas/contents/images/button-pressed.png b/examples/quick/canvas/contents/images/button-pressed.png
new file mode 100644
index 0000000..e434d32
Binary files /dev/null and b/examples/quick/canvas/contents/images/button-pressed.png differ
diff --git a/examples/quick/canvas/contents/images/button.png b/examples/quick/canvas/contents/images/button.png
new file mode 100644
index 0000000..56a63ce
Binary files /dev/null and b/examples/quick/canvas/contents/images/button.png differ
diff --git a/examples/quick/canvas/contents/images/default.svg b/examples/quick/canvas/contents/images/default.svg
new file mode 100644
index 0000000..248199c
--- /dev/null
+++ b/examples/quick/canvas/contents/images/default.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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" width="48px" height="48px" id="svg1306">
+  <defs id="defs1308">
+    <linearGradient id="linearGradient4083">
+      <stop id="stop4085" offset="0" stop-color="#ffffff" stop-opacity="0"/>
+      <stop offset="0.75" id="stop4089" stop-color="#ffffff" stop-opacity="0"/>
+      <stop id="stop4087" offset="1" stop-color="#ffffff" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient4032">
+      <stop id="stop4034" offset="0" stop-color="#fff7c2" stop-opacity="0.63829786"/>
+      <stop offset="0.59394139" id="stop4036" stop-color="#fcaf3e" stop-opacity="0.18348624"/>
+      <stop id="stop4038" offset="0.83850551" stop-color="#fcaf3e" stop-opacity="0.50458717"/>
+      <stop id="stop4040" offset="1" stop-color="#fcaf3e" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient4026">
+      <stop id="stop4028" offset="0" stop-color="#fff9c6" stop-opacity="1"/>
+      <stop offset="0.54166669" id="stop4042" stop-color="#fff28c" stop-opacity="1"/>
+      <stop id="stop4030" offset="1" stop-color="#ffea85" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient4026" id="linearGradient3168" gradientUnits="userSpaceOnUse" x1="-28.968945" y1="-25.326815" x2="-37.19698" y2="-9.5590506"/>
+    <radialGradient xlink:href="#linearGradient4032" id="radialGradient4020" cx="-33.519073" cy="-22.113297" fx="-33.519073" fy="-22.113297" r="9.5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.487739,1.292402,-1.10267,0.497242,-41.77393,32.41492)"/>
+    <radialGradient xlink:href="#linearGradient4083" id="radialGradient4081" cx="23.99999" cy="23.381506" fx="23.99999" fy="23.381506" r="19.141981" gradientTransform="matrix(1.006701,2.235326e-16,-2.23715e-16,1.007522,-0.160816,0.426981)" gradientUnits="userSpaceOnUse"/>
+  </defs>
+  
+  <metadata id="metadata1311">
+    <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>weather-clear</dc:title>
+        <dc:date>January 2006</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ryan Collier (pseudo)</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>http://www.tango-project.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:source>http://www.pseudocode.org</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>weather</rdf:li>
+            <rdf:li>applet</rdf:li>
+            <rdf:li>notification</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/"/>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>Garrett LeSage</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g>
+      <g opacity="0.7">
+        <path d="M 24 2.5 L 21.625 9.1875 C 22.399034 9.0641318 23.191406 9 24 9 C 24.808594 9 25.600966 9.0641317 26.375 9.1875 L 24 2.5 z M 8.8125 8.78125 L 11.84375 15.21875 C 12.779034 13.928569 13.928569 12.779034 15.21875 11.84375 L 8.8125 8.78125 z M 39.21875 8.78125 L 32.78125 11.84375 C 34.071431 12.779034 35.220966 13.928569 36.15625 15.21875 L 39.21875 8.78125 z M 9.1875 21.59375 L 2.5 23.96875 L 9.1875 26.34375 C 9.0673373 25.57952 9 24.797813 9 24 C 9 23.180625 9.0608858 22. [...]
+        <path d="M 24 5.25 L 22.65625 9.0625 C 23.098888 9.0231486 23.547187 9 24 9 C 24.452813 9 24.901112 9.0231486 25.34375 9.0625 L 24 5.25 z M 10.78125 10.75 L 12.5 14.375 C 13.071538 13.694089 13.724004 13.038745 14.40625 12.46875 L 10.78125 10.75 z M 37.25 10.75 L 33.625 12.46875 C 34.304675 13.038189 34.961811 13.695325 35.53125 14.375 L 37.25 10.75 z M 9.0625 22.625 L 5.28125 23.96875 L 9.0625 25.3125 C 9.024981 24.880146 9 24.442031 9 24 C 9 23.536406 9.0212735 23.077908 9.0625 [...]
+      </g>
+      <g>
+        <g>
+          <path transform="matrix(0.778062,-1.061285,1.061287,0.778062,67.47952,3.641324)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="#ffee54" fill-opacity="1" stroke="#fcaf3e" stroke-width="0.75991178" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+          <path transform="matrix(1.244257,-0.167707,0.216642,1.251844,67.61648,40.527)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="url(#radialGradient4020)" fill-opacity="1" stroke="none" stroke-width="1.01737845" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+          <path transform="matrix(0.715791,-0.976349,0.97635,0.715792,64.00044,5.269544)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="none" fill-opacity="1" stroke="url(#linearGradient3168)" stroke-width="0.82601947" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/examples/quick/canvas/contents/images/gloss.png b/examples/quick/canvas/contents/images/gloss.png
new file mode 100644
index 0000000..5d370cd
Binary files /dev/null and b/examples/quick/canvas/contents/images/gloss.png differ
diff --git a/examples/quick/canvas/contents/images/lineedit.png b/examples/quick/canvas/contents/images/lineedit.png
new file mode 100644
index 0000000..2cc38dc
Binary files /dev/null and b/examples/quick/canvas/contents/images/lineedit.png differ
diff --git a/examples/quick/canvas/contents/images/lineedit.sci b/examples/quick/canvas/contents/images/lineedit.sci
new file mode 100644
index 0000000..054bff7
--- /dev/null
+++ b/examples/quick/canvas/contents/images/lineedit.sci
@@ -0,0 +1,5 @@
+border.left: 10
+border.top: 10
+border.bottom: 10
+border.right: 10
+source: lineedit.png
diff --git a/examples/quick/canvas/contents/images/quit.png b/examples/quick/canvas/contents/images/quit.png
new file mode 100644
index 0000000..5bda1b6
Binary files /dev/null and b/examples/quick/canvas/contents/images/quit.png differ
diff --git a/examples/quick/canvas/contents/images/stripes.png b/examples/quick/canvas/contents/images/stripes.png
new file mode 100644
index 0000000..9f36727
Binary files /dev/null and b/examples/quick/canvas/contents/images/stripes.png differ
diff --git a/examples/quick/canvas/contents/images/titlebar.png b/examples/quick/canvas/contents/images/titlebar.png
new file mode 100644
index 0000000..51c9008
Binary files /dev/null and b/examples/quick/canvas/contents/images/titlebar.png differ
diff --git a/examples/quick/canvas/contents/images/titlebar.sci b/examples/quick/canvas/contents/images/titlebar.sci
new file mode 100644
index 0000000..0418d94
--- /dev/null
+++ b/examples/quick/canvas/contents/images/titlebar.sci
@@ -0,0 +1,5 @@
+border.left: 10
+border.top: 12
+border.bottom: 12
+border.right: 10
+source: titlebar.png
diff --git a/examples/quick/canvas/contents/images/toolbutton.png b/examples/quick/canvas/contents/images/toolbutton.png
new file mode 100644
index 0000000..1131001
Binary files /dev/null and b/examples/quick/canvas/contents/images/toolbutton.png differ
diff --git a/examples/quick/canvas/contents/images/toolbutton.sci b/examples/quick/canvas/contents/images/toolbutton.sci
new file mode 100644
index 0000000..9e4f965
--- /dev/null
+++ b/examples/quick/canvas/contents/images/toolbutton.sci
@@ -0,0 +1,5 @@
+border.left: 15
+border.top: 4
+border.bottom: 4
+border.right: 15
+source: toolbutton.png
diff --git a/examples/quick/canvas/contents/qt-logo.png b/examples/quick/canvas/contents/qt-logo.png
new file mode 100644
index 0000000..5ab3a1b
Binary files /dev/null and b/examples/quick/canvas/contents/qt-logo.png differ
diff --git a/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml b/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
new file mode 100644
index 0000000..9e03c03
--- /dev/null
+++ b/examples/quick/canvas/quadraticCurveTo/quadraticCurveTo.qml
@@ -0,0 +1,130 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../contents"
+Item {
+  id:container
+  width:320
+  height:480
+
+  Column {
+    spacing:5
+    anchors.fill:parent
+    Text { font.pointSize:15; text:"Quadratic Curve"; anchors.horizontalCenter:parent.horizontalCenter}
+
+    Canvas {
+      id:canvas
+      width:320
+      height:280
+      property string strokeStyle:"steelblue"
+      property string fillStyle:"yellow"
+      property int lineWidth:lineWidthCtrl.value
+      property bool fill:true
+      property bool stroke:true
+      property real alpha:alphaCtrl.value
+      property real scaleX : scaleXCtrl.value
+      property real scaleY : scaleYCtrl.value
+      property real rotate : rotateCtrl.value
+      antialiasing: true
+
+      onLineWidthChanged:requestPaint();
+      onFillChanged:requestPaint();
+      onStrokeChanged:requestPaint();
+      onAlphaChanged:requestPaint();
+      onScaleXChanged:requestPaint();
+      onScaleYChanged:requestPaint();
+      onRotateChanged:requestPaint();
+      Behavior on scaleX { SpringAnimation { spring: 2; damping: 0.2; loops:Animation.Infinite } }
+      Behavior on scaleY { SpringAnimation { spring: 2; damping: 0.2; loops:Animation.Infinite} }
+      Behavior on rotate { SpringAnimation { spring: 2; damping: 0.2; loops:Animation.Infinite} }
+
+      onPaint: {
+          var ctx = canvas.getContext('2d');
+          ctx.save();
+          ctx.clearRect(0, 0, canvas.width, canvas.height);
+          ctx.globalAlpha = canvas.alpha;
+          ctx.strokeStyle = canvas.strokeStyle;
+          ctx.fillStyle = canvas.fillStyle;
+          ctx.lineWidth = canvas.lineWidth;
+          ctx.scale(canvas.scaleX, canvas.scaleY);
+          ctx.rotate(canvas.rotate);
+          // ![0]
+          ctx.beginPath();
+          ctx.moveTo(75,25);
+          ctx.quadraticCurveTo(25,25,25,62.5);
+          ctx.quadraticCurveTo(25,100,50,100);
+          ctx.quadraticCurveTo(50,120,30,125);
+          ctx.quadraticCurveTo(60,120,65,100);
+          ctx.quadraticCurveTo(125,100,125,62.5);
+          ctx.quadraticCurveTo(125,25,75,25);
+          ctx.closePath();
+          // ![0]
+          if (canvas.fill)
+             ctx.fill();
+          if (canvas.stroke)
+             ctx.stroke();
+
+
+          // ![1]
+          ctx.fillStyle="green";
+          ctx.font = "Bold 15px";
+
+          ctx.fillText("QML酷毙了", 30, 60);
+          // ![1]
+          ctx.restore();
+      }
+    }
+
+    Rectangle {
+        id:controls
+        width:320
+        height:150
+        Column {
+          spacing:3
+          Slider {id:lineWidthCtrl; width:300; height:20; min:1; max:10; init:2; name:"Line width"}
+          Slider {id:scaleXCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleX"}
+          Slider {id:scaleYCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleY"}
+          Slider {id:rotateCtrl; width:300; height:20; min:0; max:Math.PI*2; init:0; name:"Rotate"}
+          Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
+        }
+    }
+  }
+}
diff --git a/examples/quick/canvas/roundedrect/roundedrect.qml b/examples/quick/canvas/roundedrect/roundedrect.qml
new file mode 100644
index 0000000..42142ce
--- /dev/null
+++ b/examples/quick/canvas/roundedrect/roundedrect.qml
@@ -0,0 +1,123 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../contents"
+Item {
+  id:container
+  width:320
+  height:480
+
+  Column {
+    spacing:5
+    anchors.fill:parent
+    Text { font.pointSize:15; text:"Rounded rectangle"; anchors.horizontalCenter:parent.horizontalCenter}
+    Canvas {
+        id:canvas
+        width:320
+        height:280
+        antialiasing: true
+
+        property int radius: rCtrl.value
+        property int rectx: rxCtrl.value
+        property int recty: ryCtrl.value
+        property int rectWidth: width - 2*rectx
+        property int rectHeight: height - 2*recty
+        property string strokeStyle:"blue"
+        property string fillStyle:"steelblue"
+        property int lineWidth:lineWidthCtrl.value
+        property bool fill:true
+        property bool stroke:true
+        property real alpha:alphaCtrl.value
+
+        onLineWidthChanged:requestPaint();
+        onFillChanged:requestPaint();
+        onStrokeChanged:requestPaint();
+        onRadiusChanged:requestPaint();
+        onRectxChanged:requestPaint();
+        onRectyChanged:requestPaint();
+        onAlphaChanged:requestPaint();
+
+        onPaint: {
+            var ctx = getContext("2d");
+            ctx.save();
+            ctx.clearRect(0,0,canvas.width, canvas.height);
+            ctx.strokeStyle = canvas.strokeStyle;
+            ctx.lineWidth = canvas.lineWidth
+            ctx.fillStyle = canvas.fillStyle
+            ctx.globalAlpha = canvas.alpha
+            ctx.beginPath();
+            ctx.moveTo(rectx+radius,recty);                 // top side
+            ctx.lineTo(rectx+rectWidth-radius,recty);
+            // draw top right corner
+            ctx.arcTo(rectx+rectWidth,recty,rectx+rectWidth,recty+radius,radius);
+            ctx.lineTo(rectx+rectWidth,recty+rectHeight-radius);    // right side
+            // draw bottom right corner
+            ctx.arcTo(rectx+rectWidth,recty+rectHeight,rectx+rectWidth-radius,recty+rectHeight,radius);
+            ctx.lineTo(rectx+radius,recty+rectHeight);              // bottom side
+            // draw bottom left corner
+            ctx.arcTo(rectx,recty+rectHeight,rectx,recty+rectHeight-radius,radius);
+            ctx.lineTo(rectx,recty+radius);                 // left side
+            // draw top left corner
+            ctx.arcTo(rectx,recty,rectx+radius,recty,radius);
+            ctx.closePath();
+            if (canvas.fill)
+                ctx.fill();
+            if (canvas.stroke)
+                ctx.stroke();
+            ctx.restore();
+        }
+    }
+
+    Rectangle {
+        id:controls
+        width:320
+        height:150
+        Column {
+          spacing:3
+          Slider {id:lineWidthCtrl; width:300; height:20; min:1; max:10; init:2; name:"Line width"}
+          Slider {id:rxCtrl; width:300; height:20; min:5; max:30; init:10; name:"rectx"}
+          Slider {id:ryCtrl; width:300; height:20; min:5; max:30; init:10; name:"recty"}
+          Slider {id:rCtrl; width:300; height:20; min:10; max:100; init:40; name:"Radius"}
+          Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
+        }
+    }
+  }
+}
diff --git a/examples/quick/canvas/smile/smile.qml b/examples/quick/canvas/smile/smile.qml
new file mode 100644
index 0000000..c8b01b3
--- /dev/null
+++ b/examples/quick/canvas/smile/smile.qml
@@ -0,0 +1,126 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../contents"
+Item {
+  id:container
+  width:320
+  height:480
+
+  Column {
+    spacing:5
+    anchors.fill:parent
+    Text { font.pointSize:15; text:"Smile with arcs"; anchors.horizontalCenter:parent.horizontalCenter}
+
+    Canvas {
+        id:canvas
+        width:320
+        height:280
+        antialiasing: true
+
+        property string strokeStyle:"green"
+        property string fillStyle:"yellow"
+        property int lineWidth:lineWidthCtrl.value
+        property bool fill:true
+        property bool stroke:true
+        property real alpha:alphaCtrl.value
+        property real scaleX : scaleXCtrl.value
+        property real scaleY : scaleYCtrl.value
+        property real rotate : rotateCtrl.value
+
+        onLineWidthChanged:requestPaint();
+        onFillChanged:requestPaint();
+        onStrokeChanged:requestPaint();
+        onAlphaChanged:requestPaint();
+        onScaleXChanged:requestPaint();
+        onScaleYChanged:requestPaint();
+        onRotateChanged:requestPaint();
+
+        Behavior on scaleX { SpringAnimation { spring: 2; damping: 0.2; loops:Animation.Infinite } }
+        Behavior on scaleY { SpringAnimation { spring: 2; damping: 0.2; loops:Animation.Infinite} }
+        Behavior on rotate { SpringAnimation { spring: 2; damping: 0.2; loops:Animation.Infinite} }
+
+    onPaint: {
+          var ctx = canvas.getContext('2d');
+          ctx.save();
+          ctx.clearRect(0, 0, canvas.width, canvas.height);
+          ctx.globalAlpha = canvas.alpha;
+          ctx.strokeStyle = canvas.strokeStyle;
+          ctx.fillStyle = canvas.fillStyle;
+          ctx.lineWidth = canvas.lineWidth;
+          ctx.scale(canvas.scaleX, canvas.scaleY);
+          ctx.rotate(canvas.rotate);
+          ctx.beginPath();
+          ctx.moveTo(75 + 50  * Math.cos(0),
+                     75 - 50  * Math.sin(Math.PI*2));
+          ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle
+          ctx.moveTo(75,70);
+          ctx.arc(75,70,35,0,Math.PI,false);   // Mouth (clockwise)
+          ctx.moveTo(60,65);
+          ctx.arc(60,65,5,0,Math.PI*2,true);  // Left eye
+          ctx.moveTo(90 + 5  * Math.cos(0),
+                     65 - 5  * Math.sin(Math.PI*2));
+          ctx.moveTo(90,65);
+          ctx.arc(90,65,5,0,Math.PI*2,true);  // Right eye
+          ctx.closePath();
+          if (canvas.fill)
+             ctx.fill();
+          if (canvas.stroke)
+             ctx.stroke();
+          ctx.restore();
+        }
+    }
+
+    Rectangle {
+        id:controls
+        width:320
+        height:150
+        Column {
+          spacing:3
+          Slider {id:lineWidthCtrl; width:300; height:20; min:1; max:10; init:2; name:"Line width"}
+          Slider {id:scaleXCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleX"}
+          Slider {id:scaleYCtrl; width:300; height:20; min:0.1; max:10; init:1; name:"ScaleY"}
+          Slider {id:rotateCtrl; width:300; height:20; min:0; max:Math.PI*2; init:0; name:"Rotate"}
+          Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
+        }
+    }
+  }
+}
diff --git a/examples/quick/canvas/squircle/squircle.png b/examples/quick/canvas/squircle/squircle.png
new file mode 100644
index 0000000..86c69d9
Binary files /dev/null and b/examples/quick/canvas/squircle/squircle.png differ
diff --git a/examples/quick/canvas/squircle/squircle.qml b/examples/quick/canvas/squircle/squircle.qml
new file mode 100644
index 0000000..3044816
--- /dev/null
+++ b/examples/quick/canvas/squircle/squircle.qml
@@ -0,0 +1,153 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../contents"
+Item {
+  id:container
+  width:320
+  height:480
+
+  Column {
+    spacing:5
+    anchors.fill:parent
+    Text { font.pointSize:15; text:"Squircles"; anchors.horizontalCenter:parent.horizontalCenter}
+    Image {
+       anchors.horizontalCenter:parent.horizontalCenter
+       source:"squircle.png"
+       width:250
+       height:25
+    }
+    Canvas {
+        id:canvas
+        width:320
+        height:250
+        antialiasing: true
+
+        property string strokeStyle:"blue"
+        property string fillStyle:"steelblue"
+        property int lineWidth:2
+        property int nSize:nCtrl.value
+        property real radius:rCtrl.value
+        property bool fill:true
+        property bool stroke:false
+        property real px:xCtrl.value
+        property real py:yCtrl.value
+        property real alpha:alphaCtrl.value
+
+        onAlphaChanged:requestPaint();
+        onRadiusChanged:requestPaint();
+        onLineWidthChanged:requestPaint();
+        onNSizeChanged:requestPaint();
+        onFillChanged:requestPaint();
+        onStrokeChanged:requestPaint();
+        onPxChanged:requestPaint();
+        onPyChanged:requestPaint();
+
+
+        onPaint: squcirle();
+
+        function squcirle() {
+          var ctx = canvas.getContext("2d");
+          var N = canvas.nSize;
+          var R = canvas.radius;
+
+          N=Math.abs(N);
+          var M=N;
+          if (N>100) M=100;
+          if (N<0.00000000001) M=0.00000000001;
+
+          ctx.save();
+          ctx.globalAlpha =canvas.alpha;
+          ctx.fillStyle = "gray";
+          ctx.fillRect(0, 0, canvas.width, canvas.height);
+
+          ctx.strokeStyle = canvas.strokeStyle;
+          ctx.fillStyle = canvas.fillStyle;
+          ctx.lineWidth = canvas.lineWidth;
+
+          ctx.beginPath();
+          var i = 0, x, y;
+          for (i=0; i<(2*R+1); i++){
+             x = Math.round(i-R) + canvas.px;
+             y = Math.round(Math.pow(Math.abs(Math.pow(R,M)-Math.pow(Math.abs(i-R),M)),1/M)) + canvas.py;
+
+             if (i == 0)
+               ctx.moveTo(x, y);
+             else
+               ctx.lineTo(x, y);
+          }
+
+          for (i=(2*R); i<(4*R+1); i++){
+            x =Math.round(3*R-i)+canvas.px;
+            y = Math.round(-Math.pow(Math.abs(Math.pow(R,M)-Math.pow(Math.abs(3*R-i),M)),1/M)) + canvas.py;
+            ctx.lineTo(x, y);
+          }
+          ctx.closePath();
+          if (canvas.stroke) {
+              ctx.stroke();
+          }
+
+          if (canvas.fill) {
+              ctx.fill();
+          }
+
+          ctx.fillStyle = "yellow";
+          ctx.font = "Helvetica  16px";
+          ctx.fillText("|X-" + Math.round(canvas.px) + "|^" + N + " + |Y-"+Math.round(canvas.py)+"|^" + N + " = |" + Math.round(R) + "|^" + N, canvas.px - 125, canvas.py);
+          ctx.restore();
+        }
+    }
+
+    Rectangle {
+        id:controls
+        width:320
+        height:150
+        Column {
+          spacing:3
+          Slider {id:nCtrl; width:300; height:20; min:1; max:10; init:4; name:"N"}
+          Slider {id:rCtrl; width:300; height:20; min:30; max:180; init:100; name:"Radius"}
+          Slider {id:xCtrl; width:300; height:20; min:50; max:300; init:180; name:"X"}
+          Slider {id:yCtrl; width:300; height:20; min:30; max:300; init:220; name:"Y"}
+          Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
+        }
+    }
+  }
+}
diff --git a/examples/quick/canvas/tiger/tiger.js b/examples/quick/canvas/tiger/tiger.js
new file mode 100644
index 0000000..4be0d26
--- /dev/null
+++ b/examples/quick/canvas/tiger/tiger.js
@@ -0,0 +1,721 @@
+var tiger = [
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-122.304 84.285C-122.304 84.285 -122.203 86.179 -123.027 86.16C-123.851 86.141 -140.305 38.066 -160.833 40.309C-160.833 40.309 -143.05 32.956 -122.304 84.285z"}
+  ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-118.774 81.262C-118.774 81.262 -119.323 83.078 -120.092 82.779C-120.86 82.481 -119.977 31.675 -140.043 26.801C-140.043 26.801 -120.82 25.937 -118.774 81.262z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-91.284 123.59C-91.284 123.59 -89.648 124.55 -90.118 125.227C-90.589 125.904 -139.763 113.102 -149.218 131.459C-149.218 131.459 -145.539 112.572 -91.284 123.59z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-94.093 133.801C-94.093 133.801 -92.237 134.197 -92.471 134.988C-92.704 135.779 -143.407 139.121 -146.597 159.522C-146.597 159.522 -149.055 140.437 -94.093 133.801z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-98.304 128.276C-98.304 128.276 -96.526 128.939 -96.872 129.687C-97.218 130.435 -147.866 126.346 -153.998 146.064C-153.998 146.064 -153.646 126.825 -98.304 128.276z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-109.009 110.072C-109.009 110.072 -107.701 111.446 -108.34 111.967C-108.979 112.488 -152.722 86.634 -166.869 101.676C-166.869 101.676 -158.128 84.533 -109.009 110.072z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-116.554 114.263C-116.554 114.263 -115.098 115.48 -115.674 116.071C-116.25 116.661 -162.638 95.922 -174.992 112.469C-174.992 112.469 -168.247 94.447 -116.554 114.263z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-119.154 118.335C-119.154 118.335 -117.546 119.343 -118.036 120.006C-118.526 120.669 -167.308 106.446 -177.291 124.522C-177.291 124.522 -173.066 105.749 -119.154 118.335z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-108.42 118.949C-108.42 118.949 -107.298 120.48 -107.999 120.915C-108.7 121.35 -148.769 90.102 -164.727 103.207C-164.727 103.207 -153.862 87.326 -108.42 118.949z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-128.2 90C-128.2 90 -127.6 91.8 -128.4 92C-129.2 92.2 -157.8 50.2 -177.001 57.8C-177.001 57.8 -161.8 46 -128.2 90z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-127.505 96.979C-127.505 96.979 -126.53 98.608 -127.269 98.975C-128.007 99.343 -164.992 64.499 -182.101 76.061C-182.101 76.061 -169.804 61.261 -127.505 96.979z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.172,
+  "path":"M-127.62 101.349C-127.62 101.349 -126.498 102.88 -127.199 103.315C-127.9 103.749 -167.969 72.502 -183.927 85.607C-183.927 85.607 -173.062 69.726 -127.62 101.349z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000",
+  "path":"M-129.83 103.065C-129.327 109.113 -128.339 115.682 -126.6 118.801C-126.6 118.801 -130.2 131.201 -121.4 144.401C-121.4 144.401 -121.8 151.601 -120.2 154.801C-120.2 154.801 -116.2 163.201 -111.4 164.001C-107.516 164.648 -98.793 167.717 -88.932 169.121C-88.932 169.121 -71.8 183.201 -75 196.001C-75 196.001 -75.4 212.401 -79 214.001C-79 214.001 -67.4 202.801 -77 219.601L-81.4 238.401C-81.4 238.401 -55.8 216.801 -71.4 235.201L-81.4 261.201C-81.4 261.201 -61.8 242.801 -69 251.201L-72. [...]
+ ,
+ {"fill": "#cc7226", "stroke":"#000000",
+  "path":"M299.717 80.245C300.345 80.426 302.551 81.55 303.801 83.2C303.801 83.2 310.601 94 305.401 75.6C305.401 75.6 296.201 46.8 305.001 58C305.001 58 311.001 65.2 307.801 51.6C303.936 35.173 301.401 28.8 301.401 28.8C301.401 28.8 313.001 33.6 286.201 -6L295.001 -2.4C295.001 -2.4 275.401 -42 253.801 -47.2L245.801 -53.2C245.801 -53.2 284.201 -91.2 271.401 -128C271.401 -128 264.601 -133.2 255.001 -124C255.001 -124 248.601 -119.2 242.601 -120.8C242.601 -120.8 211.801 -119.6 209.801 -119.6 [...]
+ ,
+ {"fill": "#cc7226",
+  "path":"M-115.6 102.6C-140.6 63.2 -126.2 119.601 -126.2 119.601C-117.4 154.001 12.2 116.401 12.2 116.401C12.2 116.401 181.001 86 192.201 82C203.401 78 298.601 84.4 298.601 84.4L293.001 67.6C228.201 21.2 209.001 44.4 195.401 40.4C181.801 36.4 184.201 46 181.001 46.8C177.801 47.6 138.601 22.8 132.201 23.6C125.801 24.4 100.459 0.649 115.401 32.4C131.401 66.4 57 71.6 40.2 60.4C23.4 49.2 47.4 78.8 47.4 78.8C65.8 98.8 31.4 82 31.4 82C-3 69.2 -27 94.8 -30.2 95.6C-33.4 96.4 -38.2 99.6 -39 93.2 [...]
+ ,
+ {"fill": "#e87f3a",
+  "path":"M133.51 25.346C127.11 26.146 101.743 2.407 116.71 34.146C133.31 69.346 58.31 73.346 41.51 62.146C24.709 50.946 48.71 80.546 48.71 80.546C67.11 100.546 32.709 83.746 32.709 83.746C-1.691 70.946 -25.691 96.546 -28.891 97.346C-32.091 98.146 -36.891 101.346 -37.691 94.946C-38.491 88.546 -45.87 72.012 -77.691 98.146C-98.927 115.492 -112.418 94.037 -112.418 94.037L-115.618 104.146C-140.618 64.346 -125.546 122.655 -125.546 122.655C-116.745 157.056 13.509 118.146 13.509 118.146C13.509  [...]
+ ,
+ {"fill": "#ea8c4d",
+  "path":"M134.819 27.091C128.419 27.891 103.685 3.862 118.019 35.891C134.219 72.092 59.619 75.092 42.819 63.892C26.019 52.692 50.019 82.292 50.019 82.292C68.419 102.292 34.019 85.492 34.019 85.492C-0.381 72.692 -24.382 98.292 -27.582 99.092C-30.782 99.892 -35.582 103.092 -36.382 96.692C-37.182 90.292 -44.43 73.925 -76.382 99.892C-98.855 117.983 -112.036 97.074 -112.036 97.074L-115.636 105.692C-139.436 66.692 -124.891 125.71 -124.891 125.71C-116.091 160.11 14.819 119.892 14.819 119.892C1 [...]
+ ,
+ {"fill": "#ec9961",
+  "path":"M136.128 28.837C129.728 29.637 104.999 5.605 119.328 37.637C136.128 75.193 60.394 76.482 44.128 65.637C27.328 54.437 51.328 84.037 51.328 84.037C69.728 104.037 35.328 87.237 35.328 87.237C0.928 74.437 -23.072 100.037 -26.272 100.837C-29.472 101.637 -34.272 104.837 -35.072 98.437C-35.872 92.037 -42.989 75.839 -75.073 101.637C-98.782 120.474 -111.655 100.11 -111.655 100.11L-115.655 107.237C-137.455 70.437 -124.236 128.765 -124.236 128.765C-115.436 163.165 16.128 121.637 16.128 12 [...]
+ ,
+ {"fill": "#eea575",
+  "path":"M137.438 30.583C131.037 31.383 106.814 7.129 120.637 39.383C137.438 78.583 62.237 78.583 45.437 67.383C28.637 56.183 52.637 85.783 52.637 85.783C71.037 105.783 36.637 88.983 36.637 88.983C2.237 76.183 -21.763 101.783 -24.963 102.583C-28.163 103.383 -32.963 106.583 -33.763 100.183C-34.563 93.783 -41.548 77.752 -73.763 103.383C-98.709 122.965 -111.273 103.146 -111.273 103.146L-115.673 108.783C-135.473 73.982 -123.582 131.819 -123.582 131.819C-114.782 166.22 17.437 123.383 17.437  [...]
+ ,
+ {"fill": "#f1b288",
+  "path":"M138.747 32.328C132.347 33.128 106.383 9.677 121.947 41.128C141.147 79.928 63.546 80.328 46.746 69.128C29.946 57.928 53.946 87.528 53.946 87.528C72.346 107.528 37.946 90.728 37.946 90.728C3.546 77.928 -20.454 103.528 -23.654 104.328C-26.854 105.128 -31.654 108.328 -32.454 101.928C-33.254 95.528 -40.108 79.665 -72.454 105.128C-98.636 125.456 -110.891 106.183 -110.891 106.183L-115.691 110.328C-133.691 77.128 -122.927 134.874 -122.927 134.874C-114.127 169.274 18.746 125.128 18.746 [...]
+ ,
+ {"fill": "#f3bf9c",
+  "path":"M140.056 34.073C133.655 34.873 107.313 11.613 123.255 42.873C143.656 82.874 64.855 82.074 48.055 70.874C31.255 59.674 55.255 89.274 55.255 89.274C73.655 109.274 39.255 92.474 39.255 92.474C4.855 79.674 -19.145 105.274 -22.345 106.074C-25.545 106.874 -30.345 110.074 -31.145 103.674C-31.945 97.274 -38.668 81.578 -71.145 106.874C-98.564 127.947 -110.509 109.219 -110.509 109.219L-115.709 111.874C-131.709 81.674 -122.273 137.929 -122.273 137.929C-113.473 172.329 20.055 126.874 20.05 [...]
+ ,
+ {"fill": "#f5ccb0",
+  "path":"M141.365 35.819C134.965 36.619 107.523 13.944 124.565 44.619C146.565 84.219 66.164 83.819 49.364 72.619C32.564 61.419 56.564 91.019 56.564 91.019C74.964 111.019 40.564 94.219 40.564 94.219C6.164 81.419 -17.836 107.019 -21.036 107.819C-24.236 108.619 -29.036 111.819 -29.836 105.419C-30.636 99.019 -37.227 83.492 -69.836 108.619C-98.491 130.438 -110.127 112.256 -110.127 112.256L-115.727 113.419C-130.128 85.019 -121.618 140.983 -121.618 140.983C-112.818 175.384 21.364 128.619 21.36 [...]
+ ,
+ {"fill": "#f8d8c4",
+  "path":"M142.674 37.565C136.274 38.365 108.832 15.689 125.874 46.365C147.874 85.965 67.474 85.565 50.674 74.365C33.874 63.165 57.874 92.765 57.874 92.765C76.274 112.765 41.874 95.965 41.874 95.965C7.473 83.165 -16.527 108.765 -19.727 109.565C-22.927 110.365 -27.727 113.565 -28.527 107.165C-29.327 100.765 -35.786 85.405 -68.527 110.365C-98.418 132.929 -109.745 115.293 -109.745 115.293L-115.745 114.965C-129.346 88.564 -120.963 144.038 -120.963 144.038C-112.163 178.438 22.673 130.365 22.6 [...]
+ ,
+ {"fill": "#fae5d7",
+  "path":"M143.983 39.31C137.583 40.11 110.529 17.223 127.183 48.11C149.183 88.91 68.783 87.31 51.983 76.11C35.183 64.91 59.183 94.51 59.183 94.51C77.583 114.51 43.183 97.71 43.183 97.71C8.783 84.91 -15.217 110.51 -18.417 111.31C-21.618 112.11 -26.418 115.31 -27.218 108.91C-28.018 102.51 -34.346 87.318 -67.218 112.11C-98.345 135.42 -109.363 118.329 -109.363 118.329L-115.764 116.51C-128.764 92.51 -120.309 147.093 -120.309 147.093C-111.509 181.493 23.983 132.11 23.983 132.11C23.983 132.11  [...]
+ ,
+ {"fill": "#fcf2eb",
+  "path":"M145.292 41.055C138.892 41.855 112.917 18.411 128.492 49.855C149.692 92.656 70.092 89.056 53.292 77.856C36.492 66.656 60.492 96.256 60.492 96.256C78.892 116.256 44.492 99.456 44.492 99.456C10.092 86.656 -13.908 112.256 -17.108 113.056C-20.308 113.856 -25.108 117.056 -25.908 110.656C-26.708 104.256 -32.905 89.232 -65.908 113.856C-98.273 137.911 -108.982 121.365 -108.982 121.365L-115.782 118.056C-128.582 94.856 -119.654 150.147 -119.654 150.147C-110.854 184.547 25.292 133.856 25. [...]
+ ,
+ {"fill": "#ffffff",
+  "path":"M-115.8 119.601C-128.6 97.6 -119 153.201 -119 153.201C-110.2 187.601 26.6 135.601 26.6 135.601C26.6 135.601 195.401 105.2 206.601 101.2C217.801 97.2 303.401 102.8 303.401 102.8L298.601 80.4C233.801 34 223.401 63.6 209.801 59.6C196.201 55.6 198.601 65.2 195.401 66C192.201 66.8 153.001 42 146.601 42.8C140.201 43.6 114.981 19.793 129.801 51.6C152.028 99.307 69.041 89.227 54.6 79.6C37.8 68.4 61.8 98 61.8 98C80.2 118.001 45.8 101.2 45.8 101.2C11.4 88.4 -12.6 114.001 -15.8 114.801C-1 [...]
+ ,
+ {"fill": "#000000",
+  "path":"M-74.2 149.601C-74.2 149.601 -81.4 161.201 -60.6 174.401C-60.6 174.401 -59.2 175.801 -77.2 171.601C-77.2 171.601 -83.4 169.601 -85 159.201C-85 159.201 -89.8 154.801 -94.6 149.201C-99.4 143.601 -74.2 149.601 -74.2 149.601z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M65.8 102C65.8 102 83.498 128.821 82.9 133.601C81.6 144.001 81.4 153.601 84.6 157.601C87.801 161.601 96.601 194.801 96.601 194.801C96.601 194.801 96.201 196.001 108.601 158.001C108.601 158.001 120.201 142.001 100.201 123.601C100.201 123.601 65 94.8 65.8 102z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-54.2 176.401C-54.2 176.401 -43 183.601 -57.4 214.801L-51 212.401C-51 212.401 -51.8 223.601 -55 226.001L-47.8 222.801C-47.8 222.801 -43 230.801 -47 235.601C-47 235.601 -30.2 243.601 -31 250.001C-31 250.001 -24.6 242.001 -28.6 235.601C-32.6 229.201 -39.8 233.201 -39 214.801L-47.8 218.001C-47.8 218.001 -42.2 209.201 -42.2 202.801L-50.2 205.201C-50.2 205.201 -34.731 178.623 -45.4 177.201C-51.4 176.401 -54.2 176.401 -54.2 176.401z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-21.8 193.201C-21.8 193.201 -19 188.801 -21.8 189.601C-24.6 190.401 -55.8 205.201 -61.8 214.801C-61.8 214.801 -27.4 190.401 -21.8 193.201z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-11.4 201.201C-11.4 201.201 -8.6 196.801 -11.4 197.601C-14.2 198.401 -45.4 213.201 -51.4 222.801C-51.4 222.801 -17 198.401 -11.4 201.201z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M1.8 186.001C1.8 186.001 4.6 181.601 1.8 182.401C-1 183.201 -32.2 198.001 -38.2 207.601C-38.2 207.601 -3.8 183.201 1.8 186.001z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-21.4 229.601C-21.4 229.601 -21.4 223.601 -24.2 224.401C-27 225.201 -63 242.801 -69 252.401C-69 252.401 -27 226.801 -21.4 229.601z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-20.2 218.801C-20.2 218.801 -19 214.001 -21.8 214.801C-23.8 214.801 -50.2 226.401 -56.2 236.001C-56.2 236.001 -26.6 214.401 -20.2 218.801z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-34.6 266.401L-44.6 274.001C-44.6 274.001 -34.2 266.401 -30.6 267.601C-30.6 267.601 -37.4 278.801 -38.2 284.001C-38.2 284.001 -27.8 271.201 -22.2 271.601C-22.2 271.601 -14.6 272.001 -14.6 282.801C-14.6 282.801 -9 272.401 -5.8 272.801C-5.8 272.801 -4.6 279.201 -5.8 286.001C-5.8 286.001 -1.8 278.401 2.2 280.001C2.2 280.001 8.6 278.001 7.8 289.601C7.8 289.601 7.8 300.001 7 302.801C7 302.801 12.6 276.401 15 276.001C15 276.001 23 274.801 27.8 283.601C27.8 283.601 23.8 276.001 28.6  [...]
+ ,
+ {"fill": "#000000",
+  "path":"M-29.8 173.601C-29.8 173.601 -15 167.601 25 173.601C25 173.601 32.2 174.001 39 165.201C45.8 156.401 72.6 149.201 79 151.201L88.601 157.601L89.401 158.801C89.401 158.801 101.801 169.201 102.201 176.801C102.601 184.401 87.801 232.401 78.2 248.401C68.6 264.401 59 276.801 39.8 274.401C39.8 274.401 19 270.401 -6.6 274.401C-6.6 274.401 -35.8 272.801 -38.6 264.801C-41.4 256.801 -27.4 241.601 -27.4 241.601C-27.4 241.601 -23 233.201 -24.2 218.801C-25.4 204.401 -25 176.401 -29.8 173.601z"}
+ ,
+ {"fill": "#e5668c",
+  "path":"M-7.8 175.601C0.6 194.001 -29 259.201 -29 259.201C-31 260.801 -16.34 266.846 -6.2 264.401C4.746 261.763 45 266.001 45 266.001C68.6 250.401 81.4 206.001 81.4 206.001C81.4 206.001 91.801 182.001 74.2 178.801C56.6 175.601 -7.8 175.601 -7.8 175.601z"}
+ ,
+ {"fill": "#b23259",
+  "path":"M-9.831 206.497C-6.505 193.707 -4.921 181.906 -7.8 175.601C-7.8 175.601 54.6 182.001 65.8 161.201C70.041 153.326 84.801 184.001 84.4 193.601C84.4 193.601 21.4 208.001 6.6 196.801L-9.831 206.497z"}
+ ,
+ {"fill": "#a5264c",
+  "path":"M-5.4 222.801C-5.4 222.801 -3.4 230.001 -5.8 234.001C-5.8 234.001 -7.4 234.801 -8.6 235.201C-8.6 235.201 -7.4 238.801 -1.4 240.401C-1.4 240.401 0.6 244.801 3 245.201C5.4 245.601 10.2 251.201 14.2 250.001C18.2 248.801 29.4 244.801 29.4 244.801C29.4 244.801 35 241.601 43.8 245.201C43.8 245.201 46.175 244.399 46.6 240.401C47.1 235.701 50.2 232.001 52.2 230.001C54.2 228.001 63.8 215.201 62.6 214.801C61.4 214.401 -5.4 222.801 -5.4 222.801z"}
+ ,
+ {"fill": "#ff727f", "stroke":"#000000",
+  "path":"M-9.8 174.401C-9.8 174.401 -12.6 196.801 -9.4 205.201C-6.2 213.601 -7 215.601 -7.8 219.601C-8.6 223.601 -4.2 233.601 1.4 239.601L13.4 241.201C13.4 241.201 28.6 237.601 37.8 240.401C37.8 240.401 46.794 241.744 50.2 226.801C50.2 226.801 55 220.401 62.2 217.601C69.4 214.801 76.6 173.201 72.6 165.201C68.6 157.201 54.2 152.801 38.2 168.401C22.2 184.001 20.2 167.201 -9.8 174.401z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-8.2 249.201C-8.2 249.201 -9 247.201 -13.4 246.801C-13.4 246.801 -35.8 243.201 -44.2 230.801C-44.2 230.801 -51 225.201 -46.6 236.801C-46.6 236.801 -36.2 257.201 -29.4 260.001C-29.4 260.001 -13 264.001 -8.2 249.201z"}
+ ,
+ {"fill": "#cc3f4c",
+  "path":"M71.742 185.229C72.401 177.323 74.354 168.709 72.6 165.201C66.154 152.307 49.181 157.695 38.2 168.401C22.2 184.001 20.2 167.201 -9.8 174.401C-9.8 174.401 -11.545 188.364 -10.705 198.376C-10.705 198.376 26.6 186.801 27.4 192.401C27.4 192.401 29 189.201 38.2 189.201C47.4 189.201 70.142 188.029 71.742 185.229z"}
+ ,
+ {"stroke":"#a51926", "width":2,
+  "path":"M28.6 175.201C28.6 175.201 33.4 180.001 29.8 189.601C29.8 189.601 15.4 205.601 17.4 219.601"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-19.4 260.001C-19.4 260.001 -23.8 247.201 -15 254.001C-15 254.001 -10.2 256.001 -11.4 257.601C-12.6 259.201 -18.2 263.201 -19.4 260.001z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-14.36 261.201C-14.36 261.201 -17.88 250.961 -10.84 256.401C-10.84 256.401 -6.419 258.849 -7.96 259.281C-12.52 260.561 -7.96 263.121 -14.36 261.201z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-9.56 261.201C-9.56 261.201 -13.08 250.961 -6.04 256.401C-6.04 256.401 -1.665 258.711 -3.16 259.281C-6.52 260.561 -3.16 263.121 -9.56 261.201z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-2.96 261.401C-2.96 261.401 -6.48 251.161 0.56 256.601C0.56 256.601 4.943 258.933 3.441 259.481C0.48 260.561 3.441 263.321 -2.96 261.401z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M3.52 261.321C3.52 261.321 0 251.081 7.041 256.521C7.041 256.521 10.881 258.121 9.921 259.401C8.961 260.681 9.921 263.241 3.52 261.321z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M10.2 262.001C10.2 262.001 5.4 249.601 14.6 256.001C14.6 256.001 19.4 258.001 18.2 259.601C17 261.201 18.2 264.401 10.2 262.001z"}
+ ,
+ {"stroke":"#a5264c", "width":2,
+  "path":"M-18.2 244.801C-18.2 244.801 -5 242.001 1 245.201C1 245.201 7 246.401 8.2 246.001C9.4 245.601 12.6 245.201 12.6 245.201"}
+ ,
+ {"stroke":"#a5264c", "width":2,
+  "path":"M15.8 253.601C15.8 253.601 27.8 240.001 39.8 244.401C46.816 246.974 45.8 243.601 46.6 240.801C47.4 238.001 47.6 233.801 52.6 230.801"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M33 237.601C33 237.601 29 226.801 26.2 239.601C23.4 252.401 20.2 256.001 18.6 258.801C18.6 258.801 18.6 264.001 27 263.601C27 263.601 37.8 263.201 38.2 260.401C38.6 257.601 37 246.001 33 237.601z"}
+ ,
+ {"stroke":"#a5264c", "width":2,
+  "path":"M47 244.801C47 244.801 50.6 242.401 53 243.601"}
+ ,
+ {"stroke":"#a5264c", "width":2,
+  "path":"M53.5 228.401C53.5 228.401 56.4 223.501 61.2 222.701"}
+ ,
+ {"fill": "#b2b2b2",
+  "path":"M-25.8 265.201C-25.8 265.201 -7.8 268.401 -3.4 266.801C-3.4 266.801 5.4 266.801 -3 268.801C-3 268.801 -15.8 268.801 -23.8 267.601C-23.8 267.601 -35.4 262.001 -25.8 265.201z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-11.8 172.001C-11.8 172.001 5.8 172.001 7.8 172.801C7.8 172.801 15 203.601 11.4 211.201C11.4 211.201 10.2 214.001 7.4 208.401C7.4 208.401 -11 175.601 -14.2 173.601C-17.4 171.601 -13 172.001 -11.8 172.001z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-88.9 169.301C-88.9 169.301 -80 171.001 -67.4 173.601C-67.4 173.601 -62.6 196.001 -59.4 200.801C-56.2 205.601 -59.8 205.601 -63.4 202.801C-67 200.001 -81.8 186.001 -83.8 181.601C-85.8 177.201 -88.9 169.301 -88.9 169.301z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-67.039 173.818C-67.039 173.818 -61.239 175.366 -60.23 177.581C-59.222 179.795 -61.432 183.092 -61.432 183.092C-61.432 183.092 -62.432 186.397 -63.634 184.235C-64.836 182.072 -67.708 174.412 -67.039 173.818z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-67 173.601C-67 173.601 -63.4 178.801 -59.8 178.801C-56.2 178.801 -55.818 178.388 -53 179.001C-48.4 180.001 -48.8 178.001 -42.2 179.201C-39.56 179.681 -37 178.801 -34.2 180.001C-31.4 181.201 -28.2 180.401 -27 178.401C-25.8 176.401 -21 172.201 -21 172.201C-21 172.201 -33.8 174.001 -36.6 174.801C-36.6 174.801 -59 176.001 -67 173.601z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-22.4 173.801C-22.4 173.801 -28.85 177.301 -29.25 179.701C-29.65 182.101 -24 185.801 -24 185.801C-24 185.801 -21.25 190.401 -20.65 188.001C-20.05 185.601 -21.6 174.201 -22.4 173.801z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-59.885 179.265C-59.885 179.265 -52.878 190.453 -52.661 179.242C-52.661 179.242 -52.104 177.984 -53.864 177.962C-59.939 177.886 -58.418 173.784 -59.885 179.265z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-52.707 179.514C-52.707 179.514 -44.786 190.701 -45.422 179.421C-45.422 179.421 -45.415 179.089 -47.168 178.936C-51.915 178.522 -51.57 174.004 -52.707 179.514z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-45.494 179.522C-45.494 179.522 -37.534 190.15 -38.203 180.484C-38.203 180.484 -38.084 179.251 -39.738 178.95C-43.63 178.244 -43.841 174.995 -45.494 179.522z"}
+ ,
+ {"fill": "#ffffcc", "stroke":"#000000", "width":0.5,
+  "path":"M-38.618 179.602C-38.618 179.602 -30.718 191.163 -30.37 181.382C-30.37 181.382 -28.726 180.004 -30.472 179.782C-36.29 179.042 -35.492 174.588 -38.618 179.602z"}
+ ,
+ {"fill": "#e5e5b2",
+  "path":"M-74.792 183.132L-82.45 181.601C-85.05 176.601 -87.15 170.451 -87.15 170.451C-87.15 170.451 -80.8 171.451 -68.3 174.251C-68.3 174.251 -67.424 177.569 -65.952 183.364L-74.792 183.132z"}
+ ,
+ {"fill": "#e5e5b2",
+  "path":"M-9.724 178.47C-11.39 175.964 -12.707 174.206 -13.357 173.8C-16.37 171.917 -12.227 172.294 -11.098 172.294C-11.098 172.294 5.473 172.294 7.356 173.047C7.356 173.047 7.88 175.289 8.564 178.68C8.564 178.68 -1.524 176.67 -9.724 178.47z"}
+ ,
+ {"fill": "#cc7226",
+  "path":"M43.88 40.321C71.601 44.281 97.121 8.641 98.881 -1.04C100.641 -10.72 90.521 -22.6 90.521 -22.6C91.841 -25.68 87.001 -39.76 81.721 -49C76.441 -58.24 60.54 -57.266 43 -58.24C27.16 -59.12 8.68 -35.8 7.36 -34.04C6.04 -32.28 12.2 6.001 13.52 11.721C14.84 17.441 12.2 43.841 12.2 43.841C46.44 34.741 16.16 36.361 43.88 40.321z"}
+ ,
+ {"fill": "#ea8e51",
+  "path":"M8.088 -33.392C6.792 -31.664 12.84 5.921 14.136 11.537C15.432 17.153 12.84 43.073 12.84 43.073C45.512 34.193 16.728 35.729 43.944 39.617C71.161 43.505 96.217 8.513 97.945 -0.992C99.673 -10.496 89.737 -22.16 89.737 -22.16C91.033 -25.184 86.281 -39.008 81.097 -48.08C75.913 -57.152 60.302 -56.195 43.08 -57.152C27.528 -58.016 9.384 -35.12 8.088 -33.392z"}
+ ,
+ {"fill": "#efaa7c",
+  "path":"M8.816 -32.744C7.544 -31.048 13.48 5.841 14.752 11.353C16.024 16.865 13.48 42.305 13.48 42.305C44.884 33.145 17.296 35.097 44.008 38.913C70.721 42.729 95.313 8.385 97.009 -0.944C98.705 -10.272 88.953 -21.72 88.953 -21.72C90.225 -24.688 85.561 -38.256 80.473 -47.16C75.385 -56.064 60.063 -55.125 43.16 -56.064C27.896 -56.912 10.088 -34.44 8.816 -32.744z"}
+ ,
+ {"fill": "#f4c6a8",
+  "path":"M9.544 -32.096C8.296 -30.432 14.12 5.761 15.368 11.169C16.616 16.577 14.12 41.537 14.12 41.537C43.556 32.497 17.864 34.465 44.072 38.209C70.281 41.953 94.409 8.257 96.073 -0.895C97.737 -10.048 88.169 -21.28 88.169 -21.28C89.417 -24.192 84.841 -37.504 79.849 -46.24C74.857 -54.976 59.824 -54.055 43.24 -54.976C28.264 -55.808 10.792 -33.76 9.544 -32.096z"}
+ ,
+ {"fill": "#f9e2d3",
+  "path":"M10.272 -31.448C9.048 -29.816 14.76 5.681 15.984 10.985C17.208 16.289 14.76 40.769 14.76 40.769C42.628 31.849 18.432 33.833 44.136 37.505C69.841 41.177 93.505 8.129 95.137 -0.848C96.769 -9.824 87.385 -20.84 87.385 -20.84C88.609 -23.696 84.121 -36.752 79.225 -45.32C74.329 -53.888 59.585 -52.985 43.32 -53.888C28.632 -54.704 11.496 -33.08 10.272 -31.448z"}
+ ,
+ {"fill": "#ffffff",
+  "path":"M44.2 36.8C69.4 40.4 92.601 8 94.201 -0.8C95.801 -9.6 86.601 -20.4 86.601 -20.4C87.801 -23.2 83.4 -36 78.6 -44.4C73.8 -52.8 59.346 -51.914 43.4 -52.8C29 -53.6 12.2 -32.4 11 -30.8C9.8 -29.2 15.4 5.6 16.6 10.8C17.8 16 15.4 40 15.4 40C40.9 31.4 19 33.2 44.2 36.8z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M90.601 2.8C90.601 2.8 62.8 10.4 51.2 8.8C51.2 8.8 35.4 2.2 26.6 24C26.6 24 23 31.2 21 33.2C19 35.2 90.601 2.8 90.601 2.8z"}
+ ,
+ {"fill": "#000000",
+  "path":"M94.401 0.6C94.401 0.6 65.4 12.8 55.4 12.4C55.4 12.4 39 7.8 30.6 22.4C30.6 22.4 22.2 31.6 19 33.2C19 33.2 18.6 34.8 25 30.8L35.4 36C35.4 36 50.2 45.6 59.8 29.6C59.8 29.6 63.8 18.4 63.8 16.4C63.8 14.4 85 8.8 86.601 8.4C88.201 8 94.801 3.8 94.401 0.6z"}
+ ,
+ {"fill": "#99cc32",
+  "path":"M47 36.514C40.128 36.514 31.755 32.649 31.755 26.4C31.755 20.152 40.128 13.887 47 13.887C53.874 13.887 59.446 18.952 59.446 25.2C59.446 31.449 53.874 36.514 47 36.514z"}
+ ,
+ {"fill": "#659900",
+  "path":"M43.377 19.83C38.531 20.552 33.442 22.055 33.514 21.839C35.054 17.22 41.415 13.887 47 13.887C51.296 13.887 55.084 15.865 57.32 18.875C57.32 18.875 52.004 18.545 43.377 19.83z"}
+ ,
+ {"fill": "#ffffff",
+  "path":"M55.4 19.6C55.4 19.6 51 16.4 51 18.6C51 18.6 54.6 23 55.4 19.6z"}
+ ,
+ {"fill": "#000000",
+  "path":"M45.4 27.726C42.901 27.726 40.875 25.7 40.875 23.2C40.875 20.701 42.901 18.675 45.4 18.675C47.9 18.675 49.926 20.701 49.926 23.2C49.926 25.7 47.9 27.726 45.4 27.726z"}
+ ,
+ {"fill": "#cc7226",
+  "path":"M-58.6 14.4C-58.6 14.4 -61.8 -6.8 -59.4 -11.2C-59.4 -11.2 -48.6 -21.2 -49 -24.8C-49 -24.8 -49.4 -42.8 -50.6 -43.6C-51.8 -44.4 -59.4 -50.4 -65.4 -44C-65.4 -44 -75.8 -26 -75 -19.6L-75 -17.6C-75 -17.6 -82.6 -18 -84.2 -16C-84.2 -16 -85.4 -10.8 -86.6 -10.4C-86.6 -10.4 -89.4 -8 -87.4 -5.2C-87.4 -5.2 -89.4 -2.8 -89 1.2L-81.4 5.2C-81.4 5.2 -79.4 19.6 -68.6 24.8C-63.764 27.129 -60.6 20.4 -58.6 14.4z"}
+ ,
+ {"fill": "#ffffff",
+  "path":"M-59.6 12.56C-59.6 12.56 -62.48 -6.52 -60.32 -10.48C-60.32 -10.48 -50.6 -19.48 -50.96 -22.72C-50.96 -22.72 -51.32 -38.92 -52.4 -39.64C-53.48 -40.36 -60.32 -45.76 -65.72 -40C-65.72 -40 -75.08 -23.8 -74.36 -18.04L-74.36 -16.24C-74.36 -16.24 -81.2 -16.6 -82.64 -14.8C-82.64 -14.8 -83.72 -10.12 -84.8 -9.76C-84.8 -9.76 -87.32 -7.6 -85.52 -5.08C-85.52 -5.08 -87.32 -2.92 -86.96 0.68L-80.12 4.28C-80.12 4.28 -78.32 17.24 -68.6 21.92C-64.248 24.015 -61.4 17.96 -59.6 12.56z"}
+ ,
+ {"fill": "#eb955c",
+  "path":"M-51.05 -42.61C-52.14 -43.47 -59.63 -49.24 -65.48 -43C-65.48 -43 -75.62 -25.45 -74.84 -19.21L-74.84 -17.26C-74.84 -17.26 -82.25 -17.65 -83.81 -15.7C-83.81 -15.7 -84.98 -10.63 -86.15 -10.24C-86.15 -10.24 -88.88 -7.9 -86.93 -5.17C-86.93 -5.17 -88.88 -2.83 -88.49 1.07L-81.08 4.97C-81.08 4.97 -79.13 19.01 -68.6 24.08C-63.886 26.35 -60.8 19.79 -58.85 13.94C-58.85 13.94 -61.97 -6.73 -59.63 -11.02C-59.63 -11.02 -49.1 -20.77 -49.49 -24.28C-49.49 -24.28 -49.88 -41.83 -51.05 -42.61z"}
+ ,
+ {"fill": "#f2b892",
+  "path":"M-51.5 -41.62C-52.48 -42.54 -59.86 -48.08 -65.56 -42C-65.56 -42 -75.44 -24.9 -74.68 -18.82L-74.68 -16.92C-74.68 -16.92 -81.9 -17.3 -83.42 -15.4C-83.42 -15.4 -84.56 -10.46 -85.7 -10.08C-85.7 -10.08 -88.36 -7.8 -86.46 -5.14C-86.46 -5.14 -88.36 -2.86 -87.98 0.94L-80.76 4.74C-80.76 4.74 -78.86 18.42 -68.6 23.36C-64.006 25.572 -61 19.18 -59.1 13.48C-59.1 13.48 -62.14 -6.66 -59.86 -10.84C-59.86 -10.84 -49.6 -20.34 -49.98 -23.76C-49.98 -23.76 -50.36 -40.86 -51.5 -41.62z"}
+ ,
+ {"fill": "#f8dcc8",
+  "path":"M-51.95 -40.63C-52.82 -41.61 -60.09 -46.92 -65.64 -41C-65.64 -41 -75.26 -24.35 -74.52 -18.43L-74.52 -16.58C-74.52 -16.58 -81.55 -16.95 -83.03 -15.1C-83.03 -15.1 -84.14 -10.29 -85.25 -9.92C-85.25 -9.92 -87.84 -7.7 -85.99 -5.11C-85.99 -5.11 -87.84 -2.89 -87.47 0.81L-80.44 4.51C-80.44 4.51 -78.59 17.83 -68.6 22.64C-64.127 24.794 -61.2 18.57 -59.35 13.02C-59.35 13.02 -62.31 -6.59 -60.09 -10.66C-60.09 -10.66 -50.1 -19.91 -50.47 -23.24C-50.47 -23.24 -50.84 -39.89 -51.95 -40.63z"}
+ ,
+ {"fill": "#ffffff",
+  "path":"M-59.6 12.46C-59.6 12.46 -62.48 -6.52 -60.32 -10.48C-60.32 -10.48 -50.6 -19.48 -50.96 -22.72C-50.96 -22.72 -51.32 -38.92 -52.4 -39.64C-53.16 -40.68 -60.32 -45.76 -65.72 -40C-65.72 -40 -75.08 -23.8 -74.36 -18.04L-74.36 -16.24C-74.36 -16.24 -81.2 -16.6 -82.64 -14.8C-82.64 -14.8 -83.72 -10.12 -84.8 -9.76C-84.8 -9.76 -87.32 -7.6 -85.52 -5.08C-85.52 -5.08 -87.32 -2.92 -86.96 0.68L-80.12 4.28C-80.12 4.28 -78.32 17.24 -68.6 21.92C-64.248 24.015 -61.4 17.86 -59.6 12.46z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-62.7 6.2C-62.7 6.2 -84.3 -4 -85.2 -4.8C-85.2 -4.8 -76.1 3.4 -75.3 3.4C-74.5 3.4 -62.7 6.2 -62.7 6.2z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-79.8 0C-79.8 0 -61.4 3.6 -61.4 8C-61.4 10.912 -61.643 24.331 -67 22.8C-75.4 20.4 -71.8 6 -79.8 0z"}
+ ,
+ {"fill": "#99cc32",
+  "path":"M-71.4 3.8C-71.4 3.8 -62.422 5.274 -61.4 8C-60.8 9.6 -60.137 17.908 -65.6 19C-70.152 19.911 -72.382 9.69 -71.4 3.8z"}
+ ,
+ {"fill": "#000000",
+  "path":"M14.595 46.349C14.098 44.607 15.409 44.738 17.2 44.2C19.2 43.6 31.4 39.8 32.2 37.2C33 34.6 46.2 39 46.2 39C48 39.8 52.4 42.4 52.4 42.4C57.2 43.6 63.8 44 63.8 44C66.2 45 69.6 47.8 69.6 47.8C84.2 58 96.601 50.8 96.601 50.8C116.601 44.2 110.601 27 110.601 27C107.601 18 110.801 14.6 110.801 14.6C111.001 10.8 118.201 17.2 118.201 17.2C120.801 21.4 121.601 26.4 121.601 26.4C129.601 37.6 126.201 19.8 126.201 19.8C126.401 18.8 123.601 15.2 123.601 14C123.601 12.8 121.801 9.4 121.801 9. [...]
+ ,
+ {"fill": "#000000",
+  "path":"M209.401 -120C209.401 -120 183.801 -112 181.001 -93.2C181.001 -93.2 178.601 -70.4 199.001 -52.8C199.001 -52.8 199.401 -46.4 201.401 -43.2C201.401 -43.2 199.801 -38.4 218.601 -46L245.801 -54.4C245.801 -54.4 252.201 -56.8 257.401 -65.6C262.601 -74.4 277.801 -93.2 274.201 -118.4C274.201 -118.4 275.401 -129.6 269.401 -130C269.401 -130 261.001 -131.6 253.801 -124C253.801 -124 247.001 -120.8 244.601 -121.2L209.401 -120z"}
+ ,
+ {"fill": "#000000",
+  "path":"M264.022 -120.99C264.022 -120.99 266.122 -129.92 261.282 -125.08C261.282 -125.08 254.242 -119.36 246.761 -119.36C246.761 -119.36 232.241 -117.16 227.841 -103.96C227.841 -103.96 223.881 -77.12 231.801 -71.4C231.801 -71.4 236.641 -63.92 243.681 -70.52C250.722 -77.12 266.222 -107.35 264.022 -120.99z"}
+ ,
+ {"fill": "#323232",
+  "path":"M263.648 -120.632C263.648 -120.632 265.738 -129.376 260.986 -124.624C260.986 -124.624 254.074 -119.008 246.729 -119.008C246.729 -119.008 232.473 -116.848 228.153 -103.888C228.153 -103.888 224.265 -77.536 232.041 -71.92C232.041 -71.92 236.793 -64.576 243.705 -71.056C250.618 -77.536 265.808 -107.24 263.648 -120.632z"}
+ ,
+ {"fill": "#666666",
+  "path":"M263.274 -120.274C263.274 -120.274 265.354 -128.832 260.69 -124.168C260.69 -124.168 253.906 -118.656 246.697 -118.656C246.697 -118.656 232.705 -116.536 228.465 -103.816C228.465 -103.816 224.649 -77.952 232.281 -72.44C232.281 -72.44 236.945 -65.232 243.729 -71.592C250.514 -77.952 265.394 -107.13 263.274 -120.274z"}
+ ,
+ {"fill": "#999999",
+  "path":"M262.9 -119.916C262.9 -119.916 264.97 -128.288 260.394 -123.712C260.394 -123.712 253.738 -118.304 246.665 -118.304C246.665 -118.304 232.937 -116.224 228.777 -103.744C228.777 -103.744 225.033 -78.368 232.521 -72.96C232.521 -72.96 237.097 -65.888 243.753 -72.128C250.41 -78.368 264.98 -107.02 262.9 -119.916z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M262.526 -119.558C262.526 -119.558 264.586 -127.744 260.098 -123.256C260.098 -123.256 253.569 -117.952 246.633 -117.952C246.633 -117.952 233.169 -115.912 229.089 -103.672C229.089 -103.672 225.417 -78.784 232.761 -73.48C232.761 -73.48 237.249 -66.544 243.777 -72.664C250.305 -78.784 264.566 -106.91 262.526 -119.558z"}
+ ,
+ {"fill": "#ffffff",
+  "path":"M262.151 -119.2C262.151 -119.2 264.201 -127.2 259.801 -122.8C259.801 -122.8 253.401 -117.6 246.601 -117.6C246.601 -117.6 233.401 -115.6 229.401 -103.6C229.401 -103.6 225.801 -79.2 233.001 -74C233.001 -74 237.401 -67.2 243.801 -73.2C250.201 -79.2 264.151 -106.8 262.151 -119.2z"}
+ ,
+ {"fill": "#992600",
+  "path":"M50.6 84C50.6 84 30.2 64.8 22.2 64C22.2 64 -12.2 60 -27 78C-27 78 -9.4 57.6 18.2 63.2C18.2 63.2 -3.4 58.8 -15.8 62C-15.8 62 -32.6 62 -42.2 76L-45 80.8C-45 80.8 -41 66 -22.6 60C-22.6 60 0.2 55.2 11 60C11 60 -10.6 53.2 -20.6 55.2C-20.6 55.2 -51 52.8 -63.8 79.2C-63.8 79.2 -59.8 64.8 -45 57.6C-45 57.6 -31.4 48.8 -11 51.6C-11 51.6 3.4 54.8 8.6 57.2C13.8 59.6 12.6 56.8 4.2 52C4.2 52 -1.4 42 -15.4 42.4C-15.4 42.4 -58.2 46 -68.6 58C-68.6 58 -55 46.8 -44.6 44C-44.6 44 -22.2 36 -13.8 36. [...]
+ ,
+ {"fill": "#cccccc",
+  "path":"M189 278C189 278 173.5 241.5 161 232C161 232 187 248 190.5 266C190.5 266 190.5 276 189 278z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M236 285.5C236 285.5 209.5 230.5 191 206.5C191 206.5 234.5 244 239.5 270.5L240 276L237 273.5C237 273.5 236.5 282.5 236 285.5z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M292.5 237C292.5 237 230 177.5 228.5 175C228.5 175 289 241 292 248.5C292 248.5 290 239.5 292.5 237z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M104 280.5C104 280.5 123.5 228.5 142.5 251C142.5 251 157.5 261 157 264C157 264 153 257.5 135 258C135 258 116 255 104 280.5z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M294.5 153C294.5 153 249.5 124.5 242 123C230.193 120.639 291.5 152 296.5 162.5C296.5 162.5 298.5 160 294.5 153z"}
+ ,
+ {"fill": "#000000",
+  "path":"M143.801 259.601C143.801 259.601 164.201 257.601 171.001 250.801L175.401 254.401L193.001 216.001L196.601 221.201C196.601 221.201 211.001 206.401 210.201 198.401C209.401 190.401 223.001 204.401 223.001 204.401C223.001 204.401 222.201 192.801 229.401 199.601C229.401 199.601 227.001 184.001 235.401 192.001C235.401 192.001 224.864 161.844 247.401 187.601C253.001 194.001 248.601 187.201 248.601 187.201C248.601 187.201 222.601 139.201 244.201 153.601C244.201 153.601 246.201 130.801 2 [...]
+ ,
+ {"fill": "#000000",
+  "path":"M109.401 -97.2C109.401 -97.2 97.801 -105.2 93.801 -104.8C89.801 -104.4 121.401 -113.6 162.601 -86C162.601 -86 167.401 -83.2 171.001 -83.6C171.001 -83.6 174.201 -81.2 171.401 -77.6C171.401 -77.6 162.601 -68 173.801 -56.8C173.801 -56.8 192.201 -50 186.601 -58.8C186.601 -58.8 197.401 -54.8 199.801 -50.8C202.201 -46.8 201.001 -50.8 201.001 -50.8C201.001 -50.8 194.601 -58 188.601 -63.2C188.601 -63.2 183.401 -65.2 180.601 -73.6C177.801 -82 175.401 -92 179.801 -95.2C179.801 -95.2 175. [...]
+ ,
+ {"fill": "#cc7226",
+  "path":"M180.801 -106.4C180.801 -106.4 170.601 -113.8 168.601 -113.8C166.601 -113.8 154.201 -124 150.001 -123.6C145.801 -123.2 133.601 -133.2 106.201 -125C106.201 -125 105.601 -127 109.201 -127.8C109.201 -127.8 115.601 -130 116.001 -130.6C116.001 -130.6 136.201 -134.8 143.401 -131.2C143.401 -131.2 152.601 -128.6 158.801 -122.4C158.801 -122.4 170.001 -119.2 173.201 -120.2C173.201 -120.2 182.001 -118 182.401 -116.2C182.401 -116.2 188.201 -113.2 186.401 -110.6C186.401 -110.6 186.801 -109  [...]
+ ,
+ {"fill": "#cc7226",
+  "path":"M168.33 -108.509C169.137 -107.877 170.156 -107.779 170.761 -106.97C170.995 -106.656 170.706 -106.33 170.391 -106.233C169.348 -105.916 168.292 -106.486 167.15 -105.898C166.748 -105.691 166.106 -105.873 165.553 -106.022C163.921 -106.463 162.092 -106.488 160.401 -105.8C158.416 -106.929 156.056 -106.345 153.975 -107.346C153.917 -107.373 153.695 -107.027 153.621 -107.054C150.575 -108.199 146.832 -107.916 144.401 -110.2C141.973 -110.612 139.616 -111.074 137.188 -111.754C135.37 -112.2 [...]
+ ,
+ {"fill": "#cc7226",
+  "path":"M91.696 -122.739C89.178 -124.464 86.81 -125.57 84.368 -127.356C84.187 -127.489 83.827 -127.319 83.625 -127.441C82.618 -128.05 81.73 -128.631 80.748 -129.327C80.209 -129.709 79.388 -129.698 78.88 -129.956C76.336 -131.248 73.707 -131.806 71.2 -133C71.882 -133.638 73.004 -133.394 73.6 -134.2C73.795 -133.92 74.033 -133.636 74.386 -133.827C76.064 -134.731 77.914 -134.884 79.59 -134.794C81.294 -134.702 83.014 -134.397 84.789 -134.125C85.096 -134.078 85.295 -133.555 85.618 -133.458C87 [...]
+ ,
+ {"fill": "#cc7226",
+  "path":"M59.198 -115.391C56.044 -116.185 52.994 -116.07 49.978 -117.346C49.911 -117.374 49.688 -117.027 49.624 -117.054C48.258 -117.648 47.34 -118.614 46.264 -119.66C45.351 -120.548 43.693 -120.161 42.419 -120.648C42.095 -120.772 41.892 -121.284 41.591 -121.323C40.372 -121.48 39.445 -122.429 38.4 -123C40.736 -123.795 43.147 -123.764 45.609 -124.148C45.722 -124.166 45.867 -123.845 46 -123.845C46.136 -123.845 46.266 -124.066 46.4 -124.2C46.595 -123.92 46.897 -123.594 47.154 -123.848C47.7 [...]
+ ,
+ {"fill": "#cc7226",
+  "path":"M45.338 -71.179C43.746 -72.398 43.162 -74.429 42.034 -76.221C41.82 -76.561 42.094 -76.875 42.411 -76.964C42.971 -77.123 43.514 -76.645 43.923 -76.443C45.668 -75.581 47.203 -74.339 49.2 -74.2C51.19 -71.966 55.45 -71.581 55.457 -68.2C55.458 -67.341 54.03 -68.259 53.6 -67.4C51.149 -68.403 48.76 -68.3 46.38 -69.767C45.763 -70.148 46.093 -70.601 45.338 -71.179z"}
+ ,
+ {"fill": "#cc7226",
+  "path":"M17.8 -123.756C17.935 -123.755 24.966 -123.522 24.949 -123.408C24.904 -123.099 17.174 -122.05 16.81 -122.22C16.646 -122.296 9.134 -119.866 9 -120C9.268 -120.135 17.534 -123.756 17.8 -123.756z"}
+ ,
+ {"fill": "#000000",
+  "path":"M33.2 -114C33.2 -114 18.4 -112.2 14 -111C9.6 -109.8 -9 -102.2 -12 -100.2C-12 -100.2 -25.4 -94.8 -42.4 -74.8C-42.4 -74.8 -34.8 -78.2 -32.6 -81C-32.6 -81 -19 -93.6 -19.2 -91C-19.2 -91 -7 -99.6 -7.6 -97.4C-7.6 -97.4 16.8 -108.6 14.8 -105.4C14.8 -105.4 36.4 -110 35.4 -108C35.4 -108 54.2 -103.6 51.4 -103.4C51.4 -103.4 45.6 -102.2 52 -98.6C52 -98.6 48.6 -94.2 43.2 -98.2C37.8 -102.2 40.8 -100 35.8 -99C35.8 -99 33.2 -98.2 28.6 -102.2C28.6 -102.2 23 -106.8 14.2 -103.2C14.2 -103.2 -16.4  [...]
+ ,
+ {"stroke":"#4c0000", "width":2,
+  "path":"M51.4 85C51.4 85 36.4 68.2 28 65.6C28 65.6 14.6 58.8 -10 66.6"}
+ ,
+ {"stroke":"#4c0000", "width":2,
+  "path":"M24.8 64.2C24.8 64.2 -0.4 56.2 -15.8 60.4C-15.8 60.4 -34.2 62.4 -42.6 76.2"}
+ ,
+ {"stroke":"#4c0000", "width":2,
+  "path":"M21.2 63C21.2 63 4.2 55.8 -10.6 53.6C-10.6 53.6 -27.2 51 -43.8 58.2C-43.8 58.2 -56 64.2 -61.4 74.4"}
+ ,
+ {"stroke":"#4c0000", "width":2,
+  "path":"M22.2 63.4C22.2 63.4 6.8 52.4 5.8 51C5.8 51 -1.2 40 -14.2 39.6C-14.2 39.6 -35.6 40.4 -52.8 48.4"}
+ ,
+ {"fill": "#000000",
+  "path":"M20.895 54.407C22.437 55.87 49.4 84.8 49.4 84.8C84.6 121.401 56.6 87.2 56.6 87.2C49 82.4 39.8 63.6 39.8 63.6C38.6 60.8 53.8 70.8 53.8 70.8C57.8 71.6 71.4 90.8 71.4 90.8C64.6 88.4 69.4 95.6 69.4 95.6C72.2 97.6 92.601 113.201 92.601 113.201C96.201 117.201 100.201 118.801 100.201 118.801C114.201 113.601 107.801 126.801 107.801 126.801C110.201 133.601 115.801 122.001 115.801 122.001C127.001 105.2 110.601 107.601 110.601 107.601C80.6 110.401 73.8 94.4 73.8 94.4C71.4 92 80.2 94.4 80. [...]
+ ,
+ {"fill": "#4c0000",
+  "path":"M-3 42.8C-3 42.8 8.6 48.4 11.2 51.2C13.8 54 27.8 65.4 27.8 65.4C27.8 65.4 22.4 63.4 19.8 61.6C17.2 59.8 6.4 51.6 6.4 51.6C6.4 51.6 2.6 45.6 -3 42.8z"}
+ ,
+ {"fill": "#99cc32",
+  "path":"M-61.009 11.603C-60.672 11.455 -61.196 8.743 -61.4 8.2C-62.422 5.474 -71.4 4 -71.4 4C-71.627 5.365 -71.682 6.961 -71.576 8.599C-71.576 8.599 -66.708 14.118 -61.009 11.603z"}
+ ,
+ {"fill": "#659900",
+  "path":"M-61.009 11.403C-61.458 11.561 -61.024 8.669 -61.2 8.2C-62.222 5.474 -71.4 3.9 -71.4 3.9C-71.627 5.265 -71.682 6.861 -71.576 8.499C-71.576 8.499 -67.308 13.618 -61.009 11.403z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-65.4 11.546C-66.025 11.546 -66.531 10.406 -66.531 9C-66.531 7.595 -66.025 6.455 -65.4 6.455C-64.775 6.455 -64.268 7.595 -64.268 9C-64.268 10.406 -64.775 11.546 -65.4 11.546z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-65.4 9z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-111 109.601C-111 109.601 -116.6 119.601 -91.8 113.601C-91.8 113.601 -77.8 112.401 -75.4 110.001C-74.2 110.801 -65.834 113.734 -63 114.401C-56.2 116.001 -47.8 106 -47.8 106C-47.8 106 -43.2 95.5 -40.4 95.5C-37.6 95.5 -40.8 97.1 -40.8 97.1C-40.8 97.1 -47.4 107.201 -47 108.801C-47 108.801 -52.2 128.801 -68.2 129.601C-68.2 129.601 -84.35 130.551 -83 136.401C-83 136.401 -74.2 134.001 -71.8 136.401C-71.8 136.401 -61 136.001 -69 142.401L-75.8 154.001C-75.8 154.001 -75.66 157.919 -85. [...]
+ ,
+ {"fill": "#e59999",
+  "path":"M-112.2 113.601C-112.2 113.601 -114.2 123.201 -77.4 112.801C-77.4 112.801 -73 112.801 -70.6 113.601C-68.2 114.401 -56.2 117.201 -54.2 116.001C-54.2 116.001 -61.4 129.601 -73 128.001C-73 128.001 -86.2 129.601 -85.8 134.401C-85.8 134.401 -81.8 141.601 -77 144.001C-77 144.001 -74.2 146.401 -74.6 149.601C-75 152.801 -77.8 154.401 -79.8 155.201C-81.8 156.001 -85 152.801 -86.6 152.801C-88.2 152.801 -96.6 146.401 -101 141.601C-105.4 136.801 -113.8 124.801 -113.4 122.001C-113 119.201 - [...]
+ ,
+ {"fill": "#b26565",
+  "path":"M-109 131.051C-106.4 135.001 -103.2 139.201 -101 141.601C-96.6 146.401 -88.2 152.801 -86.6 152.801C-85 152.801 -81.8 156.001 -79.8 155.201C-77.8 154.401 -75 152.801 -74.6 149.601C-74.2 146.401 -77 144.001 -77 144.001C-80.066 142.468 -82.806 138.976 -84.385 136.653C-84.385 136.653 -84.2 139.201 -89.4 138.401C-94.6 137.601 -99.8 134.801 -101.4 131.601C-103 128.401 -105.4 126.001 -103.8 129.601C-102.2 133.201 -99.8 136.801 -98.2 137.201C-96.6 137.601 -97 138.801 -99.4 138.401C-101 [...]
+ ,
+ {"fill": "#992600",
+  "path":"M-111.6 110.001C-111.6 110.001 -109.8 96.4 -108.6 92.4C-108.6 92.4 -109.4 85.6 -107 81.4C-104.6 77.2 -102.6 71 -99.6 65.6C-96.6 60.2 -96.4 56.2 -92.4 54.6C-88.4 53 -82.4 44.4 -79.6 43.4C-76.8 42.4 -77 43.2 -77 43.2C-77 43.2 -70.2 28.4 -56.6 32.4C-56.6 32.4 -72.8 29.6 -57 20.2C-57 20.2 -61.8 21.3 -58.5 14.3C-56.299 9.632 -56.8 16.4 -67.8 28.2C-67.8 28.2 -72.8 36.8 -78 39.8C-83.2 42.8 -95.2 49.8 -96.4 53.6C-97.6 57.4 -100.8 63.2 -102.8 64.8C-104.8 66.4 -107.6 70.6 -108 74C-108 74 [...]
+ ,
+ {"fill": "#ffffff",
+  "path":"M-120.2 114.601C-120.2 114.601 -122.2 113.201 -126.6 119.201C-126.6 119.201 -119.3 152.201 -119.3 153.601C-119.3 153.601 -118.2 151.501 -119.5 144.301C-120.8 137.101 -121.7 124.401 -121.7 124.401L-120.2 114.601z"}
+ ,
+ {"fill": "#992600",
+  "path":"M-98.6 54C-98.6 54 -116.2 57.2 -115.8 86.4L-116.6 111.201C-116.6 111.201 -117.8 85.6 -119 84C-120.2 82.4 -116.2 71.2 -119.4 77.2C-119.4 77.2 -133.4 91.2 -125.4 112.401C-125.4 112.401 -123.9 115.701 -126.9 111.101C-126.9 111.101 -131.5 98.5 -130.4 92.1C-130.4 92.1 -130.2 89.9 -128.3 87.1C-128.3 87.1 -119.7 75.4 -117 73.1C-117 73.1 -115.2 58.7 -99.8 53.5C-99.8 53.5 -94.1 51.2 -98.6 54z"}
+ ,
+ {"fill": "#000000",
+  "path":"M40.8 -12.2C41.46 -12.554 41.451 -13.524 42.031 -13.697C43.18 -14.041 43.344 -15.108 43.862 -15.892C44.735 -17.211 44.928 -18.744 45.51 -20.235C45.782 -20.935 45.809 -21.89 45.496 -22.55C44.322 -25.031 43.62 -27.48 42.178 -29.906C41.91 -30.356 41.648 -31.15 41.447 -31.748C40.984 -33.132 39.727 -34.123 38.867 -35.443C38.579 -35.884 39.104 -36.809 38.388 -36.893C37.491 -36.998 36.042 -37.578 35.809 -36.552C35.221 -33.965 36.232 -31.442 37.2 -29C36.418 -28.308 36.752 -27.387 36.90 [...]
+ ,
+ {"fill": "#000000",
+  "path":"M31.959 -16.666C32.083 -16.743 31.928 -17.166 32.037 -17.382C32.199 -17.706 32.602 -17.894 32.764 -18.218C32.873 -18.434 32.71 -18.814 32.846 -18.956C35.179 -21.403 35.436 -24.427 34.4 -27.4C35.424 -28.02 35.485 -29.282 35.06 -30.129C34.207 -31.829 34.014 -33.755 33.039 -35.298C32.237 -36.567 30.659 -37.811 29.288 -36.508C28.867 -36.108 28.546 -35.321 28.824 -34.609C28.888 -34.446 29.173 -34.3 29.146 -34.218C29.039 -33.894 28.493 -33.67 28.487 -33.398C28.457 -31.902 27.503 -30. [...]
+ ,
+ {"fill": "#000000",
+  "path":"M94.771 -26.977C96.16 -25.185 96.45 -22.39 94.401 -21C94.951 -17.691 98.302 -19.67 100.401 -20.2C100.292 -20.588 100.519 -20.932 100.802 -20.937C101.859 -20.952 102.539 -21.984 103.601 -21.8C104.035 -23.357 105.673 -24.059 106.317 -25.439C108.043 -29.134 107.452 -33.407 104.868 -36.653C104.666 -36.907 104.883 -37.424 104.759 -37.786C104.003 -39.997 101.935 -40.312 100.001 -41C98.824 -44.875 98.163 -48.906 96.401 -52.6C94.787 -52.85 94.089 -54.589 92.752 -55.309C91.419 -56.028 9 [...]
+ ,
+ {"fill": "#000000",
+  "path":"M57.611 -8.591C56.124 -6.74 52.712 -4.171 55.629 -2.243C55.823 -2.114 56.193 -2.11 56.366 -2.244C58.387 -3.809 60.39 -4.712 62.826 -5.294C62.95 -5.323 63.224 -4.856 63.593 -5.017C65.206 -5.72 67.216 -5.662 68.4 -7C72.167 -6.776 75.732 -7.892 79.123 -9.2C80.284 -9.648 81.554 -10.207 82.755 -10.709C84.131 -11.285 85.335 -12.213 86.447 -13.354C86.58 -13.49 86.934 -13.4 87.201 -13.4C87.161 -14.263 88.123 -14.39 88.37 -15.012C88.462 -15.244 88.312 -15.64 88.445 -15.742C90.583 -17.37 [...]
+ ,
+ {"fill": "#000000",
+  "path":"M2.2 -58C2.2 -58 -7.038 -60.872 -18.2 -35.2C-18.2 -35.2 -20.6 -30 -23 -28C-25.4 -26 -36.6 -22.4 -38.6 -18.4L-49 -2.4C-49 -2.4 -34.2 -18.4 -31 -20.8C-31 -20.8 -23 -29.2 -26.2 -22.4C-26.2 -22.4 -40.2 -11.6 -39 -2.4C-39 -2.4 -44.6 12 -45.4 14C-45.4 14 -29.4 -18 -27 -19.2C-24.6 -20.4 -23.4 -20.4 -24.6 -16.8C-25.8 -13.2 -26.2 3.2 -29 5.2C-29 5.2 -21 -15.2 -21.8 -18.4C-21.8 -18.4 -18.6 -22 -16.2 -16.8L-17.4 -0.8L-13 11.2C-13 11.2 -15.4 0 -13.8 -15.6C-13.8 -15.6 -15.8 -26 -11.8 -20.4C [...]
+ ,
+ {"fill": "#000000",
+  "path":"M-17.8 -41.6C-17.8 -41.6 -30.6 -41.6 -33.8 -36.4L-41 -26.8C-41 -26.8 -23.8 -36.8 -19.8 -38C-15.8 -39.2 -17.8 -41.6 -17.8 -41.6z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-57.8 -35.2C-57.8 -35.2 -59.8 -34 -60.2 -31.2C-60.6 -28.4 -63 -28 -62.2 -25.2C-61.4 -22.4 -59.4 -20 -59.4 -24C-59.4 -28 -57.8 -30 -57 -31.2C-56.2 -32.4 -54.6 -36.8 -57.8 -35.2z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-66.6 26C-66.6 26 -75 22 -78.2 18.4C-81.4 14.8 -80.948 19.966 -85.8 19.6C-91.647 19.159 -90.6 3.2 -90.6 3.2L-94.6 10.8C-94.6 10.8 -95.8 25.2 -87.8 22.8C-83.893 21.628 -82.6 23.2 -84.2 24C-85.8 24.8 -78.6 25.2 -81.4 26.8C-84.2 28.4 -69.8 23.2 -72.2 33.6L-66.6 26z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-79.2 40.4C-79.2 40.4 -94.6 44.8 -98.2 35.2C-98.2 35.2 -103 37.6 -100.8 40.6C-98.6 43.6 -97.4 44 -97.4 44C-97.4 44 -92 45.2 -92.6 46C-93.2 46.8 -95.6 50.2 -95.6 50.2C-95.6 50.2 -85.4 44.2 -79.2 40.4z"}
+ ,
+ {"fill": "#ffffff",
+  "path":"M149.201 118.601C148.774 120.735 147.103 121.536 145.201 122.201C143.284 121.243 140.686 118.137 138.801 120.201C138.327 119.721 137.548 119.661 137.204 118.999C136.739 118.101 137.011 117.055 136.669 116.257C136.124 114.985 135.415 113.619 135.601 112.201C137.407 111.489 138.002 109.583 137.528 107.82C137.459 107.563 137.03 107.366 137.23 107.017C137.416 106.694 137.734 106.467 138.001 106.2C137.866 106.335 137.721 106.568 137.61 106.548C137 106.442 137.124 105.805 137.254 105 [...]
+ ,
+ {"fill": "#ffffff",
+  "path":"M139.6 138.201C139.593 136.463 137.992 134.707 139.201 133.001C139.336 133.135 139.467 133.356 139.601 133.356C139.736 133.356 139.867 133.135 140.001 133.001C141.496 135.217 145.148 136.145 145.006 138.991C144.984 139.438 143.897 140.356 144.801 141.001C142.988 142.349 142.933 144.719 142.001 146.601C140.763 146.315 139.551 145.952 138.401 145.401C138.753 143.915 138.636 142.231 139.456 140.911C139.89 140.213 139.603 139.134 139.6 138.201z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-26.6 129.201C-26.6 129.201 -43.458 139.337 -29.4 124.001C-20.6 114.401 -10.6 108.801 -10.6 108.801C-10.6 108.801 -0.2 104.4 3.4 103.2C7 102 22.2 96.8 25.4 96.4C28.6 96 38.2 92 45 96C51.8 100 59.8 104.4 59.8 104.4C59.8 104.4 43.4 96 39.8 98.4C36.2 100.8 29 100.4 23 103.6C23 103.6 8.2 108.001 5 110.001C1.8 112.001 -8.6 123.601 -10.2 122.801C-11.8 122.001 -9.8 121.601 -8.6 118.801C-7.4 116.001 -9.4 114.401 -17.4 120.801C-25.4 127.201 -26.6 129.201 -26.6 129.201z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-19.195 123.234C-19.195 123.234 -17.785 110.194 -9.307 111.859C-9.307 111.859 -1.081 107.689 1.641 105.721C1.641 105.721 9.78 104.019 11.09 103.402C29.569 94.702 44.288 99.221 44.835 98.101C45.381 96.982 65.006 104.099 68.615 108.185C69.006 108.628 58.384 102.588 48.686 100.697C40.413 99.083 18.811 100.944 7.905 106.48C4.932 107.989 -4.013 113.773 -6.544 113.662C-9.075 113.55 -19.195 123.234 -19.195 123.234z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-23 148.801C-23 148.801 -38.2 146.401 -21.4 144.801C-21.4 144.801 -3.4 142.801 0.6 137.601C0.6 137.601 14.2 128.401 17 128.001C19.8 127.601 49.8 120.401 50.2 118.001C50.6 115.601 56.2 115.601 57.8 116.401C59.4 117.201 58.6 118.401 55.8 119.201C53 120.001 21.8 136.401 15.4 137.601C9 138.801 -2.6 146.401 -7.4 147.601C-12.2 148.801 -23 148.801 -23 148.801z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-3.48 141.403C-3.48 141.403 -12.062 140.574 -3.461 139.755C-3.461 139.755 5.355 136.331 7.403 133.668C7.403 133.668 14.367 128.957 15.8 128.753C17.234 128.548 31.194 124.861 31.399 123.633C31.604 122.404 65.67 109.823 70.09 113.013C73.001 115.114 63.1 113.437 53.466 117.847C52.111 118.467 18.258 133.054 14.981 133.668C11.704 134.283 5.765 138.174 3.307 138.788C0.85 139.403 -3.48 141.403 -3.48 141.403z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-11.4 143.601C-11.4 143.601 -6.2 143.201 -7.4 144.801C-8.6 146.401 -11 145.601 -11 145.601L-11.4 143.601z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-18.6 145.201C-18.6 145.201 -13.4 144.801 -14.6 146.401C-15.8 148.001 -18.2 147.201 -18.2 147.201L-18.6 145.201z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-29 146.801C-29 146.801 -23.8 146.401 -25 148.001C-26.2 149.601 -28.6 148.801 -28.6 148.801L-29 146.801z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-36.6 147.601C-36.6 147.601 -31.4 147.201 -32.6 148.801C-33.8 150.401 -36.2 149.601 -36.2 149.601L-36.6 147.601z"}
+ ,
+ {"fill": "#000000",
+  "path":"M1.8 108.001C1.8 108.001 6.2 108.001 5 109.601C3.8 111.201 0.6 110.801 0.6 110.801L1.8 108.001z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-8.2 113.601C-8.2 113.601 -1.694 111.46 -4.2 114.801C-5.4 116.401 -7.8 115.601 -7.8 115.601L-8.2 113.601z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-19.4 118.401C-19.4 118.401 -14.2 118.001 -15.4 119.601C-16.6 121.201 -19 120.401 -19 120.401L-19.4 118.401z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-27 124.401C-27 124.401 -21.8 124.001 -23 125.601C-24.2 127.201 -26.6 126.401 -26.6 126.401L-27 124.401z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-33.8 129.201C-33.8 129.201 -28.6 128.801 -29.8 130.401C-31 132.001 -33.4 131.201 -33.4 131.201L-33.8 129.201z"}
+ ,
+ {"fill": "#000000",
+  "path":"M5.282 135.598C5.282 135.598 12.203 135.066 10.606 137.195C9.009 139.325 5.814 138.26 5.814 138.26L5.282 135.598z"}
+ ,
+ {"fill": "#000000",
+  "path":"M15.682 130.798C15.682 130.798 22.603 130.266 21.006 132.395C19.409 134.525 16.214 133.46 16.214 133.46L15.682 130.798z"}
+ ,
+ {"fill": "#000000",
+  "path":"M26.482 126.398C26.482 126.398 33.403 125.866 31.806 127.995C30.209 130.125 27.014 129.06 27.014 129.06L26.482 126.398z"}
+ ,
+ {"fill": "#000000",
+  "path":"M36.882 121.598C36.882 121.598 43.803 121.066 42.206 123.195C40.609 125.325 37.414 124.26 37.414 124.26L36.882 121.598z"}
+ ,
+ {"fill": "#000000",
+  "path":"M9.282 103.598C9.282 103.598 16.203 103.066 14.606 105.195C13.009 107.325 9.014 107.06 9.014 107.06L9.282 103.598z"}
+ ,
+ {"fill": "#000000",
+  "path":"M19.282 100.398C19.282 100.398 26.203 99.866 24.606 101.995C23.009 104.125 18.614 103.86 18.614 103.86L19.282 100.398z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-3.4 140.401C-3.4 140.401 1.8 140.001 0.6 141.601C-0.6 143.201 -3 142.401 -3 142.401L-3.4 140.401z"}
+ ,
+ {"fill": "#992600",
+  "path":"M-76.6 41.2C-76.6 41.2 -81 50 -81.4 53.2C-81.4 53.2 -80.6 44.4 -79.4 42.4C-78.2 40.4 -76.6 41.2 -76.6 41.2z"}
+ ,
+ {"fill": "#992600",
+  "path":"M-95 55.2C-95 55.2 -98.2 69.6 -97.8 72.4C-97.8 72.4 -99 60.8 -98.6 59.6C-98.2 58.4 -95 55.2 -95 55.2z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-74.2 -19.4L-74.4 -16.2L-76.6 -16C-76.6 -16 -62.4 -3.4 -61.8 4.2C-61.8 4.2 -61 -4 -74.2 -19.4z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-70.216 -18.135C-70.647 -18.551 -70.428 -19.296 -70.836 -19.556C-71.645 -20.072 -69.538 -20.129 -69.766 -20.845C-70.149 -22.051 -69.962 -22.072 -70.084 -23.348C-70.141 -23.946 -69.553 -25.486 -69.168 -25.926C-67.722 -27.578 -69.046 -30.51 -67.406 -32.061C-67.102 -32.35 -66.726 -32.902 -66.441 -33.32C-65.782 -34.283 -64.598 -34.771 -63.648 -35.599C-63.33 -35.875 -63.531 -36.702 -62.962 -36.61C-62.248 -36.495 -61.007 -36.625 -61.052 -35.784C-61.165 -33.664 -62.494 -31.944 -63.77 [...]
+ ,
+ {"fill": "#000000",
+  "path":"M-73.8 -16.4C-73.8 -16.4 -73.4 -9.6 -71 -8C-68.6 -6.4 -69.8 -7.2 -73 -8.4C-76.2 -9.6 -75 -10.4 -75 -10.4C-75 -10.4 -77.8 -10 -75.4 -8C-73 -6 -69.4 -3.6 -71 -3.6C-72.6 -3.6 -80.2 -7.6 -80.2 -10.4C-80.2 -13.2 -81.2 -17.3 -81.2 -17.3C-81.2 -17.3 -80.1 -18.1 -75.3 -18C-75.3 -18 -73.9 -17.3 -73.8 -16.4z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-74.6 2.2C-74.6 2.2 -83.12 -0.591 -101.6 2.8C-101.6 2.8 -92.569 0.722 -73.8 3C-63.5 4.25 -74.6 2.2 -74.6 2.2z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-72.502 2.129C-72.502 2.129 -80.748 -1.389 -99.453 0.392C-99.453 0.392 -90.275 -0.897 -71.774 2.995C-61.62 5.131 -72.502 2.129 -72.502 2.129z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-70.714 2.222C-70.714 2.222 -78.676 -1.899 -97.461 -1.514C-97.461 -1.514 -88.213 -2.118 -70.052 3.14C-60.086 6.025 -70.714 2.222 -70.714 2.222z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-69.444 2.445C-69.444 2.445 -76.268 -1.862 -93.142 -2.96C-93.142 -2.96 -84.803 -2.79 -68.922 3.319C-60.206 6.672 -69.444 2.445 -69.444 2.445z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M45.84 12.961C45.84 12.961 44.91 13.605 45.124 12.424C45.339 11.243 73.547 -1.927 77.161 -1.677C77.161 -1.677 46.913 11.529 45.84 12.961z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M42.446 13.6C42.446 13.6 41.57 14.315 41.691 13.121C41.812 11.927 68.899 -3.418 72.521 -3.452C72.521 -3.452 43.404 12.089 42.446 13.6z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M39.16 14.975C39.16 14.975 38.332 15.747 38.374 14.547C38.416 13.348 58.233 -2.149 68.045 -4.023C68.045 -4.023 50.015 4.104 39.16 14.975z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M36.284 16.838C36.284 16.838 35.539 17.532 35.577 16.453C35.615 15.373 53.449 1.426 62.28 -0.26C62.28 -0.26 46.054 7.054 36.284 16.838z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M4.6 164.801C4.6 164.801 -10.6 162.401 6.2 160.801C6.2 160.801 24.2 158.801 28.2 153.601C28.2 153.601 41.8 144.401 44.6 144.001C47.4 143.601 63.8 140.001 64.2 137.601C64.6 135.201 70.6 132.801 72.2 133.601C73.8 134.401 73.8 143.601 71 144.401C68.2 145.201 49.4 152.401 43 153.601C36.6 154.801 25 162.401 20.2 163.601C15.4 164.801 4.6 164.801 4.6 164.801z"}
+ ,
+ {"fill": "#000000",
+  "path":"M77.6 127.401C77.6 127.401 74.6 129.001 73.4 131.601C73.4 131.601 67 142.201 52.8 145.401C52.8 145.401 29.8 154.401 22 156.401C22 156.401 8.6 161.401 1.2 160.601C1.2 160.601 -5.8 160.801 0.4 162.401C0.4 162.401 20.6 160.401 24 158.601C24 158.601 39.6 153.401 42.6 150.801C45.6 148.201 63.8 143.201 66 141.201C68.2 139.201 78 130.801 77.6 127.401z"}
+ ,
+ {"fill": "#000000",
+  "path":"M18.882 158.911C18.882 158.911 24.111 158.685 22.958 160.234C21.805 161.784 19.357 160.91 19.357 160.91L18.882 158.911z"}
+ ,
+ {"fill": "#000000",
+  "path":"M11.68 160.263C11.68 160.263 16.908 160.037 15.756 161.586C14.603 163.136 12.155 162.263 12.155 162.263L11.68 160.263z"}
+ ,
+ {"fill": "#000000",
+  "path":"M1.251 161.511C1.251 161.511 6.48 161.284 5.327 162.834C4.174 164.383 1.726 163.51 1.726 163.51L1.251 161.511z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-6.383 162.055C-6.383 162.055 -1.154 161.829 -2.307 163.378C-3.46 164.928 -5.908 164.054 -5.908 164.054L-6.383 162.055z"}
+ ,
+ {"fill": "#000000",
+  "path":"M35.415 151.513C35.415 151.513 42.375 151.212 40.84 153.274C39.306 155.336 36.047 154.174 36.047 154.174L35.415 151.513z"}
+ ,
+ {"fill": "#000000",
+  "path":"M45.73 147.088C45.73 147.088 51.689 143.787 51.155 148.849C50.885 151.405 46.362 149.749 46.362 149.749L45.73 147.088z"}
+ ,
+ {"fill": "#000000",
+  "path":"M54.862 144.274C54.862 144.274 62.021 140.573 60.287 146.035C59.509 148.485 55.493 146.935 55.493 146.935L54.862 144.274z"}
+ ,
+ {"fill": "#000000",
+  "path":"M64.376 139.449C64.376 139.449 68.735 134.548 69.801 141.21C70.207 143.748 65.008 142.11 65.008 142.11L64.376 139.449z"}
+ ,
+ {"fill": "#000000",
+  "path":"M26.834 155.997C26.834 155.997 32.062 155.77 30.91 157.32C29.757 158.869 27.308 157.996 27.308 157.996L26.834 155.997z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M62.434 34.603C62.434 34.603 61.708 35.268 61.707 34.197C61.707 33.127 79.191 19.863 88.034 18.479C88.034 18.479 71.935 25.208 62.434 34.603z"}
+ ,
+ {"fill": "#000000",
+  "path":"M65.4 98.4C65.4 98.4 87.401 120.801 96.601 124.401C96.601 124.401 105.801 135.601 101.801 161.601C101.801 161.601 98.601 169.201 95.401 148.401C95.401 148.401 98.601 123.201 87.401 139.201C87.401 139.201 79 129.301 85.4 129.601C85.4 129.601 88.601 131.601 89.001 130.001C89.401 128.401 81.4 114.801 64.2 100.4C47 86 65.4 98.4 65.4 98.4z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M7 137.201C7 137.201 6.8 135.401 8.6 136.201C10.4 137.001 104.601 143.201 136.201 167.201C136.201 167.201 91.001 144.001 7 137.201z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M17.4 132.801C17.4 132.801 17.2 131.001 19 131.801C20.8 132.601 157.401 131.601 181.001 164.001C181.001 164.001 159.001 138.801 17.4 132.801z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M29 128.801C29 128.801 28.8 127.001 30.6 127.801C32.4 128.601 205.801 115.601 229.401 148.001C229.401 148.001 219.801 122.401 29 128.801z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M39 124.001C39 124.001 38.8 122.201 40.6 123.001C42.4 123.801 164.601 85.2 188.201 117.601C188.201 117.601 174.801 93 39 124.001z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-19 146.801C-19 146.801 -19.2 145.001 -17.4 145.801C-15.6 146.601 2.2 148.801 4.2 187.601C4.2 187.601 -3 145.601 -19 146.801z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-27.8 148.401C-27.8 148.401 -28 146.601 -26.2 147.401C-24.4 148.201 -10.2 143.601 -13 182.401C-13 182.401 -11.8 147.201 -27.8 148.401z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-35.8 148.801C-35.8 148.801 -36 147.001 -34.2 147.801C-32.4 148.601 -17 149.201 -29.4 171.601C-29.4 171.601 -19.8 147.601 -35.8 148.801z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M11.526 104.465C11.526 104.465 11.082 106.464 12.631 105.247C28.699 92.622 61.141 33.72 116.826 28.086C116.826 28.086 78.518 15.976 11.526 104.465z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M22.726 102.665C22.726 102.665 21.363 101.472 23.231 100.847C25.099 100.222 137.541 27.72 176.826 35.686C176.826 35.686 149.719 28.176 22.726 102.665z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M1.885 108.767C1.885 108.767 1.376 110.366 3.087 109.39C12.062 104.27 15.677 47.059 59.254 45.804C59.254 45.804 26.843 31.09 1.885 108.767z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-18.038 119.793C-18.038 119.793 -19.115 121.079 -17.162 120.825C-6.916 119.493 14.489 78.222 58.928 83.301C58.928 83.301 26.962 68.955 -18.038 119.793z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-6.8 113.667C-6.8 113.667 -7.611 115.136 -5.742 114.511C4.057 111.237 17.141 66.625 61.729 63.078C61.729 63.078 27.603 55.135 -6.8 113.667z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-25.078 124.912C-25.078 124.912 -25.951 125.954 -24.369 125.748C-16.07 124.669 1.268 91.24 37.264 95.354C37.264 95.354 11.371 83.734 -25.078 124.912z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-32.677 130.821C-32.677 130.821 -33.682 131.866 -32.091 131.748C-27.923 131.439 2.715 98.36 21.183 113.862C21.183 113.862 9.168 95.139 -32.677 130.821z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M36.855 98.898C36.855 98.898 35.654 97.543 37.586 97.158C39.518 96.774 160.221 39.061 198.184 51.927C198.184 51.927 172.243 41.053 36.855 98.898z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M3.4 163.201C3.4 163.201 3.2 161.401 5 162.201C6.8 163.001 22.2 163.601 9.8 186.001C9.8 186.001 19.4 162.001 3.4 163.201z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M13.8 161.601C13.8 161.601 13.6 159.801 15.4 160.601C17.2 161.401 35 163.601 37 202.401C37 202.401 29.8 160.401 13.8 161.601z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M20.6 160.001C20.6 160.001 20.4 158.201 22.2 159.001C24 159.801 48.6 163.201 72.2 195.601C72.2 195.601 36.6 158.801 20.6 160.001z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M28.225 157.972C28.225 157.972 27.788 156.214 29.678 156.768C31.568 157.322 52.002 155.423 90.099 189.599C90.099 189.599 43.924 154.656 28.225 157.972z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M38.625 153.572C38.625 153.572 38.188 151.814 40.078 152.368C41.968 152.922 76.802 157.423 128.499 192.399C128.499 192.399 54.324 150.256 38.625 153.572z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-1.8 142.001C-1.8 142.001 -2 140.201 -0.2 141.001C1.6 141.801 55 144.401 85.4 171.201C85.4 171.201 50.499 146.426 -1.8 142.001z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M-11.8 146.001C-11.8 146.001 -12 144.201 -10.2 145.001C-8.4 145.801 16.2 149.201 39.8 181.601C39.8 181.601 4.2 144.801 -11.8 146.001z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M49.503 148.962C49.503 148.962 48.938 147.241 50.864 147.655C52.79 148.068 87.86 150.004 141.981 181.098C141.981 181.098 64.317 146.704 49.503 148.962z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M57.903 146.562C57.903 146.562 57.338 144.841 59.264 145.255C61.19 145.668 96.26 147.604 150.381 178.698C150.381 178.698 73.317 143.904 57.903 146.562z"}
+ ,
+ {"fill": "#ffffff", "stroke":"#000000", "width":0.1,
+  "path":"M67.503 141.562C67.503 141.562 66.938 139.841 68.864 140.255C70.79 140.668 113.86 145.004 203.582 179.298C203.582 179.298 82.917 138.904 67.503 141.562z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-43.8 148.401C-43.8 148.401 -38.6 148.001 -39.8 149.601C-41 151.201 -43.4 150.401 -43.4 150.401L-43.8 148.401z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-13 162.401C-13 162.401 -7.8 162.001 -9 163.601C-10.2 165.201 -12.6 164.401 -12.6 164.401L-13 162.401z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-21.8 162.001C-21.8 162.001 -16.6 161.601 -17.8 163.201C-19 164.801 -21.4 164.001 -21.4 164.001L-21.8 162.001z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-117.169 150.182C-117.169 150.182 -112.124 151.505 -113.782 152.624C-115.439 153.744 -117.446 152.202 -117.446 152.202L-117.169 150.182z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-115.169 140.582C-115.169 140.582 -110.124 141.905 -111.782 143.024C-113.439 144.144 -115.446 142.602 -115.446 142.602L-115.169 140.582z"}
+ ,
+ {"fill": "#000000",
+  "path":"M-122.369 136.182C-122.369 136.182 -117.324 137.505 -118.982 138.624C-120.639 139.744 -122.646 138.202 -122.646 138.202L-122.369 136.182z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-42.6 211.201C-42.6 211.201 -44.2 211.201 -48.2 213.201C-50.2 213.201 -61.4 216.801 -67 226.801C-67 226.801 -54.6 217.201 -42.6 211.201z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M45.116 303.847C45.257 304.105 45.312 304.525 45.604 304.542C46.262 304.582 47.495 304.883 47.37 304.247C46.522 299.941 45.648 295.004 41.515 293.197C40.876 292.918 39.434 293.331 39.36 294.215C39.233 295.739 39.116 297.088 39.425 298.554C39.725 299.975 41.883 299.985 42.8 298.601C43.736 300.273 44.168 302.116 45.116 303.847z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M34.038 308.581C34.786 309.994 34.659 311.853 36.074 312.416C36.814 312.71 38.664 311.735 38.246 310.661C37.444 308.6 37.056 306.361 35.667 304.55C35.467 304.288 35.707 303.755 35.547 303.427C34.953 302.207 33.808 301.472 32.4 301.801C31.285 304.004 32.433 306.133 33.955 307.842C34.091 307.994 33.925 308.37 34.038 308.581z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-5.564 303.391C-5.672 303.014 -5.71 302.551 -5.545 302.23C-5.014 301.197 -4.221 300.075 -4.558 299.053C-4.906 297.997 -6.022 298.179 -6.672 298.748C-7.807 299.742 -7.856 301.568 -8.547 302.927C-8.743 303.313 -8.692 303.886 -9.133 304.277C-9.607 304.698 -10.047 306.222 -9.951 306.793C-9.898 307.106 -10.081 317.014 -9.859 316.751C-9.24 316.018 -6.19 306.284 -6.121 305.392C-6.064 304.661 -5.332 304.196 -5.564 303.391z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-31.202 296.599C-28.568 294.1 -25.778 291.139 -26.22 287.427C-26.336 286.451 -28.111 286.978 -28.298 287.824C-29.1 291.449 -31.139 294.11 -33.707 296.502C-35.903 298.549 -37.765 304.893 -38 305.401C-34.303 300.145 -32.046 297.399 -31.202 296.599z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-44.776 290.635C-44.253 290.265 -44.555 289.774 -44.338 289.442C-43.385 287.984 -42.084 286.738 -42.066 285C-42.063 284.723 -42.441 284.414 -42.776 284.638C-43.053 284.822 -43.395 284.952 -43.503 285.082C-45.533 287.531 -46.933 290.202 -48.376 293.014C-48.559 293.371 -49.703 297.862 -49.39 297.973C-49.151 298.058 -47.431 293.877 -47.221 293.763C-45.958 293.077 -45.946 291.462 -44.776 290.635z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-28.043 310.179C-27.599 309.31 -26.023 308.108 -26.136 307.219C-26.254 306.291 -25.786 304.848 -26.698 305.536C-27.955 306.484 -31.404 307.833 -31.674 313.641C-31.7 314.212 -28.726 311.519 -28.043 310.179z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-13.6 293.001C-13.2 292.333 -12.492 292.806 -12.033 292.543C-11.385 292.171 -10.774 291.613 -10.482 290.964C-9.512 288.815 -7.743 286.995 -7.6 284.601C-9.091 283.196 -9.77 285.236 -10.4 286.201C-11.723 284.554 -12.722 286.428 -14.022 286.947C-14.092 286.975 -14.305 286.628 -14.38 286.655C-15.557 287.095 -16.237 288.176 -17.235 288.957C-17.406 289.091 -17.811 288.911 -17.958 289.047C-18.61 289.65 -19.583 289.975 -19.863 290.657C-20.973 293.364 -24.113 295.459 -26 303.001C-25.61 [...]
+ ,
+ {"fill": "#cccccc",
+  "path":"M46.2 347.401C46.2 347.401 53.6 327.001 49.2 315.801C49.2 315.801 60.6 337.401 56 348.601C56 348.601 55.6 338.201 51.6 333.201C51.6 333.201 47.6 346.001 46.2 347.401z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M31.4 344.801C31.4 344.801 36.8 336.001 28.8 317.601C28.8 317.601 28 338.001 21.2 349.001C21.2 349.001 35.4 328.801 31.4 344.801z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M21.4 342.801C21.4 342.801 21.2 322.801 21.6 319.801C21.6 319.801 17.8 336.401 7.6 346.001C7.6 346.001 22 334.001 21.4 342.801z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M11.8 310.801C11.8 310.801 17.8 324.401 7.8 342.801C7.8 342.801 14.2 330.601 9.4 323.601C9.4 323.601 12 320.201 11.8 310.801z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-7.4 342.401C-7.4 342.401 -8.4 326.801 -6.6 324.601C-6.6 324.601 -6.4 318.201 -6.8 317.201C-6.8 317.201 -2.8 311.001 -2.6 318.401C-2.6 318.401 -1.2 326.201 1.6 330.801C1.6 330.801 5.2 336.201 5 342.601C5 342.601 -5 312.401 -7.4 342.401z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-11 314.801C-11 314.801 -17.6 325.601 -19.4 344.601C-19.4 344.601 -20.8 338.401 -17 324.001C-17 324.001 -12.8 308.601 -11 314.801z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-32.8 334.601C-32.8 334.601 -27.8 329.201 -26.4 324.201C-26.4 324.201 -22.8 308.401 -29.2 317.001C-29.2 317.001 -29 325.001 -37.2 332.401C-37.2 332.401 -32.4 330.001 -32.8 334.601z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-38.6 329.601C-38.6 329.601 -35.2 312.201 -34.4 311.401C-34.4 311.401 -32.6 308.001 -35.4 311.201C-35.4 311.201 -44.2 330.401 -48.2 337.001C-48.2 337.001 -40.2 327.801 -38.6 329.601z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-44.4 313.001C-44.4 313.001 -32.8 290.601 -54.6 316.401C-54.6 316.401 -43.6 306.601 -44.4 313.001z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M-59.8 298.401C-59.8 298.401 -55 279.601 -52.4 279.801C-52.4 279.801 -44.2 270.801 -50.8 281.401C-50.8 281.401 -56.8 291.001 -56.2 300.801C-56.2 300.801 -56.8 291.201 -59.8 298.401z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M270.5 287C270.5 287 258.5 277 256 273.5C256 273.5 269.5 292 269.5 299C269.5 299 272 291.5 270.5 287z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M276 265C276 265 255 250 251.5 242.5C251.5 242.5 278 272 278 276.5C278 276.5 278.5 267.5 276 265z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M293 111C293 111 281 103 279.5 105C279.5 105 290 111.5 292.5 120C292.5 120 291 111 293 111z"}
+ ,
+ {"fill": "#cccccc",
+  "path":"M301.5 191.5L284 179.5C284 179.5 303 196.5 303.5 200.5L301.5 191.5z"}
+ ,
+ {"stroke":"#000000",
+  "path":"M-89.25 169L-67.25 173.75"}
+ ,
+ {"stroke":"#000000",
+  "path":"M-39 331C-39 331 -39.5 327.5 -48.5 338"}
+ ,
+ {"stroke":"#000000",
+  "path":"M-33.5 336C-33.5 336 -31.5 329.5 -38 334"}
+ ,
+ {"stroke":"#000000",
+  "path":"M20.5 344.5C20.5 344.5 22 333.5 10.5 346.5"}
+];
\ No newline at end of file
diff --git a/examples/quick/canvas/tiger/tiger.qml b/examples/quick/canvas/tiger/tiger.qml
new file mode 100644
index 0000000..8b629ee
--- /dev/null
+++ b/examples/quick/canvas/tiger/tiger.qml
@@ -0,0 +1,128 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "../contents"
+import "tiger.js" as Tiger
+Item {
+  id:container
+  width:320
+  height:480
+
+  Column {
+    spacing:5
+    anchors.fill:parent
+    Text { font.pointSize:15; text:"Tiger with SVG path"; anchors.horizontalCenter:parent.horizontalCenter}
+
+    Canvas {
+        id:canvas
+        width:320
+        height:280
+        antialiasing: true
+        property string strokeStyle:"steelblue"
+        property string fillStyle:"yellow"
+        property bool fill:true
+        property bool stroke:true
+        property real alpha:alphaCtrl.value
+        property real scaleX : scaleXCtrl.value
+        property real scaleY : scaleYCtrl.value
+        property real rotate : rotateCtrl.value
+        property int frame:0
+
+        onFillChanged: requestPaint();
+        onStrokeChanged: requestPaint();
+        onAlphaChanged: requestPaint();
+        onScaleXChanged: requestPaint();
+        onScaleYChanged: requestPaint();
+        onRotateChanged: requestPaint();
+
+        onPainted : {
+            canvas.frame++;
+            if (canvas.frame < Tiger.tiger.length)
+                requestPaint();
+        }
+        onPaint: {
+            var ctx = canvas.getContext('2d');
+            ctx.save();
+            ctx.clearRect(0, 0, canvas.width, canvas.height);
+            ctx.globalAlpha = canvas.alpha;
+            ctx.scale(canvas.scaleX, canvas.scaleY);
+            ctx.rotate(canvas.rotate);
+            ctx.globalCompositeOperation = "source-over";
+            ctx.translate(canvas.width/2, canvas.height/2);
+            ctx.strokeStyle = Qt.rgba(.3, .3, .3,1);
+            ctx.lineWidth = 1;
+
+            //! [0]
+            for (var i = 0; i < canvas.frame && i < Tiger.tiger.length; i++) {
+                if (Tiger.tiger[i].width != undefined)
+                    ctx.lineWidth = Tiger.tiger[i].width;
+
+                if (Tiger.tiger[i].path != undefined)
+                    ctx.path = Tiger.tiger[i].path;
+
+                if (Tiger.tiger[i].fill != undefined) {
+                    ctx.fillStyle = Tiger.tiger[i].fill;
+                    ctx.fill();
+                }
+
+                if (Tiger.tiger[i].stroke != undefined) {
+                    ctx.strokeStyle = Tiger.tiger[i].stroke;
+                    ctx.stroke();
+                }
+            }
+            //! [0]
+            ctx.restore();
+        }
+    }
+    Rectangle {
+        id:controls
+        width:320
+        height:150
+        Column {
+          spacing:3
+          Slider {id:scaleXCtrl; width:300; height:20; min:0.1; max:10; init:0.5; name:"ScaleX"}
+          Slider {id:scaleYCtrl; width:300; height:20; min:0.1; max:10; init:0.5; name:"ScaleY"}
+          Slider {id:rotateCtrl; width:300; height:20; min:0; max:Math.PI*2; init:0; name:"Rotate"}
+          Slider {id:alphaCtrl; width:300; height:20; min:0; max:1; init:1; name:"Alpha"}
+        }
+    }
+  }
+}
diff --git a/examples/quick/models/abstractitemmodel/abstractitemmodel.py b/examples/quick/models/abstractitemmodel/abstractitemmodel.py
new file mode 100644
index 0000000..f4cf930
--- /dev/null
+++ b/examples/quick/models/abstractitemmodel/abstractitemmodel.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QAbstractListModel, QModelIndex, Qt, QUrl, QVariant
+from PyQt5.QtGui import QGuiApplication
+from PyQt5.QtQuick import QQuickView
+
+import abstractitemmodel_rc
+
+
+class Animal(object):
+
+    def __init__(self, type, size):
+        self._type = type
+        self._size = size
+
+    def type(self):
+        return self._type
+
+    def size(self):
+        return self._size
+
+
+class AnimalModel(QAbstractListModel):
+
+    TypeRole = Qt.UserRole + 1
+    SizeRole = Qt.UserRole + 2
+
+    _roles = {TypeRole: "type", SizeRole: "size"}
+
+    def __init__(self, parent=None):
+        super(AnimalModel, self).__init__(parent)
+
+        self._animals = []
+
+    def addAnimal(self, animal):
+        self.beginInsertRows(QModelIndex(), self.rowCount(), self.rowCount())
+        self._animals.append(animal)
+        self.endInsertRows()
+
+    def rowCount(self, parent=QModelIndex()):
+        return len(self._animals)
+
+    def data(self, index, role=Qt.DisplayRole):
+        try:
+            animal = self._animals[index.row()]
+        except IndexError:
+            return QVariant()
+
+        if role == self.TypeRole:
+            return animal.type()
+
+        if role == self.SizeRole:
+            return animal.size()
+
+        return QVariant()
+
+    def roleNames(self):
+        return self._roles
+
+
+if __name__ == '__main__':
+    import sys
+
+    app = QGuiApplication(sys.argv)
+
+    model = AnimalModel()
+    model.addAnimal(Animal("Wolf", "Medium"))
+    model.addAnimal(Animal("Polar bear", "Large"))
+    model.addAnimal(Animal("Quoll", "Small"))
+
+    view = QQuickView()
+    view.setResizeMode(QQuickView.SizeRootObjectToView)
+    ctxt = view.rootContext()
+    ctxt.setContextProperty('myModel', model)
+
+    view.setSource(QUrl('qrc:view.qml'))
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/quick/models/abstractitemmodel/abstractitemmodel.qrc b/examples/quick/models/abstractitemmodel/abstractitemmodel.qrc
new file mode 100644
index 0000000..4ae861c
--- /dev/null
+++ b/examples/quick/models/abstractitemmodel/abstractitemmodel.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>view.qml</file>
+</qresource>
+</RCC>
+
diff --git a/examples/quick/models/abstractitemmodel/abstractitemmodel_rc.py b/examples/quick/models/abstractitemmodel/abstractitemmodel_rc.py
new file mode 100644
index 0000000..f7a0a64
--- /dev/null
+++ b/examples/quick/models/abstractitemmodel/abstractitemmodel_rc.py
@@ -0,0 +1,170 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Tue Jul 23 11:31:33 2013
+#      by: The Resource Compiler for PyQt (Qt v5.1.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x08\x67\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x69\x6d\x70\x6f\x72\x74\x20\
+\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x2f\x2f\x21\
+\x5b\x30\x5d\x0a\x4c\x69\x73\x74\x56\x69\x65\x77\x20\x7b\x0a\x20\
+\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x32\x30\x30\x3b\x20\x68\
+\x65\x69\x67\x68\x74\x3a\x20\x32\x35\x30\x0a\x0a\x20\x20\x20\x20\
+\x6d\x6f\x64\x65\x6c\x3a\x20\x6d\x79\x4d\x6f\x64\x65\x6c\x0a\x20\
+\x20\x20\x20\x64\x65\x6c\x65\x67\x61\x74\x65\x3a\x20\x54\x65\x78\
+\x74\x20\x7b\x20\x74\x65\x78\x74\x3a\x20\x22\x41\x6e\x69\x6d\x61\
+\x6c\x3a\x20\x22\x20\x2b\x20\x74\x79\x70\x65\x20\x2b\x20\x22\x2c\
+\x20\x22\x20\x2b\x20\x73\x69\x7a\x65\x20\x7d\x0a\x7d\x0a\x2f\x2f\
+\x21\x5b\x30\x5d\x0a\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x08\
+\x0f\xca\x5b\xbc\
+\x00\x76\
+\x00\x69\x00\x65\x00\x77\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/quick/models/abstractitemmodel/view.qml b/examples/quick/models/abstractitemmodel/view.qml
new file mode 100644
index 0000000..381df0b
--- /dev/null
+++ b/examples/quick/models/abstractitemmodel/view.qml
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.0
+
+//![0]
+ListView {
+    width: 200; height: 250
+
+    model: myModel
+    delegate: Text { text: "Animal: " + type + ", " + size }
+}
+//![0]
+
diff --git a/examples/quick/models/objectlistmodel/objectlistmodel.py b/examples/quick/models/objectlistmodel/objectlistmodel.py
new file mode 100644
index 0000000..198f3cf
--- /dev/null
+++ b/examples/quick/models/objectlistmodel/objectlistmodel.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject, QUrl
+from PyQt5.QtGui import QGuiApplication
+from PyQt5.QtQuick import QQuickView
+
+import objectlistmodel_rc
+
+
+class DataObject(QObject):
+
+    nameChanged = pyqtSignal()
+
+    @pyqtProperty(str, notify=nameChanged)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        if self._name != name:
+            self._name = name
+            self.nameChanged.emit()
+
+    colorChanged = pyqtSignal()
+
+    @pyqtProperty(str, notify=colorChanged)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        if self._color != color:
+            self._color = color
+            self.colorChanged.emit()
+
+    def __init__(self, name='', color='', parent=None):
+        super(DataObject, self).__init__(parent)
+
+        self._name = name
+        self._color = color
+
+
+if __name__ == '__main__':
+    import sys
+
+    app = QGuiApplication(sys.argv)
+
+    dataList = [DataObject("Item 1", 'red'),
+                DataObject("Item 2", 'green'),
+                DataObject("Item 3", 'blue'),
+                DataObject("Item 4", 'yellow')]
+
+    view = QQuickView()
+    view.setResizeMode(QQuickView.SizeRootObjectToView)
+    ctxt = view.rootContext()
+    ctxt.setContextProperty('myModel', dataList)
+
+    view.setSource(QUrl('qrc:view.qml'))
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/quick/models/objectlistmodel/objectlistmodel.qrc b/examples/quick/models/objectlistmodel/objectlistmodel.qrc
new file mode 100644
index 0000000..17e9301
--- /dev/null
+++ b/examples/quick/models/objectlistmodel/objectlistmodel.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>view.qml</file>
+</qresource>
+</RCC>
diff --git a/examples/quick/models/objectlistmodel/objectlistmodel_rc.py b/examples/quick/models/objectlistmodel/objectlistmodel_rc.py
new file mode 100644
index 0000000..6cef7f6
--- /dev/null
+++ b/examples/quick/models/objectlistmodel/objectlistmodel_rc.py
@@ -0,0 +1,175 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Mon Jul 22 22:27:26 2013
+#      by: The Resource Compiler for PyQt (Qt v5.1.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x08\xb1\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x2f\x2f\
+\x21\x5b\x30\x5d\x0a\x4c\x69\x73\x74\x56\x69\x65\x77\x20\x7b\x0a\
+\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x3b\x20\
+\x68\x65\x69\x67\x68\x74\x3a\x20\x31\x30\x30\x0a\x0a\x20\x20\x20\
+\x20\x6d\x6f\x64\x65\x6c\x3a\x20\x6d\x79\x4d\x6f\x64\x65\x6c\x0a\
+\x20\x20\x20\x20\x64\x65\x6c\x65\x67\x61\x74\x65\x3a\x20\x52\x65\
+\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x32\x35\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x6d\
+\x6f\x64\x65\x6c\x2e\x6d\x6f\x64\x65\x6c\x44\x61\x74\x61\x2e\x63\
+\x6f\x6c\x6f\x72\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x54\x65\x78\
+\x74\x20\x7b\x20\x74\x65\x78\x74\x3a\x20\x6e\x61\x6d\x65\x20\x7d\
+\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\x2f\x2f\x21\x5b\x30\x5d\x0a\
+\
+"
+
+qt_resource_name = b"\
+\x00\x08\
+\x0f\xca\x5b\xbc\
+\x00\x76\
+\x00\x69\x00\x65\x00\x77\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/quick/models/objectlistmodel/view.qml b/examples/quick/models/objectlistmodel/view.qml
new file mode 100644
index 0000000..f735264
--- /dev/null
+++ b/examples/quick/models/objectlistmodel/view.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+//![0]
+ListView {
+    width: 100; height: 100
+
+    model: myModel
+    delegate: Rectangle {
+        height: 25
+        width: 100
+        color: model.modelData.color
+        Text { text: name }
+    }
+}
+//![0]
diff --git a/examples/quick/models/stringlistmodel/stringlistmodel.py b/examples/quick/models/stringlistmodel/stringlistmodel.py
new file mode 100644
index 0000000..5da800d
--- /dev/null
+++ b/examples/quick/models/stringlistmodel/stringlistmodel.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import QUrl
+from PyQt5.QtGui import QGuiApplication
+from PyQt5.QtQuick import QQuickView
+
+import stringlistmodel_rc
+
+
+app = QGuiApplication(sys.argv)
+
+dataList = ["Item 1", "Item 2", "Item 3", "Item 4"]
+
+view = QQuickView()
+ctxt = view.rootContext()
+ctxt.setContextProperty('myModel', dataList)
+
+view.setSource(QUrl('qrc:view.qml'))
+view.show()
+
+sys.exit(app.exec_())
diff --git a/examples/quick/models/stringlistmodel/stringlistmodel.qrc b/examples/quick/models/stringlistmodel/stringlistmodel.qrc
new file mode 100644
index 0000000..17e9301
--- /dev/null
+++ b/examples/quick/models/stringlistmodel/stringlistmodel.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>view.qml</file>
+</qresource>
+</RCC>
diff --git a/examples/quick/models/stringlistmodel/stringlistmodel_rc.py b/examples/quick/models/stringlistmodel/stringlistmodel_rc.py
new file mode 100644
index 0000000..cfec677
--- /dev/null
+++ b/examples/quick/models/stringlistmodel/stringlistmodel_rc.py
@@ -0,0 +1,173 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Mon Jul 22 22:20:10 2013
+#      by: The Resource Compiler for PyQt (Qt v5.1.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x08\x91\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x2f\x2f\x21\
+\x5b\x30\x5d\x0a\x0a\x4c\x69\x73\x74\x56\x69\x65\x77\x20\x7b\x0a\
+\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x3b\x20\
+\x68\x65\x69\x67\x68\x74\x3a\x20\x31\x30\x30\x0a\x0a\x20\x20\x20\
+\x20\x6d\x6f\x64\x65\x6c\x3a\x20\x6d\x79\x4d\x6f\x64\x65\x6c\x0a\
+\x20\x20\x20\x20\x64\x65\x6c\x65\x67\x61\x74\x65\x3a\x20\x52\x65\
+\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x32\x35\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x20\x74\
+\x65\x78\x74\x3a\x20\x6d\x6f\x64\x65\x6c\x44\x61\x74\x61\x20\x7d\
+\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\x2f\x2f\x21\x5b\x30\x5d\x0a\
+\
+"
+
+qt_resource_name = b"\
+\x00\x08\
+\x0f\xca\x5b\xbc\
+\x00\x76\
+\x00\x69\x00\x65\x00\x77\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/quick/models/stringlistmodel/view.qml b/examples/quick/models/stringlistmodel/view.qml
new file mode 100644
index 0000000..0e28c41
--- /dev/null
+++ b/examples/quick/models/stringlistmodel/view.qml
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+//![0]
+
+ListView {
+    width: 100; height: 100
+
+    model: myModel
+    delegate: Rectangle {
+        height: 25
+        width: 100
+        Text { text: modelData }
+    }
+}
+//![0]
diff --git a/examples/quick/scenegraph/customgeometry/customgeometry.py b/examples/quick/scenegraph/customgeometry/customgeometry.py
new file mode 100644
index 0000000..6791e00
--- /dev/null
+++ b/examples/quick/scenegraph/customgeometry/customgeometry.py
@@ -0,0 +1,188 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty, pyqtSignal, QPointF, QUrl
+from PyQt5.QtGui import QColor, QGuiApplication
+from PyQt5.QtQml import qmlRegisterType
+from PyQt5.QtQuick import (QQuickItem, QQuickView, QSGFlatColorMaterial,
+        QSGGeometry, QSGGeometryNode, QSGNode)
+
+import customgeometry_rc
+
+
+class BezierCurve(QQuickItem):
+
+    p1Changed = pyqtSignal(QPointF)
+
+    @pyqtProperty(QPointF, notify=p1Changed)
+    def p1(self):
+        return self._p1
+
+    @p1.setter
+    def p1(self, p):
+        if self._p1 != p:
+            self._p1 = QPointF(p)
+            self.p1Changed.emit(p)
+            self.update()
+
+    p2Changed = pyqtSignal(QPointF)
+
+    @pyqtProperty(QPointF, notify=p2Changed)
+    def p2(self):
+        return self._p2
+
+    @p2.setter
+    def p2(self, p):
+        if self._p2 != p:
+            self._p2 = QPointF(p)
+            self.p2Changed.emit(p)
+            self.update()
+
+    p3Changed = pyqtSignal(QPointF)
+
+    @pyqtProperty(QPointF, notify=p3Changed)
+    def p3(self):
+        return self._p3
+
+    @p3.setter
+    def p3(self, p):
+        if self._p3 != p:
+            self._p3 = QPointF(p)
+            self.p3Changed.emit(p)
+            self.update()
+
+    p4Changed = pyqtSignal(QPointF)
+
+    @pyqtProperty(QPointF, notify=p4Changed)
+    def p4(self):
+        return self._p4
+
+    @p4.setter
+    def p4(self, p):
+        if self._p4 != p:
+            self._p4 = QPointF(p)
+            self.p4Changed.emit(p)
+            self.update()
+
+    segmentCountChanged = pyqtSignal(int)
+
+    @pyqtProperty(int, notify=segmentCountChanged)
+    def segmentCount(self):
+        return self._segmentCount
+
+    @segmentCount.setter
+    def segmentCount(self, count):
+        if self._segmentCount != count:
+            self._segmentCount = count
+            self.segmentCountChanged.emit(count)
+            self.update()
+
+    def __init__(self, parent=None):
+        super(BezierCurve, self).__init__(parent)
+
+        self._p1 = QPointF(0, 0)
+        self._p2 = QPointF(1, 0)
+        self._p3 = QPointF(0, 1)
+        self._p4 = QPointF(1, 1)
+
+        self._segmentCount = 32
+
+        self._root_node = None
+
+        self.setFlag(QQuickItem.ItemHasContents, True)
+
+    def updatePaintNode(self, oldNode, nodeData):
+        if self._root_node is None:
+            self._root_node = QSGGeometryNode()
+
+            geometry = QSGGeometry(QSGGeometry.defaultAttributes_Point2D(),
+                    self._segmentCount)
+            geometry.setLineWidth(2)
+            geometry.setDrawingMode(QSGGeometry.GL_LINE_STRIP)
+            self._root_node.setGeometry(geometry)
+            self._root_node.setFlag(QSGNode.OwnsGeometry)
+
+            material = QSGFlatColorMaterial()
+            material.setColor(QColor(255, 0, 0))
+            self._root_node.setMaterial(material)
+            self._root_node.setFlag(QSGNode.OwnsMaterial)
+        else:
+            geometry = self._root_node.geometry()
+            geometry.allocate(self._segmentCount)
+
+        w = self.width()
+        h = self.height()
+        vertices = geometry.vertexDataAsPoint2D()
+
+        for i in range(self._segmentCount):
+            t = i / float(self._segmentCount - 1)
+            invt = 1 - t
+
+            pos = invt * invt * invt * self._p1 \
+                    + 3 * invt * invt * t * self._p2 \
+                    + 3 * invt * t * t * self._p3 \
+                    + t * t * t * self._p4
+
+            vertices[i].set(pos.x() * w, pos.y() * h)
+
+        self._root_node.markDirty(QSGNode.DirtyGeometry)
+
+        return self._root_node
+
+
+if __name__ == '__main__':
+    import sys
+
+    app = QGuiApplication(sys.argv)
+
+    qmlRegisterType(BezierCurve, "CustomGeometry", 1, 0, "BezierCurve")
+
+    view = QQuickView()
+    format = view.format()
+    format.setSamples(16)
+    view.setFormat(format)
+
+    view.setSource(QUrl('qrc:///scenegraph/customgeometry/main.qml'))
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/quick/scenegraph/customgeometry/customgeometry.qrc b/examples/quick/scenegraph/customgeometry/customgeometry.qrc
new file mode 100644
index 0000000..39080c5
--- /dev/null
+++ b/examples/quick/scenegraph/customgeometry/customgeometry.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/scenegraph/customgeometry">
+        <file>main.qml</file>
+    </qresource>
+</RCC>
diff --git a/examples/quick/scenegraph/customgeometry/customgeometry_rc.py b/examples/quick/scenegraph/customgeometry/customgeometry_rc.py
new file mode 100644
index 0000000..8d37430
--- /dev/null
+++ b/examples/quick/scenegraph/customgeometry/customgeometry_rc.py
@@ -0,0 +1,216 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Tue Jul 23 17:08:56 2013
+#      by: The Resource Compiler for PyQt (Qt v5.1.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x0a\xac\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x65\x6d\x6f\x6e\x73\x74\x72\
+\x61\x74\x69\x6f\x6e\x20\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\
+\x6e\x73\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\
+\x6c\x6b\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\
+\x42\x45\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x4c\x47\
+\x50\x4c\x24\x0a\x2a\x2a\x20\x43\x6f\x6d\x6d\x65\x72\x63\x69\x61\
+\x6c\x20\x4c\x69\x63\x65\x6e\x73\x65\x20\x55\x73\x61\x67\x65\x0a\
+\x2a\x2a\x20\x4c\x69\x63\x65\x6e\x73\x65\x65\x73\x20\x68\x6f\x6c\
+\x64\x69\x6e\x67\x20\x76\x61\x6c\x69\x64\x20\x63\x6f\x6d\x6d\x65\
+\x72\x63\x69\x61\x6c\x20\x51\x74\x20\x6c\x69\x63\x65\x6e\x73\x65\
+\x73\x20\x6d\x61\x79\x20\x75\x73\x65\x20\x74\x68\x69\x73\x20\x66\
+\x69\x6c\x65\x20\x69\x6e\x0a\x2a\x2a\x20\x61\x63\x63\x6f\x72\x64\
+\x61\x6e\x63\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x63\x6f\
+\x6d\x6d\x65\x72\x63\x69\x61\x6c\x20\x6c\x69\x63\x65\x6e\x73\x65\
+\x20\x61\x67\x72\x65\x65\x6d\x65\x6e\x74\x20\x70\x72\x6f\x76\x69\
+\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x0a\x2a\x2a\x20\
+\x53\x6f\x66\x74\x77\x61\x72\x65\x20\x6f\x72\x2c\x20\x61\x6c\x74\
+\x65\x72\x6e\x61\x74\x69\x76\x65\x6c\x79\x2c\x20\x69\x6e\x20\x61\
+\x63\x63\x6f\x72\x64\x61\x6e\x63\x65\x20\x77\x69\x74\x68\x20\x74\
+\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x63\x6f\x6e\x74\x61\x69\x6e\
+\x65\x64\x20\x69\x6e\x0a\x2a\x2a\x20\x61\x20\x77\x72\x69\x74\x74\
+\x65\x6e\x20\x61\x67\x72\x65\x65\x6d\x65\x6e\x74\x20\x62\x65\x74\
+\x77\x65\x65\x6e\x20\x79\x6f\x75\x20\x61\x6e\x64\x20\x44\x69\x67\
+\x69\x61\x2e\x20\x20\x46\x6f\x72\x20\x6c\x69\x63\x65\x6e\x73\x69\
+\x6e\x67\x20\x74\x65\x72\x6d\x73\x20\x61\x6e\x64\x0a\x2a\x2a\x20\
+\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x73\x65\x65\x20\x68\
+\x74\x74\x70\x3a\x2f\x2f\x71\x74\x2e\x64\x69\x67\x69\x61\x2e\x63\
+\x6f\x6d\x2f\x6c\x69\x63\x65\x6e\x73\x69\x6e\x67\x2e\x20\x20\x46\
+\x6f\x72\x20\x66\x75\x72\x74\x68\x65\x72\x20\x69\x6e\x66\x6f\x72\
+\x6d\x61\x74\x69\x6f\x6e\x0a\x2a\x2a\x20\x75\x73\x65\x20\x74\x68\
+\x65\x20\x63\x6f\x6e\x74\x61\x63\x74\x20\x66\x6f\x72\x6d\x20\x61\
+\x74\x20\x68\x74\x74\x70\x3a\x2f\x2f\x71\x74\x2e\x64\x69\x67\x69\
+\x61\x2e\x63\x6f\x6d\x2f\x63\x6f\x6e\x74\x61\x63\x74\x2d\x75\x73\
+\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x47\x4e\x55\x20\x4c\x65\x73\x73\
+\x65\x72\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\x75\x62\x6c\x69\
+\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\x20\x55\x73\x61\x67\x65\x0a\
+\x2a\x2a\x20\x41\x6c\x74\x65\x72\x6e\x61\x74\x69\x76\x65\x6c\x79\
+\x2c\x20\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x6d\x61\x79\x20\
+\x62\x65\x20\x75\x73\x65\x64\x20\x75\x6e\x64\x65\x72\x20\x74\x68\
+\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\x20\x47\
+\x4e\x55\x20\x4c\x65\x73\x73\x65\x72\x0a\x2a\x2a\x20\x47\x65\x6e\
+\x65\x72\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\
+\x6e\x73\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x32\x2e\x31\x20\
+\x61\x73\x20\x70\x75\x62\x6c\x69\x73\x68\x65\x64\x20\x62\x79\x20\
+\x74\x68\x65\x20\x46\x72\x65\x65\x20\x53\x6f\x66\x74\x77\x61\x72\
+\x65\x0a\x2a\x2a\x20\x46\x6f\x75\x6e\x64\x61\x74\x69\x6f\x6e\x20\
+\x61\x6e\x64\x20\x61\x70\x70\x65\x61\x72\x69\x6e\x67\x20\x69\x6e\
+\x20\x74\x68\x65\x20\x66\x69\x6c\x65\x20\x4c\x49\x43\x45\x4e\x53\
+\x45\x2e\x4c\x47\x50\x4c\x20\x69\x6e\x63\x6c\x75\x64\x65\x64\x20\
+\x69\x6e\x20\x74\x68\x65\x0a\x2a\x2a\x20\x70\x61\x63\x6b\x61\x67\
+\x69\x6e\x67\x20\x6f\x66\x20\x74\x68\x69\x73\x20\x66\x69\x6c\x65\
+\x2e\x20\x20\x50\x6c\x65\x61\x73\x65\x20\x72\x65\x76\x69\x65\x77\
+\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x69\
+\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x20\x74\x6f\x0a\x2a\x2a\
+\x20\x65\x6e\x73\x75\x72\x65\x20\x74\x68\x65\x20\x47\x4e\x55\x20\
+\x4c\x65\x73\x73\x65\x72\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\
+\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x20\x32\x2e\x31\x20\x72\x65\x71\x75\x69\x72\
+\x65\x6d\x65\x6e\x74\x73\x0a\x2a\x2a\x20\x77\x69\x6c\x6c\x20\x62\
+\x65\x20\x6d\x65\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x67\x6e\x75\x2e\x6f\x72\x67\x2f\x6c\x69\x63\x65\x6e\x73\
+\x65\x73\x2f\x6f\x6c\x64\x2d\x6c\x69\x63\x65\x6e\x73\x65\x73\x2f\
+\x6c\x67\x70\x6c\x2d\x32\x2e\x31\x2e\x68\x74\x6d\x6c\x2e\x0a\x2a\
+\x2a\x0a\x2a\x2a\x20\x49\x6e\x20\x61\x64\x64\x69\x74\x69\x6f\x6e\
+\x2c\x20\x61\x73\x20\x61\x20\x73\x70\x65\x63\x69\x61\x6c\x20\x65\
+\x78\x63\x65\x70\x74\x69\x6f\x6e\x2c\x20\x44\x69\x67\x69\x61\x20\
+\x67\x69\x76\x65\x73\x20\x79\x6f\x75\x20\x63\x65\x72\x74\x61\x69\
+\x6e\x20\x61\x64\x64\x69\x74\x69\x6f\x6e\x61\x6c\x0a\x2a\x2a\x20\
+\x72\x69\x67\x68\x74\x73\x2e\x20\x20\x54\x68\x65\x73\x65\x20\x72\
+\x69\x67\x68\x74\x73\x20\x61\x72\x65\x20\x64\x65\x73\x63\x72\x69\
+\x62\x65\x64\x20\x69\x6e\x20\x74\x68\x65\x20\x44\x69\x67\x69\x61\
+\x20\x51\x74\x20\x4c\x47\x50\x4c\x20\x45\x78\x63\x65\x70\x74\x69\
+\x6f\x6e\x0a\x2a\x2a\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x31\x2e\
+\x31\x2c\x20\x69\x6e\x63\x6c\x75\x64\x65\x64\x20\x69\x6e\x20\x74\
+\x68\x65\x20\x66\x69\x6c\x65\x20\x4c\x47\x50\x4c\x5f\x45\x58\x43\
+\x45\x50\x54\x49\x4f\x4e\x2e\x74\x78\x74\x20\x69\x6e\x20\x74\x68\
+\x69\x73\x20\x70\x61\x63\x6b\x61\x67\x65\x2e\x0a\x2a\x2a\x0a\x2a\
+\x2a\x20\x47\x4e\x55\x20\x47\x65\x6e\x65\x72\x61\x6c\x20\x50\x75\
+\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\x20\x55\x73\x61\
+\x67\x65\x0a\x2a\x2a\x20\x41\x6c\x74\x65\x72\x6e\x61\x74\x69\x76\
+\x65\x6c\x79\x2c\x20\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x6d\
+\x61\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x75\x6e\x64\x65\x72\
+\x20\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\
+\x65\x20\x47\x4e\x55\x0a\x2a\x2a\x20\x47\x65\x6e\x65\x72\x61\x6c\
+\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\x65\x20\
+\x76\x65\x72\x73\x69\x6f\x6e\x20\x33\x2e\x30\x20\x61\x73\x20\x70\
+\x75\x62\x6c\x69\x73\x68\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\
+\x46\x72\x65\x65\x20\x53\x6f\x66\x74\x77\x61\x72\x65\x0a\x2a\x2a\
+\x20\x46\x6f\x75\x6e\x64\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x20\
+\x61\x70\x70\x65\x61\x72\x69\x6e\x67\x20\x69\x6e\x20\x74\x68\x65\
+\x20\x66\x69\x6c\x65\x20\x4c\x49\x43\x45\x4e\x53\x45\x2e\x47\x50\
+\x4c\x20\x69\x6e\x63\x6c\x75\x64\x65\x64\x20\x69\x6e\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x70\x61\x63\x6b\x61\x67\x69\x6e\x67\x20\x6f\
+\x66\x20\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x2e\x20\x20\x50\x6c\
+\x65\x61\x73\x65\x20\x72\x65\x76\x69\x65\x77\x20\x74\x68\x65\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x69\x6e\x66\x6f\x72\x6d\
+\x61\x74\x69\x6f\x6e\x20\x74\x6f\x0a\x2a\x2a\x20\x65\x6e\x73\x75\
+\x72\x65\x20\x74\x68\x65\x20\x47\x4e\x55\x20\x47\x65\x6e\x65\x72\
+\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73\
+\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x33\x2e\x30\x20\x72\x65\
+\x71\x75\x69\x72\x65\x6d\x65\x6e\x74\x73\x20\x77\x69\x6c\x6c\x20\
+\x62\x65\x0a\x2a\x2a\x20\x6d\x65\x74\x3a\x20\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x67\x6e\x75\x2e\x6f\x72\x67\x2f\x63\x6f\
+\x70\x79\x6c\x65\x66\x74\x2f\x67\x70\x6c\x2e\x68\x74\x6d\x6c\x2e\
+\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\
+\x44\x5f\x4c\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\
+\x6f\x72\x74\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\
+\x69\x6d\x70\x6f\x72\x74\x20\x43\x75\x73\x74\x6f\x6d\x47\x65\x6f\
+\x6d\x65\x74\x72\x79\x20\x31\x2e\x30\x0a\x0a\x49\x74\x65\x6d\x20\
+\x7b\x0a\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x33\x30\x30\
+\x0a\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x32\x30\x30\
+\x0a\x0a\x20\x20\x20\x20\x42\x65\x7a\x69\x65\x72\x43\x75\x72\x76\
+\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\
+\x6c\x69\x6e\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\
+\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\x65\x6e\
+\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\
+\x73\x2e\x6d\x61\x72\x67\x69\x6e\x73\x3a\x20\x32\x30\x0a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\
+\x72\x65\x61\x6c\x20\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x53\
+\x65\x71\x75\x65\x6e\x74\x69\x61\x6c\x41\x6e\x69\x6d\x61\x74\x69\
+\x6f\x6e\x20\x6f\x6e\x20\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\x62\x65\x72\x41\x6e\x69\x6d\
+\x61\x74\x69\x6f\x6e\x20\x7b\x20\x74\x6f\x3a\x20\x31\x3b\x20\x64\
+\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\x32\x30\x30\x30\x3b\x20\x65\
+\x61\x73\x69\x6e\x67\x2e\x74\x79\x70\x65\x3a\x20\x45\x61\x73\x69\
+\x6e\x67\x2e\x49\x6e\x4f\x75\x74\x51\x75\x61\x64\x20\x7d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x4e\x75\x6d\x62\x65\
+\x72\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x74\x6f\x3a\
+\x20\x30\x3b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\x32\x30\
+\x30\x30\x3b\x20\x65\x61\x73\x69\x6e\x67\x2e\x74\x79\x70\x65\x3a\
+\x20\x45\x61\x73\x69\x6e\x67\x2e\x49\x6e\x4f\x75\x74\x51\x75\x61\
+\x64\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x6c\x6f\x6f\x70\x73\x3a\x20\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\
+\x2e\x49\x6e\x66\x69\x6e\x69\x74\x65\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x32\x3a\
+\x20\x51\x74\x2e\x70\x6f\x69\x6e\x74\x28\x74\x2c\x20\x31\x20\x2d\
+\x20\x74\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x33\x3a\x20\
+\x51\x74\x2e\x70\x6f\x69\x6e\x74\x28\x31\x20\x2d\x20\x74\x2c\x20\
+\x74\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x54\x65\
+\x78\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\
+\x68\x6f\x72\x73\x2e\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x6c\x69\x6e\
+\x65\x2e\x62\x6f\x74\x74\x6f\x6d\x0a\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x78\x3a\x20\x32\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x77\x69\x64\x74\x68\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x77\x69\
+\x64\x74\x68\x20\x2d\x20\x34\x30\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x77\x72\x61\x70\x4d\x6f\x64\x65\x3a\x20\x54\x65\x78\x74\x2e\
+\x57\x6f\x72\x64\x57\x72\x61\x70\x0a\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x74\x65\x78\x74\x3a\x20\x22\x54\x68\x69\x73\x20\x63\x75\
+\x72\x76\x65\x20\x69\x73\x20\x61\x20\x63\x75\x73\x74\x6f\x6d\x20\
+\x73\x63\x65\x6e\x65\x20\x67\x72\x61\x70\x68\x20\x69\x74\x65\x6d\
+\x2c\x20\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x65\x64\x20\x75\x73\
+\x69\x6e\x67\x20\x47\x4c\x5f\x4c\x49\x4e\x45\x5f\x53\x54\x52\x49\
+\x50\x22\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x0a\
+\x04\xb1\xbb\xe8\
+\x00\x73\
+\x00\x63\x00\x65\x00\x6e\x00\x65\x00\x67\x00\x72\x00\x61\x00\x70\x00\x68\
+\x00\x0e\
+\x05\x35\x16\x99\
+\x00\x63\
+\x00\x75\x00\x73\x00\x74\x00\x6f\x00\x6d\x00\x67\x00\x65\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\x79\
+\x00\x08\
+\x08\x01\x5a\x5c\
+\x00\x6d\
+\x00\x61\x00\x69\x00\x6e\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
+\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/quick/scenegraph/customgeometry/main.qml b/examples/quick/scenegraph/customgeometry/main.qml
new file mode 100644
index 0000000..e14fc2b
--- /dev/null
+++ b/examples/quick/scenegraph/customgeometry/main.qml
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import CustomGeometry 1.0
+
+Item {
+    width: 300
+    height: 200
+
+    BezierCurve {
+        id: line
+        anchors.fill: parent
+        anchors.margins: 20
+
+        property real t
+        SequentialAnimation on t {
+            NumberAnimation { to: 1; duration: 2000; easing.type: Easing.InOutQuad }
+            NumberAnimation { to: 0; duration: 2000; easing.type: Easing.InOutQuad }
+            loops: Animation.Infinite
+        }
+
+        p2: Qt.point(t, 1 - t)
+        p3: Qt.point(1 - t, t)
+    }
+
+    Text {
+        anchors.bottom: line.bottom
+
+        x: 20
+        width: parent.width - 40
+        wrapMode: Text.WordWrap
+
+        text: "This curve is a custom scene graph item, implemented using GL_LINE_STRIP"
+    }
+}
diff --git a/examples/quick/shared/Button.qml b/examples/quick/shared/Button.qml
new file mode 100644
index 0000000..9bbc01a
--- /dev/null
+++ b/examples/quick/shared/Button.qml
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Item {
+    id: container
+
+    property string text: "Button"
+    property string subText: ""
+    signal clicked
+    property alias containsMouse: mouseArea.containsMouse
+    property alias pressed: mouseArea.pressed
+    implicitHeight: col.height
+    height: implicitHeight
+    width: buttonLabel.width + 20
+
+    MouseArea {
+        id: mouseArea
+        anchors.fill: parent
+        onClicked: container.clicked()
+        hoverEnabled: true
+    }
+
+    Column {
+        spacing: 2
+        id: col
+        anchors.verticalCenter: parent.verticalCenter
+        width: parent.width
+        Text {
+            id: buttonLabel
+            anchors.left: parent.left
+            anchors.leftMargin: 10
+            anchors.right: parent.right
+            anchors.rightMargin: 10
+            text: container.text
+            color: "black"
+            font.pixelSize: 22
+            wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+            styleColor: "white"
+            style: Text.Raised
+
+        }
+        Text {
+            id: buttonLabel2
+            anchors.left: parent.left
+            anchors.leftMargin: 10
+            text: container.subText
+            wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+            color: "#666"
+            font.pixelSize: 12
+        }
+    }
+}
diff --git a/examples/quick/shared/LauncherList.qml b/examples/quick/shared/LauncherList.qml
new file mode 100644
index 0000000..20f9c2b
--- /dev/null
+++ b/examples/quick/shared/LauncherList.qml
@@ -0,0 +1,153 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.0
+
+Rectangle {
+    //model is a list of {"name":"somename", "url":"file:///some/url/mainfile.qml"}
+    //function used to add to model A) to enforce scheme B) to allow Qt.resolveUrl in url assignments
+
+    color: "#eee"
+    function addExample(name, desc, url)
+    {
+        myModel.append({"name":name, "description":desc, "url":url})
+    }
+    function hideExample()
+    {
+        ei.visible = false;
+    }
+
+    ListView {
+        clip: true
+        delegate: SimpleLauncherDelegate{exampleItem: ei}
+        model: ListModel {id:myModel}
+        anchors.fill: parent
+    }
+
+    Item {
+        id: ei
+        visible: false
+        clip: true
+        property url exampleUrl
+        onExampleUrlChanged: visible = (exampleUrl == '' ? false : true); //Setting exampleUrl automatically shows example
+        anchors.fill: parent
+        anchors.bottomMargin: 40
+        Rectangle {
+            id: bg
+            anchors.fill: parent
+            color: "white"
+        }
+        MouseArea{
+            anchors.fill: parent
+            enabled: ei.visible
+            //Eats mouse events
+        }
+        Loader{
+            focus: true
+            source: ei.exampleUrl
+            anchors.fill: parent
+        }
+    }
+    Rectangle {
+        id: bar
+        visible: ei.visible
+        anchors.bottom: parent.bottom
+        width: parent.width
+        height: 40
+
+        Rectangle {
+            height: 1
+            color: "#ccc"
+            anchors.top: parent.top
+            anchors.left: parent.left
+            anchors.right: parent.right
+        }
+
+        Rectangle {
+            height: 1
+            color: "#fff"
+            anchors.top: parent.top
+            anchors.topMargin: 1
+            anchors.left: parent.left
+            anchors.right: parent.right
+        }
+
+        gradient: Gradient {
+            GradientStop { position: 0 ; color: "#eee" }
+            GradientStop { position: 1 ; color: "#ccc" }
+        }
+
+        MouseArea{
+            anchors.fill: parent
+            enabled: ei.visible
+            //Eats mouse events
+        }
+
+        Image {
+            id: back
+            source: "images/back.png"
+            anchors.verticalCenter: parent.verticalCenter
+            anchors.verticalCenterOffset: 2
+            anchors.left: parent.left
+            anchors.leftMargin: 16
+
+            MouseArea {
+                id: mouse
+                hoverEnabled: true
+                anchors.centerIn: parent
+                width: 38
+                height: 31
+                anchors.verticalCenterOffset: -1
+                onClicked: ei.exampleUrl = ""
+                Rectangle {
+                    anchors.fill: parent
+                    opacity: mouse.pressed ? 1 : 0
+                    Behavior on opacity { NumberAnimation{ duration: 100 }}
+                    gradient: Gradient {
+                        GradientStop { position: 0 ; color: "#22000000" }
+                        GradientStop { position: 0.2 ; color: "#11000000" }
+                    }
+                    border.color: "darkgray"
+                    antialiasing: true
+                    radius: 4
+                }
+            }
+        }
+    }
+}
diff --git a/examples/quick/shared/SimpleLauncherDelegate.qml b/examples/quick/shared/SimpleLauncherDelegate.qml
new file mode 100644
index 0000000..e891266
--- /dev/null
+++ b/examples/quick/shared/SimpleLauncherDelegate.qml
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 2.0
+
+Rectangle {
+    id: container
+    property Item exampleItem
+    width: ListView.view.width
+    height: button.implicitHeight + 22
+
+    gradient: Gradient {
+        GradientStop {
+            position: 0
+            Behavior on color {ColorAnimation { duration: 100 }}
+            color: button.pressed ? "#e0e0e0" : "#fff"
+        }
+        GradientStop {
+            position: 1
+            Behavior on color {ColorAnimation { duration: 100 }}
+            color: button.pressed ? "#e0e0e0" : button.containsMouse ? "#f5f5f5" : "#eee"
+        }
+    }
+
+    Image {
+        id: image
+        opacity: 0.7
+        Behavior on opacity {NumberAnimation {duration: 100}}
+        source: "images/next.png"
+        anchors.verticalCenter: parent.verticalCenter
+        anchors.right: parent.right
+        anchors.rightMargin: 16
+    }
+
+    Button {
+        id: button
+        anchors.top: parent.top
+        anchors.left: parent.left
+        anchors.bottom: parent.bottom
+        anchors.right:image.left
+        text: name
+        subText: description
+        onClicked: exampleItem.exampleUrl = url;
+    }
+
+    Rectangle {
+        height: 1
+        color: "#ccc"
+        anchors.bottom: parent.bottom
+        anchors.left: parent.left
+        anchors.right: parent.right
+    }
+}
diff --git a/examples/quick/shared/images/back.png b/examples/quick/shared/images/back.png
new file mode 100644
index 0000000..5340209
Binary files /dev/null and b/examples/quick/shared/images/back.png differ
diff --git a/examples/quick/shared/images/next.png b/examples/quick/shared/images/next.png
new file mode 100644
index 0000000..cdef8db
Binary files /dev/null and b/examples/quick/shared/images/next.png differ
diff --git a/examples/quick/shared/shared.qrc b/examples/quick/shared/shared.qrc
new file mode 100644
index 0000000..0c9f39e
--- /dev/null
+++ b/examples/quick/shared/shared.qrc
@@ -0,0 +1,9 @@
+<RCC>
+    <qresource prefix="/shared">
+        <file>LauncherList.qml</file>
+        <file>SimpleLauncherDelegate.qml</file>
+        <file>Button.qml</file>
+        <file>images/back.png</file>
+        <file>images/next.png</file>
+    </qresource>
+</RCC>
diff --git a/examples/quick/shared/shared_rc.py b/examples/quick/shared/shared_rc.py
new file mode 100644
index 0000000..b65af71
--- /dev/null
+++ b/examples/quick/shared/shared_rc.py
@@ -0,0 +1,996 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Mon Jul 22 19:07:45 2013
+#      by: The Resource Compiler for PyQt (Qt v5.1.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x0c\xdb\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x0a\x69\x6d\x70\x6f\x72\x74\
+\x20\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x49\x74\
+\x65\x6d\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\x3a\x20\x63\x6f\x6e\
+\x74\x61\x69\x6e\x65\x72\x0a\x0a\x20\x20\x20\x20\x70\x72\x6f\x70\
+\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\x74\x65\x78\x74\
+\x3a\x20\x22\x42\x75\x74\x74\x6f\x6e\x22\x0a\x20\x20\x20\x20\x70\
+\x72\x6f\x70\x65\x72\x74\x79\x20\x73\x74\x72\x69\x6e\x67\x20\x73\
+\x75\x62\x54\x65\x78\x74\x3a\x20\x22\x22\x0a\x20\x20\x20\x20\x73\
+\x69\x67\x6e\x61\x6c\x20\x63\x6c\x69\x63\x6b\x65\x64\x0a\x20\x20\
+\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x61\x6c\x69\x61\x73\
+\x20\x63\x6f\x6e\x74\x61\x69\x6e\x73\x4d\x6f\x75\x73\x65\x3a\x20\
+\x6d\x6f\x75\x73\x65\x41\x72\x65\x61\x2e\x63\x6f\x6e\x74\x61\x69\
+\x6e\x73\x4d\x6f\x75\x73\x65\x0a\x20\x20\x20\x20\x70\x72\x6f\x70\
+\x65\x72\x74\x79\x20\x61\x6c\x69\x61\x73\x20\x70\x72\x65\x73\x73\
+\x65\x64\x3a\x20\x6d\x6f\x75\x73\x65\x41\x72\x65\x61\x2e\x70\x72\
+\x65\x73\x73\x65\x64\x0a\x20\x20\x20\x20\x69\x6d\x70\x6c\x69\x63\
+\x69\x74\x48\x65\x69\x67\x68\x74\x3a\x20\x63\x6f\x6c\x2e\x68\x65\
+\x69\x67\x68\x74\x0a\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\
+\x20\x69\x6d\x70\x6c\x69\x63\x69\x74\x48\x65\x69\x67\x68\x74\x0a\
+\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x62\x75\x74\x74\x6f\
+\x6e\x4c\x61\x62\x65\x6c\x2e\x77\x69\x64\x74\x68\x20\x2b\x20\x32\
+\x30\x0a\x0a\x20\x20\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\
+\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x6d\
+\x6f\x75\x73\x65\x41\x72\x65\x61\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\
+\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\
+\x43\x6c\x69\x63\x6b\x65\x64\x3a\x20\x63\x6f\x6e\x74\x61\x69\x6e\
+\x65\x72\x2e\x63\x6c\x69\x63\x6b\x65\x64\x28\x29\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x68\x6f\x76\x65\x72\x45\x6e\x61\x62\x6c\x65\
+\x64\x3a\x20\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\
+\x20\x20\x20\x43\x6f\x6c\x75\x6d\x6e\x20\x7b\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x73\x70\x61\x63\x69\x6e\x67\x3a\x20\x32\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x63\x6f\x6c\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x76\
+\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\
+\x61\x72\x65\x6e\x74\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\
+\x6e\x74\x65\x72\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\
+\x74\x68\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x77\x69\x64\x74\x68\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\
+\x62\x75\x74\x74\x6f\x6e\x4c\x61\x62\x65\x6c\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\
+\x6c\x65\x66\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x6c\x65\x66\
+\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x63\x68\x6f\x72\x73\x2e\x6c\x65\x66\x74\x4d\x61\x72\x67\x69\x6e\
+\x3a\x20\x31\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x72\x69\x67\x68\x74\x3a\x20\
+\x70\x61\x72\x65\x6e\x74\x2e\x72\x69\x67\x68\x74\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\
+\x2e\x72\x69\x67\x68\x74\x4d\x61\x72\x67\x69\x6e\x3a\x20\x31\x30\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\x65\x78\
+\x74\x3a\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x74\x65\x78\
+\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\
+\x6c\x6f\x72\x3a\x20\x22\x62\x6c\x61\x63\x6b\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x6f\x6e\x74\x2e\x70\x69\
+\x78\x65\x6c\x53\x69\x7a\x65\x3a\x20\x32\x32\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x77\x72\x61\x70\x4d\x6f\x64\x65\
+\x3a\x20\x54\x65\x78\x74\x2e\x57\x72\x61\x70\x41\x74\x57\x6f\x72\
+\x64\x42\x6f\x75\x6e\x64\x61\x72\x79\x4f\x72\x41\x6e\x79\x77\x68\
+\x65\x72\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x73\x74\x79\x6c\x65\x43\x6f\x6c\x6f\x72\x3a\x20\x22\x77\x68\x69\
+\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x73\x74\x79\x6c\x65\x3a\x20\x54\x65\x78\x74\x2e\x52\x61\x69\x73\
+\x65\x64\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x54\x65\x78\x74\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x62\x75\x74\
+\x74\x6f\x6e\x4c\x61\x62\x65\x6c\x32\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x6c\x65\
+\x66\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x6c\x65\x66\x74\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\
+\x6f\x72\x73\x2e\x6c\x65\x66\x74\x4d\x61\x72\x67\x69\x6e\x3a\x20\
+\x31\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\
+\x65\x78\x74\x3a\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x2e\x73\
+\x75\x62\x54\x65\x78\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x77\x72\x61\x70\x4d\x6f\x64\x65\x3a\x20\x54\x65\x78\
+\x74\x2e\x57\x72\x61\x70\x41\x74\x57\x6f\x72\x64\x42\x6f\x75\x6e\
+\x64\x61\x72\x79\x4f\x72\x41\x6e\x79\x77\x68\x65\x72\x65\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\
+\x3a\x20\x22\x23\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x66\x6f\x6e\x74\x2e\x70\x69\x78\x65\x6c\x53\
+\x69\x7a\x65\x3a\x20\x31\x32\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x14\x36\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x69\x6d\x70\x6f\x72\x74\x20\
+\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x52\x65\x63\
+\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x2f\x2f\x6d\
+\x6f\x64\x65\x6c\x20\x69\x73\x20\x61\x20\x6c\x69\x73\x74\x20\x6f\
+\x66\x20\x7b\x22\x6e\x61\x6d\x65\x22\x3a\x22\x73\x6f\x6d\x65\x6e\
+\x61\x6d\x65\x22\x2c\x20\x22\x75\x72\x6c\x22\x3a\x22\x66\x69\x6c\
+\x65\x3a\x2f\x2f\x2f\x73\x6f\x6d\x65\x2f\x75\x72\x6c\x2f\x6d\x61\
+\x69\x6e\x66\x69\x6c\x65\x2e\x71\x6d\x6c\x22\x7d\x0a\x20\x20\x20\
+\x20\x2f\x2f\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x75\x73\x65\x64\
+\x20\x74\x6f\x20\x61\x64\x64\x20\x74\x6f\x20\x6d\x6f\x64\x65\x6c\
+\x20\x41\x29\x20\x74\x6f\x20\x65\x6e\x66\x6f\x72\x63\x65\x20\x73\
+\x63\x68\x65\x6d\x65\x20\x42\x29\x20\x74\x6f\x20\x61\x6c\x6c\x6f\
+\x77\x20\x51\x74\x2e\x72\x65\x73\x6f\x6c\x76\x65\x55\x72\x6c\x20\
+\x69\x6e\x20\x75\x72\x6c\x20\x61\x73\x73\x69\x67\x6e\x6d\x65\x6e\
+\x74\x73\x0a\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\
+\x23\x65\x65\x65\x22\x0a\x20\x20\x20\x20\x66\x75\x6e\x63\x74\x69\
+\x6f\x6e\x20\x61\x64\x64\x45\x78\x61\x6d\x70\x6c\x65\x28\x6e\x61\
+\x6d\x65\x2c\x20\x64\x65\x73\x63\x2c\x20\x75\x72\x6c\x29\x0a\x20\
+\x20\x20\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6d\x79\x4d\
+\x6f\x64\x65\x6c\x2e\x61\x70\x70\x65\x6e\x64\x28\x7b\x22\x6e\x61\
+\x6d\x65\x22\x3a\x6e\x61\x6d\x65\x2c\x20\x22\x64\x65\x73\x63\x72\
+\x69\x70\x74\x69\x6f\x6e\x22\x3a\x64\x65\x73\x63\x2c\x20\x22\x75\
+\x72\x6c\x22\x3a\x75\x72\x6c\x7d\x29\x0a\x20\x20\x20\x20\x7d\x0a\
+\x20\x20\x20\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x68\x69\x64\
+\x65\x45\x78\x61\x6d\x70\x6c\x65\x28\x29\x0a\x20\x20\x20\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x65\x69\x2e\x76\x69\x73\x69\
+\x62\x6c\x65\x20\x3d\x20\x66\x61\x6c\x73\x65\x3b\x0a\x20\x20\x20\
+\x20\x7d\x0a\x0a\x20\x20\x20\x20\x4c\x69\x73\x74\x56\x69\x65\x77\
+\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x3a\
+\x20\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x64\x65\
+\x6c\x65\x67\x61\x74\x65\x3a\x20\x53\x69\x6d\x70\x6c\x65\x4c\x61\
+\x75\x6e\x63\x68\x65\x72\x44\x65\x6c\x65\x67\x61\x74\x65\x7b\x65\
+\x78\x61\x6d\x70\x6c\x65\x49\x74\x65\x6d\x3a\x20\x65\x69\x7d\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x6d\x6f\x64\x65\x6c\x3a\x20\x4c\
+\x69\x73\x74\x4d\x6f\x64\x65\x6c\x20\x7b\x69\x64\x3a\x6d\x79\x4d\
+\x6f\x64\x65\x6c\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x49\x74\
+\x65\x6d\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\
+\x20\x65\x69\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x76\x69\x73\x69\
+\x62\x6c\x65\x3a\x20\x66\x61\x6c\x73\x65\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x63\x6c\x69\x70\x3a\x20\x74\x72\x75\x65\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x75\
+\x72\x6c\x20\x65\x78\x61\x6d\x70\x6c\x65\x55\x72\x6c\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x6f\x6e\x45\x78\x61\x6d\x70\x6c\x65\x55\
+\x72\x6c\x43\x68\x61\x6e\x67\x65\x64\x3a\x20\x76\x69\x73\x69\x62\
+\x6c\x65\x20\x3d\x20\x28\x65\x78\x61\x6d\x70\x6c\x65\x55\x72\x6c\
+\x20\x3d\x3d\x20\x27\x27\x20\x3f\x20\x66\x61\x6c\x73\x65\x20\x3a\
+\x20\x74\x72\x75\x65\x29\x3b\x20\x2f\x2f\x53\x65\x74\x74\x69\x6e\
+\x67\x20\x65\x78\x61\x6d\x70\x6c\x65\x55\x72\x6c\x20\x61\x75\x74\
+\x6f\x6d\x61\x74\x69\x63\x61\x6c\x6c\x79\x20\x73\x68\x6f\x77\x73\
+\x20\x65\x78\x61\x6d\x70\x6c\x65\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\
+\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x63\x68\x6f\x72\x73\x2e\x62\x6f\x74\x74\x6f\x6d\x4d\x61\x72\x67\
+\x69\x6e\x3a\x20\x34\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x52\
+\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x62\x67\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\
+\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\
+\x3a\x20\x22\x77\x68\x69\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x4d\x6f\x75\x73\
+\x65\x41\x72\x65\x61\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x66\x69\x6c\x6c\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x65\x6e\x61\x62\x6c\x65\x64\x3a\x20\x65\x69\x2e\
+\x76\x69\x73\x69\x62\x6c\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x2f\x2f\x45\x61\x74\x73\x20\x6d\x6f\x75\x73\x65\
+\x20\x65\x76\x65\x6e\x74\x73\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x4c\x6f\x61\x64\x65\x72\
+\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x6f\
+\x63\x75\x73\x3a\x20\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x73\x6f\x75\x72\x63\x65\x3a\x20\x65\x69\
+\x2e\x65\x78\x61\x6d\x70\x6c\x65\x55\x72\x6c\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\
+\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\
+\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x62\x61\x72\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x76\x69\x73\x69\x62\x6c\x65\x3a\x20\x65\x69\
+\x2e\x76\x69\x73\x69\x62\x6c\x65\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x62\x6f\x74\x74\x6f\x6d\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x2e\x62\x6f\x74\x74\x6f\x6d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x77\x69\x64\x74\x68\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x34\x30\x0a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\x65\
+\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x68\
+\x65\x69\x67\x68\x74\x3a\x20\x31\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x23\x63\x63\
+\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\
+\x6e\x63\x68\x6f\x72\x73\x2e\x74\x6f\x70\x3a\x20\x70\x61\x72\x65\
+\x6e\x74\x2e\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x6c\x65\x66\x74\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x2e\x6c\x65\x66\x74\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\
+\x2e\x72\x69\x67\x68\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x72\
+\x69\x67\x68\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\
+\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x68\x65\x69\x67\x68\x74\x3a\x20\x31\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x23\x66\
+\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x61\x6e\x63\x68\x6f\x72\x73\x2e\x74\x6f\x70\x3a\x20\x70\x61\x72\
+\x65\x6e\x74\x2e\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x74\x6f\x70\x4d\
+\x61\x72\x67\x69\x6e\x3a\x20\x31\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x6c\x65\x66\
+\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x6c\x65\x66\x74\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\
+\x72\x73\x2e\x72\x69\x67\x68\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\
+\x2e\x72\x69\x67\x68\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\
+\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\
+\x6e\x74\x3a\x20\x47\x72\x61\x64\x69\x65\x6e\x74\x20\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x47\x72\x61\x64\x69\
+\x65\x6e\x74\x53\x74\x6f\x70\x20\x7b\x20\x70\x6f\x73\x69\x74\x69\
+\x6f\x6e\x3a\x20\x30\x20\x3b\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\
+\x23\x65\x65\x65\x22\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x47\x72\x61\x64\x69\x65\x6e\x74\x53\x74\x6f\x70\
+\x20\x7b\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x31\x20\x3b\
+\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x23\x63\x63\x63\x22\x20\x7d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\x7b\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\
+\x72\x73\x2e\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x65\x6e\x61\x62\
+\x6c\x65\x64\x3a\x20\x65\x69\x2e\x76\x69\x73\x69\x62\x6c\x65\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x2f\x2f\x45\x61\
+\x74\x73\x20\x6d\x6f\x75\x73\x65\x20\x65\x76\x65\x6e\x74\x73\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x49\x6d\x61\x67\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x62\x61\x63\x6b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x75\x72\
+\x63\x65\x3a\x20\x22\x69\x6d\x61\x67\x65\x73\x2f\x62\x61\x63\x6b\
+\x2e\x70\x6e\x67\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x76\x65\x72\x74\x69\x63\
+\x61\x6c\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\x65\x6e\x74\
+\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\
+\x6f\x72\x73\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\
+\x65\x72\x4f\x66\x66\x73\x65\x74\x3a\x20\x32\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\
+\x6c\x65\x66\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x6c\x65\x66\
+\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\
+\x63\x68\x6f\x72\x73\x2e\x6c\x65\x66\x74\x4d\x61\x72\x67\x69\x6e\
+\x3a\x20\x31\x36\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x4d\x6f\x75\x73\x65\x41\x72\x65\x61\x20\x7b\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x6d\x6f\x75\x73\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x68\x6f\x76\x65\x72\x45\x6e\x61\
+\x62\x6c\x65\x64\x3a\x20\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\
+\x72\x73\x2e\x63\x65\x6e\x74\x65\x72\x49\x6e\x3a\x20\x70\x61\x72\
+\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x33\x38\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\
+\x69\x67\x68\x74\x3a\x20\x33\x31\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\
+\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x4f\
+\x66\x66\x73\x65\x74\x3a\x20\x2d\x31\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x43\x6c\x69\x63\
+\x6b\x65\x64\x3a\x20\x65\x69\x2e\x65\x78\x61\x6d\x70\x6c\x65\x55\
+\x72\x6c\x20\x3d\x20\x22\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x52\x65\x63\x74\x61\x6e\x67\x6c\
+\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\
+\x66\x69\x6c\x6c\x3a\x20\x70\x61\x72\x65\x6e\x74\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x6d\x6f\x75\x73\x65\x2e\
+\x70\x72\x65\x73\x73\x65\x64\x20\x3f\x20\x31\x20\x3a\x20\x30\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\
+\x6f\x70\x61\x63\x69\x74\x79\x20\x7b\x20\x4e\x75\x6d\x62\x65\x72\
+\x41\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x7b\x20\x64\x75\x72\x61\x74\
+\x69\x6f\x6e\x3a\x20\x31\x30\x30\x20\x7d\x7d\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x67\x72\x61\x64\x69\x65\x6e\x74\x3a\x20\x47\x72\x61\x64\x69\x65\
+\x6e\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x47\x72\x61\
+\x64\x69\x65\x6e\x74\x53\x74\x6f\x70\x20\x7b\x20\x70\x6f\x73\x69\
+\x74\x69\x6f\x6e\x3a\x20\x30\x20\x3b\x20\x63\x6f\x6c\x6f\x72\x3a\
+\x20\x22\x23\x32\x32\x30\x30\x30\x30\x30\x30\x22\x20\x7d\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x47\x72\x61\x64\x69\x65\x6e\x74\x53\
+\x74\x6f\x70\x20\x7b\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\
+\x30\x2e\x32\x20\x3b\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x23\x31\
+\x31\x30\x30\x30\x30\x30\x30\x22\x20\x7d\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2e\x63\x6f\x6c\x6f\
+\x72\x3a\x20\x22\x64\x61\x72\x6b\x67\x72\x61\x79\x22\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x61\x6e\x74\x69\x61\x6c\x69\x61\x73\x69\x6e\x67\x3a\x20\
+\x74\x72\x75\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x61\x64\x69\x75\x73\x3a\
+\x20\x34\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\
+\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x0c\xd7\
+\x2f\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x0a\x2a\x2a\x0a\
+\x2a\x2a\x20\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\
+\x20\x32\x30\x31\x33\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\
+\x61\x6e\x64\x2f\x6f\x72\x20\x69\x74\x73\x20\x73\x75\x62\x73\x69\
+\x64\x69\x61\x72\x79\x28\x2d\x69\x65\x73\x29\x2e\x0a\x2a\x2a\x20\
+\x43\x6f\x6e\x74\x61\x63\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\
+\x77\x77\x77\x2e\x71\x74\x2d\x70\x72\x6f\x6a\x65\x63\x74\x2e\x6f\
+\x72\x67\x2f\x6c\x65\x67\x61\x6c\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x69\x73\x20\x70\x61\x72\x74\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x65\x78\x61\x6d\x70\x6c\x65\x73\
+\x20\x6f\x66\x20\x74\x68\x65\x20\x51\x74\x20\x54\x6f\x6f\x6c\x6b\
+\x69\x74\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x42\x45\
+\x47\x49\x4e\x5f\x4c\x49\x43\x45\x4e\x53\x45\x3a\x42\x53\x44\x24\
+\x0a\x2a\x2a\x20\x59\x6f\x75\x20\x6d\x61\x79\x20\x75\x73\x65\x20\
+\x74\x68\x69\x73\x20\x66\x69\x6c\x65\x20\x75\x6e\x64\x65\x72\x20\
+\x74\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\
+\x20\x42\x53\x44\x20\x6c\x69\x63\x65\x6e\x73\x65\x20\x61\x73\x20\
+\x66\x6f\x6c\x6c\x6f\x77\x73\x3a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x22\
+\x52\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x61\
+\x6e\x64\x20\x75\x73\x65\x20\x69\x6e\x20\x73\x6f\x75\x72\x63\x65\
+\x20\x61\x6e\x64\x20\x62\x69\x6e\x61\x72\x79\x20\x66\x6f\x72\x6d\
+\x73\x2c\x20\x77\x69\x74\x68\x20\x6f\x72\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x2a\x2a\x20\x6d\x6f\x64\x69\x66\x69\x63\x61\x74\x69\
+\x6f\x6e\x2c\x20\x61\x72\x65\x20\x70\x65\x72\x6d\x69\x74\x74\x65\
+\x64\x20\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x74\x68\x61\x74\x20\
+\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x63\x6f\
+\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\x61\x72\x65\x0a\x2a\x2a\x20\
+\x6d\x65\x74\x3a\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\
+\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x73\x20\x6f\x66\x20\x73\
+\x6f\x75\x72\x63\x65\x20\x63\x6f\x64\x65\x20\x6d\x75\x73\x74\x20\
+\x72\x65\x74\x61\x69\x6e\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\
+\x20\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\
+\x20\x20\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\
+\x69\x73\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\
+\x73\x20\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\
+\x69\x6e\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x2e\x0a\
+\x2a\x2a\x20\x20\x20\x2a\x20\x52\x65\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x73\x20\x69\x6e\x20\x62\x69\x6e\x61\x72\x79\
+\x20\x66\x6f\x72\x6d\x20\x6d\x75\x73\x74\x20\x72\x65\x70\x72\x6f\
+\x64\x75\x63\x65\x20\x74\x68\x65\x20\x61\x62\x6f\x76\x65\x20\x63\
+\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x2a\x2a\x20\x20\x20\x20\x20\
+\x6e\x6f\x74\x69\x63\x65\x2c\x20\x74\x68\x69\x73\x20\x6c\x69\x73\
+\x74\x20\x6f\x66\x20\x63\x6f\x6e\x64\x69\x74\x69\x6f\x6e\x73\x20\
+\x61\x6e\x64\x20\x74\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\
+\x67\x20\x64\x69\x73\x63\x6c\x61\x69\x6d\x65\x72\x20\x69\x6e\x0a\
+\x2a\x2a\x20\x20\x20\x20\x20\x74\x68\x65\x20\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x2f\x6f\x72\x20\
+\x6f\x74\x68\x65\x72\x20\x6d\x61\x74\x65\x72\x69\x61\x6c\x73\x20\
+\x70\x72\x6f\x76\x69\x64\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\
+\x65\x0a\x2a\x2a\x20\x20\x20\x20\x20\x64\x69\x73\x74\x72\x69\x62\
+\x75\x74\x69\x6f\x6e\x2e\x0a\x2a\x2a\x20\x20\x20\x2a\x20\x4e\x65\
+\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\x65\x20\x6f\
+\x66\x20\x44\x69\x67\x69\x61\x20\x50\x6c\x63\x20\x61\x6e\x64\x20\
+\x69\x74\x73\x20\x53\x75\x62\x73\x69\x64\x69\x61\x72\x79\x28\x2d\
+\x69\x65\x73\x29\x20\x6e\x6f\x72\x20\x74\x68\x65\x20\x6e\x61\x6d\
+\x65\x73\x0a\x2a\x2a\x20\x20\x20\x20\x20\x6f\x66\x20\x69\x74\x73\
+\x20\x63\x6f\x6e\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x20\x6d\x61\
+\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x65\x6e\x64\
+\x6f\x72\x73\x65\x20\x6f\x72\x20\x70\x72\x6f\x6d\x6f\x74\x65\x20\
+\x70\x72\x6f\x64\x75\x63\x74\x73\x20\x64\x65\x72\x69\x76\x65\x64\
+\x0a\x2a\x2a\x20\x20\x20\x20\x20\x66\x72\x6f\x6d\x20\x74\x68\x69\
+\x73\x20\x73\x6f\x66\x74\x77\x61\x72\x65\x20\x77\x69\x74\x68\x6f\
+\x75\x74\x20\x73\x70\x65\x63\x69\x66\x69\x63\x20\x70\x72\x69\x6f\
+\x72\x20\x77\x72\x69\x74\x74\x65\x6e\x20\x70\x65\x72\x6d\x69\x73\
+\x73\x69\x6f\x6e\x2e\x0a\x2a\x2a\x0a\x2a\x2a\x0a\x2a\x2a\x20\x54\
+\x48\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x20\x49\x53\x20\
+\x50\x52\x4f\x56\x49\x44\x45\x44\x20\x42\x59\x20\x54\x48\x45\x20\
+\x43\x4f\x50\x59\x52\x49\x47\x48\x54\x20\x48\x4f\x4c\x44\x45\x52\
+\x53\x20\x41\x4e\x44\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\
+\x52\x53\x0a\x2a\x2a\x20\x22\x41\x53\x20\x49\x53\x22\x20\x41\x4e\
+\x44\x20\x41\x4e\x59\x20\x45\x58\x50\x52\x45\x53\x53\x20\x4f\x52\
+\x20\x49\x4d\x50\x4c\x49\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\
+\x49\x45\x53\x2c\x20\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\
+\x42\x55\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\
+\x45\x44\x20\x54\x4f\x2c\x20\x54\x48\x45\x20\x49\x4d\x50\x4c\x49\
+\x45\x44\x20\x57\x41\x52\x52\x41\x4e\x54\x49\x45\x53\x20\x4f\x46\
+\x20\x4d\x45\x52\x43\x48\x41\x4e\x54\x41\x42\x49\x4c\x49\x54\x59\
+\x20\x41\x4e\x44\x20\x46\x49\x54\x4e\x45\x53\x53\x20\x46\x4f\x52\
+\x0a\x2a\x2a\x20\x41\x20\x50\x41\x52\x54\x49\x43\x55\x4c\x41\x52\
+\x20\x50\x55\x52\x50\x4f\x53\x45\x20\x41\x52\x45\x20\x44\x49\x53\
+\x43\x4c\x41\x49\x4d\x45\x44\x2e\x20\x49\x4e\x20\x4e\x4f\x20\x45\
+\x56\x45\x4e\x54\x20\x53\x48\x41\x4c\x4c\x20\x54\x48\x45\x20\x43\
+\x4f\x50\x59\x52\x49\x47\x48\x54\x0a\x2a\x2a\x20\x4f\x57\x4e\x45\
+\x52\x20\x4f\x52\x20\x43\x4f\x4e\x54\x52\x49\x42\x55\x54\x4f\x52\
+\x53\x20\x42\x45\x20\x4c\x49\x41\x42\x4c\x45\x20\x46\x4f\x52\x20\
+\x41\x4e\x59\x20\x44\x49\x52\x45\x43\x54\x2c\x20\x49\x4e\x44\x49\
+\x52\x45\x43\x54\x2c\x20\x49\x4e\x43\x49\x44\x45\x4e\x54\x41\x4c\
+\x2c\x0a\x2a\x2a\x20\x53\x50\x45\x43\x49\x41\x4c\x2c\x20\x45\x58\
+\x45\x4d\x50\x4c\x41\x52\x59\x2c\x20\x4f\x52\x20\x43\x4f\x4e\x53\
+\x45\x51\x55\x45\x4e\x54\x49\x41\x4c\x20\x44\x41\x4d\x41\x47\x45\
+\x53\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x2c\x20\x42\x55\
+\x54\x20\x4e\x4f\x54\x0a\x2a\x2a\x20\x4c\x49\x4d\x49\x54\x45\x44\
+\x20\x54\x4f\x2c\x20\x50\x52\x4f\x43\x55\x52\x45\x4d\x45\x4e\x54\
+\x20\x4f\x46\x20\x53\x55\x42\x53\x54\x49\x54\x55\x54\x45\x20\x47\
+\x4f\x4f\x44\x53\x20\x4f\x52\x20\x53\x45\x52\x56\x49\x43\x45\x53\
+\x3b\x20\x4c\x4f\x53\x53\x20\x4f\x46\x20\x55\x53\x45\x2c\x0a\x2a\
+\x2a\x20\x44\x41\x54\x41\x2c\x20\x4f\x52\x20\x50\x52\x4f\x46\x49\
+\x54\x53\x3b\x20\x4f\x52\x20\x42\x55\x53\x49\x4e\x45\x53\x53\x20\
+\x49\x4e\x54\x45\x52\x52\x55\x50\x54\x49\x4f\x4e\x29\x20\x48\x4f\
+\x57\x45\x56\x45\x52\x20\x43\x41\x55\x53\x45\x44\x20\x41\x4e\x44\
+\x20\x4f\x4e\x20\x41\x4e\x59\x0a\x2a\x2a\x20\x54\x48\x45\x4f\x52\
+\x59\x20\x4f\x46\x20\x4c\x49\x41\x42\x49\x4c\x49\x54\x59\x2c\x20\
+\x57\x48\x45\x54\x48\x45\x52\x20\x49\x4e\x20\x43\x4f\x4e\x54\x52\
+\x41\x43\x54\x2c\x20\x53\x54\x52\x49\x43\x54\x20\x4c\x49\x41\x42\
+\x49\x4c\x49\x54\x59\x2c\x20\x4f\x52\x20\x54\x4f\x52\x54\x0a\x2a\
+\x2a\x20\x28\x49\x4e\x43\x4c\x55\x44\x49\x4e\x47\x20\x4e\x45\x47\
+\x4c\x49\x47\x45\x4e\x43\x45\x20\x4f\x52\x20\x4f\x54\x48\x45\x52\
+\x57\x49\x53\x45\x29\x20\x41\x52\x49\x53\x49\x4e\x47\x20\x49\x4e\
+\x20\x41\x4e\x59\x20\x57\x41\x59\x20\x4f\x55\x54\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x55\x53\x45\x0a\x2a\x2a\x20\x4f\x46\x20\x54\x48\
+\x49\x53\x20\x53\x4f\x46\x54\x57\x41\x52\x45\x2c\x20\x45\x56\x45\
+\x4e\x20\x49\x46\x20\x41\x44\x56\x49\x53\x45\x44\x20\x4f\x46\x20\
+\x54\x48\x45\x20\x50\x4f\x53\x53\x49\x42\x49\x4c\x49\x54\x59\x20\
+\x4f\x46\x20\x53\x55\x43\x48\x20\x44\x41\x4d\x41\x47\x45\x2e\x22\
+\x0a\x2a\x2a\x0a\x2a\x2a\x20\x24\x51\x54\x5f\x45\x4e\x44\x5f\x4c\
+\x49\x43\x45\x4e\x53\x45\x24\x0a\x2a\x2a\x0a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a\
+\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2f\x0a\x69\x6d\x70\x6f\x72\x74\x20\
+\x51\x74\x51\x75\x69\x63\x6b\x20\x32\x2e\x30\x0a\x0a\x52\x65\x63\
+\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x69\x64\x3a\
+\x20\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x0a\x20\x20\x20\x20\x70\
+\x72\x6f\x70\x65\x72\x74\x79\x20\x49\x74\x65\x6d\x20\x65\x78\x61\
+\x6d\x70\x6c\x65\x49\x74\x65\x6d\x0a\x20\x20\x20\x20\x77\x69\x64\
+\x74\x68\x3a\x20\x4c\x69\x73\x74\x56\x69\x65\x77\x2e\x76\x69\x65\
+\x77\x2e\x77\x69\x64\x74\x68\x0a\x20\x20\x20\x20\x68\x65\x69\x67\
+\x68\x74\x3a\x20\x62\x75\x74\x74\x6f\x6e\x2e\x69\x6d\x70\x6c\x69\
+\x63\x69\x74\x48\x65\x69\x67\x68\x74\x20\x2b\x20\x32\x32\x0a\x0a\
+\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x3a\x20\x47\x72\
+\x61\x64\x69\x65\x6e\x74\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x47\x72\x61\x64\x69\x65\x6e\x74\x53\x74\x6f\x70\x20\x7b\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x6f\x73\x69\
+\x74\x69\x6f\x6e\x3a\x20\x30\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\
+\x63\x6f\x6c\x6f\x72\x20\x7b\x43\x6f\x6c\x6f\x72\x41\x6e\x69\x6d\
+\x61\x74\x69\x6f\x6e\x20\x7b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\
+\x3a\x20\x31\x30\x30\x20\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x62\x75\x74\x74\
+\x6f\x6e\x2e\x70\x72\x65\x73\x73\x65\x64\x20\x3f\x20\x22\x23\x65\
+\x30\x65\x30\x65\x30\x22\x20\x3a\x20\x22\x23\x66\x66\x66\x22\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x47\x72\x61\x64\x69\x65\x6e\x74\x53\x74\x6f\x70\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x70\x6f\x73\
+\x69\x74\x69\x6f\x6e\x3a\x20\x31\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\
+\x20\x63\x6f\x6c\x6f\x72\x20\x7b\x43\x6f\x6c\x6f\x72\x41\x6e\x69\
+\x6d\x61\x74\x69\x6f\x6e\x20\x7b\x20\x64\x75\x72\x61\x74\x69\x6f\
+\x6e\x3a\x20\x31\x30\x30\x20\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x62\x75\x74\
+\x74\x6f\x6e\x2e\x70\x72\x65\x73\x73\x65\x64\x20\x3f\x20\x22\x23\
+\x65\x30\x65\x30\x65\x30\x22\x20\x3a\x20\x62\x75\x74\x74\x6f\x6e\
+\x2e\x63\x6f\x6e\x74\x61\x69\x6e\x73\x4d\x6f\x75\x73\x65\x20\x3f\
+\x20\x22\x23\x66\x35\x66\x35\x66\x35\x22\x20\x3a\x20\x22\x23\x65\
+\x65\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\
+\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x49\x6d\x61\x67\x65\x20\x7b\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3a\x20\x69\x6d\x61\
+\x67\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x70\x61\x63\x69\
+\x74\x79\x3a\x20\x30\x2e\x37\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x42\x65\x68\x61\x76\x69\x6f\x72\x20\x6f\x6e\x20\x6f\x70\x61\x63\
+\x69\x74\x79\x20\x7b\x4e\x75\x6d\x62\x65\x72\x41\x6e\x69\x6d\x61\
+\x74\x69\x6f\x6e\x20\x7b\x64\x75\x72\x61\x74\x69\x6f\x6e\x3a\x20\
+\x31\x30\x30\x7d\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\
+\x75\x72\x63\x65\x3a\x20\x22\x69\x6d\x61\x67\x65\x73\x2f\x6e\x65\
+\x78\x74\x2e\x70\x6e\x67\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x61\x6e\x63\x68\x6f\x72\x73\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\
+\x43\x65\x6e\x74\x65\x72\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x76\
+\x65\x72\x74\x69\x63\x61\x6c\x43\x65\x6e\x74\x65\x72\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x72\x69\
+\x67\x68\x74\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x72\x69\x67\x68\
+\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\
+\x73\x2e\x72\x69\x67\x68\x74\x4d\x61\x72\x67\x69\x6e\x3a\x20\x31\
+\x36\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x42\x75\x74\
+\x74\x6f\x6e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\
+\x3a\x20\x62\x75\x74\x74\x6f\x6e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x74\x6f\x70\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x6c\x65\x66\x74\x3a\x20\x70\
+\x61\x72\x65\x6e\x74\x2e\x6c\x65\x66\x74\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x62\x6f\x74\x74\x6f\
+\x6d\x3a\x20\x70\x61\x72\x65\x6e\x74\x2e\x62\x6f\x74\x74\x6f\x6d\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\
+\x2e\x72\x69\x67\x68\x74\x3a\x69\x6d\x61\x67\x65\x2e\x6c\x65\x66\
+\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x65\x78\x74\x3a\x20\
+\x6e\x61\x6d\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x75\x62\
+\x54\x65\x78\x74\x3a\x20\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\
+\x6e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x6e\x43\x6c\x69\x63\
+\x6b\x65\x64\x3a\x20\x65\x78\x61\x6d\x70\x6c\x65\x49\x74\x65\x6d\
+\x2e\x65\x78\x61\x6d\x70\x6c\x65\x55\x72\x6c\x20\x3d\x20\x75\x72\
+\x6c\x3b\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x52\x65\
+\x63\x74\x61\x6e\x67\x6c\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x31\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x22\x23\x63\x63\x63\
+\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x6e\x63\x68\x6f\x72\
+\x73\x2e\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x70\x61\x72\x65\x6e\x74\
+\x2e\x62\x6f\x74\x74\x6f\x6d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x61\x6e\x63\x68\x6f\x72\x73\x2e\x6c\x65\x66\x74\x3a\x20\x70\x61\
+\x72\x65\x6e\x74\x2e\x6c\x65\x66\x74\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x61\x6e\x63\x68\x6f\x72\x73\x2e\x72\x69\x67\x68\x74\x3a\
+\x20\x70\x61\x72\x65\x6e\x74\x2e\x72\x69\x67\x68\x74\x0a\x20\x20\
+\x20\x20\x7d\x0a\x7d\x0a\
+\x00\x00\x05\x5b\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x12\x00\x00\x00\x1f\x08\x06\x00\x00\x00\xea\x50\x9d\x89\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x03\x24\x69\x54\x58\x74\x58\x4d\x4c\
+\x3a\x63\x6f\x6d\x2e\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\
+\x00\x00\x00\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\
+\x69\x6e\x3d\x22\xef\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\
+\x30\x4d\x70\x43\x65\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\
+\x7a\x6b\x63\x39\x64\x22\x3f\x3e\x20\x3c\x78\x3a\x78\x6d\x70\x6d\
+\x65\x74\x61\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\
+\x62\x65\x3a\x6e\x73\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\
+\x6d\x70\x74\x6b\x3d\x22\x41\x64\x6f\x62\x65\x20\x58\x4d\x50\x20\
+\x43\x6f\x72\x65\x20\x35\x2e\x33\x2d\x63\x30\x31\x31\x20\x36\x36\
+\x2e\x31\x34\x35\x36\x36\x31\x2c\x20\x32\x30\x31\x32\x2f\x30\x32\
+\x2f\x30\x36\x2d\x31\x34\x3a\x35\x36\x3a\x32\x37\x20\x20\x20\x20\
+\x20\x20\x20\x20\x22\x3e\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\
+\x61\x78\x2d\x6e\x73\x23\x22\x3e\x20\x3c\x72\x64\x66\x3a\x44\x65\
+\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\
+\x6f\x75\x74\x3d\x22\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\
+\x65\x2e\x63\x6f\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x22\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\
+\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x73\x74\x52\x65\x66\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\
+\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\x73\
+\x6f\x75\x72\x63\x65\x52\x65\x66\x23\x22\x20\x78\x6d\x70\x3a\x43\
+\x72\x65\x61\x74\x6f\x72\x54\x6f\x6f\x6c\x3d\x22\x41\x64\x6f\x62\
+\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x43\x53\x36\x20\
+\x28\x4d\x61\x63\x69\x6e\x74\x6f\x73\x68\x29\x22\x20\x78\x6d\x70\
+\x4d\x4d\x3a\x49\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\
+\x6d\x70\x2e\x69\x69\x64\x3a\x44\x43\x45\x38\x32\x37\x36\x35\x35\
+\x37\x34\x38\x31\x31\x45\x32\x42\x30\x45\x45\x39\x32\x42\x45\x45\
+\x32\x37\x30\x34\x37\x44\x42\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x44\
+\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x78\x6d\x70\x2e\x64\
+\x69\x64\x3a\x44\x43\x45\x38\x32\x37\x36\x36\x35\x37\x34\x38\x31\
+\x31\x45\x32\x42\x30\x45\x45\x39\x32\x42\x45\x45\x32\x37\x30\x34\
+\x37\x44\x42\x22\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x44\x65\x72\
+\x69\x76\x65\x64\x46\x72\x6f\x6d\x20\x73\x74\x52\x65\x66\x3a\x69\
+\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\
+\x69\x64\x3a\x44\x43\x45\x38\x32\x37\x36\x33\x35\x37\x34\x38\x31\
+\x31\x45\x32\x42\x30\x45\x45\x39\x32\x42\x45\x45\x32\x37\x30\x34\
+\x37\x44\x42\x22\x20\x73\x74\x52\x65\x66\x3a\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x49\x44\x3d\x22\x78\x6d\x70\x2e\x64\x69\x64\x3a\x44\
+\x43\x45\x38\x32\x37\x36\x34\x35\x37\x34\x38\x31\x31\x45\x32\x42\
+\x30\x45\x45\x39\x32\x42\x45\x45\x32\x37\x30\x34\x37\x44\x42\x22\
+\x2f\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\
+\x74\x69\x6f\x6e\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\
+\x20\x3c\x2f\x78\x3a\x78\x6d\x70\x6d\x65\x74\x61\x3e\x20\x3c\x3f\
+\x78\x70\x61\x63\x6b\x65\x74\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\
+\x3e\xd9\x0c\xdf\xc0\x00\x00\x01\xcd\x49\x44\x41\x54\x78\xda\xac\
+\x95\x3b\x4b\x03\x41\x14\x85\x37\x99\x34\xda\x46\x31\x3e\x40\xc5\
+\x88\x41\x8c\x2c\x2a\x16\x62\x23\x58\x5a\x08\x06\x04\x0b\xa3\xad\
+\x85\x9d\x60\x13\x0b\x1b\x6d\x2c\x35\x8d\x88\x89\xd8\x28\x42\x34\
+\x3e\x40\x42\x88\x16\x16\x22\x62\x3a\xff\x86\x20\x58\x04\x5d\xcf\
+\x95\x2b\x84\x65\xe6\xee\xae\x66\xe0\xec\xcc\xee\x1c\xbe\x79\xec\
+\xbd\x33\x91\xa5\x74\xba\xd9\xb2\xac\x03\x68\x0e\x7a\x83\x32\x87\
+\xb9\x5c\xd6\x0a\x58\xc2\xd0\x06\x34\x0f\x45\xa0\x28\xb4\x07\xf8\
+\xfa\x5f\x40\xe3\x9a\xef\x5b\x80\x65\x82\x82\x1e\x0d\x7d\x9b\x80\
+\x6d\xfb\x05\x29\xdb\xb6\x1f\x50\x4f\x40\xbd\x9a\xfe\x49\xf4\x37\
+\xbd\x54\xab\x25\x2f\x50\x88\x1e\xbc\xe1\x97\xd0\x94\xc1\xb7\x03\
+\xad\xe1\x27\x38\xc6\x19\xd1\x03\x23\xd6\x30\xf2\xa9\x30\x33\xfa\
+\xde\x06\xcf\x35\xbc\x66\x90\x0b\x36\x0c\x0d\x68\xbc\x63\x12\x4c\
+\xd5\xbf\x30\xec\x0c\x4d\x5b\x80\xb5\xc3\x73\x03\xaf\x63\x04\x31\
+\xec\xd3\x03\x36\x0a\xc5\xe1\x39\xaf\x87\x29\xdd\x7a\xeb\x60\x71\
+\x28\xa9\xb1\x24\xdd\x30\x65\xfa\x0b\x0c\x2b\x78\xc0\xfa\xe1\x29\
+\x92\x37\xe4\x15\x1f\x08\x0d\x1a\x2c\x0f\x2d\x18\x2c\x45\x28\xa5\
+\xbc\x40\x34\x75\x5a\x02\x9a\x31\xde\x1f\x77\xa1\x7d\x8c\x29\x3f\
+\xe1\xcf\xb0\x2b\x34\x3b\xa1\x11\xdd\x32\xc3\x01\xf2\x32\xca\x31\
+\xa6\x2b\xef\x21\x3f\x04\xec\x53\x2b\xaa\x32\x34\x64\xb0\xac\xa8\
+\x06\x40\x56\x91\x83\xbb\xca\x03\xd2\x81\xaa\x24\xcd\x84\x20\x62\
+\x1c\x01\xd2\x85\xea\x0e\x4a\x08\x90\xac\x18\xd9\x0c\xa9\x40\x7d\
+\x9a\xee\x2f\x68\x19\x90\x7d\x31\xd7\x00\xe9\xe1\x3d\x31\x41\x16\
+\x01\x39\x12\xb3\x1f\x10\x4a\x87\x7b\xa8\x5b\x80\x1c\x8b\xe7\x11\
+\x43\x2a\x1c\x74\xee\x52\xa3\x9b\x06\x90\x13\xf1\x84\x04\x24\xc1\
+\xcb\x31\x41\x52\x80\x14\xc4\xc3\x1f\x90\x41\x5e\x4e\x4c\x80\x5c\
+\x78\xc5\x1b\x5d\x8a\xb4\x71\x2d\x9a\xbe\x0f\x68\x16\x90\x5b\x3f\
+\xd1\x1f\x31\x24\x21\x41\x66\x00\x29\x07\xb9\x20\x9f\xff\x0b\xf9\
+\x05\xd1\x81\xf5\xc4\xef\xaf\xd0\x74\x50\xc8\xcf\x05\xe9\x38\x8e\
+\xd5\x88\xf2\x2d\xc0\x00\xaa\xfa\xae\x1f\x47\x7c\x39\x6d\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x06\x36\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x17\x08\x06\x00\x00\x00\xd0\xa6\xc5\x81\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x03\x24\x69\x54\x58\x74\x58\x4d\x4c\
+\x3a\x63\x6f\x6d\x2e\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\
+\x00\x00\x00\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\
+\x69\x6e\x3d\x22\xef\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\
+\x30\x4d\x70\x43\x65\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\
+\x7a\x6b\x63\x39\x64\x22\x3f\x3e\x20\x3c\x78\x3a\x78\x6d\x70\x6d\
+\x65\x74\x61\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\
+\x62\x65\x3a\x6e\x73\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\
+\x6d\x70\x74\x6b\x3d\x22\x41\x64\x6f\x62\x65\x20\x58\x4d\x50\x20\
+\x43\x6f\x72\x65\x20\x35\x2e\x33\x2d\x63\x30\x31\x31\x20\x36\x36\
+\x2e\x31\x34\x35\x36\x36\x31\x2c\x20\x32\x30\x31\x32\x2f\x30\x32\
+\x2f\x30\x36\x2d\x31\x34\x3a\x35\x36\x3a\x32\x37\x20\x20\x20\x20\
+\x20\x20\x20\x20\x22\x3e\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\
+\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\
+\x61\x78\x2d\x6e\x73\x23\x22\x3e\x20\x3c\x72\x64\x66\x3a\x44\x65\
+\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\
+\x6f\x75\x74\x3d\x22\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\
+\x65\x2e\x63\x6f\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x22\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\
+\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x73\x74\x52\x65\x66\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\
+\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\x73\
+\x6f\x75\x72\x63\x65\x52\x65\x66\x23\x22\x20\x78\x6d\x70\x3a\x43\
+\x72\x65\x61\x74\x6f\x72\x54\x6f\x6f\x6c\x3d\x22\x41\x64\x6f\x62\
+\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\x43\x53\x36\x20\
+\x28\x4d\x61\x63\x69\x6e\x74\x6f\x73\x68\x29\x22\x20\x78\x6d\x70\
+\x4d\x4d\x3a\x49\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\
+\x6d\x70\x2e\x69\x69\x64\x3a\x44\x43\x45\x38\x32\x37\x36\x39\x35\
+\x37\x34\x38\x31\x31\x45\x32\x42\x30\x45\x45\x39\x32\x42\x45\x45\
+\x32\x37\x30\x34\x37\x44\x42\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x44\
+\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x78\x6d\x70\x2e\x64\
+\x69\x64\x3a\x44\x43\x45\x38\x32\x37\x36\x41\x35\x37\x34\x38\x31\
+\x31\x45\x32\x42\x30\x45\x45\x39\x32\x42\x45\x45\x32\x37\x30\x34\
+\x37\x44\x42\x22\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x44\x65\x72\
+\x69\x76\x65\x64\x46\x72\x6f\x6d\x20\x73\x74\x52\x65\x66\x3a\x69\
+\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\
+\x69\x64\x3a\x44\x43\x45\x38\x32\x37\x36\x37\x35\x37\x34\x38\x31\
+\x31\x45\x32\x42\x30\x45\x45\x39\x32\x42\x45\x45\x32\x37\x30\x34\
+\x37\x44\x42\x22\x20\x73\x74\x52\x65\x66\x3a\x64\x6f\x63\x75\x6d\
+\x65\x6e\x74\x49\x44\x3d\x22\x78\x6d\x70\x2e\x64\x69\x64\x3a\x44\
+\x43\x45\x38\x32\x37\x36\x38\x35\x37\x34\x38\x31\x31\x45\x32\x42\
+\x30\x45\x45\x39\x32\x42\x45\x45\x32\x37\x30\x34\x37\x44\x42\x22\
+\x2f\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\
+\x74\x69\x6f\x6e\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\
+\x20\x3c\x2f\x78\x3a\x78\x6d\x70\x6d\x65\x74\x61\x3e\x20\x3c\x3f\
+\x78\x70\x61\x63\x6b\x65\x74\x20\x65\x6e\x64\x3d\x22\x72\x22\x3f\
+\x3e\x97\xa0\x3d\xd8\x00\x00\x02\xa8\x49\x44\x41\x54\x78\xda\x8c\
+\x94\x5f\x48\x53\x51\x1c\xc7\xcf\xbd\xbb\xd7\x3b\xb7\xdd\xdd\x51\
+\x90\xbe\x0c\x62\x9b\x93\xd4\xf5\x10\xc1\x0a\xf4\xc5\x29\xd8\x1f\
+\x29\x46\x64\xd4\x43\xea\x4b\xe4\x43\x42\xf6\x98\xb4\xb5\xad\x3d\
+\xc8\xe8\xc9\xf5\x1e\xf4\x92\xd2\x96\x45\xeb\x21\x59\x96\xc5\x94\
+\xc2\x94\x05\xb2\xf9\x10\x48\xed\xa1\x87\x36\x37\xc1\xfd\xf3\xf6\
+\x3d\xd7\x4d\x4c\x97\x7a\xe0\xcb\xdd\xef\xdc\x7d\x38\xbf\xf3\xfd\
+\x9e\x73\x19\x59\x96\xc9\x41\xc3\x6a\xb5\x0e\x70\x1c\xf7\x98\xc8\
+\x72\xa1\x50\x2c\xde\x60\x0e\x82\xda\x5a\x5b\xef\x69\x75\xba\x31\
+\xb5\x20\x90\x72\xb9\x4c\x72\xeb\xeb\x31\x6e\x3f\xc0\x66\xb3\xb9\
+\x0c\x06\xc3\x03\x51\xaf\x27\x75\x3c\x4f\x0a\x85\x02\x11\x45\x71\
+\xb5\x26\x64\x36\x99\x18\xad\x56\x3b\x06\x60\x44\x02\xa0\xd1\x68\
+\x94\xf9\x63\x0d\x0d\x3f\xfc\x7e\xff\xcc\x1e\xc8\x6c\x36\xab\x74\
+\x3a\xdd\xb8\x24\x49\xb7\x20\x52\x5f\x5f\x4f\x18\x86\x21\x8d\x8d\
+\x8d\x09\xaf\xcf\x37\xb1\x67\x25\xcb\x16\xf0\xd4\x20\x49\xd7\xf5\
+\x55\x00\xf3\x46\xa3\xf1\xbb\xc7\xeb\x0d\xa1\x5e\x41\xf9\x76\x1b\
+\xb2\x58\x2c\x75\x3a\x51\x9c\x04\xd0\xab\x47\x4b\xea\x0a\x60\x32\
+\x99\xbe\x3d\xf4\x78\xa6\x78\x9e\x5f\x46\x39\x09\x15\xb9\x0a\xa0\
+\xc1\xb2\x2f\x01\x74\x29\x80\x5a\x4d\xa8\xa7\xd6\xe6\xe6\x79\xb7\
+\xdb\x1d\x61\x59\x36\x8e\x32\x04\x95\xe9\xff\x19\xb4\x24\x01\x78\
+\x2d\x19\x0c\xed\x7a\x51\xdc\x06\x4e\xda\x6c\xb3\xf7\x47\x47\xa7\
+\xf1\x73\x01\x7a\x05\x6d\x56\xbb\xe2\x90\xc1\x73\x6c\xb8\x5d\xaa\
+\xae\x80\xdc\xce\xd8\xed\xd3\x77\x47\x46\x66\xf1\x7e\x1e\x8a\x40\
+\xff\x84\xc9\xc1\xda\x4e\xec\x45\xb1\x95\xba\x84\xf6\x56\xef\x0c\
+\x0f\x7f\xc2\x3b\x0a\xbd\xab\x15\x09\xdb\xda\xd2\xf2\x91\xe7\x38\
+\x82\xbe\x95\x89\x54\x2a\x65\xbc\xd6\xd7\x77\x16\x27\xe1\xfd\xff\
+\x42\x67\xc7\x83\xc1\x0f\x38\x5b\x0b\xa5\x52\x49\x99\x50\xa9\x54\
+\x24\x9d\x4e\x77\xd7\x09\xc2\x0b\xea\x68\x4d\x08\x56\x7e\x79\xe4\
+\xf7\x4f\xc1\xa9\x39\x0a\xa2\x26\x68\x99\x60\x8f\xbd\x30\x28\xd2\
+\x04\x67\x77\x43\xf4\xc0\xd2\xbe\x2e\x42\xa7\x7c\x5e\x6f\xe7\xe2\
+\xd2\x52\x07\xcd\x27\x9f\xcf\x93\xcc\xda\x1a\xc9\xa4\xd3\x9f\xb3\
+\xb9\xdc\xf9\x64\x32\x99\xd9\x09\x29\x4f\xa8\x07\xb2\x07\x02\x81\
+\xf6\xb9\x58\xcc\x41\xf7\xb8\xb1\xb1\x41\xd6\x00\xa6\x33\x99\xaf\
+\xb9\x5c\xee\x5c\x22\x91\xf8\xbd\x13\xaa\x0e\x07\xd4\xf1\x24\x18\
+\x3c\x1d\x8d\x46\x2f\x28\x20\x56\xcc\x66\xb3\x74\x9f\x71\x3c\x7b\
+\x00\xfe\xdc\x7d\x60\x69\x98\xf9\xdb\x43\x43\x34\xb3\xe2\x9b\x48\
+\xe4\x12\xee\x11\xc3\x6c\xb5\xd2\x06\xcd\xc0\x34\x47\xad\xab\x41\
+\xf3\xc9\x0f\x0c\x0e\x52\xb0\x10\x0e\x87\xaf\x08\x82\xc0\xd2\x0c\
+\xd1\x93\x79\x53\x96\x43\x2a\x97\xcb\x55\xcb\xd5\x5f\xd0\x1f\x5c\
+\xc2\xa3\x88\x20\x15\x8f\xc7\x4f\xe0\xc9\x22\x7d\xb2\x59\x2e\x1f\
+\x61\xf7\xb9\xb8\x8b\xd0\x84\xd3\xe9\x5c\xbe\xd9\xdf\xff\x0c\xdf\
+\x88\x0c\x96\x2b\x75\x75\x77\x87\x99\x43\x7c\x58\x9a\xa0\xab\x10\
+\x5f\xa9\x4b\x87\x81\xe8\x38\x0e\x5d\x86\xb4\xf4\x3c\xfe\x15\x60\
+\x00\x07\x7f\xeb\x18\x9a\x66\x83\x5f\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x9e\x88\xb4\
+\x00\x73\
+\x00\x68\x00\x61\x00\x72\x00\x65\x00\x64\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0a\
+\x0b\x68\x71\x5c\
+\x00\x42\
+\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x10\
+\x09\x8e\x7d\x5c\
+\x00\x4c\
+\x00\x61\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x72\x00\x4c\x00\x69\x00\x73\x00\x74\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x1a\
+\x04\x27\x53\xdc\
+\x00\x53\
+\x00\x69\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x4c\x00\x61\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x72\x00\x44\x00\x65\x00\x6c\
+\x00\x65\x00\x67\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x71\x00\x6d\x00\x6c\
+\x00\x08\
+\x0c\xf7\x59\xc7\
+\x00\x6e\
+\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x08\
+\x07\x9e\x5a\x47\
+\x00\x62\
+\x00\x61\x00\x63\x00\x6b\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x02\
+\x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x21\x19\
+\x00\x00\x00\x12\x00\x02\x00\x00\x00\x02\x00\x00\x00\x06\
+\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xdf\
+\x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x33\x53\
+\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x01\x00\x00\x2d\xf4\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/quick/tutorials/extending/chapter1-basics/app.qml b/examples/quick/tutorials/extending/chapter1-basics/app.qml
new file mode 100644
index 0000000..0605e06
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter1-basics/app.qml
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import Charts 1.0
+import QtQuick 2.0
+
+Item {
+    width: 300; height: 200
+
+    PieChart {
+        id: aPieChart
+        anchors.centerIn: parent
+        width: 100; height: 100
+        name: "A simple pie chart"
+        color: "red"
+    }
+
+    Text {
+        anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
+        text: aPieChart.name
+    }
+}
diff --git a/examples/quick/tutorials/extending/chapter1-basics/chapter1-basics.py b/examples/quick/tutorials/extending/chapter1-basics/chapter1-basics.py
new file mode 100644
index 0000000..ad10048
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter1-basics/chapter1-basics.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty, QRectF, QUrl
+from PyQt5.QtGui import QColor, QGuiApplication, QPainter, QPen
+from PyQt5.QtQml import qmlRegisterType
+from PyQt5.QtQuick import QQuickPaintedItem, QQuickView
+
+
+class PieChart(QQuickPaintedItem):
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @pyqtProperty(QColor)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        self._color = QColor(color)
+
+    def __init__(self, parent=None):
+        super(PieChart, self).__init__(parent)
+
+        self._name = ''
+        self._color = QColor()
+
+    def paint(self, painter):
+        painter.setPen(QPen(self._color, 2))
+        painter.setRenderHints(QPainter.Antialiasing, True)
+
+        rect = QRectF(0, 0, self.width(), self.height()).adjusted(1, 1, -1, -1)
+        painter.drawPie(rect, 90 * 16, 290 * 16)
+
+
+if __name__ == '__main__':
+    import os
+    import sys
+
+    app = QGuiApplication(sys.argv)
+
+    qmlRegisterType(PieChart, "Charts", 1, 0, "PieChart")
+
+    view = QQuickView()
+    view.setResizeMode(QQuickView.SizeRootObjectToView)
+    view.setSource(
+            QUrl.fromLocalFile(
+                    os.path.join(os.path.dirname(__file__),'app.qml')))
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/quick/tutorials/extending/chapter2-methods/app.qml b/examples/quick/tutorials/extending/chapter2-methods/app.qml
new file mode 100644
index 0000000..32faeaa
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter2-methods/app.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import Charts 1.0
+import QtQuick 2.0
+
+Item {
+    width: 300; height: 200
+
+    PieChart {
+        id: aPieChart
+        anchors.centerIn: parent
+        width: 100; height: 100
+        color: "red"
+
+        onChartCleared: console.log("The chart has been cleared")
+    }
+
+    MouseArea {
+        anchors.fill: parent
+        onClicked: aPieChart.clearChart()
+    }
+
+    Text {
+        anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
+        text: "Click anywhere to clear the chart"
+    }
+}
diff --git a/examples/quick/tutorials/extending/chapter2-methods/chapter2-methods.py b/examples/quick/tutorials/extending/chapter2-methods/chapter2-methods.py
new file mode 100644
index 0000000..8f40407
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter2-methods/chapter2-methods.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QRectF, Qt, QUrl
+from PyQt5.QtGui import QColor, QGuiApplication, QPainter, QPen
+from PyQt5.QtQml import qmlRegisterType
+from PyQt5.QtQuick import QQuickPaintedItem, QQuickView
+
+
+class PieChart(QQuickPaintedItem):
+
+    chartCleared = pyqtSignal()
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    @pyqtProperty(QColor)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        self._color = QColor(color)
+
+    def __init__(self, parent=None):
+        super(PieChart, self).__init__(parent)
+
+        self._name = ''
+        self._color = QColor()
+
+    def paint(self, painter):
+        painter.setPen(QPen(self._color, 2))
+        painter.setRenderHints(QPainter.Antialiasing, True)
+
+        rect = QRectF(0, 0, self.width(), self.height()).adjusted(1, 1, -1, -1)
+        painter.drawPie(rect, 90 * 16, 290 * 16)
+
+    @pyqtSlot()
+    def clearChart(self):
+        self.color = QColor(Qt.transparent)
+        self.update()
+
+        self.chartCleared.emit()
+
+
+if __name__ == '__main__':
+    import os
+    import sys
+
+    app = QGuiApplication(sys.argv)
+
+    qmlRegisterType(PieChart, "Charts", 1, 0, "PieChart")
+
+    view = QQuickView()
+    view.setResizeMode(QQuickView.SizeRootObjectToView)
+    view.setSource(
+            QUrl.fromLocalFile(
+                    os.path.join(os.path.dirname(__file__),'app.qml')))
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/quick/tutorials/extending/chapter3-bindings/app.qml b/examples/quick/tutorials/extending/chapter3-bindings/app.qml
new file mode 100644
index 0000000..d530da5
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter3-bindings/app.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import Charts 1.0
+import QtQuick 2.0
+
+Item {
+    width: 300; height: 200
+
+    Row {
+        anchors.centerIn: parent
+        spacing: 20
+
+        PieChart {
+            id: chartA
+            width: 100; height: 100
+            color: "red"
+        }
+
+        PieChart {
+            id: chartB
+            width: 100; height: 100
+            color: chartA.color
+        }
+    }
+
+    MouseArea {
+        anchors.fill: parent
+        onClicked: { chartA.color = "blue" }
+    }
+
+    Text {
+        anchors { bottom: parent.bottom; horizontalCenter: parent.horizontalCenter; bottomMargin: 20 }
+        text: "Click anywhere to change the chart color"
+    }
+}
diff --git a/examples/quick/tutorials/extending/chapter3-bindings/chapter3-bindings.py b/examples/quick/tutorials/extending/chapter3-bindings/chapter3-bindings.py
new file mode 100644
index 0000000..386df4c
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter3-bindings/chapter3-bindings.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QRectF, Qt, QUrl
+from PyQt5.QtGui import QColor, QGuiApplication, QPainter, QPen
+from PyQt5.QtQml import qmlRegisterType
+from PyQt5.QtQuick import QQuickPaintedItem, QQuickView
+
+
+class PieChart(QQuickPaintedItem):
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    colorChanged = pyqtSignal()
+
+    @pyqtProperty(QColor, notify=colorChanged)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        if self._color != color:
+            self._color = QColor(color)
+            self.update()
+            self.colorChanged.emit()
+
+    def __init__(self, parent=None):
+        super(PieChart, self).__init__(parent)
+
+        self._name = ''
+        self._color = QColor()
+
+    def paint(self, painter):
+        painter.setPen(QPen(self._color, 2))
+        painter.setRenderHints(QPainter.Antialiasing, True)
+
+        rect = QRectF(0, 0, self.width(), self.height()).adjusted(1, 1, -1, -1)
+        painter.drawPie(rect, 90 * 16, 290 * 16)
+
+    @pyqtSlot()
+    def clearChart(self):
+        self.color = QColor(Qt.transparent)
+        self.update()
+
+
+if __name__ == '__main__':
+    import os
+    import sys
+
+    app = QGuiApplication(sys.argv)
+
+    qmlRegisterType(PieChart, "Charts", 1, 0, "PieChart")
+
+    view = QQuickView()
+    view.setResizeMode(QQuickView.SizeRootObjectToView)
+    view.setSource(
+            QUrl.fromLocalFile(
+                    os.path.join(os.path.dirname(__file__),'app.qml')))
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/quick/tutorials/extending/chapter4-customPropertyTypes/app.qml b/examples/quick/tutorials/extending/chapter4-customPropertyTypes/app.qml
new file mode 100644
index 0000000..378fa9c
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter4-customPropertyTypes/app.qml
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import Charts 1.0
+import QtQuick 2.0
+
+Item {
+    width: 300; height: 200
+
+    PieChart {
+        id: chart
+        anchors.centerIn: parent
+        width: 100; height: 100
+
+        pieSlice: PieSlice { 
+            anchors.fill: parent
+            color: "red" 
+        }
+    }
+
+    Component.onCompleted: console.log("The pie is colored " + chart.pieSlice.color)
+}
diff --git a/examples/quick/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.py b/examples/quick/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.py
new file mode 100644
index 0000000..fa1aaa1
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter4-customPropertyTypes/chapter4-customPropertyTypes.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty, QRectF, QUrl
+from PyQt5.QtGui import QColor, QGuiApplication, QPainter, QPen
+from PyQt5.QtQml import qmlRegisterType
+from PyQt5.QtQuick import QQuickItem, QQuickPaintedItem, QQuickView
+
+
+class PieSlice(QQuickPaintedItem):
+
+    @pyqtProperty(QColor)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        self._color = QColor(color)
+
+    def __init__(self, parent=None):
+        super(PieSlice, self).__init__(parent)
+
+        self._color = QColor()
+
+    def paint(self, painter):
+        painter.setPen(QPen(self._color, 2))
+        painter.setRenderHints(QPainter.Antialiasing, True)
+
+        rect = QRectF(0, 0, self.width(), self.height()).adjusted(1, 1, -1, -1)
+        painter.drawPie(rect, 90 * 16, 290 * 16)
+
+
+class PieChart(QQuickItem):
+
+    @pyqtProperty(PieSlice)
+    def pieSlice(self):
+        return self._pieSlice
+
+    @pieSlice.setter
+    def pieSlice(self, pieSlice):
+        self._pieSlice = pieSlice
+        pieSlice.setParentItem(self)
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    def __init__(self, parent=None):
+        super(PieChart, self).__init__(parent)
+
+        self._pieSlice = None
+        self._name = ''
+
+
+if __name__ == '__main__':
+    import os
+    import sys
+
+    app = QGuiApplication(sys.argv)
+
+    qmlRegisterType(PieChart, "Charts", 1, 0, "PieChart")
+    qmlRegisterType(PieSlice, "Charts", 1, 0, "PieSlice")
+
+    view = QQuickView()
+    view.setResizeMode(QQuickView.SizeRootObjectToView)
+    view.setSource(
+            QUrl.fromLocalFile(
+                    os.path.join(os.path.dirname(__file__),'app.qml')))
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/quick/tutorials/extending/chapter5-listproperties/app.qml b/examples/quick/tutorials/extending/chapter5-listproperties/app.qml
new file mode 100644
index 0000000..ecdd4bf
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter5-listproperties/app.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import Charts 1.0
+import QtQuick 2.0
+
+Item {
+    width: 300; height: 200
+
+    PieChart {
+        anchors.centerIn: parent
+        width: 100; height: 100
+
+        slices: [
+            PieSlice { 
+                anchors.fill: parent
+                color: "red"
+                fromAngle: 0; angleSpan: 110 
+            },
+            PieSlice { 
+                anchors.fill: parent
+                color: "black"
+                fromAngle: 110; angleSpan: 50 
+            },
+            PieSlice { 
+                anchors.fill: parent
+                color: "blue"
+                fromAngle: 160; angleSpan: 100
+            }
+        ]
+    }
+}
diff --git a/examples/quick/tutorials/extending/chapter5-listproperties/chapter5-listproperties.py b/examples/quick/tutorials/extending/chapter5-listproperties/chapter5-listproperties.py
new file mode 100644
index 0000000..6d92587
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter5-listproperties/chapter5-listproperties.py
@@ -0,0 +1,128 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty, QRectF, QUrl
+from PyQt5.QtGui import QColor, QGuiApplication, QPainter, QPen
+from PyQt5.QtQml import qmlRegisterType, QQmlListProperty
+from PyQt5.QtQuick import QQuickItem, QQuickPaintedItem, QQuickView
+
+
+class PieSlice(QQuickPaintedItem):
+
+    @pyqtProperty(QColor)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        self._color = QColor(color)
+
+    @pyqtProperty(int)
+    def fromAngle(self):
+        return self._fromAngle
+
+    @fromAngle.setter
+    def fromAngle(self, fromAngle):
+        self._fromAngle = fromAngle
+
+    @pyqtProperty(int)
+    def angleSpan(self):
+        return self._angleSpan
+
+    @angleSpan.setter
+    def angleSpan(self, angleSpan):
+        self._angleSpan = angleSpan
+
+    def __init__(self, parent=None):
+        super(PieSlice, self).__init__(parent)
+
+        self._color = QColor()
+        self._fromAngle = 0
+        self._angleSpan = 0
+
+    def paint(self, painter):
+        painter.setPen(QPen(self._color, 2))
+        painter.setRenderHints(QPainter.Antialiasing, True)
+
+        rect = QRectF(0, 0, self.width(), self.height()).adjusted(1, 1, -1, -1)
+        painter.drawPie(rect, self._fromAngle * 16, self._angleSpan * 16)
+
+
+class PieChart(QQuickItem):
+
+    @pyqtProperty(QQmlListProperty)
+    def slices(self):
+        return QQmlListProperty(PieSlice, self,
+                append=lambda pie_ch, pie_sl: pie_sl.setParentItem(pie_ch))
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    def __init__(self, parent=None):
+        super(PieChart, self).__init__(parent)
+
+        self._name = ''
+
+
+if __name__ == '__main__':
+    import os
+    import sys
+
+    app = QGuiApplication(sys.argv)
+
+    qmlRegisterType(PieChart, "Charts", 1, 0, "PieChart")
+    qmlRegisterType(PieSlice, "Charts", 1, 0, "PieSlice")
+
+    view = QQuickView()
+    view.setResizeMode(QQuickView.SizeRootObjectToView)
+    view.setSource(
+            QUrl.fromLocalFile(
+                    os.path.join(os.path.dirname(__file__),'app.qml')))
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/quick/tutorials/extending/chapter6-plugins/Charts/chartsplugin.py b/examples/quick/tutorials/extending/chapter6-plugins/Charts/chartsplugin.py
new file mode 100644
index 0000000..8189051
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter6-plugins/Charts/chartsplugin.py
@@ -0,0 +1,51 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtQml import qmlRegisterType, QQmlExtensionPlugin
+
+from piechart import PieChart
+from pieslice import PieSlice
+
+
+class ChartsPlugin(QQmlExtensionPlugin):
+
+    def registerTypes(self, uri):
+        qmlRegisterType(PieChart, "Charts", 1, 0, "PieChart")
+        qmlRegisterType(PieSlice, "Charts", 1, 0, "PieSlice")
diff --git a/examples/quick/tutorials/extending/chapter6-plugins/Charts/piechart.py b/examples/quick/tutorials/extending/chapter6-plugins/Charts/piechart.py
new file mode 100644
index 0000000..65ec16d
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter6-plugins/Charts/piechart.py
@@ -0,0 +1,66 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty
+from PyQt5.QtQml import QQmlListProperty
+from PyQt5.QtQuick import QQuickItem
+
+from pieslice import PieSlice
+
+
+class PieChart(QQuickItem):
+
+    @pyqtProperty(QQmlListProperty)
+    def slices(self):
+        return QQmlListProperty(PieSlice, self,
+                append=lambda pie_ch, pie_sl: pie_sl.setParentItem(pie_ch))
+
+    @pyqtProperty(str)
+    def name(self):
+        return self._name
+
+    @name.setter
+    def name(self, name):
+        self._name = name
+
+    def __init__(self, parent=None):
+        super(PieChart, self).__init__(parent)
+
+        self._name = ''
diff --git a/examples/quick/tutorials/extending/chapter6-plugins/Charts/pieslice.py b/examples/quick/tutorials/extending/chapter6-plugins/Charts/pieslice.py
new file mode 100644
index 0000000..4e94a9b
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter6-plugins/Charts/pieslice.py
@@ -0,0 +1,84 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+##     of its contributors may be used to endorse or promote products derived
+##     from this software without specific prior written permission.
+##
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtProperty, QRectF
+from PyQt5.QtGui import QColor, QPainter, QPen
+from PyQt5.QtQuick import QQuickPaintedItem
+
+
+class PieSlice(QQuickPaintedItem):
+
+    @pyqtProperty(QColor)
+    def color(self):
+        return self._color
+
+    @color.setter
+    def color(self, color):
+        self._color = QColor(color)
+
+    @pyqtProperty(int)
+    def fromAngle(self):
+        return self._fromAngle
+
+    @fromAngle.setter
+    def fromAngle(self, fromAngle):
+        self._fromAngle = fromAngle
+
+    @pyqtProperty(int)
+    def angleSpan(self):
+        return self._angleSpan
+
+    @angleSpan.setter
+    def angleSpan(self, angleSpan):
+        self._angleSpan = angleSpan
+
+    def __init__(self, parent=None):
+        super(PieSlice, self).__init__(parent)
+
+        self._color = QColor()
+        self._fromAngle = 0
+        self._angleSpan = 0
+
+    def paint(self, painter):
+        painter.setPen(QPen(self._color, 2))
+        painter.setRenderHints(QPainter.Antialiasing, True)
+
+        rect = QRectF(0, 0, self.width(), self.height()).adjusted(1, 1, -1, -1)
+        painter.drawPie(rect, self._fromAngle * 16, self._angleSpan * 16)
diff --git a/examples/quick/tutorials/extending/chapter6-plugins/Charts/qmldir b/examples/quick/tutorials/extending/chapter6-plugins/Charts/qmldir
new file mode 100644
index 0000000..33aed0a
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter6-plugins/Charts/qmldir
@@ -0,0 +1,2 @@
+module Charts
+plugin pyqt5qmlplugin
diff --git a/examples/quick/tutorials/extending/chapter6-plugins/app.qml b/examples/quick/tutorials/extending/chapter6-plugins/app.qml
new file mode 100644
index 0000000..f74b264
--- /dev/null
+++ b/examples/quick/tutorials/extending/chapter6-plugins/app.qml
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import Charts 1.0
+
+Item {
+    width: 300; height: 200
+
+    PieChart {
+        anchors.centerIn: parent
+        width: 100; height: 100
+
+        slices: [
+            PieSlice { 
+                anchors.fill: parent
+                color: "red"
+                fromAngle: 0; angleSpan: 110 
+            },
+            PieSlice { 
+                anchors.fill: parent
+                color: "black"
+                fromAngle: 110; angleSpan: 50 
+            },
+            PieSlice { 
+                anchors.fill: parent
+                color: "blue"
+                fromAngle: 160; angleSpan: 100
+            }
+        ]
+    }
+}
diff --git a/examples/richtext/README b/examples/richtext/README
new file mode 100644
index 0000000..ed8750c
--- /dev/null
+++ b/examples/richtext/README
@@ -0,0 +1,28 @@
+PyQt provides powerful document-oriented rich text engine that supports Unicode
+and right-to-left scripts. Documents can be manipulated using a cursor-based
+API, and their contents can be imported and exported as both HTML and in a
+custom XML format.
+
+Text is rendered using anti-aliased outline fonts to provide the best
+possible on-screen representation.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/richtext/calendar.py b/examples/richtext/calendar.py
new file mode 100755
index 0000000..ad50096
--- /dev/null
+++ b/examples/richtext/calendar.py
@@ -0,0 +1,190 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDate, Qt
+from PyQt5.QtGui import (QColor, QFont, QTextCharFormat, QTextLength,
+        QTextTableFormat)
+from PyQt5.QtWidgets import (QApplication, QComboBox, QDateTimeEdit,
+        QHBoxLayout, QLabel, QMainWindow, QSpinBox, QTextBrowser, QVBoxLayout,
+        QWidget)
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.selectedDate = QDate.currentDate()
+        self.fontSize = 10
+
+        centralWidget = QWidget()
+
+        dateLabel = QLabel("Date:")
+        monthCombo = QComboBox()
+
+        for month in range(1, 13):
+            monthCombo.addItem(QDate.longMonthName(month))
+
+        yearEdit = QDateTimeEdit()
+        yearEdit.setDisplayFormat('yyyy')
+        yearEdit.setDateRange(QDate(1753, 1, 1), QDate(8000, 1, 1))
+
+        monthCombo.setCurrentIndex(self.selectedDate.month() - 1)
+        yearEdit.setDate(self.selectedDate)
+
+        self.fontSizeLabel = QLabel("Font size:")
+        self.fontSizeSpinBox = QSpinBox()
+        self.fontSizeSpinBox.setRange(1, 64)
+        self.fontSizeSpinBox.setValue(10)
+
+        self.editor = QTextBrowser()
+        self.insertCalendar()
+
+        monthCombo.activated.connect(self.setMonth)
+        yearEdit.dateChanged.connect(self.setYear)
+        self.fontSizeSpinBox.valueChanged.connect(self.setfontSize)
+
+        controlsLayout = QHBoxLayout()
+        controlsLayout.addWidget(dateLabel)
+        controlsLayout.addWidget(monthCombo)
+        controlsLayout.addWidget(yearEdit)
+        controlsLayout.addSpacing(24)
+        controlsLayout.addWidget(self.fontSizeLabel)
+        controlsLayout.addWidget(self.fontSizeSpinBox)
+        controlsLayout.addStretch(1)
+
+        centralLayout = QVBoxLayout()
+        centralLayout.addLayout(controlsLayout)
+        centralLayout.addWidget(self.editor, 1)
+        centralWidget.setLayout(centralLayout)
+
+        self.setCentralWidget(centralWidget)
+
+    def insertCalendar(self):
+        self.editor.clear()
+        cursor = self.editor.textCursor()
+        cursor.beginEditBlock()
+
+        date = QDate(self.selectedDate.year(), self.selectedDate.month(), 1)
+
+        tableFormat = QTextTableFormat()
+        tableFormat.setAlignment(Qt.AlignHCenter)
+        tableFormat.setBackground(QColor('#e0e0e0'))
+        tableFormat.setCellPadding(2)
+        tableFormat.setCellSpacing(4)
+        constraints = [QTextLength(QTextLength.PercentageLength, 14),
+                       QTextLength(QTextLength.PercentageLength, 14),
+                       QTextLength(QTextLength.PercentageLength, 14),
+                       QTextLength(QTextLength.PercentageLength, 14),
+                       QTextLength(QTextLength.PercentageLength, 14),
+                       QTextLength(QTextLength.PercentageLength, 14),
+                       QTextLength(QTextLength.PercentageLength, 14)]
+
+        tableFormat.setColumnWidthConstraints(constraints)
+
+        table = cursor.insertTable(1, 7, tableFormat)
+
+        frame = cursor.currentFrame()
+        frameFormat = frame.frameFormat()
+        frameFormat.setBorder(1)
+        frame.setFrameFormat(frameFormat)
+
+        format = cursor.charFormat()
+        format.setFontPointSize(self.fontSize)
+
+        boldFormat = QTextCharFormat(format)
+        boldFormat.setFontWeight(QFont.Bold)
+
+        highlightedFormat = QTextCharFormat(boldFormat)
+        highlightedFormat.setBackground(Qt.yellow)
+
+        for weekDay in range(1, 8):
+            cell = table.cellAt(0, weekDay-1)
+            cellCursor = cell.firstCursorPosition()
+            cellCursor.insertText(QDate.longDayName(weekDay), boldFormat)
+
+        table.insertRows(table.rows(), 1)
+
+        while date.month() == self.selectedDate.month():
+            weekDay = date.dayOfWeek()
+            cell = table.cellAt(table.rows()-1, weekDay-1)
+            cellCursor = cell.firstCursorPosition()
+
+            if date == QDate.currentDate():
+                cellCursor.insertText(str(date.day()), highlightedFormat)
+            else:
+                cellCursor.insertText(str(date.day()), format)
+
+            date = date.addDays(1)
+
+            if weekDay == 7 and date.month() == self.selectedDate.month():
+                table.insertRows(table.rows(), 1)
+
+        cursor.endEditBlock()
+
+        self.setWindowTitle("Calendar for %s %d" % (QDate.longMonthName(self.selectedDate.month()), self.selectedDate.year()))
+
+    def setfontSize(self, size):
+        self.fontSize = size
+        self.insertCalendar()
+
+    def setMonth(self, month):
+        self.selectedDate = QDate(self.selectedDate.year(), month + 1,
+                self.selectedDate.day())
+        self.insertCalendar()
+
+    def setYear(self, date):
+        self.selectedDate = QDate(date.year(), self.selectedDate.month(),
+                self.selectedDate.day())
+        self.insertCalendar()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.resize(640, 256)
+    window.show()
+    sys.exit(app.exec_())    
diff --git a/examples/richtext/orderform.py b/examples/richtext/orderform.py
new file mode 100755
index 0000000..b6efe28
--- /dev/null
+++ b/examples/richtext/orderform.py
@@ -0,0 +1,303 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDate, Qt
+from PyQt5.QtGui import (QFont, QTextCharFormat, QTextCursor, QTextFrameFormat,
+        QTextLength, QTextTableFormat)
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QDialog,
+        QDialogButtonBox, QGridLayout, QLabel, QLineEdit, QMainWindow,
+        QMessageBox, QMenu, QTableWidget, QTableWidgetItem, QTabWidget,
+        QTextEdit)
+from PyQt5.QtPrintSupport import QAbstractPrintDialog, QPrintDialog, QPrinter
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        fileMenu = QMenu("&File", self)
+        newAction = fileMenu.addAction("&New...")
+        newAction.setShortcut("Ctrl+N")
+        self.printAction = fileMenu.addAction("&Print...", self.printFile)
+        self.printAction.setShortcut("Ctrl+P")
+        self.printAction.setEnabled(False)
+        quitAction = fileMenu.addAction("E&xit")
+        quitAction.setShortcut("Ctrl+Q")
+        self.menuBar().addMenu(fileMenu)
+
+        self.letters = QTabWidget()
+
+        newAction.triggered.connect(self.openDialog)
+        quitAction.triggered.connect(self.close)
+
+        self.setCentralWidget(self.letters)
+        self.setWindowTitle("Order Form")
+
+    def createLetter(self, name, address, orderItems, sendOffers):
+        editor = QTextEdit()
+        tabIndex = self.letters.addTab(editor, name)
+        self.letters.setCurrentIndex(tabIndex)
+
+        cursor = editor.textCursor()
+        cursor.movePosition(QTextCursor.Start)
+        topFrame = cursor.currentFrame()
+        topFrameFormat = topFrame.frameFormat()
+        topFrameFormat.setPadding(16)
+        topFrame.setFrameFormat(topFrameFormat)
+
+        textFormat = QTextCharFormat()
+        boldFormat = QTextCharFormat()
+        boldFormat.setFontWeight(QFont.Bold)
+
+        referenceFrameFormat = QTextFrameFormat()
+        referenceFrameFormat.setBorder(1)
+        referenceFrameFormat.setPadding(8)
+        referenceFrameFormat.setPosition(QTextFrameFormat.FloatRight)
+        referenceFrameFormat.setWidth(QTextLength(QTextLength.PercentageLength, 40))
+        cursor.insertFrame(referenceFrameFormat)
+
+        cursor.insertText("A company", boldFormat)
+        cursor.insertBlock()
+        cursor.insertText("321 City Street")
+        cursor.insertBlock()
+        cursor.insertText("Industry Park")
+        cursor.insertBlock()
+        cursor.insertText("Another country")
+
+        cursor.setPosition(topFrame.lastPosition())
+
+        cursor.insertText(name, textFormat)
+        for line in address.split("\n"):
+            cursor.insertBlock()
+            cursor.insertText(line)
+
+        cursor.insertBlock()
+        cursor.insertBlock()
+
+        date = QDate.currentDate()
+        cursor.insertText("Date: %s" % date.toString('d MMMM yyyy'),
+                textFormat)
+        cursor.insertBlock()
+
+        bodyFrameFormat = QTextFrameFormat()
+        bodyFrameFormat.setWidth(QTextLength(QTextLength.PercentageLength, 100))
+        cursor.insertFrame(bodyFrameFormat)
+
+        cursor.insertText("I would like to place an order for the following "
+                "items:", textFormat)
+        cursor.insertBlock()
+        cursor.insertBlock()
+
+        orderTableFormat = QTextTableFormat()
+        orderTableFormat.setAlignment(Qt.AlignHCenter)
+        orderTable = cursor.insertTable(1, 2, orderTableFormat)
+
+        orderFrameFormat = cursor.currentFrame().frameFormat()
+        orderFrameFormat.setBorder(1)
+        cursor.currentFrame().setFrameFormat(orderFrameFormat)
+
+        cursor = orderTable.cellAt(0, 0).firstCursorPosition()
+        cursor.insertText("Product", boldFormat)
+        cursor = orderTable.cellAt(0, 1).firstCursorPosition()
+        cursor.insertText("Quantity", boldFormat)
+
+        for text, quantity in orderItems:
+            row = orderTable.rows()
+
+            orderTable.insertRows(row, 1)
+            cursor = orderTable.cellAt(row, 0).firstCursorPosition()
+            cursor.insertText(text, textFormat)
+            cursor = orderTable.cellAt(row, 1).firstCursorPosition()
+            cursor.insertText(str(quantity), textFormat)
+
+        cursor.setPosition(topFrame.lastPosition())
+
+        cursor.insertBlock()
+
+        cursor.insertText("Please update my records to take account of the "
+                "following privacy information:")
+        cursor.insertBlock()
+
+        offersTable = cursor.insertTable(2, 2)
+
+        cursor = offersTable.cellAt(0, 1).firstCursorPosition()
+        cursor.insertText("I want to receive more information about your "
+                "company's products and special offers.", textFormat)
+        cursor = offersTable.cellAt(1, 1).firstCursorPosition()
+        cursor.insertText("I do not want to receive any promotional "
+                "information from your company.", textFormat)
+
+        if sendOffers:
+            cursor = offersTable.cellAt(0, 0).firstCursorPosition()
+        else:
+            cursor = offersTable.cellAt(1, 0).firstCursorPosition()
+
+        cursor.insertText('X', boldFormat)
+
+        cursor.setPosition(topFrame.lastPosition())
+        cursor.insertBlock()
+        cursor.insertText("Sincerely,", textFormat)
+        cursor.insertBlock()
+        cursor.insertBlock()
+        cursor.insertBlock()
+        cursor.insertText(name)
+
+        self.printAction.setEnabled(True)
+
+    def createSample(self):
+        dialog = DetailsDialog('Dialog with default values', self)
+        self.createLetter('Mr Smith',
+                '12 High Street\nSmall Town\nThis country',
+                dialog.orderItems(), True)
+
+    def openDialog(self):
+        dialog = DetailsDialog("Enter Customer Details", self)
+
+        if dialog.exec_() == QDialog.Accepted:
+            self.createLetter(dialog.senderName(), dialog.senderAddress(),
+                    dialog.orderItems(), dialog.sendOffers())
+
+    def printFile(self):
+        editor = self.letters.currentWidget()
+        printer = QPrinter()
+
+        dialog = QPrintDialog(printer, self)
+        dialog.setWindowTitle("Print Document")
+
+        if editor.textCursor().hasSelection():
+            dialog.addEnabledOption(QAbstractPrintDialog.PrintSelection)
+
+        if dialog.exec_() != QDialog.Accepted:
+            return
+
+        editor.print_(printer)
+
+
+class DetailsDialog(QDialog):
+    def __init__(self, title, parent):
+        super(DetailsDialog, self).__init__(parent)
+
+        self.items = ("T-shirt", "Badge", "Reference book", "Coffee cup")
+
+        nameLabel = QLabel("Name:")
+        addressLabel = QLabel("Address:")
+        addressLabel.setAlignment(Qt.AlignLeft | Qt.AlignTop)
+
+        self.nameEdit = QLineEdit()
+        self.addressEdit = QTextEdit()
+        self.offersCheckBox = QCheckBox(
+                "Send information about products and special offers:")
+
+        self.setupItemsTable()
+
+        buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+
+        buttonBox.accepted.connect(self.verify)
+        buttonBox.rejected.connect(self.reject)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(nameLabel, 0, 0)
+        mainLayout.addWidget(self.nameEdit, 0, 1)
+        mainLayout.addWidget(addressLabel, 1, 0)
+        mainLayout.addWidget(self.addressEdit, 1, 1)
+        mainLayout.addWidget(self.itemsTable, 0, 2, 2, 1)
+        mainLayout.addWidget(self.offersCheckBox, 2, 1, 1, 2)
+        mainLayout.addWidget(buttonBox, 3, 0, 1, 3)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle(title)
+
+    def setupItemsTable(self):
+        self.itemsTable = QTableWidget(len(self.items), 2)
+
+        for row, item in enumerate(self.items):
+            name = QTableWidgetItem(item)
+            name.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable)
+            self.itemsTable.setItem(row, 0, name)
+            quantity = QTableWidgetItem('1')
+            self.itemsTable.setItem(row, 1, quantity)
+
+    def orderItems(self):
+        orderList = []
+
+        for row in range(len(self.items)):
+            text = self.itemsTable.item(row, 0).text()
+            quantity = int(self.itemsTable.item(row, 1).data(Qt.DisplayRole))
+            orderList.append((text, max(0, quantity)))
+
+        return orderList
+
+    def senderName(self):
+        return self.nameEdit.text()
+
+    def senderAddress(self):
+        return self.addressEdit.toPlainText()
+
+    def sendOffers(self):
+        return self.offersCheckBox.isChecked()
+
+    def verify(self):
+        if self.nameEdit.text() and self.addressEdit.toPlainText():
+            self.accept()
+            return
+
+        answer = QMessageBox.warning(self, "Incomplete Form",
+                "The form does not contain all the necessary information.\n"
+                "Do you want to discard it?",
+                QMessageBox.Yes, QMessageBox.No)
+
+        if answer == QMessageBox.Yes:
+            self.reject()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.resize(640, 480)
+    window.show()
+    window.createSample()
+    sys.exit(app.exec_())
diff --git a/examples/richtext/syntaxhighlighter.py b/examples/richtext/syntaxhighlighter.py
new file mode 100755
index 0000000..ba8f4a1
--- /dev/null
+++ b/examples/richtext/syntaxhighlighter.py
@@ -0,0 +1,204 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFile, QRegExp, Qt
+from PyQt5.QtGui import QFont, QSyntaxHighlighter, QTextCharFormat
+from PyQt5.QtWidgets import (QApplication, QFileDialog, QMainWindow, QMenu,
+        QMessageBox, QTextEdit)
+
+
+class MainWindow(QMainWindow):
+    def __init__(self, parent=None):
+        super(MainWindow, self).__init__(parent)
+
+        self.setupFileMenu()
+        self.setupHelpMenu()
+        self.setupEditor()
+
+        self.setCentralWidget(self.editor)
+        self.setWindowTitle("Syntax Highlighter")
+
+    def about(self):
+        QMessageBox.about(self, "About Syntax Highlighter",
+                "<p>The <b>Syntax Highlighter</b> example shows how to " \
+                "perform simple syntax highlighting by subclassing the " \
+                "QSyntaxHighlighter class and describing highlighting " \
+                "rules using regular expressions.</p>")
+
+    def newFile(self):
+        self.editor.clear()
+
+    def openFile(self, path=None):
+        if not path:
+            path, _ = QFileDialog.getOpenFileName(self, "Open File", '',
+                    "C++ Files (*.cpp *.h)")
+
+        if path:
+            inFile = QFile(path)
+            if inFile.open(QFile.ReadOnly | QFile.Text):
+                text = inFile.readAll()
+
+                try:
+                    # Python v3.
+                    text = str(text, encoding='ascii')
+                except TypeError:
+                    # Python v2.
+                    text = str(text)
+
+                self.editor.setPlainText(text)
+
+    def setupEditor(self):
+        font = QFont()
+        font.setFamily('Courier')
+        font.setFixedPitch(True)
+        font.setPointSize(10)
+
+        self.editor = QTextEdit()
+        self.editor.setFont(font)
+
+        self.highlighter = Highlighter(self.editor.document())
+
+    def setupFileMenu(self):
+        fileMenu = QMenu("&File", self)
+        self.menuBar().addMenu(fileMenu)
+
+        fileMenu.addAction("&New...", self.newFile, "Ctrl+N")
+        fileMenu.addAction("&Open...", self.openFile, "Ctrl+O")
+        fileMenu.addAction("E&xit", QApplication.instance().quit, "Ctrl+Q")
+
+    def setupHelpMenu(self):
+        helpMenu = QMenu("&Help", self)
+        self.menuBar().addMenu(helpMenu)
+
+        helpMenu.addAction("&About", self.about)
+        helpMenu.addAction("About &Qt", QApplication.instance().aboutQt)
+
+
+class Highlighter(QSyntaxHighlighter):
+    def __init__(self, parent=None):
+        super(Highlighter, self).__init__(parent)
+
+        keywordFormat = QTextCharFormat()
+        keywordFormat.setForeground(Qt.darkBlue)
+        keywordFormat.setFontWeight(QFont.Bold)
+
+        keywordPatterns = ["\\bchar\\b", "\\bclass\\b", "\\bconst\\b",
+                "\\bdouble\\b", "\\benum\\b", "\\bexplicit\\b", "\\bfriend\\b",
+                "\\binline\\b", "\\bint\\b", "\\blong\\b", "\\bnamespace\\b",
+                "\\boperator\\b", "\\bprivate\\b", "\\bprotected\\b",
+                "\\bpublic\\b", "\\bshort\\b", "\\bsignals\\b", "\\bsigned\\b",
+                "\\bslots\\b", "\\bstatic\\b", "\\bstruct\\b",
+                "\\btemplate\\b", "\\btypedef\\b", "\\btypename\\b",
+                "\\bunion\\b", "\\bunsigned\\b", "\\bvirtual\\b", "\\bvoid\\b",
+                "\\bvolatile\\b"]
+
+        self.highlightingRules = [(QRegExp(pattern), keywordFormat)
+                for pattern in keywordPatterns]
+
+        classFormat = QTextCharFormat()
+        classFormat.setFontWeight(QFont.Bold)
+        classFormat.setForeground(Qt.darkMagenta)
+        self.highlightingRules.append((QRegExp("\\bQ[A-Za-z]+\\b"),
+                classFormat))
+
+        singleLineCommentFormat = QTextCharFormat()
+        singleLineCommentFormat.setForeground(Qt.red)
+        self.highlightingRules.append((QRegExp("//[^\n]*"),
+                singleLineCommentFormat))
+
+        self.multiLineCommentFormat = QTextCharFormat()
+        self.multiLineCommentFormat.setForeground(Qt.red)
+
+        quotationFormat = QTextCharFormat()
+        quotationFormat.setForeground(Qt.darkGreen)
+        self.highlightingRules.append((QRegExp("\".*\""), quotationFormat))
+
+        functionFormat = QTextCharFormat()
+        functionFormat.setFontItalic(True)
+        functionFormat.setForeground(Qt.blue)
+        self.highlightingRules.append((QRegExp("\\b[A-Za-z0-9_]+(?=\\()"),
+                functionFormat))
+
+        self.commentStartExpression = QRegExp("/\\*")
+        self.commentEndExpression = QRegExp("\\*/")
+
+    def highlightBlock(self, text):
+        for pattern, format in self.highlightingRules:
+            expression = QRegExp(pattern)
+            index = expression.indexIn(text)
+            while index >= 0:
+                length = expression.matchedLength()
+                self.setFormat(index, length, format)
+                index = expression.indexIn(text, index + length)
+
+        self.setCurrentBlockState(0)
+
+        startIndex = 0
+        if self.previousBlockState() != 1:
+            startIndex = self.commentStartExpression.indexIn(text)
+
+        while startIndex >= 0:
+            endIndex = self.commentEndExpression.indexIn(text, startIndex)
+
+            if endIndex == -1:
+                self.setCurrentBlockState(1)
+                commentLength = len(text) - startIndex
+            else:
+                commentLength = endIndex - startIndex + self.commentEndExpression.matchedLength()
+
+            self.setFormat(startIndex, commentLength,
+                    self.multiLineCommentFormat)
+            startIndex = self.commentStartExpression.indexIn(text,
+                    startIndex + commentLength);
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.resize(640, 512)
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/richtext/textedit/example.html b/examples/richtext/textedit/example.html
new file mode 100644
index 0000000..6327b5f
--- /dev/null
+++ b/examples/richtext/textedit/example.html
@@ -0,0 +1,79 @@
+<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>QTextEdit Demonstration</title><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt; font-weight:600;">QTextEdit</span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The QTextEdit widget is an advanced editor that supports formatted rich text. It can be used to display HTML and other rich document formats. Internally, QTextEdit uses the QTextDocument class to describe both the high-level structure of each document and the low-level formatting of paragraphs.</span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;">If you are viewing this document in the <span style=" font-style:italic;">textedit</span> demo, you can edit this document to explore Qt's rich text editing features. We have included some comments in each of the following sections to encourage you to experiment.  </p>
+<p style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:18pt; font-weight:600;"><span style=" font-size:16pt;">Font and Paragraph Styles</span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">QTextEdit supports </span><span style=" font-size:11pt; font-weight:600;">bold</span><span style=" font-size:11pt;">, </span><span style=" font-size:11pt; font-style:italic;">italic</span><span style=" font-size:11pt;">, and </span><span style=" font-size:11pt; text-decoration: underline;">underlined</span><span style=" fo [...]
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;">Paragraphs can be formatted so that the text is left-aligned, right-aligned, centered, or fully justified.</p>
+<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-style:italic;">Try changing the alignment of some text and resize the editor to see how the text layout changes.</span> </p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Lists</span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt; font-weight:600;"><span style=" font-size:11pt; font-weight:400;">Different kinds of lists can be included in rich text documents. Standard bullet lists can be nested, using different symbols for each level of the list: </span></p>
+<ul style="-qt-list-indent: 1;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Disc symbols are typically used for top-level list items. </li></ul>
+<ul type=circle style="-qt-list-indent: 2;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Circle symbols can be used to distinguish between items in lower-level lists.</li></ul>
+<ul type=square style="-qt-list-indent: 3;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Square symbols provide a reasonable alternative to discs and circles. </li></ul>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;">Ordered lists can be created that can be used for tables of contents. Different characters can be used to enumerate items, and we can use both Roman and Arabic numerals in the same list structure: </p>
+<ol style="-qt-list-indent: 1;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Introduction</li>
+<li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt Tools </li></ol>
+<ol type=a style="-qt-list-indent: 2;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt Assistant</li>
+<li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt Designer</li>
+<ol type=A style="-qt-list-indent: 3;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Form Editor</li>
+<li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Component Architecture</li></ol>
+<li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt Linguist</li></ol>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;">The list will automatically be renumbered if you add or remove items. <span style=" font-style:italic;">Try adding new sections to the above list or removing existing item to see the numbers change.</span> </p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p>
+<p style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Images</span></p>
+<p style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt; font-weight:600;"><span style=" font-size:11pt; font-weight:400;">Inline images are treated like ordinary ranges of characters in the text editor, so they flow with the surrounding text. Images can also be selected in the same way as text, making it easy to cut, copy, and paste them. </span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><img src=":/images/logo32.png" /><span style=" font-style:italic;"> Try to select this image by clicking and dragging over it with the mouse, or use the text cursor to select it by holding down Shift and using the arrow keys. You can then cut or copy it, and paste it into different parts of this document.</span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Tables</span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt; font-weight:600;"><span style=" font-size:11pt; font-weight:400;">QTextEdit can arrange and format tables, supporting features such as row and column spans, text formatting within cells, and size constraints for columns. </span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p>
+<table border="1" align="center" width="90%" cellspacing="0" cellpadding="4">
+<tr>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Development Tools </span></p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Programming Techniques </span></p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Graphical User Interfaces </span></p></td></tr>
+<tr>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">9:00 - 11:00 </span></p></td>
+<td colspan="3">
+<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Introduction to <span style=" font-style:italic;">Qt </span></p></td></tr>
+<tr>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">11:00 - 13:00 </span></p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Using <span style=" font-style:italic;">qmake</span> </p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Object-oriented Programming </p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Layouts in <span style=" font-style:italic;">Qt</span> </p></td></tr>
+<tr>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">13:00 - 15:00 </span></p></td>
+<td>
+<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;">Qt Designer</span> Tutorial </p></td>
+<td rowspan="2">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Extreme Programming </p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Writing Custom Styles </p></td></tr>
+<tr>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">15:00 - 17:00 </span></p></td>
+<td>
+<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;">Qt Linguist</span> and Internationalization </p></td>
+<td></td></tr></table>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; font-style:italic;">Try adding text to the cells in the table and experiment with the alignment of the paragraphs.</p>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Hyperlinks</span></p>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">QTextEdit is designed to support hyperlinks between documents, and this feature is used extensively in </span><span style=" font-size:11pt; font-style:italic;">Qt Assistant</span><span style=" font-size:11pt;">. Hyperlinks are automatically created when an HTML file is imported into an editor. Since the rich text framework supports hyperl [...]
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Undo and Redo</span></p>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;">Full support for undo and redo operations is built into QTextEdit and the underlying rich text framework. Operations on a document can be packaged together to make editing a more comfortable experience for the user.</p>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-style:italic;">Try making changes to this document and press Ctrl+Z to undo them. You can always recover  the original contents of the document.</span> </p></body></html>
diff --git a/examples/richtext/textedit/images/logo.png b/examples/richtext/textedit/images/logo.png
new file mode 100644
index 0000000..1a713dc
Binary files /dev/null and b/examples/richtext/textedit/images/logo.png differ
diff --git a/examples/richtext/textedit/images/logo32.png b/examples/richtext/textedit/images/logo32.png
new file mode 100644
index 0000000..5f91e98
Binary files /dev/null and b/examples/richtext/textedit/images/logo32.png differ
diff --git a/examples/richtext/textedit/images/mac/editcopy.png b/examples/richtext/textedit/images/mac/editcopy.png
new file mode 100644
index 0000000..f551364
Binary files /dev/null and b/examples/richtext/textedit/images/mac/editcopy.png differ
diff --git a/examples/richtext/textedit/images/mac/editcut.png b/examples/richtext/textedit/images/mac/editcut.png
new file mode 100644
index 0000000..a784fd5
Binary files /dev/null and b/examples/richtext/textedit/images/mac/editcut.png differ
diff --git a/examples/richtext/textedit/images/mac/editpaste.png b/examples/richtext/textedit/images/mac/editpaste.png
new file mode 100644
index 0000000..64c0b2d
Binary files /dev/null and b/examples/richtext/textedit/images/mac/editpaste.png differ
diff --git a/examples/richtext/textedit/images/mac/editredo.png b/examples/richtext/textedit/images/mac/editredo.png
new file mode 100644
index 0000000..8875bf2
Binary files /dev/null and b/examples/richtext/textedit/images/mac/editredo.png differ
diff --git a/examples/richtext/textedit/images/mac/editundo.png b/examples/richtext/textedit/images/mac/editundo.png
new file mode 100644
index 0000000..a3bd5e0
Binary files /dev/null and b/examples/richtext/textedit/images/mac/editundo.png differ
diff --git a/examples/richtext/textedit/images/mac/exportpdf.png b/examples/richtext/textedit/images/mac/exportpdf.png
new file mode 100644
index 0000000..ebb44e6
Binary files /dev/null and b/examples/richtext/textedit/images/mac/exportpdf.png differ
diff --git a/examples/richtext/textedit/images/mac/filenew.png b/examples/richtext/textedit/images/mac/filenew.png
new file mode 100644
index 0000000..d3882c7
Binary files /dev/null and b/examples/richtext/textedit/images/mac/filenew.png differ
diff --git a/examples/richtext/textedit/images/mac/fileopen.png b/examples/richtext/textedit/images/mac/fileopen.png
new file mode 100644
index 0000000..fc06c5e
Binary files /dev/null and b/examples/richtext/textedit/images/mac/fileopen.png differ
diff --git a/examples/richtext/textedit/images/mac/fileprint.png b/examples/richtext/textedit/images/mac/fileprint.png
new file mode 100644
index 0000000..10ca56c
Binary files /dev/null and b/examples/richtext/textedit/images/mac/fileprint.png differ
diff --git a/examples/richtext/textedit/images/mac/filesave.png b/examples/richtext/textedit/images/mac/filesave.png
new file mode 100644
index 0000000..b41ecf5
Binary files /dev/null and b/examples/richtext/textedit/images/mac/filesave.png differ
diff --git a/examples/richtext/textedit/images/mac/textbold.png b/examples/richtext/textedit/images/mac/textbold.png
new file mode 100644
index 0000000..38400bd
Binary files /dev/null and b/examples/richtext/textedit/images/mac/textbold.png differ
diff --git a/examples/richtext/textedit/images/mac/textcenter.png b/examples/richtext/textedit/images/mac/textcenter.png
new file mode 100644
index 0000000..2ef5b2e
Binary files /dev/null and b/examples/richtext/textedit/images/mac/textcenter.png differ
diff --git a/examples/richtext/textedit/images/mac/textitalic.png b/examples/richtext/textedit/images/mac/textitalic.png
new file mode 100644
index 0000000..0170ee2
Binary files /dev/null and b/examples/richtext/textedit/images/mac/textitalic.png differ
diff --git a/examples/richtext/textedit/images/mac/textjustify.png b/examples/richtext/textedit/images/mac/textjustify.png
new file mode 100644
index 0000000..39cd6c1
Binary files /dev/null and b/examples/richtext/textedit/images/mac/textjustify.png differ
diff --git a/examples/richtext/textedit/images/mac/textleft.png b/examples/richtext/textedit/images/mac/textleft.png
new file mode 100644
index 0000000..83a66d5
Binary files /dev/null and b/examples/richtext/textedit/images/mac/textleft.png differ
diff --git a/examples/richtext/textedit/images/mac/textright.png b/examples/richtext/textedit/images/mac/textright.png
new file mode 100644
index 0000000..e7c0464
Binary files /dev/null and b/examples/richtext/textedit/images/mac/textright.png differ
diff --git a/examples/richtext/textedit/images/mac/textunder.png b/examples/richtext/textedit/images/mac/textunder.png
new file mode 100644
index 0000000..968bac5
Binary files /dev/null and b/examples/richtext/textedit/images/mac/textunder.png differ
diff --git a/examples/richtext/textedit/images/mac/zoomin.png b/examples/richtext/textedit/images/mac/zoomin.png
new file mode 100644
index 0000000..d46f5af
Binary files /dev/null and b/examples/richtext/textedit/images/mac/zoomin.png differ
diff --git a/examples/richtext/textedit/images/mac/zoomout.png b/examples/richtext/textedit/images/mac/zoomout.png
new file mode 100644
index 0000000..4632656
Binary files /dev/null and b/examples/richtext/textedit/images/mac/zoomout.png differ
diff --git a/examples/richtext/textedit/images/win/editcopy.png b/examples/richtext/textedit/images/win/editcopy.png
new file mode 100644
index 0000000..1121b47
Binary files /dev/null and b/examples/richtext/textedit/images/win/editcopy.png differ
diff --git a/examples/richtext/textedit/images/win/editcut.png b/examples/richtext/textedit/images/win/editcut.png
new file mode 100644
index 0000000..38e55f7
Binary files /dev/null and b/examples/richtext/textedit/images/win/editcut.png differ
diff --git a/examples/richtext/textedit/images/win/editpaste.png b/examples/richtext/textedit/images/win/editpaste.png
new file mode 100644
index 0000000..ffab15a
Binary files /dev/null and b/examples/richtext/textedit/images/win/editpaste.png differ
diff --git a/examples/richtext/textedit/images/win/editredo.png b/examples/richtext/textedit/images/win/editredo.png
new file mode 100644
index 0000000..9d679fe
Binary files /dev/null and b/examples/richtext/textedit/images/win/editredo.png differ
diff --git a/examples/richtext/textedit/images/win/editundo.png b/examples/richtext/textedit/images/win/editundo.png
new file mode 100644
index 0000000..eee23d2
Binary files /dev/null and b/examples/richtext/textedit/images/win/editundo.png differ
diff --git a/examples/richtext/textedit/images/win/exportpdf.png b/examples/richtext/textedit/images/win/exportpdf.png
new file mode 100644
index 0000000..eef5132
Binary files /dev/null and b/examples/richtext/textedit/images/win/exportpdf.png differ
diff --git a/examples/richtext/textedit/images/win/filenew.png b/examples/richtext/textedit/images/win/filenew.png
new file mode 100644
index 0000000..af5d122
Binary files /dev/null and b/examples/richtext/textedit/images/win/filenew.png differ
diff --git a/examples/richtext/textedit/images/win/fileopen.png b/examples/richtext/textedit/images/win/fileopen.png
new file mode 100644
index 0000000..fc6f17e
Binary files /dev/null and b/examples/richtext/textedit/images/win/fileopen.png differ
diff --git a/examples/richtext/textedit/images/win/fileprint.png b/examples/richtext/textedit/images/win/fileprint.png
new file mode 100644
index 0000000..ba7c02d
Binary files /dev/null and b/examples/richtext/textedit/images/win/fileprint.png differ
diff --git a/examples/richtext/textedit/images/win/filesave.png b/examples/richtext/textedit/images/win/filesave.png
new file mode 100644
index 0000000..8feec99
Binary files /dev/null and b/examples/richtext/textedit/images/win/filesave.png differ
diff --git a/examples/richtext/textedit/images/win/textbold.png b/examples/richtext/textedit/images/win/textbold.png
new file mode 100644
index 0000000..9cbc713
Binary files /dev/null and b/examples/richtext/textedit/images/win/textbold.png differ
diff --git a/examples/richtext/textedit/images/win/textcenter.png b/examples/richtext/textedit/images/win/textcenter.png
new file mode 100644
index 0000000..11efb4b
Binary files /dev/null and b/examples/richtext/textedit/images/win/textcenter.png differ
diff --git a/examples/richtext/textedit/images/win/textitalic.png b/examples/richtext/textedit/images/win/textitalic.png
new file mode 100644
index 0000000..b30ce14
Binary files /dev/null and b/examples/richtext/textedit/images/win/textitalic.png differ
diff --git a/examples/richtext/textedit/images/win/textjustify.png b/examples/richtext/textedit/images/win/textjustify.png
new file mode 100644
index 0000000..9de0c88
Binary files /dev/null and b/examples/richtext/textedit/images/win/textjustify.png differ
diff --git a/examples/richtext/textedit/images/win/textleft.png b/examples/richtext/textedit/images/win/textleft.png
new file mode 100644
index 0000000..16f80bc
Binary files /dev/null and b/examples/richtext/textedit/images/win/textleft.png differ
diff --git a/examples/richtext/textedit/images/win/textright.png b/examples/richtext/textedit/images/win/textright.png
new file mode 100644
index 0000000..16872df
Binary files /dev/null and b/examples/richtext/textedit/images/win/textright.png differ
diff --git a/examples/richtext/textedit/images/win/textunder.png b/examples/richtext/textedit/images/win/textunder.png
new file mode 100644
index 0000000..c72eff5
Binary files /dev/null and b/examples/richtext/textedit/images/win/textunder.png differ
diff --git a/examples/richtext/textedit/images/win/zoomin.png b/examples/richtext/textedit/images/win/zoomin.png
new file mode 100644
index 0000000..2e586fc
Binary files /dev/null and b/examples/richtext/textedit/images/win/zoomin.png differ
diff --git a/examples/richtext/textedit/images/win/zoomout.png b/examples/richtext/textedit/images/win/zoomout.png
new file mode 100644
index 0000000..a736d39
Binary files /dev/null and b/examples/richtext/textedit/images/win/zoomout.png differ
diff --git a/examples/richtext/textedit/textedit.py b/examples/richtext/textedit/textedit.py
new file mode 100755
index 0000000..4a5727f
--- /dev/null
+++ b/examples/richtext/textedit/textedit.py
@@ -0,0 +1,656 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:LGPL$
+## Commercial Usage
+## Licensees holding valid Qt Commercial licenses may use this file in
+## accordance with the Qt 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.
+##
+## If you have questions regarding the use of this file, please contact
+## Nokia at qt-info at nokia.com.
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import QFile, QFileInfo, Qt, QTextCodec
+from PyQt5.QtGui import (QFont, QFontDatabase, QFontInfo, QIcon, QKeySequence,
+        QPixmap, QTextBlockFormat, QTextCharFormat, QTextCursor,
+        QTextDocumentWriter, QTextListFormat)
+from PyQt5.QtWidgets import (QAction, QActionGroup, QApplication, QColorDialog,
+        QComboBox, QFileDialog, QFontComboBox, QMainWindow, QMenu, QMessageBox,
+        QTextEdit, QToolBar)
+from PyQt5.QtPrintSupport import QPrintDialog, QPrinter, QPrintPreviewDialog
+
+import textedit_rc
+
+
+if sys.platform.startswith('darwin'):
+    rsrcPath = ":/images/mac"
+else:
+    rsrcPath = ":/images/win"
+
+
+class TextEdit(QMainWindow):
+    def __init__(self, fileName=None, parent=None):
+        super(TextEdit, self).__init__(parent)
+
+        self.setWindowIcon(QIcon(':/images/logo.png'))
+        self.setToolButtonStyle(Qt.ToolButtonFollowStyle)
+        self.setupFileActions()
+        self.setupEditActions()
+        self.setupTextActions()
+
+        helpMenu = QMenu("Help", self)
+        self.menuBar().addMenu(helpMenu)
+        helpMenu.addAction("About", self.about)
+        helpMenu.addAction("About &Qt", QApplication.instance().aboutQt)
+ 
+        self.textEdit = QTextEdit(self)
+        self.textEdit.currentCharFormatChanged.connect(
+                self.currentCharFormatChanged)
+        self.textEdit.cursorPositionChanged.connect(self.cursorPositionChanged)
+        self.setCentralWidget(self.textEdit)
+        self.textEdit.setFocus()
+        self.setCurrentFileName()
+        self.fontChanged(self.textEdit.font())
+        self.colorChanged(self.textEdit.textColor())
+        self.alignmentChanged(self.textEdit.alignment())
+        self.textEdit.document().modificationChanged.connect(
+                self.actionSave.setEnabled)
+        self.textEdit.document().modificationChanged.connect(
+                self.setWindowModified)
+        self.textEdit.document().undoAvailable.connect(
+                self.actionUndo.setEnabled)
+        self.textEdit.document().redoAvailable.connect(
+                self.actionRedo.setEnabled)
+        self.setWindowModified(self.textEdit.document().isModified())
+        self.actionSave.setEnabled(self.textEdit.document().isModified())
+        self.actionUndo.setEnabled(self.textEdit.document().isUndoAvailable())
+        self.actionRedo.setEnabled(self.textEdit.document().isRedoAvailable())
+        self.actionUndo.triggered.connect(self.textEdit.undo)
+        self.actionRedo.triggered.connect(self.textEdit.redo)
+        self.actionCut.setEnabled(False)
+        self.actionCopy.setEnabled(False)
+        self.actionCut.triggered.connect(self.textEdit.cut)
+        self.actionCopy.triggered.connect(self.textEdit.copy)
+        self.actionPaste.triggered.connect(self.textEdit.paste)
+        self.textEdit.copyAvailable.connect(self.actionCut.setEnabled)
+        self.textEdit.copyAvailable.connect(self.actionCopy.setEnabled)
+        QApplication.clipboard().dataChanged.connect(self.clipboardDataChanged)
+
+        if fileName is None:
+            fileName = ':/example.html'
+
+        if not self.load(fileName):
+            self.fileNew()
+
+    def closeEvent(self, e):
+        if self.maybeSave():
+            e.accept()
+        else:
+            e.ignore()
+
+    def setupFileActions(self):
+        tb = QToolBar(self)
+        tb.setWindowTitle("File Actions")
+        self.addToolBar(tb)
+
+        menu = QMenu("&File", self)
+        self.menuBar().addMenu(menu)
+
+        self.actionNew = QAction(
+                QIcon.fromTheme('document-new',
+                        QIcon(rsrcPath + '/filenew.png')),
+                "&New", self, priority=QAction.LowPriority,
+                shortcut=QKeySequence.New, triggered=self.fileNew)
+        tb.addAction(self.actionNew)
+        menu.addAction(self.actionNew)
+
+        self.actionOpen = QAction(
+                QIcon.fromTheme('document-open',
+                        QIcon(rsrcPath + '/fileopen.png')),
+                "&Open...", self, shortcut=QKeySequence.Open,
+                triggered=self.fileOpen)
+        tb.addAction(self.actionOpen)
+        menu.addAction(self.actionOpen)
+        menu.addSeparator()
+
+        self.actionSave = QAction(
+                QIcon.fromTheme('document-save',
+                        QIcon(rsrcPath + '/filesave.png')),
+                "&Save", self, shortcut=QKeySequence.Save,
+                triggered=self.fileSave, enabled=False)
+        tb.addAction(self.actionSave)
+        menu.addAction(self.actionSave)
+
+        self.actionSaveAs = QAction("Save &As...", self,
+                priority=QAction.LowPriority,
+                shortcut=Qt.CTRL + Qt.SHIFT + Qt.Key_S,
+                triggered=self.fileSaveAs)
+        menu.addAction(self.actionSaveAs)
+        menu.addSeparator()
+ 
+        self.actionPrint = QAction(
+                QIcon.fromTheme('document-print',
+                        QIcon(rsrcPath + '/fileprint.png')),
+                "&Print...", self, priority=QAction.LowPriority,
+                shortcut=QKeySequence.Print, triggered=self.filePrint)
+        tb.addAction(self.actionPrint)
+        menu.addAction(self.actionPrint)
+
+        self.actionPrintPreview = QAction(
+                QIcon.fromTheme('fileprint',
+                        QIcon(rsrcPath + '/fileprint.png')),
+                "Print Preview...", self,
+                shortcut=Qt.CTRL + Qt.SHIFT + Qt.Key_P,
+                triggered=self.filePrintPreview)
+        menu.addAction(self.actionPrintPreview)
+
+        self.actionPrintPdf = QAction(
+                QIcon.fromTheme('exportpdf',
+                        QIcon(rsrcPath + '/exportpdf.png')),
+                "&Export PDF...", self, priority=QAction.LowPriority,
+                shortcut=Qt.CTRL + Qt.Key_D,
+                triggered=self.filePrintPdf)
+        tb.addAction(self.actionPrintPdf)
+        menu.addAction(self.actionPrintPdf)
+        menu.addSeparator()
+
+        self.actionQuit = QAction("&Quit", self, shortcut=QKeySequence.Quit,
+                triggered=self.close)
+        menu.addAction(self.actionQuit)
+
+    def setupEditActions(self):
+        tb = QToolBar(self)
+        tb.setWindowTitle("Edit Actions")
+        self.addToolBar(tb)
+
+        menu = QMenu("&Edit", self)
+        self.menuBar().addMenu(menu)
+
+        self.actionUndo = QAction(
+                QIcon.fromTheme('edit-undo',
+                        QIcon(rsrcPath + '/editundo.png')),
+                "&Undo", self, shortcut=QKeySequence.Undo)
+        tb.addAction(self.actionUndo)
+        menu.addAction(self.actionUndo)
+
+        self.actionRedo = QAction(
+                QIcon.fromTheme('edit-redo',
+                        QIcon(rsrcPath + '/editredo.png')),
+                "&Redo", self, priority=QAction.LowPriority,
+                shortcut=QKeySequence.Redo)
+        tb.addAction(self.actionRedo)
+        menu.addAction(self.actionRedo)
+        menu.addSeparator()
+
+        self.actionCut = QAction(
+                QIcon.fromTheme('edit-cut', QIcon(rsrcPath + '/editcut.png')),
+                "Cu&t", self, priority=QAction.LowPriority,
+                shortcut=QKeySequence.Cut)
+        tb.addAction(self.actionCut)
+        menu.addAction(self.actionCut)
+
+        self.actionCopy = QAction(
+                QIcon.fromTheme('edit-copy',
+                        QIcon(rsrcPath + '/editcopy.png')),
+                "&Copy", self, priority=QAction.LowPriority,
+                shortcut=QKeySequence.Copy)
+        tb.addAction(self.actionCopy)
+        menu.addAction(self.actionCopy)
+
+        self.actionPaste = QAction(
+                QIcon.fromTheme('edit-paste',
+                        QIcon(rsrcPath + '/editpaste.png')),
+                "&Paste", self, priority=QAction.LowPriority,
+                shortcut=QKeySequence.Paste,
+                enabled=(len(QApplication.clipboard().text()) != 0))
+        tb.addAction(self.actionPaste)
+        menu.addAction(self.actionPaste)
+
+    def setupTextActions(self):
+        tb = QToolBar(self)
+        tb.setWindowTitle("Format Actions")
+        self.addToolBar(tb)
+
+        menu = QMenu("F&ormat", self)
+        self.menuBar().addMenu(menu)
+
+        self.actionTextBold = QAction(
+                QIcon.fromTheme('format-text-bold',
+                        QIcon(rsrcPath + '/textbold.png')),
+                "&Bold", self, priority=QAction.LowPriority,
+                shortcut=Qt.CTRL + Qt.Key_B, triggered=self.textBold,
+                checkable=True)
+        bold = QFont()
+        bold.setBold(True)
+        self.actionTextBold.setFont(bold)
+        tb.addAction(self.actionTextBold)
+        menu.addAction(self.actionTextBold)
+
+        self.actionTextItalic = QAction(
+                QIcon.fromTheme('format-text-italic',
+                        QIcon(rsrcPath + '/textitalic.png')),
+                "&Italic", self, priority=QAction.LowPriority,
+                shortcut=Qt.CTRL + Qt.Key_I, triggered=self.textItalic,
+                checkable=True)
+        italic = QFont()
+        italic.setItalic(True)
+        self.actionTextItalic.setFont(italic)
+        tb.addAction(self.actionTextItalic)
+        menu.addAction(self.actionTextItalic)
+
+        self.actionTextUnderline = QAction(
+                QIcon.fromTheme('format-text-underline',
+                        QIcon(rsrcPath + '/textunder.png')),
+                "&Underline", self, priority=QAction.LowPriority,
+                shortcut=Qt.CTRL + Qt.Key_U, triggered=self.textUnderline,
+                checkable=True)
+        underline = QFont()
+        underline.setUnderline(True)
+        self.actionTextUnderline.setFont(underline)
+        tb.addAction(self.actionTextUnderline)
+        menu.addAction(self.actionTextUnderline)
+
+        menu.addSeparator()
+
+        grp = QActionGroup(self, triggered=self.textAlign)
+
+        # Make sure the alignLeft is always left of the alignRight.
+        if QApplication.isLeftToRight():
+            self.actionAlignLeft = QAction(
+                    QIcon.fromTheme('format-justify-left',
+                            QIcon(rsrcPath + '/textleft.png')),
+                    "&Left", grp)
+            self.actionAlignCenter = QAction(
+                    QIcon.fromTheme('format-justify-center',
+                            QIcon(rsrcPath + '/textcenter.png')),
+                    "C&enter", grp)
+            self.actionAlignRight = QAction(
+                    QIcon.fromTheme('format-justify-right',
+                            QIcon(rsrcPath + '/textright.png')),
+                    "&Right", grp)
+        else:
+            self.actionAlignRight = QAction(
+                    QIcon.fromTheme('format-justify-right',
+                            QIcon(rsrcPath + '/textright.png')),
+                    "&Right", grp)
+            self.actionAlignCenter = QAction(
+                    QIcon.fromTheme('format-justify-center',
+                            QIcon(rsrcPath + '/textcenter.png')),
+                    "C&enter", grp)
+            self.actionAlignLeft = QAction(
+                    QIcon.fromTheme('format-justify-left',
+                            QIcon(rsrcPath + '/textleft.png')),
+                    "&Left", grp)
+ 
+        self.actionAlignJustify = QAction(
+                QIcon.fromTheme('format-justify-fill',
+                        QIcon(rsrcPath + '/textjustify.png')),
+                "&Justify", grp)
+
+        self.actionAlignLeft.setShortcut(Qt.CTRL + Qt.Key_L)
+        self.actionAlignLeft.setCheckable(True)
+        self.actionAlignLeft.setPriority(QAction.LowPriority)
+
+        self.actionAlignCenter.setShortcut(Qt.CTRL + Qt.Key_E)
+        self.actionAlignCenter.setCheckable(True)
+        self.actionAlignCenter.setPriority(QAction.LowPriority)
+
+        self.actionAlignRight.setShortcut(Qt.CTRL + Qt.Key_R)
+        self.actionAlignRight.setCheckable(True)
+        self.actionAlignRight.setPriority(QAction.LowPriority)
+
+        self.actionAlignJustify.setShortcut(Qt.CTRL + Qt.Key_J)
+        self.actionAlignJustify.setCheckable(True)
+        self.actionAlignJustify.setPriority(QAction.LowPriority)
+
+        tb.addActions(grp.actions())
+        menu.addActions(grp.actions())
+        menu.addSeparator()
+
+        pix = QPixmap(16, 16)
+        pix.fill(Qt.black)
+        self.actionTextColor = QAction(QIcon(pix), "&Color...", self,
+                triggered=self.textColor)
+        tb.addAction(self.actionTextColor)
+        menu.addAction(self.actionTextColor)
+
+        tb = QToolBar(self)
+        tb.setAllowedAreas(Qt.TopToolBarArea | Qt.BottomToolBarArea)
+        tb.setWindowTitle("Format Actions")
+        self.addToolBarBreak(Qt.TopToolBarArea)
+        self.addToolBar(tb)
+
+        comboStyle = QComboBox(tb)
+        tb.addWidget(comboStyle)
+        comboStyle.addItem("Standard")
+        comboStyle.addItem("Bullet List (Disc)")
+        comboStyle.addItem("Bullet List (Circle)")
+        comboStyle.addItem("Bullet List (Square)")
+        comboStyle.addItem("Ordered List (Decimal)")
+        comboStyle.addItem("Ordered List (Alpha lower)")
+        comboStyle.addItem("Ordered List (Alpha upper)")
+        comboStyle.addItem("Ordered List (Roman lower)")
+        comboStyle.addItem("Ordered List (Roman upper)")
+        comboStyle.activated.connect(self.textStyle)
+
+        self.comboFont = QFontComboBox(tb)
+        tb.addWidget(self.comboFont)
+        self.comboFont.activated[str].connect(self.textFamily)
+
+        self.comboSize = QComboBox(tb)
+        self.comboSize.setObjectName("comboSize")
+        tb.addWidget(self.comboSize)
+        self.comboSize.setEditable(True)
+
+        db = QFontDatabase()
+        for size in db.standardSizes():
+            self.comboSize.addItem("%s" % (size))
+
+        self.comboSize.activated[str].connect(self.textSize)
+        self.comboSize.setCurrentIndex(
+                self.comboSize.findText(
+                        "%s" % (QApplication.font().pointSize())))
+
+    def load(self, f):
+        if not QFile.exists(f):
+            return False
+
+        fh = QFile(f)
+        if not fh.open(QFile.ReadOnly):
+            return False
+
+        data = fh.readAll()
+        codec = QTextCodec.codecForHtml(data)
+        unistr = codec.toUnicode(data)
+
+        if Qt.mightBeRichText(unistr):
+            self.textEdit.setHtml(unistr)
+        else:
+            self.textEdit.setPlainText(unistr)
+
+        self.setCurrentFileName(f)
+        return True
+
+    def maybeSave(self):
+        if not self.textEdit.document().isModified():
+            return True
+
+        if self.fileName.startswith(':/'):
+            return True
+
+        ret = QMessageBox.warning(self, "Application",
+                "The document has been modified.\n"
+                "Do you want to save your changes?",
+                QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
+
+        if ret == QMessageBox.Save:
+            return self.fileSave()
+
+        if ret == QMessageBox.Cancel:
+            return False
+
+        return True
+
+    def setCurrentFileName(self, fileName=''):
+        self.fileName = fileName
+        self.textEdit.document().setModified(False)
+
+        if not fileName:
+            shownName = 'untitled.txt'
+        else:
+            shownName = QFileInfo(fileName).fileName()
+
+        self.setWindowTitle(self.tr("%s[*] - %s" % (shownName, "Rich Text")))
+        self.setWindowModified(False)
+
+    def fileNew(self):
+        if self.maybeSave():
+            self.textEdit.clear()
+            self.setCurrentFileName()
+
+    def fileOpen(self):
+        fn, _ = QFileDialog.getOpenFileName(self, "Open File...", None,
+                "HTML-Files (*.htm *.html);;All Files (*)")
+
+        if fn:
+            self.load(fn)
+
+    def fileSave(self):
+        if not self.fileName:
+            return self.fileSaveAs()
+
+        writer = QTextDocumentWriter(self.fileName)
+        success = writer.write(self.textEdit.document())
+        if success:
+            self.textEdit.document().setModified(False)
+
+        return success
+
+    def fileSaveAs(self):
+        fn, _ = QFileDialog.getSaveFileName(self, "Save as...", None,
+                "ODF files (*.odt);;HTML-Files (*.htm *.html);;All Files (*)")
+
+        if not fn:
+            return False
+
+        lfn = fn.lower()
+        if not lfn.endswith(('.odt', '.htm', '.html')):
+            # The default.
+            fn += '.odt'
+
+        self.setCurrentFileName(fn)
+        return self.fileSave()
+
+    def filePrint(self):
+        printer = QPrinter(QPrinter.HighResolution)
+        dlg = QPrintDialog(printer, self)
+
+        if self.textEdit.textCursor().hasSelection():
+            dlg.addEnabledOption(QPrintDialog.PrintSelection)
+
+        dlg.setWindowTitle("Print Document")
+
+        if dlg.exec_() == QPrintDialog.Accepted:
+            self.textEdit.print_(printer)
+
+        del dlg
+
+    def filePrintPreview(self):
+        printer = QPrinter(QPrinter.HighResolution)
+        preview = QPrintPreviewDialog(printer, self)
+        preview.paintRequested.connect(self.printPreview)
+        preview.exec_()
+
+    def printPreview(self, printer):
+        self.textEdit.print_(printer)
+
+    def filePrintPdf(self):
+        fn, _ = QFileDialog.getSaveFileName(self, "Export PDF", None,
+                "PDF files (*.pdf);;All Files (*)")
+
+        if fn:
+            if QFileInfo(fn).suffix().isEmpty():
+                fn += '.pdf'
+
+            printer = QPrinter(QPrinter.HighResolution)
+            printer.setOutputFormat(QPrinter.PdfFormat)
+            printer.setOutputFileName(fn)
+            self.textEdit.document().print_(printer)
+
+    def textBold(self):
+        fmt = QTextCharFormat()
+        fmt.setFontWeight(self.actionTextBold.isChecked() and QFont.Bold or QFont.Normal)
+        self.mergeFormatOnWordOrSelection(fmt)
+
+    def textUnderline(self):
+        fmt = QTextCharFormat()
+        fmt.setFontUnderline(self.actionTextUnderline.isChecked())
+        self.mergeFormatOnWordOrSelection(fmt)
+
+    def textItalic(self):
+        fmt = QTextCharFormat()
+        fmt.setFontItalic(self.actionTextItalic.isChecked())
+        self.mergeFormatOnWordOrSelection(fmt)
+
+    def textFamily(self, family):
+        fmt = QTextCharFormat()
+        fmt.setFontFamily(family)
+        self.mergeFormatOnWordOrSelection(fmt)
+
+    def textSize(self, pointSize):
+        pointSize = float(pointSize)
+        if pointSize > 0:
+            fmt = QTextCharFormat()
+            fmt.setFontPointSize(pointSize)
+            self.mergeFormatOnWordOrSelection(fmt)
+
+    def textStyle(self, styleIndex):
+        cursor = self.textEdit.textCursor()
+        if styleIndex:
+            styleDict = {
+                1: QTextListFormat.ListDisc,
+                2: QTextListFormat.ListCircle,
+                3: QTextListFormat.ListSquare,
+                4: QTextListFormat.ListDecimal,
+                5: QTextListFormat.ListLowerAlpha,
+                6: QTextListFormat.ListUpperAlpha,
+                7: QTextListFormat.ListLowerRoman,
+                8: QTextListFormat.ListUpperRoman,
+            }
+
+            style = styleDict.get(styleIndex, QTextListFormat.ListDisc)
+            cursor.beginEditBlock()
+            blockFmt = cursor.blockFormat()
+            listFmt = QTextListFormat()
+
+            if cursor.currentList():
+                listFmt = cursor.currentList().format()
+            else:
+                listFmt.setIndent(blockFmt.indent() + 1)
+                blockFmt.setIndent(0)
+                cursor.setBlockFormat(blockFmt)
+
+            listFmt.setStyle(style)
+            cursor.createList(listFmt)
+            cursor.endEditBlock()
+        else:
+            bfmt = QTextBlockFormat()
+            bfmt.setObjectIndex(-1)
+            cursor.mergeBlockFormat(bfmt)
+
+    def textColor(self):
+        col = QColorDialog.getColor(self.textEdit.textColor(), self)
+        if not col.isValid():
+            return
+
+        fmt = QTextCharFormat()
+        fmt.setForeground(col)
+        self.mergeFormatOnWordOrSelection(fmt)
+        self.colorChanged(col)
+
+    def textAlign(self, action):
+        if action == self.actionAlignLeft:
+            self.textEdit.setAlignment(Qt.AlignLeft | Qt.AlignAbsolute)
+        elif action == self.actionAlignCenter:
+            self.textEdit.setAlignment(Qt.AlignHCenter)
+        elif action == self.actionAlignRight:
+            self.textEdit.setAlignment(Qt.AlignRight | Qt.AlignAbsolute)
+        elif action == self.actionAlignJustify:
+            self.textEdit.setAlignment(Qt.AlignJustify)
+
+    def currentCharFormatChanged(self, format):
+        self.fontChanged(format.font())
+        self.colorChanged(format.foreground().color())
+
+    def cursorPositionChanged(self):
+        self.alignmentChanged(self.textEdit.alignment())
+
+    def clipboardDataChanged(self):
+        self.actionPaste.setEnabled(len(QApplication.clipboard().text()) != 0)
+
+    def about(self):
+        QMessageBox.about(self, "About", 
+                "This example demonstrates Qt's rich text editing facilities "
+                "in action, providing an example document for you to "
+                "experiment with.")
+
+    def mergeFormatOnWordOrSelection(self, format):
+        cursor = self.textEdit.textCursor()
+        if not cursor.hasSelection():
+            cursor.select(QTextCursor.WordUnderCursor)
+
+        cursor.mergeCharFormat(format)
+        self.textEdit.mergeCurrentCharFormat(format)
+
+    def fontChanged(self, font):
+        self.comboFont.setCurrentIndex(
+                self.comboFont.findText(QFontInfo(font).family()))
+        self.comboSize.setCurrentIndex(
+                self.comboSize.findText("%s" % font.pointSize()))
+        self.actionTextBold.setChecked(font.bold())
+        self.actionTextItalic.setChecked(font.italic())
+        self.actionTextUnderline.setChecked(font.underline())
+
+    def colorChanged(self, color):
+        pix = QPixmap(16, 16)
+        pix.fill(color)
+        self.actionTextColor.setIcon(QIcon(pix))
+
+    def alignmentChanged(self, alignment):
+        if alignment & Qt.AlignLeft:
+            self.actionAlignLeft.setChecked(True)
+        elif alignment & Qt.AlignHCenter:
+            self.actionAlignCenter.setChecked(True)
+        elif alignment & Qt.AlignRight:
+            self.actionAlignRight.setChecked(True)
+        elif alignment & Qt.AlignJustify:
+            self.actionAlignJustify.setChecked(True)
+
+
+if __name__ == '__main__':
+    app = QApplication(sys.argv)
+
+    mainWindows = []
+    for fn in sys.argv[1:] or [None]:
+        textEdit = TextEdit(fn)
+        textEdit.resize(700, 800)
+        textEdit.show()
+        mainWindows.append(textEdit)
+
+    sys.exit(app.exec_())
diff --git a/examples/richtext/textedit/textedit.qrc b/examples/richtext/textedit/textedit.qrc
new file mode 100644
index 0000000..64c02e6
--- /dev/null
+++ b/examples/richtext/textedit/textedit.qrc
@@ -0,0 +1,45 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+  <file>images/logo.png</file>
+  <file>images/logo32.png</file>
+  <file>images/mac/editcopy.png</file>
+  <file>images/mac/editcut.png</file>
+  <file>images/mac/editpaste.png</file>
+  <file>images/mac/editredo.png</file>
+  <file>images/mac/editundo.png</file>
+  <file>images/mac/exportpdf.png</file>
+  <file>images/mac/filenew.png</file>
+  <file>images/mac/fileopen.png</file>
+  <file>images/mac/fileprint.png</file>
+  <file>images/mac/filesave.png</file>
+  <file>images/mac/textbold.png</file>
+  <file>images/mac/textcenter.png</file>
+  <file>images/mac/textitalic.png</file>
+  <file>images/mac/textjustify.png</file>
+  <file>images/mac/textleft.png</file>
+  <file>images/mac/textright.png</file>
+  <file>images/mac/textunder.png</file>
+  <file>images/mac/zoomin.png</file>
+  <file>images/mac/zoomout.png</file>
+  <file>images/win/editcopy.png</file>
+  <file>images/win/editcut.png</file>
+  <file>images/win/editpaste.png</file>
+  <file>images/win/editredo.png</file>
+  <file>images/win/editundo.png</file>
+  <file>images/win/exportpdf.png</file>
+  <file>images/win/filenew.png</file>
+  <file>images/win/fileopen.png</file>
+  <file>images/win/fileprint.png</file>
+  <file>images/win/filesave.png</file>
+  <file>images/win/textbold.png</file>
+  <file>images/win/textcenter.png</file>
+  <file>images/win/textitalic.png</file>
+  <file>images/win/textjustify.png</file>
+  <file>images/win/textleft.png</file>
+  <file>images/win/textright.png</file>
+  <file>images/win/textunder.png</file>
+  <file>images/win/zoomin.png</file>
+  <file>images/win/zoomout.png</file>
+  <file>example.html</file>
+</qresource>
+</RCC>
diff --git a/examples/richtext/textedit/textedit_rc.py b/examples/richtext/textedit/textedit_rc.py
new file mode 100644
index 0000000..2456649
--- /dev/null
+++ b/examples/richtext/textedit/textedit_rc.py
@@ -0,0 +1,3767 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Wed May 15 17:46:46 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x0a\x15\
+\x00\
+\x00\x38\x1d\x78\x9c\xdd\x5b\x5b\x73\xdb\xb8\x15\x7e\xcf\xaf\xc0\
+\xb0\xd3\xc9\x43\x2d\x59\xb6\xb3\xd9\x8d\x6c\x79\x26\x63\x27\xbb\
+\x99\x49\x9b\xcd\x46\x99\x9d\xf6\x0d\x02\x21\x11\x6b\x90\xa0\x01\
+\xd0\x0a\xb7\xd3\xff\xde\x73\x0e\x40\x52\xb2\xe4\x58\x49\x9d\x98\
+\x6a\x1e\x1c\x89\xc2\xe5\x5c\x3e\x9c\x1b\x0e\xcf\x32\x9f\xeb\xf3\
+\xb3\x4c\xf2\xf4\xfc\x2c\x97\x9e\xb3\x82\xe7\x72\x92\x5c\x5b\x25\
+\x32\x2f\x3f\xf9\x84\x09\x53\x78\x59\xf8\x49\x72\x94\xb0\xc3\x38\
+\x28\xf3\xbe\x1c\xc8\xeb\x4a\xdd\x4c\x92\x8b\xf0\xfb\x60\x5a\x97\
+\x72\x65\x34\x4e\x3e\xc4\xd5\x4f\x99\xc8\xb8\x75\xd2\x4f\x3e\x4e\
+\x5f\x0f\x7e\xa2\x45\xbc\xf2\x5a\x9e\xbf\x9f\xc2\x98\x57\xa9\xf2\
+\xec\x52\xe6\xa6\x70\xde\x72\xaf\x4c\x71\x76\x18\x7e\x3e\x73\xbe\
+\xd6\x92\x79\x58\x37\x2e\x27\x9c\x4b\xce\x9f\x94\x07\x4c\x2b\xf6\
+\x6f\xb6\xcc\x94\x97\x03\x57\x72\x21\xc7\xac\xb4\x72\xb0\xb4\xbc\
+\x3c\x65\xff\x79\x72\x76\x48\x33\xcf\xcf\x0e\x03\x5f\x33\x93\xd6\
+\x8c\x1e\x4d\x12\x36\x07\x02\x07\x4e\xfd\x29\xc7\x2f\x4a\x7f\x1a\
+\xbe\x2e\xa5\x5a\x64\x7e\xfc\x6c\x34\x8a\x0f\x68\xf0\xb8\x30\x36\
+\xe7\x40\x3f\xee\x3d\x48\xa5\x30\x81\x3e\x78\x5e\xc8\x53\x20\xe4\
+\xac\x64\x5c\xab\x45\x31\x49\x04\xb0\x2c\x6d\xd2\x6e\x92\x73\xbb\
+\x50\xc5\xc0\x9b\x72\x7c\x74\x5c\x7e\x3a\x6d\x1e\xcc\x8c\xf7\x26\
+\x5f\x7f\xa6\xe5\xdc\x8f\x47\x2b\x0f\x2c\x11\x43\x4f\x06\xd7\x7e\
+\x30\xd3\x46\x5c\x0d\x54\x91\xc2\x1e\xe3\x51\xa4\xa6\xf9\x0a\x83\
+\x12\x10\x54\xc9\x8b\x2d\x0c\x1e\x8f\x6e\x73\xf8\x1c\x38\x4c\x3a\
+\xb9\x83\xa0\x60\x26\xc8\xa9\x5c\x65\xe6\x8f\xca\x79\x35\xaf\xfb\
+\xc6\xcd\xd1\x11\x70\x93\x9c\x4f\x33\xc9\x3a\xe0\x2c\x55\xba\x90\
+\x9e\x29\xc7\x60\x0e\x4f\x6f\x78\x21\x64\xca\x24\xfc\x64\x2c\xf3\
+\x19\xf7\xcc\x55\x65\x69\xac\x77\xb0\x12\x68\xd3\x7b\xf8\x19\xb1\
+\x4d\x1b\x0f\xd9\x1b\xcf\x04\xcc\x9c\x49\x56\x39\xf8\xc5\x1b\x96\
+\x2a\x57\x6a\x5e\xb3\x5f\xa6\x7f\x7f\x0b\x8b\xa6\xcc\xf8\x4c\xda\
+\x30\x27\x35\xa2\xca\x81\xd2\xb8\x96\x83\xf9\xa8\xf7\x82\x6b\x5d\
+\x1f\xac\x50\x05\x6b\x39\xd8\x3d\x12\x7a\xd9\xcc\x12\x9a\x3b\x47\
+\x7b\x48\x27\xac\x82\x4d\x41\x82\x19\x0d\xcc\x40\x4a\x20\xbb\x1b\
+\xa9\x81\x73\x5b\x09\x5f\x59\xc9\xcc\x9c\x49\xbe\xba\x2d\x92\x83\
+\xa3\xb5\x59\xc6\xc1\x91\x29\x55\x2c\x70\x74\xc9\x2d\x5f\xc0\x21\
+\xc8\xdc\xb0\x87\xaa\xdd\xd4\xe5\x9b\x39\xab\x4d\xc5\x38\xf0\x7a\
+\xa3\xe4\x12\xb9\xf0\x19\xe8\xb2\x65\x58\x15\xc4\xef\x36\x48\xd0\
+\x09\x55\x1e\x18\x13\xb0\x12\xee\x25\x3b\x44\x83\x84\x73\x73\x40\
+\x8b\xa3\x7a\xf1\x97\x5b\x2b\x83\x16\xe4\xa7\x52\x1b\xd8\xfa\xbd\
+\x7f\xea\x3a\x4c\xd0\x60\xa4\x64\x2e\x39\x6a\x01\x94\xfc\x3b\xe8\
+\x87\xdf\x48\xa0\x46\xe8\x2a\x05\x98\x38\x93\x4b\xb0\x74\x39\xae\
+\xe4\x90\x48\x52\x13\x28\x00\x89\x9d\x1b\x0d\xfa\xc1\x15\x9c\x14\
+\x68\x2f\x48\xe5\xb2\x10\xa6\x02\xed\x48\x22\x2a\xec\x2e\xad\xc2\
+\x15\x86\x8c\x35\x6a\xda\xa6\x96\xe7\xdf\x51\x2d\x3f\x6d\x37\x18\
+\x77\x1e\xc9\xe7\xa4\xc6\xd7\x26\x62\xf3\xd7\x06\x7f\xec\x03\x8e\
+\x75\x3d\x04\xe1\xbd\xf6\xa5\x3b\xc5\xad\xe5\x68\xd8\xf8\xdc\xc4\
+\x2d\x52\x9b\x19\x9d\xee\x32\x35\x39\x3f\xf8\x82\x2d\x6e\x01\x3f\
+\x7c\xd8\x75\x1b\x54\xd2\x4e\x5b\xdd\x76\x79\xac\x02\x11\x5a\xad\
+\xc8\xf1\xb5\x9f\x77\x64\x8f\x9e\x84\x9f\x5d\xa0\x01\x0f\x65\x63\
+\x68\xbf\x4a\xba\x70\xfa\xe0\xec\x8e\xff\x32\x82\x7f\x3f\xce\x61\
+\x8f\xbc\xd2\x5e\xd1\xc3\x9d\xa9\xfa\x9f\x36\xe6\x1c\xb7\x8e\x96\
+\x67\xb7\x0d\x87\x8c\x0e\xca\x9c\xe7\x4a\x2b\x70\x10\xae\x02\xa3\
+\xc1\x3f\x07\x2f\x1a\x5a\x8f\x9f\x4e\xc1\x4e\xb8\xa7\x1b\x06\x74\
+\x0b\xe6\x68\x24\xfb\x87\x5c\xb2\xdf\x4c\xce\x8b\x1d\x25\xf1\x79\
+\x58\x34\x54\x5c\x80\x01\x53\xd2\xee\x44\x47\x1c\xbb\xe3\xfe\x08\
+\x07\xae\x9d\x69\xfd\x70\xaa\x2c\xd8\x4e\x5d\x0f\xbf\xfe\x60\x44\
+\xdf\x02\x10\x13\x92\xec\xb2\xa8\xac\x83\xa0\x00\xac\x35\x67\x56\
+\x2e\x00\xd5\x68\xb1\x69\x56\x4a\x78\x3f\x08\xc3\x60\x2d\x6b\xb4\
+\x6b\x7c\x8f\x37\x46\xb3\x19\x04\xb0\x10\x6b\x68\x8d\xb1\x6c\xb1\
+\xc0\xa7\xb0\xc6\x5c\x03\x91\xcd\xda\x56\x36\x18\xdf\x0f\xdf\xdb\
+\xda\x6a\xd7\x44\x40\x5d\x80\x04\x9a\xa0\xd8\x89\xf8\x47\x9f\x08\
+\x9e\x13\x29\x18\x10\x2b\x32\x3d\x60\xb4\x7d\xf7\x35\xc4\xbf\xf8\
+\x09\x24\x3c\xaf\x20\x1c\x62\x81\x5d\x25\xd3\xe1\x2d\x39\x3c\x66\
+\xac\xbc\x29\x86\xfb\x43\x8b\xa9\xad\x83\xd6\x43\x78\x22\x03\x1f\
+\x14\x44\x20\x7e\x30\x14\x20\x19\xe1\x21\x82\x70\x01\xd6\xa6\x51\
+\x4d\x0c\x6a\x20\x0c\x80\xf8\xc1\x2c\x3b\x69\x82\xd5\x33\x95\x8f\
+\x50\x6a\x43\x35\xd6\x27\xbc\xdc\xe3\xf3\xb7\x9c\xf8\xb7\xca\xf9\
+\x3e\x3a\xfc\x1d\x48\xdf\xdd\x03\x3c\xa3\xf1\x97\x6a\x3e\x97\x74\
+\xde\xaf\x60\x23\x87\x30\xd0\xc8\x7d\x73\x90\xda\x38\x11\x4c\x48\
+\x17\x57\x36\xa1\x27\x04\x94\x1f\x3c\x80\x85\xdb\x94\xcd\xe0\xa8\
+\x40\xfa\xb2\x36\xbb\x90\xce\xe3\x49\xaa\x1c\x02\x2e\x6d\xf7\x72\
+\x75\x3e\x43\xbb\x04\xc7\x34\xc4\x9b\x21\x03\x88\x51\x27\x2e\x31\
+\x66\x6b\xf2\xaf\x74\xc3\x13\xca\x09\x07\x34\x72\x61\x47\xc8\x35\
+\x24\xd1\x77\x99\xe4\x6d\x9a\x1a\x7d\x73\xc8\x5d\x2a\x27\x5a\x36\
+\x31\x29\x80\xd4\x5f\x09\x4c\xae\x82\x57\x98\xd3\x79\x2a\x63\xea\
+\x83\x0c\x31\xe5\x65\xee\xd0\x4b\x68\x05\x5c\x57\x3a\xb0\x4d\x25\
+\x03\xa1\xac\xd0\xf2\x4e\x11\x1c\xf7\x52\x04\x17\x91\xe8\x28\x84\
+\xcd\xdc\x14\x53\x93\x4a\xb9\x0c\x1e\xfb\xa5\x94\x45\x90\x00\x22\
+\x0d\x92\x0e\x69\x57\x64\x83\x86\x65\x53\x2a\xee\xba\x42\xc9\xde\
+\x25\x95\x93\x5e\x4a\xe5\x43\x24\x3a\x4a\xa5\xb4\xe6\x46\xa5\x92\
+\xfc\x38\x77\xa6\xe0\x33\x8d\x56\x99\x32\x71\xaf\x6e\x64\x14\x95\
+\x70\x21\xd6\x24\x91\xde\x02\xc9\xf6\x54\xeb\xfb\xbb\x9f\x77\x36\
+\x45\xbf\xb9\x6e\x01\x04\xb0\x85\x6e\x98\x7c\xf0\x2a\x04\xe8\x00\
+\x20\xb7\x64\x73\x62\xa9\x0d\x38\xeb\x0c\x12\x96\xda\xb8\x00\x49\
+\x6c\x60\x47\x16\x60\x7d\x20\x9a\x97\x01\x31\x21\x0e\x5f\x4a\x1a\
+\x06\x63\x42\x29\x82\x82\x46\xfa\xe5\xa5\xe5\x33\x25\x58\x98\xd4\
+\x45\x43\x8e\xe7\xc1\xd6\x74\x65\x8a\x71\x74\x5c\xe6\x9b\x9b\x9b\
+\xd1\x83\x82\xea\x0d\xc6\x79\x69\x25\x42\xc9\x11\xa0\xf1\xa4\x7f\
+\xc0\x7f\xef\xd9\xd4\x20\xe4\x23\x76\x8d\x0e\x82\xa6\xa3\xcc\xbf\
+\xb5\x6d\x7b\x58\x79\x03\x2f\x2f\x9d\x03\x32\x79\xe1\x1f\x4c\xde\
+\x0f\x4e\xe2\x25\x44\x70\x10\xd3\xda\x48\x61\x23\xeb\x97\xdf\xda\
+\x62\x3e\x2c\x23\xaf\x21\x94\x67\xaf\x28\x02\xed\xa9\xa8\x2f\x4c\
+\x5e\x9a\x02\x4d\xd6\x4b\x2b\xb0\x90\x4f\xb6\x64\x15\xe6\x7d\x3c\
+\x8c\x6f\x83\xf7\xf5\xab\x74\x96\xab\xd0\x68\x2b\xb0\x03\x84\xcd\
+\x58\xe6\xa5\xaf\x4f\xbf\xa3\x60\xb7\x24\x38\x77\x97\x16\xbf\x3b\
+\x2d\xd3\x18\xa8\x86\x54\x9a\x57\xb0\x23\x38\xec\x10\xe1\x81\xab\
+\xb2\xe8\xa3\x66\xe4\x0f\x55\xac\x0c\xa7\x29\x66\x94\x56\xe6\xe6\
+\x46\xb6\xc1\xde\x4e\x29\x1b\x4c\xc5\xf8\xb9\x90\xcb\xb5\x3a\x2c\
+\x25\x70\x33\x5c\x8d\x08\x69\x16\xc7\xa1\xf2\x53\x08\xaf\x68\x9f\
+\x26\x71\xc3\xf1\x81\x2a\x17\x13\xb6\x8d\x7c\xed\xff\x48\xfd\x8f\
+\x90\x6c\x7f\x2e\x31\x7b\x93\xf3\xc5\x46\x15\xf9\x91\x39\x79\xa0\
+\x1c\xf2\x4d\x81\x05\x54\xa6\x88\xc3\x90\xec\xc4\xa8\x4f\xab\x2b\
+\x09\xb8\x04\xf4\x72\x80\xb1\xa5\x1a\x01\x85\x7b\x5d\x68\xd7\x94\
+\xa6\x9a\xeb\x0a\x63\x0f\x42\xcd\x46\xd6\x6c\x0e\x79\x00\x9c\xaf\
+\x78\xaf\xe4\x2a\x6b\x4d\x55\xd0\x51\x88\x37\x5e\x61\xc7\xd5\x92\
+\x9b\x93\x58\xc8\x0a\xf9\x6a\x1b\xe4\x2d\x79\x8d\xc5\xc9\x50\x18\
+\xcb\xf9\x55\x38\x18\x90\x79\xba\x1a\xcf\x86\xa8\xe0\xb1\x30\x65\
+\x1d\x02\xc9\x92\x43\xd2\x8a\x93\xf3\x21\xeb\x79\x11\x20\x42\x51\
+\xe5\x0b\xe6\xac\x98\x24\xe3\xc3\xa0\x84\x43\x6d\x16\xe6\xe4\x78\
+\x58\x16\x0b\xba\xa3\xbe\xd7\xca\x30\x34\x33\x64\x26\x62\x1d\x50\
+\xb9\xa0\x4f\x36\xab\x99\x80\x31\x24\x33\x94\x4e\x0a\x56\x81\xca\
+\x47\x60\x77\x2c\xa3\x6b\xcb\xa8\x9f\xdc\x40\xec\x4d\x55\x33\x8c\
+\xc1\x5b\xa5\xc6\x5a\x65\xb7\x38\xcc\x81\x45\x33\xa3\x49\x93\xa9\
+\x59\x16\xec\x43\xa6\xe6\xa1\xea\x14\x2a\x05\x64\xd9\x40\xdb\x4b\
+\x76\x25\x6b\x30\x93\xff\x8c\x97\x5f\xf0\xbc\x40\x75\xe1\x26\xa8\
+\x30\x58\x6b\x55\x67\x0a\x6f\xd9\x28\x61\x6a\x72\x08\x30\x62\xde\
+\x85\xba\xc2\xca\x8d\xd9\x7e\x54\x35\xbf\xd4\xc2\x4c\x29\x9b\xea\
+\x39\x6b\x0f\x64\x72\xba\x9b\x2d\x3a\xfc\x96\x4c\x0b\x21\x21\x54\
+\x7e\x63\x6a\x79\xd0\x5c\x7c\xad\x5e\x82\xb6\x97\x15\x88\x2f\xca\
+\xaa\x8d\xae\x72\xd8\x1d\x48\x80\x19\x04\xda\x95\xbb\x68\xc4\x37\
+\x18\x13\x21\xb5\x8e\x99\x26\xd5\x45\x45\x68\xf2\x50\x45\xb8\x8e\
+\x8f\x8b\xb8\x0d\x93\xb1\x4f\x1e\xb5\xcf\x44\x92\x42\x21\xb3\xc7\
+\x22\x03\xf5\xef\xdc\x2a\xc1\x2f\x55\xea\xb3\x49\xf2\x62\xf4\xd7\
+\x24\xe8\xaa\xe4\x02\xd4\x37\x49\x46\xe1\x7b\x19\x82\xa8\x49\xf2\
+\x0c\xbb\x5d\xbc\xc5\x3f\xe9\x23\x45\x93\x49\x08\xb8\xce\x0e\x89\
+\x82\x47\x24\x63\xcb\xb1\x5b\x3b\x96\x97\x58\x81\x33\x25\x5d\x10\
+\x34\xc9\x7b\x8b\xee\xfe\x93\xff\xab\x35\x00\xe5\x3c\xc7\x63\x3c\
+\x95\x22\x2b\xd4\x75\x25\xf7\x8c\x87\x9f\xf1\x2c\x62\x5e\xc1\x3e\
+\x3a\x70\xb8\xd4\xa4\x33\xe7\x62\x0b\x1b\xf0\xc7\xf6\x00\xda\xf7\
+\x31\xf4\x62\x3c\x1a\xb1\x01\x3b\x3a\xc2\xff\xb7\xa9\x02\x4d\x29\
+\x3e\x9d\x24\x27\xbb\x36\xa6\x7d\xd7\x02\x1b\x86\x32\xf7\x47\x54\
+\x90\x61\xef\xa9\x82\x82\x66\x40\x43\x27\x77\x69\xe8\xd1\x48\xff\
+\x48\xd1\xe1\xfd\xc2\xbf\x86\x20\x5f\xae\xe6\xb6\x8f\x4f\xfa\xbb\
+\xd9\x1f\x10\xfc\x0e\x8c\x55\x08\xe3\x94\xad\xda\xa6\x7e\x50\xf8\
+\x96\xae\x72\x29\x23\xdb\x05\xde\x1b\xe2\xdd\x17\x78\x9f\x44\x78\
+\xff\xd0\x3b\x78\xef\x64\x55\xba\xaa\x6e\x90\xff\xb4\x82\x9c\x59\
+\x81\x7f\x58\x37\xa2\x10\xdc\x06\x23\x7a\x9c\x3c\x1a\x3f\xaf\x3e\
+\x79\x2b\x21\xff\xee\x1f\xd6\x7f\xb7\xa1\x31\xf2\x02\xf2\x22\x93\
+\xc7\x16\xbf\xfd\x83\xf2\x0f\x11\xca\x3f\xee\x27\x94\xbb\x12\x74\
+\x80\x32\x26\x57\xb1\x0b\x19\x1d\x2d\x0c\xfc\x93\x3e\xdc\x02\x4d\
+\xa7\x22\xf8\x83\x69\xc1\xbe\xe4\x30\xfd\xb8\xa9\xbd\xaf\xcc\x4c\
+\x09\x70\x2c\x2f\x53\x26\xd5\xd6\xe8\xc2\xe5\x34\x28\xa9\x6b\xf8\
+\xed\xca\x3f\x6b\xad\x44\xf8\x60\xad\x83\xbb\x3f\xec\x7f\x79\x61\
+\xe5\x17\x00\x11\xf6\x88\x5e\xed\x50\xbe\xed\x53\xd3\x2f\x56\xbc\
+\x82\xb3\xa0\x5b\xf3\x58\x0a\x61\x59\xcb\x4e\xdb\x78\xd1\xf6\xf3\
+\x1c\xc4\xbe\x7c\x98\x1a\xcb\x25\xb8\x0a\xdd\xbb\x63\x57\x7a\xe1\
+\x14\x24\x84\x35\x85\x08\x5f\xdb\xcc\xb8\x7e\x77\xba\x5b\xb3\x69\
+\xa7\x01\x2a\x2f\xaf\xdf\xb6\x34\x2d\x06\x4b\x2c\x0e\xc2\x3a\xf4\
+\xb6\xc3\x5c\x69\x22\x5d\xe5\xc8\x33\xd5\x83\x41\x04\xb1\x7f\xde\
+\xd8\x21\xfb\xa0\x8a\xd8\x4c\xd9\xb5\x35\xcd\xc1\x49\xc9\xa5\xb1\
+\x57\x5d\xbf\xf4\x8a\xb0\x42\x43\x06\xbe\x1d\x41\xc5\xe9\xd5\xaa\
+\x73\x43\x42\x19\x1c\x5d\x43\xda\xed\x3a\xe3\x7e\xc2\xff\x63\x91\
+\x1a\x82\xc5\x6f\x32\x35\xbd\xe4\xe8\x75\xa5\x75\x0b\x6f\x2c\xc6\
+\x55\x0d\xc9\x16\x48\x66\xa6\x94\xa1\xf5\xdb\x21\x22\x66\x95\xd2\
+\xb1\x4e\xdc\x1d\x95\xe6\x6d\x94\xd0\x0e\x5e\xa3\x19\xdc\x02\x8b\
+\x21\x7b\xd7\x2d\x65\xb0\xf9\xb6\x7d\x07\x23\x76\xa8\x94\x5c\x5c\
+\xf1\x05\x9d\xb7\x85\xa4\x97\x6d\x60\x1b\x4c\x46\xda\x57\x31\x38\
+\xcb\xf1\x45\x0d\x61\x72\x20\x34\x58\xd4\x60\x4d\x25\xe2\x91\xba\
+\x62\x32\xea\x74\xb1\x7b\x60\x35\x37\x7d\x48\xbc\x5d\x89\xfd\xa0\
+\xc1\x8d\xac\xbe\xab\x42\xc5\x7a\x2b\x9d\x63\x17\xde\xea\xbf\xfd\
+\x0b\x47\x90\xb6\xc2\x7d\x4b\x53\xe8\xe7\x7a\xc9\x6b\x07\xea\x13\
+\x74\xcd\x40\x32\x81\x28\x17\x18\x81\x40\xb7\x69\x16\x6a\x1c\xcd\
+\xed\xb2\x7e\x0c\x17\xf0\x55\x39\x7c\x6f\x0e\xdf\x0a\x7c\xf2\x5f\
+\x2d\x31\x7f\x54\
+\x00\x00\x02\x78\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x03\x00\x00\x00\x44\xa4\x8a\xc6\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x45\x50\x4c\x54\x45\x00\x00\x00\x01\x01\x01\x05\x06\x04\x0c\x0d\
+\x07\x12\x14\x0c\x1f\x26\x09\x2b\x35\x08\x39\x45\x0b\x47\x58\x08\
+\x56\x6a\x09\x64\x7c\x0a\x71\x8c\x0e\x7d\x9b\x0e\x86\xa6\x0e\x8d\
+\xb1\x0a\x92\xb6\x0b\x95\xb9\x0e\x98\xbe\x0c\x99\xbf\x0c\x9b\xbf\
+\x14\x9c\xc3\x0c\xa2\xca\x0c\xaa\xd5\x0c\x45\xb9\x54\x8c\x00\x00\
+\x00\x01\x62\x4b\x47\x44\x00\x88\x05\x1d\x48\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xda\x0b\x04\x00\x20\x37\xaa\
+\xfa\xb2\x02\x00\x00\x00\x19\x74\x45\x58\x74\x43\x6f\x6d\x6d\x65\
+\x6e\x74\x00\x43\x72\x65\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\
+\x47\x49\x4d\x50\x57\x81\x0e\x17\x00\x00\x01\x87\x49\x44\x41\x54\
+\x38\xcb\x95\x93\x8d\x52\xc4\x20\x0c\x84\x29\x2d\x85\x00\xd7\x1e\
+\x98\xf0\xfe\x8f\xea\x06\x4a\xf5\x74\x74\x94\xb9\x9f\x19\xf8\xd8\
+\x64\x93\x60\xea\xef\xeb\x69\xfe\x07\x14\x5d\x3f\x03\xcc\xd2\x17\
+\x7f\xbe\x72\x03\x05\xa7\x67\xa2\x40\x31\x9f\x22\x75\xea\xbc\x4d\
+\xa0\x88\x64\xef\xac\xc1\xb2\x2e\x3c\x84\xcb\x2b\x50\xa4\x84\xd5\
+\xcc\xb5\x6c\x71\x12\x17\x50\xe4\xd8\x97\x71\x76\xfd\x85\xe7\x20\
+\x06\x80\xfb\xbb\x6e\xaf\x9e\x62\xa4\xdd\x9a\xc5\x2c\x7e\x68\x0c\
+\x80\x25\xe8\xc5\x3d\xab\x87\x26\x69\x57\x82\xe4\x43\x41\x92\x66\
+\xe7\x6b\x63\x98\x61\x6e\x4f\xd5\x5b\xb3\x4c\x80\xab\xd7\x73\x16\
+\x14\x89\x85\x5c\x6e\xa7\xc3\x46\x00\xc0\xa7\x02\xf2\x80\x81\xed\
+\x90\xa2\xc5\x88\x8b\x01\x11\x21\xe9\x4e\x2e\x1d\x28\x42\xc8\x00\
+\x49\xf5\xf3\x15\xf1\x1d\x33\x82\xd8\x2c\x13\x08\xf0\x15\xa5\xeb\
+\x6b\x31\x2c\xb1\x6e\x99\x78\x03\xfe\xc2\x85\x34\xd9\x35\x4a\xd5\
+\x48\x86\xbe\x00\xdc\x43\x01\x48\xdf\x00\x0d\x91\x5a\x25\xad\xd0\
+\x20\x84\xae\x10\xc7\x48\x12\x07\xa1\xe5\x5e\xc1\xa5\x97\xa0\xa9\
+\x68\x42\x5a\x47\xb7\x99\x87\x4d\x44\xb0\xd4\xc3\x38\xda\xba\xcd\
+\xda\x15\x6a\x37\x85\xba\x34\x42\x7e\x23\x11\xfd\xaa\xf1\x01\x8c\
+\x94\x2c\x61\x24\x6e\xab\x90\xd4\x52\x5f\x00\xb3\xef\x2d\x3e\x5a\
+\x43\xb3\x34\x3e\x2e\x04\x74\x66\x02\x18\x07\xa7\x7b\x5b\x48\x39\
+\x45\xbf\xf5\xb1\xd8\xd2\x87\x82\xe6\xe9\xc6\xa0\x58\xbb\xcc\xb9\
+\x52\x17\x37\x00\x0d\x7f\x9f\xc0\xe7\xae\xcd\x7a\x5c\xcd\xba\x34\
+\x38\xee\x23\xbb\x65\xdd\x13\xbc\xb8\xe3\x6e\xf7\x1c\x7b\xce\x14\
+\xbc\x0f\xf1\x51\xf1\x36\x08\xcd\x79\x01\xfa\xe4\xe9\xab\xc1\x87\
+\xbb\xa2\x8e\xe4\x2b\x70\x3d\xbd\x31\xef\xe3\xf7\x2b\xf0\x6d\xfd\
+\x01\x78\x07\x3f\xc0\x33\x81\xbd\x2f\xd9\x1a\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x82\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x40\x00\x00\x00\x20\x08\x03\x00\x00\x00\x95\x43\x8e\xb6\
+\x00\x00\x00\xc0\x50\x4c\x54\x45\x71\x8c\x0e\xa5\xa5\xa4\x0c\x0d\
+\x07\x00\x00\x00\x97\x97\x97\xa2\xca\x0c\xec\xec\xec\xfb\xfb\xfc\
+\x8c\x8c\x8b\xca\xca\xca\x78\x78\x77\xd4\xd4\xd4\xb3\xb3\xb3\x56\
+\x6a\x09\xba\xba\xba\x3a\x3a\x37\x56\x56\x55\xf2\xf2\xf2\xf5\xf5\
+\xf5\xc5\xc5\xc5\x68\x69\x67\x49\x4a\x48\x05\x06\x04\x25\x27\x22\
+\x1c\x1d\x19\x12\x14\x0c\x40\x41\x3f\xd8\xd8\xd8\x34\x35\x31\x71\
+\x72\x70\x9c\xc3\x0c\xf8\xf8\xf8\xcf\xcf\xcf\xef\xef\xef\xe1\xe1\
+\xe1\x2d\x2e\x2a\xde\xde\xde\xe7\xe7\xe8\x01\x01\x01\xff\xff\xff\
+\xe4\xe4\xe4\x39\x45\x0b\x64\x7c\x0a\x8d\xb1\x0a\x98\xbe\x0c\x82\
+\x82\x81\x2b\x35\x08\xdb\xdb\xdb\x5d\x5e\x59\x47\x58\x08\xaa\xd5\
+\x0c\x1f\x26\x09\x99\xbf\x0c\xbf\xbf\xbf\x7d\x9b\x0e\x61\x61\x60\
+\x92\xb6\x0b\x86\xa6\x0e\x9b\xbf\x14\x95\xb9\x0e\xd8\xda\xd1\xc6\
+\xc8\xbf\x62\x63\x58\xd2\xd4\xcb\x33\xee\xa2\x2e\x00\x00\x04\x7d\
+\x49\x44\x41\x54\x78\x5e\x8d\x95\xe5\xb2\x23\x37\x14\x84\x47\x30\
+\xcc\xcc\x8c\x66\xf6\x85\x0d\xbc\xff\x5b\xe5\x48\xb3\xbe\xbb\x9b\
+\x54\x25\xe9\x3f\xae\x1a\xbb\x3f\xb5\x0e\x8c\x85\xfb\xbf\xeb\xdb\
+\xd9\x39\x50\x6a\x18\x86\x85\x14\x2d\x4b\xd3\x3e\x8b\x70\x92\x60\
+\x92\xf6\x45\xdf\xe3\x29\x22\xff\x0d\x28\x15\x85\x22\xc3\x50\x75\
+\x4b\x2b\xec\xb8\xe8\x71\x92\x85\x59\x11\x63\x02\x9a\xc8\xdf\x00\
+\x7b\xa6\x5f\x01\x25\xa5\x08\xfc\x8f\x5c\x5a\x1e\x56\xe3\x0f\x0f\
+\x84\x86\xb1\xf3\x69\x60\x17\x49\x44\xa6\xe9\x67\x40\x55\x89\x5c\
+\xd5\xcf\x48\x05\x59\x7e\x93\x8f\xae\xbb\x0c\x83\xe4\xd6\xb5\xec\
+\xb5\x83\x7e\x6a\xac\xd2\x51\xb2\x69\x22\x3f\x00\x7b\x70\xbf\x0b\
+\xe6\xc5\xdc\x3e\xdf\x45\xf1\xfe\xca\xf1\x89\x1e\xfa\x29\xef\xa4\
+\xb1\xcb\x87\xd6\x75\x99\xdf\xf5\x5a\xb9\x6e\xad\xb7\xb7\x18\x02\
+\x7c\x01\xf6\xa2\xf8\xdc\xdc\x22\x02\x8a\x6e\x97\x0f\xb1\xda\x7f\
+\x07\xfc\xae\x9f\x86\xfc\xb4\xe8\x86\x91\x0f\x16\x42\xaa\xdf\x0c\
+\xfa\x38\x43\x0c\x8a\x4a\x00\x10\xe1\xe5\xdf\x5f\x30\x79\x69\x4a\
+\xb7\x2f\xc2\xe7\x9f\xdd\x32\x4a\xcb\xa2\xab\x16\x75\x92\x28\x4a\
+\xe2\x3e\x73\x0e\x8a\x62\xf9\x4a\x98\x4d\x3c\xc1\xea\xdf\x1d\xa7\
+\xd5\xfb\xfd\xe3\xf2\x6d\x25\x7c\xfe\x36\x4a\x10\x5a\x1a\x54\x2d\
+\x21\x24\x0e\x4a\x4d\xd3\x82\x73\x56\xd8\x09\x66\x4d\xe0\x00\x7e\
+\xfe\x91\xd9\xf0\xc6\xdc\x6e\xcd\x63\xc4\xbe\xd9\x40\x06\x0e\xe8\
+\x24\x77\x51\xd1\x39\x21\x38\x43\xd2\xcc\xe5\x8e\x27\x4b\xb1\x09\
+\xf9\x4a\x50\x89\x17\x76\xf0\xf1\x29\x82\xae\xa2\x70\x64\x04\x53\
+\x5c\xaf\xd0\x3c\xe8\xb9\x87\xe2\x64\x86\x0c\x5e\x99\xc9\xf3\xc6\
+\x4e\x0f\xd2\xe9\x0b\x20\x0a\xac\x7a\x9b\xfb\xb5\x82\x66\x54\xd5\
+\xf5\x1b\xcb\x83\x9f\x22\x03\x04\x61\xcc\x4b\x6b\x8f\xf3\x5c\xd7\
+\xe0\x06\xc6\xa8\xd2\xd2\x49\x00\x40\x56\x40\x75\xdf\x30\x7f\x25\
+\xee\xf7\x10\xc6\xbc\x3d\xaf\xef\x37\xb0\x5c\x00\x50\xbd\x73\x37\
+\xe4\x8b\xa9\xee\xba\xd2\x32\x7a\xb5\x64\x85\x09\x86\x27\xd3\x17\
+\x40\xfc\xc0\x84\xa4\x3b\x71\xcf\x86\x61\x3b\x11\x20\x6c\xc1\x77\
+\x7b\xaf\xf6\x00\xe0\x75\x8d\xe2\x34\xb2\x0f\x0f\x55\x1f\x8c\x20\
+\x4c\xd6\x3a\xaf\x04\x81\x95\xd0\x04\x1e\x14\x8d\xfb\x31\x01\x42\
+\x55\x1d\xc1\xf4\x14\x01\xc0\x9b\x1b\xe1\x38\x8e\x53\x12\x8c\xf5\
+\x7c\xe0\x66\xfc\xea\xd6\x0a\xb8\x00\x6f\x2b\xf2\xfc\x98\xfd\xdc\
+\xac\xd8\x23\x02\x8f\xd6\x2b\x64\x4a\x1a\x65\x94\x2a\xc8\x9b\x67\
+\x6d\xb2\x33\xc5\x8e\x48\x11\x4f\x69\x91\x12\xc2\x01\x9b\xf5\x38\
+\xf0\xb3\x9f\xe3\xad\x78\x67\x37\x21\x26\x07\xb0\xf6\x79\x65\x66\
+\x79\xcb\x3c\xb6\xf3\x5c\x66\x43\x37\x5b\x85\x63\x04\x24\x44\xf6\
+\x2f\x00\xf0\xf3\x5c\x58\xf8\x19\x30\x65\xd6\xe2\x5b\xea\xb0\x8c\
+\xb2\x2c\x01\x20\x08\xa5\xb9\x53\x0d\x5a\xa4\x99\x86\x32\xf2\xe3\
+\x0a\xc2\xf5\x0e\xe7\xbf\x08\xa2\xf9\xfd\x0a\xbb\xec\x34\x7b\x5e\
+\xd7\xb9\xae\x3c\xd7\xc3\x22\xbb\x4e\xf8\x68\xbd\xe5\x71\x70\x0e\
+\xd4\xa2\xfd\xab\x88\x60\xbc\x5c\x9f\x11\xaf\x2c\x1f\x81\x2b\x0b\
+\x25\x40\x59\x76\x87\xa5\xf5\xea\x99\xa9\x96\xd4\x4e\x1e\x0a\x9b\
+\xea\x6d\xed\xb9\x75\x6e\x58\x25\x26\x6b\x1b\x9f\xbc\x8d\xec\x06\
+\x91\xc9\xaf\x71\x33\x53\xde\xc6\x7b\xb5\xfb\x43\x1d\x25\xd7\x93\
+\xe5\x5a\x6e\x87\x66\xac\x4f\x36\x0e\xf4\xa5\x95\x65\x57\x55\xb4\
+\x70\x5a\x01\xd0\x34\x3e\x37\x57\x13\xea\xb7\x16\x82\x51\x36\x22\
+\x03\xd8\x28\xcf\x07\x40\x78\x6e\xa7\x37\x8b\xab\xda\x93\x63\x74\
+\x92\x34\x3c\x14\x3b\x8c\xc9\x0a\x58\x4b\x16\x99\xa2\xf8\x7c\xb5\
+\x12\x94\xc2\x28\x03\x20\x56\xfc\xe6\x34\xc2\x42\xba\x83\xef\xe7\
+\x92\x91\x90\x9e\xaa\x8d\x41\x83\xd0\x2e\xa2\x17\xa0\xaa\x36\x7c\
+\x85\x77\xd7\x2b\x2c\x13\xbb\x3f\x00\x2f\xd7\x8a\x03\x0e\x96\xaf\
+\x03\xa0\xf5\x1a\xcb\x6a\x24\x94\x24\x09\x35\x0e\x85\xed\x84\x3d\
+\x3b\xe8\xb5\xce\xbb\x1b\xf3\xa4\x17\xe1\x29\x6c\x37\x29\x7f\x2d\
+\xa4\x02\x4f\x90\x6a\x86\xd5\x0c\x63\xdb\xb6\xbe\x65\x9c\xe4\x26\
+\x4b\x52\x05\xf5\xa9\xed\x38\x31\x54\x60\x05\xf0\x3a\xde\xd6\xd1\
+\x8c\x22\x00\x71\xf1\x2e\x54\x3b\xfc\x86\x0c\x5f\x1f\x46\x4f\x42\
+\x07\x45\xaf\xf3\x82\x10\x9b\x16\x8f\x26\x28\xf8\x46\x71\xc0\x9a\
+\x61\x03\xce\x97\xf0\x91\x2d\xd3\x07\x5b\x26\xec\x20\xe3\xd1\x0c\
+\x8b\x2b\x6b\x38\x3d\xa3\x37\x36\xab\x41\x70\x72\x55\x1a\xc7\xaf\
+\x1a\x70\x89\xd5\xf6\x88\xd7\x14\xf8\x28\x40\x2f\x6e\xbb\x75\x9d\
+\x33\x00\xf8\x7a\xb7\x48\x39\x0d\xfa\x94\xa5\x4c\x34\xcd\x58\x72\
+\x5f\x2b\x7b\xf2\xeb\x6b\xbd\x7a\x9a\x97\xcd\xe6\xb2\xfd\xb8\x8b\
+\x62\x65\xc2\x72\x70\x40\xac\x20\x84\x28\x50\x60\x7e\x35\x4c\xa2\
+\xd4\x7e\x3b\x94\xa5\xae\x3e\x9a\xee\xc0\x01\x3f\x54\x89\xa0\x0a\
+\xcc\x15\x4f\x04\x7e\x06\xc0\x8e\x12\x38\x8a\xd1\x2c\xdd\xd2\x20\
+\x87\xfd\xaf\x85\xa1\x63\x2b\xbe\x95\xcb\xe8\x9f\x7f\x6d\x5c\x9c\
+\x06\xf6\x15\x30\xc5\x6f\x01\x6a\x5b\x6f\x5c\x64\x6f\x19\x8d\x73\
+\xd8\xf7\x71\x9f\x24\x07\x45\xd1\x4b\x9e\xe0\xdf\x04\x00\x08\x5d\
+\xd0\x06\x66\xef\xd4\xca\x3a\x8c\x94\xef\xc4\x49\x0a\x4a\x0a\x5b\
+\x29\x63\x42\xfe\x07\x80\xe0\x80\x1a\x14\x21\x75\x68\xd4\x26\x57\
+\x92\x42\x3b\x4f\x53\x12\x25\x81\x81\x94\x84\xfc\x05\x2c\x83\xdc\
+\xf4\xf9\xf1\xbe\x01\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x06\xd8\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x06\x6a\x49\x44\x41\x54\x58\xc3\xed\
+\x55\x69\x4c\x94\x57\x14\x55\xd4\x56\x5b\x63\xb4\xd5\x68\x13\xb5\
+\x5a\xb5\x5a\x71\xa9\x25\x75\x50\x91\xd2\x0a\x54\x65\x13\x10\x14\
+\x64\x19\xd1\x6a\x2b\x8b\x53\x34\x38\x2c\x65\x11\x37\x16\x51\x60\
+\x40\xa8\xe2\x52\x59\x44\xa4\x54\x2d\x8e\xe0\x82\x36\x2e\x35\x2e\
+\xa3\x18\xc6\x9a\x6a\x27\x85\xa9\x86\x88\x31\x19\xa5\xc9\x24\x24\
+\xa7\xe7\x8d\x6f\x5a\x4b\x45\xb1\xb5\xb1\x3f\x3a\xc9\xc9\x97\x6f\
+\x79\xf7\x9e\x7b\xee\xb9\x77\xba\x00\xe8\xf2\x22\xd1\xe5\x7f\x02\
+\xff\x29\x02\x1f\x06\xa6\x78\x10\x49\x44\xa1\x44\x26\xb1\x84\xb0\
+\xfb\x57\x09\x30\x81\x0f\x51\xaa\x5a\xad\x35\x24\x64\xea\x5b\x12\
+\x33\x8d\xa6\xc4\x2c\xa3\x29\x35\xe7\xe6\xbd\xf8\xcc\xb3\xb7\x16\
+\xab\x4b\xaf\xf3\x7d\x9d\x24\x67\xfb\x5c\x09\x30\xe0\x50\xb7\xb0\
+\x0c\xdd\x9a\x9c\x3b\xad\xa1\xd1\xc0\xac\x50\x60\x46\x30\xe0\xaa\
+\x04\x3c\x3e\x05\x16\xac\x04\x22\x53\x81\x35\xf9\xe6\xb6\x75\x5b\
+\xf4\x2d\xc1\xd1\x45\x7a\xa9\x8e\xcb\xf3\x22\x10\x1d\x9f\xa1\x6b\
+\xf6\x5f\x06\x4c\x98\x0d\x8c\x72\x25\xdc\x80\xb1\xde\xc0\x78\x7f\
+\xc0\x2e\x08\x70\x08\x23\xb1\x70\x20\x38\x16\x88\xdd\x04\x64\x6e\
+\x35\x9a\x3e\x89\xb5\xa8\xf2\x8f\x89\x08\x02\x75\xb1\x69\xe6\xb6\
+\xa9\x7e\xc0\x9b\x0c\x35\xdc\x1d\x18\x13\x00\x4c\x5c\x08\x28\x48\
+\x4a\x11\x01\x4c\x66\x72\x7b\xaa\x31\x8d\x70\x89\x04\x02\xe3\x48\
+\x64\x33\x90\xb5\xc3\x68\x0a\x5e\x61\x51\x44\x2d\x94\xfc\x5b\x04\
+\x84\xfc\xcb\x29\xf1\xfb\xf3\x80\x91\x5e\xc0\xb8\x10\x56\xac\x02\
+\x3c\x57\x33\x11\xab\x55\xe6\x02\x41\xbc\x7a\x6f\x60\x5b\x12\x00\
+\xc7\x15\xc4\x72\x2a\xf2\x39\xdf\x25\x01\xa9\x85\xc0\xda\x7c\x5d\
+\xb3\xdb\xa2\x0c\x1d\x49\x84\x3f\x33\x01\x21\xa5\x6a\x3d\x30\x85\
+\xbd\xb7\x65\xef\xa7\x31\xb0\x7f\x06\xb0\xaa\x14\xc8\x3b\x02\xec\
+\x3c\x05\x6c\x3d\x09\xa4\x7d\x0b\xac\x28\x26\x19\x12\x9a\xbd\x06\
+\xf8\x68\x15\xbd\x42\x32\x73\xd4\x40\x04\xc9\xe5\x94\x98\xdb\xa2\
+\x56\x57\xdd\x78\x56\x35\x44\x0b\x2e\x24\xe4\x00\xce\x94\xd6\x9e\
+\xfc\x3d\xd7\x02\xea\x32\x60\xef\x05\x60\x73\xe9\xd9\x5b\x91\xa9\
+\xa5\xd7\xd3\x77\xd6\x35\x56\x9e\x32\x9a\xf6\x5f\x65\xa2\xe3\xc0\
+\xca\x3d\x34\x67\x1e\x89\xf0\x5b\x67\xfa\x62\x16\xc9\x04\xa5\xd0\
+\xa8\x5f\x02\xeb\x0b\x7e\x57\xc3\xa7\xd3\x1e\xc8\x2a\x36\xb7\xf9\
+\x25\xb2\xbf\xec\xad\x32\x1f\xc8\x3f\xc6\xca\x0f\xe9\x5b\xe4\xd8\
+\xd9\x11\x81\xc2\x70\xf3\x55\x9a\xfa\xaa\xb3\x46\x53\xe5\x15\x20\
+\xbd\x16\x08\xa7\x22\xfe\xd9\x24\x40\x45\x3e\x66\x7b\x44\x8c\x15\
+\xf4\x86\xa6\xe4\x4e\xab\x5f\xb8\xa6\xbe\x33\x2d\x11\x04\x92\x36\
+\xee\xd4\xb7\xa8\x34\x0c\x96\x0e\x44\x7d\x05\x94\x9f\xa7\x0a\x59\
+\x16\x39\x9d\xda\x2d\x2a\x17\x41\x44\xbd\xa9\xea\x46\xf5\x15\x93\
+\x79\xfb\xf7\x40\xc2\x41\x60\xe1\x76\x7a\x64\x23\x30\x93\xbe\xf1\
+\x26\x89\xcf\x18\x47\x53\x66\x6e\x5b\x12\x6f\x99\x14\x75\xfb\xa4\
+\x62\x97\x58\x77\x8a\xe5\xc6\x2f\x42\x53\xaf\xd9\xcf\x8a\x28\xa1\
+\x7a\x2f\x50\xa9\x23\x91\x35\x96\xc3\x8f\xdd\x80\x7c\x1e\xe2\xb1\
+\x24\x43\x57\xf1\xdd\xcd\x7b\x55\x0d\x1c\xcb\x3a\xee\x8a\x72\x20\
+\x60\x0b\xe0\x46\x3f\x78\xb1\x1d\x61\xbc\x66\x95\x00\x31\x69\x5a\
+\xc3\xa3\xbe\xb0\x26\x2f\x28\x7e\xa8\xb0\x35\xa0\x3a\x73\x97\xae\
+\x39\xfd\x1b\x20\x85\x44\xca\xd9\xff\x8c\x5d\x75\x8d\x42\xfa\x8e\
+\xa4\xe3\x3b\x7b\xb1\xaa\x53\x0b\xb5\x86\x9a\x6b\xe6\xb6\x82\x73\
+\x24\x4f\xa3\x2a\x77\x50\x85\x4d\x0f\xbd\xa4\x24\x89\x75\x3b\x69\
+\xe0\xad\xba\x66\x6b\xc5\xe2\x9a\x4b\xc5\x4f\x9e\x01\x84\xff\xac\
+\xc1\x86\xba\x2f\xce\xd0\x95\xd6\x99\xcc\xb9\x74\x7e\x31\x83\xed\
+\x3d\x71\xf3\x9e\x48\xf0\xb4\x1e\x8a\x3e\x2f\x4e\x28\xd2\xd7\xea\
+\x4d\xe6\xdd\x54\x2e\x99\xde\x58\xca\x09\xf2\x67\x4b\xbd\xd3\xb8\
+\xbc\x88\x38\x8e\x6a\x42\xb6\xa5\xe2\x03\xaa\x54\x7d\x4b\x26\x95\
+\xd6\xd6\x3d\x42\xc0\x2a\xab\x72\x55\x91\xbe\xf2\x9c\xb9\x6d\x0f\
+\x3d\x70\xda\x00\x08\xd3\x75\x66\xf7\x5b\x5b\x52\x73\xf5\x4e\x6b\
+\x05\x5b\x92\x76\x02\x58\x56\xc1\x49\x61\x62\xdf\x2c\x60\x1e\x95\
+\x08\x5e\x47\x52\x6a\x93\xd9\x87\x3b\x64\x59\x32\xdb\xac\x6d\x47\
+\xc0\x5a\x4d\x62\xae\xd6\x70\xec\x1a\x70\xf2\x47\xa0\xec\xc8\xc3\
+\x3e\x75\x66\x9c\xc4\xd8\x79\x92\x44\xf1\x51\x7d\x4b\xd5\x75\xfa\
+\x82\xfb\x63\x79\x15\x10\x42\x83\xfa\x70\x32\x66\xd3\xa0\x4e\xfc\
+\xaf\x71\xe4\x76\x0d\x63\xc4\x7d\x35\x8f\x21\x60\xf5\x43\xb2\x46\
+\x6b\xb8\xf4\x33\xd0\x70\x1b\x58\x14\x67\x59\xb5\x3e\x9d\x24\x61\
+\xe9\x71\x09\x49\x7c\x4d\x12\x69\xa7\x01\x15\x3d\x15\xb2\x8b\x24\
+\x38\xae\xce\xc9\x0f\x17\xd8\x52\x4e\x49\xd5\x71\x49\xe0\x71\x3f\
+\x0b\x89\x3c\xad\xa1\xe1\x16\x70\x82\xb2\x8a\xbf\x6a\x7b\x8f\xa8\
+\x01\x7c\xd5\x4d\xa2\x7b\x07\xe8\xe6\xe8\x1f\x37\xde\x29\x20\x29\
+\x25\xb3\xfc\xec\xad\xa2\x7a\x7a\x82\xed\x88\x20\x09\x25\x77\x86\
+\x2f\x7d\xe1\xc5\xe4\x2a\xb6\xe6\xe0\xe9\xc7\x13\xe8\x4a\xd8\x88\
+\x40\x4e\x01\x89\xf1\x61\xb1\xdb\xf4\x17\x0d\xe6\x36\x4d\xf9\x99\
+\xdb\xd3\xfd\xe3\xc3\xf9\xbc\x17\xf1\x0a\xf1\x6a\x07\x10\xef\x7a\
+\xd9\x7b\xaa\xde\xfb\x60\x7e\xe2\xb6\xec\xe3\x46\x53\x1a\x0d\x9d\
+\xc0\x6a\x97\x73\x42\x16\x73\xc3\x86\x16\xf1\x9e\x23\x7b\xf8\xe2\
+\x5f\x09\xd8\xc8\x2a\x5e\x22\x7a\x12\xbd\x1d\xe6\xaa\x57\xfa\x47\
+\xe5\x34\x1c\xbf\x7c\xe7\xd7\xe4\xbc\xea\x46\x85\x7b\xc4\x02\x3e\
+\x1f\x48\x0c\x92\x78\x43\xc2\x7a\x3f\x70\x8c\xfd\x9c\x49\x0e\xbe\
+\xab\xd2\x8b\x6a\x1b\xee\x56\xdc\x04\x0a\xb8\xbe\x37\x71\xac\xd7\
+\xd3\x13\x5f\x70\x42\xe2\xb8\xb8\x72\xb9\x69\x4f\x5d\xfb\x33\x01\
+\x91\xbc\x87\xac\xb0\x0f\xf1\xba\x0c\x38\xc4\x6e\xe6\x92\xa5\xd3\
+\xe7\xaa\x0f\x64\x97\x9e\x6a\x56\xc6\x14\xde\x78\x6b\xa2\xf3\x2c\
+\x3e\x1f\x4b\xd8\x12\xe3\x24\x6c\xe5\xb3\x77\x26\xbb\x45\x6c\xd8\
+\x55\x7d\xa1\xa5\xfe\x2e\x50\xf7\x0b\x70\x88\x5e\x3a\xf0\x13\x7b\
+\x4e\x53\x97\x73\x42\xca\xb9\xc6\x8f\xfe\x00\xd4\x37\xfe\x41\xa0\
+\xab\xac\x5c\x24\xef\x2b\x2b\x1a\x2e\x82\x11\x13\x08\xbb\x7e\x03\
+\x87\xbb\xbc\x3b\x43\x99\x36\x78\xb4\x22\x90\xf7\x8e\x84\x93\xb0\
+\x4a\x3b\x38\x0d\x7e\x5b\xb1\x40\x19\xb3\xc5\x70\x44\xd7\xd8\x7a\
+\xf4\x72\x63\x6b\x2d\xaf\xb5\x97\x9b\x1e\xd4\xea\x9a\x1e\xd4\x5c\
+\x6a\x7a\x70\xf8\x52\xd3\x7d\xed\x85\xa6\xfb\x87\xcf\x1b\xef\x1f\
+\x3a\x67\x34\x89\xb5\x6e\xad\xfe\x65\x59\xb9\xa8\x7a\x24\x31\x91\
+\x98\x22\x13\xb9\x12\xb3\x09\x77\xc2\x8b\xf0\x26\x7c\x89\xb9\xed\
+\x20\x9e\x79\x8f\x98\xe4\x9a\xa8\x70\x8b\xd0\x5a\xe0\x1e\x59\xad\
+\xf0\x88\x3a\x38\xc5\x53\x55\x35\x75\x4e\xf4\x3e\x07\x9f\x98\xb2\
+\xe9\x7e\x71\xbb\x1d\xe7\x25\xec\xa0\xc7\xb6\xd1\xac\x22\xb6\xc5\
+\xd5\xa2\xe7\xfd\x84\xe4\x52\x4a\x7b\x62\x06\xe1\x26\x13\xfa\x11\
+\xf3\x09\xa1\x40\x10\x11\x42\x84\xb6\x43\x88\x7c\x17\x28\xbf\xf5\
+\x93\x67\xdd\x64\x2c\x7b\x19\x7b\x88\xcc\xd5\x53\xe6\x7e\xf1\x04\
+\x9e\x6b\x0b\xe4\x37\xee\xf2\x8c\xab\x8c\x31\x45\xc6\x1c\x29\x73\
+\xf4\x91\x39\x6d\x3a\x65\x42\x42\x41\x4c\x25\x1c\x9e\x64\x42\xf9\
+\xce\x41\x7e\xab\x90\x67\x27\xc8\x58\xc3\x65\xec\xbe\x32\x57\x77\
+\x99\xfb\xc9\x63\x48\x0c\x23\x46\x10\xa3\x88\xd1\x32\x58\x87\x63\
+\x28\xbf\x19\x25\xcf\x0c\x93\x31\x06\xc9\x98\x7d\x64\x8e\x1e\xd6\
+\xea\x9f\xb8\x88\xe4\x01\xd1\xaf\xd7\x88\xfe\xc4\x80\xa7\x2d\x22\
+\xf9\x4d\x7f\x79\xa6\x9f\x8c\xd1\x5b\xc6\x7c\x49\xe6\xb0\xb1\xfe\
+\x7f\xfc\x06\xb3\xa4\x19\x9e\x6b\xe3\x34\xfa\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\x94\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\x26\x49\x44\x41\x54\x58\x85\xc5\
+\x96\x6d\x4c\x53\x57\x18\xc7\x3b\xc5\xa9\x73\x4e\x21\xc6\x45\x65\
+\xbe\xc4\xf8\xc2\xc8\xc4\x84\x2d\x43\x08\x74\x33\x6a\xf4\x83\x73\
+\xcb\x14\x4c\x8c\x89\xc9\x8c\xc9\xa2\x26\x66\x89\x19\x59\x50\xdc\
+\xa7\xc5\x84\x7d\x33\xc6\x97\xf8\x61\x5b\xf4\x83\x13\xfc\x60\x8c\
+\x41\x37\xd4\x11\xa7\x20\x82\x88\xa0\x85\xad\xa5\xb5\x40\x5b\x4a\
+\x69\x7b\x5b\x5a\x28\xf2\xec\xf9\xf7\x9c\xb3\x7b\x21\x8a\x55\xae\
+\x91\xe4\x97\x73\xee\xe9\xbd\xe7\xff\x7b\x9e\x7b\x7b\x8b\x85\x88\
+\x2c\x6f\x92\x37\x1a\x9e\xb2\xc0\x67\xdb\x8f\xe4\x1a\xd8\x33\x86\
+\x72\xe6\xa4\xa4\x82\xc9\x33\x55\x80\x37\x2c\x2d\x3d\x7a\xd6\xa6\
+\x38\x7f\xf9\x76\xb7\x91\x9b\x75\x6d\xfe\xd6\x76\x57\xb8\xdd\xee\
+\x8e\x34\xb7\x39\xc2\x5f\xec\x3e\xda\xc4\xd7\xac\x37\x53\xa0\x81\
+\x47\x1a\x19\x21\x52\xa3\x9a\xab\xbf\x58\x2c\x4e\x1e\x8f\x97\x86\
+\x87\x87\xa9\xb9\xb5\x23\x6a\x2d\x3e\x7c\x8a\xaf\xcb\x36\x4d\x40\
+\x85\x3e\x0f\x4d\x8b\x50\x4b\xcb\xc3\xa4\x4c\x22\x91\xa0\xea\x1b\
+\x0d\x01\x6b\xc9\xe1\x23\xa9\x48\xa4\x24\xf0\xf4\x29\x71\x75\x3a\
+\x63\x8f\x83\x41\x8d\xea\xeb\xef\xfe\xdf\x91\x48\x24\x42\xd7\x6a\
+\x1b\x93\x12\xa6\x09\x0c\x25\x9e\x4f\xa0\x5f\xa3\xdb\x77\xea\x47\
+\xdd\x96\x48\x34\x4a\x85\x5b\x7f\x68\x34\x45\x20\x31\x3c\x3a\x70\
+\x70\x68\x34\xc1\x50\x94\x6e\xfe\xf5\x37\x5d\xbd\xfa\x07\x5d\xa8\
+\xac\xa4\xaa\xaa\x8b\xf4\x67\xcd\x75\xda\xb8\xa3\xec\xa1\xc5\x62\
+\x79\x6b\xc2\x02\x08\x1d\x88\x0b\x62\x83\x02\x04\x63\xc4\x9a\x16\
+\x4d\xd0\x23\x9b\x83\x2a\x2f\x5e\xa2\xd3\x67\x7e\xa1\xb3\xe7\x7e\
+\xa7\xda\x5b\x77\x28\xff\xcb\x83\xf7\x4d\x11\x88\x4b\x81\x48\x5c\
+\x17\x31\x12\x8d\x8d\x50\x5f\x28\x4e\xae\x6e\x3f\x75\xba\x3c\xe4\
+\xe6\xb1\x8f\x6f\x0b\x3f\x03\xf7\x4c\x11\x88\x71\xb5\xa1\x01\x6e\
+\x75\x54\x48\x18\xe7\x18\x81\x16\x13\xeb\x18\x93\x62\x7c\x8d\xfc\
+\x0a\x4f\xfc\x19\x88\x0e\x8a\x8d\x55\x90\x31\x10\xf3\x40\x44\x5f\
+\xc3\x1c\xeb\x90\x33\x4d\x40\x93\x55\xf7\x69\x22\x00\x8c\x9d\xab\
+\x4e\xa8\x75\x48\x9b\x26\x10\xe6\xca\x7a\xc3\x62\x63\x8c\xbe\x90\
+\x08\xf2\x04\xf5\x40\xac\xe1\x58\x8d\xb8\xc6\x34\x81\x20\x57\xdf\
+\xd3\xaf\x87\x63\x04\xc6\x40\x88\xe0\x9c\xd7\x22\x10\xe0\xd6\xba\
+\xfb\x88\xba\x02\x22\x04\x01\x4a\x06\x6b\x00\x6b\x6a\xee\xf2\xf3\
+\xed\x18\x30\x59\x00\x9b\x22\x1c\x38\x7b\xc5\x31\xa4\x30\xfe\xe3\
+\xd5\xe7\x10\x80\x18\xae\x31\x55\x00\xa1\xd8\x1c\x63\x87\x47\x88\
+\x20\xd0\xd1\xab\x77\x07\x73\x25\xe7\xd7\x4c\x14\xf0\x86\xc5\xc6\
+\x08\x40\xb5\x10\x30\x0a\x19\x3b\x82\x35\x5b\x8f\xc9\x02\x5d\x41\
+\xbd\x3a\xbb\x8f\xe8\x71\xb7\x10\x41\x28\x64\x94\x18\x3e\xc3\x1c\
+\x02\x3d\x21\x21\x80\x37\xe1\x78\x6f\xc3\x94\x04\x50\x0d\x42\x11\
+\xd6\xd6\x25\xc2\x70\xac\x50\xc7\x10\x50\x1d\x72\xf7\x43\xa0\x1c\
+\xaf\xe2\x29\x4c\x1a\x33\xe9\x59\x32\x29\x09\xf4\xb2\x40\xab\x5b\
+\x60\x0c\x57\x32\x00\x55\xe3\x58\x75\x01\x1d\xe0\xdf\x82\x26\x0e\
+\x7c\x97\x79\x87\x99\x6a\x14\x49\x49\x00\x27\xa2\x0a\xdc\x02\x04\
+\x22\x44\x85\xb7\x3c\x11\x42\x08\x55\xe1\x4e\xd9\xfe\xfb\x4e\x7e\
+\x16\xf8\x9a\xa2\xe2\x43\xcd\xbc\xc7\xfb\xcc\x1c\x66\x96\x14\x41\
+\x47\x26\xbd\x50\x40\xb6\x6b\xb2\xb5\xa4\xbc\x11\xed\x6c\xea\x24\
+\x7a\xe0\x12\x41\x08\x86\x00\xc0\x31\x3e\xfb\x97\xbb\xe0\xe4\x87\
+\xb0\xc3\x2b\xaa\x77\x7a\x82\x43\x05\x5f\x97\xd6\xf0\x1e\xcb\x99\
+\x25\xcc\x7c\x26\x5d\x4a\xa4\xa9\x2e\x8c\x27\x80\x56\xa5\x41\xc0\
+\xe1\xd7\xab\x6e\xb0\xeb\xed\x6f\x76\x8a\x96\x23\x34\x29\xd9\xee\
+\x8d\x9f\xbf\x52\x17\xf8\xe6\xfb\xe3\x8e\x82\xaf\x0e\xd6\xe6\x7c\
+\xbe\xf3\x47\xde\x23\x97\xf9\x88\x59\x26\x25\xde\x63\xde\x56\x5d\
+\x78\x91\xc0\x14\xdc\xc7\x27\xfd\x7a\xbb\xdb\xb9\xc5\x75\x76\x11\
+\x8a\xf5\x7b\x36\x6f\xfc\xd8\xaf\xd5\xbe\x92\xbd\x15\x8e\xbc\xcd\
+\x07\x6a\x56\xaf\xdd\x75\x62\xfe\xd2\xdc\x5d\x7c\xed\x5a\xc6\xca\
+\x14\x30\x9f\x30\xd9\xcc\x22\x26\x83\x99\xf6\x52\x02\xa8\xee\x11\
+\x57\xdd\xc9\x9d\x70\xf1\xf7\xbc\x11\xa1\xbf\x55\xfb\x8a\xf7\x56\
+\xd8\x11\x9a\x9d\xbf\xed\xa7\x8c\x79\xcb\xb6\xf3\xf9\x1b\x98\xf5\
+\xcc\x3a\xb3\x04\x92\xb7\x20\xc4\x3f\xad\x0d\x36\x5f\xec\xf8\xb9\
+\x6b\x3d\x25\xfb\x7e\xee\xc8\xdf\xf2\x5d\xf5\x2a\xeb\x8e\x43\x73\
+\x32\xb3\xb6\xf0\x39\x85\x4c\x91\x81\x42\x19\xba\x86\xf9\x74\x22\
+\xb7\x20\xf9\x10\x16\x6d\x2b\x2b\x43\x17\xf8\x3f\xdc\xaa\x8f\x37\
+\x7d\xbb\x3f\x73\x45\x1e\x36\x5e\xc9\x7c\x28\x37\xce\x61\x56\x1b\
+\xc8\x91\xeb\xa8\x38\xeb\x95\x1f\x42\x83\x44\x9a\x6c\xd9\x4c\xd9\
+\xbe\xb9\xcc\x3c\x66\x01\xf3\x81\x6c\xeb\x62\x03\x38\x5e\xc8\x64\
+\xca\xd0\x57\xfb\x1a\x3e\x43\x02\x6d\x9b\xce\xcc\x90\x32\xd8\x70\
+\xb6\xac\x2a\xc3\x40\xba\x5c\x9f\x25\xdb\x3d\xee\x8b\xe8\x3f\x61\
+\x3e\xe0\x61\x6f\x4e\x8f\x30\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x06\xa0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x06\x67\x49\x44\x41\x54\x58\xc3\xc5\x57\x09\x50\x95\x55\
+\x14\xfe\x1f\xfc\xef\xe1\x56\x84\x58\x6e\x28\xa0\xa8\x94\xca\x66\
+\x88\x20\x62\xa8\xb8\x01\x06\x83\x4b\xb2\xa8\xa5\x0c\xa8\xe1\x14\
+\x68\x5a\x2a\xc6\x96\x92\x28\x8b\x0a\x18\xc8\x22\x04\xc8\x22\x02\
+\xa9\x91\x0b\x33\xc0\x10\x20\x88\x20\x88\x38\xb8\x0e\xe5\x30\xd3\
+\xd4\xb8\xa0\xa3\xa3\xef\x74\x3e\xba\x14\x33\x99\x3d\x2c\xeb\xcd\
+\x7c\x73\x38\xe7\x7c\xe7\xdc\x73\xcf\x5d\xfe\x8b\x44\x44\xd2\xff\
+\x89\xe7\x3b\x25\x49\xc1\x18\xcb\x70\x64\x78\x32\x3e\x64\x6c\x16\
+\xd2\x53\xd8\xe1\x57\xfc\xab\x05\x88\x81\xc7\x30\x16\x2d\x59\xb2\
+\x24\x31\x21\x21\xe1\x2c\xff\xda\x5b\x5b\x5b\xef\x76\x74\x74\xa8\
+\x21\xa1\xc3\x0e\x3f\x78\x82\xaf\xf8\xc7\x05\xf0\x4f\x8b\x61\xe5\
+\xe0\xe0\x10\x9c\x94\x94\x54\xd9\xd2\xd2\x72\x8f\x41\xc7\x8f\x1f\
+\xa7\xe0\xe0\x60\x0a\x08\x08\xe8\x96\xd0\x61\x87\x1f\x3c\xf0\x11\
+\x87\xf8\x17\x2e\x40\x0c\x3e\xc5\xcd\xcd\x2d\xb6\xb8\xb8\xb8\xad\
+\xb9\xb9\x99\x52\x52\x52\xe8\x3d\x9f\x55\x57\xad\xe6\x2f\x2d\x1b\
+\xe5\xbc\x36\x7f\x90\xfb\x8e\xc3\x90\xd0\x61\x87\x1f\x3c\xf0\x11\
+\x87\xf8\xbe\x14\xf1\xa7\xf5\xb6\xb3\xb3\x0b\x29\x2c\x2c\x6c\x6b\
+\x68\x68\xa0\x1d\x21\xa1\x9d\xd3\x17\xaf\x39\xa5\xef\x1d\x95\xa6\
+\xe7\x97\x1e\x3f\xee\x93\xfc\xaf\x26\x6e\x2d\x4a\x82\x84\x0e\x3b\
+\xfc\xe0\x81\x8f\x38\xc4\xf7\x65\x5f\xf4\x2e\x40\x66\x78\xc4\xc6\
+\xc6\x56\x35\x35\x35\x51\x4c\xdc\xbe\x4e\x9b\x55\x5b\xf3\xa4\x95\
+\x29\x31\x43\x36\x9d\xdc\x3b\xf3\x40\x43\xfc\xc6\x92\x6b\x39\xe1\
+\x67\x3a\x8e\x42\x42\x87\x1d\x7e\xf0\xc0\x47\x1c\xe2\x91\x07\xf9\
+\x34\x2e\x40\xcc\xde\xd4\xd5\xd5\xf5\x50\x55\x55\xd5\xfd\x92\x92\
+\x12\x5a\x1e\x18\xf6\x9d\xf4\x41\xe6\x5e\x69\x53\x45\xd8\xac\x8c\
+\x5b\xd1\xa9\x8d\x77\x4f\xbc\xbb\x2e\x8e\x7c\x77\x64\x13\x24\x74\
+\xd8\xe1\x07\x0f\x7c\xc4\x21\x1e\x79\x90\x4f\x93\x2e\xf4\x14\xa0\
+\xcd\x98\x1f\x1e\x1e\x5e\x51\x5f\x5f\x4f\x7b\xe2\xe2\xaf\x8e\x5c\
+\x97\x92\xfc\xfa\x8e\xaa\x48\xab\xb4\xce\x9d\xc9\x2d\x8f\x8f\x5d\
+\xfe\x45\x7d\xd9\x27\xb2\x96\x7c\xe2\x6e\x12\x24\x74\xd8\xe1\x07\
+\x0f\x7c\xc4\x21\x1e\x79\x90\x0f\x79\x35\x2d\x40\xc5\x58\x9d\x95\
+\x95\x75\xbd\xba\xba\x9a\x02\x23\x13\xce\xa0\xbd\x73\x33\x3b\x62\
+\x42\x6b\x1e\xa5\x37\xff\x4c\xcd\x9d\x0f\xe8\xb6\xcb\x17\xd7\xc8\
+\x65\x3f\x11\x24\x74\xd8\xe1\x07\x0f\x7c\xc4\x21\x1e\x79\x90\x0f\
+\x79\x35\x2d\xa0\x3f\x63\x4b\x69\x69\xe9\xbd\xf2\xf2\x72\x5a\xb8\
+\x2d\x25\x7b\x52\x54\x5d\xf4\xf6\x8a\x3b\x19\x92\xe9\x1a\x1a\xef\
+\x12\x41\xf6\x6b\x0b\x68\xda\xf6\x0e\xb2\xd9\x49\xdd\x12\x3a\xec\
+\xf0\x83\x07\x3e\xe2\x10\x8f\x3c\xc8\x87\xbc\x9a\x16\x30\x80\x11\
+\x7e\xfa\xf4\x69\x75\x65\x65\x25\x8d\x0d\x3a\x72\xd0\x3a\xbe\x35\
+\x3a\xfa\xfc\xc3\x5c\xc9\x29\x9f\x54\xcb\x1a\x49\x7f\xcd\x75\x32\
+\x08\xea\xa2\x31\x9f\x51\xb7\x84\x0e\x3b\xfc\xe0\x81\x8f\x38\xc4\
+\x23\x0f\xf2\x21\xaf\xa6\x05\x0c\x64\x6c\xe5\xd6\xdd\xab\xab\xab\
+\x23\xcf\x98\x6f\x32\x2c\x12\xda\xbf\x0c\xad\x7d\x9c\x2e\x79\x5c\
+\x20\xc9\x97\x49\xab\x19\xef\xf7\x02\x74\xd8\xd9\x0f\x1e\xf8\x88\
+\x43\x3c\xf2\x20\x1f\xf2\xf6\xa5\x03\xeb\xa3\xa2\xa2\x6e\x62\x13\
+\xc5\xe6\x9e\xfa\x76\xe8\xae\xe6\x08\xe7\xa2\x07\xbb\x23\xce\x53\
+\x5a\xe2\x45\xaa\xc9\x6c\xa3\x0e\x69\xf9\x7d\x92\x7c\x38\x80\x25\
+\x74\xd8\xe1\x07\x0f\x7c\xc4\x21\x1e\x79\x90\xaf\x2f\x1d\xc0\x1e\
+\xf0\xf0\xf7\xf7\xff\x9e\x8f\x11\x95\x55\x56\x5f\x99\xb0\xab\x26\
+\x7a\x78\xe2\x4f\xc1\x36\x47\xd5\x21\xb3\xf3\xa8\x74\x63\x05\x35\
+\x4b\x8b\xda\x49\xf2\xe4\x00\x96\xd0\x61\x87\x1f\x3c\xf0\x11\x87\
+\x78\xe4\x11\x77\x41\xff\xbe\x9c\x82\xb7\xad\xad\xad\xb3\x92\x93\
+\x93\xbb\x1a\x1b\x1b\x29\xb6\xb0\xb2\x48\x0a\xbf\xba\x55\x3a\xf0\
+\x70\xa3\x49\x2a\x25\xcf\xc9\xa3\x4a\x69\x1e\x2f\xc7\x32\x0e\x60\
+\x09\x1d\x76\xf8\xc1\x03\x1f\x71\x88\x47\x1e\xe4\xeb\xcb\x29\xc0\
+\x3d\xf0\x1a\xc3\xd7\xcb\xcb\xab\x9e\xef\x75\xaa\x3b\x7f\xe1\x76\
+\x60\xf6\xb9\x24\x29\xf2\x87\x4f\x87\x27\x3f\x0c\xb5\xce\x52\xa7\
+\xbb\x1e\xa3\xb3\x0b\x8f\xd2\x39\x48\xe8\xb0\xc3\x0f\x1e\xf8\x88\
+\xf3\xf4\xf4\x6c\x40\x1e\x91\x4f\xbb\x2f\x37\x21\x96\xc1\xc6\xd8\
+\xd8\x38\x8e\x5b\x78\xbd\xac\xac\x8c\x1a\x2f\x36\xff\x98\x7c\xa6\
+\xa9\x60\x52\xe2\xb5\x48\xb4\xd9\xfa\xc8\x83\x30\x87\xc2\xc7\x11\
+\x90\xd0\x61\x87\xff\x42\xd3\xc5\xdb\xe0\xfb\xf9\xf9\x75\x19\x19\
+\x19\xd5\x70\x9e\x15\x8c\x91\x1a\xdf\x84\xbd\xbe\x05\xba\x0c\x67\
+\x53\x53\xd3\x0c\x6f\x6f\xef\xeb\xb9\xb9\xb9\x74\xe9\xd2\x25\x6a\
+\x68\x69\x6b\xcd\xa9\x6c\x2d\x0a\x28\xb8\x9c\x68\x1e\x7f\x25\x12\
+\x12\x3a\xec\xf0\x83\xc7\xfc\x2e\x77\x77\x77\xf2\xf1\xf1\xb9\xa3\
+\xab\xab\x9b\x65\x36\x4c\xeb\x30\x1e\x2c\x7d\xfd\x1a\x62\x2f\xe8\
+\x33\x5c\x0c\x0c\x0c\x0e\xd8\xdb\xdb\x37\x70\x37\xba\xf8\x58\x11\
+\x3e\x34\xed\xed\xed\x74\xe3\xc6\x8d\x6e\x09\x1d\x76\xf8\x99\xd7\
+\xc8\xfc\x5a\x0c\xce\x3a\x6d\x98\x37\xe1\x51\xba\x9b\xce\xd3\xc5\
+\x13\xe5\x92\xbf\x2b\xe2\x59\xef\x01\x1d\x51\x84\x03\x23\xc0\xd0\
+\xd0\xb0\xc0\xcc\xcc\xac\xd6\xd6\xd6\xf6\x96\xa3\xa3\xe3\x7d\x27\
+\x27\x27\x35\x24\x74\xd8\xe1\x07\x8f\xb1\x86\x67\x9e\xb3\x6a\xc6\
+\xf8\x47\x91\x33\x95\x94\xb0\x40\x45\x99\xee\x3a\x4f\xbd\xcd\xe5\
+\xaf\x9f\x57\xc4\x5f\xbd\x88\x54\x62\x39\x0c\x18\x73\xc4\xbd\x8e\
+\x8b\x65\x37\x63\x3f\x23\x8a\xb1\x4d\x6c\xb6\xb9\x8c\xd1\x0c\x93\
+\x61\xfd\x15\x99\x01\x93\x65\xf5\xb6\xa9\x4a\xda\xfd\x8e\x92\x0e\
+\x2e\x54\x51\x96\x87\xce\x93\x15\x16\x32\x96\x63\xd6\xb3\xf6\xc4\
+\xf3\xde\x84\xb2\xd8\x98\xd8\xcd\x43\xc5\x20\x78\x68\x8c\x13\x18\
+\x23\x0a\x7c\x43\x70\x06\x31\x16\x98\xe9\x29\x4e\x7c\xc4\x45\x04\
+\xdb\x28\x69\x8f\xa3\x92\x92\x9c\x55\x94\xcd\x45\xf8\x58\xc8\x19\
+\x62\x32\x5a\x22\xbf\x42\xd3\x57\xb1\xb6\xe8\x08\x6e\xcb\x57\x19\
+\x7a\x62\x89\x86\x08\x39\x58\xd8\xf4\xc4\xdf\x6e\x56\xfa\x8a\xbc\
+\x40\x33\x59\xfd\xf9\x34\x25\xed\x9d\xa5\xea\x2e\x22\x67\xb1\xce\
+\x93\x95\x96\x72\xa6\xf8\x4c\xcb\xbf\x17\xa2\xd1\xab\xe5\x8f\x8e\
+\xf4\x63\xbc\x22\x06\xc2\xcc\x87\x8b\xe3\x36\x8a\x61\xc8\x30\x12\
+\xf0\xb2\x1a\xac\x28\x08\x32\x97\xd5\x21\xb6\x4a\x8a\x9e\xad\xa2\
+\x43\x2e\x2a\xca\x5d\xaa\xf3\x94\x97\x03\x97\xd4\x02\x86\xb2\xbb\
+\x08\x0d\x07\xd7\x16\x83\xeb\xf6\x5a\x0e\x13\xf1\xea\x79\x8b\x31\
+\x99\x61\xce\xb0\xe8\x05\x5f\x8b\xc1\x8a\xe2\x20\x0b\x59\x1d\x66\
+\xa7\xa4\xd8\x39\x2a\x4a\x75\x55\x51\xfe\x32\x1d\xf5\x0a\x4b\x39\
+\x5b\x14\x21\x6b\x52\x80\x96\x98\xfd\x40\x31\x6b\x63\x31\xa8\x25\
+\x63\x2a\x63\x1a\x63\x3a\x63\x86\x38\x39\x3d\x80\xbe\xc1\x52\x5f\
+\x71\x62\x93\xa5\xac\x0e\x9f\xae\xa4\x7d\x4e\x2a\x4a\x5b\xa4\x43\
+\x47\xb9\x08\x1b\x03\x2d\xbc\xa0\x87\x69\x5a\x80\x52\xac\xff\x08\
+\xc6\x04\xf1\xfe\xb7\x15\x03\xe1\xbf\xa3\xd9\x0c\x27\x71\x22\x7a\
+\xe0\x24\x36\x5d\x10\x17\x51\xba\xd9\x4a\x56\x47\xd8\xff\x56\xc4\
+\x7a\x6b\x65\x39\xf6\x4a\x77\x57\xff\x83\x02\x70\xfc\x3e\xe6\x22\
+\x4e\x6e\x99\x22\xab\x97\x99\x6a\xe3\xd5\xec\x25\x4e\x50\xbf\x97\
+\xbd\x04\xd3\x45\xa1\x36\x0c\xff\x51\x03\x15\xa9\xe2\x3b\x61\x22\
+\x26\xa4\x7a\x99\x9b\xd0\x5c\xd8\x27\x32\xde\x64\x8c\x17\x9d\x1b\
+\x21\x8e\xec\x00\x8d\x36\xe1\x0b\x1e\x43\x23\xa1\x8f\x16\xad\x1e\
+\x21\x0a\x1f\x22\x26\x31\xa0\xe7\x18\xfe\x0a\xd1\xfb\x82\xfe\x41\
+\x1a\xc9\x6e\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x06\x7e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x06\x45\x49\x44\x41\x54\x58\xc3\xc5\x57\x79\x50\xd5\x55\
+\x14\xfe\x3d\x78\x8b\x5b\x91\xcb\xa4\x19\x0a\xa8\x21\xe6\x08\x82\
+\x21\xb2\x48\xa1\x52\x9a\xe2\x40\xb8\xc5\x26\x25\x0a\xa5\xe8\x28\
+\x28\x35\x28\x04\x62\x46\xac\xef\xb9\xa0\x82\x90\xca\xa2\x20\xc3\
+\x08\x6a\x21\x20\x13\x30\x88\x06\x21\xbb\x3a\x98\xd8\x60\x8e\xd3\
+\x1f\x2d\xc8\xa8\x85\xef\x74\xbe\xdf\x5c\x8c\x99\xca\x1e\x96\xf5\
+\x66\xbe\xb9\x9c\x73\xbe\x73\xee\x77\xd7\xdf\x45\x22\x22\xe9\xff\
+\xc4\xe3\x83\x92\xa4\x60\x4c\x66\xb8\x31\x7c\x18\x1b\x18\x11\xa2\
+\xf5\x11\x7e\xc4\x15\xff\xaa\x00\xd1\xf1\x24\xc6\xd2\xe5\xcb\x97\
+\x1f\x48\x4b\x4b\x3b\xcf\xbf\xce\x8e\x8e\x8e\x9f\xbb\xbb\xbb\xf5\
+\x68\x61\xc3\x8f\x38\x78\x82\xaf\xf8\xc7\x02\xf8\x67\xc4\xb0\x73\
+\x75\x75\x8d\x4a\x4f\x4f\xaf\x69\x6b\x6b\xeb\x61\xd0\x99\x33\x67\
+\x28\x2a\x2a\x8a\x42\x43\x43\xe5\x16\x36\xfc\x88\x83\x07\x3e\xf2\
+\x90\xff\xc4\x02\x44\xe7\xb3\x3c\x3d\x3d\xb5\xc5\xc5\xc5\x57\x5b\
+\x5b\x5b\x29\x33\x33\x93\x56\xf9\x07\x5e\xb7\x5b\xb8\xa2\x72\xc2\
+\xe2\xf7\x4e\x8e\xf0\x8a\x3e\x8a\x16\x36\xfc\x88\x83\x07\x3e\xf2\
+\x90\x3f\x18\x11\x7f\x58\x6f\x27\x27\xa7\x98\xa2\xa2\xa2\xab\x8d\
+\x8d\x8d\x14\x1d\x13\x7b\xc7\x79\x59\x50\x99\x89\x4f\x42\x96\xe4\
+\x9f\xa1\x95\xd6\xe4\x24\x4b\xeb\xf2\x13\xe5\x96\x6d\xf8\x11\x07\
+\x0f\x7c\xe4\x21\x7f\x30\xfb\x62\xa0\x00\x25\xc3\x5b\xab\xd5\xd6\
+\x36\x37\x37\x53\xaa\x6e\xcf\x1d\x87\xc0\xc8\x02\x69\x75\x66\xaa\
+\xb4\xe1\xf4\x27\x52\xc4\x85\x58\x29\xba\x25\x4a\x8a\xbd\xb2\x43\
+\x6e\x61\xc3\xcf\x71\xf0\xc0\x47\x1e\xf2\x51\x07\xf5\x0c\x16\x20\
+\x46\x6f\xe5\xe1\xe1\x71\xb8\xb6\xb6\xf6\x6e\x49\x49\x09\xbd\xbd\
+\x65\xe7\x39\xe9\xdd\xec\x64\x69\x6b\xf5\xce\xb1\xa9\x5d\x31\x2b\
+\x8b\x7f\xd0\x45\x5d\xb8\x77\x64\x7f\xf3\xaf\x05\x68\x61\xc3\x8f\
+\x38\x78\xe0\x23\x0f\xf9\xa8\x83\x7a\x86\xcc\x42\xbf\x00\x63\xc6\
+\xc2\xb8\xb8\xb8\xea\x86\x86\x06\x4a\xd2\xed\xbf\x3e\x36\xe4\xf0\
+\x21\xb9\x78\xfc\xad\x0f\x03\xca\xee\xeb\x74\x2d\xfa\xbc\xd4\x16\
+\xca\xe9\x07\x6c\xf8\x11\x97\x45\x32\x1f\x79\xc8\x47\x1d\xd4\x43\
+\x5d\x43\x05\xa8\x19\x6b\x72\x73\x73\x6f\xd4\xd5\xd5\xd1\x96\xf8\
+\xb4\x0a\x4c\xef\xb4\xb4\x9b\xbb\xc3\xaa\xef\xa7\x9f\xbf\x45\x55\
+\x95\xb7\xa8\xba\xa2\x9b\xbe\xec\x07\x6c\xf8\x11\x07\x0f\x7c\xe4\
+\x21\x1f\x75\x50\x0f\x75\x0d\x15\x30\x94\xf1\x41\x69\x69\x69\x4f\
+\x55\x55\x15\xbd\xb9\x3d\x33\x0f\x6b\xbc\xa9\xfc\xc7\xc3\x92\x55\
+\x10\x59\x2e\xd9\x45\x2e\x01\x3a\x9a\xe3\x9b\x42\x0e\x3e\x29\x72\
+\x0b\x1b\x7e\xc4\x65\x1e\xf3\x91\x87\x7c\xd4\x41\x3d\xd4\x35\x54\
+\xc0\x30\x46\x5c\x79\x79\xb9\xbe\xa6\xa6\x86\x26\x87\x9d\x38\x88\
+\x8d\x96\xd4\x70\xef\x84\xe4\x7e\x92\xd4\x2b\x9b\x68\x74\x60\x2b\
+\x99\xae\x6b\xa3\x49\xef\xb7\xcb\x2d\x6c\xf8\x11\x97\x79\xcc\x47\
+\x1e\xf2\x51\x07\xf5\x50\xd7\x50\x01\xc3\x19\x91\x3c\x75\x3d\xf5\
+\xf5\xf5\xe4\x93\x7a\xfa\x18\x76\x7b\x78\xcd\x2f\x87\x24\xef\xcb\
+\x24\xad\x65\xd2\x1a\xc6\x3b\x03\x00\x1b\x7e\x8e\xcb\x3c\xe6\x23\
+\x0f\xf9\xa8\x83\x7a\xa8\x3b\x98\x19\x58\x9f\x98\x98\x78\x13\x9b\
+\x48\x9b\x5f\xf6\x05\x46\x34\x23\xfb\x6e\xec\xb6\x3a\x3a\x18\x56\
+\x4d\xa7\x83\xca\xa8\x7c\x5d\x05\x9d\x0b\x66\xa0\x85\x0d\x3f\xe2\
+\xe0\x81\x8f\x3c\xe4\xa3\x0e\xea\x0d\x66\x06\xb0\x07\xbc\x43\x42\
+\x42\x2e\xf0\x31\xa2\xca\x9a\xba\x6b\x93\x3f\xbe\x98\x24\x25\x7f\
+\x1f\x21\xa5\xf5\x85\x49\x09\x94\x29\x23\x91\x32\x1e\xa1\xdf\x87\
+\x38\xf3\xc0\x47\x1e\xf2\x51\x47\xdc\x05\x43\x07\x73\x0a\x5e\xb1\
+\xb7\xb7\xcf\xcd\xc8\xc8\xe8\x6d\x6a\x6a\x22\x6d\x51\xcd\x29\x29\
+\xee\x7a\xa4\xb4\xef\x5e\xb8\x94\x42\xa9\x52\x3c\xe5\x49\x9f\x52\
+\xce\x23\xc0\x86\x1f\x71\xe6\x81\x8f\x3c\xe4\xa3\x0e\xea\x0d\xe6\
+\x14\xe0\x1e\x78\x8e\xb1\xd6\xd7\xd7\xb7\x81\xef\x75\xaa\xff\xfa\
+\xf2\xed\x2d\x79\x5f\xa5\xcb\xe7\x5c\x77\x2f\x52\x4a\xd6\x27\xf3\
+\x88\xb3\xb8\xe3\x7c\xb9\x85\x0d\x3f\xc7\xc1\x03\x1f\x79\x3e\x3e\
+\x3e\x8d\xa8\x23\xea\x19\x0f\xe6\x26\xc4\x32\x38\x58\x58\x58\xe8\
+\x78\x0a\x6f\x54\x56\x56\x52\x53\x4b\xeb\x77\x19\x15\xcd\x85\x96\
+\x7b\xbf\xd9\x2d\x2f\x87\xae\x67\xab\xb4\xef\x7e\xb8\xdc\xb2\x0d\
+\x3f\xe2\x97\x9b\x5b\x6e\x83\x1f\x1c\x1c\xdc\x6b\x6e\x6e\x7e\x91\
+\xeb\x04\x30\x5e\x34\xf8\x26\x1c\xf0\x2d\x30\x61\x2c\xb6\xb2\xb2\
+\x3a\xe6\xe7\xe7\x77\x23\x3f\x3f\x9f\xda\xdb\xdb\xa9\xb1\xed\x6a\
+\xc7\xf1\x9a\x8e\x53\xa1\x85\x57\x0e\xd8\xec\xbf\x16\x8f\x16\x36\
+\xfc\x88\x83\xc7\xfc\x5e\x2f\x2f\x2f\xf2\xf7\xf7\xff\xc9\xc4\xc4\
+\x24\xd7\x7a\x9c\xd1\x51\x3c\x58\x06\xfb\x35\xc4\x5e\x18\xcd\x58\
+\x62\x6a\x6a\xba\xcf\xc5\xc5\xa5\x91\x67\xa3\x97\x8f\x15\xe1\x43\
+\xd3\xd9\xd9\x49\x5d\x5d\x5d\x72\x0b\x1b\x7e\xc4\x99\xd7\xc4\xfc\
+\x4b\xe8\x9c\x6d\xda\xf8\xc6\xd4\x07\x47\xbc\x34\x0f\x97\x4d\x57\
+\x96\xfc\x9d\x88\x3f\x7b\x0f\x68\x84\x08\x57\x46\xa8\x99\x99\x59\
+\xa1\xb5\xb5\xf5\x25\x47\x47\xc7\x6f\xdd\xdc\xdc\xee\xba\xbb\xbb\
+\xeb\xd1\xc2\x86\x1f\x71\xf0\x18\x41\x3c\xf2\xe3\x81\x73\x2d\x1f\
+\xc4\xbf\xaa\xa2\x03\x8b\xd4\x94\xcd\x22\xfc\x6c\x94\x39\x8f\x13\
+\xf1\x57\x2f\x22\xb5\x58\x0e\x53\xc6\x02\x71\xaf\xe3\x62\x49\x60\
+\xec\x65\x24\x32\xb6\x8b\xcd\xf6\x3a\x63\x22\x63\xca\xb8\xa1\x8a\
+\xec\xd0\x19\x4a\xfd\x8e\xd9\x2a\x4a\x78\x4d\x45\x07\x59\x44\xce\
+\x5b\x9a\xbe\x80\x99\x4a\x2c\xc7\xbc\x3f\xdb\x13\x8f\x7b\x13\x2a\
+\xc5\xc6\xc4\x6e\x1e\x2b\x3a\xc1\x43\xe3\x25\x81\x49\x42\xe0\xf3\
+\x82\x33\x82\xb1\xc8\x7a\xa4\xe2\xec\x26\x6b\xa5\x3e\xda\x41\x45\
+\x49\x6e\x2a\x4a\x5f\xac\xa6\x3c\x6f\x4d\x9f\xff\x4c\xe5\x31\x31\
+\x18\x23\x51\x5f\x61\xe8\xab\xd8\x58\xcc\x08\x6e\xcb\x67\x19\x23\
+\xc5\x12\x8d\x11\xed\x28\xe1\x1b\x29\xfe\xf6\xb4\x1b\xa5\x28\xd8\
+\xcc\x22\x3e\x9a\xa3\xa2\xe4\x79\x2a\xca\x58\xa2\xa6\x13\xcb\x34\
+\x7d\xab\x6d\x95\xd9\xe2\x33\xad\x7c\x24\xc4\xa0\x57\xcb\xef\x33\
+\x32\x84\xf1\x8c\xe8\x08\x23\x7f\x41\x1c\xb7\x09\x0c\x33\x86\xb9\
+\x80\x2f\x8b\x28\x0c\xb3\x51\xea\x63\x1c\x55\x94\x32\x5f\x4d\x99\
+\x1e\x6a\x2a\x58\xa1\x79\xc8\xcb\x81\x4b\x6a\x11\x43\x25\x8b\x30\
+\xb0\x73\x63\xd1\xb9\xc9\x80\xe5\x98\x22\x5e\x3d\x2f\x33\x66\x30\
+\x6c\x18\x33\x07\x60\xad\xed\x28\x45\x71\xb8\xad\x52\xbf\xd3\x49\
+\x45\xda\x05\x6a\xca\x62\x11\x27\x57\x68\xf4\xfe\xb6\xca\x3c\x21\
+\x42\x69\x88\x00\x23\x31\xfa\xe1\x62\xd4\x16\xa2\x53\x5b\xc6\x6c\
+\xc6\x1c\x86\x33\x63\xae\x38\x39\xfd\x80\xbd\xd1\x76\xb4\xe2\xec\
+\x36\x16\xb1\xcb\x59\x45\x7b\xdc\xd5\xf4\xd9\x52\x0d\x15\xae\xd4\
+\xe8\x1d\x4c\x8d\xf0\x82\x1e\x67\xa8\x00\x95\x58\xff\xf1\x8c\xa9\
+\xe2\xfd\xef\x28\x3a\xc2\x7f\x47\xf3\x19\xee\xe2\x44\xf4\xc3\x5d\
+\x6c\xba\x30\x16\x51\x1a\x61\xc7\x22\x5c\x54\xb4\x97\x45\xac\xb7\
+\x57\x55\x61\xaf\xc8\xb3\xfa\x1f\x08\xc0\xf1\xdb\xcc\x22\x3e\x8f\
+\x98\xa5\xd4\xaf\x9a\x6a\x8c\x57\xb3\xaf\x38\x41\x43\x9e\xf6\x12\
+\x38\x0b\xa1\x0e\x8c\x90\x09\xc3\x15\x59\xe2\x3b\x31\x45\x0c\x48\
+\xfd\x34\x37\xa1\x8d\xf0\x4f\x67\x4c\x63\x58\x8a\x99\x1b\x2f\x8e\
+\xec\x30\x83\x36\xe1\x13\x1e\x43\x73\x61\x4f\x14\x53\x3d\x5e\x08\
+\x1f\x23\x06\x31\xac\xff\x18\xfe\x06\xa3\xbf\x6b\x5c\x6e\x71\x2e\
+\x0b\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\xbf\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x04\x86\x49\x44\x41\x54\x78\x5e\xed\x97\x4b\x68\x5c\x55\
+\x1c\xc6\x7f\xe7\x3e\xe6\xce\x9d\x4c\xdb\x74\xa6\x51\x62\x1f\x31\
+\xb5\x3e\xaa\x56\x14\x6d\x4b\xc5\xa0\x45\x5c\x88\x42\xd7\x45\x44\
+\x5d\x98\x4d\x57\xd2\xba\x13\x44\x5c\x88\xa5\xd2\x45\x49\x17\x51\
+\x5a\xdc\xb9\x11\x8a\x62\x17\x15\x74\x40\x25\x62\x6c\xa8\x24\xe9\
+\xcb\x3c\x6c\x4c\x5b\xd3\x47\xd2\xc9\x64\x3a\xaf\x7b\xef\xf1\xe4\
+\xdc\x99\x0c\x32\x99\x6b\x4b\x07\x5d\xe8\x07\x3f\xce\xdc\x33\x7f\
+\xbe\xf3\xdd\x73\xce\x7d\xf1\x9f\x97\xa0\xaa\xde\xde\xde\x97\x80\
+\xad\xfc\x33\x1a\xec\xef\xef\xff\x0a\xc0\xa2\xae\xad\x9d\x6b\x37\
+\xbc\xbb\x71\x63\x37\xa6\x69\x72\xfa\xa7\x32\x67\x06\x0b\x2c\x64\
+\x7d\xee\x44\xc9\x55\x26\x9b\xb7\xba\x3c\xbc\x2d\x86\xef\xfb\x4c\
+\x4c\x4c\x72\xf9\xe2\xd4\x7b\x40\x43\x00\xbe\xf9\x36\xc3\xf0\xe8\
+\x19\x52\xa9\x35\x5c\xb9\x60\xf1\xc6\xbe\x67\x68\x85\x8e\xf6\x7f\
+\xcf\x95\xa2\xc7\xc0\x0f\x19\x52\xe9\x0e\x36\x3f\xb0\x11\x80\x86\
+\x00\xb6\x65\xd3\xde\x9e\x22\xbd\xa6\x03\xd7\x74\x89\xc7\xe3\xb4\
+\x42\x5d\xf7\xdd\x43\x62\x55\x41\x9f\x98\x1a\x03\x60\xf9\x00\x31\
+\x27\x8e\xeb\x26\x48\x24\x92\x38\x66\x1b\xe7\xce\x8d\x83\x65\x81\
+\x1d\x03\xc7\x41\x25\x02\x55\xa3\xdb\x98\xa3\x88\x85\xff\x7b\x1e\
+\x94\xcb\x8a\x12\x14\x8b\x50\x52\xe8\xb6\x04\x95\x32\xab\xd3\x2b\
+\x31\x1d\x93\xc7\x1e\x7f\x8a\xf1\xb1\xf3\xcd\x03\x18\xa6\xa1\xb0\
+\x14\x26\xea\x80\xed\xdb\x9f\xc4\xda\xb5\x0b\xb9\x76\x2d\x48\x89\
+\xc8\xe5\x08\x76\xec\x20\xd8\xb3\xa7\xde\xef\xfb\x3a\x9c\xbf\x77\
+\x2f\x74\x75\xa9\xfe\xdd\x61\x3f\x84\xfd\x07\x0f\x72\xe2\xc4\x19\
+\xed\x19\x7a\x8b\xe6\x01\x02\x3f\x50\xf8\xf8\x9e\x22\xf0\xf4\x12\
+\xf8\xed\xed\x58\x47\x8e\x22\x90\xc8\xb9\x59\xfc\x37\x7b\x71\xf6\
+\xed\xc3\x53\xfd\xf6\xd1\x23\x48\x40\x9e\x1c\xc2\xfc\xe8\x00\xc6\
+\xc7\x9f\xe8\x7a\x5b\xd5\x4b\x01\x02\x00\x89\xa7\xbc\x4c\xe5\x1b\
+\x68\x64\x44\x00\x29\xf1\x03\x3f\xc4\xf3\x19\x19\xf9\x8d\x4d\xd7\
+\x66\xc9\xbf\xf2\x2a\xc2\x10\x04\x2a\xd0\xf5\xb7\xde\xe6\x66\x60\
+\xd0\x2d\x04\x93\xc9\x95\x60\x5b\xf0\xec\x73\x74\xef\xdf\xcf\xa4\
+\x34\xd8\x74\x23\x4b\xfe\xb5\xd7\x21\x08\xc8\x6d\xdb\xc1\xdc\x0b\
+\x2f\x6b\x2f\xac\xd0\x37\x90\x11\x01\x64\x20\x09\x34\x01\x81\x0c\
+\xe8\xe9\x79\x82\xb9\xbb\x3b\xe8\x3c\xfe\x25\x35\xdd\x4b\xa8\x39\
+\xc3\xa0\xc7\x32\x41\x4a\x2a\x43\x27\x29\x74\x77\xd3\xb3\x7a\x25\
+\x73\xe9\x14\x9d\x5f\x1c\xa3\x2e\x18\x1d\x9e\x42\x04\x81\xf6\x96\
+\x41\x44\x00\x90\x21\x32\xc4\x71\x1c\x84\x10\x61\x0b\x48\x04\x08\
+\x89\x40\x40\x36\xcb\xfc\xee\xdd\xba\xce\x48\xa7\x49\x7d\xb8\x1f\
+\xb3\x5a\x1f\x77\xe2\x48\x21\x41\xa2\x6b\x6b\x7e\xa0\x89\x0a\x20\
+\x42\x44\xc8\xc9\x91\x29\x64\xdf\xa7\x4c\x4f\xfc\x01\x31\x1b\xe5\
+\x0c\x8e\xad\x88\xc1\xd0\x29\xb0\x6d\x85\x09\x9e\x8f\xac\x78\x88\
+\x62\x19\x8e\x1d\x67\xfa\x5a\x0e\xd4\x6f\x59\xae\x20\xca\xde\x92\
+\x1f\x68\x9a\x07\x10\xa2\x86\x20\xd9\x6e\xb3\xf3\xe9\x47\xb9\x25\
+\x99\x66\x18\x2a\x99\x60\x39\x9d\x1a\x1c\xa2\x58\x14\x35\xff\xe6\
+\x01\x10\x02\xa1\x31\x58\xbf\xbe\x03\xdb\xb6\x69\x81\xb4\xd7\xd8\
+\x58\x4e\xfb\x22\x22\x67\x40\x60\x18\xa6\x42\x90\x70\x5d\x7e\x3e\
+\x75\x9a\x55\x2b\x92\xfa\xfe\x70\xfb\x0a\x2f\xeb\x6c\x6e\x41\x7b\
+\x19\x86\xa1\x11\x51\x01\x0c\x21\x10\x86\xd0\x85\x17\x2f\xcd\x70\
+\xf5\x7a\xb6\x1a\x0c\x90\x20\xa1\xe1\x58\x84\x7b\x4c\x4b\xd0\x28\
+\x09\x94\x4a\x45\x4c\xc3\x08\xbd\xa3\x02\x84\x05\x3a\xa9\xc2\xd4\
+\x4f\xc5\x56\xc8\x54\x5e\x42\xa1\xbc\x55\xfb\xb7\x4b\x60\xe8\x81\
+\x2f\x4c\x8e\x31\x3d\x3d\x45\xa1\x90\xe7\x4e\xe4\xba\x6d\xac\x5b\
+\xb7\x81\x74\xc7\x5d\xb7\xb2\x04\x46\x18\x40\x11\x48\xc9\x07\xef\
+\xbf\xc3\xfc\xfc\x3c\xf9\x7c\x9e\x4a\xa5\xb2\x14\xd0\xb2\xac\x25\
+\x6c\xdb\xd6\xad\x0a\xad\xc3\x03\xfa\x46\x56\x2e\x97\x97\xf8\xec\
+\xf3\xe3\xda\x53\xa1\xc7\xa8\x0b\x8c\xc6\x19\x10\x08\x55\xb8\x3a\
+\x95\xa6\xa6\x81\x81\x01\xfa\xfa\xfa\x38\x7c\xf8\x30\x87\x0e\x1d\
+\xd2\xc7\xb7\x21\xed\xa5\x3c\x15\xfa\x2a\x8b\x0a\x50\xdf\x84\xae\
+\xeb\x52\xd3\xc8\xc8\x08\xa9\x54\x8a\x74\x3a\xad\x19\x1e\x1e\x26\
+\x4a\x52\x4a\xea\x42\x7b\xd5\x4e\x4c\x44\x5f\x86\xb5\x65\x10\x48\
+\x59\x2f\x4c\x24\x12\xfa\xc9\x58\x9d\x62\xdd\x46\xa8\x61\x90\xb0\
+\x5e\x52\xed\x8d\x98\x01\xaa\x09\x17\x43\xd4\x4d\xea\x9b\x27\x34\
+\xbf\xfd\xab\x43\x82\x44\x11\x3e\xe4\xa2\xee\x84\x20\xaa\x80\xa0\
+\x55\xf2\x03\x4f\xbf\x0b\x94\xcb\x25\x4d\xd3\x19\xf0\xbc\x32\xa5\
+\x52\x89\x52\xb1\xa8\x77\x76\xcb\x24\x21\xb7\x90\x63\x66\xe6\x32\
+\x37\xe6\x66\x9b\xcf\xc0\xcd\x85\x9b\xcc\x67\xb3\x38\x4e\x9c\x15\
+\xc9\xb6\x16\x06\xf0\xb9\x30\x3e\xc6\xd8\xf9\xb3\xb4\x25\xdc\x0c\
+\x30\xb8\x6c\x80\x42\xa9\xc0\xd5\xab\x33\x78\xbe\xa7\x03\x64\xbe\
+\xfb\x91\x64\x32\xc9\xce\xe7\x5f\x6c\x78\x8e\x4f\x4d\xcf\xd0\x5c\
+\x02\x89\xc4\x57\x3e\xb3\xb3\x37\x50\xdf\x01\x8c\x8e\xfe\x42\x3c\
+\x66\x67\x1e\x7a\xf0\xfe\x03\x40\x66\xd9\x00\x97\xa6\x7f\xe7\xd7\
+\xb3\xa7\xf5\xa6\xfb\xda\xb2\xf4\x86\xbb\x13\x49\x19\xbe\x5d\xf9\
+\x9e\x47\x57\x57\x57\x66\xcb\x96\x47\xf4\xe0\xea\xab\x28\xff\x6f\
+\x7c\x9a\x0d\xd6\x07\xaf\xeb\x7f\xfd\x09\x8d\xfd\xd4\x8a\xd6\x19\
+\x48\x3f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x08\x27\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x07\xee\x49\x44\x41\x54\x58\xc3\xa5\x57\xdb\x6f\x1c\x67\
+\x15\x3f\xdf\x37\x33\x3b\xbb\xf6\xde\xf1\xae\xd7\x4d\x4c\xec\xc4\
+\xbd\xd8\xc6\x4d\x2f\x69\xac\x06\xa9\xa1\x69\x65\x1a\x55\x20\xa1\
+\x08\x81\x84\x90\x5a\xfe\x86\x3e\xf5\x91\x8a\x17\xf2\xc8\x1b\x54\
+\x15\x2f\x51\x2a\x11\xc2\x25\xbc\x24\xa0\x2a\x42\x7d\x08\x22\x02\
+\x29\x50\xb5\x6a\x9c\xae\x6f\x2a\x8e\xd7\x97\xb5\xd7\x7b\x9d\xcb\
+\xd7\xdf\x39\x33\xeb\x26\x24\xb5\x70\x98\xf5\xfa\x9b\xf9\x76\xe6\
+\x3b\xe7\xfc\xce\xef\xfc\xce\x37\x8a\xf6\x39\xe6\xe6\xe6\x66\xdf\
+\x79\xe7\xa7\x3f\xaf\xd5\xd6\x15\x0e\xa3\x14\xcf\xca\x3f\xd2\xf8\
+\xf0\x1f\x5f\xaa\x78\xce\xec\xfd\x8a\x73\x63\x54\xa5\x52\xd1\x17\
+\x2e\x5c\x78\xf7\xfc\xf9\xf3\xbf\xfe\x2a\x1b\xf6\x7e\x0e\xb8\xae\
+\x5b\x9a\x99\x79\xfa\xa5\x20\x08\x28\x0c\x43\xd2\x5a\x13\x1c\x89\
+\x46\xa3\xc8\x68\x43\x5a\x69\x18\xe3\x39\x18\x8f\x1d\xe4\x7b\xe0\
+\x00\x59\x96\x45\xd9\x6c\xf6\xaf\xfb\xd9\xd8\xd7\x01\x2c\xd2\xee\
+\x76\xbb\xb4\xb1\xb1\x21\x0b\xf6\x1d\x60\x83\x2a\x36\xae\x30\x6f\
+\x30\xaf\x79\xc4\xb5\xd6\x91\x71\xad\x0c\x7d\x6d\xa8\x4c\xed\x76\
+\xbb\xb9\x9f\x0d\xbd\x1f\x00\x2f\x9c\x98\x7d\xd3\xb2\x2d\xb2\x6d\
+\x1b\x0b\x5b\x12\xa5\x46\x54\x96\xa5\xc8\xd2\x98\xe3\x68\xf9\x9a\
+\x1d\xc3\x88\x5b\x31\x2a\x89\xdc\xe0\x77\x1b\x13\xcf\x3c\xf3\xec\
+\xf7\x2a\x95\xb1\xb1\x03\x3b\x30\x36\x36\x96\xaa\x8c\x8c\x7c\xdb\
+\x84\x8c\x44\x18\xc1\x1b\xe2\xf6\xd0\xc8\xef\x21\x3e\xca\x8a\x6f\
+\x8e\xb0\xa7\x80\x2c\xfe\x17\x4d\x21\x65\xdd\xae\x47\x13\x13\x4f\
+\x3c\x3f\x3e\x3e\x72\xe4\xc0\x0e\xec\xec\xec\x84\xad\x56\xbb\x19\
+\xe5\xde\x12\x58\xe5\x6e\xbd\x47\x33\xfc\xc5\x8f\x07\x91\x55\x8b\
+\xad\xf7\x9d\x12\x94\x88\x76\x77\x77\x03\xcf\x33\xfe\xa3\xa4\x00\
+\x06\x38\x9f\xc1\x7d\x51\x72\x64\x7b\x55\xd0\x3f\x2c\x2b\x76\xc9\
+\x62\x68\x62\xa7\x34\x85\x78\x26\xba\xdd\x7f\x14\x0e\x14\xc9\x47\
+\x64\x12\x39\x1b\xe7\x28\x31\x06\xf7\xdc\x11\xf4\xaf\x8c\xf9\x12\
+\x95\xfe\xc2\x56\x20\xe9\x0a\x43\x9f\x94\xaf\xcc\x81\x1d\xd8\xdc\
+\x9c\x6f\x60\xc1\x5e\x88\x45\x24\xfd\x80\xd4\xc0\x09\x39\x17\x24\
+\xe8\xcb\x68\xef\x2f\x9d\x68\x08\xac\x3e\x68\x61\xcf\xf4\xb6\xf7\
+\x2d\xc3\x81\x81\x81\xc7\x86\x86\x86\xa6\xfb\x4b\xa2\xd4\xc2\x91\
+\x91\x91\x74\x22\x61\x0f\x16\x0a\x05\xc2\x6f\xf4\xa8\x47\x36\x9b\
+\xd3\x85\xc2\xd0\xb7\x8e\x1d\x3b\x56\x46\x75\xe8\x28\x63\x96\x46\
+\x79\x2e\x2f\x2c\x2c\x7c\x22\x3e\x9e\x3c\x79\xf2\x67\x47\x8f\x1e\
+\x7d\x1b\x82\x13\xa0\x74\x8c\x6d\x3b\x1c\x88\xbe\x7e\xfd\xba\x7e\
+\x6a\xf2\x49\x44\xab\xc8\x67\x32\x5a\x26\xe6\x45\xac\x01\xd0\x02\
+\xf6\x58\x33\x19\xd5\xbd\x20\x44\x38\x25\x12\x09\xaa\x56\x97\xe9\
+\xc9\xa7\x26\x4c\xb9\x54\xf2\x71\x28\x46\x51\xa3\xae\xb7\xb7\xb7\
+\xff\x7c\xe9\xd2\xa5\xd7\x04\x81\xd1\x43\xa3\x4f\xa7\xd3\x69\xea\
+\xf5\x7a\x64\x27\x5c\x55\xc8\x65\x45\x4a\x57\x56\x96\x89\xbf\xff\
+\xef\x31\x3e\x3e\xaa\x86\x87\x87\xf5\xca\xd2\x12\xf5\xc0\x09\xdd\
+\x0b\x29\x9f\xcf\x4f\x65\x32\x99\xa2\x0d\x78\x33\x2f\xbd\x7c\x7a\
+\xf2\xf5\xb3\x67\x29\xe1\xba\x1a\xd2\x49\xb9\x5c\x8e\x96\x97\x97\
+\x59\xc5\xe8\xf8\xf1\x19\x4a\x26\x07\x38\x4d\x94\x4a\xa5\x58\x9e\
+\xc9\xc5\xe8\x58\x56\x2c\xcb\xcc\x74\x23\x52\x8d\x08\x25\x08\x7e\
+\xae\xdd\xee\x40\x07\x3a\x74\xeb\xd6\xbf\xe8\xec\xd9\xd7\xcc\x99\
+\x33\x67\x94\xe7\x79\x54\xaf\xd7\xc1\xaf\x4d\x9a\x9f\x9f\x2f\x7f\
+\xf8\xe1\xdf\x1e\xb7\xf1\x60\x7e\xbd\xb6\x36\xf4\x9b\x4b\xbf\xa5\
+\xd4\x40\x4a\x65\x06\x07\x69\x7a\x6a\x8a\x3e\xfa\xf4\x53\xfa\xe0\
+\x83\xbf\x00\xc2\x05\x40\xe9\x90\x03\x35\xb4\x00\x69\x82\x15\xd0\
+\xd6\x7b\xb2\xac\x44\x0f\x43\x0a\x90\x16\xdf\x67\x47\x3c\x8c\x01\
+\x79\x5e\x47\x9c\xba\x75\xeb\xdf\x74\xe8\xd0\x63\x6a\x76\x76\x56\
+\x55\xab\x55\xea\x74\x7a\x28\xa8\x0e\xa5\x06\x07\x1d\xa5\xfc\x8a\
+\x0d\x42\xb8\xff\xf9\x7c\xd5\x76\x12\x96\xe4\xcc\x76\x5c\xda\xaa\
+\x6f\xd2\xc7\x1f\x7f\x42\xb5\xbb\x9b\x20\x4c\x15\xc6\x6c\x31\x66\
+\xb3\x41\x9b\xcf\xb5\x30\x9c\xb9\xa0\x58\x98\x4c\x3f\xf7\x81\xd4\
+\xbd\xef\x7b\x18\xa3\x06\xc5\x11\x5f\xbb\x76\x8d\xa6\xa7\xa7\xe9\
+\xc6\x8d\x1b\x34\x3a\x7a\x98\x56\x57\xef\x12\x93\x1b\xcf\xa7\x6c\
+\xf0\xce\x6d\xb5\x5b\x56\x6f\xbb\x47\xc9\x44\x92\x12\xc9\x04\xb5\
+\x9a\x4d\x2a\x95\x2a\xf4\xa3\x1f\xff\x10\x91\x84\xa2\xe9\x71\x73\
+\x12\x55\x74\x1c\x2d\xba\xc7\xfa\xa3\x94\x25\xda\xcf\x5f\x25\x6a\
+\x19\x21\x23\xd5\x04\xe7\xbc\x8e\x47\x83\xd9\x41\xba\x78\xf1\x22\
+\xab\x2b\xdd\xb9\x33\x4f\x4d\xa4\xe7\x9b\x2f\xbe\xc8\x28\x26\x19\
+\x01\x67\x6b\x6b\x4b\xe3\x0b\x0e\x00\x62\x3b\x41\x0e\x90\x28\x14\
+\xb6\x69\x7d\x7d\x83\x9a\xad\x06\x9a\x8c\x13\x35\x98\xb8\x23\x72\
+\xce\x6d\x8e\x1c\xe7\x96\x62\x2e\xa0\x13\xb2\xf4\xca\x39\xa7\xc7\
+\x08\x12\xdc\xc6\xf9\xfe\xb1\xaf\x8f\x51\xbb\xd3\xa6\x2c\xc8\x0d\
+\x57\xa9\x98\x4f\xd2\xc6\xe6\x3a\x07\xe7\xd8\x80\xc2\x01\xe9\xf8\
+\x19\xb2\xe1\x00\xe7\xd7\x45\x19\xb2\x91\x84\x63\x93\x5b\x2c\x89\
+\xb1\x30\x36\x4e\x6c\x00\x0a\x68\xa8\x1f\xa9\xa1\x28\x70\x2d\x8e\
+\xb0\x61\x15\xb7\x65\x9e\x63\x27\xba\x5e\x97\x4a\x43\xa5\x58\xd1\
+\x91\x4a\x09\x82\xe8\xc8\x91\xc3\x09\x29\x43\x07\x51\x5b\x29\x10\
+\x2d\x8e\x94\x11\xe0\xf1\xf3\xd5\x26\x34\xc0\x48\x83\x91\x5a\xa7\
+\xa8\xee\x59\x62\xf9\x23\x68\x50\x5f\xbe\x1e\x94\xc5\x7e\x65\xa4\
+\x06\x53\x84\x1a\xc2\x63\xdc\xaa\x81\x1a\x02\x4c\xb9\x49\xe9\xa8\
+\xe2\x40\xa7\xdb\x22\x03\x06\x6b\x27\xea\xeb\x5c\x8a\x4c\x98\xdb\
+\xb7\x6f\x53\x3a\x9d\x89\x34\x5e\x7f\x85\xf4\xc6\x7d\x8a\x49\xf7\
+\xdf\x37\x70\xb4\xe8\xa8\xb4\x50\xfd\x8c\xde\x78\xf3\x27\x52\x9e\
+\xbc\xb7\xb0\x11\xb7\x74\x59\x7c\x98\x84\xa1\xe7\xf9\x66\x67\xa7\
+\x81\x12\xe9\xc4\xdb\x2d\x43\x50\xaa\x18\x42\x2e\x1b\xc4\xcb\x98\
+\xe1\xda\xc4\xdd\x90\x11\x62\x78\x2d\xee\x78\x7d\xf5\x93\x6d\x62\
+\x18\x2b\x61\xb4\x3d\xe3\xdc\x36\x5b\x1d\x59\x8f\x75\x80\x2b\xcd\
+\xf1\x1c\x51\x52\x68\x46\x68\x43\x14\x3c\xb8\x1a\xa6\xd3\x29\x61\
+\xb6\x83\xbc\x33\x21\x5f\x9d\x9b\xa3\x7f\xde\xfc\x07\x3d\x7f\xe2\
+\x39\x6a\x34\x1a\x91\x31\xc7\x11\xe7\xa4\x41\xa9\x28\x5e\x01\x06\
+\xe7\x5d\x44\xca\x24\xe5\x2f\x0b\x16\x8f\x0e\xee\x5f\x82\xfa\x4d\
+\x4e\x4e\x23\xb8\x16\x41\xf9\xe2\xbd\xa2\x23\x82\xb6\xba\xba\xda\
+\xe3\x2a\xe8\x16\x0b\xc5\x80\x17\x14\x82\x00\xa2\xc6\x6e\x83\x26\
+\xc6\x8f\xd1\xd2\x42\x95\xa0\x60\x92\x0a\x46\x83\xf3\x99\x48\xb8\
+\x22\x36\x26\xee\x09\xd1\xce\xc0\x50\xbe\x58\x10\x27\x79\x0d\xbe\
+\x8f\xa3\x4d\x0f\xa6\x45\x41\x27\x26\x26\x68\x79\xb1\x4a\x59\xd4\
+\xbe\x8a\xd1\x73\x41\x78\xce\x3e\xa7\xa0\x9d\x4c\xba\x5e\x32\x99\
+\x24\xdf\xc3\xc6\x01\x24\x71\xa1\x56\xdb\x3b\x75\x3a\x71\xe2\x05\
+\x3a\x77\xee\x9c\x20\xc0\x9b\x53\x96\x59\x8e\x8a\x9d\xe1\xf3\x24\
+\x88\xc4\x7b\x02\xde\x1d\x6a\x10\xab\xd9\xde\x15\x22\x37\x00\x77\
+\x11\x1d\x94\x25\xfd\xef\x37\x6f\xd2\x95\x3f\x5c\xa1\x16\xd6\xd4\
+\x8d\x6d\x04\x98\x90\x72\x65\x27\x11\x40\x93\x1d\xd8\x45\xd4\x2d\
+\x5c\xe4\xba\x7e\x17\xcd\x3b\x14\xad\x1e\x1e\x2e\xd3\xf1\x67\x9f\
+\x8b\xd8\xec\x83\xaf\xd8\x17\xa2\x45\xd3\x0e\x94\x8d\x89\xca\xcd\
+\x8b\xa3\x74\x8c\x4d\x1d\x8c\x0a\x5c\xc9\x0c\x64\x44\x05\xf3\xc5\
+\xa2\x18\xe7\xe3\x1b\x33\x33\x74\xe5\x8f\x7f\x42\x2a\xee\x08\x7a\
+\x4a\xd9\xb2\xc7\x2c\x97\xcb\x0c\xdf\xba\x0d\x75\xda\x86\x03\xd5\
+\x53\xa7\x4e\x8d\x6c\xd5\xb7\x40\x0e\x9b\x76\x1a\x75\x0a\xe0\x61\
+\x2e\x97\x91\x45\x3a\xbd\x8e\x30\xb8\x66\x6a\x28\x21\x9b\x02\x90\
+\x95\x11\x60\x54\x38\x65\xec\x08\xc3\xaa\x81\x6a\x13\x73\xdc\xa8\
+\xf8\x77\x26\x1c\x6f\xd7\x0b\x85\x22\x9d\x3e\x7d\x46\xd0\x63\xf6\
+\xbb\xae\x43\x8b\x8b\xcb\xcd\x95\x95\x95\x05\x2e\xc3\xe0\xf2\xe5\
+\xcb\xbf\xb8\x7a\xf5\xea\x47\x41\xb4\xb9\x34\x5e\xe0\x85\xaf\xbc\
+\xfc\xea\x2b\xdf\x79\xfd\xbb\x8f\xf3\x04\x47\x53\x2a\x95\x61\xb0\
+\x05\x07\xb0\x68\xfc\xe2\xc1\x0b\x1a\x13\x75\x42\x2b\xde\x17\x0e\
+\xc0\x39\x17\xe9\xdc\xdb\x2e\xc2\xc1\x64\x32\xb1\xf5\xde\x7b\xbf\
+\xfa\x5d\xab\xd5\xf2\x94\x1c\x96\xee\xf5\x5a\xb7\x11\x54\x4d\x74\
+\x00\x3b\x93\xf7\x31\xbc\x7f\x6f\x0d\x7f\xff\xdc\x0f\x7e\x8f\x8e\
+\x25\x0e\x2c\x2e\x2e\x51\xb1\x98\xa3\xf5\xb5\x4d\xc9\x7f\x06\xc8\
+\x14\x01\x73\xe0\x05\x54\x07\x57\x98\xd1\x4c\x36\x18\x10\xa6\xd7\
+\x37\xeb\x48\x43\x5e\xd6\x69\x34\x77\x01\x77\xa5\x0e\xa4\xdf\x42\
+\x45\x6c\xfd\xaf\x6f\x46\x4e\xad\xb6\x96\xab\x54\xca\xf1\xae\xdb\
+\x17\xd2\xb0\x61\x8e\x96\x91\x5a\x44\x79\xd9\x0c\x3b\x1c\x62\xce\
+\x64\xf3\x79\x70\xc5\xa7\xb5\xb5\x35\x51\xc9\xbe\x03\xf9\x6c\x0e\
+\x4d\xa8\x31\x80\x68\xdd\x83\xbc\x9a\xd9\x3b\x8d\x5d\x8f\x21\xe6\
+\x63\x6a\x6a\x92\xee\xdb\x73\x1d\xe0\x88\xd4\xb0\xd9\xa9\xd5\x6a\
+\xe6\x20\x0e\x74\xd6\x6b\x77\xdf\x5d\xa8\x2e\x3c\x11\x84\x41\x4a\
+\x47\xdb\x9e\xfb\x84\x56\xdd\xfb\xaa\xfc\xe0\x3b\xa5\x8a\x34\x82\
+\x42\xa4\xa7\x57\xad\xce\xff\x12\xe7\xb5\x87\x3a\xb8\x8f\xf3\x16\
+\xf6\x6d\x87\xc1\xe6\xe2\xc3\x1c\x85\x01\xcd\x9b\xcc\x07\x22\xb2\
+\x6d\x45\x7b\x2f\xee\xe4\xa3\x12\x6a\x90\x61\xde\x58\xf6\x1e\x66\
+\xe4\x0b\x0e\xbc\xe6\xb9\xc1\xb6\x6c\x63\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\xd3\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x04\x9a\x49\x44\x41\x54\x78\x5e\xad\x97\x4d\x6f\x1c\x45\
+\x10\x86\xdf\xea\xee\x19\xaf\x0d\x17\x8e\xf8\x1f\x84\xbf\x00\x97\
+\xfc\x0b\xc8\x81\x13\x1f\x02\xc9\x9c\x40\xe2\x12\xad\x36\x41\x0a\
+\xe1\x00\x32\x27\x90\xe0\xc0\x85\x5c\x80\xdc\x90\x10\x87\x48\x28\
+\x48\x11\x90\x4b\x82\x42\x40\x41\x0a\x06\x7f\x60\x47\x89\xbd\x8e\
+\x63\xef\xcc\x74\x15\xbd\x35\x2d\xb5\xd4\x9a\x99\x55\x14\x4a\x7a\
+\xdd\xed\x9e\x9a\xee\xda\xad\x67\xab\x66\x48\x44\xb0\xc8\x4e\x9f\
+\x99\x10\x80\x20\x35\x42\xbf\x09\xe2\x78\xe5\xcb\xb1\x60\xb1\x41\
+\x03\x88\x87\x7c\x0f\xc1\x33\x7d\x7e\x03\xeb\x32\x14\x4c\x8f\xbe\
+\xba\x72\x69\xfc\x3e\x00\x38\x24\x7b\xee\xe2\x87\xe3\xd5\xe9\x11\
+\xc0\x0c\x78\xcf\x60\x08\x7c\xc3\x78\x6a\xc5\xc1\x7b\x81\x73\x06\
+\x44\x61\xb4\x84\xaa\x06\x44\x80\xba\x66\xbd\xb9\x2c\x0d\xaa\x86\
+\xf5\xe6\xb2\x74\x30\x66\x7e\x0d\x3a\x8a\xb4\x32\x46\x30\x1a\x01\
+\x67\xdf\x39\x07\x00\x1a\x80\x41\x32\x75\x76\x16\x00\x01\xd7\x37\
+\x80\x95\x91\x0d\x87\x5b\x5c\xff\x8b\x40\x44\x98\x55\x8c\xab\x7f\
+\x88\x1e\xce\x2c\x61\xbd\xf5\x2d\x9c\xd1\x39\x7b\x8f\xa7\x43\xb0\
+\x3f\xdc\xae\xd1\x34\x0c\xcf\x8c\x5f\xc2\x7a\x55\xd7\x18\x2d\x01\
+\xd7\xfe\x14\x14\x96\x16\xa6\x20\xcf\x33\x25\xa5\xff\x7b\xf2\x2f\
+\xd9\x5c\xb2\xeb\x83\x29\xb8\x0a\xc2\xb9\xb8\xb9\x89\x72\x49\x28\
+\x82\xca\x38\x3a\xf5\x49\x0c\x70\x50\x13\x54\x07\x55\x71\x6c\x92\
+\xc0\xaa\x0c\xce\x3c\x80\x17\x20\xf8\xb9\x83\x76\x8a\x32\x5d\xdf\
+\x46\xcf\xa7\xe6\x34\xc7\x65\x90\xe6\x9b\x22\xec\x48\x41\x64\x10\
+\x7e\xb4\x3e\x5e\xbd\x7f\x28\x68\x9a\x90\xcb\x65\x87\x59\xed\xf5\
+\x5c\xe7\x28\xac\x49\xbb\x23\x0b\x0a\x07\xd4\x0d\x60\x0c\xc1\x7b\
+\x8f\xa5\xd2\x29\x64\x27\xb3\x26\xe4\xda\x29\x1f\x9e\xe7\x3c\x58\
+\xbc\xfb\xb6\x02\xf7\x41\x47\x4a\x90\x43\xa8\x90\x15\x86\xe0\x8c\
+\xc1\xb5\x3b\x61\xe3\xc2\x62\x79\x44\xb8\xf9\x0f\x94\x7c\xdf\x78\
+\xfc\xba\x45\xa8\x1b\x81\x35\x84\xeb\x77\x3d\x08\xa4\xdb\xde\x50\
+\x1f\xa3\xb0\xdd\xd8\x24\x94\xce\x85\xfb\x09\x03\xdc\x24\x08\x63\
+\xa1\xc9\x21\xcc\x65\xd2\xd8\x0b\x21\xf7\xa4\xe0\x22\x00\x9f\xd6\
+\x13\x0b\x39\x84\xe7\x01\x58\x55\x82\x6e\x29\x6a\x14\xc7\x32\xca\
+\x44\x71\x54\x15\x35\x0b\x3a\xd1\xb1\x55\x95\x71\x83\x21\x08\x7f\
+\xd2\xd9\xf0\x27\x4f\x4a\x26\x99\xbe\x05\x61\xbd\xe7\x3e\xe9\x0b\
+\xe0\xd4\x7a\x80\xf0\xf8\x44\xdd\xb4\x12\x16\x85\x81\xa8\xbb\x68\
+\x3e\x0f\x0e\x6b\x58\x6b\x75\x1d\x68\xab\x60\x59\x92\xfa\x08\x13\
+\x5c\x81\xe0\x07\xac\xad\x4d\x18\xc0\xc7\x5d\xc1\x0e\x41\x48\x46\
+\xe3\x13\x54\x55\x8d\xdf\x77\x80\xe3\xe3\x4a\xef\xbc\xb9\xc1\x61\
+\xce\x58\x59\x2e\xf0\xf7\x81\x81\xf8\xb6\x44\xdf\xd9\x23\x70\x23\
+\x28\x1d\xe1\xf6\x8e\xa0\x9e\xb1\xfa\x0f\x7d\x63\x79\x30\x4e\x01\
+\x6c\xed\xd6\xda\x5b\x93\xed\xe8\x80\x6c\x03\xf3\x98\x29\xf8\x2e\
+\xf3\xc9\x9b\x97\x82\x3f\x07\xd1\xcd\xff\xc4\x20\x7e\x04\xe1\xbd\
+\x54\xf9\x50\x46\x8d\x32\x08\x83\x14\x50\x9b\x36\x54\xc2\xeb\x04\
+\x1e\x62\x22\x73\x25\xeb\xfa\x15\x3c\x0f\xc1\xb5\x85\x3f\xbf\x34\
+\xcf\x8d\x3b\x2a\xa1\x8e\x99\xbe\x06\xe1\x42\x67\x25\xfc\xfc\x93\
+\xf1\xb3\xd3\x23\xd6\x85\xc2\x6a\x7b\xd5\x4e\xa7\xbb\xb3\xc4\xca\
+\x27\x20\x02\x96\x4a\xc2\xe1\xc3\x1a\xcb\xa3\x02\x00\xd4\xd7\x1a\
+\xd2\x2e\xc8\x22\x28\x9c\x85\xb5\x00\x0b\x81\x99\x61\x88\xb0\x32\
+\x22\xbc\xfa\xe6\x04\x00\x2e\x74\x41\x88\xaa\xe6\x40\xb1\xd1\xc5\
+\x8d\x07\xc0\xca\x92\x81\x08\xe3\xee\x3d\x68\x55\x23\x48\x98\x0b\
+\x88\x82\x00\x6c\x4d\x1d\x1a\xef\xb5\x8d\x6f\xee\x1b\x0d\x60\x79\
+\x64\xb1\x79\x10\xcb\x03\x08\x77\xf7\x04\xa3\x62\x7e\x4d\x82\xff\
+\x70\x1d\xb8\xf5\xc6\xda\x79\x85\xf0\xc9\xeb\xc0\x70\x0a\x3a\x03\
+\xc8\x20\xb4\xdd\x10\xaa\xca\x01\x08\xab\xa0\x13\x55\x82\xb1\x8a\
+\xf2\xa9\x35\x47\xeb\x87\x50\xcd\x2c\xae\x86\xd1\x16\x7f\xfa\x6f\
+\x40\xb1\x23\x0e\xa4\xe0\xd4\x17\x9f\x8e\x57\x99\x81\xd9\xcc\xc3\
+\x39\xab\x30\x19\xa2\x08\x20\x00\x22\xad\x90\xce\xcd\x47\xe8\xba\
+\xb5\xd4\x8e\x73\x07\x82\xb6\x72\x22\x52\x78\x1b\xcf\x18\x95\x06\
+\x2f\xbf\x3e\xe1\xd8\x92\x91\x07\x61\xf2\x2a\xe1\x7d\x4b\xfb\xd6\
+\xbe\x1e\xae\xfe\xbb\x0f\x5b\x1c\xd8\x33\xee\x1d\x19\x88\x66\x56\
+\xb0\x7d\x80\xb9\x8f\x1e\xfe\xef\x14\x10\x16\x3d\x7c\x67\x4a\x10\
+\x69\xdb\xf3\xee\x91\x24\x4e\x30\x0c\xe1\x6f\x21\xd2\x9d\xac\x19\
+\xfd\x5f\x29\xb8\xac\x63\x5f\x0a\x62\x35\xec\x68\xc7\x2a\x6d\xc1\
+\x4f\xd0\x8e\x9b\xa0\x3a\xaf\x82\x8b\xdb\x71\xde\x54\x1e\x1f\xc2\
+\x34\x57\x4b\xe3\xe9\x97\x26\x9d\x4f\xc5\xa7\x2e\x7d\x36\x5e\xad\
+\x1b\xc0\x1a\xc0\x2b\x58\x84\xaa\x62\x7d\xe9\xa8\x1b\x41\xe1\x48\
+\x8b\x95\xb5\xb1\x3a\x32\x2b\x2f\x14\x63\x25\x52\x30\x15\x5e\x02\
+\xe9\xb5\xf6\xe4\xc8\x87\x3e\xee\x09\xce\xbc\xd6\xf3\x62\xa2\xee\
+\x22\xfa\x00\xfa\xe0\x11\xe9\x9d\xd6\x52\x00\x4c\x0f\xd7\x03\xf6\
+\x4f\x8c\x6e\x29\xcc\xd8\x3b\x54\x50\x15\xb8\xdd\x69\x7b\xb0\x04\
+\xdd\x0f\xa0\x1a\x83\x76\xfe\x48\x3f\x50\x0b\xf3\x81\x80\xcc\x40\
+\x25\x7c\xf1\x95\xc9\x76\x9e\x82\x01\xe5\x26\x7d\xea\x7a\x31\xc9\
+\xde\x8c\xb2\xb7\xe0\xfc\xe5\x24\x41\xe9\xa2\x6c\xfe\x62\x92\x2a\
+\x9d\xaa\xce\x2a\x5f\xf6\x30\x9a\xcc\x64\x74\xe6\x30\x71\xda\x34\
+\x11\x1e\x75\x9c\x94\xca\x6f\xf4\x6b\x86\x0f\x4f\xf6\x1f\xaa\x7a\
+\xaf\xba\x88\x23\x10\x31\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x06\xd2\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x06\x64\x49\x44\x41\x54\x58\xc3\xed\
+\x56\x0b\x4c\x95\x65\x18\x46\xb4\x92\x72\x2e\x53\x67\x6e\xea\x32\
+\x4d\x52\xcc\x4b\x4e\x41\x42\xa4\x04\x34\x38\x20\x77\xe1\x98\x5c\
+\x04\x01\x15\x11\x31\xe0\x80\x5c\xbd\x00\x02\xde\x41\x44\x40\x49\
+\x11\x6f\x04\x89\x01\x79\x03\x0b\x02\x2f\x28\x6a\x71\x92\x05\x23\
+\xe1\x44\x63\xd0\xdc\x8e\xd2\x76\x36\xb6\xa7\xe7\x3f\x7c\x78\x41\
+\x45\x72\x36\xb7\xd6\xd9\x9e\x71\xce\xff\xff\xef\xf7\x3e\xef\xf3\
+\x3e\xef\xfb\xa3\x03\x40\xe7\x55\x42\xe7\x7f\x02\xff\x59\x02\x9f\
+\xca\xe3\x66\x11\xbe\x44\x0a\x91\x21\x10\x43\xd8\xfc\x6b\x04\x78\
+\xb8\x81\x48\x52\xee\x15\x9a\x57\x1f\x9a\x58\xdd\x1a\xb5\xad\xf1\
+\x6e\x74\x8a\x4a\xbd\x71\xa7\x4a\x1d\x9f\xa6\xec\x08\x4d\x28\x6d\
+\xe2\xfd\x3c\xc2\xe1\xa5\x11\xe0\x61\x16\x52\x85\xf2\xb5\xd9\x4a\
+\x45\x92\xb2\x63\x7d\x82\xa6\xcb\x53\x01\x38\x04\x00\x8b\x7c\x00\
+\x73\x77\x60\xa1\x27\xe0\xb2\x1a\x88\x4a\x01\x72\x0b\xda\x3b\xad\
+\xbd\x93\x6b\x19\x33\xee\xa5\x24\xf6\x0c\xc9\xab\x0f\x4b\x52\xa9\
+\x7d\xa2\x00\x1b\x26\x9d\xef\x0d\xcc\x5e\x06\x4c\x77\x03\xa6\x3a\
+\x03\x93\xed\x81\x49\xd6\xfc\x2e\x03\x2c\x3d\x80\x2d\x7b\x80\x1d\
+\xd9\xb5\x6d\x8c\x0d\x7e\xd1\xc4\xe3\x08\x85\x54\x71\x18\xe5\xf5\
+\x8a\x04\xac\xd6\x00\x9f\xac\x60\x62\x26\x9f\xe3\x47\xac\x22\x48\
+\x66\xb6\x3f\x30\x8d\xd5\xeb\xbb\x02\x13\x6d\x81\x19\x8e\x80\x37\
+\xd5\xc9\x2f\xd1\x74\x49\xad\x7a\x91\xe4\xab\xad\x96\x27\xd7\x06\
+\xc7\xd7\xb6\xf9\x6f\x04\x64\x6b\x01\xd3\x95\x80\x31\xe5\x35\x5d\
+\x4f\x22\x31\x94\x9a\x32\x7b\xec\x02\xdc\x77\x03\x4e\xc9\x94\x9f\
+\xca\x18\x91\xe0\x54\xb6\x62\x06\x89\xc8\x43\x80\x63\xdf\x02\x52\
+\x1b\xfe\x71\xd5\xbe\x11\x85\x0d\xeb\x93\x35\x5d\x4e\x3c\xe4\x33\
+\x1e\x6a\x12\xc8\xbf\xac\xc8\x2e\x11\xf0\xcb\x04\x62\xbf\x06\xd2\
+\xce\x03\x5f\x55\x02\x99\xdf\x03\xf1\x45\x80\x2f\xaf\x5b\x91\xac\
+\x21\x9f\x9f\x43\x95\x96\x46\x90\x40\x09\xe0\x1f\x99\x57\xdf\xdf\
+\xe4\x0e\xd6\x52\xd5\x09\xb5\x6d\x2b\xe2\x68\xac\x75\xec\x73\x50\
+\x77\xe2\xc5\x4c\xec\x9b\x05\x6c\x66\xa2\x23\x97\x81\x1f\x1a\x80\
+\xd3\x97\x54\xea\xe4\x9c\xf2\xe6\x80\x4d\x79\xf5\xf1\x39\xd5\xad\
+\xc9\x67\x81\xe5\xfb\x80\x05\xd1\x8c\x09\x66\xe2\xad\xc0\xa9\x72\
+\x80\xe7\xd6\xf4\x4b\x72\x87\x95\xa9\xb7\xc2\xb6\xb5\x77\xba\x92\
+\xb9\x39\x0f\x30\x0b\x63\x45\x5b\x28\x73\x3a\x10\xce\x8a\x0f\x54\
+\x01\x15\x8d\x40\xe9\x55\x95\xda\x2d\x28\xf5\x96\x98\x79\xb9\xd8\
+\x05\x31\xc9\x27\x38\x7e\xc7\x01\xc7\x6d\x80\xfd\x26\x4e\x02\x09\
+\x9f\xf9\x51\x78\xe0\x91\xd9\x35\x78\x4a\x72\x85\x07\x1d\x1e\x94\
+\xa4\xe9\xb2\x0b\x65\x72\xca\x6e\x11\x0b\x38\xef\x00\x02\x8e\x00\
+\xdb\x2f\x00\xc5\x75\x40\x65\xbd\x5a\x13\xbe\xb3\xb0\x41\x24\xb6\
+\xe8\x75\x86\x59\x50\x52\x61\xc3\x16\x4a\xee\x99\xc1\xea\xf7\x92\
+\x30\xbf\x67\xe6\x2b\x3b\xa4\xbc\xd2\x03\x31\xfb\x72\xbb\x7f\xf4\
+\x90\xe8\xe9\xf7\xca\xe8\xd2\xa6\x55\x94\x58\xc6\x8a\xcd\xc3\x69\
+\x9a\x04\x56\xcd\x7e\x6e\x38\x05\xe4\x5c\x01\xaa\xee\x00\x45\x55\
+\x8d\x77\x6d\x7c\xb5\x33\xed\xfe\xac\x8d\xe8\x1f\x97\x57\x9f\x72\
+\x0e\x58\x97\xc7\x11\xcc\x07\xca\x6a\x69\xd4\x35\x5a\xa5\x0c\xa4\
+\x07\x6a\xca\x68\x98\x3d\x39\x0f\x49\x48\x7f\x43\x92\xd9\xef\x78\
+\x26\x67\x62\x0b\x3a\xdb\x9e\x55\xfb\xe5\x02\x89\x34\x58\x01\xab\
+\xbe\x7a\x47\xd3\xb5\x79\xbf\x76\xab\x49\xab\xd6\xa8\x8f\x16\xca\
+\x63\x33\xcb\x9b\x77\x96\x01\x09\x74\x7e\xc1\x25\x60\xef\x31\xed\
+\x0e\x50\x68\x37\xa1\x44\x20\xfd\x10\xb0\x91\x63\x13\x9a\xa8\x25\
+\x51\x14\x18\xaf\xec\xf0\x64\x8f\xad\xa5\xf9\xde\x0c\xb8\xa6\x01\
+\x6b\x4f\x02\xbb\x2a\xd8\xbb\x5f\x81\x4b\x8d\x6a\x8d\x4f\x64\xb6\
+\x52\xf2\x47\x3f\x3c\x94\x92\x5e\xdc\x78\x37\x83\xb1\xc7\x98\xfc\
+\xfc\x35\xb5\x46\xe6\xd3\xbd\x05\x1f\x10\x88\x92\xcc\xc1\xa3\x16\
+\x73\x4c\x5c\x14\x6a\x8d\x23\x2b\x96\xd1\xed\xb6\x49\xc0\x32\x4a\
+\x1e\x42\xc9\xf7\x4b\x0e\xa7\xe4\x95\xb7\xdb\x3b\xfb\x92\xbc\xf7\
+\xbb\x61\x09\x4d\x79\xea\x67\x56\x4e\xd9\x2b\x94\x9a\x2e\xaf\x30\
+\x2d\xf1\x07\xb1\x5a\x02\x21\x5c\x16\x66\x3e\xdd\x5b\xcc\x8c\x2e\
+\x5f\x18\xdb\x2d\xb9\x57\x0e\x10\x41\xc3\x1c\xbc\x06\x54\xab\x80\
+\x93\xe5\xca\x0e\xdb\xee\xe4\x0e\xfd\x1c\xdf\x98\x83\xa5\xca\x8e\
+\x0b\xb7\xd9\xb2\xdf\x80\x98\x54\x6d\xcb\x1e\x53\x4d\x4b\x40\xc1\
+\xdd\x6c\xce\xb9\x36\x22\xcc\x99\xdc\x81\xed\xf0\x3a\xcc\xe4\xa5\
+\x40\xd6\x75\x4a\xfe\x3b\x57\xe7\xc5\xc7\x8d\xda\x9f\xdd\xe1\x1d\
+\x91\xad\xbc\xc9\xd8\x9b\x24\x1f\x9b\xa6\x4d\xae\x78\xe2\xff\x01\
+\x89\x40\xec\x01\x6e\x32\x4a\x6e\xc9\x7e\x3b\xa6\x32\x39\xcd\xb6\
+\x8e\x86\xd9\x5e\xcd\x31\xe3\x7c\xef\x2b\xa8\x6e\x35\x73\x8b\x89\
+\x33\x75\x89\xf8\x48\x47\x47\x67\x20\x31\xe8\x19\x90\xee\x0d\x34\
+\xb2\x09\x1c\x29\xbd\x72\x2f\xfe\xd4\xde\x59\xd7\xfa\x30\xb9\xce\
+\xd3\x3e\x12\x81\x44\x1a\x6c\x19\xe7\xd3\x85\x8b\xc5\xe7\x28\x0d\
+\xc7\xe4\xb1\x5c\xa3\xe9\xec\x5b\x6e\x95\x4a\x3d\xdf\x35\x3a\xcb\
+\xc8\x36\xe8\x63\x3e\xae\x47\xbc\x49\xbc\xf5\x0c\x48\xf7\xf4\xe6\
+\xb9\x6c\x58\x9d\x7a\xbc\xea\x8f\x6b\x4d\x9a\xae\xe5\xe1\x59\x4a\
+\x33\xb7\xe8\x0d\x82\x9c\x2e\x31\xe0\x09\x02\xd9\x17\xba\x37\x5a\
+\x70\x21\xb7\x14\xd7\x66\x02\xc7\x72\x37\xa5\x3f\xf4\x0b\x67\x96\
+\xf2\x9d\x28\xaf\xfb\xd3\xc4\x31\x2c\xe9\x43\x23\xbb\x99\x0c\x19\
+\x45\xbc\x2b\x30\x5a\xa0\xe7\xf7\x28\x43\x59\xc0\xd2\xd8\xb4\xe2\
+\xe6\xb2\x1b\xed\x7f\xb9\x04\xee\xae\x33\x71\x52\x7c\xc9\xeb\x43\
+\x88\xc1\xc4\xeb\x42\x29\xdd\xc7\x08\x54\xd4\x73\x44\x6a\x98\x90\
+\x49\x8f\x73\xc6\xbf\xe1\xa8\x9d\x6e\x02\xce\xb5\x00\x57\xda\x80\
+\x26\x35\x5f\x2e\xc5\x35\x1d\x73\xac\x03\x12\x19\x32\x99\x98\x42\
+\x18\x10\x53\x05\xa4\xef\x53\xde\x9f\x6e\xfe\xb9\x67\x68\x46\xc3\
+\xae\xbc\xca\xb6\x79\x4e\x8a\xa2\x59\x8b\x7c\xfd\x78\x7d\xac\x20\
+\x37\x9c\x18\x2a\x54\x7c\xed\x01\x09\x69\x7d\x96\x5c\x56\xa9\x89\
+\x7b\x25\x57\x5b\xee\x7d\x77\xbd\xe5\xde\x99\xeb\x2d\xf7\xcf\xd6\
+\x12\x37\x5a\xee\x9f\xbf\xd1\xdc\x29\xe1\x5c\x6d\x73\xa7\x67\x68\
+\x7a\xd3\x98\x49\x86\x4b\x19\x66\x26\x85\xf6\x82\x74\xcd\x74\x8c\
+\xbe\xa1\x7c\xc6\x02\xcf\xad\xc3\x46\x8d\xb7\xe0\xef\x59\xc4\x34\
+\x41\x7a\xbc\x50\xeb\x6d\x41\x62\x90\xb6\x1d\x34\x97\x25\x7b\x94\
+\x65\xba\x24\xf2\xe0\x3c\xe7\x88\xc3\x26\x0e\xa1\x47\x8d\xed\x82\
+\xf3\xe7\xda\x06\x15\x1a\xda\x04\x9e\x36\x94\xad\x29\x36\xb4\x0e\
+\x28\x95\x30\x61\xa6\x65\x34\x83\xec\x09\x47\xc2\xa9\x17\x1c\xc5\
+\xbd\xc5\x84\x8c\xb0\x22\x2c\x05\xb1\xb9\xc4\x74\x62\xa2\x50\x43\
+\x52\xe2\x8d\x1e\x15\x06\x8a\xfe\x0c\x13\x72\x49\xf2\x1a\x11\x0b\
+\x08\x6b\x71\xa8\x33\xe1\x4a\xc8\x89\x2f\x08\x77\xc2\xa3\x17\xdc\
+\xc5\x3d\xb9\x78\xd6\x59\xc4\x5a\x8b\xb3\x8c\xc4\xd9\x63\x45\xae\
+\xc1\x22\xf7\xab\x27\xa0\x2b\xe4\x18\x2a\xe4\x99\x28\xe4\x9a\x2b\
+\xe4\xb3\x14\x72\xca\x84\xbc\x2f\xbd\x05\x03\x84\x21\xf4\x84\x41\
+\x46\x0b\xc3\x4c\x16\x06\x92\x8c\x64\x48\x18\x13\x26\x92\xd1\xfa\
+\x32\xa1\x78\xc6\x58\xc4\x3c\xdf\x84\xe2\xa3\x2b\x46\x43\x4f\xb0\
+\x1b\x2e\x98\x4a\x72\xbd\x47\x4c\x20\x3e\x20\xf4\xfb\x1a\x43\x71\
+\x4f\x5f\x3c\x3b\x41\xc4\xf6\x3d\x86\x8f\x7c\x74\x05\xab\xd7\x45\
+\x7f\x86\x88\x00\xa9\x5f\xef\x10\x23\x88\x91\xcf\x5b\x44\xe2\x99\
+\x11\x22\x66\x98\x38\xe3\x89\x45\xd4\xf3\x2e\xf8\x1b\x95\x0d\x18\
+\x5b\x26\xd0\x37\x16\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x04\xe9\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x04\xb0\x49\x44\x41\x54\x78\x5e\xb5\x97\x41\x8b\x5d\x35\
+\x14\xc7\x7f\x27\xc9\x7d\xef\x4d\xeb\x46\xf0\x93\x4c\xbf\x80\x7e\
+\x05\xdb\x85\xed\x42\x10\x8a\xd2\x85\x8a\xa0\xa8\x0b\x79\xbe\xba\
+\xb1\x0a\x6a\x77\x0a\xba\x70\x63\x17\xd6\xcf\x50\x10\x17\x5d\x58\
+\x41\xab\x50\xb4\x6a\xa7\x3a\x63\xdb\xa9\x9d\xe9\x4c\xdb\x99\x77\
+\xef\x4d\x8e\x21\x59\x04\xc2\xf5\x4e\xa9\x18\xf8\x73\x72\x6f\xce\
+\x23\xb9\x39\xbf\x77\x4e\x22\xaa\xca\x41\xed\xa9\x13\x0b\x01\x04\
+\xa0\xd8\x41\x29\x64\x7b\xe1\x8b\xb9\x72\x70\x43\x54\x35\x4f\x72\
+\x7c\xf1\x06\x70\x8c\xe1\x26\x23\xef\x75\x74\x31\xc3\x3a\x7f\xe1\
+\xdc\xfc\x5d\x00\x47\x69\xc7\xce\x7c\x30\x3f\xb2\x73\x1f\x42\x00\
+\xef\x03\x01\xc5\xf7\x81\xc3\x87\x1c\xde\x2b\xce\x19\x44\xa2\xb5\
+\x42\xdb\x81\x2a\x74\x5d\x00\x60\x32\x31\xb4\x7d\x80\x10\x62\xdf\
+\x61\x0c\x71\x8c\x64\x55\xb3\x8c\x51\x66\x33\x78\xeb\xb5\xd3\x00\
+\x69\x01\x86\xd2\x92\xb3\xb3\x80\xc0\xa5\xeb\x70\x68\x66\xe3\xe4\
+\x96\x4b\x6b\x82\x88\xb0\x6c\x03\xdf\xfc\xac\x69\xf2\x10\x94\x6f\
+\xd7\xb2\x6f\xe3\x4c\xf4\x81\xe0\x7d\x5a\xec\xd7\x57\x3a\x7a\x1f\
+\xf0\x21\x24\x9f\xb6\xeb\x58\x99\xc2\xc5\x5f\x95\x89\x95\xf1\x10\
+\x0c\xc4\x59\x8a\xca\xf3\x70\xfc\xd1\xaa\xaf\xd5\x78\x15\x82\xc2\
+\x40\x0d\x9b\xc9\xc2\x15\xd1\x00\x93\x6c\x71\x80\x29\x0c\x10\x80\
+\x1e\xe8\x80\x36\x5b\xfa\x22\x42\x52\x81\x73\x14\xc2\x9a\xf6\xb2\
+\xa8\xa1\xdd\x18\xfe\xea\x50\xed\x40\xb1\x63\x10\x7e\x78\x76\x7e\
+\x64\x6b\x57\xe9\x7a\xcf\x63\x2b\x8e\x65\xe7\x01\x93\xa0\xeb\xbc\
+\x22\xe4\xd8\x37\x8e\xe8\x03\x62\x24\xc5\x7d\x3a\x71\xa8\xc2\xfe\
+\xb2\x67\x36\x75\xc9\xc7\x87\xfc\x5b\x6b\xa2\x1c\xf8\x1e\x26\x0d\
+\xd1\x17\x5e\x7d\x65\x31\x08\x61\x82\xcc\x19\x89\x32\x5c\xbc\xea\
+\x99\x36\x96\x95\x99\x70\x79\x1d\x1a\x2b\xf4\xbd\xe7\xc7\x0d\xa1\
+\xeb\x15\x6b\x84\xef\xae\x79\x04\x01\x85\x1f\xfe\x04\x67\x0d\xb3\
+\x69\xec\xaf\x0b\x8d\x73\x11\x3c\xc3\x4f\x7f\x81\x91\x90\x00\xff\
+\x3e\xfa\x58\xa3\xd4\x10\xe6\xd8\x2b\x35\x84\xb5\x4c\x65\x87\x20\
+\x0c\x95\xad\x05\xa0\xc3\x21\x10\xce\x00\xef\x01\x36\xa9\x40\x37\
+\xcd\x62\x96\x2d\x93\xa4\x02\x6a\xc8\xa2\xcd\x62\x09\xec\x67\x1b\
+\x55\xa0\xf4\x44\x55\x6c\x14\x06\x50\x5e\xaf\x76\x60\xf0\xcb\x2b\
+\x51\x03\x38\xbe\x13\x65\x07\x80\x1a\x42\x8e\x7e\x74\x76\xbe\xba\
+\xbf\x0f\x48\xce\x84\x4d\x63\x50\x05\xd0\x08\x8f\xb0\xbd\xd3\xe1\
+\xac\x4d\xef\x21\x67\xc1\xc9\x44\x92\x8f\x06\xc1\x35\x19\xd2\xe0\
+\x85\x65\xdb\x31\x9d\x5a\xfa\x3e\x67\x49\x11\xd8\xdd\x5d\xf2\xc4\
+\xe3\x53\x5e\x7a\x79\x18\x42\xb1\x02\xa8\xd2\xb6\x1d\x57\x6e\xc0\
+\xde\x5e\x8b\x00\x97\xaf\x07\xf6\x1e\x04\x0e\xaf\x34\xfc\x71\xd7\
+\xa0\x3e\xa7\xe8\xab\x9b\x42\xe8\x95\x89\x93\xe8\xaf\x74\xcb\x80\
+\x20\xfc\xb2\xa9\x09\x48\xdf\x2b\x6b\xdb\x06\x67\xc1\x1a\xf8\xed\
+\x8e\x03\x2a\x08\x9f\x3c\xfe\xb6\x00\xa0\xbc\x09\x1c\x05\x04\xa0\
+\xda\x72\xf3\x08\x21\x08\xd5\x33\x65\x76\xbe\x44\x38\x13\x93\x92\
+\x96\x7f\x41\x9d\xfd\x0a\x6c\xb3\x0a\xc2\x28\x1a\xc0\x96\x44\x84\
+\x07\xba\x02\x1e\xfb\xc5\x66\x38\xeb\xac\x98\x32\x62\x0d\x61\xd9\
+\x81\x11\x08\x4b\xbf\x6e\xe1\x60\x08\xcb\x0e\x0c\x42\xf8\xd9\xc7\
+\xf3\xd5\x9d\xfb\x01\x80\xc6\xe6\xf2\xda\x38\x83\x00\x3e\x28\xc6\
+\x08\xde\x2b\x22\x24\x28\x77\xef\x75\xcc\x66\x0d\x02\xb4\x3e\x60\
+\x45\x52\x15\xcc\xd9\xd2\x62\x2d\x04\x15\x42\x08\x18\x11\x8c\x81\
+\x95\xa9\x70\xf2\xd4\x42\x87\x20\xa4\xed\x02\xd3\xc6\x60\x80\xeb\
+\x5b\x70\x68\x6a\x50\x0d\xfc\x7e\x9b\xf8\x5e\x10\x94\x6b\xb7\x15\
+\x91\x28\x60\x63\xc7\xe1\xbd\xc7\x18\x58\xdf\x32\x58\x23\x71\x02\
+\xcb\x7a\x04\x15\x02\x20\x5c\xdb\x54\x66\x8d\xc1\x1a\x65\xed\x6f\
+\x08\x4a\x69\xd5\x0e\x7c\x75\xea\xc5\x77\x00\xe4\xff\xcb\x03\xa5\
+\x18\x01\x0c\x65\xc2\xf7\xf3\x3b\xec\x20\x84\x59\x93\x11\x08\xdb\
+\x04\xde\x30\x84\xbe\x2a\xcd\x8c\x41\x48\x0d\xdd\x48\x49\x66\xf4\
+\xeb\x4b\x9f\x83\x20\x7c\xfa\xf3\x4f\xe6\xab\x21\xc0\x72\xe9\x71\
+\xce\x12\x54\x13\x3c\x21\x01\x08\x88\xa4\x0c\xe9\x9c\x44\x0b\x1a\
+\x14\x63\xf3\xb8\x35\x06\x84\x54\x31\x45\x24\xc1\x1b\x81\xc4\x88\
+\x21\x68\x06\x57\x03\x34\x0d\x3c\x77\xea\xf4\x30\x84\x02\x78\x9f\
+\x69\xdf\xd8\xce\x93\x83\x72\xf3\x5e\xc6\x21\xf8\xc0\xed\xfb\x06\
+\x0d\x80\x2a\x1b\x77\x49\x3e\xd6\x18\x6e\xee\xe4\x05\x89\x08\x37\
+\x76\x04\x55\x52\x59\x5f\xdf\xd6\x54\xca\x51\xb8\x75\x0f\xac\x19\
+\x81\xf0\xd9\x17\x16\xd5\x29\xe8\xbf\x87\x60\xa4\x18\x55\x47\xb2\
+\x13\x0b\x03\x48\x55\x8e\x9b\x52\x82\x1f\xb9\x1c\xf7\x75\x39\x8e\
+\x59\x30\x3c\x4c\x39\xa6\x06\xef\xe1\x21\xac\xfb\x00\xc5\xc6\xf3\
+\xe7\xe0\x99\xf0\xe8\xb9\x4f\xe7\xab\x5d\x9f\xe3\xe4\x13\x58\x42\
+\xdb\x86\x54\x4e\xfb\x5e\xb1\x4e\x52\x09\xb6\x39\x90\x39\xc3\x19\
+\x41\x00\x10\x44\x48\x40\x26\xe8\x90\x34\x06\xa0\x90\xf9\x48\xc7\
+\x3d\xe5\xc4\xf3\xa7\xf9\x57\x08\x51\x4d\x65\x74\xeb\x41\x06\xc7\
+\x5a\x89\x80\x69\x22\xdf\x08\x6c\xef\x1b\x04\x45\x43\x60\x73\x27\
+\x83\xaa\x0a\xb7\x62\x5f\x35\xeb\x4e\x04\xd5\x18\x72\xff\x41\x06\
+\x4f\x51\x6e\xdd\x55\x64\x04\xc2\xf3\xcf\x9c\x5c\x50\x87\x60\x44\
+\x75\xd3\x11\x51\x6c\xc9\x84\x23\x17\x93\xea\x72\x52\xa0\x74\xe5\
+\xb9\xba\x98\x94\x4c\x57\xa0\xab\x2e\x25\xf5\xc5\xa4\x0e\x01\x79\
+\xb0\x3e\x54\xd0\x67\x15\xc2\xb3\xd8\x2b\x2a\xe9\xb7\xaa\xfd\xa3\
+\x93\x03\xfc\x03\x22\xbc\xed\x2c\x77\x29\xd6\x5e\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x7c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x05\x0e\x49\x44\x41\x54\x58\xc3\xb5\
+\x57\xdd\x6f\x15\x55\x10\xa7\xb4\x5a\xa8\x42\x48\x25\x14\x34\x90\
+\xc2\x03\x36\xbe\x54\x1e\x0c\x0f\x04\x35\x10\xfd\x1b\xca\x9f\xe0\
+\x93\x89\x4f\x05\x0d\xb9\x8d\x18\x13\xa2\x0d\x81\x04\x13\x31\x9a\
+\xf2\x46\x62\x80\x68\x53\x6d\x29\x94\x7e\x72\xa5\xbd\xb7\xbd\xbd\
+\xdb\xfb\xd5\xf6\x7e\xb5\xb7\xb4\x40\x6b\x8b\xf8\xd2\xdb\x3d\xe3\
+\x6f\xce\xce\xd2\x75\xdd\xdd\x16\xc5\x87\x5f\xe6\xec\x9c\x99\x39\
+\xbf\x3d\x67\x76\xe6\xec\x16\x22\xda\xb2\x11\xde\x3f\x15\xaa\x00\
+\xb6\x0a\x2a\x03\x60\xdb\x54\x6c\x26\x2e\x63\x7d\x91\xa6\x50\x33\
+\x30\xe2\x83\x88\x0f\xb2\x01\x73\x7e\xb1\x9a\xfd\x08\x8c\x0c\xcd\
+\x12\x75\x24\x4c\x6a\x4f\xac\xd1\xf9\x1e\xa2\xee\x29\xeb\xf9\x8b\
+\x2e\x93\x6e\x4f\x13\xf5\x15\x88\xbe\xec\x26\xfa\x35\xa5\xe8\x67\
+\xa3\x4c\x1f\x5d\x8e\xd1\xad\x49\xd8\xa4\x4c\x6a\xe9\x30\x9f\xe9\
+\xcf\x75\xb1\x8d\xa9\x7d\x39\x0e\xfb\xfe\x64\xac\xd2\xe5\xfb\x26\
+\xf1\x3a\xbe\x04\x06\x41\xa0\x2b\x43\xd4\x9b\x27\xea\xcc\x28\xba\
+\x9b\x83\x63\x7c\x55\xcb\x0e\x90\xea\xc9\x12\x16\x58\xd5\x36\x8c\
+\xd6\x1f\xc7\xb5\x5d\xf7\x94\xa9\xc9\xde\xc1\x7c\x67\x5a\x51\xfb\
+\x44\x99\x3a\x92\x96\x8e\xc1\xb6\xfc\xcc\xf1\x83\x08\x34\xfb\x6c\
+\x79\x14\x18\x05\xc6\x04\x31\x60\x5c\x50\x70\x8c\x63\x0e\x9b\x51\
+\xf1\xf3\x3a\x12\xef\x23\x70\x25\x5b\x15\xf0\x32\x50\x03\xec\x04\
+\x6a\x81\x3a\x60\x3f\x70\x08\x38\x0c\x34\x00\x1f\x8b\x3c\x2c\xfa\
+\xfd\x62\x57\x2b\x7e\x35\x12\xa7\xca\x2f\x39\xbd\x16\xaf\x04\xcb\
+\x4f\xe5\x0d\x9c\x6f\xcf\x6f\x19\x07\x0c\x60\x42\x30\xeb\x18\x1b\
+\x32\x3f\xee\xda\x85\xa8\x8e\xb7\xfe\x95\x54\x6c\x44\xa0\x8a\xb7\
+\xac\x6d\x8c\xa8\x07\xe7\x77\x1b\xe7\x7b\xa1\xd7\x1a\x77\xa6\xca\
+\x74\xa9\x1f\xe7\x8a\x73\xbf\x95\x5e\xa3\x4f\xae\x8c\x53\xcf\xb4\
+\x35\x77\x51\xeb\x4d\xea\x4c\x96\xe9\xab\x3b\x4a\xeb\x7b\x91\x13\
+\x6d\x63\x8a\xf4\x11\xf8\xec\x82\x17\x81\x97\x98\x75\x64\x9e\x03\
+\x2b\xea\xcb\x89\xcc\x2a\xea\xcf\xf1\x22\x6b\x34\x50\x50\x5a\x77\
+\xe9\x46\x9c\xee\x4e\x2b\xad\x63\x3b\x3d\x9f\x2e\xeb\xe7\xc1\x02\
+\xfb\xad\x11\xc7\xd1\xbb\xc0\x71\xfd\x08\xfc\x6d\xfb\xf9\xcc\x9a\
+\x42\x9f\x39\xb6\xde\x4e\x3a\x7b\xeb\x93\x40\x4a\x50\x72\x8c\x93\
+\x8e\xa3\x70\x26\xe5\xa8\x8e\x67\x11\xf8\xc7\x31\x78\x13\x38\x15\
+\xda\x2e\x49\xb4\x1b\x78\x43\x12\xec\x2d\xe0\x08\x70\x14\x38\x0e\
+\xbc\x07\x84\x44\x1e\x17\xfd\x11\xb1\x3b\x24\x7e\xbb\x25\xce\x76\
+\x89\x1b\x40\xa0\x29\x74\xda\xe7\xd3\xb3\x93\x8f\xdf\x2e\xe1\xd8\
+\x81\x34\x30\x27\xd2\xde\x81\x84\xd8\x79\x25\xa3\x1d\xfb\xb4\x1f\
+\x81\x91\x91\x92\x49\xf7\x51\x2c\x06\xb2\x26\x5d\x8d\x10\x8d\xcc\
+\x11\xdd\xcb\x9b\xf4\xfd\x3d\x6b\x1c\x2e\x2a\xfa\x76\xd0\xd4\xba\
+\xe8\x03\xa2\xb3\x57\x0d\xea\xcf\xae\xd1\x70\x89\xb4\x4d\xb8\x48\
+\xda\xff\x0a\x6c\x58\x1f\x46\x1e\x7c\x37\xa4\xf4\x7c\xb8\x68\xd2\
+\xcd\x94\x55\x88\xfc\x08\x44\x92\x8b\x58\x30\x67\x6a\xb0\xd3\x10\
+\x4b\x04\xd4\x01\x90\x78\x3c\x0e\xe7\x95\x1e\xc7\x16\x88\xbe\xb9\
+\x19\xd3\x73\xb6\x2d\xeb\x07\xb0\x70\xdf\xd4\xaa\xb6\x1b\x9e\x55\
+\xf4\x5b\xd1\x8a\xc9\x73\xc6\x63\xb2\xbf\x88\x75\x02\x72\xfe\x4c\
+\xe0\x8c\x63\xfb\xa3\x1e\x09\xe8\xde\xfe\x8c\x1c\x41\xc6\xe3\x18\
+\xdc\x89\x18\x75\x1c\xc3\x19\x7b\x4d\x77\x12\x56\x4a\xa6\x72\xc2\
+\xec\x00\x5e\x03\xf6\x01\x07\xa5\xda\xbd\x2d\x89\xf6\x2e\x70\x12\
+\xf8\x10\x38\x27\xf2\xa4\xe8\x8f\x8a\x5d\x83\xf8\xed\x93\x38\x3b\
+\x24\xae\xfd\x25\x78\x7e\x05\xfe\x04\x9a\x42\xad\xae\x1d\xc8\xb8\
+\x76\x20\xe3\xda\x81\xd6\x17\x4d\xc0\x48\x3d\x56\x14\x47\x51\x69\
+\x4f\x10\x8d\x95\x14\x45\x91\xb0\xe7\xaf\x19\x18\x9b\x94\x78\x44\
+\x74\x23\xa6\x68\x14\xe3\xc9\x25\x7d\xce\xc6\x0b\x27\x50\x78\x42\
+\x14\x9d\x29\x53\x0c\x8b\x4c\x20\x01\x19\x6d\xbf\x18\x94\x78\xa8\
+\x30\xb6\xc8\x25\x41\x64\xfa\xf7\xff\x87\x40\xeb\x73\x26\xe1\xd7\
+\xff\x95\xc0\xab\xd2\x52\xf7\x02\xf5\xc0\x9b\x40\xa3\xa3\x0a\x9e\
+\x00\x3e\x00\x3e\x17\x79\xc2\x51\x0d\x1b\xc5\xbe\x5e\xfc\x6b\x25\
+\xde\xa6\x08\x70\xc7\xda\xa6\x1d\x9a\x42\x2d\x01\x7d\x20\x68\x07\
+\xdc\xfd\xa0\x45\x08\x6c\x93\xf8\x95\x41\xbd\xc0\x26\xf0\x0a\x97\
+\xd0\x99\x3f\x88\x72\x38\xd3\x3e\xb4\xd6\x29\x14\x91\xd4\x3c\xae\
+\x65\x68\xc5\xe9\x87\x26\x65\x1e\xa1\x1b\x5e\x8f\x53\x7a\xc1\xd4\
+\x73\xbd\x68\xc9\x69\xe4\x43\x7e\x19\x5d\x70\xd2\xb2\x67\x7f\x5d\
+\x8a\x39\xde\x3a\x81\xad\x1b\x11\xa8\xd6\x37\x19\x38\x16\x57\x14\
+\x02\x29\xca\x2d\x91\x96\x8c\x49\x2c\x9c\x5d\xb4\xe4\xb5\x6e\x83\
+\x32\x20\xc3\xf3\xd9\x45\xd2\xc4\x58\x5a\x76\x26\x15\x56\x94\x4d\
+\xa0\x46\xe2\x56\x6d\xb6\x1b\x32\x81\x90\xa3\x1a\xc6\x7d\xaa\xe1\
+\x9c\x4f\x15\x8c\x3b\xaa\x60\xc8\x71\x35\xf3\xee\x86\x42\xc2\xab\
+\x1d\x73\x06\xbf\x2e\x09\xd5\x20\x09\xf6\x0e\x70\x4c\x92\xee\xac\
+\xc8\x63\xa2\x6f\x14\xbb\x7a\xf9\x02\x6a\xbd\xda\xb1\xdf\xad\xd8\
+\xdd\x8e\xed\x96\x1c\x0b\x68\xc9\xa5\x80\x56\x1c\x73\xdd\x0b\x9f\
+\xb5\x63\xdf\xff\x82\x85\x3f\x89\x4a\x28\x38\x45\x24\xde\x30\xba\
+\xd7\xec\x0a\x12\x69\x19\x55\x0f\x5d\xb0\x08\x59\x58\x52\x5a\x3f\
+\xb3\x6c\x3d\xff\xd0\x31\xa1\x75\x45\x3c\xb3\x4d\x7e\xc9\xd4\xfe\
+\x61\x74\x3f\xdb\x3e\x32\xb3\xae\x37\x16\x82\xff\x0b\x34\x01\x6b\
+\x51\x26\x81\xc0\x08\x90\x5f\x84\xf3\x8a\xd2\x44\x38\x48\xe9\x89\
+\xa2\x07\x4f\x21\x61\x77\xbd\x67\xc2\xb2\x03\xf8\xd9\x1a\x9b\x7a\
+\xcc\xb6\x1c\x87\xe3\xcd\x2e\x5b\xe3\xf9\xa7\xcf\xff\x63\x12\xf5\
+\xb8\x1b\xda\x09\xc9\x28\x3a\xc6\x71\x8f\xbb\x60\xf4\xdf\xfe\x98\
+\xd8\x55\xb1\x5a\xbe\x61\x3b\x21\xeb\xe4\xae\x77\x40\x12\xed\xa0\
+\xc8\x03\xa2\xaf\x13\xbb\x9d\xe2\x57\xed\x77\x19\xf5\x24\x10\x40\
+\xa2\x46\xea\xf9\x2e\x59\x60\x8f\x2c\xb6\x57\xe4\x1e\xd1\xef\x12\
+\xbb\x9a\xcd\x2c\xce\xf8\x0b\x15\x86\xe3\xed\xf2\xf3\x48\xec\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\xbc\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x05\x83\x49\x44\x41\x54\x78\x5e\xb5\x57\x4b\x6c\x54\xd5\
+\x1f\xfe\xee\x9d\x3b\x8f\x5b\x68\xe9\x50\x86\x3a\xd8\x48\xb5\x04\
+\x4a\x78\x88\x0a\x21\xd4\x47\x5c\x28\x44\x43\x02\xc4\x05\x89\x1b\
+\x16\xba\x91\x90\xb8\x71\xe5\x23\x3e\x12\x37\x24\xae\xdc\xb8\xd2\
+\xb0\xd0\x95\x09\xff\xe4\xbf\x20\x04\x2b\x2a\x68\x95\x4a\xa0\xb4\
+\x4c\xe9\x93\x96\x4e\x3b\xd3\xce\xab\xf3\xb8\xcf\x73\xef\x1d\xe7\
+\x77\x72\x4f\x32\xc9\x64\x8a\x93\x8c\xbf\xe4\xcb\x79\x4c\xe6\x7c\
+\xdf\xef\x71\x7e\x67\x46\xaa\x56\xab\x68\xc5\x9e\x3b\xfd\xe9\x4b\
+\x00\x0e\x01\x08\xe3\xf1\x36\x06\xe0\xf6\x9d\xff\x7d\x5e\x40\x13\
+\x53\x5a\x24\x0f\xc7\xb7\x47\x5f\xfd\xfe\xab\x0b\x1f\xaa\x11\x45\
+\x05\x00\x49\x02\x37\x7f\x40\x40\x06\x84\x4f\xa3\xe3\xf3\x37\xce\
+\x7f\x76\xe9\x0b\x00\x3f\xa1\x89\xc9\x68\xcd\xb6\x1f\x39\x38\xb0\
+\xc3\x45\x40\xb5\x1d\xc0\x64\x80\xeb\x01\x8e\x0b\xb0\x1a\x3c\x0f\
+\x60\x4e\x0d\xcc\x41\x49\x63\x38\x34\xf8\xd4\xcb\x1f\xbc\xf3\xe6\
+\xbb\x35\xe1\xaf\xb5\x4b\x00\x1c\xc6\xc0\x4c\x8d\x7b\x1e\x52\x7c\
+\xaf\x25\x0e\x61\xa8\x54\x2a\x28\x19\x0e\xf2\xc5\x0a\xde\x3a\x7e\
+\xf8\xec\xeb\x2f\xee\x7f\x83\x52\xd7\x52\x0a\xde\xfe\xe8\xf2\xa1\
+\xba\x25\x9f\xf7\xf5\xf5\x47\x97\x52\xeb\x83\xd7\xfe\x9c\x05\xf3\
+\xb8\x76\x44\x42\x0a\x9e\x1f\x8c\xe3\xe9\x27\xa3\x10\x56\x2c\x95\
+\x60\x4b\x1d\xe8\xea\xde\x86\xc2\x7a\x0e\x9f\x9c\x3f\xfd\x5e\x26\
+\x5f\x36\x6b\x22\xee\xd5\xea\xa1\xd4\x4c\x80\x20\xa6\x93\xce\xbd\
+\xb0\x37\x7e\x4e\xec\xed\x1f\x88\x75\xd3\xc8\x6c\xa6\xe8\xba\xb6\
+\x65\x60\xe7\x76\x44\xbb\x54\x04\xe4\x2a\x6c\xe6\xe1\xc7\x9f\x13\
+\x38\x31\xb4\x1b\xfb\x9e\x89\x81\x8c\x31\x06\xcb\x33\x41\x66\x07\
+\xb6\x40\xd7\x75\xf5\xec\xc9\xa1\xc3\x77\x27\x17\xf7\x03\xf8\xe3\
+\x71\x11\x38\x75\xee\xe4\xc1\xf7\x4f\x1c\x1b\xe8\xc7\x06\x66\x59\
+\x16\x8a\xc5\x22\xfa\x7a\x7b\x70\xe6\x95\x7e\x8c\xdc\x5f\x46\x4f\
+\x57\x04\xbd\x3d\x9d\x90\x24\x09\xa6\x61\x80\x2c\x10\x50\x90\xcd\
+\x56\x90\xc9\x64\xe4\x7f\x5d\x03\x9a\xa6\x71\x2f\x36\x32\xc7\x71\
+\xe8\xd0\x1a\x41\x00\xbb\x76\xf6\x62\x4f\xdf\x66\xdc\x4a\xac\x20\
+\x95\x2d\x43\x8d\xa8\x98\x9f\xba\x83\xaf\x2f\x7e\x8c\x4b\xdf\x5c\
+\x44\x72\x71\x9a\x6a\x47\xda\xa0\x06\x5a\x07\xf5\x0f\xc3\xf7\x52\
+\x51\x14\x3c\xbb\x27\x8e\xc0\xdc\x1a\x6e\x4f\xae\xe0\xf8\xd1\x7e\
+\x1c\x39\x3a\x84\xc1\xbd\xfb\xe0\x55\x65\x74\x76\x76\x62\xb5\xb2\
+\x50\x6d\xab\x00\x21\x42\xd8\xa6\x4d\x9b\x70\x60\x57\x2f\xee\x4c\
+\x4d\x60\x39\x67\xe2\x89\xde\x3e\xc4\x6a\xa0\xdb\x62\xdb\x0c\xa1\
+\x50\xca\x6b\xab\x00\x59\x96\x79\x1a\x86\x87\x87\xa9\x16\xf8\xba\
+\xa3\xa3\x03\xa6\xae\x08\x61\x9c\xdc\xb0\xa9\x5e\xa8\x57\xb4\xa9\
+\x0f\x08\x84\x42\x21\xc4\xe3\x71\x9e\x86\x72\xb9\x4c\x35\xc3\x53\
+\xe1\x54\x25\xe8\x26\x60\x3b\x1c\x30\x18\x40\x7a\x98\x0b\xb4\x35\
+\x02\x54\x7c\x24\x80\xf2\x4b\x91\xa0\xb5\x6d\xdb\x98\x48\x27\xe1\
+\x56\x79\x87\x84\xe9\x70\x72\x98\x5c\x44\x9b\x23\x40\x57\x2d\x1c\
+\x0e\x63\xeb\xd6\xad\x88\xc5\x62\x88\x46\xa3\x3c\x05\x90\x02\x30\
+\x98\xc4\x05\x04\xea\x4e\x37\xec\xb6\x0a\x68\x2c\x42\xaf\xea\xc1\
+\xf3\x3c\x30\x62\x06\x50\x34\x78\x0a\xb8\x6d\x0e\x53\xdb\x6e\xb3\
+\x00\x22\x17\xa3\xeb\xba\x90\x20\xf1\xb9\xc7\xf9\x29\xfc\x7e\x1a\
+\x18\xf0\xa8\x00\x68\x36\xf0\x9f\x5c\x43\x02\x79\x2e\xd6\xb2\x2c\
+\x41\xb3\x80\x80\xcd\x23\xc0\xbd\xf7\x78\x4d\xb4\x31\x02\xc2\x7b\
+\x22\x16\x23\xed\xf1\x37\xc0\xf6\x38\xa1\xc5\x80\xbc\xc6\x53\xc1\
+\xe7\x26\x6b\x73\x04\x28\xec\x44\x2c\x0a\x92\xe6\x74\x0d\x5d\x57\
+\x46\x41\x03\x5c\x05\xe8\xd9\xcc\x3d\x47\x38\xd8\xc6\x6b\x28\xc2\
+\x4e\xa4\x34\xd2\xa3\x24\x04\xf1\x74\x54\x5d\x44\x82\x40\xbc\x1b\
+\xdc\xd2\x45\xa0\x33\x44\x51\xaa\xd2\x17\x1a\x05\xb4\x1a\x76\x41\
+\x26\x42\x4e\xf7\x9f\x44\x04\x83\x41\x7a\xc4\xf8\x35\xac\x58\xc0\
+\xec\x1a\x10\xed\x20\x72\x17\x77\x67\x73\x60\x96\x26\x79\x1e\x0b\
+\xd4\x84\xcb\x74\x9c\x7f\x66\x55\x69\x35\xe7\x22\x02\xd4\x7c\x68\
+\x4d\x22\x28\x1a\x14\x7e\xea\x8e\x24\x8e\x3a\x63\x39\xb7\x88\x5f\
+\xc6\xc7\x90\x79\x94\x00\x24\xd9\xb4\xe4\xee\x05\xa3\xb4\x96\x06\
+\x10\x24\x1f\xe8\x38\xfe\xbd\x56\x88\x69\xa4\x9e\x4f\x73\xd3\x34\
+\x89\x94\x04\x50\x43\xa2\x91\xef\xcd\x8e\x5d\xc3\xc8\x95\x87\xc8\
+\x96\xf4\x45\x25\xa4\x4e\x31\x44\x16\x59\x35\xb8\xc8\xcc\xd4\xf8\
+\xcc\x8d\xef\x0a\x00\x22\x00\x98\x0f\x57\xd9\xa8\xc8\x88\x8c\x4c\
+\xe4\x5c\xb4\x5c\xea\xff\xba\xae\x43\x55\x55\x12\xc4\x3f\x33\x74\
+\x9d\xb7\x62\xe6\x38\xc5\xe5\x8a\xfa\x7f\xdb\xb2\xc7\xad\x7c\x7a\
+\x41\xcb\x2f\xa5\x0a\xc9\x89\xac\xef\x75\x27\x00\x0b\x80\x21\x7c\
+\x54\x9a\x79\x2e\x44\x08\xaf\xe9\x70\x91\x6b\x12\x42\xcf\x6f\xa9\
+\x54\x12\x62\xc9\x7b\x1a\xa9\x35\xaf\x9b\xb7\x7e\xbb\xfe\xf0\xde\
+\xf5\x19\x00\x9e\x8f\x2e\x00\x0e\x00\x5b\xd4\x9d\x2f\xc8\x91\xd1\
+\x68\x44\x2a\x72\xcc\x51\x28\x14\x88\x80\x3c\xa6\x5f\xbc\x24\x90\
+\xf6\xa8\xf7\x93\xf7\x24\x8e\xa3\x5c\x2e\x81\x31\xd3\x75\x99\x15\
+\xf2\x43\xad\xfa\x88\xd4\x81\x3e\x0b\xfa\x42\x64\xa1\xa6\xa9\x08\
+\xf2\x9a\x22\x10\x89\x44\xa8\xca\xc9\x73\xda\xe3\x8f\x4f\x32\x99\
+\xe4\x7b\x73\x73\x73\x18\x1b\x1b\x83\x27\x29\xf6\x6a\x46\xb2\x2b\
+\x85\xd5\x02\x1a\xac\x85\x3e\x20\x88\x2d\xd3\x44\x30\x14\xaa\x17\
+\xc4\x09\x13\xf7\x13\x98\x7c\x30\x89\xf9\xf9\x79\xa4\x32\x45\xc3\
+\xf2\x42\x65\x2b\x10\xcd\x9b\x0e\x56\xca\xf9\x95\x9b\xf9\xf4\x5c\
+\xca\xbf\x6a\x9e\x80\x48\x81\x0f\xe6\xaf\xbd\x26\x11\x90\x28\xdc\
+\x3c\xa7\x8c\x31\x1e\xf2\x44\x22\x81\xd1\xd1\x51\x4e\x9a\xce\x95\
+\x35\x37\x18\xcb\xba\xe1\xf8\x3a\x0b\xef\x98\x35\xb4\xc2\x54\x6a\
+\xf6\xee\xc8\xfc\xd8\x70\x12\xc2\x1a\x05\xb8\x44\x2c\x8a\x70\x43\
+\x01\xba\xae\x61\x69\x69\x09\x0b\x0b\x0b\x9c\x78\x7a\x7a\x1a\xf9\
+\x32\xab\x78\x6a\x7c\x15\x1d\x07\xf2\x88\x87\x1f\x58\xe5\xdc\xaf\
+\xcb\x53\x7f\xfd\x9d\x18\xb9\x9c\x05\x20\xfb\x90\xea\x05\x10\xea\
+\x05\xf8\x60\x02\x4d\x05\xcc\xcc\xcc\xe0\xf7\x2b\x97\xb0\x96\xd7\
+\x2b\x91\x6d\xbb\xd3\xc1\xee\x63\xd9\xe0\xb6\xae\x09\x87\xd9\xd7\
+\x4a\xb9\xe5\x91\xab\xdf\x5e\x10\xa4\x02\x92\x40\x83\x80\xe6\x42\
+\x68\x5e\x15\x7f\xcf\x1b\xfe\x19\x01\x38\x05\x60\x16\xc0\x55\x00\
+\x37\x7f\xf8\xf2\x4c\x5a\xaa\x99\x20\xf2\x89\xd1\x84\xbc\x5e\x04\
+\x1a\x84\xd4\xb5\xe2\x7f\x00\x12\xab\x82\xc2\x52\x64\x01\xcd\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\xb6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\x48\x49\x44\x41\x54\x58\xc3\xe5\
+\x57\xcf\x6f\x1b\x45\x14\xfe\x66\x77\xed\xf5\x6e\xb6\x24\xb1\x1b\
+\x24\xa0\x6d\x44\x10\x3f\x0a\x14\x81\xa0\x34\x42\xe4\x50\x10\x48\
+\x88\xbf\x82\x53\xfe\x01\x8e\x48\xa8\xe2\xc0\x85\x7f\x20\x5c\xb8\
+\x72\xe1\x08\x87\x22\x81\x25\x40\x21\x04\x50\x91\x9d\xa4\x2d\x4e\
+\x4b\x4c\xda\xca\x8d\x08\x75\x12\xd7\xf6\x7a\xd7\xc3\x7b\x33\xbb\
+\x9b\xd4\x3f\xd3\xd6\xd0\x03\x23\xbd\xcc\x6c\xe6\xf9\xbd\x6f\xbe\
+\xf7\xe6\xcd\x8c\x90\x52\xe2\x41\x36\x03\x0f\xb8\x59\xf1\x60\x7e\
+\x7e\xfe\x5d\xea\x4e\xff\x47\x7e\x97\x17\x16\x16\xbe\xbc\x03\x00\
+\x3b\x7f\xe4\xb1\x13\x1f\xce\xcc\x3c\x0e\xd3\x34\xb1\xfa\x93\x8f\
+\xb5\xe5\x3a\xf6\xaa\xe1\x7d\x79\xf2\xc6\x4d\x9c\x3c\xed\xe0\xd9\
+\x57\xd3\x08\xc3\x10\x57\xae\x5c\xc5\x8d\x6b\xe5\x73\x34\xd5\x05\
+\x00\xdf\x7c\x9b\x47\x61\x65\x0d\xd9\xec\x51\xdc\xdc\xb0\xf0\xde\
+\xfb\xaf\x8f\x64\xb9\x9f\x7d\xfa\x3d\x6e\x36\x02\x2c\xfe\x90\x47\
+\x36\x37\x85\x93\x4f\xcd\x74\x87\x80\x5b\xca\x4a\x61\x62\x22\x8b\
+\xdc\xd1\x29\x38\xa6\x83\x4c\x26\x33\x12\x00\xd3\x4f\x3c\x0a\x77\
+\xbc\xae\x16\xc6\x3e\x7a\xe6\x00\xb7\xb4\x9d\x81\xe3\xb8\x70\x5d\
+\x0f\xb6\x39\x86\x4b\x97\xd6\x49\x83\x54\x52\x69\xc0\xb6\x01\x06\
+\x44\x3a\xaa\x4f\xd3\x77\x3a\xad\xe7\x83\x00\xf0\x7d\x92\x26\xd0\
+\x68\x00\xcd\x46\xd4\xd3\x77\xcb\xc7\x64\xee\x21\x98\xb6\x89\x17\
+\x5e\x7c\x05\xeb\xa5\xcb\xfd\x01\x18\xa6\x41\x62\x91\x98\xfc\x81\
+\x33\x67\x5e\x1e\xb2\xb6\x50\x0b\x5b\xb1\xe8\x37\xae\x4b\x03\xb7\
+\x4b\xeb\xfc\xf9\x35\x65\x53\xdb\x16\xfd\x01\xb4\xc3\x36\x49\x88\
+\x30\x20\x69\x07\x3a\x04\xac\x2f\x05\x75\x52\x8d\x25\x8f\x55\x2f\
+\x75\xcf\x3f\xe4\x29\x35\xa6\xb9\xa8\xac\x90\x1a\xb4\x2b\x89\x80\
+\x6c\x99\x64\xb7\xad\x44\x0e\x00\x40\x46\xc3\x76\xa8\x85\x40\x14\
+\x8b\x7f\x68\x8a\x6d\x8a\x9b\x4d\x74\x3b\x24\x19\x3b\x12\x1a\xa7\
+\x53\x9c\x38\x44\x33\x87\xa0\x45\x94\x53\x18\xea\x1c\x06\x92\xba\
+\xaf\xbf\x9b\x2d\x65\x0b\x96\xb6\xdb\x96\x03\x00\xc8\xb6\x44\x5b\
+\x09\x31\x21\xdb\x98\x9b\x7b\x69\x78\x86\xb1\x41\xa6\x5f\x85\x80\
+\x18\x9b\xec\x56\x59\x29\x94\x21\xd8\x26\xd9\x66\x1f\x7d\x01\x68\
+\x42\xa5\x36\x4a\x62\x73\xe2\x45\x4d\x45\x82\xff\x0a\x45\x34\x92\
+\x12\x2e\xa2\x9f\xed\x0f\xf4\x3c\xc7\x42\xea\x71\x6c\x2f\xb1\xdf\
+\x1f\x80\xd0\x22\xb4\xfc\x52\x2c\x43\x5a\x06\x44\xda\xd2\x74\x33\
+\xf5\x71\x38\x6c\xde\x1d\x1c\x02\x5a\x39\x51\x2c\x29\x0c\xa2\xa1\
+\x29\x57\x42\x63\x49\x61\x11\x7e\x90\xd8\x4b\xec\xf7\x03\x20\x12\
+\xdf\x02\xde\x44\x0a\x67\x5f\x7b\xfe\x70\x1b\x9d\x77\x0d\x83\xf2\
+\xdc\x9e\xd3\x17\x96\x7f\xa5\x5d\x29\xf6\x71\xf4\x65\x40\x08\xe5\
+\x5c\x08\x03\xc7\x8f\x4f\xd1\x02\x53\x23\x29\x44\x6c\xab\x54\xda\
+\x55\x76\x3b\x11\x74\x30\x20\x60\xd0\xfe\x37\x0c\x01\xd7\x71\xf0\
+\xf3\x85\x55\x8c\x1f\xf1\x54\x7d\xb8\x97\xc6\xdb\xba\xba\xbb\xa7\
+\x6c\x19\x86\xa1\x44\x0c\x02\x60\xf0\xea\x0d\xa1\x14\xaf\x5d\xaf\
+\x60\xeb\xaf\x6a\x12\x1a\xc8\xfd\xf4\x39\xf8\x2d\xa2\x1c\x43\x57\
+\x74\xf7\xd3\xba\x49\x95\xd1\x64\xe7\x6c\x7b\x20\x03\x4a\xc1\x88\
+\xd0\x9a\xea\x54\x1c\x45\x33\xc9\x96\x60\x66\x85\x06\x31\x24\x04\
+\x86\x72\xbc\x71\xb5\x84\xcd\xcd\x32\xea\xf5\xda\x7d\x39\x77\x9c\
+\x31\x1c\x3b\x76\x02\xb9\xa9\x87\x0f\x13\x02\xbd\x7a\xa6\x8b\x2b\
+\xd6\xc7\x1f\x7d\x80\x9d\x9d\x1d\xd4\x6a\x35\xb4\x5a\xad\x04\xa0\
+\x45\xd5\x31\x16\x4e\x54\xee\x19\x34\xcf\xa9\xd8\x53\xd1\xf1\xe9\
+\x70\x8a\xe5\xf3\x2f\xbe\x52\x36\x59\xd8\xc7\x10\x06\x38\x0f\x0c\
+\x4c\x66\x73\xc9\xff\x17\x17\x17\xb1\xb4\xb4\xa4\x1c\x70\x01\x9a\
+\x9d\x9d\xa5\x2a\x39\x77\x68\x16\xd8\x96\x88\x72\xa0\x93\x01\xa3\
+\x13\x40\x9c\x84\x0e\x65\x6e\xdc\x8a\xc5\x22\x9d\xe5\x74\x4f\xc8\
+\xe5\x94\x14\x0a\x85\x21\xd5\x59\x76\x84\xc1\x49\x16\x26\xc4\x90\
+\x42\xa4\xc3\x20\xd4\xa9\x17\x37\x97\x8e\x59\x3e\x19\x63\x8a\xe3\
+\xbe\x5f\xeb\x5a\xa5\xd2\x97\x3d\x77\xc9\x9d\x0c\x20\x42\xc8\x20\
+\x0e\x18\x39\x98\x3c\xdc\xdf\xf5\xee\x88\xb6\xac\x8c\x0e\xb9\x01\
+\x95\xf0\x40\xd9\xee\x89\xf7\xde\x1a\xdf\x2d\xf8\x2e\xe0\xd3\x8d\
+\x89\xa5\x2f\x03\x41\xe0\x53\xd1\x68\xd2\x8d\xaa\xa1\x32\x7b\x64\
+\x8d\x96\xbf\xbb\xb7\x8b\x4a\xe5\x06\x6e\xfd\xbd\xdd\x1f\xc0\xed\
+\xbd\xdb\xd8\xa9\x56\x95\x92\x21\x46\xf8\x62\x92\x21\x36\xd6\x4b\
+\x28\x5d\xbe\x48\x87\xa9\x95\xe7\x77\x41\xcf\x10\xd4\x9b\x75\x6c\
+\x6d\x55\xe8\x74\x0d\x70\xc4\x1b\x43\xfe\xbb\x1f\xe1\x79\x1e\xce\
+\xbe\xf9\x4e\xd7\x39\x5e\xde\xac\x0c\x4a\x43\xd2\xa6\xdb\x15\xd9\
+\xd9\xde\xbe\xc5\xef\x00\xac\xac\xfc\x46\x97\xa8\x54\xfe\x99\xa7\
+\x9f\xfc\x84\x14\xf2\x3d\x01\x5c\xdf\xfc\x13\xbf\x5f\x5c\x55\x49\
+\xf7\x35\x85\xa0\x33\x9b\xef\x7a\xe1\x52\xdf\xae\x42\xba\x35\x4f\
+\x4f\x4f\xe7\x4f\x9d\x7a\x4e\x39\xa7\x57\x51\xad\x17\x80\xe5\xb7\
+\xdf\x7a\xe3\xdc\xbf\xf9\x1c\xeb\x74\xae\xb8\xfa\xdf\xbf\x8e\xff\
+\x01\x8c\xae\xac\x22\x42\x7f\x21\xa9\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x06\x4b\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x06\x12\x49\x44\x41\x54\x58\xc3\xc5\x57\x6b\x6c\x14\x55\
+\x14\x9e\xc7\x0e\xd3\xdd\xa5\xd3\x2e\xee\x42\x61\xb7\xa5\xd1\x02\
+\x05\x5a\x7c\xd4\x14\x81\xb4\x40\x25\xc6\x07\xa1\x4a\x78\x04\xf9\
+\xa1\x09\xf2\x03\x48\x08\x89\xc1\xa8\x18\x88\xd1\x80\xf1\x8f\x1a\
+\x81\xd8\xa0\x31\x3e\x80\xc4\x90\x62\x09\x91\x34\xbc\xc4\x86\xca\
+\x2b\x3c\x22\x50\x52\x08\xb4\xdb\x2d\xad\xb4\x74\xed\x76\x67\x76\
+\x67\x67\xef\x8c\xe7\xec\xdc\x85\x71\xbb\xbb\x6c\xcb\x0f\x6f\x72\
+\x32\x3b\x77\xee\xbd\xe7\xbb\xe7\x7c\xe7\xb1\xac\x61\x18\xcc\xff\
+\x39\x6c\xa9\x13\x0b\x57\x7d\x5c\x07\x8f\x65\x29\xd3\x6d\x20\x21\
+\xcb\xbb\x04\x32\x3d\xcd\x79\x21\xba\xf6\xdc\xc9\xfd\xdb\xda\x46\
+\x05\x00\x95\x6f\x79\x7f\xcd\x6a\xeb\x84\xbf\xab\x57\x51\x94\x08\
+\x49\xbe\x3b\x1d\x76\xbe\xb8\xb8\xc8\x91\xba\x51\x51\xa2\xc4\xdf\
+\xd5\xa3\xfc\x75\xf5\x56\x08\x2e\xf2\x3b\x4c\x1d\x00\x20\x27\x46\
+\x0a\x20\x31\x26\x4d\xf2\x38\x6d\x82\xc8\xc7\x34\x86\xf1\x78\x7c\
+\x52\x5c\x37\xe7\x59\x16\x36\xf1\x0c\x23\xc0\x4e\x1b\x08\x07\xef\
+\xe8\xc5\x78\x9c\x61\x34\x90\xd2\xd2\x32\xd7\x82\x05\x35\xde\xee\
+\xee\x80\xb7\xf1\xe0\xd1\x05\x00\x64\x27\x80\xd8\x9d\x49\x0f\x9b\
+\xca\x01\x8b\x0b\xca\xa7\x4e\x29\x29\x5a\xbe\x6c\xf1\xe4\xfc\x02\
+\x8f\x43\x8d\x99\x8a\x50\xa9\x5d\x64\x98\x96\x96\x96\xee\x5f\x9b\
+\x4e\xf4\xe2\x1e\x58\xe7\x98\x39\xa3\x4c\x9a\x0f\x8a\xa3\x2a\xc3\
+\x10\x9d\x02\xe4\x54\xf2\x4d\xc3\xbe\xf6\xf6\x9b\xfe\x1d\x00\xe2\
+\xa7\x9c\x00\xa4\x80\xa9\x9f\x38\xd1\xfd\xe9\xa6\x4d\x1b\x2a\xc2\
+\x0a\xdc\x12\x9c\x90\x07\xca\x83\xfd\x81\xd0\x97\x5f\x7d\xb7\x17\
+\x96\x6c\x86\x83\x65\x58\x87\x7c\xa8\x9f\x37\xf7\xd9\xb5\xf5\xaf\
+\x2f\x79\x52\x8e\x98\x60\xed\x79\x30\x4b\x42\xea\x07\x5b\xbe\x68\
+\x86\x75\xf5\xe9\x74\x70\xd9\xfc\x03\x9b\x9a\x7a\x7a\xfa\x55\x0e\
+\x4c\x8e\x30\x75\x8a\x95\xe5\x1e\x7c\x97\xe9\xb3\x0d\xe4\xb3\xd3\
+\xad\x97\x5a\x07\xee\xf7\x29\xe8\xa6\x18\xb8\x43\x89\x82\x25\xf2\
+\x24\x11\x80\x55\x00\xc8\x45\x23\x06\x60\x1d\x68\x56\x42\x4c\x10\
+\xa8\x20\xc3\x38\x76\xad\xed\x46\x10\xbf\x23\x67\x90\x3f\xe8\x3a\
+\x8f\xc7\x05\x76\x63\xbc\x23\x22\xa1\x75\xa0\x52\x5d\x37\x0f\x45\
+\x20\x7a\x96\xd4\xc1\x26\xd7\x83\x05\x18\xde\x5c\x9f\x2d\xd3\xe4\
+\x64\x81\xb8\xf1\x50\x79\xd2\x0a\x19\x86\x57\x72\xb9\x44\x34\x7f\
+\x9c\x02\x45\x77\x85\x95\x28\xc2\x19\x1a\x35\x00\x83\x2a\xc7\x50\
+\x43\x22\xa6\xe3\x2d\xf8\xd8\x09\x8f\xd9\x93\xbc\x25\xf9\x68\x7a\
+\x8c\x5a\x8c\x18\xc6\x50\xc9\xd9\x3f\x2f\x07\xd1\x3d\xa3\x76\x01\
+\x2a\xd7\xd0\xa7\x84\x4a\x7c\x98\xf2\x6a\x78\x2c\x7a\xf9\xb5\xba\
+\x2a\x4e\x90\xc4\x28\x90\x6f\x8c\x00\x09\x0b\x20\x1d\x3e\xd4\xdc\
+\x19\x0e\x2b\x7b\x80\xa4\xa1\x51\x03\x48\x98\x9f\xde\x3e\x06\xa4\
+\xc2\x58\x87\x51\x0d\x8a\x2f\xe0\x8f\xca\x59\xe5\xd2\x8c\xca\x99\
+\xae\xc9\x4f\x55\xb8\x87\x64\x93\xa4\x2c\xaf\x92\xdf\x9a\x9a\x3b\
+\xcf\x9e\xb9\xb4\x27\x5b\x22\xca\x99\x84\x08\x02\x33\x9d\x0a\xc4\
+\x2a\x70\xfb\xa4\xad\xdb\xb7\x55\xd9\xed\x66\x26\x44\x40\xb2\x82\
+\xbe\x36\xd7\x0c\x40\x9e\x38\x72\x70\xff\x6d\x45\x56\xf6\xc0\xf6\
+\x9f\x99\xc7\x25\x21\x49\x02\x20\xa6\x15\xa2\x51\x95\x04\xba\x02\
+\xa1\xae\xce\x40\xc8\x0f\x72\xb7\x3b\x10\x12\xc6\x40\xcc\x83\xd9\
+\x31\x67\xb8\x27\xf8\xa4\x35\x1b\x36\x56\xbe\xf4\x6a\xdd\x87\xce\
+\xb1\x8e\x53\x98\xd0\x1e\xcb\x02\xa8\x1c\x15\x23\x17\x30\xce\x86\
+\x06\xfb\xe4\xfd\xdf\x27\x32\xa1\x75\x54\xd7\x2c\x9c\xeb\x7e\x6e\
+\x4e\xad\x2f\xa6\x89\x7c\x34\x2e\xf2\xd3\x9e\xae\xf1\x96\x95\x97\
+\xbb\x8e\x34\x1d\xde\x01\x20\xbc\xe9\x5c\x91\x33\x09\xe3\x34\xb4\
+\x30\x00\x6c\xc2\x83\x4c\xb8\x3e\x85\x8c\xeb\x2f\x9e\xbf\xbc\xf6\
+\xed\xf5\x1b\x2b\xd5\x98\xc8\x87\x81\x0f\x0e\x87\xc7\xb1\x74\xf5\
+\x9b\x53\x7f\x6c\xf8\x76\x1d\x7c\xbf\x91\x5a\x1d\xb9\x91\x44\x01\
+\x12\x51\xb7\xa4\xe2\x34\xa9\x7b\xb7\x0c\x8c\xbf\x7c\xfe\x8f\x00\
+\xba\x23\x02\x84\xed\x87\x00\x0c\x0e\x89\xfc\x92\x15\xf5\x25\x69\
+\xfa\x8c\xdc\x00\x20\x09\x89\x85\x03\xd9\x32\x21\x82\x38\x7d\xb2\
+\xb5\x5f\xcc\x33\xdd\x85\xf5\x60\x30\xcc\x30\x63\x5d\x3e\x09\xf8\
+\x30\x07\xac\x20\x8d\x3c\x13\x52\x0e\x68\x49\x37\x3c\xba\x8b\x3b\
+\xd7\xd7\x1b\x08\xa1\xbf\x70\x4f\x04\x40\x28\x50\x21\x8b\x4b\x4b\
+\x30\x59\x95\x8f\xca\x05\x08\x20\x4e\x2d\x41\x72\x68\x23\x0d\x9a\
+\xc2\xd1\x6a\x49\x31\x46\x9d\x8a\x0d\x4b\x24\x24\x5c\x60\x40\x1f\
+\xa1\xb3\x30\x78\x8b\x70\x49\xc1\x5b\x3a\x0b\x3c\x4e\x4c\x5a\xb8\
+\x87\xa1\x35\x01\xf2\xc2\xb0\x9a\x90\x11\x00\x6b\x0e\xf8\x6e\xb0\
+\x49\xdf\x27\xda\x2e\xfd\x41\x3d\xc0\xbd\x42\xaa\xcc\x5b\xfa\x5e\
+\xb5\xaf\xb4\x78\x22\x86\x21\x92\x10\x49\xcb\xd9\x90\x0e\x2a\xe9\
+\xba\xe3\xef\x4d\x6d\x56\x6d\x99\x94\x9b\xc5\x94\xe1\x40\x11\x8b\
+\xc5\x45\xb3\xa4\x62\xec\x09\x0d\xa2\xa1\x42\x87\xc5\xe2\x09\xe1\
+\x38\xdb\xca\x59\x2f\xd4\x14\x0d\xc2\x3d\x55\x0d\xdb\x32\x0c\x45\
+\x86\xe9\xeb\xbe\x99\xb6\x20\x71\x59\x94\xdb\xe6\xd4\xbf\xbb\x14\
+\x6e\xe3\x0c\x47\xcc\x02\x84\xb7\xc7\x5b\xf1\xf6\xf1\x0e\x87\x94\
+\x3f\xfb\x99\xba\xb7\x5e\xa1\x2d\xba\x54\x51\xbb\xaa\x76\xee\x1b\
+\x9b\xb7\x3f\x5f\x5b\xbb\x4c\x2c\x9c\x52\x98\xa8\x09\xf0\x21\x1f\
+\xbe\x16\x8c\x55\x49\xeb\xf1\x53\xd8\x3f\x1e\xc8\xda\x13\xa2\xf2\
+\xda\x15\x1f\xbd\x08\xb8\x96\x03\x8c\xe9\xde\xc9\x25\x45\x55\x75\
+\x8b\x7d\x91\xf8\x04\x3b\xde\x08\xad\x80\x3d\x61\x21\x1c\xca\x6a\
+\x9d\x72\xc7\xb5\x0b\xff\x5c\xbd\x70\x11\xab\x9c\x51\x36\xa3\xdc\
+\x39\xbd\xaa\xda\xe5\x18\x37\x4d\x0a\x0e\xc2\x5a\x0d\xdb\x77\x48\
+\xcb\x85\x2a\x39\xde\xb8\xf7\x56\xf7\x9d\x8e\x5d\xa7\x7e\xf9\x64\
+\xa7\x91\xd2\x84\xa6\x02\xe0\xe6\xaf\xdc\xba\x6b\xd5\xba\x77\x56\
+\xbb\x27\x8c\x77\xc4\x88\xc8\xa3\x62\x2c\x34\xe8\x7f\x5c\xca\xf3\
+\x66\xa9\x45\xb3\x3a\xa1\x18\x89\xa2\xb9\x17\x5b\x2f\x45\x31\x43\
+\x0e\xbb\xa7\x3c\xc8\x03\x5a\xc8\x1f\x6e\x3d\x76\xb4\xc7\x7f\xab\
+\xbd\xe1\x74\xe3\xe7\x5f\x27\x02\xc3\x30\xf4\x47\x72\x00\x21\xdd\
+\xeb\xfd\x3b\x02\x1a\x59\x0c\x3b\x35\x18\xd4\x42\xc1\x01\x0d\xdf\
+\x13\x76\x85\x05\x85\x4f\x8c\x13\xb4\x71\x2e\xe1\x61\xb6\x82\x08\
+\x81\x87\x16\x8d\x92\x7b\x77\xef\x46\x3b\xda\xdb\x65\x7f\xfb\xcd\
+\x33\x4a\xf8\xfe\xa1\x2b\x27\x7e\x68\xce\x44\xf8\x61\x00\x74\x12\
+\x6f\xdc\xb7\xab\x41\xd0\x09\xb1\xe9\x7a\x5c\x30\x74\x22\xc4\x55\
+\x79\x40\x8d\xc8\x03\x06\xa3\x73\x09\x10\x10\x01\x42\x9e\xd3\x2d\
+\x08\x79\x6e\x6a\x3a\x83\x36\x84\x86\xae\x13\x39\xa6\x84\x6f\x0f\
+\xf6\x75\x5c\xe9\xbc\xde\x72\x1d\x66\xc3\xd9\x42\x7c\x98\x0b\x28\
+\x52\x34\xac\x93\x8a\x9d\xbe\x0b\xf4\x1b\x4f\x9f\x6c\x8a\xd1\x74\
+\x8b\x60\xbc\x83\x53\x18\x70\x08\x23\x53\x10\xd1\x5c\x5c\x90\x0c\
+\x27\xb4\xa6\x4a\x95\x10\x7a\x98\x6d\x04\x00\x12\xde\xa0\x67\x44\
+\x28\x20\x9d\x49\x93\x0c\x6d\xff\xcd\x78\x60\x5f\x96\x4d\xde\x80\
+\x7a\x36\x71\x90\xcd\xa2\x98\xcb\x00\xc0\x48\x01\x90\x04\x91\x14\
+\xdd\x48\xf3\x37\xec\x5f\x35\x1d\x2c\x65\x8c\x04\xaa\xe9\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\x8c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x04\x53\x49\x44\x41\x54\x78\x5e\xc5\x96\x5d\x68\x1c\x55\
+\x14\xc7\xcf\xcc\xec\xce\x64\x66\x3f\x92\x98\xe6\x63\x3f\x66\xcd\
+\xd6\x45\xb3\x56\x24\x62\x49\xaa\x35\x48\x84\x44\x6c\xad\x51\x8c\
+\x85\x22\xea\x9b\x8f\x42\xdf\x4a\xfb\x20\x3e\x14\x34\xe0\x8b\x0f\
+\xbe\xe5\x45\x10\x41\x82\x0f\xd2\x3e\xd8\x94\x4a\x7d\xa8\x28\x45\
+\x21\x5a\x9b\x54\x1b\x93\xcd\x26\xbb\x6b\x43\x5b\xb2\xbb\xb3\xb3\
+\x33\x7b\x77\x3c\x97\x39\xb0\x83\x84\x4d\x9b\x76\xe2\x81\x1f\x97\
+\xbb\xec\x3d\xf7\x3f\xe7\xe3\xde\x2b\x38\x8e\x03\xff\xa7\x05\xe0\
+\x3e\x6c\xfc\xc4\x47\x31\x1c\xa6\x91\x2c\xb4\x6c\x0b\xb9\xee\x99\
+\x27\x90\xa4\x67\x3e\xf7\xfd\x57\x1f\x5e\x7a\x60\x01\xc4\xf4\xbb\
+\x6f\x1f\x3d\xad\xeb\x03\x1a\x9f\xf0\xe0\x19\x86\xc9\x72\x6b\x05\
+\x43\x10\xdc\x05\xbd\xfb\xba\x95\x9e\x9e\x2e\x19\xc8\xce\x7e\x3c\
+\xcb\x87\x87\x24\x80\x88\xc7\x7b\x43\x41\x49\x91\x4c\x1b\xa0\xd1\
+\x00\xd0\xf5\x4c\x37\x88\x00\x22\x8a\x90\xd0\x63\x10\xe9\x40\x09\
+\xf9\x8d\x5b\x06\x00\x44\x1e\x4a\x0a\x88\xb9\x2f\xbe\x3c\x0f\xc8\
+\x1b\xcf\x0c\x0f\x25\xa7\xa6\x5e\x49\xc9\x4a\x54\xb1\x50\x08\x8f\
+\x40\x30\x88\x0e\xed\x3a\x3b\x7f\xe9\x87\xfc\x77\x17\xae\x6c\x52\
+\x6a\xe6\xa0\x8d\xed\xaa\x08\xa9\x1e\xde\x3b\x76\xec\xa5\xb3\xa3\
+\x87\xc6\x12\x35\x13\x40\x92\x00\x34\x15\x63\x7d\x71\x7e\xf5\xc2\
+\xfc\x95\x19\xcc\xfb\xe7\x70\x0f\x26\xc2\xee\x2d\xab\x27\x63\x1a\
+\xd7\xcf\x01\x01\x40\x0e\x00\xe0\xe6\x9b\xad\xcd\xfd\x15\x30\x92\
+\x4a\xe9\x51\x9b\x01\x30\x14\x20\xa1\xa7\x7c\x3e\xcf\x3b\xe2\x67\
+\x04\x7c\x13\x40\xe1\xcf\x66\x32\xa9\x01\xc0\x42\xe4\xf9\x6f\xa2\
+\x00\x01\x3d\x15\x8a\x45\x83\xf2\xee\xcb\x39\xe0\x25\x9b\x4e\x27\
+\x35\x8b\xba\xc0\x11\xdc\x0e\x58\x5d\xdd\x68\x09\xf0\x39\x05\x43\
+\xb1\x44\x2c\x54\xb7\x00\x6c\x46\x8e\x24\x80\x85\x85\x25\xff\x53\
+\x40\x8c\x26\xf5\x54\xc4\xe4\x02\x1a\xae\x97\x4a\x65\xab\x5e\xa9\
+\x18\x39\x2c\xc0\x2d\xdf\x52\x40\xf9\x4f\xf4\x0f\xec\xdb\x2f\xab\
+\x51\xa5\x7c\x87\xe7\xdf\x0d\x7f\x2e\x97\x2b\x03\xc0\x4f\xbe\xde\
+\x05\x44\x76\x30\xad\x6b\xf5\x3a\x80\x65\xf1\xa9\xdb\x01\x1b\xf9\
+\x42\x15\x27\x8b\x7b\x22\x20\x91\x8c\x6b\x3c\xfc\x16\x73\x8f\x5d\
+\x11\xb9\x76\xed\x46\x2b\x02\x3e\xd7\xc0\x48\x5c\x7f\x34\x6a\xd6\
+\x01\x6c\xdb\x5d\xc0\x58\x9d\x95\x8a\x9b\xb7\x30\xff\xeb\xbe\x09\
+\xa0\xfc\x47\x43\x61\xed\xa9\x70\x57\xaf\x56\xb3\xdc\x03\x48\x0c\
+\xf0\xf0\xaf\xb5\xaa\xdf\xe7\x08\x0c\x0d\xa6\x53\xa1\x5a\xcd\xcd\
+\xbf\x43\x05\xf8\x4f\xb1\x40\xfd\xef\xbf\x80\x6c\x22\x15\xd7\x6a\
+\xd4\x7e\xdc\x02\x01\x80\xa5\xeb\x7f\xed\x59\x04\x46\xe3\x7a\x3a\
+\xc2\x6f\x3f\x8b\xfa\x3f\x28\x03\xac\x2c\xe7\x0c\xcc\xff\x9e\x44\
+\x60\xa4\xab\x37\xc9\x0b\x10\x18\xe3\xed\xc7\xc3\x4f\x17\x90\x5f\
+\x6f\x42\x01\x8d\x8f\x63\xd3\xa7\x9f\xdc\xff\x78\x46\x33\x4c\x00\
+\xde\x82\x0c\xdc\xd7\xcf\xfa\xcd\xbf\xcb\x4e\x93\x5d\xc5\xbf\x79\
+\xa3\xe9\x20\xe0\xa0\xed\x5a\x00\x6d\x4c\x80\x88\xd3\x43\x8f\x3d\
+\x91\x89\x72\x01\x96\x45\x4f\xaf\x20\x40\x7e\x75\xbd\x66\x99\xc6\
+\x9f\x80\xd3\xd6\xe6\x2e\xb8\xa6\xb9\x93\x18\xb1\xcd\xe6\x12\x09\
+\x94\x39\xb8\xfa\x40\x67\xcf\x80\xdb\x01\xfc\x06\xa4\x0b\x68\xf1\
+\xb7\x3f\xaa\x3f\x7e\xfb\xe9\xef\x38\x55\x91\x0e\x42\xa1\x75\x41\
+\xf2\x23\x70\xdb\x5e\x40\xfb\xcd\x15\x44\x7d\x76\xf2\xfd\x97\x43\
+\xe1\xf0\x64\xa8\x3b\x15\x31\x6a\xee\x15\xcc\x18\xcf\x7f\xa9\xc6\
+\x98\xbd\xfc\x48\x2c\x33\x00\x00\x51\x7a\x80\x86\x91\x10\xa2\x91\
+\x18\x99\xfc\xed\x2c\x80\x54\x8a\x48\x60\xf4\xd5\x0f\x26\x5e\x78\
+\xf3\xd4\x67\x63\x6f\x9d\x39\x37\x34\x7c\x70\xe6\xe8\xf1\x13\x83\
+\x75\x4b\x91\x98\xe3\xbe\xff\xb8\xa9\xe1\x7e\x75\x6c\x62\xf2\xf0\
+\x81\xc3\xc7\xe7\x9e\x7b\xed\xe4\x0c\x8e\x13\x00\xd0\x49\x44\x48\
+\x88\x42\x91\x10\xc9\x7f\xdb\x1a\x10\x38\x4f\xbf\xf8\x8e\x9e\x4c\
+\x67\x3e\x39\x32\x3d\xa5\xf7\xc5\xfa\xd5\x26\x28\x52\xb5\x0a\xc0\
+\xbf\xbe\x0b\xe5\x35\x99\xfb\x02\x0a\xa0\xdb\xe1\xe7\xc7\xfb\xc6\
+\x8f\x8c\xf7\xe5\x96\x57\x06\xcf\x7d\xfd\xcd\xc1\xcd\xf5\xc5\x93\
+\xa5\x95\x85\x0d\x00\xb0\x3c\xfe\x19\xd2\x40\xa8\x26\xda\x17\xa1\
+\x10\x90\xe5\xce\x0e\x4d\x0b\x38\xe0\x08\xa5\x42\xd1\xe4\x6b\x4c\
+\xc3\x6c\x16\xf2\xeb\x75\x2a\x33\x50\x54\x55\xea\x8f\xc7\x95\x2d\
+\xfc\xa5\x7c\xdb\x5d\x68\x54\x0c\xa8\xde\x2d\x35\x28\xf4\x22\xd2\
+\xf4\x08\x11\xef\xb9\x0b\x7e\x99\x9f\xbd\xe1\x38\x70\x66\x79\x69\
+\xf1\x75\x6c\xb1\x20\x38\x4d\xa9\xd1\xb0\x4d\xb3\x7a\x67\x0d\x1c\
+\x47\x40\x01\xa2\x14\x90\x35\x45\x8d\xa4\x28\x77\x0e\x1f\x6e\x17\
+\x6f\x5e\xae\xdc\x2d\x19\x0f\x7a\x0e\x38\x08\xfb\xf5\xe2\xec\x65\
+\x1c\xaf\x22\xaa\x37\x8f\x88\x44\xa3\xf0\x9f\x35\x4d\x0f\x0d\xc4\
+\x22\xec\x56\xf8\x77\xee\x02\x87\x60\x48\x1d\x31\x90\x0a\x52\x46\
+\xb6\xee\x83\x32\xad\xab\x22\x35\x6f\xfe\xdb\x46\xc0\x41\xa3\xc3\
+\xa3\x81\x00\x2d\xb2\xe9\x7f\xf4\xe5\xc8\xf6\x11\xf0\x46\x81\x11\
+\xb6\x87\xe6\x76\x87\xd1\xbf\xd9\xa8\xcd\x40\xb9\x85\xa0\x1e\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\x9f\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\x31\x49\x44\x41\x54\x58\xc3\xc5\
+\x97\x6d\x4c\x53\x57\x18\xc7\x2b\xea\xe2\x66\xc6\x32\x63\xb6\x6c\
+\xdd\xa6\xcb\x26\x51\x37\xa3\x21\x99\x9a\x4d\x0a\x53\x96\x6c\x3a\
+\x27\x43\x04\x8d\x1f\x8c\x73\x59\x36\x40\x5e\x12\x4d\x46\x15\x30\
+\xbe\x47\x97\xbd\x32\xac\xca\x00\x87\x51\x51\x37\x40\x93\x81\x18\
+\xa1\x2d\x60\x47\xa1\x2f\x58\x79\x47\x81\x16\x07\x14\x8d\x54\xd3\
+\x84\x25\x24\x8f\xff\x07\xee\x35\xb5\x96\xd2\xde\xfb\xc1\x0f\xbf\
+\xdc\x7b\xcf\x39\xcf\x39\xbf\xf3\x9c\x73\x7b\x4f\x15\x44\xa4\x78\
+\x96\x3c\xf1\x10\xb5\x71\xcf\x4c\xf0\x3d\x68\x14\x28\x02\xb9\x5e\
+\x88\x75\x7c\xbf\xd2\x2b\x3e\x0c\xa8\x85\xfa\x32\xaf\xb8\x32\xa1\
+\x9c\xeb\xc3\x26\x12\xd8\xf2\x5b\xb1\xbe\xaf\xfb\x21\x11\x53\xdb\
+\xee\x74\x57\x5a\x1c\xae\x0a\xb3\xc3\x75\x05\x5c\xb5\x3a\x5c\x62\
+\x1d\xdf\x73\xc7\x5e\xf1\xea\x73\xd7\x6c\x43\x5c\x6f\xb6\xbb\x46\
+\xb8\x8d\x08\x3f\x73\x39\xd7\x73\x3b\xbf\x19\xd8\x94\x9e\x63\x3b\
+\x9c\x5f\xd9\xa3\x6b\x71\xba\x9b\x06\x88\x4c\x0e\x22\xcb\x1d\x22\
+\xeb\x9d\x91\xd1\x5f\x21\xf8\x4d\x66\x7e\x8b\xbf\x0c\x88\xf1\x35\
+\x6d\x4e\x77\xc7\x7d\xa2\x1a\x4c\x84\x9f\xb9\xdc\x6f\x06\x3c\x3a\
+\x52\x82\x58\x0e\x68\xec\x23\xaa\xbb\x45\x54\xdf\x4b\x74\x30\xaf\
+\xb2\x07\xe5\x89\x60\x81\xbf\x75\x15\xe3\x59\xb4\xeb\x01\x91\x30\
+\x70\x2c\x97\xfb\xdd\x03\x3e\x3a\x6a\x34\x61\xe6\x35\x5d\xe3\x02\
+\xe9\x87\xcf\x75\xa0\x6c\x69\xa0\x1b\x8c\xe3\x3b\x5d\x44\x7c\x0d\
+\x68\x13\xfa\xea\xa0\x11\x02\x3a\x08\x18\x20\x90\x26\x41\xa0\x7d\
+\x58\xa6\x80\x11\x4b\x50\xd5\x81\x65\xe8\x21\x4a\x95\x20\xd0\x2a\
+\x57\xc0\x80\x0d\x78\xb5\x8d\x48\x7f\x1b\x02\x87\x82\x17\x68\xbe\
+\x2f\x53\xa0\x16\x33\x2f\x6f\x26\xaa\xee\x24\x4a\x91\x20\x60\xbb\
+\x27\x53\x40\x87\x99\x5f\xb6\x21\x0b\x58\x86\xed\x07\x83\x17\xb0\
+\xde\x95\x29\x70\x0d\x1b\xb0\xd4\x4a\x54\xd1\x2a\x4d\xc0\x3c\x24\
+\x53\xe0\x0a\x66\x7e\xc1\x84\x2c\x60\x19\x92\x25\x08\x34\x38\x65\
+\x0a\xfc\xd3\x4e\x74\xb6\x81\xa8\x04\xcb\x90\x74\x20\x78\x81\xfa\
+\x41\x99\x02\x97\x5b\x88\x8a\xfe\x25\xba\x88\x65\x48\x94\x20\x70\
+\x7d\x40\xa6\x40\x29\x52\x5f\x70\x1d\x1f\x11\x33\xd1\x77\x12\x04\
+\x6a\xfb\x65\x0a\xfc\x75\x93\xe8\x44\x2d\xd1\x69\x74\xf1\xad\x04\
+\x01\xdd\x7f\x32\x05\xfe\xc6\x12\x68\xf4\xc8\x82\x01\xdf\x82\x1f\
+\xcb\x6e\xa1\x2c\x3a\xc0\xc1\x95\x71\xa9\x39\xb6\xf2\xae\x91\x51\
+\xdc\x57\x49\x15\xc8\x3d\x5e\xe5\x70\x69\x6a\x90\x85\x3a\xa2\xec\
+\x02\x7d\x1f\x9f\x19\x02\x14\x88\x4e\x83\x70\x61\xdd\xd3\xe7\x86\
+\x60\x04\xb6\xec\x29\xd4\xf7\xe5\x61\xf6\x39\x5a\x48\x68\x9d\x6e\
+\x3e\x25\x05\x28\xa0\xfe\xe9\x92\x6d\x88\xe3\xfd\x49\x4f\xd6\x49\
+\xe8\xea\x6d\x47\x2c\x7f\x9a\x46\x46\x7f\xc7\x32\xe4\x1b\x89\xd6\
+\xa7\x8c\x7d\xdb\xd7\x4d\x12\xb7\x8e\xdb\x55\xd8\x1f\xb7\x57\x4a\
+\x12\x10\x3a\x4b\xcc\x42\xea\x4f\xe1\x2d\xd0\xe0\x6d\x38\x86\x2c\
+\x40\xca\xaa\x8a\xdf\x1d\xab\x50\x28\xa6\x7a\x10\xc2\x44\x26\x64\
+\xc5\x8c\x49\x1b\x9d\xee\x03\xc5\x0d\xfd\x7c\xc2\x0a\xf8\x50\xfa\
+\x44\x85\x42\x31\x85\x3b\x0c\xff\xe4\xeb\xd0\xc8\x84\xcc\x5d\xfb\
+\xcf\x1a\x07\x4e\xdf\x20\x3a\x65\x21\x3a\x59\x37\xe8\x4e\xfe\xa1\
+\xf4\x76\x64\x42\xb6\x59\x15\x9f\x75\x9c\xc1\xc0\x9a\xa8\x8d\xd9\
+\xa6\xed\x28\x2f\xac\x1f\x74\x33\xbc\x5c\x11\x1b\x76\xbd\xce\x7d\
+\x05\x25\x20\x0c\x3e\x0d\x3c\x07\x9e\x5f\xa4\xda\xfc\x4e\x44\x5c\
+\x46\x76\xd2\xd1\x92\xee\x22\xcb\xf0\xff\x17\xf1\xeb\x58\x82\x63\
+\xda\xa5\x6e\x64\x45\xdb\xfb\x40\xa3\xb5\x8f\xc1\xcf\xcc\xde\x33\
+\xc6\x81\x4f\xbf\x3a\xd2\x84\x98\x38\xa1\x9f\x90\x89\x24\xfc\x0d\
+\x3e\x03\xbc\x08\x66\x81\x57\xc0\x6b\x1f\xac\x4e\x4e\x89\x88\x53\
+\x57\x6e\xda\x79\xa2\x33\x23\xaf\xba\xff\xe7\xf2\xf6\xe1\xdc\xea\
+\xde\x87\x0c\xdf\x73\x59\x4c\xd2\x2f\xad\x1f\xc6\xec\xdc\x3f\x2f\
+\xfc\xb3\xf7\x10\xf3\x12\x78\x01\x4c\x67\x89\x49\x05\x84\xc1\xa7\
+\x0a\x83\x73\xf0\xab\xe0\x2d\xf0\x2e\x98\x0f\x16\x82\x45\x73\xdf\
+\xff\xf8\xcb\x25\xab\xb6\x66\x2d\x5b\x93\x52\xb0\xfc\x8b\xf4\xf3\
+\xcb\xd7\xa6\x15\x2f\xfb\x3c\xf5\x8f\xf0\xe8\x6d\x6a\xe5\xbc\xa5\
+\x51\x68\x13\x06\xde\x06\x9c\xfe\x97\x05\x89\x69\xbe\xb2\xe0\x2d\
+\x10\x22\x34\x9c\xf9\x51\xcc\x8e\x7d\xaa\x0d\xbb\x6d\x58\xc3\x9b\
+\x98\x75\x0b\xd2\xd9\xca\xac\x58\x9f\xd1\x36\x11\x62\x9b\xf1\xf6\
+\xea\x66\x8e\x57\xc5\x67\x36\x61\x7f\x58\x78\x1f\xf9\xca\x82\x2f\
+\x01\x4e\x57\x28\x07\x8a\x7f\x42\x3a\x87\xa5\x23\xf6\xc1\x1b\x36\
+\x68\x01\x03\xbe\x64\x8c\x0e\xe7\x42\xad\x80\xce\x3e\xfe\xac\x13\
+\xef\xed\x1e\x75\x7c\xf5\x28\xe3\xab\x61\x70\x9c\x60\x04\x9e\xe9\
+\x12\x04\xb4\x09\xc1\x62\xb0\xc4\x83\xc5\x42\x39\xef\xfc\x05\x92\
+\x37\xe1\x64\xaf\x21\x50\x82\x37\xc1\x1c\x30\xd7\x83\x39\x82\xe8\
+\x1b\xc2\xa0\x2c\x3e\x3b\x90\xd7\xf0\x11\x90\xc3\x06\x4d\x55\x03\
+\x54\xc0\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\xe8\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x05\x7a\x49\x44\x41\x54\x58\xc3\xc5\
+\x96\x0d\x4c\xd4\x75\x18\xc7\x1f\x2e\x01\xb1\xc0\x38\x1c\x6f\x81\
+\x61\x9a\x24\x18\x57\x20\x21\xa9\xbc\x1b\xd4\x28\x96\x2d\x93\x36\
+\x27\x45\xb9\xca\x88\x4a\xd9\x60\x33\x29\x50\x47\x80\xbc\xb8\xb0\
+\x40\x40\x4e\x8e\x57\x89\xe0\x70\x8a\x32\x72\x91\x81\xd3\x39\x60\
+\x97\x20\x06\x2c\x25\x85\x89\x16\x2f\xcd\xdd\xb9\xe0\xe9\x79\xce\
+\xdf\x7f\xfb\xeb\x4c\x8e\x08\xba\xed\x33\x8e\xdf\xff\x7f\xff\xe7\
+\xfb\xbc\xff\x01\x11\xe1\xff\xc4\xb4\x9b\x00\x1c\x89\x08\x62\x23\
+\x11\x44\xb8\xce\x99\x00\xfa\xb8\x3d\x09\xb0\x27\x09\xe0\xec\x1e\
+\x80\xde\x4f\x00\x5a\x82\x01\x0e\x08\x31\xee\x73\x21\x20\x2a\x19\
+\x40\x97\x4f\xb7\xca\x61\x31\x8b\x00\x76\xd2\x75\xcb\xd9\x16\xb0\
+\x9d\x0d\xb2\x08\xfe\xce\x46\x39\x1a\x7c\xf6\x16\x40\x1d\x9d\xf9\
+\xcc\xb6\x80\x8d\xec\xed\x07\x00\x27\xe8\xfb\xf3\x5c\x0f\x2c\x42\
+\x26\x2a\x6a\xd6\x04\x70\x8e\x57\x01\xec\xcb\x03\xb8\x95\xea\xe4\
+\xd4\xce\x85\x28\xce\x37\x7f\xe5\xe2\x32\xc4\xc2\x58\xe0\x6c\x0a\
+\x30\x7a\xcf\xde\x6a\xfc\xfc\xf4\x22\xe7\xdc\x0d\x9b\x0b\xbc\xbc\
+\xae\xcf\x85\x00\x77\xae\x78\xae\x7c\xb5\xa7\xa7\xbe\x22\x34\xd4\
+\xc0\x91\x60\x6a\x37\x6c\x40\x29\x2d\x26\x1b\x03\x58\xc6\x29\x13\
+\xad\x6c\x6b\x6a\x0d\xb8\xf2\x0f\x42\x15\x8a\xaf\xd9\xa8\x76\xeb\
+\x56\x23\xdf\x45\x47\x9b\x5c\x03\xf4\xf1\x0d\x0b\x0b\x4b\x3c\xdf\
+\xd8\xf8\x8b\x7e\x74\xf4\xaf\xa1\xee\xee\x3f\xf9\x99\x26\x0f\x22\
+\xf1\x90\x30\x8e\x44\xb1\x9d\x1d\x1e\x72\x72\xc2\x83\x16\x16\xc8\
+\xb5\x41\xe7\x1f\x3e\xc8\x70\x48\x48\x48\xe2\x39\xad\xb6\x5f\xaf\
+\xd7\x23\x33\x36\x34\x84\x27\x93\x92\xae\x49\xc2\xa7\x23\xc0\x96\
+\x6b\x20\x07\xe0\xa6\x7c\x1e\xbc\x0c\x70\x88\x43\x2b\xbb\xcf\x92\
+\x0d\x07\x05\x05\x25\xfe\x54\x53\xd3\x3f\x32\x32\x82\xcc\x28\xd1\
+\xd3\xd8\x78\xfb\x1d\x95\xaa\x54\xa4\xc1\x6d\x5a\x02\x24\x8f\xb8\
+\x26\xd8\xf0\xa9\x98\x18\x1c\xed\xef\xc7\xac\x80\x80\x56\xd1\x9e\
+\x0b\x88\xb5\x61\xbe\xbe\x99\xa7\xca\xcb\xfb\x07\x07\x07\x51\xe2\
+\x4a\x4f\x0f\x7e\x9b\x90\xd0\x27\x8a\xd8\x77\xda\xbb\xe0\xde\x54\
+\xb4\x16\x16\xfe\x66\x30\x18\x90\x39\x97\x9b\xcb\xf9\xdc\x1c\xe2\
+\xe3\x9d\x79\x22\x3f\xff\x6a\x5f\x6f\x2f\xf6\xca\x38\x5b\x55\xa5\
+\x8f\x59\xb9\x92\xbd\x0e\x93\x0a\x6f\xa6\x02\x6c\x83\x83\x83\x13\
+\xc7\xc7\xc7\x91\xb9\x79\xf5\x2a\x96\xa4\xa6\xde\xa8\xae\xae\xc6\
+\xd6\xd6\x56\xec\xec\xec\x34\x72\xfe\xf4\x69\x2c\x89\x8b\xbb\xc8\
+\xe2\x08\xaf\x19\x6d\xc3\x7b\x05\xb0\x37\xa7\x6b\x6a\xae\x0d\x0f\
+\x0f\xa3\x5a\xad\xc6\xe4\xe4\x64\xac\xad\xad\xc5\xe2\xe2\x62\xd4\
+\x6a\xb5\x78\xbc\x20\xff\xd6\x6b\x1e\x1e\x07\x85\xd7\x0b\x66\xbc\
+\x8e\x65\xed\x18\xb1\xc2\xc1\x61\xf7\x81\x84\x84\xeb\x65\x65\x65\
+\xc6\x10\xfb\xfb\xfb\xa3\x8d\x8d\x0d\x0e\x0c\x0c\xe0\xf1\x86\x06\
+\x4c\x89\x8e\xee\x9e\xce\xa6\x9c\xca\xa8\x8d\x28\xb0\x77\xb9\xf8\
+\x76\x3b\x3b\xff\x7c\x24\x37\x77\xb2\xa2\xa2\x02\xb3\xb3\xb3\x31\
+\x2f\x2f\x0f\x2b\x2b\x2b\xb1\xbe\xbe\x1e\x2f\x5d\xba\x64\xe4\xb2\
+\x4e\x67\x08\x50\xa9\xd2\x1f\x14\xf6\x29\x05\xd0\xc7\x93\xbd\xe0\
+\xf7\x00\x9e\x76\xfb\x01\xc6\x8c\x6d\x67\x66\x86\x05\x56\x56\xa8\
+\x49\x4b\xc3\xc3\xf9\xf9\x93\xbb\x62\x63\x7b\x93\xe3\xe2\x86\x4a\
+\xd3\xd3\x7f\xa7\x9c\x4f\x76\x74\x74\xa0\x4e\xa7\xc3\x3f\x86\x87\
+\x27\xd3\xb6\x6d\xab\xe7\xae\x30\x59\x80\xd4\x46\x3c\x58\x36\x01\
+\x54\xee\x05\xe8\x67\xa3\xdf\x00\x4c\xf0\x5f\x7a\x03\x31\x94\x2c\
+\x5e\x6c\xec\xfd\x02\x47\x47\xf4\x51\x2a\x33\xc5\xfd\x2c\x36\x68\
+\xb5\x83\xc3\xbe\x86\x9c\x9c\xd1\xb6\xd6\x36\x6c\x6b\x6b\xc3\x6b\
+\x57\x06\xb0\x49\xa3\xb9\x38\x55\x1d\x48\xc6\xbd\xb8\x47\xd9\x5b\
+\x32\xa4\x97\x86\x0c\x7f\x4f\x00\x68\xa2\x61\xb3\x85\xd3\x50\xe4\
+\xea\x6a\x28\xb4\xb6\x36\x5e\x7b\x1d\x60\x07\x9d\x3d\x24\xe3\x09\
+\xe2\xd5\x9d\x51\x51\xdf\x37\x69\xb5\x93\xcd\xcd\xcd\xd8\xd5\xd5\
+\x85\xdd\x67\xce\x8c\x89\x05\xe6\xf8\x0f\xd1\x06\x77\x36\x9e\x05\
+\x70\x5d\x32\x9c\x0b\x30\xf2\x11\x40\xa1\x2f\x09\xa3\xeb\x66\xc4\
+\xfa\xf7\x01\x4e\x56\x05\x06\x62\x81\xb9\x39\xee\x02\xa8\x15\x13\
+\x6f\xfe\x7d\x08\x59\x6e\x6f\x9f\x56\x96\x92\x32\x76\xf4\xe8\x51\
+\x6c\x69\x69\xc1\x5f\x2f\x5c\x30\xac\xf1\xf0\xc8\xa0\x6b\xaa\xfb\
+\x09\xd8\xf8\x25\xc0\x80\x31\xb4\x36\x36\xb7\xdf\xa3\xfd\x2f\xa9\
+\xa5\x8f\x92\x08\xa7\x92\xae\x2e\x75\x77\xc7\x32\x95\x0a\xbf\x00\
+\x68\xa6\xb3\x85\xc4\xa3\xa2\x25\x95\x32\x6c\xc5\xf9\xd3\xc4\xa6\
+\x4f\xc3\xc3\x7f\xa8\x3e\xac\x9e\xac\xab\xab\xc3\xcb\x3d\x3d\x13\
+\xd1\x91\x91\x64\x06\xd6\xdd\x25\x80\x0b\x8d\x8d\x97\xfb\xf8\xe0\
+\x8b\x00\x7b\x65\xc6\x9f\x22\xa2\x3f\x06\xf8\x51\xed\xe6\x86\x47\
+\x22\x22\x90\x92\x3e\xc0\x5e\x10\x8f\x89\xb6\x7c\x9c\x67\xba\x0c\
+\xfe\x7f\x31\xe1\x42\x38\x13\xaf\x2c\xb5\xb3\xcb\xca\x8b\x8f\xbf\
+\xa1\xd1\x68\x50\xd7\xde\x8e\xc9\xb1\xb1\x0d\xf2\x16\x05\xe9\xf5\
+\x8a\x57\x2d\xbf\xeb\xad\xba\x13\x81\x1d\x24\x6c\xef\x6e\x80\x3e\
+\xf6\x9c\xaf\xe5\x29\x14\x7a\x6f\x80\xb7\x85\x30\x0f\xe1\x25\x8b\
+\x79\x46\x86\x4a\x9c\x73\x61\xae\x20\x96\x13\xcf\x11\x6f\x6e\xf1\
+\xf3\x3b\x56\x98\x91\x31\x71\x4c\xad\x36\xd0\xff\x6f\xc8\x53\xb0\
+\x96\xf3\xaf\xf1\xf2\xc2\x9a\xc8\x48\x64\x83\xbc\x6a\x19\xce\xb9\
+\x64\x9c\xe6\x00\x6d\x63\x78\x56\x3c\x70\x35\xb1\x86\xc3\x49\x04\
+\xc8\x58\x27\xce\xfd\x09\x3f\x7e\x61\x15\x82\xc8\x1f\x78\x69\xa9\
+\x52\x99\x11\xe5\xe9\x59\xc6\x4e\xdc\xd5\x05\x24\x75\x0d\xd5\x41\
+\x57\x81\x42\x81\xbc\xef\x4b\x9c\x9d\x8d\x14\xd1\x84\xe3\x9d\x1f\
+\x02\x10\x4f\x3f\xf2\x16\x0f\x66\x43\xa4\x07\x42\xb9\x38\x89\x17\
+\x64\xac\x17\x6d\x47\x3f\x81\x40\x21\xc6\x57\x44\x84\xd3\xe3\x24\
+\xd2\xa3\xb8\xef\x20\x8a\x21\xc5\xdb\x01\x3e\xff\x0c\xa0\x88\xf6\
+\x66\x31\xb9\x9c\xb2\xee\x4e\xc8\xdd\xff\x23\x01\x4a\xd1\x29\x8a\
+\xa9\x26\xa1\x82\x98\x47\x3c\x4c\xd8\x13\x4b\x44\xde\x67\x92\x02\
+\x67\x31\xda\x2d\x4c\x11\x60\x26\x86\xcb\x7c\xd1\x72\x0e\xa2\xba\
+\x97\xfd\x8b\x22\x5c\x22\x8c\xdb\x8a\x69\xcb\x8e\x99\x4d\xb9\x8c\
+\x84\x88\x79\x42\x84\xb5\x08\x9f\xbd\xc8\xa3\xa9\x6d\xc8\xc2\x17\
+\x09\x27\xd8\xb8\xb9\xdc\x7b\x53\xb6\xa1\x24\x82\xc3\x66\x25\x52\
+\x62\x6d\xc2\x20\x5a\x28\xc2\xfd\x88\x30\x6c\x29\x9e\xa3\x90\x7b\
+\xcf\xfc\x0d\xe3\x58\x91\xad\x93\x78\x02\x2d\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x07\x72\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x07\x39\x49\x44\x41\x54\x78\x5e\xa5\x97\x6b\x6c\x14\xd7\
+\x19\x86\x9f\x33\x33\x7b\xf1\xda\xbb\x5e\xdb\xf1\x05\x1a\xb0\x21\
+\xb8\x01\x43\x02\x85\xa6\x51\x29\x14\x2b\xa2\x49\x14\x89\x5f\x6d\
+\x41\x55\xc9\x45\x28\x42\x02\xa7\x28\x4d\xaa\xfe\xea\x45\xe2\x47\
+\xfe\x94\x44\x51\x4a\x93\x8a\xaa\x45\x4d\xa3\x46\x8a\x5a\x95\x48\
+\x16\x69\x68\x43\x21\xad\x02\x82\x16\x62\x2e\x36\x36\xc6\x57\xf0\
+\x8d\xb5\xbd\x17\xef\xee\xec\xce\xe5\x74\x38\x5a\x65\xd5\xf5\x62\
+\x0b\xfa\x4a\xaf\xce\x68\xce\x1c\x7d\xcf\xf9\xbe\x6f\xce\xce\x0a\
+\x29\x25\xe5\x24\x84\xd8\x0e\xac\x67\x71\x75\x49\x29\xff\xce\x7d\
+\x4a\x01\x94\x04\x5e\xab\x69\x5a\xd4\x03\xfb\x9e\xe3\x38\x1d\x2c\
+\x22\xef\xd9\x3f\x00\x9d\x05\x90\x5e\xee\x51\x5a\xe9\xae\x0f\x3c\
+\xbd\xe9\xa7\xaf\xef\xdb\xf9\xf3\x27\x36\xae\x79\xf2\xe2\xc5\x8b\
+\x0c\x0e\x0d\x31\x34\xe8\x79\xa8\xe0\xc1\x41\x35\x7a\xf7\xf1\xe6\
+\xd9\xfd\xe4\xe6\x67\x3e\x78\x75\xe7\x6b\x6b\x9b\xc2\xcf\x79\xf0\
+\x11\xee\x51\x46\x09\xc0\x86\xf6\x68\x76\x57\x55\x65\x8e\xab\x21\
+\x49\x4f\x4f\x0f\xe1\x70\x98\xbb\x29\x95\x4a\x61\x4c\x0d\xd4\x39\
+\xdd\x03\x75\x4b\xb4\x74\xcd\x55\xa8\x06\x92\xff\x0f\x80\xb8\x39\
+\xd8\x47\xc5\x48\x1f\xb3\xb7\x5c\xfe\x71\xf2\x24\x19\x33\x8b\x63\
+\xd9\x48\xc0\x34\x4d\x72\xb9\x1c\xf9\x7c\x1e\xdb\xb6\xa9\xad\xad\
+\xa5\x22\x3e\x45\xa2\x42\xc3\x76\xb9\x2f\x19\x25\xf5\x14\x48\x70\
+\x81\xc6\xa0\xe0\xc2\xbf\xfe\x86\x99\x99\x43\xc3\x45\x02\x02\x88\
+\xe8\x2e\xba\x26\xf0\x09\x81\x71\x5b\xb2\x2c\x62\x20\x70\xc1\xa8\
+\x08\x3c\xf5\xc2\xcf\xbe\xfe\xd2\x2f\xbb\x1e\x02\x36\x00\x51\xa0\
+\x19\x68\x41\x89\xcf\x81\x77\x0e\xff\x60\x7d\x5f\x59\x80\x23\x47\
+\x8e\x08\x5d\xd7\x35\xa9\x39\x0a\x60\xd5\xaa\x15\xf8\x32\x3a\x92\
+\x10\x52\x4a\xcf\x20\x04\xd4\x87\x83\x04\x0c\x9d\x80\x4f\x63\x3c\
+\x2b\xb8\x3e\x31\xc9\xbf\x27\xc7\x08\x6e\xda\xb9\x67\xeb\xb6\x6d\
+\x7b\x2a\xc2\x21\x96\xd6\x06\x08\x05\x74\xaa\x2b\x75\xea\xc2\x7e\
+\xa2\x55\x7e\x7a\x46\x92\xed\xc7\x3e\x9b\x0a\x00\xfb\x4b\x00\xe6\
+\x77\xa5\x10\x78\x8b\x03\xac\x89\x56\x92\xb5\x1c\x2c\xdb\xc5\x95\
+\x12\x4d\x08\xfc\x86\x46\xd0\xa7\x93\x75\x04\x89\x68\x0b\x6f\xbc\
+\xf9\x3e\x8d\x4b\x1f\x04\x50\xa0\x85\x51\xd9\x2b\x93\x2a\x57\x75\
+\xb5\x9f\xc6\xda\x06\x46\x26\xe7\xf6\xbd\xf4\xd6\xe7\x1c\x3e\xb0\
+\x61\xff\x5d\x01\xd0\x41\x68\xa0\xeb\x02\xd7\xb3\xe1\x0a\x24\x02\
+\x57\x0a\x34\xa1\xee\x2b\xdf\x4a\x39\x7c\xf5\xe9\xcd\x44\xeb\xea\
+\x55\x6f\x94\x91\xea\x97\x64\x32\x49\x30\x18\x54\xcd\xfc\xfd\xed\
+\xcd\xd8\xf6\x8d\x22\x44\x11\x00\xf6\xee\xdd\x2b\x3b\x3a\x3a\x5c\
+\x43\x08\x7c\x1a\xf8\x75\x0d\xc3\xd0\xd1\x10\xd8\xba\x8b\x2b\x51\
+\x00\x86\xa6\x11\x30\x34\xf5\x8c\x99\xcd\xaa\x20\x3e\x9f\x8f\x72\
+\xb2\x2c\x8b\x44\x22\x41\x4d\x4d\x8d\x02\x08\x04\x02\xec\x6a\xff\
+\x12\xee\xa9\x9b\xfb\x3a\xde\xbc\x70\xfe\x57\x2f\x6f\x3c\x6a\x50\
+\x14\xae\xeb\x4a\xa1\xeb\x18\x06\xaa\xc6\x04\xee\x5c\x6b\xcc\xe5\
+\x6c\xe2\xe9\x1c\xd9\xbc\x8d\xe5\x48\x42\x7e\x9d\xd9\x2c\xd4\x9a\
+\x26\x0b\xc9\x71\x1c\x32\x99\x8c\x2a\x03\xc5\x46\x67\x63\x4b\x80\
+\x4b\x03\xd9\xe7\x81\xa3\x1a\x45\x21\x3d\xe9\x1a\x18\x3a\xf8\x7d\
+\x02\x5b\x4a\x06\x62\x29\xae\x26\x0d\x8c\x55\x5b\x78\xb0\xfd\x59\
+\xbe\xbc\xe3\x65\xea\xb7\x3c\x4b\xcd\xc3\x5b\xb9\xd6\x3f\xc2\xe9\
+\xd3\xa7\x89\xc5\x62\xaa\xe6\xa7\x4e\x9d\xe2\xf0\xe1\xc3\x6a\x2c\
+\x9e\xb0\x70\xfc\xf8\x71\x0e\x1d\x3a\xc4\xc1\x83\x07\xe9\xec\xec\
+\xa4\xff\xc6\x20\xb6\x9d\xd7\x84\xa7\xf9\x00\xba\x02\x60\x68\x36\
+\xcb\xb9\x49\x87\xd6\x1d\x1d\x6c\xfb\xe1\x51\x2a\xb7\xbe\xc2\xf8\
+\x03\x3b\xb8\xec\x3c\xc6\x65\xf9\x04\x99\xe5\x7b\x68\x79\x7c\x3f\
+\x96\xa8\xe3\xd8\x87\x9d\xea\x54\x1c\x1e\x9d\xe4\x9b\x4f\xed\xe5\
+\xca\x95\x2b\x0a\x40\xd7\x75\x42\xa1\x10\x95\x95\x95\xea\x3a\x12\
+\x89\x60\x18\x06\xae\x6a\x52\xf7\x2e\x6f\x81\x10\x4c\x66\x25\xf1\
+\xa5\xad\x7c\xe7\xc0\x2f\x48\xe9\xf5\x24\x52\x39\x84\x6e\x81\x26\
+\x48\xe7\x5c\x62\x71\x93\x54\x2a\x4f\x77\xde\xe5\x72\x55\x80\x8d\
+\xad\x5b\xb8\xd2\xdb\xc7\x58\xb6\x8d\x99\xb3\x13\x18\x2a\x80\xfc\
+\x22\x68\x4b\x4b\x8b\x3a\xb4\x84\x10\x54\x55\x55\x31\x91\x04\x6f\
+\x4e\x96\x05\x10\x1a\x0c\xa7\x24\xbb\x5e\xfc\x31\xe1\x25\xcb\x18\
+\xe9\x7c\x97\xa9\xfe\xcb\x18\x81\x0a\x5a\x5b\x36\xb0\x7c\xd5\xa3\
+\xf4\x4e\x84\xb9\x31\x9c\x22\x36\x63\x32\x3a\x95\x61\xcc\xb3\x21\
+\x1a\x99\x8a\x25\x68\x7f\x2c\x48\x43\x11\x40\xed\xde\xdb\x35\x75\
+\x75\x75\x00\x0a\x2a\xe5\xa4\xbd\xd1\x96\x77\x34\x3f\x03\x1a\xb4\
+\x44\x05\x9f\xbc\xfb\x06\x12\x8d\x8a\xc4\x20\x0d\x91\x20\x8e\xeb\
+\x72\xb3\xe7\x24\x31\xb7\x8a\x75\xdf\x7a\x9e\x68\xdb\x37\xb8\xd8\
+\x13\x67\xcc\xce\x90\x4a\xe6\x49\xa7\x2d\xcf\x36\x08\x40\x16\xcf\
+\x04\xef\x0d\x51\x00\x85\xa3\x5e\x81\xf9\x8c\x3c\x42\x97\x77\xcf\
+\xc0\xb2\x88\x20\x6f\x0f\xe0\xaf\x8c\x50\xb7\xb2\x96\x82\x58\xd1\
+\x50\x45\x3c\x63\xd1\x7f\xea\x6d\x92\xf5\xff\xe1\xa1\x87\x5f\x20\
+\x99\xf6\x61\x59\x0e\xb6\xe3\x2a\x1b\x3e\x0d\x69\xaa\x0c\x50\x22\
+\x05\xa5\x4c\x71\xae\x5c\x06\x94\x1b\x22\x3e\x7c\xa1\x00\xa5\xaa\
+\xad\xf4\xf1\x40\xd8\xcf\xd9\x2b\x67\x59\xff\xc8\x6e\x42\x41\x83\
+\xac\x67\xdb\x96\x9e\x5d\x0c\x5d\x03\x50\x8d\x26\x28\x0a\x09\x08\
+\x89\x2c\x66\x87\xbb\x66\x40\x59\xa8\x71\x9e\xce\x0f\xcc\x30\x38\
+\x6b\xb1\xa3\xe3\x2d\x7a\x66\xa3\xe8\x81\x14\xc1\xa0\xae\x82\xdb\
+\x96\x81\xcf\xd0\x50\xbb\x74\x5d\x24\x25\x92\x14\xe6\x16\x01\xd0\
+\x34\x81\x50\x66\x9e\xfa\xa7\x52\xbc\xfa\x5e\x17\xfd\xb7\xd2\x88\
+\x6a\x93\xe6\xfa\x0a\xb2\xa6\x43\xce\xb4\x31\xbd\x71\xd3\xea\x1a\
+\xce\x9c\x28\x5f\x02\x60\xf1\x12\x08\xf1\xbf\x59\x28\x55\x6b\x53\
+\x98\xd7\x77\xaf\x67\x28\x61\xa3\x37\xac\x66\xcd\xba\xaf\xa8\xce\
+\x2e\x88\x33\x23\xd0\xd6\xd6\xb6\x30\x80\x5c\xac\x07\x16\x28\xc1\
+\xe3\xad\xb5\x7c\x6d\x65\x84\x4f\x7b\x27\xf1\x3f\xb2\x8e\x1d\xbb\
+\x5e\x54\x5d\x5e\xa2\x45\x00\x58\x30\x03\xca\x9a\x00\x41\x51\xae\
+\x65\x92\x4f\x4d\x63\xcd\xcd\x60\x67\xe2\xe4\x66\x24\x86\x95\x29\
+\xd9\xd1\xe2\x52\x60\x0b\x37\xa1\x50\x96\xd2\xc1\x31\x93\xe4\xe7\
+\xbc\xa0\xa9\x69\x05\xa0\x40\x24\xc4\x73\x30\x38\x2b\x59\x3a\xe7\
+\xde\x17\x80\x44\x02\x62\xe1\x0c\x64\xc6\xba\x01\x8a\x41\x4d\xc9\
+\x68\x42\x72\x2d\xe6\x32\x96\x92\xe6\x60\xbe\x2e\xf1\xed\xaa\x15\
+\x8d\xf7\x0a\xe0\x38\x8e\x32\x18\x0b\xbf\x86\x96\x03\x33\x59\x49\
+\xff\x8c\xe7\x69\x97\x89\x39\x69\x4e\xa5\x65\xff\x6c\x56\xf6\x0f\
+\xc7\x65\xcf\xba\x2d\xed\xeb\xab\x9b\x5a\x9f\x29\x02\x2c\x1e\x78\
+\x7a\x7a\x9a\xd1\xd1\x51\x26\xd2\x41\x60\x59\xbc\x2c\xc0\xe4\x9c\
+\xe4\xe2\xb8\x8b\x17\x84\x9b\x49\x19\xbf\x3d\x27\xfb\xc6\xe7\x64\
+\xcf\xed\xb4\x9c\x00\xc6\x0a\x1e\x6f\x58\xde\xd6\xa4\x1b\x7e\x16\
+\x03\x48\xa7\xd3\xea\x7f\x44\x57\x57\x17\x37\x06\x47\xd1\xaa\x57\
+\x12\x69\xde\x0c\x1a\xef\x94\x03\x18\xfd\x74\xd8\xb9\xd1\x3d\x25\
+\xc7\xc7\x53\xb2\xcb\x83\x19\x02\x26\x81\x71\x20\x0d\xf8\x00\x1d\
+\x08\x5a\x79\xd3\x70\x1d\xa7\x1c\x80\xfa\x00\x99\x98\x98\x50\x3f\
+\xcb\xdd\xdd\xdd\xc4\xd2\x3a\x81\x86\xb5\x54\xad\xde\x86\xe6\x0f\
+\xfd\xde\xd2\x8c\xb7\xbd\xaf\xe3\x73\xe5\x00\xba\xfe\xd8\xe5\xfc\
+\x04\x88\x01\x03\x80\x09\x84\x81\x4a\x20\xc0\x3c\x49\x0a\x00\x2a\
+\xc5\x33\x33\x33\x5c\xbf\x7e\x9d\x4b\x97\x2e\x31\x3a\x3e\x4d\xde\
+\xd7\x44\x45\xc3\x66\xfc\x75\x91\xb3\xae\x74\xde\x1b\xbe\x76\xee\
+\x4f\x7f\xfd\xdd\x8f\x6e\x7b\xc0\x6e\xd9\xb7\xc0\x9b\xe8\x15\x42\
+\x5c\x07\x34\x20\x50\x08\x9c\x07\x74\x40\x02\x4e\x61\x4e\xf7\xf9\
+\x83\xb6\x44\x30\x33\x3b\xcb\xc4\xf8\xb8\x0a\x3a\x30\x34\x4a\xca\
+\xae\x42\xaf\x6e\x41\x34\x3d\x3a\x66\xa5\x13\x1f\x0e\x9c\xfb\xe8\
+\x83\x4b\xa7\xdf\xef\x03\xe6\x00\x93\x12\x19\xcc\x97\x2c\x06\x23\
+\x07\x08\xc0\x29\x80\x18\x5f\x00\x04\x42\xb1\x91\x5b\x53\x5c\xfd\
+\xec\x2f\x4c\x67\x03\xf8\xa3\xcd\x18\x8d\xdb\x11\x66\xf6\xd8\xd4\
+\xad\xde\x63\xff\xfc\xf3\x2b\x67\x00\x0b\xc8\x01\x59\xc0\x06\x5c\
+\x40\x2e\x08\x20\x3d\x09\x21\xdc\xc2\x02\x0a\x8b\xac\x02\xac\x5e\
+\x00\xd0\xce\x7f\xf4\xeb\xdf\x44\x9f\x7b\x6d\x49\xa0\xf9\xbb\xbb\
+\x2b\x73\x99\x13\x99\xe4\xf4\x89\x0b\x1f\xff\xf6\xe3\x81\xae\x4f\
+\xe2\x85\x35\x4e\xc1\x56\xd1\xb8\xb2\xa4\x61\xfe\x0b\xaa\xd3\xe9\
+\xaf\x70\x35\x30\x23\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x08\x78\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x08\x3f\x49\x44\x41\x54\x58\xc3\xad\x57\x0d\x50\x93\xf7\
+\x1d\xae\xda\x6d\xb6\xb7\xeb\x6d\x5d\xb7\xdb\xe7\x79\xfb\xba\xb5\
+\xdb\xda\xab\xb6\xda\xde\x76\xe7\x7a\x37\xbb\x8f\xb3\x6e\xd3\xde\
+\xa9\xd4\x8f\xad\xdb\xea\xb4\xee\xe6\x67\xd5\xda\x22\x88\x42\x2c\
+\x08\xd1\xc8\x97\x08\xd1\x02\x22\x8a\x84\x40\x02\x24\x81\x40\x04\
+\x02\xf9\x00\x92\x90\x90\x90\x40\x42\xc2\x57\xc2\x37\x28\x88\xa5\
+\x67\x9e\xfd\xfe\xaf\x7f\x1c\x28\xda\x76\xe7\x7b\xf7\x5c\x72\xc7\
+\xcb\xff\xf9\xfd\x9e\xe7\xf9\xfd\xde\x37\x8f\x01\x78\xec\x51\x82\
+\xae\x6f\x10\x56\x13\xa2\x09\x1b\x09\x3f\x7e\xe8\xfd\x8f\x90\xf8\
+\x71\xc2\x6f\x97\x2d\x5f\x21\x36\x7b\x3a\xfb\xec\xd7\x01\x57\x68\
+\xe4\x3a\x2f\xe2\xab\xec\x6f\x84\x43\xfc\xf3\x91\x5f\xbf\x26\xec\
+\xd6\xd4\x9b\x5c\xd6\xb1\x70\x58\x17\xfa\x14\x4a\x47\x2f\x1c\xc1\
+\x31\x56\x59\xf4\x92\x25\x4b\xc4\x31\x31\xc7\xfd\x9a\xca\xca\x30\
+\x2f\xe2\x91\x5d\xbf\x20\xfc\xed\x64\x72\x9a\xca\x31\xf6\xe9\x6d\
+\xfd\x10\x50\x64\xef\x41\x89\xc9\x09\x95\xc5\x03\x5b\xef\x08\xf6\
+\xec\xd9\xd7\x9c\x9d\x7b\x31\x1c\xea\x1f\xc4\xe8\xe8\xd8\x34\xdd\
+\xbf\xfd\x51\x10\x0b\x3e\x6f\xdc\xb2\x55\xda\x3a\x78\x63\xca\x30\
+\x0c\x28\xdc\xc3\x28\x31\xb7\xa1\xc4\xe8\x40\x81\xce\x8c\x84\xcc\
+\x1c\x64\x65\xe7\x82\x11\x5f\x9f\xb8\x29\xc0\xed\xf6\xf4\xd1\xff\
+\xfd\xe1\x8b\x10\x3d\x4b\x78\x95\xfb\x3b\xc7\x67\x13\xf9\x6c\x1e\
+\x05\xd4\x5d\x93\x90\x99\xda\xa0\xa4\xae\xaf\xd6\x34\x21\x35\xbf\
+\x18\xa2\xa4\xd3\xb0\xb6\xd8\xef\x12\xcf\x20\x3f\x3f\xbf\x96\x9f\
+\xf9\xf9\xa4\x95\xe6\x17\xd4\x32\x5f\x99\xbf\x84\xd7\x66\xfb\x5c\
+\x1d\x9c\x86\xac\xb9\x13\xa5\x66\x17\x64\x75\x16\x64\x15\x6b\x10\
+\x93\x20\x81\xa6\x52\x3b\x87\x74\xfc\xc6\x24\xc6\xae\x4f\x60\x74\
+\xfc\x06\x56\xac\x58\x21\xa6\x33\x16\x3f\x8c\xf8\x7b\x84\xbf\x30\
+\x4f\xed\x24\xad\x71\x04\xd0\x05\xc6\xd1\x32\x30\x71\x5b\x67\x75\
+\xfa\xed\xa3\x73\x7d\x96\xd7\xdb\x90\x57\x51\x8f\x23\xf1\x62\x5c\
+\x2e\x90\xdd\x47\xcc\x48\x87\x47\xc7\xd1\x3f\x38\x8c\xee\xde\xbe\
+\x29\x3a\x7b\xc7\x3d\xd3\x30\xa3\xec\x9d\x31\x61\x9e\x5a\x02\xc1\
+\x61\x13\x11\x97\x75\x8c\x42\x69\xf3\x43\xd7\xd6\x83\x5a\x4f\x1f\
+\xf4\xbe\x41\x94\xbb\x42\x77\x7c\x36\xd8\x71\xb9\xda\x88\xb8\x34\
+\x29\xd2\x33\xb3\xe6\xf8\x3c\x87\x78\x60\x88\x88\x83\xe8\xf0\xf9\
+\x51\xab\xd7\x77\xb1\x02\x74\x06\x93\x2b\x74\x2b\x1c\xbe\x66\x10\
+\x94\x5d\x3d\x53\xc0\xea\x3a\x9b\xd3\x6f\x19\x0d\x87\x2b\x7b\xa6\
+\x50\x6c\x0b\x08\xc4\x0c\x55\xce\x2e\x54\xb5\x06\xa0\xb6\x76\x40\
+\x61\x6a\xc5\xd5\x6b\x8d\x48\xb9\x24\x47\x8c\x28\x1e\x5e\x3a\x78\
+\x76\xd7\x4c\xea\x91\xb1\xeb\xbc\xe3\x20\xdc\xed\x5e\x58\x6c\x2d\
+\x28\x92\x97\xa0\xb8\x4c\xe5\x1f\x9a\xb8\x35\xdd\x73\x13\x70\xd3\
+\x8e\xb0\x8e\x4c\x83\x2f\x2b\xe1\x8a\xb6\x8d\x03\x85\x96\x00\x2a\
+\x1c\x81\xbb\xc4\xda\x56\x3f\x34\x36\xef\x5d\x9f\x33\xe5\x6a\x7c\
+\x18\x17\x0f\x7d\x83\x61\x5e\xb9\x07\x87\x47\xd1\x1b\x0c\x09\x1d\
+\xb3\x10\x96\xab\x34\x48\x3a\x7d\x06\x5a\x5d\x0d\x7c\x93\x40\x68\
+\x0a\x30\xd2\xc4\x28\xbd\x63\x50\x9b\xad\xfe\xd9\x0a\x44\x37\x52\
+\xa2\xf3\xaa\x4c\xa8\x76\x75\x0b\x1d\x57\xb4\xf8\x50\xd6\xd4\x86\
+\x22\xbd\x55\xf0\xf9\xfd\x63\x22\x28\xcb\x55\xf3\x12\x0f\x8d\x8c\
+\x09\x36\xf8\xbb\x7a\xe0\x68\x75\x51\x81\x46\x24\x24\x26\x22\xaf\
+\xb0\x08\xde\xe1\x49\xf8\x26\x80\x06\x96\x1d\xef\x24\xa4\xa6\x4e\
+\xd4\xf9\x87\xd8\x3e\x38\xc2\xad\xff\x5f\x01\x17\xb5\x06\x54\x3a\
+\xfc\x50\x59\xdb\xef\xf8\x5c\x65\x40\x74\x52\x0a\x72\xf2\xf2\xe7\
+\xf8\x3c\x23\xf7\x8c\xcf\x5d\x3d\x7d\x70\xb9\xdb\x61\x6a\x6c\x42\
+\x6e\xde\x25\xc4\xc6\x9f\x84\xad\xab\x1f\xed\x37\x80\x4e\x22\x57\
+\x04\x3e\xc1\x65\xd7\x28\xd2\xf5\x74\xae\xb3\x2f\xbc\xf7\x70\x64\
+\x01\x71\xae\x9f\x9d\xfe\x68\xd3\xf0\x6d\x64\x6b\xf4\x28\x6d\x74\
+\xa1\xb0\xb6\x19\xd9\x65\x3a\x88\xc4\x92\xfb\x7c\x9e\xe9\x7a\x60\
+\x68\x44\x90\xbb\xdd\xdb\x89\x66\xab\x0d\xa5\xa5\xe5\x38\x76\x3c\
+\x16\xf5\x56\x07\xda\xc8\x63\x0b\x05\x59\x1d\x04\xa4\x8d\x3d\x48\
+\xac\xb0\xe3\x42\x73\x1f\x2e\x18\xbd\x50\xd4\x34\xb0\xf0\xed\xba\
+\x77\xfc\xa2\x1b\xfa\x3f\x41\x96\xb2\x1a\x57\xaa\x4d\xc8\x92\x6b\
+\xb0\xf7\xa8\x08\x0d\x06\xd3\xbc\x72\x07\xfb\x07\xe0\xf3\x77\xc1\
+\xee\x70\xa2\x8a\xfc\x15\x9f\x96\x20\xef\x4a\x01\x06\x6f\x01\x0e\
+\xca\x92\x36\x44\x79\xa2\xf6\x33\x0c\x7e\x9c\xae\x76\x21\xbd\xde\
+\x87\x0c\xea\xbe\xce\x17\x62\xa3\xf8\x01\xe1\x3b\xf7\x16\x70\xb4\
+\xb6\x77\x02\x29\x05\xa5\x38\x27\x53\x41\x94\x7e\x01\x6b\x23\xb6\
+\xcc\x2b\x77\xa0\xbb\x17\xce\x36\x0f\x0c\xa6\x46\xa4\x67\x9c\x43\
+\x6a\x96\x14\xee\x9e\x7e\xb8\xa8\xeb\x46\x0a\x98\xdc\x77\x13\xe7\
+\x8c\x01\xa4\xd4\xb6\x23\x4d\xef\xc5\x99\x6b\x6e\xa4\xd6\x7a\xa0\
+\x20\xe9\xdf\x7c\x6b\xb3\x94\xb8\xd6\xcc\xb7\x80\x8e\x69\xbd\x43\
+\x48\x38\x7f\x05\xf1\xe7\x72\xb1\x2b\xf2\x38\x0e\x7e\x10\x79\x77\
+\xac\x98\xdc\x3d\x7d\x21\x78\x3a\x7c\x68\xb2\x58\x51\x28\x93\x23\
+\x3e\x21\x11\x26\x9b\x03\x01\x4a\x37\x6d\x63\xa8\xfa\xc2\x38\xdb\
+\xd0\x29\x74\xcb\x88\xc5\xda\x56\x9c\xaa\x72\x22\xb9\xc6\x8d\xac\
+\x7a\x37\x2e\x2a\x54\xcd\xc4\xf3\xef\x07\x6d\xc0\xd8\xb2\xd6\x6e\
+\xc4\x24\x4b\xf1\xfe\x89\x53\x78\x6b\xdb\x4e\xa4\x9d\xcd\x10\xc6\
+\x6a\x46\xee\x16\x7b\x2b\xb4\x55\x3a\x81\xb8\x50\x51\x8a\xf1\x69\
+\x20\x40\x01\xab\x1d\x00\x8a\x3b\xa7\x04\x8f\x33\x4d\x5d\x77\xbb\
+\x8e\x55\x98\x05\xef\xa5\x46\x1f\x8d\xb4\x9f\xbd\x17\x1c\x26\x3c\
+\xf5\xa0\x02\x44\xb2\x46\x0f\x0e\x7d\x24\xc1\x8e\x83\x91\x78\xf5\
+\x37\xab\xd0\xd4\x6c\x15\xd2\xcd\xe4\x6e\x30\x9a\x21\x39\x93\x0c\
+\x69\xce\x45\x1a\xab\x09\xa1\xeb\xa6\x91\x3b\x72\x5f\x6a\x1d\xc6\
+\x49\x4d\x8b\x20\x3b\x23\x4d\x50\xdb\x70\xb4\xa8\x41\x40\x92\xc6\
+\x8a\xb2\xb6\xbe\xf0\xd2\x97\x97\x8b\xf9\xea\x5d\xf0\xa0\x02\xe2\
+\xf3\x6a\xad\xd8\x15\x25\xc2\x96\xed\xff\xc1\xca\x55\xaf\x0b\x5d\
+\xb3\x65\x22\x2b\xa2\xa7\x9b\xe8\x04\x6c\x1e\x1f\x7a\x69\x8b\xf9\
+\xf9\x58\xe5\x39\x86\xf0\xb1\x25\x28\xa4\x9c\x05\x2d\x4e\xd9\x28\
+\xc8\xce\xba\x4f\x28\x6f\xc6\xd9\x1a\x27\x34\xae\xee\xe9\x9d\xfb\
+\x0f\x5d\xa5\xf3\x77\xf2\xbd\xbf\xe8\x41\x45\x24\x4a\x35\xf5\xd8\
+\xb6\xff\x43\xac\xdb\xfc\x36\x76\xef\x7d\x0f\x8d\xcd\x16\x14\x2b\
+\x94\xf8\xc7\x3b\xdb\x68\x43\x7a\xe1\xa1\x99\xbe\xd6\x0f\xe4\xb6\
+\x0c\x40\xa2\x6b\x43\xb6\x35\x24\x78\x2e\x10\x52\xd7\xd1\xb2\x7a\
+\xc4\x96\x18\x71\x4e\xef\x81\xdc\xde\x1d\xce\xd7\xe8\xda\xe8\xdc\
+\x18\x9e\xfa\x6f\x71\xf9\x9f\xe0\x85\xdc\x57\xc4\xa9\xd4\xa2\x0a\
+\x6c\xdd\xb9\x17\xaf\xaf\x59\x27\x8c\x95\xa2\xb4\x0c\x3b\xde\x7d\
+\x17\xe2\x7c\x05\xe2\x8a\x1b\x84\x70\xb1\x6e\xd9\x27\xf3\xfa\x78\
+\x89\x49\x28\x84\x15\x11\x5f\x6e\x11\xe4\x3e\x4f\x61\x2b\x33\xdb\
+\x83\x2f\x2c\x5d\x96\xc2\x82\xcd\xe7\xfd\x25\xc2\x0f\xf9\x93\xf6\
+\xeb\x84\xaf\x10\x16\xde\x5b\x40\x72\x52\x5e\x31\xd6\xff\x7d\x07\
+\x9e\x7f\xe9\x15\x21\xe5\x47\x8e\x44\xe1\xbd\xe8\x58\x24\x96\x9b\
+\x11\x43\x7e\x32\xa2\xd4\xba\x0e\x41\x66\x16\x2e\xe6\x7b\x12\xfb\
+\x54\x59\x90\xac\xb5\xa1\xae\x23\x38\xb5\x73\xff\x41\x39\xcb\x13\
+\x27\x67\x9b\xee\x65\xc2\x2b\x84\x65\x84\x9f\x12\x9e\xe1\xef\x03\
+\xf7\x15\x90\x1e\x97\x75\x09\x7f\xde\xf4\x36\x5e\x5b\xf5\x7b\xa4\
+\xa4\xa6\x61\xfd\xa6\xcd\x38\xa3\x36\xe1\x40\x8e\x46\x08\x18\x5b\
+\x2a\xac\xf3\x8f\xa8\xdb\xa8\x42\x3d\xe2\x14\xa4\x40\xa5\x0d\xc5\
+\x2d\xfe\xdb\x59\x57\x4b\xac\x74\xc6\x09\x96\x25\xc2\x3b\x3c\x70\
+\xbf\xe3\xaf\x5f\xec\xfb\x72\xc2\x8f\xb8\x02\x5f\x9e\xcf\x82\xcc\
+\xa8\x94\xf3\x78\x63\xfd\x66\x44\x6c\xda\x82\x0d\x1b\x23\x90\x4c\
+\x96\x1c\xcc\x51\x0b\x84\xac\x80\xe4\x1a\x8f\xa0\x82\x88\xc2\x96\
+\x5e\xe7\x26\xb9\xdb\x50\xda\xd0\x14\x78\xfe\xc5\xa5\x69\x9c\xf8\
+\x00\x7b\x99\xe1\x4f\xb8\xb5\xfc\x3b\x2b\xe0\x57\x84\x9f\xf1\x1c\
+\x3c\xc1\x83\x78\xdf\x25\x8d\x94\x64\x62\x4d\xc4\x56\x6c\xd8\xb0\
+\x11\xc7\x92\x33\x10\x27\xd7\x63\x7f\xb6\x5a\xe8\xfa\x44\x59\x33\
+\x24\x94\x74\x49\x95\x03\x17\x9b\xfc\xd0\xba\xba\xa6\xd6\x6e\x88\
+\xf8\x98\xcb\x1d\x45\xd8\xc4\xc9\x18\xf1\x9b\x84\x3f\x11\x56\xf1\
+\xce\x7f\x42\xf8\x26\xe1\xc9\x87\x4d\x81\x34\x26\x3d\x5b\xc8\xc0\
+\xf6\x43\x51\x10\xc9\x74\xd8\x23\x2d\x15\x36\x19\xf3\xfd\xa4\xda\
+\x8a\x4c\xbd\x1b\x15\xed\xc1\xdb\x51\x09\x62\x35\x5b\xdd\xdc\xe7\
+\x08\xfe\xae\xf8\x47\x4e\xfa\x06\x27\x66\x2f\xb2\x3f\x27\x7c\x9f\
+\xf0\x35\xee\xfb\xa2\x87\xed\x81\x0c\x71\x9e\x1c\xff\x3a\x10\x89\
+\x33\x65\x7a\x6c\x93\x5c\xc6\xe1\x7c\x1d\x75\xed\x84\x44\x6b\x47\
+\xae\xd1\x13\x2e\x37\x5a\xfc\xbc\x5b\x36\x56\x7f\xe5\x04\x2f\x12\
+\x56\x72\x9f\x57\xf2\x8e\x9f\xe5\xc4\x4f\xf3\xae\xbf\x34\x5f\xe8\
+\xee\xbd\xf6\xe5\x16\x97\x4e\x66\x57\xd6\x63\xdf\x79\x25\xb6\xc4\
+\x67\xe3\x84\xd2\x84\x1c\xb3\x17\x1a\xab\x67\x78\x5d\xc4\x26\x29\
+\x5f\xa5\x3b\xf8\x48\x3d\xc5\x49\x9e\x23\xbc\x40\xf8\x25\x97\xfa\
+\xbb\x3c\x68\xb3\x89\x17\x7c\x9e\xd7\x70\x16\x14\x89\x54\xef\xc4\
+\x3f\x4f\x5f\xc2\x79\x43\x07\xb4\xee\xbe\xe9\x63\x49\x12\x15\xef\
+\x78\x37\xbf\x67\x01\x5f\x24\x4f\xf2\x1f\x27\xdf\xe6\x78\x66\xd6\
+\xa2\xf9\x42\xc4\x33\x17\x3b\xf0\x60\x86\xac\xdc\xad\x6c\xed\x0e\
+\x17\x55\xeb\x5d\xfc\x95\xe9\x10\x0f\xd7\xec\x87\xc8\x42\x4e\xb2\
+\x98\x13\x2e\xe6\xa3\xb5\xe8\xff\x21\x9e\x7d\x3d\xce\x65\x8e\xe2\
+\x9f\x5b\x09\x3f\x78\xc0\xbd\x0b\x38\xd9\xc2\xcf\x22\xfd\xac\x5f\
+\xd5\xff\x05\x42\x5a\xb5\xfc\x4a\x39\x80\xc8\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x7e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x05\x10\x49\x44\x41\x54\x58\xc3\xad\
+\x97\xcb\x8f\x14\x55\x14\x87\xbf\x73\x6e\x55\xcf\x30\x0c\x23\x4f\
+\x71\x00\x01\x49\x7c\x60\x06\x08\x10\xdd\xb8\x91\x85\xee\x8c\xf1\
+\x91\x18\xd8\x91\xf8\x88\x8f\x85\x09\xa8\xa0\x81\xa6\x65\xa3\x0b\
+\x13\x17\x44\x63\xc0\x85\x31\x19\xdd\xf8\x27\x98\x31\x2e\x7c\x22\
+\x46\xe3\x8b\x18\x41\x40\x07\x89\xc0\x00\x19\xa0\xbb\xaa\xee\x3d\
+\x2e\xaa\x06\x6a\x7a\xaa\xbb\x81\x58\xc9\xc9\xad\xaa\xbe\xdd\xfd\
+\xab\xdf\xf9\xea\x9c\x7b\xc5\xcc\xe8\x75\x6c\xda\xd2\x10\x40\x8a\
+\x4b\xe9\x32\x75\xea\xc7\x6c\x6c\xb4\xde\xfb\x87\x01\x99\x12\xb0\
+\x69\x73\x63\x07\xf0\x78\xa7\x79\x5d\xee\x5b\x0f\x31\x55\xdf\x9a\
+\x18\x1b\xad\x3f\xd0\x2e\xe0\xe0\xde\x37\x77\x6f\xfc\xf4\xe7\xc0\
+\x86\xe5\x81\xd9\xb3\x62\xbe\x3b\x0e\x23\x8b\x03\xaa\x70\xf0\xb8\
+\xb2\x6e\x49\x46\x1c\x39\xbe\x3e\x62\xdc\xb3\x0a\x62\xa7\x7c\x7e\
+\x38\xe1\xde\x95\x4a\x1c\x39\xbe\xff\x4b\xb8\xef\x76\x48\x33\xf8\
+\xea\x8f\xc0\xfa\x65\x50\xab\x29\x87\x4e\xc0\xdd\x8b\x3d\x8a\x30\
+\x77\x48\x79\xf5\xa5\xc6\xf8\xd8\x68\x7d\xe9\x0c\x01\x8d\x37\x76\
+\x6d\x6c\x26\x8a\xf7\x81\xc8\x29\xaa\xb9\xe0\x24\x0d\x84\x10\x88\
+\x23\x47\x1c\x0b\x21\x00\x04\x7c\x10\xd2\xd4\x53\x8b\x23\x00\x5a\
+\x49\xca\xe0\x40\xcc\xe5\xa6\x67\x60\x96\xe3\xc2\x64\xca\xd0\x60\
+\x4c\x2b\x35\xfa\x6b\x42\x2b\x81\xd9\x03\xf0\x5a\x07\x01\xe5\x14\
+\x48\x9b\xcd\xed\x0c\x48\x07\xcb\xad\xed\xdc\x2a\x53\x52\x95\x82\
+\x36\xd8\xb4\x88\xa8\x14\x31\x50\x2b\xc6\xa8\xf8\x7c\x8a\x81\x00\
+\x64\x40\x0a\x24\xc5\x98\x95\x22\x14\x61\x63\xa3\x75\xdb\xb4\xa5\
+\x51\x1f\x1b\xad\x37\xa6\x3b\x70\xf5\xcf\x73\x01\xc6\x0e\xe0\x91\
+\x69\xf7\xaa\xdd\xa8\x7a\xea\x50\xe1\xc8\xd5\xb1\x12\xc2\xe9\x4f\
+\xef\x30\xbe\xdc\xba\x63\xf7\xfa\x95\x43\x42\x30\x38\x74\xcc\x18\
+\x19\xf6\x38\xa7\xfc\x7a\x4a\x19\x19\xce\x67\x7f\x7b\x24\x63\xfd\
+\x72\x41\x44\xf9\xf5\x94\x70\xc7\xa2\x8c\x5a\x14\xf1\xc3\xdf\xb0\
+\x66\x69\x40\x51\x0e\x1d\x37\x46\x96\x78\x9c\x2a\x43\x83\xca\xcb\
+\xdb\xaa\x18\xb8\x2a\xc0\x15\x02\xbe\x78\xeb\xed\xfa\xfa\x0b\x93\
+\x9e\x5a\xec\xb8\xdc\xf2\x60\x46\x5f\x2d\xc2\x80\x24\xf5\x44\x4e\
+\xc9\xb2\x80\x73\x4a\x1c\x43\xb3\x15\xe8\x8b\x1d\x66\x86\x0f\xe0\
+\x9c\xe0\xbd\xe1\x9c\xd0\x6c\x65\xcc\x19\x8c\x70\xca\x4c\x01\x6d\
+\xf6\xbb\x22\x05\xaf\x74\x48\x81\x76\x81\x30\x54\xa4\xc0\x66\xa4\
+\xa3\x3d\x05\x15\x02\x5c\x09\xba\xbe\x22\xfa\x8b\xb1\x56\xc4\x14\
+\xa8\x53\x80\x25\x45\xb4\x80\x66\x31\xb6\x4a\x50\xfa\x22\x0c\xd8\
+\x3d\x36\x5a\xdf\x33\x53\x80\xb1\x13\x78\xb4\x0d\x36\xed\x00\xa1\
+\x54\xbc\x82\xd6\xc3\x89\x1e\x0e\x18\xdf\xbe\xb8\xa7\xbe\xe1\x96\
+\x81\x3c\xaf\x3f\x1c\x33\x46\x96\x0a\xa9\xf7\xfc\x76\x52\x58\xb7\
+\x42\x09\x1e\x7e\x19\x87\x35\xcb\xa1\xd9\xf4\x1c\x3e\xa5\x6c\xb8\
+\x4d\x68\xb6\x02\x3f\xfd\x0d\x6b\x6f\x15\xa2\x48\xf8\xf1\x18\xac\
+\x1e\x0e\xc4\x35\xe5\x97\x71\x58\x35\x3f\x50\xab\x29\x2a\x81\xed\
+\xdb\xf7\x56\x32\xa0\x18\xdf\xec\xdb\x57\xdf\x30\x79\xd1\xb0\x60\
+\xa8\x53\x54\x0d\x9f\x41\x92\x65\xa8\x2a\x91\x53\x42\x30\xe2\x5a\
+\x5e\x26\x2f\x5d\x4a\x98\x3b\x54\xe3\x72\xd3\xc0\xc0\x45\x05\x78\
+\x91\x80\x41\x9a\xe6\x22\xb2\x24\x00\x30\x77\x48\x79\xf6\x85\x12\
+\x84\xf7\x6f\xde\x33\x65\xe5\xd4\xbb\xff\xd8\x95\xeb\xe9\x69\xb8\
+\xde\x14\x84\xb6\xeb\x72\x1d\x38\x0b\x3c\x38\x36\x5a\xb7\xe9\x0e\
+\x4c\xaf\x7e\x53\xb0\xf5\xb7\x41\xd8\x57\x00\xea\x4a\x85\xc8\x17\
+\xa0\xb5\xda\x20\x6c\x96\xe0\x2c\x57\xc5\x5d\x55\x10\x76\x13\xd0\
+\x8f\xf1\x2c\xf0\x40\xc9\x91\xf6\x23\x5c\x03\x84\x57\x1c\xa8\x82\
+\xb0\x97\x80\x4f\xf6\xbf\x53\x5f\x3d\x79\x39\xf0\xe7\x69\xe1\xce\
+\x25\x42\x92\x04\x8e\x9e\x16\x56\x2c\x30\x54\x84\xbf\xce\x0b\x2b\
+\xe6\x43\xe6\x03\xbf\x9f\x32\xee\x1a\x76\xb4\x5a\x29\xc7\x26\x1c\
+\x2b\xe6\x7b\xe2\x28\x62\x56\xbf\xf0\xcc\x0b\x8d\x0e\x10\xf6\x10\
+\xf0\xfe\xbb\xf5\xd5\x69\x06\xa9\x07\x15\x43\x04\xd2\xd4\x88\xa2\
+\xdc\x90\x2c\x0b\xf8\x10\x18\x9c\x1d\x91\xa6\x06\x48\x3e\x27\x0b\
+\x38\x55\x0c\xe8\xab\xc1\xd3\xcf\xdf\x98\x80\x72\x0a\x6e\xb4\x0e\
+\x5c\x73\x0a\x5c\x07\x08\xfb\x4b\x2d\xb9\x0a\xc2\xa4\x00\xaf\x0a\
+\x42\x7f\x2d\x10\xca\x34\x07\x8c\x6d\xc0\x43\x5d\xaa\x21\x5d\x5a\
+\x71\xd7\xd7\xb0\x53\x2f\x98\xee\x80\xf1\xd9\x87\xfb\xeb\x6b\x5b\
+\x2d\x38\x31\x01\xb7\x2d\x82\x56\x62\xfc\x73\x41\x58\x3a\x17\xbc\
+\x0f\x9c\x98\x30\x96\x2f\x50\xcc\x8c\xf1\x73\xc2\xf0\x50\x20\x8a\
+\x1c\xe3\xe7\xe1\xd6\xf9\x60\x06\x47\xff\x0d\x2c\x9b\x27\x38\x15\
+\x9c\x33\xb6\x3e\xf7\x7a\xc7\x6e\xa8\xa5\x66\x54\xc3\xf8\xec\x83\
+\xf7\x76\xaf\x4b\x12\x43\x44\x50\x15\xd2\x2c\x10\x3b\xbd\x02\x97\
+\xaa\x60\x06\x4e\xc1\x07\x90\xc2\x17\xa7\x82\x0f\xb9\x01\x91\x53\
+\x92\x34\x9f\x3b\xd0\x2f\x6c\x79\xaa\x77\x3b\xce\x97\x60\x79\x0a\
+\x1e\xfe\x1f\x52\xd0\xbd\x19\x15\x0b\x12\xad\x68\xc7\x71\xa9\x05\
+\xdf\x68\x3b\xce\x2a\xda\xf1\xae\x99\x6b\xc2\xcd\x8d\x9d\x15\xab\
+\x62\xa9\xe8\x09\xd7\xea\x40\xf9\x9c\xde\x0e\x6c\x6e\x1c\xfc\xf8\
+\x40\x7d\xe3\x89\x33\xc6\x92\x79\x79\xae\xcf\x5c\x54\x16\xce\x36\
+\x44\xe1\xe4\x84\xb1\x6c\x81\x92\x66\x81\xb3\x97\x94\x85\x83\x60\
+\xc1\x38\x7d\x51\x58\x34\xc7\x10\x84\x7f\xce\x1b\x37\xcf\x01\x51\
+\x38\x3d\x29\x2c\x1a\xcc\xd9\x39\x79\xce\x58\x7c\x93\xe0\x14\x22\
+\x07\x4f\x3c\xd9\x61\x63\xf2\xd1\x81\xfa\x46\xef\x0d\x33\xc9\x1f\
+\x4f\x72\x8a\x55\x73\xfd\x3e\x04\x40\x4a\x80\x81\x6a\x3e\x57\x1d\
+\x84\x90\x57\xbf\x10\x0c\x15\x48\xb3\x5c\x80\x08\xf9\x08\xc4\x71\
+\x67\x01\x3b\x3a\xa4\xa0\x53\x74\xda\x98\x74\x5e\x0b\x5e\xc7\xc6\
+\xa4\xaa\x32\xc6\xa5\x22\xe5\x2a\x36\x26\xbe\xd4\x72\xd3\xb6\xca\
+\x77\x85\x8b\xf6\x5d\xb3\xb4\x6f\xcf\x3b\x88\x70\x15\x21\x25\x01\
+\x56\xa2\xbc\x1c\x5d\xff\x1c\xe0\x3f\xb4\x3e\x33\xee\x59\x4a\xce\
+\x0f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x06\xfb\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x06\x8d\x49\x44\x41\x54\x58\xc3\xed\
+\x57\x79\x54\x8d\x69\x1c\xbe\x46\xe6\x18\x63\x16\x63\x3b\x0d\x33\
+\xd9\xc2\xd1\x62\x89\x44\x1b\x52\x88\x5b\x42\x8b\xf6\xb2\x84\xb4\
+\x58\xba\x2a\x57\x8b\xa5\xba\x15\xe9\xa6\x28\x7b\x22\xd7\x70\x42\
+\xf6\x90\xce\xb1\x4b\x24\x0d\x47\x0d\x31\xb2\x9e\x28\xe4\x4a\xcb\
+\x33\xcf\xc7\xe5\xcc\x41\xca\x31\x73\x66\xfe\xf0\x9d\xf3\x9c\x7b\
+\xce\xfd\xbe\xf7\xf7\x3e\xdf\xf3\x3c\xbf\xdf\x7b\xaf\x08\x80\xe8\
+\xbf\x84\xe8\x0b\x81\xff\x15\x01\x53\x87\x10\x6b\x13\xdb\xe0\x08\
+\x63\xdb\xe0\x54\xe3\x09\x81\x69\x86\xe3\x24\xc9\x83\xac\xfc\x03\
+\xf4\x46\x4c\x19\x2a\x12\x89\xbe\x21\xbe\xfa\xe4\x0d\x1a\x73\x99\
+\xda\x4b\x6d\x4d\x1d\x16\xfc\xe6\x13\x9a\x79\x3b\x58\x76\xa9\x42\
+\x2a\x2b\x51\x4a\x63\x4a\x94\x61\x71\x57\x2b\x25\x91\xd9\x8f\xdd\
+\x66\xaf\x2b\x35\x1a\x3f\x2f\x8f\x64\xe4\xba\x43\x9c\x8c\xb9\xa4\
+\x05\xd1\x44\xf4\x4f\x5c\xa6\xf6\x0b\x34\x2c\xdd\xa3\x0a\x16\xc5\
+\xdf\x57\xba\xcd\x06\x46\xb9\x01\x66\x2e\x80\x85\x3b\x20\x9e\x06\
+\x38\xcd\x05\x7c\x16\x01\x8b\x12\x95\x75\xe1\xf2\xbc\x4a\x7b\xef\
+\x84\xdb\x24\xb2\xb3\xaf\x99\x87\x33\x97\x7f\x47\x34\xfd\x4c\x02\
+\x52\x49\x90\x2c\xb7\xcc\x6e\x06\xa0\x6b\x09\x68\x5a\x10\xa3\x81\
+\x5e\x36\x80\x8e\x1d\xa0\xe7\x0c\x18\x79\x92\x98\x37\xe0\x12\x04\
+\x04\xc5\x01\x51\x2b\xaf\x57\xb9\xcd\x5a\x73\xcf\x40\xec\x9b\xd9\
+\x67\x98\x9b\xeb\x67\x11\xa1\xf4\xc7\x83\xa2\x5e\xd4\x0e\xb6\x05\
+\x34\xcc\x81\xce\x63\x80\x9e\x13\x81\xde\x1e\xc0\x40\x92\x1a\x38\
+\x13\xd0\xe7\xe6\x06\x54\xc3\x90\x30\xf7\x01\x1c\x83\x49\x64\x39\
+\x10\xbd\xfa\x7a\x95\xdd\x8c\xf8\xbb\x7a\x16\x53\x52\xba\xf6\xb5\
+\x18\xc8\x72\xcd\x3f\xd9\x9a\x51\x6e\x91\x85\x7e\x94\x78\x80\x3d\
+\xd0\xcd\x1a\xd0\x76\xe5\x1b\xfb\x03\x56\x0b\xb9\x11\xdf\xd6\x3d\
+\x01\x70\xe6\xa7\x4d\x14\x6d\x91\x02\x26\x73\x08\x3f\x2a\x32\x8b\
+\xf7\x42\x69\x4d\x32\x10\x1a\x77\xa2\xd2\xdc\x39\xbc\x84\x44\x64\
+\x2c\xd9\x8e\x50\x6b\x34\x01\x4f\xc9\xc6\x1b\xfe\x91\xc0\x20\x7a\
+\xaf\x45\xef\x0d\x59\xd8\x2e\x06\x98\xb7\x05\x48\xcc\x02\x36\x1c\
+\x07\x56\xe7\x00\xb2\x3d\xc0\x9c\x34\x92\x21\x21\xcb\xc5\xc0\xb0\
+\x79\xcc\x0a\xc9\x8c\x0d\x04\x66\x92\x5c\x7c\x9a\xb2\x6e\x6a\xd0\
+\xa6\xb2\x3e\x66\xee\xa9\x9d\x75\x87\x19\x36\x5a\x0d\x13\x3b\xe9\
+\x65\xa9\x1c\x18\x4e\x69\x0d\x28\xb5\xd5\x12\x20\x30\x1d\xd8\x96\
+\x0b\x2c\x49\x39\x50\xe5\x31\x37\xa1\x32\x44\x9e\xa1\x4c\x3f\x52\
+\x5c\xbd\xab\x00\x90\x1f\x05\xe6\x6e\x65\x38\x13\x49\x84\xcf\x0e\
+\x67\x2e\x46\x91\x8c\x73\x38\xb0\x38\x05\x08\x8f\xa7\x1a\x4e\x61\
+\x37\x75\x4d\x9d\x02\x58\xbe\x75\x83\x6a\xb0\xef\xcf\x2c\xdd\xf4\
+\xa2\xd6\x36\x84\xfe\xd2\x5b\xf7\x24\x20\xe9\x08\xb0\x72\xfb\xd9\
+\x97\xdd\x07\x8c\xbe\xd6\xfa\x67\xcd\xcc\x4e\xda\xa6\x07\x7a\x0f\
+\x75\x29\x14\x7b\x2e\x7c\xac\x38\x56\x5c\xbd\x23\x9f\xfe\x1f\x02\
+\xbc\xa9\x88\x5d\x3c\x09\x50\x91\x11\xb4\x47\xa8\x31\x87\xd9\x88\
+\xdf\x58\x5a\x2d\xf6\x88\xbc\xcb\x35\x89\xdc\xa2\xc3\xdf\x49\x70\
+\xd6\x68\xf3\xa5\x17\xf7\x33\x9f\x64\xf0\xaa\x9d\x07\x59\xcf\x5e\
+\x2e\x5b\x7d\xe1\x99\xff\x0a\x16\x8b\x06\x7c\x53\x01\xc5\x39\x16\
+\x0f\x5d\xf3\xbc\x9d\x86\xce\x41\x3e\xe4\x4b\x58\x12\x56\x1a\x5a\
+\xc6\x72\xa6\xfe\xa2\xcf\xc2\xf5\x4f\x77\xe7\x3d\xaa\x5d\x77\x1a\
+\x90\x66\x02\x1e\xeb\x98\x91\xa5\xc0\x48\xe6\xc6\x86\x24\xa6\xb3\
+\x8e\x7c\xb3\xb2\xce\xc5\x6f\x55\x19\x9f\xdf\xc4\xb5\x1a\x44\xb3\
+\x57\x9b\x73\xd0\x25\xa5\x16\x3c\xd6\x1b\x31\x75\x03\xbf\xd3\x12\
+\x09\x83\xc5\x7a\x72\xf4\xad\x15\xbb\xb8\x29\x25\x0c\xdc\x06\xec\
+\xb8\xc0\xa2\x01\x09\x95\x6d\x3a\xf6\x48\x17\x72\x4a\xb4\x27\x7e\
+\x22\xba\x10\x43\xbb\x0f\x18\xb3\x61\xb8\xe3\xfc\x07\x69\x87\x0a\
+\x5e\x66\x14\x02\xb1\xd9\x9c\x15\x0a\x60\xe2\x4a\x60\x34\xf3\x60\
+\x4d\x3b\x3c\xf9\x19\xbd\x91\x35\x17\x28\x2a\xf4\x2d\xbd\x8f\xf5\
+\x1e\xe6\xea\xc5\xc9\x1a\x13\xbf\xb6\xa0\x3c\xe7\x24\x30\x78\xec\
+\xec\x3b\xac\x65\x2f\xa8\xd2\xa2\xff\x48\xaf\xa4\x88\x94\x93\xcf\
+\xa2\x77\xd2\x43\x12\x51\xd0\xff\xd0\x84\x0c\x65\x27\xed\x21\xfb\
+\x84\x0d\x89\x96\x2a\x05\x9b\xaa\x7a\xbe\x1b\xd5\x90\xe8\x0e\x71\
+\x3e\x11\x18\xbb\xf5\xe9\x81\x42\x65\xdd\xaa\x33\x24\xcf\xa0\xba\
+\xaf\xa7\x0a\xec\x1a\x31\x6d\x71\x89\x60\x98\x99\x95\x85\x89\x7f\
+\xbe\x34\xb0\xf2\xbf\xe2\x1d\x9a\xff\x24\x96\x2f\xb9\x9f\x84\x0d\
+\xc4\x7e\x8f\x58\x67\x8e\x50\xb4\x89\xa6\xde\xa8\x01\x16\x2e\xe1\
+\x25\x9b\x0e\x3f\xaa\x4d\x60\xf2\xd3\x58\x2c\x75\x7f\x41\xb5\xb6\
+\xb1\xfd\x45\xde\x17\x13\xad\xde\x89\x8e\x9a\x4a\x95\xc1\xbd\x06\
+\x8f\xdf\xe2\xe8\xbf\xac\x6c\x7f\xc1\xa3\xda\x54\x2a\x17\xc6\x6c\
+\x4c\xdd\x4c\x3b\x69\xa9\x15\xbb\x6b\x3c\x89\x4c\x24\x26\x48\x9e\
+\xd6\x8d\xf5\x05\x66\x84\x51\xe1\xfd\x9c\x2f\x62\xdf\x72\xae\x97\
+\xbe\x29\xd8\x9c\xed\x13\xe2\xe0\x13\xf7\x60\xfb\x29\x65\xdd\x56\
+\x66\xe0\xc4\x0d\xbe\x05\x43\xd7\xee\x57\xed\x50\x95\x87\xef\xb6\
+\xd4\x57\xc4\xb7\x82\x1a\x24\x21\x37\x77\x92\xde\xcf\x3c\x5f\x5a\
+\xa3\xa0\x25\x11\xec\x94\x69\xb4\xd2\x69\xf5\x6b\x35\x46\xd2\x12\
+\x63\xb6\xb7\xd1\x74\x5a\xcb\xd9\xb1\xfd\xe0\xfb\x04\x84\xe2\x6d\
+\x29\xe9\xca\x00\xd9\xb6\xf2\x23\x57\x80\x9c\x22\x60\xdd\xae\x73\
+\x55\x5a\x86\xb6\x39\xbc\x37\x48\x75\x00\x7d\xe8\x12\xd4\xe8\xd8\
+\x73\xa0\x75\x84\x85\x93\xf4\x5e\x32\xd7\xa4\x93\xc4\x12\xce\x0e\
+\x5f\x5a\xea\xca\x1c\xd8\xb0\x53\xcc\xc2\x5e\xcf\x0e\x2f\x06\x34\
+\xe3\xe8\xfb\x04\xde\x16\x12\x52\x2b\x91\x29\x2a\xf2\x6e\x02\x85\
+\x77\x01\x07\x9f\xd8\xf2\x6e\xfd\x46\xca\x55\x2a\xa8\x7d\x84\x84\
+\x7a\x07\x4d\x7d\x2f\xe6\x29\x5f\x71\xa6\xb4\x3a\xf9\x22\x10\x42\
+\xaf\x67\x32\x53\xee\x6c\xd7\xf1\xb4\xc4\x9a\x9b\xfb\x73\x72\x66\
+\x9e\xf8\x30\x81\x37\x85\x34\xd8\xbf\x5b\x24\xd1\x8a\x8a\xc2\x3b\
+\x40\x16\x65\xed\x67\x31\xf9\xf7\xef\xdb\x74\x1c\xc7\x7b\x3f\x7e\
+\x64\xba\x09\x6b\xdb\x6a\x19\xd9\xcd\x27\x89\x0b\xf1\xd9\xa5\xd5\
+\x51\x6c\xd3\xf9\x7c\x5b\x3f\x86\x73\x32\x87\x9b\xdb\x5a\xb6\x2d\
+\xbb\xe5\xc0\xf9\xfa\x09\x08\x57\x33\xa2\x93\x40\xc2\xc1\x67\x59\
+\xd9\xb9\x3f\x94\x75\x31\xeb\x0f\x3d\xef\xa1\x6f\xa5\x78\xd5\xb7\
+\x22\xd1\xd7\xf5\x0d\x35\xc3\x71\x01\x9d\x0d\x6d\xe6\x2e\x4d\xde\
+\x97\xff\x44\x51\x0c\xac\xe2\xe4\x8c\x63\x47\x45\x72\x9c\x2f\x60\
+\x38\x83\x39\x33\x12\x38\xe4\x8e\x5f\xf9\x38\x81\xb7\x24\x74\x4c\
+\x26\xae\xb1\x9a\xb4\xf8\xe1\xa1\xb3\xa5\x35\x81\x4b\x15\x15\xec\
+\x96\x28\xc1\xa6\xfa\x8e\x5e\xe1\x68\xdf\xb0\x37\xb7\xec\x52\x19\
+\x90\x5d\x0a\xec\xa3\x8d\xbb\xaf\xd3\x73\xe6\x49\x08\xa7\x82\x13\
+\xf4\xf0\x55\xe0\xd2\xad\x86\x09\xbc\x21\xa1\xd1\x43\x5f\x2c\xe3\
+\x4f\xb2\xcb\xd1\x6b\xb3\x2a\x1d\xfd\xe2\x1e\xaa\x77\xe9\x3b\x99\
+\xdf\xb7\x79\xd7\x0a\x1e\xeb\x3d\x3c\x83\x53\xae\x65\xe5\x95\x3c\
+\x3f\x98\x7b\xbd\x6a\xef\xd9\xe2\xea\x3d\x67\x8a\x6a\xf6\x9c\x2e\
+\xaa\xc9\x3c\x55\x54\xb3\x9b\xd8\x75\x9c\x9f\x44\x46\x4e\x51\x8d\
+\xb6\xb1\x43\x09\x97\x49\x1a\x3a\xab\x04\x5f\x3b\xfc\xd0\xe6\x97\
+\xb1\x4c\x79\x7a\xab\xf6\x9d\x85\x30\x3a\x09\xea\x7c\x40\x85\xa6\
+\xbd\x87\xba\xba\x71\xc4\xe6\x08\xe7\x86\x8e\xa9\x63\x91\x8e\x89\
+\x63\x71\x7d\x50\xef\xda\x6f\x0f\xd7\xb8\x37\xe6\xc4\x56\x53\x85\
+\x4f\xf0\x7f\x08\xd1\xb7\x9e\x30\x36\x51\x9d\x7e\x46\x84\x0b\xe1\
+\xd5\x00\x1c\x89\xfe\x8d\xfd\xd9\xd0\x44\x15\xbe\x96\x0d\x9c\xf3\
+\x6f\x46\xb5\xba\x2a\x2b\x1f\x83\xba\xea\xd9\x7f\xf7\xfa\xf2\xcf\
+\xe8\x0b\x81\x86\xf0\x17\xce\x95\x4e\x3d\xa5\x4e\x62\x58\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\x00\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x02\x92\x49\x44\x41\x54\x48\xc7\xb5\
+\x96\x4d\x4b\x54\x51\x1c\xc6\x7f\xe7\xde\x99\x3b\xbe\x0c\x86\x12\
+\x96\xa6\x34\x44\x8a\x94\x42\x90\xd9\x62\x10\xfb\x0e\x6d\x6c\x97\
+\x50\xab\x56\x2d\xdc\xf6\x2d\xa2\x45\x50\x14\xb8\xa8\x90\x12\x37\
+\x51\x1b\xb5\x30\x2b\x2a\xad\xc1\x34\x4c\x57\xa1\xf9\x92\xa2\xce\
+\x78\xe7\xde\x7b\xee\x69\x31\x67\x5e\x1a\xbd\xea\x38\x74\xe0\x70\
+\x0f\x33\xdc\xe7\x77\xfe\xcf\xff\x65\x46\x28\xa5\xf8\x9f\x2b\x14\
+\xf4\xc5\xdd\x3e\x61\x6d\x6e\x12\x4f\xed\xe0\xd4\xd4\xd1\xe9\xd8\
+\x18\x4a\x21\xab\x22\xc4\x22\x95\x46\x53\xb5\x25\xe4\xab\x8f\xf2\
+\xde\xf0\x67\xc6\x7c\x20\xa5\xef\x59\x7c\xe1\x40\x80\x30\xe9\x6f\
+\xe9\xec\xbe\xb1\xb3\xb5\xb6\xde\xd4\xd6\x73\xca\xf3\x95\x81\x74\
+\xbd\xda\x93\xad\xb5\xc7\xea\xcf\x44\x2c\x53\xb2\xb8\xd6\xdb\x3c\
+\xf8\x89\xab\x02\x7e\x07\x86\xa0\x94\xda\x73\x3f\xb9\x73\x5e\x05\
+\xad\xb4\x7e\x2e\xcd\xbe\x54\xbd\xed\x3c\x07\xaa\x82\xf4\x02\x01\
+\x8f\xfa\x63\xa9\x20\x40\x62\x3a\xa1\x1c\x99\x39\x7f\x7f\xfb\x50\
+\xdd\xea\xe1\x41\x10\xc0\x08\x8a\xcc\xf7\x3d\x2f\x73\xf2\x50\xa4\
+\x80\x24\x60\x03\x2e\xd2\xdd\xc6\xd9\x49\x01\xd0\x16\xbf\x4e\xbc\
+\xfb\x5c\x1f\x10\x87\xdd\x7a\xa1\x83\xeb\x20\x8d\xc0\x03\x14\xe0\
+\x01\x16\xd1\x68\x05\x43\x43\x4f\x59\x59\xd9\xe6\xc2\xe5\x2b\xac\
+\x27\x7d\x80\x76\x60\x8e\xa2\x7c\x18\x07\x03\x5c\x14\x2e\xe4\xb6\
+\x4d\xf3\xe9\x13\xb4\x9c\x6d\xa0\xb5\xb5\x8e\x8e\x8e\x18\x21\xec\
+\xec\x65\xcd\x12\x22\x50\x05\x11\x48\x40\xa1\x10\x08\x14\x61\x33\
+\xc4\xa5\xae\x8b\x80\x05\x44\x39\x16\xb5\xd0\x74\x79\x24\x8b\x14\
+\x3e\xe2\x1f\xa8\x0b\x08\x20\x0d\xd4\x90\xcd\x56\x49\x8d\x96\x5f\
+\x36\x02\x85\xd2\x92\x99\x28\xd0\xd0\xac\xc3\xf2\x28\x80\xbc\x45\
+\x00\x42\x23\x44\xb6\x11\xcb\x1d\x15\xf9\xfc\xdb\x45\xd2\x59\xbc\
+\x2a\xf8\x44\x94\x63\x51\x5a\x5b\x91\x95\xcc\x98\x94\x91\xf4\xcb\
+\x01\x88\x82\x24\x0b\x04\x46\xce\x26\x95\xcb\x84\x2c\xc7\x22\x00\
+\x47\x77\xaf\x99\xcb\x42\x7e\x49\x9d\x27\xb7\x20\x5f\x25\x27\xd9\
+\xd5\x10\xb3\x28\x2a\x89\xc2\xd0\x1d\xee\x80\x71\x24\x8b\x8c\x1c\
+\x40\x10\xce\x95\xa5\x42\xea\x58\x0c\x20\x0c\x54\x53\x11\xae\xc8\
+\xbe\x60\x94\x18\x81\xa3\xab\x48\x22\xf0\x01\x1f\x41\x15\x10\x03\
+\x8e\xeb\x01\x38\xc7\xea\xea\x46\xe9\x00\x21\x30\xd0\x16\x08\x4c\
+\x2d\xd8\x06\x78\x6c\x2d\x8c\x31\xfb\x61\x82\xd1\x91\xf7\xfe\xb3\
+\xc1\xaf\xf3\x3f\x37\x99\xd1\x83\x2e\x79\x68\x40\xc4\xaa\x8c\x40\
+\xa3\x1e\x92\x0d\xa4\x96\x12\x8c\xbf\xb8\xcd\x9b\xd1\x71\x7f\xe8\
+\xf5\xf2\xb7\xa9\x35\x26\x81\x19\xe0\x0b\xf0\x03\x58\xd4\x15\x71\
+\x38\x40\x63\x9d\x50\xb0\xc4\xc8\xc0\x63\x86\x07\xee\x3b\xe3\x93\
+\x72\x61\x62\x91\x77\x5a\x30\x01\x4c\x03\xcb\x05\xcd\xb0\xb7\x13\
+\x41\xff\x2a\xba\x9a\xc5\xb5\xe4\x06\x37\xe7\xb7\xf9\x63\xc3\x28\
+\x30\x05\xcc\x03\xbf\xf6\xab\xcb\x5d\x7a\x41\x3f\x99\x3d\x2d\x00\
+\x44\x81\xfa\xbd\xe6\xfc\x7e\x80\xc2\xfd\x17\xfb\xc6\x93\x82\x32\
+\x2c\x7f\xcc\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\xb8\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\x4a\x49\x44\x41\x54\x48\xc7\xc5\
+\x56\x61\x4c\x5b\x65\x14\xfd\x6c\x32\xd3\x69\x20\x0e\x65\x24\x4b\
+\x37\x56\x5a\x8a\xb3\xd2\x4e\xa5\x42\x71\x43\xc0\xb5\x94\x10\xe6\
+\x02\x42\x13\xaa\x63\xa3\x63\x63\xd9\x18\x59\xb7\xa6\x01\xa3\x08\
+\x88\x61\x0b\x29\xb2\xcd\x29\x66\xba\x81\x84\xda\x8a\x89\xd4\x00\
+\x29\x43\x33\x1c\x20\xa5\x50\xd7\x6a\x57\x4a\x23\xc4\x6c\x51\x59\
+\x94\x31\xbb\xf8\xc3\x6e\xbb\xde\xbb\xbc\x45\xd4\x15\x12\x33\xb5\
+\xc9\xc9\x4b\x5f\xdf\xbd\xe7\xfb\xce\x3d\xe7\x7d\x65\x00\xc0\xfe\
+\x4d\xb0\xff\x8d\x00\x3f\x31\x08\x85\x4a\xa5\x32\x28\x14\x8a\x23\
+\x3c\x1e\xef\x65\xfc\xbe\x1f\x51\x8c\x50\x22\xe2\x10\xbc\x7f\x44\
+\x80\x9f\x8d\x52\xa9\xb4\xb2\xae\xae\xee\xe3\xfe\xfe\xfe\x4b\x1e\
+\x8f\xe7\x46\x30\x18\xbc\x35\x3e\x3e\x7e\xd5\x66\xb3\xf9\x4c\x26\
+\x93\x5d\x22\x91\x18\x39\xa2\xfb\x97\x22\xba\x5b\xf3\xf4\xb2\xb2\
+\xb2\x77\x1d\x0e\x87\x3f\x10\x08\x80\xd3\xe9\x84\xb6\xb6\x36\x30\
+\x9b\xcd\xd0\xd1\xd1\x01\x13\x13\x13\xe0\xf5\x7a\xc1\x62\xb1\x04\
+\x0b\x0b\x0b\x3b\xf1\xf9\x1c\xc4\xca\x48\x24\x7f\x5b\x39\x35\x1f\
+\x19\x1d\xfd\xde\xed\x76\x83\xe9\x95\xda\xdf\xf2\xf7\x1b\xaf\x15\
+\x34\x1c\x0b\x6b\xdf\xb6\xc2\xd6\xba\x37\x43\xbb\x1b\xcd\x3f\x77\
+\x5a\x3f\x0a\xe3\x6e\xc0\x6a\xb3\x5d\xd1\x68\x34\x16\xac\xcb\x8c\
+\x44\xf2\x27\xcd\x49\x16\x5a\x39\x35\x2f\x3d\x5c\x73\xf5\xe9\x43\
+\xaf\x4f\xa5\x34\x77\x06\x59\x4c\x1a\xb0\xd8\xcd\xc0\x56\x67\x82\
+\xac\xd9\x32\xf3\xc2\x89\xae\xe9\xf6\xbe\xb3\x0b\x93\x93\x93\x50\
+\x5f\x5f\x3f\x23\x10\x08\xea\xb0\x5e\x4c\x72\x2d\x45\xa0\x20\xcd\
+\x49\x16\x5a\x39\x35\x97\x1f\xfd\xc0\xa9\x3e\xd5\xe7\x79\x76\x5b\
+\x25\x3c\x5f\x56\x0b\xcf\x14\x18\x20\xf3\xcc\xe0\xcc\xa3\x6d\x03\
+\x5f\x96\x7f\x78\xd6\x37\x3c\x3e\x11\xee\xee\xee\x86\xdc\xdc\xdc\
+\x41\xac\xcf\x47\x44\xfd\x75\x17\x8b\x09\x0a\xec\x76\xbb\x97\x34\
+\xd7\x54\x1c\xfc\x51\xd4\xf0\xfe\x68\x71\xa7\xe3\x2b\xe3\x39\x9f\
+\xf7\xc5\x7d\x47\x60\xbb\xa1\x15\x4a\x4d\x27\xe1\xc0\xc8\xcc\x45\
+\x79\x8f\xff\xb3\x64\xab\x7b\xe0\xd4\xb9\xf1\x1f\x48\xaa\x92\x92\
+\x92\x20\xd6\x57\x21\x62\x11\x2b\x22\x11\xec\x45\x69\xe6\x69\xa0\
+\x4a\x43\xfd\x34\x8b\x51\xc2\xc6\xac\x72\x78\xae\xa8\x1a\xb6\xe8\
+\x5e\x83\xac\x97\x1a\x21\xa7\xbc\x19\x32\x74\x0d\xc0\xe2\x0b\x81\
+\xad\xc9\x83\xc3\x03\x6e\xaf\xcf\xe7\x83\x8a\x8a\x8a\x6b\x58\xff\
+\x06\x42\x80\xe0\x47\x22\x30\xa1\x15\x6f\x92\x5b\xe4\xb5\x6f\xb9\
+\x59\x6c\x06\xac\x4c\x2a\x86\x98\x94\xdd\xb0\x3e\xdb\x00\xa2\x1c\
+\x13\xac\xdb\x62\x84\x28\xc5\x5e\x60\x49\xdb\x81\x25\xea\x60\x6b\
+\xef\xd7\xe7\xa7\xa6\xa6\x88\xe0\x26\xd6\x1f\x47\x08\x11\x0f\x44\
+\x22\xd8\xe7\x72\xb9\xe6\xc9\x8a\xaa\x57\xcd\xd3\x34\x50\x96\x50\
+\x04\x6c\xc3\x4e\x84\xfe\x0f\x3c\x86\x90\xd2\x75\x27\xd4\x8c\x04\
+\x2f\xf8\xfd\x7e\xd0\x6a\xb5\xb4\x83\xa3\x88\x04\xc4\x83\x91\x08\
+\x8a\x29\x44\xe4\xf3\x8a\xa6\xd6\xb9\xa4\x63\x3d\x43\xc2\xf7\xbe\
+\x19\x13\xda\x7e\x1a\x63\x22\x5c\xb1\x04\x89\x24\x7a\x10\xdb\x43\
+\xc3\x8a\xb1\x5f\x7a\x9e\x1a\x9a\xfb\xd4\xea\xf9\xf6\x32\x39\x09\
+\xd3\x4e\x33\xa8\x5e\x6e\x07\x4a\x4a\x28\x85\x88\x7c\x5e\x7c\xd2\
+\x7a\x31\xfe\x84\xcb\xb5\xf6\xf4\xe5\x49\xb6\x06\x35\x17\x92\x2c\
+\x7a\x10\x7d\x12\x1a\x4d\x19\x99\xb7\x1b\xc7\x66\xdd\x9e\xa9\x40\
+\xb8\xa5\xa5\x05\x64\x32\xd9\x10\xd6\xef\x58\x6e\x06\x71\x14\x7f\
+\x4a\x28\x39\xa3\xbd\x6f\x70\x41\xdf\xf5\xb9\x3f\xb1\xfd\xc2\x17\
+\x2c\x2e\x0f\xd8\x7a\xdd\xed\x5d\x24\x3b\xe6\x1c\xd4\xbc\xd7\xed\
+\xfb\x75\x78\x78\x18\xd4\x6a\xf5\x42\x74\x74\xf4\x19\xac\xdf\xbc\
+\x9c\x8b\x78\xb4\x0b\x8a\x3f\x25\x94\xb6\x4e\x3e\x27\x2b\x92\x5b\
+\x68\xa0\xa4\x39\xc9\xe2\xf1\x07\xc2\xd4\x5c\xbf\x6b\xd7\xad\xf4\
+\xf4\xf4\xeb\x58\xd7\x8b\xa0\xb0\xc9\x23\xe6\x80\x23\xa1\x17\x57\
+\x0e\xc5\x9f\x12\x4a\x21\xa2\xdd\x90\x15\xc9\x2d\x34\x50\x22\x26\
+\x59\xf0\x99\x05\xa5\x52\x19\x4a\x4d\x4d\x85\xfc\x34\xe1\xf5\x83\
+\xdb\x36\x5c\xc1\xda\x03\x94\xe8\xa5\x08\x78\xdc\x3b\x25\x93\xe2\
+\x4f\x09\xa5\x10\x91\xcf\xc9\x8a\xe4\x16\x1a\x28\x69\x8e\xb2\x9c\
+\xe6\xf3\xf9\xce\xac\xc7\xe3\x6f\xd4\xe4\x25\xc2\x3b\x7b\x52\xa0\
+\x56\x27\xbb\x44\x6e\x5c\x4c\x72\xb7\xb7\xe9\x1d\x12\x31\x17\xff\
+\x2a\x2e\x44\xc7\x39\x2b\x56\x73\x03\xcd\xb8\x8f\xb1\xd1\x4d\x6b\
+\x57\x85\x2a\x37\xad\x83\xa6\x22\x29\x74\x54\xa5\x41\xe3\x8e\x27\
+\x66\x17\x93\x44\x3a\x0f\x78\x9c\x5c\x51\xdc\xe0\x04\x9c\x05\x13\
+\xb8\xab\x80\xbb\x2f\x47\x92\xf3\xd9\xa2\x47\x42\xc6\x6c\x21\x98\
+\x4b\x92\xa1\xeb\x50\x3a\x34\xe9\x9f\xbc\x4d\xb2\xec\x91\xc9\x11\
+\xad\x20\xeb\x91\xbf\x29\x44\xdc\x95\xcf\xdd\xa7\xdf\xc5\x48\xd2\
+\xaf\x12\xae\xfa\xae\x5a\x2d\x82\xd6\x52\x39\xec\xd1\x88\x7d\x78\
+\x5f\x7b\xcf\xce\x64\x8e\xa4\x5b\x23\x7e\x78\x36\x2f\x79\x35\x35\
+\x2f\x47\x3c\x74\x4f\x0f\x7d\x6e\x66\xa4\xbd\xf6\x4e\xf3\xff\xe4\
+\x5f\xc5\xef\x49\x57\xd6\xb7\x03\x79\xba\xe9\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\xca\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x04\x5c\x49\x44\x41\x54\x48\xc7\xc5\
+\x56\x0b\x4c\x5b\x05\x14\xad\x4d\x66\x98\x06\xe2\xe6\x67\x31\x96\
+\xb1\xd2\x82\x9b\x08\x1d\x4a\x65\x6d\xdc\x84\x39\x4a\xc9\x02\x59\
+\x40\xa8\xa9\x33\x5b\xda\xe1\x30\x8e\xb1\x8d\x35\x08\xc6\x91\x82\
+\x43\x9c\x13\xdc\x4f\xc5\xec\x47\x45\xa0\x15\x32\xa9\x02\x29\x43\
+\x03\xa3\xed\xa0\xa5\x6f\xb4\xae\x2b\xa5\x19\x6c\xb2\xa8\x2c\xc2\
+\x8a\x25\xc6\xd8\x8d\xeb\xbd\xe6\x2d\xa2\xae\x90\x98\xa9\x4d\x4e\
+\x5e\xfa\xfa\xee\x3d\xef\x9e\x7b\xce\x7b\xe5\x00\x00\xe7\xdf\x04\
+\xe7\x7f\x23\xc0\xcf\x52\x84\x38\x2d\x2d\x6d\x8f\x58\x2c\x7e\x87\
+\xcb\xe5\xbe\x81\xdf\x77\x20\xf2\x10\x12\xc4\x32\x04\xf7\x1f\x11\
+\xe0\x67\x75\x5c\x5c\x5c\xa1\x56\xab\x6d\xed\xec\xec\x1c\x77\x3a\
+\x9d\x37\x7d\x3e\xdf\xac\xcd\x66\xbb\x61\x30\x18\xdc\x25\x25\x25\
+\xc6\xd8\xd8\x58\x0d\x4b\x74\xef\x7c\x44\x77\x6a\x2e\x55\xa9\x54\
+\x1f\x9b\x4c\x26\x8f\xd7\xeb\x85\x81\x81\x01\xa8\xab\xab\x83\x9a\
+\x9a\x1a\xd0\xe9\x74\x30\x38\x38\x08\x2e\x97\x0b\x9a\x9a\x9a\x7c\
+\x39\x39\x39\x0d\x78\x7d\x3a\x62\x71\x28\x92\xbf\xdd\x39\x35\xb7\
+\x58\xad\xdf\x31\x0c\x03\x25\x6f\x96\xff\x9a\xb9\x43\x33\x9d\x5d\
+\x79\x38\xa8\xf8\x50\x0f\x59\xda\xf7\x03\xaf\xec\xaf\x99\x6c\xd0\
+\x7f\x16\xc4\x69\x40\x6f\x30\x5c\x97\xcb\xe5\x4d\x58\x97\x12\x8a\
+\xe4\x4f\x9a\x93\x2c\x74\xe7\xd4\x7c\xcb\xde\xb2\x1b\xcf\x14\xbf\
+\x35\x9c\x74\xb0\xc1\xb7\xa9\xde\xf4\xcb\xe6\x56\x33\x28\x5b\x2d\
+\xb3\x09\x07\x9b\x46\x5f\x38\xda\x38\x52\xdf\x71\xd6\xef\x70\x38\
+\xa0\xa2\xa2\x62\x94\xc7\xe3\x69\xb1\x5e\x48\x72\xcd\x47\x20\x26\
+\xcd\x49\x16\xba\x73\x6a\x2e\x3a\xf0\xc9\x80\xec\x78\x87\x53\x63\
+\x72\x4c\x54\x9e\xbb\x38\x53\xd8\xe9\x98\x4e\x39\xdd\x3d\xba\xb2\
+\xae\xeb\x7c\x7e\xf3\x59\xb7\xd9\x36\x18\x6c\x69\x69\x81\x8c\x8c\
+\x8c\x6e\xac\xcf\x44\x84\xff\x75\x8a\xb9\x04\xd9\x46\xa3\xd1\x45\
+\x9a\xcb\x0b\x76\xff\x20\xa8\x3c\x69\xcd\x6b\x30\x5d\xd0\xf4\xb8\
+\x5d\x6f\x33\xe3\x9e\x2a\xe6\xdb\xcb\x55\x8e\xab\x57\x76\x5a\x46\
+\x2f\x89\xda\x3c\x5f\xc5\xeb\x99\xae\xe3\x3d\xb6\xef\x49\x2a\xa5\
+\x52\xe9\xc3\xfa\x22\xc4\xc3\x88\x45\xa1\x08\x5e\x45\x69\xa6\x68\
+\xa1\x92\x3d\x15\x23\x31\xef\x36\xf7\xad\x7e\x4e\x05\xcf\xe7\x96\
+\xc2\x86\x17\xf7\x41\x6a\x6e\x19\xa4\x2b\xcb\x61\x5d\xf6\xeb\xc0\
+\x79\x2c\x0b\x12\x4d\x57\x3a\xf6\x76\x31\x2e\xb7\xdb\x0d\x05\x05\
+\x05\xd3\x58\x5f\x85\xe0\x21\xc2\x42\x11\x94\xa0\x15\x6f\x91\x5b\
+\x44\xe5\xc7\x98\xc7\x0f\xb7\xf5\x2e\x5e\x91\x09\x4b\x13\x55\xb0\
+\x22\x75\x37\x08\x36\x14\xc3\xf2\x94\x5d\x10\x9e\x98\x0f\x9c\xd8\
+\x97\xe1\xe9\xde\x89\x2f\xb2\xda\xbf\xe9\x1b\x1e\x1e\x26\x82\x5b\
+\x58\x7f\x04\xc1\x47\xdc\x17\x8a\xe0\x35\xbb\xdd\x3e\x45\x56\x4c\
+\xdb\x57\x33\xb2\xf2\xd8\x97\x3d\x9c\x47\xe5\xc0\x11\x6e\x06\xce\
+\x2a\xf5\x1f\x78\x02\x11\xa7\x86\x24\xf3\xa4\xb1\xcc\xe2\x1b\xf2\
+\x78\x3c\xa0\x50\x28\x68\x82\x03\x88\x68\xc4\xfd\xa1\x08\xf2\x28\
+\x44\xe4\xf3\x82\xea\x43\x13\x34\x01\xff\xc4\xc5\x7e\xbe\xe1\xc7\
+\x7e\xc1\x99\x80\x55\xd0\x16\xb0\x44\x9f\x09\x9c\x17\x1a\x03\x66\
+\x71\xff\x4f\x6d\x34\x81\xde\x79\xf9\x1a\x39\x09\xd3\x4e\x3b\x28\
+\x5d\x68\x02\x09\x25\x94\x42\x44\x3e\xcf\xfb\x40\x7f\x29\xea\xa8\
+\xdd\x1e\x79\xea\x9a\x83\xf7\xa9\x7f\x88\xd7\x3c\xc3\x20\x2e\x08\
+\x3e\x0f\x58\x93\x2c\x53\x46\x4d\xff\x18\xe3\x1c\xf6\x06\x6b\x6b\
+\x6b\x21\x21\x21\xa1\x17\xeb\xb7\x2e\xb4\x83\x65\x14\x7f\x4a\x28\
+\x39\xa3\xbe\xa3\xdb\xaf\x6e\xfc\xda\x13\x53\x3f\x74\x2e\x4a\x37\
+\x6e\x8b\x6c\x98\x74\x08\x5a\xa7\xac\xf1\xa6\x09\x13\x35\x6f\x67\
+\xdc\x3f\x9b\xcd\x66\x90\xc9\x64\xfe\x88\x88\x88\xd3\x58\xbf\x76\
+\x21\x17\x71\x69\x0a\x8a\x3f\x25\x94\x46\x27\x9f\x93\x15\xc9\x2d\
+\xb4\x50\xd2\x9c\x64\x71\x7a\xbc\x41\x6a\xae\xde\xb6\x6d\x56\x2a\
+\x95\xce\x60\x5d\x3b\x82\xc2\x26\x0a\x99\x03\x96\x84\x1e\x5c\xe9\
+\x14\x7f\x4a\x28\x85\x88\xa6\x21\x2b\x92\x5b\x68\xa1\x44\x4c\xb2\
+\xe0\x35\x7e\x89\x44\x12\x48\x4e\x4e\x86\xcc\x35\xfc\x99\x5d\x9b\
+\x56\x5d\xc7\xda\x9d\x94\xe8\xf9\x08\xb8\xec\x33\x25\x85\xe2\x4f\
+\x09\xa5\x10\x91\xcf\xc9\x8a\xe4\x16\x5a\x28\x69\x8e\xb2\x9c\x0a\
+\x0b\x0b\x1b\x48\x7d\x32\xea\x66\xd9\xc6\x18\xf8\x68\x7b\x12\x94\
+\xbf\x94\x30\x4e\x6e\x9c\x4b\x72\xa7\xa7\xe9\x6d\x12\x21\x1b\xff\
+\x22\x36\x44\x47\x58\x2b\x96\xb2\x0b\x5d\x77\x0f\x87\x63\x5d\x1b\
+\xb9\x24\x50\xf8\xec\x72\xa8\xce\x8d\x03\x5d\xd1\x1a\xd8\xbf\x35\
+\x71\x6c\x2e\x49\xa8\xf7\x01\x97\x95\x2b\x9c\x5d\x1c\x8f\xb5\x60\
+\x34\x7b\xe4\xb1\xe7\x45\x48\xd2\xb7\x3e\xfa\xa1\x80\x66\x3d\x1f\
+\xde\x53\xc6\x43\x63\xb1\x14\xaa\xd5\x4f\xfd\x4e\xb2\xe0\x2b\x93\
+\x25\x5a\x44\xd6\x23\x7f\x53\x88\xd8\x63\x18\x7b\x9e\x7e\x17\x22\
+\x49\x67\x1a\x7f\xc9\xd5\x52\x99\x00\x0e\x6d\x11\xc1\x76\xb9\xd0\
+\x8d\xe7\x15\x77\xed\x9d\xcc\x92\xb4\xc8\x85\x0f\x8e\x6d\x8c\x7f\
+\x84\x9a\xe7\x23\x1e\xb8\xab\x2f\x7d\x76\x67\xa4\xbd\xe2\x76\xf3\
+\xff\xe4\x5f\xc5\x6f\x26\x4d\xee\x1d\xf0\xc3\x08\x75\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\x23\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x03\xb5\x49\x44\x41\x54\x48\xc7\xb5\
+\x96\x4d\x4c\x5c\x55\x14\xc7\x7f\x6f\xbe\x87\x19\xa6\x83\x0c\xb4\
+\x60\x1b\x09\x25\x4e\x44\x0c\x56\xa3\x4d\xb4\x8d\x35\x52\x8d\xc6\
+\x60\xfd\x58\x10\x83\x2c\x48\x8c\x31\x76\xe1\xae\x6e\x4d\x77\x2e\
+\xba\x6b\xba\xa8\xc4\x98\x36\xb3\x6e\x58\xd8\x26\x65\x23\xa6\xb8\
+\x80\xa8\x69\x1b\x2d\xa5\x15\xaa\x7c\x07\xda\x0e\xf3\xc1\x9b\xf7\
+\xee\xbd\xc7\xc5\x1b\x06\x86\x40\x03\x89\xdc\xc5\x7b\xf7\xde\x97\
+\x7b\x7e\xf7\x9c\xff\x39\xf7\x3e\x4b\x44\xd8\xcb\xe6\x63\x8f\x5b\
+\x60\xad\xf3\xe2\xa7\xe7\xfb\xf6\xa7\xf6\x7d\x5d\x13\x0e\x44\x98\
+\x7d\xf0\x74\xb2\x94\xdd\x99\x05\xf1\x1e\x4b\x89\x03\xca\x57\xdf\
+\x38\x5f\x2c\xda\x85\x7f\xa6\x17\x3f\x1b\x1f\x3c\x33\x5e\x05\x38\
+\xd0\x90\x38\xf3\xcd\xe7\x6f\xb7\xdf\x99\xce\x92\xbb\x3a\xc5\xcb\
+\x77\x7f\xdf\xd5\x4e\x7f\x69\xff\x84\xba\x57\x3b\x9f\xaa\x0d\xfb\
+\x19\x1a\xfe\xe3\x7b\xe0\x78\x15\x20\x1a\x0e\x84\xff\x9c\x5e\xe1\
+\xee\xcc\x0a\xcb\xbf\xde\xa4\x79\xf4\xda\xae\x00\xbf\x59\x2f\xd0\
+\xd8\x90\xc6\x68\x4d\x3c\x12\x4a\xfd\xff\x1a\x08\x18\xad\xd1\xda\
+\x20\x5b\x69\xb0\xb9\xc5\x5a\x5a\x78\x77\x6c\x8c\xe2\xec\x2c\x13\
+\x17\x2e\x50\xd7\xd9\x49\xc3\xb1\x63\x68\xdb\xe6\xe7\xee\x6e\x5e\
+\xcf\x64\xf0\x47\xa3\xe4\x27\x27\xb9\xd1\xd3\x83\x88\xa0\xb5\x41\
+\x6b\xbd\x26\xcc\x93\x01\x00\x73\x43\x43\x8c\x9d\x3e\xcd\x6b\x97\
+\x2f\x53\x98\x9a\x62\xa4\xb7\x97\x78\x5b\x1b\x87\xfb\xfb\x01\x18\
+\xe9\xeb\xa3\xb4\xb4\x54\x76\x40\x30\x46\x7b\x00\xd9\x61\x9a\x36\
+\x75\x75\xf1\xc6\xe0\x20\xf7\x2e\x5e\xac\xcc\x15\xa7\xa7\x09\xd7\
+\xd7\x03\xd0\x79\xf6\x2c\x87\x4e\x9d\xaa\x84\x48\x29\x8d\x52\x7a\
+\xeb\x34\xdd\xce\x83\x1b\x3d\x3d\x1e\xec\xe4\x49\x12\xe9\x34\xf5\
+\x47\x8f\xf2\xe8\xd6\x2d\xea\x8e\x1c\x61\xa4\xaf\x0f\x63\xdb\x9e\
+\x7d\x91\x0a\x40\x82\x3b\x08\x91\x9b\xcb\x31\x7f\xfd\x7a\x65\xbc\
+\x38\x3c\x4c\xe3\x89\x13\xe4\x26\x26\x98\xbc\x74\x89\x50\x32\x89\
+\x28\xb5\xae\xb1\x08\x5a\x69\xb4\xd2\x55\x56\xb7\x05\x38\xcb\xcb\
+\xdc\x1f\x18\xa8\x8c\xa7\x32\x19\xa6\x32\x99\xca\xf8\xce\xb9\x73\
+\xd5\x49\x54\x09\x91\x02\xac\xed\x01\x96\xcf\xc7\xe3\x78\x0a\xc7\
+\x1f\xc2\x27\x66\x47\x19\xba\x1a\xaa\xc1\x0e\xd7\x60\x55\x34\x08\
+\x3c\x01\x00\xa4\xde\xe9\xe6\x4a\x6b\x1a\xad\x3d\x80\x18\x83\x08\
+\x88\xac\xbf\x8d\x08\x62\x04\x63\x04\xf1\xfb\x09\x36\x1d\x44\x29\
+\xe5\x01\xc4\xbf\x35\x40\xc4\x5b\x10\x4d\xc4\x89\x3e\xd3\x4a\x2e\
+\x57\x44\x8b\x29\x03\xbc\x6f\xc6\x18\x44\x0c\x5a\x7b\x42\x06\x83\
+\x01\xc4\x08\x58\x82\x72\x0d\x4a\x29\x84\xd0\x16\x80\x0d\x3b\xba\
+\x7d\x73\x9c\xda\x90\xe6\xa3\xe3\x07\xf1\x59\x82\x11\x83\x31\x06\
+\xa5\x34\x46\x6b\x94\xd6\x28\x57\x31\xff\x68\x95\xdb\x73\x16\xb5\
+\xa9\x7a\x1e\xfc\x3d\x43\x24\x1a\xc6\x75\xd5\xd6\x95\x2c\xe5\x62\
+\xd1\xda\xa5\x26\x16\xa5\x39\x29\xbc\x94\xae\xe3\x87\x81\x1f\xb9\
+\xfa\xd3\x35\x44\xe0\xcb\xaf\xbe\xe0\xf9\x8e\x76\x1c\xc7\xc1\x29\
+\x29\x9a\x12\x7e\xc6\x17\x0c\x87\x0e\x35\x33\xf3\xef\x02\xae\xab\
+\x70\x5d\x55\x55\x68\x81\xcd\x99\x60\x8c\x78\xe7\x8a\x31\xd8\x76\
+\x89\xb9\xb9\x79\xee\x4d\xdc\x07\xe0\xe1\xf2\x43\x0a\xf9\x3c\x8e\
+\xe3\x50\x2a\x95\xb0\xed\x12\x5a\x47\x2b\xe1\xf5\x00\xee\xf6\x85\
+\x26\xc6\x60\xb4\xf1\xca\x5e\x1b\x6c\xdb\x2e\xa7\x5d\x39\x5b\xec\
+\x55\xf2\xf9\x3c\xb6\x5d\xc2\xb6\x6d\x6c\xdb\xc6\xe8\x70\x79\xad\
+\x54\x3c\xd8\x78\x4b\x06\xd6\x17\xbb\x56\x34\xec\x43\x1b\xaf\xd4\
+\xb5\xd1\x14\x0b\x05\x0e\xb7\xb5\xf2\x56\xd7\x9b\x18\x63\x88\xc5\
+\x62\x64\xb3\x2b\x15\xe3\xab\xab\x36\xda\xa4\xd6\x2b\xd9\x75\x51\
+\xae\xaa\xf6\xc0\xb2\x2c\x0b\xb0\x3a\x3e\xf8\xae\x7f\x74\xf4\xaf\
+\xc1\xfd\x4d\xa9\x44\x21\x16\x20\x12\x34\x2c\x3c\x76\x79\xb6\xe3\
+\x15\x5a\xd2\x9d\xb8\x8e\x8b\xe3\xb8\x64\x6d\x07\xc7\x09\x52\x72\
+\x0c\x8e\x82\x64\x3c\x4c\x50\x1c\x52\xc9\x08\xd1\x80\x66\x5f\x2c\
+\xa4\x6a\x22\xc1\x49\xcb\xb2\xfc\x80\xb1\x80\x08\xd0\x0c\xc4\x1a\
+\x9e\x7b\xaf\xe3\xfd\x0f\x3f\xee\x0d\x05\x03\xc1\x35\xa5\x84\xf5\
+\xd3\x57\x36\x8a\xc5\xe6\x39\x6f\xda\x6f\xdc\xb9\x2b\x03\xdf\x9e\
+\x5f\x5c\x9c\xc9\x02\xf3\x56\xf9\x44\x8d\x03\x21\xc0\xbf\xa1\xce\
+\xad\xdd\x5f\x39\x55\x7d\x07\xc8\x59\x7b\xfd\xdb\xf2\x1f\x88\xe0\
+\x23\xf6\xca\xd4\xed\xc7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x05\xb0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x05\x77\x49\x44\x41\x54\x48\xc7\x95\x55\x7b\x4c\x53\x77\
+\x14\xfe\x0a\x2d\x7d\xf0\x1c\x94\x67\x79\xad\x16\x61\x20\x0c\x21\
+\x19\xf1\x31\xdc\x26\x81\xe1\x24\x4e\xc4\x2d\x19\x8b\xd1\x18\x47\
+\x32\x97\x98\x2d\x66\xce\x18\x97\x91\x68\xd8\xf6\xc7\xfe\x71\x4c\
+\xb7\xb8\x64\x13\x1d\x99\x64\x66\x59\x8c\xc9\x04\x8c\x03\xff\x90\
+\x81\x0a\x4c\x10\xf7\xc0\x29\xe3\xfd\xa8\xb4\xb4\xbd\x6d\x6f\x7b\
+\x77\xce\x0f\x0a\x3a\x75\x73\x27\x3d\xf9\xdd\x7b\x7b\xef\xf7\x9d\
+\xf3\x9d\xef\x77\xaf\x4a\x51\x14\x94\x96\xed\x85\x5f\xf6\x69\xb2\
+\x73\x0a\x3e\x8e\x7a\x42\x1d\x91\x9f\x9b\x7c\x57\xf2\xf8\x8b\x64\
+\xd9\x27\x5b\xcc\x89\x06\xaf\xec\x5b\xa1\x09\xd1\xea\xbd\x6e\xd5\
+\xd4\xd6\xaa\x97\x0b\x26\x67\xfa\x86\xf0\xb8\xc1\x04\x1b\x36\xec\
+\x47\x59\xd9\xbb\xd8\x52\xb5\xff\xa4\xf2\x1f\xf1\xd5\x89\x16\x85\
+\x1e\x4b\xfd\x5f\x04\x80\x9a\x52\xc5\xa7\xaa\xfa\x63\x97\x05\x90\
+\x83\x72\xda\xb5\x94\x56\xf7\x3c\x81\x97\xd2\x64\x5a\xf9\xcd\xe3\
+\xe2\x07\xcd\x2f\x4c\xa0\x11\x7c\x0d\x5f\x7f\x51\x77\x6b\x06\x70\
+\xd3\x89\x4d\x5a\xca\xbb\x4e\x60\x4c\x9a\xbf\x73\x53\xd5\xeb\x95\
+\xb4\xa4\x3f\x36\x41\x72\xc2\x53\x30\x25\x64\x23\xde\xb8\x02\x7d\
+\xd7\x5a\xbf\xff\xfd\xd7\x39\xb8\x7c\x80\xcb\x0b\x38\x3c\x4b\x69\
+\x9d\x03\xe8\x87\xc2\x55\xeb\xb4\xb4\x14\xff\x13\x2c\x29\x29\x09\
+\xd1\xd1\xd1\x0f\x12\x78\x65\x2f\x64\xaf\x17\x3e\x1f\xa1\xaa\x54\
+\x3f\x77\xb4\x5f\xb6\xce\xd1\xa1\x83\xd4\x73\x78\x97\x72\x8e\x48\
+\x26\xfc\x40\x56\x41\x21\x3d\xa5\x7d\x4e\xaf\x8b\x81\x5e\x1f\x8b\
+\xca\xca\x4a\x1c\x3e\x7c\x18\xb2\x2c\x2f\x48\xbe\x14\xdc\x31\x9e\
+\x59\xbb\x51\xfc\xe1\x27\x02\x99\xc8\x9a\xcf\x7e\xdb\xb1\xf1\xad\
+\x92\x17\x5d\x32\x20\xfb\x02\xe3\x61\x6e\x3a\x9f\x05\x24\xaa\x3f\
+\x3c\xfc\xc9\x82\x30\xfd\x38\xd2\xcc\x19\xf0\x52\x71\x0c\xee\xf7\
+\xfb\x1f\x20\x10\x1d\x84\xea\x06\xa1\x56\xf5\x63\xeb\x16\x8b\x48\
+\xaf\xa4\x34\xdd\xf8\x8d\x74\xa7\x6a\x27\xed\xc0\xf0\x14\x70\x6b\
+\x0c\x18\xf8\x13\x18\x1a\x99\x2f\xeb\xfd\xda\x0f\x9e\x96\x24\x69\
+\xb7\xc7\xe3\x79\x24\xf8\x62\x07\x7c\xdd\xef\x57\x81\x15\x92\x65\
+\x7f\xf9\xae\x9a\xf5\x5f\xaa\x46\x25\x58\x87\x75\x88\x30\x00\xe6\
+\x44\xc0\x40\x55\xeb\x82\x9c\x54\x91\x0b\x6a\xba\xf1\x85\xb7\x5f\
+\x85\x2c\xfd\xf1\xe9\x89\x86\x93\x31\x44\xf2\x19\xc9\x3b\xc5\x04\
+\x0f\x95\x28\x70\xad\xa5\xe5\x22\x91\x78\x93\x4e\x9f\x66\x17\x86\
+\xc0\x35\x67\x43\xcf\xb5\x2e\x48\x23\x5e\xd8\x65\x37\x82\x78\x26\
+\x92\x84\xa0\x20\x2d\x6e\xdd\x8e\x80\xc5\x92\x81\xe3\xc7\x8f\xd7\
+\x4e\x4f\x4f\xd7\xb6\xb5\xb5\xdd\x24\xa2\xd5\xf4\xe0\xcc\x43\x08\
+\x14\x1e\x30\x15\xe6\x3b\x90\x90\x90\x54\xd9\xdc\xfc\x13\x22\xc3\
+\x43\x41\x12\xa0\xb3\xb3\x13\x92\xdb\x0d\x63\x6c\x3c\x22\xc2\xc2\
+\xa0\xd1\x6a\x60\x30\x68\xe0\x71\xfb\xb1\x6a\xf5\x6a\xe1\x9c\xf1\
+\xf1\x71\x64\x64\x64\x64\x46\x44\x44\x4c\x1f\x3a\x74\xa8\x80\x20\
+\xaf\xdd\x47\x40\xc0\x45\xd9\xd9\xd9\x5f\xed\xda\xf5\x46\x96\xcb\
+\xe5\x84\xc3\xe1\x80\xe4\xf1\xa2\xbb\xf7\x3a\x2c\x99\x59\x28\x24\
+\xd7\xb0\xce\xa1\xa1\xa1\x88\x89\x89\xa1\x0e\xe6\xb7\x8f\xcd\x66\
+\x07\x55\x4f\xc3\x57\x61\x64\x64\x04\xdb\xb6\x6d\x63\xb2\xce\xfa\
+\xfa\xfa\xb8\x40\x27\x82\xc0\x60\x30\x7c\x58\x5d\x5d\x9d\x95\x91\
+\x61\xc1\xf0\xf0\x30\x34\x1a\x0d\x74\x3a\x1d\x72\x72\x72\xd0\xdf\
+\xdf\x8f\xf8\xf8\x78\x71\x8d\x63\x72\x72\x12\x56\xab\x55\x74\x37\
+\x3b\x3b\x0b\xa7\xd3\x49\x8e\x0a\x87\xd9\x6c\x46\x5a\x5a\x1a\xca\
+\xcb\xcb\x83\x9b\x9a\x9a\x3e\x9f\x98\x98\xd8\xba\x48\x40\x0e\x30\
+\x04\x00\xb8\x1a\x3e\x66\x10\xde\x17\x99\x99\x99\x68\x6d\x6d\x85\
+\xd1\x68\x14\x76\x54\xab\xd5\xc2\x31\x54\x14\xcb\x22\x8e\x9d\x4e\
+\x17\x24\xa7\x1b\xd7\x7b\xae\xe3\xce\xed\x3b\xfc\x7c\x3e\x41\x19\
+\xb9\x0b\x41\x30\x36\x36\xa6\xd0\xb0\x40\x5d\x20\x35\x35\x15\x51\
+\x51\x51\x08\x09\x09\x11\xed\xeb\xf5\x7a\x14\x16\x16\x92\x1c\x36\
+\x41\x4c\x3a\x83\xad\x39\x3a\x3a\x8a\xde\xde\x5e\xd8\xed\x76\x3a\
+\x1e\xc3\xf0\xd0\x10\xa6\xac\x33\x88\x8b\x89\x43\x30\xd4\xb4\x83\
+\xa0\xe3\x7a\x05\x01\x81\xfc\x95\x97\x97\x57\xc4\x72\x9c\x39\x73\
+\x46\x00\x66\x65\x65\x21\x25\x25\x45\x00\x30\x19\x77\xc3\x3a\x0f\
+\x11\x10\x13\xb3\x34\x81\xd5\x9c\x66\x41\xee\xca\x5c\x5c\x8c\x3c\
+\x06\x7b\xb7\x0f\x3e\xb7\x10\x83\xb7\xa8\x5f\x10\xb8\xdd\xee\x1b\
+\xc9\xc9\xc9\x28\x29\x29\x11\x1a\x33\x09\xbb\x87\x35\x2d\x2e\x2e\
+\x46\x57\x57\x17\x06\x06\x06\xc4\xf0\x59\x26\xad\x56\x8b\x30\x72\
+\x54\x6e\x6e\x2e\x96\x2f\x5f\x8e\xe8\xc8\x68\x38\x3d\x0e\xa8\x9c\
+\xaf\xc1\x99\xac\x42\x93\x72\xee\x7e\x9b\x06\x07\x07\x47\xb2\x14\
+\x1c\xb1\xb1\xb1\xa8\xa9\xa9\xc1\xe0\xe0\x20\xba\xbb\xbb\xd1\xd0\
+\xd0\x20\x2a\x8f\x8b\x8b\x13\x69\x32\x99\xc0\xc5\x30\x01\xeb\xcf\
+\x5d\xf4\xf4\xfc\x82\x53\x0d\xa7\xf0\x52\x49\x05\xe2\x92\x8d\xb0\
+\x4b\x36\xff\x42\x07\x8a\x20\x20\x19\x26\xce\x9f\x3f\x8f\x35\x6b\
+\xd6\x2c\x32\xa7\xa7\xa7\x0b\x20\xbe\xd6\xdc\xdc\x42\x32\x69\x10\
+\x19\x19\x29\xe6\x30\x3d\x3d\x89\xab\x57\xaf\x0a\xb9\xdc\xbc\x47\
+\xc8\x00\x55\xaf\x54\x22\x31\x31\x51\xb8\x6f\xd9\x32\x8b\x91\xe6\
+\x13\x22\x4c\xc3\x9b\x8c\x7d\x4d\xeb\x3a\xd2\xbc\xb1\xae\xae\x2e\
+\x91\x87\x1d\xd8\x80\x6c\xc7\x0b\x17\x2e\x08\x69\x74\xba\x10\x1c\
+\x39\xf2\x09\x0d\xdc\x25\x86\x9d\x92\x92\x8a\x84\x84\x44\xe4\xe7\
+\xe7\xa3\xa2\xa2\x82\x95\x80\x5f\xf1\x23\x2f\x37\xcf\xde\xd7\xd7\
+\xf7\x3c\x41\xdc\x14\x20\x3c\xc4\x7b\x24\xab\x2d\x2a\x2a\x52\x5a\
+\x5a\x5a\x16\x3f\x93\x34\x0f\xa5\xbd\xfd\xa2\xd2\xd6\x76\x45\xd9\
+\xb3\xe7\x88\xb2\x73\xe7\x6e\x65\xdf\xbe\xbd\xca\xb9\x73\x67\x17\
+\xef\xb9\x74\xe9\x92\x52\x5a\x5a\xca\xe3\xed\xa2\xfc\x88\x3f\x0f\
+\x02\x8f\x09\xb8\x2d\xf6\xff\x3d\x91\x40\xf9\xc3\xe6\xcd\x9b\x15\
+\xb2\xa3\xd2\xd1\xd1\xa1\x1c\x3c\x78\x40\x59\xbb\xf6\x59\x65\xc7\
+\x8e\x5a\xe5\xe8\xd1\x2b\x8a\xcd\x36\x0f\xdc\xd8\xd8\xa8\x90\x19\
+\xe8\x7b\x87\x1f\x29\xdf\xa1\x34\xdf\xf7\xb6\x0b\x10\x04\xb6\x7f\
+\x20\xd8\x29\x14\xeb\xe9\xd5\x70\x83\x36\x1b\xbf\x0e\xad\x94\xdf\
+\x51\xbe\x67\x32\xa5\xb7\x6f\xdf\xfe\xa6\x42\x3b\x98\x5f\x07\x8d\
+\x94\xd5\x0b\x15\x3f\x18\x8f\x22\x60\x97\xdc\x13\x9b\x28\x4b\xb0\
+\xf0\xe1\x5e\x88\xb2\x85\xd4\xe2\x5f\xe2\x6f\x80\x26\xfe\x87\xb0\
+\x39\x3e\x91\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x02\xa1\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x02\x33\x49\x44\x41\x54\x48\xc7\xd5\
+\x55\xcb\x6e\x13\x41\x10\xcc\xa7\xf1\x19\x7c\x8a\x4f\x08\x21\x0e\
+\x88\x13\x42\x70\xe0\x03\x10\xe2\x06\x52\x78\x84\x6c\x0c\xd8\x24\
+\xf1\x63\x6d\x92\xe0\xf8\xed\x5d\x7b\xfd\xb6\x13\x3b\x46\x11\x07\
+\xef\xce\x14\xd5\x33\x10\x88\x64\x03\x07\xf6\xe0\x43\x6b\x7a\xaa\
+\x6b\xba\x76\xbb\x35\x3d\x5b\x37\x6e\xde\x4e\xd0\xdc\x98\x2c\xb1\
+\x25\xce\x61\x1f\xd8\xa9\x01\xaf\xcb\x0a\xdb\xe5\x08\x2f\x4f\x96\
+\x70\x9a\x9a\x98\xc2\x5e\x0b\x48\x7a\x1a\xa9\x0e\x88\x01\xbb\x0d\
+\xf2\xaa\x8a\xdc\xd0\xec\x93\x9e\x3d\x2b\xf8\xbb\xfa\x4f\x5f\x23\
+\xdd\xd5\x90\xdc\x46\x20\x37\xb2\xc1\xbb\x6f\x95\x39\xe0\x34\x15\
+\xee\x27\x2d\xf1\x4d\x45\xe1\x0e\x71\x9b\x5c\xe3\x9e\x03\xbc\x3a\
+\x5d\x22\xd5\x06\x6e\x6d\x2f\x89\x51\x8c\x9c\xdf\x71\xc9\x93\x1d\
+\xe0\x4a\x20\xde\x12\x01\x88\xd5\xfe\xe7\x1f\x24\xd6\x09\xb8\x39\
+\xd6\xcb\xa9\x45\x38\xe8\x02\xef\x9b\x11\x4d\xe3\x53\x07\x66\x15\
+\x4b\xb2\xce\x29\x5f\x99\x55\xf6\xbb\xd5\x90\x7b\xe0\xa3\x27\xb1\
+\x08\xd9\xbe\x6d\xe8\x5a\x81\xe2\x48\x92\x29\x3c\xfc\x10\x21\x13\
+\x80\x07\x80\x27\x07\xc0\x3e\x1b\xe6\xd4\x43\x3c\x4a\x51\x88\x89\
+\x52\x4c\xf8\x20\x19\x1a\x6e\x9e\x1f\xf5\x38\x0d\xa4\x29\x74\x32\
+\xc1\x1f\x05\xe2\x2d\xd1\x26\x34\x39\xf1\x37\x01\xb7\x34\x05\x5c\
+\xd6\x3d\xdb\x51\x28\xb2\xb6\x85\xbe\x98\x46\x89\xb5\xdd\xf7\x42\
+\x64\xda\xea\x07\x06\x64\xc8\x39\x66\xcf\x8a\x03\xc6\xa7\xeb\x6b\
+\x7f\x4d\xa0\x3c\xd5\xc8\xf8\x4b\x3c\x73\x15\x0e\xbd\x25\x3e\x53\
+\xe4\x69\x3e\x82\xdb\x55\x38\x1a\x02\x2f\x4a\x4c\xde\xd3\xc8\x07\
+\x0a\xcf\x8b\xfa\x0a\xdf\x69\xfc\x9b\x40\xbc\x25\xda\xa4\x9b\xbc\
+\xf2\xcf\x4c\x0f\x5a\x33\x8d\xf2\x48\xa1\x7e\x06\xb3\xd6\xd8\x3c\
+\xf1\xab\x13\x6d\xfc\xca\x58\x1b\xdf\x9b\x03\xc7\xfd\x10\x15\xfa\
+\xa5\x61\x84\x2f\x83\xd0\xc4\x6a\x53\x89\xdb\xb3\xc2\xeb\x2c\x7e\
+\xf5\xc6\x08\x04\x5f\x99\x6c\xcc\x71\xc0\x51\xed\xcd\x80\xda\x84\
+\x63\xa1\x6e\xfd\xc6\x99\x86\xc3\xf9\x2f\x98\x4f\x81\xbd\xba\x26\
+\x06\x34\xcf\xe9\xf3\xbd\xa8\xca\x87\x4d\x2d\xde\x32\x7c\x85\xdc\
+\xe0\xba\x40\xbc\x25\xda\xb4\x26\x27\x56\x5e\xb4\xf1\x37\xc0\x3f\
+\x57\x08\x2e\x80\xce\x5c\xdb\x75\x26\xab\xf5\xdb\x33\x85\xee\x42\
+\x9b\x98\xf0\xba\x17\x96\xef\x13\xef\x2d\x84\xab\x30\xbc\x5c\x7d\
+\xe9\x8c\xc0\xf0\x52\x1b\x52\x81\x0f\xb5\x1c\x96\xc4\xc5\x1e\x8c\
+\x2f\xf8\x11\x47\x44\x30\xd7\x46\x34\xcf\x51\x21\xbe\x88\x16\x02\
+\x8d\x1e\x39\x62\xa7\x93\xf5\x02\xb1\x96\xe8\x3b\x31\xcd\x36\x1d\
+\xe5\x2d\x08\xd3\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x06\xe8\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x06\x7a\x49\x44\x41\x54\x58\xc3\xed\
+\x57\x09\x4c\x54\x57\x14\x1d\x6a\xed\xa6\x4d\x69\x69\xb5\x2e\x15\
+\xf7\x1d\xb1\x20\x8a\x0a\x28\x2a\xb2\xa9\x88\xc0\x20\x28\x22\xae\
+\xe0\x30\x08\x6e\x6c\x23\x42\x01\xc5\x71\x41\x76\x71\xa1\x0a\x28\
+\xe2\x5a\xc0\x0a\x5a\x91\x60\xc0\x15\xad\x88\x68\xcd\x18\xd4\xaa\
+\xd4\x5a\xb1\x2e\xe8\x8c\x0a\x9e\x9e\x0f\x3f\x8d\x52\x29\x9a\x9a\
+\x36\x69\x9c\xe4\x64\x32\x33\xff\xdd\x73\xef\x39\xf7\xde\xff\x47\
+\x02\x40\xf2\x5f\x42\xf2\x36\x81\xff\x65\x02\x66\x52\x85\x91\x99\
+\x34\x58\x66\xea\x14\x14\x6f\xea\x18\x98\x66\xea\x18\x90\x3e\xd4\
+\x7e\xc1\xaa\x81\xb6\xde\x93\x25\x12\xc9\xc7\x44\x33\xc9\x9b\x7e\
+\x0d\x9b\x18\xd2\x97\xc4\x11\xc3\x9c\x17\x17\x7b\x2c\xdc\x7c\x39\
+\x60\xf9\xe1\xdb\xa1\xd1\x17\xab\x15\x2b\xae\xa8\x15\xcb\xaf\xa8\
+\x03\xa3\xce\x3c\x90\x29\x76\xdf\x1a\x6c\xe7\x97\x6f\x60\x31\x5d\
+\xc6\x23\x9f\x10\xef\xbe\x01\xe2\xc5\x96\x24\x4d\x99\x34\x37\x59\
+\x15\x91\x50\x76\x37\x3c\x41\x53\x2b\x0f\x07\x26\x2d\x00\xc6\x7a\
+\x02\xa3\xa7\x02\x23\xdd\x00\x6b\x77\xc0\x7d\x1e\x10\x16\x5d\xf9\
+\xc4\xc2\x75\xc9\xb5\xd6\xba\x7a\x52\x1e\xd7\xf9\xc7\xc4\xd3\x17\
+\xa5\x56\x28\x93\xaf\x3e\x0c\x8c\x06\xdc\x02\x49\x24\x03\x4c\xa6\
+\x01\x86\x93\x01\x3d\x29\xd0\xdb\x1e\xe8\x66\x4b\x8c\x06\xfa\xd9\
+\x00\xd2\x39\xc0\x82\xf0\x22\x75\xaf\xc1\x13\x72\x18\xc6\xe0\xf5\
+\x89\x9d\x17\xeb\x12\x8a\x49\xbe\xc9\xaa\x95\x1b\x49\xbc\x06\x70\
+\x0d\x02\x2c\xe4\xc0\x50\x56\x6c\x4c\x0c\x64\x12\x83\xbc\x09\x92\
+\xe9\x7b\x00\x3d\x5d\x80\x4e\x63\x00\x5d\x0b\x60\x88\x13\x10\x10\
+\xa5\x7e\x36\xd0\x56\x56\xc9\x70\x4e\xaf\x45\x3e\x7c\x62\x88\xdc\
+\xc6\x23\xaa\x2c\x3c\xbe\xa4\x2a\x3c\x19\x98\xba\x84\x15\xfb\x01\
+\x66\x73\x89\xf9\x94\x5b\x01\xd8\x47\x01\x93\xa9\xc6\xd4\x38\x26\
+\xc6\xf7\x71\xdf\x50\x11\x5f\xa0\xef\x14\xa0\xab\x1d\x60\xe4\x0c\
+\xcc\xa5\x45\xe6\x4e\x01\x77\x19\xd2\xf7\xb5\xaa\x96\x2d\xd9\x71\
+\x35\x26\x5d\x53\xeb\x4d\x92\xf1\x01\xf4\x96\xa4\x23\xfc\x01\x9b\
+\x08\x92\x92\x70\x7e\x3a\xb0\x7c\x2f\xb0\xbe\x10\xd8\x54\x04\x24\
+\xfc\x00\xf8\x6f\xa5\xec\x2b\xa8\x0e\x13\xed\xc3\x5e\x18\xcc\x5e\
+\xf0\x5d\xc6\xe4\xbc\xe3\xab\x19\x5a\xf1\x0a\xe4\x0a\x27\xa1\xea\
+\xc8\xc4\x92\xaa\x88\x75\x24\x0a\x63\xd5\x24\x1d\x45\xbf\x6d\x22\
+\xd9\x6c\x09\xf4\x74\x1b\x10\x7b\x08\xc8\x2a\x03\xb6\x1e\x54\xd5\
+\x84\xc4\xee\x51\x7b\x2c\x88\x7b\x18\xb9\x2e\x4f\xb3\xbd\x84\x92\
+\x67\x50\x09\x5e\x6b\x4c\x6b\x46\xd1\x2a\x45\x2c\xed\x19\x23\xbf\
+\xc7\xf0\x4b\xfe\x1c\x1f\x8e\x86\x31\xbf\xf8\x88\xd0\x7a\x5e\x72\
+\x07\xcf\x98\x0b\xb1\x69\x37\x35\xf3\xe9\xb5\x53\x08\x60\x49\x99\
+\xad\x59\xb1\x34\x06\x90\xb1\x62\xe5\x01\x60\x57\x29\xb0\xad\x40\
+\x55\x33\xc6\x23\xf4\x41\x5f\xd3\x89\x57\x3b\xf4\x1a\x5a\xac\xd3\
+\xae\xfb\x4e\x36\xda\xb1\xb5\xbb\x4a\x34\x89\xf9\xb4\x24\x91\x7d\
+\x12\x54\x1f\x63\x55\x9a\xfa\x99\x91\xb5\xe7\xed\x3a\x05\x04\xf2\
+\xc4\xd4\xb2\xdf\x0d\x2d\x67\x6d\xea\xd2\xdf\x62\xbc\xb8\x28\xb4\
+\x98\x58\xf0\x0c\xff\xd4\x8a\xd8\x2d\x9a\x5a\x2f\x25\xbd\xe5\x41\
+\x2b\xfa\x69\xbf\x0a\xf0\x48\x61\x15\x39\x40\xca\x31\x20\xfb\xf4\
+\x9d\x5a\x59\xe8\x86\x47\x02\xf1\x97\x9d\xf4\xf3\x79\x76\x39\xe1\
+\x45\x8c\x63\x3c\x7f\xdf\xc8\xf4\xdf\x32\x4f\x02\x3e\xa9\x4c\x9a\
+\x71\x7c\xe3\x81\xc8\xa4\x13\x4f\xba\x1b\x8d\x39\xcf\x6b\xfc\x04\
+\x05\x4a\x0b\x8f\x30\xab\x75\xa7\x1f\xe9\x9b\xbb\x65\xe9\x99\xb9\
+\xc8\xb9\xc1\xb6\xf9\x45\xe4\x5c\x57\x6e\x06\xa6\xd1\x6f\x3b\xca\
+\x6e\xcb\x77\x97\x24\x40\x9e\x09\xac\x2c\x00\xf6\x94\x03\x69\xfb\
+\xcb\x9e\x8e\x70\xf6\xbf\xdf\xa1\xb7\x49\x09\x83\xad\x21\x3c\x09\
+\x73\xa2\x33\xf1\x59\xff\x11\xee\x16\x5e\x21\x29\xd7\x77\xfd\x48\
+\x1b\xb6\x53\x31\x5a\x18\x9f\x45\x05\xdd\x42\x1f\x68\xb7\xea\xb8\
+\x9b\xd7\xb8\x08\x0d\x56\x96\xcb\x80\x2b\xf9\xa3\x97\xe2\x94\xda\
+\x78\x9c\xef\x85\xf0\xa4\xeb\x1a\x7f\x7a\xeb\xb6\x94\xcb\x84\x72\
+\xdb\x0b\x5d\xfd\x2d\x83\xb0\xc1\xd6\x1e\x07\xf2\xca\xd5\xcf\x16\
+\x29\xb7\x70\x96\xed\x2b\x3e\x6f\xdf\x63\x5f\x9d\x97\x12\x89\x1d\
+\xd1\xf5\xf9\x55\x6b\xe2\xb0\x68\xda\xb2\x0d\xfb\x7f\xcd\x64\x1f\
+\x84\x91\x58\xf9\x1d\x10\x9e\x74\xf8\x71\x57\x03\x2b\xa1\xfa\x30\
+\xc2\x58\xb0\xe0\xdc\xae\x5c\x60\x4e\x28\x3b\xdb\x07\x70\x5c\x54\
+\x5d\xeb\x42\x52\x07\x62\x1c\xbb\x55\x4a\xc9\x66\x6d\x01\x42\xe9\
+\x75\x2a\x2b\xc9\x2d\xbb\x53\x3b\x51\xae\xac\xee\xd4\x6f\x44\x29\
+\x03\xc4\x10\x33\x89\x21\x44\xeb\x86\xab\x55\xb8\x17\x64\x1c\xbc\
+\x58\x9d\xce\xa4\xe3\x38\x11\x69\x07\xef\xd4\x9a\x3b\xf9\xdf\x6f\
+\xa1\xdd\x3a\x93\x3f\xbb\x12\x6d\xeb\x12\xd8\xb9\x9f\xbe\x72\xa6\
+\x4d\xbc\x00\x53\x8e\x8b\x55\x58\x7d\xd5\x93\xd6\x03\x9e\x94\x6e\
+\x29\x3b\x3c\x93\x92\xe7\x9c\xba\x51\x23\x4a\x7e\x92\x87\x95\x84\
+\x83\x58\x75\x0b\xe2\x9d\x86\xf7\x06\xa9\x3c\xe6\x42\xf1\x65\x36\
+\x28\x7b\x60\xe7\x51\xf5\x33\x47\x2f\x65\xb5\x78\x36\x98\x30\x24\
+\x3e\xa8\x4b\x60\x0f\x09\x66\x2b\xeb\x67\x7a\x24\x95\xb0\x67\x87\
+\x4f\xa1\xff\x3e\x94\x2c\x92\x33\x9d\x41\xf2\xb5\x59\x27\x9e\x8c\
+\x24\x79\xbb\x6e\x03\x8f\xf0\x60\x24\x31\x96\x68\xdf\xd8\x0d\x45\
+\x68\xee\xf4\xbc\xb2\xbb\x85\x2a\x20\xff\x02\x30\x2f\x72\x8b\x5a\
+\x54\x4d\x48\xdc\x96\xf8\xa2\x6e\xe2\x84\x04\x72\x8a\xd9\x9d\xdc\
+\x6c\x76\x4c\xc2\x81\x92\x4f\xe5\x78\x79\xd3\xb3\x10\xf6\x46\xf2\
+\x19\x56\x70\xec\x46\x0d\x1b\xb4\x52\xbb\x95\x6e\x8e\xb8\x3c\xac\
+\x88\x36\x8d\x91\x0b\xbb\xc3\xc3\x3f\x59\x55\xfe\x0b\x70\xfa\x2a\
+\xf7\xc4\xd2\xad\x8f\x44\xdf\x57\x13\x13\x5e\x48\x5c\x48\x20\xef\
+\x14\xc7\x8a\xdd\xed\xbe\x11\x98\xc1\xa5\x31\x97\xcd\x16\x4c\x55\
+\xa2\x38\x66\x6b\x0a\xea\xc9\xdb\x77\x1f\x54\xc8\xcb\x17\x0a\xd6\
+\x8a\xd9\xbf\xbc\x72\xa7\x20\x1d\x26\xb0\xf3\x50\xe9\x4d\x4d\x79\
+\x25\xc9\xa3\xb6\x3e\x14\xc9\x85\x7e\x11\xee\x80\xba\x2f\x9c\x15\
+\x12\x28\xa2\x44\x71\x5c\x16\x41\x9c\xed\xc5\x6c\xb6\x65\x5c\xa3\
+\xd1\xec\xdc\xb5\xdc\x6c\x99\x97\xb8\x52\xb3\x4e\x3e\xee\x3d\x64\
+\xc2\x51\x9d\xb6\xdd\x3c\xc5\xec\x1b\x7d\xa0\x60\xbc\x39\x71\x19\
+\x45\xb7\x4a\x2a\x34\xb5\xce\xb2\x15\xf7\xba\x19\x5a\x97\x8b\x23\
+\xea\x4c\x74\x24\x9a\x37\x3c\x70\xee\xec\xcf\xc0\xc1\x9f\x48\x56\
+\x5a\xdf\x6c\x7b\xe8\x5b\x76\x05\xb0\x8f\xf2\x15\xdc\x00\xce\x56\
+\x01\xeb\x76\x17\xa9\xfb\x98\x48\x77\xf0\x48\x1f\xe2\xfd\x46\x1e\
+\x4a\xec\x42\x13\xf7\x5e\xcb\x3f\x7d\x53\x33\x76\x7a\xc4\xed\xce\
+\xfa\xa3\x84\xfd\xb0\x52\xbc\xeb\xfd\x95\x5c\x9c\xd5\x8c\xec\xa2\
+\xcb\x9a\xec\xe2\x4b\x4f\xb3\x8a\x54\x35\xd9\x47\x55\x35\x39\xc4\
+\xde\x63\xc4\x71\x55\xcd\xf7\x44\xee\x09\x01\x97\x9e\xba\xfa\xae\
+\xae\x6a\xa5\xab\xe7\x23\xfa\xaf\xd5\xe0\xf9\xa0\x87\x47\xc0\xfa\
+\x8b\xab\xd3\x0a\xab\x0c\x2d\x67\x9e\xfb\xaa\xe7\xe0\x03\xfc\x3a\
+\x82\xb0\x17\x65\x6f\xfe\x52\xc9\x0c\x46\xcf\x70\x19\x60\x35\xbb\
+\xa0\xdf\xf0\xc9\xe7\xf5\xcc\x5c\x2f\x35\x8a\x61\xae\xaa\x36\x5d\
+\x0c\x72\xc4\xb9\xef\xf2\x12\x1b\x9a\x75\x37\xb2\x35\xef\x3d\xd4\
+\x71\xe3\x87\x2d\x3f\x8d\xe2\x67\x39\x31\x92\x68\xd7\xd4\xa3\x97\
+\xb0\xb9\x06\x88\x8b\x61\x76\x13\x70\x13\x44\x13\x1f\xa5\xb4\x1a\
+\xc4\x11\x3e\x6b\x13\x5f\x0b\xf7\x31\xd1\x2a\xed\x57\x79\xee\x6b\
+\x26\x26\xd1\x46\x6c\xb0\xbf\x43\x9b\x26\x9e\x6a\xb5\xea\x96\x8b\
+\x44\xd2\x92\x78\xef\x25\x49\xfe\xfb\xaf\xb7\xff\x8c\xde\x26\xd0\
+\x14\xfe\x00\xc6\x8f\x6d\x5f\x51\xaa\x96\x24\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x02\xb7\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x02\x49\x49\x44\x41\x54\x48\xc7\xed\
+\x55\xdb\x6e\x52\x51\x10\xe5\xd3\xfc\x0c\x3f\xa5\x4f\xc6\x44\x1f\
+\xf4\xd5\xa8\xb1\x1f\xa0\xc6\x07\x8d\x26\x48\xbc\x00\x5a\x2e\xa5\
+\x94\x03\xf4\x42\xb9\x73\xe0\x70\xbf\xb4\x54\x9a\xc6\x44\x38\x7b\
+\x2f\xd7\xec\x4d\x69\x5f\x79\xa0\x4f\x3c\x4c\x66\xce\x9a\x99\x35\
+\x27\xb3\x60\x4e\xe0\xc1\xc3\xc7\x3b\x34\x67\x43\xb6\x13\x90\x20\
+\xd5\x03\xbe\x57\x80\x50\x51\x21\x58\xf4\xf1\xe5\x64\x8e\x70\x5d\
+\x13\x53\x88\x34\x80\xa8\xab\x11\xf3\x40\xcc\x5a\xa8\xac\x58\xbb\
+\x30\x71\xd4\xb5\xbd\x3f\x6b\xc0\x8f\xea\x4d\xac\x11\xef\x68\x08\
+\xb7\x19\x70\x38\xb4\xc9\xa7\xdf\x94\x69\x08\xd7\x15\x9e\x47\x6d\
+\x61\xa8\xa4\xf0\x84\xb8\x90\xc9\xb3\xe0\x5f\xcf\xe6\x88\xb5\x80\
+\x47\xc1\x39\x31\x65\x6a\x9e\x85\x81\xe0\x12\x17\x9e\x74\x1f\xab\
+\x01\x9b\x5d\x11\x80\x8d\x5a\xe0\x5e\x44\x3e\xe4\xbe\xc2\x15\x1f\
+\xfb\x1d\xe0\x57\xdd\xa7\x69\x24\x3d\x18\x2f\x16\xe5\x9e\x63\x4d\
+\xb5\xf4\xd4\xa2\xbc\x30\x7e\xcf\x95\x9c\x6f\xf0\x3d\x6a\x97\xf0\
+\x60\xbc\xf0\x64\x87\xb7\x1a\x38\xb9\xa1\x90\x29\xbc\xf8\xed\x23\
+\xd5\x06\xd2\xfc\x55\xed\xee\x03\x49\x0a\x16\xae\x2e\xf0\x32\xc6\
+\x41\x24\x8a\x91\xf0\x75\xc2\xd6\x66\xf8\x52\xaf\xe2\x40\x9c\x83\
+\xa4\xe7\x4d\x92\xc4\x9e\x42\x82\xcf\xbb\x29\xe0\x78\xac\xb7\x22\
+\xaf\x21\x72\x61\x02\x38\xdc\x7b\x9a\x3b\xcc\x71\xb7\xd9\x9e\x98\
+\x46\x61\x4c\x1d\xdc\x05\x0e\x88\x5b\x0c\xc8\x74\xb9\x5f\x6a\x96\
+\xeb\x6b\x13\x4b\xde\xe9\x29\x53\x23\xbd\xf9\x01\x75\xa9\xff\x83\
+\x70\xae\x44\x2e\x4e\x34\x0e\x9a\x73\xbc\x77\x14\x52\xee\x1c\x79\
+\x16\xbe\xcd\xf8\x70\x3a\x0a\x47\x6c\xf8\x5c\x20\x79\x97\x84\x6d\
+\x85\x0f\x39\xbd\xc2\x3f\x1e\x13\xf3\x7c\x63\x9f\x4e\x80\xd3\x91\
+\xb5\x77\x8e\x8f\xd2\xf9\x56\xe4\x75\x44\x6e\x4c\x35\x8a\x43\x85\
+\xea\x39\x8c\xaf\x50\x20\x89\xcb\xfc\xb3\x48\x5c\x1a\x69\x13\xbb\
+\x97\x36\x5f\x62\x7c\x36\xf0\x71\xda\x5f\x98\x5c\x65\x22\x79\x9b\
+\x93\xba\x2a\xf7\xef\xcd\xee\x88\xdc\xbe\x22\xd9\x88\x67\x80\xb7\
+\xdf\x9d\x02\x95\x31\xcf\x42\xd5\xc6\x35\x16\x87\x79\xff\x05\x6b\
+\x72\x80\xe0\x35\x0e\xaf\x5f\x00\x11\x7e\x2f\xca\xf2\x62\x7c\x89\
+\x48\x55\xa3\x61\xea\x95\x39\x2f\xad\x3f\xdb\x73\xbd\x8e\xc8\xa3\
+\xbf\x40\xf3\x42\xa1\xcd\xbd\x79\x97\xda\xfa\xa9\x78\x8d\x0e\xe3\
+\xd6\x54\xa1\x33\xd3\xab\x9c\x60\x52\xdf\x24\xde\x9d\x49\xad\xba\
+\xed\x61\x8d\xf8\xfe\xd5\x9d\x6f\xf2\xe0\x5a\x9b\xa2\x6c\xc7\x12\
+\x0a\x71\xae\x6b\x89\x04\x3f\xe2\x89\xb8\x69\xcc\x2f\x63\x19\x9a\
+\x6d\xdb\xfa\x2e\x4d\xe2\xde\xcc\xe6\x72\xfc\xd7\x0f\xae\xef\x49\
+\xe4\xff\xfb\x02\x27\xea\xf7\xb1\x15\x44\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x02\x73\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x02\x05\x49\x44\x41\x54\x48\xc7\xdd\
+\x54\xdd\x4e\x13\x51\x10\xe6\xd1\x7c\x0c\x1f\x65\x2f\x35\xd1\x98\
+\x78\x65\x62\xc2\x03\x58\xbd\xe1\x52\xb4\x6a\xa9\x5d\x28\xa9\x12\
+\xf6\x08\xc5\x60\x69\xbb\xfd\xd9\x2d\xdb\x6e\x89\x50\x10\xb9\x72\
+\x77\xce\xe7\xcc\x9c\x10\xa3\x12\xac\x29\xeb\x85\x17\x93\x33\xff\
+\xdf\xd9\x6f\x76\xce\xd2\xad\xdb\x77\x3c\x16\x53\x90\x78\x4b\xa2\
+\xbc\x4b\x80\x72\x8b\xf0\xa2\x95\xe3\xa1\x0f\x54\x7b\xce\xbe\x5f\
+\x21\xbc\xed\x03\xf5\x18\x78\x50\x05\xd6\x42\xf6\xb7\x09\x77\xcb\
+\x84\xd7\x6d\x8b\xd5\xfd\x0c\xf7\x2a\x60\x9d\x34\x5f\x6a\x25\xff\
+\xf9\xfe\x37\x2c\x6f\x13\xa4\xb7\x02\x34\x12\x57\x5c\x8f\x80\x37\
+\x5d\x8b\xf5\xa1\x4b\x92\xb3\xcc\xa0\x3e\x9f\xab\x6c\x4b\xac\xda\
+\x23\xbd\x40\x6d\xc0\xb9\x1d\x8b\x97\x9f\x32\xbc\x3a\x70\x17\x11\
+\xbf\x5e\x82\x6d\xe9\x79\x09\x50\x2c\x45\x00\x0a\x95\x9f\x8c\x1b\
+\xfa\x1a\xef\x3a\x00\xf3\xf4\x23\xb0\xc1\xfc\xfa\xcc\xf5\xe3\x4d\
+\xa7\x57\x3b\x39\x96\x1b\x3c\xa3\x81\xb3\x45\xaf\x85\x84\xb5\x76\
+\x86\x47\xbe\x55\x7f\x9d\xe7\x54\x6a\x5a\xe5\xfd\x5a\x80\xdd\x23\
+\x69\x64\xd1\xe0\x81\x6f\xf4\x2d\x36\x87\xac\xc7\x02\x98\xab\xdf\
+\x0f\x73\x8d\x89\xaf\xd6\xcd\xd4\x7e\x3f\x92\x9a\x1c\x52\xfb\x27\
+\x80\x62\x29\x2a\x64\xc8\xff\x64\x93\x77\x53\xc2\xce\x04\xd8\x8a\
+\x08\x2b\x4d\x60\x6f\x0a\x04\x87\x84\x67\xc6\xe9\x66\x6c\xf1\x84\
+\x37\x73\x2b\x62\x9e\x53\xa8\xdf\x8c\xa1\x35\x25\xf1\x0f\x73\x04\
+\xbc\x58\xa5\xc0\xa2\x99\x4a\x8c\x37\x3b\xfc\xb1\x68\x26\x3c\x65\
+\x27\x37\x14\xd9\xe3\x84\x60\x44\x9a\x28\xfa\xce\xd8\x15\x7d\x48\
+\xac\xda\x97\x71\xf1\x6f\xc7\x39\x37\xcf\x34\xd6\x4c\x2d\xfb\x5c\
+\x1f\x89\x75\x66\xff\xe5\x26\xff\x2a\x73\x7e\x9d\xb7\x08\x80\xe9\
+\xcf\x98\xcf\xcf\xb2\x68\xc0\xc1\x11\xa1\xc7\xdc\x56\xf8\xa9\x6e\
+\x4d\x09\xd1\x97\xdf\x17\xeb\xaf\x01\x26\x17\x40\x2b\xcd\xd1\x96\
+\xe6\x27\x16\xbd\x63\x8b\x2e\x03\x0e\x18\x68\x74\xbe\x38\x40\xb1\
+\x14\x15\x32\xe4\x05\x7f\x5b\x6f\x1e\x00\x33\x65\xde\xc7\xe7\xb2\
+\x5c\xcc\xf3\x19\x30\x3c\x21\x04\xb1\xd5\x53\x6c\xc3\xaf\x67\xc4\
+\xc3\x9f\x7c\xe5\xa5\x8b\x5d\x8e\xd4\x5c\x35\x8f\x2b\x01\xd2\x0b\
+\xcb\x45\x56\x41\xe4\x54\x39\xb5\x88\x67\x84\x84\xff\x9c\xe4\x4c\
+\x00\x48\xcf\x43\x8d\x11\xa4\x66\x5e\x80\x1b\xa5\xe8\x3b\x80\x6d\
+\x3c\xea\x2d\x2a\x08\xd7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x05\x2d\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x04\xf4\x49\x44\x41\x54\x78\x5e\xa5\x96\x4b\x6c\x5c\x57\
+\x1d\xc6\x7f\xe7\xdc\xc7\x78\x66\xfc\x9a\xc4\xaf\x3c\x5a\x16\xa1\
+\x20\x12\xa8\xda\x80\x84\x28\xdb\x2e\x4a\xbb\x0e\x2c\x50\x14\x60\
+\xd7\x05\x48\x48\x25\x8b\xb2\x41\x95\x80\x45\x5a\x09\x51\xd4\x76\
+\x55\x44\x53\x15\xd5\x55\x9b\x84\x2a\x02\x16\x55\xa8\x68\x4b\xb1\
+\x23\x53\x5c\xda\x18\xbf\x82\xe3\x57\xec\xf1\x8c\x3d\x1e\xcf\xcc\
+\x7d\x9c\x73\xfe\x8d\xee\x5c\x09\x5b\x42\x10\x95\xdf\xe6\x7f\x75\
+\x75\xf5\xff\xf4\x7d\xdf\xb9\xba\x57\x89\x08\x77\xc3\xa5\x9f\x9e\
+\x7e\xd8\x99\xf4\xbc\x73\xe6\x7e\x11\x69\x23\xe2\xf8\x37\xea\x0e\
+\xbd\x9e\xef\xbf\x5e\x2a\x86\x4f\x3f\xf2\xa3\xa9\x45\x72\x7c\x72\
+\x5e\xf8\x9e\x7a\xd4\x39\xfa\x10\x12\x81\x2f\x20\x00\x08\xc2\x31\
+\x11\x06\x0b\x25\xbe\xf1\xf5\x6f\xff\xfc\xd0\xe7\x1f\x3a\x43\xda\
+\xde\xc1\x3a\x4b\x86\x73\xa0\x35\x41\xa1\x8f\xcd\xc5\xc9\xc7\xa7\
+\xdf\xbc\xf0\x38\xa0\x0e\x08\x3c\xff\x5d\x75\xee\x81\x47\x7f\xf8\
+\x6c\xa1\x54\x71\x36\x8d\xd2\xa1\x7b\x4f\x17\x51\x28\x40\x4a\x83\
+\xf7\x04\xa5\xca\xbd\x7e\x1a\xb5\xf4\x9f\x5f\x3e\x47\x6a\x22\xee\
+\xfb\xf2\xc3\x28\x4c\x66\x42\x10\x6c\x2a\x68\x7f\x80\xd2\xe1\xa3\
+\x04\xe5\x43\xfc\xf2\xfb\x9f\x3d\xfb\x83\x67\xe7\x2f\x02\x20\x22\
+\xfc\xea\x2c\xd7\xac\x4d\xe4\x3f\x11\x27\x56\x36\x36\xb7\xc4\x8a\
+\x48\x75\x63\x55\x5e\xf9\xf1\x09\xb9\x76\xf1\x5b\xb2\x36\xfb\x92\
+\xd4\x56\xdf\x90\xea\xd2\x6b\x32\x37\xfd\xa2\xb4\x5b\xdb\x52\xbd\
+\xfd\x91\xac\xdd\x78\x55\xde\x7b\xe9\x8c\xbc\xf1\xd4\x17\x9f\x10\
+\x11\x34\x80\x38\x8c\x4b\x3b\x80\x80\x44\x20\x06\x30\xd9\x75\xdc\
+\xaa\xb2\xb6\xb2\x48\x1c\x25\x0c\x8d\x1c\xe5\xa1\xef\x5c\xa2\x32\
+\xfc\x20\xff\x78\xe7\x77\xb4\xdb\x71\xe6\x62\x7b\xbb\xc1\xd6\xd6\
+\x16\x43\xa3\x27\x91\xde\x13\x3c\xf0\xd8\x13\x28\xe4\x49\x00\x0d\
+\xe4\x46\x0c\x10\x83\x8d\xc0\xc5\x60\x9a\xe0\xa2\x6c\x41\xa7\xbd\
+\x47\x75\x63\x1d\x11\x38\xf2\x99\x53\x8c\xdd\xff\x4d\x56\x3f\x7a\
+\x9b\xad\x5a\x83\xd4\x18\xb4\xd6\x5c\x1e\xbf\xc0\xcf\x7e\x72\x8e\
+\xd9\x8f\xff\x42\x9c\x46\x58\x6b\x07\x94\x52\x15\x4d\x0e\x08\x60\
+\xbb\x0e\x5c\xa3\x3b\xb1\x04\xbe\x41\x2b\xc3\x07\x7f\xbf\xce\xd5\
+\xab\x6f\xf2\xde\xbb\x7f\xa2\x5e\xdf\x20\x8a\xcd\x9d\xb9\x8b\xb3\
+\x8e\x81\xfe\x32\x5f\x39\xfd\x39\xbe\xf6\xd5\x93\x8c\x8e\x0c\x22\
+\x62\xb0\x4e\x00\x0a\x3e\x39\x48\x0c\xa8\x3c\x1e\x47\x86\x33\x04\
+\x9e\x61\x74\xb8\x4c\xad\x7a\x8b\xcd\xf5\x3a\xde\x91\xa3\x14\x8e\
+\xde\x87\xb3\x42\x14\xc5\x24\x69\x82\xd6\x30\x32\x3c\x90\x39\x09\
+\x7b\x8a\x94\xfa\x0e\xd3\x57\xf4\x35\xe0\xed\x13\xb0\x60\x5b\x60\
+\x77\x41\x97\x40\x12\x70\x6d\x7c\xe0\xd8\xd8\x00\x95\xbe\x53\xa4\
+\x56\x51\x28\xf4\xa2\x7d\x0d\x1a\xac\x75\x58\x6b\x33\x17\xce\x39\
+\x40\x10\x55\xc8\xee\x81\x70\x50\x40\x59\x90\x0e\xb8\x0e\x5d\x14\
+\xa8\x02\x88\x21\xf0\x2d\x03\x7d\x09\xe8\x5e\x08\x0b\x98\xc8\x22\
+\xd6\x92\x24\x31\xc6\x18\xac\xb1\x58\x6b\x10\x11\x3c\xdf\x60\x5d\
+\x0a\xa8\x83\x2f\x5a\xb6\xd8\xc6\x80\xce\x45\x52\x20\x00\x0c\x48\
+\x00\x84\x20\x0a\xcc\x1e\x22\x3e\xa2\xc8\x0a\x8e\xa3\x98\x34\x4d\
+\xbb\xcb\x3d\x0f\xb4\x26\xde\xab\xd3\xec\x58\x01\xd0\xe4\xa0\x7d\
+\xd0\x01\xd8\x2d\x70\xbb\x40\x01\x70\xdd\xc8\xb0\x5d\x51\xb3\x05\
+\x28\xc4\x39\xc4\x48\xb6\x38\x8a\x22\x80\x2c\xa2\x24\x49\x48\x93\
+\x04\x71\xa0\xc8\xb0\xfb\x3a\x30\x60\xb6\xbb\xb1\x28\x1f\xcc\x3a\
+\xd8\x36\x19\xfe\xa1\xac\x0f\x4c\x13\x82\x10\xa4\x17\x41\x50\x0a\
+\x4c\x16\x55\x92\x39\xe8\x29\x16\xb1\x22\x88\x22\x57\xc0\x1d\x3c\
+\x45\x4a\x83\x6b\x81\x2e\xe6\x91\xd5\xc0\xab\x40\x34\x0f\xde\x20\
+\x78\x7d\xf9\x73\x3e\x22\x8a\x38\x4e\xf1\xfd\x00\xfc\x1e\xd0\x8a\
+\x62\xb9\x9f\xca\xd0\x11\x7a\xfb\x07\xf0\xb4\x56\x79\x2e\x39\x08\
+\x90\x80\xb9\x05\xce\x81\x3f\x02\x5e\x3f\x60\xc9\x48\x97\xbb\xe2\
+\xe1\x29\x04\x85\xf6\x34\x85\x62\x99\xde\xc1\x11\x8a\x77\xa6\xe7\
+\x07\x48\xd4\xc0\xd6\x16\x59\x9a\x5f\x66\x72\xa6\x79\x0d\x10\x1f\
+\x72\x3b\xb2\x07\xc9\x2c\xe0\xe7\x2e\x7a\xba\x91\xc4\x73\xa0\xca\
+\xe0\x95\xba\x51\x89\x41\xab\x90\x20\xec\x61\x74\xe4\x38\x65\x95\
+\xd0\xbc\xf9\x21\x8d\xd5\x7f\x92\xb6\xeb\x4c\x7e\xb8\x36\x53\xdb\
+\xb5\x33\x17\xc6\x57\x7e\x01\x34\x7d\x0e\x50\x02\xb7\x03\xe1\x18\
+\xb4\x26\x41\x85\x79\x37\x4b\x20\x15\x08\x8f\x81\x12\xb4\x36\x48\
+\xdc\x64\xe5\xfd\xdf\xe2\x1d\x36\xbc\x7e\x6d\xf9\xf2\x8d\xa5\xf6\
+\xbb\xb7\x36\xa2\xe9\x85\xf5\x78\x1e\x68\x02\x2d\x11\x69\xef\xeb\
+\xa0\x03\xd2\xca\x4f\x8a\x0f\xa4\xe0\x0f\x01\x7d\x60\x02\x08\x4a\
+\xa0\x77\xa1\x38\x84\x17\xa7\xec\xd4\x3b\xcd\xe7\x2f\x5d\x7f\xa6\
+\xd5\xb1\xbf\xaf\xef\xd9\x15\xa0\x01\x74\xe4\xe0\x87\x88\x83\x02\
+\x66\x07\x82\x31\x88\x17\x21\x1c\x05\xb5\x07\xc5\x13\x10\x7e\x09\
+\x3c\x8f\x76\x75\x27\x59\x9b\xba\xd2\xd9\xab\xad\xf0\xc1\x12\x6f\
+\x2d\x57\x93\x71\x11\xb9\xc1\x7f\xc1\x27\x07\xd5\x03\xe1\x30\xa4\
+\x0d\x28\xdf\x03\x85\x61\x08\xfb\xe9\x54\x37\xd3\xb9\x89\x2b\xb5\
+\xb5\x99\xa9\x56\x63\x63\xce\xfc\x71\x22\x99\x6e\xa7\xac\x8f\x4f\
+\x32\x0e\xac\x00\xfc\x4f\x01\xa5\x08\x7c\xcf\x41\x78\x18\xda\xbd\
+\xec\x35\xe3\x78\xf9\xfa\xdb\x8d\xd9\x77\xae\xee\x34\x6e\x2f\x9b\
+\xcb\x93\x4c\x2e\x6c\xf2\xb7\xb5\x6d\x3e\xde\x6a\x71\x33\x8f\xa3\
+\x05\x74\xee\x4a\x40\x7b\xac\xc7\xad\x1a\x3d\xc1\x71\xe6\xa7\xae\
+\xd4\xe7\xff\xfa\x87\xc6\xee\xed\x59\x73\xfe\xa2\x7b\x6e\xa9\xc6\
+\x04\xb0\x0e\xd4\xf3\xe2\x2c\x77\x4d\x2e\x10\x86\xfc\xe6\xd7\xe7\
+\xcf\xf6\x20\x1c\x9f\x58\x60\x61\xea\x5f\x4c\xdc\xdc\xe4\xfd\x66\
+\xc2\x1c\x50\xcf\x8a\xfb\x94\x1c\xf8\x6d\x51\x4a\x55\x80\x12\xd0\
+\x06\x1a\xd9\xe2\xff\x93\x4f\x00\xc2\x30\xec\x24\xf5\x72\x95\x25\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\xb5\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x04\x7c\x49\x44\x41\x54\x78\x5e\xb5\x94\xdd\x6b\x1c\xd5\
+\x1f\xc6\x3f\xe7\x65\x66\x67\x5f\xf2\x6e\xd2\xb4\x69\xc1\x37\xea\
+\x0b\xe2\x4d\xf4\xce\x4b\xa1\x88\x82\x48\x41\xe8\x95\x7a\x21\xbd\
+\xf4\xc7\xef\x0f\xf0\x46\xf4\x52\xf0\xd2\x4b\x11\x5b\x14\x2d\x8a\
+\x8a\x42\xac\x28\xc1\x68\x6d\xda\x9b\x94\x26\x6d\x9a\xb6\x49\x37\
+\x4d\x9a\xee\x6e\x76\x67\x77\x67\x77\x66\x67\xe6\x38\x3d\x84\xb0\
+\xa1\x90\x80\xe0\x03\xcf\xce\x7e\x99\x99\xe7\xf3\x3d\xdf\x39\x33\
+\xc2\x18\xc3\x7f\x29\xcd\x8e\xa6\xa7\x4f\xbf\x02\xe6\x0d\x30\x47\
+\x8d\x41\xf2\xef\x24\x8d\x49\x56\xe2\xb8\xfb\xcb\x95\x2b\x67\x7f\
+\x04\x22\xcd\xae\xcc\x9b\xef\x7d\xf4\xbf\x93\x7a\xf8\x91\xfc\xc5\
+\xb9\x59\xb9\xf0\xd7\x8c\xe8\x76\x9a\x42\x22\x11\x02\x84\xfd\x01\
+\x29\x44\xdf\x7f\x89\x76\x5d\xa6\x9e\x78\x96\x27\x5f\x3c\xc1\xf8\
+\xe4\x61\xe6\x67\xe7\x5e\x9a\xfb\xec\x8b\xe3\xc0\x25\xe0\x5e\x1f\
+\x80\xe3\xce\xf0\x98\xf7\x6b\x59\xe9\xaf\xbf\x3c\xc7\x07\xef\xbe\
+\xca\xe3\x47\x27\x91\x52\x62\x00\x23\x52\x24\xc2\xd6\x02\x01\x18\
+\xa4\x52\xd8\xda\x29\x70\xe6\xd2\x26\xdf\x2e\x6b\xf4\x1f\x3f\x68\
+\xe0\x08\x30\x05\x34\x76\x01\xc6\x98\x66\xa5\xea\xa7\x37\x36\xf3\
+\xd4\xb7\x7d\x06\x3d\x45\xc1\x15\xf4\xe2\x08\x00\x89\x44\x6b\x9d\
+\x59\xd9\x15\xf4\x7a\x11\x69\x9a\x20\x52\x81\xe7\x2a\xa2\xc5\x9f\
+\xf1\x07\x5e\x63\x20\x8c\x93\x24\xe9\x45\x40\x01\x50\x9a\x3e\x49\
+\x09\x45\x47\xda\x80\xd2\xe0\x10\x85\x62\x91\x38\x8e\xc9\xee\xb0\
+\xa1\x4a\xd9\x70\xeb\x9d\xee\xf1\x3c\x8f\x52\x69\x80\xe9\x97\x4f\
+\x72\xfd\x5a\x1e\x29\x15\x20\x00\x0c\x40\x3f\xc0\x86\x68\x47\xa2\
+\xa4\x60\x28\x03\x0c\x0f\x0f\x13\x86\x21\xbd\x5e\x6f\x17\xb2\x23\
+\x5b\x67\xa6\xdd\x6e\x13\x85\x21\xc5\xe1\x49\xf2\xf9\x88\x68\xf7\
+\x9a\x87\x01\x68\x21\xc8\x69\x89\x56\x92\x7a\xbd\xce\x60\xc1\xf2\
+\x6d\xe7\xae\xeb\xda\x11\x29\xdb\xb9\x5d\xa5\xad\x9d\xcc\xf9\x42\
+\x9e\xdb\xab\x0a\xcf\xa9\xd3\x13\x86\x7e\xed\x1d\x91\x10\xb8\x8e\
+\x44\x1a\xc3\xc4\xe4\x04\x47\xa6\x0e\x13\xf7\x7a\x76\x4c\x3b\xb2\
+\xe1\x80\x5d\x55\xa7\xd3\x21\x30\x86\x7a\x7d\x9b\x38\x1c\xa3\xe0\
+\x28\xda\x42\xec\x03\x90\x90\xd7\x12\xc7\x73\x09\x3b\x1d\x3a\x41\
+\x60\x3b\xf4\xbc\x1c\x8e\xe3\xe2\x68\x85\xd2\x1a\x21\xec\x18\x11\
+\x52\x61\x57\xe7\x68\x5a\xb7\x23\xf2\x2b\x15\x84\xdc\x07\xa0\xa5\
+\x24\xa7\x05\x03\x87\x9f\xe6\xa9\x67\x9e\xe3\xd8\xc4\x10\x08\x30\
+\x69\x4a\x6a\xc8\x6c\x48\x52\xe8\x25\x86\x4e\x02\x61\x04\x51\x22\
+\x41\xc0\x76\xd7\x90\x77\x25\x12\xf6\x01\x08\x70\x94\xe1\xd1\x17\
+\x4e\x30\x73\x4b\xf0\x58\x60\xb2\x5a\xd2\x89\x15\x9d\x28\xa5\x19\
+\x26\x04\x9d\x88\x7a\xab\x8b\xdf\x6c\x53\x6f\x36\x69\x36\x7c\x8c\
+\x72\xd0\x03\x87\xc8\xe5\x73\x28\x79\xc0\x88\x72\x0a\x26\x8e\x4c\
+\xf1\xe9\xf7\xf3\xe4\x13\x1f\x11\xb5\xe9\x76\x03\xa2\x4e\x40\x1a\
+\x77\x51\x26\xc6\x73\x04\x43\xc5\x1c\x23\x25\x8f\xb1\x91\x12\x13\
+\x13\x87\xa8\xb9\x63\x24\xba\x80\x14\xfb\xac\x40\x09\x41\x21\xe7\
+\xd2\xb8\x35\xcf\xf3\x4e\x8d\x63\x53\xc3\x94\xbc\x7c\x16\x36\x42\
+\x31\x27\x19\x1d\x2c\x32\x92\xb9\x54\x2c\xe0\xe5\x5c\x94\x94\x44\
+\x71\x4c\xd0\x6a\x72\xd9\x77\xb9\x19\x68\x84\xdc\x6f\x44\x4a\x90\
+\x73\x35\x7e\xf9\x1a\xa7\xff\xff\x3a\xbf\xcd\xfc\xc4\xd6\x5a\x85\
+\xbb\x71\xc2\xa9\x53\xa7\x30\xc6\x90\xcb\x39\x28\x25\x31\x40\x62\
+\xc0\xa4\x86\x14\x41\xc9\x53\x14\x13\xbd\xff\x33\x10\x02\x3c\x47\
+\xe2\x3a\x8e\xdd\x2d\x8b\x4b\x4b\xf6\x65\x1b\x1f\x1f\x27\x4d\x53\
+\x80\xec\x68\x76\x2d\xa5\xc1\x60\x65\x77\x58\xde\xd3\x64\x70\x91\
+\x69\x97\xb3\x07\xa8\xa4\xc8\x00\x1a\x2f\xe7\xd0\x09\x7b\x94\x4a\
+\x25\xc6\xc6\xc6\x18\x1d\x1d\xb5\x80\xfd\x94\x73\x14\x3d\x7f\x83\
+\x34\x0a\x30\x26\x8d\x01\xf1\x10\x40\x4b\x81\xa3\x1e\x58\xee\x7c\
+\x96\xad\x39\x50\x42\xa2\xe2\x36\xcb\xb3\xdf\x98\xca\x7a\x54\xad\
+\xd7\x6f\xfd\x0e\x74\x81\x64\x0f\x40\x0a\x70\x1d\x81\x94\x80\x31\
+\x1c\x20\x0b\xd7\x5a\xd9\xe7\x12\x6c\x5d\x63\xe5\xf2\xed\xee\x8d\
+\xeb\x17\x3e\x5f\x5f\xff\xfb\x3c\xb0\x05\x74\xf7\xee\x22\xad\x18\
+\x2a\x91\x8d\x65\x14\x37\xe7\xda\x0f\x5d\x16\x62\xdf\x64\xa5\x04\
+\xae\xab\xb3\x30\x3b\x67\x82\x20\x34\xf5\x7a\xc0\xfd\xfb\x0d\x6a\
+\xb5\x16\xeb\xeb\x95\xf6\xca\xd2\xc2\xb9\x6a\x75\xe9\x22\x70\x13\
+\xd8\x00\xc2\x7e\x80\x74\x5d\x21\xb7\xca\xcb\x24\xfe\x1a\x5a\x4d\
+\xf3\xf6\x3b\x6f\xd1\x6a\x76\x4d\xbb\xdd\xe3\xea\xd5\x4d\x1a\x8d\
+\xae\xa9\x56\x5b\x61\xa5\x52\xf3\x6b\xb5\xda\xa6\xef\xd7\xd6\x7d\
+\xff\xde\x6a\xb5\x5a\x5e\x5d\x5c\xbc\x7c\xc7\x98\xb4\x01\xdc\x01\
+\xca\x40\xcb\x64\xea\x03\x98\xd6\xfc\x85\x2b\xcd\xb9\xf3\x33\xc5\
+\xf2\xea\xa6\xf9\xb0\x7c\x36\x2a\x16\xf2\x61\x1c\x87\xd5\x56\xab\
+\xb1\xe1\xfb\x95\x72\xa5\xb2\xbe\x56\x2e\x5f\x5f\xab\x56\xef\xd6\
+\x80\x2e\xd0\x01\x82\x3e\xb7\x80\x26\x10\x98\x4c\x7b\xb6\x69\x1c\
+\x77\xbe\xfa\xe4\xfd\x8f\x37\x21\x74\xc3\xde\x76\x65\xf9\xea\xec\
+\xc6\xf6\xf6\xea\x5d\x63\xd2\x10\xe8\xf4\x39\xb0\xb5\x05\xd0\xeb\
+\x73\x4c\x66\x1b\xbc\xab\x3e\xc0\xc2\xc2\x99\xef\x80\x3f\x81\x11\
+\x40\x00\x36\x78\xe7\x18\x01\x71\x7f\x98\xc9\xc8\x1c\x2c\xfe\x01\
+\xd1\x4f\x0f\x88\x96\x78\xff\x51\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x04\x6e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x04\x35\x49\x44\x41\x54\x48\xc7\xb5\x95\x7f\x4c\x94\x75\
+\x1c\xc7\xaf\x5a\xad\xe5\x8a\x2d\x67\x9a\xfe\x51\x36\xc4\xc4\xa4\
+\x2c\xa0\x00\x45\x4b\xd7\x0f\xac\x2e\x10\xc5\xca\x6a\x2b\x95\x14\
+\x51\xd4\x28\x08\x44\x0b\x04\x65\x9c\xfc\x88\x40\x65\x1c\xd2\x89\
+\x9c\x60\xca\x93\x70\x48\xfc\x7e\xe0\x50\x7e\x28\xe4\xe1\x91\x47\
+\x87\x36\xae\xa8\xa3\xd1\xae\x76\xdb\xfd\xe1\xf6\xee\xfd\xdd\x75\
+\x0b\xc2\x83\x73\xab\x3f\xde\x7b\xf6\xec\xfb\x79\x3e\xaf\xcf\xcf\
+\xe7\xab\x00\xa0\xf8\x3f\x35\xe1\x65\xe5\x86\xfd\x09\x54\xcf\x6d\
+\x48\x43\xbd\x47\xcd\x98\x16\x40\xa3\xc0\xdd\x87\xb4\xa6\xeb\x7f\
+\x02\x42\xd7\xc6\x00\xe3\x28\x70\x95\x1a\xf8\x0d\x30\xfd\x0e\x0c\
+\xfd\xe1\x3c\x1b\xa2\x7e\xb0\x01\x6d\x03\x56\xfb\x17\xa7\x64\x4b\
+\xe8\xfa\xbd\xe5\xa1\xeb\x92\x22\xa6\x03\xcc\x7b\x73\x57\xbe\x21\
+\x4f\x2b\x5b\xc4\x87\x57\x7e\x01\x3a\x7f\x04\x2e\x0c\x01\x5d\x7c\
+\x1a\x7e\x05\xc4\x99\x50\x55\xc7\xe0\x98\x80\xf7\x8d\x00\xc2\x4e\
+\xa6\xfd\x6b\x9b\x33\x7b\x03\x5e\xd9\xe6\xa7\x50\x28\xee\x70\x5b\
+\xa2\xc0\xb0\xed\x8f\x06\x84\xc5\xec\x0e\x7e\xe3\xa3\x6a\x55\x99\
+\x6c\x69\xa7\xf3\xe6\xef\x19\x29\x9f\x05\x67\xba\x47\x7c\x83\xd6\
+\x9e\x5f\x18\xa8\x3c\xe6\xff\x52\xb4\x36\x29\x4f\x32\xf7\x0c\x03\
+\x1d\x3c\xeb\xf9\x09\x38\xd9\x60\x18\x7d\xf6\xd5\x9d\x2a\x02\xee\
+\x75\x0b\x10\x74\x61\xb0\x74\xf5\x07\x2f\xc6\x1d\xd4\x9a\x3a\x6e\
+\x00\x4d\x04\xb4\x9b\x81\xec\x93\xb2\x65\x61\xe0\xeb\x45\x3c\x17\
+\x51\xce\x59\x1e\xf9\x69\x65\xed\x65\xab\xbd\xc5\xc4\x0c\x06\x99\
+\x09\x33\x14\x7d\xe1\xd9\x3c\xb7\x80\xf1\xfd\x10\x00\x3d\x01\xdf\
+\x1a\x81\x56\x01\x28\x97\x2d\xbe\xc1\x91\xb9\x74\xf0\x90\xb0\x59\
+\x11\x95\x92\xac\xd6\x19\x46\x1b\xaf\x01\xf5\x0c\xe2\xd2\xcf\xc0\
+\x86\xb8\x7c\xc3\x5c\x6f\xff\x55\xe3\xcb\xe4\x16\xb0\x33\x43\x6b\
+\x6a\x65\xfa\xb5\xfd\xcc\x82\x51\x1e\x76\x02\x72\x5c\x00\xda\x14\
+\x54\xea\x87\x6d\x75\x46\x27\x40\x7f\xc3\x71\x73\x79\x64\xe2\x45\
+\x9e\x07\x50\x77\x4d\x0b\xd8\x41\x40\x13\x53\x97\xfa\x08\xb9\x0a\
+\x64\x9e\xf8\x07\xc0\x73\x65\x14\xa3\x6d\x31\x3b\xcf\xc4\xb3\xa0\
+\xaa\x7b\x64\x51\x50\x44\x05\xcf\x17\x7b\x94\x41\x6c\xba\xd6\x54\
+\xc7\xf4\x2b\x7b\x80\xb3\xbd\x40\x5a\x89\x6c\x71\xcd\xff\x27\xb9\
+\x92\xf9\x74\xa7\xd5\x5e\xcd\xec\x6a\x08\x38\xde\x30\x38\xe6\xb7\
+\x62\x63\xa3\xd7\xac\x47\xb6\xd2\xf9\x6c\x8f\x7a\xb0\x9d\x80\x1a\
+\xa6\x5f\x76\x81\x13\xd2\x09\xe8\x06\x58\x06\x4e\x4b\x17\x9b\xd9\
+\xce\xe9\xd1\xb1\x2c\x67\xbe\xe3\xe8\x4a\x83\x63\xcb\xd6\x26\x76\
+\x2e\x0e\x59\x5f\x4c\xe7\x8f\x53\xf7\x78\x04\x88\x39\xa0\x35\x55\
+\x19\x80\x92\x76\xa0\xb4\x03\x28\xaa\x1f\xb6\xa5\x6b\x64\x4b\xc6\
+\x09\xa7\xce\xf6\xd9\x1c\x52\xbf\x13\xf2\x4d\xbf\xe3\x66\x7c\x8e\
+\x64\x0e\x09\x8f\x4f\x7d\xf2\xf9\x77\xbd\x3c\x02\x6c\x23\xe0\x34\
+\xeb\x5f\xd4\x4a\x00\xb3\xd8\x5f\x2c\x5b\xbc\x97\xbe\x5c\xb1\xe8\
+\xb9\xf0\x02\xd1\x8b\x90\xf0\x8f\x9b\x53\x4b\x09\x62\x10\xa7\x2e\
+\xb1\x54\xcc\x48\x04\x10\xac\xdc\x73\x80\x59\xdc\x3d\x2d\x60\x2b\
+\x01\xe5\xfc\xb0\xb0\x89\x35\xbe\x08\x08\x67\xc2\x39\x3f\xf6\x15\
+\x8d\x9e\x39\xd7\x67\x01\x21\x9a\xa3\x0d\xc3\xb6\x62\x3d\x33\x65\
+\x96\x3a\x4e\xdb\x9a\x4d\x99\xbd\x0f\x3f\xf6\xb4\xb7\xab\xd1\x6e\
+\x01\x1f\xa6\x69\x4d\x9a\x6e\xd6\xb8\x01\x10\x0e\x52\xbf\x9a\x38\
+\xa6\x42\xa1\xeb\x92\xdf\xdf\xa7\x96\x2d\x47\x65\xa7\x5d\xf9\x65\
+\x60\xd7\x61\xc9\x4c\xbb\x68\x57\x16\x6e\x01\xd1\x04\xa8\x19\xb9\
+\xaa\x0e\x38\xd2\x06\x7c\x56\x3a\x19\x20\xfe\xa4\x29\x04\x7c\xd9\
+\x0c\x64\xd5\x32\xd3\x2e\x20\x8e\x80\x05\xcf\x84\xc5\xd3\xee\xfe\
+\x29\x01\x5b\x52\xb5\xa6\x42\x3a\x4e\xaf\x66\x74\x2c\xd3\xbe\x92\
+\x5b\x02\x0e\x66\x71\x8a\xb2\xce\x73\x4f\x74\x80\x86\x25\x7d\x27\
+\x51\x6d\xe4\x36\x6f\xa1\xdd\x03\x53\x01\x94\x31\x99\x92\x39\xab\
+\x1e\x48\xf9\x1a\x38\xc4\xe8\x12\x8e\x4d\x58\xb4\x19\xe2\xee\x10\
+\xce\x8e\xb0\x7c\xe9\x35\x40\x4e\xa3\x00\xd8\x1c\x41\xca\x3d\x7a\
+\xda\xac\x74\xfd\xf4\x6e\x79\xe1\xc4\xaa\x24\x73\x76\x9d\xd5\x9e\
+\xce\xa8\x92\x09\x48\x13\x59\x34\xda\x1c\x9b\x99\x95\x6b\xd9\xf6\
+\x32\xa3\x52\xd6\x3c\x9b\xe5\xc9\xa1\xca\xae\x00\x1b\x09\xf4\xf1\
+\x5f\xa3\xfe\x7b\x1f\xee\x9c\x74\xe1\x6c\xfa\x5c\x6b\x3a\xc7\x1f\
+\x9c\xc4\xd5\x57\x73\x83\xf3\x38\xa2\x2a\x36\x2f\xb7\x85\x8d\xe6\
+\x7b\x25\x37\xfb\xdc\x75\xa7\x2a\xb8\x78\xc7\x09\x28\xa1\x8a\xda\
+\xac\x76\xe1\xfc\x89\x65\x51\x55\x74\xbc\x9a\xf2\x9a\x34\xa6\xe2\
+\xc2\x89\xd8\x91\x6f\x48\x62\xd3\x6e\x47\x6f\x27\xa8\x8d\xbc\x47\
+\x5a\xe7\xfb\xad\x2a\xa4\x63\xf1\x27\x9d\xe5\x8a\xde\xed\x85\xb3\
+\x24\xf4\xad\x0c\x51\x6f\x4f\x34\x67\xfe\x53\xb1\x74\xf8\x02\xe5\
+\x23\x1a\x3b\xde\xb9\xdb\x0b\x87\x7a\x50\x34\xd3\x43\xcd\xa4\xee\
+\xfb\xb7\xe3\x29\x37\xf9\xbf\xd4\x5f\x64\xf9\x94\x79\x6f\xb3\xd8\
+\x06\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\x3d\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x02\xcf\x49\x44\x41\x54\x48\xc7\xb5\
+\x95\x6b\x48\x53\x71\x18\xc6\x57\x14\x91\x96\x86\x99\x05\x21\x18\
+\x5d\x66\x86\xcd\x20\x35\xad\xd4\x50\x22\x32\xc5\xc4\xb2\x28\x19\
+\x5d\x21\xac\x6c\x50\xe1\x44\x53\xba\x9a\x20\x5e\x90\xca\xc4\x69\
+\x5e\x98\x95\x25\xc7\x26\xa1\x32\x1d\xc7\xeb\x72\x35\x6c\x38\xcb\
+\x39\x8d\x5a\x08\xae\x16\x15\xc2\x3e\x08\x4f\xef\x9f\xe9\x97\x30\
+\xdd\x99\x36\x78\x18\x3b\xff\xb3\xe7\xb7\xf3\xbc\x97\x89\x00\x88\
+\xfe\xa7\xe6\xbc\x21\xea\x58\x4e\x3a\x49\xe7\x84\xd2\x05\x03\xe8\
+\x4b\x31\x59\x25\x9c\x79\xf4\x37\x30\xf2\x0b\xf8\xf0\x1d\x18\xb0\
+\x3a\x34\xf8\x0d\x18\xfa\x01\xb0\x33\x26\x06\x11\x89\x44\xee\x42\
+\x01\x5b\xcf\x67\x29\x8c\xc5\x75\xbc\x45\x3b\xf2\xd3\xae\xff\x0a\
+\xf4\x8c\x3a\xf4\xf6\x8b\x03\xc4\x75\x9b\x6c\xec\x7c\x47\xf4\xe9\
+\x72\x02\xf8\x0a\x8e\x68\x57\x5c\x9a\x64\xe7\x81\x0b\x57\xf7\x24\
+\xa6\xab\x55\xba\xf1\x09\x8d\x09\x60\xd2\x59\x80\xe3\xb2\x12\x83\
+\x24\x2a\xa5\x45\x1c\x1c\x57\xbe\x7c\x85\x57\x02\x01\x7c\x04\x03\
+\xe8\xb5\x98\xe4\x16\x99\x7c\x43\xd3\x35\x6c\x9f\xd4\x0c\x01\xfc\
+\x30\xf0\x54\x63\xb2\x31\x73\x3a\x4b\x24\x6d\x22\xad\x26\x2d\x15\
+\x0c\x98\x8e\xea\x5c\xa6\xc2\xa8\xfd\x0c\xa8\x3f\x02\x1d\x66\xa0\
+\x94\xeb\x1b\x0b\x08\x3f\x52\x43\xa6\x9b\x49\x8b\x5c\xee\xa2\x29\
+\x80\xb4\x40\xc9\x5b\x78\x32\x6e\x1e\x00\x3a\x47\x80\x8c\x62\xce\
+\xbc\x21\x70\xdf\x1d\x32\x5f\x37\xaf\x36\x9d\x02\xe4\x2a\x29\x92\
+\xd6\x41\xa0\xc9\x40\x80\x4f\xc0\xa1\xb3\x79\x7a\x37\x8f\x35\xc9\
+\x04\xf0\x5c\x08\x40\x35\x47\x05\x56\xbd\x07\x5e\x91\xda\x4d\xf6\
+\xc9\xbd\x49\xf2\x5e\x32\x0f\x9f\x29\x77\xa1\x83\xe6\xc1\x7e\x6d\
+\x3b\xc5\xf3\xf2\x1d\xd0\xd8\x0f\x54\xb5\x99\x6c\x41\xd1\xa7\x54\
+\x64\xbe\x6d\xb6\xfc\x9d\x05\xc4\x5c\x2f\xe4\xcc\x4d\x46\xa0\xee\
+\x0d\x01\xe8\x09\xf2\x6a\x79\x8b\x38\x24\xbe\x8c\xcc\xfd\x16\x62\
+\x55\x5c\x2a\x7a\xd1\x37\x56\xaf\x07\x6a\x7b\x28\x22\x2a\x72\xea\
+\xdd\xba\x21\x5f\x71\x98\x7c\xa6\xbe\x77\x05\x90\x5b\xd6\x62\xb2\
+\xd5\xf6\x02\x4f\xba\xa8\xc8\x54\xe8\x58\x8a\xcc\xdd\xd3\x87\xf5\
+\xff\xca\x85\x00\xb4\x35\xf4\xdb\x27\xcb\x79\xa0\xa2\x13\xa8\xe9\
+\x1e\x9f\x08\x89\xbd\xa8\x21\xf3\x50\xd2\x92\x79\x01\xd8\x80\x49\
+\x33\x14\xc6\x67\x14\xcf\x43\xb5\x03\x50\xcc\x19\xac\x81\x11\x27\
+\xea\xc9\xdc\x7f\xae\x02\x3b\x03\x90\xde\xaa\xe2\x2d\x0a\x8a\xa6\
+\xa8\x19\x60\xef\xec\xb3\x7f\x68\xc2\xa3\x99\x16\x9b\x20\x00\x99\
+\xaf\x67\xf9\x17\x70\xb4\x2d\x5b\x81\xfb\x2a\x5a\x0f\x14\x53\x8a\
+\x5c\x61\x5c\xeb\x27\xb9\x42\x00\x6f\x97\x00\xd3\x7f\x30\x49\x97\
+\x4b\x0c\xf7\x94\x7d\x63\x15\x54\xdc\xfc\xd7\x40\x2e\x01\x1e\x68\
+\xa8\x45\x9f\x1b\xac\x07\xcf\xe4\xe9\x69\xbb\xde\x8c\x38\x9a\x29\
+\x76\x05\xa0\x6b\xa5\xa5\xc6\xd4\x40\x1d\x53\xa5\x03\x1e\x53\xf6\
+\xa5\x1d\x40\xa5\xd6\x71\x8d\x9d\x15\x36\x1a\xac\xbb\x0f\x5f\x63\
+\xbb\x68\x99\xe0\x27\xc8\xae\xe4\x2d\xd3\xca\x99\x52\xf6\x5f\x4a\
+\xcb\xe7\xcc\x5b\x82\xe3\x64\x04\xf0\x12\x0a\x70\x0f\x8b\x97\xa5\
+\x6e\x8f\x3c\x79\x3b\x20\x3c\xa9\xf0\x5f\xda\x18\xb4\x3f\x93\xcc\
+\x83\x5d\x5a\x76\x6c\x81\x91\x56\xb1\x49\x9d\x45\xde\x6c\xd0\xe6\
+\x9a\x05\xa7\xb6\xe9\x7c\xf4\x07\x31\x37\xf2\xb9\x28\x8c\xc6\xad\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x03\xcb\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x03\x5d\x49\x44\x41\x54\x48\xc7\xb5\
+\x95\x5d\x48\x93\x51\x18\xc7\x57\x94\x96\x52\x16\x9a\xa8\x29\x99\
+\x92\x90\xe5\x57\x99\x9a\xdf\xa1\x94\xda\x07\xf9\xb1\x59\x59\x4d\
+\x5d\x12\x8c\x94\xa4\x22\xe7\x34\x25\x02\xc3\xc8\x9b\x44\xbb\x71\
+\x58\x17\x8a\x37\xa1\x99\x8a\x52\x7e\x85\x53\x67\xea\x74\xb6\x74\
+\x3a\x35\xa7\x4d\x0d\xca\x19\xc2\x7b\xf1\xc2\xe9\x79\xf4\x9d\xe9\
+\xdc\xdc\x76\xd1\xe0\x07\xef\xce\xf9\x9f\xf3\x3f\xcf\x73\xce\x79\
+\x0e\x8b\x10\xc2\xfa\x9f\xac\x7f\x44\x5e\x2b\x74\x04\x72\x80\x2f\
+\x06\x68\x05\xf8\x1b\xf4\x7c\xa6\x4d\x9f\x16\xe7\x71\xd4\x35\xc8\
+\x14\xd5\xf7\xa9\xa7\xfe\x10\x82\x8c\x2f\x11\xa2\xf8\x4d\xc8\xe4\
+\xf2\xda\x7f\xf9\x22\x45\x47\x24\x3f\x69\x67\xb1\x58\x56\x8c\xbe\
+\x15\xdb\xb4\x7a\xad\x0e\xc1\x79\x82\xaf\x3e\xcc\x01\xad\xc5\xa6\
+\x08\xc2\xd8\xc2\x7c\x5c\x41\x05\x08\x86\x17\x08\x91\xaa\x09\x69\
+\xea\x57\x69\xae\x67\x97\xca\xc2\xd9\xc2\x2e\xbf\xa8\xb4\x17\x30\
+\xc8\xfe\x5f\x04\x05\x6d\xd8\xd7\x22\x55\x69\xc6\x60\x31\x55\x1f\
+\x65\x3f\x71\xbc\x5f\x54\x7a\x85\x83\xab\x4f\x34\x68\xf7\x6d\xce\
+\x17\x38\xba\xfb\x9e\xf7\x8e\xe0\xe4\x77\xf6\x4c\x53\xf4\xc0\x0f\
+\x42\x32\xf2\x44\x72\x67\x8f\xa0\x72\xe8\x8b\x05\x8e\x69\x23\x60\
+\xf4\x56\xde\x91\xb7\x52\x32\xf2\x45\xf2\xe1\x05\x8a\x0e\x4b\x12\
+\xf4\xd8\x3a\x79\x14\x42\x7b\x10\xe0\xb0\x29\x82\x8d\x60\xf8\x7d\
+\x2a\x8a\x96\x2e\xac\x19\x38\xba\x9d\xe2\x83\xd8\x16\xd8\xa1\xab\
+\x0d\xe7\xe4\x7b\xa2\x66\x68\x1e\x0c\xd8\x42\x31\x68\x42\x00\xcb\
+\x2d\x9b\xac\x6b\xd0\x0b\x06\x83\xf3\x84\xdc\x59\x8d\x20\x90\x0b\
+\x83\xf6\x1a\xd0\x1e\x47\xcd\x80\x9a\xa2\x31\x8d\xa0\x3b\xa9\xf7\
+\x14\xe9\x1a\x88\x21\x45\x7d\x90\x22\x9e\x09\x06\xa8\x91\xcc\x99\
+\x69\xd0\x31\x45\xd1\x62\x15\x21\xe9\x42\xe3\x06\xa8\xe9\x9e\x35\
+\xd3\xa0\x55\x49\xd1\x9d\x33\x84\xa4\x99\x60\x80\x9a\xcf\x33\x66\
+\x1a\x34\x2b\x28\xba\x75\x1a\x0c\x72\x4d\x33\x68\xff\x6e\xa6\x41\
+\xd3\x18\x45\xb7\x4c\x12\x92\x6a\x82\x01\x6a\x3e\x4d\x99\x69\xd0\
+\x00\x11\x34\x2a\x09\xe1\x9a\x60\x80\x9a\x66\xa5\x79\x06\x65\x95\
+\x5d\x2a\xcd\x87\x09\x42\xee\x97\xd4\x29\x3d\xfc\x2f\x3d\xd8\x78\
+\xc1\x74\xb4\x09\x39\xaf\x5b\xa6\xdf\x80\x3e\xe0\x62\x66\x2d\xe8\
+\x3c\x4d\x31\xe0\x16\x54\x76\xce\x36\x4c\x11\x52\x54\xd3\xa7\xf6\
+\x39\xc7\x7d\x05\x03\x0f\x18\xd0\x3e\x2f\x6b\x19\xff\x85\xfa\x13\
+\x21\x9c\x12\xd0\xb9\x99\x62\x60\x0d\x37\xb4\xfa\xad\x64\x71\xa5\
+\x16\xf6\x22\x31\xab\x54\x76\xf6\x4a\xb6\x10\x6e\xaa\x93\x4e\xf5\
+\xcd\xcc\x7c\x59\xa7\xac\x19\xd6\x50\x71\xbc\xe2\x41\x6b\x1b\xfb\
+\x78\x30\xb0\x33\x6a\x80\x25\x21\x2c\x29\x37\x11\x26\x1e\xa9\xec\
+\x5d\x58\x79\x07\x26\xcf\xaa\x25\xf3\x50\xdc\xfa\xb5\xc4\xf2\x8a\
+\xa5\xd8\x86\x7d\x37\x05\x22\xb9\x67\x70\x12\xae\xde\x6b\x63\x99\
+\xd0\x6b\x00\xbf\x9d\xc0\x6e\x60\x4f\x40\xdc\xbd\xdb\xc1\xf1\x8f\
+\xea\x85\xa2\x8e\xb9\xf2\xf6\x99\xe5\x3a\x48\xd9\x7b\x06\xfc\x7e\
+\x5a\x25\x99\x8f\x49\x2f\x1e\xf2\x0a\xbf\x81\xc5\x30\x14\x38\xa8\
+\x5b\xaf\xf4\x4d\x6e\x09\xec\x07\x0e\x01\x87\x6d\xec\x5c\x4e\xc3\
+\x04\x45\x67\x62\xf8\x8d\xe1\xec\x3c\xd9\x3a\x9c\xbc\x61\xaf\x88\
+\x94\x1a\xe8\xe7\x33\x93\x3b\x61\xf5\x34\xf8\xa2\xa1\x33\xb0\x2b\
+\x34\x31\xa7\x10\xf2\x3f\x04\xf9\x1e\x81\x34\x7d\x05\xe4\xa1\x09\
+\x8f\x47\x03\x2f\x67\x29\xfc\x2f\xdc\x9d\xf0\x8d\x4e\x9b\xf4\x8d\
+\x4a\x5d\xc5\x2f\x9a\xa7\x84\x93\x33\x1a\x9a\x28\x18\x81\x12\x2f\
+\x8d\x48\x2e\x18\x00\x04\xdb\x19\x58\xa0\x70\x12\x5f\x28\x40\xb1\
+\x64\x3a\xda\x31\xf8\xe0\x18\x35\xe8\x86\x32\x2d\x06\xda\x66\xd6\
+\x68\x67\x68\xdb\x06\x31\x33\xc6\x98\x81\xde\x14\xc1\x4b\xf5\x6d\
+\x2b\xd8\x0e\x80\x0e\xf7\xc4\x68\x8a\x0c\x6c\x32\x6e\x9c\x0b\xe0\
+\x8a\x17\x08\x70\x67\x38\x0a\x1c\x01\x9c\x99\xa7\x11\x4f\x8f\x15\
+\x2e\x50\x77\x93\xff\x02\x6e\x02\x38\xfc\xe3\x20\x49\xdb\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x07\x68\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x07\x2f\x49\x44\x41\x54\x58\xc3\xcd\x97\x09\x54\x54\x65\
+\x14\xc7\x9f\x80\x88\x20\x04\x0d\x28\x9b\x6c\x02\xb2\x0c\x33\x2c\
+\x6e\xa0\xc0\x11\xe8\xc4\xa8\x84\x6c\xb9\xa0\x64\x66\xb9\xe6\x12\
+\x5a\x96\x29\x89\x5a\x4a\x08\xa7\x52\x3a\x99\x51\x83\x10\x03\xea\
+\x00\x03\x1a\x10\x20\x8c\xc0\x40\x12\x01\xa3\x43\xc0\x60\x25\x21\
+\xab\x02\x31\x0c\xdb\xcc\xbb\xdd\x37\x3d\x3b\xed\x82\xc9\xa9\x77\
+\xce\xef\x0c\xe7\xfb\xee\x7b\xf7\x7e\xf7\xfb\xbe\xff\xbd\x10\x00\
+\x40\xfc\x97\x4c\xc8\xc8\xdd\xdd\x9d\xe9\xe6\xe6\x76\xdc\xd5\xd5\
+\x95\xeb\xe2\xe2\xf2\xd6\xfc\xf9\xf3\xfd\x09\x82\xd0\x46\xd4\x1e\
+\xea\xe0\xdf\x3e\xe8\xd8\x2b\x24\x24\xe4\x56\x61\x41\x7e\x7f\x7d\
+\x5d\xad\xfc\x62\x66\xe6\xc0\xf6\xed\xdb\xda\x99\x4c\x66\xb6\xbd\
+\xbd\xfd\x06\x34\xd1\x45\xd4\x89\xa9\x7a\x30\x80\xf7\x44\xa5\xe9\
+\x32\x68\xdd\x08\xd0\xe8\x03\xf0\xfd\x2e\x80\xfe\x02\xa8\xad\x11\
+\x8d\x7a\x7b\x7b\xdf\xd1\xd6\xd6\x0e\x40\x33\x83\x29\x0b\x00\xd3\
+\x5f\x0f\xcd\x2b\xa1\x86\x4b\xc0\x86\x15\x04\xbc\x14\x4a\x80\xf0\
+\x1c\x66\xb7\x71\x19\x24\xc4\x1d\x1e\x32\x37\x37\xbf\x80\x66\xce\
+\xc8\xf4\x29\x09\x80\xcd\x66\x7f\x2e\xe1\x11\xc0\x4b\x60\x2a\x4c\
+\x4c\x4c\xc4\x16\xa6\x3a\x85\x6b\x38\x86\xa3\x50\x45\x40\x45\xce\
+\x66\x85\x8d\x8d\xcd\x37\x68\xc6\x41\x9e\x98\x8a\xd5\x3f\x1d\xb5\
+\x61\x8d\x74\xe8\xc6\x22\xb2\x98\x17\xa9\xb0\xb4\xb4\x14\xe3\xf0\
+\xab\xae\x2c\xfb\xda\xd6\x5c\x53\x10\x0b\x96\x90\xb6\xb6\xb6\xcd\
+\x38\x16\x85\x18\x4f\xc5\xfe\x27\x37\x5c\x4f\x18\x86\x6a\x5d\xe8\
+\xaa\xdd\x0d\x5e\x9e\x4b\xee\xa3\xc3\x2b\x78\x00\xcb\x5a\x0a\x9f\
+\x22\x6f\xf2\x9d\xc9\x79\xf3\xe6\xb5\xa2\xe9\x56\xc4\xfc\xb1\x07\
+\xe0\xe4\xe4\x14\x7e\x64\x9b\xd1\x48\x7e\x02\x01\xf7\x84\x1e\xd0\
+\x71\xbb\x98\xcc\xcf\xf9\x68\xa4\x40\x70\x4e\xde\xfd\xf5\x76\xc8\
+\x88\xb3\x54\x9a\x9a\x9a\xde\x40\xd3\x17\x10\xd3\x09\x2c\xc8\x8f\
+\x3a\xd4\x2c\x16\xeb\x88\xb5\xb5\x35\x0b\x87\x66\x3c\xec\x1d\xdd\
+\xdd\xeb\xf5\x12\xa2\xa3\x74\xee\x1c\xdb\x3e\x83\xec\xae\x5a\x0f\
+\x77\xeb\xe2\x54\x74\x55\xae\x83\xca\x0c\x8e\x12\x3f\x24\x41\xbb\
+\x8d\xc8\x9c\x7f\x70\xfc\x7c\x58\x58\x58\x69\xdd\x37\x55\xb2\xf1\
+\xb1\x11\xb2\xef\x7e\x97\xc2\xce\xce\xee\x13\x9c\xb2\x7f\x58\x00\
+\xd4\xfd\x36\x43\x56\x72\x7c\xe6\xdc\xc8\x8f\x27\x60\xac\x8c\x01\
+\x23\x65\x26\xa0\x2c\xd5\x04\x59\xc5\x62\xc0\x2c\x75\xe1\xfc\x96\
+\xbf\xca\x00\xe5\x38\x34\x34\xb4\xb4\xae\xb6\x62\x68\x64\x64\x04\
+\x54\x0c\xcb\xa0\x49\xfc\xa5\x02\xb7\xae\x06\x4d\x82\x26\xb2\x13\
+\x1a\xc8\x93\x46\x46\x46\x2b\x22\x02\x67\x0f\x76\x67\xe1\x15\x2c\
+\xa1\x29\xd3\x81\x7d\x3b\x23\x64\x38\xf7\x11\xda\x38\x50\x01\x7b\
+\x78\x78\xe8\x52\x8e\x51\xbc\xca\x6e\x54\x97\x0c\xf5\xf7\xf7\xc3\
+\x2f\x0c\xc0\xbd\x6e\x29\xf9\xda\x2b\x91\x72\x9f\xc5\x73\xee\xea\
+\xeb\xeb\x67\xa1\x7d\xc4\x64\x8e\x84\xf6\x42\x37\xab\xb8\xb7\x5e\
+\x9a\xa9\x84\x22\x74\x7e\x6b\x13\x90\xf2\xdb\x20\xf8\x6c\xdb\x38\
+\x6a\x41\xe1\xac\x59\xb3\x82\xf0\xca\x1e\x58\xbf\x36\xac\xa9\x42\
+\x98\x3f\xd4\xd1\xd1\x01\x0f\xe8\xea\xb8\x03\xd7\x8b\x2e\x28\x7c\
+\x97\xba\xc8\xd8\x4e\x86\xd4\x4d\x3a\x8b\x6c\xa3\x2e\xda\x64\x02\
+\x98\x46\xed\x73\xb0\xbf\x49\x91\x54\x14\x0f\xa3\xa3\xa3\x2a\x7a\
+\x6f\xe7\x92\x28\xc9\xad\xe1\x61\xab\xda\x45\xd7\x05\x23\x52\xa9\
+\x14\x28\x5a\xa5\xad\xaa\xdf\x16\x49\x05\xb9\x7f\x77\xf8\x30\xcb\
+\xc9\x44\x3a\xd7\x58\x4b\x80\xdf\x88\x45\xc2\x91\xf9\xb4\x8c\x4f\
+\xea\xd1\x30\x36\x36\xf6\xe5\x70\x38\x8d\x83\x83\x83\xa0\x62\xa0\
+\x1b\x2e\xf3\x92\x94\x99\x99\x99\x50\x59\x59\x09\xf5\xf5\xf5\x2a\
+\x6e\x36\xd4\x40\xee\xa5\xc4\x71\x67\x47\x9b\x4e\x57\xa7\x27\x6b\
+\xf1\xdd\x44\xfa\xac\x78\x22\x26\x8f\xac\x9c\xb8\x5a\x07\x47\x47\
+\xc7\x0f\xbf\xaa\xbc\x3a\xde\xd3\xd3\x03\x5c\x2e\x17\x62\x62\x62\
+\x80\xcf\xe7\x43\x72\x72\x32\x08\x72\x04\x20\x12\xf2\xc9\x17\x37\
+\x05\xca\xed\xe7\x99\x36\x6b\x6a\x6a\x52\x52\xfd\x2a\x75\x90\x11\
+\x1b\xba\x8a\x4e\x7b\x14\x51\x5a\x48\x95\xe4\x15\x81\xbe\x8d\xe9\
+\xdc\xb8\xb1\xb4\xb4\x34\x55\x8a\x3d\x3d\x3d\x41\x4f\x4f\x0f\xda\
+\xda\xda\xa0\xa0\xe0\x2a\xbc\x1f\xbf\x6f\x1c\xe5\xb9\xcd\xda\xc2\
+\xa0\x1c\x5f\x7b\x17\xa1\x2a\x26\x1b\x61\xd0\x07\x7a\x52\x4e\xcd\
+\x90\x1d\x48\xfe\xae\x2d\x3e\xb7\x0b\x52\x9f\x1d\xcc\xbb\x9c\x04\
+\xe9\xe9\xe9\x90\x98\x98\x08\x67\xcf\x9e\x05\x1e\x8f\x07\x39\xd9\
+\x39\xd0\xdc\xdc\xac\xa2\xb3\xbd\x89\x0c\x5a\xe9\xf7\x13\x6e\x55\
+\x0e\x7d\xca\x6d\x68\xc1\x99\xf8\xaa\xb1\x06\x04\xa3\xd3\x4f\x57\
+\xaf\x5c\xdc\x98\x92\x10\xd0\xd3\x79\x6d\x99\x02\x84\x96\x30\x96\
+\xa3\x09\x82\xd3\xda\x90\xce\x3d\x09\xbc\xcf\x93\xe1\x9d\xd8\x97\
+\x15\x27\x8e\xee\x57\x66\x65\x9c\x51\x36\xd4\x57\xe1\xde\xd7\x81\
+\xf8\xa6\x18\x7e\x1a\xb8\x07\x27\x8f\xed\x1d\xc4\xbb\x9e\x8c\x9f\
+\xb3\x9c\xd0\xca\xb1\xdb\x61\xa0\xe3\xdd\x48\xf9\xc9\x83\x4b\x7f\
+\x6c\xc8\xf5\x91\x83\xc8\x01\x3a\xd3\x66\x02\xff\x4d\x02\x4e\xef\
+\x50\x27\xfb\x2e\x59\xc0\xdd\x14\x02\x72\x12\xcc\xc0\xdf\xd7\x4d\
+\x86\x32\xdc\x80\x1a\x70\x6d\xee\xdc\xb9\xd5\x21\xab\xbc\xfa\x2b\
+\x8a\x3e\x21\x45\x22\x11\x50\x74\x75\xfe\x08\x5f\x5e\xbd\x30\x8a\
+\x8a\x97\xc6\x60\x30\xdc\xfe\x31\x0b\xb8\xda\x08\x3f\x5f\x0f\x71\
+\x4a\xfc\xa2\x1e\x59\x39\x93\x84\xe2\xd9\x50\x83\xfa\x1f\xbb\x59\
+\x9d\x0c\x7d\x4a\x7f\xc8\xcb\x9d\xd1\x84\x6d\xd8\xdd\xb6\x3c\x77\
+\x52\x91\xa5\x0b\xe7\xf6\x10\xe0\xb7\xc4\xf0\x0e\xbe\xfa\x01\x7d\
+\xb2\x43\x9c\xec\x18\xf1\x58\xa8\xaa\x4e\x1d\x8d\x1a\x2e\x2b\xb9\
+\x02\xc5\xc5\xc5\x20\x91\x48\xa0\xa5\xb1\x5a\x89\x41\xf0\x31\xc8\
+\x55\x68\xa7\xf3\xa7\x20\xa8\x92\xeb\xe7\xeb\x2e\x6e\xcd\x73\x18\
+\x85\xab\xb3\x40\xf8\x0e\x01\x3b\xc3\xa7\x2b\x23\x02\x0d\x7a\x2d\
+\xcc\xf4\xae\xa3\xc9\x39\x2b\x2b\xab\x92\xf3\x6f\xb3\x06\xfb\x4a\
+\x56\xc0\xc7\x7b\xa7\xc3\xce\xb5\x3a\x7d\x38\x9e\x82\x6c\x46\xec\
+\xe8\x8e\xc8\x02\xf1\xc1\xda\x90\x1e\xb0\x7c\x51\x6f\x7e\xd6\xbb\
+\xca\xbc\xbc\x3c\x10\x0a\x85\xd0\xfe\x83\x84\x5c\x1d\xe4\xdf\x8e\
+\x5b\x72\x10\x6d\x8c\x7e\xb7\x25\xaa\x92\x9b\x61\x33\x0c\x97\xd5\
+\xe0\xfc\x01\x03\x32\x24\xc0\xa0\x13\x55\xad\x10\xa7\xce\xe0\xef\
+\x71\x2a\x85\x27\xa2\x99\x5d\xf2\x4a\x2f\x28\x4f\x62\xc3\xde\x0d\
+\xda\x03\x38\x97\x81\xec\x43\x98\xbf\xa9\x68\xea\xb4\xb0\xd8\xe1\
+\x01\x3c\x88\xd9\x10\x1d\x3f\x14\x26\xcf\xbe\x7c\x01\xb2\xb3\xb3\
+\xa1\xbd\xad\x19\x9e\x8b\x0a\xef\xc5\xf1\x24\xba\x74\xff\x12\xc4\
+\x6a\x0e\xbb\x11\xb2\xa7\x43\x4b\xaa\x07\x2c\x5b\x68\xd6\x8b\x4e\
+\xaf\xe0\xf0\xeb\x98\xb2\x37\xb0\x03\xe6\xf3\xdf\xb7\xbd\x3f\x5c\
+\xce\x86\xa6\x8c\x40\xd8\xb5\x76\xc6\x18\xce\x17\xe1\xfc\x1b\xc8\
+\x02\x64\xe6\xdf\xd4\x0e\x4a\x68\x96\x51\xd9\xf0\xf7\x5d\xd0\x9b\
+\xf9\xe9\x7e\x65\x6a\x6a\x2a\x48\x6e\xd5\x41\xec\xe1\x2d\x83\x28\
+\xdd\x31\x74\x91\x53\x27\x96\x7b\xb3\x25\x43\xd8\xef\x75\x17\x46\
+\x40\xee\x19\xf3\xb1\x35\x41\x0e\xf7\x51\xd3\xbf\x7b\xe6\x69\x66\
+\x6b\xfd\x25\x33\xb9\xbc\x84\x0d\xdf\x5e\x0c\x85\x17\x83\x35\x48\
+\x96\xa3\x81\x98\xbe\xdb\x7e\x0f\x91\x51\x35\x7a\xbf\x6d\x0d\x0d\
+\x0d\xf7\xa0\x2e\x94\x46\xef\x08\x18\x4a\xe3\x9e\x06\x61\x51\x0a\
+\x25\xdd\x54\x1b\xb7\x5c\xf5\x0d\x67\x67\xe7\x98\xfd\xeb\x66\x8c\
+\xb7\x70\x59\xd0\xfb\x45\x10\xc8\x85\x2e\xa0\xfc\x4a\x1f\x94\xd5\
+\x06\xd0\x97\xbf\xfc\x57\xe7\x5e\xee\x4f\x34\xe2\x0b\x49\xf4\xdd\
+\x36\x99\xe0\xbd\xd6\xa0\xfb\x84\x25\xd8\xce\x9d\xc7\xb3\xd6\xb3\
+\x39\x72\xa9\x0c\x6f\xc5\x17\x38\xf6\x2c\x62\x48\x19\x31\xdc\x98\
+\x66\x89\x5b\x23\x66\xca\x0f\x45\xaa\x01\xef\x10\x03\x04\xb1\xa6\
+\x2a\x92\xa3\xf5\xe0\x40\x94\x9a\x92\x76\xfe\x21\x12\x89\x58\x4d\
+\x52\xd1\xa6\xd1\xf2\x6b\xad\xa5\xa5\x15\x81\xaa\x19\x87\x7f\x47\
+\x23\xde\x0f\xb2\xa8\x41\x9f\xe0\xe0\xc5\x2c\x9d\xcf\x9e\x0b\xd6\
+\x95\xec\x5a\xa7\xd3\x8e\x74\x6c\x0a\xd6\x91\x1a\x33\x88\x8b\x38\
+\x77\x8a\x8e\xd8\x9a\x78\xf4\xf6\x5b\x83\x96\x63\xaa\x6f\x70\xa2\
+\x57\xaf\xfe\xc7\x49\xea\x54\x73\xe8\x1e\x6f\x2f\xb2\x87\xd6\x72\
+\x4f\x3a\x95\x8f\xa3\xf7\x57\xa7\xfd\x4d\xfb\xbb\x49\x5d\x7a\x8f\
+\xad\x68\x19\x9d\x8d\x68\x3d\x52\x05\xfb\x3f\x3c\x8f\xe5\xbf\xe3\
+\xa9\xe4\x67\x2f\x79\x73\x70\x22\x76\x00\x17\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\xca\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x05\x91\x49\x44\x41\x54\x78\x5e\x8d\x95\x0b\x6c\x54\xc7\
+\x15\x86\xbf\x99\xfb\xd8\xf5\x9a\xf5\xda\x06\xf3\x30\x8e\x1d\x13\
+\x48\xf3\xb0\xdc\xd0\x84\xf4\x21\x4a\xd4\x9a\x10\x48\x1c\xea\xa4\
+\x69\xe2\x84\x20\x28\x88\x47\x53\x09\x0a\x69\x52\x29\xa9\x2a\x48\
+\x48\xab\x4a\x81\x54\x51\xc5\x2b\x85\xd0\x16\xb7\x29\xb8\x51\x12\
+\x90\x5c\x2b\x34\xcd\x8b\x50\x4a\x95\xb5\xe5\x26\xc6\x50\x82\xed\
+\xae\xb7\x36\xf5\xf3\x81\xbd\x8f\xbb\x73\xba\x8a\x56\xb8\x1b\x5a\
+\xe8\x2f\xfd\x73\x74\x66\xa4\xf3\xcf\x3f\x47\xa3\xa3\x44\x84\x0c\
+\xd8\xb7\x4e\x2d\xfd\x43\x98\x79\x6d\x11\x66\x8e\xc7\xf1\x23\x28\
+\x40\x50\x08\xa0\xf2\x72\x29\xbc\xa9\x94\xf8\xd7\x6e\x66\x27\x9a\
+\xe6\x55\xbb\xa4\x9b\xab\x41\x44\x3e\xe5\xee\xd5\x3c\xd2\x52\x77\
+\xdb\xd0\xa6\x07\x27\x27\xe4\x7f\x20\xe6\x89\x3c\xfd\xed\x42\xf9\
+\xdb\x1e\xf5\xaf\x23\x4f\x13\xdd\xfa\x00\x65\x22\xc2\x95\x68\x93\
+\x81\xf1\x58\x59\x71\xfb\xbc\xbc\xe2\x93\xed\x74\x75\x75\x60\x3b\
+\x01\x3c\x2f\x89\xa0\xd0\xca\x22\x85\xe2\xa7\x5b\x36\x53\x22\xfd\
+\x9c\xe9\x20\x77\x74\x90\x84\x5f\xb3\x65\xe7\x0a\xd5\xa5\xe1\x5a\
+\x81\x5c\xdb\x66\xff\x9a\x7d\x72\x84\x09\xa0\xc9\x40\x0c\x53\xb1\
+\x87\xc0\xeb\xa5\xb3\xa3\x9d\xa6\x70\x33\xe1\x70\x13\xcd\x69\x7e\
+\x18\x0e\xf3\xde\xe1\x2d\xcc\xcd\x0f\x53\x3e\xeb\x56\x42\xe5\xdf\
+\xf2\xcd\xbe\x63\x63\xa8\xfa\xb1\xdd\x0f\xdd\xfb\x64\xc3\xa6\x65\
+\xcf\x9f\xad\x5d\xbb\x3f\x51\x73\x73\xd5\xda\x03\x3b\x96\xa9\xef\
+\xfe\xd7\x27\xfa\xf9\x23\x34\xc9\xe9\x6f\xca\x73\x1b\x02\xf2\xe2\
+\x8b\x2f\xc8\xea\xd5\xdf\x91\xda\x87\x97\xc9\x3d\xd5\x35\xb2\x70\
+\xd1\xbd\xf2\x54\x8d\x92\xc4\xd8\x90\x5c\x8e\xb8\x24\x92\x63\x97\
+\xb2\x86\x9f\x2d\x8a\xee\x78\x94\x8d\x99\xba\x13\x0e\x8c\x42\xa5\
+\x8c\x61\x4e\x65\x25\xc7\x8e\xd5\xf3\x51\xcb\x31\x22\x1d\x27\x19\
+\xe8\x6d\x21\xe0\x6f\xc3\xe7\x0a\x82\x07\x24\x41\x06\xc0\xf4\x83\
+\xe9\x25\x3e\x36\x40\xff\x85\x4e\xbc\x94\x07\xc0\xe2\x8d\x8d\x33\
+\x5c\x8b\xe5\x4a\x29\x07\x98\xe8\x81\x32\x08\x28\xe6\x55\xe4\x31\
+\x9a\xd0\x8c\x8c\xd8\xd8\xb6\x85\x42\x51\x5e\x1e\xe2\xc2\xf1\x0e\
+\x14\x49\x60\x0c\x52\x17\x41\x04\x94\x22\x11\x1b\x66\xa0\xaf\x1b\
+\x74\x80\xbc\xfc\xa9\x38\x8e\x8f\x50\xf1\x75\x45\x70\x6e\x1a\x10\
+\xb9\x24\x20\x1a\x2c\x5b\x31\xa5\xc8\xc7\xdd\x8b\x4b\x89\x5d\x4c\
+\x90\xf0\x52\x68\xad\xc8\xc9\xb1\x39\xd1\xec\x64\xec\xa6\x80\x18\
+\x68\x0b\xc4\x43\x29\x43\xd2\x8b\xd3\xdc\xf4\x5e\x3a\x5a\x14\x4e\
+\x2e\x21\xda\x71\x2e\x09\xe4\x65\x3b\x50\x08\x8e\xc6\xef\x6a\xb4\
+\xed\x10\xf0\x6b\x40\xb0\x2d\x85\xdf\x67\xa5\x73\x0b\xcb\xd1\x80\
+\x02\xdb\x01\x49\x81\xd1\xd8\x96\xa4\xcf\x40\x52\xe3\xc4\x63\x1e\
+\x29\xaf\x88\xd8\x38\x06\xb0\xb2\x04\x04\x40\x2b\x6c\x5b\x61\x05\
+\x1c\x94\xd2\x1c\x79\xe3\x0c\xaf\x1d\x6d\x65\x6c\x2c\x46\x57\xeb\
+\x10\xbf\x09\xaf\x40\x69\x43\x61\x41\x90\xfb\x6b\xee\x64\xc1\xc2\
+\xaf\x60\xeb\x04\xf9\xa1\x00\xe5\xa5\x93\x89\x7b\x3e\x82\xa1\xe9\
+\x04\x5c\x3c\xc0\x7c\xd6\x01\x68\xf5\x29\x95\xa3\x89\xb4\x0f\x70\
+\xf0\xe8\x38\x0f\x6f\xfe\x0b\xa7\x3a\x83\xcc\x1c\x18\xc6\x32\x2e\
+\xae\x11\xe6\x96\x5e\xe0\xd5\xd7\x7f\xc0\x82\x45\x5f\xc4\x76\x85\
+\xe0\x24\x07\x9f\x5b\x80\x51\x41\x7c\x39\xd3\xf0\xbb\x18\x20\x99\
+\x25\x60\x5b\x08\xd6\xc4\xcf\xc8\x0d\x38\x78\xf1\x51\xfa\x47\x87\
+\x69\xe8\x2a\xe4\xa3\xd6\xc9\x24\xfa\xc0\x17\x87\x4d\x4b\x82\x74\
+\x76\x9e\x07\x46\x41\x3c\x5c\x3b\x85\x63\x81\x4a\x2f\xb8\xb9\xe9\
+\x1c\x03\x98\xac\x8f\xe6\xda\x80\x23\x60\x03\x16\x14\x5c\x13\xe4\
+\x89\x75\x33\x78\xfd\x99\x5b\xb8\x2d\xe7\x14\x3a\x07\xd0\x10\x57\
+\xe0\x79\x43\x04\x73\x73\xc0\x18\x90\x4c\x10\x00\x05\x80\x12\x00\
+\xc8\x72\xb0\xb5\x9e\xca\xfe\xa2\x30\x0f\xdc\x57\xcc\xb4\xb2\x11\
+\xa2\xd1\x21\xce\xb6\xf5\x30\xbb\x62\x01\x3d\x6e\x11\xe2\x07\x72\
+\x40\x01\x96\x0d\x22\x99\xca\x69\x8a\x08\x00\x64\x22\x64\x0b\xa0\
+\x94\x7a\x70\xeb\x81\xdd\xd6\x94\xd9\x9f\xe3\xb9\xfd\x3f\x61\xb8\
+\xe7\x38\x45\x25\xb3\x28\xbb\x7d\x2d\xd1\xfb\x56\xf2\xe6\x19\xf0\
+\x5c\xc8\x9b\x0a\xf6\x18\xe0\x68\x8c\x11\x10\xc1\xa4\x0c\xc6\x98\
+\xcc\xcd\x0d\x1a\xb9\x5c\x00\xe8\xee\x6d\xff\x3b\xd7\x57\xd7\x52\
+\xb2\xbd\x91\x9e\x9e\x24\xed\x9e\x43\x63\x2f\x44\xbb\xc1\xe7\x87\
+\xbb\x3e\x0f\x37\xfc\xf3\x4f\x78\xbe\x59\xcc\x29\x2f\xa3\xf5\x62\
+\x02\x8c\x60\xc4\x20\x69\x02\x99\x98\x0d\x0d\x20\x22\xef\xc6\xde\
+\x7c\xbe\xf3\x77\xcb\x2b\x09\x1e\xd9\x85\x52\x31\x86\x05\xf2\x7c\
+\xf0\xd5\xc2\x38\x8f\x15\x9f\xe1\xa6\x77\x96\xf3\xf1\x6f\x1f\x67\
+\xe0\xed\x27\x88\x45\x1a\x99\xff\xe5\x4a\xc4\x4b\x61\x52\x29\x44\
+\x24\xe3\x48\x01\xf6\xa5\x56\x64\x35\xf9\x4b\x37\xd0\x77\x78\xcf\
+\x17\x78\xeb\xc0\x8f\x71\x5f\xda\x4c\xcd\x89\xed\xac\x6b\xdf\x47\
+\xd5\xc7\xcf\xd2\x73\x68\x25\x47\xeb\x0e\xd2\xd0\x70\x88\x6d\x4f\
+\xad\xe0\xb5\x5f\x3d\xc3\xd2\xea\xf9\x24\x93\x1e\x06\x0d\xca\x45\
+\xd9\x41\x2c\x77\x0a\xe0\x60\x69\x34\xa0\xb2\x9a\x1c\xf7\x50\xf6\
+\x94\x20\x47\xf7\x46\xf8\xf3\x07\xbf\xe0\x83\x0f\xa1\x25\x02\x17\
+\xc7\x41\x83\xb7\xe6\x4e\x48\xe1\xd8\xa5\xe5\x25\xd4\xa5\x2f\x50\
+\x50\x90\x8f\x88\x83\xe5\x4c\x42\xdb\x79\x58\x6e\x88\xe4\x68\xdc\
+\x74\xb7\xbd\x3c\x7a\xea\x3c\x9f\x00\x5e\x96\x03\x01\x0b\xaf\x8d\
+\x37\x1a\xe1\x9d\x26\xe8\x1f\x24\x31\x33\x48\xdf\xad\x33\xe8\x9c\
+\x3f\x9d\x56\xe3\x31\x60\x8c\x83\x31\x2e\x05\x85\x25\x68\x67\x3a\
+\x6e\x70\x0e\xda\x2e\x26\x7a\xba\x69\xe8\xc4\xc1\xc7\xff\xf1\xfb\
+\x1f\x95\x9f\xdd\xb2\x79\xd5\x5b\x0d\xcd\xd4\x03\x83\xd9\x23\x73\
+\x15\x07\xce\xfd\x11\xd9\xba\x8a\xc1\x9d\xeb\xf9\xa4\x6e\x03\xa7\
+\xd7\x57\x51\x7f\xf7\x2d\x6c\xcb\xf7\xb3\x64\x7b\x2d\xef\x4b\x2a\
+\x2e\x22\xa3\x22\xa6\x4f\x06\x23\x27\xc7\xff\x5a\xbf\x21\xf2\xea\
+\x0f\x4b\xda\x7e\xbd\x9e\xd6\xaa\x1b\xd9\x9e\x6b\xf3\x0d\xe0\x46\
+\xa0\x00\xd0\x22\x32\x21\xb0\x6f\x1d\x5f\xdf\xbb\x86\x43\xdf\xbf\
+\x87\x5d\xf3\x66\xf1\x64\x51\x90\x25\xc0\x6c\x20\x5f\x44\x78\x79\
+\x2d\xbf\x4c\x8c\x74\x49\xdf\xf9\xe3\xb1\xb7\xf7\x2c\xed\x78\xe5\
+\x7b\x56\xdb\xe2\x0a\x5e\x2a\x2b\x60\x25\x30\x17\x98\x0e\xe4\x7c\
+\x76\x26\x73\xd9\x06\x84\x80\x7c\xc0\xf9\xcf\xfd\x57\x36\xb0\x70\
+\xef\x6a\xea\x9f\xbd\x9f\xc3\xf3\xe7\xb0\x2d\xe0\x50\x0d\x5c\x07\
+\x4c\xba\xd2\xd0\x57\x99\xa2\xff\x37\x94\x52\x21\xc0\x01\x46\x44\
+\x24\xce\x55\xf0\x6f\x03\xe2\xf6\xe2\xcc\x69\x65\x93\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x06\x7e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x06\x45\x49\x44\x41\x54\x48\x89\x9d\x95\x7b\x6c\x95\x77\
+\x19\xc7\x3f\xbf\x73\xde\x73\xeb\xe5\x9c\x5e\xe0\x40\x69\xbb\xb2\
+\x5e\x28\xe5\x0e\x45\x1c\x63\x83\x11\xc9\x14\xc7\x60\x5b\x34\x38\
+\x63\x66\x22\x53\x11\x63\x44\x37\x35\x26\xc6\x7f\x66\x48\x34\x26\
+\x6a\x36\x5d\x30\x64\x71\x19\xc8\x28\x0e\xc4\xae\x60\x69\x59\xa1\
+\xe1\x3a\x2a\xd4\xf5\xc2\xb5\xd0\xd3\x3b\xbd\x9d\x9e\xeb\x7b\xf9\
+\xbd\xef\xfb\xf3\x1f\x34\xa8\x98\xcc\x3d\xc9\xf3\xef\xe7\xf3\xe4\
+\xfb\xc7\xf3\x15\x4a\x29\x3e\xc9\xbc\xfd\x43\x51\x5c\x51\x1a\xda\
+\x3e\xbb\x6c\xc9\xf7\x95\xeb\xe8\x23\xb1\xce\x57\x8f\xb6\xbb\x6d\
+\x5f\xdd\xc4\xd2\xb4\xc5\xe0\xa6\x57\xd5\x38\x80\xf6\xff\x82\xff\
+\xf0\x23\x11\x2a\x29\x60\xeb\xb2\xfa\xb5\xdf\xa9\xa8\x7b\x6e\x5d\
+\x51\x71\x2d\xae\x27\x48\x76\xf2\xd9\x9f\x6f\x79\xb2\xb8\x2f\x53\
+\xf0\xe4\x0b\xc1\x64\xe3\x7e\x21\xc4\xd7\x94\x52\xf2\x63\x0b\x84\
+\x10\xe2\xf8\x1e\xd6\xd5\x56\x45\x5f\x99\xbf\x62\xc7\x33\xd1\x79\
+\x6b\x7c\x22\x79\x8d\xcc\xdd\xc3\xa8\xbc\xc5\x8c\xfb\xbf\xb8\x3c\
+\xbf\xfe\xc5\xe5\x95\xb5\x9f\xe6\xc6\xe1\x13\xf3\x40\x86\x80\x87\
+\x0b\x3a\xde\x14\x1a\x8a\xc0\xea\x5d\x2a\x03\xd0\xf8\x9a\xa8\x3c\
+\xf3\x46\xf1\x37\xcb\x17\x6e\xfa\x56\xd9\x82\x17\xf3\xbd\xd9\x3e\
+\xec\xe1\x26\x46\xc6\xa7\xe9\x9f\x09\x23\x8b\xca\x59\xf5\xec\x2e\
+\xc2\x91\x08\x72\xea\x12\x77\x86\xad\x2e\xc0\xfb\x5f\x11\xfd\xe4\
+\x2b\xc2\xf7\xc4\x22\x9e\x88\xce\x5f\xbe\x53\xf3\x87\x0b\x9a\x7e\
+\x26\xf6\xf9\x7c\x62\x56\xcd\xaa\xad\xaf\x94\xd5\x6c\xa9\xca\xf5\
+\xf9\xb1\xee\xb5\x12\x9f\x99\xe4\xc6\x10\xa4\x73\xd6\x32\x6f\xc5\
+\xe7\xa8\x5e\xb0\x08\x5c\x89\x02\xe2\x77\x0e\xd9\xad\x97\x9c\x0f\
+\x00\x09\x20\x94\x52\x08\x21\xc4\xb1\xd7\x58\x38\x2b\x3a\x7b\x77\
+\xc5\xb2\x1d\x2f\xcd\x9e\xb7\x3a\x28\xac\x19\xe2\x89\x61\xdd\x17\
+\x88\x68\x91\x48\x89\x4f\x4d\x5f\x65\x66\xa2\x8f\xc1\x29\x41\x5f\
+\xba\x8a\xea\x95\x2f\x50\x5a\xb5\x84\x70\xae\x1f\x5d\xd7\x51\xca\
+\x8b\x2b\xbc\x74\xbf\xbb\x66\x7c\xf8\xef\x9d\x57\xfd\xc2\x17\xd0\
+\xa2\xf2\x07\xa2\xf5\x97\x62\xa5\xc7\x17\x5e\x5b\x51\xf7\xf4\x9e\
+\x92\x05\xdb\x23\x41\x6b\x18\x95\xba\x89\x47\xd3\x20\x10\x45\xd9\
+\x3a\xfa\xcc\x00\x77\x46\x52\x0c\x66\x4a\x09\x94\x6d\x66\x79\xfd\
+\x06\x42\xb9\x21\x5c\xdb\x42\x4a\x89\xeb\x7a\x49\x26\x27\x18\xe9\
+\xda\x8f\xd1\x7b\x50\x2e\x5c\xbf\x43\xcb\x8f\x56\x88\x0b\xef\xec\
+\x8a\x69\x91\xa2\x92\xd7\xa3\x8f\x6e\xae\x7f\x64\xc1\xb6\xa0\x1a\
+\x6f\x45\x39\x3a\x1e\x6f\x00\x29\x25\xb6\x11\x63\x62\x32\xc9\xb5\
+\xd1\x20\x9e\x39\xdb\xa8\x7b\x6c\x33\x25\x25\x51\xa4\x65\x60\x19\
+\x59\xa4\xed\x60\x18\x16\x77\x7b\x9a\xe9\xee\x38\x46\x6d\xc5\x1c\
+\xd6\xef\xd8\xeb\xf3\x05\xe3\xa4\xa7\x53\x28\x22\xb3\x34\x8f\xd7\
+\x57\xe5\xf7\x79\x82\xe9\xa1\x76\x42\x9e\x14\xc2\x9b\x8b\x61\x5a\
+\x24\xd2\x3a\xd7\x06\x1d\xd2\x39\x8f\x51\xbd\xfe\x19\xca\xca\x2b\
+\xf1\x0a\x07\x23\x9b\xc6\x51\x02\xcb\xb4\x18\x1d\xe8\xa2\xe3\xf4\
+\xef\x40\xf9\xf8\xcc\xd3\x5b\xa9\xae\x8a\x20\x93\xed\x4c\x8f\x19\
+\xdc\xbc\xf0\x11\xbd\x03\x37\x0f\x69\xca\x75\x3d\x42\xd9\x38\x2e\
+\x58\xca\x83\x2d\x2d\xee\x8c\x18\xf4\xa7\xca\xa9\x58\xf1\x05\x56\
+\xd6\x2c\x21\xe0\xf7\x22\x2d\x13\x43\x4a\x6c\x57\x23\x3e\xd5\xcf\
+\xd5\xd3\xfb\x18\x1f\xe9\x61\xe9\x8a\xc7\xd9\xb0\xbe\x1e\xd7\x9a\
+\x22\x11\x6b\x24\x9e\x01\x3d\x91\xc3\xb5\xcb\x2d\x83\xef\x5f\xe1\
+\x3d\x0d\xc0\x55\x60\x49\x85\x61\x59\x0c\x8c\x26\xb9\xeb\x3e\xc5\
+\xc6\xe7\x76\x92\x17\xd2\x90\xb6\xc4\xd0\x4d\x2c\xdb\xc1\x34\x2c\
+\xae\x77\xbc\xc3\x8d\x8f\x5a\x29\x2d\xab\xe1\xa5\x97\xbf\x4d\x24\
+\x34\xc4\xcc\xd0\x71\x46\x46\x06\x11\xde\x10\xc1\xf0\x62\xae\xb4\
+\x1d\x4c\xef\x6b\xcb\xfc\xea\xf2\x2d\xba\x35\x57\x81\x6d\x3b\x18\
+\x52\x92\x8c\x67\x68\xbb\x3c\xca\x86\x2f\x7f\x8a\x82\x70\x90\x6c\
+\x26\x83\xe3\x80\x61\x5a\x0c\xf5\x5d\xe0\xea\xd9\x03\xf8\x7d\x41\
+\x3e\xbb\x79\x0b\xd5\xb5\xc5\xe8\x63\xe7\xe8\xbf\x13\xc3\xb4\x6c\
+\x14\x5e\xfc\x79\x95\x4c\x75\x7f\xc8\xdf\x7a\x6e\xb4\x5d\xbe\xc5\
+\x49\x60\x52\xb3\x6d\x17\x4b\xda\x24\x93\x26\x7d\xfd\x53\x64\xc4\
+\x5c\xf2\x0b\xa2\x98\xa6\xc4\xb2\x3d\x4c\x0c\x75\xd1\x79\xb1\x81\
+\xf8\xf8\x5d\x56\x3f\xbe\x99\x35\xf5\x95\x08\xd9\xc7\x48\x77\x03\
+\x99\xac\xc4\xb4\x24\x8e\x23\x09\x86\xcb\x48\xde\x4b\xd0\xf0\x97\
+\xb6\x9e\xbd\x2d\xfc\x02\x18\x05\x74\x4d\x3a\x0a\xc3\xb4\x89\xa7\
+\x4c\x7a\x6f\xdf\x43\x9b\xb3\x84\x70\x64\x16\x89\xf8\x04\x9d\xe7\
+\xff\x48\xec\xfa\x39\x1e\xa9\x78\x84\xcf\x7f\x7d\x37\x05\xc1\x61\
+\x12\x03\x87\x89\xc7\x13\x64\x75\x13\xdb\x96\x64\x32\x29\xfc\xa1\
+\x42\x84\x98\xcb\xd0\x95\xb7\xf5\xbd\x27\xf5\xdf\x98\x92\xbb\x40\
+\x52\x29\xa5\x34\x69\x29\x0c\x43\x12\x4f\x1a\xc4\xee\x19\x2c\x5d\
+\x54\x81\x50\x16\xef\x1f\xf8\x31\x01\x9f\x60\xdb\xf6\x97\x29\x2d\
+\xcf\x41\x1f\x6e\x62\x2c\x36\x42\x3a\x63\x91\x48\x26\x40\xb9\x68\
+\xbe\x20\xbe\xdc\x72\x72\x72\x4b\xe9\x3f\x77\x82\x33\x57\x63\x47\
+\x93\x3a\xed\xc0\x94\x52\xca\x06\xd0\x4c\xe9\x92\xd1\x25\x93\xd3\
+\x12\x6f\xa0\x90\x39\xa5\x35\x9c\x6a\xda\xc7\x9d\xbe\x5e\x76\x7f\
+\xf7\x1b\x94\xe4\xf5\x30\xd4\xd9\x4d\x36\x9b\x41\x08\x0d\xdb\x96\
+\x58\x86\x81\x37\x27\x4a\x7e\xfe\xa3\x88\x89\x31\x9a\xdf\xfb\x7d\
+\xe6\x50\xfb\xf4\xc9\x8b\xb7\xf9\x35\x70\x0f\x30\xff\xf9\x7e\x34\
+\xdd\x52\x08\x5d\x32\x35\x63\x61\x11\xc6\x36\xa6\xe9\xb8\xf4\x01\
+\x9b\x9e\x5a\xc5\xe8\xad\x23\x64\xc3\xf9\x48\xdb\xc1\x34\x4d\x5c\
+\x57\xc7\xa3\xe5\x90\x17\x5d\x8e\x13\xcf\xd2\xd3\xd6\xe8\xec\x3f\
+\xd6\xdb\xfb\xd7\x1e\x0e\x65\x4d\x5a\x80\x7e\x20\xa5\x1e\x28\x19\
+\xcd\x30\x5c\x54\x56\x92\xd2\x5d\x24\x7e\xae\x9c\x6f\x60\x41\x75\
+\x31\xb3\x82\x23\x44\xc2\x61\x10\x1e\x92\xc9\x38\xae\xf2\x10\x0c\
+\x97\xe3\x15\x05\x8c\x76\x7e\xa8\xda\xda\x2f\x8d\xbe\xd9\x6c\x1d\
+\x9d\xc9\xd2\x0c\xdc\x06\xc6\xee\xc3\x9d\x07\x1f\xa8\x66\x58\x0a\
+\xd7\x90\x38\xca\x4f\x2a\x99\xa0\xb6\x6a\x2e\x0b\x2b\x04\x79\x41\
+\x17\xc7\xb1\x71\x1c\x45\x30\x52\x8e\x10\x85\x98\xa3\x03\x9c\x69\
+\x69\x48\xfd\xb6\x39\x75\xea\xd6\x18\x7f\x02\x7a\xef\x83\x67\x00\
+\x43\x3d\xa4\x1e\x35\x47\x81\xab\x04\xca\x4c\x53\x56\x68\xb1\xac\
+\xae\x80\x90\x88\xe1\x0f\x14\x92\x36\x20\xaf\xa8\x0e\x73\x74\x94\
+\xc1\xae\x46\xf7\x8d\xc3\xb7\x3a\x4e\xdf\xa4\xc1\x92\x5c\x04\x86\
+\x80\x29\x40\xff\xcf\xab\xff\x4d\x10\xf0\x7b\xc9\xc9\xd1\x28\x0c\
+\x1a\x2c\x5d\x59\x8d\x9b\xee\x21\x2f\x5a\x8e\xed\x99\x47\x20\x10\
+\x22\x76\xb6\x85\x23\xcd\x57\x06\x0e\x9c\x75\x8e\xa6\x4c\x8e\x03\
+\x31\x60\x1c\x48\x2b\xa5\xe4\xff\x02\xff\x4b\x10\x9f\x9c\xec\x96\
+\xd9\xee\x95\x75\xab\x9f\x2f\x34\xac\xeb\x44\x8a\x4a\x08\xe6\xd4\
+\x92\x88\xf5\xd2\x72\xe2\xd4\xf4\xbb\xe7\xb3\xad\xdd\x03\x1c\x05\
+\xae\xdd\x8f\x23\x01\x98\x0f\x8b\xe3\xa1\x82\xb7\x9a\xdc\x3f\x57\
+\x17\x8f\x8b\x9d\x8b\xed\x8d\x73\x2b\x37\x10\x4e\x0f\xd2\xd1\x74\
+\xd0\x7a\xfd\xc8\xc0\xb9\xce\x01\x9a\x4c\xc9\x59\x60\x04\x98\xbe\
+\x1f\x87\xfb\x71\xc0\x0f\xce\xfc\xb9\x45\x3c\xff\xd6\xf7\xf2\xae\
+\x37\xfe\x74\x91\xfa\xd2\xba\x60\x57\xae\x9f\x3d\xc0\x46\xa0\x06\
+\x28\x00\x34\xa5\x14\x9f\x64\xff\x01\x38\xa4\x6e\x5f\x55\x49\x82\
+\xf9\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x02\xa5\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x00\x04\x67\x41\x4d\x41\x00\x00\xd6\xd8\xd4\x4f\x58\x32\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\
+\x79\x71\xc9\x65\x3c\x00\x00\x02\x37\x49\x44\x41\x54\x48\xc7\xdd\
+\x54\x5d\x6f\x12\x41\x14\xed\x4f\xf3\x67\xf8\x53\xf6\xb1\x26\x1a\
+\x13\x9f\x9a\x18\xfd\x01\x56\x5f\xfa\x68\x0d\xb5\x88\x50\x68\x69\
+\x90\x5d\x0a\xc6\x16\x58\xa0\xb0\x2c\x6c\xf9\xb0\x14\xac\x8d\x0f\
+\xb0\x33\xc7\x73\x67\xd5\xfa\x01\x8d\x26\xf0\x50\x1f\x26\xf7\xce\
+\xb9\x77\xce\xd9\xbd\x77\xee\xac\xdd\xb9\xbb\x6e\x71\x39\x2b\x5a\
+\xd6\x9a\x38\xfb\x6d\x8d\xf5\x58\x88\x97\xc7\x53\xbc\x3d\x05\x1e\
+\xa5\x80\x58\x59\xe1\x75\x55\xe1\x7e\x1c\xd8\x3e\x9e\xd1\xd7\xb8\
+\x17\x53\x88\x11\x7b\x53\x07\x1e\x26\x80\x4c\x1b\x26\xff\x41\x5c\
+\x99\xfc\x44\xe3\xfa\xec\x61\x17\x10\x6e\x23\x90\xf6\x14\xe2\x35\
+\x60\xa7\x12\x1d\x96\x44\x39\x28\xfb\x57\x27\x33\xec\xba\x1a\xc9\
+\x66\x84\x27\x1a\x92\xab\x29\x3a\x45\xaa\x25\x64\x21\xf6\x68\xb7\
+\x3f\x4c\x8d\xdd\x65\x4c\x38\xb2\x3f\x09\xac\xb6\x44\x00\x56\xba\
+\xfe\x00\x96\xfc\x47\xd6\x3c\x01\x67\xb3\xa4\x91\x61\x3d\x33\xac\
+\xfb\x46\x8a\x35\xad\xce\x90\xac\x2b\x3c\x39\x00\xd2\xcd\x08\x7f\
+\x9a\x65\x3f\xdc\xd0\xec\x1f\xef\x03\x29\xf6\x46\xfc\x8d\x3d\x6d\
+\x7c\xa7\xf7\xad\x07\xf3\x04\x8a\x03\x21\x09\x91\xf3\xe5\x60\x88\
+\x64\x6d\x86\x2c\x6f\x4c\xd6\x8b\xf6\x99\x96\x36\x56\xb0\x03\xfa\
+\xe9\x53\x6d\x62\x99\x66\x64\xdf\x05\x40\xe1\x06\x01\xeb\xf6\x35\
+\x79\x85\x57\xd5\xfa\x51\xf7\x18\x87\xc3\x09\x14\x4a\xac\xdd\x73\
+\x5b\xc3\xe6\xa0\xe4\xbc\x10\x9b\xb6\xc2\xd1\x99\xc4\x80\x17\x0e\
+\x50\x64\x3c\xd7\x0a\xf1\x2c\xcf\x46\x06\x1a\xa5\x7e\x84\xdb\x1d\
+\x85\xf7\xf4\xb7\x4a\x30\xf9\xc5\x9e\xba\xee\x81\x38\xee\x05\x03\
+\x3c\xe0\x30\xf1\x88\x64\xa5\x9e\x46\xa1\xab\x49\x36\x43\xbe\x1d\
+\x9a\x98\xed\x93\x84\x02\xb2\x24\x26\x1f\x23\xb8\xec\xc5\xff\x1e\
+\x17\x8e\xfa\x18\xbf\x08\x58\xff\xcf\x24\x2f\xf9\xda\x5a\x7f\x23\
+\xe0\x78\x9f\x80\x72\x9f\xaf\x28\x9f\xec\x06\x7b\x55\x19\x28\x0e\
+\x1a\xe0\x7e\x8c\xf0\x9d\x93\x10\xee\x90\xbd\x09\xf8\xf2\xf2\xa9\
+\xae\x0c\x34\x9a\x93\x05\x83\x36\x4f\xc0\xbf\x04\x9a\x24\xae\x91\
+\xb0\x71\x4e\x91\x91\x46\x95\x22\xe5\x5e\x08\x8f\x44\x75\xc1\xce\
+\x19\x1b\x51\x74\xa8\x4d\x9e\xf7\x0f\x02\xd6\xed\x6b\xf2\x12\xaf\
+\xad\xb5\xb0\xee\xfd\x2b\xc0\x67\x1d\x6d\xbe\x98\x67\x9f\x59\xd3\
+\x0b\x0e\x5a\x27\xc2\x5a\x23\x45\x5c\x1b\x2b\xfb\x02\xa7\x3e\x60\
+\x9f\xba\xbc\x0c\xf9\x56\x84\x05\x97\x7a\x71\x0f\x24\xd0\xbb\xd2\
+\xf0\xc7\x0a\x9d\x89\x46\x77\x22\x02\xca\x58\x21\x69\xd3\xf7\xc7\
+\x8c\x4f\xa2\x25\xe4\xbf\xfb\xc3\x2f\xb8\x51\x60\x69\x25\xfa\x0a\
+\x2b\x85\x35\x7e\xfc\x7e\x4a\xed\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x0c\
+\x00\x19\xf2\x3c\
+\x00\x65\
+\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x08\
+\x05\xe2\x59\x27\
+\x00\x6c\
+\x00\x6f\x00\x67\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x03\
+\x00\x00\x7d\xfe\
+\x00\x77\
+\x00\x69\x00\x6e\
+\x00\x03\
+\x00\x00\x73\x73\
+\x00\x6d\
+\x00\x61\x00\x63\
+\x00\x0a\
+\x02\x6b\x3c\x87\
+\x00\x6c\
+\x00\x6f\x00\x67\x00\x6f\x00\x33\x00\x32\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x06\xc8\x40\x47\
+\x00\x65\
+\x00\x64\x00\x69\x00\x74\x00\x72\x00\x65\x00\x64\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x04\x14\x52\xc7\
+\x00\x66\
+\x00\x69\x00\x6c\x00\x65\x00\x6e\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x04\x11\x7b\x87\
+\x00\x7a\
+\x00\x6f\x00\x6f\x00\x6d\x00\x69\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x07\xc5\x9b\xc7\
+\x00\x7a\
+\x00\x6f\x00\x6f\x00\x6d\x00\x6f\x00\x75\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0d\
+\x0f\x47\x85\x87\
+\x00\x65\
+\x00\x78\x00\x70\x00\x6f\x00\x72\x00\x74\x00\x70\x00\x64\x00\x66\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0d\
+\x06\x52\xd9\xe7\
+\x00\x66\
+\x00\x69\x00\x6c\x00\x65\x00\x70\x00\x72\x00\x69\x00\x6e\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x04\x8e\xa1\x07\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x09\xc8\x40\xc7\
+\x00\x65\
+\x00\x64\x00\x69\x00\x74\x00\x75\x00\x6e\x00\x64\x00\x6f\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x00\xba\x29\x27\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x6a\x00\x75\x00\x73\x00\x74\x00\x69\x00\x66\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x03\x30\x79\x47\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x63\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x0b\x0e\x42\x07\
+\x00\x65\
+\x00\x64\x00\x69\x00\x74\x00\x63\x00\x6f\x00\x70\x00\x79\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x05\x68\x0e\x67\
+\x00\x66\
+\x00\x69\x00\x6c\x00\x65\x00\x73\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x0d\x7e\xa2\x67\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x62\x00\x6f\x00\x6c\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x0b\x04\x5d\xe7\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x69\x00\x74\x00\x61\x00\x6c\x00\x69\x00\x63\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0d\
+\x0f\x5a\x2e\x27\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x75\x00\x6e\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0b\
+\x0a\x10\x36\x07\
+\x00\x65\
+\x00\x64\x00\x69\x00\x74\x00\x63\x00\x75\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0d\
+\x0d\xc9\x3b\xe7\
+\x00\x65\
+\x00\x64\x00\x69\x00\x74\x00\x70\x00\x61\x00\x73\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x0b\x21\x0f\x87\
+\x00\x66\
+\x00\x69\x00\x6c\x00\x65\x00\x6f\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0d\
+\x08\x68\x27\x47\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x1e\x00\x02\x00\x00\x00\x04\x00\x00\x00\x03\
+\x00\x00\x00\x52\x00\x02\x00\x00\x00\x13\x00\x00\x00\x1a\
+\x00\x00\x00\x46\x00\x02\x00\x00\x00\x13\x00\x00\x00\x07\
+\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x95\
+\x00\x00\x00\x30\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x19\
+\x00\x00\x01\x64\x00\x00\x00\x00\x00\x01\x00\x00\xaa\x12\
+\x00\x00\x01\x88\x00\x00\x00\x00\x00\x01\x00\x00\xac\xcd\
+\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x8d\x1c\
+\x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x18\
+\x00\x00\x01\x28\x00\x00\x00\x00\x00\x01\x00\x00\xa0\x81\
+\x00\x00\x01\xc8\x00\x00\x00\x00\x00\x01\x00\x00\xb4\x75\
+\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x00\x9a\xcd\
+\x00\x00\x00\x78\x00\x00\x00\x00\x00\x01\x00\x00\x83\x19\
+\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x91\xd8\
+\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x00\xd8\x6c\
+\x00\x00\x01\x46\x00\x00\x00\x00\x00\x01\x00\x00\xa3\x26\
+\x00\x00\x02\x46\x00\x00\x00\x00\x00\x01\x00\x00\xc4\xb0\
+\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\xbd\xa0\
+\x00\x00\x01\xaa\x00\x00\x00\x00\x00\x01\x00\x00\xaf\x44\
+\x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x00\xd1\xea\
+\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x00\xb9\x2e\
+\x00\x00\x02\x62\x00\x00\x00\x00\x00\x01\x00\x00\xcc\x1c\
+\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x96\xa6\
+\x00\x00\x02\x26\x00\x00\x00\x00\x00\x01\x00\x00\xc0\xe1\
+\x00\x00\x01\x64\x00\x00\x00\x00\x00\x01\x00\x00\x43\x50\
+\x00\x00\x01\x88\x00\x00\x00\x00\x00\x01\x00\x00\x48\x3d\
+\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x8f\
+\x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x18\xf7\
+\x00\x00\x01\x28\x00\x00\x00\x00\x00\x01\x00\x00\x37\xa3\
+\x00\x00\x01\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x53\x7d\
+\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x00\x2f\x78\
+\x00\x00\x00\x78\x00\x00\x00\x00\x00\x01\x00\x00\x12\x1b\
+\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x24\x33\
+\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x7d\x97\
+\x00\x00\x01\x46\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x7a\
+\x00\x00\x02\x46\x00\x00\x00\x00\x00\x01\x00\x00\x67\xb9\
+\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\x5e\x86\
+\x00\x00\x01\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x4d\xbd\
+\x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x00\x75\x1b\
+\x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x58\x37\
+\x00\x00\x02\x62\x00\x00\x00\x00\x00\x01\x00\x00\x6d\xa5\
+\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xb5\
+\x00\x00\x02\x26\x00\x00\x00\x00\x00\x01\x00\x00\x63\x16\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/richtext/textobject/files/heart.svg b/examples/richtext/textobject/files/heart.svg
new file mode 100644
index 0000000..ba5f050
--- /dev/null
+++ b/examples/richtext/textobject/files/heart.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) --><svg viewBox="100 200 550 500" height="595.27559pt" id="svg1" inkscape:version="0.40+cvs" sodipodi:docbase="C:\Documents and Settings\Jon Phillips\My Documents\projects\clipart-project\submissions" sodipodi:docname="heart-left-highlight.svg" sodipodi:version="0.32" width="595.27559pt" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inks [...]
+<metadata>
+<rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+<cc:Work rdf:about="">
+<dc:title>Heart Left-Highlight</dc:title>
+<dc:description>This is a normal valentines day heart.</dc:description>
+<dc:subject>
+<rdf:Bag>
+<rdf:li>holiday</rdf:li>
+<rdf:li>valentines</rdf:li>
+<rdf:li></rdf:li>
+<rdf:li>valentine</rdf:li>
+<rdf:li>hash(0x8a091c0)</rdf:li>
+<rdf:li>hash(0x8a0916c)</rdf:li>
+<rdf:li>signs_and_symbols</rdf:li>
+<rdf:li>hash(0x8a091f0)</rdf:li>
+<rdf:li>day</rdf:li>
+</rdf:Bag>
+</dc:subject>
+<dc:publisher>
+<cc:Agent rdf:about="http://www.openclipart.org">
+<dc:title>Jon Phillips</dc:title>
+</cc:Agent>
+</dc:publisher>
+<dc:creator>
+<cc:Agent>
+<dc:title>Jon Phillips</dc:title>
+</cc:Agent>
+</dc:creator>
+<dc:rights>
+<cc:Agent>
+<dc:title>Jon Phillips</dc:title>
+</cc:Agent>
+</dc:rights>
+<dc:date></dc:date>
+<dc:format>image/svg+xml</dc:format>
+<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+<cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
+<dc:language>en</dc:language>
+</cc:Work>
+<cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
+<cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+<cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+<cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+</cc:License>
+</rdf:RDF>
+</metadata>
+<defs id="defs3"/>
+<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="549.40674" inkscape:cy="596.00159" inkscape:document-units="px" inkscape:guide-bbox="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="615" inkscape:window-width="866" inkscape:window-x="88" inkscape:window-y="116" inkscape:zoom="0.35000000" pagecolor="#ffffff" showguides="true"/>
+<g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
+<path d="M 263.41570,235.14588 C 197.17570,235.14588 143.41575,288.90587 143.41575,355.14588 C 143.41575,489.90139 279.34890,525.23318 371.97820,658.45392 C 459.55244,526.05056 600.54070,485.59932 600.54070,355.14588 C 600.54070,288.90588 546.78080,235.14587 480.54070,235.14588 C 432.49280,235.14588 391.13910,263.51631 371.97820,304.33338 C 352.81740,263.51630 311.46370,235.14587 263.41570,235.14588 z " id="path7" sodipodi:nodetypes="ccccccc" style="fill:#e60000;fill-opacity:1.0000000;st [...]
+<path d="M 265.00000,253.59375 C 207.04033,253.59375 160.00000,300.63407 160.00000,358.59375 C 160.00000,476.50415 278.91857,507.43251 359.96875,624.00000 C 366.52868,614.08205 220.00000,478.47309 220.00000,378.59375 C 220.00000,320.63407 267.04033,273.59375 325.00000,273.59375 C 325.50453,273.59375 325.99718,273.64912 326.50000,273.65625 C 309.22436,261.07286 288.00557,253.59374 265.00000,253.59375 z " id="path220" sodipodi:nodetypes="ccccccc" style="fill:#e6e6e6;fill-opacity:0.64556962 [...]
+</g>
+</svg>
diff --git a/examples/richtext/textobject/textobject.py b/examples/richtext/textobject/textobject.py
new file mode 100755
index 0000000..38e688a
--- /dev/null
+++ b/examples/richtext/textobject/textobject.py
@@ -0,0 +1,139 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFile, QIODevice, QObject, QSizeF
+from PyQt5.QtGui import QTextCharFormat, QTextFormat, QTextObjectInterface
+from PyQt5.QtWidgets import (QApplication, QHBoxLayout, QLabel, QLineEdit,
+        QMessageBox, QPushButton, QTextEdit, QVBoxLayout, QWidget)
+from PyQt5.QtSvg import QSvgRenderer
+
+
+class SvgTextObject(QObject, QTextObjectInterface):
+    def intrinsicSize(self, doc, posInDocument, format):
+        renderer = QSvgRenderer(format.property(Window.SvgData))
+        size = renderer.defaultSize()
+
+        if size.height() > 25:
+            size *= 25.0 / size.height()
+
+        return QSizeF(size)
+
+    def drawObject(self, painter, rect, doc, posInDocument, format):
+        renderer = QSvgRenderer(format.property(Window.SvgData))
+        renderer.render(painter, rect)
+
+
+class Window(QWidget):
+
+    SvgTextFormat = QTextFormat.UserObject + 1
+
+    SvgData = 1
+
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.setupGui()
+        self.setupTextObject()
+
+        self.setWindowTitle("Text Object Example")
+
+    def insertTextObject(self):
+        fileName = self.fileNameLineEdit.text()
+        file = QFile(fileName)
+
+        if not file.open(QIODevice.ReadOnly):
+            QMessageBox.warning(self, "Error Opening File",
+                    "Could not open '%s'" % fileName)
+
+        svgData = file.readAll()
+
+        svgCharFormat = QTextCharFormat()
+        svgCharFormat.setObjectType(Window.SvgTextFormat)
+        svgCharFormat.setProperty(Window.SvgData, svgData)
+
+        try:
+            # Python v2.
+            orc = unichr(0xfffc)
+        except NameError:
+            # Python v3.
+            orc = chr(0xfffc)
+
+        cursor = self.textEdit.textCursor()
+        cursor.insertText(orc, svgCharFormat)
+        self.textEdit.setTextCursor(cursor)
+
+    def setupTextObject(self):
+        svgInterface = SvgTextObject(self)
+        self.textEdit.document().documentLayout().registerHandler(Window.SvgTextFormat, svgInterface)
+
+    def setupGui(self):
+        fileNameLabel = QLabel("Svg File Name:")
+        self.fileNameLineEdit = QLineEdit()
+        insertTextObjectButton = QPushButton("Insert Image")
+
+        self.fileNameLineEdit.setText('./files/heart.svg')
+        insertTextObjectButton.clicked.connect(self.insertTextObject)
+
+        bottomLayout = QHBoxLayout()
+        bottomLayout.addWidget(fileNameLabel)
+        bottomLayout.addWidget(self.fileNameLineEdit)
+        bottomLayout.addWidget(insertTextObjectButton)
+
+        self.textEdit = QTextEdit()
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.textEdit)
+        mainLayout.addLayout(bottomLayout)
+
+        self.setLayout(mainLayout)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/sql/README b/examples/sql/README
new file mode 100644
index 0000000..9c81caa
--- /dev/null
+++ b/examples/sql/README
@@ -0,0 +1,26 @@
+PyQt provides extensive database interoperability, with support for products
+from both open source and proprietary vendors.
+
+SQL support is integrated with PyQt's model/view architecture, making it easier
+to provide GUI integration for your database applications.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/sql/cachedtable.py b/examples/sql/cachedtable.py
new file mode 100755
index 0000000..fc5e0cc
--- /dev/null
+++ b/examples/sql/cachedtable.py
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import (QApplication, QDialog, QDialogButtonBox,
+        QHBoxLayout, QMessageBox, QPushButton, QTableView)
+from PyQt5.QtSql import QSqlTableModel
+
+import connection
+
+
+class TableEditor(QDialog):
+    def __init__(self, tableName, parent=None):
+        super(TableEditor, self).__init__(parent)
+
+        self.model = QSqlTableModel(self)
+        self.model.setTable(tableName)
+        self.model.setEditStrategy(QSqlTableModel.OnManualSubmit)
+        self.model.select()
+
+        self.model.setHeaderData(0, Qt.Horizontal, "ID")
+        self.model.setHeaderData(1, Qt.Horizontal, "First name")
+        self.model.setHeaderData(2, Qt.Horizontal, "Last name")
+
+        view = QTableView()
+        view.setModel(self.model)
+
+        submitButton = QPushButton("Submit")
+        submitButton.setDefault(True)
+        revertButton = QPushButton("&Revert")
+        quitButton = QPushButton("Quit")
+
+        buttonBox = QDialogButtonBox(Qt.Vertical)
+        buttonBox.addButton(submitButton, QDialogButtonBox.ActionRole)
+        buttonBox.addButton(revertButton, QDialogButtonBox.ActionRole)
+        buttonBox.addButton(quitButton, QDialogButtonBox.RejectRole)
+
+        submitButton.clicked.connect(self.submit)
+        revertButton.clicked.connect(self.model.revertAll)
+        quitButton.clicked.connect(self.close)
+
+        mainLayout = QHBoxLayout()
+        mainLayout.addWidget(view)
+        mainLayout.addWidget(buttonBox)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Cached Table")
+
+    def submit(self):
+        self.model.database().transaction()
+        if self.model.submitAll():
+            self.model.database().commit()
+        else:
+            self.model.database().rollback()
+            QMessageBox.warning(self, "Cached Table",
+                        "The database reported an error: %s" % self.model.lastError().text())
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    if not connection.createConnection():
+        sys.exit(1)
+
+    editor = TableEditor('person')
+    editor.show()
+    sys.exit(editor.exec_())
diff --git a/examples/sql/connection.py b/examples/sql/connection.py
new file mode 100644
index 0000000..232526f
--- /dev/null
+++ b/examples/sql/connection.py
@@ -0,0 +1,115 @@
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtWidgets import QMessageBox
+from PyQt5.QtSql import QSqlDatabase, QSqlQuery
+
+
+def createConnection():
+    db = QSqlDatabase.addDatabase('QSQLITE')
+    db.setDatabaseName(':memory:')
+    if not db.open():
+        QMessageBox.critical(None, "Cannot open database",
+                "Unable to establish a database connection.\n"
+                "This example needs SQLite support. Please read the Qt SQL "
+                "driver documentation for information how to build it.\n\n"
+                "Click Cancel to exit.",
+                QMessageBox.Cancel)
+        return False
+    
+    query = QSqlQuery()
+    query.exec_("create table person(id int primary key, "
+                "firstname varchar(20), lastname varchar(20))")
+    query.exec_("insert into person values(101, 'Danny', 'Young')")
+    query.exec_("insert into person values(102, 'Christine', 'Holand')")
+    query.exec_("insert into person values(103, 'Lars', 'Gordon')")
+    query.exec_("insert into person values(104, 'Roberto', 'Robitaille')")
+    query.exec_("insert into person values(105, 'Maria', 'Papadopoulos')")
+
+    query.exec_("create table offices (id int primary key,"
+                                             "imagefile int,"
+                                             "location varchar(20),"
+                                             "country varchar(20),"
+                                             "description varchar(100))");
+    query.exec_("insert into offices "
+               "values(0, 0, 'Oslo', 'Norway',"
+               "'Oslo is home to more than 500 000 citizens and has a "
+               "lot to offer.It has been called \"The city with the big "
+               "heart\" and this is a nickname we are happy to live up to.')")
+    query.exec_("insert into offices "
+               "values(1, 1, 'Brisbane', 'Australia',"
+               "'Brisbane is the capital of Queensland, the Sunshine State, "
+               "where it is beautiful one day, perfect the next.  "
+               "Brisbane is Australia''s 3rd largest city, being home "
+               "to almost 2 million people.')")
+    query.exec_("insert into offices "
+               "values(2, 2, 'Redwood City', 'US',"
+               "'You find Redwood City in the heart of the Bay Area "
+               "just north of Silicon Valley. The largest nearby city is "
+               "San Jose which is the third largest city in California "
+               "and the 10th largest in the US.')")
+    query.exec_("insert into offices "
+               "values(3, 3, 'Berlin', 'Germany',"
+               "'Berlin, the capital of Germany is dynamic, cosmopolitan "
+               "and creative, allowing for every kind of lifestyle. "
+               "East meets West in the metropolis at the heart of a "
+               "changing Europe.')")
+    query.exec_("insert into offices "
+               "values(4, 4, 'Munich', 'Germany',"
+               "'Several technology companies are represented in Munich, "
+               "and the city is often called the \"Bavarian Silicon Valley\". "
+               "The exciting city is also filled with culture, "
+               "art and music. ')")
+    query.exec_("insert into offices "
+               "values(5, 5, 'Beijing', 'China',"
+               "'Beijing as a capital city has more than 3000 years of "
+               "history. Today the city counts 12 million citizens, and "
+               "is the political, economic and cultural centre of China.')")
+
+    query.exec_("create table images (locationid int, file varchar(20))")
+    query.exec_("insert into images values(0, 'images/oslo.png')")
+    query.exec_("insert into images values(1, 'images/brisbane.png')")
+    query.exec_("insert into images values(2, 'images/redwood.png')")
+    query.exec_("insert into images values(3, 'images/berlin.png')")
+    query.exec_("insert into images values(4, 'images/munich.png')")
+    query.exec_("insert into images values(5, 'images/beijing.png')")
+
+    return True
diff --git a/examples/sql/querymodel.py b/examples/sql/querymodel.py
new file mode 100755
index 0000000..540fae5
--- /dev/null
+++ b/examples/sql/querymodel.py
@@ -0,0 +1,157 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtGui import QColor
+from PyQt5.QtWidgets import QApplication, QTableView
+from PyQt5.QtSql import QSqlQuery, QSqlQueryModel
+
+import connection
+
+
+class CustomSqlModel(QSqlQueryModel):
+    def data(self, index, role):
+        value = super(CustomSqlModel, self).data(index, role)
+        if value is not None and role == Qt.DisplayRole:
+            if index.column() == 0:
+                return '#%d' % value
+            elif index.column() == 2:
+                return value.upper()
+
+        if role == Qt.TextColorRole and index.column() == 1:
+            return QColor(Qt.blue)
+
+        return value
+
+
+class EditableSqlModel(QSqlQueryModel):
+    def flags(self, index):
+        flags = super(EditableSqlModel, self).flags(index)
+
+        if index.column() in (1, 2):
+            flags |= Qt.ItemIsEditable
+
+        return flags
+
+    def setData(self, index, value, role):
+        if index.column() not in (1, 2):
+            return False
+
+        primaryKeyIndex = self.index(index.row(), 0)
+        id = self.data(primaryKeyIndex)
+
+        self.clear()
+
+        if index.column() == 1:
+            ok = self.setFirstName(id, value)
+        else:
+            ok = self.setLastName(id, value)
+
+        self.refresh()
+        return ok
+
+    def refresh(self):
+        self.setQuery('select * from person')
+        self.setHeaderData(0, Qt.Horizontal, "ID")
+        self.setHeaderData(1, Qt.Horizontal, "First name")
+        self.setHeaderData(2, Qt.Horizontal, "Last name")
+
+    def setFirstName(self, personId, firstName):
+        query = QSqlQuery()
+        query.prepare('update person set firstname = ? where id = ?')
+        query.addBindValue(firstName)
+        query.addBindValue(personId)
+        return query.exec_()
+
+    def setLastName(self, personId, lastName):
+        query = QSqlQuery()
+        query.prepare('update person set lastname = ? where id = ?')
+        query.addBindValue(lastName)
+        query.addBindValue(personId)
+        return query.exec_()
+
+
+def initializeModel(model):
+    model.setQuery('select * from person')
+    model.setHeaderData(0, Qt.Horizontal, "ID")
+    model.setHeaderData(1, Qt.Horizontal, "First name")
+    model.setHeaderData(2, Qt.Horizontal, "Last name")
+
+
+offset = 0
+views = []
+
+def createView(title, model):
+    global offset, views
+
+    view = QTableView()
+    views.append(view)
+    view.setModel(model)
+    view.setWindowTitle(title)
+    view.move(100 + offset, 100 + offset)
+    offset += 20
+    view.show()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    if not connection.createConnection():
+        sys.exit(1)
+
+    plainModel = QSqlQueryModel()
+    editableModel = EditableSqlModel()
+    customModel = CustomSqlModel()
+
+    initializeModel(plainModel)
+    initializeModel(editableModel)
+    initializeModel(customModel)
+
+    createView("Plain Query Model", plainModel)
+    createView("Editable Query Model", editableModel)
+    createView("Custom Query Model", customModel)
+
+    sys.exit(app.exec_())
diff --git a/examples/sql/relationaltablemodel.py b/examples/sql/relationaltablemodel.py
new file mode 100755
index 0000000..c021db3
--- /dev/null
+++ b/examples/sql/relationaltablemodel.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QApplication, QTableView
+from PyQt5.QtSql import (QSqlQuery, QSqlRelation, QSqlRelationalDelegate,
+        QSqlRelationalTableModel, QSqlTableModel)
+
+import connection
+
+
+def initializeModel(model):
+    model.setTable('employee')
+
+    model.setEditStrategy(QSqlTableModel.OnManualSubmit)
+    model.setRelation(2, QSqlRelation('city', 'id', 'name'))
+    model.setRelation(3, QSqlRelation('country', 'id', 'name'))
+
+    model.setHeaderData(0, Qt.Horizontal, "ID")
+    model.setHeaderData(1, Qt.Horizontal, "Name")
+    model.setHeaderData(2, Qt.Horizontal, "City")
+    model.setHeaderData(3, Qt.Horizontal, "Country")
+
+    model.select()
+
+
+def createView(title, model):
+    view = QTableView()
+    view.setModel(model)
+    view.setItemDelegate(QSqlRelationalDelegate(view))
+    view.setWindowTitle(title)
+
+    return view
+
+
+def createRelationalTables():
+    query = QSqlQuery()
+
+    query.exec_("create table employee(id int, name varchar(20), city int, country int)")
+    query.exec_("insert into employee values(1, 'Espen', 5000, 47)")
+    query.exec_("insert into employee values(2, 'Harald', 80000, 49)")
+    query.exec_("insert into employee values(3, 'Sam', 100, 41)")
+
+    query.exec_("create table city(id int, name varchar(20))")
+    query.exec_("insert into city values(100, 'San Jose')")
+    query.exec_("insert into city values(5000, 'Oslo')")
+    query.exec_("insert into city values(80000, 'Munich')")
+
+    query.exec_("create table country(id int, name varchar(20))")
+    query.exec_("insert into country values(41, 'USA')")
+    query.exec_("insert into country values(47, 'Norway')")
+    query.exec_("insert into country values(49, 'Germany')")
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    if not connection.createConnection():
+        sys.exit(1)
+
+    createRelationalTables()
+
+    model = QSqlRelationalTableModel()
+
+    initializeModel(model)
+
+    view = createView("Relational Table Model", model)
+
+    view.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/sql/tablemodel.py b/examples/sql/tablemodel.py
new file mode 100755
index 0000000..d50d30d
--- /dev/null
+++ b/examples/sql/tablemodel.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QApplication, QTableView
+from PyQt5.QtSql import QSqlTableModel
+
+import connection
+
+
+def initializeModel(model):
+    model.setTable('person')
+
+    model.setEditStrategy(QSqlTableModel.OnManualSubmit)
+    model.select()
+
+    model.setHeaderData(0, Qt.Horizontal, "ID")
+    model.setHeaderData(1, Qt.Horizontal, "First name")
+    model.setHeaderData(2, Qt.Horizontal, "Last name")
+
+
+def createView(title, model):
+    view = QTableView()
+    view.setModel(model)
+    view.setWindowTitle(title)
+    return view
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    if not connection.createConnection():
+        sys.exit(1)
+
+    model = QSqlTableModel()
+
+    initializeModel(model)
+
+    view1 = createView("Table Model (View 1)", model)
+    view2 = createView("Table Model (View 2)", model)
+
+    view1.show()
+    view2.move(view1.x() + view1.width() + 20, view1.y())
+    view2.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/threads/README b/examples/threads/README
new file mode 100644
index 0000000..65654e9
--- /dev/null
+++ b/examples/threads/README
@@ -0,0 +1,26 @@
+PyQt makes it easier than ever to write multithreaded applications. More
+classes have been made usable from non-GUI threads, and the signals and slots
+mechanism can now be used to communicate between threads.
+
+Additionally, it is now possible to move objects between threads.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/threads/mandelbrot.py b/examples/threads/mandelbrot.py
new file mode 100755
index 0000000..fbeebbe
--- /dev/null
+++ b/examples/threads/mandelbrot.py
@@ -0,0 +1,347 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import (pyqtSignal, QMutex, QMutexLocker, QPoint, QSize, Qt,
+        QThread, QWaitCondition)
+from PyQt5.QtGui import QColor, QImage, QPainter, QPixmap, qRgb
+from PyQt5.QtWidgets import QApplication, QWidget
+
+
+DefaultCenterX = -0.647011
+DefaultCenterY = -0.0395159
+DefaultScale = 0.00403897
+
+ZoomInFactor = 0.8
+ZoomOutFactor = 1 / ZoomInFactor
+ScrollStep = 20
+
+
+class RenderThread(QThread):
+    ColormapSize = 512
+
+    renderedImage = pyqtSignal(QImage, float)
+
+    def __init__(self, parent=None):
+        super(RenderThread, self).__init__(parent)
+
+        self.mutex = QMutex()
+        self.condition = QWaitCondition()
+        self.centerX = 0.0
+        self.centerY = 0.0
+        self.scaleFactor = 0.0
+        self.resultSize = QSize()
+        self.colormap = []
+
+        self.restart = False
+        self.abort = False
+
+        for i in range(RenderThread.ColormapSize):
+            self.colormap.append(self.rgbFromWaveLength(380.0 + (i * 400.0 / RenderThread.ColormapSize)))
+
+    def __del__(self):
+        self.mutex.lock()
+        self.abort = True
+        self.condition.wakeOne()
+        self.mutex.unlock()
+
+        self.wait()
+
+    def render(self, centerX, centerY, scaleFactor, resultSize):
+        locker = QMutexLocker(self.mutex)
+
+        self.centerX = centerX
+        self.centerY = centerY
+        self.scaleFactor = scaleFactor
+        self.resultSize = resultSize
+
+        if not self.isRunning():
+            self.start(QThread.LowPriority)
+        else:
+            self.restart = True
+            self.condition.wakeOne()
+
+    def run(self):
+        while True:
+            self.mutex.lock()
+            resultSize = self.resultSize
+            scaleFactor = self.scaleFactor
+            centerX = self.centerX
+            centerY = self.centerY
+            self.mutex.unlock()
+
+            halfWidth = resultSize.width() // 2
+            halfHeight = resultSize.height() // 2
+            image = QImage(resultSize, QImage.Format_RGB32)
+
+            NumPasses = 8
+            curpass = 0
+
+            while curpass < NumPasses:
+                MaxIterations = (1 << (2 * curpass + 6)) + 32
+                Limit = 4
+                allBlack = True
+
+                for y in range(-halfHeight, halfHeight):
+                    if self.restart:
+                        break
+                    if self.abort:
+                        return
+
+                    ay = 1j * (centerY + (y * scaleFactor))
+
+                    for x in range(-halfWidth, halfWidth):
+                        c0 = centerX + (x * scaleFactor) + ay
+                        c = c0
+                        numIterations = 0
+
+                        while numIterations < MaxIterations:
+                            numIterations += 1
+                            c = c*c + c0
+                            if abs(c) >= Limit:
+                                break
+                            numIterations += 1
+                            c = c*c + c0
+                            if abs(c) >= Limit:
+                                break
+                            numIterations += 1
+                            c = c*c + c0
+                            if abs(c) >= Limit:
+                                break
+                            numIterations += 1
+                            c = c*c + c0
+                            if abs(c) >= Limit:
+                                break
+
+                        if numIterations < MaxIterations:
+                            image.setPixel(x + halfWidth, y + halfHeight,
+                                           self.colormap[numIterations % RenderThread.ColormapSize])
+                            allBlack = False
+                        else:
+                            image.setPixel(x + halfWidth, y + halfHeight, qRgb(0, 0, 0))
+
+                if allBlack and curpass == 0:
+                    curpass = 4
+                else:
+                    if not self.restart:
+                        self.renderedImage.emit(image, scaleFactor)
+                    curpass += 1
+
+            self.mutex.lock()
+            if not self.restart:
+                self.condition.wait(self.mutex)
+            self.restart = False
+            self.mutex.unlock()
+
+    def rgbFromWaveLength(self, wave):
+        r = 0.0
+        g = 0.0
+        b = 0.0
+
+        if wave >= 380.0 and wave <= 440.0:
+            r = -1.0 * (wave - 440.0) / (440.0 - 380.0)
+            b = 1.0
+        elif wave >= 440.0 and wave <= 490.0:
+            g = (wave - 440.0) / (490.0 - 440.0)
+            b = 1.0
+        elif wave >= 490.0 and wave <= 510.0:
+            g = 1.0
+            b = -1.0 * (wave - 510.0) / (510.0 - 490.0)
+        elif wave >= 510.0 and wave <= 580.0:
+            r = (wave - 510.0) / (580.0 - 510.0)
+            g = 1.0
+        elif wave >= 580.0 and wave <= 645.0:
+            r = 1.0
+            g = -1.0 * (wave - 645.0) / (645.0 - 580.0)
+        elif wave >= 645.0 and wave <= 780.0:
+            r = 1.0
+
+        s = 1.0
+        if wave > 700.0:
+            s = 0.3 + 0.7 * (780.0 - wave) / (780.0 - 700.0)
+        elif wave < 420.0:
+            s = 0.3 + 0.7 * (wave - 380.0) / (420.0 - 380.0)
+
+        r = pow(r * s, 0.8)
+        g = pow(g * s, 0.8)
+        b = pow(b * s, 0.8)
+
+        return qRgb(r*255, g*255, b*255)
+
+
+class MandelbrotWidget(QWidget):
+    def __init__(self, parent=None):
+        super(MandelbrotWidget, self).__init__(parent)
+
+        self.thread = RenderThread()
+        self.pixmap = QPixmap()
+        self.pixmapOffset = QPoint()
+        self.lastDragPos = QPoint()
+
+        self.centerX = DefaultCenterX
+        self.centerY = DefaultCenterY
+        self.pixmapScale = DefaultScale
+        self.curScale = DefaultScale
+
+        self.thread.renderedImage.connect(self.updatePixmap)
+
+        self.setWindowTitle("Mandelbrot")
+        self.setCursor(Qt.CrossCursor)
+        self.resize(550, 400)
+
+    def paintEvent(self, event):
+        painter = QPainter(self)
+        painter.fillRect(self.rect(), Qt.black)
+
+        if self.pixmap.isNull():
+            painter.setPen(Qt.white)
+            painter.drawText(self.rect(), Qt.AlignCenter,
+                    "Rendering initial image, please wait...")
+            return
+
+        if self.curScale == self.pixmapScale:
+            painter.drawPixmap(self.pixmapOffset, self.pixmap)
+        else:
+            scaleFactor = self.pixmapScale / self.curScale
+            newWidth = int(self.pixmap.width() * scaleFactor)
+            newHeight = int(self.pixmap.height() * scaleFactor)
+            newX = self.pixmapOffset.x() + (self.pixmap.width() - newWidth) / 2
+            newY = self.pixmapOffset.y() + (self.pixmap.height() - newHeight) / 2
+
+            painter.save()
+            painter.translate(newX, newY)
+            painter.scale(scaleFactor, scaleFactor)
+            exposed, _ = painter.matrix().inverted()
+            exposed = exposed.mapRect(self.rect()).adjusted(-1, -1, 1, 1)
+            painter.drawPixmap(exposed, self.pixmap, exposed)
+            painter.restore()
+
+        text = "Use mouse wheel or the '+' and '-' keys to zoom. Press and " \
+                "hold left mouse button to scroll."
+        metrics = painter.fontMetrics()
+        textWidth = metrics.width(text)
+
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(QColor(0, 0, 0, 127))
+        painter.drawRect((self.width() - textWidth) / 2 - 5, 0, textWidth + 10,
+                metrics.lineSpacing() + 5)
+        painter.setPen(Qt.white)
+        painter.drawText((self.width() - textWidth) / 2,
+                metrics.leading() + metrics.ascent(), text)
+
+    def resizeEvent(self, event):
+        self.thread.render(self.centerX, self.centerY, self.curScale,
+                self.size())
+
+    def keyPressEvent(self, event):
+        if event.key() == Qt.Key_Plus:
+            self.zoom(ZoomInFactor)
+        elif event.key() == Qt.Key_Minus:
+            self.zoom(ZoomOutFactor)
+        elif event.key() == Qt.Key_Left:
+            self.scroll(-ScrollStep, 0)
+        elif event.key() == Qt.Key_Right:
+            self.scroll(+ScrollStep, 0)
+        elif event.key() == Qt.Key_Down:
+            self.scroll(0, -ScrollStep)
+        elif event.key() == Qt.Key_Up:
+            self.scroll(0, +ScrollStep)
+        else:
+            super(MandelbrotWidget, self).keyPressEvent(event)
+
+    def wheelEvent(self, event):
+        numDegrees = event.angleDelta().y() / 8
+        numSteps = numDegrees / 15.0
+        self.zoom(pow(ZoomInFactor, numSteps))
+
+    def mousePressEvent(self, event):
+        if event.buttons() == Qt.LeftButton:
+            self.lastDragPos = QPoint(event.pos())
+
+    def mouseMoveEvent(self, event):
+        if event.buttons() & Qt.LeftButton:
+            self.pixmapOffset += event.pos() - self.lastDragPos
+            self.lastDragPos = QPoint(event.pos())
+            self.update()
+
+    def mouseReleaseEvent(self, event):
+        if event.button() == Qt.LeftButton:
+            self.pixmapOffset += event.pos() - self.lastDragPos
+            self.lastDragPos = QPoint()
+
+            deltaX = (self.width() - self.pixmap.width()) / 2 - self.pixmapOffset.x()
+            deltaY = (self.height() - self.pixmap.height()) / 2 - self.pixmapOffset.y()
+            self.scroll(deltaX, deltaY)
+
+    def updatePixmap(self, image, scaleFactor):
+        if not self.lastDragPos.isNull():
+            return
+
+        self.pixmap = QPixmap.fromImage(image)
+        self.pixmapOffset = QPoint()
+        self.lastDragPosition = QPoint()
+        self.pixmapScale = scaleFactor
+        self.update()
+
+    def zoom(self, zoomFactor):
+        self.curScale *= zoomFactor
+        self.update()
+        self.thread.render(self.centerX, self.centerY, self.curScale,
+                self.size())
+
+    def scroll(self, deltaX, deltaY):
+        self.centerX += deltaX * self.curScale
+        self.centerY += deltaY * self.curScale
+        self.update()
+        self.thread.render(self.centerX, self.centerY, self.curScale,
+                self.size())
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    widget = MandelbrotWidget()
+    widget.show()
+    sys.exit(app.exec_())
diff --git a/examples/threads/semaphores.py b/examples/threads/semaphores.py
new file mode 100755
index 0000000..ed033f9
--- /dev/null
+++ b/examples/threads/semaphores.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+import random
+
+from PyQt5.QtCore import QCoreApplication, QSemaphore, QThread
+
+
+DataSize = 100000
+BufferSize = 8192
+buffer = list(range(BufferSize))
+
+freeBytes = QSemaphore(BufferSize)
+usedBytes = QSemaphore()
+
+
+class Producer(QThread):
+    def run(self):
+        for i in range(DataSize):
+            freeBytes.acquire()
+            buffer[i % BufferSize] = "ACGT"[random.randint(0, 3)]
+            usedBytes.release()
+
+
+class Consumer(QThread):
+    def run(self):
+        for i in range(DataSize):
+            usedBytes.acquire()
+            sys.stderr.write(buffer[i % BufferSize])
+            freeBytes.release()
+
+        sys.stderr.write("\n")
+
+
+if __name__ == '__main__':
+    app = QCoreApplication(sys.argv)
+    producer = Producer()
+    consumer = Consumer()
+    producer.start()
+    consumer.start()
+    producer.wait()
+    consumer.wait()
diff --git a/examples/threads/waitconditions.py b/examples/threads/waitconditions.py
new file mode 100755
index 0000000..538b2c4
--- /dev/null
+++ b/examples/threads/waitconditions.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+import random
+
+from PyQt5.QtCore import QCoreApplication, QMutex, QThread, QWaitCondition
+
+
+DataSize = 100000
+BufferSize = 8192
+buffer = list(range(BufferSize))
+
+bufferNotEmpty = QWaitCondition()
+bufferNotFull = QWaitCondition()
+mutex = QMutex()
+numUsedBytes = 0
+
+
+class Producer(QThread):
+    def run(self):
+        global numUsedBytes
+
+        for i in range(DataSize):
+            mutex.lock()
+            if numUsedBytes == BufferSize:
+                bufferNotFull.wait(mutex)
+            mutex.unlock()
+            
+            buffer[i % BufferSize] = "ACGT"[random.randint(0, 3)]
+
+            mutex.lock()
+            numUsedBytes += 1
+            bufferNotEmpty.wakeAll()
+            mutex.unlock()
+
+
+class Consumer(QThread):
+    def run(self):
+        global numUsedBytes
+
+        for i in range(DataSize):
+            mutex.lock()
+            if numUsedBytes == 0:
+                bufferNotEmpty.wait(mutex)
+            mutex.unlock()
+            
+            sys.stderr.write(buffer[i % BufferSize])
+
+            mutex.lock()
+            numUsedBytes -= 1
+            bufferNotFull.wakeAll()
+            mutex.unlock()
+            
+        sys.stderr.write("\n")
+
+
+if __name__ == '__main__':
+    app = QCoreApplication(sys.argv)
+    producer = Producer()
+    consumer = Consumer()
+    producer.start()
+    consumer.start()
+    producer.wait()
+    consumer.wait()
diff --git a/examples/tools/README b/examples/tools/README
new file mode 100644
index 0000000..64ae9f2
--- /dev/null
+++ b/examples/tools/README
@@ -0,0 +1,26 @@
+PyQt is equipped with a range of capable tool classes, from containers and
+iterators to classes for string handling and manipulation.
+
+Other classes provide application infrastructure support, handling plugin
+loading and managing configuration files.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/tools/codecs/codecs.py b/examples/tools/codecs/codecs.py
new file mode 100755
index 0000000..fa39f50
--- /dev/null
+++ b/examples/tools/codecs/codecs.py
@@ -0,0 +1,253 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFile, QRegExp, QTextCodec, QTextStream
+from PyQt5.QtWidgets import (QAction, QApplication, QComboBox, QDialog,
+        QDialogButtonBox, QFileDialog, QGridLayout, QLabel, QMainWindow, QMenu,
+        QMessageBox, QTextEdit)
+
+
+def codec_name(codec):
+    try:
+        # Python v3.
+        name = str(codec.name(), encoding='ascii')
+    except TypeError:
+        # Python v2.
+        name = str(codec.name())
+
+    return name
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.textEdit = QTextEdit()
+        self.textEdit.setLineWrapMode(QTextEdit.NoWrap)
+        self.setCentralWidget(self.textEdit)
+
+        self.codecs = []
+        self.findCodecs()
+
+        self.previewForm = PreviewForm(self)
+        self.previewForm.setCodecList(self.codecs)
+
+        self.saveAsActs = []
+        self.createActions()
+        self.createMenus()
+
+        self.setWindowTitle("Codecs")
+        self.resize(500, 400)
+
+    def open(self):
+        fileName, _ = QFileDialog.getOpenFileName(self)
+        if fileName:
+            inFile = QFile(fileName)
+            if not inFile.open(QFile.ReadOnly):
+                QMessageBox.warning(self, "Codecs",
+                        "Cannot read file %s:\n%s" % (fileName, inFile.errorString()))
+                return
+
+            data = inFile.readAll()
+
+            self.previewForm.setEncodedData(data)
+            if self.previewForm.exec_():
+                self.textEdit.setPlainText(self.previewForm.decodedString())
+
+    def save(self):
+        fileName, _ = QFileDialog.getSaveFileName(self)
+        if fileName:
+            outFile = QFile(fileName)
+            if not outFile.open(QFile.WriteOnly|QFile.Text):
+                QMessageBox.warning(self, "Codecs",
+                        "Cannot write file %s:\n%s" % (fileName, outFile.errorString()))
+                return
+
+            action = self.sender()
+            codecName = action.data()
+
+            out = QTextStream(outFile)
+            out.setCodec(codecName)
+            out << self.textEdit.toPlainText()
+
+    def about(self):
+        QMessageBox.about(self, "About Codecs",
+                "The <b>Codecs</b> example demonstrates how to read and "
+                "write files using various encodings.")
+
+    def aboutToShowSaveAsMenu(self):
+        currentText = self.textEdit.toPlainText()
+
+        for action in self.saveAsActs:
+            codecName = action.data()
+            codec = QTextCodec.codecForName(codecName)
+            action.setVisible(codec and codec.canEncode(currentText))
+
+    def findCodecs(self):
+        codecMap = []
+        iso8859RegExp = QRegExp('ISO[- ]8859-([0-9]+).*')
+
+        for mib in QTextCodec.availableMibs():
+            codec = QTextCodec.codecForMib(mib)
+            sortKey = codec_name(codec).upper()
+            rank = 0
+
+            if sortKey.startswith('UTF-8'):
+                rank = 1
+            elif sortKey.startswith('UTF-16'):
+                rank = 2
+            elif iso8859RegExp.exactMatch(sortKey):
+                if len(iso8859RegExp.cap(1)) == 1:
+                    rank = 3
+                else:
+                    rank = 4
+            else:
+                rank = 5
+
+            codecMap.append((str(rank) + sortKey, codec))
+
+        codecMap.sort()
+        self.codecs = [item[-1] for item in codecMap]
+
+    def createActions(self):
+        self.openAct = QAction("&Open...", self, shortcut="Ctrl+O",
+                triggered=self.open)
+
+        for codec in self.codecs:
+            name = codec_name(codec)
+
+            action = QAction(name + '...', self, triggered=self.save)
+            action.setData(name)
+            self.saveAsActs.append(action)
+
+        self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q",
+                triggered=self.close)
+
+        self.aboutAct = QAction("&About", self, triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        self.saveAsMenu = QMenu("&Save As", self)
+        for action in self.saveAsActs:
+            self.saveAsMenu.addAction(action)
+
+        self.saveAsMenu.aboutToShow.connect(self.aboutToShowSaveAsMenu)
+
+        self.fileMenu = QMenu("&File", self)
+        self.fileMenu.addAction(self.openAct)
+        self.fileMenu.addMenu(self.saveAsMenu)
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.exitAct)
+
+        self.helpMenu = QMenu("&Help", self)
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+        self.menuBar().addMenu(self.fileMenu)
+        self.menuBar().addSeparator()
+        self.menuBar().addMenu(self.helpMenu)
+
+
+class PreviewForm(QDialog):
+    def __init__(self, parent):
+        super(PreviewForm, self).__init__(parent)
+
+        self.encodingComboBox = QComboBox()
+        encodingLabel = QLabel("&Encoding:")
+        encodingLabel.setBuddy(self.encodingComboBox)
+
+        self.textEdit = QTextEdit()
+        self.textEdit.setLineWrapMode(QTextEdit.NoWrap)
+        self.textEdit.setReadOnly(True)
+
+        buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+
+        self.encodingComboBox.activated.connect(self.updateTextEdit)
+        buttonBox.accepted.connect(self.accept)
+        buttonBox.rejected.connect(self.reject)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(encodingLabel, 0, 0)
+        mainLayout.addWidget(self.encodingComboBox, 0, 1)
+        mainLayout.addWidget(self.textEdit, 1, 0, 1, 2)
+        mainLayout.addWidget(buttonBox, 2, 0, 1, 2)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Choose Encoding")
+        self.resize(400, 300)
+
+    def setCodecList(self, codecs):
+        self.encodingComboBox.clear()
+        for codec in codecs:
+            self.encodingComboBox.addItem(codec_name(codec), codec.mibEnum())
+
+    def setEncodedData(self, data):
+        self.encodedData = data
+        self.updateTextEdit()
+
+    def decodedString(self):
+        return self.decodedStr
+
+    def updateTextEdit(self):
+        mib = self.encodingComboBox.itemData(self.encodingComboBox.currentIndex())
+        codec = QTextCodec.codecForMib(mib)
+
+        data = QTextStream(self.encodedData)
+        data.setAutoDetectUnicode(False)
+        data.setCodec(codec)
+
+        self.decodedStr = data.readAll()
+        self.textEdit.setPlainText(self.decodedStr)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    mainWin = MainWindow()
+    mainWin.show()
+    sys.exit(app.exec_())
diff --git a/examples/tools/codecs/encodedfiles/iso-8859-1.txt b/examples/tools/codecs/encodedfiles/iso-8859-1.txt
new file mode 100644
index 0000000..4a7ebe3
--- /dev/null
+++ b/examples/tools/codecs/encodedfiles/iso-8859-1.txt
@@ -0,0 +1,6 @@
+Paulo Coelho: O G�nio e as Rosas
+Anna Hallstr�m, Urban �stberg: Sv�r svenska
+Darrell Huff: How to Lie with Statistics
+Franz Kafka: Das Schlo�
+Walter Moers: Die 13� Leben des K�pt'n Blaub�r
+Dag Solstad: Fors�k p� � beskrive det ugjennomtrengelige
diff --git a/examples/tools/codecs/encodedfiles/iso-8859-15.txt b/examples/tools/codecs/encodedfiles/iso-8859-15.txt
new file mode 100644
index 0000000..cd43ea3
--- /dev/null
+++ b/examples/tools/codecs/encodedfiles/iso-8859-15.txt
@@ -0,0 +1,8 @@
+Paulo Coelho: O G�nio e as Rosas
+Jean-Pierre Coffe: � table en famille avec 15 � par jour
+Anna Hallstr�m, Urban �stberg: Sv�r svenska
+Darrell Huff: How to Lie with Statistics
+Franz Kafka: Das Schlo�
+Helena Leheckov�: T�ekki� suomalaisille
+Arthur Rimbaud: �uvres compl�tes
+Dag Solstad: Fors�k p� � beskrive det ugjennomtrengelige
diff --git a/examples/tools/codecs/encodedfiles/utf-16.txt b/examples/tools/codecs/encodedfiles/utf-16.txt
new file mode 100644
index 0000000..371f06f
Binary files /dev/null and b/examples/tools/codecs/encodedfiles/utf-16.txt differ
diff --git a/examples/tools/codecs/encodedfiles/utf-16be.txt b/examples/tools/codecs/encodedfiles/utf-16be.txt
new file mode 100644
index 0000000..d8ae642
Binary files /dev/null and b/examples/tools/codecs/encodedfiles/utf-16be.txt differ
diff --git a/examples/tools/codecs/encodedfiles/utf-16le.txt b/examples/tools/codecs/encodedfiles/utf-16le.txt
new file mode 100644
index 0000000..3779264
Binary files /dev/null and b/examples/tools/codecs/encodedfiles/utf-16le.txt differ
diff --git a/examples/tools/codecs/encodedfiles/utf-8.txt b/examples/tools/codecs/encodedfiles/utf-8.txt
new file mode 100644
index 0000000..a5e4ae6
--- /dev/null
+++ b/examples/tools/codecs/encodedfiles/utf-8.txt
@@ -0,0 +1,6 @@
+Språk: Norsk
+Γλώσσα: Ελληνικά
+Язык: Русский
+언어 : 한국어
+言語: 日本語
+Langage : Français
diff --git a/examples/tools/customcompleter/customcompleter.py b/examples/tools/customcompleter/customcompleter.py
new file mode 100644
index 0000000..db839b5
--- /dev/null
+++ b/examples/tools/customcompleter/customcompleter.py
@@ -0,0 +1,206 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2012 Digia Plc
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFile, QStringListModel, Qt
+from PyQt5.QtGui import QCursor, QKeySequence, QTextCursor
+from PyQt5.QtWidgets import (QAction, QApplication, QCompleter, QMainWindow,
+        QMessageBox, QTextEdit)
+
+import customcompleter_rc
+
+
+class TextEdit(QTextEdit):
+    def __init__(self, parent=None):
+        super(TextEdit, self).__init__(parent)
+
+        self._completer = None
+
+        self.setPlainText(
+                "This TextEdit provides autocompletions for words that have "
+                "more than 3 characters. You can trigger autocompletion "
+                "using %s" % QKeySequence("Ctrl+E").toString(
+                        QKeySequence.NativeText))
+
+    def setCompleter(self, c):
+        if self._completer is not None:
+            self._completer.activated.disconnect()
+
+        self._completer = c
+
+        c.setWidget(self)
+        c.setCompletionMode(QCompleter.PopupCompletion)
+        c.setCaseSensitivity(Qt.CaseInsensitive)
+        c.activated.connect(self.insertCompletion)
+
+    def completer(self):
+        return self._completer
+
+    def insertCompletion(self, completion):
+        if self._completer.widget() is not self:
+            return
+
+        tc = self.textCursor()
+        extra = len(completion) - len(self._completer.completionPrefix())
+        tc.movePosition(QTextCursor.Left)
+        tc.movePosition(QTextCursor.EndOfWord)
+        tc.insertText(completion[-extra:])
+        self.setTextCursor(tc)
+
+    def textUnderCursor(self):
+        tc = self.textCursor()
+        tc.select(QTextCursor.WordUnderCursor)
+
+        return tc.selectedText()
+
+    def focusInEvent(self, e):
+        if self._completer is not None:
+            self._completer.setWidget(self)
+
+        super(TextEdit, self).focusInEvent(e)
+
+    def keyPressEvent(self, e):
+        if self._completer is not None and self._completer.popup().isVisible():
+            # The following keys are forwarded by the completer to the widget.
+            if e.key() in (Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Tab, Qt.Key_Backtab):
+                e.ignore()
+                # Let the completer do default behavior.
+                return
+
+        isShortcut = ((e.modifiers() & Qt.ControlModifier) != 0 and e.key() == Qt.Key_E)
+        if self._completer is None or not isShortcut:
+            # Do not process the shortcut when we have a completer.
+            super(TextEdit, self).keyPressEvent(e)
+
+        ctrlOrShift = e.modifiers() & (Qt.ControlModifier | Qt.ShiftModifier)
+        if self._completer is None or (ctrlOrShift and len(e.text()) == 0):
+            return
+
+        eow = "~!@#$%^&*()_+{}|:\"<>?,./;'[]\\-="
+        hasModifier = (e.modifiers() != Qt.NoModifier) and not ctrlOrShift
+        completionPrefix = self.textUnderCursor()
+
+        if not isShortcut and (hasModifier or len(e.text()) == 0 or len(completionPrefix) < 3 or e.text()[-1] in eow):
+            self._completer.popup().hide()
+            return
+
+        if completionPrefix != self._completer.completionPrefix():
+            self._completer.setCompletionPrefix(completionPrefix)
+            self._completer.popup().setCurrentIndex(
+                    self._completer.completionModel().index(0, 0))
+
+        cr = self.cursorRect()
+        cr.setWidth(self._completer.popup().sizeHintForColumn(0) + self._completer.popup().verticalScrollBar().sizeHint().width())
+        self._completer.complete(cr)
+
+
+class MainWindow(QMainWindow):
+    def __init__(self, parent=None):
+        super(MainWindow, self).__init__(parent)
+
+        self.createMenu()
+
+        self.completingTextEdit = TextEdit()
+        self.completer = QCompleter(self)
+        self.completer.setModel(self.modelFromFile(':/resources/wordlist.txt'))
+        self.completer.setModelSorting(QCompleter.CaseInsensitivelySortedModel)
+        self.completer.setCaseSensitivity(Qt.CaseInsensitive)
+        self.completer.setWrapAround(False)
+        self.completingTextEdit.setCompleter(self.completer)
+
+        self.setCentralWidget(self.completingTextEdit)
+        self.resize(500, 300)
+        self.setWindowTitle("Completer")
+
+    def createMenu(self):
+        exitAction = QAction("Exit", self)
+        aboutAct = QAction("About", self)
+        aboutQtAct = QAction("About Qt", self)
+
+        exitAction.triggered.connect(QApplication.instance().quit)
+        aboutAct.triggered.connect(self.about)
+        aboutQtAct.triggered.connect(QApplication.instance().aboutQt)
+
+        fileMenu = self.menuBar().addMenu("File")
+        fileMenu.addAction(exitAction)
+
+        helpMenu = self.menuBar().addMenu("About")
+        helpMenu.addAction(aboutAct)
+        helpMenu.addAction(aboutQtAct)
+
+    def modelFromFile(self, fileName):
+        f = QFile(fileName)
+        if not f.open(QFile.ReadOnly):
+            return QStringListModel(self.completer)
+
+        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
+
+        words = []
+        while not f.atEnd():
+            line = f.readLine().trimmed()
+            if line.length() != 0:
+                try:
+                    line = str(line, encoding='ascii')
+                except TypeError:
+                    line = str(line)
+
+                words.append(line)
+
+        QApplication.restoreOverrideCursor()
+
+        return QStringListModel(words, self.completer)
+
+    def about(self):
+        QMessageBox.about(self, "About",
+                "This example demonstrates the different features of the "
+                "QCompleter class.")
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/tools/customcompleter/customcompleter.qrc b/examples/tools/customcompleter/customcompleter.qrc
new file mode 100644
index 0000000..d7da1bf
--- /dev/null
+++ b/examples/tools/customcompleter/customcompleter.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+   <file>resources/wordlist.txt</file>
+</qresource>
+</RCC>
diff --git a/examples/tools/customcompleter/customcompleter_rc.py b/examples/tools/customcompleter/customcompleter_rc.py
new file mode 100644
index 0000000..77e16d8
--- /dev/null
+++ b/examples/tools/customcompleter/customcompleter_rc.py
@@ -0,0 +1,734 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Tue May 14 15:36:48 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x2b\x52\
+\x41\
+\x34\x0a\x61\x62\x6c\x65\x0a\x61\x62\x6f\x75\x74\x0a\x61\x62\x6f\
+\x76\x65\x0a\x61\x62\x73\x65\x6e\x63\x65\x0a\x61\x62\x73\x6f\x6c\
+\x75\x74\x65\x6c\x79\x0a\x61\x62\x73\x74\x72\x61\x63\x74\x0a\x61\
+\x63\x63\x65\x73\x73\x0a\x61\x63\x63\x6f\x72\x64\x69\x6e\x67\x0a\
+\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x64\x0a\x61\x63\x68\x69\
+\x65\x76\x65\x0a\x61\x63\x68\x69\x65\x76\x69\x6e\x67\x0a\x61\x63\
+\x74\x69\x76\x69\x74\x79\x0a\x61\x63\x74\x73\x0a\x61\x63\x74\x75\
+\x61\x6c\x0a\x61\x63\x74\x75\x61\x6c\x6c\x79\x0a\x61\x64\x64\x0a\
+\x61\x64\x64\x65\x64\x0a\x61\x64\x64\x69\x6e\x67\x0a\x61\x64\x64\
+\x69\x74\x69\x6f\x6e\x0a\x61\x64\x64\x69\x74\x69\x6f\x6e\x61\x6c\
+\x6c\x79\x0a\x61\x64\x64\x69\x74\x69\x6f\x6e\x73\x0a\x61\x64\x64\
+\x72\x65\x73\x73\x65\x73\x0a\x61\x64\x6a\x75\x73\x74\x0a\x61\x64\
+\x6a\x75\x73\x74\x6d\x65\x6e\x74\x73\x0a\x61\x64\x76\x61\x6e\x63\
+\x65\x64\x0a\x61\x64\x76\x69\x63\x65\x0a\x61\x66\x74\x65\x72\x0a\
+\x61\x66\x74\x65\x72\x77\x61\x72\x64\x73\x0a\x61\x67\x61\x69\x6e\
+\x0a\x61\x67\x65\x6e\x64\x61\x0a\x61\x69\x6d\x0a\x61\x6c\x67\x6f\
+\x72\x69\x74\x68\x6d\x0a\x61\x6c\x6c\x0a\x61\x6c\x6c\x6f\x63\x61\
+\x74\x65\x64\x0a\x61\x6c\x6c\x6f\x77\x0a\x61\x6c\x6c\x6f\x77\x65\
+\x64\x0a\x61\x6c\x6c\x6f\x77\x69\x6e\x67\x0a\x61\x6c\x6c\x6f\x77\
+\x73\x0a\x61\x6c\x6f\x6e\x67\x0a\x61\x6c\x70\x68\x61\x0a\x61\x6c\
+\x72\x65\x61\x64\x79\x0a\x61\x6c\x73\x6f\x0a\x61\x6c\x74\x65\x72\
+\x6e\x61\x74\x69\x76\x65\x0a\x61\x6c\x74\x65\x72\x6e\x61\x74\x69\
+\x76\x65\x6c\x79\x0a\x61\x6c\x74\x68\x6f\x75\x67\x68\x0a\x41\x6d\
+\x65\x72\x69\x63\x61\x6e\x0a\x61\x6e\x0a\x61\x6e\x64\x0a\x61\x6e\
+\x6e\x6f\x75\x6e\x63\x65\x64\x0a\x61\x6e\x6e\x6f\x79\x0a\x61\x6e\
+\x6f\x74\x68\x65\x72\x0a\x61\x6e\x73\x77\x65\x72\x0a\x61\x6e\x73\
+\x77\x65\x72\x73\x0a\x61\x6e\x79\x0a\x61\x6e\x79\x74\x68\x69\x6e\
+\x67\x0a\x61\x6e\x79\x77\x61\x79\x0a\x61\x70\x61\x72\x74\x0a\x41\
+\x50\x49\x0a\x61\x70\x70\x65\x61\x72\x0a\x61\x70\x70\x65\x61\x72\
+\x73\x0a\x61\x70\x70\x65\x6e\x64\x69\x63\x65\x73\x0a\x61\x70\x70\
+\x65\x6e\x64\x69\x78\x0a\x61\x70\x70\x65\x6e\x64\x73\x0a\x61\x70\
+\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x0a\x61\x70\x70\x6c\x69\x63\
+\x61\x74\x69\x6f\x6e\x73\x0a\x61\x70\x70\x6c\x79\x0a\x61\x70\x70\
+\x72\x6f\x61\x63\x68\x0a\x61\x70\x70\x72\x6f\x61\x63\x68\x65\x73\
+\x0a\x61\x70\x70\x72\x6f\x70\x72\x69\x61\x74\x65\x0a\x41\x72\x61\
+\x62\x69\x63\x0a\x61\x72\x62\x69\x74\x72\x61\x72\x79\x0a\x61\x72\
+\x65\x0a\x61\x72\x65\x61\x73\x0a\x41\x52\x47\x42\x0a\x61\x72\x67\
+\x75\x6d\x65\x6e\x74\x0a\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x0a\
+\x61\x72\x6f\x75\x6e\x64\x0a\x61\x72\x72\x61\x6e\x67\x65\x6d\x65\
+\x6e\x74\x73\x0a\x61\x72\x72\x69\x76\x65\x0a\x61\x72\x72\x69\x76\
+\x65\x64\x0a\x41\x72\x74\x68\x75\x72\x0a\x61\x72\x74\x69\x63\x6c\
+\x65\x0a\x61\x72\x74\x69\x63\x6c\x65\x73\x0a\x61\x73\x0a\x61\x73\
+\x6b\x65\x64\x0a\x61\x73\x70\x65\x63\x74\x73\x0a\x61\x73\x73\x75\
+\x6d\x65\x0a\x61\x74\x0a\x61\x74\x74\x61\x63\x68\x6d\x65\x6e\x74\
+\x0a\x61\x74\x74\x65\x6d\x70\x74\x0a\x61\x74\x74\x65\x6d\x70\x74\
+\x69\x6e\x67\x0a\x61\x74\x74\x65\x6e\x64\x0a\x61\x74\x74\x65\x6e\
+\x64\x65\x65\x73\x0a\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73\x0a\
+\x61\x75\x74\x68\x6f\x72\x73\x0a\x61\x76\x61\x69\x6c\x61\x62\x69\
+\x6c\x69\x74\x79\x0a\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x0a\x61\
+\x76\x6f\x69\x64\x0a\x61\x77\x61\x79\x0a\x62\x61\x63\x6b\x0a\x62\
+\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x0a\x62\x61\x63\x6b\x67\x72\
+\x6f\x75\x6e\x64\x73\x0a\x62\x61\x6e\x64\x77\x69\x64\x74\x68\x0a\
+\x62\x61\x6e\x64\x77\x69\x64\x74\x68\x73\x0a\x42\x61\x72\x63\x65\
+\x6c\x6f\x6e\x61\x0a\x62\x61\x73\x65\x0a\x62\x61\x73\x65\x64\x0a\
+\x62\x61\x73\x69\x63\x0a\x62\x61\x73\x69\x63\x61\x6c\x6c\x79\x0a\
+\x62\x61\x73\x69\x63\x73\x0a\x62\x65\x0a\x62\x65\x63\x61\x75\x73\
+\x65\x0a\x62\x65\x65\x6e\x0a\x62\x65\x66\x6f\x72\x65\x0a\x62\x65\
+\x68\x61\x76\x65\x0a\x62\x65\x68\x61\x76\x69\x6f\x72\x0a\x62\x65\
+\x68\x69\x6e\x64\x0a\x62\x65\x69\x6e\x67\x0a\x62\x65\x6c\x6f\x77\
+\x0a\x62\x65\x6e\x65\x66\x69\x74\x73\x0a\x42\x65\x72\x6b\x65\x6c\
+\x65\x79\x0a\x62\x65\x74\x77\x65\x65\x6e\x0a\x62\x69\x74\x0a\x62\
+\x69\x74\x73\x0a\x62\x69\x74\x77\x69\x73\x65\x0a\x62\x6c\x61\x63\
+\x6b\x0a\x62\x6c\x65\x6e\x64\x65\x64\x0a\x62\x6c\x65\x6e\x64\x69\
+\x6e\x67\x0a\x62\x6c\x65\x6e\x64\x73\x0a\x62\x6c\x6f\x63\x6b\x0a\
+\x62\x6c\x75\x65\x0a\x42\x4d\x50\x0a\x62\x6f\x64\x79\x0a\x62\x6f\
+\x6c\x64\x0a\x62\x6f\x6f\x6b\x69\x6e\x67\x0a\x62\x6f\x6f\x6c\x0a\
+\x42\x6f\x73\x74\x6f\x6e\x0a\x62\x6f\x74\x68\x0a\x62\x6f\x74\x74\
+\x6f\x6d\x0a\x62\x6f\x78\x0a\x62\x6f\x78\x65\x73\x0a\x62\x72\x61\
+\x63\x65\x73\x0a\x62\x72\x65\x61\x6b\x0a\x62\x72\x65\x61\x6b\x73\
+\x0a\x62\x72\x6f\x61\x64\x0a\x62\x72\x6f\x77\x73\x65\x72\x73\x0a\
+\x62\x75\x66\x66\x65\x72\x0a\x62\x75\x66\x66\x65\x72\x73\x0a\x62\
+\x75\x69\x6c\x64\x0a\x62\x75\x69\x6c\x64\x73\x0a\x62\x75\x69\x6c\
+\x74\x0a\x62\x75\x6e\x64\x6c\x65\x64\x0a\x62\x75\x72\x64\x65\x6e\
+\x73\x0a\x62\x75\x73\x79\x0a\x62\x75\x74\x0a\x62\x79\x0a\x62\x79\
+\x70\x61\x73\x73\x0a\x62\x79\x70\x61\x73\x73\x69\x6e\x67\x0a\x62\
+\x79\x74\x65\x73\x0a\x63\x61\x6c\x65\x6e\x64\x61\x72\x0a\x63\x61\
+\x6c\x6c\x0a\x63\x61\x6c\x6c\x65\x64\x0a\x63\x61\x6c\x6c\x69\x6e\
+\x67\x0a\x63\x61\x6c\x6c\x73\x0a\x43\x61\x6d\x62\x72\x69\x64\x67\
+\x65\x0a\x63\x61\x6e\x0a\x63\x61\x6e\x6f\x6e\x69\x63\x61\x6c\x0a\
+\x63\x61\x6e\x6f\x6e\x69\x63\x61\x6c\x69\x73\x65\x64\x0a\x63\x61\
+\x70\x0a\x63\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x0a\x63\
+\x61\x70\x61\x63\x69\x74\x79\x0a\x63\x61\x70\x74\x69\x6f\x6e\x0a\
+\x63\x61\x72\x64\x0a\x63\x61\x72\x65\x0a\x63\x61\x73\x65\x0a\x63\
+\x61\x73\x74\x0a\x63\x61\x74\x63\x68\x0a\x63\x61\x75\x73\x69\x6e\
+\x67\x0a\x63\x65\x6e\x74\x72\x65\x0a\x63\x65\x72\x74\x61\x69\x6e\
+\x0a\x63\x68\x61\x6c\x6c\x65\x6e\x67\x65\x73\x0a\x63\x68\x61\x6e\
+\x63\x65\x0a\x63\x68\x61\x6e\x67\x65\x0a\x63\x68\x61\x6e\x67\x65\
+\x73\x0a\x63\x68\x61\x6e\x67\x69\x6e\x67\x0a\x63\x68\x61\x6e\x6e\
+\x65\x6c\x0a\x63\x68\x61\x6e\x6e\x65\x6c\x73\x0a\x63\x68\x61\x70\
+\x74\x65\x72\x0a\x63\x68\x61\x72\x0a\x63\x68\x61\x72\x74\x0a\x63\
+\x68\x61\x72\x74\x73\x0a\x63\x68\x65\x63\x6b\x0a\x63\x68\x65\x63\
+\x6b\x73\x0a\x43\x68\x69\x63\x61\x67\x6f\x0a\x63\x68\x6f\x73\x65\
+\x6e\x0a\x63\x68\x75\x6e\x6b\x0a\x63\x69\x72\x63\x6c\x65\x0a\x63\
+\x69\x74\x61\x74\x69\x6f\x6e\x0a\x63\x69\x74\x79\x0a\x63\x6c\x61\
+\x69\x6d\x0a\x63\x6c\x61\x73\x73\x0a\x63\x6c\x61\x73\x73\x65\x73\
+\x0a\x63\x6c\x61\x75\x73\x65\x0a\x63\x6c\x61\x75\x73\x65\x73\x0a\
+\x63\x6c\x65\x61\x72\x0a\x63\x6c\x65\x61\x72\x69\x6e\x67\x0a\x63\
+\x6c\x69\x65\x6e\x74\x0a\x63\x6c\x69\x65\x6e\x74\x73\x0a\x63\x6c\
+\x6f\x73\x65\x0a\x63\x6c\x6f\x73\x65\x64\x0a\x63\x6f\x64\x65\x0a\
+\x63\x6f\x6c\x6f\x6e\x0a\x63\x6f\x6c\x6f\x72\x0a\x63\x6f\x6c\x6f\
+\x72\x69\x7a\x65\x0a\x63\x6f\x6c\x6f\x72\x69\x7a\x65\x72\x0a\x63\
+\x6f\x6c\x6f\x72\x73\x0a\x63\x6f\x6c\x6f\x75\x72\x0a\x63\x6f\x6c\
+\x75\x6d\x6e\x0a\x63\x6f\x6c\x75\x6d\x6e\x73\x0a\x63\x6f\x6d\x62\
+\x69\x6e\x65\x0a\x63\x6f\x6d\x62\x69\x6e\x65\x64\x0a\x63\x6f\x6d\
+\x62\x69\x6e\x65\x73\x0a\x63\x6f\x6d\x62\x69\x6e\x69\x6e\x67\x0a\
+\x63\x6f\x6d\x65\x73\x0a\x63\x6f\x6d\x6d\x61\x6e\x64\x0a\x63\x6f\
+\x6d\x6d\x61\x6e\x64\x73\x0a\x63\x6f\x6d\x6d\x65\x6e\x74\x0a\x63\
+\x6f\x6d\x6d\x6f\x6e\x0a\x63\x6f\x6d\x6d\x75\x6e\x69\x63\x61\x74\
+\x65\x0a\x63\x6f\x6d\x6d\x75\x6e\x69\x74\x79\x0a\x63\x6f\x6d\x70\
+\x69\x6c\x65\x64\x0a\x63\x6f\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x0a\
+\x63\x6f\x6d\x70\x6c\x65\x74\x65\x0a\x63\x6f\x6d\x70\x6c\x65\x74\
+\x65\x6c\x79\x0a\x63\x6f\x6d\x70\x6c\x65\x74\x65\x6e\x65\x73\x73\
+\x0a\x63\x6f\x6d\x70\x6c\x65\x74\x65\x73\x0a\x63\x6f\x6d\x70\x6c\
+\x65\x74\x69\x6f\x6e\x0a\x63\x6f\x6d\x70\x6c\x65\x78\x0a\x63\x6f\
+\x6d\x70\x6c\x69\x61\x6e\x74\x0a\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\
+\x74\x0a\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x73\x0a\x63\x6f\x6d\
+\x70\x6f\x73\x69\x74\x69\x6e\x67\x0a\x63\x6f\x6d\x70\x6f\x73\x69\
+\x74\x69\x6f\x6e\x0a\x63\x6f\x6d\x70\x72\x65\x73\x73\x69\x6f\x6e\
+\x0a\x63\x6f\x6d\x70\x75\x74\x61\x74\x69\x6f\x6e\x0a\x63\x6f\x6d\
+\x70\x75\x74\x65\x72\x0a\x63\x6f\x6e\x63\x65\x70\x74\x73\x0a\x63\
+\x6f\x6e\x63\x6c\x75\x73\x69\x6f\x6e\x0a\x63\x6f\x6e\x63\x75\x72\
+\x72\x65\x6e\x74\x0a\x63\x6f\x6e\x66\x69\x67\x75\x72\x61\x62\x6c\
+\x65\x0a\x63\x6f\x6e\x67\x65\x73\x74\x65\x64\x0a\x63\x6f\x6e\x67\
+\x65\x73\x74\x69\x6f\x6e\x0a\x63\x6f\x6e\x6e\x65\x63\x74\x0a\x63\
+\x6f\x6e\x6e\x65\x63\x74\x65\x64\x0a\x63\x6f\x6e\x6e\x65\x63\x74\
+\x69\x6f\x6e\x0a\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x73\x0a\
+\x63\x6f\x6e\x73\x0a\x63\x6f\x6e\x73\x69\x64\x65\x72\x0a\x63\x6f\
+\x6e\x73\x69\x73\x74\x69\x6e\x67\x0a\x63\x6f\x6e\x73\x69\x73\x74\
+\x73\x0a\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x0a\x63\x6f\x6e\x73\
+\x74\x72\x75\x63\x74\x65\x64\x0a\x63\x6f\x6e\x73\x74\x72\x75\x63\
+\x74\x69\x6e\x67\x0a\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\
+\x0a\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x73\x0a\x63\x6f\x6e\x73\
+\x75\x6d\x65\x0a\x63\x6f\x6e\x74\x61\x63\x74\x0a\x63\x6f\x6e\x74\
+\x61\x69\x6e\x0a\x63\x6f\x6e\x74\x61\x69\x6e\x69\x6e\x67\x0a\x63\
+\x6f\x6e\x74\x61\x69\x6e\x73\x0a\x63\x6f\x6e\x74\x65\x6e\x74\x73\
+\x0a\x63\x6f\x6e\x74\x65\x6e\x74\x73\x0a\x63\x6f\x6e\x74\x69\x6e\
+\x75\x65\x0a\x63\x6f\x6e\x74\x69\x6e\x75\x65\x64\x0a\x63\x6f\x6e\
+\x74\x72\x69\x62\x75\x74\x6f\x72\x73\x0a\x63\x6f\x6e\x74\x72\x6f\
+\x6c\x0a\x63\x6f\x6e\x74\x72\x6f\x6c\x6c\x65\x64\x0a\x63\x6f\x6e\
+\x74\x72\x6f\x6c\x6c\x65\x72\x0a\x63\x6f\x6e\x74\x72\x6f\x6c\x6c\
+\x65\x72\x0a\x63\x6f\x6e\x74\x72\x6f\x6c\x6c\x69\x6e\x67\x0a\x63\
+\x6f\x6e\x74\x72\x6f\x6c\x73\x0a\x63\x6f\x6e\x74\x72\x6f\x6c\x73\
+\x0a\x63\x6f\x6e\x76\x65\x6e\x74\x69\x6f\x6e\x73\x0a\x63\x6f\x6f\
+\x6b\x0a\x63\x6f\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x0a\x63\x6f\
+\x70\x79\x0a\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x0a\x63\x6f\x72\
+\x65\x0a\x63\x6f\x72\x65\x73\x0a\x63\x6f\x72\x6f\x6c\x6c\x61\x72\
+\x79\x0a\x63\x6f\x72\x72\x65\x63\x74\x0a\x63\x6f\x72\x72\x65\x63\
+\x74\x6c\x79\x0a\x63\x6f\x72\x72\x65\x73\x70\x6f\x6e\x64\x69\x6e\
+\x67\x0a\x63\x6f\x75\x6c\x64\x0a\x63\x6f\x75\x70\x6c\x65\x0a\x63\
+\x6f\x77\x6f\x72\x6b\x65\x72\x73\x0a\x43\x50\x55\x0a\x63\x72\x65\
+\x61\x74\x65\x0a\x63\x72\x65\x61\x74\x65\x73\x0a\x63\x72\x65\x61\
+\x74\x69\x6e\x67\x0a\x63\x72\x75\x63\x69\x61\x6c\x0a\x63\x75\x6c\
+\x74\x75\x72\x65\x73\x0a\x63\x75\x72\x72\x65\x6e\x74\x0a\x63\x75\
+\x72\x72\x65\x6e\x74\x6c\x79\x0a\x63\x75\x73\x74\x6f\x6d\x0a\x63\
+\x75\x73\x74\x6f\x6d\x69\x7a\x65\x64\x0a\x63\x75\x74\x0a\x64\x61\
+\x74\x61\x0a\x64\x61\x74\x61\x62\x61\x73\x65\x0a\x64\x61\x74\x61\
+\x73\x65\x74\x73\x0a\x64\x61\x74\x75\x6d\x0a\x64\x61\x79\x0a\x64\
+\x61\x79\x73\x0a\x64\x65\x61\x6c\x0a\x64\x65\x61\x6c\x69\x6e\x67\
+\x0a\x64\x65\x63\x69\x64\x65\x0a\x64\x65\x63\x6f\x75\x70\x6c\x65\
+\x0a\x64\x65\x63\x6f\x75\x70\x6c\x65\x64\x0a\x64\x65\x65\x70\x6c\
+\x79\x0a\x64\x65\x66\x0a\x64\x65\x66\x61\x75\x6c\x74\x0a\x64\x65\
+\x66\x69\x6e\x65\x0a\x64\x65\x66\x69\x6e\x65\x73\x0a\x64\x65\x66\
+\x69\x6e\x69\x74\x69\x6f\x6e\x0a\x64\x65\x66\x69\x6e\x69\x74\x69\
+\x6f\x6e\x73\x0a\x64\x65\x6c\x65\x67\x61\x74\x65\x0a\x64\x65\x6c\
+\x65\x74\x65\x0a\x64\x65\x6d\x6f\x0a\x64\x65\x6d\x6f\x6e\x73\x74\
+\x72\x61\x74\x65\x0a\x64\x65\x6d\x6f\x6e\x73\x74\x72\x61\x74\x69\
+\x6f\x6e\x73\x0a\x64\x65\x70\x6c\x6f\x79\x65\x64\x0a\x64\x65\x73\
+\x63\x72\x69\x62\x65\x0a\x64\x65\x73\x63\x72\x69\x62\x65\x73\x0a\
+\x64\x65\x73\x69\x67\x6e\x0a\x64\x65\x73\x6b\x74\x6f\x70\x0a\x64\
+\x65\x73\x6b\x74\x6f\x70\x73\x0a\x64\x65\x73\x74\x69\x6e\x61\x74\
+\x69\x6f\x6e\x0a\x64\x65\x73\x74\x69\x6e\x61\x74\x69\x6f\x6e\x73\
+\x0a\x64\x65\x73\x74\x72\x75\x63\x74\x6f\x72\x0a\x64\x65\x74\x61\
+\x69\x6c\x73\x0a\x64\x65\x74\x65\x63\x74\x0a\x64\x65\x74\x65\x72\
+\x6d\x69\x6e\x65\x0a\x64\x65\x74\x65\x72\x6d\x69\x6e\x65\x73\x0a\
+\x64\x65\x76\x65\x6c\x6f\x70\x65\x72\x0a\x64\x65\x76\x65\x6c\x6f\
+\x70\x65\x72\x73\x0a\x64\x65\x76\x65\x6c\x6f\x70\x6d\x65\x6e\x74\
+\x0a\x64\x65\x76\x65\x6c\x6f\x70\x6d\x65\x6e\x74\x73\x0a\x64\x65\
+\x76\x69\x63\x65\x0a\x64\x65\x76\x69\x63\x65\x73\x0a\x64\x69\x61\
+\x67\x72\x61\x6d\x0a\x64\x69\x61\x6c\x6f\x67\x73\x0a\x64\x69\x63\
+\x74\x69\x6f\x6e\x61\x72\x79\x0a\x64\x69\x64\x0a\x64\x69\x66\x66\
+\x65\x72\x65\x6e\x63\x65\x0a\x64\x69\x66\x66\x65\x72\x65\x6e\x63\
+\x65\x73\x0a\x64\x69\x66\x66\x65\x72\x65\x6e\x74\x0a\x64\x69\x66\
+\x66\x65\x72\x73\x0a\x64\x69\x67\x69\x74\x61\x6c\x0a\x64\x69\x72\
+\x65\x63\x74\x0a\x64\x69\x72\x65\x63\x74\x0a\x64\x69\x72\x65\x63\
+\x74\x69\x6f\x6e\x73\x0a\x64\x69\x72\x65\x63\x74\x6c\x79\x0a\x64\
+\x69\x72\x65\x63\x74\x6f\x72\x79\x0a\x64\x69\x73\x63\x75\x73\x73\
+\x0a\x64\x69\x73\x70\x6c\x61\x79\x0a\x64\x69\x73\x70\x6c\x61\x79\
+\x69\x6e\x67\x0a\x64\x69\x73\x70\x6c\x61\x79\x73\x0a\x64\x69\x73\
+\x74\x72\x69\x62\x75\x74\x65\x0a\x64\x69\x73\x74\x72\x69\x62\x75\
+\x74\x69\x6f\x6e\x0a\x64\x69\x73\x74\x75\x72\x62\x69\x6e\x67\x0a\
+\x64\x69\x76\x69\x64\x65\x0a\x64\x6f\x0a\x64\x6f\x63\x75\x6d\x65\
+\x6e\x74\x61\x74\x69\x6f\x6e\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\
+\x73\x0a\x64\x6f\x65\x73\x0a\x64\x6f\x6e\x65\x0a\x64\x6f\x77\x6e\
+\x0a\x64\x6f\x77\x6e\x4c\x69\x6d\x69\x74\x0a\x64\x6f\x77\x6e\x6c\
+\x6f\x61\x64\x0a\x64\x6f\x77\x6e\x6c\x6f\x61\x64\x65\x64\x0a\x64\
+\x6f\x77\x6e\x6c\x6f\x61\x64\x69\x6e\x67\x0a\x64\x72\x61\x77\x0a\
+\x64\x72\x61\x77\x69\x6e\x67\x0a\x64\x72\x61\x77\x6e\x0a\x64\x72\
+\x6f\x70\x0a\x44\x75\x66\x66\x0a\x64\x75\x72\x69\x6e\x67\x0a\x44\
+\x56\x44\x0a\x64\x79\x6e\x61\x6d\x69\x63\x0a\x64\x79\x6e\x61\x6d\
+\x69\x63\x61\x6c\x6c\x79\x0a\x64\x79\x6e\x61\x6d\x69\x63\x73\x0a\
+\x65\x61\x63\x68\x0a\x65\x61\x72\x6c\x69\x65\x72\x0a\x65\x61\x73\
+\x69\x6c\x79\x0a\x65\x64\x69\x74\x69\x6e\x67\x0a\x65\x64\x69\x74\
+\x6f\x72\x73\x0a\x65\x64\x75\x63\x61\x74\x69\x6f\x6e\x0a\x65\x66\
+\x66\x65\x63\x74\x0a\x65\x66\x66\x65\x63\x74\x69\x76\x65\x6c\x79\
+\x0a\x65\x66\x66\x65\x63\x74\x73\x0a\x65\x69\x74\x68\x65\x72\x0a\
+\x65\x6c\x6c\x69\x70\x73\x65\x0a\x65\x6c\x6c\x69\x70\x73\x65\x73\
+\x0a\x65\x6c\x6c\x69\x70\x74\x69\x63\x61\x6c\x0a\x65\x6c\x73\x65\
+\x0a\x65\x6d\x61\x69\x6c\x0a\x65\x6d\x62\x65\x64\x64\x65\x64\x0a\
+\x65\x6d\x69\x74\x0a\x65\x6d\x69\x74\x73\x0a\x65\x6d\x70\x74\x79\
+\x0a\x65\x6e\x61\x62\x6c\x65\x0a\x65\x6e\x61\x62\x6c\x65\x73\x0a\
+\x65\x6e\x63\x61\x70\x73\x75\x6c\x61\x74\x65\x73\x0a\x65\x6e\x63\
+\x6c\x6f\x73\x65\x0a\x65\x6e\x64\x0a\x65\x6e\x64\x6e\x6f\x74\x65\
+\x0a\x65\x6e\x64\x6e\x6f\x74\x65\x73\x0a\x65\x6e\x67\x69\x6e\x65\
+\x65\x72\x0a\x65\x6e\x67\x69\x6e\x65\x65\x72\x69\x6e\x67\x0a\x45\
+\x6e\x67\x6c\x69\x73\x68\x0a\x65\x6e\x6a\x6f\x79\x73\x0a\x65\x6e\
+\x6f\x75\x67\x68\x0a\x65\x6e\x73\x75\x72\x65\x0a\x65\x6e\x73\x75\
+\x72\x65\x73\x0a\x65\x6e\x74\x61\x69\x6c\x73\x0a\x65\x6e\x74\x65\
+\x72\x0a\x65\x6e\x74\x69\x72\x65\x0a\x65\x6e\x74\x69\x74\x6c\x65\
+\x64\x0a\x65\x6e\x74\x72\x69\x65\x73\x0a\x65\x6e\x74\x72\x79\x0a\
+\x65\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x0a\x65\x72\x61\x73\
+\x65\x73\x0a\x65\x72\x72\x6f\x72\x0a\x65\x72\x72\x6f\x72\x73\x0a\
+\x65\x73\x70\x65\x63\x69\x61\x6c\x6c\x79\x0a\x65\x73\x74\x61\x62\
+\x6c\x69\x73\x68\x65\x64\x0a\x65\x74\x63\x2e\x0a\x45\x75\x72\x6f\
+\x70\x65\x0a\x65\x76\x65\x6e\x0a\x65\x76\x65\x6e\x6c\x79\x0a\x65\
+\x76\x65\x6e\x74\x0a\x65\x76\x65\x6e\x74\x73\x0a\x65\x76\x65\x6e\
+\x74\x75\x61\x6c\x6c\x79\x0a\x65\x76\x65\x72\x79\x0a\x65\x76\x65\
+\x72\x79\x6f\x6e\x65\x0a\x65\x78\x61\x6d\x70\x6c\x65\x0a\x65\x78\
+\x61\x6d\x70\x6c\x65\x73\x0a\x65\x78\x63\x65\x70\x74\x0a\x65\x78\
+\x63\x65\x70\x74\x69\x6f\x6e\x0a\x65\x78\x63\x65\x73\x73\x69\x76\
+\x65\x0a\x65\x78\x63\x6c\x75\x73\x69\x76\x65\x0a\x65\x78\x69\x73\
+\x74\x69\x6e\x67\x0a\x65\x78\x69\x73\x74\x73\x0a\x65\x78\x70\x61\
+\x6e\x64\x0a\x65\x78\x70\x65\x63\x74\x65\x64\x0a\x65\x78\x70\x65\
+\x6e\x73\x65\x0a\x65\x78\x70\x6f\x72\x74\x0a\x65\x78\x70\x6f\x73\
+\x65\x73\x0a\x65\x78\x74\x65\x6e\x64\x0a\x65\x78\x74\x65\x6e\x64\
+\x65\x64\x0a\x65\x78\x74\x65\x6e\x64\x69\x6e\x67\x0a\x65\x78\x74\
+\x65\x6e\x73\x69\x62\x6c\x65\x0a\x65\x78\x74\x65\x6e\x73\x69\x6f\
+\x6e\x0a\x65\x78\x74\x65\x72\x6e\x61\x6c\x0a\x65\x78\x74\x72\x61\
+\x0a\x65\x78\x74\x72\x61\x63\x74\x0a\x66\x61\x63\x65\x73\x0a\x66\
+\x61\x63\x69\x6c\x69\x74\x69\x65\x73\x0a\x66\x61\x63\x74\x6f\x72\
+\x79\x0a\x66\x61\x64\x65\x0a\x66\x61\x69\x6c\x75\x72\x65\x0a\x66\
+\x61\x69\x72\x6e\x65\x73\x73\x0a\x66\x61\x6c\x6c\x73\x0a\x66\x61\
+\x6c\x73\x65\x0a\x66\x61\x6d\x69\x6c\x79\x0a\x66\x61\x73\x68\x69\
+\x6f\x6e\x0a\x66\x61\x73\x74\x0a\x66\x61\x73\x74\x65\x72\x0a\x66\
+\x65\x61\x74\x75\x72\x65\x73\x0a\x46\x65\x62\x72\x75\x61\x72\x79\
+\x0a\x66\x65\x65\x64\x62\x61\x63\x6b\x0a\x66\x65\x65\x6c\x0a\x66\
+\x65\x74\x63\x68\x0a\x66\x65\x74\x63\x68\x69\x6e\x67\x0a\x66\x65\
+\x77\x0a\x66\x69\x65\x6c\x64\x73\x0a\x66\x69\x67\x75\x72\x65\x0a\
+\x66\x69\x67\x75\x72\x65\x73\x0a\x66\x69\x6c\x65\x0a\x66\x69\x6c\
+\x65\x20\x6e\x61\x6d\x65\x0a\x66\x69\x6c\x65\x73\x0a\x66\x69\x6c\
+\x6c\x65\x64\x0a\x66\x69\x6c\x6c\x65\x72\x0a\x66\x69\x6e\x61\x6c\
+\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x0a\x66\x69\x6e\x64\x0a\x66\x69\
+\x6e\x65\x0a\x66\x69\x6e\x69\x73\x68\x0a\x66\x69\x6e\x69\x73\x68\
+\x65\x64\x0a\x66\x69\x72\x73\x74\x0a\x66\x6c\x6f\x77\x0a\x66\x6c\
+\x79\x0a\x66\x6f\x63\x75\x73\x0a\x66\x6f\x6c\x6c\x6f\x77\x65\x64\
+\x0a\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x0a\x66\x6f\x6e\x74\x0a\
+\x66\x6f\x6f\x74\x0a\x66\x6f\x6f\x74\x6e\x6f\x74\x65\x0a\x66\x6f\
+\x6f\x74\x6e\x6f\x74\x65\x73\x0a\x66\x6f\x72\x0a\x66\x6f\x72\x6d\
+\x0a\x66\x6f\x72\x6d\x61\x74\x0a\x66\x6f\x72\x6d\x61\x74\x73\x0a\
+\x66\x6f\x72\x6d\x73\x0a\x66\x6f\x72\x6d\x75\x6c\x61\x0a\x66\x6f\
+\x72\x6d\x75\x6c\x61\x73\x0a\x66\x6f\x72\x75\x6d\x0a\x66\x6f\x75\
+\x6e\x64\x0a\x66\x72\x61\x6d\x65\x77\x6f\x72\x6b\x0a\x46\x72\x61\
+\x6e\x63\x65\x0a\x66\x72\x6f\x6d\x0a\x66\x72\x6f\x6e\x74\x0a\x66\
+\x75\x6c\x6c\x0a\x66\x75\x6c\x6c\x79\x0a\x66\x75\x6e\x63\x74\x69\
+\x6f\x6e\x0a\x66\x75\x6e\x63\x74\x69\x6f\x6e\x61\x6c\x69\x74\x79\
+\x0a\x66\x75\x6e\x63\x74\x69\x6f\x6e\x73\x0a\x66\x75\x74\x75\x72\
+\x65\x0a\x67\x61\x69\x6e\x0a\x67\x61\x6d\x65\x73\x0a\x67\x61\x70\
+\x0a\x67\x65\x6e\x65\x72\x61\x6c\x0a\x67\x65\x6e\x65\x72\x69\x63\
+\x0a\x47\x65\x72\x6d\x61\x6e\x79\x0a\x67\x65\x74\x0a\x67\x69\x6c\
+\x6c\x0a\x67\x69\x76\x65\x0a\x67\x69\x76\x65\x6e\x0a\x67\x69\x76\
+\x65\x73\x0a\x67\x69\x76\x69\x6e\x67\x0a\x67\x6c\x6f\x62\x61\x6c\
+\x0a\x67\x6f\x0a\x67\x6f\x65\x73\x0a\x67\x6f\x74\x0a\x67\x72\x61\
+\x64\x69\x65\x6e\x74\x0a\x67\x72\x61\x70\x68\x0a\x67\x72\x61\x70\
+\x68\x69\x63\x61\x6c\x0a\x67\x72\x61\x70\x68\x69\x63\x73\x0a\x67\
+\x72\x61\x79\x0a\x67\x72\x65\x61\x74\x0a\x67\x72\x65\x61\x74\x6c\
+\x79\x0a\x67\x72\x65\x65\x6e\x0a\x67\x72\x65\x79\x0a\x67\x72\x6f\
+\x75\x70\x0a\x67\x72\x6f\x77\x69\x6e\x67\x0a\x67\x75\x69\x0a\x47\
+\x55\x49\x0a\x68\x61\x63\x6b\x0a\x68\x61\x64\x0a\x68\x61\x6c\x66\
+\x0a\x48\x61\x6d\x62\x75\x72\x67\x0a\x68\x61\x6e\x64\x0a\x68\x61\
+\x6e\x64\x69\x6e\x67\x0a\x68\x61\x6e\x64\x6c\x65\x0a\x68\x61\x6e\
+\x64\x6c\x65\x72\x0a\x68\x61\x6e\x64\x6c\x65\x72\x73\x0a\x68\x61\
+\x6e\x64\x6c\x65\x73\x0a\x68\x61\x6e\x64\x6c\x69\x6e\x67\x0a\x68\
+\x61\x70\x70\x65\x6e\x73\x0a\x68\x61\x72\x64\x77\x61\x72\x65\x0a\
+\x68\x61\x72\x6d\x6f\x6e\x69\x63\x61\x0a\x68\x61\x73\x0a\x68\x61\
+\x76\x65\x0a\x68\x61\x76\x69\x6e\x67\x0a\x68\x65\x0a\x68\x65\x61\
+\x64\x0a\x68\x65\x61\x64\x65\x72\x0a\x68\x65\x61\x64\x65\x72\x73\
+\x0a\x68\x65\x61\x72\x0a\x68\x65\x69\x67\x68\x74\x0a\x68\x65\x6c\
+\x70\x0a\x68\x65\x6c\x70\x65\x72\x0a\x68\x65\x72\x65\x0a\x68\x69\
+\x67\x68\x0a\x68\x69\x67\x68\x6c\x69\x67\x68\x74\x0a\x68\x69\x67\
+\x68\x6c\x79\x0a\x68\x69\x6e\x74\x73\x0a\x68\x69\x73\x0a\x68\x6f\
+\x6c\x64\x0a\x68\x6f\x6c\x64\x65\x72\x0a\x68\x6f\x6c\x64\x69\x6e\
+\x67\x0a\x68\x6f\x6c\x65\x0a\x68\x6f\x6d\x65\x0a\x68\x6f\x72\x69\
+\x7a\x6f\x6e\x74\x61\x6c\x0a\x68\x6f\x73\x74\x0a\x68\x6f\x73\x74\
+\x69\x6e\x67\x0a\x68\x6f\x75\x72\x73\x0a\x48\x6f\x75\x73\x74\x6f\
+\x6e\x0a\x68\x6f\x77\x0a\x68\x6f\x77\x65\x76\x65\x72\x0a\x68\x75\
+\x67\x65\x0a\x68\x79\x70\x68\x65\x6e\x0a\x49\x44\x0a\x69\x64\x65\
+\x61\x0a\x69\x64\x65\x61\x6c\x6c\x79\x0a\x69\x66\x0a\x49\x6c\x6c\
+\x69\x6e\x6f\x69\x73\x0a\x69\x6c\x6c\x75\x73\x74\x72\x61\x74\x65\
+\x0a\x69\x6c\x6c\x75\x73\x74\x72\x61\x74\x65\x64\x0a\x69\x6c\x6c\
+\x75\x73\x74\x72\x61\x74\x65\x73\x0a\x69\x6d\x61\x67\x65\x0a\x69\
+\x6d\x61\x67\x65\x73\x0a\x69\x6d\x70\x61\x63\x74\x0a\x69\x6d\x70\
+\x6c\x65\x6d\x65\x6e\x74\x0a\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\
+\x61\x74\x69\x6f\x6e\x0a\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x61\
+\x74\x69\x6f\x6e\x73\x0a\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x65\
+\x64\x0a\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x69\x6e\x67\x0a\x69\
+\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x73\x0a\x69\x6d\x70\x6f\x72\x74\
+\x0a\x69\x6d\x70\x6f\x72\x74\x61\x6e\x74\x0a\x69\x6d\x70\x72\x6f\
+\x76\x65\x6d\x65\x6e\x74\x73\x0a\x69\x6e\x0a\x69\x6e\x63\x6c\x75\
+\x64\x65\x0a\x69\x6e\x63\x6c\x75\x64\x65\x64\x0a\x69\x6e\x63\x6c\
+\x75\x64\x65\x73\x0a\x69\x6e\x63\x6c\x75\x64\x69\x6e\x67\x0a\x69\
+\x6e\x63\x6c\x75\x73\x69\x6f\x6e\x0a\x69\x6e\x63\x6f\x6d\x69\x6e\
+\x67\x0a\x69\x6e\x63\x6f\x6e\x76\x65\x6e\x69\x65\x6e\x74\x0a\x69\
+\x6e\x64\x65\x6e\x74\x0a\x69\x6e\x64\x65\x78\x0a\x69\x6e\x64\x69\
+\x63\x61\x74\x65\x0a\x69\x6e\x65\x78\x70\x65\x6e\x73\x69\x76\x65\
+\x6c\x79\x0a\x69\x6e\x66\x6c\x75\x65\x6e\x63\x65\x0a\x69\x6e\x66\
+\x6f\x0a\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x0a\x69\x6e\
+\x67\x65\x6e\x69\x6f\x75\x73\x0a\x69\x6e\x68\x65\x72\x69\x74\x73\
+\x0a\x69\x6e\x69\x74\x69\x61\x6c\x0a\x69\x6e\x69\x74\x69\x61\x6c\
+\x6c\x79\x0a\x69\x6e\x6e\x65\x72\x0a\x69\x6e\x70\x75\x74\x0a\x69\
+\x6e\x73\x70\x69\x72\x65\x64\x0a\x69\x6e\x73\x74\x61\x6c\x6c\x0a\
+\x69\x6e\x73\x74\x61\x6c\x6c\x73\x0a\x69\x6e\x73\x74\x61\x6e\x63\
+\x65\x0a\x69\x6e\x73\x74\x65\x61\x64\x0a\x69\x6e\x73\x74\x72\x75\
+\x63\x74\x73\x0a\x69\x6e\x74\x65\x67\x65\x72\x0a\x69\x6e\x74\x65\
+\x67\x65\x72\x73\x0a\x69\x6e\x74\x65\x67\x72\x61\x74\x69\x6f\x6e\
+\x0a\x69\x6e\x74\x65\x6e\x64\x65\x64\x0a\x69\x6e\x74\x65\x6e\x73\
+\x69\x76\x65\x0a\x69\x6e\x74\x65\x72\x65\x73\x74\x0a\x69\x6e\x74\
+\x65\x72\x65\x73\x74\x73\x0a\x69\x6e\x74\x65\x72\x66\x61\x63\x65\
+\x0a\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x73\x0a\x69\x6e\x74\x65\
+\x72\x66\x65\x72\x65\x0a\x69\x6e\x74\x65\x72\x6e\x61\x6c\x0a\x69\
+\x6e\x74\x65\x72\x76\x61\x6c\x0a\x69\x6e\x74\x6f\x0a\x69\x6e\x74\
+\x72\x69\x67\x75\x69\x6e\x67\x0a\x69\x6e\x74\x72\x6f\x0a\x69\x6e\
+\x74\x72\x6f\x64\x75\x63\x65\x0a\x69\x6e\x74\x72\x6f\x64\x75\x63\
+\x65\x64\x0a\x69\x6e\x76\x61\x6c\x69\x64\x0a\x69\x6e\x76\x65\x6e\
+\x74\x65\x64\x0a\x69\x6e\x76\x65\x72\x73\x65\x0a\x69\x6e\x76\x6f\
+\x63\x61\x74\x69\x6f\x6e\x0a\x69\x6e\x76\x6f\x6c\x76\x65\x64\x0a\
+\x49\x72\x69\x73\x68\x0a\x69\x72\x72\x65\x67\x75\x6c\x61\x72\x0a\
+\x69\x73\x0a\x49\x53\x4f\x0a\x49\x53\x50\x73\x0a\x69\x73\x73\x75\
+\x65\x0a\x69\x73\x73\x75\x65\x73\x0a\x69\x74\x0a\x69\x74\x65\x6d\
+\x73\x0a\x69\x74\x65\x72\x61\x74\x65\x0a\x69\x74\x73\x0a\x69\x74\
+\x73\x65\x6c\x66\x0a\x6a\x6f\x62\x0a\x6a\x6f\x69\x6e\x0a\x4a\x50\
+\x45\x47\x0a\x6a\x75\x6e\x67\x6c\x65\x0a\x6a\x75\x73\x74\x0a\x4b\
+\x61\x72\x61\x6f\x6b\x65\x0a\x6b\x65\x65\x70\x0a\x6b\x65\x65\x70\
+\x69\x6e\x67\x0a\x6b\x65\x79\x0a\x6b\x69\x6e\x64\x0a\x6b\x69\x6e\
+\x67\x0a\x6b\x6e\x6f\x77\x6e\x0a\x6c\x61\x62\x65\x6c\x0a\x6c\x61\
+\x62\x65\x6c\x73\x0a\x6c\x61\x6e\x64\x73\x63\x61\x70\x65\x0a\x6c\
+\x61\x6e\x67\x75\x61\x67\x65\x0a\x6c\x61\x72\x67\x65\x0a\x6c\x61\
+\x73\x74\x0a\x6c\x61\x74\x65\x72\x0a\x6c\x61\x74\x65\x73\x74\x0a\
+\x6c\x61\x77\x6e\x0a\x6c\x61\x79\x6f\x75\x74\x0a\x6c\x65\x61\x64\
+\x0a\x6c\x65\x61\x64\x65\x72\x0a\x6c\x65\x61\x64\x65\x72\x73\x0a\
+\x6c\x65\x61\x6e\x0a\x6c\x65\x61\x76\x65\x73\x0a\x6c\x65\x61\x76\
+\x69\x6e\x67\x0a\x6c\x65\x66\x74\x0a\x6c\x65\x6d\x6d\x61\x0a\x6c\
+\x65\x6e\x67\x74\x68\x0a\x6c\x65\x73\x73\x0a\x6c\x65\x74\x0a\x6c\
+\x65\x76\x65\x6c\x0a\x6c\x65\x76\x65\x6c\x73\x0a\x6c\x69\x62\x72\
+\x61\x72\x69\x65\x73\x0a\x6c\x69\x62\x72\x61\x72\x79\x0a\x6c\x69\
+\x65\x73\x0a\x6c\x69\x6b\x65\x0a\x6c\x69\x6b\x65\x6c\x79\x0a\x6c\
+\x69\x6d\x69\x74\x0a\x6c\x69\x6d\x69\x74\x69\x6e\x67\x0a\x6c\x69\
+\x6d\x69\x74\x73\x0a\x6c\x69\x6e\x65\x0a\x6c\x69\x6e\x65\x61\x72\
+\x0a\x6c\x69\x6e\x65\x73\x0a\x6c\x69\x6e\x65\x77\x69\x64\x74\x68\
+\x0a\x6c\x69\x6e\x6b\x0a\x6c\x69\x6e\x6b\x65\x64\x0a\x6c\x69\x6e\
+\x6b\x69\x6e\x67\x0a\x4c\x69\x6e\x75\x78\x0a\x6c\x69\x73\x74\x0a\
+\x6c\x69\x73\x74\x73\x0a\x6c\x69\x74\x74\x6c\x65\x0a\x6c\x69\x76\
+\x65\x73\x0a\x6c\x6f\x61\x64\x0a\x6c\x6f\x61\x64\x69\x6e\x67\x0a\
+\x6c\x6f\x61\x64\x73\x0a\x6c\x6f\x63\x61\x74\x65\x64\x0a\x6c\x6f\
+\x63\x61\x74\x69\x6f\x6e\x0a\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x73\
+\x0a\x6c\x6f\x67\x6f\x0a\x6c\x6f\x6e\x67\x0a\x6c\x6f\x6e\x67\x65\
+\x72\x0a\x6c\x6f\x6f\x6b\x0a\x6c\x6f\x6f\x6b\x65\x64\x0a\x6c\x6f\
+\x6f\x6b\x69\x6e\x67\x0a\x6c\x6f\x6f\x6b\x73\x0a\x6c\x6f\x6f\x6b\
+\x75\x70\x0a\x6c\x6f\x6f\x6b\x75\x70\x73\x0a\x6c\x6f\x6f\x70\x0a\
+\x6c\x6f\x75\x74\x0a\x6c\x6f\x77\x0a\x6d\x61\x63\x72\x6f\x0a\x6d\
+\x61\x64\x65\x0a\x6d\x61\x67\x61\x7a\x69\x6e\x65\x0a\x6d\x61\x67\
+\x69\x63\x0a\x6d\x61\x69\x6e\x0a\x6d\x61\x6a\x6f\x72\x0a\x6d\x61\
+\x6b\x65\x0a\x6d\x61\x6b\x65\x73\x0a\x6d\x61\x6b\x69\x6e\x67\x0a\
+\x6d\x61\x6e\x61\x67\x65\x0a\x6d\x61\x6e\x61\x67\x65\x64\x0a\x6d\
+\x61\x6e\x61\x67\x69\x6e\x67\x0a\x6d\x61\x6e\x64\x61\x74\x6f\x72\
+\x79\x0a\x6d\x61\x6e\x69\x70\x75\x6c\x61\x74\x65\x0a\x6d\x61\x6e\
+\x69\x70\x75\x6c\x61\x74\x69\x6f\x6e\x0a\x6d\x61\x6e\x6e\x65\x72\
+\x0a\x6d\x61\x6e\x79\x0a\x6d\x61\x70\x0a\x6d\x61\x70\x73\x0a\x4d\
+\x61\x72\x63\x68\x0a\x6d\x61\x72\x67\x69\x6e\x0a\x6d\x61\x73\x6b\
+\x0a\x6d\x61\x73\x6b\x69\x6e\x67\x0a\x4d\x61\x73\x73\x61\x63\x68\
+\x75\x73\x65\x74\x74\x73\x0a\x6d\x61\x74\x63\x68\x0a\x6d\x61\x74\
+\x68\x65\x6d\x61\x74\x69\x63\x61\x6c\x0a\x6d\x61\x78\x69\x6d\x75\
+\x6d\x0a\x6d\x61\x79\x0a\x6d\x65\x61\x6e\x73\x0a\x6d\x65\x65\x74\
+\x0a\x6d\x65\x6d\x62\x65\x72\x0a\x6d\x65\x6d\x62\x65\x72\x73\x0a\
+\x6d\x65\x6d\x6f\x72\x79\x0a\x6d\x65\x72\x67\x65\x64\x0a\x6d\x65\
+\x74\x68\x6f\x64\x0a\x6d\x69\x67\x68\x74\x0a\x6d\x69\x6c\x6c\x69\
+\x73\x65\x63\x6f\x6e\x64\x73\x0a\x6d\x69\x6e\x69\x6d\x69\x7a\x65\
+\x0a\x6d\x69\x6e\x69\x6d\x75\x6d\x0a\x6d\x69\x6e\x6f\x72\x0a\x6d\
+\x69\x78\x0a\x4d\x4e\x47\x0a\x6d\x6f\x64\x65\x0a\x6d\x6f\x64\x65\
+\x6c\x0a\x6d\x6f\x64\x65\x6c\x73\x0a\x6d\x6f\x64\x65\x73\x0a\x6d\
+\x6f\x64\x69\x66\x69\x65\x64\x0a\x6d\x6f\x64\x75\x6c\x65\x0a\x6d\
+\x6f\x6d\x65\x6e\x74\x73\x0a\x6d\x6f\x6e\x69\x74\x6f\x72\x65\x64\
+\x0a\x6d\x6f\x6e\x74\x68\x6c\x79\x0a\x6d\x6f\x72\x65\x0a\x6d\x6f\
+\x73\x74\x0a\x6d\x6f\x73\x74\x6c\x79\x0a\x6d\x6f\x76\x65\x0a\x6d\
+\x75\x63\x68\x0a\x6d\x75\x6c\x74\x69\x74\x75\x64\x65\x0a\x4d\x75\
+\x6e\x69\x63\x68\x0a\x6d\x75\x73\x74\x0a\x6e\x61\x6d\x65\x0a\x6e\
+\x61\x6d\x65\x64\x0a\x6e\x61\x6d\x65\x73\x0a\x6e\x65\x63\x65\x73\
+\x73\x61\x72\x79\x0a\x6e\x65\x65\x64\x0a\x6e\x65\x65\x64\x65\x64\
+\x0a\x6e\x65\x65\x64\x73\x0a\x6e\x65\x74\x77\x6f\x72\x6b\x0a\x6e\
+\x65\x77\x0a\x6e\x65\x77\x73\x0a\x6e\x65\x77\x73\x6c\x65\x74\x74\
+\x65\x72\x0a\x6e\x65\x78\x74\x0a\x6e\x69\x63\x65\x6c\x79\x0a\x6e\
+\x6f\x0a\x6e\x6f\x6e\x65\x0a\x6e\x6f\x72\x6d\x61\x6c\x6c\x79\x0a\
+\x4e\x6f\x72\x77\x61\x79\x0a\x6e\x6f\x74\x0a\x6e\x6f\x74\x65\x0a\
+\x6e\x6f\x74\x65\x73\x0a\x6e\x6f\x74\x68\x69\x6e\x67\x0a\x6e\x6f\
+\x74\x69\x66\x69\x65\x73\x0a\x6e\x6f\x74\x69\x66\x79\x0a\x6e\x6f\
+\x77\x0a\x6e\x75\x6c\x6c\x0a\x6e\x75\x6d\x62\x65\x72\x0a\x6e\x75\
+\x6d\x62\x65\x72\x65\x64\x0a\x6e\x75\x6d\x62\x65\x72\x69\x6e\x67\
+\x0a\x6e\x75\x6d\x62\x65\x72\x73\x0a\x4e\x79\x64\x61\x6c\x65\x6e\
+\x0a\x6f\x62\x6a\x65\x63\x74\x0a\x6f\x62\x6a\x65\x63\x74\x73\x0a\
+\x6f\x62\x74\x61\x69\x6e\x0a\x6f\x62\x74\x61\x69\x6e\x69\x6e\x67\
+\x0a\x6f\x64\x64\x0a\x6f\x66\x0a\x6f\x66\x66\x0a\x6f\x66\x66\x69\
+\x63\x65\x0a\x6f\x66\x66\x73\x65\x74\x0a\x6f\x66\x66\x73\x65\x74\
+\x73\x0a\x6f\x66\x74\x65\x6e\x0a\x6f\x6c\x64\x0a\x6f\x6e\x0a\x6f\
+\x6e\x63\x65\x0a\x6f\x6e\x65\x0a\x6f\x6e\x65\x73\x0a\x6f\x6e\x6c\
+\x69\x6e\x65\x0a\x6f\x6e\x6c\x79\x0a\x6f\x6e\x74\x6f\x0a\x6f\x70\
+\x61\x63\x69\x74\x79\x0a\x6f\x70\x61\x71\x75\x65\x0a\x6f\x70\x65\
+\x6e\x0a\x6f\x70\x65\x6e\x73\x0a\x6f\x70\x65\x72\x61\x74\x65\x73\
+\x0a\x6f\x70\x65\x72\x61\x74\x69\x6e\x67\x0a\x6f\x70\x65\x72\x61\
+\x74\x69\x6f\x6e\x0a\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x73\x0a\
+\x6f\x70\x65\x72\x61\x74\x6f\x72\x0a\x6f\x70\x70\x6f\x72\x74\x75\
+\x6e\x69\x74\x79\x0a\x6f\x70\x70\x6f\x73\x65\x64\x0a\x6f\x70\x74\
+\x69\x6d\x69\x7a\x65\x0a\x6f\x70\x74\x69\x6f\x6e\x0a\x6f\x70\x74\
+\x69\x6f\x6e\x61\x6c\x6c\x79\x0a\x6f\x70\x74\x69\x6f\x6e\x73\x0a\
+\x6f\x72\x0a\x4f\x52\x0a\x6f\x72\x64\x65\x72\x0a\x6f\x72\x64\x69\
+\x6e\x61\x72\x79\x0a\x6f\x72\x69\x67\x69\x6e\x61\x6c\x0a\x6f\x72\
+\x69\x67\x69\x6e\x61\x6c\x6c\x79\x0a\x4f\x73\x6c\x6f\x0a\x6f\x74\
+\x68\x65\x72\x0a\x6f\x74\x68\x65\x72\x77\x69\x73\x65\x0a\x6f\x75\
+\x72\x0a\x6f\x75\x74\x0a\x6f\x75\x74\x65\x72\x0a\x6f\x75\x74\x67\
+\x6f\x69\x6e\x67\x0a\x6f\x75\x74\x70\x75\x74\x0a\x6f\x75\x74\x73\
+\x69\x64\x65\x0a\x6f\x76\x65\x72\x0a\x6f\x76\x65\x72\x63\x6f\x6d\
+\x69\x6e\x67\x0a\x6f\x76\x65\x72\x72\x69\x64\x65\x73\x0a\x6f\x76\
+\x65\x72\x76\x69\x65\x77\x0a\x6f\x77\x6e\x0a\x6f\x77\x6e\x65\x72\
+\x0a\x6f\x77\x6e\x65\x72\x73\x0a\x70\x61\x63\x65\x0a\x50\x61\x63\
+\x69\x66\x69\x63\x0a\x70\x61\x63\x6b\x61\x67\x65\x0a\x70\x61\x63\
+\x6b\x61\x67\x65\x73\x0a\x70\x61\x63\x6b\x65\x74\x73\x0a\x70\x61\
+\x67\x65\x0a\x70\x61\x67\x65\x73\x0a\x70\x61\x69\x6e\x74\x0a\x70\
+\x61\x69\x6e\x74\x65\x64\x0a\x70\x61\x69\x6e\x74\x69\x6e\x67\x0a\
+\x70\x61\x72\x61\x67\x72\x61\x70\x68\x0a\x70\x61\x72\x61\x67\x72\
+\x61\x70\x68\x73\x0a\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x0a\
+\x70\x61\x72\x65\x6e\x74\x0a\x50\x61\x72\x69\x73\x0a\x70\x61\x72\
+\x73\x65\x0a\x70\x61\x72\x74\x0a\x70\x61\x72\x74\x69\x61\x6c\x0a\
+\x70\x61\x72\x74\x69\x61\x6c\x6c\x79\x0a\x70\x61\x72\x74\x69\x63\
+\x75\x6c\x61\x72\x0a\x70\x61\x72\x74\x6e\x65\x72\x73\x0a\x70\x61\
+\x72\x74\x73\x0a\x70\x61\x72\x74\x79\x0a\x70\x61\x73\x73\x65\x64\
+\x0a\x70\x61\x73\x73\x69\x6e\x67\x0a\x70\x61\x74\x63\x68\x65\x73\
+\x0a\x70\x61\x74\x68\x0a\x70\x61\x74\x74\x65\x72\x6e\x0a\x70\x61\
+\x74\x74\x65\x72\x6e\x73\x0a\x70\x61\x75\x73\x65\x0a\x50\x44\x46\
+\x0a\x70\x65\x65\x6b\x0a\x70\x65\x6e\x64\x69\x6e\x67\x0a\x70\x65\
+\x72\x66\x6f\x72\x6d\x0a\x70\x65\x72\x66\x6f\x72\x6d\x65\x64\x0a\
+\x70\x65\x72\x66\x6f\x72\x6d\x73\x0a\x70\x65\x72\x6d\x69\x73\x73\
+\x69\x6f\x6e\x0a\x70\x65\x72\x6d\x75\x74\x61\x74\x69\x6f\x6e\x73\
+\x0a\x70\x65\x72\x73\x6f\x6e\x61\x6c\x0a\x70\x69\x63\x6b\x0a\x70\
+\x69\x65\x0a\x70\x69\x70\x65\x0a\x70\x69\x78\x65\x6c\x0a\x70\x69\
+\x78\x65\x6c\x73\x0a\x70\x6c\x61\x63\x65\x0a\x70\x6c\x61\x63\x65\
+\x73\x0a\x70\x6c\x61\x6e\x6e\x69\x6e\x67\x0a\x70\x6c\x61\x74\x66\
+\x6f\x72\x6d\x73\x0a\x70\x6c\x61\x79\x0a\x70\x6c\x61\x79\x65\x72\
+\x73\x0a\x70\x6c\x61\x79\x69\x6e\x67\x0a\x70\x6c\x65\x61\x73\x65\
+\x0a\x70\x6c\x65\x61\x73\x69\x6e\x67\x0a\x70\x6c\x75\x67\x69\x6e\
+\x0a\x70\x6c\x75\x67\x69\x6e\x73\x0a\x70\x6c\x75\x73\x0a\x50\x4e\
+\x47\x0a\x70\x6f\x69\x6e\x74\x65\x72\x0a\x70\x6f\x70\x0a\x70\x6f\
+\x70\x75\x6c\x61\x72\x0a\x70\x6f\x70\x75\x6c\x61\x74\x65\x73\x0a\
+\x70\x6f\x72\x74\x65\x72\x0a\x50\x6f\x72\x74\x65\x72\x0a\x70\x6f\
+\x72\x74\x72\x61\x69\x74\x0a\x70\x6f\x73\x73\x69\x62\x69\x6c\x69\
+\x74\x79\x0a\x70\x6f\x73\x73\x69\x62\x6c\x65\x0a\x70\x6f\x74\x65\
+\x6e\x74\x69\x61\x6c\x0a\x70\x6f\x74\x65\x6e\x74\x69\x61\x6c\x6c\
+\x79\x0a\x70\x6f\x77\x65\x72\x0a\x70\x6f\x77\x65\x72\x73\x0a\x70\
+\x72\x65\x63\x65\x64\x65\x64\x0a\x70\x72\x65\x73\x65\x6e\x63\x65\
+\x0a\x70\x72\x65\x73\x65\x6e\x74\x0a\x70\x72\x65\x76\x65\x6e\x74\
+\x0a\x70\x72\x65\x76\x65\x6e\x74\x73\x0a\x70\x72\x65\x76\x69\x6f\
+\x75\x73\x0a\x70\x72\x65\x76\x69\x6f\x75\x73\x6c\x79\x0a\x70\x72\
+\x69\x6d\x61\x72\x69\x6c\x79\x0a\x70\x72\x69\x6d\x61\x72\x79\x0a\
+\x70\x72\x69\x6d\x69\x74\x69\x76\x65\x73\x0a\x70\x72\x69\x6e\x74\
+\x65\x64\x0a\x70\x72\x69\x6e\x74\x69\x6e\x67\x0a\x70\x72\x69\x6f\
+\x72\x0a\x70\x72\x6f\x62\x61\x62\x6c\x79\x0a\x70\x72\x6f\x62\x6c\
+\x65\x6d\x0a\x70\x72\x6f\x63\x65\x73\x73\x0a\x70\x72\x6f\x63\x65\
+\x73\x73\x65\x73\x0a\x70\x72\x6f\x63\x65\x73\x73\x69\x6e\x67\x0a\
+\x70\x72\x6f\x64\x75\x63\x65\x0a\x70\x72\x6f\x64\x75\x63\x65\x64\
+\x0a\x70\x72\x6f\x64\x75\x63\x65\x73\x0a\x70\x72\x6f\x64\x75\x63\
+\x74\x73\x0a\x70\x72\x6f\x67\x72\x61\x6d\x6d\x69\x6e\x67\x0a\x70\
+\x72\x6f\x67\x72\x61\x6d\x73\x0a\x70\x72\x6f\x6a\x65\x63\x74\x0a\
+\x70\x72\x6f\x6a\x65\x63\x74\x73\x0a\x70\x72\x6f\x6f\x66\x0a\x70\
+\x72\x6f\x70\x65\x72\x0a\x70\x72\x6f\x70\x65\x72\x6c\x79\x0a\x70\
+\x72\x6f\x70\x65\x72\x74\x69\x65\x73\x0a\x70\x72\x6f\x70\x65\x72\
+\x74\x79\x0a\x70\x72\x6f\x70\x6f\x73\x65\x64\x0a\x70\x72\x6f\x70\
+\x6f\x73\x69\x74\x69\x6f\x6e\x0a\x70\x72\x6f\x73\x0a\x70\x72\x6f\
+\x74\x6f\x63\x6f\x6c\x73\x0a\x70\x72\x6f\x75\x64\x0a\x70\x72\x6f\
+\x76\x69\x64\x65\x0a\x70\x72\x6f\x76\x69\x64\x65\x64\x0a\x70\x72\
+\x6f\x76\x69\x64\x65\x73\x0a\x70\x72\x6f\x76\x69\x73\x69\x6f\x6e\
+\x0a\x70\x72\x6f\x78\x79\x0a\x70\x75\x62\x6c\x69\x63\x0a\x70\x75\
+\x62\x6c\x69\x73\x68\x65\x64\x0a\x70\x75\x6e\x63\x68\x0a\x70\x75\
+\x6e\x63\x68\x65\x73\x0a\x70\x75\x72\x73\x75\x69\x6e\x67\x0a\x70\
+\x75\x74\x0a\x51\x74\x0a\x51\x74\x6f\x70\x69\x61\x0a\x71\x75\x61\
+\x6c\x69\x74\x79\x0a\x71\x75\x61\x72\x74\x65\x72\x0a\x71\x75\x61\
+\x72\x74\x65\x72\x6c\x79\x0a\x71\x75\x65\x72\x69\x65\x64\x0a\x71\
+\x75\x65\x72\x69\x65\x73\x0a\x71\x75\x65\x72\x79\x0a\x71\x75\x65\
+\x73\x74\x69\x6f\x6e\x0a\x71\x75\x65\x73\x74\x69\x6f\x6e\x73\x0a\
+\x72\x61\x64\x69\x61\x6c\x0a\x72\x61\x67\x67\x65\x64\x0a\x72\x61\
+\x6e\x67\x65\x0a\x72\x61\x74\x65\x0a\x72\x61\x74\x65\x73\x0a\x72\
+\x61\x74\x68\x65\x72\x0a\x72\x61\x74\x69\x6f\x0a\x72\x61\x77\x0a\
+\x72\x65\x61\x64\x0a\x72\x65\x61\x64\x65\x72\x0a\x72\x65\x61\x64\
+\x69\x6e\x67\x0a\x72\x65\x61\x64\x73\x0a\x72\x65\x61\x64\x79\x0a\
+\x72\x65\x61\x6c\x0a\x72\x65\x61\x6c\x69\x73\x74\x69\x63\x0a\x72\
+\x65\x61\x6c\x6c\x79\x0a\x72\x65\x63\x65\x69\x76\x65\x64\x0a\x72\
+\x65\x63\x65\x6e\x74\x0a\x72\x65\x63\x6f\x67\x6e\x69\x7a\x65\x64\
+\x0a\x72\x65\x63\x6f\x6d\x6d\x65\x6e\x64\x65\x64\x0a\x72\x65\x63\
+\x6f\x6d\x70\x69\x6c\x65\x0a\x72\x65\x63\x74\x61\x6e\x67\x6c\x65\
+\x0a\x72\x65\x63\x74\x61\x6e\x67\x75\x6c\x61\x72\x0a\x72\x65\x64\
+\x0a\x72\x65\x64\x69\x73\x74\x72\x69\x62\x75\x74\x65\x0a\x72\x65\
+\x64\x75\x63\x69\x6e\x67\x0a\x72\x65\x66\x65\x72\x65\x6e\x63\x65\
+\x0a\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x73\x0a\x72\x65\x66\x6c\
+\x65\x63\x74\x0a\x72\x65\x67\x61\x72\x64\x6c\x65\x73\x73\x0a\x72\
+\x65\x67\x69\x6f\x6e\x61\x6c\x0a\x72\x65\x67\x69\x73\x74\x65\x72\
+\x0a\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x0a\x72\x65\x67\x69\
+\x73\x74\x72\x61\x74\x69\x6f\x6e\x0a\x72\x65\x69\x6d\x70\x6c\x65\
+\x6d\x65\x6e\x74\x0a\x72\x65\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\
+\x61\x74\x69\x6f\x6e\x0a\x72\x65\x69\x6d\x70\x6c\x65\x6d\x65\x6e\
+\x74\x65\x64\x0a\x72\x65\x6c\x65\x61\x73\x65\x0a\x72\x65\x6c\x65\
+\x61\x73\x65\x64\x0a\x72\x65\x6c\x65\x61\x73\x65\x73\x0a\x72\x65\
+\x6c\x69\x61\x62\x6c\x65\x0a\x72\x65\x6c\x79\x0a\x72\x65\x6d\x61\
+\x69\x6e\x73\x0a\x72\x65\x6d\x65\x6d\x62\x65\x72\x0a\x72\x65\x6d\
+\x6f\x76\x65\x64\x0a\x72\x65\x6d\x6f\x76\x65\x73\x0a\x72\x65\x70\
+\x65\x61\x74\x65\x64\x6c\x79\x0a\x72\x65\x70\x6c\x61\x63\x65\x0a\
+\x72\x65\x70\x6f\x72\x74\x0a\x72\x65\x70\x72\x65\x73\x65\x6e\x74\
+\x0a\x72\x65\x70\x72\x65\x73\x65\x6e\x74\x65\x64\x0a\x72\x65\x70\
+\x72\x65\x73\x65\x6e\x74\x73\x0a\x72\x65\x70\x72\x6f\x64\x75\x63\
+\x65\x64\x0a\x72\x65\x71\x75\x65\x73\x74\x65\x64\x0a\x72\x65\x71\
+\x75\x69\x72\x65\x0a\x72\x65\x71\x75\x69\x72\x65\x64\x0a\x72\x65\
+\x71\x75\x69\x72\x65\x73\x0a\x72\x65\x73\x65\x74\x74\x69\x6e\x67\
+\x0a\x72\x65\x73\x69\x64\x65\x73\x0a\x72\x65\x73\x6f\x6c\x76\x65\
+\x0a\x72\x65\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x72\x65\x73\x70\
+\x65\x63\x74\x69\x76\x65\x6c\x79\x0a\x72\x65\x73\x70\x6f\x6e\x73\
+\x65\x0a\x72\x65\x73\x74\x0a\x72\x65\x73\x74\x61\x72\x74\x0a\x72\
+\x65\x73\x75\x6c\x74\x0a\x72\x65\x73\x75\x6c\x74\x69\x6e\x67\x0a\
+\x72\x65\x73\x75\x6d\x65\x0a\x72\x65\x74\x75\x72\x6e\x0a\x72\x65\
+\x74\x75\x72\x6e\x69\x6e\x67\x0a\x72\x65\x74\x75\x72\x6e\x73\x0a\
+\x72\x65\x75\x73\x65\x0a\x72\x65\x76\x65\x61\x6c\x69\x6e\x67\x0a\
+\x72\x69\x63\x68\x0a\x72\x69\x63\x68\x65\x73\x0a\x72\x69\x67\x68\
+\x74\x0a\x72\x6f\x61\x64\x73\x68\x6f\x77\x0a\x72\x6f\x6c\x65\x0a\
+\x52\x6f\x6d\x61\x6e\x0a\x72\x6f\x75\x74\x65\x72\x0a\x72\x6f\x75\
+\x74\x65\x72\x73\x0a\x72\x75\x6c\x65\x0a\x72\x75\x6e\x0a\x72\x75\
+\x6e\x6e\x65\x72\x0a\x72\x75\x6e\x6e\x65\x72\x73\x0a\x72\x75\x6e\
+\x6e\x69\x6e\x67\x0a\x72\x75\x6e\x73\x0a\x73\x61\x6b\x65\x0a\x73\
+\x61\x6c\x65\x73\x0a\x73\x61\x6c\x65\x73\x70\x65\x6f\x70\x6c\x65\
+\x0a\x73\x61\x6d\x65\x0a\x73\x61\x6d\x70\x6c\x65\x0a\x53\x61\x6e\
+\x20\x4a\x6f\x73\x65\x0a\x73\x61\x76\x65\x0a\x73\x61\x76\x65\x64\
+\x0a\x73\x61\x76\x65\x73\x0a\x73\x61\x79\x0a\x73\x63\x61\x6c\x61\
+\x62\x6c\x65\x0a\x73\x63\x61\x6c\x65\x0a\x73\x63\x61\x6e\x6c\x69\
+\x6e\x65\x0a\x73\x63\x65\x6e\x65\x0a\x73\x63\x65\x6e\x65\x73\x0a\
+\x73\x63\x68\x65\x64\x75\x6c\x65\x0a\x73\x63\x68\x6f\x6f\x6c\x0a\
+\x73\x63\x72\x69\x70\x74\x0a\x73\x65\x61\x6d\x0a\x73\x65\x61\x6d\
+\x6c\x65\x73\x73\x0a\x73\x65\x61\x72\x63\x68\x0a\x73\x65\x61\x72\
+\x63\x68\x65\x73\x0a\x73\x65\x61\x72\x63\x68\x69\x6e\x67\x0a\x73\
+\x65\x63\x6f\x6e\x64\x0a\x73\x65\x63\x6f\x6e\x64\x73\x0a\x73\x65\
+\x63\x74\x69\x6f\x6e\x0a\x73\x65\x63\x74\x69\x6f\x6e\x73\x0a\x73\
+\x65\x63\x75\x72\x69\x74\x79\x0a\x73\x65\x65\x0a\x73\x65\x65\x6e\
+\x0a\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x0a\x73\x65\x6d\x69\x6e\
+\x61\x72\x0a\x73\x65\x6d\x69\x6e\x61\x72\x73\x0a\x73\x65\x6e\x64\
+\x69\x6e\x67\x0a\x73\x65\x70\x61\x72\x61\x74\x65\x64\x0a\x73\x65\
+\x70\x61\x72\x61\x74\x65\x73\x0a\x73\x65\x72\x69\x65\x73\x0a\x73\
+\x65\x72\x76\x69\x63\x65\x0a\x73\x65\x72\x76\x69\x63\x65\x73\x0a\
+\x73\x65\x74\x0a\x73\x65\x74\x74\x69\x6e\x67\x0a\x73\x65\x74\x75\
+\x70\x0a\x73\x65\x76\x65\x6e\x0a\x73\x65\x76\x65\x6e\x74\x68\x0a\
+\x73\x65\x76\x65\x72\x61\x6c\x0a\x73\x68\x61\x64\x65\x0a\x73\x68\
+\x61\x64\x6f\x77\x0a\x73\x68\x61\x70\x65\x0a\x73\x68\x61\x72\x65\
+\x73\x0a\x73\x68\x61\x76\x65\x73\x0a\x73\x68\x69\x6e\x65\x0a\x73\
+\x68\x6f\x72\x74\x65\x72\x0a\x73\x68\x6f\x75\x6c\x64\x0a\x73\x68\
+\x6f\x77\x0a\x73\x68\x6f\x77\x6e\x0a\x73\x68\x6f\x77\x73\x0a\x73\
+\x69\x64\x65\x0a\x73\x69\x67\x6e\x61\x6c\x0a\x73\x69\x67\x6e\x61\
+\x6c\x73\x0a\x73\x69\x67\x6e\x61\x74\x75\x72\x65\x0a\x73\x69\x67\
+\x6e\x69\x66\x69\x63\x61\x6e\x74\x6c\x79\x0a\x73\x69\x6d\x69\x6c\
+\x61\x72\x0a\x73\x69\x6d\x69\x6c\x61\x72\x69\x6c\x79\x0a\x73\x69\
+\x6d\x69\x6c\x61\x72\x6c\x79\x0a\x73\x69\x6d\x70\x6c\x65\x0a\x73\
+\x69\x6d\x70\x6c\x65\x73\x74\x0a\x73\x69\x6d\x70\x6c\x69\x66\x69\
+\x65\x64\x0a\x73\x69\x6d\x70\x6c\x69\x66\x79\x69\x6e\x67\x0a\x73\
+\x69\x6d\x70\x6c\x79\x0a\x73\x69\x6d\x75\x6c\x61\x74\x65\x0a\x73\
+\x69\x6d\x75\x6c\x74\x61\x6e\x65\x6f\x75\x73\x0a\x73\x69\x6e\x63\
+\x65\x0a\x73\x69\x6e\x67\x6c\x65\x0a\x73\x69\x7a\x65\x0a\x73\x69\
+\x7a\x65\x73\x0a\x73\x6c\x69\x67\x68\x74\x6c\x79\x0a\x73\x6c\x6f\
+\x70\x65\x0a\x73\x6c\x6f\x74\x0a\x73\x6c\x6f\x77\x69\x6e\x67\x0a\
+\x73\x6d\x61\x6c\x6c\x0a\x73\x6d\x61\x6c\x6c\x65\x72\x0a\x73\x6f\
+\x0a\x73\x6f\x63\x6b\x65\x74\x0a\x73\x6f\x63\x6b\x65\x74\x73\x0a\
+\x73\x6f\x66\x74\x77\x61\x72\x65\x0a\x73\x6f\x6c\x75\x74\x69\x6f\
+\x6e\x73\x0a\x73\x6f\x6c\x76\x65\x64\x0a\x73\x6f\x6d\x65\x0a\x73\
+\x6f\x6f\x6e\x0a\x73\x6f\x72\x74\x0a\x73\x6f\x72\x74\x69\x6e\x67\
+\x0a\x73\x6f\x75\x72\x63\x65\x0a\x73\x6f\x75\x72\x63\x65\x73\x0a\
+\x73\x6f\x75\x74\x68\x0a\x73\x70\x61\x63\x65\x0a\x73\x70\x65\x63\
+\x69\x61\x6c\x0a\x73\x70\x65\x63\x69\x61\x6c\x69\x7a\x65\x64\x0a\
+\x73\x70\x65\x63\x69\x66\x69\x63\x0a\x73\x70\x65\x63\x69\x66\x69\
+\x63\x61\x6c\x6c\x79\x0a\x73\x70\x65\x63\x69\x66\x69\x63\x61\x74\
+\x69\x6f\x6e\x0a\x73\x70\x65\x63\x69\x66\x69\x63\x61\x74\x69\x6f\
+\x6e\x73\x0a\x73\x70\x65\x63\x69\x66\x69\x65\x64\x0a\x73\x70\x65\
+\x63\x69\x66\x79\x0a\x73\x70\x65\x65\x64\x0a\x73\x70\x65\x6e\x64\
+\x0a\x73\x70\x6c\x69\x74\x0a\x53\x51\x4c\x0a\x73\x74\x61\x6e\x64\
+\x61\x72\x64\x0a\x73\x74\x61\x6e\x64\x61\x72\x64\x73\x0a\x73\x74\
+\x61\x72\x74\x0a\x73\x74\x61\x72\x74\x73\x0a\x73\x74\x61\x72\x76\
+\x65\x0a\x73\x74\x61\x74\x65\x0a\x73\x74\x61\x74\x65\x73\x0a\x73\
+\x74\x61\x74\x69\x63\x0a\x73\x74\x65\x61\x64\x79\x0a\x73\x74\x65\
+\x61\x6c\x69\x6e\x67\x0a\x73\x74\x65\x70\x0a\x73\x74\x69\x6c\x6c\
+\x0a\x73\x74\x6f\x70\x0a\x73\x74\x6f\x70\x77\x61\x74\x63\x68\x0a\
+\x73\x74\x6f\x72\x65\x0a\x73\x74\x6f\x72\x65\x64\x0a\x73\x74\x6f\
+\x72\x65\x73\x0a\x73\x74\x72\x61\x69\x67\x68\x74\x66\x6f\x72\x77\
+\x61\x72\x64\x0a\x73\x74\x72\x65\x61\x6d\x0a\x73\x74\x72\x69\x6e\
+\x67\x0a\x73\x74\x72\x69\x6e\x67\x73\x0a\x73\x74\x72\x75\x63\x74\
+\x75\x72\x65\x0a\x73\x74\x72\x75\x63\x74\x75\x72\x65\x64\x0a\x73\
+\x74\x72\x75\x74\x0a\x73\x74\x79\x6c\x65\x0a\x73\x74\x79\x6c\x65\
+\x73\x0a\x73\x74\x79\x6c\x69\x6e\x67\x0a\x73\x75\x62\x63\x6c\x61\
+\x73\x73\x0a\x73\x75\x62\x63\x6c\x61\x73\x73\x69\x6e\x67\x0a\x73\
+\x75\x62\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x0a\x73\x75\x62\x73\
+\x65\x63\x74\x69\x6f\x6e\x0a\x73\x75\x62\x73\x65\x63\x74\x69\x6f\
+\x6e\x73\x0a\x73\x75\x63\x63\x65\x65\x64\x73\x0a\x73\x75\x63\x63\
+\x65\x73\x73\x0a\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x0a\x73\
+\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x0a\x73\x75\x63\x68\
+\x0a\x73\x75\x67\x67\x65\x73\x74\x69\x6f\x6e\x0a\x73\x75\x67\x67\
+\x65\x73\x74\x69\x6f\x6e\x73\x0a\x73\x75\x69\x74\x61\x62\x6c\x65\
+\x0a\x73\x75\x70\x70\x6f\x72\x74\x0a\x73\x75\x70\x70\x6f\x72\x74\
+\x65\x64\x0a\x73\x75\x70\x70\x6f\x72\x74\x73\x0a\x73\x75\x70\x70\
+\x6f\x73\x65\x0a\x73\x75\x70\x70\x6f\x73\x65\x73\x0a\x73\x75\x72\
+\x65\x0a\x73\x77\x69\x74\x63\x68\x0a\x73\x77\x69\x74\x63\x68\x65\
+\x73\x0a\x73\x79\x6d\x62\x6f\x6c\x0a\x73\x79\x6d\x62\x6f\x6c\x73\
+\x0a\x73\x79\x6e\x6f\x6e\x79\x6d\x73\x0a\x73\x79\x73\x74\x65\x6d\
+\x0a\x73\x79\x73\x74\x65\x6d\x73\x0a\x74\x61\x62\x6c\x65\x0a\x74\
+\x61\x62\x6c\x65\x73\x0a\x74\x61\x67\x73\x0a\x74\x61\x6b\x65\x0a\
+\x74\x61\x6b\x65\x73\x0a\x74\x61\x70\x0a\x74\x61\x72\x67\x65\x74\
+\x0a\x74\x61\x72\x67\x65\x74\x73\x0a\x54\x43\x50\x0a\x74\x65\x61\
+\x6d\x0a\x74\x65\x63\x68\x6e\x69\x71\x75\x65\x0a\x74\x65\x63\x68\
+\x6e\x6f\x6c\x6f\x67\x79\x0a\x74\x65\x6d\x70\x6c\x61\x74\x65\x0a\
+\x74\x65\x6d\x70\x6c\x61\x74\x65\x73\x0a\x54\x65\x78\x61\x73\x0a\
+\x74\x65\x78\x74\x0a\x74\x68\x61\x6e\x0a\x74\x68\x61\x74\x0a\x74\
+\x68\x65\x0a\x74\x68\x65\x69\x72\x0a\x74\x68\x65\x6d\x0a\x74\x68\
+\x65\x6e\x0a\x74\x68\x65\x6f\x72\x65\x6d\x0a\x74\x68\x65\x72\x65\
+\x0a\x74\x68\x65\x73\x65\x0a\x74\x68\x65\x79\x0a\x74\x68\x69\x63\
+\x6b\x6e\x65\x73\x73\x0a\x74\x68\x69\x6e\x0a\x74\x68\x69\x72\x64\
+\x0a\x74\x68\x69\x73\x0a\x74\x68\x6f\x73\x65\x0a\x74\x68\x72\x65\
+\x65\x0a\x74\x68\x72\x6f\x74\x74\x6c\x69\x6e\x67\x0a\x74\x68\x72\
+\x6f\x75\x67\x68\x0a\x74\x69\x67\x68\x74\x6c\x79\x0a\x74\x69\x6d\
+\x65\x0a\x74\x69\x6d\x65\x72\x0a\x74\x69\x6d\x65\x73\x0a\x74\x69\
+\x6e\x79\x0a\x74\x69\x70\x73\x0a\x74\x69\x74\x6c\x65\x0a\x74\x69\
+\x74\x6c\x65\x73\x0a\x74\x6f\x0a\x74\x6f\x67\x65\x74\x68\x65\x72\
+\x0a\x74\x6f\x6f\x0a\x74\x6f\x70\x0a\x74\x6f\x72\x72\x65\x6e\x74\
+\x0a\x74\x6f\x74\x61\x6c\x0a\x74\x6f\x75\x72\x0a\x74\x72\x61\x64\
+\x65\x6d\x61\x72\x6b\x73\x0a\x74\x72\x61\x66\x66\x69\x63\x0a\x74\
+\x72\x61\x69\x6e\x69\x6e\x67\x0a\x74\x72\x61\x6e\x73\x61\x63\x74\
+\x69\x6f\x6e\x0a\x74\x72\x61\x6e\x73\x66\x65\x72\x0a\x74\x72\x61\
+\x6e\x73\x66\x65\x72\x72\x65\x64\x0a\x74\x72\x61\x6e\x73\x66\x65\
+\x72\x72\x69\x6e\x67\x0a\x74\x72\x61\x6e\x73\x66\x65\x72\x73\x0a\
+\x74\x72\x61\x6e\x73\x6c\x75\x63\x65\x6e\x63\x79\x0a\x74\x72\x61\
+\x6e\x73\x6c\x75\x63\x65\x6e\x74\x0a\x74\x72\x61\x6e\x73\x70\x61\
+\x72\x65\x6e\x63\x79\x0a\x74\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\
+\x74\x0a\x74\x72\x61\x76\x65\x6c\x0a\x74\x72\x61\x76\x65\x6c\x65\
+\x64\x0a\x74\x72\x75\x65\x0a\x74\x72\x79\x0a\x74\x75\x72\x6e\x0a\
+\x74\x77\x69\x63\x65\x0a\x74\x77\x6f\x0a\x74\x79\x70\x65\x0a\x74\
+\x79\x70\x65\x64\x0a\x74\x79\x70\x69\x63\x61\x6c\x0a\x74\x79\x70\
+\x69\x63\x61\x6c\x6c\x79\x0a\x75\x6e\x61\x62\x6c\x65\x0a\x75\x6e\
+\x64\x65\x72\x0a\x75\x6e\x64\x65\x72\x6c\x79\x69\x6e\x67\x0a\x75\
+\x6e\x64\x65\x72\x73\x74\x61\x6e\x64\x69\x6e\x67\x0a\x75\x6e\x64\
+\x6f\x65\x73\x0a\x75\x6e\x69\x71\x75\x65\x0a\x75\x6e\x69\x74\x65\
+\x64\x0a\x75\x6e\x6c\x69\x6b\x65\x0a\x75\x6e\x70\x61\x63\x6b\x0a\
+\x75\x6e\x73\x69\x67\x6e\x65\x64\x0a\x75\x6e\x74\x69\x6c\x0a\x75\
+\x6e\x74\x6f\x75\x63\x68\x65\x64\x0a\x75\x70\x0a\x75\x70\x64\x61\
+\x74\x65\x0a\x75\x70\x64\x61\x74\x65\x64\x0a\x75\x70\x64\x61\x74\
+\x65\x73\x0a\x75\x70\x6c\x6f\x61\x64\x0a\x75\x70\x6c\x6f\x61\x64\
+\x69\x6e\x67\x0a\x75\x70\x6c\x6f\x61\x64\x73\x0a\x75\x73\x0a\x75\
+\x73\x65\x0a\x75\x73\x65\x64\x0a\x75\x73\x65\x66\x75\x6c\x0a\x75\
+\x73\x65\x72\x0a\x75\x73\x65\x72\x73\x0a\x75\x73\x65\x73\x0a\x75\
+\x73\x69\x6e\x67\x0a\x75\x73\x75\x61\x6c\x0a\x75\x73\x75\x61\x6c\
+\x6c\x79\x0a\x76\x61\x6c\x69\x64\x0a\x76\x61\x6c\x75\x65\x0a\x76\
+\x61\x6c\x75\x65\x73\x0a\x76\x61\x72\x69\x61\x62\x6c\x65\x0a\x76\
+\x61\x72\x69\x61\x74\x69\x6f\x6e\x0a\x76\x61\x72\x69\x65\x74\x79\
+\x0a\x76\x61\x72\x69\x6f\x75\x73\x0a\x76\x65\x63\x74\x6f\x72\x0a\
+\x76\x65\x6e\x74\x75\x72\x69\x6e\x67\x0a\x76\x65\x72\x69\x66\x79\
+\x69\x6e\x67\x0a\x76\x65\x72\x73\x61\x0a\x76\x65\x72\x73\x69\x6f\
+\x6e\x0a\x76\x65\x72\x73\x69\x6f\x6e\x73\x0a\x76\x65\x72\x74\x69\
+\x63\x61\x6c\x0a\x76\x65\x72\x79\x0a\x76\x69\x61\x0a\x76\x69\x63\
+\x65\x0a\x76\x69\x72\x74\x75\x61\x6c\x0a\x76\x69\x73\x75\x61\x6c\
+\x0a\x76\x6f\x69\x64\x0a\x56\x50\x0a\x77\x61\x69\x74\x69\x6e\x67\
+\x0a\x57\x61\x6c\x65\x73\x0a\x77\x61\x6e\x74\x0a\x77\x61\x6e\x74\
+\x73\x0a\x77\x61\x73\x0a\x77\x61\x79\x0a\x77\x61\x79\x73\x0a\x77\
+\x65\x0a\x77\x65\x62\x0a\x77\x65\x62\x73\x69\x74\x65\x0a\x77\x65\
+\x6c\x6c\x0a\x77\x65\x72\x65\x0a\x77\x68\x61\x74\x0a\x77\x68\x65\
+\x6e\x0a\x77\x68\x65\x6e\x65\x76\x65\x72\x0a\x77\x68\x65\x72\x65\
+\x0a\x77\x68\x65\x74\x68\x65\x72\x0a\x77\x68\x69\x63\x68\x0a\x77\
+\x68\x69\x6c\x65\x0a\x77\x68\x69\x73\x74\x6c\x65\x0a\x77\x68\x69\
+\x74\x65\x0a\x77\x68\x6f\x0a\x77\x68\x6f\x6c\x65\x0a\x77\x68\x79\
+\x0a\x77\x69\x64\x67\x65\x74\x0a\x77\x69\x64\x67\x65\x74\x73\x0a\
+\x77\x69\x64\x74\x68\x0a\x77\x69\x64\x74\x68\x73\x0a\x77\x69\x6c\
+\x6c\x0a\x77\x69\x6e\x64\x6f\x77\x0a\x77\x69\x6e\x64\x6f\x77\x73\
+\x0a\x77\x69\x73\x68\x0a\x77\x69\x74\x68\x0a\x77\x69\x74\x68\x6f\
+\x75\x74\x0a\x77\x6f\x72\x64\x0a\x77\x6f\x72\x64\x73\x0a\x77\x6f\
+\x72\x6b\x0a\x77\x6f\x72\x6b\x69\x6e\x67\x0a\x77\x6f\x72\x6b\x73\
+\x0a\x77\x6f\x75\x6c\x64\x0a\x77\x72\x61\x70\x0a\x77\x72\x61\x70\
+\x70\x65\x72\x0a\x77\x72\x69\x74\x65\x0a\x77\x72\x69\x74\x65\x73\
+\x0a\x77\x72\x69\x74\x69\x6e\x67\x0a\x77\x72\x69\x74\x69\x6e\x67\
+\x73\x0a\x77\x72\x69\x74\x74\x65\x6e\x0a\x58\x0a\x58\x31\x31\x0a\
+\x58\x4f\x52\x0a\x79\x65\x61\x72\x0a\x79\x65\x61\x72\x73\x0a\x79\
+\x65\x73\x0a\x79\x6f\x75\x0a\x79\x6f\x75\x72\x0a\x7a\x65\x72\x6f\
+\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x09\
+\x0a\x6c\x78\x43\
+\x00\x72\
+\x00\x65\x00\x73\x00\x6f\x00\x75\x00\x72\x00\x63\x00\x65\x00\x73\
+\x00\x0c\
+\x0f\x6a\x4d\x94\
+\x00\x77\
+\x00\x6f\x00\x72\x00\x64\x00\x6c\x00\x69\x00\x73\x00\x74\x00\x2e\x00\x74\x00\x78\x00\x74\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
+\x00\x00\x00\x18\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/tools/customcompleter/resources/wordlist.txt b/examples/tools/customcompleter/resources/wordlist.txt
new file mode 100644
index 0000000..f8b581a
--- /dev/null
+++ b/examples/tools/customcompleter/resources/wordlist.txt
@@ -0,0 +1,1454 @@
+A4
+able
+about
+above
+absence
+absolutely
+abstract
+access
+according
+accumulated
+achieve
+achieving
+activity
+acts
+actual
+actually
+add
+added
+adding
+addition
+additionally
+additions
+addresses
+adjust
+adjustments
+advanced
+advice
+after
+afterwards
+again
+agenda
+aim
+algorithm
+all
+allocated
+allow
+allowed
+allowing
+allows
+along
+alpha
+already
+also
+alternative
+alternatively
+although
+American
+an
+and
+announced
+annoy
+another
+answer
+answers
+any
+anything
+anyway
+apart
+API
+appear
+appears
+appendices
+appendix
+appends
+application
+applications
+apply
+approach
+approaches
+appropriate
+Arabic
+arbitrary
+are
+areas
+ARGB
+argument
+arguments
+around
+arrangements
+arrive
+arrived
+Arthur
+article
+articles
+as
+asked
+aspects
+assume
+at
+attachment
+attempt
+attempting
+attend
+attendees
+attributes
+authors
+availability
+available
+avoid
+away
+back
+background
+backgrounds
+bandwidth
+bandwidths
+Barcelona
+base
+based
+basic
+basically
+basics
+be
+because
+been
+before
+behave
+behavior
+behind
+being
+below
+benefits
+Berkeley
+between
+bit
+bits
+bitwise
+black
+blended
+blending
+blends
+block
+blue
+BMP
+body
+bold
+booking
+bool
+Boston
+both
+bottom
+box
+boxes
+braces
+break
+breaks
+broad
+browsers
+buffer
+buffers
+build
+builds
+built
+bundled
+burdens
+busy
+but
+by
+bypass
+bypassing
+bytes
+calendar
+call
+called
+calling
+calls
+Cambridge
+can
+canonical
+canonicalised
+cap
+capabilities
+capacity
+caption
+card
+care
+case
+cast
+catch
+causing
+centre
+certain
+challenges
+chance
+change
+changes
+changing
+channel
+channels
+chapter
+char
+chart
+charts
+check
+checks
+Chicago
+chosen
+chunk
+circle
+citation
+city
+claim
+class
+classes
+clause
+clauses
+clear
+clearing
+client
+clients
+close
+closed
+code
+colon
+color
+colorize
+colorizer
+colors
+colour
+column
+columns
+combine
+combined
+combines
+combining
+comes
+command
+commands
+comment
+common
+communicate
+community
+compiled
+complement
+complete
+completely
+completeness
+completes
+completion
+complex
+compliant
+component
+components
+compositing
+composition
+compression
+computation
+computer
+concepts
+conclusion
+concurrent
+configurable
+congested
+congestion
+connect
+connected
+connection
+connections
+cons
+consider
+consisting
+consists
+construct
+constructed
+constructing
+constructor
+constructs
+consume
+contact
+contain
+containing
+contains
+contents
+contents
+continue
+continued
+contributors
+control
+controlled
+controller
+controller
+controlling
+controls
+controls
+conventions
+cook
+cooperation
+copy
+copyright
+core
+cores
+corollary
+correct
+correctly
+corresponding
+could
+couple
+coworkers
+CPU
+create
+creates
+creating
+crucial
+cultures
+current
+currently
+custom
+customized
+cut
+data
+database
+datasets
+datum
+day
+days
+deal
+dealing
+decide
+decouple
+decoupled
+deeply
+def
+default
+define
+defines
+definition
+definitions
+delegate
+delete
+demo
+demonstrate
+demonstrations
+deployed
+describe
+describes
+design
+desktop
+desktops
+destination
+destinations
+destructor
+details
+detect
+determine
+determines
+developer
+developers
+development
+developments
+device
+devices
+diagram
+dialogs
+dictionary
+did
+difference
+differences
+different
+differs
+digital
+direct
+direct
+directions
+directly
+directory
+discuss
+display
+displaying
+displays
+distribute
+distribution
+disturbing
+divide
+do
+documentation
+documents
+does
+done
+down
+downLimit
+download
+downloaded
+downloading
+draw
+drawing
+drawn
+drop
+Duff
+during
+DVD
+dynamic
+dynamically
+dynamics
+each
+earlier
+easily
+editing
+editors
+education
+effect
+effectively
+effects
+either
+ellipse
+ellipses
+elliptical
+else
+email
+embedded
+emit
+emits
+empty
+enable
+enables
+encapsulates
+enclose
+end
+endnote
+endnotes
+engineer
+engineering
+English
+enjoys
+enough
+ensure
+ensures
+entails
+enter
+entire
+entitled
+entries
+entry
+environment
+erases
+error
+errors
+especially
+established
+etc.
+Europe
+even
+evenly
+event
+events
+eventually
+every
+everyone
+example
+examples
+except
+exception
+excessive
+exclusive
+existing
+exists
+expand
+expected
+expense
+export
+exposes
+extend
+extended
+extending
+extensible
+extension
+external
+extra
+extract
+faces
+facilities
+factory
+fade
+failure
+fairness
+falls
+false
+family
+fashion
+fast
+faster
+features
+February
+feedback
+feel
+fetch
+fetching
+few
+fields
+figure
+figures
+file
+file name
+files
+filled
+filler
+final
+finally
+find
+fine
+finish
+finished
+first
+flow
+fly
+focus
+followed
+following
+font
+foot
+footnote
+footnotes
+for
+form
+format
+formats
+forms
+formula
+formulas
+forum
+found
+framework
+France
+from
+front
+full
+fully
+function
+functionality
+functions
+future
+gain
+games
+gap
+general
+generic
+Germany
+get
+gill
+give
+given
+gives
+giving
+global
+go
+goes
+got
+gradient
+graph
+graphical
+graphics
+gray
+great
+greatly
+green
+grey
+group
+growing
+gui
+GUI
+hack
+had
+half
+Hamburg
+hand
+handing
+handle
+handler
+handlers
+handles
+handling
+happens
+hardware
+harmonica
+has
+have
+having
+he
+head
+header
+headers
+hear
+height
+help
+helper
+here
+high
+highlight
+highly
+hints
+his
+hold
+holder
+holding
+hole
+home
+horizontal
+host
+hosting
+hours
+Houston
+how
+however
+huge
+hyphen
+ID
+idea
+ideally
+if
+Illinois
+illustrate
+illustrated
+illustrates
+image
+images
+impact
+implement
+implementation
+implementations
+implemented
+implementing
+implements
+import
+important
+improvements
+in
+include
+included
+includes
+including
+inclusion
+incoming
+inconvenient
+indent
+index
+indicate
+inexpensively
+influence
+info
+information
+ingenious
+inherits
+initial
+initially
+inner
+input
+inspired
+install
+installs
+instance
+instead
+instructs
+integer
+integers
+integration
+intended
+intensive
+interest
+interests
+interface
+interfaces
+interfere
+internal
+interval
+into
+intriguing
+intro
+introduce
+introduced
+invalid
+invented
+inverse
+invocation
+involved
+Irish
+irregular
+is
+ISO
+ISPs
+issue
+issues
+it
+items
+iterate
+its
+itself
+job
+join
+JPEG
+jungle
+just
+Karaoke
+keep
+keeping
+key
+kind
+king
+known
+label
+labels
+landscape
+language
+large
+last
+later
+latest
+lawn
+layout
+lead
+leader
+leaders
+lean
+leaves
+leaving
+left
+lemma
+length
+less
+let
+level
+levels
+libraries
+library
+lies
+like
+likely
+limit
+limiting
+limits
+line
+linear
+lines
+linewidth
+link
+linked
+linking
+Linux
+list
+lists
+little
+lives
+load
+loading
+loads
+located
+location
+locations
+logo
+long
+longer
+look
+looked
+looking
+looks
+lookup
+lookups
+loop
+lout
+low
+macro
+made
+magazine
+magic
+main
+major
+make
+makes
+making
+manage
+managed
+managing
+mandatory
+manipulate
+manipulation
+manner
+many
+map
+maps
+March
+margin
+mask
+masking
+Massachusetts
+match
+mathematical
+maximum
+may
+means
+meet
+member
+members
+memory
+merged
+method
+might
+milliseconds
+minimize
+minimum
+minor
+mix
+MNG
+mode
+model
+models
+modes
+modified
+module
+moments
+monitored
+monthly
+more
+most
+mostly
+move
+much
+multitude
+Munich
+must
+name
+named
+names
+necessary
+need
+needed
+needs
+network
+new
+news
+newsletter
+next
+nicely
+no
+none
+normally
+Norway
+not
+note
+notes
+nothing
+notifies
+notify
+now
+null
+number
+numbered
+numbering
+numbers
+Nydalen
+object
+objects
+obtain
+obtaining
+odd
+of
+off
+office
+offset
+offsets
+often
+old
+on
+once
+one
+ones
+online
+only
+onto
+opacity
+opaque
+open
+opens
+operates
+operating
+operation
+operations
+operator
+opportunity
+opposed
+optimize
+option
+optionally
+options
+or
+OR
+order
+ordinary
+original
+originally
+Oslo
+other
+otherwise
+our
+out
+outer
+outgoing
+output
+outside
+over
+overcoming
+overrides
+overview
+own
+owner
+owners
+pace
+Pacific
+package
+packages
+packets
+page
+pages
+paint
+painted
+painting
+paragraph
+paragraphs
+parameters
+parent
+Paris
+parse
+part
+partial
+partially
+particular
+partners
+parts
+party
+passed
+passing
+patches
+path
+pattern
+patterns
+pause
+PDF
+peek
+pending
+perform
+performed
+performs
+permission
+permutations
+personal
+pick
+pie
+pipe
+pixel
+pixels
+place
+places
+planning
+platforms
+play
+players
+playing
+please
+pleasing
+plugin
+plugins
+plus
+PNG
+pointer
+pop
+popular
+populates
+porter
+Porter
+portrait
+possibility
+possible
+potential
+potentially
+power
+powers
+preceded
+presence
+present
+prevent
+prevents
+previous
+previously
+primarily
+primary
+primitives
+printed
+printing
+prior
+probably
+problem
+process
+processes
+processing
+produce
+produced
+produces
+products
+programming
+programs
+project
+projects
+proof
+proper
+properly
+properties
+property
+proposed
+proposition
+pros
+protocols
+proud
+provide
+provided
+provides
+provision
+proxy
+public
+published
+punch
+punches
+pursuing
+put
+Qt
+Qtopia
+quality
+quarter
+quarterly
+queried
+queries
+query
+question
+questions
+radial
+ragged
+range
+rate
+rates
+rather
+ratio
+raw
+read
+reader
+reading
+reads
+ready
+real
+realistic
+really
+received
+recent
+recognized
+recommended
+recompile
+rectangle
+rectangular
+red
+redistribute
+reducing
+reference
+references
+reflect
+regardless
+regional
+register
+registered
+registration
+reimplement
+reimplementation
+reimplemented
+release
+released
+releases
+reliable
+rely
+remains
+remember
+removed
+removes
+repeatedly
+replace
+report
+represent
+represented
+represents
+reproduced
+requested
+require
+required
+requires
+resetting
+resides
+resolve
+respective
+respectively
+response
+rest
+restart
+result
+resulting
+resume
+return
+returning
+returns
+reuse
+revealing
+rich
+riches
+right
+roadshow
+role
+Roman
+router
+routers
+rule
+run
+runner
+runners
+running
+runs
+sake
+sales
+salespeople
+same
+sample
+San Jose
+save
+saved
+saves
+say
+scalable
+scale
+scanline
+scene
+scenes
+schedule
+school
+script
+seam
+seamless
+search
+searches
+searching
+second
+seconds
+section
+sections
+security
+see
+seen
+selection
+seminar
+seminars
+sending
+separated
+separates
+series
+service
+services
+set
+setting
+setup
+seven
+seventh
+several
+shade
+shadow
+shape
+shares
+shaves
+shine
+shorter
+should
+show
+shown
+shows
+side
+signal
+signals
+signature
+significantly
+similar
+similarily
+similarly
+simple
+simplest
+simplified
+simplifying
+simply
+simulate
+simultaneous
+since
+single
+size
+sizes
+slightly
+slope
+slot
+slowing
+small
+smaller
+so
+socket
+sockets
+software
+solutions
+solved
+some
+soon
+sort
+sorting
+source
+sources
+south
+space
+special
+specialized
+specific
+specifically
+specification
+specifications
+specified
+specify
+speed
+spend
+split
+SQL
+standard
+standards
+start
+starts
+starve
+state
+states
+static
+steady
+stealing
+step
+still
+stop
+stopwatch
+store
+stored
+stores
+straightforward
+stream
+string
+strings
+structure
+structured
+strut
+style
+styles
+styling
+subclass
+subclassing
+subdirectory
+subsection
+subsections
+succeeds
+success
+successful
+successfully
+such
+suggestion
+suggestions
+suitable
+support
+supported
+supports
+suppose
+supposes
+sure
+switch
+switches
+symbol
+symbols
+synonyms
+system
+systems
+table
+tables
+tags
+take
+takes
+tap
+target
+targets
+TCP
+team
+technique
+technology
+template
+templates
+Texas
+text
+than
+that
+the
+their
+them
+then
+theorem
+there
+these
+they
+thickness
+thin
+third
+this
+those
+three
+throttling
+through
+tightly
+time
+timer
+times
+tiny
+tips
+title
+titles
+to
+together
+too
+top
+torrent
+total
+tour
+trademarks
+traffic
+training
+transaction
+transfer
+transferred
+transferring
+transfers
+translucency
+translucent
+transparency
+transparent
+travel
+traveled
+true
+try
+turn
+twice
+two
+type
+typed
+typical
+typically
+unable
+under
+underlying
+understanding
+undoes
+unique
+united
+unlike
+unpack
+unsigned
+until
+untouched
+up
+update
+updated
+updates
+upload
+uploading
+uploads
+us
+use
+used
+useful
+user
+users
+uses
+using
+usual
+usually
+valid
+value
+values
+variable
+variation
+variety
+various
+vector
+venturing
+verifying
+versa
+version
+versions
+vertical
+very
+via
+vice
+virtual
+visual
+void
+VP
+waiting
+Wales
+want
+wants
+was
+way
+ways
+we
+web
+website
+well
+were
+what
+when
+whenever
+where
+whether
+which
+while
+whistle
+white
+who
+whole
+why
+widget
+widgets
+width
+widths
+will
+window
+windows
+wish
+with
+without
+word
+words
+work
+working
+works
+would
+wrap
+wrapper
+write
+writes
+writing
+writings
+written
+X
+X11
+XOR
+year
+years
+yes
+you
+your
+zero
diff --git a/examples/tools/i18n/i18n.py b/examples/tools/i18n/i18n.py
new file mode 100755
index 0000000..d60545a
--- /dev/null
+++ b/examples/tools/i18n/i18n.py
@@ -0,0 +1,217 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDir, QEvent, Qt, QT_TRANSLATE_NOOP, QTranslator
+from PyQt5.QtGui import QColor, QPalette
+from PyQt5.QtWidgets import (QAction, QApplication, QCheckBox, QDialog,
+        QDialogButtonBox, QGridLayout, QGroupBox, QListWidget, QMainWindow,
+        QRadioButton, QVBoxLayout, QWidget)
+
+import i18n_rc
+
+
+class LanguageChooser(QDialog):
+    def __init__(self, parent=None):
+        super(LanguageChooser, self).__init__(parent, Qt.WindowStaysOnTopHint)
+
+        self.qmFileForCheckBoxMap = {}
+        self.mainWindowForCheckBoxMap = {} 
+
+        groupBox = QGroupBox("Languages")
+
+        groupBoxLayout = QGridLayout()
+
+        qmFiles = self.findQmFiles()
+
+        for i, qmf in enumerate(qmFiles):
+            checkBox = QCheckBox(self.languageName(qmf))
+            self.qmFileForCheckBoxMap[checkBox] = qmf
+            checkBox.toggled.connect(self.checkBoxToggled)
+            groupBoxLayout.addWidget(checkBox, i / 2, i % 2)
+
+        groupBox.setLayout(groupBoxLayout)
+
+        buttonBox = QDialogButtonBox()
+
+        showAllButton = buttonBox.addButton("Show All",
+                QDialogButtonBox.ActionRole)
+        hideAllButton = buttonBox.addButton("Hide All",
+                QDialogButtonBox.ActionRole)
+
+        showAllButton.clicked.connect(self.showAll)
+        hideAllButton.clicked.connect(self.hideAll)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(groupBox)
+        mainLayout.addWidget(buttonBox)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("I18N")
+
+    def eventFilter(self, object, event):
+        if event.type() == QEvent.Close:
+            if isinstance(object, MainWindow):
+                window = object
+
+                for checkBox, w in self.mainWindowForCheckBoxMap.items():
+                    if w is window:
+                        break
+                else:
+                    checkBox = None
+
+                if checkBox:
+                    checkBox.setChecked(False)
+
+        return QWidget.eventFilter(self, object, event)
+
+    def closeEvent(self, event):
+        QApplication.instance().quit()
+
+    def checkBoxToggled(self):
+        checkBox = self.sender()
+        window = self.mainWindowForCheckBoxMap.get(checkBox)
+
+        if not window:
+            translator = QTranslator()
+            translator.load(self.qmFileForCheckBoxMap[checkBox])
+            QApplication.installTranslator(translator)
+
+            # Because we will be installing an event filter for the main window
+            # it is important that this instance isn't garbage collected before
+            # the main window when the program terminates.  We ensure this by
+            # making the main window a child of this one.
+            window = MainWindow(self)
+            window.setPalette(QPalette(self.colorForLanguage(checkBox.text())))
+
+            window.installEventFilter(self)
+            self.mainWindowForCheckBoxMap[checkBox] = window
+
+        window.setVisible(checkBox.isChecked())
+
+    def showAll(self):
+        for checkBox in self.qmFileForCheckBoxMap.keys():
+            checkBox.setChecked(True)
+
+    def hideAll(self):
+        for checkBox in self.qmFileForCheckBoxMap.keys():
+            checkBox.setChecked(False)
+
+    def findQmFiles(self):
+        trans_dir = QDir(':/translations')
+        fileNames = trans_dir.entryList(['*.qm'], QDir.Files, QDir.Name)
+
+        return [trans_dir.filePath(fn) for fn in fileNames]
+
+    def languageName(self, qmFile):
+        translator = QTranslator() 
+        translator.load(qmFile)
+
+        return translator.translate("MainWindow", "English")
+
+    def colorForLanguage(self, language):
+        hashValue = hash(language)
+        red = 156 + (hashValue & 0x3F)
+        green = 156 + ((hashValue >> 6) & 0x3F)
+        blue = 156 + ((hashValue >> 12) & 0x3F)
+        return QColor(red, green, blue)
+
+
+class MainWindow(QMainWindow):
+    listEntries = [QT_TRANSLATE_NOOP("MainWindow", "First"),
+                   QT_TRANSLATE_NOOP("MainWindow", "Second"),
+                   QT_TRANSLATE_NOOP("MainWindow", "Third")]
+
+    def __init__(self, parent=None):
+        super(MainWindow, self).__init__(parent)
+
+        self.centralWidget = QWidget()
+        self.setCentralWidget(self.centralWidget)
+
+        self.createGroupBox()
+
+        listWidget = QListWidget()
+
+        for le in MainWindow.listEntries:
+            listWidget.addItem(self.tr(le))
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.groupBox)
+        mainLayout.addWidget(listWidget)
+        self.centralWidget.setLayout(mainLayout)
+
+        exitAction = QAction(self.tr("E&xit"), self,
+                triggered=QApplication.instance().quit)
+
+        fileMenu = self.menuBar().addMenu(self.tr("&File"))
+        fileMenu.setPalette(QPalette(Qt.red))
+        fileMenu.addAction(exitAction)
+
+        self.setWindowTitle(self.tr("Language: %s") % self.tr("English"))
+        self.statusBar().showMessage(self.tr("Internationalization Example"))
+
+        if self.tr("LTR") == "RTL":
+            self.setLayoutDirection(Qt.RightToLeft)
+
+    def createGroupBox(self):
+        self.groupBox = QGroupBox(self.tr("View"))
+        perspectiveRadioButton = QRadioButton(self.tr("Perspective"))
+        isometricRadioButton = QRadioButton(self.tr("Isometric"))
+        obliqueRadioButton = QRadioButton(self.tr("Oblique"))
+        perspectiveRadioButton.setChecked(True)
+
+        self.groupBoxLayout = QVBoxLayout()
+        self.groupBoxLayout.addWidget(perspectiveRadioButton)
+        self.groupBoxLayout.addWidget(isometricRadioButton)
+        self.groupBoxLayout.addWidget(obliqueRadioButton)
+        self.groupBox.setLayout(self.groupBoxLayout)
+
+
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+    chooser = LanguageChooser()
+    chooser.show()
+    sys.exit(app.exec_())
diff --git a/examples/tools/i18n/i18n.qrc b/examples/tools/i18n/i18n.qrc
new file mode 100644
index 0000000..16a89f1
--- /dev/null
+++ b/examples/tools/i18n/i18n.qrc
@@ -0,0 +1,18 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>translations/i18n_ar.qm</file>
+    <file>translations/i18n_cs.qm</file>
+    <file>translations/i18n_de.qm</file>
+    <file>translations/i18n_el.qm</file>
+    <file>translations/i18n_en.qm</file>
+    <file>translations/i18n_eo.qm</file>
+    <file>translations/i18n_fr.qm</file>
+    <file>translations/i18n_it.qm</file>
+    <file>translations/i18n_jp.qm</file>
+    <file>translations/i18n_ko.qm</file>
+    <file>translations/i18n_no.qm</file>
+    <file>translations/i18n_ru.qm</file>
+    <file>translations/i18n_sv.qm</file>
+    <file>translations/i18n_zh.qm</file>
+</qresource>
+</RCC>
diff --git a/examples/tools/i18n/i18n_rc.py b/examples/tools/i18n/i18n_rc.py
new file mode 100644
index 0000000..0612966
--- /dev/null
+++ b/examples/tools/i18n/i18n_rc.py
@@ -0,0 +1,824 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Tue May 14 15:44:15 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x03\x24\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\
+\x00\x00\x00\x35\x00\x4d\x09\xa4\x00\x00\x00\x50\x00\x5a\xf0\x84\
+\x00\x00\x00\x67\x02\xf0\x8c\x31\x00\x00\x00\x7e\x05\x93\x08\xe5\
+\x00\x00\x00\x9b\x05\x9b\xa6\x44\x00\x00\x00\xb2\x06\x3c\xe8\x53\
+\x00\x00\x00\xc7\x06\xec\x79\x65\x00\x00\x00\xe6\x0c\x4e\x30\xd8\
+\x00\x00\x01\x05\x0e\x9f\xe7\x05\x00\x00\x01\x1a\x69\x00\x00\x01\
+\x5f\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x06\x00\x56\x00\x69\x00\x73\x05\x00\x05\
+\xcf\xc7\x01\x03\x00\x00\x00\x08\x00\x26\x00\x46\x00\x69\x00\x6c\
+\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x10\x00\x26\x00\x41\x00\
+\x76\x00\x73\x00\x6c\x00\x75\x00\x74\x00\x74\x05\x00\x47\xdf\x04\
+\x01\x03\x00\x00\x00\x0c\x00\x46\x00\xf8\x00\x72\x00\x73\x00\x74\
+\x00\x65\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x0c\x00\x54\x00\
+\x72\x00\x65\x00\x64\x00\x6a\x00\x65\x05\x00\x5a\xf0\x84\x01\x03\
+\x00\x00\x00\x12\x00\x53\x00\x70\x00\x72\x00\xe5\x00\x6b\x00\x3a\
+\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\
+\x0c\x00\x53\x00\x6b\x00\x6a\x00\x65\x00\x76\x00\x74\x05\x05\x93\
+\x08\xe5\x01\x03\x00\x00\x00\x0a\x00\x41\x00\x6e\x00\x64\x00\x72\
+\x00\x65\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x14\x00\x49\x00\
+\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\x69\x00\x73\x00\
+\x6b\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x14\x00\x50\x00\x65\
+\x00\x72\x00\x73\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\
+\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0a\x00\x4e\x00\x6f\x00\
+\x72\x00\x73\x00\x6b\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x3a\
+\x00\x49\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x73\
+\x00\x6a\x00\x6f\x00\x6e\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x65\
+\x00\x72\x00\x69\x00\x6e\x00\x67\x00\x73\x00\x65\x00\x6b\x00\x73\
+\x00\x65\x00\x6d\x00\x70\x00\x65\x00\x6c\x05\x0e\x9f\xe7\x05\x01\
+\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\
+\x6f\x77\x00\
+\x00\x00\x03\x26\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x2a\x00\x47\xdf\x04\
+\x00\x00\x00\x45\x00\x4d\x09\xa4\x00\x00\x00\x5a\x00\x5a\xf0\x84\
+\x00\x00\x00\x6d\x02\xf0\x8c\x31\x00\x00\x00\x80\x05\x93\x08\xe5\
+\x00\x00\x00\x9f\x05\x9b\xa6\x44\x00\x00\x00\xb8\x06\x3c\xe8\x53\
+\x00\x00\x00\xc9\x06\xec\x79\x65\x00\x00\x00\xe6\x0c\x4e\x30\xd8\
+\x00\x00\x01\x07\x0e\x9f\xe7\x05\x00\x00\x01\x24\x69\x00\x00\x01\
+\x61\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x0e\x00\x41\x00\x73\x00\x70\x00\x65\x00\
+\x6b\x00\x74\x00\x6f\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x10\
+\x00\x26\x00\x44\x00\x6f\x00\x73\x00\x69\x00\x65\x00\x72\x00\x6f\
+\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0a\x00\x26\x00\x46\x00\
+\x69\x00\x6e\x00\x69\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x08\
+\x00\x55\x00\x6e\x00\x75\x00\x65\x05\x00\x4d\x09\xa4\x01\x03\x00\
+\x00\x00\x08\x00\x54\x00\x72\x00\x69\x00\x65\x05\x00\x5a\xf0\x84\
+\x01\x03\x00\x00\x00\x14\x00\x4c\x00\x69\x00\x6e\x00\x67\x00\x76\
+\x00\x6f\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\
+\x03\x00\x00\x00\x0e\x00\x4f\x00\x62\x00\x6c\x00\x69\x00\x6b\x00\
+\x76\x00\x61\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x06\x00\x44\
+\x00\x75\x00\x65\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x12\x00\
+\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\x69\x00\
+\x61\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x00\x50\x00\x65\
+\x00\x72\x00\x73\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\
+\x00\x61\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x12\x00\x45\x00\
+\x73\x00\x70\x00\x65\x00\x72\x00\x61\x00\x6e\x00\x74\x00\x6f\x05\
+\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x32\x00\x45\x00\x6b\x00\x7a\
+\x00\x65\x00\x6d\x00\x70\x00\x6c\x00\x6f\x00\x20\x00\x70\x00\x72\
+\x00\x69\x00\x20\x00\x69\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6e\
+\x00\x61\x00\x63\x00\x69\x00\x69\x00\x67\x00\x6f\x05\x0e\x9f\xe7\
+\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\
+\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x4c\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\
+\x00\x00\x00\x3d\x00\x4d\x09\xa4\x00\x00\x00\x58\x00\x5a\xf0\x84\
+\x00\x00\x00\x71\x02\xf0\x8c\x31\x00\x00\x00\x8e\x05\x93\x08\xe5\
+\x00\x00\x00\xaf\x05\x9b\xa6\x44\x00\x00\x00\xc8\x06\x3c\xe8\x53\
+\x00\x00\x00\xe3\x06\xec\x79\x65\x00\x00\x01\x04\x0c\x4e\x30\xd8\
+\x00\x00\x01\x25\x0e\x9f\xe7\x05\x00\x00\x01\x40\x69\x00\x00\x01\
+\x87\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x06\x00\x56\x00\x75\x00\x65\x05\x00\x05\
+\xcf\xc7\x01\x03\x00\x00\x00\x10\x00\x26\x00\x46\x00\x69\x00\x63\
+\x00\x68\x00\x69\x00\x65\x00\x72\x05\x00\x2a\xd0\x25\x01\x03\x00\
+\x00\x00\x10\x00\x26\x00\x51\x00\x75\x00\x69\x00\x74\x00\x74\x00\
+\x65\x00\x72\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0e\x00\x50\
+\x00\x72\x00\x65\x00\x6d\x00\x69\x00\x65\x00\x72\x05\x00\x4d\x09\
+\xa4\x01\x03\x00\x00\x00\x12\x00\x54\x00\x72\x00\x6f\x00\x69\x00\
+\x73\x00\x69\x00\xe8\x00\x6d\x00\x65\x05\x00\x5a\xf0\x84\x01\x03\
+\x00\x00\x00\x16\x00\x4c\x00\x61\x00\x6e\x00\x67\x00\x75\x00\x65\
+\x00\x20\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\
+\x03\x00\x00\x00\x0e\x00\x4f\x00\x62\x00\x6c\x00\x69\x00\x71\x00\
+\x75\x00\x65\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x10\x00\x44\
+\x00\x65\x00\x75\x00\x78\x00\x69\x00\xe8\x00\x6d\x00\x65\x05\x05\
+\x9b\xa6\x44\x01\x03\x00\x00\x00\x16\x00\x49\x00\x73\x00\x6f\x00\
+\x6d\x00\xe9\x00\x74\x00\x72\x00\x69\x00\x71\x00\x75\x00\x65\x05\
+\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x00\x50\x00\x65\x00\x72\
+\x00\x73\x00\x70\x00\x65\x00\x63\x00\x74\x00\x69\x00\x76\x00\x65\
+\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x10\x00\x46\x00\x72\x00\
+\x61\x00\x6e\x00\xe7\x00\x61\x00\x69\x00\x73\x05\x0c\x4e\x30\xd8\
+\x01\x03\x00\x00\x00\x3c\x00\x45\x00\x78\x00\x65\x00\x6d\x00\x70\
+\x00\x6c\x00\x65\x00\x20\x00\x64\x00\x27\x00\x69\x00\x6e\x00\x74\
+\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\
+\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x61\x00\x74\x00\x69\x00\x6f\
+\x00\x6e\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\
+\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x1c\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x28\x00\x47\xdf\x04\
+\x00\x00\x00\x41\x00\x4d\x09\xa4\x00\x00\x00\x58\x00\x5a\xf0\x84\
+\x00\x00\x00\x6d\x02\xf0\x8c\x31\x00\x00\x00\x82\x05\x93\x08\xe5\
+\x00\x00\x00\x9f\x05\x9b\xa6\x44\x00\x00\x00\xbc\x06\x3c\xe8\x53\
+\x00\x00\x00\xd1\x06\xec\x79\x65\x00\x00\x00\xf2\x0c\x4e\x30\xd8\
+\x00\x00\x01\x15\x0e\x9f\xe7\x05\x00\x00\x01\x2a\x69\x00\x00\x01\
+\x57\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x0c\x00\x50\x00\x6f\x00\x68\x00\x6c\x00\
+\x65\x00\x64\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0e\x00\x26\
+\x00\x53\x00\x6f\x00\x75\x00\x62\x00\x6f\x00\x72\x05\x00\x2a\xd0\
+\x25\x01\x03\x00\x00\x00\x0c\x00\x26\x00\x4b\x00\x6f\x00\x6e\x00\
+\x65\x00\x63\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0a\x00\x50\
+\x00\x72\x00\x76\x00\x6e\x00\xed\x05\x00\x4d\x09\xa4\x01\x03\x00\
+\x00\x00\x0a\x00\x54\x01\x59\x00\x65\x00\x74\x00\xed\x05\x00\x5a\
+\xf0\x84\x01\x03\x00\x00\x00\x12\x00\x4a\x00\x61\x00\x79\x00\x7a\
+\x00\x6b\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\
+\x03\x00\x00\x00\x12\x00\x4e\x00\x61\x00\x6b\x00\x6c\x00\x6f\x00\
+\x6e\x01\x1b\x00\x6e\x00\xfd\x05\x05\x93\x08\xe5\x01\x03\x00\x00\
+\x00\x0a\x00\x44\x00\x72\x00\x75\x00\x68\x00\xfd\x05\x05\x9b\xa6\
+\x44\x01\x03\x00\x00\x00\x16\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\
+\x65\x00\x74\x00\x72\x00\x69\x00\x63\x00\x6b\x00\xfd\x05\x06\x3c\
+\xe8\x53\x01\x03\x00\x00\x00\x18\x00\x50\x00\x65\x00\x72\x00\x73\
+\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\x00\x6e\x00\xed\
+\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0a\x01\x0c\x00\x65\x00\
+\x73\x00\x6b\x00\xfd\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x22\
+\x00\x55\x00\x6b\x00\xe1\x00\x7a\x00\x6b\x00\x61\x00\x20\x00\x6c\
+\x00\x6f\x00\x6b\x00\x61\x00\x6c\x00\x69\x00\x7a\x00\x61\x00\x63\
+\x00\x65\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\
+\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x50\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x2a\x00\x47\xdf\x04\
+\x00\x00\x00\x41\x00\x4d\x09\xa4\x00\x00\x00\x5c\x00\x5a\xf0\x84\
+\x00\x00\x00\x75\x02\xf0\x8c\x31\x00\x00\x00\x90\x05\x93\x08\xe5\
+\x00\x00\x00\xb1\x05\x9b\xa6\x44\x00\x00\x00\xc8\x06\x3c\xe8\x53\
+\x00\x00\x00\xe3\x06\xec\x79\x65\x00\x00\x01\x04\x0c\x4e\x30\xd8\
+\x00\x00\x01\x2b\x0e\x9f\xe7\x05\x00\x00\x01\x44\x69\x00\x00\x01\
+\x8b\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x0e\x00\x41\x00\x6e\x00\x73\x00\x69\x00\
+\x63\x00\x68\x00\x74\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0c\
+\x00\x26\x00\x44\x00\x61\x00\x74\x00\x65\x00\x69\x05\x00\x2a\xd0\
+\x25\x01\x03\x00\x00\x00\x10\x00\x42\x00\x65\x00\x26\x00\x65\x00\
+\x6e\x00\x64\x00\x65\x00\x6e\x05\x00\x47\xdf\x04\x01\x03\x00\x00\
+\x00\x0e\x00\x45\x00\x72\x00\x73\x00\x74\x00\x65\x00\x6e\x00\x73\
+\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x10\x00\x44\x00\x72\x00\
+\x69\x00\x74\x00\x74\x00\x65\x00\x6e\x00\x73\x05\x00\x5a\xf0\x84\
+\x01\x03\x00\x00\x00\x16\x00\x53\x00\x70\x00\x72\x00\x61\x00\x63\
+\x00\x68\x00\x65\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\
+\x31\x01\x03\x00\x00\x00\x0c\x00\x53\x00\x63\x00\x68\x00\x69\x00\
+\x65\x00\x66\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x10\x00\x5a\
+\x00\x77\x00\x65\x00\x69\x00\x74\x00\x65\x00\x6e\x00\x73\x05\x05\
+\x9b\xa6\x44\x01\x03\x00\x00\x00\x16\x00\x49\x00\x73\x00\x6f\x00\
+\x6d\x00\x65\x00\x74\x00\x72\x00\x69\x00\x73\x00\x63\x00\x68\x05\
+\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x1c\x00\x50\x00\x65\x00\x72\
+\x00\x73\x00\x70\x00\x65\x00\x6b\x00\x74\x00\x69\x00\x76\x00\x69\
+\x00\x73\x00\x63\x00\x68\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\
+\x0e\x00\x44\x00\x65\x00\x75\x00\x74\x00\x73\x00\x63\x00\x68\x05\
+\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x3c\x00\x49\x00\x6e\x00\x74\
+\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\
+\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x69\x00\x65\x00\x72\x00\x75\
+\x00\x6e\x00\x67\x00\x73\x00\x62\x00\x65\x00\x69\x00\x73\x00\x70\
+\x00\x69\x00\x65\x00\x6c\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\
+\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x28\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x26\x00\x47\xdf\x04\
+\x00\x00\x00\x3b\x00\x4d\x09\xa4\x00\x00\x00\x50\x00\x5a\xf0\x84\
+\x00\x00\x00\x65\x02\xf0\x8c\x31\x00\x00\x00\x7a\x05\x93\x08\xe5\
+\x00\x00\x00\x99\x05\x9b\xa6\x44\x00\x00\x00\xb2\x06\x3c\xe8\x53\
+\x00\x00\x00\xcb\x06\xec\x79\x65\x00\x00\x00\xea\x0c\x4e\x30\xd8\
+\x00\x00\x01\x0b\x0e\x9f\xe7\x05\x00\x00\x01\x26\x69\x00\x00\x01\
+\x63\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x0a\x00\x56\x00\x69\x00\x73\x00\x74\x00\
+\x61\x05\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0a\x00\x26\x00\x46\
+\x00\x69\x00\x6c\x00\x65\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\
+\x0a\x00\x26\x00\x45\x00\x73\x00\x63\x00\x69\x05\x00\x47\xdf\x04\
+\x01\x03\x00\x00\x00\x0a\x00\x50\x00\x72\x00\x69\x00\x6d\x00\x6f\
+\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x0a\x00\x54\x00\x65\x00\
+\x72\x00\x7a\x00\x6f\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x14\
+\x00\x4c\x00\x69\x00\x6e\x00\x67\x00\x75\x00\x61\x00\x3a\x00\x20\
+\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\x0e\x00\
+\x4f\x00\x62\x00\x6c\x00\x69\x00\x71\x00\x75\x00\x61\x05\x05\x93\
+\x08\xe5\x01\x03\x00\x00\x00\x0e\x00\x53\x00\x65\x00\x63\x00\x6f\
+\x00\x6e\x00\x64\x00\x6f\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\
+\x14\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\
+\x69\x00\x63\x00\x61\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\
+\x00\x50\x00\x72\x00\x6f\x00\x73\x00\x70\x00\x65\x00\x74\x00\x74\
+\x00\x69\x00\x63\x00\x61\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\
+\x10\x00\x49\x00\x74\x00\x61\x00\x6c\x00\x69\x00\x61\x00\x6e\x00\
+\x6f\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x32\x00\x45\x00\x73\
+\x00\x65\x00\x6d\x00\x70\x00\x69\x00\x6f\x00\x20\x00\x64\x00\x69\
+\x00\x20\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x6c\x00\x69\x00\x7a\
+\x00\x7a\x00\x61\x00\x7a\x00\x69\x00\x6f\x00\x6e\x00\x65\x05\x0e\
+\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\
+\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x02\xe0\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\
+\x00\x00\x00\x39\x00\x4d\x09\xa4\x00\x00\x00\x4c\x00\x5a\xf0\x84\
+\x00\x00\x00\x5d\x02\xf0\x8c\x31\x00\x00\x00\x70\x05\x93\x08\xe5\
+\x00\x00\x00\x8d\x05\x9b\xa6\x44\x00\x00\x00\xa0\x06\x3c\xe8\x53\
+\x00\x00\x00\xb3\x06\xec\x79\x65\x00\x00\x00\xca\x0c\x4e\x30\xd8\
+\x00\x00\x00\xdf\x0e\x9f\xe7\x05\x00\x00\x00\xf8\x69\x00\x00\x01\
+\x1b\x03\x00\x00\x00\x06\x00\x52\x00\x54\x00\x4c\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x08\x06\x45\x06\x31\x06\x26\x06\x49\x05\
+\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0a\x06\x27\x06\x44\x06\x45\
+\x06\x44\x06\x41\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x08\x06\
+\x23\x06\x2e\x06\x31\x06\x2c\x05\x00\x47\xdf\x04\x01\x03\x00\x00\
+\x00\x06\x06\x23\x06\x48\x06\x44\x05\x00\x4d\x09\xa4\x01\x03\x00\
+\x00\x00\x08\x06\x2b\x06\x27\x06\x44\x06\x2b\x05\x00\x5a\xf0\x84\
+\x01\x03\x00\x00\x00\x12\x06\x27\x06\x44\x06\x44\x06\x3a\x06\x29\
+\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\
+\x00\x00\x08\x06\x45\x06\x35\x06\x45\x06\x2a\x05\x05\x93\x08\xe5\
+\x01\x03\x00\x00\x00\x08\x06\x2b\x06\x27\x06\x46\x06\x49\x05\x05\
+\x9b\xa6\x44\x01\x03\x00\x00\x00\x0c\x06\x45\x06\x2a\x06\x45\x06\
+\x27\x06\x2b\x06\x44\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x0a\
+\x06\x45\x06\x46\x06\x38\x06\x48\x06\x31\x05\x06\xec\x79\x65\x01\
+\x03\x00\x00\x00\x0e\x06\x27\x06\x44\x06\x39\x06\x31\x06\x28\x06\
+\x4a\x06\x29\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x18\x06\x45\
+\x06\x2b\x06\x27\x06\x44\x00\x20\x06\x27\x06\x44\x06\x2a\x06\x2f\
+\x06\x48\x06\x4a\x06\x44\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\
+\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x02\xbc\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x20\x00\x47\xdf\x04\
+\x00\x00\x00\x37\x00\x4d\x09\xa4\x00\x00\x00\x4e\x00\x5a\xf0\x84\
+\x00\x00\x00\x5f\x02\xf0\x8c\x31\x00\x00\x00\x70\x05\x93\x08\xe5\
+\x00\x00\x00\x87\x05\x9b\xa6\x44\x00\x00\x00\x98\x06\x3c\xe8\x53\
+\x00\x00\x00\xa9\x06\xec\x79\x65\x00\x00\x00\xbc\x0c\x4e\x30\xd8\
+\x00\x00\x00\xcf\x0e\x9f\xe7\x05\x00\x00\x00\xe2\x69\x00\x00\x00\
+\xf7\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x04\x89\xc6\x56\xfe\x05\x00\x05\xcf\xc7\
+\x01\x03\x00\x00\x00\x0c\x65\x87\x4e\xf6\x00\x5b\x00\x26\x00\x46\
+\x00\x5d\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0c\x90\x00\x51\
+\xfa\x00\x5b\x00\x26\x00\x78\x00\x5d\x05\x00\x47\xdf\x04\x01\x03\
+\x00\x00\x00\x06\x7b\x2c\x4e\x00\x4e\x2a\x05\x00\x4d\x09\xa4\x01\
+\x03\x00\x00\x00\x06\x7b\x2c\x4e\x09\x4e\x2a\x05\x00\x5a\xf0\x84\
+\x01\x03\x00\x00\x00\x0c\x8b\xed\x8a\x00\x00\x3a\x00\x20\x00\x25\
+\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\x06\x65\x9c\x62\
+\x95\x5f\x71\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x06\x7b\x2c\
+\x4e\x8c\x4e\x2a\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x08\x7b\
+\x49\x89\xd2\x62\x95\x5f\x71\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\
+\x00\x08\x90\x0f\x89\xc6\x62\x95\x5f\x71\x05\x06\xec\x79\x65\x01\
+\x03\x00\x00\x00\x08\x7b\x80\x4f\x53\x4e\x2d\x65\x87\x05\x0c\x4e\
+\x30\xd8\x01\x03\x00\x00\x00\x0a\x56\xfd\x96\x45\x53\x16\x83\x03\
+\x4f\x8b\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\
+\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x02\xd2\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\
+\x00\x00\x00\x3f\x00\x4d\x09\xa4\x00\x00\x00\x56\x00\x5a\xf0\x84\
+\x00\x00\x00\x67\x02\xf0\x8c\x31\x00\x00\x00\x78\x05\x93\x08\xe5\
+\x00\x00\x00\x8f\x05\x9b\xa6\x44\x00\x00\x00\xa4\x06\x3c\xe8\x53\
+\x00\x00\x00\xb5\x06\xec\x79\x65\x00\x00\x00\xca\x0c\x4e\x30\xd8\
+\x00\x00\x00\xdb\x0e\x9f\xe7\x05\x00\x00\x00\xec\x69\x00\x00\x01\
+\x0d\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x08\x88\x68\x79\x3a\x65\xb9\x5f\x0f\x05\
+\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x10\x30\xd5\x30\xa1\x30\xa4\
+\x30\xeb\x00\x28\x00\x26\x00\x46\x00\x29\x05\x00\x2a\xd0\x25\x01\
+\x03\x00\x00\x00\x0c\x7d\x42\x4e\x86\x00\x28\x00\x26\x00\x58\x00\
+\x29\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x06\x7b\x2c\x4e\x00\
+\x88\x4c\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x06\x7b\x2c\x4e\
+\x09\x88\x4c\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x0c\x8a\x00\
+\x8a\x9e\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\
+\x03\x00\x00\x00\x0a\x65\x9c\x30\x81\x62\x95\x5f\x71\x6c\xd5\x05\
+\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x06\x7b\x2c\x4e\x8c\x88\x4c\
+\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\x0a\x7b\x49\x89\xd2\x62\
+\x95\x5f\x71\x6c\xd5\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x06\
+\x90\x60\x8f\xd1\x6c\xd5\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\
+\x06\x65\xe5\x67\x2c\x8a\x9e\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\
+\x00\x16\x56\xfd\x96\x9b\x53\x16\x00\x28\x00\x69\x00\x31\x00\x38\
+\x00\x6e\x00\x29\x30\x6e\x4f\x8b\x05\x0e\x9f\xe7\x05\x01\x2f\x00\
+\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\
+\x00\
+\x00\x00\x03\x26\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\
+\x00\x00\x00\x35\x00\x4d\x09\xa4\x00\x00\x00\x4a\x00\x5a\xf0\x84\
+\x00\x00\x00\x61\x02\xf0\x8c\x31\x00\x00\x00\x78\x05\x93\x08\xe5\
+\x00\x00\x00\x93\x05\x9b\xa6\x44\x00\x00\x00\xaa\x06\x3c\xe8\x53\
+\x00\x00\x00\xc1\x06\xec\x79\x65\x00\x00\x00\xe8\x0c\x4e\x30\xd8\
+\x00\x00\x01\x09\x0e\x9f\xe7\x05\x00\x00\x01\x22\x69\x00\x00\x01\
+\x61\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x06\x04\x12\x04\x38\x04\x34\x05\x00\x05\
+\xcf\xc7\x01\x03\x00\x00\x00\x08\x04\x24\x04\x30\x04\x39\x04\x3b\
+\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0a\x04\x12\x04\x4b\x04\
+\x45\x04\x3e\x04\x34\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0c\
+\x04\x1f\x04\x35\x04\x40\x04\x32\x04\x4b\x04\x39\x05\x00\x4d\x09\
+\xa4\x01\x03\x00\x00\x00\x0c\x04\x22\x04\x40\x04\x35\x04\x42\x04\
+\x38\x04\x39\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x10\x04\x2f\
+\x04\x37\x04\x4b\x04\x3a\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\
+\xf0\x8c\x31\x01\x03\x00\x00\x00\x0c\x04\x1a\x04\x43\x04\x40\x04\
+\x41\x04\x38\x04\x32\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0c\
+\x04\x12\x04\x42\x04\x3e\x04\x40\x04\x3e\x04\x39\x05\x05\x9b\xa6\
+\x44\x01\x03\x00\x00\x00\x1c\x04\x18\x04\x37\x04\x3e\x04\x3c\x04\
+\x35\x04\x42\x04\x40\x04\x38\x04\x47\x04\x35\x04\x41\x04\x3a\x04\
+\x38\x04\x39\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x04\x1f\
+\x04\x35\x04\x40\x04\x41\x04\x3f\x04\x35\x04\x3a\x04\x42\x04\x38\
+\x04\x32\x04\x30\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0e\x04\
+\x20\x04\x43\x04\x41\x04\x41\x04\x3a\x04\x38\x04\x39\x05\x0c\x4e\
+\x30\xd8\x01\x03\x00\x00\x00\x34\x04\x1f\x04\x40\x04\x38\x04\x3c\
+\x04\x35\x04\x40\x00\x20\x04\x38\x04\x3d\x04\x42\x04\x35\x04\x40\
+\x04\x3d\x04\x30\x04\x46\x04\x38\x04\x3d\x04\x3e\x04\x30\x04\x3b\
+\x04\x38\x04\x37\x04\x30\x04\x46\x04\x38\x04\x38\x05\x0e\x9f\xe7\
+\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\
+\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x2a\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\
+\x00\x00\x00\x39\x00\x4d\x09\xa4\x00\x00\x00\x4e\x00\x5a\xf0\x84\
+\x00\x00\x00\x63\x02\xf0\x8c\x31\x00\x00\x00\x78\x05\x93\x08\xe5\
+\x00\x00\x00\x9b\x05\x9b\xa6\x44\x00\x00\x00\xb4\x06\x3c\xe8\x53\
+\x00\x00\x00\xcb\x06\xec\x79\x65\x00\x00\x00\xe8\x0c\x4e\x30\xd8\
+\x00\x00\x01\x09\x0e\x9f\xe7\x05\x00\x00\x01\x22\x69\x00\x00\x01\
+\x65\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x08\x00\x56\x00\x69\x00\x65\x00\x77\x05\
+\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0a\x00\x26\x00\x46\x00\x69\
+\x00\x6c\x00\x65\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\x0a\x00\
+\x45\x00\x26\x00\x78\x00\x69\x00\x74\x05\x00\x47\xdf\x04\x01\x03\
+\x00\x00\x00\x0a\x00\x46\x00\x69\x00\x72\x00\x73\x00\x74\x05\x00\
+\x4d\x09\xa4\x01\x03\x00\x00\x00\x0a\x00\x54\x00\x68\x00\x69\x00\
+\x72\x00\x64\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x18\x00\x4c\
+\x00\x61\x00\x6e\x00\x67\x00\x75\x00\x61\x00\x67\x00\x65\x00\x3a\
+\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\x00\x00\
+\x0e\x00\x4f\x00\x62\x00\x6c\x00\x69\x00\x71\x00\x75\x00\x65\x05\
+\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0c\x00\x53\x00\x65\x00\x63\
+\x00\x6f\x00\x6e\x00\x64\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\
+\x12\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\
+\x69\x00\x63\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\x00\x16\x00\x50\
+\x00\x65\x00\x72\x00\x73\x00\x70\x00\x65\x00\x63\x00\x74\x00\x69\
+\x00\x76\x00\x65\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x0e\x00\
+\x45\x00\x6e\x00\x67\x00\x6c\x00\x69\x00\x73\x00\x68\x05\x0c\x4e\
+\x30\xd8\x01\x03\x00\x00\x00\x38\x00\x49\x00\x6e\x00\x74\x00\x65\
+\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x61\
+\x00\x6c\x00\x69\x00\x7a\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\
+\x00\x20\x00\x45\x00\x78\x00\x61\x00\x6d\x00\x70\x00\x6c\x00\x65\
+\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\
+\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x02\xb2\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x20\x00\x47\xdf\x04\
+\x00\x00\x00\x33\x00\x4d\x09\xa4\x00\x00\x00\x46\x00\x5a\xf0\x84\
+\x00\x00\x00\x57\x02\xf0\x8c\x31\x00\x00\x00\x68\x05\x93\x08\xe5\
+\x00\x00\x00\x81\x05\x9b\xa6\x44\x00\x00\x00\x90\x06\x3c\xe8\x53\
+\x00\x00\x00\xa1\x06\xec\x79\x65\x00\x00\x00\xb2\x0c\x4e\x30\xd8\
+\x00\x00\x00\xc5\x0e\x9f\xe7\x05\x00\x00\x00\xd6\x69\x00\x00\x00\
+\xed\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x04\xbc\xf4\xae\x30\x05\x00\x05\xcf\xc7\
+\x01\x03\x00\x00\x00\x08\xd3\x0c\xc7\x7c\x00\x26\x00\x46\x05\x00\
+\x2a\xd0\x25\x01\x03\x00\x00\x00\x08\xc8\x85\xb8\xcc\x00\x26\x00\
+\x58\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x06\xcc\xab\xbc\x88\
+\xc9\xf8\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x06\xc1\x38\xbc\
+\x88\xc9\xf8\x05\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x0e\xc5\xb8\
+\xc5\xb4\x00\x20\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\
+\x31\x01\x03\x00\x00\x00\x04\xbe\x57\xac\x01\x05\x05\x93\x08\xe5\
+\x01\x03\x00\x00\x00\x06\xb4\x50\xbc\x88\xc9\xf8\x05\x05\x9b\xa6\
+\x44\x01\x03\x00\x00\x00\x06\xb4\xf1\xce\x21\xb3\xc4\x05\x06\x3c\
+\xe8\x53\x01\x03\x00\x00\x00\x08\xc6\xd0\xad\xfc\xd6\x54\xbc\x95\
+\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x06\xd5\x5c\xad\x6d\xc5\
+\xb4\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x0c\xad\x6d\xc8\x1c\
+\xd6\x54\x00\x20\xc6\x08\xc8\x1c\x05\x0e\x9f\xe7\x05\x01\x2f\x00\
+\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\
+\x00\
+\x00\x00\x03\x2e\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x24\x00\x47\xdf\x04\
+\x00\x00\x00\x3b\x00\x4d\x09\xa4\x00\x00\x00\x56\x00\x5a\xf0\x84\
+\x00\x00\x00\x6d\x02\xf0\x8c\x31\x00\x00\x00\x84\x05\x93\x08\xe5\
+\x00\x00\x00\xa1\x05\x9b\xa6\x44\x00\x00\x00\xb6\x06\x3c\xe8\x53\
+\x00\x00\x00\xcb\x06\xec\x79\x65\x00\x00\x00\xec\x0c\x4e\x30\xd8\
+\x00\x00\x01\x0d\x0e\x9f\xe7\x05\x00\x00\x01\x26\x69\x00\x00\x01\
+\x69\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x08\x00\x56\x00\x69\x00\x73\x00\x61\x05\
+\x00\x05\xcf\xc7\x01\x03\x00\x00\x00\x0c\x00\x26\x00\x41\x00\x72\
+\x00\x6b\x00\x69\x00\x76\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\
+\x10\x00\x26\x00\x41\x00\x76\x00\x73\x00\x6c\x00\x75\x00\x74\x00\
+\x61\x05\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0c\x00\x46\x00\xf6\
+\x00\x72\x00\x73\x00\x74\x00\x61\x05\x00\x4d\x09\xa4\x01\x03\x00\
+\x00\x00\x0c\x00\x54\x00\x72\x00\x65\x00\x64\x00\x6a\x00\x65\x05\
+\x00\x5a\xf0\x84\x01\x03\x00\x00\x00\x12\x00\x53\x00\x70\x00\x72\
+\x00\xe5\x00\x6b\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\
+\x31\x01\x03\x00\x00\x00\x0a\x00\x53\x00\x6b\x00\x65\x00\x76\x00\
+\x74\x05\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0a\x00\x41\x00\x6e\
+\x00\x64\x00\x72\x00\x61\x05\x05\x9b\xa6\x44\x01\x03\x00\x00\x00\
+\x16\x00\x49\x00\x73\x00\x6f\x00\x6d\x00\x65\x00\x74\x00\x72\x00\
+\x69\x00\x73\x00\x6b\x00\x74\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\
+\x00\x16\x00\x50\x00\x65\x00\x72\x00\x73\x00\x70\x00\x65\x00\x6b\
+\x00\x74\x00\x69\x00\x76\x00\x74\x05\x06\xec\x79\x65\x01\x03\x00\
+\x00\x00\x0e\x00\x53\x00\x76\x00\x65\x00\x6e\x00\x73\x00\x6b\x00\
+\x61\x05\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x38\x00\x49\x00\x6e\
+\x00\x74\x00\x65\x00\x72\x00\x6e\x00\x61\x00\x74\x00\x69\x00\x6f\
+\x00\x6e\x00\x61\x00\x6c\x00\x69\x00\x73\x00\x65\x00\x72\x00\x69\
+\x00\x6e\x00\x67\x00\x73\x00\x65\x00\x78\x00\x65\x00\x6d\x00\x70\
+\x00\x65\x00\x6c\x05\x0e\x9f\xe7\x05\x01\x2f\x00\x00\x01\x3e\x00\
+\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\
+\x00\x00\x03\x24\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x68\x00\x00\x51\x92\x00\x00\x00\x00\x00\x05\xcf\xc7\
+\x00\x00\x00\x11\x00\x2a\xd0\x25\x00\x00\x00\x22\x00\x47\xdf\x04\
+\x00\x00\x00\x3b\x00\x4d\x09\xa4\x00\x00\x00\x54\x00\x5a\xf0\x84\
+\x00\x00\x00\x69\x02\xf0\x8c\x31\x00\x00\x00\x7e\x05\x93\x08\xe5\
+\x00\x00\x00\x9d\x05\x9b\xa6\x44\x00\x00\x00\xb4\x06\x3c\xe8\x53\
+\x00\x00\x00\xcd\x06\xec\x79\x65\x00\x00\x00\xec\x0c\x4e\x30\xd8\
+\x00\x00\x01\x09\x0e\x9f\xe7\x05\x00\x00\x01\x24\x69\x00\x00\x01\
+\x5f\x03\x00\x00\x00\x06\x00\x4c\x00\x54\x00\x52\x05\x00\x00\x51\
+\x92\x01\x03\x00\x00\x00\x06\x03\x8c\x03\xc8\x03\xb7\x05\x00\x05\
+\xcf\xc7\x01\x03\x00\x00\x00\x0e\x00\x26\x03\x91\x03\xc1\x03\xc7\
+\x03\xb5\x03\xaf\x03\xbf\x05\x00\x2a\xd0\x25\x01\x03\x00\x00\x00\
+\x0e\x03\x88\x00\x26\x03\xbe\x03\xbf\x03\xb4\x03\xbf\x03\xc2\x05\
+\x00\x47\xdf\x04\x01\x03\x00\x00\x00\x0a\x03\xa0\x03\xc1\x03\xce\
+\x03\xc4\x03\xbf\x05\x00\x4d\x09\xa4\x01\x03\x00\x00\x00\x0a\x03\
+\xa4\x03\xc1\x03\xaf\x03\xc4\x03\xbf\x05\x00\x5a\xf0\x84\x01\x03\
+\x00\x00\x00\x14\x03\x93\x03\xbb\x03\xce\x03\xc3\x03\xc3\x03\xb1\
+\x00\x3a\x00\x20\x00\x25\x00\x31\x05\x02\xf0\x8c\x31\x01\x03\x00\
+\x00\x00\x0c\x03\xa0\x03\xbb\x03\xac\x03\xb3\x03\xb9\x03\xb1\x05\
+\x05\x93\x08\xe5\x01\x03\x00\x00\x00\x0e\x03\x94\x03\xb5\x03\xcd\
+\x03\xc4\x03\xb5\x03\xc1\x03\xbf\x05\x05\x9b\xa6\x44\x01\x03\x00\
+\x00\x00\x14\x03\x99\x03\xc3\x03\xbf\x03\xbc\x03\xb5\x03\xc4\x03\
+\xc1\x03\xb9\x03\xba\x03\xae\x05\x06\x3c\xe8\x53\x01\x03\x00\x00\
+\x00\x12\x03\xa0\x03\xc1\x03\xbf\x03\xbf\x03\xc0\x03\xc4\x03\xb9\
+\x03\xba\x03\xae\x05\x06\xec\x79\x65\x01\x03\x00\x00\x00\x10\x03\
+\x95\x03\xbb\x03\xbb\x03\xb7\x03\xbd\x03\xb9\x03\xba\x03\xac\x05\
+\x0c\x4e\x30\xd8\x01\x03\x00\x00\x00\x30\x03\xa0\x03\xb1\x03\xc1\
+\x03\xac\x03\xb4\x03\xb5\x03\xb9\x03\xb3\x03\xbc\x03\xb1\x00\x20\
+\x03\xb4\x03\xb9\x03\xb5\x03\xb8\x03\xbd\x03\xbf\x03\xc0\x03\xbf\
+\x03\xaf\x03\xb7\x03\xc3\x03\xb7\x03\xc2\x05\x0e\x9f\xe7\x05\x01\
+\x2f\x00\x00\x01\x3e\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\
+\x6f\x77\x00\
+"
+
+qt_resource_name = b"\
+\x00\x0c\
+\x0d\xfc\x11\x13\
+\x00\x74\
+\x00\x72\x00\x61\x00\x6e\x00\x73\x00\x6c\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x73\
+\x00\x0a\
+\x04\x68\xac\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x6e\x00\x6f\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x59\xac\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x65\x00\x6f\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x50\xdc\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x66\x00\x72\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x57\xec\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x63\x00\x73\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x58\x0c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x64\x00\x65\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x6d\xfc\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x69\x00\x74\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x55\xdc\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x7d\x3c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x7a\x00\x68\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x6c\xbc\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x6a\x00\x70\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x65\x0c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x72\x00\x75\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x59\x9c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x65\x00\x6e\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x6f\xac\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x6b\x00\x6f\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x67\x1c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x73\x00\x76\x00\x2e\x00\x71\x00\x6d\
+\x00\x0a\
+\x04\x56\x7c\x9d\
+\x00\x69\
+\x00\x31\x00\x38\x00\x6e\x00\x5f\x00\x65\x00\x6c\x00\x2e\x00\x71\x00\x6d\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x02\
+\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x06\x52\
+\x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x00\x13\x42\
+\x00\x00\x01\x70\x00\x00\x00\x00\x00\x01\x00\x00\x27\xfc\
+\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x01\x00\x00\x09\xa2\
+\x00\x00\x00\x86\x00\x00\x00\x00\x00\x01\x00\x00\x0c\xc2\
+\x00\x00\x01\x22\x00\x00\x00\x00\x00\x01\x00\x00\x1e\xe6\
+\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x03\x28\
+\x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xbc\
+\x00\x00\x01\x56\x00\x00\x00\x00\x00\x01\x00\x00\x24\xca\
+\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\xee\x00\x00\x00\x00\x00\x01\x00\x00\x18\xe6\
+\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x10\x16\
+\x00\x00\x01\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x22\x14\
+\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x16\x26\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/tools/i18n/translations/i18n_ar.qm b/examples/tools/i18n/translations/i18n_ar.qm
new file mode 100644
index 0000000..a134c46
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_ar.qm differ
diff --git a/examples/tools/i18n/translations/i18n_ar.ts b/examples/tools/i18n/translations/i18n_ar.ts
new file mode 100644
index 0000000..a7ec2c9
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_ar.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>First</source>
+        <translation>أول</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>مثال التدويل</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>متماثل</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>اللغة: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>العربية</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>مصمت</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>منظور</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>ثانى</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>ثالث</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>مرئى</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>أخرج</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>الملف</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>RTL</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_cs.qm b/examples/tools/i18n/translations/i18n_cs.qm
new file mode 100644
index 0000000..5b7ff95
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_cs.qm differ
diff --git a/examples/tools/i18n/translations/i18n_cs.ts b/examples/tools/i18n/translations/i18n_cs.ts
new file mode 100644
index 0000000..6c4dee9
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_cs.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>View</source>
+        <translation>Pohled</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>&Soubor</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>&Konec</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>První</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Třetí</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Jayzk: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>Český</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Nakloněný</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Druhý</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Isometrický</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Perspektivní</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Ukázka lokalizace</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_de.qm b/examples/tools/i18n/translations/i18n_de.qm
new file mode 100644
index 0000000..177fc49
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_de.qm differ
diff --git a/examples/tools/i18n/translations/i18n_de.ts b/examples/tools/i18n/translations/i18n_de.ts
new file mode 100644
index 0000000..249a61d
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_de.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>View</source>
+        <translation>Ansicht</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>&Datei</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>Be&enden</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>Erstens</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Drittens</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>Deutsch</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Sprache: %1</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Schief</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Zweitens</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Isometrisch</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Perspektivisch</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Internationalisierungsbeispiel</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_el.qm b/examples/tools/i18n/translations/i18n_el.qm
new file mode 100644
index 0000000..5483291
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_el.qm differ
diff --git a/examples/tools/i18n/translations/i18n_el.ts b/examples/tools/i18n/translations/i18n_el.ts
new file mode 100644
index 0000000..d23a0aa
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_el.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>&File</source>
+        <translation>&Αρχείο</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>Έ&ξοδος</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>Πρώτο</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Παράδειγμα διεθνοποίησης</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Ισομετρική</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Γλώσσα: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>Ελληνικά</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Πλάγια</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Προοπτική</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Δεύτερο</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Τρίτο</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>Όψη</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_en.qm b/examples/tools/i18n/translations/i18n_en.qm
new file mode 100644
index 0000000..9190ac7
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_en.qm differ
diff --git a/examples/tools/i18n/translations/i18n_en.ts b/examples/tools/i18n/translations/i18n_en.ts
new file mode 100644
index 0000000..ca38e95
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_en.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>E&xit</source>
+        <translation>E&xit</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>&File</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Internationalization Example</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Language: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>English</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>View</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Perspective</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Isometric</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Oblique</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>First</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Second</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Third</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_eo.qm b/examples/tools/i18n/translations/i18n_eo.qm
new file mode 100644
index 0000000..a8457be
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_eo.qm differ
diff --git a/examples/tools/i18n/translations/i18n_eo.ts b/examples/tools/i18n/translations/i18n_eo.ts
new file mode 100644
index 0000000..16a37be
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_eo.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>&File</source>
+        <translation>&Dosiero</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>Unue</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Ekzemplo pri internaciigo</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Isometria</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Lingvo: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>Esperanto</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Oblikva</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Perspektiva</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Due</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Trie</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>Aspekto</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>&Fini</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_fr.qm b/examples/tools/i18n/translations/i18n_fr.qm
new file mode 100644
index 0000000..3e8a69b
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_fr.qm differ
diff --git a/examples/tools/i18n/translations/i18n_fr.ts b/examples/tools/i18n/translations/i18n_fr.ts
new file mode 100644
index 0000000..0012892
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_fr.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>View</source>
+        <translation>Vue</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>&Fichier</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>&Quitter</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>Premier</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Troisième</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Langue : %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>Français</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Oblique</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Deuxième</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Isométrique</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Perspective</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Exemple d'internationalisation</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_it.qm b/examples/tools/i18n/translations/i18n_it.qm
new file mode 100644
index 0000000..3dffd30
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_it.qm differ
diff --git a/examples/tools/i18n/translations/i18n_it.ts b/examples/tools/i18n/translations/i18n_it.ts
new file mode 100644
index 0000000..d516a27
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_it.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>First</source>
+        <translation>Primo</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Esempio di localizzazione</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Isometrica</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Lingua: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>Italiano</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Obliqua</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Prospettica</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Secondo</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Terzo</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>Vista</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>&Esci</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>&File</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_jp.qm b/examples/tools/i18n/translations/i18n_jp.qm
new file mode 100644
index 0000000..017bc96
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_jp.qm differ
diff --git a/examples/tools/i18n/translations/i18n_jp.ts b/examples/tools/i18n/translations/i18n_jp.ts
new file mode 100644
index 0000000..067b5a8
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_jp.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>&File</source>
+        <translation>ファイル(&F)</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>終了(&X)</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>第一行</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>国際化(i18n)の例</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>等角投影法</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>言語: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>日本語</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>斜め投影法</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>遠近法</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>第二行</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>第三行</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>表示方式</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_ko.qm b/examples/tools/i18n/translations/i18n_ko.qm
new file mode 100644
index 0000000..d61b93d
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_ko.qm differ
diff --git a/examples/tools/i18n/translations/i18n_ko.ts b/examples/tools/i18n/translations/i18n_ko.ts
new file mode 100644
index 0000000..bfd5924
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_ko.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>&File</source>
+        <translation>파일&F</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>종료&X</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>첫번째</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>국제화 예제</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>등측도</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>언어 : %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>한국어</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>빗각</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>원근화법</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>두번째</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>세번째</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>보기</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_no.qm b/examples/tools/i18n/translations/i18n_no.qm
new file mode 100644
index 0000000..c84b0d7
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_no.qm differ
diff --git a/examples/tools/i18n/translations/i18n_no.ts b/examples/tools/i18n/translations/i18n_no.ts
new file mode 100644
index 0000000..2e06974
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_no.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>View</source>
+        <translation>Vis</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>&Fil</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>&Avslutt</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>Første</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Tredje</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Språk: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>Norsk</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Skjevt</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Andre</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Isometrisk</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Perspektiv</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Internasjonaliseringseksempel</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_pt.qm b/examples/tools/i18n/translations/i18n_pt.qm
new file mode 100644
index 0000000..d1d3e6d
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_pt.qm differ
diff --git a/examples/tools/i18n/translations/i18n_pt.ts b/examples/tools/i18n/translations/i18n_pt.ts
new file mode 100644
index 0000000..9365639
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_pt.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>E&xit</source>
+        <translation>&Sair</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>&Arquivo</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Exemplo de Internacionalização</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Idioma: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>Português</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation>Visão</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Perspectiva</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Isométrico</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Oblíquo</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>Primeiro</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Segundo</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Terceiro</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_ru.qm b/examples/tools/i18n/translations/i18n_ru.qm
new file mode 100644
index 0000000..a76e1b8
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_ru.qm differ
diff --git a/examples/tools/i18n/translations/i18n_ru.ts b/examples/tools/i18n/translations/i18n_ru.ts
new file mode 100644
index 0000000..c9a9db8
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_ru.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>View</source>
+        <translation>Вид</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>Файл</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>Выход</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>Первый</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Третий</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Язык: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>Русский</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Курсив</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Второй</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Изометрический</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Перспектива</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Пример интернациноализации</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_sv.qm b/examples/tools/i18n/translations/i18n_sv.qm
new file mode 100644
index 0000000..7204b30
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_sv.qm differ
diff --git a/examples/tools/i18n/translations/i18n_sv.ts b/examples/tools/i18n/translations/i18n_sv.ts
new file mode 100644
index 0000000..ac4ab98
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_sv.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>View</source>
+        <translation>Visa</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>&Arkiv</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>&Avsluta</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>Första</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>Tredje</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>Språk: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>Svenska</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>Skevt</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>Andra</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>Isometriskt</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>Perspektivt</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>Internationaliseringsexempel</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/i18n/translations/i18n_zh.qm b/examples/tools/i18n/translations/i18n_zh.qm
new file mode 100644
index 0000000..32053f4
Binary files /dev/null and b/examples/tools/i18n/translations/i18n_zh.qm differ
diff --git a/examples/tools/i18n/translations/i18n_zh.ts b/examples/tools/i18n/translations/i18n_zh.ts
new file mode 100644
index 0000000..3b71547
--- /dev/null
+++ b/examples/tools/i18n/translations/i18n_zh.ts
@@ -0,0 +1,57 @@
+<!DOCTYPE TS><TS>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <source>View</source>
+        <translation>视图</translation>
+    </message>
+    <message>
+        <source>&File</source>
+        <translation>文件[&F]</translation>
+    </message>
+    <message>
+        <source>E&xit</source>
+        <translation>退出[&x]</translation>
+    </message>
+    <message>
+        <source>First</source>
+        <translation>第一个</translation>
+    </message>
+    <message>
+        <source>Third</source>
+        <translation>第三个</translation>
+    </message>
+    <message>
+        <source>Language: %1</source>
+        <translation>语言: %1</translation>
+    </message>
+    <message>
+        <source>English</source>
+        <translation>简体中文</translation>
+    </message>
+    <message>
+        <source>Oblique</source>
+        <translation>斜投影</translation>
+    </message>
+    <message>
+        <source>Second</source>
+        <translation>第二个</translation>
+    </message>
+    <message>
+        <source>Isometric</source>
+        <translation>等角投影</translation>
+    </message>
+    <message>
+        <source>Perspective</source>
+        <translation>透视投影</translation>
+    </message>
+    <message>
+        <source>Internationalization Example</source>
+        <translation>国际化范例</translation>
+    </message>
+    <message>
+        <source>LTR</source>
+        <translation>LTR</translation>
+    </message>
+</context>
+</TS>
diff --git a/examples/tools/regexp.py b/examples/tools/regexp.py
new file mode 100755
index 0000000..c76d623
--- /dev/null
+++ b/examples/tools/regexp.py
@@ -0,0 +1,193 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QRegExp, Qt
+from PyQt5.QtGui import QPalette
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QDialog,
+        QGridLayout, QHBoxLayout, QLabel, QLineEdit, QSizePolicy)
+
+
+class RegExpDialog(QDialog):
+    MaxCaptures = 6
+
+    def __init__(self, parent=None):
+        super(RegExpDialog, self).__init__(parent)
+
+        self.patternComboBox = QComboBox()
+        self.patternComboBox.setEditable(True)
+        self.patternComboBox.setSizePolicy(QSizePolicy.Expanding,
+                QSizePolicy.Preferred)
+
+        patternLabel = QLabel("&Pattern:")
+        patternLabel.setBuddy(self.patternComboBox)
+
+        self.escapedPatternLineEdit = QLineEdit()
+        self.escapedPatternLineEdit.setReadOnly(True)
+        palette = self.escapedPatternLineEdit.palette()
+        palette.setBrush(QPalette.Base,
+                palette.brush(QPalette.Disabled, QPalette.Base))
+        self.escapedPatternLineEdit.setPalette(palette)
+
+        escapedPatternLabel = QLabel("&Escaped Pattern:")
+        escapedPatternLabel.setBuddy(self.escapedPatternLineEdit)
+
+        self.syntaxComboBox = QComboBox()
+        self.syntaxComboBox.addItem("Regular expression v1", QRegExp.RegExp)
+        self.syntaxComboBox.addItem("Regular expression v2", QRegExp.RegExp2)
+        self.syntaxComboBox.addItem("Wildcard", QRegExp.Wildcard)
+        self.syntaxComboBox.addItem("Fixed string", QRegExp.FixedString)
+
+        syntaxLabel = QLabel("&Pattern Syntax:")
+        syntaxLabel.setBuddy(self.syntaxComboBox)
+
+        self.textComboBox = QComboBox()
+        self.textComboBox.setEditable(True)
+        self.textComboBox.setSizePolicy(QSizePolicy.Expanding,
+                QSizePolicy.Preferred)
+
+        textLabel = QLabel("&Text:")
+        textLabel.setBuddy(self.textComboBox)
+
+        self.caseSensitiveCheckBox = QCheckBox("Case &Sensitive")
+        self.caseSensitiveCheckBox.setChecked(True)
+        self.minimalCheckBox = QCheckBox("&Minimal")
+
+        indexLabel = QLabel("Index of Match:")
+        self.indexEdit = QLineEdit()
+        self.indexEdit.setReadOnly(True)
+
+        matchedLengthLabel = QLabel("Matched Length:")
+        self.matchedLengthEdit = QLineEdit()
+        self.matchedLengthEdit.setReadOnly(True)
+
+        self.captureLabels = []
+        self.captureEdits = []
+        for i in range(self.MaxCaptures):
+            self.captureLabels.append(QLabel("Capture %d:" % i))
+            self.captureEdits.append(QLineEdit())
+            self.captureEdits[i].setReadOnly(True)
+        self.captureLabels[0].setText("Match:")
+
+        checkBoxLayout = QHBoxLayout()
+        checkBoxLayout.addWidget(self.caseSensitiveCheckBox)
+        checkBoxLayout.addWidget(self.minimalCheckBox)
+        checkBoxLayout.addStretch(1)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(patternLabel, 0, 0)
+        mainLayout.addWidget(self.patternComboBox, 0, 1)
+        mainLayout.addWidget(escapedPatternLabel, 1, 0)
+        mainLayout.addWidget(self.escapedPatternLineEdit, 1, 1)
+        mainLayout.addWidget(syntaxLabel, 2, 0)
+        mainLayout.addWidget(self.syntaxComboBox, 2, 1)
+        mainLayout.addLayout(checkBoxLayout, 3, 0, 1, 2)
+        mainLayout.addWidget(textLabel, 4, 0)
+        mainLayout.addWidget(self.textComboBox, 4, 1)
+        mainLayout.addWidget(indexLabel, 5, 0)
+        mainLayout.addWidget(self.indexEdit, 5, 1)
+        mainLayout.addWidget(matchedLengthLabel, 6, 0)
+        mainLayout.addWidget(self.matchedLengthEdit, 6, 1)
+
+        for i in range(self.MaxCaptures):
+            mainLayout.addWidget(self.captureLabels[i], 7 + i, 0)
+            mainLayout.addWidget(self.captureEdits[i], 7 + i, 1)
+        self.setLayout(mainLayout)
+
+        self.patternComboBox.editTextChanged.connect(self.refresh)
+        self.textComboBox.editTextChanged.connect(self.refresh)
+        self.caseSensitiveCheckBox.toggled.connect(self.refresh)
+        self.minimalCheckBox.toggled.connect(self.refresh)
+        self.syntaxComboBox.currentIndexChanged.connect(self.refresh)
+
+        self.patternComboBox.addItem("[A-Za-z_]+([A-Za-z_0-9]*)")
+        self.textComboBox.addItem("(10 + delta4)* 32")
+
+        self.setWindowTitle("RegExp")
+        self.setFixedHeight(self.sizeHint().height())
+        self.refresh()
+
+    def refresh(self):
+        self.setUpdatesEnabled(False)
+
+        pattern = self.patternComboBox.currentText()
+        text = self.textComboBox.currentText()
+
+        escaped = str(pattern)
+        escaped.replace('\\', '\\\\')
+        escaped.replace('"', '\\"')
+        self.escapedPatternLineEdit.setText('"' + escaped + '"')
+
+        rx = QRegExp(pattern)
+        cs = Qt.CaseSensitive if self.caseSensitiveCheckBox.isChecked() else Qt.CaseInsensitive
+        rx.setCaseSensitivity(cs)
+        rx.setMinimal(self.minimalCheckBox.isChecked())
+        syntax = self.syntaxComboBox.itemData(self.syntaxComboBox.currentIndex())
+        rx.setPatternSyntax(syntax)
+
+        palette = self.patternComboBox.palette()
+        if rx.isValid():
+            palette.setColor(QPalette.Text,
+                    self.textComboBox.palette().color(QPalette.Text))
+        else:
+            palette.setColor(QPalette.Text, Qt.red)
+        self.patternComboBox.setPalette(palette)
+
+        self.indexEdit.setText(str(rx.indexIn(text)))
+        self.matchedLengthEdit.setText(str(rx.matchedLength()))
+
+        for i in range(self.MaxCaptures):
+            self.captureLabels[i].setEnabled(i <= rx.captureCount())
+            self.captureEdits[i].setEnabled(i <= rx.captureCount())
+            self.captureEdits[i].setText(rx.cap(i))
+
+        self.setUpdatesEnabled(True)
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    dialog = RegExpDialog()
+    dialog.show()
+    sys.exit(app.exec_())
diff --git a/examples/tools/settingseditor/inifiles/licensepage.ini b/examples/tools/settingseditor/inifiles/licensepage.ini
new file mode 100644
index 0000000..608d1b7
--- /dev/null
+++ b/examples/tools/settingseditor/inifiles/licensepage.ini
@@ -0,0 +1,46 @@
+[Field%201]
+Bottom=89
+Flags=MULTILINE|VSCROLL|READONLY
+Left=4
+Right=296
+State=No license agreement file found. Please contact support.
+Top=14
+Type=Text
+
+[Field%202]
+Bottom=8
+Left=4
+Right=294
+Text=Press Page Down to see the rest of the agreement.
+Top=0
+Type=Label
+
+[Field%203]
+Bottom=111
+Left=4
+Right=297
+Text=If you accept the terms of the agreement, select the first option below. You must accept the agreement to install this software. Click Next to continue.
+Top=92
+Type=Label
+
+[Field%204]
+Bottom=129
+Flags=GROUP|NOTIFY
+Left=4
+Right=299
+Text=I &accept the terms in the License Agreement
+Top=120
+Type=RadioButton
+
+[Field%205]
+Bottom=140
+Flags=NOTIFY
+Left=4
+Right=300
+State=1
+Text=I &do not accept the terms in the License Agreement
+Top=129
+Type=RadioButton
+
+[Settings]
+NumFields=5
diff --git a/examples/tools/settingseditor/inifiles/qsa.ini b/examples/tools/settingseditor/inifiles/qsa.ini
new file mode 100644
index 0000000..56a2964
--- /dev/null
+++ b/examples/tools/settingseditor/inifiles/qsa.ini
@@ -0,0 +1,26 @@
+[Field%201]
+Bottom=65
+Left=0
+Right=299
+Text=QSA Build Options
+Top=9
+Type=Groupbox
+
+[Field%202]
+Bottom=37
+Left=20
+Right=284
+Text=Don't compile QSA Workbench into QSA.
+Top=27
+Type=Checkbox
+
+[Field%203]
+Bottom=56
+Left=20
+Right=247
+Text=Don't compile QSA Workbench nor QSA Editor into QSA.
+Top=45
+Type=Checkbox
+
+[Settings]
+NumFields=3
diff --git a/examples/tools/settingseditor/settingseditor.py b/examples/tools/settingseditor/settingseditor.py
new file mode 100755
index 0000000..1c85b31
--- /dev/null
+++ b/examples/tools/settingseditor/settingseditor.py
@@ -0,0 +1,725 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5.QtCore import (QByteArray, QDate, QDateTime, QEvent, QPoint, QRect,
+        QRegExp, QSettings, QSize, Qt, QTime, QTimer)
+from PyQt5.QtGui import QColor, QIcon, QRegExpValidator, QValidator
+from PyQt5.QtWidgets import (QAbstractItemView, QAction, QApplication,
+        QComboBox, QDialog, QDialogButtonBox, QFileDialog, QGridLayout,
+        QGroupBox, QHeaderView, QInputDialog, QItemDelegate, QLabel, QLineEdit,
+        QMainWindow, QMessageBox, QStyle, QStyleOptionViewItem, QTableWidget,
+        QTableWidgetItem, QTreeWidget, QTreeWidgetItem, QVBoxLayout)
+
+
+class MainWindow(QMainWindow):
+    def __init__(self, parent=None):
+        super(MainWindow, self).__init__(parent)
+
+        self.settingsTree = SettingsTree()
+        self.setCentralWidget(self.settingsTree)
+
+        self.locationDialog = None
+
+        self.createActions()
+        self.createMenus()
+
+        self.autoRefreshAct.setChecked(True)
+        self.fallbacksAct.setChecked(True)
+
+        self.setWindowTitle("Settings Editor")
+        self.resize(500, 600)
+
+    def openSettings(self):
+        if self.locationDialog is None:
+            self.locationDialog = LocationDialog(self)
+
+        if self.locationDialog.exec_():
+            settings = QSettings(self.locationDialog.format(),
+                                        self.locationDialog.scope(),
+                                        self.locationDialog.organization(),
+                                        self.locationDialog.application())
+            self.setSettingsObject(settings)
+            self.fallbacksAct.setEnabled(True)
+
+    def openIniFile(self):
+        fileName, _ = QFileDialog.getOpenFileName(self, "Open INI File", '',
+                "INI Files (*.ini *.conf)")
+
+        if fileName:
+            settings = QSettings(fileName, QSettings.IniFormat)
+            self.setSettingsObject(settings)
+            self.fallbacksAct.setEnabled(False)
+
+    def openPropertyList(self):
+        fileName, _ = QFileDialog.getOpenFileName(self, "Open Property List",
+                '', "Property List Files (*.plist)")
+
+        if fileName:
+            settings = QSettings(fileName, QSettings.NativeFormat)
+            self.setSettingsObject(settings)
+            self.fallbacksAct.setEnabled(False)
+
+    def openRegistryPath(self):
+        path, ok = QInputDialog.getText(self, "Open Registry Path",
+                "Enter the path in the Windows registry:", QLineEdit.Normal,
+                'HKEY_CURRENT_USER\\')
+
+        if ok and path != '':
+            settings = QSettings(path, QSettings.NativeFormat)
+            self.setSettingsObject(settings)
+            self.fallbacksAct.setEnabled(False)
+
+    def about(self):
+        QMessageBox.about(self, "About Settings Editor",
+                "The <b>Settings Editor</b> example shows how to access "
+                "application settings using Qt.")
+
+    def createActions(self):
+        self.openSettingsAct = QAction("&Open Application Settings...", self,
+                shortcut="Ctrl+O", triggered=self.openSettings)
+
+        self.openIniFileAct = QAction("Open I&NI File...", self,
+                shortcut="Ctrl+N", triggered=self.openIniFile)
+
+        self.openPropertyListAct = QAction("Open Mac &Property List...", self,
+                shortcut="Ctrl+P", triggered=self.openPropertyList)
+        if sys.platform != 'darwin':
+            self.openPropertyListAct.setEnabled(False)
+
+        self.openRegistryPathAct = QAction("Open Windows &Registry Path...",
+                self, shortcut="Ctrl+G", triggered=self.openRegistryPath)
+        if sys.platform != 'win32':
+            self.openRegistryPathAct.setEnabled(False)
+
+        self.refreshAct = QAction("&Refresh", self, shortcut="Ctrl+R",
+                enabled=False, triggered=self.settingsTree.refresh)
+
+        self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q",
+                triggered=self.close)
+
+        self.autoRefreshAct = QAction("&Auto-Refresh", self, shortcut="Ctrl+A",
+                checkable=True, enabled=False)
+        self.autoRefreshAct.triggered.connect(self.settingsTree.setAutoRefresh)
+        self.autoRefreshAct.triggered.connect(self.refreshAct.setDisabled)
+
+        self.fallbacksAct = QAction("&Fallbacks", self, shortcut="Ctrl+F",
+                checkable=True, enabled=False,
+                triggered=self.settingsTree.setFallbacksEnabled)
+
+        self.aboutAct = QAction("&About", self, triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.openSettingsAct)
+        self.fileMenu.addAction(self.openIniFileAct)
+        self.fileMenu.addAction(self.openPropertyListAct)
+        self.fileMenu.addAction(self.openRegistryPathAct)
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.refreshAct)
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.exitAct)
+
+        self.optionsMenu = self.menuBar().addMenu("&Options")
+        self.optionsMenu.addAction(self.autoRefreshAct)
+        self.optionsMenu.addAction(self.fallbacksAct)
+
+        self.menuBar().addSeparator()
+
+        self.helpMenu = self.menuBar().addMenu("&Help")
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+    def setSettingsObject(self, settings):
+        settings.setFallbacksEnabled(self.fallbacksAct.isChecked())
+        self.settingsTree.setSettingsObject(settings)
+
+        self.refreshAct.setEnabled(True)
+        self.autoRefreshAct.setEnabled(True)
+
+        niceName = settings.fileName()
+        niceName.replace('\\', '/')
+        niceName = niceName.split('/')[-1]
+
+        if not settings.isWritable():
+            niceName += " (read only)"
+
+        self.setWindowTitle("%s - Settings Editor" % niceName)
+
+
+class LocationDialog(QDialog):
+    def __init__(self, parent=None):
+        super(LocationDialog, self).__init__(parent)
+
+        self.formatComboBox = QComboBox()
+        self.formatComboBox.addItem("Native")
+        self.formatComboBox.addItem("INI")
+
+        self.scopeComboBox = QComboBox()
+        self.scopeComboBox.addItem("User")
+        self.scopeComboBox.addItem("System")
+
+        self.organizationComboBox = QComboBox()
+        self.organizationComboBox.addItem("Trolltech")
+        self.organizationComboBox.setEditable(True)
+
+        self.applicationComboBox = QComboBox()
+        self.applicationComboBox.addItem("Any")
+        self.applicationComboBox.addItem("Application Example")
+        self.applicationComboBox.addItem("Assistant")
+        self.applicationComboBox.addItem("Designer")
+        self.applicationComboBox.addItem("Linguist")
+        self.applicationComboBox.setEditable(True)
+        self.applicationComboBox.setCurrentIndex(3)
+
+        formatLabel = QLabel("&Format:")
+        formatLabel.setBuddy(self.formatComboBox)
+
+        scopeLabel = QLabel("&Scope:")
+        scopeLabel.setBuddy(self.scopeComboBox)
+
+        organizationLabel = QLabel("&Organization:")
+        organizationLabel.setBuddy(self.organizationComboBox)
+
+        applicationLabel = QLabel("&Application:")
+        applicationLabel.setBuddy(self.applicationComboBox)
+
+        self.locationsGroupBox = QGroupBox("Setting Locations")
+
+        self.locationsTable = QTableWidget()
+        self.locationsTable.setSelectionMode(QAbstractItemView.SingleSelection)
+        self.locationsTable.setSelectionBehavior(QAbstractItemView.SelectRows)
+        self.locationsTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
+        self.locationsTable.setColumnCount(2)
+        self.locationsTable.setHorizontalHeaderLabels(("Location", "Access"))
+        self.locationsTable.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch)
+        self.locationsTable.horizontalHeader().resizeSection(1, 180)
+
+        self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
+
+        self.formatComboBox.activated.connect(self.updateLocationsTable)
+        self.scopeComboBox.activated.connect(self.updateLocationsTable)
+        self.organizationComboBox.lineEdit().editingFinished.connect(self.updateLocationsTable)
+        self.applicationComboBox.lineEdit().editingFinished.connect(self.updateLocationsTable)
+        self.buttonBox.accepted.connect(self.accept)
+        self.buttonBox.rejected.connect(self.reject)
+
+        locationsLayout = QVBoxLayout()
+        locationsLayout.addWidget(self.locationsTable)
+        self.locationsGroupBox.setLayout(locationsLayout)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(formatLabel, 0, 0)
+        mainLayout.addWidget(self.formatComboBox, 0, 1)
+        mainLayout.addWidget(scopeLabel, 1, 0)
+        mainLayout.addWidget(self.scopeComboBox, 1, 1)
+        mainLayout.addWidget(organizationLabel, 2, 0)
+        mainLayout.addWidget(self.organizationComboBox, 2, 1)
+        mainLayout.addWidget(applicationLabel, 3, 0)
+        mainLayout.addWidget(self.applicationComboBox, 3, 1)
+        mainLayout.addWidget(self.locationsGroupBox, 4, 0, 1, 2)
+        mainLayout.addWidget(self.buttonBox, 5, 0, 1, 2)
+        self.setLayout(mainLayout)
+
+        self.updateLocationsTable()
+
+        self.setWindowTitle("Open Application Settings")
+        self.resize(650, 400)
+
+    def format(self):
+        if self.formatComboBox.currentIndex() == 0:
+            return QSettings.NativeFormat
+        else:
+            return QSettings.IniFormat
+
+    def scope(self):
+        if self.scopeComboBox.currentIndex() == 0:
+            return QSettings.UserScope
+        else:
+            return QSettings.SystemScope
+
+    def organization(self):
+        return self.organizationComboBox.currentText()
+
+    def application(self):
+        if self.applicationComboBox.currentText() == "Any":
+            return ''
+
+        return self.applicationComboBox.currentText()
+
+    def updateLocationsTable(self):
+        self.locationsTable.setUpdatesEnabled(False)
+        self.locationsTable.setRowCount(0)
+
+        for i in range(2):
+            if i == 0:
+                if self.scope() == QSettings.SystemScope:
+                    continue
+
+                actualScope = QSettings.UserScope
+            else:
+                actualScope = QSettings.SystemScope
+
+            for j in range(2):
+                if j == 0:
+                    if not self.application():
+                        continue
+
+                    actualApplication = self.application()
+                else:
+                    actualApplication = ''
+
+                settings = QSettings(self.format(), actualScope,
+                        self.organization(), actualApplication)
+
+                row = self.locationsTable.rowCount()
+                self.locationsTable.setRowCount(row + 1)
+
+                item0 = QTableWidgetItem()
+                item0.setText(settings.fileName())
+
+                item1 = QTableWidgetItem()
+                disable = not (settings.childKeys() or settings.childGroups())
+
+                if row == 0:
+                    if settings.isWritable():
+                        item1.setText("Read-write")
+                        disable = False
+                    else:
+                        item1.setText("Read-only")
+                    self.buttonBox.button(QDialogButtonBox.Ok).setDisabled(disable)
+                else:
+                    item1.setText("Read-only fallback")
+
+                if disable:
+                    item0.setFlags(item0.flags() & ~Qt.ItemIsEnabled)
+                    item1.setFlags(item1.flags() & ~Qt.ItemIsEnabled)
+
+                self.locationsTable.setItem(row, 0, item0)
+                self.locationsTable.setItem(row, 1, item1)
+
+        self.locationsTable.setUpdatesEnabled(True)
+
+
+class SettingsTree(QTreeWidget):
+    def __init__(self, parent=None):
+        super(SettingsTree, self).__init__(parent)
+
+        self.setItemDelegate(VariantDelegate(self))
+
+        self.setHeaderLabels(("Setting", "Type", "Value"))
+        self.header().setSectionResizeMode(0, QHeaderView.Stretch)
+        self.header().setSectionResizeMode(2, QHeaderView.Stretch)
+
+        self.settings = None
+        self.refreshTimer = QTimer()
+        self.refreshTimer.setInterval(2000)
+        self.autoRefresh = False
+
+        self.groupIcon = QIcon()
+        self.groupIcon.addPixmap(self.style().standardPixmap(QStyle.SP_DirClosedIcon),
+                QIcon.Normal, QIcon.Off)
+        self.groupIcon.addPixmap(self.style().standardPixmap(QStyle.SP_DirOpenIcon),
+                QIcon.Normal, QIcon.On)
+        self.keyIcon = QIcon()
+        self.keyIcon.addPixmap(self.style().standardPixmap(QStyle.SP_FileIcon))
+
+        self.refreshTimer.timeout.connect(self.maybeRefresh)
+
+    def setSettingsObject(self, settings):
+        self.settings = settings
+        self.clear()
+
+        if self.settings is not None:
+            self.settings.setParent(self)
+            self.refresh()
+            if self.autoRefresh:
+                self.refreshTimer.start()
+        else:
+            self.refreshTimer.stop()
+
+    def sizeHint(self):
+        return QSize(800, 600)
+
+    def setAutoRefresh(self, autoRefresh):
+        self.autoRefresh = autoRefresh
+
+        if self.settings is not None:
+            if self.autoRefresh:
+                self.maybeRefresh()
+                self.refreshTimer.start()
+            else:
+                self.refreshTimer.stop()
+
+    def setFallbacksEnabled(self, enabled):
+        if self.settings is not None:
+            self.settings.setFallbacksEnabled(enabled)
+            self.refresh()
+
+    def maybeRefresh(self):
+        if self.state() != QAbstractItemView.EditingState:
+            self.refresh()
+
+    def refresh(self):
+        if self.settings is None:
+            return
+
+        # The signal might not be connected.
+        try:
+            self.itemChanged.disconnect(self.updateSetting)
+        except:
+            pass
+
+        self.settings.sync()
+        self.updateChildItems(None)
+
+        self.itemChanged.connect(self.updateSetting)
+
+    def event(self, event):
+        if event.type() == QEvent.WindowActivate:
+            if self.isActiveWindow() and self.autoRefresh:
+                self.maybeRefresh()
+
+        return super(SettingsTree, self).event(event)
+
+    def updateSetting(self, item):
+        key = item.text(0)
+        ancestor = item.parent()
+
+        while ancestor:
+            key = ancestor.text(0) + '/' + key
+            ancestor = ancestor.parent()
+
+        d = item.data(2, Qt.UserRole)
+        self.settings.setValue(key, item.data(2, Qt.UserRole))
+
+        if self.autoRefresh:
+            self.refresh()
+
+    def updateChildItems(self, parent):
+        dividerIndex = 0
+
+        for group in self.settings.childGroups():
+            childIndex = self.findChild(parent, group, dividerIndex)
+            if childIndex != -1:
+                child = self.childAt(parent, childIndex)
+                child.setText(1, '')
+                child.setText(2, '')
+                child.setData(2, Qt.UserRole, None)
+                self.moveItemForward(parent, childIndex, dividerIndex)
+            else:
+                child = self.createItem(group, parent, dividerIndex)
+
+            child.setIcon(0, self.groupIcon)
+            dividerIndex += 1
+
+            self.settings.beginGroup(group)
+            self.updateChildItems(child)
+            self.settings.endGroup()
+
+        for key in self.settings.childKeys():
+            childIndex = self.findChild(parent, key, 0)
+            if childIndex == -1 or childIndex >= dividerIndex:
+                if childIndex != -1:
+                    child = self.childAt(parent, childIndex)
+                    for i in range(child.childCount()):
+                        self.deleteItem(child, i)
+                    self.moveItemForward(parent, childIndex, dividerIndex)
+                else:
+                    child = self.createItem(key, parent, dividerIndex)
+                child.setIcon(0, self.keyIcon)
+                dividerIndex += 1
+            else:
+                child = self.childAt(parent, childIndex)
+
+            value = self.settings.value(key)
+            if value is None:
+                child.setText(1, 'Invalid')
+            else:
+                child.setText(1, value.__class__.__name__)
+            child.setText(2, VariantDelegate.displayText(value))
+            child.setData(2, Qt.UserRole, value)
+
+        while dividerIndex < self.childCount(parent):
+            self.deleteItem(parent, dividerIndex)
+
+    def createItem(self, text, parent, index):
+        after = None
+
+        if index != 0:
+            after = self.childAt(parent, index - 1)
+
+        if parent is not None:
+            item = QTreeWidgetItem(parent, after)
+        else:
+            item = QTreeWidgetItem(self, after)
+
+        item.setText(0, text)
+        item.setFlags(item.flags() | Qt.ItemIsEditable)
+        return item
+
+    def deleteItem(self, parent, index):
+        if parent is not None:
+            item = parent.takeChild(index)
+        else:
+            item = self.takeTopLevelItem(index)
+        del item
+
+    def childAt(self, parent, index):
+        if parent is not None:
+            return parent.child(index)
+        else:
+            return self.topLevelItem(index)
+
+    def childCount(self, parent):
+        if parent is not None:
+            return parent.childCount()
+        else:
+            return self.topLevelItemCount()
+
+    def findChild(self, parent, text, startIndex):
+        for i in range(self.childCount(parent)):
+            if self.childAt(parent, i).text(0) == text:
+                return i
+        return -1
+
+    def moveItemForward(self, parent, oldIndex, newIndex):
+        for int in range(oldIndex - newIndex):
+            self.deleteItem(parent, newIndex)
+
+
+class VariantDelegate(QItemDelegate):
+    def __init__(self, parent=None):
+        super(VariantDelegate, self).__init__(parent)
+
+        self.boolExp = QRegExp()
+        self.boolExp.setPattern('true|false')
+        self.boolExp.setCaseSensitivity(Qt.CaseInsensitive)
+
+        self.byteArrayExp = QRegExp()
+        self.byteArrayExp.setPattern('[\\x00-\\xff]*')
+
+        self.charExp = QRegExp()
+        self.charExp.setPattern('.')
+
+        self.colorExp = QRegExp()
+        self.colorExp.setPattern('\\(([0-9]*),([0-9]*),([0-9]*),([0-9]*)\\)')
+
+        self.doubleExp = QRegExp()
+        self.doubleExp.setPattern('')
+
+        self.pointExp = QRegExp()
+        self.pointExp.setPattern('\\((-?[0-9]*),(-?[0-9]*)\\)')
+
+        self.rectExp = QRegExp()
+        self.rectExp.setPattern('\\((-?[0-9]*),(-?[0-9]*),(-?[0-9]*),(-?[0-9]*)\\)')
+
+        self.signedIntegerExp = QRegExp()
+        self.signedIntegerExp.setPattern('-?[0-9]*')
+
+        self.sizeExp = QRegExp(self.pointExp)
+
+        self.unsignedIntegerExp = QRegExp()
+        self.unsignedIntegerExp.setPattern('[0-9]*')
+
+        self.dateExp = QRegExp()
+        self.dateExp.setPattern('([0-9]{,4})-([0-9]{,2})-([0-9]{,2})')
+
+        self.timeExp = QRegExp()
+        self.timeExp.setPattern('([0-9]{,2}):([0-9]{,2}):([0-9]{,2})')
+
+        self.dateTimeExp = QRegExp()
+        self.dateTimeExp.setPattern(self.dateExp.pattern() + 'T' + self.timeExp.pattern())
+
+    def paint(self, painter, option, index):
+        if index.column() == 2:
+            value = index.model().data(index, Qt.UserRole)
+            if not self.isSupportedType(value):
+                myOption = QStyleOptionViewItem(option)
+                myOption.state &= ~QStyle.State_Enabled
+                super(VariantDelegate, self).paint(painter, myOption, index)
+                return
+
+        super(VariantDelegate, self).paint(painter, option, index)
+
+    def createEditor(self, parent, option, index):
+        if index.column() != 2:
+            return None
+
+        originalValue = index.model().data(index, Qt.UserRole)
+        if not self.isSupportedType(originalValue):
+            return None
+
+        lineEdit = QLineEdit(parent)
+        lineEdit.setFrame(False)
+
+        if isinstance(originalValue, bool):
+            regExp = self.boolExp
+        elif isinstance(originalValue, float):
+            regExp = self.doubleExp
+        elif isinstance(originalValue, int):
+            regExp = self.signedIntegerExp
+        elif isinstance(originalValue, QByteArray):
+            regExp = self.byteArrayExp
+        elif isinstance(originalValue, QColor):
+            regExp = self.colorExp
+        elif isinstance(originalValue, QDate):
+            regExp = self.dateExp
+        elif isinstance(originalValue, QDateTime):
+            regExp = self.dateTimeExp
+        elif isinstance(originalValue, QTime):
+            regExp = self.timeExp
+        elif isinstance(originalValue, QPoint):
+            regExp = self.pointExp
+        elif isinstance(originalValue, QRect):
+            regExp = self.rectExp
+        elif isinstance(originalValue, QSize):
+            regExp = self.sizeExp
+        else:
+            regExp = QRegExp()
+
+        if not regExp.isEmpty():
+            validator = QRegExpValidator(regExp, lineEdit)
+            lineEdit.setValidator(validator)
+
+        return lineEdit
+
+    def setEditorData(self, editor, index):
+        value = index.model().data(index, Qt.UserRole)
+        if editor is not None:
+            editor.setText(self.displayText(value))
+
+    def setModelData(self, editor, model, index):
+        if not editor.isModified():
+            return
+
+        text = editor.text()
+        validator = editor.validator()
+        if validator is not None:
+            state, text, _ = validator.validate(text, 0)
+            if state != QValidator.Acceptable:
+                return
+
+        originalValue = index.model().data(index, Qt.UserRole)
+
+        if isinstance(originalValue, QColor):
+            self.colorExp.exactMatch(text)
+            value = QColor(min(int(self.colorExp.cap(1)), 255),
+                           min(int(self.colorExp.cap(2)), 255),
+                           min(int(self.colorExp.cap(3)), 255),
+                           min(int(self.colorExp.cap(4)), 255))
+        elif isinstance(originalValue, QDate):
+            value = QDate.fromString(text, Qt.ISODate)
+            if not value.isValid():
+                return
+        elif isinstance(originalValue, QDateTime):
+            value = QDateTime.fromString(text, Qt.ISODate)
+            if not value.isValid():
+                return
+        elif isinstance(originalValue, QTime):
+            value = QTime.fromString(text, Qt.ISODate)
+            if not value.isValid():
+                return
+        elif isinstance(originalValue, QPoint):
+            self.pointExp.exactMatch(text)
+            value = QPoint(int(self.pointExp.cap(1)),
+                           int(self.pointExp.cap(2)))
+        elif isinstance(originalValue, QRect):
+            self.rectExp.exactMatch(text)
+            value = QRect(int(self.rectExp.cap(1)),
+                          int(self.rectExp.cap(2)),
+                          int(self.rectExp.cap(3)),
+                          int(self.rectExp.cap(4)))
+        elif isinstance(originalValue, QSize):
+            self.sizeExp.exactMatch(text)
+            value = QSize(int(self.sizeExp.cap(1)),
+                          int(self.sizeExp.cap(2)))
+        elif isinstance(originalValue, list):
+            value = text.split(',')
+        else:
+            value = type(originalValue)(text)
+
+        model.setData(index, self.displayText(value), Qt.DisplayRole)
+        model.setData(index, value, Qt.UserRole)
+
+    @staticmethod
+    def isSupportedType(value):
+        return isinstance(value, (bool, float, int, QByteArray, str, QColor,
+                QDate, QDateTime, QTime, QPoint, QRect, QSize, list))
+
+    @staticmethod
+    def displayText(value):
+        if isinstance(value, (bool, int, QByteArray)):
+            return str(value)
+        if isinstance(value, str):
+            return value
+        elif isinstance(value, float):
+            return '%g' % value
+        elif isinstance(value, QColor):
+            return '(%u,%u,%u,%u)' % (value.red(), value.green(), value.blue(), value.alpha())
+        elif isinstance(value, (QDate, QDateTime, QTime)):
+            return value.toString(Qt.ISODate)
+        elif isinstance(value, QPoint):
+            return '(%d,%d)' % (value.x(), value.y())
+        elif isinstance(value, QRect):
+            return '(%d,%d,%d,%d)' % (value.x(), value.y(), value.width(), value.height())
+        elif isinstance(value, QSize):
+            return '(%d,%d)' % (value.width(), value.height())
+        elif isinstance(value, list):
+            return ','.join(value)
+        elif value is None:
+            return '<Invalid>'
+
+        return '<%s>' % value
+
+
+if __name__ == '__main__':
+    app = QApplication(sys.argv)
+    mainWin = MainWindow()
+    mainWin.show()
+    sys.exit(app.exec_())
diff --git a/examples/tutorials/addressbook/README b/examples/tutorials/addressbook/README
new file mode 100644
index 0000000..8fb3536
--- /dev/null
+++ b/examples/tutorials/addressbook/README
@@ -0,0 +1,21 @@
+The Address Book Tutorial shows how to put together a simple yet
+fully-functioning GUI application.  The tutorial chapters can be found in the
+Qt documentation, which can be viewed using Qt Assistant or a Web browser.
+
+The tutorial is also available online at
+
+http://doc.trolltech.com/tutorial.html
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/tutorials/addressbook/part1.py b/examples/tutorials/addressbook/part1.py
new file mode 100755
index 0000000..ec5fc98
--- /dev/null
+++ b/examples/tutorials/addressbook/part1.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QGridLayout, QLabel, QLineEdit, QTextEdit, QWidget
+
+
+class AddressBook(QWidget):
+    def __init__(self, parent=None):
+        super(AddressBook, self).__init__(parent)
+
+        nameLabel = QLabel("Name:")
+        self.nameLine = QLineEdit()
+
+        addressLabel = QLabel("Address:")
+        self.addressText = QTextEdit()
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(nameLabel, 0, 0)
+        mainLayout.addWidget(self.nameLine, 0, 1)
+        mainLayout.addWidget(addressLabel, 1, 0, Qt.AlignTop)
+        mainLayout.addWidget(self.addressText, 1, 1)
+
+        self.setLayout(mainLayout)
+        self.setWindowTitle("Simple Address Book")
+
+
+if __name__ == '__main__':
+    import sys
+
+    from PyQt5.QtWidgets import QApplication
+
+    app = QApplication(sys.argv)
+
+    addressBook = AddressBook()
+    addressBook.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/tutorials/addressbook/part2.py b/examples/tutorials/addressbook/part2.py
new file mode 100755
index 0000000..9bcfb60
--- /dev/null
+++ b/examples/tutorials/addressbook/part2.py
@@ -0,0 +1,186 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QGridLayout, QLabel, QLineEdit, QMessageBox, QPushButton, QTextEdit, QVBoxLayout, QWidget
+
+
+class SortedDict(dict):
+    class Iterator(object):
+        def __init__(self, sorted_dict):
+            self._dict = sorted_dict
+            self._keys = sorted(self._dict.keys())
+            self._nr_items = len(self._keys)
+            self._idx = 0
+
+        def __iter__(self):
+            return self
+
+        def next(self):
+            if self._idx >= self._nr_items:
+                raise StopIteration
+
+            key = self._keys[self._idx]
+            value = self._dict[key]
+            self._idx += 1
+
+            return key, value
+
+        __next__ = next
+
+    def __iter__(self):
+        return SortedDict.Iterator(self)
+
+    iterkeys = __iter__
+
+
+class AddressBook(QWidget):
+    def __init__(self, parent=None):
+        super(AddressBook, self).__init__(parent)
+
+        self.contacts = SortedDict()
+        self.oldName = ''
+        self.oldAddress = ''
+
+        nameLabel = QLabel("Name:")
+        self.nameLine = QLineEdit()
+        self.nameLine.setReadOnly(True)
+
+        addressLabel = QLabel("Address:")
+        self.addressText = QTextEdit()
+        self.addressText.setReadOnly(True)
+
+        self.addButton = QPushButton("&Add")
+        self.addButton.show()
+        self.submitButton = QPushButton("&Submit")
+        self.submitButton.hide()
+        self.cancelButton = QPushButton("&Cancel")
+        self.cancelButton.hide()
+
+        self.addButton.clicked.connect(self.addContact)
+        self.submitButton.clicked.connect(self.submitContact)
+        self.cancelButton.clicked.connect(self.cancel)
+
+        buttonLayout1 = QVBoxLayout()
+        buttonLayout1.addWidget(self.addButton, Qt.AlignTop)
+        buttonLayout1.addWidget(self.submitButton)
+        buttonLayout1.addWidget(self.cancelButton)
+        buttonLayout1.addStretch()
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(nameLabel, 0, 0)
+        mainLayout.addWidget(self.nameLine, 0, 1)
+        mainLayout.addWidget(addressLabel, 1, 0, Qt.AlignTop)
+        mainLayout.addWidget(self.addressText, 1, 1)
+        mainLayout.addLayout(buttonLayout1, 1, 2)
+
+        self.setLayout(mainLayout)
+        self.setWindowTitle("Simple Address Book")
+
+    def addContact(self):
+        self.oldName = self.nameLine.text()
+        self.oldAddress = self.addressText.toPlainText()
+
+        self.nameLine.clear()
+        self.addressText.clear()
+
+        self.nameLine.setReadOnly(False)
+        self.nameLine.setFocus(Qt.OtherFocusReason)
+        self.addressText.setReadOnly(False)
+
+        self.addButton.setEnabled(False)
+        self.submitButton.show()
+        self.cancelButton.show()
+
+    def submitContact(self):
+        name = self.nameLine.text()
+        address = self.addressText.toPlainText()
+
+        if name == "" or address == "":
+            QMessageBox.information(self, "Empty Field",
+                    "Please enter a name and address.")
+            return
+
+        if name not in self.contacts:
+            self.contacts[name] = address
+            QMessageBox.information(self, "Add Successful",
+                    "\"%s\" has been added to your address book." % name)
+        else:
+            QMessageBox.information(self, "Add Unsuccessful",
+                    "Sorry, \"%s\" is already in your address book." % name)
+            return
+
+        if not self.contacts:
+            self.nameLine.clear()
+            self.addressText.clear()
+
+        self.nameLine.setReadOnly(True)
+        self.addressText.setReadOnly(True)
+        self.addButton.setEnabled(True)
+        self.submitButton.hide()
+        self.cancelButton.hide()
+
+    def cancel(self):
+        self.nameLine.setText(self.oldName)
+        self.nameLine.setReadOnly(True)
+
+        self.addressText.setText(self.oldAddress)
+        self.addressText.setReadOnly(True)
+
+        self.addButton.setEnabled(True)
+        self.submitButton.hide()
+        self.cancelButton.hide()
+
+
+if __name__ == '__main__':
+    import sys
+
+    from PyQt5.QtWidgets import QApplication
+
+    app = QApplication(sys.argv)
+
+    addressBook = AddressBook()
+    addressBook.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/tutorials/addressbook/part3.py b/examples/tutorials/addressbook/part3.py
new file mode 100755
index 0000000..be07d37
--- /dev/null
+++ b/examples/tutorials/addressbook/part3.py
@@ -0,0 +1,252 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import (QGridLayout, QHBoxLayout, QLabel, QLineEdit,
+        QMessageBox, QPushButton, QTextEdit, QVBoxLayout, QWidget)
+
+
+class SortedDict(dict):
+    class Iterator(object):
+        def __init__(self, sorted_dict):
+            self._dict = sorted_dict
+            self._keys = sorted(self._dict.keys())
+            self._nr_items = len(self._keys)
+            self._idx = 0
+
+        def __iter__(self):
+            return self
+
+        def next(self):
+            if self._idx >= self._nr_items:
+                raise StopIteration
+
+            key = self._keys[self._idx]
+            value = self._dict[key]
+            self._idx += 1
+
+            return key, value
+
+        __next__ = next
+
+    def __iter__(self):
+        return SortedDict.Iterator(self)
+
+    iterkeys = __iter__
+
+
+class AddressBook(QWidget):
+    def __init__(self, parent=None):
+        super(AddressBook, self).__init__(parent)
+
+        self.contacts = SortedDict()
+        self.oldName = ''
+        self.oldAddress = ''
+
+        nameLabel = QLabel("Name:")
+        self.nameLine = QLineEdit()
+        self.nameLine.setReadOnly(True)
+
+        addressLabel = QLabel("Address:")
+        self.addressText = QTextEdit()
+        self.addressText.setReadOnly(True)
+
+        self.addButton = QPushButton("&Add")
+        self.addButton.show()
+        self.submitButton = QPushButton("&Submit")
+        self.submitButton.hide()
+        self.cancelButton = QPushButton("&Cancel")
+        self.cancelButton.hide()
+        self.nextButton = QPushButton("&Next")
+        self.nextButton.setEnabled(False)
+        self.previousButton = QPushButton("&Previous")
+        self.previousButton.setEnabled(False)
+
+        self.addButton.clicked.connect(self.addContact)
+        self.submitButton.clicked.connect(self.submitContact)
+        self.cancelButton.clicked.connect(self.cancel)
+        self.nextButton.clicked.connect(self.next)
+        self.previousButton.clicked.connect(self.previous)
+
+        buttonLayout1 = QVBoxLayout()
+        buttonLayout1.addWidget(self.addButton, Qt.AlignTop)
+        buttonLayout1.addWidget(self.submitButton)
+        buttonLayout1.addWidget(self.cancelButton)
+        buttonLayout1.addStretch()
+
+        buttonLayout2 = QHBoxLayout()
+        buttonLayout2.addWidget(self.previousButton)
+        buttonLayout2.addWidget(self.nextButton)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(nameLabel, 0, 0)
+        mainLayout.addWidget(self.nameLine, 0, 1)
+        mainLayout.addWidget(addressLabel, 1, 0, Qt.AlignTop)
+        mainLayout.addWidget(self.addressText, 1, 1)
+        mainLayout.addLayout(buttonLayout1, 1, 2)
+        mainLayout.addLayout(buttonLayout2, 3, 1)
+
+        self.setLayout(mainLayout)
+        self.setWindowTitle("Simple Address Book")
+
+    def addContact(self):
+        self.oldName = self.nameLine.text()
+        self.oldAddress = self.addressText.toPlainText()
+
+        self.nameLine.clear()
+        self.addressText.clear()
+
+        self.nameLine.setReadOnly(False)
+        self.nameLine.setFocus(Qt.OtherFocusReason)
+        self.addressText.setReadOnly(False)
+
+        self.addButton.setEnabled(False)
+        self.nextButton.setEnabled(False)
+        self.previousButton.setEnabled(False)
+        self.submitButton.show()
+        self.cancelButton.show()
+
+    def submitContact(self):
+        name = self.nameLine.text()
+        address = self.addressText.toPlainText()
+
+        if name == "" or address == "":
+            QMessageBox.information(self, "Empty Field",
+                    "Please enter a name and address.")
+            return
+
+        if name not in self.contacts:
+            self.contacts[name] = address
+            QMessageBox.information(self, "Add Successful",
+                    "\"%s\" has been added to your address book." % name)
+        else:
+            QMessageBox.information(self, "Add Unsuccessful",
+                    "Sorry, \"%s\" is already in your address book." % name)
+            return
+
+        if not self.contacts:
+            self.nameLine.clear()
+            self.addressText.clear()
+
+        self.nameLine.setReadOnly(True)
+        self.addressText.setReadOnly(True)
+        self.addButton.setEnabled(True)
+
+        number = len(self.contacts)
+        self.nextButton.setEnabled(number > 1)
+        self.previousButton.setEnabled(number > 1)
+
+        self.submitButton.hide()
+        self.cancelButton.hide()
+
+    def cancel(self):
+        self.nameLine.setText(self.oldName)
+        self.addressText.setText(self.oldAddress)
+
+        if not self.contacts:
+            self.nameLine.clear()
+            self.addressText.clear()
+
+        self.nameLine.setReadOnly(True)
+        self.addressText.setReadOnly(True)
+        self.addButton.setEnabled(True)
+
+        number = len(self.contacts)
+        self.nextButton.setEnabled(number > 1)
+        self.previousButton.setEnabled(number > 1)
+
+        self.submitButton.hide()
+        self.cancelButton.hide()
+
+    def next(self):
+        name = self.nameLine.text()
+        it = iter(self.contacts)
+
+        try:
+            while True:
+                this_name, _ = it.next()
+
+                if this_name == name:
+                    next_name, next_address = it.next()
+                    break
+        except StopIteration:
+            next_name, next_address = iter(self.contacts).next()
+
+        self.nameLine.setText(next_name)
+        self.addressText.setText(next_address)
+
+    def previous(self):
+        name = self.nameLine.text()
+
+        prev_name = prev_address = None
+        for this_name, this_address in self.contacts:
+            if this_name == name:
+                break
+
+            prev_name = this_name
+            prev_address = this_address
+        else:
+            self.nameLine.clear()
+            self.addressText.clear()
+            return
+
+        if prev_name is None:
+            for prev_name, prev_address in self.contacts:
+                pass
+
+        self.nameLine.setText(prev_name)
+        self.addressText.setText(prev_address)
+
+
+if __name__ == '__main__':
+    import sys
+
+    from PyQt5.QtWidgets import QApplication
+
+    app = QApplication(sys.argv)
+
+    addressBook = AddressBook()
+    addressBook.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/tutorials/addressbook/part4.py b/examples/tutorials/addressbook/part4.py
new file mode 100755
index 0000000..93aedca
--- /dev/null
+++ b/examples/tutorials/addressbook/part4.py
@@ -0,0 +1,306 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import (QGridLayout, QHBoxLayout, QLabel, QLineEdit,
+        QMessageBox, QPushButton, QTextEdit, QVBoxLayout, QWidget)
+
+
+class SortedDict(dict):
+    class Iterator(object):
+        def __init__(self, sorted_dict):
+            self._dict = sorted_dict
+            self._keys = sorted(self._dict.keys())
+            self._nr_items = len(self._keys)
+            self._idx = 0
+
+        def __iter__(self):
+            return self
+
+        def next(self):
+            if self._idx >= self._nr_items:
+                raise StopIteration
+
+            key = self._keys[self._idx]
+            value = self._dict[key]
+            self._idx += 1
+
+            return key, value
+
+        __next__ = next
+
+    def __iter__(self):
+        return SortedDict.Iterator(self)
+
+    iterkeys = __iter__
+
+
+class AddressBook(QWidget):
+    NavigationMode, AddingMode, EditingMode = range(3)
+
+    def __init__(self, parent=None):
+        super(AddressBook, self).__init__(parent)
+
+        self.contacts = SortedDict()
+        self.oldName = ''
+        self.oldAddress = ''
+        self.currentMode = self.NavigationMode
+
+        nameLabel = QLabel("Name:")
+        self.nameLine = QLineEdit()
+        self.nameLine.setReadOnly(True)
+
+        addressLabel = QLabel("Address:")
+        self.addressText = QTextEdit()
+        self.addressText.setReadOnly(True)
+
+        self.addButton = QPushButton("&Add")
+        self.addButton.show()
+        self.editButton = QPushButton("&Edit")
+        self.editButton.setEnabled(False)
+        self.removeButton = QPushButton("&Remove")
+        self.removeButton.setEnabled(False)
+        self.submitButton = QPushButton("&Submit")
+        self.submitButton.hide()
+        self.cancelButton = QPushButton("&Cancel")
+        self.cancelButton.hide()
+
+        self.nextButton = QPushButton("&Next")
+        self.nextButton.setEnabled(False)
+        self.previousButton = QPushButton("&Previous")
+        self.previousButton.setEnabled(False)
+
+        self.addButton.clicked.connect(self.addContact)
+        self.submitButton.clicked.connect(self.submitContact)
+        self.editButton.clicked.connect(self.editContact)
+        self.removeButton.clicked.connect(self.removeContact)
+        self.cancelButton.clicked.connect(self.cancel)
+        self.nextButton.clicked.connect(self.next)
+        self.previousButton.clicked.connect(self.previous)
+
+        buttonLayout1 = QVBoxLayout()
+        buttonLayout1.addWidget(self.addButton)
+        buttonLayout1.addWidget(self.editButton)
+        buttonLayout1.addWidget(self.removeButton)
+        buttonLayout1.addWidget(self.submitButton)
+        buttonLayout1.addWidget(self.cancelButton)
+        buttonLayout1.addStretch()
+
+        buttonLayout2 = QHBoxLayout()
+        buttonLayout2.addWidget(self.previousButton)
+        buttonLayout2.addWidget(self.nextButton)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(nameLabel, 0, 0)
+        mainLayout.addWidget(self.nameLine, 0, 1)
+        mainLayout.addWidget(addressLabel, 1, 0, Qt.AlignTop)
+        mainLayout.addWidget(self.addressText, 1, 1)
+        mainLayout.addLayout(buttonLayout1, 1, 2)
+        mainLayout.addLayout(buttonLayout2, 3, 1)
+
+        self.setLayout(mainLayout)
+        self.setWindowTitle("Simple Address Book")
+
+    def addContact(self):
+        self.oldName = self.nameLine.text()
+        self.oldAddress = self.addressText.toPlainText()
+
+        self.nameLine.clear()
+        self.addressText.clear()
+
+        self.updateInterface(self.AddingMode)
+
+    def editContact(self):
+        self.oldName = self.nameLine.text()
+        self.oldAddress = self.addressText.toPlainText()
+
+        self.updateInterface(self.EditingMode)
+
+    def submitContact(self):
+        name = self.nameLine.text()
+        address = self.addressText.toPlainText()
+
+        if name == "" or address == "":
+            QMessageBox.information(self, "Empty Field",
+                    "Please enter a name and address.")
+            return
+
+        if self.currentMode == self.AddingMode:
+            if name not in self.contacts:
+                self.contacts[name] = address
+                QMessageBox.information(self, "Add Successful",
+                        "\"%s\" has been added to your address book." % name)
+            else:
+                QMessageBox.information(self, "Add Unsuccessful",
+                        "Sorry, \"%s\" is already in your address book." % name)
+                return
+
+        elif self.currentMode == self.EditingMode:
+            if self.oldName != name:
+                if name not in self.contacts:
+                    QMessageBox.information(self, "Edit Successful",
+                            "\"%s\" has been edited in your address book." % self.oldName)
+                    del self.contacts[self.oldName]
+                    self.contacts[name] = address
+                else:
+                    QMessageBox.information(self, "Edit Unsuccessful",
+                            "Sorry, \"%s\" is already in your address book." % name)
+                    return
+            elif self.oldAddress != address:
+                QMessageBox.information(self, "Edit Successful",
+                        "\"%s\" has been edited in your address book." % name)
+                self.contacts[name] = address
+
+        self.updateInterface(self.NavigationMode)
+
+    def cancel(self):
+        self.nameLine.setText(self.oldName)
+        self.addressText.setText(self.oldAddress)
+        self.updateInterface(self.NavigationMode)
+
+    def removeContact(self):
+        name = self.nameLine.text()
+        address = self.addressText.toPlainText()
+
+        if name in self.contacts:
+            button = QMessageBox.question(self, "Confirm Remove",
+                    "Are you sure you want to remove \"%s\"?" % name,
+                    QMessageBox.Yes | QMessageBox.No)
+
+            if button == QMessageBox.Yes:
+                self.previous()
+                del self.contacts[name]
+
+                QMessageBox.information(self, "Remove Successful",
+                        "\"%s\" has been removed from your address book." % name)
+
+        self.updateInterface(self.NavigationMode)
+
+    def next(self):
+        name = self.nameLine.text()
+        it = iter(self.contacts)
+
+        try:
+            while True:
+                this_name, _ = it.next()
+
+                if this_name == name:
+                    next_name, next_address = it.next()
+                    break
+        except StopIteration:
+            next_name, next_address = iter(self.contacts).next()
+
+        self.nameLine.setText(next_name)
+        self.addressText.setText(next_address)
+
+    def previous(self):
+        name = self.nameLine.text()
+
+        prev_name = prev_address = None
+        for this_name, this_address in self.contacts:
+            if this_name == name:
+                break
+
+            prev_name = this_name
+            prev_address = this_address
+        else:
+            self.nameLine.clear()
+            self.addressText.clear()
+            return
+
+        if prev_name is None:
+            for prev_name, prev_address in self.contacts:
+                pass
+
+        self.nameLine.setText(prev_name)
+        self.addressText.setText(prev_address)
+
+    def updateInterface(self, mode):
+        self.currentMode = mode
+
+        if self.currentMode in (self.AddingMode, self.EditingMode):
+            self.nameLine.setReadOnly(False)
+            self.nameLine.setFocus(Qt.OtherFocusReason)
+            self.addressText.setReadOnly(False)
+
+            self.addButton.setEnabled(False)
+            self.editButton.setEnabled(False)
+            self.removeButton.setEnabled(False)
+
+            self.nextButton.setEnabled(False)
+            self.previousButton.setEnabled(False)
+
+            self.submitButton.show()
+            self.cancelButton.show()
+
+        elif self.currentMode == self.NavigationMode:
+            if not self.contacts:
+                self.nameLine.clear()
+                self.addressText.clear()
+
+            self.nameLine.setReadOnly(True)
+            self.addressText.setReadOnly(True)
+            self.addButton.setEnabled(True)
+
+            number = len(self.contacts)
+            self.editButton.setEnabled(number >= 1)
+            self.removeButton.setEnabled(number >= 1)
+            self.nextButton.setEnabled(number > 1)
+            self.previousButton.setEnabled(number >1 )
+
+            self.submitButton.hide()
+            self.cancelButton.hide()
+
+
+if __name__ == '__main__':
+    import sys
+
+    from PyQt5.QtWidgets import QApplication
+
+    app = QApplication(sys.argv)
+
+    addressBook = AddressBook()
+    addressBook.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/tutorials/addressbook/part5.py b/examples/tutorials/addressbook/part5.py
new file mode 100755
index 0000000..29193b3
--- /dev/null
+++ b/examples/tutorials/addressbook/part5.py
@@ -0,0 +1,366 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import (QDialog, QGridLayout, QHBoxLayout, QLabel,
+        QLineEdit, QMessageBox, QPushButton, QTextEdit, QVBoxLayout, QWidget)
+
+
+class SortedDict(dict):
+    class Iterator(object):
+        def __init__(self, sorted_dict):
+            self._dict = sorted_dict
+            self._keys = sorted(self._dict.keys())
+            self._nr_items = len(self._keys)
+            self._idx = 0
+
+        def __iter__(self):
+            return self
+
+        def next(self):
+            if self._idx >= self._nr_items:
+                raise StopIteration
+
+            key = self._keys[self._idx]
+            value = self._dict[key]
+            self._idx += 1
+
+            return key, value
+
+        __next__ = next
+
+    def __iter__(self):
+        return SortedDict.Iterator(self)
+
+    iterkeys = __iter__
+
+
+class AddressBook(QWidget):
+    NavigationMode, AddingMode, EditingMode = range(3)
+
+    def __init__(self, parent=None):
+        super(AddressBook, self).__init__(parent)
+
+        self.contacts = SortedDict()
+        self.oldName = ''
+        self.oldAddress = ''
+        self.currentMode = self.NavigationMode
+
+        nameLabel = QLabel("Name:")
+        self.nameLine = QLineEdit()
+        self.nameLine.setReadOnly(True)
+
+        addressLabel = QLabel("Address:")
+        self.addressText = QTextEdit()
+        self.addressText.setReadOnly(True)
+
+        self.addButton = QPushButton("&Add")
+        self.addButton.show()
+        self.editButton = QPushButton("&Edit")
+        self.editButton.setEnabled(False)
+        self.removeButton = QPushButton("&Remove")
+        self.removeButton.setEnabled(False)
+        self.findButton = QPushButton("&Find")
+        self.findButton.setEnabled(False)
+        self.submitButton = QPushButton("&Submit")
+        self.submitButton.hide()
+        self.cancelButton = QPushButton("&Cancel")
+        self.cancelButton.hide()
+
+        self.nextButton = QPushButton("&Next")
+        self.nextButton.setEnabled(False)
+        self.previousButton = QPushButton("&Previous")
+        self.previousButton.setEnabled(False)
+
+        self.dialog = FindDialog()
+
+        self.addButton.clicked.connect(self.addContact)
+        self.submitButton.clicked.connect(self.submitContact)
+        self.editButton.clicked.connect(self.editContact)
+        self.removeButton.clicked.connect(self.removeContact)
+        self.findButton.clicked.connect(self.findContact)
+        self.cancelButton.clicked.connect(self.cancel)
+        self.nextButton.clicked.connect(self.next)
+        self.previousButton.clicked.connect(self.previous)
+
+        buttonLayout1 = QVBoxLayout()
+        buttonLayout1.addWidget(self.addButton)
+        buttonLayout1.addWidget(self.editButton)
+        buttonLayout1.addWidget(self.removeButton)
+        buttonLayout1.addWidget(self.findButton)
+        buttonLayout1.addWidget(self.submitButton)
+        buttonLayout1.addWidget(self.cancelButton)
+        buttonLayout1.addStretch()
+
+        buttonLayout2 = QHBoxLayout()
+        buttonLayout2.addWidget(self.previousButton)
+        buttonLayout2.addWidget(self.nextButton)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(nameLabel, 0, 0)
+        mainLayout.addWidget(self.nameLine, 0, 1)
+        mainLayout.addWidget(addressLabel, 1, 0, Qt.AlignTop)
+        mainLayout.addWidget(self.addressText, 1, 1)
+        mainLayout.addLayout(buttonLayout1, 1, 2)
+        mainLayout.addLayout(buttonLayout2, 2, 1)
+
+        self.setLayout(mainLayout)
+        self.setWindowTitle("Simple Address Book")
+
+    def addContact(self):
+        self.oldName = self.nameLine.text()
+        self.oldAddress = self.addressText.toPlainText()
+
+        self.nameLine.clear()
+        self.addressText.clear()
+
+        self.updateInterface(self.AddingMode)
+
+    def editContact(self):
+        self.oldName = self.nameLine.text()
+        self.oldAddress = self.addressText.toPlainText()
+
+        self.updateInterface(self.EditingMode)
+
+    def submitContact(self):
+        name = self.nameLine.text()
+        address = self.addressText.toPlainText()
+
+        if name == "" or address == "":
+            QMessageBox.information(self, "Empty Field",
+                    "Please enter a name and address.")
+            return
+
+        if self.currentMode == self.AddingMode:
+            if name not in self.contacts:
+                self.contacts[name] = address
+                QMessageBox.information(self, "Add Successful",
+                        "\"%s\" has been added to your address book." % name)
+            else:
+                QMessageBox.information(self, "Add Unsuccessful",
+                        "Sorry, \"%s\" is already in your address book." % name)
+                return
+
+        elif self.currentMode == self.EditingMode:
+            if self.oldName != name:
+                if name not in self.contacts:
+                    QMessageBox.information(self, "Edit Successful",
+                            "\"%s\" has been edited in your address book." % self.oldName)
+                    del self.contacts[self.oldName]
+                    self.contacts[name] = address
+                else:
+                    QMessageBox.information(self, "Edit Unsuccessful",
+                            "Sorry, \"%s\" is already in your address book." % name)
+                    return
+            elif self.oldAddress != address:
+                QMessageBox.information(self, "Edit Successful",
+                        "\"%s\" has been edited in your address book." % name)
+                self.contacts[name] = address
+
+        self.updateInterface(self.NavigationMode)
+
+    def cancel(self):
+        self.nameLine.setText(self.oldName)
+        self.addressText.setText(self.oldAddress)
+        self.updateInterface(self.NavigationMode)
+
+    def removeContact(self):
+        name = self.nameLine.text()
+        address = self.addressText.toPlainText()
+
+        if name in self.contacts:
+            button = QMessageBox.question(self, "Confirm Remove",
+                    "Are you sure you want to remove \"%s\"?" % name,
+                    QMessageBox.Yes | QMessageBox.No)
+
+            if button == QMessageBox.Yes:
+                self.previous()
+                del self.contacts[name]
+
+                QMessageBox.information(self, "Remove Successful",
+                        "\"%s\" has been removed from your address book." % name)
+
+        self.updateInterface(self.NavigationMode)
+
+    def next(self):
+        name = self.nameLine.text()
+        it = iter(self.contacts)
+
+        try:
+            while True:
+                this_name, _ = it.next()
+
+                if this_name == name:
+                    next_name, next_address = it.next()
+                    break
+        except StopIteration:
+            next_name, next_address = iter(self.contacts).next()
+
+        self.nameLine.setText(next_name)
+        self.addressText.setText(next_address)
+
+    def previous(self):
+        name = self.nameLine.text()
+
+        prev_name = prev_address = None
+        for this_name, this_address in self.contacts:
+            if this_name == name:
+                break
+
+            prev_name = this_name
+            prev_address = this_address
+        else:
+            self.nameLine.clear()
+            self.addressText.clear()
+            return
+
+        if prev_name is None:
+            for prev_name, prev_address in self.contacts:
+                pass
+
+        self.nameLine.setText(prev_name)
+        self.addressText.setText(prev_address)
+
+    def findContact(self):
+        self.dialog.show()
+
+        if self.dialog.exec_() == QDialog.Accepted:
+            contactName = self.dialog.getFindText()
+
+            if contactName in self.contacts:
+                self.nameLine.setText(contactName)
+                self.addressText.setText(self.contacts[contactName])
+            else:
+                QMessageBox.information(self, "Contact Not Found",
+                        "Sorry, \"%s\" is not in your address book." % contactName)
+                return
+
+        self.updateInterface(self.NavigationMode)
+
+    def updateInterface(self, mode):
+        self.currentMode = mode
+
+        if self.currentMode in (self.AddingMode, self.EditingMode):
+            self.nameLine.setReadOnly(False)
+            self.nameLine.setFocus(Qt.OtherFocusReason)
+            self.addressText.setReadOnly(False)
+
+            self.addButton.setEnabled(False)
+            self.editButton.setEnabled(False)
+            self.removeButton.setEnabled(False)
+
+            self.nextButton.setEnabled(False)
+            self.previousButton.setEnabled(False)
+
+            self.submitButton.show()
+            self.cancelButton.show()
+
+        elif self.currentMode == self.NavigationMode:
+            if not self.contacts:
+                self.nameLine.clear()
+                self.addressText.clear()
+
+            self.nameLine.setReadOnly(True)
+            self.addressText.setReadOnly(True)
+            self.addButton.setEnabled(True)
+
+            number = len(self.contacts)
+            self.editButton.setEnabled(number >= 1)
+            self.removeButton.setEnabled(number >= 1)
+            self.findButton.setEnabled(number > 2)
+            self.nextButton.setEnabled(number > 1)
+            self.previousButton.setEnabled(number >1 )
+
+            self.submitButton.hide()
+            self.cancelButton.hide()
+
+
+class FindDialog(QDialog):
+    def __init__(self, parent=None):
+        super(FindDialog, self).__init__(parent)
+
+        findLabel = QLabel("Enter the name of a contact:")
+        self.lineEdit = QLineEdit()
+
+        self.findButton = QPushButton("&Find")
+        self.findText = ''
+
+        layout = QHBoxLayout()
+        layout.addWidget(findLabel)
+        layout.addWidget(self.lineEdit)
+        layout.addWidget(self.findButton)
+
+        self.setLayout(layout)
+        self.setWindowTitle("Find a Contact")
+
+        self.findButton.clicked.connect(self.findClicked)
+        self.findButton.clicked.connect(self.accept)
+
+    def findClicked(self):
+        text = self.lineEdit.text()
+
+        if not text:
+            QMessageBox.information(self, "Empty Field",
+                    "Please enter a name.")
+            return
+        else:
+            self.findText = text
+            self.lineEdit.clear()
+            self.hide()
+
+    def getFindText(self):
+        return self.findText
+
+
+if __name__ == '__main__':
+    import sys
+
+    from PyQt5.QtWidgets import QApplication
+
+    app = QApplication(sys.argv)
+
+    addressBook = AddressBook()
+    addressBook.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/tutorials/addressbook/part6.py b/examples/tutorials/addressbook/part6.py
new file mode 100755
index 0000000..caedaea
--- /dev/null
+++ b/examples/tutorials/addressbook/part6.py
@@ -0,0 +1,430 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import pickle
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import (QDialog, QFileDialog, QGridLayout, QHBoxLayout,
+        QLabel, QLineEdit, QMessageBox, QPushButton, QTextEdit, QVBoxLayout,
+        QWidget)
+
+
+class SortedDict(dict):
+    class Iterator(object):
+        def __init__(self, sorted_dict):
+            self._dict = sorted_dict
+            self._keys = sorted(self._dict.keys())
+            self._nr_items = len(self._keys)
+            self._idx = 0
+
+        def __iter__(self):
+            return self
+
+        def next(self):
+            if self._idx >= self._nr_items:
+                raise StopIteration
+
+            key = self._keys[self._idx]
+            value = self._dict[key]
+            self._idx += 1
+
+            return key, value
+
+        __next__ = next
+
+    def __iter__(self):
+        return SortedDict.Iterator(self)
+
+    iterkeys = __iter__
+
+
+class AddressBook(QWidget):
+    NavigationMode, AddingMode, EditingMode = range(3)
+
+    def __init__(self, parent=None):
+        super(AddressBook, self).__init__(parent)
+
+        self.contacts = SortedDict()
+        self.oldName = ''
+        self.oldAddress = ''
+        self.currentMode = self.NavigationMode
+
+        nameLabel = QLabel("Name:")
+        self.nameLine = QLineEdit()
+        self.nameLine.setReadOnly(True)
+
+        addressLabel = QLabel("Address:")
+        self.addressText = QTextEdit()
+        self.addressText.setReadOnly(True)
+
+        self.addButton = QPushButton("&Add")
+        self.addButton.show()
+        self.editButton = QPushButton("&Edit")
+        self.editButton.setEnabled(False)
+        self.removeButton = QPushButton("&Remove")
+        self.removeButton.setEnabled(False)
+        self.findButton = QPushButton("&Find")
+        self.findButton.setEnabled(False)
+        self.submitButton = QPushButton("&Submit")
+        self.submitButton.hide()
+        self.cancelButton = QPushButton("&Cancel")
+        self.cancelButton.hide()
+
+        self.nextButton = QPushButton("&Next")
+        self.nextButton.setEnabled(False)
+        self.previousButton = QPushButton("&Previous")
+        self.previousButton.setEnabled(False)
+
+        self.loadButton = QPushButton("&Load...")
+        self.loadButton.setToolTip("Load contacts from a file")
+        self.saveButton = QPushButton("Sa&ve...")
+        self.saveButton.setToolTip("Save contacts to a file")
+        self.saveButton.setEnabled(False)
+
+        self.dialog = FindDialog()
+
+        self.addButton.clicked.connect(self.addContact)
+        self.submitButton.clicked.connect(self.submitContact)
+        self.editButton.clicked.connect(self.editContact)
+        self.removeButton.clicked.connect(self.removeContact)
+        self.findButton.clicked.connect(self.findContact)
+        self.cancelButton.clicked.connect(self.cancel)
+        self.nextButton.clicked.connect(self.next)
+        self.previousButton.clicked.connect(self.previous)
+        self.loadButton.clicked.connect(self.loadFromFile)
+        self.saveButton.clicked.connect(self.saveToFile)
+
+        buttonLayout1 = QVBoxLayout()
+        buttonLayout1.addWidget(self.addButton)
+        buttonLayout1.addWidget(self.editButton)
+        buttonLayout1.addWidget(self.removeButton)
+        buttonLayout1.addWidget(self.findButton)
+        buttonLayout1.addWidget(self.submitButton)
+        buttonLayout1.addWidget(self.cancelButton)
+        buttonLayout1.addWidget(self.loadButton)
+        buttonLayout1.addWidget(self.saveButton)
+        buttonLayout1.addStretch()
+
+        buttonLayout2 = QHBoxLayout()
+        buttonLayout2.addWidget(self.previousButton)
+        buttonLayout2.addWidget(self.nextButton)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(nameLabel, 0, 0)
+        mainLayout.addWidget(self.nameLine, 0, 1)
+        mainLayout.addWidget(addressLabel, 1, 0, Qt.AlignTop)
+        mainLayout.addWidget(self.addressText, 1, 1)
+        mainLayout.addLayout(buttonLayout1, 1, 2)
+        mainLayout.addLayout(buttonLayout2, 2, 1)
+
+        self.setLayout(mainLayout)
+        self.setWindowTitle("Simple Address Book")
+
+    def addContact(self):
+        self.oldName = self.nameLine.text()
+        self.oldAddress = self.addressText.toPlainText()
+
+        self.nameLine.clear()
+        self.addressText.clear()
+
+        self.updateInterface(self.AddingMode)
+
+    def editContact(self):
+        self.oldName = self.nameLine.text()
+        self.oldAddress = self.addressText.toPlainText()
+
+        self.updateInterface(self.EditingMode)
+
+    def submitContact(self):
+        name = self.nameLine.text()
+        address = self.addressText.toPlainText()
+
+        if name == "" or address == "":
+            QMessageBox.information(self, "Empty Field",
+                    "Please enter a name and address.")
+            return
+
+        if self.currentMode == self.AddingMode:
+            if name not in self.contacts:
+                self.contacts[name] = address
+                QMessageBox.information(self, "Add Successful",
+                        "\"%s\" has been added to your address book." % name)
+            else:
+                QMessageBox.information(self, "Add Unsuccessful",
+                        "Sorry, \"%s\" is already in your address book." % name)
+                return
+
+        elif self.currentMode == self.EditingMode:
+            if self.oldName != name:
+                if name not in self.contacts:
+                    QMessageBox.information(self, "Edit Successful",
+                            "\"%s\" has been edited in your address book." % self.oldName)
+                    del self.contacts[self.oldName]
+                    self.contacts[name] = address
+                else:
+                    QMessageBox.information(self, "Edit Unsuccessful",
+                            "Sorry, \"%s\" is already in your address book." % name)
+                    return
+            elif self.oldAddress != address:
+                QMessageBox.information(self, "Edit Successful",
+                        "\"%s\" has been edited in your address book." % name)
+                self.contacts[name] = address
+
+        self.updateInterface(self.NavigationMode)
+
+    def cancel(self):
+        self.nameLine.setText(self.oldName)
+        self.addressText.setText(self.oldAddress)
+        self.updateInterface(self.NavigationMode)
+
+    def removeContact(self):
+        name = self.nameLine.text()
+        address = self.addressText.toPlainText()
+
+        if name in self.contacts:
+            button = QMessageBox.question(self, "Confirm Remove",
+                    "Are you sure you want to remove \"%s\"?" % name,
+                    QMessageBox.Yes | QMessageBox.No)
+
+            if button == QMessageBox.Yes:
+                self.previous()
+                del self.contacts[name]
+
+                QMessageBox.information(self, "Remove Successful",
+                        "\"%s\" has been removed from your address book." % name)
+
+        self.updateInterface(self.NavigationMode)
+
+    def next(self):
+        name = self.nameLine.text()
+        it = iter(self.contacts)
+
+        try:
+            while True:
+                this_name, _ = it.next()
+
+                if this_name == name:
+                    next_name, next_address = it.next()
+                    break
+        except StopIteration:
+            next_name, next_address = iter(self.contacts).next()
+
+        self.nameLine.setText(next_name)
+        self.addressText.setText(next_address)
+
+    def previous(self):
+        name = self.nameLine.text()
+
+        prev_name = prev_address = None
+        for this_name, this_address in self.contacts:
+            if this_name == name:
+                break
+
+            prev_name = this_name
+            prev_address = this_address
+        else:
+            self.nameLine.clear()
+            self.addressText.clear()
+            return
+
+        if prev_name is None:
+            for prev_name, prev_address in self.contacts:
+                pass
+
+        self.nameLine.setText(prev_name)
+        self.addressText.setText(prev_address)
+
+    def findContact(self):
+        self.dialog.show()
+
+        if self.dialog.exec_() == QDialog.Accepted:
+            contactName = self.dialog.getFindText()
+
+            if contactName in self.contacts:
+                self.nameLine.setText(contactName)
+                self.addressText.setText(self.contacts[contactName])
+            else:
+                QMessageBox.information(self, "Contact Not Found",
+                        "Sorry, \"%s\" is not in your address book." % contactName)
+                return
+
+        self.updateInterface(self.NavigationMode)
+
+    def updateInterface(self, mode):
+        self.currentMode = mode
+
+        if self.currentMode in (self.AddingMode, self.EditingMode):
+            self.nameLine.setReadOnly(False)
+            self.nameLine.setFocus(Qt.OtherFocusReason)
+            self.addressText.setReadOnly(False)
+
+            self.addButton.setEnabled(False)
+            self.editButton.setEnabled(False)
+            self.removeButton.setEnabled(False)
+
+            self.nextButton.setEnabled(False)
+            self.previousButton.setEnabled(False)
+
+            self.submitButton.show()
+            self.cancelButton.show()
+
+            self.loadButton.setEnabled(False)
+            self.saveButton.setEnabled(False)
+
+        elif self.currentMode == self.NavigationMode:
+            if not self.contacts:
+                self.nameLine.clear()
+                self.addressText.clear()
+
+            self.nameLine.setReadOnly(True)
+            self.addressText.setReadOnly(True)
+            self.addButton.setEnabled(True)
+
+            number = len(self.contacts)
+            self.editButton.setEnabled(number >= 1)
+            self.removeButton.setEnabled(number >= 1)
+            self.findButton.setEnabled(number > 2)
+            self.nextButton.setEnabled(number > 1)
+            self.previousButton.setEnabled(number >1 )
+
+            self.submitButton.hide()
+            self.cancelButton.hide()
+
+            self.loadButton.setEnabled(True)
+            self.saveButton.setEnabled(number >= 1)
+
+    def saveToFile(self):
+        fileName, _ = QFileDialog.getSaveFileName(self, "Save Address Book",
+                '', "Address Book (*.abk);;All Files (*)")
+
+        if not fileName:
+            return
+
+        try:
+            out_file = open(str(fileName), 'wb')
+        except IOError:
+            QMessageBox.information(self, "Unable to open file",
+                    "There was an error opening \"%s\"" % fileName)
+            return
+
+        pickle.dump(self.contacts, out_file)
+        out_file.close()
+
+    def loadFromFile(self):
+        fileName, _ = QFileDialog.getOpenFileName(self, "Open Address Book",
+                '', "Address Book (*.abk);;All Files (*)")
+
+        if not fileName:
+            return
+
+        try:
+            in_file = open(str(fileName), 'rb')
+        except IOError:
+            QMessageBox.information(self, "Unable to open file",
+                    "There was an error opening \"%s\"" % fileName)
+            return
+
+        self.contacts = pickle.load(in_file)
+        in_file.close()
+
+        if len(self.contacts) == 0:
+            QMessageBox.information(self, "No contacts in file",
+                    "The file you are attempting to open contains no "
+                    "contacts.")
+        else:
+            for name, address in self.contacts:
+                self.nameLine.setText(name)
+                self.addressText.setText(address)
+
+        self.updateInterface(self.NavigationMode)
+
+
+class FindDialog(QDialog):
+    def __init__(self, parent=None):
+        super(FindDialog, self).__init__(parent)
+
+        findLabel = QLabel("Enter the name of a contact:")
+        self.lineEdit = QLineEdit()
+
+        self.findButton = QPushButton("&Find")
+        self.findText = ''
+
+        layout = QHBoxLayout()
+        layout.addWidget(findLabel)
+        layout.addWidget(self.lineEdit)
+        layout.addWidget(self.findButton)
+
+        self.setLayout(layout)
+        self.setWindowTitle("Find a Contact")
+
+        self.findButton.clicked.connect(self.findClicked)
+        self.findButton.clicked.connect(self.accept)
+
+    def findClicked(self):
+        text = self.lineEdit.text()
+
+        if not text:
+            QMessageBox.information(self, "Empty Field",
+                    "Please enter a name.")
+            return
+
+        self.findText = text
+        self.lineEdit.clear()
+        self.hide()
+
+    def getFindText(self):
+        return self.findText
+
+
+if __name__ == '__main__':
+    import sys
+
+    from PyQt5.QtWidgets import QApplication
+
+    app = QApplication(sys.argv)
+
+    addressBook = AddressBook()
+    addressBook.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/tutorials/addressbook/part7.py b/examples/tutorials/addressbook/part7.py
new file mode 100755
index 0000000..c303d71
--- /dev/null
+++ b/examples/tutorials/addressbook/part7.py
@@ -0,0 +1,482 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import pickle
+
+from PyQt5.QtCore import QFile, QIODevice, Qt, QTextStream
+from PyQt5.QtWidgets import (QDialog, QFileDialog, QGridLayout, QHBoxLayout,
+        QLabel, QLineEdit, QMessageBox, QPushButton, QTextEdit, QVBoxLayout,
+        QWidget)
+
+
+class SortedDict(dict):
+    class Iterator(object):
+        def __init__(self, sorted_dict):
+            self._dict = sorted_dict
+            self._keys = sorted(self._dict.keys())
+            self._nr_items = len(self._keys)
+            self._idx = 0
+
+        def __iter__(self):
+            return self
+
+        def next(self):
+            if self._idx >= self._nr_items:
+                raise StopIteration
+
+            key = self._keys[self._idx]
+            value = self._dict[key]
+            self._idx += 1
+
+            return key, value
+
+        __next__ = next
+
+    def __iter__(self):
+        return SortedDict.Iterator(self)
+
+    iterkeys = __iter__
+
+
+class AddressBook(QWidget):
+    NavigationMode, AddingMode, EditingMode = range(3)
+
+    def __init__(self, parent=None):
+        super(AddressBook, self).__init__(parent)
+
+        self.contacts = SortedDict()
+        self.oldName = ''
+        self.oldAddress = ''
+        self.currentMode = self.NavigationMode
+
+        nameLabel = QLabel("Name:")
+        self.nameLine = QLineEdit()
+        self.nameLine.setReadOnly(True)
+
+        addressLabel = QLabel("Address:")
+        self.addressText = QTextEdit()
+        self.addressText.setReadOnly(True)
+
+        self.addButton = QPushButton("&Add")
+        self.addButton.show()
+        self.editButton = QPushButton("&Edit")
+        self.editButton.setEnabled(False)
+        self.removeButton = QPushButton("&Remove")
+        self.removeButton.setEnabled(False)
+        self.findButton = QPushButton("&Find")
+        self.findButton.setEnabled(False)
+        self.submitButton = QPushButton("&Submit")
+        self.submitButton.hide()
+        self.cancelButton = QPushButton("&Cancel")
+        self.cancelButton.hide()
+
+        self.nextButton = QPushButton("&Next")
+        self.nextButton.setEnabled(False)
+        self.previousButton = QPushButton("&Previous")
+        self.previousButton.setEnabled(False)
+
+        self.loadButton = QPushButton("&Load...")
+        self.loadButton.setToolTip("Load contacts from a file")
+        self.saveButton = QPushButton("Sa&ve...")
+        self.saveButton.setToolTip("Save contacts to a file")
+        self.saveButton.setEnabled(False)
+
+        self.exportButton = QPushButton("Ex&port")
+        self.exportButton.setToolTip("Export as vCard")
+        self.exportButton.setEnabled(False)
+
+        self.dialog = FindDialog()
+
+        self.addButton.clicked.connect(self.addContact)
+        self.submitButton.clicked.connect(self.submitContact)
+        self.editButton.clicked.connect(self.editContact)
+        self.removeButton.clicked.connect(self.removeContact)
+        self.findButton.clicked.connect(self.findContact)
+        self.cancelButton.clicked.connect(self.cancel)
+        self.nextButton.clicked.connect(self.next)
+        self.previousButton.clicked.connect(self.previous)
+        self.loadButton.clicked.connect(self.loadFromFile)
+        self.saveButton.clicked.connect(self.saveToFile)
+        self.exportButton.clicked.connect(self.exportAsVCard)
+
+        buttonLayout1 = QVBoxLayout()
+        buttonLayout1.addWidget(self.addButton)
+        buttonLayout1.addWidget(self.editButton)
+        buttonLayout1.addWidget(self.removeButton)
+        buttonLayout1.addWidget(self.findButton)
+        buttonLayout1.addWidget(self.submitButton)
+        buttonLayout1.addWidget(self.cancelButton)
+        buttonLayout1.addWidget(self.loadButton)
+        buttonLayout1.addWidget(self.saveButton)
+        buttonLayout1.addWidget(self.exportButton)
+        buttonLayout1.addStretch()
+
+        buttonLayout2 = QHBoxLayout()
+        buttonLayout2.addWidget(self.previousButton)
+        buttonLayout2.addWidget(self.nextButton)
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(nameLabel, 0, 0)
+        mainLayout.addWidget(self.nameLine, 0, 1)
+        mainLayout.addWidget(addressLabel, 1, 0, Qt.AlignTop)
+        mainLayout.addWidget(self.addressText, 1, 1)
+        mainLayout.addLayout(buttonLayout1, 1, 2)
+        mainLayout.addLayout(buttonLayout2, 2, 1)
+
+        self.setLayout(mainLayout)
+        self.setWindowTitle("Simple Address Book")
+
+    def addContact(self):
+        self.oldName = self.nameLine.text()
+        self.oldAddress = self.addressText.toPlainText()
+
+        self.nameLine.clear()
+        self.addressText.clear()
+
+        self.updateInterface(self.AddingMode)
+
+    def editContact(self):
+        self.oldName = self.nameLine.text()
+        self.oldAddress = self.addressText.toPlainText()
+
+        self.updateInterface(self.EditingMode)
+
+    def submitContact(self):
+        name = self.nameLine.text()
+        address = self.addressText.toPlainText()
+
+        if name == "" or address == "":
+            QMessageBox.information(self, "Empty Field",
+                    "Please enter a name and address.")
+            return
+
+        if self.currentMode == self.AddingMode:
+            if name not in self.contacts:
+                self.contacts[name] = address
+                QMessageBox.information(self, "Add Successful",
+                        "\"%s\" has been added to your address book." % name)
+            else:
+                QMessageBox.information(self, "Add Unsuccessful",
+                        "Sorry, \"%s\" is already in your address book." % name)
+                return
+
+        elif self.currentMode == self.EditingMode:
+            if self.oldName != name:
+                if name not in self.contacts:
+                    QMessageBox.information(self, "Edit Successful",
+                            "\"%s\" has been edited in your address book." % self.oldName)
+                    del self.contacts[self.oldName]
+                    self.contacts[name] = address
+                else:
+                    QMessageBox.information(self, "Edit Unsuccessful",
+                            "Sorry, \"%s\" is already in your address book." % name)
+                    return
+            elif self.oldAddress != address:
+                QMessageBox.information(self, "Edit Successful",
+                        "\"%s\" has been edited in your address book." % name)
+                self.contacts[name] = address
+
+        self.updateInterface(self.NavigationMode)
+
+    def cancel(self):
+        self.nameLine.setText(self.oldName)
+        self.addressText.setText(self.oldAddress)
+        self.updateInterface(self.NavigationMode)
+
+    def removeContact(self):
+        name = self.nameLine.text()
+        address = self.addressText.toPlainText()
+
+        if name in self.contacts:
+            button = QMessageBox.question(self, "Confirm Remove",
+                    "Are you sure you want to remove \"%s\"?" % name,
+                    QMessageBox.Yes | QMessageBox.No)
+
+            if button == QMessageBox.Yes:
+                self.previous()
+                del self.contacts[name]
+
+                QMessageBox.information(self, "Remove Successful",
+                        "\"%s\" has been removed from your address book." % name)
+
+        self.updateInterface(self.NavigationMode)
+
+    def next(self):
+        name = self.nameLine.text()
+        it = iter(self.contacts)
+
+        try:
+            while True:
+                this_name, _ = it.next()
+
+                if this_name == name:
+                    next_name, next_address = it.next()
+                    break
+        except StopIteration:
+            next_name, next_address = iter(self.contacts).next()
+
+        self.nameLine.setText(next_name)
+        self.addressText.setText(next_address)
+
+    def previous(self):
+        name = self.nameLine.text()
+
+        prev_name = prev_address = None
+        for this_name, this_address in self.contacts:
+            if this_name == name:
+                break
+
+            prev_name = this_name
+            prev_address = this_address
+        else:
+            self.nameLine.clear()
+            self.addressText.clear()
+            return
+
+        if prev_name is None:
+            for prev_name, prev_address in self.contacts:
+                pass
+
+        self.nameLine.setText(prev_name)
+        self.addressText.setText(prev_address)
+
+    def findContact(self):
+        self.dialog.show()
+
+        if self.dialog.exec_() == QDialog.Accepted:
+            contactName = self.dialog.getFindText()
+
+            if contactName in self.contacts:
+                self.nameLine.setText(contactName)
+                self.addressText.setText(self.contacts[contactName])
+            else:
+                QMessageBox.information(self, "Contact Not Found",
+                        "Sorry, \"%s\" is not in your address book." % contactName)
+                return
+
+        self.updateInterface(self.NavigationMode)
+
+    def updateInterface(self, mode):
+        self.currentMode = mode
+
+        if self.currentMode in (self.AddingMode, self.EditingMode):
+            self.nameLine.setReadOnly(False)
+            self.nameLine.setFocus(Qt.OtherFocusReason)
+            self.addressText.setReadOnly(False)
+
+            self.addButton.setEnabled(False)
+            self.editButton.setEnabled(False)
+            self.removeButton.setEnabled(False)
+
+            self.nextButton.setEnabled(False)
+            self.previousButton.setEnabled(False)
+
+            self.submitButton.show()
+            self.cancelButton.show()
+
+            self.loadButton.setEnabled(False)
+            self.saveButton.setEnabled(False)
+            self.exportButton.setEnabled(False)
+
+        elif self.currentMode == self.NavigationMode:
+            if not self.contacts:
+                self.nameLine.clear()
+                self.addressText.clear()
+
+            self.nameLine.setReadOnly(True)
+            self.addressText.setReadOnly(True)
+            self.addButton.setEnabled(True)
+
+            number = len(self.contacts)
+            self.editButton.setEnabled(number >= 1)
+            self.removeButton.setEnabled(number >= 1)
+            self.findButton.setEnabled(number > 2)
+            self.nextButton.setEnabled(number > 1)
+            self.previousButton.setEnabled(number >1 )
+
+            self.submitButton.hide()
+            self.cancelButton.hide()
+
+            self.exportButton.setEnabled(number >= 1)
+
+            self.loadButton.setEnabled(True)
+            self.saveButton.setEnabled(number >= 1)
+
+    def saveToFile(self):
+        fileName, _ = QFileDialog.getSaveFileName(self, "Save Address Book",
+                '', "Address Book (*.abk);;All Files (*)")
+
+        if not fileName:
+            return
+
+        try:
+            out_file = open(str(fileName), 'wb')
+        except IOError:
+            QMessageBox.information(self, "Unable to open file",
+                    "There was an error opening \"%s\"" % fileName)
+            return
+
+        pickle.dump(self.contacts, out_file)
+        out_file.close()
+
+    def loadFromFile(self):
+        fileName, _ = QFileDialog.getOpenFileName(self, "Open Address Book",
+                '', "Address Book (*.abk);;All Files (*)")
+
+        if not fileName:
+            return
+
+        try:
+            in_file = open(str(fileName), 'rb')
+        except IOError:
+            QMessageBox.information(self, "Unable to open file",
+                    "There was an error opening \"%s\"" % fileName)
+            return
+
+        self.contacts = pickle.load(in_file)
+        in_file.close()
+
+        if len(self.contacts) == 0:
+            QMessageBox.information(self, "No contacts in file",
+                    "The file you are attempting to open contains no "
+                    "contacts.")
+        else:
+            for name, address in self.contacts:
+                self.nameLine.setText(name)
+                self.addressText.setText(address)
+
+        self.updateInterface(self.NavigationMode)
+
+    def exportAsVCard(self):
+        name = str(self.nameLine.text())
+        address = self.addressText.toPlainText()
+
+        nameList = name.split()
+
+        if len(nameList) > 1:
+            firstName = nameList[0]
+            lastName = nameList[-1]
+        else:
+            firstName = name
+            lastName = ''
+
+        fileName, _ = QFileDialog.getSaveFileName(self, "Export Contact", '',
+                "vCard Files (*.vcf);;All Files (*)")
+
+        if not fileName:
+            return
+
+        out_file = QFile(fileName)
+
+        if not out_file.open(QIODevice.WriteOnly):
+            QMessageBox.information(self, "Unable to open file",
+                    out_file.errorString())
+            return
+
+        out_s = QTextStream(out_file)
+
+        out_s << 'BEGIN:VCARD' << '\n'
+        out_s << 'VERSION:2.1' << '\n'
+        out_s << 'N:' << lastName << ';' << firstName << '\n'
+        out_s << 'FN:' << ' '.join(nameList) << '\n'
+
+        address.replace(';', '\\;')
+        address.replace('\n', ';')
+        address.replace(',', ' ')
+
+        out_s << 'ADR;HOME:;' << address << '\n'
+        out_s << 'END:VCARD' << '\n'
+
+        QMessageBox.information(self, "Export Successful",
+                "\"%s\" has been exported as a vCard." % name)
+
+
+class FindDialog(QDialog):
+    def __init__(self, parent=None):
+        super(FindDialog, self).__init__(parent)
+
+        findLabel = QLabel("Enter the name of a contact:")
+        self.lineEdit = QLineEdit()
+
+        self.findButton = QPushButton("&Find")
+        self.findText = ''
+
+        layout = QHBoxLayout()
+        layout.addWidget(findLabel)
+        layout.addWidget(self.lineEdit)
+        layout.addWidget(self.findButton)
+
+        self.setLayout(layout)
+        self.setWindowTitle("Find a Contact")
+
+        self.findButton.clicked.connect(self.findClicked)
+        self.findButton.clicked.connect(self.accept)
+
+    def findClicked(self):
+        text = self.lineEdit.text()
+
+        if not text:
+            QMessageBox.information(self, "Empty Field",
+                    "Please enter a name.")
+            return
+
+        self.findText = text
+        self.lineEdit.clear()
+        self.hide()
+
+    def getFindText(self):
+        return self.findText
+
+
+if __name__ == '__main__':
+    import sys
+
+    from PyQt5.QtWidgets import QApplication
+
+    app = QApplication(sys.argv)
+
+    addressBook = AddressBook()
+    addressBook.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/webkit/README b/examples/webkit/README
new file mode 100644
index 0000000..7499e53
--- /dev/null
+++ b/examples/webkit/README
@@ -0,0 +1,23 @@
+PyQt provides the QtWebKit and QtWebKitWidgets modules that implement the
+WebKit browser and related classes.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/webkit/domtraversal/domtraversal.py b/examples/webkit/domtraversal/domtraversal.py
new file mode 100755
index 0000000..a4dc288
--- /dev/null
+++ b/examples/webkit/domtraversal/domtraversal.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+###########################################################################
+
+
+from PyQt5.QtCore import QUrl
+from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeWidgetItem
+
+from ui_window import Ui_Window
+
+
+class Window(QMainWindow, Ui_Window):
+    def __init__(self, parent=None):
+        super(Window, self).__init__(parent)
+
+        self.setupUi(self)
+ 
+    def setUrl(self, url):
+        self.webView.setUrl(url)
+  
+    def on_webView_loadFinished(self):
+        # Begin document inspection.
+        self.treeWidget.clear()
+        frame = self.webView.page().mainFrame()
+        document = frame.documentElement()
+        self.examineChildElements(document, self.treeWidget.invisibleRootItem())
+ 
+    def examineChildElements(self, parentElement, parentItem):
+        # Traverse the document.
+        element = parentElement.firstChild()
+        while not element.isNull():
+            item = QTreeWidgetItem()
+            item.setText(0, element.tagName())
+            parentItem.addChild(item)
+            self.examineChildElements(element, item)
+            element = element.nextSibling()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    window = Window()
+    window.show()
+    window.setUrl(QUrl('http://qt-project.org/'))
+
+    sys.exit(app.exec_())
diff --git a/examples/webkit/domtraversal/ui_window.py b/examples/webkit/domtraversal/ui_window.py
new file mode 100644
index 0000000..d4d7851
--- /dev/null
+++ b/examples/webkit/domtraversal/ui_window.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'window.ui'
+#
+# Created: Fri Jul 26 06:50:59 2013
+#      by: PyQt5 UI code generator 5.0.1-snapshot-2a99e59669ee
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_Window(object):
+    def setupUi(self, Window):
+        Window.setObjectName("Window")
+        Window.resize(800, 600)
+        self.centralwidget = QtWidgets.QWidget(Window)
+        self.centralwidget.setObjectName("centralwidget")
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget)
+        self.verticalLayout_2.setContentsMargins(-1, 4, -1, 4)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.webView = QtWebKitWidgets.QWebView(self.centralwidget)
+        self.webView.setUrl(QtCore.QUrl("http://qt.nokia.com/"))
+        self.webView.setObjectName("webView")
+        self.verticalLayout_2.addWidget(self.webView)
+        Window.setCentralWidget(self.centralwidget)
+        self.menubar = QtWidgets.QMenuBar(Window)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 27))
+        self.menubar.setObjectName("menubar")
+        Window.setMenuBar(self.menubar)
+        self.statusbar = QtWidgets.QStatusBar(Window)
+        self.statusbar.setObjectName("statusbar")
+        Window.setStatusBar(self.statusbar)
+        self.dockWidget = QtWidgets.QDockWidget(Window)
+        self.dockWidget.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea|QtCore.Qt.RightDockWidgetArea)
+        self.dockWidget.setObjectName("dockWidget")
+        self.dockWidgetContents = QtWidgets.QWidget()
+        self.dockWidgetContents.setObjectName("dockWidgetContents")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.dockWidgetContents)
+        self.verticalLayout.setContentsMargins(4, 4, 4, 4)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.treeWidget = QtWidgets.QTreeWidget(self.dockWidgetContents)
+        self.treeWidget.setObjectName("treeWidget")
+        self.treeWidget.headerItem().setText(0, "1")
+        self.treeWidget.header().setVisible(False)
+        self.verticalLayout.addWidget(self.treeWidget)
+        self.dockWidget.setWidget(self.dockWidgetContents)
+        Window.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dockWidget)
+
+        self.retranslateUi(Window)
+        QtCore.QMetaObject.connectSlotsByName(Window)
+
+    def retranslateUi(self, Window):
+        _translate = QtCore.QCoreApplication.translate
+        Window.setWindowTitle(_translate("Window", "Web Element DOM Traversal"))
+        self.dockWidget.setWindowTitle(_translate("Window", "Document Structure"))
+
+from PyQt5 import QtWebKitWidgets
diff --git a/examples/webkit/domtraversal/window.ui b/examples/webkit/domtraversal/window.ui
new file mode 100644
index 0000000..0fce035
--- /dev/null
+++ b/examples/webkit/domtraversal/window.ui
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Window</class>
+ <widget class="QMainWindow" name="Window">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>800</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Web Element DOM Traversal</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QVBoxLayout" name="verticalLayout_2">
+    <property name="topMargin">
+     <number>4</number>
+    </property>
+    <property name="bottomMargin">
+     <number>4</number>
+    </property>
+    <item>
+     <widget class="QWebView" name="webView">
+      <property name="url">
+       <url>
+        <string>http://qt.nokia.com/</string>
+       </url>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menubar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>800</width>
+     <height>27</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QStatusBar" name="statusbar"/>
+  <widget class="QDockWidget" name="dockWidget">
+   <property name="allowedAreas">
+    <set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set>
+   </property>
+   <property name="windowTitle">
+    <string>Document Structure</string>
+   </property>
+   <attribute name="dockWidgetArea">
+    <number>1</number>
+   </attribute>
+   <widget class="QWidget" name="dockWidgetContents">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <property name="margin">
+      <number>4</number>
+     </property>
+     <item>
+      <widget class="QTreeWidget" name="treeWidget">
+       <attribute name="headerVisible">
+        <bool>false</bool>
+       </attribute>
+       <attribute name="headerVisible">
+        <bool>false</bool>
+       </attribute>
+       <column>
+        <property name="text">
+         <string notr="true">1</string>
+        </property>
+       </column>
+      </widget>
+     </item>
+    </layout>
+   </widget>
+  </widget>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QWebView</class>
+   <extends>QWidget</extends>
+   <header>QtWebKit/QWebView</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/webkit/fancybrowser/fancybrowser.py b/examples/webkit/fancybrowser/fancybrowser.py
new file mode 100755
index 0000000..7210e5b
--- /dev/null
+++ b/examples/webkit/fancybrowser/fancybrowser.py
@@ -0,0 +1,211 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+###########################################################################
+
+
+from PyQt5.QtCore import QFile, QIODevice, Qt, QTextStream, QUrl
+from PyQt5.QtWidgets import (QAction, QApplication, QLineEdit, QMainWindow,
+        QSizePolicy, QStyle, QTextEdit)
+from PyQt5.QtNetwork import QNetworkProxyFactory, QNetworkRequest
+from PyQt5.QtWebKitWidgets import QWebPage, QWebView
+
+import jquery_rc
+
+
+class MainWindow(QMainWindow):
+    def __init__(self, url):
+        super(MainWindow, self).__init__()
+
+        self.progress = 0
+
+        fd = QFile(":/jquery.min.js")
+
+        if fd.open(QIODevice.ReadOnly | QFile.Text):
+            self.jQuery = QTextStream(fd).readAll()
+            fd.close()
+        else:
+            self.jQuery = ''
+
+        QNetworkProxyFactory.setUseSystemConfiguration(True)
+
+        self.view = QWebView(self)
+        self.view.load(url)
+        self.view.loadFinished.connect(self.adjustLocation)
+        self.view.titleChanged.connect(self.adjustTitle)
+        self.view.loadProgress.connect(self.setProgress)
+        self.view.loadFinished.connect(self.finishLoading)
+
+        self.locationEdit = QLineEdit(self)
+        self.locationEdit.setSizePolicy(QSizePolicy.Expanding,
+                self.locationEdit.sizePolicy().verticalPolicy())
+        self.locationEdit.returnPressed.connect(self.changeLocation)
+
+        toolBar = self.addToolBar("Navigation")
+        toolBar.addAction(self.view.pageAction(QWebPage.Back))
+        toolBar.addAction(self.view.pageAction(QWebPage.Forward))
+        toolBar.addAction(self.view.pageAction(QWebPage.Reload))
+        toolBar.addAction(self.view.pageAction(QWebPage.Stop))
+        toolBar.addWidget(self.locationEdit)
+
+        viewMenu = self.menuBar().addMenu("&View")
+        viewSourceAction = QAction("Page Source", self)
+        viewSourceAction.triggered.connect(self.viewSource)
+        viewMenu.addAction(viewSourceAction)
+
+        effectMenu = self.menuBar().addMenu("&Effect")
+        effectMenu.addAction("Highlight all links", self.highlightAllLinks)
+
+        self.rotateAction = QAction(
+                self.style().standardIcon(QStyle.SP_FileDialogDetailedView),
+                "Turn images upside down", self, checkable=True,
+                toggled=self.rotateImages)
+        effectMenu.addAction(self.rotateAction)
+
+        toolsMenu = self.menuBar().addMenu("&Tools")
+        toolsMenu.addAction("Remove GIF images", self.removeGifImages)
+        toolsMenu.addAction("Remove all inline frames",
+                self.removeInlineFrames)
+        toolsMenu.addAction("Remove all object elements",
+                self.removeObjectElements)
+        toolsMenu.addAction("Remove all embedded elements",
+                self.removeEmbeddedElements)
+        self.setCentralWidget(self.view)
+
+    def viewSource(self):
+        accessManager = self.view.page().networkAccessManager()
+        request = QNetworkRequest(self.view.url())
+        reply = accessManager.get(request)
+        reply.finished.connect(self.slotSourceDownloaded)
+
+    def slotSourceDownloaded(self):
+        reply = self.sender()
+        self.textEdit = QTextEdit()
+        self.textEdit.setAttribute(Qt.WA_DeleteOnClose)
+        self.textEdit.show()
+        self.textEdit.setPlainText(QTextStream(reply).readAll())
+        self.textEdit.resize(600, 400)
+        reply.deleteLater()
+
+    def adjustLocation(self):
+        self.locationEdit.setText(self.view.url().toString())
+
+    def changeLocation(self):
+        url = QUrl.fromUserInput(self.locationEdit.text())
+        self.view.load(url)
+        self.view.setFocus()
+
+    def adjustTitle(self):
+        if 0 < self.progress < 100:
+            self.setWindowTitle("%s (%s%%)" % (self.view.title(), self.progress))
+        else:
+            self.setWindowTitle(self.view.title())
+
+    def setProgress(self, p):
+        self.progress = p
+        self.adjustTitle()
+
+    def finishLoading(self):
+        self.progress = 100
+        self.adjustTitle()
+        self.view.page().mainFrame().evaluateJavaScript(self.jQuery)
+        self.rotateImages(self.rotateAction.isChecked())
+
+    def highlightAllLinks(self):
+        code = """$('a').each(
+                    function () {
+                        $(this).css('background-color', 'yellow') 
+                    } 
+                  )"""
+        self.view.page().mainFrame().evaluateJavaScript(code)
+
+    def rotateImages(self, invert):
+        if invert:
+            code = """
+                $('img').each(
+                    function () {
+                        $(this).css('-webkit-transition', '-webkit-transform 2s'); 
+                        $(this).css('-webkit-transform', 'rotate(180deg)') 
+                    } 
+                )"""
+        else:
+            code = """
+                $('img').each(
+                    function () { 
+                        $(this).css('-webkit-transition', '-webkit-transform 2s'); 
+                        $(this).css('-webkit-transform', 'rotate(0deg)') 
+                    } 
+                )"""
+
+        self.view.page().mainFrame().evaluateJavaScript(code)
+
+    def removeGifImages(self):
+        code = "$('[src*=gif]').remove()"
+        self.view.page().mainFrame().evaluateJavaScript(code)
+
+    def removeInlineFrames(self):
+        code = "$('iframe').remove()"
+        self.view.page().mainFrame().evaluateJavaScript(code)
+
+    def removeObjectElements(self):
+        code = "$('object').remove()"
+        self.view.page().mainFrame().evaluateJavaScript(code)
+
+    def removeEmbeddedElements(self):
+        code = "$('embed').remove()"
+        self.view.page().mainFrame().evaluateJavaScript(code)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    if len(sys.argv) > 1:
+        url = QUrl(sys.argv[1])
+    else:
+        url = QUrl('http://www.google.com/ncr')
+
+    browser = MainWindow(url)
+    browser.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/webkit/fancybrowser/jquery.qrc b/examples/webkit/fancybrowser/jquery.qrc
new file mode 100644
index 0000000..1022d68
--- /dev/null
+++ b/examples/webkit/fancybrowser/jquery.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/" >
+        <file>jquery.min.js</file>
+    </qresource>
+</RCC>
diff --git a/examples/webkit/formextractor/form.html b/examples/webkit/formextractor/form.html
new file mode 100644
index 0000000..6b0bbde
--- /dev/null
+++ b/examples/webkit/formextractor/form.html
@@ -0,0 +1,46 @@
+<html><body>
+<h1>
+The Green People Book Club
+</h1>
+
+<p>
+Welcome to The Green People Book Club. Please register to obtain a membership with us.
+</p>
+    <form onsubmit="formExtractor.submit()">
+    <table>
+    <tbody><tr>
+        <td>
+        First name:
+        </td>
+        <td>
+            <input type="text" id="firstname">
+        </td>
+    </tr>
+    <tr>
+        <td>
+        Last name:
+        </td>
+        <td>
+            <input type="text" id="lastname">
+        </td>
+    </tr>
+    <tr>
+        <td>
+        Gender:
+        </td>
+        <td>
+        <input type="radio" name="gender" id="genderMale" value="Male"> Male
+        <input type="radio" name="gender" id="genderFemale" value="Female"> Female
+        </td>
+    </tr>
+    <tr>
+        <td colspan="2">
+        <input type="checkbox" id="updates" value="receive">
+        Check here if you would like to receive regular updates from us:
+        </td>
+    </tr>
+    </tbody></table>
+    <input type="submit" value="Submit">
+    </form>
+
+</body></html>
diff --git a/examples/webkit/formextractor/formextractor.py b/examples/webkit/formextractor/formextractor.py
new file mode 100755
index 0000000..65b610d
--- /dev/null
+++ b/examples/webkit/formextractor/formextractor.py
@@ -0,0 +1,143 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+###########################################################################
+
+
+from PyQt5.QtCore import pyqtSlot, QUrl
+from PyQt5.QtGui import QKeySequence
+from PyQt5.QtWidgets import (QAction, QApplication, QMainWindow, QMessageBox,
+        QWidget)
+
+import formextractor_rc
+from ui_formextractor import Ui_Form
+
+
+class FormExtractor(QWidget):
+    def __init__(self, parent=None):
+        super(FormExtractor, self).__init__(parent)
+
+        self.ui = Ui_Form()
+        self.ui.setupUi(self)
+
+        webView = self.ui.webView
+        webView.setUrl(QUrl('qrc:/form.html'))
+        webView.page().mainFrame().javaScriptWindowObjectCleared.connect(
+                self.populateJavaScriptWindowObject)
+
+        self.resize(300, 300)
+ 
+    @pyqtSlot()
+    def submit(self):
+        frame = self.ui.webView.page().mainFrame()
+        firstName = frame.findFirstElement('#firstname')
+        lastName = frame.findFirstElement('#lastname')
+        maleGender = frame.findFirstElement('#genderMale')
+        femaleGender = frame.findFirstElement('#genderFemale')
+        updates = frame.findFirstElement('#updates')
+
+        self.ui.firstNameEdit.setText(firstName.evaluateJavaScript('this.value'))
+        self.ui.lastNameEdit.setText(lastName.evaluateJavaScript('this.value'))
+
+        if maleGender.evaluateJavaScript('this.checked'):
+            self.ui.genderEdit.setText(
+                    maleGender.evaluateJavaScript('this.value'))
+        elif femaleGender.evaluateJavaScript('this.checked'):
+            self.ui.genderEdit.setText(
+                    femaleGender.evaluateJavaScript('this.value'))
+
+        if updates.evaluateJavaScript('this.checked'):
+            self.ui.updatesEdit.setText("Yes")
+        else:
+            self.ui.updatesEdit.setText("No")
+
+    def populateJavaScriptWindowObject(self):
+        self.ui.webView.page().mainFrame().addToJavaScriptWindowObject(
+                'formExtractor', self)
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.createActions()
+        self.createMenus()
+        self.centralWidget = FormExtractor(self)
+        self.setCentralWidget(self.centralWidget)
+    
+    def createActions(self):
+        self.exitAct = QAction("E&xit", self, statusTip="Exit the application",
+                shortcut=QKeySequence.Quit, triggered=self.close)
+
+        self.aboutAct = QAction("&About", self,
+                statusTip="Show the application's About box",
+                triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                statusTip="Show the Qt library's About box",
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        fileMenu = self.menuBar().addMenu("&File")
+        fileMenu.addAction(self.exitAct)
+        self.menuBar().addSeparator()
+        helpMenu = self.menuBar().addMenu("&Help")
+        helpMenu.addAction(self.aboutAct)
+        helpMenu.addAction(self.aboutQtAct)
+
+    def about(self):
+        QMessageBox.about(self, "About Form Extractor",
+                "The <b>Form Extractor</b> example demonstrates how to "
+                "extract data from a web form using QtWebKit.")
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    mainWindow = MainWindow()
+    mainWindow.setWindowTitle("Form Extractor")
+    mainWindow.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/webkit/formextractor/formextractor.qrc b/examples/webkit/formextractor/formextractor.qrc
new file mode 100644
index 0000000..e35f4b2
--- /dev/null
+++ b/examples/webkit/formextractor/formextractor.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+ <qresource>
+     <file>form.html</file>
+ </qresource>
+ </RCC>
\ No newline at end of file
diff --git a/examples/webkit/formextractor/formextractor.ui b/examples/webkit/formextractor/formextractor.ui
new file mode 100644
index 0000000..5c4afec
--- /dev/null
+++ b/examples/webkit/formextractor/formextractor.ui
@@ -0,0 +1,159 @@
+<ui version="4.0" >
+ <class>Form</class>
+ <widget class="QWidget" name="Form" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>680</width>
+    <height>218</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout" >
+   <item>
+    <widget class="QGroupBox" name="webFormGroupBox" >
+     <property name="title" >
+      <string>Web Form</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2" >
+      <item>
+       <layout class="QVBoxLayout" name="verticalLayout" >
+        <item>
+         <widget class="QWebView" name="webView" >
+          <property name="minimumSize" >
+           <size>
+            <width>200</width>
+            <height>150</height>
+           </size>
+          </property>
+          <property name="maximumSize" >
+           <size>
+            <width>400</width>
+            <height>16777215</height>
+           </size>
+          </property>
+          <property name="url" >
+           <url>
+            <string>about:blank</string>
+           </url>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <spacer name="horizontalSpacer" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>28</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="dataGroupBox" >
+     <property name="title" >
+      <string>Extracted Data</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_3" >
+      <item>
+       <layout class="QFormLayout" name="formLayout" >
+        <property name="fieldGrowthPolicy" >
+         <enum>QFormLayout::FieldsStayAtSizeHint</enum>
+        </property>
+        <item row="0" column="0" >
+         <widget class="QLabel" name="firstNameLabel" >
+          <property name="text" >
+           <string>First Name</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1" >
+         <widget class="QLineEdit" name="firstNameEdit" >
+          <property name="readOnly" >
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0" >
+         <widget class="QLabel" name="lastNameLabel" >
+          <property name="text" >
+           <string>Last Name</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1" >
+         <widget class="QLineEdit" name="lastNameEdit" >
+          <property name="readOnly" >
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0" >
+         <widget class="QLabel" name="genderLabel" >
+          <property name="text" >
+           <string>Gender</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="1" >
+         <widget class="QLineEdit" name="genderEdit" >
+          <property name="readOnly" >
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="0" >
+         <widget class="QLabel" name="updatesLabel" >
+          <property name="text" >
+           <string>Receive Updates</string>
+          </property>
+         </widget>
+        </item>
+        <item row="3" column="1" >
+         <widget class="QLineEdit" name="updatesEdit" >
+          <property name="readOnly" >
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <spacer name="verticalSpacer" >
+        <property name="orientation" >
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeHint" stdset="0" >
+         <size>
+          <width>20</width>
+          <height>24</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QWebView</class>
+   <extends>QWidget</extends>
+   <header>QtWebKit/QWebView</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/webkit/formextractor/formextractor_rc.py b/examples/webkit/formextractor/formextractor_rc.py
new file mode 100644
index 0000000..2b45f92
--- /dev/null
+++ b/examples/webkit/formextractor/formextractor_rc.py
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Tue May 14 17:58:45 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x03\xfd\
+\x3c\
+\x68\x74\x6d\x6c\x3e\x3c\x62\x6f\x64\x79\x3e\x0a\x3c\x68\x31\x3e\
+\x0a\x54\x68\x65\x20\x47\x72\x65\x65\x6e\x20\x50\x65\x6f\x70\x6c\
+\x65\x20\x42\x6f\x6f\x6b\x20\x43\x6c\x75\x62\x0a\x3c\x2f\x68\x31\
+\x3e\x0a\x0a\x3c\x70\x3e\x0a\x57\x65\x6c\x63\x6f\x6d\x65\x20\x74\
+\x6f\x20\x54\x68\x65\x20\x47\x72\x65\x65\x6e\x20\x50\x65\x6f\x70\
+\x6c\x65\x20\x42\x6f\x6f\x6b\x20\x43\x6c\x75\x62\x2e\x20\x50\x6c\
+\x65\x61\x73\x65\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x74\x6f\
+\x20\x6f\x62\x74\x61\x69\x6e\x20\x61\x20\x6d\x65\x6d\x62\x65\x72\
+\x73\x68\x69\x70\x20\x77\x69\x74\x68\x20\x75\x73\x2e\x0a\x3c\x2f\
+\x70\x3e\x0a\x20\x20\x20\x20\x3c\x66\x6f\x72\x6d\x20\x6f\x6e\x73\
+\x75\x62\x6d\x69\x74\x3d\x22\x66\x6f\x72\x6d\x45\x78\x74\x72\x61\
+\x63\x74\x6f\x72\x2e\x73\x75\x62\x6d\x69\x74\x28\x29\x22\x3e\x0a\
+\x20\x20\x20\x20\x3c\x74\x61\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\
+\x3c\x74\x62\x6f\x64\x79\x3e\x3c\x74\x72\x3e\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x74\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x46\x69\x72\x73\x74\x20\x6e\x61\x6d\x65\x3a\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x2f\x74\x64\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x74\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x69\x6e\x70\x75\x74\x20\x74\x79\x70\x65\x3d\
+\x22\x74\x65\x78\x74\x22\x20\x69\x64\x3d\x22\x66\x69\x72\x73\x74\
+\x6e\x61\x6d\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\
+\x2f\x74\x64\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x74\x72\x3e\x0a\x20\
+\x20\x20\x20\x3c\x74\x72\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x74\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x4c\x61\x73\
+\x74\x20\x6e\x61\x6d\x65\x3a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x2f\x74\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x74\
+\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\
+\x69\x6e\x70\x75\x74\x20\x74\x79\x70\x65\x3d\x22\x74\x65\x78\x74\
+\x22\x20\x69\x64\x3d\x22\x6c\x61\x73\x74\x6e\x61\x6d\x65\x22\x3e\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x74\x64\x3e\x0a\x20\
+\x20\x20\x20\x3c\x2f\x74\x72\x3e\x0a\x20\x20\x20\x20\x3c\x74\x72\
+\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x74\x64\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x47\x65\x6e\x64\x65\x72\x3a\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x74\x64\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x74\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x3c\x69\x6e\x70\x75\x74\x20\x74\x79\x70\x65\x3d\x22\x72\
+\x61\x64\x69\x6f\x22\x20\x6e\x61\x6d\x65\x3d\x22\x67\x65\x6e\x64\
+\x65\x72\x22\x20\x69\x64\x3d\x22\x67\x65\x6e\x64\x65\x72\x4d\x61\
+\x6c\x65\x22\x20\x76\x61\x6c\x75\x65\x3d\x22\x4d\x61\x6c\x65\x22\
+\x3e\x20\x4d\x61\x6c\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\
+\x69\x6e\x70\x75\x74\x20\x74\x79\x70\x65\x3d\x22\x72\x61\x64\x69\
+\x6f\x22\x20\x6e\x61\x6d\x65\x3d\x22\x67\x65\x6e\x64\x65\x72\x22\
+\x20\x69\x64\x3d\x22\x67\x65\x6e\x64\x65\x72\x46\x65\x6d\x61\x6c\
+\x65\x22\x20\x76\x61\x6c\x75\x65\x3d\x22\x46\x65\x6d\x61\x6c\x65\
+\x22\x3e\x20\x46\x65\x6d\x61\x6c\x65\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x3c\x2f\x74\x64\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x74\x72\
+\x3e\x0a\x20\x20\x20\x20\x3c\x74\x72\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x74\x64\x20\x63\x6f\x6c\x73\x70\x61\x6e\x3d\x22\
+\x32\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x6e\x70\
+\x75\x74\x20\x74\x79\x70\x65\x3d\x22\x63\x68\x65\x63\x6b\x62\x6f\
+\x78\x22\x20\x69\x64\x3d\x22\x75\x70\x64\x61\x74\x65\x73\x22\x20\
+\x76\x61\x6c\x75\x65\x3d\x22\x72\x65\x63\x65\x69\x76\x65\x22\x3e\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x43\x68\x65\x63\x6b\x20\x68\
+\x65\x72\x65\x20\x69\x66\x20\x79\x6f\x75\x20\x77\x6f\x75\x6c\x64\
+\x20\x6c\x69\x6b\x65\x20\x74\x6f\x20\x72\x65\x63\x65\x69\x76\x65\
+\x20\x72\x65\x67\x75\x6c\x61\x72\x20\x75\x70\x64\x61\x74\x65\x73\
+\x20\x66\x72\x6f\x6d\x20\x75\x73\x3a\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x3c\x2f\x74\x64\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x74\x72\
+\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x74\x62\x6f\x64\x79\x3e\x3c\x2f\
+\x74\x61\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x70\x75\
+\x74\x20\x74\x79\x70\x65\x3d\x22\x73\x75\x62\x6d\x69\x74\x22\x20\
+\x76\x61\x6c\x75\x65\x3d\x22\x53\x75\x62\x6d\x69\x74\x22\x3e\x0a\
+\x20\x20\x20\x20\x3c\x2f\x66\x6f\x72\x6d\x3e\x0a\x0a\x3c\x2f\x62\
+\x6f\x64\x79\x3e\x3c\x2f\x68\x74\x6d\x6c\x3e\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x09\
+\x09\x04\x21\xfc\
+\x00\x66\
+\x00\x6f\x00\x72\x00\x6d\x00\x2e\x00\x68\x00\x74\x00\x6d\x00\x6c\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/webkit/formextractor/ui_formextractor.py b/examples/webkit/formextractor/ui_formextractor.py
new file mode 100644
index 0000000..518bb9c
--- /dev/null
+++ b/examples/webkit/formextractor/ui_formextractor.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'formextractor.ui'
+#
+# Created: Tue May 14 17:59:08 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-b0831183bf83
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.resize(680, 218)
+        self.horizontalLayout = QtWidgets.QHBoxLayout(Form)
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.webFormGroupBox = QtWidgets.QGroupBox(Form)
+        self.webFormGroupBox.setObjectName("webFormGroupBox")
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.webFormGroupBox)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.webView = QtWebKitWidgets.QWebView(self.webFormGroupBox)
+        self.webView.setMinimumSize(QtCore.QSize(200, 150))
+        self.webView.setMaximumSize(QtCore.QSize(400, 16777215))
+        self.webView.setUrl(QtCore.QUrl("about:blank"))
+        self.webView.setObjectName("webView")
+        self.verticalLayout.addWidget(self.webView)
+        self.verticalLayout_2.addLayout(self.verticalLayout)
+        self.horizontalLayout.addWidget(self.webFormGroupBox)
+        spacerItem = QtWidgets.QSpacerItem(28, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.dataGroupBox = QtWidgets.QGroupBox(Form)
+        self.dataGroupBox.setObjectName("dataGroupBox")
+        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.dataGroupBox)
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.formLayout = QtWidgets.QFormLayout()
+        self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldsStayAtSizeHint)
+        self.formLayout.setObjectName("formLayout")
+        self.firstNameLabel = QtWidgets.QLabel(self.dataGroupBox)
+        self.firstNameLabel.setObjectName("firstNameLabel")
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.firstNameLabel)
+        self.firstNameEdit = QtWidgets.QLineEdit(self.dataGroupBox)
+        self.firstNameEdit.setReadOnly(True)
+        self.firstNameEdit.setObjectName("firstNameEdit")
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.firstNameEdit)
+        self.lastNameLabel = QtWidgets.QLabel(self.dataGroupBox)
+        self.lastNameLabel.setObjectName("lastNameLabel")
+        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.lastNameLabel)
+        self.lastNameEdit = QtWidgets.QLineEdit(self.dataGroupBox)
+        self.lastNameEdit.setReadOnly(True)
+        self.lastNameEdit.setObjectName("lastNameEdit")
+        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lastNameEdit)
+        self.genderLabel = QtWidgets.QLabel(self.dataGroupBox)
+        self.genderLabel.setObjectName("genderLabel")
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.genderLabel)
+        self.genderEdit = QtWidgets.QLineEdit(self.dataGroupBox)
+        self.genderEdit.setReadOnly(True)
+        self.genderEdit.setObjectName("genderEdit")
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.genderEdit)
+        self.updatesLabel = QtWidgets.QLabel(self.dataGroupBox)
+        self.updatesLabel.setObjectName("updatesLabel")
+        self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.updatesLabel)
+        self.updatesEdit = QtWidgets.QLineEdit(self.dataGroupBox)
+        self.updatesEdit.setReadOnly(True)
+        self.updatesEdit.setObjectName("updatesEdit")
+        self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.updatesEdit)
+        self.verticalLayout_3.addLayout(self.formLayout)
+        spacerItem1 = QtWidgets.QSpacerItem(20, 24, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+        self.verticalLayout_3.addItem(spacerItem1)
+        self.horizontalLayout.addWidget(self.dataGroupBox)
+
+        self.retranslateUi(Form)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Form"))
+        self.webFormGroupBox.setTitle(_translate("Form", "Web Form"))
+        self.dataGroupBox.setTitle(_translate("Form", "Extracted Data"))
+        self.firstNameLabel.setText(_translate("Form", "First Name"))
+        self.lastNameLabel.setText(_translate("Form", "Last Name"))
+        self.genderLabel.setText(_translate("Form", "Gender"))
+        self.updatesLabel.setText(_translate("Form", "Receive Updates"))
+
+from PyQt5 import QtWebKitWidgets
diff --git a/examples/webkit/framecapture.py b/examples/webkit/framecapture.py
new file mode 100755
index 0000000..a912c9d
--- /dev/null
+++ b/examples/webkit/framecapture.py
@@ -0,0 +1,157 @@
+#!/usr/bin/env python
+"""        
+Capture a web page and save its internal frames in different images
+
+  framecapture.py <url> <outputfile>
+
+Notes:
+  'url' is the URL of the web page to be captured
+  'outputfile' is the prefix of the image files to be generated
+
+Example:
+  framecapture qt.nokia.com trolltech.png
+
+Result:
+  trolltech.png (full page)
+  trolltech_frame1.png (...) trolltech_frameN.png ('N' number of internal frames)
+"""
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+###########################################################################
+
+import sys
+
+from PyQt5.QtCore import pyqtSignal, QObject, QSize, Qt, QUrl
+from PyQt5.QtGui import QImage, QPainter
+from PyQt5.QtWidgets import QApplication
+from PyQt5.QtWebKitWidgets import QWebPage
+
+
+def cout(s):
+    sys.stdout.write(s)
+    sys.stdout.flush()
+
+
+def cerr(s):
+    sys.stderr.write(s)
+    sys.stderr.flush()
+
+
+class FrameCapture(QObject):
+
+    finished = pyqtSignal()
+
+    def __init__(self):
+        super(FrameCapture, self).__init__()
+
+        self._percent = 0
+        self._page = QWebPage()
+        self._page.mainFrame().setScrollBarPolicy(Qt.Vertical,
+                Qt.ScrollBarAlwaysOff)
+        self._page.mainFrame().setScrollBarPolicy(Qt.Horizontal,
+                Qt.ScrollBarAlwaysOff)
+        self._page.loadProgress.connect(self.printProgress)
+        self._page.loadFinished.connect(self.saveResult)
+ 
+    def load(self, url, outputFileName):
+        cout("Loading %s\n" % url.toString())
+        self._percent = 0
+        index = outputFileName.rfind('.')
+        self._fileName = index == -1 and outputFileName + ".png" or outputFileName
+        self._page.mainFrame().load(url)
+        self._page.setViewportSize(QSize(1024, 768))
+ 
+    def printProgress(self, percent):
+        if self._percent >= percent:
+            return
+        self._percent += 1
+        while self._percent < percent:
+            self._percent += 1
+            cout("#")
+ 
+    def saveResult(self, ok):
+        cout("\n")
+        # Crude error-checking.
+        if not ok:
+            cerr("Failed loading %s\n" % self._page.mainFrame().url().toString())
+            self.finished.emit()
+            return
+
+        # Save each frame in different image files.
+        self._frameCounter = 0
+        self.saveFrame(self._page.mainFrame())
+        self.finished.emit()
+ 
+    def saveFrame(self, frame):
+        fileName = self._fileName
+        if self._frameCounter:
+            index = fileName.rfind('.')
+            fileName = "%s_frame%s%s" % (fileName[:index], self._frameCounter, fileName[index:])
+        image = QImage(frame.contentsSize(), QImage.Format_ARGB32_Premultiplied)
+        image.fill(Qt.transparent)
+        painter = QPainter(image)
+        painter.setRenderHint(QPainter.Antialiasing, True)
+        painter.setRenderHint(QPainter.TextAntialiasing, True)
+        painter.setRenderHint(QPainter.SmoothPixmapTransform, True)
+        frame.documentElement().render(painter)
+        painter.end()
+        image.save(fileName)
+        self._frameCounter += 1
+        for childFrame in frame.childFrames():
+            self.saveFrame(childFrame)
+
+
+if __name__ == '__main__':
+    if len(sys.argv) != 3:
+        cerr(__doc__)
+        sys.exit(1)
+
+    url = QUrl.fromUserInput(sys.argv[1])
+    fileName = sys.argv[2]
+
+    app = QApplication(sys.argv)
+
+    capture = FrameCapture()
+    capture.finished.connect(app.quit)
+    capture.load(url, fileName)
+
+    app.exec_()
diff --git a/examples/webkit/previewer/previewer.py b/examples/webkit/previewer/previewer.py
new file mode 100755
index 0000000..55e03dc
--- /dev/null
+++ b/examples/webkit/previewer/previewer.py
@@ -0,0 +1,178 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+###########################################################################
+
+
+from PyQt5.QtCore import QFile, QIODevice, QTextStream, QUrl
+from PyQt5.QtGui import QKeySequence
+from PyQt5.QtWidgets import (QAction, QApplication, QFileDialog, QInputDialog,
+        QLineEdit, QMainWindow, QMessageBox, QWidget)
+
+from ui_previewer import Ui_Form
+
+
+class Previewer(QWidget, Ui_Form):
+    def __init__(self, parent=None):
+        super(Previewer, self).__init__(parent)
+
+        self.setupUi(self)
+        self.baseUrl = QUrl()
+ 
+    def setBaseUrl(self, url):
+        self.baseUrl = url
+
+    def on_previewButton_clicked(self):
+        # Update the contents in the web viewer.
+        text = self.plainTextEdit.toPlainText()
+        self.webView.setHtml(text, self.baseUrl)
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.createActions()
+        self.createMenus()
+        self.centralWidget = Previewer(self)
+        self.setCentralWidget(self.centralWidget)
+        self.centralWidget.webView.loadFinished.connect(self.updateTextEdit)
+        self.setStartupText()
+
+    def createActions(self):
+        self.openAct = QAction("&Open...", self, shortcut=QKeySequence.Open,
+                statusTip="Open an existing HTML file", triggered=self.open)
+
+        self.openUrlAct = QAction("&Open URL...", self, shortcut="Ctrl+U",
+                statusTip="Open a URL", triggered=self.openUrl)
+
+        self.saveAct = QAction("&Save", self, shortcut=QKeySequence.Save,
+                statusTip="Save the HTML file to disk", triggered=self.save)
+
+        self.exitAct = QAction("E&xit", self, shortcut=QKeySequence.Quit,
+                statusTip="Exit the application", triggered=self.close)
+
+        self.aboutAct = QAction("&About", self,
+                statusTip="Show the application's About box",
+                triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                statusTip="Show the Qt library's About box",
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.openAct)
+        self.fileMenu.addAction(self.openUrlAct)
+        self.fileMenu.addAction(self.saveAct)
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.exitAct)
+        self.menuBar().addSeparator()
+        self.helpMenu = self.menuBar().addMenu("&Help")
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+    def about(self):
+        QMessageBox.about(self, "About Previewer",
+                "The <b>Previewer</b> example demonstrates how to view HTML "
+                "documents using a QtWebKitWidgets.QWebView.")
+
+    def open(self):
+        fileName, _ = QFileDialog.getOpenFileName(self)
+        if fileName:
+            fd = QFile(fileName)
+            if not fd.open(QIODevice.ReadOnly):
+                QMessageBox.information(self, "Unable to open file",
+                        fd.errorString())
+                return
+
+            output = QTextStream(fd).readAll()
+
+            # Display contents.
+            self.centralWidget.plainTextEdit.setPlainText(output)
+            self.centralWidget.setBaseUrl(QUrl.fromLocalFile(fileName))
+
+    def openUrl(self):
+        url, ok = QInputDialog.getText(self, "Enter a URL", "URL:",
+                QLineEdit.Normal, "http://")
+
+        if ok and url:
+            url = QUrl(url)
+            self.centralWidget.webView.setUrl(url)
+
+    def save(self):
+        content = self.centralWidget.plainTextEdit.toPlainText()
+        fileName, _ = QFileDialog.getSaveFileName(self)
+        if fileName:
+            fd = QFile(fileName)
+            if not fd.open(QIODevice.WriteOnly):
+                QMessageBox.information(self, "Unable to open file",
+                        fd.errorString())
+                return
+
+            QTextStream(fd) << content
+ 
+    def updateTextEdit(self):
+        mainFrame = self.centralWidget.webView.page().mainFrame()
+        frameText = mainFrame.toHtml()
+        self.centralWidget.plainTextEdit.setPlainText(frameText)
+
+    def setStartupText(self):
+        self.centralWidget.webView.setHtml("""
+<html><body>
+ <h1>HTML Previewer</h1>
+  <p>This example shows you how to use QtWebKitWidgets.QWebView to
+   preview HTML data written in a QtWidgets.QPlainTextEdit.
+  </p>
+</body></html>""")
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    mainWindow = MainWindow()
+    mainWindow.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/webkit/previewer/previewer.ui b/examples/webkit/previewer/previewer.ui
new file mode 100644
index 0000000..d4c9992
--- /dev/null
+++ b/examples/webkit/previewer/previewer.ui
@@ -0,0 +1,99 @@
+<ui version="4.0" >
+ <class>Form</class>
+ <widget class="QWidget" name="Form" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>911</width>
+    <height>688</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout_4" >
+   <item>
+    <widget class="QSplitter" name="splitter" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <widget class="QGroupBox" name="editorBox" >
+      <property name="title" >
+       <string>HTML Editor</string>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_2" >
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_2" >
+         <item>
+          <widget class="QPlainTextEdit" name="plainTextEdit" />
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout" >
+           <item>
+            <widget class="QPushButton" name="clearButton" >
+             <property name="text" >
+              <string>Clear</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QPushButton" name="previewButton" >
+             <property name="text" >
+              <string>Preview</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QGroupBox" name="previewerBox" >
+      <property name="title" >
+       <string>HTML Preview</string>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_3" >
+       <item>
+        <widget class="QWebView" name="webView" >
+         <property name="url" >
+          <url>
+           <string>about:blank</string>
+          </url>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QWebView</class>
+   <extends>QWidget</extends>
+   <header>QtWebKit/QWebView</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>clearButton</sender>
+   <signal>clicked()</signal>
+   <receiver>plainTextEdit</receiver>
+   <slot>clear()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>56</x>
+     <y>653</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>98</x>
+     <y>551</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/examples/webkit/previewer/ui_previewer.py b/examples/webkit/previewer/ui_previewer.py
new file mode 100644
index 0000000..17c3cee
--- /dev/null
+++ b/examples/webkit/previewer/ui_previewer.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'previewer.ui'
+#
+# Created: Tue May 14 22:35:29 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-3507ed3a4178
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.resize(911, 688)
+        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(Form)
+        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+        self.splitter = QtWidgets.QSplitter(Form)
+        self.splitter.setOrientation(QtCore.Qt.Horizontal)
+        self.splitter.setObjectName("splitter")
+        self.editorBox = QtWidgets.QGroupBox(self.splitter)
+        self.editorBox.setObjectName("editorBox")
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.editorBox)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.editorBox)
+        self.plainTextEdit.setObjectName("plainTextEdit")
+        self.verticalLayout_2.addWidget(self.plainTextEdit)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.clearButton = QtWidgets.QPushButton(self.editorBox)
+        self.clearButton.setObjectName("clearButton")
+        self.horizontalLayout.addWidget(self.clearButton)
+        self.previewButton = QtWidgets.QPushButton(self.editorBox)
+        self.previewButton.setObjectName("previewButton")
+        self.horizontalLayout.addWidget(self.previewButton)
+        self.verticalLayout_2.addLayout(self.horizontalLayout)
+        self.horizontalLayout_2.addLayout(self.verticalLayout_2)
+        self.previewerBox = QtWidgets.QGroupBox(self.splitter)
+        self.previewerBox.setObjectName("previewerBox")
+        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.previewerBox)
+        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.webView = QtWebKitWidgets.QWebView(self.previewerBox)
+        self.webView.setUrl(QtCore.QUrl("about:blank"))
+        self.webView.setObjectName("webView")
+        self.horizontalLayout_3.addWidget(self.webView)
+        self.horizontalLayout_4.addWidget(self.splitter)
+
+        self.retranslateUi(Form)
+        self.clearButton.clicked.connect(self.plainTextEdit.clear)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Form"))
+        self.editorBox.setTitle(_translate("Form", "HTML Editor"))
+        self.clearButton.setText(_translate("Form", "Clear"))
+        self.previewButton.setText(_translate("Form", "Preview"))
+        self.previewerBox.setTitle(_translate("Form", "HTML Preview"))
+
+from PyQt5 import QtWebKitWidgets
diff --git a/examples/webkit/simpleselector/simpleselector.py b/examples/webkit/simpleselector/simpleselector.py
new file mode 100755
index 0000000..6f89ec8
--- /dev/null
+++ b/examples/webkit/simpleselector/simpleselector.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+###########################################################################
+
+
+from PyQt5.QtCore import QUrl
+from PyQt5.QtWidgets import QApplication, QWidget
+
+from ui_window import Ui_Window
+
+
+class SimpleSelector(QWidget, Ui_Window):
+    def __init__(self, parent=None):
+        super(SimpleSelector, self).__init__(parent)
+
+        self.setupUi(self)
+
+    def on_elementLineEdit_returnPressed(self):
+        frame = self.webView.page().mainFrame()
+
+        # Select elements.
+        document = frame.documentElement()
+        elements = document.findAll(self.elementLineEdit.text())
+
+        for element in elements:
+            element.setAttribute('style', 'background-color: #f0f090')
+
+    def on_highlightButton_clicked(self):
+        self.on_elementLineEdit_returnPressed()
+ 
+    def setUrl(self, url):
+        self.webView.setUrl(url)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    win = SimpleSelector()
+    win.setUrl(QUrl('http://www.webkit.org'))
+    win.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/webkit/simpleselector/ui_window.py b/examples/webkit/simpleselector/ui_window.py
new file mode 100644
index 0000000..6922515
--- /dev/null
+++ b/examples/webkit/simpleselector/ui_window.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'window.ui'
+#
+# Created: Tue May 14 22:42:29 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-3507ed3a4178
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_Window(object):
+    def setupUi(self, Window):
+        Window.setObjectName("Window")
+        Window.resize(640, 480)
+        self.verticalLayout = QtWidgets.QVBoxLayout(Window)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.webView = QtWebKitWidgets.QWebView(Window)
+        self.webView.setUrl(QtCore.QUrl("http://webkit.org/"))
+        self.webView.setObjectName("webView")
+        self.verticalLayout.addWidget(self.webView)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.formLayout = QtWidgets.QFormLayout()
+        self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.ExpandingFieldsGrow)
+        self.formLayout.setObjectName("formLayout")
+        self.elementLabel = QtWidgets.QLabel(Window)
+        self.elementLabel.setObjectName("elementLabel")
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.elementLabel)
+        self.elementLineEdit = QtWidgets.QLineEdit(Window)
+        self.elementLineEdit.setObjectName("elementLineEdit")
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.elementLineEdit)
+        self.horizontalLayout.addLayout(self.formLayout)
+        self.highlightButton = QtWidgets.QPushButton(Window)
+        self.highlightButton.setObjectName("highlightButton")
+        self.horizontalLayout.addWidget(self.highlightButton)
+        self.verticalLayout.addLayout(self.horizontalLayout)
+        self.elementLabel.setBuddy(self.elementLineEdit)
+
+        self.retranslateUi(Window)
+        QtCore.QMetaObject.connectSlotsByName(Window)
+
+    def retranslateUi(self, Window):
+        _translate = QtCore.QCoreApplication.translate
+        Window.setWindowTitle(_translate("Window", "Web Element Selector"))
+        self.elementLabel.setText(_translate("Window", "&Element:"))
+        self.elementLineEdit.setText(_translate("Window", "li a"))
+        self.highlightButton.setText(_translate("Window", "&Highlight"))
+
+from PyQt5 import QtWebKitWidgets
diff --git a/examples/webkit/simpleselector/window.ui b/examples/webkit/simpleselector/window.ui
new file mode 100644
index 0000000..aa824df
--- /dev/null
+++ b/examples/webkit/simpleselector/window.ui
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Window</class>
+ <widget class="QWidget" name="Window">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>640</width>
+    <height>480</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Web Element Selector</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QWebView" name="webView">
+     <property name="url">
+      <url>
+       <string>http://webkit.org/</string>
+      </url>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <layout class="QFormLayout" name="formLayout">
+       <property name="fieldGrowthPolicy">
+        <enum>QFormLayout::ExpandingFieldsGrow</enum>
+       </property>
+       <item row="0" column="0">
+        <widget class="QLabel" name="elementLabel">
+         <property name="text">
+          <string>&Element:</string>
+         </property>
+         <property name="buddy">
+          <cstring>elementLineEdit</cstring>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QLineEdit" name="elementLineEdit">
+         <property name="text">
+          <string>li a</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QPushButton" name="highlightButton">
+       <property name="text">
+        <string>&Highlight</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QWebView</class>
+   <extends>QWidget</extends>
+   <header>QtWebKit/QWebView</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/widgets/README b/examples/widgets/README
new file mode 100644
index 0000000..46f5604
--- /dev/null
+++ b/examples/widgets/README
@@ -0,0 +1,30 @@
+PyQt comes with a large range of standard widgets that users of modern
+application have come to expect.
+
+You can also develop your own custom widgets and controls, and use them
+alongside standard widgets.
+
+It is even possible to provide custom styles and themes for widgets that can
+be used to change the appearance of standard widgets and appropriately
+written custom widgets.
+
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/widgets/analogclock.py b/examples/widgets/analogclock.py
new file mode 100755
index 0000000..be318cb
--- /dev/null
+++ b/examples/widgets/analogclock.py
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QPoint, Qt, QTime, QTimer
+from PyQt5.QtGui import QColor, QPainter, QPolygon
+from PyQt5.QtWidgets import QApplication, QWidget
+
+
+class AnalogClock(QWidget):
+    hourHand = QPolygon([
+        QPoint(7, 8),
+        QPoint(-7, 8),
+        QPoint(0, -40)
+    ])
+
+    minuteHand = QPolygon([
+        QPoint(7, 8),
+        QPoint(-7, 8),
+        QPoint(0, -70)
+    ])
+
+    hourColor = QColor(127, 0, 127)
+    minuteColor = QColor(0, 127, 127, 191)
+
+    def __init__(self, parent=None):
+        super(AnalogClock, self).__init__(parent)
+
+        timer = QTimer(self)
+        timer.timeout.connect(self.update)
+        timer.start(1000)
+
+        self.setWindowTitle("Analog Clock")
+        self.resize(200, 200)
+
+    def paintEvent(self, event):
+        side = min(self.width(), self.height())
+        time = QTime.currentTime()
+
+        painter = QPainter(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.translate(self.width() / 2, self.height() / 2)
+        painter.scale(side / 200.0, side / 200.0)
+
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(AnalogClock.hourColor)
+
+        painter.save()
+        painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)))
+        painter.drawConvexPolygon(AnalogClock.hourHand)
+        painter.restore()
+
+        painter.setPen(AnalogClock.hourColor)
+
+        for i in range(12):
+            painter.drawLine(88, 0, 96, 0)
+            painter.rotate(30.0)
+
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(AnalogClock.minuteColor)
+
+        painter.save()
+        painter.rotate(6.0 * (time.minute() + time.second() / 60.0))
+        painter.drawConvexPolygon(AnalogClock.minuteHand)
+        painter.restore()
+
+        painter.setPen(AnalogClock.minuteColor)
+
+        for j in range(60):
+            if (j % 5) != 0:
+                painter.drawLine(92, 0, 96, 0)
+            painter.rotate(6.0)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    clock = AnalogClock()
+    clock.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/calculator.py b/examples/widgets/calculator.py
new file mode 100755
index 0000000..4d63fd2
--- /dev/null
+++ b/examples/widgets/calculator.py
@@ -0,0 +1,357 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import math
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import (QApplication, QGridLayout, QLayout, QLineEdit,
+        QSizePolicy, QToolButton, QWidget)
+
+
+class Button(QToolButton):
+    def __init__(self, text, parent=None):
+        super(Button, self).__init__(parent)
+
+        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
+        self.setText(text)
+
+    def sizeHint(self):
+        size = super(Button, self).sizeHint()
+        size.setHeight(size.height() + 20)
+        size.setWidth(max(size.width(), size.height()))
+        return size
+
+
+class Calculator(QWidget):
+    NumDigitButtons = 10
+    
+    def __init__(self, parent=None):
+        super(Calculator, self).__init__(parent)
+
+        self.pendingAdditiveOperator = ''
+        self.pendingMultiplicativeOperator = ''
+
+        self.sumInMemory = 0.0
+        self.sumSoFar = 0.0
+        self.factorSoFar = 0.0
+        self.waitingForOperand = True
+
+        self.display = QLineEdit('0')
+        self.display.setReadOnly(True)
+        self.display.setAlignment(Qt.AlignRight)
+        self.display.setMaxLength(15)
+
+        font = self.display.font()
+        font.setPointSize(font.pointSize() + 8)
+        self.display.setFont(font)
+
+        self.digitButtons = []
+        
+        for i in range(Calculator.NumDigitButtons):
+            self.digitButtons.append(self.createButton(str(i),
+                    self.digitClicked))
+
+        self.pointButton = self.createButton(".", self.pointClicked)
+        self.changeSignButton = self.createButton(u"\N{PLUS-MINUS SIGN}",
+                self.changeSignClicked)
+
+        self.backspaceButton = self.createButton("Backspace",
+                self.backspaceClicked)
+        self.clearButton = self.createButton("Clear", self.clear)
+        self.clearAllButton = self.createButton("Clear All", self.clearAll)
+
+        self.clearMemoryButton = self.createButton("MC", self.clearMemory)
+        self.readMemoryButton = self.createButton("MR", self.readMemory)
+        self.setMemoryButton = self.createButton("MS", self.setMemory)
+        self.addToMemoryButton = self.createButton("M+", self.addToMemory)
+
+        self.divisionButton = self.createButton(u"\N{DIVISION SIGN}",
+                self.multiplicativeOperatorClicked)
+        self.timesButton = self.createButton(u"\N{MULTIPLICATION SIGN}",
+                self.multiplicativeOperatorClicked)
+        self.minusButton = self.createButton("-", self.additiveOperatorClicked)
+        self.plusButton = self.createButton("+", self.additiveOperatorClicked)
+
+        self.squareRootButton = self.createButton("Sqrt",
+                self.unaryOperatorClicked)
+        self.powerButton = self.createButton(u"x\N{SUPERSCRIPT TWO}",
+                self.unaryOperatorClicked)
+        self.reciprocalButton = self.createButton("1/x",
+                self.unaryOperatorClicked)
+        self.equalButton = self.createButton("=", self.equalClicked)
+
+        mainLayout = QGridLayout()
+        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
+
+        mainLayout.addWidget(self.display, 0, 0, 1, 6)
+        mainLayout.addWidget(self.backspaceButton, 1, 0, 1, 2)
+        mainLayout.addWidget(self.clearButton, 1, 2, 1, 2)
+        mainLayout.addWidget(self.clearAllButton, 1, 4, 1, 2)
+
+        mainLayout.addWidget(self.clearMemoryButton, 2, 0)
+        mainLayout.addWidget(self.readMemoryButton, 3, 0)
+        mainLayout.addWidget(self.setMemoryButton, 4, 0)
+        mainLayout.addWidget(self.addToMemoryButton, 5, 0)
+
+        for i in range(1, Calculator.NumDigitButtons):
+            row = ((9 - i) / 3) + 2
+            column = ((i - 1) % 3) + 1
+            mainLayout.addWidget(self.digitButtons[i], row, column)
+
+        mainLayout.addWidget(self.digitButtons[0], 5, 1)
+        mainLayout.addWidget(self.pointButton, 5, 2)
+        mainLayout.addWidget(self.changeSignButton, 5, 3)
+
+        mainLayout.addWidget(self.divisionButton, 2, 4)
+        mainLayout.addWidget(self.timesButton, 3, 4)
+        mainLayout.addWidget(self.minusButton, 4, 4)
+        mainLayout.addWidget(self.plusButton, 5, 4)
+
+        mainLayout.addWidget(self.squareRootButton, 2, 5)
+        mainLayout.addWidget(self.powerButton, 3, 5)
+        mainLayout.addWidget(self.reciprocalButton, 4, 5)
+        mainLayout.addWidget(self.equalButton, 5, 5)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Calculator")
+
+    def digitClicked(self):
+        clickedButton = self.sender()
+        digitValue = int(clickedButton.text())
+
+        if self.display.text() == '0' and digitValue == 0.0:
+            return
+
+        if self.waitingForOperand:
+            self.display.clear()
+            self.waitingForOperand = False
+
+        self.display.setText(self.display.text() + str(digitValue))
+
+    def unaryOperatorClicked(self):
+        clickedButton = self.sender()
+        clickedOperator = clickedButton.text()
+        operand = float(self.display.text())
+
+        if clickedOperator == "Sqrt":
+            if operand < 0.0:
+                self.abortOperation()
+                return
+
+            result = math.sqrt(operand)
+        elif clickedOperator == u"x\N{SUPERSCRIPT TWO}":
+            result = math.pow(operand, 2.0)
+        elif clickedOperator == "1/x":
+            if operand == 0.0:
+                self.abortOperation()
+                return
+
+            result = 1.0 / operand
+
+        self.display.setText(str(result))
+        self.waitingForOperand = True
+
+    def additiveOperatorClicked(self):
+        clickedButton = self.sender()
+        clickedOperator = clickedButton.text()
+        operand = float(self.display.text())
+
+        if self.pendingMultiplicativeOperator:
+            if not self.calculate(operand, self.pendingMultiplicativeOperator):
+                self.abortOperation()
+                return
+
+            self.display.setText(str(self.factorSoFar))
+            operand = self.factorSoFar
+            self.factorSoFar = 0.0
+            self.pendingMultiplicativeOperator = ''
+
+        if self.pendingAdditiveOperator:
+            if not self.calculate(operand, self.pendingAdditiveOperator):
+                self.abortOperation()
+                return
+
+            self.display.setText(str(self.sumSoFar))
+        else:
+            self.sumSoFar = operand
+
+        self.pendingAdditiveOperator = clickedOperator
+        self.waitingForOperand = True
+
+    def multiplicativeOperatorClicked(self):
+        clickedButton = self.sender()
+        clickedOperator = clickedButton.text()
+        operand = float(self.display.text())
+
+        if self.pendingMultiplicativeOperator:
+            if not self.calculate(operand, self.pendingMultiplicativeOperator):
+                self.abortOperation()
+                return
+
+            self.display.setText(str(self.factorSoFar))
+        else:
+            self.factorSoFar = operand
+
+        self.pendingMultiplicativeOperator = clickedOperator
+        self.waitingForOperand = True
+
+    def equalClicked(self):
+        operand = float(self.display.text())
+
+        if self.pendingMultiplicativeOperator:
+            if not self.calculate(operand, self.pendingMultiplicativeOperator):
+                self.abortOperation()
+                return
+
+            operand = self.factorSoFar
+            self.factorSoFar = 0.0
+            self.pendingMultiplicativeOperator = ''
+
+        if self.pendingAdditiveOperator:
+            if not self.calculate(operand, self.pendingAdditiveOperator):
+                self.abortOperation()
+                return
+
+            self.pendingAdditiveOperator = ''
+        else:
+            self.sumSoFar = operand
+
+        self.display.setText(str(self.sumSoFar))
+        self.sumSoFar = 0.0
+        self.waitingForOperand = True
+
+    def pointClicked(self):
+        if self.waitingForOperand:
+            self.display.setText('0')
+
+        if "." not in self.display.text():
+            self.display.setText(self.display.text() + ".")
+
+        self.waitingForOperand = False
+
+    def changeSignClicked(self):
+        text = self.display.text()
+        value = float(text)
+
+        if value > 0.0:
+            text = "-" + text
+        elif value < 0.0:
+            text = text[1:]
+
+        self.display.setText(text)
+
+    def backspaceClicked(self):
+        if self.waitingForOperand:
+            return
+
+        text = self.display.text()[:-1]
+        if not text:
+            text = '0'
+            self.waitingForOperand = True
+
+        self.display.setText(text)
+
+    def clear(self):
+        if self.waitingForOperand:
+            return
+
+        self.display.setText('0')
+        self.waitingForOperand = True
+
+    def clearAll(self):
+        self.sumSoFar = 0.0
+        self.factorSoFar = 0.0
+        self.pendingAdditiveOperator = ''
+        self.pendingMultiplicativeOperator = ''
+        self.display.setText('0')
+        self.waitingForOperand = True
+
+    def clearMemory(self):
+        self.sumInMemory = 0.0
+
+    def readMemory(self):
+        self.display.setText(str(self.sumInMemory))
+        self.waitingForOperand = True
+
+    def setMemory(self):
+        self.equalClicked()
+        self.sumInMemory = float(self.display.text())
+
+    def addToMemory(self):
+        self.equalClicked()
+        self.sumInMemory += float(self.display.text())
+
+    def createButton(self, text, member):
+        button = Button(text)
+        button.clicked.connect(member)
+        return button
+
+    def abortOperation(self):
+        self.clearAll()
+        self.display.setText("####")
+
+    def calculate(self, rightOperand, pendingOperator):
+        if pendingOperator == "+":
+            self.sumSoFar += rightOperand
+        elif pendingOperator == "-":
+            self.sumSoFar -= rightOperand
+        elif pendingOperator == u"\N{MULTIPLICATION SIGN}":
+            self.factorSoFar *= rightOperand
+        elif pendingOperator == u"\N{DIVISION SIGN}":
+            if rightOperand == 0.0:
+                return False
+
+            self.factorSoFar /= rightOperand
+
+        return True
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    calc = Calculator()
+    calc.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/calendarwidget.py b/examples/widgets/calendarwidget.py
new file mode 100755
index 0000000..4cd8f34
--- /dev/null
+++ b/examples/widgets/calendarwidget.py
@@ -0,0 +1,417 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+###########################################################################
+
+
+from PyQt5.QtCore import QDate, QLocale, Qt
+from PyQt5.QtGui import QFont, QTextCharFormat
+from PyQt5.QtWidgets import (QApplication, QCalendarWidget, QCheckBox,
+        QComboBox, QDateEdit, QGridLayout, QGroupBox, QHBoxLayout, QLabel,
+        QLayout, QWidget)
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.createPreviewGroupBox()
+        self.createGeneralOptionsGroupBox()
+        self.createDatesGroupBox()
+        self.createTextFormatsGroupBox()
+
+        layout = QGridLayout()
+        layout.addWidget(self.previewGroupBox, 0, 0)
+        layout.addWidget(self.generalOptionsGroupBox, 0, 1)
+        layout.addWidget(self.datesGroupBox, 1, 0)
+        layout.addWidget(self.textFormatsGroupBox, 1, 1)
+        layout.setSizeConstraint(QLayout.SetFixedSize)
+        self.setLayout(layout)
+
+        self.previewLayout.setRowMinimumHeight(0,
+                self.calendar.sizeHint().height())
+        self.previewLayout.setColumnMinimumWidth(0,
+                self.calendar.sizeHint().width())
+
+        self.setWindowTitle("Calendar Widget")
+
+    def localeChanged(self, index):
+        self.calendar.setLocale(self.localeCombo.itemData(index))
+
+    def firstDayChanged(self, index):
+        self.calendar.setFirstDayOfWeek(
+                Qt.DayOfWeek(self.firstDayCombo.itemData(index)))
+
+    def selectionModeChanged(self, index):
+        self.calendar.setSelectionMode(
+                QCalendarWidget.SelectionMode(
+                        self.selectionModeCombo.itemData(index)))
+
+    def horizontalHeaderChanged(self, index):
+        self.calendar.setHorizontalHeaderFormat(
+                QCalendarWidget.HorizontalHeaderFormat(
+                        self.horizontalHeaderCombo.itemData(index)))
+
+    def verticalHeaderChanged(self, index):
+        self.calendar.setVerticalHeaderFormat(
+                QCalendarWidget.VerticalHeaderFormat(
+                        self.verticalHeaderCombo.itemData(index)))
+
+    def selectedDateChanged(self):
+        self.currentDateEdit.setDate(self.calendar.selectedDate())
+
+    def minimumDateChanged(self, date):
+        self.calendar.setMinimumDate(date)
+        self.maximumDateEdit.setDate(self.calendar.maximumDate())
+
+    def maximumDateChanged(self, date):
+        self.calendar.setMaximumDate(date)
+        self.minimumDateEdit.setDate(self.calendar.minimumDate())
+
+    def weekdayFormatChanged(self):
+        format = QTextCharFormat()
+        format.setForeground(
+                Qt.GlobalColor(
+                        self.weekdayColorCombo.itemData(
+                                self.weekdayColorCombo.currentIndex())))
+
+        self.calendar.setWeekdayTextFormat(Qt.Monday, format)
+        self.calendar.setWeekdayTextFormat(Qt.Tuesday, format)
+        self.calendar.setWeekdayTextFormat(Qt.Wednesday, format)
+        self.calendar.setWeekdayTextFormat(Qt.Thursday, format)
+        self.calendar.setWeekdayTextFormat(Qt.Friday, format)
+
+    def weekendFormatChanged(self):
+        format = QTextCharFormat()
+        format.setForeground(
+                Qt.GlobalColor(
+                        self.weekendColorCombo.itemData(
+                                self.weekendColorCombo.currentIndex())))
+
+        self.calendar.setWeekdayTextFormat(Qt.Saturday, format)
+        self.calendar.setWeekdayTextFormat(Qt.Sunday, format)
+
+    def reformatHeaders(self):
+        text = self.headerTextFormatCombo.currentText()
+        format = QTextCharFormat()
+
+        if text == "Bold":
+            format.setFontWeight(QFont.Bold)
+        elif text == "Italic":
+            format.setFontItalic(True)
+        elif text == "Green":
+            format.setForeground(Qt.green)
+
+        self.calendar.setHeaderTextFormat(format)
+
+    def reformatCalendarPage(self):
+        if self.firstFridayCheckBox.isChecked():
+            firstFriday = QDate(self.calendar.yearShown(),
+                    self.calendar.monthShown(), 1)
+
+            while firstFriday.dayOfWeek() != Qt.Friday:
+                firstFriday = firstFriday.addDays(1)
+
+            firstFridayFormat = QTextCharFormat()
+            firstFridayFormat.setForeground(Qt.blue)
+
+            self.calendar.setDateTextFormat(firstFriday, firstFridayFormat)
+
+        # May 1st in Red takes precedence.
+        if self.mayFirstCheckBox.isChecked():
+            mayFirst = QDate(self.calendar.yearShown(), 5, 1)
+
+            mayFirstFormat = QTextCharFormat()
+            mayFirstFormat.setForeground(Qt.red)
+
+            self.calendar.setDateTextFormat(mayFirst, mayFirstFormat)
+
+    def createPreviewGroupBox(self):
+        self.previewGroupBox = QGroupBox("Preview")
+
+        self.calendar = QCalendarWidget()
+        self.calendar.setMinimumDate(QDate(1900, 1, 1))
+        self.calendar.setMaximumDate(QDate(3000, 1, 1))
+        self.calendar.setGridVisible(True)
+        self.calendar.currentPageChanged.connect(self.reformatCalendarPage)
+
+        self.previewLayout = QGridLayout()
+        self.previewLayout.addWidget(self.calendar, 0, 0, Qt.AlignCenter)
+        self.previewGroupBox.setLayout(self.previewLayout)
+ 
+    def createGeneralOptionsGroupBox(self):
+        self.generalOptionsGroupBox = QGroupBox("General Options")
+
+        self.localeCombo = QComboBox()
+
+        curLocaleIndex = -1
+        index = 0
+
+        for lid in range(QLocale.C, QLocale.LastLanguage + 1):
+            lang = QLocale.Language(lid)
+            countries = QLocale.countriesForLanguage(lang)
+            for country in countries:
+                label = "%s/%s" % (QLocale.languageToString(lang),
+                                   QLocale.countryToString(country))
+                locale = QLocale(lang, country)
+                if self.locale().language() == lang and self.locale().country() == country:
+                    curLocaleIndex = index
+
+                self.localeCombo.addItem(label, locale)
+                index += 1
+
+        if curLocaleIndex != -1:
+            self.localeCombo.setCurrentIndex(curLocaleIndex)
+
+        self.localeLabel = QLabel("&Locale")
+        self.localeLabel.setBuddy(self.localeCombo)
+
+        self.firstDayCombo = QComboBox()
+        self.firstDayCombo.addItem("Sunday", Qt.Sunday)
+        self.firstDayCombo.addItem("Monday", Qt.Monday)
+        self.firstDayCombo.addItem("Tuesday", Qt.Tuesday)
+        self.firstDayCombo.addItem("Wednesday", Qt.Wednesday)
+        self.firstDayCombo.addItem("Thursday", Qt.Thursday)
+        self.firstDayCombo.addItem("Friday", Qt.Friday)
+        self.firstDayCombo.addItem("Saturday", Qt.Saturday)
+
+        self.firstDayLabel = QLabel("Wee&k starts on:")
+        self.firstDayLabel.setBuddy(self.firstDayCombo)
+
+        self.selectionModeCombo = QComboBox()
+        self.selectionModeCombo.addItem("Single selection",
+                QCalendarWidget.SingleSelection)
+        self.selectionModeCombo.addItem("None",
+                QCalendarWidget.NoSelection)
+        self.selectionModeLabel = QLabel("&Selection mode:")
+        self.selectionModeLabel.setBuddy(self.selectionModeCombo)
+
+        self.gridCheckBox = QCheckBox("&Grid")
+        self.gridCheckBox.setChecked(self.calendar.isGridVisible())
+
+        self.navigationCheckBox = QCheckBox("&Navigation bar")
+        self.navigationCheckBox.setChecked(True)
+
+        self.horizontalHeaderCombo = QComboBox()
+        self.horizontalHeaderCombo.addItem("Single letter day names",
+                QCalendarWidget.SingleLetterDayNames)
+        self.horizontalHeaderCombo.addItem("Short day names",
+                QCalendarWidget.ShortDayNames)
+        self.horizontalHeaderCombo.addItem("Long day names",
+                QCalendarWidget.LongDayNames)
+        self.horizontalHeaderCombo.addItem("None",
+                QCalendarWidget.NoHorizontalHeader)
+        self.horizontalHeaderCombo.setCurrentIndex(1)
+
+        self.horizontalHeaderLabel = QLabel("&Horizontal header:")
+        self.horizontalHeaderLabel.setBuddy(self.horizontalHeaderCombo)
+
+        self.verticalHeaderCombo = QComboBox()
+        self.verticalHeaderCombo.addItem("ISO week numbers",
+                QCalendarWidget.ISOWeekNumbers)
+        self.verticalHeaderCombo.addItem("None",
+                QCalendarWidget.NoVerticalHeader)
+
+        self.verticalHeaderLabel = QLabel("&Vertical header:")
+        self.verticalHeaderLabel.setBuddy(self.verticalHeaderCombo)
+
+        self.localeCombo.currentIndexChanged.connect(self.localeChanged)
+        self.firstDayCombo.currentIndexChanged.connect(self.firstDayChanged)
+        self.selectionModeCombo.currentIndexChanged.connect(
+                self.selectionModeChanged)
+        self.gridCheckBox.toggled.connect(self.calendar.setGridVisible)
+        self.navigationCheckBox.toggled.connect(
+                self.calendar.setNavigationBarVisible)
+        self.horizontalHeaderCombo.currentIndexChanged.connect(
+                self.horizontalHeaderChanged)
+        self.verticalHeaderCombo.currentIndexChanged.connect(
+                self.verticalHeaderChanged)
+
+        checkBoxLayout = QHBoxLayout()
+        checkBoxLayout.addWidget(self.gridCheckBox)
+        checkBoxLayout.addStretch()
+        checkBoxLayout.addWidget(self.navigationCheckBox)
+
+        outerLayout = QGridLayout()
+        outerLayout.addWidget(self.localeLabel, 0, 0)
+        outerLayout.addWidget(self.localeCombo, 0, 1)
+        outerLayout.addWidget(self.firstDayLabel, 1, 0)
+        outerLayout.addWidget(self.firstDayCombo, 1, 1)
+        outerLayout.addWidget(self.selectionModeLabel, 2, 0)
+        outerLayout.addWidget(self.selectionModeCombo, 2, 1)
+        outerLayout.addLayout(checkBoxLayout, 3, 0, 1, 2)
+        outerLayout.addWidget(self.horizontalHeaderLabel, 4, 0)
+        outerLayout.addWidget(self.horizontalHeaderCombo, 4, 1)
+        outerLayout.addWidget(self.verticalHeaderLabel, 5, 0)
+        outerLayout.addWidget(self.verticalHeaderCombo, 5, 1)
+        self.generalOptionsGroupBox.setLayout(outerLayout)
+
+        self.firstDayChanged(self.firstDayCombo.currentIndex())
+        self.selectionModeChanged(self.selectionModeCombo.currentIndex())
+        self.horizontalHeaderChanged(self.horizontalHeaderCombo.currentIndex())
+        self.verticalHeaderChanged(self.verticalHeaderCombo.currentIndex())
+ 
+    def createDatesGroupBox(self):
+        self.datesGroupBox = QGroupBox(self.tr("Dates"))
+
+        self.minimumDateEdit = QDateEdit()
+        self.minimumDateEdit.setDisplayFormat('MMM d yyyy')
+        self.minimumDateEdit.setDateRange(self.calendar.minimumDate(),
+                                          self.calendar.maximumDate())
+        self.minimumDateEdit.setDate(self.calendar.minimumDate())
+
+        self.minimumDateLabel = QLabel("&Minimum Date:")
+        self.minimumDateLabel.setBuddy(self.minimumDateEdit)
+
+        self.currentDateEdit = QDateEdit()
+        self.currentDateEdit.setDisplayFormat('MMM d yyyy')
+        self.currentDateEdit.setDate(self.calendar.selectedDate())
+        self.currentDateEdit.setDateRange(self.calendar.minimumDate(),
+                self.calendar.maximumDate())
+
+        self.currentDateLabel = QLabel("&Current Date:")
+        self.currentDateLabel.setBuddy(self.currentDateEdit)
+
+        self.maximumDateEdit = QDateEdit()
+        self.maximumDateEdit.setDisplayFormat('MMM d yyyy')
+        self.maximumDateEdit.setDateRange(self.calendar.minimumDate(),
+                self.calendar.maximumDate())
+        self.maximumDateEdit.setDate(self.calendar.maximumDate())
+
+        self.maximumDateLabel = QLabel("Ma&ximum Date:")
+        self.maximumDateLabel.setBuddy(self.maximumDateEdit)
+
+        self.currentDateEdit.dateChanged.connect(self.calendar.setSelectedDate)
+        self.calendar.selectionChanged.connect(self.selectedDateChanged)
+        self.minimumDateEdit.dateChanged.connect(self.minimumDateChanged)
+        self.maximumDateEdit.dateChanged.connect(self.maximumDateChanged)
+ 
+        dateBoxLayout = QGridLayout()
+        dateBoxLayout.addWidget(self.currentDateLabel, 1, 0)
+        dateBoxLayout.addWidget(self.currentDateEdit, 1, 1)
+        dateBoxLayout.addWidget(self.minimumDateLabel, 0, 0)
+        dateBoxLayout.addWidget(self.minimumDateEdit, 0, 1)
+        dateBoxLayout.addWidget(self.maximumDateLabel, 2, 0)
+        dateBoxLayout.addWidget(self.maximumDateEdit, 2, 1)
+        dateBoxLayout.setRowStretch(3, 1)
+
+        self.datesGroupBox.setLayout(dateBoxLayout)
+
+    def createTextFormatsGroupBox(self):
+        self.textFormatsGroupBox = QGroupBox("Text Formats")
+
+        self.weekdayColorCombo = self.createColorComboBox()
+        self.weekdayColorCombo.setCurrentIndex(
+                self.weekdayColorCombo.findText("Black"))
+
+        self.weekdayColorLabel = QLabel("&Weekday color:")
+        self.weekdayColorLabel.setBuddy(self.weekdayColorCombo)
+
+        self.weekendColorCombo = self.createColorComboBox()
+        self.weekendColorCombo.setCurrentIndex(
+                self.weekendColorCombo.findText("Red"))
+
+        self.weekendColorLabel = QLabel("Week&end color:")
+        self.weekendColorLabel.setBuddy(self.weekendColorCombo)
+
+        self.headerTextFormatCombo = QComboBox()
+        self.headerTextFormatCombo.addItem("Bold")
+        self.headerTextFormatCombo.addItem("Italic")
+        self.headerTextFormatCombo.addItem("Plain")
+
+        self.headerTextFormatLabel = QLabel("&Header text:")
+        self.headerTextFormatLabel.setBuddy(self.headerTextFormatCombo)
+
+        self.firstFridayCheckBox = QCheckBox("&First Friday in blue")
+
+        self.mayFirstCheckBox = QCheckBox("May &1 in red")
+
+        self.weekdayColorCombo.currentIndexChanged.connect(
+                self.weekdayFormatChanged)
+        self.weekendColorCombo.currentIndexChanged.connect(
+                self.weekendFormatChanged)
+        self.headerTextFormatCombo.currentIndexChanged.connect(
+                self.reformatHeaders)
+        self.firstFridayCheckBox.toggled.connect(self.reformatCalendarPage)
+        self.mayFirstCheckBox.toggled.connect(self.reformatCalendarPage)
+
+        checkBoxLayout = QHBoxLayout()
+        checkBoxLayout.addWidget(self.firstFridayCheckBox)
+        checkBoxLayout.addStretch()
+        checkBoxLayout.addWidget(self.mayFirstCheckBox)
+
+        outerLayout = QGridLayout()
+        outerLayout.addWidget(self.weekdayColorLabel, 0, 0)
+        outerLayout.addWidget(self.weekdayColorCombo, 0, 1)
+        outerLayout.addWidget(self.weekendColorLabel, 1, 0)
+        outerLayout.addWidget(self.weekendColorCombo, 1, 1)
+        outerLayout.addWidget(self.headerTextFormatLabel, 2, 0)
+        outerLayout.addWidget(self.headerTextFormatCombo, 2, 1)
+        outerLayout.addLayout(checkBoxLayout, 3, 0, 1, 2)
+        self.textFormatsGroupBox.setLayout(outerLayout)
+
+        self.weekdayFormatChanged()
+        self.weekendFormatChanged()
+
+        self.reformatHeaders()
+        self.reformatCalendarPage()
+ 
+    def createColorComboBox(self):
+        comboBox = QComboBox()
+        comboBox.addItem("Red", Qt.red)
+        comboBox.addItem("Blue", Qt.blue)
+        comboBox.addItem("Black", Qt.black)
+        comboBox.addItem("Magenta", Qt.magenta)
+
+        return comboBox
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    window = Window()
+    window.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/widgets/charactermap.py b/examples/widgets/charactermap.py
new file mode 100755
index 0000000..95da0b0
--- /dev/null
+++ b/examples/widgets/charactermap.py
@@ -0,0 +1,281 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import unicodedata
+
+from PyQt5.QtCore import pyqtSignal, QSize, Qt
+from PyQt5.QtGui import (QClipboard, QFont, QFontDatabase, QFontMetrics,
+        QPainter)
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QFontComboBox,
+        QHBoxLayout, QLabel, QLineEdit, QMainWindow, QPushButton, QScrollArea,
+        QToolTip, QVBoxLayout, QWidget)
+
+
+class CharacterWidget(QWidget):
+
+    characterSelected = pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super(CharacterWidget, self).__init__(parent)
+
+        self.displayFont = QFont()
+        self.squareSize = 24
+        self.columns = 16
+        self.lastKey = -1
+        self.setMouseTracking(True)
+
+    def updateFont(self, fontFamily):
+        self.displayFont.setFamily(fontFamily)
+        self.squareSize = max(24, QFontMetrics(self.displayFont).xHeight() * 3)
+        self.adjustSize()
+        self.update()
+
+    def updateSize(self, fontSize):
+        fontSize, _ = fontSize.toInt()
+        self.displayFont.setPointSize(fontSize)
+        self.squareSize = max(24, QFontMetrics(self.displayFont).xHeight() * 3)
+        self.adjustSize()
+        self.update() 
+
+    def updateStyle(self, fontStyle):
+        fontDatabase = QFontDatabase()
+        oldStrategy = self.displayFont.styleStrategy()
+        self.displayFont = fontDatabase.font(self.displayFont.family(),
+                fontStyle, self.displayFont.pointSize())
+        self.displayFont.setStyleStrategy(oldStrategy)
+        self.squareSize = max(24, QFontMetrics(self.displayFont).xHeight() * 3)
+        self.adjustSize()
+        self.update()
+
+    def updateFontMerging(self, enable):
+        if enable:
+            self.displayFont.setStyleStrategy(QFont.PreferDefault)
+        else:
+            self.displayFont.setStyleStrategy(QFont.NoFontMerging)
+        self.adjustSize()
+        self.update()
+
+    def sizeHint(self):
+        return QSize(self.columns * self.squareSize,
+                (65536 / self.columns) * self.squareSize)
+
+    def mouseMoveEvent(self, event):
+        widgetPosition = self.mapFromGlobal(event.globalPos())
+        key = (widgetPosition.y() // self.squareSize) * self.columns + widgetPosition.x() // self.squareSize
+
+        text = '<p>Character: <span style="font-size: 24pt; font-family: %s">%s</span><p>Value: 0x%x' % (self.displayFont.family(), self._chr(key), key)
+        QToolTip.showText(event.globalPos(), text, self)
+
+    def mousePressEvent(self, event):
+        if event.button() == Qt.LeftButton:
+            self.lastKey = (event.y() // self.squareSize) * self.columns + event.x() // self.squareSize
+            key_ch = self._chr(self.lastKey)
+
+            if unicodedata.category(key_ch) != 'Cn':
+                self.characterSelected.emit(key_ch)
+            self.update()
+        else:
+            super(CharacterWidget, self).mousePressEvent(event)
+
+    def paintEvent(self, event):
+        painter = QPainter(self)
+        painter.fillRect(event.rect(), Qt.white)
+        painter.setFont(self.displayFont)
+
+        redrawRect = event.rect()
+        beginRow = redrawRect.top() // self.squareSize
+        endRow = redrawRect.bottom() // self.squareSize
+        beginColumn = redrawRect.left() // self.squareSize
+        endColumn = redrawRect.right() // self.squareSize
+
+        painter.setPen(Qt.gray)
+        for row in range(beginRow, endRow + 1):
+            for column in range(beginColumn, endColumn + 1):
+                painter.drawRect(column * self.squareSize,
+                        row * self.squareSize, self.squareSize,
+                        self.squareSize)
+
+        fontMetrics = QFontMetrics(self.displayFont)
+        painter.setPen(Qt.black)
+        for row in range(beginRow, endRow + 1):
+            for column in range(beginColumn, endColumn + 1):
+                key = row * self.columns + column
+                painter.setClipRect(column * self.squareSize,
+                        row * self.squareSize, self.squareSize,
+                        self.squareSize)
+
+                if key == self.lastKey:
+                    painter.fillRect(column * self.squareSize + 1,
+                            row * self.squareSize + 1, self.squareSize,
+                            self.squareSize, Qt.red)
+
+                key_ch = self._chr(key)
+                painter.drawText(column * self.squareSize + (self.squareSize / 2) - fontMetrics.width(key_ch) / 2,
+                        row * self.squareSize + 4 + fontMetrics.ascent(),
+                        key_ch)
+
+    @staticmethod
+    def _chr(codepoint):
+        try:
+            # Python v2.
+            return unichr(codepoint)
+        except NameError:
+            # Python v3.
+            return chr(codepoint)
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        centralWidget = QWidget()
+
+        fontLabel = QLabel("Font:")
+        self.fontCombo = QFontComboBox()
+        sizeLabel = QLabel("Size:")
+        self.sizeCombo = QComboBox()
+        styleLabel = QLabel("Style:")
+        self.styleCombo = QComboBox()
+        fontMergingLabel = QLabel("Automatic Font Merging:")
+        self.fontMerging = QCheckBox()
+        self.fontMerging.setChecked(True)
+
+        self.scrollArea = QScrollArea()
+        self.characterWidget = CharacterWidget()
+        self.scrollArea.setWidget(self.characterWidget)
+
+        self.findStyles(self.fontCombo.currentFont())
+        self.findSizes(self.fontCombo.currentFont())
+
+        self.lineEdit = QLineEdit()
+        clipboardButton = QPushButton("&To clipboard")
+
+        self.clipboard = QApplication.clipboard()
+
+        self.fontCombo.currentFontChanged.connect(self.findStyles)
+        self.fontCombo.activated[str].connect(self.characterWidget.updateFont)
+        self.styleCombo.activated[str].connect(self.characterWidget.updateStyle)
+        self.sizeCombo.currentIndexChanged[str].connect(self.characterWidget.updateSize)
+        self.characterWidget.characterSelected.connect(self.insertCharacter)
+        clipboardButton.clicked.connect(self.updateClipboard)
+
+        controlsLayout = QHBoxLayout()
+        controlsLayout.addWidget(fontLabel)
+        controlsLayout.addWidget(self.fontCombo, 1)
+        controlsLayout.addWidget(sizeLabel)
+        controlsLayout.addWidget(self.sizeCombo, 1)
+        controlsLayout.addWidget(styleLabel)
+        controlsLayout.addWidget(self.styleCombo, 1)
+        controlsLayout.addWidget(fontMergingLabel)
+        controlsLayout.addWidget(self.fontMerging, 1)
+        controlsLayout.addStretch(1)
+
+        lineLayout = QHBoxLayout()
+        lineLayout.addWidget(self.lineEdit, 1)
+        lineLayout.addSpacing(12)
+        lineLayout.addWidget(clipboardButton)
+
+        centralLayout = QVBoxLayout()
+        centralLayout.addLayout(controlsLayout)
+        centralLayout.addWidget(self.scrollArea, 1)
+        centralLayout.addSpacing(4)
+        centralLayout.addLayout(lineLayout)
+        centralWidget.setLayout(centralLayout)
+
+        self.setCentralWidget(centralWidget)
+        self.setWindowTitle("Character Map")
+
+    def findStyles(self, font):
+        fontDatabase = QFontDatabase()
+        currentItem = self.styleCombo.currentText()
+        self.styleCombo.clear()
+
+        for style in fontDatabase.styles(font.family()):
+            self.styleCombo.addItem(style)
+
+        styleIndex = self.styleCombo.findText(currentItem)
+        if styleIndex == -1:
+            self.styleCombo.setCurrentIndex(0)
+        else:
+            self.styleCombo.setCurrentIndex(styleIndex)
+
+    def findSizes(self, font):
+        fontDatabase = QFontDatabase()
+        currentSize = self.sizeCombo.currentText()
+        self.sizeCombo.blockSignals(True)
+        self.sizeCombo.clear()
+
+        if fontDatabase.isSmoothlyScalable(font.family(), fontDatabase.styleString(font)):
+            for size in QFontDatabase.standardSizes():
+                self.sizeCombo.addItem(str(size))
+                self.sizeCombo.setEditable(True)
+        else:
+            for size in fontDatabase.smoothSizes(font.family(), fontDatabase.styleString(font)):
+                self.sizeCombo.addItem(str(size))
+                self.sizeCombo.setEditable(False)
+
+        self.sizeCombo.blockSignals(False)
+
+        sizeIndex = self.sizeCombo.findText(currentSize)
+        if sizeIndex == -1:
+            self.sizeCombo.setCurrentIndex(max(0, self.sizeCombo.count() / 3))
+        else:
+            self.sizeCombo.setCurrentIndex(sizeIndex)
+
+    def insertCharacter(self, character):
+        self.lineEdit.insert(character)
+
+    def updateClipboard(self):
+        self.clipboard.setText(self.lineEdit.text(), QClipboard.Clipboard)
+        self.clipboard.setText(self.lineEdit.text(), QClipboard.Selection)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/digitalclock.py b/examples/widgets/digitalclock.py
new file mode 100755
index 0000000..451a2eb
--- /dev/null
+++ b/examples/widgets/digitalclock.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QTime, QTimer
+from PyQt5.QtWidgets import QApplication, QLCDNumber
+
+
+class DigitalClock(QLCDNumber):
+    def __init__(self, parent=None):
+        super(DigitalClock, self).__init__(parent)
+
+        self.setSegmentStyle(QLCDNumber.Filled)
+
+        timer = QTimer(self)
+        timer.timeout.connect(self.showTime)
+        timer.start(1000)
+
+        self.showTime()
+
+        self.setWindowTitle("Digital Clock")
+        self.resize(150, 60)
+
+    def showTime(self):
+        time = QTime.currentTime()
+        text = time.toString('hh:mm')
+        if (time.second() % 2) == 0:
+            text = text[:2] + ' ' + text[3:]
+
+        self.display(text)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    clock = DigitalClock()
+    clock.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/groupbox.py b/examples/widgets/groupbox.py
new file mode 100755
index 0000000..d6f4d3b
--- /dev/null
+++ b/examples/widgets/groupbox.py
@@ -0,0 +1,169 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QGridLayout, QGroupBox,
+        QMenu, QPushButton, QRadioButton, QVBoxLayout, QWidget)
+
+
+class Window(QWidget):
+    def __init__(self, parent=None):
+        super(Window, self).__init__(parent)
+
+        grid = QGridLayout()
+        grid.addWidget(self.createFirstExclusiveGroup(), 0, 0)
+        grid.addWidget(self.createSecondExclusiveGroup(), 1, 0)
+        grid.addWidget(self.createNonExclusiveGroup(), 0, 1)
+        grid.addWidget(self.createPushButtonGroup(), 1, 1)
+        self.setLayout(grid)
+
+        self.setWindowTitle("Group Box")
+        self.resize(480, 320)
+
+    def createFirstExclusiveGroup(self):
+        groupBox = QGroupBox("Exclusive Radio Buttons")
+
+        radio1 = QRadioButton("&Radio button 1")
+        radio2 = QRadioButton("R&adio button 2")
+        radio3 = QRadioButton("Ra&dio button 3")
+
+        radio1.setChecked(True)
+
+        vbox = QVBoxLayout()
+        vbox.addWidget(radio1)
+        vbox.addWidget(radio2)
+        vbox.addWidget(radio3)
+        vbox.addStretch(1)
+        groupBox.setLayout(vbox)
+
+        return groupBox
+
+    def createSecondExclusiveGroup(self):
+        groupBox = QGroupBox("E&xclusive Radio Buttons")
+        groupBox.setCheckable(True)
+        groupBox.setChecked(False)
+
+        radio1 = QRadioButton("Rad&io button 1")
+        radio2 = QRadioButton("Radi&o button 2")
+        radio3 = QRadioButton("Radio &button 3")
+        radio1.setChecked(True)
+        checkBox = QCheckBox("Ind&ependent checkbox")
+        checkBox.setChecked(True)
+
+        vbox = QVBoxLayout()
+        vbox.addWidget(radio1)
+        vbox.addWidget(radio2)
+        vbox.addWidget(radio3)
+        vbox.addWidget(checkBox)
+        vbox.addStretch(1)
+        groupBox.setLayout(vbox)
+
+        return groupBox
+
+    def createNonExclusiveGroup(self):
+        groupBox = QGroupBox("Non-Exclusive Checkboxes")
+        groupBox.setFlat(True)
+
+        checkBox1 = QCheckBox("&Checkbox 1")
+        checkBox2 = QCheckBox("C&heckbox 2")
+        checkBox2.setChecked(True)
+        tristateBox = QCheckBox("Tri-&state button")
+        tristateBox.setTristate(True)
+        tristateBox.setCheckState(Qt.PartiallyChecked)
+
+        vbox = QVBoxLayout()
+        vbox.addWidget(checkBox1)
+        vbox.addWidget(checkBox2)
+        vbox.addWidget(tristateBox)
+        vbox.addStretch(1)
+        groupBox.setLayout(vbox)
+
+        return groupBox
+
+    def createPushButtonGroup(self):
+        groupBox = QGroupBox("&Push Buttons")
+        groupBox.setCheckable(True)
+        groupBox.setChecked(True)
+
+        pushButton = QPushButton("&Normal Button")
+        toggleButton = QPushButton("&Toggle Button")
+        toggleButton.setCheckable(True)
+        toggleButton.setChecked(True)
+        flatButton = QPushButton("&Flat Button")
+        flatButton.setFlat(True)
+
+        popupButton = QPushButton("Pop&up Button")
+        menu = QMenu(self)
+        menu.addAction("&First Item")
+        menu.addAction("&Second Item")
+        menu.addAction("&Third Item")
+        menu.addAction("F&ourth Item")
+        popupButton.setMenu(menu)
+
+        newAction = menu.addAction("Submenu")
+        subMenu = QMenu("Popup Submenu", self)
+        subMenu.addAction("Item 1")
+        subMenu.addAction("Item 2")
+        subMenu.addAction("Item 3")
+        newAction.setMenu(subMenu)
+
+        vbox = QVBoxLayout()
+        vbox.addWidget(pushButton)
+        vbox.addWidget(toggleButton)
+        vbox.addWidget(flatButton)
+        vbox.addWidget(popupButton)
+        vbox.addStretch(1)
+        groupBox.setLayout(vbox)
+
+        return groupBox
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    clock = Window()
+    clock.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/icons/icons.py b/examples/widgets/icons/icons.py
new file mode 100755
index 0000000..b48af5c
--- /dev/null
+++ b/examples/widgets/icons/icons.py
@@ -0,0 +1,475 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFileInfo, QRegExp, QSize, Qt
+from PyQt5.QtGui import QIcon, QImage, QPalette, QPixmap
+from PyQt5.QtWidgets import (QAbstractItemView, QAction, QActionGroup,
+        QApplication, QComboBox, QFileDialog, QFrame, QGridLayout, QGroupBox,
+        QHBoxLayout, QHeaderView, QItemDelegate, QLabel, QMainWindow,
+        QMessageBox, QRadioButton, QSizePolicy, QSpinBox, QStyle,
+        QStyleFactory, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget)
+
+
+class IconSizeSpinBox(QSpinBox):
+    @staticmethod
+    def valueFromText(text):
+        regExp = QRegExp("(\\d+)(\\s*[xx]\\s*\\d+)?")
+
+        if regExp.exactMatch(text):
+            return int(regExp.cap(1))
+        else:
+            return 0
+
+    @staticmethod
+    def textFromValue(value):
+        return "%d x %d" % (value, value)
+
+
+class ImageDelegate(QItemDelegate):
+    def createEditor(self, parent, option, index):
+        comboBox = QComboBox(parent)
+        if index.column() == 1:
+            comboBox.addItem("Normal")
+            comboBox.addItem("Active")
+            comboBox.addItem("Disabled")
+            comboBox.addItem("Selected")
+        elif index.column() == 2:
+            comboBox.addItem("Off")
+            comboBox.addItem("On")
+
+        comboBox.activated.connect(self.emitCommitData)
+
+        return comboBox
+
+    def setEditorData(self, editor, index):
+        comboBox = editor
+        if not comboBox:
+            return
+
+        pos = comboBox.findText(index.model().data(index), Qt.MatchExactly)
+        comboBox.setCurrentIndex(pos)
+
+    def setModelData(self, editor, model, index):
+        comboBox = editor
+        if not comboBox:
+            return
+
+        model.setData(index, comboBox.currentText())
+
+    def emitCommitData(self):
+        self.commitData.emit(self.sender())
+
+
+class IconPreviewArea(QWidget):
+    def __init__(self, parent=None):
+        super(IconPreviewArea, self).__init__(parent)
+
+        mainLayout = QGridLayout()
+        self.setLayout(mainLayout)
+
+        self.icon = QIcon()
+        self.size = QSize()
+        self.stateLabels = []
+        self.modeLabels = []
+        self.pixmapLabels = []
+
+        self.stateLabels.append(self.createHeaderLabel("Off"))
+        self.stateLabels.append(self.createHeaderLabel("On"))
+
+        self.modeLabels.append(self.createHeaderLabel("Normal"))
+        self.modeLabels.append(self.createHeaderLabel("Active"))
+        self.modeLabels.append(self.createHeaderLabel("Disabled"))
+        self.modeLabels.append(self.createHeaderLabel("Selected"))
+
+        for j, label in enumerate(self.stateLabels):
+            mainLayout.addWidget(label, j + 1, 0)
+
+        for i, label in enumerate(self.modeLabels):
+            mainLayout.addWidget(label, 0, i + 1)
+
+            self.pixmapLabels.append([])
+            for j in range(len(self.stateLabels)):
+                self.pixmapLabels[i].append(self.createPixmapLabel())
+                mainLayout.addWidget(self.pixmapLabels[i][j], j + 1, i + 1)
+
+    def setIcon(self, icon):
+        self.icon = icon
+        self.updatePixmapLabels()
+
+    def setSize(self, size):
+        if size != self.size:
+            self.size = size
+            self.updatePixmapLabels()
+
+    def createHeaderLabel(self, text):
+        label = QLabel("<b>%s</b>" % text)
+        label.setAlignment(Qt.AlignCenter)
+        return label
+
+    def createPixmapLabel(self):
+        label = QLabel()
+        label.setEnabled(False)
+        label.setAlignment(Qt.AlignCenter)
+        label.setFrameShape(QFrame.Box)
+        label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
+        label.setBackgroundRole(QPalette.Base)
+        label.setAutoFillBackground(True)
+        label.setMinimumSize(132, 132)
+        return label
+
+    def updatePixmapLabels(self):
+        for i in range(len(self.modeLabels)):
+            if i == 0:
+                mode = QIcon.Normal
+            elif i == 1:
+                mode = QIcon.Active
+            elif i == 2:
+                mode = QIcon.Disabled
+            else:
+                mode = QIcon.Selected
+
+            for j in range(len(self.stateLabels)):
+                state = QIcon.Off if j == 0 else QIcon.On
+                pixmap = self.icon.pixmap(self.size, mode, state)
+                self.pixmapLabels[i][j].setPixmap(pixmap)
+                self.pixmapLabels[i][j].setEnabled(not pixmap.isNull())
+
+
+class MainWindow(QMainWindow):
+    def __init__(self, parent=None):
+        super(MainWindow, self).__init__(parent)
+
+        self.centralWidget = QWidget()
+        self.setCentralWidget(self.centralWidget)
+
+        self.createPreviewGroupBox()
+        self.createImagesGroupBox()
+        self.createIconSizeGroupBox()
+
+        self.createActions()
+        self.createMenus()
+        self.createContextMenu()
+
+        mainLayout = QGridLayout()
+        mainLayout.addWidget(self.previewGroupBox, 0, 0, 1, 2)
+        mainLayout.addWidget(self.imagesGroupBox, 1, 0)
+        mainLayout.addWidget(self.iconSizeGroupBox, 1, 1)
+        self.centralWidget.setLayout(mainLayout)
+
+        self.setWindowTitle("Icons")
+        self.checkCurrentStyle()
+        self.otherRadioButton.click()
+
+        self.resize(self.minimumSizeHint())
+
+    def about(self):
+        QMessageBox.about(self, "About Icons",
+                "The <b>Icons</b> example illustrates how Qt renders an icon "
+                "in different modes (active, normal, disabled and selected) "
+                "and states (on and off) based on a set of images.")
+
+    def changeStyle(self, checked):
+        if not checked:
+            return
+
+        action = self.sender()
+        style = QStyleFactory.create(action.data())
+        if not style:
+            return
+
+        QApplication.setStyle(style)
+
+        self.setButtonText(self.smallRadioButton, "Small (%d x %d)",
+                style, QStyle.PM_SmallIconSize)
+        self.setButtonText(self.largeRadioButton, "Large (%d x %d)",
+                style, QStyle.PM_LargeIconSize)
+        self.setButtonText(self.toolBarRadioButton, "Toolbars (%d x %d)",
+                style, QStyle.PM_ToolBarIconSize)
+        self.setButtonText(self.listViewRadioButton, "List views (%d x %d)",
+                style, QStyle.PM_ListViewIconSize)
+        self.setButtonText(self.iconViewRadioButton, "Icon views (%d x %d)",
+                style, QStyle.PM_IconViewIconSize)
+        self.setButtonText(self.tabBarRadioButton, "Tab bars (%d x %d)",
+                style, QStyle.PM_TabBarIconSize)
+
+        self.changeSize()
+
+    @staticmethod
+    def setButtonText(button, label, style, metric):
+        metric_value = style.pixelMetric(metric)
+        button.setText(label % (metric_value, metric_value))
+
+    def changeSize(self, checked=True):
+        if not checked:
+            return
+
+        if self.otherRadioButton.isChecked():
+            extent = self.otherSpinBox.value()
+        else:
+            if self.smallRadioButton.isChecked():
+                metric = QStyle.PM_SmallIconSize
+            elif self.largeRadioButton.isChecked():
+                metric = QStyle.PM_LargeIconSize
+            elif self.toolBarRadioButton.isChecked():
+                metric = QStyle.PM_ToolBarIconSize
+            elif self.listViewRadioButton.isChecked():
+                metric = QStyle.PM_ListViewIconSize
+            elif self.iconViewRadioButton.isChecked():
+                metric = QStyle.PM_IconViewIconSize
+            else:
+                metric = QStyle.PM_TabBarIconSize
+
+            extent = QApplication.style().pixelMetric(metric)
+
+        self.previewArea.setSize(QSize(extent, extent))
+        self.otherSpinBox.setEnabled(self.otherRadioButton.isChecked())
+
+    def changeIcon(self):
+        icon = QIcon()
+
+        for row in range(self.imagesTable.rowCount()):
+            item0 = self.imagesTable.item(row, 0)
+            item1 = self.imagesTable.item(row, 1)
+            item2 = self.imagesTable.item(row, 2)
+
+            if item0.checkState() == Qt.Checked:
+                if item1.text() == "Normal":
+                    mode = QIcon.Normal
+                elif item1.text() == "Active":
+                    mode = QIcon.Active
+                elif item1.text() == "Disabled":
+                    mode = QIcon.Disabled
+                else:
+                    mode = QIcon.Selected
+
+                if item2.text() == "On":
+                    state = QIcon.On
+                else:
+                    state = QIcon.Off
+
+                fileName = item0.data(Qt.UserRole)
+                image = QImage(fileName)
+                if not image.isNull():
+                    icon.addPixmap(QPixmap.fromImage(image), mode, state)
+
+        self.previewArea.setIcon(icon)
+
+    def addImage(self):
+        fileNames, _ = QFileDialog.getOpenFileNames(self, "Open Images", '',
+                "Images (*.png *.xpm *.jpg);;All Files (*)")
+
+        for fileName in fileNames:
+            row = self.imagesTable.rowCount()
+            self.imagesTable.setRowCount(row + 1)
+
+            imageName = QFileInfo(fileName).baseName()
+            item0 = QTableWidgetItem(imageName)
+            item0.setData(Qt.UserRole, fileName)
+            item0.setFlags(item0.flags() & ~Qt.ItemIsEditable)
+
+            item1 = QTableWidgetItem("Normal")
+            item2 = QTableWidgetItem("Off")
+
+            if self.guessModeStateAct.isChecked():
+                if '_act' in fileName:
+                    item1.setText("Active")
+                elif '_dis' in fileName:
+                    item1.setText("Disabled")
+                elif '_sel' in fileName:
+                    item1.setText("Selected")
+
+                if '_on' in fileName:
+                    item2.setText("On")
+
+            self.imagesTable.setItem(row, 0, item0)
+            self.imagesTable.setItem(row, 1, item1)
+            self.imagesTable.setItem(row, 2, item2)
+            self.imagesTable.openPersistentEditor(item1)
+            self.imagesTable.openPersistentEditor(item2)
+
+            item0.setCheckState(Qt.Checked)
+
+    def removeAllImages(self):
+        self.imagesTable.setRowCount(0)
+        self.changeIcon()
+
+    def createPreviewGroupBox(self):
+        self.previewGroupBox = QGroupBox("Preview")
+
+        self.previewArea = IconPreviewArea()
+
+        layout = QVBoxLayout()
+        layout.addWidget(self.previewArea)
+        self.previewGroupBox.setLayout(layout)
+
+    def createImagesGroupBox(self):
+        self.imagesGroupBox = QGroupBox("Images")
+
+        self.imagesTable = QTableWidget()
+        self.imagesTable.setSelectionMode(QAbstractItemView.NoSelection)
+        self.imagesTable.setItemDelegate(ImageDelegate(self))
+
+        self.imagesTable.horizontalHeader().setDefaultSectionSize(90)
+        self.imagesTable.setColumnCount(3)
+        self.imagesTable.setHorizontalHeaderLabels(("Image", "Mode", "State"))
+        self.imagesTable.horizontalHeader().setSectionResizeMode(0, QHeaderView.Stretch)
+        self.imagesTable.horizontalHeader().setSectionResizeMode(1, QHeaderView.Fixed)
+        self.imagesTable.horizontalHeader().setSectionResizeMode(2, QHeaderView.Fixed)
+        self.imagesTable.verticalHeader().hide()
+
+        self.imagesTable.itemChanged.connect(self.changeIcon)
+
+        layout = QVBoxLayout()
+        layout.addWidget(self.imagesTable)
+        self.imagesGroupBox.setLayout(layout)
+
+    def createIconSizeGroupBox(self):
+        self.iconSizeGroupBox = QGroupBox("Icon Size")
+
+        self.smallRadioButton = QRadioButton()
+        self.largeRadioButton = QRadioButton()
+        self.toolBarRadioButton = QRadioButton()
+        self.listViewRadioButton = QRadioButton()
+        self.iconViewRadioButton = QRadioButton()
+        self.tabBarRadioButton = QRadioButton()
+        self.otherRadioButton = QRadioButton("Other:")
+
+        self.otherSpinBox = IconSizeSpinBox()
+        self.otherSpinBox.setRange(8, 128)
+        self.otherSpinBox.setValue(64)
+
+        self.smallRadioButton.toggled.connect(self.changeSize)
+        self.largeRadioButton.toggled.connect(self.changeSize)
+        self.toolBarRadioButton.toggled.connect(self.changeSize)
+        self.listViewRadioButton.toggled.connect(self.changeSize)
+        self.iconViewRadioButton.toggled.connect(self.changeSize)
+        self.tabBarRadioButton.toggled.connect(self.changeSize)
+        self.otherRadioButton.toggled.connect(self.changeSize)
+        self.otherSpinBox.valueChanged.connect(self.changeSize)
+
+        otherSizeLayout = QHBoxLayout()
+        otherSizeLayout.addWidget(self.otherRadioButton)
+        otherSizeLayout.addWidget(self.otherSpinBox)
+        otherSizeLayout.addStretch()
+
+        layout = QGridLayout()
+        layout.addWidget(self.smallRadioButton, 0, 0)
+        layout.addWidget(self.largeRadioButton, 1, 0)
+        layout.addWidget(self.toolBarRadioButton, 2, 0)
+        layout.addWidget(self.listViewRadioButton, 0, 1)
+        layout.addWidget(self.iconViewRadioButton, 1, 1)
+        layout.addWidget(self.tabBarRadioButton, 2, 1)
+        layout.addLayout(otherSizeLayout, 3, 0, 1, 2)
+        layout.setRowStretch(4, 1)
+        self.iconSizeGroupBox.setLayout(layout)
+
+    def createActions(self):
+        self.addImagesAct = QAction("&Add Images...", self, shortcut="Ctrl+A",
+                triggered=self.addImage)
+
+        self.removeAllImagesAct = QAction("&Remove All Images", self,
+                shortcut="Ctrl+R", triggered=self.removeAllImages)
+
+        self.exitAct = QAction("&Quit", self, shortcut="Ctrl+Q",
+                triggered=self.close)
+
+        self.styleActionGroup = QActionGroup(self)
+        for styleName in QStyleFactory.keys():
+            action = QAction(self.styleActionGroup,
+                    text="%s Style" % styleName, checkable=True,
+                    triggered=self.changeStyle)
+            action.setData(styleName)
+
+        self.guessModeStateAct = QAction("&Guess Image Mode/State", self,
+                checkable=True, checked=True)
+
+        self.aboutAct = QAction("&About", self, triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        self.fileMenu = self.menuBar().addMenu("&File")
+        self.fileMenu.addAction(self.addImagesAct)
+        self.fileMenu.addAction(self.removeAllImagesAct)
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.exitAct)
+
+        self.viewMenu = self.menuBar().addMenu("&View")
+        for action in self.styleActionGroup.actions():
+            self.viewMenu.addAction(action)
+        self.viewMenu.addSeparator()
+        self.viewMenu.addAction(self.guessModeStateAct)
+
+        self.menuBar().addSeparator()
+
+        self.helpMenu = self.menuBar().addMenu("&Help")
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+    def createContextMenu(self):
+        self.imagesTable.setContextMenuPolicy(Qt.ActionsContextMenu)
+        self.imagesTable.addAction(self.addImagesAct)
+        self.imagesTable.addAction(self.removeAllImagesAct)
+
+    def checkCurrentStyle(self):
+        for action in self.styleActionGroup.actions():
+            styleName = action.data()
+            candidate = QStyleFactory.create(styleName)
+
+            if candidate is None:
+                return
+
+            if candidate.metaObject().className() == QApplication.style().metaObject().className():
+                action.trigger()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    mainWin = MainWindow()
+    mainWin.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/icons/images/designer.png b/examples/widgets/icons/images/designer.png
new file mode 100644
index 0000000..0988fce
Binary files /dev/null and b/examples/widgets/icons/images/designer.png differ
diff --git a/examples/widgets/icons/images/find_disabled.png b/examples/widgets/icons/images/find_disabled.png
new file mode 100644
index 0000000..e85e33f
Binary files /dev/null and b/examples/widgets/icons/images/find_disabled.png differ
diff --git a/examples/widgets/icons/images/find_normal.png b/examples/widgets/icons/images/find_normal.png
new file mode 100644
index 0000000..728c27f
Binary files /dev/null and b/examples/widgets/icons/images/find_normal.png differ
diff --git a/examples/widgets/icons/images/monkey_off_128x128.png b/examples/widgets/icons/images/monkey_off_128x128.png
new file mode 100644
index 0000000..f878267
Binary files /dev/null and b/examples/widgets/icons/images/monkey_off_128x128.png differ
diff --git a/examples/widgets/icons/images/monkey_off_16x16.png b/examples/widgets/icons/images/monkey_off_16x16.png
new file mode 100644
index 0000000..0ac57d7
Binary files /dev/null and b/examples/widgets/icons/images/monkey_off_16x16.png differ
diff --git a/examples/widgets/icons/images/monkey_off_32x32.png b/examples/widgets/icons/images/monkey_off_32x32.png
new file mode 100644
index 0000000..1f7fab6
Binary files /dev/null and b/examples/widgets/icons/images/monkey_off_32x32.png differ
diff --git a/examples/widgets/icons/images/monkey_off_64x64.png b/examples/widgets/icons/images/monkey_off_64x64.png
new file mode 100644
index 0000000..47d8f6d
Binary files /dev/null and b/examples/widgets/icons/images/monkey_off_64x64.png differ
diff --git a/examples/widgets/icons/images/monkey_on_128x128.png b/examples/widgets/icons/images/monkey_on_128x128.png
new file mode 100644
index 0000000..8e1c746
Binary files /dev/null and b/examples/widgets/icons/images/monkey_on_128x128.png differ
diff --git a/examples/widgets/icons/images/monkey_on_16x16.png b/examples/widgets/icons/images/monkey_on_16x16.png
new file mode 100644
index 0000000..082e852
Binary files /dev/null and b/examples/widgets/icons/images/monkey_on_16x16.png differ
diff --git a/examples/widgets/icons/images/monkey_on_32x32.png b/examples/widgets/icons/images/monkey_on_32x32.png
new file mode 100644
index 0000000..bf9acc6
Binary files /dev/null and b/examples/widgets/icons/images/monkey_on_32x32.png differ
diff --git a/examples/widgets/icons/images/monkey_on_64x64.png b/examples/widgets/icons/images/monkey_on_64x64.png
new file mode 100644
index 0000000..990f604
Binary files /dev/null and b/examples/widgets/icons/images/monkey_on_64x64.png differ
diff --git a/examples/widgets/icons/images/qt_extended_16x16.png b/examples/widgets/icons/images/qt_extended_16x16.png
new file mode 100644
index 0000000..95d3bae
Binary files /dev/null and b/examples/widgets/icons/images/qt_extended_16x16.png differ
diff --git a/examples/widgets/icons/images/qt_extended_32x32.png b/examples/widgets/icons/images/qt_extended_32x32.png
new file mode 100644
index 0000000..7b7a790
Binary files /dev/null and b/examples/widgets/icons/images/qt_extended_32x32.png differ
diff --git a/examples/widgets/icons/images/qt_extended_48x48.png b/examples/widgets/icons/images/qt_extended_48x48.png
new file mode 100644
index 0000000..8434dc2
Binary files /dev/null and b/examples/widgets/icons/images/qt_extended_48x48.png differ
diff --git a/examples/widgets/imageviewer.py b/examples/widgets/imageviewer.py
new file mode 100755
index 0000000..fba7449
--- /dev/null
+++ b/examples/widgets/imageviewer.py
@@ -0,0 +1,216 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDir, Qt
+from PyQt5.QtGui import QImage, QPainter, QPalette, QPixmap
+from PyQt5.QtWidgets import (QAction, QApplication, QFileDialog, QLabel,
+        QMainWindow, QMenu, QMessageBox, QScrollArea, QSizePolicy)
+from PyQt5.QtPrintSupport import QPrintDialog, QPrinter
+
+
+class ImageViewer(QMainWindow):
+    def __init__(self):
+        super(ImageViewer, self).__init__()
+
+        self.printer = QPrinter()
+        self.scaleFactor = 0.0
+
+        self.imageLabel = QLabel()
+        self.imageLabel.setBackgroundRole(QPalette.Base)
+        self.imageLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
+        self.imageLabel.setScaledContents(True)
+
+        self.scrollArea = QScrollArea()
+        self.scrollArea.setBackgroundRole(QPalette.Dark)
+        self.scrollArea.setWidget(self.imageLabel)
+        self.setCentralWidget(self.scrollArea)
+
+        self.createActions()
+        self.createMenus()
+
+        self.setWindowTitle("Image Viewer")
+        self.resize(500, 400)
+
+    def open(self):
+        fileName, _ = QFileDialog.getOpenFileName(self, "Open File",
+                QDir.currentPath())
+        if fileName:
+            image = QImage(fileName)
+            if image.isNull():
+                QMessageBox.information(self, "Image Viewer",
+                        "Cannot load %s." % fileName)
+                return
+
+            self.imageLabel.setPixmap(QPixmap.fromImage(image))
+            self.scaleFactor = 1.0
+
+            self.printAct.setEnabled(True)
+            self.fitToWindowAct.setEnabled(True)
+            self.updateActions()
+
+            if not self.fitToWindowAct.isChecked():
+                self.imageLabel.adjustSize()
+
+    def print_(self):
+        dialog = QPrintDialog(self.printer, self)
+        if dialog.exec_():
+            painter = QPainter(self.printer)
+            rect = painter.viewport()
+            size = self.imageLabel.pixmap().size()
+            size.scale(rect.size(), Qt.KeepAspectRatio)
+            painter.setViewport(rect.x(), rect.y(), size.width(), size.height())
+            painter.setWindow(self.imageLabel.pixmap().rect())
+            painter.drawPixmap(0, 0, self.imageLabel.pixmap())
+
+    def zoomIn(self):
+        self.scaleImage(1.25)
+
+    def zoomOut(self):
+        self.scaleImage(0.8)
+
+    def normalSize(self):
+        self.imageLabel.adjustSize()
+        self.scaleFactor = 1.0
+
+    def fitToWindow(self):
+        fitToWindow = self.fitToWindowAct.isChecked()
+        self.scrollArea.setWidgetResizable(fitToWindow)
+        if not fitToWindow:
+            self.normalSize()
+
+        self.updateActions()
+
+    def about(self):
+        QMessageBox.about(self, "About Image Viewer",
+                "<p>The <b>Image Viewer</b> example shows how to combine "
+                "QLabel and QScrollArea to display an image. QLabel is "
+                "typically used for displaying text, but it can also display "
+                "an image. QScrollArea provides a scrolling view around "
+                "another widget. If the child widget exceeds the size of the "
+                "frame, QScrollArea automatically provides scroll bars.</p>"
+                "<p>The example demonstrates how QLabel's ability to scale "
+                "its contents (QLabel.scaledContents), and QScrollArea's "
+                "ability to automatically resize its contents "
+                "(QScrollArea.widgetResizable), can be used to implement "
+                "zooming and scaling features.</p>"
+                "<p>In addition the example shows how to use QPainter to "
+                "print an image.</p>")
+
+    def createActions(self):
+        self.openAct = QAction("&Open...", self, shortcut="Ctrl+O",
+                triggered=self.open)
+
+        self.printAct = QAction("&Print...", self, shortcut="Ctrl+P",
+                enabled=False, triggered=self.print_)
+
+        self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q",
+                triggered=self.close)
+
+        self.zoomInAct = QAction("Zoom &In (25%)", self, shortcut="Ctrl++",
+                enabled=False, triggered=self.zoomIn)
+
+        self.zoomOutAct = QAction("Zoom &Out (25%)", self, shortcut="Ctrl+-",
+                enabled=False, triggered=self.zoomOut)
+
+        self.normalSizeAct = QAction("&Normal Size", self, shortcut="Ctrl+S",
+                enabled=False, triggered=self.normalSize)
+
+        self.fitToWindowAct = QAction("&Fit to Window", self, enabled=False,
+                checkable=True, shortcut="Ctrl+F", triggered=self.fitToWindow)
+
+        self.aboutAct = QAction("&About", self, triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        self.fileMenu = QMenu("&File", self)
+        self.fileMenu.addAction(self.openAct)
+        self.fileMenu.addAction(self.printAct)
+        self.fileMenu.addSeparator()
+        self.fileMenu.addAction(self.exitAct)
+
+        self.viewMenu = QMenu("&View", self)
+        self.viewMenu.addAction(self.zoomInAct)
+        self.viewMenu.addAction(self.zoomOutAct)
+        self.viewMenu.addAction(self.normalSizeAct)
+        self.viewMenu.addSeparator()
+        self.viewMenu.addAction(self.fitToWindowAct)
+
+        self.helpMenu = QMenu("&Help", self)
+        self.helpMenu.addAction(self.aboutAct)
+        self.helpMenu.addAction(self.aboutQtAct)
+
+        self.menuBar().addMenu(self.fileMenu)
+        self.menuBar().addMenu(self.viewMenu)
+        self.menuBar().addMenu(self.helpMenu)
+
+    def updateActions(self):
+        self.zoomInAct.setEnabled(not self.fitToWindowAct.isChecked())
+        self.zoomOutAct.setEnabled(not self.fitToWindowAct.isChecked())
+        self.normalSizeAct.setEnabled(not self.fitToWindowAct.isChecked())
+
+    def scaleImage(self, factor):
+        self.scaleFactor *= factor
+        self.imageLabel.resize(self.scaleFactor * self.imageLabel.pixmap().size())
+
+        self.adjustScrollBar(self.scrollArea.horizontalScrollBar(), factor)
+        self.adjustScrollBar(self.scrollArea.verticalScrollBar(), factor)
+
+        self.zoomInAct.setEnabled(self.scaleFactor < 3.0)
+        self.zoomOutAct.setEnabled(self.scaleFactor > 0.333)
+
+    def adjustScrollBar(self, scrollBar, factor):
+        scrollBar.setValue(int(factor * scrollBar.value()
+                                + ((factor - 1) * scrollBar.pageStep()/2)))
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    imageViewer = ImageViewer()
+    imageViewer.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/lineedits.py b/examples/widgets/lineedits.py
new file mode 100755
index 0000000..0507b18
--- /dev/null
+++ b/examples/widgets/lineedits.py
@@ -0,0 +1,207 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtGui import QDoubleValidator, QIntValidator
+from PyQt5.QtWidgets import (QApplication, QComboBox, QGridLayout, QGroupBox,
+        QLabel, QLineEdit, QWidget)
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        echoGroup = QGroupBox("Echo")
+
+        echoLabel = QLabel("Mode:")
+        echoComboBox = QComboBox()
+        echoComboBox.addItem("Normal")
+        echoComboBox.addItem("Password")
+        echoComboBox.addItem("PasswordEchoOnEdit")
+        echoComboBox.addItem("No Echo")
+
+        self.echoLineEdit = QLineEdit()
+        self.echoLineEdit.setFocus()
+
+        validatorGroup = QGroupBox("Validator")
+
+        validatorLabel = QLabel("Type:")
+        validatorComboBox = QComboBox()
+        validatorComboBox.addItem("No validator")
+        validatorComboBox.addItem("Integer validator")
+        validatorComboBox.addItem("Double validator")
+
+        self.validatorLineEdit = QLineEdit()
+
+        alignmentGroup = QGroupBox("Alignment")
+
+        alignmentLabel = QLabel("Type:")
+        alignmentComboBox = QComboBox()
+        alignmentComboBox.addItem("Left")
+        alignmentComboBox.addItem("Centered")
+        alignmentComboBox.addItem("Right")
+
+        self.alignmentLineEdit = QLineEdit()
+
+        inputMaskGroup = QGroupBox("Input mask")
+
+        inputMaskLabel = QLabel("Type:")
+        inputMaskComboBox = QComboBox()
+        inputMaskComboBox.addItem("No mask")
+        inputMaskComboBox.addItem("Phone number")
+        inputMaskComboBox.addItem("ISO date")
+        inputMaskComboBox.addItem("License key")
+
+        self.inputMaskLineEdit = QLineEdit()
+
+        accessGroup = QGroupBox("Access")
+
+        accessLabel = QLabel("Read-only:")
+        accessComboBox = QComboBox()
+        accessComboBox.addItem("False")
+        accessComboBox.addItem("True")
+
+        self.accessLineEdit = QLineEdit()
+
+        echoComboBox.activated.connect(self.echoChanged)
+        validatorComboBox.activated.connect(self.validatorChanged)
+        alignmentComboBox.activated.connect(self.alignmentChanged)
+        inputMaskComboBox.activated.connect(self.inputMaskChanged)
+        accessComboBox.activated.connect(self.accessChanged)
+
+        echoLayout = QGridLayout()
+        echoLayout.addWidget(echoLabel, 0, 0)
+        echoLayout.addWidget(echoComboBox, 0, 1)
+        echoLayout.addWidget(self.echoLineEdit, 1, 0, 1, 2)
+        echoGroup.setLayout(echoLayout)
+
+        validatorLayout = QGridLayout()
+        validatorLayout.addWidget(validatorLabel, 0, 0)
+        validatorLayout.addWidget(validatorComboBox, 0, 1)
+        validatorLayout.addWidget(self.validatorLineEdit, 1, 0, 1, 2)
+        validatorGroup.setLayout(validatorLayout)
+
+        alignmentLayout = QGridLayout()
+        alignmentLayout.addWidget(alignmentLabel, 0, 0)
+        alignmentLayout.addWidget(alignmentComboBox, 0, 1)
+        alignmentLayout.addWidget(self.alignmentLineEdit, 1, 0, 1, 2)
+        alignmentGroup. setLayout(alignmentLayout)
+
+        inputMaskLayout = QGridLayout()
+        inputMaskLayout.addWidget(inputMaskLabel, 0, 0)
+        inputMaskLayout.addWidget(inputMaskComboBox, 0, 1)
+        inputMaskLayout.addWidget(self.inputMaskLineEdit, 1, 0, 1, 2)
+        inputMaskGroup.setLayout(inputMaskLayout)
+
+        accessLayout = QGridLayout()
+        accessLayout.addWidget(accessLabel, 0, 0)
+        accessLayout.addWidget(accessComboBox, 0, 1)
+        accessLayout.addWidget(self.accessLineEdit, 1, 0, 1, 2)
+        accessGroup.setLayout(accessLayout)
+
+        layout = QGridLayout()
+        layout.addWidget(echoGroup, 0, 0)
+        layout.addWidget(validatorGroup, 1, 0)
+        layout.addWidget(alignmentGroup, 2, 0)
+        layout.addWidget(inputMaskGroup, 0, 1)
+        layout.addWidget(accessGroup, 1, 1)
+        self.setLayout(layout)
+
+        self.setWindowTitle("Line Edits")
+
+    def echoChanged(self, index):
+        if index == 0:
+            self.echoLineEdit.setEchoMode(QLineEdit.Normal)
+        elif index == 1:
+            self.echoLineEdit.setEchoMode(QLineEdit.Password)
+        elif index == 2:
+            self.echoLineEdit.setEchoMode(QLineEdit.PasswordEchoOnEdit)
+        elif index == 3:
+    	    self.echoLineEdit.setEchoMode(QLineEdit.NoEcho)
+
+    def validatorChanged(self, index):
+        if index == 0:
+            self.validatorLineEdit.setValidator(0)
+        elif index == 1:
+            self.validatorLineEdit.setValidator(QIntValidator(self.validatorLineEdit))
+        elif index == 2:
+            self.validatorLineEdit.setValidator(QDoubleValidator(-999.0, 999.0, 2, self.validatorLineEdit))
+
+        self.validatorLineEdit.clear()
+
+    def alignmentChanged(self, index):
+        if index == 0:
+            self.alignmentLineEdit.setAlignment(Qt.AlignLeft)
+        elif index == 1:
+            self.alignmentLineEdit.setAlignment(Qt.AlignCenter)
+        elif index == 2:
+    	    self.alignmentLineEdit.setAlignment(Qt.AlignRight)
+
+    def inputMaskChanged(self, index):
+        if index == 0:
+            self.inputMaskLineEdit.setInputMask('')
+        elif index == 1:
+            self.inputMaskLineEdit.setInputMask('+99 99 99 99 99;_')
+        elif index == 2:
+            self.inputMaskLineEdit.setInputMask('0000-00-00')
+            self.inputMaskLineEdit.setText('00000000')
+            self.inputMaskLineEdit.setCursorPosition(0)
+        elif index == 3:
+            self.inputMaskLineEdit.setInputMask('>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#')
+
+    def accessChanged(self, index):
+        if index == 0:
+            self.accessLineEdit.setReadOnly(False)
+        elif index == 1:
+            self.accessLineEdit.setReadOnly(True)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/movie/animation.mng b/examples/widgets/movie/animation.mng
new file mode 100644
index 0000000..12b688a
Binary files /dev/null and b/examples/widgets/movie/animation.mng differ
diff --git a/examples/widgets/movie/movie.py b/examples/widgets/movie/movie.py
new file mode 100755
index 0000000..c7cfdf1
--- /dev/null
+++ b/examples/widgets/movie/movie.py
@@ -0,0 +1,211 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QFileInfo, QSize, Qt
+from PyQt5.QtGui import QMovie, QPalette
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QFileDialog, QGridLayout,
+        QHBoxLayout, QLabel, QSizePolicy, QSlider, QSpinBox, QStyle,
+        QToolButton, QVBoxLayout, QWidget)
+
+
+class MoviePlayer(QWidget):
+    def __init__(self, parent=None):
+        super(MoviePlayer, self).__init__(parent)
+
+        self.movie = QMovie(self)
+        self.movie.setCacheMode(QMovie.CacheAll)
+
+        self.movieLabel = QLabel("No movie loaded")
+        self.movieLabel.setAlignment(Qt.AlignCenter)
+        self.movieLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
+        self.movieLabel.setBackgroundRole(QPalette.Dark)
+        self.movieLabel.setAutoFillBackground(True)
+
+        self.currentMovieDirectory = ''
+
+        self.createControls()
+        self.createButtons()
+
+        self.movie.frameChanged.connect(self.updateFrameSlider)
+        self.movie.stateChanged.connect(self.updateButtons)
+        self.fitCheckBox.clicked.connect(self.fitToWindow)
+        self.frameSlider.valueChanged.connect(self.goToFrame)
+        self.speedSpinBox.valueChanged.connect(self.movie.setSpeed)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.movieLabel)
+        mainLayout.addLayout(self.controlsLayout)
+        mainLayout.addLayout(self.buttonsLayout)
+        self.setLayout(mainLayout)
+
+        self.updateFrameSlider()
+        self.updateButtons()
+
+        self.setWindowTitle("Movie Player")
+        self.resize(400, 400)
+
+    def open(self):
+        fileName, _ = QFileDialog.getOpenFileName(self, "Open a Movie",
+                self.currentMovieDirectory)
+
+        if fileName:
+            self.openFile(fileName)
+
+    def openFile(self, fileName):
+        self.currentMovieDirectory = QFileInfo(fileName).path()
+
+        self.movie.stop()
+        self.movieLabel.setMovie(self.movie)
+        self.movie.setFileName(fileName)
+        self.movie.start()
+
+        self.updateFrameSlider();
+        self.updateButtons();
+
+    def goToFrame(self, frame):
+        self.movie.jumpToFrame(frame)
+
+    def fitToWindow(self):
+        self.movieLabel.setScaledContents(self.fitCheckBox.isChecked())
+
+    def updateFrameSlider(self):
+        hasFrames = (self.movie.currentFrameNumber() >= 0)
+
+        if hasFrames:
+            if self.movie.frameCount() > 0:
+                self.frameSlider.setMaximum(self.movie.frameCount() - 1)
+            elif self.movie.currentFrameNumber() > self.frameSlider.maximum():
+                self.frameSlider.setMaximum(self.movie.currentFrameNumber())
+
+            self.frameSlider.setValue(self.movie.currentFrameNumber())
+        else:
+            self.frameSlider.setMaximum(0)
+
+        self.frameLabel.setEnabled(hasFrames)
+        self.frameSlider.setEnabled(hasFrames)
+
+    def updateButtons(self):
+        state = self.movie.state()
+
+        self.playButton.setEnabled(self.movie.isValid() and
+                self.movie.frameCount() != 1 and state == QMovie.NotRunning)
+        self.pauseButton.setEnabled(state != QMovie.NotRunning)
+        self.pauseButton.setChecked(state == QMovie.Paused)
+        self.stopButton.setEnabled(state != QMovie.NotRunning)
+
+    def createControls(self):
+        self.fitCheckBox = QCheckBox("Fit to Window")
+
+        self.frameLabel = QLabel("Current frame:")
+
+        self.frameSlider = QSlider(Qt.Horizontal)
+        self.frameSlider.setTickPosition(QSlider.TicksBelow)
+        self.frameSlider.setTickInterval(10)
+
+        speedLabel = QLabel("Speed:")
+
+        self.speedSpinBox = QSpinBox()
+        self.speedSpinBox.setRange(1, 9999)
+        self.speedSpinBox.setValue(100)
+        self.speedSpinBox.setSuffix("%")
+
+        self.controlsLayout = QGridLayout()
+        self.controlsLayout.addWidget(self.fitCheckBox, 0, 0, 1, 2)
+        self.controlsLayout.addWidget(self.frameLabel, 1, 0)
+        self.controlsLayout.addWidget(self.frameSlider, 1, 1, 1, 2)
+        self.controlsLayout.addWidget(speedLabel, 2, 0)
+        self.controlsLayout.addWidget(self.speedSpinBox, 2, 1)
+
+    def createButtons(self):
+        iconSize = QSize(36, 36)
+
+        openButton = QToolButton()
+        openButton.setIcon(self.style().standardIcon(QStyle.SP_DialogOpenButton))
+        openButton.setIconSize(iconSize)
+        openButton.setToolTip("Open File")
+        openButton.clicked.connect(self.open)
+
+        self.playButton = QToolButton()
+        self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
+        self.playButton.setIconSize(iconSize)
+        self.playButton.setToolTip("Play")
+        self.playButton.clicked.connect(self.movie.start)
+
+        self.pauseButton = QToolButton()
+        self.pauseButton.setCheckable(True)
+        self.pauseButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPause))
+        self.pauseButton.setIconSize(iconSize)
+        self.pauseButton.setToolTip("Pause")
+        self.pauseButton.clicked.connect(self.movie.setPaused)
+
+        self.stopButton = QToolButton()
+        self.stopButton.setIcon(self.style().standardIcon(QStyle.SP_MediaStop))
+        self.stopButton.setIconSize(iconSize)
+        self.stopButton.setToolTip("Stop")
+        self.stopButton.clicked.connect(self.movie.stop)
+
+        quitButton = QToolButton()
+        quitButton.setIcon(self.style().standardIcon(QStyle.SP_DialogCloseButton))
+        quitButton.setIconSize(iconSize)
+        quitButton.setToolTip("Quit")
+        quitButton.clicked.connect(self.close)
+
+        self.buttonsLayout = QHBoxLayout()
+        self.buttonsLayout.addStretch()
+        self.buttonsLayout.addWidget(openButton)
+        self.buttonsLayout.addWidget(self.playButton)
+        self.buttonsLayout.addWidget(self.pauseButton)
+        self.buttonsLayout.addWidget(self.stopButton)
+        self.buttonsLayout.addWidget(quitButton)
+        self.buttonsLayout.addStretch()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    player = MoviePlayer()
+    player.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/scribble.py b/examples/widgets/scribble.py
new file mode 100755
index 0000000..c770e0a
--- /dev/null
+++ b/examples/widgets/scribble.py
@@ -0,0 +1,321 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDir, QPoint, QRect, QSize, Qt
+from PyQt5.QtGui import QImage, QImageWriter, QPainter, QPen, qRgb
+from PyQt5.QtWidgets import (QAction, QApplication, QColorDialog, QFileDialog,
+        QInputDialog, QMainWindow, QMenu, QMessageBox, QWidget)
+from PyQt5.QtPrintSupport import QPrintDialog, QPrinter
+
+
+class ScribbleArea(QWidget):
+    def __init__(self, parent=None):
+        super(ScribbleArea, self).__init__(parent)
+
+        self.setAttribute(Qt.WA_StaticContents)
+        self.modified = False
+        self.scribbling = False
+        self.myPenWidth = 1
+        self.myPenColor = Qt.blue
+        self.image = QImage()
+        self.lastPoint = QPoint()
+
+    def openImage(self, fileName):
+        loadedImage = QImage()
+        if not loadedImage.load(fileName):
+            return False
+
+        newSize = loadedImage.size().expandedTo(self.size())
+        self.resizeImage(loadedImage, newSize)
+        self.image = loadedImage
+        self.modified = False
+        self.update()
+        return True
+
+    def saveImage(self, fileName, fileFormat):
+        visibleImage = self.image
+        self.resizeImage(visibleImage, self.size())
+
+        if visibleImage.save(fileName, fileFormat):
+            self.modified = False
+            return True
+        else:
+            return False
+
+    def setPenColor(self, newColor):
+        self.myPenColor = newColor
+
+    def setPenWidth(self, newWidth):
+        self.myPenWidth = newWidth
+
+    def clearImage(self):
+        self.image.fill(qRgb(255, 255, 255))
+        self.modified = True
+        self.update()
+
+    def mousePressEvent(self, event):
+        if event.button() == Qt.LeftButton:
+            self.lastPoint = event.pos()
+            self.scribbling = True
+
+    def mouseMoveEvent(self, event):
+        if (event.buttons() & Qt.LeftButton) and self.scribbling:
+            self.drawLineTo(event.pos())
+
+    def mouseReleaseEvent(self, event):
+        if event.button() == Qt.LeftButton and self.scribbling:
+            self.drawLineTo(event.pos())
+            self.scribbling = False
+
+    def paintEvent(self, event):
+        painter = QPainter(self)
+        dirtyRect = event.rect()
+        painter.drawImage(dirtyRect, self.image, dirtyRect)
+
+    def resizeEvent(self, event):
+        if self.width() > self.image.width() or self.height() > self.image.height():
+            newWidth = max(self.width() + 128, self.image.width())
+            newHeight = max(self.height() + 128, self.image.height())
+            self.resizeImage(self.image, QSize(newWidth, newHeight))
+            self.update()
+
+        super(ScribbleArea, self).resizeEvent(event)
+
+    def drawLineTo(self, endPoint):
+        painter = QPainter(self.image)
+        painter.setPen(QPen(self.myPenColor, self.myPenWidth, Qt.SolidLine,
+                Qt.RoundCap, Qt.RoundJoin))
+        painter.drawLine(self.lastPoint, endPoint)
+        self.modified = True
+
+        rad = self.myPenWidth / 2 + 2
+        self.update(QRect(self.lastPoint, endPoint).normalized().adjusted(-rad, -rad, +rad, +rad))
+        self.lastPoint = QPoint(endPoint)
+
+    def resizeImage(self, image, newSize):
+        if image.size() == newSize:
+            return
+
+        newImage = QImage(newSize, QImage.Format_RGB32)
+        newImage.fill(qRgb(255, 255, 255))
+        painter = QPainter(newImage)
+        painter.drawImage(QPoint(0, 0), image)
+        self.image = newImage
+
+    def print_(self):
+        printer = QPrinter(QPrinter.HighResolution)
+
+        printDialog = QPrintDialog(printer, self)
+        if printDialog.exec_() == QPrintDialog.Accepted:
+            painter = QPainter(printer)
+            rect = painter.viewport()
+            size = self.image.size()
+            size.scale(rect.size(), Qt.KeepAspectRatio)
+            painter.setViewport(rect.x(), rect.y(), size.width(), size.height())
+            painter.setWindow(self.image.rect())
+            painter.drawImage(0, 0, self.image)
+            painter.end()
+
+    def isModified(self):
+        return self.modified
+
+    def penColor(self):
+        return self.myPenColor
+
+    def penWidth(self):
+        return self.myPenWidth
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.saveAsActs = []
+
+        self.scribbleArea = ScribbleArea()
+        self.setCentralWidget(self.scribbleArea)
+
+        self.createActions()
+        self.createMenus()
+
+        self.setWindowTitle("Scribble")
+        self.resize(500, 500)
+
+    def closeEvent(self, event):
+        if self.maybeSave():
+            event.accept()
+        else:
+            event.ignore()
+
+    def open(self):
+        if self.maybeSave():
+            fileName, _ = QFileDialog.getOpenFileName(self, "Open File",
+                    QDir.currentPath())
+            if fileName:
+                self.scribbleArea.openImage(fileName)
+
+    def save(self):
+        action = self.sender()
+        fileFormat = action.data()
+        self.saveFile(fileFormat)
+
+    def penColor(self):
+        newColor = QColorDialog.getColor(self.scribbleArea.penColor())
+        if newColor.isValid():
+            self.scribbleArea.setPenColor(newColor)
+
+    def penWidth(self):
+        newWidth, ok = QInputDialog.getInt(self, "Scribble",
+                "Select pen width:", self.scribbleArea.penWidth(), 1, 50, 1)
+        if ok:
+            self.scribbleArea.setPenWidth(newWidth)
+
+    def about(self):
+        QMessageBox.about(self, "About Scribble",
+                "<p>The <b>Scribble</b> example shows how to use "
+                "QMainWindow as the base widget for an application, and how "
+                "to reimplement some of QWidget's event handlers to receive "
+                "the events generated for the application's widgets:</p>"
+                "<p> We reimplement the mouse event handlers to facilitate "
+                "drawing, the paint event handler to update the application "
+                "and the resize event handler to optimize the application's "
+                "appearance. In addition we reimplement the close event "
+                "handler to intercept the close events before terminating "
+                "the application.</p>"
+                "<p> The example also demonstrates how to use QPainter to "
+                "draw an image in real time, as well as to repaint "
+                "widgets.</p>")
+
+    def createActions(self):
+        self.openAct = QAction("&Open...", self, shortcut="Ctrl+O",
+                triggered=self.open)
+
+        for format in QImageWriter.supportedImageFormats():
+            format = str(format)
+
+            text = format.upper() + "..."
+
+            action = QAction(text, self, triggered=self.save)
+            action.setData(format)
+            self.saveAsActs.append(action)
+
+        self.printAct = QAction("&Print...", self,
+                triggered=self.scribbleArea.print_)
+
+        self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q",
+                triggered=self.close)
+
+        self.penColorAct = QAction("&Pen Color...", self,
+                triggered=self.penColor)
+
+        self.penWidthAct = QAction("Pen &Width...", self,
+                triggered=self.penWidth)
+
+        self.clearScreenAct = QAction("&Clear Screen", self, shortcut="Ctrl+L",
+                triggered=self.scribbleArea.clearImage)
+
+        self.aboutAct = QAction("&About", self, triggered=self.about)
+
+        self.aboutQtAct = QAction("About &Qt", self,
+                triggered=QApplication.instance().aboutQt)
+
+    def createMenus(self):
+        self.saveAsMenu = QMenu("&Save As", self)
+        for action in self.saveAsActs:
+            self.saveAsMenu.addAction(action)
+
+        fileMenu = QMenu("&File", self)
+        fileMenu.addAction(self.openAct)
+        fileMenu.addMenu(self.saveAsMenu)
+        fileMenu.addAction(self.printAct)
+        fileMenu.addSeparator()
+        fileMenu.addAction(self.exitAct)
+
+        optionMenu = QMenu("&Options", self)
+        optionMenu.addAction(self.penColorAct)
+        optionMenu.addAction(self.penWidthAct)
+        optionMenu.addSeparator()
+        optionMenu.addAction(self.clearScreenAct)
+
+        helpMenu = QMenu("&Help", self)
+        helpMenu.addAction(self.aboutAct)
+        helpMenu.addAction(self.aboutQtAct)
+
+        self.menuBar().addMenu(fileMenu)
+        self.menuBar().addMenu(optionMenu)
+        self.menuBar().addMenu(helpMenu)
+
+    def maybeSave(self):
+        if self.scribbleArea.isModified():
+            ret = QMessageBox.warning(self, "Scribble",
+                        "The image has been modified.\n"
+                        "Do you want to save your changes?",
+                        QMessageBox.Save | QMessageBox.Discard |
+                        QMessageBox.Cancel)
+            if ret == QMessageBox.Save:
+                return self.saveFile('png')
+            elif ret == QMessageBox.Cancel:
+                return False
+
+        return True
+
+    def saveFile(self, fileFormat):
+        initialPath = QDir.currentPath() + '/untitled.' + fileFormat
+
+        fileName, _ = QFileDialog.getSaveFileName(self, "Save As", initialPath,
+                "%s Files (*.%s);;All Files (*)" % (fileFormat.upper(), fileFormat))
+        if fileName:
+            return self.scribbleArea.saveImage(fileName, fileFormat)
+
+        return False
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/shapedclock.py b/examples/widgets/shapedclock.py
new file mode 100755
index 0000000..0c1c44b
--- /dev/null
+++ b/examples/widgets/shapedclock.py
@@ -0,0 +1,149 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QPoint, QSize, Qt, QTime, QTimer
+from PyQt5.QtGui import QColor, QPainter, QPolygon, QRegion
+from PyQt5.QtWidgets import QAction, QApplication, QWidget
+
+
+class ShapedClock(QWidget):
+    hourHand = QPolygon([
+        QPoint(7, 8),
+        QPoint(-7, 8),
+        QPoint(0, -40)
+    ])
+
+    minuteHand = QPolygon([
+        QPoint(7, 8),
+        QPoint(-7, 8),
+        QPoint(0, -70)
+    ])
+
+    hourColor = QColor(127, 0, 127)
+    minuteColor = QColor(0, 127, 127, 191)
+
+    def __init__(self, parent=None):
+        super(ShapedClock, self).__init__(parent,
+                Qt.FramelessWindowHint | Qt.WindowSystemMenuHint)
+
+        timer = QTimer(self)
+        timer.timeout.connect(self.update)
+        timer.start(1000)
+
+        quitAction = QAction("E&xit", self, shortcut="Ctrl+Q",
+                triggered=QApplication.instance().quit)
+        self.addAction(quitAction)
+
+        self.setContextMenuPolicy(Qt.ActionsContextMenu)
+        self.setToolTip("Drag the clock with the left mouse button.\n"
+                "Use the right mouse button to open a context menu.")
+        self.setWindowTitle(self.tr("Shaped Analog Clock"))
+
+    def mousePressEvent(self, event):
+        if event.button() == Qt.LeftButton:
+            self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
+            event.accept()
+
+    def mouseMoveEvent(self, event):
+        if event.buttons() == Qt.LeftButton:
+            self.move(event.globalPos() - self.dragPosition)
+            event.accept()
+
+    def paintEvent(self, event):
+        side = min(self.width(), self.height())
+        time = QTime.currentTime()
+
+        painter = QPainter(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.translate(self.width() / 2, self.height() / 2)
+        painter.scale(side / 200.0, side / 200.0)
+
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(ShapedClock.hourColor)
+
+        painter.save()
+        painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)))
+        painter.drawConvexPolygon(ShapedClock.hourHand)
+        painter.restore()
+
+        painter.setPen(ShapedClock.hourColor)
+
+        for i in range(12):
+            painter.drawLine(88, 0, 96, 0)
+            painter.rotate(30.0)
+
+        painter.setPen(Qt.NoPen)
+        painter.setBrush(ShapedClock.minuteColor)
+
+        painter.save()
+        painter.rotate(6.0 * (time.minute() + time.second() / 60.0))
+        painter.drawConvexPolygon(ShapedClock.minuteHand)
+        painter.restore()
+
+        painter.setPen(ShapedClock.minuteColor)
+
+        for j in range(60):
+            if (j % 5) != 0:
+                painter.drawLine(92, 0, 96, 0)
+
+            painter.rotate(6.0)
+
+    def resizeEvent(self, event):
+        side = min(self.width(), self.height())
+
+        maskedRegion = QRegion(self.width()/2 - side/2, self.height()/2 - side/2, side, side, QRegion.Ellipse)
+        self.setMask(maskedRegion)
+
+    def sizeHint(self):
+        return QSize(100, 100)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    clock = ShapedClock()
+    clock.show()
+    sys.exit(app.exec_())    
diff --git a/examples/widgets/sliders.py b/examples/widgets/sliders.py
new file mode 100755
index 0000000..4934764
--- /dev/null
+++ b/examples/widgets/sliders.py
@@ -0,0 +1,195 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import pyqtSignal, Qt
+from PyQt5.QtWidgets import (QApplication, QBoxLayout, QCheckBox, QComboBox,
+        QDial, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QScrollBar,
+        QSlider, QSpinBox, QStackedWidget, QWidget)
+
+
+class SlidersGroup(QGroupBox):
+
+    valueChanged = pyqtSignal(int)
+
+    def __init__(self, orientation, title, parent=None):
+        super(SlidersGroup, self).__init__(title, parent)
+
+        self.slider = QSlider(orientation)
+        self.slider.setFocusPolicy(Qt.StrongFocus)
+        self.slider.setTickPosition(QSlider.TicksBothSides)
+        self.slider.setTickInterval(10)
+        self.slider.setSingleStep(1)
+
+        self.scrollBar = QScrollBar(orientation)
+        self.scrollBar.setFocusPolicy(Qt.StrongFocus)
+
+        self.dial = QDial()
+        self.dial.setFocusPolicy(Qt.StrongFocus)
+
+        self.slider.valueChanged.connect(self.scrollBar.setValue)
+        self.scrollBar.valueChanged.connect(self.dial.setValue)
+        self.dial.valueChanged.connect(self.slider.setValue)
+        self.dial.valueChanged.connect(self.valueChanged)
+
+        if orientation == Qt.Horizontal:
+            direction = QBoxLayout.TopToBottom
+        else:
+            direction = QBoxLayout.LeftToRight
+
+        slidersLayout = QBoxLayout(direction)
+        slidersLayout.addWidget(self.slider)
+        slidersLayout.addWidget(self.scrollBar)
+        slidersLayout.addWidget(self.dial)
+        self.setLayout(slidersLayout)    
+
+    def setValue(self, value):    
+        self.slider.setValue(value)    
+
+    def setMinimum(self, value):    
+        self.slider.setMinimum(value)
+        self.scrollBar.setMinimum(value)
+        self.dial.setMinimum(value)    
+
+    def setMaximum(self, value):    
+        self.slider.setMaximum(value)
+        self.scrollBar.setMaximum(value)
+        self.dial.setMaximum(value)    
+
+    def invertAppearance(self, invert):
+        self.slider.setInvertedAppearance(invert)
+        self.scrollBar.setInvertedAppearance(invert)
+        self.dial.setInvertedAppearance(invert)    
+
+    def invertKeyBindings(self, invert):
+        self.slider.setInvertedControls(invert)
+        self.scrollBar.setInvertedControls(invert)
+        self.dial.setInvertedControls(invert)
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.horizontalSliders = SlidersGroup(Qt.Horizontal,
+                "Horizontal")
+        self.verticalSliders = SlidersGroup(Qt.Vertical, "Vertical")
+
+        self.stackedWidget = QStackedWidget()
+        self.stackedWidget.addWidget(self.horizontalSliders)
+        self.stackedWidget.addWidget(self.verticalSliders)
+
+        self.createControls("Controls")
+
+        self.horizontalSliders.valueChanged.connect(self.verticalSliders.setValue)
+        self.verticalSliders.valueChanged.connect(self.valueSpinBox.setValue)
+        self.valueSpinBox.valueChanged.connect(self.horizontalSliders.setValue)
+
+        layout = QHBoxLayout()
+        layout.addWidget(self.controlsGroup)
+        layout.addWidget(self.stackedWidget)
+        self.setLayout(layout)
+
+        self.minimumSpinBox.setValue(0)
+        self.maximumSpinBox.setValue(20)
+        self.valueSpinBox.setValue(5)
+
+        self.setWindowTitle("Sliders")
+
+    def createControls(self, title):
+        self.controlsGroup = QGroupBox(title)
+
+        minimumLabel = QLabel("Minimum value:")
+        maximumLabel = QLabel("Maximum value:")
+        valueLabel = QLabel("Current value:")
+
+        invertedAppearance = QCheckBox("Inverted appearance")
+        invertedKeyBindings = QCheckBox("Inverted key bindings")
+
+        self.minimumSpinBox = QSpinBox()
+        self.minimumSpinBox.setRange(-100, 100)
+        self.minimumSpinBox.setSingleStep(1)
+
+        self.maximumSpinBox = QSpinBox()
+        self.maximumSpinBox.setRange(-100, 100)
+        self.maximumSpinBox.setSingleStep(1)
+
+        self.valueSpinBox = QSpinBox()
+        self.valueSpinBox.setRange(-100, 100)
+        self.valueSpinBox.setSingleStep(1)
+
+        orientationCombo = QComboBox()
+        orientationCombo.addItem("Horizontal slider-like widgets")
+        orientationCombo.addItem("Vertical slider-like widgets")
+
+        orientationCombo.activated.connect(self.stackedWidget.setCurrentIndex)
+        self.minimumSpinBox.valueChanged.connect(self.horizontalSliders.setMinimum)
+        self.minimumSpinBox.valueChanged.connect(self.verticalSliders.setMinimum)
+        self.maximumSpinBox.valueChanged.connect(self.horizontalSliders.setMaximum)
+        self.maximumSpinBox.valueChanged.connect(self.verticalSliders.setMaximum)
+        invertedAppearance.toggled.connect(self.horizontalSliders.invertAppearance)
+        invertedAppearance.toggled.connect(self.verticalSliders.invertAppearance)
+        invertedKeyBindings.toggled.connect(self.horizontalSliders.invertKeyBindings)
+        invertedKeyBindings.toggled.connect(self.verticalSliders.invertKeyBindings)
+
+        controlsLayout = QGridLayout()
+        controlsLayout.addWidget(minimumLabel, 0, 0)
+        controlsLayout.addWidget(maximumLabel, 1, 0)
+        controlsLayout.addWidget(valueLabel, 2, 0)
+        controlsLayout.addWidget(self.minimumSpinBox, 0, 1)
+        controlsLayout.addWidget(self.maximumSpinBox, 1, 1)
+        controlsLayout.addWidget(self.valueSpinBox, 2, 1)
+        controlsLayout.addWidget(invertedAppearance, 0, 2)
+        controlsLayout.addWidget(invertedKeyBindings, 1, 2)
+        controlsLayout.addWidget(orientationCombo, 3, 0, 1, 3)
+        self.controlsGroup.setLayout(controlsLayout)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = Window()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/spinboxes.py b/examples/widgets/spinboxes.py
new file mode 100755
index 0000000..86ee497
--- /dev/null
+++ b/examples/widgets/spinboxes.py
@@ -0,0 +1,213 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDate, QDateTime, Qt, QTime
+from PyQt5.QtWidgets import (QApplication, QComboBox, QDateEdit, QDateTimeEdit,
+        QDoubleSpinBox, QGroupBox, QHBoxLayout, QLabel, QSpinBox, QTimeEdit,
+        QVBoxLayout, QWidget)
+
+
+class Window(QWidget):
+    def __init__(self):
+        super(Window, self).__init__()
+
+        self.createSpinBoxes()
+        self.createDateTimeEdits()
+        self.createDoubleSpinBoxes()
+
+        layout = QHBoxLayout()
+        layout.addWidget(self.spinBoxesGroup)
+        layout.addWidget(self.editsGroup)
+        layout.addWidget(self.doubleSpinBoxesGroup)
+        self.setLayout(layout)
+
+        self.setWindowTitle("Spin Boxes")
+
+    def createSpinBoxes(self):
+        self.spinBoxesGroup = QGroupBox("Spinboxes")
+
+        integerLabel = QLabel("Enter a value between %d and %d:" % (-20, 20))
+        integerSpinBox = QSpinBox()
+        integerSpinBox.setRange(-20, 20)
+        integerSpinBox.setSingleStep(1)
+        integerSpinBox.setValue(0)
+
+        zoomLabel = QLabel("Enter a zoom value between %d and %d:" % (0, 1000))
+        zoomSpinBox = QSpinBox()
+        zoomSpinBox.setRange(0, 1000)
+        zoomSpinBox.setSingleStep(10)
+        zoomSpinBox.setSuffix('%')
+        zoomSpinBox.setSpecialValueText("Automatic")
+        zoomSpinBox.setValue(100)
+
+        priceLabel = QLabel("Enter a price between %d and %d:" % (0, 999))
+        priceSpinBox = QSpinBox()
+        priceSpinBox.setRange(0, 999)
+        priceSpinBox.setSingleStep(1)
+        priceSpinBox.setPrefix('$')
+        priceSpinBox.setValue(99)
+
+        spinBoxLayout = QVBoxLayout()
+        spinBoxLayout.addWidget(integerLabel)
+        spinBoxLayout.addWidget(integerSpinBox)
+        spinBoxLayout.addWidget(zoomLabel)
+        spinBoxLayout.addWidget(zoomSpinBox)
+        spinBoxLayout.addWidget(priceLabel)
+        spinBoxLayout.addWidget(priceSpinBox)
+        self.spinBoxesGroup.setLayout(spinBoxLayout)
+
+    def createDateTimeEdits(self):
+        self.editsGroup = QGroupBox("Date and time spin boxes")
+
+        dateLabel = QLabel()
+        dateEdit = QDateEdit(QDate.currentDate())
+        dateEdit.setDateRange(QDate(2005, 1, 1), QDate(2010, 12, 31))
+        dateLabel.setText("Appointment date (between %s and %s):" %
+                    (dateEdit.minimumDate().toString(Qt.ISODate),
+                    dateEdit.maximumDate().toString(Qt.ISODate)))
+
+        timeLabel = QLabel()
+        timeEdit = QTimeEdit(QTime.currentTime())
+        timeEdit.setTimeRange(QTime(9, 0, 0, 0), QTime(16, 30, 0, 0))
+        timeLabel.setText("Appointment time (between %s and %s):" %
+                    (timeEdit.minimumTime().toString(Qt.ISODate),
+                    timeEdit.maximumTime().toString(Qt.ISODate)))
+
+        self.meetingLabel = QLabel()
+        self.meetingEdit = QDateTimeEdit(QDateTime.currentDateTime())
+
+        formatLabel = QLabel("Format string for the meeting date and time:")
+
+        formatComboBox = QComboBox()
+        formatComboBox.addItem('yyyy-MM-dd hh:mm:ss (zzz \'ms\')')
+        formatComboBox.addItem('hh:mm:ss MM/dd/yyyy')
+        formatComboBox.addItem('hh:mm:ss dd/MM/yyyy')
+        formatComboBox.addItem('hh:mm:ss')
+        formatComboBox.addItem('hh:mm ap')
+
+        formatComboBox.activated[str].connect(self.setFormatString)
+
+        self.setFormatString(formatComboBox.currentText())
+
+        editsLayout = QVBoxLayout()
+        editsLayout.addWidget(dateLabel)
+        editsLayout.addWidget(dateEdit)
+        editsLayout.addWidget(timeLabel)
+        editsLayout.addWidget(timeEdit)
+        editsLayout.addWidget(self.meetingLabel)
+        editsLayout.addWidget(self.meetingEdit)
+        editsLayout.addWidget(formatLabel)
+        editsLayout.addWidget(formatComboBox)
+        self.editsGroup.setLayout(editsLayout)
+
+    def setFormatString(self, formatString):
+        self.meetingEdit.setDisplayFormat(formatString)
+
+        if self.meetingEdit.displayedSections() & QDateTimeEdit.DateSections_Mask:
+            self.meetingEdit.setDateRange(QDate(2004, 11, 1), QDate(2005, 11, 30))
+            self.meetingLabel.setText("Meeting date (between %s and %s):" %
+                    (self.meetingEdit.minimumDate().toString(Qt.ISODate),
+                    self.meetingEdit.maximumDate().toString(Qt.ISODate)))
+        else:
+            self.meetingEdit.setTimeRange(QTime(0, 7, 20, 0), QTime(21, 0, 0, 0))
+            self.meetingLabel.setText("Meeting time (between %s and %s):" %
+                    (self.meetingEdit.minimumTime().toString(Qt.ISODate),
+                    self.meetingEdit.maximumTime().toString(Qt.ISODate)))
+
+    def createDoubleSpinBoxes(self):
+        self.doubleSpinBoxesGroup = QGroupBox("Double precision spinboxes")
+
+        precisionLabel = QLabel("Number of decimal places to show:")
+        precisionSpinBox = QSpinBox()
+        precisionSpinBox.setRange(0, 100)
+        precisionSpinBox.setValue(2)
+
+        doubleLabel = QLabel("Enter a value between %d and %d:" % (-20, 20))
+        self.doubleSpinBox = QDoubleSpinBox()
+        self.doubleSpinBox.setRange(-20.0, 20.0)
+        self.doubleSpinBox.setSingleStep(1.0)
+        self.doubleSpinBox.setValue(0.0)
+
+        scaleLabel = QLabel("Enter a scale factor between %d and %d:" % (0, 1000))
+        self.scaleSpinBox = QDoubleSpinBox()
+        self.scaleSpinBox.setRange(0.0, 1000.0)
+        self.scaleSpinBox.setSingleStep(10.0)
+        self.scaleSpinBox.setSuffix('%')
+        self.scaleSpinBox.setSpecialValueText("No scaling")
+        self.scaleSpinBox.setValue(100.0)
+
+        priceLabel = QLabel("Enter a price between %d and %d:" % (0, 1000))
+        self.priceSpinBox = QDoubleSpinBox()
+        self.priceSpinBox.setRange(0.0, 1000.0)
+        self.priceSpinBox.setSingleStep(1.0)
+        self.priceSpinBox.setPrefix('$')
+        self.priceSpinBox.setValue(99.99)
+
+        precisionSpinBox.valueChanged.connect(self.changePrecision)
+
+        spinBoxLayout = QVBoxLayout()
+        spinBoxLayout.addWidget(precisionLabel)
+        spinBoxLayout.addWidget(precisionSpinBox)
+        spinBoxLayout.addWidget(doubleLabel)
+        spinBoxLayout.addWidget(self.doubleSpinBox)
+        spinBoxLayout.addWidget(scaleLabel)
+        spinBoxLayout.addWidget(self.scaleSpinBox)
+        spinBoxLayout.addWidget(priceLabel)
+        spinBoxLayout.addWidget(self.priceSpinBox)
+        self.doubleSpinBoxesGroup.setLayout(spinBoxLayout)
+
+    def changePrecision(self, decimals):
+        self.doubleSpinBox.setDecimals(decimals)
+        self.scaleSpinBox.setDecimals(decimals)
+        self.priceSpinBox.setDecimals(decimals)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)    
+    window = Window()
+    window.show()    
+    sys.exit(app.exec_())
diff --git a/examples/widgets/styles.py b/examples/widgets/styles.py
new file mode 100755
index 0000000..1106806
--- /dev/null
+++ b/examples/widgets/styles.py
@@ -0,0 +1,243 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QDateTime, Qt, QTimer
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QComboBox, QDateTimeEdit,
+        QDial, QDialog, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
+        QProgressBar, QPushButton, QRadioButton, QScrollBar, QSizePolicy,
+        QSlider, QSpinBox, QStyleFactory, QTableWidget, QTabWidget, QTextEdit,
+        QVBoxLayout, QWidget)
+
+
+class WidgetGallery(QDialog):
+    def __init__(self, parent=None):
+        super(WidgetGallery, self).__init__(parent)
+
+        self.originalPalette = QApplication.palette()
+
+        styleComboBox = QComboBox()
+        styleComboBox.addItems(QStyleFactory.keys())
+
+        styleLabel = QLabel("&Style:")
+        styleLabel.setBuddy(styleComboBox)
+
+        self.useStylePaletteCheckBox = QCheckBox("&Use style's standard palette")
+        self.useStylePaletteCheckBox.setChecked(True)
+
+        disableWidgetsCheckBox = QCheckBox("&Disable widgets")
+
+        self.createTopLeftGroupBox()
+        self.createTopRightGroupBox()
+        self.createBottomLeftTabWidget()
+        self.createBottomRightGroupBox()
+        self.createProgressBar()
+
+        styleComboBox.activated[str].connect(self.changeStyle)
+        self.useStylePaletteCheckBox.toggled.connect(self.changePalette)
+        disableWidgetsCheckBox.toggled.connect(self.topLeftGroupBox.setDisabled)
+        disableWidgetsCheckBox.toggled.connect(self.topRightGroupBox.setDisabled)
+        disableWidgetsCheckBox.toggled.connect(self.bottomLeftTabWidget.setDisabled)
+        disableWidgetsCheckBox.toggled.connect(self.bottomRightGroupBox.setDisabled)
+
+        topLayout = QHBoxLayout()
+        topLayout.addWidget(styleLabel)
+        topLayout.addWidget(styleComboBox)
+        topLayout.addStretch(1)
+        topLayout.addWidget(self.useStylePaletteCheckBox)
+        topLayout.addWidget(disableWidgetsCheckBox)
+
+        mainLayout = QGridLayout()
+        mainLayout.addLayout(topLayout, 0, 0, 1, 2)
+        mainLayout.addWidget(self.topLeftGroupBox, 1, 0)
+        mainLayout.addWidget(self.topRightGroupBox, 1, 1)
+        mainLayout.addWidget(self.bottomLeftTabWidget, 2, 0)
+        mainLayout.addWidget(self.bottomRightGroupBox, 2, 1)
+        mainLayout.addWidget(self.progressBar, 3, 0, 1, 2)
+        mainLayout.setRowStretch(1, 1)
+        mainLayout.setRowStretch(2, 1)
+        mainLayout.setColumnStretch(0, 1)
+        mainLayout.setColumnStretch(1, 1)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Styles")
+        self.changeStyle('Windows')
+
+    def changeStyle(self, styleName):
+        QApplication.setStyle(QStyleFactory.create(styleName))
+        self.changePalette()
+
+    def changePalette(self):
+        if (self.useStylePaletteCheckBox.isChecked()):
+            QApplication.setPalette(QApplication.style().standardPalette())
+        else:
+            QApplication.setPalette(self.originalPalette)
+
+    def advanceProgressBar(self):
+        curVal = self.progressBar.value()
+        maxVal = self.progressBar.maximum()
+        self.progressBar.setValue(curVal + (maxVal - curVal) / 100)
+
+    def createTopLeftGroupBox(self):
+        self.topLeftGroupBox = QGroupBox("Group 1")
+
+        radioButton1 = QRadioButton("Radio button 1")
+        radioButton2 = QRadioButton("Radio button 2")
+        radioButton3 = QRadioButton("Radio button 3")
+        radioButton1.setChecked(True)
+
+        checkBox = QCheckBox("Tri-state check box")
+        checkBox.setTristate(True)
+        checkBox.setCheckState(Qt.PartiallyChecked)
+
+        layout = QVBoxLayout()
+        layout.addWidget(radioButton1)
+        layout.addWidget(radioButton2)
+        layout.addWidget(radioButton3)
+        layout.addWidget(checkBox)
+        layout.addStretch(1)
+        self.topLeftGroupBox.setLayout(layout)    
+
+    def createTopRightGroupBox(self):
+        self.topRightGroupBox = QGroupBox("Group 2")
+
+        defaultPushButton = QPushButton("Default Push Button")
+        defaultPushButton.setDefault(True)
+
+        togglePushButton = QPushButton("Toggle Push Button")
+        togglePushButton.setCheckable(True)
+        togglePushButton.setChecked(True)
+
+        flatPushButton = QPushButton("Flat Push Button")
+        flatPushButton.setFlat(True)
+
+        layout = QVBoxLayout()
+        layout.addWidget(defaultPushButton)
+        layout.addWidget(togglePushButton)
+        layout.addWidget(flatPushButton)
+        layout.addStretch(1)
+        self.topRightGroupBox.setLayout(layout)
+
+    def createBottomLeftTabWidget(self):
+        self.bottomLeftTabWidget = QTabWidget()
+        self.bottomLeftTabWidget.setSizePolicy(QSizePolicy.Preferred,
+                QSizePolicy.Ignored)
+
+        tab1 = QWidget()
+        tableWidget = QTableWidget(10, 10)
+
+        tab1hbox = QHBoxLayout()
+        tab1hbox.setContentsMargins(5, 5, 5, 5)
+        tab1hbox.addWidget(tableWidget)
+        tab1.setLayout(tab1hbox)
+
+        tab2 = QWidget()
+        textEdit = QTextEdit()
+
+        textEdit.setPlainText("Twinkle, twinkle, little star,\n"
+                              "How I wonder what you are.\n" 
+                              "Up above the world so high,\n"
+                              "Like a diamond in the sky.\n"
+                              "Twinkle, twinkle, little star,\n" 
+                              "How I wonder what you are!\n")
+
+        tab2hbox = QHBoxLayout()
+        tab2hbox.setContentsMargins(5, 5, 5, 5)
+        tab2hbox.addWidget(textEdit)
+        tab2.setLayout(tab2hbox)
+
+        self.bottomLeftTabWidget.addTab(tab1, "&Table")
+        self.bottomLeftTabWidget.addTab(tab2, "Text &Edit")
+
+    def createBottomRightGroupBox(self):
+        self.bottomRightGroupBox = QGroupBox("Group 3")
+        self.bottomRightGroupBox.setCheckable(True)
+        self.bottomRightGroupBox.setChecked(True)
+
+        lineEdit = QLineEdit('s3cRe7')
+        lineEdit.setEchoMode(QLineEdit.Password)
+
+        spinBox = QSpinBox(self.bottomRightGroupBox)
+        spinBox.setValue(50)
+
+        dateTimeEdit = QDateTimeEdit(self.bottomRightGroupBox)
+        dateTimeEdit.setDateTime(QDateTime.currentDateTime())
+
+        slider = QSlider(Qt.Horizontal, self.bottomRightGroupBox)
+        slider.setValue(40)
+
+        scrollBar = QScrollBar(Qt.Horizontal, self.bottomRightGroupBox)
+        scrollBar.setValue(60)
+
+        dial = QDial(self.bottomRightGroupBox)
+        dial.setValue(30)
+        dial.setNotchesVisible(True)
+
+        layout = QGridLayout()
+        layout.addWidget(lineEdit, 0, 0, 1, 2)
+        layout.addWidget(spinBox, 1, 0, 1, 2)
+        layout.addWidget(dateTimeEdit, 2, 0, 1, 2)
+        layout.addWidget(slider, 3, 0)
+        layout.addWidget(scrollBar, 4, 0)
+        layout.addWidget(dial, 3, 1, 2, 1)
+        layout.setRowStretch(5, 1)
+        self.bottomRightGroupBox.setLayout(layout)
+
+    def createProgressBar(self):
+        self.progressBar = QProgressBar()
+        self.progressBar.setRange(0, 10000)
+        self.progressBar.setValue(0)
+
+        timer = QTimer(self)
+        timer.timeout.connect(self.advanceProgressBar)
+        timer.start(1000)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    gallery = WidgetGallery()
+    gallery.show()
+    sys.exit(app.exec_()) 
diff --git a/examples/widgets/stylesheet/images/checkbox_checked.png b/examples/widgets/stylesheet/images/checkbox_checked.png
new file mode 100644
index 0000000..cbf06f6
Binary files /dev/null and b/examples/widgets/stylesheet/images/checkbox_checked.png differ
diff --git a/examples/widgets/stylesheet/images/checkbox_checked_hover.png b/examples/widgets/stylesheet/images/checkbox_checked_hover.png
new file mode 100644
index 0000000..fb4d4d3
Binary files /dev/null and b/examples/widgets/stylesheet/images/checkbox_checked_hover.png differ
diff --git a/examples/widgets/stylesheet/images/checkbox_checked_pressed.png b/examples/widgets/stylesheet/images/checkbox_checked_pressed.png
new file mode 100644
index 0000000..852fcc0
Binary files /dev/null and b/examples/widgets/stylesheet/images/checkbox_checked_pressed.png differ
diff --git a/examples/widgets/stylesheet/images/checkbox_unchecked.png b/examples/widgets/stylesheet/images/checkbox_unchecked.png
new file mode 100644
index 0000000..5f54655
Binary files /dev/null and b/examples/widgets/stylesheet/images/checkbox_unchecked.png differ
diff --git a/examples/widgets/stylesheet/images/checkbox_unchecked_hover.png b/examples/widgets/stylesheet/images/checkbox_unchecked_hover.png
new file mode 100644
index 0000000..6873644
Binary files /dev/null and b/examples/widgets/stylesheet/images/checkbox_unchecked_hover.png differ
diff --git a/examples/widgets/stylesheet/images/checkbox_unchecked_pressed.png b/examples/widgets/stylesheet/images/checkbox_unchecked_pressed.png
new file mode 100644
index 0000000..6a768c4
Binary files /dev/null and b/examples/widgets/stylesheet/images/checkbox_unchecked_pressed.png differ
diff --git a/examples/widgets/stylesheet/images/down_arrow.png b/examples/widgets/stylesheet/images/down_arrow.png
new file mode 100644
index 0000000..85004ae
Binary files /dev/null and b/examples/widgets/stylesheet/images/down_arrow.png differ
diff --git a/examples/widgets/stylesheet/images/down_arrow_disabled.png b/examples/widgets/stylesheet/images/down_arrow_disabled.png
new file mode 100644
index 0000000..d9eefed
Binary files /dev/null and b/examples/widgets/stylesheet/images/down_arrow_disabled.png differ
diff --git a/examples/widgets/stylesheet/images/frame.png b/examples/widgets/stylesheet/images/frame.png
new file mode 100644
index 0000000..05a6005
Binary files /dev/null and b/examples/widgets/stylesheet/images/frame.png differ
diff --git a/examples/widgets/stylesheet/images/pagefold.png b/examples/widgets/stylesheet/images/pagefold.png
new file mode 100644
index 0000000..69be8f2
Binary files /dev/null and b/examples/widgets/stylesheet/images/pagefold.png differ
diff --git a/examples/widgets/stylesheet/images/pushbutton.png b/examples/widgets/stylesheet/images/pushbutton.png
new file mode 100644
index 0000000..c7529ba
Binary files /dev/null and b/examples/widgets/stylesheet/images/pushbutton.png differ
diff --git a/examples/widgets/stylesheet/images/pushbutton_hover.png b/examples/widgets/stylesheet/images/pushbutton_hover.png
new file mode 100644
index 0000000..af0ef9d
Binary files /dev/null and b/examples/widgets/stylesheet/images/pushbutton_hover.png differ
diff --git a/examples/widgets/stylesheet/images/pushbutton_pressed.png b/examples/widgets/stylesheet/images/pushbutton_pressed.png
new file mode 100644
index 0000000..f7381f7
Binary files /dev/null and b/examples/widgets/stylesheet/images/pushbutton_pressed.png differ
diff --git a/examples/widgets/stylesheet/images/radiobutton_checked.png b/examples/widgets/stylesheet/images/radiobutton_checked.png
new file mode 100644
index 0000000..8ab9157
Binary files /dev/null and b/examples/widgets/stylesheet/images/radiobutton_checked.png differ
diff --git a/examples/widgets/stylesheet/images/radiobutton_checked_hover.png b/examples/widgets/stylesheet/images/radiobutton_checked_hover.png
new file mode 100644
index 0000000..d68cb00
Binary files /dev/null and b/examples/widgets/stylesheet/images/radiobutton_checked_hover.png differ
diff --git a/examples/widgets/stylesheet/images/radiobutton_checked_pressed.png b/examples/widgets/stylesheet/images/radiobutton_checked_pressed.png
new file mode 100644
index 0000000..e3cd5a5
Binary files /dev/null and b/examples/widgets/stylesheet/images/radiobutton_checked_pressed.png differ
diff --git a/examples/widgets/stylesheet/images/radiobutton_unchecked.png b/examples/widgets/stylesheet/images/radiobutton_unchecked.png
new file mode 100644
index 0000000..321a9a1
Binary files /dev/null and b/examples/widgets/stylesheet/images/radiobutton_unchecked.png differ
diff --git a/examples/widgets/stylesheet/images/radiobutton_unchecked_hover.png b/examples/widgets/stylesheet/images/radiobutton_unchecked_hover.png
new file mode 100644
index 0000000..666a3b0
Binary files /dev/null and b/examples/widgets/stylesheet/images/radiobutton_unchecked_hover.png differ
diff --git a/examples/widgets/stylesheet/images/radiobutton_unchecked_pressed.png b/examples/widgets/stylesheet/images/radiobutton_unchecked_pressed.png
new file mode 100644
index 0000000..c4b0567
Binary files /dev/null and b/examples/widgets/stylesheet/images/radiobutton_unchecked_pressed.png differ
diff --git a/examples/widgets/stylesheet/images/sizegrip.png b/examples/widgets/stylesheet/images/sizegrip.png
new file mode 100644
index 0000000..350583a
Binary files /dev/null and b/examples/widgets/stylesheet/images/sizegrip.png differ
diff --git a/examples/widgets/stylesheet/images/spindown.png b/examples/widgets/stylesheet/images/spindown.png
new file mode 100644
index 0000000..7ff3c64
Binary files /dev/null and b/examples/widgets/stylesheet/images/spindown.png differ
diff --git a/examples/widgets/stylesheet/images/spindown_hover.png b/examples/widgets/stylesheet/images/spindown_hover.png
new file mode 100644
index 0000000..1486c4d
Binary files /dev/null and b/examples/widgets/stylesheet/images/spindown_hover.png differ
diff --git a/examples/widgets/stylesheet/images/spindown_off.png b/examples/widgets/stylesheet/images/spindown_off.png
new file mode 100644
index 0000000..a90ab3f
Binary files /dev/null and b/examples/widgets/stylesheet/images/spindown_off.png differ
diff --git a/examples/widgets/stylesheet/images/spindown_pressed.png b/examples/widgets/stylesheet/images/spindown_pressed.png
new file mode 100644
index 0000000..f6271cb
Binary files /dev/null and b/examples/widgets/stylesheet/images/spindown_pressed.png differ
diff --git a/examples/widgets/stylesheet/images/spinup.png b/examples/widgets/stylesheet/images/spinup.png
new file mode 100644
index 0000000..1069dd0
Binary files /dev/null and b/examples/widgets/stylesheet/images/spinup.png differ
diff --git a/examples/widgets/stylesheet/images/spinup_hover.png b/examples/widgets/stylesheet/images/spinup_hover.png
new file mode 100644
index 0000000..884c8d7
Binary files /dev/null and b/examples/widgets/stylesheet/images/spinup_hover.png differ
diff --git a/examples/widgets/stylesheet/images/spinup_off.png b/examples/widgets/stylesheet/images/spinup_off.png
new file mode 100644
index 0000000..02dad1f
Binary files /dev/null and b/examples/widgets/stylesheet/images/spinup_off.png differ
diff --git a/examples/widgets/stylesheet/images/spinup_pressed.png b/examples/widgets/stylesheet/images/spinup_pressed.png
new file mode 100644
index 0000000..b1843e2
Binary files /dev/null and b/examples/widgets/stylesheet/images/spinup_pressed.png differ
diff --git a/examples/widgets/stylesheet/images/up_arrow.png b/examples/widgets/stylesheet/images/up_arrow.png
new file mode 100644
index 0000000..e7f7ddb
Binary files /dev/null and b/examples/widgets/stylesheet/images/up_arrow.png differ
diff --git a/examples/widgets/stylesheet/images/up_arrow_disabled.png b/examples/widgets/stylesheet/images/up_arrow_disabled.png
new file mode 100644
index 0000000..4d2c277
Binary files /dev/null and b/examples/widgets/stylesheet/images/up_arrow_disabled.png differ
diff --git a/examples/widgets/stylesheet/mainwindow.ui b/examples/widgets/stylesheet/mainwindow.ui
new file mode 100644
index 0000000..cc29257
--- /dev/null
+++ b/examples/widgets/stylesheet/mainwindow.ui
@@ -0,0 +1,356 @@
+<ui version="4.0" >
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>413</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Style Sheet</string>
+  </property>
+  <widget class="QWidget" name="centralwidget" >
+   <layout class="QVBoxLayout" >
+    <property name="margin" >
+     <number>9</number>
+    </property>
+    <property name="spacing" >
+     <number>6</number>
+    </property>
+    <item>
+     <widget class="QFrame" name="mainFrame" >
+      <property name="frameShape" >
+       <enum>QFrame::StyledPanel</enum>
+      </property>
+      <property name="frameShadow" >
+       <enum>QFrame::Raised</enum>
+      </property>
+      <layout class="QGridLayout" >
+       <property name="margin" >
+        <number>9</number>
+       </property>
+       <property name="spacing" >
+        <number>6</number>
+       </property>
+       <item row="6" column="0" colspan="5" >
+        <widget class="QCheckBox" name="agreeCheckBox" >
+         <property name="toolTip" >
+          <string>Please read the LICENSE file before checking</string>
+         </property>
+         <property name="text" >
+          <string>I accept the terms and &conditions</string>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="0" >
+        <widget class="QLabel" name="label" >
+         <property name="text" >
+          <string>Profession:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
+         </property>
+         <property name="buddy" >
+          <cstring>professionList</cstring>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0" >
+        <widget class="QLabel" name="nameLabel" >
+         <property name="text" >
+          <string>&Name:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+         <property name="buddy" >
+          <cstring>nameCombo</cstring>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1" >
+        <widget class="QRadioButton" name="maleRadioButton" >
+         <property name="toolTip" >
+          <string>Check this if you are male</string>
+         </property>
+         <property name="text" >
+          <string>&Male</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0" >
+        <widget class="QLabel" name="passwordLabel" >
+         <property name="text" >
+          <string>&Password:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+         <property name="buddy" >
+          <cstring>passwordEdit</cstring>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="1" colspan="4" >
+        <widget class="QComboBox" name="countryCombo" >
+         <property name="toolTip" >
+          <string>Specify country of origin</string>
+         </property>
+         <property name="statusTip" >
+          <string>Specify country of origin</string>
+         </property>
+         <property name="currentIndex" >
+          <number>6</number>
+         </property>
+         <item>
+          <property name="text" >
+           <string>Egypt</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>France</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>Germany</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>India</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>Italy</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>Norway</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>Pakistan</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+       <item row="2" column="0" >
+        <widget class="QLabel" name="ageLabel" >
+         <property name="text" >
+          <string>&Age:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+         <property name="buddy" >
+          <cstring>ageSpinBox</cstring>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="0" >
+        <widget class="QLabel" name="countryLabel" >
+         <property name="text" >
+          <string>Country:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+         <property name="buddy" >
+          <cstring>countryCombo</cstring>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" >
+        <widget class="QLabel" name="genderLabel" >
+         <property name="text" >
+          <string>Gender:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="1" colspan="4" >
+        <widget class="QLineEdit" name="passwordEdit" >
+         <property name="toolTip" >
+          <string>Specify your password</string>
+         </property>
+         <property name="statusTip" >
+          <string>Specify your password</string>
+         </property>
+         <property name="text" >
+          <string>Password</string>
+         </property>
+         <property name="echoMode" >
+          <enum>QLineEdit::Password</enum>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2" colspan="2" >
+        <widget class="QRadioButton" name="femaleRadioButton" >
+         <property name="toolTip">
+          <string>Check this if you are female</string>
+         </property>
+         <property name="text" >
+          <string>&Female</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1" colspan="2" >
+        <widget class="QSpinBox" name="ageSpinBox" >
+         <property name="toolTip" >
+          <string>Specify your age</string>
+         </property>
+         <property name="statusTip" >
+          <string>Specify your age</string>
+         </property>
+         <property name="minimum" >
+          <number>12</number>
+         </property>
+         <property name="value" >
+          <number>22</number>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1" colspan="4" >
+        <widget class="QComboBox" name="nameCombo" >
+         <property name="toolTip" >
+          <string>Specify your name</string>
+         </property>
+         <property name="editable" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="4" >
+        <spacer>
+         <property name="orientation" >
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" >
+          <size>
+           <width>40</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="2" column="3" colspan="2" >
+        <spacer>
+         <property name="orientation" >
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" >
+          <size>
+           <width>61</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="7" column="3" colspan="2" >
+        <widget class="QDialogButtonBox" name="buttonBox" >
+         <property name="orientation" >
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="standardButtons" >
+          <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="1" colspan="4" >
+        <widget class="QListWidget" name="professionList" >
+         <property name="toolTip" >
+          <string>Select your profession</string>
+         </property>
+         <property name="statusTip" >
+          <string>Specify your name here</string>
+         </property>
+         <property name="whatsThis" >
+          <string>Specify your name here</string>
+         </property>
+         <property name="currentRow" >
+          <number>0</number>
+         </property>
+         <item>
+          <property name="text" >
+           <string>Developer</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>Student</string>
+          </property>
+         </item>
+         <item>
+          <property name="text" >
+           <string>Fisherman</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menubar" >
+   <property name="geometry" >
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>400</width>
+     <height>29</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menu_File" >
+    <property name="title" >
+     <string>&File</string>
+    </property>
+    <addaction name="editStyleAction" />
+    <addaction name="separator" />
+    <addaction name="exitAction" />
+   </widget>
+   <widget class="QMenu" name="menu_Help" >
+    <property name="title" >
+     <string>&Help</string>
+    </property>
+    <addaction name="aboutAction" />
+    <addaction name="aboutQtAction" />
+   </widget>
+   <addaction name="menu_File" />
+   <addaction name="menu_Help" />
+  </widget>
+  <widget class="QStatusBar" name="statusbar" />
+  <action name="exitAction" >
+   <property name="text" >
+    <string>&Exit</string>
+   </property>
+  </action>
+  <action name="aboutQtAction" >
+   <property name="text" >
+    <string>About Qt</string>
+   </property>
+  </action>
+  <action name="editStyleAction" >
+   <property name="text" >
+    <string>Edit &Style...</string>
+   </property>
+  </action>
+  <action name="aboutAction" >
+   <property name="text" >
+    <string>About</string>
+   </property>
+  </action>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/widgets/stylesheet/qss/coffee.qss b/examples/widgets/stylesheet/qss/coffee.qss
new file mode 100644
index 0000000..4571d42
--- /dev/null
+++ b/examples/widgets/stylesheet/qss/coffee.qss
@@ -0,0 +1,112 @@
+.QWidget {
+   background-color: beige;
+}
+
+/* Nice Windows-XP-style password character. */
+QLineEdit[echoMode="2"] {
+    lineedit-password-character: 9679;
+}
+
+/* We provide a min-width and min-height for push buttons
+   so that they look elegant regardless of the width of the text. */
+QPushButton {
+    background-color: palegoldenrod;
+    border-width: 2px;
+    border-color: darkkhaki;
+    border-style: solid;
+    border-radius: 5;
+    padding: 3px;
+    min-width: 9ex;
+    min-height: 2.5ex;
+}
+
+QPushButton:hover {
+   background-color: khaki;
+}
+
+/* Increase the padding, so the text is shifted when the button is
+   pressed. */
+QPushButton:pressed {
+    padding-left: 5px;
+    padding-top: 5px;
+    background-color: #d0d67c;
+}
+
+QLabel, QAbstractButton {
+    font: bold;
+}
+
+/* Mark mandatory fields with a brownish color. */
+.mandatory {
+    color: brown;
+}
+
+/* Bold text on status bar looks awful. */
+QStatusBar QLabel {
+   font: normal;
+}
+
+QStatusBar::item {
+    border-width: 1;
+    border-color: darkkhaki;
+    border-style: solid;
+    border-radius: 2;
+}
+
+QComboBox, QLineEdit, QSpinBox, QTextEdit, QListView {
+    background-color: cornsilk;
+    selection-color: #0a214c; 
+    selection-background-color: #C19A6B;
+}
+
+QListView {
+    show-decoration-selected: 1;
+}
+
+QListView::item:hover {
+    background-color: wheat;
+}
+
+/* We reserve 1 pixel space in padding. When we get the focus,
+   we kill the padding and enlarge the border. This makes the items
+   glow. */
+QLineEdit, QFrame {
+    border-width: 2px;
+    padding: 1px;
+    border-style: solid;
+    border-color: darkkhaki;
+    border-radius: 5px;
+}
+
+/* As mentioned above, eliminate the padding and increase the border. */
+QLineEdit:focus, QFrame:focus {
+    border-width: 3px;
+    padding: 0px;
+}
+
+/* A QLabel is a QFrame ... */
+QLabel {
+    border: none;
+    padding: 0;
+    background: none;
+}
+
+/* A QToolTip is a QLabel ... */
+QToolTip {
+    border: 2px solid darkkhaki;
+    padding: 5px;
+    border-radius: 3px;
+    opacity: 200;
+}
+
+/* Nice to have the background color change when hovered. */
+QRadioButton:hover, QCheckBox:hover {
+    background-color: wheat;
+}
+
+/* Force the dialog's buttons to follow the Windows guidelines. */
+QDialogButtonBox {
+    button-layout: 0;
+}
+
+
diff --git a/examples/widgets/stylesheet/qss/default.qss b/examples/widgets/stylesheet/qss/default.qss
new file mode 100644
index 0000000..84eb5e0
--- /dev/null
+++ b/examples/widgets/stylesheet/qss/default.qss
@@ -0,0 +1 @@
+/* empty stylesheet */
diff --git a/examples/widgets/stylesheet/qss/pagefold.qss b/examples/widgets/stylesheet/qss/pagefold.qss
new file mode 100644
index 0000000..3701fc7
--- /dev/null
+++ b/examples/widgets/stylesheet/qss/pagefold.qss
@@ -0,0 +1,299 @@
+/* Customize any plain widget that is a child of a QMainWindow. */
+QMainWindow > .QWidget {
+    background-color: gainsboro;
+    background-image: url(:/images/pagefold.png);
+    background-position: top right;
+    background-repeat: no-repeat
+}
+
+/* Provide a padding for the layout inside the frame. The frame
+   exists only to provide a padding for the top-right image, so we
+   explicitly disable the border. */
+#mainFrame {
+    padding-right: 30px;
+    border-style: none;
+    border-image: none; /* since we set a border-image below */
+}
+
+/* mainFrame won't have this border-image since we have
+   explicitly set it to 'none' using a more specific selector. */
+QFrame, QLineEdit, QComboBox[editable="true"], QSpinBox {
+    border-image: url(:/images/frame.png) 4;
+    border-width: 3;
+}
+
+QLabel {
+    border: none;
+    border-image: none;
+    padding: 0;
+    background: none;
+}
+
+/* Make text in message boxes selectable. */
+QMessageBox {
+    /* LinksAccessibleByMouse | TextSelectableByMouse */
+    messagebox-text-interaction-flags: 5;
+}
+   
+/* Set the selection colors for all widgets. */
+QWidget {
+    selection-color: black;
+    selection-background-color: Silver;
+    color: black;
+}
+
+/* Make the entire row selected in item views. */
+QAbstractItemView {
+    show-decoration-selected: 1;
+}
+
+/* Nice WindowsXP-style password character for password line edits. */
+QLineEdit[echoMode="2"] {
+    lineedit-password-character: 9679;
+}
+
+/* Customize tooltips. */
+QToolTip {
+    background-color: rgb(200,200,255);
+    border-color: darkslategray;
+    border-width: 1px;
+    border-style: solid;
+    padding: 3px;
+    font: bold;
+    border-radius: 3px;
+    opacity: 200;
+}
+
+/* Customize radio buttons. */
+
+QRadioButton {
+    spacing: 5px;
+}
+
+QRadioButton::indicator {
+    width: 13px;
+    height: 13px;
+}
+
+QRadioButton::indicator::unchecked {
+    image: url(:/images/radiobutton_unchecked.png);
+}
+
+QRadioButton::indicator:unchecked:hover {
+    image: url(:/images/radiobutton_unchecked_hover.png);
+}
+
+QRadioButton::indicator:unchecked:pressed {
+    image: url(:/images/radiobutton_unchecked_pressed.png);
+}
+
+QRadioButton::indicator::checked {
+    image: url(:/images/radiobutton_checked.png);
+}
+
+QRadioButton::indicator:checked:hover {
+    image: url(:/images/radiobutton_checked_hover.png);
+}
+
+QRadioButton::indicator:checked:pressed {
+    image: url(:/images/radiobutton_checked_pressed.png);
+}
+
+/* Customize arrows. */
+
+*::down-arrow, *::menu-indicator {
+    image: url(:/images/down_arrow.png);
+    width: 7px;
+    height: 7px;
+}
+
+*::down-arrow:disabled, *::down-arrow:off {
+   image: url(:/images/down_arrow_disabled.png);
+}
+
+*::up-arrow {
+    image: url(:/images/up_arrow.png);
+    width: 7px;
+    height: 7px;
+}
+
+*::up-arrow:disabled, *::up-arrow:off {
+   image: url(:/images/up_arrow_disabled.png);
+}
+
+/* Customize push buttons and comboboxes. Our read-only combobox
+   is very similar to a push button, so they share the same border image. */
+
+QPushButton {
+    min-width: 4em;
+}
+
+QPushButton, QComboBox[editable="false"],
+QComboBox[editable="true"]::drop-down {
+    border-image: url(:/images/pushbutton.png) 5;
+    border-width: 5;
+}
+
+QPushButton:hover, QComboBox[editable="false"]:hover,
+QComboBox[editable="true"]::drop-down:hover, QMenuBar::item:hover {
+    border-image: url(:/images/pushbutton_hover.png) 5;
+    border-width: 5;
+}
+
+QPushButton:pressed, QComboBox[editable="false"]:on,
+QComboBox[editable="true"]::drop-down:on, QMenuBar::item:on {
+    border-image: url(:/images/pushbutton_pressed.png) 5;
+    border-width: 5;
+}
+
+/* Customize read-only comboboxes. */
+
+QComboBox[editable="false"] {
+    padding-left: 3px;
+    padding-right: 20px; /* space for the arrow */
+}
+
+QComboBox[editable="false"]::drop-down {
+    subcontrol-origin: padding;
+    subcontrol-position: top right;
+    width: 15px;
+    border-left-style: solid;
+    border-left-color: darkgray;
+    border-left-width: 1px;
+}
+
+QComboBox[editable="false"]::down-arrow {
+    subcontrol-origin: content;
+    subcontrol-position: center;
+    position: relative;
+    left: 1px; /* 1 pixel dropdown border */
+}
+
+/* The combobox arrow is on when the popup is open. */
+QComboBox[editable="false"]::down-arrow:on {
+    position: relative;
+    top: 1px;
+    left: 2px;
+}
+
+/* Customize editable comboboxes. */
+
+QComboBox[editable="true"] {
+    padding-right: 16px;
+}
+
+QComboBox[editable="true"]::drop-down {
+    subcontrol-origin: border;
+    subcontrol-position: top right;
+    width: 13px;
+    position: absolute;
+    top: 2px;
+    bottom: 2px;
+    right: 2px;
+}
+
+QComboBox[editable="true"]::drop-down,
+QComboBox[editable="true"]::drop-down:hover,
+QComboBox[editable="true"]::drop-down:on {
+    border-width: 0px;  
+    border-left-width: 3px; /* we need only left and center part */
+}
+
+/* Shift the arrow when it's open. */
+QComboBox[editable="true"]::down-arrow:on {
+    position: relative;
+    top: 1px;
+    left: 1px;
+}
+
+/* Customize check boxes. */
+QCheckBox {
+    spacing: 5px;
+}
+
+QCheckBox::indicator {
+    width: 13px;
+    height: 13px;
+}
+
+QCheckBox::indicator:unchecked {
+    image: url(:/images/checkbox_unchecked.png);
+}
+
+QCheckBox::indicator:unchecked:hover {
+    image: url(:/images/checkbox_unchecked_hover.png);
+}
+
+QCheckBox::indicator:unchecked:pressed {
+    image: url(:/images/checkbox_unchecked_pressed.png);
+}
+
+QCheckBox::indicator:checked {
+    image: url(:/images/checkbox_checked.png);
+}
+
+QCheckBox::indicator:checked:hover {
+    image: url(:/images/checkbox_checked_hover.png);
+}
+
+QCheckBox::indicator:checked:pressed {
+    image: url(:/images/checkbox_checked_pressed.png);
+}
+
+/* Customize the size grip. */
+QSizeGrip {
+    image: url(:/images/sizegrip.png);
+    width: 16px;
+    height: 16px;
+}
+
+/* Customize the menu bar. */
+QMenuBar {
+    border-image: none;
+    border-style: none;
+    border-width: 1px;
+    border-bottom-style: solid;
+    border-bottom-color: darkslategray;
+    padding: 2px;
+}
+
+/* Customize spin boxes. */
+
+QSpinBox { 
+    padding-right: 15px;
+}
+
+QSpinBox::up-button {
+    subcontrol-origin: border;
+    subcontrol-position: top right;
+
+    width: 16px; /* 16 + 2*1px border-width = 15px padding + 3px parent border */
+    border-image: url(:/images/spinup.png) 1;
+    border-width: 1px;
+}
+
+QSpinBox::up-button:hover {
+    border-image: url(:/images/spinup_hover.png) 1;
+}
+
+QSpinBox::up-button:pressed {
+    border-image: url(:/images/spinup_pressed.png) 1;
+}
+
+QSpinBox::down-button {
+    subcontrol-origin: border;
+    subcontrol-position: bottom right;
+
+    width: 16px;
+    border-image: url(:/images/spindown.png) 1;
+    border-width: 1px;
+    border-top-width: 0;
+}
+
+QSpinBox::down-button:hover {
+    border-image: url(:/images/spindown_hover.png) 1;
+}
+
+QSpinBox::down-button:pressed {
+    border-image: url(:/images/spindown_pressed.png) 1;
+}
diff --git a/examples/widgets/stylesheet/stylesheet.py b/examples/widgets/stylesheet/stylesheet.py
new file mode 100755
index 0000000..852d6e8
--- /dev/null
+++ b/examples/widgets/stylesheet/stylesheet.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+###########################################################################
+
+
+from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QMessageBox
+
+import stylesheet_rc
+from ui_mainwindow import Ui_MainWindow
+from stylesheeteditor import StyleSheetEditor
+
+
+class MainWindow(QMainWindow):
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.ui = Ui_MainWindow()
+        self.ui.setupUi(self)
+        self.ui.nameLabel.setProperty('class', 'mandatory QLabel')
+        self.styleSheetEditor = StyleSheetEditor(self)
+        self.statusBar().addWidget(QLabel("Ready"))
+        self.ui.exitAction.triggered.connect(QApplication.instance().quit)
+        self.ui.aboutQtAction.triggered.connect(QApplication.instance().aboutQt)
+
+    def on_editStyleAction_triggered(self):
+        self.styleSheetEditor.show()
+        self.styleSheetEditor.activateWindow()
+
+    def on_aboutAction_triggered(self):
+        QMessageBox.about(self, "About Style sheet",
+                "The <b>Style Sheet</b> example shows how widgets can be "
+                "styled using "
+                "<a href=\"http://doc.qt.digia.com/4.5/stylesheet.html\">Qt "
+                "Style Sheets</a>. Click <b>File|Edit Style Sheet</b> to pop "
+                "up the style editor, and either choose an existing style "
+                "sheet or design your own.")
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+
+    window = MainWindow()
+    window.show()
+
+    sys.exit(app.exec_())
diff --git a/examples/widgets/stylesheet/stylesheet.qrc b/examples/widgets/stylesheet/stylesheet.qrc
new file mode 100644
index 0000000..d678af7
--- /dev/null
+++ b/examples/widgets/stylesheet/stylesheet.qrc
@@ -0,0 +1,37 @@
+<RCC>
+<qresource prefix="/">
+    <file>qss/coffee.qss</file>
+    <file>qss/default.qss</file>
+    <file>qss/pagefold.qss</file>
+    <file>images/pagefold.png</file>
+    <file>images/frame.png</file>
+    <file>images/radiobutton_unchecked.png</file>
+    <file>images/radiobutton_unchecked_pressed.png</file>
+    <file>images/radiobutton_unchecked_hover.png</file>
+    <file>images/radiobutton_checked.png</file>
+    <file>images/radiobutton_checked_pressed.png</file>
+    <file>images/radiobutton_checked_hover.png</file>
+    <file>images/pushbutton.png</file>
+    <file>images/pushbutton_hover.png</file>
+    <file>images/pushbutton_pressed.png</file>
+    <file>images/checkbox_unchecked.png</file>
+    <file>images/checkbox_unchecked_pressed.png</file>
+    <file>images/checkbox_unchecked_hover.png</file>
+    <file>images/checkbox_checked.png</file>
+    <file>images/checkbox_checked_pressed.png</file>
+    <file>images/checkbox_checked_hover.png</file>
+    <file>images/down_arrow.png</file>
+    <file>images/down_arrow_disabled.png</file>
+    <file>images/up_arrow.png</file>
+    <file>images/up_arrow_disabled.png</file>
+    <file>images/sizegrip.png</file>
+    <file>images/spinup.png</file>
+    <file>images/spinup_off.png</file>
+    <file>images/spinup_hover.png</file>
+    <file>images/spinup_pressed.png</file>
+    <file>images/spindown.png</file>
+    <file>images/spindown_off.png</file>
+    <file>images/spindown_hover.png</file>
+    <file>images/spindown_pressed.png</file>
+</qresource>
+</RCC>
diff --git a/examples/widgets/stylesheet/stylesheet_rc.py b/examples/widgets/stylesheet/stylesheet_rc.py
new file mode 100644
index 0000000..57de1ba
--- /dev/null
+++ b/examples/widgets/stylesheet/stylesheet_rc.py
@@ -0,0 +1,1224 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Wed May 15 13:03:40 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x02\x01\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x13\x08\x06\x00\x00\x00\xd6\x3a\x8e\x1f\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x01\x93\x49\x44\x41\x54\x48\xc7\xd5\
+\x97\xcd\x6a\x5a\x51\x14\x85\xd7\xf6\x1e\xbc\xde\xdb\x0e\xfa\x63\
+\x48\x0c\x29\x38\xed\x13\xa4\x83\x0e\xda\x52\x3a\xc9\x28\x8f\x62\
+\x90\xbc\x40\x86\x39\xd0\x99\xb3\xe4\x09\x4a\xfb\x00\x0e\x04\x07\
+\x1d\x54\x0a\x15\x9c\x16\xa1\x52\xd0\x4a\xa1\xc4\xe3\xd5\xa3\xb8\
+\x57\x06\xb9\x4a\x7d\x83\x7b\x16\xec\xf9\xda\xac\xf5\x6d\xce\x11\
+\x92\xb0\xd6\xbe\x10\x91\x8f\x00\xde\x92\x7c\x86\xe2\x8a\x25\x91\
+\x9f\x4a\xde\x00\xb8\x6e\x36\x9b\x1b\x63\xad\xad\x0b\xd0\x4f\x93\
+\x8a\xa9\x9f\x1c\x67\x71\x5c\x9e\x14\xd7\x3e\xf0\x6f\x36\xab\x0e\
+\x7f\xfd\xbe\x02\x70\x0a\xe0\x5c\xac\xb5\x5f\xd2\xa4\xf2\xe1\xfd\
+\xeb\xd3\x71\x14\x45\x04\x00\x92\x28\xb2\x26\xd3\xbf\xc9\xd7\xef\
+\xfd\x1a\x80\x33\x03\xe0\x4d\xfd\xe4\x38\x8b\xa2\x88\x24\x45\x49\
+\x41\xc1\x17\x38\x78\xfe\xd4\x3f\x4a\x93\x6c\x9e\x2d\xde\x19\x92\
+\x4f\x92\xa4\x32\xde\x28\x45\x55\x05\x81\x28\x4d\x2a\xbc\x9b\xb9\
+\x23\x03\x00\x4a\x60\xa3\x2a\x45\xaf\xce\x1e\x0e\x04\x54\xb5\x64\
+\xb6\x9d\x57\x12\x21\x2d\x90\x4b\x4c\x0e\x37\x94\x40\x48\xfe\xb7\
+\x56\x77\x09\x30\xb4\x04\x72\xaf\x66\xd7\xa7\xa0\x13\x00\x72\x06\
+\x10\x9c\x1e\xae\x90\x3e\x4c\x80\x0d\xda\x26\x90\x5f\x21\x04\x9a\
+\x00\xf3\xfe\x87\xb4\xc0\xff\x0c\xcc\xbd\xf7\x91\x06\x06\xc0\xca\
+\x7b\xa8\xea\x5d\x49\x44\xbe\xfd\x99\x4e\x13\x25\x85\x40\x10\x33\
+\x73\xae\x9c\x2d\x16\xe9\x72\xb9\xec\x19\x92\x17\xce\xb9\xde\x60\
+\x30\xa8\xd6\x6a\xb5\x79\x1c\xc7\x9b\xe2\x82\x4b\x71\xce\x95\x47\
+\xa3\xd1\x63\x55\xfd\xd1\x6a\xb5\x3e\x49\xfe\xa1\x79\x25\x22\xb7\
+\x24\x5f\x06\xd0\x9e\xf5\x7a\xbd\xfe\xdc\xe9\x74\x2e\xdb\xed\xf6\
+\x64\xef\x01\xd7\x68\x34\xaa\x59\x96\x1d\xae\x56\xab\xa8\xa0\x09\
+\xb0\xdb\xed\x8e\x87\xc3\xa1\x07\xe0\x49\xfa\x7b\x55\x3a\x21\x14\
+\xe4\x9f\xa0\x8a\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x00\xfd\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x61\x00\x00\x00\x15\x08\x03\x00\x00\x00\x61\x6b\x70\x46\
+\x00\x00\x00\x3c\x50\x4c\x54\x45\xf7\xf7\xf7\xb0\xb0\xb0\xff\xff\
+\xff\x8b\x8b\x8b\x8c\x8c\x8c\x9d\x9d\x9d\xae\xae\xae\x8b\x8b\x8b\
+\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\x8b\xde\
+\xde\xde\x97\x97\x97\x8b\x8b\x8b\xdf\xdf\xdf\x8b\x8b\x8b\x8b\x8b\
+\x8b\x8b\x8b\x8b\x51\x5f\xc0\xbc\x00\x00\x00\x13\x74\x52\x4e\x53\
+\xca\xea\x00\xf4\xfd\xf3\xeb\x52\x9d\xd6\xfc\x1e\x20\xd4\xf6\x9c\
+\xd4\xda\xfe\x7e\x17\x61\x47\x00\x00\x00\x5d\x49\x44\x41\x54\x78\
+\x5e\xed\xd5\xc7\x01\xc0\x20\x14\x02\x50\xfc\xcd\x6e\x8a\xfb\xef\
+\x9a\x63\x26\xe0\xe6\x5b\x80\x13\x00\x91\x51\x6a\xdb\x0c\xad\x96\
+\x21\x02\xc9\x6a\x1e\x89\x21\xdc\x34\x0b\xba\xae\x09\x96\xb9\xb4\
+\xe3\xb2\x1b\x3c\xb7\x5d\x78\x1c\x4c\xfe\xe0\x0d\x30\xc5\x8b\x9d\
+\xc0\x94\xf6\x49\xf8\x9d\x84\x93\xc0\xef\x34\x7f\x97\xf8\xdb\xca\
+\xff\x07\xfe\xc7\xf1\x7f\xfa\x03\x24\xa3\x11\xb1\xa1\x0a\xfe\x19\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x9f\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x04\x00\x00\x00\xd8\xe2\x2c\xf7\
+\x00\x00\x00\x02\x73\x42\x49\x54\x08\x08\x55\xec\x46\x04\x00\x00\
+\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\x00\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x9b\
+\xee\x3c\x1a\x00\x00\x00\x33\x49\x44\x41\x54\x18\xd3\x63\x98\x55\
+\x31\xeb\x07\x56\x58\xc1\x30\xeb\x3f\x2e\x08\x96\x7a\x32\xf9\x6d\
+\x0f\x32\x7c\x32\x19\x2e\xf5\xb9\xe3\x7f\x03\x32\xfc\xdc\x31\x84\
+\xa4\xf0\xf8\x0b\x57\x68\xe0\x0c\x43\x00\x32\x58\x02\x75\x45\x0f\
+\x73\xc2\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x14\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0f\x00\x00\x00\x0b\x08\x06\x00\x00\x00\xa0\x47\xd7\x5c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x00\xa6\x49\x44\x41\x54\x28\xcf\x9d\
+\x90\x31\x0e\x41\x51\x14\x44\xe7\x72\xa3\x7d\x91\x58\x1e\x6b\x60\
+\x19\xba\xdf\x4a\x94\x2c\x41\xa5\xb0\x01\x85\xc4\x3a\xf0\x55\x12\
+\xfe\xdc\x3b\x0a\x11\x0d\xc5\x33\xe5\x24\x27\x33\x39\xd6\x34\xcd\
+\xa5\x94\x72\xc5\x8f\x98\xd9\xd7\xbe\x6d\xdb\x91\x97\x52\xce\x93\
+\xc9\xd8\x50\x99\xd5\x6a\x7d\xf2\xcc\x54\x90\xd5\xb0\x24\xb8\x94\
+\x0a\x76\xb5\x2c\x20\xc1\x95\xca\x20\xfb\xd5\x2c\x04\x4f\x49\x41\
+\xfe\xb1\x0c\xb8\x94\x19\x51\x7f\x5b\x78\xdd\xfe\x6b\x39\x23\xc2\
+\x25\x65\x2d\x1c\x99\x46\xf2\xee\x92\xaa\x6c\x3f\xba\xae\xb7\x3f\
+\x1c\x07\x64\xcc\x9d\xc1\xdb\x66\xbb\x1b\x1a\x0c\x30\xe8\xa5\xe2\
+\xad\x04\x32\x40\xfa\xb0\x22\xa3\x25\xb9\x98\xce\x66\xcb\x27\x2a\
+\x8d\x77\x7e\xf9\xf5\x91\x67\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x00\xc5\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x07\x00\x00\x00\x05\x08\x03\x00\x00\x00\xbe\x44\x06\xea\
+\x00\x00\x00\x39\x50\x4c\x54\x45\xff\xff\xff\x6e\x5d\x5d\x6e\x5c\
+\x5c\x51\x44\x44\x14\x11\x11\x05\x04\x04\x03\x02\x02\x20\x1a\x1a\
+\x00\x00\x00\x1a\x16\x16\x23\x1d\x1d\x1c\x17\x17\x59\x4a\x4a\x34\
+\x2c\x2c\x5e\x4f\x4f\x24\x1e\x1e\x47\x3c\x3c\x47\x3c\x3c\x49\x3d\
+\x3d\x21\xaf\x18\x83\x00\x00\x00\x13\x74\x52\x4e\x53\x00\xa2\x7e\
+\x5d\x32\x39\x16\x23\x01\x46\x3e\x0f\x75\x3e\x7c\x19\x7f\x60\x84\
+\x40\x08\xcd\x6e\x00\x00\x00\x28\x49\x44\x41\x54\x08\x1d\x05\xc1\
+\x87\x01\x00\x20\x0c\xc3\x30\xa7\x65\x6f\xf8\xff\x58\x24\x80\x98\
+\x00\x08\xb3\x16\x20\x5f\xf7\x06\x7d\x98\xd9\xda\x1c\x49\xd2\xfb\
+\x0b\xb7\x00\xb7\x4d\xe4\xc7\xea\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x01\x1b\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0f\x00\x00\x00\x0b\x08\x06\x00\x00\x00\xa0\x47\xd7\x5c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x00\xad\x49\x44\x41\x54\x28\xcf\x9d\
+\x90\x41\x4a\xc4\x40\x10\x45\xdf\x4f\xfe\xb8\xc8\x4e\x74\xe7\x71\
+\xd4\x6b\xa8\x17\x08\x78\x03\xef\x90\x6c\x04\xef\xe1\x2a\x82\x2b\
+\xcf\x23\x43\x46\x48\xba\xdb\x72\x21\xd9\x4f\xfa\x41\x41\xfd\x82\
+\x47\x51\xa5\x61\x18\xbe\xba\xae\xbb\xe1\x9f\x90\x14\x5b\xbf\xe5\
+\x88\x6d\x44\xac\xeb\x7a\x4c\x29\xbd\xf6\x7d\xff\xe6\x83\xdd\x3d\
+\x3d\x3e\x24\xce\x43\xcb\xb2\x5c\x4e\xd3\xc7\xcb\x38\x8e\x34\x48\
+\x2a\x39\x73\x6e\xb9\x6d\x7f\xef\xef\x6e\x97\x83\xfd\x6c\x41\x53\
+\x72\x66\x27\x61\xfb\xc2\x08\x95\x9c\xf6\xca\xa8\x51\x6b\xa1\x9a\
+\xcd\x10\x60\x40\xa5\xa4\x0a\x37\x30\x75\x37\x43\x04\x16\xa8\x46\
+\x8e\x08\x8c\x50\xae\x78\x18\x01\x9e\xe7\xd3\xd5\xfb\xf4\xf9\xbd\
+\xd7\x9d\x4f\x3f\xd7\x7f\xf5\x8b\x6a\x66\x34\x31\xed\x59\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xf0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x03\x00\x00\x00\x45\x35\x14\x4e\
+\x00\x00\x00\x3c\x50\x4c\x54\x45\xf7\xf7\xf7\xff\xff\xff\x90\x90\
+\x90\x8b\x8b\x8b\x8e\x8e\x8e\x8b\x8b\x8b\xec\xec\xec\x90\x90\x90\
+\xc3\xc3\xc3\xde\xde\xde\xf0\xf0\xf0\xa0\xa0\xa0\xed\xed\xed\x90\
+\x90\x90\xc2\xc2\xc2\x8f\x8f\x8f\xdc\xdc\xdc\x90\x90\x90\x8c\x8c\
+\x8c\x8c\x8c\x8c\x20\x9b\x87\x59\x00\x00\x00\x14\x74\x52\x4e\x53\
+\xc8\x00\xf0\x33\x87\x04\xcc\x9f\xde\xd2\xcb\xe7\xcc\xda\xdf\xa6\
+\xd3\xdd\xf9\xfa\x54\x29\x6f\x66\x00\x00\x00\x4f\x49\x44\x41\x54\
+\x78\x5e\x55\x8e\x59\x0a\x80\x30\x10\x43\x93\x99\x69\xab\xdd\xb5\
+\xf7\xbf\xab\x88\x58\x98\xf7\x17\x42\x16\x90\xd4\xd4\xee\x96\x94\
+\x24\x18\x4c\x8e\x33\x9f\x87\x58\x20\x68\xa5\xe2\xa5\x16\x23\x54\
+\x22\x3e\xa2\x28\x46\xc7\x4f\x1f\xb8\xe6\x56\xf3\xc2\xca\x5b\xe5\
+\xe5\x3d\x9f\xf3\x9d\x7e\xcf\x7f\xf1\x3f\x1f\x07\x1b\x02\xe3\x87\
+\x82\x10\xf0\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\xec\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x06\x00\x00\x00\x72\xeb\xe4\x7c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x01\x7e\x49\x44\x41\x54\x28\x53\x7d\
+\x92\xcb\x4e\xc2\x60\x10\x85\x89\xbc\x8b\x21\x26\xbe\x95\x6e\x25\
+\x6e\x58\xb9\xe4\x25\x34\xd1\x1a\x2c\x15\x85\x52\xae\x01\x1b\xca\
+\x55\xd3\x16\xe4\xd6\x16\x90\x08\x26\xb0\x68\xa9\xa2\x5b\x96\x78\
+\xa6\xa1\xa4\x1a\xc2\xe2\xa4\xed\xdf\xf3\x75\x66\xce\xd4\xb7\x5e\
+\xaf\x7d\xae\x18\x86\x09\x40\x61\x28\x05\x75\x36\x57\x7a\x0e\x78\
+\x7d\xae\xd9\x0f\x05\x21\x83\x8b\x46\x75\x3e\x91\x18\x65\xd2\xe9\
+\x49\x4a\x10\x8c\x87\x58\xac\x75\x17\x89\xc8\x9b\xf7\x7e\x2f\x74\
+\x7e\xcb\x30\x03\x21\x99\xfc\x90\x4a\xa5\x1f\x45\x96\x2d\xad\xd7\
+\x9b\xb5\x54\xd5\x6c\xd4\x6a\xcb\x42\x3e\x3f\x8c\xb2\x6c\x03\x9e\
+\xa0\x03\x01\x38\xa6\x0a\x04\x34\xea\xf5\x2f\xd3\x34\xf5\xd5\x6a\
+\xa5\xb8\xb2\x17\x8b\xfe\x6b\xb3\x69\x89\xc5\xa2\x0e\xb0\x42\x7e\
+\x82\xc2\xd4\x12\x55\xb0\x4c\x53\xf3\x02\xae\x3e\x6d\xbb\xaf\xca\
+\xb2\x2d\xf0\x7c\x05\xad\x5e\x10\x94\x4a\xf2\xfc\x1b\x0e\xad\x5d\
+\x80\x2b\x43\xd3\xe6\xa8\x26\x73\x2c\x7b\x4d\x50\x27\x9b\xc9\x4c\
+\x69\x86\x7d\xd0\x64\x3c\x9e\x56\xcb\xe5\xee\x3d\xc7\x65\x9d\x4a\
+\x48\x69\x40\x43\xef\x83\x46\x86\x31\x93\x44\xf1\x19\xd0\xa5\x33\
+\xd3\x23\x62\xa5\x94\x68\xe8\x5d\xc0\xf7\x72\xd9\xeb\xb6\xdb\x66\
+\x2e\x9d\xce\xa3\xbd\x90\x93\x1e\x86\x53\x28\x56\x4a\x89\x86\xfe\
+\x0f\x0c\x74\x7d\x5e\xaf\x56\x55\x7c\x5c\x80\xf7\x68\xbb\x27\xda\
+\x03\xc5\x4a\x29\xe9\xfd\xfe\xfc\x1d\x33\x0c\xd1\x12\x55\x00\xa0\
+\xf0\xf1\x78\x12\x9e\xd3\x3f\x7f\x04\x16\x77\x86\xc3\x32\x62\x2d\
+\x3f\x15\x0a\x2f\x15\x49\x6a\x97\x44\xb1\x86\x96\x72\xa8\x40\xc0\
+\x09\x3c\x07\x5b\xc8\xfb\xef\xd1\x1e\x60\xb8\xc1\xc0\x39\xe8\x0a\
+\xf7\x21\x9c\x1d\x7a\x7d\xbf\xa2\x4e\xfc\xbe\x25\x1e\x24\xce\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x81\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x10\x00\x00\x00\x10\x01\x03\x00\x00\x00\x25\x3d\x6d\x22\
+\x00\x00\x00\x06\x50\x4c\x54\x45\x00\x00\x00\xae\xae\xae\x77\x6b\
+\xd6\x2d\x00\x00\x00\x01\x74\x52\x4e\x53\x00\x40\xe6\xd8\x66\x00\
+\x00\x00\x29\x49\x44\x41\x54\x78\x5e\x05\xc0\xb1\x0d\x00\x20\x08\
+\x04\xc0\xc3\x58\xd8\xfe\x0a\xcc\xc2\x70\x8c\x6d\x28\x0e\x97\x47\
+\x68\x86\x55\x71\xda\x1d\x6f\x25\xba\xcd\xd8\xfd\x35\x0a\x04\x1b\
+\xd6\xd9\x1a\x92\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x01\xa9\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x06\x00\x00\x00\x72\xeb\xe4\x7c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x01\x3b\x49\x44\x41\x54\x28\x91\x63\
+\x98\x35\x6b\x56\x05\x10\xff\x20\x01\x57\x30\x00\x89\xff\xa4\x62\
+\xb8\xa6\xb5\xab\x56\x2d\xdd\xb8\x6e\xdd\xd4\xcd\x1b\x36\xf4\x6c\
+\xdd\xb4\xa9\x79\xfb\xe6\xcd\x55\x3b\xb7\x6e\x2d\xdc\xbd\x6d\x5b\
+\xc6\x9e\xed\xdb\xe3\x76\x6c\xde\x1c\x8f\xa1\x69\xd3\x86\x0d\x13\
+\x80\x8a\xea\xf7\xec\xd8\x51\x7a\x60\xd7\xae\xec\xc3\x7b\xf7\x26\
+\x1e\x3b\x70\x20\x7c\xd7\xd6\xad\x91\x53\x26\x4d\x9a\xb8\x79\xdd\
+\xba\x40\x0c\x4d\xdb\x36\x6e\x6c\xdb\xbb\x63\x47\xc9\x81\xdd\xbb\
+\xb3\x80\x1a\x12\x80\x1a\xc2\x0e\xec\xdc\x19\xd4\xde\xd6\x76\xa3\
+\xb1\xb1\xf1\x7f\x5f\x6f\xef\x14\x0c\x4d\x3b\xb6\x6c\xa9\x01\x6a\
+\xc8\x04\x6a\x88\x07\x6a\x08\xbd\x7a\xf1\x62\xd2\xe4\x49\x93\x6e\
+\x82\x34\x00\xf1\x9b\xa5\x8b\x16\x79\x60\x68\x9a\x3f\x67\xce\x8c\
+\x96\x96\x96\x37\xeb\xd7\xae\x5d\xfc\xfe\xed\xdb\xa9\x8b\x17\x2d\
+\xba\x05\xd5\xf0\x75\xde\xec\xd9\xbe\x07\x77\xef\xd6\xc6\xd0\x34\
+\x63\xda\xb4\x85\x20\x45\xcd\xcd\xcd\xbf\x17\x2d\x5a\x04\xb3\xe1\
+\xcf\xd4\xc9\x93\x13\x6e\x9c\x3f\x2f\x8b\x55\xd3\xfe\x5d\xbb\x62\
+\xbb\x3a\x3b\x8f\x40\x15\xff\x87\xfa\xa3\x0c\xa4\x01\xa7\x26\xa0\
+\x60\xf0\xc1\x5d\xbb\xdc\x81\x36\x3d\x00\x69\xe8\xec\xe8\x98\x00\
+\xd3\x80\x53\x13\x30\x5e\x22\x81\xa1\xe7\xba\x69\xdd\x3a\xd7\xe9\
+\x53\xa7\x26\x02\x83\xda\x08\x19\x03\xc5\xed\x31\x34\x91\x9a\x22\
+\x48\x4e\x7b\x00\xb1\x3d\xbe\x78\xa0\x57\xd0\xf5\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x9f\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x04\x00\x00\x00\xd8\xe2\x2c\xf7\
+\x00\x00\x00\x02\x73\x42\x49\x54\x08\x08\x55\xec\x46\x04\x00\x00\
+\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\x00\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x9b\
+\xee\x3c\x1a\x00\x00\x00\x33\x49\x44\x41\x54\x18\xd3\x63\x68\xac\
+\x68\xfc\x81\x15\x56\x30\x34\xfe\xc7\x05\xc1\x52\xf7\x26\xbf\xec\
+\x41\x86\xf7\x26\xc3\xa5\x3e\x74\xfc\x6f\x40\x86\x1f\x3a\x86\x90\
+\x14\x1e\x7f\xe1\x0a\x0d\x9c\x61\x08\x00\xf5\x8f\xf9\x54\xcd\x1d\
+\xdf\x00\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x12\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0f\x00\x00\x00\x0b\x08\x06\x00\x00\x00\xa0\x47\xd7\x5c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x00\xa4\x49\x44\x41\x54\x28\xcf\x9d\
+\x90\x21\x0e\xc2\x40\x10\x45\xff\x4c\x26\x2b\x10\x90\x10\x04\x86\
+\x5e\xa0\xc8\x9e\x8a\x0b\x70\x10\x3c\xc7\x41\x74\x35\x07\x58\x85\
+\x42\x50\x30\x4d\x77\x67\x10\x85\x84\xd4\xb0\xdb\xe7\xfe\x4f\x7e\
+\x5e\xf2\xa9\x6d\xdb\x8b\x73\x6e\x8b\xff\x98\x99\xa9\xaa\xbe\x54\
+\xf5\xdc\x34\xcd\x49\x98\x79\xb1\xaf\x6b\x45\x1e\x94\x52\x5a\x85\
+\x10\x8e\xde\x7b\x93\xb1\x88\x28\x40\xab\x6a\xd7\x77\xd7\xe7\x41\
+\x00\x70\x8a\x03\x0a\x31\x26\x72\xa3\x39\xe6\x98\x69\x09\x82\xfb\
+\x26\x11\x21\x01\x8c\x32\xcd\xdd\x6f\x88\x71\x60\x81\x81\xf3\xcc\
+\xd3\xeb\x81\x12\xf3\x74\x8e\xcf\x61\x73\xcc\x06\x81\xcd\x34\x9b\
+\x41\x86\xa4\xeb\xdb\xbd\x7b\x94\x6e\xa3\xea\xe6\x0d\x9b\x62\x55\
+\x2d\xe3\x08\x6f\xa2\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x02\x0d\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x13\x08\x06\x00\x00\x00\xd6\x3a\x8e\x1f\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x01\x9f\x49\x44\x41\x54\x48\xc7\xd5\
+\x57\xcd\x4a\xc3\x40\x18\xdc\x4d\xd6\x5a\x2a\xfd\xc1\x9f\x46\x85\
+\x5a\x29\x88\xf4\x09\x4c\x3d\xa9\x27\xc1\x5e\x7c\x94\x4a\xf1\x05\
+\x3c\x5a\xf0\xd6\x9b\x3e\x81\x98\x07\x28\xe6\x50\x7a\xb2\x97\x2a\
+\x5e\xa5\xb7\xaa\x87\xd8\x54\x48\x4c\x62\xf2\xad\xdf\xd2\xd8\xf6\
+\x11\xb2\x13\x16\xf6\xcb\x69\x66\x67\x06\x76\x29\xe7\x9c\xb4\x5a\
+\xad\x12\xa5\xf4\x06\xd7\x31\x00\xac\x92\xe4\x82\x2b\x8a\xf2\x86\
+\x1c\x6f\x71\x7f\xdd\x6c\x36\x23\x86\xe4\x77\x91\xf8\x73\x3e\x9f\
+\x67\xba\xae\x07\x9a\xa6\x39\x09\x16\x40\x86\xc3\xa1\xd6\xeb\xf5\
+\xae\xf0\xe0\x0f\x70\x3c\xa7\x28\xc0\xa8\x54\x2a\xa7\xf5\x7a\x7d\
+\xc4\x10\xf8\x73\x59\xb8\x92\x60\x78\x28\x62\xc9\x30\x8c\x2d\xdc\
+\x9f\x31\x4a\xc9\x51\xad\x56\xe3\x8c\xa9\x2a\x40\x14\x22\xf9\x88\
+\x24\x1c\xe5\xf2\x8e\x5f\x28\x14\x5c\xdb\xb6\x4f\x18\x00\x2f\xa4\
+\xd3\xe9\x9f\x28\x02\x21\x00\x88\x24\xc8\xe5\xb2\xdc\xb2\xac\x4d\
+\x36\x6b\x07\x44\x94\x83\x34\xfc\x91\x30\x21\x58\x66\x85\xfd\x4f\
+\x1c\xc4\x02\x99\xf8\x0b\x50\x36\x53\x23\x3e\x2e\x91\x03\xb1\x04\
+\x16\x9f\xbf\xf0\x83\xc8\x15\xa1\x05\x01\x53\xfe\x5c\x64\x4a\x36\
+\xfe\x64\x5e\x62\x8c\x10\x97\x39\x42\x92\x96\x78\x1e\x21\x41\x1e\
+\xa4\xed\xc0\xb4\xc6\x92\x45\x28\x76\x00\x2f\x72\x4e\x18\x86\xaa\
+\x4a\x55\xa9\x22\xe4\x38\xae\x48\xcc\xb7\x70\xe0\x69\x34\x7a\x3f\
+\x2c\x6d\x17\xc3\x84\x5f\xe2\x66\xb0\xbe\xc6\x29\x7b\x32\xc9\x78\
+\x9e\xd7\x67\x48\xfa\xe2\xd1\x34\xfb\xc5\xe2\xc6\x5a\x75\x7f\xcf\
+\x59\xc9\x64\xc2\xe4\xc6\x1e\xa8\x65\x8d\x53\x83\x97\xd7\x2c\xf2\
+\x1e\xb4\xdb\xed\x7b\x1a\x3f\x68\x74\x8c\xd2\x1d\xee\xab\x12\x18\
+\xf0\x8b\x91\x7f\x30\x4d\xf3\xb2\xd3\xe9\x7c\xd2\xc5\xd8\x34\x1a\
+\x8d\x75\xd7\x75\xb5\x20\x08\xd4\x64\x3a\xc0\x79\xb7\xdb\xfd\xc0\
+\xf7\x80\x8f\xa3\x8f\xa3\xff\x07\x2d\x6a\xf7\xea\xcc\x13\x18\xa8\
+\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x15\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0f\x00\x00\x00\x0b\x08\x06\x00\x00\x00\xa0\x47\xd7\x5c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x00\xa7\x49\x44\x41\x54\x28\xcf\x9d\
+\x90\x41\x0a\xc2\x40\x0c\x45\xff\x1f\x13\x17\xb3\x13\xdd\x79\x1f\
+\xbd\x86\x3d\x40\xc1\x1b\x78\x87\x76\x23\x78\x04\x41\x70\x5d\xd7\
+\x9e\x47\xc7\xd5\xb4\x98\xb8\x90\xd9\xb7\x7d\x10\x48\x02\x9f\xff\
+\x13\x36\x4d\xf3\x8c\x31\x6e\xf1\xc7\x49\x7a\xe9\xcb\xec\x5e\x56\
+\xf0\xbe\xef\xd3\x30\x0c\xe7\xba\xae\x2f\xa2\xaa\xb1\xaa\x0e\x03\
+\xc6\xc1\x9c\xf3\xaa\xeb\x1e\xa7\xb6\x6d\x11\x00\xd0\xcc\x30\xb6\
+\x54\xd5\xf6\xfb\x5d\x56\xd5\xa3\x90\x0c\x6e\x86\x29\x04\xd2\x45\
+\x64\x29\x24\x68\xf6\xc5\x54\x42\x08\x0b\x21\xa6\x3b\x97\x7f\x0a\
+\x48\xda\x1c\xb1\x03\x42\x60\xa6\x33\x20\x98\x79\xb3\xc3\x21\x24\
+\xe9\x73\x63\xa7\xf4\x59\x5f\x6f\xf7\xd7\x54\xed\x3b\xa5\xcd\x0f\
+\xda\x7f\x66\xb0\xc9\x65\xf3\x61\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x00\xf9\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0f\x00\x00\x00\x0b\x08\x06\x00\x00\x00\xa0\x47\xd7\x5c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x00\x8b\x49\x44\x41\x54\x28\x91\x9d\
+\xd0\x31\x12\x82\x30\x14\x84\xe1\xe5\x15\xe6\x2e\xd2\xcb\x19\xed\
+\x1d\xcf\x04\x1d\x27\xb0\xa6\x20\x38\x50\xe8\x4c\x12\xde\x6f\xa3\
+\xbd\xa1\xf8\xca\x9d\xdd\x59\x1b\x86\x21\x8e\xe3\xf8\xa8\xd5\xf7\
+\xfd\x66\x21\x9c\x96\xb6\x3d\x7b\xad\x10\xc2\x6c\x38\xec\xa5\xa8\
+\x96\x24\x19\xe0\x7b\xc9\xaa\x05\xc8\xe0\x60\x33\xc8\x10\x7e\x24\
+\x8c\x7e\xcd\x7b\x56\x2d\x21\x99\xd0\xa1\xd9\xe0\xfe\x3d\xac\x2e\
+\x58\x72\x6e\xdc\x49\x86\xa0\xe6\xe5\x9c\x92\xcd\xcf\x35\x00\x77\
+\x03\x5e\x53\xdc\xec\x0f\xcd\x14\x57\xa6\x65\x5b\xdf\x29\x5f\x2f\
+\x5d\x77\xfb\x00\x6e\x37\xd5\xb0\x67\xb7\x7c\x1f\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x06\x09\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x32\x00\x00\x00\x2d\x08\x06\x00\x00\x00\xec\xbf\x38\xff\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x05\x9b\x49\x44\x41\x54\x68\xde\xd5\
+\x99\x4b\x4c\x63\x55\x18\xc7\x31\x63\x9c\x48\x4c\x34\xce\xca\xc4\
+\xc4\x85\x0b\x17\x6a\x8c\xc6\xa8\x1b\x63\x62\x66\xa5\x9b\x89\x3b\
+\x17\x46\x63\x8c\x2b\xc7\x07\xa3\xf3\xd0\x4c\xcc\x18\x1d\xc6\x30\
+\x99\x90\xcc\x42\x98\x41\x23\x03\x03\x41\x79\xb6\x85\x96\xbe\x5f\
+\xb4\x94\x47\x5b\xca\xa3\x40\x5b\x28\x2d\xa5\x14\x28\xef\x77\x29\
+\xc7\xff\xd7\xf4\x34\x37\x04\x98\x0a\xb7\xd0\xbb\xf8\x2f\xda\x45\
+\xcf\xf9\xf5\x7c\xdf\xef\x9c\x7b\x6e\x41\x75\x4d\xdd\x1d\xcf\x48\
+\xf4\x72\x38\xce\x3e\x95\x70\x9e\x28\x68\x6d\x6d\x7d\xb6\xf2\x41\
+\x55\x77\x47\xf7\x60\x25\xbe\xf8\x56\xa2\x39\x5b\xc0\x18\x2b\xe8\
+\xe8\xe8\x78\xa5\xb1\xb1\xd1\xa5\x35\x58\x0d\xbe\xc9\xd5\x1f\x25\
+\x0b\x92\x86\x79\x5b\xad\x56\x7b\x8d\x26\x8b\xbf\xdb\x33\x76\x57\
+\xb2\x20\x14\x93\xc9\xf4\xae\x4e\xa7\x0b\xf6\xf6\xf6\xae\x1b\xcc\
+\x0e\x79\x30\x96\xf8\x5e\x92\x20\x14\x83\xc1\x70\xde\x68\x34\x46\
+\x46\x47\x47\x99\x56\x6f\x72\xf7\x0d\x4f\x15\x4b\x12\x84\xa2\xd7\
+\xeb\x3f\x34\x9b\xcd\x51\xbf\xdf\xcf\xec\xf6\xce\xb8\xd9\xe6\x7c\
+\x18\x9a\xdb\xfd\x4e\x72\x20\x14\x94\xd8\x47\x56\xab\x35\x16\x08\
+\x04\xd8\xe0\xe0\xe0\xae\x5a\x6b\xb4\x78\x83\x0b\xd7\x25\x07\x42\
+\x91\xcb\xe5\x5f\x51\xbf\x10\x8c\xcf\xe7\x63\x26\x93\x39\x64\xef\
+\xf1\x96\x49\x0e\x84\x22\x93\xc9\x5a\xc6\xc6\xc6\x18\x85\x60\x5c\
+\x2e\xd7\xb6\x46\x6f\x51\x05\xa6\x36\x2e\x4b\x0a\xa4\xae\xae\xae\
+\x50\xab\xd5\x06\x26\x26\x26\x52\x30\xd4\x37\xc3\xc3\xc3\x4c\xab\
+\x33\x0c\xf5\xf6\x07\x4b\x24\x03\x42\xa9\xaf\xaf\xff\x00\x2b\xb1\
+\x4a\x30\xe3\xe3\xe3\x29\x98\x91\x91\x11\xd6\xd9\xd9\xb9\xac\x33\
+\x75\xfe\x33\x31\xbb\x53\x24\x09\x90\x74\x89\x55\x10\x48\x28\x14\
+\x4a\xc1\x50\xdf\x90\xa2\x07\x06\x06\x98\x4a\xad\x73\xf4\xfb\x62\
+\x37\x24\x01\x52\x52\x52\x72\x06\x5a\xee\x8f\x44\x22\x2c\x1c\x0e\
+\xb3\x60\x30\xc8\xb8\x04\xa8\xd4\xcc\x66\xcb\xb4\xc9\xe6\xaa\xc8\
+\x7b\x10\x4a\x4d\x4d\xcd\x9b\x7d\x7d\x7d\x8b\x53\x53\x53\x19\x18\
+\x2e\x01\x82\x71\xbb\xdd\x49\xa5\x5a\xaf\x1b\x09\x2d\x5f\xc9\x6b\
+\x10\x4a\x4b\x4b\x4b\x31\x41\x70\x18\x2e\x01\x82\xa1\xbe\x19\x1a\
+\x1a\x82\x08\xf4\x7e\x7b\xef\xf0\x9d\xbc\x06\xa1\x12\xb3\x58\x2c\
+\x23\xb1\x58\x8c\x45\xa3\x51\x36\x39\x39\xc9\xf6\x4a\xc0\xeb\xf5\
+\x32\x87\xc3\xb1\xa1\xd2\x18\x9b\xc6\x63\xdb\x45\x79\x09\x92\xb6\
+\xd8\x35\x02\x99\x99\x99\x49\xc1\x50\xdf\xec\x95\x00\xc1\x78\x3c\
+\x1e\xa6\x54\xa9\x5d\xce\xc1\xd0\xaf\x79\x09\x82\x55\x39\x0b\xf5\
+\xfa\xe2\xf1\x78\x0a\x66\x7a\x7a\x3a\x03\xc3\x25\x40\x30\xd4\x37\
+\x38\xde\x30\xac\x60\x5c\x6b\xb4\xff\x9d\xc3\xf3\xda\xd1\x40\x28\
+\x4d\x4d\x4d\xbf\xcc\xcf\xcf\x33\xca\xec\xec\x6c\x06\x66\x3f\xa3\
+\x11\x0c\xf6\xa1\xdd\xd6\xb6\x76\xf3\xe0\xd8\xdc\xb5\xbc\x02\xc1\
+\xaa\x3c\x85\xc9\x8d\x2f\x2d\x2d\x65\x60\xa8\xdc\x0e\x93\x40\x7f\
+\x7f\x3f\xd3\x6a\x75\x21\x68\xfa\x6e\xde\x80\x50\x14\x0a\xc5\xed\
+\x95\x95\x15\x46\x30\x0b\x0b\x0b\x6c\x6e\x6e\x8e\x1d\x26\x01\x82\
+\xa1\x0d\x14\x22\x48\x28\xda\xd4\x0a\x7f\x64\xbd\x28\x2f\x40\x4a\
+\x4b\x4b\xcf\xa1\x6c\x42\xab\xab\xab\x6c\x79\x79\x39\x03\xc3\x25\
+\x40\x30\x5c\x02\x04\xc3\x25\x40\x30\xd8\x8f\x20\x82\xf6\xa1\x4e\
+\xd7\xe8\xcd\x53\x07\xa1\x68\x34\x9a\xfb\x9b\x9b\x9b\x6c\x6d\x6d\
+\x2d\x05\xb3\xb8\xb8\xc8\xb8\x04\x0e\x33\x1a\xf5\x0d\x59\x0d\x22\
+\x58\x51\xaa\x8d\x35\xc1\x99\x9d\xd3\x05\xa9\xaa\xaa\xba\x80\x95\
+\x48\x12\xcc\xfa\xfa\x3a\xa3\x52\xe3\x30\xd9\x48\x80\x60\x9c\x4e\
+\x27\x93\x2b\xda\xec\x6e\x6f\xe4\xa7\x53\x03\xa1\x0d\x12\x65\xe2\
+\x4d\x24\x12\x6c\x6b\x6b\x2b\x03\x93\x8d\x04\x08\x86\x4b\x00\xc7\
+\x1b\x86\xa7\xd2\x69\x8d\xc1\xf6\x07\x26\xf6\xcd\x89\x83\x50\x70\
+\x59\x51\xb9\xbb\xbb\xcb\x76\x76\x76\x32\x30\xd4\x37\x1c\x86\x4b\
+\x80\x60\xb8\x04\xf8\xb3\x8d\x50\x02\xd4\x37\x10\x41\x52\x06\x13\
+\xe0\xb1\xfa\xd2\x89\x83\xd4\xd6\xd6\x7e\x42\x93\xe7\x30\xdb\xdb\
+\xdb\x6c\x63\x63\x83\xed\x95\xc0\xa3\x8e\x35\x1c\x06\x5a\x67\x4a\
+\xa5\x32\x60\xb6\xbb\x7f\x3f\x51\x10\xda\xe9\x31\x89\x00\x81\x50\
+\x92\xc9\x64\x0a\x46\x28\x01\x82\xc9\x46\x02\x04\x43\x7d\x43\x30\
+\x10\xc1\xa6\x4c\xa1\xfa\x77\x2c\xba\xf9\xf5\x89\x80\x50\x70\x7d\
+\x54\xc7\x41\x38\x0c\xf5\x0d\x87\x39\x8a\x04\xa8\x6f\x7a\x7a\x7a\
+\x98\x4c\xae\x70\x76\xb9\xfd\xd7\x4f\x04\x04\x77\xc7\x57\x68\xf2\
+\x42\x18\x0a\x87\x11\x1a\x4d\x78\xac\x39\xe8\xd9\x46\x28\x01\xb2\
+\x1a\x1e\xea\x16\x5a\x55\xfa\x3f\x43\xb3\xc9\x8b\x39\x05\x29\x2b\
+\x2b\x7b\x1d\x7d\x90\xd8\x0b\x72\x98\x04\xb2\x3d\xd6\x50\xdf\x10\
+\x0c\x0e\xaa\xac\xb9\x45\x66\xf4\x8c\x4e\x5f\xca\x19\x08\x69\x58\
+\xd8\x27\xfb\xc1\x1c\x45\x02\x42\xa3\x11\x0c\x95\x9a\x4a\xa5\x0a\
+\x43\xd3\xb7\x05\x9a\x16\x0f\x84\xd2\xd5\xd5\xa5\x39\x08\x44\x28\
+\x01\x82\x39\x8e\x04\x08\x06\xb7\xa0\x89\xc6\x66\xb9\x6c\x34\xbc\
+\x72\x51\x74\x10\x5c\x80\x97\x1d\x06\x72\x90\xd1\x84\xc7\x1a\xea\
+\x1b\x9a\xbc\xcd\x66\x5b\xc6\xef\x05\x71\x04\x72\xe1\x75\x87\xa3\
+\xbd\xbd\xdd\x8e\x95\xb0\x41\xcb\xd6\xb6\xb6\x36\x33\x5e\x50\x99\
+\x9a\x9b\x9b\x95\xf7\xee\xdd\x6f\xaa\xf8\xeb\x41\xa1\xa8\x20\x0d\
+\x0d\x0d\x45\xfb\x35\xfc\x7e\xd9\x2b\x01\xfc\xfb\xdb\x98\x7c\x10\
+\x97\x81\x56\x6c\xb0\xd5\x58\x81\x5b\x28\xad\xdf\x90\x22\xe4\x02\
+\xf2\x1a\xf2\x22\xf2\x02\xf2\x3c\xf2\x5c\x3a\xf4\xdd\x63\xa2\x82\
+\x94\x97\x97\xbf\x43\xff\x6e\x36\x20\x14\xac\x46\x12\x75\x1f\xc5\
+\x7b\x19\x07\x20\x2a\xd2\x13\xa7\x5c\x45\xde\x47\x9e\xc9\x76\x6c\
+\x51\x41\xd0\xf0\xe7\xa0\xd1\x85\x47\x01\x90\xc1\x70\x39\x1e\xc1\
+\x3f\x2f\x47\xfd\xdf\x14\x00\x7c\x89\xbc\x8a\x9c\xf9\xbf\x63\x8b\
+\x0a\x42\x41\x49\xf8\x0f\x33\x17\x1a\x36\x8e\xda\x37\xc0\x46\xc5\
+\x02\x00\x2a\x9f\x97\x8e\x33\xae\xe8\x20\xb0\x8a\x7d\x3f\x08\xf4\
+\x00\x35\x6f\x17\x40\x4a\x04\x00\x3f\x23\xef\x21\x8f\x1f\x77\x5c\
+\xd1\x41\xa0\x60\xc5\xde\xa6\xee\xee\xee\x0e\xe1\xfb\x32\x01\x00\
+\xe5\x63\xe4\x69\xb1\xc6\x15\x1d\x04\x4d\xfb\x90\x43\x60\xf7\xde\
+\x44\x23\xbb\x70\x76\xba\x25\x00\xb8\x81\xbc\x25\xf6\xb8\xa2\x83\
+\xa0\x81\x53\x7b\x09\x76\xe6\x09\x5c\xaf\x7e\x91\x2e\x1f\x0e\xf1\
+\x03\xa9\x53\xec\x31\x73\x02\x82\x9b\x95\xab\x58\x15\x6b\x75\x75\
+\xf5\xcb\xf4\x19\x13\xff\x3c\x0d\xf1\x19\x52\x98\x0b\x88\x9c\x80\
+\x40\xc1\x4f\xd2\xf3\x09\xff\x8c\xc9\xbf\x81\x9c\xa7\x4d\x2b\x57\
+\x10\x94\xff\x00\x0c\x72\x2c\xb1\x4c\xc9\xc1\xa9\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x63\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x03\x00\x00\x00\x45\x35\x14\x4e\
+\x00\x00\x00\x7b\x50\x4c\x54\x45\xff\xff\xff\x8b\x8b\x8b\x8b\x8b\
+\x8b\x8e\x8e\x8e\x90\x90\x90\x8f\x8f\x8f\xf7\xf7\xf7\xf4\xf3\xf3\
+\xf0\xf0\xf0\xf2\xf1\xf1\xec\xec\xec\xed\xed\xed\xef\xed\xed\xeb\
+\xe8\xe8\xde\xde\xde\xdc\xdc\xdc\xe3\xe1\xe1\xe1\xdd\xdd\x90\x90\
+\x90\xdf\xda\xda\xde\xd9\xd9\x90\x90\x90\xc3\xc3\xc3\xda\xd4\xd4\
+\xc2\xc2\xc2\xd4\xcf\xcf\xd2\xcb\xcb\xd0\xc8\xc8\xa0\xa0\xa0\xc9\
+\xc2\xc2\x90\x90\x90\xc3\xbb\xbb\xc1\xb7\xb7\xc1\xb8\xb8\xc1\xb7\
+\xb7\x8c\x8c\x8c\xc1\xb8\xb8\x8c\x8c\x8c\xc2\xb8\xb8\xc2\xb9\xb9\
+\xc3\xba\xba\xd5\x0f\x4f\x7d\x00\x00\x00\x29\x74\x52\x4e\x53\x00\
+\x04\x33\x87\x9f\xa6\xc8\xca\xcb\xcb\xcc\xcc\xcd\xd1\xd2\xd3\xd5\
+\xd8\xda\xda\xdb\xdd\xde\xde\xdf\xe2\xe4\xe6\xe7\xec\xf0\xf2\xf5\
+\xf6\xf7\xf9\xf9\xfa\xfa\xfa\xfd\x3e\x2b\x06\xf8\x00\x00\x00\x6e\
+\x49\x44\x41\x54\x08\x5b\x5d\x8e\x41\x02\xc1\x30\x00\x04\xb7\x49\
+\x33\xa2\xa5\xa1\xa4\x82\x0a\x45\xf1\xff\x17\x3a\xf4\xa2\xe6\xbe\
+\xb3\x23\x49\xa6\x6c\x1f\x6d\x69\x24\x49\x85\xcd\x5d\xe3\x9b\x2e\
+\xdb\x42\x92\xed\x6b\x00\xea\xde\x4a\x26\x57\x4c\x54\xd9\xc8\x25\
+\x60\xb5\x59\x02\xc9\x29\x06\xd8\xde\x86\xeb\x1a\x42\xd4\xe8\xe1\
+\xf2\xfe\x3c\x8f\xe0\x47\xc5\x00\xa7\xfb\x6b\xd8\x43\x88\x72\x09\
+\x16\x87\xf3\x6e\xda\xcd\x9d\xf3\xbf\xbf\x96\xdf\xce\x2f\xbf\x0b\
+\x07\xc6\xa9\xa3\x54\xf8\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x02\x15\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x13\x08\x06\x00\x00\x00\xd6\x3a\x8e\x1f\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x01\xa7\x49\x44\x41\x54\x48\xc7\xd5\
+\x97\xbf\x8e\x52\x41\x14\xc6\xbf\x19\x66\xff\x68\x24\x5c\xcd\x6e\
+\xae\xc6\xec\x6a\xec\x6c\x28\x68\xc4\x0e\xed\x8c\x95\x8f\x82\x21\
+\xbe\x80\xa5\x37\xb1\xa3\xd3\x27\x30\xf2\x00\x24\x14\x04\xb7\x70\
+\x1b\xed\x6c\x70\x2a\x13\x2d\x48\x6e\x40\xae\x17\x98\x73\x3e\x0b\
+\x58\x43\x7c\x82\x3b\x5f\x37\xdd\xf9\xe5\x77\xce\xc9\x19\x43\x12\
+\x59\x96\x9d\x19\x63\xde\x1a\x63\x9e\xa8\xea\x2d\x54\x37\xb4\xd6\
+\x4e\x55\xf5\x1d\x80\x37\xbd\x5e\x4f\x5c\x96\x65\xf7\x8d\x31\x5f\
+\x1b\x8d\x86\x6b\xb7\xdb\xeb\x34\x4d\x97\x15\x06\x80\xf7\x3e\x9d\
+\x4c\x26\xaf\x49\x3e\x02\xf0\xc2\x64\x59\x36\x68\x36\x9b\xcf\x3a\
+\x9d\xce\x0f\xe7\x9c\x03\x70\x44\xb2\xca\x0c\xa5\xf7\xfe\x60\x30\
+\x18\xdc\x01\xf0\xdc\x59\x6b\x3b\xad\x56\x0b\xb5\x9a\x35\x22\x21\
+\x90\x14\x54\x3c\xe7\xe7\x67\xab\x24\x49\x8a\x3c\xcf\x9f\x3a\x6b\
+\x6d\x72\xe0\x5c\x19\x36\x9b\x9a\xaa\x56\xbe\xf8\xab\xd4\xeb\x37\
+\x38\x9b\xcd\x6e\x3b\x00\x20\x00\x15\x81\xaa\x22\x9a\x10\x50\x55\
+\xeb\xb6\x0f\x42\x42\x88\x0a\x60\x37\xa7\x66\x67\x80\x10\x55\xa8\
+\x48\x6c\x00\xf8\x67\x80\x1a\xa2\x02\xc0\x3e\x00\x49\x68\x10\x88\
+\x84\x58\x0d\x00\xa2\x21\x2e\x00\xe8\x9e\x01\x6c\x0d\x68\x88\x08\
+\x40\xff\x6f\xa1\xc8\x0c\x6c\x97\xff\x55\x0b\x81\x10\x89\x74\x06\
+\xa8\xba\x94\x20\x4e\x37\x01\x1a\xe2\xd9\x42\xc5\x9f\x12\xaa\x3a\
+\x77\xa2\xfa\x79\xfa\xdd\x3f\x3e\xad\x1f\x45\x53\x7d\x3e\x5f\x1c\
+\x2e\x7e\x2f\xaf\x97\x65\x79\xe9\x48\xbe\xfc\x74\x71\x71\x79\x72\
+\x33\x39\x7d\x70\xef\xee\xf2\xda\xf1\x71\x65\xfb\x48\x95\x26\x9f\
+\x2f\x0e\xbf\x4d\x7d\x9d\xe4\x97\x7e\xbf\xff\xc1\xec\x3e\x34\x6d\
+\x63\xcc\x7b\x92\x0f\x23\x10\xb0\x09\x21\x7c\x1c\x8d\x46\xaf\x86\
+\xc3\xe1\x2f\xb3\x7f\xfb\x77\xbb\xdd\x93\xa2\x28\xd2\xf5\x7a\x5d\
+\xab\xe8\xe0\x72\x3c\x1e\xff\xf4\xde\xaf\x00\xac\x48\xae\xfe\x02\
+\x9e\xc5\x10\x4d\x61\xbe\x76\xec\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x02\x14\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x06\x00\x00\x00\x72\xeb\xe4\x7c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x01\xa6\x49\x44\x41\x54\x28\x53\x7d\
+\x52\xcb\x4e\xc2\x50\x14\x34\xf2\x2f\xc6\x98\xf8\x57\xba\xd5\xb8\
+\x71\xe5\xd2\x9f\xd0\x44\x6b\x14\xf0\x01\xa5\x94\x47\x80\x86\x16\
+\x28\x9a\xb6\x2a\xcf\x16\x1f\x11\x4c\x80\x58\x04\xd1\x9d\x69\x5c\
+\x18\x9c\x21\x62\x6a\x62\x5c\x9c\x9c\x9e\x73\x67\x7a\xce\xcc\xbd\
+\x73\x93\xc9\x64\x6e\x16\x82\x20\x2c\x22\xb6\x11\x71\x44\xf5\x3b\
+\xb3\x5e\xf4\xe3\x66\xe0\x00\x62\x1d\xe1\x84\x43\x21\x5b\x8c\x46\
+\x6f\x13\xb2\xdc\x8e\x4b\x92\x73\x7a\x72\x72\x75\x74\x78\x68\x7c\
+\x9f\x07\xfc\xa4\x8d\x03\x41\x68\x49\xb1\xd8\xa3\x9a\xcf\xbf\x99\
+\x86\x31\x68\xd6\xeb\xdd\x2b\xcb\x72\xcb\xa5\xd2\x38\x93\x4e\xdf\
+\x84\x82\xc1\x32\x30\xeb\x53\x12\x08\xcb\x9c\x40\x42\x59\xd7\x5f\
+\x5c\xd7\xb5\x3d\xcf\x33\x67\x31\x7c\x7e\x6e\x5c\x5f\x5e\x0e\x94\
+\x6c\xd6\x06\xb1\x40\x3c\x49\xdb\x5c\x89\x13\x06\xae\xdb\x24\xf0\
+\x75\x34\xaa\x75\x3b\x9d\x3b\x66\xd6\xa3\xe1\xb0\x61\x19\xc6\x50\
+\x12\xc5\x02\x56\xdd\x22\x29\x1e\x13\xc5\x3b\x34\x07\x04\x3c\xf5\
+\xfb\x8e\x9e\xcd\xbe\xeb\xb9\x9c\xc7\xcc\x9a\x7d\xa7\xd9\xec\x61\
+\x9a\x11\x0e\x06\xf7\x48\xaa\x26\x13\x89\x0e\x35\xf0\xd0\xae\x56\
+\xfb\x00\x7f\x94\x15\xe5\x93\x99\x35\xfb\xed\xfb\xfb\x4e\x51\xd3\
+\x6a\xc7\xe1\x70\x72\x3a\x09\x2e\xb5\x28\xfa\xbf\x49\xb7\x8e\xd3\
+\x55\x15\xe5\x1c\xa4\x9d\xa9\xa6\x33\xd8\x4a\x97\x28\xfa\x2f\x4d\
+\xaf\xe3\x71\xbd\x56\xa9\xb8\x29\x59\x4e\x63\xbd\xcd\xa9\x7b\x10\
+\x67\xd2\x56\xba\x44\xd1\x7e\xf7\x48\x68\xd9\x76\x4f\x2f\x16\x2d\
+\xfc\x5c\x02\x76\xe9\xe7\x9e\x78\x0f\xb4\x95\x2e\xd9\x8d\x46\xef\
+\x01\x1a\x6e\xb0\x12\x27\x80\x60\x8a\x91\x48\x0c\x98\xd5\x5f\x2f\
+\x02\x17\xb7\x86\xa6\x06\x5b\xb5\x5c\x26\x73\x51\x50\xd5\x4a\x5e\
+\x51\x4a\x58\x29\x85\x09\x24\xac\x00\x33\xff\x43\xf2\xbf\x3d\xde\
+\x03\x00\xfb\x10\x9c\x42\xec\xe2\x7b\x13\xbd\x05\x3f\xee\x0b\x45\
+\x97\xf5\xcf\x14\x60\x2f\x66\x00\x00\x00\x00\x49\x45\x4e\x44\xae\
+\x42\x60\x82\
+\x00\x00\x01\x15\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0f\x00\x00\x00\x0b\x08\x06\x00\x00\x00\xa0\x47\xd7\x5c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x00\xa7\x49\x44\x41\x54\x28\xcf\xa5\
+\x8e\x31\x0a\xc2\x50\x10\x44\xdf\x64\x3f\x0a\x76\xa2\x9d\x37\x10\
+\x6c\xec\x2c\x2c\x3d\x8f\xb9\x81\x47\x48\xec\x04\xef\x63\xa1\x82\
+\x95\x78\x0d\xb1\x49\x24\xc9\x5f\x0b\xb5\x37\xf1\xc1\xc2\x6c\xf1\
+\x98\x51\x9e\x65\x87\x7e\xbf\x37\xe1\x8d\x0b\xfc\x9b\x01\x47\x7a\
+\xff\xee\x00\x5e\x37\xcd\xa3\xae\x9b\xdd\x3a\x4d\xf7\xc1\xcc\x06\
+\xab\xe5\xa2\xe2\x37\x54\x55\xf5\xf0\x72\xbd\x6d\xb6\x79\x4e\x22\
+\xa1\xe8\xce\xaf\x67\xc1\xe2\x7c\x36\x7d\x9a\x59\x1a\x40\x49\x74\
+\xda\xa1\xc4\xcd\xac\x17\xf8\x34\xb7\x45\x92\x05\x41\xd2\x45\x06\
+\x08\x20\xc5\x48\x47\x59\xdd\x9a\x1d\x27\x08\xe9\x8f\xd9\xa8\xe9\
+\xe2\x3a\x84\xa2\x2c\x47\xc7\xd3\xf9\xde\xd6\x2d\x8a\x62\xfc\x02\
+\x60\xd2\x60\xc5\x54\xa5\xbb\x5b\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x02\x57\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x06\x00\x00\x00\x72\xeb\xe4\x7c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x01\xe9\x49\x44\x41\x54\x28\x53\x4d\
+\x92\x3f\x68\x14\x41\x14\xc6\x67\x77\x67\xf7\x92\xe5\x64\xd1\x2b\
+\x0c\x18\x72\x9c\x57\xca\x59\x69\x61\x69\x63\x69\x61\x21\x28\x48\
+\x8a\x80\x88\x11\x0b\x41\x6c\x2f\xa5\x82\xc4\xc2\x42\xc4\xc6\x2a\
+\xa5\x82\x4d\x48\x25\xd8\x25\x75\x0c\x58\x5c\x4c\x10\x74\x2f\x38\
+\x6b\xd8\xdb\x9d\xfd\x3b\xcf\xef\x9d\xbb\xe0\xc2\x63\x66\xd8\xef\
+\xf7\xde\xf7\xe6\x8d\x24\x22\xd1\x7e\xcf\xc7\xe3\x4b\xae\xeb\xae\
+\x3a\x8e\x73\xd5\x18\xd3\xb7\x6d\xfb\xa8\xae\xeb\xbd\xb2\x2c\xdf\
+\x3f\x1b\x8f\xf7\x5b\x9d\x6c\xc4\xd0\x39\x4f\x7c\xdf\x5f\x1f\x0c\
+\x06\x6e\x10\x04\x39\xf6\x55\x9a\xa6\x7d\xa5\xd4\xc5\xc3\xc9\xe4\
+\xd6\x8b\x8d\x8d\x37\x28\xb0\x09\xb8\x9e\x43\x0c\xf4\x7a\xbd\xc7\
+\xa3\xd1\x48\xa3\x52\xd6\x66\x5c\xf0\x3c\x75\xb6\xdb\x8d\x9c\x95\
+\x95\x78\x72\x7c\x7c\x37\x2b\x0a\xb6\xf5\x52\xb2\x25\xae\xd0\x00\
+\xa6\x05\x74\x92\x44\x7a\x36\xe3\x50\x79\x92\xa8\xc0\x75\xbf\x01\
+\xba\x07\xfd\xb6\xf4\x3c\xef\xc1\x70\x38\x74\xdb\x0a\xa6\xae\xab\
+\x34\x8e\x73\x40\x8b\x59\x9a\x2a\x1d\xc7\x53\x06\x33\x80\xb0\xf5\
+\xb9\x14\x62\x55\x5a\x96\x75\x85\x7b\x60\xa0\x2c\x0a\x0d\x80\x20\
+\x1e\x62\x6f\xe3\x02\x96\xcb\xaa\x2a\x90\xe0\xa0\x16\x22\xb2\x84\
+\x88\x21\xbb\x23\xd1\xdc\x32\xec\xa5\xb9\xd6\x31\x67\x84\x60\xa9\
+\xaa\x2a\x49\xc6\x78\x10\xd8\x8e\x94\x17\x2a\x21\xa6\x80\x14\xfd\
+\x83\x9e\x72\xa5\x1f\xbf\x4f\x4e\x3a\x0e\x51\xc8\x3d\x64\x80\xf1\
+\xf3\xbc\x20\x72\xc9\xb6\x35\x80\x3d\x86\xd0\xac\xc2\x1a\x08\xcb\
+\x3a\x94\x98\xc3\xee\x34\x0c\xaf\x9d\xe9\x74\xe6\xde\x19\xac\x89\
+\xbe\x7a\xbe\xbf\x84\x59\x1d\x44\x51\xf4\x85\xab\xb0\x3d\xb2\xac\
+\xcb\xa8\xb4\x2f\x61\xe5\xed\xcf\x30\xbc\x61\xba\xdd\x3f\x65\x9a\
+\x4e\xf3\xa2\x50\x9c\x35\xd1\x3a\x6a\xc4\x2d\xe0\x00\x78\x88\x78\
+\x24\x79\xd2\xb8\xc6\x77\xbf\x4e\x4f\x6f\x2e\x12\x6d\x89\xc6\x7f\
+\x2b\xe6\x04\x00\x16\x78\x3e\x88\x8f\xac\x97\xcd\x58\x5e\xc1\x92\
+\x99\x09\xb1\x66\x0b\xf1\x09\xe7\x5d\xf4\x75\x84\x38\x87\x1e\xae\
+\xe3\x7c\x1f\xf1\x01\xf1\x9a\xc5\x73\x88\x9f\x06\x96\x4d\x54\xdc\
+\x31\x44\xb7\xb1\x5f\x83\xb8\x8f\xf5\x3b\xf7\x80\x58\xff\xff\xed\
+\xfd\x05\x44\x20\x32\xa9\x4e\xde\x14\x18\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x0a\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x04\x00\x00\x00\xd8\xe2\x2c\xf7\
+\x00\x00\x00\x02\x73\x42\x49\x54\x08\x08\x55\xec\x46\x04\x00\x00\
+\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\x00\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x9b\
+\xee\x3c\x1a\x00\x00\x00\x9e\x49\x44\x41\x54\x18\xd3\x63\x98\x55\
+\x31\xeb\x07\x56\x58\xc1\x30\xeb\x3f\x2e\x08\x96\x7a\x32\xf9\x6d\
+\x0f\x32\x7c\x32\x19\x2e\xf5\xb9\xe3\x7f\x03\x0c\xde\x9b\xb7\xf3\
+\xee\x9d\x85\x58\xa4\x9e\x4f\x5f\xff\x73\xed\xff\xd3\x3b\x91\xa4\
+\x9e\xce\x00\x4a\x74\x7e\x5c\xbb\xe5\xfb\xda\xff\x3b\xef\xbd\xef\
+\x82\x4b\x9d\xda\xbd\xf6\xff\xb1\x7b\x3f\x0e\x6f\xff\xb2\xf6\xff\
+\xd6\x17\x5f\xdb\x3f\x77\xc0\xa5\x6e\x2e\x5e\xfb\x17\x28\x08\xd4\
+\xb1\xf1\xe3\xbb\xde\xff\x0d\x48\x52\x9f\x3b\xce\xee\x58\xfb\x7f\
+\xed\xff\xf5\x3f\x9e\x4f\x03\xd9\x88\x22\xf5\xbf\xe1\xd0\xa9\x0d\
+\x5f\xee\x2e\x80\x38\x06\x49\x0a\xe2\xaf\xd7\xbd\x58\xfc\x85\x2b\
+\x34\x70\x86\x21\x00\x8c\xe0\x06\x11\x3e\x64\x1f\xfd\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x08\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0f\x00\x00\x00\x0b\x08\x06\x00\x00\x00\xa0\x47\xd7\x5c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x00\x9a\x49\x44\x41\x54\x28\xcf\x9d\
+\x90\x3b\x0a\x02\x41\x10\x44\x6b\xb4\x11\x76\x35\x11\x3c\x8c\x81\
+\x91\x37\xda\x5b\x98\x4c\x2e\x78\x16\x33\x03\x3f\x27\x70\xcf\xe0\
+\x2f\x90\x05\x61\xba\xca\xc0\xdd\xdc\x99\x86\x86\x86\xe2\x51\x8f\
+\xb6\x18\xe3\x63\x56\x57\x2f\x64\xce\xbb\xeb\x16\x36\xad\xab\xfb\
+\x7a\xb5\x0c\xb9\xf0\xfe\x70\xbc\x99\x24\x51\xca\x86\x01\xc0\x24\
+\x88\x02\xca\x60\x88\x94\xc6\xb9\xa0\x04\x18\x7e\xda\x28\xd5\x26\
+\x59\xaa\x5d\xd8\x4c\xd2\x4d\x00\x73\x61\x92\xc1\xe9\x9f\xbe\xf9\
+\x7f\x30\xa5\x34\xba\xb6\xed\xc4\x9d\x1b\x23\xd9\x9d\xce\x97\xf9\
+\xf0\xc4\x7e\x11\xc2\x70\x07\x0d\x91\x04\xb9\xfb\xd3\xdd\xb7\x4d\
+\xd3\xec\xbe\x3e\x15\x69\x2b\x64\x98\xc7\xc4\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x0c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0f\x00\x00\x00\x0b\x08\x06\x00\x00\x00\xa0\x47\xd7\x5c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x00\x9e\x49\x44\x41\x54\x28\xcf\x9d\
+\x91\x31\x0a\x02\x41\x10\x04\x7b\x74\x30\x5d\x04\xdf\xe7\xfd\x40\
+\xbf\x61\x76\xa9\x60\x74\x66\x82\xe0\x1f\x04\x7d\x8d\xba\x46\x82\
+\xb7\xb3\xd3\x06\x87\x9a\x68\xb0\xdb\xe1\x40\x51\x14\x23\x6d\xdb\
+\xde\x42\x08\x77\xfc\x99\x88\xfc\xbc\xc7\x18\x67\x1a\x42\xb8\x36\
+\xcd\x5c\x50\xb8\xae\xdb\x5e\x94\x24\xdd\xbd\x18\x06\x00\x25\x9d\
+\x74\xaf\x40\x09\x1d\xc4\x79\x5c\x8c\x12\x50\x3a\xeb\xcd\x4e\xba\
+\xd7\xc0\x04\x94\xac\x33\x67\xf7\xfc\x6e\x2e\x03\x73\x16\x4b\xe9\
+\x59\x6c\xee\xfb\x7e\x74\x3c\x9d\x27\x66\xb6\x52\x33\x7b\xec\xf6\
+\x87\xe9\xa7\x44\xc0\xe1\xe9\xc2\xa1\x0c\xfc\x66\x92\x96\x2c\xa6\
+\x94\xd6\x8b\xe5\x72\xf3\x02\x01\x4c\x73\x5c\x4d\x53\x9c\xcf\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x07\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x04\x00\x00\x00\xd8\xe2\x2c\xf7\
+\x00\x00\x00\x02\x73\x42\x49\x54\x08\x08\x55\xec\x46\x04\x00\x00\
+\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\x00\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x9b\
+\xee\x3c\x1a\x00\x00\x00\x9b\x49\x44\x41\x54\x18\xd3\x63\x68\xac\
+\x68\xfc\x81\x15\x56\x30\x34\xfe\xc7\x05\xc1\x52\xf7\x26\xbf\xec\
+\x41\x86\xf7\x26\xc3\xa5\x3e\x74\xfc\x6f\x80\xc1\x73\xf3\xa6\xdc\
+\x3d\xb5\x10\x8b\xd4\xed\xe9\xad\x3f\x1b\xff\x6f\xdc\x89\x24\x75\
+\x6d\x06\x50\xa2\xf3\xd5\xda\x9e\xef\x8d\xff\xa7\xdc\x7b\xd3\x05\
+\x97\x5a\xbf\xbb\xf1\xff\x8a\x7b\x5f\x0e\x4f\xfa\xd2\xf8\xbf\xf7\
+\xc5\xc7\xf6\x0f\x1d\x70\xa9\xe3\x8b\x9b\xfe\x36\xfe\xef\x03\xea\
+\xe8\xf8\xf8\xbc\xf7\x7f\x03\x92\xd4\x87\x8e\x4d\x3b\x40\x74\xeb\
+\x8f\x9b\xd3\x40\x36\xa2\x48\xfd\x6f\x58\x78\xaa\xed\xcb\xe9\x05\
+\x10\xc7\x20\x49\x41\xfc\xf5\xbc\x17\x8b\xbf\x70\x85\x06\xce\x30\
+\x04\x00\x95\xde\xf8\xd0\x60\x7f\x65\x39\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xae\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x07\x00\x00\x00\x05\x08\x04\x00\x00\x00\x23\x93\x3e\x53\
+\x00\x00\x00\x02\x73\x42\x49\x54\x08\x08\x55\xec\x46\x04\x00\x00\
+\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\x00\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x9b\
+\xee\x3c\x1a\x00\x00\x00\x42\x49\x44\x41\x54\x08\xd7\x63\xa8\x5f\
+\xbd\xe6\x15\x0c\xd6\x2e\x61\x48\x56\xda\xf1\xe8\xc4\x57\x10\xdc\
+\x74\x3e\x5c\x84\xe1\x3f\x43\x6b\x26\x88\xb3\xef\x55\x8d\xc5\x7f\
+\x06\x20\x97\x81\x71\xc1\x86\xe3\x5f\xfb\x72\xfe\x33\x80\xb9\xff\
+\x19\x52\xd5\x7a\x67\xfe\x07\xb3\x00\xb3\x22\x29\xee\xf2\x45\x54\
+\xa5\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x02\x2c\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x06\x00\x00\x00\x72\xeb\xe4\x7c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x01\xbe\x49\x44\x41\x54\x28\x53\x5d\
+\x92\x3b\x4b\x03\x41\x14\x85\x67\x37\x9b\x18\x22\x12\x4c\x3a\x05\
+\x31\x36\x16\x26\x88\x8d\xf8\x13\xc4\xc6\x42\xec\x14\x0b\xd1\x42\
+\xc1\x42\x41\xed\xb2\x5b\x46\xc1\x07\x58\x09\x0a\x76\xda\x68\x29\
+\xfa\x07\x14\xed\x04\x3b\x11\x05\x83\x24\x26\xbb\x24\x26\xd9\x47\
+\x76\x66\x3c\x77\x49\x82\x3a\x70\xb8\x33\xc3\xf9\xe6\xde\x99\x3b\
+\x9a\x94\x92\xb5\x47\x4e\xd7\x47\xc2\xe1\xf0\x82\xaa\xaa\x13\x42\
+\x88\x41\xc4\x37\xce\xf9\xbd\xef\xfb\x67\x5b\xba\xfe\xdc\xf6\x69\
+\x2d\x73\x08\x63\x3d\x16\x8b\xad\xa6\x52\xa9\x70\x3c\x1e\x77\x31\
+\x77\x2a\x96\x95\xf8\x2a\x16\x27\xf3\x9f\x9f\xd3\x3b\xba\x7e\x8c\
+\xe3\x0f\x00\xf3\x00\x22\x20\x99\x4c\xae\x65\x32\x19\x1b\x99\x1c\
+\xda\xb3\xeb\x75\x4b\x11\xc2\xea\x89\x46\xcd\xfe\x44\xa2\x96\x2f\
+\x95\x66\x9a\x42\x50\x59\x7b\x1a\x95\x44\x19\xd2\xe9\xb4\x03\x40\
+\x08\xce\x7d\xbb\x56\xb3\x20\x33\x10\x60\x17\x31\xca\xf9\x4b\x93\
+\xb1\x39\xf8\x6f\x34\x18\x97\xa8\xa4\x48\x24\xe2\x34\x3d\xcf\xfe\
+\x03\xb4\xe6\x9e\xeb\x9a\xc8\x60\x85\x18\xbb\xe6\x52\xce\x6b\xb8\
+\xec\x38\xee\xe0\xb9\xb6\xfd\xfd\xdf\x4c\x6a\xfa\xbe\xc5\x19\x33\
+\x49\xa8\xed\x11\xf0\xa2\x86\x57\x1a\x50\xa4\xfc\xa8\x57\x2a\xa5\
+\x06\x4c\x4e\x0b\xa0\x39\x4e\xed\x00\x02\x99\x00\xbc\x33\x45\x31\
+\xe8\x21\xde\x4a\x85\x82\x1b\x92\xb2\xd8\xce\xe2\x34\x1a\x1d\x63\
+\x1b\x82\x2c\xa1\x28\x7d\xe4\xd7\xd0\x87\x87\x72\xb9\x3c\xda\xad\
+\xaa\x05\x02\x5c\xcf\x23\x73\x60\xfa\x0d\x6c\x1a\x46\x0d\x8f\x30\
+\x05\xe8\x99\xca\x3b\x31\xab\xd5\x0b\x9f\xb1\x6f\x29\x44\xe1\xbf\
+\x99\x0e\x00\xe0\x02\xe8\x05\xb0\x0c\xad\x68\xd4\xe9\x5c\x36\x7b\
+\x5a\x65\x6c\xb2\x8b\x31\x6a\x20\x81\x9d\xd2\xb6\x0c\x43\x00\x88\
+\xc3\xbc\x0b\x5d\x92\x3f\x68\x2e\x2e\x77\x28\xf0\x9f\x6c\xc6\x36\
+\xb0\x3a\x87\xee\xb0\x97\x47\x1c\x06\x30\xd6\xca\x70\x05\x1d\x91\
+\x3d\x80\xe8\x6b\x20\xec\xc3\x70\x8b\x38\x0b\x6d\x43\x43\xd0\x2b\
+\xf4\x04\xad\xfe\xfe\x7b\x3f\x19\xc4\x49\xa6\x7a\x07\xda\xac\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x40\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0d\x00\x00\x00\x0d\x08\x06\x00\x00\x00\x72\xeb\xe4\x7c\
+\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
+\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\
+\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\
+\x67\x9b\xee\x3c\x1a\x00\x00\x00\xd2\x49\x44\x41\x54\x28\xcf\x95\
+\x92\xbf\x0e\x82\x30\x10\xc6\xdb\xeb\x81\xc6\xc4\x84\xc4\x97\xd5\
+\x8d\x8d\x77\x60\x72\xe2\xc1\x74\xe8\xe0\xa0\x0b\x05\x93\xfe\xf1\
+\x8a\x50\x8b\x65\x80\x4b\x8e\xbb\xa4\xdf\xaf\xd7\x7e\x14\xeb\xba\
+\x3e\x33\xc6\x4a\xb6\x3e\x4a\xa4\x4f\xc5\xb6\x45\x85\x53\x77\x2a\
+\x8a\x06\x11\x5f\x00\xd0\x0d\xc9\x79\xa8\x9c\x73\xa5\xb5\xe6\x37\
+\x29\xaf\x5e\x1b\xa0\x2c\xcf\x1f\xbb\x2c\x7b\x0a\x21\x14\x02\x28\
+\x5f\x87\x04\x68\x7d\x55\x5d\x07\x93\x36\x40\x48\xbb\xa1\x10\xed\
+\x28\x9c\x01\x3e\x49\x22\x12\x08\xbe\x8b\xad\x88\xa6\x8c\x13\x07\
+\xd0\x39\x87\x29\x44\xbb\x62\x0c\x45\x80\xef\x49\x72\x48\xa0\x20\
+\x5a\x38\x1a\x99\x61\x62\xfb\xe2\x49\x33\x21\x8e\x3d\x39\x67\xff\
+\x3d\xff\x41\x73\x23\x26\xc0\x2d\xfd\xa8\x00\xa9\xbe\xcf\xb5\x31\
+\x7b\xba\xb0\x35\xd6\x3a\x1e\xdd\xc1\x47\xff\x7e\x1f\x13\xe8\x2e\
+\x65\xb3\xf6\x49\x78\xe8\xb2\xf5\xed\x7d\x00\xca\xd1\x62\xc7\x6e\
+\x2e\xe9\x88\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xaf\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x07\x00\x00\x00\x05\x08\x04\x00\x00\x00\x23\x93\x3e\x53\
+\x00\x00\x00\x02\x73\x42\x49\x54\x08\x08\x55\xec\x46\x04\x00\x00\
+\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\x00\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x9b\
+\xee\x3c\x1a\x00\x00\x00\x43\x49\x44\x41\x54\x08\x1d\x63\xc8\x5b\
+\x38\xe3\x3a\x0c\xe6\xcc\x62\x70\x92\xeb\xda\x3c\x73\x1f\x08\xb6\
+\x2c\xb5\x14\x62\xf8\xcf\xe0\x1e\x50\x3f\xaf\x7e\x5e\xd9\x6c\x27\
+\x9d\xff\x0c\x40\x2e\x03\xa3\x4b\x76\x4a\xbd\x85\xfb\x7f\x10\x1b\
+\x44\x88\x4a\x29\x87\x81\xe8\xff\x0c\x00\x6d\x8c\x21\x57\xad\xbb\
+\x24\x67\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xac\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x07\x00\x00\x00\x05\x08\x04\x00\x00\x00\x23\x93\x3e\x53\
+\x00\x00\x00\x02\x73\x42\x49\x54\x08\x08\x55\xec\x46\x04\x00\x00\
+\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\x00\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x9b\
+\xee\x3c\x1a\x00\x00\x00\x40\x49\x44\x41\x54\x08\xd7\x63\xf8\xcf\
+\x00\x82\x13\xeb\x93\x95\x40\x34\x98\x33\x25\xea\xc1\xae\x55\x7d\
+\x0c\x8c\x60\x6e\x9d\xc1\x95\x2d\x8f\x76\x3d\xda\xd5\x1e\x01\xe4\
+\x86\x0a\x1d\x5e\x04\xe2\x3c\xda\x75\x66\x43\x92\x1c\x43\x5d\xf7\
+\xae\x9d\x30\xd8\x38\x01\x00\x65\x08\x27\x8f\x6e\x3d\x5d\x1d\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x08\xc7\
+\x2e\
+\x51\x57\x69\x64\x67\x65\x74\x20\x7b\x0a\x20\x20\x20\x62\x61\x63\
+\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x62\
+\x65\x69\x67\x65\x3b\x0a\x7d\x0a\x0a\x2f\x2a\x20\x4e\x69\x63\x65\
+\x20\x57\x69\x6e\x64\x6f\x77\x73\x2d\x58\x50\x2d\x73\x74\x79\x6c\
+\x65\x20\x70\x61\x73\x73\x77\x6f\x72\x64\x20\x63\x68\x61\x72\x61\
+\x63\x74\x65\x72\x2e\x20\x2a\x2f\x0a\x51\x4c\x69\x6e\x65\x45\x64\
+\x69\x74\x5b\x65\x63\x68\x6f\x4d\x6f\x64\x65\x3d\x22\x32\x22\x5d\
+\x20\x7b\x0a\x20\x20\x20\x20\x6c\x69\x6e\x65\x65\x64\x69\x74\x2d\
+\x70\x61\x73\x73\x77\x6f\x72\x64\x2d\x63\x68\x61\x72\x61\x63\x74\
+\x65\x72\x3a\x20\x39\x36\x37\x39\x3b\x0a\x7d\x0a\x0a\x2f\x2a\x20\
+\x57\x65\x20\x70\x72\x6f\x76\x69\x64\x65\x20\x61\x20\x6d\x69\x6e\
+\x2d\x77\x69\x64\x74\x68\x20\x61\x6e\x64\x20\x6d\x69\x6e\x2d\x68\
+\x65\x69\x67\x68\x74\x20\x66\x6f\x72\x20\x70\x75\x73\x68\x20\x62\
+\x75\x74\x74\x6f\x6e\x73\x0a\x20\x20\x20\x73\x6f\x20\x74\x68\x61\
+\x74\x20\x74\x68\x65\x79\x20\x6c\x6f\x6f\x6b\x20\x65\x6c\x65\x67\
+\x61\x6e\x74\x20\x72\x65\x67\x61\x72\x64\x6c\x65\x73\x73\x20\x6f\
+\x66\x20\x74\x68\x65\x20\x77\x69\x64\x74\x68\x20\x6f\x66\x20\x74\
+\x68\x65\x20\x74\x65\x78\x74\x2e\x20\x2a\x2f\x0a\x51\x50\x75\x73\
+\x68\x42\x75\x74\x74\x6f\x6e\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\
+\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x70\x61\x6c\x65\x67\x6f\x6c\x64\x65\x6e\x72\x6f\x64\x3b\x0a\x20\
+\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x77\x69\x64\x74\x68\x3a\
+\x20\x32\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\
+\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x64\x61\x72\x6b\x6b\x68\x61\x6b\
+\x69\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x73\x74\
+\x79\x6c\x65\x3a\x20\x73\x6f\x6c\x69\x64\x3b\x0a\x20\x20\x20\x20\
+\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x35\
+\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x33\
+\x70\x78\x3b\x0a\x20\x20\x20\x20\x6d\x69\x6e\x2d\x77\x69\x64\x74\
+\x68\x3a\x20\x39\x65\x78\x3b\x0a\x20\x20\x20\x20\x6d\x69\x6e\x2d\
+\x68\x65\x69\x67\x68\x74\x3a\x20\x32\x2e\x35\x65\x78\x3b\x0a\x7d\
+\x0a\x0a\x51\x50\x75\x73\x68\x42\x75\x74\x74\x6f\x6e\x3a\x68\x6f\
+\x76\x65\x72\x20\x7b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x6b\x68\x61\x6b\x69\
+\x3b\x0a\x7d\x0a\x0a\x2f\x2a\x20\x49\x6e\x63\x72\x65\x61\x73\x65\
+\x20\x74\x68\x65\x20\x70\x61\x64\x64\x69\x6e\x67\x2c\x20\x73\x6f\
+\x20\x74\x68\x65\x20\x74\x65\x78\x74\x20\x69\x73\x20\x73\x68\x69\
+\x66\x74\x65\x64\x20\x77\x68\x65\x6e\x20\x74\x68\x65\x20\x62\x75\
+\x74\x74\x6f\x6e\x20\x69\x73\x0a\x20\x20\x20\x70\x72\x65\x73\x73\
+\x65\x64\x2e\x20\x2a\x2f\x0a\x51\x50\x75\x73\x68\x42\x75\x74\x74\
+\x6f\x6e\x3a\x70\x72\x65\x73\x73\x65\x64\x20\x7b\x0a\x20\x20\x20\
+\x20\x70\x61\x64\x64\x69\x6e\x67\x2d\x6c\x65\x66\x74\x3a\x20\x35\
+\x70\x78\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x2d\
+\x74\x6f\x70\x3a\x20\x35\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x61\
+\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\
+\x23\x64\x30\x64\x36\x37\x63\x3b\x0a\x7d\x0a\x0a\x51\x4c\x61\x62\
+\x65\x6c\x2c\x20\x51\x41\x62\x73\x74\x72\x61\x63\x74\x42\x75\x74\
+\x74\x6f\x6e\x20\x7b\x0a\x20\x20\x20\x20\x66\x6f\x6e\x74\x3a\x20\
+\x62\x6f\x6c\x64\x3b\x0a\x7d\x0a\x0a\x2f\x2a\x20\x4d\x61\x72\x6b\
+\x20\x6d\x61\x6e\x64\x61\x74\x6f\x72\x79\x20\x66\x69\x65\x6c\x64\
+\x73\x20\x77\x69\x74\x68\x20\x61\x20\x62\x72\x6f\x77\x6e\x69\x73\
+\x68\x20\x63\x6f\x6c\x6f\x72\x2e\x20\x2a\x2f\x0a\x2e\x6d\x61\x6e\
+\x64\x61\x74\x6f\x72\x79\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6c\
+\x6f\x72\x3a\x20\x62\x72\x6f\x77\x6e\x3b\x0a\x7d\x0a\x0a\x2f\x2a\
+\x20\x42\x6f\x6c\x64\x20\x74\x65\x78\x74\x20\x6f\x6e\x20\x73\x74\
+\x61\x74\x75\x73\x20\x62\x61\x72\x20\x6c\x6f\x6f\x6b\x73\x20\x61\
+\x77\x66\x75\x6c\x2e\x20\x2a\x2f\x0a\x51\x53\x74\x61\x74\x75\x73\
+\x42\x61\x72\x20\x51\x4c\x61\x62\x65\x6c\x20\x7b\x0a\x20\x20\x20\
+\x66\x6f\x6e\x74\x3a\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\x7d\x0a\
+\x0a\x51\x53\x74\x61\x74\x75\x73\x42\x61\x72\x3a\x3a\x69\x74\x65\
+\x6d\x20\x7b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x77\
+\x69\x64\x74\x68\x3a\x20\x31\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\
+\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x64\x61\x72\x6b\x6b\
+\x68\x61\x6b\x69\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\
+\x2d\x73\x74\x79\x6c\x65\x3a\x20\x73\x6f\x6c\x69\x64\x3b\x0a\x20\
+\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\
+\x3a\x20\x32\x3b\x0a\x7d\x0a\x0a\x51\x43\x6f\x6d\x62\x6f\x42\x6f\
+\x78\x2c\x20\x51\x4c\x69\x6e\x65\x45\x64\x69\x74\x2c\x20\x51\x53\
+\x70\x69\x6e\x42\x6f\x78\x2c\x20\x51\x54\x65\x78\x74\x45\x64\x69\
+\x74\x2c\x20\x51\x4c\x69\x73\x74\x56\x69\x65\x77\x20\x7b\x0a\x20\
+\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\
+\x6c\x6f\x72\x3a\x20\x63\x6f\x72\x6e\x73\x69\x6c\x6b\x3b\x0a\x20\
+\x20\x20\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x2d\x63\x6f\x6c\
+\x6f\x72\x3a\x20\x23\x30\x61\x32\x31\x34\x63\x3b\x20\x0a\x20\x20\
+\x20\x20\x73\x65\x6c\x65\x63\x74\x69\x6f\x6e\x2d\x62\x61\x63\x6b\
+\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x43\
+\x31\x39\x41\x36\x42\x3b\x0a\x7d\x0a\x0a\x51\x4c\x69\x73\x74\x56\
+\x69\x65\x77\x20\x7b\x0a\x20\x20\x20\x20\x73\x68\x6f\x77\x2d\x64\
+\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\x2d\x73\x65\x6c\x65\x63\x74\
+\x65\x64\x3a\x20\x31\x3b\x0a\x7d\x0a\x0a\x51\x4c\x69\x73\x74\x56\
+\x69\x65\x77\x3a\x3a\x69\x74\x65\x6d\x3a\x68\x6f\x76\x65\x72\x20\
+\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x77\x68\x65\x61\x74\x3b\x0a\x7d\
+\x0a\x0a\x2f\x2a\x20\x57\x65\x20\x72\x65\x73\x65\x72\x76\x65\x20\
+\x31\x20\x70\x69\x78\x65\x6c\x20\x73\x70\x61\x63\x65\x20\x69\x6e\
+\x20\x70\x61\x64\x64\x69\x6e\x67\x2e\x20\x57\x68\x65\x6e\x20\x77\
+\x65\x20\x67\x65\x74\x20\x74\x68\x65\x20\x66\x6f\x63\x75\x73\x2c\
+\x0a\x20\x20\x20\x77\x65\x20\x6b\x69\x6c\x6c\x20\x74\x68\x65\x20\
+\x70\x61\x64\x64\x69\x6e\x67\x20\x61\x6e\x64\x20\x65\x6e\x6c\x61\
+\x72\x67\x65\x20\x74\x68\x65\x20\x62\x6f\x72\x64\x65\x72\x2e\x20\
+\x54\x68\x69\x73\x20\x6d\x61\x6b\x65\x73\x20\x74\x68\x65\x20\x69\
+\x74\x65\x6d\x73\x0a\x20\x20\x20\x67\x6c\x6f\x77\x2e\x20\x2a\x2f\
+\x0a\x51\x4c\x69\x6e\x65\x45\x64\x69\x74\x2c\x20\x51\x46\x72\x61\
+\x6d\x65\x20\x7b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\
+\x77\x69\x64\x74\x68\x3a\x20\x32\x70\x78\x3b\x0a\x20\x20\x20\x20\
+\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x70\x78\x3b\x0a\x20\x20\
+\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x73\x74\x79\x6c\x65\x3a\x20\
+\x73\x6f\x6c\x69\x64\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\
+\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x64\x61\x72\x6b\x6b\x68\x61\
+\x6b\x69\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\
+\x61\x64\x69\x75\x73\x3a\x20\x35\x70\x78\x3b\x0a\x7d\x0a\x0a\x2f\
+\x2a\x20\x41\x73\x20\x6d\x65\x6e\x74\x69\x6f\x6e\x65\x64\x20\x61\
+\x62\x6f\x76\x65\x2c\x20\x65\x6c\x69\x6d\x69\x6e\x61\x74\x65\x20\
+\x74\x68\x65\x20\x70\x61\x64\x64\x69\x6e\x67\x20\x61\x6e\x64\x20\
+\x69\x6e\x63\x72\x65\x61\x73\x65\x20\x74\x68\x65\x20\x62\x6f\x72\
+\x64\x65\x72\x2e\x20\x2a\x2f\x0a\x51\x4c\x69\x6e\x65\x45\x64\x69\
+\x74\x3a\x66\x6f\x63\x75\x73\x2c\x20\x51\x46\x72\x61\x6d\x65\x3a\
+\x66\x6f\x63\x75\x73\x20\x7b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\
+\x65\x72\x2d\x77\x69\x64\x74\x68\x3a\x20\x33\x70\x78\x3b\x0a\x20\
+\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x70\x78\x3b\
+\x0a\x7d\x0a\x0a\x2f\x2a\x20\x41\x20\x51\x4c\x61\x62\x65\x6c\x20\
+\x69\x73\x20\x61\x20\x51\x46\x72\x61\x6d\x65\x20\x2e\x2e\x2e\x20\
+\x2a\x2f\x0a\x51\x4c\x61\x62\x65\x6c\x20\x7b\x0a\x20\x20\x20\x20\
+\x62\x6f\x72\x64\x65\x72\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\
+\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x3b\x0a\x20\x20\
+\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x6e\x6f\
+\x6e\x65\x3b\x0a\x7d\x0a\x0a\x2f\x2a\x20\x41\x20\x51\x54\x6f\x6f\
+\x6c\x54\x69\x70\x20\x69\x73\x20\x61\x20\x51\x4c\x61\x62\x65\x6c\
+\x20\x2e\x2e\x2e\x20\x2a\x2f\x0a\x51\x54\x6f\x6f\x6c\x54\x69\x70\
+\x20\x7b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x32\
+\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x64\x61\x72\x6b\x6b\x68\x61\
+\x6b\x69\x3b\x0a\x20\x20\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\
+\x20\x35\x70\x78\x3b\x0a\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\
+\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x33\x70\x78\x3b\x0a\x20\x20\
+\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x32\x30\x30\x3b\x0a\
+\x7d\x0a\x0a\x2f\x2a\x20\x4e\x69\x63\x65\x20\x74\x6f\x20\x68\x61\
+\x76\x65\x20\x74\x68\x65\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
+\x64\x20\x63\x6f\x6c\x6f\x72\x20\x63\x68\x61\x6e\x67\x65\x20\x77\
+\x68\x65\x6e\x20\x68\x6f\x76\x65\x72\x65\x64\x2e\x20\x2a\x2f\x0a\
+\x51\x52\x61\x64\x69\x6f\x42\x75\x74\x74\x6f\x6e\x3a\x68\x6f\x76\
+\x65\x72\x2c\x20\x51\x43\x68\x65\x63\x6b\x42\x6f\x78\x3a\x68\x6f\
+\x76\x65\x72\x20\x7b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\
+\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x77\x68\x65\x61\
+\x74\x3b\x0a\x7d\x0a\x0a\x2f\x2a\x20\x46\x6f\x72\x63\x65\x20\x74\
+\x68\x65\x20\x64\x69\x61\x6c\x6f\x67\x27\x73\x20\x62\x75\x74\x74\
+\x6f\x6e\x73\x20\x74\x6f\x20\x66\x6f\x6c\x6c\x6f\x77\x20\x74\x68\
+\x65\x20\x57\x69\x6e\x64\x6f\x77\x73\x20\x67\x75\x69\x64\x65\x6c\
+\x69\x6e\x65\x73\x2e\x20\x2a\x2f\x0a\x51\x44\x69\x61\x6c\x6f\x67\
+\x42\x75\x74\x74\x6f\x6e\x42\x6f\x78\x20\x7b\x0a\x20\x20\x20\x20\
+\x62\x75\x74\x74\x6f\x6e\x2d\x6c\x61\x79\x6f\x75\x74\x3a\x20\x30\
+\x3b\x0a\x7d\x0a\x0a\x0a\
+\x00\x00\x00\x17\
+\x2f\
+\x2a\x20\x65\x6d\x70\x74\x79\x20\x73\x74\x79\x6c\x65\x73\x68\x65\
+\x65\x74\x20\x2a\x2f\x0a\
+\x00\x00\x06\xb0\
+\x00\
+\x00\x1a\x79\x78\x9c\xa5\x59\x6d\x6f\xdb\x36\x10\xfe\xee\x5f\x71\
+\xe8\x3e\xa4\x4d\xe3\xbc\xb5\x4e\x51\x05\x1d\xd0\x14\x5b\x31\xa0\
+\xd9\xea\x25\x58\x07\x14\x45\x40\x49\xb4\x4d\x44\x16\x05\x92\x8a\
+\xe3\x6d\xfd\xef\xbb\xe3\x8b\x2c\x59\x92\x5f\xd2\x02\x2d\x2c\xea\
+\x78\x2f\xcf\x3d\x3c\xde\xa9\x27\x87\xf0\xa1\xd4\x46\xce\xc5\x3f\
+\x1c\x58\xbe\x84\x22\x63\x22\x87\x85\x48\xa7\xdc\x80\x99\x31\x03\
+\x42\x03\x83\x64\x26\xb2\x14\xe4\x04\x7f\x8e\xaf\x51\xe2\x8b\xc8\
+\x53\xb9\x38\x86\xc3\x93\x41\xed\x19\x7e\x86\xe3\xf1\x17\xb7\xf7\
+\xdf\x01\xe0\x9f\x98\x25\xf7\x53\x25\xcb\x3c\x1d\x26\x32\x93\x2a\
+\x82\x29\x4a\xeb\x58\x2a\x79\xb9\x2e\x20\xe6\x6c\xca\x23\x28\x55\
+\xf6\x3c\x3a\xb1\x0f\xfa\xa4\xc0\x7f\x27\x32\x4b\x8f\x8b\x7c\xfa\
+\xa2\xb5\xa3\x90\x5a\x18\x21\xf3\x08\x8c\x2c\x40\x89\xe9\xcc\xb4\
+\x64\x14\x2f\x38\x33\x11\xe4\xd2\xff\x1c\x7c\x1f\x0c\x4e\x0e\xe1\
+\xb3\x92\x0f\x22\xc5\xa0\xa1\x60\x69\x2a\xf2\x29\x4c\xa4\xc2\x88\
+\x39\x64\x6c\x29\x4b\x8c\x3b\xd7\xf4\x9e\x56\x26\x8a\xcd\xf9\x31\
+\xdc\x86\x9f\x64\x83\x3f\x0a\x6d\x34\xc8\x3c\x5b\xa2\x75\x28\x7a\
+\xd5\xa1\x6b\x43\xeb\x1a\xd8\x98\x8e\x40\x4b\x58\x78\x15\x45\x26\
+\x12\x61\x50\x43\x2a\x34\x8b\x33\x67\x0d\xc1\x49\xb9\xb2\xd8\xfe\
+\x34\x47\xb4\x7e\x25\x93\x1e\x4f\xaf\xdc\x29\x8c\xe0\xd5\x69\xf1\
+\xe8\x23\xb6\x9b\x86\xda\x2c\x33\x4e\xc1\xe6\xbc\xb1\xee\xb1\xb5\
+\xeb\x80\xd1\x6b\x91\x27\x1c\xdd\x00\x8d\xa9\x62\x0d\x29\x88\x79\
+\x86\xa9\x44\xeb\x0e\xa8\x95\x0b\x0b\x99\x1f\x18\x98\xb1\x07\xf2\
+\x13\x69\xd1\xd8\x55\x69\xa4\xf7\x6b\xd1\x91\x11\x61\x08\xa6\x03\
+\xf2\xe0\x00\x4a\x4d\x08\x31\x98\x4b\x85\x3b\x0b\x9e\x88\x89\x48\
+\x50\x2c\xe3\x89\x91\x2e\xf4\xb1\xb5\x79\x04\xe3\x4f\x22\xe7\xbf\
+\xa4\xc2\xe0\xcf\x0f\x72\x1e\xcb\x2b\xf9\xf8\x95\xe3\x33\xe1\xf5\
+\xee\x99\x51\x25\x7f\xf6\x0d\xdf\xdd\x14\x22\xc7\x57\x81\x77\x8d\
+\xb0\x1b\x94\x72\xc9\x24\x3e\xc1\xeb\x06\x46\x48\x7a\x33\x43\x4c\
+\x2f\x29\xf0\xf1\x27\x86\x38\x34\xb4\x6d\x81\xb5\x9e\x9f\x08\x4e\
+\xd7\x89\x18\xa4\x1c\xa8\xd7\xec\x1e\x41\xe4\x8f\x44\x33\x98\x73\
+\xad\x2d\xf0\xf2\x91\x6b\x8f\x02\x45\xe7\x8f\x97\x7b\xbb\x8a\x0d\
+\xb7\x23\x26\xf7\xfa\x7d\x92\xe0\x2b\x81\x82\x57\xcb\x6b\x59\x6a\
+\x0e\xff\xc1\x2d\xaa\xbc\xa9\x14\x84\x75\x54\x43\x1b\xbd\x1d\x34\
+\x33\x24\xd3\x43\x91\x1b\xae\x58\x42\x27\x68\x38\xc9\xd8\x54\x47\
+\x30\x22\x07\x51\x94\x7c\xbc\xb1\x15\x80\x7b\x87\x50\x08\xec\x11\
+\xd6\x96\xd9\x2c\xcb\x7c\x95\xd0\xce\xcd\xc6\xb1\xaf\xb6\x84\x53\
+\x1f\x67\x08\xc4\xe5\xda\xbb\x76\x71\xb8\x11\xd9\x03\x57\x4e\xae\
+\xb9\xb3\x0e\x1b\xfa\xc4\x73\x23\x90\x3a\x0a\x89\xea\xf4\xf1\x94\
+\x90\x14\x86\xcf\xe1\x41\xf0\x85\x77\xea\x7d\xac\x0d\x45\xf8\x1b\
+\xae\xff\x85\xcb\xc1\xbd\x99\x5c\x0c\x53\x9e\x48\xc5\xac\x23\x41\
+\x45\x04\x67\xc1\xd2\xef\x02\xd9\xec\xaa\x9a\xfe\xfb\xb3\x3b\x57\
+\x98\x5d\xad\x17\x98\x79\x2c\x87\x8c\xd4\x72\x65\xb1\xa8\x96\x33\
+\xa4\x2a\x10\x37\xbd\xf9\x40\xdd\xaf\x3c\x99\xc9\x6b\x99\x22\x5f\
+\xcf\x9f\x7d\xf3\x4e\x90\x30\xc9\x0e\xc3\xf6\x61\xa5\x35\x82\xb7\
+\x17\x6f\xde\x06\x57\x56\x05\xda\x48\x99\x19\x51\x78\xed\xb7\xf8\
+\x74\x2b\x8a\xde\x4a\xab\xa6\xf1\xf3\xf3\xd3\xd3\x23\xfb\x77\x34\
+\x7a\xd1\x60\xae\x97\x49\x99\xba\xd7\x19\x33\x7c\xaa\xd8\xb2\xeb\
+\x34\x9c\x75\x17\x18\x2d\x33\x91\xae\x51\xfe\x55\x10\x9d\xc8\x1c\
+\x6b\x53\x8c\x65\xbb\xb1\x55\xb1\x54\x94\xba\x26\x27\x0b\x86\xf5\
+\x61\x19\x01\x7a\xd8\x0e\x96\xc4\x25\xc4\xa5\x31\x32\x77\x11\x0f\
+\xc6\x7f\xd2\xda\x95\x5d\x0a\xa9\x24\x1d\x64\x7d\x44\x5a\xbf\x37\
+\x65\xa2\x08\x13\x28\x12\x86\x35\xc5\x8b\x87\xa8\x2a\x1f\x66\xdc\
+\x55\x52\xb7\xd2\xbf\x3f\x8a\xca\x3c\x99\xf1\xe4\x1e\x89\xe6\x54\
+\x75\xd5\x16\xeb\xb3\x73\xf9\xae\x92\xf7\x77\xd7\x06\xdd\x95\x68\
+\x34\x93\xc8\xff\x7d\x0d\xdc\xd9\x5d\xfb\x98\x29\x14\x96\x82\xfd\
+\x23\xb9\xf3\xfb\xb6\x9b\x8a\xf6\xc3\x6a\x67\xa4\x9e\x82\xd3\x9e\
+\x28\x3d\x0d\xa3\x5e\x84\x1a\x9c\x66\x0a\x2b\x96\x27\xf3\x61\x14\
+\x61\x71\xc9\x87\x76\xed\x08\xf0\x71\xce\xf3\x72\xb8\xce\xd8\x2e\
+\xc3\xb4\xef\xce\xee\xab\xf5\x45\x9e\xda\x6f\xd6\x99\xfd\xc6\x13\
+\xbb\x61\x2f\xf2\x0d\x47\x6a\x0d\xd7\xd6\xe5\x64\xe2\x0c\x6f\xb6\
+\x7b\x17\xf6\xaf\x02\x45\x3d\x65\xe1\xb4\x6c\x70\xbd\x2c\x9e\xe2\
+\x78\x50\xdc\x74\xbb\x5a\xdd\xe8\x74\xb0\xd8\xe1\x72\x23\x37\x45\
+\xa9\x67\xa1\xdc\x60\x2b\x8c\x45\x9e\xba\x0d\x7b\x27\x1f\xc3\x1f\
+\xa5\x02\xc5\x59\x3a\xb4\xfd\x5e\x78\x63\x4d\x6a\x40\x5a\x61\x8f\
+\x23\xe6\x22\x63\x8a\x9a\x1c\x56\xd7\x65\xfb\x3d\xbc\xb2\x50\x02\
+\xcb\xbb\xbb\xbd\x34\x75\x53\xae\x2a\x3a\x97\x7d\x79\xfb\x8c\xdb\
+\x1a\xd5\x6d\x2e\xf2\x50\x88\x5f\xf3\xb9\xa3\xed\x4a\xa8\xbb\x23\
+\x9a\xb0\x4c\x53\x4b\x34\xe8\x6f\x97\x30\xe3\x0a\xbb\x52\x4a\xe7\
+\xf6\x7e\x89\x62\x71\xa1\xb8\xa6\x69\xd4\x75\x4d\x8c\xd6\x7d\x73\
+\x27\x74\xa3\x87\x5e\x64\x37\x3f\x2b\x7d\xd7\x78\x48\xae\x18\x56\
+\x18\xba\xeb\x1b\x75\x60\xa7\x18\x6a\x55\x60\xd7\x48\xfc\x91\xde\
+\x1c\x0b\x66\x63\xc7\x40\x6c\xde\x9a\x51\xc8\xbd\xd2\xd0\xa8\x31\
+\x9b\x82\x68\x5e\xa7\x2d\xf6\xf2\x70\xab\xf6\x87\xb5\x36\x75\x64\
+\x7c\x62\x6a\xf7\xf7\xda\x30\x72\x4e\xc3\x88\x1d\x2e\xf0\x4e\xe6\
+\xd5\xfc\xe3\x2a\x82\x1b\x27\x36\x21\xd8\xe2\xa4\x2e\xe3\x04\x3b\
+\x09\x25\xb3\xa1\x44\x13\x02\xc7\x3c\x6f\xf1\x72\xfd\x7d\xef\x20\
+\x18\xee\xfb\xd1\x5a\x1b\x43\x91\x74\xf4\x32\xf5\xb7\xb5\x0e\xa9\
+\xd5\x1c\x59\x81\x7a\x87\xb4\x35\xb6\xaa\xc2\xf6\x07\x47\xcf\xd8\
+\xd7\x6e\x08\x2e\xe1\xd4\xb1\x7b\xf0\xab\x55\xc5\xb1\x81\x13\x0f\
+\x7e\x02\x71\x39\x3a\xf3\xa9\x38\x83\x42\x3c\xe2\x1c\x43\xd8\x5a\
+\x68\x7d\xd5\xa9\xa6\x3b\x9a\x69\x03\x21\x7c\xaa\x04\x4d\xb5\xb0\
+\x98\xf1\xdc\xe6\xaf\x90\x45\x59\xd8\xc5\x82\xe7\xae\xf3\xdc\x2d\
+\xd2\x15\xad\xfb\x7c\xc5\x64\xd5\x3a\x4c\xe7\xf9\xb9\x87\xb3\x41\
+\xde\x60\x67\x27\xee\xba\x23\xd7\x3d\x30\x9f\x5d\x6c\xc8\x56\x5f\
+\x71\xec\xc8\x95\x83\x71\x7f\x1e\xae\xce\x4e\x25\xc9\x62\x24\x60\
+\x69\xea\x90\x9c\xaf\xd8\x8a\x07\x7e\x5e\x5b\x08\x47\x6d\x9f\x28\
+\xf6\xab\xb0\x3b\x57\xb1\x66\xc9\xf2\x01\xda\x12\x00\x7d\x47\xe5\
+\x95\x67\xe5\x82\x03\xcd\x3e\xee\xe3\x09\x09\xb8\xfb\xd6\xb2\x1b\
+\x33\xa6\xcc\x8a\x9f\x37\x33\x31\x31\xb5\x3a\x62\x69\x29\xcc\xc1\
+\x16\x3a\x56\x0e\xff\x20\x1b\xcf\xba\xd8\x68\x7b\x3d\x58\xb1\x70\
+\xfc\x81\x16\x56\x03\x7a\x7b\x26\x09\x02\x4f\x1a\x48\x3a\x36\xef\
+\x34\x8c\x58\x09\xf4\xb2\x73\x12\xd9\xa8\x74\x6b\x7b\xdd\x56\xdd\
+\xea\xae\x37\x1b\xd8\xde\x5c\x77\x98\x68\x4f\x1f\x5d\x46\xf6\x00\
+\x66\x37\x58\xf6\x06\x65\x1f\x48\x9e\x00\xc8\x6e\xa3\x86\xed\x33\
+\xe9\xc7\x54\x89\xc2\xd1\xf4\x06\x1f\x3f\xaa\xea\x8b\x41\x97\x11\
+\xda\x61\x37\xb4\xda\x73\x57\x39\x1b\x0c\xbd\xe8\x3a\x1c\x64\x97\
+\x06\x19\x88\x99\x0a\x1f\xb0\x6c\xaf\xd3\xd9\xe2\xb4\xbe\xa8\xf5\
+\x7d\xc0\xec\xf9\x1c\xe1\x0a\x64\xff\x4d\xee\xdf\xf7\x7f\xed\xa8\
+\xbe\x5e\x74\xde\x3b\xba\x10\x39\xd4\xaf\x9b\xea\x2b\x23\x74\xde\
+\x2e\xd5\x81\xf7\x72\x76\x46\x89\x1b\xdf\x2b\x7e\xec\x2e\x69\x65\
+\xc4\x5e\xf2\x17\xf0\x12\xce\x0f\x11\x9b\x06\x5a\xf0\xce\x3a\x54\
+\x7d\x90\x7e\x49\xf5\x97\xca\x2b\xd6\xd9\x5a\x1f\xb0\xa5\xef\x24\
+\x08\x4a\xc7\x07\xfa\x3a\xd6\x93\x92\xee\x98\x77\x6d\xcf\x9d\x8d\
+\x7a\x6b\x7e\xd6\xab\xb2\x79\x50\xb6\x2b\x6d\x34\xcb\xeb\x6a\xed\
+\xf5\xf0\xc3\xf9\x71\x24\xeb\x4d\xd1\x2e\x8e\x92\x23\xdb\x30\xae\
+\x2d\xd3\xff\x29\x84\x1b\xb7\x3f\xa4\x7d\xe0\xb7\xa3\xfd\x86\x04\
+\xd4\xd5\xee\x95\x02\xab\xb8\x9d\x84\xff\x01\xe3\xe9\xc7\xaf\
+"
+
+qt_resource_name = b"\
+\x00\x03\
+\x00\x00\x78\xa3\
+\x00\x71\
+\x00\x73\x00\x73\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x16\
+\x0b\x31\x44\x87\
+\x00\x70\
+\x00\x75\x00\x73\x00\x68\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x5f\x00\x70\x00\x72\x00\x65\x00\x73\x00\x73\x00\x65\
+\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x08\x38\x8c\x47\
+\x00\x66\
+\x00\x72\x00\x61\x00\x6d\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1c\
+\x0e\x3c\xde\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x5f\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x09\xaf\x5e\x27\
+\x00\x73\
+\x00\x70\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x06\xe6\xe6\x67\
+\x00\x75\
+\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x05\xcc\x19\x47\
+\x00\x73\
+\x00\x70\x00\x69\x00\x6e\x00\x75\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x19\
+\x08\x11\x29\x47\
+\x00\x72\
+\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\
+\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1f\
+\x0c\x85\x15\xa7\
+\x00\x72\
+\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\
+\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x5f\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x06\x41\x40\x87\
+\x00\x73\
+\x00\x69\x00\x7a\x00\x65\x00\x67\x00\x72\x00\x69\x00\x70\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1c\
+\x02\x75\x51\x87\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x5f\
+\x00\x70\x00\x72\x00\x65\x00\x73\x00\x73\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x16\
+\x01\x75\xcc\x87\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x0b\xc2\xcd\x07\
+\x00\x73\
+\x00\x70\x00\x69\x00\x6e\x00\x75\x00\x70\x00\x5f\x00\x6f\x00\x66\x00\x66\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x14\
+\x09\x87\xa0\x87\
+\x00\x70\
+\x00\x75\x00\x73\x00\x68\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x5f\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\
+\x00\x70\x00\x6e\x00\x67\
+\x00\x10\
+\x07\x5f\x75\x87\
+\x00\x73\
+\x00\x70\x00\x69\x00\x6e\x00\x75\x00\x70\x00\x5f\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x10\
+\x0c\xba\x0b\x87\
+\x00\x73\
+\x00\x70\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x6f\x00\x66\x00\x66\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x0c\xe8\xe0\xe7\
+\x00\x70\
+\x00\x61\x00\x67\x00\x65\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x17\
+\x04\xb5\xb5\xa7\
+\x00\x72\
+\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\
+\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x02\x9c\x73\xc7\
+\x00\x70\
+\x00\x75\x00\x73\x00\x68\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1d\
+\x05\xbc\x2c\x47\
+\x00\x72\
+\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\
+\x00\x65\x00\x64\x00\x5f\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x12\
+\x03\xe4\x59\x27\
+\x00\x73\
+\x00\x70\x00\x69\x00\x6e\x00\x75\x00\x70\x00\x5f\x00\x70\x00\x72\x00\x65\x00\x73\x00\x73\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\
+\x00\x67\
+\x00\x1f\
+\x00\xbd\x9c\xe7\
+\x00\x72\
+\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\
+\x00\x65\x00\x64\x00\x5f\x00\x70\x00\x72\x00\x65\x00\x73\x00\x73\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1a\
+\x03\x0e\xe4\x87\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x5f\
+\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x14\
+\x05\x6a\xa8\xa7\
+\x00\x73\
+\x00\x70\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x70\x00\x72\x00\x65\x00\x73\x00\x73\x00\x65\x00\x64\x00\x2e\
+\x00\x70\x00\x6e\x00\x67\
+\x00\x12\
+\x0f\x99\xfb\x67\
+\x00\x73\
+\x00\x70\x00\x69\x00\x6e\x00\x64\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\
+\x00\x67\
+\x00\x14\
+\x07\xec\xd1\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x2e\
+\x00\x70\x00\x6e\x00\x67\
+\x00\x17\
+\x0c\xab\x51\x07\
+\x00\x64\
+\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\
+\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x21\
+\x09\x84\x6e\x87\
+\x00\x72\
+\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x62\x00\x75\x00\x74\x00\x74\x00\x6f\x00\x6e\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\
+\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x5f\x00\x70\x00\x72\x00\x65\x00\x73\x00\x73\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\
+\x00\x1e\
+\x00\x4f\xcb\xe7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x5f\x00\x70\x00\x72\x00\x65\x00\x73\x00\x73\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x04\xa2\xfc\xa7\
+\x00\x64\
+\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x15\
+\x0f\xf3\xc0\x07\
+\x00\x75\
+\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\
+\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x0c\xbd\x13\x23\
+\x00\x63\
+\x00\x6f\x00\x66\x00\x66\x00\x65\x00\x65\x00\x2e\x00\x71\x00\x73\x00\x73\
+\x00\x0b\
+\x0c\xe2\x21\xa3\
+\x00\x64\
+\x00\x65\x00\x66\x00\x61\x00\x75\x00\x6c\x00\x74\x00\x2e\x00\x71\x00\x73\x00\x73\
+\x00\x0c\
+\x0c\xe8\xef\x03\
+\x00\x70\
+\x00\x61\x00\x67\x00\x65\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x2e\x00\x71\x00\x73\x00\x73\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x21\
+\x00\x00\x00\x0c\x00\x02\x00\x00\x00\x1e\x00\x00\x00\x03\
+\x00\x00\x05\x00\x00\x00\x00\x00\x00\x01\x00\x00\x27\xcf\
+\x00\x00\x03\x80\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x5d\
+\x00\x00\x01\xd4\x00\x00\x00\x00\x00\x01\x00\x00\x0b\xbf\
+\x00\x00\x01\x96\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x12\
+\x00\x00\x02\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x19\x13\
+\x00\x00\x03\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x20\xb8\
+\x00\x00\x03\x56\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x44\
+\x00\x00\x05\x42\x00\x00\x00\x00\x00\x01\x00\x00\x29\x13\
+\x00\x00\x02\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x17\xac\
+\x00\x00\x03\xfe\x00\x00\x00\x00\x00\x01\x00\x00\x21\xc6\
+\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x2c\
+\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x01\x00\x00\x05\x8a\
+\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x09\x8d\
+\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x04\xc1\
+\x00\x00\x02\x56\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x89\
+\x00\x00\x04\x56\x00\x00\x00\x00\x00\x01\x00\x00\x23\xe2\
+\x00\x00\x00\xfc\x00\x00\x00\x00\x00\x01\x00\x00\x06\xa9\
+\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x02\x05\
+\x00\x00\x04\xb8\x00\x00\x00\x00\x00\x01\x00\x00\x25\x9f\
+\x00\x00\x02\x28\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x78\
+\x00\x00\x00\xa6\x00\x00\x00\x00\x00\x01\x00\x00\x03\xa9\
+\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x02\x06\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x62\
+\x00\x00\x01\x34\x00\x00\x00\x00\x00\x01\x00\x00\x07\x9d\
+\x00\x00\x04\x84\x00\x00\x00\x00\x00\x01\x00\x00\x24\xed\
+\x00\x00\x02\x7c\x00\x00\x00\x00\x00\x01\x00\x00\x10\xa2\
+\x00\x00\x02\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x11\x9f\
+\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x03\x06\
+\x00\x00\x04\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x22\xd2\
+\x00\x00\x05\x64\x00\x00\x00\x00\x00\x01\x00\x00\x29\xc6\
+\x00\x00\x05\x94\x00\x00\x00\x00\x00\x01\x00\x00\x2a\x76\
+\x00\x00\x05\xae\x00\x00\x00\x00\x00\x01\x00\x00\x33\x41\
+\x00\x00\x05\xca\x00\x01\x00\x00\x00\x01\x00\x00\x33\x5c\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/widgets/stylesheet/stylesheeteditor.py b/examples/widgets/stylesheet/stylesheeteditor.py
new file mode 100644
index 0000000..0a33f28
--- /dev/null
+++ b/examples/widgets/stylesheet/stylesheeteditor.py
@@ -0,0 +1,115 @@
+#############################################################################
+##
+## Copyright (C) 2010 Hans-Peter Jansen <hpj at urpla.net>.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+###########################################################################
+
+
+from PyQt5.QtCore import pyqtSlot, QFile, QRegExp, Qt, QTextStream
+from PyQt5.QtWidgets import (QApplication, QDialog, QFileDialog, QMessageBox,
+        QStyleFactory)
+
+from ui_stylesheeteditor import Ui_StyleSheetEditor
+
+
+class StyleSheetEditor(QDialog):
+    def __init__(self, parent=None):
+        super(StyleSheetEditor, self).__init__(parent)
+
+        self.ui = Ui_StyleSheetEditor()
+        self.ui.setupUi(self)
+
+        regExp = QRegExp(r'.(.*)\+?Style')
+        defaultStyle = QApplication.style().metaObject().className()
+        if regExp.exactMatch(defaultStyle):
+            defaultStyle = regExp.cap(1)
+
+        self.ui.styleCombo.addItems(QStyleFactory.keys())
+        self.ui.styleCombo.setCurrentIndex(
+                self.ui.styleCombo.findText(defaultStyle, Qt.MatchContains))
+
+        self.ui.styleSheetCombo.setCurrentIndex(
+                self.ui.styleSheetCombo.findText('Coffee'))
+
+        self.loadStyleSheet('Coffee')
+
+    @pyqtSlot(str)
+    def on_styleCombo_activated(self, styleName):
+        QApplication.setStyle(styleName)
+        self.ui.applyButton.setEnabled(False)
+
+    @pyqtSlot(str)
+    def on_styleSheetCombo_activated(self, sheetName):
+        self.loadStyleSheet(sheetName)
+
+    def on_styleTextEdit_textChanged(self):
+        self.ui.applyButton.setEnabled(True)
+
+    def on_applyButton_clicked(self):
+        QApplication.instance().setStyleSheet(
+                self.ui.styleTextEdit.toPlainText())
+        self.ui.applyButton.setEnabled(False)
+
+    def on_saveButton_clicked(self):
+        fileName, _ = QFileDialog.getSaveFileName(self)
+        if fileName:
+            self.saveStyleSheet(fileName)
+
+    def loadStyleSheet(self, sheetName):
+        file = QFile(':/qss/%s.qss' % sheetName.lower())
+        file.open(QFile.ReadOnly)
+
+        styleSheet = file.readAll()
+        try:
+            # Python v2.
+            styleSheet = unicode(styleSheet, encoding='utf8')
+        except NameError:
+            # Python v3.
+            styleSheet = str(styleSheet, encoding='utf8')
+
+        self.ui.styleTextEdit.setPlainText(styleSheet)
+        QApplication.instance().setStyleSheet(styleSheet)
+        self.ui.applyButton.setEnabled(False)
+
+    def saveStyleSheet(self, fileName):
+        styleSheet = self.ui.styleTextEdit.toPlainText()
+        file = QFile(fileName)
+        if file.open(QFile.WriteOnly):
+            QTextStream(file) << styleSheet
+        else:
+            QMessageBox.information(self, "Unable to open file",
+                    file.errorString())
diff --git a/examples/widgets/stylesheet/stylesheeteditor.ui b/examples/widgets/stylesheet/stylesheeteditor.ui
new file mode 100644
index 0000000..6e2f027
--- /dev/null
+++ b/examples/widgets/stylesheet/stylesheeteditor.ui
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>StyleSheetEditor</class>
+ <widget class="QWidget" name="StyleSheetEditor">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>445</width>
+    <height>289</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Style Editor</string>
+  </property>
+  <layout class="QGridLayout">
+   <property name="margin">
+    <number>9</number>
+   </property>
+   <property name="spacing">
+    <number>6</number>
+   </property>
+   <item row="0" column="6">
+    <spacer>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::MinimumExpanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>32</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="0">
+    <spacer>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::MinimumExpanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>32</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="5">
+    <widget class="QComboBox" name="styleSheetCombo">
+     <item>
+      <property name="text">
+       <string>Default</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Coffee</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Pagefold</string>
+      </property>
+     </item>
+    </widget>
+   </item>
+   <item row="0" column="3">
+    <spacer>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>10</width>
+       <height>16</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="2">
+    <widget class="QComboBox" name="styleCombo">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLabel" name="label_7">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Style:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" colspan="7">
+    <layout class="QHBoxLayout">
+     <property name="spacing">
+      <number>6</number>
+     </property>
+     <property name="margin">
+      <number>0</number>
+     </property>
+     <item>
+      <spacer>
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>321</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="saveButton">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="text">
+        <string>&Save</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="applyButton">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="text">
+        <string>&Apply</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0" colspan="7">
+    <widget class="QTextEdit" name="styleTextEdit"/>
+   </item>
+   <item row="0" column="4">
+    <widget class="QLabel" name="label_8">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string>Style Sheet:</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/widgets/stylesheet/ui_mainwindow.py b/examples/widgets/stylesheet/ui_mainwindow.py
new file mode 100644
index 0000000..37c5811
--- /dev/null
+++ b/examples/widgets/stylesheet/ui_mainwindow.py
@@ -0,0 +1,191 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'mainwindow.ui'
+#
+# Created: Fri Jul 26 06:49:55 2013
+#      by: PyQt5 UI code generator 5.0.1-snapshot-2a99e59669ee
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_MainWindow(object):
+    def setupUi(self, MainWindow):
+        MainWindow.setObjectName("MainWindow")
+        MainWindow.resize(400, 413)
+        self.centralwidget = QtWidgets.QWidget(MainWindow)
+        self.centralwidget.setObjectName("centralwidget")
+        self.vboxlayout = QtWidgets.QVBoxLayout(self.centralwidget)
+        self.vboxlayout.setContentsMargins(9, 9, 9, 9)
+        self.vboxlayout.setSpacing(6)
+        self.vboxlayout.setObjectName("vboxlayout")
+        self.mainFrame = QtWidgets.QFrame(self.centralwidget)
+        self.mainFrame.setFrameShape(QtWidgets.QFrame.StyledPanel)
+        self.mainFrame.setFrameShadow(QtWidgets.QFrame.Raised)
+        self.mainFrame.setObjectName("mainFrame")
+        self.gridlayout = QtWidgets.QGridLayout(self.mainFrame)
+        self.gridlayout.setContentsMargins(9, 9, 9, 9)
+        self.gridlayout.setSpacing(6)
+        self.gridlayout.setObjectName("gridlayout")
+        self.agreeCheckBox = QtWidgets.QCheckBox(self.mainFrame)
+        self.agreeCheckBox.setObjectName("agreeCheckBox")
+        self.gridlayout.addWidget(self.agreeCheckBox, 6, 0, 1, 5)
+        self.label = QtWidgets.QLabel(self.mainFrame)
+        self.label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTop|QtCore.Qt.AlignTrailing)
+        self.label.setObjectName("label")
+        self.gridlayout.addWidget(self.label, 5, 0, 1, 1)
+        self.nameLabel = QtWidgets.QLabel(self.mainFrame)
+        self.nameLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.nameLabel.setObjectName("nameLabel")
+        self.gridlayout.addWidget(self.nameLabel, 0, 0, 1, 1)
+        self.maleRadioButton = QtWidgets.QRadioButton(self.mainFrame)
+        self.maleRadioButton.setObjectName("maleRadioButton")
+        self.gridlayout.addWidget(self.maleRadioButton, 1, 1, 1, 1)
+        self.passwordLabel = QtWidgets.QLabel(self.mainFrame)
+        self.passwordLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.passwordLabel.setObjectName("passwordLabel")
+        self.gridlayout.addWidget(self.passwordLabel, 3, 0, 1, 1)
+        self.countryCombo = QtWidgets.QComboBox(self.mainFrame)
+        self.countryCombo.setObjectName("countryCombo")
+        self.countryCombo.addItem("")
+        self.countryCombo.addItem("")
+        self.countryCombo.addItem("")
+        self.countryCombo.addItem("")
+        self.countryCombo.addItem("")
+        self.countryCombo.addItem("")
+        self.countryCombo.addItem("")
+        self.gridlayout.addWidget(self.countryCombo, 4, 1, 1, 4)
+        self.ageLabel = QtWidgets.QLabel(self.mainFrame)
+        self.ageLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.ageLabel.setObjectName("ageLabel")
+        self.gridlayout.addWidget(self.ageLabel, 2, 0, 1, 1)
+        self.countryLabel = QtWidgets.QLabel(self.mainFrame)
+        self.countryLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.countryLabel.setObjectName("countryLabel")
+        self.gridlayout.addWidget(self.countryLabel, 4, 0, 1, 1)
+        self.genderLabel = QtWidgets.QLabel(self.mainFrame)
+        self.genderLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.genderLabel.setObjectName("genderLabel")
+        self.gridlayout.addWidget(self.genderLabel, 1, 0, 1, 1)
+        self.passwordEdit = QtWidgets.QLineEdit(self.mainFrame)
+        self.passwordEdit.setEchoMode(QtWidgets.QLineEdit.Password)
+        self.passwordEdit.setObjectName("passwordEdit")
+        self.gridlayout.addWidget(self.passwordEdit, 3, 1, 1, 4)
+        self.femaleRadioButton = QtWidgets.QRadioButton(self.mainFrame)
+        self.femaleRadioButton.setObjectName("femaleRadioButton")
+        self.gridlayout.addWidget(self.femaleRadioButton, 1, 2, 1, 2)
+        self.ageSpinBox = QtWidgets.QSpinBox(self.mainFrame)
+        self.ageSpinBox.setMinimum(12)
+        self.ageSpinBox.setProperty("value", 22)
+        self.ageSpinBox.setObjectName("ageSpinBox")
+        self.gridlayout.addWidget(self.ageSpinBox, 2, 1, 1, 2)
+        self.nameCombo = QtWidgets.QComboBox(self.mainFrame)
+        self.nameCombo.setEditable(True)
+        self.nameCombo.setObjectName("nameCombo")
+        self.gridlayout.addWidget(self.nameCombo, 0, 1, 1, 4)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.gridlayout.addItem(spacerItem, 1, 4, 1, 1)
+        spacerItem1 = QtWidgets.QSpacerItem(61, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.gridlayout.addItem(spacerItem1, 2, 3, 1, 2)
+        self.buttonBox = QtWidgets.QDialogButtonBox(self.mainFrame)
+        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.NoButton|QtWidgets.QDialogButtonBox.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.gridlayout.addWidget(self.buttonBox, 7, 3, 1, 2)
+        self.professionList = QtWidgets.QListWidget(self.mainFrame)
+        self.professionList.setObjectName("professionList")
+        item = QtWidgets.QListWidgetItem()
+        self.professionList.addItem(item)
+        item = QtWidgets.QListWidgetItem()
+        self.professionList.addItem(item)
+        item = QtWidgets.QListWidgetItem()
+        self.professionList.addItem(item)
+        self.gridlayout.addWidget(self.professionList, 5, 1, 1, 4)
+        self.vboxlayout.addWidget(self.mainFrame)
+        MainWindow.setCentralWidget(self.centralwidget)
+        self.menubar = QtWidgets.QMenuBar(MainWindow)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 400, 29))
+        self.menubar.setObjectName("menubar")
+        self.menu_File = QtWidgets.QMenu(self.menubar)
+        self.menu_File.setObjectName("menu_File")
+        self.menu_Help = QtWidgets.QMenu(self.menubar)
+        self.menu_Help.setObjectName("menu_Help")
+        MainWindow.setMenuBar(self.menubar)
+        self.statusbar = QtWidgets.QStatusBar(MainWindow)
+        self.statusbar.setObjectName("statusbar")
+        MainWindow.setStatusBar(self.statusbar)
+        self.exitAction = QtWidgets.QAction(MainWindow)
+        self.exitAction.setObjectName("exitAction")
+        self.aboutQtAction = QtWidgets.QAction(MainWindow)
+        self.aboutQtAction.setObjectName("aboutQtAction")
+        self.editStyleAction = QtWidgets.QAction(MainWindow)
+        self.editStyleAction.setObjectName("editStyleAction")
+        self.aboutAction = QtWidgets.QAction(MainWindow)
+        self.aboutAction.setObjectName("aboutAction")
+        self.menu_File.addAction(self.editStyleAction)
+        self.menu_File.addSeparator()
+        self.menu_File.addAction(self.exitAction)
+        self.menu_Help.addAction(self.aboutAction)
+        self.menu_Help.addAction(self.aboutQtAction)
+        self.menubar.addAction(self.menu_File.menuAction())
+        self.menubar.addAction(self.menu_Help.menuAction())
+        self.label.setBuddy(self.professionList)
+        self.nameLabel.setBuddy(self.nameCombo)
+        self.passwordLabel.setBuddy(self.passwordEdit)
+        self.ageLabel.setBuddy(self.ageSpinBox)
+        self.countryLabel.setBuddy(self.countryCombo)
+
+        self.retranslateUi(MainWindow)
+        self.countryCombo.setCurrentIndex(6)
+        self.professionList.setCurrentRow(0)
+        QtCore.QMetaObject.connectSlotsByName(MainWindow)
+
+    def retranslateUi(self, MainWindow):
+        _translate = QtCore.QCoreApplication.translate
+        MainWindow.setWindowTitle(_translate("MainWindow", "Style Sheet"))
+        self.agreeCheckBox.setToolTip(_translate("MainWindow", "Please read the LICENSE file before checking"))
+        self.agreeCheckBox.setText(_translate("MainWindow", "I accept the terms and &conditions"))
+        self.label.setText(_translate("MainWindow", "Profession:"))
+        self.nameLabel.setText(_translate("MainWindow", "&Name:"))
+        self.maleRadioButton.setToolTip(_translate("MainWindow", "Check this if you are male"))
+        self.maleRadioButton.setText(_translate("MainWindow", "&Male"))
+        self.passwordLabel.setText(_translate("MainWindow", "&Password:"))
+        self.countryCombo.setToolTip(_translate("MainWindow", "Specify country of origin"))
+        self.countryCombo.setStatusTip(_translate("MainWindow", "Specify country of origin"))
+        self.countryCombo.setItemText(0, _translate("MainWindow", "Egypt"))
+        self.countryCombo.setItemText(1, _translate("MainWindow", "France"))
+        self.countryCombo.setItemText(2, _translate("MainWindow", "Germany"))
+        self.countryCombo.setItemText(3, _translate("MainWindow", "India"))
+        self.countryCombo.setItemText(4, _translate("MainWindow", "Italy"))
+        self.countryCombo.setItemText(5, _translate("MainWindow", "Norway"))
+        self.countryCombo.setItemText(6, _translate("MainWindow", "Pakistan"))
+        self.ageLabel.setText(_translate("MainWindow", "&Age:"))
+        self.countryLabel.setText(_translate("MainWindow", "Country:"))
+        self.genderLabel.setText(_translate("MainWindow", "Gender:"))
+        self.passwordEdit.setToolTip(_translate("MainWindow", "Specify your password"))
+        self.passwordEdit.setStatusTip(_translate("MainWindow", "Specify your password"))
+        self.passwordEdit.setText(_translate("MainWindow", "Password"))
+        self.femaleRadioButton.setToolTip(_translate("MainWindow", "Check this if you are female"))
+        self.femaleRadioButton.setText(_translate("MainWindow", "&Female"))
+        self.ageSpinBox.setToolTip(_translate("MainWindow", "Specify your age"))
+        self.ageSpinBox.setStatusTip(_translate("MainWindow", "Specify your age"))
+        self.nameCombo.setToolTip(_translate("MainWindow", "Specify your name"))
+        self.professionList.setToolTip(_translate("MainWindow", "Select your profession"))
+        self.professionList.setStatusTip(_translate("MainWindow", "Specify your name here"))
+        self.professionList.setWhatsThis(_translate("MainWindow", "Specify your name here"))
+        __sortingEnabled = self.professionList.isSortingEnabled()
+        self.professionList.setSortingEnabled(False)
+        item = self.professionList.item(0)
+        item.setText(_translate("MainWindow", "Developer"))
+        item = self.professionList.item(1)
+        item.setText(_translate("MainWindow", "Student"))
+        item = self.professionList.item(2)
+        item.setText(_translate("MainWindow", "Fisherman"))
+        self.professionList.setSortingEnabled(__sortingEnabled)
+        self.menu_File.setTitle(_translate("MainWindow", "&File"))
+        self.menu_Help.setTitle(_translate("MainWindow", "&Help"))
+        self.exitAction.setText(_translate("MainWindow", "&Exit"))
+        self.aboutQtAction.setText(_translate("MainWindow", "About Qt"))
+        self.editStyleAction.setText(_translate("MainWindow", "Edit &Style..."))
+        self.aboutAction.setText(_translate("MainWindow", "About"))
+
diff --git a/examples/widgets/stylesheet/ui_stylesheeteditor.py b/examples/widgets/stylesheet/ui_stylesheeteditor.py
new file mode 100644
index 0000000..38a41d7
--- /dev/null
+++ b/examples/widgets/stylesheet/ui_stylesheeteditor.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'stylesheeteditor.ui'
+#
+# Created: Fri Jul 26 06:50:07 2013
+#      by: PyQt5 UI code generator 5.0.1-snapshot-2a99e59669ee
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_StyleSheetEditor(object):
+    def setupUi(self, StyleSheetEditor):
+        StyleSheetEditor.setObjectName("StyleSheetEditor")
+        StyleSheetEditor.resize(445, 289)
+        self.gridlayout = QtWidgets.QGridLayout(StyleSheetEditor)
+        self.gridlayout.setContentsMargins(9, 9, 9, 9)
+        self.gridlayout.setSpacing(6)
+        self.gridlayout.setObjectName("gridlayout")
+        spacerItem = QtWidgets.QSpacerItem(32, 20, QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum)
+        self.gridlayout.addItem(spacerItem, 0, 6, 1, 1)
+        spacerItem1 = QtWidgets.QSpacerItem(32, 20, QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum)
+        self.gridlayout.addItem(spacerItem1, 0, 0, 1, 1)
+        self.styleSheetCombo = QtWidgets.QComboBox(StyleSheetEditor)
+        self.styleSheetCombo.setObjectName("styleSheetCombo")
+        self.styleSheetCombo.addItem("")
+        self.styleSheetCombo.addItem("")
+        self.styleSheetCombo.addItem("")
+        self.gridlayout.addWidget(self.styleSheetCombo, 0, 5, 1, 1)
+        spacerItem2 = QtWidgets.QSpacerItem(10, 16, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
+        self.gridlayout.addItem(spacerItem2, 0, 3, 1, 1)
+        self.styleCombo = QtWidgets.QComboBox(StyleSheetEditor)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.styleCombo.sizePolicy().hasHeightForWidth())
+        self.styleCombo.setSizePolicy(sizePolicy)
+        self.styleCombo.setObjectName("styleCombo")
+        self.gridlayout.addWidget(self.styleCombo, 0, 2, 1, 1)
+        self.label_7 = QtWidgets.QLabel(StyleSheetEditor)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.label_7.sizePolicy().hasHeightForWidth())
+        self.label_7.setSizePolicy(sizePolicy)
+        self.label_7.setObjectName("label_7")
+        self.gridlayout.addWidget(self.label_7, 0, 1, 1, 1)
+        self.hboxlayout = QtWidgets.QHBoxLayout()
+        self.hboxlayout.setSpacing(6)
+        self.hboxlayout.setContentsMargins(0, 0, 0, 0)
+        self.hboxlayout.setObjectName("hboxlayout")
+        spacerItem3 = QtWidgets.QSpacerItem(321, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.hboxlayout.addItem(spacerItem3)
+        self.saveButton = QtWidgets.QPushButton(StyleSheetEditor)
+        self.saveButton.setEnabled(True)
+        self.saveButton.setObjectName("saveButton")
+        self.hboxlayout.addWidget(self.saveButton)
+        self.applyButton = QtWidgets.QPushButton(StyleSheetEditor)
+        self.applyButton.setEnabled(False)
+        self.applyButton.setObjectName("applyButton")
+        self.hboxlayout.addWidget(self.applyButton)
+        self.gridlayout.addLayout(self.hboxlayout, 2, 0, 1, 7)
+        self.styleTextEdit = QtWidgets.QTextEdit(StyleSheetEditor)
+        self.styleTextEdit.setObjectName("styleTextEdit")
+        self.gridlayout.addWidget(self.styleTextEdit, 1, 0, 1, 7)
+        self.label_8 = QtWidgets.QLabel(StyleSheetEditor)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.label_8.sizePolicy().hasHeightForWidth())
+        self.label_8.setSizePolicy(sizePolicy)
+        self.label_8.setObjectName("label_8")
+        self.gridlayout.addWidget(self.label_8, 0, 4, 1, 1)
+
+        self.retranslateUi(StyleSheetEditor)
+        QtCore.QMetaObject.connectSlotsByName(StyleSheetEditor)
+
+    def retranslateUi(self, StyleSheetEditor):
+        _translate = QtCore.QCoreApplication.translate
+        StyleSheetEditor.setWindowTitle(_translate("StyleSheetEditor", "Style Editor"))
+        self.styleSheetCombo.setItemText(0, _translate("StyleSheetEditor", "Default"))
+        self.styleSheetCombo.setItemText(1, _translate("StyleSheetEditor", "Coffee"))
+        self.styleSheetCombo.setItemText(2, _translate("StyleSheetEditor", "Pagefold"))
+        self.label_7.setText(_translate("StyleSheetEditor", "Style:"))
+        self.saveButton.setText(_translate("StyleSheetEditor", "&Save"))
+        self.applyButton.setText(_translate("StyleSheetEditor", "&Apply"))
+        self.label_8.setText(_translate("StyleSheetEditor", "Style Sheet:"))
+
diff --git a/examples/widgets/tetrix.py b/examples/widgets/tetrix.py
new file mode 100755
index 0000000..6ddb52f
--- /dev/null
+++ b/examples/widgets/tetrix.py
@@ -0,0 +1,504 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import copy
+import random
+
+from PyQt5.QtCore import pyqtSignal, QBasicTimer, QSize, Qt
+from PyQt5.QtGui import QColor, QPainter, QPixmap
+from PyQt5.QtWidgets import (QApplication, QFrame, QGridLayout, QLabel,
+        QLCDNumber, QPushButton, QWidget)
+
+
+NoShape, ZShape, SShape, LineShape, TShape, SquareShape, LShape, MirroredLShape = range(8)
+
+
+class TetrixWindow(QWidget):
+    def __init__(self):
+        super(TetrixWindow, self).__init__()
+
+        self.board = TetrixBoard()
+
+        nextPieceLabel = QLabel()
+        nextPieceLabel.setFrameStyle(QFrame.Box | QFrame.Raised)
+        nextPieceLabel.setAlignment(Qt.AlignCenter)
+        self.board.setNextPieceLabel(nextPieceLabel)
+
+        scoreLcd = QLCDNumber(5)
+        scoreLcd.setSegmentStyle(QLCDNumber.Filled)
+        levelLcd = QLCDNumber(2)
+        levelLcd.setSegmentStyle(QLCDNumber.Filled)
+        linesLcd = QLCDNumber(5)
+        linesLcd.setSegmentStyle(QLCDNumber.Filled)
+
+        startButton = QPushButton("&Start")
+        startButton.setFocusPolicy(Qt.NoFocus)
+        quitButton = QPushButton("&Quit")
+        quitButton.setFocusPolicy(Qt.NoFocus)
+        pauseButton = QPushButton("&Pause")
+        pauseButton.setFocusPolicy(Qt.NoFocus)
+
+        startButton.clicked.connect(self.board.start)
+        pauseButton.clicked.connect(self.board.pause)
+        quitButton.clicked.connect(QApplication.instance().quit)
+        self.board.scoreChanged.connect(scoreLcd.display)
+        self.board.levelChanged.connect(levelLcd.display)
+        self.board.linesRemovedChanged.connect(linesLcd.display)
+
+        layout = QGridLayout()
+        layout.addWidget(self.createLabel("NEXT"), 0, 0)
+        layout.addWidget(nextPieceLabel, 1, 0)
+        layout.addWidget(self.createLabel("LEVEL"), 2, 0)
+        layout.addWidget(levelLcd, 3, 0)
+        layout.addWidget(startButton, 4, 0)
+        layout.addWidget(self.board, 0, 1, 6, 1)
+        layout.addWidget(self.createLabel("SCORE"), 0, 2)
+        layout.addWidget(scoreLcd, 1, 2)
+        layout.addWidget(self.createLabel("LINES REMOVED"), 2, 2)
+        layout.addWidget(linesLcd, 3, 2)
+        layout.addWidget(quitButton, 4, 2)
+        layout.addWidget(pauseButton, 5, 2)
+        self.setLayout(layout)
+
+        self.setWindowTitle("Tetrix")
+        self.resize(550, 370)
+
+    def createLabel(self, text):
+        lbl = QLabel(text)
+        lbl.setAlignment(Qt.AlignHCenter | Qt.AlignBottom)
+        return lbl
+
+
+class TetrixBoard(QFrame):
+    BoardWidth = 10
+    BoardHeight = 22
+
+    scoreChanged = pyqtSignal(int)
+
+    levelChanged = pyqtSignal(int)
+
+    linesRemovedChanged = pyqtSignal(int)
+
+    def __init__(self, parent=None):
+        super(TetrixBoard, self).__init__(parent)
+
+        self.timer = QBasicTimer()
+        self.nextPieceLabel = None
+        self.isWaitingAfterLine = False
+        self.curPiece = TetrixPiece()
+        self.nextPiece = TetrixPiece()
+        self.curX = 0
+        self.curY = 0
+        self.numLinesRemoved = 0
+        self.numPiecesDropped = 0
+        self.score = 0
+        self.level = 0
+        self.board = None
+
+        self.setFrameStyle(QFrame.Panel | QFrame.Sunken)
+        self.setFocusPolicy(Qt.StrongFocus)
+        self.isStarted = False
+        self.isPaused = False
+        self.clearBoard()
+
+        self.nextPiece.setRandomShape()
+
+    def shapeAt(self, x, y):
+        return self.board[(y * TetrixBoard.BoardWidth) + x]
+
+    def setShapeAt(self, x, y, shape):
+        self.board[(y * TetrixBoard.BoardWidth) + x] = shape   
+
+    def timeoutTime(self):
+        return 1000 / (1 + self.level)
+
+    def squareWidth(self):
+        return self.contentsRect().width() / TetrixBoard.BoardWidth
+
+    def squareHeight(self):
+        return self.contentsRect().height() / TetrixBoard.BoardHeight
+
+    def setNextPieceLabel(self, label):
+        self.nextPieceLabel = label
+
+    def sizeHint(self):
+        return QSize(TetrixBoard.BoardWidth * 15 + self.frameWidth() * 2,
+                TetrixBoard.BoardHeight * 15 + self.frameWidth() * 2)
+
+    def minimumSizeHint(self):
+        return QSize(TetrixBoard.BoardWidth * 5 + self.frameWidth() * 2,
+                TetrixBoard.BoardHeight * 5 + self.frameWidth() * 2)
+
+    def start(self):
+        if self.isPaused:
+            return
+
+        self.isStarted = True
+        self.isWaitingAfterLine = False
+        self.numLinesRemoved = 0
+        self.numPiecesDropped = 0
+        self.score = 0
+        self.level = 1
+        self.clearBoard()
+
+        self.linesRemovedChanged.emit(self.numLinesRemoved)
+        self.scoreChanged.emit(self.score)
+        self.levelChanged.emit(self.level)
+
+        self.newPiece()
+        self.timer.start(self.timeoutTime(), self)
+
+    def pause(self):
+        if not self.isStarted:
+            return
+
+        self.isPaused = not self.isPaused
+        if self.isPaused:
+            self.timer.stop()
+        else:
+            self.timer.start(self.timeoutTime(), self)
+
+        self.update()
+
+    def paintEvent(self, event):
+        super(TetrixBoard, self).paintEvent(event)
+
+        painter = QPainter(self)
+        rect = self.contentsRect()
+
+        if self.isPaused:
+            painter.drawText(rect, Qt.AlignCenter, "Pause")
+            return
+
+        boardTop = rect.bottom() - TetrixBoard.BoardHeight * self.squareHeight()
+
+        for i in range(TetrixBoard.BoardHeight):
+            for j in range(TetrixBoard.BoardWidth):
+                shape = self.shapeAt(j, TetrixBoard.BoardHeight - i - 1)
+                if shape != NoShape:
+                    self.drawSquare(painter,
+                            rect.left() + j * self.squareWidth(),
+                            boardTop + i * self.squareHeight(), shape)
+
+        if self.curPiece.shape() != NoShape:
+            for i in range(4):
+                x = self.curX + self.curPiece.x(i)
+                y = self.curY - self.curPiece.y(i)
+                self.drawSquare(painter, rect.left() + x * self.squareWidth(),
+                        boardTop + (TetrixBoard.BoardHeight - y - 1) * self.squareHeight(),
+                        self.curPiece.shape())
+
+    def keyPressEvent(self, event):
+        if not self.isStarted or self.isPaused or self.curPiece.shape() == NoShape:
+            super(TetrixBoard, self).keyPressEvent(event)
+            return
+
+        key = event.key()
+        if key == Qt.Key_Left:
+            self.tryMove(self.curPiece, self.curX - 1, self.curY)
+        elif key == Qt.Key_Right:
+            self.tryMove(self.curPiece, self.curX + 1, self.curY)
+        elif key == Qt.Key_Down:
+            self.tryMove(self.curPiece.rotatedRight(), self.curX, self.curY)
+        elif key == Qt.Key_Up:
+            self.tryMove(self.curPiece.rotatedLeft(), self.curX, self.curY)
+        elif key == Qt.Key_Space:
+            self.dropDown()
+        elif key == Qt.Key_D:
+            self.oneLineDown()
+        else:
+            super(TetrixBoard, self).keyPressEvent(event)
+
+    def timerEvent(self, event):
+        if event.timerId() == self.timer.timerId():
+            if self.isWaitingAfterLine:
+                self.isWaitingAfterLine = False
+                self.newPiece()
+                self.timer.start(self.timeoutTime(), self)
+            else:
+                self.oneLineDown()
+        else:
+            super(TetrixBoard, self).timerEvent(event)
+
+    def clearBoard(self):
+        self.board = [NoShape for i in range(TetrixBoard.BoardHeight * TetrixBoard.BoardWidth)]
+
+    def dropDown(self):
+        dropHeight = 0
+        newY = self.curY
+        while newY > 0:
+            if not self.tryMove(self.curPiece, self.curX, newY - 1):
+                break
+            newY -= 1
+            dropHeight += 1
+
+        self.pieceDropped(dropHeight)
+
+    def oneLineDown(self):
+        if not self.tryMove(self.curPiece, self.curX, self.curY - 1):
+            self.pieceDropped(0)
+
+    def pieceDropped(self, dropHeight):
+        for i in range(4):
+            x = self.curX + self.curPiece.x(i)
+            y = self.curY - self.curPiece.y(i)
+            self.setShapeAt(x, y, self.curPiece.shape())
+
+        self.numPiecesDropped += 1
+        if self.numPiecesDropped % 25 == 0:
+            self.level += 1
+            self.timer.start(self.timeoutTime(), self)
+            self.levelChanged.emit(self.level)
+
+        self.score += dropHeight + 7
+        self.scoreChanged.emit(self.score)
+        self.removeFullLines()
+
+        if not self.isWaitingAfterLine:
+            self.newPiece()
+
+    def removeFullLines(self):
+        numFullLines = 0
+
+        for i in range(TetrixBoard.BoardHeight - 1, -1, -1):
+            lineIsFull = True
+
+            for j in range(TetrixBoard.BoardWidth):
+                if self.shapeAt(j, i) == NoShape:
+                    lineIsFull = False
+                    break
+
+            if lineIsFull:
+                numFullLines += 1
+                for k in range(TetrixBoard.BoardHeight - 1):
+                    for j in range(TetrixBoard.BoardWidth):
+                        self.setShapeAt(j, k, self.shapeAt(j, k + 1))
+
+                for j in range(TetrixBoard.BoardWidth):
+                    self.setShapeAt(j, TetrixBoard.BoardHeight - 1, NoShape)
+
+        if numFullLines > 0:
+            self.numLinesRemoved += numFullLines
+            self.score += 10 * numFullLines
+            self.linesRemovedChanged.emit(self.numLinesRemoved)
+            self.scoreChanged.emit(self.score)
+
+            self.timer.start(500, self)
+            self.isWaitingAfterLine = True
+            self.curPiece.setShape(NoShape)
+            self.update()
+
+    def newPiece(self):
+        self.curPiece = copy.deepcopy(self.nextPiece)
+        self.nextPiece.setRandomShape()
+        self.showNextPiece()
+        self.curX = TetrixBoard.BoardWidth // 2 + 1
+        self.curY = TetrixBoard.BoardHeight - 1 + self.curPiece.minY()
+
+        if not self.tryMove(self.curPiece, self.curX, self.curY):
+            self.curPiece.setShape(NoShape)
+            self.timer.stop()
+            self.isStarted = False
+
+    def showNextPiece(self):
+        if self.nextPieceLabel is None:
+            return
+
+        dx = self.nextPiece.maxX() - self.nextPiece.minX() + 1
+        dy = self.nextPiece.maxY() - self.nextPiece.minY() + 1
+
+        pixmap = QPixmap(dx * self.squareWidth(), dy * self.squareHeight())
+        painter = QPainter(pixmap)
+        painter.fillRect(pixmap.rect(), self.nextPieceLabel.palette().window())
+
+        for i in range(4):
+            x = self.nextPiece.x(i) - self.nextPiece.minX()
+            y = self.nextPiece.y(i) - self.nextPiece.minY()
+            self.drawSquare(painter, x * self.squareWidth(),
+                    y * self.squareHeight(), self.nextPiece.shape())
+
+        painter.end()
+
+        self.nextPieceLabel.setPixmap(pixmap)
+
+    def tryMove(self, newPiece, newX, newY):
+        for i in range(4):
+            x = newX + newPiece.x(i)
+            y = newY - newPiece.y(i)
+            if x < 0 or x >= TetrixBoard.BoardWidth or y < 0 or y >= TetrixBoard.BoardHeight:
+                return False
+            if self.shapeAt(x, y) != NoShape:
+                return False
+
+        self.curPiece = newPiece
+        self.curX = newX
+        self.curY = newY
+        self.update()
+        return True
+
+    def drawSquare(self, painter, x, y, shape):
+        colorTable = [0x000000, 0xCC6666, 0x66CC66, 0x6666CC,
+                      0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00]
+
+        color = QColor(colorTable[shape])
+        painter.fillRect(x + 1, y + 1, self.squareWidth() - 2,
+                self.squareHeight() - 2, color)
+
+        painter.setPen(color.lighter())
+        painter.drawLine(x, y + self.squareHeight() - 1, x, y)
+        painter.drawLine(x, y, x + self.squareWidth() - 1, y)
+
+        painter.setPen(color.darker())
+        painter.drawLine(x + 1, y + self.squareHeight() - 1,
+                x + self.squareWidth() - 1, y + self.squareHeight() - 1)
+        painter.drawLine(x + self.squareWidth() - 1,
+                y + self.squareHeight() - 1, x + self.squareWidth() - 1, y + 1)
+
+
+class TetrixPiece(object):
+    coordsTable = (
+        ((0, 0),     (0, 0),     (0, 0),     (0, 0)),
+        ((0, -1),    (0, 0),     (-1, 0),    (-1, 1)),
+        ((0, -1),    (0, 0),     (1, 0),     (1, 1)),
+        ((0, -1),    (0, 0),     (0, 1),     (0, 2)),
+        ((-1, 0),    (0, 0),     (1, 0),     (0, 1)),
+        ((0, 0),     (1, 0),     (0, 1),     (1, 1)),
+        ((-1, -1),   (0, -1),    (0, 0),     (0, 1)),
+        ((1, -1),    (0, -1),    (0, 0),     (0, 1))
+    )
+
+    def __init__(self):
+        self.coords = [[0, 0] for _ in range(4)]
+        self.pieceShape = NoShape
+
+        self.setShape(NoShape)
+
+    def shape(self):
+        return self.pieceShape
+
+    def setShape(self, shape):
+        table = TetrixPiece.coordsTable[shape]
+        for i in range(4):
+            for j in range(2):
+                self.coords[i][j] = table[i][j]
+
+        self.pieceShape = shape
+
+    def setRandomShape(self):
+        self.setShape(random.randint(1, 7))
+
+    def x(self, index):
+        return self.coords[index][0]
+
+    def y(self, index):
+        return self.coords[index][1]
+
+    def setX(self, index, x):
+        self.coords[index][0] = x
+
+    def setY(self, index, y):
+        self.coords[index][1] = y
+
+    def minX(self):
+        m = self.coords[0][0]
+        for i in range(4):
+            m = min(m, self.coords[i][0])
+
+        return m
+
+    def maxX(self):
+        m = self.coords[0][0]
+        for i in range(4):
+            m = max(m, self.coords[i][0])
+
+        return m
+
+    def minY(self):
+        m = self.coords[0][1]
+        for i in range(4):
+            m = min(m, self.coords[i][1])
+
+        return m
+
+    def maxY(self):
+        m = self.coords[0][1]
+        for i in range(4):
+            m = max(m, self.coords[i][1])
+
+        return m
+
+    def rotatedLeft(self):
+        if self.pieceShape == SquareShape:
+            return self
+
+        result = TetrixPiece()
+        result.pieceShape = self.pieceShape
+        for i in range(4):
+            result.setX(i, self.y(i))
+            result.setY(i, -self.x(i))
+
+        return result
+
+    def rotatedRight(self):
+        if self.pieceShape == SquareShape:
+            return self
+
+        result = TetrixPiece()
+        result.pieceShape = self.pieceShape
+        for i in range(4):
+            result.setX(i, -self.y(i))
+            result.setY(i, self.x(i))
+
+        return result
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = TetrixWindow()
+    window.show()
+    random.seed(None)
+    sys.exit(app.exec_())
diff --git a/examples/widgets/tooltips/images/circle.png b/examples/widgets/tooltips/images/circle.png
new file mode 100644
index 0000000..dc392cb
Binary files /dev/null and b/examples/widgets/tooltips/images/circle.png differ
diff --git a/examples/widgets/tooltips/images/square.png b/examples/widgets/tooltips/images/square.png
new file mode 100644
index 0000000..c0fd2d5
Binary files /dev/null and b/examples/widgets/tooltips/images/square.png differ
diff --git a/examples/widgets/tooltips/images/triangle.png b/examples/widgets/tooltips/images/triangle.png
new file mode 100644
index 0000000..2ee15f8
Binary files /dev/null and b/examples/widgets/tooltips/images/triangle.png differ
diff --git a/examples/widgets/tooltips/tooltips.py b/examples/widgets/tooltips/tooltips.py
new file mode 100755
index 0000000..e4e26f8
--- /dev/null
+++ b/examples/widgets/tooltips/tooltips.py
@@ -0,0 +1,278 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+import random
+
+from PyQt5.QtCore import QEvent, QPoint, QPointF, QSize, Qt
+from PyQt5.QtGui import QColor, QIcon, QPainter, QPainterPath, QPalette
+from PyQt5.QtWidgets import (QApplication, QStyle, QToolButton, QToolTip,
+        QWidget)
+
+import tooltips_rc
+
+
+class ShapeItem(object):
+    def __init__(self):    
+        self.myPath = QPainterPath()
+        self.myPosition = QPoint()
+        self.myColor  = QColor()
+        self.myToolTip = ''
+
+    def path(self):
+        return self.myPath
+
+    def position(self):
+        return self.myPosition
+
+    def color(self):
+        return self.myColor
+
+    def toolTip(self):
+        return self.myToolTip
+
+    def setPath(self, path):
+        self.myPath = path
+
+    def setToolTip(self, toolTip):
+        self.myToolTip = toolTip
+
+    def setPosition(self, position):
+        self.myPosition = position
+
+    def setColor(self, color):
+        self.myColor = color
+
+
+class SortingBox(QWidget):
+    circle_count = square_count = triangle_count = 1
+
+    def __init__(self):
+        super(SortingBox, self).__init__()
+
+        self.circlePath = QPainterPath()
+        self.squarePath = QPainterPath()
+        self.trianglePath = QPainterPath()
+        self.shapeItems = []        
+
+        self.previousPosition = QPoint()
+
+        self.setMouseTracking(True)
+        self.setBackgroundRole(QPalette.Base)
+
+        self.itemInMotion = None
+
+        self.newCircleButton = self.createToolButton("New Circle",
+                QIcon(':/images/circle.png'), self.createNewCircle)
+        self.newSquareButton = self.createToolButton("New Square",
+                QIcon(':/images/square.png'), self.createNewSquare)
+        self.newTriangleButton = self.createToolButton("New Triangle",
+                QIcon(':/images/triangle.png'), self.createNewTriangle)
+
+        self.circlePath.addEllipse(0, 0, 100, 100)
+        self.squarePath.addRect(0, 0, 100, 100)
+
+        x = self.trianglePath.currentPosition().x()
+        y = self.trianglePath.currentPosition().y()
+        self.trianglePath.moveTo(x + 120 / 2, y)
+        self.trianglePath.lineTo(0, 100)
+        self.trianglePath.lineTo(120, 100)
+        self.trianglePath.lineTo(x + 120 / 2, y)
+
+        self.setWindowTitle("Tooltips")
+        self.resize(500, 300)
+
+        self.createShapeItem(self.circlePath, "Circle",
+                self.initialItemPosition(self.circlePath),
+                self.initialItemColor())
+        self.createShapeItem(self.squarePath, "Square",
+                self.initialItemPosition(self.squarePath),
+                self.initialItemColor())
+        self.createShapeItem(self.trianglePath, "Triangle",
+                self.initialItemPosition(self.trianglePath),
+                self.initialItemColor())
+
+    def event(self, event):
+        if event.type() == QEvent.ToolTip:
+            helpEvent = event
+            index = self.itemAt(helpEvent.pos())
+            if index != -1:
+                QToolTip.showText(helpEvent.globalPos(),
+                        self.shapeItems[index].toolTip())
+            else:
+                QToolTip.hideText()
+                event.ignore()
+
+            return True
+
+        return super(SortingBox, self).event(event)
+
+    def resizeEvent(self, event):
+        margin = self.style().pixelMetric(QStyle.PM_DefaultTopLevelMargin)
+        x = self.width() - margin
+        y = self.height() - margin
+
+        y = self.updateButtonGeometry(self.newCircleButton, x, y)
+        y = self.updateButtonGeometry(self.newSquareButton, x, y)
+        self.updateButtonGeometry(self.newTriangleButton, x, y)
+
+    def paintEvent(self, event):
+        painter = QPainter(self)
+        painter.setRenderHint(QPainter.Antialiasing)
+        for shapeItem in self.shapeItems:
+            painter.translate(shapeItem.position())
+            painter.setBrush(shapeItem.color())
+            painter.drawPath(shapeItem.path())
+            painter.translate(-shapeItem.position())
+
+    def mousePressEvent(self, event):
+        if event.button() == Qt.LeftButton:
+            index = self.itemAt(event.pos())
+            if index != -1:
+                self.itemInMotion = self.shapeItems[index]
+                self.previousPosition = event.pos()
+
+                value = self.shapeItems[index]
+                del self.shapeItems[index]
+                self.shapeItems.insert(len(self.shapeItems) - 1, value)
+
+                self.update()
+
+    def mouseMoveEvent(self, event):
+        if (event.buttons() & Qt.LeftButton) and self.itemInMotion:
+            self.moveItemTo(event.pos())
+
+    def mouseReleaseEvent(self, event):
+        if (event.button() == Qt.LeftButton) and self.itemInMotion:
+            self.moveItemTo(event.pos())
+            self.itemInMotion = None
+
+    def createNewCircle(self):
+        SortingBox.circle_count += 1
+        self.createShapeItem(self.circlePath,
+                "Circle <%d>" % SortingBox.circle_count,
+                self.randomItemPosition(), self.randomItemColor())
+
+    def createNewSquare(self):
+        SortingBox.square_count += 1
+        self.createShapeItem(self.squarePath,
+                "Square <%d>" % SortingBox.square_count,
+                self.randomItemPosition(), self.randomItemColor())
+
+    def createNewTriangle(self):
+        SortingBox.triangle_count += 1
+        self.createShapeItem(self.trianglePath,
+                "Triangle <%d>" % SortingBox.triangle_count,
+                self.randomItemPosition(), self.randomItemColor())
+
+    def itemAt(self, pos):
+        for i in range(len(self.shapeItems) - 1, -1, -1):
+            item = self.shapeItems[i]
+            if item.path().contains(QPointF(pos - item.position())):
+                return i
+
+        return -1
+
+    def moveItemTo(self, pos):
+        offset = pos - self.previousPosition
+        self.itemInMotion.setPosition(self.itemInMotion.position() + offset)
+        self.previousPosition = QPoint(pos)
+        self.update()
+
+    def updateButtonGeometry(self, button, x, y):
+        size = button.sizeHint()
+        button.setGeometry(x - size.width(), y - size.height(),
+                size.width(), size.height())
+
+        return y - size.height() - self.style().pixelMetric(QStyle.PM_DefaultLayoutSpacing)
+
+    def createShapeItem(self, path, toolTip, pos, color):
+        shapeItem = ShapeItem()
+        shapeItem.setPath(path)
+        shapeItem.setToolTip(toolTip)
+        shapeItem.setPosition(pos)
+        shapeItem.setColor(color)
+        self.shapeItems.append(shapeItem)
+        self.update()
+
+    def createToolButton(self, toolTip, icon, member):
+        button = QToolButton(self)
+        button.setToolTip(toolTip)
+        button.setIcon(icon)
+        button.setIconSize(QSize(32, 32))
+        button.clicked.connect(member)
+
+        return button
+
+    def initialItemPosition(self, path):
+        y = (self.height() - path.controlPointRect().height()) / 2
+
+        if len(self.shapeItems) == 0:
+            x = ((3 * self.width()) / 2 - path.controlPointRect().width()) / 2
+        else:
+            x = (self.width() / len(self.shapeItems) - path.controlPointRect().width()) / 2
+
+        return QPoint(x, y)
+
+    def randomItemPosition(self):
+        x = random.randint(0, self.width() - 120)
+        y = random.randint(0, self.height() - 120)
+
+        return QPoint(x, y)
+
+    def initialItemColor(self):
+        hue = ((len(self.shapeItems) + 1) * 85) % 256
+        return QColor.fromHsv(hue, 255, 190)
+
+    def randomItemColor(self):
+        return QColor.fromHsv(random.randint(0, 256), 255, 190)
+
+
+if __name__ == "__main__":
+
+    import sys
+
+    app = QApplication(sys.argv)
+    sortingBox = SortingBox()
+    sortingBox.show()
+    sys.exit(app.exec_())
diff --git a/examples/widgets/tooltips/tooltips.qrc b/examples/widgets/tooltips/tooltips.qrc
new file mode 100644
index 0000000..dabc894
--- /dev/null
+++ b/examples/widgets/tooltips/tooltips.qrc
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+   <file>images/circle.png</file>
+   <file>images/square.png</file>
+   <file>images/triangle.png</file>
+</qresource>
+</RCC>
diff --git a/examples/widgets/tooltips/tooltips_rc.py b/examples/widgets/tooltips/tooltips_rc.py
new file mode 100644
index 0000000..9d8cba4
--- /dev/null
+++ b/examples/widgets/tooltips/tooltips_rc.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Wed May 15 13:21:51 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x00\x5e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x01\x03\x00\x00\x00\x49\xb4\xe8\xb7\
+\x00\x00\x00\x06\x50\x4c\x54\x45\x00\x00\x00\x58\xa8\xff\x8c\x14\
+\x1f\xab\x00\x00\x00\x13\x49\x44\x41\x54\x08\xd7\x63\x60\x00\x81\
+\xfa\xff\xff\xff\x0d\x3e\x02\x04\x00\x8d\x4d\x68\x6b\xcf\xb8\x8e\
+\x86\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xaa\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x71\x49\x44\x41\x54\x58\xc3\xed\xce\x4b\x0a\x80\x30\
+\x10\x04\xd1\x1c\xd3\x23\x7a\xcb\x11\x82\xb8\x50\x62\x92\xf9\xd5\
+\x66\x1a\x7a\x5d\xaf\xb5\x5a\xcd\x36\xb9\xcf\xc4\x8f\x53\xfa\x09\
+\xc4\x13\xa7\x10\x28\xe0\x13\xcf\x44\x0c\xe3\x59\x08\x14\x30\x8d\
+\x47\x23\x50\xc0\x72\x3c\x02\xb1\x1d\xf7\x46\xa0\x00\x75\xdc\x03\
+\x61\x8e\x5b\x11\x28\xc0\x2d\xae\x45\xa0\x00\xf7\xf8\x0e\x22\x2c\
+\xbe\x8a\x40\x01\xe1\xf1\x3f\x44\x5a\x7c\x84\x40\x01\xe9\xf1\x37\
+\x42\xe0\xd7\xd8\x5d\x0f\x6f\x97\x11\x88\x38\xa9\x1e\x00\x00\x00\
+\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa5\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\
+\x00\x00\x00\x6c\x49\x44\x41\x54\x58\xc3\xed\xd7\x5b\x0e\x00\x10\
+\x0c\x44\x51\xcb\xb4\x44\xbb\x64\x03\x1e\xd5\x18\x1d\x31\x12\xdf\
+\xf7\x7c\xd1\xa6\xf4\xe8\xa9\x93\x8b\x8f\xe6\x52\x87\x17\x81\x59\
+\x46\x0d\x18\x7f\xdc\x13\x1e\x40\x62\xe2\x5e\xc4\xd1\xf8\x2e\x02\
+\x12\xb7\x22\xa0\x71\x0b\x22\x14\x70\x25\x3e\x43\xfc\x0d\xb8\x1a\
+\xef\x21\x04\x10\x40\x00\x3d\x44\x14\x00\x7d\xc7\x14\x13\x11\xc5\
+\x4c\x48\x31\x15\x53\xec\x05\x14\x9b\x11\xc5\x6e\x08\xdd\x8e\x1b\
+\x14\x54\x19\xf3\xa1\x23\xdb\xd5\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+"
+
+qt_resource_name = b"\
+\x00\x06\
+\x07\x03\x7d\xc3\
+\x00\x69\
+\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
+\x00\x0a\
+\x08\x8b\x06\x27\
+\x00\x73\
+\x00\x71\x00\x75\x00\x61\x00\x72\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0c\
+\x05\x59\xa7\xc7\
+\x00\x74\
+\x00\x72\x00\x69\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x0a\x2d\x16\x47\
+\x00\x63\
+\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x02\
+\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x62\
+\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x01\x10\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/widgets/wiggly.py b/examples/widgets/wiggly.py
new file mode 100755
index 0000000..06ad8bf
--- /dev/null
+++ b/examples/widgets/wiggly.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QBasicTimer
+from PyQt5.QtGui import QColor, QFontMetrics, QPainter, QPalette
+from PyQt5.QtWidgets import (QApplication, QDialog, QLineEdit, QVBoxLayout,
+        QWidget)
+
+
+class WigglyWidget(QWidget):
+    def __init__(self, parent=None):
+        super(WigglyWidget, self).__init__(parent)
+
+        self.setBackgroundRole(QPalette.Midlight)
+        self.setAutoFillBackground(True)
+
+        newFont = self.font()
+        newFont.setPointSize(newFont.pointSize() + 20)
+        self.setFont(newFont)
+
+        self.timer = QBasicTimer()
+        self.text = ''
+
+        self.step = 0;
+        self.timer.start(60, self)   
+
+    def paintEvent(self, event):
+        sineTable = (0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71, -38)
+
+        metrics = QFontMetrics(self.font())
+        x = (self.width() - metrics.width(self.text)) / 2
+        y = (self.height() + metrics.ascent() - metrics.descent()) / 2
+        color = QColor()
+
+        painter = QPainter(self)
+
+        for i, ch in enumerate(self.text):
+            index = (self.step + i) % 16
+            color.setHsv((15 - index) * 16, 255, 191)
+            painter.setPen(color)
+            painter.drawText(x, y - ((sineTable[index] * metrics.height()) / 400), ch)
+            x += metrics.width(ch)
+
+    def setText(self, newText):
+        self.text = newText
+
+    def timerEvent(self, event):
+        if event.timerId() == self.timer.timerId():
+            self.step += 1
+            self.update()
+        else:
+            super(WigglyWidget, self).timerEvent(event)
+
+
+class Dialog(QDialog):
+    def __init__(self, parent=None):
+        super(Dialog, self).__init__(parent)
+
+        wigglyWidget = WigglyWidget()
+        lineEdit = QLineEdit()
+
+        layout = QVBoxLayout()
+        layout.addWidget(wigglyWidget)
+        layout.addWidget(lineEdit)
+        self.setLayout(layout)
+
+        lineEdit.textChanged.connect(wigglyWidget.setText)
+
+        lineEdit.setText("Hello world!")
+
+        self.setWindowTitle("Wiggly")
+        self.resize(360, 145)
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    dialog = Dialog()
+    dialog.show();
+    sys.exit(app.exec_())    
diff --git a/examples/widgets/windowflags.py b/examples/widgets/windowflags.py
new file mode 100755
index 0000000..3b4bb7f
--- /dev/null
+++ b/examples/widgets/windowflags.py
@@ -0,0 +1,283 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import (QApplication, QCheckBox, QGridLayout, QGroupBox,
+        QHBoxLayout, QPushButton, QRadioButton, QTextEdit, QVBoxLayout,
+        QWidget)
+
+
+class PreviewWindow(QWidget):
+    def __init__(self, parent=None):
+        super(PreviewWindow, self).__init__(parent)
+
+        self.textEdit = QTextEdit()
+        self.textEdit.setReadOnly(True)
+        self.textEdit.setLineWrapMode(QTextEdit.NoWrap)
+
+        closeButton = QPushButton("&Close")
+        closeButton.clicked.connect(self.close)
+
+        layout = QVBoxLayout()
+        layout.addWidget(self.textEdit)
+        layout.addWidget(closeButton)
+        self.setLayout(layout)
+
+        self.setWindowTitle("Preview")
+
+    def setWindowFlags(self, flags):
+        super(PreviewWindow, self).setWindowFlags(flags)
+
+        flag_type = (flags & Qt.WindowType_Mask)
+
+        if flag_type == Qt.Window:
+            text = "Qt.Window"
+        elif flag_type == Qt.Dialog:
+            text = "Qt.Dialog"
+        elif flag_type == Qt.Sheet:
+            text = "Qt.Sheet"
+        elif flag_type == Qt.Drawer:
+            text = "Qt.Drawer"
+        elif flag_type == Qt.Popup:
+            text = "Qt.Popup"
+        elif flag_type == Qt.Tool:
+            text = "Qt.Tool"
+        elif flag_type == Qt.ToolTip:
+            text = "Qt.ToolTip"
+        elif flag_type == Qt.SplashScreen:
+            text = "Qt.SplashScreen"
+        else:
+            text = ""
+
+        if flags & Qt.MSWindowsFixedSizeDialogHint:
+            text += "\n| Qt.MSWindowsFixedSizeDialogHint"
+        if flags & Qt.X11BypassWindowManagerHint:
+            text += "\n| Qt.X11BypassWindowManagerHint"
+        if flags & Qt.FramelessWindowHint:
+            text += "\n| Qt.FramelessWindowHint"
+        if flags & Qt.WindowTitleHint:
+            text += "\n| Qt.WindowTitleHint"
+        if flags & Qt.WindowSystemMenuHint:
+            text += "\n| Qt.WindowSystemMenuHint"
+        if flags & Qt.WindowMinimizeButtonHint:
+            text += "\n| Qt.WindowMinimizeButtonHint"
+        if flags & Qt.WindowMaximizeButtonHint:
+            text += "\n| Qt.WindowMaximizeButtonHint"
+        if flags & Qt.WindowCloseButtonHint:
+            text += "\n| Qt.WindowCloseButtonHint"
+        if flags & Qt.WindowContextHelpButtonHint:
+            text += "\n| Qt.WindowContextHelpButtonHint"
+        if flags & Qt.WindowShadeButtonHint:
+            text += "\n| Qt.WindowShadeButtonHint"
+        if flags & Qt.WindowStaysOnTopHint:
+            text += "\n| Qt.WindowStaysOnTopHint"
+        if flags & Qt.WindowStaysOnBottomHint:
+            text += "\n| Qt.WindowStaysOnBottomHint"
+        if flags & Qt.CustomizeWindowHint:
+            text += "\n| Qt.CustomizeWindowHint"
+
+        self.textEdit.setPlainText(text)
+
+
+class ControllerWindow(QWidget):
+    def __init__(self):
+        super(ControllerWindow, self).__init__()
+
+        self.previewWindow = PreviewWindow(self)
+
+        self.createTypeGroupBox()
+        self.createHintsGroupBox()
+
+        quitButton = QPushButton("&Quit")
+        quitButton.clicked.connect(self.close)
+
+        bottomLayout = QHBoxLayout()
+        bottomLayout.addStretch()
+        bottomLayout.addWidget(quitButton)
+
+        mainLayout = QVBoxLayout()
+        mainLayout.addWidget(self.typeGroupBox)
+        mainLayout.addWidget(self.hintsGroupBox)
+        mainLayout.addLayout(bottomLayout)
+        self.setLayout(mainLayout)
+
+        self.setWindowTitle("Window Flags")
+        self.updatePreview()
+
+    def updatePreview(self):
+        flags = Qt.WindowFlags()
+
+        if self.windowRadioButton.isChecked():
+            flags = Qt.Window
+        elif self.dialogRadioButton.isChecked():
+            flags = Qt.Dialog
+        elif self.sheetRadioButton.isChecked():
+            flags = Qt.Sheet
+        elif self.drawerRadioButton.isChecked():
+            flags = Qt.Drawer
+        elif self.popupRadioButton.isChecked():
+            flags = Qt.Popup
+        elif self.toolRadioButton.isChecked():
+            flags = Qt.Tool
+        elif self.toolTipRadioButton.isChecked():
+            flags = Qt.ToolTip
+        elif self.splashScreenRadioButton.isChecked():
+            flags = Qt.SplashScreen
+
+        if self.msWindowsFixedSizeDialogCheckBox.isChecked():
+            flags |= Qt.MSWindowsFixedSizeDialogHint            
+        if self.x11BypassWindowManagerCheckBox.isChecked():
+            flags |= Qt.X11BypassWindowManagerHint
+        if self.framelessWindowCheckBox.isChecked():
+            flags |= Qt.FramelessWindowHint
+        if self.windowTitleCheckBox.isChecked():
+            flags |= Qt.WindowTitleHint
+        if self.windowSystemMenuCheckBox.isChecked():
+            flags |= Qt.WindowSystemMenuHint
+        if self.windowMinimizeButtonCheckBox.isChecked():
+            flags |= Qt.WindowMinimizeButtonHint
+        if self.windowMaximizeButtonCheckBox.isChecked():
+            flags |= Qt.WindowMaximizeButtonHint
+        if self.windowCloseButtonCheckBox.isChecked():
+            flags |= Qt.WindowCloseButtonHint
+        if self.windowContextHelpButtonCheckBox.isChecked():
+            flags |= Qt.WindowContextHelpButtonHint
+        if self.windowShadeButtonCheckBox.isChecked():
+            flags |= Qt.WindowShadeButtonHint
+        if self.windowStaysOnTopCheckBox.isChecked():
+            flags |= Qt.WindowStaysOnTopHint
+        if self.windowStaysOnBottomCheckBox.isChecked():
+            flags |= Qt.WindowStaysOnBottomHint
+        if self.customizeWindowHintCheckBox.isChecked():
+            flags |= Qt.CustomizeWindowHint
+
+        self.previewWindow.setWindowFlags(flags)
+
+        pos = self.previewWindow.pos()
+
+        if pos.x() < 0:
+            pos.setX(0)
+
+        if pos.y() < 0:
+            pos.setY(0)
+
+        self.previewWindow.move(pos)
+        self.previewWindow.show()
+
+    def createTypeGroupBox(self):
+        self.typeGroupBox = QGroupBox("Type")
+
+        self.windowRadioButton = self.createRadioButton("Window")
+        self.dialogRadioButton = self.createRadioButton("Dialog")
+        self.sheetRadioButton = self.createRadioButton("Sheet")
+        self.drawerRadioButton = self.createRadioButton("Drawer")
+        self.popupRadioButton = self.createRadioButton("Popup")
+        self.toolRadioButton = self.createRadioButton("Tool")
+        self.toolTipRadioButton = self.createRadioButton("Tooltip")
+        self.splashScreenRadioButton = self.createRadioButton("Splash screen")
+        self.windowRadioButton.setChecked(True)
+
+        layout = QGridLayout()
+        layout.addWidget(self.windowRadioButton, 0, 0)
+        layout.addWidget(self.dialogRadioButton, 1, 0)
+        layout.addWidget(self.sheetRadioButton, 2, 0)
+        layout.addWidget(self.drawerRadioButton, 3, 0)
+        layout.addWidget(self.popupRadioButton, 0, 1)
+        layout.addWidget(self.toolRadioButton, 1, 1)
+        layout.addWidget(self.toolTipRadioButton, 2, 1)
+        layout.addWidget(self.splashScreenRadioButton, 3, 1)
+        self.typeGroupBox.setLayout(layout)
+
+    def createHintsGroupBox(self):
+        self.hintsGroupBox = QGroupBox("Hints")
+
+        self.msWindowsFixedSizeDialogCheckBox = self.createCheckBox("MS Windows fixed size dialog")
+        self.x11BypassWindowManagerCheckBox = self.createCheckBox("X11 bypass window manager")
+        self.framelessWindowCheckBox = self.createCheckBox("Frameless window")
+        self.windowTitleCheckBox = self.createCheckBox("Window title")
+        self.windowSystemMenuCheckBox = self.createCheckBox("Window system menu")
+        self.windowMinimizeButtonCheckBox = self.createCheckBox("Window minimize button")
+        self.windowMaximizeButtonCheckBox = self.createCheckBox("Window maximize button")
+        self.windowCloseButtonCheckBox = self.createCheckBox("Window close button")
+        self.windowContextHelpButtonCheckBox = self.createCheckBox("Window context help button")
+        self.windowShadeButtonCheckBox = self.createCheckBox("Window shade button")
+        self.windowStaysOnTopCheckBox = self.createCheckBox("Window stays on top")
+        self.windowStaysOnBottomCheckBox = self.createCheckBox("Window stays on bottom")
+        self.customizeWindowHintCheckBox = self.createCheckBox("Customize window")
+
+        layout = QGridLayout()
+        layout.addWidget(self.msWindowsFixedSizeDialogCheckBox, 0, 0)
+        layout.addWidget(self.x11BypassWindowManagerCheckBox, 1, 0)
+        layout.addWidget(self.framelessWindowCheckBox, 2, 0)
+        layout.addWidget(self.windowTitleCheckBox, 3, 0)
+        layout.addWidget(self.windowSystemMenuCheckBox, 4, 0)
+        layout.addWidget(self.windowMinimizeButtonCheckBox, 0, 1)
+        layout.addWidget(self.windowMaximizeButtonCheckBox, 1, 1)
+        layout.addWidget(self.windowCloseButtonCheckBox, 2, 1)
+        layout.addWidget(self.windowContextHelpButtonCheckBox, 3, 1)
+        layout.addWidget(self.windowShadeButtonCheckBox, 4, 1)
+        layout.addWidget(self.windowStaysOnTopCheckBox, 5, 1)
+        layout.addWidget(self.windowStaysOnBottomCheckBox, 6, 1)
+        layout.addWidget(self.customizeWindowHintCheckBox, 5, 0)
+        self.hintsGroupBox.setLayout(layout)
+
+    def createCheckBox(self, text):
+        checkBox = QCheckBox(text)
+        checkBox.clicked.connect(self.updatePreview)
+        return checkBox
+
+    def createRadioButton(self, text):
+        button = QRadioButton(text)
+        button.clicked.connect(self.updatePreview)
+        return button
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    controller = ControllerWindow()
+    controller.show()
+    sys.exit(app.exec_())
diff --git a/examples/xmlpatterns/README b/examples/xmlpatterns/README
new file mode 100644
index 0000000..77151ea
--- /dev/null
+++ b/examples/xmlpatterns/README
@@ -0,0 +1,24 @@
+XQuery queries and XPath expressions can be used in PyQt with the QtXmlPatterns
+module.
+
+XQuery is a query language used to query XML in a concise and safe manner.
+
+The example launcher provided with PyQt can be used to explore each of the
+examples in this directory.
+
+Documentation for these examples can be found via the Tutorial and Examples
+link in the main Qt documentation.
+
+
+Finding the PyQt Examples and Demos launcher
+============================================
+
+On Windows:
+
+The launcher can be accessed via the Windows Start menu. Select the menu
+entry entitled "Examples and Demos" entry in the submenu containing PyQt5.
+
+On all platforms:
+
+The source code for the launcher can be found in the examples/demos/qtdemo
+directory in the PyQt package.
diff --git a/examples/xmlpatterns/schema/files/contact.xsd b/examples/xmlpatterns/schema/files/contact.xsd
new file mode 100644
index 0000000..3e1b570
--- /dev/null
+++ b/examples/xmlpatterns/schema/files/contact.xsd
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+    <xsd:element name="contact">
+        <xsd:complexType>
+            <xsd:sequence>
+                <xsd:element name="givenName" type="xsd:string"/>
+                <xsd:element name="familyName" type="xsd:string"/>
+                <xsd:element name="birthdate" type="xsd:date" minOccurs="0"/>
+                <xsd:element name="homeAddress" type="address"/>
+                <xsd:element name="workAddress" type="address" minOccurs="0"/>
+            </xsd:sequence>
+        </xsd:complexType>
+    </xsd:element>
+
+    <xsd:complexType name="address">
+        <xsd:sequence>
+            <xsd:element name="street" type="xsd:string"/>
+            <xsd:element name="zipCode" type="xsd:string"/>
+            <xsd:element name="city" type="xsd:string"/>
+            <xsd:element name="country" type="xsd:string"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+</xsd:schema>
diff --git a/examples/xmlpatterns/schema/files/invalid_contact.xml b/examples/xmlpatterns/schema/files/invalid_contact.xml
new file mode 100644
index 0000000..42f1edd
--- /dev/null
+++ b/examples/xmlpatterns/schema/files/invalid_contact.xml
@@ -0,0 +1,11 @@
+<contact>
+    <givenName>John</givenName>
+    <familyName>Doe</familyName>
+    <title>Prof.</title>
+    <workAddress>
+        <street>Sandakerveien 116</street>
+        <zipCode>N-0550</zipCode>
+        <city>Oslo</city>
+        <country>Norway</country>
+    </workAddress>
+</contact>
diff --git a/examples/xmlpatterns/schema/files/invalid_order.xml b/examples/xmlpatterns/schema/files/invalid_order.xml
new file mode 100644
index 0000000..8ffc5fd
--- /dev/null
+++ b/examples/xmlpatterns/schema/files/invalid_order.xml
@@ -0,0 +1,13 @@
+<order>
+    <customerId>234219</customerId>
+    <article>
+        <articleId>21692</articleId>
+        <count>3</count>
+    </article>
+    <article>
+        <articleId>24749</articleId>
+        <count>9</count>
+    </article>
+    <deliveryDate>2009-01-23</deliveryDate>
+    <payed>yes</payed>
+</order>
diff --git a/examples/xmlpatterns/schema/files/invalid_recipe.xml b/examples/xmlpatterns/schema/files/invalid_recipe.xml
new file mode 100644
index 0000000..4d75af6
--- /dev/null
+++ b/examples/xmlpatterns/schema/files/invalid_recipe.xml
@@ -0,0 +1,14 @@
+<recipe>
+    <title>Cheese on Toast</title>
+    <ingredient name="Bread" quantity="2" unit="slices"/>
+    <ingredient name="Cheese" quantity="2" unit="slices"/>
+    <time quantity="3" unit="days"/>
+    <method>
+        <step>1. Slice the bread and cheese.</step>
+        <step>2. Grill one side of each slice of bread.</step>
+        <step>3. Turn over the bread and place a slice of cheese on each piece.</step>
+        <step>4. Grill until the cheese has started to melt.</step>
+        <step>5. Serve and enjoy!</step>
+    </method>
+    <comment>Tell your friends about it!</comment>
+</recipe>
diff --git a/examples/xmlpatterns/schema/files/order.xsd b/examples/xmlpatterns/schema/files/order.xsd
new file mode 100644
index 0000000..405cafe
--- /dev/null
+++ b/examples/xmlpatterns/schema/files/order.xsd
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+    <xsd:element name="order">
+        <xsd:complexType>
+            <xsd:sequence>
+                <xsd:element name="customerId" type="xsd:positiveInteger"/>
+                <xsd:element name="article" type="articleType" maxOccurs="unbounded"/>
+                <xsd:element name="deliveryDate" type="xsd:date"/>
+                <xsd:element name="payed" type="xsd:boolean"/>
+            </xsd:sequence>
+        </xsd:complexType>
+    </xsd:element>
+
+    <xsd:complexType name="articleType">
+        <xsd:sequence>
+            <xsd:element name="articleId" type="xsd:positiveInteger"/>
+            <xsd:element name="count" type="xsd:positiveInteger"/>
+            <xsd:element name="comment" type="xsd:string" minOccurs="0"/>
+        </xsd:sequence>
+    </xsd:complexType>
+
+</xsd:schema>
diff --git a/examples/xmlpatterns/schema/files/recipe.xsd b/examples/xmlpatterns/schema/files/recipe.xsd
new file mode 100644
index 0000000..bbbafd9
--- /dev/null
+++ b/examples/xmlpatterns/schema/files/recipe.xsd
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+    <xsd:element name="recipe">
+        <xsd:complexType>
+            <xsd:sequence>
+                <xsd:element name="title" type="xsd:string"/>
+                <xsd:element name="ingredient" type="ingredientType" maxOccurs="unbounded"/>
+                <xsd:element name="time" type="timeType"/>
+                <xsd:element name="method">
+                    <xsd:complexType>
+                        <xsd:sequence>
+                            <xsd:element name="step" type="xsd:string" maxOccurs="unbounded"/>
+                        </xsd:sequence>
+                    </xsd:complexType>
+                </xsd:element>
+            </xsd:sequence>
+        </xsd:complexType>
+    </xsd:element>
+
+    <xsd:complexType name="ingredientType">
+        <xsd:attribute name="name" type="xsd:string"/>
+        <xsd:attribute name="quantity" type="xsd:positiveInteger"/>
+        <xsd:attribute name="unit" type="xsd:string"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="timeType">
+        <xsd:attribute name="quantity" type="xsd:positiveInteger"/>
+        <xsd:attribute name="unit">
+            <xsd:simpleType>
+                <xsd:restriction base="xsd:string">
+                    <xsd:enumeration value="seconds"/>
+                    <xsd:enumeration value="minutes"/>
+                    <xsd:enumeration value="hours"/>
+                </xsd:restriction>
+            </xsd:simpleType>
+        </xsd:attribute>
+    </xsd:complexType>
+
+</xsd:schema>
diff --git a/examples/xmlpatterns/schema/files/valid_contact.xml b/examples/xmlpatterns/schema/files/valid_contact.xml
new file mode 100644
index 0000000..53c04d4
--- /dev/null
+++ b/examples/xmlpatterns/schema/files/valid_contact.xml
@@ -0,0 +1,11 @@
+<contact>
+    <givenName>John</givenName>
+    <familyName>Doe</familyName>
+    <birthdate>1977-12-25</birthdate>
+    <homeAddress>
+        <street>Sandakerveien 116</street>
+        <zipCode>N-0550</zipCode>
+        <city>Oslo</city>
+        <country>Norway</country>
+    </homeAddress>
+</contact>
diff --git a/examples/xmlpatterns/schema/files/valid_order.xml b/examples/xmlpatterns/schema/files/valid_order.xml
new file mode 100644
index 0000000..f83c36c
--- /dev/null
+++ b/examples/xmlpatterns/schema/files/valid_order.xml
@@ -0,0 +1,18 @@
+<order>
+    <customerId>194223</customerId>
+    <article>
+        <articleId>22242</articleId>
+        <count>5</count>
+    </article>
+    <article>
+        <articleId>32372</articleId>
+        <count>12</count>
+        <comment>without stripes</comment>
+    </article>
+    <article>
+        <articleId>23649</articleId>
+        <count>2</count>
+    </article>
+    <deliveryDate>2009-01-23</deliveryDate>
+    <payed>true</payed>
+</order>
diff --git a/examples/xmlpatterns/schema/files/valid_recipe.xml b/examples/xmlpatterns/schema/files/valid_recipe.xml
new file mode 100644
index 0000000..f6499ba
--- /dev/null
+++ b/examples/xmlpatterns/schema/files/valid_recipe.xml
@@ -0,0 +1,13 @@
+<recipe>
+    <title>Cheese on Toast</title>
+    <ingredient name="Bread" quantity="2" unit="slices"/>
+    <ingredient name="Cheese" quantity="2" unit="slices"/>
+    <time quantity="3" unit="minutes"/>
+    <method>
+        <step>1. Slice the bread and cheese.</step>
+        <step>2. Grill one side of each slice of bread.</step>
+        <step>3. Turn over the bread and place a slice of cheese on each piece.</step>
+        <step>4. Grill until the cheese has started to melt.</step>
+        <step>5. Serve and enjoy!</step>
+    </method>
+</recipe>
diff --git a/examples/xmlpatterns/schema/schema.py b/examples/xmlpatterns/schema/schema.py
new file mode 100755
index 0000000..90f3771
--- /dev/null
+++ b/examples/xmlpatterns/schema/schema.py
@@ -0,0 +1,275 @@
+#!/usr/bin/env python
+
+
+#############################################################################
+##
+## Copyright (C) 2013 Riverbank Computing Limited.
+## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+## All rights reserved.
+##
+## This file is part of the examples of PyQt.
+##
+## $QT_BEGIN_LICENSE:BSD$
+## You may use this file under the terms of the BSD license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+##     the names of its contributors may be used to endorse or promote
+##     products derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+
+from PyQt5.QtCore import QByteArray, QFile, QRegExp, Qt
+from PyQt5.QtGui import (QColor, QFont, QSyntaxHighlighter, QTextCharFormat,
+        QTextCursor, QTextFormat)
+from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit
+from PyQt5.QtXmlPatterns import (QAbstractMessageHandler, QSourceLocation,
+        QXmlSchema, QXmlSchemaValidator)
+
+import schema_rc
+from ui_schema import Ui_SchemaMainWindow
+
+
+def encode_utf8(ba):
+    try:
+        return unicode(ba, encoding='utf8')
+    except NameError:
+        return str(ba, encoding='utf8')
+
+
+def decode_utf8(qs):
+    try:
+        return QByteArray(qs.decode(encoding='utf8'))
+    except AttributeError:
+        return QByteArray(bytes(qs, encoding='utf8'))
+
+
+class XmlSyntaxHighlighter(QSyntaxHighlighter):
+
+    def __init__(self, parent=None):
+        super(XmlSyntaxHighlighter, self).__init__(parent)
+
+        self.highlightingRules = []
+
+        # Tag format.
+        format = QTextCharFormat()
+        format.setForeground(Qt.darkBlue)
+        format.setFontWeight(QFont.Bold)
+        pattern = QRegExp("(<[a-zA-Z:]+\\b|<\\?[a-zA-Z:]+\\b|\\?>|>|/>|</[a-zA-Z:]+>)")
+        self.highlightingRules.append((pattern, format))
+
+        # Attribute format.
+        format = QTextCharFormat()
+        format.setForeground(Qt.darkGreen)
+        pattern = QRegExp("[a-zA-Z:]+=")
+        self.highlightingRules.append((pattern, format))
+
+        # Attribute content format.
+        format = QTextCharFormat()
+        format.setForeground(Qt.red)
+        pattern = QRegExp("(\"[^\"]*\"|'[^']*')")
+        self.highlightingRules.append((pattern, format))
+
+        # Comment format.
+        self.commentFormat = QTextCharFormat()
+        self.commentFormat.setForeground(Qt.lightGray)
+        self.commentFormat.setFontItalic(True)
+
+        self.commentStartExpression = QRegExp("<!--")
+        self.commentEndExpression = QRegExp("-->")
+
+    def highlightBlock(self, text):
+        for pattern, format in self.highlightingRules:
+            expression = QRegExp(pattern)
+            index = expression.indexIn(text)
+            while index >= 0:
+                length = expression.matchedLength()
+                self.setFormat(index, length, format)
+                index = expression.indexIn(text, index + length)
+
+        self.setCurrentBlockState(0)
+
+        startIndex = 0
+        if self.previousBlockState() != 1:
+            startIndex = self.commentStartExpression.indexIn(text)
+
+        while startIndex >= 0:
+            endIndex = self.commentEndExpression.indexIn(text, startIndex)
+            if endIndex == -1:
+                self.setCurrentBlockState(1)
+                commentLength = text.length() - startIndex
+            else:
+                commentLength = endIndex - startIndex + self.commentEndExpression.matchedLength()
+
+            self.setFormat(startIndex, commentLength, self.commentFormat)
+            startIndex = self.commentStartExpression.indexIn(text,
+                    startIndex + commentLength)
+
+
+class MessageHandler(QAbstractMessageHandler):
+
+    def __init__(self):
+        super(MessageHandler, self).__init__()
+
+        self.m_description = ""
+        self.m_sourceLocation = QSourceLocation()
+
+    def statusMessage(self):
+        return self.m_description
+
+    def line(self):
+        return self.m_sourceLocation.line()
+
+    def column(self):
+        return self.m_sourceLocation.column()
+
+    def handleMessage(self, type, description, identifier, sourceLocation):
+        self.m_description = description
+        self.m_sourceLocation = sourceLocation
+
+
+class MainWindow(QMainWindow, Ui_SchemaMainWindow):
+
+    def __init__(self):
+        super(MainWindow, self).__init__()
+
+        self.setupUi(self)
+
+        XmlSyntaxHighlighter(self.schemaView.document())
+        XmlSyntaxHighlighter(self.instanceEdit.document())
+
+        self.schemaSelection.addItem("Contact Schema")
+        self.schemaSelection.addItem("Recipe Schema")
+        self.schemaSelection.addItem("Order Schema")
+
+        self.instanceSelection.addItem("Valid Contact Instance")
+        self.instanceSelection.addItem("Invalid Contact Instance")
+
+        self.schemaSelection.currentIndexChanged.connect(self.schemaSelected)
+        self.instanceSelection.currentIndexChanged.connect(self.instanceSelected)
+        self.validateButton.clicked.connect(self.validate)
+        self.instanceEdit.textChanged.connect(self.textChanged)
+
+        self.validationStatus.setAlignment(Qt.AlignCenter | Qt.AlignVCenter)
+
+        self.schemaSelected(0)
+        self.instanceSelected(0)
+
+    def schemaSelected(self, index):
+        self.instanceSelection.clear()
+
+        if index == 0:
+            self.instanceSelection.addItem("Valid Contact Instance")
+            self.instanceSelection.addItem("Invalid Contact Instance")
+        elif index == 1:
+            self.instanceSelection.addItem("Valid Recipe Instance")
+            self.instanceSelection.addItem("Invalid Recipe Instance")
+        elif index == 2:
+            self.instanceSelection.addItem("Valid Order Instance")
+            self.instanceSelection.addItem("Invalid Order Instance")
+
+        self.textChanged()
+
+        schemaFile = QFile(':/schema_%d.xsd' % index)
+        schemaFile.open(QFile.ReadOnly)
+        schemaData = schemaFile.readAll()
+        self.schemaView.setPlainText(encode_utf8(schemaData))
+
+        self.validate()
+
+    def instanceSelected(self, index):
+        index += 2 * self.schemaSelection.currentIndex()
+        instanceFile = QFile(':/instance_%d.xml' % index)
+        instanceFile.open(QFile.ReadOnly)
+        instanceData = instanceFile.readAll()
+        self.instanceEdit.setPlainText(encode_utf8(instanceData))
+
+        self.validate()
+
+    def validate(self):
+        schemaData = decode_utf8(self.schemaView.toPlainText())
+        instanceData = decode_utf8(self.instanceEdit.toPlainText())
+
+        messageHandler = MessageHandler()
+
+        schema = QXmlSchema()
+        schema.setMessageHandler(messageHandler)
+        schema.load(schemaData)
+
+        errorOccurred = False
+        if not schema.isValid():
+            errorOccurred = True
+        else:
+            validator = QXmlSchemaValidator(schema)
+            if not validator.validate(instanceData):
+                errorOccurred = True
+
+        if errorOccurred:
+            self.validationStatus.setText(messageHandler.statusMessage())
+            self.moveCursor(messageHandler.line(), messageHandler.column())
+            background = Qt.red
+        else:
+            self.validationStatus.setText("validation successful")
+            background = Qt.green
+
+        styleSheet = 'QLabel {background: %s; padding: 3px}' % QColor(background).lighter(160).name()
+        self.validationStatus.setStyleSheet(styleSheet)
+
+    def textChanged(self):
+        self.instanceEdit.setExtraSelections([])
+
+    def moveCursor(self, line, column):
+        self.instanceEdit.moveCursor(QTextCursor.Start)
+
+        for i in range(1, line):
+            self.instanceEdit.moveCursor(QTextCursor.Down)
+
+        for i in range(1, column):
+            self.instanceEdit.moveCursor(QTextCursor.Right)
+
+        extraSelections = []
+        selection = QTextEdit.ExtraSelection()
+
+        lineColor = QColor(Qt.red).lighter(160)
+        selection.format.setBackground(lineColor)
+        selection.format.setProperty(QTextFormat.FullWidthSelection, True)
+        selection.cursor = self.instanceEdit.textCursor()
+        selection.cursor.clearSelection()
+        extraSelections.append(selection)
+
+        self.instanceEdit.setExtraSelections(extraSelections)
+
+        self.instanceEdit.setFocus()
+
+
+if __name__ == '__main__':
+
+    import sys
+
+    app = QApplication(sys.argv)
+    window = MainWindow()
+    window.show()
+    sys.exit(app.exec_())
diff --git a/examples/xmlpatterns/schema/schema.qrc b/examples/xmlpatterns/schema/schema.qrc
new file mode 100644
index 0000000..eb7ddfd
--- /dev/null
+++ b/examples/xmlpatterns/schema/schema.qrc
@@ -0,0 +1,13 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file alias="schema_0.xsd">files/contact.xsd</file>
+    <file alias="schema_1.xsd">files/recipe.xsd</file>
+    <file alias="schema_2.xsd">files/order.xsd</file>
+    <file alias="instance_0.xml">files/valid_contact.xml</file>
+    <file alias="instance_1.xml">files/invalid_contact.xml</file>
+    <file alias="instance_2.xml">files/valid_recipe.xml</file>
+    <file alias="instance_3.xml">files/invalid_recipe.xml</file>
+    <file alias="instance_4.xml">files/valid_order.xml</file>
+    <file alias="instance_5.xml">files/invalid_order.xml</file>
+</qresource>
+</RCC>
diff --git a/examples/xmlpatterns/schema/schema.ui b/examples/xmlpatterns/schema/schema.ui
new file mode 100644
index 0000000..b67f444
--- /dev/null
+++ b/examples/xmlpatterns/schema/schema.ui
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SchemaMainWindow</class>
+ <widget class="QMainWindow" name="SchemaMainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>417</width>
+    <height>594</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>XML Schema Validation</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QGridLayout" name="gridLayout">
+    <item row="0" column="0" colspan="2">
+     <widget class="QLabel" name="schemaLabel">
+      <property name="text">
+       <string>XML Schema Document:</string>
+      </property>
+     </widget>
+    </item>
+    <item row="0" column="2" colspan="2">
+     <widget class="QComboBox" name="schemaSelection"/>
+    </item>
+    <item row="1" column="0" colspan="4">
+     <widget class="QTextBrowser" name="schemaView"/>
+    </item>
+    <item row="2" column="0" colspan="2">
+     <widget class="QLabel" name="instanceLabel">
+      <property name="text">
+       <string>XML Instance Document:</string>
+      </property>
+     </widget>
+    </item>
+    <item row="2" column="2" colspan="2">
+     <widget class="QComboBox" name="instanceSelection"/>
+    </item>
+    <item row="3" column="0" colspan="4">
+     <widget class="QTextEdit" name="instanceEdit"/>
+    </item>
+    <item row="4" column="0">
+     <widget class="QLabel" name="label">
+      <property name="text">
+       <string>Status:</string>
+      </property>
+     </widget>
+    </item>
+    <item row="4" column="1" colspan="2">
+     <widget class="QLabel" name="validationStatus">
+      <property name="text">
+       <string>not validated</string>
+      </property>
+     </widget>
+    </item>
+    <item row="4" column="3">
+     <widget class="QPushButton" name="validateButton">
+      <property name="text">
+       <string>Validate</string>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/examples/xmlpatterns/schema/schema_rc.py b/examples/xmlpatterns/schema/schema_rc.py
new file mode 100644
index 0000000..237fa0c
--- /dev/null
+++ b/examples/xmlpatterns/schema/schema_rc.py
@@ -0,0 +1,388 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Wed May 15 14:30:02 2013
+#      by: The Resource Compiler for PyQt (Qt v5.0.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x02\x55\
+\x3c\
+\x72\x65\x63\x69\x70\x65\x3e\x0a\x20\x20\x20\x20\x3c\x74\x69\x74\
+\x6c\x65\x3e\x43\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x54\x6f\x61\
+\x73\x74\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\
+\x69\x6e\x67\x72\x65\x64\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\
+\x22\x42\x72\x65\x61\x64\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\
+\x3d\x22\x32\x22\x20\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\
+\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x67\x72\x65\x64\
+\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x43\x68\x65\x65\x73\
+\x65\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\x3d\x22\x32\x22\x20\
+\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\x73\x22\x2f\x3e\x0a\
+\x20\x20\x20\x20\x3c\x74\x69\x6d\x65\x20\x71\x75\x61\x6e\x74\x69\
+\x74\x79\x3d\x22\x33\x22\x20\x75\x6e\x69\x74\x3d\x22\x64\x61\x79\
+\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x65\x74\x68\x6f\x64\
+\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\
+\x31\x2e\x20\x53\x6c\x69\x63\x65\x20\x74\x68\x65\x20\x62\x72\x65\
+\x61\x64\x20\x61\x6e\x64\x20\x63\x68\x65\x65\x73\x65\x2e\x3c\x2f\
+\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\
+\x74\x65\x70\x3e\x32\x2e\x20\x47\x72\x69\x6c\x6c\x20\x6f\x6e\x65\
+\x20\x73\x69\x64\x65\x20\x6f\x66\x20\x65\x61\x63\x68\x20\x73\x6c\
+\x69\x63\x65\x20\x6f\x66\x20\x62\x72\x65\x61\x64\x2e\x3c\x2f\x73\
+\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\
+\x65\x70\x3e\x33\x2e\x20\x54\x75\x72\x6e\x20\x6f\x76\x65\x72\x20\
+\x74\x68\x65\x20\x62\x72\x65\x61\x64\x20\x61\x6e\x64\x20\x70\x6c\
+\x61\x63\x65\x20\x61\x20\x73\x6c\x69\x63\x65\x20\x6f\x66\x20\x63\
+\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x65\x61\x63\x68\x20\x70\x69\
+\x65\x63\x65\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\x34\x2e\x20\x47\x72\x69\
+\x6c\x6c\x20\x75\x6e\x74\x69\x6c\x20\x74\x68\x65\x20\x63\x68\x65\
+\x65\x73\x65\x20\x68\x61\x73\x20\x73\x74\x61\x72\x74\x65\x64\x20\
+\x74\x6f\x20\x6d\x65\x6c\x74\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\x35\x2e\
+\x20\x53\x65\x72\x76\x65\x20\x61\x6e\x64\x20\x65\x6e\x6a\x6f\x79\
+\x21\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6d\
+\x65\x74\x68\x6f\x64\x3e\x0a\x20\x20\x20\x20\x3c\x63\x6f\x6d\x6d\
+\x65\x6e\x74\x3e\x54\x65\x6c\x6c\x20\x79\x6f\x75\x72\x20\x66\x72\
+\x69\x65\x6e\x64\x73\x20\x61\x62\x6f\x75\x74\x20\x69\x74\x21\x3c\
+\x2f\x63\x6f\x6d\x6d\x65\x6e\x74\x3e\x0a\x3c\x2f\x72\x65\x63\x69\
+\x70\x65\x3e\x0a\
+\x00\x00\x03\x67\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x3f\x3e\x0a\x3c\x78\x73\x64\x3a\x73\x63\x68\x65\x6d\x61\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x73\x64\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x31\x2f\x58\x4d\x4c\x53\x63\x68\x65\x6d\x61\x22\x3e\x0a\x0a\
+\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\
+\x20\x6e\x61\x6d\x65\x3d\x22\x6f\x72\x64\x65\x72\x22\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\x70\
+\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\
+\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\
+\x20\x6e\x61\x6d\x65\x3d\x22\x63\x75\x73\x74\x6f\x6d\x65\x72\x49\
+\x64\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\
+\x69\x74\x69\x76\x65\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\
+\x65\x3d\x22\x61\x72\x74\x69\x63\x6c\x65\x22\x20\x74\x79\x70\x65\
+\x3d\x22\x61\x72\x74\x69\x63\x6c\x65\x54\x79\x70\x65\x22\x20\x6d\
+\x61\x78\x4f\x63\x63\x75\x72\x73\x3d\x22\x75\x6e\x62\x6f\x75\x6e\
+\x64\x65\x64\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\
+\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x64\x65\x6c\x69\x76\x65\
+\x72\x79\x44\x61\x74\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\
+\x64\x3a\x64\x61\x74\x65\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\
+\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x70\x61\x79\
+\x65\x64\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x62\x6f\
+\x6f\x6c\x65\x61\x6e\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\
+\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\
+\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\
+\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\
+\x74\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\
+\x70\x6c\x65\x78\x54\x79\x70\x65\x20\x6e\x61\x6d\x65\x3d\x22\x61\
+\x72\x74\x69\x63\x6c\x65\x54\x79\x70\x65\x22\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\
+\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\
+\x65\x3d\x22\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x22\x20\x74\x79\
+\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\x69\x74\x69\x76\x65\
+\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\
+\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x75\x6e\x74\x22\
+\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x70\x6f\x73\x69\x74\
+\x69\x76\x65\x49\x6e\x74\x65\x67\x65\x72\x22\x2f\x3e\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\
+\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6d\
+\x6d\x65\x6e\x74\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\
+\x73\x74\x72\x69\x6e\x67\x22\x20\x6d\x69\x6e\x4f\x63\x63\x75\x72\
+\x73\x3d\x22\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\x63\x65\x3e\x0a\
+\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\
+\x78\x54\x79\x70\x65\x3e\x0a\x0a\x3c\x2f\x78\x73\x64\x3a\x73\x63\
+\x68\x65\x6d\x61\x3e\x0a\
+\x00\x00\x02\x25\
+\x3c\
+\x72\x65\x63\x69\x70\x65\x3e\x0a\x20\x20\x20\x20\x3c\x74\x69\x74\
+\x6c\x65\x3e\x43\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x54\x6f\x61\
+\x73\x74\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\
+\x69\x6e\x67\x72\x65\x64\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\
+\x22\x42\x72\x65\x61\x64\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\
+\x3d\x22\x32\x22\x20\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\
+\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x67\x72\x65\x64\
+\x69\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x43\x68\x65\x65\x73\
+\x65\x22\x20\x71\x75\x61\x6e\x74\x69\x74\x79\x3d\x22\x32\x22\x20\
+\x75\x6e\x69\x74\x3d\x22\x73\x6c\x69\x63\x65\x73\x22\x2f\x3e\x0a\
+\x20\x20\x20\x20\x3c\x74\x69\x6d\x65\x20\x71\x75\x61\x6e\x74\x69\
+\x74\x79\x3d\x22\x33\x22\x20\x75\x6e\x69\x74\x3d\x22\x6d\x69\x6e\
+\x75\x74\x65\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x65\x74\
+\x68\x6f\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\
+\x65\x70\x3e\x31\x2e\x20\x53\x6c\x69\x63\x65\x20\x74\x68\x65\x20\
+\x62\x72\x65\x61\x64\x20\x61\x6e\x64\x20\x63\x68\x65\x65\x73\x65\
+\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x73\x74\x65\x70\x3e\x32\x2e\x20\x47\x72\x69\x6c\x6c\x20\
+\x6f\x6e\x65\x20\x73\x69\x64\x65\x20\x6f\x66\x20\x65\x61\x63\x68\
+\x20\x73\x6c\x69\x63\x65\x20\x6f\x66\x20\x62\x72\x65\x61\x64\x2e\
+\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x3c\x73\x74\x65\x70\x3e\x33\x2e\x20\x54\x75\x72\x6e\x20\x6f\x76\
+\x65\x72\x20\x74\x68\x65\x20\x62\x72\x65\x61\x64\x20\x61\x6e\x64\
+\x20\x70\x6c\x61\x63\x65\x20\x61\x20\x73\x6c\x69\x63\x65\x20\x6f\
+\x66\x20\x63\x68\x65\x65\x73\x65\x20\x6f\x6e\x20\x65\x61\x63\x68\
+\x20\x70\x69\x65\x63\x65\x2e\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\x3e\x34\x2e\x20\
+\x47\x72\x69\x6c\x6c\x20\x75\x6e\x74\x69\x6c\x20\x74\x68\x65\x20\
+\x63\x68\x65\x65\x73\x65\x20\x68\x61\x73\x20\x73\x74\x61\x72\x74\
+\x65\x64\x20\x74\x6f\x20\x6d\x65\x6c\x74\x2e\x3c\x2f\x73\x74\x65\
+\x70\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x65\x70\
+\x3e\x35\x2e\x20\x53\x65\x72\x76\x65\x20\x61\x6e\x64\x20\x65\x6e\
+\x6a\x6f\x79\x21\x3c\x2f\x73\x74\x65\x70\x3e\x0a\x20\x20\x20\x20\
+\x3c\x2f\x6d\x65\x74\x68\x6f\x64\x3e\x0a\x3c\x2f\x72\x65\x63\x69\
+\x70\x65\x3e\x0a\
+\x00\x00\x01\x81\
+\x00\
+\x00\x06\x05\x78\x9c\xbd\x54\xc1\x72\xc2\x20\x10\xbd\xfb\x15\x0c\
+\x1f\x60\xb4\xbd\x39\x46\xcf\x9d\x69\xa7\x87\xf6\xd0\x2b\x92\x1d\
+\xc3\x4c\x80\x08\x8b\x89\x7f\x5f\x82\x1a\x6d\x0c\x49\xbc\x94\x43\
+\x26\xc3\xbe\xf7\xd8\x5d\x1e\xbb\xde\xd6\xb2\x20\x47\x30\x56\x68\
+\x95\xd2\xe5\x7c\x41\xb7\x9b\xd9\xba\xb6\xd9\xca\xf2\x1c\x24\x23\
+\x3e\xae\xec\xca\x6f\xa4\x34\x47\x2c\x57\x49\x52\x55\xd5\xbc\x7a\
+\x9d\x6b\xb3\x4f\x5e\x16\x8b\x65\xf2\xf3\xf1\xfe\x15\xb0\x74\x33\
+\x9b\x11\xbf\x02\x1d\x0a\x90\xa0\x90\x28\x26\x21\xa5\x06\xb8\x28\
+\xc1\x03\xc8\x65\x05\x0c\xd7\xb2\x2c\xa0\xfe\x3e\x95\x70\x8b\xb4\
+\x51\x0b\x07\x07\x8a\x77\x42\x91\x03\x50\x60\x01\x94\xa0\x97\x4a\
+\x69\x60\xa3\x11\x6a\x4f\x93\x49\x6c\x8f\x34\x90\x09\xbf\x71\x95\
+\xb8\xed\x34\xd9\x51\x22\x59\xfd\xc9\xb9\x33\x36\xa5\x4e\xed\xb4\
+\x53\x19\x64\x13\xc5\x51\xc8\x36\xb3\xe6\x3f\x08\x4e\xa3\x4a\xc0\
+\x5c\x67\xf4\x11\x3b\xde\xc2\x27\xda\x39\x92\x84\x45\x28\x7b\x3a\
+\x3b\xb9\x25\xad\x74\x32\x9e\xc6\x19\x33\x58\xd4\x19\x72\x49\xb1\
+\x63\x9b\xc8\x09\x11\xd5\x8e\xd2\xcd\xbb\x77\xc8\x07\x83\x84\xdb\
+\xeb\xf8\x98\xa1\x6f\xc9\xce\xe1\x15\xdd\x7c\x87\xbd\xd8\x4b\x3b\
+\x38\xa6\xbc\x8f\x4f\xf7\xd4\x52\x5b\x81\xe2\x08\x6f\x0a\x61\x0f\
+\x66\x54\xc3\x29\x81\xf1\xa3\x7b\x1a\x31\x54\x75\xeb\xd6\xff\x4a\
+\xbc\x6f\x0a\x88\x26\xab\x88\x15\x1a\x80\x81\xa6\x46\x8e\x7e\x80\
+\x91\x1d\xb3\x7f\xeb\x1e\x78\x39\xa0\x9c\x04\xc3\x02\xef\xc8\x0a\
+\xd7\x38\x1d\xb8\x56\x99\x8d\x99\x38\x46\x93\x42\xf9\x3a\x9e\xa6\
+\xe5\xda\xbf\x9d\xde\x41\x90\x74\xea\xea\x75\x79\x4f\x5f\xce\x91\
+\xb6\xb3\xf1\x3b\xbf\x48\x84\xa9\xbd\x99\xfd\x02\x2c\xd8\xc0\x1d\
+\
+\x00\x00\x01\x1d\
+\x3c\
+\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\x20\x20\x20\x20\x3c\x67\x69\
+\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x4a\x6f\x68\x6e\x3c\x2f\x67\x69\
+\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x66\x61\
+\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x44\x6f\x65\x3c\x2f\x66\x61\
+\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x74\
+\x69\x74\x6c\x65\x3e\x50\x72\x6f\x66\x2e\x3c\x2f\x74\x69\x74\x6c\
+\x65\x3e\x0a\x20\x20\x20\x20\x3c\x77\x6f\x72\x6b\x41\x64\x64\x72\
+\x65\x73\x73\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\
+\x72\x65\x65\x74\x3e\x53\x61\x6e\x64\x61\x6b\x65\x72\x76\x65\x69\
+\x65\x6e\x20\x31\x31\x36\x3c\x2f\x73\x74\x72\x65\x65\x74\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x7a\x69\x70\x43\x6f\x64\x65\
+\x3e\x4e\x2d\x30\x35\x35\x30\x3c\x2f\x7a\x69\x70\x43\x6f\x64\x65\
+\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x69\x74\x79\x3e\
+\x4f\x73\x6c\x6f\x3c\x2f\x63\x69\x74\x79\x3e\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x72\x79\x3e\x4e\x6f\x72\
+\x77\x61\x79\x3c\x2f\x63\x6f\x75\x6e\x74\x72\x79\x3e\x0a\x20\x20\
+\x20\x20\x3c\x2f\x77\x6f\x72\x6b\x41\x64\x64\x72\x65\x73\x73\x3e\
+\x0a\x3c\x2f\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\
+\x00\x00\x01\x2e\
+\x3c\
+\x6f\x72\x64\x65\x72\x3e\x0a\x20\x20\x20\x20\x3c\x63\x75\x73\x74\
+\x6f\x6d\x65\x72\x49\x64\x3e\x32\x33\x34\x32\x31\x39\x3c\x2f\x63\
+\x75\x73\x74\x6f\x6d\x65\x72\x49\x64\x3e\x0a\x20\x20\x20\x20\x3c\
+\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x32\x31\x36\x39\
+\x32\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x33\x3c\x2f\
+\x63\x6f\x75\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\x72\x74\
+\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\x61\x72\x74\x69\x63\
+\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x61\x72\x74\
+\x69\x63\x6c\x65\x49\x64\x3e\x32\x34\x37\x34\x39\x3c\x2f\x61\x72\
+\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x39\x3c\x2f\x63\x6f\x75\x6e\x74\
+\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x3e\
+\x0a\x20\x20\x20\x20\x3c\x64\x65\x6c\x69\x76\x65\x72\x79\x44\x61\
+\x74\x65\x3e\x32\x30\x30\x39\x2d\x30\x31\x2d\x32\x33\x3c\x2f\x64\
+\x65\x6c\x69\x76\x65\x72\x79\x44\x61\x74\x65\x3e\x0a\x20\x20\x20\
+\x20\x3c\x70\x61\x79\x65\x64\x3e\x79\x65\x73\x3c\x2f\x70\x61\x79\
+\x65\x64\x3e\x0a\x3c\x2f\x6f\x72\x64\x65\x72\x3e\x0a\
+\x00\x00\x03\xbb\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x3f\x3e\x0a\x3c\x78\x73\x64\x3a\x73\x63\x68\x65\x6d\x61\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x73\x64\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x31\x2f\x58\x4d\x4c\x53\x63\x68\x65\x6d\x61\x22\x3e\x0a\x0a\
+\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\
+\x20\x6e\x61\x6d\x65\x3d\x22\x63\x6f\x6e\x74\x61\x63\x74\x22\x3e\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\
+\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\
+\x65\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\
+\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x67\x69\x76\x65\x6e\x4e\x61\
+\x6d\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x73\x74\
+\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\
+\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x66\x61\x6d\x69\x6c\
+\x79\x4e\x61\x6d\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\
+\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\
+\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x62\x69\
+\x72\x74\x68\x64\x61\x74\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\
+\x73\x64\x3a\x64\x61\x74\x65\x22\x20\x6d\x69\x6e\x4f\x63\x63\x75\
+\x72\x73\x3d\x22\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\
+\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x68\x6f\x6d\x65\
+\x41\x64\x64\x72\x65\x73\x73\x22\x20\x74\x79\x70\x65\x3d\x22\x61\
+\x64\x64\x72\x65\x73\x73\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\
+\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x77\x6f\x72\
+\x6b\x41\x64\x64\x72\x65\x73\x73\x22\x20\x74\x79\x70\x65\x3d\x22\
+\x61\x64\x64\x72\x65\x73\x73\x22\x20\x6d\x69\x6e\x4f\x63\x63\x75\
+\x72\x73\x3d\x22\x30\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\
+\x6e\x63\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x78\
+\x73\x64\x3a\x63\x6f\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\
+\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\
+\x74\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x63\x6f\x6d\
+\x70\x6c\x65\x78\x54\x79\x70\x65\x20\x6e\x61\x6d\x65\x3d\x22\x61\
+\x64\x64\x72\x65\x73\x73\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\x63\x65\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\
+\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x73\
+\x74\x72\x65\x65\x74\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\
+\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\
+\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x7a\x69\x70\x43\x6f\x64\
+\x65\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\x64\x3a\x73\x74\x72\
+\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x78\x73\x64\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\
+\x6e\x61\x6d\x65\x3d\x22\x63\x69\x74\x79\x22\x20\x74\x79\x70\x65\
+\x3d\x22\x78\x73\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x78\x73\x64\
+\x3a\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x3d\x22\x63\
+\x6f\x75\x6e\x74\x72\x79\x22\x20\x74\x79\x70\x65\x3d\x22\x78\x73\
+\x64\x3a\x73\x74\x72\x69\x6e\x67\x22\x2f\x3e\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x73\x65\x71\x75\x65\x6e\
+\x63\x65\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x78\x73\x64\x3a\x63\x6f\
+\x6d\x70\x6c\x65\x78\x54\x79\x70\x65\x3e\x0a\x0a\x3c\x2f\x78\x73\
+\x64\x3a\x73\x63\x68\x65\x6d\x61\x3e\x0a\
+\x00\x00\x01\x2a\
+\x3c\
+\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\x20\x20\x20\x20\x3c\x67\x69\
+\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x4a\x6f\x68\x6e\x3c\x2f\x67\x69\
+\x76\x65\x6e\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x66\x61\
+\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x44\x6f\x65\x3c\x2f\x66\x61\
+\x6d\x69\x6c\x79\x4e\x61\x6d\x65\x3e\x0a\x20\x20\x20\x20\x3c\x62\
+\x69\x72\x74\x68\x64\x61\x74\x65\x3e\x31\x39\x37\x37\x2d\x31\x32\
+\x2d\x32\x35\x3c\x2f\x62\x69\x72\x74\x68\x64\x61\x74\x65\x3e\x0a\
+\x20\x20\x20\x20\x3c\x68\x6f\x6d\x65\x41\x64\x64\x72\x65\x73\x73\
+\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x65\x65\
+\x74\x3e\x53\x61\x6e\x64\x61\x6b\x65\x72\x76\x65\x69\x65\x6e\x20\
+\x31\x31\x36\x3c\x2f\x73\x74\x72\x65\x65\x74\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x7a\x69\x70\x43\x6f\x64\x65\x3e\x4e\x2d\
+\x30\x35\x35\x30\x3c\x2f\x7a\x69\x70\x43\x6f\x64\x65\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x69\x74\x79\x3e\x4f\x73\x6c\
+\x6f\x3c\x2f\x63\x69\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x63\x6f\x75\x6e\x74\x72\x79\x3e\x4e\x6f\x72\x77\x61\x79\
+\x3c\x2f\x63\x6f\x75\x6e\x74\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\
+\x2f\x68\x6f\x6d\x65\x41\x64\x64\x72\x65\x73\x73\x3e\x0a\x3c\x2f\
+\x63\x6f\x6e\x74\x61\x63\x74\x3e\x0a\
+\x00\x00\x01\xb6\
+\x3c\
+\x6f\x72\x64\x65\x72\x3e\x0a\x20\x20\x20\x20\x3c\x63\x75\x73\x74\
+\x6f\x6d\x65\x72\x49\x64\x3e\x31\x39\x34\x32\x32\x33\x3c\x2f\x63\
+\x75\x73\x74\x6f\x6d\x65\x72\x49\x64\x3e\x0a\x20\x20\x20\x20\x3c\
+\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x32\x32\x32\x34\
+\x32\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x35\x3c\x2f\
+\x63\x6f\x75\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\x72\x74\
+\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\x61\x72\x74\x69\x63\
+\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x61\x72\x74\
+\x69\x63\x6c\x65\x49\x64\x3e\x33\x32\x33\x37\x32\x3c\x2f\x61\x72\
+\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x31\x32\x3c\x2f\x63\x6f\x75\x6e\
+\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x6d\x6d\
+\x65\x6e\x74\x3e\x77\x69\x74\x68\x6f\x75\x74\x20\x73\x74\x72\x69\
+\x70\x65\x73\x3c\x2f\x63\x6f\x6d\x6d\x65\x6e\x74\x3e\x0a\x20\x20\
+\x20\x20\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\
+\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x32\x33\
+\x36\x34\x39\x3c\x2f\x61\x72\x74\x69\x63\x6c\x65\x49\x64\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x6f\x75\x6e\x74\x3e\x32\
+\x3c\x2f\x63\x6f\x75\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x61\
+\x72\x74\x69\x63\x6c\x65\x3e\x0a\x20\x20\x20\x20\x3c\x64\x65\x6c\
+\x69\x76\x65\x72\x79\x44\x61\x74\x65\x3e\x32\x30\x30\x39\x2d\x30\
+\x31\x2d\x32\x33\x3c\x2f\x64\x65\x6c\x69\x76\x65\x72\x79\x44\x61\
+\x74\x65\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x79\x65\x64\x3e\x74\
+\x72\x75\x65\x3c\x2f\x70\x61\x79\x65\x64\x3e\x0a\x3c\x2f\x6f\x72\
+\x64\x65\x72\x3e\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x0e\
+\x00\x73\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x33\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x0c\
+\x08\x16\x87\xf4\
+\x00\x73\
+\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x32\x00\x2e\x00\x78\x00\x73\x00\x64\
+\x00\x0e\
+\x00\x70\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x32\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x0c\
+\x08\x13\x87\xf4\
+\x00\x73\
+\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x31\x00\x2e\x00\x78\x00\x73\x00\x64\
+\x00\x0e\
+\x00\x79\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x31\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x0e\
+\x00\x75\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x35\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x0c\
+\x08\x10\x87\xf4\
+\x00\x73\
+\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x30\x00\x2e\x00\x78\x00\x73\x00\x64\
+\x00\x0e\
+\x00\x76\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x30\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+\x00\x0e\
+\x00\x72\x4a\x1c\
+\x00\x69\
+\x00\x6e\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x63\x00\x65\x00\x5f\x00\x34\x00\x2e\x00\x78\x00\x6d\x00\x6c\
+"
+
+qt_resource_struct = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x09\x00\x00\x00\x01\
+\x00\x00\x00\x40\x00\x00\x00\x00\x00\x01\x00\x00\x05\xc4\
+\x00\x00\x01\x04\x00\x00\x00\x00\x00\x01\x00\x00\x10\xb2\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x93\
+\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x84\
+\x00\x00\x00\x80\x00\x00\x00\x00\x00\x01\x00\x00\x09\x72\
+\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x0b\xc5\
+\x00\x00\x00\x62\x00\x01\x00\x00\x00\x01\x00\x00\x07\xed\
+\x00\x00\x00\x22\x00\x00\x00\x00\x00\x01\x00\x00\x02\x59\
+"
+
+def qInitResources():
+    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/examples/xmlpatterns/schema/ui_schema.py b/examples/xmlpatterns/schema/ui_schema.py
new file mode 100644
index 0000000..d2f6f16
--- /dev/null
+++ b/examples/xmlpatterns/schema/ui_schema.py
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'schema.ui'
+#
+# Created: Wed May 15 14:30:19 2013
+#      by: PyQt5 UI code generator 5.0-snapshot-3507ed3a4178
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class Ui_SchemaMainWindow(object):
+    def setupUi(self, SchemaMainWindow):
+        SchemaMainWindow.setObjectName("SchemaMainWindow")
+        SchemaMainWindow.resize(417, 594)
+        self.centralwidget = QtWidgets.QWidget(SchemaMainWindow)
+        self.centralwidget.setObjectName("centralwidget")
+        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
+        self.gridLayout.setObjectName("gridLayout")
+        self.schemaLabel = QtWidgets.QLabel(self.centralwidget)
+        self.schemaLabel.setObjectName("schemaLabel")
+        self.gridLayout.addWidget(self.schemaLabel, 0, 0, 1, 2)
+        self.schemaSelection = QtWidgets.QComboBox(self.centralwidget)
+        self.schemaSelection.setObjectName("schemaSelection")
+        self.gridLayout.addWidget(self.schemaSelection, 0, 2, 1, 2)
+        self.schemaView = QtWidgets.QTextBrowser(self.centralwidget)
+        self.schemaView.setObjectName("schemaView")
+        self.gridLayout.addWidget(self.schemaView, 1, 0, 1, 4)
+        self.instanceLabel = QtWidgets.QLabel(self.centralwidget)
+        self.instanceLabel.setObjectName("instanceLabel")
+        self.gridLayout.addWidget(self.instanceLabel, 2, 0, 1, 2)
+        self.instanceSelection = QtWidgets.QComboBox(self.centralwidget)
+        self.instanceSelection.setObjectName("instanceSelection")
+        self.gridLayout.addWidget(self.instanceSelection, 2, 2, 1, 2)
+        self.instanceEdit = QtWidgets.QTextEdit(self.centralwidget)
+        self.instanceEdit.setObjectName("instanceEdit")
+        self.gridLayout.addWidget(self.instanceEdit, 3, 0, 1, 4)
+        self.label = QtWidgets.QLabel(self.centralwidget)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 4, 0, 1, 1)
+        self.validationStatus = QtWidgets.QLabel(self.centralwidget)
+        self.validationStatus.setObjectName("validationStatus")
+        self.gridLayout.addWidget(self.validationStatus, 4, 1, 1, 2)
+        self.validateButton = QtWidgets.QPushButton(self.centralwidget)
+        self.validateButton.setObjectName("validateButton")
+        self.gridLayout.addWidget(self.validateButton, 4, 3, 1, 1)
+        SchemaMainWindow.setCentralWidget(self.centralwidget)
+        self.statusbar = QtWidgets.QStatusBar(SchemaMainWindow)
+        self.statusbar.setObjectName("statusbar")
+        SchemaMainWindow.setStatusBar(self.statusbar)
+
+        self.retranslateUi(SchemaMainWindow)
+        QtCore.QMetaObject.connectSlotsByName(SchemaMainWindow)
+
+    def retranslateUi(self, SchemaMainWindow):
+        _translate = QtCore.QCoreApplication.translate
+        SchemaMainWindow.setWindowTitle(_translate("SchemaMainWindow", "XML Schema Validation"))
+        self.schemaLabel.setText(_translate("SchemaMainWindow", "XML Schema Document:"))
+        self.instanceLabel.setText(_translate("SchemaMainWindow", "XML Instance Document:"))
+        self.label.setText(_translate("SchemaMainWindow", "Status:"))
+        self.validationStatus.setText(_translate("SchemaMainWindow", "not validated"))
+        self.validateButton.setText(_translate("SchemaMainWindow", "Validate"))
+
diff --git a/pylupdate/fetchtr.cpp b/pylupdate/fetchtr.cpp
new file mode 100644
index 0000000..1753abb
--- /dev/null
+++ b/pylupdate/fetchtr.cpp
@@ -0,0 +1,927 @@
+/**********************************************************************
+** Copyright (C) 2014 Riverbank Computing Limited
+** Copyright (C) 2002-2007 Detlev Offenbach <detlev at die-offenbachs.de>
+**
+** This is a modified version of lupdate. The original is part of Qt-Linguist.
+** The copyright of the original file can be found below.
+**
+** This version is modified to handle python sources.
+**
+**   The file is provided AS IS with NO WARRANTY OF ANY KIND,
+**   INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+**   A PARTICULAR PURPOSE.
+****************************************************************************/
+
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <metatranslator.h>
+
+#include <qfile.h>
+#include <qregexp.h>
+#include <qstring.h>
+#include <qtextstream.h>
+#include <qstack.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <QTextCodec>
+#include <QtXml>
+
+static const char MagicComment[] = "TRANSLATOR ";
+
+static QMap<QByteArray, int> needs_Q_OBJECT;
+static QMap<QByteArray, int> lacks_Q_OBJECT;
+
+/*
+  The first part of this source file is the Python tokenizer.  We skip
+  most of Python; the only tokens that interest us are defined here.
+*/
+
+enum { Tok_Eof, Tok_class, Tok_return, Tok_tr,
+       Tok_trUtf8, Tok_translate, Tok_Ident,
+       Tok_Comment, Tok_Dot, Tok_String,
+       Tok_LeftParen, Tok_RightParen,
+       Tok_Comma, Tok_None, Tok_Integer};
+
+// The names of function aliases passed on the command line.
+static const char *tr_function;
+static const char *translate_function;
+
+/*
+  The tokenizer maintains the following global variables. The names
+  should be self-explanatory.
+*/
+static QByteArray yyFileName;
+static int yyCh;
+static char yyIdent[128];
+static size_t yyIdentLen;
+static char yyComment[65536];
+static size_t yyCommentLen;
+static char yyString[65536];
+static size_t yyStringLen;
+static qlonglong yyInteger;
+static QStack<int> yySavedParenDepth;
+static int yyParenDepth;
+static int yyLineNo;
+static int yyCurLineNo;
+static int yyParenLineNo;
+static QTextCodec *yyCodecForTr = 0;
+static QTextCodec *yyCodecForSource = 0;
+
+// the file to read from (if reading from a file)
+static FILE *yyInFile;
+
+// the string to read from and current position in the string (otherwise)
+static QString yyInStr;
+static int yyInPos;
+// - 'rawbuf' is used to hold bytes before universal newline translation.
+// - 'buf' is its higher-level counterpart, where every end-of-line appears as
+//   a single '\n' character, regardless of the end-of-line style used in input
+//   files.
+static int buf, rawbuf;
+
+static int (*getChar)();
+static int (*peekChar)();
+
+static bool yyParsingUtf8;
+
+static int getTranslatedCharFromFile()
+{
+    int c;
+
+    if ( rawbuf < 0 )           // Empty raw buffer?
+        c = getc( yyInFile );
+    else {
+        c = rawbuf;
+        rawbuf = -1;            // Declare the raw buffer empty.
+    }
+
+    // Universal newline translation, similar to what Python does
+    if ( c == '\r' ) {
+        c = getc( yyInFile ); // Last byte of a \r\n sequence?
+        if ( c != '\n')
+            {
+                rawbuf = c; // No, put it in 'rawbuf' for later processing.
+                // Logical character that will be seen by higher-level functions
+                c = '\n';
+            }
+        // In all cases, c == '\n' here.
+    }
+
+    return c;
+}
+
+static int getCharFromFile()
+{
+    int c;
+
+    if ( buf < 0 ) {            // Empty buffer?
+        c = getTranslatedCharFromFile();
+    } else {
+        c = buf;
+        buf = -1;               // Declare the buffer empty.
+    }
+
+    if ( c == '\n' )            // This is after universal newline translation
+        yyCurLineNo++;          // (i.e., a "logical" newline character).
+
+    return c;
+}
+
+static int peekCharFromFile()
+{
+    // Read a character, possibly performing universal newline translation,
+    // and put it in 'buf' so that the next call to getCharFromFile() finds it
+    // already available.
+    buf = getCharFromFile();
+    return buf;
+}
+
+static void startTokenizer( const char *fileName, int (*getCharFunc)(),
+                            int (*peekCharFunc)(), QTextCodec *codecForTr, QTextCodec *codecForSource )
+{
+    yyInPos = 0;
+    buf = rawbuf = -1;
+    getChar = getCharFunc;
+    peekChar = peekCharFunc;
+
+    yyFileName = fileName;
+    yyCh = getChar();
+    yySavedParenDepth.clear();
+    yyParenDepth = 0;
+    yyCurLineNo = 1;
+    yyParenLineNo = 1;
+    yyCodecForTr = codecForTr;
+    if (!yyCodecForTr)
+        yyCodecForTr = QTextCodec::codecForName("ISO-8859-1");
+    Q_ASSERT(yyCodecForTr);
+    yyCodecForSource = codecForSource;
+
+    yyParsingUtf8 = false;
+}
+
+static int getToken()
+{
+    const char tab[] = "abfnrtv";
+    const char backTab[] = "\a\b\f\n\r\t\v";
+    uint n;
+    bool quiet;
+
+    yyIdentLen = 0;
+    yyCommentLen = 0;
+    yyStringLen = 0;
+
+    while ( yyCh != EOF ) {
+        yyLineNo = yyCurLineNo;
+
+        if ( isalpha(yyCh) || yyCh == '_' ) {
+            do {
+                if ( yyIdentLen < sizeof(yyIdent) - 1 )
+                    yyIdent[yyIdentLen++] = (char) yyCh;
+                yyCh = getChar();
+            } while ( isalnum(yyCh) || yyCh == '_' );
+            yyIdent[yyIdentLen] = '\0';
+
+            // Check for names passed on the command line.
+            if (tr_function && strcmp(yyIdent, tr_function) == 0)
+                return Tok_tr;
+
+            if (translate_function && strcmp(yyIdent, translate_function) == 0)
+                return Tok_translate;
+
+            bool might_be_str = false;
+
+            switch ( yyIdent[0] ) {
+                case 'N':
+                    if ( strcmp(yyIdent + 1, "one") == 0 )
+                        return Tok_None;
+                    break;
+                case 'Q':
+                    if (strcmp(yyIdent + 1, "T_TR_NOOP") == 0)
+                    {
+                        yyParsingUtf8 = false;
+                        return Tok_tr;
+                    }
+                    else if (strcmp(yyIdent + 1, "T_TR_NOOP_UTF8") == 0)
+                    {
+                        yyParsingUtf8 = true;
+                        return Tok_trUtf8;
+                    }
+                    else if (strcmp(yyIdent + 1, "T_TRANSLATE_NOOP") == 0)
+                    {
+                        yyParsingUtf8 = false;
+                        return Tok_translate;
+                    }
+                    break;
+                case 'c':
+                    if ( strcmp(yyIdent + 1, "lass") == 0 )
+                        return Tok_class;
+                    break;
+                case 'f':
+                    /*
+                     * QTranslator::findMessage() has the same parameters as
+                     * QApplication::translate().
+                     */
+                    if ( strcmp(yyIdent + 1, "indMessage") == 0 )
+                        return Tok_translate;
+                    break;
+                case 'r':
+                    if ( strcmp(yyIdent + 1, "eturn") == 0 )
+                        return Tok_return;
+
+                    /* Drop through. */
+
+                case 'R':
+                    if (yyIdent[1] == '\0')
+                        might_be_str = true;
+                    break;
+                case 'b':
+                case 'B':
+                case 'u':
+                case 'U':
+                    if (yyIdent[1] == '\0')
+                        might_be_str = true;
+                    else if ((yyIdent[1] == 'r' || yyIdent[1] == 'R') && yyIdent[2] == '\0')
+                        might_be_str = true;
+                    break;
+                case 't':
+                    if ( strcmp(yyIdent + 1, "r") == 0 ) {
+                        yyParsingUtf8 = false;
+                        return Tok_tr;
+                    } else if ( qstrcmp(yyIdent + 1, "rUtf8") == 0 ) {
+                        yyParsingUtf8 = true;
+                        return Tok_trUtf8;
+                    } else if ( qstrcmp(yyIdent + 1, "ranslate") == 0 ) {
+                        yyParsingUtf8 = false;
+                        return Tok_translate;
+                    }
+                    break;
+                case '_':
+                    if ( strcmp(yyIdent + 1, "_tr") == 0 ) {
+                        yyParsingUtf8 = false;
+                        return Tok_tr;
+                    } else if ( strcmp(yyIdent + 1, "_trUtf8") == 0 ) {
+                        yyParsingUtf8 = true;
+                        return Tok_trUtf8;
+                    } else if ( qstrcmp(yyIdent + 1, "translate") == 0 ) {
+                        yyParsingUtf8 = false;
+                        return Tok_translate;
+                    }
+                    break;
+            }
+
+            /*
+             * Handle the standard Python v2 and v3 string prefixes by simply
+             * ignoring them.
+             */
+
+            if (!might_be_str)
+                return Tok_Ident;
+
+            if (yyCh != '"' && yyCh != '\'')
+                return Tok_Ident;
+        }
+        {
+            switch ( yyCh ) {
+                case '#':
+                    do {
+                        yyCh = getChar();
+                    } while ( yyCh != EOF && yyCh != '\n' );
+                    break;
+                case '"':
+                case '\'':
+                    int quoteChar;
+                    int trippelQuote, singleQuote;
+                    int in;
+
+                    quoteChar = yyCh;
+                    trippelQuote = 0;
+                    singleQuote = 1;
+                    in = 0;
+                    yyCh = getChar();
+                    quiet = false;
+
+                    while ( yyCh != EOF ) {
+                        if ( singleQuote && (yyCh == '\n' || (in && yyCh == quoteChar)) )
+                            break;
+
+                        if ( yyCh == quoteChar ) {
+                            if (peekChar() == quoteChar) {
+                                yyCh = getChar();
+                                if (!trippelQuote) {
+                                    trippelQuote = 1;
+                                    singleQuote = 0;
+                                    in = 1;
+                                    yyCh = getChar();
+                                } else {
+                                    yyCh = getChar();
+                                    if (yyCh == quoteChar) {
+                                        trippelQuote = 0;
+                                        break;
+                                    }
+                                }
+                            } else if (trippelQuote) {
+                                if ( yyStringLen < sizeof(yyString) - 1 )
+                                    yyString[yyStringLen++] = (char) yyCh;
+                                yyCh = getChar();
+                                continue;
+                            } else
+                                break;
+                        } else
+                            in = 1;
+
+                        if ( yyCh == '\\' ) {
+                            yyCh = getChar();
+
+                            if ( yyCh == 'x' ) {
+                                QByteArray hex = "0";
+
+                                yyCh = getChar();
+                                while ( isxdigit(yyCh) ) {
+                                    hex += (char) yyCh;
+                                    yyCh = getChar();
+                                }
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+                                sscanf_s( hex, "%x", &n );
+#else
+                                sscanf( hex, "%x", &n );
+#endif
+                                if ( yyStringLen < sizeof(yyString) - 1 )
+                                    yyString[yyStringLen++] = (char) n;
+                            } else if ( yyCh >= '0' && yyCh < '8' ) {
+                                QByteArray oct = "";
+                                int n = 0;
+
+                                do {
+                                    oct += (char) yyCh;
+                                    ++n;
+                                    yyCh = getChar();
+                                } while ( yyCh >= '0' && yyCh < '8' && n < 3 );
+    #if defined(_MSC_VER) && _MSC_VER >= 1400
+                                sscanf_s( oct, "%o", &n );
+    #else
+                                sscanf( oct, "%o", &n );
+    #endif
+                                if ( yyStringLen < sizeof(yyString) - 1 )
+                                    yyString[yyStringLen++] = (char) n;
+                            } else if ( yyCh == '\n' ) {
+                                yyCh = getChar();
+                            } else {
+                                const char *p = strchr( tab, yyCh );
+                                if ( yyStringLen < sizeof(yyString) - 1 )
+                                    yyString[yyStringLen++] = ( p == 0 ) ?
+                                            (char) yyCh : backTab[p - tab];
+                                yyCh = getChar();
+                            }
+                        } else {
+                            if (!yyCodecForSource) {
+                                if ( yyParsingUtf8 && yyCh >= 0x80 && !quiet) {
+                                    qWarning( "%s:%d: Non-ASCII character detected in trUtf8 string",
+                                              (const char *) yyFileName, yyLineNo );
+                                    quiet = true;
+                                }
+                                // common case: optimized
+                                if ( yyStringLen < sizeof(yyString) - 1 )
+                                    yyString[yyStringLen++] = (char) yyCh;
+                                yyCh = getChar();
+                            } else {
+                                QByteArray originalBytes;
+                                while ( yyCh != EOF && (trippelQuote || yyCh != '\n') && yyCh != quoteChar && yyCh != '\\' ) {
+                                    if ( yyParsingUtf8 && yyCh >= 0x80 && !quiet) {
+                                        qWarning( "%s:%d: Non-ASCII character detected in trUtf8 string",
+                                                (const char *) yyFileName, yyLineNo );
+                                        quiet = true;
+                                    }
+                                    originalBytes += (char)yyCh;
+                                    yyCh = getChar();
+                                }
+
+                                QString unicodeStr = yyCodecForSource->toUnicode(originalBytes);
+                                QByteArray convertedBytes;
+
+                                if (!yyCodecForTr->canEncode(unicodeStr) && !quiet) {
+                                    qWarning( "%s:%d: Cannot convert Python string from %s to %s",
+                                              (const char *) yyFileName, yyLineNo, yyCodecForSource->name().constData(),
+                                              yyCodecForTr->name().constData() );
+                                    quiet = true;
+                                }
+                                convertedBytes = yyCodecForTr->fromUnicode(unicodeStr);
+
+                                size_t len = qMin((size_t)convertedBytes.size(), sizeof(yyString) - yyStringLen - 1);
+                                memcpy(yyString + yyStringLen, convertedBytes.constData(), len);
+                                yyStringLen += len;
+                            }
+                        }
+                    }
+                    yyString[yyStringLen] = '\0';
+
+                    if ( yyCh != quoteChar ) {
+                        if (trippelQuote)
+                            qWarning("%s:%d: Empty or unterminated triple quoted string",
+                                    (const char *)yyFileName, yyLineNo);
+                        else
+                            qWarning("%s:%d: Unterminated string",
+                                    (const char *)yyFileName, yyLineNo);
+                    }
+
+                    if ( yyCh == EOF ) {
+                        return Tok_Eof;
+                    } else {
+                        yyCh = getChar();
+                        return Tok_String;
+                    }
+                    break;
+                case '(':
+                    if (yyParenDepth == 0)
+                        yyParenLineNo = yyCurLineNo;
+                        yyParenDepth++;
+                        yyCh = getChar();
+                        return Tok_LeftParen;
+                case ')':
+                    if (yyParenDepth == 0)
+                        yyParenLineNo = yyCurLineNo;
+                        yyParenDepth--;
+                        yyCh = getChar();
+                        return Tok_RightParen;
+                case ',':
+                    yyCh = getChar();
+                    return Tok_Comma;
+                case '.':
+                    yyCh = getChar();
+                    return Tok_Dot;
+                case '0':
+                case '1':
+                case '2':
+                case '3':
+                case '4':
+                case '5':
+                case '6':
+                case '7':
+                case '8':
+                case '9':
+                    {
+                        QByteArray ba;
+                        ba+=yyCh;
+                        yyCh = getChar();
+                        bool hex = yyCh == 'x';
+                        if ( hex ) {
+                            ba+=yyCh;
+                            yyCh = getChar();
+                        }
+                        while ( (hex ? isxdigit(yyCh) : isdigit(yyCh)) ) {
+                            ba+=yyCh;
+                            yyCh = getChar();
+                        }
+                        bool ok;
+                        yyInteger = ba.toLongLong(&ok);
+                        if (ok) return Tok_Integer;
+                        break;
+                    }
+                default:
+                    yyCh = getChar();
+            }
+        }
+    }
+    return Tok_Eof;
+}
+
+/*
+  The second part of this source file is the parser. It accomplishes
+  a very easy task: It finds all strings inside a tr() or translate()
+  call, and possibly finds out the context of the call. It supports
+  three cases:
+  (1) the context is specified, as in FunnyDialog.tr("Hello") or
+     translate("FunnyDialog", "Hello");
+  (2) the call appears within an inlined function;
+  (3) the call appears within a function defined outside the class definition.
+*/
+
+static int yyTok;
+
+static bool match( int t )
+{
+    bool matches = ( yyTok == t );
+    if ( matches )
+        yyTok = getToken();
+    return matches;
+}
+
+static bool matchString( QByteArray *s )
+{
+    bool matches = ( yyTok == Tok_String );
+    *s = "";
+    while ( yyTok == Tok_String ) {
+        *s += yyString;
+        yyTok = getToken();
+    }
+    return matches;
+}
+
+static bool matchStringOrNone(QByteArray *s)
+{
+    bool matches = matchString(s);
+
+    if (!matches)
+    matches = match(Tok_None);
+
+    return matches;
+}
+
+/*
+ * match any expression that can return a number, which can be
+ * 1. Literal number (e.g. '11')
+ * 2. simple identifier (e.g. 'm_count')
+ * 3. simple function call (e.g. 'size()' )
+ * 4. function call on an object (e.g. 'list.size()')
+ *
+ * Other cases:
+ * size(2,4)
+ * list().size()
+ * list(a,b).size(2,4)
+ * etc...
+ */
+static bool matchExpression()
+{
+    if (match(Tok_Integer)) {
+        return true;
+    }
+
+    int parenlevel = 0;
+    while (match(Tok_Ident) || parenlevel > 0) {
+        if (yyTok == Tok_RightParen) {
+            if (parenlevel == 0) break;
+            --parenlevel;
+            yyTok = getToken();
+        } else if (yyTok == Tok_LeftParen) {
+            yyTok = getToken();
+            if (yyTok == Tok_RightParen) {
+                yyTok = getToken();
+            } else {
+                ++parenlevel;
+            }
+        } else if (yyTok == Tok_Ident) {
+            continue;
+        } else if (parenlevel == 0) {
+            return false;
+        }
+    }
+    return true;
+}
+
+static void parse( MetaTranslator *tor, const char *initialContext,
+           const char *defaultContext )
+{
+    QMap<QByteArray, QByteArray> qualifiedContexts;
+    QByteArray context;
+    QByteArray text;
+    QByteArray com;
+    QByteArray functionContext = initialContext;
+    QByteArray prefix;
+    bool utf8 = false;
+
+    yyTok = getToken();
+    while ( yyTok != Tok_Eof ) {
+        switch ( yyTok ) {
+        case Tok_class:
+                yyTok = getToken();
+                functionContext = yyIdent;
+                yyTok = getToken();
+                break;
+            case Tok_tr:
+            case Tok_trUtf8:
+                utf8 = (yyTok == Tok_trUtf8 || (yyCodecForTr && strcmp(yyCodecForTr->name(), "UTF-8") == 0));
+                yyTok = getToken();
+                if (match(Tok_LeftParen) && matchString(&text))
+                {
+                    com = "";
+                    bool plural = false;
+
+                    // Note that this isn't as rigorous as the parsing of
+                    // translate() below.
+                    if (match(Tok_RightParen))
+                    {
+                        // There is no comment or plural arguments.
+                    }
+                    else if (match(Tok_Comma) && matchStringOrNone(&com))
+                    {
+                        // There is a comment argument.
+                        if (match(Tok_RightParen))
+                        {
+                            // There is no plural argument.
+                        }
+                        else if (match(Tok_Comma))
+                        {
+                            // There is a plural argument.
+                            plural = true;
+                        }
+                    }
+
+                    if (prefix.isNull())
+                        context = defaultContext;
+                    else if (qstrcmp(prefix, "self") == 0)
+                        context = functionContext;
+                    else
+                        context = prefix;
+
+                    prefix = (const char *) 0;
+
+                    if (qualifiedContexts.contains(context))
+                        context = qualifiedContexts[context];
+
+                    if (!text.isEmpty())
+                    {
+                        tor->insert(MetaTranslatorMessage(context, text, com, 
+                                yyFileName, yyParenLineNo,
+                                QStringList(), utf8,
+                                MetaTranslatorMessage::Unfinished, plural));
+                    }
+                }
+                break;
+            case Tok_translate:
+                yyTok = getToken();
+                if ( match(Tok_LeftParen) &&
+                 matchString(&context) &&
+                 match(Tok_Comma) &&
+                 matchString(&text) ) {
+                    com = "";
+                    bool plural = false;
+                    if (!match(Tok_RightParen)) {
+                        // look for comment
+                        if ( match(Tok_Comma) && matchStringOrNone(&com)) {
+                            if (!match(Tok_RightParen)) {
+                                // Look for n.
+                                if (match(Tok_Comma)) {
+                                    if (matchExpression() && match(Tok_RightParen)) {
+                                        plural = true;
+                                    } else {
+                                        break;
+                                    }
+                                } else {
+                                    break;
+                                }
+                            }
+                        } else {
+                            break;
+                        }
+                    }
+                    if (!text.isEmpty())
+                    {
+                        tor->insert( MetaTranslatorMessage(context, text, com, 
+                                                        yyFileName, yyParenLineNo,
+                                                        QStringList(), true,
+                                                        MetaTranslatorMessage::Unfinished,
+                                                        plural) );
+                    }
+                }
+                break;
+            case Tok_Ident:
+                if ( !prefix.isNull() )
+                    prefix += ".";
+                prefix += yyIdent;
+                yyTok = getToken();
+                if ( yyTok != Tok_Dot )
+                    prefix = (const char *) 0;
+                break;
+            case Tok_Comment:
+                com = yyComment;
+                com = com.simplified();
+                if ( com.left(sizeof(MagicComment) - 1) == MagicComment ) {
+                    com.remove( 0, sizeof(MagicComment) - 1 );
+                    int k = com.indexOf( ' ' );
+                    if ( k == -1 ) {
+                        context = com;
+                    } else {
+                        context = com.left( k );
+                        com.remove( 0, k + 1 );
+                        tor->insert( MetaTranslatorMessage(context, "", com,
+                                                        yyFileName, yyParenLineNo,
+                                                        QStringList(), false) );
+    
+                    }
+                }
+                yyTok = getToken();
+                break;
+            default:
+                yyTok = getToken();
+        }
+    }
+
+    if ( yyParenDepth != 0 )
+        qWarning( "%s: Unbalanced parentheses in Python code",
+            (const char *) yyFileName );
+}
+
+void fetchtr_py(const char *fileName, MetaTranslator *tor,
+        const char *defaultContext, bool mustExist,
+        const QByteArray &codecForSource, const char *tr_func,
+        const char *translate_func)
+{
+    tr_function = tr_func;
+    translate_function = translate_func;
+
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+    if (fopen_s(&yyInFile, fileName, "r")) {
+        if ( mustExist ) {
+            char buf[100];
+            strerror_s(buf, sizeof(buf), errno);
+            fprintf( stderr,
+                     "pylupdate5 error: Cannot open Python source file '%s': %s\n",
+                     fileName, buf );
+        }
+#else
+    yyInFile = fopen( fileName, "r" );
+    if ( yyInFile == 0 ) {
+        if ( mustExist )
+            fprintf( stderr,
+                     "pylupdate5 error: Cannot open Python source file '%s': %s\n",
+                     fileName, strerror(errno) );
+#endif
+        return;
+    }
+
+    startTokenizer( fileName, getCharFromFile, peekCharFromFile, tor->codecForTr(), QTextCodec::codecForName(codecForSource) );
+    parse( tor, 0, defaultContext );
+    fclose( yyInFile );
+}
+
+class UiHandler : public QXmlDefaultHandler
+{
+public:
+    UiHandler( MetaTranslator *translator, const char *fileName )
+        : tor( translator ), fname( fileName ), comment( "" ) { }
+
+    virtual bool startElement( const QString& namespaceURI,
+                               const QString& localName, const QString& qName,
+                               const QXmlAttributes& atts );
+    virtual bool endElement( const QString& namespaceURI,
+                             const QString& localName, const QString& qName );
+    virtual bool characters( const QString& ch );
+    virtual bool fatalError( const QXmlParseException& exception );
+
+    virtual void setDocumentLocator(QXmlLocator *locator)
+    {
+        m_locator = locator;
+    }
+    QXmlLocator *m_locator;
+private:
+    void flush();
+
+    MetaTranslator *tor;
+    QByteArray fname;
+    QString context;
+    QString source;
+    QString comment;
+
+    QString accum;
+    int m_lineNumber;
+    bool trString;
+};
+
+bool UiHandler::startElement( const QString& /* namespaceURI */,
+                              const QString& /* localName */,
+                              const QString& qName,
+                              const QXmlAttributes& atts )
+{
+    if ( qName == QString("item") ) {
+        flush();
+        if ( !atts.value(QString("text")).isEmpty() )
+            source = atts.value( QString("text") );
+    } else if ( qName == QString("string") ) {
+        flush();
+        if (atts.value(QString("notr")).isEmpty() ||
+            atts.value(QString("notr")) != QString("true")) {
+            trString = true;
+            comment = atts.value(QString("comment"));
+        } else {
+            trString = false;
+        }
+    }
+    if (trString) m_lineNumber = m_locator->lineNumber();
+    accum.truncate( 0 );
+    return true;
+}
+
+bool UiHandler::endElement( const QString& /* namespaceURI */,
+                            const QString& /* localName */,
+                            const QString& qName )
+{
+    accum.replace( QRegExp(QString("\r\n")), "\n" );
+
+    if ( qName == QString("class") ) {
+        if ( context.isEmpty() )
+            context = accum;
+    } else if ( qName == QString("string") && trString ) {
+        source = accum;
+    } else if ( qName == QString("comment") ) {
+        comment = accum;
+        flush();
+    } else {
+        flush();
+    }
+    return true;
+}
+
+bool UiHandler::characters( const QString& ch )
+{
+    accum += ch;
+    return true;
+}
+
+bool UiHandler::fatalError( const QXmlParseException& exception )
+{
+    QString msg;
+    msg.sprintf( "Parse error at line %d, column %d (%s).",
+                 exception.lineNumber(), exception.columnNumber(),
+                 exception.message().toLatin1().data() );
+    fprintf( stderr, "XML error: %s\n", msg.toLatin1().data() );
+    return false;
+}
+
+void UiHandler::flush()
+{
+    if ( !context.isEmpty() && !source.isEmpty() )
+        tor->insert( MetaTranslatorMessage(context.toUtf8(), source.toUtf8(),
+                                           comment.toUtf8(), QString(fname), m_lineNumber,
+                                           QStringList(), true) );
+    source.truncate( 0 );
+    comment.truncate( 0 );
+}
+
+void fetchtr_ui( const char *fileName, MetaTranslator *tor,
+                 const char * /* defaultContext */, bool mustExist )
+{
+    QFile f( fileName );
+    if ( !f.open(QIODevice::ReadOnly) ) {
+        if ( mustExist ) {
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+            char buf[100];
+            strerror_s(buf, sizeof(buf), errno);
+            fprintf( stderr, "pylupdate5 error: cannot open UI file '%s': %s\n",
+                     fileName, buf );
+#else
+            fprintf( stderr, "pylupdate5 error: cannot open UI file '%s': %s\n",
+                     fileName, strerror(errno) );
+#endif
+        }
+        return;
+    }
+
+    QXmlInputSource in( &f );
+    QXmlSimpleReader reader;
+    reader.setFeature( "http://xml.org/sax/features/namespaces", false );
+    reader.setFeature( "http://xml.org/sax/features/namespace-prefixes", true );
+    reader.setFeature( "http://trolltech.com/xml/features/report-whitespace"
+                       "-only-CharData", false );
+    QXmlDefaultHandler *hand = new UiHandler( tor, fileName );
+    reader.setContentHandler( hand );
+    reader.setErrorHandler( hand );
+
+    if ( !reader.parse(in) )
+        fprintf( stderr, "%s: Parse error in UI file\n", fileName );
+    reader.setContentHandler( 0 );
+    reader.setErrorHandler( 0 );
+    delete hand;
+    f.close();
+}
diff --git a/pylupdate/main.cpp b/pylupdate/main.cpp
new file mode 100644
index 0000000..0c61ca6
--- /dev/null
+++ b/pylupdate/main.cpp
@@ -0,0 +1,317 @@
+/**********************************************************************
+** Copyright (C) 2002-2007 Detlev Offenbach <detlev at die-offenbachs.de>
+**
+** This is a modified version of lupdate. The original is part of Qt-Linguist.
+** The copyright of the original file can be found below.
+**
+** This version is modified to handle python sources.
+**
+**   The file is provided AS IS with NO WARRANTY OF ANY KIND,
+**   INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+**   A PARTICULAR PURPOSE.
+****************************************************************************/
+
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <metatranslator.h>
+#include <proparser.h>
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qtextstream.h>
+#include <qtextcodec.h>
+
+#include <errno.h>
+#include <string.h>
+
+// defined in fetchtr.cpp
+extern void fetchtr_py(const char *fileName, MetaTranslator *tor,
+        const char *defaultContext, bool mustExist,
+        const QByteArray &codecForSource, const char *tr_func,
+        const char *translate_func);
+extern void fetchtr_ui( const char *fileName, MetaTranslator *tor,
+                         const char *defaultContext, bool mustExist );
+
+
+
+// defined in merge.cpp
+extern void merge( const MetaTranslator *tor, const MetaTranslator *virginTor, MetaTranslator *out,
+                   bool verbose, bool noObsolete );
+
+typedef QList<MetaTranslatorMessage> TML;
+
+static void printUsage()
+{
+    fprintf( stderr, "Usage:\n"
+             "    pylupdate5 [options] project-file\n"
+             "    pylupdate5 [options] source-files -ts ts-files\n"
+             "Options:\n"
+             "    -help  Display this information and exit\n"
+             "    -version\n"
+             "           Display the version of pylupdate5 and exit\n"
+             "    -verbose\n"
+             "           Explain what is being done\n"
+             "    -noobsolete\n"
+             "           Drop all obsolete strings\n"
+             "    -tr-function name\n"
+             "           name() may be used instead of tr()\n"
+             "    -translate-function name\n"
+             "           name() may be used instead of translate()\n");
+}
+
+static void updateTsFiles( const MetaTranslator& fetchedTor,
+                           const QStringList& tsFileNames, const QString& codecForTr,
+                           bool noObsolete, bool verbose )
+{
+    QStringList::ConstIterator t = tsFileNames.begin();
+    QDir dir;
+    while ( t != tsFileNames.end() ) {
+        QString fn = dir.relativeFilePath(*t);
+        MetaTranslator tor;
+        MetaTranslator out;
+        tor.load( *t );
+        if ( !codecForTr.isEmpty() )
+            tor.setCodec( codecForTr.toLatin1() );
+        if ( verbose )
+            fprintf( stderr, "Updating '%s'...\n", fn.toLatin1().constData() );
+ 
+        merge( &tor, &fetchedTor, &out, verbose, noObsolete );
+        if ( noObsolete )
+            out.stripObsoleteMessages();
+        out.stripEmptyContexts();
+        if ( !out.save(*t) ) {
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+            char buf[100];
+            strerror_s(buf, sizeof(buf), errno);
+            fprintf( stderr, "pylupdate5 error: Cannot save '%s': %s\n",
+                     fn.toLatin1().constData(), buf );
+#else
+            fprintf( stderr, "pylupdate5 error: Cannot save '%s': %s\n",
+                     fn.toLatin1().constData(), strerror(errno) );
+#endif
+        }
+        ++t;
+    }
+}
+
+int main( int argc, char **argv )
+{
+    QString defaultContext = "@default";
+    MetaTranslator fetchedTor;
+    QByteArray codecForTr;
+    QByteArray codecForSource;
+    QStringList tsFileNames;
+    QStringList uiFileNames;
+
+    bool verbose = false;
+    bool noObsolete = false;
+    bool metSomething = false;
+    int numFiles = 0;
+    bool standardSyntax = true;
+    bool metTsFlag = false;
+    const char *tr_func = 0;
+    const char *translate_func = 0;
+
+    int i;
+
+    for ( i = 1; i < argc; i++ ) {
+        if ( qstrcmp(argv[i], "-ts") == 0 )
+            standardSyntax = false;
+    }
+
+    for ( i = 1; i < argc; i++ ) {
+        if ( qstrcmp(argv[i], "-help") == 0 ) {
+            printUsage();
+            return 0;
+        } else if ( qstrcmp(argv[i], "-noobsolete") == 0 ) {
+            noObsolete = true;
+            continue;
+        } else if ( qstrcmp(argv[i], "-verbose") == 0 ) {
+            verbose = true;
+            continue;
+        } else if ( qstrcmp(argv[i], "-version") == 0 ) {
+            fprintf( stderr, "pylupdate5 version %s\n", QT_VERSION_STR );
+            return 0;
+        } else if ( qstrcmp(argv[i], "-ts") == 0 ) {
+            metTsFlag = true;
+            continue;
+        } else if ( qstrcmp(argv[i], "-tr-function") == 0 ) {
+            if (!argv[++i])
+            {
+                fprintf(stderr,
+                        "pylupdate5 error: missing -tr-function name\n");
+                return 2;
+            }
+
+            tr_func = argv[i];
+            continue;
+        } else if ( qstrcmp(argv[i], "-translate-function") == 0 ) {
+            if (!argv[++i])
+            {
+                fprintf(stderr,
+                        "pylupdate5 error: missing -translate-function name\n");
+                return 2;
+            }
+
+            translate_func = argv[i];
+            continue;
+        }
+
+        numFiles++;
+
+        QString fullText;
+
+        if ( !metTsFlag ) {
+            QFile f( argv[i] );
+            if ( !f.open(QIODevice::ReadOnly) ) {
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+                char buf[100];
+                strerror_s(buf, sizeof(buf), errno);
+                fprintf( stderr, "pylupdate5 error: Cannot open file '%s': %s\n",
+                         argv[i], buf );
+#else
+                fprintf( stderr, "pylupdate5 error: Cannot open file '%s': %s\n",
+                         argv[i], strerror(errno) );
+#endif
+                return 1;
+            }
+
+            QTextStream t( &f );
+            fullText = t.readAll();
+            f.close();
+        }
+
+        QString oldDir = QDir::currentPath();
+        QDir::setCurrent( QFileInfo(argv[i]).path() );
+
+        if ( standardSyntax ) {
+            fetchedTor = MetaTranslator();
+            codecForTr.clear();
+            codecForSource.clear();
+            tsFileNames.clear();
+            uiFileNames.clear();
+
+            QMap<QString, QString> tagMap = proFileTagMap( fullText );
+            QMap<QString, QString>::Iterator it;
+
+            for ( it = tagMap.begin(); it != tagMap.end(); ++it ) {
+                QStringList toks = it.value().split(' ');
+                QStringList::Iterator t;
+
+                for ( t = toks.begin(); t != toks.end(); ++t ) {
+                    if ( it.key() == "SOURCES" ) {
+                        fetchtr_py((*t).toLatin1(), &fetchedTor,
+                                defaultContext.toLatin1(), true,
+                                codecForSource, tr_func, translate_func);
+                        metSomething = true;
+                    } else if ( it.key() == "TRANSLATIONS" ) {
+                        tsFileNames.append( *t );
+                        metSomething = true;
+                    } else if ( it.key() == "CODEC" ||
+                                it.key() == "DEFAULTCODEC" ||
+                                it.key() == "CODECFORTR" ) {
+                        codecForTr = (*t).toLatin1();
+                        fetchedTor.setCodecForTr(codecForTr);
+                    } else if ( it.key() == "CODECFORSRC" ) {
+                        codecForSource = (*t).toLatin1();
+                    } else if ( it.key() == "FORMS" ) {
+                fetchtr_ui( (*t).toLatin1(), &fetchedTor, defaultContext.toLatin1(), true);
+            }
+                }
+            }
+
+            updateTsFiles( fetchedTor, tsFileNames, codecForTr, noObsolete, verbose );
+
+            if ( !metSomething ) {
+                fprintf( stderr,
+                         "pylupdate5 warning: File '%s' does not look like a"
+                         " project file\n",
+                         argv[i] );
+            } else if ( tsFileNames.isEmpty() ) {
+                fprintf( stderr,
+                         "pylupdate5 warning: Met no 'TRANSLATIONS' entry in"
+                         " project file '%s'\n",
+                         argv[i] );
+            }
+        } else {
+            if ( metTsFlag ) {
+                if ( QString(argv[i]).toLower().endsWith(".ts") ) {
+                    QFileInfo fi( argv[i] );
+                    if ( !fi.exists() || fi.isWritable() ) {
+                        tsFileNames.append( argv[i] );
+                    } else {
+                        fprintf( stderr,
+                                 "pylupdate5 warning: For some reason, I cannot"
+                                 " save '%s'\n",
+                                 argv[i] );
+                    }
+        } else {
+                    fprintf( stderr,
+                             "pylupdate5 error: File '%s' lacks .ts extension\n",
+                             argv[i] );
+                }
+            } else {
+                QFileInfo fi(argv[i]);
+        if ( fi.suffix() == "py" || fi.suffix() == "pyw" ) {
+            fetchtr_py(fi.fileName().toLatin1(), &fetchedTor,
+                    defaultContext.toLatin1(), true, codecForSource, tr_func,
+                    translate_func);
+        } else {
+            fetchtr_ui( fi.fileName().toLatin1(), &fetchedTor, defaultContext.toLatin1(), true);
+        }
+            }
+        }
+        QDir::setCurrent( oldDir );
+    }
+
+    if ( !standardSyntax )
+        updateTsFiles( fetchedTor, tsFileNames, codecForTr, noObsolete, verbose );
+
+    if ( numFiles == 0 ) {
+        printUsage();
+        return 1;
+    }
+    return 0;
+}
diff --git a/pylupdate/merge.cpp b/pylupdate/merge.cpp
new file mode 100644
index 0000000..11fce5f
--- /dev/null
+++ b/pylupdate/merge.cpp
@@ -0,0 +1,216 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "metatranslator.h"
+#include "simtexth.h"
+#include <stdio.h>
+
+// defined in numberh.cpp
+extern int applyNumberHeuristic( MetaTranslator *tor );
+// defined in sametexth.cpp
+extern int applySameTextHeuristic( MetaTranslator *tor );
+
+typedef QList<MetaTranslatorMessage> TML;
+
+/*
+  Merges two MetaTranslator objects into the first one. The first one
+  is a set of source texts and translations for a previous version of
+  the internationalized program; the second one is a set of fresh
+  source texts newly extracted from the source code, without any
+  translation yet.
+*/
+
+void merge( const MetaTranslator *tor, const MetaTranslator *virginTor, MetaTranslator *outTor, bool verbose, bool noObsolete )
+{
+    int known = 0;
+    int neww = 0;
+    int obsoleted = 0;
+    int UntranslatedObsoleted = 0;
+    int similarTextHeuristicCount = 0;
+    TML all = tor->messages();
+    TML::Iterator it;
+    outTor->setLanguageCode(tor->languageCode());
+    outTor->setSourceLanguageCode(tor->sourceLanguageCode());
+
+    /*
+      The types of all the messages from the vernacular translator
+      are updated according to the virgin translator.
+    */
+    for ( it = all.begin(); it != all.end(); ++it ) {
+        MetaTranslatorMessage::Type newType = MetaTranslatorMessage::Finished;
+        MetaTranslatorMessage m = *it;
+
+        // skip context comment
+        if ( !QByteArray(m.sourceText()).isEmpty() ) {
+            MetaTranslatorMessage mv = virginTor->find(m.context(), m.sourceText(), m.comment());
+            if ( mv.isNull() ) {
+                mv = virginTor->find(m.context(), m.comment(), m.fileName(), m.lineNumber());
+                if ( mv.isNull() ) {
+                    // did not find it in the virgin, mark it as obsolete
+                    newType = MetaTranslatorMessage::Obsolete;
+                    if ( m.type() != MetaTranslatorMessage::Obsolete )
+                        obsoleted++;
+                } else {
+                    // Do not just accept it if its on the same line number, but different source text.
+                    // Also check if the texts are more or less similar before we consider them to represent the same message...
+                    // ### The QString() cast is evil
+                    if (getSimilarityScore(QString(m.sourceText()), mv.sourceText()) >= textSimilarityThreshold) {
+                        // It is just slightly modified, assume that it is the same string
+                        m = MetaTranslatorMessage(m.context(), mv.sourceText(), m.comment(), m.fileName(), m.lineNumber(), m.translations());
+                        m.setPlural(mv.isPlural());
+
+                        // Mark it as unfinished. (Since the source text was changed it might require re-translating...)
+                        newType = MetaTranslatorMessage::Unfinished;
+                        ++similarTextHeuristicCount;
+                    } else {
+                        // The virgin and vernacular sourceTexts are so different that we could not find it.
+                        newType = MetaTranslatorMessage::Obsolete;
+                        if ( m.type() != MetaTranslatorMessage::Obsolete )
+                            obsoleted++;
+                    }
+                    neww++;
+                }
+            } else {
+                switch ( m.type() ) {
+                case MetaTranslatorMessage::Finished:
+                default:
+                    if (m.isPlural() == mv.isPlural()) {
+                        newType = MetaTranslatorMessage::Finished;
+                    } else {
+                        newType = MetaTranslatorMessage::Unfinished;
+                    }
+                    known++;
+                    break;
+                case MetaTranslatorMessage::Unfinished:
+                    newType = MetaTranslatorMessage::Unfinished;
+                    known++;
+                    break;
+                case MetaTranslatorMessage::Obsolete:
+                    newType = MetaTranslatorMessage::Unfinished;
+                    neww++;
+                }
+
+                // Always get the filename and linenumber info from the virgin Translator, in case it has changed location.
+                // This should also enable us to read a file that does not have the <location> element.
+                m.setFileName(mv.fileName());
+                m.setLineNumber(mv.lineNumber());
+                m.setPlural(mv.isPlural());             // ### why not use operator=?
+            }
+
+            if (newType == MetaTranslatorMessage::Obsolete && !m.isTranslated()) {
+                ++UntranslatedObsoleted;
+            }
+
+            m.setType(newType);
+            outTor->insert(m);
+        }
+    }
+
+    /*
+      Messages found only in the virgin translator are added to the
+      vernacular translator. Among these are all the context comments.
+    */
+    all = virginTor->messages();
+
+    for ( it = all.begin(); it != all.end(); ++it ) {
+        MetaTranslatorMessage mv = *it;
+        bool found = tor->contains(mv.context(), mv.sourceText(), mv.comment());
+        if (!found) {
+            MetaTranslatorMessage m = tor->find(mv.context(), mv.comment(), mv.fileName(), mv.lineNumber());
+            if (!m.isNull()) {
+                if (getSimilarityScore(QString(m.sourceText()), mv.sourceText()) >= textSimilarityThreshold) {
+                    found = true;
+                }
+            } else {
+                found = false;
+            }
+        }
+        if ( !found ) {
+            outTor->insert( mv );
+            if ( !QByteArray(mv.sourceText()).isEmpty() )
+                neww++;
+        }
+    }
+
+    /*
+      The same-text heuristic handles cases where a message has an
+      obsolete counterpart with a different context or comment.
+    */
+    int sameTextHeuristicCount = applySameTextHeuristic( outTor );
+
+    /*
+      The number heuristic handles cases where a message has an
+      obsolete counterpart with mostly numbers differing in the
+      source text.
+    */
+    int sameNumberHeuristicCount = applyNumberHeuristic( outTor );
+
+    if ( verbose ) {
+        int totalFound = neww + known;
+        fprintf( stderr, "    Found %d source text%s (%d new and %d already existing)\n",
+            totalFound, totalFound == 1 ? "" : "s", neww, known);
+
+        if (obsoleted) {
+            if (noObsolete) {
+                fprintf( stderr, "    Removed %d obsolete entr%s\n", 
+                obsoleted, obsoleted == 1 ? "y" : "ies" );
+            } else {
+                int total = obsoleted - UntranslatedObsoleted;
+                fprintf( stderr, "    Kept %d obsolete translation%s\n", 
+                total, total == 1 ? "" : "s" );
+
+                fprintf( stderr, "    Removed %d obsolete untranslated entr%s\n", 
+                UntranslatedObsoleted, UntranslatedObsoleted == 1 ? "y" : "ies" );
+
+            }
+        }
+
+        if (sameNumberHeuristicCount) 
+            fprintf( stderr, "    Number heuristic provided %d translation%s\n", 
+                     sameNumberHeuristicCount, sameNumberHeuristicCount == 1 ? "" : "s" );
+        if (sameTextHeuristicCount) 
+            fprintf( stderr, "    Same-text heuristic provided %d translation%s\n", 
+                     sameTextHeuristicCount, sameTextHeuristicCount == 1 ? "" : "s" );
+        if (similarTextHeuristicCount)
+            fprintf( stderr, "    Similar-text heuristic provided %d translation%s\n", 
+                     similarTextHeuristicCount, similarTextHeuristicCount == 1 ? "" : "s" );
+    }
+}
diff --git a/pylupdate/metatranslator.cpp b/pylupdate/metatranslator.cpp
new file mode 100644
index 0000000..5c5f6d8
--- /dev/null
+++ b/pylupdate/metatranslator.cpp
@@ -0,0 +1,803 @@
+/**********************************************************************
+** Copyright (C) 2002-2007 Detlev Offenbach <detlev at die-offenbachs.de>
+**
+** This is a modified version of lupdate. The original is part of Qt-Linguist.
+** The copyright of the original file can be found below.
+**
+** This version is modified to handle python sources.
+**
+**   The file is provided AS IS with NO WARRANTY OF ANY KIND,
+**   INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+**   A PARTICULAR PURPOSE.
+****************************************************************************/
+
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "metatranslator.h"
+
+#include <qcoreapplication.h>
+#include <qbytearray.h>
+#include <qfile.h>
+#include <qtextcodec.h>
+#include <qtextstream.h>
+#include <qxml.h>
+#include <qlocale.h>
+
+static bool encodingIsUtf8( const QXmlAttributes& atts )
+{
+    for ( int i = 0; i < atts.length(); i++ ) {
+        // utf8="true" is a pre-3.0 syntax
+        if ( atts.qName(i) == QString("utf8") ) {
+            return ( atts.value(i) == QString("true") );
+        } else if ( atts.qName(i) == QString("encoding") ) {
+            return ( atts.value(i) == QString("UTF-8") );
+        }
+    }
+    return false;
+}
+
+class TsHandler : public QXmlDefaultHandler
+{
+public:
+    TsHandler( MetaTranslator *translator )
+        : tor( translator ), type( MetaTranslatorMessage::Finished ),
+          inMessage( false ), ferrorCount( 0 ), contextIsUtf8( false ),
+          messageIsUtf8( false ), m_isPlural(false) { }
+
+    virtual bool startElement( const QString& namespaceURI,
+                               const QString& localName, const QString& qName,
+                               const QXmlAttributes& atts );
+    virtual bool endElement( const QString& namespaceURI,
+                             const QString& localName, const QString& qName );
+    virtual bool characters( const QString& ch );
+    virtual bool fatalError( const QXmlParseException& exception );
+    QString language() const { return m_language; }
+    QString sourceLanguage() const { return m_sourceLanguage; }
+
+private:
+    MetaTranslator *tor;
+    MetaTranslatorMessage::Type type;
+    bool inMessage;
+    QString m_language;
+    QString m_sourceLanguage;
+    QString context;
+    QString source;
+    QString comment;
+    QStringList translations;
+    QString m_fileName;
+    int     m_lineNumber;
+
+    QString accum;
+    int ferrorCount;
+    bool contextIsUtf8;
+    bool messageIsUtf8;
+    bool m_isPlural;
+};
+
+bool TsHandler::startElement( const QString& /* namespaceURI */,
+                              const QString& /* localName */,
+                              const QString& qName,
+                              const QXmlAttributes& atts )
+{
+    if ( qName == QString("byte") ) {
+        for ( int i = 0; i < atts.length(); i++ ) {
+            if ( atts.qName(i) == QString("value") ) {
+                QString value = atts.value( i );
+                int base = 10;
+                if ( value.startsWith("x") ) {
+                    base = 16;
+                    value = value.mid( 1 );
+                }
+                int n = value.toUInt( 0, base );
+                if ( n != 0 )
+                    accum += QChar( n );
+            }
+        }
+    } else {
+        if ( qName == QString("TS") ) {
+            m_language = atts.value(QLatin1String("language"));
+            m_sourceLanguage = atts.value(QLatin1String("sourcelanguage"));
+        } else if ( qName == QString("context") ) {
+            context.truncate( 0 );
+            source.truncate( 0 );
+            comment.truncate( 0 );
+            translations.clear();
+            contextIsUtf8 = encodingIsUtf8( atts );
+        } else if ( qName == QString("message") ) {
+            inMessage = true;
+            type = MetaTranslatorMessage::Finished;
+            source.truncate( 0 );
+            comment.truncate( 0 );
+            translations.clear();
+            messageIsUtf8 = encodingIsUtf8( atts );
+            m_isPlural = atts.value(QLatin1String("numerus")).compare(QLatin1String("yes")) == 0;
+        } else if (qName == QString("location") && inMessage) {
+            bool bOK;
+            int lineNo = atts.value(QString("line")).toInt(&bOK);
+            if (!bOK) lineNo = -1;
+            m_fileName = atts.value(QString("filename"));
+            m_lineNumber = lineNo;
+        } else if ( qName == QString("translation") ) {
+            for ( int i = 0; i < atts.length(); i++ ) {
+                if ( atts.qName(i) == QString("type") ) {
+                    if ( atts.value(i) == QString("unfinished") )
+                        type = MetaTranslatorMessage::Unfinished;
+                    else if ( atts.value(i) == QString("obsolete") )
+                        type = MetaTranslatorMessage::Obsolete;
+                    else
+                        type = MetaTranslatorMessage::Finished;
+                }
+            }
+        }
+        accum.truncate( 0 );
+    }
+    return true;
+}
+
+bool TsHandler::endElement( const QString& /* namespaceURI */,
+                            const QString& /* localName */,
+                            const QString& qName )
+{
+    if ( qName == QString("codec") || qName == QString("defaultcodec") ) {
+        // "codec" is a pre-3.0 syntax
+        tor->setCodec( accum.toLatin1() );
+    } else if ( qName == QString("name") ) {
+        context = accum;
+    } else if ( qName == QString("source") ) {
+        source = accum;
+    } else if ( qName == QString("comment") ) {
+        if ( inMessage ) {
+            comment = accum;
+        } else {
+            if ( contextIsUtf8 )
+                tor->insert( MetaTranslatorMessage(context.toUtf8(),
+                             ContextComment,
+                             accum.toUtf8(), QString(), 0,
+                             QStringList(), true,
+                             MetaTranslatorMessage::Unfinished) );
+            else
+                tor->insert( MetaTranslatorMessage(context.toLatin1(),
+                             ContextComment,
+                             accum.toLatin1(), QString(), 0,
+                             QStringList(), false,
+                             MetaTranslatorMessage::Unfinished) );
+        }
+    } else if ( qName == QString("numerusform") ) {
+        translations.append(accum);
+        m_isPlural = true;
+    } else if ( qName == QString("translation") ) {
+        if (translations.isEmpty())
+            translations.append(accum);
+    } else if ( qName == QString("message") ) {
+        if ( messageIsUtf8 )
+            tor->insert( MetaTranslatorMessage(context.toUtf8(), source.toUtf8(),
+                                               comment.toUtf8(), m_fileName, m_lineNumber,
+                                               translations, true, type, m_isPlural) );
+        else
+            tor->insert( MetaTranslatorMessage(context.toLatin1(), source.toLatin1(),
+                                               comment.toLatin1(), m_fileName, m_lineNumber,
+                                               translations, false, type, m_isPlural) );
+        inMessage = false;
+    }
+    return true;
+}
+
+bool TsHandler::characters( const QString& ch )
+{
+    QString t = ch;
+    t.replace( "\r", "" );
+    accum += t;
+    return true;
+}
+
+bool TsHandler::fatalError( const QXmlParseException& exception )
+{
+    if ( ferrorCount++ == 0 ) {
+        QString msg;
+        msg.sprintf( "Parse error at line %d, column %d (%s).",
+                     exception.lineNumber(), exception.columnNumber(),
+                     exception.message().toLatin1().data() );
+        fprintf( stderr, "XML error: %s\n", msg.toLatin1().data() );
+    }
+    return false;
+}
+
+static QString numericEntity( int ch )
+{
+    return QString( ch <= 0x20 ? "<byte value=\"x%1\"/>" : "&#x%1;" )
+           .arg( ch, 0, 16 );
+}
+
+static QString protect( const QByteArray& str )
+{
+    QString result;
+    int len = (int) str.length();
+    for ( int k = 0; k < len; k++ ) {
+        switch( str[k] ) {
+        case '\"':
+            result += QString( """ );
+            break;
+        case '&':
+            result += QString( "&" );
+            break;
+        case '>':
+            result += QString( ">" );
+            break;
+        case '<':
+            result += QString( "<" );
+            break;
+        case '\'':
+            result += QString( "'" );
+            break;
+        default:
+            if ( (uchar) str[k] < 0x20 && str[k] != '\n' )
+                result += numericEntity( (uchar) str[k] );
+            else
+                result += str[k];
+        }
+    }
+    return result;
+}
+
+static QString evilBytes( const QByteArray& str, bool utf8 )
+{
+    if ( utf8 ) {
+        return protect( str );
+    } else {
+        QString result;
+        QByteArray t = protect( str ).toLatin1();
+        int len = (int) t.length();
+        for ( int k = 0; k < len; k++ ) {
+            if ( (uchar) t[k] >= 0x7f )
+                result += numericEntity( (uchar) t[k] );
+            else
+                result += QChar( t[k] );
+        }
+        return result;
+    }
+}
+
+MetaTranslatorMessage::MetaTranslatorMessage()
+    : utfeight( false ), ty( Unfinished ), m_plural(false)
+{
+}
+
+MetaTranslatorMessage::MetaTranslatorMessage( const char *context,
+                                              const char *sourceText,
+                                              const char *comment,
+                                              const QString &fileName,
+                                              int lineNumber,
+                                              const QStringList& translations,
+                                              bool utf8, Type type, bool plural )
+    : TranslatorMessage( context, sourceText, comment, fileName, lineNumber, translations ),
+      utfeight( false ), ty( type ), m_plural(plural)
+{
+    /*
+      Don't use UTF-8 if it makes no difference. UTF-8 should be
+      reserved for the real problematic case: non-ASCII (possibly
+      non-Latin1) characters in .ui files.
+    */
+    if ( utf8 ) {
+        if ( sourceText != 0 ) {
+            int i = 0;
+            while ( sourceText[i] != '\0' ) {
+                if ( (uchar) sourceText[i] >= 0x80 ) {
+                    utfeight = true;
+                    break;
+                }
+                i++;
+            }
+        }
+        if ( !utfeight && comment != 0 ) {
+            int i = 0;
+            while ( comment[i] != '\0' ) {
+                if ( (uchar) comment[i] >= 0x80 ) {
+                    utfeight = true;
+                    break;
+                }
+                i++;
+            }
+        }
+    }
+}
+
+MetaTranslatorMessage::MetaTranslatorMessage( const MetaTranslatorMessage& m )
+    : TranslatorMessage( m ), utfeight( m.utfeight ), ty( m.ty ), m_plural(m.m_plural)
+{
+}
+
+MetaTranslatorMessage& MetaTranslatorMessage::operator=(
+        const MetaTranslatorMessage& m )
+{
+    TranslatorMessage::operator=( m );
+    utfeight = m.utfeight;
+    ty = m.ty;
+    m_plural = m.m_plural;
+    return *this;
+}
+
+bool MetaTranslatorMessage::operator==( const MetaTranslatorMessage& m ) const
+{
+    return qstrcmp( context(), m.context() ) == 0 &&
+           qstrcmp( sourceText(), m.sourceText() ) == 0 &&
+           qstrcmp( comment(), m.comment() ) == 0;
+}
+
+bool MetaTranslatorMessage::operator<( const MetaTranslatorMessage& m ) const
+{
+    int delta = qstrcmp( context(), m.context() );
+    if ( delta == 0 ) {
+        delta = qstrcmp( sourceText(), m.sourceText() );
+        if ( delta == 0 )
+            delta = qstrcmp( comment(), m.comment() );
+    }
+    return delta < 0;
+}
+
+MetaTranslator::MetaTranslator()
+{
+    clear();
+}
+
+MetaTranslator::MetaTranslator( const MetaTranslator& tor )
+    : mm( tor.mm ), codecName( tor.codecName ), codec( tor.codec )
+{
+}
+
+MetaTranslator& MetaTranslator::operator=( const MetaTranslator& tor )
+{
+    mm = tor.mm;
+    codecName = tor.codecName;
+    codec = tor.codec;
+    return *this;
+}
+
+void MetaTranslator::clear()
+{
+    mm.clear();
+    codecName = "ISO-8859-1";
+    codec = 0;
+}
+
+bool MetaTranslator::load( const QString& filename )
+{
+    QFile f( filename );
+    if ( !f.open(QIODevice::ReadOnly) )
+        return false;
+
+    QXmlInputSource in( &f );
+    QXmlSimpleReader reader;
+    reader.setFeature( "http://xml.org/sax/features/namespaces", false );
+    reader.setFeature( "http://xml.org/sax/features/namespace-prefixes", true );
+    TsHandler *hand = new TsHandler( this );
+    reader.setContentHandler( static_cast<QXmlDefaultHandler*>(hand) );
+    reader.setErrorHandler( static_cast<QXmlDefaultHandler*>(hand) );
+
+    bool ok = reader.parse( in );
+    reader.setContentHandler( 0 );
+    reader.setErrorHandler( 0 );
+
+    m_language = hand->language();
+    m_sourceLanguage = hand->sourceLanguage();
+    makeFileNamesAbsolute(QFileInfo(filename).absoluteDir());
+
+    delete hand;
+    f.close();
+    return ok;
+}
+
+bool MetaTranslator::save( const QString& filename ) const
+{
+    QFile f( filename );
+    if ( !f.open(QIODevice::WriteOnly) )
+        return false;
+
+    QTextStream t( &f );
+    t.setCodec( QTextCodec::codecForName("ISO-8859-1") );
+
+    //### The xml prolog allows processors to easily detect the correct encoding
+    t << "<?xml version=\"1.0\"";
+    t << " encoding=\"utf-8\"";
+    t << "?>\n<!DOCTYPE TS><TS version=\"2.0\"";
+    if (!languageCode().isEmpty() && languageCode() != QLatin1String("C"))
+        t << " language=\"" << languageCode() << "\"" <<\
+            " sourcelanguage=\"" << sourceLanguageCode() << "\"";
+    t << ">\n";
+    if ( codecName != "ISO-8859-1" )
+        t << "<defaultcodec>" << codecName << "</defaultcodec>\n";
+    TMM::ConstIterator m = mm.begin();
+    while ( m != mm.end() ) {
+        TMMInv inv;
+        TMMInv::Iterator i;
+        bool contextIsUtf8 = m.key().utf8();
+        QByteArray context = m.key().context();
+        QByteArray comment = "";
+
+        do {
+            if (QByteArray(m.key().sourceText()) == ContextComment) {
+                if ( m.key().type() != MetaTranslatorMessage::Obsolete ) {
+                    contextIsUtf8 = m.key().utf8();
+                    comment = QByteArray(m.key().comment());
+                }
+            } else {
+                inv.insert( *m, m.key() );
+            }
+        } while ( ++m != mm.end() && QByteArray(m.key().context()) == context );
+
+        t << "<context";
+        if ( contextIsUtf8 )
+            t << " encoding=\"UTF-8\"";
+        t << ">\n";
+        t << "    <name>" << evilBytes( context, contextIsUtf8 )
+          << "</name>\n";
+        if ( !comment.isEmpty() )
+            t << "    <comment>" << evilBytes( comment, contextIsUtf8 )
+              << "</comment>\n";
+
+        for ( i = inv.begin(); i != inv.end(); ++i ) {
+            MetaTranslatorMessage msg = *i;
+            // no need for such noise
+            if ( msg.type() == MetaTranslatorMessage::Obsolete &&
+                 msg.translation().isEmpty() )
+                continue;
+
+            t << "    <message";
+            if ( msg.utf8() )
+                t << " encoding=\"UTF-8\"";
+            if ( msg.isPlural() )
+                t << " numerus=\"yes\"";
+            t << ">\n";
+            if (!msg.fileName().isEmpty() && msg.lineNumber() >= 0) {
+                QDir tsPath = QFileInfo(filename).absoluteDir();
+                QString fn = tsPath.relativeFilePath(msg.fileName()).replace('\\','/');
+                t << "        <location filename=\"" << fn << "\" line=\"" << msg.lineNumber() << "\"/>\n";
+            }
+            t  << "        <source>" << evilBytes( msg.sourceText(),
+                                                  msg.utf8() )
+              << "</source>\n";
+            if ( !QByteArray(msg.comment()).isEmpty() )
+                t << "        <comment>" << evilBytes( msg.comment(),
+                                                       msg.utf8() )
+                  << "</comment>\n";
+            t << "        <translation";
+            if ( msg.type() == MetaTranslatorMessage::Unfinished )
+                t << " type=\"unfinished\"";
+            else if ( msg.type() == MetaTranslatorMessage::Obsolete )
+                t << " type=\"obsolete\"";
+            t << ">";
+            if (msg.isPlural()) {
+                t << "\n";
+                QLocale::Language l;
+                QLocale::Country c;
+                languageAndCountry(m_language, &l, &c);
+                QStringList translns = normalizedTranslations(msg, l, c);
+                for (int j = 0; j < qMax(1, translns.count()); ++j)
+                    t << "            <numerusform>" << protect( translns.value(j).toUtf8() ) << "</numerusform>\n";
+                t << "        ";
+            } else {
+                t << protect( msg.translation().toUtf8() );
+            }
+            t << "</translation>\n";
+            t << "    </message>\n";
+        }
+        t << "</context>\n";
+    }
+    t << "</TS>\n";
+    f.close();
+    return true;
+}
+
+void MetaTranslator::languageAndCountry(const QString &languageCode, QLocale::Language *lang, QLocale::Country *country)
+{
+    QLocale locale(languageCode);
+    if (lang)
+        *lang = locale.language();
+
+    if (country) {
+        if (languageCode.indexOf(QLatin1Char('_')) != -1) {
+            *country = locale.country();
+        } else {
+            *country = QLocale::AnyCountry;
+        }
+    }
+}
+
+bool MetaTranslator::release( const QString& filename, bool verbose,
+                              bool ignoreUnfinished,
+                              Translator::SaveMode mode ) const
+{
+    Translator tor( 0 );
+    int finished = 0;
+    int unfinished = 0;
+    int untranslated = 0;
+    TMM::ConstIterator m;
+
+    for ( m = mm.begin(); m != mm.end(); ++m ) {
+        if ( m.key().type() != MetaTranslatorMessage::Obsolete ) {
+            if ( m.key().translation().isEmpty() ) {
+                untranslated++;
+            } else {
+                if ( m.key().type() == MetaTranslatorMessage::Unfinished )
+                    unfinished++;
+                else
+                    finished++;
+
+                QByteArray context = m.key().context();
+                QByteArray sourceText = m.key().sourceText();
+                QByteArray comment = m.key().comment();
+                QStringList translations = m.key().translations();
+
+                if ( !ignoreUnfinished
+                     || m.key().type() != MetaTranslatorMessage::Unfinished ) {
+                    /*
+                      Drop the comment in (context, sourceText, comment),
+                      unless the context is empty,
+                      unless (context, sourceText, "") already exists or
+                      unless we already dropped the comment of (context,
+                      sourceText, comment0).
+                    */
+                    if ( comment.isEmpty()
+                         || context.isEmpty()
+                         || contains(context, sourceText, "")
+                         || !tor.findMessage(context, sourceText, "").translation()
+                                .isNull() ) {
+                        tor.insert( m.key() );
+                    } else {
+                        tor.insert( TranslatorMessage(context, sourceText, "",
+                                                      QString(), -1, translations) );
+                        //filename and lineNumbers will be ignored from now.
+                    }
+                }
+            }
+        }
+    }
+
+    bool saved = tor.save( filename, mode );
+    if ( saved && verbose )
+        fprintf( stderr,
+                 " %d finished, %d unfinished and %d untranslated messages\n",
+                 finished, unfinished, untranslated );
+
+    return saved;
+}
+
+QString MetaTranslator::languageCode() const
+{
+    return m_language;
+}
+
+QString MetaTranslator::sourceLanguageCode() const
+{
+    return m_sourceLanguage;
+}
+
+void MetaTranslator::setLanguageCode(const QString &languageCode)
+{
+    m_language = languageCode;
+}
+
+void MetaTranslator::setSourceLanguageCode(const QString &languageCode)
+{
+    m_sourceLanguage = languageCode;
+}
+
+bool MetaTranslator::contains( const char *context, const char *sourceText,
+                               const char *comment ) const
+{
+    return mm.contains(MetaTranslatorMessage(context, sourceText, comment, QString(), 0));
+}
+
+MetaTranslatorMessage MetaTranslator::find( const char *context,
+        const char *sourceText, const char *comment ) const
+{
+    QMap<MetaTranslatorMessage, int>::const_iterator it = 
+        mm.constFind(MetaTranslatorMessage(context, sourceText, comment, QString(), 0));
+    return (it == mm.constEnd() ? MetaTranslatorMessage() : it.key());
+}
+
+MetaTranslatorMessage MetaTranslator::find(const char *context, const char *comment, 
+                                const QString &fileName, int lineNumber) const
+{
+    if (lineNumber >= 0 && !fileName.isEmpty()) {
+        MetaTranslatorMessage m;
+
+        for (QMap<MetaTranslatorMessage, int>::const_iterator it = mm.constBegin();
+            it != mm.constEnd(); ++it) {
+            m = it.key();
+            int delta = qstrcmp(m.context(), context);
+            if (delta == 0) {
+                delta = qstrcmp(m.comment(), comment);
+                if (delta == 0) {
+                    delta = QString::compare(m.fileName(), fileName);
+                    if (delta == 0) {
+                        delta = m.lineNumber() - lineNumber;
+                        if (delta == 0)
+                            return m;
+                    }
+                }
+            }
+        }
+    }
+    return MetaTranslatorMessage();
+}
+
+void MetaTranslator::insert( const MetaTranslatorMessage& m )
+{
+    int pos = mm.count();
+    if (mm.contains(m)) {
+        pos = mm.value(m);
+        mm.remove(m);
+    }
+    mm.insert(m, pos);
+}
+
+void MetaTranslator::stripObsoleteMessages()
+{
+    TMM newmm;
+    TMM::Iterator m = mm.begin();
+    while ( m != mm.end() ) {
+        if ( m.key().type() != MetaTranslatorMessage::Obsolete )
+            newmm.insert( m.key(), *m );
+        ++m;
+    }
+    mm = newmm;
+}
+
+void MetaTranslator::stripEmptyContexts()
+{
+    TMM newmm;
+
+    TMM::Iterator m = mm.begin();
+    while ( m != mm.end() ) {
+        if ( QByteArray(m.key().sourceText()) == ContextComment ) {
+            TMM::Iterator n = m;
+            ++n;
+            // the context comment is followed by other messages
+            if ( n != newmm.end() &&
+                 qstrcmp(m.key().context(), n.key().context()) == 0 )
+                newmm.insert( m.key(), *m );
+        } else {
+            newmm.insert( m.key(), *m );
+        }
+        ++m;
+    }
+    mm = newmm;
+}
+
+void MetaTranslator::makeFileNamesAbsolute(const QDir &oldPath)
+{
+    TMM newmm;
+    for (TMM::iterator m = mm.begin(); m != mm.end(); ++m) {
+        MetaTranslatorMessage msg = m.key();
+        QString fileName = m.key().fileName();
+        QFileInfo fi (fileName);
+        if (fi.isRelative()) {
+            fileName = oldPath.absoluteFilePath(fileName);
+        }
+        
+        msg.setFileName(fileName);
+        newmm.insert(msg, m.value());
+    }
+    mm = newmm;
+}
+
+void MetaTranslator::setCodec( const char *name )
+{
+    const int latin1 = 4;
+
+    codecName = name;
+    codec = QTextCodec::codecForName( name );
+    if ( codec == 0 || codec->mibEnum() == latin1 )
+        codec = 0;
+}
+
+QString MetaTranslator::toUnicode( const char *str, bool utf8 ) const
+{
+    if ( utf8 )
+        return QString::fromUtf8( str );
+    else if ( codec == 0 )
+        return QString( str );
+    else
+        return codec->toUnicode( str );
+}
+
+QList<MetaTranslatorMessage> MetaTranslator::messages() const
+{
+    int n = mm.count();
+    TMM::ConstIterator *t = new TMM::ConstIterator[n + 1];
+    TMM::ConstIterator m;
+    for ( m = mm.begin(); m != mm.end(); ++m )
+        t[*m] = m;
+
+    QList<MetaTranslatorMessage> val;
+    for ( int i = 0; i < n; i++ )
+        val.append( t[i].key() );
+
+    delete[] t;
+    return val;
+}
+
+QList<MetaTranslatorMessage> MetaTranslator::translatedMessages() const
+{
+    QList<MetaTranslatorMessage> val;
+    TMM::ConstIterator m;
+    for ( m = mm.begin(); m != mm.end(); ++m ) {
+        if ( m.key().type() == MetaTranslatorMessage::Finished )
+            val.append( m.key() );
+    }
+    return val;
+}
+
+// the grammatical numerus is the number of plural forms + singular forms.
+// i.e english has two forms: singular og plural.
+// and polish has three forms:
+// 1. singular (1),
+// 2. plural form 1 (numbers that ends with 2,3,4 except 12,13,14)
+// 3. plural form 2 (all others)
+// Thus, english returns 2, polish returns 3
+int MetaTranslator::grammaticalNumerus(QLocale::Language language, QLocale::Country country)
+{
+    QStringList forms;
+    getNumerusInfo(language, country, &forms);
+    return forms.count();
+}
+
+QStringList MetaTranslator::normalizedTranslations(const MetaTranslatorMessage& m,
+                                                   QLocale::Language language,
+                                                   QLocale::Country country)
+{
+    QStringList translations = m.translations();
+    int numTranslations = 1;
+    if (m.isPlural()) {
+        numTranslations = grammaticalNumerus(language, country);
+    }
+
+    // make sure that the stringlist always have the size of the language's current numerus, or 1 if its not plural
+    if (translations.count() > numTranslations) {
+        for (int i = translations.count(); i >  numTranslations; --i)
+            translations.removeLast();
+    } else if (translations.count() < numTranslations) {
+        for (int i = translations.count(); i < numTranslations; ++i)
+            translations << QString();
+    }
+    return translations;
+}
diff --git a/pylupdate/metatranslator.h b/pylupdate/metatranslator.h
new file mode 100644
index 0000000..09cd1a2
--- /dev/null
+++ b/pylupdate/metatranslator.h
@@ -0,0 +1,183 @@
+/**********************************************************************
+** Copyright (C) 2002-2007 Detlev Offenbach <detlev at die-offenbachs.de>
+**
+** This is a modified version of lupdate. The original is part of Qt-Linguist.
+** The copyright of the original file can be found below.
+**
+** This version is modified to handle python sources.
+**
+**   The file is provided AS IS with NO WARRANTY OF ANY KIND,
+**   INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+**   A PARTICULAR PURPOSE.
+****************************************************************************/
+
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef METATRANSLATOR_H
+#define METATRANSLATOR_H
+
+#include <qmap.h>
+#include <qstring.h>
+#include <translator.h>
+#include <qlist.h>
+#include <qlocale.h>
+#include <qdir.h>
+
+#if !defined(QT_BEGIN_NAMESPACE)
+#define QT_BEGIN_NAMESPACE
+#define QT_END_NAMESPACE
+#endif
+
+QT_BEGIN_NAMESPACE
+class QTextCodec;
+QT_END_NAMESPACE
+
+class MetaTranslatorMessage : public TranslatorMessage
+{
+public:
+    enum Type { Unfinished, Finished, Obsolete };
+
+    MetaTranslatorMessage();
+    MetaTranslatorMessage( const char *context, const char *sourceText,
+                           const char *comment, 
+                           const QString &fileName, int lineNumber,
+                           const QStringList& translations = QStringList(),
+                           bool utf8 = false, Type type = Unfinished,
+                           bool plural = false );
+    MetaTranslatorMessage( const MetaTranslatorMessage& m );
+
+    MetaTranslatorMessage& operator=( const MetaTranslatorMessage& m );
+
+    void setType( Type nt ) { ty = nt; }
+    Type type() const { return ty; }
+    bool utf8() const { return utfeight; }
+    bool isPlural() const { return m_plural; }
+    void setPlural(bool isplural) { m_plural = isplural; }
+
+    bool operator==( const MetaTranslatorMessage& m ) const;
+    bool operator!=( const MetaTranslatorMessage& m ) const
+    { return !operator==( m ); }
+    bool operator<( const MetaTranslatorMessage& m ) const;
+    bool operator<=( const MetaTranslatorMessage& m )
+    { return !operator>( m ); }
+    bool operator>( const MetaTranslatorMessage& m ) const
+    { return this->operator<( m ); }
+    bool operator>=( const MetaTranslatorMessage& m ) const
+    { return !operator<( m ); }
+
+private:
+    bool utfeight;
+    Type ty;
+    bool m_plural;
+};
+
+class MetaTranslator
+{
+public:
+    MetaTranslator();
+    MetaTranslator( const MetaTranslator& tor );
+
+    MetaTranslator& operator=( const MetaTranslator& tor );
+
+    void clear();
+    bool load( const QString& filename );
+    bool save( const QString& filename ) const;
+    bool release( const QString& filename, bool verbose = false,
+                  bool ignoreUnfinished = false,
+                  Translator::SaveMode mode = Translator::Stripped ) const;
+
+    bool contains( const char *context, const char *sourceText,
+                   const char *comment ) const;
+
+    MetaTranslatorMessage find( const char *context, const char *sourceText,
+                   const char *comment ) const;
+    MetaTranslatorMessage find(const char *context, const char *comment, 
+                    const QString &fileName, int lineNumber) const;
+
+    void insert( const MetaTranslatorMessage& m );
+
+    void stripObsoleteMessages();
+    void stripEmptyContexts();
+
+    void setCodec( const char *name ); // kill me
+    void setCodecForTr( const char *name ) { setCodec(name); }
+    QTextCodec *codecForTr() const { return codec; }
+    QString toUnicode( const char *str, bool utf8 ) const;
+
+    QString languageCode() const;
+    QString sourceLanguageCode() const;
+    static void languageAndCountry(const QString &languageCode, QLocale::Language *lang, QLocale::Country *country);
+    void setLanguageCode(const QString &languageCode);
+    void setSourceLanguageCode(const QString &languageCode);
+    QList<MetaTranslatorMessage> messages() const;
+    QList<MetaTranslatorMessage> translatedMessages() const;
+    static int grammaticalNumerus(QLocale::Language language, QLocale::Country country);
+    static QStringList normalizedTranslations(const MetaTranslatorMessage& m,
+                    QLocale::Language lang, QLocale::Country country);
+
+private:
+    void makeFileNamesAbsolute(const QDir &oldPath);
+
+    typedef QMap<MetaTranslatorMessage, int> TMM;
+    typedef QMap<int, MetaTranslatorMessage> TMMInv;
+
+    TMM mm;
+    QByteArray codecName;
+    QTextCodec *codec;
+    QString m_language;     // A string beginning with a 2 or 3 letter language code (ISO 639-1 or ISO-639-2),
+                            // followed by the optional country variant to distinguist between country-specific variations
+                            // of the language. The language code and country code are always separated by '_'
+                            // Note that the language part can also be a 3-letter ISO 639-2 code.
+                            // Legal examples:
+                            // 'pt'         portuguese, assumes portuguese from portugal
+                            // 'pt_BR'      Brazilian portuguese (ISO 639-1 language code)
+                            // 'por_BR'     Brazilian portuguese (ISO 639-2 language code)
+    QString m_sourceLanguage;
+};
+
+/*
+  This is a quick hack. The proper way to handle this would be
+  to extend MetaTranslator's interface.
+*/
+#define ContextComment "QT_LINGUIST_INTERNAL_CONTEXT_COMMENT"
+
+#endif
diff --git a/pylupdate/numberh.cpp b/pylupdate/numberh.cpp
new file mode 100644
index 0000000..cb2066d
--- /dev/null
+++ b/pylupdate/numberh.cpp
@@ -0,0 +1,257 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "metatranslator.h"
+
+#include <QVector>
+#include <QMap>
+#include <QStringList>
+#include <stdio.h>
+#include <ctype.h>
+
+typedef QMap<QByteArray, MetaTranslatorMessage> TMM;
+typedef QList<MetaTranslatorMessage> TML;
+
+static bool isDigitFriendly( int c )
+{
+    return ispunct((uchar)c) || isspace((uchar)c);
+}
+
+static int numberLength( const char *s )
+{
+    int i = 0;
+
+    if ( isdigit((uchar)s[0]) ) {
+        do {
+            i++;
+        } while (isdigit((uchar)s[i]) ||
+                 (isDigitFriendly(s[i]) &&
+                  (isdigit((uchar)s[i + 1]) ||
+                   (isDigitFriendly(s[i + 1]) && isdigit((uchar)s[i + 2])))));
+    }
+    return i;
+}
+
+/*
+  Returns a version of 'key' where all numbers have been replaced by zeroes.  If
+  there were none, returns "".
+*/
+static QByteArray zeroKey( const char *key )
+{
+    QByteArray zeroed;
+    zeroed.resize( int(strlen(key)) + 1 );
+    char *z = zeroed.data();
+    int i = 0, j = 0;
+    int len;
+    bool metSomething = false;
+
+    while ( key[i] != '\0' ) {
+        len = numberLength( key + i );
+        if ( len > 0 ) {
+            i += len;
+            z[j++] = '0';
+            metSomething = true;
+        } else {
+            z[j++] = key[i++];
+        }
+    }
+    z[j] = '\0';
+
+    if ( metSomething )
+        return zeroed;
+    else
+        return "";
+}
+
+static QString translationAttempt( const QString& oldTranslation,
+                                   const char *oldSource,
+                                   const char *newSource )
+{
+    int p = zeroKey( oldSource ).count( '0' );
+    int oldSourceLen = qstrlen( oldSource );
+    QString attempt;
+    QStringList oldNumbers;
+    QStringList newNumbers;
+    QVector<bool> met( p );
+    QVector<int> matchedYet( p );
+    int i, j;
+    int k = 0, ell, best;
+    int m, n;
+    int pass;
+
+    /*
+      This algorithm is hard to follow, so we'll consider an example
+      all along: oldTranslation is "XeT 3.0", oldSource is "TeX 3.0"
+      and newSource is "XeT 3.1".
+
+      First, we set up two tables: oldNumbers and newNumbers. In our
+      example, oldNumber[0] is "3.0" and newNumber[0] is "3.1".
+    */
+    for ( i = 0, j = 0; i < oldSourceLen; i++, j++ ) {
+        m = numberLength( oldSource + i );
+        n = numberLength( newSource + j );
+        if ( m > 0 ) {
+            oldNumbers.append( QByteArray(oldSource + i, m + 1) );
+            newNumbers.append( QByteArray(newSource + j, n + 1) );
+            i += m;
+            j += n;
+            met[k] = false;
+            matchedYet[k] = 0;
+            k++;
+        }
+    }
+
+    /*
+      We now go over the old translation, "XeT 3.0", one letter at a
+      time, looking for numbers found in oldNumbers. Whenever such a
+      number is met, it is replaced with its newNumber equivalent. In
+      our example, the "3.0" of "XeT 3.0" becomes "3.1".
+    */
+    for ( i = 0; i < (int) oldTranslation.length(); i++ ) {
+        attempt += oldTranslation[i];
+        for ( k = 0; k < p; k++ ) {
+            if ( oldTranslation[i] == oldNumbers[k][matchedYet[k]] )
+                matchedYet[k]++;
+            else
+                matchedYet[k] = 0;
+        }
+
+        /*
+          Let's find out if the last character ended a match. We make
+          two passes over the data. In the first pass, we try to
+          match only numbers that weren't matched yet; if that fails,
+          the second pass does the trick. This is useful in some
+          suspicious cases, flagged below.
+        */
+        for ( pass = 0; pass < 2; pass++ ) {
+            best = p; // an impossible value
+            for ( k = 0; k < p; k++ ) {
+                if ( (!met[k] || pass > 0) &&
+                     matchedYet[k] == (int) oldNumbers[k].length() &&
+                     numberLength(oldTranslation.toLatin1().constData() + (i + 1) -
+                                  matchedYet[k]) == matchedYet[k] ) {
+                    // the longer the better
+                    if ( best == p || matchedYet[k] > matchedYet[best] )
+                        best = k;
+                }
+            }
+            if ( best != p ) {
+                attempt.truncate( attempt.length() - matchedYet[best] );
+                attempt += newNumbers[best];
+                met[best] = true;
+                for ( k = 0; k < p; k++ )
+                    matchedYet[k] = 0;
+                break;
+            }
+        }
+    }
+
+    /*
+      We flag two kinds of suspicious cases. They are identified as
+      such with comments such as "{2000?}" at the end.
+
+      Example of the first kind: old source text "TeX 3.0" translated
+      as "XeT 2.0" is flagged "TeX 2.0 {3.0?}", no matter what the
+      new text is.
+    */
+    for ( k = 0; k < p; k++ ) {
+        if ( !met[k] )
+            attempt += QString( " {" ) + newNumbers[k] + QString( "?}" );
+    }
+
+    /*
+      Example of the second kind: "1 of 1" translated as "1 af 1",
+      with new source text "1 of 2", generates "1 af 2 {1 or 2?}"
+      because it's not clear which of "1 af 2" and "2 af 1" is right.
+    */
+    for ( k = 0; k < p; k++ ) {
+        for ( ell = 0; ell < p; ell++ ) {
+            if ( k != ell && oldNumbers[k] == oldNumbers[ell] &&
+                    newNumbers[k] < newNumbers[ell] )
+                attempt += QString( " {" ) + newNumbers[k] + QString( " or " ) +
+                           newNumbers[ell] + QString( "?}" );
+        }
+    }
+    return attempt;
+}
+
+/*
+  Augments a MetaTranslator with translations easily derived from
+  similar existing (probably obsolete) translations.
+
+  For example, if "TeX 3.0" is translated as "XeT 3.0" and "TeX 3.1"
+  has no translation, "XeT 3.1" is added to the translator and is
+  marked Unfinished.
+
+  Returns the number of additional messages that this heuristic translated.
+*/
+int applyNumberHeuristic( MetaTranslator *tor )
+{
+    TMM translated, untranslated;
+    TMM::Iterator t, u;
+    TML all = tor->messages();
+    TML::Iterator it;
+    int inserted = 0;
+
+    for ( it = all.begin(); it != all.end(); ++it ) {
+        bool hasTranslation = (*it).isTranslated();
+        if ( (*it).type() == MetaTranslatorMessage::Unfinished ) {
+            if ( !hasTranslation )
+                untranslated.insert(QByteArray((*it).context()) + "\n" + (*it).sourceText() + "\n"
+                                    + (*it).comment(), *it);
+        } else if ( hasTranslation && (*it).translations().count() == 1 ) {
+            translated.insert( zeroKey((*it).sourceText()), *it );
+        }
+    }
+
+    for ( u = untranslated.begin(); u != untranslated.end(); ++u ) {
+        t = translated.find( zeroKey((*u).sourceText()) );
+        if ( t != translated.end() && !t.key().isEmpty() &&
+             qstrcmp((*t).sourceText(), (*u).sourceText()) != 0 ) {
+            MetaTranslatorMessage m( *u );
+            m.setTranslation(translationAttempt((*t).translation(), (*t).sourceText(),
+                                                (*u).sourceText()));
+            tor->insert( m );
+            inserted++;
+        }
+    }
+    return inserted;
+}
diff --git a/pylupdate/proparser.cpp b/pylupdate/proparser.cpp
new file mode 100644
index 0000000..4cef302
--- /dev/null
+++ b/pylupdate/proparser.cpp
@@ -0,0 +1,226 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "proparser.h"
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qregexp.h>
+#include <qstringlist.h>
+#include <qtextstream.h>
+
+#ifdef Q_OS_UNIX
+#include <unistd.h>
+#endif
+
+#ifdef Q_OS_WIN32
+#define QT_POPEN _popen
+#else
+#define QT_POPEN popen
+#endif
+
+QString loadFile( const QString &fileName )
+{
+    QFile file( fileName );
+    if ( !file.open(QIODevice::ReadOnly) ) {
+        fprintf( stderr, "error: Cannot load '%s': %s\n",
+                 file.fileName().toLatin1().constData(),
+                 file.errorString().toLatin1().constData() );
+        return QString();
+    }
+
+    QTextStream in( &file );
+    return in.readAll();
+}
+
+QMap<QString, QString> proFileTagMap( const QString& text )
+{
+    QString t = text;
+
+    QMap<QString, QString> tagMap;
+    bool stillProcess = true; // If include() has a $$tag then we need to reprocess
+
+    while (stillProcess) {
+        /*
+            Strip any commments before we try to include.  We
+            still need to do it after we include to make sure the
+            included file does not have comments
+        */
+        t.replace( QRegExp(QString("#[^\n]*\n")), QString(" ") );
+
+        /*
+            Process include() commands.
+            $$PWD is a special case so we have to change it while
+            we know where the included file is.
+        */
+        QRegExp callToInclude("include\\s*\\(\\s*([^()\\s]+)\\s*\\)");
+        int i = 0;
+        while ( (i = callToInclude.indexIn(t, i)) != -1 ) {
+            bool doneWithVar = false;
+            QString fileName = callToInclude.cap(1);
+            QString after = fileName.replace("$$PWD", QDir::currentPath());
+            if (!tagMap.isEmpty() && after.contains("$$")) {
+                QRegExp var( "\\$\\$[({]?([a-zA-Z0-9_]+)[)}]?" );
+                int ii = 0;
+                while ((ii = after.indexOf(var, ii)) != -1) {
+                    if (tagMap.contains(var.cap(1))) {
+                        after.replace(ii, var.cap(0).length(), tagMap[var.cap(1)]);
+                    } else { // Couldn't find it
+                        doneWithVar = true;
+                        break;
+                    }
+                }
+
+            }
+            if (doneWithVar || !after.contains("$$")) {
+                after = loadFile(after);
+                QFileInfo fi(callToInclude.cap(1));
+                after.replace("$$PWD", fi.path());
+                t.replace( i, callToInclude.matchedLength(), after );
+            }
+            i += after.length();
+        }
+
+        /*
+            Strip comments, merge lines ending with backslash, add
+            spaces around '=' and '+=', replace '\n' with ';', and
+            simplify white spaces.
+        */
+        t.replace( QRegExp(QString("#[^\n]*\n")), QString(" ") );
+        t.replace( QRegExp(QString("\\\\[^\n\\S]*\n")), QString(" ") );
+        t.replace( "=", QString(" = ") );
+        t.replace( "+ =", QString(" += ") );
+        t.replace( "\n", QString(";") );
+        t.replace( "\r", QString("") ); // remove carriage return
+        t = t.simplified();
+
+        /*
+            Populate tagMap with 'key = value' entries.
+        */
+        QStringList lines = t.split(';', QString::SkipEmptyParts);
+        QStringList::Iterator line;
+        for ( line = lines.begin(); line != lines.end(); ++line ) {
+            QStringList toks = (*line).split(' ', QString::SkipEmptyParts);
+
+            if ( toks.count() >= 3 &&
+                (toks[1] == QString("=") || toks[1] == QString("+=") ||
+                toks[1] == QString("*=")) ) {
+                QString tag = toks.first();
+                int k = tag.lastIndexOf( QChar(':') ); // as in 'unix:'
+                if ( k != -1 )
+                    tag = tag.mid( k + 1 );
+                toks.erase( toks.begin() );
+
+                QString action = toks.first();
+                toks.erase( toks.begin() );
+
+                if ( tagMap.contains(tag) ) {
+                    if ( action == QString("=") )
+                        tagMap.insert( tag, toks.join(" ") );
+                    else
+                        tagMap[tag] += QChar( ' ' ) + toks.join( " " );
+                } else {
+                    tagMap[tag] = toks.join( " " );
+                }
+            }
+        }
+        /*
+            Expand $$variables within the 'value' part of a 'key = value'
+            pair.
+        */
+        QRegExp var( "\\$\\$[({]?([a-zA-Z0-9_]+)[)}]?" );
+        QMap<QString, QString>::Iterator it;
+        for ( it = tagMap.begin(); it != tagMap.end(); ++it ) {
+            int i = 0;
+            while ( (i = var.indexIn((*it), i)) != -1 ) {
+                int len = var.matchedLength();
+                QString invocation = var.cap(1);
+                QString after;
+
+                if ( invocation == "system" ) {
+                    // skip system(); it will be handled in the next pass
+                    ++i;
+                } else {
+                    if ( tagMap.contains(invocation) )
+                        after = tagMap[invocation];
+                    else if (invocation.toLower() == "pwd")
+                        after = QDir::currentPath();
+                    (*it).replace( i, len, after );
+                    i += after.length();
+                }
+            }
+        }
+
+        /*
+          Execute system() calls.
+        */
+        QRegExp callToSystem( "\\$\\$system\\s*\\(([^()]*)\\)" );
+        for ( it = tagMap.begin(); it != tagMap.end(); ++it ) {
+            int i = 0;
+            while ( (i = callToSystem.indexIn((*it), i)) != -1 ) {
+                /*
+                  This code is stolen from qmake's project.cpp file.
+                  Ideally we would use the same parser, so we wouldn't
+                  have this code duplication.
+                */
+                QString after;
+                char buff[256];
+                FILE *proc = QT_POPEN( callToSystem.cap(1).toLatin1().constData(), "r" );
+                while ( proc && !feof(proc) ) {
+                    int read_in = int(fread( buff, 1, 255, proc ));
+                    if ( !read_in )
+                        break;
+                    for ( int i = 0; i < read_in; i++ ) {
+                        if ( buff[i] == '\n' || buff[i] == '\t' )
+                            buff[i] = ' ';
+                    }
+                    buff[read_in] = '\0';
+                    after += buff;
+                }
+                (*it).replace( i, callToSystem.matchedLength(), after );
+                i += after.length();
+            }
+        }
+        stillProcess = callToInclude.indexIn(t) != -1;
+    }
+    return tagMap;
+}
diff --git a/pylupdate/proparser.h b/pylupdate/proparser.h
new file mode 100644
index 0000000..8745fd6
--- /dev/null
+++ b/pylupdate/proparser.h
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PROPARSER_H
+#define PROPARSER_H
+
+#include <qmap.h>
+#include <qstring.h>
+
+QMap<QString, QString> proFileTagMap( const QString& text );
+
+#endif
diff --git a/pylupdate/sametexth.cpp b/pylupdate/sametexth.cpp
new file mode 100644
index 0000000..456677e
--- /dev/null
+++ b/pylupdate/sametexth.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "metatranslator.h"
+
+#include <QMap>
+#include <stdio.h>
+
+typedef QMap<QByteArray, MetaTranslatorMessage> TMM;
+typedef QList<MetaTranslatorMessage> TML;
+
+/*
+  Augments a MetaTranslator with trivially derived translations.
+
+  For example, if "Enabled:" is consistendly translated as "Eingeschaltet:" no
+  matter the context or the comment, "Eingeschaltet:" is added as the
+  translation of any untranslated "Enabled:" text and is marked Unfinished.
+
+  Returns the number of additional messages that this heuristic translated.
+*/
+
+int applySameTextHeuristic( MetaTranslator *tor )
+{
+    TMM translated;
+    TMM avoid;
+    TMM::Iterator t;
+    TML untranslated;
+    TML::Iterator u;
+    TML all = tor->messages();
+    TML::Iterator it;
+    int inserted = 0;
+
+    for ( it = all.begin(); it != all.end(); ++it ) {
+        if ( (*it).type() == MetaTranslatorMessage::Unfinished ) {
+            if ( !(*it).isTranslated() )
+                untranslated.append( *it );
+        } else {
+            QByteArray key = (*it).sourceText();
+            t = translated.find( key );
+            if ( t != translated.end() ) {
+                /*
+                  The same source text is translated at least two
+                  different ways. Do nothing then.
+                */
+                if ( (*t).translations() != (*it).translations() ) {
+                    translated.remove( key );
+                    avoid.insert( key, *it );
+                }
+            } else if ( !avoid.contains(key) && (*it).isTranslated() ) {
+                translated.insert( key, *it );
+            }
+        }
+    }
+
+    for ( u = untranslated.begin(); u != untranslated.end(); ++u ) {
+        QByteArray key = (*u).sourceText();
+        t = translated.find( key );
+        if ( t != translated.end() ) {
+            MetaTranslatorMessage m( *u );
+            m.setTranslations( (*t).translations() );
+            tor->insert( m );
+            inserted++;
+        }
+    }
+    return inserted;
+}
diff --git a/pylupdate/simtexth.cpp b/pylupdate/simtexth.cpp
new file mode 100644
index 0000000..31a7836
--- /dev/null
+++ b/pylupdate/simtexth.cpp
@@ -0,0 +1,273 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "simtexth.h"
+#include "metatranslator.h"
+
+#include <QString>
+#include <QList>
+
+#include <string.h>
+
+typedef QList<MetaTranslatorMessage> TML;
+
+/*
+  How similar are two texts?  The approach used here relies on co-occurrence
+  matrices and is very efficient.
+
+  Let's see with an example: how similar are "here" and "hither"?  The
+  co-occurrence matrix M for "here" is M[h,e] = 1, M[e,r] = 1, M[r,e] = 1, and 0
+  elsewhere; the matrix N for "hither" is N[h,i] = 1, N[i,t] = 1, ...,
+  N[h,e] = 1, N[e,r] = 1, and 0 elsewhere.  The union U of both matrices is the
+  matrix U[i,j] = max { M[i,j], N[i,j] }, and the intersection V is
+  V[i,j] = min { M[i,j], N[i,j] }.  The score for a pair of texts is
+
+      score = (sum of V[i,j] over all i, j) / (sum of U[i,j] over all i, j),
+
+  a formula suggested by Arnt Gulbrandsen.  Here we have
+
+      score = 2 / 6,
+
+  or one third.
+
+  The implementation differs from this in a few details.  Most importantly,
+  repetitions are ignored; for input "xxx", M[x,x] equals 1, not 2.
+*/
+
+/*
+  Every character is assigned to one of 20 buckets so that the co-occurrence
+  matrix requires only 20 * 20 = 400 bits, not 256 * 256 = 65536 bits or even
+  more if we want the whole Unicode.  Which character falls in which bucket is
+  arbitrary.
+
+  The second half of the table is a replica of the first half, because of
+  laziness.
+*/
+static const int indexOf[256] = {
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+//      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
+    0,  2,  6,  7,  10, 12, 15, 19, 2,  6,  7,  10, 12, 15, 19, 0,
+//  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
+    1,  3,  4,  5,  8,  9,  11, 13, 14, 16, 2,  6,  7,  10, 12, 15,
+//  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
+    0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  6,  10, 11, 12, 13, 14,
+//  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
+    15, 12, 16, 17, 18, 19, 2,  10, 15, 7,  19, 2,  6,  7,  10, 0,
+//  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
+    0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  6,  10, 11, 12, 13, 14,
+//  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~
+    15, 12, 16, 17, 18, 19, 2,  10, 15, 7,  19, 2,  6,  7,  10, 0,
+
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  2,  6,  7,  10, 12, 15, 19, 2,  6,  7,  10, 12, 15, 19, 0,
+    1,  3,  4,  5,  8,  9,  11, 13, 14, 16, 2,  6,  7,  10, 12, 15,
+    0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  6,  10, 11, 12, 13, 14,
+    15, 12, 16, 17, 18, 19, 2,  10, 15, 7,  19, 2,  6,  7,  10, 0,
+    0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  6,  10, 11, 12, 13, 14,
+    15, 12, 16, 17, 18, 19, 2,  10, 15, 7,  19, 2,  6,  7,  10, 0
+};
+
+/*
+  The entry bitCount[i] (for i between 0 and 255) is the number of bits used to
+  represent i in binary.
+*/
+static const int bitCount[256] = {
+    0,  1,  1,  2,  1,  2,  2,  3,  1,  2,  2,  3,  2,  3,  3,  4,
+    1,  2,  2,  3,  2,  3,  3,  4,  2,  3,  3,  4,  3,  4,  4,  5,
+    1,  2,  2,  3,  2,  3,  3,  4,  2,  3,  3,  4,  3,  4,  4,  5,
+    2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
+    1,  2,  2,  3,  2,  3,  3,  4,  2,  3,  3,  4,  3,  4,  4,  5,
+    2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
+    2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
+    3,  4,  4,  5,  4,  5,  5,  6,  4,  5,  5,  6,  5,  6,  6,  7,
+    1,  2,  2,  3,  2,  3,  3,  4,  2,  3,  3,  4,  3,  4,  4,  5,
+    2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
+    2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
+    3,  4,  4,  5,  4,  5,  5,  6,  4,  5,  5,  6,  5,  6,  6,  7,
+    2,  3,  3,  4,  3,  4,  4,  5,  3,  4,  4,  5,  4,  5,  5,  6,
+    3,  4,  4,  5,  4,  5,  5,  6,  4,  5,  5,  6,  5,  6,  6,  7,
+    3,  4,  4,  5,  4,  5,  5,  6,  4,  5,  5,  6,  5,  6,  6,  7,
+    4,  5,  5,  6,  5,  6,  6,  7,  5,  6,  6,  7,  6,  7,  7,  8
+};
+
+struct CoMatrix
+{
+    /*
+      The matrix has 20 * 20 = 400 entries.  This requires 50 bytes, or 13
+      words.  Some operations are performed on words for more efficiency.
+    */
+    union {
+    quint8 b[52];
+    quint32 w[13];
+    };
+
+    CoMatrix() { memset( b, 0, 52 ); }
+    CoMatrix( const char *text ) {
+        char c = '\0', d;
+        memset( b, 0, 52 );
+        /*
+          The Knuth books are not in the office only for show; they help make
+          loops 30% faster and 20% as readable.
+        */
+        while ( (d = *text) != '\0' ) {
+            setCoocc( c, d );
+            if ( (c = *++text) != '\0' ) {
+                setCoocc( d, c );
+                text++;
+            }
+        }
+    }
+
+    void setCoocc( char c, char d ) {
+        int k = indexOf[(uchar) c] + 20 * indexOf[(uchar) d];
+        b[k >> 3] |= k & 0x7;
+    }
+
+    int worth() const {
+        int w = 0;
+        for ( int i = 0; i < 50; i++ )
+            w += bitCount[b[i]];
+        return w;
+    }
+};
+
+static inline CoMatrix reunion( const CoMatrix& m, const CoMatrix& n )
+{
+    CoMatrix p;
+    for ( int i = 0; i < 13; i++ )
+    p.w[i] = m.w[i] | n.w[i];
+    return p;
+}
+
+static inline CoMatrix intersection( const CoMatrix& m, const CoMatrix& n )
+{
+    CoMatrix p;
+    for ( int i = 0; i < 13; i++ )
+    p.w[i] = m.w[i] & n.w[i];
+    return p;
+}
+
+StringSimilarityMatcher::StringSimilarityMatcher(const QString &stringToMatch)
+{
+    m_cm = new CoMatrix( stringToMatch.toLatin1().constData() );
+    m_length = stringToMatch.length();
+}
+
+int StringSimilarityMatcher::getSimilarityScore(const QString &strCandidate)
+{
+    CoMatrix cmTarget( strCandidate.toLatin1().constData() );
+    int targetLen = strCandidate.length();
+    int delta = qAbs( m_length - targetLen );
+    
+    int score = ( (intersection(*m_cm, cmTarget).worth() + 1) << 10 ) /
+        ( reunion(*m_cm, cmTarget).worth() + (delta << 1) + 1 );
+
+    return score;
+}
+
+StringSimilarityMatcher::~StringSimilarityMatcher()
+{
+    delete m_cm;
+}
+
+/**
+ * Checks how similar two strings are.
+ * The return value is the score, and a higher score is more similar than one with a low score.
+ * Linguist considers a score over 190 to be a good match.
+ * \sa StringSimilarityMatcher
+ */
+int getSimilarityScore(const QString &str1, const char* str2)
+{
+    CoMatrix cmTarget( str2 );
+    int targetLen = qstrlen( str2 );
+    CoMatrix cm( str1.toLatin1().constData() );
+    int delta = qAbs( (int) str1.length() - targetLen );
+
+    int score = ( (intersection(cm, cmTarget).worth() + 1) << 10 ) /
+        ( reunion(cm, cmTarget).worth() + (delta << 1) + 1 );
+
+    return score;
+}
+
+CandidateList similarTextHeuristicCandidates( const MetaTranslator *tor,
+                        const char *text,
+                        int maxCandidates )
+{
+    QList<int> scores;
+    CandidateList candidates;
+
+    TML all = tor->translatedMessages();
+
+    foreach ( MetaTranslatorMessage mtm, all ) {
+        if ( mtm.type() == MetaTranslatorMessage::Unfinished ||
+             mtm.translation().isEmpty() )
+            continue;
+
+        QString s = tor->toUnicode( mtm.sourceText(), mtm.utf8() );
+        int score = getSimilarityScore(s, text);
+
+        if ( (int) candidates.count() == maxCandidates &&
+             score > scores[maxCandidates - 1] )
+            candidates.removeAt( candidates.size()-1 );
+        if ( (int) candidates.count() < maxCandidates && score >= textSimilarityThreshold ) {
+            Candidate cand( s, mtm.translation() );
+
+            int i;
+            for ( i = 0; i < (int) candidates.size(); i++ ) {
+                if ( score >= scores.at(i) ) {
+                    if ( score == scores.at(i) ) {
+                        if ( candidates.at(i) == cand )
+                            goto continue_outer_loop;
+                    } else {
+                        break;
+                    }
+                }
+            }
+            scores.insert( i, score );
+            candidates.insert( i, cand );
+        }
+        continue_outer_loop:
+        ;
+    }
+    return candidates;
+}
diff --git a/pylupdate/simtexth.h b/pylupdate/simtexth.h
new file mode 100644
index 0000000..38a7036
--- /dev/null
+++ b/pylupdate/simtexth.h
@@ -0,0 +1,94 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SIMTEXTH_H
+#define SIMTEXTH_H
+
+const int textSimilarityThreshold = 190;
+
+#include <QString>
+#include <QList>
+
+class MetaTranslator;
+
+struct Candidate {
+    QString source;
+    QString target;
+
+    Candidate() { }
+    Candidate( const QString& source0, const QString& target0 )
+    : source( source0 ), target( target0 ) { }
+};
+
+inline bool operator==( const Candidate& c, const Candidate& d ) {
+    return c.target == d.target && c.source == d.source;
+}
+inline bool operator!=( const Candidate& c, const Candidate& d ) {
+    return !operator==( c, d );
+}
+
+typedef QList<Candidate> CandidateList;
+
+struct CoMatrix;
+/**
+ * This class is more efficient for searching through a large array of candidate strings, since we only
+ * have to construct the CoMatrix for the \a stringToMatch once, 
+ * after that we just call getSimilarityScore(strCandidate).
+ * \sa getSimilarityScore
+ */
+class StringSimilarityMatcher {
+public:
+    StringSimilarityMatcher(const QString &stringToMatch);
+    ~StringSimilarityMatcher();
+    int getSimilarityScore(const QString &strCandidate);
+
+private:
+    CoMatrix *m_cm;
+    int m_length;
+};
+
+int getSimilarityScore(const QString &str1, const char* str2);
+
+CandidateList similarTextHeuristicCandidates( const MetaTranslator *tor,
+                          const char *text,
+                          int maxCandidates );
+
+#endif
diff --git a/pylupdate/translator.cpp b/pylupdate/translator.cpp
new file mode 100644
index 0000000..488749e
--- /dev/null
+++ b/pylupdate/translator.cpp
@@ -0,0 +1,1214 @@
+/**********************************************************************
+** Copyright (C) 2002-2007 Detlev Offenbach <detlev at die-offenbachs.de>
+**
+** This is a modified version of lupdate. The original is part of Qt-Linguist.
+** The copyright of the original file can be found below.
+**
+** This version is modified to handle python sources.
+**
+**   The file is provided AS IS with NO WARRANTY OF ANY KIND,
+**   INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+**   A PARTICULAR PURPOSE.
+****************************************************************************/
+
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "translator.h"
+
+#ifndef QT_NO_TRANSLATION
+
+#include "qfileinfo.h"
+#include "qstring.h"
+#include "qcoreapplication.h"
+#include "qdatastream.h"
+#include "qfile.h"
+#include "qmap.h"
+#include "qalgorithms.h"
+#include "qhash.h"
+#include "qglobal.h"
+
+// most of the headers below are already included in qplatformdefs.h
+// also this lacks Large File support but that's probably irrelevant
+#if defined(QT_USE_MMAP)
+// for mmap
+#include <sys/mman.h>
+#include <errno.h>
+#endif
+
+#include <stdlib.h>
+
+/*
+$ mcookie
+3cb86418caef9c95cd211cbf60a1bddd
+$
+*/
+
+// magic number for the file
+static const int MagicLength = 16;
+static const uchar magic[MagicLength] = {
+    0x3c, 0xb8, 0x64, 0x18, 0xca, 0xef, 0x9c, 0x95,
+    0xcd, 0x21, 0x1c, 0xbf, 0x60, 0xa1, 0xbd, 0xdd
+};
+
+static uint elfHash(const char * name)
+{
+    const uchar *k;
+    uint h = 0;
+    uint g;
+
+    if (name) {
+        k = (const uchar *) name;
+        while (*k) {
+            h = (h << 4) + *k++;
+            if ((g = (h & 0xf0000000)) != 0)
+                h ^= g >> 24;
+            h &= ~g;
+        }
+    }
+    if (!h)
+        h = 1;
+    return h;
+}
+
+extern bool qt_detectRTLLanguage();
+
+class TranslatorPrivate
+{
+public:
+    struct Offset {
+        Offset()
+            : h(0), o(0) { }
+        Offset(const TranslatorMessage& m, int offset)
+            : h(m.hash()), o(offset) { }
+
+        bool operator<(const Offset &other) const {
+            return (h != other.h) ? h < other.h : o < other.o;
+        }
+        bool operator==(const Offset &other) const {
+            return h == other.h && o == other.o;
+        }
+        uint h;
+        uint o;
+    };
+
+    enum { Contexts = 0x2f, Hashes = 0x42, Messages = 0x69 };
+
+    TranslatorPrivate(Translator *qq) : q(qq), unmapPointer(0), unmapLength(0) {}
+    // Translator must finalize this before deallocating it
+
+    Translator *q;
+    // for mmap'ed files, this is what needs to be unmapped.
+    char *unmapPointer;
+    unsigned int unmapLength;
+
+    // for squeezed but non-file data, this is what needs to be deleted
+    QByteArray messageArray;
+    QByteArray offsetArray;
+    QByteArray contextArray;
+
+#ifndef QT_NO_TRANSLATION_BUILDER
+    QMap<TranslatorMessage, void *> messages;
+#endif
+
+    bool do_load(const uchar *data, int len);
+
+};
+
+
+/*!
+    \class Translator
+
+    \brief The Translator class provides internationalization support for text
+    output.
+
+    \ingroup i18n
+    \ingroup environment
+    \mainclass
+
+    An object of this class contains a set of TranslatorMessage
+    objects, each of which specifies a translation from a source
+    language to a target language. Translator provides functions to
+    look up translations, add new ones, remove them, load and save
+    them, etc.
+
+    The most common use of Translator is to: load a translator file
+    created with \l{Qt Linguist Manual}, install it using
+    QCoreApplication::installTranslator(), and use it via QObject::tr().
+    For example:
+
+    \code
+    int main(int argc, char ** argv)
+    {
+        QCoreApplication app(argc, argv);
+
+        Translator translator(0);
+        translator.load("french.qm", ".");
+        app.installTranslator(&translator);
+
+        MyWidget m;
+        app.setMainWidget(&m);
+        m.show();
+
+        return app.exec();
+    }
+    \endcode
+    Note that the translator must be created \e before the
+    application's main window.
+
+    Most applications will never need to do anything else with this
+    class. The other functions provided by this class are useful for
+    applications that work on translator files.
+
+    We call a translation a "messsage". For this reason, translation
+    files are sometimes referred to as "message files".
+
+    It is possible to lookup a translation using findMessage() (as
+    tr() and QCoreApplication::translate() do) and contains(), to insert a
+    new translation messsage using insert(), and to remove one using
+    remove().
+
+    Translation tools often need more information than the bare source
+    text and translation, for example, context information to help
+    the translator. But end-user programs that are using translations
+    usually only need lookup. To cater for these different needs,
+    Translator can use stripped translator files that use the minimum
+    of memory and which support little more functionality than
+    findMessage().
+
+    Thus, load() may not load enough information to make anything more
+    than findMessage() work. save() has an argument indicating
+    whether to save just this minimum of information or to save
+    everything.
+
+    "Everything" means that for each translation item the following
+    information is kept:
+
+    \list
+    \i The \e {translated text} - the return value from tr().
+    \i The input key:
+        \list
+        \i The \e {source text} - usually the argument to tr().
+        \i The \e context - usually the class name for the tr() caller.
+        \i The \e comment - a comment that helps disambiguate different uses
+           of the same text in the same context.
+        \endlist
+    \endlist
+
+    The minimum for each item is just the information necessary for
+    findMessage() to return the right text. This may include the
+    source, context and comment, but usually it is just a hash value
+    and the translated text.
+
+    For example, the "Cancel" in a dialog might have "Anuluj" when the
+    program runs in Polish (in this case the source text would be
+    "Cancel"). The context would (normally) be the dialog's class
+    name; there would normally be no comment, and the translated text
+    would be "Anuluj".
+
+    But it's not always so simple. The Spanish version of a printer
+    dialog with settings for two-sided printing and binding would
+    probably require both "Activado" and "Activada" as translations
+    for "Enabled". In this case the source text would be "Enabled" in
+    both cases, and the context would be the dialog's class name, but
+    the two items would have disambiguating comments such as
+    "two-sided printing" for one and "binding" for the other. The
+    comment enables the translator to choose the appropriate gender
+    for the Spanish version, and enables Qt to distinguish between
+    translations.
+
+    Note that when Translator loads a stripped file, most functions
+    do not work. The functions that do work with stripped files are
+    explicitly documented as such.
+
+    \sa TranslatorMessage QCoreApplication::installTranslator()
+    QCoreApplication::removeTranslator() QObject::tr()
+    QCoreApplication::translate()
+*/
+
+/*!
+    \enum Translator::SaveMode
+
+    This enum type defines how Translator writes translation
+    files. There are two modes:
+
+    \value Everything  files are saved with all available information
+    \value Stripped  files are saved with just enough information for
+        end-user applications
+
+    Note that when Translator loads a stripped file, most functions do
+    not work. The functions that do work with stripped files are
+    explicitly documented as such.
+*/
+
+/*!
+    Constructs an empty message file object with parent \a parent that
+    is not connected to any file.
+*/
+
+Translator::Translator(QObject * parent)
+    : QTranslator(parent)
+{
+    d = new TranslatorPrivate(this);
+}
+
+/*!
+    Destroys the object and frees any allocated resources.
+*/
+
+Translator::~Translator()
+{
+    if (QCoreApplication::instance())
+        QCoreApplication::instance()->removeTranslator(this);
+    clear();
+    delete d;
+}
+
+/*!
+    Loads \a filename + \a suffix (".qm" if the \a suffix is
+    not specified), which may be an absolute file name or relative
+    to \a directory. The previous contents of this translator object
+    is discarded.
+
+    If the file name does not exist, other file names are tried
+    in the following order:
+
+    \list 1
+    \i File name without \a suffix appended.
+    \i File name with text after a character in \a search_delimiters
+       stripped ("_." is the default for \a search_delimiters if it is
+       an empty string) and \a suffix.
+    \i File name stripped without \a suffix appended.
+    \i File name stripped further, etc.
+    \endlist
+
+    For example, an application running in the fr_CA locale
+    (French-speaking Canada) might call load("foo.fr_ca",
+    "/opt/foolib"). load() would then try to open the first existing
+    readable file from this list:
+
+    \list 1
+    \i /opt/foolib/foo.fr_ca.qm
+    \i /opt/foolib/foo.fr_ca
+    \i /opt/foolib/foo.fr.qm
+    \i /opt/foolib/foo.fr
+    \i /opt/foolib/foo.qm
+    \i /opt/foolib/foo
+    \endlist
+
+    \sa save()
+*/
+
+bool Translator::load(const QString & filename, const QString & directory,
+                       const QString & search_delimiters,
+                       const QString & suffix)
+{
+    clear();
+
+    QString prefix;
+
+    if (filename[0] == QLatin1Char('/')
+#ifdef Q_WS_WIN
+         || (filename[0].isLetter() && filename[1] == QLatin1Char(':')) || filename[0] == QLatin1Char('\\')
+#endif
+        )
+        prefix = QLatin1String("");
+    else
+        prefix = directory;
+
+    if (prefix.length()) {
+        if (prefix[int(prefix.length()-1)] != QLatin1Char('/'))
+            prefix += QLatin1Char('/');
+    }
+
+    QString fname = filename;
+    QString realname;
+    QString delims;
+    delims = search_delimiters.isNull() ? QString::fromLatin1("_.") : search_delimiters;
+
+    for (;;) {
+        QFileInfo fi;
+
+        realname = prefix + fname + (suffix.isNull() ? QString::fromLatin1(".qm") : suffix);
+        fi.setFile(realname);
+        if (fi.isReadable())
+            break;
+
+        realname = prefix + fname;
+        fi.setFile(realname);
+        if (fi.isReadable())
+            break;
+
+        int rightmost = 0;
+        for (int i = 0; i < (int)delims.length(); i++) {
+            int k = fname.lastIndexOf(delims[i]);
+            if (k > rightmost)
+                rightmost = k;
+        }
+
+        // no truncations? fail
+        if (rightmost == 0)
+            return false;
+
+        fname.truncate(rightmost);
+    }
+
+    // realname is now the fully qualified name of a readable file.
+
+    bool ok = false;
+
+#ifdef QT_USE_MMAP
+
+#ifndef MAP_FILE
+#define MAP_FILE 0
+#endif
+#ifndef MAP_FAILED
+#define MAP_FAILED -1
+#endif
+
+    int fd = -1;
+    if (!realname.startsWith(QLatin1String(":")))
+        fd = QT_OPEN(QFile::encodeName(realname), O_RDONLY,
+#if defined(Q_OS_WIN)
+                 _S_IREAD | _S_IWRITE
+#else
+                 0666
+#endif
+                );
+    if (fd >= 0) {
+        struct stat st;
+        if (!fstat(fd, &st)) {
+            char *ptr;
+            ptr = reinterpret_cast<char *>(
+                        mmap(0, st.st_size,             // any address, whole file
+                             PROT_READ,                 // read-only memory
+                             MAP_FILE | MAP_PRIVATE,    // swap-backed map from file
+                             fd, 0));                   // from offset 0 of fd
+            if (ptr && ptr != reinterpret_cast<char *>(MAP_FAILED)) {
+                d->unmapPointer = ptr;
+                d->unmapLength = st.st_size;
+                ok = true;
+            }
+        }
+        ::close(fd);
+    }
+#endif // QT_USE_MMAP
+
+    if (!ok) {
+        QFile file(realname);
+        if (!file.exists())
+            return false;
+        d->unmapLength = file.size();
+        d->unmapPointer = new char[d->unmapLength];
+
+        if (file.open(QIODevice::ReadOnly))
+            ok = (d->unmapLength == (uint)file.read(d->unmapPointer, d->unmapLength));
+
+        if (!ok) {
+            delete [] d->unmapPointer;
+            d->unmapPointer = 0;
+            d->unmapLength = 0;
+            return false;
+        }
+    }
+
+    return d->do_load(reinterpret_cast<const uchar *>(d->unmapPointer), d->unmapLength);
+}
+
+/*!
+  \overload
+  \fn bool Translator::load(const uchar *data, int len)
+
+  Loads the .qm file data \a data of length \a len into the
+  translator.
+
+  The data is not copied. The caller must be able to guarantee that \a data
+  will not be deleted or modified.
+*/
+bool Translator::load(const uchar *data, int len)
+{
+    clear();
+    return d->do_load(data, len);
+}
+
+bool TranslatorPrivate::do_load(const uchar *data, int len)
+{
+    if (len < MagicLength || memcmp(data, magic, MagicLength) != 0) {
+        q->clear();
+        return false;
+    }
+
+    QByteArray array = QByteArray::fromRawData((const char *) data, len);
+    QDataStream s(&array, QIODevice::ReadOnly);
+    bool ok = true;
+
+    s.device()->seek(MagicLength);
+
+    quint8 tag = 0;
+    quint32 blockLen = 0;
+    s >> tag >> blockLen;
+    while (tag && blockLen) {
+        if ((quint32) s.device()->pos() + blockLen > (quint32) len) {
+            ok = false;
+            break;
+        }
+
+        if (tag == TranslatorPrivate::Contexts) {
+            contextArray = QByteArray(array.constData() + s.device()->pos(), blockLen);
+        } else if (tag == TranslatorPrivate::Hashes) {
+            offsetArray = QByteArray(array.constData() + s.device()->pos(), blockLen);
+        } else if (tag == TranslatorPrivate::Messages) {
+            messageArray = QByteArray(array.constData() + s.device()->pos(), blockLen);
+        }
+
+        if (!s.device()->seek(s.device()->pos() + blockLen)) {
+            ok = false;
+            break;
+        }
+        tag = 0;
+        blockLen = 0;
+        if (!s.atEnd())
+            s >> tag >> blockLen;
+    }
+
+    return ok;
+}
+
+#ifndef QT_NO_TRANSLATION_BUILDER
+
+/*!
+    Saves this message file to \a filename, overwriting the previous
+    contents of \a filename. If \a mode is \c Everything (the
+    default), all the information is preserved. If \a mode is \c
+    Stripped, any information that is not necessary for findMessage()
+    is stripped away.
+
+    \sa load()
+*/
+
+bool Translator::save(const QString & filename, SaveMode mode)
+{
+    QFile file(filename);
+    if (file.open(QIODevice::WriteOnly)) {
+        squeeze(mode);
+
+        QDataStream s(&file);
+        s.writeRawData((const char *)magic, MagicLength);
+        quint8 tag;
+
+        if (!d->offsetArray.isEmpty()) {
+            tag = (quint8)TranslatorPrivate::Hashes;
+            quint32 oas = (quint32)d->offsetArray.size();
+            s << tag << oas;
+            s.writeRawData(d->offsetArray, oas);
+        }
+        if (!d->messageArray.isEmpty()) {
+            tag = (quint8)TranslatorPrivate::Messages;
+            quint32 mas = (quint32)d->messageArray.size();
+            s << tag << mas;
+            s.writeRawData(d->messageArray, mas);
+        }
+        if (!d->contextArray.isEmpty()) {
+            tag = (quint8)TranslatorPrivate::Contexts;
+            quint32 cas = (quint32)d->contextArray.size();
+            s << tag << cas;
+            s.writeRawData(d->contextArray, cas);
+        }
+        return true;
+    }
+    return false;
+}
+
+#endif
+
+/*!
+    Empties this translator of all contents.
+
+    This function works with stripped translator files.
+*/
+
+void Translator::clear()
+{
+    if (d->unmapPointer && d->unmapLength) {
+#if defined(QT_USE_MMAP)
+        munmap(d->unmapPointer, d->unmapLength);
+#else
+        delete [] d->unmapPointer;
+#endif
+        d->unmapPointer = 0;
+        d->unmapLength = 0;
+    }
+
+    d->messageArray.clear();
+    d->offsetArray.clear();
+    d->contextArray.clear();
+#ifndef QT_NO_TRANSLATION_BUILDER
+    d->messages.clear();
+#endif
+
+    QEvent ev(QEvent::LanguageChange);
+    QCoreApplication::sendEvent(QCoreApplication::instance(), &ev);
+}
+
+#ifndef QT_NO_TRANSLATION_BUILDER
+
+/*!
+    Converts this message file to the compact format used to store
+    message files on disk.
+
+    You should never need to call this directly; save() and other
+    functions call it as necessary. \a mode is for internal use.
+
+    \sa save() unsqueeze()
+*/
+
+void Translator::squeeze(SaveMode mode)
+{
+    if (d->messages.isEmpty()) {
+        if (mode == Stripped)
+            unsqueeze();
+        else
+            return;
+    }
+
+    QMap<TranslatorMessage, void *> messages = d->messages;
+    clear();
+
+    QMap<TranslatorPrivate::Offset, void *> offsets;
+
+    QDataStream ms(&d->messageArray, QIODevice::WriteOnly);
+    QMap<TranslatorMessage, void *>::const_iterator it, next;
+    int cpPrev = 0, cpNext = 0;
+    for (it = messages.constBegin(); it != messages.constEnd(); ++it) {
+        cpPrev = cpNext;
+        next = it;
+        ++next;
+        if (next == messages.constEnd())
+            cpNext = 0;
+        else
+            cpNext = (int) it.key().commonPrefix(next.key());
+        offsets.insert(TranslatorPrivate::Offset(it.key(), ms.device()->pos()), (void *)0);
+        it.key().write(ms, mode == Stripped, (TranslatorMessage::Prefix)qMax(cpPrev, cpNext + 1));
+    }
+
+    QMap<TranslatorPrivate::Offset, void *>::Iterator offset;
+    offset = offsets.begin();
+    QDataStream ds(&d->offsetArray, QIODevice::WriteOnly);
+    while (offset != offsets.end()) {
+        TranslatorPrivate::Offset k = offset.key();
+        ++offset;
+        ds << (quint32)k.h << (quint32)k.o;
+    }
+
+    if (mode == Stripped) {
+        QMap<QByteArray, int> contextSet;
+        for (it = messages.constBegin(); it != messages.constEnd(); ++it)
+            ++contextSet[it.key().context()];
+
+        quint16 hTableSize;
+        if (contextSet.size() < 200)
+            hTableSize = (contextSet.size() < 60) ? 151 : 503;
+        else if (contextSet.size() < 2500)
+            hTableSize = (contextSet.size() < 750) ? 1511 : 5003;
+        else
+            hTableSize = (contextSet.size() < 10000) ? 15013 : 3 * contextSet.size() / 2;
+
+        QMultiMap<int, const char *> hashMap;
+        QMap<QByteArray, int>::const_iterator c;
+        for (c = contextSet.constBegin(); c != contextSet.constEnd(); ++c)
+            hashMap.insert(elfHash(c.key()) % hTableSize, c.key());
+
+        /*
+          The contexts found in this translator are stored in a hash
+          table to provide fast lookup. The context array has the
+          following format:
+
+              quint16 hTableSize;
+              quint16 hTable[hTableSize];
+              quint8  contextPool[...];
+
+          The context pool stores the contexts as Pascal strings:
+
+              quint8  len;
+              quint8  data[len];
+
+          Let's consider the look-up of context "FunnyDialog".  A
+          hash value between 0 and hTableSize - 1 is computed, say h.
+          If hTable[h] is 0, "FunnyDialog" is not covered by this
+          translator. Else, we check in the contextPool at offset
+          2 * hTable[h] to see if "FunnyDialog" is one of the
+          contexts stored there, until we find it or we meet the
+          empty string.
+        */
+        d->contextArray.resize(2 + (hTableSize << 1));
+        QDataStream t(&d->contextArray, QIODevice::WriteOnly);
+
+        quint16 *hTable = new quint16[hTableSize];
+        memset(hTable, 0, hTableSize * sizeof(quint16));
+
+        t << hTableSize;
+        t.device()->seek(2 + (hTableSize << 1));
+        t << (quint16)0; // the entry at offset 0 cannot be used
+        uint upto = 2;
+
+        QMap<int, const char *>::const_iterator entry = hashMap.constBegin();
+        while (entry != hashMap.constEnd()) {
+            int i = entry.key();
+            hTable[i] = (quint16)(upto >> 1);
+
+            do {
+                const char *con = entry.value();
+                uint len = (uint)qstrlen(con);
+                len = qMin(len, 255u);
+                t << (quint8)len;
+                t.writeRawData(con, len);
+                upto += 1 + len;
+                ++entry;
+            } while (entry != hashMap.constEnd() && entry.key() == i);
+            do {
+                t << (quint8) 0; // empty string
+                ++upto;
+            } while ((upto & 0x1) != 0); // offsets have to be even
+        }
+        t.device()->seek(2);
+        for (int j = 0; j < hTableSize; j++)
+            t << hTable[j];
+        delete [] hTable;
+
+        if (upto > 131072) {
+            qWarning("Translator::squeeze: Too many contexts");
+            d->contextArray.clear();
+        }
+    }
+}
+
+
+/*!
+    Converts this message file into an easily modifiable data
+    structure, less compact than the format used in the files.
+
+    You should never need to call this function; it is called by
+    insert() and friends as necessary.
+
+    \sa squeeze()
+*/
+
+void Translator::unsqueeze()
+{
+    if (!d->messages.isEmpty() || d->messageArray.isEmpty())
+        return;
+
+    qFatal("Cannot unsqueeze (bug in Linguist?)");
+}
+
+
+/*!
+    Returns true if this message file contains a message with the key
+    (\a context, \a sourceText, \a comment); otherwise returns false.
+
+    This function works with stripped translator files.
+
+    (This is is a one-liner that calls findMessage().)
+*/
+
+bool Translator::contains(const char* context, const char* sourceText,
+                            const char* comment) const
+{
+    return !findMessage(context, sourceText, comment).translation().isNull();
+}
+
+
+bool Translator::contains(const char *context,
+                            const char *comment, const QString &fileName, int lineNumber) const
+{
+    return !findMessage(context, 0, comment, fileName, lineNumber).isNull();
+}
+
+/*!
+    Inserts \a message into this message file.
+
+    This function does \e not work with stripped translator files. It
+    may appear to, but that is not dependable.
+
+    \sa remove()
+*/
+
+void Translator::insert(const TranslatorMessage& message)
+{
+    unsqueeze();
+    d->messages.remove(message); // safer
+    d->messages.insert(message, (void *) 0);
+}
+
+/*!
+  \fn void Translator::insert(const char *context, const char
+ *sourceText, const QString &translation)
+  \overload
+  \obsolete
+
+  Inserts the \a sourceText and \a translation into the translator
+  with the given \a context.
+*/
+
+/*!
+    Removes \a message from this translator.
+
+    This function works with stripped translator files.
+
+    \sa insert()
+*/
+
+void Translator::remove(const TranslatorMessage& message)
+{
+    unsqueeze();
+    d->messages.remove(message);
+}
+
+
+/*!
+  \fn void Translator::remove(const char *, const char *)
+  \overload
+  \obsolete
+
+  Removes the translation associated to the key (\a context, \a sourceText,
+  "") from this translator.
+*/
+#endif
+
+/*!  Returns the TranslatorMessage for the key
+     (\a context, \a sourceText, \a comment). If none is found,
+     also tries (\a context, \a sourceText, "").
+*/
+
+TranslatorMessage Translator::findMessage(const char *context, const char *sourceText,
+                                          const char *comment,
+                                          const QString &fileName, int lineNumber) const
+{
+    if (context == 0)
+        context = "";
+    if (sourceText == 0)
+        sourceText = "";
+    if (comment == 0)
+        comment = "";
+
+    QString myFilename = fileName;
+    int myLineNumber = lineNumber;
+
+    if (!d->messages.isEmpty()) {
+        QMap<TranslatorMessage, void *>::const_iterator it;
+
+        // Either we want to find an item that matches context, sourcetext (and optionally comment)
+        // Or we want to find an item that matches context, filename, linenumber (and optionally comment)
+        it = d->messages.find(TranslatorMessage(context, sourceText, comment, myFilename, myLineNumber));
+        if (it != d->messages.constEnd())
+            return it.key();
+
+        if (comment[0]) {
+            it = d->messages.find(TranslatorMessage(context, sourceText, "", myFilename, myLineNumber));
+            if (it != d->messages.constEnd())
+                return it.key();
+        }
+        it = d->messages.find(TranslatorMessage(context, "", comment, myFilename, myLineNumber));
+        if (it != d->messages.constEnd())
+            return it.key();
+        if (comment[0]) {
+            it = d->messages.find(TranslatorMessage(context, "", "", myFilename, myLineNumber));
+            if (it != d->messages.constEnd())
+                return it.key();
+        }
+        return TranslatorMessage();
+    }
+
+    return TranslatorMessage();
+}
+
+/*!
+    Returns true if this translator is empty, otherwise returns false.
+    This function works with stripped and unstripped translation files.
+*/
+bool Translator::isEmpty() const
+{
+    return !d->unmapPointer && !d->unmapLength && d->messageArray.isEmpty() &&
+           d->offsetArray.isEmpty() && d->contextArray.isEmpty() && d->messages.isEmpty();
+}
+
+
+#ifndef QT_NO_TRANSLATION_BUILDER
+
+/*!
+    Returns a list of the messages in the translator. This function is
+    rather slow. Because it is seldom called, it's optimized for
+    simplicity and small size, rather than speed.
+
+    If you want to iterate over the list, you should iterate over a
+    copy, e.g.
+    \code
+    QList<TranslatorMessage> list = myTranslator.messages();
+    QList<TranslatorMessage>::Iterator it = list.begin();
+    while (it != list.end()) {
+        process_message(*it);
+        ++it;
+    }
+  \endcode
+*/
+
+QList<TranslatorMessage> Translator::messages() const
+{
+    ((Translator *) this)->unsqueeze();
+    return d->messages.keys();
+}
+
+#endif
+
+/*!
+    \class TranslatorMessage
+
+    \brief The TranslatorMessage class contains a translator message and its
+    properties.
+
+    \ingroup i18n
+    \ingroup environment
+
+    This class is of no interest to most applications. It is useful
+    for translation tools such as \l{Qt Linguist Manual}{Qt Linguist}.
+    It is provided simply to make the API complete and regular.
+
+    For a Translator object, a lookup key is a triple (\e context, \e
+    {source text}, \e comment) that uniquely identifies a message. An
+    extended key is a quadruple (\e hash, \e context, \e {source
+    text}, \e comment), where \e hash is computed from the source text
+    and the comment. Unless you plan to read and write messages
+    yourself, you need not worry about the hash value.
+
+    TranslatorMessage stores this triple or quadruple and the relevant
+    translation if there is any.
+
+    \sa Translator
+*/
+
+/*!
+    Constructs a translator message with the extended key (0, 0, 0, 0)
+    and an empty string as translation.
+*/
+
+TranslatorMessage::TranslatorMessage()
+    : h(0), m_fileName(), m_lineNumber(-1)
+{
+}
+
+
+/*!
+    Constructs an translator message with the extended key (\e h, \a
+    context, \a sourceText, \a comment), where \e h is computed from
+    \a sourceText and \a comment, and possibly with a \a translation.
+*/
+
+TranslatorMessage::TranslatorMessage(const char * context,
+                                        const char * sourceText,
+                                        const char * comment,
+                                        const QString &fileName,
+                                        int lineNumber,
+                                        const QStringList& translations)
+    : cx(context), st(sourceText), cm(comment), m_translations(translations),
+      m_fileName(fileName), m_lineNumber(lineNumber)
+{
+    // 0 means we don't know, "" means empty
+    if (cx == (const char*)0)
+        cx = "";
+    if (st == (const char*)0)
+        st = "";
+    if (cm == (const char*)0)
+        cm = "";
+    h = elfHash(st + cm);
+}
+
+
+/*!
+    Constructs a copy of translator message \a m.
+*/
+
+TranslatorMessage::TranslatorMessage(const TranslatorMessage & m)
+    : cx(m.cx), st(m.st), cm(m.cm), m_translations(m.m_translations),
+      m_fileName(m.m_fileName), m_lineNumber(m.m_lineNumber)
+{
+    h = m.h;
+}
+
+
+/*!
+    Assigns message \a m to this translator message and returns a
+    reference to this translator message.
+*/
+
+TranslatorMessage & TranslatorMessage::operator=(
+        const TranslatorMessage & m)
+{
+    h = m.h;
+    cx = m.cx;
+    st = m.st;
+    cm = m.cm;
+    m_translations = m.m_translations;
+    m_fileName = m.m_fileName;
+    m_lineNumber = m.m_lineNumber;
+    return *this;
+}
+
+
+/*!
+    \fn uint TranslatorMessage::hash() const
+
+    Returns the hash value used internally to represent the lookup
+    key. This value is zero only if this translator message was
+    constructed from a stream containing invalid data.
+
+    The hashing function is unspecified, but it will remain unchanged
+    in future versions of Qt.
+*/
+
+/*!
+    \fn const char *TranslatorMessage::context() const
+
+    Returns the context for this message (e.g. "MyDialog").
+*/
+
+/*!
+    \fn const char *TranslatorMessage::sourceText() const
+
+    Returns the source text of this message (e.g. "&Save").
+*/
+
+/*!
+    \fn const char *TranslatorMessage::comment() const
+
+    Returns the comment for this message (e.g. "File|Save").
+*/
+
+/*!
+    \fn void TranslatorMessage::setTranslation(const QString & translation)
+
+    Sets the translation of the source text to \a translation.
+
+    \sa translation()
+*/
+
+/*!
+    \fn QString TranslatorMessage::translation() const
+
+    Returns the translation of the source text (e.g., "&Sauvegarder").
+
+    \sa setTranslation()
+*/
+
+/*!
+    \enum TranslatorMessage::Prefix
+
+    Let (\e h, \e c, \e s, \e m) be the extended key. The possible
+    prefixes are
+
+    \value NoPrefix  no prefix
+    \value Hash  only (\e h)
+    \value HashContext  only (\e h, \e c)
+    \value HashContextSourceText  only (\e h, \e c, \e s)
+    \value HashContextSourceTextComment  the whole extended key, (\e
+        h, \e c, \e s, \e m)
+
+    \sa write() commonPrefix()
+*/
+
+/*!
+    Writes this translator message to the \a stream. If \a strip is
+    false (the default), all the information in the message is
+    written. If \a strip is true, only the part of the extended key
+    specified by \a prefix is written with the translation (\c
+    HashContextSourceTextComment by default).
+
+    \sa commonPrefix()
+*/
+
+void TranslatorMessage::write(QDataStream & stream, bool strip, Prefix prefix) const
+{
+    for (int i = 0; i < m_translations.count(); ++i)
+        stream << quint8(Tag_Translation) << m_translations.at(i);
+
+    if (!strip)
+        prefix = HashContextSourceTextComment;
+
+    switch (prefix) {
+    case HashContextSourceTextComment:
+        stream << quint8(Tag_Comment) << cm;
+        // fall through
+    case HashContextSourceText:
+        stream << quint8(Tag_SourceText) << st;
+        // fall through
+    case HashContext:
+        stream << quint8(Tag_Context) << cx;
+    default:
+        ;
+    }
+
+    stream << quint8(Tag_End);
+}
+
+
+/*!
+    Returns the widest lookup prefix that is common to this translator
+    message and to message \a m.
+
+    For example, if the extended key is for this message is (71,
+    "PrintDialog", "Yes", "Print?") and that for \a m is (71,
+    "PrintDialog", "No", "Print?"), this function returns \c
+    HashContext.
+
+    \sa write()
+*/
+
+TranslatorMessage::Prefix TranslatorMessage::commonPrefix(
+        const TranslatorMessage& m) const
+{
+    if (h != m.h)
+        return NoPrefix;
+    if (cx != m.cx)
+        return Hash;
+    if (st != m.st)
+        return HashContext;
+    if (cm != m.cm)
+        return HashContextSourceText;
+    return HashContextSourceTextComment;
+}
+
+
+/*!
+ Returns true if the extended key of this object is equal to that of
+ \a m; otherwise returns false.
+*/
+
+bool TranslatorMessage::operator==(const TranslatorMessage& m) const
+{
+    bool isHashEq = (h == m.h ? true : false);
+    bool isContextEq = (cx == m.cx ? true : false);
+    bool isSourceEq = (st == m.st ? true : false);
+    bool isCommentEq = (cm == m.cm ? true : false);
+    bool isLocationEq = m_lineNumber == m.m_lineNumber && m_fileName == m.m_fileName;
+    
+    return (isHashEq && isContextEq && isSourceEq && isCommentEq) || // translation can be different, but treat the equal
+            (st.isEmpty() && isContextEq && isCommentEq && isLocationEq);
+}
+
+
+/*!
+    \fn bool TranslatorMessage::operator!=(const TranslatorMessage& m) const
+
+    Returns true if the extended key of this object is different from
+    that of \a m; otherwise returns false.
+*/
+
+
+/*!
+    Returns true if the extended key of this object is
+    lexicographically before than that of \a m; otherwise returns
+    false.
+*/
+
+bool TranslatorMessage::operator<(const TranslatorMessage& m) const
+{
+    return h != m.h ? h < m.h
+           : (cx != m.cx ? cx < m.cx
+             : (st != m.st ? st < m.st : cm < m.cm));
+}
+
+
+/*!
+    \fn bool TranslatorMessage::operator<=(const TranslatorMessage& m) const
+
+    Returns true if the extended key of this object is
+    lexicographically before that of \a m or if they are equal;
+    otherwise returns false.
+*/
+
+/*!
+    \fn bool TranslatorMessage::operator>(const TranslatorMessage& m) const
+
+    Returns true if the extended key of this object is
+    lexicographically after that of \a m; otherwise returns false.
+*/
+
+/*!
+    \fn bool TranslatorMessage::operator>=(const TranslatorMessage& m) const
+
+    Returns true if the extended key of this object is
+    lexicographically after that of \a m or if they are equal;
+    otherwise returns false.
+*/
+
+/*!
+    \fn QString Translator::find(const char *context, const char *sourceText, const char * comment) const
+
+    Use findMessage() instead.
+*/
+
+bool getNumerusInfo(QLocale::Language language, QLocale::Country country,
+                           QStringList *forms)
+{
+    forever {
+        for (int i = 0; i < NumerusTableSize; ++i) {
+            const NumerusTableEntry &entry = numerusTable[i];
+            for (int j = 0; entry.languages[j] != EOL; ++j) {
+                if (entry.languages[j] == language
+                        && ((!entry.countries && country == QLocale::AnyCountry)
+                            || (entry.countries && entry.countries[j] == country))) {
+                    if (forms) {
+                        forms->clear();
+                        for (int k = 0; entry.forms[k]; ++k)
+                            forms->append(QLatin1String(entry.forms[k]));
+                    }
+                    return true;
+                }
+            }
+        }
+
+        if (country == QLocale::AnyCountry)
+            break;
+        country = QLocale::AnyCountry;
+    }
+    return false;
+}
+
+#endif // QT_NO_TRANSLATION
diff --git a/pylupdate/translator.h b/pylupdate/translator.h
new file mode 100644
index 0000000..0c37780
--- /dev/null
+++ b/pylupdate/translator.h
@@ -0,0 +1,448 @@
+/**********************************************************************
+** Copyright (C) 2002-2007 Detlev Offenbach <detlev at die-offenbachs.de>
+**
+** This is a modified version of lupdate. The original is part of Qt-Linguist.
+** The copyright of the original file can be found below.
+**
+** This version is modified to handle python sources.
+**
+**   The file is provided AS IS with NO WARRANTY OF ANY KIND,
+**   INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+**   A PARTICULAR PURPOSE.
+****************************************************************************/
+
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef TRANSLATOR_H
+#define TRANSLATOR_H
+
+#include "QtCore/qobject.h"
+#include "QtCore/qbytearray.h"
+#include "QtCore/qstringlist.h"
+#include "QtCore/qlocale.h"
+#include <qtranslator.h>
+
+class TranslatorPrivate;
+
+#if !defined(QT_BEGIN_NAMESPACE)
+#define QT_BEGIN_NAMESPACE
+#define QT_END_NAMESPACE
+#endif
+
+QT_BEGIN_NAMESPACE
+template <typename T> class QList;
+QT_END_NAMESPACE
+
+class TranslatorMessage
+{
+public:
+    TranslatorMessage();
+    TranslatorMessage(const char * context, const char * sourceText,
+                       const char * comment,
+                       const QString &fileName,
+                       int lineNumber,
+                       const QStringList& translations = QStringList());
+    TranslatorMessage(const TranslatorMessage & m);
+
+    TranslatorMessage & operator=(const TranslatorMessage & m);
+
+    uint hash() const { return h; }
+    const char *context() const { return cx.isNull() ? 0 : cx.constData(); }
+    const char *sourceText() const { return st.isNull() ? 0 : st.constData(); }
+    const char *comment() const { return cm.isNull() ? 0 : cm.constData(); }
+
+    inline void setTranslations(const QStringList &translations);
+    QStringList translations() const { return m_translations; }
+    void setTranslation(const QString &translation) { m_translations = QStringList(translation); }
+    QString translation() const { return m_translations.value(0); }
+    bool isTranslated() const { return m_translations.count() > 1 || !m_translations.value(0).isEmpty(); }
+
+    enum Prefix { NoPrefix, Hash, HashContext, HashContextSourceText,
+                  HashContextSourceTextComment };
+    void write(QDataStream & s, bool strip = false,
+                Prefix prefix = HashContextSourceTextComment) const;
+    Prefix commonPrefix(const TranslatorMessage&) const;
+
+    bool operator==(const TranslatorMessage& m) const;
+    bool operator!=(const TranslatorMessage& m) const
+    { return !operator==(m); }
+    bool operator<(const TranslatorMessage& m) const;
+    bool operator<=(const TranslatorMessage& m) const
+    { return !m.operator<(*this); }
+    bool operator>(const TranslatorMessage& m) const
+    { return m.operator<(*this); }
+    bool operator>=(const TranslatorMessage& m) const
+    { return !operator<(m); }
+
+    QString fileName(void) const { return m_fileName; }
+    void setFileName(const QString &fileName) { m_fileName = fileName; }
+    int lineNumber(void) const { return m_lineNumber; }
+    void setLineNumber(int lineNumber) { m_lineNumber = lineNumber; }
+    bool isNull() const { return st.isNull() && m_lineNumber == -1 && m_translations.isEmpty(); }
+
+private:
+    uint h;
+    QByteArray cx;
+    QByteArray st;
+    QByteArray cm;
+    QStringList m_translations;
+    QString     m_fileName;
+    int         m_lineNumber;
+
+    enum Tag { Tag_End = 1, Tag_SourceText16, Tag_Translation, Tag_Context16,
+               Tag_Hash, Tag_SourceText, Tag_Context, Tag_Comment,
+               Tag_Obsolete1 };
+};
+Q_DECLARE_TYPEINFO(TranslatorMessage, Q_MOVABLE_TYPE);
+
+inline void TranslatorMessage::setTranslations(const QStringList &translations)
+{ m_translations = translations; }
+
+class Translator : public QTranslator
+{
+    Q_OBJECT
+public:
+    explicit Translator(QObject *parent = 0);
+    ~Translator();
+
+    virtual TranslatorMessage findMessage(const char *context, const char *sourceText,
+                                          const char *comment = 0, 
+                                          const QString &fileName = 0, int lineNumber = -1) const;
+    virtual QString translate(const char *context, const char *sourceText,
+                              const char *comment = 0, int = -1) const
+        { return findMessage(context, sourceText, comment).translation(); }
+
+    bool load(const QString & filename,
+               const QString & directory = QString(),
+               const QString & search_delimiters = QString(),
+               const QString & suffix = QString());
+    bool load(const uchar *data, int len);
+
+    void clear();
+
+    enum SaveMode { Everything, Stripped };
+
+    bool save(const QString & filename, SaveMode mode = Everything);
+
+    void insert(const TranslatorMessage&);
+    inline void insert(const char *context, const char *sourceText, const QString &fileName, int lineNo, const QStringList &translations) {
+        insert(TranslatorMessage(context, sourceText, "", fileName, lineNo, translations));
+    }
+    void remove(const TranslatorMessage&);
+    inline void remove(const char *context, const char *sourceText) {
+        remove(TranslatorMessage(context, sourceText, "", QLatin1String(""), -1));
+    }
+    bool contains(const char *context, const char *sourceText, const char * comment = 0) const;
+    bool contains(const char *context, const char *comment, const QString &fileName, int lineNumber) const;
+
+    void squeeze(SaveMode = Everything);
+    void unsqueeze();
+
+    QList<TranslatorMessage> messages() const;
+
+    bool isEmpty() const;
+
+private:
+    Q_DISABLE_COPY(Translator)
+    TranslatorPrivate *d;
+};
+
+static const char * const japaneseStyleForms[] = { "Unique Form", 0 };
+static const char * const englishStyleForms[] = { "Singular", "Plural", 0 };
+static const char * const frenchStyleForms[] = { "Singular", "Plural", 0 };
+static const char * const latvianForms[] = { "Singular", "Plural", "Nullar", 0 };
+static const char * const irishStyleForms[] = { "Singular", "Dual", "Plural", 0 };
+static const char * const czechForms[] = { "Singular", "Dual", "Plural", 0 };
+static const char * const slovakForms[] = { "Singular", "Dual", "Plural", 0 };
+static const char * const macedonianForms[] = { "Singular", "Dual", "Plural", 0 };
+static const char * const lithuanianForms[] = { "Singular", "Dual", "Plural", 0 };
+static const char * const russianStyleForms[] = { "Singular", "Dual", "Plural", 0 };
+static const char * const polishForms[] = { "Singular", "Paucal", "Plural", 0 };
+static const char * const romanianForms[] =
+    { "Singular", "Plural Form for 2 to 19", "Plural", 0 };
+static const char * const slovenianForms[] = { "Singular", "Dual", "Trial", "Plural", 0 };
+static const char * const malteseForms[] =
+    { "Singular", "Plural Form for 2 to 10", "Plural Form for 11 to 19", "Plural", 0 };
+static const char * const welshForms[] =
+    { "Nullar", "Singular", "Dual", "Sexal", "Plural", 0 };
+static const char * const arabicForms[] =
+    { "Nullar", "Singular", "Dual", "Minority Plural", "Plural", "Plural Form for 100, 200, ...", 0 };
+
+#define EOL QLocale::C
+
+static const QLocale::Language japaneseStyleLanguages[] = {
+    QLocale::Afan,
+    QLocale::Armenian,
+    QLocale::Bhutani,
+    QLocale::Bislama,
+    QLocale::Burmese,
+    QLocale::Chinese,
+#if QT_VERSION >= 0x050000
+    QLocale::Fijian,
+#else
+    QLocale::FijiLanguage,
+#endif
+    QLocale::Guarani,
+    QLocale::Hungarian,
+    QLocale::Indonesian,
+    QLocale::Japanese,
+    QLocale::Javanese,
+    QLocale::Korean,
+    QLocale::Malay,
+    QLocale::NauruLanguage,
+    QLocale::Persian,
+    QLocale::Sundanese,
+    QLocale::Thai,
+    QLocale::Tibetan,
+    QLocale::Vietnamese,
+    QLocale::Yoruba,
+    QLocale::Zhuang,
+    EOL
+};
+
+static const QLocale::Language englishStyleLanguages[] = {
+    QLocale::Abkhazian,
+    QLocale::Afar,
+    QLocale::Afrikaans,
+    QLocale::Albanian,
+    QLocale::Amharic,
+    QLocale::Assamese,
+    QLocale::Aymara,
+    QLocale::Azerbaijani,
+    QLocale::Bashkir,
+    QLocale::Basque,
+    QLocale::Bengali,
+    QLocale::Bihari,
+    // Missing: Bokmal,
+    QLocale::Bulgarian,
+    QLocale::Cambodian,
+    QLocale::Catalan,
+    QLocale::Cornish,
+    QLocale::Corsican,
+    QLocale::Danish,
+    QLocale::Dutch,
+    QLocale::English,
+    QLocale::Esperanto,
+    QLocale::Estonian,
+    QLocale::Faroese,
+    QLocale::Finnish,
+    // Missing: Friulian,
+    QLocale::Frisian,
+    QLocale::Galician,
+    QLocale::Georgian,
+    QLocale::German,
+    QLocale::Greek,
+    QLocale::Greenlandic,
+    QLocale::Gujarati,
+    QLocale::Hausa,
+    QLocale::Hebrew,
+    QLocale::Hindi,
+    QLocale::Icelandic,
+    QLocale::Interlingua,
+    QLocale::Interlingue,
+    QLocale::Italian,
+    QLocale::Kannada,
+    QLocale::Kashmiri,
+    QLocale::Kazakh,
+    QLocale::Kinyarwanda,
+    QLocale::Kirghiz,
+    QLocale::Kurdish,
+    QLocale::Kurundi,
+#if QT_VERSION >= 0x050000
+    QLocale::Lao,
+#else
+    QLocale::Laothian,
+#endif
+    QLocale::Latin,
+    // Missing: Letzeburgesch,
+    QLocale::Lingala,
+    QLocale::Malagasy,
+    QLocale::Malayalam,
+    QLocale::Marathi,
+    QLocale::Mongolian,
+    // Missing: Nahuatl,
+    QLocale::Nepali,
+    // Missing: Northern Sotho,
+    QLocale::Norwegian,
+#if QT_VERSION >= 0x050000
+    QLocale::NorwegianNynorsk,
+#else
+    QLocale::Nynorsk,
+#endif
+    QLocale::Occitan,
+    QLocale::Oriya,
+    QLocale::Pashto,
+    QLocale::Portuguese,
+    QLocale::Punjabi,
+    QLocale::Quechua,
+    QLocale::RhaetoRomance,
+#if QT_VERSION >= 0x050000
+    QLocale::SouthernSotho,
+    QLocale::Tswana,
+#else
+    QLocale::Sesotho,
+    QLocale::Setswana,
+#endif
+    QLocale::Shona,
+    QLocale::Sindhi,
+#if QT_VERSION >= 0x050000
+    QLocale::Sinhala,
+    QLocale::Swati,
+#else
+    QLocale::Singhalese,
+    QLocale::Siswati,
+#endif
+    QLocale::Somali,
+    QLocale::Spanish,
+    QLocale::Swahili,
+    QLocale::Swedish,
+    QLocale::Tagalog,
+    QLocale::Tajik,
+    QLocale::Tamil,
+    QLocale::Tatar,
+    QLocale::Telugu,
+#if QT_VERSION >= 0x050000
+    QLocale::Tongan,
+#else
+    QLocale::TongaLanguage,
+#endif
+    QLocale::Tsonga,
+    QLocale::Turkish,
+    QLocale::Turkmen,
+    QLocale::Twi,
+    QLocale::Uigur,
+    QLocale::Uzbek,
+    QLocale::Volapuk,
+    QLocale::Wolof,
+    QLocale::Xhosa,
+    QLocale::Yiddish,
+    QLocale::Zulu,
+    EOL
+};
+static const QLocale::Language frenchStyleLanguages[] = {
+    // keep synchronized with frenchStyleCountries
+    QLocale::Breton,
+    QLocale::French,
+    QLocale::Portuguese,
+    // Missing: Filipino,
+    QLocale::Tigrinya,
+    // Missing: Walloon
+    EOL
+};
+static const QLocale::Language latvianLanguage[] = { QLocale::Latvian, EOL };
+static const QLocale::Language irishStyleLanguages[] = {
+    QLocale::Divehi,
+    QLocale::Gaelic,
+    QLocale::Inuktitut,
+    QLocale::Inupiak,
+    QLocale::Irish,
+    QLocale::Manx,
+    QLocale::Maori,
+    // Missing: Sami,
+    QLocale::Samoan,
+    QLocale::Sanskrit,
+    EOL
+};
+static const QLocale::Language czechLanguage[] = { QLocale::Czech, EOL };
+static const QLocale::Language slovakLanguage[] = { QLocale::Slovak, EOL };
+static const QLocale::Language macedonianLanguage[] = { QLocale::Macedonian, EOL };
+static const QLocale::Language lithuanianLanguage[] = { QLocale::Lithuanian, EOL };
+static const QLocale::Language russianStyleLanguages[] = {
+    QLocale::Bosnian,
+    QLocale::Byelorussian,
+    QLocale::Croatian,
+    QLocale::Russian,
+    QLocale::Serbian,
+    QLocale::SerboCroatian,
+    QLocale::Ukrainian,
+    EOL
+};
+static const QLocale::Language polishLanguage[] = { QLocale::Polish, EOL };
+static const QLocale::Language romanianLanguages[] = {
+    QLocale::Moldavian,
+    QLocale::Romanian,
+    EOL
+};
+static const QLocale::Language slovenianLanguage[] = { QLocale::Slovenian, EOL };
+static const QLocale::Language malteseLanguage[] = { QLocale::Maltese, EOL };
+static const QLocale::Language welshLanguage[] = { QLocale::Welsh, EOL };
+static const QLocale::Language arabicLanguage[] = { QLocale::Arabic, EOL };
+
+static const QLocale::Country frenchStyleCountries[] = {
+    // keep synchronized with frenchStyleLanguages
+    QLocale::AnyCountry,
+    QLocale::AnyCountry,
+    QLocale::Brazil,
+    QLocale::AnyCountry
+};
+
+struct NumerusTableEntry {
+    const char * const *forms;
+    const QLocale::Language *languages;
+    const QLocale::Country *countries;
+};
+
+static const NumerusTableEntry numerusTable[] = {
+    { japaneseStyleForms, japaneseStyleLanguages, 0 },
+    { englishStyleForms, englishStyleLanguages, 0 },
+    { frenchStyleForms, frenchStyleLanguages, frenchStyleCountries },
+    { latvianForms, latvianLanguage, 0 },
+    { irishStyleForms, irishStyleLanguages, 0 },
+    { czechForms, czechLanguage, 0 },
+    { slovakForms, slovakLanguage, 0 },
+    { macedonianForms, macedonianLanguage, 0 },
+    { lithuanianForms, lithuanianLanguage, 0 },
+    { russianStyleForms, russianStyleLanguages, 0 },
+    { polishForms, polishLanguage, 0 },
+    { romanianForms, romanianLanguages, 0 },
+    { slovenianForms, slovenianLanguage, 0 },
+    { malteseForms, malteseLanguage, 0 },
+    { welshForms, welshLanguage, 0 },
+    { arabicForms, arabicLanguage, 0 }
+};
+
+static const int NumerusTableSize = sizeof(numerusTable) / sizeof(numerusTable[0]);
+
+bool getNumerusInfo(QLocale::Language language, QLocale::Country country,
+                           QStringList *forms);
+
+#endif // TRANSLATOR_H
diff --git a/pyrcc/main.cpp b/pyrcc/main.cpp
new file mode 100644
index 0000000..ee35265
--- /dev/null
+++ b/pyrcc/main.cpp
@@ -0,0 +1,195 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qlocale.h>
+#include <qtextstream.h>
+#include <qbytearray.h>
+#include <qhash.h>
+#include <qdir.h>
+#include "rcc.h"
+
+// Some static globals
+static QString initName;
+static bool verbose = false;
+static int compressLevel = CONSTANT_COMPRESSLEVEL_DEFAULT;
+static int compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT;
+static QString resourceRoot;
+
+bool processResourceFile(const QStringList &filenamesIn, const QString &filenameOut, bool list)
+{
+    if (verbose)
+        fprintf(stderr, "PyQt4 resource compiler\n");
+
+    //setup
+    RCCResourceLibrary library;
+    library.setInputFiles(filenamesIn);
+    library.setInitName(initName);
+    library.setVerbose(verbose);
+    library.setCompressLevel(compressLevel);
+    library.setCompressThreshold(compressThreshold);
+    library.setResourceRoot(resourceRoot);
+    if(!library.readFiles())
+        return false;
+
+    //open output
+    FILE *out_fd = stdout;
+    if (!filenameOut.isEmpty() && filenameOut != QLatin1String("-")) {
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+		if (fopen_s(&out_fd, filenameOut.toLocal8Bit().constData(), "w")) {
+#else
+        out_fd = fopen(filenameOut.toLocal8Bit().constData(), "w");
+        if(!out_fd) {
+#endif
+            fprintf(stderr, "Unable to open %s for writing\n", filenameOut.toLatin1().constData());
+            return false;
+        }
+    }
+
+    //do the task
+    bool ret = true;
+    if(list) {
+        const QStringList data = library.dataFiles();
+        for(int i = 0; i < data.size(); ++i)
+            fprintf(out_fd, "%s\n", QDir::cleanPath(data.at(i)).toLatin1().constData());
+    } else {
+        ret = library.output(out_fd);
+    }
+    if(out_fd != stdout)
+        fclose(out_fd);
+
+    //done
+    return ret;
+}
+
+int showHelp(const char *argv0, const QString &error)
+{
+    fprintf(stderr, "PyQt5 resource compiler\n");
+    if (!error.isEmpty())
+        fprintf(stderr, "%s: %s\n", argv0, error.toLatin1().constData());
+    fprintf(stderr, "Usage: %s  [options] <inputs>\n\n"
+            "Options:\n"
+            "    -o file           Write output to file rather than stdout\n"
+            "    -name name        Create an external initialization function with name\n"
+            "    -threshold level  Threshold to consider compressing files\n"
+            "    -compress level   Compress input files by level\n"
+            "    -root path        Prefix resource access path with root path\n"
+            "    -no-compress      Disable all compression\n"
+            "    -version          Display version\n"
+            "    -help             Display this information\n",
+            argv0);
+    return 1;
+}
+
+int main(int argc, char *argv[])
+{
+    QString outFilename;
+    bool helpRequested = false, list = false;
+    QStringList files;
+
+    //parse options
+    QString errorMsg;
+    for (int i = 1; i < argc && errorMsg.isEmpty(); i++) {
+        if (argv[i][0] == '-') {   // option
+            QByteArray opt = argv[i] + 1;
+            if (opt == "o") {
+                if (!(i < argc-1)) {
+                    errorMsg = QLatin1String("Missing output name");
+                    break;
+                }
+                outFilename = argv[++i];
+            } else if(opt == "name") {
+                if (!(i < argc-1)) {
+                    errorMsg = QLatin1String("Missing target name");
+                    break;
+                }
+                initName = argv[++i];
+            } else if(opt == "root") {
+                if (!(i < argc-1)) {
+                    errorMsg = QLatin1String("Missing root path");
+                    break;
+                }
+                resourceRoot = QDir::cleanPath(argv[++i]);
+                if(resourceRoot.isEmpty() || resourceRoot[0] != '/')
+                    errorMsg = QLatin1String("Root must start with a /");
+            } else if(opt == "compress") {
+                if (!(i < argc-1)) {
+                    errorMsg = QLatin1String("Missing compression level");
+                    break;
+                }
+                compressLevel = QString(argv[++i]).toInt();
+            } else if(opt == "threshold") {
+                if (!(i < argc-1)) {
+                    errorMsg = QLatin1String("Missing compression threshold");
+                    break;
+                }
+                compressThreshold = QString(argv[++i]).toInt();
+            } else if(opt == "verbose") {
+                verbose = true;
+            } else if(opt == "list") {
+                list = true;
+            } else if(opt == "version") {
+                fprintf(stderr, "Resource Compiler for Qt version %s\n", QT_VERSION_STR);
+                return 1;
+            } else if(opt == "help" || opt == "h") {
+                helpRequested = true;
+            } else if(opt == "no-compress") {
+                compressLevel = -2;
+            } else {
+                errorMsg = QString(QLatin1String("Unknown option: '%1'")).arg(argv[i]);
+            }
+        } else {
+            QString fname = QString::fromLocal8Bit(argv[i]);
+            if(!QFile::exists(fname)) {
+                qWarning("%s: File does not exist '%s'", argv[0], argv[i]);
+                return 1;
+            }
+            files.append(fname);
+        }
+    }
+
+    if (!files.size() || !errorMsg.isEmpty() || helpRequested)
+        return showHelp(argv[0], errorMsg);
+    return int(!processResourceFile(files, outFilename, list));
+}
diff --git a/pyrcc/rcc.cpp b/pyrcc/rcc.cpp
new file mode 100644
index 0000000..b14208d
--- /dev/null
+++ b/pyrcc/rcc.cpp
@@ -0,0 +1,565 @@
+/****************************************************************************
+**
+** Copyright (c) 2014 Riverbank Computing Limited. All rights reserved.
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qlocale.h>
+#include <qdatetime.h>
+#include <qtextstream.h>
+#include <qbytearray.h>
+#include <qhash.h>
+#include <qdir.h>
+#include <qstack.h>
+#include <qdom.h>
+#include "rcc.h"
+
+
+static bool qt_rcc_write_number(FILE *out, quint32 number, int width)
+{
+    int dividend = 1;
+    switch (width) {
+    case 2:
+        dividend = 256;
+        break;
+    case 3:
+        dividend = 65536;
+        break;
+    case 4:
+        dividend = 16777216;
+        break;
+    default:
+        break;
+    }
+
+    // Write <width> bytes
+    while (dividend >= 1) {
+        const quint8 tmp = number / dividend;
+
+        fprintf(out, "\\x%02x", tmp);
+
+        number -= tmp * dividend;
+        dividend /= 256;
+    }
+    return true;
+}
+
+bool RCCFileInfo::writeDataInfo(FILE *out)
+{
+    //pointer data
+    if(flags & RCCFileInfo::Directory) {
+        //name offset
+        qt_rcc_write_number(out, nameOffset, 4);
+
+        //flags
+        qt_rcc_write_number(out, flags, 2);
+
+        //child count
+        qt_rcc_write_number(out, children.size(), 4);
+
+        //first child offset
+        qt_rcc_write_number(out, childOffset, 4);
+    } else {
+        //name offset
+        qt_rcc_write_number(out, nameOffset, 4);
+
+        //flags
+        qt_rcc_write_number(out, flags, 2);
+
+        //locale
+        qt_rcc_write_number(out, locale.country(), 2);
+        qt_rcc_write_number(out, locale.language(), 2);
+
+        //data offset
+        qt_rcc_write_number(out, dataOffset, 4);
+    }
+    fprintf(out, "\\\n");
+    return true;
+}
+
+qint64 RCCFileInfo::writeDataBlob(FILE *out, qint64 offset)
+{
+    //capture the offset
+    dataOffset = offset;
+
+    //find the data to be written
+    QFile file(fileInfo.absoluteFilePath());
+    if (!file.open(QFile::ReadOnly)) {
+        fprintf(stderr, "Couldn't open %s\n", fileInfo.absoluteFilePath().toLatin1().constData());
+        return false;
+    }
+    QByteArray data = file.readAll();
+
+#ifndef QT_NO_COMPRESS
+    // Check if compression is useful for this file
+    if (mCompressLevel != 0 && data.size() != 0) {
+        QByteArray compressed = qCompress(reinterpret_cast<uchar *>(data.data()), data.size(), mCompressLevel);
+
+        int compressRatio = int(100.0f * (float(data.size() - compressed.size()) / float(data.size())));
+        if (compressRatio >= mCompressThreshold) {
+            data = compressed;
+            flags |= Compressed;
+        }
+    }
+#endif // QT_NO_COMPRESS
+    
+    //write the length
+    qt_rcc_write_number(out, data.size(), 4);
+    fprintf(out, "\\\n");
+    offset += 4;
+
+    //write the payload
+    for (int i=0; i<data.size(); i++) {
+        qt_rcc_write_number(out, data.at(i), 1);
+        if(!(i % 16))
+            fprintf(out, "\\\n");
+    }
+    offset += data.size();
+
+    //done
+    fprintf(out, "\\\n");
+    return offset;
+}
+
+qint64 RCCFileInfo::writeDataName(FILE *out, qint64 offset)
+{
+    //capture the offset
+    nameOffset = offset;
+
+    //write the length
+    qt_rcc_write_number(out, name.length(), 2);
+    fprintf(out, "\\\n");
+    offset += 2;
+
+    //write the hash
+    qt_rcc_write_number(out, qt_hash(name), 4);
+    fprintf(out, "\\\n");
+    offset += 4;
+
+    //write the name
+    const QChar *unicode = name.unicode();
+    for (int i=0; i<name.length(); i++) {
+        qt_rcc_write_number(out, unicode[i].unicode(), 2);
+        if(!(i % 16))
+            fprintf(out, "\\\n");
+    }
+    offset += name.length()*2;
+
+    //done
+    fprintf(out, "\\\n");
+    return offset;
+}
+
+RCCResourceLibrary::~RCCResourceLibrary()
+{
+    delete root;
+}
+
+bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice, QString fname, QString currentPath)
+{
+    if (!currentPath.isEmpty() && !currentPath.endsWith(QLatin1String("/")))
+        currentPath += '/';
+
+    QDomDocument document;
+    {
+        QString errorMsg;
+        int errorLine, errorColumn;
+        if(!document.setContent(inputDevice, &errorMsg, &errorLine, &errorColumn)) {
+            fprintf(stderr, "pyrcc5 Parse Error:%s:%d:%d [%s]\n", fname.toLatin1().constData(),
+                    errorLine, errorColumn, errorMsg.toLatin1().constData());
+            return false;
+        }
+    }
+    for(QDomElement root = document.firstChild().toElement(); !root.isNull();
+        root = root.nextSibling().toElement()) {
+        if (root.tagName() != QLatin1String(TAG_RCC))
+            continue;
+
+        for (QDomElement child = root.firstChild().toElement(); !child.isNull();
+             child = child.nextSibling().toElement()) {
+            if (child.tagName() == QLatin1String(TAG_RESOURCE)) {
+                QLocale lang = QLocale::c();
+                if (child.hasAttribute(ATTRIBUTE_LANG))
+                    lang = QLocale(child.attribute(ATTRIBUTE_LANG));
+
+                QString prefix;
+                if (child.hasAttribute(ATTRIBUTE_PREFIX))
+                    prefix = child.attribute(ATTRIBUTE_PREFIX);
+                if (!prefix.startsWith(QLatin1String("/")))
+                    prefix.prepend('/');
+                if (!prefix.endsWith(QLatin1String("/")))
+                    prefix += '/';
+
+
+                for (QDomNode res = child.firstChild(); !res.isNull(); res = res.nextSibling()) {
+                    if (res.toElement().tagName() == QLatin1String(TAG_FILE)) {
+
+                        QString fileName(res.firstChild().toText().data());
+                        if (fileName.isEmpty())
+                            fprintf(stderr, "Warning: Null node in XML\n");
+
+                        QString alias;
+                        if (res.toElement().hasAttribute(ATTRIBUTE_ALIAS))
+                            alias = res.toElement().attribute(ATTRIBUTE_ALIAS);
+                        else
+                            alias = fileName;
+
+                        int compressLevel = mCompressLevel;
+                        if (res.toElement().hasAttribute(ATTRIBUTE_COMPRESS))
+                            compressLevel = res.toElement().attribute(ATTRIBUTE_COMPRESS).toInt();
+                        int compressThreshold = mCompressThreshold;
+                        if (res.toElement().hasAttribute(ATTRIBUTE_THRESHOLD))
+                            compressThreshold = res.toElement().attribute(ATTRIBUTE_THRESHOLD).toInt();
+
+                        // Special case for -no-compress. Overrides all other settings.
+                        if (mCompressLevel == -2)
+                            compressLevel = 0;
+
+                        alias = QDir::cleanPath(alias);
+                        while (alias.startsWith("../"))
+                            alias.remove(0, 3);
+                        alias = prefix + alias;
+
+                        QFileInfo file(currentPath + fileName);
+                        if (!file.exists()) {
+                            fprintf(stderr, "Cannot find file: %s\n", fileName.toLatin1().constData());
+                            continue ;
+                        } else if (file.isFile()) {
+                            addFile(alias, RCCFileInfo(alias.section('/', -1), file, lang,
+                                                       RCCFileInfo::NoFlags, compressLevel, compressThreshold));
+                        } else {
+                            QDir dir;
+                            if(file.isDir()) {
+                                dir.setPath(file.filePath());
+                            } else {
+                                dir.setPath(file.path());
+                                dir.setNameFilters(QStringList(file.fileName()));
+                                if(alias.endsWith(file.fileName()))
+                                    alias = alias.left(alias.length()-file.fileName().length());
+                            }
+                            if (!alias.endsWith(QLatin1String("/")))
+                                alias += '/';
+                            QFileInfoList children = dir.entryInfoList();
+                            for(int i = 0; i < children.size(); ++i) {
+                                if(children[i].fileName() != QLatin1String(".") &&
+                                   children[i].fileName() != QLatin1String(".."))
+                                    addFile(alias + children[i].fileName(),
+                                            RCCFileInfo(children[i].fileName(), children[i], lang,
+                                                        RCCFileInfo::NoFlags, compressLevel, compressThreshold));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    if(this->root == 0) {
+        fprintf(stderr, "No resources in resource description.\n");
+        return false;
+    }
+    return true;
+}
+
+bool RCCResourceLibrary::addFile(const QString &alias, const RCCFileInfo &file)
+{
+    if (file.fileInfo.size() > 0xffffffff) {
+        fprintf(stderr, "File too big: %s",
+                file.fileInfo.absoluteFilePath().toLatin1().constData());
+        return false;
+    }
+    if(!root)
+        root = new RCCFileInfo("", QFileInfo(), QLocale(), RCCFileInfo::Directory);
+
+    RCCFileInfo *parent = root;
+    const QStringList nodes = alias.split('/');
+    for(int i = 1; i < nodes.size()-1; ++i) {
+        const QString node = nodes.at(i);
+        if(!parent->children.contains(node)) {
+            RCCFileInfo *s = new RCCFileInfo(node, QFileInfo(), QLocale(), RCCFileInfo::Directory);
+            s->parent = parent;
+            parent->children.insert(node, s);
+            parent = s;
+        } else {
+            parent = parent->children[node];
+        }
+    }
+
+    const QString filename = nodes.at(nodes.size()-1);
+    RCCFileInfo *s = new RCCFileInfo(file);
+    s->parent = parent;
+    parent->children.insertMulti(filename, s);
+    return true;
+}
+
+bool RCCResourceLibrary::readFiles()
+{
+    //read in data
+    if (mVerbose)
+        fprintf(stderr, "Processing %d files\n", mFileNames.size());
+    for (int i=0; i<mFileNames.size(); ++i) {
+        QFile fileIn;
+        QString fname = mFileNames.at(i), pwd;
+        if(fname == "-") {
+            fname = "(stdin)";
+            pwd = QDir::currentPath();
+            fileIn.setFileName(fname);
+            if (!fileIn.open(stdin, QIODevice::ReadOnly)) {
+                fprintf(stderr, "Unable to open file: %s\n", fname.toLatin1().constData());
+                return false;
+            }
+        } else {
+            pwd = QFileInfo(fname).path();
+            fileIn.setFileName(fname);
+            if (!fileIn.open(QIODevice::ReadOnly)) {
+                fprintf(stderr, "Unable to open file: %s\n", fname.toLatin1().constData());
+                return false;
+            }
+        }
+        if (mVerbose)
+            fprintf(stderr, "Interpreting %s\n", fname.toLatin1().constData());
+
+        if (!interpretResourceFile(&fileIn, fname, pwd))
+            return false;
+    }
+    return true;
+}
+
+QStringList
+RCCResourceLibrary::dataFiles() const
+{
+    QStringList ret;
+    QStack<RCCFileInfo*> pending;
+
+    if (!root)
+        return ret;
+
+    pending.push(root);
+    while(!pending.isEmpty()) {
+        RCCFileInfo *file = pending.pop();
+        for(QHash<QString, RCCFileInfo*>::iterator it = file->children.begin();
+            it != file->children.end(); ++it) {
+            RCCFileInfo *child = it.value();
+            if(child->flags & RCCFileInfo::Directory)
+                pending.push(child);
+            ret.append(child->fileInfo.filePath());
+        }
+    }
+    return ret;
+}
+
+bool RCCResourceLibrary::output(FILE *out)
+{
+    //write out
+    if (mVerbose)
+        fprintf(stderr, "Outputting code\n");
+    if (!writeHeader(out)) {
+        fprintf(stderr, "Couldn't write header\n");
+        return false;
+    }
+    if (!writeDataBlobs(out)) {
+        fprintf(stderr, "Couldn't write data blob\n");
+        return false;
+    }
+    if (!writeDataNames(out)) {
+        fprintf(stderr, "Couldn't write file names\n");
+        return false;
+    }
+    if (!writeDataStructure(out)) {
+        fprintf(stderr, "Couldn't write data tree\n");
+        return false;
+    }
+    if (!writeInitializer(out)) {
+        fprintf(stderr, "Couldn't write footer\n");
+        return false;
+    }
+    return true;
+}
+
+bool
+RCCResourceLibrary::writeHeader(FILE *out)
+{
+    fprintf(out, "# -*- coding: utf-8 -*-\n\n");
+    fprintf(out, "# Resource object code\n");
+    fprintf(out, "#\n");
+    fprintf(out, "# Created: %s\n", QDateTime::currentDateTime().toString().toUtf8().constData());
+    fprintf(out, "#      by: The Resource Compiler for PyQt (Qt v%s)\n", QT_VERSION_STR);
+    fprintf(out, "#\n");
+    fprintf(out, "# WARNING! All changes made in this file will be lost!\n");
+    fprintf(out, "\n");
+    fprintf(out, "from PyQt5 import QtCore\n\n");
+
+    return true;
+}
+
+bool
+RCCResourceLibrary::writeDataBlobs(FILE *out)
+{
+    fprintf(out, "qt_resource_data = b\"\\\n");
+    QStack<RCCFileInfo*> pending;
+
+    if (!root)
+        return false;
+
+    pending.push(root);
+    qint64 offset = 0;
+    while(!pending.isEmpty()) {
+        RCCFileInfo *file = pending.pop();
+        for(QHash<QString, RCCFileInfo*>::iterator it = file->children.begin();
+            it != file->children.end(); ++it) {
+            RCCFileInfo *child = it.value();
+            if(child->flags & RCCFileInfo::Directory)
+                pending.push(child);
+            else
+                offset = child->writeDataBlob(out, offset);
+        }
+    }
+    fprintf(out, "\"\n\n");
+    return true;
+}
+
+bool
+RCCResourceLibrary::writeDataNames(FILE *out)
+{
+    fprintf(out, "qt_resource_name = b\"\\\n");
+
+    QHash<QString, int> names;
+    QStack<RCCFileInfo*> pending;
+
+    if (!root)
+        return false;
+
+    pending.push(root);
+    qint64 offset = 0;
+    while(!pending.isEmpty()) {
+        RCCFileInfo *file = pending.pop();
+        for(QHash<QString, RCCFileInfo*>::iterator it = file->children.begin();
+            it != file->children.end(); ++it) {
+            RCCFileInfo *child = it.value();
+            if(child->flags & RCCFileInfo::Directory)
+                pending.push(child);
+            if(names.contains(child->name)) {
+                child->nameOffset = names.value(child->name);
+            } else {
+                names.insert(child->name, offset);
+                offset = child->writeDataName(out, offset);
+            }
+        }
+    }
+    fprintf(out, "\"\n\n");
+    return true;
+}
+
+static bool qt_rcc_compare_hash(const RCCFileInfo *left, const RCCFileInfo *right)
+{
+    return qt_hash(left->name) < qt_hash(right->name);
+}
+
+bool
+RCCResourceLibrary::writeDataStructure(FILE *out)
+{
+    fprintf(out, "qt_resource_struct = b\"\\\n");
+    QStack<RCCFileInfo*> pending;
+
+    if (!root)
+        return false;
+
+    //calculate the child offsets (flat)
+    pending.push(root);
+    int offset = 1;
+    while(!pending.isEmpty()) {
+        RCCFileInfo *file = pending.pop();
+        file->childOffset = offset;
+
+        //sort by hash value for binary lookup
+        QList<RCCFileInfo*> children = file->children.values();
+        qSort(children.begin(), children.end(), qt_rcc_compare_hash);
+
+        //write out the actual data now
+        for(int i = 0; i < children.size(); ++i) {
+            RCCFileInfo *child = children.at(i);
+            ++offset;
+            if(child->flags & RCCFileInfo::Directory)
+                pending.push(child);
+        }
+    }
+
+    //write out the structure (ie iterate again!)
+    pending.push(root);
+    root->writeDataInfo(out);
+    while(!pending.isEmpty()) {
+        RCCFileInfo *file = pending.pop();
+
+        //sort by hash value for binary lookup
+        QList<RCCFileInfo*> children = file->children.values();
+        qSort(children.begin(), children.end(), qt_rcc_compare_hash);
+
+        //write out the actual data now
+        for(int i = 0; i < children.size(); ++i) {
+            RCCFileInfo *child = children.at(i);
+            child->writeDataInfo(out);
+            if(child->flags & RCCFileInfo::Directory)
+                pending.push(child);
+        }
+    }
+    fprintf(out, "\"\n\n");
+
+    return true;
+}
+
+bool
+RCCResourceLibrary::writeInitializer(FILE *out)
+{
+    fprintf(out, "def qInitResources():\n");
+    fprintf(out, "    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)\n");
+
+    fprintf(out, "\n");
+
+    fprintf(out, "def qCleanupResources():\n");
+    fprintf(out, "    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)\n");
+
+    fprintf(out, "\n");
+
+    fprintf(out, "qInitResources()\n");
+
+    return true;
+}
diff --git a/pyrcc/rcc.h b/pyrcc/rcc.h
new file mode 100644
index 0000000..1ccb1b8
--- /dev/null
+++ b/pyrcc/rcc.h
@@ -0,0 +1,168 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** 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, Digia gives you certain additional
+** rights.  These rights are described in the Digia 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.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef RCC_H
+#define RCC_H
+
+#define TAG_RCC "RCC"
+#define TAG_RESOURCE "qresource"
+#define TAG_FILE "file"
+
+#define ATTRIBUTE_LANG "lang"
+#define ATTRIBUTE_PREFIX "prefix"
+#define ATTRIBUTE_ALIAS "alias"
+#define ATTRIBUTE_THRESHOLD "threshold"
+#define ATTRIBUTE_COMPRESS "compress"
+
+
+#define CONSTANT_HEADER_SIZE 8
+#define CONSTANT_COMPRESSLEVEL_DEFAULT -1
+#define CONSTANT_COMPRESSTHRESHOLD_DEFAULT 70
+
+struct RCCFileInfo;
+
+class RCCResourceLibrary
+{
+public:
+    inline RCCResourceLibrary();
+    ~RCCResourceLibrary();
+
+    bool output(FILE *out);
+
+    bool readFiles();
+
+    inline void setInputFiles(QStringList files) { mFileNames = files; }
+    inline QStringList inputFiles() const { return mFileNames; }
+
+    QStringList dataFiles() const;
+
+    inline void setVerbose(bool b) { mVerbose = b; }
+    inline bool verbose() const { return mVerbose; }
+
+    inline void setInitName(const QString &n) { mInitName = n; }
+    inline QString initName() const { return mInitName; }
+
+    inline void setCompressLevel(int c) { mCompressLevel = c; }
+    inline int compressLevel() const { return mCompressLevel; }
+
+    inline void setCompressThreshold(int t) { mCompressThreshold = t; }
+    inline int compressThreshold() const { return mCompressThreshold; }
+
+    inline void setResourceRoot(QString str) { mResourceRoot = str; }
+    inline QString resourceRoot() const { return mResourceRoot; }
+
+private:
+    RCCFileInfo *root;
+    bool addFile(const QString &alias, const RCCFileInfo &file);
+    bool interpretResourceFile(QIODevice *inputDevice, QString file, QString currentPath = QString());
+
+    bool writeHeader(FILE *out);
+    bool writeDataBlobs(FILE *out);
+    bool writeDataNames(FILE *out);
+    bool writeDataStructure(FILE *out);
+    bool writeInitializer(FILE *out);
+
+    QStringList mFileNames;
+    QString mResourceRoot, mInitName;
+    bool mVerbose;
+    int mCompressLevel;
+    int mCompressThreshold;
+    int mTreeOffset, mNamesOffset, mDataOffset;
+};
+
+inline RCCResourceLibrary::RCCResourceLibrary()
+{
+    root = 0;
+    mVerbose = false;
+    mCompressLevel = -1;
+    mCompressThreshold = 70;
+    mTreeOffset = mNamesOffset = mDataOffset = 0;
+}
+
+struct RCCFileInfo
+{
+    enum Flags
+    {
+        NoFlags = 0x00,
+        Compressed = 0x01,
+        Directory = 0x02
+    };
+
+    inline RCCFileInfo(QString name = QString(), QFileInfo fileInfo = QFileInfo(),
+                       QLocale locale = QLocale(), uint flags = NoFlags,
+                       int compressLevel = CONSTANT_COMPRESSLEVEL_DEFAULT, int compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT);
+    ~RCCFileInfo() { qDeleteAll(children); }
+    inline QString resourceName() {
+        QString resource = name;
+        for(RCCFileInfo *p = parent; p; p = p->parent)
+            resource = resource.prepend(p->name + "/");
+        return ":" + resource;
+    }
+
+    int flags;
+    QString name;
+    QLocale locale;
+    QFileInfo fileInfo;
+    RCCFileInfo *parent;
+    QHash<QString, RCCFileInfo*> children;
+    int mCompressLevel;
+    int mCompressThreshold;
+
+    qint64 nameOffset, dataOffset, childOffset;
+    qint64 writeDataBlob(FILE *out, qint64 offset);
+    qint64 writeDataName(FILE *out, qint64 offset);
+    bool   writeDataInfo(FILE *out);
+};
+
+inline RCCFileInfo::RCCFileInfo(QString name, QFileInfo fileInfo, QLocale locale, uint flags,
+                                int compressLevel, int compressThreshold)
+{
+    this->name = name;
+    this->fileInfo = fileInfo;
+    this->locale = locale;
+    this->flags = flags;
+    this->parent = 0;
+    this->nameOffset = this->dataOffset = this->childOffset = 0;
+    this->mCompressLevel = compressLevel;
+    this->mCompressThreshold = compressThreshold;
+}
+
+#endif
diff --git a/pyuic/uic/Compiler/__init__.py b/pyuic/uic/Compiler/__init__.py
new file mode 100644
index 0000000..0b2b37a
--- /dev/null
+++ b/pyuic/uic/Compiler/__init__.py
@@ -0,0 +1,20 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
diff --git a/pyuic/uic/Compiler/compiler.py b/pyuic/uic/Compiler/compiler.py
new file mode 100644
index 0000000..fff68dc
--- /dev/null
+++ b/pyuic/uic/Compiler/compiler.py
@@ -0,0 +1,122 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import sys
+
+from ..properties import Properties
+from ..uiparser import UIParser
+from . import qtproxies
+from .indenter import createCodeIndenter, getIndenter, write_code
+from .qobjectcreator import CompilerCreatorPolicy
+from .misc import write_import
+
+
+class UICompiler(UIParser):
+    def __init__(self):
+        UIParser.__init__(self, qtproxies.QtCore, qtproxies.QtGui,
+                qtproxies.QtWidgets, CompilerCreatorPolicy())
+
+    def reset(self):
+        qtproxies.i18n_strings = []
+        UIParser.reset(self)
+
+    def setContext(self, context):
+        qtproxies.i18n_context = context
+
+    def createToplevelWidget(self, classname, widgetname):
+        indenter = getIndenter()
+        indenter.level = 0
+
+        indenter.write("from PyQt5 import QtCore, QtGui, QtWidgets")
+        indenter.write("")
+
+        indenter.write("class Ui_%s(object):" % self.uiname)
+        indenter.indent()
+        indenter.write("def setupUi(self, %s):" % widgetname)
+        indenter.indent()
+        w = self.factory.createQObject(classname, widgetname, (),
+                                   is_attribute = False,
+                                   no_instantiation = True)
+        w.baseclass = classname
+        w.uiclass = "Ui_%s" % self.uiname
+        return w
+
+    def setDelayedProps(self):
+        write_code("")
+        write_code("self.retranslateUi(%s)" % self.toplevelWidget)
+        UIParser.setDelayedProps(self)
+
+    def finalize(self):
+        indenter = getIndenter()
+        indenter.level = 1
+        indenter.write("")
+        indenter.write("def retranslateUi(self, %s):" % self.toplevelWidget)
+
+        indenter.indent()
+
+        if qtproxies.i18n_strings:
+            indenter.write("_translate = QtCore.QCoreApplication.translate")
+            for s in qtproxies.i18n_strings:
+                indenter.write(s)
+        else:
+            indenter.write("pass")
+
+        indenter.dedent()
+        indenter.dedent()
+
+        # Make a copy of the resource modules to import because the parser will
+        # reset() before returning.
+        self._resources = self.resources
+
+    def compileUi(self, input_stream, output_stream, from_imports, resource_suffix):
+        createCodeIndenter(output_stream)
+        w = self.parse(input_stream, resource_suffix)
+
+        indenter = getIndenter()
+        indenter.write("")
+
+        self.factory._cpolicy._writeOutImports()
+
+        for res in self._resources:
+            write_import(res, from_imports)
+
+        return {"widgetname": str(w),
+                "uiclass" : w.uiclass,
+                "baseclass" : w.baseclass}
diff --git a/pyuic/uic/Compiler/indenter.py b/pyuic/uic/Compiler/indenter.py
new file mode 100644
index 0000000..9c92ad5
--- /dev/null
+++ b/pyuic/uic/Compiler/indenter.py
@@ -0,0 +1,77 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+indentwidth = 4
+
+_indenter = None
+
+class _IndentedCodeWriter(object):
+    def __init__(self, output):
+        self.level = 0
+        self.output = output
+
+    def indent(self):
+        self.level += 1
+
+    def dedent(self):
+        self.level -= 1
+
+    def write(self, line):
+        if line.strip():
+            if indentwidth > 0:
+                indent = " " * indentwidth
+                line = line.replace("\t", indent)
+            else:
+                indent = "\t"
+
+            self.output.write("%s%s\n" % (indent * self.level, line))
+        else:
+            self.output.write("\n")
+
+
+def createCodeIndenter(output):
+    global _indenter
+    _indenter = _IndentedCodeWriter(output)
+
+def getIndenter():
+    return _indenter
+
+def write_code(string):
+    _indenter.write(string)
diff --git a/pyuic/uic/Compiler/misc.py b/pyuic/uic/Compiler/misc.py
new file mode 100644
index 0000000..e98cfbc
--- /dev/null
+++ b/pyuic/uic/Compiler/misc.py
@@ -0,0 +1,69 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+from .indenter import write_code
+
+
+def write_import(module_name, from_imports):
+    if from_imports:
+        write_code("from . import %s" % module_name)
+    else:
+        write_code("import %s" % module_name)
+
+
+def moduleMember(module, name):
+    if module:
+        return "%s.%s" % (module, name)
+
+    return name
+
+
+class Literal(object):
+    """Literal(string) -> new literal
+
+    string will not be quoted when put into an argument list"""
+    def __init__(self, string):
+        self.string = string
+
+    def __str__(self):
+        return self.string
+
+    def __or__(self, r_op):
+        return Literal("%s|%s" % (self, r_op))
diff --git a/pyuic/uic/Compiler/proxy_metaclass.py b/pyuic/uic/Compiler/proxy_metaclass.py
new file mode 100644
index 0000000..c997b84
--- /dev/null
+++ b/pyuic/uic/Compiler/proxy_metaclass.py
@@ -0,0 +1,100 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+from .misc import Literal, moduleMember
+
+
+class ProxyMetaclass(type):
+    """ ProxyMetaclass is the meta-class for proxies. """
+
+    def __init__(*args):
+        """ Initialise the meta-class. """
+
+        # Initialise as normal.
+        type.__init__(*args)
+
+        # The proxy type object we have created.
+        proxy = args[0]
+
+        # Go through the proxy's attributes looking for other proxies.
+        for sub_proxy in proxy.__dict__.values():
+            if type(sub_proxy) is ProxyMetaclass:
+                # Set the module name of the contained proxy to the name of the
+                # container proxy.
+                sub_proxy.module = proxy.__name__
+
+                # Attribute hierachies are created depth first so any proxies
+                # contained in the sub-proxy whose module we have just set will
+                # already exist and have an incomplete module name.  We need to
+                # revisit them and prepend the new name to their module names.
+                # Note that this should be recursive but with current usage we
+                # know there will be only one level to revisit.
+                for sub_sub_proxy in sub_proxy.__dict__.values():
+                    if type(sub_sub_proxy) is ProxyMetaclass:
+                        sub_sub_proxy.module = '%s.%s' % (proxy.__name__, sub_sub_proxy.module)
+
+        # Makes sure there is a 'module' attribute.
+        if not hasattr(proxy, 'module'):
+            proxy.module = ''
+    
+    def __getattribute__(cls, name):
+        try:
+            return type.__getattribute__(cls, name)
+        except AttributeError:
+            # Make sure __init__()'s use of hasattr() works.
+            if name == 'module':
+                raise
+
+            # Avoid a circular import.
+            from .qtproxies import LiteralProxyClass
+
+            return type(name, (LiteralProxyClass, ),
+                        {"module": moduleMember(type.__getattribute__(cls, "module"),
+                                                type.__getattribute__(cls, "__name__"))})            
+
+    def __str__(cls):
+        return moduleMember(type.__getattribute__(cls, "module"),
+                            type.__getattribute__(cls, "__name__"))
+
+    def __or__(self, r_op):
+        return Literal("%s|%s" % (self, r_op))
+
+    def __eq__(self, other):
+        return str(self) == str(other)
diff --git a/pyuic/uic/Compiler/qobjectcreator.py b/pyuic/uic/Compiler/qobjectcreator.py
new file mode 100644
index 0000000..862cd93
--- /dev/null
+++ b/pyuic/uic/Compiler/qobjectcreator.py
@@ -0,0 +1,167 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import logging
+
+from .indenter import write_code
+from .qtproxies import QtGui, QtWidgets, Literal, strict_getattr
+
+
+logger = logging.getLogger(__name__)
+DEBUG = logger.debug
+
+
+class _QtWrapper(object):
+    @classmethod
+    def search(cls, name):
+        try:
+            return strict_getattr(cls.module, name)
+        except AttributeError:
+            return None
+
+
+class _QtGuiWrapper(_QtWrapper):
+    module = QtGui
+
+
+class _QtWidgetsWrapper(_QtWrapper):
+    module = QtWidgets
+
+
+class _ModuleWrapper(object):
+    def __init__(self, name, classes):
+        if "." in name:
+            idx = name.rfind(".")
+            self._package = name[:idx]
+            self._module = name[idx + 1:]
+        else:
+            self._package = None
+            self._module = name
+            
+        self._classes = classes
+        self._used = False
+    
+    def search(self, cls):
+        if cls in self._classes:
+            self._used = True
+            return type(cls, (QtWidgets.QWidget,), {"module": self._module})
+        else:
+            return None
+
+    def _writeImportCode(self):
+        if self._used:
+            if self._package is None:
+                write_code("import %s" % self._module)
+            else:
+                write_code("from %s import %s" % (self._package, self._module))
+
+
+class _CustomWidgetLoader(object):
+    def __init__(self):
+        self._widgets = {}
+        self._usedWidgets = set()
+        
+    def addCustomWidget(self, widgetClass, baseClass, module):
+        assert widgetClass not in self._widgets 
+        self._widgets[widgetClass] = (baseClass, module)
+
+    def _resolveBaseclass(self, baseClass):
+        try:
+            for x in range(0, 10):
+                try: return strict_getattr(QtWidgets, baseClass)
+                except AttributeError: pass
+                
+                baseClass = self._widgets[baseClass][0]
+            else:
+                raise ValueError("baseclass resolve took too long, check custom widgets")
+
+        except KeyError:
+            raise ValueError("unknown baseclass %s" % baseClass)
+        
+    def search(self, cls):
+        try:
+            baseClass = self._resolveBaseclass(self._widgets[cls][0])
+            DEBUG("resolved baseclass of %s: %s" % (cls, baseClass))
+        except KeyError:
+            return None
+
+        self._usedWidgets.add(cls)
+
+        return type(cls, (baseClass, ), {"module" : ""})
+
+    def _writeImportCode(self):
+        imports = {}
+        for widget in self._usedWidgets:
+            _, module = self._widgets[widget]
+            imports.setdefault(module, []).append(widget)
+
+        for module, classes in imports.items():
+            write_code("from %s import %s" % (module, ", ".join(classes)))
+
+
+class CompilerCreatorPolicy(object):
+    def __init__(self):
+        self._modules = []
+        
+    def createQtGuiWidgetsWrappers(self):
+        return [_QtGuiWrapper, _QtWidgetsWrapper]
+
+    def createModuleWrapper(self, name, classes):
+        mw = _ModuleWrapper(name, classes)
+        self._modules.append(mw)
+        return mw
+
+    def createCustomWidgetLoader(self):
+        cw = _CustomWidgetLoader()
+        self._modules.append(cw)
+        return cw
+
+    def instantiate(self, clsObject, objectname, ctor_args, is_attribute=True, no_instantiation=False):
+        return clsObject(objectname, is_attribute, ctor_args, no_instantiation)
+
+    def invoke(self, rname, method, args):
+        return method(rname, *args)
+
+    def getSlot(self, object, slotname):
+        return Literal("%s.%s" % (object, slotname))
+
+    def _writeOutImports(self):
+        for module in self._modules:
+            module._writeImportCode()
diff --git a/pyuic/uic/Compiler/qtproxies.py b/pyuic/uic/Compiler/qtproxies.py
new file mode 100644
index 0000000..bf97878
--- /dev/null
+++ b/pyuic/uic/Compiler/qtproxies.py
@@ -0,0 +1,463 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import sys
+import re
+
+from .indenter import write_code
+from .misc import Literal, moduleMember
+
+if sys.hexversion >= 0x03000000:
+    from ..port_v3.proxy_base import ProxyBase
+    from ..port_v3.as_string import as_string
+else:
+    from ..port_v2.proxy_base import ProxyBase
+    from ..port_v2.as_string import as_string
+
+
+i18n_strings = []
+i18n_context = ""
+
+def i18n_print(string):
+    i18n_strings.append(string)
+
+def i18n_void_func(name):
+    def _printer(self, *args):
+        i18n_print("%s.%s(%s)" % (self, name, ", ".join(map(as_string, args))))
+    return _printer
+
+def i18n_func(name):
+    def _printer(self, rname, *args):
+        i18n_print("%s = %s.%s(%s)" % (rname, self, name, ", ".join(map(as_string, args))))
+        return Literal(rname)
+
+    return _printer
+
+def strict_getattr(module, clsname):
+    cls = getattr(module, clsname)
+    if issubclass(cls, LiteralProxyClass):
+        raise AttributeError(cls)
+    else:
+        return cls
+    
+
+class i18n_string(object):
+    def __init__(self, string, disambig):
+        self.string = string
+        self.disambig = disambig
+
+    def __str__(self):
+        if self.disambig is None:
+            return '_translate("%s", %s)' % (i18n_context, as_string(self.string))
+
+        return '_translate("%s", %s, %s)' % (i18n_context, as_string(self.string), as_string(self.disambig))
+
+
+# Classes with this flag will be handled as literal values. If functions are
+# called on these classes, the literal value changes.
+# Example:
+# the code
+# >>> QSize(9,10).expandedTo(...)
+# will print just that code.
+AS_ARGUMENT = 0x02
+
+# Classes with this flag may have members that are signals which themselves
+# will have a connect() member.
+AS_SIGNAL = 0x01
+
+# ATTENTION: currently, classes can either be literal or normal. If a class
+# should need both kinds of behaviour, the code has to be changed.
+
+class ProxyClassMember(object):
+    def __init__(self, proxy, function_name, flags):
+        self.proxy = proxy
+        self.function_name = function_name
+        self.flags = flags
+        
+    def __str__(self):
+        return "%s.%s" % (self.proxy, self.function_name)
+    
+    def __call__(self, *args):
+        if self.function_name == 'setProperty':
+            str_args = (as_string(args[0]), as_string(args[1]))
+        else:
+            str_args = map(as_string, args)
+
+        func_call = "%s.%s(%s)" % (self.proxy,
+                                   self.function_name,
+                                   ", ".join(str_args))
+        if self.flags & AS_ARGUMENT:
+            self.proxy._uic_name = func_call
+            return self.proxy
+        else:
+            needs_translation = False
+            for arg in args:
+                if isinstance(arg, i18n_string):
+                    needs_translation = True
+            if needs_translation:
+                i18n_print(func_call)
+            else:
+                write_code(func_call)                       
+
+    def __getattribute__(self, attribute):
+        """ Reimplemented to create a proxy connect() if requested and this
+        might be a proxy for a signal.
+        """
+
+        try:
+            return object.__getattribute__(self, attribute)
+        except AttributeError:
+            if attribute == 'connect' and self.flags & AS_SIGNAL:
+                return ProxyClassMember(self, attribute, 0)
+
+            raise
+
+    def __getitem__(self, idx):
+        """ Reimplemented to create a proxy member that should be a signal that
+        passes arguments.  We handle signals without arguments before we get
+        here and never apply the index notation to them.
+        """
+
+        return ProxySignalWithArguments(self.proxy, self.function_name, idx)
+
+
+class ProxySignalWithArguments(object):
+    """ This is a proxy for (what should be) a signal that passes arguments.
+    """
+
+    def __init__(self, sender, signal_name, signal_index):
+        self._sender = sender
+        self._signal_name = signal_name
+
+        # Convert the signal index, which will be a single argument or a tuple
+        # of arguments, to quoted strings.
+        if isinstance(signal_index, tuple):
+            self._signal_index = ','.join(["'%s'" % a for a in signal_index])
+        else:
+            self._signal_index = "'%s'" % signal_index
+
+    def connect(self, slot):
+        write_code("%s.%s[%s].connect(%s)" % (self._sender, self._signal_name, self._signal_index, slot))
+
+
+class ProxyClass(ProxyBase):
+    flags = 0
+
+    def __init__(self, objectname, is_attribute, args=(), noInstantiation=False):
+        if objectname:
+            if is_attribute:
+                objectname = "self." + objectname
+
+            self._uic_name = objectname
+        else:
+            self._uic_name = "Unnamed"
+
+        if not noInstantiation:
+            funcall = "%s(%s)" % \
+                    (moduleMember(self.module, self.__class__.__name__),
+                    ", ".join(map(str, args)))
+
+            if objectname:
+                funcall = "%s = %s" % (objectname, funcall)
+
+            write_code(funcall)
+    
+    def __str__(self):
+        return self._uic_name
+
+    def __getattribute__(self, attribute):
+        try:
+            return object.__getattribute__(self, attribute)
+        except AttributeError:
+            return ProxyClassMember(self, attribute, self.flags)
+
+
+class LiteralProxyClass(ProxyClass):
+    """LiteralObject(*args) -> new literal class
+
+    a literal class can be used as argument in a function call
+
+    >>> class Foo(LiteralProxyClass): pass
+    >>> str(Foo(1,2,3)) == "Foo(1,2,3)"
+    """
+    flags = AS_ARGUMENT
+
+    def __init__(self, *args):
+        self._uic_name = "%s(%s)" % \
+                     (moduleMember(self.module, self.__class__.__name__),
+                      ", ".join(map(as_string, args)))
+        
+
+class ProxyNamespace(ProxyBase):
+    pass
+
+
+# These are all the Qt classes used by pyuic5 in their namespaces. If a class
+# is missing, the compiler will fail, normally with an AttributeError.
+#
+# For adding new classes:
+#     - utility classes used as literal values do not need to be listed
+#       because they are created on the fly as subclasses of LiteralProxyClass
+#     - classes which are *not* QWidgets inherit from ProxyClass and they
+#       have to be listed explicitly in the correct namespace. These classes
+#       are created via a ProxyQObjectCreator
+#     - new QWidget-derived classes have to inherit from qtproxies.QWidget
+#       If the widget does not need any special methods, it can be listed
+#       in _qwidgets
+
+class QtCore(ProxyNamespace):
+    class Qt(ProxyNamespace):
+        pass
+
+    ## connectSlotsByName and connect have to be handled as class methods,
+    ## otherwise they would be created as LiteralProxyClasses and never be
+    ## printed
+    class QMetaObject(ProxyClass):
+        @classmethod
+        def connectSlotsByName(cls, *args):
+            ProxyClassMember(cls, "connectSlotsByName", 0)(*args)
+
+    class QObject(ProxyClass):
+        flags = AS_SIGNAL
+
+        def metaObject(self):
+            class _FakeMetaObject(object):
+                def className(*args):
+                    return self.__class__.__name__
+            return _FakeMetaObject()
+
+        def objectName(self):
+            return self._uic_name.split(".")[-1]
+
+
+class QtGui(ProxyNamespace):
+    class QIcon(ProxyClass):
+        class fromTheme(ProxyClass): pass
+
+    class QConicalGradient(ProxyClass): pass
+    class QLinearGradient(ProxyClass): pass
+    class QRadialGradient(ProxyClass): pass
+    class QBrush(ProxyClass): pass
+    class QPainter(ProxyClass): pass
+    class QPalette(ProxyClass): pass
+    class QFont(ProxyClass): pass
+
+
+# These sub-class QWidget but aren't themselves sub-classed.
+_qwidgets = ("QCalendarWidget", "QDialogButtonBox", "QDockWidget", "QGroupBox",
+        "QLineEdit", "QMainWindow", "QMenuBar", "QProgressBar", "QStatusBar",
+        "QToolBar", "QWizardPage")
+
+class QtWidgets(ProxyNamespace):
+    class QApplication(QtCore.QObject):
+        @staticmethod
+        def translate(uiname, text, disambig):
+            return i18n_string(text or "", disambig)
+
+    class QSpacerItem(ProxyClass): pass
+    class QSizePolicy(ProxyClass): pass
+    # QActions inherit from QObject for the meta-object stuff and the hierarchy
+    # has to be correct since we have a isinstance(x, QtWidgets.QLayout) call
+    # in the UI parser.
+    class QAction(QtCore.QObject): pass
+    class QActionGroup(QtCore.QObject): pass
+    class QButtonGroup(QtCore.QObject): pass
+    class QLayout(QtCore.QObject): pass
+    class QGridLayout(QLayout): pass
+    class QBoxLayout(QLayout): pass
+    class QHBoxLayout(QBoxLayout): pass
+    class QVBoxLayout(QBoxLayout): pass
+    class QFormLayout(QLayout): pass
+    
+    class QWidget(QtCore.QObject):
+        def font(self):
+            return Literal("%s.font()" % self)
+
+        def minimumSizeHint(self):
+            return Literal("%s.minimumSizeHint()" % self)
+
+        def sizePolicy(self):
+            sp = LiteralProxyClass()
+            sp._uic_name = "%s.sizePolicy()" % self
+            return sp
+
+    class QDialog(QWidget): pass
+    class QColorDialog(QDialog): pass
+    class QFileDialog(QDialog): pass
+    class QFontDialog(QDialog): pass
+    class QInputDialog(QDialog): pass
+    class QMessageBox(QDialog): pass
+    class QWizard(QDialog): pass
+
+    class QAbstractSlider(QWidget): pass
+    class QDial(QAbstractSlider): pass
+    class QScrollBar(QAbstractSlider): pass
+    class QSlider(QAbstractSlider): pass
+
+    class QMenu(QWidget):
+        def menuAction(self):
+            return Literal("%s.menuAction()" % self)
+
+    class QTabWidget(QWidget):
+        def addTab(self, *args):
+            text = args[-1]
+
+            if isinstance(text, i18n_string):
+                i18n_print("%s.setTabText(%s.indexOf(%s), %s)" % \
+                        (self._uic_name, self._uic_name, args[0], text))
+                args = args[:-1] + ("", )
+
+            ProxyClassMember(self, "addTab", 0)(*args)
+
+        def indexOf(self, page):
+            return Literal("%s.indexOf(%s)" % (self, page))
+
+    class QComboBox(QWidget): pass
+    class QFontComboBox(QComboBox): pass
+
+    class QAbstractSpinBox(QWidget): pass
+    class QDoubleSpinBox(QAbstractSpinBox): pass
+    class QSpinBox(QAbstractSpinBox): pass
+
+    class QDateTimeEdit(QAbstractSpinBox): pass
+    class QDateEdit(QDateTimeEdit): pass
+    class QTimeEdit(QDateTimeEdit): pass
+
+    class QFrame(QWidget): pass
+    class QLabel(QFrame): pass
+    class QLCDNumber(QFrame): pass
+    class QSplitter(QFrame): pass
+    class QStackedWidget(QFrame): pass
+
+    class QToolBox(QFrame):
+        def addItem(self, *args):
+            text = args[-1]
+
+            if isinstance(text, i18n_string):
+                i18n_print("%s.setItemText(%s.indexOf(%s), %s)" % \
+                        (self._uic_name, self._uic_name, args[0], text))
+                args = args[:-1] + ("", )
+
+            ProxyClassMember(self, "addItem", 0)(*args)
+
+        def indexOf(self, page):
+            return Literal("%s.indexOf(%s)" % (self, page))
+
+        def layout(self):
+            return QtWidgets.QLayout("%s.layout()" % self,
+                    False, (), noInstantiation=True)
+
+    class QAbstractScrollArea(QFrame):
+        def viewport(self):
+            return QtWidgets.QWidget("%s.viewport()" % self, False, (),
+                    noInstantiation=True)
+
+    class QGraphicsView(QAbstractScrollArea): pass
+    class QMdiArea(QAbstractScrollArea): pass
+    class QPlainTextEdit(QAbstractScrollArea): pass
+    class QScrollArea(QAbstractScrollArea): pass
+
+    class QTextEdit(QAbstractScrollArea): pass
+    class QTextBrowser(QTextEdit): pass
+
+    class QAbstractItemView(QAbstractScrollArea): pass
+    class QColumnView(QAbstractItemView): pass
+    class QHeaderView(QAbstractItemView): pass
+    class QListView(QAbstractItemView): pass
+
+    class QTableView(QAbstractItemView):
+        def horizontalHeader(self):
+            return QtWidgets.QHeaderView("%s.horizontalHeader()" % self,
+                    False, (), noInstantiation=True)
+
+        def verticalHeader(self):
+            return QtWidgets.QHeaderView("%s.verticalHeader()" % self,
+                    False, (), noInstantiation=True)
+
+    class QTreeView(QAbstractItemView):
+        def header(self):
+            return QtWidgets.QHeaderView("%s.header()" % self,
+                    False, (), noInstantiation=True)
+
+    class QListWidgetItem(ProxyClass): pass
+
+    class QListWidget(QListView):
+        setSortingEnabled = i18n_void_func("setSortingEnabled")
+        isSortingEnabled = i18n_func("isSortingEnabled")
+        item = i18n_func("item")
+
+    class QTableWidgetItem(ProxyClass): pass
+
+    class QTableWidget(QTableView):
+        setSortingEnabled = i18n_void_func("setSortingEnabled")
+        isSortingEnabled = i18n_func("isSortingEnabled")
+        item = i18n_func("item")
+        horizontalHeaderItem = i18n_func("horizontalHeaderItem")
+        verticalHeaderItem = i18n_func("verticalHeaderItem")
+
+    class QTreeWidgetItem(ProxyClass):
+        def child(self, index):
+            return QtWidgets.QTreeWidgetItem("%s.child(%i)" % (self, index),
+                    False, (), noInstantiation=True)
+
+    class QTreeWidget(QTreeView):
+        setSortingEnabled = i18n_void_func("setSortingEnabled")
+        isSortingEnabled = i18n_func("isSortingEnabled")
+
+        def headerItem(self):
+            return QtWidgets.QWidget("%s.headerItem()" % self, False, (),
+                    noInstantiation=True)
+
+        def topLevelItem(self, index):
+            return QtWidgets.QTreeWidgetItem("%s.topLevelItem(%i)" % (self, index),
+                    False, (), noInstantiation=True)
+
+    class QAbstractButton(QWidget): pass
+    class QCheckBox(QAbstractButton): pass
+    class QRadioButton(QAbstractButton): pass
+    class QToolButton(QAbstractButton): pass
+
+    class QPushButton(QAbstractButton): pass
+    class QCommandLinkButton(QPushButton): pass
+
+    # Add all remaining classes.
+    for _class in _qwidgets:
+        if _class not in locals():
+            locals()[_class] = type(_class, (QWidget, ), {})
diff --git a/pyuic/uic/Loader/__init__.py b/pyuic/uic/Loader/__init__.py
new file mode 100644
index 0000000..0b2b37a
--- /dev/null
+++ b/pyuic/uic/Loader/__init__.py
@@ -0,0 +1,20 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
diff --git a/pyuic/uic/Loader/loader.py b/pyuic/uic/Loader/loader.py
new file mode 100644
index 0000000..f42bf8a
--- /dev/null
+++ b/pyuic/uic/Loader/loader.py
@@ -0,0 +1,72 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import os.path
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+from ..uiparser import UIParser
+from .qobjectcreator import LoaderCreatorPolicy
+
+
+class DynamicUILoader(UIParser):
+    def __init__(self, package):
+        UIParser.__init__(self, QtCore, QtGui, QtWidgets, LoaderCreatorPolicy(package))
+
+    def createToplevelWidget(self, classname, widgetname):
+        if self.toplevelInst is not None:
+            if not isinstance(self.toplevelInst, self.factory.findQObjectType(classname)):
+                raise TypeError(("Wrong base class of toplevel widget",
+                                  (type(self.toplevelInst), classname)))
+            return self.toplevelInst
+        else:
+            return self.factory.createQObject(classname, widgetname, ())
+
+    def loadUi(self, filename, toplevelInst, resource_suffix):
+        self.toplevelInst = toplevelInst
+
+        if hasattr(filename, 'read'):
+            basedir = ''
+        else:
+            # Allow the filename to be a QString.
+            filename = str(filename)
+            basedir = os.path.dirname(filename)
+
+        return self.parse(filename, resource_suffix, basedir)
diff --git a/pyuic/uic/Loader/qobjectcreator.py b/pyuic/uic/Loader/qobjectcreator.py
new file mode 100644
index 0000000..87959a3
--- /dev/null
+++ b/pyuic/uic/Loader/qobjectcreator.py
@@ -0,0 +1,149 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import sys
+
+from PyQt5 import QtGui, QtWidgets
+
+
+class _QtWrapper(object):
+    @classmethod
+    def search(cls, name):
+        return getattr(cls.module, name, None)
+
+
+class _QtGuiWrapper(_QtWrapper):
+    module = QtGui
+
+
+class _QtWidgetsWrapper(_QtWrapper):
+    module = QtWidgets
+
+
+class _ModuleWrapper(object):
+    def __init__(self, moduleName, classes):
+        self._moduleName = moduleName
+        self._module = None
+        self._classes = classes
+
+    def search(self, cls):
+        if cls in self._classes:
+            if self._module is None:
+                self._module = __import__(self._moduleName, {}, {}, self._classes)
+            # Allow for namespaces.
+            obj = self._module
+            for attr in cls.split('.'):
+                obj = getattr(obj, attr)
+
+            return obj
+        else:
+            return None
+
+
+class _CustomWidgetLoader(object):
+    def __init__(self, package):
+        # should it stay this way?
+        if '.' not in sys.path:
+            sys.path.append('.')
+
+        self._widgets = {}
+        self._modules = {}
+        self._package = package
+        
+    def addCustomWidget(self, widgetClass, baseClass, module):
+        assert widgetClass not in self._widgets
+        self._widgets[widgetClass] = module
+    
+    def search(self, cls):
+        module_name = self._widgets.get(cls)
+        if module_name is None:
+            return None
+
+        module = self._modules.get(module_name)
+        if module is None:
+            if module_name.startswith('.'):
+                if self._package == '':
+                    raise ImportError(
+                            "relative import of %s without base package specified" % module_name)
+
+                if self._package.startswith('.'):
+                    raise ImportError(
+                            "base package %s is relative" % self._package)
+
+                mname = self._package + module_name
+            else:
+                mname = module_name
+
+            try:
+                module = __import__(mname, {}, {}, (cls,))
+            except ValueError:
+                # Raise a more helpful exception.
+                raise ImportError("unable to import module %s" % mname)
+
+            self._modules[module_name] = module
+
+        return getattr(module, cls)
+
+
+class LoaderCreatorPolicy(object):
+    def __init__(self, package):
+        self._package = package
+
+    def createQtGuiWidgetsWrappers(self):
+        return [_QtGuiWrapper, _QtWidgetsWrapper]
+    
+    def createModuleWrapper(self, moduleName, classes):
+        return _ModuleWrapper(moduleName, classes)
+    
+    def createCustomWidgetLoader(self):
+        return _CustomWidgetLoader(self._package)
+
+    def instantiate(self, clsObject, objectName, ctor_args, is_attribute=True):
+        return clsObject(*ctor_args)
+
+    def invoke(self, rname, method, args):
+        return method(*args)
+
+    def getSlot(self, object, slotname):
+        # Rename slots that correspond to Python keyword arguments.
+        if slotname == 'raise':
+            slotname += '_'
+
+        return getattr(object, slotname)
diff --git a/pyuic/uic/__init__.py b/pyuic/uic/__init__.py
new file mode 100644
index 0000000..8b65a3d
--- /dev/null
+++ b/pyuic/uic/__init__.py
@@ -0,0 +1,228 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+__all__ = ("compileUi", "compileUiDir", "loadUiType", "loadUi", "widgetPluginPath")
+
+from .Compiler import indenter, compiler
+
+
+_header = """# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file '%s'
+#
+# Created: %s
+#      by: PyQt5 UI code generator %s
+#
+# WARNING! All changes made in this file will be lost!
+
+"""
+
+
+_display_code = """
+if __name__ == "__main__":
+\timport sys
+\tapp = QtWidgets.QApplication(sys.argv)
+\t%(widgetname)s = QtWidgets.%(baseclass)s()
+\tui = %(uiclass)s()
+\tui.setupUi(%(widgetname)s)
+\t%(widgetname)s.show()
+\tsys.exit(app.exec_())
+"""
+
+
+def compileUiDir(dir, recurse=False, map=None, **compileUi_args):
+    """compileUiDir(dir, recurse=False, map=None, **compileUi_args)
+
+    Creates Python modules from Qt Designer .ui files in a directory or
+    directory tree.
+
+    dir is the name of the directory to scan for files whose name ends with
+    '.ui'.  By default the generated Python module is created in the same
+    directory ending with '.py'.
+    recurse is set if any sub-directories should be scanned.  The default is
+    False.
+    map is an optional callable that is passed the name of the directory
+    containing the '.ui' file and the name of the Python module that will be
+    created.  The callable should return a tuple of the name of the directory
+    in which the Python module will be created and the (possibly modified)
+    name of the module.  The default is None.
+    compileUi_args are any additional keyword arguments that are passed to
+    the compileUi() function that is called to create each Python module.
+    """
+
+    import os
+
+    # Compile a single .ui file.
+    def compile_ui(ui_dir, ui_file):
+        # Ignore if it doesn't seem to be a .ui file.
+        if ui_file.endswith('.ui'):
+            py_dir = ui_dir
+            py_file = ui_file[:-3] + '.py'
+
+            # Allow the caller to change the name of the .py file or generate
+            # it in a different directory.
+            if map is not None:
+                py_dir, py_file = map(py_dir, py_file)
+
+            # Make sure the destination directory exists.
+            try:
+                os.makedirs(py_dir)
+            except:
+                pass
+
+            ui_path = os.path.join(ui_dir, ui_file)
+            py_path = os.path.join(py_dir, py_file)
+
+            ui_file = open(ui_path, 'r')
+            py_file = open(py_path, 'w')
+
+            try:
+                compileUi(ui_file, py_file, **compileUi_args)
+            finally:
+                ui_file.close()
+                py_file.close()
+
+    if recurse:
+        for root, _, files in os.walk(dir):
+            for ui in files:
+                compile_ui(root, ui)
+    else:
+        for ui in os.listdir(dir):
+            if os.path.isfile(os.path.join(dir, ui)):
+                compile_ui(dir, ui)
+
+
+def compileUi(uifile, pyfile, execute=False, indent=4, from_imports=False, resource_suffix='_rc'):
+    """compileUi(uifile, pyfile, execute=False, indent=4, from_imports=False, resource_suffix='_rc')
+
+    Creates a Python module from a Qt Designer .ui file.
+    
+    uifile is a file name or file-like object containing the .ui file.
+    pyfile is the file-like object to which the Python code will be written to.
+    execute is optionally set to generate extra Python code that allows the
+    code to be run as a standalone application.  The default is False.
+    indent is the optional indentation width using spaces.  If it is 0 then a
+    tab is used.  The default is 4.
+    from_imports is optionally set to generate import statements that are
+    relative to '.'.
+    resource_suffix is the suffix appended to the basename of any resource file
+    specified in the .ui file to create the name of the Python module generated
+    from the resource file by pyrcc4.  The default is '_rc', i.e. if the .ui
+    file specified a resource file called foo.qrc then the corresponding Python
+    module is foo_rc.
+    """
+
+    from time import ctime
+    from PyQt5.QtCore import PYQT_VERSION_STR
+
+    try:
+        uifname = uifile.name
+    except AttributeError:
+        uifname = uifile
+
+    indenter.indentwidth = indent
+
+    pyfile.write(_header % (uifname, ctime(), PYQT_VERSION_STR))
+
+    winfo = compiler.UICompiler().compileUi(uifile, pyfile, from_imports, resource_suffix)
+
+    if execute:
+        indenter.write_code(_display_code % winfo)
+
+
+def loadUiType(uifile, from_imports=False, resource_suffix='_rc'):
+    """loadUiType(uifile, from_imports=False) -> (form class, base class)
+
+    Load a Qt Designer .ui file and return the generated form class and the Qt
+    base class.
+
+    uifile is a file name or file-like object containing the .ui file.
+    from_imports is optionally set to use import statements that are relative
+    to '.'.
+    resource_suffix is the suffix appended to the basename of any resource file
+    specified in the .ui file to create the name of the Python module generated
+    from the resource file by pyrcc4.  The default is '_rc', i.e. if the .ui
+    file specified a resource file called foo.qrc then the corresponding Python
+    module is foo_rc.
+    """
+
+    import sys
+
+    from PyQt5 import QtWidgets
+
+    if sys.hexversion >= 0x03000000:
+        from .port_v3.string_io import StringIO
+    else:
+        from .port_v2.string_io import StringIO
+
+    code_string = StringIO()
+    winfo = compiler.UICompiler().compileUi(uifile, code_string, from_imports, resource_suffix)
+
+    ui_globals = {}
+    exec(code_string.getvalue(), ui_globals)
+
+    return (ui_globals[winfo["uiclass"]], getattr(QtWidgets, winfo["baseclass"]))
+
+
+def loadUi(uifile, baseinstance=None, package='', resource_suffix='_rc'):
+    """loadUi(uifile, baseinstance=None, package='') -> widget
+
+    Load a Qt Designer .ui file and return an instance of the user interface.
+
+    uifile is a file name or file-like object containing the .ui file.
+    baseinstance is an optional instance of the Qt base class.  If specified
+    then the user interface is created in it.  Otherwise a new instance of the
+    base class is automatically created.
+    package is the optional package which is used as the base for any relative
+    imports of custom widgets.
+    resource_suffix is the suffix appended to the basename of any resource file
+    specified in the .ui file to create the name of the Python module generated
+    from the resource file by pyrcc4.  The default is '_rc', i.e. if the .ui
+    file specified a resource file called foo.qrc then the corresponding Python
+    module is foo_rc.
+    """
+
+    from .Loader.loader import DynamicUILoader
+
+    return DynamicUILoader(package).loadUi(uifile, baseinstance, resource_suffix)
+
+
+# The list of directories that are searched for widget plugins.
+from .objcreator import widgetPluginPath
diff --git a/pyuic/uic/driver.py b/pyuic/uic/driver.py
new file mode 100644
index 0000000..10101a4
--- /dev/null
+++ b/pyuic/uic/driver.py
@@ -0,0 +1,127 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+import sys
+import logging
+
+from . import compileUi, loadUi
+
+
+class Driver(object):
+    """ This encapsulates access to the pyuic functionality so that it can be
+    called by code that is Python v2/v3 specific.
+    """
+
+    LOGGER_NAME = 'PyQt5.uic'
+
+    def __init__(self, opts, ui_file):
+        """ Initialise the object.  opts is the parsed options.  ui_file is the
+        name of the .ui file.
+        """
+
+        if opts.debug:
+            logger = logging.getLogger(self.LOGGER_NAME)
+            handler = logging.StreamHandler()
+            handler.setFormatter(logging.Formatter("%(name)s: %(message)s"))
+            logger.addHandler(handler)
+            logger.setLevel(logging.DEBUG)
+
+        self._opts = opts
+        self._ui_file = ui_file
+
+    def invoke(self):
+        """ Invoke the action as specified by the parsed options.  Returns 0 if
+        there was no error.
+        """
+
+        if self._opts.preview:
+            return self._preview()
+
+        self._generate()
+
+        return 0
+
+    def _preview(self):
+        """ Preview the .ui file.  Return the exit status to be passed back to
+        the parent process.
+        """
+
+        from PyQt5 import QtWidgets
+
+        app = QtWidgets.QApplication([self._ui_file])
+        widget = loadUi(self._ui_file)
+        widget.show()
+
+        return app.exec_()
+
+    def _generate(self):
+        """ Generate the Python code. """
+
+        if sys.hexversion >= 0x03000000:
+            if self._opts.output == '-':
+                from io import TextIOWrapper
+
+                pyfile = TextIOWrapper(sys.stdout.buffer, encoding='utf8')
+            else:
+                pyfile = open(self._opts.output, 'wt', encoding='utf8')
+        else:
+            if self._opts.output == '-':
+                pyfile = sys.stdout
+            else:
+                pyfile = open(self._opts.output, 'wt')
+
+        compileUi(self._ui_file, pyfile, self._opts.execute, self._opts.indent,
+                self._opts.from_imports, self._opts.resource_suffix)
+
+    def on_IOError(self, e):
+        """ Handle an IOError exception. """
+
+        sys.stderr.write("Error: %s: \"%s\"\n" % (e.strerror, e.filename))
+
+    def on_SyntaxError(self, e):
+        """ Handle a SyntaxError exception. """
+
+        sys.stderr.write("Error in input file: %s\n" % e)
+
+    def on_NoSuchWidgetError(self, e):
+        """ Handle a NoSuchWidgetError exception. """
+
+        sys.stderr.write(str(e) + "\n")
+
+    def on_Exception(self, e):
+        """ Handle a generic exception. """
+
+        if logging.getLogger(self.LOGGER_NAME).level == logging.DEBUG:
+            import traceback
+
+            traceback.print_exception(*sys.exc_info())
+        else:
+            from PyQt5 import QtCore
+
+            sys.stderr.write("""An unexpected error occurred.
+Check that you are using the latest version of PyQt5 and send an error report to
+support at riverbankcomputing.com, including the following information:
+
+  * your version of PyQt (%s)
+  * the UI file that caused this error
+  * the debug output of pyuic5 (use the -d flag when calling pyuic5)
+""" % QtCore.PYQT_VERSION_STR)
diff --git a/pyuic/uic/exceptions.py b/pyuic/uic/exceptions.py
new file mode 100644
index 0000000..6ced676
--- /dev/null
+++ b/pyuic/uic/exceptions.py
@@ -0,0 +1,49 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+class NoSuchWidgetError(Exception):
+    def __str__(self):
+        return "Unknown Qt widget: %s" % self.args[0]
+
+class UnsupportedPropertyError(Exception):
+    pass
+
+class WidgetPluginError(Exception):
+    pass
diff --git a/pyuic/uic/icon_cache.py b/pyuic/uic/icon_cache.py
new file mode 100644
index 0000000..8579449
--- /dev/null
+++ b/pyuic/uic/icon_cache.py
@@ -0,0 +1,164 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+import sys
+import os.path
+
+if sys.hexversion >= 0x03000000:
+    from .port_v3.as_string import as_string
+else:
+    from .port_v2.as_string import as_string
+
+
+class IconCache(object):
+    """Maintain a cache of icons.  If an icon is used more than once by a GUI
+    then ensure that only one copy is created.
+    """
+
+    def __init__(self, object_factory, qtgui_module):
+        """Initialise the cache."""
+
+        self._object_factory = object_factory
+        self._qtgui_module = qtgui_module
+        self._base_dir = ''
+        self._cache = []
+
+    def set_base_dir(self, base_dir):
+        """ Set the base directory to be used for all relative filenames. """
+
+        self._base_dir = base_dir
+
+    def get_icon(self, iconset):
+        """Return an icon described by the given iconset tag."""
+
+        # Handle a themed icon.
+        theme = iconset.attrib.get('theme')
+        if theme is not None:
+            return self._object_factory.createQObject("QIcon.fromTheme",
+                    'icon', (as_string(theme), ), is_attribute=False)
+
+        # Handle an empty iconset property.
+        if iconset.text is None:
+            return None
+
+        iset = _IconSet(iconset, self._base_dir)
+
+        try:
+            idx = self._cache.index(iset)
+        except ValueError:
+            idx = -1
+
+        if idx >= 0:
+            # Return the icon from the cache.
+            iset = self._cache[idx]
+        else:
+            # Follow uic's naming convention.
+            name = 'icon'
+            idx = len(self._cache)
+
+            if idx > 0:
+                name += str(idx)
+
+            icon = self._object_factory.createQObject("QIcon", name, (),
+                    is_attribute=False)
+            iset.set_icon(icon, self._qtgui_module)
+            self._cache.append(iset)
+
+        return iset.icon
+
+
+class _IconSet(object):
+    """An icon set, ie. the mode and state and the pixmap used for each."""
+
+    def __init__(self, iconset, base_dir):
+        """Initialise the icon set from an XML tag."""
+
+        # Set the pre-Qt v4.4 fallback (ie. with no roles).
+        self._fallback = self._file_name(iconset.text, base_dir)
+        self._use_fallback = True
+
+        # Parse the icon set.
+        self._roles = {}
+
+        for i in iconset:
+            file_name = i.text
+            if file_name is not None:
+                file_name = self._file_name(file_name, base_dir)
+
+            self._roles[i.tag] = file_name
+            self._use_fallback = False
+
+        # There is no real icon yet.
+        self.icon = None
+
+    @staticmethod
+    def _file_name(fname, base_dir):
+        """ Convert a relative filename if we have a base directory. """
+
+        fname = fname.replace("\\", "\\\\")
+
+        if base_dir != '' and fname[0] != ':' and not os.path.isabs(fname):
+            fname = os.path.join(base_dir, fname)
+
+        return fname
+
+    def set_icon(self, icon, qtgui_module):
+        """Save the icon and set its attributes."""
+
+        if self._use_fallback:
+            icon.addFile(self._fallback)
+        else:
+            for role, pixmap in self._roles.items():
+                if role.endswith("off"):
+                    mode = role[:-3]
+                    state = qtgui_module.QIcon.Off
+                elif role.endswith("on"):
+                    mode = role[:-2]
+                    state = qtgui_module.QIcon.On
+                else:
+                    continue
+
+                mode = getattr(qtgui_module.QIcon, mode.title())
+
+                if pixmap:
+                    icon.addPixmap(qtgui_module.QPixmap(pixmap), mode, state)
+                else:
+                    icon.addPixmap(qtgui_module.QPixmap(), mode, state)
+
+        self.icon = icon
+
+    def __eq__(self, other):
+        """Compare two icon sets for equality."""
+
+        if not isinstance(other, type(self)):
+            return NotImplemented
+
+        if self._use_fallback:
+            if other._use_fallback:
+                return self._fallback == other._fallback
+
+            return False
+
+        if other._use_fallback:
+            return False
+
+        return self._roles == other._roles
diff --git a/pyuic/uic/objcreator.py b/pyuic/uic/objcreator.py
new file mode 100644
index 0000000..c42c183
--- /dev/null
+++ b/pyuic/uic/objcreator.py
@@ -0,0 +1,146 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import sys
+import os.path
+
+from .exceptions import NoSuchWidgetError, WidgetPluginError
+
+if sys.hexversion >= 0x03000000:
+    from .port_v3.load_plugin import load_plugin
+else:
+    from .port_v2.load_plugin import load_plugin
+
+
+# The list of directories that are searched for widget plugins.  This is
+# exposed as part of the API.
+widgetPluginPath = [os.path.join(os.path.dirname(__file__), 'widget-plugins')]
+
+
+MATCH = True
+NO_MATCH = False
+MODULE = 0
+CW_FILTER = 1
+
+
+class QObjectCreator(object):    
+    def __init__(self, creatorPolicy):
+        self._cpolicy = creatorPolicy
+
+        self._cwFilters = []
+        self._modules = self._cpolicy.createQtGuiWidgetsWrappers()
+
+        # Get the optional plugins.
+        for plugindir in widgetPluginPath:
+            try:
+                plugins = os.listdir(plugindir)
+            except:
+                plugins = []
+
+            for filename in plugins:
+                if not filename.endswith('.py'):
+                    continue
+
+                filename = os.path.join(plugindir, filename)
+
+                plugin_globals = {
+                    "MODULE": MODULE,
+                    "CW_FILTER": CW_FILTER,
+                    "MATCH": MATCH,
+                    "NO_MATCH": NO_MATCH}
+
+                plugin_locals = {}
+
+                if load_plugin(open(filename, 'rU'), plugin_globals, plugin_locals):
+                    pluginType = plugin_locals["pluginType"]
+                    if pluginType == MODULE:
+                        modinfo = plugin_locals["moduleInformation"]()
+                        self._modules.append(self._cpolicy.createModuleWrapper(*modinfo))
+                    elif pluginType == CW_FILTER:
+                        self._cwFilters.append(plugin_locals["getFilter"]())
+                    else:
+                        raise WidgetPluginError("Unknown plugin type of %s" % filename)
+
+        self._customWidgets = self._cpolicy.createCustomWidgetLoader()
+        self._modules.append(self._customWidgets)
+
+    def createQObject(self, classname, *args, **kwargs):
+        # Handle regular and custom widgets.
+        factory = self.findQObjectType(classname)
+
+        if factory is None:
+            # Handle scoped names, typically static factory methods.
+            parts = classname.split('.')
+
+            if len(parts) > 1:
+                factory = self.findQObjectType(parts[0])
+
+                if factory is not None:
+                    for part in parts[1:]:
+                        factory = getattr(factory, part, None)
+                        if factory is None:
+                            break
+
+            if factory is None:
+                raise NoSuchWidgetError(classname)
+
+        return self._cpolicy.instantiate(factory, *args, **kwargs)
+
+    def invoke(self, rname, method, args=()):
+        return self._cpolicy.invoke(rname, method, args)
+
+    def findQObjectType(self, classname):
+        for module in self._modules:
+            w = module.search(classname)
+            if w is not None:
+                return w
+        return None
+
+    def getSlot(self, obj, slotname):
+        return self._cpolicy.getSlot(obj, slotname)
+
+    def addCustomWidget(self, widgetClass, baseClass, module):
+        for cwFilter in self._cwFilters:
+            match, result = cwFilter(widgetClass, baseClass, module)
+            if match:
+                widgetClass, baseClass, module = result
+                break
+
+        self._customWidgets.addCustomWidget(widgetClass, baseClass, module)
diff --git a/pyuic/uic/port_v2/__init__.py b/pyuic/uic/port_v2/__init__.py
new file mode 100644
index 0000000..0b2b37a
--- /dev/null
+++ b/pyuic/uic/port_v2/__init__.py
@@ -0,0 +1,20 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
diff --git a/pyuic/uic/port_v2/as_string.py b/pyuic/uic/port_v2/as_string.py
new file mode 100644
index 0000000..963be0d
--- /dev/null
+++ b/pyuic/uic/port_v2/as_string.py
@@ -0,0 +1,40 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+import re
+
+
+def as_string(obj):
+    if isinstance(obj, basestring):
+        return '"' + _escape(obj.encode('UTF-8')) + '"'
+
+    return str(obj)
+
+
+_esc_regex = re.compile(r"(\"|\'|\\)")
+
+def _escape(text):
+    # This escapes any escaped single or double quote or backslash.
+    x = _esc_regex.sub(r"\\\1", text)
+
+    # This replaces any '\n' with an escaped version and a real line break.
+    return re.sub(r'\n', r'\\n"\n"', x)
diff --git a/pyuic/uic/port_v2/ascii_upper.py b/pyuic/uic/port_v2/ascii_upper.py
new file mode 100644
index 0000000..c04ceee
--- /dev/null
+++ b/pyuic/uic/port_v2/ascii_upper.py
@@ -0,0 +1,33 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+import string
+
+
+# A translation table for converting ASCII lower case to upper case.
+_ascii_trans_table = string.maketrans(string.ascii_lowercase,
+        string.ascii_uppercase)
+
+
+# Convert a string to ASCII upper case irrespective of the current locale.
+def ascii_upper(s):
+    return s.translate(_ascii_trans_table)
diff --git a/pyuic/uic/port_v2/invoke.py b/pyuic/uic/port_v2/invoke.py
new file mode 100644
index 0000000..91727fb
--- /dev/null
+++ b/pyuic/uic/port_v2/invoke.py
@@ -0,0 +1,48 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+from ..exceptions import NoSuchWidgetError
+
+
+def invoke(driver):
+    """ Invoke the given command line driver.  Return the exit status to be
+    passed back to the parent process.
+    """
+
+    exit_status = 1
+
+    try:
+        exit_status = driver.invoke()
+
+    except IOError, e:
+        driver.on_IOError(e)
+
+    except SyntaxError, e:
+        driver.on_SyntaxError(e)
+
+    except NoSuchWidgetError, e:
+        driver.on_NoSuchWidgetError(e)
+
+    except Exception, e:
+        driver.on_Exception(e)
+
+    return exit_status
diff --git a/pyuic/uic/port_v2/load_plugin.py b/pyuic/uic/port_v2/load_plugin.py
new file mode 100644
index 0000000..142d4d4
--- /dev/null
+++ b/pyuic/uic/port_v2/load_plugin.py
@@ -0,0 +1,39 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+from ..exceptions import WidgetPluginError
+
+
+def load_plugin(plugin, plugin_globals, plugin_locals):
+    """ Load the given plugin (which is an open file).  Return True if the
+    plugin was loaded, or False if it wanted to be ignored.  Raise an exception
+    if there was an error.
+    """
+
+    try:
+        exec(plugin.read(), plugin_globals, plugin_locals)
+    except ImportError:
+        return False
+    except Exception, e:
+        raise WidgetPluginError("%s: %s" % (e.__class__, str(e)))
+
+    return True
diff --git a/pyuic/uic/port_v2/proxy_base.py b/pyuic/uic/port_v2/proxy_base.py
new file mode 100644
index 0000000..6b6252c
--- /dev/null
+++ b/pyuic/uic/port_v2/proxy_base.py
@@ -0,0 +1,31 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+from ..Compiler.proxy_metaclass import ProxyMetaclass
+
+
+class ProxyBase(object):
+    """ A base class for proxies using Python v2 syntax for setting the
+    meta-class.
+    """
+
+    __metaclass__ = ProxyMetaclass
diff --git a/pyuic/uic/port_v2/string_io.py b/pyuic/uic/port_v2/string_io.py
new file mode 100644
index 0000000..a99c175
--- /dev/null
+++ b/pyuic/uic/port_v2/string_io.py
@@ -0,0 +1,27 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+# Import the StringIO object.
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from StringIO import StringIO
diff --git a/pyuic/uic/port_v3/__init__.py b/pyuic/uic/port_v3/__init__.py
new file mode 100644
index 0000000..0b2b37a
--- /dev/null
+++ b/pyuic/uic/port_v3/__init__.py
@@ -0,0 +1,20 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
diff --git a/pyuic/uic/port_v3/as_string.py b/pyuic/uic/port_v3/as_string.py
new file mode 100644
index 0000000..f094386
--- /dev/null
+++ b/pyuic/uic/port_v3/as_string.py
@@ -0,0 +1,40 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+import re
+
+
+def as_string(obj):
+    if isinstance(obj, str):
+        return '"' + _escape(obj) + '"'
+
+    return str(obj)
+
+
+_esc_regex = re.compile(r"(\"|\'|\\)")
+
+def _escape(text):
+    # This escapes any escaped single or double quote or backslash.
+    x = _esc_regex.sub(r"\\\1", text)
+
+    # This replaces any '\n' with an escaped version and a real line break.
+    return re.sub(r'\n', r'\\n"\n"', x)
diff --git a/pyuic/uic/port_v3/ascii_upper.py b/pyuic/uic/port_v3/ascii_upper.py
new file mode 100644
index 0000000..b56f7bb
--- /dev/null
+++ b/pyuic/uic/port_v3/ascii_upper.py
@@ -0,0 +1,30 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+# A translation table for converting ASCII lower case to upper case.
+_ascii_trans_table = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz',
+        b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
+
+
+# Convert a string to ASCII upper case irrespective of the current locale.
+def ascii_upper(s):
+    return s.translate(_ascii_trans_table)
diff --git a/pyuic/uic/port_v3/invoke.py b/pyuic/uic/port_v3/invoke.py
new file mode 100644
index 0000000..5cf1125
--- /dev/null
+++ b/pyuic/uic/port_v3/invoke.py
@@ -0,0 +1,48 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+from ..exceptions import NoSuchWidgetError
+
+
+def invoke(driver):
+    """ Invoke the given command line driver.  Return the exit status to be
+    passed back to the parent process.
+    """
+
+    exit_status = 1
+
+    try:
+        exit_status = driver.invoke()
+
+    except IOError as e:
+        driver.on_IOError(e)
+
+    except SyntaxError as e:
+        driver.on_SyntaxError(e)
+
+    except NoSuchWidgetError as e:
+        driver.on_NoSuchWidgetError(e)
+
+    except Exception as e:
+        driver.on_Exception(e)
+
+    return exit_status
diff --git a/pyuic/uic/port_v3/load_plugin.py b/pyuic/uic/port_v3/load_plugin.py
new file mode 100644
index 0000000..a4c8b69
--- /dev/null
+++ b/pyuic/uic/port_v3/load_plugin.py
@@ -0,0 +1,39 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+from ..exceptions import WidgetPluginError
+
+
+def load_plugin(plugin, plugin_globals, plugin_locals):
+    """ Load the given plugin (which is an open file).  Return True if the
+    plugin was loaded, or False if it wanted to be ignored.  Raise an exception
+    if there was an error.
+    """
+
+    try:
+        exec(plugin.read(), plugin_globals, plugin_locals)
+    except ImportError:
+        return False
+    except Exception as e:
+        raise WidgetPluginError("%s: %s" % (e.__class__, str(e)))
+
+    return True
diff --git a/pyuic/uic/port_v3/proxy_base.py b/pyuic/uic/port_v3/proxy_base.py
new file mode 100644
index 0000000..7dcc31a
--- /dev/null
+++ b/pyuic/uic/port_v3/proxy_base.py
@@ -0,0 +1,29 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+from ..Compiler.proxy_metaclass import ProxyMetaclass
+
+
+class ProxyBase(metaclass=ProxyMetaclass):
+    """ A base class for proxies using Python v3 syntax for setting the
+    meta-class.
+    """
diff --git a/pyuic/uic/port_v3/string_io.py b/pyuic/uic/port_v3/string_io.py
new file mode 100644
index 0000000..abfd808
--- /dev/null
+++ b/pyuic/uic/port_v3/string_io.py
@@ -0,0 +1,24 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+# Import the StringIO object.
+from io import StringIO
diff --git a/pyuic/uic/properties.py b/pyuic/uic/properties.py
new file mode 100644
index 0000000..b31482c
--- /dev/null
+++ b/pyuic/uic/properties.py
@@ -0,0 +1,528 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import logging
+import os.path
+import sys
+
+from .exceptions import UnsupportedPropertyError
+from .icon_cache import IconCache
+
+if sys.hexversion >= 0x03000000:
+    from .port_v3.ascii_upper import ascii_upper
+else:
+    from .port_v2.ascii_upper import ascii_upper
+
+
+logger = logging.getLogger(__name__)
+DEBUG = logger.debug
+
+
+QtCore = None
+QtGui = None
+QtWidgets = None
+
+
+def int_list(prop):
+    return [int(child.text) for child in prop]
+
+def float_list(prop):
+    return [float(child.text) for child in prop]
+
+bool_ = lambda v: v == "true"
+
+def qfont_enum(v):
+    return getattr(QtGui.QFont, v)
+
+def needsWidget(func):
+    func.needsWidget = True
+    return func
+
+
+class Properties(object):
+    def __init__(self, factory, qtcore_module, qtgui_module, qtwidgets_module):
+        self.factory = factory
+
+        global QtCore, QtGui, QtWidgets
+        QtCore = qtcore_module
+        QtGui = qtgui_module
+        QtWidgets = qtwidgets_module
+
+        self._base_dir = ''
+
+        self.reset()
+
+    def set_base_dir(self, base_dir):
+        """ Set the base directory to be used for all relative filenames. """
+
+        self._base_dir = base_dir
+        self.icon_cache.set_base_dir(base_dir)
+
+    def reset(self):
+        self.buddies = []
+        self.delayed_props = []
+        self.icon_cache = IconCache(self.factory, QtGui)
+
+    def _pyEnumMember(self, cpp_name):
+        try:
+            prefix, membername = cpp_name.split("::")
+        except ValueError:
+            prefix = 'Qt'
+            membername = cpp_name
+
+        if prefix == 'Qt':
+            return getattr(QtCore.Qt, membername)
+
+        scope = self.factory.findQObjectType(prefix)
+        if scope is None:
+            raise AttributeError("unknown enum %s" % cpp_name)
+
+        return getattr(scope, membername)
+
+    def _set(self, prop):
+        expr = [self._pyEnumMember(v) for v in prop.text.split('|')]
+
+        value = expr[0]
+        for v in expr[1:]:
+            value |= v
+
+        return value
+
+    def _enum(self, prop):
+        return self._pyEnumMember(prop.text)
+
+    def _number(self, prop):
+        return int(prop.text)
+
+    _uInt = _longLong = _uLongLong = _number
+
+    def _double(self, prop):
+        return float(prop.text)
+
+    def _bool(self, prop):
+        return prop.text == 'true'
+
+    def _stringlist(self, prop):
+        return [self._string(p, notr='true') for p in prop]
+
+    def _string(self, prop, notr=None):
+        text = prop.text
+
+        if text is None:
+            return ""
+
+        if prop.get('notr', notr) == 'true':
+            return text
+
+        disambig = prop.get('comment')
+
+        return QtWidgets.QApplication.translate(self.uiname, text, disambig)
+
+    _char = _string
+
+    def _cstring(self, prop):
+        return str(prop.text)
+
+    def _color(self, prop):
+        args = int_list(prop)
+
+        # Handle the optional alpha component.
+        alpha = int(prop.get("alpha", "255"))
+
+        if alpha != 255:
+            args.append(alpha)
+
+        return QtGui.QColor(*args)
+
+    def _point(self, prop):
+        return QtCore.QPoint(*int_list(prop))
+
+    def _pointf(self, prop):
+        return QtCore.QPointF(*float_list(prop))
+
+    def _rect(self, prop):
+        return QtCore.QRect(*int_list(prop))
+
+    def _rectf(self, prop):
+        return QtCore.QRectF(*float_list(prop))
+
+    def _size(self, prop):
+        return QtCore.QSize(*int_list(prop))
+
+    def _sizef(self, prop):
+        return QtCore.QSizeF(*float_list(prop))
+
+    def _pixmap(self, prop):
+        if prop.text:
+            fname = prop.text.replace("\\", "\\\\")
+            if self._base_dir != '' and fname[0] != ':' and not os.path.isabs(fname):
+                fname = os.path.join(self._base_dir, fname)
+
+            return QtGui.QPixmap(fname)
+
+        # Don't bother to set the property if the pixmap is empty.
+        return None
+
+    def _iconset(self, prop):
+        return self.icon_cache.get_icon(prop)
+
+    def _url(self, prop):
+        return QtCore.QUrl(prop[0].text)
+
+    def _locale(self, prop):
+        lang = getattr(QtCore.QLocale, prop.attrib['language'])
+        country = getattr(QtCore.QLocale, prop.attrib['country'])
+        return QtCore.QLocale(lang, country)
+
+    def _date(self, prop):
+        return QtCore.QDate(*int_list(prop))
+
+    def _datetime(self, prop):
+        args = int_list(prop)
+        return QtCore.QDateTime(QtCore.QDate(*args[-3:]), QtCore.QTime(*args[:-3]))
+
+    def _time(self, prop):
+        return QtCore.QTime(*int_list(prop))
+
+    def _gradient(self, prop):
+        name = 'gradient'
+
+        # Create the specific gradient.
+        gtype = prop.get('type', '')
+
+        if gtype == 'LinearGradient':
+            startx = float(prop.get('startx'))
+            starty = float(prop.get('starty'))
+            endx = float(prop.get('endx'))
+            endy = float(prop.get('endy'))
+            gradient = self.factory.createQObject('QLinearGradient', name,
+                    (startx, starty, endx, endy), is_attribute=False)
+
+        elif gtype == 'ConicalGradient':
+            centralx = float(prop.get('centralx'))
+            centraly = float(prop.get('centraly'))
+            angle = float(prop.get('angle'))
+            gradient = self.factory.createQObject('QConicalGradient', name,
+                    (centralx, centraly, angle), is_attribute=False)
+
+        elif gtype == 'RadialGradient':
+            centralx = float(prop.get('centralx'))
+            centraly = float(prop.get('centraly'))
+            radius = float(prop.get('radius'))
+            focalx = float(prop.get('focalx'))
+            focaly = float(prop.get('focaly'))
+            gradient = self.factory.createQObject('QRadialGradient', name,
+                    (centralx, centraly, radius, focalx, focaly),
+                    is_attribute=False)
+
+        else:
+            raise UnsupportedPropertyError(prop.tag)
+
+        # Set the common values.
+        spread = prop.get('spread')
+        if spread:
+            gradient.setSpread(getattr(QtGui.QGradient, spread))
+
+        cmode = prop.get('coordinatemode')
+        if cmode:
+            gradient.setCoordinateMode(getattr(QtGui.QGradient, cmode))
+
+        # Get the gradient stops.
+        for gstop in prop:
+            if gstop.tag != 'gradientstop':
+                raise UnsupportedPropertyError(gstop.tag)
+
+            position = float(gstop.get('position'))
+            color = self._color(gstop[0])
+
+            gradient.setColorAt(position, color)
+
+        return name
+
+    def _palette(self, prop):
+        palette = self.factory.createQObject("QPalette", "palette", (),
+                is_attribute=False)
+
+        for palette_elem in prop:
+            sub_palette = getattr(QtGui.QPalette, palette_elem.tag.title())
+            for role, color in enumerate(palette_elem):
+                if color.tag == 'color':
+                    # Handle simple colour descriptions where the role is
+                    # implied by the colour's position.
+                    palette.setColor(sub_palette,
+                            QtGui.QPalette.ColorRole(role), self._color(color))
+                elif color.tag == 'colorrole':
+                    role = getattr(QtGui.QPalette, color.get('role'))
+                    brush = self._brush(color[0])
+                    palette.setBrush(sub_palette, role, brush)
+                else:
+                    raise UnsupportedPropertyError(color.tag)
+
+        return palette
+
+    def _brush(self, prop):
+        brushstyle = prop.get('brushstyle')
+
+        if brushstyle in ('LinearGradientPattern', 'ConicalGradientPattern', 'RadialGradientPattern'):
+            gradient = self._gradient(prop[0])
+            brush = self.factory.createQObject("QBrush", "brush", (gradient, ),
+                    is_attribute=False)
+        else:
+            color = self._color(prop[0])
+            brush = self.factory.createQObject("QBrush", "brush", (color, ),
+                    is_attribute=False)
+
+            brushstyle = getattr(QtCore.Qt, brushstyle)
+            brush.setStyle(brushstyle)
+
+        return brush
+
+    #@needsWidget
+    def _sizepolicy(self, prop, widget):
+        values = [int(child.text) for child in prop]
+
+        if len(values) == 2:
+            # Qt v4.3.0 and later.
+            horstretch, verstretch = values
+            hsizetype = getattr(QtWidgets.QSizePolicy, prop.get('hsizetype'))
+            vsizetype = getattr(QtWidgets.QSizePolicy, prop.get('vsizetype'))
+        else:
+            hsizetype, vsizetype, horstretch, verstretch = values
+            hsizetype = QtWidgets.QSizePolicy.Policy(hsizetype)
+            vsizetype = QtWidgets.QSizePolicy.Policy(vsizetype)
+
+        sizePolicy = self.factory.createQObject('QSizePolicy', 'sizePolicy',
+                (hsizetype, vsizetype), is_attribute=False)
+        sizePolicy.setHorizontalStretch(horstretch)
+        sizePolicy.setVerticalStretch(verstretch)
+        sizePolicy.setHeightForWidth(widget.sizePolicy().hasHeightForWidth())
+        return sizePolicy
+    _sizepolicy = needsWidget(_sizepolicy)
+
+    # font needs special handling/conversion of all child elements.
+    _font_attributes = (("Family",          str),
+                        ("PointSize",       int),
+                        ("Bold",            bool_),
+                        ("Italic",          bool_),
+                        ("Underline",       bool_),
+                        ("Weight",          int),
+                        ("StrikeOut",       bool_),
+                        ("Kerning",         bool_),
+                        ("StyleStrategy",   qfont_enum))
+
+    def _font(self, prop):
+        newfont = self.factory.createQObject("QFont", "font", (),
+                                                     is_attribute = False)
+        for attr, converter in self._font_attributes:
+            v = prop.findtext("./%s" % (attr.lower(),))
+            if v is None:
+                continue
+
+            getattr(newfont, "set%s" % (attr,))(converter(v))
+        return newfont
+
+    def _cursor(self, prop):
+        return QtGui.QCursor(QtCore.Qt.CursorShape(int(prop.text)))
+
+    def _cursorShape(self, prop):
+        return QtGui.QCursor(getattr(QtCore.Qt, prop.text))
+
+    def convert(self, prop, widget=None):
+        try:
+            func = getattr(self, "_" + prop[0].tag)
+        except AttributeError:
+            raise UnsupportedPropertyError(prop[0].tag)
+        else:
+            args = {}
+            if getattr(func, "needsWidget", False):
+                assert widget is not None
+                args["widget"] = widget
+
+            return func(prop[0], **args)
+
+
+    def _getChild(self, elem_tag, elem, name, default=None):
+        for prop in elem.findall(elem_tag):
+            if prop.attrib["name"] == name:
+                return self.convert(prop)
+        else:
+            return default
+
+    def getProperty(self, elem, name, default=None):
+        return self._getChild("property", elem, name, default)
+
+    def getAttribute(self, elem, name, default=None):
+        return self._getChild("attribute", elem, name, default)
+
+    def setProperties(self, widget, elem):
+        try:
+            self.wclass = elem.attrib["class"]
+        except KeyError:
+            pass
+        for prop in elem.findall("property"):
+            prop_name = prop.attrib["name"]
+            DEBUG("setting property %s" % (prop_name,))
+
+            try:
+                stdset = bool(int(prop.attrib["stdset"]))
+            except KeyError:
+                stdset = True
+
+            if not stdset:
+                self._setViaSetProperty(widget, prop)
+            elif hasattr(self, prop_name):
+                getattr(self, prop_name)(widget, prop)
+            else:
+                prop_value = self.convert(prop, widget)
+                if prop_value is not None:
+                    getattr(widget, "set%s%s" % (ascii_upper(prop_name[0]), prop_name[1:]))(prop_value)
+
+    # SPECIAL PROPERTIES
+    # If a property has a well-known value type but needs special,
+    # context-dependent handling, the default behaviour can be overridden here.
+
+    # Delayed properties will be set after the whole widget tree has been
+    # populated.
+    def _delayed_property(self, widget, prop):
+        prop_value = self.convert(prop)
+        if prop_value is not None:
+            prop_name = prop.attrib["name"]
+            self.delayed_props.append((widget, False,
+                    'set%s%s' % (ascii_upper(prop_name[0]), prop_name[1:]),
+                    prop_value))
+
+    # These properties will be set with a widget.setProperty call rather than
+    # calling the set<property> function.
+    def _setViaSetProperty(self, widget, prop):
+        prop_value = self.convert(prop)
+        if prop_value is not None:
+            prop_name = prop.attrib['name']
+
+            # This appears to be a Designer/uic hack where stdset=0 means that
+            # the viewport should be used.
+            if prop[0].tag == 'cursorShape':
+                widget.viewport().setProperty(prop_name, prop_value)
+            else:
+                widget.setProperty(prop_name, prop_value)
+
+    # Ignore the property.
+    def _ignore(self, widget, prop):
+        pass
+
+    # Define properties that use the canned handlers.
+    currentIndex = _delayed_property
+    currentRow = _delayed_property
+
+    showDropIndicator = _setViaSetProperty
+    intValue = _setViaSetProperty
+    value = _setViaSetProperty
+
+    objectName = _ignore
+    leftMargin = _ignore
+    topMargin = _ignore
+    rightMargin = _ignore
+    bottomMargin = _ignore
+    horizontalSpacing = _ignore
+    verticalSpacing = _ignore
+
+    # tabSpacing is actually the spacing property of the widget's layout.
+    def tabSpacing(self, widget, prop):
+        prop_value = self.convert(prop)
+        if prop_value is not None:
+            self.delayed_props.append((widget, True, 'setSpacing', prop_value))
+
+    # buddy setting has to be done after the whole widget tree has been
+    # populated.  We can't use delay here because we cannot get the actual
+    # buddy yet.
+    def buddy(self, widget, prop):
+        buddy_name = prop[0].text
+        if buddy_name:
+            self.buddies.append((widget, buddy_name))
+
+    # geometry is handled specially if set on the toplevel widget.
+    def geometry(self, widget, prop):
+        if widget.objectName() == self.uiname:
+            geom = int_list(prop[0])
+            widget.resize(geom[2], geom[3])
+        else:
+            widget.setGeometry(self._rect(prop[0]))
+
+    def orientation(self, widget, prop):
+        # If the class is a QFrame, it's a line.
+        if widget.metaObject().className() == 'QFrame':
+            widget.setFrameShape(
+                {'Qt::Horizontal': QtWidgets.QFrame.HLine,
+                 'Qt::Vertical'  : QtWidgets.QFrame.VLine}[prop[0].text])
+
+            # In Qt Designer, lines appear to be sunken, QFormBuilder loads
+            # them as such, uic generates plain lines.  We stick to the look in
+            # Qt Designer.
+            widget.setFrameShadow(QtWidgets.QFrame.Sunken)
+        else:
+            widget.setOrientation(self._enum(prop[0]))
+
+    def margin(self, widget, prop):
+        # Qt5 doesn't have setMargin().
+        value = self.convert(prop)
+        widget.setContentsMargins(value, value, value, value)
+
+    # The isWrapping attribute of QListView is named inconsistently, it should
+    # be wrapping.
+    def isWrapping(self, widget, prop):
+        widget.setWrapping(self.convert(prop))
+
+    # This is a pseudo-property injected to deal with setContentsMargin()
+    # introduced in Qt v4.3.
+    def pyuicContentsMargins(self, widget, prop):
+        widget.setContentsMargins(*int_list(prop))
+
+    # This is a pseudo-property injected to deal with setHorizontalSpacing()
+    # and setVerticalSpacing() introduced in Qt v4.3.
+    def pyuicSpacing(self, widget, prop):
+        horiz, vert = int_list(prop)
+
+        if horiz == vert:
+            widget.setSpacing(horiz)
+        else:
+            if horiz >= 0:
+                widget.setHorizontalSpacing(horiz)
+
+            if vert >= 0:
+                widget.setVerticalSpacing(vert)
diff --git a/pyuic/uic/pyuic.py b/pyuic/uic/pyuic.py
new file mode 100644
index 0000000..8a4eb0b
--- /dev/null
+++ b/pyuic/uic/pyuic.py
@@ -0,0 +1,70 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+import sys
+import optparse
+
+from PyQt5 import QtCore
+
+from .driver import Driver
+
+
+Version = "Python User Interface Compiler %s for Qt version %s" % (QtCore.PYQT_VERSION_STR, QtCore.QT_VERSION_STR)
+
+
+if sys.hexversion >= 0x03000000:
+    from .port_v3.invoke import invoke
+else:
+    from .port_v2.invoke import invoke
+
+
+parser = optparse.OptionParser(usage="pyuic5 [options] <ui-file>",
+        version=Version)
+parser.add_option("-p", "--preview", dest="preview", action="store_true",
+        default=False,
+        help="show a preview of the UI instead of generating code")
+parser.add_option("-o", "--output", dest="output", default="-", metavar="FILE",
+        help="write generated code to FILE instead of stdout")
+parser.add_option("-x", "--execute", dest="execute", action="store_true",
+        default=False,
+        help="generate extra code to test and display the class")
+parser.add_option("-d", "--debug", dest="debug", action="store_true",
+        default=False, help="show debug output")
+parser.add_option("-i", "--indent", dest="indent", action="store", type="int",
+        default=4, metavar="N",
+        help="set indent width to N spaces, tab if N is 0 [default: 4]")
+
+g = optparse.OptionGroup(parser, title="Code generation options")
+g.add_option("--from-imports", dest="from_imports", action="store_true",
+        default=False, help="generate imports relative to '.'")
+g.add_option("--resource-suffix", dest="resource_suffix", action="store",
+        type="string", default="_rc", metavar="SUFFIX",
+        help="append SUFFIX to the basename of resource files [default: _rc]")
+parser.add_option_group(g)
+
+opts, args = parser.parse_args()
+
+if len(args) != 1:
+    sys.stderr.write("Error: one input ui-file must be specified\n")
+    sys.exit(1)
+
+sys.exit(invoke(Driver(opts, args[0])))
diff --git a/pyuic/uic/uiparser.py b/pyuic/uic/uiparser.py
new file mode 100644
index 0000000..f7e064a
--- /dev/null
+++ b/pyuic/uic/uiparser.py
@@ -0,0 +1,1005 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+import sys
+import logging
+import os.path
+import re
+from xml.etree.ElementTree import parse, SubElement
+
+from .objcreator import QObjectCreator
+from .properties import Properties
+
+
+logger = logging.getLogger(__name__)
+DEBUG = logger.debug
+
+QtCore = None
+QtWidgets = None
+
+
+def _parse_alignment(alignment):
+    """ Convert a C++ alignment to the corresponding flags. """
+
+    align_flags = None
+    for qt_align in alignment.split('|'):
+        _, qt_align = qt_align.split('::')
+        align = getattr(QtCore.Qt, qt_align)
+
+        if align_flags is None:
+            align_flags = align
+        else:
+            align_flags |= align
+
+    return align_flags
+
+
+def _layout_position(elem):
+    """ Return either (), (alignment), (row, column, rowspan, colspan) or
+    (row, column, rowspan, colspan, alignment) depending on the type of layout
+    and its configuration.  The result will be suitable to use as arguments to
+    the layout.
+    """
+
+    row = elem.attrib.get('row')
+    column = elem.attrib.get('column')
+    alignment = elem.attrib.get('alignment')
+
+    # See if it is a box layout.
+    if row is None or column is None:
+        if alignment is None:
+            return ()
+
+        return (_parse_alignment(alignment), )
+
+    # It must be a grid or a form layout.
+    row = int(row)
+    column = int(column)
+
+    rowspan = int(elem.attrib.get('rowspan', 1))
+    colspan = int(elem.attrib.get('colspan', 1))
+
+    if alignment is None:
+        return (row, column, rowspan, colspan)
+
+    return (row, column, rowspan, colspan, _parse_alignment(alignment))
+
+
+class WidgetStack(list):
+    topwidget = None
+    def push(self, item):
+        DEBUG("push %s %s" % (item.metaObject().className(),
+                              item.objectName()))
+        self.append(item)
+        if isinstance(item, QtWidgets.QWidget):
+            self.topwidget = item
+
+    def popLayout(self):
+        layout = list.pop(self)
+        DEBUG("pop layout %s %s" % (layout.metaObject().className(),
+                                    layout.objectName()))
+        return layout
+
+    def popWidget(self):
+        widget = list.pop(self)
+        DEBUG("pop widget %s %s" % (widget.metaObject().className(),
+                                    widget.objectName()))
+        for item in reversed(self):
+            if isinstance(item, QtWidgets.QWidget):
+                self.topwidget = item
+                break
+        else:
+            self.topwidget = None
+        DEBUG("new topwidget %s" % (self.topwidget,))
+        return widget
+
+    def peek(self):
+        return self[-1]
+
+    def topIsLayout(self):
+        return isinstance(self[-1], QtWidgets.QLayout)
+
+
+class ButtonGroup(object):
+    """ Encapsulate the configuration of a button group and its implementation.
+    """
+
+    def __init__(self):
+        """ Initialise the button group. """
+
+        self.exclusive = True
+        self.object = None
+
+
+class UIParser(object):    
+    def __init__(self, qtcore_module, qtgui_module, qtwidgets_module, creatorPolicy):
+        self.factory = QObjectCreator(creatorPolicy)
+        self.wprops = Properties(self.factory, qtcore_module, qtgui_module,
+                qtwidgets_module)
+        
+        global QtCore, QtWidgets
+        QtCore = qtcore_module
+        QtWidgets = qtwidgets_module
+        
+        self.reset()
+
+    def uniqueName(self, name):
+        """UIParser.uniqueName(string) -> string
+
+        Create a unique name from a string.
+        >>> p = UIParser(QtCore, QtGui, QtWidgets)
+        >>> p.uniqueName("foo")
+        'foo'
+        >>> p.uniqueName("foo")
+        'foo1'
+        """
+        try:
+            suffix = self.name_suffixes[name]
+        except KeyError:
+            self.name_suffixes[name] = 0
+            return name
+
+        suffix += 1
+        self.name_suffixes[name] = suffix
+
+        return "%s%i" % (name, suffix)
+
+    def reset(self):
+        try: self.wprops.reset()
+        except AttributeError: pass
+        self.toplevelWidget = None
+        self.stack = WidgetStack()
+        self.name_suffixes = {}
+        self.defaults = {"spacing": 6, "margin": 0}
+        self.actions = []
+        self.currentActionGroup = None
+        self.resources = []
+        self.button_groups = {}
+        self.layout_widget = False
+
+    def setupObject(self, clsname, parent, branch, is_attribute = True):
+        name = self.uniqueName(branch.attrib.get("name") or clsname[1:].lower())
+        if parent is None:
+            args = ()
+        else:
+            args = (parent, )
+        obj =  self.factory.createQObject(clsname, name, args, is_attribute)
+        self.wprops.setProperties(obj, branch)
+        obj.setObjectName(name)
+        if is_attribute:
+            setattr(self.toplevelWidget, name, obj)
+        return obj
+
+    def getProperty(self, elem, name):
+        for prop in elem.findall('property'):
+            if prop.attrib['name'] == name:
+                return prop
+
+        return None
+
+    def createWidget(self, elem):
+        self.column_counter = 0
+        self.row_counter = 0
+        self.item_nr = 0
+        self.itemstack = []
+        self.sorting_enabled = None
+
+        widget_class = elem.attrib['class'].replace('::', '.')
+        if widget_class == 'Line':
+            widget_class = 'QFrame'
+        
+        # Ignore the parent if it is a container.
+        parent = self.stack.topwidget
+        if isinstance(parent, (QtWidgets.QDockWidget, QtWidgets.QMdiArea,
+                               QtWidgets.QScrollArea, QtWidgets.QStackedWidget,
+                               QtWidgets.QToolBox, QtWidgets.QTabWidget,
+                               QtWidgets.QWizard)):
+            parent = None
+
+        # See if this is a layout widget.
+        if widget_class == 'QWidget':
+            if parent is not None:
+                if not isinstance(parent, QtWidgets.QMainWindow):
+                    self.layout_widget = True
+
+        self.stack.push(self.setupObject(widget_class, parent, elem))
+
+        if isinstance(self.stack.topwidget, QtWidgets.QTableWidget):
+            if self.getProperty(elem, 'columnCount') is None:
+                self.stack.topwidget.setColumnCount(len(elem.findall("column")))
+
+            if self.getProperty(elem, 'rowCount') is None:
+                self.stack.topwidget.setRowCount(len(elem.findall("row")))
+
+        self.traverseWidgetTree(elem)
+        widget = self.stack.popWidget()
+
+        self.layout_widget = False
+
+        if isinstance(widget, QtWidgets.QTreeView):
+            self.handleHeaderView(elem, "header", widget.header())
+
+        elif isinstance(widget, QtWidgets.QTableView):
+            self.handleHeaderView(elem, "horizontalHeader",
+                    widget.horizontalHeader())
+            self.handleHeaderView(elem, "verticalHeader",
+                    widget.verticalHeader())
+
+        elif isinstance(widget, QtWidgets.QAbstractButton):
+            bg_i18n = self.wprops.getAttribute(elem, "buttonGroup")
+            if bg_i18n is not None:
+                # This should be handled properly in case the problem arises
+                # elsewhere as well.
+                try:
+                    # We are compiling the .ui file.
+                    bg_name = bg_i18n.string
+                except AttributeError:
+                    # We are loading the .ui file.
+                    bg_name = bg_i18n
+
+                bg = self.button_groups[bg_name]
+
+                if bg.object is None:
+                    bg.object = self.factory.createQObject("QButtonGroup",
+                            bg_name, (self.toplevelWidget, ))
+                    setattr(self.toplevelWidget, bg_name, bg.object)
+
+                    bg.object.setObjectName(bg_name)
+
+                    if not bg.exclusive:
+                        bg.object.setExclusive(False)
+
+                bg.object.addButton(widget)
+
+        if self.sorting_enabled is not None:
+            widget.setSortingEnabled(self.sorting_enabled)
+            self.sorting_enabled = None
+        
+        if self.stack.topIsLayout():
+            lay = self.stack.peek()
+            lp = elem.attrib['layout-position']
+
+            if isinstance(lay, QtWidgets.QFormLayout):
+                lay.setWidget(lp[0], self._form_layout_role(lp), widget)
+            else:
+                lay.addWidget(widget, *lp)
+
+        topwidget = self.stack.topwidget
+
+        if isinstance(topwidget, QtWidgets.QToolBox):
+            icon = self.wprops.getAttribute(elem, "icon")
+            if icon is not None:
+                topwidget.addItem(widget, icon, self.wprops.getAttribute(elem, "label"))
+            else:
+                topwidget.addItem(widget, self.wprops.getAttribute(elem, "label"))
+
+            tooltip = self.wprops.getAttribute(elem, "toolTip")
+            if tooltip is not None:
+                topwidget.setItemToolTip(topwidget.indexOf(widget), tooltip)
+                
+        elif isinstance(topwidget, QtWidgets.QTabWidget):
+            icon = self.wprops.getAttribute(elem, "icon")
+            if icon is not None:
+                topwidget.addTab(widget, icon, self.wprops.getAttribute(elem, "title"))
+            else:
+                topwidget.addTab(widget, self.wprops.getAttribute(elem, "title"))
+
+            tooltip = self.wprops.getAttribute(elem, "toolTip")
+            if tooltip is not None:
+                topwidget.setTabToolTip(topwidget.indexOf(widget), tooltip)
+            
+        elif isinstance(topwidget, QtWidgets.QWizard):
+            topwidget.addPage(widget)
+            
+        elif isinstance(topwidget, QtWidgets.QStackedWidget):
+            topwidget.addWidget(widget)
+            
+        elif isinstance(topwidget, (QtWidgets.QDockWidget, QtWidgets.QScrollArea)):
+            topwidget.setWidget(widget)
+            
+        elif isinstance(topwidget, QtWidgets.QMainWindow):
+            if type(widget) == QtWidgets.QWidget:
+                topwidget.setCentralWidget(widget)
+            elif isinstance(widget, QtWidgets.QToolBar):
+                tbArea = self.wprops.getAttribute(elem, "toolBarArea")
+
+                if tbArea is None:
+                    topwidget.addToolBar(widget)
+                else:
+                    topwidget.addToolBar(tbArea, widget)
+
+                tbBreak = self.wprops.getAttribute(elem, "toolBarBreak")
+
+                if tbBreak:
+                    topwidget.insertToolBarBreak(widget)
+
+            elif isinstance(widget, QtWidgets.QMenuBar):
+                topwidget.setMenuBar(widget)
+            elif isinstance(widget, QtWidgets.QStatusBar):
+                topwidget.setStatusBar(widget)
+            elif isinstance(widget, QtWidgets.QDockWidget):
+                dwArea = self.wprops.getAttribute(elem, "dockWidgetArea")
+                topwidget.addDockWidget(QtCore.Qt.DockWidgetArea(dwArea),
+                        widget)
+
+    def handleHeaderView(self, elem, name, header):
+        value = self.wprops.getAttribute(elem, name + "Visible")
+        if value is not None:
+            header.setVisible(value)
+
+        value = self.wprops.getAttribute(elem, name + "CascadingSectionResizes")
+        if value is not None:
+            header.setCascadingSectionResizes(value)
+
+        value = self.wprops.getAttribute(elem, name + "DefaultSectionSize")
+        if value is not None:
+            header.setDefaultSectionSize(value)
+
+        value = self.wprops.getAttribute(elem, name + "HighlightSections")
+        if value is not None:
+            header.setHighlightSections(value)
+
+        value = self.wprops.getAttribute(elem, name + "MinimumSectionSize")
+        if value is not None:
+            header.setMinimumSectionSize(value)
+
+        value = self.wprops.getAttribute(elem, name + "ShowSortIndicator")
+        if value is not None:
+            header.setSortIndicatorShown(value)
+
+        value = self.wprops.getAttribute(elem, name + "StretchLastSection")
+        if value is not None:
+            header.setStretchLastSection(value)
+
+    def createSpacer(self, elem):
+        width = elem.findtext("property/size/width")
+        height = elem.findtext("property/size/height")
+
+        if width is None or height is None:
+            size_args = ()
+        else:
+            size_args = (int(width), int(height))
+
+        sizeType = self.wprops.getProperty(elem, "sizeType",
+                QtWidgets.QSizePolicy.Expanding)
+
+        policy = (QtWidgets.QSizePolicy.Minimum, sizeType)
+
+        if self.wprops.getProperty(elem, "orientation") == QtCore.Qt.Horizontal:
+            policy = policy[1], policy[0]
+
+        spacer = self.factory.createQObject("QSpacerItem",
+                self.uniqueName("spacerItem"), size_args + policy,
+                is_attribute=False)
+
+        if self.stack.topIsLayout():
+            lay = self.stack.peek()
+            lp = elem.attrib['layout-position']
+
+            if isinstance(lay, QtWidgets.QFormLayout):
+                lay.setItem(lp[0], self._form_layout_role(lp), spacer)
+            else:
+                lay.addItem(spacer, *lp)
+
+    def createLayout(self, elem):
+        # Qt v4.3 introduced setContentsMargins() and separate values for each
+        # of the four margins which are specified as separate properties.  This
+        # doesn't really fit the way we parse the tree (why aren't the values
+        # passed as attributes of a single property?) so we create a new
+        # property and inject it.  However, if we find that they have all been
+        # specified and have the same value then we inject a different property
+        # that is compatible with older versions of Qt.
+        left = self.wprops.getProperty(elem, 'leftMargin', -1)
+        top = self.wprops.getProperty(elem, 'topMargin', -1)
+        right = self.wprops.getProperty(elem, 'rightMargin', -1)
+        bottom = self.wprops.getProperty(elem, 'bottomMargin', -1)
+
+        # Count the number of properties and if they had the same value.
+        def comp_property(m, so_far=-2, nr=0):
+            if m >= 0:
+                nr += 1
+
+                if so_far == -2:
+                    so_far = m
+                elif so_far != m:
+                    so_far = -1
+
+            return so_far, nr
+
+        margin, nr_margins = comp_property(left)
+        margin, nr_margins = comp_property(top, margin, nr_margins)
+        margin, nr_margins = comp_property(right, margin, nr_margins)
+        margin, nr_margins = comp_property(bottom, margin, nr_margins)
+
+        if nr_margins > 0:
+            if nr_margins == 4 and margin >= 0:
+                # We can inject the old margin property.
+                me = SubElement(elem, 'property', name='margin')
+                SubElement(me, 'number').text = str(margin)
+            else:
+                # We have to inject the new internal property.
+                cme = SubElement(elem, 'property', name='pyuicContentsMargins')
+                SubElement(cme, 'number').text = str(left)
+                SubElement(cme, 'number').text = str(top)
+                SubElement(cme, 'number').text = str(right)
+                SubElement(cme, 'number').text = str(bottom)
+        elif self.layout_widget:
+            margin = self.wprops.getProperty(elem, 'margin', -1)
+            if margin < 0:
+                # The layout's of layout widgets have no margin.
+                me = SubElement(elem, 'property', name='margin')
+                SubElement(me, 'number').text = '0'
+
+            # In case there are any nested layouts.
+            self.layout_widget = False
+
+        # We do the same for setHorizontalSpacing() and setVerticalSpacing().
+        horiz = self.wprops.getProperty(elem, 'horizontalSpacing', -1)
+        vert = self.wprops.getProperty(elem, 'verticalSpacing', -1)
+
+        if horiz >= 0 or vert >= 0:
+            # We inject the new internal property.
+            cme = SubElement(elem, 'property', name='pyuicSpacing')
+            SubElement(cme, 'number').text = str(horiz)
+            SubElement(cme, 'number').text = str(vert)
+
+        classname = elem.attrib["class"]
+        if self.stack.topIsLayout():
+            parent = None
+        else:
+            parent = self.stack.topwidget
+        if "name" not in elem.attrib:
+            elem.attrib["name"] = classname[1:].lower()
+        self.stack.push(self.setupObject(classname, parent, elem))
+        self.traverseWidgetTree(elem)
+
+        layout = self.stack.popLayout()
+        self.configureLayout(elem, layout)
+
+        if self.stack.topIsLayout():
+            top_layout = self.stack.peek()
+            lp = elem.attrib['layout-position']
+
+            if isinstance(top_layout, QtWidgets.QFormLayout):
+                top_layout.setLayout(lp[0], self._form_layout_role(lp), layout)
+            else:
+                top_layout.addLayout(layout, *lp)
+
+    def configureLayout(self, elem, layout):
+        if isinstance(layout, QtWidgets.QGridLayout):
+            self.setArray(elem, 'columnminimumwidth',
+                    layout.setColumnMinimumWidth)
+            self.setArray(elem, 'rowminimumheight',
+                    layout.setRowMinimumHeight)
+            self.setArray(elem, 'columnstretch', layout.setColumnStretch)
+            self.setArray(elem, 'rowstretch', layout.setRowStretch)
+
+        elif isinstance(layout, QtWidgets.QBoxLayout):
+            self.setArray(elem, 'stretch', layout.setStretch)
+
+    def setArray(self, elem, name, setter):
+        array = elem.attrib.get(name)
+        if array:
+            for idx, value in enumerate(array.split(',')):
+                value = int(value)
+                if value > 0:
+                    setter(idx, value)
+
+    def disableSorting(self, w):
+        if self.item_nr == 0:
+            self.sorting_enabled = self.factory.invoke("__sortingEnabled",
+                    w.isSortingEnabled)
+            w.setSortingEnabled(False)
+
+    def handleItem(self, elem):
+        if self.stack.topIsLayout():
+            elem[0].attrib['layout-position'] = _layout_position(elem)
+            self.traverseWidgetTree(elem)
+        else:
+            w = self.stack.topwidget
+
+            if isinstance(w, QtWidgets.QComboBox):
+                text = self.wprops.getProperty(elem, "text")
+                icon = self.wprops.getProperty(elem, "icon")
+
+                if icon:
+                    w.addItem(icon, '')
+                else:
+                    w.addItem('')
+
+                w.setItemText(self.item_nr, text)
+
+            elif isinstance(w, QtWidgets.QListWidget):
+                self.disableSorting(w)
+                item = self.createWidgetItem('QListWidgetItem', elem, w.item,
+                        self.item_nr)
+                w.addItem(item)
+
+            elif isinstance(w, QtWidgets.QTreeWidget):
+                if self.itemstack:
+                    parent, _ = self.itemstack[-1]
+                    _, nr_in_root = self.itemstack[0]
+                else:
+                    parent = w
+                    nr_in_root = self.item_nr
+
+                item = self.factory.createQObject("QTreeWidgetItem",
+                        "item_%d" % len(self.itemstack), (parent, ), False)
+
+                if self.item_nr == 0 and not self.itemstack:
+                    self.sorting_enabled = self.factory.invoke("__sortingEnabled", w.isSortingEnabled)
+                    w.setSortingEnabled(False)
+
+                self.itemstack.append((item, self.item_nr))
+                self.item_nr = 0
+
+                # We have to access the item via the tree when setting the
+                # text.
+                titm = w.topLevelItem(nr_in_root)
+                for child, nr_in_parent in self.itemstack[1:]:
+                    titm = titm.child(nr_in_parent)
+
+                column = -1
+                for prop in elem.findall('property'):
+                    c_prop = self.wprops.convert(prop)
+                    c_prop_name = prop.attrib['name']
+
+                    if c_prop_name == 'text':
+                        column += 1
+                        if c_prop:
+                            titm.setText(column, c_prop)
+                    elif c_prop_name == 'statusTip':
+                        item.setStatusTip(column, c_prop)
+                    elif c_prop_name == 'toolTip':
+                        item.setToolTip(column, c_prop)
+                    elif c_prop_name == 'whatsThis':
+                        item.setWhatsThis(column, c_prop)
+                    elif c_prop_name == 'font':
+                        item.setFont(column, c_prop)
+                    elif c_prop_name == 'icon':
+                        item.setIcon(column, c_prop)
+                    elif c_prop_name == 'background':
+                        item.setBackground(column, c_prop)
+                    elif c_prop_name == 'foreground':
+                        item.setForeground(column, c_prop)
+                    elif c_prop_name == 'flags':
+                        item.setFlags(c_prop)
+                    elif c_prop_name == 'checkState':
+                        item.setCheckState(column, c_prop)
+
+                self.traverseWidgetTree(elem)
+                _, self.item_nr = self.itemstack.pop()
+
+            elif isinstance(w, QtWidgets.QTableWidget):
+                row = int(elem.attrib['row'])
+                col = int(elem.attrib['column'])
+
+                self.disableSorting(w)
+                item = self.createWidgetItem('QTableWidgetItem', elem, w.item,
+                        row, col)
+                w.setItem(row, col, item)
+
+            self.item_nr += 1
+
+    def addAction(self, elem):
+        self.actions.append((self.stack.topwidget, elem.attrib["name"]))
+
+    @staticmethod
+    def any_i18n(*args):
+        """ Return True if any argument appears to be an i18n string. """
+
+        for a in args:
+            if a is not None and not isinstance(a, str):
+                return True
+
+        return False
+
+    def createWidgetItem(self, item_type, elem, getter, *getter_args):
+        """ Create a specific type of widget item. """
+
+        item = self.factory.createQObject(item_type, "item", (), False)
+        props = self.wprops
+
+        # Note that not all types of widget items support the full set of
+        # properties.
+
+        text = props.getProperty(elem, 'text')
+        status_tip = props.getProperty(elem, 'statusTip')
+        tool_tip = props.getProperty(elem, 'toolTip')
+        whats_this = props.getProperty(elem, 'whatsThis')
+
+        if self.any_i18n(text, status_tip, tool_tip, whats_this):
+            self.factory.invoke("item", getter, getter_args)
+
+        if text:
+            item.setText(text)
+
+        if status_tip:
+            item.setStatusTip(status_tip)
+
+        if tool_tip:
+            item.setToolTip(tool_tip)
+
+        if whats_this:
+            item.setWhatsThis(whats_this)
+
+        text_alignment = props.getProperty(elem, 'textAlignment')
+        if text_alignment:
+            item.setTextAlignment(text_alignment)
+
+        font = props.getProperty(elem, 'font')
+        if font:
+            item.setFont(font)
+
+        icon = props.getProperty(elem, 'icon')
+        if icon:
+            item.setIcon(icon)
+
+        background = props.getProperty(elem, 'background')
+        if background:
+            item.setBackground(background)
+
+        foreground = props.getProperty(elem, 'foreground')
+        if foreground:
+            item.setForeground(foreground)
+
+        flags = props.getProperty(elem, 'flags')
+        if flags:
+            item.setFlags(flags)
+
+        check_state = props.getProperty(elem, 'checkState')
+        if check_state:
+            item.setCheckState(check_state)
+
+        return item
+
+    def addHeader(self, elem):
+        w = self.stack.topwidget
+
+        if isinstance(w, QtWidgets.QTreeWidget):
+            props = self.wprops
+            col = self.column_counter
+
+            text = props.getProperty(elem, 'text')
+            if text:
+                w.headerItem().setText(col, text)
+
+            status_tip = props.getProperty(elem, 'statusTip')
+            if status_tip:
+                w.headerItem().setStatusTip(col, status_tip)
+
+            tool_tip = props.getProperty(elem, 'toolTip')
+            if tool_tip:
+                w.headerItem().setToolTip(col, tool_tip)
+
+            whats_this = props.getProperty(elem, 'whatsThis')
+            if whats_this:
+                w.headerItem().setWhatsThis(col, whats_this)
+
+            text_alignment = props.getProperty(elem, 'textAlignment')
+            if text_alignment:
+                w.headerItem().setTextAlignment(col, text_alignment)
+
+            font = props.getProperty(elem, 'font')
+            if font:
+                w.headerItem().setFont(col, font)
+
+            icon = props.getProperty(elem, 'icon')
+            if icon:
+                w.headerItem().setIcon(col, icon)
+
+            background = props.getProperty(elem, 'background')
+            if background:
+                w.headerItem().setBackground(col, background)
+
+            foreground = props.getProperty(elem, 'foreground')
+            if foreground:
+                w.headerItem().setForeground(col, foreground)
+
+            self.column_counter += 1
+
+        elif isinstance(w, QtWidgets.QTableWidget):
+            if len(elem) != 0:
+                if elem.tag == 'column':
+                    item = self.createWidgetItem('QTableWidgetItem', elem,
+                            w.horizontalHeaderItem, self.column_counter)
+                    w.setHorizontalHeaderItem(self.column_counter, item)
+                    self.column_counter += 1
+                elif elem.tag == 'row':
+                    item = self.createWidgetItem('QTableWidgetItem', elem,
+                            w.verticalHeaderItem, self.row_counter)
+                    w.setVerticalHeaderItem(self.row_counter, item)
+                    self.row_counter += 1
+
+    def createAction(self, elem):
+        self.setupObject("QAction", self.currentActionGroup or self.toplevelWidget,
+                         elem)
+
+    def createActionGroup(self, elem):
+        action_group = self.setupObject("QActionGroup", self.toplevelWidget, elem)
+        self.currentActionGroup = action_group
+        self.traverseWidgetTree(elem)
+        self.currentActionGroup = None
+
+    widgetTreeItemHandlers = {
+        "widget"    : createWidget,
+        "addaction" : addAction,
+        "layout"    : createLayout,
+        "spacer"    : createSpacer,
+        "item"      : handleItem,
+        "action"    : createAction,
+        "actiongroup": createActionGroup,
+        "column"    : addHeader,
+        "row"       : addHeader,
+        }
+
+    def traverseWidgetTree(self, elem):
+        for child in iter(elem):
+            try:
+                handler = self.widgetTreeItemHandlers[child.tag]
+            except KeyError: 
+                continue
+
+            handler(self, child)
+
+    def createUserInterface(self, elem):
+        # Get the names of the class and widget.
+        cname = elem.attrib["class"]
+        wname = elem.attrib["name"]
+
+        # If there was no widget name then derive it from the class name.
+        if not wname:
+            wname = cname
+
+            if wname.startswith("Q"):
+                wname = wname[1:]
+
+            wname = wname[0].lower() + wname[1:]
+
+        self.toplevelWidget = self.createToplevelWidget(cname, wname)
+        self.toplevelWidget.setObjectName(wname)
+        DEBUG("toplevel widget is %s",
+              self.toplevelWidget.metaObject().className())
+        self.wprops.setProperties(self.toplevelWidget, elem)
+        self.stack.push(self.toplevelWidget)
+        self.traverseWidgetTree(elem)
+        self.stack.popWidget()
+        self.addActions()
+        self.setBuddies()
+        self.setDelayedProps()
+        
+    def addActions(self):
+        for widget, action_name in self.actions:
+            if action_name == "separator":
+                widget.addSeparator()
+            else:
+                DEBUG("add action %s to %s", action_name, widget.objectName())
+                action_obj = getattr(self.toplevelWidget, action_name)
+                if isinstance(action_obj, QtWidgets.QMenu):
+                    widget.addAction(action_obj.menuAction())
+                elif not isinstance(action_obj, QtWidgets.QActionGroup):
+                    widget.addAction(action_obj)
+
+    def setDelayedProps(self):
+        for widget, layout, setter, args in self.wprops.delayed_props:
+            if layout:
+                widget = widget.layout()
+
+            setter = getattr(widget, setter)
+            setter(args)
+            
+    def setBuddies(self):
+        for widget, buddy in self.wprops.buddies:
+            DEBUG("%s is buddy of %s", buddy, widget.objectName())
+            try:
+                widget.setBuddy(getattr(self.toplevelWidget, buddy))
+            except AttributeError:
+                DEBUG("ERROR in ui spec: %s (buddy of %s) does not exist",
+                      buddy, widget.objectName())
+
+    def classname(self, elem):
+        DEBUG("uiname is %s", elem.text)
+        name = elem.text
+
+        if name is None:
+            name = ""
+
+        self.uiname = name
+        self.wprops.uiname = name
+        self.setContext(name)
+
+    def setContext(self, context):
+        """
+        Reimplemented by a sub-class if it needs to know the translation
+        context.
+        """
+        pass
+
+    def readDefaults(self, elem):
+        self.defaults["margin"] = int(elem.attrib["margin"])
+        self.defaults["spacing"] = int(elem.attrib["spacing"])
+
+    def setTaborder(self, elem):
+        lastwidget = None
+        for widget_elem in elem:
+            widget = getattr(self.toplevelWidget, widget_elem.text)
+
+            if lastwidget is not None:
+                self.toplevelWidget.setTabOrder(lastwidget, widget)
+
+            lastwidget = widget
+
+    def readResources(self, elem):
+        """
+        Read a "resources" tag and add the module to import to the parser's
+        list of them.
+        """
+        for include in elem.getiterator("include"):
+            loc = include.attrib.get("location")
+
+            # Apply the convention for naming the Python files generated by
+            # pyrcc5.
+            if loc and loc.endswith('.qrc'):
+                mname = os.path.basename(loc[:-4] + self._resource_suffix)
+                if mname not in self.resources:
+                    self.resources.append(mname)
+
+    def createConnections(self, elem):
+        def name2object(obj):
+            if obj == self.uiname:
+                return self.toplevelWidget
+            else:
+                return getattr(self.toplevelWidget, obj)
+
+        for conn in iter(elem):
+            signal = conn.findtext('signal')
+            signal_name, signal_args = signal.split('(')
+            signal_args = signal_args[:-1].replace(' ', '')
+            sender = name2object(conn.findtext('sender'))
+            bound_signal = getattr(sender, signal_name)
+
+            slot = self.factory.getSlot(name2object(conn.findtext('receiver')),
+                    conn.findtext('slot').split('(')[0])
+
+            if signal_args == '':
+                bound_signal.connect(slot)
+            else:
+                signal_args = signal_args.split(',')
+
+                if len(signal_args) == 1:
+                    bound_signal[signal_args[0]].connect(slot)
+                else:
+                    bound_signal[tuple(signal_args)].connect(slot)
+
+        QtCore.QMetaObject.connectSlotsByName(self.toplevelWidget)
+
+    def customWidgets(self, elem):
+        def header2module(header):
+            """header2module(header) -> string
+
+            Convert paths to C++ header files to according Python modules
+            >>> header2module("foo/bar/baz.h")
+            'foo.bar.baz'
+            """
+            if header.endswith(".h"):
+                header = header[:-2]
+
+            mpath = []
+            for part in header.split('/'):
+                # Ignore any empty parts or those that refer to the current
+                # directory.
+                if part not in ('', '.'):
+                    if part == '..':
+                        # We should allow this for Python3.
+                        raise SyntaxError("custom widget header file name may not contain '..'.")
+
+                    mpath.append(part)
+
+            return '.'.join(mpath)
+    
+        for custom_widget in iter(elem):
+            classname = custom_widget.findtext("class")
+            self.factory.addCustomWidget(classname,
+                                     custom_widget.findtext("extends") or "QWidget",
+                                     header2module(custom_widget.findtext("header")))
+
+    def createToplevelWidget(self, classname, widgetname):
+        raise NotImplementedError
+
+    def buttonGroups(self, elem):
+        for button_group in iter(elem):
+            if button_group.tag == 'buttongroup':
+                bg_name = button_group.attrib['name']
+                bg = ButtonGroup()
+                self.button_groups[bg_name] = bg
+
+                prop = self.getProperty(button_group, 'exclusive')
+                if prop is not None:
+                    if prop.findtext('bool') == 'false':
+                        bg.exclusive = False
+
+    # finalize will be called after the whole tree has been parsed and can be
+    # overridden.
+    def finalize(self):
+        pass
+
+    def parse(self, filename, resource_suffix, base_dir=''):
+        self.wprops.set_base_dir(base_dir)
+
+        self._resource_suffix = resource_suffix
+
+        # The order in which the different branches are handled is important.
+        # The widget tree handler relies on all custom widgets being known, and
+        # in order to create the connections, all widgets have to be populated.
+        branchHandlers = (
+            ("layoutdefault", self.readDefaults),
+            ("class",         self.classname),
+            ("buttongroups",  self.buttonGroups),
+            ("customwidgets", self.customWidgets),
+            ("widget",        self.createUserInterface),
+            ("connections",   self.createConnections),
+            ("tabstops",      self.setTaborder),
+            ("resources",     self.readResources),
+        )
+
+        document = parse(filename)
+        version = document.getroot().attrib["version"]
+        DEBUG("UI version is %s" % (version,))
+        # Right now, only version 4.0 is supported.
+        assert version in ("4.0",)
+        for tagname, actor in branchHandlers:
+            elem = document.find(tagname)
+            if elem is not None:
+                actor(elem)
+        self.finalize()
+        w = self.toplevelWidget
+        self.reset()
+        return w
+
+    @staticmethod
+    def _form_layout_role(layout_position):
+        if layout_position[3] > 1:
+            role = QtWidgets.QFormLayout.SpanningRole
+        elif layout_position[1] == 1:
+            role = QtWidgets.QFormLayout.FieldRole
+        else:
+            role = QtWidgets.QFormLayout.LabelRole
+
+        return role
diff --git a/pyuic/uic/widget-plugins/qaxcontainer.py b/pyuic/uic/widget-plugins/qaxcontainer.py
new file mode 100644
index 0000000..1c19e71
--- /dev/null
+++ b/pyuic/uic/widget-plugins/qaxcontainer.py
@@ -0,0 +1,33 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+# If pluginType is MODULE, the plugin loader will call moduleInformation.  The
+# variable MODULE is inserted into the local namespace by the plugin loader.
+pluginType = MODULE
+
+
+# moduleInformation() must return a tuple (module, widget_list).  If "module"
+# is "A" and any widget from this module is used, the code generator will write
+# "import A".  If "module" is "A[.B].C", the code generator will write
+# "from A[.B] import C".  Each entry in "widget_list" must be unique.
+def moduleInformation():
+    return "PyQt5.QAxContainer", ("QAxWidget", )
diff --git a/pyuic/uic/widget-plugins/qscintilla.py b/pyuic/uic/widget-plugins/qscintilla.py
new file mode 100644
index 0000000..ad4df00
--- /dev/null
+++ b/pyuic/uic/widget-plugins/qscintilla.py
@@ -0,0 +1,33 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+# If pluginType is MODULE, the plugin loader will call moduleInformation.  The
+# variable MODULE is inserted into the local namespace by the plugin loader.
+pluginType = MODULE
+
+
+# moduleInformation() must return a tuple (module, widget_list).  If "module"
+# is "A" and any widget from this module is used, the code generator will write
+# "import A".  If "module" is "A[.B].C", the code generator will write
+# "from A[.B] import C".  Each entry in "widget_list" must be unique.
+def moduleInformation():
+    return "PyQt5.Qsci", ("QsciScintilla", )
diff --git a/pyuic/uic/widget-plugins/qtprintsupport.py b/pyuic/uic/widget-plugins/qtprintsupport.py
new file mode 100644
index 0000000..d13be21
--- /dev/null
+++ b/pyuic/uic/widget-plugins/qtprintsupport.py
@@ -0,0 +1,33 @@
+#############################################################################
+##
+## Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+## 
+## This file is part of PyQt5.
+## 
+## 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 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.
+## 
+## If you do not wish to use this file under the terms of the GPL version 3.0
+## then you may purchase a commercial license.  For more information contact
+## info at riverbankcomputing.com.
+## 
+## This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+## WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+##
+#############################################################################
+
+
+# If pluginType is MODULE, the plugin loader will call moduleInformation.  The
+# variable MODULE is inserted into the local namespace by the plugin loader.
+pluginType = MODULE
+
+
+# moduleInformation() must return a tuple (module, widget_list).  If "module"
+# is "A" and any widget from this module is used, the code generator will write
+# "import A".  If "module" is "A[.B].C", the code generator will write
+# "from A[.B] import C".  Each entry in "widget_list" must be unique.
+def moduleInformation():
+    return 'PyQt5.QtPrintSupport', ('QAbstractPrintDialog', 'QPageSetupDialog')
diff --git a/pyuic/uic/widget-plugins/qtwebkit.py b/pyuic/uic/widget-plugins/qtwebkit.py
new file mode 100644
index 0000000..087ec6e
--- /dev/null
+++ b/pyuic/uic/widget-plugins/qtwebkit.py
@@ -0,0 +1,51 @@
+#############################################################################
+##
+## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2006 Thorsten Marek.
+## All right reserved.
+##
+## This file is part of PyQt.
+##
+## You may use this file under the terms of the GPL v2 or the revised BSD
+## license as follows:
+##
+## "Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are
+## met:
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above copyright
+##     notice, this list of conditions and the following disclaimer in
+##     the documentation and/or other materials provided with the
+##     distribution.
+##   * Neither the name of the Riverbank Computing Limited nor the names
+##     of its contributors may be used to endorse or promote products
+##     derived from this software without specific prior written
+##     permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+##
+#############################################################################
+
+
+# If pluginType is MODULE, the plugin loader will call moduleInformation.  The
+# variable MODULE is inserted into the local namespace by the plugin loader.
+pluginType = MODULE
+
+
+# moduleInformation() must return a tuple (module, widget_list).  If "module"
+# is "A" and any widget from this module is used, the code generator will write
+# "import A".  If "module" is "A[.B].C", the code generator will write
+# "from A[.B] import C".  Each entry in "widget_list" must be unique.
+def moduleInformation():
+    return "PyQt5.QtWebKitWidgets", ("QWebView", )
diff --git a/qmlscene/pluginloader.cpp b/qmlscene/pluginloader.cpp
new file mode 100644
index 0000000..b194f8f
--- /dev/null
+++ b/qmlscene/pluginloader.cpp
@@ -0,0 +1,407 @@
+/*
+ * This is the qmlscene plugin that collects all the Python plugins it can
+ * find.
+ *
+ * Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+ * 
+ * This file is part of PyQt5.
+ * 
+ * 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 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.
+ * 
+ * If you do not wish to use this file under the terms of the GPL version 3.0
+ * then you may purchase a commercial license.  For more information contact
+ * info at riverbankcomputing.com.
+ * 
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+
+#include <stdlib.h>
+
+#include <Python.h>
+
+#include <QCoreApplication>
+#include <QDir>
+#include <QLibraryInfo>
+#include <QVector>
+#include <QQmlEngine>
+
+#include "pluginloader.h"
+
+
+// Construct the C++ plugin.
+PyQt5QmlPlugin::PyQt5QmlPlugin(QObject *parent) : QQmlExtensionPlugin(parent),
+        py_plugin_obj(0), sip(0)
+{
+    // Make sure the interpreter is initialised.
+    if (!Py_IsInitialized())
+    {
+        Py_Initialize();
+
+        getSipAPI();
+
+#ifdef WITH_THREAD
+        // Make sure we don't have the GIL.
+        PyEval_InitThreads();
+        PyEval_SaveThread();
+#endif
+    }
+}
+
+
+// Destroy the C++ plugin.
+PyQt5QmlPlugin::~PyQt5QmlPlugin()
+{
+    if (Py_IsInitialized())
+    {
+#ifdef WITH_THREAD
+        PyGILState_STATE gil = PyGILState_Ensure();
+#endif
+
+        Py_XDECREF(py_plugin_obj);
+
+#ifdef WITH_THREAD
+        PyGILState_Release(gil);
+#endif
+    }
+}
+
+
+// Initialize the QML engine.
+void PyQt5QmlPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
+{
+    if (!Py_IsInitialized() || !py_plugin_obj || !sip)
+        return;
+
+#ifdef WITH_THREAD
+    PyGILState_STATE gil = PyGILState_Ensure();
+#endif
+
+    const sipTypeDef *td = sip->api_find_type("QQmlEngine");
+
+    if (!td)
+    {
+        PyErr_SetString(PyExc_AttributeError,
+                "unable to find type for QQmlEngine");
+    }
+    else
+    {
+        PyObject *engine_obj = sip->api_convert_from_type(engine, td, 0);
+
+        if (!engine_obj)
+        {
+            td = 0;
+        }
+        else
+        {
+            PyObject *res_obj = PyObject_CallMethod(py_plugin_obj,
+                    const_cast<char *>("initializeEngine"),
+                    const_cast<char *>("Os"), engine_obj, uri);
+
+            Py_DECREF(engine_obj);
+
+            if (res_obj != Py_None)
+            {
+                if (res_obj)
+#if PY_MAJOR_VERSION >= 3
+                    PyErr_Format(PyExc_TypeError,
+                            "unexpected result from initializeEngine(): %S",
+                            res_obj);
+#else
+                {
+                    PyObject *res_s = PyObject_Str(res_obj);
+
+                    if (res_s != NULL)
+                    {
+                        PyErr_Format(PyExc_TypeError,
+                                "unexpected result from initializeEngine(): %s",
+                                PyString_AsString(res_s));
+
+                        Py_DECREF(res_s);
+                    }
+                }
+#endif
+
+                td = 0;
+            }
+
+            Py_XDECREF(res_obj);
+        }
+    }
+
+    if (!td)
+        PyErr_Print();
+
+#ifdef WITH_THREAD
+    PyGILState_Release(gil);
+#endif
+}
+
+
+// Register the plugin's types.
+void PyQt5QmlPlugin::registerTypes(const char *uri)
+{
+    // Construct the import path that the engine will have used by default.
+    // Unfortunately we won't know about any directories added by qmlscene's -I
+    // flag.
+    QStringList import_path;
+
+    import_path << QCoreApplication::applicationDirPath();
+
+    const char *env_path = getenv("QML2_IMPORT_PATH");
+
+    if (env_path)
+    {
+#if defined(Q_OS_WIN)
+        QLatin1Char sep(';');
+#else
+        QLatin1Char sep(':');
+#endif
+
+        QStringList env_dirs = QString::fromLatin1(env_path).split(sep, QString::SkipEmptyParts);
+
+        foreach (QString dir_name, env_dirs)
+            import_path << QDir(dir_name).canonicalPath();
+    }
+
+    import_path << QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath);
+
+    // Try and find the URI directory, check that it has a qmldir file and that
+    // it has a file called *plugin.py.
+    QString py_plugin;
+    QString py_plugin_dir;
+
+    foreach (QString dir_name, import_path)
+    {
+        dir_name.append('/');
+        dir_name.append(uri);
+
+        QDir dir(dir_name);
+
+        if (!dir.exists() || !dir.exists("qmldir"))
+            continue;
+
+        QStringList candidates = dir.entryList(QDir::Files|QDir::Readable);
+
+        foreach (QString py_plugin_file, candidates)
+        {
+            QStringList parts = py_plugin_file.split('.');
+
+            if (parts.size() == 2 && parts.at(0).endsWith("plugin") && parts.at(1).startsWith("py"))
+            {
+                py_plugin = parts.at(0);
+                break;
+            }
+        }
+
+        if (!py_plugin.isEmpty())
+        {
+            py_plugin_dir = QDir::toNativeSeparators(dir.absolutePath());
+            break;
+        }
+    }
+
+    if (py_plugin.isEmpty())
+        return;
+
+#ifdef WITH_THREAD
+    PyGILState_STATE gil = PyGILState_Ensure();
+#endif
+
+    if (!addToSysPath(py_plugin_dir) || !callRegisterTypes(py_plugin, uri))
+        PyErr_Print();
+
+#ifdef WITH_THREAD
+    PyGILState_Release(gil);
+#endif
+}
+
+
+// Call the registerTypes() function of a plugin.
+bool PyQt5QmlPlugin::callRegisterTypes(const QString &py_plugin,
+        const char *uri)
+{
+    // Import the plugin.
+    PyObject *plugin_mod = PyImport_ImportModule(py_plugin.toLatin1().data());
+
+    if (!plugin_mod)
+        return false;
+
+    // Get QQmlExtensionPlugin.  We do this after the import of the plugin to
+    // allow it to fiddle with the context.
+    PyObject *extension_plugin = getModuleAttr("PyQt5.QtQml",
+            "QQmlExtensionPlugin");
+
+    if (!extension_plugin)
+    {
+        Py_DECREF(plugin_mod);
+        return false;
+    }
+
+    // Go through the module looking for a type that implements
+    // QQmlExtensionPlugin.
+    PyObject *mod_dict = PyModule_GetDict(plugin_mod);
+    PyObject *key, *value, *plugin_type = 0;
+    Py_ssize_t pos = 0;
+
+    while (PyDict_Next(mod_dict, &pos, &key, &value))
+        if (value != extension_plugin && PyType_Check(value) && PyType_IsSubtype((PyTypeObject *)value, (PyTypeObject *)extension_plugin))
+        {
+            plugin_type = value;
+            break;
+        }
+
+    Py_DECREF(extension_plugin);
+
+    if (!plugin_type)
+    {
+        PyErr_Format(PyExc_AttributeError,
+                "%s does not contain an implementation of QQmlExtensionPlugin",
+                py_plugin.toLatin1().constData());
+
+        Py_DECREF(plugin_mod);
+        return false;
+    }
+
+    // Create the plugin instance.
+    PyObject *plugin_obj = PyObject_CallObject(plugin_type, NULL);
+
+    Py_DECREF(plugin_mod);
+
+    if (!plugin_obj)
+        return false;
+
+    // Call registerTypes().
+    PyObject *res_obj = PyObject_CallMethod(plugin_obj,
+            const_cast<char *>("registerTypes"), const_cast<char *>("s"), uri);
+
+    if (res_obj != Py_None)
+    {
+        Py_DECREF(plugin_obj);
+
+        if (res_obj)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "unexpected result from registerTypes(): %S", res_obj);
+
+            Py_DECREF(res_obj);
+        }
+
+        return false;
+    }
+
+    Py_DECREF(res_obj);
+
+    py_plugin_obj = plugin_obj;
+
+    return true;
+}
+
+
+// Add a directory to sys.path.
+bool PyQt5QmlPlugin::addToSysPath(const QString &py_plugin_dir)
+{
+    PyObject *sys_path = getModuleAttr("sys", "path");
+
+    if (!sys_path)
+        return false;
+
+#if PY_VERSION_HEX >= 0x03030000
+    PyObject *plugin_dir_obj = PyUnicode_FromKindAndData(PyUnicode_2BYTE_KIND,
+            py_plugin_dir.constData(), py_plugin_dir.length());
+
+    if (!plugin_dir_obj)
+    {
+        Py_DECREF(sys_path);
+        return false;
+    }
+#elif PY_VERSION_HEX >= 0x03000000
+#if defined(Py_UNICODE_WIDE)
+    QVector<uint> ucs4 = py_plugin_dir.toUcs4();
+
+    PyObject *plugin_dir_obj = PyUnicode_FromUnicode(0, ucs4.size());
+
+    if (!plugin_dir_obj)
+    {
+        Py_DECREF(sys_path);
+        return false;
+    }
+
+    memcpy(PyUnicode_AS_UNICODE(plugin_dir_obj), ucs4.constData(),
+            ucs4.size() * sizeof (Py_UNICODE));
+#else
+    PyObject *plugin_dir_obj = PyUnicode_FromUnicode(0,
+            py_plugin_dir.length());
+
+    if (!plugin_dir_obj)
+    {
+        Py_DECREF(sys_path);
+        return false;
+    }
+
+    memcpy(PyUnicode_AS_UNICODE(plugin_dir_obj), py_plugin_dir.utf16(),
+            py_plugin_dir.length() * sizeof (Py_UNICODE));
+#endif
+#else
+    PyObject *plugin_dir_obj = PyString_FromString(
+            py_plugin_dir.toLatin1().constData());
+
+    if (!plugin_dir_obj)
+    {
+        Py_DECREF(sys_path);
+        return false;
+    }
+#endif
+
+    int rc = PyList_Append(sys_path, plugin_dir_obj);
+    Py_DECREF(plugin_dir_obj);
+    Py_DECREF(sys_path);
+
+    if (rc < 0)
+    {
+        return false;
+    }
+
+    return true;
+}
+
+
+// Return the named attribute object from the named module.
+PyObject *PyQt5QmlPlugin::getModuleAttr(const char *module, const char *attr)
+{
+    PyObject *mod = PyImport_ImportModule(module);
+
+    if (!mod)
+        return 0;
+
+    PyObject *obj = PyObject_GetAttrString(mod, attr);
+
+    Py_DECREF(mod);
+
+    return obj;
+}
+
+
+// Get the SIP API.
+void PyQt5QmlPlugin::getSipAPI()
+{
+#if defined(SIP_USE_PYCAPSULE)
+    sip = (const sipAPIDef *)PyCapsule_Import("sip._C_API", 0);
+#else
+    PyObject *c_api = getModuleAttr("sip", "_C_API");
+
+    if (c_api)
+    {
+        sip = (const sipAPIDef *)PyCObject_AsVoidPtr(c_api);
+        Py_DECREF(c_api);
+    }
+#endif
+
+    if (!sip)
+        PyErr_Print();
+}
diff --git a/qmlscene/pluginloader.h b/qmlscene/pluginloader.h
new file mode 100644
index 0000000..47d639c
--- /dev/null
+++ b/qmlscene/pluginloader.h
@@ -0,0 +1,57 @@
+/*
+ * This is the interface of the qmlscene plugin.
+ *
+ * Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+ * 
+ * This file is part of PyQt5.
+ * 
+ * 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 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.
+ * 
+ * If you do not wish to use this file under the terms of the GPL version 3.0
+ * then you may purchase a commercial license.  For more information contact
+ * info at riverbankcomputing.com.
+ * 
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+
+#ifndef _PLUGINLOADER_H
+#define _PLUGINLOADER_H
+
+
+#include <Python.h>
+#include <sip.h>
+
+#include <QObject>
+#include <QQmlExtensionPlugin>
+
+
+class PyQt5QmlPlugin : public QQmlExtensionPlugin
+{
+    Q_OBJECT
+    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
+
+public:
+    PyQt5QmlPlugin(QObject *parent = 0);
+    virtual ~PyQt5QmlPlugin();
+
+    void initializeEngine(QQmlEngine *engine, const char *uri);
+    void registerTypes(const char *uri);
+
+private:
+    void getSipAPI();
+    static bool addToSysPath(const QString &py_plugin_dir);
+    bool callRegisterTypes(const QString &py_plugin, const char *uri);
+    static PyObject *getModuleAttr(const char *module, const char *attr);
+
+    PyObject *py_plugin_obj;
+    const sipAPIDef *sip;
+};
+
+
+#endif
diff --git a/qmlscene/python.pro-in b/qmlscene/python.pro-in
new file mode 100644
index 0000000..f28df0d
--- /dev/null
+++ b/qmlscene/python.pro-in
@@ -0,0 +1,22 @@
+CONFIG      += plugin @QTCONFIG@ warn_on
+QT          += qml
+
+# Work around QTBUG-39300.
+CONFIG -= android_install
+
+TARGET      = pyqt5qmlplugin
+TEMPLATE    = lib
+
+INCLUDEPATH += @PYINCDIR@ @SIPINCDIR@
+LIBS        += @PYLINK@
+
+SOURCES     = pluginloader.cpp
+HEADERS     = pluginloader.h
+
+# Install.
+target.path = @QTPLUGINDIR@
+
+python.path = @QTPLUGINDIR@
+python.files = python
+
+INSTALLS    += target python
diff --git a/qpy/QtCore/qpycore_api.h b/qpy/QtCore/qpycore_api.h
new file mode 100644
index 0000000..69d4942
--- /dev/null
+++ b/qpy/QtCore/qpycore_api.h
@@ -0,0 +1,108 @@
+// This defines the API provided by this library.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_API_H
+#define _QPYCORE_API_H
+
+
+#include <QJsonValue>
+#include <QString>
+#include <QVariant>
+
+#include "qpycore_namespace.h"
+#include "qpycore_public_api.h"
+
+
+QT_BEGIN_NAMESPACE
+class QAbstractEventDispatcher;
+class QObject;
+QT_END_NAMESPACE
+
+
+// Support for pyqtSlot().
+PyObject *qpycore_pyqtslot(PyObject *args, PyObject *kwds);
+
+// Support for pyqtConfigure().
+PyObject *qpycore_pyqtconfigure(PyObject *self, PyObject *args,
+        PyObject *kwds);
+
+// Support for the QObject %FinalisationCode.
+int qpycore_qobject_finalisation(PyObject *self, QObject *qobj, PyObject *kwds,
+        PyObject **updated_kwds);
+
+// Support for converting between PyObject and QString.
+PyObject *qpycore_PyObject_FromQString(const QString &qstr);
+QString qpycore_PyObject_AsQString(PyObject *obj);
+
+// Support for converting between PyObject and QVariant.
+PyObject *qpycore_PyObject_FromQVariant(const QVariant &qvar);
+QVariant qpycore_PyObject_AsQVariant(PyObject *obj, int *is_err);
+
+// Support for Q_CLASSINFO(), Q_ENUMS() and Q_FLAGS().
+PyObject *qpycore_ClassInfo(const char *name, const char *value);
+PyObject *qpycore_Enums(PyObject *args);
+PyObject *qpycore_Flags(PyObject *args);
+
+// Support for creating QGenericArgument and QGenericReturnArgument instances.
+PyObject *qpycore_ArgumentFactory(PyObject *type, PyObject *data);
+PyObject *qpycore_ReturnFactory(PyObject *type);
+PyObject *qpycore_ReturnValue(PyObject *gra);
+
+// Support for QObject.__getattr__().
+PyObject *qpycore_qobject_getattr(const QObject *qobj, PyObject *py_qobj,
+        const char *name);
+
+// Support for QObject.staticMetaObject %GetCode.
+PyObject *qpycore_qobject_staticmetaobject(PyObject *type_obj);
+
+// Support for QMetaObject.connectSlotsByName().
+void qpycore_qmetaobject_connectslotsbyname(QObject *qobj,
+        PyObject *qobj_wrapper);
+
+// Support for pyqt[Set]PickleProtocol().
+extern PyObject *qpycore_pickle_protocol;
+
+// Support for qDebug() etc.
+int qpycore_current_context(const char **file, const char **function);
+
+// Support for QObject.disconnect().
+PyObject *qpycore_qobject_disconnect(const QObject *q_obj);
+
+// Support for QObject's garbage collector code.
+int qpycore_clearSlotProxies(const QObject *transmitter);
+int qpycore_visitSlotProxies(const QObject *transmitter, visitproc visit,
+        void *arg);
+
+// Support for QJsonValue.
+int qpycore_canConvertTo_QJsonValue(PyObject *py);
+int qpycore_convertTo_QJsonValue(PyObject *py, PyObject *transferObj,
+        QJsonValue **cpp, int *isErr);
+
+// Utilities.
+#if PY_MAJOR_VERSION >= 3
+void qpycore_Unicode_ConcatAndDel(PyObject **string, PyObject *newpart);
+#endif
+
+// Initialisation.
+void qpycore_init();
+void qpycore_post_init(PyObject *module_dict);
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_chimera.cpp b/qpy/QtCore/qpycore_chimera.cpp
new file mode 100644
index 0000000..e324731
--- /dev/null
+++ b/qpy/QtCore/qpycore_chimera.cpp
@@ -0,0 +1,1723 @@
+// This is the implementation of the Chimera class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QByteArray>
+#include <QMetaObject>
+#include <QMetaType>
+
+#include "qpycore_chimera.h"
+#include "qpycore_misc.h"
+#include "qpycore_pyqtpyobject.h"
+#include "qpycore_types.h"
+
+#include "sipAPIQtCore.h"
+
+
+// The registered int types.
+QList<PyObject *> Chimera::_registered_int_types;
+
+// The cache of previously parsed argument type lists.
+QHash<QByteArray, QList<const Chimera *> > Chimera::_previously_parsed;
+
+// The registered QVariant to PyObject convertors.
+Chimera::FromQVariantConvertors Chimera::registeredFromQVariantConvertors;
+
+// The registered PyObject to QVariant convertors.
+Chimera::ToQVariantConvertors Chimera::registeredToQVariantConvertors;
+
+// The registered PyObject to QVariant data convertors.
+Chimera::ToQVariantDataConvertors Chimera::registeredToQVariantDataConvertors;
+
+const int UnknownType = QMetaType::UnknownType;
+
+// Construct an invalid type.
+Chimera::Chimera()
+    : _type(0), _py_type(0), _metatype(UnknownType), _inexact(false),
+      _is_flag(false)
+{
+}
+
+
+// Construct a copy.
+Chimera::Chimera(const Chimera &other)
+{
+    _type = other._type;
+
+    _py_type = other._py_type;
+    Py_XINCREF((PyObject *)_py_type);
+    
+    _metatype = other._metatype;
+    _inexact = other._inexact;
+    _is_flag = other._is_flag;
+    _name = other._name;
+}
+
+
+// Destroy the type.
+Chimera::~Chimera()
+{
+    Py_XDECREF((PyObject *)_py_type);
+}
+
+
+// Register the type of an int type.
+void Chimera::registerIntType(PyObject *int_type)
+{
+    if (!_registered_int_types.contains(int_type))
+    {
+        Py_INCREF(int_type);
+        _registered_int_types.append(int_type);
+    }
+}
+
+
+// Parse an object as a type.
+const Chimera *Chimera::parse(PyObject *obj)
+{
+    Chimera *ct = new Chimera;
+    bool parse_ok;
+
+    if (PyType_Check(obj))
+    {
+        // Parse the type object.
+        parse_ok = ct->parse_py_type((PyTypeObject *)obj);
+    }
+    else
+    {
+        const char *cpp_type_name = sipString_AsASCIIString(&obj);
+
+        if (cpp_type_name)
+        {
+            // Always use normalised type names so that we have a consistent
+            // standard.
+            QByteArray norm_name = QMetaObject::normalizedType(cpp_type_name);
+            Py_DECREF(obj);
+
+            // Parse the type name.
+            parse_ok = ct->parse_cpp_type(norm_name);
+        }
+        else
+        {
+            parse_ok = false;
+        }
+    }
+
+    if (!parse_ok)
+    {
+        delete ct;
+        return 0;
+    }
+
+    return ct;
+}
+
+
+// Parse a C++ type name as a type.
+const Chimera *Chimera::parse(const QByteArray &name)
+{
+    Chimera *ct = new Chimera;
+
+    if (!ct->parse_cpp_type(name))
+    {
+        delete ct;
+        return 0;
+    }
+
+    return ct;
+}
+
+
+// Parse a meta-property as a type.
+const Chimera *Chimera::parse(const QMetaProperty &mprop)
+{
+    Chimera *ct = new Chimera;
+    const char *type_name = mprop.typeName();
+
+    ct->_type = sipFindType(type_name);
+    ct->_metatype = mprop.userType();
+    ct->_inexact = true;
+    ct->_is_flag = mprop.isFlagType();
+    ct->_name = type_name;
+
+    return ct;
+}
+
+
+// Parse a normalised C++ signature as a list of types.
+Chimera::Signature *Chimera::parse(const QByteArray &sig, const char *context)
+{
+    // Extract the argument list.
+    int start_idx = sig.indexOf('(');
+
+    if (start_idx < 0)
+        start_idx = 0;
+    else
+        ++start_idx;
+
+    int end_idx = sig.lastIndexOf(')');
+
+    int len;
+
+    if (end_idx < start_idx)
+        len = -1;
+    else
+        len = end_idx - start_idx;
+
+    // Parse each argument type.
+    Chimera::Signature *parsed_sig = new Chimera::Signature(sig, true);
+
+    if (len > 0)
+    {
+        QByteArray args_str = sig.mid(start_idx, len);
+
+        // Check we haven't already done it.
+        QList<const Chimera *> parsed_args = _previously_parsed.value(args_str);
+
+        if (parsed_args.isEmpty())
+        {
+            int i, arg_start, template_level;
+
+            i = arg_start = template_level = 0;
+
+            // Extract each argument allowing for commas in templates.
+            for (;;)
+            {
+                char ch = (i < args_str.size() ? args_str.at(i) : '\0');
+                QByteArray arg;
+
+                switch (ch)
+                {
+                case '<':
+                    ++template_level;
+                    break;
+
+                case '>':
+                    --template_level;
+                    break;
+
+                case '\0':
+                    arg = args_str.mid(arg_start, i - arg_start);
+                    break;
+
+                case ',':
+                    if (template_level == 0)
+                    {
+                        arg = args_str.mid(arg_start, i - arg_start);
+                        arg_start = i + 1;
+                    }
+
+                    break;
+                }
+
+                if (!arg.isEmpty())
+                {
+                    Chimera *ct = new Chimera;
+
+                    if (!ct->parse_cpp_type(arg))
+                    {
+                        delete ct;
+                        delete parsed_sig;
+                        qDeleteAll(parsed_args.constBegin(),
+                                parsed_args.constEnd());
+
+                        raiseParseException(arg.constData(), context);
+
+                        return 0;
+                    }
+
+                    parsed_args.append(ct);
+
+                    if (ch == '\0')
+                        break;
+                }
+
+                ++i;
+            }
+
+            // Only parse once.
+            _previously_parsed.insert(args_str, parsed_args);
+        }
+
+        parsed_sig->parsed_arguments = parsed_args;
+    }
+
+    return parsed_sig;
+}
+
+
+// Parses a C++ signature given as a Python tuple of types and an optional
+// name.  Return 0 if there was an error.
+Chimera::Signature *Chimera::parse(PyObject *types, const char *name,
+        const char *context)
+{
+    if (!name)
+        name = "";
+
+    Chimera::Signature *parsed_sig = new Chimera::Signature(name, false);
+
+    parsed_sig->signature.append('(');
+    parsed_sig->py_signature.append('[');
+
+    for (SIP_SSIZE_T i = 0; i < PyTuple_GET_SIZE(types); ++i)
+    {
+        PyObject *type = PyTuple_GET_ITEM(types, i);
+        const Chimera *parsed_type = parse(type);
+
+        if (!parsed_type)
+        {
+            delete parsed_sig;
+
+            raiseParseException(type, context);
+
+            return 0;
+        }
+
+        parsed_sig->parsed_arguments.append(parsed_type);
+
+        if (i > 0)
+        {
+            parsed_sig->signature.append(',');
+            parsed_sig->py_signature.append(", ");
+        }
+
+        parsed_sig->signature.append(parsed_type->name());
+
+        if (parsed_type->_py_type)
+            parsed_sig->py_signature.append(parsed_type->_py_type->tp_name);
+        else
+            parsed_sig->py_signature.append(parsed_type->name());
+    }
+
+    parsed_sig->signature.append(')');
+    parsed_sig->py_signature.append(']');
+
+    return parsed_sig;
+}
+
+
+// Raise an exception after parse() of a Python type has failed.
+void Chimera::raiseParseException(PyObject *type, const char *context)
+{
+    if (PyType_Check(type))
+    {
+        PyErr_Format(PyExc_TypeError,
+                "Python type '%s' is not supported as %s type",
+                ((PyTypeObject *)type)->tp_name, context);
+    }
+    else
+    {
+        const char *cpp_type_name = sipString_AsASCIIString(&type);
+
+        if (cpp_type_name)
+        {
+            raiseParseException(cpp_type_name, context);
+            Py_DECREF(type);
+        }
+    }
+}
+
+
+// Raise an exception after parse() of a C++ type has failed.
+void Chimera::raiseParseException(const char *type, const char *context)
+{
+    PyErr_Format(PyExc_TypeError, "C++ type '%s' is not supported as %s type",
+            type, context);
+}
+
+
+// Parse the given Python type object.
+bool Chimera::parse_py_type(PyTypeObject *type_obj)
+{
+    const sipTypeDef *td = sipTypeFromPyTypeObject(type_obj);
+
+    if (td)
+    {
+        if (sipTypeIsNamespace(td))
+            return false;
+
+        _type = td;
+        _name = sipTypeName(td);
+
+        if (sipTypeIsClass(td))
+            set_flag();
+
+        if (sipTypeIsEnum(td) || isFlag())
+        {
+            _metatype = QMetaType::Int;
+        }
+        else
+        {
+            // If there is no assignment helper then assume it is a
+            // pointer-type.
+            if (!get_assign_helper())
+                _name.append('*');
+
+            _metatype = QMetaType::type(_name.constData());
+
+            if (_metatype == 0)
+            {
+                // We need to handle QGraphicsItem differently, both because it
+                // has its own class hierarchy and because we don't want
+                // QGraphicsItemWidget to be seen as a QWidget or a QObject.
+                // Without this reimplementations of QGraphicsItem.itemChange()
+                // will have problems.
+
+                static const char *norm_QGraphicsItem = "QGraphicsItem*";
+
+                static int QGraphicsItem_metatype = -1;
+
+                if (QGraphicsItem_metatype < 0)
+                    QGraphicsItem_metatype = QMetaType::type(
+                            norm_QGraphicsItem);
+
+                static const sipTypeDef *sipType_QGraphicsItem = 0;
+
+                if (!sipType_QGraphicsItem)
+                    sipType_QGraphicsItem = sipFindType("QGraphicsItem");
+
+                if (QGraphicsItem_metatype >= 0 && sipType_QGraphicsItem)
+                {
+                    PyTypeObject *py_QGraphicsItem = sipTypeAsPyTypeObject(
+                            sipType_QGraphicsItem);
+
+                    if (PyType_IsSubtype(type_obj, py_QGraphicsItem))
+                    {
+                        _metatype = QGraphicsItem_metatype;
+                        _type = sipType_QGraphicsItem;
+                        _name = norm_QGraphicsItem;
+
+                        _py_type = py_QGraphicsItem;
+                        Py_INCREF((PyObject *)_py_type);
+
+                        return true;
+                    }
+                }
+            }
+
+            // If it is a user type then it must be a type that SIP knows
+            // about but was registered by Qt.
+            if (_metatype < QMetaType::User)
+            {
+                if (PyType_IsSubtype(type_obj, sipTypeAsPyTypeObject(sipType_QObject)))
+                {
+                    _metatype = QMetaType::QObjectStar;
+                }
+                else if (!sipIsExactWrappedType((sipWrapperType *)type_obj))
+                {
+                    // It must be a (non-QObject, non-QWidget) Python sub-class
+                    // so make sure it gets wrapped in a PyQt_PyObject.
+                    _type = 0;
+                    _metatype = PyQt_PyObject::metatype;
+                    _name.clear();
+                }
+            }
+        }
+    }
+    else if (_registered_int_types.contains((PyObject *)type_obj))
+    {
+        _metatype = QMetaType::Int;
+    }
+#if PY_MAJOR_VERSION >= 3
+    else if (type_obj == &PyUnicode_Type)
+    {
+        _type = sipType_QString;
+        _metatype = QMetaType::QString;
+    }
+#else
+    else if (type_obj == &PyString_Type || type_obj == &PyUnicode_Type)
+    {
+        // In this case we accept that the reverse conversion will result in an
+        // object of a different type (i.e. a QString rather than a Python
+        // string).
+        _type = sipType_QString;
+        _metatype = QMetaType::QString;
+    }
+#endif
+    else if (type_obj == &PyBool_Type)
+    {
+        _metatype = QMetaType::Bool;
+    }
+#if PY_MAJOR_VERSION < 3
+    else if (type_obj == &PyInt_Type)
+    {
+        // We choose to map to a C++ int, even though a Python int is
+        // potentially much larger, as it represents the most common usage in
+        // Qt.  However we will allow a larger type to be used if the context
+        // is right.
+        _metatype = QMetaType::Int;
+        _inexact = true;
+    }
+#endif
+    else if (type_obj == &PyLong_Type)
+    {
+        // We choose to map to a C++ int for the same reasons as above and to
+        // be consistent with Python3 where everything is a long object.  If
+        // this isn't appropriate the user can always use a string to specify
+        // the exact C++ type they want.
+        _metatype = QMetaType::Int;
+        _inexact = true;
+    }
+    else if (type_obj == &PyFloat_Type)
+    {
+        _metatype = QMetaType::Double;
+    }
+
+    // Fallback to using a PyQt_PyObject.
+    if (_metatype == UnknownType)
+        _metatype = PyQt_PyObject::metatype;
+
+    // If there is no name so far then use the meta-type name.
+    if (_name.isEmpty())
+        _name = QMetaType::typeName(_metatype);
+
+    _py_type = type_obj;
+    Py_INCREF((PyObject *)_py_type);
+
+    return true;
+}
+
+
+// Set the internal flag flag.
+void Chimera::set_flag()
+{
+    if (qpycore_is_pyqt_class(_type))
+        _is_flag = ((pyqt5ClassTypeDef *)_type)->flags & 0x01;
+}
+
+
+// Update a C++ type so that any typedefs are resolved.
+QByteArray Chimera::resolve_types(const QByteArray &type)
+{
+    // Split into a base type and a possible list of template arguments.
+    QByteArray resolved = type.simplified();
+
+    // Get the raw type, ie. without any "const", "&" or "*".
+    QByteArray raw_type;
+    int original_raw_start;
+
+    if (resolved.startsWith("const "))
+        original_raw_start = 6;
+    else
+        original_raw_start = 0;
+
+    raw_type = resolved.mid(original_raw_start);
+
+    while (raw_type.endsWith('&') || raw_type.endsWith('*') || raw_type.endsWith(' '))
+        raw_type.chop(1);
+
+    int original_raw_len = raw_type.size();
+
+    if (original_raw_len == 0)
+        return QByteArray();
+
+    // Get any template arguments.
+    QList<QByteArray> args;
+    int tstart = raw_type.indexOf('<');
+
+    if (tstart >= 0)
+    {
+        // Make sure the template arguments are terminated.
+        if (!raw_type.endsWith('>'))
+            return QByteArray();
+
+        // Split the template arguments taking nested templates into account.
+        int depth = 1, arg_start = tstart + 1;
+
+        for (int i = arg_start; i < raw_type.size(); ++i)
+        {
+            int arg_end = -1;
+            char ch = raw_type.at(i);
+
+            if (ch == '<')
+            {
+                ++depth;
+            }
+            else if (ch == '>')
+            {
+                --depth;
+
+                if (depth < 0)
+                    return QByteArray();
+
+                if (depth == 0)
+                    arg_end = i;
+            }
+            else if (ch == ',' && depth == 1)
+            {
+                arg_end = i;
+            }
+
+            if (arg_end >= 0)
+            {
+                QByteArray arg = resolve_types(raw_type.mid(arg_start, arg_end - arg_start));
+
+                if (arg.isEmpty())
+                    return QByteArray();
+
+                args.append(arg);
+
+                arg_start = arg_end + 1;
+            }
+        }
+
+        if (depth != 0)
+            return QByteArray();
+
+        // Remove the template arguments.
+        raw_type.truncate(tstart);
+    }
+
+    // Expand any typedef.
+    const char *base_type = sipResolveTypedef(raw_type.constData());
+
+    if (base_type)
+        raw_type = base_type;
+
+    // Add any (now resolved) template arguments.
+    if (args.count() > 0)
+    {
+        raw_type.append('<');
+
+        for (QList<QByteArray>::const_iterator it = args.begin();;)
+        {
+            raw_type.append(*it);
+
+            if (++it == args.end())
+                break;
+
+            raw_type.append(',');
+        }
+
+        if (raw_type.endsWith('>'))
+            raw_type.append(' ');
+
+        raw_type.append('>');
+    }
+
+    // Replace the original raw type with the resolved one.
+    resolved.replace(original_raw_start, original_raw_len, raw_type);
+
+    return resolved;
+}
+
+
+// Parse the given C++ type name.
+bool Chimera::parse_cpp_type(const QByteArray &type)
+{
+    _name = type;
+
+    // Resolve any types.
+    QByteArray resolved = resolve_types(type);
+
+    if (resolved.isEmpty())
+        return false;
+
+    // See if the type is known to Qt.
+    _metatype = QMetaType::type(resolved.constData());
+
+    // If not then use the PyQt_PyObject wrapper.
+    if (_metatype == UnknownType)
+        _metatype = PyQt_PyObject::metatype;
+
+    // See if the type (without a pointer) is known to SIP.
+    bool is_ptr = resolved.endsWith('*');
+
+    if (is_ptr)
+    {
+        resolved.chop(1);
+
+        if (resolved.endsWith('*'))
+            return false;
+    }
+
+    _type = sipFindType(resolved.constData());
+
+    if (!_type)
+    {
+        // This is the only fundamental pointer type recognised by Qt.
+        if (_metatype == QMetaType::VoidStar)
+            return true;
+
+        // This is 'int', 'bool', etc.
+        if (_metatype != PyQt_PyObject::metatype && !is_ptr)
+            return true;
+
+        if ((resolved == "char" || resolved == "const char") && is_ptr)
+        {
+            // This is a special value meaning a (hopefully) '\0' terminated
+            // string.
+            _metatype = -1;
+
+            return true;
+        }
+
+        // This is an explicit 'PyQt_PyObject'.
+        if (resolved == "PyQt_PyObject" && !is_ptr)
+            return true;
+
+        return false;
+    }
+
+    if (sipTypeIsNamespace(_type))
+        return false;
+
+    if (sipTypeIsClass(_type))
+    {
+        set_flag();
+
+        if (is_ptr)
+        {
+            PyTypeObject *type_obj = sipTypeAsPyTypeObject(_type);
+
+            if (PyType_IsSubtype(type_obj, sipTypeAsPyTypeObject(sipType_QObject)))
+            {
+                _metatype = QMetaType::QObjectStar;
+            }
+        }
+    }
+
+    // We don't support pointers to enums.
+    if (sipTypeIsEnum(_type) && is_ptr)
+        _type = 0;
+
+    if (sipTypeIsEnum(_type) || isFlag())
+        _metatype = QMetaType::Int;
+
+    return true;
+}
+
+
+// Convert a Python object to C++ at a given address.  This has a lot in common
+// with the method that converts to a QVariant.  However, unlike that method,
+// we have no control over the size of the destination storage and so must
+// convert exactly as requested.
+bool Chimera::fromPyObject(PyObject *py, void *cpp) const
+{
+    // Let any registered convertors have a go first.
+    for (int i = 0; i < registeredToQVariantDataConvertors.count(); ++i)
+    {
+        bool ok;
+
+        if (registeredToQVariantDataConvertors.at(i)(py, cpp, _metatype, &ok))
+            return ok;
+    }
+
+    int iserr = 0;
+
+    PyErr_Clear();
+
+    switch (_metatype)
+    {
+    case QMetaType::Bool:
+        *reinterpret_cast<bool *>(cpp) = PyLong_AsLong(py);
+        break;
+
+    case QMetaType::Int:
+        // Truncate it if necessary to fit into a C++ int.  This will
+        // automatically handle enums and flag types as Python knows how to
+        // convert them to ints.
+#if PY_MAJOR_VERSION >= 3
+        *reinterpret_cast<int *>(cpp) = PyLong_AsLong(py);
+#else
+        *reinterpret_cast<int *>(cpp) = PyInt_AsLong(py);
+#endif
+        break;
+
+    case QMetaType::UInt:
+        *reinterpret_cast<unsigned int *>(cpp) = sipLong_AsUnsignedLong(py);
+        break;
+
+    case QMetaType::Double:
+        *reinterpret_cast<double *>(cpp) = PyFloat_AsDouble(py);
+        break;
+
+    case QMetaType::VoidStar:
+        *reinterpret_cast<void **>(cpp) = sipConvertToVoidPtr(py);
+        break;
+
+    case QMetaType::Long:
+        *reinterpret_cast<long *>(cpp) = PyLong_AsLong(py);
+        break;
+
+    case QMetaType::LongLong:
+        *reinterpret_cast<qlonglong *>(cpp) = PyLong_AsLongLong(py);
+        break;
+
+    case QMetaType::Short:
+        *reinterpret_cast<short *>(cpp) = PyLong_AsLong(py);
+        break;
+
+    case QMetaType::Char:
+        if (SIPBytes_Check(py) && SIPBytes_GET_SIZE(py) == 1)
+            *reinterpret_cast<char *>(cpp) = *SIPBytes_AS_STRING(py);
+        else
+            iserr = 1;
+        break;
+
+    case QMetaType::ULong:
+        *reinterpret_cast<unsigned long *>(cpp) = sipLong_AsUnsignedLong(py);
+        break;
+
+    case QMetaType::ULongLong:
+        *reinterpret_cast<qulonglong *>(cpp) = static_cast<qulonglong>(PyLong_AsUnsignedLongLong(py));
+        break;
+
+    case QMetaType::UShort:
+        *reinterpret_cast<unsigned short *>(cpp) = sipLong_AsUnsignedLong(py);
+        break;
+
+    case QMetaType::UChar:
+        if (SIPBytes_Check(py) && SIPBytes_GET_SIZE(py) == 1)
+            *reinterpret_cast<unsigned char *>(cpp) = *SIPBytes_AS_STRING(py);
+        else
+            iserr = 1;
+        break;
+
+    case QMetaType::Float:
+        *reinterpret_cast<float *>(cpp) = PyFloat_AsDouble(py);
+        break;
+
+    case QMetaType::QObjectStar:
+        *reinterpret_cast<void **>(cpp) = sipForceConvertToType(py,
+                sipType_QObject, 0, SIP_NO_CONVERTORS, 0, &iserr);
+        break;
+
+    case QMetaType::QVariantList:
+        {
+            QVariantList ql;
+
+            if (to_QVariantList(py, ql))
+                *reinterpret_cast<QVariantList *>(cpp) = ql;
+            else
+                iserr = 1;
+
+            break;
+        }
+
+    case QMetaType::QVariantMap:
+        {
+            QVariantMap qm;
+
+            if (to_QVariantMap(py, qm))
+                *reinterpret_cast<QVariantMap *>(cpp) = qm;
+            else
+                iserr = 1;
+
+            break;
+        }
+
+    case QMetaType::QVariantHash:
+        {
+            QVariantHash qh;
+
+            if (to_QVariantHash(py, qh))
+                *reinterpret_cast<QVariantHash *>(cpp) = qh;
+            else
+                iserr = 1;
+
+            break;
+        }
+
+    case -1:
+        {
+            char **ptr = reinterpret_cast<char **>(cpp);
+
+            if (SIPBytes_Check(py))
+                *ptr = SIPBytes_AS_STRING(py);
+            else if (py == Py_None)
+                *ptr = 0;
+            else
+                iserr = 1;
+
+            break;
+        }
+
+    default:
+        if (_type)
+        {
+            if (_name.endsWith('*'))
+            {
+                // This must be a pointer-type.
+
+                *reinterpret_cast<void **>(cpp) = sipForceConvertToType(py,
+                        _type, 0, SIP_NO_CONVERTORS, 0, &iserr);
+            }
+            else
+            {
+                // This must be a value-type.
+
+                sipAssignFunc assign = get_assign_helper();
+
+                if (assign)
+                {
+                    int state;
+                    void *value_class;
+
+                    value_class = sipForceConvertToType(py, _type, 0,
+                            SIP_NOT_NONE, &state, &iserr);
+
+                    if (!iserr)
+                        assign(cpp, 0, value_class);
+
+                    sipReleaseType(value_class, _type, state);
+                }
+                else
+                {
+                    iserr = 1;
+                }
+            }
+        }
+        else
+        {
+            iserr = 1;
+        }
+    }
+
+    if (iserr || PyErr_Occurred())
+    {
+        PyErr_Format(PyExc_TypeError,
+                "unable to convert a Python '%s' object to a C++ '%s' instance",
+                Py_TYPE(py)->tp_name, _name.constData());
+
+        return false;
+    }
+
+    return true;
+}
+
+
+// Return the assignment helper for the type, if any.
+sipAssignFunc Chimera::get_assign_helper() const
+{
+    if (sipTypeIsClass(_type))
+        return ((sipClassTypeDef *)_type)->ctd_assign;
+
+    if (sipTypeIsMapped(_type))
+        return ((sipMappedTypeDef *)_type)->mtd_assign;
+
+    return 0;
+}
+
+
+// Convert a Python object to a QVariant.  Note: I think strict is now always
+// false.
+bool Chimera::fromPyObject(PyObject *py, QVariant *var, bool strict) const
+{
+    // Deal with the simple case of wrapping the Python object rather than
+    // converting it.
+    if (_type != sipType_QVariant && _metatype == PyQt_PyObject::metatype)
+    {
+        // If the type was specified by a Python type (as opposed to
+        // 'PyQt_PyObject') then check the object is an instance of it.
+        if (_py_type && !PyObject_TypeCheck(py, _py_type))
+            return false;
+
+        *var = keep_as_pyobject(py);
+        return true;
+    }
+
+    // Let any registered convertors have a go first.
+    for (int i = 0; i < registeredToQVariantConvertors.count(); ++i)
+    {
+        bool ok;
+
+        if (registeredToQVariantConvertors.at(i)(py, *var, &ok))
+            return ok;
+    }
+
+    int iserr = 0, value_class_state;
+    void *ptr_class, *value_class = 0;
+
+    // Temporary storage for different types.
+    union {
+        bool tmp_bool;
+        int tmp_int;
+        unsigned int tmp_unsigned_int;
+        double tmp_double;
+        void *tmp_void_ptr;
+        long tmp_long;
+        qlonglong tmp_qlonglong;
+        short tmp_short;
+        char tmp_char;
+        unsigned long tmp_unsigned_long;
+        qulonglong tmp_qulonglong;
+        unsigned short tmp_unsigned_short;
+        unsigned char tmp_unsigned_char;
+        float tmp_float;
+    } tmp_storage;
+
+    void *variant_data = &tmp_storage;
+
+    PyErr_Clear();
+
+    QVariant variant;
+    int metatype_used = _metatype;
+
+    switch (_metatype)
+    {
+    case QMetaType::Bool:
+        tmp_storage.tmp_bool = PyLong_AsLong(py);
+        break;
+
+    case QMetaType::Int:
+        if (!_inexact || isEnum() || isFlag())
+        {
+            // It must fit into a C++ int.
+#if PY_MAJOR_VERSION >= 3
+            tmp_storage.tmp_int = PyLong_AsLong(py);
+#else
+            tmp_storage.tmp_int = PyInt_AsLong(py);
+#endif
+        }
+        else
+        {
+            // Fit it into the smallest C++ type we can.
+
+            qlonglong qll = PyLong_AsLongLong(py);
+
+            if (PyErr_Occurred())
+            {
+                // Try again in case the value is unsigned and will fit with
+                // the extra bit.
+
+                PyErr_Clear();
+
+                qulonglong qull = static_cast<qulonglong>(PyLong_AsUnsignedLongLong(py));
+
+                if (PyErr_Occurred())
+                {
+                    // It won't fit into any C++ type so pass it as a Python
+                    // object.
+
+                    PyErr_Clear();
+
+                    *var = keep_as_pyobject(py);
+                    metatype_used = UnknownType;
+                }
+                else
+                {
+                    tmp_storage.tmp_qulonglong = qull;
+                    metatype_used = QMetaType::ULongLong;
+                }
+            }
+            else if ((qlonglong)(int)qll == qll)
+            {
+                // It fits in a C++ int.
+                tmp_storage.tmp_int = qll;
+            }
+            else if ((qulonglong)(unsigned int)qll == (qulonglong)qll)
+            {
+                // The extra bit is enough for it to fit.
+                tmp_storage.tmp_unsigned_int = qll;
+                metatype_used = QMetaType::UInt;
+            }
+            else
+            {
+                // This fits.
+                tmp_storage.tmp_qlonglong = qll;
+                metatype_used = QMetaType::LongLong;
+            }
+        }
+
+        break;
+
+    case QMetaType::UInt:
+        tmp_storage.tmp_unsigned_int = sipLong_AsUnsignedLong(py);
+        break;
+
+    case QMetaType::Double:
+        tmp_storage.tmp_double = PyFloat_AsDouble(py);
+        break;
+
+    case QMetaType::VoidStar:
+        tmp_storage.tmp_void_ptr = sipConvertToVoidPtr(py);
+        break;
+
+    case QMetaType::Long:
+        tmp_storage.tmp_long = PyLong_AsLong(py);
+        break;
+
+    case QMetaType::LongLong:
+        tmp_storage.tmp_qlonglong = PyLong_AsLongLong(py);
+        break;
+
+    case QMetaType::Short:
+        tmp_storage.tmp_short = PyLong_AsLong(py);
+        break;
+
+    case QMetaType::Char:
+        if (SIPBytes_Check(py) && SIPBytes_GET_SIZE(py) == 1)
+            tmp_storage.tmp_char = *SIPBytes_AS_STRING(py);
+        else
+            iserr = 1;
+        break;
+
+    case QMetaType::ULong:
+        tmp_storage.tmp_unsigned_long = sipLong_AsUnsignedLong(py);
+        break;
+
+    case QMetaType::ULongLong:
+        tmp_storage.tmp_qulonglong = static_cast<qulonglong>(PyLong_AsUnsignedLongLong(py));
+        break;
+
+    case QMetaType::UShort:
+        tmp_storage.tmp_unsigned_short = sipLong_AsUnsignedLong(py);
+        break;
+
+    case QMetaType::UChar:
+        if (SIPBytes_Check(py) && SIPBytes_GET_SIZE(py) == 1)
+            tmp_storage.tmp_unsigned_char = *SIPBytes_AS_STRING(py);
+        else
+            iserr = 1;
+        break;
+
+    case QMetaType::Float:
+        tmp_storage.tmp_float = PyFloat_AsDouble(py);
+        break;
+
+    case QMetaType::QObjectStar:
+        tmp_storage.tmp_void_ptr = sipForceConvertToType(py, sipType_QObject,
+                0, SIP_NO_CONVERTORS, 0, &iserr);
+        break;
+
+    case QMetaType::QVariantList:
+        {
+            QVariantList ql;
+
+            if (to_QVariantList(py, ql))
+            {
+                *var = QVariant(ql);
+                metatype_used = UnknownType;
+            }
+            else
+            {
+                iserr = 1;
+            }
+
+            break;
+        }
+
+    case QMetaType::QVariantMap:
+        {
+            QVariantMap qm;
+
+            if (to_QVariantMap(py, qm))
+            {
+                *var = QVariant(qm);
+                metatype_used = UnknownType;
+            }
+            else if (strict)
+            {
+                iserr = 1;
+            }
+            else
+            {
+                // Assume the failure is because the key was the wrong type.
+                PyErr_Clear();
+
+                *var = keep_as_pyobject(py);
+                metatype_used = UnknownType;
+            }
+
+            break;
+        }
+
+    case QMetaType::QVariantHash:
+        {
+            QVariantHash qh;
+
+            if (to_QVariantHash(py, qh))
+            {
+                *var = QVariant(qh);
+                metatype_used = UnknownType;
+            }
+            else
+            {
+                iserr = 1;
+            }
+
+            break;
+        }
+
+    case -1:
+        metatype_used = QMetaType::VoidStar;
+
+        if (SIPBytes_Check(py))
+            tmp_storage.tmp_void_ptr = SIPBytes_AS_STRING(py);
+        else if (py == Py_None)
+            tmp_storage.tmp_void_ptr = 0;
+        else
+            iserr = 1;
+
+        break;
+
+    default:
+        if (_type)
+        {
+            if (_name.endsWith('*'))
+            {
+                ptr_class = sipForceConvertToType(py, _type, 0,
+                        SIP_NO_CONVERTORS, 0, &iserr);
+
+                variant_data = &ptr_class;
+            }
+            else
+            {
+                value_class = sipForceConvertToType(py, _type, 0,
+                    SIP_NOT_NONE, &value_class_state, &iserr);
+
+                variant_data = value_class;
+            }
+        }
+        else
+        {
+            // This is a class we don't recognise.
+            iserr = 1;
+        }
+    }
+
+    if (iserr || PyErr_Occurred())
+    {
+        PyErr_Format(PyExc_TypeError,
+                "unable to convert a Python '%s' object to a C++ '%s' instance",
+                Py_TYPE(py)->tp_name, _name.constData());
+
+        iserr = 1;
+    }
+    else if (_type == sipType_QVariant)
+    {
+        *var = QVariant(*reinterpret_cast<QVariant *>(variant_data));
+    }
+    else if (metatype_used != UnknownType)
+    {
+        *var = QVariant(metatype_used, variant_data);
+    }
+
+    // Release any temporary value-class instance now that QVariant will have
+    // made a copy.
+    if (value_class)
+        sipReleaseType(value_class, _type, value_class_state);
+
+    return (iserr == 0);
+}
+
+
+// Convert a Python object to a QVariant based on the type of the object.
+QVariant Chimera::fromAnyPyObject(PyObject *py, int *is_err)
+{
+    QVariant variant;
+
+    if (py != Py_None)
+    {
+        Chimera ct;
+
+        if (ct.parse_py_type(Py_TYPE(py)))
+        {
+            // If the type is a list or dict then try and convert it to a
+            // QVariantList or QVariantMap respectively if possible.
+            if (Py_TYPE(py) == &PyList_Type)
+                ct._metatype = QMetaType::QVariantList;
+            else if (Py_TYPE(py) == &PyDict_Type)
+                ct._metatype = QMetaType::QVariantMap;
+
+            // The conversion is non-strict in case the type was a dict and we
+            // can't convert it to a QVariantMap.
+            if (!ct.fromPyObject(py, &variant, false))
+            {
+                *is_err = 1;
+            }
+        }
+        else
+        {
+            *is_err = 1;
+        }
+    }
+
+    return variant;
+}
+
+
+// Convert a QVariant to Python.
+PyObject *Chimera::toPyObject(const QVariant &var) const
+{
+    if (_type != sipType_QVariant)
+    {
+        // A sanity check.
+        if (_metatype != var.userType())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "unable to convert a QVariant of type %d to a QMetaType of type %d",
+                    var.userType(), _metatype);
+
+            return 0;
+        }
+
+        // Deal with the simple case of unwrapping a Python object rather than
+        // converting it.
+        if (_type != sipType_QVariant && _metatype == PyQt_PyObject::metatype)
+        {
+            PyQt_PyObject pyobj_wrapper = var.value<PyQt_PyObject>();
+
+            if (!pyobj_wrapper.pyobject)
+            {
+                PyErr_SetString(PyExc_TypeError,
+                        "unable to convert a QVariant back to a Python object");
+
+                return 0;
+            }
+
+            Py_INCREF(pyobj_wrapper.pyobject);
+
+            return pyobj_wrapper.pyobject;
+        }
+    }
+
+    // Let any registered convertors have a go first.
+    for (int i = 0; i < registeredFromQVariantConvertors.count(); ++i)
+    {
+        PyObject *py;
+
+        if (registeredFromQVariantConvertors.at(i)(var, &py))
+            return py;
+    }
+
+    return toPyObject(const_cast<void *>(var.data()));
+}
+
+
+// Convert a C++ object at an arbitary address to Python.
+PyObject *Chimera::toPyObject(void *cpp) const
+{
+    if (_metatype == PyQt_PyObject::metatype)
+    {
+        if (_type)
+        {
+            // SIP knows the type (therefore it isn't really wrapped in a
+            // PyQt_PyObject) but it's not registered with Qt.
+            if (_name.endsWith('*'))
+                cpp = *reinterpret_cast<void **>(cpp);
+
+            return sipConvertFromType(cpp, _type, 0);
+        }
+        else
+        {
+            // Otherwise unwrap the Python object.
+            PyQt_PyObject *pyobj_wrapper = reinterpret_cast<PyQt_PyObject *>(cpp);
+
+            if (!pyobj_wrapper->pyobject)
+            {
+                PyErr_SetString(PyExc_TypeError,
+                        "unable to convert a QVariant back to a Python object");
+
+                return 0;
+            }
+
+            Py_INCREF(pyobj_wrapper->pyobject);
+
+            return pyobj_wrapper->pyobject;
+        }
+    }
+
+    PyObject *py = 0;
+
+    switch (_metatype)
+    {
+    case QMetaType::Bool:
+        py = PyBool_FromLong(*reinterpret_cast<bool *>(cpp));
+        break;
+
+    case QMetaType::Int:
+        if (isFlag())
+        {
+            py = sipConvertFromType(cpp, _type, 0);
+        }
+        else if (isEnum())
+        {
+            py = sipConvertFromEnum(*reinterpret_cast<int *>(cpp), _type);
+        }
+        else
+        {
+            py = SIPLong_FromLong(*reinterpret_cast<int *>(cpp));
+        }
+
+        break;
+
+    case QMetaType::UInt:
+        {
+            long ui = *reinterpret_cast<unsigned int *>(cpp);
+
+            if (ui < 0)
+                py = PyLong_FromUnsignedLong((unsigned long)ui);
+            else
+                py = SIPLong_FromLong(ui);
+
+            break;
+        }
+
+    case QMetaType::Double:
+        py = PyFloat_FromDouble(*reinterpret_cast<double *>(cpp));
+        break;
+
+    case QMetaType::VoidStar:
+        py = sipConvertFromVoidPtr(*reinterpret_cast<void **>(cpp));
+        break;
+
+    case QMetaType::Long:
+        py = SIPLong_FromLong(*reinterpret_cast<long *>(cpp));
+        break;
+
+    case QMetaType::LongLong:
+        py = PyLong_FromLongLong(*reinterpret_cast<qlonglong *>(cpp));
+        break;
+
+    case QMetaType::Short:
+        py = SIPLong_FromLong(*reinterpret_cast<short *>(cpp));
+        break;
+
+    case QMetaType::Char:
+    case QMetaType::UChar:
+        py = SIPBytes_FromStringAndSize(reinterpret_cast<char *>(cpp), 1);
+        break;
+
+    case QMetaType::ULong:
+        py = PyLong_FromUnsignedLong(*reinterpret_cast<unsigned long *>(cpp));
+        break;
+
+    case QMetaType::ULongLong:
+        py = PyLong_FromUnsignedLongLong(*reinterpret_cast<qulonglong *>(cpp));
+        break;
+
+    case QMetaType::UShort:
+        py = SIPLong_FromLong(*reinterpret_cast<unsigned short *>(cpp));
+        break;
+
+    case QMetaType::Float:
+        py = PyFloat_FromDouble(*reinterpret_cast<float *>(cpp));
+        break;
+
+    case QMetaType::QObjectStar:
+        py = sipConvertFromType(*reinterpret_cast<void **>(cpp),
+                sipType_QObject, 0);
+        break;
+
+    case QMetaType::QVariantList:
+        {
+            QVariantList *ql = reinterpret_cast<QVariantList *>(cpp);
+
+            py = PyList_New(ql->size());
+
+            if (py)
+            {
+                for (int i = 0; i < ql->size(); ++i)
+                {
+                    PyObject *val_obj = toAnyPyObject(ql->at(i));
+
+                    if (!val_obj)
+                    {
+                        Py_DECREF(py);
+                        py = 0;
+
+                        break;
+                    }
+
+                    PyList_SET_ITEM(py, i, val_obj);
+                }
+            }
+
+            break;
+        }
+
+    case QMetaType::QVariantMap:
+        {
+            py = PyDict_New();
+
+            if (py)
+            {
+                QVariantMap *qm = reinterpret_cast<QVariantMap *>(cpp);
+
+                for (QVariantMap::const_iterator it = qm->constBegin(); it != qm->constEnd(); ++it)
+                    if (!add_variant_to_dict(py, it.key(), it.value()))
+                    {
+                        Py_DECREF(py);
+                        py = 0;
+
+                        break;
+                    }
+            }
+
+            break;
+        }
+
+    case QMetaType::QVariantHash:
+        {
+            py = PyDict_New();
+
+            if (py)
+            {
+                QVariantHash *qh = reinterpret_cast<QVariantHash *>(cpp);
+
+                for (QVariantHash::const_iterator it = qh->constBegin(); it != qh->constEnd(); ++it)
+                    if (!add_variant_to_dict(py, it.key(), it.value()))
+                    {
+                        Py_DECREF(py);
+                        py = 0;
+
+                        break;
+                    }
+            }
+
+            break;
+        }
+
+    case -1:
+        {
+            char *s = *reinterpret_cast<char **>(cpp);
+
+            if (s)
+            {
+                py = SIPBytes_FromString(s);
+            }
+            else
+            {
+                Py_INCREF(Py_None);
+                py = Py_None;
+            }
+
+            break;
+        }
+
+    default:
+        if (_type)
+        {
+            if (_name.endsWith('*'))
+            {
+                py = sipConvertFromType(*reinterpret_cast<void **>(cpp),
+                        _type, 0);
+            }
+            else
+            {
+                // Make a copy as it is a value type.
+                void *copy = QMetaType::create(_metatype, cpp);
+
+                py = sipConvertFromNewType(copy, _type, 0);
+
+                if (!py)
+                    QMetaType::destroy(_metatype, copy);
+            }
+        }
+    }
+
+    if (!py)
+        PyErr_Format(PyExc_TypeError,
+                "unable to convert a C++ '%s' instance to a Python object",
+                _name.constData());
+
+    return py;
+}
+
+
+// Add a QVariant to a Python dict with a QString key.
+bool Chimera::add_variant_to_dict(PyObject *dict, const QString &key_ref,
+        const QVariant &val_ref)
+{
+    QString *key = new QString(key_ref);
+    PyObject *key_obj = sipConvertFromNewType(key, sipType_QString, 0);
+
+    PyObject *val_obj = toAnyPyObject(val_ref);
+
+    if (!key_obj || !val_obj || PyDict_SetItem(dict, key_obj, val_obj) < 0)
+    {
+        if (key_obj)
+            Py_DECREF(key_obj);
+        else
+            delete key;
+
+        Py_XDECREF(val_obj);
+
+        return false;
+    }
+
+    Py_DECREF(key_obj);
+    Py_DECREF(val_obj);
+
+    return true;
+}
+
+
+// Convert a QVariant to a Python object based on the type of the object.
+PyObject *Chimera::toAnyPyObject(const QVariant &var)
+{
+    if (!var.isValid())
+    {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    const char *type_name = var.typeName();
+    const sipTypeDef *td = sipFindType(type_name);
+
+    Chimera *ct = new Chimera;
+
+    ct->_type = td;
+    ct->_name = type_name;
+    ct->_metatype = var.userType();
+
+    if (td && sipTypeIsClass(td))
+        ct->set_flag();
+
+    PyObject *py = ct->toPyObject(var);
+    delete ct;
+
+    return py;
+}
+
+
+// Wrap a Python object in a QVariant without any conversion.
+QVariant Chimera::keep_as_pyobject(PyObject *py)
+{
+    PyQt_PyObject pyobj_wrapper(py);
+
+    return QVariant(PyQt_PyObject::metatype, &pyobj_wrapper);
+}
+
+
+// Convert a Python list object to a QVariantList and return true if there was
+// no error.
+bool Chimera::to_QVariantList(PyObject *py, QVariantList &cpp) const
+{
+    Q_ASSERT(PyList_CheckExact(py));
+
+    for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(py); ++i)
+    {
+        PyObject *val_obj = PyList_GET_ITEM(py, i);
+
+        if (!val_obj)
+            return false;
+
+        int val_state, iserr = 0;
+
+        QVariant *val = reinterpret_cast<QVariant *>(sipForceConvertToType(
+                val_obj, sipType_QVariant, 0, SIP_NOT_NONE, &val_state,
+                &iserr));
+
+        if (iserr)
+            return false;
+
+        cpp.append(*val);
+
+        sipReleaseType(val, sipType_QVariant, val_state);
+    }
+
+    return true;
+}
+
+
+// Convert a Python object to a QVariantMap and return true if there was no
+// error.
+bool Chimera::to_QVariantMap(PyObject *py, QVariantMap &cpp) const
+{
+    Q_ASSERT(PyDict_CheckExact(py));
+
+    PyObject *key_obj, *val_obj;
+    SIP_SSIZE_T i;
+
+    i = 0;
+    while (PyDict_Next(py, &i, &key_obj, &val_obj))
+    {
+        int key_state, val_state, iserr = 0;
+
+        QString *key = reinterpret_cast<QString *>(sipForceConvertToType(
+                key_obj, sipType_QString, NULL, SIP_NOT_NONE, &key_state,
+                &iserr));
+
+        QVariant *val = reinterpret_cast<QVariant *>(sipForceConvertToType(
+                val_obj, sipType_QVariant, NULL, SIP_NOT_NONE, &val_state,
+                &iserr));
+
+        if (iserr)
+            return false;
+
+        cpp.insert(*key, *val);
+
+        sipReleaseType(key, sipType_QString, key_state);
+        sipReleaseType(val, sipType_QVariant, val_state);
+    }
+
+    return true;
+}
+
+
+// Convert a Python object to a QVariantHash and return true if there was no
+// error.
+bool Chimera::to_QVariantHash(PyObject *py, QVariantHash &cpp) const
+{
+    Q_ASSERT(PyDict_CheckExact(py));
+
+    PyObject *key_obj, *val_obj;
+    SIP_SSIZE_T i;
+
+    i = 0;
+    while (PyDict_Next(py, &i, &key_obj, &val_obj))
+    {
+        int key_state, val_state, iserr = 0;
+
+        QString *key = reinterpret_cast<QString *>(sipForceConvertToType(
+                key_obj, sipType_QString, NULL, SIP_NOT_NONE, &key_state,
+                &iserr));
+
+        QVariant *val = reinterpret_cast<QVariant *>(sipForceConvertToType(
+                val_obj, sipType_QVariant, NULL, SIP_NOT_NONE, &val_state,
+                &iserr));
+
+        if (iserr)
+            return false;
+
+        cpp.insert(*key, *val);
+
+        sipReleaseType(key, sipType_QString, key_state);
+        sipReleaseType(val, sipType_QVariant, val_state);
+    }
+
+    return true;
+}
+
+
+// Convert a Python object to C++, allocating storage as necessary.
+Chimera::Storage *Chimera::fromPyObjectToStorage(PyObject *py) const
+{
+    Chimera::Storage *st = new Chimera::Storage(this, py);
+
+    if (!st->isValid())
+    {
+        delete st;
+        st = 0;
+    }
+
+    return st;
+}
+
+
+// Create the storage for a type.
+Chimera::Storage *Chimera::storageFactory() const
+{
+    return new Chimera::Storage(this);
+}
diff --git a/qpy/QtCore/qpycore_chimera.h b/qpy/QtCore/qpycore_chimera.h
new file mode 100644
index 0000000..d6278b4
--- /dev/null
+++ b/qpy/QtCore/qpycore_chimera.h
@@ -0,0 +1,281 @@
+// This is the interface of the Chimera and related classes.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_CHIMERA_H
+#define _QPYCORE_CHIMERA_H
+
+
+#include <Python.h>
+
+#include <QByteArray>
+#include <QHash>
+#include <QList>
+#include <QMetaProperty>
+#include <QVariant>
+
+#include "sipAPIQtCore.h"
+
+
+// This describes a type that can be understood by Python and C++ (specifically
+// Qt's meta-type system).  The implementation assumes that the GIL is held.
+class Chimera
+{
+public:
+    // Construct a copy.
+    Chimera(const Chimera &other);
+
+    // Destroy the type.
+    ~Chimera();
+
+    // Parses a Python object as a type.  Return 0 if there was an error.
+    static const Chimera *parse(PyObject *obj);
+
+    // Parses a Qt meta-property as a type.  Return 0 if there was an error.
+    static const Chimera *parse(const QMetaProperty &mprop);
+
+    // Parses a C++ type name as a type.  Return 0 if there was an error.
+    static const Chimera *parse(const QByteArray &name);
+
+    // The registered QVariant to PyObject convertors.
+    typedef bool (*FromQVariantConvertorFn)(const QVariant &, PyObject **);
+    typedef QList<FromQVariantConvertorFn> FromQVariantConvertors;
+    static FromQVariantConvertors registeredFromQVariantConvertors;
+
+    // Register a function for converting a Python object to a QVariant.
+    typedef bool (*ToQVariantConvertorFn)(PyObject *, QVariant &, bool *);
+    typedef QList<ToQVariantConvertorFn> ToQVariantConvertors;
+    static ToQVariantConvertors registeredToQVariantConvertors;
+
+    // Register a function for converting a Python object to QVariant data.
+    typedef bool (*ToQVariantDataConvertorFn)(PyObject *, void *, int, bool *);
+    typedef QList<ToQVariantDataConvertorFn> ToQVariantDataConvertors;
+    static ToQVariantDataConvertors registeredToQVariantDataConvertors;
+
+    class Signature
+    {
+    public:
+        // Destroy the signature and any result type objects.
+        ~Signature();
+
+        // The list of parsed argument types.
+        QList<const Chimera *> parsed_arguments;
+
+        // The optional parsed result type.
+        const Chimera *result;
+
+        // The original normalised signature (possibly including a method name
+        // but excluding a return type).
+        QByteArray signature;
+
+        // The signature as declared by the user for use in exceptions.
+        QByteArray py_signature;
+
+        // The revision of a slot.  Putting this here is an awful hack.
+        int revision;
+
+        // Return the parsed signature wrapped in a Python object.  Ownership
+        // of the signature is passed to the Python object.  Return 0 if there
+        // was an error.
+        static PyObject *toPyObject(Signature *parsed_signature);
+
+        // Return the parsed signature extracted from a Python object.
+        static Signature *fromPyObject(PyObject *py);
+
+        // Return the name from the signature.
+        QByteArray name() const {return name(signature);}
+
+        // Return the name from a signature.
+        static QByteArray name(const QByteArray &signature);
+
+        // Return the arguments from the signature.
+        QByteArray arguments() const {return arguments(signature);}
+
+        // Return the arguments from a signature.
+        static QByteArray arguments(const QByteArray &signature);
+
+    private:
+        friend class Chimera;
+
+        // Set if the parsed arguments are cached.
+        bool _cached;
+
+        Signature(const QByteArray &sig, bool cached)
+            : result(0), signature(sig), py_signature(sig), _cached(cached) {}
+
+        Signature(const Signature &);
+        Signature &operator=(const Signature &);
+    };
+
+    // Parses a normalised C++ signature.  Return 0 if there was an error.
+    static Signature *parse(const QByteArray &sig, const char *context);
+
+    // Parses a C++ signature given as a Python tuple of types and an optional
+    // name.  Return 0 if there was an error.
+    static Signature *parse(PyObject *types, const char *name,
+            const char *context);
+
+    // Raise an exception after parse() has failed.
+    static void raiseParseException(PyObject *type, const char *context);
+
+    class Storage
+    {
+    public:
+        // Destroy the type and any temporary data.
+        ~Storage();
+
+        // Return the parsed type.
+        const Chimera *type() const {return _parsed_type;}
+
+        // Return the address of the stored value.
+        void *address();
+
+        // Convert the stored value to a Python object.
+        PyObject *toPyObject() const;
+
+    private:
+        friend class Chimera;
+
+        // The parsed type.
+        const Chimera *_parsed_type;
+
+        // The storage for fundamental and value types.
+        QVariant _value_storage;
+
+        // The storage for pointer types.
+        void *_ptr_storage;
+
+        // The state of any temporary stored data.
+        int _tmp_state;
+
+        // Set if the value is valid.
+        bool _valid;
+
+        Storage(const Chimera *ct);
+        Storage(const Chimera *ct, PyObject *py);
+
+        // Return true if the value is valid.
+        bool isValid() const {return _valid;}
+
+        // Return true is the value is a pointer type.
+        bool isPointerType() const;
+
+        Storage(const Storage &);
+        Storage &operator=(const Storage &);
+    };
+
+    // Convert a Python object to C++, allocating storage as necessary.  Return
+    // 0 if there was an error.
+    Storage *fromPyObjectToStorage(PyObject *py) const;
+
+    // Create a storage instance for this type.
+    Storage *storageFactory() const;
+
+    // Convert a Python object to C++ at a given address.  Return false if
+    // there was an error.
+    bool fromPyObject(PyObject *py, void *cpp) const;
+
+    // Convert a Python object to a QVariant.  Return false if there was an
+    // error.
+    bool fromPyObject(PyObject *py, QVariant *var, bool strict = true) const;
+
+    // Convert a Python object to a QVariant based on the type of the object.
+    static QVariant fromAnyPyObject(PyObject *py, int *is_err);
+
+    // Convert a QVariant to a Python object.
+    PyObject *toPyObject(const QVariant &var) const;
+
+    // Convert a C++ object at an arbitary address to a Python object.
+    PyObject *toPyObject(void *cpp) const;
+
+    // Convert a QVariant to a Python object based on the type of the object.
+    static PyObject *toAnyPyObject(const QVariant &var);
+
+    // Returns the Qt meta-type id.  It will be QMetaType::UnknownType if the
+    // type isn't known to Qt's meta-type system.
+    int metatype() const {return _metatype;}
+
+    // Returns a borrowed reference to the Python type object that was used to
+    // define the type (if any).
+    PyObject *py_type() const {return (PyObject *)_py_type;}
+
+    // Returns the C++ name of the type.
+    const QByteArray &name() const {return _name;}
+
+    // Returns true if the type is an enum.
+    bool isEnum() const {return (_type && sipTypeIsEnum(_type));}
+
+    // Returns true if the type is a flag.
+    bool isFlag() const {return _is_flag;}
+
+    // Returns the SIP generated type structure.
+    const sipTypeDef *typeDef() const {return _type;}
+
+    // Register a type as an int type.
+    static void registerIntType(PyObject *int_type);
+
+private:
+    // The generated type structure.  This may be 0 if the type is known by Qt
+    // but hasn't been wrapped.
+    const sipTypeDef *_type;
+
+    // The Python type object if a Python type (rather than a C++ type string)
+    // was given.
+    PyTypeObject *_py_type;
+
+    // The Qt meta-type.  This will always be valid but may refer to the
+    // PyObject wrapper if the underlying type isn't known to Qt.
+    int _metatype;
+
+    // Set if the meta-type needn't be exact.
+    bool _inexact;
+
+    // Set if the the type is derived from QFlags.
+    bool _is_flag;
+
+    // The C++ name of the type.
+    QByteArray _name;
+
+    // The registered int types.
+    static QList<PyObject *> _registered_int_types;
+
+    // The cache of previously parsed argument type lists.
+    static QHash<QByteArray, QList<const Chimera *> > _previously_parsed;
+
+    Chimera();
+
+    bool parse_cpp_type(const QByteArray &type);
+    bool parse_py_type(PyTypeObject *type_obj);
+    sipAssignFunc get_assign_helper() const;
+    void set_flag();
+    bool to_QVariantList(PyObject *py, QVariantList &cpp) const;
+    bool to_QVariantMap(PyObject *py, QVariantMap &cpp) const;
+    bool to_QVariantHash(PyObject *py, QVariantHash &cpp) const;
+    static bool add_variant_to_dict(PyObject *dict, const QString &key_ref,
+            const QVariant &val_ref);
+    static void raiseParseException(const char *type, const char *context);
+    static QVariant keep_as_pyobject(PyObject *py);
+    static int extract_raw_type(const QByteArray &type, QByteArray &raw_type);
+    static QByteArray resolve_types(const QByteArray &type);
+
+    Chimera &operator=(const Chimera &);
+};
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_chimera_signature.cpp b/qpy/QtCore/qpycore_chimera_signature.cpp
new file mode 100644
index 0000000..e457133
--- /dev/null
+++ b/qpy/QtCore/qpycore_chimera_signature.cpp
@@ -0,0 +1,113 @@
+// This is the implementation of the Chimera::Signature class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpycore_chimera.h"
+
+
+// Forward declarations.
+#if defined(SIP_USE_PYCAPSULE)
+extern "C" {static void Signature_delete(PyObject *cap);}
+#else
+extern "C" {static void Signature_delete(void *sig);}
+#endif
+
+
+// Destroy the signature and any type objects.
+Chimera::Signature::~Signature()
+{
+    if (!_cached)
+        qDeleteAll(parsed_arguments.constBegin(), parsed_arguments.constEnd());
+
+    if (result)
+        delete result;
+}
+
+
+// Return the parsed signature wrapped in a Python object.
+PyObject *Chimera::Signature::toPyObject(Chimera::Signature *parsed_signature)
+{
+#if defined(SIP_USE_PYCAPSULE)
+    PyObject *py = PyCapsule_New(parsed_signature, NULL, Signature_delete);
+#else
+    PyObject *py = PyCObject_FromVoidPtr(parsed_signature, Signature_delete);
+#endif
+
+    if (!py)
+        delete parsed_signature;
+
+    return py;
+}
+
+
+// Return the parsed signature extracted from a Python object.
+Chimera::Signature *Chimera::Signature::fromPyObject(PyObject *py)
+{
+#if defined(SIP_USE_PYCAPSULE)
+    return reinterpret_cast<Chimera::Signature *>(PyCapsule_GetPointer(py, NULL));
+#else
+    return reinterpret_cast<Chimera::Signature *>(PyCObject_AsVoidPtr(py));
+#endif
+}
+
+
+// Return the name from a signature.
+QByteArray Chimera::Signature::name(const QByteArray &signature)
+{
+    QByteArray nm = signature;
+    int idx = signature.indexOf('(');
+
+    if (idx >= 0)
+        nm.truncate(idx);
+
+    return nm;
+}
+
+
+// Return the arguments from a signature.
+QByteArray Chimera::Signature::arguments(const QByteArray &signature)
+{
+    QByteArray args;
+
+    int oparen = signature.indexOf('(');
+    int cparen = signature.lastIndexOf(')');
+
+    if (oparen >= 0 && cparen >= 0)
+        args = signature.mid(oparen, cparen - oparen + 1);
+
+    return args;
+}
+
+
+#if defined(SIP_USE_PYCAPSULE)
+// The PyCapsule destructor for the Chimera::Signature type.
+static void Signature_delete(PyObject *cap)
+{
+    delete reinterpret_cast<Chimera::Signature *>(
+            PyCapsule_GetPointer(cap, NULL));
+}
+#else
+// The PyCObject destructor for the Chimera::Signature type.
+static void Signature_delete(void *sig)
+{
+    delete reinterpret_cast<Chimera::Signature *>(sig);
+}
+#endif
diff --git a/qpy/QtCore/qpycore_chimera_storage.cpp b/qpy/QtCore/qpycore_chimera_storage.cpp
new file mode 100644
index 0000000..d76d873
--- /dev/null
+++ b/qpy/QtCore/qpycore_chimera_storage.cpp
@@ -0,0 +1,120 @@
+// This is the implementation of the Chimera::Storage class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QVariant>
+
+#include "qpycore_chimera.h"
+#include "qpycore_pyqtpyobject.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Create a new storage instance containing a converted Python object.
+Chimera::Storage::Storage(const Chimera *ct, PyObject *py)
+    : _parsed_type(ct), _ptr_storage(0), _tmp_state(0)
+{
+    // We convert to a QVariant even for pointer types because this has the
+    // side-effect of ensuring the object doesn't get garbage collected.
+    _valid = _parsed_type->fromPyObject(py, &_value_storage);
+
+    if (isPointerType())
+    {
+        int is_err = 0;
+
+        _ptr_storage = sipForceConvertToType(py, _parsed_type->typeDef(), 0, 0,
+                &_tmp_state, &is_err);
+
+        if (is_err)
+        {
+            _value_storage = QVariant();
+            _valid = false;
+        }
+    }
+}
+
+
+// Create a new storage instance.
+Chimera::Storage::Storage(const Chimera *ct)
+    : _parsed_type(ct), _ptr_storage(0), _tmp_state(0), _valid(true)
+{
+    if (!isPointerType())
+    {
+        // Create a default fundamental or value type.
+        _value_storage = QVariant(_parsed_type->metatype(), (const void *)0);
+    }
+}
+
+
+// Destroy the storage and any temporary value.
+Chimera::Storage::~Storage()
+{
+    if (_tmp_state)
+        sipReleaseType(_ptr_storage, _parsed_type->typeDef(), _tmp_state);
+}
+
+
+// Return the address of the storage.
+void *Chimera::Storage::address()
+{
+    if (isPointerType())
+    {
+        if (_parsed_type->name().endsWith('*'))
+            return &_ptr_storage;
+
+        return _ptr_storage;
+    }
+
+    if (_parsed_type->typeDef() == sipType_QVariant)
+        return &_value_storage;
+
+    return _value_storage.data();
+}
+
+
+// Return true if the value is a pointer type.
+bool Chimera::Storage::isPointerType() const
+{
+    return (_parsed_type->metatype() == PyQt_PyObject::metatype &&
+            _parsed_type->typeDef());
+}
+
+
+// Convert the stored value to a Python object.
+PyObject *Chimera::Storage::toPyObject() const
+{
+    // Pointer-class and mapped types are not stored in the QVariant.
+    if (isPointerType())
+    {
+        if (!_ptr_storage)
+        {
+            Py_INCREF(Py_None);
+            return Py_None;
+        }
+
+        return sipConvertFromType(_ptr_storage, _parsed_type->typeDef(), 0);
+    }
+
+    if (_parsed_type->typeDef() == sipType_QVariant)
+        return Chimera::toAnyPyObject(_value_storage);
+
+    return _parsed_type->toPyObject(_value_storage);
+}
diff --git a/qpy/QtCore/qpycore_classinfo.cpp b/qpy/QtCore/qpycore_classinfo.cpp
new file mode 100644
index 0000000..81852a7
--- /dev/null
+++ b/qpy/QtCore/qpycore_classinfo.cpp
@@ -0,0 +1,65 @@
+// This contains the implementation of the Q_CLASSINFO support.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+#include <frameobject.h>
+
+#include <QMultiHash>
+
+#include "qpycore_api.h"
+#include "qpycore_classinfo.h"
+
+
+static QMultiHash<const PyFrameObject *, ClassInfo> class_info_hash;
+
+
+// Add the given name/value pair to the current class info hash.
+PyObject *qpycore_ClassInfo(const char *name, const char *value)
+{
+    PyFrameObject *frame = PyEval_GetFrame();
+
+    // We need the frame we were called from, not the current one.
+    if (frame)
+        frame = frame->f_back;
+
+    if (!frame)
+    {
+        PyErr_SetString(PyExc_RuntimeError, "no current frame");
+        return 0;
+    }
+
+    class_info_hash.insert(frame,
+            ClassInfo(QByteArray(name), QByteArray(value)));
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+// Return the current class info list.
+QList<ClassInfo> qpycore_get_class_info_list()
+{
+    PyFrameObject *frame = PyEval_GetFrame();
+    QList<ClassInfo> class_info_list = class_info_hash.values(frame);
+
+    class_info_hash.remove(frame);
+
+    return class_info_list;
+}
diff --git a/qpy/QtCore/qpycore_classinfo.h b/qpy/QtCore/qpycore_classinfo.h
new file mode 100644
index 0000000..7e3f446
--- /dev/null
+++ b/qpy/QtCore/qpycore_classinfo.h
@@ -0,0 +1,36 @@
+// This defines the interfaces to the Q_CLASSINFO support.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_CLASSINFO_H
+#define _QPYCORE_CLASSINFO_H
+
+
+#include <QByteArray>
+#include <QList>
+#include <QPair>
+
+
+typedef QPair<QByteArray, QByteArray> ClassInfo;
+
+
+QList<ClassInfo> qpycore_get_class_info_list();
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_decorators.cpp b/qpy/QtCore/qpycore_decorators.cpp
new file mode 100644
index 0000000..94f9601
--- /dev/null
+++ b/qpy/QtCore/qpycore_decorators.cpp
@@ -0,0 +1,161 @@
+// This is the implementation of the pyqtSlot decorator.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QByteArray>
+
+#include "qpycore_api.h"
+#include "qpycore_chimera.h"
+#include "qpycore_misc.h"
+#include "qpycore_objectified_strings.h"
+
+
+// Forward declarations.
+extern "C" {static PyObject *decorator(PyObject *self, PyObject *f);}
+
+
+// This implements the pyqtSlot decorator.
+PyObject *qpycore_pyqtslot(PyObject *args, PyObject *kwds)
+{
+    const char *name_str = 0;
+    PyObject *res_obj = 0;
+    int revision = 0;
+    static const char *kwlist[] = {"name", "result", "revision", 0};
+
+    static PyObject *no_args = 0;
+
+    if (!no_args)
+    {
+        no_args = PyTuple_New(0);
+
+        if (!no_args)
+            return 0;
+    }
+
+    if (!PyArg_ParseTupleAndKeywords(no_args, kwds, "|sOi:pyqtSlot",
+            const_cast<char **>(kwlist), &name_str, &res_obj, &revision))
+        return 0;
+
+    Chimera::Signature *parsed_sig = Chimera::parse(args, name_str,
+            "a pyqtSlot type argument");
+
+    if (!parsed_sig)
+        return 0;
+
+    // Sticking the revision here is an awful hack, but it saves creating
+    // another data structure wrapped in a capsule.
+    parsed_sig->revision = revision;
+
+    // Parse any result type.
+    if (res_obj)
+    {
+        parsed_sig->result = Chimera::parse(res_obj);
+
+        if (!parsed_sig->result)
+        {
+            Chimera::raiseParseException(res_obj, "a pyqtSlot result");
+            delete parsed_sig;
+            return 0;
+        }
+    }
+
+    // Wrap the parsed signature in a Python object.
+    PyObject *sig_obj = Chimera::Signature::toPyObject(parsed_sig);
+
+    if (!sig_obj)
+        return 0;
+
+    // Create the decorator function itself.  We stash the arguments in "self".
+    // This may be an abuse, but it seems to be Ok.
+    static PyMethodDef deco_method = {
+        SIP_MLNAME_CAST("_deco"), decorator, METH_O, 0
+    };
+
+    PyObject *obj = PyCFunction_New(&deco_method, sig_obj);
+    Py_DECREF(sig_obj);
+
+    return obj;
+}
+
+
+// This is the decorator function that saves the C++ signature as a function
+// attribute.
+static PyObject *decorator(PyObject *self, PyObject *f)
+{
+    Chimera::Signature *parsed_sig = Chimera::Signature::fromPyObject(self);
+    const QByteArray &sig = parsed_sig->signature;
+
+    // Use the function name if there isn't already one.
+    if (sig.startsWith('('))
+    {
+        // Get the function's name.
+        PyObject *nobj = PyObject_GetAttr(f, qpycore_dunder_name);
+
+        if (!nobj)
+            return 0;
+
+        PyObject *ascii_obj = nobj;
+        const char *ascii = sipString_AsASCIIString(&ascii_obj);
+        Py_DECREF(nobj);
+
+        if (!ascii)
+            return 0;
+
+        parsed_sig->signature.prepend(ascii);
+        parsed_sig->py_signature.prepend(ascii);
+        Py_DECREF(ascii_obj);
+    }
+
+    // See if the function has already been decorated.
+    PyObject *decorations = PyObject_GetAttr(f, qpycore_dunder_pyqtsignature);
+    int rc;
+
+    if (decorations)
+    {
+        // Insert the new decoration at the head of the existing ones so that
+        // the list order matches the order they appear in the script.
+        rc = PyList_Insert(decorations, 0, self);
+    }
+    else
+    {
+        PyErr_Clear();
+
+        decorations = PyList_New(1);
+
+        if (!decorations)
+            return 0;
+
+        Py_INCREF(self);
+        PyList_SET_ITEM(decorations, 0, self);
+
+        // Save the new decoration.
+        rc = PyObject_SetAttr(f, qpycore_dunder_pyqtsignature, decorations);
+    }
+
+    Py_DECREF(decorations);
+
+    if (rc < 0)
+        return 0;
+
+    // Return the function.
+    Py_INCREF(f);
+    return f;
+}
diff --git a/qpy/QtCore/qpycore_enums_flags.cpp b/qpy/QtCore/qpycore_enums_flags.cpp
new file mode 100644
index 0000000..0e52966
--- /dev/null
+++ b/qpy/QtCore/qpycore_enums_flags.cpp
@@ -0,0 +1,132 @@
+// This contains the implementation of the Q_ENUMS and Q_FLAGS support.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+#include <frameobject.h>
+
+#include <QMultiHash>
+
+#include "qpycore_chimera.h"
+#include "qpycore_enums_flags.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Forward declarations.
+static PyObject *parse_enums_flags(PyObject *args, bool flags);
+
+
+// The enums and flags defined in each frame.
+static QMultiHash<const PyFrameObject *, EnumsFlags> enums_flags_hash;
+
+
+// Add the given Q_ENUMS() arguments to the current enums/flags hash.
+PyObject *qpycore_Enums(PyObject *args)
+{
+    return parse_enums_flags(args, false);
+}
+
+
+// Add the given Q_FLAGS() arguments to the current enums/flags hash.
+PyObject *qpycore_Flags(PyObject *args)
+{
+    return parse_enums_flags(args, true);
+}
+
+
+// Add the given Q_ENUMS() or Q_FLAGS() arguments to the current enums/flags
+// hash.
+static PyObject *parse_enums_flags(PyObject *args, bool flags)
+{
+    PyFrameObject *frame = PyEval_GetFrame();
+
+    // We need the frame we were called from, not the current one.
+    if (frame)
+        frame = frame->f_back;
+
+    if (!frame)
+    {
+        PyErr_SetString(PyExc_RuntimeError, "no current frame");
+        return 0;
+    }
+
+    // Each argument is a separate enum/flag.
+    for (SIP_SSIZE_T i = 0; i < PyTuple_GET_SIZE(args); ++i)
+    {
+        PyObject *arg = PyTuple_GET_ITEM(args, i);
+
+        // Check the argument's type is type.
+        if (!PyType_Check(arg))
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "arguments to %s() must be type objects",
+                    (flags ? "Q_FLAGS" : "Q_ENUMS"));
+            return 0;
+        }
+
+        // Create the basic enum/flag.
+        EnumsFlags enums_flags(((PyTypeObject *)arg)->tp_name, flags);
+
+        // Go through the type dictionary looking for int attributes.
+        SIP_SSIZE_T pos = 0;
+        PyObject *key, *value;
+
+        while (PyDict_Next(((PyTypeObject *)arg)->tp_dict, &pos, &key, &value))
+        {
+            PyErr_Clear();
+
+            int i_value = SIPLong_AsLong(value);
+
+            if (PyErr_Occurred())
+                continue;
+
+            const char *s_key = sipString_AsASCIIString(&key);
+
+            if (!s_key)
+                continue;
+
+            enums_flags.keys.insert(s_key, i_value);
+
+            Py_DECREF(key);
+        }
+
+        enums_flags_hash.insert(frame, enums_flags);
+
+        Chimera::registerIntType(arg);
+    }
+
+    // Make sure there are no exceptions left after failed value conversions.
+    PyErr_Clear();
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+// Return the current enums/flags list.
+QList<EnumsFlags> qpycore_get_enums_flags_list()
+{
+    PyFrameObject *frame = PyEval_GetFrame();
+    QList<EnumsFlags> enums_flags_list = enums_flags_hash.values(frame);
+
+    enums_flags_hash.remove(frame);
+
+    return enums_flags_list;
+}
diff --git a/qpy/QtCore/qpycore_enums_flags.h b/qpy/QtCore/qpycore_enums_flags.h
new file mode 100644
index 0000000..30f2c30
--- /dev/null
+++ b/qpy/QtCore/qpycore_enums_flags.h
@@ -0,0 +1,45 @@
+// This defines the interfaces to the Q_ENUMS and Q_FLAGS support.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_ENUMS_FLAGS_H
+#define _QPYCORE_ENUMS_FLAGS_H
+
+
+#include <QByteArray>
+#include <QHash>
+#include <QList>
+
+
+struct EnumsFlags
+{
+    EnumsFlags(const char *name_, bool isFlag_) : name(name_), isFlag(isFlag_)
+    {
+    }
+
+    QByteArray name;
+    bool isFlag;
+    QHash<QByteArray, int> keys;
+};
+
+
+QList<EnumsFlags> qpycore_get_enums_flags_list();
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_init.cpp b/qpy/QtCore/qpycore_init.cpp
new file mode 100644
index 0000000..ae482ae
--- /dev/null
+++ b/qpy/QtCore/qpycore_init.cpp
@@ -0,0 +1,74 @@
+// This is the initialisation support code for the QtCore module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpycore_api.h"
+#include "qpycore_public_api.h"
+#include "qpycore_pyqtslotproxy.h"
+#include "qpycore_qobject_helpers.h"
+#include "qpycore_types.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Perform any required initialisation.
+void qpycore_init()
+{
+    // Initialise the meta-type.
+    qpycore_pyqtWrapperType_Type.tp_base = sipWrapperType_Type;
+
+    if (PyType_Ready(&qpycore_pyqtWrapperType_Type) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to initialise pyqtWrapperType type");
+
+    // Register the meta-type.
+    if (sipRegisterPyType((PyTypeObject *)&qpycore_pyqtWrapperType_Type) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to register pyqtWrapperType type");
+
+    // Export the private helpers, ie. those that should not be used by
+    // external handwritten code.
+    sipExportSymbol("qtcore_qt_metaobject",
+            (void *)qpycore_qobject_metaobject);
+    sipExportSymbol("qtcore_qt_metacall", (void *)qpycore_qobject_qt_metacall);
+    sipExportSymbol("qtcore_qt_metacast", (void *)qpycore_qobject_qt_metacast);
+    sipExportSymbol("qtcore_qobject_sender",
+            (void *)PyQtSlotProxy::lastSender);
+
+    // Export the public API.
+    sipExportSymbol("pyqt5_from_argv_list", (void *)pyqt5_from_argv_list);
+    sipExportSymbol("pyqt5_from_qvariant_by_type",
+            (void *)pyqt5_from_qvariant_by_type);
+    sipExportSymbol("pyqt5_get_connection_parts",
+            (void *)pyqt5_get_connection_parts);
+    sipExportSymbol("pyqt5_get_pyqtsignal_parts",
+            (void *)pyqt5_get_pyqtsignal_parts);
+    sipExportSymbol("pyqt5_get_pyqtslot_parts",
+            (void *)pyqt5_get_pyqtslot_parts);
+    sipExportSymbol("pyqt5_get_qmetaobject", (void *)pyqt5_get_qmetaobject);
+    sipExportSymbol("pyqt5_get_signal_signature",
+            (void *)pyqt5_get_signal_signature);
+    sipExportSymbol("pyqt5_register_from_qvariant_convertor",
+            (void *)pyqt5_register_from_qvariant_convertor);
+    sipExportSymbol("pyqt5_register_to_qvariant_convertor",
+            (void *)pyqt5_register_to_qvariant_convertor);
+    sipExportSymbol("pyqt5_register_to_qvariant_data_convertor",
+            (void *)pyqt5_register_to_qvariant_data_convertor);
+    sipExportSymbol("pyqt5_update_argv_list", (void *)pyqt5_update_argv_list);
+}
diff --git a/qpy/QtCore/qpycore_misc.cpp b/qpy/QtCore/qpycore_misc.cpp
new file mode 100644
index 0000000..4a15049
--- /dev/null
+++ b/qpy/QtCore/qpycore_misc.cpp
@@ -0,0 +1,57 @@
+// This contains the implementation of various odds and ends.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpycore_api.h"
+#include "qpycore_misc.h"
+#include "qpycore_types.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Return true if the given type (which must be a class) was wrapped for PyQt5.
+bool qpycore_is_pyqt_class(const sipTypeDef *td)
+{
+    return PyType_IsSubtype(Py_TYPE(sipTypeAsPyTypeObject(td)),
+            &qpycore_pyqtWrapperType_Type);
+}
+
+
+#if PY_MAJOR_VERSION >= 3
+// Python v3 doesn't have the Unicode equivalent of Python v2's
+// PyString_ConcatAndDel().
+void qpycore_Unicode_ConcatAndDel(PyObject **string, PyObject *newpart)
+{
+    PyObject *old = *string;
+
+    if (old)
+    {
+        if (newpart)
+            *string = PyUnicode_Concat(old, newpart);
+        else
+            *string = 0;
+
+        Py_DECREF(old);
+    }
+
+    Py_XDECREF(newpart);
+}
+#endif
diff --git a/qpy/QtCore/qpycore_misc.h b/qpy/QtCore/qpycore_misc.h
new file mode 100644
index 0000000..3448b59
--- /dev/null
+++ b/qpy/QtCore/qpycore_misc.h
@@ -0,0 +1,33 @@
+// This defines the interfaces to various odd and ends.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_MISC_H
+#define _QPYCORE_MISC_H
+
+
+#include <Python.h>
+
+#include "sipAPIQtCore.h"
+
+
+bool qpycore_is_pyqt_class(const sipTypeDef *td);
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_namespace.h b/qpy/QtCore/qpycore_namespace.h
new file mode 100644
index 0000000..1492af1
--- /dev/null
+++ b/qpy/QtCore/qpycore_namespace.h
@@ -0,0 +1,35 @@
+// This ensure the Qt namespace macros are defined irrespective of the version
+// of Qt being used.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_NAMESPACE_H
+#define _QPYCORE_NAMESPACE_H
+
+
+#include <QtGlobal>
+
+
+#if !defined(QT_BEGIN_NAMESPACE)
+#define QT_BEGIN_NAMESPACE
+#define QT_END_NAMESPACE
+#endif
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_objectified_strings.h b/qpy/QtCore/qpycore_objectified_strings.h
new file mode 100644
index 0000000..82e70ee
--- /dev/null
+++ b/qpy/QtCore/qpycore_objectified_strings.h
@@ -0,0 +1,35 @@
+// This declares a number of objectified string objects.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_OBJECTIFIED_STRINGS_H
+#define _QPYCORE_OBJECTIFIED_STRINGS_H
+
+
+#include <Python.h>
+
+
+// __name__
+extern PyObject *qpycore_dunder_name;
+
+// __pyqtSignature__
+extern PyObject *qpycore_dunder_pyqtsignature;
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_post_init.cpp.in b/qpy/QtCore/qpycore_post_init.cpp.in
new file mode 100644
index 0000000..1607a6c
--- /dev/null
+++ b/qpy/QtCore/qpycore_post_init.cpp.in
@@ -0,0 +1,139 @@
+// This is the post-initialisation support code for the QtCore module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QMutex>
+
+#include "qpycore_api.h"
+#include "qpycore_objectified_strings.h"
+#include "qpycore_pyqtboundsignal.h"
+#include "qpycore_pyqtmethodproxy.h"
+#include "qpycore_pyqtproperty.h"
+#include "qpycore_pyqtpyobject.h"
+#include "qpycore_pyqtsignal.h"
+#include "qpycore_pyqtslotproxy.h"
+#include "qpycore_types.h"
+
+#include "sipAPIQtCore.h"
+
+
+// The objectified strings.
+PyObject *qpycore_dunder_name;
+PyObject *qpycore_dunder_pyqtsignature;
+
+
+// Perform any required post-initialisation.
+void qpycore_post_init(PyObject *module_dict)
+{
+    // Disable the automatic destruction of C++ objects.
+    sipSetDestroyOnExit(0);
+
+    // Add the meta-type to the module dictionary.
+    if (PyDict_SetItemString(module_dict, "pyqtWrapperType",
+                (PyObject *)&qpycore_pyqtWrapperType_Type) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to set pyqtWrapperType type");
+
+    // Initialise the pyqtProperty type and add it to the module dictionary.
+    if (PyType_Ready(&qpycore_pyqtProperty_Type) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to initialise pyqtProperty type");
+
+    if (PyDict_SetItemString(module_dict, "pyqtProperty",
+                (PyObject *)&qpycore_pyqtProperty_Type) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to set pyqtProperty type");
+
+    // Initialise the pyqtSignal type and add it to the module dictionary.
+    if (PyType_Ready(&qpycore_pyqtSignal_Type) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to initialise pyqtSignal type");
+
+    if (PyDict_SetItemString(module_dict, "pyqtSignal",
+                (PyObject *)&qpycore_pyqtSignal_Type) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to set pyqtSignal type");
+
+    // Initialise the pyqtBoundSignal type and add it to the module dictionary.
+    if (PyType_Ready(&qpycore_pyqtBoundSignal_Type) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to initialise pyqtBoundSignal type");
+
+    if (PyDict_SetItemString(module_dict, "pyqtBoundSignal",
+                (PyObject *)&qpycore_pyqtBoundSignal_Type) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to set pyqtBoundSignal type");
+
+    // Initialise the private pyqtMethodProxy type.
+    if (PyType_Ready(&qpycore_pyqtMethodProxy_Type) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to initialise pyqtMethodProxy type");
+
+    // Register the C++ type that wraps Python objects.
+    PyQt_PyObject::metatype = qRegisterMetaType<PyQt_PyObject>("PyQt_PyObject");
+    qRegisterMetaTypeStreamOperators<PyQt_PyObject>("PyQt_PyObject");
+
+    // Register the lazy attribute getter.
+    if (sipRegisterAttributeGetter(sipType_QObject, qpycore_get_lazy_attr) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to register attribute getter");
+
+    // Objectify some strings.
+#if PY_MAJOR_VERSION >= 3
+    qpycore_dunder_pyqtsignature = PyUnicode_FromString("__pyqtSignature__");
+#else
+    qpycore_dunder_pyqtsignature = PyString_FromString("__pyqtSignature__");
+#endif
+
+    if (!qpycore_dunder_pyqtsignature)
+        Py_FatalError("PyQt5.QtCore: Failed to objectify '__pyqtSignature__'");
+
+#if PY_MAJOR_VERSION >= 3
+    qpycore_dunder_name = PyUnicode_FromString("__name__");
+#else
+    qpycore_dunder_name = PyString_FromString("__name__");
+#endif
+
+    if (!qpycore_dunder_name)
+        Py_FatalError("PyQt5.QtCore: Failed to objectify '__name__'");
+
+    // Embed the configuration.
+    PyObject *config = PyDict_New();
+
+    if (!config)
+        Py_FatalError("PyQt5.QtCore: Failed to create PYQT_CONFIGURATION dict");
+
+#if PY_MAJOR_VERSION >= 3
+    PyObject *sip_flags = PyUnicode_FromString("@@PYQT_SIP_FLAGS@@");
+#else
+    PyObject *sip_flags = PyString_FromString("@@PYQT_SIP_FLAGS@@");
+#endif
+
+    if (!sip_flags)
+        Py_FatalError("PyQt5.QtCore: Failed to create PYQT_CONFIGURATION.sip_flags");
+
+    if (PyDict_SetItemString(config, "sip_flags", sip_flags) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to set PYQT_CONFIGURATION.sip_flags");
+
+    Py_DECREF(sip_flags);
+
+    if (PyDict_SetItemString(module_dict, "PYQT_CONFIGURATION", config) < 0)
+        Py_FatalError("PyQt5.QtCore: Failed to set PYQT_CONFIGURATION dict");
+
+    Py_DECREF(config);
+
+    // Create the mutex that serialises access to the slot proxies.  We don't
+    // use a statically initialised one because Qt needs some things to be
+    // initialised first (at least for Windows) and this is the only way to
+    // guarantee things are done in the right order.
+    PyQtSlotProxy::mutex = new QMutex(QMutex::Recursive);
+}
diff --git a/qpy/QtCore/qpycore_public_api.cpp b/qpy/QtCore/qpycore_public_api.cpp
new file mode 100644
index 0000000..9928d84
--- /dev/null
+++ b/qpy/QtCore/qpycore_public_api.cpp
@@ -0,0 +1,230 @@
+// This implements the public API provided by PyQt to external packages.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <QByteArray>
+#include <QHash>
+
+#include "qpycore_chimera.h"
+#include "qpycore_objectified_strings.h"
+#include "qpycore_public_api.h"
+#include "qpycore_pyqtboundsignal.h"
+#include "qpycore_pyqtsignal.h"
+#include "qpycore_types.h"
+
+
+// Convert a Python argv list to a conventional C argc count and argv array.
+char **pyqt5_from_argv_list(PyObject *argv_list, int &argc)
+{
+    argc = PyList_GET_SIZE(argv_list);
+
+    // Allocate space for two copies of the argument pointers, plus the
+    // terminating NULL.
+    char **argv = new char *[2 * (argc + 1)];
+
+    // Convert the list.
+    for (int a = 0; a < argc; ++a)
+    {
+        PyObject *arg_obj = PyList_GET_ITEM(argv_list, a);
+        const char *arg = sipString_AsLatin1String(&arg_obj);
+
+        if (arg)
+        {
+            arg = qstrdup(arg);
+            Py_DECREF(arg_obj);
+        }
+        else
+        {
+            // Try not to mess up Qt's argument parsing by simply missing out
+            // the argument.
+            arg = "unknown";
+        }
+
+        argv[a] = argv[a + argc + 1] = const_cast<char *>(arg);
+    }
+
+    argv[argc + argc + 1] = argv[argc] = NULL;
+
+    return argv;
+}
+
+
+// Get the receiver object and slot signature for a connection.
+sipErrorState pyqt5_get_connection_parts(PyObject *slot, QObject *transmitter,
+        const char *signal_signature, bool single_shot, QObject **receiver,
+        QByteArray &slot_signature)
+{ 
+    static QHash<QByteArray, const Chimera::Signature *> cache;
+
+    QByteArray key(signal_signature);
+    const Chimera::Signature *parsed_signal_signature = cache.value(key);
+
+    if (!parsed_signal_signature)
+    {
+        parsed_signal_signature = Chimera::parse(key, "a signal argument");
+
+        if (!parsed_signal_signature)
+            return sipErrorFail;
+
+        cache.insert(key, parsed_signal_signature);
+    }
+
+    return qpycore_get_receiver_slot_signature(slot, transmitter,
+            parsed_signal_signature, single_shot, receiver, slot_signature);
+}
+
+
+
+// Get the transmitter object and signal signature from a bound signal.
+sipErrorState pyqt5_get_pyqtsignal_parts(PyObject *signal,
+        QObject **transmitter, QByteArray &signal_signature)
+{
+    if (PyObject_TypeCheck(signal, &qpycore_pyqtBoundSignal_Type))
+    {
+        qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)signal;
+
+        *transmitter = bs->bound_qobject;
+        signal_signature = bs->unbound_signal->parsed_signature->signature;
+
+        return sipErrorNone;
+    }
+
+    return sipErrorContinue;
+}
+
+
+// Get the receiver object and slot signature from a decorated callable.
+sipErrorState pyqt5_get_pyqtslot_parts(PyObject *slot, QObject **receiver,
+        QByteArray &slot_signature)
+{
+    // Get the QObject.
+    PyObject *py_receiver = PyMethod_Self(slot);
+
+    if (!py_receiver)
+        return sipErrorContinue;
+
+    void *qobj;
+    int is_err = 0;
+
+    qobj = sipForceConvertToType(py_receiver, sipType_QObject, 0,
+            SIP_NO_CONVERTORS, 0, &is_err);
+
+    if (is_err)
+        return sipErrorContinue;
+
+    *receiver = reinterpret_cast<QObject *>(qobj);
+
+    // Get the decoration.
+    PyObject *decorations = PyObject_GetAttr(slot,
+            qpycore_dunder_pyqtsignature);
+
+    if (!decorations)
+        return sipErrorContinue;
+
+    // Use the first one ignoring any others.
+    Chimera::Signature *sig = Chimera::Signature::fromPyObject(
+            PyList_GET_ITEM(decorations, 0));
+    Py_DECREF(decorations);
+
+    slot_signature = sig->signature;
+    slot_signature.prepend('1');
+
+    return sipErrorNone;
+}
+
+
+// Get the signature string for a bound or unbound signal.
+sipErrorState pyqt5_get_signal_signature(PyObject *signal,
+        const QObject *transmitter, QByteArray &signal_signature)
+{
+    qpycore_pyqtSignal *ps;
+
+    if (PyObject_TypeCheck(signal, &qpycore_pyqtBoundSignal_Type))
+    {
+        qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)signal;
+
+        if (bs->bound_qobject != transmitter)
+        {
+            PyErr_SetString(PyExc_ValueError,
+                    "signal is bound to a different QObject");
+            return sipErrorFail;
+        }
+
+        ps = bs->unbound_signal;
+    }
+    else if (PyObject_TypeCheck(signal, &qpycore_pyqtSignal_Type))
+    {
+        ps = (qpycore_pyqtSignal *)signal;
+    }
+    else
+    {
+        return sipErrorContinue;
+    }
+
+    signal_signature = ps->parsed_signature->signature;
+
+    return sipErrorNone;
+}
+
+
+// Register a convertor function that converts a QVariant to a Python object.
+void pyqt5_register_from_qvariant_convertor(
+        bool (*convertor)(const QVariant &, PyObject **))
+{
+    Chimera::registeredFromQVariantConvertors.append(convertor);
+}
+
+
+// Register a convertor function that converts a Python object to a QVariant.
+void pyqt5_register_to_qvariant_convertor(
+        bool (*convertor)(PyObject *, QVariant &, bool *))
+{
+    Chimera::registeredToQVariantConvertors.append(convertor);
+}
+
+
+// Register a convertor function that converts a Python object to the
+// pre-allocated data of a QVariant with a specific meta-type.
+void pyqt5_register_to_qvariant_data_convertor(
+        bool (*convertor)(PyObject *, void *, int, bool *))
+{
+    Chimera::registeredToQVariantDataConvertors.append(convertor);
+}
+
+
+// Remove arguments from the Python argv list that have been removed from the
+// C argv array.
+void pyqt5_update_argv_list(PyObject *argv_list, int argc, char **argv)
+{
+    for (int a = 0, na = 0; a < argc; ++a)
+    {
+        // See if it was removed.
+        if (argv[na] == argv[a + argc + 1])
+            ++na;
+        else
+            PyList_SetSlice(argv_list, na, na + 1, 0);
+    }
+}
+
+
+// Get the QMetaObject instance for a Python type.
+const QMetaObject *pyqt5_get_qmetaobject(PyTypeObject *type)
+{
+    return ((pyqtWrapperType *)type)->metaobject->mo;
+}
diff --git a/qpy/QtCore/qpycore_public_api.h b/qpy/QtCore/qpycore_public_api.h
new file mode 100644
index 0000000..76b5132
--- /dev/null
+++ b/qpy/QtCore/qpycore_public_api.h
@@ -0,0 +1,104 @@
+// This defines the public API provided by PyQt to external packages.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_PUBLIC_API_H
+#define _QPYCORE_PUBLIC_API_H
+
+
+#include <Python.h>
+#include <sip.h>
+
+#include "qpycore_namespace.h"
+
+
+QT_BEGIN_NAMESPACE
+class QByteArray;
+struct QMetaObject;
+class QObject;
+class QVariant;
+QT_END_NAMESPACE
+
+
+// Convert a Python list to a standard C array of command line arguments and an
+// argument count.
+char **pyqt5_from_argv_list(PyObject *argv_list, int &argc);
+
+// Convert a QVariant to a Python object according to an optional Python type.
+PyObject *pyqt5_from_qvariant_by_type(QVariant &value, PyObject *type);
+
+// Get the receiver object and slot signature to allow a signal to be connected
+// to an optional transmitter.  single_shot is true if the signal will only
+// ever be emitted once.  Returns the error state.  If this is sipErrorFail
+// then a Python exception will have been raised.
+sipErrorState pyqt5_get_connection_parts(PyObject *slot, QObject *transmitter,
+        const char *signal_signature, bool single_shot, QObject **receiver,
+        QByteArray &slot_signature);
+
+// Get the QMetaObject instance for a Python type.  The Python type must be a
+// sub-type of QObject's Python type.
+const QMetaObject *pyqt5_get_qmetaobject(PyTypeObject *type);
+
+// Get the transmitter object and signal signature from a bound signal.
+// Returns the error state.  If this is sipErrorFail then a Python exception
+// will have been raised.
+sipErrorState pyqt5_get_pyqtsignal_parts(PyObject *signal,
+        QObject **transmitter, QByteArray &signal_signature);
+
+// Get the receiver object and slot signature from a callable decorated with
+// pyqtSlot.  Returns the error state.  If this is sipErrorFail then a Python
+// exception will have been raised.
+sipErrorState pyqt5_get_pyqtslot_parts(PyObject *slot, QObject **receiver,
+        QByteArray &slot_signature);
+
+// Get the signature string for a bound or unbound signal.  If the signal is
+// bound then it must be bound to the given transmitter.  Returns the error
+// state.  If this is sipErrorFail then a Python exception will have been
+// raised.
+sipErrorState pyqt5_get_signal_signature(PyObject *signal,
+        const QObject *transmitter, QByteArray &signal_signature);
+
+// Register a convertor function that converts a QVariant to a Python object.
+// The convertor will return true if the QVariant was handled, so that no other
+// convertor need be tried.  If the Python object returned was 0 then there was
+// an error and a Python exception raised.
+void pyqt5_register_from_qvariant_convertor(
+        bool (*convertor)(const QVariant &, PyObject **));
+
+// Register a convertor function that converts a Python object to a QVariant.
+// The convertor will return true if the Python object was handled, so that no
+// other convertor need be tried.  If the flag set was false then there was an
+// error and a Python exception raised.
+void pyqt5_register_to_qvariant_convertor(
+        bool (*convertor)(PyObject *, QVariant &, bool *));
+
+// Register a convertor function that converts a Python object to the
+// pre-allocated data of a QVariant with a specific meta-type.  The convertor
+// will return true if the Python object was handled, so that no other
+// convertor need be tried.  If the flag set was false then there was an error
+// and a Python exception raised.
+void pyqt5_register_to_qvariant_data_convertor(
+        bool (*convertor)(PyObject *, void *, int, bool *));
+
+// Update an Python list from a standard C array of command line arguments and
+// an argument count.
+void pyqt5_update_argv_list(PyObject *argv_list, int argc, char **argv);
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_pyqtboundsignal.cpp b/qpy/QtCore/qpycore_pyqtboundsignal.cpp
new file mode 100644
index 0000000..5d9996e
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtboundsignal.cpp
@@ -0,0 +1,982 @@
+// This contains the implementation of the pyqtBoundSignal type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QtGlobal>
+#include <QByteArray>
+#include <QMetaObject>
+
+#include "qpycore_api.h"
+#include "qpycore_chimera.h"
+#include "qpycore_misc.h"
+#include "qpycore_objectified_strings.h"
+#include "qpycore_pyqtboundsignal.h"
+#include "qpycore_pyqtpyobject.h"
+#include "qpycore_pyqtsignal.h"
+#include "qpycore_pyqtslotproxy.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Forward declarations.
+extern "C" {
+static PyObject *pyqtBoundSignal_call(PyObject *self, PyObject *args,
+        PyObject *kw);
+static void pyqtBoundSignal_dealloc(PyObject *self);
+static PyObject *pyqtBoundSignal_repr(PyObject *self);
+static PyObject *pyqtBoundSignal_get_doc(PyObject *self, void *);
+static PyObject *pyqtBoundSignal_get_signal(PyObject *self, void *);
+static PyObject *pyqtBoundSignal_connect(PyObject *self, PyObject *args,
+        PyObject *kwd_args);
+static PyObject *pyqtBoundSignal_disconnect(PyObject *self, PyObject *args);
+static PyObject *pyqtBoundSignal_emit(PyObject *self, PyObject *args);
+static PyObject *pyqtBoundSignal_mp_subscript(PyObject *self,
+        PyObject *subscript);
+}
+
+static PyObject *disconnect(qpycore_pyqtBoundSignal *bs, QObject *qrx,
+        const char *slot);
+static bool do_emit(QObject *qtx, int signal_index,
+        const Chimera::Signature *parsed_signature, const char *docstring,
+        PyObject *sigargs);
+static bool get_receiver(PyObject *slot,
+        const Chimera::Signature *signal_signature, QObject **receiver,
+        QByteArray &slot_signature);
+static QByteArray slot_signature_from_decorations(
+        const Chimera::Signature *signal_signature, PyObject *decorations,
+        int nr_args);
+static QByteArray slot_signature_from_metaobject(
+        const Chimera::Signature *signal_signature, const QMetaObject *slot_mo,
+        const QByteArray &slot_name, int nr_args);
+static QByteArray slot_signature(const Chimera::Signature *signal_signature,
+        const QByteArray &slot_name, int nr_args);
+static sipErrorState get_receiver_slot_signature(PyObject *slot,
+        QObject *transmitter, const Chimera::Signature *signal_signature,
+        bool single_shot, QObject **receiver, QByteArray &slot_signature,
+        bool unique_connection_check, int no_receiver_check);
+
+
+// Doc-strings.
+PyDoc_STRVAR(pyqtBoundSignal_connect_doc,
+"connect(slot, type=Qt.AutoConnection, no_receiver_check=False)\n"
+"\n"
+"slot is either a Python callable or another signal.\n"
+"type is a Qt.ConnectionType.\n"
+"no_receiver_check is True to disable the check that the receiver's C++\n"
+"instance still exists when the signal is emitted.\n");
+
+PyDoc_STRVAR(pyqtBoundSignal_disconnect_doc,
+"disconnect([slot])\n"
+"\n"
+"slot is an optional Python callable or another signal.  If it is omitted\n"
+"then the signal is disconnected from everything it is connected to.");
+
+PyDoc_STRVAR(pyqtBoundSignal_emit_doc,
+"emit(*args)\n"
+"\n"
+"*args are the values that will be passed as arguments to all connected\n"
+"slots.");
+
+PyDoc_STRVAR(pyqtBoundSignal_signal_doc,
+"The signature of the signal that would be returned by SIGNAL()");
+
+
+// Define the methods.
+static PyMethodDef pyqtBoundSignal_methods[] = {
+    {SIP_MLNAME_CAST("connect"), (PyCFunction)pyqtBoundSignal_connect,
+            METH_VARARGS|METH_KEYWORDS,
+            SIP_MLDOC_CAST(pyqtBoundSignal_connect_doc)},
+    {SIP_MLNAME_CAST("disconnect"), pyqtBoundSignal_disconnect,
+            METH_VARARGS, SIP_MLDOC_CAST(pyqtBoundSignal_disconnect_doc)},
+    {SIP_MLNAME_CAST("emit"), pyqtBoundSignal_emit,
+            METH_VARARGS, SIP_MLDOC_CAST(pyqtBoundSignal_emit_doc)},
+    {0, 0, 0, 0}
+};
+
+
+// Define the mapping methods.
+static PyMappingMethods pyqtBoundSignal_as_mapping = {
+    0,                      /* mp_length */
+    pyqtBoundSignal_mp_subscript,   /* mp_subscript */
+    0,                      /* mp_ass_subscript */
+};
+
+
+// The getters/setters.
+static PyGetSetDef pyqtBoundSignal_getsets[] = {
+    {(char *)"__doc__", pyqtBoundSignal_get_doc, NULL, NULL, NULL},
+    {(char *)"signal", pyqtBoundSignal_get_signal, NULL,
+            (char *)pyqtBoundSignal_signal_doc, NULL},
+    {NULL, NULL, NULL, NULL, NULL}
+};
+
+
+// The pyqtBoundSignal type object.
+PyTypeObject qpycore_pyqtBoundSignal_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    SIP_TPNAME_CAST("PyQt5.QtCore.pyqtBoundSignal"),    /* tp_name */
+    sizeof (qpycore_pyqtBoundSignal),   /* tp_basicsize */
+    0,                      /* tp_itemsize */
+    pyqtBoundSignal_dealloc,    /* tp_dealloc */
+    0,                      /* tp_print */
+    0,                      /* tp_getattr */
+    0,                      /* tp_setattr */
+    0,                      /* tp_compare */
+    pyqtBoundSignal_repr,   /* tp_repr */
+    0,                      /* tp_as_number */
+    0,                      /* tp_as_sequence */
+    &pyqtBoundSignal_as_mapping,    /* tp_as_mapping */
+    0,                      /* tp_hash */
+    pyqtBoundSignal_call,   /* tp_call */
+    0,                      /* tp_str */
+    0,                      /* tp_getattro */
+    0,                      /* tp_setattro */
+    0,                      /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,     /* tp_flags */
+    0,                      /* tp_doc */
+    0,                      /* tp_traverse */
+    0,                      /* tp_clear */
+    0,                      /* tp_richcompare */
+    0,                      /* tp_weaklistoffset */
+    0,                      /* tp_iter */
+    0,                      /* tp_iternext */
+    pyqtBoundSignal_methods,    /* tp_methods */
+    0,                      /* tp_members */
+    pyqtBoundSignal_getsets,    /* tp_getset */
+    0,                      /* tp_base */
+    0,                      /* tp_dict */
+    0,                      /* tp_descr_get */
+    0,                      /* tp_descr_set */
+    0,                      /* tp_dictoffset */
+    0,                      /* tp_init */
+    0,                      /* tp_alloc */
+    PyType_GenericNew,      /* tp_new */
+    0,                      /* tp_free */
+    0,                      /* tp_is_gc */
+    0,                      /* tp_bases */
+    0,                      /* tp_mro */
+    0,                      /* tp_cache */
+    0,                      /* tp_subclasses */
+    0,                      /* tp_weaklist */
+    0,                      /* tp_del */
+    0,                      /* tp_version_tag */
+#if PY_VERSION_HEX >= 0x03040000
+    0,                      /* tp_finalize */
+#endif
+};
+
+
+// The __doc__ getter.
+static PyObject *pyqtBoundSignal_get_doc(PyObject *self, void *)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+
+    const char *docstring = bs->unbound_signal->docstring;
+
+    if (!docstring)
+    {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    if (*docstring == '\1')
+        ++docstring;
+
+    return
+#if PY_MAJOR_VERSION >= 3
+        PyUnicode_FromString
+#else
+        PyString_FromString
+#endif
+            (docstring);
+}
+
+
+// The __signal__ getter.
+static PyObject *pyqtBoundSignal_get_signal(PyObject *self, void *)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+
+    return
+#if PY_MAJOR_VERSION >= 3
+        PyUnicode_FromString
+#else
+        PyString_FromString
+#endif
+            (bs->unbound_signal->parsed_signature->signature.constData());
+}
+
+
+// The type repr slot.
+static PyObject *pyqtBoundSignal_repr(PyObject *self)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+
+    QByteArray name = bs->unbound_signal->parsed_signature->name();
+
+    return
+#if PY_MAJOR_VERSION >= 3
+        PyUnicode_FromFormat
+#else
+        PyString_FromFormat
+#endif
+            ("<bound signal %s of %s object at %p>", name.constData() + 1,
+                    bs->bound_pyobject->ob_type->tp_name, bs->bound_pyobject);
+}
+
+
+// The type call slot.
+static PyObject *pyqtBoundSignal_call(PyObject *self, PyObject *args,
+        PyObject *kw)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+
+    return qpycore_call_signal_overload(bs->unbound_signal, bs->bound_pyobject,
+            args, kw);
+}
+
+
+// The type dealloc slot.
+static void pyqtBoundSignal_dealloc(PyObject *self)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+
+    Py_XDECREF((PyObject *)bs->unbound_signal);
+
+    Py_TYPE(self)->tp_free(self);
+}
+
+
+// Create a bound signal.
+PyObject *qpycore_pyqtBoundSignal_New(qpycore_pyqtSignal *unbound_signal,
+        PyObject *bound_pyobject, QObject *bound_qobject)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)PyType_GenericNew(&qpycore_pyqtBoundSignal_Type, 0, 0);
+
+    if (bs)
+    {
+        Py_INCREF((PyObject *)unbound_signal);
+        bs->unbound_signal = unbound_signal;
+
+        bs->bound_pyobject = bound_pyobject;
+        bs->bound_qobject = bound_qobject;
+    }
+
+    return (PyObject *)bs;
+}
+
+
+// The mapping subscript slot.
+static PyObject *pyqtBoundSignal_mp_subscript(PyObject *self,
+        PyObject *subscript)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+
+    qpycore_pyqtSignal *ps = qpycore_find_signal(bs->unbound_signal, subscript,
+            "a bound signal type argument");
+
+    if (!ps)
+        return 0;
+
+    // Create a new bound signal.
+    return qpycore_pyqtBoundSignal_New(ps, bs->bound_pyobject,
+            bs->bound_qobject);
+}
+
+
+// Connect a signal.
+static PyObject *pyqtBoundSignal_connect(PyObject *self, PyObject *args,
+        PyObject *kwd_args)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+
+    static const char *kwds[] = {
+        "slot",
+        "type",
+        "no_receiver_check",
+        0
+    };
+
+    PyObject *py_slot, *py_type = 0;
+    int no_receiver_check = 0;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwd_args,
+#if PY_VERSION_HEX >= 0x03030000
+                "O|Op:connect",
+#else
+                "O|Oi:connect",
+#endif
+                const_cast<char **>(kwds), &py_slot, &py_type, &no_receiver_check))
+        return 0;
+
+    Qt::ConnectionType q_type = Qt::AutoConnection;
+
+    if (py_type)
+    {
+        if (!sipCanConvertToEnum(py_type, sipType_Qt_ConnectionType))
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "Qt.ConnectionType expected, not '%s'",
+                    Py_TYPE(py_slot)->tp_name);
+
+            return 0;
+        }
+
+        q_type = (Qt::ConnectionType)SIPLong_AsLong(py_type);
+    }
+
+    QObject *q_tx = bs->bound_qobject, *q_rx;
+    Chimera::Signature *signal_signature = bs->unbound_signal->parsed_signature;
+    QByteArray slot_signature;
+
+    sipErrorState estate = get_receiver_slot_signature(py_slot, q_tx,
+            signal_signature, false, &q_rx, slot_signature,
+            ((q_type & Qt::UniqueConnection) == Qt::UniqueConnection),
+            no_receiver_check);
+
+    if (estate != sipErrorNone)
+    {
+        if (estate == sipErrorContinue)
+            sipBadCallableArg(0, py_slot);
+
+        return 0;
+    }
+
+    // Connect the signal to the slot and handle any errors.
+
+    bool ok;
+
+    Py_BEGIN_ALLOW_THREADS
+    ok = QObject::connect(q_tx, signal_signature->signature.constData(), q_rx,
+            slot_signature.constData(), q_type);
+    Py_END_ALLOW_THREADS
+
+    if (!ok)
+    {
+        QByteArray slot_name = Chimera::Signature::name(slot_signature);
+
+        PyErr_Format(PyExc_TypeError, "connect() failed between %s and %s()",
+                signal_signature->py_signature.constData(),
+                slot_name.constData() + 1);
+
+        return 0;
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+// Get the receiver object and slot signature from a callable or signal.
+sipErrorState qpycore_get_receiver_slot_signature(PyObject *slot,
+        QObject *transmitter, const Chimera::Signature *signal_signature,
+        bool single_shot, QObject **receiver, QByteArray &slot_signature)
+{
+    return get_receiver_slot_signature(slot, transmitter, signal_signature,
+            single_shot, receiver, slot_signature, false, 0);
+}
+
+
+// Get the receiver object and slot signature from a callable or signal.
+// Optionally disable the receiver check.
+static sipErrorState get_receiver_slot_signature(PyObject *slot,
+        QObject *transmitter, const Chimera::Signature *signal_signature,
+        bool single_shot, QObject **receiver, QByteArray &slot_signature,
+        bool unique_connection_check, int no_receiver_check)
+{
+    // See if the slot is a signal.
+    if (PyObject_TypeCheck(slot, &qpycore_pyqtBoundSignal_Type))
+    {
+        qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)slot;
+
+        *receiver = bs->bound_qobject;
+        slot_signature = bs->unbound_signal->parsed_signature->signature;
+
+        return sipErrorNone;
+    }
+
+    // Make sure the slot is callable.
+    if (!PyCallable_Check(slot))
+        return sipErrorContinue;
+
+    // See if the slot can be used directly (ie. it wraps a Qt slot) or if it
+    // needs a proxy.
+    if (!get_receiver(slot, signal_signature, receiver, slot_signature))
+        return sipErrorFail;
+
+    if (slot_signature.isEmpty())
+    {
+        slot_signature = PyQtSlotProxy::proxy_slot_signature;
+
+        // Create a proxy for the slot.
+        PyQtSlotProxy *proxy;
+
+        if (unique_connection_check)
+        {
+            proxy = PyQtSlotProxy::findSlotProxy(transmitter,
+                    signal_signature->signature, slot);
+
+            if (proxy)
+            {
+                // We give more information than we could if it was a Qt slot
+                // but to be consistent we raise a TypeError even though it's
+                // not the most appropriate for the type of error.
+                PyErr_SetString(PyExc_TypeError, "connection is not unique");
+                return sipErrorFail;
+            }
+        }
+
+        Py_BEGIN_ALLOW_THREADS
+
+        proxy = new PyQtSlotProxy(slot, transmitter, signal_signature,
+                single_shot);
+
+        if (no_receiver_check)
+            proxy->disableReceiverCheck();
+
+        if (proxy->metaObject())
+        {
+            if (*receiver)
+                proxy->moveToThread((*receiver)->thread());
+
+            *receiver = proxy;
+        }
+        else
+        {
+            delete proxy;
+            proxy = 0;
+        }
+
+        Py_END_ALLOW_THREADS
+
+        if (!proxy)
+            return sipErrorFail;
+    }
+
+    return sipErrorNone;
+}
+
+
+// Disconnect all of a QObject's signals.
+PyObject *qpycore_qobject_disconnect(const QObject *q_obj)
+{
+    PyObject *res_obj;
+    bool ok;
+
+    Py_BEGIN_ALLOW_THREADS
+    ok = q_obj->disconnect();
+    Py_END_ALLOW_THREADS
+
+    if (ok)
+    {
+        res_obj = Py_None;
+        Py_INCREF(res_obj);
+    }
+    else
+    {
+        PyErr_SetString(PyExc_TypeError, "disconnect() of all signals failed");
+        res_obj = 0;
+    }
+
+    PyQtSlotProxy::deleteSlotProxies(q_obj, QByteArray());
+
+    return res_obj;
+}
+
+
+// Disconnect a signal.
+static PyObject *pyqtBoundSignal_disconnect(PyObject *self, PyObject *args)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+
+    PyObject *py_slot = 0, *res_obj;
+    Chimera::Signature *signal_signature = bs->unbound_signal->parsed_signature;
+
+    if (!PyArg_ParseTuple(args, "|O:disconnect", &py_slot))
+        return 0;
+
+    // See if we are disconnecting everything from the overload.
+    if (!py_slot)
+    {
+        res_obj = disconnect(bs, 0, 0);
+
+        PyQtSlotProxy::deleteSlotProxies(bs->bound_qobject,
+                signal_signature->signature);
+
+        return res_obj;
+    }
+
+    // See if the slot is a signal.
+    if (PyObject_TypeCheck(py_slot, &qpycore_pyqtBoundSignal_Type))
+    {
+        qpycore_pyqtBoundSignal *slot_bs = (qpycore_pyqtBoundSignal *)py_slot;
+
+        return disconnect(bs, slot_bs->bound_qobject,
+                slot_bs->unbound_signal->parsed_signature->signature.constData());
+    }
+
+    if (!PyCallable_Check(py_slot))
+    {
+        sipBadCallableArg(0, py_slot);
+        return 0;
+    }
+
+    // See if the slot has been used directly (ie. it wraps a Qt slot) or if it
+    // has a proxy.
+    QObject *q_rx;
+    QByteArray slot_signature;
+
+    if (!get_receiver(py_slot, signal_signature, &q_rx, slot_signature))
+        return 0;
+
+    if (!slot_signature.isEmpty())
+        return disconnect(bs, q_rx, slot_signature.constData());
+
+    PyQtSlotProxy *proxy = PyQtSlotProxy::findSlotProxy(bs->bound_qobject,
+            signal_signature->signature, py_slot);
+
+    if (!proxy)
+    {
+        PyErr_Format(PyExc_TypeError, "'%s' object is not connected",
+                Py_TYPE(py_slot)->tp_name);
+
+        return 0;
+    }
+
+    res_obj = disconnect(bs, proxy,
+            PyQtSlotProxy::proxy_slot_signature.constData());
+
+    proxy->disable();
+
+    return res_obj;
+}
+
+
+// Disonnect a signal from a slot and handle any errors.
+static PyObject *disconnect(qpycore_pyqtBoundSignal *bs, QObject *qrx,
+        const char *slot)
+{
+    Chimera::Signature *signature = bs->unbound_signal->parsed_signature;
+    bool ok;
+
+    Py_BEGIN_ALLOW_THREADS
+    ok = QObject::disconnect(bs->bound_qobject,
+            signature->signature.constData(), qrx, slot);
+    Py_END_ALLOW_THREADS
+
+    if (!ok)
+    {
+        QByteArray tx_name = signature->name();
+
+        if (slot)
+        {
+            QByteArray rx_name = Chimera::Signature::name(slot);
+
+            PyErr_Format(PyExc_TypeError,
+                    "disconnect() failed between '%s' and '%s'",
+                    tx_name.constData() + 1, rx_name.constData() + 1);
+        }
+        else
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "disconnect() failed between '%s' and all its connections",
+                    tx_name.constData() + 1);
+        }
+
+        return 0;
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+// Emit a signal.
+static PyObject *pyqtBoundSignal_emit(PyObject *self, PyObject *args)
+{
+    qpycore_pyqtBoundSignal *bs = (qpycore_pyqtBoundSignal *)self;
+
+    if (!bs->bound_qobject->signalsBlocked())
+    {
+        Q_ASSERT(PyTuple_Check(args));
+
+        qpycore_pyqtSignal *ps = bs->unbound_signal;
+
+        // Use the emitter if there is one.
+        if (ps->emitter)
+        {
+            if (ps->emitter(bs->bound_qobject, args) < 0)
+                return 0;
+        }
+        else
+        {
+            Chimera::Signature *signature = ps->parsed_signature;
+            int mo_index = bs->bound_qobject->metaObject()->indexOfSignal(
+                    signature->signature.constData() + 1);
+
+            if (mo_index < 0)
+            {
+                PyErr_Format(PyExc_AttributeError,
+                        "'%s' does not have a signal with the signature %s",
+                        Py_TYPE(bs->bound_pyobject)->tp_name,
+                        signature->signature.constData() + 1);
+                return 0;
+            }
+
+            // Use the docstring if there is one and it is auto-generated.
+            const char *docstring = bs->unbound_signal->docstring;
+
+            if (!docstring || *docstring != '\1')
+            {
+                docstring = signature->py_signature.constData();
+            }
+            else
+            {
+                // Skip the auto-generated marker.
+                ++docstring;
+            }
+
+            if (!do_emit(bs->bound_qobject, mo_index, signature, docstring, args))
+                return 0;
+        }
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+// Emit a signal based on a parsed signature.
+static bool do_emit(QObject *qtx, int signal_index,
+        const Chimera::Signature *parsed_signature, const char *docstring,
+        PyObject *sigargs)
+{
+    const QList<const Chimera *> &args = parsed_signature->parsed_arguments;
+
+    if (args.size() != PyTuple_GET_SIZE(sigargs))
+    {
+        PyErr_Format(PyExc_TypeError,
+                "%s signal has %d argument(s) but %d provided", docstring,
+                args.size(), (int)PyTuple_GET_SIZE(sigargs));
+
+        return false;
+    }
+
+    // Convert the arguments.
+    QList<Chimera::Storage *> values;
+    void **argv = new void *[1 + args.size()];
+
+    argv[0] = 0;
+
+    QList<const Chimera *>::const_iterator it = args.constBegin();
+
+    for (int a = 0; it != args.constEnd(); ++a)
+    {
+        PyObject *arg_obj = PyTuple_GET_ITEM(sigargs, a);
+        Chimera::Storage *val = (*it)->fromPyObjectToStorage(arg_obj);
+
+        if (!val)
+        {
+            // Mimic SIP's exception text.
+            PyErr_Format(PyExc_TypeError,
+                    "%s.emit(): argument %d has unexpected type '%s'",
+                    docstring, a + 1, Py_TYPE(arg_obj)->tp_name);
+
+            delete[] argv;
+            qDeleteAll(values.constBegin(), values.constEnd());
+
+            return false;
+        }
+
+        argv[1 + a] = val->address();
+        values << val;
+
+        ++it;
+    }
+
+    Py_BEGIN_ALLOW_THREADS
+    QMetaObject::activate(qtx, signal_index, argv);
+    Py_END_ALLOW_THREADS
+
+    delete[] argv;
+    qDeleteAll(values.constBegin(), values.constEnd());
+
+    return true;
+}
+
+
+// Get the receiver QObject from the slot (if there is one) and its signature
+// (if it wraps a Qt slot).  Return true if there was no error.
+static bool get_receiver(PyObject *slot,
+        const Chimera::Signature *signal_signature, QObject **receiver,
+        QByteArray &slot_signature)
+{
+    PyObject *rx_self = 0, *decorations = 0;
+    QByteArray rx_name;
+    bool try_qt_slot = false;
+
+    // Assume there isn't a QObject receiver.
+    *receiver = 0;
+
+    if (PyMethod_Check(slot))
+    {
+        rx_self = PyMethod_GET_SELF(slot);
+
+        PyObject *f = PyMethod_GET_FUNCTION(slot);
+        Q_ASSERT(PyFunction_Check(f));
+
+        PyObject *f_name_obj = ((PyFunctionObject *)f)->func_name;
+        const char *f_name = sipString_AsASCIIString(&f_name_obj);
+        Q_ASSERT(f_name);
+
+        rx_name = f_name;
+        Py_DECREF(f_name_obj);
+
+        // See if this has been decorated.
+        decorations = PyObject_GetAttr(f, qpycore_dunder_pyqtsignature);
+
+        if (decorations)
+        {
+            try_qt_slot = true;
+
+            // It's convenient to do this here as it's not going to disappear.
+            Py_DECREF(decorations);
+        }
+
+        Py_XINCREF(rx_self);
+    }
+    else if (PyCFunction_Check(slot))
+    {
+        rx_self = PyCFunction_GET_SELF(slot);
+        rx_name = ((PyCFunctionObject *)slot)->m_ml->ml_name;
+
+        // We actually want the C++ name which may (in theory) be completely
+        // different.  However this will cope with the exec_ case which is
+        // probably good enough.
+        if (rx_name.endsWith('_'))
+            rx_name.chop(1);
+
+        try_qt_slot = true;
+
+        Py_XINCREF(rx_self);
+    }
+    else
+    {
+        static PyObject *partial = 0;
+
+        // Get the functools.partial type object if we haven't already got it.
+        if (!partial)
+        {
+            PyObject *functools = PyImport_ImportModule("functools");
+
+            if (functools)
+            {
+                partial = PyObject_GetAttrString(functools, "partial");
+                Py_DECREF(functools);
+            }
+        }
+
+        // If we know about functools.partial then remove the outer partials to
+        // get to the original function.
+        if (partial && PyObject_IsInstance(slot, partial) > 0)
+        {
+            PyObject *func = slot;
+
+            Py_INCREF(func);
+
+            do
+            {
+                PyObject *subfunc = PyObject_GetAttrString(func, "func");
+
+                Py_DECREF(func);
+
+                // This should never happen.
+                if (!subfunc)
+                    return false;
+
+                func = subfunc;
+            }
+            while (PyObject_IsInstance(func, partial) > 0);
+
+            if (PyMethod_Check(func))
+                rx_self = PyMethod_GET_SELF(func);
+            else if (PyCFunction_Check(func))
+                rx_self = PyCFunction_GET_SELF(func);
+
+            Py_XINCREF(rx_self);
+            Py_DECREF(func);
+        }
+    }
+ 
+    if (!rx_self)
+        return true;
+
+    int iserr = 0;
+    void *rx = sipForceConvertToType(rx_self, sipType_QObject, 0,
+            SIP_NO_CONVERTORS, 0, &iserr);
+
+    Py_DECREF(rx_self);
+
+    PyErr_Clear();
+
+    if (iserr)
+        return true;
+
+    *receiver = reinterpret_cast<QObject *>(rx);
+
+    // If there might be a Qt slot that can handle the arguments (or a subset
+    // of them) then use it.  Otherwise we will fallback to using a proxy.
+    if (try_qt_slot)
+    {
+        for (int ol = signal_signature->parsed_arguments.count(); ol >= 0; --ol)
+        {
+            // If there are decorations then we compare the signal's signature
+            // against them so that we distinguish between Python types that
+            // are passed to Qt as PyQt_PyObject objects.  Qt will not make the
+            // distinction.  If there are no decorations then let Qt determine
+            // if a slot is available.
+            if (decorations)
+                slot_signature = slot_signature_from_decorations(
+                        signal_signature, decorations, ol);
+            else
+                slot_signature = slot_signature_from_metaobject(
+                        signal_signature, (*receiver)->metaObject(), rx_name,
+                        ol);
+
+            if (!slot_signature.isEmpty())
+            {
+                // Prepend the magic slot marker.
+                slot_signature.prepend('1');
+                break;
+            }
+        }
+    }
+
+    return true;
+}
+
+
+// Return the full name and signature of a Qt slot that a signal can be
+// connected to, taking the slot decorators into account.
+static QByteArray slot_signature_from_decorations(
+        const Chimera::Signature *signal, PyObject *decorations, int nr_args)
+{
+    for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(decorations); ++i)
+    {
+        Chimera::Signature *slot = Chimera::Signature::fromPyObject(
+                PyList_GET_ITEM(decorations, i));
+
+        if (slot->parsed_arguments.count() != nr_args)
+            continue;
+
+        int a;
+
+        for (a = 0; a < nr_args; ++a)
+        {
+            const Chimera *sig_arg = signal->parsed_arguments.at(a);
+            const Chimera *slot_arg = slot->parsed_arguments.at(a);
+
+            // The same type names must be compatible.
+            if (sig_arg->name() == slot_arg->name())
+                continue;
+
+            enum Match {
+                // The type is PyQt_PyObject because it was explicitly
+                // specified as such as a string.
+                MatchesAll,
+
+                // The type is PyQt_PyObject because it was specified as a type
+                // object that needed wrapping.
+                MatchesPyType,
+
+                // The type is something other than PyQt_PyObject.
+                MatchesName
+            };
+
+            Match sig_match, slot_match;
+
+            if (sig_arg->name() != "PyQt_PyObject")
+                sig_match = MatchesName;
+            else
+                sig_match = sig_arg->py_type() ? MatchesPyType : MatchesAll;
+
+            if (slot_arg->name() != "PyQt_PyObject")
+                slot_match = MatchesName;
+            else
+                slot_match = slot_arg->py_type() ? MatchesPyType : MatchesAll;
+
+            // They are incompatible unless one is called PyQt_PyObject.
+            if (sig_match == MatchesName || slot_match == MatchesName)
+                break;
+
+            // They are compatible if neither was a Python type.
+            if (sig_match == MatchesAll || slot_match == MatchesAll)
+                continue;
+
+            // The signal type can be a sub-type of the slot type.
+            if (!PyType_IsSubtype((PyTypeObject *)sig_arg->py_type(), (PyTypeObject *)slot_arg->py_type()))
+                break;
+        }
+
+        if (a == nr_args)
+            return slot_signature(signal, slot->name(), nr_args);
+    }
+
+    return QByteArray();
+}
+
+
+// Return the full name and signature of a Qt slot that a signal can be
+// connected to, taking the Qt meta-object into account.
+static QByteArray slot_signature_from_metaobject(
+        const Chimera::Signature *signal_signature, const QMetaObject *slot_mo,
+        const QByteArray &slot_name, int nr_args)
+{
+    QByteArray slot_sig = slot_signature(signal_signature, slot_name, nr_args);
+
+    if (slot_mo->indexOfSlot(slot_sig.constData()) < 0)
+        slot_sig.clear();
+
+    return slot_sig;
+}
+
+
+// Return the full name and signature of the Qt slot that a signal would be
+// connected to.
+static QByteArray slot_signature(const Chimera::Signature *signal_signature,
+        const QByteArray &slot_name, int nr_args)
+{
+    QByteArray slot_sig = slot_name;
+
+    slot_sig.append('(');
+
+    for (int a = 0; a < nr_args; ++a)
+    {
+        if (a != 0)
+            slot_sig.append(',');
+
+        slot_sig.append(signal_signature->parsed_arguments.at(a)->name());
+    }
+
+    slot_sig.append(')');
+
+    return slot_sig;
+}
diff --git a/qpy/QtCore/qpycore_pyqtboundsignal.h b/qpy/QtCore/qpycore_pyqtboundsignal.h
new file mode 100644
index 0000000..cd6ad9a
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtboundsignal.h
@@ -0,0 +1,68 @@
+// This defines the interfaces for the pyqtBoundSignal type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_PYQTBOUNDSIGNAL_H
+#define _QPYCORE_PYQTBOUNDSIGNAL_H
+
+
+#include <Python.h>
+#include <sip.h>
+
+#include "qpycore_pyqtsignal.h"
+#include "qpycore_namespace.h"
+
+
+QT_BEGIN_NAMESPACE
+class QByteArray;
+class QObject;
+QT_END_NAMESPACE
+
+
+extern "C" {
+
+// This defines the structure of a bound PyQt signal.
+typedef struct {
+    PyObject_HEAD
+
+    // The unbound signal.
+    qpycore_pyqtSignal *unbound_signal;
+
+    // A borrowed reference to the wrapped QObject that is bound to the signal.
+    PyObject *bound_pyobject;
+
+    // The QObject that is bound to the signal.
+    QObject *bound_qobject;
+} qpycore_pyqtBoundSignal;
+
+
+extern PyTypeObject qpycore_pyqtBoundSignal_Type;
+
+}
+
+
+PyObject *qpycore_pyqtBoundSignal_New(qpycore_pyqtSignal *unbound_signal,
+        PyObject *bound_pyobject, QObject *bound_qobject);
+
+sipErrorState qpycore_get_receiver_slot_signature(PyObject *slot,
+        QObject *transmitter, const Chimera::Signature *signal_signature,
+        bool single_shot, QObject **receiver, QByteArray &slot_signature);
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_pyqtconfigure.cpp b/qpy/QtCore/qpycore_pyqtconfigure.cpp
new file mode 100644
index 0000000..1726c7c
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtconfigure.cpp
@@ -0,0 +1,269 @@
+// This implements the helper for QObject.pyqtConfigure().
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QByteArray>
+#include <QMetaObject>
+#include <QObject>
+#include <QVariant>
+
+#include "qpycore_api.h"
+#include "qpycore_chimera.h"
+#include "qpycore_pyqtboundsignal.h"
+
+#include "sipAPIQtCore.h"
+
+
+// The result of handling a keyword argument.
+enum ArgStatus
+{
+    AsError,
+    AsHandled,
+    AsUnknown
+};
+
+
+static ArgStatus handle_argument(PyObject *self, QObject *qobj,
+        PyObject *name_obj, PyObject *value_obj);
+
+
+// This is the helper for QObject.pyqtConfigure().
+PyObject *qpycore_pyqtconfigure(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    // Check there are no positional arguments.
+    if (PyTuple_Size(args) > 0)
+    {
+        PyErr_SetString(PyExc_TypeError,
+                "QObject.pyqtConfigure() has no positional arguments");
+        return 0;
+    }
+
+    // Get the QObject self.
+    QObject *qobj = reinterpret_cast<QObject *>(
+            sipGetCppPtr((sipSimpleWrapper *)self, sipType_QObject));
+
+    if (!qobj)
+        return 0;
+
+    PyObject *name_obj, *value_obj;
+    SIP_SSIZE_T pos = 0;
+
+    while (PyDict_Next(kwds, &pos, &name_obj, &value_obj))
+    {
+        ArgStatus as = handle_argument(self, qobj, name_obj, value_obj);
+
+        if (as == AsError)
+            return 0;
+
+        if (as == AsUnknown)
+        {
+#if PY_MAJOR_VERSION >= 3
+            PyErr_Format(PyExc_AttributeError,
+                    "'%S' is not the name of a Qt property or signal",
+                    name_obj);
+#else   
+            PyObject *name_s = PyObject_Str(name_obj);
+    
+            if (name_s != NULL)
+            {   
+                PyErr_Format(PyExc_AttributeError,
+                        "'%s' is not the name of a Qt property or signal", 
+                        PyString_AsString(name_s));
+
+                Py_DECREF(name_s);
+            }   
+#endif
+
+            return 0;
+        }
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+// This is the helper for the QObject %FinalisationCode.
+int qpycore_qobject_finalisation(PyObject *self, QObject *qobj, PyObject *kwds,
+        PyObject **updated_kwds)
+{
+    // Handle the trivial case.
+    if (!kwds)
+        return 0;
+
+    // The dict we will be removing handled arguments from, 0 if it needs to be
+    // created.
+    PyObject *unused = (updated_kwds ? 0 : kwds);
+
+    PyObject *name_obj, *value_obj;
+    SIP_SSIZE_T pos = 0;
+
+    while (PyDict_Next(kwds, &pos, &name_obj, &value_obj))
+    {
+        ArgStatus as = handle_argument(self, qobj, name_obj, value_obj);
+
+        if (as == AsError)
+            return -1;
+
+        if (as == AsHandled)
+        {
+            if (!unused)
+            {
+                unused = PyDict_Copy(kwds);
+
+                if (!unused)
+                    return -1;
+
+                *updated_kwds = unused;
+            }
+
+            if (PyDict_DelItem(unused, name_obj) < 0)
+            {
+                if (updated_kwds)
+                    Py_DECREF(unused);
+
+                return -1;
+            }
+        }
+    }
+
+    return 0;
+}
+
+
+// Handle a single keyword argument.
+static ArgStatus handle_argument(PyObject *self, QObject *qobj,
+        PyObject *name_obj, PyObject *value_obj)
+{
+    const QMetaObject *mo = qobj->metaObject();
+
+    // Get the name encoded name.
+    PyObject *enc_name_obj = name_obj;
+    const char *name = sipString_AsASCIIString(&enc_name_obj);
+
+    if (!name)
+        return AsError;
+
+    QByteArray enc_name(name);
+    Py_DECREF(enc_name_obj);
+
+    // See if it is a property.
+    int idx = mo->indexOfProperty(enc_name.constData());
+
+    if (idx >= 0)
+    {
+        QMetaProperty prop = mo->property(idx);
+
+        // A negative type means a QVariant property.
+        if (prop.userType() >= 0)
+        {
+            const Chimera *ct = Chimera::parse(prop);
+
+            if (!ct)
+            {
+                PyErr_Format(PyExc_TypeError,
+                        "'%s' keyword argument has an invalid type",
+                        enc_name.constData());
+
+                return AsError;
+            }
+
+            QVariant value;
+            bool valid = ct->fromPyObject(value_obj, &value);
+
+            delete ct;
+
+            if (!valid)
+                return AsError;
+
+            qobj->setProperty(enc_name.constData(), value);
+        }
+        else
+        {
+            int value_state, iserr = 0;
+
+            QVariant *value = reinterpret_cast<QVariant *>(
+                    sipForceConvertToType(value_obj, sipType_QVariant, 0,
+                            SIP_NOT_NONE, &value_state, &iserr));
+
+            if (iserr)
+                return AsError;
+
+            qobj->setProperty(enc_name.constData(), *value);
+
+            sipReleaseType(value, sipType_QVariant, value_state);
+        }
+    }
+    else
+    {
+        bool unknown = true;
+
+        // See if it is a signal.
+        PyObject *sig = PyObject_GetAttr(self, name_obj);
+
+        if (sig)
+        {
+            if (PyObject_TypeCheck(sig, &qpycore_pyqtBoundSignal_Type))
+            {
+                static PyObject *connect_obj = NULL;
+
+                if (!connect_obj)
+                {
+#if PY_MAJOR_VERSION >= 3
+                    connect_obj = PyUnicode_FromString("connect");
+#else
+                    connect_obj = PyString_FromString("connect");
+#endif
+
+                    if (!connect_obj)
+                    {
+                        Py_DECREF(sig);
+                        return AsError;
+                    }
+                }
+
+                // Connect the slot.
+                PyObject *res = PyObject_CallMethodObjArgs(sig, connect_obj,
+                        value_obj, 0);
+
+                if (!res)
+                {
+                    Py_DECREF(sig);
+                    return AsError;
+                }
+
+                Py_DECREF(res);
+
+                unknown = false;
+            }
+
+            Py_DECREF(sig);
+        }
+
+        if (unknown)
+        {
+            PyErr_Clear();
+            return AsUnknown;
+        }
+    }
+
+    return AsHandled;
+}
diff --git a/qpy/QtCore/qpycore_pyqtmethodproxy.cpp b/qpy/QtCore/qpycore_pyqtmethodproxy.cpp
new file mode 100644
index 0000000..3484546
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtmethodproxy.cpp
@@ -0,0 +1,286 @@
+// This contains the implementation of the pyqtMethodProxy type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <sip.h>
+
+#include <QGenericArgument>
+#include <QGenericReturnArgument>
+#include <QMetaMethod>
+#include <QObject>
+
+#include "qpycore_chimera.h"
+#include "qpycore_pyqtmethodproxy.h"
+
+
+// Forward declarations.
+extern "C" {
+static PyObject *pyqtMethodProxy_call(PyObject *self, PyObject *args,
+        PyObject *kw_args);
+static void pyqtMethodProxy_dealloc(PyObject *self);
+}
+
+static void parse_arg(PyObject *args, int arg_nr,
+        const QList<QByteArray> &types, QGenericArgument &arg,
+        Chimera::Storage **storage, bool &failed, const char *py_name);
+
+
+// The pyqtMethodProxy type object.
+PyTypeObject qpycore_pyqtMethodProxy_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    SIP_TPNAME_CAST("PyQt5.QtCore.pyqtMethodProxy"),    /* tp_name */
+    sizeof (qpycore_pyqtMethodProxy),   /* tp_basicsize */
+    0,                      /* tp_itemsize */
+    pyqtMethodProxy_dealloc,    /* tp_dealloc */
+    0,                      /* tp_print */
+    0,                      /* tp_getattr */
+    0,                      /* tp_setattr */
+    0,                      /* tp_compare */
+    0,                      /* tp_repr */
+    0,                      /* tp_as_number */
+    0,                      /* tp_as_sequence */
+    0,                      /* tp_as_mapping */
+    0,                      /* tp_hash */
+    pyqtMethodProxy_call,   /* tp_call */
+    0,                      /* tp_str */
+    0,                      /* tp_getattro */
+    0,                      /* tp_setattro */
+    0,                      /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,     /* tp_flags */
+    0,                      /* tp_doc */
+    0,                      /* tp_traverse */
+    0,                      /* tp_clear */
+    0,                      /* tp_richcompare */
+    0,                      /* tp_weaklistoffset */
+    0,                      /* tp_iter */
+    0,                      /* tp_iternext */
+    0,                      /* tp_methods */
+    0,                      /* tp_members */
+    0,                      /* tp_getset */
+    0,                      /* tp_base */
+    0,                      /* tp_dict */
+    0,                      /* tp_descr_get */
+    0,                      /* tp_descr_set */
+    0,                      /* tp_dictoffset */
+    0,                      /* tp_init */
+    0,                      /* tp_alloc */
+    PyType_GenericNew,      /* tp_new */
+    0,                      /* tp_free */
+    0,                      /* tp_is_gc */
+    0,                      /* tp_bases */
+    0,                      /* tp_mro */
+    0,                      /* tp_cache */
+    0,                      /* tp_subclasses */
+    0,                      /* tp_weaklist */
+    0,                      /* tp_del */
+    0,                      /* tp_version_tag */
+#if PY_VERSION_HEX >= 0x03040000
+    0,                      /* tp_finalize */
+#endif
+};
+
+
+// The type dealloc slot.
+static void pyqtMethodProxy_dealloc(PyObject *self)
+{
+    qpycore_pyqtMethodProxy *mp = (qpycore_pyqtMethodProxy *)self;
+
+    delete mp->py_name;
+
+    Py_TYPE(self)->tp_free(self);
+}
+
+
+// The type call slot.
+static PyObject *pyqtMethodProxy_call(PyObject *self, PyObject *args,
+        PyObject *kw_args)
+{
+    qpycore_pyqtMethodProxy *mp = (qpycore_pyqtMethodProxy *)self;
+
+    const char *py_name = mp->py_name->constData();
+
+    // Check for keyword arguments.
+    if (kw_args)
+    {
+        PyErr_Format(PyExc_TypeError,
+                "%s() does not support keyword arguments", py_name);
+        return 0;
+    }
+
+    QMetaMethod method = mp->qobject->metaObject()->method(mp->method_index);
+    QList<QByteArray> arg_types = method.parameterTypes();
+
+    if (PyTuple_Size(args) != arg_types.size())
+    {
+        PyErr_Format(PyExc_TypeError,
+                "%s() called with %zd arguments but %d expected",
+                py_name, PyTuple_Size(args), arg_types.size());
+        return 0;
+    }
+
+    // Parse the return type and the arguments.
+    QGenericReturnArgument ret;
+    QGenericArgument a0, a1, a2, a3, a4, a5, a6, a7, a8, a9;
+    Chimera::Storage *return_storage, *storage[10];
+    QByteArray return_type(method.typeName());
+    bool failed = false;
+
+    return_storage = 0;
+
+    if (!return_type.isEmpty())
+    {
+        const Chimera *ct = Chimera::parse(return_type);
+
+        if (!ct)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "unable to convert return value of %s from '%s' to a Python object",
+                    py_name, return_type.constData());
+            return 0;
+        }
+
+        return_storage = ct->storageFactory();
+
+        ret = QGenericReturnArgument(return_type.constData(),
+                return_storage->address());
+    }
+
+    parse_arg(args, 0, arg_types, a0, storage, failed, py_name);
+    parse_arg(args, 1, arg_types, a1, storage, failed, py_name);
+    parse_arg(args, 2, arg_types, a2, storage, failed, py_name);
+    parse_arg(args, 3, arg_types, a3, storage, failed, py_name);
+    parse_arg(args, 4, arg_types, a4, storage, failed, py_name);
+    parse_arg(args, 5, arg_types, a5, storage, failed, py_name);
+    parse_arg(args, 6, arg_types, a6, storage, failed, py_name);
+    parse_arg(args, 7, arg_types, a7, storage, failed, py_name);
+    parse_arg(args, 8, arg_types, a8, storage, failed, py_name);
+    parse_arg(args, 9, arg_types, a9, storage, failed, py_name);
+
+    // Invoke the method.
+    PyObject *result = 0;
+
+    if (!failed)
+    {
+        failed = !method.invoke(mp->qobject, ret, a0, a1, a2, a3, a4, a5, a6,
+                a7, a8, a9);
+
+        if (failed)
+        {
+            PyErr_Format(PyExc_TypeError, "invocation of %s() failed", py_name);
+        }
+        else if (return_storage)
+        {
+            result = return_storage->toPyObject();
+        }
+        else
+        {
+            result = Py_None;
+            Py_INCREF(result);
+        }
+    }
+
+    // Release any storage.
+    if (return_storage)
+    {
+        delete return_storage->type();
+        delete return_storage;
+    }
+
+    for (int i = 0; i < 10; ++i)
+    {
+        Chimera::Storage *st = storage[i];
+
+        if (st)
+        {
+            delete st->type();
+            delete st;
+        }
+    }
+
+    return result;
+}
+
+
+// Convert a Python object to a QGenericArgument.
+static void parse_arg(PyObject *args, int arg_nr,
+        const QList<QByteArray> &types, QGenericArgument &arg,
+        Chimera::Storage **storage, bool &failed, const char *py_name)
+{
+    // Initialise so that we can safely release later.
+    storage[arg_nr] = 0;
+
+    // If we have already failed then there is nothing to do.
+    if (failed)
+        return;
+
+    // If we have run out of arguments then there is nothing to do.
+    if (arg_nr >= types.size())
+        return;
+
+    PyObject *py_arg = PyTuple_GET_ITEM(args, arg_nr);
+    const QByteArray &cpp_type = types.at(arg_nr);
+
+    const Chimera *ct = Chimera::parse(cpp_type);
+    Chimera::Storage *st;
+
+    if (ct)
+        st = ct->fromPyObjectToStorage(py_arg);
+    else
+        st = 0;
+
+    if (!st)
+    {
+        if (ct)
+            delete ct;
+
+        PyErr_Format(PyExc_TypeError,
+                "unable to convert argument %d of %s from '%s' to '%s'",
+                arg_nr, py_name, Py_TYPE(py_arg)->tp_name,
+                cpp_type.constData());
+
+        failed = true;
+        return;
+    }
+
+    storage[arg_nr] = st;
+
+    arg = QGenericArgument(cpp_type.constData(), st->address());
+}
+
+
+// Create a proxy for a bound introspected method.
+PyObject *qpycore_pyqtMethodProxy_New(QObject *qobject, int method_index,
+        const QByteArray &py_name)
+{
+    qpycore_pyqtMethodProxy *mp;
+
+    mp = (qpycore_pyqtMethodProxy *)PyType_GenericAlloc(
+            &qpycore_pyqtMethodProxy_Type, 0);
+
+    if (!mp)
+        return 0;
+
+    mp->qobject = qobject;
+    mp->method_index = method_index;
+    mp->py_name = new QByteArray(py_name);
+
+    return (PyObject *)mp;
+}
diff --git a/qpy/QtCore/qpycore_pyqtmethodproxy.h b/qpy/QtCore/qpycore_pyqtmethodproxy.h
new file mode 100644
index 0000000..d3d34bf
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtmethodproxy.h
@@ -0,0 +1,63 @@
+// This defines the interfaces for the pyqtMethodProxy type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_PYQTMETHODPROXY_H
+#define _QPYCORE_PYQTMETHODPROXY_H
+
+
+#include <Python.h>
+
+#include <QtGlobal>
+#include <QByteArray>
+
+#include "qpycore_namespace.h"
+
+
+QT_BEGIN_NAMESPACE
+class QObject;
+QT_END_NAMESPACE
+
+
+extern "C" {
+
+// This defines the structure of a pyqtMethodProxy object.
+typedef struct _qpycore_pyqtMethodProxy {
+    PyObject_HEAD
+
+    // The QObject whose method being proxied.
+    QObject *qobject;
+
+    // The method index in the QObject's meta-object.
+    int method_index;
+
+    // The fully qualified Python name of the method.
+    const QByteArray *py_name;
+} qpycore_pyqtMethodProxy;
+
+extern PyTypeObject qpycore_pyqtMethodProxy_Type;
+
+}
+
+
+PyObject *qpycore_pyqtMethodProxy_New(QObject *qobject, int method_index,
+        const QByteArray &py_name);
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_pyqtproperty.cpp b/qpy/QtCore/qpycore_pyqtproperty.cpp
new file mode 100644
index 0000000..a720708
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtproperty.cpp
@@ -0,0 +1,563 @@
+// This is the implementation of pyqtProperty.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+#include <structmember.h>
+
+#include "qpycore_chimera.h"
+#include "qpycore_pyqtproperty.h"
+#include "qpycore_pyqtsignal.h"
+
+
+// Forward declarations.
+extern "C" {
+static PyObject *pyqtProperty_getter(PyObject *self, PyObject *getter);
+static PyObject *pyqtProperty_setter(PyObject *self, PyObject *setter);
+static PyObject *pyqtProperty_deleter(PyObject *self, PyObject *deleter);
+static PyObject *pyqtProperty_reset(PyObject *self, PyObject *reset);
+static PyObject *pyqtProperty_descr_get(PyObject *self, PyObject *obj,
+        PyObject *);
+static int pyqtProperty_descr_set(PyObject *self, PyObject *obj,
+        PyObject *value);
+static PyObject *pyqtProperty_call(PyObject *self, PyObject *args,
+        PyObject *kwds);
+static void pyqtProperty_dealloc(PyObject *self);
+static int pyqtProperty_init(PyObject *self, PyObject *args, PyObject *kwds);
+static int pyqtProperty_traverse(PyObject *self, visitproc visit, void *arg);
+}
+
+static qpycore_pyqtProperty *clone(qpycore_pyqtProperty *orig);
+
+
+// Doc-strings.
+PyDoc_STRVAR(pyqtProperty_doc,
+"pyqtProperty(type, fget=None, fset=None, freset=None, fdel=None, doc=None,\n"
+"        designable=True, scriptable=True, stored=True, user=False,\n"
+"        constant=False, final=False, notify=None,\n"
+"        revision=0) -> property attribute\n"
+"\n"
+"type is the type of the property.  It is either a type object or a string\n"
+"that is the name of a C++ type.\n"
+"freset is a function for resetting an attribute to its default value.\n"
+"designable sets the DESIGNABLE flag (the default is True for writable\n"
+"properties and False otherwise).\n"
+"scriptable sets the SCRIPTABLE flag.\n"
+"stored sets the STORED flag.\n"
+"user sets the USER flag.\n"
+"constant sets the CONSTANT flag.\n"
+"final sets the FINAL flag.\n"
+"notify is the NOTIFY signal.\n"
+"revision is the REVISION.\n"
+"The other parameters are the same as those required by the standard Python\n"
+"property type.  Properties defined using pyqtProperty behave as both Python\n"
+"and Qt properties."
+"\n"
+"Decorators can be used to define new properties or to modify existing ones.");
+
+PyDoc_STRVAR(getter_doc, "Descriptor to change the getter on a property.");
+PyDoc_STRVAR(setter_doc, "Descriptor to change the setter on a property.");
+PyDoc_STRVAR(deleter_doc, "Descriptor to change the deleter on a property.");
+PyDoc_STRVAR(reset_doc, "Descriptor to change the reset on a property.");
+
+
+// Define the attributes.
+static PyMemberDef pyqtProperty_members[] = {
+    {const_cast<char *>("type"), T_OBJECT,
+            offsetof(qpycore_pyqtProperty, pyqtprop_type), READONLY, 0},
+    {const_cast<char *>("fget"), T_OBJECT,
+            offsetof(qpycore_pyqtProperty, pyqtprop_get), READONLY, 0},
+    {const_cast<char *>("fset"), T_OBJECT,
+            offsetof(qpycore_pyqtProperty, pyqtprop_set), READONLY, 0},
+    {const_cast<char *>("fdel"), T_OBJECT,
+            offsetof(qpycore_pyqtProperty, pyqtprop_del), READONLY, 0},
+    {const_cast<char *>("freset"), T_OBJECT,
+            offsetof(qpycore_pyqtProperty, pyqtprop_reset), READONLY, 0},
+    {const_cast<char *>("__doc__"), T_OBJECT,
+            offsetof(qpycore_pyqtProperty, pyqtprop_doc), READONLY, 0},
+    {0, 0, 0, 0, 0}
+};
+
+
+// Define the methods.
+static PyMethodDef pyqtProperty_methods[] = {
+    {"getter", pyqtProperty_getter, METH_O, getter_doc},
+    {"read", pyqtProperty_getter, METH_O, getter_doc},
+    {"setter", pyqtProperty_setter, METH_O, setter_doc},
+    {"write", pyqtProperty_setter, METH_O, setter_doc},
+    {"deleter", pyqtProperty_deleter, METH_O, deleter_doc},
+    {"reset", pyqtProperty_reset, METH_O, reset_doc},
+    {0, 0, 0, 0}
+};
+
+
+// This implements the PyQt version of the standard Python property type.
+PyTypeObject qpycore_pyqtProperty_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    SIP_TPNAME_CAST("PyQt5.QtCore.pyqtProperty"),
+    sizeof (qpycore_pyqtProperty),
+    0,
+    pyqtProperty_dealloc,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    pyqtProperty_call,
+    0,
+    PyObject_GenericGetAttr,
+    0,
+    0,
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC|Py_TPFLAGS_BASETYPE,
+    pyqtProperty_doc,
+    pyqtProperty_traverse,
+    0,
+    0,
+    0,
+    0,
+    0,
+    pyqtProperty_methods,
+    pyqtProperty_members,
+    0,
+    0,
+    0,
+    pyqtProperty_descr_get,
+    pyqtProperty_descr_set,
+    0,
+    pyqtProperty_init,
+    PyType_GenericAlloc,
+    PyType_GenericNew,
+    PyObject_GC_Del,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+#if PY_VERSION_HEX >= 0x03040000
+    0,
+#endif
+};
+
+
+// This is the sequence number to allocate to the next PyQt property to be
+// defined.  This ensures that properties appear in the QMetaObject in the same
+// order that they are defined in Python.
+static uint pyqtprop_sequence_nr = 0;
+
+
+// The pyqtProperty dealloc function.
+static void pyqtProperty_dealloc(PyObject *self)
+{
+    qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)self;
+
+    PyObject_GC_UnTrack(self);
+
+    Py_XDECREF(pp->pyqtprop_get);
+    Py_XDECREF(pp->pyqtprop_set);
+    Py_XDECREF(pp->pyqtprop_del);
+    Py_XDECREF(pp->pyqtprop_doc);
+    Py_XDECREF(pp->pyqtprop_reset);
+    Py_XDECREF(pp->pyqtprop_notify);
+    Py_XDECREF(pp->pyqtprop_type);
+
+    delete pp->pyqtprop_parsed_type;
+
+    Py_TYPE(self)->tp_free(self);
+}
+
+
+// The descriptor getter.
+static PyObject *pyqtProperty_descr_get(PyObject *self, PyObject *obj,
+        PyObject *)
+{
+    qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)self;
+
+    if (!obj || obj == Py_None)
+    {
+        Py_INCREF(self);
+        return self;
+    }
+
+    if (!pp->pyqtprop_get)
+    {
+        PyErr_SetString(PyExc_AttributeError, "unreadable attribute");
+        return 0;
+    }
+
+    return PyObject_CallFunction(pp->pyqtprop_get, const_cast<char *>("(O)"),
+            obj);
+}
+
+
+// The descriptor setter.
+static int pyqtProperty_descr_set(PyObject *self, PyObject *obj,
+        PyObject *value)
+{
+    qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)self;
+    PyObject *func, *res;
+
+    func = (value ? pp->pyqtprop_set : pp->pyqtprop_del);
+
+    if (!func)
+    {
+        PyErr_SetString(PyExc_AttributeError,
+                (value ? "can't set attribute" : "can't delete attribute"));
+        return -1;
+    }
+
+    if (value)
+        res = PyObject_CallFunction(func, const_cast<char *>("(OO)"), obj,
+                value);
+    else
+        res = PyObject_CallFunction(func, const_cast<char *>("(O)"), obj);
+
+    if (!res)
+        return -1;
+
+    Py_DECREF(res);
+    return 0;
+}
+
+
+// The pyqtProperty traverse function.
+static int pyqtProperty_traverse(PyObject *self, visitproc visit, void *arg)
+{
+    qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)self;
+    int vret;
+
+    if (pp->pyqtprop_get)
+    {
+        vret = visit(pp->pyqtprop_get, arg);
+
+        if (vret != 0)
+            return vret;
+    }
+
+    if (pp->pyqtprop_set)
+    {
+        vret = visit(pp->pyqtprop_set, arg);
+
+        if (vret != 0)
+            return vret;
+    }
+
+    if (pp->pyqtprop_del)
+    {
+        vret = visit(pp->pyqtprop_del, arg);
+
+        if (vret != 0)
+            return vret;
+    }
+
+    if (pp->pyqtprop_doc)
+    {
+        vret = visit(pp->pyqtprop_doc, arg);
+
+        if (vret != 0)
+            return vret;
+    }
+
+    if (pp->pyqtprop_reset)
+    {
+        vret = visit(pp->pyqtprop_reset, arg);
+
+        if (vret != 0)
+            return vret;
+    }
+
+    if (pp->pyqtprop_notify)
+    {
+        vret = visit(pp->pyqtprop_notify, arg);
+
+        if (vret != 0)
+            return vret;
+    }
+
+    if (pp->pyqtprop_type)
+    {
+        vret = visit(pp->pyqtprop_type, arg);
+
+        if (vret != 0)
+            return vret;
+    }
+
+    return 0;
+}
+
+
+// The pyqtProperty init function.
+static int pyqtProperty_init(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    PyObject *type, *get = 0, *set = 0, *reset = 0, *del = 0, *doc = 0,
+            *notify = 0;
+    int scriptable = 1, stored = 1, user = 0, constant = 0, final = 0;
+    int designable = 1, revision = 0;
+    static const char *kwlist[] = {"type", "fget", "fset", "freset", "fdel",
+            "doc", "designable", "scriptable", "stored", "user", "constant",
+            "final", "notify", "revision", 0};
+    qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)self;
+
+    pp->pyqtprop_sequence = pyqtprop_sequence_nr++;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds,
+            "O|OOOOOiiiiiiO!i:pyqtProperty",
+            const_cast<char **>(kwlist), &type, &get, &set, &reset, &del, &doc,
+            &designable, &scriptable, &stored, &user, &constant, &final,
+            &qpycore_pyqtSignal_Type, &notify, &revision))
+        return -1;
+
+    if (get == Py_None)
+        get = 0;
+
+    if (set == Py_None)
+        set = 0;
+
+    if (del == Py_None)
+        del = 0;
+
+    if (reset == Py_None)
+        reset = 0;
+
+    if (notify == Py_None)
+        notify = 0;
+
+    // Parse the type.
+    const Chimera *ptype = Chimera::parse(type);
+
+    if (!ptype)
+    {
+        Chimera::raiseParseException(type, "a property");
+        return -1;
+    }
+
+    pp->pyqtprop_parsed_type = ptype;
+
+    Py_XINCREF(get);
+    Py_XINCREF(set);
+    Py_XINCREF(del);
+    Py_XINCREF(doc);
+    Py_XINCREF(reset);
+    Py_XINCREF(notify);
+    Py_INCREF(type);
+
+    /* If no docstring was given and the getter has one, then use it. */
+    if ((!doc || doc == Py_None) && get)
+    {
+        PyObject *get_doc = PyObject_GetAttrString(get, "__doc__");
+
+        if (get_doc)
+        {
+            Py_XDECREF(doc);
+            doc = get_doc;
+        }
+        else
+        {
+            PyErr_Clear();
+        }
+    }
+
+    pp->pyqtprop_get = get;
+    pp->pyqtprop_set = set;
+    pp->pyqtprop_del = del;
+    pp->pyqtprop_doc = doc;
+    pp->pyqtprop_reset = reset;
+    pp->pyqtprop_notify = notify;
+    pp->pyqtprop_type = type;
+
+    // ResolveEditable is always set.
+    unsigned flags = 0x00080000;
+
+    if (designable)
+        flags |= 0x00001000;
+
+    if (scriptable)
+        flags |= 0x00004000;
+
+    if (stored)
+        flags |= 0x00010000;
+
+    if (user)
+        flags |= 0x00100000;
+
+    if (constant)
+        flags |= 0x00000400;
+
+    if (final)
+        flags |= 0x00000800;
+
+    pp->pyqtprop_flags = flags;
+
+    pp->pyqtprop_revision = revision;
+
+    return 0;
+}
+
+
+// Calling the property is a shorthand way of changing the getter.
+static PyObject *pyqtProperty_call(PyObject *self, PyObject *args,
+        PyObject *kwds)
+{
+    PyObject *get;
+    static const char *kwlist[] = {"fget", 0};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:pyqtProperty",
+            const_cast<char **>(kwlist), &get))
+        return 0;
+
+    return pyqtProperty_getter(self, get);
+}
+
+
+// Return a copy of the property with a different getter.
+static PyObject *pyqtProperty_getter(PyObject *self, PyObject *getter)
+{
+    qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)self;
+
+    pp = clone(pp);
+
+    if (pp)
+    {
+        Py_XDECREF(pp->pyqtprop_get);
+
+        if (getter == Py_None)
+            getter = 0;
+        else
+            Py_INCREF(getter);
+
+        pp->pyqtprop_get = getter;
+    }
+
+    return (PyObject *)pp;
+}
+
+
+// Return a copy of the property with a different setter.
+static PyObject *pyqtProperty_setter(PyObject *self, PyObject *setter)
+{
+    qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)self;
+
+    pp = clone(pp);
+
+    if (pp)
+    {
+        Py_XDECREF(pp->pyqtprop_set);
+
+        if (setter == Py_None)
+            setter = 0;
+        else
+            Py_INCREF(setter);
+
+        pp->pyqtprop_set = setter;
+    }
+
+    return (PyObject *)pp;
+}
+
+
+// Return a copy of the property with a different deleter.
+static PyObject *pyqtProperty_deleter(PyObject *self, PyObject *deleter)
+{
+    qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)self;
+
+    pp = clone(pp);
+
+    if (pp)
+    {
+        Py_XDECREF(pp->pyqtprop_del);
+
+        if (deleter == Py_None)
+            deleter = 0;
+        else
+            Py_INCREF(deleter);
+
+        pp->pyqtprop_del = deleter;
+    }
+
+    return (PyObject *)pp;
+}
+
+
+// Return a copy of the property with a different reset.
+static PyObject *pyqtProperty_reset(PyObject *self, PyObject *reset)
+{
+    qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)self;
+
+    pp = clone(pp);
+
+    if (pp)
+    {
+        Py_XDECREF(pp->pyqtprop_reset);
+
+        if (reset == Py_None)
+            reset = 0;
+        else
+            Py_INCREF(reset);
+
+        pp->pyqtprop_reset = reset;
+    }
+
+    return (PyObject *)pp;
+}
+
+
+// Create a clone of a property.
+static qpycore_pyqtProperty *clone(qpycore_pyqtProperty *orig)
+{
+    qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)PyType_GenericNew(
+            Py_TYPE(orig), 0, 0);
+
+    if (pp)
+    {
+        pp->pyqtprop_get = orig->pyqtprop_get;
+        Py_XINCREF(pp->pyqtprop_get);
+
+        pp->pyqtprop_set = orig->pyqtprop_set;
+        Py_XINCREF(pp->pyqtprop_set);
+
+        pp->pyqtprop_del = orig->pyqtprop_del;
+        Py_XINCREF(pp->pyqtprop_del);
+
+        pp->pyqtprop_doc = orig->pyqtprop_doc;
+        Py_XINCREF(pp->pyqtprop_doc);
+
+        pp->pyqtprop_reset = orig->pyqtprop_reset;
+        Py_XINCREF(pp->pyqtprop_reset);
+
+        pp->pyqtprop_notify = orig->pyqtprop_notify;
+        Py_XINCREF(pp->pyqtprop_notify);
+
+        pp->pyqtprop_type = orig->pyqtprop_type;
+        Py_XINCREF(pp->pyqtprop_type);
+
+        pp->pyqtprop_parsed_type = new Chimera(*orig->pyqtprop_parsed_type);
+
+        pp->pyqtprop_flags = orig->pyqtprop_flags;
+        pp->pyqtprop_revision = orig->pyqtprop_revision;
+        pp->pyqtprop_sequence = orig->pyqtprop_sequence;
+    }
+
+    return pp;
+}
diff --git a/qpy/QtCore/qpycore_pyqtproperty.h b/qpy/QtCore/qpycore_pyqtproperty.h
new file mode 100644
index 0000000..0981058
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtproperty.h
@@ -0,0 +1,79 @@
+// This contains the definitions for the implementation of pyqtProperty.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_PYQTPROPERTY_H
+#define _QPYCORE_PYQTPROPERTY_H
+
+
+#include <Python.h>
+
+
+class Chimera;
+
+
+extern "C" {
+
+// This defines the structure of a PyQt property.
+typedef struct {
+    PyObject_HEAD
+
+    // The fget/getter/read callable.
+    PyObject *pyqtprop_get;
+
+    // The fset/setter/write callable.
+    PyObject *pyqtprop_set;
+
+    // The fdel/deleter callable.
+    PyObject *pyqtprop_del;
+
+    // The docstring.
+    PyObject *pyqtprop_doc;
+
+    // The freset/reset callable.
+    PyObject *pyqtprop_reset;
+
+    // The notify signal.
+    PyObject *pyqtprop_notify;
+
+    // The property type.
+    PyObject *pyqtprop_type;
+
+    // The parsed type information.
+    const Chimera *pyqtprop_parsed_type;
+
+    // The DESIGNABLE, SCRIPTABLE, STORED, USER, CONSTANT and FINAL flags.
+    unsigned pyqtprop_flags;
+
+    // The REVISION.
+    int pyqtprop_revision;
+
+    // The property's sequence number that determines the position of the
+    // property in the QMetaObject.
+    uint pyqtprop_sequence;
+} qpycore_pyqtProperty;
+
+
+// This implements the PyQt version of the standard Python property type.
+extern PyTypeObject qpycore_pyqtProperty_Type;
+
+}
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_pyqtpyobject.cpp b/qpy/QtCore/qpycore_pyqtpyobject.cpp
new file mode 100644
index 0000000..436a8d5
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtpyobject.cpp
@@ -0,0 +1,208 @@
+// This contains the support for Python objects and Qt's metatype system.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpycore_api.h"
+#include "qpycore_pyqtpyobject.h"
+
+#include "sipAPIQtCore.h"
+
+
+// The Qt metatype id.
+int PyQt_PyObject::metatype;
+
+// The current pickle protocol.
+PyObject *qpycore_pickle_protocol;
+
+
+// Wrap a Python object.
+PyQt_PyObject::PyQt_PyObject(PyObject *py)
+{
+    pyobject = py;
+
+    SIP_BLOCK_THREADS
+    Py_XINCREF(pyobject);
+    SIP_UNBLOCK_THREADS
+}
+
+
+// Create a new wrapper, with no Python object.  This is called by Qt's
+// metatype system.
+PyQt_PyObject::PyQt_PyObject()
+{
+    pyobject = 0;
+}
+
+
+// Create a copy of an existing wrapper.  This is called by Qt's metatype
+// system.
+PyQt_PyObject::PyQt_PyObject(const PyQt_PyObject &other)
+{
+    pyobject = other.pyobject;
+
+    SIP_BLOCK_THREADS
+    Py_XINCREF(pyobject);
+    SIP_UNBLOCK_THREADS
+}
+
+
+// Destroy a wrapper.
+PyQt_PyObject::~PyQt_PyObject()
+{
+    // Qt can still be tidying up after Python has gone so make sure that it
+    // hasn't.
+    if (Py_IsInitialized())
+    {
+        SIP_BLOCK_THREADS
+        Py_XDECREF(pyobject);
+        SIP_UNBLOCK_THREADS
+    }
+
+    pyobject = 0;
+}
+
+
+// Assignment operator.
+PyQt_PyObject &PyQt_PyObject::operator=(const PyQt_PyObject &other)
+{
+    pyobject = other.pyobject;
+
+    SIP_BLOCK_THREADS
+    Py_XINCREF(pyobject);
+    SIP_UNBLOCK_THREADS
+
+    return *this;
+}
+
+
+// Serialise operator.
+QDataStream &operator<<(QDataStream &out, const PyQt_PyObject &obj)
+{
+    PyObject *ser_obj = 0;
+    const char *ser = 0;
+    uint len = 0;
+
+    if (obj.pyobject)
+    {
+        static PyObject *dumps = 0;
+
+        SIP_BLOCK_THREADS
+
+        if (!dumps)
+        {
+            PyObject *pickle = PyImport_ImportModule("pickle");
+
+            if (pickle)
+            {
+                dumps = PyObject_GetAttrString(pickle, "dumps");
+                Py_DECREF(pickle);
+            }
+        }
+
+        if (dumps)
+        {
+            if (!qpycore_pickle_protocol)
+            {
+                Py_INCREF(Py_None);
+                qpycore_pickle_protocol = Py_None;
+            }
+
+            ser_obj = PyObject_CallFunctionObjArgs(dumps, obj.pyobject,
+                    qpycore_pickle_protocol, 0);
+
+            if (ser_obj)
+            {
+                if (SIPBytes_Check(ser_obj))
+                {
+                    ser = SIPBytes_AS_STRING(ser_obj);
+                    len = SIPBytes_GET_SIZE(ser_obj);
+                }
+                else
+                {
+                    Py_DECREF(ser_obj);
+                    ser_obj = 0;
+                }
+            }
+            else
+            {
+                PyErr_Print();
+            }
+        }
+
+        SIP_UNBLOCK_THREADS
+    }
+
+    out.writeBytes(ser, len);
+
+    if (ser_obj)
+    {
+        SIP_BLOCK_THREADS
+        Py_DECREF(ser_obj);
+        SIP_UNBLOCK_THREADS
+    }
+
+    return out;
+}
+
+
+// De-serialise operator.
+QDataStream &operator>>(QDataStream &in, PyQt_PyObject &obj)
+{
+    char *ser;
+    uint len;
+
+    in.readBytes(ser, len);
+
+    if (len)
+    {
+        static PyObject *loads = 0;
+
+        SIP_BLOCK_THREADS
+
+        if (!loads)
+        {
+            PyObject *pickle = PyImport_ImportModule("pickle");
+
+            if (pickle)
+            {
+                loads = PyObject_GetAttrString(pickle, "loads");
+                Py_DECREF(pickle);
+            }
+        }
+
+        if (loads)
+        {
+            PyObject *ser_obj = SIPBytes_FromStringAndSize(ser, len);
+
+            if (ser_obj)
+            {
+                obj.pyobject = PyObject_CallFunctionObjArgs(loads, ser_obj, 0);
+                Py_DECREF(ser_obj);
+            }
+        }
+
+        SIP_UNBLOCK_THREADS
+    }
+
+    delete[] ser;
+
+    return in;
+}
diff --git a/qpy/QtCore/qpycore_pyqtpyobject.h b/qpy/QtCore/qpycore_pyqtpyobject.h
new file mode 100644
index 0000000..a0c19fa
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtpyobject.h
@@ -0,0 +1,57 @@
+// This contains definitions related to the support for Python objects and Qt's
+// meta-type system.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_PYQTPYOBJECT_H
+#define _QPYCORE_PYQTPYOBJECT_H
+
+
+#include <Python.h>
+
+#include <QMetaType>
+#include <QDataStream>
+
+
+// This class is used to wrap a PyObject so it can be passed around Qt's
+// meta-type system while maintaining its reference count.
+class PyQt_PyObject
+{
+public:
+    PyQt_PyObject(PyObject *py);
+    PyQt_PyObject();
+    PyQt_PyObject(const PyQt_PyObject &other);
+    ~PyQt_PyObject();
+
+    PyQt_PyObject &operator=(const PyQt_PyObject &other);
+
+    // The Python object being wrapped.
+    PyObject *pyobject;
+    
+    // The Qt meta-type id.
+    static int metatype;
+};
+
+QDataStream &operator<<(QDataStream &out, const PyQt_PyObject &obj);
+QDataStream &operator>>(QDataStream &in, PyQt_PyObject &obj);
+
+Q_DECLARE_METATYPE(PyQt_PyObject)
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_pyqtsignal.cpp b/qpy/QtCore/qpycore_pyqtsignal.cpp
new file mode 100644
index 0000000..ed76b9b
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtsignal.cpp
@@ -0,0 +1,761 @@
+// This contains the implementation of the pyqtSignal type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QtGlobal>
+#include <QByteArray>
+#include <QMetaObject>
+
+#include "qpycore_chimera.h"
+#include "qpycore_misc.h"
+#include "qpycore_pyqtboundsignal.h"
+#include "qpycore_pyqtsignal.h"
+
+
+// Forward declarations.
+extern "C" {
+static PyObject *pyqtSignal_call(PyObject *self, PyObject *args, PyObject *kw);
+static void pyqtSignal_dealloc(PyObject *self);
+static PyObject *pyqtSignal_descr_get(PyObject *self, PyObject *obj,
+        PyObject *type);
+static int pyqtSignal_init(PyObject *self, PyObject *args, PyObject *kwd_args);
+static PyObject *pyqtSignal_repr(PyObject *self);
+static PyObject *pyqtSignal_mp_subscript(PyObject *self, PyObject *subscript);
+static PyObject *pyqtSignal_get_doc(PyObject *self, void *);
+}
+
+static int init_signal_from_types(qpycore_pyqtSignal *ps, const char *name,
+        const QList<QByteArray> *parameter_names, int revision,
+        PyObject *types);
+static void append_overload(qpycore_pyqtSignal *ps);
+static bool is_signal_name(const char *sig, const QByteArray &name);
+
+
+// Define the mapping methods.
+static PyMappingMethods pyqtSignal_as_mapping = {
+    0,                      /* mp_length */
+    pyqtSignal_mp_subscript,    /* mp_subscript */
+    0,                      /* mp_ass_subscript */
+};
+
+
+// The getters/setters.
+static PyGetSetDef pyqtSignal_getsets[] = {
+    {(char *)"__doc__", pyqtSignal_get_doc, NULL, NULL, NULL},
+    {NULL, NULL, NULL, NULL, NULL}
+};
+
+
+PyDoc_STRVAR(pyqtSignal_doc,
+"pyqtSignal(*types, name=str, revision=0, arguments=[]) -> signal\n"
+"\n"
+"types is normally a sequence of individual types.  Each type is either a\n"
+"type object or a string that is the name of a C++ type.  Alternatively\n"
+"each type could itself be a sequence of types each describing a different\n"
+"overloaded signal.\n"
+"name is the optional C++ name of the signal.  If it is not specified then\n"
+"the name of the class attribute that is bound to the signal is used.\n"
+"revision is the optional revision of the signal that is exported to QML.\n"
+"arguments is the option sequence of the names of the signal's arguments.\n");
+
+
+// The pyqtSignal type object.
+PyTypeObject qpycore_pyqtSignal_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    SIP_TPNAME_CAST("PyQt5.QtCore.pyqtSignal"), /* tp_name */
+    sizeof (qpycore_pyqtSignal),    /* tp_basicsize */
+    0,                      /* tp_itemsize */
+    pyqtSignal_dealloc,     /* tp_dealloc */
+    0,                      /* tp_print */
+    0,                      /* tp_getattr */
+    0,                      /* tp_setattr */
+    0,                      /* tp_compare */
+    pyqtSignal_repr,        /* tp_repr */
+    0,                      /* tp_as_number */
+    0,                      /* tp_as_sequence */
+    &pyqtSignal_as_mapping, /* tp_as_mapping */
+    0,                      /* tp_hash */
+    pyqtSignal_call,        /* tp_call */
+    0,                      /* tp_str */
+    0,                      /* tp_getattro */
+    0,                      /* tp_setattro */
+    0,                      /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,     /* tp_flags */
+    pyqtSignal_doc,         /* tp_doc */
+    0,                      /* tp_traverse */
+    0,                      /* tp_clear */
+    0,                      /* tp_richcompare */
+    0,                      /* tp_weaklistoffset */
+    0,                      /* tp_iter */
+    0,                      /* tp_iternext */
+    0,                      /* tp_methods */
+    0,                      /* tp_members */
+    pyqtSignal_getsets,     /* tp_getset */
+    0,                      /* tp_base */
+    0,                      /* tp_dict */
+    pyqtSignal_descr_get,   /* tp_descr_get */
+    0,                      /* tp_descr_set */
+    0,                      /* tp_dictoffset */
+    pyqtSignal_init,        /* tp_init */
+    0,                      /* tp_alloc */
+    PyType_GenericNew,      /* tp_new */
+    0,                      /* tp_free */
+    0,                      /* tp_is_gc */
+    0,                      /* tp_bases */
+    0,                      /* tp_mro */
+    0,                      /* tp_cache */
+    0,                      /* tp_subclasses */
+    0,                      /* tp_weaklist */
+    0,                      /* tp_del */
+    0,                      /* tp_version_tag */
+#if PY_VERSION_HEX >= 0x03040000
+    0,                      /* tp_finalize */
+#endif
+};
+
+
+// The __doc__ getter.
+static PyObject *pyqtSignal_get_doc(PyObject *self, void *)
+{
+    qpycore_pyqtSignal *ps = (qpycore_pyqtSignal *)self;
+
+    // Make sure we have the default signal.
+    ps = ps->default_signal;
+
+    QByteArray doc;
+
+    // Get any docstrings from any non-signal overloads.
+    if (ps->non_signals && ps->non_signals->ml_doc)
+    {
+        doc.append('\n');
+        doc.append(ps->non_signals->ml_doc);
+    }
+
+    // Get any docstrings from the signals.
+    do
+    {
+        const char *docstring = ps->docstring;
+
+        if (docstring)
+        {
+            if (*docstring == '\1')
+                ++docstring;
+
+            doc.append('\n');
+            doc.append(docstring);
+            doc.append(" [signal]");
+        }
+
+        ps = ps->next;
+    }
+    while (ps);
+
+    if (doc.isEmpty())
+    {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    return
+#if PY_MAJOR_VERSION >= 3
+        PyUnicode_FromString
+#else
+        PyString_FromString
+#endif
+            (doc.constData() + 1);
+}
+
+
+// The type repr slot.
+static PyObject *pyqtSignal_repr(PyObject *self)
+{
+    qpycore_pyqtSignal *ps = (qpycore_pyqtSignal *)self;
+
+    return
+#if PY_MAJOR_VERSION >= 3
+        PyUnicode_FromFormat
+#else
+        PyString_FromFormat
+#endif
+            ("<unbound signal %s>", ps->parsed_signature->name().constData() + 1);
+}
+
+
+// The type call slot.
+static PyObject *pyqtSignal_call(PyObject *self, PyObject *args, PyObject *kw)
+{
+    return qpycore_call_signal_overload((qpycore_pyqtSignal *)self, 0, args,
+            kw);
+}
+
+
+// The type dealloc slot.
+static void pyqtSignal_dealloc(PyObject *self)
+{
+    qpycore_pyqtSignal *ps = (qpycore_pyqtSignal *)self;
+
+    delete ps->parsed_signature;
+
+    if (ps->parameter_names)
+        delete ps->parameter_names;
+
+    // If we are the default then we own the overloads references.
+    if (ps == ps->default_signal)
+    {
+        qpycore_pyqtSignal *next = ps->next;
+
+        while (next)
+        {
+            ps = next;
+            next = ps->next;
+
+            Py_DECREF((PyObject *)ps);
+        }
+    }
+
+    Py_TYPE(self)->tp_free(self);
+}
+
+
+// The type descriptor get slot.
+static PyObject *pyqtSignal_descr_get(PyObject *self, PyObject *obj,
+        PyObject *)
+{
+    qpycore_pyqtSignal *ps = (qpycore_pyqtSignal *)self;
+
+    // Return the unbound signal if there is nothing to bind it to.
+    if (obj == NULL || obj == Py_None)
+    {
+        Py_INCREF(self);
+        return self;
+    }
+
+    // Get the QObject.
+    int is_err = 0;
+    void *qobject = sipForceConvertToType(obj, sipType_QObject, 0,
+            SIP_NO_CONVERTORS, 0, &is_err);
+
+    if (is_err)
+        return 0;
+
+    // Return the bound signal.
+    return qpycore_pyqtBoundSignal_New(ps, obj,
+            reinterpret_cast<QObject *>(qobject));
+}
+
+
+// The type init slot.
+static int pyqtSignal_init(PyObject *self, PyObject *args, PyObject *kwd_args)
+{
+    qpycore_pyqtSignal *ps = (qpycore_pyqtSignal *)self;
+
+    // Get the keyword arguments.
+    PyObject *name_obj = 0;
+    const char *name = 0;
+    int revision = 0;
+    QList<QByteArray> *parameter_names = 0;
+
+    if (kwd_args)
+    {
+        SIP_SSIZE_T pos = 0;
+        PyObject *key, *value;
+
+        while (PyDict_Next(kwd_args, &pos, &key, &value))
+        {
+#if PY_MAJOR_VERSION >= 3
+            if (PyUnicode_CompareWithASCIIString(key, "name") == 0)
+#else
+            Q_ASSERT(PyString_Check(key));
+
+            if (qstrcmp(PyString_AS_STRING(key), "name") == 0)
+#endif
+            {
+                name_obj = value;
+                name = sipString_AsASCIIString(&name_obj);
+
+                if (!name)
+                {
+                    PyErr_Format(PyExc_TypeError,
+                            "signal 'name' must be a str, not %s",
+                            Py_TYPE(value)->tp_name);
+
+                    return -1;
+                }
+            }
+#if PY_MAJOR_VERSION >= 3
+            else if (PyUnicode_CompareWithASCIIString(key, "revision") == 0)
+#else
+            else if (qstrcmp(PyString_AS_STRING(key), "revision") == 0)
+#endif
+            {
+                PyErr_Clear();
+
+                revision = SIPLong_AsLong(value);
+
+                if (PyErr_Occurred())
+                {
+                    PyErr_Format(PyExc_TypeError,
+                            "signal 'revision' must be an int, not %s",
+                            Py_TYPE(value)->tp_name);
+
+                    Py_XDECREF(name_obj);
+                    return -1;
+                }
+            }
+#if PY_MAJOR_VERSION >= 3
+            else if (PyUnicode_CompareWithASCIIString(key, "arguments") == 0)
+#else
+            else if (qstrcmp(PyString_AS_STRING(key), "arguments") == 0)
+#endif
+            {
+                bool ok = true;
+
+                if (PySequence_Check(value))
+                {
+                    SIP_SSIZE_T len = PySequence_Size(value);
+
+                    parameter_names = new QList<QByteArray>;
+
+                    for (SIP_SSIZE_T i = 0; i < len; ++i)
+                    {
+                        PyObject *py_attr = PySequence_ITEM(value, i);
+
+                        if (!py_attr)
+                        {
+                            ok = false;
+                            break;
+                        }
+
+                        PyObject *py_ascii_attr = py_attr;
+                        const char *attr = sipString_AsASCIIString(
+                                &py_ascii_attr);
+
+                        Py_DECREF(py_attr);
+
+                        if (!attr)
+                        {
+                            ok = false;
+                            break;
+                        }
+
+                        parameter_names->append(QByteArray(attr));
+
+                        Py_DECREF(py_ascii_attr);
+                    }
+                }
+                else
+                {
+                    ok = false;
+                }
+
+                if (!ok)
+                {
+                    PyErr_Format(PyExc_TypeError,
+                            "signal 'attribute_names' must be a sequence of str, not %s",
+                            Py_TYPE(value)->tp_name);
+
+                    if (parameter_names)
+                        delete parameter_names;
+
+                    Py_XDECREF(name_obj);
+                    return -1;
+                }
+            }
+            else
+            {
+#if PY_MAJOR_VERSION >= 3
+                PyErr_Format(PyExc_TypeError,
+                        "pyqtSignal() got an unexpected keyword argument '%U'",
+                        key);
+#else
+                PyErr_Format(PyExc_TypeError,
+                        "pyqtSignal() got an unexpected keyword argument '%s'",
+                        PyString_AS_STRING(key));
+#endif
+
+                Py_XDECREF(name_obj);
+                return -1;
+            }
+        }
+    }
+
+    // If there is at least one argument and it is a sequence then assume all
+    // arguments are sequences.  Unfortunately a string is also a sequence so
+    // check for tuples and lists explicitly.
+    if (PyTuple_GET_SIZE(args) > 0 && (PyTuple_Check(PyTuple_GET_ITEM(args, 0)) || PyList_Check(PyTuple_GET_ITEM(args, 0))))
+    {
+        for (SIP_SSIZE_T i = 0; i < PyTuple_GET_SIZE(args); ++i)
+        {
+            PyObject *types = PySequence_Tuple(PyTuple_GET_ITEM(args, i));
+
+            if (!types)
+            {
+                PyErr_SetString(PyExc_TypeError,
+                        "pyqtSignal() argument expected to be sequence of types");
+
+                if (name)
+                {
+                    Py_DECREF(name_obj);
+                }
+
+                return -1;
+            }
+
+            int rc;
+
+            if (i == 0)
+            {
+                // The first is the default.
+                rc = init_signal_from_types(ps, name, parameter_names,
+                        revision, types);
+            }
+            else
+            {
+                qpycore_pyqtSignal *overload = (qpycore_pyqtSignal *)PyType_GenericNew(&qpycore_pyqtSignal_Type, 0, 0);
+
+                if (!overload)
+                {
+                    rc = -1;
+                }
+                else if ((rc = init_signal_from_types(overload, name, 0, revision, types)) < 0)
+                {
+                    Py_DECREF((PyObject *)overload);
+                }
+                else
+                {
+                    overload->default_signal = ps;
+                    append_overload(overload);
+                }
+            }
+
+            Py_DECREF(types);
+
+            if (rc < 0)
+            {
+                if (name)
+                {
+                    Py_DECREF(name_obj);
+                }
+
+                return -1;
+            }
+        }
+    }
+    else if (init_signal_from_types(ps, name, parameter_names, revision, args) < 0)
+    {
+        if (name)
+        {
+            Py_DECREF(name_obj);
+        }
+
+        return -1;
+    }
+
+    if (name)
+    {
+        Py_DECREF(name_obj);
+    }
+
+    return 0;
+}
+
+
+// The mapping subscript slot.
+static PyObject *pyqtSignal_mp_subscript(PyObject *self, PyObject *subscript)
+{
+    qpycore_pyqtSignal *ps = (qpycore_pyqtSignal *)self;
+
+    PyObject *sig = (PyObject *)qpycore_find_signal(ps, subscript,
+            "an unbound signal type argument");
+
+    Py_XINCREF(sig);
+
+    return sig;
+}
+
+
+// Create a new signal instance.
+qpycore_pyqtSignal *qpycore_pyqtSignal_New(const char *signature, bool *fatal)
+{
+    // Assume any error is fatal.
+    if (fatal)
+        *fatal = true;
+
+    Chimera::Signature *parsed_signature = Chimera::parse(signature,
+                "a signal argument");
+
+    // At first glance the parse should never fail because the signature
+    // originates from the .sip file.  However it might if it includes a type
+    // that has been forward declared, but not yet defined.  The only example
+    // in PyQt is the declaration of QWidget by QSignalMapper.  Therefore we
+    // assume the error isn't fatal.
+    if (!parsed_signature)
+    {
+        if (fatal)
+            *fatal = false;
+
+        return 0;
+    }
+
+    parsed_signature->signature.prepend('2');
+
+    // Create and initialise the signal.
+    qpycore_pyqtSignal *ps = (qpycore_pyqtSignal *)PyType_GenericNew(
+            &qpycore_pyqtSignal_Type, 0, 0);
+
+    if (!ps)
+    {
+        delete parsed_signature;
+        return 0;
+    }
+
+    ps->default_signal = ps;
+    ps->next = 0;
+    ps->docstring = 0;
+    ps->parameter_names = 0;
+    ps->revision = 0;
+    ps->parsed_signature = parsed_signature;
+    ps->emitter = 0;
+    ps->non_signals = 0;
+
+    return ps;
+}
+
+
+// Find an overload that matches a subscript.
+qpycore_pyqtSignal *qpycore_find_signal(qpycore_pyqtSignal *ps,
+        PyObject *subscript, const char *context)
+{
+    // Make sure the subscript is a tuple.
+    PyObject *args;
+
+    if (PyTuple_Check(subscript))
+    {
+        args = subscript;
+    }
+    else
+    {
+        args = PyTuple_New(1);
+
+        if (!args)
+            return 0;
+
+        PyTuple_SET_ITEM(args, 0, subscript);
+    }
+
+    Py_INCREF(subscript);
+
+    // Parse the subscript as a tuple of types.
+    Chimera::Signature *ss_signature = Chimera::parse(args, 0, context);
+
+    Py_DECREF(args);
+
+    if (!ss_signature)
+        return 0;
+
+    // Search for an overload with this signature.
+    qpycore_pyqtSignal *overload = ps->default_signal;
+
+    do
+    {
+        if (overload->parsed_signature->arguments() == ss_signature->signature)
+            break;
+
+        overload = overload->next;
+    }
+    while (overload);
+
+    delete ss_signature;
+
+    if (!overload)
+        PyErr_SetString(PyExc_KeyError,
+                "there is no matching overloaded signal");
+
+    return overload;
+}
+
+
+// Initialise a signal when given a tuple of types.
+static int init_signal_from_types(qpycore_pyqtSignal *ps, const char *name,
+        const QList<QByteArray> *parameter_names, int revision,
+        PyObject *types)
+{
+    Chimera::Signature *parsed_signature = Chimera::parse(types, name,
+            "a pyqtSignal() type argument");
+
+    if (!parsed_signature)
+        return -1;
+
+    if (name)
+        parsed_signature->signature.prepend('2');
+
+    ps->default_signal = ps;
+    ps->next = 0;
+    ps->docstring = 0;
+    ps->parameter_names = parameter_names;
+    ps->revision = revision;
+    ps->parsed_signature = parsed_signature;
+    ps->emitter = 0;
+    ps->non_signals = 0;
+
+    return 0;
+}
+
+
+// Append an overload to the default signal's list.
+static void append_overload(qpycore_pyqtSignal *ps)
+{
+    // Append to the list of overloads.
+    qpycore_pyqtSignal **tailp = &ps->default_signal->next;
+
+    while (*tailp)
+        tailp = &(*tailp)->next;
+
+    *tailp = ps;
+}
+
+
+// Give a signal a name if it hasn't already got one.
+void qpycore_set_signal_name(qpycore_pyqtSignal *ps, const char *type_name,
+        const char *name)
+{
+    ps = ps->default_signal;
+
+    // If the signature already has a name then they all have and there is
+    // nothing more to do.
+    if (!ps->parsed_signature->signature.startsWith('('))
+        return;
+
+    do
+    {
+        QByteArray &sig = ps->parsed_signature->signature;
+
+        sig.prepend(name);
+        sig.prepend('2');
+
+        QByteArray &py_sig = ps->parsed_signature->py_signature;
+
+        py_sig.prepend(name);
+        py_sig.prepend('.');
+        py_sig.prepend(type_name);
+
+        ps = ps->next;
+    }
+    while (ps);
+}
+
+
+// Handle the getting of a lazy attribute, ie. a native Qt signal.
+int qpycore_get_lazy_attr(const sipTypeDef *td, PyObject *dict)
+{
+    pyqt5ClassTypeDef *ctd = (pyqt5ClassTypeDef *)td;
+    const pyqt5QtSignal *sigs = ctd->qt_signals;
+
+    // Handle the trvial case.
+    if (!sigs)
+        return 0;
+
+    QByteArray default_name;
+    qpycore_pyqtSignal *default_signal = 0;
+
+    do
+    {
+        // See if we have come to the end of the current signal.
+        if (default_signal && !is_signal_name(sigs->signature, default_name))
+        {
+            if (PyDict_SetItemString(dict, default_name.constData(), (PyObject *)default_signal) < 0)
+                return -1;
+
+            default_signal = 0;
+        }
+
+        bool fatal;
+
+        qpycore_pyqtSignal *sig = qpycore_pyqtSignal_New(sigs->signature,
+                &fatal);
+
+        if (!sig)
+        {
+            if (fatal)
+                return -1;
+
+            PyErr_Clear();
+            continue;
+        }
+
+        sig->docstring = sigs->docstring;
+        sig->emitter = sigs->emitter;
+
+        // See if this is a new default.
+        if (default_signal)
+        {
+            sig->default_signal = default_signal;
+            append_overload(sig);
+        }
+        else
+        {
+            sig->non_signals = sigs->non_signals;
+
+            default_signal = sig->default_signal = sig;
+
+            default_name = sigs->signature;
+            default_name.truncate(default_name.indexOf('('));
+        }
+    }
+    while ((++sigs)->signature);
+
+    // Save the last one, if any (in case of a non-fatal error).
+    if (!default_signal)
+        return 0;
+
+    return PyDict_SetItemString(dict, default_name.constData(),
+            (PyObject *)default_signal);
+}
+
+
+// Return true if a signal signatures has a particular name.
+static bool is_signal_name(const char *sig, const QByteArray &name)
+{
+    return (qstrncmp(sig, name.constData(), name.size()) == 0 && sig[name.size()] == '(');
+}
+
+
+// Call a signal's overloaded method (if there is one).
+PyObject *qpycore_call_signal_overload(qpycore_pyqtSignal *ps, PyObject *bound,
+        PyObject *args, PyObject *kw)
+{
+    if (!ps->non_signals)
+    {
+        PyErr_SetString(PyExc_TypeError, "native Qt signal is not callable");
+        return 0;
+    }
+
+    PyObject *func = PyCFunction_New(ps->non_signals, bound);
+
+    if (!func)
+        return 0;
+
+    PyObject *result = PyCFunction_Call(func, args, kw);
+
+    Py_DECREF(func);
+
+    return result;
+}
diff --git a/qpy/QtCore/qpycore_pyqtsignal.h b/qpy/QtCore/qpycore_pyqtsignal.h
new file mode 100644
index 0000000..fa510ec
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtsignal.h
@@ -0,0 +1,84 @@
+// This defines the interfaces for the pyqtSignal type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_PYQTSIGNAL_H
+#define _QPYCORE_PYQTSIGNAL_H
+
+
+#include <Python.h>
+#include <sip.h>
+
+#include <QByteArray>
+#include <QList>
+
+#include "qpycore_chimera.h"
+
+
+extern "C" {
+
+// This defines the structure of a PyQt signal.
+typedef struct _qpycore_pyqtSignal {
+    PyObject_HEAD
+
+    // The default signal.  This is the head of the linked list of overloads
+    // and holds references to rest of the list elements.
+    struct _qpycore_pyqtSignal *default_signal;
+
+    // The next overload in the list.
+    struct _qpycore_pyqtSignal *next;
+
+    // The docstring.
+    const char *docstring;
+
+    // The optional parameter names.
+    const QList<QByteArray> *parameter_names;
+
+    // The revision.
+    int revision;
+
+    // The parsed signature, not set if there is an emitter.
+    Chimera::Signature *parsed_signature;
+
+    // An optional emitter.
+    pyqt5EmitFunc emitter;
+
+    // The non-signal overloads (if any).  This is only set for the default.
+    PyMethodDef *non_signals;
+} qpycore_pyqtSignal;
+
+
+extern PyTypeObject qpycore_pyqtSignal_Type;
+
+int qpycore_get_lazy_attr(const sipTypeDef *td, PyObject *dict);
+
+}
+
+
+qpycore_pyqtSignal *qpycore_pyqtSignal_New(const char *signature,
+        bool *fatal = 0);
+qpycore_pyqtSignal *qpycore_find_signal(qpycore_pyqtSignal *ps,
+        PyObject *subscript, const char *context);
+void qpycore_set_signal_name(qpycore_pyqtSignal *ps, const char *type_name,
+        const char *name);
+PyObject *qpycore_call_signal_overload(qpycore_pyqtSignal *ps, PyObject *bound,
+        PyObject *args, PyObject *kw);
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_pyqtslot.cpp b/qpy/QtCore/qpycore_pyqtslot.cpp
new file mode 100644
index 0000000..0928d56
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtslot.cpp
@@ -0,0 +1,326 @@
+// This contains the implementation of the PyQtSlot class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpycore_chimera.h"
+#include "qpycore_pyqtslot.h"
+
+
+// Create the slot for an unbound method.
+PyQtSlot::PyQtSlot(PyObject *method, PyObject *type,
+        const Chimera::Signature *slot_signature)
+    : mfunc(method), mself(0), mself_wr(0), other(0), signature(slot_signature)
+{
+#if PY_MAJOR_VERSION < 3
+    mclass = type;
+#else
+    Q_UNUSED(type)
+#endif
+}
+
+
+// Create the slot for a callable.
+PyQtSlot::PyQtSlot(PyObject *callable, const Chimera::Signature *slot_signature)
+    : mfunc(0), mself_wr(0), other(0), signature(slot_signature)
+{
+    if (PyMethod_Check(callable))
+    {
+        // Save the component parts.
+        mfunc = PyMethod_GET_FUNCTION(callable);
+        mself = PyMethod_GET_SELF(callable);
+#if PY_MAJOR_VERSION < 3
+        mclass = PyMethod_GET_CLASS(callable);
+#endif
+
+        // Try and create a weak reference to the instance object.
+        mself_wr = PyWeakref_NewRef(mself, 0);
+    }
+    else
+    {
+        // Give the slot an extra reference to keep it alive.
+        Py_INCREF(callable);
+        other = callable;
+    }
+}
+
+
+// Destroy the slot.
+PyQtSlot::~PyQtSlot()
+{
+    Py_XDECREF(mself_wr);
+    Py_XDECREF(other);
+}
+
+
+// Invoke the slot on behalf of C++.
+PyQtSlot::Result PyQtSlot::invoke(void **qargs, bool no_receiver_check) const
+{
+    return invoke(qargs, 0, 0, no_receiver_check);
+}
+
+
+// Invoke the slot on behalf of C++.
+bool PyQtSlot::invoke(void **qargs, PyObject *self, void *result) const
+{
+    return (invoke(qargs, self, result, false) != PyQtSlot::Failed);
+}
+
+
+// Invoke the slot on behalf of C++.
+PyQtSlot::Result PyQtSlot::invoke(void **qargs, PyObject *self, void *result,
+        bool no_receiver_check) const
+{
+    // Get the callable.
+    PyObject *callable;
+
+    if (other)
+    {
+        callable = other;
+        Py_INCREF(callable);
+    }
+    else
+    {
+        // Use the value we have if one wasn't supplied.
+        if (!self)
+            self = instance();
+
+        // See if the instance has gone (which isn't an error).
+        if (self == Py_None)
+            return PyQtSlot::Ignored;
+
+        // If the receiver wraps a C++ object then ignore the call if it no
+        // longer exists.
+        if (!no_receiver_check && PyObject_TypeCheck(self, sipSimpleWrapper_Type) && !sipGetAddress((sipSimpleWrapper *)self))
+            return PyQtSlot::Ignored;
+
+#if PY_MAJOR_VERSION < 3
+        callable = PyMethod_New(mfunc, self, mclass);
+#else
+        callable = PyMethod_New(mfunc, self);
+#endif
+    }
+
+    // Convert the C++ arguments to Python objects.
+    const QList<const Chimera *> &args = signature->parsed_arguments;
+
+    PyObject *argtup = PyTuple_New(args.size());
+
+    if (!argtup)
+        return PyQtSlot::Failed;
+
+    QList<const Chimera *>::const_iterator it = args.constBegin();
+
+    for (int a = 0; it != args.constEnd(); ++a)
+    {
+        PyObject *arg = (*it)->toPyObject(*++qargs);
+
+        if (!arg)
+        {
+            Py_DECREF(argtup);
+            return PyQtSlot::Failed;
+        }
+
+        PyTuple_SET_ITEM(argtup, a, arg);
+
+        ++it;
+    }
+
+    // Dispatch to the real slot.
+    PyObject *res = call(callable, argtup);
+
+    Py_DECREF(argtup);
+    Py_DECREF(callable);
+
+    if (!res)
+        return PyQtSlot::Failed;
+
+    // Handle any result if required.
+    bool ok;
+
+    if (result && signature->result)
+        ok = signature->result->fromPyObject(res, result);
+    else
+        ok = true;
+
+    Py_DECREF(res);
+
+    return (ok ? PyQtSlot::Succeeded : PyQtSlot::Failed);
+}
+
+
+// See if this slot corresponds to the given callable.
+bool PyQtSlot::operator==(PyObject *callable) const
+{
+    if (PyMethod_Check(callable))
+    {
+        if (other)
+            return false;
+
+        return (mfunc == PyMethod_GET_FUNCTION(callable)
+                && instance() == PyMethod_GET_SELF(callable)
+#if PY_MAJOR_VERSION < 3
+                && mclass == PyMethod_GET_CLASS(callable)
+#endif
+                );
+    }
+
+    if (!other)
+        return false;
+
+    return (other == callable);
+}
+
+
+// Get the instance object.
+PyObject *PyQtSlot::instance() const
+{
+    // Use the weak reference if possible.
+    if (mself_wr)
+        return PyWeakref_GetObject(mself_wr);
+
+    return mself;
+}
+
+
+// Call a single slot and return the result.
+PyObject *PyQtSlot::call(PyObject *callable, PyObject *args) const
+{
+    PyObject *sa, *oxtype, *oxvalue, *oxtb;
+
+    // Keep some compilers quiet.
+    oxtype = oxvalue = oxtb = 0;
+
+    // We make repeated attempts to call a slot.  If we work out that it failed
+    // because of an immediate type error we try again with one less argument.
+    // We keep going until we run out of arguments to drop.  This emulates the
+    // Qt ability of the slot to accept fewer arguments than a signal provides.
+    sa = args;
+    Py_INCREF(sa);
+
+    for (;;)
+    {
+        PyObject *nsa, *xtype, *xvalue, *xtb, *res;
+
+        if ((res = PyEval_CallObject(callable, sa)) != NULL)
+        {
+            // Remove any previous exception.
+
+            if (sa != args)
+            {
+                Py_XDECREF(oxtype);
+                Py_XDECREF(oxvalue);
+                Py_XDECREF(oxtb);
+                PyErr_Clear();
+            }
+
+            Py_DECREF(sa);
+
+            return res;
+        }
+
+        // Get the exception.
+        PyErr_Fetch(&xtype, &xvalue, &xtb);
+
+        // See if it is unacceptable.  An acceptable failure is a type error
+        // with no traceback - so long as we can still reduce the number of
+        // arguments and try again.
+        if (!PyErr_GivenExceptionMatches(xtype, PyExc_TypeError) || xtb ||
+            PyTuple_GET_SIZE(sa) == 0)
+        {
+            // If there is a traceback then we must have called the slot and
+            // the exception was later on - so report the exception as is.
+            if (xtb)
+            {
+                if (sa != args)
+                {
+                    Py_XDECREF(oxtype);
+                    Py_XDECREF(oxvalue);
+                    Py_XDECREF(oxtb);
+                }
+
+                PyErr_Restore(xtype,xvalue,xtb);
+            }
+            else if (sa == args)
+            {
+                PyErr_Restore(xtype, xvalue, xtb);
+            }
+            else
+            {
+                // Discard the latest exception and restore the original one.
+                Py_XDECREF(xtype);
+                Py_XDECREF(xvalue);
+                Py_XDECREF(xtb);
+
+                PyErr_Restore(oxtype, oxvalue, oxtb);
+            }
+
+            break;
+        }
+
+        // If this is the first attempt, save the exception.
+        if (sa == args)
+        {
+            oxtype = xtype;
+            oxvalue = xvalue;
+            oxtb = xtb;
+        }
+        else
+        {
+            Py_XDECREF(xtype);
+            Py_XDECREF(xvalue);
+            Py_XDECREF(xtb);
+        }
+
+        // Create the new argument tuple.
+        if ((nsa = PyTuple_GetSlice(sa, 0, PyTuple_GET_SIZE(sa) - 1)) == NULL)
+        {
+            // Tidy up.
+            Py_XDECREF(oxtype);
+            Py_XDECREF(oxvalue);
+            Py_XDECREF(oxtb);
+
+            break;
+        }
+
+        Py_DECREF(sa);
+        sa = nsa;
+    }
+
+    Py_DECREF(sa);
+
+    return 0;
+}
+
+
+// Clear the slot if it has an extra reference.
+void PyQtSlot::clearOther()
+{
+    Py_CLEAR(other);
+}
+
+
+// Visit the slot if it has an extra reference.
+int PyQtSlot::visitOther(visitproc visit, void *arg)
+{
+    Py_VISIT(other);
+
+    return 0;
+}
diff --git a/qpy/QtCore/qpycore_pyqtslot.h b/qpy/QtCore/qpycore_pyqtslot.h
new file mode 100644
index 0000000..8917443
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtslot.h
@@ -0,0 +1,77 @@
+// This defines the definition of the PyQtSlot class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_PYQTSLOT_H
+#define _QPYCORE_PYQTSLOT_H
+
+
+#include <Python.h>
+
+#include "qpycore_chimera.h"
+
+
+class PyQtSlot
+{
+public:
+    enum Result
+    {
+        Succeeded,  // The invocation was successful.
+        Failed,     // The invocation failed.
+        Ignored     // The invocation was ignore because the receiver has gone.
+    };
+
+    PyQtSlot(PyObject *method, PyObject *type,
+            const Chimera::Signature *slot_signature);
+    PyQtSlot(PyObject *callable, const Chimera::Signature *slot_signature);
+    ~PyQtSlot();
+
+    PyQtSlot::Result invoke(void **qargs, bool no_receiver_check) const;
+    bool invoke(void **qargs, PyObject *self, void *result) const;
+    const Chimera::Signature *slotSignature() const {return signature;}
+
+    void clearOther();
+    int visitOther(visitproc visit, void *arg);
+
+    bool operator==(PyObject *callable) const;
+
+private:
+    PyQtSlot::Result invoke(void **qargs, PyObject *self, void *result,
+            bool no_receiver_check) const;
+    PyObject *call(PyObject *callable, PyObject *args) const;
+    PyObject *instance() const;
+
+    PyObject *mfunc;
+    PyObject *mself;
+#if PY_MAJOR_VERSION < 3
+    PyObject *mclass;
+#endif
+    PyObject *mself_wr;
+    PyObject *other;
+
+    const Chimera::Signature *signature;
+
+    // By forcing the use of pointers we don't need to worry about managing the
+    // reference counts of the component Python objects.
+    PyQtSlot(const PyQtSlot &);
+    PyQtSlot &operator=(const PyQtSlot &);
+};
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_pyqtslotproxy.cpp b/qpy/QtCore/qpycore_pyqtslotproxy.cpp
new file mode 100644
index 0000000..366c8ce
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtslotproxy.cpp
@@ -0,0 +1,380 @@
+// This contains the implementation of the PyQtSlotProxy class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QByteArray>
+#include <QMetaObject>
+#include <QMutex>
+#include <QObject>
+
+#include "qpycore_api.h"
+#include "qpycore_chimera.h"
+#include "qpycore_qmetaobjectbuilder.h"
+#include "qpycore_pyqtslot.h"
+#include "qpycore_pyqtslotproxy.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Proxy flags.
+#define PROXY_SINGLE_SHOT   0x01    // The slot will only be called once.
+#define PROXY_SLOT_INVOKED  0x02    // The proxied slot is executing.
+#define PROXY_SLOT_DISABLED 0x04    // The proxy deleteLater() has been called
+                                    // or should be called after the slot has
+                                    // finished executing.
+#define PROXY_NO_RCVR_CHECK 0x08    // The existence of the receiver C++ object
+                                    // should not be checked.
+
+
+// The last QObject sender.
+QObject *PyQtSlotProxy::last_sender = 0;
+
+
+// Create a universal proxy used as a slot.  Note that this will leak if there
+// is no transmitter and this is not a single shot slot.  There will be no
+// meta-object if there was a problem creating the proxy.  This is called
+// without the GIL.
+PyQtSlotProxy::PyQtSlotProxy(PyObject *slot, QObject *q_tx,
+        const Chimera::Signature *slot_signature, bool single_shot)
+    : QObject(), proxy_flags(single_shot ? PROXY_SINGLE_SHOT : 0),
+        signature(slot_signature->signature), transmitter(q_tx)
+{
+    SIP_BLOCK_THREADS
+    real_slot = new PyQtSlot(slot, slot_signature);
+    SIP_UNBLOCK_THREADS
+
+    // Create a new meta-object on the heap so that it looks like it has a slot
+    // of the right name and signature.
+    QMetaObjectBuilder builder;
+
+    builder.setClassName("PyQtSlotProxy");
+    builder.setSuperClass(&QObject::staticMetaObject);
+
+    builder.addSlot("unislot()");
+    builder.addSlot("disable()");
+
+    meta_object = builder.toMetaObject();
+
+    // Detect when any transmitter is destroyed.  (Note that we used to do this
+    // by making the proxy a child of the transmitter.  This doesn't work as
+    // expected because QWidget destroys its children before emitting the
+    // destroyed signal.)  We use a queued connection in case the proxy is also
+    // connected to the same signal and we want to make sure it has a chance to
+    // invoke the slot before being destroyed.
+    if (transmitter)
+    {
+        // Add this one to the global hash.
+        mutex->lock();
+        proxy_slots.insert(transmitter, this);
+        mutex->unlock();
+
+        connect(transmitter, SIGNAL(destroyed(QObject *)), SLOT(disable()),
+                Qt::QueuedConnection);
+    }
+}
+
+
+// Destroy a universal proxy.  This is called without the GIL.
+PyQtSlotProxy::~PyQtSlotProxy()
+{
+    Q_ASSERT((proxy_flags & PROXY_SLOT_INVOKED) == 0);
+
+    if (transmitter)
+    {
+        mutex->lock();
+
+        ProxyHash::iterator it(proxy_slots.find(transmitter));
+        ProxyHash::iterator end(proxy_slots.end());
+
+        while (it != end && it.key() == transmitter)
+        {
+            if (it.value() == this)
+                it = proxy_slots.erase(it);
+            else
+                ++it;
+        }
+
+        mutex->unlock();
+    }
+
+    // Qt can still be tidying up after Python has gone so make sure that it
+    // hasn't.
+    if (Py_IsInitialized())
+    {
+        SIP_BLOCK_THREADS
+        delete real_slot;
+        SIP_UNBLOCK_THREADS
+    }
+
+    if (meta_object)
+    {
+        free(const_cast<QMetaObject *>(meta_object));
+    }
+}
+
+
+// The static members of PyQtSlotProxy.
+const QByteArray PyQtSlotProxy::proxy_slot_signature(SLOT(unislot()));
+QMutex *PyQtSlotProxy::mutex;
+PyQtSlotProxy::ProxyHash PyQtSlotProxy::proxy_slots;
+
+
+const QMetaObject *PyQtSlotProxy::metaObject() const
+{
+    return meta_object;
+}
+
+
+void *PyQtSlotProxy::qt_metacast(const char *_clname)
+{
+    if (!_clname)
+        return 0;
+
+    if (qstrcmp(_clname, "PyQtSlotProxy") == 0)
+        return static_cast<void *>(const_cast<PyQtSlotProxy *>(this));
+
+    return QObject::qt_metacast(_clname);
+}
+
+
+int PyQtSlotProxy::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QObject::qt_metacall(_c, _id, _a);
+
+    if (_id < 0)
+        return _id;
+
+    if (_c == QMetaObject::InvokeMetaMethod)
+    {
+        switch (_id)
+        {
+        case 0:
+            unislot(_a);
+            break;
+
+        case 1:
+            disable();
+            break;
+        }
+
+        _id -= 2;
+    }
+
+    return _id;
+}
+
+
+// This is the universal slot itself that dispatches to the real slot.
+void PyQtSlotProxy::unislot(void **qargs)
+{
+    // If we are marked as disabled (possible if a queued signal has been
+    // disconnected but there is still a signal in the event queue) then just
+    // ignore the call.
+    if (proxy_flags & PROXY_SLOT_DISABLED)
+        return;
+
+    // sender() must be called without the GIL to avoid possible deadlocks
+    // between the GIL and Qt's internal thread data mutex.
+    QObject *new_last_sender = sender();
+
+    SIP_BLOCK_THREADS
+
+    QObject *saved_last_sender = last_sender;
+    last_sender = new_last_sender;
+
+    proxy_flags |= PROXY_SLOT_INVOKED;
+
+    switch (real_slot->invoke(qargs, (proxy_flags & PROXY_NO_RCVR_CHECK)))
+    {
+    case PyQtSlot::Succeeded:
+        break;
+
+    case PyQtSlot::Failed:
+        PyErr_Print();
+        break;
+
+    case PyQtSlot::Ignored:
+        proxy_flags |= PROXY_SLOT_DISABLED;
+        break;
+    }
+
+    proxy_flags &= ~PROXY_SLOT_INVOKED;
+
+    // Self destruct if we are a single shot or disabled.
+    if (proxy_flags & (PROXY_SINGLE_SHOT|PROXY_SLOT_DISABLED))
+    {
+        // See the comment in disable() for why we deleteLater().
+        deleteLater();
+    }
+
+    last_sender = saved_last_sender;
+
+    SIP_UNBLOCK_THREADS
+}
+
+
+// Disable the slot by destroying it if possible, or delaying its destruction
+// until the proxied slot returns.
+void PyQtSlotProxy::disable()
+{
+    proxy_flags |= PROXY_SLOT_DISABLED;
+
+    // Delete it if the slot isn't currently executing, otherwise it will be
+    // done after the slot returns.  Note that we don't rely on deleteLater()
+    // providing the necessary delay because the slot could process the event
+    // loop and the proxy would be deleted too soon.
+    if ((proxy_flags & PROXY_SLOT_INVOKED) == 0)
+    {
+        // Despite what the Qt documentation suggests, if there are outstanding
+        // queued signals then we may crash so we always delete later when the
+        // event queue will have been flushed.
+        deleteLater();
+    }
+}
+
+
+// Find a slot proxy connected to a transmitter.
+PyQtSlotProxy *PyQtSlotProxy::findSlotProxy(const QObject *transmitter,
+        const QByteArray &signal_signature, PyObject *slot)
+{
+    PyQtSlotProxy *proxy = 0;
+
+    mutex->lock();
+
+    ProxyHash::const_iterator it(proxy_slots.find(transmitter));
+    ProxyHash::const_iterator end(proxy_slots.end());
+
+    while (it != end && it.key() == transmitter)
+    {
+        PyQtSlotProxy *sp = it.value();
+
+        if (sp->signature == signal_signature && *(sp->real_slot) == slot)
+        {
+            proxy = sp;
+            break;
+        }
+
+        ++it;
+    }
+
+    mutex->unlock();
+
+    return proxy;
+}
+
+
+// Delete any slot proxies for a particular transmitter and optional signal
+// signature.
+void PyQtSlotProxy::deleteSlotProxies(const QObject *transmitter,
+        const QByteArray &signal_signature)
+{
+    mutex->lock();
+
+    ProxyHash::iterator it(proxy_slots.find(transmitter));
+    ProxyHash::iterator end(proxy_slots.end());
+
+    while (it != end && it.key() == transmitter)
+    {
+        PyQtSlotProxy *sp = it.value();
+
+        if (signal_signature.isEmpty() || signal_signature == sp->signature)
+        {
+            it = proxy_slots.erase(it);
+            sp->disable();
+        }
+        else
+        {
+            ++it;
+        }
+    }
+
+    mutex->unlock();
+}
+
+
+// Clear the extra references of any slots connected to a transmitter.  This is
+// called with the GIL.
+int PyQtSlotProxy::clearSlotProxies(const QObject *transmitter)
+{
+    ProxyHash::iterator it(proxy_slots.find(transmitter));
+    ProxyHash::iterator end(proxy_slots.end());
+
+    while (it != end && it.key() == transmitter)
+    {
+        it.value()->real_slot->clearOther();
+
+        ++it;
+    }
+
+    return 0;
+}
+
+
+// A thing wrapper available to the generated code.
+int qpycore_clearSlotProxies(const QObject *transmitter)
+{
+    return PyQtSlotProxy::clearSlotProxies(transmitter);
+}
+
+
+// Visit the extra references of any slots connected to a transmitter.  This is
+// called with the GIL.
+int PyQtSlotProxy::visitSlotProxies(const QObject *transmitter,
+        visitproc visit, void *arg)
+{
+    int vret = 0;
+
+    ProxyHash::iterator it(proxy_slots.find(transmitter));
+    ProxyHash::iterator end(proxy_slots.end());
+
+    while (it != end && it.key() == transmitter)
+    {
+        if ((vret = it.value()->real_slot->visitOther(visit, arg)) != 0)
+            break;
+
+        ++it;
+    }
+
+    return vret;
+}
+
+
+// A thing wrapper available to the generated code.
+int qpycore_visitSlotProxies(const QObject *transmitter, visitproc visit,
+        void *arg)
+{
+    return PyQtSlotProxy::visitSlotProxies(transmitter, visit, arg);
+}
+
+
+// Get the last sender.
+QObject *PyQtSlotProxy::lastSender()
+{
+    return last_sender;
+}
+
+
+// Disable the check that the receiver C++ object exists before invoking a
+// slot.
+void PyQtSlotProxy::disableReceiverCheck()
+{
+    proxy_flags |= PROXY_NO_RCVR_CHECK;
+}
diff --git a/qpy/QtCore/qpycore_pyqtslotproxy.h b/qpy/QtCore/qpycore_pyqtslotproxy.h
new file mode 100644
index 0000000..224fb33
--- /dev/null
+++ b/qpy/QtCore/qpycore_pyqtslotproxy.h
@@ -0,0 +1,112 @@
+// This contains the definition of the PyQtSlotProxy class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_PYQTSLOTPROXY_H
+#define _QPYCORE_PYQTSLOTPROXY_H
+
+
+#include <Python.h>
+
+#include <QByteArray>
+#include <QMultiHash>
+#include <QMetaObject>
+#include <QObject>
+
+#include "qpycore_namespace.h"
+#include "qpycore_chimera.h"
+
+
+QT_BEGIN_NAMESPACE
+class QMutex;
+QT_END_NAMESPACE
+
+class PyQtSlot;
+
+
+// This class is implements a slot on behalf of Python callables.  It is
+// derived from QObject but is not run through moc.  Instead the normal
+// moc-generated methods are handwritten in order to implement a universal
+// slot.  This requires some knowledge of the internal structure of QObject but
+// it is likely that they will only change between major Qt versions.
+class PyQtSlotProxy : public QObject
+{
+public:
+    PyQtSlotProxy(PyObject *slot, QObject *transmitter,
+            const Chimera::Signature *slot_signature, bool single_shot);
+    ~PyQtSlotProxy();
+
+    static const QMetaObject staticMetaObject;
+    virtual const QMetaObject *metaObject() const;
+    virtual void *qt_metacast(const char *);
+    virtual int qt_metacall(QMetaObject::Call, int, void **);
+
+    void unislot(void **qargs);
+    void disable();
+
+    static void deleteSlotProxies(const QObject *transmitter,
+            const QByteArray &signal_signature);
+    static PyQtSlotProxy *findSlotProxy(const QObject *transmitter,
+            const QByteArray &signal_signature, PyObject *slot);
+
+    void disableReceiverCheck();
+
+    static int clearSlotProxies(const QObject *transmitter);
+    static int visitSlotProxies(const QObject *transmitter, visitproc visit,
+            void *arg);
+
+    static QObject *lastSender();
+
+    // The signature of the slot that receives connections.
+    static const QByteArray proxy_slot_signature;
+
+    // The mutex around the proxies hash.
+    static QMutex *mutex;
+
+private:
+    // The last QObject sender.
+    static QObject *last_sender;
+
+    // The type of a proxy hash.
+    typedef QMultiHash<const QObject *, PyQtSlotProxy *> ProxyHash;
+
+    // The hash of proxies.
+    static ProxyHash proxy_slots;
+
+    // The proxy flags.
+    int proxy_flags;
+
+    // The normalised signature.
+    QByteArray signature;
+
+    // The QObject transmitter the proxy will be connected to (if any).
+    const QObject *transmitter;
+
+    // The slot we are proxying for.
+    PyQtSlot *real_slot;
+
+    // The meta-object.
+    const QMetaObject *meta_object;
+
+    PyQtSlotProxy(const PyQtSlotProxy &);
+    PyQtSlotProxy &operator=(const PyQtSlotProxy &);
+};
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_qjsonvalue.cpp b/qpy/QtCore/qpycore_qjsonvalue.cpp
new file mode 100644
index 0000000..e6df0bb
--- /dev/null
+++ b/qpy/QtCore/qpycore_qjsonvalue.cpp
@@ -0,0 +1,165 @@
+// This is the support for QJsonValue.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpycore_api.h"
+
+#include "sipAPIQtCore.h"
+
+
+// See if a Python object can be converted to a QJsonValue.
+int qpycore_canConvertTo_QJsonValue(PyObject *py)
+{
+    if (PyObject_TypeCheck(py, sipTypeAsPyTypeObject(sipType_QJsonValue_Type)))
+        return 1;
+
+    if (PyBool_Check(py))
+        return 1;
+
+    if (PyLong_Check(py))
+        return 1;
+
+#if PY_MAJOR_VERSION < 3
+    if (PyInt_Check(py))
+        return 1;
+#endif
+
+    if (PyFloat_Check(py))
+        return 1;
+
+    if (sipCanConvertToType(py, sipType_QString, 0))
+        return 1;
+
+    // We must check for QJsonObject before QJsonArray.
+    if (sipCanConvertToType(py, sipType_QJsonObject, 0))
+        return 1;
+
+    if (sipCanConvertToType(py, sipType_QJsonArray, 0))
+        return 1;
+
+    return sipCanConvertToType(py, sipType_QJsonValue, SIP_NO_CONVERTORS);
+}
+
+
+// Convert a Python object to a QJsonValue.
+int qpycore_convertTo_QJsonValue(PyObject *py, PyObject *transferObj,
+        QJsonValue **cpp, int *isErr)
+{
+    if (PyObject_TypeCheck(py, sipTypeAsPyTypeObject(sipType_QJsonValue_Type)))
+    {
+        *cpp = new QJsonValue((QJsonValue::Type)SIPLong_AsLong(py));
+
+        return sipGetState(transferObj);
+    }
+
+    if (PyBool_Check(py))
+    {
+        *cpp = new QJsonValue(py == Py_True);
+
+        return sipGetState(transferObj);
+    }
+
+    if (PyLong_Check(py))
+    {
+        *cpp = new QJsonValue((qint64)PyLong_AsLong(py));
+
+        return sipGetState(transferObj);
+    }
+
+#if PY_MAJOR_VERSION < 3
+    if (PyInt_Check(py))
+    {
+        *cpp = new QJsonValue((int)PyInt_AS_LONG(py));
+
+        return sipGetState(transferObj);
+    }
+#endif
+
+    if (PyFloat_Check(py))
+    {
+        *cpp = new QJsonValue((double)PyFloat_AS_DOUBLE(py));
+
+        return sipGetState(transferObj);
+    }
+
+    if (sipCanConvertToType(py, sipType_QString, 0))
+    {
+        int state;
+        QString *q = reinterpret_cast<QString *>(sipConvertToType(py,
+                sipType_QString, 0, 0, &state, isErr));
+
+        if (*isErr)
+        {
+            sipReleaseType(q, sipType_QString, state);
+            return 0;
+        }
+
+        *cpp = new QJsonValue(*q);
+
+        sipReleaseType(q, sipType_QString, state);
+
+        return sipGetState(transferObj);
+    }
+
+    // We must check for QJsonObject before QJsonArray.
+    if (sipCanConvertToType(py, sipType_QJsonObject, 0))
+    {
+        int state;
+        QJsonObject *q = reinterpret_cast<QJsonObject *>(sipConvertToType(py,
+                sipType_QJsonObject, 0, 0, &state, isErr));
+
+        if (*isErr)
+        {
+            sipReleaseType(q, sipType_QJsonObject, state);
+            return 0;
+        }
+
+        *cpp = new QJsonValue(*q);
+
+        sipReleaseType(q, sipType_QJsonObject, state);
+
+        return sipGetState(transferObj);
+    }
+
+    if (sipCanConvertToType(py, sipType_QJsonArray, 0))
+    {
+        int state;
+        QJsonArray *q = reinterpret_cast<QJsonArray *>(sipConvertToType(py,
+                sipType_QJsonArray, 0, 0, &state, isErr));
+
+        if (*isErr)
+        {
+            sipReleaseType(q, sipType_QJsonArray, state);
+            return 0;
+        }
+
+        *cpp = new QJsonValue(*q);
+
+        sipReleaseType(q, sipType_QJsonArray, state);
+
+        return sipGetState(transferObj);
+    }
+
+    *cpp = reinterpret_cast<QJsonValue *>(sipConvertToType(py, sipType_QJsonValue,
+            transferObj, SIP_NO_CONVERTORS, 0, isErr));
+
+    return 0;
+}
diff --git a/qpy/QtCore/qpycore_qmessagelogger.cpp b/qpy/QtCore/qpycore_qmessagelogger.cpp
new file mode 100644
index 0000000..bd0aeef
--- /dev/null
+++ b/qpy/QtCore/qpycore_qmessagelogger.cpp
@@ -0,0 +1,111 @@
+// This is the support for QMessageLogger.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpycore_api.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Return the current Python context.  This should be called with the GIL.
+int qpycore_current_context(const char **file, const char **function)
+{
+    static PyObject *currentframe = 0;
+    static PyObject *getframeinfo = 0;
+    static PyObject *saved_file = 0;
+    static PyObject *saved_function = 0;
+
+    PyObject *frame, *info, *file_obj, *linenr_obj, *function_obj;
+    int linenr;
+
+    frame = info = NULL;
+
+    // Make sure we have what we need from the inspect module.
+    if (!currentframe || !getframeinfo)
+    {
+        PyObject *inspect = PyImport_ImportModule("inspect");
+
+        if (inspect)
+        {
+            if (!currentframe)
+                currentframe = PyObject_GetAttrString(inspect, "currentframe");
+
+            if (!getframeinfo)
+                getframeinfo = PyObject_GetAttrString(inspect, "getframeinfo");
+
+            Py_DECREF(inspect);
+        }
+
+        if (!currentframe || !getframeinfo)
+            goto py_error;
+    }
+
+    // Get the current frame.
+    if ((frame = PyObject_CallFunctionObjArgs(currentframe, NULL)) == NULL)
+        goto py_error;
+
+    // Get the frame details.
+    if ((info = PyObject_CallFunctionObjArgs(getframeinfo, frame, NULL)) == NULL)
+        goto py_error;;
+
+    if ((file_obj = PyTuple_GetItem(info, 0)) == NULL)
+        goto py_error;
+
+    if ((linenr_obj = PyTuple_GetItem(info, 1)) == NULL)
+        goto py_error;
+
+    if ((function_obj = PyTuple_GetItem(info, 2)) == NULL)
+        goto py_error;
+
+    Py_XDECREF(saved_file);
+#if PY_MAJOR_VERSION >= 3
+    saved_file = PyUnicode_AsEncodedString(file_obj, "latin_1", "ignore");
+#else
+    saved_file = file_obj;
+    Py_INCREF(saved_file);
+#endif
+    *file = SIPBytes_AS_STRING(saved_file);
+
+    linenr = SIPLong_AsLong(linenr_obj);
+
+    Py_XDECREF(saved_function);
+#if PY_MAJOR_VERSION >= 3
+    saved_function = PyUnicode_AsEncodedString(function_obj, "latin_1", "ignore");
+#else
+    saved_function = function_obj;
+    Py_INCREF(saved_function);
+#endif
+    *function = SIPBytes_AS_STRING(saved_function);
+
+    Py_DECREF(info);
+    Py_DECREF(frame);
+
+    return linenr;
+
+py_error:
+    Py_XDECREF(info);
+    Py_XDECREF(frame);
+
+    PyErr_Print();
+
+    *file = *function = "";
+    return 0;
+}
diff --git a/qpy/QtCore/qpycore_qmetaobject.cpp b/qpy/QtCore/qpycore_qmetaobject.cpp
new file mode 100644
index 0000000..7cba232
--- /dev/null
+++ b/qpy/QtCore/qpycore_qmetaobject.cpp
@@ -0,0 +1,199 @@
+// This is the support code for QMetaObject.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QGenericArgument>
+#include <QGenericReturnArgument>
+
+#include "qpycore_api.h"
+#include "qpycore_chimera.h"
+#include "qpycore_misc.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Forward declarations.
+static PyObject *ArgumentStorage_New(PyObject *type, PyObject *data);
+#if defined(SIP_USE_PYCAPSULE)
+extern "C" {static void ArgumentStorage_delete(PyObject *cap);}
+#else
+extern "C" {static void ArgumentStorage_delete(void *stv);}
+#endif
+
+
+// Return a wrapped QGenericArgument for the given type and Python object.
+PyObject *qpycore_ArgumentFactory(PyObject *type, PyObject *data)
+{
+    PyObject *as_obj = ArgumentStorage_New(type, data);
+
+    if (!as_obj)
+    {
+        Chimera::raiseParseException(type, "a Q_ARG()");
+        return 0;
+    }
+
+#if defined(SIP_USE_PYCAPSULE)
+    Chimera::Storage *st = reinterpret_cast<Chimera::Storage *>(
+            PyCapsule_GetPointer(as_obj, NULL));
+#else
+    Chimera::Storage *st = reinterpret_cast<Chimera::Storage *>(
+            PyCObject_AsVoidPtr(as_obj));
+#endif
+
+    QGenericArgument *arg = new QGenericArgument(
+            st->type()->name().constData(), st->address());
+
+    PyObject *ga_obj = sipConvertFromNewType(arg, sipType_QGenericArgument, 0);
+
+    if (ga_obj)
+    {
+        // Stash the storage in the user field so that everything will be
+        // properly garbage collected.
+        ((sipSimpleWrapper *)ga_obj)->user = as_obj;
+    }
+    else
+    {
+        delete arg;
+        Py_DECREF(as_obj);
+    }
+
+    return ga_obj;
+}
+
+
+// Return a wrapped QGenericReturnArgument for the given type.
+PyObject *qpycore_ReturnFactory(PyObject *type)
+{
+    PyObject *as_obj = ArgumentStorage_New(type, 0);
+
+    if (!as_obj)
+    {
+        Chimera::raiseParseException(type, "a Q_RETURN_ARG()");
+        return 0;
+    }
+
+#if defined(SIP_USE_PYCAPSULE)
+    Chimera::Storage *st = reinterpret_cast<Chimera::Storage *>(
+            PyCapsule_GetPointer(as_obj, NULL));
+#else
+    Chimera::Storage *st = reinterpret_cast<Chimera::Storage *>(
+            PyCObject_AsVoidPtr(as_obj));
+#endif
+
+    QGenericReturnArgument *arg = new QGenericReturnArgument(
+            st->type()->name().constData(), st->address());
+
+    PyObject *gra_obj = sipConvertFromNewType(arg,
+            sipType_QGenericReturnArgument, 0);
+
+    if (gra_obj)
+    {
+        // Stash the storage in the user field so that everything will be
+        // properly garbage collected.
+        ((sipSimpleWrapper *)gra_obj)->user = as_obj;
+    }
+    else
+    {
+        delete arg;
+        Py_DECREF(as_obj);
+    }
+
+    return gra_obj;
+}
+
+
+// Return the Python result from a QGenericReturnArgument.
+PyObject *qpycore_ReturnValue(PyObject *gra_obj)
+{
+    PyObject *as_obj = ((sipSimpleWrapper *)gra_obj)->user;
+
+#if defined(SIP_USE_PYCAPSULE)
+    Chimera::Storage *st = reinterpret_cast<Chimera::Storage *>(
+            PyCapsule_GetPointer(as_obj, NULL));
+#else
+    Chimera::Storage *st = reinterpret_cast<Chimera::Storage *>(
+            PyCObject_AsVoidPtr(as_obj));
+#endif
+
+    return st->toPyObject();
+}
+
+
+#if defined(SIP_USE_PYCAPSULE)
+// The PyCapsule destructor for the ArgumentStorage type.
+static void ArgumentStorage_delete(PyObject *cap)
+{
+    Chimera::Storage *st = reinterpret_cast<Chimera::Storage *>(
+            PyCapsule_GetPointer(cap, NULL));
+    const Chimera *ct = st->type();
+
+    delete st;
+    delete ct;
+}
+#else
+// The PyCObject destructor for the ArgumentStorage type.
+static void ArgumentStorage_delete(void *stv)
+{
+    Chimera::Storage *st = reinterpret_cast<Chimera::Storage *>(stv);
+    const Chimera *ct = st->type();
+
+    delete st;
+    delete ct;
+}
+#endif
+
+
+// Returns a Python object wrapping an ArgumentStorage instance.
+static PyObject *ArgumentStorage_New(PyObject *type, PyObject *data)
+{
+    const Chimera *ct = Chimera::parse(type);
+
+    if (!ct)
+        return 0;
+
+    Chimera::Storage *st;
+
+    if (data)
+        st = ct->fromPyObjectToStorage(data);
+    else
+        st = ct->storageFactory();
+
+    if (!st)
+    {
+        delete ct;
+        return 0;
+    }
+
+    // Convert to a Python object.
+#if defined(SIP_USE_PYCAPSULE)
+    PyObject *as_obj = PyCapsule_New(st, NULL, ArgumentStorage_delete);
+#else
+    PyObject *as_obj = PyCObject_FromVoidPtr(st, ArgumentStorage_delete);
+#endif
+
+    if (!as_obj)
+    {
+        delete st;
+        delete ct;
+    }
+
+    return as_obj;
+}
diff --git a/qpy/QtCore/qpycore_qmetaobject_helpers.cpp b/qpy/QtCore/qpycore_qmetaobject_helpers.cpp
new file mode 100644
index 0000000..e03e147
--- /dev/null
+++ b/qpy/QtCore/qpycore_qmetaobject_helpers.cpp
@@ -0,0 +1,162 @@
+// This implements the helpers for QMetaObject.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QByteArray>
+#include <QMetaMethod>
+#include <QMetaObject>
+#include <QObject>
+
+#include "qpycore_api.h"
+#include "qpycore_chimera.h"
+#include "qpycore_misc.h"
+#include "qpycore_objectified_strings.h"
+#include "qpycore_public_api.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Forward declarations.
+static void connect(QObject *qobj, PyObject *slot_obj,
+        const QByteArray &slot_nm, const QByteArray &args);
+
+
+void qpycore_qmetaobject_connectslotsbyname(QObject *qobj,
+        PyObject *qobj_wrapper)
+{
+    // Get the class attributes.
+    PyObject *dir = PyObject_Dir((PyObject *)Py_TYPE(qobj_wrapper));
+
+    if (!dir)
+        return;
+
+    PyObject *slot_obj = 0;
+
+    for (SIP_SSIZE_T li = 0; li < PyList_GET_SIZE(dir); ++li)
+    {
+        PyObject *name_obj = PyList_GET_ITEM(dir, li);
+
+        // Get the slot object.
+        Py_XDECREF(slot_obj);
+        slot_obj = PyObject_GetAttr(qobj_wrapper, name_obj);
+
+        if (!slot_obj)
+            continue;
+
+        // Ignore it if it is not a callable.
+        if (!PyCallable_Check(slot_obj))
+            continue;
+
+        // Use the signature attribute instead of the name if there is one.
+        PyObject *sigattr = PyObject_GetAttr(slot_obj,
+                qpycore_dunder_pyqtsignature);
+
+        if (sigattr)
+        {
+            for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(sigattr); ++i)
+            {
+                PyObject *decoration = PyList_GET_ITEM(sigattr, i);
+                Chimera::Signature *sig = Chimera::Signature::fromPyObject(decoration);
+                QByteArray args = sig->arguments();
+
+                if (!args.isEmpty())
+                    connect(qobj, slot_obj, sig->name(), args);
+            }
+
+            Py_DECREF(sigattr);
+        }
+        else
+        {
+            const char *ascii_name = sipString_AsASCIIString(&name_obj);
+
+            if (!ascii_name)
+                continue;
+
+            PyErr_Clear();
+
+            connect(qobj, slot_obj, QByteArray(ascii_name), QByteArray());
+
+            Py_DECREF(name_obj);
+        }
+    }
+
+    Py_XDECREF(slot_obj);
+    Py_DECREF(dir);
+}
+
+
+// Connect up a particular slot name, with optional arguments.
+static void connect(QObject *qobj, PyObject *slot_obj,
+        const QByteArray &slot_nm, const QByteArray &args)
+{
+    // Ignore if it's not an autoconnect slot.
+    if (!slot_nm.startsWith("on_"))
+        return;
+
+    // Extract the names of the emitting object and the signal.
+    int i;
+
+    i = slot_nm.lastIndexOf('_');
+
+    if (i - 3 < 1 || i + 1 >= slot_nm.size())
+        return;
+
+    QByteArray ename = slot_nm.mid(3, i - 3);
+    QByteArray sname = slot_nm.mid(i + 1);
+
+    // Find the emitting object and get its meta-object.
+    QObject *eobj = qobj->findChild<QObject *>(ename);
+
+    if (!eobj)
+        return;
+
+    const QMetaObject *mo = eobj->metaObject();
+
+    // Got through the methods looking for a matching signal.
+    for (int m = 0; m < mo->methodCount(); ++m)
+    {
+        QMetaMethod mm = mo->method(m);
+
+        if (mm.methodType() != QMetaMethod::Signal)
+            continue;
+
+        QByteArray sig(mm.methodSignature());
+
+        if (Chimera::Signature::name(sig) != sname)
+            continue;
+
+        // If we have slot arguments then they must match as well.
+        if (!args.isEmpty() && Chimera::Signature::arguments(sig) != args)
+            continue;
+
+        QObject *receiver;
+        QByteArray slot_sig;
+
+        if (pyqt5_get_connection_parts(slot_obj, eobj, sig.constData(), false, &receiver, slot_sig) != sipErrorNone)
+            continue;
+
+        // Add the type character.
+        sig.prepend('2');
+
+        // Connect the signal.
+        QObject::connect(eobj, sig.constData(), receiver, slot_sig.constData());
+    }
+}
diff --git a/qpy/QtCore/qpycore_qmetaobjectbuilder.h b/qpy/QtCore/qpycore_qmetaobjectbuilder.h
new file mode 100644
index 0000000..7e283ff
--- /dev/null
+++ b/qpy/QtCore/qpycore_qmetaobjectbuilder.h
@@ -0,0 +1,121 @@
+// This defines the subset of the interface to Qt5's internal
+// QMetaObjectBuilder class.  The internal representation of a QMetaObject
+// changed in Qt5 (specifically revision 7) sufficiently to justify using this
+// internal code.  The alternative would be to reverse engineer other internal
+// data structures which would be even more fragile.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_QMETAOBJECTBUILDER_H
+#define _QPYCORE_QMETAOBJECTBUILDER_H
+
+
+#include <QByteArray>
+#include <QList>
+#include <QMetaObject>
+
+QT_BEGIN_NAMESPACE
+
+
+class QMetaEnumBuilder;
+class QMetaMethodBuilder;
+class QMetaPropertyBuilder;
+
+
+class Q_CORE_EXPORT QMetaObjectBuilder
+{
+public:
+    QMetaObjectBuilder();
+    virtual ~QMetaObjectBuilder();
+
+    void setClassName(const QByteArray &name);
+    void setSuperClass(const QMetaObject *meta);
+    QMetaMethodBuilder addSlot(const QByteArray &signature);
+    QMetaMethodBuilder addSignal(const QByteArray &signature);
+    QMetaPropertyBuilder addProperty(const QByteArray &name,
+            const QByteArray &type, int notifierId=-1);
+    QMetaEnumBuilder addEnumerator(const QByteArray &name);
+    int addClassInfo(const QByteArray &name, const QByteArray &value);
+    int addRelatedMetaObject(const QMetaObject *meta);
+    int indexOfSignal(const QByteArray &signature);
+    QMetaObject *toMetaObject() const;
+
+private:
+    Q_DISABLE_COPY(QMetaObjectBuilder)
+
+    void *d;
+};
+
+
+class Q_CORE_EXPORT QMetaMethodBuilder
+{
+public:
+    QMetaMethodBuilder() : _mobj(0), _index(0) {}
+
+    void setReturnType(const QByteArray &type);
+    void setParameterNames(const QList<QByteArray> &parameter_names);
+    void setRevision(int revision);
+
+private:
+    const QMetaObjectBuilder *_mobj;
+    int _index;
+};
+
+
+class Q_CORE_EXPORT QMetaPropertyBuilder
+{
+public:
+    QMetaPropertyBuilder() : _mobj(0), _index(0) {}
+
+    void setReadable(bool value);
+    void setWritable(bool value);
+    void setResettable(bool value);
+    void setDesignable(bool value);
+    void setScriptable(bool value);
+    void setStored(bool value);
+    void setUser(bool value);
+    void setStdCppSet(bool value);
+    void setEnumOrFlag(bool value);
+    void setConstant(bool value);
+    void setFinal(bool value);
+    void setRevision(int revision);
+
+private:
+    const QMetaObjectBuilder *_mobj;
+    int _index;
+};
+
+
+class Q_CORE_EXPORT QMetaEnumBuilder
+{
+public:
+    QMetaEnumBuilder() : _mobj(0), _index(0) {}
+
+    void setIsFlag(bool value);
+    int addKey(const QByteArray &name, int value);
+
+private:
+    const QMetaObjectBuilder *_mobj;
+    int _index;
+};
+
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/qpy/QtCore/qpycore_qobject_getattr.cpp b/qpy/QtCore/qpycore_qobject_getattr.cpp
new file mode 100644
index 0000000..f8f8a74
--- /dev/null
+++ b/qpy/QtCore/qpycore_qobject_getattr.cpp
@@ -0,0 +1,132 @@
+// This implements the helper for QObject.__getattr__().
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QByteArray>
+#include <QHash>
+#include <QMetaMethod>
+#include <QObject>
+
+#include "qpycore_api.h"
+#include "qpycore_pyqtboundsignal.h"
+#include "qpycore_pyqtmethodproxy.h"
+#include "qpycore_pyqtsignal.h"
+
+
+// See if we can find an attribute in the Qt meta-type system.  This is
+// primarily to support access to JavaScript (e.g. QDeclarativeItem) so we
+// don't support overloads.
+PyObject *qpycore_qobject_getattr(const QObject *qobj, PyObject *py_qobj,
+        const char *name)
+{
+    const QMetaObject *mo = qobj->metaObject();
+
+    // Try and find a method with the name.
+    QMetaMethod method;
+    int method_index = -1;
+
+    // Count down to allow overrides (assuming they are possible).
+    for (int m = mo->methodCount() - 1; m >= 0; --m)
+    {
+        method = mo->method(m);
+
+        if (method.methodType() == QMetaMethod::Constructor)
+            continue;
+
+        // Get the method name.
+        QByteArray mname(method.methodSignature());
+        int idx = mname.indexOf('(');
+
+        if (idx >= 0)
+            mname.truncate(idx);
+
+        if (mname == name)
+        {
+            method_index = m;
+            break;
+        }
+    }
+
+    if (method_index < 0)
+    {
+        // Replicate the standard Python exception.
+        PyErr_Format(PyExc_AttributeError, "'%s' object has no attribute '%s'",
+                Py_TYPE(py_qobj)->tp_name, name);
+
+        return 0;
+    }
+
+    // Get the value to return.  Note that this is recreated each time.  We
+    // could put a descriptor in the type dictionary to satisfy the request in
+    // future but the typical use case is getting a value from a C++ proxy
+    // (e.g. QDeclarativeItem) and we can't assume that what is being proxied
+    // is the same each time.
+    PyObject *value;
+
+    if (method.methodType() == QMetaMethod::Signal)
+    {
+        // We need to keep explicit references to the unbound signals (because
+        // we don't use the type dictionary to do so) because they own the
+        // parsed signature which may be needed by a PyQtSlotProxy at some
+        // point.
+        typedef QHash<QByteArray, PyObject *> SignalHash;
+
+        static SignalHash *sig_hash = 0;
+
+        // For crappy compilers.
+        if (!sig_hash)
+            sig_hash = new SignalHash;
+
+        PyObject *sig_obj;
+
+        QByteArray sig_str = method.methodSignature();
+
+        SignalHash::const_iterator it = sig_hash->find(sig_str);
+
+        if (it == sig_hash->end())
+        {
+            sig_obj = (PyObject *)qpycore_pyqtSignal_New(sig_str.constData());
+
+            if (!sig_obj)
+                return 0;
+
+            sig_hash->insert(sig_str, sig_obj);
+        }
+        else
+        {
+            sig_obj = it.value();
+        }
+
+        value = qpycore_pyqtBoundSignal_New((qpycore_pyqtSignal *)sig_obj,
+                py_qobj, const_cast<QObject *>(qobj));
+    }
+    else
+    {
+        QByteArray py_name(Py_TYPE(py_qobj)->tp_name);
+        py_name.append('.');
+        py_name.append(name);
+
+        value = qpycore_pyqtMethodProxy_New(const_cast<QObject *>(qobj),
+                method_index, py_name);
+    }
+
+    return value;
+}
diff --git a/qpy/QtCore/qpycore_qobject_helpers.cpp b/qpy/QtCore/qpycore_qobject_helpers.cpp
new file mode 100644
index 0000000..a1972b4
--- /dev/null
+++ b/qpy/QtCore/qpycore_qobject_helpers.cpp
@@ -0,0 +1,303 @@
+// This implements the helpers for QObject.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <ctype.h>
+
+#include <Python.h>
+
+#include <QMetaObject>
+#include <QMetaType>
+#include <QObject>
+#include <QVariant>
+
+#include "qpycore_api.h"
+#include "qpycore_chimera.h"
+#include "qpycore_pyqtboundsignal.h"
+#include "qpycore_pyqtproperty.h"
+#include "qpycore_pyqtpyobject.h"
+#include "qpycore_pyqtslot.h"
+#include "qpycore_qobject_helpers.h"
+#include "qpycore_types.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Forward declarations.
+static int qt_metacall_worker(sipSimpleWrapper *pySelf, PyTypeObject *pytype,
+        sipTypeDef *base, QMetaObject::Call _c, int _id, void **_a);
+
+
+// This is the helper for all implementations of QObject::metaObject().
+const QMetaObject *qpycore_qobject_metaobject(sipSimpleWrapper *pySelf,
+        sipTypeDef *base)
+{
+    // Return the dynamic meta-object if there is one.
+    if (pySelf && ((pyqtWrapperType *)Py_TYPE(pySelf))->metaobject)
+        return ((pyqtWrapperType *)Py_TYPE(pySelf))->metaobject->mo;
+
+    // Fall back to the static Qt meta-object.
+    return reinterpret_cast<const QMetaObject *>(((pyqt5ClassTypeDef *)base)->static_metaobject);
+}
+
+
+// This is the helper for all implementations of QObject::qt_metacall().
+int qpycore_qobject_qt_metacall(sipSimpleWrapper *pySelf, sipTypeDef *base,
+        QMetaObject::Call _c, int _id, void **_a)
+{
+    // Check if the Python object has gone.
+    if (!pySelf)
+        return -1;
+
+    SIP_BLOCK_THREADS
+    _id = qt_metacall_worker(pySelf, Py_TYPE(pySelf), base, _c, _id, _a);
+    SIP_UNBLOCK_THREADS
+
+    return _id;
+}
+
+
+// This does the real work for all implementations of QObject::qt_metacall().
+static int qt_metacall_worker(sipSimpleWrapper *pySelf, PyTypeObject *pytype,
+        sipTypeDef *base, QMetaObject::Call _c, int _id, void **_a)
+{
+    // See if this is a wrapped C++ type rather than a Python sub-type.
+    if (pytype == sipTypeAsPyTypeObject(base))
+        return _id;
+
+    _id = qt_metacall_worker(pySelf, pytype->tp_base, base, _c, _id, _a);
+
+    if (_id < 0)
+        return _id;
+
+    pyqtWrapperType *pyqt_wt = (pyqtWrapperType *)pytype;
+    qpycore_metaobject *qo = pyqt_wt->metaobject;
+
+    bool ok = true;
+
+    if (_c == QMetaObject::InvokeMetaMethod)
+    {
+        if (_id < qo->nr_signals + qo->pslots.count())
+        {
+            if (_id < qo->nr_signals)
+            {
+                QObject *qthis = reinterpret_cast<QObject *>(sipGetCppPtr(pySelf, sipType_QObject));
+
+                Py_BEGIN_ALLOW_THREADS
+                QMetaObject::activate(qthis, qo->mo, _id, _a);
+                Py_END_ALLOW_THREADS
+            }
+            else
+            {
+                PyQtSlot *slot = qo->pslots.at(_id - qo->nr_signals);
+
+                ok = slot->invoke(_a, (PyObject *)pySelf, _a[0]);
+            }
+        }
+
+        _id -= qo->nr_signals + qo->pslots.count();
+    }
+    else if (_c == QMetaObject::ReadProperty)
+    {
+        if (_id < qo->pprops.count())
+        {
+            qpycore_pyqtProperty *prop = qo->pprops.at(_id);
+
+            if (prop->pyqtprop_get)
+            {
+                PyObject *py = PyObject_CallFunction(prop->pyqtprop_get,
+                        const_cast<char *>("O"), pySelf);
+
+                if (py)
+                {
+                    ok = prop->pyqtprop_parsed_type->fromPyObject(py, _a[0]);
+                    Py_DECREF(py);
+                }
+                else
+                {
+                    ok = false;
+                }
+            }
+        }
+
+        _id -= qo->pprops.count();
+    }
+    else if (_c == QMetaObject::WriteProperty)
+    {
+        if (_id < qo->pprops.count())
+        {
+            qpycore_pyqtProperty *prop = qo->pprops.at(_id);
+
+            if (prop->pyqtprop_set)
+            {
+                PyObject *py = prop->pyqtprop_parsed_type->toPyObject(_a[0]);
+
+                if (py)
+                {
+                    PyObject *res = PyObject_CallFunction(prop->pyqtprop_set,
+                            const_cast<char *>("OO"), pySelf, py);
+
+                    if (res)
+                        Py_DECREF(res);
+                    else
+                        ok = false;
+
+                    Py_DECREF(py);
+                }
+                else
+                {
+                    ok = false;
+                }
+            }
+        }
+
+        _id -= qo->pprops.count();
+    }
+    else if (_c == QMetaObject::ResetProperty)
+    {
+        if (_id < qo->pprops.count())
+        {
+            qpycore_pyqtProperty *prop = qo->pprops.at(_id);
+
+            if (prop->pyqtprop_reset)
+            {
+                PyObject *py = PyObject_CallFunction(prop->pyqtprop_reset,
+                        const_cast<char *>("O"), pySelf);
+
+                if (py)
+                    Py_DECREF(py);
+                else
+                    ok = false;
+            }
+        }
+
+        _id -= qo->pprops.count();
+    }
+    else if (_c == QMetaObject::QueryPropertyDesignable)
+        _id -= qo->pprops.count();
+    else if (_c == QMetaObject::QueryPropertyScriptable)
+        _id -= qo->pprops.count();
+    else if (_c == QMetaObject::QueryPropertyStored)
+        _id -= qo->pprops.count();
+    else if (_c == QMetaObject::QueryPropertyEditable)
+        _id -= qo->pprops.count();
+    else if (_c == QMetaObject::QueryPropertyUser)
+        _id -= qo->pprops.count();
+
+    // Handle any Python errors.
+    if (!ok)
+    {
+        PyErr_Print();
+        return -1;
+    }
+
+    return _id;
+}
+
+
+// This is the helper for all implementations of QObject::qt_metacast().
+bool qpycore_qobject_qt_metacast(sipSimpleWrapper *pySelf,
+        const sipTypeDef *base, const char *_clname, void **sipCpp)
+{
+    *sipCpp = 0;
+
+    if (!_clname)
+        return true;
+
+    // Check if the Python object has gone.
+    if (!pySelf)
+        return true;
+
+    bool is_py_class = false;
+
+    SIP_BLOCK_THREADS
+
+    PyTypeObject *base_pytype = sipTypeAsPyTypeObject(base);
+    PyObject *mro = Py_TYPE(pySelf)->tp_mro;
+
+    for (SIP_SSIZE_T i = 0; i < PyTuple_GET_SIZE(mro); ++i)
+    {
+        PyTypeObject *pytype = (PyTypeObject *)PyTuple_GET_ITEM(mro, i);
+
+        if (!PyObject_IsInstance((PyObject *)pytype, (PyObject *)&qpycore_pyqtWrapperType_Type))
+            continue;
+
+        const sipTypeDef *td = ((sipWrapperType *)pytype)->type;
+
+        if (qstrcmp(pytype->tp_name, _clname) == 0)
+        {
+            // The generated type definitions represent the C++ (rather than
+            // Python) hierachy.  If the C++ hierachy doesn't match then the
+            // super-type must be provided by a mixin.
+            if (PyType_IsSubtype(base_pytype, pytype))
+                *sipCpp = sipGetAddress(pySelf);
+            else
+                *sipCpp = sipGetMixinAddress(pySelf, td);
+
+            is_py_class = true;
+            break;
+        }
+
+        if (((pyqt5ClassTypeDef *)td)->qt_interface && qstrcmp(((pyqt5ClassTypeDef *)td)->qt_interface, _clname) == 0)
+        {
+            *sipCpp = sipGetMixinAddress(pySelf, td);
+            is_py_class = true;
+            break;
+        }
+    }
+
+    SIP_UNBLOCK_THREADS
+
+    return is_py_class;
+}
+
+
+// This is a helper for QObject.staticMetaObject %GetCode.
+PyObject *qpycore_qobject_staticmetaobject(PyObject *type_obj)
+{
+    pyqtWrapperType *pyqt_wt = (pyqtWrapperType *)type_obj;
+    const QMetaObject *mo;
+
+    if (pyqt_wt->metaobject)
+    {
+        // It's a sub-type of a wrapped type.
+        mo = pyqt_wt->metaobject->mo;
+    }
+    else
+    {
+        // It's a wrapped type.
+        pyqt5ClassTypeDef *pyqt_ctd = (pyqt5ClassTypeDef *)((sipWrapperType *)pyqt_wt)->type;
+
+        if (!pyqt_ctd)
+        {
+            /*
+             * This is a side effect of a wrapped class not being fully ready
+             * until sip's meta-class's __init__() has run (rather than after
+             * its __new__() method as might be expected).
+             */
+            PyErr_SetString(PyExc_AttributeError,
+                    "staticMetaObject isn't available until the meta-class's __init__ returns");
+            return 0;
+        }
+
+        mo = reinterpret_cast<const QMetaObject *>(pyqt_ctd->static_metaobject);
+    }
+
+    return sipConvertFromType(const_cast<QMetaObject *>(mo), sipType_QMetaObject, 0);
+}
diff --git a/qpy/QtCore/qpycore_qobject_helpers.h b/qpy/QtCore/qpycore_qobject_helpers.h
new file mode 100644
index 0000000..405fe63
--- /dev/null
+++ b/qpy/QtCore/qpycore_qobject_helpers.h
@@ -0,0 +1,40 @@
+// This defines the interfaces of the helpers for QObject.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_QOBJECT_HELPERS_H
+#define _QPYCORE_QOBJECT_HELPERS_H
+
+
+#include <Python.h>
+
+#include <QMetaObject>
+
+#include "sipAPIQtCore.h"
+
+
+const QMetaObject *qpycore_qobject_metaobject(sipSimpleWrapper *pySelf,
+        sipTypeDef *base);
+int qpycore_qobject_qt_metacall(sipSimpleWrapper *pySelf, sipTypeDef *base,
+        QMetaObject::Call _c, int _id, void **_a);
+bool qpycore_qobject_qt_metacast(sipSimpleWrapper *pySelf,
+        const sipTypeDef *base, const char *_clname, void **);
+
+
+#endif
diff --git a/qpy/QtCore/qpycore_qstring.cpp b/qpy/QtCore/qpycore_qstring.cpp
new file mode 100644
index 0000000..c07ea8b
--- /dev/null
+++ b/qpy/QtCore/qpycore_qstring.cpp
@@ -0,0 +1,179 @@
+// This is the support for QString.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+#include <string.h>
+
+#include <QString>
+#include <QVector>
+
+#include "qpycore_api.h"
+
+
+// Work out if we should enable PEP 393 support.  This is complicated by the
+// broken LLVM that XCode v4 installs.
+#if PY_VERSION_HEX >= 0x03030000
+#if defined(Q_OS_MAC)
+#if !defined(__llvm__) || defined(__clang__)
+// Python v3.3 on a Mac using either g++ or Clang, but not LLVM.
+#define PYQT_PEP_393
+#endif
+#else
+// Python v3.3 on a non-Mac.
+#define PYQT_PEP_393
+#endif
+#endif
+
+
+// Convert a QString to a Python Unicode object.
+PyObject *qpycore_PyObject_FromQString(const QString &qstr)
+{
+    PyObject *obj;
+
+#if defined(PYQT_PEP_393)
+    // We have to work out exactly which kind to use.  We assume ASCII while we
+    // are checking so that we only go through the string once is the most
+    // common case.  Note that we can't use PyUnicode_FromKindAndData() because
+    // it doesn't handle surrogates in UCS2 strings.
+    int py_len = qstr.length();
+
+    if ((obj = PyUnicode_New(py_len, 0x007f)) == NULL)
+        return NULL;
+
+    int kind = PyUnicode_KIND(obj);
+    void *data = PyUnicode_DATA(obj);
+    const QChar *qch = qstr.data();
+
+    for (int i = 0; i < py_len; ++i)
+    {
+        ushort uch = qch->unicode();
+
+        if (uch > 0x007f)
+        {
+            // This is useless.
+            Py_DECREF(obj);
+
+            // Work out what kind we really need and what the Python length
+            // should be.
+            Py_UCS4 maxchar = 0x00ff;
+
+            do
+            {
+                if (uch > 0x00ff)
+                {
+                    if (maxchar == 0x00ff)
+                        maxchar = 0x00ffff;
+
+                    // See if this is a surrogate pair.  We don't need to
+                    // bounds check because Qt puts a null QChar on the end.
+                    if (qch->isHighSurrogate() && (qch + 1)->isLowSurrogate())
+                    {
+                        maxchar = 0x10ffff;
+                        --py_len;
+                        ++qch;
+                    }
+                }
+
+                uch = (++qch)->unicode();
+            }
+            while (!qch->isNull());
+
+            // Create the correctly sized object.
+            if ((obj = PyUnicode_New(py_len, maxchar)) == NULL)
+                return NULL;
+
+            kind = PyUnicode_KIND(obj);
+            data = PyUnicode_DATA(obj);
+            qch = qstr.data();
+
+            for (int py_i = 0; py_i < py_len; ++py_i)
+            {
+                Py_UCS4 py_ch;
+
+                if (qch->isHighSurrogate() && (qch + 1)->isLowSurrogate())
+                {
+                    py_ch = QChar::surrogateToUcs4(*qch, *(qch + 1));
+                    ++qch;
+                }
+                else
+                {
+                    py_ch = qch->unicode();
+                }
+
+                ++qch;
+
+                PyUnicode_WRITE(kind, data, py_i, py_ch);
+            }
+
+            break;
+        }
+
+        ++qch;
+
+        PyUnicode_WRITE(kind, data, i, uch);
+    }
+#elif defined(Py_UNICODE_WIDE)
+    QVector<uint> ucs4 = qstr.toUcs4();
+
+    if ((obj = PyUnicode_FromUnicode(NULL, ucs4.size())) == NULL)
+        return NULL;
+
+    memcpy(PyUnicode_AS_UNICODE(obj), ucs4.constData(),
+            ucs4.size() * sizeof (Py_UNICODE));
+#else
+    if ((obj = PyUnicode_FromUnicode(NULL, qstr.length())) == NULL)
+        return NULL;
+
+    memcpy(PyUnicode_AS_UNICODE(obj), qstr.utf16(),
+            qstr.length() * sizeof (Py_UNICODE));
+#endif
+
+    return obj;
+}
+
+
+// Convert a Python Unicode object to a QString.
+QString qpycore_PyObject_AsQString(PyObject *obj)
+{
+#if defined(PYQT_PEP_393)
+    SIP_SSIZE_T len = PyUnicode_GET_LENGTH(obj);
+
+    switch (PyUnicode_KIND(obj))
+    {
+    case PyUnicode_1BYTE_KIND:
+        return QString::fromLatin1((char *)PyUnicode_1BYTE_DATA(obj), len);
+
+    case PyUnicode_2BYTE_KIND:
+        // The (QChar *) cast should be safe.
+        return QString((QChar *)PyUnicode_2BYTE_DATA(obj), len);
+
+    case PyUnicode_4BYTE_KIND:
+        return QString::fromUcs4(PyUnicode_4BYTE_DATA(obj), len);
+    }
+
+    return QString();
+#elif defined(Py_UNICODE_WIDE)
+    return QString::fromUcs4((const uint *)PyUnicode_AS_UNICODE(obj),
+            PyUnicode_GET_SIZE(obj));
+#else
+    return QString::fromUtf16((const ushort *)PyUnicode_AS_UNICODE(obj),
+            PyUnicode_GET_SIZE(obj));
+#endif
+}
diff --git a/qpy/QtCore/qpycore_qvariant.cpp b/qpy/QtCore/qpycore_qvariant.cpp
new file mode 100644
index 0000000..4a1d4d4
--- /dev/null
+++ b/qpy/QtCore/qpycore_qvariant.cpp
@@ -0,0 +1,44 @@
+// This is the support for QVariant.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QVariant>
+
+#include "qpycore_api.h"
+#include "qpycore_chimera.h"
+
+
+// Return the Python object from the variant.
+PyObject *qpycore_PyObject_FromQVariant(const QVariant &qvar)
+{
+    return Chimera::toAnyPyObject(qvar);
+}
+
+
+// Return a variant containing the Python object.  It will be converted to a
+// C++ instance if possible (ie. if it is a fundamental type or a direct
+// wrapped type).  Otherwise it is left as a Python object (with an increased
+// reference count).  An exception is raised if there was a conversion error.
+// (The type of the object will never be the cause of an error.)
+QVariant qpycore_PyObject_AsQVariant(PyObject *obj, int *is_err)
+{
+    return Chimera::fromAnyPyObject(obj, is_err);
+}
diff --git a/qpy/QtCore/qpycore_qvariant_value.cpp b/qpy/QtCore/qpycore_qvariant_value.cpp
new file mode 100644
index 0000000..fd5a67b
--- /dev/null
+++ b/qpy/QtCore/qpycore_qvariant_value.cpp
@@ -0,0 +1,222 @@
+// This implements the conversion of a QVariant to a Python object and is part
+// of the public API.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QVariant>
+
+#include "qpycore_chimera.h"
+
+#include "sipAPIQtCore.h"
+
+
+// Forward declarations.
+static PyObject *convert_hash(const Chimera *ct, const QVariantHash &value);
+static PyObject *convert_list(const Chimera *ct, const QVariantList &value);
+static PyObject *convert_map(const Chimera *ct, const QVariantMap &value);
+static PyObject *convert(const Chimera *ct, const QVariant &value);
+static int add_variant_to_dict(const Chimera *ct, PyObject *dict,
+        const QString &key, const QVariant &value);
+
+
+// Convert a QVariant to a Python object according to an optional type.
+PyObject *pyqt5_from_qvariant_by_type(QVariant &value, PyObject *type)
+{
+    PyObject *value_obj;
+
+    if (type)
+    {
+        const Chimera *ct = Chimera::parse(type);
+
+        if (!ct)
+            return 0;
+
+        QVariant::Type wanted = static_cast<QVariant::Type>(ct->metatype());
+
+        // Get QVariant to do a conversion if there is one to do.
+        if (value.isValid() && ct->metatype() < static_cast<int>(QVariant::UserType))
+        {
+            // If we have a QStringList but are not wanting one then convert it
+            // to a QVariantList.
+            if (wanted != QVariant::StringList && value.type() == QVariant::StringList)
+                value.convert(QVariant::List);
+
+            // If we have a container but are not wanting one then assume we
+            // want a container with elements of the wanted type.
+            if (wanted != QVariant::List && value.type() == QVariant::List)
+            {
+                // If we have a QVariantList but we wanted a QStringList then
+                // assume each variant is a string.
+                if (wanted == QVariant::StringList)
+                    value_obj = convert(ct, value);
+                else
+                    value_obj = convert_list(ct, value.toList());
+            }
+            else if (wanted != QVariant::Map && value.type() == QVariant::Map)
+            {
+                value_obj = convert_map(ct, value.toMap());
+            }
+            else if (wanted != QVariant::Hash && value.type() == QVariant::Hash)
+            {
+                value_obj = convert_hash(ct, value.toHash());
+            }
+            else
+            {
+                value_obj = convert(ct, value);
+            }
+        }
+        else if (!value.isValid())
+        {
+            // Convert an invalid value to the default value of the requested
+            // type.
+            if (ct->py_type())
+                value_obj = PyObject_CallObject(ct->py_type(), NULL);
+            else
+                value_obj = ct->toPyObject(QVariant(wanted));
+        }
+        else
+        {
+            // This is likely to fail and the exception will say why.
+            value_obj = ct->toPyObject(value);
+        }
+
+        delete ct;
+    }
+    else
+    {
+        QVariant *heap = new QVariant(value);
+        value_obj = sipConvertFromNewType(heap, sipType_QVariant, 0);
+
+        if (!value_obj)
+            delete heap;
+    }
+
+    return value_obj;
+}
+
+
+// Convert a QVariantList to a list of Python objects.
+static PyObject *convert_list(const Chimera *ct, const QVariantList &value)
+{
+    PyObject *list = PyList_New(value.size());
+
+    if (!list)
+        return 0;
+
+    for (int i = 0; i < value.size(); ++i)
+    {
+        PyObject *el = convert(ct, value.at(i));
+
+        if (!el)
+        {
+            Py_DECREF(list);
+            return 0;
+        }
+
+        PyList_SET_ITEM(list, i, el);
+    }
+
+    return list;
+}
+
+
+// Convert a QVariantMap to a dict of Python objects.
+static PyObject *convert_map(const Chimera *ct, const QVariantMap &value)
+{
+    PyObject *dict = PyDict_New();
+
+    if (!dict)
+        return 0;
+
+    for (QVariantMap::const_iterator it = value.constBegin(); it != value.constEnd(); ++it)
+    {
+        if (add_variant_to_dict(ct, dict, it.key(), it.value()) < 0)
+        {
+            Py_DECREF(dict);
+            return 0;
+        }
+    }
+
+    return dict;
+}
+
+
+// Convert a QVariantHash to a dict of Python objects.
+static PyObject *convert_hash(const Chimera *ct, const QVariantHash &value)
+{
+    PyObject *dict = PyDict_New();
+
+    if (!dict)
+        return 0;
+
+    for (QVariantHash::const_iterator it = value.constBegin(); it != value.constEnd(); ++it)
+    {
+        if (add_variant_to_dict(ct, dict, it.key(), it.value()) < 0)
+        {
+            Py_DECREF(dict);
+            return 0;
+        }
+    }
+
+    return dict;
+}
+
+
+// Convert a QVariant to a Python object.
+static PyObject *convert(const Chimera *ct, const QVariant &value)
+{
+    QVariant converted = value;
+
+    if (!converted.convert(static_cast<QVariant::Type>(ct->metatype())))
+        converted = value;
+
+    return ct->toPyObject(converted);
+}
+
+
+// Add a QVariant to a Python dict with a QString key.
+static int add_variant_to_dict(const Chimera *ct, PyObject *dict,
+        const QString &key, const QVariant &value)
+{
+    QString *key_heap = new QString(key);
+    PyObject *key_obj = sipConvertFromNewType(key_heap, sipType_QString, 0);
+
+    if (!key_obj)
+    {
+        delete key_heap;
+        return 0;
+    }
+
+    PyObject *value_obj = convert(ct, value);
+
+    if (!value_obj)
+    {
+        Py_DECREF(key_obj);
+        return 0;
+    }
+
+    int rc = PyDict_SetItem(dict, key_obj, value_obj);
+
+    Py_DECREF(key_obj);
+    Py_DECREF(value_obj);
+
+    return rc;
+}
diff --git a/qpy/QtCore/qpycore_types.cpp b/qpy/QtCore/qpycore_types.cpp
new file mode 100644
index 0000000..d11cee6
--- /dev/null
+++ b/qpy/QtCore/qpycore_types.cpp
@@ -0,0 +1,642 @@
+// This contains the meta-type used by PyQt.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QByteArray>
+#include <QList>
+#include <QMap>
+#include <QMetaObject>
+#include <QMetaType>
+#include <QPair>
+
+// Defining PYQT_QOBJECT_GUARD will enable code that tries to detect when a
+// QObject created by Qt (ie. where we don't have a generated virtual dtor) is
+// destroyed thus allowing us to raise an exception rather than crashing.
+// However, there are problems:
+//
+// 1. The obvious choice to implement this is QWeakPointer.  However it cannot
+//    be used across threads.  The code checks to see if QObject is in the
+//    current thread, but can't do anything about the QObject being moved to
+//    another thread later on.
+//
+// 2. A QObject dtor may invoke a Python reimplementation that causes the
+//    QObject to be wrapped.  QWeakPointer will fail an assertion if it is
+//    being created for a QObject that is being deleted (rather than the more
+//    sensible behaviour of creating a null QWeakPointer).
+//
+// For the moment we disable the code until we have a better solution.  (If you
+// connect the destroyed signal of a QObject then move the QObject to a
+// different thread, will the signal be delivered properly?)
+#if defined(PYQT_QOBJECT_GUARD)
+#include <QThread>
+#include <QWeakPointer>
+#endif
+
+#include "qpycore_chimera.h"
+#include "qpycore_classinfo.h"
+#include "qpycore_enums_flags.h"
+#include "qpycore_misc.h"
+#include "qpycore_objectified_strings.h"
+#include "qpycore_pyqtproperty.h"
+#include "qpycore_pyqtsignal.h"
+#include "qpycore_pyqtslot.h"
+#include "qpycore_qmetaobjectbuilder.h"
+#include "qpycore_types.h"
+
+#include "sipAPIQtCore.h"
+
+
+// A tuple of the property name and definition.
+typedef QPair<PyObject *, PyObject *> PropertyData;
+
+
+// Forward declarations.
+extern "C" {
+static int pyqtWrapperType_init(pyqtWrapperType *self, PyObject *args,
+        PyObject *kwds);
+#if defined(PYQT_QOBJECT_GUARD)
+static PyObject *pyqtWrapperType_call(PyObject *type, PyObject *args,
+        PyObject *kwds);
+static void *qpointer_access_func(sipSimpleWrapper *w, AccessFuncOp op);
+#endif
+}
+
+static int trawl_hierarchy(PyTypeObject *pytype, qpycore_metaobject *qo,
+        QMetaObjectBuilder &builder, QList<const qpycore_pyqtSignal *> &psigs,
+        QMap<uint, PropertyData> &pprops);
+static int trawl_type(PyTypeObject *pytype, qpycore_metaobject *qo,
+        QMetaObjectBuilder &builder, QList<const qpycore_pyqtSignal *> &psigs,
+        QMap<uint, PropertyData> &pprops);
+static int create_dynamic_metaobject(pyqtWrapperType *pyqt_wt);
+static const QMetaObject *get_scope_qmetaobject(const Chimera *ct);
+static const QMetaObject *get_qmetaobject(pyqtWrapperType *pyqt_wt);
+
+
+// The meta-type for PyQt classes.
+PyTypeObject qpycore_pyqtWrapperType_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    SIP_TPNAME_CAST("PyQt5.QtCore.pyqtWrapperType"),    /* tp_name */
+    sizeof (pyqtWrapperType),   /* tp_basicsize */
+    0,                      /* tp_itemsize */
+    0,                      /* tp_dealloc */
+    0,                      /* tp_print */
+    0,                      /* tp_getattr */
+    0,                      /* tp_setattr */
+    0,                      /* tp_compare */
+    0,                      /* tp_repr */
+    0,                      /* tp_as_number */
+    0,                      /* tp_as_sequence */
+    0,                      /* tp_as_mapping */
+    0,                      /* tp_hash */
+#if defined(PYQT_QOBJECT_GUARD)
+    pyqtWrapperType_call,   /* tp_call */
+#else
+    0,                      /* tp_call */
+#endif
+    0,                      /* tp_str */
+    0,                      /* tp_getattro */
+    0,                      /* tp_setattro */
+    0,                      /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */
+    0,                      /* tp_doc */
+    0,                      /* tp_traverse */
+    0,                      /* tp_clear */
+    0,                      /* tp_richcompare */
+    0,                      /* tp_weaklistoffset */
+    0,                      /* tp_iter */
+    0,                      /* tp_iternext */
+    0,                      /* tp_methods */
+    0,                      /* tp_members */
+    0,                      /* tp_getset */
+    0,                      /* tp_base */
+    0,                      /* tp_dict */
+    0,                      /* tp_descr_get */
+    0,                      /* tp_descr_set */
+    0,                      /* tp_dictoffset */
+    (initproc)pyqtWrapperType_init, /* tp_init */
+    0,                      /* tp_alloc */
+    0,                      /* tp_new */
+    0,                      /* tp_free */
+    0,                      /* tp_is_gc */
+    0,                      /* tp_bases */
+    0,                      /* tp_mro */
+    0,                      /* tp_cache */
+    0,                      /* tp_subclasses */
+    0,                      /* tp_weaklist */
+    0,                      /* tp_del */
+    0,                      /* tp_version_tag */
+#if PY_VERSION_HEX >= 0x03040000
+    0,                      /* tp_finalize */
+#endif
+};
+
+
+// The type init slot.
+static int pyqtWrapperType_init(pyqtWrapperType *self, PyObject *args,
+        PyObject *kwds)
+{
+    // Let the super-type complete the basic initialisation.
+    if (sipWrapperType_Type->tp_init((PyObject *)self, args, kwds) < 0)
+        return -1;
+
+    pyqt5ClassTypeDef *pyqt_td = (pyqt5ClassTypeDef *)((sipWrapperType *)self)->type;
+
+    if (pyqt_td && !sipIsExactWrappedType((sipWrapperType *)self))
+    {
+        // Create a dynamic meta-object as its base wrapped type has a static
+        // Qt meta-object.
+        if (pyqt_td->static_metaobject && create_dynamic_metaobject(self) < 0)
+            return -1;
+    }
+
+    return 0;
+}
+
+
+// Create a dynamic meta-object for a Python type by introspecting its
+// attributes.  Note that it leaks if the type is deleted.
+static int create_dynamic_metaobject(pyqtWrapperType *pyqt_wt)
+{
+    PyTypeObject *pytype = (PyTypeObject *)pyqt_wt;
+    qpycore_metaobject *qo = new qpycore_metaobject;
+    QMetaObjectBuilder builder;
+
+    // Get any class info.
+    QList<ClassInfo> class_info_list = qpycore_get_class_info_list();
+
+    // Get any enums/flags.
+    QList<EnumsFlags> enums_flags_list = qpycore_get_enums_flags_list();
+
+    // Get the super-type's meta-object.
+    builder.setSuperClass(get_qmetaobject((pyqtWrapperType *)pytype->tp_base));
+
+    // Get the name of the type.  Dynamic types have simple names.
+    builder.setClassName(pytype->tp_name);
+
+    // Go through the class hierarchy getting all PyQt properties, slots and
+    // signals.
+
+    QList<const qpycore_pyqtSignal *> psigs;
+    QMap<uint, PropertyData> pprops;
+
+    if (trawl_hierarchy(pytype, qo, builder, psigs, pprops) < 0)
+        return -1;
+
+    qo->nr_signals = psigs.count();
+
+    // Initialise the header section of the data table.  Note that Qt v4.5
+    // introduced revision 2 which added constructors.  However the design is
+    // broken in that the static meta-call function doesn't provide enough
+    // information to determine which Python sub-class of a Qt class is to be
+    // created.  So we stick with revision 1 (and don't allow pyqtSlot() to
+    // decorate __init__).
+
+    // Set up any class information.
+    for (int i = 0; i < class_info_list.count(); ++i)
+    {
+        const ClassInfo &ci = class_info_list.at(i);
+
+        builder.addClassInfo(ci.first, ci.second);
+    }
+
+    // Set up any enums/flags.
+    for (int i = 0; i < enums_flags_list.count(); ++i)
+    {
+        const EnumsFlags &ef = enums_flags_list.at(i);
+
+        QByteArray scoped_name(pytype->tp_name);
+        scoped_name.append("::");
+        scoped_name.append(ef.name);
+        QMetaEnumBuilder enum_builder = builder.addEnumerator(scoped_name);
+
+        enum_builder.setIsFlag(ef.isFlag);
+
+        QHash<QByteArray, int>::const_iterator it = ef.keys.constBegin();
+
+        while (it != ef.keys.constEnd())
+        {
+            enum_builder.addKey(it.key(), it.value());
+            ++it;
+        }
+    }
+
+    // Add the signals to the meta-object.
+    for (int g = 0; g < qo->nr_signals; ++g)
+    {
+        const qpycore_pyqtSignal *ps = psigs.at(g);
+
+        QMetaMethodBuilder signal_builder = builder.addSignal(
+                ps->parsed_signature->signature.mid(1));
+
+        if (ps->parameter_names)
+            signal_builder.setParameterNames(*ps->parameter_names);
+
+        signal_builder.setRevision(ps->revision);
+    }
+
+    // Add the slots to the meta-object.
+    for (int s = 0; s < qo->pslots.count(); ++s)
+    {
+        const Chimera::Signature *slot_signature = qo->pslots.at(s)->slotSignature();
+        const QByteArray &sig = slot_signature->signature;
+
+        QMetaMethodBuilder slot_builder = builder.addSlot(sig);
+
+        // Add any type.
+        if (slot_signature->result)
+            slot_builder.setReturnType(slot_signature->result->name());
+
+        slot_builder.setRevision(slot_signature->revision);
+    }
+
+    // Add the properties to the meta-object.
+    QMapIterator<uint, PropertyData> it(pprops);
+
+    for (int p = 0; it.hasNext(); ++p)
+    {
+        it.next();
+
+        const PropertyData &pprop = it.value();
+        const char *prop_name = SIPBytes_AS_STRING(pprop.first);
+        qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)pprop.second;
+        int notifier_id;
+
+        if (pp->pyqtprop_notify)
+        {
+            qpycore_pyqtSignal *ps = (qpycore_pyqtSignal *)pp->pyqtprop_notify;
+            const QByteArray &sig = ps->parsed_signature->signature;
+
+            notifier_id = builder.indexOfSignal(sig.mid(1));
+
+            if (notifier_id < 0)
+            {
+                PyErr_Format(PyExc_TypeError,
+                        "the notify signal '%s' was not defined in this class",
+                        sig.constData() + 1);
+
+                // Note that we leak the property name.
+                return -1;
+            }
+        }
+        else
+        {
+            notifier_id = -1;
+        }
+
+        // A Qt v5 revision 7 meta-object holds the QMetaType::Type of the type
+        // or its name if it is unresolved (ie. not known to the type system).
+        // In Qt v4 both are held.  For QObject sub-classes Chimera will fall
+        // back to the QMetaType::QObjectStar if there is no specific meta-type
+        // for the sub-class.  This means that, for Qt v4,
+        // QMetaProperty::read() can handle the type.  However, Qt v5 doesn't
+        // know that the unresolved type is a QObject sub-class.  Therefore we
+        // have to tell it that the property is a QObject, rather than the
+        // sub-class.  This means that QMetaProperty.typeName() will always
+        // return "QObject*".
+        QByteArray prop_type;
+
+        if (pp->pyqtprop_parsed_type->metatype() == QMetaType::QObjectStar)
+        {
+            // However, if the type is a Python sub-class of QObject then we
+            // use the name of the Python type.  This anticipates that the type
+            // is one that will be proxied by QML at some point.
+            if (pp->pyqtprop_parsed_type->typeDef() == sipType_QObject)
+            {
+                prop_type = ((PyTypeObject *)pp->pyqtprop_parsed_type->py_type())->tp_name;
+                prop_type.append('*');
+            }
+            else
+            {
+                prop_type = "QObject*";
+            }
+        }
+        else
+        {
+            prop_type = pp->pyqtprop_parsed_type->name();
+        }
+
+        QMetaPropertyBuilder prop_builder = builder.addProperty(prop_name,
+                prop_type, notifier_id);
+
+        // Reset the defaults.
+        prop_builder.setReadable(false);
+        prop_builder.setWritable(false);
+
+        // Enum or flag.
+        if (pp->pyqtprop_parsed_type->isEnum() || pp->pyqtprop_parsed_type->isFlag())
+        {
+            prop_builder.setEnumOrFlag(true);
+        }
+
+        if (pp->pyqtprop_get && PyCallable_Check(pp->pyqtprop_get))
+        {
+            // Readable.
+            prop_builder.setReadable(true);
+        }
+
+        if (pp->pyqtprop_set && PyCallable_Check(pp->pyqtprop_set))
+        {
+            // Writable.
+            prop_builder.setWritable(true);
+
+            // See if the name of the setter follows the Designer convention.
+            // If so tell the UI compilers not to use setProperty().
+            PyObject *setter_name_obj = PyObject_GetAttr(pp->pyqtprop_set,
+                    qpycore_dunder_name);
+
+            if (setter_name_obj)
+            {
+                PyObject *ascii_obj = setter_name_obj;
+                const char *ascii = sipString_AsASCIIString(&ascii_obj);
+                Py_DECREF(setter_name_obj);
+
+                if (ascii)
+                {
+                    if (qstrlen(ascii) > 3 && ascii[0] == 's' &&
+                            ascii[1] == 'e' && ascii[2] == 't' &&
+                            ascii[3] == toupper(prop_name[0]) &&
+                            qstrcmp(&ascii[4], &prop_name[1]) == 0)
+                        prop_builder.setStdCppSet(true);
+                }
+
+                Py_DECREF(ascii_obj);
+            }
+
+            PyErr_Clear();
+        }
+
+        if (pp->pyqtprop_reset && PyCallable_Check(pp->pyqtprop_reset))
+        {
+            // Resetable.
+            prop_builder.setResettable(true);
+        }
+
+        // Add the property flags.  Note that Qt4 always seems to have
+        // ResolveEditable set but QMetaObjectBuilder doesn't provide an API
+        // call to do it.
+        prop_builder.setDesignable(pp->pyqtprop_flags & 0x00001000);
+        prop_builder.setScriptable(pp->pyqtprop_flags & 0x00004000);
+        prop_builder.setStored(pp->pyqtprop_flags & 0x00010000);
+        prop_builder.setUser(pp->pyqtprop_flags & 0x00100000);
+        prop_builder.setConstant(pp->pyqtprop_flags & 0x00000400);
+        prop_builder.setFinal(pp->pyqtprop_flags & 0x00000800);
+
+        prop_builder.setRevision(pp->pyqtprop_revision);
+
+        // Save the property data for qt_metacall().  (We already have a
+        // reference.)
+        qo->pprops.append(pp);
+
+        // We've finished with the property name.
+        Py_DECREF(pprop.first);
+    }
+
+    // Initialise the rest of the meta-object.
+    qo->mo = builder.toMetaObject();
+
+    // Save the meta-object.
+    pyqt_wt->metaobject = qo;
+
+    return 0;
+}
+
+
+// Trawl a type's hierarchy looking for any slots, signals or properties.
+static int trawl_hierarchy(PyTypeObject *pytype, qpycore_metaobject *qo,
+        QMetaObjectBuilder &builder, QList<const qpycore_pyqtSignal *> &psigs,
+        QMap<uint, PropertyData> &pprops)
+{
+    if (trawl_type(pytype, qo, builder, psigs, pprops) < 0)
+        return -1;
+
+    if (!pytype->tp_bases)
+        return 0;
+
+    Q_ASSERT(PyTuple_Check(pytype->tp_bases));
+
+    for (SIP_SSIZE_T i = 0; i < PyTuple_GET_SIZE(pytype->tp_bases); ++i)
+    {
+        PyTypeObject *sup = (PyTypeObject *)PyTuple_GET_ITEM(pytype->tp_bases, i);
+
+#if PY_MAJOR_VERSION < 3
+        /* Ignore classic classes as mixins. */
+        if (PyClass_Check((PyObject *)sup))
+            continue;
+#endif
+
+        if (PyType_IsSubtype(sup, sipTypeAsPyTypeObject(sipType_QObject)))
+            continue;
+
+        if (trawl_hierarchy(sup, qo, builder, psigs, pprops) < 0)
+            return -1;
+    }
+
+    return 0;
+}
+
+
+// Trawl a type's dict looking for any slots, signals or properties.
+static int trawl_type(PyTypeObject *pytype, qpycore_metaobject *qo,
+        QMetaObjectBuilder &builder, QList<const qpycore_pyqtSignal *> &psigs,
+        QMap<uint, PropertyData> &pprops)
+{
+    SIP_SSIZE_T pos = 0;
+    PyObject *key, *value;
+
+    while (PyDict_Next(pytype->tp_dict, &pos, &key, &value))
+    {
+        // See if it is a slot, ie. it has been decorated with pyqtSlot().
+        PyObject *sig_obj = PyObject_GetAttr(value,
+                qpycore_dunder_pyqtsignature);
+
+        if (sig_obj)
+        {
+            // Make sure it is a list and not some legitimate attribute that
+            // happens to use our special name.
+            if (PyList_Check(sig_obj))
+            {
+                for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(sig_obj); ++i)
+                {
+                    // Set up the skeleton slot.
+                    PyObject *decoration = PyList_GET_ITEM(sig_obj, i);
+                    Chimera::Signature *slot_signature = Chimera::Signature::fromPyObject(decoration);
+
+                    PyQtSlot *slot = new PyQtSlot(value, (PyObject *)pytype,
+                            slot_signature);;
+
+                    qo->pslots.append(slot);
+                }
+            }
+
+            Py_DECREF(sig_obj);
+        }
+        else
+        {
+            PyErr_Clear();
+
+            // Make sure the key is an ASCII string.  Delay the error checking
+            // until we know we actually need it.
+            const char *ascii_key = sipString_AsASCIIString(&key);
+
+            // See if the value is of interest.
+            if (PyObject_TypeCheck(value, &qpycore_pyqtProperty_Type))
+            {
+                // It is a property.
+
+                if (!ascii_key)
+                    return -1;
+
+                Py_INCREF(value);
+
+                qpycore_pyqtProperty *pp = (qpycore_pyqtProperty *)value;
+
+                pprops.insert(pp->pyqtprop_sequence, PropertyData(key, value));
+
+                // See if the property has a scope.  If so, collect all
+                // QMetaObject pointers that are not in the super-class
+                // hierarchy.
+                const QMetaObject *mo = get_scope_qmetaobject(pp->pyqtprop_parsed_type);
+
+                if (mo)
+                    builder.addRelatedMetaObject(mo);
+            }
+            else if (PyObject_TypeCheck(value, &qpycore_pyqtSignal_Type))
+            {
+                // It is a signal.
+
+                if (!ascii_key)
+                    return -1;
+
+                qpycore_pyqtSignal *ps = (qpycore_pyqtSignal *)value;
+
+                // Make sure the signal has a name.
+                qpycore_set_signal_name(ps, pytype->tp_name, ascii_key);
+
+                // Add all the overloads.
+                do
+                {
+                    psigs.append(ps);
+                    ps = ps->next;
+                }
+                while (ps);
+
+                Py_DECREF(key);
+            }
+        }
+    }
+
+    return 0;
+}
+
+
+// Return the QMetaObject for an enum type's scope.
+static const QMetaObject *get_scope_qmetaobject(const Chimera *ct)
+{
+    // Check it is an enum.
+    if (!ct->isEnum())
+        return 0;
+
+    // Check it has a scope.
+    const sipTypeDef *td = sipTypeScope(ct->typeDef());
+
+    if (!td)
+        return 0;
+
+    // Check the scope is wrapped by PyQt.
+    if (!qpycore_is_pyqt_class(td))
+        return 0;
+
+    return get_qmetaobject((pyqtWrapperType *)sipTypeAsPyTypeObject(td));
+}
+
+
+// Return the QMetaObject for a type.
+static const QMetaObject *get_qmetaobject(pyqtWrapperType *pyqt_wt)
+{
+    // See if it's a sub-type of a wrapped type.
+    if (pyqt_wt->metaobject)
+        return pyqt_wt->metaobject->mo;
+
+    // It's a wrapped type.
+    return reinterpret_cast<const QMetaObject *>(((pyqt5ClassTypeDef *)((sipWrapperType *)pyqt_wt)->type)->static_metaobject);
+}
+
+
+#if defined(PYQT_QOBJECT_GUARD)
+
+// Reimplemented to wrap any QObjects created internally by Qt so that we can
+// detect if they get destroyed.
+static PyObject *pyqtWrapperType_call(PyObject *type, PyObject *args, PyObject *kwds)
+{
+    PyObject *self = sipWrapperType_Type->tp_call(type, args, kwds);
+
+    // See if the object was created and it is a QObject sub-class.
+    if (self && PyObject_TypeCheck(self, sipTypeAsPyTypeObject(sipType_QObject)))
+    {
+        sipSimpleWrapper *w = (sipSimpleWrapper *)self;
+
+        // See if it is created internally by Qt and doesn't already have an
+        // access function (e.g. qApp).
+        if (!sipIsDerived(w) && !w->access_func)
+        {
+            QObject *qobj = reinterpret_cast<QObject *>(w->data);
+
+            // We can only guard objects in the same thread.
+            if (qobj->thread() == QThread::currentThread())
+            {
+                QWeakPointer<QObject> *guard = new QWeakPointer<QObject>(qobj);
+
+                w->data = guard;
+                w->access_func = qpointer_access_func;
+            }
+        }
+    }
+
+    return self;
+}
+
+
+// The access function for guarded QObject pointers.
+static void *qpointer_access_func(sipSimpleWrapper *w, AccessFuncOp op)
+{
+    QWeakPointer<QObject> *guard = reinterpret_cast<QWeakPointer<QObject> *>(w->data);
+    void *addr;
+
+    switch (op)
+    {
+    case UnguardedPointer:
+        addr = guard->data();
+        break;
+
+    case GuardedPointer:
+        addr = guard->isNull() ? 0 : guard->data();
+        break;
+
+    case ReleaseGuard:
+        delete guard;
+        addr = 0;
+        break;
+    }
+
+    return addr;
+}
+
+#endif
diff --git a/qpy/QtCore/qpycore_types.h b/qpy/QtCore/qpycore_types.h
new file mode 100644
index 0000000..e475bcd
--- /dev/null
+++ b/qpy/QtCore/qpycore_types.h
@@ -0,0 +1,93 @@
+// This defines the interfaces for the meta-type used by PyQt.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYCORE_TYPES_H
+#define _QPYCORE_TYPES_H
+
+
+#include <Python.h>
+
+#include <QByteArray>
+#include <QList>
+#include <QMetaObject>
+
+#include "qpycore_chimera.h"
+#include "qpycore_pyqtproperty.h"
+
+#include "sipAPIQtCore.h"
+
+
+class PyQtSlot;
+
+
+// This describes a slot.
+struct qpycore_slot
+{
+    // The slot itself.
+    sipSlot sip_slot;
+
+    // The parsed signature.
+    const Chimera::Signature *signature;
+};
+
+
+// This describes a dynamic meta-object.
+struct qpycore_metaobject
+{
+    // The meta-object built by QMetaObjectBuilder.
+    QMetaObject *mo;
+
+    // The list of properties.
+    QList<qpycore_pyqtProperty *> pprops;
+
+    // The list of slots.
+    QList<PyQtSlot *> pslots;
+
+    // The number of signals.
+    int nr_signals;
+};
+
+
+extern "C" {
+
+/*
+ * The meta-type of a PyQt wrapper type.
+ */
+typedef struct _pyqtWrapperType {
+    /*
+     * The super-meta-type.  This must be first in the structure so that it can
+     * be cast to a sipWrapperType *.
+     */
+    sipWrapperType super;
+
+    /*
+     * The type's dynamic metaobject (for QObject sub-classes) created by
+     * introspecting the Python type.
+     */
+    qpycore_metaobject *metaobject;
+} pyqtWrapperType;
+
+
+extern PyTypeObject qpycore_pyqtWrapperType_Type;
+
+}
+
+
+#endif
diff --git a/qpy/QtDBus/qpydbus_api.h b/qpy/QtDBus/qpydbus_api.h
new file mode 100644
index 0000000..cd074de
--- /dev/null
+++ b/qpy/QtDBus/qpydbus_api.h
@@ -0,0 +1,29 @@
+// This defines the API provided by this library.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYDBUS_API_H
+#define _QPYDBUS_API_H
+
+
+// Initialisation.
+void qpydbus_post_init();
+
+
+#endif
diff --git a/qpy/QtDBus/qpydbus_chimera_helpers.cpp b/qpy/QtDBus/qpydbus_chimera_helpers.cpp
new file mode 100644
index 0000000..2849639
--- /dev/null
+++ b/qpy/QtDBus/qpydbus_chimera_helpers.cpp
@@ -0,0 +1,257 @@
+// This is the implementation of the various Chimera helpers.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QDBusArgument>
+#include <QDBusObjectPath>
+#include <QDBusSignature>
+#include <QDBusVariant>
+#include <QMetaType>
+
+#include "qpydbus_chimera_helpers.h"
+
+#include "sipAPIQtDBus.h"
+
+
+// Forward declarations.
+static PyObject *from_variant_type(const QDBusArgument &arg);
+static PyObject *from_array_type(const QDBusArgument &arg);
+static PyObject *from_structure_type(const QDBusArgument &arg);
+static PyObject *from_map_type(const QDBusArgument &arg);
+static PyObject *from_qstring(const QString &arg);
+static PyObject *from_qvariant(const QVariant &arg);
+
+
+// Convert a QVariant to a Python object.
+bool qpydbus_from_qvariant_convertor(const QVariant &var, PyObject **objp)
+{
+    // Handle QDBusObjectPath.
+    if (var.userType() == qMetaTypeId<QDBusObjectPath>())
+    {
+        *objp = from_qstring(var.value<QDBusObjectPath>().path());
+
+        return true;
+    }
+
+    // Handle QDBusSignature.
+    if (var.userType() == qMetaTypeId<QDBusSignature>())
+    {
+        *objp = from_qstring(var.value<QDBusSignature>().signature());
+
+        return true;
+    }
+
+    // Handle QDBusVariant.
+    if (var.userType() == qMetaTypeId<QDBusVariant>())
+    {
+        *objp = from_qvariant(var.value<QDBusVariant>().variant());
+
+        return true;
+    }
+
+    // Anything else must be a QDBusArgument.
+    if (var.userType() != qMetaTypeId<QDBusArgument>())
+        return false;
+
+    QDBusArgument arg = var.value<QDBusArgument>();
+
+    switch (arg.currentType())
+    {
+    case QDBusArgument::BasicType:
+        *objp = from_qvariant(arg.asVariant());
+        break;
+
+    case QDBusArgument::VariantType:
+        *objp = from_variant_type(arg);
+        break;
+
+    case QDBusArgument::ArrayType:
+        *objp = from_array_type(arg);
+        break;
+
+    case QDBusArgument::StructureType:
+        *objp = from_structure_type(arg);
+        break;
+
+    case QDBusArgument::MapType:
+        *objp = from_map_type(arg);
+        break;
+
+    default:
+        PyErr_Format(PyExc_TypeError, "unsupported DBus argument type %d",
+                (int)arg.currentType());
+        *objp = 0;
+    }
+
+    return true;
+}
+
+
+// Convert a QDBusArgument variant type to a Python object.
+static PyObject *from_variant_type(const QDBusArgument &arg)
+{
+    QDBusVariant dbv;
+
+    arg >> dbv;
+
+    return from_qvariant(dbv.variant());
+}
+
+
+// Convert a QDBusArgument array type to a Python object.
+static PyObject *from_array_type(const QDBusArgument &arg)
+{
+    QVariantList vl;
+
+    arg.beginArray();
+
+    while (!arg.atEnd())
+        vl.append(arg.asVariant());
+
+    arg.endArray();
+
+    PyObject *obj = PyList_New(vl.count());
+
+    if (!obj)
+        return 0;
+
+    for (int i = 0; i < vl.count(); ++i)
+    {
+        PyObject *itm = from_qvariant(vl.at(i));
+
+        if (!itm)
+        {
+            Py_DECREF(obj);
+            return 0;
+        }
+
+        PyList_SET_ITEM(obj, i, itm);
+    }
+
+    return obj;
+}
+
+
+// Convert a QDBusArgument structure type to a Python object.
+static PyObject *from_structure_type(const QDBusArgument &arg)
+{
+    QVariantList vl;
+
+    arg.beginStructure();
+
+    while (!arg.atEnd())
+        vl.append(arg.asVariant());
+
+    arg.endStructure();
+
+    PyObject *obj = PyTuple_New(vl.count());
+
+    if (!obj)
+        return 0;
+
+    for (int i = 0; i < vl.count(); ++i)
+    {
+        PyObject *itm = from_qvariant(vl.at(i));
+
+        if (!itm)
+        {
+            Py_DECREF(obj);
+            return 0;
+        }
+
+        PyTuple_SET_ITEM(obj, i, itm);
+    }
+
+    return obj;
+}
+
+
+// Convert a QDBusArgument map type to a Python object.
+static PyObject *from_map_type(const QDBusArgument &arg)
+{
+    PyObject *obj = PyDict_New();
+
+    if (!obj)
+        return 0;
+
+    arg.beginMap();
+
+    while (!arg.atEnd())
+    {
+        arg.beginMapEntry();
+
+        PyObject *key = from_qvariant(arg.asVariant());
+        PyObject *value = from_qvariant(arg.asVariant());
+
+        arg.endMapEntry();
+
+        if (!key || !value)
+        {
+            Py_XDECREF(key);
+            Py_XDECREF(value);
+            Py_DECREF(obj);
+
+            return 0;
+        }
+
+        int rc = PyDict_SetItem(obj, key, value);
+
+        Py_DECREF(key);
+        Py_DECREF(value);
+
+        if (rc < 0)
+        {
+            Py_DECREF(obj);
+
+            return 0;
+        }
+    }
+
+    arg.endMap();
+
+    return obj;
+}
+
+
+// Convert a QString to a Python object.
+static PyObject *from_qstring(const QString &arg)
+{
+    QString *heap = new QString(arg);
+    PyObject *obj = sipConvertFromNewType(heap, sipType_QString, 0);
+
+    if (!obj)
+        delete heap;
+
+    return obj;
+}
+
+
+// Convert a QVariant to a Python object.
+static PyObject *from_qvariant(const QVariant &arg)
+{
+    QVariant *heap = new QVariant(arg);
+    PyObject *obj = sipConvertFromNewType(heap, sipType_QVariant, 0);
+
+    if (!obj)
+        delete heap;
+
+    return obj;
+}
diff --git a/qpy/QtDBus/qpydbus_chimera_helpers.h b/qpy/QtDBus/qpydbus_chimera_helpers.h
new file mode 100644
index 0000000..394aa12
--- /dev/null
+++ b/qpy/QtDBus/qpydbus_chimera_helpers.h
@@ -0,0 +1,37 @@
+// This is the definition of the various Chimera helpers.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYDBUS_CHIMERAHELPERS_H
+#define _QPYDBUS_CHIMERAHELPERS_H
+
+
+#include <Python.h>
+
+#include <QVariant>
+
+
+// Keep this in sync. with that defined in the public API.
+typedef bool (*FromQVariantConvertorFn)(const QVariant &, PyObject **);
+
+
+bool qpydbus_from_qvariant_convertor(const QVariant &var, PyObject **objp);
+
+
+#endif
diff --git a/qpy/QtDBus/qpydbus_post_init.cpp b/qpy/QtDBus/qpydbus_post_init.cpp
new file mode 100644
index 0000000..7b06e91
--- /dev/null
+++ b/qpy/QtDBus/qpydbus_post_init.cpp
@@ -0,0 +1,37 @@
+// This is the initialisation support code for the QtDBus module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpydbus_api.h"
+#include "qpydbus_chimera_helpers.h"
+
+#include "sipAPIQtDBus.h"
+
+
+// Perform any required initialisation.
+void qpydbus_post_init()
+{
+    // Get the Chimera helper registration function.
+    void (*register_from_qvariant_convertor)(FromQVariantConvertorFn);
+
+    register_from_qvariant_convertor = (void (*)(FromQVariantConvertorFn))sipImportSymbol("pyqt5_register_from_qvariant_convertor");
+    register_from_qvariant_convertor(qpydbus_from_qvariant_convertor);
+}
diff --git a/qpy/QtDBus/qpydbuspendingreply.cpp b/qpy/QtDBus/qpydbuspendingreply.cpp
new file mode 100644
index 0000000..909bdfe
--- /dev/null
+++ b/qpy/QtDBus/qpydbuspendingreply.cpp
@@ -0,0 +1,66 @@
+// This is the implementation of the QPyDBusPendingReply class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpydbuspendingreply.h"
+
+#include "sipAPIQtDBus.h"
+
+
+// Default ctor.
+QPyDBusPendingReply::QPyDBusPendingReply() : QDBusPendingReply<void>()
+{
+}
+
+
+// Copy a reply.
+QPyDBusPendingReply::QPyDBusPendingReply(const QPyDBusPendingReply &other)
+        : QDBusPendingReply<void>(other)
+{
+}
+
+
+// Extract a reply from another pending call.
+QPyDBusPendingReply::QPyDBusPendingReply(const QDBusPendingCall &call)
+        : QDBusPendingReply<void>(call)
+{
+}
+
+
+// Extract a reply from a message.
+QPyDBusPendingReply::QPyDBusPendingReply(const QDBusMessage &reply)
+        : QDBusPendingReply<void>(reply)
+{
+}
+
+
+// Return the value of the reply.  The GIL should be held.
+PyObject *QPyDBusPendingReply::value(PyObject *type) const
+{
+    QVariant val;
+
+    // This will wait for the call to complete.
+    Py_BEGIN_ALLOW_THREADS
+    val = argumentAt(0);
+    Py_END_ALLOW_THREADS
+
+    return pyqt5_qtdbus_from_qvariant_by_type(val, type);
+}
diff --git a/qpy/QtDBus/qpydbuspendingreply.h b/qpy/QtDBus/qpydbuspendingreply.h
new file mode 100644
index 0000000..6bd5d7e
--- /dev/null
+++ b/qpy/QtDBus/qpydbuspendingreply.h
@@ -0,0 +1,41 @@
+// This is the definition of the QPyDBusPendingReply class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYDBUSPENDINGREPLY_H
+#define _QPYDBUSPENDINGREPLY_H
+
+
+#include <Python.h>
+
+#include <QDBusPendingReply>
+
+
+class QPyDBusPendingReply : public QDBusPendingReply<void>
+{
+public:
+    QPyDBusPendingReply();
+    QPyDBusPendingReply(const QPyDBusPendingReply &other);
+    QPyDBusPendingReply(const QDBusPendingCall &call);
+    QPyDBusPendingReply(const QDBusMessage &reply);
+
+    PyObject *value(PyObject *type) const;
+};
+
+#endif
diff --git a/qpy/QtDBus/qpydbusreply.cpp b/qpy/QtDBus/qpydbusreply.cpp
new file mode 100644
index 0000000..d9b232c
--- /dev/null
+++ b/qpy/QtDBus/qpydbusreply.cpp
@@ -0,0 +1,145 @@
+// This is the implementation of the QPyDBusReply class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QDBusMessage>
+#include <QDBusPendingCall>
+
+#include "qpydbusreply.h"
+
+#include "sipAPIQtDBus.h"
+
+
+// Extract a reply from a message.  The GIL should be held.
+QPyDBusReply::QPyDBusReply(const QDBusMessage &reply)
+{
+    *this = reply;
+}
+
+
+// Extract a reply from a pending call.  The GIL should be held.
+QPyDBusReply::QPyDBusReply(const QDBusPendingCall &call)
+{
+    *this = call;
+}
+
+
+// Extract a reply from an error.
+QPyDBusReply::QPyDBusReply(const QDBusError &error)
+{
+    _q_value = 0;
+    _q_is_valid = !error.isValid();
+    _q_error = error;
+}
+
+
+// Copy a reply.  The GIL should be held.
+QPyDBusReply::QPyDBusReply(const QPyDBusReply &other)
+{
+    _q_value = other._q_value;
+    Py_XINCREF(_q_value);
+
+    _q_value_variant = other._q_value_variant;
+    _q_is_valid = other._q_is_valid;
+    _q_error = other._q_error;
+}
+
+
+// A reply created from a QDBusReply<> mapped type convertor.
+QPyDBusReply::QPyDBusReply(PyObject *q_value, bool q_is_valid, const QDBusError &q_error) : _q_value(q_value), _q_is_valid(q_is_valid), _q_error(q_error)
+{
+}
+
+
+// The dtor.  The GIL should be held.
+QPyDBusReply::~QPyDBusReply()
+{
+    Py_XDECREF(_q_value);
+}
+
+
+// Return the value of the reply.  The GIL should be held.
+PyObject *QPyDBusReply::value(PyObject *type) const
+{
+    if (!_q_is_valid)
+    {
+        PyErr_SetString(PyExc_ValueError, "QDBusReply value is invalid");
+        return 0;
+    }
+
+    // Return any explicit value.
+    if (_q_value)
+    {
+        if (type)
+        {
+            PyErr_SetString(PyExc_ValueError,
+                    "'type' argument cannot be used with an explcitly typed reply");
+            return 0;
+        }
+
+        Py_INCREF(_q_value);
+        return _q_value;
+    }
+
+    QVariant val(_q_value_variant);
+
+    return pyqt5_qtdbus_from_qvariant_by_type(val, type);
+}
+
+
+// Extract a reply from a message.  The GIL should be held.
+QPyDBusReply &QPyDBusReply::operator=(const QDBusMessage &reply)
+{
+    _q_value = 0;
+    _q_error = reply;
+    _q_is_valid = !_q_error.isValid();
+
+    if (_q_is_valid)
+    {
+        QList<QVariant> results = reply.arguments();
+
+        if (results.count() == 0)
+        {
+            Py_INCREF(Py_None);
+            _q_value = Py_None;
+        }
+        else
+        {
+            // Convert this later if requested.
+            _q_value_variant = results.at(0);
+        }
+    }
+
+    return *this;
+}
+
+
+// Extract a reply from a pending call.  The GIL should be held.
+QPyDBusReply &QPyDBusReply::operator=(const QDBusPendingCall &call)
+{
+    QDBusPendingCall other(call);
+
+    Py_BEGIN_ALLOW_THREADS
+    other.waitForFinished();
+    Py_END_ALLOW_THREADS
+
+    return *this = other.reply();
+}
diff --git a/qpy/QtDBus/qpydbusreply.h b/qpy/QtDBus/qpydbusreply.h
new file mode 100644
index 0000000..6e19136
--- /dev/null
+++ b/qpy/QtDBus/qpydbusreply.h
@@ -0,0 +1,60 @@
+// This is the definition of the QPyDBusReply class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYDBUSREPLY_H
+#define _QPYDBUSREPLY_H
+
+
+#include <Python.h>
+
+#include <QDBusError>
+#include <QVariant>
+
+
+class QDBusMessage;
+class QDBusPendingCall;
+
+
+class QPyDBusReply
+{
+public:
+    QPyDBusReply(const QDBusMessage &reply);
+    QPyDBusReply(const QDBusPendingCall &call);
+    QPyDBusReply(const QDBusError &error = QDBusError());
+    QPyDBusReply(const QPyDBusReply &other);
+    QPyDBusReply(PyObject *q_value, bool q_is_valid, const QDBusError &q_error);
+    ~QPyDBusReply();
+
+    inline const QDBusError &error() const {return _q_error;}
+    inline bool isValid() const {return _q_is_valid;}
+
+    PyObject *value(PyObject *type) const;
+
+    QPyDBusReply &operator=(const QDBusMessage &reply);
+    QPyDBusReply &operator=(const QDBusPendingCall &call);
+
+private:
+    PyObject *_q_value;
+    QVariant _q_value_variant;
+    bool _q_is_valid;
+    QDBusError _q_error;
+};
+
+#endif
diff --git a/qpy/QtDesigner/qpydesignercontainerextension.h b/qpy/QtDesigner/qpydesignercontainerextension.h
new file mode 100644
index 0000000..759be2c
--- /dev/null
+++ b/qpy/QtDesigner/qpydesignercontainerextension.h
@@ -0,0 +1,42 @@
+// This is the definition and implementation of the
+// QPyDesignerContainerExtension class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYDESIGNERCONTAINEREXTENSION_H
+#define _QPYDESIGNERCONTAINEREXTENSION_H
+
+
+#include <QObject>
+#include <QDesignerContainerExtension>
+
+
+class QPyDesignerContainerExtension : public QObject, public QDesignerContainerExtension
+{
+    Q_OBJECT
+    Q_INTERFACES(QDesignerContainerExtension)
+
+public:
+    QPyDesignerContainerExtension(QObject *parent) : QObject(parent) {};
+
+private:
+    QPyDesignerContainerExtension(const QPyDesignerContainerExtension &);
+};
+
+#endif
diff --git a/qpy/QtDesigner/qpydesignercustomwidgetcollectionplugin.h b/qpy/QtDesigner/qpydesignercustomwidgetcollectionplugin.h
new file mode 100644
index 0000000..b40b8f0
--- /dev/null
+++ b/qpy/QtDesigner/qpydesignercustomwidgetcollectionplugin.h
@@ -0,0 +1,42 @@
+// This is the definition and implementation of the
+// QPyDesignerCustomWidgetCollectionPlugin class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYDESIGNERCUSTOMWIDGETCOLLECTIONPLUGIN_H
+#define _QPYDESIGNERCUSTOMWIDGETCOLLECTIONPLUGIN_H
+
+
+#include <QObject>
+#include <QDesignerCustomWidgetCollectionInterface>
+
+
+class QPyDesignerCustomWidgetCollectionPlugin : public QObject, public QDesignerCustomWidgetCollectionInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(QDesignerCustomWidgetCollectionInterface)
+
+public:
+    QPyDesignerCustomWidgetCollectionPlugin(QObject *parent = 0) : QObject(parent) {}
+
+private:
+    QPyDesignerCustomWidgetCollectionPlugin(const QPyDesignerCustomWidgetCollectionPlugin &);
+};
+
+#endif
diff --git a/qpy/QtDesigner/qpydesignercustomwidgetplugin.h b/qpy/QtDesigner/qpydesignercustomwidgetplugin.h
new file mode 100644
index 0000000..e708ee2
--- /dev/null
+++ b/qpy/QtDesigner/qpydesignercustomwidgetplugin.h
@@ -0,0 +1,42 @@
+// This is the definition and implementation of the
+// QPyDesignerCustomWidgetPlugin class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYDESIGNERCUSTOMWIDGETPLUGIN_H
+#define _QPYDESIGNERCUSTOMWIDGETPLUGIN_H
+
+
+#include <QObject>
+#include <QDesignerCustomWidgetInterface>
+
+
+class QPyDesignerCustomWidgetPlugin : public QObject, public QDesignerCustomWidgetInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(QDesignerCustomWidgetInterface)
+
+public:
+    QPyDesignerCustomWidgetPlugin(QObject *parent = 0) : QObject(parent) {}
+
+private:
+    QPyDesignerCustomWidgetPlugin(const QPyDesignerCustomWidgetPlugin &);
+};
+
+#endif
diff --git a/qpy/QtDesigner/qpydesignermembersheetextension.h b/qpy/QtDesigner/qpydesignermembersheetextension.h
new file mode 100644
index 0000000..195454f
--- /dev/null
+++ b/qpy/QtDesigner/qpydesignermembersheetextension.h
@@ -0,0 +1,42 @@
+// This is the definition and implementation of the
+// QPyDesignerMemberSheetExtension class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYDESIGNERMEMBERSHEETEXTENSION_H
+#define _QPYDESIGNERMEMBERSHEETEXTENSION_H
+
+
+#include <QObject>
+#include <QDesignerMemberSheetExtension>
+
+
+class QPyDesignerMemberSheetExtension : public QObject, public QDesignerMemberSheetExtension
+{
+    Q_OBJECT
+    Q_INTERFACES(QDesignerMemberSheetExtension)
+
+public:
+    QPyDesignerMemberSheetExtension(QObject *parent) : QObject(parent) {};
+
+private:
+    QPyDesignerMemberSheetExtension(const QPyDesignerMemberSheetExtension &);
+};
+
+#endif
diff --git a/qpy/QtDesigner/qpydesignerpropertysheetextension.h b/qpy/QtDesigner/qpydesignerpropertysheetextension.h
new file mode 100644
index 0000000..702d57f
--- /dev/null
+++ b/qpy/QtDesigner/qpydesignerpropertysheetextension.h
@@ -0,0 +1,42 @@
+// This is the definition and implementation of the
+// QPyDesignerPropertySheetExtension class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYDESIGNERPROPERTYSHEETEXTENSION_H
+#define _QPYDESIGNERPROPERTYSHEETEXTENSION_H
+
+
+#include <QObject>
+#include <QDesignerPropertySheetExtension>
+
+
+class QPyDesignerPropertySheetExtension : public QObject, public QDesignerPropertySheetExtension
+{
+    Q_OBJECT
+    Q_INTERFACES(QDesignerPropertySheetExtension)
+
+public:
+    QPyDesignerPropertySheetExtension(QObject *parent) : QObject(parent) {};
+
+private:
+    QPyDesignerPropertySheetExtension(const QPyDesignerPropertySheetExtension &);
+};
+
+#endif
diff --git a/qpy/QtDesigner/qpydesignertaskmenuextension.h b/qpy/QtDesigner/qpydesignertaskmenuextension.h
new file mode 100644
index 0000000..871e435
--- /dev/null
+++ b/qpy/QtDesigner/qpydesignertaskmenuextension.h
@@ -0,0 +1,42 @@
+// This is the definition and implementation of the
+// QPyDesignerTaskMenuExtension class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYDESIGNERTASKMENUEXTENSION_H
+#define _QPYDESIGNERTASKMENUEXTENSION_H
+
+
+#include <QObject>
+#include <QDesignerTaskMenuExtension>
+
+
+class QPyDesignerTaskMenuExtension : public QObject, public QDesignerTaskMenuExtension
+{
+    Q_OBJECT
+    Q_INTERFACES(QDesignerTaskMenuExtension)
+
+public:
+    QPyDesignerTaskMenuExtension(QObject *parent) : QObject(parent) {};
+
+private:
+    QPyDesignerTaskMenuExtension(const QPyDesignerTaskMenuExtension &);
+};
+
+#endif
diff --git a/qpy/QtGui/qpyopengl_add_constants.cpp b/qpy/QtGui/qpyopengl_add_constants.cpp
new file mode 100644
index 0000000..1216e7b
--- /dev/null
+++ b/qpy/QtGui/qpyopengl_add_constants.cpp
@@ -0,0 +1,5132 @@
+/*
+ * This implements a function to populate a Python object with the OpenGL
+ * constants.  This file is automatically generated.
+ *
+ * Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+ * 
+ * This file is part of PyQt5.
+ * 
+ * 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 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.
+ * 
+ * If you do not wish to use this file under the terms of the GPL version 3.0
+ * then you may purchase a commercial license.  For more information contact
+ * info at riverbankcomputing.com.
+ * 
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+
+#include <Python.h>
+
+#include "sipAPIQtGui.h"
+
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+
+
+struct OpenGLEnum_i
+{
+    const char *name;
+    int value;
+};
+
+static OpenGLEnum_i openGLEnums_i[] = {
+    {"GL_CURRENT_BIT", 0x00000001},
+    {"GL_POINT_BIT", 0x00000002},
+    {"GL_LINE_BIT", 0x00000004},
+    {"GL_POLYGON_BIT", 0x00000008},
+    {"GL_POLYGON_STIPPLE_BIT", 0x00000010},
+    {"GL_PIXEL_MODE_BIT", 0x00000020},
+    {"GL_LIGHTING_BIT", 0x00000040},
+    {"GL_FOG_BIT", 0x00000080},
+    {"GL_DEPTH_BUFFER_BIT", 0x00000100},
+    {"GL_ACCUM_BUFFER_BIT", 0x00000200},
+    {"GL_STENCIL_BUFFER_BIT", 0x00000400},
+    {"GL_VIEWPORT_BIT", 0x00000800},
+    {"GL_TRANSFORM_BIT", 0x00001000},
+    {"GL_ENABLE_BIT", 0x00002000},
+    {"GL_COLOR_BUFFER_BIT", 0x00004000},
+    {"GL_HINT_BIT", 0x00008000},
+    {"GL_EVAL_BIT", 0x00010000},
+    {"GL_LIST_BIT", 0x00020000},
+    {"GL_TEXTURE_BIT", 0x00040000},
+    {"GL_SCISSOR_BIT", 0x00080000},
+    {"GL_MULTISAMPLE_BIT", 0x20000000},
+    {"GL_MULTISAMPLE_BIT_ARB", 0x20000000},
+    {"GL_MULTISAMPLE_BIT_EXT", 0x20000000},
+    {"GL_MULTISAMPLE_BIT_3DFX", 0x20000000},
+    {"GL_ALL_ATTRIB_BITS", static_cast<int>(0xFFFFFFFF)},
+    {"GL_COVERAGE_BUFFER_BIT_NV", 0x00008000},
+    {"GL_CLIENT_PIXEL_STORE_BIT", 0x00000001},
+    {"GL_CLIENT_VERTEX_ARRAY_BIT", 0x00000002},
+    {"GL_CLIENT_ALL_ATTRIB_BITS", static_cast<int>(0xFFFFFFFF)},
+    {"GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT", 0x00000001},
+    {"GL_CONTEXT_FLAG_DEBUG_BIT", 0x00000002},
+    {"GL_CONTEXT_FLAG_DEBUG_BIT_KHR", 0x00000002},
+    {"GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB", 0x00000004},
+    {"GL_CONTEXT_CORE_PROFILE_BIT", 0x00000001},
+    {"GL_CONTEXT_COMPATIBILITY_PROFILE_BIT", 0x00000002},
+    {"GL_MAP_READ_BIT", 0x0001},
+    {"GL_MAP_READ_BIT_EXT", 0x0001},
+    {"GL_MAP_WRITE_BIT", 0x0002},
+    {"GL_MAP_WRITE_BIT_EXT", 0x0002},
+    {"GL_MAP_INVALIDATE_RANGE_BIT", 0x0004},
+    {"GL_MAP_INVALIDATE_RANGE_BIT_EXT", 0x0004},
+    {"GL_MAP_INVALIDATE_BUFFER_BIT", 0x0008},
+    {"GL_MAP_INVALIDATE_BUFFER_BIT_EXT", 0x0008},
+    {"GL_MAP_FLUSH_EXPLICIT_BIT", 0x0010},
+    {"GL_MAP_FLUSH_EXPLICIT_BIT_EXT", 0x0010},
+    {"GL_MAP_UNSYNCHRONIZED_BIT", 0x0020},
+    {"GL_MAP_UNSYNCHRONIZED_BIT_EXT", 0x0020},
+    {"GL_MAP_PERSISTENT_BIT", 0x0040},
+    {"GL_MAP_COHERENT_BIT", 0x0080},
+    {"GL_DYNAMIC_STORAGE_BIT", 0x0100},
+    {"GL_CLIENT_STORAGE_BIT", 0x0200},
+    {"GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT", 0x00000001},
+    {"GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT", 0x00000001},
+    {"GL_ELEMENT_ARRAY_BARRIER_BIT", 0x00000002},
+    {"GL_ELEMENT_ARRAY_BARRIER_BIT_EXT", 0x00000002},
+    {"GL_UNIFORM_BARRIER_BIT", 0x00000004},
+    {"GL_UNIFORM_BARRIER_BIT_EXT", 0x00000004},
+    {"GL_TEXTURE_FETCH_BARRIER_BIT", 0x00000008},
+    {"GL_TEXTURE_FETCH_BARRIER_BIT_EXT", 0x00000008},
+    {"GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV", 0x00000010},
+    {"GL_SHADER_IMAGE_ACCESS_BARRIER_BIT", 0x00000020},
+    {"GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT", 0x00000020},
+    {"GL_COMMAND_BARRIER_BIT", 0x00000040},
+    {"GL_COMMAND_BARRIER_BIT_EXT", 0x00000040},
+    {"GL_PIXEL_BUFFER_BARRIER_BIT", 0x00000080},
+    {"GL_PIXEL_BUFFER_BARRIER_BIT_EXT", 0x00000080},
+    {"GL_TEXTURE_UPDATE_BARRIER_BIT", 0x00000100},
+    {"GL_TEXTURE_UPDATE_BARRIER_BIT_EXT", 0x00000100},
+    {"GL_BUFFER_UPDATE_BARRIER_BIT", 0x00000200},
+    {"GL_BUFFER_UPDATE_BARRIER_BIT_EXT", 0x00000200},
+    {"GL_FRAMEBUFFER_BARRIER_BIT", 0x00000400},
+    {"GL_FRAMEBUFFER_BARRIER_BIT_EXT", 0x00000400},
+    {"GL_TRANSFORM_FEEDBACK_BARRIER_BIT", 0x00000800},
+    {"GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT", 0x00000800},
+    {"GL_ATOMIC_COUNTER_BARRIER_BIT", 0x00001000},
+    {"GL_ATOMIC_COUNTER_BARRIER_BIT_EXT", 0x00001000},
+    {"GL_SHADER_STORAGE_BARRIER_BIT", 0x00002000},
+    {"GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT", 0x00004000},
+    {"GL_QUERY_BUFFER_BARRIER_BIT", 0x00008000},
+    {"GL_ALL_BARRIER_BITS", static_cast<int>(0xFFFFFFFF)},
+    {"GL_ALL_BARRIER_BITS_EXT", static_cast<int>(0xFFFFFFFF)},
+    {"GL_SYNC_FLUSH_COMMANDS_BIT", 0x00000001},
+    {"GL_SYNC_FLUSH_COMMANDS_BIT_APPLE", 0x00000001},
+    {"GL_VERTEX_SHADER_BIT", 0x00000001},
+    {"GL_VERTEX_SHADER_BIT_EXT", 0x00000001},
+    {"GL_FRAGMENT_SHADER_BIT", 0x00000002},
+    {"GL_FRAGMENT_SHADER_BIT_EXT", 0x00000002},
+    {"GL_GEOMETRY_SHADER_BIT", 0x00000004},
+    {"GL_TESS_CONTROL_SHADER_BIT", 0x00000008},
+    {"GL_TESS_EVALUATION_SHADER_BIT", 0x00000010},
+    {"GL_COMPUTE_SHADER_BIT", 0x00000020},
+    {"GL_ALL_SHADER_BITS", static_cast<int>(0xFFFFFFFF)},
+    {"GL_ALL_SHADER_BITS_EXT", static_cast<int>(0xFFFFFFFF)},
+    {"GL_TEXTURE_STORAGE_SPARSE_BIT_AMD", 0x00000001},
+    {"GL_RED_BIT_ATI", 0x00000001},
+    {"GL_GREEN_BIT_ATI", 0x00000002},
+    {"GL_BLUE_BIT_ATI", 0x00000004},
+    {"GL_2X_BIT_ATI", 0x00000001},
+    {"GL_4X_BIT_ATI", 0x00000002},
+    {"GL_8X_BIT_ATI", 0x00000004},
+    {"GL_HALF_BIT_ATI", 0x00000008},
+    {"GL_QUARTER_BIT_ATI", 0x00000010},
+    {"GL_EIGHTH_BIT_ATI", 0x00000020},
+    {"GL_SATURATE_BIT_ATI", 0x00000040},
+    {"GL_COMP_BIT_ATI", 0x00000002},
+    {"GL_NEGATE_BIT_ATI", 0x00000004},
+    {"GL_BIAS_BIT_ATI", 0x00000008},
+    {"GL_TRACE_OPERATIONS_BIT_MESA", 0x0001},
+    {"GL_TRACE_PRIMITIVES_BIT_MESA", 0x0002},
+    {"GL_TRACE_ARRAYS_BIT_MESA", 0x0004},
+    {"GL_TRACE_TEXTURES_BIT_MESA", 0x0008},
+    {"GL_TRACE_PIXELS_BIT_MESA", 0x0010},
+    {"GL_TRACE_ERRORS_BIT_MESA", 0x0020},
+    {"GL_TRACE_ALL_BITS_MESA", 0xFFFF},
+    {"GL_BOLD_BIT_NV", 0x01},
+    {"GL_ITALIC_BIT_NV", 0x02},
+    {"GL_GLYPH_WIDTH_BIT_NV", 0x01},
+    {"GL_GLYPH_HEIGHT_BIT_NV", 0x02},
+    {"GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV", 0x04},
+    {"GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV", 0x08},
+    {"GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV", 0x10},
+    {"GL_GLYPH_VERTICAL_BEARING_X_BIT_NV", 0x20},
+    {"GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV", 0x40},
+    {"GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV", 0x80},
+    {"GL_GLYPH_HAS_KERNING_BIT_NV", 0x100},
+    {"GL_FONT_X_MIN_BOUNDS_BIT_NV", 0x00010000},
+    {"GL_FONT_Y_MIN_BOUNDS_BIT_NV", 0x00020000},
+    {"GL_FONT_X_MAX_BOUNDS_BIT_NV", 0x00040000},
+    {"GL_FONT_Y_MAX_BOUNDS_BIT_NV", 0x00080000},
+    {"GL_FONT_UNITS_PER_EM_BIT_NV", 0x00100000},
+    {"GL_FONT_ASCENDER_BIT_NV", 0x00200000},
+    {"GL_FONT_DESCENDER_BIT_NV", 0x00400000},
+    {"GL_FONT_HEIGHT_BIT_NV", 0x00800000},
+    {"GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV", 0x01000000},
+    {"GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV", 0x02000000},
+    {"GL_FONT_UNDERLINE_POSITION_BIT_NV", 0x04000000},
+    {"GL_FONT_UNDERLINE_THICKNESS_BIT_NV", 0x08000000},
+    {"GL_FONT_HAS_KERNING_BIT_NV", 0x10000000},
+    {"GL_VERTEX23_BIT_PGI", 0x00000004},
+    {"GL_VERTEX4_BIT_PGI", 0x00000008},
+    {"GL_COLOR3_BIT_PGI", 0x00010000},
+    {"GL_COLOR4_BIT_PGI", 0x00020000},
+    {"GL_EDGEFLAG_BIT_PGI", 0x00040000},
+    {"GL_INDEX_BIT_PGI", 0x00080000},
+    {"GL_MAT_AMBIENT_BIT_PGI", 0x00100000},
+    {"GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI", 0x00200000},
+    {"GL_MAT_DIFFUSE_BIT_PGI", 0x00400000},
+    {"GL_MAT_EMISSION_BIT_PGI", 0x00800000},
+    {"GL_MAT_COLOR_INDEXES_BIT_PGI", 0x01000000},
+    {"GL_MAT_SHININESS_BIT_PGI", 0x02000000},
+    {"GL_MAT_SPECULAR_BIT_PGI", 0x04000000},
+    {"GL_NORMAL_BIT_PGI", 0x08000000},
+    {"GL_TEXCOORD1_BIT_PGI", 0x10000000},
+    {"GL_TEXCOORD2_BIT_PGI", 0x20000000},
+    {"GL_TEXCOORD3_BIT_PGI", 0x40000000},
+    {"GL_TEXCOORD4_BIT_PGI", static_cast<int>(0x80000000)},
+    {"GL_COLOR_BUFFER_BIT0_QCOM", 0x00000001},
+    {"GL_COLOR_BUFFER_BIT1_QCOM", 0x00000002},
+    {"GL_COLOR_BUFFER_BIT2_QCOM", 0x00000004},
+    {"GL_COLOR_BUFFER_BIT3_QCOM", 0x00000008},
+    {"GL_COLOR_BUFFER_BIT4_QCOM", 0x00000010},
+    {"GL_COLOR_BUFFER_BIT5_QCOM", 0x00000020},
+    {"GL_COLOR_BUFFER_BIT6_QCOM", 0x00000040},
+    {"GL_COLOR_BUFFER_BIT7_QCOM", 0x00000080},
+    {"GL_DEPTH_BUFFER_BIT0_QCOM", 0x00000100},
+    {"GL_DEPTH_BUFFER_BIT1_QCOM", 0x00000200},
+    {"GL_DEPTH_BUFFER_BIT2_QCOM", 0x00000400},
+    {"GL_DEPTH_BUFFER_BIT3_QCOM", 0x00000800},
+    {"GL_DEPTH_BUFFER_BIT4_QCOM", 0x00001000},
+    {"GL_DEPTH_BUFFER_BIT5_QCOM", 0x00002000},
+    {"GL_DEPTH_BUFFER_BIT6_QCOM", 0x00004000},
+    {"GL_DEPTH_BUFFER_BIT7_QCOM", 0x00008000},
+    {"GL_STENCIL_BUFFER_BIT0_QCOM", 0x00010000},
+    {"GL_STENCIL_BUFFER_BIT1_QCOM", 0x00020000},
+    {"GL_STENCIL_BUFFER_BIT2_QCOM", 0x00040000},
+    {"GL_STENCIL_BUFFER_BIT3_QCOM", 0x00080000},
+    {"GL_STENCIL_BUFFER_BIT4_QCOM", 0x00100000},
+    {"GL_STENCIL_BUFFER_BIT5_QCOM", 0x00200000},
+    {"GL_STENCIL_BUFFER_BIT6_QCOM", 0x00400000},
+    {"GL_STENCIL_BUFFER_BIT7_QCOM", 0x00800000},
+    {"GL_MULTISAMPLE_BUFFER_BIT0_QCOM", 0x01000000},
+    {"GL_MULTISAMPLE_BUFFER_BIT1_QCOM", 0x02000000},
+    {"GL_MULTISAMPLE_BUFFER_BIT2_QCOM", 0x04000000},
+    {"GL_MULTISAMPLE_BUFFER_BIT3_QCOM", 0x08000000},
+    {"GL_MULTISAMPLE_BUFFER_BIT4_QCOM", 0x10000000},
+    {"GL_MULTISAMPLE_BUFFER_BIT5_QCOM", 0x20000000},
+    {"GL_MULTISAMPLE_BUFFER_BIT6_QCOM", 0x40000000},
+    {"GL_MULTISAMPLE_BUFFER_BIT7_QCOM", static_cast<int>(0x80000000)},
+    {"GL_TEXTURE_DEFORMATION_BIT_SGIX", 0x00000001},
+    {"GL_GEOMETRY_DEFORMATION_BIT_SGIX", 0x00000002},
+    {"GL_RESTART_SUN", 0x0001},
+    {"GL_REPLACE_MIDDLE_SUN", 0x0002},
+    {"GL_REPLACE_OLDEST_SUN", 0x0003},
+    {"GL_LAYOUT_DEFAULT_INTEL", 0},
+    {"GL_LAYOUT_LINEAR_INTEL", 1},
+    {"GL_LAYOUT_LINEAR_CPU_CACHED_INTEL", 2},
+    {"GL_NEXT_BUFFER_NV", -2},
+    {"GL_SKIP_COMPONENTS4_NV", -3},
+    {"GL_SKIP_COMPONENTS3_NV", -4},
+    {"GL_SKIP_COMPONENTS2_NV", -5},
+    {"GL_SKIP_COMPONENTS1_NV", -6},
+    {"GL_CLOSE_PATH_NV", 0x00},
+    {"GL_MOVE_TO_NV", 0x02},
+    {"GL_RELATIVE_MOVE_TO_NV", 0x03},
+    {"GL_LINE_TO_NV", 0x04},
+    {"GL_RELATIVE_LINE_TO_NV", 0x05},
+    {"GL_HORIZONTAL_LINE_TO_NV", 0x06},
+    {"GL_RELATIVE_HORIZONTAL_LINE_TO_NV", 0x07},
+    {"GL_VERTICAL_LINE_TO_NV", 0x08},
+    {"GL_RELATIVE_VERTICAL_LINE_TO_NV", 0x09},
+    {"GL_QUADRATIC_CURVE_TO_NV", 0x0A},
+    {"GL_RELATIVE_QUADRATIC_CURVE_TO_NV", 0x0B},
+    {"GL_CUBIC_CURVE_TO_NV", 0x0C},
+    {"GL_RELATIVE_CUBIC_CURVE_TO_NV", 0x0D},
+    {"GL_SMOOTH_QUADRATIC_CURVE_TO_NV", 0x0E},
+    {"GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV", 0x0F},
+    {"GL_SMOOTH_CUBIC_CURVE_TO_NV", 0x10},
+    {"GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV", 0x11},
+    {"GL_SMALL_CCW_ARC_TO_NV", 0x12},
+    {"GL_RELATIVE_SMALL_CCW_ARC_TO_NV", 0x13},
+    {"GL_SMALL_CW_ARC_TO_NV", 0x14},
+    {"GL_RELATIVE_SMALL_CW_ARC_TO_NV", 0x15},
+    {"GL_LARGE_CCW_ARC_TO_NV", 0x16},
+    {"GL_RELATIVE_LARGE_CCW_ARC_TO_NV", 0x17},
+    {"GL_LARGE_CW_ARC_TO_NV", 0x18},
+    {"GL_RELATIVE_LARGE_CW_ARC_TO_NV", 0x19},
+    {"GL_RESTART_PATH_NV", 0xF0},
+    {"GL_DUP_FIRST_CUBIC_CURVE_TO_NV", 0xF2},
+    {"GL_DUP_LAST_CUBIC_CURVE_TO_NV", 0xF4},
+    {"GL_RECT_NV", 0xF6},
+    {"GL_CIRCULAR_CCW_ARC_TO_NV", 0xF8},
+    {"GL_CIRCULAR_CW_ARC_TO_NV", 0xFA},
+    {"GL_CIRCULAR_TANGENT_ARC_TO_NV", 0xFC},
+    {"GL_ARC_TO_NV", 0xFE},
+    {"GL_RELATIVE_ARC_TO_NV", 0xFF},
+    {"GL_FALSE", 0},
+    {"GL_NO_ERROR", 0},
+    {"GL_ZERO", 0},
+    {"GL_NONE", 0},
+    {"GL_NONE_OES", 0},
+    {"GL_TRUE", 1},
+    {"GL_ONE", 1},
+    {"GL_VERSION_ES_CL_1_0", 1},
+    {"GL_VERSION_ES_CM_1_1", 1},
+    {"GL_VERSION_ES_CL_1_1", 1},
+    {"GL_POINTS", 0x0000},
+    {"GL_LINES", 0x0001},
+    {"GL_LINE_LOOP", 0x0002},
+    {"GL_LINE_STRIP", 0x0003},
+    {"GL_TRIANGLES", 0x0004},
+    {"GL_TRIANGLE_STRIP", 0x0005},
+    {"GL_TRIANGLE_FAN", 0x0006},
+    {"GL_QUADS", 0x0007},
+    {"GL_QUAD_STRIP", 0x0008},
+    {"GL_POLYGON", 0x0009},
+    {"GL_LINES_ADJACENCY", 0x000A},
+    {"GL_LINES_ADJACENCY_ARB", 0x000A},
+    {"GL_LINES_ADJACENCY_EXT", 0x000A},
+    {"GL_LINE_STRIP_ADJACENCY", 0x000B},
+    {"GL_LINE_STRIP_ADJACENCY_ARB", 0x000B},
+    {"GL_LINE_STRIP_ADJACENCY_EXT", 0x000B},
+    {"GL_TRIANGLES_ADJACENCY", 0x000C},
+    {"GL_TRIANGLES_ADJACENCY_ARB", 0x000C},
+    {"GL_TRIANGLES_ADJACENCY_EXT", 0x000C},
+    {"GL_TRIANGLE_STRIP_ADJACENCY", 0x000D},
+    {"GL_TRIANGLE_STRIP_ADJACENCY_ARB", 0x000D},
+    {"GL_TRIANGLE_STRIP_ADJACENCY_EXT", 0x000D},
+    {"GL_PATCHES", 0x000E},
+    {"GL_ACCUM", 0x0100},
+    {"GL_LOAD", 0x0101},
+    {"GL_RETURN", 0x0102},
+    {"GL_MULT", 0x0103},
+    {"GL_ADD", 0x0104},
+    {"GL_NEVER", 0x0200},
+    {"GL_LESS", 0x0201},
+    {"GL_EQUAL", 0x0202},
+    {"GL_LEQUAL", 0x0203},
+    {"GL_GREATER", 0x0204},
+    {"GL_NOTEQUAL", 0x0205},
+    {"GL_GEQUAL", 0x0206},
+    {"GL_ALWAYS", 0x0207},
+    {"GL_SRC_COLOR", 0x0300},
+    {"GL_ONE_MINUS_SRC_COLOR", 0x0301},
+    {"GL_SRC_ALPHA", 0x0302},
+    {"GL_ONE_MINUS_SRC_ALPHA", 0x0303},
+    {"GL_DST_ALPHA", 0x0304},
+    {"GL_ONE_MINUS_DST_ALPHA", 0x0305},
+    {"GL_DST_COLOR", 0x0306},
+    {"GL_ONE_MINUS_DST_COLOR", 0x0307},
+    {"GL_SRC_ALPHA_SATURATE", 0x0308},
+    {"GL_FRONT_LEFT", 0x0400},
+    {"GL_FRONT_RIGHT", 0x0401},
+    {"GL_BACK_LEFT", 0x0402},
+    {"GL_BACK_RIGHT", 0x0403},
+    {"GL_FRONT", 0x0404},
+    {"GL_BACK", 0x0405},
+    {"GL_LEFT", 0x0406},
+    {"GL_RIGHT", 0x0407},
+    {"GL_FRONT_AND_BACK", 0x0408},
+    {"GL_AUX0", 0x0409},
+    {"GL_AUX1", 0x040A},
+    {"GL_AUX2", 0x040B},
+    {"GL_AUX3", 0x040C},
+    {"GL_INVALID_ENUM", 0x0500},
+    {"GL_INVALID_VALUE", 0x0501},
+    {"GL_INVALID_OPERATION", 0x0502},
+    {"GL_STACK_OVERFLOW", 0x0503},
+    {"GL_STACK_OVERFLOW_KHR", 0x0503},
+    {"GL_STACK_UNDERFLOW", 0x0504},
+    {"GL_STACK_UNDERFLOW_KHR", 0x0504},
+    {"GL_OUT_OF_MEMORY", 0x0505},
+    {"GL_INVALID_FRAMEBUFFER_OPERATION", 0x0506},
+    {"GL_INVALID_FRAMEBUFFER_OPERATION_EXT", 0x0506},
+    {"GL_INVALID_FRAMEBUFFER_OPERATION_OES", 0x0506},
+    {"GL_2D", 0x0600},
+    {"GL_3D", 0x0601},
+    {"GL_3D_COLOR", 0x0602},
+    {"GL_3D_COLOR_TEXTURE", 0x0603},
+    {"GL_4D_COLOR_TEXTURE", 0x0604},
+    {"GL_PASS_THROUGH_TOKEN", 0x0700},
+    {"GL_POINT_TOKEN", 0x0701},
+    {"GL_LINE_TOKEN", 0x0702},
+    {"GL_POLYGON_TOKEN", 0x0703},
+    {"GL_BITMAP_TOKEN", 0x0704},
+    {"GL_DRAW_PIXEL_TOKEN", 0x0705},
+    {"GL_COPY_PIXEL_TOKEN", 0x0706},
+    {"GL_LINE_RESET_TOKEN", 0x0707},
+    {"GL_EXP", 0x0800},
+    {"GL_EXP2", 0x0801},
+    {"GL_CW", 0x0900},
+    {"GL_CCW", 0x0901},
+    {"GL_COEFF", 0x0A00},
+    {"GL_ORDER", 0x0A01},
+    {"GL_DOMAIN", 0x0A02},
+    {"GL_CURRENT_COLOR", 0x0B00},
+    {"GL_CURRENT_INDEX", 0x0B01},
+    {"GL_CURRENT_NORMAL", 0x0B02},
+    {"GL_CURRENT_TEXTURE_COORDS", 0x0B03},
+    {"GL_CURRENT_RASTER_COLOR", 0x0B04},
+    {"GL_CURRENT_RASTER_INDEX", 0x0B05},
+    {"GL_CURRENT_RASTER_TEXTURE_COORDS", 0x0B06},
+    {"GL_CURRENT_RASTER_POSITION", 0x0B07},
+    {"GL_CURRENT_RASTER_POSITION_VALID", 0x0B08},
+    {"GL_CURRENT_RASTER_DISTANCE", 0x0B09},
+    {"GL_POINT_SMOOTH", 0x0B10},
+    {"GL_POINT_SIZE", 0x0B11},
+    {"GL_POINT_SIZE_RANGE", 0x0B12},
+    {"GL_SMOOTH_POINT_SIZE_RANGE", 0x0B12},
+    {"GL_POINT_SIZE_GRANULARITY", 0x0B13},
+    {"GL_SMOOTH_POINT_SIZE_GRANULARITY", 0x0B13},
+    {"GL_LINE_SMOOTH", 0x0B20},
+    {"GL_LINE_WIDTH", 0x0B21},
+    {"GL_LINE_WIDTH_RANGE", 0x0B22},
+    {"GL_SMOOTH_LINE_WIDTH_RANGE", 0x0B22},
+    {"GL_LINE_WIDTH_GRANULARITY", 0x0B23},
+    {"GL_SMOOTH_LINE_WIDTH_GRANULARITY", 0x0B23},
+    {"GL_LINE_STIPPLE", 0x0B24},
+    {"GL_LINE_STIPPLE_PATTERN", 0x0B25},
+    {"GL_LINE_STIPPLE_REPEAT", 0x0B26},
+    {"GL_LIST_MODE", 0x0B30},
+    {"GL_MAX_LIST_NESTING", 0x0B31},
+    {"GL_LIST_BASE", 0x0B32},
+    {"GL_LIST_INDEX", 0x0B33},
+    {"GL_POLYGON_MODE", 0x0B40},
+    {"GL_POLYGON_SMOOTH", 0x0B41},
+    {"GL_POLYGON_STIPPLE", 0x0B42},
+    {"GL_EDGE_FLAG", 0x0B43},
+    {"GL_CULL_FACE", 0x0B44},
+    {"GL_CULL_FACE_MODE", 0x0B45},
+    {"GL_FRONT_FACE", 0x0B46},
+    {"GL_LIGHTING", 0x0B50},
+    {"GL_LIGHT_MODEL_LOCAL_VIEWER", 0x0B51},
+    {"GL_LIGHT_MODEL_TWO_SIDE", 0x0B52},
+    {"GL_LIGHT_MODEL_AMBIENT", 0x0B53},
+    {"GL_SHADE_MODEL", 0x0B54},
+    {"GL_COLOR_MATERIAL_FACE", 0x0B55},
+    {"GL_COLOR_MATERIAL_PARAMETER", 0x0B56},
+    {"GL_COLOR_MATERIAL", 0x0B57},
+    {"GL_FOG", 0x0B60},
+    {"GL_FOG_INDEX", 0x0B61},
+    {"GL_FOG_DENSITY", 0x0B62},
+    {"GL_FOG_START", 0x0B63},
+    {"GL_FOG_END", 0x0B64},
+    {"GL_FOG_MODE", 0x0B65},
+    {"GL_FOG_COLOR", 0x0B66},
+    {"GL_DEPTH_RANGE", 0x0B70},
+    {"GL_DEPTH_TEST", 0x0B71},
+    {"GL_DEPTH_WRITEMASK", 0x0B72},
+    {"GL_DEPTH_CLEAR_VALUE", 0x0B73},
+    {"GL_DEPTH_FUNC", 0x0B74},
+    {"GL_ACCUM_CLEAR_VALUE", 0x0B80},
+    {"GL_STENCIL_TEST", 0x0B90},
+    {"GL_STENCIL_CLEAR_VALUE", 0x0B91},
+    {"GL_STENCIL_FUNC", 0x0B92},
+    {"GL_STENCIL_VALUE_MASK", 0x0B93},
+    {"GL_STENCIL_FAIL", 0x0B94},
+    {"GL_STENCIL_PASS_DEPTH_FAIL", 0x0B95},
+    {"GL_STENCIL_PASS_DEPTH_PASS", 0x0B96},
+    {"GL_STENCIL_REF", 0x0B97},
+    {"GL_STENCIL_WRITEMASK", 0x0B98},
+    {"GL_MATRIX_MODE", 0x0BA0},
+    {"GL_NORMALIZE", 0x0BA1},
+    {"GL_VIEWPORT", 0x0BA2},
+    {"GL_MODELVIEW_STACK_DEPTH", 0x0BA3},
+    {"GL_MODELVIEW0_STACK_DEPTH_EXT", 0x0BA3},
+    {"GL_PROJECTION_STACK_DEPTH", 0x0BA4},
+    {"GL_TEXTURE_STACK_DEPTH", 0x0BA5},
+    {"GL_MODELVIEW_MATRIX", 0x0BA6},
+    {"GL_MODELVIEW0_MATRIX_EXT", 0x0BA6},
+    {"GL_PROJECTION_MATRIX", 0x0BA7},
+    {"GL_TEXTURE_MATRIX", 0x0BA8},
+    {"GL_ATTRIB_STACK_DEPTH", 0x0BB0},
+    {"GL_CLIENT_ATTRIB_STACK_DEPTH", 0x0BB1},
+    {"GL_ALPHA_TEST", 0x0BC0},
+    {"GL_ALPHA_TEST_QCOM", 0x0BC0},
+    {"GL_ALPHA_TEST_FUNC", 0x0BC1},
+    {"GL_ALPHA_TEST_FUNC_QCOM", 0x0BC1},
+    {"GL_ALPHA_TEST_REF", 0x0BC2},
+    {"GL_ALPHA_TEST_REF_QCOM", 0x0BC2},
+    {"GL_DITHER", 0x0BD0},
+    {"GL_BLEND_DST", 0x0BE0},
+    {"GL_BLEND_SRC", 0x0BE1},
+    {"GL_BLEND", 0x0BE2},
+    {"GL_LOGIC_OP_MODE", 0x0BF0},
+    {"GL_INDEX_LOGIC_OP", 0x0BF1},
+    {"GL_LOGIC_OP", 0x0BF1},
+    {"GL_COLOR_LOGIC_OP", 0x0BF2},
+    {"GL_AUX_BUFFERS", 0x0C00},
+    {"GL_DRAW_BUFFER", 0x0C01},
+    {"GL_DRAW_BUFFER_EXT", 0x0C01},
+    {"GL_READ_BUFFER", 0x0C02},
+    {"GL_READ_BUFFER_EXT", 0x0C02},
+    {"GL_READ_BUFFER_NV", 0x0C02},
+    {"GL_SCISSOR_BOX", 0x0C10},
+    {"GL_SCISSOR_TEST", 0x0C11},
+    {"GL_INDEX_CLEAR_VALUE", 0x0C20},
+    {"GL_INDEX_WRITEMASK", 0x0C21},
+    {"GL_COLOR_CLEAR_VALUE", 0x0C22},
+    {"GL_COLOR_WRITEMASK", 0x0C23},
+    {"GL_INDEX_MODE", 0x0C30},
+    {"GL_RGBA_MODE", 0x0C31},
+    {"GL_DOUBLEBUFFER", 0x0C32},
+    {"GL_STEREO", 0x0C33},
+    {"GL_RENDER_MODE", 0x0C40},
+    {"GL_PERSPECTIVE_CORRECTION_HINT", 0x0C50},
+    {"GL_POINT_SMOOTH_HINT", 0x0C51},
+    {"GL_LINE_SMOOTH_HINT", 0x0C52},
+    {"GL_POLYGON_SMOOTH_HINT", 0x0C53},
+    {"GL_FOG_HINT", 0x0C54},
+    {"GL_TEXTURE_GEN_S", 0x0C60},
+    {"GL_TEXTURE_GEN_T", 0x0C61},
+    {"GL_TEXTURE_GEN_R", 0x0C62},
+    {"GL_TEXTURE_GEN_Q", 0x0C63},
+    {"GL_PIXEL_MAP_I_TO_I", 0x0C70},
+    {"GL_PIXEL_MAP_S_TO_S", 0x0C71},
+    {"GL_PIXEL_MAP_I_TO_R", 0x0C72},
+    {"GL_PIXEL_MAP_I_TO_G", 0x0C73},
+    {"GL_PIXEL_MAP_I_TO_B", 0x0C74},
+    {"GL_PIXEL_MAP_I_TO_A", 0x0C75},
+    {"GL_PIXEL_MAP_R_TO_R", 0x0C76},
+    {"GL_PIXEL_MAP_G_TO_G", 0x0C77},
+    {"GL_PIXEL_MAP_B_TO_B", 0x0C78},
+    {"GL_PIXEL_MAP_A_TO_A", 0x0C79},
+    {"GL_PIXEL_MAP_I_TO_I_SIZE", 0x0CB0},
+    {"GL_PIXEL_MAP_S_TO_S_SIZE", 0x0CB1},
+    {"GL_PIXEL_MAP_I_TO_R_SIZE", 0x0CB2},
+    {"GL_PIXEL_MAP_I_TO_G_SIZE", 0x0CB3},
+    {"GL_PIXEL_MAP_I_TO_B_SIZE", 0x0CB4},
+    {"GL_PIXEL_MAP_I_TO_A_SIZE", 0x0CB5},
+    {"GL_PIXEL_MAP_R_TO_R_SIZE", 0x0CB6},
+    {"GL_PIXEL_MAP_G_TO_G_SIZE", 0x0CB7},
+    {"GL_PIXEL_MAP_B_TO_B_SIZE", 0x0CB8},
+    {"GL_PIXEL_MAP_A_TO_A_SIZE", 0x0CB9},
+    {"GL_UNPACK_SWAP_BYTES", 0x0CF0},
+    {"GL_UNPACK_LSB_FIRST", 0x0CF1},
+    {"GL_UNPACK_ROW_LENGTH", 0x0CF2},
+    {"GL_UNPACK_ROW_LENGTH_EXT", 0x0CF2},
+    {"GL_UNPACK_SKIP_ROWS", 0x0CF3},
+    {"GL_UNPACK_SKIP_ROWS_EXT", 0x0CF3},
+    {"GL_UNPACK_SKIP_PIXELS", 0x0CF4},
+    {"GL_UNPACK_SKIP_PIXELS_EXT", 0x0CF4},
+    {"GL_UNPACK_ALIGNMENT", 0x0CF5},
+    {"GL_PACK_SWAP_BYTES", 0x0D00},
+    {"GL_PACK_LSB_FIRST", 0x0D01},
+    {"GL_PACK_ROW_LENGTH", 0x0D02},
+    {"GL_PACK_SKIP_ROWS", 0x0D03},
+    {"GL_PACK_SKIP_PIXELS", 0x0D04},
+    {"GL_PACK_ALIGNMENT", 0x0D05},
+    {"GL_MAP_COLOR", 0x0D10},
+    {"GL_MAP_STENCIL", 0x0D11},
+    {"GL_INDEX_SHIFT", 0x0D12},
+    {"GL_INDEX_OFFSET", 0x0D13},
+    {"GL_RED_SCALE", 0x0D14},
+    {"GL_RED_BIAS", 0x0D15},
+    {"GL_ZOOM_X", 0x0D16},
+    {"GL_ZOOM_Y", 0x0D17},
+    {"GL_GREEN_SCALE", 0x0D18},
+    {"GL_GREEN_BIAS", 0x0D19},
+    {"GL_BLUE_SCALE", 0x0D1A},
+    {"GL_BLUE_BIAS", 0x0D1B},
+    {"GL_ALPHA_SCALE", 0x0D1C},
+    {"GL_ALPHA_BIAS", 0x0D1D},
+    {"GL_DEPTH_SCALE", 0x0D1E},
+    {"GL_DEPTH_BIAS", 0x0D1F},
+    {"GL_MAX_EVAL_ORDER", 0x0D30},
+    {"GL_MAX_LIGHTS", 0x0D31},
+    {"GL_MAX_CLIP_PLANES", 0x0D32},
+    {"GL_MAX_CLIP_DISTANCES", 0x0D32},
+    {"GL_MAX_TEXTURE_SIZE", 0x0D33},
+    {"GL_MAX_PIXEL_MAP_TABLE", 0x0D34},
+    {"GL_MAX_ATTRIB_STACK_DEPTH", 0x0D35},
+    {"GL_MAX_MODELVIEW_STACK_DEPTH", 0x0D36},
+    {"GL_MAX_NAME_STACK_DEPTH", 0x0D37},
+    {"GL_MAX_PROJECTION_STACK_DEPTH", 0x0D38},
+    {"GL_MAX_TEXTURE_STACK_DEPTH", 0x0D39},
+    {"GL_MAX_VIEWPORT_DIMS", 0x0D3A},
+    {"GL_MAX_CLIENT_ATTRIB_STACK_DEPTH", 0x0D3B},
+    {"GL_SUBPIXEL_BITS", 0x0D50},
+    {"GL_INDEX_BITS", 0x0D51},
+    {"GL_RED_BITS", 0x0D52},
+    {"GL_GREEN_BITS", 0x0D53},
+    {"GL_BLUE_BITS", 0x0D54},
+    {"GL_ALPHA_BITS", 0x0D55},
+    {"GL_DEPTH_BITS", 0x0D56},
+    {"GL_STENCIL_BITS", 0x0D57},
+    {"GL_ACCUM_RED_BITS", 0x0D58},
+    {"GL_ACCUM_GREEN_BITS", 0x0D59},
+    {"GL_ACCUM_BLUE_BITS", 0x0D5A},
+    {"GL_ACCUM_ALPHA_BITS", 0x0D5B},
+    {"GL_NAME_STACK_DEPTH", 0x0D70},
+    {"GL_AUTO_NORMAL", 0x0D80},
+    {"GL_MAP1_COLOR_4", 0x0D90},
+    {"GL_MAP1_INDEX", 0x0D91},
+    {"GL_MAP1_NORMAL", 0x0D92},
+    {"GL_MAP1_TEXTURE_COORD_1", 0x0D93},
+    {"GL_MAP1_TEXTURE_COORD_2", 0x0D94},
+    {"GL_MAP1_TEXTURE_COORD_3", 0x0D95},
+    {"GL_MAP1_TEXTURE_COORD_4", 0x0D96},
+    {"GL_MAP1_VERTEX_3", 0x0D97},
+    {"GL_MAP1_VERTEX_4", 0x0D98},
+    {"GL_MAP2_COLOR_4", 0x0DB0},
+    {"GL_MAP2_INDEX", 0x0DB1},
+    {"GL_MAP2_NORMAL", 0x0DB2},
+    {"GL_MAP2_TEXTURE_COORD_1", 0x0DB3},
+    {"GL_MAP2_TEXTURE_COORD_2", 0x0DB4},
+    {"GL_MAP2_TEXTURE_COORD_3", 0x0DB5},
+    {"GL_MAP2_TEXTURE_COORD_4", 0x0DB6},
+    {"GL_MAP2_VERTEX_3", 0x0DB7},
+    {"GL_MAP2_VERTEX_4", 0x0DB8},
+    {"GL_MAP1_GRID_DOMAIN", 0x0DD0},
+    {"GL_MAP1_GRID_SEGMENTS", 0x0DD1},
+    {"GL_MAP2_GRID_DOMAIN", 0x0DD2},
+    {"GL_MAP2_GRID_SEGMENTS", 0x0DD3},
+    {"GL_TEXTURE_1D", 0x0DE0},
+    {"GL_TEXTURE_2D", 0x0DE1},
+    {"GL_FEEDBACK_BUFFER_POINTER", 0x0DF0},
+    {"GL_FEEDBACK_BUFFER_SIZE", 0x0DF1},
+    {"GL_FEEDBACK_BUFFER_TYPE", 0x0DF2},
+    {"GL_SELECTION_BUFFER_POINTER", 0x0DF3},
+    {"GL_SELECTION_BUFFER_SIZE", 0x0DF4},
+    {"GL_TEXTURE_WIDTH", 0x1000},
+    {"GL_TEXTURE_HEIGHT", 0x1001},
+    {"GL_TEXTURE_INTERNAL_FORMAT", 0x1003},
+    {"GL_TEXTURE_COMPONENTS", 0x1003},
+    {"GL_TEXTURE_BORDER_COLOR", 0x1004},
+    {"GL_TEXTURE_BORDER_COLOR_NV", 0x1004},
+    {"GL_TEXTURE_BORDER", 0x1005},
+    {"GL_DONT_CARE", 0x1100},
+    {"GL_FASTEST", 0x1101},
+    {"GL_NICEST", 0x1102},
+    {"GL_AMBIENT", 0x1200},
+    {"GL_DIFFUSE", 0x1201},
+    {"GL_SPECULAR", 0x1202},
+    {"GL_POSITION", 0x1203},
+    {"GL_SPOT_DIRECTION", 0x1204},
+    {"GL_SPOT_EXPONENT", 0x1205},
+    {"GL_SPOT_CUTOFF", 0x1206},
+    {"GL_CONSTANT_ATTENUATION", 0x1207},
+    {"GL_LINEAR_ATTENUATION", 0x1208},
+    {"GL_QUADRATIC_ATTENUATION", 0x1209},
+    {"GL_COMPILE", 0x1300},
+    {"GL_COMPILE_AND_EXECUTE", 0x1301},
+    {"GL_BYTE", 0x1400},
+    {"GL_UNSIGNED_BYTE", 0x1401},
+    {"GL_SHORT", 0x1402},
+    {"GL_UNSIGNED_SHORT", 0x1403},
+    {"GL_INT", 0x1404},
+    {"GL_UNSIGNED_INT", 0x1405},
+    {"GL_FLOAT", 0x1406},
+    {"GL_2_BYTES", 0x1407},
+    {"GL_3_BYTES", 0x1408},
+    {"GL_4_BYTES", 0x1409},
+    {"GL_DOUBLE", 0x140A},
+    {"GL_DOUBLE_EXT", 0x140A},
+    {"GL_HALF_FLOAT", 0x140B},
+    {"GL_HALF_FLOAT_ARB", 0x140B},
+    {"GL_HALF_FLOAT_NV", 0x140B},
+    {"GL_HALF_APPLE", 0x140B},
+    {"GL_FIXED", 0x140C},
+    {"GL_FIXED_OES", 0x140C},
+    {"GL_INT64_NV", 0x140E},
+    {"GL_UNSIGNED_INT64_ARB", 0x140F},
+    {"GL_UNSIGNED_INT64_NV", 0x140F},
+    {"GL_CLEAR", 0x1500},
+    {"GL_AND", 0x1501},
+    {"GL_AND_REVERSE", 0x1502},
+    {"GL_COPY", 0x1503},
+    {"GL_AND_INVERTED", 0x1504},
+    {"GL_NOOP", 0x1505},
+    {"GL_XOR", 0x1506},
+    {"GL_OR", 0x1507},
+    {"GL_NOR", 0x1508},
+    {"GL_EQUIV", 0x1509},
+    {"GL_INVERT", 0x150A},
+    {"GL_OR_REVERSE", 0x150B},
+    {"GL_COPY_INVERTED", 0x150C},
+    {"GL_OR_INVERTED", 0x150D},
+    {"GL_NAND", 0x150E},
+    {"GL_SET", 0x150F},
+    {"GL_EMISSION", 0x1600},
+    {"GL_SHININESS", 0x1601},
+    {"GL_AMBIENT_AND_DIFFUSE", 0x1602},
+    {"GL_COLOR_INDEXES", 0x1603},
+    {"GL_MODELVIEW", 0x1700},
+    {"GL_MODELVIEW0_ARB", 0x1700},
+    {"GL_MODELVIEW0_EXT", 0x1700},
+    {"GL_PROJECTION", 0x1701},
+    {"GL_TEXTURE", 0x1702},
+    {"GL_COLOR", 0x1800},
+    {"GL_COLOR_EXT", 0x1800},
+    {"GL_DEPTH", 0x1801},
+    {"GL_DEPTH_EXT", 0x1801},
+    {"GL_STENCIL", 0x1802},
+    {"GL_STENCIL_EXT", 0x1802},
+    {"GL_COLOR_INDEX", 0x1900},
+    {"GL_STENCIL_INDEX", 0x1901},
+    {"GL_DEPTH_COMPONENT", 0x1902},
+    {"GL_RED", 0x1903},
+    {"GL_RED_EXT", 0x1903},
+    {"GL_GREEN", 0x1904},
+    {"GL_BLUE", 0x1905},
+    {"GL_ALPHA", 0x1906},
+    {"GL_RGB", 0x1907},
+    {"GL_RGBA", 0x1908},
+    {"GL_LUMINANCE", 0x1909},
+    {"GL_LUMINANCE_ALPHA", 0x190A},
+    {"GL_BITMAP", 0x1A00},
+    {"GL_POINT", 0x1B00},
+    {"GL_LINE", 0x1B01},
+    {"GL_FILL", 0x1B02},
+    {"GL_RENDER", 0x1C00},
+    {"GL_FEEDBACK", 0x1C01},
+    {"GL_SELECT", 0x1C02},
+    {"GL_FLAT", 0x1D00},
+    {"GL_SMOOTH", 0x1D01},
+    {"GL_KEEP", 0x1E00},
+    {"GL_REPLACE", 0x1E01},
+    {"GL_INCR", 0x1E02},
+    {"GL_DECR", 0x1E03},
+    {"GL_VENDOR", 0x1F00},
+    {"GL_RENDERER", 0x1F01},
+    {"GL_VERSION", 0x1F02},
+    {"GL_EXTENSIONS", 0x1F03},
+    {"GL_S", 0x2000},
+    {"GL_T", 0x2001},
+    {"GL_R", 0x2002},
+    {"GL_Q", 0x2003},
+    {"GL_MODULATE", 0x2100},
+    {"GL_DECAL", 0x2101},
+    {"GL_TEXTURE_ENV_MODE", 0x2200},
+    {"GL_TEXTURE_ENV_COLOR", 0x2201},
+    {"GL_TEXTURE_ENV", 0x2300},
+    {"GL_EYE_LINEAR", 0x2400},
+    {"GL_OBJECT_LINEAR", 0x2401},
+    {"GL_SPHERE_MAP", 0x2402},
+    {"GL_TEXTURE_GEN_MODE", 0x2500},
+    {"GL_OBJECT_PLANE", 0x2501},
+    {"GL_EYE_PLANE", 0x2502},
+    {"GL_NEAREST", 0x2600},
+    {"GL_LINEAR", 0x2601},
+    {"GL_NEAREST_MIPMAP_NEAREST", 0x2700},
+    {"GL_LINEAR_MIPMAP_NEAREST", 0x2701},
+    {"GL_NEAREST_MIPMAP_LINEAR", 0x2702},
+    {"GL_LINEAR_MIPMAP_LINEAR", 0x2703},
+    {"GL_TEXTURE_MAG_FILTER", 0x2800},
+    {"GL_TEXTURE_MIN_FILTER", 0x2801},
+    {"GL_TEXTURE_WRAP_S", 0x2802},
+    {"GL_TEXTURE_WRAP_T", 0x2803},
+    {"GL_CLAMP", 0x2900},
+    {"GL_REPEAT", 0x2901},
+    {"GL_POLYGON_OFFSET_UNITS", 0x2A00},
+    {"GL_POLYGON_OFFSET_POINT", 0x2A01},
+    {"GL_POLYGON_OFFSET_LINE", 0x2A02},
+    {"GL_R3_G3_B2", 0x2A10},
+    {"GL_V2F", 0x2A20},
+    {"GL_V3F", 0x2A21},
+    {"GL_C4UB_V2F", 0x2A22},
+    {"GL_C4UB_V3F", 0x2A23},
+    {"GL_C3F_V3F", 0x2A24},
+    {"GL_N3F_V3F", 0x2A25},
+    {"GL_C4F_N3F_V3F", 0x2A26},
+    {"GL_T2F_V3F", 0x2A27},
+    {"GL_T4F_V4F", 0x2A28},
+    {"GL_T2F_C4UB_V3F", 0x2A29},
+    {"GL_T2F_C3F_V3F", 0x2A2A},
+    {"GL_T2F_N3F_V3F", 0x2A2B},
+    {"GL_T2F_C4F_N3F_V3F", 0x2A2C},
+    {"GL_T4F_C4F_N3F_V4F", 0x2A2D},
+    {"GL_CLIP_PLANE0", 0x3000},
+    {"GL_CLIP_DISTANCE0", 0x3000},
+    {"GL_CLIP_PLANE1", 0x3001},
+    {"GL_CLIP_DISTANCE1", 0x3001},
+    {"GL_CLIP_PLANE2", 0x3002},
+    {"GL_CLIP_DISTANCE2", 0x3002},
+    {"GL_CLIP_PLANE3", 0x3003},
+    {"GL_CLIP_DISTANCE3", 0x3003},
+    {"GL_CLIP_PLANE4", 0x3004},
+    {"GL_CLIP_DISTANCE4", 0x3004},
+    {"GL_CLIP_PLANE5", 0x3005},
+    {"GL_CLIP_DISTANCE5", 0x3005},
+    {"GL_CLIP_DISTANCE6", 0x3006},
+    {"GL_CLIP_DISTANCE7", 0x3007},
+    {"GL_LIGHT0", 0x4000},
+    {"GL_LIGHT1", 0x4001},
+    {"GL_LIGHT2", 0x4002},
+    {"GL_LIGHT3", 0x4003},
+    {"GL_LIGHT4", 0x4004},
+    {"GL_LIGHT5", 0x4005},
+    {"GL_LIGHT6", 0x4006},
+    {"GL_LIGHT7", 0x4007},
+    {"GL_ABGR_EXT", 0x8000},
+    {"GL_CONSTANT_COLOR", 0x8001},
+    {"GL_CONSTANT_COLOR_EXT", 0x8001},
+    {"GL_ONE_MINUS_CONSTANT_COLOR", 0x8002},
+    {"GL_ONE_MINUS_CONSTANT_COLOR_EXT", 0x8002},
+    {"GL_CONSTANT_ALPHA", 0x8003},
+    {"GL_CONSTANT_ALPHA_EXT", 0x8003},
+    {"GL_ONE_MINUS_CONSTANT_ALPHA", 0x8004},
+    {"GL_ONE_MINUS_CONSTANT_ALPHA_EXT", 0x8004},
+    {"GL_BLEND_COLOR", 0x8005},
+    {"GL_BLEND_COLOR_EXT", 0x8005},
+    {"GL_FUNC_ADD", 0x8006},
+    {"GL_FUNC_ADD_EXT", 0x8006},
+    {"GL_FUNC_ADD_OES", 0x8006},
+    {"GL_MIN", 0x8007},
+    {"GL_MIN_EXT", 0x8007},
+    {"GL_MAX", 0x8008},
+    {"GL_MAX_EXT", 0x8008},
+    {"GL_BLEND_EQUATION", 0x8009},
+    {"GL_BLEND_EQUATION_EXT", 0x8009},
+    {"GL_BLEND_EQUATION_OES", 0x8009},
+    {"GL_BLEND_EQUATION_RGB", 0x8009},
+    {"GL_BLEND_EQUATION_RGB_EXT", 0x8009},
+    {"GL_BLEND_EQUATION_RGB_OES", 0x8009},
+    {"GL_FUNC_SUBTRACT", 0x800A},
+    {"GL_FUNC_SUBTRACT_EXT", 0x800A},
+    {"GL_FUNC_SUBTRACT_OES", 0x800A},
+    {"GL_FUNC_REVERSE_SUBTRACT", 0x800B},
+    {"GL_FUNC_REVERSE_SUBTRACT_EXT", 0x800B},
+    {"GL_FUNC_REVERSE_SUBTRACT_OES", 0x800B},
+    {"GL_CMYK_EXT", 0x800C},
+    {"GL_CMYKA_EXT", 0x800D},
+    {"GL_PACK_CMYK_HINT_EXT", 0x800E},
+    {"GL_UNPACK_CMYK_HINT_EXT", 0x800F},
+    {"GL_CONVOLUTION_1D", 0x8010},
+    {"GL_CONVOLUTION_1D_EXT", 0x8010},
+    {"GL_CONVOLUTION_2D", 0x8011},
+    {"GL_CONVOLUTION_2D_EXT", 0x8011},
+    {"GL_SEPARABLE_2D", 0x8012},
+    {"GL_SEPARABLE_2D_EXT", 0x8012},
+    {"GL_CONVOLUTION_BORDER_MODE", 0x8013},
+    {"GL_CONVOLUTION_BORDER_MODE_EXT", 0x8013},
+    {"GL_CONVOLUTION_FILTER_SCALE", 0x8014},
+    {"GL_CONVOLUTION_FILTER_SCALE_EXT", 0x8014},
+    {"GL_CONVOLUTION_FILTER_BIAS", 0x8015},
+    {"GL_CONVOLUTION_FILTER_BIAS_EXT", 0x8015},
+    {"GL_REDUCE", 0x8016},
+    {"GL_REDUCE_EXT", 0x8016},
+    {"GL_CONVOLUTION_FORMAT", 0x8017},
+    {"GL_CONVOLUTION_FORMAT_EXT", 0x8017},
+    {"GL_CONVOLUTION_WIDTH", 0x8018},
+    {"GL_CONVOLUTION_WIDTH_EXT", 0x8018},
+    {"GL_CONVOLUTION_HEIGHT", 0x8019},
+    {"GL_CONVOLUTION_HEIGHT_EXT", 0x8019},
+    {"GL_MAX_CONVOLUTION_WIDTH", 0x801A},
+    {"GL_MAX_CONVOLUTION_WIDTH_EXT", 0x801A},
+    {"GL_MAX_CONVOLUTION_HEIGHT", 0x801B},
+    {"GL_MAX_CONVOLUTION_HEIGHT_EXT", 0x801B},
+    {"GL_POST_CONVOLUTION_RED_SCALE", 0x801C},
+    {"GL_POST_CONVOLUTION_RED_SCALE_EXT", 0x801C},
+    {"GL_POST_CONVOLUTION_GREEN_SCALE", 0x801D},
+    {"GL_POST_CONVOLUTION_GREEN_SCALE_EXT", 0x801D},
+    {"GL_POST_CONVOLUTION_BLUE_SCALE", 0x801E},
+    {"GL_POST_CONVOLUTION_BLUE_SCALE_EXT", 0x801E},
+    {"GL_POST_CONVOLUTION_ALPHA_SCALE", 0x801F},
+    {"GL_POST_CONVOLUTION_ALPHA_SCALE_EXT", 0x801F},
+    {"GL_POST_CONVOLUTION_RED_BIAS", 0x8020},
+    {"GL_POST_CONVOLUTION_RED_BIAS_EXT", 0x8020},
+    {"GL_POST_CONVOLUTION_GREEN_BIAS", 0x8021},
+    {"GL_POST_CONVOLUTION_GREEN_BIAS_EXT", 0x8021},
+    {"GL_POST_CONVOLUTION_BLUE_BIAS", 0x8022},
+    {"GL_POST_CONVOLUTION_BLUE_BIAS_EXT", 0x8022},
+    {"GL_POST_CONVOLUTION_ALPHA_BIAS", 0x8023},
+    {"GL_POST_CONVOLUTION_ALPHA_BIAS_EXT", 0x8023},
+    {"GL_HISTOGRAM", 0x8024},
+    {"GL_HISTOGRAM_EXT", 0x8024},
+    {"GL_PROXY_HISTOGRAM", 0x8025},
+    {"GL_PROXY_HISTOGRAM_EXT", 0x8025},
+    {"GL_HISTOGRAM_WIDTH", 0x8026},
+    {"GL_HISTOGRAM_WIDTH_EXT", 0x8026},
+    {"GL_HISTOGRAM_FORMAT", 0x8027},
+    {"GL_HISTOGRAM_FORMAT_EXT", 0x8027},
+    {"GL_HISTOGRAM_RED_SIZE", 0x8028},
+    {"GL_HISTOGRAM_RED_SIZE_EXT", 0x8028},
+    {"GL_HISTOGRAM_GREEN_SIZE", 0x8029},
+    {"GL_HISTOGRAM_GREEN_SIZE_EXT", 0x8029},
+    {"GL_HISTOGRAM_BLUE_SIZE", 0x802A},
+    {"GL_HISTOGRAM_BLUE_SIZE_EXT", 0x802A},
+    {"GL_HISTOGRAM_ALPHA_SIZE", 0x802B},
+    {"GL_HISTOGRAM_ALPHA_SIZE_EXT", 0x802B},
+    {"GL_HISTOGRAM_LUMINANCE_SIZE", 0x802C},
+    {"GL_HISTOGRAM_LUMINANCE_SIZE_EXT", 0x802C},
+    {"GL_HISTOGRAM_SINK", 0x802D},
+    {"GL_HISTOGRAM_SINK_EXT", 0x802D},
+    {"GL_MINMAX", 0x802E},
+    {"GL_MINMAX_EXT", 0x802E},
+    {"GL_MINMAX_FORMAT", 0x802F},
+    {"GL_MINMAX_FORMAT_EXT", 0x802F},
+    {"GL_MINMAX_SINK", 0x8030},
+    {"GL_MINMAX_SINK_EXT", 0x8030},
+    {"GL_TABLE_TOO_LARGE_EXT", 0x8031},
+    {"GL_TABLE_TOO_LARGE", 0x8031},
+    {"GL_UNSIGNED_BYTE_3_3_2", 0x8032},
+    {"GL_UNSIGNED_BYTE_3_3_2_EXT", 0x8032},
+    {"GL_UNSIGNED_SHORT_4_4_4_4", 0x8033},
+    {"GL_UNSIGNED_SHORT_4_4_4_4_EXT", 0x8033},
+    {"GL_UNSIGNED_SHORT_5_5_5_1", 0x8034},
+    {"GL_UNSIGNED_SHORT_5_5_5_1_EXT", 0x8034},
+    {"GL_UNSIGNED_INT_8_8_8_8", 0x8035},
+    {"GL_UNSIGNED_INT_8_8_8_8_EXT", 0x8035},
+    {"GL_UNSIGNED_INT_10_10_10_2", 0x8036},
+    {"GL_UNSIGNED_INT_10_10_10_2_EXT", 0x8036},
+    {"GL_POLYGON_OFFSET_EXT", 0x8037},
+    {"GL_POLYGON_OFFSET_FILL", 0x8037},
+    {"GL_POLYGON_OFFSET_FACTOR", 0x8038},
+    {"GL_POLYGON_OFFSET_FACTOR_EXT", 0x8038},
+    {"GL_POLYGON_OFFSET_BIAS_EXT", 0x8039},
+    {"GL_RESCALE_NORMAL", 0x803A},
+    {"GL_RESCALE_NORMAL_EXT", 0x803A},
+    {"GL_ALPHA4", 0x803B},
+    {"GL_ALPHA4_EXT", 0x803B},
+    {"GL_ALPHA8", 0x803C},
+    {"GL_ALPHA8_EXT", 0x803C},
+    {"GL_ALPHA12", 0x803D},
+    {"GL_ALPHA12_EXT", 0x803D},
+    {"GL_ALPHA16", 0x803E},
+    {"GL_ALPHA16_EXT", 0x803E},
+    {"GL_LUMINANCE4", 0x803F},
+    {"GL_LUMINANCE4_EXT", 0x803F},
+    {"GL_LUMINANCE8", 0x8040},
+    {"GL_LUMINANCE8_EXT", 0x8040},
+    {"GL_LUMINANCE12", 0x8041},
+    {"GL_LUMINANCE12_EXT", 0x8041},
+    {"GL_LUMINANCE16", 0x8042},
+    {"GL_LUMINANCE16_EXT", 0x8042},
+    {"GL_LUMINANCE4_ALPHA4", 0x8043},
+    {"GL_LUMINANCE4_ALPHA4_EXT", 0x8043},
+    {"GL_LUMINANCE6_ALPHA2", 0x8044},
+    {"GL_LUMINANCE6_ALPHA2_EXT", 0x8044},
+    {"GL_LUMINANCE8_ALPHA8", 0x8045},
+    {"GL_LUMINANCE8_ALPHA8_EXT", 0x8045},
+    {"GL_LUMINANCE12_ALPHA4", 0x8046},
+    {"GL_LUMINANCE12_ALPHA4_EXT", 0x8046},
+    {"GL_LUMINANCE12_ALPHA12", 0x8047},
+    {"GL_LUMINANCE12_ALPHA12_EXT", 0x8047},
+    {"GL_LUMINANCE16_ALPHA16", 0x8048},
+    {"GL_LUMINANCE16_ALPHA16_EXT", 0x8048},
+    {"GL_INTENSITY", 0x8049},
+    {"GL_INTENSITY_EXT", 0x8049},
+    {"GL_INTENSITY4", 0x804A},
+    {"GL_INTENSITY4_EXT", 0x804A},
+    {"GL_INTENSITY8", 0x804B},
+    {"GL_INTENSITY8_EXT", 0x804B},
+    {"GL_INTENSITY12", 0x804C},
+    {"GL_INTENSITY12_EXT", 0x804C},
+    {"GL_INTENSITY16", 0x804D},
+    {"GL_INTENSITY16_EXT", 0x804D},
+    {"GL_RGB2_EXT", 0x804E},
+    {"GL_RGB4", 0x804F},
+    {"GL_RGB4_EXT", 0x804F},
+    {"GL_RGB5", 0x8050},
+    {"GL_RGB5_EXT", 0x8050},
+    {"GL_RGB8", 0x8051},
+    {"GL_RGB8_EXT", 0x8051},
+    {"GL_RGB10", 0x8052},
+    {"GL_RGB10_EXT", 0x8052},
+    {"GL_RGB12", 0x8053},
+    {"GL_RGB12_EXT", 0x8053},
+    {"GL_RGB16", 0x8054},
+    {"GL_RGB16_EXT", 0x8054},
+    {"GL_RGBA2", 0x8055},
+    {"GL_RGBA2_EXT", 0x8055},
+    {"GL_RGBA4", 0x8056},
+    {"GL_RGBA4_EXT", 0x8056},
+    {"GL_RGBA4_OES", 0x8056},
+    {"GL_RGB5_A1", 0x8057},
+    {"GL_RGB5_A1_EXT", 0x8057},
+    {"GL_RGB5_A1_OES", 0x8057},
+    {"GL_RGBA8", 0x8058},
+    {"GL_RGBA8_EXT", 0x8058},
+    {"GL_RGBA8_OES", 0x8058},
+    {"GL_RGB10_A2", 0x8059},
+    {"GL_RGB10_A2_EXT", 0x8059},
+    {"GL_RGBA12", 0x805A},
+    {"GL_RGBA12_EXT", 0x805A},
+    {"GL_RGBA16", 0x805B},
+    {"GL_RGBA16_EXT", 0x805B},
+    {"GL_TEXTURE_RED_SIZE", 0x805C},
+    {"GL_TEXTURE_RED_SIZE_EXT", 0x805C},
+    {"GL_TEXTURE_GREEN_SIZE", 0x805D},
+    {"GL_TEXTURE_GREEN_SIZE_EXT", 0x805D},
+    {"GL_TEXTURE_BLUE_SIZE", 0x805E},
+    {"GL_TEXTURE_BLUE_SIZE_EXT", 0x805E},
+    {"GL_TEXTURE_ALPHA_SIZE", 0x805F},
+    {"GL_TEXTURE_ALPHA_SIZE_EXT", 0x805F},
+    {"GL_TEXTURE_LUMINANCE_SIZE", 0x8060},
+    {"GL_TEXTURE_LUMINANCE_SIZE_EXT", 0x8060},
+    {"GL_TEXTURE_INTENSITY_SIZE", 0x8061},
+    {"GL_TEXTURE_INTENSITY_SIZE_EXT", 0x8061},
+    {"GL_REPLACE_EXT", 0x8062},
+    {"GL_PROXY_TEXTURE_1D", 0x8063},
+    {"GL_PROXY_TEXTURE_1D_EXT", 0x8063},
+    {"GL_PROXY_TEXTURE_2D", 0x8064},
+    {"GL_PROXY_TEXTURE_2D_EXT", 0x8064},
+    {"GL_TEXTURE_TOO_LARGE_EXT", 0x8065},
+    {"GL_TEXTURE_PRIORITY", 0x8066},
+    {"GL_TEXTURE_PRIORITY_EXT", 0x8066},
+    {"GL_TEXTURE_RESIDENT", 0x8067},
+    {"GL_TEXTURE_RESIDENT_EXT", 0x8067},
+    {"GL_TEXTURE_1D_BINDING_EXT", 0x8068},
+    {"GL_TEXTURE_BINDING_1D", 0x8068},
+    {"GL_TEXTURE_2D_BINDING_EXT", 0x8069},
+    {"GL_TEXTURE_BINDING_2D", 0x8069},
+    {"GL_TEXTURE_3D_BINDING_EXT", 0x806A},
+    {"GL_TEXTURE_3D_BINDING_OES", 0x806A},
+    {"GL_TEXTURE_BINDING_3D", 0x806A},
+    {"GL_PACK_SKIP_IMAGES", 0x806B},
+    {"GL_PACK_SKIP_IMAGES_EXT", 0x806B},
+    {"GL_PACK_IMAGE_HEIGHT", 0x806C},
+    {"GL_PACK_IMAGE_HEIGHT_EXT", 0x806C},
+    {"GL_UNPACK_SKIP_IMAGES", 0x806D},
+    {"GL_UNPACK_SKIP_IMAGES_EXT", 0x806D},
+    {"GL_UNPACK_IMAGE_HEIGHT", 0x806E},
+    {"GL_UNPACK_IMAGE_HEIGHT_EXT", 0x806E},
+    {"GL_TEXTURE_3D", 0x806F},
+    {"GL_TEXTURE_3D_EXT", 0x806F},
+    {"GL_TEXTURE_3D_OES", 0x806F},
+    {"GL_PROXY_TEXTURE_3D", 0x8070},
+    {"GL_PROXY_TEXTURE_3D_EXT", 0x8070},
+    {"GL_TEXTURE_DEPTH", 0x8071},
+    {"GL_TEXTURE_DEPTH_EXT", 0x8071},
+    {"GL_TEXTURE_WRAP_R", 0x8072},
+    {"GL_TEXTURE_WRAP_R_EXT", 0x8072},
+    {"GL_TEXTURE_WRAP_R_OES", 0x8072},
+    {"GL_MAX_3D_TEXTURE_SIZE", 0x8073},
+    {"GL_MAX_3D_TEXTURE_SIZE_EXT", 0x8073},
+    {"GL_MAX_3D_TEXTURE_SIZE_OES", 0x8073},
+    {"GL_VERTEX_ARRAY", 0x8074},
+    {"GL_VERTEX_ARRAY_EXT", 0x8074},
+    {"GL_VERTEX_ARRAY_KHR", 0x8074},
+    {"GL_NORMAL_ARRAY", 0x8075},
+    {"GL_NORMAL_ARRAY_EXT", 0x8075},
+    {"GL_COLOR_ARRAY", 0x8076},
+    {"GL_COLOR_ARRAY_EXT", 0x8076},
+    {"GL_INDEX_ARRAY", 0x8077},
+    {"GL_INDEX_ARRAY_EXT", 0x8077},
+    {"GL_TEXTURE_COORD_ARRAY", 0x8078},
+    {"GL_TEXTURE_COORD_ARRAY_EXT", 0x8078},
+    {"GL_EDGE_FLAG_ARRAY", 0x8079},
+    {"GL_EDGE_FLAG_ARRAY_EXT", 0x8079},
+    {"GL_VERTEX_ARRAY_SIZE", 0x807A},
+    {"GL_VERTEX_ARRAY_SIZE_EXT", 0x807A},
+    {"GL_VERTEX_ARRAY_TYPE", 0x807B},
+    {"GL_VERTEX_ARRAY_TYPE_EXT", 0x807B},
+    {"GL_VERTEX_ARRAY_STRIDE", 0x807C},
+    {"GL_VERTEX_ARRAY_STRIDE_EXT", 0x807C},
+    {"GL_VERTEX_ARRAY_COUNT_EXT", 0x807D},
+    {"GL_NORMAL_ARRAY_TYPE", 0x807E},
+    {"GL_NORMAL_ARRAY_TYPE_EXT", 0x807E},
+    {"GL_NORMAL_ARRAY_STRIDE", 0x807F},
+    {"GL_NORMAL_ARRAY_STRIDE_EXT", 0x807F},
+    {"GL_NORMAL_ARRAY_COUNT_EXT", 0x8080},
+    {"GL_COLOR_ARRAY_SIZE", 0x8081},
+    {"GL_COLOR_ARRAY_SIZE_EXT", 0x8081},
+    {"GL_COLOR_ARRAY_TYPE", 0x8082},
+    {"GL_COLOR_ARRAY_TYPE_EXT", 0x8082},
+    {"GL_COLOR_ARRAY_STRIDE", 0x8083},
+    {"GL_COLOR_ARRAY_STRIDE_EXT", 0x8083},
+    {"GL_COLOR_ARRAY_COUNT_EXT", 0x8084},
+    {"GL_INDEX_ARRAY_TYPE", 0x8085},
+    {"GL_INDEX_ARRAY_TYPE_EXT", 0x8085},
+    {"GL_INDEX_ARRAY_STRIDE", 0x8086},
+    {"GL_INDEX_ARRAY_STRIDE_EXT", 0x8086},
+    {"GL_INDEX_ARRAY_COUNT_EXT", 0x8087},
+    {"GL_TEXTURE_COORD_ARRAY_SIZE", 0x8088},
+    {"GL_TEXTURE_COORD_ARRAY_SIZE_EXT", 0x8088},
+    {"GL_TEXTURE_COORD_ARRAY_TYPE", 0x8089},
+    {"GL_TEXTURE_COORD_ARRAY_TYPE_EXT", 0x8089},
+    {"GL_TEXTURE_COORD_ARRAY_STRIDE", 0x808A},
+    {"GL_TEXTURE_COORD_ARRAY_STRIDE_EXT", 0x808A},
+    {"GL_TEXTURE_COORD_ARRAY_COUNT_EXT", 0x808B},
+    {"GL_EDGE_FLAG_ARRAY_STRIDE", 0x808C},
+    {"GL_EDGE_FLAG_ARRAY_STRIDE_EXT", 0x808C},
+    {"GL_EDGE_FLAG_ARRAY_COUNT_EXT", 0x808D},
+    {"GL_VERTEX_ARRAY_POINTER", 0x808E},
+    {"GL_VERTEX_ARRAY_POINTER_EXT", 0x808E},
+    {"GL_NORMAL_ARRAY_POINTER", 0x808F},
+    {"GL_NORMAL_ARRAY_POINTER_EXT", 0x808F},
+    {"GL_COLOR_ARRAY_POINTER", 0x8090},
+    {"GL_COLOR_ARRAY_POINTER_EXT", 0x8090},
+    {"GL_INDEX_ARRAY_POINTER", 0x8091},
+    {"GL_INDEX_ARRAY_POINTER_EXT", 0x8091},
+    {"GL_TEXTURE_COORD_ARRAY_POINTER", 0x8092},
+    {"GL_TEXTURE_COORD_ARRAY_POINTER_EXT", 0x8092},
+    {"GL_EDGE_FLAG_ARRAY_POINTER", 0x8093},
+    {"GL_EDGE_FLAG_ARRAY_POINTER_EXT", 0x8093},
+    {"GL_INTERLACE_SGIX", 0x8094},
+    {"GL_DETAIL_TEXTURE_2D_SGIS", 0x8095},
+    {"GL_DETAIL_TEXTURE_2D_BINDING_SGIS", 0x8096},
+    {"GL_LINEAR_DETAIL_SGIS", 0x8097},
+    {"GL_LINEAR_DETAIL_ALPHA_SGIS", 0x8098},
+    {"GL_LINEAR_DETAIL_COLOR_SGIS", 0x8099},
+    {"GL_DETAIL_TEXTURE_LEVEL_SGIS", 0x809A},
+    {"GL_DETAIL_TEXTURE_MODE_SGIS", 0x809B},
+    {"GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS", 0x809C},
+    {"GL_MULTISAMPLE", 0x809D},
+    {"GL_MULTISAMPLE_ARB", 0x809D},
+    {"GL_MULTISAMPLE_EXT", 0x809D},
+    {"GL_MULTISAMPLE_SGIS", 0x809D},
+    {"GL_SAMPLE_ALPHA_TO_COVERAGE", 0x809E},
+    {"GL_SAMPLE_ALPHA_TO_COVERAGE_ARB", 0x809E},
+    {"GL_SAMPLE_ALPHA_TO_MASK_EXT", 0x809E},
+    {"GL_SAMPLE_ALPHA_TO_MASK_SGIS", 0x809E},
+    {"GL_SAMPLE_ALPHA_TO_ONE", 0x809F},
+    {"GL_SAMPLE_ALPHA_TO_ONE_ARB", 0x809F},
+    {"GL_SAMPLE_ALPHA_TO_ONE_EXT", 0x809F},
+    {"GL_SAMPLE_ALPHA_TO_ONE_SGIS", 0x809F},
+    {"GL_SAMPLE_COVERAGE", 0x80A0},
+    {"GL_SAMPLE_COVERAGE_ARB", 0x80A0},
+    {"GL_SAMPLE_MASK_EXT", 0x80A0},
+    {"GL_SAMPLE_MASK_SGIS", 0x80A0},
+    {"GL_1PASS_EXT", 0x80A1},
+    {"GL_1PASS_SGIS", 0x80A1},
+    {"GL_2PASS_0_EXT", 0x80A2},
+    {"GL_2PASS_0_SGIS", 0x80A2},
+    {"GL_2PASS_1_EXT", 0x80A3},
+    {"GL_2PASS_1_SGIS", 0x80A3},
+    {"GL_4PASS_0_EXT", 0x80A4},
+    {"GL_4PASS_0_SGIS", 0x80A4},
+    {"GL_4PASS_1_EXT", 0x80A5},
+    {"GL_4PASS_1_SGIS", 0x80A5},
+    {"GL_4PASS_2_EXT", 0x80A6},
+    {"GL_4PASS_2_SGIS", 0x80A6},
+    {"GL_4PASS_3_EXT", 0x80A7},
+    {"GL_4PASS_3_SGIS", 0x80A7},
+    {"GL_SAMPLE_BUFFERS", 0x80A8},
+    {"GL_SAMPLE_BUFFERS_ARB", 0x80A8},
+    {"GL_SAMPLE_BUFFERS_EXT", 0x80A8},
+    {"GL_SAMPLE_BUFFERS_SGIS", 0x80A8},
+    {"GL_SAMPLES", 0x80A9},
+    {"GL_SAMPLES_ARB", 0x80A9},
+    {"GL_SAMPLES_EXT", 0x80A9},
+    {"GL_SAMPLES_SGIS", 0x80A9},
+    {"GL_SAMPLE_COVERAGE_VALUE", 0x80AA},
+    {"GL_SAMPLE_COVERAGE_VALUE_ARB", 0x80AA},
+    {"GL_SAMPLE_MASK_VALUE_EXT", 0x80AA},
+    {"GL_SAMPLE_MASK_VALUE_SGIS", 0x80AA},
+    {"GL_SAMPLE_COVERAGE_INVERT", 0x80AB},
+    {"GL_SAMPLE_COVERAGE_INVERT_ARB", 0x80AB},
+    {"GL_SAMPLE_MASK_INVERT_EXT", 0x80AB},
+    {"GL_SAMPLE_MASK_INVERT_SGIS", 0x80AB},
+    {"GL_SAMPLE_PATTERN_EXT", 0x80AC},
+    {"GL_SAMPLE_PATTERN_SGIS", 0x80AC},
+    {"GL_LINEAR_SHARPEN_SGIS", 0x80AD},
+    {"GL_LINEAR_SHARPEN_ALPHA_SGIS", 0x80AE},
+    {"GL_LINEAR_SHARPEN_COLOR_SGIS", 0x80AF},
+    {"GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS", 0x80B0},
+    {"GL_COLOR_MATRIX", 0x80B1},
+    {"GL_COLOR_MATRIX_SGI", 0x80B1},
+    {"GL_COLOR_MATRIX_STACK_DEPTH", 0x80B2},
+    {"GL_COLOR_MATRIX_STACK_DEPTH_SGI", 0x80B2},
+    {"GL_MAX_COLOR_MATRIX_STACK_DEPTH", 0x80B3},
+    {"GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI", 0x80B3},
+    {"GL_POST_COLOR_MATRIX_RED_SCALE", 0x80B4},
+    {"GL_POST_COLOR_MATRIX_RED_SCALE_SGI", 0x80B4},
+    {"GL_POST_COLOR_MATRIX_GREEN_SCALE", 0x80B5},
+    {"GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI", 0x80B5},
+    {"GL_POST_COLOR_MATRIX_BLUE_SCALE", 0x80B6},
+    {"GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI", 0x80B6},
+    {"GL_POST_COLOR_MATRIX_ALPHA_SCALE", 0x80B7},
+    {"GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI", 0x80B7},
+    {"GL_POST_COLOR_MATRIX_RED_BIAS", 0x80B8},
+    {"GL_POST_COLOR_MATRIX_RED_BIAS_SGI", 0x80B8},
+    {"GL_POST_COLOR_MATRIX_GREEN_BIAS", 0x80B9},
+    {"GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI", 0x80B9},
+    {"GL_POST_COLOR_MATRIX_BLUE_BIAS", 0x80BA},
+    {"GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI", 0x80BA},
+    {"GL_POST_COLOR_MATRIX_ALPHA_BIAS", 0x80BB},
+    {"GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI", 0x80BB},
+    {"GL_TEXTURE_COLOR_TABLE_SGI", 0x80BC},
+    {"GL_PROXY_TEXTURE_COLOR_TABLE_SGI", 0x80BD},
+    {"GL_TEXTURE_ENV_BIAS_SGIX", 0x80BE},
+    {"GL_SHADOW_AMBIENT_SGIX", 0x80BF},
+    {"GL_TEXTURE_COMPARE_FAIL_VALUE_ARB", 0x80BF},
+    {"GL_BLEND_DST_RGB", 0x80C8},
+    {"GL_BLEND_DST_RGB_EXT", 0x80C8},
+    {"GL_BLEND_DST_RGB_OES", 0x80C8},
+    {"GL_BLEND_SRC_RGB", 0x80C9},
+    {"GL_BLEND_SRC_RGB_EXT", 0x80C9},
+    {"GL_BLEND_SRC_RGB_OES", 0x80C9},
+    {"GL_BLEND_DST_ALPHA", 0x80CA},
+    {"GL_BLEND_DST_ALPHA_EXT", 0x80CA},
+    {"GL_BLEND_DST_ALPHA_OES", 0x80CA},
+    {"GL_BLEND_SRC_ALPHA", 0x80CB},
+    {"GL_BLEND_SRC_ALPHA_EXT", 0x80CB},
+    {"GL_BLEND_SRC_ALPHA_OES", 0x80CB},
+    {"GL_422_EXT", 0x80CC},
+    {"GL_422_REV_EXT", 0x80CD},
+    {"GL_422_AVERAGE_EXT", 0x80CE},
+    {"GL_422_REV_AVERAGE_EXT", 0x80CF},
+    {"GL_COLOR_TABLE", 0x80D0},
+    {"GL_COLOR_TABLE_SGI", 0x80D0},
+    {"GL_POST_CONVOLUTION_COLOR_TABLE", 0x80D1},
+    {"GL_POST_CONVOLUTION_COLOR_TABLE_SGI", 0x80D1},
+    {"GL_POST_COLOR_MATRIX_COLOR_TABLE", 0x80D2},
+    {"GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI", 0x80D2},
+    {"GL_PROXY_COLOR_TABLE", 0x80D3},
+    {"GL_PROXY_COLOR_TABLE_SGI", 0x80D3},
+    {"GL_PROXY_POST_CONVOLUTION_COLOR_TABLE", 0x80D4},
+    {"GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI", 0x80D4},
+    {"GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE", 0x80D5},
+    {"GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI", 0x80D5},
+    {"GL_COLOR_TABLE_SCALE", 0x80D6},
+    {"GL_COLOR_TABLE_SCALE_SGI", 0x80D6},
+    {"GL_COLOR_TABLE_BIAS", 0x80D7},
+    {"GL_COLOR_TABLE_BIAS_SGI", 0x80D7},
+    {"GL_COLOR_TABLE_FORMAT", 0x80D8},
+    {"GL_COLOR_TABLE_FORMAT_SGI", 0x80D8},
+    {"GL_COLOR_TABLE_WIDTH", 0x80D9},
+    {"GL_COLOR_TABLE_WIDTH_SGI", 0x80D9},
+    {"GL_COLOR_TABLE_RED_SIZE", 0x80DA},
+    {"GL_COLOR_TABLE_RED_SIZE_SGI", 0x80DA},
+    {"GL_COLOR_TABLE_GREEN_SIZE", 0x80DB},
+    {"GL_COLOR_TABLE_GREEN_SIZE_SGI", 0x80DB},
+    {"GL_COLOR_TABLE_BLUE_SIZE", 0x80DC},
+    {"GL_COLOR_TABLE_BLUE_SIZE_SGI", 0x80DC},
+    {"GL_COLOR_TABLE_ALPHA_SIZE", 0x80DD},
+    {"GL_COLOR_TABLE_ALPHA_SIZE_SGI", 0x80DD},
+    {"GL_COLOR_TABLE_LUMINANCE_SIZE", 0x80DE},
+    {"GL_COLOR_TABLE_LUMINANCE_SIZE_SGI", 0x80DE},
+    {"GL_COLOR_TABLE_INTENSITY_SIZE", 0x80DF},
+    {"GL_COLOR_TABLE_INTENSITY_SIZE_SGI", 0x80DF},
+    {"GL_BGR", 0x80E0},
+    {"GL_BGR_EXT", 0x80E0},
+    {"GL_BGRA", 0x80E1},
+    {"GL_BGRA_EXT", 0x80E1},
+    {"GL_COLOR_INDEX1_EXT", 0x80E2},
+    {"GL_COLOR_INDEX2_EXT", 0x80E3},
+    {"GL_COLOR_INDEX4_EXT", 0x80E4},
+    {"GL_COLOR_INDEX8_EXT", 0x80E5},
+    {"GL_COLOR_INDEX12_EXT", 0x80E6},
+    {"GL_COLOR_INDEX16_EXT", 0x80E7},
+    {"GL_MAX_ELEMENTS_VERTICES", 0x80E8},
+    {"GL_MAX_ELEMENTS_VERTICES_EXT", 0x80E8},
+    {"GL_MAX_ELEMENTS_INDICES", 0x80E9},
+    {"GL_MAX_ELEMENTS_INDICES_EXT", 0x80E9},
+    {"GL_PHONG_WIN", 0x80EA},
+    {"GL_PHONG_HINT_WIN", 0x80EB},
+    {"GL_FOG_SPECULAR_TEXTURE_WIN", 0x80EC},
+    {"GL_TEXTURE_INDEX_SIZE_EXT", 0x80ED},
+    {"GL_PARAMETER_BUFFER_ARB", 0x80EE},
+    {"GL_PARAMETER_BUFFER_BINDING_ARB", 0x80EF},
+    {"GL_CLIP_VOLUME_CLIPPING_HINT_EXT", 0x80F0},
+    {"GL_DUAL_ALPHA4_SGIS", 0x8110},
+    {"GL_DUAL_ALPHA8_SGIS", 0x8111},
+    {"GL_DUAL_ALPHA12_SGIS", 0x8112},
+    {"GL_DUAL_ALPHA16_SGIS", 0x8113},
+    {"GL_DUAL_LUMINANCE4_SGIS", 0x8114},
+    {"GL_DUAL_LUMINANCE8_SGIS", 0x8115},
+    {"GL_DUAL_LUMINANCE12_SGIS", 0x8116},
+    {"GL_DUAL_LUMINANCE16_SGIS", 0x8117},
+    {"GL_DUAL_INTENSITY4_SGIS", 0x8118},
+    {"GL_DUAL_INTENSITY8_SGIS", 0x8119},
+    {"GL_DUAL_INTENSITY12_SGIS", 0x811A},
+    {"GL_DUAL_INTENSITY16_SGIS", 0x811B},
+    {"GL_DUAL_LUMINANCE_ALPHA4_SGIS", 0x811C},
+    {"GL_DUAL_LUMINANCE_ALPHA8_SGIS", 0x811D},
+    {"GL_QUAD_ALPHA4_SGIS", 0x811E},
+    {"GL_QUAD_ALPHA8_SGIS", 0x811F},
+    {"GL_QUAD_LUMINANCE4_SGIS", 0x8120},
+    {"GL_QUAD_LUMINANCE8_SGIS", 0x8121},
+    {"GL_QUAD_INTENSITY4_SGIS", 0x8122},
+    {"GL_QUAD_INTENSITY8_SGIS", 0x8123},
+    {"GL_DUAL_TEXTURE_SELECT_SGIS", 0x8124},
+    {"GL_QUAD_TEXTURE_SELECT_SGIS", 0x8125},
+    {"GL_POINT_SIZE_MIN", 0x8126},
+    {"GL_POINT_SIZE_MIN_ARB", 0x8126},
+    {"GL_POINT_SIZE_MIN_EXT", 0x8126},
+    {"GL_POINT_SIZE_MIN_SGIS", 0x8126},
+    {"GL_POINT_SIZE_MAX", 0x8127},
+    {"GL_POINT_SIZE_MAX_ARB", 0x8127},
+    {"GL_POINT_SIZE_MAX_EXT", 0x8127},
+    {"GL_POINT_SIZE_MAX_SGIS", 0x8127},
+    {"GL_POINT_FADE_THRESHOLD_SIZE", 0x8128},
+    {"GL_POINT_FADE_THRESHOLD_SIZE_ARB", 0x8128},
+    {"GL_POINT_FADE_THRESHOLD_SIZE_EXT", 0x8128},
+    {"GL_POINT_FADE_THRESHOLD_SIZE_SGIS", 0x8128},
+    {"GL_DISTANCE_ATTENUATION_EXT", 0x8129},
+    {"GL_DISTANCE_ATTENUATION_SGIS", 0x8129},
+    {"GL_POINT_DISTANCE_ATTENUATION", 0x8129},
+    {"GL_POINT_DISTANCE_ATTENUATION_ARB", 0x8129},
+    {"GL_FOG_FUNC_SGIS", 0x812A},
+    {"GL_FOG_FUNC_POINTS_SGIS", 0x812B},
+    {"GL_MAX_FOG_FUNC_POINTS_SGIS", 0x812C},
+    {"GL_CLAMP_TO_BORDER", 0x812D},
+    {"GL_CLAMP_TO_BORDER_ARB", 0x812D},
+    {"GL_CLAMP_TO_BORDER_NV", 0x812D},
+    {"GL_CLAMP_TO_BORDER_SGIS", 0x812D},
+    {"GL_TEXTURE_MULTI_BUFFER_HINT_SGIX", 0x812E},
+    {"GL_CLAMP_TO_EDGE", 0x812F},
+    {"GL_CLAMP_TO_EDGE_SGIS", 0x812F},
+    {"GL_PACK_SKIP_VOLUMES_SGIS", 0x8130},
+    {"GL_PACK_IMAGE_DEPTH_SGIS", 0x8131},
+    {"GL_UNPACK_SKIP_VOLUMES_SGIS", 0x8132},
+    {"GL_UNPACK_IMAGE_DEPTH_SGIS", 0x8133},
+    {"GL_TEXTURE_4D_SGIS", 0x8134},
+    {"GL_PROXY_TEXTURE_4D_SGIS", 0x8135},
+    {"GL_TEXTURE_4DSIZE_SGIS", 0x8136},
+    {"GL_TEXTURE_WRAP_Q_SGIS", 0x8137},
+    {"GL_MAX_4D_TEXTURE_SIZE_SGIS", 0x8138},
+    {"GL_PIXEL_TEX_GEN_SGIX", 0x8139},
+    {"GL_TEXTURE_MIN_LOD", 0x813A},
+    {"GL_TEXTURE_MIN_LOD_SGIS", 0x813A},
+    {"GL_TEXTURE_MAX_LOD", 0x813B},
+    {"GL_TEXTURE_MAX_LOD_SGIS", 0x813B},
+    {"GL_TEXTURE_BASE_LEVEL", 0x813C},
+    {"GL_TEXTURE_BASE_LEVEL_SGIS", 0x813C},
+    {"GL_TEXTURE_MAX_LEVEL", 0x813D},
+    {"GL_TEXTURE_MAX_LEVEL_SGIS", 0x813D},
+    {"GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX", 0x813E},
+    {"GL_PIXEL_TILE_CACHE_INCREMENT_SGIX", 0x813F},
+    {"GL_PIXEL_TILE_WIDTH_SGIX", 0x8140},
+    {"GL_PIXEL_TILE_HEIGHT_SGIX", 0x8141},
+    {"GL_PIXEL_TILE_GRID_WIDTH_SGIX", 0x8142},
+    {"GL_PIXEL_TILE_GRID_HEIGHT_SGIX", 0x8143},
+    {"GL_PIXEL_TILE_GRID_DEPTH_SGIX", 0x8144},
+    {"GL_PIXEL_TILE_CACHE_SIZE_SGIX", 0x8145},
+    {"GL_FILTER4_SGIS", 0x8146},
+    {"GL_TEXTURE_FILTER4_SIZE_SGIS", 0x8147},
+    {"GL_SPRITE_SGIX", 0x8148},
+    {"GL_SPRITE_MODE_SGIX", 0x8149},
+    {"GL_SPRITE_AXIS_SGIX", 0x814A},
+    {"GL_SPRITE_TRANSLATION_SGIX", 0x814B},
+    {"GL_SPRITE_AXIAL_SGIX", 0x814C},
+    {"GL_SPRITE_OBJECT_ALIGNED_SGIX", 0x814D},
+    {"GL_SPRITE_EYE_ALIGNED_SGIX", 0x814E},
+    {"GL_TEXTURE_4D_BINDING_SGIS", 0x814F},
+    {"GL_IGNORE_BORDER_HP", 0x8150},
+    {"GL_CONSTANT_BORDER", 0x8151},
+    {"GL_CONSTANT_BORDER_HP", 0x8151},
+    {"GL_REPLICATE_BORDER", 0x8153},
+    {"GL_REPLICATE_BORDER_HP", 0x8153},
+    {"GL_CONVOLUTION_BORDER_COLOR", 0x8154},
+    {"GL_CONVOLUTION_BORDER_COLOR_HP", 0x8154},
+    {"GL_IMAGE_SCALE_X_HP", 0x8155},
+    {"GL_IMAGE_SCALE_Y_HP", 0x8156},
+    {"GL_IMAGE_TRANSLATE_X_HP", 0x8157},
+    {"GL_IMAGE_TRANSLATE_Y_HP", 0x8158},
+    {"GL_IMAGE_ROTATE_ANGLE_HP", 0x8159},
+    {"GL_IMAGE_ROTATE_ORIGIN_X_HP", 0x815A},
+    {"GL_IMAGE_ROTATE_ORIGIN_Y_HP", 0x815B},
+    {"GL_IMAGE_MAG_FILTER_HP", 0x815C},
+    {"GL_IMAGE_MIN_FILTER_HP", 0x815D},
+    {"GL_IMAGE_CUBIC_WEIGHT_HP", 0x815E},
+    {"GL_CUBIC_HP", 0x815F},
+    {"GL_AVERAGE_HP", 0x8160},
+    {"GL_IMAGE_TRANSFORM_2D_HP", 0x8161},
+    {"GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP", 0x8162},
+    {"GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP", 0x8163},
+    {"GL_OCCLUSION_TEST_HP", 0x8165},
+    {"GL_OCCLUSION_TEST_RESULT_HP", 0x8166},
+    {"GL_TEXTURE_LIGHTING_MODE_HP", 0x8167},
+    {"GL_TEXTURE_POST_SPECULAR_HP", 0x8168},
+    {"GL_TEXTURE_PRE_SPECULAR_HP", 0x8169},
+    {"GL_LINEAR_CLIPMAP_LINEAR_SGIX", 0x8170},
+    {"GL_TEXTURE_CLIPMAP_CENTER_SGIX", 0x8171},
+    {"GL_TEXTURE_CLIPMAP_FRAME_SGIX", 0x8172},
+    {"GL_TEXTURE_CLIPMAP_OFFSET_SGIX", 0x8173},
+    {"GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX", 0x8174},
+    {"GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX", 0x8175},
+    {"GL_TEXTURE_CLIPMAP_DEPTH_SGIX", 0x8176},
+    {"GL_MAX_CLIPMAP_DEPTH_SGIX", 0x8177},
+    {"GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX", 0x8178},
+    {"GL_POST_TEXTURE_FILTER_BIAS_SGIX", 0x8179},
+    {"GL_POST_TEXTURE_FILTER_SCALE_SGIX", 0x817A},
+    {"GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX", 0x817B},
+    {"GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX", 0x817C},
+    {"GL_REFERENCE_PLANE_SGIX", 0x817D},
+    {"GL_REFERENCE_PLANE_EQUATION_SGIX", 0x817E},
+    {"GL_IR_INSTRUMENT1_SGIX", 0x817F},
+    {"GL_INSTRUMENT_BUFFER_POINTER_SGIX", 0x8180},
+    {"GL_INSTRUMENT_MEASUREMENTS_SGIX", 0x8181},
+    {"GL_LIST_PRIORITY_SGIX", 0x8182},
+    {"GL_CALLIGRAPHIC_FRAGMENT_SGIX", 0x8183},
+    {"GL_PIXEL_TEX_GEN_Q_CEILING_SGIX", 0x8184},
+    {"GL_PIXEL_TEX_GEN_Q_ROUND_SGIX", 0x8185},
+    {"GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX", 0x8186},
+    {"GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX", 0x8187},
+    {"GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX", 0x8188},
+    {"GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX", 0x8189},
+    {"GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX", 0x818A},
+    {"GL_FRAMEZOOM_SGIX", 0x818B},
+    {"GL_FRAMEZOOM_FACTOR_SGIX", 0x818C},
+    {"GL_MAX_FRAMEZOOM_FACTOR_SGIX", 0x818D},
+    {"GL_TEXTURE_LOD_BIAS_S_SGIX", 0x818E},
+    {"GL_TEXTURE_LOD_BIAS_T_SGIX", 0x818F},
+    {"GL_TEXTURE_LOD_BIAS_R_SGIX", 0x8190},
+    {"GL_GENERATE_MIPMAP", 0x8191},
+    {"GL_GENERATE_MIPMAP_SGIS", 0x8191},
+    {"GL_GENERATE_MIPMAP_HINT", 0x8192},
+    {"GL_GENERATE_MIPMAP_HINT_SGIS", 0x8192},
+    {"GL_GEOMETRY_DEFORMATION_SGIX", 0x8194},
+    {"GL_TEXTURE_DEFORMATION_SGIX", 0x8195},
+    {"GL_DEFORMATIONS_MASK_SGIX", 0x8196},
+    {"GL_MAX_DEFORMATION_ORDER_SGIX", 0x8197},
+    {"GL_FOG_OFFSET_SGIX", 0x8198},
+    {"GL_FOG_OFFSET_VALUE_SGIX", 0x8199},
+    {"GL_TEXTURE_COMPARE_SGIX", 0x819A},
+    {"GL_TEXTURE_COMPARE_OPERATOR_SGIX", 0x819B},
+    {"GL_TEXTURE_LEQUAL_R_SGIX", 0x819C},
+    {"GL_TEXTURE_GEQUAL_R_SGIX", 0x819D},
+    {"GL_DEPTH_COMPONENT16", 0x81A5},
+    {"GL_DEPTH_COMPONENT16_ARB", 0x81A5},
+    {"GL_DEPTH_COMPONENT16_OES", 0x81A5},
+    {"GL_DEPTH_COMPONENT16_SGIX", 0x81A5},
+    {"GL_DEPTH_COMPONENT24", 0x81A6},
+    {"GL_DEPTH_COMPONENT24_ARB", 0x81A6},
+    {"GL_DEPTH_COMPONENT24_OES", 0x81A6},
+    {"GL_DEPTH_COMPONENT24_SGIX", 0x81A6},
+    {"GL_DEPTH_COMPONENT32", 0x81A7},
+    {"GL_DEPTH_COMPONENT32_ARB", 0x81A7},
+    {"GL_DEPTH_COMPONENT32_OES", 0x81A7},
+    {"GL_DEPTH_COMPONENT32_SGIX", 0x81A7},
+    {"GL_ARRAY_ELEMENT_LOCK_FIRST_EXT", 0x81A8},
+    {"GL_ARRAY_ELEMENT_LOCK_COUNT_EXT", 0x81A9},
+    {"GL_CULL_VERTEX_EXT", 0x81AA},
+    {"GL_CULL_VERTEX_EYE_POSITION_EXT", 0x81AB},
+    {"GL_CULL_VERTEX_OBJECT_POSITION_EXT", 0x81AC},
+    {"GL_IUI_V2F_EXT", 0x81AD},
+    {"GL_IUI_V3F_EXT", 0x81AE},
+    {"GL_IUI_N3F_V2F_EXT", 0x81AF},
+    {"GL_IUI_N3F_V3F_EXT", 0x81B0},
+    {"GL_T2F_IUI_V2F_EXT", 0x81B1},
+    {"GL_T2F_IUI_V3F_EXT", 0x81B2},
+    {"GL_T2F_IUI_N3F_V2F_EXT", 0x81B3},
+    {"GL_T2F_IUI_N3F_V3F_EXT", 0x81B4},
+    {"GL_INDEX_TEST_EXT", 0x81B5},
+    {"GL_INDEX_TEST_FUNC_EXT", 0x81B6},
+    {"GL_INDEX_TEST_REF_EXT", 0x81B7},
+    {"GL_INDEX_MATERIAL_EXT", 0x81B8},
+    {"GL_INDEX_MATERIAL_PARAMETER_EXT", 0x81B9},
+    {"GL_INDEX_MATERIAL_FACE_EXT", 0x81BA},
+    {"GL_YCRCB_422_SGIX", 0x81BB},
+    {"GL_YCRCB_444_SGIX", 0x81BC},
+    {"GL_WRAP_BORDER_SUN", 0x81D4},
+    {"GL_UNPACK_CONSTANT_DATA_SUNX", 0x81D5},
+    {"GL_TEXTURE_CONSTANT_DATA_SUNX", 0x81D6},
+    {"GL_TRIANGLE_LIST_SUN", 0x81D7},
+    {"GL_REPLACEMENT_CODE_SUN", 0x81D8},
+    {"GL_GLOBAL_ALPHA_SUN", 0x81D9},
+    {"GL_GLOBAL_ALPHA_FACTOR_SUN", 0x81DA},
+    {"GL_TEXTURE_COLOR_WRITEMASK_SGIS", 0x81EF},
+    {"GL_EYE_DISTANCE_TO_POINT_SGIS", 0x81F0},
+    {"GL_OBJECT_DISTANCE_TO_POINT_SGIS", 0x81F1},
+    {"GL_EYE_DISTANCE_TO_LINE_SGIS", 0x81F2},
+    {"GL_OBJECT_DISTANCE_TO_LINE_SGIS", 0x81F3},
+    {"GL_EYE_POINT_SGIS", 0x81F4},
+    {"GL_OBJECT_POINT_SGIS", 0x81F5},
+    {"GL_EYE_LINE_SGIS", 0x81F6},
+    {"GL_OBJECT_LINE_SGIS", 0x81F7},
+    {"GL_LIGHT_MODEL_COLOR_CONTROL", 0x81F8},
+    {"GL_LIGHT_MODEL_COLOR_CONTROL_EXT", 0x81F8},
+    {"GL_SINGLE_COLOR", 0x81F9},
+    {"GL_SINGLE_COLOR_EXT", 0x81F9},
+    {"GL_SEPARATE_SPECULAR_COLOR", 0x81FA},
+    {"GL_SEPARATE_SPECULAR_COLOR_EXT", 0x81FA},
+    {"GL_SHARED_TEXTURE_PALETTE_EXT", 0x81FB},
+    {"GL_TEXT_FRAGMENT_SHADER_ATI", 0x8200},
+    {"GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING", 0x8210},
+    {"GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE", 0x8211},
+    {"GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT", 0x8211},
+    {"GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE", 0x8212},
+    {"GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE", 0x8213},
+    {"GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE", 0x8214},
+    {"GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE", 0x8215},
+    {"GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE", 0x8216},
+    {"GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE", 0x8217},
+    {"GL_FRAMEBUFFER_DEFAULT", 0x8218},
+    {"GL_FRAMEBUFFER_UNDEFINED", 0x8219},
+    {"GL_FRAMEBUFFER_UNDEFINED_OES", 0x8219},
+    {"GL_DEPTH_STENCIL_ATTACHMENT", 0x821A},
+    {"GL_MAJOR_VERSION", 0x821B},
+    {"GL_MINOR_VERSION", 0x821C},
+    {"GL_NUM_EXTENSIONS", 0x821D},
+    {"GL_CONTEXT_FLAGS", 0x821E},
+    {"GL_BUFFER_IMMUTABLE_STORAGE", 0x821F},
+    {"GL_BUFFER_STORAGE_FLAGS", 0x8220},
+    {"GL_INDEX", 0x8222},
+    {"GL_COMPRESSED_RED", 0x8225},
+    {"GL_COMPRESSED_RG", 0x8226},
+    {"GL_RG", 0x8227},
+    {"GL_RG_EXT", 0x8227},
+    {"GL_RG_INTEGER", 0x8228},
+    {"GL_R8", 0x8229},
+    {"GL_R8_EXT", 0x8229},
+    {"GL_R16", 0x822A},
+    {"GL_RG8", 0x822B},
+    {"GL_RG8_EXT", 0x822B},
+    {"GL_RG16", 0x822C},
+    {"GL_R16F", 0x822D},
+    {"GL_R16F_EXT", 0x822D},
+    {"GL_R32F", 0x822E},
+    {"GL_RG16F", 0x822F},
+    {"GL_RG16F_EXT", 0x822F},
+    {"GL_RG32F", 0x8230},
+    {"GL_R8I", 0x8231},
+    {"GL_R8UI", 0x8232},
+    {"GL_R16I", 0x8233},
+    {"GL_R16UI", 0x8234},
+    {"GL_R32I", 0x8235},
+    {"GL_R32UI", 0x8236},
+    {"GL_RG8I", 0x8237},
+    {"GL_RG8UI", 0x8238},
+    {"GL_RG16I", 0x8239},
+    {"GL_RG16UI", 0x823A},
+    {"GL_RG32I", 0x823B},
+    {"GL_RG32UI", 0x823C},
+    {"GL_SYNC_CL_EVENT_ARB", 0x8240},
+    {"GL_SYNC_CL_EVENT_COMPLETE_ARB", 0x8241},
+    {"GL_DEBUG_OUTPUT_SYNCHRONOUS", 0x8242},
+    {"GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB", 0x8242},
+    {"GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR", 0x8242},
+    {"GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH", 0x8243},
+    {"GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB", 0x8243},
+    {"GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR", 0x8243},
+    {"GL_DEBUG_CALLBACK_FUNCTION", 0x8244},
+    {"GL_DEBUG_CALLBACK_FUNCTION_ARB", 0x8244},
+    {"GL_DEBUG_CALLBACK_FUNCTION_KHR", 0x8244},
+    {"GL_DEBUG_CALLBACK_USER_PARAM", 0x8245},
+    {"GL_DEBUG_CALLBACK_USER_PARAM_ARB", 0x8245},
+    {"GL_DEBUG_CALLBACK_USER_PARAM_KHR", 0x8245},
+    {"GL_DEBUG_SOURCE_API", 0x8246},
+    {"GL_DEBUG_SOURCE_API_ARB", 0x8246},
+    {"GL_DEBUG_SOURCE_API_KHR", 0x8246},
+    {"GL_DEBUG_SOURCE_WINDOW_SYSTEM", 0x8247},
+    {"GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB", 0x8247},
+    {"GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR", 0x8247},
+    {"GL_DEBUG_SOURCE_SHADER_COMPILER", 0x8248},
+    {"GL_DEBUG_SOURCE_SHADER_COMPILER_ARB", 0x8248},
+    {"GL_DEBUG_SOURCE_SHADER_COMPILER_KHR", 0x8248},
+    {"GL_DEBUG_SOURCE_THIRD_PARTY", 0x8249},
+    {"GL_DEBUG_SOURCE_THIRD_PARTY_ARB", 0x8249},
+    {"GL_DEBUG_SOURCE_THIRD_PARTY_KHR", 0x8249},
+    {"GL_DEBUG_SOURCE_APPLICATION", 0x824A},
+    {"GL_DEBUG_SOURCE_APPLICATION_ARB", 0x824A},
+    {"GL_DEBUG_SOURCE_APPLICATION_KHR", 0x824A},
+    {"GL_DEBUG_SOURCE_OTHER", 0x824B},
+    {"GL_DEBUG_SOURCE_OTHER_ARB", 0x824B},
+    {"GL_DEBUG_SOURCE_OTHER_KHR", 0x824B},
+    {"GL_DEBUG_TYPE_ERROR", 0x824C},
+    {"GL_DEBUG_TYPE_ERROR_ARB", 0x824C},
+    {"GL_DEBUG_TYPE_ERROR_KHR", 0x824C},
+    {"GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR", 0x824D},
+    {"GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB", 0x824D},
+    {"GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR", 0x824D},
+    {"GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR", 0x824E},
+    {"GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB", 0x824E},
+    {"GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR", 0x824E},
+    {"GL_DEBUG_TYPE_PORTABILITY", 0x824F},
+    {"GL_DEBUG_TYPE_PORTABILITY_ARB", 0x824F},
+    {"GL_DEBUG_TYPE_PORTABILITY_KHR", 0x824F},
+    {"GL_DEBUG_TYPE_PERFORMANCE", 0x8250},
+    {"GL_DEBUG_TYPE_PERFORMANCE_ARB", 0x8250},
+    {"GL_DEBUG_TYPE_PERFORMANCE_KHR", 0x8250},
+    {"GL_DEBUG_TYPE_OTHER", 0x8251},
+    {"GL_DEBUG_TYPE_OTHER_ARB", 0x8251},
+    {"GL_DEBUG_TYPE_OTHER_KHR", 0x8251},
+    {"GL_LOSE_CONTEXT_ON_RESET_ARB", 0x8252},
+    {"GL_GUILTY_CONTEXT_RESET_ARB", 0x8253},
+    {"GL_INNOCENT_CONTEXT_RESET_ARB", 0x8254},
+    {"GL_UNKNOWN_CONTEXT_RESET_ARB", 0x8255},
+    {"GL_RESET_NOTIFICATION_STRATEGY_ARB", 0x8256},
+    {"GL_PROGRAM_BINARY_RETRIEVABLE_HINT", 0x8257},
+    {"GL_PROGRAM_SEPARABLE", 0x8258},
+    {"GL_PROGRAM_SEPARABLE_EXT", 0x8258},
+    {"GL_ACTIVE_PROGRAM", 0x8259},
+    {"GL_ACTIVE_PROGRAM_EXT", 0x8259},
+    {"GL_PROGRAM_PIPELINE_BINDING", 0x825A},
+    {"GL_PROGRAM_PIPELINE_BINDING_EXT", 0x825A},
+    {"GL_MAX_VIEWPORTS", 0x825B},
+    {"GL_VIEWPORT_SUBPIXEL_BITS", 0x825C},
+    {"GL_VIEWPORT_BOUNDS_RANGE", 0x825D},
+    {"GL_LAYER_PROVOKING_VERTEX", 0x825E},
+    {"GL_VIEWPORT_INDEX_PROVOKING_VERTEX", 0x825F},
+    {"GL_UNDEFINED_VERTEX", 0x8260},
+    {"GL_NO_RESET_NOTIFICATION_ARB", 0x8261},
+    {"GL_MAX_COMPUTE_SHARED_MEMORY_SIZE", 0x8262},
+    {"GL_MAX_COMPUTE_UNIFORM_COMPONENTS", 0x8263},
+    {"GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS", 0x8264},
+    {"GL_MAX_COMPUTE_ATOMIC_COUNTERS", 0x8265},
+    {"GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS", 0x8266},
+    {"GL_COMPUTE_LOCAL_WORK_SIZE", 0x8267},
+    {"GL_DEBUG_TYPE_MARKER", 0x8268},
+    {"GL_DEBUG_TYPE_MARKER_KHR", 0x8268},
+    {"GL_DEBUG_TYPE_PUSH_GROUP", 0x8269},
+    {"GL_DEBUG_TYPE_PUSH_GROUP_KHR", 0x8269},
+    {"GL_DEBUG_TYPE_POP_GROUP", 0x826A},
+    {"GL_DEBUG_TYPE_POP_GROUP_KHR", 0x826A},
+    {"GL_DEBUG_SEVERITY_NOTIFICATION", 0x826B},
+    {"GL_DEBUG_SEVERITY_NOTIFICATION_KHR", 0x826B},
+    {"GL_MAX_DEBUG_GROUP_STACK_DEPTH", 0x826C},
+    {"GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR", 0x826C},
+    {"GL_DEBUG_GROUP_STACK_DEPTH", 0x826D},
+    {"GL_DEBUG_GROUP_STACK_DEPTH_KHR", 0x826D},
+    {"GL_MAX_UNIFORM_LOCATIONS", 0x826E},
+    {"GL_INTERNALFORMAT_SUPPORTED", 0x826F},
+    {"GL_INTERNALFORMAT_PREFERRED", 0x8270},
+    {"GL_INTERNALFORMAT_RED_SIZE", 0x8271},
+    {"GL_INTERNALFORMAT_GREEN_SIZE", 0x8272},
+    {"GL_INTERNALFORMAT_BLUE_SIZE", 0x8273},
+    {"GL_INTERNALFORMAT_ALPHA_SIZE", 0x8274},
+    {"GL_INTERNALFORMAT_DEPTH_SIZE", 0x8275},
+    {"GL_INTERNALFORMAT_STENCIL_SIZE", 0x8276},
+    {"GL_INTERNALFORMAT_SHARED_SIZE", 0x8277},
+    {"GL_INTERNALFORMAT_RED_TYPE", 0x8278},
+    {"GL_INTERNALFORMAT_GREEN_TYPE", 0x8279},
+    {"GL_INTERNALFORMAT_BLUE_TYPE", 0x827A},
+    {"GL_INTERNALFORMAT_ALPHA_TYPE", 0x827B},
+    {"GL_INTERNALFORMAT_DEPTH_TYPE", 0x827C},
+    {"GL_INTERNALFORMAT_STENCIL_TYPE", 0x827D},
+    {"GL_MAX_WIDTH", 0x827E},
+    {"GL_MAX_HEIGHT", 0x827F},
+    {"GL_MAX_DEPTH", 0x8280},
+    {"GL_MAX_LAYERS", 0x8281},
+    {"GL_MAX_COMBINED_DIMENSIONS", 0x8282},
+    {"GL_COLOR_COMPONENTS", 0x8283},
+    {"GL_DEPTH_COMPONENTS", 0x8284},
+    {"GL_STENCIL_COMPONENTS", 0x8285},
+    {"GL_COLOR_RENDERABLE", 0x8286},
+    {"GL_DEPTH_RENDERABLE", 0x8287},
+    {"GL_STENCIL_RENDERABLE", 0x8288},
+    {"GL_FRAMEBUFFER_RENDERABLE", 0x8289},
+    {"GL_FRAMEBUFFER_RENDERABLE_LAYERED", 0x828A},
+    {"GL_FRAMEBUFFER_BLEND", 0x828B},
+    {"GL_READ_PIXELS", 0x828C},
+    {"GL_READ_PIXELS_FORMAT", 0x828D},
+    {"GL_READ_PIXELS_TYPE", 0x828E},
+    {"GL_TEXTURE_IMAGE_FORMAT", 0x828F},
+    {"GL_TEXTURE_IMAGE_TYPE", 0x8290},
+    {"GL_GET_TEXTURE_IMAGE_FORMAT", 0x8291},
+    {"GL_GET_TEXTURE_IMAGE_TYPE", 0x8292},
+    {"GL_MIPMAP", 0x8293},
+    {"GL_MANUAL_GENERATE_MIPMAP", 0x8294},
+    {"GL_AUTO_GENERATE_MIPMAP", 0x8295},
+    {"GL_COLOR_ENCODING", 0x8296},
+    {"GL_SRGB_READ", 0x8297},
+    {"GL_SRGB_WRITE", 0x8298},
+    {"GL_SRGB_DECODE_ARB", 0x8299},
+    {"GL_FILTER", 0x829A},
+    {"GL_VERTEX_TEXTURE", 0x829B},
+    {"GL_TESS_CONTROL_TEXTURE", 0x829C},
+    {"GL_TESS_EVALUATION_TEXTURE", 0x829D},
+    {"GL_GEOMETRY_TEXTURE", 0x829E},
+    {"GL_FRAGMENT_TEXTURE", 0x829F},
+    {"GL_COMPUTE_TEXTURE", 0x82A0},
+    {"GL_TEXTURE_SHADOW", 0x82A1},
+    {"GL_TEXTURE_GATHER", 0x82A2},
+    {"GL_TEXTURE_GATHER_SHADOW", 0x82A3},
+    {"GL_SHADER_IMAGE_LOAD", 0x82A4},
+    {"GL_SHADER_IMAGE_STORE", 0x82A5},
+    {"GL_SHADER_IMAGE_ATOMIC", 0x82A6},
+    {"GL_IMAGE_TEXEL_SIZE", 0x82A7},
+    {"GL_IMAGE_COMPATIBILITY_CLASS", 0x82A8},
+    {"GL_IMAGE_PIXEL_FORMAT", 0x82A9},
+    {"GL_IMAGE_PIXEL_TYPE", 0x82AA},
+    {"GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST", 0x82AC},
+    {"GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST", 0x82AD},
+    {"GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE", 0x82AE},
+    {"GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE", 0x82AF},
+    {"GL_TEXTURE_COMPRESSED_BLOCK_WIDTH", 0x82B1},
+    {"GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT", 0x82B2},
+    {"GL_TEXTURE_COMPRESSED_BLOCK_SIZE", 0x82B3},
+    {"GL_CLEAR_BUFFER", 0x82B4},
+    {"GL_TEXTURE_VIEW", 0x82B5},
+    {"GL_VIEW_COMPATIBILITY_CLASS", 0x82B6},
+    {"GL_FULL_SUPPORT", 0x82B7},
+    {"GL_CAVEAT_SUPPORT", 0x82B8},
+    {"GL_IMAGE_CLASS_4_X_32", 0x82B9},
+    {"GL_IMAGE_CLASS_2_X_32", 0x82BA},
+    {"GL_IMAGE_CLASS_1_X_32", 0x82BB},
+    {"GL_IMAGE_CLASS_4_X_16", 0x82BC},
+    {"GL_IMAGE_CLASS_2_X_16", 0x82BD},
+    {"GL_IMAGE_CLASS_1_X_16", 0x82BE},
+    {"GL_IMAGE_CLASS_4_X_8", 0x82BF},
+    {"GL_IMAGE_CLASS_2_X_8", 0x82C0},
+    {"GL_IMAGE_CLASS_1_X_8", 0x82C1},
+    {"GL_IMAGE_CLASS_11_11_10", 0x82C2},
+    {"GL_IMAGE_CLASS_10_10_10_2", 0x82C3},
+    {"GL_VIEW_CLASS_128_BITS", 0x82C4},
+    {"GL_VIEW_CLASS_96_BITS", 0x82C5},
+    {"GL_VIEW_CLASS_64_BITS", 0x82C6},
+    {"GL_VIEW_CLASS_48_BITS", 0x82C7},
+    {"GL_VIEW_CLASS_32_BITS", 0x82C8},
+    {"GL_VIEW_CLASS_24_BITS", 0x82C9},
+    {"GL_VIEW_CLASS_16_BITS", 0x82CA},
+    {"GL_VIEW_CLASS_8_BITS", 0x82CB},
+    {"GL_VIEW_CLASS_S3TC_DXT1_RGB", 0x82CC},
+    {"GL_VIEW_CLASS_S3TC_DXT1_RGBA", 0x82CD},
+    {"GL_VIEW_CLASS_S3TC_DXT3_RGBA", 0x82CE},
+    {"GL_VIEW_CLASS_S3TC_DXT5_RGBA", 0x82CF},
+    {"GL_VIEW_CLASS_RGTC1_RED", 0x82D0},
+    {"GL_VIEW_CLASS_RGTC2_RG", 0x82D1},
+    {"GL_VIEW_CLASS_BPTC_UNORM", 0x82D2},
+    {"GL_VIEW_CLASS_BPTC_FLOAT", 0x82D3},
+    {"GL_VERTEX_ATTRIB_BINDING", 0x82D4},
+    {"GL_VERTEX_ATTRIB_RELATIVE_OFFSET", 0x82D5},
+    {"GL_VERTEX_BINDING_DIVISOR", 0x82D6},
+    {"GL_VERTEX_BINDING_OFFSET", 0x82D7},
+    {"GL_VERTEX_BINDING_STRIDE", 0x82D8},
+    {"GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET", 0x82D9},
+    {"GL_MAX_VERTEX_ATTRIB_BINDINGS", 0x82DA},
+    {"GL_TEXTURE_VIEW_MIN_LEVEL", 0x82DB},
+    {"GL_TEXTURE_VIEW_NUM_LEVELS", 0x82DC},
+    {"GL_TEXTURE_VIEW_MIN_LAYER", 0x82DD},
+    {"GL_TEXTURE_VIEW_NUM_LAYERS", 0x82DE},
+    {"GL_TEXTURE_IMMUTABLE_LEVELS", 0x82DF},
+    {"GL_BUFFER", 0x82E0},
+    {"GL_BUFFER_KHR", 0x82E0},
+    {"GL_SHADER", 0x82E1},
+    {"GL_SHADER_KHR", 0x82E1},
+    {"GL_PROGRAM", 0x82E2},
+    {"GL_PROGRAM_KHR", 0x82E2},
+    {"GL_QUERY", 0x82E3},
+    {"GL_QUERY_KHR", 0x82E3},
+    {"GL_PROGRAM_PIPELINE", 0x82E4},
+    {"GL_MAX_VERTEX_ATTRIB_STRIDE", 0x82E5},
+    {"GL_SAMPLER", 0x82E6},
+    {"GL_SAMPLER_KHR", 0x82E6},
+    {"GL_DISPLAY_LIST", 0x82E7},
+    {"GL_MAX_LABEL_LENGTH", 0x82E8},
+    {"GL_MAX_LABEL_LENGTH_KHR", 0x82E8},
+    {"GL_NUM_SHADING_LANGUAGE_VERSIONS", 0x82E9},
+    {"GL_DEPTH_PASS_INSTRUMENT_SGIX", 0x8310},
+    {"GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX", 0x8311},
+    {"GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX", 0x8312},
+    {"GL_FRAGMENTS_INSTRUMENT_SGIX", 0x8313},
+    {"GL_FRAGMENTS_INSTRUMENT_COUNTERS_SGIX", 0x8314},
+    {"GL_FRAGMENTS_INSTRUMENT_MAX_SGIX", 0x8315},
+    {"GL_CONVOLUTION_HINT_SGIX", 0x8316},
+    {"GL_YCRCB_SGIX", 0x8318},
+    {"GL_YCRCBA_SGIX", 0x8319},
+    {"GL_UNPACK_COMPRESSED_SIZE_SGIX", 0x831A},
+    {"GL_PACK_MAX_COMPRESSED_SIZE_SGIX", 0x831B},
+    {"GL_PACK_COMPRESSED_SIZE_SGIX", 0x831C},
+    {"GL_SLIM8U_SGIX", 0x831D},
+    {"GL_SLIM10U_SGIX", 0x831E},
+    {"GL_SLIM12S_SGIX", 0x831F},
+    {"GL_ALPHA_MIN_SGIX", 0x8320},
+    {"GL_ALPHA_MAX_SGIX", 0x8321},
+    {"GL_SCALEBIAS_HINT_SGIX", 0x8322},
+    {"GL_ASYNC_MARKER_SGIX", 0x8329},
+    {"GL_PIXEL_TEX_GEN_MODE_SGIX", 0x832B},
+    {"GL_ASYNC_HISTOGRAM_SGIX", 0x832C},
+    {"GL_MAX_ASYNC_HISTOGRAM_SGIX", 0x832D},
+    {"GL_PIXEL_TRANSFORM_2D_EXT", 0x8330},
+    {"GL_PIXEL_MAG_FILTER_EXT", 0x8331},
+    {"GL_PIXEL_MIN_FILTER_EXT", 0x8332},
+    {"GL_PIXEL_CUBIC_WEIGHT_EXT", 0x8333},
+    {"GL_CUBIC_EXT", 0x8334},
+    {"GL_AVERAGE_EXT", 0x8335},
+    {"GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT", 0x8336},
+    {"GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT", 0x8337},
+    {"GL_PIXEL_TRANSFORM_2D_MATRIX_EXT", 0x8338},
+    {"GL_FRAGMENT_MATERIAL_EXT", 0x8349},
+    {"GL_FRAGMENT_NORMAL_EXT", 0x834A},
+    {"GL_FRAGMENT_COLOR_EXT", 0x834C},
+    {"GL_ATTENUATION_EXT", 0x834D},
+    {"GL_SHADOW_ATTENUATION_EXT", 0x834E},
+    {"GL_TEXTURE_APPLICATION_MODE_EXT", 0x834F},
+    {"GL_TEXTURE_LIGHT_EXT", 0x8350},
+    {"GL_TEXTURE_MATERIAL_FACE_EXT", 0x8351},
+    {"GL_TEXTURE_MATERIAL_PARAMETER_EXT", 0x8352},
+    {"GL_PIXEL_TEXTURE_SGIS", 0x8353},
+    {"GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS", 0x8354},
+    {"GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS", 0x8355},
+    {"GL_PIXEL_GROUP_COLOR_SGIS", 0x8356},
+    {"GL_LINE_QUALITY_HINT_SGIX", 0x835B},
+    {"GL_ASYNC_TEX_IMAGE_SGIX", 0x835C},
+    {"GL_ASYNC_DRAW_PIXELS_SGIX", 0x835D},
+    {"GL_ASYNC_READ_PIXELS_SGIX", 0x835E},
+    {"GL_MAX_ASYNC_TEX_IMAGE_SGIX", 0x835F},
+    {"GL_MAX_ASYNC_DRAW_PIXELS_SGIX", 0x8360},
+    {"GL_MAX_ASYNC_READ_PIXELS_SGIX", 0x8361},
+    {"GL_UNSIGNED_BYTE_2_3_3_REV", 0x8362},
+    {"GL_UNSIGNED_BYTE_2_3_3_REV_EXT", 0x8362},
+    {"GL_UNSIGNED_SHORT_5_6_5", 0x8363},
+    {"GL_UNSIGNED_SHORT_5_6_5_EXT", 0x8363},
+    {"GL_UNSIGNED_SHORT_5_6_5_REV", 0x8364},
+    {"GL_UNSIGNED_SHORT_5_6_5_REV_EXT", 0x8364},
+    {"GL_UNSIGNED_SHORT_4_4_4_4_REV", 0x8365},
+    {"GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT", 0x8365},
+    {"GL_UNSIGNED_SHORT_1_5_5_5_REV", 0x8366},
+    {"GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT", 0x8366},
+    {"GL_UNSIGNED_INT_8_8_8_8_REV", 0x8367},
+    {"GL_UNSIGNED_INT_8_8_8_8_REV_EXT", 0x8367},
+    {"GL_UNSIGNED_INT_2_10_10_10_REV", 0x8368},
+    {"GL_UNSIGNED_INT_2_10_10_10_REV_EXT", 0x8368},
+    {"GL_TEXTURE_MAX_CLAMP_S_SGIX", 0x8369},
+    {"GL_TEXTURE_MAX_CLAMP_T_SGIX", 0x836A},
+    {"GL_TEXTURE_MAX_CLAMP_R_SGIX", 0x836B},
+    {"GL_MIRRORED_REPEAT", 0x8370},
+    {"GL_MIRRORED_REPEAT_ARB", 0x8370},
+    {"GL_MIRRORED_REPEAT_IBM", 0x8370},
+    {"GL_MIRRORED_REPEAT_OES", 0x8370},
+    {"GL_RGB_S3TC", 0x83A0},
+    {"GL_RGB4_S3TC", 0x83A1},
+    {"GL_RGBA_S3TC", 0x83A2},
+    {"GL_RGBA4_S3TC", 0x83A3},
+    {"GL_RGBA_DXT5_S3TC", 0x83A4},
+    {"GL_RGBA4_DXT5_S3TC", 0x83A5},
+    {"GL_VERTEX_PRECLIP_SGIX", 0x83EE},
+    {"GL_VERTEX_PRECLIP_HINT_SGIX", 0x83EF},
+    {"GL_COMPRESSED_RGB_S3TC_DXT1_EXT", 0x83F0},
+    {"GL_COMPRESSED_RGBA_S3TC_DXT1_EXT", 0x83F1},
+    {"GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE", 0x83F2},
+    {"GL_COMPRESSED_RGBA_S3TC_DXT3_EXT", 0x83F2},
+    {"GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE", 0x83F3},
+    {"GL_COMPRESSED_RGBA_S3TC_DXT5_EXT", 0x83F3},
+    {"GL_PARALLEL_ARRAYS_INTEL", 0x83F4},
+    {"GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL", 0x83F5},
+    {"GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL", 0x83F6},
+    {"GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL", 0x83F7},
+    {"GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL", 0x83F8},
+    {"GL_TEXTURE_MEMORY_LAYOUT_INTEL", 0x83FF},
+    {"GL_FRAGMENT_LIGHTING_SGIX", 0x8400},
+    {"GL_FRAGMENT_COLOR_MATERIAL_SGIX", 0x8401},
+    {"GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX", 0x8402},
+    {"GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX", 0x8403},
+    {"GL_MAX_FRAGMENT_LIGHTS_SGIX", 0x8404},
+    {"GL_MAX_ACTIVE_LIGHTS_SGIX", 0x8405},
+    {"GL_CURRENT_RASTER_NORMAL_SGIX", 0x8406},
+    {"GL_LIGHT_ENV_MODE_SGIX", 0x8407},
+    {"GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX", 0x8408},
+    {"GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX", 0x8409},
+    {"GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX", 0x840A},
+    {"GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX", 0x840B},
+    {"GL_FRAGMENT_LIGHT0_SGIX", 0x840C},
+    {"GL_FRAGMENT_LIGHT1_SGIX", 0x840D},
+    {"GL_FRAGMENT_LIGHT2_SGIX", 0x840E},
+    {"GL_FRAGMENT_LIGHT3_SGIX", 0x840F},
+    {"GL_FRAGMENT_LIGHT4_SGIX", 0x8410},
+    {"GL_FRAGMENT_LIGHT5_SGIX", 0x8411},
+    {"GL_FRAGMENT_LIGHT6_SGIX", 0x8412},
+    {"GL_FRAGMENT_LIGHT7_SGIX", 0x8413},
+    {"GL_PACK_RESAMPLE_SGIX", 0x842C},
+    {"GL_UNPACK_RESAMPLE_SGIX", 0x842D},
+    {"GL_RESAMPLE_REPLICATE_SGIX", 0x842E},
+    {"GL_RESAMPLE_ZERO_FILL_SGIX", 0x842F},
+    {"GL_RESAMPLE_DECIMATE_SGIX", 0x8430},
+    {"GL_TANGENT_ARRAY_EXT", 0x8439},
+    {"GL_BINORMAL_ARRAY_EXT", 0x843A},
+    {"GL_CURRENT_TANGENT_EXT", 0x843B},
+    {"GL_CURRENT_BINORMAL_EXT", 0x843C},
+    {"GL_TANGENT_ARRAY_TYPE_EXT", 0x843E},
+    {"GL_TANGENT_ARRAY_STRIDE_EXT", 0x843F},
+    {"GL_BINORMAL_ARRAY_TYPE_EXT", 0x8440},
+    {"GL_BINORMAL_ARRAY_STRIDE_EXT", 0x8441},
+    {"GL_TANGENT_ARRAY_POINTER_EXT", 0x8442},
+    {"GL_BINORMAL_ARRAY_POINTER_EXT", 0x8443},
+    {"GL_MAP1_TANGENT_EXT", 0x8444},
+    {"GL_MAP2_TANGENT_EXT", 0x8445},
+    {"GL_MAP1_BINORMAL_EXT", 0x8446},
+    {"GL_MAP2_BINORMAL_EXT", 0x8447},
+    {"GL_NEAREST_CLIPMAP_NEAREST_SGIX", 0x844D},
+    {"GL_NEAREST_CLIPMAP_LINEAR_SGIX", 0x844E},
+    {"GL_LINEAR_CLIPMAP_NEAREST_SGIX", 0x844F},
+    {"GL_FOG_COORDINATE_SOURCE", 0x8450},
+    {"GL_FOG_COORDINATE_SOURCE_EXT", 0x8450},
+    {"GL_FOG_COORD_SRC", 0x8450},
+    {"GL_FOG_COORDINATE", 0x8451},
+    {"GL_FOG_COORD", 0x8451},
+    {"GL_FOG_COORDINATE_EXT", 0x8451},
+    {"GL_FRAGMENT_DEPTH", 0x8452},
+    {"GL_FRAGMENT_DEPTH_EXT", 0x8452},
+    {"GL_CURRENT_FOG_COORDINATE", 0x8453},
+    {"GL_CURRENT_FOG_COORD", 0x8453},
+    {"GL_CURRENT_FOG_COORDINATE_EXT", 0x8453},
+    {"GL_FOG_COORDINATE_ARRAY_TYPE", 0x8454},
+    {"GL_FOG_COORDINATE_ARRAY_TYPE_EXT", 0x8454},
+    {"GL_FOG_COORD_ARRAY_TYPE", 0x8454},
+    {"GL_FOG_COORDINATE_ARRAY_STRIDE", 0x8455},
+    {"GL_FOG_COORDINATE_ARRAY_STRIDE_EXT", 0x8455},
+    {"GL_FOG_COORD_ARRAY_STRIDE", 0x8455},
+    {"GL_FOG_COORDINATE_ARRAY_POINTER", 0x8456},
+    {"GL_FOG_COORDINATE_ARRAY_POINTER_EXT", 0x8456},
+    {"GL_FOG_COORD_ARRAY_POINTER", 0x8456},
+    {"GL_FOG_COORDINATE_ARRAY", 0x8457},
+    {"GL_FOG_COORDINATE_ARRAY_EXT", 0x8457},
+    {"GL_FOG_COORD_ARRAY", 0x8457},
+    {"GL_COLOR_SUM", 0x8458},
+    {"GL_COLOR_SUM_ARB", 0x8458},
+    {"GL_COLOR_SUM_EXT", 0x8458},
+    {"GL_CURRENT_SECONDARY_COLOR", 0x8459},
+    {"GL_CURRENT_SECONDARY_COLOR_EXT", 0x8459},
+    {"GL_SECONDARY_COLOR_ARRAY_SIZE", 0x845A},
+    {"GL_SECONDARY_COLOR_ARRAY_SIZE_EXT", 0x845A},
+    {"GL_SECONDARY_COLOR_ARRAY_TYPE", 0x845B},
+    {"GL_SECONDARY_COLOR_ARRAY_TYPE_EXT", 0x845B},
+    {"GL_SECONDARY_COLOR_ARRAY_STRIDE", 0x845C},
+    {"GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT", 0x845C},
+    {"GL_SECONDARY_COLOR_ARRAY_POINTER", 0x845D},
+    {"GL_SECONDARY_COLOR_ARRAY_POINTER_EXT", 0x845D},
+    {"GL_SECONDARY_COLOR_ARRAY", 0x845E},
+    {"GL_SECONDARY_COLOR_ARRAY_EXT", 0x845E},
+    {"GL_CURRENT_RASTER_SECONDARY_COLOR", 0x845F},
+    {"GL_ALIASED_POINT_SIZE_RANGE", 0x846D},
+    {"GL_ALIASED_LINE_WIDTH_RANGE", 0x846E},
+    {"GL_SCREEN_COORDINATES_REND", 0x8490},
+    {"GL_INVERTED_SCREEN_W_REND", 0x8491},
+    {"GL_TEXTURE0", 0x84C0},
+    {"GL_TEXTURE0_ARB", 0x84C0},
+    {"GL_TEXTURE1", 0x84C1},
+    {"GL_TEXTURE1_ARB", 0x84C1},
+    {"GL_TEXTURE2", 0x84C2},
+    {"GL_TEXTURE2_ARB", 0x84C2},
+    {"GL_TEXTURE3", 0x84C3},
+    {"GL_TEXTURE3_ARB", 0x84C3},
+    {"GL_TEXTURE4", 0x84C4},
+    {"GL_TEXTURE4_ARB", 0x84C4},
+    {"GL_TEXTURE5", 0x84C5},
+    {"GL_TEXTURE5_ARB", 0x84C5},
+    {"GL_TEXTURE6", 0x84C6},
+    {"GL_TEXTURE6_ARB", 0x84C6},
+    {"GL_TEXTURE7", 0x84C7},
+    {"GL_TEXTURE7_ARB", 0x84C7},
+    {"GL_TEXTURE8", 0x84C8},
+    {"GL_TEXTURE8_ARB", 0x84C8},
+    {"GL_TEXTURE9", 0x84C9},
+    {"GL_TEXTURE9_ARB", 0x84C9},
+    {"GL_TEXTURE10", 0x84CA},
+    {"GL_TEXTURE10_ARB", 0x84CA},
+    {"GL_TEXTURE11", 0x84CB},
+    {"GL_TEXTURE11_ARB", 0x84CB},
+    {"GL_TEXTURE12", 0x84CC},
+    {"GL_TEXTURE12_ARB", 0x84CC},
+    {"GL_TEXTURE13", 0x84CD},
+    {"GL_TEXTURE13_ARB", 0x84CD},
+    {"GL_TEXTURE14", 0x84CE},
+    {"GL_TEXTURE14_ARB", 0x84CE},
+    {"GL_TEXTURE15", 0x84CF},
+    {"GL_TEXTURE15_ARB", 0x84CF},
+    {"GL_TEXTURE16", 0x84D0},
+    {"GL_TEXTURE16_ARB", 0x84D0},
+    {"GL_TEXTURE17", 0x84D1},
+    {"GL_TEXTURE17_ARB", 0x84D1},
+    {"GL_TEXTURE18", 0x84D2},
+    {"GL_TEXTURE18_ARB", 0x84D2},
+    {"GL_TEXTURE19", 0x84D3},
+    {"GL_TEXTURE19_ARB", 0x84D3},
+    {"GL_TEXTURE20", 0x84D4},
+    {"GL_TEXTURE20_ARB", 0x84D4},
+    {"GL_TEXTURE21", 0x84D5},
+    {"GL_TEXTURE21_ARB", 0x84D5},
+    {"GL_TEXTURE22", 0x84D6},
+    {"GL_TEXTURE22_ARB", 0x84D6},
+    {"GL_TEXTURE23", 0x84D7},
+    {"GL_TEXTURE23_ARB", 0x84D7},
+    {"GL_TEXTURE24", 0x84D8},
+    {"GL_TEXTURE24_ARB", 0x84D8},
+    {"GL_TEXTURE25", 0x84D9},
+    {"GL_TEXTURE25_ARB", 0x84D9},
+    {"GL_TEXTURE26", 0x84DA},
+    {"GL_TEXTURE26_ARB", 0x84DA},
+    {"GL_TEXTURE27", 0x84DB},
+    {"GL_TEXTURE27_ARB", 0x84DB},
+    {"GL_TEXTURE28", 0x84DC},
+    {"GL_TEXTURE28_ARB", 0x84DC},
+    {"GL_TEXTURE29", 0x84DD},
+    {"GL_TEXTURE29_ARB", 0x84DD},
+    {"GL_TEXTURE30", 0x84DE},
+    {"GL_TEXTURE30_ARB", 0x84DE},
+    {"GL_TEXTURE31", 0x84DF},
+    {"GL_TEXTURE31_ARB", 0x84DF},
+    {"GL_ACTIVE_TEXTURE", 0x84E0},
+    {"GL_ACTIVE_TEXTURE_ARB", 0x84E0},
+    {"GL_CLIENT_ACTIVE_TEXTURE", 0x84E1},
+    {"GL_CLIENT_ACTIVE_TEXTURE_ARB", 0x84E1},
+    {"GL_MAX_TEXTURE_UNITS", 0x84E2},
+    {"GL_MAX_TEXTURE_UNITS_ARB", 0x84E2},
+    {"GL_TRANSPOSE_MODELVIEW_MATRIX", 0x84E3},
+    {"GL_TRANSPOSE_MODELVIEW_MATRIX_ARB", 0x84E3},
+    {"GL_TRANSPOSE_PROJECTION_MATRIX", 0x84E4},
+    {"GL_TRANSPOSE_PROJECTION_MATRIX_ARB", 0x84E4},
+    {"GL_TRANSPOSE_TEXTURE_MATRIX", 0x84E5},
+    {"GL_TRANSPOSE_TEXTURE_MATRIX_ARB", 0x84E5},
+    {"GL_TRANSPOSE_COLOR_MATRIX", 0x84E6},
+    {"GL_TRANSPOSE_COLOR_MATRIX_ARB", 0x84E6},
+    {"GL_SUBTRACT", 0x84E7},
+    {"GL_SUBTRACT_ARB", 0x84E7},
+    {"GL_MAX_RENDERBUFFER_SIZE", 0x84E8},
+    {"GL_MAX_RENDERBUFFER_SIZE_EXT", 0x84E8},
+    {"GL_MAX_RENDERBUFFER_SIZE_OES", 0x84E8},
+    {"GL_COMPRESSED_ALPHA", 0x84E9},
+    {"GL_COMPRESSED_ALPHA_ARB", 0x84E9},
+    {"GL_COMPRESSED_LUMINANCE", 0x84EA},
+    {"GL_COMPRESSED_LUMINANCE_ARB", 0x84EA},
+    {"GL_COMPRESSED_LUMINANCE_ALPHA", 0x84EB},
+    {"GL_COMPRESSED_LUMINANCE_ALPHA_ARB", 0x84EB},
+    {"GL_COMPRESSED_INTENSITY", 0x84EC},
+    {"GL_COMPRESSED_INTENSITY_ARB", 0x84EC},
+    {"GL_COMPRESSED_RGB", 0x84ED},
+    {"GL_COMPRESSED_RGB_ARB", 0x84ED},
+    {"GL_COMPRESSED_RGBA", 0x84EE},
+    {"GL_COMPRESSED_RGBA_ARB", 0x84EE},
+    {"GL_TEXTURE_COMPRESSION_HINT", 0x84EF},
+    {"GL_TEXTURE_COMPRESSION_HINT_ARB", 0x84EF},
+    {"GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER", 0x84F0},
+    {"GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER", 0x84F1},
+    {"GL_ALL_COMPLETED_NV", 0x84F2},
+    {"GL_FENCE_STATUS_NV", 0x84F3},
+    {"GL_FENCE_CONDITION_NV", 0x84F4},
+    {"GL_TEXTURE_RECTANGLE", 0x84F5},
+    {"GL_TEXTURE_RECTANGLE_ARB", 0x84F5},
+    {"GL_TEXTURE_RECTANGLE_NV", 0x84F5},
+    {"GL_TEXTURE_BINDING_RECTANGLE", 0x84F6},
+    {"GL_TEXTURE_BINDING_RECTANGLE_ARB", 0x84F6},
+    {"GL_TEXTURE_BINDING_RECTANGLE_NV", 0x84F6},
+    {"GL_PROXY_TEXTURE_RECTANGLE", 0x84F7},
+    {"GL_PROXY_TEXTURE_RECTANGLE_ARB", 0x84F7},
+    {"GL_PROXY_TEXTURE_RECTANGLE_NV", 0x84F7},
+    {"GL_MAX_RECTANGLE_TEXTURE_SIZE", 0x84F8},
+    {"GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB", 0x84F8},
+    {"GL_MAX_RECTANGLE_TEXTURE_SIZE_NV", 0x84F8},
+    {"GL_DEPTH_STENCIL", 0x84F9},
+    {"GL_DEPTH_STENCIL_EXT", 0x84F9},
+    {"GL_DEPTH_STENCIL_NV", 0x84F9},
+    {"GL_DEPTH_STENCIL_OES", 0x84F9},
+    {"GL_UNSIGNED_INT_24_8", 0x84FA},
+    {"GL_UNSIGNED_INT_24_8_EXT", 0x84FA},
+    {"GL_UNSIGNED_INT_24_8_NV", 0x84FA},
+    {"GL_UNSIGNED_INT_24_8_OES", 0x84FA},
+    {"GL_MAX_TEXTURE_LOD_BIAS", 0x84FD},
+    {"GL_MAX_TEXTURE_LOD_BIAS_EXT", 0x84FD},
+    {"GL_TEXTURE_MAX_ANISOTROPY_EXT", 0x84FE},
+    {"GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT", 0x84FF},
+    {"GL_TEXTURE_FILTER_CONTROL", 0x8500},
+    {"GL_TEXTURE_FILTER_CONTROL_EXT", 0x8500},
+    {"GL_TEXTURE_LOD_BIAS", 0x8501},
+    {"GL_TEXTURE_LOD_BIAS_EXT", 0x8501},
+    {"GL_MODELVIEW1_STACK_DEPTH_EXT", 0x8502},
+    {"GL_COMBINE4_NV", 0x8503},
+    {"GL_MAX_SHININESS_NV", 0x8504},
+    {"GL_MAX_SPOT_EXPONENT_NV", 0x8505},
+    {"GL_MODELVIEW1_MATRIX_EXT", 0x8506},
+    {"GL_INCR_WRAP", 0x8507},
+    {"GL_INCR_WRAP_EXT", 0x8507},
+    {"GL_INCR_WRAP_OES", 0x8507},
+    {"GL_DECR_WRAP", 0x8508},
+    {"GL_DECR_WRAP_EXT", 0x8508},
+    {"GL_DECR_WRAP_OES", 0x8508},
+    {"GL_VERTEX_WEIGHTING_EXT", 0x8509},
+    {"GL_MODELVIEW1_ARB", 0x850A},
+    {"GL_MODELVIEW1_EXT", 0x850A},
+    {"GL_CURRENT_VERTEX_WEIGHT_EXT", 0x850B},
+    {"GL_VERTEX_WEIGHT_ARRAY_EXT", 0x850C},
+    {"GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT", 0x850D},
+    {"GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT", 0x850E},
+    {"GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT", 0x850F},
+    {"GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT", 0x8510},
+    {"GL_NORMAL_MAP", 0x8511},
+    {"GL_NORMAL_MAP_ARB", 0x8511},
+    {"GL_NORMAL_MAP_EXT", 0x8511},
+    {"GL_NORMAL_MAP_NV", 0x8511},
+    {"GL_NORMAL_MAP_OES", 0x8511},
+    {"GL_REFLECTION_MAP", 0x8512},
+    {"GL_REFLECTION_MAP_ARB", 0x8512},
+    {"GL_REFLECTION_MAP_EXT", 0x8512},
+    {"GL_REFLECTION_MAP_NV", 0x8512},
+    {"GL_REFLECTION_MAP_OES", 0x8512},
+    {"GL_TEXTURE_CUBE_MAP", 0x8513},
+    {"GL_TEXTURE_CUBE_MAP_ARB", 0x8513},
+    {"GL_TEXTURE_CUBE_MAP_EXT", 0x8513},
+    {"GL_TEXTURE_CUBE_MAP_OES", 0x8513},
+    {"GL_TEXTURE_BINDING_CUBE_MAP", 0x8514},
+    {"GL_TEXTURE_BINDING_CUBE_MAP_ARB", 0x8514},
+    {"GL_TEXTURE_BINDING_CUBE_MAP_EXT", 0x8514},
+    {"GL_TEXTURE_BINDING_CUBE_MAP_OES", 0x8514},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_X", 0x8515},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB", 0x8515},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT", 0x8515},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES", 0x8515},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_X", 0x8516},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB", 0x8516},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT", 0x8516},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES", 0x8516},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_Y", 0x8517},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB", 0x8517},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT", 0x8517},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES", 0x8517},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_Y", 0x8518},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB", 0x8518},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT", 0x8518},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES", 0x8518},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_Z", 0x8519},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB", 0x8519},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT", 0x8519},
+    {"GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES", 0x8519},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_Z", 0x851A},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB", 0x851A},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT", 0x851A},
+    {"GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES", 0x851A},
+    {"GL_PROXY_TEXTURE_CUBE_MAP", 0x851B},
+    {"GL_PROXY_TEXTURE_CUBE_MAP_ARB", 0x851B},
+    {"GL_PROXY_TEXTURE_CUBE_MAP_EXT", 0x851B},
+    {"GL_MAX_CUBE_MAP_TEXTURE_SIZE", 0x851C},
+    {"GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB", 0x851C},
+    {"GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT", 0x851C},
+    {"GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES", 0x851C},
+    {"GL_VERTEX_ARRAY_RANGE_APPLE", 0x851D},
+    {"GL_VERTEX_ARRAY_RANGE_NV", 0x851D},
+    {"GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE", 0x851E},
+    {"GL_VERTEX_ARRAY_RANGE_LENGTH_NV", 0x851E},
+    {"GL_VERTEX_ARRAY_RANGE_VALID_NV", 0x851F},
+    {"GL_VERTEX_ARRAY_STORAGE_HINT_APPLE", 0x851F},
+    {"GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV", 0x8520},
+    {"GL_VERTEX_ARRAY_RANGE_POINTER_APPLE", 0x8521},
+    {"GL_VERTEX_ARRAY_RANGE_POINTER_NV", 0x8521},
+    {"GL_REGISTER_COMBINERS_NV", 0x8522},
+    {"GL_VARIABLE_A_NV", 0x8523},
+    {"GL_VARIABLE_B_NV", 0x8524},
+    {"GL_VARIABLE_C_NV", 0x8525},
+    {"GL_VARIABLE_D_NV", 0x8526},
+    {"GL_VARIABLE_E_NV", 0x8527},
+    {"GL_VARIABLE_F_NV", 0x8528},
+    {"GL_VARIABLE_G_NV", 0x8529},
+    {"GL_CONSTANT_COLOR0_NV", 0x852A},
+    {"GL_CONSTANT_COLOR1_NV", 0x852B},
+    {"GL_PRIMARY_COLOR_NV", 0x852C},
+    {"GL_SECONDARY_COLOR_NV", 0x852D},
+    {"GL_SPARE0_NV", 0x852E},
+    {"GL_SPARE1_NV", 0x852F},
+    {"GL_DISCARD_NV", 0x8530},
+    {"GL_E_TIMES_F_NV", 0x8531},
+    {"GL_SPARE0_PLUS_SECONDARY_COLOR_NV", 0x8532},
+    {"GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV", 0x8533},
+    {"GL_MULTISAMPLE_FILTER_HINT_NV", 0x8534},
+    {"GL_PER_STAGE_CONSTANTS_NV", 0x8535},
+    {"GL_UNSIGNED_IDENTITY_NV", 0x8536},
+    {"GL_UNSIGNED_INVERT_NV", 0x8537},
+    {"GL_EXPAND_NORMAL_NV", 0x8538},
+    {"GL_EXPAND_NEGATE_NV", 0x8539},
+    {"GL_HALF_BIAS_NORMAL_NV", 0x853A},
+    {"GL_HALF_BIAS_NEGATE_NV", 0x853B},
+    {"GL_SIGNED_IDENTITY_NV", 0x853C},
+    {"GL_SIGNED_NEGATE_NV", 0x853D},
+    {"GL_SCALE_BY_TWO_NV", 0x853E},
+    {"GL_SCALE_BY_FOUR_NV", 0x853F},
+    {"GL_SCALE_BY_ONE_HALF_NV", 0x8540},
+    {"GL_BIAS_BY_NEGATIVE_ONE_HALF_NV", 0x8541},
+    {"GL_COMBINER_INPUT_NV", 0x8542},
+    {"GL_COMBINER_MAPPING_NV", 0x8543},
+    {"GL_COMBINER_COMPONENT_USAGE_NV", 0x8544},
+    {"GL_COMBINER_AB_DOT_PRODUCT_NV", 0x8545},
+    {"GL_COMBINER_CD_DOT_PRODUCT_NV", 0x8546},
+    {"GL_COMBINER_MUX_SUM_NV", 0x8547},
+    {"GL_COMBINER_SCALE_NV", 0x8548},
+    {"GL_COMBINER_BIAS_NV", 0x8549},
+    {"GL_COMBINER_AB_OUTPUT_NV", 0x854A},
+    {"GL_COMBINER_CD_OUTPUT_NV", 0x854B},
+    {"GL_COMBINER_SUM_OUTPUT_NV", 0x854C},
+    {"GL_MAX_GENERAL_COMBINERS_NV", 0x854D},
+    {"GL_NUM_GENERAL_COMBINERS_NV", 0x854E},
+    {"GL_COLOR_SUM_CLAMP_NV", 0x854F},
+    {"GL_COMBINER0_NV", 0x8550},
+    {"GL_COMBINER1_NV", 0x8551},
+    {"GL_COMBINER2_NV", 0x8552},
+    {"GL_COMBINER3_NV", 0x8553},
+    {"GL_COMBINER4_NV", 0x8554},
+    {"GL_COMBINER5_NV", 0x8555},
+    {"GL_COMBINER6_NV", 0x8556},
+    {"GL_COMBINER7_NV", 0x8557},
+    {"GL_PRIMITIVE_RESTART_NV", 0x8558},
+    {"GL_PRIMITIVE_RESTART_INDEX_NV", 0x8559},
+    {"GL_FOG_DISTANCE_MODE_NV", 0x855A},
+    {"GL_EYE_RADIAL_NV", 0x855B},
+    {"GL_EYE_PLANE_ABSOLUTE_NV", 0x855C},
+    {"GL_EMBOSS_LIGHT_NV", 0x855D},
+    {"GL_EMBOSS_CONSTANT_NV", 0x855E},
+    {"GL_EMBOSS_MAP_NV", 0x855F},
+    {"GL_RED_MIN_CLAMP_INGR", 0x8560},
+    {"GL_GREEN_MIN_CLAMP_INGR", 0x8561},
+    {"GL_BLUE_MIN_CLAMP_INGR", 0x8562},
+    {"GL_ALPHA_MIN_CLAMP_INGR", 0x8563},
+    {"GL_RED_MAX_CLAMP_INGR", 0x8564},
+    {"GL_GREEN_MAX_CLAMP_INGR", 0x8565},
+    {"GL_BLUE_MAX_CLAMP_INGR", 0x8566},
+    {"GL_ALPHA_MAX_CLAMP_INGR", 0x8567},
+    {"GL_INTERLACE_READ_INGR", 0x8568},
+    {"GL_COMBINE", 0x8570},
+    {"GL_COMBINE_ARB", 0x8570},
+    {"GL_COMBINE_EXT", 0x8570},
+    {"GL_COMBINE_RGB", 0x8571},
+    {"GL_COMBINE_RGB_ARB", 0x8571},
+    {"GL_COMBINE_RGB_EXT", 0x8571},
+    {"GL_COMBINE_ALPHA", 0x8572},
+    {"GL_COMBINE_ALPHA_ARB", 0x8572},
+    {"GL_COMBINE_ALPHA_EXT", 0x8572},
+    {"GL_RGB_SCALE", 0x8573},
+    {"GL_RGB_SCALE_ARB", 0x8573},
+    {"GL_RGB_SCALE_EXT", 0x8573},
+    {"GL_ADD_SIGNED", 0x8574},
+    {"GL_ADD_SIGNED_ARB", 0x8574},
+    {"GL_ADD_SIGNED_EXT", 0x8574},
+    {"GL_INTERPOLATE", 0x8575},
+    {"GL_INTERPOLATE_ARB", 0x8575},
+    {"GL_INTERPOLATE_EXT", 0x8575},
+    {"GL_CONSTANT", 0x8576},
+    {"GL_CONSTANT_ARB", 0x8576},
+    {"GL_CONSTANT_EXT", 0x8576},
+    {"GL_PRIMARY_COLOR", 0x8577},
+    {"GL_PRIMARY_COLOR_ARB", 0x8577},
+    {"GL_PRIMARY_COLOR_EXT", 0x8577},
+    {"GL_PREVIOUS", 0x8578},
+    {"GL_PREVIOUS_ARB", 0x8578},
+    {"GL_PREVIOUS_EXT", 0x8578},
+    {"GL_SOURCE0_RGB", 0x8580},
+    {"GL_SOURCE0_RGB_ARB", 0x8580},
+    {"GL_SOURCE0_RGB_EXT", 0x8580},
+    {"GL_SRC0_RGB", 0x8580},
+    {"GL_SOURCE1_RGB", 0x8581},
+    {"GL_SOURCE1_RGB_ARB", 0x8581},
+    {"GL_SOURCE1_RGB_EXT", 0x8581},
+    {"GL_SRC1_RGB", 0x8581},
+    {"GL_SOURCE2_RGB", 0x8582},
+    {"GL_SOURCE2_RGB_ARB", 0x8582},
+    {"GL_SOURCE2_RGB_EXT", 0x8582},
+    {"GL_SRC2_RGB", 0x8582},
+    {"GL_SOURCE3_RGB_NV", 0x8583},
+    {"GL_SOURCE0_ALPHA", 0x8588},
+    {"GL_SOURCE0_ALPHA_ARB", 0x8588},
+    {"GL_SOURCE0_ALPHA_EXT", 0x8588},
+    {"GL_SRC0_ALPHA", 0x8588},
+    {"GL_SOURCE1_ALPHA", 0x8589},
+    {"GL_SOURCE1_ALPHA_ARB", 0x8589},
+    {"GL_SOURCE1_ALPHA_EXT", 0x8589},
+    {"GL_SRC1_ALPHA", 0x8589},
+    {"GL_SOURCE2_ALPHA", 0x858A},
+    {"GL_SOURCE2_ALPHA_ARB", 0x858A},
+    {"GL_SOURCE2_ALPHA_EXT", 0x858A},
+    {"GL_SRC2_ALPHA", 0x858A},
+    {"GL_SOURCE3_ALPHA_NV", 0x858B},
+    {"GL_OPERAND0_RGB", 0x8590},
+    {"GL_OPERAND0_RGB_ARB", 0x8590},
+    {"GL_OPERAND0_RGB_EXT", 0x8590},
+    {"GL_OPERAND1_RGB", 0x8591},
+    {"GL_OPERAND1_RGB_ARB", 0x8591},
+    {"GL_OPERAND1_RGB_EXT", 0x8591},
+    {"GL_OPERAND2_RGB", 0x8592},
+    {"GL_OPERAND2_RGB_ARB", 0x8592},
+    {"GL_OPERAND2_RGB_EXT", 0x8592},
+    {"GL_OPERAND3_RGB_NV", 0x8593},
+    {"GL_OPERAND0_ALPHA", 0x8598},
+    {"GL_OPERAND0_ALPHA_ARB", 0x8598},
+    {"GL_OPERAND0_ALPHA_EXT", 0x8598},
+    {"GL_OPERAND1_ALPHA", 0x8599},
+    {"GL_OPERAND1_ALPHA_ARB", 0x8599},
+    {"GL_OPERAND1_ALPHA_EXT", 0x8599},
+    {"GL_OPERAND2_ALPHA", 0x859A},
+    {"GL_OPERAND2_ALPHA_ARB", 0x859A},
+    {"GL_OPERAND2_ALPHA_EXT", 0x859A},
+    {"GL_OPERAND3_ALPHA_NV", 0x859B},
+    {"GL_PACK_SUBSAMPLE_RATE_SGIX", 0x85A0},
+    {"GL_UNPACK_SUBSAMPLE_RATE_SGIX", 0x85A1},
+    {"GL_PIXEL_SUBSAMPLE_4444_SGIX", 0x85A2},
+    {"GL_PIXEL_SUBSAMPLE_2424_SGIX", 0x85A3},
+    {"GL_PIXEL_SUBSAMPLE_4242_SGIX", 0x85A4},
+    {"GL_PERTURB_EXT", 0x85AE},
+    {"GL_TEXTURE_NORMAL_EXT", 0x85AF},
+    {"GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE", 0x85B0},
+    {"GL_TRANSFORM_HINT_APPLE", 0x85B1},
+    {"GL_UNPACK_CLIENT_STORAGE_APPLE", 0x85B2},
+    {"GL_BUFFER_OBJECT_APPLE", 0x85B3},
+    {"GL_STORAGE_CLIENT_APPLE", 0x85B4},
+    {"GL_VERTEX_ARRAY_BINDING", 0x85B5},
+    {"GL_VERTEX_ARRAY_BINDING_APPLE", 0x85B5},
+    {"GL_TEXTURE_RANGE_LENGTH_APPLE", 0x85B7},
+    {"GL_TEXTURE_RANGE_POINTER_APPLE", 0x85B8},
+    {"GL_YCBCR_422_APPLE", 0x85B9},
+    {"GL_UNSIGNED_SHORT_8_8_APPLE", 0x85BA},
+    {"GL_UNSIGNED_SHORT_8_8_MESA", 0x85BA},
+    {"GL_UNSIGNED_SHORT_8_8_REV_APPLE", 0x85BB},
+    {"GL_UNSIGNED_SHORT_8_8_REV_MESA", 0x85BB},
+    {"GL_TEXTURE_STORAGE_HINT_APPLE", 0x85BC},
+    {"GL_STORAGE_PRIVATE_APPLE", 0x85BD},
+    {"GL_STORAGE_CACHED_APPLE", 0x85BE},
+    {"GL_STORAGE_SHARED_APPLE", 0x85BF},
+    {"GL_REPLACEMENT_CODE_ARRAY_SUN", 0x85C0},
+    {"GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN", 0x85C1},
+    {"GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN", 0x85C2},
+    {"GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN", 0x85C3},
+    {"GL_R1UI_V3F_SUN", 0x85C4},
+    {"GL_R1UI_C4UB_V3F_SUN", 0x85C5},
+    {"GL_R1UI_C3F_V3F_SUN", 0x85C6},
+    {"GL_R1UI_N3F_V3F_SUN", 0x85C7},
+    {"GL_R1UI_C4F_N3F_V3F_SUN", 0x85C8},
+    {"GL_R1UI_T2F_V3F_SUN", 0x85C9},
+    {"GL_R1UI_T2F_N3F_V3F_SUN", 0x85CA},
+    {"GL_R1UI_T2F_C4F_N3F_V3F_SUN", 0x85CB},
+    {"GL_SLICE_ACCUM_SUN", 0x85CC},
+    {"GL_QUAD_MESH_SUN", 0x8614},
+    {"GL_TRIANGLE_MESH_SUN", 0x8615},
+    {"GL_VERTEX_PROGRAM_ARB", 0x8620},
+    {"GL_VERTEX_PROGRAM_NV", 0x8620},
+    {"GL_VERTEX_STATE_PROGRAM_NV", 0x8621},
+    {"GL_VERTEX_ATTRIB_ARRAY_ENABLED", 0x8622},
+    {"GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB", 0x8622},
+    {"GL_ATTRIB_ARRAY_SIZE_NV", 0x8623},
+    {"GL_VERTEX_ATTRIB_ARRAY_SIZE", 0x8623},
+    {"GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB", 0x8623},
+    {"GL_ATTRIB_ARRAY_STRIDE_NV", 0x8624},
+    {"GL_VERTEX_ATTRIB_ARRAY_STRIDE", 0x8624},
+    {"GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB", 0x8624},
+    {"GL_ATTRIB_ARRAY_TYPE_NV", 0x8625},
+    {"GL_VERTEX_ATTRIB_ARRAY_TYPE", 0x8625},
+    {"GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB", 0x8625},
+    {"GL_CURRENT_ATTRIB_NV", 0x8626},
+    {"GL_CURRENT_VERTEX_ATTRIB", 0x8626},
+    {"GL_CURRENT_VERTEX_ATTRIB_ARB", 0x8626},
+    {"GL_PROGRAM_LENGTH_ARB", 0x8627},
+    {"GL_PROGRAM_LENGTH_NV", 0x8627},
+    {"GL_PROGRAM_STRING_ARB", 0x8628},
+    {"GL_PROGRAM_STRING_NV", 0x8628},
+    {"GL_MODELVIEW_PROJECTION_NV", 0x8629},
+    {"GL_IDENTITY_NV", 0x862A},
+    {"GL_INVERSE_NV", 0x862B},
+    {"GL_TRANSPOSE_NV", 0x862C},
+    {"GL_INVERSE_TRANSPOSE_NV", 0x862D},
+    {"GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB", 0x862E},
+    {"GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV", 0x862E},
+    {"GL_MAX_PROGRAM_MATRICES_ARB", 0x862F},
+    {"GL_MAX_TRACK_MATRICES_NV", 0x862F},
+    {"GL_MATRIX0_NV", 0x8630},
+    {"GL_MATRIX1_NV", 0x8631},
+    {"GL_MATRIX2_NV", 0x8632},
+    {"GL_MATRIX3_NV", 0x8633},
+    {"GL_MATRIX4_NV", 0x8634},
+    {"GL_MATRIX5_NV", 0x8635},
+    {"GL_MATRIX6_NV", 0x8636},
+    {"GL_MATRIX7_NV", 0x8637},
+    {"GL_CURRENT_MATRIX_STACK_DEPTH_ARB", 0x8640},
+    {"GL_CURRENT_MATRIX_STACK_DEPTH_NV", 0x8640},
+    {"GL_CURRENT_MATRIX_ARB", 0x8641},
+    {"GL_CURRENT_MATRIX_NV", 0x8641},
+    {"GL_VERTEX_PROGRAM_POINT_SIZE", 0x8642},
+    {"GL_VERTEX_PROGRAM_POINT_SIZE_ARB", 0x8642},
+    {"GL_VERTEX_PROGRAM_POINT_SIZE_NV", 0x8642},
+    {"GL_PROGRAM_POINT_SIZE", 0x8642},
+    {"GL_PROGRAM_POINT_SIZE_ARB", 0x8642},
+    {"GL_PROGRAM_POINT_SIZE_EXT", 0x8642},
+    {"GL_VERTEX_PROGRAM_TWO_SIDE", 0x8643},
+    {"GL_VERTEX_PROGRAM_TWO_SIDE_ARB", 0x8643},
+    {"GL_VERTEX_PROGRAM_TWO_SIDE_NV", 0x8643},
+    {"GL_PROGRAM_PARAMETER_NV", 0x8644},
+    {"GL_ATTRIB_ARRAY_POINTER_NV", 0x8645},
+    {"GL_VERTEX_ATTRIB_ARRAY_POINTER", 0x8645},
+    {"GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB", 0x8645},
+    {"GL_PROGRAM_TARGET_NV", 0x8646},
+    {"GL_PROGRAM_RESIDENT_NV", 0x8647},
+    {"GL_TRACK_MATRIX_NV", 0x8648},
+    {"GL_TRACK_MATRIX_TRANSFORM_NV", 0x8649},
+    {"GL_VERTEX_PROGRAM_BINDING_NV", 0x864A},
+    {"GL_PROGRAM_ERROR_POSITION_ARB", 0x864B},
+    {"GL_PROGRAM_ERROR_POSITION_NV", 0x864B},
+    {"GL_OFFSET_TEXTURE_RECTANGLE_NV", 0x864C},
+    {"GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV", 0x864D},
+    {"GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV", 0x864E},
+    {"GL_DEPTH_CLAMP", 0x864F},
+    {"GL_DEPTH_CLAMP_NV", 0x864F},
+    {"GL_VERTEX_ATTRIB_ARRAY0_NV", 0x8650},
+    {"GL_VERTEX_ATTRIB_ARRAY1_NV", 0x8651},
+    {"GL_VERTEX_ATTRIB_ARRAY2_NV", 0x8652},
+    {"GL_VERTEX_ATTRIB_ARRAY3_NV", 0x8653},
+    {"GL_VERTEX_ATTRIB_ARRAY4_NV", 0x8654},
+    {"GL_VERTEX_ATTRIB_ARRAY5_NV", 0x8655},
+    {"GL_VERTEX_ATTRIB_ARRAY6_NV", 0x8656},
+    {"GL_VERTEX_ATTRIB_ARRAY7_NV", 0x8657},
+    {"GL_VERTEX_ATTRIB_ARRAY8_NV", 0x8658},
+    {"GL_VERTEX_ATTRIB_ARRAY9_NV", 0x8659},
+    {"GL_VERTEX_ATTRIB_ARRAY10_NV", 0x865A},
+    {"GL_VERTEX_ATTRIB_ARRAY11_NV", 0x865B},
+    {"GL_VERTEX_ATTRIB_ARRAY12_NV", 0x865C},
+    {"GL_VERTEX_ATTRIB_ARRAY13_NV", 0x865D},
+    {"GL_VERTEX_ATTRIB_ARRAY14_NV", 0x865E},
+    {"GL_VERTEX_ATTRIB_ARRAY15_NV", 0x865F},
+    {"GL_MAP1_VERTEX_ATTRIB0_4_NV", 0x8660},
+    {"GL_MAP1_VERTEX_ATTRIB1_4_NV", 0x8661},
+    {"GL_MAP1_VERTEX_ATTRIB2_4_NV", 0x8662},
+    {"GL_MAP1_VERTEX_ATTRIB3_4_NV", 0x8663},
+    {"GL_MAP1_VERTEX_ATTRIB4_4_NV", 0x8664},
+    {"GL_MAP1_VERTEX_ATTRIB5_4_NV", 0x8665},
+    {"GL_MAP1_VERTEX_ATTRIB6_4_NV", 0x8666},
+    {"GL_MAP1_VERTEX_ATTRIB7_4_NV", 0x8667},
+    {"GL_MAP1_VERTEX_ATTRIB8_4_NV", 0x8668},
+    {"GL_MAP1_VERTEX_ATTRIB9_4_NV", 0x8669},
+    {"GL_MAP1_VERTEX_ATTRIB10_4_NV", 0x866A},
+    {"GL_MAP1_VERTEX_ATTRIB11_4_NV", 0x866B},
+    {"GL_MAP1_VERTEX_ATTRIB12_4_NV", 0x866C},
+    {"GL_MAP1_VERTEX_ATTRIB13_4_NV", 0x866D},
+    {"GL_MAP1_VERTEX_ATTRIB14_4_NV", 0x866E},
+    {"GL_MAP1_VERTEX_ATTRIB15_4_NV", 0x866F},
+    {"GL_MAP2_VERTEX_ATTRIB0_4_NV", 0x8670},
+    {"GL_MAP2_VERTEX_ATTRIB1_4_NV", 0x8671},
+    {"GL_MAP2_VERTEX_ATTRIB2_4_NV", 0x8672},
+    {"GL_MAP2_VERTEX_ATTRIB3_4_NV", 0x8673},
+    {"GL_MAP2_VERTEX_ATTRIB4_4_NV", 0x8674},
+    {"GL_MAP2_VERTEX_ATTRIB5_4_NV", 0x8675},
+    {"GL_MAP2_VERTEX_ATTRIB6_4_NV", 0x8676},
+    {"GL_MAP2_VERTEX_ATTRIB7_4_NV", 0x8677},
+    {"GL_PROGRAM_BINDING_ARB", 0x8677},
+    {"GL_MAP2_VERTEX_ATTRIB8_4_NV", 0x8678},
+    {"GL_MAP2_VERTEX_ATTRIB9_4_NV", 0x8679},
+    {"GL_MAP2_VERTEX_ATTRIB10_4_NV", 0x867A},
+    {"GL_MAP2_VERTEX_ATTRIB11_4_NV", 0x867B},
+    {"GL_MAP2_VERTEX_ATTRIB12_4_NV", 0x867C},
+    {"GL_MAP2_VERTEX_ATTRIB13_4_NV", 0x867D},
+    {"GL_MAP2_VERTEX_ATTRIB14_4_NV", 0x867E},
+    {"GL_MAP2_VERTEX_ATTRIB15_4_NV", 0x867F},
+    {"GL_TEXTURE_COMPRESSED_IMAGE_SIZE", 0x86A0},
+    {"GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB", 0x86A0},
+    {"GL_TEXTURE_COMPRESSED", 0x86A1},
+    {"GL_TEXTURE_COMPRESSED_ARB", 0x86A1},
+    {"GL_NUM_COMPRESSED_TEXTURE_FORMATS", 0x86A2},
+    {"GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB", 0x86A2},
+    {"GL_COMPRESSED_TEXTURE_FORMATS", 0x86A3},
+    {"GL_COMPRESSED_TEXTURE_FORMATS_ARB", 0x86A3},
+    {"GL_MAX_VERTEX_UNITS_ARB", 0x86A4},
+    {"GL_MAX_VERTEX_UNITS_OES", 0x86A4},
+    {"GL_ACTIVE_VERTEX_UNITS_ARB", 0x86A5},
+    {"GL_WEIGHT_SUM_UNITY_ARB", 0x86A6},
+    {"GL_VERTEX_BLEND_ARB", 0x86A7},
+    {"GL_CURRENT_WEIGHT_ARB", 0x86A8},
+    {"GL_WEIGHT_ARRAY_TYPE_ARB", 0x86A9},
+    {"GL_WEIGHT_ARRAY_TYPE_OES", 0x86A9},
+    {"GL_WEIGHT_ARRAY_STRIDE_ARB", 0x86AA},
+    {"GL_WEIGHT_ARRAY_STRIDE_OES", 0x86AA},
+    {"GL_WEIGHT_ARRAY_SIZE_ARB", 0x86AB},
+    {"GL_WEIGHT_ARRAY_SIZE_OES", 0x86AB},
+    {"GL_WEIGHT_ARRAY_POINTER_ARB", 0x86AC},
+    {"GL_WEIGHT_ARRAY_POINTER_OES", 0x86AC},
+    {"GL_WEIGHT_ARRAY_ARB", 0x86AD},
+    {"GL_WEIGHT_ARRAY_OES", 0x86AD},
+    {"GL_DOT3_RGB", 0x86AE},
+    {"GL_DOT3_RGB_ARB", 0x86AE},
+    {"GL_DOT3_RGBA", 0x86AF},
+    {"GL_DOT3_RGBA_ARB", 0x86AF},
+    {"GL_DOT3_RGBA_IMG", 0x86AF},
+    {"GL_COMPRESSED_RGB_FXT1_3DFX", 0x86B0},
+    {"GL_COMPRESSED_RGBA_FXT1_3DFX", 0x86B1},
+    {"GL_MULTISAMPLE_3DFX", 0x86B2},
+    {"GL_SAMPLE_BUFFERS_3DFX", 0x86B3},
+    {"GL_SAMPLES_3DFX", 0x86B4},
+    {"GL_EVAL_2D_NV", 0x86C0},
+    {"GL_EVAL_TRIANGULAR_2D_NV", 0x86C1},
+    {"GL_MAP_TESSELLATION_NV", 0x86C2},
+    {"GL_MAP_ATTRIB_U_ORDER_NV", 0x86C3},
+    {"GL_MAP_ATTRIB_V_ORDER_NV", 0x86C4},
+    {"GL_EVAL_FRACTIONAL_TESSELLATION_NV", 0x86C5},
+    {"GL_EVAL_VERTEX_ATTRIB0_NV", 0x86C6},
+    {"GL_EVAL_VERTEX_ATTRIB1_NV", 0x86C7},
+    {"GL_EVAL_VERTEX_ATTRIB2_NV", 0x86C8},
+    {"GL_EVAL_VERTEX_ATTRIB3_NV", 0x86C9},
+    {"GL_EVAL_VERTEX_ATTRIB4_NV", 0x86CA},
+    {"GL_EVAL_VERTEX_ATTRIB5_NV", 0x86CB},
+    {"GL_EVAL_VERTEX_ATTRIB6_NV", 0x86CC},
+    {"GL_EVAL_VERTEX_ATTRIB7_NV", 0x86CD},
+    {"GL_EVAL_VERTEX_ATTRIB8_NV", 0x86CE},
+    {"GL_EVAL_VERTEX_ATTRIB9_NV", 0x86CF},
+    {"GL_EVAL_VERTEX_ATTRIB10_NV", 0x86D0},
+    {"GL_EVAL_VERTEX_ATTRIB11_NV", 0x86D1},
+    {"GL_EVAL_VERTEX_ATTRIB12_NV", 0x86D2},
+    {"GL_EVAL_VERTEX_ATTRIB13_NV", 0x86D3},
+    {"GL_EVAL_VERTEX_ATTRIB14_NV", 0x86D4},
+    {"GL_EVAL_VERTEX_ATTRIB15_NV", 0x86D5},
+    {"GL_MAX_MAP_TESSELLATION_NV", 0x86D6},
+    {"GL_MAX_RATIONAL_EVAL_ORDER_NV", 0x86D7},
+    {"GL_MAX_PROGRAM_PATCH_ATTRIBS_NV", 0x86D8},
+    {"GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV", 0x86D9},
+    {"GL_UNSIGNED_INT_S8_S8_8_8_NV", 0x86DA},
+    {"GL_UNSIGNED_INT_8_8_S8_S8_REV_NV", 0x86DB},
+    {"GL_DSDT_MAG_INTENSITY_NV", 0x86DC},
+    {"GL_SHADER_CONSISTENT_NV", 0x86DD},
+    {"GL_TEXTURE_SHADER_NV", 0x86DE},
+    {"GL_SHADER_OPERATION_NV", 0x86DF},
+    {"GL_CULL_MODES_NV", 0x86E0},
+    {"GL_OFFSET_TEXTURE_MATRIX_NV", 0x86E1},
+    {"GL_OFFSET_TEXTURE_2D_MATRIX_NV", 0x86E1},
+    {"GL_OFFSET_TEXTURE_SCALE_NV", 0x86E2},
+    {"GL_OFFSET_TEXTURE_2D_SCALE_NV", 0x86E2},
+    {"GL_OFFSET_TEXTURE_BIAS_NV", 0x86E3},
+    {"GL_OFFSET_TEXTURE_2D_BIAS_NV", 0x86E3},
+    {"GL_PREVIOUS_TEXTURE_INPUT_NV", 0x86E4},
+    {"GL_CONST_EYE_NV", 0x86E5},
+    {"GL_PASS_THROUGH_NV", 0x86E6},
+    {"GL_CULL_FRAGMENT_NV", 0x86E7},
+    {"GL_OFFSET_TEXTURE_2D_NV", 0x86E8},
+    {"GL_DEPENDENT_AR_TEXTURE_2D_NV", 0x86E9},
+    {"GL_DEPENDENT_GB_TEXTURE_2D_NV", 0x86EA},
+    {"GL_SURFACE_STATE_NV", 0x86EB},
+    {"GL_DOT_PRODUCT_NV", 0x86EC},
+    {"GL_DOT_PRODUCT_DEPTH_REPLACE_NV", 0x86ED},
+    {"GL_DOT_PRODUCT_TEXTURE_2D_NV", 0x86EE},
+    {"GL_DOT_PRODUCT_TEXTURE_3D_NV", 0x86EF},
+    {"GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV", 0x86F0},
+    {"GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV", 0x86F1},
+    {"GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV", 0x86F2},
+    {"GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV", 0x86F3},
+    {"GL_HILO_NV", 0x86F4},
+    {"GL_DSDT_NV", 0x86F5},
+    {"GL_DSDT_MAG_NV", 0x86F6},
+    {"GL_DSDT_MAG_VIB_NV", 0x86F7},
+    {"GL_HILO16_NV", 0x86F8},
+    {"GL_SIGNED_HILO_NV", 0x86F9},
+    {"GL_SIGNED_HILO16_NV", 0x86FA},
+    {"GL_SIGNED_RGBA_NV", 0x86FB},
+    {"GL_SIGNED_RGBA8_NV", 0x86FC},
+    {"GL_SURFACE_REGISTERED_NV", 0x86FD},
+    {"GL_SIGNED_RGB_NV", 0x86FE},
+    {"GL_SIGNED_RGB8_NV", 0x86FF},
+    {"GL_SURFACE_MAPPED_NV", 0x8700},
+    {"GL_SIGNED_LUMINANCE_NV", 0x8701},
+    {"GL_SIGNED_LUMINANCE8_NV", 0x8702},
+    {"GL_SIGNED_LUMINANCE_ALPHA_NV", 0x8703},
+    {"GL_SIGNED_LUMINANCE8_ALPHA8_NV", 0x8704},
+    {"GL_SIGNED_ALPHA_NV", 0x8705},
+    {"GL_SIGNED_ALPHA8_NV", 0x8706},
+    {"GL_SIGNED_INTENSITY_NV", 0x8707},
+    {"GL_SIGNED_INTENSITY8_NV", 0x8708},
+    {"GL_DSDT8_NV", 0x8709},
+    {"GL_DSDT8_MAG8_NV", 0x870A},
+    {"GL_DSDT8_MAG8_INTENSITY8_NV", 0x870B},
+    {"GL_SIGNED_RGB_UNSIGNED_ALPHA_NV", 0x870C},
+    {"GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV", 0x870D},
+    {"GL_HI_SCALE_NV", 0x870E},
+    {"GL_LO_SCALE_NV", 0x870F},
+    {"GL_DS_SCALE_NV", 0x8710},
+    {"GL_DT_SCALE_NV", 0x8711},
+    {"GL_MAGNITUDE_SCALE_NV", 0x8712},
+    {"GL_VIBRANCE_SCALE_NV", 0x8713},
+    {"GL_HI_BIAS_NV", 0x8714},
+    {"GL_LO_BIAS_NV", 0x8715},
+    {"GL_DS_BIAS_NV", 0x8716},
+    {"GL_DT_BIAS_NV", 0x8717},
+    {"GL_MAGNITUDE_BIAS_NV", 0x8718},
+    {"GL_VIBRANCE_BIAS_NV", 0x8719},
+    {"GL_TEXTURE_BORDER_VALUES_NV", 0x871A},
+    {"GL_TEXTURE_HI_SIZE_NV", 0x871B},
+    {"GL_TEXTURE_LO_SIZE_NV", 0x871C},
+    {"GL_TEXTURE_DS_SIZE_NV", 0x871D},
+    {"GL_TEXTURE_DT_SIZE_NV", 0x871E},
+    {"GL_TEXTURE_MAG_SIZE_NV", 0x871F},
+    {"GL_MODELVIEW2_ARB", 0x8722},
+    {"GL_MODELVIEW3_ARB", 0x8723},
+    {"GL_MODELVIEW4_ARB", 0x8724},
+    {"GL_MODELVIEW5_ARB", 0x8725},
+    {"GL_MODELVIEW6_ARB", 0x8726},
+    {"GL_MODELVIEW7_ARB", 0x8727},
+    {"GL_MODELVIEW8_ARB", 0x8728},
+    {"GL_MODELVIEW9_ARB", 0x8729},
+    {"GL_MODELVIEW10_ARB", 0x872A},
+    {"GL_MODELVIEW11_ARB", 0x872B},
+    {"GL_MODELVIEW12_ARB", 0x872C},
+    {"GL_MODELVIEW13_ARB", 0x872D},
+    {"GL_MODELVIEW14_ARB", 0x872E},
+    {"GL_MODELVIEW15_ARB", 0x872F},
+    {"GL_MODELVIEW16_ARB", 0x8730},
+    {"GL_MODELVIEW17_ARB", 0x8731},
+    {"GL_MODELVIEW18_ARB", 0x8732},
+    {"GL_MODELVIEW19_ARB", 0x8733},
+    {"GL_MODELVIEW20_ARB", 0x8734},
+    {"GL_MODELVIEW21_ARB", 0x8735},
+    {"GL_MODELVIEW22_ARB", 0x8736},
+    {"GL_MODELVIEW23_ARB", 0x8737},
+    {"GL_MODELVIEW24_ARB", 0x8738},
+    {"GL_MODELVIEW25_ARB", 0x8739},
+    {"GL_MODELVIEW26_ARB", 0x873A},
+    {"GL_MODELVIEW27_ARB", 0x873B},
+    {"GL_MODELVIEW28_ARB", 0x873C},
+    {"GL_MODELVIEW29_ARB", 0x873D},
+    {"GL_MODELVIEW30_ARB", 0x873E},
+    {"GL_MODELVIEW31_ARB", 0x873F},
+    {"GL_DOT3_RGB_EXT", 0x8740},
+    {"GL_Z400_BINARY_AMD", 0x8740},
+    {"GL_DOT3_RGBA_EXT", 0x8741},
+    {"GL_PROGRAM_BINARY_LENGTH_OES", 0x8741},
+    {"GL_PROGRAM_BINARY_LENGTH", 0x8741},
+    {"GL_MIRROR_CLAMP_ATI", 0x8742},
+    {"GL_MIRROR_CLAMP_EXT", 0x8742},
+    {"GL_MIRROR_CLAMP_TO_EDGE", 0x8743},
+    {"GL_MIRROR_CLAMP_TO_EDGE_ATI", 0x8743},
+    {"GL_MIRROR_CLAMP_TO_EDGE_EXT", 0x8743},
+    {"GL_MODULATE_ADD_ATI", 0x8744},
+    {"GL_MODULATE_SIGNED_ADD_ATI", 0x8745},
+    {"GL_MODULATE_SUBTRACT_ATI", 0x8746},
+    {"GL_SET_AMD", 0x874A},
+    {"GL_REPLACE_VALUE_AMD", 0x874B},
+    {"GL_STENCIL_OP_VALUE_AMD", 0x874C},
+    {"GL_STENCIL_BACK_OP_VALUE_AMD", 0x874D},
+    {"GL_VERTEX_ATTRIB_ARRAY_LONG", 0x874E},
+    {"GL_DEPTH_STENCIL_MESA", 0x8750},
+    {"GL_UNSIGNED_INT_24_8_MESA", 0x8751},
+    {"GL_UNSIGNED_INT_8_24_REV_MESA", 0x8752},
+    {"GL_UNSIGNED_SHORT_15_1_MESA", 0x8753},
+    {"GL_UNSIGNED_SHORT_1_15_REV_MESA", 0x8754},
+    {"GL_TRACE_MASK_MESA", 0x8755},
+    {"GL_TRACE_NAME_MESA", 0x8756},
+    {"GL_YCBCR_MESA", 0x8757},
+    {"GL_PACK_INVERT_MESA", 0x8758},
+    {"GL_DEBUG_OBJECT_MESA", 0x8759},
+    {"GL_TEXTURE_1D_STACK_MESAX", 0x8759},
+    {"GL_DEBUG_PRINT_MESA", 0x875A},
+    {"GL_TEXTURE_2D_STACK_MESAX", 0x875A},
+    {"GL_DEBUG_ASSERT_MESA", 0x875B},
+    {"GL_PROXY_TEXTURE_1D_STACK_MESAX", 0x875B},
+    {"GL_PROXY_TEXTURE_2D_STACK_MESAX", 0x875C},
+    {"GL_TEXTURE_1D_STACK_BINDING_MESAX", 0x875D},
+    {"GL_TEXTURE_2D_STACK_BINDING_MESAX", 0x875E},
+    {"GL_STATIC_ATI", 0x8760},
+    {"GL_DYNAMIC_ATI", 0x8761},
+    {"GL_PRESERVE_ATI", 0x8762},
+    {"GL_DISCARD_ATI", 0x8763},
+    {"GL_BUFFER_SIZE", 0x8764},
+    {"GL_BUFFER_SIZE_ARB", 0x8764},
+    {"GL_OBJECT_BUFFER_SIZE_ATI", 0x8764},
+    {"GL_BUFFER_USAGE", 0x8765},
+    {"GL_BUFFER_USAGE_ARB", 0x8765},
+    {"GL_OBJECT_BUFFER_USAGE_ATI", 0x8765},
+    {"GL_ARRAY_OBJECT_BUFFER_ATI", 0x8766},
+    {"GL_ARRAY_OBJECT_OFFSET_ATI", 0x8767},
+    {"GL_ELEMENT_ARRAY_ATI", 0x8768},
+    {"GL_ELEMENT_ARRAY_TYPE_ATI", 0x8769},
+    {"GL_ELEMENT_ARRAY_POINTER_ATI", 0x876A},
+    {"GL_MAX_VERTEX_STREAMS_ATI", 0x876B},
+    {"GL_VERTEX_STREAM0_ATI", 0x876C},
+    {"GL_VERTEX_STREAM1_ATI", 0x876D},
+    {"GL_VERTEX_STREAM2_ATI", 0x876E},
+    {"GL_VERTEX_STREAM3_ATI", 0x876F},
+    {"GL_VERTEX_STREAM4_ATI", 0x8770},
+    {"GL_VERTEX_STREAM5_ATI", 0x8771},
+    {"GL_VERTEX_STREAM6_ATI", 0x8772},
+    {"GL_VERTEX_STREAM7_ATI", 0x8773},
+    {"GL_VERTEX_SOURCE_ATI", 0x8774},
+    {"GL_BUMP_ROT_MATRIX_ATI", 0x8775},
+    {"GL_BUMP_ROT_MATRIX_SIZE_ATI", 0x8776},
+    {"GL_BUMP_NUM_TEX_UNITS_ATI", 0x8777},
+    {"GL_BUMP_TEX_UNITS_ATI", 0x8778},
+    {"GL_DUDV_ATI", 0x8779},
+    {"GL_DU8DV8_ATI", 0x877A},
+    {"GL_BUMP_ENVMAP_ATI", 0x877B},
+    {"GL_BUMP_TARGET_ATI", 0x877C},
+    {"GL_VERTEX_SHADER_EXT", 0x8780},
+    {"GL_VERTEX_SHADER_BINDING_EXT", 0x8781},
+    {"GL_OP_INDEX_EXT", 0x8782},
+    {"GL_OP_NEGATE_EXT", 0x8783},
+    {"GL_OP_DOT3_EXT", 0x8784},
+    {"GL_OP_DOT4_EXT", 0x8785},
+    {"GL_OP_MUL_EXT", 0x8786},
+    {"GL_OP_ADD_EXT", 0x8787},
+    {"GL_OP_MADD_EXT", 0x8788},
+    {"GL_OP_FRAC_EXT", 0x8789},
+    {"GL_OP_MAX_EXT", 0x878A},
+    {"GL_OP_MIN_EXT", 0x878B},
+    {"GL_OP_SET_GE_EXT", 0x878C},
+    {"GL_OP_SET_LT_EXT", 0x878D},
+    {"GL_OP_CLAMP_EXT", 0x878E},
+    {"GL_OP_FLOOR_EXT", 0x878F},
+    {"GL_OP_ROUND_EXT", 0x8790},
+    {"GL_OP_EXP_BASE_2_EXT", 0x8791},
+    {"GL_OP_LOG_BASE_2_EXT", 0x8792},
+    {"GL_OP_POWER_EXT", 0x8793},
+    {"GL_OP_RECIP_EXT", 0x8794},
+    {"GL_OP_RECIP_SQRT_EXT", 0x8795},
+    {"GL_OP_SUB_EXT", 0x8796},
+    {"GL_OP_CROSS_PRODUCT_EXT", 0x8797},
+    {"GL_OP_MULTIPLY_MATRIX_EXT", 0x8798},
+    {"GL_OP_MOV_EXT", 0x8799},
+    {"GL_OUTPUT_VERTEX_EXT", 0x879A},
+    {"GL_OUTPUT_COLOR0_EXT", 0x879B},
+    {"GL_OUTPUT_COLOR1_EXT", 0x879C},
+    {"GL_OUTPUT_TEXTURE_COORD0_EXT", 0x879D},
+    {"GL_OUTPUT_TEXTURE_COORD1_EXT", 0x879E},
+    {"GL_OUTPUT_TEXTURE_COORD2_EXT", 0x879F},
+    {"GL_OUTPUT_TEXTURE_COORD3_EXT", 0x87A0},
+    {"GL_OUTPUT_TEXTURE_COORD4_EXT", 0x87A1},
+    {"GL_OUTPUT_TEXTURE_COORD5_EXT", 0x87A2},
+    {"GL_OUTPUT_TEXTURE_COORD6_EXT", 0x87A3},
+    {"GL_OUTPUT_TEXTURE_COORD7_EXT", 0x87A4},
+    {"GL_OUTPUT_TEXTURE_COORD8_EXT", 0x87A5},
+    {"GL_OUTPUT_TEXTURE_COORD9_EXT", 0x87A6},
+    {"GL_OUTPUT_TEXTURE_COORD10_EXT", 0x87A7},
+    {"GL_OUTPUT_TEXTURE_COORD11_EXT", 0x87A8},
+    {"GL_OUTPUT_TEXTURE_COORD12_EXT", 0x87A9},
+    {"GL_OUTPUT_TEXTURE_COORD13_EXT", 0x87AA},
+    {"GL_OUTPUT_TEXTURE_COORD14_EXT", 0x87AB},
+    {"GL_OUTPUT_TEXTURE_COORD15_EXT", 0x87AC},
+    {"GL_OUTPUT_TEXTURE_COORD16_EXT", 0x87AD},
+    {"GL_OUTPUT_TEXTURE_COORD17_EXT", 0x87AE},
+    {"GL_OUTPUT_TEXTURE_COORD18_EXT", 0x87AF},
+    {"GL_OUTPUT_TEXTURE_COORD19_EXT", 0x87B0},
+    {"GL_OUTPUT_TEXTURE_COORD20_EXT", 0x87B1},
+    {"GL_OUTPUT_TEXTURE_COORD21_EXT", 0x87B2},
+    {"GL_OUTPUT_TEXTURE_COORD22_EXT", 0x87B3},
+    {"GL_OUTPUT_TEXTURE_COORD23_EXT", 0x87B4},
+    {"GL_OUTPUT_TEXTURE_COORD24_EXT", 0x87B5},
+    {"GL_OUTPUT_TEXTURE_COORD25_EXT", 0x87B6},
+    {"GL_OUTPUT_TEXTURE_COORD26_EXT", 0x87B7},
+    {"GL_OUTPUT_TEXTURE_COORD27_EXT", 0x87B8},
+    {"GL_OUTPUT_TEXTURE_COORD28_EXT", 0x87B9},
+    {"GL_OUTPUT_TEXTURE_COORD29_EXT", 0x87BA},
+    {"GL_OUTPUT_TEXTURE_COORD30_EXT", 0x87BB},
+    {"GL_OUTPUT_TEXTURE_COORD31_EXT", 0x87BC},
+    {"GL_OUTPUT_FOG_EXT", 0x87BD},
+    {"GL_SCALAR_EXT", 0x87BE},
+    {"GL_VECTOR_EXT", 0x87BF},
+    {"GL_MATRIX_EXT", 0x87C0},
+    {"GL_VARIANT_EXT", 0x87C1},
+    {"GL_INVARIANT_EXT", 0x87C2},
+    {"GL_LOCAL_CONSTANT_EXT", 0x87C3},
+    {"GL_LOCAL_EXT", 0x87C4},
+    {"GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT", 0x87C5},
+    {"GL_MAX_VERTEX_SHADER_VARIANTS_EXT", 0x87C6},
+    {"GL_MAX_VERTEX_SHADER_INVARIANTS_EXT", 0x87C7},
+    {"GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT", 0x87C8},
+    {"GL_MAX_VERTEX_SHADER_LOCALS_EXT", 0x87C9},
+    {"GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT", 0x87CA},
+    {"GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT", 0x87CB},
+    {"GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT", 0x87CC},
+    {"GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT", 0x87CD},
+    {"GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT", 0x87CE},
+    {"GL_VERTEX_SHADER_INSTRUCTIONS_EXT", 0x87CF},
+    {"GL_VERTEX_SHADER_VARIANTS_EXT", 0x87D0},
+    {"GL_VERTEX_SHADER_INVARIANTS_EXT", 0x87D1},
+    {"GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT", 0x87D2},
+    {"GL_VERTEX_SHADER_LOCALS_EXT", 0x87D3},
+    {"GL_VERTEX_SHADER_OPTIMIZED_EXT", 0x87D4},
+    {"GL_X_EXT", 0x87D5},
+    {"GL_Y_EXT", 0x87D6},
+    {"GL_Z_EXT", 0x87D7},
+    {"GL_W_EXT", 0x87D8},
+    {"GL_NEGATIVE_X_EXT", 0x87D9},
+    {"GL_NEGATIVE_Y_EXT", 0x87DA},
+    {"GL_NEGATIVE_Z_EXT", 0x87DB},
+    {"GL_NEGATIVE_W_EXT", 0x87DC},
+    {"GL_ZERO_EXT", 0x87DD},
+    {"GL_ONE_EXT", 0x87DE},
+    {"GL_NEGATIVE_ONE_EXT", 0x87DF},
+    {"GL_NORMALIZED_RANGE_EXT", 0x87E0},
+    {"GL_FULL_RANGE_EXT", 0x87E1},
+    {"GL_CURRENT_VERTEX_EXT", 0x87E2},
+    {"GL_MVP_MATRIX_EXT", 0x87E3},
+    {"GL_VARIANT_VALUE_EXT", 0x87E4},
+    {"GL_VARIANT_DATATYPE_EXT", 0x87E5},
+    {"GL_VARIANT_ARRAY_STRIDE_EXT", 0x87E6},
+    {"GL_VARIANT_ARRAY_TYPE_EXT", 0x87E7},
+    {"GL_VARIANT_ARRAY_EXT", 0x87E8},
+    {"GL_VARIANT_ARRAY_POINTER_EXT", 0x87E9},
+    {"GL_INVARIANT_VALUE_EXT", 0x87EA},
+    {"GL_INVARIANT_DATATYPE_EXT", 0x87EB},
+    {"GL_LOCAL_CONSTANT_VALUE_EXT", 0x87EC},
+    {"GL_LOCAL_CONSTANT_DATATYPE_EXT", 0x87ED},
+    {"GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD", 0x87EE},
+    {"GL_PN_TRIANGLES_ATI", 0x87F0},
+    {"GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI", 0x87F1},
+    {"GL_PN_TRIANGLES_POINT_MODE_ATI", 0x87F2},
+    {"GL_PN_TRIANGLES_NORMAL_MODE_ATI", 0x87F3},
+    {"GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI", 0x87F4},
+    {"GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI", 0x87F5},
+    {"GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI", 0x87F6},
+    {"GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI", 0x87F7},
+    {"GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI", 0x87F8},
+    {"GL_3DC_X_AMD", 0x87F9},
+    {"GL_3DC_XY_AMD", 0x87FA},
+    {"GL_VBO_FREE_MEMORY_ATI", 0x87FB},
+    {"GL_TEXTURE_FREE_MEMORY_ATI", 0x87FC},
+    {"GL_RENDERBUFFER_FREE_MEMORY_ATI", 0x87FD},
+    {"GL_NUM_PROGRAM_BINARY_FORMATS", 0x87FE},
+    {"GL_NUM_PROGRAM_BINARY_FORMATS_OES", 0x87FE},
+    {"GL_PROGRAM_BINARY_FORMATS", 0x87FF},
+    {"GL_PROGRAM_BINARY_FORMATS_OES", 0x87FF},
+    {"GL_STENCIL_BACK_FUNC", 0x8800},
+    {"GL_STENCIL_BACK_FUNC_ATI", 0x8800},
+    {"GL_STENCIL_BACK_FAIL", 0x8801},
+    {"GL_STENCIL_BACK_FAIL_ATI", 0x8801},
+    {"GL_STENCIL_BACK_PASS_DEPTH_FAIL", 0x8802},
+    {"GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI", 0x8802},
+    {"GL_STENCIL_BACK_PASS_DEPTH_PASS", 0x8803},
+    {"GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI", 0x8803},
+    {"GL_FRAGMENT_PROGRAM_ARB", 0x8804},
+    {"GL_PROGRAM_ALU_INSTRUCTIONS_ARB", 0x8805},
+    {"GL_PROGRAM_TEX_INSTRUCTIONS_ARB", 0x8806},
+    {"GL_PROGRAM_TEX_INDIRECTIONS_ARB", 0x8807},
+    {"GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB", 0x8808},
+    {"GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB", 0x8809},
+    {"GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB", 0x880A},
+    {"GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB", 0x880B},
+    {"GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB", 0x880C},
+    {"GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB", 0x880D},
+    {"GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB", 0x880E},
+    {"GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB", 0x880F},
+    {"GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB", 0x8810},
+    {"GL_RGBA32F", 0x8814},
+    {"GL_RGBA32F_ARB", 0x8814},
+    {"GL_RGBA_FLOAT32_APPLE", 0x8814},
+    {"GL_RGBA_FLOAT32_ATI", 0x8814},
+    {"GL_RGB32F", 0x8815},
+    {"GL_RGB32F_ARB", 0x8815},
+    {"GL_RGB_FLOAT32_APPLE", 0x8815},
+    {"GL_RGB_FLOAT32_ATI", 0x8815},
+    {"GL_ALPHA32F_ARB", 0x8816},
+    {"GL_ALPHA_FLOAT32_APPLE", 0x8816},
+    {"GL_ALPHA_FLOAT32_ATI", 0x8816},
+    {"GL_INTENSITY32F_ARB", 0x8817},
+    {"GL_INTENSITY_FLOAT32_APPLE", 0x8817},
+    {"GL_INTENSITY_FLOAT32_ATI", 0x8817},
+    {"GL_LUMINANCE32F_ARB", 0x8818},
+    {"GL_LUMINANCE_FLOAT32_APPLE", 0x8818},
+    {"GL_LUMINANCE_FLOAT32_ATI", 0x8818},
+    {"GL_LUMINANCE_ALPHA32F_ARB", 0x8819},
+    {"GL_LUMINANCE_ALPHA_FLOAT32_APPLE", 0x8819},
+    {"GL_LUMINANCE_ALPHA_FLOAT32_ATI", 0x8819},
+    {"GL_RGBA16F", 0x881A},
+    {"GL_RGBA16F_ARB", 0x881A},
+    {"GL_RGBA16F_EXT", 0x881A},
+    {"GL_RGBA_FLOAT16_APPLE", 0x881A},
+    {"GL_RGBA_FLOAT16_ATI", 0x881A},
+    {"GL_RGB16F", 0x881B},
+    {"GL_RGB16F_ARB", 0x881B},
+    {"GL_RGB16F_EXT", 0x881B},
+    {"GL_RGB_FLOAT16_APPLE", 0x881B},
+    {"GL_RGB_FLOAT16_ATI", 0x881B},
+    {"GL_ALPHA16F_ARB", 0x881C},
+    {"GL_ALPHA_FLOAT16_APPLE", 0x881C},
+    {"GL_ALPHA_FLOAT16_ATI", 0x881C},
+    {"GL_INTENSITY16F_ARB", 0x881D},
+    {"GL_INTENSITY_FLOAT16_APPLE", 0x881D},
+    {"GL_INTENSITY_FLOAT16_ATI", 0x881D},
+    {"GL_LUMINANCE16F_ARB", 0x881E},
+    {"GL_LUMINANCE_FLOAT16_APPLE", 0x881E},
+    {"GL_LUMINANCE_FLOAT16_ATI", 0x881E},
+    {"GL_LUMINANCE_ALPHA16F_ARB", 0x881F},
+    {"GL_LUMINANCE_ALPHA_FLOAT16_APPLE", 0x881F},
+    {"GL_LUMINANCE_ALPHA_FLOAT16_ATI", 0x881F},
+    {"GL_RGBA_FLOAT_MODE_ARB", 0x8820},
+    {"GL_RGBA_FLOAT_MODE_ATI", 0x8820},
+    {"GL_WRITEONLY_RENDERING_QCOM", 0x8823},
+    {"GL_MAX_DRAW_BUFFERS", 0x8824},
+    {"GL_MAX_DRAW_BUFFERS_ARB", 0x8824},
+    {"GL_MAX_DRAW_BUFFERS_ATI", 0x8824},
+    {"GL_MAX_DRAW_BUFFERS_EXT", 0x8824},
+    {"GL_MAX_DRAW_BUFFERS_NV", 0x8824},
+    {"GL_DRAW_BUFFER0", 0x8825},
+    {"GL_DRAW_BUFFER0_ARB", 0x8825},
+    {"GL_DRAW_BUFFER0_ATI", 0x8825},
+    {"GL_DRAW_BUFFER0_EXT", 0x8825},
+    {"GL_DRAW_BUFFER0_NV", 0x8825},
+    {"GL_DRAW_BUFFER1", 0x8826},
+    {"GL_DRAW_BUFFER1_ARB", 0x8826},
+    {"GL_DRAW_BUFFER1_ATI", 0x8826},
+    {"GL_DRAW_BUFFER1_EXT", 0x8826},
+    {"GL_DRAW_BUFFER1_NV", 0x8826},
+    {"GL_DRAW_BUFFER2", 0x8827},
+    {"GL_DRAW_BUFFER2_ARB", 0x8827},
+    {"GL_DRAW_BUFFER2_ATI", 0x8827},
+    {"GL_DRAW_BUFFER2_EXT", 0x8827},
+    {"GL_DRAW_BUFFER2_NV", 0x8827},
+    {"GL_DRAW_BUFFER3", 0x8828},
+    {"GL_DRAW_BUFFER3_ARB", 0x8828},
+    {"GL_DRAW_BUFFER3_ATI", 0x8828},
+    {"GL_DRAW_BUFFER3_EXT", 0x8828},
+    {"GL_DRAW_BUFFER3_NV", 0x8828},
+    {"GL_DRAW_BUFFER4", 0x8829},
+    {"GL_DRAW_BUFFER4_ARB", 0x8829},
+    {"GL_DRAW_BUFFER4_ATI", 0x8829},
+    {"GL_DRAW_BUFFER4_EXT", 0x8829},
+    {"GL_DRAW_BUFFER4_NV", 0x8829},
+    {"GL_DRAW_BUFFER5", 0x882A},
+    {"GL_DRAW_BUFFER5_ARB", 0x882A},
+    {"GL_DRAW_BUFFER5_ATI", 0x882A},
+    {"GL_DRAW_BUFFER5_EXT", 0x882A},
+    {"GL_DRAW_BUFFER5_NV", 0x882A},
+    {"GL_DRAW_BUFFER6", 0x882B},
+    {"GL_DRAW_BUFFER6_ARB", 0x882B},
+    {"GL_DRAW_BUFFER6_ATI", 0x882B},
+    {"GL_DRAW_BUFFER6_EXT", 0x882B},
+    {"GL_DRAW_BUFFER6_NV", 0x882B},
+    {"GL_DRAW_BUFFER7", 0x882C},
+    {"GL_DRAW_BUFFER7_ARB", 0x882C},
+    {"GL_DRAW_BUFFER7_ATI", 0x882C},
+    {"GL_DRAW_BUFFER7_EXT", 0x882C},
+    {"GL_DRAW_BUFFER7_NV", 0x882C},
+    {"GL_DRAW_BUFFER8", 0x882D},
+    {"GL_DRAW_BUFFER8_ARB", 0x882D},
+    {"GL_DRAW_BUFFER8_ATI", 0x882D},
+    {"GL_DRAW_BUFFER8_EXT", 0x882D},
+    {"GL_DRAW_BUFFER8_NV", 0x882D},
+    {"GL_DRAW_BUFFER9", 0x882E},
+    {"GL_DRAW_BUFFER9_ARB", 0x882E},
+    {"GL_DRAW_BUFFER9_ATI", 0x882E},
+    {"GL_DRAW_BUFFER9_EXT", 0x882E},
+    {"GL_DRAW_BUFFER9_NV", 0x882E},
+    {"GL_DRAW_BUFFER10", 0x882F},
+    {"GL_DRAW_BUFFER10_ARB", 0x882F},
+    {"GL_DRAW_BUFFER10_ATI", 0x882F},
+    {"GL_DRAW_BUFFER10_EXT", 0x882F},
+    {"GL_DRAW_BUFFER10_NV", 0x882F},
+    {"GL_DRAW_BUFFER11", 0x8830},
+    {"GL_DRAW_BUFFER11_ARB", 0x8830},
+    {"GL_DRAW_BUFFER11_ATI", 0x8830},
+    {"GL_DRAW_BUFFER11_EXT", 0x8830},
+    {"GL_DRAW_BUFFER11_NV", 0x8830},
+    {"GL_DRAW_BUFFER12", 0x8831},
+    {"GL_DRAW_BUFFER12_ARB", 0x8831},
+    {"GL_DRAW_BUFFER12_ATI", 0x8831},
+    {"GL_DRAW_BUFFER12_EXT", 0x8831},
+    {"GL_DRAW_BUFFER12_NV", 0x8831},
+    {"GL_DRAW_BUFFER13", 0x8832},
+    {"GL_DRAW_BUFFER13_ARB", 0x8832},
+    {"GL_DRAW_BUFFER13_ATI", 0x8832},
+    {"GL_DRAW_BUFFER13_EXT", 0x8832},
+    {"GL_DRAW_BUFFER13_NV", 0x8832},
+    {"GL_DRAW_BUFFER14", 0x8833},
+    {"GL_DRAW_BUFFER14_ARB", 0x8833},
+    {"GL_DRAW_BUFFER14_ATI", 0x8833},
+    {"GL_DRAW_BUFFER14_EXT", 0x8833},
+    {"GL_DRAW_BUFFER14_NV", 0x8833},
+    {"GL_DRAW_BUFFER15", 0x8834},
+    {"GL_DRAW_BUFFER15_ARB", 0x8834},
+    {"GL_DRAW_BUFFER15_ATI", 0x8834},
+    {"GL_DRAW_BUFFER15_EXT", 0x8834},
+    {"GL_DRAW_BUFFER15_NV", 0x8834},
+    {"GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI", 0x8835},
+    {"GL_BLEND_EQUATION_ALPHA", 0x883D},
+    {"GL_BLEND_EQUATION_ALPHA_EXT", 0x883D},
+    {"GL_BLEND_EQUATION_ALPHA_OES", 0x883D},
+    {"GL_SUBSAMPLE_DISTANCE_AMD", 0x883F},
+    {"GL_MATRIX_PALETTE_ARB", 0x8840},
+    {"GL_MATRIX_PALETTE_OES", 0x8840},
+    {"GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB", 0x8841},
+    {"GL_MAX_PALETTE_MATRICES_ARB", 0x8842},
+    {"GL_MAX_PALETTE_MATRICES_OES", 0x8842},
+    {"GL_CURRENT_PALETTE_MATRIX_ARB", 0x8843},
+    {"GL_CURRENT_PALETTE_MATRIX_OES", 0x8843},
+    {"GL_MATRIX_INDEX_ARRAY_ARB", 0x8844},
+    {"GL_MATRIX_INDEX_ARRAY_OES", 0x8844},
+    {"GL_CURRENT_MATRIX_INDEX_ARB", 0x8845},
+    {"GL_MATRIX_INDEX_ARRAY_SIZE_ARB", 0x8846},
+    {"GL_MATRIX_INDEX_ARRAY_SIZE_OES", 0x8846},
+    {"GL_MATRIX_INDEX_ARRAY_TYPE_ARB", 0x8847},
+    {"GL_MATRIX_INDEX_ARRAY_TYPE_OES", 0x8847},
+    {"GL_MATRIX_INDEX_ARRAY_STRIDE_ARB", 0x8848},
+    {"GL_MATRIX_INDEX_ARRAY_STRIDE_OES", 0x8848},
+    {"GL_MATRIX_INDEX_ARRAY_POINTER_ARB", 0x8849},
+    {"GL_MATRIX_INDEX_ARRAY_POINTER_OES", 0x8849},
+    {"GL_TEXTURE_DEPTH_SIZE", 0x884A},
+    {"GL_TEXTURE_DEPTH_SIZE_ARB", 0x884A},
+    {"GL_DEPTH_TEXTURE_MODE", 0x884B},
+    {"GL_DEPTH_TEXTURE_MODE_ARB", 0x884B},
+    {"GL_TEXTURE_COMPARE_MODE", 0x884C},
+    {"GL_TEXTURE_COMPARE_MODE_ARB", 0x884C},
+    {"GL_TEXTURE_COMPARE_MODE_EXT", 0x884C},
+    {"GL_TEXTURE_COMPARE_FUNC", 0x884D},
+    {"GL_TEXTURE_COMPARE_FUNC_ARB", 0x884D},
+    {"GL_TEXTURE_COMPARE_FUNC_EXT", 0x884D},
+    {"GL_COMPARE_R_TO_TEXTURE", 0x884E},
+    {"GL_COMPARE_R_TO_TEXTURE_ARB", 0x884E},
+    {"GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT", 0x884E},
+    {"GL_COMPARE_REF_TO_TEXTURE", 0x884E},
+    {"GL_COMPARE_REF_TO_TEXTURE_EXT", 0x884E},
+    {"GL_TEXTURE_CUBE_MAP_SEAMLESS", 0x884F},
+    {"GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV", 0x8850},
+    {"GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV", 0x8851},
+    {"GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV", 0x8852},
+    {"GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV", 0x8853},
+    {"GL_OFFSET_HILO_TEXTURE_2D_NV", 0x8854},
+    {"GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV", 0x8855},
+    {"GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV", 0x8856},
+    {"GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV", 0x8857},
+    {"GL_DEPENDENT_HILO_TEXTURE_2D_NV", 0x8858},
+    {"GL_DEPENDENT_RGB_TEXTURE_3D_NV", 0x8859},
+    {"GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV", 0x885A},
+    {"GL_DOT_PRODUCT_PASS_THROUGH_NV", 0x885B},
+    {"GL_DOT_PRODUCT_TEXTURE_1D_NV", 0x885C},
+    {"GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV", 0x885D},
+    {"GL_HILO8_NV", 0x885E},
+    {"GL_SIGNED_HILO8_NV", 0x885F},
+    {"GL_FORCE_BLUE_TO_ONE_NV", 0x8860},
+    {"GL_POINT_SPRITE", 0x8861},
+    {"GL_POINT_SPRITE_ARB", 0x8861},
+    {"GL_POINT_SPRITE_NV", 0x8861},
+    {"GL_POINT_SPRITE_OES", 0x8861},
+    {"GL_COORD_REPLACE", 0x8862},
+    {"GL_COORD_REPLACE_ARB", 0x8862},
+    {"GL_COORD_REPLACE_NV", 0x8862},
+    {"GL_COORD_REPLACE_OES", 0x8862},
+    {"GL_POINT_SPRITE_R_MODE_NV", 0x8863},
+    {"GL_PIXEL_COUNTER_BITS_NV", 0x8864},
+    {"GL_QUERY_COUNTER_BITS", 0x8864},
+    {"GL_QUERY_COUNTER_BITS_ARB", 0x8864},
+    {"GL_QUERY_COUNTER_BITS_EXT", 0x8864},
+    {"GL_CURRENT_OCCLUSION_QUERY_ID_NV", 0x8865},
+    {"GL_CURRENT_QUERY", 0x8865},
+    {"GL_CURRENT_QUERY_ARB", 0x8865},
+    {"GL_CURRENT_QUERY_EXT", 0x8865},
+    {"GL_PIXEL_COUNT_NV", 0x8866},
+    {"GL_QUERY_RESULT", 0x8866},
+    {"GL_QUERY_RESULT_ARB", 0x8866},
+    {"GL_QUERY_RESULT_EXT", 0x8866},
+    {"GL_PIXEL_COUNT_AVAILABLE_NV", 0x8867},
+    {"GL_QUERY_RESULT_AVAILABLE", 0x8867},
+    {"GL_QUERY_RESULT_AVAILABLE_ARB", 0x8867},
+    {"GL_QUERY_RESULT_AVAILABLE_EXT", 0x8867},
+    {"GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV", 0x8868},
+    {"GL_MAX_VERTEX_ATTRIBS", 0x8869},
+    {"GL_MAX_VERTEX_ATTRIBS_ARB", 0x8869},
+    {"GL_VERTEX_ATTRIB_ARRAY_NORMALIZED", 0x886A},
+    {"GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB", 0x886A},
+    {"GL_MAX_TESS_CONTROL_INPUT_COMPONENTS", 0x886C},
+    {"GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS", 0x886D},
+    {"GL_DEPTH_STENCIL_TO_RGBA_NV", 0x886E},
+    {"GL_DEPTH_STENCIL_TO_BGRA_NV", 0x886F},
+    {"GL_FRAGMENT_PROGRAM_NV", 0x8870},
+    {"GL_MAX_TEXTURE_COORDS", 0x8871},
+    {"GL_MAX_TEXTURE_COORDS_ARB", 0x8871},
+    {"GL_MAX_TEXTURE_COORDS_NV", 0x8871},
+    {"GL_MAX_TEXTURE_IMAGE_UNITS", 0x8872},
+    {"GL_MAX_TEXTURE_IMAGE_UNITS_ARB", 0x8872},
+    {"GL_MAX_TEXTURE_IMAGE_UNITS_NV", 0x8872},
+    {"GL_FRAGMENT_PROGRAM_BINDING_NV", 0x8873},
+    {"GL_PROGRAM_ERROR_STRING_ARB", 0x8874},
+    {"GL_PROGRAM_ERROR_STRING_NV", 0x8874},
+    {"GL_PROGRAM_FORMAT_ASCII_ARB", 0x8875},
+    {"GL_PROGRAM_FORMAT_ARB", 0x8876},
+    {"GL_WRITE_PIXEL_DATA_RANGE_NV", 0x8878},
+    {"GL_READ_PIXEL_DATA_RANGE_NV", 0x8879},
+    {"GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV", 0x887A},
+    {"GL_READ_PIXEL_DATA_RANGE_LENGTH_NV", 0x887B},
+    {"GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV", 0x887C},
+    {"GL_READ_PIXEL_DATA_RANGE_POINTER_NV", 0x887D},
+    {"GL_GEOMETRY_SHADER_INVOCATIONS", 0x887F},
+    {"GL_FLOAT_R_NV", 0x8880},
+    {"GL_FLOAT_RG_NV", 0x8881},
+    {"GL_FLOAT_RGB_NV", 0x8882},
+    {"GL_FLOAT_RGBA_NV", 0x8883},
+    {"GL_FLOAT_R16_NV", 0x8884},
+    {"GL_FLOAT_R32_NV", 0x8885},
+    {"GL_FLOAT_RG16_NV", 0x8886},
+    {"GL_FLOAT_RG32_NV", 0x8887},
+    {"GL_FLOAT_RGB16_NV", 0x8888},
+    {"GL_FLOAT_RGB32_NV", 0x8889},
+    {"GL_FLOAT_RGBA16_NV", 0x888A},
+    {"GL_FLOAT_RGBA32_NV", 0x888B},
+    {"GL_TEXTURE_FLOAT_COMPONENTS_NV", 0x888C},
+    {"GL_FLOAT_CLEAR_COLOR_VALUE_NV", 0x888D},
+    {"GL_FLOAT_RGBA_MODE_NV", 0x888E},
+    {"GL_TEXTURE_UNSIGNED_REMAP_MODE_NV", 0x888F},
+    {"GL_DEPTH_BOUNDS_TEST_EXT", 0x8890},
+    {"GL_DEPTH_BOUNDS_EXT", 0x8891},
+    {"GL_ARRAY_BUFFER", 0x8892},
+    {"GL_ARRAY_BUFFER_ARB", 0x8892},
+    {"GL_ELEMENT_ARRAY_BUFFER", 0x8893},
+    {"GL_ELEMENT_ARRAY_BUFFER_ARB", 0x8893},
+    {"GL_ARRAY_BUFFER_BINDING", 0x8894},
+    {"GL_ARRAY_BUFFER_BINDING_ARB", 0x8894},
+    {"GL_ELEMENT_ARRAY_BUFFER_BINDING", 0x8895},
+    {"GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB", 0x8895},
+    {"GL_VERTEX_ARRAY_BUFFER_BINDING", 0x8896},
+    {"GL_VERTEX_ARRAY_BUFFER_BINDING_ARB", 0x8896},
+    {"GL_NORMAL_ARRAY_BUFFER_BINDING", 0x8897},
+    {"GL_NORMAL_ARRAY_BUFFER_BINDING_ARB", 0x8897},
+    {"GL_COLOR_ARRAY_BUFFER_BINDING", 0x8898},
+    {"GL_COLOR_ARRAY_BUFFER_BINDING_ARB", 0x8898},
+    {"GL_INDEX_ARRAY_BUFFER_BINDING", 0x8899},
+    {"GL_INDEX_ARRAY_BUFFER_BINDING_ARB", 0x8899},
+    {"GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING", 0x889A},
+    {"GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB", 0x889A},
+    {"GL_EDGE_FLAG_ARRAY_BUFFER_BINDING", 0x889B},
+    {"GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB", 0x889B},
+    {"GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING", 0x889C},
+    {"GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB", 0x889C},
+    {"GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB", 0x889D},
+    {"GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING", 0x889D},
+    {"GL_FOG_COORD_ARRAY_BUFFER_BINDING", 0x889D},
+    {"GL_WEIGHT_ARRAY_BUFFER_BINDING", 0x889E},
+    {"GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB", 0x889E},
+    {"GL_WEIGHT_ARRAY_BUFFER_BINDING_OES", 0x889E},
+    {"GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING", 0x889F},
+    {"GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB", 0x889F},
+    {"GL_PROGRAM_INSTRUCTIONS_ARB", 0x88A0},
+    {"GL_MAX_PROGRAM_INSTRUCTIONS_ARB", 0x88A1},
+    {"GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB", 0x88A2},
+    {"GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB", 0x88A3},
+    {"GL_PROGRAM_TEMPORARIES_ARB", 0x88A4},
+    {"GL_MAX_PROGRAM_TEMPORARIES_ARB", 0x88A5},
+    {"GL_PROGRAM_NATIVE_TEMPORARIES_ARB", 0x88A6},
+    {"GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB", 0x88A7},
+    {"GL_PROGRAM_PARAMETERS_ARB", 0x88A8},
+    {"GL_MAX_PROGRAM_PARAMETERS_ARB", 0x88A9},
+    {"GL_PROGRAM_NATIVE_PARAMETERS_ARB", 0x88AA},
+    {"GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB", 0x88AB},
+    {"GL_PROGRAM_ATTRIBS_ARB", 0x88AC},
+    {"GL_MAX_PROGRAM_ATTRIBS_ARB", 0x88AD},
+    {"GL_PROGRAM_NATIVE_ATTRIBS_ARB", 0x88AE},
+    {"GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB", 0x88AF},
+    {"GL_PROGRAM_ADDRESS_REGISTERS_ARB", 0x88B0},
+    {"GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB", 0x88B1},
+    {"GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB", 0x88B2},
+    {"GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB", 0x88B3},
+    {"GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB", 0x88B4},
+    {"GL_MAX_PROGRAM_ENV_PARAMETERS_ARB", 0x88B5},
+    {"GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB", 0x88B6},
+    {"GL_TRANSPOSE_CURRENT_MATRIX_ARB", 0x88B7},
+    {"GL_READ_ONLY", 0x88B8},
+    {"GL_READ_ONLY_ARB", 0x88B8},
+    {"GL_WRITE_ONLY", 0x88B9},
+    {"GL_WRITE_ONLY_ARB", 0x88B9},
+    {"GL_WRITE_ONLY_OES", 0x88B9},
+    {"GL_READ_WRITE", 0x88BA},
+    {"GL_READ_WRITE_ARB", 0x88BA},
+    {"GL_BUFFER_ACCESS", 0x88BB},
+    {"GL_BUFFER_ACCESS_ARB", 0x88BB},
+    {"GL_BUFFER_ACCESS_OES", 0x88BB},
+    {"GL_BUFFER_MAPPED", 0x88BC},
+    {"GL_BUFFER_MAPPED_ARB", 0x88BC},
+    {"GL_BUFFER_MAPPED_OES", 0x88BC},
+    {"GL_BUFFER_MAP_POINTER", 0x88BD},
+    {"GL_BUFFER_MAP_POINTER_ARB", 0x88BD},
+    {"GL_BUFFER_MAP_POINTER_OES", 0x88BD},
+    {"GL_WRITE_DISCARD_NV", 0x88BE},
+    {"GL_TIME_ELAPSED", 0x88BF},
+    {"GL_TIME_ELAPSED_EXT", 0x88BF},
+    {"GL_MATRIX0_ARB", 0x88C0},
+    {"GL_MATRIX1_ARB", 0x88C1},
+    {"GL_MATRIX2_ARB", 0x88C2},
+    {"GL_MATRIX3_ARB", 0x88C3},
+    {"GL_MATRIX4_ARB", 0x88C4},
+    {"GL_MATRIX5_ARB", 0x88C5},
+    {"GL_MATRIX6_ARB", 0x88C6},
+    {"GL_MATRIX7_ARB", 0x88C7},
+    {"GL_MATRIX8_ARB", 0x88C8},
+    {"GL_MATRIX9_ARB", 0x88C9},
+    {"GL_MATRIX10_ARB", 0x88CA},
+    {"GL_MATRIX11_ARB", 0x88CB},
+    {"GL_MATRIX12_ARB", 0x88CC},
+    {"GL_MATRIX13_ARB", 0x88CD},
+    {"GL_MATRIX14_ARB", 0x88CE},
+    {"GL_MATRIX15_ARB", 0x88CF},
+    {"GL_MATRIX16_ARB", 0x88D0},
+    {"GL_MATRIX17_ARB", 0x88D1},
+    {"GL_MATRIX18_ARB", 0x88D2},
+    {"GL_MATRIX19_ARB", 0x88D3},
+    {"GL_MATRIX20_ARB", 0x88D4},
+    {"GL_MATRIX21_ARB", 0x88D5},
+    {"GL_MATRIX22_ARB", 0x88D6},
+    {"GL_MATRIX23_ARB", 0x88D7},
+    {"GL_MATRIX24_ARB", 0x88D8},
+    {"GL_MATRIX25_ARB", 0x88D9},
+    {"GL_MATRIX26_ARB", 0x88DA},
+    {"GL_MATRIX27_ARB", 0x88DB},
+    {"GL_MATRIX28_ARB", 0x88DC},
+    {"GL_MATRIX29_ARB", 0x88DD},
+    {"GL_MATRIX30_ARB", 0x88DE},
+    {"GL_MATRIX31_ARB", 0x88DF},
+    {"GL_STREAM_DRAW", 0x88E0},
+    {"GL_STREAM_DRAW_ARB", 0x88E0},
+    {"GL_STREAM_READ", 0x88E1},
+    {"GL_STREAM_READ_ARB", 0x88E1},
+    {"GL_STREAM_COPY", 0x88E2},
+    {"GL_STREAM_COPY_ARB", 0x88E2},
+    {"GL_STATIC_DRAW", 0x88E4},
+    {"GL_STATIC_DRAW_ARB", 0x88E4},
+    {"GL_STATIC_READ", 0x88E5},
+    {"GL_STATIC_READ_ARB", 0x88E5},
+    {"GL_STATIC_COPY", 0x88E6},
+    {"GL_STATIC_COPY_ARB", 0x88E6},
+    {"GL_DYNAMIC_DRAW", 0x88E8},
+    {"GL_DYNAMIC_DRAW_ARB", 0x88E8},
+    {"GL_DYNAMIC_READ", 0x88E9},
+    {"GL_DYNAMIC_READ_ARB", 0x88E9},
+    {"GL_DYNAMIC_COPY", 0x88EA},
+    {"GL_DYNAMIC_COPY_ARB", 0x88EA},
+    {"GL_PIXEL_PACK_BUFFER", 0x88EB},
+    {"GL_PIXEL_PACK_BUFFER_ARB", 0x88EB},
+    {"GL_PIXEL_PACK_BUFFER_EXT", 0x88EB},
+    {"GL_PIXEL_UNPACK_BUFFER", 0x88EC},
+    {"GL_PIXEL_UNPACK_BUFFER_ARB", 0x88EC},
+    {"GL_PIXEL_UNPACK_BUFFER_EXT", 0x88EC},
+    {"GL_PIXEL_PACK_BUFFER_BINDING", 0x88ED},
+    {"GL_PIXEL_PACK_BUFFER_BINDING_ARB", 0x88ED},
+    {"GL_PIXEL_PACK_BUFFER_BINDING_EXT", 0x88ED},
+    {"GL_ETC1_SRGB8_NV", 0x88EE},
+    {"GL_PIXEL_UNPACK_BUFFER_BINDING", 0x88EF},
+    {"GL_PIXEL_UNPACK_BUFFER_BINDING_ARB", 0x88EF},
+    {"GL_PIXEL_UNPACK_BUFFER_BINDING_EXT", 0x88EF},
+    {"GL_DEPTH24_STENCIL8", 0x88F0},
+    {"GL_DEPTH24_STENCIL8_EXT", 0x88F0},
+    {"GL_DEPTH24_STENCIL8_OES", 0x88F0},
+    {"GL_TEXTURE_STENCIL_SIZE", 0x88F1},
+    {"GL_TEXTURE_STENCIL_SIZE_EXT", 0x88F1},
+    {"GL_STENCIL_TAG_BITS_EXT", 0x88F2},
+    {"GL_STENCIL_CLEAR_TAG_VALUE_EXT", 0x88F3},
+    {"GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV", 0x88F4},
+    {"GL_MAX_PROGRAM_CALL_DEPTH_NV", 0x88F5},
+    {"GL_MAX_PROGRAM_IF_DEPTH_NV", 0x88F6},
+    {"GL_MAX_PROGRAM_LOOP_DEPTH_NV", 0x88F7},
+    {"GL_MAX_PROGRAM_LOOP_COUNT_NV", 0x88F8},
+    {"GL_SRC1_COLOR", 0x88F9},
+    {"GL_ONE_MINUS_SRC1_COLOR", 0x88FA},
+    {"GL_ONE_MINUS_SRC1_ALPHA", 0x88FB},
+    {"GL_MAX_DUAL_SOURCE_DRAW_BUFFERS", 0x88FC},
+    {"GL_VERTEX_ATTRIB_ARRAY_INTEGER", 0x88FD},
+    {"GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT", 0x88FD},
+    {"GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV", 0x88FD},
+    {"GL_VERTEX_ATTRIB_ARRAY_DIVISOR", 0x88FE},
+    {"GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE", 0x88FE},
+    {"GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB", 0x88FE},
+    {"GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV", 0x88FE},
+    {"GL_MAX_ARRAY_TEXTURE_LAYERS", 0x88FF},
+    {"GL_MAX_ARRAY_TEXTURE_LAYERS_EXT", 0x88FF},
+    {"GL_MIN_PROGRAM_TEXEL_OFFSET", 0x8904},
+    {"GL_MIN_PROGRAM_TEXEL_OFFSET_EXT", 0x8904},
+    {"GL_MIN_PROGRAM_TEXEL_OFFSET_NV", 0x8904},
+    {"GL_MAX_PROGRAM_TEXEL_OFFSET", 0x8905},
+    {"GL_MAX_PROGRAM_TEXEL_OFFSET_EXT", 0x8905},
+    {"GL_MAX_PROGRAM_TEXEL_OFFSET_NV", 0x8905},
+    {"GL_PROGRAM_ATTRIB_COMPONENTS_NV", 0x8906},
+    {"GL_PROGRAM_RESULT_COMPONENTS_NV", 0x8907},
+    {"GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV", 0x8908},
+    {"GL_MAX_PROGRAM_RESULT_COMPONENTS_NV", 0x8909},
+    {"GL_STENCIL_TEST_TWO_SIDE_EXT", 0x8910},
+    {"GL_ACTIVE_STENCIL_FACE_EXT", 0x8911},
+    {"GL_MIRROR_CLAMP_TO_BORDER_EXT", 0x8912},
+    {"GL_SAMPLES_PASSED", 0x8914},
+    {"GL_SAMPLES_PASSED_ARB", 0x8914},
+    {"GL_GEOMETRY_VERTICES_OUT", 0x8916},
+    {"GL_GEOMETRY_INPUT_TYPE", 0x8917},
+    {"GL_GEOMETRY_OUTPUT_TYPE", 0x8918},
+    {"GL_SAMPLER_BINDING", 0x8919},
+    {"GL_CLAMP_VERTEX_COLOR", 0x891A},
+    {"GL_CLAMP_VERTEX_COLOR_ARB", 0x891A},
+    {"GL_CLAMP_FRAGMENT_COLOR", 0x891B},
+    {"GL_CLAMP_FRAGMENT_COLOR_ARB", 0x891B},
+    {"GL_CLAMP_READ_COLOR", 0x891C},
+    {"GL_CLAMP_READ_COLOR_ARB", 0x891C},
+    {"GL_FIXED_ONLY", 0x891D},
+    {"GL_FIXED_ONLY_ARB", 0x891D},
+    {"GL_TESS_CONTROL_PROGRAM_NV", 0x891E},
+    {"GL_TESS_EVALUATION_PROGRAM_NV", 0x891F},
+    {"GL_FRAGMENT_SHADER_ATI", 0x8920},
+    {"GL_REG_0_ATI", 0x8921},
+    {"GL_REG_1_ATI", 0x8922},
+    {"GL_REG_2_ATI", 0x8923},
+    {"GL_REG_3_ATI", 0x8924},
+    {"GL_REG_4_ATI", 0x8925},
+    {"GL_REG_5_ATI", 0x8926},
+    {"GL_REG_6_ATI", 0x8927},
+    {"GL_REG_7_ATI", 0x8928},
+    {"GL_REG_8_ATI", 0x8929},
+    {"GL_REG_9_ATI", 0x892A},
+    {"GL_REG_10_ATI", 0x892B},
+    {"GL_REG_11_ATI", 0x892C},
+    {"GL_REG_12_ATI", 0x892D},
+    {"GL_REG_13_ATI", 0x892E},
+    {"GL_REG_14_ATI", 0x892F},
+    {"GL_REG_15_ATI", 0x8930},
+    {"GL_REG_16_ATI", 0x8931},
+    {"GL_REG_17_ATI", 0x8932},
+    {"GL_REG_18_ATI", 0x8933},
+    {"GL_REG_19_ATI", 0x8934},
+    {"GL_REG_20_ATI", 0x8935},
+    {"GL_REG_21_ATI", 0x8936},
+    {"GL_REG_22_ATI", 0x8937},
+    {"GL_REG_23_ATI", 0x8938},
+    {"GL_REG_24_ATI", 0x8939},
+    {"GL_REG_25_ATI", 0x893A},
+    {"GL_REG_26_ATI", 0x893B},
+    {"GL_REG_27_ATI", 0x893C},
+    {"GL_REG_28_ATI", 0x893D},
+    {"GL_REG_29_ATI", 0x893E},
+    {"GL_REG_30_ATI", 0x893F},
+    {"GL_REG_31_ATI", 0x8940},
+    {"GL_CON_0_ATI", 0x8941},
+    {"GL_CON_1_ATI", 0x8942},
+    {"GL_CON_2_ATI", 0x8943},
+    {"GL_CON_3_ATI", 0x8944},
+    {"GL_CON_4_ATI", 0x8945},
+    {"GL_CON_5_ATI", 0x8946},
+    {"GL_CON_6_ATI", 0x8947},
+    {"GL_CON_7_ATI", 0x8948},
+    {"GL_CON_8_ATI", 0x8949},
+    {"GL_CON_9_ATI", 0x894A},
+    {"GL_CON_10_ATI", 0x894B},
+    {"GL_CON_11_ATI", 0x894C},
+    {"GL_CON_12_ATI", 0x894D},
+    {"GL_CON_13_ATI", 0x894E},
+    {"GL_CON_14_ATI", 0x894F},
+    {"GL_CON_15_ATI", 0x8950},
+    {"GL_CON_16_ATI", 0x8951},
+    {"GL_CON_17_ATI", 0x8952},
+    {"GL_CON_18_ATI", 0x8953},
+    {"GL_CON_19_ATI", 0x8954},
+    {"GL_CON_20_ATI", 0x8955},
+    {"GL_CON_21_ATI", 0x8956},
+    {"GL_CON_22_ATI", 0x8957},
+    {"GL_CON_23_ATI", 0x8958},
+    {"GL_CON_24_ATI", 0x8959},
+    {"GL_CON_25_ATI", 0x895A},
+    {"GL_CON_26_ATI", 0x895B},
+    {"GL_CON_27_ATI", 0x895C},
+    {"GL_CON_28_ATI", 0x895D},
+    {"GL_CON_29_ATI", 0x895E},
+    {"GL_CON_30_ATI", 0x895F},
+    {"GL_CON_31_ATI", 0x8960},
+    {"GL_MOV_ATI", 0x8961},
+    {"GL_ADD_ATI", 0x8963},
+    {"GL_MUL_ATI", 0x8964},
+    {"GL_SUB_ATI", 0x8965},
+    {"GL_DOT3_ATI", 0x8966},
+    {"GL_DOT4_ATI", 0x8967},
+    {"GL_MAD_ATI", 0x8968},
+    {"GL_LERP_ATI", 0x8969},
+    {"GL_CND_ATI", 0x896A},
+    {"GL_CND0_ATI", 0x896B},
+    {"GL_DOT2_ADD_ATI", 0x896C},
+    {"GL_SECONDARY_INTERPOLATOR_ATI", 0x896D},
+    {"GL_NUM_FRAGMENT_REGISTERS_ATI", 0x896E},
+    {"GL_NUM_FRAGMENT_CONSTANTS_ATI", 0x896F},
+    {"GL_NUM_PASSES_ATI", 0x8970},
+    {"GL_NUM_INSTRUCTIONS_PER_PASS_ATI", 0x8971},
+    {"GL_NUM_INSTRUCTIONS_TOTAL_ATI", 0x8972},
+    {"GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI", 0x8973},
+    {"GL_NUM_LOOPBACK_COMPONENTS_ATI", 0x8974},
+    {"GL_COLOR_ALPHA_PAIRING_ATI", 0x8975},
+    {"GL_SWIZZLE_STR_ATI", 0x8976},
+    {"GL_SWIZZLE_STQ_ATI", 0x8977},
+    {"GL_SWIZZLE_STR_DR_ATI", 0x8978},
+    {"GL_SWIZZLE_STQ_DQ_ATI", 0x8979},
+    {"GL_SWIZZLE_STRQ_ATI", 0x897A},
+    {"GL_SWIZZLE_STRQ_DQ_ATI", 0x897B},
+    {"GL_INTERLACE_OML", 0x8980},
+    {"GL_INTERLACE_READ_OML", 0x8981},
+    {"GL_FORMAT_SUBSAMPLE_24_24_OML", 0x8982},
+    {"GL_FORMAT_SUBSAMPLE_244_244_OML", 0x8983},
+    {"GL_PACK_RESAMPLE_OML", 0x8984},
+    {"GL_UNPACK_RESAMPLE_OML", 0x8985},
+    {"GL_RESAMPLE_REPLICATE_OML", 0x8986},
+    {"GL_RESAMPLE_ZERO_FILL_OML", 0x8987},
+    {"GL_RESAMPLE_AVERAGE_OML", 0x8988},
+    {"GL_RESAMPLE_DECIMATE_OML", 0x8989},
+    {"GL_POINT_SIZE_ARRAY_TYPE_OES", 0x898A},
+    {"GL_POINT_SIZE_ARRAY_STRIDE_OES", 0x898B},
+    {"GL_POINT_SIZE_ARRAY_POINTER_OES", 0x898C},
+    {"GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES", 0x898D},
+    {"GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES", 0x898E},
+    {"GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES", 0x898F},
+    {"GL_VERTEX_ATTRIB_MAP1_APPLE", 0x8A00},
+    {"GL_VERTEX_ATTRIB_MAP2_APPLE", 0x8A01},
+    {"GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE", 0x8A02},
+    {"GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE", 0x8A03},
+    {"GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE", 0x8A04},
+    {"GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE", 0x8A05},
+    {"GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE", 0x8A06},
+    {"GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE", 0x8A07},
+    {"GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE", 0x8A08},
+    {"GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE", 0x8A09},
+    {"GL_DRAW_PIXELS_APPLE", 0x8A0A},
+    {"GL_FENCE_APPLE", 0x8A0B},
+    {"GL_ELEMENT_ARRAY_APPLE", 0x8A0C},
+    {"GL_ELEMENT_ARRAY_TYPE_APPLE", 0x8A0D},
+    {"GL_ELEMENT_ARRAY_POINTER_APPLE", 0x8A0E},
+    {"GL_COLOR_FLOAT_APPLE", 0x8A0F},
+    {"GL_UNIFORM_BUFFER", 0x8A11},
+    {"GL_BUFFER_SERIALIZED_MODIFY_APPLE", 0x8A12},
+    {"GL_BUFFER_FLUSHING_UNMAP_APPLE", 0x8A13},
+    {"GL_AUX_DEPTH_STENCIL_APPLE", 0x8A14},
+    {"GL_PACK_ROW_BYTES_APPLE", 0x8A15},
+    {"GL_UNPACK_ROW_BYTES_APPLE", 0x8A16},
+    {"GL_RELEASED_APPLE", 0x8A19},
+    {"GL_VOLATILE_APPLE", 0x8A1A},
+    {"GL_RETAINED_APPLE", 0x8A1B},
+    {"GL_UNDEFINED_APPLE", 0x8A1C},
+    {"GL_PURGEABLE_APPLE", 0x8A1D},
+    {"GL_RGB_422_APPLE", 0x8A1F},
+    {"GL_UNIFORM_BUFFER_BINDING", 0x8A28},
+    {"GL_UNIFORM_BUFFER_START", 0x8A29},
+    {"GL_UNIFORM_BUFFER_SIZE", 0x8A2A},
+    {"GL_MAX_VERTEX_UNIFORM_BLOCKS", 0x8A2B},
+    {"GL_MAX_GEOMETRY_UNIFORM_BLOCKS", 0x8A2C},
+    {"GL_MAX_FRAGMENT_UNIFORM_BLOCKS", 0x8A2D},
+    {"GL_MAX_COMBINED_UNIFORM_BLOCKS", 0x8A2E},
+    {"GL_MAX_UNIFORM_BUFFER_BINDINGS", 0x8A2F},
+    {"GL_MAX_UNIFORM_BLOCK_SIZE", 0x8A30},
+    {"GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS", 0x8A31},
+    {"GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS", 0x8A32},
+    {"GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS", 0x8A33},
+    {"GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT", 0x8A34},
+    {"GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH", 0x8A35},
+    {"GL_ACTIVE_UNIFORM_BLOCKS", 0x8A36},
+    {"GL_UNIFORM_TYPE", 0x8A37},
+    {"GL_UNIFORM_SIZE", 0x8A38},
+    {"GL_UNIFORM_NAME_LENGTH", 0x8A39},
+    {"GL_UNIFORM_BLOCK_INDEX", 0x8A3A},
+    {"GL_UNIFORM_OFFSET", 0x8A3B},
+    {"GL_UNIFORM_ARRAY_STRIDE", 0x8A3C},
+    {"GL_UNIFORM_MATRIX_STRIDE", 0x8A3D},
+    {"GL_UNIFORM_IS_ROW_MAJOR", 0x8A3E},
+    {"GL_UNIFORM_BLOCK_BINDING", 0x8A3F},
+    {"GL_UNIFORM_BLOCK_DATA_SIZE", 0x8A40},
+    {"GL_UNIFORM_BLOCK_NAME_LENGTH", 0x8A41},
+    {"GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS", 0x8A42},
+    {"GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES", 0x8A43},
+    {"GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER", 0x8A44},
+    {"GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER", 0x8A45},
+    {"GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER", 0x8A46},
+    {"GL_TEXTURE_SRGB_DECODE_EXT", 0x8A48},
+    {"GL_DECODE_EXT", 0x8A49},
+    {"GL_SKIP_DECODE_EXT", 0x8A4A},
+    {"GL_PROGRAM_PIPELINE_OBJECT_EXT", 0x8A4F},
+    {"GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT", 0x8A52},
+    {"GL_SYNC_OBJECT_APPLE", 0x8A53},
+    {"GL_FRAGMENT_SHADER", 0x8B30},
+    {"GL_FRAGMENT_SHADER_ARB", 0x8B30},
+    {"GL_VERTEX_SHADER", 0x8B31},
+    {"GL_VERTEX_SHADER_ARB", 0x8B31},
+    {"GL_PROGRAM_OBJECT_ARB", 0x8B40},
+    {"GL_PROGRAM_OBJECT_EXT", 0x8B40},
+    {"GL_SHADER_OBJECT_ARB", 0x8B48},
+    {"GL_SHADER_OBJECT_EXT", 0x8B48},
+    {"GL_MAX_FRAGMENT_UNIFORM_COMPONENTS", 0x8B49},
+    {"GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB", 0x8B49},
+    {"GL_MAX_VERTEX_UNIFORM_COMPONENTS", 0x8B4A},
+    {"GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB", 0x8B4A},
+    {"GL_MAX_VARYING_FLOATS", 0x8B4B},
+    {"GL_MAX_VARYING_COMPONENTS", 0x8B4B},
+    {"GL_MAX_VARYING_COMPONENTS_EXT", 0x8B4B},
+    {"GL_MAX_VARYING_FLOATS_ARB", 0x8B4B},
+    {"GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS", 0x8B4C},
+    {"GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB", 0x8B4C},
+    {"GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS", 0x8B4D},
+    {"GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB", 0x8B4D},
+    {"GL_OBJECT_TYPE_ARB", 0x8B4E},
+    {"GL_SHADER_TYPE", 0x8B4F},
+    {"GL_OBJECT_SUBTYPE_ARB", 0x8B4F},
+    {"GL_FLOAT_VEC2", 0x8B50},
+    {"GL_FLOAT_VEC2_ARB", 0x8B50},
+    {"GL_FLOAT_VEC3", 0x8B51},
+    {"GL_FLOAT_VEC3_ARB", 0x8B51},
+    {"GL_FLOAT_VEC4", 0x8B52},
+    {"GL_FLOAT_VEC4_ARB", 0x8B52},
+    {"GL_INT_VEC2", 0x8B53},
+    {"GL_INT_VEC2_ARB", 0x8B53},
+    {"GL_INT_VEC3", 0x8B54},
+    {"GL_INT_VEC3_ARB", 0x8B54},
+    {"GL_INT_VEC4", 0x8B55},
+    {"GL_INT_VEC4_ARB", 0x8B55},
+    {"GL_BOOL", 0x8B56},
+    {"GL_BOOL_ARB", 0x8B56},
+    {"GL_BOOL_VEC2", 0x8B57},
+    {"GL_BOOL_VEC2_ARB", 0x8B57},
+    {"GL_BOOL_VEC3", 0x8B58},
+    {"GL_BOOL_VEC3_ARB", 0x8B58},
+    {"GL_BOOL_VEC4", 0x8B59},
+    {"GL_BOOL_VEC4_ARB", 0x8B59},
+    {"GL_FLOAT_MAT2", 0x8B5A},
+    {"GL_FLOAT_MAT2_ARB", 0x8B5A},
+    {"GL_FLOAT_MAT3", 0x8B5B},
+    {"GL_FLOAT_MAT3_ARB", 0x8B5B},
+    {"GL_FLOAT_MAT4", 0x8B5C},
+    {"GL_FLOAT_MAT4_ARB", 0x8B5C},
+    {"GL_SAMPLER_1D", 0x8B5D},
+    {"GL_SAMPLER_1D_ARB", 0x8B5D},
+    {"GL_SAMPLER_2D", 0x8B5E},
+    {"GL_SAMPLER_2D_ARB", 0x8B5E},
+    {"GL_SAMPLER_3D", 0x8B5F},
+    {"GL_SAMPLER_3D_ARB", 0x8B5F},
+    {"GL_SAMPLER_3D_OES", 0x8B5F},
+    {"GL_SAMPLER_CUBE", 0x8B60},
+    {"GL_SAMPLER_CUBE_ARB", 0x8B60},
+    {"GL_SAMPLER_1D_SHADOW", 0x8B61},
+    {"GL_SAMPLER_1D_SHADOW_ARB", 0x8B61},
+    {"GL_SAMPLER_2D_SHADOW", 0x8B62},
+    {"GL_SAMPLER_2D_SHADOW_ARB", 0x8B62},
+    {"GL_SAMPLER_2D_SHADOW_EXT", 0x8B62},
+    {"GL_SAMPLER_2D_RECT", 0x8B63},
+    {"GL_SAMPLER_2D_RECT_ARB", 0x8B63},
+    {"GL_SAMPLER_2D_RECT_SHADOW", 0x8B64},
+    {"GL_SAMPLER_2D_RECT_SHADOW_ARB", 0x8B64},
+    {"GL_FLOAT_MAT2x3", 0x8B65},
+    {"GL_FLOAT_MAT2x4", 0x8B66},
+    {"GL_FLOAT_MAT3x2", 0x8B67},
+    {"GL_FLOAT_MAT3x4", 0x8B68},
+    {"GL_FLOAT_MAT4x2", 0x8B69},
+    {"GL_FLOAT_MAT4x3", 0x8B6A},
+    {"GL_DELETE_STATUS", 0x8B80},
+    {"GL_OBJECT_DELETE_STATUS_ARB", 0x8B80},
+    {"GL_COMPILE_STATUS", 0x8B81},
+    {"GL_OBJECT_COMPILE_STATUS_ARB", 0x8B81},
+    {"GL_LINK_STATUS", 0x8B82},
+    {"GL_OBJECT_LINK_STATUS_ARB", 0x8B82},
+    {"GL_VALIDATE_STATUS", 0x8B83},
+    {"GL_OBJECT_VALIDATE_STATUS_ARB", 0x8B83},
+    {"GL_INFO_LOG_LENGTH", 0x8B84},
+    {"GL_OBJECT_INFO_LOG_LENGTH_ARB", 0x8B84},
+    {"GL_ATTACHED_SHADERS", 0x8B85},
+    {"GL_OBJECT_ATTACHED_OBJECTS_ARB", 0x8B85},
+    {"GL_ACTIVE_UNIFORMS", 0x8B86},
+    {"GL_OBJECT_ACTIVE_UNIFORMS_ARB", 0x8B86},
+    {"GL_ACTIVE_UNIFORM_MAX_LENGTH", 0x8B87},
+    {"GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB", 0x8B87},
+    {"GL_SHADER_SOURCE_LENGTH", 0x8B88},
+    {"GL_OBJECT_SHADER_SOURCE_LENGTH_ARB", 0x8B88},
+    {"GL_ACTIVE_ATTRIBUTES", 0x8B89},
+    {"GL_OBJECT_ACTIVE_ATTRIBUTES_ARB", 0x8B89},
+    {"GL_ACTIVE_ATTRIBUTE_MAX_LENGTH", 0x8B8A},
+    {"GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB", 0x8B8A},
+    {"GL_FRAGMENT_SHADER_DERIVATIVE_HINT", 0x8B8B},
+    {"GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB", 0x8B8B},
+    {"GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES", 0x8B8B},
+    {"GL_SHADING_LANGUAGE_VERSION", 0x8B8C},
+    {"GL_SHADING_LANGUAGE_VERSION_ARB", 0x8B8C},
+    {"GL_CURRENT_PROGRAM", 0x8B8D},
+    {"GL_ACTIVE_PROGRAM_EXT", 0x8B8D},
+    {"GL_PALETTE4_RGB8_OES", 0x8B90},
+    {"GL_PALETTE4_RGBA8_OES", 0x8B91},
+    {"GL_PALETTE4_R5_G6_B5_OES", 0x8B92},
+    {"GL_PALETTE4_RGBA4_OES", 0x8B93},
+    {"GL_PALETTE4_RGB5_A1_OES", 0x8B94},
+    {"GL_PALETTE8_RGB8_OES", 0x8B95},
+    {"GL_PALETTE8_RGBA8_OES", 0x8B96},
+    {"GL_PALETTE8_R5_G6_B5_OES", 0x8B97},
+    {"GL_PALETTE8_RGBA4_OES", 0x8B98},
+    {"GL_PALETTE8_RGB5_A1_OES", 0x8B99},
+    {"GL_IMPLEMENTATION_COLOR_READ_TYPE", 0x8B9A},
+    {"GL_IMPLEMENTATION_COLOR_READ_TYPE_OES", 0x8B9A},
+    {"GL_IMPLEMENTATION_COLOR_READ_FORMAT", 0x8B9B},
+    {"GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES", 0x8B9B},
+    {"GL_POINT_SIZE_ARRAY_OES", 0x8B9C},
+    {"GL_TEXTURE_CROP_RECT_OES", 0x8B9D},
+    {"GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES", 0x8B9E},
+    {"GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES", 0x8B9F},
+    {"GL_FRAGMENT_PROGRAM_POSITION_MESA", 0x8BB0},
+    {"GL_FRAGMENT_PROGRAM_CALLBACK_MESA", 0x8BB1},
+    {"GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA", 0x8BB2},
+    {"GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA", 0x8BB3},
+    {"GL_VERTEX_PROGRAM_CALLBACK_MESA", 0x8BB4},
+    {"GL_VERTEX_PROGRAM_POSITION_MESA", 0x8BB4},
+    {"GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA", 0x8BB6},
+    {"GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA", 0x8BB7},
+    {"GL_COUNTER_TYPE_AMD", 0x8BC0},
+    {"GL_COUNTER_RANGE_AMD", 0x8BC1},
+    {"GL_UNSIGNED_INT64_AMD", 0x8BC2},
+    {"GL_PERCENTAGE_AMD", 0x8BC3},
+    {"GL_PERFMON_RESULT_AVAILABLE_AMD", 0x8BC4},
+    {"GL_PERFMON_RESULT_SIZE_AMD", 0x8BC5},
+    {"GL_PERFMON_RESULT_AMD", 0x8BC6},
+    {"GL_TEXTURE_WIDTH_QCOM", 0x8BD2},
+    {"GL_TEXTURE_HEIGHT_QCOM", 0x8BD3},
+    {"GL_TEXTURE_DEPTH_QCOM", 0x8BD4},
+    {"GL_TEXTURE_INTERNAL_FORMAT_QCOM", 0x8BD5},
+    {"GL_TEXTURE_FORMAT_QCOM", 0x8BD6},
+    {"GL_TEXTURE_TYPE_QCOM", 0x8BD7},
+    {"GL_TEXTURE_IMAGE_VALID_QCOM", 0x8BD8},
+    {"GL_TEXTURE_NUM_LEVELS_QCOM", 0x8BD9},
+    {"GL_TEXTURE_TARGET_QCOM", 0x8BDA},
+    {"GL_TEXTURE_OBJECT_VALID_QCOM", 0x8BDB},
+    {"GL_STATE_RESTORE", 0x8BDC},
+    {"GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG", 0x8C00},
+    {"GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG", 0x8C01},
+    {"GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG", 0x8C02},
+    {"GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG", 0x8C03},
+    {"GL_MODULATE_COLOR_IMG", 0x8C04},
+    {"GL_RECIP_ADD_SIGNED_ALPHA_IMG", 0x8C05},
+    {"GL_TEXTURE_ALPHA_MODULATE_IMG", 0x8C06},
+    {"GL_FACTOR_ALPHA_MODULATE_IMG", 0x8C07},
+    {"GL_FRAGMENT_ALPHA_MODULATE_IMG", 0x8C08},
+    {"GL_ADD_BLEND_IMG", 0x8C09},
+    {"GL_SGX_BINARY_IMG", 0x8C0A},
+    {"GL_TEXTURE_RED_TYPE", 0x8C10},
+    {"GL_TEXTURE_RED_TYPE_ARB", 0x8C10},
+    {"GL_TEXTURE_GREEN_TYPE", 0x8C11},
+    {"GL_TEXTURE_GREEN_TYPE_ARB", 0x8C11},
+    {"GL_TEXTURE_BLUE_TYPE", 0x8C12},
+    {"GL_TEXTURE_BLUE_TYPE_ARB", 0x8C12},
+    {"GL_TEXTURE_ALPHA_TYPE", 0x8C13},
+    {"GL_TEXTURE_ALPHA_TYPE_ARB", 0x8C13},
+    {"GL_TEXTURE_LUMINANCE_TYPE", 0x8C14},
+    {"GL_TEXTURE_LUMINANCE_TYPE_ARB", 0x8C14},
+    {"GL_TEXTURE_INTENSITY_TYPE", 0x8C15},
+    {"GL_TEXTURE_INTENSITY_TYPE_ARB", 0x8C15},
+    {"GL_TEXTURE_DEPTH_TYPE", 0x8C16},
+    {"GL_TEXTURE_DEPTH_TYPE_ARB", 0x8C16},
+    {"GL_UNSIGNED_NORMALIZED", 0x8C17},
+    {"GL_UNSIGNED_NORMALIZED_ARB", 0x8C17},
+    {"GL_UNSIGNED_NORMALIZED_EXT", 0x8C17},
+    {"GL_TEXTURE_1D_ARRAY", 0x8C18},
+    {"GL_TEXTURE_1D_ARRAY_EXT", 0x8C18},
+    {"GL_PROXY_TEXTURE_1D_ARRAY", 0x8C19},
+    {"GL_PROXY_TEXTURE_1D_ARRAY_EXT", 0x8C19},
+    {"GL_TEXTURE_2D_ARRAY", 0x8C1A},
+    {"GL_TEXTURE_2D_ARRAY_EXT", 0x8C1A},
+    {"GL_PROXY_TEXTURE_2D_ARRAY", 0x8C1B},
+    {"GL_PROXY_TEXTURE_2D_ARRAY_EXT", 0x8C1B},
+    {"GL_TEXTURE_BINDING_1D_ARRAY", 0x8C1C},
+    {"GL_TEXTURE_BINDING_1D_ARRAY_EXT", 0x8C1C},
+    {"GL_TEXTURE_BINDING_2D_ARRAY", 0x8C1D},
+    {"GL_TEXTURE_BINDING_2D_ARRAY_EXT", 0x8C1D},
+    {"GL_GEOMETRY_PROGRAM_NV", 0x8C26},
+    {"GL_MAX_PROGRAM_OUTPUT_VERTICES_NV", 0x8C27},
+    {"GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV", 0x8C28},
+    {"GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS", 0x8C29},
+    {"GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB", 0x8C29},
+    {"GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT", 0x8C29},
+    {"GL_TEXTURE_BUFFER", 0x8C2A},
+    {"GL_TEXTURE_BUFFER_ARB", 0x8C2A},
+    {"GL_TEXTURE_BUFFER_EXT", 0x8C2A},
+    {"GL_MAX_TEXTURE_BUFFER_SIZE", 0x8C2B},
+    {"GL_MAX_TEXTURE_BUFFER_SIZE_ARB", 0x8C2B},
+    {"GL_MAX_TEXTURE_BUFFER_SIZE_EXT", 0x8C2B},
+    {"GL_TEXTURE_BINDING_BUFFER", 0x8C2C},
+    {"GL_TEXTURE_BINDING_BUFFER_ARB", 0x8C2C},
+    {"GL_TEXTURE_BINDING_BUFFER_EXT", 0x8C2C},
+    {"GL_TEXTURE_BUFFER_DATA_STORE_BINDING", 0x8C2D},
+    {"GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB", 0x8C2D},
+    {"GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT", 0x8C2D},
+    {"GL_TEXTURE_BUFFER_FORMAT_ARB", 0x8C2E},
+    {"GL_TEXTURE_BUFFER_FORMAT_EXT", 0x8C2E},
+    {"GL_ANY_SAMPLES_PASSED", 0x8C2F},
+    {"GL_ANY_SAMPLES_PASSED_EXT", 0x8C2F},
+    {"GL_SAMPLE_SHADING", 0x8C36},
+    {"GL_SAMPLE_SHADING_ARB", 0x8C36},
+    {"GL_MIN_SAMPLE_SHADING_VALUE", 0x8C37},
+    {"GL_MIN_SAMPLE_SHADING_VALUE_ARB", 0x8C37},
+    {"GL_R11F_G11F_B10F", 0x8C3A},
+    {"GL_R11F_G11F_B10F_EXT", 0x8C3A},
+    {"GL_UNSIGNED_INT_10F_11F_11F_REV", 0x8C3B},
+    {"GL_UNSIGNED_INT_10F_11F_11F_REV_EXT", 0x8C3B},
+    {"GL_RGBA_SIGNED_COMPONENTS_EXT", 0x8C3C},
+    {"GL_RGB9_E5", 0x8C3D},
+    {"GL_RGB9_E5_EXT", 0x8C3D},
+    {"GL_UNSIGNED_INT_5_9_9_9_REV", 0x8C3E},
+    {"GL_UNSIGNED_INT_5_9_9_9_REV_EXT", 0x8C3E},
+    {"GL_TEXTURE_SHARED_SIZE", 0x8C3F},
+    {"GL_TEXTURE_SHARED_SIZE_EXT", 0x8C3F},
+    {"GL_SRGB", 0x8C40},
+    {"GL_SRGB_EXT", 0x8C40},
+    {"GL_SRGB8", 0x8C41},
+    {"GL_SRGB8_EXT", 0x8C41},
+    {"GL_SRGB8_NV", 0x8C41},
+    {"GL_SRGB_ALPHA", 0x8C42},
+    {"GL_SRGB_ALPHA_EXT", 0x8C42},
+    {"GL_SRGB8_ALPHA8", 0x8C43},
+    {"GL_SRGB8_ALPHA8_EXT", 0x8C43},
+    {"GL_SLUMINANCE_ALPHA", 0x8C44},
+    {"GL_SLUMINANCE_ALPHA_EXT", 0x8C44},
+    {"GL_SLUMINANCE_ALPHA_NV", 0x8C44},
+    {"GL_SLUMINANCE8_ALPHA8", 0x8C45},
+    {"GL_SLUMINANCE8_ALPHA8_EXT", 0x8C45},
+    {"GL_SLUMINANCE8_ALPHA8_NV", 0x8C45},
+    {"GL_SLUMINANCE", 0x8C46},
+    {"GL_SLUMINANCE_EXT", 0x8C46},
+    {"GL_SLUMINANCE_NV", 0x8C46},
+    {"GL_SLUMINANCE8", 0x8C47},
+    {"GL_SLUMINANCE8_EXT", 0x8C47},
+    {"GL_SLUMINANCE8_NV", 0x8C47},
+    {"GL_COMPRESSED_SRGB", 0x8C48},
+    {"GL_COMPRESSED_SRGB_EXT", 0x8C48},
+    {"GL_COMPRESSED_SRGB_ALPHA", 0x8C49},
+    {"GL_COMPRESSED_SRGB_ALPHA_EXT", 0x8C49},
+    {"GL_COMPRESSED_SLUMINANCE", 0x8C4A},
+    {"GL_COMPRESSED_SLUMINANCE_EXT", 0x8C4A},
+    {"GL_COMPRESSED_SLUMINANCE_ALPHA", 0x8C4B},
+    {"GL_COMPRESSED_SLUMINANCE_ALPHA_EXT", 0x8C4B},
+    {"GL_COMPRESSED_SRGB_S3TC_DXT1_EXT", 0x8C4C},
+    {"GL_COMPRESSED_SRGB_S3TC_DXT1_NV", 0x8C4C},
+    {"GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT", 0x8C4D},
+    {"GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV", 0x8C4D},
+    {"GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT", 0x8C4E},
+    {"GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV", 0x8C4E},
+    {"GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT", 0x8C4F},
+    {"GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV", 0x8C4F},
+    {"GL_COMPRESSED_LUMINANCE_LATC1_EXT", 0x8C70},
+    {"GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT", 0x8C71},
+    {"GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT", 0x8C72},
+    {"GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT", 0x8C73},
+    {"GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV", 0x8C74},
+    {"GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV", 0x8C75},
+    {"GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH", 0x8C76},
+    {"GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT", 0x8C76},
+    {"GL_BACK_PRIMARY_COLOR_NV", 0x8C77},
+    {"GL_BACK_SECONDARY_COLOR_NV", 0x8C78},
+    {"GL_TEXTURE_COORD_NV", 0x8C79},
+    {"GL_CLIP_DISTANCE_NV", 0x8C7A},
+    {"GL_VERTEX_ID_NV", 0x8C7B},
+    {"GL_PRIMITIVE_ID_NV", 0x8C7C},
+    {"GL_GENERIC_ATTRIB_NV", 0x8C7D},
+    {"GL_TRANSFORM_FEEDBACK_ATTRIBS_NV", 0x8C7E},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_MODE", 0x8C7F},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT", 0x8C7F},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV", 0x8C7F},
+    {"GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS", 0x8C80},
+    {"GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT", 0x8C80},
+    {"GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV", 0x8C80},
+    {"GL_ACTIVE_VARYINGS_NV", 0x8C81},
+    {"GL_ACTIVE_VARYING_MAX_LENGTH_NV", 0x8C82},
+    {"GL_TRANSFORM_FEEDBACK_VARYINGS", 0x8C83},
+    {"GL_TRANSFORM_FEEDBACK_VARYINGS_EXT", 0x8C83},
+    {"GL_TRANSFORM_FEEDBACK_VARYINGS_NV", 0x8C83},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_START", 0x8C84},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT", 0x8C84},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_START_NV", 0x8C84},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_SIZE", 0x8C85},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT", 0x8C85},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV", 0x8C85},
+    {"GL_TRANSFORM_FEEDBACK_RECORD_NV", 0x8C86},
+    {"GL_PRIMITIVES_GENERATED", 0x8C87},
+    {"GL_PRIMITIVES_GENERATED_EXT", 0x8C87},
+    {"GL_PRIMITIVES_GENERATED_NV", 0x8C87},
+    {"GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN", 0x8C88},
+    {"GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT", 0x8C88},
+    {"GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV", 0x8C88},
+    {"GL_RASTERIZER_DISCARD", 0x8C89},
+    {"GL_RASTERIZER_DISCARD_EXT", 0x8C89},
+    {"GL_RASTERIZER_DISCARD_NV", 0x8C89},
+    {"GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS", 0x8C8A},
+    {"GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT", 0x8C8A},
+    {"GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV", 0x8C8A},
+    {"GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS", 0x8C8B},
+    {"GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT", 0x8C8B},
+    {"GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV", 0x8C8B},
+    {"GL_INTERLEAVED_ATTRIBS", 0x8C8C},
+    {"GL_INTERLEAVED_ATTRIBS_EXT", 0x8C8C},
+    {"GL_INTERLEAVED_ATTRIBS_NV", 0x8C8C},
+    {"GL_SEPARATE_ATTRIBS", 0x8C8D},
+    {"GL_SEPARATE_ATTRIBS_EXT", 0x8C8D},
+    {"GL_SEPARATE_ATTRIBS_NV", 0x8C8D},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER", 0x8C8E},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_EXT", 0x8C8E},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_NV", 0x8C8E},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_BINDING", 0x8C8F},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT", 0x8C8F},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV", 0x8C8F},
+    {"GL_ATC_RGB_AMD", 0x8C92},
+    {"GL_ATC_RGBA_EXPLICIT_ALPHA_AMD", 0x8C93},
+    {"GL_POINT_SPRITE_COORD_ORIGIN", 0x8CA0},
+    {"GL_LOWER_LEFT", 0x8CA1},
+    {"GL_UPPER_LEFT", 0x8CA2},
+    {"GL_STENCIL_BACK_REF", 0x8CA3},
+    {"GL_STENCIL_BACK_VALUE_MASK", 0x8CA4},
+    {"GL_STENCIL_BACK_WRITEMASK", 0x8CA5},
+    {"GL_DRAW_FRAMEBUFFER_BINDING", 0x8CA6},
+    {"GL_DRAW_FRAMEBUFFER_BINDING_EXT", 0x8CA6},
+    {"GL_DRAW_FRAMEBUFFER_BINDING_NV", 0x8CA6},
+    {"GL_FRAMEBUFFER_BINDING", 0x8CA6},
+    {"GL_FRAMEBUFFER_BINDING_ANGLE", 0x8CA6},
+    {"GL_FRAMEBUFFER_BINDING_EXT", 0x8CA6},
+    {"GL_FRAMEBUFFER_BINDING_OES", 0x8CA6},
+    {"GL_RENDERBUFFER_BINDING", 0x8CA7},
+    {"GL_RENDERBUFFER_BINDING_ANGLE", 0x8CA7},
+    {"GL_RENDERBUFFER_BINDING_EXT", 0x8CA7},
+    {"GL_RENDERBUFFER_BINDING_OES", 0x8CA7},
+    {"GL_READ_FRAMEBUFFER", 0x8CA8},
+    {"GL_READ_FRAMEBUFFER_ANGLE", 0x8CA8},
+    {"GL_READ_FRAMEBUFFER_EXT", 0x8CA8},
+    {"GL_READ_FRAMEBUFFER_NV", 0x8CA8},
+    {"GL_DRAW_FRAMEBUFFER", 0x8CA9},
+    {"GL_DRAW_FRAMEBUFFER_ANGLE", 0x8CA9},
+    {"GL_DRAW_FRAMEBUFFER_EXT", 0x8CA9},
+    {"GL_DRAW_FRAMEBUFFER_NV", 0x8CA9},
+    {"GL_READ_FRAMEBUFFER_BINDING", 0x8CAA},
+    {"GL_READ_FRAMEBUFFER_BINDING_EXT", 0x8CAA},
+    {"GL_READ_FRAMEBUFFER_BINDING_NV", 0x8CAA},
+    {"GL_RENDERBUFFER_COVERAGE_SAMPLES_NV", 0x8CAB},
+    {"GL_RENDERBUFFER_SAMPLES", 0x8CAB},
+    {"GL_RENDERBUFFER_SAMPLES_ANGLE", 0x8CAB},
+    {"GL_RENDERBUFFER_SAMPLES_EXT", 0x8CAB},
+    {"GL_RENDERBUFFER_SAMPLES_NV", 0x8CAB},
+    {"GL_DEPTH_COMPONENT32F", 0x8CAC},
+    {"GL_DEPTH32F_STENCIL8", 0x8CAD},
+    {"GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE", 0x8CD0},
+    {"GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT", 0x8CD0},
+    {"GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES", 0x8CD0},
+    {"GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME", 0x8CD1},
+    {"GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT", 0x8CD1},
+    {"GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES", 0x8CD1},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL", 0x8CD2},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT", 0x8CD2},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES", 0x8CD2},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE", 0x8CD3},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT", 0x8CD3},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES", 0x8CD3},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT", 0x8CD4},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES", 0x8CD4},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER", 0x8CD4},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT", 0x8CD4},
+    {"GL_FRAMEBUFFER_COMPLETE", 0x8CD5},
+    {"GL_FRAMEBUFFER_COMPLETE_EXT", 0x8CD5},
+    {"GL_FRAMEBUFFER_COMPLETE_OES", 0x8CD5},
+    {"GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT", 0x8CD6},
+    {"GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT", 0x8CD6},
+    {"GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES", 0x8CD6},
+    {"GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT", 0x8CD7},
+    {"GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT", 0x8CD7},
+    {"GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES", 0x8CD7},
+    {"GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS", 0x8CD9},
+    {"GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT", 0x8CD9},
+    {"GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES", 0x8CD9},
+    {"GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT", 0x8CDA},
+    {"GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES", 0x8CDA},
+    {"GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER", 0x8CDB},
+    {"GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT", 0x8CDB},
+    {"GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES", 0x8CDB},
+    {"GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER", 0x8CDC},
+    {"GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT", 0x8CDC},
+    {"GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES", 0x8CDC},
+    {"GL_FRAMEBUFFER_UNSUPPORTED", 0x8CDD},
+    {"GL_FRAMEBUFFER_UNSUPPORTED_EXT", 0x8CDD},
+    {"GL_FRAMEBUFFER_UNSUPPORTED_OES", 0x8CDD},
+    {"GL_MAX_COLOR_ATTACHMENTS", 0x8CDF},
+    {"GL_MAX_COLOR_ATTACHMENTS_EXT", 0x8CDF},
+    {"GL_MAX_COLOR_ATTACHMENTS_NV", 0x8CDF},
+    {"GL_COLOR_ATTACHMENT0", 0x8CE0},
+    {"GL_COLOR_ATTACHMENT0_EXT", 0x8CE0},
+    {"GL_COLOR_ATTACHMENT0_NV", 0x8CE0},
+    {"GL_COLOR_ATTACHMENT0_OES", 0x8CE0},
+    {"GL_COLOR_ATTACHMENT1", 0x8CE1},
+    {"GL_COLOR_ATTACHMENT1_EXT", 0x8CE1},
+    {"GL_COLOR_ATTACHMENT1_NV", 0x8CE1},
+    {"GL_COLOR_ATTACHMENT2", 0x8CE2},
+    {"GL_COLOR_ATTACHMENT2_EXT", 0x8CE2},
+    {"GL_COLOR_ATTACHMENT2_NV", 0x8CE2},
+    {"GL_COLOR_ATTACHMENT3", 0x8CE3},
+    {"GL_COLOR_ATTACHMENT3_EXT", 0x8CE3},
+    {"GL_COLOR_ATTACHMENT3_NV", 0x8CE3},
+    {"GL_COLOR_ATTACHMENT4", 0x8CE4},
+    {"GL_COLOR_ATTACHMENT4_EXT", 0x8CE4},
+    {"GL_COLOR_ATTACHMENT4_NV", 0x8CE4},
+    {"GL_COLOR_ATTACHMENT5", 0x8CE5},
+    {"GL_COLOR_ATTACHMENT5_EXT", 0x8CE5},
+    {"GL_COLOR_ATTACHMENT5_NV", 0x8CE5},
+    {"GL_COLOR_ATTACHMENT6", 0x8CE6},
+    {"GL_COLOR_ATTACHMENT6_EXT", 0x8CE6},
+    {"GL_COLOR_ATTACHMENT6_NV", 0x8CE6},
+    {"GL_COLOR_ATTACHMENT7", 0x8CE7},
+    {"GL_COLOR_ATTACHMENT7_EXT", 0x8CE7},
+    {"GL_COLOR_ATTACHMENT7_NV", 0x8CE7},
+    {"GL_COLOR_ATTACHMENT8", 0x8CE8},
+    {"GL_COLOR_ATTACHMENT8_EXT", 0x8CE8},
+    {"GL_COLOR_ATTACHMENT8_NV", 0x8CE8},
+    {"GL_COLOR_ATTACHMENT9", 0x8CE9},
+    {"GL_COLOR_ATTACHMENT9_EXT", 0x8CE9},
+    {"GL_COLOR_ATTACHMENT9_NV", 0x8CE9},
+    {"GL_COLOR_ATTACHMENT10", 0x8CEA},
+    {"GL_COLOR_ATTACHMENT10_EXT", 0x8CEA},
+    {"GL_COLOR_ATTACHMENT10_NV", 0x8CEA},
+    {"GL_COLOR_ATTACHMENT11", 0x8CEB},
+    {"GL_COLOR_ATTACHMENT11_EXT", 0x8CEB},
+    {"GL_COLOR_ATTACHMENT11_NV", 0x8CEB},
+    {"GL_COLOR_ATTACHMENT12", 0x8CEC},
+    {"GL_COLOR_ATTACHMENT12_EXT", 0x8CEC},
+    {"GL_COLOR_ATTACHMENT12_NV", 0x8CEC},
+    {"GL_COLOR_ATTACHMENT13", 0x8CED},
+    {"GL_COLOR_ATTACHMENT13_EXT", 0x8CED},
+    {"GL_COLOR_ATTACHMENT13_NV", 0x8CED},
+    {"GL_COLOR_ATTACHMENT14", 0x8CEE},
+    {"GL_COLOR_ATTACHMENT14_EXT", 0x8CEE},
+    {"GL_COLOR_ATTACHMENT14_NV", 0x8CEE},
+    {"GL_COLOR_ATTACHMENT15", 0x8CEF},
+    {"GL_COLOR_ATTACHMENT15_EXT", 0x8CEF},
+    {"GL_COLOR_ATTACHMENT15_NV", 0x8CEF},
+    {"GL_DEPTH_ATTACHMENT", 0x8D00},
+    {"GL_DEPTH_ATTACHMENT_EXT", 0x8D00},
+    {"GL_DEPTH_ATTACHMENT_OES", 0x8D00},
+    {"GL_STENCIL_ATTACHMENT", 0x8D20},
+    {"GL_STENCIL_ATTACHMENT_EXT", 0x8D20},
+    {"GL_STENCIL_ATTACHMENT_OES", 0x8D20},
+    {"GL_FRAMEBUFFER", 0x8D40},
+    {"GL_FRAMEBUFFER_EXT", 0x8D40},
+    {"GL_FRAMEBUFFER_OES", 0x8D40},
+    {"GL_RENDERBUFFER", 0x8D41},
+    {"GL_RENDERBUFFER_EXT", 0x8D41},
+    {"GL_RENDERBUFFER_OES", 0x8D41},
+    {"GL_RENDERBUFFER_WIDTH", 0x8D42},
+    {"GL_RENDERBUFFER_WIDTH_EXT", 0x8D42},
+    {"GL_RENDERBUFFER_WIDTH_OES", 0x8D42},
+    {"GL_RENDERBUFFER_HEIGHT", 0x8D43},
+    {"GL_RENDERBUFFER_HEIGHT_EXT", 0x8D43},
+    {"GL_RENDERBUFFER_HEIGHT_OES", 0x8D43},
+    {"GL_RENDERBUFFER_INTERNAL_FORMAT", 0x8D44},
+    {"GL_RENDERBUFFER_INTERNAL_FORMAT_EXT", 0x8D44},
+    {"GL_RENDERBUFFER_INTERNAL_FORMAT_OES", 0x8D44},
+    {"GL_STENCIL_INDEX1", 0x8D46},
+    {"GL_STENCIL_INDEX1_EXT", 0x8D46},
+    {"GL_STENCIL_INDEX1_OES", 0x8D46},
+    {"GL_STENCIL_INDEX4", 0x8D47},
+    {"GL_STENCIL_INDEX4_EXT", 0x8D47},
+    {"GL_STENCIL_INDEX4_OES", 0x8D47},
+    {"GL_STENCIL_INDEX8", 0x8D48},
+    {"GL_STENCIL_INDEX8_EXT", 0x8D48},
+    {"GL_STENCIL_INDEX8_OES", 0x8D48},
+    {"GL_STENCIL_INDEX16", 0x8D49},
+    {"GL_STENCIL_INDEX16_EXT", 0x8D49},
+    {"GL_RENDERBUFFER_RED_SIZE", 0x8D50},
+    {"GL_RENDERBUFFER_RED_SIZE_EXT", 0x8D50},
+    {"GL_RENDERBUFFER_RED_SIZE_OES", 0x8D50},
+    {"GL_RENDERBUFFER_GREEN_SIZE", 0x8D51},
+    {"GL_RENDERBUFFER_GREEN_SIZE_EXT", 0x8D51},
+    {"GL_RENDERBUFFER_GREEN_SIZE_OES", 0x8D51},
+    {"GL_RENDERBUFFER_BLUE_SIZE", 0x8D52},
+    {"GL_RENDERBUFFER_BLUE_SIZE_EXT", 0x8D52},
+    {"GL_RENDERBUFFER_BLUE_SIZE_OES", 0x8D52},
+    {"GL_RENDERBUFFER_ALPHA_SIZE", 0x8D53},
+    {"GL_RENDERBUFFER_ALPHA_SIZE_EXT", 0x8D53},
+    {"GL_RENDERBUFFER_ALPHA_SIZE_OES", 0x8D53},
+    {"GL_RENDERBUFFER_DEPTH_SIZE", 0x8D54},
+    {"GL_RENDERBUFFER_DEPTH_SIZE_EXT", 0x8D54},
+    {"GL_RENDERBUFFER_DEPTH_SIZE_OES", 0x8D54},
+    {"GL_RENDERBUFFER_STENCIL_SIZE", 0x8D55},
+    {"GL_RENDERBUFFER_STENCIL_SIZE_EXT", 0x8D55},
+    {"GL_RENDERBUFFER_STENCIL_SIZE_OES", 0x8D55},
+    {"GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE", 0x8D56},
+    {"GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE", 0x8D56},
+    {"GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT", 0x8D56},
+    {"GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV", 0x8D56},
+    {"GL_MAX_SAMPLES", 0x8D57},
+    {"GL_MAX_SAMPLES_ANGLE", 0x8D57},
+    {"GL_MAX_SAMPLES_EXT", 0x8D57},
+    {"GL_MAX_SAMPLES_NV", 0x8D57},
+    {"GL_TEXTURE_GEN_STR_OES", 0x8D60},
+    {"GL_HALF_FLOAT_OES", 0x8D61},
+    {"GL_RGB565_OES", 0x8D62},
+    {"GL_RGB565", 0x8D62},
+    {"GL_ETC1_RGB8_OES", 0x8D64},
+    {"GL_TEXTURE_EXTERNAL_OES", 0x8D65},
+    {"GL_SAMPLER_EXTERNAL_OES", 0x8D66},
+    {"GL_TEXTURE_BINDING_EXTERNAL_OES", 0x8D67},
+    {"GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES", 0x8D68},
+    {"GL_PRIMITIVE_RESTART_FIXED_INDEX", 0x8D69},
+    {"GL_ANY_SAMPLES_PASSED_CONSERVATIVE", 0x8D6A},
+    {"GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT", 0x8D6A},
+    {"GL_MAX_ELEMENT_INDEX", 0x8D6B},
+    {"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT", 0x8D6C},
+    {"GL_RGBA32UI", 0x8D70},
+    {"GL_RGBA32UI_EXT", 0x8D70},
+    {"GL_RGB32UI", 0x8D71},
+    {"GL_RGB32UI_EXT", 0x8D71},
+    {"GL_ALPHA32UI_EXT", 0x8D72},
+    {"GL_INTENSITY32UI_EXT", 0x8D73},
+    {"GL_LUMINANCE32UI_EXT", 0x8D74},
+    {"GL_LUMINANCE_ALPHA32UI_EXT", 0x8D75},
+    {"GL_RGBA16UI", 0x8D76},
+    {"GL_RGBA16UI_EXT", 0x8D76},
+    {"GL_RGB16UI", 0x8D77},
+    {"GL_RGB16UI_EXT", 0x8D77},
+    {"GL_ALPHA16UI_EXT", 0x8D78},
+    {"GL_INTENSITY16UI_EXT", 0x8D79},
+    {"GL_LUMINANCE16UI_EXT", 0x8D7A},
+    {"GL_LUMINANCE_ALPHA16UI_EXT", 0x8D7B},
+    {"GL_RGBA8UI", 0x8D7C},
+    {"GL_RGBA8UI_EXT", 0x8D7C},
+    {"GL_RGB8UI", 0x8D7D},
+    {"GL_RGB8UI_EXT", 0x8D7D},
+    {"GL_ALPHA8UI_EXT", 0x8D7E},
+    {"GL_INTENSITY8UI_EXT", 0x8D7F},
+    {"GL_LUMINANCE8UI_EXT", 0x8D80},
+    {"GL_LUMINANCE_ALPHA8UI_EXT", 0x8D81},
+    {"GL_RGBA32I", 0x8D82},
+    {"GL_RGBA32I_EXT", 0x8D82},
+    {"GL_RGB32I", 0x8D83},
+    {"GL_RGB32I_EXT", 0x8D83},
+    {"GL_ALPHA32I_EXT", 0x8D84},
+    {"GL_INTENSITY32I_EXT", 0x8D85},
+    {"GL_LUMINANCE32I_EXT", 0x8D86},
+    {"GL_LUMINANCE_ALPHA32I_EXT", 0x8D87},
+    {"GL_RGBA16I", 0x8D88},
+    {"GL_RGBA16I_EXT", 0x8D88},
+    {"GL_RGB16I", 0x8D89},
+    {"GL_RGB16I_EXT", 0x8D89},
+    {"GL_ALPHA16I_EXT", 0x8D8A},
+    {"GL_INTENSITY16I_EXT", 0x8D8B},
+    {"GL_LUMINANCE16I_EXT", 0x8D8C},
+    {"GL_LUMINANCE_ALPHA16I_EXT", 0x8D8D},
+    {"GL_RGBA8I", 0x8D8E},
+    {"GL_RGBA8I_EXT", 0x8D8E},
+    {"GL_RGB8I", 0x8D8F},
+    {"GL_RGB8I_EXT", 0x8D8F},
+    {"GL_ALPHA8I_EXT", 0x8D90},
+    {"GL_INTENSITY8I_EXT", 0x8D91},
+    {"GL_LUMINANCE8I_EXT", 0x8D92},
+    {"GL_LUMINANCE_ALPHA8I_EXT", 0x8D93},
+    {"GL_RED_INTEGER", 0x8D94},
+    {"GL_RED_INTEGER_EXT", 0x8D94},
+    {"GL_GREEN_INTEGER", 0x8D95},
+    {"GL_GREEN_INTEGER_EXT", 0x8D95},
+    {"GL_BLUE_INTEGER", 0x8D96},
+    {"GL_BLUE_INTEGER_EXT", 0x8D96},
+    {"GL_ALPHA_INTEGER", 0x8D97},
+    {"GL_ALPHA_INTEGER_EXT", 0x8D97},
+    {"GL_RGB_INTEGER", 0x8D98},
+    {"GL_RGB_INTEGER_EXT", 0x8D98},
+    {"GL_RGBA_INTEGER", 0x8D99},
+    {"GL_RGBA_INTEGER_EXT", 0x8D99},
+    {"GL_BGR_INTEGER", 0x8D9A},
+    {"GL_BGR_INTEGER_EXT", 0x8D9A},
+    {"GL_BGRA_INTEGER", 0x8D9B},
+    {"GL_BGRA_INTEGER_EXT", 0x8D9B},
+    {"GL_LUMINANCE_INTEGER_EXT", 0x8D9C},
+    {"GL_LUMINANCE_ALPHA_INTEGER_EXT", 0x8D9D},
+    {"GL_RGBA_INTEGER_MODE_EXT", 0x8D9E},
+    {"GL_INT_2_10_10_10_REV", 0x8D9F},
+    {"GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV", 0x8DA0},
+    {"GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV", 0x8DA1},
+    {"GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV", 0x8DA2},
+    {"GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV", 0x8DA3},
+    {"GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV", 0x8DA4},
+    {"GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV", 0x8DA5},
+    {"GL_MAX_PROGRAM_GENERIC_RESULTS_NV", 0x8DA6},
+    {"GL_FRAMEBUFFER_ATTACHMENT_LAYERED", 0x8DA7},
+    {"GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB", 0x8DA7},
+    {"GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT", 0x8DA7},
+    {"GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS", 0x8DA8},
+    {"GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB", 0x8DA8},
+    {"GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT", 0x8DA8},
+    {"GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB", 0x8DA9},
+    {"GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT", 0x8DA9},
+    {"GL_LAYER_NV", 0x8DAA},
+    {"GL_DEPTH_COMPONENT32F_NV", 0x8DAB},
+    {"GL_DEPTH32F_STENCIL8_NV", 0x8DAC},
+    {"GL_FLOAT_32_UNSIGNED_INT_24_8_REV", 0x8DAD},
+    {"GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV", 0x8DAD},
+    {"GL_SHADER_INCLUDE_ARB", 0x8DAE},
+    {"GL_DEPTH_BUFFER_FLOAT_MODE_NV", 0x8DAF},
+    {"GL_FRAMEBUFFER_SRGB", 0x8DB9},
+    {"GL_FRAMEBUFFER_SRGB_EXT", 0x8DB9},
+    {"GL_FRAMEBUFFER_SRGB_CAPABLE_EXT", 0x8DBA},
+    {"GL_COMPRESSED_RED_RGTC1", 0x8DBB},
+    {"GL_COMPRESSED_RED_RGTC1_EXT", 0x8DBB},
+    {"GL_COMPRESSED_SIGNED_RED_RGTC1", 0x8DBC},
+    {"GL_COMPRESSED_SIGNED_RED_RGTC1_EXT", 0x8DBC},
+    {"GL_COMPRESSED_RED_GREEN_RGTC2_EXT", 0x8DBD},
+    {"GL_COMPRESSED_RG_RGTC2", 0x8DBD},
+    {"GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT", 0x8DBE},
+    {"GL_COMPRESSED_SIGNED_RG_RGTC2", 0x8DBE},
+    {"GL_SAMPLER_1D_ARRAY", 0x8DC0},
+    {"GL_SAMPLER_1D_ARRAY_EXT", 0x8DC0},
+    {"GL_SAMPLER_2D_ARRAY", 0x8DC1},
+    {"GL_SAMPLER_2D_ARRAY_EXT", 0x8DC1},
+    {"GL_SAMPLER_BUFFER", 0x8DC2},
+    {"GL_SAMPLER_BUFFER_EXT", 0x8DC2},
+    {"GL_SAMPLER_1D_ARRAY_SHADOW", 0x8DC3},
+    {"GL_SAMPLER_1D_ARRAY_SHADOW_EXT", 0x8DC3},
+    {"GL_SAMPLER_2D_ARRAY_SHADOW", 0x8DC4},
+    {"GL_SAMPLER_2D_ARRAY_SHADOW_EXT", 0x8DC4},
+    {"GL_SAMPLER_2D_ARRAY_SHADOW_NV", 0x8DC4},
+    {"GL_SAMPLER_CUBE_SHADOW", 0x8DC5},
+    {"GL_SAMPLER_CUBE_SHADOW_EXT", 0x8DC5},
+    {"GL_SAMPLER_CUBE_SHADOW_NV", 0x8DC5},
+    {"GL_UNSIGNED_INT_VEC2", 0x8DC6},
+    {"GL_UNSIGNED_INT_VEC2_EXT", 0x8DC6},
+    {"GL_UNSIGNED_INT_VEC3", 0x8DC7},
+    {"GL_UNSIGNED_INT_VEC3_EXT", 0x8DC7},
+    {"GL_UNSIGNED_INT_VEC4", 0x8DC8},
+    {"GL_UNSIGNED_INT_VEC4_EXT", 0x8DC8},
+    {"GL_INT_SAMPLER_1D", 0x8DC9},
+    {"GL_INT_SAMPLER_1D_EXT", 0x8DC9},
+    {"GL_INT_SAMPLER_2D", 0x8DCA},
+    {"GL_INT_SAMPLER_2D_EXT", 0x8DCA},
+    {"GL_INT_SAMPLER_3D", 0x8DCB},
+    {"GL_INT_SAMPLER_3D_EXT", 0x8DCB},
+    {"GL_INT_SAMPLER_CUBE", 0x8DCC},
+    {"GL_INT_SAMPLER_CUBE_EXT", 0x8DCC},
+    {"GL_INT_SAMPLER_2D_RECT", 0x8DCD},
+    {"GL_INT_SAMPLER_2D_RECT_EXT", 0x8DCD},
+    {"GL_INT_SAMPLER_1D_ARRAY", 0x8DCE},
+    {"GL_INT_SAMPLER_1D_ARRAY_EXT", 0x8DCE},
+    {"GL_INT_SAMPLER_2D_ARRAY", 0x8DCF},
+    {"GL_INT_SAMPLER_2D_ARRAY_EXT", 0x8DCF},
+    {"GL_INT_SAMPLER_BUFFER", 0x8DD0},
+    {"GL_INT_SAMPLER_BUFFER_EXT", 0x8DD0},
+    {"GL_UNSIGNED_INT_SAMPLER_1D", 0x8DD1},
+    {"GL_UNSIGNED_INT_SAMPLER_1D_EXT", 0x8DD1},
+    {"GL_UNSIGNED_INT_SAMPLER_2D", 0x8DD2},
+    {"GL_UNSIGNED_INT_SAMPLER_2D_EXT", 0x8DD2},
+    {"GL_UNSIGNED_INT_SAMPLER_3D", 0x8DD3},
+    {"GL_UNSIGNED_INT_SAMPLER_3D_EXT", 0x8DD3},
+    {"GL_UNSIGNED_INT_SAMPLER_CUBE", 0x8DD4},
+    {"GL_UNSIGNED_INT_SAMPLER_CUBE_EXT", 0x8DD4},
+    {"GL_UNSIGNED_INT_SAMPLER_2D_RECT", 0x8DD5},
+    {"GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT", 0x8DD5},
+    {"GL_UNSIGNED_INT_SAMPLER_1D_ARRAY", 0x8DD6},
+    {"GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT", 0x8DD6},
+    {"GL_UNSIGNED_INT_SAMPLER_2D_ARRAY", 0x8DD7},
+    {"GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT", 0x8DD7},
+    {"GL_UNSIGNED_INT_SAMPLER_BUFFER", 0x8DD8},
+    {"GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT", 0x8DD8},
+    {"GL_GEOMETRY_SHADER", 0x8DD9},
+    {"GL_GEOMETRY_SHADER_ARB", 0x8DD9},
+    {"GL_GEOMETRY_SHADER_EXT", 0x8DD9},
+    {"GL_GEOMETRY_VERTICES_OUT_ARB", 0x8DDA},
+    {"GL_GEOMETRY_VERTICES_OUT_EXT", 0x8DDA},
+    {"GL_GEOMETRY_INPUT_TYPE_ARB", 0x8DDB},
+    {"GL_GEOMETRY_INPUT_TYPE_EXT", 0x8DDB},
+    {"GL_GEOMETRY_OUTPUT_TYPE_ARB", 0x8DDC},
+    {"GL_GEOMETRY_OUTPUT_TYPE_EXT", 0x8DDC},
+    {"GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB", 0x8DDD},
+    {"GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT", 0x8DDD},
+    {"GL_MAX_VERTEX_VARYING_COMPONENTS_ARB", 0x8DDE},
+    {"GL_MAX_VERTEX_VARYING_COMPONENTS_EXT", 0x8DDE},
+    {"GL_MAX_GEOMETRY_UNIFORM_COMPONENTS", 0x8DDF},
+    {"GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB", 0x8DDF},
+    {"GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT", 0x8DDF},
+    {"GL_MAX_GEOMETRY_OUTPUT_VERTICES", 0x8DE0},
+    {"GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB", 0x8DE0},
+    {"GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT", 0x8DE0},
+    {"GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS", 0x8DE1},
+    {"GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB", 0x8DE1},
+    {"GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT", 0x8DE1},
+    {"GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT", 0x8DE2},
+    {"GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT", 0x8DE3},
+    {"GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT", 0x8DE4},
+    {"GL_ACTIVE_SUBROUTINES", 0x8DE5},
+    {"GL_ACTIVE_SUBROUTINE_UNIFORMS", 0x8DE6},
+    {"GL_MAX_SUBROUTINES", 0x8DE7},
+    {"GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS", 0x8DE8},
+    {"GL_NAMED_STRING_LENGTH_ARB", 0x8DE9},
+    {"GL_NAMED_STRING_TYPE_ARB", 0x8DEA},
+    {"GL_MAX_BINDABLE_UNIFORM_SIZE_EXT", 0x8DED},
+    {"GL_UNIFORM_BUFFER_EXT", 0x8DEE},
+    {"GL_UNIFORM_BUFFER_BINDING_EXT", 0x8DEF},
+    {"GL_LOW_FLOAT", 0x8DF0},
+    {"GL_MEDIUM_FLOAT", 0x8DF1},
+    {"GL_HIGH_FLOAT", 0x8DF2},
+    {"GL_LOW_INT", 0x8DF3},
+    {"GL_MEDIUM_INT", 0x8DF4},
+    {"GL_HIGH_INT", 0x8DF5},
+    {"GL_UNSIGNED_INT_10_10_10_2_OES", 0x8DF6},
+    {"GL_INT_10_10_10_2_OES", 0x8DF7},
+    {"GL_SHADER_BINARY_FORMATS", 0x8DF8},
+    {"GL_NUM_SHADER_BINARY_FORMATS", 0x8DF9},
+    {"GL_SHADER_COMPILER", 0x8DFA},
+    {"GL_MAX_VERTEX_UNIFORM_VECTORS", 0x8DFB},
+    {"GL_MAX_VARYING_VECTORS", 0x8DFC},
+    {"GL_MAX_FRAGMENT_UNIFORM_VECTORS", 0x8DFD},
+    {"GL_RENDERBUFFER_COLOR_SAMPLES_NV", 0x8E10},
+    {"GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV", 0x8E11},
+    {"GL_MULTISAMPLE_COVERAGE_MODES_NV", 0x8E12},
+    {"GL_QUERY_WAIT", 0x8E13},
+    {"GL_QUERY_WAIT_NV", 0x8E13},
+    {"GL_QUERY_NO_WAIT", 0x8E14},
+    {"GL_QUERY_NO_WAIT_NV", 0x8E14},
+    {"GL_QUERY_BY_REGION_WAIT", 0x8E15},
+    {"GL_QUERY_BY_REGION_WAIT_NV", 0x8E15},
+    {"GL_QUERY_BY_REGION_NO_WAIT", 0x8E16},
+    {"GL_QUERY_BY_REGION_NO_WAIT_NV", 0x8E16},
+    {"GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS", 0x8E1E},
+    {"GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS", 0x8E1F},
+    {"GL_COLOR_SAMPLES_NV", 0x8E20},
+    {"GL_TRANSFORM_FEEDBACK", 0x8E22},
+    {"GL_TRANSFORM_FEEDBACK_NV", 0x8E22},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED", 0x8E23},
+    {"GL_TRANSFORM_FEEDBACK_PAUSED", 0x8E23},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV", 0x8E23},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE", 0x8E24},
+    {"GL_TRANSFORM_FEEDBACK_ACTIVE", 0x8E24},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV", 0x8E24},
+    {"GL_TRANSFORM_FEEDBACK_BINDING", 0x8E25},
+    {"GL_TRANSFORM_FEEDBACK_BINDING_NV", 0x8E25},
+    {"GL_FRAME_NV", 0x8E26},
+    {"GL_FIELDS_NV", 0x8E27},
+    {"GL_CURRENT_TIME_NV", 0x8E28},
+    {"GL_TIMESTAMP", 0x8E28},
+    {"GL_TIMESTAMP_EXT", 0x8E28},
+    {"GL_NUM_FILL_STREAMS_NV", 0x8E29},
+    {"GL_PRESENT_TIME_NV", 0x8E2A},
+    {"GL_PRESENT_DURATION_NV", 0x8E2B},
+    {"GL_DEPTH_COMPONENT16_NONLINEAR_NV", 0x8E2C},
+    {"GL_PROGRAM_MATRIX_EXT", 0x8E2D},
+    {"GL_TRANSPOSE_PROGRAM_MATRIX_EXT", 0x8E2E},
+    {"GL_PROGRAM_MATRIX_STACK_DEPTH_EXT", 0x8E2F},
+    {"GL_TEXTURE_SWIZZLE_R", 0x8E42},
+    {"GL_TEXTURE_SWIZZLE_R_EXT", 0x8E42},
+    {"GL_TEXTURE_SWIZZLE_G", 0x8E43},
+    {"GL_TEXTURE_SWIZZLE_G_EXT", 0x8E43},
+    {"GL_TEXTURE_SWIZZLE_B", 0x8E44},
+    {"GL_TEXTURE_SWIZZLE_B_EXT", 0x8E44},
+    {"GL_TEXTURE_SWIZZLE_A", 0x8E45},
+    {"GL_TEXTURE_SWIZZLE_A_EXT", 0x8E45},
+    {"GL_TEXTURE_SWIZZLE_RGBA", 0x8E46},
+    {"GL_TEXTURE_SWIZZLE_RGBA_EXT", 0x8E46},
+    {"GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS", 0x8E47},
+    {"GL_ACTIVE_SUBROUTINE_MAX_LENGTH", 0x8E48},
+    {"GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH", 0x8E49},
+    {"GL_NUM_COMPATIBLE_SUBROUTINES", 0x8E4A},
+    {"GL_COMPATIBLE_SUBROUTINES", 0x8E4B},
+    {"GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION", 0x8E4C},
+    {"GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT", 0x8E4C},
+    {"GL_FIRST_VERTEX_CONVENTION", 0x8E4D},
+    {"GL_FIRST_VERTEX_CONVENTION_EXT", 0x8E4D},
+    {"GL_LAST_VERTEX_CONVENTION", 0x8E4E},
+    {"GL_LAST_VERTEX_CONVENTION_EXT", 0x8E4E},
+    {"GL_PROVOKING_VERTEX", 0x8E4F},
+    {"GL_PROVOKING_VERTEX_EXT", 0x8E4F},
+    {"GL_SAMPLE_POSITION", 0x8E50},
+    {"GL_SAMPLE_POSITION_NV", 0x8E50},
+    {"GL_SAMPLE_MASK", 0x8E51},
+    {"GL_SAMPLE_MASK_NV", 0x8E51},
+    {"GL_SAMPLE_MASK_VALUE", 0x8E52},
+    {"GL_SAMPLE_MASK_VALUE_NV", 0x8E52},
+    {"GL_TEXTURE_BINDING_RENDERBUFFER_NV", 0x8E53},
+    {"GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV", 0x8E54},
+    {"GL_TEXTURE_RENDERBUFFER_NV", 0x8E55},
+    {"GL_SAMPLER_RENDERBUFFER_NV", 0x8E56},
+    {"GL_INT_SAMPLER_RENDERBUFFER_NV", 0x8E57},
+    {"GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV", 0x8E58},
+    {"GL_MAX_SAMPLE_MASK_WORDS", 0x8E59},
+    {"GL_MAX_SAMPLE_MASK_WORDS_NV", 0x8E59},
+    {"GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV", 0x8E5A},
+    {"GL_MAX_GEOMETRY_SHADER_INVOCATIONS", 0x8E5A},
+    {"GL_MIN_FRAGMENT_INTERPOLATION_OFFSET", 0x8E5B},
+    {"GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV", 0x8E5B},
+    {"GL_MAX_FRAGMENT_INTERPOLATION_OFFSET", 0x8E5C},
+    {"GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV", 0x8E5C},
+    {"GL_FRAGMENT_INTERPOLATION_OFFSET_BITS", 0x8E5D},
+    {"GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV", 0x8E5D},
+    {"GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET", 0x8E5E},
+    {"GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB", 0x8E5E},
+    {"GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV", 0x8E5E},
+    {"GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET", 0x8E5F},
+    {"GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB", 0x8E5F},
+    {"GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV", 0x8E5F},
+    {"GL_MAX_TRANSFORM_FEEDBACK_BUFFERS", 0x8E70},
+    {"GL_MAX_VERTEX_STREAMS", 0x8E71},
+    {"GL_PATCH_VERTICES", 0x8E72},
+    {"GL_PATCH_DEFAULT_INNER_LEVEL", 0x8E73},
+    {"GL_PATCH_DEFAULT_OUTER_LEVEL", 0x8E74},
+    {"GL_TESS_CONTROL_OUTPUT_VERTICES", 0x8E75},
+    {"GL_TESS_GEN_MODE", 0x8E76},
+    {"GL_TESS_GEN_SPACING", 0x8E77},
+    {"GL_TESS_GEN_VERTEX_ORDER", 0x8E78},
+    {"GL_TESS_GEN_POINT_MODE", 0x8E79},
+    {"GL_ISOLINES", 0x8E7A},
+    {"GL_FRACTIONAL_ODD", 0x8E7B},
+    {"GL_FRACTIONAL_EVEN", 0x8E7C},
+    {"GL_MAX_PATCH_VERTICES", 0x8E7D},
+    {"GL_MAX_TESS_GEN_LEVEL", 0x8E7E},
+    {"GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS", 0x8E7F},
+    {"GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS", 0x8E80},
+    {"GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS", 0x8E81},
+    {"GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS", 0x8E82},
+    {"GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS", 0x8E83},
+    {"GL_MAX_TESS_PATCH_COMPONENTS", 0x8E84},
+    {"GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS", 0x8E85},
+    {"GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS", 0x8E86},
+    {"GL_TESS_EVALUATION_SHADER", 0x8E87},
+    {"GL_TESS_CONTROL_SHADER", 0x8E88},
+    {"GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS", 0x8E89},
+    {"GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS", 0x8E8A},
+    {"GL_COMPRESSED_RGBA_BPTC_UNORM_ARB", 0x8E8C},
+    {"GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB", 0x8E8D},
+    {"GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB", 0x8E8E},
+    {"GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB", 0x8E8F},
+    {"GL_COVERAGE_COMPONENT_NV", 0x8ED0},
+    {"GL_COVERAGE_COMPONENT4_NV", 0x8ED1},
+    {"GL_COVERAGE_ATTACHMENT_NV", 0x8ED2},
+    {"GL_COVERAGE_BUFFERS_NV", 0x8ED3},
+    {"GL_COVERAGE_SAMPLES_NV", 0x8ED4},
+    {"GL_COVERAGE_ALL_FRAGMENTS_NV", 0x8ED5},
+    {"GL_COVERAGE_EDGE_FRAGMENTS_NV", 0x8ED6},
+    {"GL_COVERAGE_AUTOMATIC_NV", 0x8ED7},
+    {"GL_BUFFER_GPU_ADDRESS_NV", 0x8F1D},
+    {"GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV", 0x8F1E},
+    {"GL_ELEMENT_ARRAY_UNIFIED_NV", 0x8F1F},
+    {"GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV", 0x8F20},
+    {"GL_VERTEX_ARRAY_ADDRESS_NV", 0x8F21},
+    {"GL_NORMAL_ARRAY_ADDRESS_NV", 0x8F22},
+    {"GL_COLOR_ARRAY_ADDRESS_NV", 0x8F23},
+    {"GL_INDEX_ARRAY_ADDRESS_NV", 0x8F24},
+    {"GL_TEXTURE_COORD_ARRAY_ADDRESS_NV", 0x8F25},
+    {"GL_EDGE_FLAG_ARRAY_ADDRESS_NV", 0x8F26},
+    {"GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV", 0x8F27},
+    {"GL_FOG_COORD_ARRAY_ADDRESS_NV", 0x8F28},
+    {"GL_ELEMENT_ARRAY_ADDRESS_NV", 0x8F29},
+    {"GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV", 0x8F2A},
+    {"GL_VERTEX_ARRAY_LENGTH_NV", 0x8F2B},
+    {"GL_NORMAL_ARRAY_LENGTH_NV", 0x8F2C},
+    {"GL_COLOR_ARRAY_LENGTH_NV", 0x8F2D},
+    {"GL_INDEX_ARRAY_LENGTH_NV", 0x8F2E},
+    {"GL_TEXTURE_COORD_ARRAY_LENGTH_NV", 0x8F2F},
+    {"GL_EDGE_FLAG_ARRAY_LENGTH_NV", 0x8F30},
+    {"GL_SECONDARY_COLOR_ARRAY_LENGTH_NV", 0x8F31},
+    {"GL_FOG_COORD_ARRAY_LENGTH_NV", 0x8F32},
+    {"GL_ELEMENT_ARRAY_LENGTH_NV", 0x8F33},
+    {"GL_GPU_ADDRESS_NV", 0x8F34},
+    {"GL_MAX_SHADER_BUFFER_ADDRESS_NV", 0x8F35},
+    {"GL_COPY_READ_BUFFER", 0x8F36},
+    {"GL_COPY_READ_BUFFER_BINDING", 0x8F36},
+    {"GL_COPY_WRITE_BUFFER", 0x8F37},
+    {"GL_COPY_WRITE_BUFFER_BINDING", 0x8F37},
+    {"GL_MAX_IMAGE_UNITS", 0x8F38},
+    {"GL_MAX_IMAGE_UNITS_EXT", 0x8F38},
+    {"GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS", 0x8F39},
+    {"GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT", 0x8F39},
+    {"GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES", 0x8F39},
+    {"GL_IMAGE_BINDING_NAME", 0x8F3A},
+    {"GL_IMAGE_BINDING_NAME_EXT", 0x8F3A},
+    {"GL_IMAGE_BINDING_LEVEL", 0x8F3B},
+    {"GL_IMAGE_BINDING_LEVEL_EXT", 0x8F3B},
+    {"GL_IMAGE_BINDING_LAYERED", 0x8F3C},
+    {"GL_IMAGE_BINDING_LAYERED_EXT", 0x8F3C},
+    {"GL_IMAGE_BINDING_LAYER", 0x8F3D},
+    {"GL_IMAGE_BINDING_LAYER_EXT", 0x8F3D},
+    {"GL_IMAGE_BINDING_ACCESS", 0x8F3E},
+    {"GL_IMAGE_BINDING_ACCESS_EXT", 0x8F3E},
+    {"GL_DRAW_INDIRECT_BUFFER", 0x8F3F},
+    {"GL_DRAW_INDIRECT_UNIFIED_NV", 0x8F40},
+    {"GL_DRAW_INDIRECT_ADDRESS_NV", 0x8F41},
+    {"GL_DRAW_INDIRECT_LENGTH_NV", 0x8F42},
+    {"GL_DRAW_INDIRECT_BUFFER_BINDING", 0x8F43},
+    {"GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV", 0x8F44},
+    {"GL_MAX_PROGRAM_SUBROUTINE_NUM_NV", 0x8F45},
+    {"GL_DOUBLE_MAT2", 0x8F46},
+    {"GL_DOUBLE_MAT2_EXT", 0x8F46},
+    {"GL_DOUBLE_MAT3", 0x8F47},
+    {"GL_DOUBLE_MAT3_EXT", 0x8F47},
+    {"GL_DOUBLE_MAT4", 0x8F48},
+    {"GL_DOUBLE_MAT4_EXT", 0x8F48},
+    {"GL_DOUBLE_MAT2x3", 0x8F49},
+    {"GL_DOUBLE_MAT2x3_EXT", 0x8F49},
+    {"GL_DOUBLE_MAT2x4", 0x8F4A},
+    {"GL_DOUBLE_MAT2x4_EXT", 0x8F4A},
+    {"GL_DOUBLE_MAT3x2", 0x8F4B},
+    {"GL_DOUBLE_MAT3x2_EXT", 0x8F4B},
+    {"GL_DOUBLE_MAT3x4", 0x8F4C},
+    {"GL_DOUBLE_MAT3x4_EXT", 0x8F4C},
+    {"GL_DOUBLE_MAT4x2", 0x8F4D},
+    {"GL_DOUBLE_MAT4x2_EXT", 0x8F4D},
+    {"GL_DOUBLE_MAT4x3", 0x8F4E},
+    {"GL_DOUBLE_MAT4x3_EXT", 0x8F4E},
+    {"GL_MALI_SHADER_BINARY_ARM", 0x8F60},
+    {"GL_MALI_PROGRAM_BINARY_ARM", 0x8F61},
+    {"GL_RED_SNORM", 0x8F90},
+    {"GL_RG_SNORM", 0x8F91},
+    {"GL_RGB_SNORM", 0x8F92},
+    {"GL_RGBA_SNORM", 0x8F93},
+    {"GL_R8_SNORM", 0x8F94},
+    {"GL_RG8_SNORM", 0x8F95},
+    {"GL_RGB8_SNORM", 0x8F96},
+    {"GL_RGBA8_SNORM", 0x8F97},
+    {"GL_R16_SNORM", 0x8F98},
+    {"GL_RG16_SNORM", 0x8F99},
+    {"GL_RGB16_SNORM", 0x8F9A},
+    {"GL_RGBA16_SNORM", 0x8F9B},
+    {"GL_SIGNED_NORMALIZED", 0x8F9C},
+    {"GL_PRIMITIVE_RESTART", 0x8F9D},
+    {"GL_PRIMITIVE_RESTART_INDEX", 0x8F9E},
+    {"GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB", 0x8F9F},
+    {"GL_PERFMON_GLOBAL_MODE_QCOM", 0x8FA0},
+    {"GL_BINNING_CONTROL_HINT_QCOM", 0x8FB0},
+    {"GL_CPU_OPTIMIZED_QCOM", 0x8FB1},
+    {"GL_GPU_OPTIMIZED_QCOM", 0x8FB2},
+    {"GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM", 0x8FB3},
+    {"GL_GPU_DISJOINT_EXT", 0x8FBB},
+    {"GL_SHADER_BINARY_VIV", 0x8FC4},
+    {"GL_INT8_NV", 0x8FE0},
+    {"GL_INT8_VEC2_NV", 0x8FE1},
+    {"GL_INT8_VEC3_NV", 0x8FE2},
+    {"GL_INT8_VEC4_NV", 0x8FE3},
+    {"GL_INT16_NV", 0x8FE4},
+    {"GL_INT16_VEC2_NV", 0x8FE5},
+    {"GL_INT16_VEC3_NV", 0x8FE6},
+    {"GL_INT16_VEC4_NV", 0x8FE7},
+    {"GL_INT64_VEC2_NV", 0x8FE9},
+    {"GL_INT64_VEC3_NV", 0x8FEA},
+    {"GL_INT64_VEC4_NV", 0x8FEB},
+    {"GL_UNSIGNED_INT8_NV", 0x8FEC},
+    {"GL_UNSIGNED_INT8_VEC2_NV", 0x8FED},
+    {"GL_UNSIGNED_INT8_VEC3_NV", 0x8FEE},
+    {"GL_UNSIGNED_INT8_VEC4_NV", 0x8FEF},
+    {"GL_UNSIGNED_INT16_NV", 0x8FF0},
+    {"GL_UNSIGNED_INT16_VEC2_NV", 0x8FF1},
+    {"GL_UNSIGNED_INT16_VEC3_NV", 0x8FF2},
+    {"GL_UNSIGNED_INT16_VEC4_NV", 0x8FF3},
+    {"GL_UNSIGNED_INT64_VEC2_NV", 0x8FF5},
+    {"GL_UNSIGNED_INT64_VEC3_NV", 0x8FF6},
+    {"GL_UNSIGNED_INT64_VEC4_NV", 0x8FF7},
+    {"GL_FLOAT16_NV", 0x8FF8},
+    {"GL_FLOAT16_VEC2_NV", 0x8FF9},
+    {"GL_FLOAT16_VEC3_NV", 0x8FFA},
+    {"GL_FLOAT16_VEC4_NV", 0x8FFB},
+    {"GL_DOUBLE_VEC2", 0x8FFC},
+    {"GL_DOUBLE_VEC2_EXT", 0x8FFC},
+    {"GL_DOUBLE_VEC3", 0x8FFD},
+    {"GL_DOUBLE_VEC3_EXT", 0x8FFD},
+    {"GL_DOUBLE_VEC4", 0x8FFE},
+    {"GL_DOUBLE_VEC4_EXT", 0x8FFE},
+    {"GL_SAMPLER_BUFFER_AMD", 0x9001},
+    {"GL_INT_SAMPLER_BUFFER_AMD", 0x9002},
+    {"GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD", 0x9003},
+    {"GL_TESSELLATION_MODE_AMD", 0x9004},
+    {"GL_TESSELLATION_FACTOR_AMD", 0x9005},
+    {"GL_DISCRETE_AMD", 0x9006},
+    {"GL_CONTINUOUS_AMD", 0x9007},
+    {"GL_TEXTURE_CUBE_MAP_ARRAY", 0x9009},
+    {"GL_TEXTURE_CUBE_MAP_ARRAY_ARB", 0x9009},
+    {"GL_TEXTURE_BINDING_CUBE_MAP_ARRAY", 0x900A},
+    {"GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB", 0x900A},
+    {"GL_PROXY_TEXTURE_CUBE_MAP_ARRAY", 0x900B},
+    {"GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB", 0x900B},
+    {"GL_SAMPLER_CUBE_MAP_ARRAY", 0x900C},
+    {"GL_SAMPLER_CUBE_MAP_ARRAY_ARB", 0x900C},
+    {"GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW", 0x900D},
+    {"GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB", 0x900D},
+    {"GL_INT_SAMPLER_CUBE_MAP_ARRAY", 0x900E},
+    {"GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB", 0x900E},
+    {"GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY", 0x900F},
+    {"GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB", 0x900F},
+    {"GL_ALPHA_SNORM", 0x9010},
+    {"GL_LUMINANCE_SNORM", 0x9011},
+    {"GL_LUMINANCE_ALPHA_SNORM", 0x9012},
+    {"GL_INTENSITY_SNORM", 0x9013},
+    {"GL_ALPHA8_SNORM", 0x9014},
+    {"GL_LUMINANCE8_SNORM", 0x9015},
+    {"GL_LUMINANCE8_ALPHA8_SNORM", 0x9016},
+    {"GL_INTENSITY8_SNORM", 0x9017},
+    {"GL_ALPHA16_SNORM", 0x9018},
+    {"GL_LUMINANCE16_SNORM", 0x9019},
+    {"GL_LUMINANCE16_ALPHA16_SNORM", 0x901A},
+    {"GL_INTENSITY16_SNORM", 0x901B},
+    {"GL_FACTOR_MIN_AMD", 0x901C},
+    {"GL_FACTOR_MAX_AMD", 0x901D},
+    {"GL_DEPTH_CLAMP_NEAR_AMD", 0x901E},
+    {"GL_DEPTH_CLAMP_FAR_AMD", 0x901F},
+    {"GL_VIDEO_BUFFER_NV", 0x9020},
+    {"GL_VIDEO_BUFFER_BINDING_NV", 0x9021},
+    {"GL_FIELD_UPPER_NV", 0x9022},
+    {"GL_FIELD_LOWER_NV", 0x9023},
+    {"GL_NUM_VIDEO_CAPTURE_STREAMS_NV", 0x9024},
+    {"GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV", 0x9025},
+    {"GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV", 0x9026},
+    {"GL_LAST_VIDEO_CAPTURE_STATUS_NV", 0x9027},
+    {"GL_VIDEO_BUFFER_PITCH_NV", 0x9028},
+    {"GL_VIDEO_COLOR_CONVERSION_MATRIX_NV", 0x9029},
+    {"GL_VIDEO_COLOR_CONVERSION_MAX_NV", 0x902A},
+    {"GL_VIDEO_COLOR_CONVERSION_MIN_NV", 0x902B},
+    {"GL_VIDEO_COLOR_CONVERSION_OFFSET_NV", 0x902C},
+    {"GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV", 0x902D},
+    {"GL_PARTIAL_SUCCESS_NV", 0x902E},
+    {"GL_SUCCESS_NV", 0x902F},
+    {"GL_FAILURE_NV", 0x9030},
+    {"GL_YCBYCR8_422_NV", 0x9031},
+    {"GL_YCBAYCR8A_4224_NV", 0x9032},
+    {"GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV", 0x9033},
+    {"GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV", 0x9034},
+    {"GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV", 0x9035},
+    {"GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV", 0x9036},
+    {"GL_Z4Y12Z4CB12Z4CR12_444_NV", 0x9037},
+    {"GL_VIDEO_CAPTURE_FRAME_WIDTH_NV", 0x9038},
+    {"GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV", 0x9039},
+    {"GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV", 0x903A},
+    {"GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV", 0x903B},
+    {"GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV", 0x903C},
+    {"GL_TEXTURE_COVERAGE_SAMPLES_NV", 0x9045},
+    {"GL_TEXTURE_COLOR_SAMPLES_NV", 0x9046},
+    {"GL_IMAGE_1D", 0x904C},
+    {"GL_IMAGE_1D_EXT", 0x904C},
+    {"GL_IMAGE_2D", 0x904D},
+    {"GL_IMAGE_2D_EXT", 0x904D},
+    {"GL_IMAGE_3D", 0x904E},
+    {"GL_IMAGE_3D_EXT", 0x904E},
+    {"GL_IMAGE_2D_RECT", 0x904F},
+    {"GL_IMAGE_2D_RECT_EXT", 0x904F},
+    {"GL_IMAGE_CUBE", 0x9050},
+    {"GL_IMAGE_CUBE_EXT", 0x9050},
+    {"GL_IMAGE_BUFFER", 0x9051},
+    {"GL_IMAGE_BUFFER_EXT", 0x9051},
+    {"GL_IMAGE_1D_ARRAY", 0x9052},
+    {"GL_IMAGE_1D_ARRAY_EXT", 0x9052},
+    {"GL_IMAGE_2D_ARRAY", 0x9053},
+    {"GL_IMAGE_2D_ARRAY_EXT", 0x9053},
+    {"GL_IMAGE_CUBE_MAP_ARRAY", 0x9054},
+    {"GL_IMAGE_CUBE_MAP_ARRAY_EXT", 0x9054},
+    {"GL_IMAGE_2D_MULTISAMPLE", 0x9055},
+    {"GL_IMAGE_2D_MULTISAMPLE_EXT", 0x9055},
+    {"GL_IMAGE_2D_MULTISAMPLE_ARRAY", 0x9056},
+    {"GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT", 0x9056},
+    {"GL_INT_IMAGE_1D", 0x9057},
+    {"GL_INT_IMAGE_1D_EXT", 0x9057},
+    {"GL_INT_IMAGE_2D", 0x9058},
+    {"GL_INT_IMAGE_2D_EXT", 0x9058},
+    {"GL_INT_IMAGE_3D", 0x9059},
+    {"GL_INT_IMAGE_3D_EXT", 0x9059},
+    {"GL_INT_IMAGE_2D_RECT", 0x905A},
+    {"GL_INT_IMAGE_2D_RECT_EXT", 0x905A},
+    {"GL_INT_IMAGE_CUBE", 0x905B},
+    {"GL_INT_IMAGE_CUBE_EXT", 0x905B},
+    {"GL_INT_IMAGE_BUFFER", 0x905C},
+    {"GL_INT_IMAGE_BUFFER_EXT", 0x905C},
+    {"GL_INT_IMAGE_1D_ARRAY", 0x905D},
+    {"GL_INT_IMAGE_1D_ARRAY_EXT", 0x905D},
+    {"GL_INT_IMAGE_2D_ARRAY", 0x905E},
+    {"GL_INT_IMAGE_2D_ARRAY_EXT", 0x905E},
+    {"GL_INT_IMAGE_CUBE_MAP_ARRAY", 0x905F},
+    {"GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT", 0x905F},
+    {"GL_INT_IMAGE_2D_MULTISAMPLE", 0x9060},
+    {"GL_INT_IMAGE_2D_MULTISAMPLE_EXT", 0x9060},
+    {"GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY", 0x9061},
+    {"GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT", 0x9061},
+    {"GL_UNSIGNED_INT_IMAGE_1D", 0x9062},
+    {"GL_UNSIGNED_INT_IMAGE_1D_EXT", 0x9062},
+    {"GL_UNSIGNED_INT_IMAGE_2D", 0x9063},
+    {"GL_UNSIGNED_INT_IMAGE_2D_EXT", 0x9063},
+    {"GL_UNSIGNED_INT_IMAGE_3D", 0x9064},
+    {"GL_UNSIGNED_INT_IMAGE_3D_EXT", 0x9064},
+    {"GL_UNSIGNED_INT_IMAGE_2D_RECT", 0x9065},
+    {"GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT", 0x9065},
+    {"GL_UNSIGNED_INT_IMAGE_CUBE", 0x9066},
+    {"GL_UNSIGNED_INT_IMAGE_CUBE_EXT", 0x9066},
+    {"GL_UNSIGNED_INT_IMAGE_BUFFER", 0x9067},
+    {"GL_UNSIGNED_INT_IMAGE_BUFFER_EXT", 0x9067},
+    {"GL_UNSIGNED_INT_IMAGE_1D_ARRAY", 0x9068},
+    {"GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT", 0x9068},
+    {"GL_UNSIGNED_INT_IMAGE_2D_ARRAY", 0x9069},
+    {"GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT", 0x9069},
+    {"GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY", 0x906A},
+    {"GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT", 0x906A},
+    {"GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE", 0x906B},
+    {"GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT", 0x906B},
+    {"GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY", 0x906C},
+    {"GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT", 0x906C},
+    {"GL_MAX_IMAGE_SAMPLES", 0x906D},
+    {"GL_MAX_IMAGE_SAMPLES_EXT", 0x906D},
+    {"GL_IMAGE_BINDING_FORMAT", 0x906E},
+    {"GL_IMAGE_BINDING_FORMAT_EXT", 0x906E},
+    {"GL_RGB10_A2UI", 0x906F},
+    {"GL_PATH_FORMAT_SVG_NV", 0x9070},
+    {"GL_PATH_FORMAT_PS_NV", 0x9071},
+    {"GL_STANDARD_FONT_NAME_NV", 0x9072},
+    {"GL_SYSTEM_FONT_NAME_NV", 0x9073},
+    {"GL_FILE_NAME_NV", 0x9074},
+    {"GL_PATH_STROKE_WIDTH_NV", 0x9075},
+    {"GL_PATH_END_CAPS_NV", 0x9076},
+    {"GL_PATH_INITIAL_END_CAP_NV", 0x9077},
+    {"GL_PATH_TERMINAL_END_CAP_NV", 0x9078},
+    {"GL_PATH_JOIN_STYLE_NV", 0x9079},
+    {"GL_PATH_MITER_LIMIT_NV", 0x907A},
+    {"GL_PATH_DASH_CAPS_NV", 0x907B},
+    {"GL_PATH_INITIAL_DASH_CAP_NV", 0x907C},
+    {"GL_PATH_TERMINAL_DASH_CAP_NV", 0x907D},
+    {"GL_PATH_DASH_OFFSET_NV", 0x907E},
+    {"GL_PATH_CLIENT_LENGTH_NV", 0x907F},
+    {"GL_PATH_FILL_MODE_NV", 0x9080},
+    {"GL_PATH_FILL_MASK_NV", 0x9081},
+    {"GL_PATH_FILL_COVER_MODE_NV", 0x9082},
+    {"GL_PATH_STROKE_COVER_MODE_NV", 0x9083},
+    {"GL_PATH_STROKE_MASK_NV", 0x9084},
+    {"GL_COUNT_UP_NV", 0x9088},
+    {"GL_COUNT_DOWN_NV", 0x9089},
+    {"GL_PATH_OBJECT_BOUNDING_BOX_NV", 0x908A},
+    {"GL_CONVEX_HULL_NV", 0x908B},
+    {"GL_BOUNDING_BOX_NV", 0x908D},
+    {"GL_TRANSLATE_X_NV", 0x908E},
+    {"GL_TRANSLATE_Y_NV", 0x908F},
+    {"GL_TRANSLATE_2D_NV", 0x9090},
+    {"GL_TRANSLATE_3D_NV", 0x9091},
+    {"GL_AFFINE_2D_NV", 0x9092},
+    {"GL_AFFINE_3D_NV", 0x9094},
+    {"GL_TRANSPOSE_AFFINE_2D_NV", 0x9096},
+    {"GL_TRANSPOSE_AFFINE_3D_NV", 0x9098},
+    {"GL_UTF8_NV", 0x909A},
+    {"GL_UTF16_NV", 0x909B},
+    {"GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV", 0x909C},
+    {"GL_PATH_COMMAND_COUNT_NV", 0x909D},
+    {"GL_PATH_COORD_COUNT_NV", 0x909E},
+    {"GL_PATH_DASH_ARRAY_COUNT_NV", 0x909F},
+    {"GL_PATH_COMPUTED_LENGTH_NV", 0x90A0},
+    {"GL_PATH_FILL_BOUNDING_BOX_NV", 0x90A1},
+    {"GL_PATH_STROKE_BOUNDING_BOX_NV", 0x90A2},
+    {"GL_SQUARE_NV", 0x90A3},
+    {"GL_ROUND_NV", 0x90A4},
+    {"GL_TRIANGULAR_NV", 0x90A5},
+    {"GL_BEVEL_NV", 0x90A6},
+    {"GL_MITER_REVERT_NV", 0x90A7},
+    {"GL_MITER_TRUNCATE_NV", 0x90A8},
+    {"GL_SKIP_MISSING_GLYPH_NV", 0x90A9},
+    {"GL_USE_MISSING_GLYPH_NV", 0x90AA},
+    {"GL_PATH_ERROR_POSITION_NV", 0x90AB},
+    {"GL_PATH_FOG_GEN_MODE_NV", 0x90AC},
+    {"GL_ACCUM_ADJACENT_PAIRS_NV", 0x90AD},
+    {"GL_ADJACENT_PAIRS_NV", 0x90AE},
+    {"GL_FIRST_TO_REST_NV", 0x90AF},
+    {"GL_PATH_GEN_MODE_NV", 0x90B0},
+    {"GL_PATH_GEN_COEFF_NV", 0x90B1},
+    {"GL_PATH_GEN_COLOR_FORMAT_NV", 0x90B2},
+    {"GL_PATH_GEN_COMPONENTS_NV", 0x90B3},
+    {"GL_PATH_DASH_OFFSET_RESET_NV", 0x90B4},
+    {"GL_MOVE_TO_RESETS_NV", 0x90B5},
+    {"GL_MOVE_TO_CONTINUES_NV", 0x90B6},
+    {"GL_PATH_STENCIL_FUNC_NV", 0x90B7},
+    {"GL_PATH_STENCIL_REF_NV", 0x90B8},
+    {"GL_PATH_STENCIL_VALUE_MASK_NV", 0x90B9},
+    {"GL_SCALED_RESOLVE_FASTEST_EXT", 0x90BA},
+    {"GL_SCALED_RESOLVE_NICEST_EXT", 0x90BB},
+    {"GL_MIN_MAP_BUFFER_ALIGNMENT", 0x90BC},
+    {"GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV", 0x90BD},
+    {"GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV", 0x90BE},
+    {"GL_PATH_COVER_DEPTH_FUNC_NV", 0x90BF},
+    {"GL_IMAGE_FORMAT_COMPATIBILITY_TYPE", 0x90C7},
+    {"GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE", 0x90C8},
+    {"GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS", 0x90C9},
+    {"GL_MAX_VERTEX_IMAGE_UNIFORMS", 0x90CA},
+    {"GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS", 0x90CB},
+    {"GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS", 0x90CC},
+    {"GL_MAX_GEOMETRY_IMAGE_UNIFORMS", 0x90CD},
+    {"GL_MAX_FRAGMENT_IMAGE_UNIFORMS", 0x90CE},
+    {"GL_MAX_COMBINED_IMAGE_UNIFORMS", 0x90CF},
+    {"GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV", 0x90D0},
+    {"GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV", 0x90D1},
+    {"GL_SHADER_STORAGE_BUFFER", 0x90D2},
+    {"GL_SHADER_STORAGE_BUFFER_BINDING", 0x90D3},
+    {"GL_SHADER_STORAGE_BUFFER_START", 0x90D4},
+    {"GL_SHADER_STORAGE_BUFFER_SIZE", 0x90D5},
+    {"GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS", 0x90D6},
+    {"GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS", 0x90D7},
+    {"GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS", 0x90D8},
+    {"GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS", 0x90D9},
+    {"GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS", 0x90DA},
+    {"GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS", 0x90DB},
+    {"GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS", 0x90DC},
+    {"GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS", 0x90DD},
+    {"GL_MAX_SHADER_STORAGE_BLOCK_SIZE", 0x90DE},
+    {"GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT", 0x90DF},
+    {"GL_SYNC_X11_FENCE_EXT", 0x90E1},
+    {"GL_DEPTH_STENCIL_TEXTURE_MODE", 0x90EA},
+    {"GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB", 0x90EB},
+    {"GL_MAX_COMPUTE_LOCAL_INVOCATIONS", 0x90EB},
+    {"GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER", 0x90EC},
+    {"GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER", 0x90ED},
+    {"GL_DISPATCH_INDIRECT_BUFFER", 0x90EE},
+    {"GL_DISPATCH_INDIRECT_BUFFER_BINDING", 0x90EF},
+    {"GL_COLOR_ATTACHMENT_EXT", 0x90F0},
+    {"GL_MULTIVIEW_EXT", 0x90F1},
+    {"GL_MAX_MULTIVIEW_BUFFERS_EXT", 0x90F2},
+    {"GL_COMPUTE_PROGRAM_NV", 0x90FB},
+    {"GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV", 0x90FC},
+    {"GL_TEXTURE_2D_MULTISAMPLE", 0x9100},
+    {"GL_PROXY_TEXTURE_2D_MULTISAMPLE", 0x9101},
+    {"GL_TEXTURE_2D_MULTISAMPLE_ARRAY", 0x9102},
+    {"GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY", 0x9103},
+    {"GL_TEXTURE_BINDING_2D_MULTISAMPLE", 0x9104},
+    {"GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY", 0x9105},
+    {"GL_TEXTURE_SAMPLES", 0x9106},
+    {"GL_TEXTURE_FIXED_SAMPLE_LOCATIONS", 0x9107},
+    {"GL_SAMPLER_2D_MULTISAMPLE", 0x9108},
+    {"GL_INT_SAMPLER_2D_MULTISAMPLE", 0x9109},
+    {"GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE", 0x910A},
+    {"GL_SAMPLER_2D_MULTISAMPLE_ARRAY", 0x910B},
+    {"GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY", 0x910C},
+    {"GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY", 0x910D},
+    {"GL_MAX_COLOR_TEXTURE_SAMPLES", 0x910E},
+    {"GL_MAX_DEPTH_TEXTURE_SAMPLES", 0x910F},
+    {"GL_MAX_INTEGER_SAMPLES", 0x9110},
+    {"GL_MAX_SERVER_WAIT_TIMEOUT", 0x9111},
+    {"GL_MAX_SERVER_WAIT_TIMEOUT_APPLE", 0x9111},
+    {"GL_OBJECT_TYPE", 0x9112},
+    {"GL_OBJECT_TYPE_APPLE", 0x9112},
+    {"GL_SYNC_CONDITION", 0x9113},
+    {"GL_SYNC_CONDITION_APPLE", 0x9113},
+    {"GL_SYNC_STATUS", 0x9114},
+    {"GL_SYNC_STATUS_APPLE", 0x9114},
+    {"GL_SYNC_FLAGS", 0x9115},
+    {"GL_SYNC_FLAGS_APPLE", 0x9115},
+    {"GL_SYNC_FENCE", 0x9116},
+    {"GL_SYNC_FENCE_APPLE", 0x9116},
+    {"GL_SYNC_GPU_COMMANDS_COMPLETE", 0x9117},
+    {"GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE", 0x9117},
+    {"GL_UNSIGNALED", 0x9118},
+    {"GL_UNSIGNALED_APPLE", 0x9118},
+    {"GL_SIGNALED", 0x9119},
+    {"GL_SIGNALED_APPLE", 0x9119},
+    {"GL_ALREADY_SIGNALED", 0x911A},
+    {"GL_ALREADY_SIGNALED_APPLE", 0x911A},
+    {"GL_TIMEOUT_EXPIRED", 0x911B},
+    {"GL_TIMEOUT_EXPIRED_APPLE", 0x911B},
+    {"GL_CONDITION_SATISFIED", 0x911C},
+    {"GL_CONDITION_SATISFIED_APPLE", 0x911C},
+    {"GL_WAIT_FAILED", 0x911D},
+    {"GL_WAIT_FAILED_APPLE", 0x911D},
+    {"GL_BUFFER_ACCESS_FLAGS", 0x911F},
+    {"GL_BUFFER_MAP_LENGTH", 0x9120},
+    {"GL_BUFFER_MAP_OFFSET", 0x9121},
+    {"GL_MAX_VERTEX_OUTPUT_COMPONENTS", 0x9122},
+    {"GL_MAX_GEOMETRY_INPUT_COMPONENTS", 0x9123},
+    {"GL_MAX_GEOMETRY_OUTPUT_COMPONENTS", 0x9124},
+    {"GL_MAX_FRAGMENT_INPUT_COMPONENTS", 0x9125},
+    {"GL_CONTEXT_PROFILE_MASK", 0x9126},
+    {"GL_UNPACK_COMPRESSED_BLOCK_WIDTH", 0x9127},
+    {"GL_UNPACK_COMPRESSED_BLOCK_HEIGHT", 0x9128},
+    {"GL_UNPACK_COMPRESSED_BLOCK_DEPTH", 0x9129},
+    {"GL_UNPACK_COMPRESSED_BLOCK_SIZE", 0x912A},
+    {"GL_PACK_COMPRESSED_BLOCK_WIDTH", 0x912B},
+    {"GL_PACK_COMPRESSED_BLOCK_HEIGHT", 0x912C},
+    {"GL_PACK_COMPRESSED_BLOCK_DEPTH", 0x912D},
+    {"GL_PACK_COMPRESSED_BLOCK_SIZE", 0x912E},
+    {"GL_TEXTURE_IMMUTABLE_FORMAT", 0x912F},
+    {"GL_SGX_PROGRAM_BINARY_IMG", 0x9130},
+    {"GL_RENDERBUFFER_SAMPLES_IMG", 0x9133},
+    {"GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG", 0x9134},
+    {"GL_MAX_SAMPLES_IMG", 0x9135},
+    {"GL_TEXTURE_SAMPLES_IMG", 0x9136},
+    {"GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG", 0x9137},
+    {"GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG", 0x9138},
+    {"GL_MAX_DEBUG_MESSAGE_LENGTH", 0x9143},
+    {"GL_MAX_DEBUG_MESSAGE_LENGTH_AMD", 0x9143},
+    {"GL_MAX_DEBUG_MESSAGE_LENGTH_ARB", 0x9143},
+    {"GL_MAX_DEBUG_MESSAGE_LENGTH_KHR", 0x9143},
+    {"GL_MAX_DEBUG_LOGGED_MESSAGES", 0x9144},
+    {"GL_MAX_DEBUG_LOGGED_MESSAGES_AMD", 0x9144},
+    {"GL_MAX_DEBUG_LOGGED_MESSAGES_ARB", 0x9144},
+    {"GL_MAX_DEBUG_LOGGED_MESSAGES_KHR", 0x9144},
+    {"GL_DEBUG_LOGGED_MESSAGES", 0x9145},
+    {"GL_DEBUG_LOGGED_MESSAGES_AMD", 0x9145},
+    {"GL_DEBUG_LOGGED_MESSAGES_ARB", 0x9145},
+    {"GL_DEBUG_LOGGED_MESSAGES_KHR", 0x9145},
+    {"GL_DEBUG_SEVERITY_HIGH", 0x9146},
+    {"GL_DEBUG_SEVERITY_HIGH_AMD", 0x9146},
+    {"GL_DEBUG_SEVERITY_HIGH_ARB", 0x9146},
+    {"GL_DEBUG_SEVERITY_HIGH_KHR", 0x9146},
+    {"GL_DEBUG_SEVERITY_MEDIUM", 0x9147},
+    {"GL_DEBUG_SEVERITY_MEDIUM_AMD", 0x9147},
+    {"GL_DEBUG_SEVERITY_MEDIUM_ARB", 0x9147},
+    {"GL_DEBUG_SEVERITY_MEDIUM_KHR", 0x9147},
+    {"GL_DEBUG_SEVERITY_LOW", 0x9148},
+    {"GL_DEBUG_SEVERITY_LOW_AMD", 0x9148},
+    {"GL_DEBUG_SEVERITY_LOW_ARB", 0x9148},
+    {"GL_DEBUG_SEVERITY_LOW_KHR", 0x9148},
+    {"GL_DEBUG_CATEGORY_API_ERROR_AMD", 0x9149},
+    {"GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD", 0x914A},
+    {"GL_DEBUG_CATEGORY_DEPRECATION_AMD", 0x914B},
+    {"GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD", 0x914C},
+    {"GL_DEBUG_CATEGORY_PERFORMANCE_AMD", 0x914D},
+    {"GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD", 0x914E},
+    {"GL_DEBUG_CATEGORY_APPLICATION_AMD", 0x914F},
+    {"GL_DEBUG_CATEGORY_OTHER_AMD", 0x9150},
+    {"GL_BUFFER_OBJECT_EXT", 0x9151},
+    {"GL_DATA_BUFFER_AMD", 0x9151},
+    {"GL_PERFORMANCE_MONITOR_AMD", 0x9152},
+    {"GL_QUERY_OBJECT_AMD", 0x9153},
+    {"GL_QUERY_OBJECT_EXT", 0x9153},
+    {"GL_VERTEX_ARRAY_OBJECT_AMD", 0x9154},
+    {"GL_VERTEX_ARRAY_OBJECT_EXT", 0x9154},
+    {"GL_SAMPLER_OBJECT_AMD", 0x9155},
+    {"GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD", 0x9160},
+    {"GL_QUERY_BUFFER", 0x9192},
+    {"GL_QUERY_BUFFER_AMD", 0x9192},
+    {"GL_QUERY_BUFFER_BINDING", 0x9193},
+    {"GL_QUERY_BUFFER_BINDING_AMD", 0x9193},
+    {"GL_QUERY_RESULT_NO_WAIT", 0x9194},
+    {"GL_QUERY_RESULT_NO_WAIT_AMD", 0x9194},
+    {"GL_VIRTUAL_PAGE_SIZE_X_ARB", 0x9195},
+    {"GL_VIRTUAL_PAGE_SIZE_X_AMD", 0x9195},
+    {"GL_VIRTUAL_PAGE_SIZE_Y_ARB", 0x9196},
+    {"GL_VIRTUAL_PAGE_SIZE_Y_AMD", 0x9196},
+    {"GL_VIRTUAL_PAGE_SIZE_Z_ARB", 0x9197},
+    {"GL_VIRTUAL_PAGE_SIZE_Z_AMD", 0x9197},
+    {"GL_MAX_SPARSE_TEXTURE_SIZE_ARB", 0x9198},
+    {"GL_MAX_SPARSE_TEXTURE_SIZE_AMD", 0x9198},
+    {"GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB", 0x9199},
+    {"GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD", 0x9199},
+    {"GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB", 0x919A},
+    {"GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS", 0x919A},
+    {"GL_MIN_SPARSE_LEVEL_ARB", 0x919B},
+    {"GL_MIN_SPARSE_LEVEL_AMD", 0x919B},
+    {"GL_MIN_LOD_WARNING_AMD", 0x919C},
+    {"GL_TEXTURE_BUFFER_OFFSET", 0x919D},
+    {"GL_TEXTURE_BUFFER_SIZE", 0x919E},
+    {"GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT", 0x919F},
+    {"GL_VERTEX_ELEMENT_SWIZZLE_AMD", 0x91A4},
+    {"GL_VERTEX_ID_SWIZZLE_AMD", 0x91A5},
+    {"GL_TEXTURE_SPARSE_ARB", 0x91A6},
+    {"GL_VIRTUAL_PAGE_SIZE_INDEX_ARB", 0x91A7},
+    {"GL_NUM_VIRTUAL_PAGE_SIZES_ARB", 0x91A8},
+    {"GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB", 0x91A9},
+    {"GL_COMPUTE_SHADER", 0x91B9},
+    {"GL_MAX_COMPUTE_UNIFORM_BLOCKS", 0x91BB},
+    {"GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS", 0x91BC},
+    {"GL_MAX_COMPUTE_IMAGE_UNIFORMS", 0x91BD},
+    {"GL_MAX_COMPUTE_WORK_GROUP_COUNT", 0x91BE},
+    {"GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB", 0x91BF},
+    {"GL_MAX_COMPUTE_WORK_GROUP_SIZE", 0x91BF},
+    {"GL_UNPACK_FLIP_Y_WEBGL", 0x9240},
+    {"GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL", 0x9241},
+    {"GL_CONTEXT_LOST_WEBGL", 0x9242},
+    {"GL_UNPACK_COLORSPACE_CONVERSION_WEBGL", 0x9243},
+    {"GL_BROWSER_DEFAULT_WEBGL", 0x9244},
+    {"GL_SHADER_BINARY_DMP", 0x9250},
+    {"GL_GCCSO_SHADER_BINARY_FJ", 0x9260},
+    {"GL_COMPRESSED_R11_EAC", 0x9270},
+    {"GL_COMPRESSED_R11_EAC_OES", 0x9270},
+    {"GL_COMPRESSED_SIGNED_R11_EAC", 0x9271},
+    {"GL_COMPRESSED_SIGNED_R11_EAC_OES", 0x9271},
+    {"GL_COMPRESSED_RG11_EAC", 0x9272},
+    {"GL_COMPRESSED_RG11_EAC_OES", 0x9272},
+    {"GL_COMPRESSED_SIGNED_RG11_EAC", 0x9273},
+    {"GL_COMPRESSED_SIGNED_RG11_EAC_OES", 0x9273},
+    {"GL_COMPRESSED_RGB8_ETC2", 0x9274},
+    {"GL_COMPRESSED_RGB8_ETC2_OES", 0x9274},
+    {"GL_COMPRESSED_SRGB8_ETC2", 0x9275},
+    {"GL_COMPRESSED_SRGB8_ETC2_OES", 0x9275},
+    {"GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2", 0x9276},
+    {"GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2_OES", 0x9276},
+    {"GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2", 0x9277},
+    {"GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2_OES", 0x9277},
+    {"GL_COMPRESSED_RGBA8_ETC2_EAC", 0x9278},
+    {"GL_COMPRESSED_RGBA8_ETC2_EAC_OES", 0x9278},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC", 0x9279},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC_OES", 0x9279},
+    {"GL_BLEND_PREMULTIPLIED_SRC_NV", 0x9280},
+    {"GL_BLEND_OVERLAP_NV", 0x9281},
+    {"GL_UNCORRELATED_NV", 0x9282},
+    {"GL_DISJOINT_NV", 0x9283},
+    {"GL_CONJOINT_NV", 0x9284},
+    {"GL_BLEND_ADVANCED_COHERENT_NV", 0x9285},
+    {"GL_SRC_NV", 0x9286},
+    {"GL_DST_NV", 0x9287},
+    {"GL_SRC_OVER_NV", 0x9288},
+    {"GL_DST_OVER_NV", 0x9289},
+    {"GL_SRC_IN_NV", 0x928A},
+    {"GL_DST_IN_NV", 0x928B},
+    {"GL_SRC_OUT_NV", 0x928C},
+    {"GL_DST_OUT_NV", 0x928D},
+    {"GL_SRC_ATOP_NV", 0x928E},
+    {"GL_DST_ATOP_NV", 0x928F},
+    {"GL_PLUS_NV", 0x9291},
+    {"GL_PLUS_DARKER_NV", 0x9292},
+    {"GL_MULTIPLY_NV", 0x9294},
+    {"GL_SCREEN_NV", 0x9295},
+    {"GL_OVERLAY_NV", 0x9296},
+    {"GL_DARKEN_NV", 0x9297},
+    {"GL_LIGHTEN_NV", 0x9298},
+    {"GL_COLORDODGE_NV", 0x9299},
+    {"GL_COLORBURN_NV", 0x929A},
+    {"GL_HARDLIGHT_NV", 0x929B},
+    {"GL_SOFTLIGHT_NV", 0x929C},
+    {"GL_DIFFERENCE_NV", 0x929E},
+    {"GL_MINUS_NV", 0x929F},
+    {"GL_EXCLUSION_NV", 0x92A0},
+    {"GL_CONTRAST_NV", 0x92A1},
+    {"GL_INVERT_RGB_NV", 0x92A3},
+    {"GL_LINEARDODGE_NV", 0x92A4},
+    {"GL_LINEARBURN_NV", 0x92A5},
+    {"GL_VIVIDLIGHT_NV", 0x92A6},
+    {"GL_LINEARLIGHT_NV", 0x92A7},
+    {"GL_PINLIGHT_NV", 0x92A8},
+    {"GL_HARDMIX_NV", 0x92A9},
+    {"GL_HSL_HUE_NV", 0x92AD},
+    {"GL_HSL_SATURATION_NV", 0x92AE},
+    {"GL_HSL_COLOR_NV", 0x92AF},
+    {"GL_HSL_LUMINOSITY_NV", 0x92B0},
+    {"GL_PLUS_CLAMPED_NV", 0x92B1},
+    {"GL_PLUS_CLAMPED_ALPHA_NV", 0x92B2},
+    {"GL_MINUS_CLAMPED_NV", 0x92B3},
+    {"GL_INVERT_OVG_NV", 0x92B4},
+    {"GL_ATOMIC_COUNTER_BUFFER", 0x92C0},
+    {"GL_ATOMIC_COUNTER_BUFFER_BINDING", 0x92C1},
+    {"GL_ATOMIC_COUNTER_BUFFER_START", 0x92C2},
+    {"GL_ATOMIC_COUNTER_BUFFER_SIZE", 0x92C3},
+    {"GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE", 0x92C4},
+    {"GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS", 0x92C5},
+    {"GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES", 0x92C6},
+    {"GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER", 0x92C7},
+    {"GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER", 0x92C8},
+    {"GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER", 0x92C9},
+    {"GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER", 0x92CA},
+    {"GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER", 0x92CB},
+    {"GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS", 0x92CC},
+    {"GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS", 0x92CD},
+    {"GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS", 0x92CE},
+    {"GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS", 0x92CF},
+    {"GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS", 0x92D0},
+    {"GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS", 0x92D1},
+    {"GL_MAX_VERTEX_ATOMIC_COUNTERS", 0x92D2},
+    {"GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS", 0x92D3},
+    {"GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS", 0x92D4},
+    {"GL_MAX_GEOMETRY_ATOMIC_COUNTERS", 0x92D5},
+    {"GL_MAX_FRAGMENT_ATOMIC_COUNTERS", 0x92D6},
+    {"GL_MAX_COMBINED_ATOMIC_COUNTERS", 0x92D7},
+    {"GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE", 0x92D8},
+    {"GL_ACTIVE_ATOMIC_COUNTER_BUFFERS", 0x92D9},
+    {"GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX", 0x92DA},
+    {"GL_UNSIGNED_INT_ATOMIC_COUNTER", 0x92DB},
+    {"GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS", 0x92DC},
+    {"GL_DEBUG_OUTPUT", 0x92E0},
+    {"GL_DEBUG_OUTPUT_KHR", 0x92E0},
+    {"GL_UNIFORM", 0x92E1},
+    {"GL_UNIFORM_BLOCK", 0x92E2},
+    {"GL_PROGRAM_INPUT", 0x92E3},
+    {"GL_PROGRAM_OUTPUT", 0x92E4},
+    {"GL_BUFFER_VARIABLE", 0x92E5},
+    {"GL_SHADER_STORAGE_BLOCK", 0x92E6},
+    {"GL_IS_PER_PATCH", 0x92E7},
+    {"GL_VERTEX_SUBROUTINE", 0x92E8},
+    {"GL_TESS_CONTROL_SUBROUTINE", 0x92E9},
+    {"GL_TESS_EVALUATION_SUBROUTINE", 0x92EA},
+    {"GL_GEOMETRY_SUBROUTINE", 0x92EB},
+    {"GL_FRAGMENT_SUBROUTINE", 0x92EC},
+    {"GL_COMPUTE_SUBROUTINE", 0x92ED},
+    {"GL_VERTEX_SUBROUTINE_UNIFORM", 0x92EE},
+    {"GL_TESS_CONTROL_SUBROUTINE_UNIFORM", 0x92EF},
+    {"GL_TESS_EVALUATION_SUBROUTINE_UNIFORM", 0x92F0},
+    {"GL_GEOMETRY_SUBROUTINE_UNIFORM", 0x92F1},
+    {"GL_FRAGMENT_SUBROUTINE_UNIFORM", 0x92F2},
+    {"GL_COMPUTE_SUBROUTINE_UNIFORM", 0x92F3},
+    {"GL_TRANSFORM_FEEDBACK_VARYING", 0x92F4},
+    {"GL_ACTIVE_RESOURCES", 0x92F5},
+    {"GL_MAX_NAME_LENGTH", 0x92F6},
+    {"GL_MAX_NUM_ACTIVE_VARIABLES", 0x92F7},
+    {"GL_MAX_NUM_COMPATIBLE_SUBROUTINES", 0x92F8},
+    {"GL_NAME_LENGTH", 0x92F9},
+    {"GL_TYPE", 0x92FA},
+    {"GL_ARRAY_SIZE", 0x92FB},
+    {"GL_OFFSET", 0x92FC},
+    {"GL_BLOCK_INDEX", 0x92FD},
+    {"GL_ARRAY_STRIDE", 0x92FE},
+    {"GL_MATRIX_STRIDE", 0x92FF},
+    {"GL_IS_ROW_MAJOR", 0x9300},
+    {"GL_ATOMIC_COUNTER_BUFFER_INDEX", 0x9301},
+    {"GL_BUFFER_BINDING", 0x9302},
+    {"GL_BUFFER_DATA_SIZE", 0x9303},
+    {"GL_NUM_ACTIVE_VARIABLES", 0x9304},
+    {"GL_ACTIVE_VARIABLES", 0x9305},
+    {"GL_REFERENCED_BY_VERTEX_SHADER", 0x9306},
+    {"GL_REFERENCED_BY_TESS_CONTROL_SHADER", 0x9307},
+    {"GL_REFERENCED_BY_TESS_EVALUATION_SHADER", 0x9308},
+    {"GL_REFERENCED_BY_GEOMETRY_SHADER", 0x9309},
+    {"GL_REFERENCED_BY_FRAGMENT_SHADER", 0x930A},
+    {"GL_REFERENCED_BY_COMPUTE_SHADER", 0x930B},
+    {"GL_TOP_LEVEL_ARRAY_SIZE", 0x930C},
+    {"GL_TOP_LEVEL_ARRAY_STRIDE", 0x930D},
+    {"GL_LOCATION", 0x930E},
+    {"GL_LOCATION_INDEX", 0x930F},
+    {"GL_FRAMEBUFFER_DEFAULT_WIDTH", 0x9310},
+    {"GL_FRAMEBUFFER_DEFAULT_HEIGHT", 0x9311},
+    {"GL_FRAMEBUFFER_DEFAULT_LAYERS", 0x9312},
+    {"GL_FRAMEBUFFER_DEFAULT_SAMPLES", 0x9313},
+    {"GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS", 0x9314},
+    {"GL_MAX_FRAMEBUFFER_WIDTH", 0x9315},
+    {"GL_MAX_FRAMEBUFFER_HEIGHT", 0x9316},
+    {"GL_MAX_FRAMEBUFFER_LAYERS", 0x9317},
+    {"GL_MAX_FRAMEBUFFER_SAMPLES", 0x9318},
+    {"GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB", 0x9344},
+    {"GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB", 0x9345},
+    {"GL_LOCATION_COMPONENT", 0x934A},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_INDEX", 0x934B},
+    {"GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE", 0x934C},
+    {"GL_CLEAR_TEXTURE", 0x9365},
+    {"GL_NUM_SAMPLE_COUNTS", 0x9380},
+    {"GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE", 0x93A0},
+    {"GL_TEXTURE_USAGE_ANGLE", 0x93A2},
+    {"GL_FRAMEBUFFER_ATTACHMENT_ANGLE", 0x93A3},
+    {"GL_PACK_REVERSE_ROW_ORDER_ANGLE", 0x93A4},
+    {"GL_PROGRAM_BINARY_ANGLE", 0x93A6},
+    {"GL_COMPRESSED_RGBA_ASTC_4x4_KHR", 0x93B0},
+    {"GL_COMPRESSED_RGBA_ASTC_5x4_KHR", 0x93B1},
+    {"GL_COMPRESSED_RGBA_ASTC_5x5_KHR", 0x93B2},
+    {"GL_COMPRESSED_RGBA_ASTC_6x5_KHR", 0x93B3},
+    {"GL_COMPRESSED_RGBA_ASTC_6x6_KHR", 0x93B4},
+    {"GL_COMPRESSED_RGBA_ASTC_8x5_KHR", 0x93B5},
+    {"GL_COMPRESSED_RGBA_ASTC_8x6_KHR", 0x93B6},
+    {"GL_COMPRESSED_RGBA_ASTC_8x8_KHR", 0x93B7},
+    {"GL_COMPRESSED_RGBA_ASTC_10x5_KHR", 0x93B8},
+    {"GL_COMPRESSED_RGBA_ASTC_10x6_KHR", 0x93B9},
+    {"GL_COMPRESSED_RGBA_ASTC_10x8_KHR", 0x93BA},
+    {"GL_COMPRESSED_RGBA_ASTC_10x10_KHR", 0x93BB},
+    {"GL_COMPRESSED_RGBA_ASTC_12x10_KHR", 0x93BC},
+    {"GL_COMPRESSED_RGBA_ASTC_12x12_KHR", 0x93BD},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR", 0x93D0},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR", 0x93D1},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR", 0x93D2},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR", 0x93D3},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR", 0x93D4},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR", 0x93D5},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR", 0x93D6},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR", 0x93D7},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR", 0x93D8},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR", 0x93D9},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR", 0x93DA},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR", 0x93DB},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR", 0x93DC},
+    {"GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR", 0x93DD},
+    {"GL_RASTER_POSITION_UNCLIPPED_IBM", 0x19262},
+    {"GL_CULL_VERTEX_IBM", 103050},
+    {"GL_ALL_STATIC_DATA_IBM", 103060},
+    {"GL_STATIC_VERTEX_ARRAY_IBM", 103061},
+    {"GL_VERTEX_ARRAY_LIST_IBM", 103070},
+    {"GL_NORMAL_ARRAY_LIST_IBM", 103071},
+    {"GL_COLOR_ARRAY_LIST_IBM", 103072},
+    {"GL_INDEX_ARRAY_LIST_IBM", 103073},
+    {"GL_TEXTURE_COORD_ARRAY_LIST_IBM", 103074},
+    {"GL_EDGE_FLAG_ARRAY_LIST_IBM", 103075},
+    {"GL_FOG_COORDINATE_ARRAY_LIST_IBM", 103076},
+    {"GL_SECONDARY_COLOR_ARRAY_LIST_IBM", 103077},
+    {"GL_VERTEX_ARRAY_LIST_STRIDE_IBM", 103080},
+    {"GL_NORMAL_ARRAY_LIST_STRIDE_IBM", 103081},
+    {"GL_COLOR_ARRAY_LIST_STRIDE_IBM", 103082},
+    {"GL_INDEX_ARRAY_LIST_STRIDE_IBM", 103083},
+    {"GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM", 103084},
+    {"GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM", 103085},
+    {"GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM", 103086},
+    {"GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM", 103087},
+    {"GL_PREFER_DOUBLEBUFFER_HINT_PGI", 0x1A1F8},
+    {"GL_CONSERVE_MEMORY_HINT_PGI", 0x1A1FD},
+    {"GL_RECLAIM_MEMORY_HINT_PGI", 0x1A1FE},
+    {"GL_NATIVE_GRAPHICS_HANDLE_PGI", 0x1A202},
+    {"GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI", 0x1A203},
+    {"GL_NATIVE_GRAPHICS_END_HINT_PGI", 0x1A204},
+    {"GL_ALWAYS_FAST_HINT_PGI", 0x1A20C},
+    {"GL_ALWAYS_SOFT_HINT_PGI", 0x1A20D},
+    {"GL_ALLOW_DRAW_OBJ_HINT_PGI", 0x1A20E},
+    {"GL_ALLOW_DRAW_WIN_HINT_PGI", 0x1A20F},
+    {"GL_ALLOW_DRAW_FRG_HINT_PGI", 0x1A210},
+    {"GL_ALLOW_DRAW_MEM_HINT_PGI", 0x1A211},
+    {"GL_STRICT_DEPTHFUNC_HINT_PGI", 0x1A216},
+    {"GL_STRICT_LIGHTING_HINT_PGI", 0x1A217},
+    {"GL_STRICT_SCISSOR_HINT_PGI", 0x1A218},
+    {"GL_FULL_STIPPLE_HINT_PGI", 0x1A219},
+    {"GL_CLIP_NEAR_HINT_PGI", 0x1A220},
+    {"GL_CLIP_FAR_HINT_PGI", 0x1A221},
+    {"GL_WIDE_LINE_HINT_PGI", 0x1A222},
+    {"GL_BACK_NORMALS_HINT_PGI", 0x1A223},
+    {"GL_VERTEX_DATA_HINT_PGI", 0x1A22A},
+    {"GL_VERTEX_CONSISTENT_HINT_PGI", 0x1A22B},
+    {"GL_MATERIAL_SIDE_HINT_PGI", 0x1A22C},
+    {"GL_MAX_VERTEX_HINT_PGI", 0x1A22D},
+    {"GL_MAX_CLIP_PLANES_IMG", 0x0D32},
+    {"GL_TEXTURE_GEN_MODE_OES", 0x2500},
+    {"GL_CLIP_PLANE0_IMG", 0x3000},
+    {"GL_CLIP_PLANE1_IMG", 0x3001},
+    {"GL_CLIP_PLANE2_IMG", 0x3002},
+    {"GL_CLIP_PLANE3_IMG", 0x3003},
+    {"GL_CLIP_PLANE4_IMG", 0x3004},
+    {"GL_CLIP_PLANE5_IMG", 0x3005},
+    {"GL_ALPHA8_OES", 0x803C},
+    {"GL_LUMINANCE8_OES", 0x8040},
+    {"GL_LUMINANCE4_ALPHA4_OES", 0x8043},
+    {"GL_LUMINANCE8_ALPHA8_OES", 0x8045},
+    {"GL_RGB8_OES", 0x8051},
+    {"GL_TEXTURE_BINDING_3D_OES", 0x806A},
+    {"GL_BGRA_IMG", 0x80E1},
+    {"GL_TEXTURE_MAX_LEVEL_APPLE", 0x813D},
+    {"GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT", 0x8210},
+    {"GL_R32F_EXT", 0x822E},
+    {"GL_RG32F_EXT", 0x8230},
+    {"GL_LOSE_CONTEXT_ON_RESET_EXT", 0x8252},
+    {"GL_GUILTY_CONTEXT_RESET_EXT", 0x8253},
+    {"GL_INNOCENT_CONTEXT_RESET_EXT", 0x8254},
+    {"GL_UNKNOWN_CONTEXT_RESET_EXT", 0x8255},
+    {"GL_RESET_NOTIFICATION_STRATEGY_EXT", 0x8256},
+    {"GL_NO_RESET_NOTIFICATION_EXT", 0x8261},
+    {"GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG", 0x8365},
+    {"GL_VERTEX_ARRAY_BINDING_OES", 0x85B5},
+    {"GL_RGBA32F_EXT", 0x8814},
+    {"GL_RGB32F_EXT", 0x8815},
+    {"GL_ALPHA32F_EXT", 0x8816},
+    {"GL_LUMINANCE32F_EXT", 0x8818},
+    {"GL_LUMINANCE_ALPHA32F_EXT", 0x8819},
+    {"GL_ALPHA16F_EXT", 0x881C},
+    {"GL_LUMINANCE16F_EXT", 0x881E},
+    {"GL_LUMINANCE_ALPHA16F_EXT", 0x881F},
+    {"GL_DRAW_FRAMEBUFFER_BINDING_ANGLE", 0x8CA6},
+    {"GL_DRAW_FRAMEBUFFER_BINDING_APPLE", 0x8CA6},
+    {"GL_READ_FRAMEBUFFER_APPLE", 0x8CA8},
+    {"GL_DRAW_FRAMEBUFFER_APPLE", 0x8CA9},
+    {"GL_READ_FRAMEBUFFER_BINDING_ANGLE", 0x8CAA},
+    {"GL_READ_FRAMEBUFFER_BINDING_APPLE", 0x8CAA},
+    {"GL_RENDERBUFFER_SAMPLES_APPLE", 0x8CAB},
+    {"GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE", 0x8D56},
+    {"GL_MAX_SAMPLES_APPLE", 0x8D57},
+    {"GL_CONTEXT_ROBUST_ACCESS_EXT", 0x90F3},
+    {"GL_TEXTURE_IMMUTABLE_FORMAT_EXT", 0x912F},
+    {"GL_BGRA8_EXT", 0x93A1},
+    {0, 0}
+};
+
+struct OpenGLEnum_u
+{
+    const char *name;
+    unsigned value;
+};
+
+static OpenGLEnum_u openGLEnums_u[] = {
+    {"GL_INVALID_INDEX", 0xFFFFFFFFu},
+    {0, 0}
+};
+
+struct OpenGLEnum_ull
+{
+    const char *name;
+    unsigned long long value;
+};
+
+static OpenGLEnum_ull openGLEnums_ull[] = {
+    {"GL_TIMEOUT_IGNORED", 0xFFFFFFFFFFFFFFFFull},
+    {"GL_TIMEOUT_IGNORED_APPLE", 0xFFFFFFFFFFFFFFFFull},
+    {0, 0}
+};
+
+
+/*
+ * Add the OpenGL constants to a Python object.  Return -1 and raise an
+ * exception on error.
+ */
+int qpyopengl_add_constants(PyObject *obj)
+{
+    int i, rc;
+    PyObject *py_value;
+
+    for (i = 0; openGLEnums_i[i].name; ++i)
+    {
+#if PY_MAJOR_VERSION >= 3
+        py_value = PyLong_FromLong(openGLEnums_i[i].value);
+#else
+        py_value = PyInt_FromLong(openGLEnums_i[i].value);
+#endif
+
+        if (!py_value)
+            return -1;
+
+        rc = PyObject_SetAttrString(obj, openGLEnums_i[i].name, py_value);
+        Py_DECREF(py_value);
+
+        if (rc < 0)
+            return -1;
+    }
+
+    for (i = 0; openGLEnums_u[i].name; ++i)
+    {
+        py_value = PyLong_FromUnsignedLong(openGLEnums_u[i].value);
+
+        if (!py_value)
+            return -1;
+
+        rc = PyObject_SetAttrString(obj, openGLEnums_u[i].name, py_value);
+        Py_DECREF(py_value);
+
+        if (rc < 0)
+            return -1;
+    }
+
+    for (i = 0; openGLEnums_ull[i].name; ++i)
+    {
+        py_value = PyLong_FromUnsignedLongLong(openGLEnums_ull[i].value);
+
+        if (!py_value)
+            return -1;
+
+        rc = PyObject_SetAttrString(obj, openGLEnums_ull[i].name, py_value);
+        Py_DECREF(py_value);
+
+        if (rc < 0)
+            return -1;
+    }
+
+    return 0;
+}
+
+
+#endif
+
diff --git a/qpy/QtGui/qpyopengl_api.h b/qpy/QtGui/qpyopengl_api.h
new file mode 100644
index 0000000..d6bee3c
--- /dev/null
+++ b/qpy/QtGui/qpyopengl_api.h
@@ -0,0 +1,79 @@
+// This defines the OpenGL related API provided by this library.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYOPENGL_API_H
+#define _QPYOPENGL_API_H
+
+
+#include <Python.h>
+
+#include "sipAPIQtGui.h"
+
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+
+#include <QOpenGLContext>
+
+#if QT_VERSION >= 0x050100
+#include <QOpenGLVersionProfile>
+#endif
+
+
+// Initialisation.
+void qpyopengl_init();
+
+// Support for shader arrays.
+const GLfloat *qpyopengl_attribute_array(PyObject *values, PyObject *shader,
+        PyObject *key, int *tsize, sipErrorState *estate);
+const void *qpyopengl_uniform_value_array(PyObject *values, PyObject *shader,
+        PyObject *key, const sipTypeDef **array_type, int *array_len,
+        int *tsize, sipErrorState *estate);
+
+#if QT_VERSION >= 0x050100
+// Support for QOpenGLContext.versionFunctions().
+PyObject *qpyopengl_version_functions(const QOpenGLContext *context,
+        PyObject *py_context, const QOpenGLVersionProfile *version_profile);
+#endif
+
+#if QT_VERSION >= 0x050100
+// Support for the OpenGL bindings.
+const GLvoid *qpyopengl_value_array(sipErrorState *estate, PyObject *values,
+        GLenum gl_type, PyObject *bindings);
+const GLvoid *qpyopengl_value_array_cached(sipErrorState *estate,
+        PyObject *values, GLenum gl_type, PyObject *bindings, const char *pkey,
+        GLuint skey);
+PyObject *qpyopengl_from_GLint(int *eflag, const GLint *array,
+        SIP_SSIZE_T len);
+PyObject *qpyopengl_from_GLuint(int *eflag, const GLuint *array,
+        SIP_SSIZE_T len);
+PyObject *qpyopengl_from_GLboolean(int *eflag, const GLboolean *array,
+        SIP_SSIZE_T len);
+PyObject *qpyopengl_from_GLfloat(int *eflag, const GLfloat *array,
+        SIP_SSIZE_T len);
+#if defined(SIP_FEATURE_PyQt_Desktop_OpenGL)
+PyObject *qpyopengl_from_GLdouble(int *eflag, const GLdouble *array,
+        SIP_SSIZE_T len);
+#endif
+#endif
+
+
+#endif
+
+
+#endif
diff --git a/qpy/QtGui/qpyopengl_array_convertors.cpp b/qpy/QtGui/qpyopengl_array_convertors.cpp
new file mode 100644
index 0000000..c01fe04
--- /dev/null
+++ b/qpy/QtGui/qpyopengl_array_convertors.cpp
@@ -0,0 +1,200 @@
+// This contains the support for converting QOpenGL arrays to Python objects.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "sipAPIQtGui.h"
+
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+
+#include "qpyopengl_api.h"
+
+
+#if QT_VERSION >= 0x050100
+
+// Convert a GLint array to a Python object.
+PyObject *qpyopengl_from_GLint(int *eflag, const GLint *array, SIP_SSIZE_T len)
+{
+    if (len == 1)
+        return SIPLong_FromLong(array[0]);
+
+    PyObject *tuple = PyTuple_New(len);
+
+    if (!tuple)
+    {
+        *eflag = 1;
+        return 0;
+    }
+
+    for (SIP_SSIZE_T i = 0; i < len; ++i)
+    {
+        PyObject *itm = SIPLong_FromLong(array[i]);
+
+        if (!itm)
+        {
+            Py_DECREF(tuple);
+            *eflag = 1;
+            return 0;
+        }
+
+        PyTuple_SET_ITEM(tuple, i, itm);
+    }
+
+    return tuple;
+}
+
+
+// Convert a GLuint array to a Python object.
+PyObject *qpyopengl_from_GLuint(int *eflag, const GLuint *array,
+        SIP_SSIZE_T len)
+{
+    if (len == 1)
+        return PyLong_FromUnsignedLong(array[0]);
+
+    PyObject *tuple = PyTuple_New(len);
+
+    if (!tuple)
+    {
+        *eflag = 1;
+        return 0;
+    }
+
+    for (SIP_SSIZE_T i = 0; i < len; ++i)
+    {
+        PyObject *itm = PyLong_FromUnsignedLong(array[i]);
+
+        if (!itm)
+        {
+            Py_DECREF(tuple);
+            *eflag = 1;
+            return 0;
+        }
+
+        PyTuple_SET_ITEM(tuple, i, itm);
+    }
+
+    return tuple;
+}
+
+
+// Convert a GLboolean array to a Python object.
+PyObject *qpyopengl_from_GLboolean(int *eflag, const GLboolean *array,
+        SIP_SSIZE_T len)
+{
+    if (len == 1)
+        return PyBool_FromLong(array[0]);
+
+    PyObject *tuple = PyTuple_New(len);
+
+    if (!tuple)
+    {
+        *eflag = 1;
+        return 0;
+    }
+
+    for (SIP_SSIZE_T i = 0; i < len; ++i)
+    {
+        PyObject *itm = PyBool_FromLong(array[i]);
+
+        if (!itm)
+        {
+            Py_DECREF(tuple);
+            *eflag = 1;
+            return 0;
+        }
+
+        PyTuple_SET_ITEM(tuple, i, itm);
+    }
+
+    return tuple;
+}
+
+
+// Convert a GLfloat array to a Python object.
+PyObject *qpyopengl_from_GLfloat(int *eflag, const GLfloat *array,
+        SIP_SSIZE_T len)
+{
+    if (len == 1)
+        return PyFloat_FromDouble(array[0]);
+
+    PyObject *tuple = PyTuple_New(len);
+
+    if (!tuple)
+    {
+        *eflag = 1;
+        return 0;
+    }
+
+    for (SIP_SSIZE_T i = 0; i < len; ++i)
+    {
+        PyObject *itm = PyFloat_FromDouble(array[i]);
+
+        if (!itm)
+        {
+            Py_DECREF(tuple);
+            *eflag = 1;
+            return 0;
+        }
+
+        PyTuple_SET_ITEM(tuple, i, itm);
+    }
+
+    return tuple;
+}
+
+
+#if defined(SIP_FEATURE_PyQt_Desktop_OpenGL)
+// Convert a GLdouble array to a Python object.
+PyObject *qpyopengl_from_GLdouble(int *eflag, const GLdouble *array,
+        SIP_SSIZE_T len)
+{
+    if (len == 1)
+        return PyFloat_FromDouble(array[0]);
+
+    PyObject *tuple = PyTuple_New(len);
+
+    if (!tuple)
+    {
+        *eflag = 1;
+        return 0;
+    }
+
+    for (SIP_SSIZE_T i = 0; i < len; ++i)
+    {
+        PyObject *itm = PyFloat_FromDouble(array[i]);
+
+        if (!itm)
+        {
+            Py_DECREF(tuple);
+            *eflag = 1;
+            return 0;
+        }
+
+        PyTuple_SET_ITEM(tuple, i, itm);
+    }
+
+    return tuple;
+}
+#endif
+
+#endif
+
+
+#endif
diff --git a/qpy/QtGui/qpyopengl_attribute_array.cpp b/qpy/QtGui/qpyopengl_attribute_array.cpp
new file mode 100644
index 0000000..78823e4
--- /dev/null
+++ b/qpy/QtGui/qpyopengl_attribute_array.cpp
@@ -0,0 +1,295 @@
+// This contains the support for shader program attribute arrays.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "sipAPIQtGui.h"
+
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+
+#include <QOpenGLShaderProgram>
+#include <QVector2D>
+#include <QVector3D>
+#include <QVector4D>
+
+#include "qpyopengl_api.h"
+
+
+// Forward declaratations.
+#if defined(SIP_USE_PYCAPSULE)
+static void array_dtor(PyObject *capsule);
+#else
+static void array_dtor(void *array);
+#endif
+
+
+// Parse a Python object as a sequence of either QVector[234]D instances or a
+// sequence of sequence of floats and return an array that can be passed to
+// QGLShaderProgram::setAttributeArray().  The array is destroyed only when the
+// shader is garbage collected or when replaced by another array.
+const GLfloat *qpyopengl_attribute_array(PyObject *values, PyObject *shader,
+        PyObject *key, int *tsize, sipErrorState *estate)
+{
+    // Check the key was created correctly.
+    if (!key)
+    {
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    // Get the dict that holds the converted arrays.
+    PyObject *dict = ((sipSimpleWrapper *)shader)->user;
+
+    if (!dict)
+    {
+        dict = PyDict_New();
+
+        if (!dict)
+        {
+            Py_DECREF(key);
+
+            *estate = sipErrorFail;
+            return 0;
+        }
+
+        ((sipSimpleWrapper *)shader)->user = dict;
+    }
+
+    // Check that values is a non-empty sequence.
+    values = PySequence_Fast(values, "an attribute array must be a sequence");
+
+    if (!values)
+    {
+        Py_DECREF(key);
+
+        *estate = sipErrorContinue;
+        return 0;
+    }
+
+    SIP_SSIZE_T nr_items = PySequence_Fast_GET_SIZE(values);
+
+    if (nr_items < 1)
+    {
+        PyErr_SetString(PyExc_TypeError,
+                "an attribute array must have at least one element");
+
+        Py_DECREF(key);
+        Py_DECREF(values);
+
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    // The first element determines the type expected.
+    PyObject *itm = PySequence_Fast_GET_ITEM(values, 0);
+
+    const sipTypeDef *td;
+    SIP_SSIZE_T nr_dim;
+
+    if (sipCanConvertToType(itm, sipType_QVector2D, SIP_NOT_NONE))
+    {
+        td = sipType_QVector2D;
+        nr_dim = 2;
+    }
+    else if (sipCanConvertToType(itm, sipType_QVector3D, SIP_NOT_NONE))
+    {
+        td = sipType_QVector3D;
+        nr_dim = 3;
+    }
+    else if (sipCanConvertToType(itm, sipType_QVector4D, SIP_NOT_NONE))
+    {
+        td = sipType_QVector4D;
+        nr_dim = 4;
+    }
+    else if (PySequence_Check(itm) && (nr_dim = PySequence_Size(itm)) >= 1)
+    {
+        td = 0;
+    }
+    else
+    {
+        PyErr_SetString(PyExc_TypeError,
+                "an attribute array must be a sequence of QVector2D, "
+                "QVector3D, QVector4D, or a sequence of sequences of floats");
+
+        Py_DECREF(key);
+        Py_DECREF(values);
+
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    // Create the array that will be returned.
+    GLfloat *array = new GLfloat[nr_items * nr_dim];
+
+    // Convert the values.
+    GLfloat *ap = array;
+
+    for (SIP_SSIZE_T i = 0; i < nr_items; ++i)
+    {
+        int iserr = 0;
+
+        itm = PySequence_Fast_GET_ITEM(values, i);
+
+        if (td)
+        {
+            void *cpp;
+
+            cpp = sipForceConvertToType(itm, td, 0,
+                    SIP_NOT_NONE | SIP_NO_CONVERTORS, 0, &iserr);
+
+            if (iserr)
+            {
+                PyErr_Format(PyExc_TypeError,
+                        "attribute array elements should all be '%s', not '%s'",
+                        sipTypeAsPyTypeObject(td)->tp_name,
+                        Py_TYPE(itm)->tp_name);
+            }
+            else if (td == sipType_QVector2D)
+            {
+                QVector2D *v = reinterpret_cast<QVector2D *>(cpp);
+
+                *ap++ = v->x();
+                *ap++ = v->y();
+            }
+            else if (td == sipType_QVector3D)
+            {
+                QVector3D *v = reinterpret_cast<QVector3D *>(cpp);
+
+                *ap++ = v->x();
+                *ap++ = v->y();
+                *ap++ = v->z();
+            }
+            else if (td == sipType_QVector4D)
+            {
+                QVector4D *v = reinterpret_cast<QVector4D *>(cpp);
+
+                *ap++ = v->x();
+                *ap++ = v->y();
+                *ap++ = v->z();
+                *ap++ = v->w();
+            }
+        }
+        else
+        {
+            itm = PySequence_Fast(itm,
+                    "attribute array elements should all be sequences");
+
+            if (itm)
+            {
+                if (PySequence_Fast_GET_SIZE(itm) != nr_dim)
+                {
+                    PyErr_Format(PyExc_TypeError,
+                            "attribute array elements should all be sequences "
+#if PY_VERSION_HEX >= 0x02050000
+                            "of length %zd",
+#else
+                            "of length %d",
+#endif
+                            nr_dim);
+
+                    Py_DECREF(itm);
+                    iserr = 1;
+                }
+                else
+                {
+                    PyErr_Clear();
+
+                    for (SIP_SSIZE_T j = 0; j < nr_dim; ++j)
+                        *ap++ = PyFloat_AsDouble(
+                                PySequence_Fast_GET_ITEM(itm, j));
+
+                    if (PyErr_Occurred())
+                    {
+                        PyErr_SetString(PyExc_TypeError,
+                                "attribute array elements should all be "
+                                "sequences of floats");
+
+                        Py_DECREF(itm);
+                        iserr = 1;
+                    }
+                }
+            }
+            else
+            {
+                iserr = 1;
+            }
+        }
+
+        if (iserr)
+        {
+            Py_DECREF(key);
+            Py_DECREF(values);
+            delete[] array;
+
+            *estate = sipErrorFail;
+            return 0;
+        }
+    }
+
+    Py_DECREF(values);
+
+    *tsize = nr_dim;
+
+    // Wrap the array in a Python object so that it won't leak.
+#if defined(SIP_USE_PYCAPSULE)
+    PyObject *array_obj = PyCapsule_New(array, 0, array_dtor);
+#else
+    PyObject *array_obj = PyCObject_FromVoidPtr(array, array_dtor);
+#endif
+
+    if (!array_obj)
+    {
+        Py_DECREF(key);
+        delete[] array;
+
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    int rc = PyDict_SetItem(dict, key, array_obj);
+
+    Py_DECREF(key);
+    Py_DECREF(array_obj);
+
+    if (rc < 0)
+    {
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    return array;
+}
+
+
+// The dtor for the saved attribute array.
+#if defined(SIP_USE_PYCAPSULE)
+static void array_dtor(PyObject *capsule)
+{
+    delete[] reinterpret_cast<GLfloat *>(PyCapsule_GetPointer(capsule, 0));
+}
+#else
+static void array_dtor(void *array)
+{
+    delete[] reinterpret_cast<GLfloat *>(array);
+}
+#endif
+
+
+#endif
diff --git a/qpy/QtGui/qpyopengl_data_cache.cpp b/qpy/QtGui/qpyopengl_data_cache.cpp
new file mode 100644
index 0000000..239af7f
--- /dev/null
+++ b/qpy/QtGui/qpyopengl_data_cache.cpp
@@ -0,0 +1,286 @@
+// This is the implementation of dataCache.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "sipAPIQtGui.h"
+
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+
+#include "qpyopengl_data_cache.h"
+
+
+// Forward declarations.
+extern "C" {
+static int dataCache_clear(PyObject *self);
+static void dataCache_dealloc(PyObject *self);
+static int dataCache_traverse(PyObject *self, visitproc visit, void *arg);
+}
+
+
+// This implements the Python type of a data cache.
+PyTypeObject qpyopengl_dataCache_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    SIP_TPNAME_CAST("PyQt5.QtGui.dataCache"),
+    sizeof (qpyopengl_dataCache),
+    0,
+    dataCache_dealloc,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC,
+    0,
+    dataCache_traverse,
+    dataCache_clear,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+#if PY_VERSION_HEX >= 0x03040000
+    0,
+#endif
+};
+
+
+// The dataCache clear function.
+static int dataCache_clear(PyObject *self)
+{
+    qpyopengl_dataCache *data_cache = (qpyopengl_dataCache *)self;
+
+    Array *uncached = data_cache->uncached;
+
+    if (uncached)
+    {
+        data_cache->uncached = 0;
+
+        uncached->clear();
+        delete uncached;
+    }
+
+    PrimaryCache *pcache = data_cache->pcache;
+
+    if (pcache)
+    {
+        data_cache->pcache = 0;
+
+        PrimaryCache::const_iterator pit = pcache->constBegin();
+
+        while (pit != pcache->constEnd())
+        {
+            delete *pit;
+            ++pit;
+        }
+
+        delete pcache;
+    }
+
+    return 0;
+}
+
+
+// The dataCache dealloc function.
+static void dataCache_dealloc(PyObject *self)
+{
+    PyObject_GC_UnTrack(self);
+
+    dataCache_clear(self);
+
+    Py_TYPE(self)->tp_free(self);
+}
+
+
+// The dataCache traverse function.
+static int dataCache_traverse(PyObject *self, visitproc visit, void *arg)
+{
+    qpyopengl_dataCache *data_cache = (qpyopengl_dataCache *)self;
+    int vret;
+
+    Array *uncached = data_cache->uncached;
+
+    if (uncached)
+    {
+        vret = uncached->traverse(visit, arg);
+
+        if (vret != 0)
+            return vret;
+    }
+
+    PrimaryCache *pcache = data_cache->pcache;
+
+    if (pcache)
+    {
+        PrimaryCache::const_iterator pit = pcache->constBegin();
+
+        while (pit != pcache->constEnd())
+        {
+            PrimaryCacheEntry *pce = *pit;
+
+            vret = pce->skey_0.traverse(visit, arg);
+
+            if (vret != 0)
+                return vret;
+
+            SecondaryCache *scache = pce->skey_n;
+
+            if (scache)
+            {
+                SecondaryCache::const_iterator sit = scache->constBegin();
+
+                while (sit != scache->constEnd())
+                {
+                    vret = (*sit)->traverse(visit, arg);
+
+                    if (vret != 0)
+                        return vret;
+
+                    ++sit;
+                }
+            }
+
+            ++pit;
+        }
+    }
+
+    return 0;
+}
+
+
+// Create a new data cache.
+qpyopengl_dataCache *qpyopengl_dataCache_New()
+{
+    return (qpyopengl_dataCache *)PyType_GenericAlloc(
+            &qpyopengl_dataCache_Type, 0);
+}
+
+
+// PrimaryCacheEntry ctor.
+PrimaryCacheEntry::PrimaryCacheEntry() : skey_n(0)
+{
+}
+
+
+// PrimaryCacheEntry dtor.
+PrimaryCacheEntry::~PrimaryCacheEntry()
+{
+    if (skey_n)
+    {
+        SecondaryCache::const_iterator sit = skey_n->constBegin();
+
+        while (sit != skey_n->constEnd())
+        {
+            delete (*sit);
+            ++sit;
+        }
+
+        delete skey_n;
+
+        skey_n = 0;
+    }
+}
+
+
+// Array ctor.
+Array::Array() : data(0)
+{
+#if PY_VERSION_HEX >= 0x02060300
+    buffer.obj = 0;
+#else
+    buffer = 0;
+#endif
+}
+
+
+// Array dtor.
+Array::~Array()
+{
+    clear();
+}
+
+
+// Clear the array.
+void Array::clear()
+{
+    if (data)
+    {
+        sipFree(data);
+        data = 0;
+    }
+#if PY_VERSION_HEX >= 0x02060300
+    else if (buffer.obj)
+    {
+        PyBuffer_Release(&buffer);
+    }
+#else
+    else if (buffer)
+    {
+        Py_DECREF(buffer);
+        buffer = 0;
+    }
+#endif
+}
+
+
+// Traverse the array.
+int Array::traverse(visitproc visit, void *arg)
+{
+    PyObject *obj;
+
+#if PY_VERSION_HEX >= 0x02060300
+    obj = buffer.obj;
+#else
+    obj = buffer;
+#endif
+
+    return obj ? visit(obj, arg) : 0;
+}
+
+
+#endif
diff --git a/qpy/QtGui/qpyopengl_data_cache.h b/qpy/QtGui/qpyopengl_data_cache.h
new file mode 100644
index 0000000..d76972f
--- /dev/null
+++ b/qpy/QtGui/qpyopengl_data_cache.h
@@ -0,0 +1,106 @@
+// This contains the definitions for the implementation of dataCache.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYOPENGL_DATACACHE_H
+#define _QPYOPENGL_DATACACHE_H
+
+
+#include <Python.h>
+
+#include "sipAPIQtGui.h"
+
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+
+#include <QHash>
+
+
+// The wrapper around the actual array memory.
+struct Array
+{
+    Array();
+    ~Array();
+
+    // Clear the array.
+    void clear();
+
+    // Traverse the array for the garbage collector.
+    int traverse(visitproc visit, void *arg);
+
+    // The data.  If it is 0 then any data is provided by an object that
+    // implements the buffer protocol.
+    void *data;
+
+#if PY_VERSION_HEX >= 0x02060300
+    // The buffer view.  The obj element is a reference to the object that
+    // implements the buffer protocol.
+    Py_buffer buffer;
+#else
+    // A reference to the object that implements the buffer protocol.
+    PyObject *buffer;
+#endif
+};
+
+typedef QHash<unsigned, Array *> SecondaryCache;
+
+
+// The cache for all value arrays for a particular primary key.
+struct PrimaryCacheEntry
+{
+    PrimaryCacheEntry();
+    ~PrimaryCacheEntry();
+
+    // The cache entry for a secondary key of zero.
+    Array skey_0;
+
+    // The cache entries for all non-zero secondary keys.
+    SecondaryCache *skey_n;
+};
+
+typedef QHash<const char *, PrimaryCacheEntry *> PrimaryCache;
+
+
+extern "C" {
+
+// This defines the structure of a data cache for OpenGL.
+typedef struct {
+    PyObject_HEAD
+
+    // The most recent uncached array, if any.
+    Array *uncached;
+
+    // The primary cache.
+    PrimaryCache *pcache;
+} qpyopengl_dataCache;
+
+
+// This implements the Python type of a data cache.
+extern PyTypeObject qpyopengl_dataCache_Type;
+
+}
+
+
+// Create a new data cache.
+qpyopengl_dataCache *qpyopengl_dataCache_New();
+
+
+#endif
+
+
+#endif
diff --git a/qpy/QtGui/qpyopengl_init.cpp b/qpy/QtGui/qpyopengl_init.cpp
new file mode 100644
index 0000000..6931c9a
--- /dev/null
+++ b/qpy/QtGui/qpyopengl_init.cpp
@@ -0,0 +1,57 @@
+// This is the initialisation support code for the QtGui module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "sipAPIQtGui.h"
+
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+
+#include "qpyopengl_api.h"
+#include "qpyopengl_data_cache.h"
+
+
+// Perform any required initialisation.
+void qpyopengl_init()
+{
+    // Initialise the OpenGL data cache type.
+    if (PyType_Ready(&qpyopengl_dataCache_Type) < 0)
+        Py_FatalError("PyQt5.QtGui: Failed to initialise dataCache type");
+
+    // Export the private helpers, ie. those that should not be used by
+    // external handwritten code.
+#if QT_VERSION >= 0x050100
+    sipExportSymbol("qpyopengl_value_array", (void *)qpyopengl_value_array);
+    sipExportSymbol("qpyopengl_value_array_cached",
+            (void *)qpyopengl_value_array_cached);
+    sipExportSymbol("qpyopengl_from_GLint", (void *)qpyopengl_from_GLint);
+    sipExportSymbol("qpyopengl_from_GLuint", (void *)qpyopengl_from_GLuint);
+    sipExportSymbol("qpyopengl_from_GLboolean",
+            (void *)qpyopengl_from_GLboolean);
+    sipExportSymbol("qpyopengl_from_GLfloat", (void *)qpyopengl_from_GLfloat);
+#if defined(SIP_FEATURE_PyQt_Desktop_OpenGL)
+    sipExportSymbol("qpyopengl_from_GLdouble",
+            (void *)qpyopengl_from_GLdouble);
+#endif
+#endif
+}
+
+
+#endif
diff --git a/qpy/QtGui/qpyopengl_uniform_value_array.cpp b/qpy/QtGui/qpyopengl_uniform_value_array.cpp
new file mode 100644
index 0000000..99d295d
--- /dev/null
+++ b/qpy/QtGui/qpyopengl_uniform_value_array.cpp
@@ -0,0 +1,446 @@
+// This contains the support for shader program uniform value arrays.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "sipAPIQtGui.h"
+
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+
+#include <QOpenGLShaderProgram>
+#include <QMatrix2x2>
+#include <QMatrix2x3>
+#include <QMatrix2x4>
+#include <QMatrix3x2>
+#include <QMatrix3x3>
+#include <QMatrix3x4>
+#include <QMatrix4x2>
+#include <QMatrix4x3>
+#include <QMatrix4x4>
+#include <QVector2D>
+#include <QVector3D>
+#include <QVector4D>
+
+#include "qpyopengl_api.h"
+
+
+// Forward declaratations.
+static void delete_array(void *array, const sipTypeDef *td);
+#if defined(SIP_USE_PYCAPSULE)
+static void array_dtor(PyObject *capsule);
+#else
+static void array_dtor(void *array, void *td);
+#endif
+
+
+// Parse a Python object as a sequence of either QVector[234]D or
+// QMatrix[234]x[234] instances, or a sequence of sequence of floats and return
+// an array that can be passed to QOpenGLShaderProgram::setUniformValueArray().
+// The array is destroyed only when the shader is garbage collected or when
+// replaced by another array.
+const void *qpyopengl_uniform_value_array(PyObject *values, PyObject *shader,
+        PyObject *key, const sipTypeDef **array_type, int *array_len,
+        int *tsize, sipErrorState *estate)
+{
+    // Check the key was created correctly.
+    if (!key)
+    {
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    // Get the dict that holds the converted arrays.
+    PyObject *dict = ((sipSimpleWrapper *)shader)->user;
+
+    if (!dict)
+    {
+        dict = PyDict_New();
+
+        if (!dict)
+        {
+            Py_DECREF(key);
+
+            *estate = sipErrorFail;
+            return 0;
+        }
+
+        ((sipSimpleWrapper *)shader)->user = dict;
+    }
+
+    // Check that values is a non-empty sequence.
+    values = PySequence_Fast(values,
+            "a uniform value array must be a sequence");
+
+    if (!values)
+    {
+        Py_DECREF(key);
+
+        *estate = sipErrorContinue;
+        return 0;
+    }
+
+    SIP_SSIZE_T nr_items = PySequence_Fast_GET_SIZE(values);
+
+    if (nr_items < 1)
+    {
+        PyErr_SetString(PyExc_TypeError,
+                "a uniform value array must have at least one element");
+
+        Py_DECREF(key);
+        Py_DECREF(values);
+
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    // The first element determines the type expected.
+    PyObject *itm = PySequence_Fast_GET_ITEM(values, 0);
+
+    const sipTypeDef *td;
+    SIP_SSIZE_T nr_dim = 0;
+    void *array;
+
+    if (sipCanConvertToType(itm, sipType_QVector2D, SIP_NOT_NONE))
+    {
+        td = sipType_QVector2D;
+        array = new QVector2D[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QVector3D, SIP_NOT_NONE))
+    {
+        td = sipType_QVector3D;
+        array = new QVector3D[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QVector4D, SIP_NOT_NONE))
+    {
+        td = sipType_QVector4D;
+        array = new QVector4D[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QMatrix2x2, SIP_NOT_NONE))
+    {
+        td = sipType_QMatrix2x2;
+        array = new QMatrix2x2[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QMatrix2x3, SIP_NOT_NONE))
+    {
+        td = sipType_QMatrix2x3;
+        array = new QMatrix2x3[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QMatrix2x4, SIP_NOT_NONE))
+    {
+        td = sipType_QMatrix2x4;
+        array = new QMatrix2x4[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QMatrix3x2, SIP_NOT_NONE))
+    {
+        td = sipType_QMatrix3x2;
+        array = new QMatrix3x2[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QMatrix3x3, SIP_NOT_NONE))
+    {
+        td = sipType_QMatrix3x3;
+        array = new QMatrix3x3[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QMatrix3x4, SIP_NOT_NONE))
+    {
+        td = sipType_QMatrix3x4;
+        array = new QMatrix3x4[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QMatrix4x2, SIP_NOT_NONE))
+    {
+        td = sipType_QMatrix4x2;
+        array = new QMatrix4x2[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QMatrix4x3, SIP_NOT_NONE))
+    {
+        td = sipType_QMatrix4x3;
+        array = new QMatrix4x3[nr_items];
+    }
+    else if (sipCanConvertToType(itm, sipType_QMatrix4x4, SIP_NOT_NONE))
+    {
+        td = sipType_QMatrix4x4;
+        array = new QMatrix4x4[nr_items];
+    }
+    else if (PySequence_Check(itm) && (nr_dim = PySequence_Size(itm)) >= 1)
+    {
+        td = 0;
+        array = new GLfloat[nr_items * nr_dim];
+    }
+    else
+    {
+        PyErr_SetString(PyExc_TypeError,
+                "a uniform value array must be a sequence of QVector2D, "
+                "QVector3D, QVector4D, QMatrix2x2, QMatrix2x3, QMatrix2x4, "
+                "QMatrix3x2, QMatrix3x3, QMatrix3x4, QMatrix4x2, QMatrix4x3, "
+                "QMatrix4x4, or a sequence of sequences of floats");
+
+        Py_DECREF(key);
+        Py_DECREF(values);
+
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    // Convert the values.
+    for (SIP_SSIZE_T i = 0; i < nr_items; ++i)
+    {
+        int iserr = 0;
+
+        itm = PySequence_Fast_GET_ITEM(values, i);
+
+        if (td)
+        {
+            void *cpp;
+
+            cpp = sipForceConvertToType(itm, td, 0,
+                    SIP_NOT_NONE | SIP_NO_CONVERTORS, 0, &iserr);
+
+            if (iserr)
+            {
+                PyErr_Format(PyExc_TypeError,
+                        "uniform value array elements should all be '%s', not "
+                        "'%s'",
+                        sipTypeAsPyTypeObject(td)->tp_name,
+                        Py_TYPE(itm)->tp_name);
+            }
+            else if (td == sipType_QVector2D)
+            {
+                QVector2D *a = reinterpret_cast<QVector2D *>(array);
+
+                a[i] = *reinterpret_cast<QVector2D *>(cpp);
+            }
+            else if (td == sipType_QVector3D)
+            {
+                QVector3D *a = reinterpret_cast<QVector3D *>(array);
+
+                a[i] = *reinterpret_cast<QVector3D *>(cpp);
+            }
+            else if (td == sipType_QVector4D)
+            {
+                QVector4D *a = reinterpret_cast<QVector4D *>(array);
+
+                a[i] = *reinterpret_cast<QVector4D *>(cpp);
+            }
+            else if (td == sipType_QMatrix2x2)
+            {
+                QMatrix2x2 *a = reinterpret_cast<QMatrix2x2 *>(array);
+
+                a[i] = *reinterpret_cast<QMatrix2x2 *>(cpp);
+            }
+            else if (td == sipType_QMatrix2x3)
+            {
+                QMatrix2x3 *a = reinterpret_cast<QMatrix2x3 *>(array);
+
+                a[i] = *reinterpret_cast<QMatrix2x3 *>(cpp);
+            }
+            else if (td == sipType_QMatrix2x4)
+            {
+                QMatrix2x4 *a = reinterpret_cast<QMatrix2x4 *>(array);
+
+                a[i] = *reinterpret_cast<QMatrix2x4 *>(cpp);
+            }
+            else if (td == sipType_QMatrix3x2)
+            {
+                QMatrix3x2 *a = reinterpret_cast<QMatrix3x2 *>(array);
+
+                a[i] = *reinterpret_cast<QMatrix3x2 *>(cpp);
+            }
+            else if (td == sipType_QMatrix3x3)
+            {
+                QMatrix3x3 *a = reinterpret_cast<QMatrix3x3 *>(array);
+
+                a[i] = *reinterpret_cast<QMatrix3x3 *>(cpp);
+            }
+            else if (td == sipType_QMatrix3x4)
+            {
+                QMatrix3x4 *a = reinterpret_cast<QMatrix3x4 *>(array);
+
+                a[i] = *reinterpret_cast<QMatrix3x4 *>(cpp);
+            }
+            else if (td == sipType_QMatrix4x2)
+            {
+                QMatrix4x2 *a = reinterpret_cast<QMatrix4x2 *>(array);
+
+                a[i] = *reinterpret_cast<QMatrix4x2 *>(cpp);
+            }
+            else if (td == sipType_QMatrix4x3)
+            {
+                QMatrix4x3 *a = reinterpret_cast<QMatrix4x3 *>(array);
+
+                a[i] = *reinterpret_cast<QMatrix4x3 *>(cpp);
+            }
+            else if (td == sipType_QMatrix4x4)
+            {
+                QMatrix4x4 *a = reinterpret_cast<QMatrix4x4 *>(array);
+
+                a[i] = *reinterpret_cast<QMatrix4x4 *>(cpp);
+            }
+        }
+        else
+        {
+            itm = PySequence_Fast(itm,
+                    "uniform value array elements should all be sequences");
+
+            if (itm)
+            {
+                if (PySequence_Fast_GET_SIZE(itm) != nr_dim)
+                {
+                    PyErr_Format(PyExc_TypeError,
+                            "uniform value array elements should all be "
+                            "sequences of length "
+#if PY_VERSION_HEX >= 0x02050000
+                            "%zd",
+#else
+                            "%d",
+#endif
+                            nr_dim);
+
+                    Py_DECREF(itm);
+                    iserr = 1;
+                }
+                else
+                {
+                    GLfloat *ap = reinterpret_cast<GLfloat *>(array);
+
+                    PyErr_Clear();
+
+                    for (SIP_SSIZE_T j = 0; j < nr_dim; ++j)
+                        *ap++ = PyFloat_AsDouble(
+                                PySequence_Fast_GET_ITEM(itm, j));
+
+                    if (PyErr_Occurred())
+                    {
+                        PyErr_SetString(PyExc_TypeError,
+                                "uniform value array elements should all be "
+                                "sequences of floats");
+
+                        Py_DECREF(itm);
+                        iserr = 1;
+                    }
+                }
+            }
+            else
+            {
+                iserr = 1;
+            }
+        }
+
+        if (iserr)
+        {
+            Py_DECREF(key);
+            Py_DECREF(values);
+            delete_array(array, td);
+
+            *estate = sipErrorFail;
+            return 0;
+        }
+    }
+
+    Py_DECREF(values);
+
+    // Wrap the array in a Python object so that it won't leak.
+#if defined(SIP_USE_PYCAPSULE)
+    PyObject *array_obj = PyCapsule_New(array, 0, array_dtor);
+
+    if (array_obj && PyCapsule_SetContext(array_obj, const_cast<sipTypeDef *>(td)) != 0)
+    {
+        Py_DECREF(array_obj);
+        array_obj = 0;
+    }
+#else
+    PyObject *array_obj = PyCObject_FromVoidPtrAndDesc(array, const_cast<sipTypeDef *>(td), array_dtor);
+#endif
+
+    if (!array_obj)
+    {
+        Py_DECREF(key);
+        delete_array(array, td);
+
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    int rc = PyDict_SetItem(dict, key, array_obj);
+
+    Py_DECREF(key);
+    Py_DECREF(array_obj);
+
+    if (rc < 0)
+    {
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    *array_type = td;
+    *array_len = nr_items;
+    *tsize = nr_dim;
+
+    return array;
+}
+
+
+// Do the actual work of deleting the array.
+static void delete_array(void *array, const sipTypeDef *td)
+{
+    if (td == sipType_QVector2D)
+        delete[] reinterpret_cast<QVector2D *>(array);
+    else if (td == sipType_QVector3D)
+        delete[] reinterpret_cast<QVector3D *>(array);
+    else if (td == sipType_QVector4D)
+        delete[] reinterpret_cast<QVector4D *>(array);
+    else if (td == sipType_QMatrix2x2)
+        delete[] reinterpret_cast<QMatrix2x2 *>(array);
+    else if (td == sipType_QMatrix2x3)
+        delete[] reinterpret_cast<QMatrix2x3 *>(array);
+    else if (td == sipType_QMatrix2x4)
+        delete[] reinterpret_cast<QMatrix2x4 *>(array);
+    else if (td == sipType_QMatrix3x2)
+        delete[] reinterpret_cast<QMatrix3x2 *>(array);
+    else if (td == sipType_QMatrix3x3)
+        delete[] reinterpret_cast<QMatrix3x3 *>(array);
+    else if (td == sipType_QMatrix3x4)
+        delete[] reinterpret_cast<QMatrix3x4 *>(array);
+    else if (td == sipType_QMatrix4x2)
+        delete[] reinterpret_cast<QMatrix4x2 *>(array);
+    else if (td == sipType_QMatrix4x3)
+        delete[] reinterpret_cast<QMatrix4x3 *>(array);
+    else if (td == sipType_QMatrix4x4)
+        delete[] reinterpret_cast<QMatrix4x4 *>(array);
+    else
+        delete[] reinterpret_cast<GLfloat *>(array);
+}
+
+
+// The dtor for the saved array.
+#if defined(SIP_USE_PYCAPSULE)
+static void array_dtor(PyObject *capsule)
+{
+    delete_array(PyCapsule_GetPointer(capsule, 0),
+            reinterpret_cast<const sipTypeDef *>(
+                    PyCapsule_GetContext(capsule)));
+}
+#else
+static void array_dtor(void *array, void *td)
+{
+    delete_array(array, reinterpret_cast<const sipTypeDef *>(td));
+}
+#endif
+
+
+#endif
diff --git a/qpy/QtGui/qpyopengl_value_array.cpp b/qpy/QtGui/qpyopengl_value_array.cpp
new file mode 100644
index 0000000..65aa9c7
--- /dev/null
+++ b/qpy/QtGui/qpyopengl_value_array.cpp
@@ -0,0 +1,434 @@
+// This contains the support for QOpenGL value arrays.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "sipAPIQtGui.h"
+
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+
+#include <QtGlobal>
+
+#if QT_VERSION >= 0x050100
+
+#include "qpyopengl_api.h"
+#include "qpyopengl_data_cache.h"
+
+
+// Forward declarations.
+static qpyopengl_dataCache *get_cache(PyObject *bindings);
+static void *convert_values(Array *cache, PyObject *values,
+        GLenum gl_type, sipErrorState *estate);
+static void convert_byte(PyObject *itm, void *array, SIP_SSIZE_T i);
+static void convert_ubyte(PyObject *itm, void *array, SIP_SSIZE_T i);
+static void convert_short(PyObject *itm, void *array, SIP_SSIZE_T i);
+static void convert_ushort(PyObject *itm, void *array, SIP_SSIZE_T i);
+static void convert_int(PyObject *itm, void *array, SIP_SSIZE_T i);
+static void convert_uint(PyObject *itm, void *array, SIP_SSIZE_T i);
+static void convert_float(PyObject *itm, void *array, SIP_SSIZE_T i);
+#if defined(SIP_FEATURE_PyQt_Desktop_OpenGL)
+static void convert_double(PyObject *itm, void *array, SIP_SSIZE_T i);
+#endif
+
+
+// Get an array of OpenGL fundamental types from a sequence or an object that
+// implements a compatible buffer.
+const GLvoid *qpyopengl_value_array(sipErrorState *estate, PyObject *values,
+        GLenum gl_type, PyObject *bindings)
+{
+    // Handle the trivial None case first.  0 has a special meaning to some
+    // OpenGL calls so we allow it for all.  If this becomes a problem then we
+    // can add a new variant of this function that handles None differently.
+    if (values == Py_None)
+        return 0;
+
+    qpyopengl_dataCache *data_cache = get_cache(bindings);
+
+    if (!data_cache)
+    {
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    // Get an empty wrapper for the array.
+    if (data_cache->uncached)
+        data_cache->uncached->clear();
+    else
+        data_cache->uncached = new Array;
+
+    return convert_values(data_cache->uncached, values, gl_type, estate);
+}
+
+
+// Get an array of OpenGL fundamental types from a sequence or an object that
+// implements a compatible buffer.  Cache the array so that it persists until a
+// similar call.
+const GLvoid *qpyopengl_value_array_cached(sipErrorState *estate,
+        PyObject *values, GLenum gl_type, PyObject *bindings, const char *pkey,
+        GLuint skey)
+{
+    // Handle the trivial byte offset case first.
+    PyErr_Clear();
+
+    void *data = PyLong_AsVoidPtr(values);
+
+    if (!PyErr_Occurred())
+        return data;
+
+    qpyopengl_dataCache *data_cache = get_cache(bindings);
+
+    if (!data_cache)
+    {
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    if (!data_cache->pcache)
+        data_cache->pcache = new PrimaryCache;
+
+    // Get an empty wrapper for the array.
+    PrimaryCacheEntry *pce = (*data_cache->pcache)[pkey];
+
+    if (!pce)
+    {
+        pce = new PrimaryCacheEntry;
+        data_cache->pcache->insert(pkey, pce);
+    }
+
+    Array *array;
+
+    if (skey == 0)
+    {
+        array = &pce->skey_0;
+    }
+    else
+    {
+        if (!pce->skey_n)
+            pce->skey_n = new SecondaryCache;
+
+        array = (*pce->skey_n)[skey];
+
+        if (!array)
+        {
+            array = new Array;
+            pce->skey_n->insert(skey, array);
+        }
+    }
+
+    array->clear();
+
+    return convert_values(array, values, gl_type, estate);
+}
+
+
+// Get the cache for a set of bindings.
+static qpyopengl_dataCache *get_cache(PyObject *bindings)
+{
+    // Create the cache if it doesn't already exist.
+    qpyopengl_dataCache *data_cache = (qpyopengl_dataCache *)((sipSimpleWrapper *)bindings)->user;
+
+    if (!data_cache)
+    {
+        data_cache = qpyopengl_dataCache_New();
+
+        if (data_cache)
+            ((sipSimpleWrapper *)bindings)->user = (PyObject *)data_cache;
+    }
+
+    return data_cache;
+}
+
+
+// Convert the Python values to a raw array.
+static void *convert_values(Array *array, PyObject *values, GLenum gl_type,
+        sipErrorState *estate)
+{
+#if PY_VERSION_HEX >= 0x02060300
+    if (PyObject_GetBuffer(values, &array->buffer, PyBUF_FORMAT) != -1)
+    {
+        // Check the buffer is compatible with what we need.
+        if (array->buffer.ndim != 1)
+        {
+            PyErr_SetString(PyExc_TypeError, "1-dimensional buffer required");
+            *estate = sipErrorFail;
+            return 0;
+        }
+
+        GLenum array_type;
+
+        switch (*array->buffer.format)
+        {
+        case 'b':
+            array_type = GL_BYTE;
+            break;
+
+        case 'B':
+            array_type = GL_UNSIGNED_BYTE;
+            break;
+
+        case 'h':
+            array_type = GL_SHORT;
+            break;
+
+        case 'H':
+            array_type = GL_UNSIGNED_SHORT;
+            break;
+
+        case 'i':
+            array_type = GL_INT;
+            break;
+
+        case 'I':
+            array_type = GL_UNSIGNED_INT;
+            break;
+
+        case 'f':
+            array_type = GL_FLOAT;
+            break;
+
+#if defined(SIP_FEATURE_PyQt_Desktop_OpenGL)
+        case 'd':
+            array_type = GL_DOUBLE;
+            break;
+#endif
+
+        default:
+            PyErr_Format(PyExc_TypeError, "unsupported buffer type '%s'",
+                    array->buffer.format);
+            *estate = sipErrorFail;
+            return 0;
+        }
+
+        if (array_type != gl_type)
+        {
+            PyErr_SetString(PyExc_TypeError,
+                    "the buffer type is not the same as the array type");
+            *estate = sipErrorFail;
+            return 0;
+        }
+
+        return array->buffer.buf;
+    }
+#else
+    PyBufferProcs *bf = Py_TYPE(values)->tp_as_buffer;
+
+    if (bf && bf->bf_getreadbuffer && bf->bf_getsegcount)
+    {
+        if (bf->bf_getsegcount(values, 0) != 1)
+        {
+            PyErr_SetString(PyExc_TypeError,
+                    "single-segment buffer object expected");
+            *estate = sipErrorFail;
+            return 0;
+        }
+
+        if (bf->bf_getreadbuffer(values, 0, reinterpret_cast<void **>(&array)) < 0)
+        {
+            *estate = sipErrorFail;
+            return 0;
+        }
+
+        Py_INCREF(values);
+        array->buffer = values;
+
+        return array;
+    }
+#endif
+
+    PyObject *seq = PySequence_Fast(values,
+            "array must be a sequence or a buffer");
+
+    if (!seq)
+    {
+        *estate = sipErrorContinue;
+        return 0;
+    }
+
+    SIP_SSIZE_T nr_items = PySequence_Fast_GET_SIZE(seq);
+
+    if (nr_items < 1)
+    {
+        Py_DECREF(seq);
+
+        PyErr_SetString(PyExc_TypeError,
+                "array must have at least one element");
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    void (*convertor)(PyObject *, void *, SIP_SSIZE_T);
+    size_t element_size;
+
+    switch (gl_type)
+    {
+    case GL_BYTE:
+        convertor = convert_byte;
+        element_size = sizeof (GLbyte);
+        break;
+
+    case GL_UNSIGNED_BYTE:
+        convertor = convert_ubyte;
+        element_size = sizeof (GLubyte);
+        break;
+
+    case GL_SHORT:
+        convertor = convert_short;
+        element_size = sizeof (GLshort);
+        break;
+
+    case GL_UNSIGNED_SHORT:
+        convertor = convert_ushort;
+        element_size = sizeof (GLushort);
+        break;
+
+    case GL_INT:
+        convertor = convert_int;
+        element_size = sizeof (GLint);
+        break;
+
+    case GL_UNSIGNED_INT:
+        convertor = convert_uint;
+        element_size = sizeof (GLuint);
+        break;
+
+    case GL_FLOAT:
+        convertor = convert_float;
+        element_size = sizeof (GLfloat);
+        break;
+
+#if defined(SIP_FEATURE_PyQt_Desktop_OpenGL)
+#if GL_DOUBLE != GL_FLOAT
+    case GL_DOUBLE:
+        convertor = convert_double;
+        element_size = sizeof (GLdouble);
+        break;
+#endif
+#endif
+
+    default:
+        Py_DECREF(seq);
+
+        PyErr_SetString(PyExc_TypeError, "unsupported GL element type");
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    void *data = sipMalloc(nr_items * element_size);
+
+    if (!data)
+    {
+        Py_DECREF(seq);
+
+        *estate = sipErrorFail;
+        return 0;
+    }
+
+    for (SIP_SSIZE_T i = 0; i < nr_items; ++i)
+    {
+        PyErr_Clear();
+
+        convertor(PySequence_Fast_GET_ITEM(seq, i), data, i);
+
+        if (PyErr_Occurred())
+        {
+            sipFree(data);
+            Py_DECREF(seq);
+
+            *estate = sipErrorFail;
+            return 0;
+        }
+    }
+
+    Py_DECREF(seq);
+
+    array->data = data;
+
+    return data;
+}
+
+
+#if PY_MAJOR_VERSION >= 3
+#define Long_AsUnsignedLong PyLong_AsUnsignedLongMask
+#else
+#define Long_AsUnsignedLong PyInt_AsUnsignedLongMask
+#endif
+
+
+// Convert a Python object to a GLbyte.
+static void convert_byte(PyObject *itm, void *array, SIP_SSIZE_T i)
+{
+    reinterpret_cast<GLbyte *>(array)[i] = SIPLong_AsLong(itm);
+}
+
+
+// Convert a Python object to a GLubyte.
+static void convert_ubyte(PyObject *itm, void *array, SIP_SSIZE_T i)
+{
+    reinterpret_cast<GLubyte *>(array)[i] = Long_AsUnsignedLong(itm);
+}
+
+
+// Convert a Python object to a GLshort.
+static void convert_short(PyObject *itm, void *array, SIP_SSIZE_T i)
+{
+    reinterpret_cast<GLshort *>(array)[i] = SIPLong_AsLong(itm);
+}
+
+
+// Convert a Python object to a GLushort.
+static void convert_ushort(PyObject *itm, void *array, SIP_SSIZE_T i)
+{
+    reinterpret_cast<GLushort *>(array)[i] = Long_AsUnsignedLong(itm);
+}
+
+
+// Convert a Python object to a GLint.
+static void convert_int(PyObject *itm, void *array, SIP_SSIZE_T i)
+{
+    reinterpret_cast<GLint *>(array)[i] = SIPLong_AsLong(itm);
+}
+
+
+// Convert a Python object to a GLuint.
+static void convert_uint(PyObject *itm, void *array, SIP_SSIZE_T i)
+{
+    reinterpret_cast<GLuint *>(array)[i] = Long_AsUnsignedLong(itm);
+}
+
+
+// Convert a Python object to a GLfloat.
+static void convert_float(PyObject *itm, void *array, SIP_SSIZE_T i)
+{
+    reinterpret_cast<GLfloat *>(array)[i] = PyFloat_AsDouble(itm);
+}
+
+
+#if defined(SIP_FEATURE_PyQt_Desktop_OpenGL)
+// Convert a Python object to a GLdouble.
+static void convert_double(PyObject *itm, void *array, SIP_SSIZE_T i)
+{
+    reinterpret_cast<GLdouble *>(array)[i] = PyFloat_AsDouble(itm);
+}
+#endif
+
+#endif
+
+
+#endif
diff --git a/qpy/QtGui/qpyopengl_version_functions.cpp b/qpy/QtGui/qpyopengl_version_functions.cpp
new file mode 100644
index 0000000..ad259a3
--- /dev/null
+++ b/qpy/QtGui/qpyopengl_version_functions.cpp
@@ -0,0 +1,157 @@
+// This contains the support for QOpenGLContext.versionFunctions().
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "sipAPIQtGui.h"
+
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+
+#include <QtGlobal>
+
+#if QT_VERSION >= 0x050100
+
+#include <QList>
+
+#include "qpyopengl_api.h"
+
+
+// Forward declarations.
+int qpyopengl_add_constants(PyObject *obj);
+
+
+// The cache of type objects corresponding to each set of functions.
+static QList<PyTypeObject *> funcs_types;
+
+
+PyObject *qpyopengl_version_functions(const QOpenGLContext *context,
+        PyObject *py_context, const QOpenGLVersionProfile *version_profile)
+{
+    // Get a valid version profile.
+    QOpenGLVersionProfile vp;
+
+    if (version_profile && version_profile->isValid())
+        vp = *version_profile;
+    else
+        vp = QOpenGLVersionProfile(context->format());
+
+    // Create the functions.
+    QAbstractOpenGLFunctions *funcs = context->versionFunctions(vp);
+
+    if (!funcs)
+    {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    // Qt doesn't allow us to introspect the functions to find which set we
+    // have, so work out what it should be based on the version profile.
+#if defined(QT_OPENGL_ES_2)
+    QByteArray name("QOpenGLFunctions_ES2");
+#else
+    QByteArray name("QOpenGLFunctions_");
+
+    QPair<int, int> version = vp.version();
+    name.append(QByteArray::number(version.first));
+    name.append('_');
+    name.append(QByteArray::number(version.second));
+
+    if (vp.hasProfiles())
+    {
+        switch (vp.profile())
+        {
+        case QSurfaceFormat::CoreProfile:
+            name.append("_Core");
+            break;
+
+        case QSurfaceFormat::CompatibilityProfile:
+            name.append("_Compatibility");
+            break;
+
+        default:
+            ;
+        }
+    }
+#endif
+
+    // See if we already have the type object.
+    PyTypeObject *funcs_type = 0;
+
+    for (int i = 0; i < funcs_types.count(); ++i)
+    {
+        PyTypeObject *ft = funcs_types.at(i);
+
+        if (name == ft->tp_name)
+        {
+            funcs_type = ft;
+            break;
+        }
+    }
+
+    if (!funcs_type)
+    {
+        // Get the type object.
+        QByteArray module_name("PyQt5._");
+        module_name.append(name);
+
+        PyObject *module = PyImport_ImportModule(module_name.constData());
+
+        if (!module)
+            return 0;
+
+        PyObject *obj = PyObject_GetAttrString(module, name.constData());
+
+        Py_DECREF(module);
+
+        if (!obj)
+            return 0;
+
+        // Sanity check the type object.
+        if (PyObject_IsSubclass(obj, (PyObject *)sipTypeAsPyTypeObject(sipType_QAbstractOpenGLFunctions)) <= 0)
+        {
+            Py_DECREF(obj);
+
+            PyErr_Format(PyExc_TypeError, "%s.%s has an unexpected type",
+                    module_name.constData(), name.constData());
+
+            return 0;
+        }
+
+        // Populate the type with the OpenGL constants.
+        if (qpyopengl_add_constants(obj) < 0)
+        {
+            Py_DECREF(obj);
+            return 0;
+        }
+
+        // Cache the type object.
+        funcs_type = (PyTypeObject *)obj;
+        funcs_types.append(funcs_type);
+    }
+
+    // Ownership is with the context.
+    return sipConvertFromNewType(funcs, sipTypeFromPyTypeObject(funcs_type),
+            py_context);
+}
+
+#endif
+
+
+#endif
diff --git a/qpy/QtQml/qpyqml_api.h b/qpy/QtQml/qpyqml_api.h
new file mode 100644
index 0000000..b2f0aec
--- /dev/null
+++ b/qpy/QtQml/qpyqml_api.h
@@ -0,0 +1,60 @@
+// This defines the API provided by this library.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQML_API_H
+#define _QPYQML_API_H
+
+
+#include <Python.h>
+
+#include <QJSValue>
+#include <QMetaObject>
+#include <QObject>
+#include <QString>
+
+
+// Support for qmlRegisterType().
+int qpyqml_register_type(PyTypeObject *py_type, PyTypeObject *attached);
+int qpyqml_register_library_type(PyTypeObject *py_type, const char *uri,
+        int major, int minor, const char *qml_name, int revision,
+        PyTypeObject *attached);
+int qpyqml_register_singleton_type(PyTypeObject *py_type, const char *uri,
+        int major, int minor, const char *type_name, PyObject *factory);
+int qpyqml_register_uncreatable_type(PyTypeObject *py_type, const char *uri,
+        int major, int minor, const char *qml_name, const QString &reason,
+        int revision);
+
+// Support for qmlAttachedPropertiesObject().
+QObject *qpyqml_find_proxy_for(QObject *proxied);
+
+// Support for QJSValue.
+int qpyqml_canConvertTo_QJSValue(PyObject *py);
+int qpyqml_convertTo_QJSValue(PyObject *py, PyObject *transferObj,
+        QJSValue **cpp, int *isErr);
+
+// Imports from QtCore.
+typedef const QMetaObject *(*pyqt5_qtqml_get_qmetaobject_t)(PyTypeObject *);
+extern pyqt5_qtqml_get_qmetaobject_t pyqt5_qtqml_get_qmetaobject;
+
+// Initialisation.
+void qpyqml_post_init(PyObject *module_dict);
+
+
+#endif
diff --git a/qpy/QtQml/qpyqml_listdata.cpp b/qpy/QtQml/qpyqml_listdata.cpp
new file mode 100644
index 0000000..fe2f77f
--- /dev/null
+++ b/qpy/QtQml/qpyqml_listdata.cpp
@@ -0,0 +1,52 @@
+// This is the implementation of the ListData class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include "qpyqml_listdata.h"
+
+
+// Create a null instance.
+ListData::ListData(PyObject *py_type_, PyObject *py_obj_, PyObject *py_list_,
+        PyObject *py_append_, PyObject *py_count_, PyObject *py_at_,
+        PyObject *py_clear_, QObject *parent) : QObject(parent),
+        py_type(py_type_), py_obj(py_obj_), py_list(py_list_),
+        py_append(py_append_), py_count(py_count_), py_at(py_at_),
+        py_clear(py_clear_)
+{
+    Py_XINCREF(py_type);
+    Py_XINCREF(py_obj);
+    Py_XINCREF(py_list);
+    Py_XINCREF(py_append);
+    Py_XINCREF(py_count);
+    Py_XINCREF(py_at);
+    Py_XINCREF(py_clear);
+}
+
+
+// Destroy the data.
+ListData::~ListData()
+{
+    Py_XDECREF(py_type);
+    Py_XDECREF(py_obj);
+    Py_XDECREF(py_list);
+    Py_XDECREF(py_append);
+    Py_XDECREF(py_count);
+    Py_XDECREF(py_at);
+    Py_XDECREF(py_clear);
+}
diff --git a/qpy/QtQml/qpyqml_listdata.h b/qpy/QtQml/qpyqml_listdata.h
new file mode 100644
index 0000000..5a873e4
--- /dev/null
+++ b/qpy/QtQml/qpyqml_listdata.h
@@ -0,0 +1,50 @@
+// This is the definition of the ListData class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQML_LISTDATA_H
+#define _QPYQML_LISTDATA_H
+
+
+#include <Python.h>
+
+#include <QObject>
+
+
+class ListData : public QObject
+{
+    Q_OBJECT
+
+public:
+    ListData(PyObject *py_type, PyObject *py_obj, PyObject *py_list,
+            PyObject *py_append, PyObject *py_count, PyObject *py_at,
+            PyObject *py_clear, QObject *parent);
+    ~ListData();
+
+    PyObject *py_type;
+    PyObject *py_obj;
+    PyObject *py_list;
+    PyObject *py_append;
+    PyObject *py_count;
+    PyObject *py_at;
+    PyObject *py_clear;
+};
+
+
+#endif
diff --git a/qpy/QtQml/qpyqml_post_init.cpp b/qpy/QtQml/qpyqml_post_init.cpp
new file mode 100644
index 0000000..0d0a23c
--- /dev/null
+++ b/qpy/QtQml/qpyqml_post_init.cpp
@@ -0,0 +1,57 @@
+// This is the initialisation support code for the QtQml module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpyqml_api.h"
+#include "qpyqmllistproperty.h"
+#include "qpyqmlobject.h"
+
+#include "sipAPIQtQml.h"
+
+
+// Perform any required initialisation.
+void qpyqml_post_init(PyObject *module_dict)
+{
+    // Initialise the QQmlListProperty type.
+#if PY_MAJOR_VERSION >= 3
+    qpyqml_QQmlListProperty_Type.tp_base = &PyUnicode_Type;
+#else
+    qpyqml_QQmlListProperty_Type.tp_base = &PyString_Type;
+#endif
+
+    if (PyType_Ready(&qpyqml_QQmlListProperty_Type) < 0)
+        Py_FatalError("PyQt5.QtQml: Failed to initialise QQmlListProperty type");
+
+    // Create the only instance and add it to the module dictionary.
+    PyObject *inst = PyObject_CallFunction(
+            (PyObject *)&qpyqml_QQmlListProperty_Type, const_cast<char *>("s"),
+            "QQmlListProperty<QObject>");
+
+    if (!inst)
+        Py_FatalError("PyQt5.QtQml: Failed to create QQmlListProperty instance");
+
+    if (PyDict_SetItemString(module_dict, "QQmlListProperty", inst) < 0)
+        Py_FatalError("PyQt5.QtQml: Failed to set QQmlListProperty instance");
+
+    // Register the proxy resolver.
+    if (sipRegisterProxyResolver(sipType_QObject, QPyQmlObjectProxy::resolveProxy) < 0)
+        Py_FatalError("PyQt5.QtQml: Failed to register proxy resolver");
+}
diff --git a/qpy/QtQml/qpyqml_qjsvalue.cpp b/qpy/QtQml/qpyqml_qjsvalue.cpp
new file mode 100644
index 0000000..78ef252
--- /dev/null
+++ b/qpy/QtQml/qpyqml_qjsvalue.cpp
@@ -0,0 +1,119 @@
+// This is the support for QJSValue.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include "qpyqml_api.h"
+
+#include "sipAPIQtQml.h"
+
+
+// See if a Python object can be converted to a QJSValue.
+int qpyqml_canConvertTo_QJSValue(PyObject *py)
+{
+    if (PyObject_TypeCheck(py, sipTypeAsPyTypeObject(sipType_QJSValue_SpecialValue)))
+        return 1;
+
+    if (PyBool_Check(py))
+        return 1;
+
+    if (PyLong_Check(py))
+        return 1;
+
+#if PY_MAJOR_VERSION < 3
+    if (PyInt_Check(py))
+        return 1;
+#endif
+
+    if (PyFloat_Check(py))
+        return 1;
+
+    if (sipCanConvertToType(py, sipType_QString, 0))
+        return 1;
+
+    return sipCanConvertToType(py, sipType_QJSValue, SIP_NO_CONVERTORS);
+}
+
+
+// Convert a Python object to a QJSValue.
+int qpyqml_convertTo_QJSValue(PyObject *py, PyObject *transferObj,
+        QJSValue **cpp, int *isErr)
+{
+    if (PyObject_TypeCheck(py, sipTypeAsPyTypeObject(sipType_QJSValue_SpecialValue)))
+    {
+        *cpp = new QJSValue((QJSValue::SpecialValue)SIPLong_AsLong(py));
+
+        return sipGetState(transferObj);
+    }
+
+    if (PyBool_Check(py))
+    {
+        *cpp = new QJSValue(py == Py_True);
+
+        return sipGetState(transferObj);
+    }
+
+    if (PyLong_Check(py))
+    {
+        *cpp = new QJSValue((int)PyLong_AsLong(py));
+
+        return sipGetState(transferObj);
+    }
+
+#if PY_MAJOR_VERSION < 3
+    if (PyInt_Check(py))
+    {
+        *cpp = new QJSValue((int)PyInt_AS_LONG(py));
+
+        return sipGetState(transferObj);
+    }
+#endif
+
+    if (PyFloat_Check(py))
+    {
+        *cpp = new QJSValue((double)PyFloat_AS_DOUBLE(py));
+
+        return sipGetState(transferObj);
+    }
+
+    if (sipCanConvertToType(py, sipType_QString, 0))
+    {
+        int state;
+        QString *qs = reinterpret_cast<QString *>(sipConvertToType(py,
+                sipType_QString, 0, 0, &state, isErr));
+
+        if (*isErr)
+        {
+            sipReleaseType(qs, sipType_QString, state);
+            return 0;
+        }
+
+        *cpp = new QJSValue(*qs);
+
+        sipReleaseType(qs, sipType_QString, state);
+
+        return sipGetState(transferObj);
+    }
+
+    *cpp = reinterpret_cast<QJSValue *>(sipConvertToType(py, sipType_QJSValue,
+            transferObj, SIP_NO_CONVERTORS, 0, isErr));
+
+    return 0;
+}
diff --git a/qpy/QtQml/qpyqml_register_singleton_type.cpp b/qpy/QtQml/qpyqml_register_singleton_type.cpp
new file mode 100644
index 0000000..30d1090
--- /dev/null
+++ b/qpy/QtQml/qpyqml_register_singleton_type.cpp
@@ -0,0 +1,168 @@
+// This contains the main implementation of qmlRegisterSingletonType.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <qqmlprivate.h>
+#include <QByteArray>
+
+#include "qpyqml_api.h"
+#include "qpyqmlsingletonobject.h"
+
+#include "sipAPIQtQml.h"
+
+
+// Forward declarations.
+static QQmlPrivate::RegisterSingletonType *init_type(PyTypeObject *py_type,
+        PyObject *factory);
+static int register_type(QQmlPrivate::RegisterSingletonType *rt);
+
+
+// The number of types that can be registered.
+const int NrOfTypes = 30;
+
+
+// The registration data for the proxy types.
+static QQmlPrivate::RegisterSingletonType proxy_types[NrOfTypes];
+
+
+// Register a singleton Python type.
+int qpyqml_register_singleton_type(PyTypeObject *py_type, const char *uri,
+        int major, int minor, const char *type_name, PyObject *factory)
+{
+    // Initialise the registration data structure.
+    QQmlPrivate::RegisterSingletonType *rt = init_type(py_type, factory);
+
+    if (!rt)
+        return -1;
+
+    rt->uri = uri;
+    rt->versionMajor = major;
+    rt->versionMinor = minor;
+    rt->typeName = type_name;
+
+    return register_type(rt);
+}
+
+
+// Register the proxy type with QML.
+static int register_type(QQmlPrivate::RegisterSingletonType *rt)
+{
+    int type_id = QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, rt);
+
+    if (type_id < 0)
+    {
+        PyErr_SetString(PyExc_RuntimeError,
+                "unable to register singleton type with QML");
+        return -1;
+    }
+
+    return type_id;
+}
+
+
+#define QPYQML_SINGLETON_TYPE_INIT(n) \
+    case n##U: \
+        QPyQmlSingletonObject##n::staticMetaObject = *mo; \
+        QPyQmlSingletonObject##n::factory = factory; \
+        rt->qobjectApi = QPyQmlSingletonObject##n::objectFactory; \
+        rt->typeId = qRegisterNormalizedMetaType<QPyQmlSingletonObject##n *>(ptr_name.constData()); \
+        rt->instanceMetaObject = mo; \
+        break
+
+
+// Return a pointer to the initialised registration structure for a type.
+static QQmlPrivate::RegisterSingletonType *init_type(PyTypeObject *py_type,
+        PyObject *factory)
+{
+    // Check the type is derived from QObject.
+    if (!PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QObject)))
+    {
+        PyErr_SetString(PyExc_TypeError,
+                "type being registered must be a sub-type of QObject");
+        return 0;
+    }
+
+    // Get the type's number and check there aren't too many.
+    int type_nr = QPyQmlSingletonObjectProxy::addType();
+
+    if (type_nr >= NrOfTypes)
+    {
+        PyErr_Format(PyExc_TypeError,
+                "a maximum of %d singleton types may be registered with QML",
+                NrOfTypes);
+        return 0;
+    }
+
+    QQmlPrivate::RegisterSingletonType *rt = &proxy_types[type_nr];
+
+    const QMetaObject *mo = pyqt5_qtqml_get_qmetaobject(py_type);
+
+    QByteArray ptr_name(py_type->tp_name);
+    ptr_name.append('*');
+
+    // Initialise those members that depend on the C++ type.
+    switch (type_nr)
+    {
+        QPYQML_SINGLETON_TYPE_INIT(0);
+        QPYQML_SINGLETON_TYPE_INIT(1);
+        QPYQML_SINGLETON_TYPE_INIT(2);
+        QPYQML_SINGLETON_TYPE_INIT(3);
+        QPYQML_SINGLETON_TYPE_INIT(4);
+        QPYQML_SINGLETON_TYPE_INIT(5);
+        QPYQML_SINGLETON_TYPE_INIT(6);
+        QPYQML_SINGLETON_TYPE_INIT(7);
+        QPYQML_SINGLETON_TYPE_INIT(8);
+        QPYQML_SINGLETON_TYPE_INIT(9);
+        QPYQML_SINGLETON_TYPE_INIT(10);
+        QPYQML_SINGLETON_TYPE_INIT(11);
+        QPYQML_SINGLETON_TYPE_INIT(12);
+        QPYQML_SINGLETON_TYPE_INIT(13);
+        QPYQML_SINGLETON_TYPE_INIT(14);
+        QPYQML_SINGLETON_TYPE_INIT(15);
+        QPYQML_SINGLETON_TYPE_INIT(16);
+        QPYQML_SINGLETON_TYPE_INIT(17);
+        QPYQML_SINGLETON_TYPE_INIT(18);
+        QPYQML_SINGLETON_TYPE_INIT(19);
+        QPYQML_SINGLETON_TYPE_INIT(20);
+        QPYQML_SINGLETON_TYPE_INIT(21);
+        QPYQML_SINGLETON_TYPE_INIT(22);
+        QPYQML_SINGLETON_TYPE_INIT(23);
+        QPYQML_SINGLETON_TYPE_INIT(24);
+        QPYQML_SINGLETON_TYPE_INIT(25);
+        QPYQML_SINGLETON_TYPE_INIT(26);
+        QPYQML_SINGLETON_TYPE_INIT(27);
+        QPYQML_SINGLETON_TYPE_INIT(28);
+        QPYQML_SINGLETON_TYPE_INIT(29);
+    }
+
+    // Initialise the remaining members.
+    rt->version = 2;
+    rt->uri = 0;
+    rt->versionMajor = 0;
+    rt->versionMinor = 0;
+    rt->typeName = 0;
+    rt->scriptApi = 0;
+    rt->revision = 0;
+
+    Py_INCREF(factory);
+
+    return rt;
+}
diff --git a/qpy/QtQml/qpyqml_register_type.cpp b/qpy/QtQml/qpyqml_register_type.cpp
new file mode 100644
index 0000000..f98262b
--- /dev/null
+++ b/qpy/QtQml/qpyqml_register_type.cpp
@@ -0,0 +1,411 @@
+// This contains the main implementation of qmlRegisterType.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <qqmlprivate.h>
+#include <QByteArray>
+#include <QString>
+#include <QQmlListProperty>
+#include <QQmlParserStatus>
+#include <QQmlPropertyValueSource>
+
+#include "qpyqml_api.h"
+#include "qpyqmlobject.h"
+
+#include "sipAPIQtQml.h"
+
+
+class QQmlPropertyValueInterceptor;
+
+
+// Forward declarations.
+static QQmlPrivate::RegisterType *init_type(PyTypeObject *py_type, bool ctor,
+        int revision, PyTypeObject *attached);
+static void complete_init(QQmlPrivate::RegisterType *rt, int revision);
+static int register_type(QQmlPrivate::RegisterType *rt);
+
+
+// The number of types that can be registered.
+const int NrOfTypes = 60;
+
+
+// The registration data for the proxy types.
+static QQmlPrivate::RegisterType proxy_types[NrOfTypes];
+
+
+// Register a Python type.
+int qpyqml_register_type(PyTypeObject *py_type, PyTypeObject *attached)
+{
+    // Initialise the registration data structure.
+    QQmlPrivate::RegisterType *rt = init_type(py_type, false, -1, attached);
+
+    if (!rt)
+        return -1;
+
+    return register_type(rt);
+}
+
+
+// Register a library Python type.
+int qpyqml_register_library_type(PyTypeObject *py_type, const char *uri,
+        int major, int minor, const char *qml_name, int revision,
+        PyTypeObject *attached)
+{
+    // Initialise the registration data structure.
+    QQmlPrivate::RegisterType *rt = init_type(py_type, true, revision,
+            attached);
+
+    if (!rt)
+        return -1;
+
+    rt->uri = uri;
+    rt->versionMajor = major;
+    rt->versionMinor = minor;
+    rt->elementName = qml_name;
+
+    return register_type(rt);
+}
+
+
+// Register an uncreatable library Python type.
+int qpyqml_register_uncreatable_type(PyTypeObject *py_type, const char *uri,
+        int major, int minor, const char *qml_name, const QString &reason,
+        int revision)
+{
+    // Initialise the registration data structure.
+    QQmlPrivate::RegisterType *rt = init_type(py_type, false, revision, 0);
+
+    if (!rt)
+        return -1;
+
+    rt->noCreationReason = reason;
+    rt->uri = uri;
+    rt->versionMajor = major;
+    rt->versionMinor = minor;
+    rt->elementName = qml_name;
+
+    return register_type(rt);
+}
+
+
+// Register the proxy type with QML.
+static int register_type(QQmlPrivate::RegisterType *rt)
+{
+    int type_id = QQmlPrivate::qmlregister(QQmlPrivate::TypeRegistration, rt);
+
+    if (type_id < 0)
+    {
+        PyErr_SetString(PyExc_RuntimeError,
+                "unable to register type with QML");
+        return -1;
+    }
+
+    return type_id;
+}
+
+
+#define QPYQML_TYPE_INIT(n) \
+    case n##U: \
+        QPyQmlObject##n::staticMetaObject = *mo; \
+        QPyQmlObject##n::attachedPyType = attached; \
+        rt->typeId = qRegisterNormalizedMetaType<QPyQmlObject##n *>(ptr_name); \
+        rt->listId = qRegisterNormalizedMetaType<QQmlListProperty<QPyQmlObject##n> >(list_name); \
+        rt->objectSize = ctor ? sizeof(QPyQmlObject##n) : 0; \
+        if (ctor) rt->create = QQmlPrivate::createInto<QPyQmlObject##n>; else rt->create = 0; \
+        rt->metaObject = mo; \
+        rt->attachedPropertiesFunction = attached_mo ? QPyQmlObject##n::attachedProperties : 0; \
+        rt->attachedPropertiesMetaObject = attached_mo; \
+        rt->parserStatusCast = is_parser_status ? QQmlPrivate::StaticCastSelector<QPyQmlObject##n,QQmlParserStatus>::cast() : -1; \
+        rt->valueSourceCast = is_value_source ? QQmlPrivate::StaticCastSelector<QPyQmlObject##n,QQmlPropertyValueSource>::cast() : -1; \
+        rt->valueInterceptorCast = QQmlPrivate::StaticCastSelector<QPyQmlObject##n,QQmlPropertyValueInterceptor>::cast(); \
+        break
+
+
+// This is needed for GCC v4.6 and earlier.
+#define QPYQML_TYPE_IMPL(n) \
+    template void QQmlPrivate::createInto<QPyQmlObject##n>(void *)
+
+QPYQML_TYPE_IMPL(0);
+QPYQML_TYPE_IMPL(1);
+QPYQML_TYPE_IMPL(2);
+QPYQML_TYPE_IMPL(3);
+QPYQML_TYPE_IMPL(4);
+QPYQML_TYPE_IMPL(5);
+QPYQML_TYPE_IMPL(6);
+QPYQML_TYPE_IMPL(7);
+QPYQML_TYPE_IMPL(8);
+QPYQML_TYPE_IMPL(9);
+QPYQML_TYPE_IMPL(10);
+QPYQML_TYPE_IMPL(11);
+QPYQML_TYPE_IMPL(12);
+QPYQML_TYPE_IMPL(13);
+QPYQML_TYPE_IMPL(14);
+QPYQML_TYPE_IMPL(15);
+QPYQML_TYPE_IMPL(16);
+QPYQML_TYPE_IMPL(17);
+QPYQML_TYPE_IMPL(18);
+QPYQML_TYPE_IMPL(19);
+QPYQML_TYPE_IMPL(20);
+QPYQML_TYPE_IMPL(21);
+QPYQML_TYPE_IMPL(22);
+QPYQML_TYPE_IMPL(23);
+QPYQML_TYPE_IMPL(24);
+QPYQML_TYPE_IMPL(25);
+QPYQML_TYPE_IMPL(26);
+QPYQML_TYPE_IMPL(27);
+QPYQML_TYPE_IMPL(28);
+QPYQML_TYPE_IMPL(29);
+QPYQML_TYPE_IMPL(30);
+QPYQML_TYPE_IMPL(31);
+QPYQML_TYPE_IMPL(32);
+QPYQML_TYPE_IMPL(33);
+QPYQML_TYPE_IMPL(34);
+QPYQML_TYPE_IMPL(35);
+QPYQML_TYPE_IMPL(36);
+QPYQML_TYPE_IMPL(37);
+QPYQML_TYPE_IMPL(38);
+QPYQML_TYPE_IMPL(39);
+QPYQML_TYPE_IMPL(40);
+QPYQML_TYPE_IMPL(41);
+QPYQML_TYPE_IMPL(42);
+QPYQML_TYPE_IMPL(43);
+QPYQML_TYPE_IMPL(44);
+QPYQML_TYPE_IMPL(45);
+QPYQML_TYPE_IMPL(46);
+QPYQML_TYPE_IMPL(47);
+QPYQML_TYPE_IMPL(48);
+QPYQML_TYPE_IMPL(49);
+QPYQML_TYPE_IMPL(50);
+QPYQML_TYPE_IMPL(51);
+QPYQML_TYPE_IMPL(52);
+QPYQML_TYPE_IMPL(53);
+QPYQML_TYPE_IMPL(54);
+QPYQML_TYPE_IMPL(55);
+QPYQML_TYPE_IMPL(56);
+QPYQML_TYPE_IMPL(57);
+QPYQML_TYPE_IMPL(58);
+QPYQML_TYPE_IMPL(59);
+
+
+// Return a pointer to the initialised registration structure for a type.
+static QQmlPrivate::RegisterType *init_type(PyTypeObject *py_type, bool ctor,
+        int revision, PyTypeObject *attached)
+{
+    PyTypeObject *qobject_type = sipTypeAsPyTypeObject(sipType_QObject);
+
+    // Check the type is derived from QObject and get its meta-object.
+    if (!PyType_IsSubtype(py_type, qobject_type))
+    {
+        PyErr_SetString(PyExc_TypeError,
+                "type being registered must be a sub-type of QObject");
+        return 0;
+    }
+
+    const QMetaObject *mo = pyqt5_qtqml_get_qmetaobject(py_type);
+
+    // See if the type is a parser status.
+    bool is_parser_status = PyType_IsSubtype(py_type,
+            sipTypeAsPyTypeObject(sipType_QQmlParserStatus));
+
+    // See if the type is a property value source.
+    bool is_value_source = PyType_IsSubtype(py_type,
+            sipTypeAsPyTypeObject(sipType_QQmlPropertyValueSource));
+
+    // Check any attached type is derived from QObject and get its meta-object.
+    const QMetaObject *attached_mo;
+
+    if (attached)
+    {
+        if (!PyType_IsSubtype(attached, qobject_type))
+        {
+            PyErr_SetString(PyExc_TypeError,
+                    "attached properties type must be a sub-type of QObject");
+            return 0;
+        }
+
+        attached_mo = pyqt5_qtqml_get_qmetaobject(attached);
+
+        Py_INCREF((PyObject *)attached);
+    }
+    else
+    {
+        attached_mo = 0;
+    }
+
+    QByteArray ptr_name(py_type->tp_name);
+    ptr_name.append('*');
+
+    QByteArray list_name(py_type->tp_name);
+    list_name.prepend("QQmlListProperty<");
+    list_name.append('>');
+
+    QQmlPrivate::RegisterType *rt;
+
+    // See if we have the QQuickItem registation helper from the QtQuick
+    // module.  Check each time because it could be imported at any point.
+
+    typedef sipErrorState (*QQuickItemRegisterFn)(PyTypeObject *, const QMetaObject *, const QByteArray &, const QByteArray &, QQmlPrivate::RegisterType **);
+
+    static QQuickItemRegisterFn qquickitem_register = 0;
+
+    if (!qquickitem_register)
+        qquickitem_register = (QQuickItemRegisterFn)sipImportSymbol(
+                "qtquick_register_item");
+
+    if (qquickitem_register)
+    {
+        sipErrorState estate = qquickitem_register(py_type, mo, ptr_name, list_name, &rt);
+
+        if (estate == sipErrorFail)
+            return 0;
+
+        if (estate == sipErrorNone)
+        {
+            complete_init(rt, revision);
+            return rt;
+        }
+    }
+
+    // Get the type's number and check there aren't too many.
+    int type_nr = QPyQmlObjectProxy::addType(py_type);
+
+    if (type_nr >= NrOfTypes)
+    {
+        PyErr_Format(PyExc_TypeError,
+                "a maximum of %d types may be registered with QML", NrOfTypes);
+        return 0;
+    }
+
+    rt = &proxy_types[type_nr];
+
+    // Initialise those members that depend on the C++ type.
+    switch (type_nr)
+    {
+        QPYQML_TYPE_INIT(0);
+        QPYQML_TYPE_INIT(1);
+        QPYQML_TYPE_INIT(2);
+        QPYQML_TYPE_INIT(3);
+        QPYQML_TYPE_INIT(4);
+        QPYQML_TYPE_INIT(5);
+        QPYQML_TYPE_INIT(6);
+        QPYQML_TYPE_INIT(7);
+        QPYQML_TYPE_INIT(8);
+        QPYQML_TYPE_INIT(9);
+        QPYQML_TYPE_INIT(10);
+        QPYQML_TYPE_INIT(11);
+        QPYQML_TYPE_INIT(12);
+        QPYQML_TYPE_INIT(13);
+        QPYQML_TYPE_INIT(14);
+        QPYQML_TYPE_INIT(15);
+        QPYQML_TYPE_INIT(16);
+        QPYQML_TYPE_INIT(17);
+        QPYQML_TYPE_INIT(18);
+        QPYQML_TYPE_INIT(19);
+        QPYQML_TYPE_INIT(20);
+        QPYQML_TYPE_INIT(21);
+        QPYQML_TYPE_INIT(22);
+        QPYQML_TYPE_INIT(23);
+        QPYQML_TYPE_INIT(24);
+        QPYQML_TYPE_INIT(25);
+        QPYQML_TYPE_INIT(26);
+        QPYQML_TYPE_INIT(27);
+        QPYQML_TYPE_INIT(28);
+        QPYQML_TYPE_INIT(29);
+        QPYQML_TYPE_INIT(30);
+        QPYQML_TYPE_INIT(31);
+        QPYQML_TYPE_INIT(32);
+        QPYQML_TYPE_INIT(33);
+        QPYQML_TYPE_INIT(34);
+        QPYQML_TYPE_INIT(35);
+        QPYQML_TYPE_INIT(36);
+        QPYQML_TYPE_INIT(37);
+        QPYQML_TYPE_INIT(38);
+        QPYQML_TYPE_INIT(39);
+        QPYQML_TYPE_INIT(40);
+        QPYQML_TYPE_INIT(41);
+        QPYQML_TYPE_INIT(42);
+        QPYQML_TYPE_INIT(43);
+        QPYQML_TYPE_INIT(44);
+        QPYQML_TYPE_INIT(45);
+        QPYQML_TYPE_INIT(46);
+        QPYQML_TYPE_INIT(47);
+        QPYQML_TYPE_INIT(48);
+        QPYQML_TYPE_INIT(49);
+        QPYQML_TYPE_INIT(50);
+        QPYQML_TYPE_INIT(51);
+        QPYQML_TYPE_INIT(52);
+        QPYQML_TYPE_INIT(53);
+        QPYQML_TYPE_INIT(54);
+        QPYQML_TYPE_INIT(55);
+        QPYQML_TYPE_INIT(56);
+        QPYQML_TYPE_INIT(57);
+        QPYQML_TYPE_INIT(58);
+        QPYQML_TYPE_INIT(59);
+    }
+
+    complete_init(rt, revision);
+
+    return rt;
+}
+
+
+// Complete the initialisation of a type registration structure.
+static void complete_init(QQmlPrivate::RegisterType *rt, int revision)
+{
+    if (revision < 0)
+    {
+        rt->version = 0;
+        rt->revision = 0;
+    }
+    else
+    {
+        rt->version = 1;
+        rt->revision = revision;
+    }
+
+    rt->uri = 0;
+    rt->versionMajor = 0;
+    rt->versionMinor = 0;
+    rt->elementName = 0;
+    rt->extensionObjectCreate = 0;
+    rt->extensionMetaObject = 0;
+    rt->customParser = 0;
+}
+
+
+// Return the proxy that created an object.  This is called with the GIL.
+QObject *qpyqml_find_proxy_for(QObject *proxied)
+{
+    QSetIterator<QObject *> it(QPyQmlObjectProxy::proxies);
+
+    while (it.hasNext())
+    {
+        QPyQmlObjectProxy *proxy = static_cast<QPyQmlObjectProxy *>(it.next());
+
+        if (proxy->proxied.data() == proxied)
+            return proxy;
+    }
+
+    PyErr_Format(PyExc_TypeError,
+            "QObject instance at %p was not created from QML", proxied);
+
+    return 0;
+}
diff --git a/qpy/QtQml/qpyqmllistproperty.cpp b/qpy/QtQml/qpyqmllistproperty.cpp
new file mode 100644
index 0000000..c3c0973
--- /dev/null
+++ b/qpy/QtQml/qpyqmllistproperty.cpp
@@ -0,0 +1,395 @@
+// This is the implementation of the QQmlListProperty class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QObject>
+#include <QQmlListProperty>
+
+#include "qpyqmllistproperty.h"
+#include "qpyqml_listdata.h"
+
+#include "sipAPIQtQml.h"
+
+
+// Forward declarations.
+extern "C" {
+static PyObject *QQmlListProperty_call(PyObject *, PyObject *args,
+        PyObject *kwds);
+}
+
+static void list_append(QQmlListProperty<QObject> *p, QObject *el);
+static QObject *list_at(QQmlListProperty<QObject> *p, int idx);
+static void list_clear(QQmlListProperty<QObject> *p);
+static int list_count(QQmlListProperty<QObject> *p);
+static void bad_result(PyObject *py_res, const char *context);
+
+
+// The type's doc-string.
+PyDoc_STRVAR(QQmlListProperty_doc,
+"QQmlListProperty(type, object, list)\n"
+"QQmlListProperty(type, object, append=None, count=None, at=None, clear=None)");
+
+
+// This implements the QQmlListProperty Python type.  It is a sub-type of the
+// standard string type that is callable.
+PyTypeObject qpyqml_QQmlListProperty_Type = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    SIP_TPNAME_CAST("PyQt5.QtQml.QQmlListProperty"),
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    QQmlListProperty_call,
+    0,
+    0,
+    0,
+    0,
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|
+#if PY_MAJOR_VERSION >= 3
+    Py_TPFLAGS_UNICODE_SUBCLASS,
+#else
+    Py_TPFLAGS_STRING_SUBCLASS,
+#endif
+    QQmlListProperty_doc,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+#if PY_VERSION_HEX >= 0x03040000
+    0,
+#endif
+};
+
+
+// The QQmlListProperty init function.
+static PyObject *QQmlListProperty_call(PyObject *, PyObject *args,
+        PyObject *kwds)
+{
+    PyObject *py_type, *py_obj, *py_list = 0, *py_append = 0, *py_count = 0,
+            *py_at = 0, *py_clear = 0;
+
+    static const char *kwlist[] = {"type", "object", "list", "append", "count",
+            "at", "clear", 0};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO|O!OOOO:QQmlListProperty",
+            const_cast<char **>(kwlist), &py_type, &py_obj, &PyList_Type,
+            &py_list, &py_append, &py_count, &py_at, &py_clear))
+        return 0;
+
+    // Check the type object.
+    if (!PyObject_TypeCheck(py_type, &PyType_Type))
+    {
+        PyErr_Format(PyExc_TypeError,
+                "type argument must be of type 'type', not '%s'",
+                Py_TYPE(py_type)->tp_name);
+        return 0;
+    }
+
+    // Get the C++ QObject.
+    int iserr = 0;
+    QObject *obj = reinterpret_cast<QObject *>(sipForceConvertToType(py_obj,
+            sipType_QObject, 0, SIP_NOT_NONE|SIP_NO_CONVERTORS, 0, &iserr));
+
+    if (iserr)
+    {
+        PyErr_Format(PyExc_TypeError,
+                "object argument must be of type 'QObject', not '%s'",
+                Py_TYPE(py_obj)->tp_name);
+        return 0;
+    }
+
+    // If we have a list then check we have no callables.
+    if (py_list && (py_append || py_count || py_at || py_clear))
+    {
+        PyErr_SetString(PyExc_TypeError,
+                "cannot specify a list and a list function");
+        return 0;
+    }
+
+    // Get a list wrapper with the C++ QObject as its parent.
+    ListData *list_data = new ListData(py_type, py_obj, py_list, py_append,
+            py_count, py_at, py_clear, obj);
+
+    // Create the C++ QDeclarativeListProperty<QObject> with the list data as
+    // the data.  Note that we will create a new one each time the property
+    // getter is called - however, under normal usage, this should only be
+    // once.  Also note that the callables will not be reached by the garbage
+    // collector.
+    QQmlListProperty<QObject> *prop = new QQmlListProperty<QObject>(obj,
+            list_data, ((py_list || py_append) ? list_append : 0),
+            ((py_list || py_count) ? list_count : 0),
+            ((py_list || py_at) ? list_at : 0),
+            ((py_list || py_clear) ? list_clear : 0));
+
+    // Convert it to a Python object.
+    static const sipTypeDef *mapped_type = 0;
+
+    if (!mapped_type)
+        mapped_type = sipFindType("QQmlListProperty<QObject>");
+
+    Q_ASSERT(mapped_type);
+
+    // Make sure ownership is with Python.
+    PyObject *prop_obj = sipConvertFromNewType(prop, mapped_type, py_obj);
+
+    if (!prop_obj)
+    {
+        delete prop;
+        return 0;
+    }
+
+    return prop_obj;
+}
+
+
+// Append to the list.
+static void list_append(QQmlListProperty<QObject> *p, QObject *el)
+{
+    SIP_BLOCK_THREADS
+
+    ListData *ldata = reinterpret_cast<ListData *>(p->data);
+    bool ok = false;
+
+    // Convert the element to a Python object and check the type.
+    PyObject *py_el = sipConvertFromType(el, sipType_QObject, 0);
+
+    if (py_el)
+    {
+        if (!PyObject_TypeCheck(py_el, (PyTypeObject *)ldata->py_type))
+        {
+            PyErr_Format(PyExc_TypeError,
+                "list element must be of type '%s', not '%s'",
+                    ((PyTypeObject *)ldata->py_type)->tp_name,
+                    Py_TYPE(py_el)->tp_name);
+        }
+        else if (ldata->py_list)
+        {
+            if (PyList_Append(ldata->py_list, py_el) == 0)
+                ok = true;
+        }
+        else
+        {
+            // Call the function.
+            PyObject *py_res = PyObject_CallFunctionObjArgs(ldata->py_append,
+                    ldata->py_obj, py_el, NULL);
+
+            if (py_res)
+            {
+                if (py_res == Py_None)
+                    ok = true;
+                else
+                    bad_result(py_res, "append");
+
+                Py_DECREF(py_res);
+            }
+        }
+
+        Py_DECREF(py_el);
+    }
+
+    if (!ok)
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+}
+
+
+// Get the length of the list.
+static int list_count(QQmlListProperty<QObject> *p)
+{
+    int res = -1;
+
+    SIP_BLOCK_THREADS
+
+    ListData *ldata = reinterpret_cast<ListData *>(p->data);
+
+    if (ldata->py_list)
+    {
+        res = PyList_Size(ldata->py_list);
+    }
+    else
+    {
+        // Call the function.
+        PyObject *py_res = PyObject_CallFunctionObjArgs(ldata->py_count,
+                ldata->py_obj, NULL);
+
+        if (py_res)
+        {
+            PyErr_Clear();
+
+            res = SIPLong_AsLong(py_res);
+
+            if (PyErr_Occurred())
+            {
+                bad_result(py_res, "count");
+
+                res = -1;
+            }
+
+            Py_DECREF(py_res);
+        }
+    }
+
+    if (res < 0)
+    {
+        PyErr_Print();
+        res = 0;
+    }
+
+    SIP_UNBLOCK_THREADS
+
+    return res;
+}
+
+
+// Get an item from the list.
+static QObject *list_at(QQmlListProperty<QObject> *p, int idx)
+{
+    QObject *qobj = 0;
+
+    SIP_BLOCK_THREADS
+
+    ListData *ldata = reinterpret_cast<ListData *>(p->data);
+
+    if (ldata->py_list)
+    {
+        PyObject *py_el = PyList_GetItem(ldata->py_list, idx);
+
+        if (py_el)
+        {
+            int iserr = 0;
+            qobj = reinterpret_cast<QObject *>(sipForceConvertToType(py_el,
+                    sipType_QObject, 0, SIP_NO_CONVERTORS, 0, &iserr));
+        }
+    }
+    else
+    {
+        // Call the function.
+        PyObject *py_res = PyObject_CallFunction(ldata->py_at,
+                const_cast<char *>("Ni"), ldata->py_obj, idx);
+
+        if (py_res)
+        {
+            int iserr = 0;
+            qobj = reinterpret_cast<QObject *>(sipForceConvertToType(py_res,
+                    sipType_QObject, 0, SIP_NO_CONVERTORS, 0, &iserr));
+
+            if (iserr)
+                bad_result(py_res, "at");
+
+            Py_DECREF(py_res);
+        }
+    }
+
+    if (!qobj)
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+
+    return qobj;
+}
+
+
+// Clear the list.
+static void list_clear(QQmlListProperty<QObject> *p)
+{
+    SIP_BLOCK_THREADS
+
+    ListData *ldata = reinterpret_cast<ListData *>(p->data);
+    bool ok = false;
+
+    if (ldata->py_list)
+    {
+        if (PyList_SetSlice(ldata->py_list, 0, PyList_Size(ldata->py_list), NULL) == 0)
+            ok = true;
+    }
+    else
+    {
+        // Call the function.
+        PyObject *py_res = PyObject_CallFunctionObjArgs(ldata->py_clear,
+                ldata->py_obj, NULL);
+
+        if (py_res)
+        {
+            if (py_res == Py_None)
+                ok = true;
+            else
+                bad_result(py_res, "clear");
+
+            Py_DECREF(py_res);
+        }
+    }
+
+    if (!ok)
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+}
+
+
+// Raise an exception for an unexpected result.
+static void bad_result(PyObject *py_res, const char *context)
+{
+#if PY_MAJOR_VERSION >= 3
+    PyErr_Format(PyExc_TypeError, "unexpected result from %s function: %S",
+            context, py_res);
+#else
+    PyObject *py_res_s = PyObject_Str(py_res);
+
+    if (py_res_s != NULL)
+    {
+        PyErr_Format(PyExc_TypeError, "unexpected result from %s function: %s",
+                context, PyString_AsString(py_res_s));
+
+        Py_DECREF(py_res_s);
+    }
+#endif
+}
diff --git a/qpy/QtQml/qpyqmllistproperty.h b/qpy/QtQml/qpyqmllistproperty.h
new file mode 100644
index 0000000..8dc2db2
--- /dev/null
+++ b/qpy/QtQml/qpyqmllistproperty.h
@@ -0,0 +1,36 @@
+// This is the definition of the QQmlListProperty class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQMLLISTPROPERTY_H
+#define _QPYQMLLISTPROPERTY_H
+
+
+#include <Python.h>
+
+
+extern "C" {
+
+// This implements the QQmlListProperty type.
+extern PyTypeObject qpyqml_QQmlListProperty_Type;
+
+}
+
+
+#endif
diff --git a/qpy/QtQml/qpyqmlobject.cpp b/qpy/QtQml/qpyqmlobject.cpp
new file mode 100644
index 0000000..db49ac1
--- /dev/null
+++ b/qpy/QtQml/qpyqmlobject.cpp
@@ -0,0 +1,446 @@
+// This is the implementation of the QPyQmlObject classes.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include "qpyqmlobject.h"
+
+#include "sipAPIQtQml.h"
+
+
+// Forward declarations.
+static void bad_result(PyObject *res, const char *context);
+
+// The list of registered Python types.
+QList<PyTypeObject *> QPyQmlObjectProxy::pyqt_types;
+
+// The set of proxies in existence.
+QSet<QObject *> QPyQmlObjectProxy::proxies;
+
+
+// The ctor.
+QPyQmlObjectProxy::QPyQmlObjectProxy(QObject *parent) : QObject(parent),
+        py_proxied(0)
+{
+    proxies.insert(this);
+}
+
+
+// The dtor.
+QPyQmlObjectProxy::~QPyQmlObjectProxy()
+{
+    proxies.remove(this);
+
+    SIP_BLOCK_THREADS
+    Py_XDECREF(py_proxied);
+    SIP_UNBLOCK_THREADS
+
+    if (!proxied.isNull())
+        delete proxied.data();
+}
+
+
+// Called when QML has connected to a signal of the proxied object.
+void QPyQmlObjectProxy::connectNotify(const QMetaMethod &sig)
+{
+    QByteArray signal_sig = signalSignature(sig);
+
+    // The signal has actually been connected to the proxy, so do the same from
+    // the proxied object to the proxy.
+    QObject::connect(proxied, signal_sig.constData(), this,
+            signal_sig.constData());
+}
+
+
+// Called when QML has disconnected to a signal of the proxied object.
+void QPyQmlObjectProxy::disconnectNotify(const QMetaMethod &sig)
+{
+    QByteArray signal_sig = signalSignature(sig);
+
+    // The signal has actually been disconnected from the proxy, so do the same
+    // from the proxied object to the proxy.
+    QObject::disconnect(proxied, signal_sig.constData(), this,
+            signal_sig.constData());
+}
+
+
+// Return what SIGNAL() would return for a method.
+QByteArray QPyQmlObjectProxy::signalSignature(const QMetaMethod &signal)
+{
+    QByteArray signal_sig(signal.methodSignature());
+    signal_sig.prepend('2');
+
+    return signal_sig;
+}
+
+
+// Delegate to the real object.
+const QMetaObject *QPyQmlObjectProxy::metaObject() const
+{
+    return !proxied.isNull() ? proxied->metaObject() : QObject::metaObject();
+}
+
+
+// Delegate to the real object.
+void *QPyQmlObjectProxy::qt_metacast(const char *_clname)
+{
+    return !proxied.isNull() ? proxied->qt_metacast(_clname) : 0;
+}
+
+
+// Delegate to the real object.
+int QPyQmlObjectProxy::qt_metacall(QMetaObject::Call call, int idx, void **args)
+{
+    if (idx < 0)
+        return idx;
+
+    // If the sender is the proxied object then it has emitted a signal.
+    if (call == QMetaObject::InvokeMetaMethod && sender() == proxied)
+    {
+        const QMetaObject *proxied_mo = proxied->metaObject();
+
+        // Relay the signal to QML.
+        QMetaObject::activate(this, proxied_mo,
+                idx - proxied_mo->methodOffset(), args);
+
+        return idx - (proxied_mo->methodCount() - proxied_mo->methodOffset());
+    }
+
+    return !proxied.isNull() ? proxied->qt_metacall(call, idx, args) : QObject::qt_metacall(call, idx, args);
+}
+
+
+// Add a new Python type and return its number.
+int QPyQmlObjectProxy::addType(PyTypeObject *type)
+{
+    pyqt_types.append(type);
+
+    return pyqt_types.size() - 1;
+}
+
+
+// Create the Python instance.
+void QPyQmlObjectProxy::createPyObject(QObject *parent)
+{
+    SIP_BLOCK_THREADS
+
+    py_proxied = sipCallMethod(NULL, (PyObject *)pyqt_types.at(typeNr()), "D",
+            parent, sipType_QObject, NULL);
+
+    if (py_proxied)
+        proxied = reinterpret_cast<QObject *>(
+                sipGetAddress((sipSimpleWrapper *)py_proxied));
+    else
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+}
+
+
+// Resolve any proxy.
+void *QPyQmlObjectProxy::resolveProxy(void *proxy)
+{
+    QObject *qobj = reinterpret_cast<QObject *>(proxy);
+
+    // We have to search for proxy instances because we have subverted the
+    // usual sub-class detection mechanism.
+    if (proxies.contains(qobj))
+        return static_cast<QPyQmlObjectProxy *>(qobj)->proxied.data();
+
+    // It's not a proxy.
+    return proxy;
+}
+
+
+// Create an instance of the attached properties.
+QObject *QPyQmlObjectProxy::createAttachedProperties(PyTypeObject *py_type,
+        QObject *parent)
+{
+    QObject *qobj = 0;
+
+    SIP_BLOCK_THREADS
+
+    PyObject *obj = sipCallMethod(NULL, (PyObject *)py_type, "D", parent,
+            sipType_QObject, NULL);
+
+    if (obj)
+    {
+        qobj = reinterpret_cast<QObject *>(
+                sipGetAddress((sipSimpleWrapper *)obj));
+
+        // It should always have a parent, but just in case...
+        if (parent)
+            Py_DECREF(obj);
+    }
+    else
+    {
+        PyErr_Print();
+    }
+
+    SIP_UNBLOCK_THREADS
+
+    return qobj;
+}
+
+
+// Invoked when a class parse begins.
+void QPyQmlObjectProxy::pyClassBegin()
+{
+    if (!py_proxied)
+        return;
+
+    SIP_BLOCK_THREADS
+
+    bool ok = false;
+
+    static PyObject *method_name = 0;
+
+    if (!method_name)
+#if PY_MAJOR_VERSION >= 3
+        method_name = PyUnicode_FromString("classBegin");
+#else
+        method_name = PyString_FromString("classBegin");
+#endif
+
+    if (method_name)
+    {
+        PyObject *res = PyObject_CallMethodObjArgs(py_proxied, method_name,
+                NULL);
+
+        if (res)
+        {
+            if (res == Py_None)
+                ok = true;
+            else
+                bad_result(res, "classBegin()");
+
+            Py_DECREF(res);
+        }
+    }
+
+    if (!ok)
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+}
+
+
+// Invoked when a component parse completes.
+void QPyQmlObjectProxy::pyComponentComplete()
+{
+    if (!py_proxied)
+        return;
+
+    SIP_BLOCK_THREADS
+
+    bool ok = false;
+
+    static PyObject *method_name = 0;
+
+    if (!method_name)
+#if PY_MAJOR_VERSION >= 3
+        method_name = PyUnicode_FromString("componentComplete");
+#else
+        method_name = PyString_FromString("componentComplete");
+#endif
+
+    if (method_name)
+    {
+        PyObject *res = PyObject_CallMethodObjArgs(py_proxied, method_name,
+                NULL);
+
+        if (res)
+        {
+            if (res == Py_None)
+                ok = true;
+            else
+                bad_result(res, "componentComplete()");
+
+            Py_DECREF(res);
+        }
+    }
+
+    if (!ok)
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+}
+
+
+// Invoked to set the target property of a property value source.
+void QPyQmlObjectProxy::pySetTarget(const QQmlProperty &target)
+{
+    if (!py_proxied)
+        return;
+
+    SIP_BLOCK_THREADS
+
+    bool ok = false;
+
+    static PyObject *method_name = 0;
+
+    if (!method_name)
+#if PY_MAJOR_VERSION >= 3
+        method_name = PyUnicode_FromString("setTarget");
+#else
+        method_name = PyString_FromString("setTarget");
+#endif
+
+    if (method_name)
+    {
+        QQmlProperty *target_heap = new QQmlProperty(target);
+
+        PyObject *py_target = sipConvertFromNewType(target_heap,
+                sipType_QQmlProperty, 0);
+
+        if (!py_target)
+        {
+            delete target_heap;
+        }
+        else
+        {
+            PyObject *res = PyObject_CallMethodObjArgs(py_proxied, method_name,
+                    py_target, NULL);
+
+            Py_DECREF(py_target);
+
+            if (res)
+            {
+                if (res == Py_None)
+                    ok = true;
+                else
+                    bad_result(res, "setTarget()");
+
+                Py_DECREF(res);
+            }
+        }
+    }
+
+    if (!ok)
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+}
+
+
+// Raise an exception for an unexpected result.
+static void bad_result(PyObject *res, const char *context)
+{
+#if PY_MAJOR_VERSION >= 3
+    PyErr_Format(PyExc_TypeError, "unexpected result from %s: %S", context,
+            res);
+#else
+    PyObject *res_s = PyObject_Str(res);
+
+    if (res_s != NULL)
+    {
+        PyErr_Format(PyExc_TypeError, "unexpected result from %s: %s", context,
+                PyString_AsString(res_s));
+
+        Py_DECREF(res_s);
+    }
+#endif
+}
+
+
+// The proxy type implementations.
+#define QPYQML_PROXY_IMPL(n) \
+QPyQmlObject##n::QPyQmlObject##n(QObject *parent) : QPyQmlObjectProxy(parent) \
+{ \
+    createPyObject(parent); \
+} \
+QObject *QPyQmlObject##n::attachedProperties(QObject *parent) \
+{ \
+    return createAttachedProperties(attachedPyType, parent); \
+} \
+void QPyQmlObject##n::classBegin() \
+{ \
+    pyClassBegin(); \
+} \
+void QPyQmlObject##n::componentComplete() \
+{ \
+    pyComponentComplete(); \
+} \
+void QPyQmlObject##n::setTarget(const QQmlProperty &target) \
+{ \
+    pySetTarget(target); \
+} \
+QMetaObject QPyQmlObject##n::staticMetaObject; \
+PyTypeObject *QPyQmlObject##n::attachedPyType
+
+
+QPYQML_PROXY_IMPL(0);
+QPYQML_PROXY_IMPL(1);
+QPYQML_PROXY_IMPL(2);
+QPYQML_PROXY_IMPL(3);
+QPYQML_PROXY_IMPL(4);
+QPYQML_PROXY_IMPL(5);
+QPYQML_PROXY_IMPL(6);
+QPYQML_PROXY_IMPL(7);
+QPYQML_PROXY_IMPL(8);
+QPYQML_PROXY_IMPL(9);
+QPYQML_PROXY_IMPL(10);
+QPYQML_PROXY_IMPL(11);
+QPYQML_PROXY_IMPL(12);
+QPYQML_PROXY_IMPL(13);
+QPYQML_PROXY_IMPL(14);
+QPYQML_PROXY_IMPL(15);
+QPYQML_PROXY_IMPL(16);
+QPYQML_PROXY_IMPL(17);
+QPYQML_PROXY_IMPL(18);
+QPYQML_PROXY_IMPL(19);
+QPYQML_PROXY_IMPL(20);
+QPYQML_PROXY_IMPL(21);
+QPYQML_PROXY_IMPL(22);
+QPYQML_PROXY_IMPL(23);
+QPYQML_PROXY_IMPL(24);
+QPYQML_PROXY_IMPL(25);
+QPYQML_PROXY_IMPL(26);
+QPYQML_PROXY_IMPL(27);
+QPYQML_PROXY_IMPL(28);
+QPYQML_PROXY_IMPL(29);
+QPYQML_PROXY_IMPL(30);
+QPYQML_PROXY_IMPL(31);
+QPYQML_PROXY_IMPL(32);
+QPYQML_PROXY_IMPL(33);
+QPYQML_PROXY_IMPL(34);
+QPYQML_PROXY_IMPL(35);
+QPYQML_PROXY_IMPL(36);
+QPYQML_PROXY_IMPL(37);
+QPYQML_PROXY_IMPL(38);
+QPYQML_PROXY_IMPL(39);
+QPYQML_PROXY_IMPL(40);
+QPYQML_PROXY_IMPL(41);
+QPYQML_PROXY_IMPL(42);
+QPYQML_PROXY_IMPL(43);
+QPYQML_PROXY_IMPL(44);
+QPYQML_PROXY_IMPL(45);
+QPYQML_PROXY_IMPL(46);
+QPYQML_PROXY_IMPL(47);
+QPYQML_PROXY_IMPL(48);
+QPYQML_PROXY_IMPL(49);
+QPYQML_PROXY_IMPL(50);
+QPYQML_PROXY_IMPL(51);
+QPYQML_PROXY_IMPL(52);
+QPYQML_PROXY_IMPL(53);
+QPYQML_PROXY_IMPL(54);
+QPYQML_PROXY_IMPL(55);
+QPYQML_PROXY_IMPL(56);
+QPYQML_PROXY_IMPL(57);
+QPYQML_PROXY_IMPL(58);
+QPYQML_PROXY_IMPL(59);
diff --git a/qpy/QtQml/qpyqmlobject.h b/qpy/QtQml/qpyqmlobject.h
new file mode 100644
index 0000000..ff2674c
--- /dev/null
+++ b/qpy/QtQml/qpyqmlobject.h
@@ -0,0 +1,164 @@
+// This is the definition of the QPyQmlObject classes.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQMLOBJECT_H
+#define _QPYQMLOBJECT_H
+
+
+#include <Python.h>
+
+#include <QList>
+#include <QObject>
+#include <QPointer>
+#include <QQmlParserStatus>
+#include <QQmlProperty>
+#include <QQmlPropertyValueSource>
+#include <QSet>
+
+
+class QPyQmlObjectProxy : public QObject
+{
+public:
+    QPyQmlObjectProxy(QObject *parent = 0);
+    virtual ~QPyQmlObjectProxy();
+
+    virtual const QMetaObject *metaObject() const;
+    virtual void *qt_metacast(const char *_clname);
+    virtual int qt_metacall(QMetaObject::Call, int, void **);
+
+    virtual int typeNr() const = 0;
+
+    static int addType(PyTypeObject *type);
+    void createPyObject(QObject *parent);
+
+    static QObject *createAttachedProperties(PyTypeObject *py_type,
+            QObject *parent);
+
+    static void *resolveProxy(void *proxy);
+
+    void pyClassBegin();
+    void pyComponentComplete();
+
+    void pySetTarget(const QQmlProperty &target);
+
+    // The set of proxies in existence.
+    static QSet<QObject *> proxies;
+
+    // A reference to the real object.
+    QPointer<QObject> proxied;
+
+protected:
+    void connectNotify(const QMetaMethod &signal);
+    void disconnectNotify(const QMetaMethod &signal);
+
+private:
+    // These can by cast to sipWrapperType and pyqtWrapperType.
+    static QList<PyTypeObject *> pyqt_types;
+
+    // The wrapped proxied object.
+    PyObject *py_proxied;
+
+    static QByteArray signalSignature(const QMetaMethod &signal);
+
+    QPyQmlObjectProxy(const QPyQmlObjectProxy &);
+};
+
+
+// The proxy type declarations.
+#define QPYQML_PROXY_DECL(n) \
+class QPyQmlObject##n : public QPyQmlObjectProxy, public QQmlParserStatus, public QQmlPropertyValueSource  \
+{ \
+public: \
+    QPyQmlObject##n(QObject *parent = 0); \
+    static QMetaObject staticMetaObject; \
+    virtual int typeNr() const {return n##U;} \
+    static PyTypeObject *attachedPyType; \
+    static QObject *attachedProperties(QObject *parent); \
+    virtual void classBegin(); \
+    virtual void componentComplete(); \
+    virtual void setTarget(const QQmlProperty &target); \
+private: \
+    QPyQmlObject##n(const QPyQmlObject##n &); \
+}
+
+
+QPYQML_PROXY_DECL(0);
+QPYQML_PROXY_DECL(1);
+QPYQML_PROXY_DECL(2);
+QPYQML_PROXY_DECL(3);
+QPYQML_PROXY_DECL(4);
+QPYQML_PROXY_DECL(5);
+QPYQML_PROXY_DECL(6);
+QPYQML_PROXY_DECL(7);
+QPYQML_PROXY_DECL(8);
+QPYQML_PROXY_DECL(9);
+QPYQML_PROXY_DECL(10);
+QPYQML_PROXY_DECL(11);
+QPYQML_PROXY_DECL(12);
+QPYQML_PROXY_DECL(13);
+QPYQML_PROXY_DECL(14);
+QPYQML_PROXY_DECL(15);
+QPYQML_PROXY_DECL(16);
+QPYQML_PROXY_DECL(17);
+QPYQML_PROXY_DECL(18);
+QPYQML_PROXY_DECL(19);
+QPYQML_PROXY_DECL(20);
+QPYQML_PROXY_DECL(21);
+QPYQML_PROXY_DECL(22);
+QPYQML_PROXY_DECL(23);
+QPYQML_PROXY_DECL(24);
+QPYQML_PROXY_DECL(25);
+QPYQML_PROXY_DECL(26);
+QPYQML_PROXY_DECL(27);
+QPYQML_PROXY_DECL(28);
+QPYQML_PROXY_DECL(29);
+QPYQML_PROXY_DECL(30);
+QPYQML_PROXY_DECL(31);
+QPYQML_PROXY_DECL(32);
+QPYQML_PROXY_DECL(33);
+QPYQML_PROXY_DECL(34);
+QPYQML_PROXY_DECL(35);
+QPYQML_PROXY_DECL(36);
+QPYQML_PROXY_DECL(37);
+QPYQML_PROXY_DECL(38);
+QPYQML_PROXY_DECL(39);
+QPYQML_PROXY_DECL(40);
+QPYQML_PROXY_DECL(41);
+QPYQML_PROXY_DECL(42);
+QPYQML_PROXY_DECL(43);
+QPYQML_PROXY_DECL(44);
+QPYQML_PROXY_DECL(45);
+QPYQML_PROXY_DECL(46);
+QPYQML_PROXY_DECL(47);
+QPYQML_PROXY_DECL(48);
+QPYQML_PROXY_DECL(49);
+QPYQML_PROXY_DECL(50);
+QPYQML_PROXY_DECL(51);
+QPYQML_PROXY_DECL(52);
+QPYQML_PROXY_DECL(53);
+QPYQML_PROXY_DECL(54);
+QPYQML_PROXY_DECL(55);
+QPYQML_PROXY_DECL(56);
+QPYQML_PROXY_DECL(57);
+QPYQML_PROXY_DECL(58);
+QPYQML_PROXY_DECL(59);
+
+
+#endif
diff --git a/qpy/QtQml/qpyqmlsingletonobject.cpp b/qpy/QtQml/qpyqmlsingletonobject.cpp
new file mode 100644
index 0000000..6a34a7c
--- /dev/null
+++ b/qpy/QtQml/qpyqmlsingletonobject.cpp
@@ -0,0 +1,110 @@
+// This is the implementation of the QPyQmlSingletonObject classes.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include "qpyqmlsingletonobject.h"
+
+#include "sipAPIQtQml.h"
+
+
+// The number of registered Python types.
+int QPyQmlSingletonObjectProxy::nr_types = 0;
+
+
+// Add a new Python type and return its number.
+int QPyQmlSingletonObjectProxy::addType()
+{
+    return nr_types++;
+}
+
+
+// Create the QObject instance.
+QObject *QPyQmlSingletonObjectProxy::createObject(QQmlEngine *engine,
+        QJSEngine *scriptEngine, PyObject *factory)
+{
+    // This should never happen.
+    if (!factory)
+        return 0;
+
+    QObject *qobject;
+
+    SIP_BLOCK_THREADS
+
+    PyObject *py_obj = sipCallMethod(NULL, factory, "DD", engine,
+            sipType_QQmlEngine, NULL, scriptEngine, sipType_QJSEngine, NULL);
+
+    if (py_obj)
+    {
+        qobject = reinterpret_cast<QObject *>(
+                sipGetAddress((sipSimpleWrapper *)py_obj));
+
+        // The engine will call the dtor and garbage collect the Python object.
+        sipTransferTo(py_obj, Py_None);
+        Py_DECREF(py_obj);
+    }
+    else
+    {
+        qobject = 0;
+        PyErr_Print();
+    }
+
+    Py_DECREF(factory);
+
+    SIP_UNBLOCK_THREADS
+
+    return qobject;
+}
+
+
+// The proxy type implementations.
+#define QPYQML_SINGLETON_PROXY_IMPL(n) \
+PyObject *QPyQmlSingletonObject##n::factory = 0; \
+QMetaObject QPyQmlSingletonObject##n::staticMetaObject
+
+
+QPYQML_SINGLETON_PROXY_IMPL(0);
+QPYQML_SINGLETON_PROXY_IMPL(1);
+QPYQML_SINGLETON_PROXY_IMPL(2);
+QPYQML_SINGLETON_PROXY_IMPL(3);
+QPYQML_SINGLETON_PROXY_IMPL(4);
+QPYQML_SINGLETON_PROXY_IMPL(5);
+QPYQML_SINGLETON_PROXY_IMPL(6);
+QPYQML_SINGLETON_PROXY_IMPL(7);
+QPYQML_SINGLETON_PROXY_IMPL(8);
+QPYQML_SINGLETON_PROXY_IMPL(9);
+QPYQML_SINGLETON_PROXY_IMPL(10);
+QPYQML_SINGLETON_PROXY_IMPL(11);
+QPYQML_SINGLETON_PROXY_IMPL(12);
+QPYQML_SINGLETON_PROXY_IMPL(13);
+QPYQML_SINGLETON_PROXY_IMPL(14);
+QPYQML_SINGLETON_PROXY_IMPL(15);
+QPYQML_SINGLETON_PROXY_IMPL(16);
+QPYQML_SINGLETON_PROXY_IMPL(17);
+QPYQML_SINGLETON_PROXY_IMPL(18);
+QPYQML_SINGLETON_PROXY_IMPL(19);
+QPYQML_SINGLETON_PROXY_IMPL(20);
+QPYQML_SINGLETON_PROXY_IMPL(21);
+QPYQML_SINGLETON_PROXY_IMPL(22);
+QPYQML_SINGLETON_PROXY_IMPL(23);
+QPYQML_SINGLETON_PROXY_IMPL(24);
+QPYQML_SINGLETON_PROXY_IMPL(25);
+QPYQML_SINGLETON_PROXY_IMPL(26);
+QPYQML_SINGLETON_PROXY_IMPL(27);
+QPYQML_SINGLETON_PROXY_IMPL(28);
+QPYQML_SINGLETON_PROXY_IMPL(29);
diff --git a/qpy/QtQml/qpyqmlsingletonobject.h b/qpy/QtQml/qpyqmlsingletonobject.h
new file mode 100644
index 0000000..3279991
--- /dev/null
+++ b/qpy/QtQml/qpyqmlsingletonobject.h
@@ -0,0 +1,100 @@
+// This is the definition of the QPyQmlSingletonObject classes.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQMLOBJECT_H
+#define _QPYQMLOBJECT_H
+
+
+#include <Python.h>
+
+#include <QObject>
+#include <QJSEngine>
+#include <QQmlEngine>
+
+
+// Note that these classes are never instantiated.  They are used to give the
+// registration structure appropriate values (although whether or not those
+// values are actually used isn't clear).
+class QPyQmlSingletonObjectProxy : public QObject
+{
+public:
+    static int addType();
+    static QObject *createObject(QQmlEngine *engine, QJSEngine *scriptEngine,
+            PyObject *factory);
+
+private:
+    // The number of registered types.
+    static int nr_types;
+
+    QPyQmlSingletonObjectProxy(const QPyQmlSingletonObjectProxy &);
+};
+
+
+// The proxy type declarations.
+#define QPYQML_SINGLETON_PROXY_DECL(n) \
+class QPyQmlSingletonObject##n : public QPyQmlSingletonObjectProxy \
+{ \
+public: \
+    static QMetaObject staticMetaObject; \
+    static PyObject *factory; \
+    static QObject *objectFactory(QQmlEngine *engine, QJSEngine *scriptEngine) \
+    { \
+        QObject *qo = createObject(engine, scriptEngine, factory); \
+        factory = 0; \
+        return qo; \
+    } \
+private: \
+    QPyQmlSingletonObject##n(const QPyQmlSingletonObject##n &); \
+}
+
+
+QPYQML_SINGLETON_PROXY_DECL(0);
+QPYQML_SINGLETON_PROXY_DECL(1);
+QPYQML_SINGLETON_PROXY_DECL(2);
+QPYQML_SINGLETON_PROXY_DECL(3);
+QPYQML_SINGLETON_PROXY_DECL(4);
+QPYQML_SINGLETON_PROXY_DECL(5);
+QPYQML_SINGLETON_PROXY_DECL(6);
+QPYQML_SINGLETON_PROXY_DECL(7);
+QPYQML_SINGLETON_PROXY_DECL(8);
+QPYQML_SINGLETON_PROXY_DECL(9);
+QPYQML_SINGLETON_PROXY_DECL(10);
+QPYQML_SINGLETON_PROXY_DECL(11);
+QPYQML_SINGLETON_PROXY_DECL(12);
+QPYQML_SINGLETON_PROXY_DECL(13);
+QPYQML_SINGLETON_PROXY_DECL(14);
+QPYQML_SINGLETON_PROXY_DECL(15);
+QPYQML_SINGLETON_PROXY_DECL(16);
+QPYQML_SINGLETON_PROXY_DECL(17);
+QPYQML_SINGLETON_PROXY_DECL(18);
+QPYQML_SINGLETON_PROXY_DECL(19);
+QPYQML_SINGLETON_PROXY_DECL(20);
+QPYQML_SINGLETON_PROXY_DECL(21);
+QPYQML_SINGLETON_PROXY_DECL(22);
+QPYQML_SINGLETON_PROXY_DECL(23);
+QPYQML_SINGLETON_PROXY_DECL(24);
+QPYQML_SINGLETON_PROXY_DECL(25);
+QPYQML_SINGLETON_PROXY_DECL(26);
+QPYQML_SINGLETON_PROXY_DECL(27);
+QPYQML_SINGLETON_PROXY_DECL(28);
+QPYQML_SINGLETON_PROXY_DECL(29);
+
+
+#endif
diff --git a/qpy/QtQuick/qpyquick_api.h b/qpy/QtQuick/qpyquick_api.h
new file mode 100644
index 0000000..b552637
--- /dev/null
+++ b/qpy/QtQuick/qpyquick_api.h
@@ -0,0 +1,29 @@
+// This defines the API provided by this library.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQUICK_API_H
+#define _QPYQUICK_API_H
+
+
+// Initialisation.
+void qpyquick_post_init();
+
+
+#endif
diff --git a/qpy/QtQuick/qpyquick_chimera_helpers.cpp b/qpy/QtQuick/qpyquick_chimera_helpers.cpp
new file mode 100644
index 0000000..a0c0d2b
--- /dev/null
+++ b/qpy/QtQuick/qpyquick_chimera_helpers.cpp
@@ -0,0 +1,157 @@
+// This is the implementation of the various Chimera helpers.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QList>
+#include <QMetaType>
+#include <QObject>
+
+#include "qpyquick_chimera_helpers.h"
+
+#include "sipAPIQtQuick.h"
+
+
+// Forward declarations.
+static int QList_QObject_metatype();
+static bool to_QList_QObject(PyObject *obj, QList<QObject *>&cpp);
+
+
+// Convert a QVariant to a Python object.
+bool qpyquick_from_qvariant_convertor(const QVariant *varp, PyObject **objp)
+{
+    // Check we handle the meta-type.
+    if (varp->userType() != QList_QObject_metatype())
+        return false;
+
+    const QList<QObject *> *cpp = reinterpret_cast<const QList<QObject *> *>(varp->data());
+
+    PyObject *obj = PyList_New(cpp->count());
+
+    if (obj)
+    {
+        for (int i = 0; i < cpp->count(); ++i)
+        {
+            PyObject *itm = sipConvertFromType(cpp->at(i), sipType_QObject, 0);
+
+            if (!itm)
+            {
+                Py_DECREF(obj);
+                obj = 0;
+                break;
+            }
+
+            PyList_SET_ITEM(obj, i, itm);
+        }
+    }
+
+    *objp = obj;
+
+    return true;
+}
+
+
+// Convert a Python object to a QVariant.
+bool qpyquick_to_qvariant_convertor(PyObject *obj, QVariant &var, bool *okp)
+{
+    int metatype = QList_QObject_metatype();
+
+    // Check the meta-type has been defined.
+    if (metatype == 0)
+        return false;
+
+    QList<QObject *> qlo;
+
+    // A failure to convert isn't an error, just the wrong type of Python
+    // object.
+    if (!to_QList_QObject(obj, qlo))
+        return false;
+
+    var = QVariant(metatype, &qlo);
+    *okp = true;
+
+    return true;
+}
+
+
+// Convert a Python object to QVariant data.
+bool qpyquick_to_qvariant_data_convertor(PyObject *obj, void *data,
+        int metatype, bool *okp)
+{
+    // Check we handle the meta-type.
+    if (metatype != QList_QObject_metatype())
+        return false;
+
+    QList<QObject *> qlo;
+
+    // A failure to convert isn't an error, just the wrong type of Python
+    // object.
+    if (!to_QList_QObject(obj, qlo))
+        return false;
+
+    *reinterpret_cast<QList<QObject *> *>(data) = qlo;
+    *okp = true;
+
+    return true;
+}
+
+
+// Get the metatype for QList<QObject *> or 0 if it hasn't been registered.
+static int QList_QObject_metatype()
+{
+    static int lo_metatype = 0;
+
+    // We look each time until we find it rather than rely on any particular
+    // behaviour from QtQuick.
+    if (lo_metatype == 0)
+        lo_metatype = QMetaType::type("QList<QObject*>");
+
+    return lo_metatype;
+}
+
+
+// Convert a Python list object to a QList<QObject*> and return true if the
+// conversion was successful.  An empty list is never converted and left to the
+// QtCore module to handle.
+static bool to_QList_QObject(PyObject *obj, QList<QObject *>&cpp)
+{
+    if (!PyList_CheckExact(obj) || PyList_GET_SIZE(obj) == 0)
+        return false;
+
+    for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(obj); ++i)
+    {
+        PyObject *val_obj = PyList_GET_ITEM(obj, i);
+
+        if (!val_obj)
+            return false;
+
+        int iserr = 0;
+
+        QObject *val = reinterpret_cast<QObject *>(sipForceConvertToType(
+                val_obj, sipType_QObject, 0, SIP_NO_CONVERTORS, 0, &iserr));
+
+        if (iserr)
+            return false;
+
+        cpp.append(val);
+    }
+
+    return true;
+}
diff --git a/qpy/QtQuick/qpyquick_chimera_helpers.h b/qpy/QtQuick/qpyquick_chimera_helpers.h
new file mode 100644
index 0000000..2a6f7b0
--- /dev/null
+++ b/qpy/QtQuick/qpyquick_chimera_helpers.h
@@ -0,0 +1,42 @@
+// This is the definition of the various Chimera helpers.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQUICK_CHIMERAHELPERS_H
+#define _QPYQUICK_CHIMERAHELPERS_H
+
+
+#include <Python.h>
+
+#include <QVariant>
+
+
+// Keep these in sync. with those defined in the public API.
+typedef bool (*FromQVariantConvertorFn)(const QVariant *, PyObject **);
+typedef bool (*ToQVariantConvertorFn)(PyObject *, QVariant &, bool *);
+typedef bool (*ToQVariantDataConvertorFn)(PyObject *, void *, int, bool *);
+
+
+bool qpyquick_from_qvariant_convertor(const QVariant *varp, PyObject **objp);
+bool qpyquick_to_qvariant_convertor(PyObject *obj, QVariant &var, bool *okp);
+bool qpyquick_to_qvariant_data_convertor(PyObject *obj, void *data,
+        int metatype, bool *okp);
+
+
+#endif
diff --git a/qpy/QtQuick/qpyquick_post_init.cpp b/qpy/QtQuick/qpyquick_post_init.cpp
new file mode 100644
index 0000000..9bc0e55
--- /dev/null
+++ b/qpy/QtQuick/qpyquick_post_init.cpp
@@ -0,0 +1,46 @@
+// This is the initialisation support code for the QtQuick module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include "qpyquick_api.h"
+#include "qpyquick_chimera_helpers.h"
+#include "qpyquick_register_type.h"
+
+#include "sipAPIQtQuick.h"
+
+
+// Perform any required initialisation.
+void qpyquick_post_init()
+{
+    // Import the Chimera helper registration functions.
+    void (*register_from_qvariant_convertor)(FromQVariantConvertorFn);
+    register_from_qvariant_convertor = (void (*)(FromQVariantConvertorFn))sipImportSymbol("pyqt5_register_from_qvariant_convertor");
+    register_from_qvariant_convertor(qpyquick_from_qvariant_convertor);
+
+    void (*register_to_qvariant_convertor)(ToQVariantConvertorFn);
+    register_to_qvariant_convertor = (void (*)(ToQVariantConvertorFn))sipImportSymbol("pyqt5_register_to_qvariant_convertor");
+    register_to_qvariant_convertor(qpyquick_to_qvariant_convertor);
+
+    void (*register_to_qvariant_data_convertor)(ToQVariantDataConvertorFn);
+    register_to_qvariant_data_convertor = (void (*)(ToQVariantDataConvertorFn))sipImportSymbol("pyqt5_register_to_qvariant_data_convertor");
+    register_to_qvariant_data_convertor(qpyquick_to_qvariant_data_convertor);
+
+    // Export the qml_register_type() helper.
+    sipExportSymbol("qtquick_register_item", (void *)qpyquick_register_type);
+}
diff --git a/qpy/QtQuick/qpyquick_register_type.cpp b/qpy/QtQuick/qpyquick_register_type.cpp
new file mode 100644
index 0000000..9aa814e
--- /dev/null
+++ b/qpy/QtQuick/qpyquick_register_type.cpp
@@ -0,0 +1,40 @@
+// This is the implementation of the qml_register_type() helper.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include "qpyquick_register_type.h"
+#include "qpyquickitem.h"
+#include "qpyquickpainteditem.h"
+
+#include "sipAPIQtQuick.h"
+
+
+sipErrorState qpyquick_register_type(PyTypeObject *py_type,
+        const QMetaObject *mo, const QByteArray &ptr_name,
+        const QByteArray &list_name, QQmlPrivate::RegisterType **rtp)
+{
+    if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickPaintedItem)))
+        return ((*rtp = QPyQuickPaintedItem::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
+
+    if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickItem)))
+        return ((*rtp = QPyQuickItem::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
+
+    // We don't recognise the type.
+    return sipErrorContinue;
+}
diff --git a/qpy/QtQuick/qpyquick_register_type.h b/qpy/QtQuick/qpyquick_register_type.h
new file mode 100644
index 0000000..544cb57
--- /dev/null
+++ b/qpy/QtQuick/qpyquick_register_type.h
@@ -0,0 +1,39 @@
+// This is the declaration of the qml_register_type() helper.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQUICK_REGISTERTYPE_H
+#define _QPYQUICK_REGISTERTYPE_H
+
+
+#include <Python.h>
+
+#include <qqmlprivate.h>
+#include <QByteArray>
+#include <QMetaObject>
+
+#include "sipAPIQtQuick.h"
+
+
+sipErrorState qpyquick_register_type(PyTypeObject *py_type,
+        const QMetaObject *mo, const QByteArray &ptr_name,
+        const QByteArray &list_name, QQmlPrivate::RegisterType **rtp);
+
+
+#endif
diff --git a/qpy/QtQuick/qpyquickitem.cpp b/qpy/QtQuick/qpyquickitem.cpp
new file mode 100644
index 0000000..3700ef6
--- /dev/null
+++ b/qpy/QtQuick/qpyquickitem.cpp
@@ -0,0 +1,175 @@
+// This is the implementation of the QPyQuickItem classes.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QQmlListProperty>
+
+#include "qpyquickitem.h"
+
+#include "sipAPIQtQuick.h"
+
+
+// The maximum number of Python QQuickItem types.
+const int NrOfQuickItemTypes = 30;
+
+// The list of registered Python types.
+static QList<PyTypeObject *> pyqt_types;
+
+// The registration data for the canned types.
+static QQmlPrivate::RegisterType canned_types[NrOfQuickItemTypes];
+
+
+#define QPYQUICKITEM_INIT(n) \
+    case n##U: \
+        QPyQuickItem##n::staticMetaObject = *mo; \
+        rt->typeId = qRegisterNormalizedMetaType<QPyQuickItem##n *>(ptr_name); \
+        rt->listId = qRegisterNormalizedMetaType<QQmlListProperty<QPyQuickItem##n> >(list_name); \
+        rt->objectSize = sizeof(QPyQuickItem##n); \
+        rt->create = QQmlPrivate::createInto<QPyQuickItem##n>; \
+        rt->metaObject = mo; \
+        rt->attachedPropertiesFunction = QQmlPrivate::attachedPropertiesFunc<QPyQuickItem##n>(); \
+        rt->attachedPropertiesMetaObject = QQmlPrivate::attachedPropertiesMetaObject<QPyQuickItem##n>(); \
+        rt->parserStatusCast = QQmlPrivate::StaticCastSelector<QPyQuickItem##n,QQmlParserStatus>::cast(); \
+        rt->valueSourceCast = QQmlPrivate::StaticCastSelector<QPyQuickItem##n,QQmlPropertyValueSource>::cast(); \
+        rt->valueInterceptorCast = QQmlPrivate::StaticCastSelector<QPyQuickItem##n,QQmlPropertyValueInterceptor>::cast(); \
+        break
+
+
+// The ctor.
+QPyQuickItem::QPyQuickItem(QQuickItem *parent) : sipQQuickItem(parent)
+{
+}
+
+
+// Add a new Python type and return its number.
+QQmlPrivate::RegisterType *QPyQuickItem::addType(PyTypeObject *type,
+        const QMetaObject *mo, const QByteArray &ptr_name,
+        const QByteArray &list_name)
+{
+    int type_nr = pyqt_types.size();
+
+    // Check we have a spare canned type.
+    if (type_nr >= NrOfQuickItemTypes)
+    {
+        PyErr_Format(PyExc_TypeError,
+                "a maximum of %d QQuickItem types may be registered with QML",
+                NrOfQuickItemTypes);
+        return 0;
+    }
+
+    pyqt_types.append(type);
+
+    QQmlPrivate::RegisterType *rt = &canned_types[type_nr];
+
+    // Initialise those members that depend on the C++ type.
+    switch (type_nr)
+    {
+        QPYQUICKITEM_INIT(0);
+        QPYQUICKITEM_INIT(1);
+        QPYQUICKITEM_INIT(2);
+        QPYQUICKITEM_INIT(3);
+        QPYQUICKITEM_INIT(4);
+        QPYQUICKITEM_INIT(5);
+        QPYQUICKITEM_INIT(6);
+        QPYQUICKITEM_INIT(7);
+        QPYQUICKITEM_INIT(8);
+        QPYQUICKITEM_INIT(9);
+        QPYQUICKITEM_INIT(10);
+        QPYQUICKITEM_INIT(11);
+        QPYQUICKITEM_INIT(12);
+        QPYQUICKITEM_INIT(13);
+        QPYQUICKITEM_INIT(14);
+        QPYQUICKITEM_INIT(15);
+        QPYQUICKITEM_INIT(16);
+        QPYQUICKITEM_INIT(17);
+        QPYQUICKITEM_INIT(18);
+        QPYQUICKITEM_INIT(19);
+        QPYQUICKITEM_INIT(20);
+        QPYQUICKITEM_INIT(21);
+        QPYQUICKITEM_INIT(22);
+        QPYQUICKITEM_INIT(23);
+        QPYQUICKITEM_INIT(24);
+        QPYQUICKITEM_INIT(25);
+        QPYQUICKITEM_INIT(26);
+        QPYQUICKITEM_INIT(27);
+        QPYQUICKITEM_INIT(28);
+        QPYQUICKITEM_INIT(29);
+    }
+
+    return rt;
+}
+
+
+// Create the Python instance.
+void QPyQuickItem::createPyObject(QQuickItem *parent)
+{
+    SIP_BLOCK_THREADS
+
+    // Assume C++ owns everything.
+    PyObject *obj = sipConvertFromNewPyType(this, pyqt_types.at(typeNr()),
+            NULL, &sipPySelf, "D", parent, sipType_QQuickItem, NULL);
+
+    if (!obj)
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+}
+
+
+// The canned type implementations.
+#define QPYQUICKITEM_IMPL(n) \
+QPyQuickItem##n::QPyQuickItem##n(QQuickItem *parent) : QPyQuickItem(parent) \
+{ \
+    createPyObject(parent); \
+} \
+QMetaObject QPyQuickItem##n::staticMetaObject
+
+
+QPYQUICKITEM_IMPL(0);
+QPYQUICKITEM_IMPL(1);
+QPYQUICKITEM_IMPL(2);
+QPYQUICKITEM_IMPL(3);
+QPYQUICKITEM_IMPL(4);
+QPYQUICKITEM_IMPL(5);
+QPYQUICKITEM_IMPL(6);
+QPYQUICKITEM_IMPL(7);
+QPYQUICKITEM_IMPL(8);
+QPYQUICKITEM_IMPL(9);
+QPYQUICKITEM_IMPL(10);
+QPYQUICKITEM_IMPL(11);
+QPYQUICKITEM_IMPL(12);
+QPYQUICKITEM_IMPL(13);
+QPYQUICKITEM_IMPL(14);
+QPYQUICKITEM_IMPL(15);
+QPYQUICKITEM_IMPL(16);
+QPYQUICKITEM_IMPL(17);
+QPYQUICKITEM_IMPL(18);
+QPYQUICKITEM_IMPL(19);
+QPYQUICKITEM_IMPL(20);
+QPYQUICKITEM_IMPL(21);
+QPYQUICKITEM_IMPL(22);
+QPYQUICKITEM_IMPL(23);
+QPYQUICKITEM_IMPL(24);
+QPYQUICKITEM_IMPL(25);
+QPYQUICKITEM_IMPL(26);
+QPYQUICKITEM_IMPL(27);
+QPYQUICKITEM_IMPL(28);
+QPYQUICKITEM_IMPL(29);
diff --git a/qpy/QtQuick/qpyquickitem.h b/qpy/QtQuick/qpyquickitem.h
new file mode 100644
index 0000000..3d34ae2
--- /dev/null
+++ b/qpy/QtQuick/qpyquickitem.h
@@ -0,0 +1,97 @@
+// This is the definition of the QPyQuickItem classes.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQUICKITEM_H
+#define _QPYQUICKITEM_H
+
+
+#include <Python.h>
+
+#include <qqmlprivate.h>
+#include <QByteArray>
+#include <QMetaObject>
+#include <QQuickItem>
+
+#include "sipAPIQtQuick.h"
+
+
+class QPyQuickItem : public sipQQuickItem
+{
+public:
+    QPyQuickItem(QQuickItem *parent = 0);
+
+    virtual int typeNr() const = 0;
+
+    static QQmlPrivate::RegisterType *addType(PyTypeObject *type,
+            const QMetaObject *mo, const QByteArray &ptr_name,
+            const QByteArray &list_name);
+    void createPyObject(QQuickItem *parent);
+
+private:
+    QPyQuickItem(const QPyQuickItem &);
+};
+
+
+// The canned type declarations.
+#define QPYQUICKITEM_DECL(n) \
+class QPyQuickItem##n : public QPyQuickItem \
+{ \
+public: \
+    QPyQuickItem##n(QQuickItem *parent = 0); \
+    static QMetaObject staticMetaObject; \
+    virtual int typeNr() const {return n##U;} \
+private: \
+    QPyQuickItem##n(const QPyQuickItem##n &); \
+}
+
+
+QPYQUICKITEM_DECL(0);
+QPYQUICKITEM_DECL(1);
+QPYQUICKITEM_DECL(2);
+QPYQUICKITEM_DECL(3);
+QPYQUICKITEM_DECL(4);
+QPYQUICKITEM_DECL(5);
+QPYQUICKITEM_DECL(6);
+QPYQUICKITEM_DECL(7);
+QPYQUICKITEM_DECL(8);
+QPYQUICKITEM_DECL(9);
+QPYQUICKITEM_DECL(10);
+QPYQUICKITEM_DECL(11);
+QPYQUICKITEM_DECL(12);
+QPYQUICKITEM_DECL(13);
+QPYQUICKITEM_DECL(14);
+QPYQUICKITEM_DECL(15);
+QPYQUICKITEM_DECL(16);
+QPYQUICKITEM_DECL(17);
+QPYQUICKITEM_DECL(18);
+QPYQUICKITEM_DECL(19);
+QPYQUICKITEM_DECL(20);
+QPYQUICKITEM_DECL(21);
+QPYQUICKITEM_DECL(22);
+QPYQUICKITEM_DECL(23);
+QPYQUICKITEM_DECL(24);
+QPYQUICKITEM_DECL(25);
+QPYQUICKITEM_DECL(26);
+QPYQUICKITEM_DECL(27);
+QPYQUICKITEM_DECL(28);
+QPYQUICKITEM_DECL(29);
+
+
+#endif
diff --git a/qpy/QtQuick/qpyquickpainteditem.cpp b/qpy/QtQuick/qpyquickpainteditem.cpp
new file mode 100644
index 0000000..9b1838b
--- /dev/null
+++ b/qpy/QtQuick/qpyquickpainteditem.cpp
@@ -0,0 +1,176 @@
+// This is the implementation of the QPyQuickPaintedItem classes.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#include <Python.h>
+
+#include <QQmlListProperty>
+
+#include "qpyquickpainteditem.h"
+
+#include "sipAPIQtQuick.h"
+
+
+// The maximum number of Python QQuickPaintedItem types.
+const int NrOfQuickPaintedItemTypes = 30;
+
+// The list of registered Python types.
+static QList<PyTypeObject *> pyqt_types;
+
+// The registration data for the canned types.
+static QQmlPrivate::RegisterType canned_types[NrOfQuickPaintedItemTypes];
+
+
+#define QPYQUICKPAINTEDITEM_INIT(n) \
+    case n##U: \
+        QPyQuickPaintedItem##n::staticMetaObject = *mo; \
+        rt->typeId = qRegisterNormalizedMetaType<QPyQuickPaintedItem##n *>(ptr_name.constData()); \
+        rt->listId = qRegisterNormalizedMetaType<QQmlListProperty<QPyQuickPaintedItem##n> >(list_name.constData()); \
+        rt->objectSize = sizeof(QPyQuickPaintedItem##n); \
+        rt->create = QQmlPrivate::createInto<QPyQuickPaintedItem##n>; \
+        rt->metaObject = mo; \
+        rt->attachedPropertiesFunction = QQmlPrivate::attachedPropertiesFunc<QPyQuickPaintedItem##n>(); \
+        rt->attachedPropertiesMetaObject = QQmlPrivate::attachedPropertiesMetaObject<QPyQuickPaintedItem##n>(); \
+        rt->parserStatusCast = QQmlPrivate::StaticCastSelector<QPyQuickPaintedItem##n,QQmlParserStatus>::cast(); \
+        rt->valueSourceCast = QQmlPrivate::StaticCastSelector<QPyQuickPaintedItem##n,QQmlPropertyValueSource>::cast(); \
+        rt->valueInterceptorCast = QQmlPrivate::StaticCastSelector<QPyQuickPaintedItem##n,QQmlPropertyValueInterceptor>::cast(); \
+        break
+
+
+// The ctor.
+QPyQuickPaintedItem::QPyQuickPaintedItem(QQuickItem *parent)
+        : sipQQuickPaintedItem(parent)
+{
+}
+
+
+// Add a new Python type and return its number.
+QQmlPrivate::RegisterType *QPyQuickPaintedItem::addType(PyTypeObject *type,
+        const QMetaObject *mo, const QByteArray &ptr_name,
+        const QByteArray &list_name)
+{
+    int type_nr = pyqt_types.size();
+
+    // Check we have a spare canned type.
+    if (type_nr >= NrOfQuickPaintedItemTypes)
+    {
+        PyErr_Format(PyExc_TypeError,
+                "a maximum of %d QQuickPaintedItem types may be registered with QML",
+                NrOfQuickPaintedItemTypes);
+        return 0;
+    }
+
+    pyqt_types.append(type);
+
+    QQmlPrivate::RegisterType *rt = &canned_types[type_nr];
+
+    // Initialise those members that depend on the C++ type.
+    switch (type_nr)
+    {
+        QPYQUICKPAINTEDITEM_INIT(0);
+        QPYQUICKPAINTEDITEM_INIT(1);
+        QPYQUICKPAINTEDITEM_INIT(2);
+        QPYQUICKPAINTEDITEM_INIT(3);
+        QPYQUICKPAINTEDITEM_INIT(4);
+        QPYQUICKPAINTEDITEM_INIT(5);
+        QPYQUICKPAINTEDITEM_INIT(6);
+        QPYQUICKPAINTEDITEM_INIT(7);
+        QPYQUICKPAINTEDITEM_INIT(8);
+        QPYQUICKPAINTEDITEM_INIT(9);
+        QPYQUICKPAINTEDITEM_INIT(10);
+        QPYQUICKPAINTEDITEM_INIT(11);
+        QPYQUICKPAINTEDITEM_INIT(12);
+        QPYQUICKPAINTEDITEM_INIT(13);
+        QPYQUICKPAINTEDITEM_INIT(14);
+        QPYQUICKPAINTEDITEM_INIT(15);
+        QPYQUICKPAINTEDITEM_INIT(16);
+        QPYQUICKPAINTEDITEM_INIT(17);
+        QPYQUICKPAINTEDITEM_INIT(18);
+        QPYQUICKPAINTEDITEM_INIT(19);
+        QPYQUICKPAINTEDITEM_INIT(20);
+        QPYQUICKPAINTEDITEM_INIT(21);
+        QPYQUICKPAINTEDITEM_INIT(22);
+        QPYQUICKPAINTEDITEM_INIT(23);
+        QPYQUICKPAINTEDITEM_INIT(24);
+        QPYQUICKPAINTEDITEM_INIT(25);
+        QPYQUICKPAINTEDITEM_INIT(26);
+        QPYQUICKPAINTEDITEM_INIT(27);
+        QPYQUICKPAINTEDITEM_INIT(28);
+        QPYQUICKPAINTEDITEM_INIT(29);
+    }
+
+    return rt;
+}
+
+
+// Create the Python instance.
+void QPyQuickPaintedItem::createPyObject(QQuickItem *parent)
+{
+    SIP_BLOCK_THREADS
+
+    // Assume C++ owns everything.
+    PyObject *obj = sipConvertFromNewPyType(this, pyqt_types.at(typeNr()),
+            NULL, &sipPySelf, "D", parent, sipType_QQuickItem, NULL);
+
+    if (!obj)
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+}
+
+
+// The canned type implementations.
+#define QPYQUICKPAINTEDITEM_IMPL(n) \
+QPyQuickPaintedItem##n::QPyQuickPaintedItem##n(QQuickItem *parent) : QPyQuickPaintedItem(parent) \
+{ \
+    createPyObject(parent); \
+} \
+QMetaObject QPyQuickPaintedItem##n::staticMetaObject
+
+
+QPYQUICKPAINTEDITEM_IMPL(0);
+QPYQUICKPAINTEDITEM_IMPL(1);
+QPYQUICKPAINTEDITEM_IMPL(2);
+QPYQUICKPAINTEDITEM_IMPL(3);
+QPYQUICKPAINTEDITEM_IMPL(4);
+QPYQUICKPAINTEDITEM_IMPL(5);
+QPYQUICKPAINTEDITEM_IMPL(6);
+QPYQUICKPAINTEDITEM_IMPL(7);
+QPYQUICKPAINTEDITEM_IMPL(8);
+QPYQUICKPAINTEDITEM_IMPL(9);
+QPYQUICKPAINTEDITEM_IMPL(10);
+QPYQUICKPAINTEDITEM_IMPL(11);
+QPYQUICKPAINTEDITEM_IMPL(12);
+QPYQUICKPAINTEDITEM_IMPL(13);
+QPYQUICKPAINTEDITEM_IMPL(14);
+QPYQUICKPAINTEDITEM_IMPL(15);
+QPYQUICKPAINTEDITEM_IMPL(16);
+QPYQUICKPAINTEDITEM_IMPL(17);
+QPYQUICKPAINTEDITEM_IMPL(18);
+QPYQUICKPAINTEDITEM_IMPL(19);
+QPYQUICKPAINTEDITEM_IMPL(20);
+QPYQUICKPAINTEDITEM_IMPL(21);
+QPYQUICKPAINTEDITEM_IMPL(22);
+QPYQUICKPAINTEDITEM_IMPL(23);
+QPYQUICKPAINTEDITEM_IMPL(24);
+QPYQUICKPAINTEDITEM_IMPL(25);
+QPYQUICKPAINTEDITEM_IMPL(26);
+QPYQUICKPAINTEDITEM_IMPL(27);
+QPYQUICKPAINTEDITEM_IMPL(28);
+QPYQUICKPAINTEDITEM_IMPL(29);
diff --git a/qpy/QtQuick/qpyquickpainteditem.h b/qpy/QtQuick/qpyquickpainteditem.h
new file mode 100644
index 0000000..77fd8a1
--- /dev/null
+++ b/qpy/QtQuick/qpyquickpainteditem.h
@@ -0,0 +1,97 @@
+// This is the definition of the QPyQuickPaintedItem classes.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+#ifndef _QPYQUICKPAINTEDITEM_H
+#define _QPYQUICKPAINTEDITEM_H
+
+
+#include <Python.h>
+
+#include <qqmlprivate.h>
+#include <QByteArray>
+#include <QMetaObject>
+#include <QQuickItem>
+
+#include "sipAPIQtQuick.h"
+
+
+class QPyQuickPaintedItem : public sipQQuickPaintedItem
+{
+public:
+    QPyQuickPaintedItem(QQuickItem *parent = 0);
+
+    virtual int typeNr() const = 0;
+
+    static QQmlPrivate::RegisterType *addType(PyTypeObject *type,
+            const QMetaObject *mo, const QByteArray &ptr_name,
+            const QByteArray &list_name);
+    void createPyObject(QQuickItem *parent);
+
+private:
+    QPyQuickPaintedItem(const QPyQuickPaintedItem &);
+};
+
+
+// The canned type declarations.
+#define QPYQUICKPAINTEDITEM_DECL(n) \
+class QPyQuickPaintedItem##n : public QPyQuickPaintedItem \
+{ \
+public: \
+    QPyQuickPaintedItem##n(QQuickItem *parent = 0); \
+    static QMetaObject staticMetaObject; \
+    virtual int typeNr() const {return n##U;} \
+private: \
+    QPyQuickPaintedItem##n(const QPyQuickPaintedItem##n &); \
+}
+
+
+QPYQUICKPAINTEDITEM_DECL(0);
+QPYQUICKPAINTEDITEM_DECL(1);
+QPYQUICKPAINTEDITEM_DECL(2);
+QPYQUICKPAINTEDITEM_DECL(3);
+QPYQUICKPAINTEDITEM_DECL(4);
+QPYQUICKPAINTEDITEM_DECL(5);
+QPYQUICKPAINTEDITEM_DECL(6);
+QPYQUICKPAINTEDITEM_DECL(7);
+QPYQUICKPAINTEDITEM_DECL(8);
+QPYQUICKPAINTEDITEM_DECL(9);
+QPYQUICKPAINTEDITEM_DECL(10);
+QPYQUICKPAINTEDITEM_DECL(11);
+QPYQUICKPAINTEDITEM_DECL(12);
+QPYQUICKPAINTEDITEM_DECL(13);
+QPYQUICKPAINTEDITEM_DECL(14);
+QPYQUICKPAINTEDITEM_DECL(15);
+QPYQUICKPAINTEDITEM_DECL(16);
+QPYQUICKPAINTEDITEM_DECL(17);
+QPYQUICKPAINTEDITEM_DECL(18);
+QPYQUICKPAINTEDITEM_DECL(19);
+QPYQUICKPAINTEDITEM_DECL(20);
+QPYQUICKPAINTEDITEM_DECL(21);
+QPYQUICKPAINTEDITEM_DECL(22);
+QPYQUICKPAINTEDITEM_DECL(23);
+QPYQUICKPAINTEDITEM_DECL(24);
+QPYQUICKPAINTEDITEM_DECL(25);
+QPYQUICKPAINTEDITEM_DECL(26);
+QPYQUICKPAINTEDITEM_DECL(27);
+QPYQUICKPAINTEDITEM_DECL(28);
+QPYQUICKPAINTEDITEM_DECL(29);
+
+
+#endif
diff --git a/sip/Enginio/Enginiomod.sip b/sip/Enginio/Enginiomod.sip
new file mode 100644
index 0000000..339a005
--- /dev/null
+++ b/sip/Enginio/Enginiomod.sip
@@ -0,0 +1,55 @@
+// Enginiomod.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the Enginio Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.Enginio, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtNetwork/QtNetworkmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include enginio.sip
+%Include enginioclient.sip
+%Include enginioclientconnection.sip
+%Include enginioidentity.sip
+%Include enginiomodel.sip
+%Include enginiooauth2authentication.sip
+%Include enginioreply.sip
diff --git a/sip/Enginio/enginio.sip b/sip/Enginio/enginio.sip
new file mode 100644
index 0000000..8a910c4
--- /dev/null
+++ b/sip/Enginio/enginio.sip
@@ -0,0 +1,68 @@
+// enginio.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the Enginio Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class Enginio /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <enginio.h>
+%End
+
+public:
+    enum AuthenticationState
+    {
+        NotAuthenticated,
+        Authenticating,
+        Authenticated,
+        AuthenticationFailure,
+    };
+
+    enum Operation
+    {
+        ObjectOperation,
+        AccessControlOperation,
+        UserOperation,
+        UsergroupOperation,
+        UsergroupMembersOperation,
+        FileOperation,
+    };
+
+    enum Role
+    {
+        SyncedRole,
+        CreatedAtRole,
+        UpdatedAtRole,
+        IdRole,
+        ObjectTypeRole,
+        CustomPropertyRole,
+    };
+
+    enum ErrorType
+    {
+        NoError,
+        NetworkError,
+        BackendError,
+    };
+};
+
+%End
diff --git a/sip/Enginio/enginioclient.sip b/sip/Enginio/enginioclient.sip
new file mode 100644
index 0000000..8c767fb
--- /dev/null
+++ b/sip/Enginio/enginioclient.sip
@@ -0,0 +1,83 @@
+// enginioclient.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the Enginio Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class EnginioClient : EnginioClientConnection
+{
+%TypeHeaderCode
+#include <enginioclient.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_EnginioReply, &sipType_EnginioReply, -1, 1},
+        {sipName_EnginioModel, &sipType_EnginioModel, -1, 2},
+        {sipName_EnginioClientConnection, &sipType_EnginioClientConnection, 4, 3},
+        {sipName_EnginioIdentity, &sipType_EnginioIdentity, 5, -1},
+        {sipName_EnginioClient, &sipType_EnginioClient, -1, -1},
+        {sipName_EnginioOAuth2Authentication, &sipType_EnginioOAuth2Authentication, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    explicit EnginioClient(QObject *parent /TransferThis/ = 0);
+    virtual ~EnginioClient();
+    EnginioReply *fullTextSearch(const QJsonObject &query);
+    EnginioReply *query(const QJsonObject &query, const Enginio::Operation operation = Enginio::ObjectOperation);
+    EnginioReply *create(const QJsonObject &object, const Enginio::Operation operation = Enginio::ObjectOperation);
+    EnginioReply *update(const QJsonObject &object, const Enginio::Operation operation = Enginio::ObjectOperation);
+    EnginioReply *remove(const QJsonObject &object, const Enginio::Operation operation = Enginio::ObjectOperation);
+    EnginioReply *uploadFile(const QJsonObject &associatedObject, const QUrl &file);
+    EnginioReply *downloadUrl(const QJsonObject &object);
+
+signals:
+    void sessionAuthenticated(EnginioReply *reply) const;
+    void sessionAuthenticationError(EnginioReply *reply) const;
+    void sessionTerminated() const;
+    void finished(EnginioReply *reply);
+    void error(EnginioReply *reply);
+};
+
+%End
diff --git a/sip/Enginio/enginioclientconnection.sip b/sip/Enginio/enginioclientconnection.sip
new file mode 100644
index 0000000..4a84259
--- /dev/null
+++ b/sip/Enginio/enginioclientconnection.sip
@@ -0,0 +1,52 @@
+// enginioclientconnection.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the Enginio Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class EnginioClientConnection : QObject /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <enginioclientconnection.h>
+%End
+
+public:
+    virtual ~EnginioClientConnection();
+    QByteArray backendId() const;
+    void setBackendId(const QByteArray &backendId);
+    EnginioIdentity *identity() const;
+    void setIdentity(EnginioIdentity *identity);
+    Enginio::AuthenticationState authenticationState() const;
+    QUrl serviceUrl() const;
+    void setServiceUrl(const QUrl &serviceUrl);
+    QNetworkAccessManager *networkManager() const;
+
+signals:
+    void backendIdChanged(const QByteArray &backendId);
+    void serviceUrlChanged(const QUrl &url);
+    void authenticationStateChanged(Enginio::AuthenticationState state);
+    void identityChanged(EnginioIdentity *identity);
+
+private:
+    EnginioClientConnection(const EnginioClientConnection &);
+};
+
+%End
diff --git a/sip/Enginio/enginioidentity.sip b/sip/Enginio/enginioidentity.sip
new file mode 100644
index 0000000..3bb7b53
--- /dev/null
+++ b/sip/Enginio/enginioidentity.sip
@@ -0,0 +1,32 @@
+// enginioidentity.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the Enginio Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class EnginioIdentity : QObject /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <enginioidentity.h>
+%End
+};
+
+%End
diff --git a/sip/Enginio/enginiomodel.sip b/sip/Enginio/enginiomodel.sip
new file mode 100644
index 0000000..d264ef8
--- /dev/null
+++ b/sip/Enginio/enginiomodel.sip
@@ -0,0 +1,53 @@
+// enginiomodel.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the Enginio Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class EnginioModel : QAbstractListModel
+{
+%TypeHeaderCode
+#include <enginiomodel.h>
+%End
+
+public:
+    explicit EnginioModel(QObject *parent /TransferThis/ = 0);
+    virtual ~EnginioModel();
+    EnginioClient *client() const;
+    void setClient(const EnginioClient *client);
+    QJsonObject query();
+    void setQuery(const QJsonObject &query);
+    Enginio::Operation operation() const;
+    void setOperation(Enginio::Operation operation);
+    EnginioReply *append(const QJsonObject &value);
+    EnginioReply *remove(int row);
+    EnginioReply *setData(int row, const QVariant &value, const QString &role);
+
+signals:
+    void queryChanged(const QJsonObject &query);
+    void clientChanged(EnginioClient *client);
+    void operationChanged(Enginio::Operation operation);
+
+private:
+    EnginioModel(const EnginioModel &);
+};
+
+%End
diff --git a/sip/Enginio/enginiooauth2authentication.sip b/sip/Enginio/enginiooauth2authentication.sip
new file mode 100644
index 0000000..844c7c9
--- /dev/null
+++ b/sip/Enginio/enginiooauth2authentication.sip
@@ -0,0 +1,44 @@
+// enginiooauth2authentication.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the Enginio Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class EnginioOAuth2Authentication : EnginioIdentity
+{
+%TypeHeaderCode
+#include <enginiooauth2authentication.h>
+%End
+
+public:
+    explicit EnginioOAuth2Authentication(QObject *parent /TransferThis/ = 0);
+    virtual ~EnginioOAuth2Authentication();
+    QString user() const;
+    QString password() const;
+    void setUser(const QString &user);
+    void setPassword(const QString &password);
+
+signals:
+    void userChanged(const QString &user);
+    void passwordChanged(const QString &password);
+};
+
+%End
diff --git a/sip/Enginio/enginioreply.sip b/sip/Enginio/enginioreply.sip
new file mode 100644
index 0000000..8b8b4fb
--- /dev/null
+++ b/sip/Enginio/enginioreply.sip
@@ -0,0 +1,55 @@
+// enginioreply.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the Enginio Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class EnginioReply : QObject /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <enginioreply.h>
+%End
+
+public:
+    virtual ~EnginioReply();
+    QJsonObject data() const;
+// Methods from the hidden EnginioReplyState class.
+signals:
+    void progress(qint64 bytesSent, qint64 bytesTotal);
+    
+public:
+    Enginio::ErrorType errorType() const;
+    QNetworkReply::NetworkError networkError() const;
+    QString errorString() const;
+    int backendStatus() const;
+
+    bool isError() const;
+    bool isFinished() const;
+
+signals:
+    void finished(EnginioReply *reply);
+    void dataChanged();
+
+private:
+    EnginioReply(const EnginioReply &);
+};
+
+%End
diff --git a/sip/QAxContainer/QAxContainermod.sip b/sip/QAxContainer/QAxContainermod.sip
new file mode 100644
index 0000000..48ce18c
--- /dev/null
+++ b/sip/QAxContainer/QAxContainermod.sip
@@ -0,0 +1,48 @@
+// This is the SIP interface definition for the QAxContainer module of PyQt v5.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QAxContainer, keyword_arguments="Optional")
+
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qaxbase.sip
+%Include qaxobject.sip
+%Include qaxwidget.sip
diff --git a/sip/QAxContainer/qaxbase.sip b/sip/QAxContainer/qaxbase.sip
new file mode 100644
index 0000000..b885f75
--- /dev/null
+++ b/sip/QAxContainer/qaxbase.sip
@@ -0,0 +1,153 @@
+// This is the SIP interface definition for QAxBase.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAxBase /Abstract, PyQtNoQMetaObject/
+{
+%TypeHeaderCode
+#include <qaxbase.h>
+%End
+
+public:
+    //QAxBase(IUnknown *iface = 0);
+    virtual ~QAxBase();
+
+    QString control() const;
+
+    //long queryInterface(const QUuid &, void **) const;
+
+    // Note that the order of these overloads is significant.
+    QVariant dynamicCall(const char *, QList<QVariant> & /GetWrapper/);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipRes = new QVariant(sipCpp->dynamicCall(a0, *a1));
+        Py_END_ALLOW_THREADS
+
+        // Update the input list with the (possibly) new values.
+        for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(a1Wrapper); ++i)
+        {
+            QVariant *v = new QVariant(a1->at(i));
+            PyObject *v_obj = sipConvertFromNewType(v, sipType_QVariant, NULL);
+
+            if (!v_obj)
+            {
+                delete v;
+                sipIsErr = 1;
+                break;
+            }
+
+            if (PyList_SetItem(a1Wrapper, i, v_obj) < 0)
+            {
+                Py_DECREF(v_obj);
+                sipIsErr = 1;
+                break;
+            }
+        }
+%End
+
+    QVariant dynamicCall(const char *,
+            const QVariant &value1 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value2 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value3 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value4 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value5 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value6 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value7 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value8 /DocValue="Py_v3:None"/ = QVariant());
+
+    // Note that the order of these overloads is significant.
+    QAxObject *querySubObject(const char *, QList<QVariant> & /GetWrapper/);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipRes = sipCpp->querySubObject(a0, *a1);
+        Py_END_ALLOW_THREADS
+
+        // Update the input list with the (possibly) new values.
+        for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(a1Wrapper); ++i)
+        {
+            QVariant *v = new QVariant(a1->at(i));
+            PyObject *v_obj = sipConvertFromNewType(v, sipType_QVariant, NULL);
+
+            if (!v_obj)
+            {
+                delete v;
+                sipIsErr = 1;
+                break;
+            }
+
+            if (PyList_SetItem(a1Wrapper, i, v_obj) < 0)
+            {
+                Py_DECREF(v_obj);
+                sipIsErr = 1;
+                break;
+            }
+        }
+%End
+
+    QAxObject *querySubObject(const char *,
+            const QVariant &value1 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value2 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value3 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value4 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value5 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value6 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value7 /DocValue="Py_v3:None"/ = QVariant(),
+            const QVariant &value8 /DocValue="Py_v3:None"/ = QVariant());
+
+    // SIP has a bug triggered by a template definition being the subject of
+    // multiple typedefs.  It only really matters when building everything as
+    // one big module (the code that implements the type is duplicated in
+    // other cases).  Until it is fixed we just avoid the problematic typedef.
+    //typedef QMap<QString, QVariant> PropertyBag;
+    //PropertyBag propertyBag() const;
+    //void setPropertyBag(const PropertyBag &);
+    QVariantMap propertyBag() const;
+    void setPropertyBag(const QVariantMap &);
+
+    QString generateDocumentation();
+
+    virtual bool propertyWritable(const char *) const;
+    virtual void setPropertyWritable(const char *, bool);
+
+    bool isNull() const;
+
+    QStringList verbs() const;
+
+    QVariant asVariant() const;
+
+signals:
+    void signal(const QString &, int, void *);
+    void propertyChanged(const QString &);
+    void exception(int, const QString &, const QString &, const QString &);
+
+public:
+    virtual void clear();
+    bool setControl(const QString &);
+
+    void disableMetaObject();
+    void disableClassInfo();
+    void disableEventSink();
+
+protected:
+    //virtual bool initialize(IUnknown** ptr);
+    //bool initializeRemote(IUnknown** ptr);
+    //bool initializeLicensed(IUnknown** ptr);
+    //bool initializeActive(IUnknown** ptr);
+    //bool initializeFromFile(IUnknown** ptr);
+};
diff --git a/sip/QAxContainer/qaxobject.sip b/sip/QAxContainer/qaxobject.sip
new file mode 100644
index 0000000..db16226
--- /dev/null
+++ b/sip/QAxContainer/qaxobject.sip
@@ -0,0 +1,66 @@
+// This is the SIP interface definition for QAxObject.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAxObject : QObject, QAxBase /PyQtNoQMetaObject/
+{
+%TypeHeaderCode
+#include <qaxobject.h>
+%End
+
+public:
+    QAxObject(QObject *parent /TransferThis/ = 0);
+    QAxObject(const QString &, QObject *parent /TransferThis/ = 0);
+    //QAxObject(IUnknown *, QObject *parent /TransferThis/ = 0);
+    ~QAxObject();
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipWrapperType **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QAxObject, &sipClass_QAxObject,    1, -1},
+        {sipName_QAxWidget, &sipClass_QAxWidget,    -1, -1},
+    };
+
+    int i = 0;
+
+    sipClass = NULL;
+
+    do
+    {
+        struct class_graph *cg = &graph[i];
+
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipClass = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+    bool doVerb(const QString &);
+
+protected:
+    void connectNotify(const QMetaMethod &);
+};
diff --git a/sip/QAxContainer/qaxwidget.sip b/sip/QAxContainer/qaxwidget.sip
new file mode 100644
index 0000000..d0d1873
--- /dev/null
+++ b/sip/QAxContainer/qaxwidget.sip
@@ -0,0 +1,52 @@
+// This is the SIP interface definition for QAxWidget.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAxWidget : QWidget, QAxBase /PyQtNoQMetaObject/
+{
+%TypeHeaderCode
+#include <qaxwidget.h>
+%End
+
+public:
+    QAxWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    QAxWidget(const QString &, QWidget *parent /TransferThis/ = 0,
+            Qt::WindowFlags flags = 0);
+    //QAxWidget(IUnknown *, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    ~QAxWidget();
+
+    void clear();
+    bool doVerb(const QString &);
+
+    QSize sizeHint() const;
+    QSize minimumSizeHint() const;
+
+    //virtual QaxAggregated *createAggregate();
+
+protected:
+    //bool initialize(IUnknown **);
+    virtual bool createHostWindow(bool);
+
+    void changeEvent(QEvent *);
+    void resizeEvent(QResizeEvent *);
+
+    virtual bool translateKeyEvent(int,int) const;
+
+    void connectNotify(const QMetaMethod &);
+};
diff --git a/sip/QtBluetooth/QtBluetoothmod.sip b/sip/QtBluetooth/QtBluetoothmod.sip
new file mode 100644
index 0000000..91a7767
--- /dev/null
+++ b/sip/QtBluetooth/QtBluetoothmod.sip
@@ -0,0 +1,61 @@
+// QtBluetoothmod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtBluetooth, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%Include qbluetooth.sip
+%Include qbluetoothaddress.sip
+%Include qbluetoothdevicediscoveryagent.sip
+%Include qbluetoothdeviceinfo.sip
+%Include qbluetoothhostinfo.sip
+%Include qbluetoothlocaldevice.sip
+%Include qbluetoothserver.sip
+%Include qbluetoothservicediscoveryagent.sip
+%Include qbluetoothserviceinfo.sip
+%Include qbluetoothsocket.sip
+%Include qbluetoothtransfermanager.sip
+%Include qbluetoothtransferreply.sip
+%Include qbluetoothtransferrequest.sip
+%Include qbluetoothuuid.sip
+%Include qpybluetooth_qlist.sip
+%Include qpybluetooth_quint128.sip
diff --git a/sip/QtBluetooth/qbluetooth.sip b/sip/QtBluetooth/qbluetooth.sip
new file mode 100644
index 0000000..b3aa4eb
--- /dev/null
+++ b/sip/QtBluetooth/qbluetooth.sip
@@ -0,0 +1,44 @@
+// qbluetooth.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+namespace QBluetooth
+{
+%TypeHeaderCode
+#include <qbluetooth.h>
+%End
+
+    enum Security
+    {
+        NoSecurity,
+        Authorization,
+        Authentication,
+        Encryption,
+        Secure,
+    };
+
+    typedef QFlags<QBluetooth::Security> SecurityFlags;
+    QFlags<QBluetooth::Security> operator|(QBluetooth::Security f1, QFlags<QBluetooth::Security> f2);
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothaddress.sip b/sip/QtBluetooth/qbluetoothaddress.sip
new file mode 100644
index 0000000..292068e
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothaddress.sip
@@ -0,0 +1,46 @@
+// qbluetoothaddress.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothAddress
+{
+%TypeHeaderCode
+#include <qbluetoothaddress.h>
+%End
+
+public:
+    QBluetoothAddress();
+    explicit QBluetoothAddress(quint64 address);
+    explicit QBluetoothAddress(const QString &address);
+    QBluetoothAddress(const QBluetoothAddress &other);
+    ~QBluetoothAddress();
+    bool isNull() const;
+    void clear();
+    bool operator<(const QBluetoothAddress &other) const;
+    bool operator==(const QBluetoothAddress &other) const;
+    bool operator!=(const QBluetoothAddress &other) const;
+    quint64 toUInt64() const;
+    QString toString() const;
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothdevicediscoveryagent.sip b/sip/QtBluetooth/qbluetoothdevicediscoveryagent.sip
new file mode 100644
index 0000000..fb1cae8
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothdevicediscoveryagent.sip
@@ -0,0 +1,70 @@
+// qbluetoothdevicediscoveryagent.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothDeviceDiscoveryAgent : QObject
+{
+%TypeHeaderCode
+#include <qbluetoothdevicediscoveryagent.h>
+%End
+
+public:
+    enum Error
+    {
+        NoError,
+        InputOutputError,
+        PoweredOffError,
+%If (Qt_5_3_0 -)
+        InvalidBluetoothAdapterError,
+%End
+        UnknownError,
+    };
+
+    enum InquiryType
+    {
+        GeneralUnlimitedInquiry,
+        LimitedInquiry,
+    };
+
+    QBluetoothDeviceDiscoveryAgent(QObject *parent /TransferThis/ = 0);
+    QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent /TransferThis/ = 0);
+    virtual ~QBluetoothDeviceDiscoveryAgent();
+    QBluetoothDeviceDiscoveryAgent::InquiryType inquiryType() const;
+    void setInquiryType(QBluetoothDeviceDiscoveryAgent::InquiryType type);
+    bool isActive() const;
+    QBluetoothDeviceDiscoveryAgent::Error error() const;
+    QString errorString() const;
+    QList<QBluetoothDeviceInfo> discoveredDevices() const;
+
+public slots:
+    void start();
+    void stop();
+
+signals:
+    void deviceDiscovered(const QBluetoothDeviceInfo &info);
+    void finished();
+    void error(QBluetoothDeviceDiscoveryAgent::Error error);
+    void canceled();
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothdeviceinfo.sip b/sip/QtBluetooth/qbluetoothdeviceinfo.sip
new file mode 100644
index 0000000..fe5677b
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothdeviceinfo.sip
@@ -0,0 +1,205 @@
+// qbluetoothdeviceinfo.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothDeviceInfo
+{
+%TypeHeaderCode
+#include <qbluetoothdeviceinfo.h>
+%End
+
+public:
+    enum MajorDeviceClass
+    {
+        MiscellaneousDevice,
+        ComputerDevice,
+        PhoneDevice,
+        LANAccessDevice,
+        AudioVideoDevice,
+        PeripheralDevice,
+        ImagingDevice,
+        WearableDevice,
+        ToyDevice,
+        HealthDevice,
+        UncategorizedDevice,
+    };
+
+    enum MinorMiscellaneousClass
+    {
+        UncategorizedMiscellaneous,
+    };
+
+    enum MinorComputerClass
+    {
+        UncategorizedComputer,
+        DesktopComputer,
+        ServerComputer,
+        LaptopComputer,
+        HandheldClamShellComputer,
+        HandheldComputer,
+        WearableComputer,
+    };
+
+    enum MinorPhoneClass
+    {
+        UncategorizedPhone,
+        CellularPhone,
+        CordlessPhone,
+        SmartPhone,
+        WiredModemOrVoiceGatewayPhone,
+        CommonIsdnAccessPhone,
+    };
+
+    enum MinorNetworkClass
+    {
+        NetworkFullService,
+        NetworkLoadFactorOne,
+        NetworkLoadFactorTwo,
+        NetworkLoadFactorThree,
+        NetworkLoadFactorFour,
+        NetworkLoadFactorFive,
+        NetworkLoadFactorSix,
+        NetworkNoService,
+    };
+
+    enum MinorAudioVideoClass
+    {
+        UncategorizedAudioVideoDevice,
+        WearableHeadsetDevice,
+        HandsFreeDevice,
+        Microphone,
+        Loudspeaker,
+        Headphones,
+        PortableAudioDevice,
+        CarAudio,
+        SetTopBox,
+        HiFiAudioDevice,
+        Vcr,
+        VideoCamera,
+        Camcorder,
+        VideoMonitor,
+        VideoDisplayAndLoudspeaker,
+        VideoConferencing,
+        GamingDevice,
+    };
+
+    enum MinorPeripheralClass
+    {
+        UncategorizedPeripheral,
+        KeyboardPeripheral,
+        PointingDevicePeripheral,
+        KeyboardWithPointingDevicePeripheral,
+        JoystickPeripheral,
+        GamepadPeripheral,
+        RemoteControlPeripheral,
+        SensingDevicePeripheral,
+        DigitizerTabletPeripheral,
+        CardReaderPeripheral,
+    };
+
+    enum MinorImagingClass
+    {
+        UncategorizedImagingDevice,
+        ImageDisplay,
+        ImageCamera,
+        ImageScanner,
+        ImagePrinter,
+    };
+
+    enum MinorWearableClass
+    {
+        UncategorizedWearableDevice,
+        WearableWristWatch,
+        WearablePager,
+        WearableJacket,
+        WearableHelmet,
+        WearableGlasses,
+    };
+
+    enum MinorToyClass
+    {
+        UncategorizedToy,
+        ToyRobot,
+        ToyVehicle,
+        ToyDoll,
+        ToyController,
+        ToyGame,
+    };
+
+    enum MinorHealthClass
+    {
+        UncategorizedHealthDevice,
+        HealthBloodPressureMonitor,
+        HealthThermometer,
+        HealthWeightScale,
+        HealthGlucoseMeter,
+        HealthPulseOximeter,
+        HealthDataDisplay,
+        HealthStepCounter,
+    };
+
+    enum ServiceClass
+    {
+        NoService,
+        PositioningService,
+        NetworkingService,
+        RenderingService,
+        CapturingService,
+        ObjectTransferService,
+        AudioService,
+        TelephonyService,
+        InformationService,
+        AllServices,
+    };
+
+    typedef QFlags<QBluetoothDeviceInfo::ServiceClass> ServiceClasses;
+
+    enum DataCompleteness
+    {
+        DataComplete,
+        DataIncomplete,
+        DataUnavailable,
+    };
+
+    QBluetoothDeviceInfo();
+    QBluetoothDeviceInfo(const QBluetoothAddress &address, const QString &name, quint32 classOfDevice);
+    QBluetoothDeviceInfo(const QBluetoothDeviceInfo &other);
+    ~QBluetoothDeviceInfo();
+    bool isValid() const;
+    bool isCached() const;
+    void setCached(bool cached);
+    bool operator==(const QBluetoothDeviceInfo &other) const;
+    bool operator!=(const QBluetoothDeviceInfo &other) const;
+    QBluetoothAddress address() const;
+    QString name() const;
+    QFlags<QBluetoothDeviceInfo::ServiceClass> serviceClasses() const;
+    QBluetoothDeviceInfo::MajorDeviceClass majorDeviceClass() const;
+    quint8 minorDeviceClass() const;
+    qint16 rssi() const;
+    void setRssi(qint16 signal);
+    void setServiceUuids(const QList<QBluetoothUuid> &uuids, QBluetoothDeviceInfo::DataCompleteness completeness);
+    QList<QBluetoothUuid> serviceUuids(QBluetoothDeviceInfo::DataCompleteness *completeness /Out/ = 0) const;
+    QBluetoothDeviceInfo::DataCompleteness serviceUuidsCompleteness() const;
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothhostinfo.sip b/sip/QtBluetooth/qbluetoothhostinfo.sip
new file mode 100644
index 0000000..f289e4f
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothhostinfo.sip
@@ -0,0 +1,41 @@
+// qbluetoothhostinfo.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothHostInfo
+{
+%TypeHeaderCode
+#include <qbluetoothhostinfo.h>
+%End
+
+public:
+    QBluetoothHostInfo();
+    QBluetoothHostInfo(const QBluetoothHostInfo &other);
+    ~QBluetoothHostInfo();
+    QBluetoothAddress address() const;
+    void setAddress(const QBluetoothAddress &address);
+    QString name() const;
+    void setName(const QString &name);
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothlocaldevice.sip b/sip/QtBluetooth/qbluetoothlocaldevice.sip
new file mode 100644
index 0000000..e1cd74d
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothlocaldevice.sip
@@ -0,0 +1,87 @@
+// qbluetoothlocaldevice.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothLocalDevice : QObject
+{
+%TypeHeaderCode
+#include <qbluetoothlocaldevice.h>
+%End
+
+public:
+    enum Pairing
+    {
+        Unpaired,
+        Paired,
+        AuthorizedPaired,
+    };
+
+    enum HostMode
+    {
+        HostPoweredOff,
+        HostConnectable,
+        HostDiscoverable,
+        HostDiscoverableLimitedInquiry,
+    };
+
+    enum Error
+    {
+        NoError,
+        PairingError,
+        UnknownError,
+    };
+
+    QBluetoothLocalDevice(QObject *parent /TransferThis/ = 0);
+    QBluetoothLocalDevice(const QBluetoothAddress &address, QObject *parent /TransferThis/ = 0);
+    virtual ~QBluetoothLocalDevice();
+    bool isValid() const;
+    void requestPairing(const QBluetoothAddress &address, QBluetoothLocalDevice::Pairing pairing);
+    QBluetoothLocalDevice::Pairing pairingStatus(const QBluetoothAddress &address) const;
+    void setHostMode(QBluetoothLocalDevice::HostMode mode);
+    QBluetoothLocalDevice::HostMode hostMode() const;
+    void powerOn();
+    QString name() const;
+    QBluetoothAddress address() const;
+    static QList<QBluetoothHostInfo> allDevices();
+%If (Qt_5_3_0 -)
+    QList<QBluetoothAddress> connectedDevices() const;
+%End
+
+public slots:
+    void pairingConfirmation(bool confirmation);
+
+signals:
+    void hostModeStateChanged(QBluetoothLocalDevice::HostMode state);
+    void pairingFinished(const QBluetoothAddress &address, QBluetoothLocalDevice::Pairing pairing);
+    void pairingDisplayPinCode(const QBluetoothAddress &address, QString pin);
+    void pairingDisplayConfirmation(const QBluetoothAddress &address, QString pin);
+    void error(QBluetoothLocalDevice::Error error);
+%If (Qt_5_3_0 -)
+    void deviceConnected(const QBluetoothAddress &address);
+%End
+%If (Qt_5_3_0 -)
+    void deviceDisconnected(const QBluetoothAddress &address);
+%End
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothserver.sip b/sip/QtBluetooth/qbluetoothserver.sip
new file mode 100644
index 0000000..f8e96f4
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothserver.sip
@@ -0,0 +1,98 @@
+// qbluetoothserver.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothServer : QObject
+{
+%TypeHeaderCode
+#include <qbluetoothserver.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QBluetoothServiceDiscoveryAgent, &sipType_QBluetoothServiceDiscoveryAgent, -1, 1},
+        {sipName_QBluetoothLocalDevice, &sipType_QBluetoothLocalDevice, -1, 2},
+        {sipName_QBluetoothSocket, &sipType_QBluetoothSocket, -1, 3},
+        {sipName_QBluetoothServer, &sipType_QBluetoothServer, -1, 4},
+        {sipName_QBluetoothTransferReply, &sipType_QBluetoothTransferReply, -1, 5},
+        {sipName_QBluetoothTransferManager, &sipType_QBluetoothTransferManager, -1, 6},
+        {sipName_QBluetoothDeviceDiscoveryAgent, &sipType_QBluetoothDeviceDiscoveryAgent, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    enum Error
+    {
+        NoError,
+        UnknownError,
+        PoweredOffError,
+        InputOutputError,
+        ServiceAlreadyRegisteredError,
+        UnsupportedProtocolError,
+    };
+
+    QBluetoothServer(QBluetoothServiceInfo::Protocol serverType, QObject *parent /TransferThis/ = 0);
+    virtual ~QBluetoothServer();
+    void close() /ReleaseGIL/;
+    bool listen(const QBluetoothAddress &address = QBluetoothAddress(), quint16 port = 0) /ReleaseGIL/;
+    QBluetoothServiceInfo listen(const QBluetoothUuid &uuid, const QString &serviceName /DocValue="''"/ = QString()) /ReleaseGIL/;
+    bool isListening() const;
+    void setMaxPendingConnections(int numConnections);
+    int maxPendingConnections() const;
+    bool hasPendingConnections() const;
+    QBluetoothSocket *nextPendingConnection() /Factory/;
+    QBluetoothAddress serverAddress() const;
+    quint16 serverPort() const;
+    void setSecurityFlags(QBluetooth::SecurityFlags security);
+    QBluetooth::SecurityFlags securityFlags() const;
+    QBluetoothServiceInfo::Protocol serverType() const;
+    QBluetoothServer::Error error() const;
+
+signals:
+    void newConnection();
+    void error(QBluetoothServer::Error);
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothservicediscoveryagent.sip b/sip/QtBluetooth/qbluetoothservicediscoveryagent.sip
new file mode 100644
index 0000000..bea33a4
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothservicediscoveryagent.sip
@@ -0,0 +1,74 @@
+// qbluetoothservicediscoveryagent.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothServiceDiscoveryAgent : QObject
+{
+%TypeHeaderCode
+#include <qbluetoothservicediscoveryagent.h>
+%End
+
+public:
+    enum Error
+    {
+        NoError,
+        InputOutputError,
+        PoweredOffError,
+%If (Qt_5_3_0 -)
+        InvalidBluetoothAdapterError,
+%End
+        UnknownError,
+    };
+
+    enum DiscoveryMode
+    {
+        MinimalDiscovery,
+        FullDiscovery,
+    };
+
+    QBluetoothServiceDiscoveryAgent(QObject *parent /TransferThis/ = 0);
+    QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent /TransferThis/ = 0);
+    virtual ~QBluetoothServiceDiscoveryAgent();
+    bool isActive() const;
+    QBluetoothServiceDiscoveryAgent::Error error() const;
+    QString errorString() const;
+    QList<QBluetoothServiceInfo> discoveredServices() const;
+    void setUuidFilter(const QList<QBluetoothUuid> &uuids);
+    void setUuidFilter(const QBluetoothUuid &uuid);
+    QList<QBluetoothUuid> uuidFilter() const;
+    bool setRemoteAddress(const QBluetoothAddress &address);
+    QBluetoothAddress remoteAddress() const;
+
+public slots:
+    void start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = QBluetoothServiceDiscoveryAgent::MinimalDiscovery);
+    void stop();
+    void clear();
+
+signals:
+    void serviceDiscovered(const QBluetoothServiceInfo &info);
+    void finished();
+    void canceled();
+    void error(QBluetoothServiceDiscoveryAgent::Error error);
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothserviceinfo.sip b/sip/QtBluetooth/qbluetoothserviceinfo.sip
new file mode 100644
index 0000000..87daafd
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothserviceinfo.sip
@@ -0,0 +1,95 @@
+// qbluetoothserviceinfo.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothServiceInfo
+{
+%TypeHeaderCode
+#include <qbluetoothserviceinfo.h>
+%End
+
+public:
+    enum AttributeId
+    {
+        ServiceRecordHandle,
+        ServiceClassIds,
+        ServiceRecordState,
+        ServiceId,
+        ProtocolDescriptorList,
+        BrowseGroupList,
+        LanguageBaseAttributeIdList,
+        ServiceInfoTimeToLive,
+        ServiceAvailability,
+        BluetoothProfileDescriptorList,
+        DocumentationUrl,
+        ClientExecutableUrl,
+        IconUrl,
+        AdditionalProtocolDescriptorList,
+        PrimaryLanguageBase,
+        ServiceName,
+        ServiceDescription,
+        ServiceProvider,
+    };
+
+    enum Protocol
+    {
+        UnknownProtocol,
+        L2capProtocol,
+        RfcommProtocol,
+    };
+
+    QBluetoothServiceInfo();
+    QBluetoothServiceInfo(const QBluetoothServiceInfo &other);
+    ~QBluetoothServiceInfo();
+    bool isValid() const;
+    bool isComplete() const;
+    void setDevice(const QBluetoothDeviceInfo &info);
+    QBluetoothDeviceInfo device() const;
+    QVariant attribute(quint16 attributeId) const;
+    QList<quint16> attributes() const;
+    bool contains(quint16 attributeId) const;
+    void removeAttribute(quint16 attributeId);
+    QBluetoothServiceInfo::Protocol socketProtocol() const;
+    int protocolServiceMultiplexer() const;
+    int serverChannel() const;
+    QBluetoothServiceInfo::Sequence protocolDescriptor(QBluetoothUuid::ProtocolUuid protocol) const;
+    bool isRegistered() const;
+    bool registerService(const QBluetoothAddress &localAdapter = QBluetoothAddress());
+    bool unregisterService();
+    void setAttribute(quint16 attributeId, const QBluetoothUuid &value);
+    void setAttribute(quint16 attributeId, const QBluetoothServiceInfo::Sequence &value);
+    void setAttribute(quint16 attributeId, const QVariant &value);
+    void setServiceName(const QString &name);
+    QString serviceName() const;
+    void setServiceDescription(const QString &description);
+    QString serviceDescription() const;
+    void setServiceProvider(const QString &provider);
+    QString serviceProvider() const;
+    void setServiceAvailability(quint8 availability);
+    quint8 serviceAvailability() const;
+    void setServiceUuid(const QBluetoothUuid &uuid);
+    QBluetoothUuid serviceUuid() const;
+    QList<QBluetoothUuid> serviceClassUuids() const;
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothsocket.sip b/sip/QtBluetooth/qbluetoothsocket.sip
new file mode 100644
index 0000000..5899942
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothsocket.sip
@@ -0,0 +1,133 @@
+// qbluetoothsocket.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothSocket : QIODevice
+{
+%TypeHeaderCode
+#include <qbluetoothsocket.h>
+%End
+
+public:
+    enum SocketState
+    {
+        UnconnectedState,
+        ServiceLookupState,
+        ConnectingState,
+        ConnectedState,
+        BoundState,
+        ClosingState,
+        ListeningState,
+    };
+
+    enum SocketError
+    {
+        NoSocketError,
+        UnknownSocketError,
+        HostNotFoundError,
+        ServiceNotFoundError,
+        NetworkError,
+        UnsupportedProtocolError,
+%If (Qt_5_3_0 -)
+        OperationError,
+%End
+    };
+
+    QBluetoothSocket(QBluetoothServiceInfo::Protocol socketType, QObject *parent /TransferThis/ = 0);
+    QBluetoothSocket(QObject *parent /TransferThis/ = 0);
+    virtual ~QBluetoothSocket();
+    void abort();
+    virtual void close() /ReleaseGIL/;
+    virtual bool isSequential() const;
+    virtual qint64 bytesAvailable() const;
+    virtual qint64 bytesToWrite() const;
+    virtual bool canReadLine() const;
+    void connectToService(const QBluetoothServiceInfo &service, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite) /ReleaseGIL/;
+    void connectToService(const QBluetoothAddress &address, const QBluetoothUuid &uuid, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite) /ReleaseGIL/;
+    void connectToService(const QBluetoothAddress &address, quint16 port, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite) /ReleaseGIL/;
+    void disconnectFromService() /ReleaseGIL/;
+    QString localName() const;
+    QBluetoothAddress localAddress() const;
+    quint16 localPort() const;
+    QString peerName() const;
+    QBluetoothAddress peerAddress() const;
+    quint16 peerPort() const;
+    bool setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState state = QBluetoothSocket::ConnectedState, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite);
+    int socketDescriptor() const;
+    QBluetoothServiceInfo::Protocol socketType() const;
+    QBluetoothSocket::SocketState state() const;
+    QBluetoothSocket::SocketError error() const;
+    QString errorString() const;
+
+signals:
+    void connected();
+    void disconnected();
+    void error(QBluetoothSocket::SocketError error);
+    void stateChanged(QBluetoothSocket::SocketState state);
+
+protected:
+    virtual SIP_PYOBJECT readData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxSize)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QBluetoothSocket::readData(s, a0) : sipCpp->readData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual qint64 writeData(const char *data /Array/, qint64 maxSize /ArraySize/) /ReleaseGIL/;
+    void setSocketState(QBluetoothSocket::SocketState state);
+    void setSocketError(QBluetoothSocket::SocketError error);
+    void doDeviceDiscovery(const QBluetoothServiceInfo &service, QFlags<QIODevice::OpenModeFlag> openMode);
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothtransfermanager.sip b/sip/QtBluetooth/qbluetoothtransfermanager.sip
new file mode 100644
index 0000000..694be97
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothtransfermanager.sip
@@ -0,0 +1,40 @@
+// qbluetoothtransfermanager.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothTransferManager : QObject
+{
+%TypeHeaderCode
+#include <qbluetoothtransfermanager.h>
+%End
+
+public:
+    explicit QBluetoothTransferManager(QObject *parent /TransferThis/ = 0);
+    virtual ~QBluetoothTransferManager();
+    QBluetoothTransferReply *put(const QBluetoothTransferRequest &request, QIODevice *data) /Transfer/;
+
+signals:
+    void finished(QBluetoothTransferReply *reply);
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothtransferreply.sip b/sip/QtBluetooth/qbluetoothtransferreply.sip
new file mode 100644
index 0000000..8dcb529
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothtransferreply.sip
@@ -0,0 +1,68 @@
+// qbluetoothtransferreply.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothTransferReply : QObject
+{
+%TypeHeaderCode
+#include <qbluetoothtransferreply.h>
+%End
+
+public:
+    enum TransferError
+    {
+        NoError,
+        UnknownError,
+        FileNotFoundError,
+        HostNotFoundError,
+        UserCanceledTransferError,
+%If (Qt_5_3_0 -)
+        IODeviceNotReadableError,
+%End
+%If (Qt_5_3_0 -)
+        ResourceBusyError,
+%End
+    };
+
+    virtual ~QBluetoothTransferReply();
+    virtual bool isFinished() const = 0;
+    virtual bool isRunning() const = 0;
+    QBluetoothTransferManager *manager() const;
+    virtual QBluetoothTransferReply::TransferError error() const = 0;
+    virtual QString errorString() const = 0;
+    QBluetoothTransferRequest request() const;
+
+public slots:
+    void abort();
+
+signals:
+    void finished(QBluetoothTransferReply *);
+    void transferProgress(qint64 bytesTransferred, qint64 bytesTotal);
+
+protected:
+    explicit QBluetoothTransferReply(QObject *parent /TransferThis/ = 0);
+    void setManager(QBluetoothTransferManager *manager);
+    void setRequest(const QBluetoothTransferRequest &request);
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothtransferrequest.sip b/sip/QtBluetooth/qbluetoothtransferrequest.sip
new file mode 100644
index 0000000..3d116e3
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothtransferrequest.sip
@@ -0,0 +1,51 @@
+// qbluetoothtransferrequest.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothTransferRequest
+{
+%TypeHeaderCode
+#include <qbluetoothtransferrequest.h>
+%End
+
+public:
+    enum Attribute
+    {
+        DescriptionAttribute,
+        TimeAttribute,
+        TypeAttribute,
+        LengthAttribute,
+        NameAttribute,
+    };
+
+    explicit QBluetoothTransferRequest(const QBluetoothAddress &address = QBluetoothAddress());
+    QBluetoothTransferRequest(const QBluetoothTransferRequest &other);
+    ~QBluetoothTransferRequest();
+    QVariant attribute(QBluetoothTransferRequest::Attribute code, const QVariant &defaultValue = QVariant()) const;
+    void setAttribute(QBluetoothTransferRequest::Attribute code, const QVariant &value);
+    QBluetoothAddress address() const;
+    bool operator!=(const QBluetoothTransferRequest &other) const;
+    bool operator==(const QBluetoothTransferRequest &other) const;
+};
+
+%End
diff --git a/sip/QtBluetooth/qbluetoothuuid.sip b/sip/QtBluetooth/qbluetoothuuid.sip
new file mode 100644
index 0000000..02a41ca
--- /dev/null
+++ b/sip/QtBluetooth/qbluetoothuuid.sip
@@ -0,0 +1,158 @@
+// qbluetoothuuid.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtBluetooth Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QBluetoothUuid : QUuid
+{
+%TypeHeaderCode
+#include <qbluetoothuuid.h>
+%End
+
+public:
+    enum ProtocolUuid
+    {
+        Sdp,
+        Udp,
+        Rfcomm,
+        Tcp,
+        TcsBin,
+        TcsAt,
+        Att,
+        Obex,
+        Ip,
+        Ftp,
+        Http,
+        Wsp,
+        Bnep,
+        Upnp,
+        Hidp,
+        HardcopyControlChannel,
+        HardcopyDataChannel,
+        HardcopyNotification,
+        Avctp,
+        Avdtp,
+        Cmtp,
+        UdiCPlain,
+        McapControlChannel,
+        McapDataChannel,
+        L2cap,
+    };
+
+    enum ServiceClassUuid
+    {
+        ServiceDiscoveryServer,
+        BrowseGroupDescriptor,
+        PublicBrowseGroup,
+        SerialPort,
+        LANAccessUsingPPP,
+        DialupNetworking,
+        IrMCSync,
+        ObexObjectPush,
+        OBEXFileTransfer,
+        IrMCSyncCommand,
+        Headset,
+        AudioSource,
+        AudioSink,
+        AV_RemoteControlTarget,
+        AdvancedAudioDistribution,
+        AV_RemoteControl,
+        AV_RemoteControlController,
+        HeadsetAG,
+        PANU,
+        NAP,
+        GN,
+        DirectPrinting,
+        ReferencePrinting,
+        ImagingResponder,
+        ImagingAutomaticArchive,
+        ImagingReferenceObjects,
+        Handsfree,
+        HandsfreeAudioGateway,
+        DirectPrintingReferenceObjectsService,
+        ReflectedUI,
+        BasicPrinting,
+        PrintingStatus,
+        HumanInterfaceDeviceService,
+        HardcopyCableReplacement,
+        HCRPrint,
+        HCRScan,
+        SIMAccess,
+        PhonebookAccessPCE,
+        PhonebookAccessPSE,
+        PhonebookAccess,
+        HeadsetHS,
+        MessageAccessServer,
+        MessageNotificationServer,
+        MessageAccessProfile,
+        PnPInformation,
+        GenericNetworking,
+        GenericFileTransfer,
+        GenericAudio,
+        GenericTelephony,
+        VideoSource,
+        VideoSink,
+        VideoDistribution,
+        HDP,
+        HDPSource,
+        HDPSink,
+%If (Qt_5_3_0 -)
+        BasicImage,
+%End
+%If (Qt_5_3_0 -)
+        GNSS,
+%End
+%If (Qt_5_3_0 -)
+        GNSSServer,
+%End
+%If (Qt_5_3_0 -)
+        Display3D,
+%End
+%If (Qt_5_3_0 -)
+        Glasses3D,
+%End
+%If (Qt_5_3_0 -)
+        Synchronization3D,
+%End
+%If (Qt_5_3_0 -)
+        MPSProfile,
+%End
+%If (Qt_5_3_0 -)
+        MPSService,
+%End
+    };
+
+    QBluetoothUuid();
+    explicit QBluetoothUuid(quint32 uuid);
+    explicit QBluetoothUuid(quint128 uuid);
+    explicit QBluetoothUuid(const QString &uuid);
+    QBluetoothUuid(const QBluetoothUuid &uuid);
+    QBluetoothUuid(const QUuid &uuid);
+    ~QBluetoothUuid();
+    bool operator==(const QBluetoothUuid &other) const;
+    int minimumSize() const;
+    quint16 toUInt16(bool *ok = 0) const;
+    quint32 toUInt32(bool *ok = 0) const;
+    quint128 toUInt128() const;
+};
+
+%End
diff --git a/sip/QtBluetooth/qpybluetooth_qlist.sip b/sip/QtBluetooth/qpybluetooth_qlist.sip
new file mode 100644
index 0000000..a0ca8f5
--- /dev/null
+++ b/sip/QtBluetooth/qpybluetooth_qlist.sip
@@ -0,0 +1,234 @@
+// This is the SIP interface definition for the QList based mapped types
+// specific to the QtBluetooth module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%MappedType QList<quint16> /DocType="list-of-int"/
+{
+%TypeHeaderCode
+#include <qlist.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        // Convert to a Python long to make sure it doesn't get interpreted as
+        // a signed value.
+        PyObject *pobj = PyLong_FromUnsignedLongLong(sipCpp->value(i));
+
+        if (!pobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<quint16> *qv = new QList<quint16>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qv;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        PyErr_Clear();
+        unsigned long val = PyLong_AsUnsignedLongMask(itm);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'int' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete qv;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        qv->append(val);
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = qv;
+
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+// QBluetoothServiceInfo::Sequence is actually a sub-class of QList<QVariant>.
+// Note that QBluetoothServiceInfo::Alternative is identical and they are both
+// syntactic sugar.  By ignoring methods using the latter then everything works
+// as expected.
+%MappedType QBluetoothServiceInfo::Sequence /DocType="list-of-object"/
+{
+%TypeHeaderCode
+#include <qbluetoothserviceinfo.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        QVariant *t = new QVariant(sipCpp->at(i));
+        PyObject *tobj = sipConvertFromNewType(t, sipType_QVariant,
+                sipTransferObj);
+
+        if (!tobj)
+        {
+            delete t;
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, tobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QBluetoothServiceInfo::Sequence *ql = new QBluetoothServiceInfo::Sequence;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        int state;
+        QVariant *t = reinterpret_cast<QVariant *>(
+                sipForceConvertToType(itm, sipType_QVariant, sipTransferObj,
+                        SIP_NOT_NONE, &state, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but '_TYPE_' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        ql->append(*t);
+
+        sipReleaseType(t, sipType_QVariant, state);
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = ql;
+
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtBluetooth/qpybluetooth_quint128.sip b/sip/QtBluetooth/qpybluetooth_quint128.sip
new file mode 100644
index 0000000..c9160a8
--- /dev/null
+++ b/sip/QtBluetooth/qpybluetooth_quint128.sip
@@ -0,0 +1,115 @@
+// This is the SIP interface definition for the quint128 mapped type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%MappedType quint128 /DocType="16-tuple-of-int"/
+{
+%TypeHeaderCode
+#include <qbluetoothuuid.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *t = PyTuple_New(16);
+
+    if (!t)
+        return 0;
+
+    for (SIP_SSIZE_T i = 0; i < 16; ++i)
+    {
+        // Convert to a Python long to make sure it doesn't get interpreted as
+        // a signed value.
+        PyObject *pobj = PyLong_FromUnsignedLong(sipCpp->data[i]);
+
+        if (!pobj)
+        {
+            Py_DECREF(t);
+
+            return 0;
+        }
+
+        PyTuple_SET_ITEM(t, i, pobj);
+    }
+
+    return t;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return (PySequence_Check(sipPy)
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+
+    SIP_SSIZE_T len = PySequence_Size(sipPy);
+
+    if (len != 16)
+    {
+        // A negative length should only be an internal error so let the
+        // original exception stand.
+        if (len >= 0)
+            PyErr_Format(PyExc_TypeError,
+                    "sequence has " SIP_SSIZE_T_FORMAT " elements but 16 elements are expected",
+                    len);
+
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    quint128 *qv = new quint128;
+
+    for (SIP_SSIZE_T i = 0; i < 16; ++i)
+    {
+        PyObject *itm = PySequence_ITEM(sipPy, i);
+
+        if (!itm)
+        {
+            delete qv;
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        PyErr_Clear();
+        unsigned long val = PyLong_AsUnsignedLongMask(itm);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "element " SIP_SSIZE_T_FORMAT " has type '%s' but 'int' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete qv;
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        qv->data[i] = val;
+
+        Py_DECREF(itm);
+    }
+
+    *sipCppPtr = qv;
+
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtCore/QtCoremod.sip b/sip/QtCore/QtCoremod.sip
new file mode 100644
index 0000000..4c31a29
--- /dev/null
+++ b/sip/QtCore/QtCoremod.sip
@@ -0,0 +1,214 @@
+// QtCoremod.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtCore, call_super_init=True, keyword_arguments="Optional", version=1)
+
+%Timeline {Qt_5_0_0 Qt_5_0_1 Qt_5_0_2 Qt_5_1_0 Qt_5_1_1 Qt_5_2_0 Qt_5_2_1 Qt_5_3_0 Qt_5_3_1}
+
+%Platforms {WS_X11 WS_WIN WS_MACX}
+
+%Feature PyQt_Accessibility
+%Feature PyQt_SessionManager
+%Feature PyQt_SSL
+%Feature PyQt_qreal_double
+%Feature Py_v3
+%Feature PyQt_PrintDialog
+%Feature PyQt_Printer
+%Feature PyQt_PrintPreviewWidget
+%Feature PyQt_PrintPreviewDialog
+%Feature PyQt_RawFont
+%Feature PyQt_OpenGL
+%Feature PyQt_Desktop_OpenGL
+%Feature PyQt_NotBootstrapped
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%Plugin PyQt5
+
+%If (Py_v3)
+%DefaultEncoding "ASCII"
+%End
+
+%If (!Py_v3)
+// Hook into the VendorID package if it is enabled.
+%Feature VendorID
+
+%If (VendorID)
+
+%ModuleCode
+#include <vendorid.h>
+%End
+
+%PreInitialisationCode
+    if (!vendorid_check())
+    {
+        PyErr_SetString(PyExc_RuntimeError, "PyQt cannot be used with this Python interpreter");
+        return;
+    }
+%End
+
+%End
+
+%End
+
+
+%Include(name=pyqt-internal.sip5, optional=True)
+%Include(name=pyqt-gpl.sip5, optional=True)
+%Include(name=pyqt-commercial.sip5, optional=True)
+
+%DefaultMetatype PyQt5.QtCore.pyqtWrapperType
+%DefaultSupertype sip.simplewrapper
+
+%Include qglobal.sip
+%Include qnamespace.sip
+%Include qabstractanimation.sip
+%Include qabstracteventdispatcher.sip
+%Include qabstractitemmodel.sip
+%Include qabstractnativeeventfilter.sip
+%Include qabstractproxymodel.sip
+%Include qabstractstate.sip
+%Include qabstracttransition.sip
+%Include qanimationgroup.sip
+%Include qbasictimer.sip
+%Include qbitarray.sip
+%Include qbuffer.sip
+%Include qbytearray.sip
+%Include qbytearraymatcher.sip
+%Include qchar.sip
+%Include qcollator.sip
+%Include qcommandlineoption.sip
+%Include qcommandlineparser.sip
+%Include qcoreapplication.sip
+%Include qcoreevent.sip
+%Include qcryptographichash.sip
+%Include qdatastream.sip
+%Include qdatetime.sip
+%Include qdir.sip
+%Include qdiriterator.sip
+%Include qeasingcurve.sip
+%Include qelapsedtimer.sip
+%Include qeventloop.sip
+%Include qeventtransition.sip
+%Include qfile.sip
+%Include qfiledevice.sip
+%Include qfileinfo.sip
+%Include qfileselector.sip
+%Include qfilesystemwatcher.sip
+%Include qfinalstate.sip
+%Include qhistorystate.sip
+%Include qidentityproxymodel.sip
+%Include qiodevice.sip
+%Include qitemselectionmodel.sip
+%Include qjsondocument.sip
+%Include qjsonvalue.sip
+%Include qlibrary.sip
+%Include qlibraryinfo.sip
+%Include qline.sip
+%Include qlocale.sip
+%Include qlockfile.sip
+%Include qlogging.sip
+%Include qmargins.sip
+%Include qmessageauthenticationcode.sip
+%Include qmetaobject.sip
+%Include qmetatype.sip
+%Include qmimedata.sip
+%Include qmimedatabase.sip
+%Include qmimetype.sip
+%Include qmutex.sip
+%Include qnumeric.sip
+%Include qobject.sip
+%Include qobjectcleanuphandler.sip
+%Include qobjectdefs.sip
+%Include qparallelanimationgroup.sip
+%Include qpauseanimation.sip
+%Include qpropertyanimation.sip
+%Include qpluginloader.sip
+%Include qpoint.sip
+%Include qprocess.sip
+%Include qreadwritelock.sip
+%Include qrect.sip
+%Include qregexp.sip
+%Include qregularexpression.sip
+%Include qresource.sip
+%Include qrunnable.sip
+%Include qsavefile.sip
+%Include qsemaphore.sip
+%Include qsequentialanimationgroup.sip
+%Include qsettings.sip
+%Include qsharedmemory.sip
+%Include qsignalmapper.sip
+%Include qsignaltransition.sip
+%Include qsize.sip
+%Include qsocketnotifier.sip
+%Include qsortfilterproxymodel.sip
+%Include qstandardpaths.sip
+%Include qstate.sip
+%Include qstatemachine.sip
+%Include qstring.sip
+%Include qstringlistmodel.sip
+%Include qsystemsemaphore.sip
+%Include qtemporarydir.sip
+%Include qtemporaryfile.sip
+%Include qtextboundaryfinder.sip
+%Include qtextcodec.sip
+%Include qtextstream.sip
+%Include qthread.sip
+%Include qthreadpool.sip
+%Include qtimeline.sip
+%Include qtimer.sip
+%Include qtimezone.sip
+%Include qtranslator.sip
+%Include qurl.sip
+%Include qurlquery.sip
+%Include quuid.sip
+%Include qvariant.sip
+%Include qvariantanimation.sip
+%Include qwaitcondition.sip
+%Include qxmlstream.sip
+%Include qjsonarray.sip
+%Include qjsonobject.sip
+%Include qpycore_qhash.sip
+%Include qpycore_qlist.sip
+%Include qpycore_qmap.sip
+%Include qpycore_qpair.sip
+%Include qpycore_qset.sip
+%Include qpycore_qvector.sip
+%Include qstringlist.sip
+%Include qsysinfo.sip
+%Include qwineventnotifier.sip
diff --git a/sip/QtCore/qabstractanimation.sip b/sip/QtCore/qabstractanimation.sip
new file mode 100644
index 0000000..6b755e7
--- /dev/null
+++ b/sip/QtCore/qabstractanimation.sip
@@ -0,0 +1,85 @@
+// qabstractanimation.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractAnimation : QObject
+{
+%TypeHeaderCode
+#include <qabstractanimation.h>
+%End
+
+public:
+    enum Direction
+    {
+        Forward,
+        Backward,
+    };
+
+    enum State
+    {
+        Stopped,
+        Paused,
+        Running,
+    };
+
+    enum DeletionPolicy
+    {
+        KeepWhenStopped,
+        DeleteWhenStopped,
+    };
+
+    QAbstractAnimation(QObject *parent /TransferThis/ = 0);
+    virtual ~QAbstractAnimation();
+    QAbstractAnimation::State state() const;
+    QAnimationGroup *group() const;
+    QAbstractAnimation::Direction direction() const;
+    void setDirection(QAbstractAnimation::Direction direction);
+    int currentTime() const;
+    int currentLoopTime() const;
+    int loopCount() const;
+    void setLoopCount(int loopCount);
+    int currentLoop() const;
+    virtual int duration() const = 0;
+    int totalDuration() const;
+
+signals:
+    void finished();
+    void stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
+    void currentLoopChanged(int currentLoop);
+    void directionChanged(QAbstractAnimation::Direction);
+
+public slots:
+    void start(QAbstractAnimation::DeletionPolicy policy = QAbstractAnimation::KeepWhenStopped);
+    void pause();
+    void resume();
+    void setPaused(bool);
+    void stop();
+    void setCurrentTime(int msecs);
+
+protected:
+    virtual bool event(QEvent *event);
+    virtual void updateCurrentTime(int currentTime) = 0;
+    virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
+    virtual void updateDirection(QAbstractAnimation::Direction direction);
+
+private:
+    QAbstractAnimation(const QAbstractAnimation &);
+};
diff --git a/sip/QtCore/qabstracteventdispatcher.sip b/sip/QtCore/qabstracteventdispatcher.sip
new file mode 100644
index 0000000..123f826
--- /dev/null
+++ b/sip/QtCore/qabstracteventdispatcher.sip
@@ -0,0 +1,73 @@
+// qabstracteventdispatcher.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractEventDispatcher : QObject
+{
+%TypeHeaderCode
+#include <qabstracteventdispatcher.h>
+%End
+
+public:
+    struct TimerInfo
+    {
+%TypeHeaderCode
+#include <qabstracteventdispatcher.h>
+%End
+
+        int timerId;
+        int interval;
+        Qt::TimerType timerType;
+        TimerInfo(int id, int i, Qt::TimerType t);
+    };
+
+    explicit QAbstractEventDispatcher(QObject *parent /TransferThis/ = 0);
+    virtual ~QAbstractEventDispatcher();
+    static QAbstractEventDispatcher *instance(QThread *thread = 0);
+    virtual bool processEvents(QFlags<QEventLoop::ProcessEventsFlag> flags) = 0 /ReleaseGIL/;
+    virtual bool hasPendingEvents() = 0;
+    virtual void registerSocketNotifier(QSocketNotifier *notifier) = 0;
+    virtual void unregisterSocketNotifier(QSocketNotifier *notifier) = 0;
+    int registerTimer(int interval, Qt::TimerType timerType /Constrained/, QObject *object);
+    virtual void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object) = 0;
+    virtual bool unregisterTimer(int timerId) = 0;
+    virtual bool unregisterTimers(QObject *object) = 0;
+    virtual QList<QAbstractEventDispatcher::TimerInfo> registeredTimers(QObject *object) const = 0;
+    virtual void wakeUp() = 0;
+    virtual void interrupt() = 0;
+    virtual void flush() = 0;
+    virtual void startingUp();
+    virtual void closingDown();
+    virtual int remainingTime(int timerId) = 0;
+    void installNativeEventFilter(QAbstractNativeEventFilter *filterObj);
+    void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj);
+%If (WS_WIN)
+    virtual bool registerEventNotifier(QWinEventNotifier *notifier) = 0;
+%End
+%If (WS_WIN)
+    virtual void unregisterEventNotifier(QWinEventNotifier *notifier) = 0;
+%End
+    bool filterNativeEvent(const QByteArray &eventType, void *message, long *result);
+
+signals:
+    void aboutToBlock();
+    void awake();
+};
diff --git a/sip/QtCore/qabstractitemmodel.sip b/sip/QtCore/qabstractitemmodel.sip
new file mode 100644
index 0000000..986aa7e
--- /dev/null
+++ b/sip/QtCore/qabstractitemmodel.sip
@@ -0,0 +1,304 @@
+// qabstractitemmodel.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QModelIndex
+{
+%TypeHeaderCode
+#include <qabstractitemmodel.h>
+%End
+
+public:
+    QModelIndex();
+    QModelIndex child(int arow, int acolumn) const;
+    int row() const;
+    int column() const;
+    QVariant data(int role = Qt::DisplayRole) const;
+    Qt::ItemFlags flags() const;
+    SIP_PYOBJECT internalPointer() const;
+%MethodCode
+        sipRes = reinterpret_cast<PyObject *>(sipCpp->internalPointer());
+        
+        if (!sipRes)
+            sipRes = Py_None;
+        
+        Py_INCREF(sipRes);
+%End
+
+    SIP_PYOBJECT internalId() const /DocType="int"/;
+%MethodCode
+        // Python needs to treat the result as an unsigned value (which may not happen
+        // on 64 bit systems).  Instead we get the real value as it is stored (as a
+        // void *) and let Python convert that.
+        sipRes = PyLong_FromVoidPtr(sipCpp->internalPointer());
+%End
+
+    const QAbstractItemModel *model() const;
+    bool isValid() const;
+    QModelIndex parent() const;
+    QModelIndex sibling(int arow, int acolumn) const;
+    bool operator==(const QModelIndex &other) const;
+    bool operator<(const QModelIndex &other) const;
+    bool operator!=(const QModelIndex &other) const;
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+};
+
+class QPersistentModelIndex
+{
+%TypeHeaderCode
+#include <qabstractitemmodel.h>
+%End
+
+public:
+    QPersistentModelIndex();
+    QPersistentModelIndex(const QModelIndex &index);
+    QPersistentModelIndex(const QPersistentModelIndex &other);
+    ~QPersistentModelIndex();
+    int row() const;
+    int column() const;
+    QVariant data(int role = Qt::DisplayRole) const;
+    Qt::ItemFlags flags() const;
+    QModelIndex parent() const;
+    QModelIndex sibling(int row, int column) const;
+    QModelIndex child(int row, int column) const;
+    const QAbstractItemModel *model() const;
+    bool isValid() const;
+    void swap(QPersistentModelIndex &other);
+    operator const QModelIndex &() const;
+    bool operator<(const QPersistentModelIndex &other) const;
+    bool operator==(const QPersistentModelIndex &other) const;
+    bool operator==(const QModelIndex &other) const;
+    bool operator!=(const QPersistentModelIndex &other) const;
+    bool operator!=(const QModelIndex &other) const;
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+};
+
+typedef QList<QModelIndex> QModelIndexList;
+
+class QAbstractItemModel : QObject
+{
+%TypeHeaderCode
+#include <qabstractitemmodel.h>
+%End
+
+public:
+    enum LayoutChangeHint
+    {
+        NoLayoutChangeHint,
+        VerticalSortHint,
+        HorizontalSortHint,
+    };
+
+    explicit QAbstractItemModel(QObject *parent /TransferThis/ = 0);
+    virtual ~QAbstractItemModel();
+    bool hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+    virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const = 0;
+    virtual QModelIndex parent(const QModelIndex &child) const = 0;
+    QObject *parent() const;
+    virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0;
+    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0;
+    virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
+    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0;
+    virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+    virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+    virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole);
+    virtual QMap<int, QVariant> itemData(const QModelIndex &index) const /DocType="dict-of-int-object"/;
+    virtual bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles /DocType="dict-of-int-object"/);
+    virtual QStringList mimeTypes() const;
+    virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/;
+    virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+    virtual Qt::DropActions supportedDropActions() const;
+    virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    virtual void fetchMore(const QModelIndex &parent);
+    virtual bool canFetchMore(const QModelIndex &parent) const;
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+    virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+    virtual QModelIndex buddy(const QModelIndex &index) const;
+    virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchStartsWith|Qt::MatchWrap) const;
+    virtual QSize span(const QModelIndex &index) const;
+
+signals:
+    void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles /DocValue="list-of-int"/ = QVector<int>());
+    void headerDataChanged(Qt::Orientation orientation, int first, int last);
+    void layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents /DocType="list-of-QPersistentModelIndex"/ = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint);
+    void layoutChanged(const QList<QPersistentModelIndex> &parents /DocType="list-of-QPersistentModelIndex"/ = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint);
+    void rowsAboutToBeInserted(const QModelIndex &parent, int first, int last);
+    void rowsInserted(const QModelIndex &parent, int first, int last);
+    void rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last);
+    void rowsRemoved(const QModelIndex &parent, int first, int last);
+    void columnsAboutToBeInserted(const QModelIndex &parent, int first, int last);
+    void columnsInserted(const QModelIndex &parent, int first, int last);
+    void columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last);
+    void columnsRemoved(const QModelIndex &parent, int first, int last);
+    void modelAboutToBeReset();
+    void modelReset();
+
+public slots:
+    virtual bool submit();
+    virtual void revert();
+
+protected:
+    void encodeData(const QModelIndexList &indexes, QDataStream &stream) const;
+    bool decodeData(int row, int column, const QModelIndex &parent, QDataStream &stream);
+    void beginInsertRows(const QModelIndex &parent, int first, int last);
+    void endInsertRows();
+    void beginRemoveRows(const QModelIndex &parent, int first, int last);
+    void endRemoveRows();
+    void beginInsertColumns(const QModelIndex &parent, int first, int last);
+    void endInsertColumns();
+    void beginRemoveColumns(const QModelIndex &parent, int first, int last);
+    void endRemoveColumns();
+    QModelIndexList persistentIndexList() const;
+    void changePersistentIndex(const QModelIndex &from, const QModelIndex &to);
+    void changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to);
+
+public:
+    bool insertRow(int row, const QModelIndex &parent = QModelIndex());
+    bool insertColumn(int column, const QModelIndex &parent = QModelIndex());
+    bool removeRow(int row, const QModelIndex &parent = QModelIndex());
+    bool removeColumn(int column, const QModelIndex &parent = QModelIndex());
+    virtual Qt::DropActions supportedDragActions() const;
+    virtual QHash<int, QByteArray> roleNames() const;
+
+protected:
+    QModelIndex createIndex(int row, int column, SIP_PYOBJECT object = 0) const [QModelIndex (int row, int column, void *object = 0)];
+%MethodCode
+        // The Qt API is broken (and won't be fixed as it would break binary
+        // compatibility) regarding the internal id of a model index on different
+        // architectures (32 vs 64 bits).  We choose to work around the breakage as it
+        // is fairly subtle and continues to catch people out.  Instead of letting Qt
+        // convert betweed an integer id and a pointer id (the internal format used by
+        // Qt) we let Python do it.
+        
+        void *ptr;
+        
+        if (a2)
+        {
+            // Try and convert it to a Python long and fallback to the object's
+            // address if it fails.
+            ptr = PyLong_AsVoidPtr(a2);
+        
+            if (PyErr_Occurred())
+            {
+                PyErr_Clear();
+                ptr = a2;
+            }
+        }
+        else
+        {
+            ptr = 0;
+        }
+        
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+        sipRes = new QModelIndex(sipCpp->createIndex(a0, a1, ptr));
+        #else
+        sipRes = new QModelIndex(sipCpp->sipProtect_createIndex(a0, a1, ptr));
+        #endif
+%End
+
+signals:
+    void rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow);
+    void rowsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row);
+    void columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn);
+    void columnsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int column);
+
+protected:
+    bool beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationRow);
+    void endMoveRows();
+    bool beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationColumn);
+    void endMoveColumns();
+    void beginResetModel();
+    void endResetModel();
+
+protected slots:
+%If (Qt_5_1_0 -)
+    void resetInternalData();
+%End
+
+public:
+    virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const;
+    virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild);
+    virtual bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild);
+    bool moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild);
+    bool moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild);
+
+private:
+    QAbstractItemModel(const QAbstractItemModel &);
+};
+
+class QAbstractTableModel : QAbstractItemModel
+{
+%TypeHeaderCode
+#include <qabstractitemmodel.h>
+%End
+
+public:
+    explicit QAbstractTableModel(QObject *parent /TransferThis/ = 0);
+    virtual ~QAbstractTableModel();
+    virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+    virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+%If (Qt_5_1_0 -)
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+%End
+%If (Qt_5_2_0 -)
+    QObject *parent() const;
+%End
+
+private:
+    QAbstractTableModel(const QAbstractTableModel &);
+    virtual QModelIndex parent(const QModelIndex &child) const;
+    virtual bool hasChildren(const QModelIndex &parent) const;
+};
+
+class QAbstractListModel : QAbstractItemModel
+{
+%TypeHeaderCode
+#include <qabstractitemmodel.h>
+%End
+
+public:
+    explicit QAbstractListModel(QObject *parent /TransferThis/ = 0);
+    virtual ~QAbstractListModel();
+    virtual QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const;
+    virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+%If (Qt_5_1_0 -)
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+%End
+%If (Qt_5_2_0 -)
+    QObject *parent() const;
+%End
+
+private:
+    QAbstractListModel(const QAbstractListModel &);
+    virtual QModelIndex parent(const QModelIndex &child) const;
+    virtual int columnCount(const QModelIndex &parent) const;
+    virtual bool hasChildren(const QModelIndex &parent) const;
+};
diff --git a/sip/QtCore/qabstractnativeeventfilter.sip b/sip/QtCore/qabstractnativeeventfilter.sip
new file mode 100644
index 0000000..2c4456b
--- /dev/null
+++ b/sip/QtCore/qabstractnativeeventfilter.sip
@@ -0,0 +1,36 @@
+// qabstractnativeeventfilter.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractNativeEventFilter
+{
+%TypeHeaderCode
+#include <qabstractnativeeventfilter.h>
+%End
+
+public:
+    QAbstractNativeEventFilter();
+    virtual ~QAbstractNativeEventFilter();
+    virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) = 0;
+
+private:
+    QAbstractNativeEventFilter(const QAbstractNativeEventFilter &);
+};
diff --git a/sip/QtCore/qabstractproxymodel.sip b/sip/QtCore/qabstractproxymodel.sip
new file mode 100644
index 0000000..0c8a5a5
--- /dev/null
+++ b/sip/QtCore/qabstractproxymodel.sip
@@ -0,0 +1,68 @@
+// qabstractproxymodel.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractProxyModel : QAbstractItemModel
+{
+%TypeHeaderCode
+#include <qabstractproxymodel.h>
+%End
+
+public:
+    explicit QAbstractProxyModel(QObject *parent /TransferThis/ = 0);
+    virtual ~QAbstractProxyModel();
+    virtual void setSourceModel(QAbstractItemModel *sourceModel /KeepReference/);
+    QAbstractItemModel *sourceModel() const;
+    virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const = 0;
+    virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const = 0;
+    virtual QItemSelection mapSelectionToSource(const QItemSelection &selection) const;
+    virtual QItemSelection mapSelectionFromSource(const QItemSelection &selection) const;
+    virtual bool submit();
+    virtual void revert();
+    virtual QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const;
+    virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+    virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+    virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole);
+    virtual QMap<int, QVariant> itemData(const QModelIndex &index) const /DocType="dict-of-int-object"/;
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+    virtual bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles /DocType="dict-of-int-object"/);
+    virtual QModelIndex buddy(const QModelIndex &index) const;
+    virtual bool canFetchMore(const QModelIndex &parent) const;
+    virtual void fetchMore(const QModelIndex &parent);
+    virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+    virtual QSize span(const QModelIndex &index) const;
+    virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
+    virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/;
+    virtual QStringList mimeTypes() const;
+    virtual Qt::DropActions supportedDropActions() const;
+    virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
+
+protected slots:
+%If (Qt_5_1_0 -)
+    void resetInternalData();
+%End
+
+signals:
+    void sourceModelChanged();
+
+private:
+    QAbstractProxyModel(const QAbstractProxyModel &);
+};
diff --git a/sip/QtCore/qabstractstate.sip b/sip/QtCore/qabstractstate.sip
new file mode 100644
index 0000000..8db843d
--- /dev/null
+++ b/sip/QtCore/qabstractstate.sip
@@ -0,0 +1,46 @@
+// qabstractstate.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractState : QObject
+{
+%TypeHeaderCode
+#include <qabstractstate.h>
+%End
+
+public:
+    virtual ~QAbstractState();
+    QState *parentState() const;
+    QStateMachine *machine() const;
+
+signals:
+    void entered();
+    void exited();
+
+protected:
+    QAbstractState(QState *parent /TransferThis/ = 0);
+    virtual void onEntry(QEvent *event) = 0;
+    virtual void onExit(QEvent *event) = 0;
+    virtual bool event(QEvent *e);
+
+private:
+    QAbstractState(const QAbstractState &);
+};
diff --git a/sip/QtCore/qabstracttransition.sip b/sip/QtCore/qabstracttransition.sip
new file mode 100644
index 0000000..578e044
--- /dev/null
+++ b/sip/QtCore/qabstracttransition.sip
@@ -0,0 +1,87 @@
+// qabstracttransition.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractTransition : QObject
+{
+%TypeHeaderCode
+#include <qabstracttransition.h>
+%End
+
+public:
+    QAbstractTransition(QState *sourceState /TransferThis/ = 0);
+    virtual ~QAbstractTransition();
+    QState *sourceState() const;
+    QAbstractState *targetState() const;
+    void setTargetState(QAbstractState *target /KeepReference=0/);
+    QList<QAbstractState*> targetStates() const;
+    void setTargetStates(const QList<QAbstractState*> &targets /KeepReference=0/);
+    QStateMachine *machine() const;
+    void addAnimation(QAbstractAnimation *animation /GetWrapper/);
+%MethodCode
+        // We want to keep a reference to the animation but this is in addition to the
+        // existing ones and does not replace them - so we can't use /KeepReference/.
+        sipCpp->addAnimation(a0);
+        
+        // Use the user object as a list of the references.
+        PyObject *user = ((sipSimpleWrapper *)sipSelf)->user;
+        
+        if (!user)
+            user = ((sipSimpleWrapper *)sipSelf)->user = PyList_New(0);
+        
+        if (user)
+            PyList_Append(user, a0Wrapper);
+%End
+
+    void removeAnimation(QAbstractAnimation *animation /GetWrapper/);
+%MethodCode
+        // Discard the extra animation reference that we took in addAnimation().
+        sipCpp->removeAnimation(a0);
+        
+        // Use the user object as a list of the references.
+        PyObject *user = ((sipSimpleWrapper *)sipSelf)->user;
+        
+        if (user)
+        {
+            Py_ssize_t i = 0;
+            
+            // Note that we deal with an object appearing in the list more than once.
+            while (i < PyList_GET_SIZE(user))
+                if (PyList_GET_ITEM(user, i) == a0Wrapper)
+                    PyList_SetSlice(user, i, i + 1, NULL);
+                else
+                    ++i;
+        }
+%End
+
+    QList<QAbstractAnimation*> animations() const;
+
+signals:
+    void triggered();
+
+protected:
+    virtual bool eventTest(QEvent *event) = 0;
+    virtual void onTransition(QEvent *event) = 0;
+    virtual bool event(QEvent *e);
+
+private:
+    QAbstractTransition(const QAbstractTransition &);
+};
diff --git a/sip/QtCore/qanimationgroup.sip b/sip/QtCore/qanimationgroup.sip
new file mode 100644
index 0000000..b898a0b
--- /dev/null
+++ b/sip/QtCore/qanimationgroup.sip
@@ -0,0 +1,46 @@
+// qanimationgroup.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAnimationGroup : QAbstractAnimation
+{
+%TypeHeaderCode
+#include <qanimationgroup.h>
+%End
+
+public:
+    QAnimationGroup(QObject *parent /TransferThis/ = 0);
+    virtual ~QAnimationGroup();
+    QAbstractAnimation *animationAt(int index) const;
+    int animationCount() const;
+    int indexOfAnimation(QAbstractAnimation *animation) const;
+    void addAnimation(QAbstractAnimation *animation /Transfer/);
+    void insertAnimation(int index, QAbstractAnimation *animation /Transfer/);
+    void removeAnimation(QAbstractAnimation *animation /TransferBack/);
+    QAbstractAnimation *takeAnimation(int index) /TransferBack/;
+    void clear();
+
+protected:
+    virtual bool event(QEvent *event);
+
+private:
+    QAnimationGroup(const QAnimationGroup &);
+};
diff --git a/sip/QtCore/qbasictimer.sip b/sip/QtCore/qbasictimer.sip
new file mode 100644
index 0000000..c23de36
--- /dev/null
+++ b/sip/QtCore/qbasictimer.sip
@@ -0,0 +1,37 @@
+// qbasictimer.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QBasicTimer
+{
+%TypeHeaderCode
+#include <qbasictimer.h>
+%End
+
+public:
+    QBasicTimer();
+    ~QBasicTimer();
+    bool isActive() const;
+    int timerId() const;
+    void start(int msec, Qt::TimerType timerType, QObject *obj);
+    void start(int msec, QObject *obj);
+    void stop();
+};
diff --git a/sip/QtCore/qbitarray.sip b/sip/QtCore/qbitarray.sip
new file mode 100644
index 0000000..a3e7000
--- /dev/null
+++ b/sip/QtCore/qbitarray.sip
@@ -0,0 +1,88 @@
+// qbitarray.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qbitarray.h>
+%End
+
+class QBitArray
+{
+%TypeHeaderCode
+#include <qbitarray.h>
+%End
+
+%TypeCode
+// This is needed by __hash__().
+#include <qhash.h>
+%End
+
+public:
+    QBitArray();
+    QBitArray(int size, bool value = false);
+    QBitArray(const QBitArray &other);
+    int size() const;
+    int count() const /__len__/;
+    bool isEmpty() const;
+    bool isNull() const;
+    void resize(int size);
+    void detach();
+    bool isDetached() const;
+    void clear();
+    QBitArray &operator&=(const QBitArray &);
+    QBitArray &operator|=(const QBitArray &);
+    QBitArray &operator^=(const QBitArray &);
+    QBitArray operator~() const;
+    bool operator==(const QBitArray &a) const;
+    bool operator!=(const QBitArray &a) const;
+    void fill(bool val, int first, int last);
+    void truncate(int pos);
+    bool fill(bool value, int size = -1);
+    bool testBit(int i) const;
+    void setBit(int i);
+    void clearBit(int i);
+    void setBit(int i, bool val);
+    bool toggleBit(int i);
+    bool operator[](int i) const;
+%MethodCode
+        SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
+        
+        if (idx < 0)
+            sipIsErr = 1;
+        else
+            sipRes = sipCpp->operator[]((int)idx);
+%End
+
+    bool at(int i) const;
+    int count(bool on) const;
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+
+    void swap(QBitArray &other);
+};
+
+QBitArray operator&(const QBitArray &, const QBitArray &);
+QBitArray operator|(const QBitArray &, const QBitArray &);
+QBitArray operator^(const QBitArray &, const QBitArray &);
+QDataStream &operator<<(QDataStream &, const QBitArray & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QBitArray & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtCore/qbuffer.sip b/sip/QtCore/qbuffer.sip
new file mode 100644
index 0000000..94dd259
--- /dev/null
+++ b/sip/QtCore/qbuffer.sip
@@ -0,0 +1,91 @@
+// qbuffer.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QBuffer : QIODevice
+{
+%TypeHeaderCode
+#include <qbuffer.h>
+%End
+
+public:
+    explicit QBuffer(QObject *parent /TransferThis/ = 0);
+    QBuffer(QByteArray *byteArray, QObject *parent /TransferThis/ = 0);
+    virtual ~QBuffer();
+    QByteArray &buffer();
+    const QByteArray &data() const;
+    void setBuffer(QByteArray *a);
+    void setData(const QByteArray &data);
+    void setData(const char *adata /Array/, int alen /ArraySize/);
+    virtual bool open(QFlags<QIODevice::OpenModeFlag> openMode);
+    virtual void close();
+    virtual qint64 size() const;
+    virtual qint64 pos() const;
+    virtual bool seek(qint64 off);
+    virtual bool atEnd() const;
+    virtual bool canReadLine() const;
+
+protected:
+    virtual SIP_PYOBJECT readData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QBuffer::readData(s, a0) : sipCpp->readData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/;
+    virtual void connectNotify(const QMetaMethod &);
+    virtual void disconnectNotify(const QMetaMethod &);
+
+private:
+    QBuffer(const QBuffer &);
+};
diff --git a/sip/QtCore/qbytearray.sip b/sip/QtCore/qbytearray.sip
new file mode 100644
index 0000000..37495bf
--- /dev/null
+++ b/sip/QtCore/qbytearray.sip
@@ -0,0 +1,418 @@
+// qbytearray.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qbytearray.h>
+%End
+
+quint16 qChecksum(const char *s /Array/, uint len /ArraySize/);
+
+class QByteArray
+{
+%TypeHeaderCode
+#include <qbytearray.h>
+%End
+
+%TypeCode
+// This is needed by __hash__().
+#include <qhash.h>
+
+
+// Convenience function for converting a QByteArray to a Python str object.
+static PyObject *QByteArrayToPyStr(QByteArray *ba)
+{
+    char *data = ba->data();
+
+    if (data)
+        // QByteArrays may have embedded '\0's so set the size explicitly.    
+        return SIPBytes_FromStringAndSize(data, ba->size());
+
+    return SIPBytes_FromString("");
+}
+%End
+
+%ConvertToTypeCode
+// We have to be very careful about what we allow to be converted to a
+// QByteArray and to a QString as we need to take into account the v1 and v2
+// APIs and Python v2.x and v3.x.
+//
+// QSvgRenderer() is a good example of what needs to work "naturally".  This
+// has a ctor that takes a QString argument that is the name of the SVG file.
+// It has another ctor that takes a QByteArray argument that is the SVG data.
+//
+// In Python v2.x we want a str object to be interpreted as the name of the
+// file (as that is the historical behaviour).  This has the following
+// implications.
+//
+// - The QString version of the ctor must appear before the QByteArray version
+//   in the .sip file.  This rule should be applied wherever a similar
+//   situation arises.
+// - A QString must not automatically convert a QByteArray.
+// - QByteArray must also exist in the v2 API.
+//
+// In Python v3.x we want a bytes object to be used wherever a QByteArray is
+// expected.  This means that a QString must not automatically convert a bytes
+// object.
+//
+// Qt uses QByteArray to represent binary data and also '\0' terminated C
+// strings.  If we only allowed a bytes object to be automatically converted to
+// a QByteArray then we would force such strings to be either explicitly
+// specified as bytes (ie. have a leading 'b') or wrapped in a call to the
+// QByteArray ctor - neither of which is very Pythonic.  We therefore allow a
+// Latin-1 encoded str object to be automatcially converted to a QByteArray.
+// For consistency we also allow a Python v2.x unicode object to be similarly
+// converted.
+
+if (sipIsErr == NULL)
+    return (PyByteArray_Check(sipPy) || PyUnicode_Check(sipPy) ||
+            SIPBytes_Check(sipPy) ||
+            sipCanConvertToType(sipPy, sipType_QByteArray, SIP_NO_CONVERTORS));
+
+if (PyByteArray_Check(sipPy))
+{
+    *sipCppPtr = new QByteArray(PyByteArray_AS_STRING(sipPy),
+            PyByteArray_GET_SIZE(sipPy));
+
+    return sipGetState(sipTransferObj);
+}
+
+if (PyUnicode_Check(sipPy))
+{
+    const char *bytes = sipString_AsLatin1String(&sipPy);
+
+    if (!sipPy)
+    {
+        *sipIsErr = 1;
+        return 0;
+    }
+
+    *sipCppPtr = new QByteArray(bytes);
+
+    Py_DECREF(sipPy);
+
+    return sipGetState(sipTransferObj);
+}
+
+if (SIPBytes_Check(sipPy))
+{
+    *sipCppPtr = new QByteArray(SIPBytes_AS_STRING(sipPy),
+            SIPBytes_GET_SIZE(sipPy));
+
+    return sipGetState(sipTransferObj);
+}
+
+*sipCppPtr = reinterpret_cast<QByteArray *>(sipConvertToType(sipPy,
+        sipType_QByteArray, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+return 0;
+%End
+
+%BIGetBufferCode
+    sipRes = PyBuffer_FillInfo(sipBuffer, sipSelf, sipCpp->data(), sipCpp->size(), 0, sipFlags);
+%End
+
+%BIGetReadBufferCode
+    if (sipSegment != 0)
+    {
+        PyErr_SetString(PyExc_SystemError, "accessing non-existent QByteArray segment");
+        sipRes = -1;
+    }
+    else
+    {
+        *sipPtrPtr = (void *)sipCpp->data();
+        sipRes = sipCpp->size();
+    }
+%End
+
+%BIGetSegCountCode
+    if (sipLenPtr)
+        *sipLenPtr = sipCpp->size();
+    
+    sipRes = 1;
+%End
+
+%BIGetCharBufferCode
+    if (sipSegment != 0)
+    {
+        PyErr_SetString(PyExc_SystemError, "accessing non-existent QByteArray segment");
+        sipRes = -1;
+    }
+    else
+    {
+        *sipPtrPtr = (void *)sipCpp->data();
+        sipRes = sipCpp->size();
+    }
+%End
+
+%PickleCode
+    #if PY_MAJOR_VERSION >= 3
+    sipRes = Py_BuildValue((char *)"(y#)", sipCpp->data(), sipCpp->size());
+    #else
+    sipRes = Py_BuildValue((char *)"(s#)", sipCpp->data(), sipCpp->size());
+    #endif
+%End
+
+public:
+    QByteArray();
+    QByteArray(int size, char c);
+    QByteArray(const QByteArray &a);
+    ~QByteArray();
+    void resize(int size);
+    QByteArray &fill(char ch, int size = -1);
+    void clear();
+    int indexOf(const QByteArray &ba, int from = 0) const;
+    int indexOf(const QString &str, int from = 0) const;
+    int lastIndexOf(const QByteArray &ba, int from = -1) const;
+    int lastIndexOf(const QString &str, int from = -1) const;
+    int count(const QByteArray &a) const;
+    QByteArray left(int len) const;
+    QByteArray right(int len) const;
+    QByteArray mid(int pos, int length = -1) const;
+    bool startsWith(const QByteArray &a) const;
+    bool endsWith(const QByteArray &a) const;
+    void truncate(int pos);
+    void chop(int n);
+    QByteArray toLower() const;
+    QByteArray toUpper() const;
+    QByteArray trimmed() const;
+    QByteArray simplified() const;
+    QByteArray leftJustified(int width, char fill = ' ', bool truncate = false) const;
+    QByteArray rightJustified(int width, char fill = ' ', bool truncate = false) const;
+    QByteArray &prepend(const QByteArray &a);
+    QByteArray &append(const QByteArray &a);
+    QByteArray &append(const QString &s);
+    QByteArray &insert(int i, const QByteArray &a);
+    QByteArray &insert(int i, const QString &s);
+    QByteArray &remove(int index, int len);
+    QByteArray &replace(int index, int len, const QByteArray &s);
+    QByteArray &replace(const QByteArray &before, const QByteArray &after);
+    QByteArray &replace(const QString &before, const QByteArray &after);
+    QList<QByteArray> split(char sep) const;
+    QByteArray &operator+=(const QByteArray &a);
+    QByteArray &operator+=(const QString &s);
+    bool operator==(const QString &s2) const;
+    bool operator!=(const QString &s2) const;
+    bool operator<(const QString &s2) const;
+    bool operator>(const QString &s2) const;
+    bool operator<=(const QString &s2) const;
+    bool operator>=(const QString &s2) const;
+    short toShort(bool *ok = 0, int base = 10) const;
+    ushort toUShort(bool *ok = 0, int base = 10) const;
+    int toInt(bool *ok = 0, int base = 10) const;
+    uint toUInt(bool *ok = 0, int base = 10) const;
+    long toLong(bool *ok = 0, int base = 10) const;
+    ulong toULong(bool *ok = 0, int base = 10) const;
+    qlonglong toLongLong(bool *ok = 0, int base = 10) const;
+    qulonglong toULongLong(bool *ok = 0, int base = 10) const;
+    float toFloat(bool *ok = 0) const;
+    double toDouble(bool *ok = 0) const;
+    QByteArray toBase64() const;
+    QByteArray &setNum(int n /Constrained/, int base = 10);
+    QByteArray &setNum(double n /Constrained/, char format = 'g', int precision = 6);
+    QByteArray &setNum(qlonglong n, int base = 10);
+    QByteArray &setNum(qulonglong n, int base = 10);
+    static QByteArray number(int n /Constrained/, int base = 10);
+    static QByteArray number(double n /Constrained/, char format = 'g', int precision = 6);
+    static QByteArray number(qlonglong n, int base = 10);
+    static QByteArray number(qulonglong n, int base = 10);
+    static QByteArray fromBase64(const QByteArray &base64);
+    static QByteArray fromRawData(const char * /Array/, int size /ArraySize/);
+    static QByteArray fromHex(const QByteArray &hexEncoded);
+    int count() const /__len__/;
+    int length() const;
+    bool isNull() const;
+    int size() const;
+    char at(int i) const;
+    char operator[](int i) const;
+%MethodCode
+        SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
+        
+        if (idx < 0)
+            sipIsErr = 1;
+        else
+            sipRes = sipCpp->operator[]((int)idx);
+%End
+
+    QByteArray operator[](SIP_PYSLICE slice) const;
+%MethodCode
+        SIP_SSIZE_T len, start, stop, step, slicelength, i;
+        
+        len = sipCpp->length();
+        
+        #if PY_VERSION_HEX >= 0x03020000
+        if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+        #else
+        if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+        #endif
+            sipIsErr = 1;
+        else
+        {
+            sipRes = new QByteArray();
+        
+            for (i = 0; i < slicelength; ++i)
+            {
+                sipRes -> append(sipCpp->at(start));
+                start += step;
+            }
+        }
+%End
+
+    int __contains__(const QByteArray &a) const;
+%MethodCode
+        // It looks like you can't assign QBool to int.
+        sipRes = bool(sipCpp->contains(*a0));
+%End
+
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+
+    SIP_PYOBJECT __str__() const /DocType="str"/;
+%MethodCode
+        sipRes = QByteArrayToPyStr(sipCpp);
+        
+        #if PY_MAJOR_VERSION >= 3
+        PyObject *repr = PyObject_Repr(sipRes);
+        
+        if (repr)
+        {
+            Py_DECREF(sipRes);
+            sipRes = repr;
+        }
+        #endif
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QByteArray()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QByteArray()");
+        #endif
+        }
+        else
+        {
+            PyObject *str = QByteArrayToPyStr(sipCpp);
+        
+            if (str)
+            {
+        #if PY_MAJOR_VERSION >= 3
+                sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QByteArray(%R)", str);
+        #else
+                sipRes = PyString_FromString("PyQt5.QtCore.QByteArray(");
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(str));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        
+                Py_DECREF(str);
+            }
+        }
+%End
+
+    QByteArray operator*(int m) const;
+%MethodCode
+        sipRes = new QByteArray();
+        
+        while (a0-- > 0)
+            *sipRes += *sipCpp;
+%End
+
+    QByteArray &operator*=(int m);
+%MethodCode
+        QByteArray orig(*sipCpp);
+        
+        sipCpp->clear();
+        
+        while (a0-- > 0)
+            *sipCpp += orig;
+%End
+
+    bool isEmpty() const;
+    SIP_PYOBJECT data() /DocType="Py_v3:bytes;str"/;
+%MethodCode
+        // QByteArrays may contain embedded '\0's so set the size explicitly.
+        
+        char *res = sipCpp->data();
+        int len = sipCpp->size();
+        
+        if (res)
+        {
+            if ((sipRes = SIPBytes_FromStringAndSize(res, len)) == NULL)
+                sipIsErr = 1;
+        }
+        else
+        {
+            Py_INCREF(Py_None);
+            sipRes = Py_None;
+        }
+%End
+
+    int capacity() const;
+    void reserve(int size);
+    void squeeze();
+    void push_back(const QByteArray &a);
+    void push_front(const QByteArray &a);
+    bool contains(const QByteArray &a) const;
+    QByteArray toHex() const;
+    QByteArray toPercentEncoding(const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray(), char percent = '%') const;
+    static QByteArray fromPercentEncoding(const QByteArray &input, char percent = '%');
+    QByteArray repeated(int times) const;
+    void swap(QByteArray &other);
+%If (Qt_5_2_0 -)
+
+    enum Base64Option
+    {
+        Base64Encoding,
+        Base64UrlEncoding,
+        KeepTrailingEquals,
+        OmitTrailingEquals,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+    typedef QFlags<QByteArray::Base64Option> Base64Options;
+%End
+%If (Qt_5_2_0 -)
+    QByteArray toBase64(QFlags<QByteArray::Base64Option> options) const;
+%End
+%If (Qt_5_2_0 -)
+    static QByteArray fromBase64(const QByteArray &base64, QFlags<QByteArray::Base64Option> options);
+%End
+};
+
+bool operator==(const QByteArray &a1, const QByteArray &a2);
+bool operator!=(const QByteArray &a1, const QByteArray &a2);
+bool operator<(const QByteArray &a1, const QByteArray &a2);
+bool operator<=(const QByteArray &a1, const QByteArray &a2);
+bool operator>(const QByteArray &a1, const QByteArray &a2);
+bool operator>=(const QByteArray &a1, const QByteArray &a2);
+const QByteArray operator+(const QByteArray &a1, const QByteArray &a2);
+QDataStream &operator<<(QDataStream &, const QByteArray & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QByteArray & /Constrained/) /ReleaseGIL/;
+QByteArray qCompress(const QByteArray &data, int compressionLevel = -1);
+QByteArray qUncompress(const QByteArray &data);
+%If (Qt_5_2_0 -)
+QFlags<QByteArray::Base64Option> operator|(QByteArray::Base64Option f1, QFlags<QByteArray::Base64Option> f2);
+%End
diff --git a/sip/QtCore/qbytearraymatcher.sip b/sip/QtCore/qbytearraymatcher.sip
new file mode 100644
index 0000000..f4e802c
--- /dev/null
+++ b/sip/QtCore/qbytearraymatcher.sip
@@ -0,0 +1,37 @@
+// qbytearraymatcher.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QByteArrayMatcher
+{
+%TypeHeaderCode
+#include <qbytearraymatcher.h>
+%End
+
+public:
+    QByteArrayMatcher();
+    explicit QByteArrayMatcher(const QByteArray &pattern);
+    QByteArrayMatcher(const QByteArrayMatcher &other);
+    ~QByteArrayMatcher();
+    void setPattern(const QByteArray &pattern);
+    int indexIn(const QByteArray &ba, int from = 0) const;
+    QByteArray pattern() const;
+};
diff --git a/sip/QtCore/qchar.sip b/sip/QtCore/qchar.sip
new file mode 100644
index 0000000..6c5447e
--- /dev/null
+++ b/sip/QtCore/qchar.sip
@@ -0,0 +1,71 @@
+// qchar.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+// QChar mapped type.
+%MappedType QChar /DocType="str"/
+{
+%TypeHeaderCode
+#include <qchar.h>
+%End
+
+%ConvertToTypeCode
+if (sipIsErr == NULL)
+#if PY_MAJOR_VERSION < 3
+    return (PyString_Check(sipPy) || PyUnicode_Check(sipPy));
+#else
+    return PyUnicode_Check(sipPy);
+#endif
+
+#if PY_MAJOR_VERSION < 3
+if (PyString_Check(sipPy))
+{
+    if (PyString_GET_SIZE(sipPy) != 1)
+    {
+        PyErr_SetString(PyExc_ValueError, "string of length 1 expected");
+        *sipIsErr = 1;
+        return 0;
+    }
+
+    *sipCppPtr = new QChar(*PyString_AS_STRING(sipPy));
+
+    return sipGetState(sipTransferObj);
+}
+#endif
+
+QString qs = qpycore_PyObject_AsQString(sipPy);
+
+if (qs.size() != 1)
+{
+    PyErr_SetString(PyExc_ValueError, "string of length 1 expected");
+    *sipIsErr = 1;
+    return 0;
+}
+
+*sipCppPtr = new QChar(qs.at(0));
+
+return sipGetState(sipTransferObj);
+%End
+
+%ConvertFromTypeCode
+    return qpycore_PyObject_FromQString(QString(*sipCpp));
+%End
+};
diff --git a/sip/QtCore/qcollator.sip b/sip/QtCore/qcollator.sip
new file mode 100644
index 0000000..8268b1f
--- /dev/null
+++ b/sip/QtCore/qcollator.sip
@@ -0,0 +1,76 @@
+// qcollator.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+%ModuleCode
+#include <qcollator.h>
+%End
+%End
+
+%If (Qt_5_2_0 -)
+
+class QCollatorSortKey
+{
+%TypeHeaderCode
+#include <qcollator.h>
+%End
+
+public:
+    QCollatorSortKey(const QCollatorSortKey &other);
+    ~QCollatorSortKey();
+    void swap(QCollatorSortKey &other);
+    int compare(const QCollatorSortKey &key) const;
+
+private:
+    QCollatorSortKey();
+};
+
+%End
+%If (Qt_5_2_0 -)
+bool operator<(const QCollatorSortKey &lhs, const QCollatorSortKey &rhs);
+%End
+%If (Qt_5_2_0 -)
+
+class QCollator
+{
+%TypeHeaderCode
+#include <qcollator.h>
+%End
+
+public:
+    explicit QCollator(const QLocale &locale = QLocale());
+    QCollator(const QCollator &);
+    ~QCollator();
+    void swap(QCollator &other);
+    void setLocale(const QLocale &locale);
+    QLocale locale() const;
+    Qt::CaseSensitivity caseSensitivity() const;
+    void setCaseSensitivity(Qt::CaseSensitivity cs);
+    void setNumericMode(bool on);
+    bool numericMode() const;
+    void setIgnorePunctuation(bool on);
+    bool ignorePunctuation() const;
+    int compare(const QString &s1, const QString &s2) const;
+    QCollatorSortKey sortKey(const QString &string) const;
+};
+
+%End
diff --git a/sip/QtCore/qcommandlineoption.sip b/sip/QtCore/qcommandlineoption.sip
new file mode 100644
index 0000000..76cbac6
--- /dev/null
+++ b/sip/QtCore/qcommandlineoption.sip
@@ -0,0 +1,47 @@
+// qcommandlineoption.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QCommandLineOption
+{
+%TypeHeaderCode
+#include <qcommandlineoption.h>
+%End
+
+public:
+    QCommandLineOption(const QString &name, const QString &description = QString(), const QString &valueName = QString(), const QString &defaultValue = QString());
+    QCommandLineOption(const QStringList &names, const QString &description = QString(), const QString &valueName = QString(), const QString &defaultValue = QString());
+    QCommandLineOption(const QCommandLineOption &other);
+    ~QCommandLineOption();
+    void swap(QCommandLineOption &other);
+    QStringList names() const;
+    void setValueName(const QString &name);
+    QString valueName() const;
+    void setDescription(const QString &description);
+    QString description() const;
+    void setDefaultValue(const QString &defaultValue);
+    void setDefaultValues(const QStringList &defaultValues);
+    QStringList defaultValues() const;
+};
+
+%End
diff --git a/sip/QtCore/qcommandlineparser.sip b/sip/QtCore/qcommandlineparser.sip
new file mode 100644
index 0000000..16194bf
--- /dev/null
+++ b/sip/QtCore/qcommandlineparser.sip
@@ -0,0 +1,69 @@
+// qcommandlineparser.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QCommandLineParser
+{
+%TypeHeaderCode
+#include <qcommandlineparser.h>
+%End
+
+public:
+    QCommandLineParser();
+    ~QCommandLineParser();
+
+    enum SingleDashWordOptionMode
+    {
+        ParseAsCompactedShortOptions,
+        ParseAsLongOptions,
+    };
+
+    void setSingleDashWordOptionMode(QCommandLineParser::SingleDashWordOptionMode parsingMode);
+    bool addOption(const QCommandLineOption &commandLineOption);
+    QCommandLineOption addVersionOption();
+    QCommandLineOption addHelpOption();
+    void setApplicationDescription(const QString &description);
+    QString applicationDescription() const;
+    void addPositionalArgument(const QString &name, const QString &description, const QString &syntax = QString());
+    void clearPositionalArguments();
+    void process(const QStringList &arguments) /ReleaseGIL/;
+    void process(const QCoreApplication &app) /ReleaseGIL/;
+    bool parse(const QStringList &arguments);
+    QString errorText() const;
+    bool isSet(const QString &name) const;
+    QString value(const QString &name) const;
+    QStringList values(const QString &name) const;
+    bool isSet(const QCommandLineOption &option) const;
+    QString value(const QCommandLineOption &option) const;
+    QStringList values(const QCommandLineOption &option) const;
+    QStringList positionalArguments() const;
+    QStringList optionNames() const;
+    QStringList unknownOptionNames() const;
+    void showHelp(int exitCode = 0) /ReleaseGIL/;
+    QString helpText() const;
+
+private:
+    QCommandLineParser(const QCommandLineParser &);
+};
+
+%End
diff --git a/sip/QtCore/qcoreapplication.sip b/sip/QtCore/qcoreapplication.sip
new file mode 100644
index 0000000..ff96a7b
--- /dev/null
+++ b/sip/QtCore/qcoreapplication.sip
@@ -0,0 +1,304 @@
+// qcoreapplication.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qcoreapplication.h>
+%End
+
+class QCoreApplication : QObject
+{
+%TypeHeaderCode
+#include <qcoreapplication.h>
+%End
+
+public:
+    QCoreApplication(SIP_PYLIST argv /DocType="list-of-str"/) /PostHook=__pyQtQAppHook__/ [(int &argc, char **argv)];
+%MethodCode
+        // The Python interface is a list of argument strings that is modified.
+        
+        int argc;
+        char **argv;
+        
+        // Convert the list.
+        if ((argv = pyqt5_from_argv_list(a0, argc)) == NULL)
+            sipIsErr = 1;
+        else
+        {
+            // Create it now the arguments are right.
+            static int nargc;
+            nargc = argc;
+        
+            Py_BEGIN_ALLOW_THREADS
+            sipCpp = new sipQCoreApplication(nargc, argv);
+            Py_END_ALLOW_THREADS
+        
+            // Now modify the original list.
+            pyqt5_update_argv_list(a0, argc, argv);
+        }
+%End
+
+    virtual ~QCoreApplication();
+    static void setOrganizationDomain(const QString &orgDomain);
+    static QString organizationDomain();
+    static void setOrganizationName(const QString &orgName);
+    static QString organizationName();
+    static void setApplicationName(const QString &application);
+    static QString applicationName();
+    static QStringList arguments();
+    static QCoreApplication *instance();
+    static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/;
+%End
+    static void processEvents(QFlags<QEventLoop::ProcessEventsFlag> flags = QEventLoop::AllEvents) /ReleaseGIL/;
+    static void processEvents(QFlags<QEventLoop::ProcessEventsFlag> flags, int maxtime) /ReleaseGIL/;
+    static void exit(int returnCode = 0);
+    static bool sendEvent(QObject *receiver, QEvent *event) /ReleaseGIL/;
+    static void postEvent(QObject *receiver, QEvent *event /Transfer/, int priority = Qt::NormalEventPriority);
+    static void sendPostedEvents(QObject *receiver = 0, int eventType = 0) /ReleaseGIL/;
+    static void removePostedEvents(QObject *receiver, int eventType = 0);
+    static bool hasPendingEvents();
+    virtual bool notify(QObject *, QEvent *) /ReleaseGIL/;
+    static bool startingUp();
+    static bool closingDown();
+    static QString applicationDirPath();
+    static QString applicationFilePath();
+    static void setLibraryPaths(const QStringList &);
+    static QStringList libraryPaths();
+    static void addLibraryPath(const QString &);
+    static void removeLibraryPath(const QString &);
+    static bool installTranslator(QTranslator *messageFile);
+    static bool removeTranslator(QTranslator *messageFile);
+    static QString translate(const char *context, const char *sourceText /Encoding="UTF-8"/, const char *disambiguation = 0, int n = -1);
+    static void flush() /ReleaseGIL/;
+    static void setAttribute(Qt::ApplicationAttribute attribute, bool on = true);
+    static bool testAttribute(Qt::ApplicationAttribute attribute);
+
+public slots:
+    static void quit();
+
+signals:
+    void aboutToQuit();
+
+protected:
+    virtual bool event(QEvent *);
+
+public:
+    static void setApplicationVersion(const QString &version);
+    static QString applicationVersion();
+    static qint64 applicationPid();
+    static QAbstractEventDispatcher *eventDispatcher();
+    static void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher /Transfer/);
+    static bool isQuitLockEnabled();
+    static void setQuitLockEnabled(bool enabled);
+    void installNativeEventFilter(QAbstractNativeEventFilter *filterObj);
+    void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj);
+%If (Qt_5_3_0 -)
+    static void setSetuidAllowed(bool allow);
+%End
+%If (Qt_5_3_0 -)
+    static bool isSetuidAllowed();
+%End
+
+private:
+    QCoreApplication(const QCoreApplication &);
+};
+
+void qAddPostRoutine(SIP_PYCALLABLE);
+%MethodCode
+    // Add it to the list of post routines if it already exists.
+    if (qtcore_PostRoutines != NULL)
+    {
+        // See if there is an empty slot.
+        bool app = true;
+    
+        for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(qtcore_PostRoutines); ++i)
+            if (PyList_GET_ITEM(qtcore_PostRoutines, i) == Py_None)
+            {
+                Py_DECREF(Py_None);
+                Py_INCREF(a0);
+                PyList_SET_ITEM(qtcore_PostRoutines, i, a0);
+    
+                app = false;
+    
+                break;
+            }
+    
+        if (app && PyList_Append(qtcore_PostRoutines, a0) < 0)
+            sipIsErr = 1;
+    }
+    else if ((qtcore_PostRoutines = PyList_New(1)) != NULL)
+    {
+        Py_INCREF(a0);
+        PyList_SET_ITEM(qtcore_PostRoutines, 0, a0);
+    
+        qAddPostRoutine(qtcore_CallPostRoutines);
+    }
+    else
+    {
+        sipIsErr = 1;
+    }
+%End
+
+void qRemovePostRoutine(SIP_PYCALLABLE);
+%MethodCode
+    // Remove it from the list of post routines if it exists.
+    if (qtcore_PostRoutines != NULL)
+        for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(qtcore_PostRoutines); ++i)
+            if (PyList_GET_ITEM(qtcore_PostRoutines, i) == a0)
+            {
+                Py_DECREF(a0);
+                Py_INCREF(Py_None);
+                PyList_SET_ITEM(qtcore_PostRoutines, i, Py_None);
+    
+                break;
+            }
+%End
+
+%If (Qt_5_1_0 -)
+void qAddPreRoutine(SIP_PYCALLABLE);
+%MethodCode
+    // Add it to the list of pre routines if it already exists.
+    if (qtcore_PreRoutines != NULL)
+    {
+        if (PyList_Append(qtcore_PreRoutines, a0) < 0)
+            sipIsErr = 1;
+    }
+    else if ((qtcore_PreRoutines = PyList_New(1)) != NULL)
+    {
+        Py_INCREF(a0);
+        PyList_SET_ITEM(qtcore_PreRoutines, 0, a0);
+    
+        qAddPreRoutine(qtcore_CallPreRoutines);
+    }
+    else
+    {
+        sipIsErr = 1;
+    }
+%End
+
+%End
+// Module code needed by qAddPreRoutine, qAddPostRoutine() and qRemovePostRoutine().
+%ModuleCode
+#if QT_VERSION >= 0x050100
+// The list of Python pre routines.
+static PyObject *qtcore_PreRoutines = NULL;
+
+// Call all of the registered Python pre routines.
+static void qtcore_CallPreRoutines()
+{
+    for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(qtcore_PreRoutines); ++i)
+    {
+        PyObject *pr = PyList_GET_ITEM(qtcore_PreRoutines, i);
+
+        if (pr != Py_None)
+        {
+            PyObject *res = PyObject_CallObject(pr, NULL);
+
+            Py_XDECREF(res);
+        }
+    }
+}
+#endif
+
+
+// The list of Python post routines.
+static PyObject *qtcore_PostRoutines = NULL;
+
+// Call all of the registered Python post routines.
+static void qtcore_CallPostRoutines()
+{
+    for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(qtcore_PostRoutines); ++i)
+    {
+        PyObject *pr = PyList_GET_ITEM(qtcore_PostRoutines, i);
+
+        if (pr != Py_None)
+        {
+            PyObject *res = PyObject_CallObject(pr, NULL);
+
+            Py_XDECREF(res);
+        }
+    }
+}
+%End
+void pyqtRemoveInputHook();
+%MethodCode
+    // Clear the Python input hook installed when the module was initialised.
+    PyOS_InputHook = 0;
+%End
+
+void pyqtRestoreInputHook();
+%MethodCode
+    // Restore the input hook.
+    PyOS_InputHook = qtcore_input_hook;
+%End
+
+%ModuleCode
+#include <QCoreApplication>
+#include <QThread>
+
+#if defined(Q_OS_WIN)
+#include <conio.h>
+#include <QTimer>
+#else
+#include <QSocketNotifier>
+#endif
+
+// This is the input hook that will process events while the interpreter is
+// waiting for interactive input.
+extern "C" {static int qtcore_input_hook();}
+
+static int qtcore_input_hook()
+{
+    QCoreApplication *app = QCoreApplication::instance();
+
+    if (app && app->thread() == QThread::currentThread())
+    {
+#if defined(Q_OS_WIN)
+        QTimer timer;
+        QObject::connect(&timer, SIGNAL(timeout()), app, SLOT(quit()));
+
+        do
+        {
+            timer.start(100);
+            QCoreApplication::exec();
+            timer.stop();
+        }
+        while (!_kbhit());
+
+        QObject::disconnect(&timer, SIGNAL(timeout()), app, SLOT(quit()));
+#else
+        QSocketNotifier notifier(0, QSocketNotifier::Read, 0);
+        QObject::connect(&notifier, SIGNAL(activated(int)), app, SLOT(quit()));
+        QCoreApplication::exec();
+        QObject::disconnect(&notifier, SIGNAL(activated(int)), app, SLOT(quit()));
+#endif
+    }
+
+    return 0;
+}
+%End
+
+%PostInitialisationCode
+// Process events from the input hook.
+PyOS_InputHook = qtcore_input_hook;
+%End
diff --git a/sip/QtCore/qcoreevent.sip b/sip/QtCore/qcoreevent.sip
new file mode 100644
index 0000000..7554133
--- /dev/null
+++ b/sip/QtCore/qcoreevent.sip
@@ -0,0 +1,253 @@
+// qcoreevent.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QEvent /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qcoreevent.h>
+%End
+
+%ConvertToSubClassCode
+    switch (sipCpp->type())
+    {
+    case QEvent::Timer:
+        sipType = sipType_QTimerEvent;
+        break;
+    
+    case QEvent::ChildAdded:
+    case QEvent::ChildPolished:
+    case QEvent::ChildRemoved:
+        sipType = sipType_QChildEvent;
+        break;
+    
+    case QEvent::DynamicPropertyChange:
+        sipType = sipType_QDynamicPropertyChangeEvent;
+        break;
+    
+    case QEvent::StateMachineSignal:
+        sipType = sipType_QStateMachine_SignalEvent;
+        break;
+    
+    case QEvent::StateMachineWrapped:
+        sipType = sipType_QStateMachine_WrappedEvent;
+        break;
+    
+    default:
+        sipType = 0;
+    }
+%End
+
+public:
+    enum Type
+    {
+        None,
+        Timer,
+        MouseButtonPress,
+        MouseButtonRelease,
+        MouseButtonDblClick,
+        MouseMove,
+        KeyPress,
+        KeyRelease,
+        FocusIn,
+        FocusOut,
+        Enter,
+        Leave,
+        Paint,
+        Move,
+        Resize,
+        Show,
+        Hide,
+        Close,
+        ParentChange,
+        ParentAboutToChange,
+        WindowActivate,
+        WindowDeactivate,
+        ShowToParent,
+        HideToParent,
+        Wheel,
+        WindowTitleChange,
+        WindowIconChange,
+        ApplicationWindowIconChange,
+        ApplicationFontChange,
+        ApplicationLayoutDirectionChange,
+        ApplicationPaletteChange,
+        PaletteChange,
+        Clipboard,
+        MetaCall,
+        SockAct,
+        WinEventAct,
+        DeferredDelete,
+        DragEnter,
+        DragMove,
+        DragLeave,
+        Drop,
+        ChildAdded,
+        ChildPolished,
+        ChildRemoved,
+        PolishRequest,
+        Polish,
+        LayoutRequest,
+        UpdateRequest,
+        UpdateLater,
+        ContextMenu,
+        InputMethod,
+        TabletMove,
+        LocaleChange,
+        LanguageChange,
+        LayoutDirectionChange,
+        TabletPress,
+        TabletRelease,
+        OkRequest,
+        IconDrag,
+        FontChange,
+        EnabledChange,
+        ActivationChange,
+        StyleChange,
+        IconTextChange,
+        ModifiedChange,
+        MouseTrackingChange,
+        WindowBlocked,
+        WindowUnblocked,
+        WindowStateChange,
+        ToolTip,
+        WhatsThis,
+        StatusTip,
+        ActionChanged,
+        ActionAdded,
+        ActionRemoved,
+        FileOpen,
+        Shortcut,
+        ShortcutOverride,
+        WhatsThisClicked,
+        ToolBarChange,
+        ApplicationActivate,
+        ApplicationActivated,
+        ApplicationDeactivate,
+        ApplicationDeactivated,
+        QueryWhatsThis,
+        EnterWhatsThisMode,
+        LeaveWhatsThisMode,
+        ZOrderChange,
+        HoverEnter,
+        HoverLeave,
+        HoverMove,
+        GraphicsSceneMouseMove,
+        GraphicsSceneMousePress,
+        GraphicsSceneMouseRelease,
+        GraphicsSceneMouseDoubleClick,
+        GraphicsSceneContextMenu,
+        GraphicsSceneHoverEnter,
+        GraphicsSceneHoverMove,
+        GraphicsSceneHoverLeave,
+        GraphicsSceneHelp,
+        GraphicsSceneDragEnter,
+        GraphicsSceneDragMove,
+        GraphicsSceneDragLeave,
+        GraphicsSceneDrop,
+        GraphicsSceneWheel,
+        GraphicsSceneResize,
+        GraphicsSceneMove,
+        KeyboardLayoutChange,
+        DynamicPropertyChange,
+        TabletEnterProximity,
+        TabletLeaveProximity,
+        CursorChange,
+        ToolTipChange,
+        GrabMouse,
+        UngrabMouse,
+        GrabKeyboard,
+        UngrabKeyboard,
+        StateMachineSignal,
+        StateMachineWrapped,
+        TouchBegin,
+        TouchUpdate,
+        TouchEnd,
+        RequestSoftwareInputPanel,
+        CloseSoftwareInputPanel,
+        WinIdChange,
+        Gesture,
+        GestureOverride,
+        FocusAboutToChange,
+        ScrollPrepare,
+        Scroll,
+        Expose,
+        InputMethodQuery,
+        OrientationChange,
+        TouchCancel,
+        PlatformPanel,
+%If (Qt_5_1_0 -)
+        ApplicationStateChange,
+%End
+        User,
+        MaxUser,
+    };
+
+    explicit QEvent(QEvent::Type type);
+    QEvent(const QEvent &other);
+    virtual ~QEvent();
+    QEvent::Type type() const;
+    bool spontaneous() const;
+    void setAccepted(bool accepted);
+    bool isAccepted() const;
+    void accept();
+    void ignore();
+    static int registerEventType(int hint = -1);
+};
+
+class QTimerEvent : QEvent
+{
+%TypeHeaderCode
+#include <qcoreevent.h>
+%End
+
+public:
+    explicit QTimerEvent(int timerId);
+    virtual ~QTimerEvent();
+    int timerId() const;
+};
+
+class QChildEvent : QEvent
+{
+%TypeHeaderCode
+#include <qcoreevent.h>
+%End
+
+public:
+    QChildEvent(QEvent::Type type, QObject *child);
+    virtual ~QChildEvent();
+    QObject *child() const;
+    bool added() const;
+    bool polished() const;
+    bool removed() const;
+};
+
+class QDynamicPropertyChangeEvent : QEvent
+{
+%TypeHeaderCode
+#include <qcoreevent.h>
+%End
+
+public:
+    explicit QDynamicPropertyChangeEvent(const QByteArray &name);
+    virtual ~QDynamicPropertyChangeEvent();
+    QByteArray propertyName() const;
+};
diff --git a/sip/QtCore/qcryptographichash.sip b/sip/QtCore/qcryptographichash.sip
new file mode 100644
index 0000000..e29c8cb
--- /dev/null
+++ b/sip/QtCore/qcryptographichash.sip
@@ -0,0 +1,64 @@
+// qcryptographichash.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCryptographicHash
+{
+%TypeHeaderCode
+#include <qcryptographichash.h>
+%End
+
+public:
+    enum Algorithm
+    {
+        Md4,
+        Md5,
+        Sha1,
+        Sha224,
+        Sha256,
+        Sha384,
+        Sha512,
+%If (Qt_5_1_0 -)
+        Sha3_224,
+%End
+%If (Qt_5_1_0 -)
+        Sha3_256,
+%End
+%If (Qt_5_1_0 -)
+        Sha3_384,
+%End
+%If (Qt_5_1_0 -)
+        Sha3_512,
+%End
+    };
+
+    explicit QCryptographicHash(QCryptographicHash::Algorithm method);
+    ~QCryptographicHash();
+    void reset();
+    void addData(const char *data /Array/, int length /ArraySize/);
+    void addData(const QByteArray &data);
+    bool addData(QIODevice *device);
+    QByteArray result() const;
+    static QByteArray hash(const QByteArray &data, QCryptographicHash::Algorithm method);
+
+private:
+    QCryptographicHash(const QCryptographicHash &);
+};
diff --git a/sip/QtCore/qdatastream.sip b/sip/QtCore/qdatastream.sip
new file mode 100644
index 0000000..6481e78
--- /dev/null
+++ b/sip/QtCore/qdatastream.sip
@@ -0,0 +1,427 @@
+// qdatastream.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDataStream
+{
+%TypeHeaderCode
+#include <qdatastream.h>
+%End
+
+public:
+    enum Version
+    {
+        Qt_1_0,
+        Qt_2_0,
+        Qt_2_1,
+        Qt_3_0,
+        Qt_3_1,
+        Qt_3_3,
+        Qt_4_0,
+        Qt_4_1,
+        Qt_4_2,
+        Qt_4_3,
+        Qt_4_4,
+        Qt_4_5,
+        Qt_4_6,
+        Qt_4_7,
+        Qt_4_8,
+        Qt_4_9,
+        Qt_5_0,
+%If (Qt_5_1_0 -)
+        Qt_5_1,
+%End
+%If (Qt_5_2_0 -)
+        Qt_5_2,
+%End
+%If (Qt_5_3_0 -)
+        Qt_5_3,
+%End
+    };
+
+    enum ByteOrder
+    {
+        BigEndian,
+        LittleEndian,
+    };
+
+    enum Status
+    {
+        Ok,
+        ReadPastEnd,
+        ReadCorruptData,
+        WriteFailed,
+    };
+
+    QDataStream();
+    explicit QDataStream(QIODevice *);
+    QDataStream(QByteArray * /Constrained/, QFlags<QIODevice::OpenModeFlag> flags);
+    QDataStream(const QByteArray & /Constrained/);
+    ~QDataStream();
+    QIODevice *device() const;
+    void setDevice(QIODevice *);
+    bool atEnd() const;
+    QDataStream::Status status() const;
+    void setStatus(QDataStream::Status status);
+    void resetStatus();
+    QDataStream::ByteOrder byteOrder() const;
+    void setByteOrder(QDataStream::ByteOrder);
+    int version() const;
+    void setVersion(int v);
+    int skipRawData(int len) /ReleaseGIL/;
+// Extra methods to give explicit control over the simple data types being read and written.
+int readInt() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+qint8 readInt8() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+quint8 readUInt8() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+qint16 readInt16() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+quint16 readUInt16() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+qint32 readInt32() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+quint32 readUInt32() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+qint64 readInt64() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+quint64 readUInt64() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+bool readBool() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+float readFloat() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+double readDouble() /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+SIP_PYOBJECT readString() /ReleaseGIL,DocType="Py_v3:bytes;str"/;
+%MethodCode
+    char *s;
+
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> s;
+    Py_END_ALLOW_THREADS
+
+    if (s)
+    {
+        sipRes = SIPBytes_FromString(s);
+        delete[] s;
+    }
+    else
+    {
+        sipRes = Py_None;
+        Py_INCREF(Py_None);
+    }
+%End
+
+void writeInt(int i) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeInt8(qint8 i) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeUInt8(quint8 i) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeInt16(qint16 i) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeUInt16(quint16 i) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeInt32(qint32 i) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeUInt32(quint32 i) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeInt64(qint64 i) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeUInt64(quint64 i) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeBool(bool i) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeFloat(float f) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeDouble(double f) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeString(const char *str /Encoding="None"/) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << a0;
+    Py_END_ALLOW_THREADS
+%End
+// Extra methods to support v2 of the QString and QVariant APIs.
+QString readQString() /ReleaseGIL/;
+%MethodCode
+    sipRes = new QString;
+
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> *sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeQString(const QString &qstr) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << *a0;
+    Py_END_ALLOW_THREADS
+%End
+
+QStringList readQStringList() /ReleaseGIL/;
+%MethodCode
+    sipRes = new QStringList;
+
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> *sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeQStringList(const QStringList &qstrlst) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << *a0;
+    Py_END_ALLOW_THREADS
+%End
+
+QVariant readQVariant() /ReleaseGIL/;
+%MethodCode
+    sipRes = new QVariant;
+
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> *sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeQVariant(const QVariant &qvar) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << *a0;
+    Py_END_ALLOW_THREADS
+%End
+
+QVariantList readQVariantList() /ReleaseGIL/;
+%MethodCode
+    sipRes = new QVariantList;
+
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> *sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeQVariantList(const QVariantList &qvarlst) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << *a0;
+    Py_END_ALLOW_THREADS
+%End
+
+QVariantMap readQVariantMap() /ReleaseGIL/;
+%MethodCode
+    sipRes = new QVariantMap;
+
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> *sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeQVariantMap(const QVariantMap &qvarmap) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << *a0;
+    Py_END_ALLOW_THREADS
+%End
+
+QVariantHash readQVariantHash() /ReleaseGIL/;
+%MethodCode
+    sipRes = new QVariantHash;
+
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp >> *sipRes;
+    Py_END_ALLOW_THREADS
+%End
+
+void writeQVariantHash(const QVariantHash &qvarhash) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    *sipCpp << *a0;
+    Py_END_ALLOW_THREADS
+%End
+    SIP_PYOBJECT readBytes() /DocType="Py_v3:bytes;str",ReleaseGIL/;
+%MethodCode
+        char *s;
+        uint l;
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->readBytes(s, l);
+        Py_END_ALLOW_THREADS
+        
+        if ((sipRes = SIPBytes_FromStringAndSize(s, l)) == NULL)
+            sipIsErr = 1;
+        
+        if (s)
+            delete[] s;
+%End
+
+    SIP_PYOBJECT readRawData(int len) /DocType="Py_v3:bytes;str",ReleaseGIL/;
+%MethodCode
+        char *s = new char[a0];
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->readRawData(s, a0);
+        Py_END_ALLOW_THREADS
+        
+        sipRes = SIPBytes_FromStringAndSize(s, a0);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+        
+        delete[] s;
+%End
+
+    QDataStream &writeBytes(const char * /Array/, uint len /ArraySize/) /ReleaseGIL/;
+    int writeRawData(const char * /Array/, int len /ArraySize/) /ReleaseGIL/;
+
+    enum FloatingPointPrecision
+    {
+        SinglePrecision,
+        DoublePrecision,
+    };
+
+    QDataStream::FloatingPointPrecision floatingPointPrecision() const;
+    void setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision);
+
+private:
+    QDataStream(const QDataStream &);
+};
diff --git a/sip/QtCore/qdatetime.sip b/sip/QtCore/qdatetime.sip
new file mode 100644
index 0000000..7c10de3
--- /dev/null
+++ b/sip/QtCore/qdatetime.sip
@@ -0,0 +1,538 @@
+// qdatetime.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qdatetime.h>
+%End
+
+class QDate
+{
+%TypeHeaderCode
+#include <qdatetime.h>
+%End
+
+%TypeCode
+#include <QHash>
+#include <datetime.h>
+%End
+
+%ConvertToTypeCode
+if (!PyDateTimeAPI)
+    PyDateTime_IMPORT;
+
+// Allow a Python date object whenever a QDate is expected.
+
+if (sipIsErr == NULL)
+    return (PyDate_Check(sipPy) ||
+            sipCanConvertToType(sipPy, sipType_QDate, SIP_NO_CONVERTORS));
+
+if (PyDate_Check(sipPy))
+{
+    *sipCppPtr = new QDate(PyDateTime_GET_YEAR(sipPy),
+                           PyDateTime_GET_MONTH(sipPy),
+                           PyDateTime_GET_DAY(sipPy));
+
+    return sipGetState(sipTransferObj);
+}
+
+*sipCppPtr = reinterpret_cast<QDate *>(sipConvertToType(sipPy, sipType_QDate, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+return 0;
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"iii", sipCpp->year(), sipCpp->month(), sipCpp->day());
+%End
+
+public:
+    QDate();
+    QDate(int y, int m, int d);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QDate()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QDate()");
+        #endif
+        }
+        else
+        {
+            sipRes =
+        #if PY_MAJOR_VERSION >= 3
+                PyUnicode_FromFormat
+        #else
+                PyString_FromFormat
+        #endif
+                    ("PyQt5.QtCore.QDate(%i, %i, %i)", sipCpp->year(),
+                    sipCpp->month(), sipCpp->day());
+        }
+%End
+
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(sipCpp->toString(Qt::ISODate));
+%End
+
+    SIP_PYOBJECT toPyDate() const /DocType="datetime.date"/;
+%MethodCode
+        if (!PyDateTimeAPI)
+            PyDateTime_IMPORT;
+        
+        // Convert to a Python date object.
+        sipRes = PyDate_FromDate(sipCpp->year(), sipCpp->month(), sipCpp->day());
+%End
+
+    bool isNull() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = !sipCpp->isNull();
+%End
+
+    bool isValid() const;
+    int year() const;
+    int month() const;
+    int day() const;
+    int dayOfWeek() const;
+    int dayOfYear() const;
+    int daysInMonth() const;
+    int daysInYear() const;
+    int weekNumber(int *yearNumber = 0) const;
+    static QString shortMonthName(int month, QDate::MonthNameType type = QDate::DateFormat);
+    static QString shortDayName(int weekday, QDate::MonthNameType type = QDate::DateFormat);
+    static QString longMonthName(int month, QDate::MonthNameType type = QDate::DateFormat);
+    static QString longDayName(int weekday, QDate::MonthNameType type = QDate::DateFormat);
+    QString toString(Qt::DateFormat format = Qt::TextDate) const;
+    QString toString(const QString &format) const;
+    QDate addDays(qint64 days) const;
+    QDate addMonths(int months) const;
+    QDate addYears(int years) const;
+    qint64 daysTo(const QDate &) const;
+    bool operator==(const QDate &other) const;
+    bool operator!=(const QDate &other) const;
+    bool operator<(const QDate &other) const;
+    bool operator<=(const QDate &other) const;
+    bool operator>(const QDate &other) const;
+    bool operator>=(const QDate &other) const;
+    static QDate currentDate();
+    static QDate fromString(const QString &string, Qt::DateFormat format = Qt::TextDate);
+    static QDate fromString(const QString &s, const QString &format);
+    static bool isValid(int y, int m, int d);
+    static bool isLeapYear(int year);
+    static QDate fromJulianDay(qint64 jd);
+    qint64 toJulianDay() const;
+    bool setDate(int year, int month, int date);
+    void getDate(int *year, int *month, int *day);
+
+    enum MonthNameType
+    {
+        DateFormat,
+        StandaloneFormat,
+    };
+};
+
+class QTime
+{
+%TypeHeaderCode
+#include <qdatetime.h>
+%End
+
+%TypeCode
+#include <QHash>
+#include <datetime.h>
+%End
+
+%ConvertToTypeCode
+if (!PyDateTimeAPI)
+    PyDateTime_IMPORT;
+
+// Allow a Python time object whenever a QTime is expected.
+
+if (sipIsErr == NULL)
+    return (PyTime_Check(sipPy) ||
+            sipCanConvertToType(sipPy, sipType_QTime, SIP_NO_CONVERTORS));
+
+if (PyTime_Check(sipPy))
+{
+    *sipCppPtr = new QTime(PyDateTime_TIME_GET_HOUR(sipPy),
+                           PyDateTime_TIME_GET_MINUTE(sipPy),
+                           PyDateTime_TIME_GET_SECOND(sipPy),
+                           PyDateTime_TIME_GET_MICROSECOND(sipPy) / 1000);
+
+    return sipGetState(sipTransferObj);
+}
+
+*sipCppPtr = reinterpret_cast<QTime *>(sipConvertToType(sipPy, sipType_QTime, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+return 0;
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"iiii", sipCpp->hour(), sipCpp->minute(), sipCpp->second(), sipCpp->msec());
+%End
+
+public:
+    QTime();
+    QTime(int h, int m, int second = 0, int msec = 0);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QTime()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QTime()");
+        #endif
+        }
+        else
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QTime(%i, %i", sipCpp->hour(),
+                    sipCpp->minute());
+        
+            if (sipCpp->second() || sipCpp->msec())
+            {
+                qpycore_Unicode_ConcatAndDel(&sipRes,
+                        PyUnicode_FromFormat(", %i", sipCpp->second()));
+        
+                if (sipCpp->msec())
+                    qpycore_Unicode_ConcatAndDel(&sipRes,
+                            PyUnicode_FromFormat(", %i", sipCpp->msec()));
+            }
+        
+            qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")"));
+        #else
+            sipRes = PyString_FromFormat("PyQt5.QtCore.QTime(%i, %i", sipCpp->hour(),
+                    sipCpp->minute());
+        
+            if (sipCpp->second() || sipCpp->msec())
+            {
+                PyString_ConcatAndDel(&sipRes,
+                        PyString_FromFormat(", %i", sipCpp->second()));
+        
+                if (sipCpp->msec())
+                    PyString_ConcatAndDel(&sipRes,
+                            PyString_FromFormat(", %i", sipCpp->msec()));
+            }
+        
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        }
+%End
+
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(sipCpp->toString(Qt::ISODate));
+%End
+
+    SIP_PYOBJECT toPyTime() const /DocType="datetime.time"/;
+%MethodCode
+        if (!PyDateTimeAPI)
+            PyDateTime_IMPORT;
+        
+        // Convert to a Python time object.
+        sipRes = PyTime_FromTime(sipCpp->hour(), sipCpp->minute(), sipCpp->second(), sipCpp->msec() * 1000);
+%End
+
+    bool isNull() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = !sipCpp->isNull();
+%End
+
+    bool isValid() const;
+    int hour() const;
+    int minute() const;
+    int second() const;
+    int msec() const;
+    QString toString(Qt::DateFormat format = Qt::TextDate) const;
+    QString toString(const QString &format) const;
+    bool setHMS(int h, int m, int s, int msec = 0);
+    QTime addSecs(int secs) const;
+    int secsTo(const QTime &) const;
+    QTime addMSecs(int ms) const;
+    int msecsTo(const QTime &) const;
+    bool operator==(const QTime &other) const;
+    bool operator!=(const QTime &other) const;
+    bool operator<(const QTime &other) const;
+    bool operator<=(const QTime &other) const;
+    bool operator>(const QTime &other) const;
+    bool operator>=(const QTime &other) const;
+    static QTime currentTime();
+    static QTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate);
+    static QTime fromString(const QString &s, const QString &format);
+    static bool isValid(int h, int m, int s, int msec = 0);
+    void start();
+    int restart();
+    int elapsed() const;
+%If (Qt_5_2_0 -)
+    static QTime fromMSecsSinceStartOfDay(int msecs);
+%End
+%If (Qt_5_2_0 -)
+    int msecsSinceStartOfDay() const;
+%End
+};
+
+class QDateTime
+{
+%TypeHeaderCode
+#include <qdatetime.h>
+%End
+
+%TypeCode
+#include <QHash>
+#include <datetime.h>
+%End
+
+%ConvertToTypeCode
+if (!PyDateTimeAPI)
+    PyDateTime_IMPORT;
+
+// Allow a Python datetime object whenever a QDateTime is expected.
+
+if (sipIsErr == NULL)
+    return (PyDateTime_Check(sipPy) ||
+            sipCanConvertToType(sipPy, sipType_QDateTime, SIP_NO_CONVERTORS));
+
+if (PyDateTime_Check(sipPy))
+{
+    QDate qdate(PyDateTime_GET_YEAR(sipPy),
+                PyDateTime_GET_MONTH(sipPy),
+                PyDateTime_GET_DAY(sipPy));
+
+    QTime qtime(PyDateTime_DATE_GET_HOUR(sipPy),
+                PyDateTime_DATE_GET_MINUTE(sipPy),
+                PyDateTime_DATE_GET_SECOND(sipPy),
+                PyDateTime_DATE_GET_MICROSECOND(sipPy) / 1000);
+
+    QDateTime *qdt = new QDateTime(qdate, qtime);
+
+    *sipCppPtr = qdt;
+
+    return sipGetState(sipTransferObj);
+}
+
+*sipCppPtr = reinterpret_cast<QDateTime *>(sipConvertToType(sipPy, sipType_QDateTime, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+return 0;
+%End
+
+%PickleCode
+    QDate qd = sipCpp->date();
+    QTime qt = sipCpp->time();
+    
+    sipRes = Py_BuildValue((char *)"iiiiiiii", qd.year(), qd.month(), qd.day(),
+            qt.hour(), qt.minute(), qt.second(), qt.msec(),
+            (int)sipCpp->timeSpec());
+%End
+
+public:
+    QDateTime();
+    QDateTime(const QDateTime &other);
+    explicit QDateTime(const QDate &);
+    QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec timeSpec = Qt::LocalTime);
+    QDateTime(int y, int m, int d, int h, int m, int s = 0, int msec = 0, int timeSpec = 0) /NoDerived/;
+%MethodCode
+        // This ctor is mainly supplied to allow pickling.
+        QDate qd(a0, a1, a2);
+        QTime qt(a3, a4, a5, a6);
+        
+        sipCpp = new QDateTime(qd, qt, (Qt::TimeSpec)a7);
+%End
+
+    ~QDateTime();
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QDateTime()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QDateTime()");
+        #endif
+        }
+        else
+        {
+            QDate qd = sipCpp->date();
+            QTime qt = sipCpp->time();
+        
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QDateTime(%i, %i, %i, %i, %i",
+                    qd.year(), qd.month(), qd.day(), qt.hour(), qt.minute());
+        
+            if (qt.second() || qt.msec() || sipCpp->timeSpec() != Qt::LocalTime)
+            {
+                qpycore_Unicode_ConcatAndDel(&sipRes,
+                        PyUnicode_FromFormat(", %i", qt.second()));
+        
+                if (qt.msec() || sipCpp->timeSpec() != Qt::LocalTime)
+                {
+                    qpycore_Unicode_ConcatAndDel(&sipRes,
+                            PyUnicode_FromFormat(", %i", qt.msec()));
+        
+                    if (sipCpp->timeSpec() != Qt::LocalTime)
+                        qpycore_Unicode_ConcatAndDel(&sipRes,
+                                PyUnicode_FromFormat(", PyQt5.QtCore.Qt.TimeSpec(%i)",
+                                        (int)sipCpp->timeSpec()));
+                }
+            }
+        
+            qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")"));
+        #else
+            sipRes = PyString_FromFormat("PyQt5.QtCore.QDateTime(%i, %i, %i, %i, %i",
+                    qd.year(), qd.month(), qd.day(), qt.hour(), qt.minute());
+        
+            if (qt.second() || qt.msec() || sipCpp->timeSpec() != Qt::LocalTime)
+            {
+                PyString_ConcatAndDel(&sipRes,
+                        PyString_FromFormat(", %i", qt.second()));
+        
+                if (qt.msec() || sipCpp->timeSpec() != Qt::LocalTime)
+                {
+                    PyString_ConcatAndDel(&sipRes,
+                            PyString_FromFormat(", %i", qt.msec()));
+        
+                    if (sipCpp->timeSpec() != Qt::LocalTime)
+                        PyString_ConcatAndDel(&sipRes,
+                                PyString_FromFormat(", PyQt5.QtCore.Qt.TimeSpec(%i)",
+                                        (int)sipCpp->timeSpec()));
+                }
+            }
+        
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        }
+%End
+
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(sipCpp->toString(Qt::ISODate));
+%End
+
+    SIP_PYOBJECT toPyDateTime() const /DocType="datetime.datetime"/;
+%MethodCode
+        if (!PyDateTimeAPI)
+            PyDateTime_IMPORT;
+        
+        // Convert to a Python datetime object.
+        QDate qd = sipCpp->date();
+        QTime qt = sipCpp->time();
+        
+        sipRes = PyDateTime_FromDateAndTime(qd.year(), qd.month(), qd.day(),
+                                            qt.hour(), qt.minute(), qt.second(), qt.msec() * 1000);
+%End
+
+    bool isNull() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = !sipCpp->isNull();
+%End
+
+    bool isValid() const;
+    QDate date() const;
+    QTime time() const;
+    Qt::TimeSpec timeSpec() const;
+    uint toTime_t() const;
+    void setDate(const QDate &date);
+    void setTime(const QTime &time);
+    void setTimeSpec(Qt::TimeSpec spec);
+    void setTime_t(uint secsSince1Jan1970UTC);
+    QString toString(Qt::DateFormat format = Qt::TextDate) const;
+    QString toString(const QString &format) const;
+    QDateTime addDays(qint64 days) const;
+    QDateTime addMonths(int months) const;
+    QDateTime addYears(int years) const;
+    QDateTime addSecs(qint64 secs) const;
+    QDateTime addMSecs(qint64 msecs) const;
+    QDateTime toTimeSpec(Qt::TimeSpec spec) const;
+    QDateTime toLocalTime() const;
+    QDateTime toUTC() const;
+    qint64 daysTo(const QDateTime &) const;
+    qint64 secsTo(const QDateTime &) const;
+    bool operator==(const QDateTime &other) const;
+    bool operator!=(const QDateTime &other) const;
+    bool operator<(const QDateTime &other) const;
+    bool operator<=(const QDateTime &other) const;
+    bool operator>(const QDateTime &other) const;
+    bool operator>=(const QDateTime &other) const;
+    static QDateTime currentDateTime();
+    static QDateTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate);
+    static QDateTime fromString(const QString &s, const QString &format);
+    static QDateTime fromTime_t(uint secsSince1Jan1970UTC);
+    qint64 toMSecsSinceEpoch() const;
+    void setMSecsSinceEpoch(qint64 msecs);
+    qint64 msecsTo(const QDateTime &) const;
+    static QDateTime currentDateTimeUtc();
+    static QDateTime fromMSecsSinceEpoch(qint64 msecs);
+    static qint64 currentMSecsSinceEpoch();
+    void swap(QDateTime &other);
+%If (Qt_5_2_0 -)
+    QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec, int offsetSeconds);
+%End
+%If (Qt_5_2_0 -)
+    QDateTime(const QDate &date, const QTime &time, const QTimeZone &timeZone);
+%End
+%If (Qt_5_2_0 -)
+    int offsetFromUtc() const;
+%End
+%If (Qt_5_2_0 -)
+    QTimeZone timeZone() const;
+%End
+%If (Qt_5_2_0 -)
+    QString timeZoneAbbreviation() const;
+%End
+%If (Qt_5_2_0 -)
+    bool isDaylightTime() const;
+%End
+%If (Qt_5_2_0 -)
+    void setOffsetFromUtc(int offsetSeconds);
+%End
+%If (Qt_5_2_0 -)
+    void setTimeZone(const QTimeZone &toZone);
+%End
+%If (Qt_5_2_0 -)
+    QDateTime toOffsetFromUtc(int offsetSeconds) const;
+%End
+%If (Qt_5_2_0 -)
+    QDateTime toTimeZone(const QTimeZone &toZone) const;
+%End
+%If (Qt_5_2_0 -)
+    static QDateTime fromTime_t(uint secsSince1Jan1970UTC, Qt::TimeSpec spec, int offsetSeconds = 0);
+%End
+%If (Qt_5_2_0 -)
+    static QDateTime fromTime_t(uint secsSince1Jan1970UTC, const QTimeZone &timeZone);
+%End
+%If (Qt_5_2_0 -)
+    static QDateTime fromMSecsSinceEpoch(qint64 msecs, Qt::TimeSpec spec, int offsetSeconds = 0);
+%End
+%If (Qt_5_2_0 -)
+    static QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone);
+%End
+};
+
+QDataStream &operator<<(QDataStream &, const QDate & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QDate & /Constrained/) /ReleaseGIL/;
+QDataStream &operator<<(QDataStream &, const QTime & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QTime & /Constrained/) /ReleaseGIL/;
+QDataStream &operator<<(QDataStream &, const QDateTime & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QDateTime & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtCore/qdir.sip b/sip/QtCore/qdir.sip
new file mode 100644
index 0000000..127ad3f
--- /dev/null
+++ b/sip/QtCore/qdir.sip
@@ -0,0 +1,184 @@
+// qdir.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qdir.h>
+%End
+
+class QDir
+{
+%TypeHeaderCode
+#include <qdir.h>
+%End
+
+public:
+    enum Filter
+    {
+        Dirs,
+        Files,
+        Drives,
+        NoSymLinks,
+        AllEntries,
+        TypeMask,
+        Readable,
+        Writable,
+        Executable,
+        PermissionMask,
+        Modified,
+        Hidden,
+        System,
+        AccessMask,
+        AllDirs,
+        CaseSensitive,
+        NoDotAndDotDot,
+        NoFilter,
+        NoDot,
+        NoDotDot,
+    };
+
+    typedef QFlags<QDir::Filter> Filters;
+
+    enum SortFlag
+    {
+        Name,
+        Time,
+        Size,
+        Unsorted,
+        SortByMask,
+        DirsFirst,
+        Reversed,
+        IgnoreCase,
+        DirsLast,
+        LocaleAware,
+        Type,
+        NoSort,
+    };
+
+    typedef QFlags<QDir::SortFlag> SortFlags;
+    QDir(const QDir &);
+    QDir(const QString &path /DocValue="''"/ = QString());
+    QDir(const QString &path, const QString &nameFilter, QFlags<QDir::SortFlag> sort /DocValue="QDir.Name|QDir.IgnoreCase"/ = QDir::SortFlags(QDir::Name|QDir::IgnoreCase), QFlags<QDir::Filter> filters = AllEntries);
+    ~QDir();
+    void setPath(const QString &path);
+    QString path() const;
+    QString absolutePath() const;
+    QString canonicalPath() const;
+    QString dirName() const;
+    QString filePath(const QString &fileName) const;
+    QString absoluteFilePath(const QString &fileName) const;
+    QString relativeFilePath(const QString &fileName) const;
+    bool cd(const QString &dirName);
+    bool cdUp();
+    QStringList nameFilters() const;
+    void setNameFilters(const QStringList &nameFilters);
+    QFlags<QDir::Filter> filter() const;
+    void setFilter(QFlags<QDir::Filter> filter);
+    QFlags<QDir::SortFlag> sorting() const;
+    void setSorting(QFlags<QDir::SortFlag> sort);
+    uint count() const /__len__/;
+    QString operator[](int) const;
+%MethodCode
+        SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
+        
+        if (idx < 0)
+            sipIsErr = 1;
+        else
+            sipRes = new QString(sipCpp->operator[]((int)idx));
+%End
+
+    QStringList operator[](SIP_PYSLICE) const;
+%MethodCode
+        SIP_SSIZE_T len, start, stop, step, slicelength, i;
+        
+        len = sipCpp->count();
+        
+        #if PY_VERSION_HEX >= 0x03020000
+        if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+        #else
+        if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+        #endif
+            sipIsErr = 1;
+        else
+        {
+            sipRes = new QStringList();
+        
+            for (i = 0; i < slicelength; ++i)
+            {
+                (*sipRes) += (*sipCpp)[start];
+                start += step;
+            }
+        }
+%End
+
+    int __contains__(const QString &) const;
+%MethodCode
+        sipRes = bool(sipCpp->entryList().contains(*a0));
+%End
+
+    static QStringList nameFiltersFromString(const QString &nameFilter);
+    QStringList entryList(QFlags<QDir::Filter> filters = NoFilter, QFlags<QDir::SortFlag> sort = NoSort) const;
+    QStringList entryList(const QStringList &nameFilters, QFlags<QDir::Filter> filters = NoFilter, QFlags<QDir::SortFlag> sort = NoSort) const;
+    QFileInfoList entryInfoList(QFlags<QDir::Filter> filters = NoFilter, QFlags<QDir::SortFlag> sort = NoSort) const;
+    QFileInfoList entryInfoList(const QStringList &nameFilters, QFlags<QDir::Filter> filters = NoFilter, QFlags<QDir::SortFlag> sort = NoSort) const;
+    bool mkdir(const QString &dirName) const;
+    bool rmdir(const QString &dirName) const;
+    bool mkpath(const QString &dirPath) const;
+    bool rmpath(const QString &dirPath) const;
+    bool isReadable() const;
+    bool exists() const;
+    bool isRoot() const;
+    static bool isRelativePath(const QString &path);
+    static bool isAbsolutePath(const QString &path);
+    bool isRelative() const;
+    bool isAbsolute() const;
+    bool makeAbsolute();
+    bool operator==(const QDir &dir) const;
+    bool operator!=(const QDir &dir) const;
+    bool remove(const QString &fileName);
+    bool rename(const QString &oldName, const QString &newName);
+    bool exists(const QString &name) const;
+    void refresh() const;
+    static QFileInfoList drives();
+    static QChar separator();
+    static bool setCurrent(const QString &path);
+    static QDir current();
+    static QString currentPath();
+    static QDir home();
+    static QString homePath();
+    static QDir root();
+    static QString rootPath();
+    static QDir temp();
+    static QString tempPath();
+    static bool match(const QStringList &filters, const QString &fileName);
+    static bool match(const QString &filter, const QString &fileName);
+    static QString cleanPath(const QString &path);
+    static QString toNativeSeparators(const QString &pathName);
+    static QString fromNativeSeparators(const QString &pathName);
+    static void setSearchPaths(const QString &prefix, const QStringList &searchPaths);
+    static void addSearchPath(const QString &prefix, const QString &path);
+    static QStringList searchPaths(const QString &prefix);
+    bool removeRecursively();
+    void swap(QDir &other);
+};
+
+QFlags<QDir::Filter> operator|(QDir::Filter f1, QFlags<QDir::Filter> f2);
+QFlags<QDir::SortFlag> operator|(QDir::SortFlag f1, QFlags<QDir::SortFlag> f2);
diff --git a/sip/QtCore/qdiriterator.sip b/sip/QtCore/qdiriterator.sip
new file mode 100644
index 0000000..01431b9
--- /dev/null
+++ b/sip/QtCore/qdiriterator.sip
@@ -0,0 +1,58 @@
+// qdiriterator.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qdiriterator.h>
+%End
+
+class QDirIterator
+{
+%TypeHeaderCode
+#include <qdiriterator.h>
+%End
+
+public:
+    enum IteratorFlag
+    {
+        NoIteratorFlags,
+        FollowSymlinks,
+        Subdirectories,
+    };
+
+    typedef QFlags<QDirIterator::IteratorFlag> IteratorFlags;
+    QDirIterator(const QDir &dir, QFlags<QDirIterator::IteratorFlag> flags = NoIteratorFlags);
+    QDirIterator(const QString &path, QFlags<QDirIterator::IteratorFlag> flags = NoIteratorFlags);
+    QDirIterator(const QString &path, QFlags<QDir::Filter> filters, QFlags<QDirIterator::IteratorFlag> flags = NoIteratorFlags);
+    QDirIterator(const QString &path, const QStringList &nameFilters, QFlags<QDir::Filter> filters = QDir::NoFilter, QFlags<QDirIterator::IteratorFlag> flags = NoIteratorFlags);
+    ~QDirIterator();
+    QString next();
+    bool hasNext() const;
+    QString fileName() const;
+    QString filePath() const;
+    QFileInfo fileInfo() const;
+    QString path() const;
+
+private:
+    QDirIterator(const QDirIterator &);
+};
+
+QFlags<QDirIterator::IteratorFlag> operator|(QDirIterator::IteratorFlag f1, QFlags<QDirIterator::IteratorFlag> f2);
diff --git a/sip/QtCore/qeasingcurve.sip b/sip/QtCore/qeasingcurve.sip
new file mode 100644
index 0000000..b8f6360
--- /dev/null
+++ b/sip/QtCore/qeasingcurve.sip
@@ -0,0 +1,289 @@
+// qeasingcurve.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qeasingcurve.h>
+%End
+
+class QEasingCurve
+{
+%TypeHeaderCode
+#include <qeasingcurve.h>
+%End
+
+%TypeCode
+// The EasingFunction callback doesn't provide a context so we support a fixed
+// number of different functions.
+
+const int ec_nr_custom_types = 10;
+
+struct ec_custom_type {
+    PyObject *py_func;
+    QEasingCurve::EasingFunction func;
+};
+
+static qreal ec_call(int ec, qreal v);
+
+static qreal ec_func_0(qreal v)
+{
+    return ec_call(0, v);
+}
+
+static qreal ec_func_1(qreal v)
+{
+    return ec_call(1, v);
+}
+
+static qreal ec_func_2(qreal v)
+{
+    return ec_call(2, v);
+}
+
+static qreal ec_func_3(qreal v)
+{
+    return ec_call(3, v);
+}
+
+static qreal ec_func_4(qreal v)
+{
+    return ec_call(4, v);
+}
+
+static qreal ec_func_5(qreal v)
+{
+    return ec_call(5, v);
+}
+
+static qreal ec_func_6(qreal v)
+{
+    return ec_call(6, v);
+}
+
+static qreal ec_func_7(qreal v)
+{
+    return ec_call(7, v);
+}
+
+static qreal ec_func_8(qreal v)
+{
+    return ec_call(8, v);
+}
+
+static qreal ec_func_9(qreal v)
+{
+    return ec_call(9, v);
+}
+
+static ec_custom_type ec_custom_types[ec_nr_custom_types] = {
+    {0, ec_func_0},
+    {0, ec_func_1},
+    {0, ec_func_2},
+    {0, ec_func_3},
+    {0, ec_func_4},
+    {0, ec_func_5},
+    {0, ec_func_6},
+    {0, ec_func_7},
+    {0, ec_func_8},
+    {0, ec_func_9},
+};
+
+static qreal ec_call(int ec, qreal v)
+{
+    PyObject *res_obj;
+    qreal res = 0.0;
+
+    SIP_BLOCK_THREADS
+
+    res_obj = PyObject_CallFunction(ec_custom_types[ec].py_func, (char *)"(d)", (double)v);
+
+    if (res_obj)
+    {
+        PyErr_Clear();
+
+        res = PyFloat_AsDouble(res_obj);
+        Py_DECREF(res_obj);
+
+        if (PyErr_Occurred())
+            res_obj = 0;
+    }
+
+    if (!res_obj)
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+
+    return res;
+}
+%End
+
+%ConvertToTypeCode
+// Allow a QEasingCurve::Type whenever a QEasingCurve is expected.
+
+if (sipIsErr == NULL)
+{
+    if (sipCanConvertToType(sipPy, sipType_QEasingCurve, SIP_NO_CONVERTORS))
+        return 1;
+
+    if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_QEasingCurve_Type)))
+        return 1;
+
+    return 0;
+}
+
+if (sipCanConvertToType(sipPy, sipType_QEasingCurve, SIP_NO_CONVERTORS))
+{
+    *sipCppPtr = reinterpret_cast<QEasingCurve *>(sipConvertToType(sipPy, sipType_QEasingCurve, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+    return 0;
+}
+
+*sipCppPtr = new QEasingCurve((QEasingCurve::Type)SIPLong_AsLong(sipPy));
+
+return sipGetState(sipTransferObj);
+%End
+
+public:
+    enum Type
+    {
+        Linear,
+        InQuad,
+        OutQuad,
+        InOutQuad,
+        OutInQuad,
+        InCubic,
+        OutCubic,
+        InOutCubic,
+        OutInCubic,
+        InQuart,
+        OutQuart,
+        InOutQuart,
+        OutInQuart,
+        InQuint,
+        OutQuint,
+        InOutQuint,
+        OutInQuint,
+        InSine,
+        OutSine,
+        InOutSine,
+        OutInSine,
+        InExpo,
+        OutExpo,
+        InOutExpo,
+        OutInExpo,
+        InCirc,
+        OutCirc,
+        InOutCirc,
+        OutInCirc,
+        InElastic,
+        OutElastic,
+        InOutElastic,
+        OutInElastic,
+        InBack,
+        OutBack,
+        InOutBack,
+        OutInBack,
+        InBounce,
+        OutBounce,
+        InOutBounce,
+        OutInBounce,
+        InCurve,
+        OutCurve,
+        SineCurve,
+        CosineCurve,
+        BezierSpline,
+        TCBSpline,
+        Custom,
+    };
+
+    QEasingCurve(QEasingCurve::Type type = QEasingCurve::Linear);
+    QEasingCurve(const QEasingCurve &other);
+    ~QEasingCurve();
+    bool operator==(const QEasingCurve &other) const;
+    bool operator!=(const QEasingCurve &other) const;
+    qreal amplitude() const;
+    void setAmplitude(qreal amplitude);
+    qreal period() const;
+    void setPeriod(qreal period);
+    qreal overshoot() const;
+    void setOvershoot(qreal overshoot);
+    QEasingCurve::Type type() const;
+    void setType(QEasingCurve::Type type);
+    void setCustomType(SIP_PYCALLABLE func);
+%MethodCode
+        int i;
+        ec_custom_type *ct;
+        
+        for (i = 0; i < ec_nr_custom_types; ++i)
+        {
+            ct = &ec_custom_types[i];
+        
+            if (!ct->py_func || ct->py_func == a0)
+                break;
+        }
+        
+        if (i == ec_nr_custom_types)
+        {
+            PyErr_Format(PyExc_ValueError, "a maximum of %d different easing functions are supported", ec_nr_custom_types);
+            sipError = sipErrorFail;
+        }
+        else
+        {
+            if (!ct->py_func)
+            {
+                ct->py_func = a0;
+                Py_INCREF(a0);
+            }
+        
+            sipCpp->setCustomType(ct->func);
+        }
+%End
+
+    SIP_PYCALLABLE customType() const;
+%MethodCode
+        QEasingCurve::EasingFunction func = sipCpp->customType();
+        
+        sipRes = Py_None;
+        
+        if (func)
+        {
+            for (int i = 0; i < ec_nr_custom_types; ++i)
+            {
+                if (ec_custom_types[i].func == func)
+                {
+                    sipRes = ec_custom_types[i].py_func;
+                    break;
+                }
+            }
+        }
+        
+        Py_INCREF(sipRes);
+%End
+
+    qreal valueForProgress(qreal progress) const;
+    void swap(QEasingCurve &other);
+    void addCubicBezierSegment(const QPointF &c1, const QPointF &c2, const QPointF &endPoint);
+    void addTCBSegment(const QPointF &nextPoint, qreal t, qreal c, qreal b);
+    QVector<QPointF> toCubicSpline() const;
+};
+
+QDataStream &operator<<(QDataStream &, const QEasingCurve & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QEasingCurve & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtCore/qelapsedtimer.sip b/sip/QtCore/qelapsedtimer.sip
new file mode 100644
index 0000000..e014174
--- /dev/null
+++ b/sip/QtCore/qelapsedtimer.sip
@@ -0,0 +1,59 @@
+// qelapsedtimer.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qelapsedtimer.h>
+%End
+
+class QElapsedTimer
+{
+%TypeHeaderCode
+#include <qelapsedtimer.h>
+%End
+
+public:
+    enum ClockType
+    {
+        SystemTime,
+        MonotonicClock,
+        TickCounter,
+        MachAbsoluteTime,
+        PerformanceCounter,
+    };
+
+    static QElapsedTimer::ClockType clockType();
+    static bool isMonotonic();
+    void start();
+    qint64 restart();
+    void invalidate();
+    bool isValid() const;
+    qint64 elapsed() const;
+    bool hasExpired(qint64 timeout) const;
+    qint64 msecsSinceReference() const;
+    qint64 msecsTo(const QElapsedTimer &other) const;
+    qint64 secsTo(const QElapsedTimer &other) const;
+    bool operator==(const QElapsedTimer &other) const;
+    bool operator!=(const QElapsedTimer &other) const;
+    qint64 nsecsElapsed() const;
+};
+
+bool operator<(const QElapsedTimer &v1, const QElapsedTimer &v2);
diff --git a/sip/QtCore/qeventloop.sip b/sip/QtCore/qeventloop.sip
new file mode 100644
index 0000000..156e72c
--- /dev/null
+++ b/sip/QtCore/qeventloop.sip
@@ -0,0 +1,80 @@
+// qeventloop.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qeventloop.h>
+%End
+
+class QEventLoop : QObject
+{
+%TypeHeaderCode
+#include <qeventloop.h>
+%End
+
+public:
+    explicit QEventLoop(QObject *parent /TransferThis/ = 0);
+    virtual ~QEventLoop();
+
+    enum ProcessEventsFlag
+    {
+        AllEvents,
+        ExcludeUserInputEvents,
+        ExcludeSocketNotifiers,
+        WaitForMoreEvents,
+        X11ExcludeTimers,
+    };
+
+    typedef QFlags<QEventLoop::ProcessEventsFlag> ProcessEventsFlags;
+    bool processEvents(QFlags<QEventLoop::ProcessEventsFlag> flags = AllEvents) /ReleaseGIL/;
+    void processEvents(QFlags<QEventLoop::ProcessEventsFlag> flags, int maximumTime) /ReleaseGIL/;
+    int exec(QFlags<QEventLoop::ProcessEventsFlag> flags = AllEvents) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    int exec(QFlags<QEventLoop::ProcessEventsFlag> flags = AllEvents) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/;
+%End
+    void exit(int returnCode = 0);
+    bool isRunning() const;
+    void wakeUp();
+
+public slots:
+    void quit();
+
+public:
+    virtual bool event(QEvent *event);
+};
+
+QFlags<QEventLoop::ProcessEventsFlag> operator|(QEventLoop::ProcessEventsFlag f1, QFlags<QEventLoop::ProcessEventsFlag> f2);
+
+class QEventLoopLocker
+{
+%TypeHeaderCode
+#include <qeventloop.h>
+%End
+
+public:
+    QEventLoopLocker() /ReleaseGIL/;
+    explicit QEventLoopLocker(QEventLoop *loop) /ReleaseGIL/;
+    explicit QEventLoopLocker(QThread *thread) /ReleaseGIL/;
+    ~QEventLoopLocker();
+
+private:
+    QEventLoopLocker(const QEventLoopLocker &);
+};
diff --git a/sip/QtCore/qeventtransition.sip b/sip/QtCore/qeventtransition.sip
new file mode 100644
index 0000000..e4db032
--- /dev/null
+++ b/sip/QtCore/qeventtransition.sip
@@ -0,0 +1,45 @@
+// qeventtransition.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QEventTransition : QAbstractTransition
+{
+%TypeHeaderCode
+#include <qeventtransition.h>
+%End
+
+public:
+    QEventTransition(QState *sourceState /TransferThis/ = 0);
+    QEventTransition(QObject *object /KeepReference=10/, QEvent::Type type, QState *sourceState /TransferThis/ = 0);
+    virtual ~QEventTransition();
+    QObject *eventSource() const;
+    void setEventSource(QObject *object /KeepReference=10/);
+    QEvent::Type eventType() const;
+    void setEventType(QEvent::Type type);
+
+protected:
+    virtual bool eventTest(QEvent *event);
+    virtual void onTransition(QEvent *event);
+    virtual bool event(QEvent *e);
+
+private:
+    QEventTransition(const QEventTransition &);
+};
diff --git a/sip/QtCore/qfile.sip b/sip/QtCore/qfile.sip
new file mode 100644
index 0000000..44cb77a
--- /dev/null
+++ b/sip/QtCore/qfile.sip
@@ -0,0 +1,64 @@
+// qfile.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFile : QFileDevice
+{
+%TypeHeaderCode
+#include <qfile.h>
+%End
+
+public:
+    QFile();
+    QFile(const QString &name);
+    explicit QFile(QObject *parent /TransferThis/);
+    QFile(const QString &name, QObject *parent /TransferThis/);
+    virtual ~QFile();
+    virtual QString fileName() const;
+    void setFileName(const QString &name);
+    static QByteArray encodeName(const QString &fileName);
+    static QString decodeName(const QByteArray &localFileName);
+    static QString decodeName(const char *localFileName /Encoding="ASCII"/);
+    bool exists() const;
+    static bool exists(const QString &fileName);
+    QString symLinkTarget() const;
+    static QString symLinkTarget(const QString &fileName);
+    bool remove() /ReleaseGIL/;
+    static bool remove(const QString &fileName) /ReleaseGIL/;
+    bool rename(const QString &newName) /ReleaseGIL/;
+    static bool rename(const QString &oldName, const QString &newName) /ReleaseGIL/;
+    bool link(const QString &newName) /ReleaseGIL/;
+    static bool link(const QString &oldname, const QString &newName) /ReleaseGIL/;
+    bool copy(const QString &newName) /ReleaseGIL/;
+    static bool copy(const QString &fileName, const QString &newName) /ReleaseGIL/;
+    virtual bool open(QFlags<QIODevice::OpenModeFlag> flags) /ReleaseGIL/;
+    bool open(int fd, QFlags<QIODevice::OpenModeFlag> ioFlags, QFlags<QFileDevice::FileHandleFlag> handleFlags = QFileDevice::DontCloseHandle);
+    virtual qint64 size() const;
+    virtual bool resize(qint64 sz);
+    static bool resize(const QString &filename, qint64 sz);
+    virtual QFlags<QFileDevice::Permission> permissions() const;
+    static QFlags<QFileDevice::Permission> permissions(const QString &filename);
+    virtual bool setPermissions(QFlags<QFileDevice::Permission> permissionSpec);
+    static bool setPermissions(const QString &filename, QFlags<QFileDevice::Permission> permissionSpec);
+
+private:
+    QFile(const QFile &);
+};
diff --git a/sip/QtCore/qfiledevice.sip b/sip/QtCore/qfiledevice.sip
new file mode 100644
index 0000000..421806d
--- /dev/null
+++ b/sip/QtCore/qfiledevice.sip
@@ -0,0 +1,184 @@
+// qfiledevice.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qfiledevice.h>
+%End
+
+class QFileDevice : QIODevice /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qfiledevice.h>
+%End
+
+public:
+    enum FileError
+    {
+        NoError,
+        ReadError,
+        WriteError,
+        FatalError,
+        ResourceError,
+        OpenError,
+        AbortError,
+        TimeOutError,
+        UnspecifiedError,
+        RemoveError,
+        RenameError,
+        PositionError,
+        ResizeError,
+        PermissionsError,
+        CopyError,
+    };
+
+    enum Permission
+    {
+        ReadOwner,
+        WriteOwner,
+        ExeOwner,
+        ReadUser,
+        WriteUser,
+        ExeUser,
+        ReadGroup,
+        WriteGroup,
+        ExeGroup,
+        ReadOther,
+        WriteOther,
+        ExeOther,
+    };
+
+    typedef QFlags<QFileDevice::Permission> Permissions;
+
+    enum FileHandleFlag
+    {
+        AutoCloseHandle,
+        DontCloseHandle,
+    };
+
+    typedef QFlags<QFileDevice::FileHandleFlag> FileHandleFlags;
+    virtual ~QFileDevice();
+    QFileDevice::FileError error() const;
+    void unsetError();
+    virtual void close() /ReleaseGIL/;
+    virtual bool isSequential() const;
+    int handle() const;
+    virtual QString fileName() const;
+    virtual qint64 pos() const;
+    virtual bool seek(qint64 offset) /ReleaseGIL/;
+    virtual bool atEnd() const;
+    bool flush() /ReleaseGIL/;
+    virtual qint64 size() const;
+    virtual bool resize(qint64 sz);
+    virtual QFlags<QFileDevice::Permission> permissions() const;
+    virtual bool setPermissions(QFlags<QFileDevice::Permission> permissionSpec);
+
+    enum MemoryMapFlags
+    {
+        NoOptions,
+    };
+
+    void *map(qint64 offset, qint64 size /ResultSize/, QFileDevice::MemoryMapFlags flags = QFileDevice::NoOptions) [uchar * (qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = QFileDevice::NoOptions)];
+    bool unmap(void *address) [bool (uchar *address)];
+
+protected:
+    virtual SIP_PYOBJECT readData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QFileDevice::readData(s, a0) : sipCpp->readData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/;
+    virtual SIP_PYOBJECT readLineData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QFileDevice::readLineData(s, a0) : sipCpp->readLineData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+private:
+    QFileDevice(const QFileDevice &);
+};
+
+QFlags<QFileDevice::Permission> operator|(QFileDevice::Permission f1, QFlags<QFileDevice::Permission> f2);
diff --git a/sip/QtCore/qfileinfo.sip b/sip/QtCore/qfileinfo.sip
new file mode 100644
index 0000000..a5aae1e
--- /dev/null
+++ b/sip/QtCore/qfileinfo.sip
@@ -0,0 +1,89 @@
+// qfileinfo.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFileInfo
+{
+%TypeHeaderCode
+#include <qfileinfo.h>
+%End
+
+public:
+    QFileInfo();
+    QFileInfo(const QString &file);
+    QFileInfo(const QFile &file);
+    QFileInfo(const QDir &dir, const QString &file);
+    QFileInfo(const QFileInfo &fileinfo);
+    ~QFileInfo();
+    bool operator==(const QFileInfo &fileinfo) const;
+    bool operator!=(const QFileInfo &fileinfo) const;
+    void setFile(const QString &file);
+    void setFile(const QFile &file);
+    void setFile(const QDir &dir, const QString &file);
+    bool exists() const;
+    void refresh();
+    QString filePath() const;
+    QString absoluteFilePath() const;
+    QString canonicalFilePath() const;
+    QString fileName() const;
+    QString baseName() const;
+    QString completeBaseName() const;
+    QString suffix() const;
+    QString completeSuffix() const;
+    QString path() const;
+    QString absolutePath() const;
+    QString canonicalPath() const;
+    QDir dir() const;
+    QDir absoluteDir() const;
+    bool isReadable() const;
+    bool isWritable() const;
+    bool isExecutable() const;
+    bool isHidden() const;
+    bool isRelative() const;
+    bool isAbsolute() const;
+    bool makeAbsolute();
+    bool isFile() const;
+    bool isDir() const;
+    bool isSymLink() const;
+    bool isRoot() const;
+    QString owner() const;
+    uint ownerId() const;
+    QString group() const;
+    uint groupId() const;
+    bool permission(QFlags<QFileDevice::Permission> permissions) const;
+    QFlags<QFileDevice::Permission> permissions() const;
+    qint64 size() const;
+    QDateTime created() const;
+    QDateTime lastModified() const;
+    QDateTime lastRead() const;
+    bool caching() const;
+    void setCaching(bool on);
+    QString symLinkTarget() const;
+    QString bundleName() const;
+    bool isBundle() const;
+    bool isNativePath() const;
+    void swap(QFileInfo &other);
+%If (Qt_5_2_0 -)
+    static bool exists(const QString &file);
+%End
+};
+
+typedef QList<QFileInfo> QFileInfoList;
diff --git a/sip/QtCore/qfileselector.sip b/sip/QtCore/qfileselector.sip
new file mode 100644
index 0000000..6618b8f
--- /dev/null
+++ b/sip/QtCore/qfileselector.sip
@@ -0,0 +1,41 @@
+// qfileselector.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QFileSelector : QObject
+{
+%TypeHeaderCode
+#include <qfileselector.h>
+%End
+
+public:
+    explicit QFileSelector(QObject *parent /TransferThis/ = 0);
+    virtual ~QFileSelector();
+    QString select(const QString &filePath) const;
+    QUrl select(const QUrl &filePath) const;
+    QStringList extraSelectors() const;
+    void setExtraSelectors(const QStringList &list);
+    QStringList allSelectors() const;
+};
+
+%End
diff --git a/sip/QtCore/qfilesystemwatcher.sip b/sip/QtCore/qfilesystemwatcher.sip
new file mode 100644
index 0000000..de066eb
--- /dev/null
+++ b/sip/QtCore/qfilesystemwatcher.sip
@@ -0,0 +1,43 @@
+// qfilesystemwatcher.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFileSystemWatcher : QObject
+{
+%TypeHeaderCode
+#include <qfilesystemwatcher.h>
+%End
+
+public:
+    QFileSystemWatcher(QObject *parent /TransferThis/ = 0);
+    QFileSystemWatcher(const QStringList &paths, QObject *parent /TransferThis/ = 0);
+    virtual ~QFileSystemWatcher();
+    bool addPath(const QString &file);
+    QStringList addPaths(const QStringList &files);
+    QStringList directories() const;
+    QStringList files() const;
+    bool removePath(const QString &file);
+    QStringList removePaths(const QStringList &files);
+
+signals:
+    void directoryChanged(const QString &path);
+    void fileChanged(const QString &path);
+};
diff --git a/sip/QtCore/qfinalstate.sip b/sip/QtCore/qfinalstate.sip
new file mode 100644
index 0000000..54cc02a
--- /dev/null
+++ b/sip/QtCore/qfinalstate.sip
@@ -0,0 +1,40 @@
+// qfinalstate.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFinalState : QAbstractState
+{
+%TypeHeaderCode
+#include <qfinalstate.h>
+%End
+
+public:
+    QFinalState(QState *parent /TransferThis/ = 0);
+    virtual ~QFinalState();
+
+protected:
+    virtual void onEntry(QEvent *event);
+    virtual void onExit(QEvent *event);
+    virtual bool event(QEvent *e);
+
+private:
+    QFinalState(const QFinalState &);
+};
diff --git a/sip/QtCore/qglobal.sip b/sip/QtCore/qglobal.sip
new file mode 100644
index 0000000..94812dd
--- /dev/null
+++ b/sip/QtCore/qglobal.sip
@@ -0,0 +1,230 @@
+// qglobal.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qglobal.h>
+%End
+
+// PyQt version information.
+int PYQT_VERSION;
+const char *PYQT_VERSION_STR;
+
+%ModuleCode
+static int PYQT_VERSION = 0x050302;
+static const char *PYQT_VERSION_STR = "5.3.2";
+%End
+const int QT_VERSION;
+const char *QT_VERSION_STR;
+typedef signed char qint8 /PyInt/;
+typedef unsigned char quint8 /PyInt/;
+typedef short qint16;
+typedef unsigned short quint16;
+typedef int qint32;
+typedef unsigned int quint32;
+typedef long long qint64;
+typedef unsigned long long quint64;
+typedef qint64 qlonglong;
+typedef quint64 qulonglong;
+%If (PyQt_qreal_double)
+typedef double qreal;
+%End
+%If (!PyQt_qreal_double)
+typedef float qreal;
+%End
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+typedef unsigned int uint;
+typedef unsigned long ulong;
+double qAbs(const double &t);
+int qRound(qreal d);
+qint64 qRound64(qreal d);
+const char *qVersion();
+bool qSharedBuild();
+// Template definition for QFlags.
+template<ENUM>
+class QFlags /PyQtFlags=0x1/
+{
+public:
+    QFlags(const QFlags &);
+    // This is handled by the %ConvertToTypeCode.
+    //QFlags(ENUM);
+    // This is a convenience, eg. to restore a set of flags from QSettings.
+    QFlags(int);
+    QFlags();
+
+    QFlags &operator&=(int mask);
+    QFlags &operator|=(QFlags f);
+    //QFlags &operator|=(ENUM f);
+    QFlags &operator^=(QFlags f);
+    //QFlags &operator^=(ENUM f);
+
+    operator int() const;
+
+    QFlags operator|(QFlags f) const;
+    //QFlags operator|(ENUM f) const;
+    QFlags operator^(QFlags f) const;
+    //QFlags operator^(ENUM f) const;
+    QFlags operator&(int mask) const;
+    //QFlags operator&(ENUM f) const;
+    QFlags operator~() const;
+
+    // These are here to ensure consistency between, for example:
+    //   Qt.AlignLeft | Qt.AlignTop | Qt.TextWordWrap and
+    //   Qt.AlignLeft | Qt.TextWordWrap | Qt.AlignTop
+    // In the first of the above Qt.TextWordWrap is ored with a
+    // Qt.AlignmentFlag enum.  In the second it is being ored with a
+    // Qt.Alignment class.
+    QFlags operator|(int f);
+%MethodCode
+        sipRes = new QFlags(*a0 | a1);
+%End
+
+    QFlags operator^(int f);
+%MethodCode
+        sipRes = new QFlags(*a0 ^ a1);
+%End
+
+    // These are necessary to prevent Python comparing object IDs.
+    bool operator==(const QFlags &f) const;
+%MethodCode
+        sipRes = (sipCpp->operator QFlags::Int() == a0->operator QFlags::Int());
+%End
+
+    bool operator!=(const QFlags &f) const;
+%MethodCode
+        sipRes = (sipCpp->operator QFlags::Int() != a0->operator QFlags::Int());
+%End
+
+    int __bool__() const;
+%MethodCode
+        sipRes = (sipCpp->operator QFlags::Int() != 0);
+%End
+
+
+%ConvertToTypeCode
+// Allow an instance of the base enum whenever a QFlags is expected.
+
+if (sipIsErr == NULL)
+    return (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_ENUM)) ||
+            sipCanConvertToType(sipPy, sipType_QFlags, SIP_NO_CONVERTORS));
+
+if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_ENUM)))
+{
+    *sipCppPtr = new QFlags(int(SIPLong_AsLong(sipPy)));
+
+    return sipGetState(sipTransferObj);
+}
+
+*sipCppPtr = reinterpret_cast<QFlags *>(sipConvertToType(sipPy, sipType_QFlags, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+return 0;
+%End
+};
+// Hook's into Qt's resource system.
+%ModuleCode
+QT_BEGIN_NAMESPACE
+extern bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *);
+extern bool qUnregisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *);
+QT_END_NAMESPACE
+%End
+
+bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *);
+bool qUnregisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *);
+bool qFuzzyCompare(double p1, double p2);
+bool qIsNull(double d);
+void qsrand(uint seed);
+int qrand();
+typedef void *QFunctionPointer;
+// Mapped type for qintptr.
+// Map qintptr onto sip.voidptr.  This means either an address (on Windows) or
+// an integer file descriptor (on everything else) can be used.
+%MappedType qintptr /DocType="sip.voidptr"/
+{
+%TypeHeaderCode
+#include <QtGlobal>
+%End
+
+%ConvertToTypeCode
+    qintptr ptr = (qintptr)sipConvertToVoidPtr(sipPy);
+
+    if (!sipIsErr)
+        return !PyErr_Occurred();
+
+    // Mapped types deal with pointers, so create one on the heap.
+    qintptr *heap = new qintptr;
+    *heap = ptr;
+
+    *sipCppPtr = heap;
+
+    // Make sure the pointer doesn't leak.
+    return SIP_TEMPORARY;
+%End
+
+%ConvertFromTypeCode
+    return sipConvertFromVoidPtr((void *)*sipCpp);
+%End
+};
+// Mapped type for quintptr.
+// Map quintptr onto sip.voidptr.  This means either an address (on Windows) or
+// an integer file descriptor (on everything else) can be used.
+%MappedType quintptr /DocType="sip.voidptr"/
+{
+%TypeHeaderCode
+#include <QtGlobal>
+%End
+
+%ConvertToTypeCode
+    quintptr ptr = (quintptr)sipConvertToVoidPtr(sipPy);
+
+    if (!sipIsErr)
+        return !PyErr_Occurred();
+
+    // Mapped types deal with pointers, so create one on the heap.
+    quintptr *heap = new quintptr;
+    *heap = ptr;
+
+    *sipCppPtr = heap;
+
+    // Make sure the pointer doesn't leak.
+    return SIP_TEMPORARY;
+%End
+
+%ConvertFromTypeCode
+    return sipConvertFromVoidPtr((void *)*sipCpp);
+%End
+};
+// Implementations of pyqt[Set]PickleProtocol().
+void pyqtSetPickleProtocol(SIP_PYOBJECT /DocType="int-or-None"/);
+%MethodCode
+    Py_XDECREF(qpycore_pickle_protocol);
+    qpycore_pickle_protocol = a0;
+    Py_INCREF(qpycore_pickle_protocol);
+%End
+
+SIP_PYOBJECT pyqtPickleProtocol() /DocType="int-or-None"/;
+%MethodCode
+    sipRes = qpycore_pickle_protocol;
+    if (!sipRes)
+        sipRes = Py_None;
+    
+    Py_INCREF(sipRes);
+%End
diff --git a/sip/QtCore/qhistorystate.sip b/sip/QtCore/qhistorystate.sip
new file mode 100644
index 0000000..3f210c3
--- /dev/null
+++ b/sip/QtCore/qhistorystate.sip
@@ -0,0 +1,51 @@
+// qhistorystate.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHistoryState : QAbstractState
+{
+%TypeHeaderCode
+#include <qhistorystate.h>
+%End
+
+public:
+    enum HistoryType
+    {
+        ShallowHistory,
+        DeepHistory,
+    };
+
+    QHistoryState(QState *parent /TransferThis/ = 0);
+    QHistoryState(QHistoryState::HistoryType type, QState *parent /TransferThis/ = 0);
+    virtual ~QHistoryState();
+    QAbstractState *defaultState() const;
+    void setDefaultState(QAbstractState *state /KeepReference/);
+    QHistoryState::HistoryType historyType() const;
+    void setHistoryType(QHistoryState::HistoryType type);
+
+protected:
+    virtual void onEntry(QEvent *event);
+    virtual void onExit(QEvent *event);
+    virtual bool event(QEvent *e);
+
+private:
+    QHistoryState(const QHistoryState &);
+};
diff --git a/sip/QtCore/qidentityproxymodel.sip b/sip/QtCore/qidentityproxymodel.sip
new file mode 100644
index 0000000..40e0aa0
--- /dev/null
+++ b/sip/QtCore/qidentityproxymodel.sip
@@ -0,0 +1,52 @@
+// qidentityproxymodel.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QIdentityProxyModel : QAbstractProxyModel
+{
+%TypeHeaderCode
+#include <qidentityproxymodel.h>
+%End
+
+public:
+    explicit QIdentityProxyModel(QObject *parent /TransferThis/ = 0);
+    virtual ~QIdentityProxyModel();
+    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+    virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;
+    virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
+    virtual QModelIndex parent(const QModelIndex &child) const;
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+    virtual QItemSelection mapSelectionFromSource(const QItemSelection &selection) const;
+    virtual QItemSelection mapSelectionToSource(const QItemSelection &selection) const;
+    virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchStartsWith|Qt::MatchWrap) const;
+    virtual void setSourceModel(QAbstractItemModel *sourceModel /KeepReference/);
+    virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+    virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
+
+private:
+    QIdentityProxyModel(const QIdentityProxyModel &);
+};
diff --git a/sip/QtCore/qiodevice.sip b/sip/QtCore/qiodevice.sip
new file mode 100644
index 0000000..34db0b8
--- /dev/null
+++ b/sip/QtCore/qiodevice.sip
@@ -0,0 +1,303 @@
+// qiodevice.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qiodevice.h>
+%End
+
+class QIODevice : QObject
+{
+%TypeHeaderCode
+#include <qiodevice.h>
+%End
+
+public:
+    enum OpenModeFlag
+    {
+        NotOpen,
+        ReadOnly,
+        WriteOnly,
+        ReadWrite,
+        Append,
+        Truncate,
+        Text,
+        Unbuffered,
+    };
+
+    typedef QFlags<QIODevice::OpenModeFlag> OpenMode;
+    QIODevice();
+    explicit QIODevice(QObject *parent /TransferThis/);
+    virtual ~QIODevice();
+    QFlags<QIODevice::OpenModeFlag> openMode() const;
+    void setTextModeEnabled(bool enabled);
+    bool isTextModeEnabled() const;
+    bool isOpen() const;
+    bool isReadable() const;
+    bool isWritable() const;
+    virtual bool isSequential() const;
+    virtual bool open(QFlags<QIODevice::OpenModeFlag> mode) /ReleaseGIL/;
+    virtual void close() /ReleaseGIL/;
+    virtual qint64 pos() const;
+    virtual qint64 size() const;
+    virtual bool seek(qint64 pos) /ReleaseGIL/;
+    virtual bool atEnd() const;
+    virtual bool reset();
+    virtual qint64 bytesAvailable() const;
+    virtual qint64 bytesToWrite() const;
+    SIP_PYOBJECT read(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/;
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+            len = sipCpp->read(s, a0);
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    QByteArray readAll() /ReleaseGIL/;
+    SIP_PYOBJECT readLine(qint64 maxlen=0) /DocType="Py_v3:bytes;str",ReleaseGIL/;
+%MethodCode
+        // The two C++ overloads would have the same Python signature so we get most of
+        // the combined functionality by treating an argument of 0 (the default) as
+        // meaning return a QByteArray of any length.  Otherwise it is treated as a
+        // maximum buffer size and a Python string is returned.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else if (a0 == 0)
+        {
+            QByteArray *ba;
+        
+            Py_BEGIN_ALLOW_THREADS
+            ba = new QByteArray(sipCpp->readLine(a0));
+            Py_END_ALLOW_THREADS
+        
+            sipRes = sipBuildResult(&sipIsErr, "N", ba, sipType_QByteArray, 0);
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+            len = sipCpp->readLine(s, a0);
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual bool canReadLine() const;
+    QByteArray peek(qint64 maxlen) /ReleaseGIL/;
+    qint64 write(const QByteArray &data) /ReleaseGIL/;
+    virtual bool waitForReadyRead(int msecs) /ReleaseGIL/;
+    virtual bool waitForBytesWritten(int msecs) /ReleaseGIL/;
+    void ungetChar(char c);
+    bool putChar(char c);
+    bool getChar(char *c /Encoding="None",Out/);
+    QString errorString() const;
+
+signals:
+    void readyRead();
+    void bytesWritten(qint64 bytes);
+    void aboutToClose();
+    void readChannelFinished();
+
+protected:
+    virtual SIP_PYOBJECT readData(qint64 maxlen) = 0 /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipCpp->readData(s, a0);
+        #else
+            len = sipCpp->sipProtect_readData(s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+%VirtualCatcherCode
+        PyObject *result = sipCallMethod(&sipIsErr, sipMethod, "n", a1);
+        
+        if (result != NULL)
+        {
+            PyObject *buf;
+        
+            sipParseResult(&sipIsErr, sipMethod, result, "O", &buf);
+        
+            if (buf == Py_None)
+                sipRes = -1L;
+            else if (!SIPBytes_Check(buf))
+            {
+                sipBadCatcherResult(sipMethod);
+                sipIsErr = 1;
+            }
+            else
+            {
+                memcpy(a0, SIPBytes_AS_STRING(buf), SIPBytes_GET_SIZE(buf));
+                sipRes = SIPBytes_GET_SIZE(buf);
+            }
+        
+            Py_DECREF(buf);
+            Py_DECREF(result);
+        }
+%End
+
+    virtual SIP_PYOBJECT readLineData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QIODevice::readLineData(s, a0) : sipCpp->readLineData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+%VirtualCatcherCode
+        PyObject *result = sipCallMethod(&sipIsErr, sipMethod, "n", a1);
+        
+        if (result != NULL)
+        {
+            PyObject *buf;
+        
+            sipParseResult(&sipIsErr, sipMethod, result, "O", &buf);
+        
+            if (buf == Py_None)
+                sipRes = -1L;
+            else if (!SIPBytes_Check(buf))
+            {
+                sipBadCatcherResult(sipMethod);
+                sipIsErr = 1;
+            }
+            else
+            {
+                memcpy(a0, SIPBytes_AS_STRING(buf), SIPBytes_GET_SIZE(buf));
+                sipRes = SIPBytes_GET_SIZE(buf);
+            }
+        
+            Py_DECREF(buf);
+            Py_DECREF(result);
+        }
+%End
+
+    virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) = 0;
+    void setOpenMode(QFlags<QIODevice::OpenModeFlag> openMode);
+    void setErrorString(const QString &errorString);
+
+private:
+    QIODevice(const QIODevice &);
+};
+
+QFlags<QIODevice::OpenModeFlag> operator|(QIODevice::OpenModeFlag f1, QFlags<QIODevice::OpenModeFlag> f2);
diff --git a/sip/QtCore/qitemselectionmodel.sip b/sip/QtCore/qitemselectionmodel.sip
new file mode 100644
index 0000000..1ead23d
--- /dev/null
+++ b/sip/QtCore/qitemselectionmodel.sip
@@ -0,0 +1,289 @@
+// qitemselectionmodel.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qitemselectionmodel.h>
+%End
+
+class QItemSelectionRange
+{
+%TypeHeaderCode
+#include <qitemselectionmodel.h>
+%End
+
+public:
+    QItemSelectionRange();
+    QItemSelectionRange(const QItemSelectionRange &other);
+    QItemSelectionRange(const QModelIndex &atopLeft, const QModelIndex &abottomRight);
+    explicit QItemSelectionRange(const QModelIndex &index);
+    int top() const;
+    int left() const;
+    int bottom() const;
+    int right() const;
+    int width() const;
+    int height() const;
+    const QPersistentModelIndex &topLeft() const;
+    const QPersistentModelIndex &bottomRight() const;
+    QModelIndex parent() const;
+    const QAbstractItemModel *model() const;
+    bool contains(const QModelIndex &index) const;
+    bool contains(int row, int column, const QModelIndex &parentIndex) const;
+    bool intersects(const QItemSelectionRange &other) const;
+    bool operator==(const QItemSelectionRange &other) const;
+    bool operator!=(const QItemSelectionRange &other) const;
+    bool isValid() const;
+    QModelIndexList indexes() const;
+    QItemSelectionRange intersected(const QItemSelectionRange &other) const;
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+
+    bool isEmpty() const;
+    bool operator<(const QItemSelectionRange &other) const;
+};
+
+class QItemSelectionModel : QObject
+{
+%TypeHeaderCode
+#include <qitemselectionmodel.h>
+%End
+
+public:
+    enum SelectionFlag
+    {
+        NoUpdate,
+        Clear,
+        Select,
+        Deselect,
+        Toggle,
+        Current,
+        Rows,
+        Columns,
+        SelectCurrent,
+        ToggleCurrent,
+        ClearAndSelect,
+    };
+
+    typedef QFlags<QItemSelectionModel::SelectionFlag> SelectionFlags;
+    explicit QItemSelectionModel(QAbstractItemModel *model /TransferThis/);
+    QItemSelectionModel(QAbstractItemModel *model, QObject *parent /TransferThis/);
+    virtual ~QItemSelectionModel();
+    QModelIndex currentIndex() const;
+    bool isSelected(const QModelIndex &index) const;
+    bool isRowSelected(int row, const QModelIndex &parent) const;
+    bool isColumnSelected(int column, const QModelIndex &parent) const;
+    bool rowIntersectsSelection(int row, const QModelIndex &parent) const;
+    bool columnIntersectsSelection(int column, const QModelIndex &parent) const;
+    QModelIndexList selectedIndexes() const;
+    const QItemSelection selection() const;
+    const QAbstractItemModel *model() const;
+
+public slots:
+    virtual void clear();
+    void clearSelection();
+    virtual void reset();
+    virtual void select(const QModelIndex &index, QFlags<QItemSelectionModel::SelectionFlag> command);
+    virtual void select(const QItemSelection &selection, QFlags<QItemSelectionModel::SelectionFlag> command);
+    virtual void setCurrentIndex(const QModelIndex &index, QFlags<QItemSelectionModel::SelectionFlag> command);
+    virtual void clearCurrentIndex();
+
+signals:
+    void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+    void currentChanged(const QModelIndex &current, const QModelIndex &previous);
+    void currentRowChanged(const QModelIndex &current, const QModelIndex &previous);
+    void currentColumnChanged(const QModelIndex &current, const QModelIndex &previous);
+
+protected:
+    void emitSelectionChanged(const QItemSelection &newSelection, const QItemSelection &oldSelection);
+
+public:
+    bool hasSelection() const;
+    QModelIndexList selectedRows(int column = 0) const;
+    QModelIndexList selectedColumns(int row = 0) const;
+
+private:
+    QItemSelectionModel(const QItemSelectionModel &);
+};
+
+QFlags<QItemSelectionModel::SelectionFlag> operator|(QItemSelectionModel::SelectionFlag f1, QFlags<QItemSelectionModel::SelectionFlag> f2);
+
+class QItemSelection
+{
+%TypeHeaderCode
+#include <qitemselectionmodel.h>
+%End
+
+public:
+    QItemSelection();
+    QItemSelection(const QModelIndex &topLeft, const QModelIndex &bottomRight);
+    void select(const QModelIndex &topLeft, const QModelIndex &bottomRight);
+    bool contains(const QModelIndex &index) const;
+    int __contains__(const QModelIndex &index);
+%MethodCode
+        // It looks like you can't assign QBool to int.
+        sipRes = bool(sipCpp->contains(*a0));
+%End
+
+    QModelIndexList indexes() const;
+    void merge(const QItemSelection &other, QFlags<QItemSelectionModel::SelectionFlag> command);
+    static void split(const QItemSelectionRange &range, const QItemSelectionRange &other, QItemSelection *result);
+    void __setitem__(int i, const QItemSelectionRange &range);
+%MethodCode
+        int len;
+        
+        len = sipCpp->count();
+        
+        if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0)
+            sipIsErr = 1;
+        else
+            (*sipCpp)[a0] = *a1;
+%End
+
+    void __setitem__(SIP_PYSLICE slice, const QItemSelection &list);
+%MethodCode
+        SIP_SSIZE_T len, start, stop, step, slicelength, i;
+        
+        len = sipCpp->count();
+        
+        #if PY_VERSION_HEX >= 0x03020000
+        if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+        #else
+        if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+        #endif
+            sipIsErr = 1;
+        else
+        {
+            int vlen = a1->count();
+        
+            if (vlen != slicelength)
+            {
+                sipBadLengthForSlice(vlen, slicelength);
+                sipIsErr = 1;
+            }
+            else
+            {
+                QItemSelection::const_iterator it = a1->begin();
+        
+                for (i = 0; i < slicelength; ++i)
+                {
+                    (*sipCpp)[start] = *it;
+                    start += step;
+                    ++it;
+                }
+            }
+        }
+%End
+
+    void __delitem__(int i);
+%MethodCode
+        int len;
+        
+        len = sipCpp->count();
+        
+        if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0)
+            sipIsErr = 1;
+        else
+            sipCpp->removeAt(a0);
+%End
+
+    void __delitem__(SIP_PYSLICE slice);
+%MethodCode
+        SIP_SSIZE_T len, start, stop, step, slicelength, i;
+        
+        len = sipCpp->count();
+        
+        #if PY_VERSION_HEX >= 0x03020000
+        if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+        #else
+        if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+        #endif
+            sipIsErr = 1;
+        else
+            for (i = 0; i < slicelength; ++i)
+            {
+                sipCpp->removeAt(start);
+                start += step - 1;
+            }
+%End
+
+    QItemSelectionRange operator[](int i);
+%MethodCode
+        SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
+        
+        if (idx < 0)
+            sipIsErr = 1;
+        else
+            sipRes = new QItemSelectionRange(sipCpp->operator[]((int)idx));
+%End
+
+    QItemSelection operator[](SIP_PYSLICE slice);
+%MethodCode
+        SIP_SSIZE_T len, start, stop, step, slicelength, i;
+        
+        len = sipCpp->count();
+        
+        #if PY_VERSION_HEX >= 0x03020000
+        if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+        #else
+        if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+        #endif
+            sipIsErr = 1;
+        else
+        {
+            sipRes = new QItemSelection();
+        
+            for (i = 0; i < slicelength; ++i)
+            {
+                (*sipRes) += (*sipCpp)[start];
+                start += step;
+            }
+        }
+%End
+
+// Methods inherited from QList<QItemSelectionRange>.
+bool operator!=(const QItemSelection &other) const;
+bool operator==(const QItemSelection &other) const;
+
+// Keep the following in sync with QStringList (except for mid()).
+void clear();
+bool isEmpty() const;
+void append(const QItemSelectionRange &range);
+void prepend(const QItemSelectionRange &range);
+void insert(int i, const QItemSelectionRange &range);
+void replace(int i, const QItemSelectionRange &range);
+void removeAt(int i);
+int removeAll(const QItemSelectionRange &range);
+QItemSelectionRange takeAt(int i);
+QItemSelectionRange takeFirst();
+QItemSelectionRange takeLast();
+void move(int from, int to);
+void swap(int i, int j);
+int count(const QItemSelectionRange &range) const;
+int count() const /__len__/;
+QItemSelectionRange &first();
+QItemSelectionRange &last();
+int indexOf(const QItemSelectionRange &value, int from = 0) const;
+int lastIndexOf(const QItemSelectionRange &value, int from = -1) const;
+QItemSelection &operator+=(const QItemSelection &other);
+QItemSelection &operator+=(const QItemSelectionRange &value);
+};
diff --git a/sip/QtCore/qjsonarray.sip b/sip/QtCore/qjsonarray.sip
new file mode 100644
index 0000000..5f386e3
--- /dev/null
+++ b/sip/QtCore/qjsonarray.sip
@@ -0,0 +1,130 @@
+// This is the SIP interface definition for the QJsonArray mapped type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+// Note that we assume any iterable can be converted to a QJsonArray.  However,
+// because QJsonObject is implemented as a dict (which is also an iterable),
+// then any overloads that handle both must be ordered so that QJsonObject is
+// checked first.
+
+%MappedType QJsonArray /DocType="list-of-QJsonValue"/
+{
+%TypeHeaderCode
+#include <qjsonarray.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        QJsonValue *t = new QJsonValue(sipCpp->at(i));
+        PyObject *tobj = sipConvertFromNewType(t, sipType_QJsonValue,
+                sipTransferObj);
+
+        if (!tobj)
+        {
+            delete t;
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, tobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QJsonArray *ql = new QJsonArray;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        int state;
+        QJsonValue *t = reinterpret_cast<QJsonValue *>(
+                sipForceConvertToType(itm, sipType_QJsonValue, sipTransferObj,
+                        SIP_NOT_NONE, &state, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'QJsonValue' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        ql->append(*t);
+
+        sipReleaseType(t, sipType_QJsonValue, state);
+        Py_DECREF(itm);
+    }
+ 
+    Py_DECREF(iter);
+
+    *sipCppPtr = ql;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtCore/qjsondocument.sip b/sip/QtCore/qjsondocument.sip
new file mode 100644
index 0000000..fccaf93
--- /dev/null
+++ b/sip/QtCore/qjsondocument.sip
@@ -0,0 +1,97 @@
+// qjsondocument.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+struct QJsonParseError
+{
+%TypeHeaderCode
+#include <qjsondocument.h>
+%End
+
+    enum ParseError
+    {
+        NoError,
+        UnterminatedObject,
+        MissingNameSeparator,
+        UnterminatedArray,
+        MissingValueSeparator,
+        IllegalValue,
+        TerminationByNumber,
+        IllegalNumber,
+        IllegalEscapeSequence,
+        IllegalUTF8String,
+        UnterminatedString,
+        MissingObject,
+        DeepNesting,
+        DocumentTooLarge,
+    };
+
+    QString errorString() const;
+    int offset;
+    QJsonParseError::ParseError error;
+};
+
+class QJsonDocument
+{
+%TypeHeaderCode
+#include <qjsondocument.h>
+%End
+
+public:
+    QJsonDocument();
+    explicit QJsonDocument(const QJsonObject &object);
+    explicit QJsonDocument(const QJsonArray &array);
+    QJsonDocument(const QJsonDocument &other);
+    ~QJsonDocument();
+
+    enum DataValidation
+    {
+        Validate,
+        BypassValidation,
+    };
+
+    static QJsonDocument fromRawData(const char *data /Encoding="None"/, int size, QJsonDocument::DataValidation validation = QJsonDocument::Validate);
+    const char *rawData(int *size /Out/) const /Encoding="None"/;
+    static QJsonDocument fromBinaryData(const QByteArray &data, QJsonDocument::DataValidation validation = QJsonDocument::Validate);
+    QByteArray toBinaryData() const;
+    static QJsonDocument fromVariant(const QVariant &variant);
+    QVariant toVariant() const;
+
+    enum JsonFormat
+    {
+        Indented,
+        Compact,
+    };
+
+    static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = 0);
+    QByteArray toJson() const;
+    QByteArray toJson(QJsonDocument::JsonFormat format) const;
+    bool isEmpty() const;
+    bool isArray() const;
+    bool isObject() const;
+    QJsonObject object() const;
+    QJsonArray array() const;
+    void setObject(const QJsonObject &object);
+    void setArray(const QJsonArray &array);
+    bool operator==(const QJsonDocument &other) const;
+    bool operator!=(const QJsonDocument &other) const;
+    bool isNull() const;
+};
diff --git a/sip/QtCore/qjsonobject.sip b/sip/QtCore/qjsonobject.sip
new file mode 100644
index 0000000..2de4f52
--- /dev/null
+++ b/sip/QtCore/qjsonobject.sip
@@ -0,0 +1,135 @@
+// This is the SIP interface definition for the QJsonObject mapped type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%MappedType QJsonObject /DocType="dict-of-str-QJsonValue"/
+{
+%TypeHeaderCode
+#include <qjsonobject.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *d = PyDict_New();
+
+    if (!d)
+        return 0;
+
+    QJsonObject::const_iterator it = sipCpp->constBegin();
+    QJsonObject::const_iterator end = sipCpp->constEnd();
+
+    while (it != end)
+    {
+        QString *k = new QString(it.key());
+        PyObject *kobj = sipConvertFromNewType(k, sipType_QString,
+                sipTransferObj);
+
+        if (!kobj)
+        {
+            delete k;
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        QJsonValue *v = new QJsonValue(it.value());
+        PyObject *vobj = sipConvertFromNewType(v, sipType_QJsonValue,
+                sipTransferObj);
+
+        if (!vobj)
+        {
+            delete v;
+            Py_DECREF(kobj);
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        int rc = PyDict_SetItem(d, kobj, vobj);
+
+        Py_DECREF(vobj);
+        Py_DECREF(kobj);
+
+        if (rc < 0)
+        {
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        ++it;
+    }
+
+    return d;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return PyDict_Check(sipPy);
+
+    QJsonObject *jo = new QJsonObject;
+
+    SIP_SSIZE_T pos = 0;
+    PyObject *kobj, *vobj;
+ 
+    while (PyDict_Next(sipPy, &pos, &kobj, &vobj))
+    {
+        int kstate;
+        QString *k = reinterpret_cast<QString *>(
+                sipForceConvertToType(kobj, sipType_QString, sipTransferObj,
+                        SIP_NOT_NONE, &kstate, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a key has type '%s' but 'str' is expected",
+                    Py_TYPE(kobj)->tp_name);
+
+            delete jo;
+
+            return 0;
+        }
+
+        int vstate;
+        QJsonValue *v = reinterpret_cast<QJsonValue *>(
+                sipForceConvertToType(vobj, sipType_QJsonValue, sipTransferObj,
+                        SIP_NOT_NONE, &vstate, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a value has type '%s' but 'QJsonValue' is expected",
+                    Py_TYPE(vobj)->tp_name);
+
+            sipReleaseType(k, sipType_QString, kstate);
+            delete jo;
+
+            return 0;
+        }
+
+        jo->insert(*k, *v);
+
+        sipReleaseType(v, sipType_QJsonValue, vstate);
+        sipReleaseType(k, sipType_QString, kstate);
+    }
+ 
+    *sipCppPtr = jo;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtCore/qjsonvalue.sip b/sip/QtCore/qjsonvalue.sip
new file mode 100644
index 0000000..1cb4ba6
--- /dev/null
+++ b/sip/QtCore/qjsonvalue.sip
@@ -0,0 +1,71 @@
+// qjsonvalue.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QJsonValue
+{
+%TypeHeaderCode
+#include <qjsonvalue.h>
+%End
+
+%ConvertToTypeCode
+if (!sipIsErr)
+    return qpycore_canConvertTo_QJsonValue(sipPy);
+
+return qpycore_convertTo_QJsonValue(sipPy, sipTransferObj, sipCppPtr, sipIsErr);
+%End
+
+public:
+    enum Type
+    {
+        Null,
+        Bool,
+        Double,
+        String,
+        Array,
+        Object,
+        Undefined,
+    };
+
+    QJsonValue(QJsonValue::Type type /Constrained/ = QJsonValue::Null);
+    QJsonValue(const QJsonValue &other);
+    ~QJsonValue();
+    static QJsonValue fromVariant(const QVariant &variant);
+    QVariant toVariant() const;
+    QJsonValue::Type type() const;
+    bool isNull() const;
+    bool isBool() const;
+    bool isDouble() const;
+    bool isString() const;
+    bool isArray() const;
+    bool isObject() const;
+    bool isUndefined() const;
+    bool toBool(bool defaultValue = false) const;
+    int toInt(int defaultValue = 0) const;
+    double toDouble(double defaultValue = 0) const;
+    QString toString(const QString &defaultValue = QString()) const;
+    QJsonArray toArray() const;
+    QJsonArray toArray(const QJsonArray &defaultValue) const;
+    QJsonObject toObject() const;
+    QJsonObject toObject(const QJsonObject &defaultValue) const;
+    bool operator==(const QJsonValue &other) const;
+    bool operator!=(const QJsonValue &other) const;
+};
diff --git a/sip/QtCore/qlibrary.sip b/sip/QtCore/qlibrary.sip
new file mode 100644
index 0000000..a061fee
--- /dev/null
+++ b/sip/QtCore/qlibrary.sip
@@ -0,0 +1,65 @@
+// qlibrary.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qlibrary.h>
+%End
+
+class QLibrary : QObject
+{
+%TypeHeaderCode
+#include <qlibrary.h>
+%End
+
+public:
+    enum LoadHint
+    {
+        ResolveAllSymbolsHint,
+        ExportExternalSymbolsHint,
+        LoadArchiveMemberHint,
+        PreventUnloadHint,
+    };
+
+    typedef QFlags<QLibrary::LoadHint> LoadHints;
+    explicit QLibrary(QObject *parent /TransferThis/ = 0);
+    QLibrary(const QString &fileName, QObject *parent /TransferThis/ = 0);
+    QLibrary(const QString &fileName, int verNum, QObject *parent /TransferThis/ = 0);
+    QLibrary(const QString &fileName, const QString &version, QObject *parent /TransferThis/ = 0);
+    virtual ~QLibrary();
+    QString errorString() const;
+    QString fileName() const;
+    bool isLoaded() const;
+    bool load();
+    QFlags<QLibrary::LoadHint> loadHints() const;
+    QFunctionPointer resolve(const char *symbol);
+    static QFunctionPointer resolve(const QString &fileName, const char *symbol);
+    static QFunctionPointer resolve(const QString &fileName, int verNum, const char *symbol);
+    static QFunctionPointer resolve(const QString &fileName, const QString &version, const char *symbol);
+    bool unload();
+    static bool isLibrary(const QString &fileName);
+    void setFileName(const QString &fileName);
+    void setFileNameAndVersion(const QString &fileName, int verNum);
+    void setFileNameAndVersion(const QString &fileName, const QString &version);
+    void setLoadHints(QFlags<QLibrary::LoadHint> hints);
+};
+
+QFlags<QLibrary::LoadHint> operator|(QLibrary::LoadHint f1, QFlags<QLibrary::LoadHint> f2);
diff --git a/sip/QtCore/qlibraryinfo.sip b/sip/QtCore/qlibraryinfo.sip
new file mode 100644
index 0000000..46bd59e
--- /dev/null
+++ b/sip/QtCore/qlibraryinfo.sip
@@ -0,0 +1,58 @@
+// qlibraryinfo.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QLibraryInfo
+{
+%TypeHeaderCode
+#include <qlibraryinfo.h>
+%End
+
+public:
+    static QString licensee();
+    static QString licensedProducts();
+
+    enum LibraryLocation
+    {
+        PrefixPath,
+        DocumentationPath,
+        HeadersPath,
+        LibrariesPath,
+        BinariesPath,
+        PluginsPath,
+        DataPath,
+        TranslationsPath,
+        SettingsPath,
+        ExamplesPath,
+        ImportsPath,
+        TestsPath,
+        LibraryExecutablesPath,
+        Qml2ImportsPath,
+        ArchDataPath,
+    };
+
+    static QString location(QLibraryInfo::LibraryLocation);
+    static QDate buildDate();
+    static bool isDebugBuild();
+
+private:
+    QLibraryInfo();
+};
diff --git a/sip/QtCore/qline.sip b/sip/QtCore/qline.sip
new file mode 100644
index 0000000..581099f
--- /dev/null
+++ b/sip/QtCore/qline.sip
@@ -0,0 +1,195 @@
+// qline.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qline.h>
+%End
+
+class QLine
+{
+%TypeHeaderCode
+#include <qline.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"iiii", sipCpp->x1(), sipCpp->y1(), sipCpp->x2(), sipCpp->y2());
+%End
+
+public:
+    bool operator!=(const QLine &d) const;
+    QLine();
+    QLine(const QPoint &pt1_, const QPoint &pt2_);
+    QLine(int x1pos, int y1pos, int x2pos, int y2pos);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QLine()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QLine()");
+        #endif
+        }
+        else
+        {
+            sipRes =
+        #if PY_MAJOR_VERSION >= 3
+                PyUnicode_FromFormat
+        #else
+                PyString_FromFormat
+        #endif
+                    ("PyQt5.QtCore.QLine(%i, %i, %i, %i)",
+                    sipCpp->x1(), sipCpp->y1(), sipCpp->x2(), sipCpp->y2());
+        }
+%End
+
+    bool isNull() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = !sipCpp->isNull();
+%End
+
+    int x1() const;
+    int y1() const;
+    int x2() const;
+    int y2() const;
+    QPoint p1() const;
+    QPoint p2() const;
+    int dx() const;
+    int dy() const;
+    void translate(const QPoint &point);
+    void translate(int adx, int ady);
+    bool operator==(const QLine &d) const;
+    QLine translated(const QPoint &p) const;
+    QLine translated(int adx, int ady) const;
+    void setP1(const QPoint &aP1);
+    void setP2(const QPoint &aP2);
+    void setPoints(const QPoint &aP1, const QPoint &aP2);
+    void setLine(int aX1, int aY1, int aX2, int aY2);
+};
+
+QDataStream &operator<<(QDataStream &, const QLine & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QLine & /Constrained/) /ReleaseGIL/;
+
+class QLineF
+{
+%TypeHeaderCode
+#include <qline.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"dddd", sipCpp->x1(), sipCpp->y1(), sipCpp->x2(), sipCpp->y2());
+%End
+
+public:
+    enum IntersectType
+    {
+        NoIntersection,
+        BoundedIntersection,
+        UnboundedIntersection,
+    };
+
+    QLineF(const QLine &line);
+    bool isNull() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = !sipCpp->isNull();
+%End
+
+    qreal length() const;
+    QLineF unitVector() const;
+    QLineF::IntersectType intersect(const QLineF &l, QPointF *intersectionPoint) const;
+    bool operator!=(const QLineF &d) const;
+    QLineF();
+    QLineF(const QPointF &apt1, const QPointF &apt2);
+    QLineF(qreal x1pos, qreal y1pos, qreal x2pos, qreal y2pos);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QLineF()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QLineF()");
+        #endif
+        }
+        else
+        {
+            PyObject *x1 = PyFloat_FromDouble(sipCpp->x1());
+            PyObject *y1 = PyFloat_FromDouble(sipCpp->y1());
+            PyObject *x2 = PyFloat_FromDouble(sipCpp->x2());
+            PyObject *y2 = PyFloat_FromDouble(sipCpp->y2());
+        
+            if (x1 && y1 && x2 && y2)
+            {
+        #if PY_MAJOR_VERSION >= 3
+                sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QLineF(%R, %R, %R, %R)",
+                        x1, y1, x2, y2);
+        #else
+                sipRes = PyString_FromString("PyQt5.QtCore.QLineF(");
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(x1));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(y1));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(x2));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(y2));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+            }
+        
+            Py_XDECREF(x1);
+            Py_XDECREF(y1);
+            Py_XDECREF(x2);
+            Py_XDECREF(y2);
+        }
+%End
+
+    qreal x1() const;
+    qreal y1() const;
+    qreal x2() const;
+    qreal y2() const;
+    QPointF p1() const;
+    QPointF p2() const;
+    qreal dx() const;
+    qreal dy() const;
+    QLineF normalVector() const;
+    void translate(const QPointF &point);
+    void translate(qreal adx, qreal ady);
+    void setLength(qreal len);
+    QPointF pointAt(qreal t) const;
+    QLine toLine() const;
+    bool operator==(const QLineF &d) const;
+    static QLineF fromPolar(qreal length, qreal angle);
+    qreal angle() const;
+    void setAngle(qreal angle);
+    qreal angleTo(const QLineF &l) const;
+    QLineF translated(const QPointF &p) const;
+    QLineF translated(qreal adx, qreal ady) const;
+    void setP1(const QPointF &aP1);
+    void setP2(const QPointF &aP2);
+    void setPoints(const QPointF &aP1, const QPointF &aP2);
+    void setLine(qreal aX1, qreal aY1, qreal aX2, qreal aY2);
+};
+
+QDataStream &operator<<(QDataStream &, const QLineF & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QLineF & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtCore/qlocale.sip b/sip/QtCore/qlocale.sip
new file mode 100644
index 0000000..f167ea3
--- /dev/null
+++ b/sip/QtCore/qlocale.sip
@@ -0,0 +1,1119 @@
+// qlocale.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qlocale.h>
+%End
+
+class QLocale
+{
+%TypeHeaderCode
+#include <qlocale.h>
+%End
+
+public:
+    enum Language
+    {
+        C,
+        Abkhazian,
+        Afan,
+        Afar,
+        Afrikaans,
+        Albanian,
+        Amharic,
+        Arabic,
+        Armenian,
+        Assamese,
+        Aymara,
+        Azerbaijani,
+        Bashkir,
+        Basque,
+        Bengali,
+        Bhutani,
+        Bihari,
+        Bislama,
+        Breton,
+        Bulgarian,
+        Burmese,
+        Byelorussian,
+        Cambodian,
+        Catalan,
+        Chinese,
+        Corsican,
+        Croatian,
+        Czech,
+        Danish,
+        Dutch,
+        English,
+        Esperanto,
+        Estonian,
+        Faroese,
+        Finnish,
+        French,
+        Frisian,
+        Gaelic,
+        Galician,
+        Georgian,
+        German,
+        Greek,
+        Greenlandic,
+        Guarani,
+        Gujarati,
+        Hausa,
+        Hebrew,
+        Hindi,
+        Hungarian,
+        Icelandic,
+        Indonesian,
+        Interlingua,
+        Interlingue,
+        Inuktitut,
+        Inupiak,
+        Irish,
+        Italian,
+        Japanese,
+        Javanese,
+        Kannada,
+        Kashmiri,
+        Kazakh,
+        Kinyarwanda,
+        Kirghiz,
+        Korean,
+        Kurdish,
+        Kurundi,
+        Latin,
+        Latvian,
+        Lingala,
+        Lithuanian,
+        Macedonian,
+        Malagasy,
+        Malay,
+        Malayalam,
+        Maltese,
+        Maori,
+        Marathi,
+        Moldavian,
+        Mongolian,
+        NauruLanguage,
+        Nepali,
+        Norwegian,
+        Occitan,
+        Oriya,
+        Pashto,
+        Persian,
+        Polish,
+        Portuguese,
+        Punjabi,
+        Quechua,
+        RhaetoRomance,
+        Romanian,
+        Russian,
+        Samoan,
+        Sanskrit,
+        Serbian,
+        SerboCroatian,
+        Shona,
+        Sindhi,
+        Slovak,
+        Slovenian,
+        Somali,
+        Spanish,
+        Sundanese,
+        Swahili,
+        Swedish,
+        Tagalog,
+        Tajik,
+        Tamil,
+        Tatar,
+        Telugu,
+        Thai,
+        Tibetan,
+        Tigrinya,
+        Tsonga,
+        Turkish,
+        Turkmen,
+        Twi,
+        Uigur,
+        Ukrainian,
+        Urdu,
+        Uzbek,
+        Vietnamese,
+        Volapuk,
+        Welsh,
+        Wolof,
+        Xhosa,
+        Yiddish,
+        Yoruba,
+        Zhuang,
+        Zulu,
+        Bosnian,
+        Divehi,
+        Manx,
+        Cornish,
+        LastLanguage,
+        NorwegianBokmal,
+        NorwegianNynorsk,
+        Akan,
+        Konkani,
+        Ga,
+        Igbo,
+        Kamba,
+        Syriac,
+        Blin,
+        Geez,
+        Koro,
+        Sidamo,
+        Atsam,
+        Tigre,
+        Jju,
+        Friulian,
+        Venda,
+        Ewe,
+        Walamo,
+        Hawaiian,
+        Tyap,
+        Chewa,
+        Filipino,
+        SwissGerman,
+        SichuanYi,
+        Kpelle,
+        LowGerman,
+        SouthNdebele,
+        NorthernSotho,
+        NorthernSami,
+        Taroko,
+        Gusii,
+        Taita,
+        Fulah,
+        Kikuyu,
+        Samburu,
+        Sena,
+        NorthNdebele,
+        Rombo,
+        Tachelhit,
+        Kabyle,
+        Nyankole,
+        Bena,
+        Vunjo,
+        Bambara,
+        Embu,
+        Cherokee,
+        Morisyen,
+        Makonde,
+        Langi,
+        Ganda,
+        Bemba,
+        Kabuverdianu,
+        Meru,
+        Kalenjin,
+        Nama,
+        Machame,
+        Colognian,
+        Masai,
+        Soga,
+        Luyia,
+        Asu,
+        Teso,
+        Saho,
+        KoyraChiini,
+        Rwa,
+        Luo,
+        Chiga,
+        CentralMoroccoTamazight,
+        KoyraboroSenni,
+        Shambala,
+        AnyLanguage,
+        Rundi,
+        Bodo,
+        Aghem,
+        Basaa,
+        Zarma,
+        Duala,
+        JolaFonyi,
+        Ewondo,
+        Bafia,
+        LubaKatanga,
+        MakhuwaMeetto,
+        Mundang,
+        Kwasio,
+        Nuer,
+        Sakha,
+        Sangu,
+        CongoSwahili,
+        Tasawaq,
+        Vai,
+        Walser,
+        Yangben,
+        Oromo,
+        Dzongkha,
+        Belarusian,
+        Khmer,
+        Fijian,
+        WesternFrisian,
+        Lao,
+        Marshallese,
+        Romansh,
+        Sango,
+        Ossetic,
+        SouthernSotho,
+        Tswana,
+        Sinhala,
+        Swati,
+        Sardinian,
+        Tongan,
+        Tahitian,
+        Nyanja,
+        Avaric,
+        Chamorro,
+        Chechen,
+        Church,
+        Chuvash,
+        Cree,
+        Haitian,
+        Herero,
+        HiriMotu,
+        Kanuri,
+        Komi,
+        Kongo,
+        Kwanyama,
+        Limburgish,
+        Luxembourgish,
+        Navaho,
+        Ndonga,
+        Ojibwa,
+        Pali,
+        Walloon,
+        Avestan,
+        Asturian,
+        Ngomba,
+        Kako,
+        Meta,
+        Ngiemboon,
+%If (Qt_5_1_0 -)
+        Uighur,
+%End
+%If (Qt_5_1_0 -)
+        Aragonese,
+%End
+%If (Qt_5_1_0 -)
+        Akkadian,
+%End
+%If (Qt_5_1_0 -)
+        AncientEgyptian,
+%End
+%If (Qt_5_1_0 -)
+        AncientGreek,
+%End
+%If (Qt_5_1_0 -)
+        Aramaic,
+%End
+%If (Qt_5_1_0 -)
+        Balinese,
+%End
+%If (Qt_5_1_0 -)
+        Bamun,
+%End
+%If (Qt_5_1_0 -)
+        BatakToba,
+%End
+%If (Qt_5_1_0 -)
+        Buginese,
+%End
+%If (Qt_5_1_0 -)
+        Buhid,
+%End
+%If (Qt_5_1_0 -)
+        Carian,
+%End
+%If (Qt_5_1_0 -)
+        Chakma,
+%End
+%If (Qt_5_1_0 -)
+        ClassicalMandaic,
+%End
+%If (Qt_5_1_0 -)
+        Coptic,
+%End
+%If (Qt_5_1_0 -)
+        Dogri,
+%End
+%If (Qt_5_1_0 -)
+        EasternCham,
+%End
+%If (Qt_5_1_0 -)
+        EasternKayah,
+%End
+%If (Qt_5_1_0 -)
+        Etruscan,
+%End
+%If (Qt_5_1_0 -)
+        Gothic,
+%End
+%If (Qt_5_1_0 -)
+        Hanunoo,
+%End
+%If (Qt_5_1_0 -)
+        Ingush,
+%End
+%If (Qt_5_1_0 -)
+        LargeFloweryMiao,
+%End
+%If (Qt_5_1_0 -)
+        Lepcha,
+%End
+%If (Qt_5_1_0 -)
+        Limbu,
+%End
+%If (Qt_5_1_0 -)
+        Lisu,
+%End
+%If (Qt_5_1_0 -)
+        Lu,
+%End
+%If (Qt_5_1_0 -)
+        Lycian,
+%End
+%If (Qt_5_1_0 -)
+        Lydian,
+%End
+%If (Qt_5_1_0 -)
+        Mandingo,
+%End
+%If (Qt_5_1_0 -)
+        Manipuri,
+%End
+%If (Qt_5_1_0 -)
+        Meroitic,
+%End
+%If (Qt_5_1_0 -)
+        NorthernThai,
+%End
+%If (Qt_5_1_0 -)
+        OldIrish,
+%End
+%If (Qt_5_1_0 -)
+        OldNorse,
+%End
+%If (Qt_5_1_0 -)
+        OldPersian,
+%End
+%If (Qt_5_1_0 -)
+        OldTurkish,
+%End
+%If (Qt_5_1_0 -)
+        Pahlavi,
+%End
+%If (Qt_5_1_0 -)
+        Parthian,
+%End
+%If (Qt_5_1_0 -)
+        Phoenician,
+%End
+%If (Qt_5_1_0 -)
+        PrakritLanguage,
+%End
+%If (Qt_5_1_0 -)
+        Rejang,
+%End
+%If (Qt_5_1_0 -)
+        Sabaean,
+%End
+%If (Qt_5_1_0 -)
+        Samaritan,
+%End
+%If (Qt_5_1_0 -)
+        Santali,
+%End
+%If (Qt_5_1_0 -)
+        Saurashtra,
+%End
+%If (Qt_5_1_0 -)
+        Sora,
+%End
+%If (Qt_5_1_0 -)
+        Sylheti,
+%End
+%If (Qt_5_1_0 -)
+        Tagbanwa,
+%End
+%If (Qt_5_1_0 -)
+        TaiDam,
+%End
+%If (Qt_5_1_0 -)
+        TaiNua,
+%End
+%If (Qt_5_1_0 -)
+        Ugaritic,
+%End
+%If (Qt_5_3_0 -)
+        Akoose,
+%End
+%If (Qt_5_3_0 -)
+        Lakota,
+%End
+%If (Qt_5_3_0 -)
+        StandardMoroccanTamazight,
+%End
+    };
+
+    enum Country
+    {
+        AnyCountry,
+        Afghanistan,
+        Albania,
+        Algeria,
+        AmericanSamoa,
+        Andorra,
+        Angola,
+        Anguilla,
+        Antarctica,
+        AntiguaAndBarbuda,
+        Argentina,
+        Armenia,
+        Aruba,
+        Australia,
+        Austria,
+        Azerbaijan,
+        Bahamas,
+        Bahrain,
+        Bangladesh,
+        Barbados,
+        Belarus,
+        Belgium,
+        Belize,
+        Benin,
+        Bermuda,
+        Bhutan,
+        Bolivia,
+        BosniaAndHerzegowina,
+        Botswana,
+        BouvetIsland,
+        Brazil,
+        BritishIndianOceanTerritory,
+        Bulgaria,
+        BurkinaFaso,
+        Burundi,
+        Cambodia,
+        Cameroon,
+        Canada,
+        CapeVerde,
+        CaymanIslands,
+        CentralAfricanRepublic,
+        Chad,
+        Chile,
+        China,
+        ChristmasIsland,
+        CocosIslands,
+        Colombia,
+        Comoros,
+        DemocraticRepublicOfCongo,
+        PeoplesRepublicOfCongo,
+        CookIslands,
+        CostaRica,
+        IvoryCoast,
+        Croatia,
+        Cuba,
+        Cyprus,
+        CzechRepublic,
+        Denmark,
+        Djibouti,
+        Dominica,
+        DominicanRepublic,
+        EastTimor,
+        Ecuador,
+        Egypt,
+        ElSalvador,
+        EquatorialGuinea,
+        Eritrea,
+        Estonia,
+        Ethiopia,
+        FalklandIslands,
+        FaroeIslands,
+        Finland,
+        France,
+        FrenchGuiana,
+        FrenchPolynesia,
+        FrenchSouthernTerritories,
+        Gabon,
+        Gambia,
+        Georgia,
+        Germany,
+        Ghana,
+        Gibraltar,
+        Greece,
+        Greenland,
+        Grenada,
+        Guadeloupe,
+        Guam,
+        Guatemala,
+        Guinea,
+        GuineaBissau,
+        Guyana,
+        Haiti,
+        HeardAndMcDonaldIslands,
+        Honduras,
+        HongKong,
+        Hungary,
+        Iceland,
+        India,
+        Indonesia,
+        Iran,
+        Iraq,
+        Ireland,
+        Israel,
+        Italy,
+        Jamaica,
+        Japan,
+        Jordan,
+        Kazakhstan,
+        Kenya,
+        Kiribati,
+        DemocraticRepublicOfKorea,
+        RepublicOfKorea,
+        Kuwait,
+        Kyrgyzstan,
+        Latvia,
+        Lebanon,
+        Lesotho,
+        Liberia,
+        Liechtenstein,
+        Lithuania,
+        Luxembourg,
+        Macau,
+        Macedonia,
+        Madagascar,
+        Malawi,
+        Malaysia,
+        Maldives,
+        Mali,
+        Malta,
+        MarshallIslands,
+        Martinique,
+        Mauritania,
+        Mauritius,
+        Mayotte,
+        Mexico,
+        Micronesia,
+        Moldova,
+        Monaco,
+        Mongolia,
+        Montserrat,
+        Morocco,
+        Mozambique,
+        Myanmar,
+        Namibia,
+        NauruCountry,
+        Nepal,
+        Netherlands,
+        NewCaledonia,
+        NewZealand,
+        Nicaragua,
+        Niger,
+        Nigeria,
+        Niue,
+        NorfolkIsland,
+        NorthernMarianaIslands,
+        Norway,
+        Oman,
+        Pakistan,
+        Palau,
+        Panama,
+        PapuaNewGuinea,
+        Paraguay,
+        Peru,
+        Philippines,
+        Pitcairn,
+        Poland,
+        Portugal,
+        PuertoRico,
+        Qatar,
+        Reunion,
+        Romania,
+        RussianFederation,
+        Rwanda,
+        SaintKittsAndNevis,
+        Samoa,
+        SanMarino,
+        SaoTomeAndPrincipe,
+        SaudiArabia,
+        Senegal,
+        Seychelles,
+        SierraLeone,
+        Singapore,
+        Slovakia,
+        Slovenia,
+        SolomonIslands,
+        Somalia,
+        SouthAfrica,
+        SouthGeorgiaAndTheSouthSandwichIslands,
+        Spain,
+        SriLanka,
+        Sudan,
+        Suriname,
+        SvalbardAndJanMayenIslands,
+        Swaziland,
+        Sweden,
+        Switzerland,
+        SyrianArabRepublic,
+        Taiwan,
+        Tajikistan,
+        Tanzania,
+        Thailand,
+        Togo,
+        Tokelau,
+        TrinidadAndTobago,
+        Tunisia,
+        Turkey,
+        Turkmenistan,
+        TurksAndCaicosIslands,
+        Tuvalu,
+        Uganda,
+        Ukraine,
+        UnitedArabEmirates,
+        UnitedKingdom,
+        UnitedStates,
+        UnitedStatesMinorOutlyingIslands,
+        Uruguay,
+        Uzbekistan,
+        Vanuatu,
+        VaticanCityState,
+        Venezuela,
+        BritishVirginIslands,
+        WallisAndFutunaIslands,
+        WesternSahara,
+        Yemen,
+        Zambia,
+        Zimbabwe,
+        Montenegro,
+        Serbia,
+        SaintBarthelemy,
+        SaintMartin,
+        LatinAmericaAndTheCaribbean,
+        LastCountry,
+        Brunei,
+        CongoKinshasa,
+        CongoBrazzaville,
+        Fiji,
+        Guernsey,
+        NorthKorea,
+        SouthKorea,
+        Laos,
+        Libya,
+        CuraSao,
+        PalestinianTerritories,
+        Russia,
+        SaintLucia,
+        SaintVincentAndTheGrenadines,
+        SaintHelena,
+        SaintPierreAndMiquelon,
+        Syria,
+        Tonga,
+        Vietnam,
+        UnitedStatesVirginIslands,
+        CanaryIslands,
+        ClippertonIsland,
+        AscensionIsland,
+        AlandIslands,
+        DiegoGarcia,
+        CeutaAndMelilla,
+        IsleOfMan,
+        Jersey,
+        TristanDaCunha,
+        SouthSudan,
+        Bonaire,
+        SintMaarten,
+%If (Qt_5_2_0 -)
+        Kosovo,
+%End
+    };
+
+    enum NumberOption
+    {
+        OmitGroupSeparator,
+        RejectGroupSeparator,
+    };
+
+    typedef QFlags<QLocale::NumberOption> NumberOptions;
+    QLocale();
+    QLocale(const QString &name);
+    QLocale(QLocale::Language language, QLocale::Country country = QLocale::AnyCountry);
+    QLocale(const QLocale &other);
+    ~QLocale();
+    QLocale::Language language() const;
+    QLocale::Country country() const;
+    QString name() const;
+    short toShort(const QString &s, bool *ok = 0) const;
+    ushort toUShort(const QString &s, bool *ok = 0) const;
+    int toInt(const QString &s, bool *ok = 0) const;
+    uint toUInt(const QString &s, bool *ok = 0) const;
+    qlonglong toLongLong(const QString &s, bool *ok = 0) const;
+    qulonglong toULongLong(const QString &s, bool *ok = 0) const;
+    float toFloat(const QString &s, bool *ok = 0) const;
+    double toDouble(const QString &s, bool *ok = 0) const;
+    QString toString(int i /Constrained/) const;
+    QString toString(double i /Constrained/, char format = 'g', int precision = 6) const;
+    QString toString(qlonglong i) const;
+    QString toString(qulonglong i) const;
+    bool operator==(const QLocale &other) const;
+    bool operator!=(const QLocale &other) const;
+    static QString languageToString(QLocale::Language language);
+    static QString countryToString(QLocale::Country country);
+    static void setDefault(const QLocale &locale);
+    static QLocale c();
+    static QLocale system();
+
+    enum FormatType
+    {
+        LongFormat,
+        ShortFormat,
+        NarrowFormat,
+    };
+
+    QString toString(const QDateTime &dateTime, const QString &format) const;
+    QString toString(const QDateTime &dateTime, QLocale::FormatType format = QLocale::LongFormat) const;
+    QString toString(const QDate &date, const QString &formatStr) const;
+    QString toString(const QDate &date, QLocale::FormatType format = QLocale::LongFormat) const;
+    QString toString(const QTime &time, const QString &formatStr) const;
+    QString toString(const QTime &time, QLocale::FormatType format = QLocale::LongFormat) const;
+    QString dateFormat(QLocale::FormatType format = QLocale::LongFormat) const;
+    QString timeFormat(QLocale::FormatType format = QLocale::LongFormat) const;
+    QString dateTimeFormat(QLocale::FormatType format = QLocale::LongFormat) const;
+    QDate toDate(const QString &string, QLocale::FormatType format = QLocale::LongFormat) const;
+    QDate toDate(const QString &string, const QString &format) const;
+    QTime toTime(const QString &string, QLocale::FormatType format = QLocale::LongFormat) const;
+    QTime toTime(const QString &string, const QString &format) const;
+    QDateTime toDateTime(const QString &string, QLocale::FormatType format = QLocale::LongFormat) const;
+    QDateTime toDateTime(const QString &string, const QString &format) const;
+    QChar decimalPoint() const;
+    QChar groupSeparator() const;
+    QChar percent() const;
+    QChar zeroDigit() const;
+    QChar negativeSign() const;
+    QChar exponential() const;
+    QString monthName(int, QLocale::FormatType format = QLocale::LongFormat) const;
+    QString dayName(int, QLocale::FormatType format = QLocale::LongFormat) const;
+    void setNumberOptions(QFlags<QLocale::NumberOption> options);
+    QFlags<QLocale::NumberOption> numberOptions() const;
+
+    enum MeasurementSystem
+    {
+        MetricSystem,
+        ImperialSystem,
+        ImperialUSSystem,
+        ImperialUKSystem,
+    };
+
+    QLocale::MeasurementSystem measurementSystem() const;
+    QChar positiveSign() const;
+    QString standaloneMonthName(int, QLocale::FormatType format = QLocale::LongFormat) const;
+    QString standaloneDayName(int, QLocale::FormatType format = QLocale::LongFormat) const;
+    QString amText() const;
+    QString pmText() const;
+    Qt::LayoutDirection textDirection() const;
+
+    enum Script
+    {
+        AnyScript,
+        ArabicScript,
+        CyrillicScript,
+        DeseretScript,
+        GurmukhiScript,
+        SimplifiedHanScript,
+        TraditionalHanScript,
+        LatinScript,
+        MongolianScript,
+        TifinaghScript,
+        SimplifiedChineseScript,
+        TraditionalChineseScript,
+        ArmenianScript,
+        BengaliScript,
+        CherokeeScript,
+        DevanagariScript,
+        EthiopicScript,
+        GeorgianScript,
+        GreekScript,
+        GujaratiScript,
+        HebrewScript,
+        JapaneseScript,
+        KhmerScript,
+        KannadaScript,
+        KoreanScript,
+        LaoScript,
+        MalayalamScript,
+        MyanmarScript,
+        OriyaScript,
+        TamilScript,
+        TeluguScript,
+        ThaanaScript,
+        ThaiScript,
+        TibetanScript,
+        SinhalaScript,
+        SyriacScript,
+        YiScript,
+        VaiScript,
+%If (Qt_5_1_0 -)
+        AvestanScript,
+%End
+%If (Qt_5_1_0 -)
+        BalineseScript,
+%End
+%If (Qt_5_1_0 -)
+        BamumScript,
+%End
+%If (Qt_5_1_0 -)
+        BatakScript,
+%End
+%If (Qt_5_1_0 -)
+        BopomofoScript,
+%End
+%If (Qt_5_1_0 -)
+        BrahmiScript,
+%End
+%If (Qt_5_1_0 -)
+        BugineseScript,
+%End
+%If (Qt_5_1_0 -)
+        BuhidScript,
+%End
+%If (Qt_5_1_0 -)
+        CanadianAboriginalScript,
+%End
+%If (Qt_5_1_0 -)
+        CarianScript,
+%End
+%If (Qt_5_1_0 -)
+        ChakmaScript,
+%End
+%If (Qt_5_1_0 -)
+        ChamScript,
+%End
+%If (Qt_5_1_0 -)
+        CopticScript,
+%End
+%If (Qt_5_1_0 -)
+        CypriotScript,
+%End
+%If (Qt_5_1_0 -)
+        EgyptianHieroglyphsScript,
+%End
+%If (Qt_5_1_0 -)
+        FraserScript,
+%End
+%If (Qt_5_1_0 -)
+        GlagoliticScript,
+%End
+%If (Qt_5_1_0 -)
+        GothicScript,
+%End
+%If (Qt_5_1_0 -)
+        HanScript,
+%End
+%If (Qt_5_1_0 -)
+        HangulScript,
+%End
+%If (Qt_5_1_0 -)
+        HanunooScript,
+%End
+%If (Qt_5_1_0 -)
+        ImperialAramaicScript,
+%End
+%If (Qt_5_1_0 -)
+        InscriptionalPahlaviScript,
+%End
+%If (Qt_5_1_0 -)
+        InscriptionalParthianScript,
+%End
+%If (Qt_5_1_0 -)
+        JavaneseScript,
+%End
+%If (Qt_5_1_0 -)
+        KaithiScript,
+%End
+%If (Qt_5_1_0 -)
+        KatakanaScript,
+%End
+%If (Qt_5_1_0 -)
+        KayahLiScript,
+%End
+%If (Qt_5_1_0 -)
+        KharoshthiScript,
+%End
+%If (Qt_5_1_0 -)
+        LannaScript,
+%End
+%If (Qt_5_1_0 -)
+        LepchaScript,
+%End
+%If (Qt_5_1_0 -)
+        LimbuScript,
+%End
+%If (Qt_5_1_0 -)
+        LinearBScript,
+%End
+%If (Qt_5_1_0 -)
+        LycianScript,
+%End
+%If (Qt_5_1_0 -)
+        LydianScript,
+%End
+%If (Qt_5_1_0 -)
+        MandaeanScript,
+%End
+%If (Qt_5_1_0 -)
+        MeiteiMayekScript,
+%End
+%If (Qt_5_1_0 -)
+        MeroiticScript,
+%End
+%If (Qt_5_1_0 -)
+        MeroiticCursiveScript,
+%End
+%If (Qt_5_1_0 -)
+        NkoScript,
+%End
+%If (Qt_5_1_0 -)
+        NewTaiLueScript,
+%End
+%If (Qt_5_1_0 -)
+        OghamScript,
+%End
+%If (Qt_5_1_0 -)
+        OlChikiScript,
+%End
+%If (Qt_5_1_0 -)
+        OldItalicScript,
+%End
+%If (Qt_5_1_0 -)
+        OldPersianScript,
+%End
+%If (Qt_5_1_0 -)
+        OldSouthArabianScript,
+%End
+%If (Qt_5_1_0 -)
+        OrkhonScript,
+%End
+%If (Qt_5_1_0 -)
+        OsmanyaScript,
+%End
+%If (Qt_5_1_0 -)
+        PhagsPaScript,
+%End
+%If (Qt_5_1_0 -)
+        PhoenicianScript,
+%End
+%If (Qt_5_1_0 -)
+        PollardPhoneticScript,
+%End
+%If (Qt_5_1_0 -)
+        RejangScript,
+%End
+%If (Qt_5_1_0 -)
+        RunicScript,
+%End
+%If (Qt_5_1_0 -)
+        SamaritanScript,
+%End
+%If (Qt_5_1_0 -)
+        SaurashtraScript,
+%End
+%If (Qt_5_1_0 -)
+        SharadaScript,
+%End
+%If (Qt_5_1_0 -)
+        ShavianScript,
+%End
+%If (Qt_5_1_0 -)
+        SoraSompengScript,
+%End
+%If (Qt_5_1_0 -)
+        CuneiformScript,
+%End
+%If (Qt_5_1_0 -)
+        SundaneseScript,
+%End
+%If (Qt_5_1_0 -)
+        SylotiNagriScript,
+%End
+%If (Qt_5_1_0 -)
+        TagalogScript,
+%End
+%If (Qt_5_1_0 -)
+        TagbanwaScript,
+%End
+%If (Qt_5_1_0 -)
+        TaiLeScript,
+%End
+%If (Qt_5_1_0 -)
+        TaiVietScript,
+%End
+%If (Qt_5_1_0 -)
+        TakriScript,
+%End
+%If (Qt_5_1_0 -)
+        UgariticScript,
+%End
+%If (Qt_5_1_0 -)
+        BrailleScript,
+%End
+%If (Qt_5_1_0 -)
+        HiraganaScript,
+%End
+    };
+
+    enum CurrencySymbolFormat
+    {
+        CurrencyIsoCode,
+        CurrencySymbol,
+        CurrencyDisplayName,
+    };
+
+    QLocale(QLocale::Language language, QLocale::Script script, QLocale::Country country);
+    QLocale::Script script() const;
+    QString bcp47Name() const;
+    QString nativeLanguageName() const;
+    QString nativeCountryName() const;
+    Qt::DayOfWeek firstDayOfWeek() const;
+    QList<Qt::DayOfWeek> weekdays() const;
+    QString toUpper(const QString &str) const;
+    QString toLower(const QString &str) const;
+    QString currencySymbol(QLocale::CurrencySymbolFormat format = QLocale::CurrencySymbol) const;
+    QString toCurrencyString(int value /Constrained/, const QString &symbol /DocValue="''"/ = QString()) const;
+    QString toCurrencyString(double value /Constrained/, const QString &symbol /DocValue="''"/ = QString()) const;
+    QString toCurrencyString(qlonglong value, const QString &symbol /DocValue="''"/ = QString()) const;
+    QString toCurrencyString(qulonglong value, const QString &symbol /DocValue="''"/ = QString()) const;
+    QStringList uiLanguages() const;
+    static QString scriptToString(QLocale::Script script);
+    static QList<QLocale> matchingLocales(QLocale::Language language, QLocale::Script script, QLocale::Country country);
+
+    enum QuotationStyle
+    {
+        StandardQuotation,
+        AlternateQuotation,
+    };
+
+    QString quoteString(const QString &str, QLocale::QuotationStyle style = QLocale::StandardQuotation) const;
+    QString createSeparatedList(const QStringList &list) const;
+};
+
+QDataStream &operator<<(QDataStream &, const QLocale & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QLocale & /Constrained/) /ReleaseGIL/;
+QFlags<QLocale::NumberOption> operator|(QLocale::NumberOption f1, QFlags<QLocale::NumberOption> f2);
diff --git a/sip/QtCore/qlockfile.sip b/sip/QtCore/qlockfile.sip
new file mode 100644
index 0000000..5fde496
--- /dev/null
+++ b/sip/QtCore/qlockfile.sip
@@ -0,0 +1,57 @@
+// qlockfile.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QLockFile
+{
+%TypeHeaderCode
+#include <qlockfile.h>
+%End
+
+public:
+    QLockFile(const QString &fileName);
+    ~QLockFile();
+    bool lock() /ReleaseGIL/;
+    bool tryLock(int timeout = 0) /ReleaseGIL/;
+    void unlock() /ReleaseGIL/;
+    void setStaleLockTime(int);
+    int staleLockTime() const;
+    bool isLocked() const /ReleaseGIL/;
+    bool getLockInfo(qint64 *pid /Out/, QString *hostname /Out/, QString *appname /Out/) const;
+    bool removeStaleLockFile() /ReleaseGIL/;
+
+    enum LockError
+    {
+        NoError,
+        LockFailedError,
+        PermissionError,
+        UnknownError,
+    };
+
+    QLockFile::LockError error() const;
+
+private:
+    QLockFile(const QLockFile &);
+};
+
+%End
diff --git a/sip/QtCore/qlogging.sip b/sip/QtCore/qlogging.sip
new file mode 100644
index 0000000..18b01b5
--- /dev/null
+++ b/sip/QtCore/qlogging.sip
@@ -0,0 +1,191 @@
+// qlogging.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qlogging.h>
+%End
+
+enum QtMsgType
+{
+    QtDebugMsg,
+    QtWarningMsg,
+    QtCriticalMsg,
+    QtFatalMsg,
+    QtSystemMsg,
+};
+
+class QMessageLogContext /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qlogging.h>
+%End
+
+    QMessageLogContext(const QMessageLogContext &);
+
+public:
+    int line;
+    const char *file;
+    const char *function;
+    const char *category;
+};
+
+class QMessageLogger
+{
+%TypeHeaderCode
+#include <qlogging.h>
+%End
+
+    QMessageLogger(const QMessageLogger &);
+
+public:
+    QMessageLogger();
+    QMessageLogger(const char *file, int line, const char *function);
+    QMessageLogger(const char *file, int line, const char *function, const char *category);
+    void debug(const char *msg) const /ReleaseGIL/;
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->debug("%s", a0);
+        Py_END_ALLOW_THREADS
+%End
+
+    void warning(const char *msg) const /ReleaseGIL/;
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->warning("%s", a0);
+        Py_END_ALLOW_THREADS
+%End
+
+    void critical(const char *msg) const /ReleaseGIL/;
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->critical("%s", a0);
+        Py_END_ALLOW_THREADS
+%End
+
+    void fatal(const char *msg) const /ReleaseGIL/;
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->fatal("%s", a0);
+        Py_END_ALLOW_THREADS
+%End
+};
+
+void qCritical(const char *msg) /ReleaseGIL/;
+%MethodCode
+    const char *file, *function;
+    int line = qpycore_current_context(&file, &function);
+    
+    Py_BEGIN_ALLOW_THREADS
+    QMessageLogger(file, line, function).critical("%s", a0);
+    Py_END_ALLOW_THREADS
+%End
+
+void qDebug(const char *msg) /ReleaseGIL/;
+%MethodCode
+    const char *file, *function;
+    int line = qpycore_current_context(&file, &function);
+    
+    Py_BEGIN_ALLOW_THREADS
+    QMessageLogger(file, line, function).debug("%s", a0);
+    Py_END_ALLOW_THREADS
+%End
+
+void qErrnoWarning(int code, const char *msg) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    qErrnoWarning(a0, "%s", a1);
+    Py_END_ALLOW_THREADS
+%End
+
+void qErrnoWarning(const char *msg) /ReleaseGIL/;
+%MethodCode
+    Py_BEGIN_ALLOW_THREADS
+    qErrnoWarning("%s", a0);
+    Py_END_ALLOW_THREADS
+%End
+
+void qFatal(const char *msg) /ReleaseGIL/;
+%MethodCode
+    const char *file, *function;
+    int line = qpycore_current_context(&file, &function);
+    
+    Py_BEGIN_ALLOW_THREADS
+    QMessageLogger(file, line, function).fatal("%s", a0);
+    Py_END_ALLOW_THREADS
+%End
+
+void qWarning(const char *msg) /ReleaseGIL/;
+%MethodCode
+    const char *file, *function;
+    int line = qpycore_current_context(&file, &function);
+    
+    Py_BEGIN_ALLOW_THREADS
+    QMessageLogger(file, line, function).warning("%s", a0);
+    Py_END_ALLOW_THREADS
+%End
+
+SIP_PYCALLABLE qInstallMessageHandler(SIP_PYCALLABLE /AllowNone/);
+%MethodCode
+    // Treat None as the default handler.
+    QtMessageHandler old = qInstallMessageHandler((a0 != Py_None) ? qtcore_MessageHandler : 0);
+    
+    // If we recognise the old handler, then return it.  Otherwise return
+    // the default handler.  This doesn't exactly mimic the Qt behaviour
+    // but it is probably close enough for the way it will be used.
+    sipRes = (old == qtcore_MessageHandler) ? qtcore_PyMessageHandler : Py_None;
+    Py_INCREF(sipRes);
+    
+    // Save the new Python handler.
+    Py_XDECREF(qtcore_PyMessageHandler);
+    qtcore_PyMessageHandler = a0;
+    Py_INCREF(qtcore_PyMessageHandler);
+%End
+
+// Module code needed by qInstallMessageHandler().
+%ModuleCode
+// The user supplied Python handler.
+static PyObject *qtcore_PyMessageHandler = 0;
+
+// The C++ wrapper around the Python handler.
+static void qtcore_MessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
+{
+    PyObject *res;
+
+    SIP_BLOCK_THREADS
+    
+    res = sipCallMethod(0, qtcore_PyMessageHandler, "FDD", type, sipType_QtMsgType, &context, sipType_QMessageLogContext, NULL, &msg, sipType_QString, NULL);
+
+    Py_XDECREF(res);
+
+    if (res != NULL && res != Py_None)
+    {
+        PyErr_SetString(PyExc_TypeError, "invalid result type from PyQt message handler");
+        res = NULL;
+    }
+
+    if (res == NULL)
+        PyErr_Print();
+
+    SIP_UNBLOCK_THREADS
+}
+%End
+void qSetMessagePattern(const QString &messagePattern);
diff --git a/sip/QtCore/qmargins.sip b/sip/QtCore/qmargins.sip
new file mode 100644
index 0000000..17b50fd
--- /dev/null
+++ b/sip/QtCore/qmargins.sip
@@ -0,0 +1,186 @@
+// qmargins.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qmargins.h>
+%End
+
+class QMargins
+{
+%TypeHeaderCode
+#include <qmargins.h>
+%End
+
+public:
+    QMargins();
+    QMargins(int aleft, int atop, int aright, int abottom);
+    bool isNull() const;
+    int left() const;
+    int top() const;
+    int right() const;
+    int bottom() const;
+    void setLeft(int aleft);
+    void setTop(int atop);
+    void setRight(int aright);
+    void setBottom(int abottom);
+%If (Qt_5_1_0 -)
+    QMargins &operator+=(const QMargins &margins);
+%End
+%If (Qt_5_1_0 -)
+    QMargins &operator-=(const QMargins &margins);
+%End
+%If (Qt_5_1_0 -)
+    QMargins &operator*=(int factor /Constrained/);
+%End
+%If (Qt_5_1_0 -)
+    QMargins &operator/=(int divisor /Constrained/);
+%End
+%If (Qt_5_1_0 -)
+    QMargins &operator*=(qreal factor);
+%End
+%If (Qt_5_1_0 -)
+    QMargins &operator/=(qreal divisor);
+%End
+%If (Qt_5_2_0 -)
+    QMargins &operator+=(int margin);
+%End
+%If (Qt_5_2_0 -)
+    QMargins &operator-=(int margin);
+%End
+};
+
+bool operator==(const QMargins &m1, const QMargins &m2);
+bool operator!=(const QMargins &m1, const QMargins &m2);
+QDataStream &operator<<(QDataStream &, const QMargins & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QMargins & /Constrained/) /ReleaseGIL/;
+%If (Qt_5_1_0 - Qt_5_3_0)
+QRect operator+(const QRect &rectangle, const QMargins &margins);
+%End
+%If (Qt_5_1_0 - Qt_5_3_0)
+QRect operator+(const QMargins &margins, const QRect &rectangle);
+%End
+%If (Qt_5_1_0 -)
+QMargins operator+(const QMargins &m1, const QMargins &m2);
+%End
+%If (Qt_5_1_0 -)
+QMargins operator-(const QMargins &m1, const QMargins &m2);
+%End
+%If (Qt_5_1_0 -)
+QMargins operator*(const QMargins &margins, int factor /Constrained/);
+%End
+%If (Qt_5_1_0 -)
+QMargins operator*(const QMargins &margins, qreal factor);
+%End
+%If (Qt_5_1_0 -)
+QMargins operator/(const QMargins &margins, int divisor /Constrained/);
+%End
+%If (Qt_5_1_0 -)
+QMargins operator/(const QMargins &margins, qreal divisor);
+%End
+%If (Qt_5_1_0 -)
+QMargins operator-(const QMargins &margins);
+%End
+%If (Qt_5_3_0 -)
+QMargins operator+(const QMargins &lhs, int rhs);
+%End
+%If (Qt_5_3_0 -)
+QMargins operator+(int lhs, const QMargins &rhs);
+%End
+%If (Qt_5_3_0 -)
+QMargins operator-(const QMargins &lhs, int rhs);
+%End
+%If (Qt_5_3_0 -)
+QMargins operator+(const QMargins &margins);
+%End
+%If (Qt_5_3_0 -)
+
+class QMarginsF
+{
+%TypeHeaderCode
+#include <qmargins.h>
+%End
+
+public:
+    QMarginsF();
+    QMarginsF(qreal aleft, qreal atop, qreal aright, qreal abottom);
+    QMarginsF(const QMargins &margins);
+    bool isNull() const;
+    qreal left() const;
+    qreal top() const;
+    qreal right() const;
+    qreal bottom() const;
+    void setLeft(qreal aleft);
+    void setTop(qreal atop);
+    void setRight(qreal aright);
+    void setBottom(qreal abottom);
+    QMarginsF &operator+=(const QMarginsF &margins);
+    QMarginsF &operator-=(const QMarginsF &margins);
+    QMarginsF &operator+=(qreal addend);
+    QMarginsF &operator-=(qreal subtrahend);
+    QMarginsF &operator*=(qreal factor);
+    QMarginsF &operator/=(qreal divisor);
+    QMargins toMargins() const;
+};
+
+%End
+%If (Qt_5_3_0 -)
+QDataStream &operator<<(QDataStream &, const QMarginsF & /Constrained/);
+%End
+%If (Qt_5_3_0 -)
+QDataStream &operator>>(QDataStream &, QMarginsF & /Constrained/);
+%End
+%If (Qt_5_3_0 -)
+bool operator==(const QMarginsF &lhs, const QMarginsF &rhs);
+%End
+%If (Qt_5_3_0 -)
+bool operator!=(const QMarginsF &lhs, const QMarginsF &rhs);
+%End
+%If (Qt_5_3_0 -)
+QMarginsF operator+(const QMarginsF &lhs, const QMarginsF &rhs);
+%End
+%If (Qt_5_3_0 -)
+QMarginsF operator-(const QMarginsF &lhs, const QMarginsF &rhs);
+%End
+%If (Qt_5_3_0 -)
+QMarginsF operator+(const QMarginsF &lhs, qreal rhs);
+%End
+%If (Qt_5_3_0 -)
+QMarginsF operator+(qreal lhs, const QMarginsF &rhs);
+%End
+%If (Qt_5_3_0 -)
+QMarginsF operator-(const QMarginsF &lhs, qreal rhs);
+%End
+%If (Qt_5_3_0 -)
+QMarginsF operator*(const QMarginsF &lhs, qreal rhs);
+%End
+%If (Qt_5_3_0 -)
+QMarginsF operator*(qreal lhs, const QMarginsF &rhs);
+%End
+%If (Qt_5_3_0 -)
+QMarginsF operator/(const QMarginsF &lhs, qreal divisor);
+%End
+%If (Qt_5_3_0 -)
+QMarginsF operator+(const QMarginsF &margins);
+%End
+%If (Qt_5_3_0 -)
+QMarginsF operator-(const QMarginsF &margins);
+%End
diff --git a/sip/QtCore/qmessageauthenticationcode.sip b/sip/QtCore/qmessageauthenticationcode.sip
new file mode 100644
index 0000000..ff7101e
--- /dev/null
+++ b/sip/QtCore/qmessageauthenticationcode.sip
@@ -0,0 +1,46 @@
+// qmessageauthenticationcode.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QMessageAuthenticationCode
+{
+%TypeHeaderCode
+#include <qmessageauthenticationcode.h>
+%End
+
+public:
+    QMessageAuthenticationCode(QCryptographicHash::Algorithm method, const QByteArray &key = QByteArray());
+    ~QMessageAuthenticationCode();
+    void reset();
+    void setKey(const QByteArray &key);
+    void addData(const char *data, int length);
+    void addData(const QByteArray &data);
+    bool addData(QIODevice *device);
+    QByteArray result() const;
+    static QByteArray hash(const QByteArray &message, const QByteArray &key, QCryptographicHash::Algorithm method);
+
+private:
+    QMessageAuthenticationCode(const QMessageAuthenticationCode &);
+};
+
+%End
diff --git a/sip/QtCore/qmetaobject.sip b/sip/QtCore/qmetaobject.sip
new file mode 100644
index 0000000..5497c7e
--- /dev/null
+++ b/sip/QtCore/qmetaobject.sip
@@ -0,0 +1,212 @@
+// qmetaobject.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qmetaobject.h>
+%End
+
+class QMetaMethod
+{
+%TypeHeaderCode
+#include <qmetaobject.h>
+%End
+
+%TypeCode
+// Raise an exception when QMetaMethod::invoke() returns false.
+static void qtcore_invoke_exception()
+{
+    PyErr_SetString(PyExc_RuntimeError, "QMetaMethod.invoke() call failed");
+}
+%End
+
+public:
+    QMetaMethod();
+    const char *typeName() const;
+    QList<QByteArray> parameterTypes() const;
+    QList<QByteArray> parameterNames() const;
+    const char *tag() const;
+
+    enum Access
+    {
+        Private,
+        Protected,
+        Public,
+    };
+
+    QMetaMethod::Access access() const;
+
+    enum MethodType
+    {
+        Method,
+        Signal,
+        Slot,
+        Constructor,
+    };
+
+    QMetaMethod::MethodType methodType() const;
+    SIP_PYOBJECT invoke(QObject *object, Qt::ConnectionType connectionType, QGenericReturnArgument returnValue /GetWrapper/, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGe [...]
+%MethodCode
+        // Raise an exception if the call failed.
+        bool ok;
+        
+        Py_BEGIN_ALLOW_THREADS
+        ok = sipCpp->invoke(a0, a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10, *a11,
+                *a12);
+        Py_END_ALLOW_THREADS
+        
+        if (ok)
+            sipRes = qpycore_ReturnValue(a2Wrapper);
+        else
+            qtcore_invoke_exception();
+%End
+
+    SIP_PYOBJECT invoke(QObject *object, QGenericReturnArgument returnValue /GetWrapper/, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgu [...]
+%MethodCode
+        // Raise an exception if the call failed.
+        bool ok;
+        
+        Py_BEGIN_ALLOW_THREADS
+        ok = sipCpp->invoke(a0, *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10,
+                *a11);
+        Py_END_ALLOW_THREADS
+        
+        if (ok)
+            sipRes = qpycore_ReturnValue(a1Wrapper);
+        else
+            qtcore_invoke_exception();
+%End
+
+    SIP_PYOBJECT invoke(QObject *object, Qt::ConnectionType connectionType, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u),  [...]
+%MethodCode
+        // Raise an exception if the call failed.
+        bool ok;
+        
+        Py_BEGIN_ALLOW_THREADS
+        ok = sipCpp->invoke(a0, a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10, *a11);
+        Py_END_ALLOW_THREADS
+        
+        if (ok)
+        {
+            Py_INCREF(Py_None);
+            sipRes = Py_None;
+        }
+        else
+            qtcore_invoke_exception();
+%End
+
+    SIP_PYOBJECT invoke(QObject *object, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u), QGenericArgument value8 = QGenericA [...]
+%MethodCode
+        // Raise an exception if the call failed.
+        bool ok;
+        
+        Py_BEGIN_ALLOW_THREADS
+        ok = sipCpp->invoke(a0, *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8, *a9, *a10);
+        Py_END_ALLOW_THREADS
+        
+        if (ok)
+        {
+            Py_INCREF(Py_None);
+            sipRes = Py_None;
+        }
+        else
+            qtcore_invoke_exception();
+%End
+
+    int methodIndex() const;
+    bool isValid() const;
+    QByteArray methodSignature() const;
+    QByteArray name() const;
+    int returnType() const;
+    int parameterCount() const;
+    int parameterType(int index) const;
+};
+
+class QMetaEnum
+{
+%TypeHeaderCode
+#include <qmetaobject.h>
+%End
+
+public:
+    QMetaEnum();
+    const char *name() const;
+    bool isFlag() const;
+    int keyCount() const;
+    const char *key(int index) const;
+    int value(int index) const;
+    const char *scope() const;
+    int keyToValue(const char *key, bool *ok = 0) const;
+    const char *valueToKey(int value) const;
+    int keysToValue(const char *keys, bool *ok = 0) const;
+    QByteArray valueToKeys(int value) const;
+    bool isValid() const;
+};
+
+class QMetaProperty
+{
+%TypeHeaderCode
+#include <qmetaobject.h>
+%End
+
+public:
+    QMetaProperty();
+    const char *name() const;
+    const char *typeName() const;
+    QVariant::Type type() const;
+    bool isReadable() const;
+    bool isWritable() const;
+    bool isDesignable(const QObject *object = 0) const;
+    bool isScriptable(const QObject *object = 0) const;
+    bool isStored(const QObject *object = 0) const;
+    bool isFlagType() const;
+    bool isEnumType() const;
+    QMetaEnum enumerator() const;
+    QVariant read(const QObject *obj) const;
+    bool write(QObject *obj, const QVariant &value) const;
+    bool reset(QObject *obj) const;
+    bool hasStdCppSet() const;
+    bool isValid() const;
+    bool isResettable() const;
+    bool isUser(const QObject *object = 0) const;
+    int userType() const;
+    bool hasNotifySignal() const;
+    QMetaMethod notifySignal() const;
+    int notifySignalIndex() const;
+    int propertyIndex() const;
+    bool isConstant() const;
+    bool isFinal() const;
+};
+
+class QMetaClassInfo
+{
+%TypeHeaderCode
+#include <qmetaobject.h>
+%End
+
+public:
+    QMetaClassInfo();
+    const char *name() const;
+    const char *value() const;
+};
+
+bool operator==(const QMetaMethod &m1, const QMetaMethod &m2);
+bool operator!=(const QMetaMethod &m1, const QMetaMethod &m2);
diff --git a/sip/QtCore/qmetatype.sip b/sip/QtCore/qmetatype.sip
new file mode 100644
index 0000000..4c58aac
--- /dev/null
+++ b/sip/QtCore/qmetatype.sip
@@ -0,0 +1,138 @@
+// qmetatype.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qmetatype.h>
+%End
+
+class QMetaType
+{
+%TypeHeaderCode
+#include <qmetatype.h>
+%End
+
+public:
+    enum Type
+    {
+        UnknownType,
+        Void,
+        Bool,
+        Int,
+        UInt,
+        LongLong,
+        ULongLong,
+        Double,
+        QChar,
+        QVariantMap,
+        QVariantList,
+        QVariantHash,
+        QString,
+        QStringList,
+        QByteArray,
+        QBitArray,
+        QDate,
+        QTime,
+        QDateTime,
+        QUrl,
+        QLocale,
+        QRect,
+        QRectF,
+        QSize,
+        QSizeF,
+        QLine,
+        QLineF,
+        QPoint,
+        QPointF,
+        QRegExp,
+        LastCoreType,
+        FirstGuiType,
+        QFont,
+        QPixmap,
+        QBrush,
+        QColor,
+        QPalette,
+        QIcon,
+        QImage,
+        QPolygon,
+        QRegion,
+        QBitmap,
+        QCursor,
+        QSizePolicy,
+        QKeySequence,
+        QPen,
+        QTextLength,
+        QTextFormat,
+        QMatrix,
+        QTransform,
+        VoidStar,
+        Long,
+        Short,
+        Char,
+        ULong,
+        UShort,
+        UChar,
+        Float,
+        QObjectStar,
+        QMatrix4x4,
+        QVector2D,
+        QVector3D,
+        QVector4D,
+        QQuaternion,
+        QEasingCurve,
+        QVariant,
+        QUuid,
+        QModelIndex,
+        QPolygonF,
+        SChar,
+        QRegularExpression,
+        QJsonValue,
+        QJsonObject,
+        QJsonArray,
+        QJsonDocument,
+        User,
+    };
+
+    static int type(const char *typeName);
+    static const char *typeName(int type);
+    static bool isRegistered(int type);
+    explicit QMetaType(const int type);
+    ~QMetaType();
+
+    enum TypeFlag
+    {
+        NeedsConstruction,
+        NeedsDestruction,
+        MovableType,
+    };
+
+    typedef QFlags<QMetaType::TypeFlag> TypeFlags;
+    static QFlags<QMetaType::TypeFlag> typeFlags(int type);
+    bool isValid() const;
+    bool isRegistered() const;
+    QFlags<QMetaType::TypeFlag> flags() const;
+    static const QMetaObject *metaObjectForType(int type);
+
+private:
+    QMetaType(const QMetaType &other);
+};
+
+QFlags<QMetaType::TypeFlag> operator|(QMetaType::TypeFlag f1, QFlags<QMetaType::TypeFlag> f2);
diff --git a/sip/QtCore/qmimedata.sip b/sip/QtCore/qmimedata.sip
new file mode 100644
index 0000000..97a67b4
--- /dev/null
+++ b/sip/QtCore/qmimedata.sip
@@ -0,0 +1,59 @@
+// qmimedata.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMimeData : QObject
+{
+%TypeHeaderCode
+#include <qmimedata.h>
+%End
+
+public:
+    QMimeData();
+    virtual ~QMimeData();
+    QList<QUrl> urls() const;
+    void setUrls(const QList<QUrl> &urls);
+    bool hasUrls() const;
+    QString text() const;
+    void setText(const QString &text);
+    bool hasText() const;
+    QString html() const;
+    void setHtml(const QString &html);
+    bool hasHtml() const;
+    QVariant imageData() const;
+    void setImageData(const QVariant &image);
+    bool hasImage() const;
+    QVariant colorData() const;
+    void setColorData(const QVariant &color);
+    bool hasColor() const;
+    QByteArray data(const QString &mimetype) const;
+    void setData(const QString &mimetype, const QByteArray &data);
+    virtual bool hasFormat(const QString &mimetype) const;
+    virtual QStringList formats() const;
+    void clear();
+    void removeFormat(const QString &mimetype);
+
+protected:
+    virtual QVariant retrieveData(const QString &mimetype, QVariant::Type preferredType) const;
+
+private:
+    QMimeData(const QMimeData &);
+};
diff --git a/sip/QtCore/qmimedatabase.sip b/sip/QtCore/qmimedatabase.sip
new file mode 100644
index 0000000..599e5e6
--- /dev/null
+++ b/sip/QtCore/qmimedatabase.sip
@@ -0,0 +1,54 @@
+// qmimedatabase.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMimeDatabase
+{
+%TypeHeaderCode
+#include <qmimedatabase.h>
+%End
+
+public:
+    QMimeDatabase();
+    ~QMimeDatabase();
+    QMimeType mimeTypeForName(const QString &nameOrAlias) const;
+
+    enum MatchMode
+    {
+        MatchDefault,
+        MatchExtension,
+        MatchContent,
+    };
+
+    QMimeType mimeTypeForFile(const QString &fileName, QMimeDatabase::MatchMode mode = QMimeDatabase::MatchDefault) const;
+    QMimeType mimeTypeForFile(const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode = QMimeDatabase::MatchDefault) const;
+    QList<QMimeType> mimeTypesForFileName(const QString &fileName) const;
+    QMimeType mimeTypeForData(const QByteArray &data) const;
+    QMimeType mimeTypeForData(QIODevice *device) const;
+    QMimeType mimeTypeForUrl(const QUrl &url) const;
+    QMimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const;
+    QMimeType mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const;
+    QString suffixForFileName(const QString &fileName) const;
+    QList<QMimeType> allMimeTypes() const;
+
+private:
+    QMimeDatabase(const QMimeDatabase &);
+};
diff --git a/sip/QtCore/qmimetype.sip b/sip/QtCore/qmimetype.sip
new file mode 100644
index 0000000..f7f1874
--- /dev/null
+++ b/sip/QtCore/qmimetype.sip
@@ -0,0 +1,50 @@
+// qmimetype.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMimeType
+{
+%TypeHeaderCode
+#include <qmimetype.h>
+%End
+
+public:
+    QMimeType();
+    QMimeType(const QMimeType &other);
+    ~QMimeType();
+    void swap(QMimeType &other);
+    bool operator==(const QMimeType &other) const;
+    bool operator!=(const QMimeType &other) const;
+    bool isValid() const;
+    bool isDefault() const;
+    QString name() const;
+    QString comment() const;
+    QString genericIconName() const;
+    QString iconName() const;
+    QStringList globPatterns() const;
+    QStringList parentMimeTypes() const;
+    QStringList allAncestors() const;
+    QStringList aliases() const;
+    QStringList suffixes() const;
+    QString preferredSuffix() const;
+    bool inherits(const QString &mimeTypeName) const;
+    QString filterString() const;
+};
diff --git a/sip/QtCore/qmutex.sip b/sip/QtCore/qmutex.sip
new file mode 100644
index 0000000..535c545
--- /dev/null
+++ b/sip/QtCore/qmutex.sip
@@ -0,0 +1,74 @@
+// qmutex.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMutexLocker
+{
+%TypeHeaderCode
+#include <qmutex.h>
+%End
+
+public:
+    explicit QMutexLocker(QMutex *m) /ReleaseGIL/;
+    ~QMutexLocker();
+    void unlock();
+    void relock() /ReleaseGIL/;
+    QMutex *mutex() const;
+    SIP_PYOBJECT __enter__();
+%MethodCode
+        // Just return a reference to self.
+        sipRes = sipSelf;
+        Py_INCREF(sipRes);
+%End
+
+    void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback);
+%MethodCode
+        sipCpp->unlock();
+%End
+
+private:
+    QMutexLocker(const QMutexLocker &);
+};
+
+class QMutex
+{
+%TypeHeaderCode
+#include <qmutex.h>
+%End
+
+public:
+    enum RecursionMode
+    {
+        NonRecursive,
+        Recursive,
+    };
+
+    explicit QMutex(QMutex::RecursionMode mode = QMutex::NonRecursive);
+    ~QMutex();
+    void lock() /ReleaseGIL/;
+    bool tryLock(int timeout = 0) /ReleaseGIL/;
+    void unlock() /ReleaseGIL/;
+// Methods implemented in QBasicMutex.
+bool isRecursive();
+
+private:
+    QMutex(const QMutex &);
+};
diff --git a/sip/QtCore/qnamespace.sip b/sip/QtCore/qnamespace.sip
new file mode 100644
index 0000000..605094f
--- /dev/null
+++ b/sip/QtCore/qnamespace.sip
@@ -0,0 +1,1560 @@
+// qnamespace.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qnamespace.h>
+%End
+
+namespace Qt
+{
+%TypeHeaderCode
+#include <qnamespace.h>
+%End
+
+    enum GlobalColor
+    {
+        color0,
+        color1,
+        black,
+        white,
+        darkGray,
+        gray,
+        lightGray,
+        red,
+        green,
+        blue,
+        cyan,
+        magenta,
+        yellow,
+        darkRed,
+        darkGreen,
+        darkBlue,
+        darkCyan,
+        darkMagenta,
+        darkYellow,
+        transparent,
+    };
+
+    enum KeyboardModifier
+    {
+        NoModifier,
+        ShiftModifier,
+        ControlModifier,
+        AltModifier,
+        MetaModifier,
+        KeypadModifier,
+        GroupSwitchModifier,
+        KeyboardModifierMask,
+    };
+
+    typedef QFlags<Qt::KeyboardModifier> KeyboardModifiers;
+
+    enum Modifier
+    {
+        META,
+        SHIFT,
+        CTRL,
+        ALT,
+        MODIFIER_MASK,
+        UNICODE_ACCEL,
+    };
+
+    enum MouseButton
+    {
+        NoButton,
+        AllButtons,
+        LeftButton,
+        RightButton,
+        MidButton,
+        MiddleButton,
+        XButton1,
+        XButton2,
+        BackButton,
+        ExtraButton1,
+        ForwardButton,
+        ExtraButton2,
+        TaskButton,
+        ExtraButton3,
+        ExtraButton4,
+        ExtraButton5,
+        ExtraButton6,
+        ExtraButton7,
+        ExtraButton8,
+        ExtraButton9,
+        ExtraButton10,
+        ExtraButton11,
+        ExtraButton12,
+        ExtraButton13,
+        ExtraButton14,
+        ExtraButton15,
+        ExtraButton16,
+        ExtraButton17,
+        ExtraButton18,
+        ExtraButton19,
+        ExtraButton20,
+        ExtraButton21,
+        ExtraButton22,
+        ExtraButton23,
+        ExtraButton24,
+    };
+
+    typedef QFlags<Qt::MouseButton> MouseButtons;
+
+    enum Orientation
+    {
+        Horizontal,
+        Vertical,
+    };
+
+    typedef QFlags<Qt::Orientation> Orientations;
+
+    enum FocusPolicy
+    {
+        NoFocus,
+        TabFocus,
+        ClickFocus,
+        StrongFocus,
+        WheelFocus,
+    };
+
+    enum SortOrder
+    {
+        AscendingOrder,
+        DescendingOrder,
+    };
+
+    enum AlignmentFlag
+    {
+        AlignLeft,
+        AlignLeading,
+        AlignRight,
+        AlignTrailing,
+        AlignHCenter,
+        AlignJustify,
+        AlignAbsolute,
+        AlignHorizontal_Mask,
+        AlignTop,
+        AlignBottom,
+        AlignVCenter,
+        AlignVertical_Mask,
+        AlignCenter,
+%If (Qt_5_2_0 -)
+        AlignBaseline,
+%End
+    };
+
+    typedef QFlags<Qt::AlignmentFlag> Alignment;
+
+    enum TextFlag
+    {
+        TextSingleLine,
+        TextDontClip,
+        TextExpandTabs,
+        TextShowMnemonic,
+        TextWordWrap,
+        TextWrapAnywhere,
+        TextDontPrint,
+        TextIncludeTrailingSpaces,
+        TextHideMnemonic,
+        TextJustificationForced,
+    };
+
+    enum TextElideMode
+    {
+        ElideLeft,
+        ElideRight,
+        ElideMiddle,
+        ElideNone,
+    };
+
+    enum WindowType
+    {
+        Widget,
+        Window,
+        Dialog,
+        Sheet,
+        Drawer,
+        Popup,
+        Tool,
+        ToolTip,
+        SplashScreen,
+        Desktop,
+        SubWindow,
+        WindowType_Mask,
+        MSWindowsFixedSizeDialogHint,
+        MSWindowsOwnDC,
+        X11BypassWindowManagerHint,
+        FramelessWindowHint,
+        CustomizeWindowHint,
+        WindowTitleHint,
+        WindowSystemMenuHint,
+        WindowMinimizeButtonHint,
+        WindowMaximizeButtonHint,
+        WindowMinMaxButtonsHint,
+        WindowContextHelpButtonHint,
+        WindowShadeButtonHint,
+        WindowStaysOnTopHint,
+        WindowOkButtonHint,
+        WindowCancelButtonHint,
+        WindowStaysOnBottomHint,
+        WindowCloseButtonHint,
+        MacWindowToolBarButtonHint,
+        BypassGraphicsProxyWidget,
+        WindowTransparentForInput,
+        WindowOverridesSystemGestures,
+        WindowDoesNotAcceptFocus,
+        NoDropShadowWindowHint,
+        WindowFullscreenButtonHint,
+%If (Qt_5_1_0 -)
+        ForeignWindow,
+%End
+%If (Qt_5_1_0 -)
+        BypassWindowManagerHint,
+%End
+%If (Qt_5_2_0 -)
+        CoverWindow,
+%End
+    };
+
+    typedef QFlags<Qt::WindowType> WindowFlags;
+
+    enum WindowState
+    {
+        WindowNoState,
+        WindowMinimized,
+        WindowMaximized,
+        WindowFullScreen,
+        WindowActive,
+    };
+
+    typedef QFlags<Qt::WindowState> WindowStates;
+
+    enum WidgetAttribute
+    {
+        WA_Disabled,
+        WA_UnderMouse,
+        WA_MouseTracking,
+        WA_OpaquePaintEvent,
+        WA_StaticContents,
+        WA_LaidOut,
+        WA_PaintOnScreen,
+        WA_NoSystemBackground,
+        WA_UpdatesDisabled,
+        WA_Mapped,
+        WA_MacNoClickThrough,
+        WA_InputMethodEnabled,
+        WA_WState_Visible,
+        WA_WState_Hidden,
+        WA_ForceDisabled,
+        WA_KeyCompression,
+        WA_PendingMoveEvent,
+        WA_PendingResizeEvent,
+        WA_SetPalette,
+        WA_SetFont,
+        WA_SetCursor,
+        WA_NoChildEventsFromChildren,
+        WA_WindowModified,
+        WA_Resized,
+        WA_Moved,
+        WA_PendingUpdate,
+        WA_InvalidSize,
+        WA_MacMetalStyle,
+        WA_CustomWhatsThis,
+        WA_LayoutOnEntireRect,
+        WA_OutsideWSRange,
+        WA_GrabbedShortcut,
+        WA_TransparentForMouseEvents,
+        WA_PaintUnclipped,
+        WA_SetWindowIcon,
+        WA_NoMouseReplay,
+        WA_DeleteOnClose,
+        WA_RightToLeft,
+        WA_SetLayoutDirection,
+        WA_NoChildEventsForParent,
+        WA_ForceUpdatesDisabled,
+        WA_WState_Created,
+        WA_WState_CompressKeys,
+        WA_WState_InPaintEvent,
+        WA_WState_Reparented,
+        WA_WState_ConfigPending,
+        WA_WState_Polished,
+        WA_WState_OwnSizePolicy,
+        WA_WState_ExplicitShowHide,
+        WA_MouseNoMask,
+        WA_GroupLeader,
+        WA_NoMousePropagation,
+        WA_Hover,
+        WA_InputMethodTransparent,
+        WA_QuitOnClose,
+        WA_KeyboardFocusChange,
+        WA_AcceptDrops,
+        WA_WindowPropagation,
+        WA_NoX11EventCompression,
+        WA_TintedBackground,
+        WA_X11OpenGLOverlay,
+        WA_AttributeCount,
+        WA_AlwaysShowToolTips,
+        WA_MacOpaqueSizeGrip,
+        WA_SetStyle,
+        WA_MacBrushedMetal,
+        WA_SetLocale,
+        WA_MacShowFocusRect,
+        WA_MacNormalSize,
+        WA_MacSmallSize,
+        WA_MacMiniSize,
+        WA_LayoutUsesWidgetRect,
+        WA_StyledBackground,
+        WA_MSWindowsUseDirect3D,
+        WA_MacAlwaysShowToolWindow,
+        WA_StyleSheet,
+        WA_ShowWithoutActivating,
+        WA_NativeWindow,
+        WA_DontCreateNativeAncestors,
+        WA_MacVariableSize,
+        WA_X11NetWmWindowTypeDesktop,
+        WA_X11NetWmWindowTypeDock,
+        WA_X11NetWmWindowTypeToolBar,
+        WA_X11NetWmWindowTypeMenu,
+        WA_X11NetWmWindowTypeUtility,
+        WA_X11NetWmWindowTypeSplash,
+        WA_X11NetWmWindowTypeDialog,
+        WA_X11NetWmWindowTypeDropDownMenu,
+        WA_X11NetWmWindowTypePopupMenu,
+        WA_X11NetWmWindowTypeToolTip,
+        WA_X11NetWmWindowTypeNotification,
+        WA_X11NetWmWindowTypeCombo,
+        WA_X11NetWmWindowTypeDND,
+        WA_MacFrameworkScaled,
+        WA_TranslucentBackground,
+        WA_AcceptTouchEvents,
+        WA_TouchPadAcceptSingleTouchEvents,
+        WA_X11DoNotAcceptFocus,
+        WA_MacNoShadow,
+    };
+
+    enum ImageConversionFlag
+    {
+        AutoColor,
+        ColorOnly,
+        MonoOnly,
+        ThresholdAlphaDither,
+        OrderedAlphaDither,
+        DiffuseAlphaDither,
+        DiffuseDither,
+        OrderedDither,
+        ThresholdDither,
+        AutoDither,
+        PreferDither,
+        AvoidDither,
+    };
+
+    typedef QFlags<Qt::ImageConversionFlag> ImageConversionFlags;
+
+    enum BGMode
+    {
+        TransparentMode,
+        OpaqueMode,
+    };
+
+    enum Key
+    {
+        Key_Escape,
+        Key_Tab,
+        Key_Backtab,
+        Key_Backspace,
+        Key_Return,
+        Key_Enter,
+        Key_Insert,
+        Key_Delete,
+        Key_Pause,
+        Key_Print,
+        Key_SysReq,
+        Key_Clear,
+        Key_Home,
+        Key_End,
+        Key_Left,
+        Key_Up,
+        Key_Right,
+        Key_Down,
+        Key_PageUp,
+        Key_PageDown,
+        Key_Shift,
+        Key_Control,
+        Key_Meta,
+        Key_Alt,
+        Key_CapsLock,
+        Key_NumLock,
+        Key_ScrollLock,
+        Key_F1,
+        Key_F2,
+        Key_F3,
+        Key_F4,
+        Key_F5,
+        Key_F6,
+        Key_F7,
+        Key_F8,
+        Key_F9,
+        Key_F10,
+        Key_F11,
+        Key_F12,
+        Key_F13,
+        Key_F14,
+        Key_F15,
+        Key_F16,
+        Key_F17,
+        Key_F18,
+        Key_F19,
+        Key_F20,
+        Key_F21,
+        Key_F22,
+        Key_F23,
+        Key_F24,
+        Key_F25,
+        Key_F26,
+        Key_F27,
+        Key_F28,
+        Key_F29,
+        Key_F30,
+        Key_F31,
+        Key_F32,
+        Key_F33,
+        Key_F34,
+        Key_F35,
+        Key_Super_L,
+        Key_Super_R,
+        Key_Menu,
+        Key_Hyper_L,
+        Key_Hyper_R,
+        Key_Help,
+        Key_Direction_L,
+        Key_Direction_R,
+        Key_Space,
+        Key_Any,
+        Key_Exclam,
+        Key_QuoteDbl,
+        Key_NumberSign,
+        Key_Dollar,
+        Key_Percent,
+        Key_Ampersand,
+        Key_Apostrophe,
+        Key_ParenLeft,
+        Key_ParenRight,
+        Key_Asterisk,
+        Key_Plus,
+        Key_Comma,
+        Key_Minus,
+        Key_Period,
+        Key_Slash,
+        Key_0,
+        Key_1,
+        Key_2,
+        Key_3,
+        Key_4,
+        Key_5,
+        Key_6,
+        Key_7,
+        Key_8,
+        Key_9,
+        Key_Colon,
+        Key_Semicolon,
+        Key_Less,
+        Key_Equal,
+        Key_Greater,
+        Key_Question,
+        Key_At,
+        Key_A,
+        Key_B,
+        Key_C,
+        Key_D,
+        Key_E,
+        Key_F,
+        Key_G,
+        Key_H,
+        Key_I,
+        Key_J,
+        Key_K,
+        Key_L,
+        Key_M,
+        Key_N,
+        Key_O,
+        Key_P,
+        Key_Q,
+        Key_R,
+        Key_S,
+        Key_T,
+        Key_U,
+        Key_V,
+        Key_W,
+        Key_X,
+        Key_Y,
+        Key_Z,
+        Key_BracketLeft,
+        Key_Backslash,
+        Key_BracketRight,
+        Key_AsciiCircum,
+        Key_Underscore,
+        Key_QuoteLeft,
+        Key_BraceLeft,
+        Key_Bar,
+        Key_BraceRight,
+        Key_AsciiTilde,
+        Key_nobreakspace,
+        Key_exclamdown,
+        Key_cent,
+        Key_sterling,
+        Key_currency,
+        Key_yen,
+        Key_brokenbar,
+        Key_section,
+        Key_diaeresis,
+        Key_copyright,
+        Key_ordfeminine,
+        Key_guillemotleft,
+        Key_notsign,
+        Key_hyphen,
+        Key_registered,
+        Key_macron,
+        Key_degree,
+        Key_plusminus,
+        Key_twosuperior,
+        Key_threesuperior,
+        Key_acute,
+        Key_mu,
+        Key_paragraph,
+        Key_periodcentered,
+        Key_cedilla,
+        Key_onesuperior,
+        Key_masculine,
+        Key_guillemotright,
+        Key_onequarter,
+        Key_onehalf,
+        Key_threequarters,
+        Key_questiondown,
+        Key_Agrave,
+        Key_Aacute,
+        Key_Acircumflex,
+        Key_Atilde,
+        Key_Adiaeresis,
+        Key_Aring,
+        Key_AE,
+        Key_Ccedilla,
+        Key_Egrave,
+        Key_Eacute,
+        Key_Ecircumflex,
+        Key_Ediaeresis,
+        Key_Igrave,
+        Key_Iacute,
+        Key_Icircumflex,
+        Key_Idiaeresis,
+        Key_ETH,
+        Key_Ntilde,
+        Key_Ograve,
+        Key_Oacute,
+        Key_Ocircumflex,
+        Key_Otilde,
+        Key_Odiaeresis,
+        Key_multiply,
+        Key_Ooblique,
+        Key_Ugrave,
+        Key_Uacute,
+        Key_Ucircumflex,
+        Key_Udiaeresis,
+        Key_Yacute,
+        Key_THORN,
+        Key_ssharp,
+        Key_division,
+        Key_ydiaeresis,
+        Key_AltGr,
+        Key_Multi_key,
+        Key_Codeinput,
+        Key_SingleCandidate,
+        Key_MultipleCandidate,
+        Key_PreviousCandidate,
+        Key_Mode_switch,
+        Key_Kanji,
+        Key_Muhenkan,
+        Key_Henkan,
+        Key_Romaji,
+        Key_Hiragana,
+        Key_Katakana,
+        Key_Hiragana_Katakana,
+        Key_Zenkaku,
+        Key_Hankaku,
+        Key_Zenkaku_Hankaku,
+        Key_Touroku,
+        Key_Massyo,
+        Key_Kana_Lock,
+        Key_Kana_Shift,
+        Key_Eisu_Shift,
+        Key_Eisu_toggle,
+        Key_Hangul,
+        Key_Hangul_Start,
+        Key_Hangul_End,
+        Key_Hangul_Hanja,
+        Key_Hangul_Jamo,
+        Key_Hangul_Romaja,
+        Key_Hangul_Jeonja,
+        Key_Hangul_Banja,
+        Key_Hangul_PreHanja,
+        Key_Hangul_PostHanja,
+        Key_Hangul_Special,
+        Key_Dead_Grave,
+        Key_Dead_Acute,
+        Key_Dead_Circumflex,
+        Key_Dead_Tilde,
+        Key_Dead_Macron,
+        Key_Dead_Breve,
+        Key_Dead_Abovedot,
+        Key_Dead_Diaeresis,
+        Key_Dead_Abovering,
+        Key_Dead_Doubleacute,
+        Key_Dead_Caron,
+        Key_Dead_Cedilla,
+        Key_Dead_Ogonek,
+        Key_Dead_Iota,
+        Key_Dead_Voiced_Sound,
+        Key_Dead_Semivoiced_Sound,
+        Key_Dead_Belowdot,
+        Key_Dead_Hook,
+        Key_Dead_Horn,
+        Key_Back,
+        Key_Forward,
+        Key_Stop,
+        Key_Refresh,
+        Key_VolumeDown,
+        Key_VolumeMute,
+        Key_VolumeUp,
+        Key_BassBoost,
+        Key_BassUp,
+        Key_BassDown,
+        Key_TrebleUp,
+        Key_TrebleDown,
+        Key_MediaPlay,
+        Key_MediaStop,
+        Key_MediaPrevious,
+        Key_MediaNext,
+        Key_MediaRecord,
+        Key_HomePage,
+        Key_Favorites,
+        Key_Search,
+        Key_Standby,
+        Key_OpenUrl,
+        Key_LaunchMail,
+        Key_LaunchMedia,
+        Key_Launch0,
+        Key_Launch1,
+        Key_Launch2,
+        Key_Launch3,
+        Key_Launch4,
+        Key_Launch5,
+        Key_Launch6,
+        Key_Launch7,
+        Key_Launch8,
+        Key_Launch9,
+        Key_LaunchA,
+        Key_LaunchB,
+        Key_LaunchC,
+        Key_LaunchD,
+        Key_LaunchE,
+        Key_LaunchF,
+        Key_MediaLast,
+        Key_Select,
+        Key_Yes,
+        Key_No,
+        Key_Context1,
+        Key_Context2,
+        Key_Context3,
+        Key_Context4,
+        Key_Call,
+        Key_Hangup,
+        Key_Flip,
+        Key_unknown,
+        Key_Execute,
+        Key_Printer,
+        Key_Play,
+        Key_Sleep,
+        Key_Zoom,
+        Key_Cancel,
+        Key_MonBrightnessUp,
+        Key_MonBrightnessDown,
+        Key_KeyboardLightOnOff,
+        Key_KeyboardBrightnessUp,
+        Key_KeyboardBrightnessDown,
+        Key_PowerOff,
+        Key_WakeUp,
+        Key_Eject,
+        Key_ScreenSaver,
+        Key_WWW,
+        Key_Memo,
+        Key_LightBulb,
+        Key_Shop,
+        Key_History,
+        Key_AddFavorite,
+        Key_HotLinks,
+        Key_BrightnessAdjust,
+        Key_Finance,
+        Key_Community,
+        Key_AudioRewind,
+        Key_BackForward,
+        Key_ApplicationLeft,
+        Key_ApplicationRight,
+        Key_Book,
+        Key_CD,
+        Key_Calculator,
+        Key_ToDoList,
+        Key_ClearGrab,
+        Key_Close,
+        Key_Copy,
+        Key_Cut,
+        Key_Display,
+        Key_DOS,
+        Key_Documents,
+        Key_Excel,
+        Key_Explorer,
+        Key_Game,
+        Key_Go,
+        Key_iTouch,
+        Key_LogOff,
+        Key_Market,
+        Key_Meeting,
+        Key_MenuKB,
+        Key_MenuPB,
+        Key_MySites,
+        Key_News,
+        Key_OfficeHome,
+        Key_Option,
+        Key_Paste,
+        Key_Phone,
+        Key_Calendar,
+        Key_Reply,
+        Key_Reload,
+        Key_RotateWindows,
+        Key_RotationPB,
+        Key_RotationKB,
+        Key_Save,
+        Key_Send,
+        Key_Spell,
+        Key_SplitScreen,
+        Key_Support,
+        Key_TaskPane,
+        Key_Terminal,
+        Key_Tools,
+        Key_Travel,
+        Key_Video,
+        Key_Word,
+        Key_Xfer,
+        Key_ZoomIn,
+        Key_ZoomOut,
+        Key_Away,
+        Key_Messenger,
+        Key_WebCam,
+        Key_MailForward,
+        Key_Pictures,
+        Key_Music,
+        Key_Battery,
+        Key_Bluetooth,
+        Key_WLAN,
+        Key_UWB,
+        Key_AudioForward,
+        Key_AudioRepeat,
+        Key_AudioRandomPlay,
+        Key_Subtitle,
+        Key_AudioCycleTrack,
+        Key_Time,
+        Key_Hibernate,
+        Key_View,
+        Key_TopMenu,
+        Key_PowerDown,
+        Key_Suspend,
+        Key_ContrastAdjust,
+        Key_MediaPause,
+        Key_MediaTogglePlayPause,
+        Key_LaunchG,
+        Key_LaunchH,
+        Key_ToggleCallHangup,
+        Key_VoiceDial,
+        Key_LastNumberRedial,
+        Key_Camera,
+        Key_CameraFocus,
+        Key_TouchpadToggle,
+        Key_TouchpadOn,
+        Key_TouchpadOff,
+%If (Qt_5_1_0 -)
+        Key_MicMute,
+%End
+%If (Qt_5_2_0 -)
+        Key_Red,
+%End
+%If (Qt_5_2_0 -)
+        Key_Green,
+%End
+%If (Qt_5_2_0 -)
+        Key_Yellow,
+%End
+%If (Qt_5_2_0 -)
+        Key_Blue,
+%End
+%If (Qt_5_2_0 -)
+        Key_ChannelUp,
+%End
+%If (Qt_5_2_0 -)
+        Key_ChannelDown,
+%End
+%If (Qt_5_3_0 -)
+        Key_Guide,
+%End
+%If (Qt_5_3_0 -)
+        Key_Info,
+%End
+%If (Qt_5_3_0 -)
+        Key_Settings,
+%End
+%If (Qt_5_3_0 -)
+        Key_Exit,
+%End
+    };
+
+    enum ArrowType
+    {
+        NoArrow,
+        UpArrow,
+        DownArrow,
+        LeftArrow,
+        RightArrow,
+    };
+
+    enum PenStyle
+    {
+        NoPen,
+        SolidLine,
+        DashLine,
+        DotLine,
+        DashDotLine,
+        DashDotDotLine,
+        CustomDashLine,
+        MPenStyle,
+    };
+
+    enum PenCapStyle
+    {
+        FlatCap,
+        SquareCap,
+        RoundCap,
+        MPenCapStyle,
+    };
+
+    enum PenJoinStyle
+    {
+        MiterJoin,
+        BevelJoin,
+        RoundJoin,
+        MPenJoinStyle,
+        SvgMiterJoin,
+    };
+
+    enum BrushStyle
+    {
+        NoBrush,
+        SolidPattern,
+        Dense1Pattern,
+        Dense2Pattern,
+        Dense3Pattern,
+        Dense4Pattern,
+        Dense5Pattern,
+        Dense6Pattern,
+        Dense7Pattern,
+        HorPattern,
+        VerPattern,
+        CrossPattern,
+        BDiagPattern,
+        FDiagPattern,
+        DiagCrossPattern,
+        LinearGradientPattern,
+        RadialGradientPattern,
+        ConicalGradientPattern,
+        TexturePattern,
+    };
+
+    enum UIEffect
+    {
+        UI_General,
+        UI_AnimateMenu,
+        UI_FadeMenu,
+        UI_AnimateCombo,
+        UI_AnimateTooltip,
+        UI_FadeTooltip,
+        UI_AnimateToolBox,
+    };
+
+    enum CursorShape
+    {
+        ArrowCursor,
+        UpArrowCursor,
+        CrossCursor,
+        WaitCursor,
+        IBeamCursor,
+        SizeVerCursor,
+        SizeHorCursor,
+        SizeBDiagCursor,
+        SizeFDiagCursor,
+        SizeAllCursor,
+        BlankCursor,
+        SplitVCursor,
+        SplitHCursor,
+        PointingHandCursor,
+        ForbiddenCursor,
+        OpenHandCursor,
+        ClosedHandCursor,
+        WhatsThisCursor,
+        BusyCursor,
+        LastCursor,
+        BitmapCursor,
+        CustomCursor,
+        DragCopyCursor,
+        DragMoveCursor,
+        DragLinkCursor,
+    };
+
+    enum TextFormat
+    {
+        PlainText,
+        RichText,
+        AutoText,
+    };
+
+    enum AspectRatioMode
+    {
+        IgnoreAspectRatio,
+        KeepAspectRatio,
+        KeepAspectRatioByExpanding,
+    };
+
+    enum DockWidgetArea
+    {
+        LeftDockWidgetArea,
+        RightDockWidgetArea,
+        TopDockWidgetArea,
+        BottomDockWidgetArea,
+        DockWidgetArea_Mask,
+        AllDockWidgetAreas,
+        NoDockWidgetArea,
+    };
+
+    typedef QFlags<Qt::DockWidgetArea> DockWidgetAreas;
+
+    enum TimerType
+    {
+        PreciseTimer,
+        CoarseTimer,
+        VeryCoarseTimer,
+    };
+
+    enum ToolBarArea
+    {
+        LeftToolBarArea,
+        RightToolBarArea,
+        TopToolBarArea,
+        BottomToolBarArea,
+        ToolBarArea_Mask,
+        AllToolBarAreas,
+        NoToolBarArea,
+    };
+
+    typedef QFlags<Qt::ToolBarArea> ToolBarAreas;
+
+    enum DateFormat
+    {
+        TextDate,
+        ISODate,
+        LocalDate,
+        SystemLocaleDate,
+        LocaleDate,
+        SystemLocaleShortDate,
+        SystemLocaleLongDate,
+        DefaultLocaleShortDate,
+        DefaultLocaleLongDate,
+%If (Qt_5_2_0 -)
+        RFC2822Date,
+%End
+    };
+
+    enum TimeSpec
+    {
+        LocalTime,
+        UTC,
+        OffsetFromUTC,
+%If (Qt_5_2_0 -)
+        TimeZone,
+%End
+    };
+
+    enum DayOfWeek
+    {
+        Monday,
+        Tuesday,
+        Wednesday,
+        Thursday,
+        Friday,
+        Saturday,
+        Sunday,
+    };
+
+    enum ScrollBarPolicy
+    {
+        ScrollBarAsNeeded,
+        ScrollBarAlwaysOff,
+        ScrollBarAlwaysOn,
+    };
+
+    enum CaseSensitivity
+    {
+        CaseInsensitive,
+        CaseSensitive,
+    };
+
+    enum Corner
+    {
+        TopLeftCorner,
+        TopRightCorner,
+        BottomLeftCorner,
+        BottomRightCorner,
+    };
+
+    enum ConnectionType
+    {
+        AutoConnection,
+        DirectConnection,
+        QueuedConnection,
+        BlockingQueuedConnection,
+        UniqueConnection,
+    };
+
+    enum ShortcutContext
+    {
+        WidgetShortcut,
+        WindowShortcut,
+        ApplicationShortcut,
+        WidgetWithChildrenShortcut,
+    };
+
+    enum FillRule
+    {
+        OddEvenFill,
+        WindingFill,
+    };
+
+    enum ClipOperation
+    {
+        NoClip,
+        ReplaceClip,
+        IntersectClip,
+    };
+
+    enum TransformationMode
+    {
+        FastTransformation,
+        SmoothTransformation,
+    };
+
+    enum FocusReason
+    {
+        MouseFocusReason,
+        TabFocusReason,
+        BacktabFocusReason,
+        ActiveWindowFocusReason,
+        PopupFocusReason,
+        ShortcutFocusReason,
+        MenuBarFocusReason,
+        OtherFocusReason,
+        NoFocusReason,
+    };
+
+    enum ContextMenuPolicy
+    {
+        NoContextMenu,
+        PreventContextMenu,
+        DefaultContextMenu,
+        ActionsContextMenu,
+        CustomContextMenu,
+    };
+
+    enum InputMethodQuery
+    {
+        ImMicroFocus,
+        ImFont,
+        ImCursorPosition,
+        ImSurroundingText,
+        ImCurrentSelection,
+        ImMaximumTextLength,
+        ImAnchorPosition,
+        ImEnabled,
+        ImCursorRectangle,
+        ImHints,
+        ImPreferredLanguage,
+        ImPlatformData,
+        ImQueryInput,
+        ImQueryAll,
+%If (Qt_5_3_0 -)
+        ImAbsolutePosition,
+%End
+%If (Qt_5_3_0 -)
+        ImTextBeforeCursor,
+%End
+%If (Qt_5_3_0 -)
+        ImTextAfterCursor,
+%End
+    };
+
+    typedef QFlags<Qt::InputMethodQuery> InputMethodQueries;
+
+    enum ToolButtonStyle
+    {
+        ToolButtonIconOnly,
+        ToolButtonTextOnly,
+        ToolButtonTextBesideIcon,
+        ToolButtonTextUnderIcon,
+        ToolButtonFollowStyle,
+    };
+
+    enum LayoutDirection
+    {
+        LeftToRight,
+        RightToLeft,
+        LayoutDirectionAuto,
+    };
+
+    enum DropAction
+    {
+        CopyAction,
+        MoveAction,
+        LinkAction,
+        ActionMask,
+        TargetMoveAction,
+        IgnoreAction,
+    };
+
+    typedef QFlags<Qt::DropAction> DropActions;
+
+    enum CheckState
+    {
+        Unchecked,
+        PartiallyChecked,
+        Checked,
+    };
+
+    enum ItemDataRole
+    {
+        DisplayRole,
+        DecorationRole,
+        EditRole,
+        ToolTipRole,
+        StatusTipRole,
+        WhatsThisRole,
+        FontRole,
+        TextAlignmentRole,
+        BackgroundRole,
+        BackgroundColorRole,
+        ForegroundRole,
+        TextColorRole,
+        CheckStateRole,
+        AccessibleTextRole,
+        AccessibleDescriptionRole,
+        SizeHintRole,
+        InitialSortOrderRole,
+        UserRole,
+    };
+
+    enum ItemFlag
+    {
+        NoItemFlags,
+        ItemIsSelectable,
+        ItemIsEditable,
+        ItemIsDragEnabled,
+        ItemIsDropEnabled,
+        ItemIsUserCheckable,
+        ItemIsEnabled,
+        ItemIsTristate,
+%If (Qt_5_1_0 -)
+        ItemNeverHasChildren,
+%End
+    };
+
+    typedef QFlags<Qt::ItemFlag> ItemFlags;
+
+    enum MatchFlag
+    {
+        MatchExactly,
+        MatchFixedString,
+        MatchContains,
+        MatchStartsWith,
+        MatchEndsWith,
+        MatchRegExp,
+        MatchWildcard,
+        MatchCaseSensitive,
+        MatchWrap,
+        MatchRecursive,
+    };
+
+    typedef QFlags<Qt::MatchFlag> MatchFlags;
+    typedef void *HANDLE;
+
+    enum WindowModality
+    {
+        NonModal,
+        WindowModal,
+        ApplicationModal,
+    };
+
+    enum ApplicationAttribute
+    {
+        AA_ImmediateWidgetCreation,
+        AA_MSWindowsUseDirect3DByDefault,
+        AA_DontShowIconsInMenus,
+        AA_NativeWindows,
+        AA_DontCreateNativeWidgetSiblings,
+        AA_MacPluginApplication,
+        AA_DontUseNativeMenuBar,
+        AA_MacDontSwapCtrlAndMeta,
+        AA_X11InitThreads,
+        AA_Use96Dpi,
+        AA_SynthesizeTouchForUnhandledMouseEvents,
+        AA_SynthesizeMouseForUnhandledTouchEvents,
+%If (Qt_5_1_0 -)
+        AA_UseHighDpiPixmaps,
+%End
+%If (Qt_5_3_0 -)
+        AA_ForceRasterWidgets,
+%End
+%If (Qt_5_3_0 -)
+        AA_UseDesktopOpenGL,
+%End
+%If (Qt_5_3_0 -)
+        AA_UseOpenGLES,
+%End
+    };
+
+    enum ItemSelectionMode
+    {
+        ContainsItemShape,
+        IntersectsItemShape,
+        ContainsItemBoundingRect,
+        IntersectsItemBoundingRect,
+    };
+
+    enum TextInteractionFlag
+    {
+        NoTextInteraction,
+        TextSelectableByMouse,
+        TextSelectableByKeyboard,
+        LinksAccessibleByMouse,
+        LinksAccessibleByKeyboard,
+        TextEditable,
+        TextEditorInteraction,
+        TextBrowserInteraction,
+    };
+
+    typedef QFlags<Qt::TextInteractionFlag> TextInteractionFlags;
+
+    enum MaskMode
+    {
+        MaskInColor,
+        MaskOutColor,
+    };
+
+    enum Axis
+    {
+        XAxis,
+        YAxis,
+        ZAxis,
+    };
+
+    enum EventPriority
+    {
+        HighEventPriority,
+        NormalEventPriority,
+        LowEventPriority,
+    };
+
+    enum SizeMode
+    {
+        AbsoluteSize,
+        RelativeSize,
+    };
+
+    enum SizeHint
+    {
+        MinimumSize,
+        PreferredSize,
+        MaximumSize,
+        MinimumDescent,
+    };
+
+    enum WindowFrameSection
+    {
+        NoSection,
+        LeftSection,
+        TopLeftSection,
+        TopSection,
+        TopRightSection,
+        RightSection,
+        BottomRightSection,
+        BottomSection,
+        BottomLeftSection,
+        TitleBarArea,
+    };
+
+    enum TileRule
+    {
+        StretchTile,
+        RepeatTile,
+        RoundTile,
+    };
+
+    enum InputMethodHint
+    {
+        ImhNone,
+        ImhHiddenText,
+        ImhNoAutoUppercase,
+        ImhPreferNumbers,
+        ImhPreferUppercase,
+        ImhPreferLowercase,
+        ImhNoPredictiveText,
+        ImhDigitsOnly,
+        ImhFormattedNumbersOnly,
+        ImhUppercaseOnly,
+        ImhLowercaseOnly,
+        ImhDialableCharactersOnly,
+        ImhEmailCharactersOnly,
+        ImhUrlCharactersOnly,
+        ImhExclusiveInputMask,
+        ImhSensitiveData,
+        ImhDate,
+        ImhTime,
+        ImhPreferLatin,
+        ImhLatinOnly,
+%If (Qt_5_1_0 -)
+        ImhMultiLine,
+%End
+    };
+
+    typedef QFlags<Qt::InputMethodHint> InputMethodHints;
+
+    enum AnchorPoint
+    {
+        AnchorLeft,
+        AnchorHorizontalCenter,
+        AnchorRight,
+        AnchorTop,
+        AnchorVerticalCenter,
+        AnchorBottom,
+    };
+
+    enum CoordinateSystem
+    {
+        DeviceCoordinates,
+        LogicalCoordinates,
+    };
+
+    enum TouchPointState
+    {
+        TouchPointPressed,
+        TouchPointMoved,
+        TouchPointStationary,
+        TouchPointReleased,
+    };
+
+    typedef QFlags<Qt::TouchPointState> TouchPointStates;
+
+    enum GestureState
+    {
+        GestureStarted,
+        GestureUpdated,
+        GestureFinished,
+        GestureCanceled,
+    };
+
+    enum GestureType
+    {
+        TapGesture,
+        TapAndHoldGesture,
+        PanGesture,
+        PinchGesture,
+        SwipeGesture,
+        CustomGesture,
+    };
+
+    enum GestureFlag
+    {
+        DontStartGestureOnChildren,
+        ReceivePartialGestures,
+        IgnoredGesturesPropagateToParent,
+    };
+
+    typedef QFlags<Qt::GestureFlag> GestureFlags;
+
+    enum NavigationMode
+    {
+        NavigationModeNone,
+        NavigationModeKeypadTabOrder,
+        NavigationModeKeypadDirectional,
+        NavigationModeCursorAuto,
+        NavigationModeCursorForceVisible,
+    };
+
+    enum CursorMoveStyle
+    {
+        LogicalMoveStyle,
+        VisualMoveStyle,
+    };
+
+    enum ScreenOrientation
+    {
+        PrimaryOrientation,
+        PortraitOrientation,
+        LandscapeOrientation,
+        InvertedPortraitOrientation,
+        InvertedLandscapeOrientation,
+    };
+
+    typedef QFlags<Qt::ScreenOrientation> ScreenOrientations;
+
+    enum FindChildOption
+    {
+        FindDirectChildrenOnly,
+        FindChildrenRecursively,
+    };
+
+    typedef QFlags<Qt::FindChildOption> FindChildOptions;
+
+    enum WhiteSpaceMode
+    {
+        WhiteSpaceNormal,
+        WhiteSpacePre,
+        WhiteSpaceNoWrap,
+        WhiteSpaceModeUndefined,
+    };
+
+    enum HitTestAccuracy
+    {
+        ExactHit,
+        FuzzyHit,
+    };
+
+%If (Qt_5_1_0 -)
+
+    enum ApplicationState
+    {
+        ApplicationSuspended,
+        ApplicationHidden,
+        ApplicationInactive,
+        ApplicationActive,
+    };
+
+%End
+%If (Qt_5_1_0 -)
+    typedef QFlags<Qt::ApplicationState> ApplicationStates;
+%End
+%If (Qt_5_1_0 -)
+
+    enum Edge
+    {
+        TopEdge,
+        LeftEdge,
+        RightEdge,
+        BottomEdge,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+
+    enum NativeGestureType
+    {
+        BeginNativeGesture,
+        EndNativeGesture,
+        PanNativeGesture,
+        ZoomNativeGesture,
+        SmartZoomNativeGesture,
+        RotateNativeGesture,
+        SwipeNativeGesture,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+
+    enum ScrollPhase
+    {
+        ScrollBegin,
+        ScrollUpdate,
+        ScrollEnd,
+    };
+
+%End
+%If (Qt_5_3_0 -)
+    typedef QFlags<Qt::Edge> Edges;
+%End
+%If (Qt_5_3_0 -)
+
+    enum MouseEventSource
+    {
+        MouseEventNotSynthesized,
+        MouseEventSynthesizedBySystem,
+        MouseEventSynthesizedByQt,
+    };
+
+%End
+%If (Qt_5_3_0 -)
+
+    enum MouseEventFlag
+    {
+        MouseEventCreatedDoubleClick,
+    };
+
+%End
+%If (Qt_5_3_0 -)
+    typedef QFlags<Qt::MouseEventFlag> MouseEventFlags;
+%End
+};
+
+QFlags<Qt::MouseButton> operator|(Qt::MouseButton f1, QFlags<Qt::MouseButton> f2);
+QFlags<Qt::Orientation> operator|(Qt::Orientation f1, QFlags<Qt::Orientation> f2);
+QFlags<Qt::KeyboardModifier> operator|(Qt::KeyboardModifier f1, QFlags<Qt::KeyboardModifier> f2);
+QFlags<Qt::WindowType> operator|(Qt::WindowType f1, QFlags<Qt::WindowType> f2);
+QFlags<Qt::AlignmentFlag> operator|(Qt::AlignmentFlag f1, QFlags<Qt::AlignmentFlag> f2);
+QFlags<Qt::ImageConversionFlag> operator|(Qt::ImageConversionFlag f1, QFlags<Qt::ImageConversionFlag> f2);
+QFlags<Qt::DockWidgetArea> operator|(Qt::DockWidgetArea f1, QFlags<Qt::DockWidgetArea> f2);
+QFlags<Qt::ToolBarArea> operator|(Qt::ToolBarArea f1, QFlags<Qt::ToolBarArea> f2);
+QFlags<Qt::WindowState> operator|(Qt::WindowState f1, QFlags<Qt::WindowState> f2);
+QFlags<Qt::DropAction> operator|(Qt::DropAction f1, QFlags<Qt::DropAction> f2);
+QFlags<Qt::ItemFlag> operator|(Qt::ItemFlag f1, QFlags<Qt::ItemFlag> f2);
+QFlags<Qt::MatchFlag> operator|(Qt::MatchFlag f1, QFlags<Qt::MatchFlag> f2);
+QFlags<Qt::TextInteractionFlag> operator|(Qt::TextInteractionFlag f1, QFlags<Qt::TextInteractionFlag> f2);
+QFlags<Qt::InputMethodHint> operator|(Qt::InputMethodHint f1, QFlags<Qt::InputMethodHint> f2);
+QFlags<Qt::TouchPointState> operator|(Qt::TouchPointState f1, QFlags<Qt::TouchPointState> f2);
+QFlags<Qt::GestureFlag> operator|(Qt::GestureFlag f1, QFlags<Qt::GestureFlag> f2);
+QFlags<Qt::ScreenOrientation> operator|(Qt::ScreenOrientation f1, QFlags<Qt::ScreenOrientation> f2);
+QFlags<Qt::InputMethodQuery> operator|(Qt::InputMethodQuery f1, QFlags<Qt::InputMethodQuery> f2);
+%If (Qt_5_3_0 -)
+QFlags<Qt::Edge> operator|(Qt::Edge f1, QFlags<Qt::Edge> f2);
+%End
+%If (Qt_5_3_0 -)
+QFlags<Qt::MouseEventFlag> operator|(Qt::MouseEventFlag f1, QFlags<Qt::MouseEventFlag> f2);
+%End
diff --git a/sip/QtCore/qnumeric.sip b/sip/QtCore/qnumeric.sip
new file mode 100644
index 0000000..d738498
--- /dev/null
+++ b/sip/QtCore/qnumeric.sip
@@ -0,0 +1,35 @@
+// qnumeric.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qnumeric.h>
+%End
+
+bool qIsInf(double d);
+bool qIsFinite(double d);
+bool qIsNaN(double d);
+double qInf();
+double qSNaN();
+double qQNaN();
+%If (Qt_5_3_0 -)
+quint64 qFloatDistance(double a, double b);
+%End
diff --git a/sip/QtCore/qobject.sip b/sip/QtCore/qobject.sip
new file mode 100644
index 0000000..021148c
--- /dev/null
+++ b/sip/QtCore/qobject.sip
@@ -0,0 +1,719 @@
+// qobject.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+typedef QList<QObject*> QObjectList;
+
+class QObject /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qobject.h>
+%End
+
+%TypeCode
+// This is needed by the tr() handwritten implementation.
+#include <qcoreapplication.h>
+
+
+// These are the helper functions for QObject::findChild() and
+// QObject::findChildren.
+
+// Wrap the given type in a 1-tuple.
+static PyObject *qtcore_type_to_tuple(PyObject *type)
+{
+    PyObject *tuple = PyTuple_New(1);
+
+    if (tuple)
+    {
+        Py_INCREF(type);
+        PyTuple_SET_ITEM(tuple, 0, type);
+    }
+
+    return tuple;
+}
+
+
+// Check all elements of a given tuple are type objects and return a new
+// reference to the tuple if so.
+static PyObject *qtcore_check_tuple_types(PyObject *types)
+{
+    for (SIP_SSIZE_T i = 0; i < PyTuple_GET_SIZE(types); ++i)
+        if (!PyObject_TypeCheck(PyTuple_GET_ITEM(types, i), &PyType_Type))
+        {
+            PyErr_SetString(PyExc_TypeError,
+                    "all elements of the types argument must be type objects");
+            return 0;
+        }
+
+    Py_INCREF(types);
+    return types;
+}
+
+
+// Do the main work of finding a child.
+static PyObject *qtcore_do_find_child(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options)
+{
+    const QObjectList &children = parent->children();
+    int i;
+
+    for (i = 0; i < children.size(); ++i)
+    {
+        QObject *obj = children.at(i);
+        PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0);
+
+        if (!pyo)
+            return 0;
+
+        if (name.isNull() || obj->objectName() == name)
+            for (SIP_SSIZE_T t = 0; t < PyTuple_GET_SIZE(types); ++t)
+                if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GET_ITEM(types, t)))
+                    return pyo;
+
+        Py_DECREF(pyo);
+    }
+
+    if (options == Qt::FindChildrenRecursively)
+        for (i = 0; i < children.size(); ++i)
+        {
+            PyObject *pyo = qtcore_do_find_child(children.at(i), types, name, options);
+
+            if (pyo != Py_None)
+                return pyo;
+
+            Py_DECREF(pyo);
+        }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+// Find a child that is one of a number of types and with an optional name.
+static PyObject *qtcore_FindChild(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options)
+{
+    // Check that the types checking was successful.
+    if (!types)
+        return 0;
+
+    PyObject *child = qtcore_do_find_child(parent, types, name, options);
+
+    Py_DECREF(types);
+
+    return child;
+}
+
+
+// Do the main work of finding the children with a string name.
+static bool qtcore_do_find_children(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options, PyObject *list)
+{
+    const QObjectList &children = parent->children();
+    int i;
+
+    for (i = 0; i < children.size(); ++i)
+    {
+        QObject *obj = children.at(i);
+        PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0);
+
+        if (!pyo)
+            return false;
+
+        if (name.isNull() || obj->objectName() == name)
+            for (SIP_SSIZE_T t = 0; t < PyTuple_GET_SIZE(types); ++t)
+                if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GET_ITEM(types, t)))
+                    if (PyList_Append(list, pyo) < 0)
+                    {
+                        Py_DECREF(pyo);
+                        return false;
+                    }
+
+        Py_DECREF(pyo);
+
+        if (options == Qt::FindChildrenRecursively)
+        {
+            bool ok = qtcore_do_find_children(obj, types, name, options, list);
+
+            if (!ok)
+                return false;
+        }
+    }
+
+    return true;
+}
+
+
+// Find a child that is one of a number of types and with an optional string
+// name.
+static PyObject *qtcore_FindChildren(const QObject *parent, PyObject *types, const QString &name, Qt::FindChildOptions options)
+{
+    // Check that the types checking was successful.
+    if (!types)
+        return 0;
+
+    PyObject *list = PyList_New(0);
+
+    if (list)
+        if (!qtcore_do_find_children(parent, types, name, options, list))
+            Py_DECREF(list);
+
+    Py_DECREF(types);
+
+    return list;
+}
+
+
+// Do the main work of finding the children with a QRegExp name.
+static bool qtcore_do_find_children(const QObject *parent, PyObject *types, const QRegExp &re, Qt::FindChildOptions options, PyObject *list)
+{
+    const QObjectList &children = parent->children();
+    int i;
+
+    for (i = 0; i < children.size(); ++i)
+    {
+        QObject *obj = children.at(i);
+        PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0);
+
+        if (!pyo)
+            return false;
+
+        if (re.indexIn(obj->objectName()) >= 0)
+            for (SIP_SSIZE_T t = 0; t < PyTuple_GET_SIZE(types); ++t)
+                if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GET_ITEM(types, t)))
+                    if (PyList_Append(list, pyo) < 0)
+                    {
+                        Py_DECREF(pyo);
+                        return false;
+                    }
+
+        Py_DECREF(pyo);
+
+        if (options == Qt::FindChildrenRecursively)
+        {
+            bool ok = qtcore_do_find_children(obj, types, re, options, list);
+
+            if (!ok)
+                return false;
+        }
+    }
+
+    return true;
+}
+
+
+// Find a child that is one of a number of types and with an optional QRegExp
+// name.
+static PyObject *qtcore_FindChildren(const QObject *parent, PyObject *types, const QRegExp &re, Qt::FindChildOptions options)
+{
+    // Check that the types checking was successful.
+    if (!types)
+        return 0;
+
+    PyObject *list = PyList_New(0);
+
+    if (list)
+        if (!qtcore_do_find_children(parent, types, re, options, list))
+            Py_DECREF(list);
+
+    Py_DECREF(types);
+
+    return list;
+}
+
+
+// Do the main work of finding the children with a QRegularExpression name.
+static bool qtcore_do_find_children(const QObject *parent, PyObject *types, const QRegularExpression &re, Qt::FindChildOptions options, PyObject *list)
+{
+    const QObjectList &children = parent->children();
+    int i;
+
+    for (i = 0; i < children.size(); ++i)
+    {
+        QObject *obj = children.at(i);
+        PyObject *pyo = sipConvertFromType(obj, sipType_QObject, 0);
+
+        if (!pyo)
+            return false;
+
+        QRegularExpressionMatch m = re.match(obj->objectName());
+        
+        if (m.hasMatch())
+            for (SIP_SSIZE_T t = 0; t < PyTuple_GET_SIZE(types); ++t)
+                if (PyType_IsSubtype(Py_TYPE(pyo), (PyTypeObject *)PyTuple_GET_ITEM(types, t)))
+                    if (PyList_Append(list, pyo) < 0)
+                    {
+                        Py_DECREF(pyo);
+                        return false;
+                    }
+
+        Py_DECREF(pyo);
+
+        if (options == Qt::FindChildrenRecursively)
+        {
+            bool ok = qtcore_do_find_children(obj, types, re, options, list);
+
+            if (!ok)
+                return false;
+        }
+    }
+
+    return true;
+}
+
+
+// Find a child that is one of a number of types and with an optional
+// QRegularExpression name.
+static PyObject *qtcore_FindChildren(const QObject *parent, PyObject *types, const QRegularExpression &re, Qt::FindChildOptions options)
+{
+    // Check that the types checking was successful.
+    if (!types)
+        return 0;
+
+    PyObject *list = PyList_New(0);
+
+    if (list)
+        if (!qtcore_do_find_children(parent, types, re, options, list))
+            Py_DECREF(list);
+
+    Py_DECREF(types);
+
+    return list;
+}
+%End
+
+%FinalisationCode
+    return qpycore_qobject_finalisation(sipSelf, sipCpp, sipKwds, sipUnused);
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QMimeData, &sipType_QMimeData, -1, 1},
+        {sipName_QAbstractAnimation, &sipType_QAbstractAnimation, 25, 2},
+        {sipName_QThread, &sipType_QThread, -1, 3},
+        {sipName_QAbstractEventDispatcher, &sipType_QAbstractEventDispatcher, -1, 4},
+        {sipName_QSocketNotifier, &sipType_QSocketNotifier, -1, 5},
+        {sipName_QAbstractItemModel, &sipType_QAbstractItemModel, 31, 6},
+        {sipName_QCoreApplication, &sipType_QCoreApplication, -1, 7},
+        {sipName_QTimeLine, &sipType_QTimeLine, -1, 8},
+        {sipName_QFileSystemWatcher, &sipType_QFileSystemWatcher, -1, 9},
+        {sipName_QPluginLoader, &sipType_QPluginLoader, -1, 10},
+        {sipName_QTimer, &sipType_QTimer, -1, 11},
+        {sipName_QSettings, &sipType_QSettings, -1, 12},
+        {sipName_QIODevice, &sipType_QIODevice, 37, 13},
+        {sipName_QItemSelectionModel, &sipType_QItemSelectionModel, -1, 14},
+        {sipName_QSharedMemory, &sipType_QSharedMemory, -1, 15},
+    #if QT_VERSION >= 0x050200
+        {sipName_QFileSelector, &sipType_QFileSelector, -1, 16},
+    #else
+        {0, 0, -1, 16},
+    #endif
+        {sipName_QObjectCleanupHandler, &sipType_QObjectCleanupHandler, -1, 17},
+        {sipName_QTranslator, &sipType_QTranslator, -1, 18},
+        {sipName_QAbstractState, &sipType_QAbstractState, 43, 19},
+        {sipName_QLibrary, &sipType_QLibrary, -1, 20},
+        {sipName_QAbstractTransition, &sipType_QAbstractTransition, 47, 21},
+        {sipName_QEventLoop, &sipType_QEventLoop, -1, 22},
+        {sipName_QThreadPool, &sipType_QThreadPool, -1, 23},
+    #if defined(Q_OS_WIN)
+        {sipName_QWinEventNotifier, &sipType_QWinEventNotifier, -1, 24},
+    #else
+        {0, 0, -1, 24},
+    #endif
+        {sipName_QSignalMapper, &sipType_QSignalMapper, -1, -1},
+        {sipName_QPauseAnimation, &sipType_QPauseAnimation, -1, 26},
+        {sipName_QAnimationGroup, &sipType_QAnimationGroup, 28, 27},
+        {sipName_QVariantAnimation, &sipType_QVariantAnimation, 30, -1},
+        {sipName_QParallelAnimationGroup, &sipType_QParallelAnimationGroup, -1, 29},
+        {sipName_QSequentialAnimationGroup, &sipType_QSequentialAnimationGroup, -1, -1},
+        {sipName_QPropertyAnimation, &sipType_QPropertyAnimation, -1, -1},
+        {sipName_QAbstractListModel, &sipType_QAbstractListModel, 34, 32},
+        {sipName_QAbstractProxyModel, &sipType_QAbstractProxyModel, 35, 33},
+        {sipName_QAbstractTableModel, &sipType_QAbstractTableModel, -1, -1},
+        {sipName_QStringListModel, &sipType_QStringListModel, -1, -1},
+        {sipName_QSortFilterProxyModel, &sipType_QSortFilterProxyModel, -1, 36},
+        {sipName_QIdentityProxyModel, &sipType_QIdentityProxyModel, -1, -1},
+        {sipName_QBuffer, &sipType_QBuffer, -1, 38},
+        {sipName_QProcess, &sipType_QProcess, -1, 39},
+        {sipName_QFileDevice, &sipType_QFileDevice, 40, -1},
+    #if QT_VERSION >= 0x050100
+        {sipName_QSaveFile, &sipType_QSaveFile, -1, 41},
+    #else
+        {0, 0, -1, 41},
+    #endif
+        {sipName_QFile, &sipType_QFile, 42, -1},
+        {sipName_QTemporaryFile, &sipType_QTemporaryFile, -1, -1},
+        {sipName_QState, &sipType_QState, 46, 44},
+        {sipName_QHistoryState, &sipType_QHistoryState, -1, 45},
+        {sipName_QFinalState, &sipType_QFinalState, -1, -1},
+        {sipName_QStateMachine, &sipType_QStateMachine, -1, -1},
+        {sipName_QSignalTransition, &sipType_QSignalTransition, -1, 48},
+        {sipName_QEventTransition, &sipType_QEventTransition, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+%GCTraverseCode
+    // Traverse any saved slots we might be connected to.
+    sipRes = qpycore_visitSlotProxies(sipCpp, sipVisit, sipArg);
+%End
+
+%GCClearCode
+    // Clear any saved slots we might be connected to.
+    sipRes = qpycore_clearSlotProxies(sipCpp);
+%End
+
+public:
+    static const QMetaObject staticMetaObject {
+%GetCode
+        sipPy = qpycore_qobject_staticmetaobject(sipPyType);
+%End
+
+    };
+    const QMetaObject *metaObject() const;
+    explicit QObject(QObject *parent /TransferThis/ = 0);
+    virtual ~QObject();
+    void pyqtConfigure(SIP_PYOBJECT) /NoArgParser/;
+%Docstring
+QObject.pyqtConfigure(...)
+
+Each keyword argument is either the name of a Qt property or a Qt signal.
+For properties the property is set to the given value which should be of an
+appropriate type.
+For signals the signal is connected to the given value which should be a
+callable.
+%End
+
+%MethodCode
+        return qpycore_pyqtconfigure(sipSelf, sipArgs, sipKwds);
+%End
+
+    SIP_PYOBJECT __getattr__(const char *name) const;
+%MethodCode
+        sipRes = qpycore_qobject_getattr(sipCpp, sipSelf, a0);
+%End
+
+    virtual bool event(QEvent *);
+    virtual bool eventFilter(QObject *, QEvent *);
+    QString tr(const char *sourceText /Encoding="UTF-8"/, const char *disambiguation = 0, int n = -1) const;
+%MethodCode
+        // Note that tr() is really a static method.  We pretend it isn't so we can use
+        // self to get hold of the class name.
+        
+        sipRes = new QString(QCoreApplication::translate(Py_TYPE(sipSelf)->tp_name, a0, a1, a2));
+%End
+
+    SIP_PYOBJECT findChild(SIP_PYTYPE type, const QString &name /DocValue="''"/ = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /DocType="QObject"/;
+%MethodCode
+        sipRes = qtcore_FindChild(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    SIP_PYOBJECT findChild(SIP_PYTUPLE types /DocValue="tuple-of-types"/, const QString &name /DocValue="''"/ = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /DocType="QObject"/;
+%MethodCode
+        sipRes = qtcore_FindChild(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    SIP_PYLIST findChildren(SIP_PYTYPE type, const QString &name /DocValue="''"/ = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /DocType="list-of-QObject"/;
+%MethodCode
+        sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    SIP_PYLIST findChildren(SIP_PYTUPLE types /DocValue="tuple-of-types"/, const QString &name /DocValue="''"/ = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /DocType="list-of-QObject"/;
+%MethodCode
+        sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    SIP_PYLIST findChildren(SIP_PYTYPE type, const QRegExp &regExp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /DocType="list-of-QObject"/;
+%MethodCode
+        sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    SIP_PYLIST findChildren(SIP_PYTUPLE types /DocValue="tuple-of-types"/, const QRegExp &regExp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /DocType="list-of-QObject"/;
+%MethodCode
+        sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    SIP_PYLIST findChildren(SIP_PYTYPE type, const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /DocType="list-of-QObject"/;
+%MethodCode
+        sipRes = qtcore_FindChildren(sipCpp, qtcore_type_to_tuple(a0), *a1, *a2);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    SIP_PYLIST findChildren(SIP_PYTUPLE types /DocValue="tuple-of-types"/, const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const /DocType="list-of-QObject"/;
+%MethodCode
+        sipRes = qtcore_FindChildren(sipCpp, qtcore_check_tuple_types(a0), *a1, *a2);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    QString objectName() const;
+    void setObjectName(const QString &name);
+    bool isWidgetType() const;
+    bool isWindowType() const;
+    bool signalsBlocked() const;
+    bool blockSignals(bool b);
+    QThread *thread() const;
+    void moveToThread(QThread *thread);
+    int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);
+    void killTimer(int id);
+    const QObjectList &children() const;
+    void setParent(QObject * /TransferThis/);
+    void installEventFilter(QObject *);
+    void removeEventFilter(QObject *);
+    void dumpObjectInfo();
+    void dumpObjectTree();
+    QList<QByteArray> dynamicPropertyNames() const;
+    bool setProperty(const char *name, const QVariant &value);
+    QVariant property(const char *name) const;
+
+signals:
+    void destroyed(QObject *object = 0);
+    void objectNameChanged(const QString &objectName);
+
+public:
+    QObject *parent() const;
+    bool inherits(const char *classname) const;
+
+public slots:
+    void deleteLater() /TransferThis/;
+
+protected:
+    QObject *sender() const /ReleaseGIL/;
+%MethodCode
+        // sender() must be called without the GIL to avoid possible deadlocks between
+        // the GIL and Qt's internal thread data mutex.
+        
+        Py_BEGIN_ALLOW_THREADS
+        
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+        sipRes = sipCpp->sender();
+        #else
+        sipRes = sipCpp->sipProtect_sender();
+        #endif
+        
+        Py_END_ALLOW_THREADS
+        
+        if (!sipRes)
+        {
+            typedef QObject *(*qtcore_qobject_sender_t)();
+        
+            static qtcore_qobject_sender_t qtcore_qobject_sender = 0;
+        
+            if (!qtcore_qobject_sender)
+                qtcore_qobject_sender = (qtcore_qobject_sender_t)sipImportSymbol("qtcore_qobject_sender");
+        
+            if (qtcore_qobject_sender)
+                sipRes = qtcore_qobject_sender();
+        }
+%End
+
+    int receivers(SIP_PYOBJECT signal /DocType="signal"/) const [int (const char *signal)];
+%MethodCode
+        // We need to handle the signal object.  Import the helper if it hasn't already
+        // been done.
+        typedef sipErrorState (*pyqt5_get_signal_signature_t)(PyObject *, const QObject *, const QByteArray &);
+        
+        static pyqt5_get_signal_signature_t pyqt5_get_signal_signature = 0;
+        
+        if (!pyqt5_get_signal_signature)
+            pyqt5_get_signal_signature = (pyqt5_get_signal_signature_t)sipImportSymbol("pyqt5_get_signal_signature");
+        
+        if (pyqt5_get_signal_signature)
+        {
+            QByteArray signal_signature;
+            
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            if ((sipError = pyqt5_get_signal_signature(a0, sipCpp, signal_signature)) == sipErrorNone)
+            {
+                sipRes = sipCpp->receivers(signal_signature.constData());
+            }
+        #else
+            if ((sipError = pyqt5_get_signal_signature(a0, static_cast<const QObject *>(sipCpp), signal_signature)) == sipErrorNone)
+            {
+                sipRes = sipCpp->sipProtect_receivers(signal_signature.constData());
+            }
+        #endif
+            else if (sipError == sipErrorContinue)
+            {
+                sipError = sipBadCallableArg(0, a0);
+            }
+        }
+%End
+
+    virtual void timerEvent(QTimerEvent *);
+    virtual void childEvent(QChildEvent *);
+    virtual void customEvent(QEvent *);
+    virtual void connectNotify(const QMetaMethod &signal);
+    virtual void disconnectNotify(const QMetaMethod &signal);
+    int senderSignalIndex() const;
+    bool isSignalConnected(const QMetaMethod &signal) const;
+
+public:
+    SIP_PYOBJECT disconnect() const /DocType=""/;
+%MethodCode
+        sipRes = qpycore_qobject_disconnect(sipCpp);
+%End
+
+private:
+    QObject(const QObject &);
+};
+
+SIP_PYOBJECT Q_CLASSINFO(const char *name, const char *value) /DocType=""/;
+%MethodCode
+    sipRes = qpycore_ClassInfo(a0, a1);
+%End
+
+SIP_PYOBJECT Q_ENUMS(...) /DocType=""/;
+%MethodCode
+    sipRes = qpycore_Enums(a0);
+%End
+
+SIP_PYOBJECT Q_FLAGS(...) /DocType=""/;
+%MethodCode
+    sipRes = qpycore_Flags(a0);
+%End
+
+SIP_PYOBJECT QT_TR_NOOP(SIP_PYOBJECT /DocType="str"/) /DocType="str"/;
+%MethodCode
+    Py_INCREF(a0);
+    sipRes = a0;
+%End
+
+SIP_PYOBJECT QT_TR_NOOP_UTF8(SIP_PYOBJECT /DocType="str"/) /DocType="str"/;
+%MethodCode
+    Py_INCREF(a0);
+    sipRes = a0;
+%End
+
+SIP_PYOBJECT QT_TRANSLATE_NOOP(SIP_PYOBJECT /DocType="str"/, SIP_PYOBJECT /DocType="str"/) /DocType="str"/;
+%MethodCode
+    Py_INCREF(a1);
+    sipRes = a1;
+%End
+
+SIP_PYOBJECT pyqtSlot(const char *signature, const char *name = 0, const char *result = 0) /NoArgParser/;
+%Docstring
+ at pyqtSlot(*types, str name=None, str result=None)
+
+This is a decorator applied to Python methods of a QObject that marks them
+as Qt slots.
+The non-keyword arguments are the types of the slot arguments and each may
+be a Python type object or a string specifying a C++ type.
+name is the name of the slot and defaults to the name of the method.
+result is type of the value returned by the slot.
+%End
+
+%MethodCode
+    return qpycore_pyqtslot(sipArgs, sipKwds);
+%End
+
+%If (Qt_5_3_0 -)
+
+class QSignalBlocker
+{
+%TypeHeaderCode
+#include <qobject.h>
+%End
+
+public:
+    explicit QSignalBlocker(QObject *o);
+    ~QSignalBlocker();
+    void reblock();
+    void unblock();
+    SIP_PYOBJECT __enter__();
+%MethodCode
+        // Just return a reference to self.
+        sipRes = sipSelf;
+        Py_INCREF(sipRes);
+%End
+
+    void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback);
+%MethodCode
+        sipCpp->unblock();
+%End
+
+private:
+    QSignalBlocker(const QSignalBlocker &);
+};
+
+%End
+
+%ModuleHeaderCode
+#include "qpycore_api.h"
+%End
+
+%ModuleCode
+// Disable the (supposedly) compulsory parts of the Qt support API.
+#define sipQtCreateUniversalSlot    0
+#define sipQtDestroyUniversalSlot   0
+#define sipQtFindSlot               0
+#define sipQtConnect                0
+#define sipQtDisconnect             0
+#define sipQtSameSignalSlotName     0
+#define sipQtFindSipslot            0
+%End
+
+%InitialisationCode
+qpycore_init();
+%End
+
+%PostInitialisationCode
+qpycore_post_init(sipModuleDict);
+%End
diff --git a/sip/QtCore/qobjectcleanuphandler.sip b/sip/QtCore/qobjectcleanuphandler.sip
new file mode 100644
index 0000000..87e6336
--- /dev/null
+++ b/sip/QtCore/qobjectcleanuphandler.sip
@@ -0,0 +1,36 @@
+// qobjectcleanuphandler.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QObjectCleanupHandler : QObject
+{
+%TypeHeaderCode
+#include <qobjectcleanuphandler.h>
+%End
+
+public:
+    QObjectCleanupHandler();
+    virtual ~QObjectCleanupHandler();
+    QObject *add(QObject *object);
+    void remove(QObject *object);
+    bool isEmpty() const;
+    void clear();
+};
diff --git a/sip/QtCore/qobjectdefs.sip b/sip/QtCore/qobjectdefs.sip
new file mode 100644
index 0000000..b8dc186
--- /dev/null
+++ b/sip/QtCore/qobjectdefs.sip
@@ -0,0 +1,170 @@
+// qobjectdefs.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+struct QMetaObject
+{
+%TypeHeaderCode
+#include <qobjectdefs.h>
+%End
+
+%TypeCode
+// Raise an exception when QMetaObject::invokeMethod() returns false.
+static void qtcore_invokeMethod_exception()
+{
+    PyErr_SetString(PyExc_RuntimeError, "QMetaObject.invokeMethod() call failed");
+}
+%End
+
+    const char *className() const;
+    const QMetaObject *superClass() const;
+    QMetaProperty userProperty() const;
+    int methodOffset() const;
+    int enumeratorOffset() const;
+    int propertyOffset() const;
+    int classInfoOffset() const;
+    int methodCount() const;
+    int enumeratorCount() const;
+    int propertyCount() const;
+    int classInfoCount() const;
+    int indexOfMethod(const char *method) const;
+    int indexOfSignal(const char *signal) const;
+    int indexOfSlot(const char *slot) const;
+    int indexOfEnumerator(const char *name) const;
+    int indexOfProperty(const char *name) const;
+    int indexOfClassInfo(const char *name) const;
+    QMetaMethod method(int index) const;
+    QMetaEnum enumerator(int index) const;
+    QMetaProperty property(int index) const;
+    QMetaClassInfo classInfo(int index) const;
+    static bool checkConnectArgs(const char *signal, const char *method);
+    static void connectSlotsByName(QObject *o /GetWrapper/);
+%MethodCode
+        qpycore_qmetaobject_connectslotsbyname(a0, a0Wrapper);
+%End
+
+    static QByteArray normalizedSignature(const char *method);
+    static QByteArray normalizedType(const char *type);
+    static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericReturnArgument ret /GetWrapper/, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument( [...]
+%MethodCode
+        // Raise an exception if the call failed.
+        bool ok;
+        
+        Py_BEGIN_ALLOW_THREADS
+        ok = QMetaObject::invokeMethod(a0,a1,a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11,*a12,*a13);
+        Py_END_ALLOW_THREADS
+        
+        if (ok)
+            sipRes = qpycore_ReturnValue(a3Wrapper);
+        else
+            qtcore_invokeMethod_exception();
+%End
+
+    static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, QGenericReturnArgument ret /GetWrapper/, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument [...]
+%MethodCode
+        // Raise an exception if the call failed.
+        bool ok;
+        
+        Py_BEGIN_ALLOW_THREADS
+        ok = QMetaObject::invokeMethod(a0,a1,*a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11,*a12);
+        Py_END_ALLOW_THREADS
+        
+        if (ok)
+            sipRes = qpycore_ReturnValue(a2Wrapper);
+        else
+            qtcore_invokeMethod_exception();
+%End
+
+    static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, Qt::ConnectionType type, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGener [...]
+%MethodCode
+        // Raise an exception if the call failed.
+        bool ok;
+        
+        Py_BEGIN_ALLOW_THREADS
+        ok = QMetaObject::invokeMethod(a0,a1,a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11,*a12);
+        Py_END_ALLOW_THREADS
+        
+        if (ok)
+        {
+            Py_INCREF(Py_None);
+            sipRes = Py_None;
+        }
+        else
+            qtcore_invokeMethod_exception();
+%End
+
+    static SIP_PYOBJECT invokeMethod(QObject *obj, const char *member, QGenericArgument value0 = QGenericArgument(0u, 0u), QGenericArgument value1 = QGenericArgument(0u, 0u), QGenericArgument value2 = QGenericArgument(0u, 0u), QGenericArgument value3 = QGenericArgument(0u, 0u), QGenericArgument value4 = QGenericArgument(0u, 0u), QGenericArgument value5 = QGenericArgument(0u, 0u), QGenericArgument value6 = QGenericArgument(0u, 0u), QGenericArgument value7 = QGenericArgument(0u, 0u), QGene [...]
+%MethodCode
+        // Raise an exception if the call failed.
+        bool ok;
+        
+        Py_BEGIN_ALLOW_THREADS
+        ok = QMetaObject::invokeMethod(a0,a1,*a2,*a3,*a4,*a5,*a6,*a7,*a8,*a9,*a10,*a11);
+        Py_END_ALLOW_THREADS
+        
+        if (ok)
+        {
+            Py_INCREF(Py_None);
+            sipRes = Py_None;
+        }
+        else
+            qtcore_invokeMethod_exception();
+%End
+
+    int constructorCount() const;
+    int indexOfConstructor(const char *constructor) const;
+    QMetaMethod constructor(int index) const;
+    static bool checkConnectArgs(const QMetaMethod &signal, const QMetaMethod &method);
+};
+
+// The support for Q_ARG(), Q_RETURN_ARG() and supporting classes.
+class QGenericArgument /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qobjectdefs.h>
+%End
+
+public:
+    ~QGenericArgument();
+};
+
+
+SIP_PYOBJECT Q_ARG(SIP_PYOBJECT type, SIP_PYOBJECT data) /DocType="QGenericArgument"/;
+%MethodCode
+    sipRes = qpycore_ArgumentFactory(a0, a1);
+%End
+
+
+class QGenericReturnArgument /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qobjectdefs.h>
+%End
+
+public:
+    ~QGenericReturnArgument();
+};
+
+
+SIP_PYOBJECT Q_RETURN_ARG(SIP_PYOBJECT type) /DocType="QGenericReturnArgument"/;
+%MethodCode
+    sipRes = qpycore_ReturnFactory(a0);
+%End
diff --git a/sip/QtCore/qparallelanimationgroup.sip b/sip/QtCore/qparallelanimationgroup.sip
new file mode 100644
index 0000000..9ae7111
--- /dev/null
+++ b/sip/QtCore/qparallelanimationgroup.sip
@@ -0,0 +1,42 @@
+// qparallelanimationgroup.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QParallelAnimationGroup : QAnimationGroup
+{
+%TypeHeaderCode
+#include <qparallelanimationgroup.h>
+%End
+
+public:
+    QParallelAnimationGroup(QObject *parent /TransferThis/ = 0);
+    virtual ~QParallelAnimationGroup();
+    virtual int duration() const;
+
+protected:
+    virtual bool event(QEvent *event);
+    virtual void updateCurrentTime(int currentTime);
+    virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
+    virtual void updateDirection(QAbstractAnimation::Direction direction);
+
+private:
+    QParallelAnimationGroup(const QParallelAnimationGroup &);
+};
diff --git a/sip/QtCore/qpauseanimation.sip b/sip/QtCore/qpauseanimation.sip
new file mode 100644
index 0000000..5c5e6bb
--- /dev/null
+++ b/sip/QtCore/qpauseanimation.sip
@@ -0,0 +1,42 @@
+// qpauseanimation.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPauseAnimation : QAbstractAnimation
+{
+%TypeHeaderCode
+#include <qpauseanimation.h>
+%End
+
+public:
+    QPauseAnimation(QObject *parent /TransferThis/ = 0);
+    QPauseAnimation(int msecs, QObject *parent /TransferThis/ = 0);
+    virtual ~QPauseAnimation();
+    virtual int duration() const;
+    void setDuration(int msecs);
+
+protected:
+    virtual bool event(QEvent *e);
+    virtual void updateCurrentTime(int);
+
+private:
+    QPauseAnimation(const QPauseAnimation &);
+};
diff --git a/sip/QtCore/qpluginloader.sip b/sip/QtCore/qpluginloader.sip
new file mode 100644
index 0000000..a5a7d6a
--- /dev/null
+++ b/sip/QtCore/qpluginloader.sip
@@ -0,0 +1,46 @@
+// qpluginloader.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPluginLoader : QObject
+{
+%TypeHeaderCode
+#include <qpluginloader.h>
+%End
+
+public:
+    explicit QPluginLoader(QObject *parent /TransferThis/ = 0);
+    QPluginLoader(const QString &fileName, QObject *parent /TransferThis/ = 0);
+    virtual ~QPluginLoader();
+    QObject *instance();
+    static QObjectList staticInstances();
+    bool load();
+    bool unload();
+    bool isLoaded() const;
+    void setFileName(const QString &fileName);
+    QString fileName() const;
+    QString errorString() const;
+    void setLoadHints(QLibrary::LoadHints loadHints);
+    QLibrary::LoadHints loadHints() const;
+
+private:
+    QPluginLoader(const QPluginLoader &);
+};
diff --git a/sip/QtCore/qpoint.sip b/sip/QtCore/qpoint.sip
new file mode 100644
index 0000000..a07e6ba
--- /dev/null
+++ b/sip/QtCore/qpoint.sip
@@ -0,0 +1,207 @@
+// qpoint.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qpoint.h>
+%End
+
+class QPoint
+{
+%TypeHeaderCode
+#include <qpoint.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"ii", sipCpp->x(), sipCpp->y());
+%End
+
+public:
+    int manhattanLength() const;
+    QPoint();
+    QPoint(int xpos, int ypos);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QPoint()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QPoint()");
+        #endif
+        }
+        else
+        {
+            sipRes =
+        #if PY_MAJOR_VERSION >= 3
+                PyUnicode_FromFormat
+        #else
+                PyString_FromFormat
+        #endif
+                    ("PyQt5.QtCore.QPoint(%i, %i)", sipCpp->x(), sipCpp->y());
+        }
+%End
+
+    bool isNull() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = !sipCpp->isNull();
+%End
+
+    int x() const;
+    int y() const;
+    void setX(int xpos);
+    void setY(int ypos);
+    QPoint &operator+=(const QPoint &p);
+    QPoint &operator-=(const QPoint &p);
+    QPoint &operator*=(int c /Constrained/);
+    QPoint &operator*=(double c);
+    QPoint &operator/=(qreal c);
+%If (Qt_5_1_0 -)
+    static int dotProduct(const QPoint &p1, const QPoint &p2);
+%End
+};
+
+QDataStream &operator<<(QDataStream &, const QPoint & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QPoint & /Constrained/) /ReleaseGIL/;
+bool operator==(const QPoint &p1, const QPoint &p2);
+bool operator!=(const QPoint &p1, const QPoint &p2);
+const QPoint operator+(const QPoint &p1, const QPoint &p2);
+const QPoint operator-(const QPoint &p1, const QPoint &p2);
+const QPoint operator*(const QPoint &p, int c /Constrained/);
+const QPoint operator*(int c /Constrained/, const QPoint &p);
+const QPoint operator*(const QPoint &p, double c);
+const QPoint operator*(double c, const QPoint &p);
+const QPoint operator-(const QPoint &p);
+const QPoint operator/(const QPoint &p, qreal c);
+
+class QPointF
+{
+%TypeHeaderCode
+#include <qpoint.h>
+%End
+
+%ConvertToTypeCode
+// Allow a QPoint whenever a QPointF is expected.  This is mainly to help source
+// compatibility for Qt5.
+
+if (sipIsErr == NULL)
+    return (sipCanConvertToType(sipPy, sipType_QPointF, SIP_NO_CONVERTORS) ||
+            sipCanConvertToType(sipPy, sipType_QPoint, 0));
+
+if (sipCanConvertToType(sipPy, sipType_QPointF, SIP_NO_CONVERTORS))
+{
+    *sipCppPtr = reinterpret_cast<QPointF *>(sipConvertToType(sipPy, sipType_QPointF, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+    return 0;
+}
+
+int state;
+
+QPoint *pt = reinterpret_cast<QPoint *>(sipConvertToType(sipPy, sipType_QPoint, 0, 0, &state, sipIsErr));
+
+if (*sipIsErr)
+{
+    sipReleaseType(pt, sipType_QPoint, state);
+    return 0;
+}
+
+*sipCppPtr = new QPointF(*pt);
+
+sipReleaseType(pt, sipType_QPoint, state);
+
+return sipGetState(sipTransferObj);
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"dd", sipCpp->x(), sipCpp->y());
+%End
+
+public:
+    QPointF();
+    QPointF(qreal xpos, qreal ypos);
+    QPointF(const QPoint &p);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QPointF()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QPointF()");
+        #endif
+        }
+        else
+        {
+            PyObject *x = PyFloat_FromDouble(sipCpp->x());
+            PyObject *y = PyFloat_FromDouble(sipCpp->y());
+        
+            if (x && y)
+            {
+        #if PY_MAJOR_VERSION >= 3
+                sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QPointF(%R, %R)", x, y);
+        #else
+                sipRes = PyString_FromString("PyQt5.QtCore.QPointF(");
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(x));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(y));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+            }
+        
+            Py_XDECREF(x);
+            Py_XDECREF(y);
+        }
+%End
+
+    bool isNull() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = !sipCpp->isNull();
+%End
+
+    qreal x() const;
+    qreal y() const;
+    void setX(qreal xpos);
+    void setY(qreal ypos);
+    QPointF &operator+=(const QPointF &p);
+    QPointF &operator-=(const QPointF &p);
+    QPointF &operator*=(qreal c);
+    QPointF &operator/=(qreal c);
+    QPoint toPoint() const;
+    qreal manhattanLength() const;
+%If (Qt_5_1_0 -)
+    static qreal dotProduct(const QPointF &p1, const QPointF &p2);
+%End
+};
+
+QDataStream &operator<<(QDataStream &, const QPointF & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QPointF & /Constrained/) /ReleaseGIL/;
+bool operator==(const QPointF &p1, const QPointF &p2);
+bool operator!=(const QPointF &p1, const QPointF &p2);
+const QPointF operator+(const QPointF &p1, const QPointF &p2);
+const QPointF operator-(const QPointF &p1, const QPointF &p2);
+const QPointF operator*(const QPointF &p, qreal c);
+const QPointF operator*(qreal c, const QPointF &p);
+const QPointF operator-(const QPointF &p);
+const QPointF operator/(const QPointF &p, qreal c);
+const QPoint operator+(const QPoint &p);
+const QPointF operator+(const QPointF &p);
diff --git a/sip/QtCore/qprocess.sip b/sip/QtCore/qprocess.sip
new file mode 100644
index 0000000..83334e8
--- /dev/null
+++ b/sip/QtCore/qprocess.sip
@@ -0,0 +1,240 @@
+// qprocess.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (WS_WIN)
+typedef void *Q_PID;
+%End
+%If (WS_X11 || WS_MACX)
+typedef qint64 Q_PID;
+%End
+
+class QProcess : QIODevice
+{
+%TypeHeaderCode
+#include <qprocess.h>
+%End
+
+public:
+    enum ExitStatus
+    {
+        NormalExit,
+        CrashExit,
+    };
+
+    enum ProcessError
+    {
+        FailedToStart,
+        Crashed,
+        Timedout,
+        ReadError,
+        WriteError,
+        UnknownError,
+    };
+
+    enum ProcessState
+    {
+        NotRunning,
+        Starting,
+        Running,
+    };
+
+    enum ProcessChannel
+    {
+        StandardOutput,
+        StandardError,
+    };
+
+    enum ProcessChannelMode
+    {
+        SeparateChannels,
+        MergedChannels,
+        ForwardedChannels,
+%If (Qt_5_2_0 -)
+        ForwardedOutputChannel,
+%End
+%If (Qt_5_2_0 -)
+        ForwardedErrorChannel,
+%End
+    };
+
+    explicit QProcess(QObject *parent /TransferThis/ = 0);
+    virtual ~QProcess();
+    void start(const QString &program, const QStringList &arguments, QFlags<QIODevice::OpenModeFlag> mode = ReadWrite) /HoldGIL/;
+    void start(const QString &program, QFlags<QIODevice::OpenModeFlag> mode = ReadWrite) /HoldGIL/;
+%If (Qt_5_1_0 -)
+    void start(QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite) /HoldGIL/;
+%End
+    QProcess::ProcessChannel readChannel() const;
+    void setReadChannel(QProcess::ProcessChannel channel);
+    void closeReadChannel(QProcess::ProcessChannel channel);
+    void closeWriteChannel();
+    QString workingDirectory() const;
+    void setWorkingDirectory(const QString &dir);
+    QProcess::ProcessError error() const;
+    QProcess::ProcessState state() const;
+    Q_PID pid() const;
+    bool waitForStarted(int msecs = 30000) /ReleaseGIL/;
+    virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/;
+    virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/;
+    bool waitForFinished(int msecs = 30000) /ReleaseGIL/;
+    QByteArray readAllStandardOutput() /ReleaseGIL/;
+    QByteArray readAllStandardError() /ReleaseGIL/;
+    int exitCode() const;
+    QProcess::ExitStatus exitStatus() const;
+    virtual qint64 bytesAvailable() const;
+    virtual qint64 bytesToWrite() const;
+    virtual bool isSequential() const;
+    virtual bool canReadLine() const;
+    virtual void close();
+    virtual bool atEnd() const;
+    static int execute(const QString &program, const QStringList &arguments) /ReleaseGIL/;
+    static int execute(const QString &program) /ReleaseGIL/;
+    static bool startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory, qint64 *pid = 0);
+    static bool startDetached(const QString &program, const QStringList &arguments);
+    static bool startDetached(const QString &program);
+    static QStringList systemEnvironment();
+    QProcess::ProcessChannelMode processChannelMode() const;
+    void setProcessChannelMode(QProcess::ProcessChannelMode mode);
+    void setStandardInputFile(const QString &fileName);
+    void setStandardOutputFile(const QString &fileName, QFlags<QIODevice::OpenModeFlag> mode = Truncate);
+    void setStandardErrorFile(const QString &fileName, QFlags<QIODevice::OpenModeFlag> mode = Truncate);
+    void setStandardOutputProcess(QProcess *destination);
+
+public slots:
+    void terminate();
+    void kill();
+
+signals:
+    void started();
+    void finished(int exitCode, QProcess::ExitStatus exitStatus);
+    void error(QProcess::ProcessError error);
+    void stateChanged(QProcess::ProcessState state);
+    void readyReadStandardOutput();
+    void readyReadStandardError();
+
+protected:
+    void setProcessState(QProcess::ProcessState state);
+    virtual void setupChildProcess();
+    virtual SIP_PYOBJECT readData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QProcess::readData(s, a0) : sipCpp->readData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/;
+
+public:
+    void setProcessEnvironment(const QProcessEnvironment &environment);
+    QProcessEnvironment processEnvironment() const;
+    QString program() const;
+%If (Qt_5_1_0 -)
+    void setProgram(const QString &program);
+%End
+    QStringList arguments() const;
+%If (Qt_5_1_0 -)
+    void setArguments(const QStringList &arguments);
+%End
+%If (Qt_5_1_0 -)
+    virtual bool open(QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite) /ReleaseGIL/;
+%End
+%If (Qt_5_2_0 -)
+
+    enum InputChannelMode
+    {
+        ManagedInputChannel,
+        ForwardedInputChannel,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+    QProcess::InputChannelMode inputChannelMode() const;
+%End
+%If (Qt_5_2_0 -)
+    void setInputChannelMode(QProcess::InputChannelMode mode);
+%End
+%If (Qt_5_2_0 -)
+    static QString nullDevice();
+%End
+%If (Qt_5_3_0 -)
+    qint64 processId() const;
+%End
+
+private:
+    QProcess(const QProcess &);
+};
+
+class QProcessEnvironment
+{
+%TypeHeaderCode
+#include <qprocess.h>
+%End
+
+public:
+    QProcessEnvironment();
+    QProcessEnvironment(const QProcessEnvironment &other);
+    ~QProcessEnvironment();
+    bool operator==(const QProcessEnvironment &other) const;
+    bool operator!=(const QProcessEnvironment &other) const;
+    bool isEmpty() const;
+    void clear();
+    bool contains(const QString &name) const;
+    void insert(const QString &name, const QString &value);
+    void insert(const QProcessEnvironment &e);
+    void remove(const QString &name);
+    QString value(const QString &name, const QString &defaultValue /DocValue="''"/ = QString()) const;
+    QStringList toStringList() const;
+    static QProcessEnvironment systemEnvironment();
+    QStringList keys() const;
+    void swap(QProcessEnvironment &other);
+};
diff --git a/sip/QtCore/qpropertyanimation.sip b/sip/QtCore/qpropertyanimation.sip
new file mode 100644
index 0000000..8f9b55e
--- /dev/null
+++ b/sip/QtCore/qpropertyanimation.sip
@@ -0,0 +1,45 @@
+// qpropertyanimation.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPropertyAnimation : QVariantAnimation
+{
+%TypeHeaderCode
+#include <qpropertyanimation.h>
+%End
+
+public:
+    QPropertyAnimation(QObject *parent /TransferThis/ = 0);
+    QPropertyAnimation(QObject *target /KeepReference=0/, const QByteArray &propertyName, QObject *parent /TransferThis/ = 0);
+    virtual ~QPropertyAnimation();
+    QObject *targetObject() const;
+    void setTargetObject(QObject *target /KeepReference=0/);
+    QByteArray propertyName() const;
+    void setPropertyName(const QByteArray &propertyName);
+
+protected:
+    virtual bool event(QEvent *event);
+    virtual void updateCurrentValue(const QVariant &value);
+    virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
+
+private:
+    QPropertyAnimation(const QPropertyAnimation &);
+};
diff --git a/sip/QtCore/qpycore_qhash.sip b/sip/QtCore/qpycore_qhash.sip
new file mode 100644
index 0000000..b967227
--- /dev/null
+++ b/sip/QtCore/qpycore_qhash.sip
@@ -0,0 +1,249 @@
+// This is the SIP interface definition for the majority of the QHash based
+// mapped types.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+template<_TYPE1_, _TYPE2_>
+%MappedType QHash<_TYPE1_, _TYPE2_> /DocType="dict-of-_TYPE1_-_TYPE2_"/
+{
+%TypeHeaderCode
+#include <qhash.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *d = PyDict_New();
+
+    if (!d)
+        return 0;
+
+    QHash<_TYPE1_, _TYPE2_>::const_iterator it = sipCpp->constBegin();
+    QHash<_TYPE1_, _TYPE2_>::const_iterator end = sipCpp->constEnd();
+
+    while (it != end)
+    {
+        _TYPE1_ *k = new _TYPE1_(it.key());
+        PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_,
+                sipTransferObj);
+
+        if (!kobj)
+        {
+            delete k;
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        _TYPE2_ *v = new _TYPE2_(it.value());
+        PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE2_,
+                sipTransferObj);
+
+        if (!vobj)
+        {
+            delete v;
+            Py_DECREF(kobj);
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        int rc = PyDict_SetItem(d, kobj, vobj);
+
+        Py_DECREF(vobj);
+        Py_DECREF(kobj);
+
+        if (rc < 0)
+        {
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        ++it;
+    }
+
+    return d;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return PyDict_Check(sipPy);
+
+    QHash<_TYPE1_, _TYPE2_> *qh = new QHash<_TYPE1_, _TYPE2_>;
+
+    SIP_SSIZE_T pos = 0;
+    PyObject *kobj, *vobj;
+ 
+    while (PyDict_Next(sipPy, &pos, &kobj, &vobj))
+    {
+        int kstate;
+        _TYPE1_ *k = reinterpret_cast<_TYPE1_ *>(
+                sipForceConvertToType(kobj, sipType__TYPE1_, sipTransferObj,
+                        SIP_NOT_NONE, &kstate, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a key has type '%s' but '_TYPE1_' is expected",
+                    Py_TYPE(kobj)->tp_name);
+
+            delete qh;
+
+            return 0;
+        }
+
+        int vstate;
+        _TYPE2_ *v = reinterpret_cast<_TYPE2_ *>(
+                sipForceConvertToType(vobj, sipType__TYPE2_, sipTransferObj,
+                        SIP_NOT_NONE, &vstate, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a value has type '%s' but '_TYPE2_' is expected",
+                    Py_TYPE(vobj)->tp_name);
+
+            sipReleaseType(k, sipType__TYPE1_, kstate);
+            delete qh;
+
+            return 0;
+        }
+
+        qh->insert(*k, *v);
+
+        sipReleaseType(v, sipType__TYPE2_, vstate);
+        sipReleaseType(k, sipType__TYPE1_, kstate);
+    }
+ 
+    *sipCppPtr = qh;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+template<int, _TYPE_>
+%MappedType QHash<int, _TYPE_> /DocType="dict-of-int-_TYPE_"/
+{
+%TypeHeaderCode
+#include <qhash.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *d = PyDict_New();
+
+    if (!d)
+        return 0;
+
+    QHash<int, _TYPE_>::const_iterator it = sipCpp->constBegin();
+    QHash<int, _TYPE_>::const_iterator end = sipCpp->constEnd();
+
+    while (it != end)
+    {
+        PyObject *kobj = SIPLong_FromLong(it.key());
+
+        if (!kobj)
+        {
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        _TYPE_ *v = new _TYPE_(it.value());
+        PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE_,
+                sipTransferObj);
+
+        if (!vobj)
+        {
+            delete v;
+            Py_DECREF(kobj);
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        int rc = PyDict_SetItem(d, kobj, vobj);
+
+        Py_DECREF(vobj);
+        Py_DECREF(kobj);
+
+        if (rc < 0)
+        {
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        ++it;
+    }
+
+    return d;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return PyDict_Check(sipPy);
+
+    QHash<int, _TYPE_> *qh = new QHash<int, _TYPE_>;
+
+    SIP_SSIZE_T pos = 0;
+    PyObject *kobj, *vobj;
+ 
+    while (PyDict_Next(sipPy, &pos, &kobj, &vobj))
+    {
+        PyErr_Clear();
+        int k = SIPLong_AsLong(kobj);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a key has type '%s' but 'int' is expected",
+                    Py_TYPE(kobj)->tp_name);
+
+            delete qh;
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        int vstate;
+        _TYPE_ *v = reinterpret_cast<_TYPE_ *>(
+                sipForceConvertToType(vobj, sipType__TYPE_, sipTransferObj,
+                        SIP_NOT_NONE, &vstate, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a value has type '%s' but '_TYPE_' is expected",
+                    Py_TYPE(vobj)->tp_name);
+
+            delete qh;
+
+            return 0;
+        }
+
+        qh->insert(k, *v);
+
+        sipReleaseType(v, sipType__TYPE_, vstate);
+    }
+ 
+    *sipCppPtr = qh;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtCore/qpycore_qlist.sip b/sip/QtCore/qpycore_qlist.sip
new file mode 100644
index 0000000..127d441
--- /dev/null
+++ b/sip/QtCore/qpycore_qlist.sip
@@ -0,0 +1,927 @@
+// This is the SIP interface definition for the majority of the QList based
+// mapped types.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+// Note that when we test the type of an object to see if it can be converted
+// to a collection we only check if it is iterable.  We do not check the
+// types of the contents - we assume we will be able to convert them when
+// requested.  This allows us to raise exceptions specific to an individual
+// object.  This approach doesn't work if there are overloads that can only be
+// distinguished by the types of the template arguments.  Currently there are
+// no such cases in PyQt5.  Note also that we don't consider strings to be
+// iterables.
+
+
+template<_TYPE_>
+%MappedType QList<_TYPE_> /DocType="list-of-_TYPE_"/
+{
+%TypeHeaderCode
+#include <qlist.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        _TYPE_ *t = new _TYPE_(sipCpp->at(i));
+        PyObject *tobj = sipConvertFromNewType(t, sipType__TYPE_,
+                sipTransferObj);
+
+        if (!tobj)
+        {
+            delete t;
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, tobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<_TYPE_> *ql = new QList<_TYPE_>;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        int state;
+        _TYPE_ *t = reinterpret_cast<_TYPE_ *>(
+                sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj,
+                        SIP_NOT_NONE, &state, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but '_TYPE_' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        ql->append(*t);
+
+        sipReleaseType(t, sipType__TYPE_, state);
+        Py_DECREF(itm);
+    }
+ 
+    Py_DECREF(iter);
+
+    *sipCppPtr = ql;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+template<_TYPE_>
+%MappedType QList<_TYPE_ *> /DocType="list-of-_TYPE_"/
+{
+%TypeHeaderCode
+#include <qlist.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        _TYPE_ *t = sipCpp->at(i);
+
+        // The explicit (void *) cast allows _TYPE_ to be const.
+        PyObject *tobj = sipConvertFromType((void *)t, sipType__TYPE_,
+                sipTransferObj);
+
+        if (!tobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, tobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<_TYPE_ *> *ql = new QList<_TYPE_ *>;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        _TYPE_ *t = reinterpret_cast<_TYPE_ *>(
+                sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, 0,
+                        0, sipIsErr));
+ 
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but '_TYPE_' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        ql->append(t);
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+ 
+    *sipCppPtr = ql;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+template<_TYPE1_, _TYPE2_>
+%MappedType QList<QPair<_TYPE1_, _TYPE2_> >
+        /DocType="list-of-tuple-of-_TYPE1_-_TYPE2_"/
+{
+%TypeHeaderCode
+#include <qlist.h>
+#include <qpair.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        const QPair<_TYPE1_, _TYPE2_> &p = sipCpp->at(i);
+        _TYPE1_ *s1 = new _TYPE1_(p.first);
+        _TYPE2_ *s2 = new _TYPE2_(p.second);
+        PyObject *pobj = sipBuildResult(NULL, "(NN)", s1, sipType__TYPE1_,
+                sipTransferObj, s2, sipType__TYPE2_, sipTransferObj);
+
+        if (!pobj)
+        {
+            delete s1;
+            delete s2;
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<QPair<_TYPE1_, _TYPE2_> > *ql = new QList<QPair<_TYPE1_, _TYPE2_> >;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *seq = PyIter_Next(iter);
+
+        if (!seq)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        SIP_SSIZE_T sub_len;
+
+        if (PySequence_Check(seq)
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(seq)
+#endif
+                && !PyUnicode_Check(seq))
+            sub_len = PySequence_Size(seq);
+        else
+            sub_len = -1;
+
+        if (sub_len != 2)
+        {
+            if (sub_len < 0)
+                PyErr_Format(PyExc_TypeError,
+                        "index " SIP_SSIZE_T_FORMAT " has type '%s' but a 2 element non-string sequence is expected",
+                        i, Py_TYPE(seq)->tp_name);
+            else
+                PyErr_Format(PyExc_TypeError,
+                        "index " SIP_SSIZE_T_FORMAT " is a sequence of " SIP_SSIZE_T_FORMAT " sub-elements but 2 sub-elements are expected",
+                        i, sub_len);
+
+            Py_DECREF(seq);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        PyObject *itm1 = PySequence_ITEM(seq, 0);
+
+        if (!itm1)
+        {
+            Py_DECREF(seq);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        int state1;
+        _TYPE1_ *s1 = reinterpret_cast<_TYPE1_ *>(
+                sipForceConvertToType(itm1, sipType__TYPE1_, sipTransferObj,
+                        SIP_NOT_NONE, &state1, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "the first sub-element of index " SIP_SSIZE_T_FORMAT " has type '%s' but '_TYPE1_' is expected",
+                    i, Py_TYPE(itm1)->tp_name);
+
+            Py_DECREF(itm1);
+            Py_DECREF(seq);
+            delete ql;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        PyObject *itm2 = PySequence_ITEM(seq, 1);
+
+        if (!itm2)
+        {
+            sipReleaseType(s1, sipType__TYPE1_, state1);
+            Py_DECREF(itm1);
+            Py_DECREF(seq);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        int state2;
+        _TYPE2_ *s2 = reinterpret_cast<_TYPE2_ *>(
+                sipForceConvertToType(itm2, sipType__TYPE2_, sipTransferObj,
+                        SIP_NOT_NONE, &state2, sipIsErr));
+ 
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "the second sub-element of index " SIP_SSIZE_T_FORMAT " has type '%s' but '_TYPE2_' is expected",
+                    i, Py_TYPE(itm2)->tp_name);
+
+            Py_DECREF(itm2);
+            sipReleaseType(s1, sipType__TYPE1_, state1);
+            Py_DECREF(itm1);
+            Py_DECREF(seq);
+            delete ql;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        ql->append(QPair<_TYPE1_, _TYPE2_>(*s1, *s2));
+
+        sipReleaseType(s2, sipType__TYPE2_, state2);
+        Py_DECREF(itm2);
+        sipReleaseType(s1, sipType__TYPE1_, state1);
+        Py_DECREF(itm1);
+        Py_DECREF(seq);
+    }
+
+    Py_DECREF(iter);
+ 
+    *sipCppPtr = ql;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+%If (Qt_5_1_0 -)
+
+%MappedType QList<QPair<int, int> > /DocType="list-of-tuple-of-int-int"/
+{
+%TypeHeaderCode
+#include <qlist.h>
+#include <qpair.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        const QPair<int, int> &p = sipCpp->at(i);
+        PyObject *pobj = Py_BuildValue((char *)"ii", p.first, p.second);
+
+        if (!pobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<QPair<int, int> > *ql = new QList<QPair<int, int> >;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *seq = PyIter_Next(iter);
+
+        if (!seq)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        SIP_SSIZE_T sub_len;
+
+        if (PySequence_Check(seq)
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(seq)
+#endif
+                && !PyUnicode_Check(seq))
+            sub_len = PySequence_Size(seq);
+        else
+            sub_len = -1;
+
+        if (sub_len != 2)
+        {
+            if (sub_len < 0)
+                PyErr_Format(PyExc_TypeError,
+                        "index " SIP_SSIZE_T_FORMAT " has type '%s' but a 2 element non-string sequence is expected",
+                        i, Py_TYPE(seq)->tp_name);
+            else
+                PyErr_Format(PyExc_TypeError,
+                        "index " SIP_SSIZE_T_FORMAT " is a sequence of " SIP_SSIZE_T_FORMAT " sub-elements but 2 sub-elements are expected",
+                        i, sub_len);
+
+            Py_DECREF(seq);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        PyObject *itm1 = PySequence_ITEM(seq, 0);
+
+        if (!itm1)
+        {
+            Py_DECREF(seq);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        PyErr_Clear();
+        int first = SIPLong_AsLong(itm1);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "the first sub-element of index " SIP_SSIZE_T_FORMAT " has type '%s' but 'int' is expected",
+                    i, Py_TYPE(itm1)->tp_name);
+
+            Py_DECREF(itm1);
+            Py_DECREF(seq);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        PyObject *itm2 = PySequence_ITEM(seq, 1);
+
+        if (!itm2)
+        {
+            Py_DECREF(itm1);
+            Py_DECREF(seq);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        PyErr_Clear();
+        int second = SIPLong_AsLong(itm2);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "the second sub-element of index " SIP_SSIZE_T_FORMAT " has type '%s' but 'int' is expected",
+                    i, Py_TYPE(itm2)->tp_name);
+
+            Py_DECREF(itm2);
+            Py_DECREF(itm1);
+            Py_DECREF(seq);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        ql->append(QPair<int, int>(first, second));
+
+        Py_DECREF(itm2);
+        Py_DECREF(itm1);
+        Py_DECREF(seq);
+    }
+
+    Py_DECREF(iter);
+ 
+    *sipCppPtr = ql;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+%End
+
+
+%MappedType QList<int> /DocType="list-of-int"/
+{
+%TypeHeaderCode
+#include <qlist.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *pobj = SIPLong_FromLong(sipCpp->value(i));
+
+        if (!pobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<int> *ql = new QList<int>;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        PyErr_Clear();
+        long val = SIPLong_AsLong(itm);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'int' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        ql->append(val);
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+ 
+    *sipCppPtr = ql;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+%MappedType QList<qreal> /DocType="list-of-float"/
+{
+%TypeHeaderCode
+#include <qlist.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *pobj = PyFloat_FromDouble(sipCpp->value(i));
+
+        if (!pobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<qreal> *ql = new QList<qreal>;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        PyErr_Clear();
+        double val = PyFloat_AsDouble(itm);
+        
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'float' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        ql->append(val);
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+ 
+    *sipCppPtr = ql;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+%MappedType QList<Qt::DayOfWeek> /DocType="list-of-Qt.DayOfWeek"/
+{
+%TypeHeaderCode
+#include <Qt>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *eobj = sipConvertFromEnum(sipCpp->at(i),
+                sipType_Qt_DayOfWeek);
+
+        if (!eobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, eobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<Qt::DayOfWeek> *ql = new QList<Qt::DayOfWeek>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        if (!sipCanConvertToEnum(itm, sipType_Qt_DayOfWeek))
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'Qt.DayOfWeek' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        ql->append(static_cast<Qt::DayOfWeek>(SIPLong_AsLong(itm)));
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = ql;
+
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtCore/qpycore_qmap.sip b/sip/QtCore/qpycore_qmap.sip
new file mode 100644
index 0000000..e893e8b
--- /dev/null
+++ b/sip/QtCore/qpycore_qmap.sip
@@ -0,0 +1,350 @@
+// This is the SIP interface definition for the majority of the QMap and
+// QMultiMap based mapped types.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+template<_TYPE1_, _TYPE2_>
+%MappedType QMap<_TYPE1_, _TYPE2_> /DocType="dict-of-_TYPE1_-_TYPE2_"/
+{
+%TypeHeaderCode
+#include <qmap.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *d = PyDict_New();
+
+    if (!d)
+        return 0;
+
+    QMap<_TYPE1_, _TYPE2_>::const_iterator it = sipCpp->constBegin();
+    QMap<_TYPE1_, _TYPE2_>::const_iterator end = sipCpp->constEnd();
+
+    while (it != end)
+    {
+        _TYPE1_ *k = new _TYPE1_(it.key());
+        PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_,
+                sipTransferObj);
+
+        if (!kobj)
+        {
+            delete k;
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        _TYPE2_ *v = new _TYPE2_(it.value());
+        PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE2_,
+                sipTransferObj);
+
+        if (!vobj)
+        {
+            delete v;
+            Py_DECREF(kobj);
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        int rc = PyDict_SetItem(d, kobj, vobj);
+
+        Py_DECREF(vobj);
+        Py_DECREF(kobj);
+
+        if (rc < 0)
+        {
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        ++it;
+    }
+
+    return d;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return PyDict_Check(sipPy);
+
+    QMap<_TYPE1_, _TYPE2_> *qm = new QMap<_TYPE1_, _TYPE2_>;
+
+    SIP_SSIZE_T pos = 0;
+    PyObject *kobj, *vobj;
+ 
+    while (PyDict_Next(sipPy, &pos, &kobj, &vobj))
+    {
+        int kstate;
+        _TYPE1_ *k = reinterpret_cast<_TYPE1_ *>(
+                sipForceConvertToType(kobj, sipType__TYPE1_, sipTransferObj,
+                        SIP_NOT_NONE, &kstate, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a key has type '%s' but '_TYPE1_' is expected",
+                    Py_TYPE(kobj)->tp_name);
+
+            delete qm;
+
+            return 0;
+        }
+
+        int vstate;
+        _TYPE2_ *v = reinterpret_cast<_TYPE2_ *>(
+                sipForceConvertToType(vobj, sipType__TYPE2_, sipTransferObj,
+                        SIP_NOT_NONE, &vstate, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a value has type '%s' but '_TYPE2_' is expected",
+                    Py_TYPE(vobj)->tp_name);
+
+            sipReleaseType(k, sipType__TYPE1_, kstate);
+            delete qm;
+
+            return 0;
+        }
+
+        qm->insert(*k, *v);
+
+        sipReleaseType(v, sipType__TYPE2_, vstate);
+        sipReleaseType(k, sipType__TYPE1_, kstate);
+    }
+ 
+    *sipCppPtr = qm;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+template<int, _TYPE_>
+%MappedType QMap<int, _TYPE_> /DocType="dict-of-int-_TYPE_"/
+{
+%TypeHeaderCode
+#include <qmap.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *d = PyDict_New();
+
+    if (!d)
+        return 0;
+
+    QMap<int, _TYPE_>::const_iterator it = sipCpp->constBegin();
+    QMap<int, _TYPE_>::const_iterator end = sipCpp->constEnd();
+
+    while (it != end)
+    {
+        PyObject *kobj = SIPLong_FromLong(it.key());
+
+        if (!kobj)
+        {
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        _TYPE_ *v = new _TYPE_(it.value());
+        PyObject *vobj = sipConvertFromNewType(v, sipType__TYPE_,
+                sipTransferObj);
+
+        if (!vobj)
+        {
+            delete v;
+            Py_DECREF(kobj);
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        int rc = PyDict_SetItem(d, kobj, vobj);
+
+        Py_DECREF(vobj);
+        Py_DECREF(kobj);
+
+        if (rc < 0)
+        {
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        ++it;
+    }
+
+    return d;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return PyDict_Check(sipPy);
+
+    QMap<int, _TYPE_> *qm = new QMap<int, _TYPE_>;
+
+    SIP_SSIZE_T pos = 0;
+    PyObject *kobj, *vobj;
+ 
+    while (PyDict_Next(sipPy, &pos, &kobj, &vobj))
+    {
+        PyErr_Clear();
+        int k = SIPLong_AsLong(kobj);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a key has type '%s' but 'int' is expected",
+                    Py_TYPE(kobj)->tp_name);
+
+            delete qm;
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        int vstate;
+        _TYPE_ *v = reinterpret_cast<_TYPE_ *>(
+                sipForceConvertToType(vobj, sipType__TYPE_, sipTransferObj,
+                        SIP_NOT_NONE, &vstate, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a value has type '%s' but '_TYPE_' is expected",
+                    Py_TYPE(vobj)->tp_name);
+
+            delete qm;
+
+            return 0;
+        }
+
+        qm->insert(k, *v);
+
+        sipReleaseType(v, sipType__TYPE_, vstate);
+    }
+ 
+    *sipCppPtr = qm;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+template<_TYPE1_, _TYPE2_>
+%MappedType QMultiMap<_TYPE1_, _TYPE2_>
+        /DocType="dict-of-_TYPE1_-list-of-_TYPE2_"/
+{
+%TypeHeaderCode
+#include <qmap.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *d = PyDict_New();
+
+    if (!d)
+        return 0;
+
+    QList<_TYPE1_> keys = sipCpp->keys();
+    QList<_TYPE1_>::const_iterator kit = keys.constBegin();
+    QList<_TYPE1_>::const_iterator kit_end = keys.constEnd();
+
+    while (kit != kit_end)
+    {
+        _TYPE1_ *k = new _TYPE1_(*kit);
+        PyObject *kobj = sipConvertFromNewType(k, sipType__TYPE1_,
+                sipTransferObj);
+
+        if (!kobj)
+        {
+            delete k;
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        // Create a Python list as the dictionary value.
+        QList<_TYPE2_> values = sipCpp->values(*kit);
+        PyObject *vobj = PyList_New(values.count());
+
+        if (!vobj)
+        {
+            Py_DECREF(kobj);
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        QList<_TYPE2_>::const_iterator vit = values.constBegin();
+        QList<_TYPE2_>::const_iterator vit_end = values.constEnd();
+
+        for (int i = 0; vit != vit_end; ++i)
+        {
+            _TYPE2_ *sv = new _TYPE2_(*vit);
+            PyObject *svobj = sipConvertFromNewType(sv, sipType__TYPE2_,
+                    sipTransferObj);
+
+            if (!svobj)
+            {
+                delete sv;
+                Py_DECREF(vobj);
+                Py_DECREF(kobj);
+                Py_DECREF(d);
+
+                return 0;
+            }
+
+            PyList_SET_ITEM(vobj, i, svobj);
+
+            ++vit;
+        }
+
+        int rc = PyDict_SetItem(d, kobj, vobj);
+
+        Py_DECREF(vobj);
+        Py_DECREF(kobj);
+
+        if (rc < 0)
+        {
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        ++kit;
+    }
+
+    return d;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return PyDict_Check(sipPy);
+
+    // Note that PyQt v5.1 contains an unused implementation that can be
+    // restored if needed (although it will need updating to accept an iterable
+    // rather than just a list of values).
+    PyErr_SetString(PyExc_NotImplementedError,
+            "converting to QMultiMap<_TYPE1_, _TYPE2_> is unsupported");
+
+    return 0;
+%End
+};
diff --git a/sip/QtCore/qpycore_qpair.sip b/sip/QtCore/qpycore_qpair.sip
new file mode 100644
index 0000000..4f4e455
--- /dev/null
+++ b/sip/QtCore/qpycore_qpair.sip
@@ -0,0 +1,220 @@
+// This is the SIP interface definition for the majority of the QPair based
+// mapped types.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+template<_TYPE_>
+%MappedType QPair<_TYPE_, int> /DocType="tuple-of-_TYPE_-int"/
+{
+%TypeHeaderCode
+#include <qpair.h>
+%End
+
+%ConvertFromTypeCode
+    _TYPE_ *first = new _TYPE_(sipCpp->first);
+    PyObject *t = sipBuildResult(NULL, "(Ni)", first, sipType__TYPE_,
+            sipTransferObj, sipCpp->second);
+
+    if (!t)
+    {
+        delete first;
+
+        return 0;
+    }
+
+    return t;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return (PySequence_Check(sipPy)
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+
+    SIP_SSIZE_T len = PySequence_Size(sipPy);
+
+    if (len != 2)
+    {
+        // A negative length should only be an internal error so let the
+        // original exception stand.
+        if (len >= 0)
+            PyErr_Format(PyExc_TypeError,
+                    "sequence has " SIP_SSIZE_T_FORMAT " elements but 2 elements are expected",
+                    len);
+
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyObject *firstobj = PySequence_ITEM(sipPy, 0);
+
+    if (!firstobj)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    int firststate;
+    _TYPE_ *first = reinterpret_cast<_TYPE_ *>(
+            sipForceConvertToType(firstobj, sipType__TYPE_, sipTransferObj,
+                    SIP_NOT_NONE, &firststate, sipIsErr));
+ 
+    if (*sipIsErr)
+    {
+        PyErr_Format(PyExc_TypeError,
+                "the first element has type '%s' but '_TYPE_' is expected",
+                Py_TYPE(firstobj)->tp_name);
+
+        return 0;
+    }
+
+    PyObject *secondobj = PySequence_ITEM(sipPy, 1);
+
+    if (!secondobj)
+    {
+        sipReleaseType(first, sipType__TYPE_, firststate);
+        Py_DECREF(firstobj);
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyErr_Clear();
+    int second = SIPLong_AsLong(secondobj);
+
+    if (PyErr_Occurred())
+    {
+        PyErr_Format(PyExc_TypeError,
+                "the second element has type '%s' but 'int' is expected",
+                Py_TYPE(secondobj)->tp_name);
+
+        Py_DECREF(secondobj);
+        sipReleaseType(first, sipType__TYPE_, firststate);
+        Py_DECREF(firstobj);
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    *sipCppPtr = new QPair<_TYPE_, int>(*first, second);;
+
+    Py_DECREF(secondobj);
+    sipReleaseType(first, sipType__TYPE_, firststate);
+    Py_DECREF(firstobj);
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+%MappedType QPair<int, int> /DocType="tuple-of-int-int"/
+{
+%TypeHeaderCode
+#include <qpair.h>
+%End
+
+%ConvertFromTypeCode
+    return Py_BuildValue("(ii)", sipCpp->first, sipCpp->second);
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return (PySequence_Check(sipPy)
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+
+    SIP_SSIZE_T len = PySequence_Size(sipPy);
+
+    if (len != 2)
+    {
+        // A negative length should only be an internal error so let the
+        // original exception stand.
+        if (len >= 0)
+            PyErr_Format(PyExc_TypeError,
+                    "sequence has " SIP_SSIZE_T_FORMAT " elements but 2 elements are expected",
+                    len);
+
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyObject *firstobj = PySequence_ITEM(sipPy, 0);
+
+    if (!firstobj)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyErr_Clear();
+    int first = SIPLong_AsLong(firstobj);
+
+    if (PyErr_Occurred())
+    {
+        PyErr_Format(PyExc_TypeError,
+                "the first element has type '%s' but 'int' is expected",
+                Py_TYPE(firstobj)->tp_name);
+
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyObject *secondobj = PySequence_ITEM(sipPy, 1);
+
+    if (!secondobj)
+    {
+        Py_DECREF(firstobj);
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyErr_Clear();
+    int second = SIPLong_AsLong(secondobj);
+
+    if (PyErr_Occurred())
+    {
+        PyErr_Format(PyExc_TypeError,
+                "the second element has type '%s' but 'int' is expected",
+                Py_TYPE(secondobj)->tp_name);
+
+        Py_DECREF(secondobj);
+        Py_DECREF(firstobj);
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    *sipCppPtr = new QPair<int, int>(first, second);;
+
+    Py_DECREF(secondobj);
+    Py_DECREF(firstobj);
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtCore/qpycore_qset.sip b/sip/QtCore/qpycore_qset.sip
new file mode 100644
index 0000000..897a9ba
--- /dev/null
+++ b/sip/QtCore/qpycore_qset.sip
@@ -0,0 +1,242 @@
+// This is the SIP interface definition for the majority of the QSet based
+// mapped types.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+template<_TYPE_>
+%MappedType QSet<_TYPE_> /DocType="set-of-_TYPE_"/
+{
+%TypeHeaderCode
+#include <qset.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *s = PySet_New(0);
+
+    if (!s)
+        return 0;
+
+    QSet<_TYPE_>::const_iterator it = sipCpp->constBegin();
+    QSet<_TYPE_>::const_iterator end = sipCpp->constEnd();
+
+    while (it != end)
+    {
+        _TYPE_ *t = new _TYPE_(*it);
+        PyObject *tobj = sipConvertFromNewType(t, sipType__TYPE_,
+                sipTransferObj);
+
+        if (!tobj)
+        {
+            delete t;
+            Py_DECREF(s);
+
+            return 0;
+        }
+
+        PySet_Add(s, tobj);
+
+        ++it;
+    }
+
+    return s;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QSet<_TYPE_> *qs = new QSet<_TYPE_>;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qs;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        int state;
+        _TYPE_ *t = reinterpret_cast<_TYPE_ *>(
+                sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj,
+                        SIP_NOT_NONE, &state, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but '_TYPE_' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete qs;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        qs->insert(*t);
+
+        sipReleaseType(t, sipType__TYPE_, state);
+        Py_DECREF(itm);
+    }
+ 
+    Py_DECREF(iter);
+
+    *sipCppPtr = qs;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+template<_TYPE_>
+%MappedType QSet<_TYPE_ *> /DocType="set-of-_TYPE_"/
+{
+%TypeHeaderCode
+#include <qset.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *s = PySet_New(0);
+
+    if (!s)
+        return 0;
+
+    QSet<_TYPE_ *>::const_iterator it = sipCpp->constBegin();
+    QSet<_TYPE_ *>::const_iterator end = sipCpp->constEnd();
+
+    while (it != end)
+    {
+        // The explicit (void *) cast allows _TYPE_ to be const.
+        PyObject *tobj = sipConvertFromType((void *)*it, sipType__TYPE_,
+                sipTransferObj);
+
+        if (!tobj)
+        {
+            Py_DECREF(s);
+
+            return 0;
+        }
+
+        PySet_Add(s, tobj);
+
+        ++it;
+    }
+
+    return s;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QSet<_TYPE_ *> *qs = new QSet<_TYPE_ *>;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qs;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        _TYPE_ *t = reinterpret_cast<_TYPE_ *>(
+                sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, 0,
+                        0, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but '_TYPE_' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete qs;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        qs->insert(t);
+
+        Py_DECREF(itm);
+    }
+ 
+    Py_DECREF(iter);
+
+    *sipCppPtr = qs;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtCore/qpycore_qvector.sip b/sip/QtCore/qpycore_qvector.sip
new file mode 100644
index 0000000..eeb8c69
--- /dev/null
+++ b/sip/QtCore/qpycore_qvector.sip
@@ -0,0 +1,417 @@
+// This is the SIP interface definition for the majority of the QVector based
+// mapped types.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+template<_TYPE_>
+%MappedType QVector<_TYPE_> /DocType="list-of-_TYPE_"/
+{
+%TypeHeaderCode
+#include <qvector.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        _TYPE_ *t = new _TYPE_(sipCpp->at(i));
+        PyObject *tobj = sipConvertFromNewType(t, sipType__TYPE_,
+                sipTransferObj);
+
+        if (!tobj)
+        {
+            delete t;
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, tobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QVector<_TYPE_> *qv = new QVector<_TYPE_>;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qv;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        int state;
+        _TYPE_ *t = reinterpret_cast<_TYPE_ *>(
+                sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj,
+                        SIP_NOT_NONE, &state, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but '_TYPE_' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete qv;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        qv->append(*t);
+
+        sipReleaseType(t, sipType__TYPE_, state);
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+ 
+    *sipCppPtr = qv;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+template<qreal, _TYPE_>
+%MappedType QVector<QPair<qreal, _TYPE_> >
+        /DocType="list-of-tuple-of-float-_TYPE_"/
+{
+%TypeHeaderCode
+#include <qvector.h>
+#include <qpair.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        const QPair<qreal, _TYPE_> &p = sipCpp->at(i);
+        _TYPE_ *s2 = new _TYPE_(p.second);
+        PyObject *pobj = sipBuildResult(NULL, "(dN)", (double)p.first, s2,
+                sipType__TYPE_, sipTransferObj);
+
+        if (!pobj)
+        {
+            delete s2;
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QVector<QPair<qreal, _TYPE_> > *qv = new QVector<QPair<qreal, _TYPE_> >;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *seq = PyIter_Next(iter);
+
+        if (!seq)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qv;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        SIP_SSIZE_T sub_len;
+
+        if (PySequence_Check(seq)
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(seq)
+#endif
+                && !PyUnicode_Check(seq))
+            sub_len = PySequence_Size(seq);
+        else
+            sub_len = -1;
+
+        if (sub_len != 2)
+        {
+            if (sub_len < 0)
+                PyErr_Format(PyExc_TypeError,
+                        "index " SIP_SSIZE_T_FORMAT " has type '%s' but a 2 element non-string sequence is expected",
+                        i, Py_TYPE(seq)->tp_name);
+            else
+                PyErr_Format(PyExc_TypeError,
+                        "index " SIP_SSIZE_T_FORMAT " is a sequence of " SIP_SSIZE_T_FORMAT " sub-elements but 2 sub-elements are expected",
+                        i, sub_len);
+
+            Py_DECREF(seq);
+            delete qv;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        PyObject *itm1 = PySequence_ITEM(seq, 0);
+
+        if (!itm1)
+        {
+            Py_DECREF(seq);
+            delete qv;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        PyErr_Clear();
+        qreal s1 = PyFloat_AsDouble(itm1);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "the first sub-element of index " SIP_SSIZE_T_FORMAT " has type '%s' but 'float' is expected",
+                    i, Py_TYPE(itm1)->tp_name);
+
+            Py_DECREF(itm1);
+            Py_DECREF(seq);
+            delete qv;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        PyObject *itm2 = PySequence_ITEM(seq, 1);
+
+        if (!itm2)
+        {
+            Py_DECREF(itm1);
+            Py_DECREF(seq);
+            delete qv;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        int state2;
+        _TYPE_ *s2 = reinterpret_cast<_TYPE_ *>(
+                sipForceConvertToType(itm2, sipType__TYPE_, sipTransferObj,
+                        SIP_NOT_NONE, &state2, sipIsErr));
+ 
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "the second sub-element of index " SIP_SSIZE_T_FORMAT " has type '%s' but '_TYPE_' is expected",
+                    i, Py_TYPE(itm2)->tp_name);
+
+            Py_DECREF(itm2);
+            Py_DECREF(itm1);
+            Py_DECREF(seq);
+            delete qv;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        qv->append(QPair<qreal, _TYPE_>(s1, *s2));
+
+        sipReleaseType(s2, sipType__TYPE_, state2);
+        Py_DECREF(itm2);
+        Py_DECREF(itm1);
+        Py_DECREF(seq);
+    }
+
+    Py_DECREF(iter);
+ 
+    *sipCppPtr = qv;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+%MappedType QVector<int> /DocType="list-of-int"/
+{
+%TypeHeaderCode
+#include <qvector.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *pobj = SIPLong_FromLong(sipCpp->value(i));
+
+        if (!pobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QVector<int> *qv = new QVector<int>;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qv;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        PyErr_Clear();
+        long val = SIPLong_AsLong(itm);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'int' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete qv;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        qv->append(val);
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+ 
+    *sipCppPtr = qv;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtCore/qreadwritelock.sip b/sip/QtCore/qreadwritelock.sip
new file mode 100644
index 0000000..6ec984a
--- /dev/null
+++ b/sip/QtCore/qreadwritelock.sip
@@ -0,0 +1,104 @@
+// qreadwritelock.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QReadWriteLock
+{
+%TypeHeaderCode
+#include <qreadwritelock.h>
+%End
+
+public:
+    enum RecursionMode
+    {
+        NonRecursive,
+        Recursive,
+    };
+
+    explicit QReadWriteLock(QReadWriteLock::RecursionMode recursionMode = QReadWriteLock::NonRecursive);
+    ~QReadWriteLock();
+    void lockForRead() /ReleaseGIL/;
+    bool tryLockForRead();
+    bool tryLockForRead(int timeout) /ReleaseGIL/;
+    void lockForWrite() /ReleaseGIL/;
+    bool tryLockForWrite();
+    bool tryLockForWrite(int timeout) /ReleaseGIL/;
+    void unlock();
+
+private:
+    QReadWriteLock(const QReadWriteLock &);
+};
+
+class QReadLocker
+{
+%TypeHeaderCode
+#include <qreadwritelock.h>
+%End
+
+public:
+    QReadLocker(QReadWriteLock *areadWriteLock) /ReleaseGIL/;
+    ~QReadLocker();
+    void unlock();
+    void relock() /ReleaseGIL/;
+    QReadWriteLock *readWriteLock() const;
+    SIP_PYOBJECT __enter__();
+%MethodCode
+        // Just return a reference to self.
+        sipRes = sipSelf;
+        Py_INCREF(sipRes);
+%End
+
+    void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback);
+%MethodCode
+        sipCpp->unlock();
+%End
+
+private:
+    QReadLocker(const QReadLocker &);
+};
+
+class QWriteLocker
+{
+%TypeHeaderCode
+#include <qreadwritelock.h>
+%End
+
+public:
+    QWriteLocker(QReadWriteLock *areadWriteLock) /ReleaseGIL/;
+    ~QWriteLocker();
+    void unlock();
+    void relock() /ReleaseGIL/;
+    QReadWriteLock *readWriteLock() const;
+    SIP_PYOBJECT __enter__();
+%MethodCode
+        // Just return a reference to self.
+        sipRes = sipSelf;
+        Py_INCREF(sipRes);
+%End
+
+    void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback);
+%MethodCode
+        sipCpp->unlock();
+%End
+
+private:
+    QWriteLocker(const QWriteLocker &);
+};
diff --git a/sip/QtCore/qrect.sip b/sip/QtCore/qrect.sip
new file mode 100644
index 0000000..8cdfc32
--- /dev/null
+++ b/sip/QtCore/qrect.sip
@@ -0,0 +1,334 @@
+// qrect.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qrect.h>
+%End
+
+class QRect
+{
+%TypeHeaderCode
+#include <qrect.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"iiii", sipCpp->x(), sipCpp->y(), sipCpp->width(), sipCpp->height());
+%End
+
+public:
+    QRect();
+    QRect normalized() const;
+    void moveCenter(const QPoint &p);
+    QRect operator|(const QRect &r) const;
+    QRect operator&(const QRect &r) const;
+    bool contains(const QPoint &point, bool proper = false) const;
+    int __contains__(const QPoint &p) const;
+%MethodCode
+        sipRes = sipCpp->contains(*a0);
+%End
+
+    bool contains(const QRect &rectangle, bool proper = false) const;
+    int __contains__(const QRect &r) const;
+%MethodCode
+        sipRes = sipCpp->contains(*a0);
+%End
+
+    bool intersects(const QRect &r) const;
+    QRect(int aleft, int atop, int awidth, int aheight);
+    QRect(const QPoint &atopLeft, const QPoint &abottomRight);
+    QRect(const QPoint &atopLeft, const QSize &asize);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QRect()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QRect()");
+        #endif
+        }
+        else
+        {
+            sipRes =
+        #if PY_MAJOR_VERSION >= 3
+                PyUnicode_FromFormat
+        #else
+                PyString_FromFormat
+        #endif
+                    ("PyQt5.QtCore.QRect(%i, %i, %i, %i)", sipCpp->left(),
+                    sipCpp->top(), sipCpp->width(), sipCpp->height());
+        }
+%End
+
+    bool isNull() const;
+    bool isEmpty() const;
+    bool isValid() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = sipCpp->isValid();
+%End
+
+    int left() const;
+    int top() const;
+    int right() const;
+    int bottom() const;
+    int x() const;
+    int y() const;
+    void setLeft(int pos);
+    void setTop(int pos);
+    void setRight(int pos);
+    void setBottom(int pos);
+    void setTopLeft(const QPoint &p);
+    void setBottomRight(const QPoint &p);
+    void setTopRight(const QPoint &p);
+    void setBottomLeft(const QPoint &p);
+    void setX(int ax);
+    void setY(int ay);
+    QPoint topLeft() const;
+    QPoint bottomRight() const;
+    QPoint topRight() const;
+    QPoint bottomLeft() const;
+    QPoint center() const;
+    int width() const;
+    int height() const;
+    QSize size() const;
+    void translate(int dx, int dy);
+    void translate(const QPoint &p);
+    QRect translated(int dx, int dy) const;
+    QRect translated(const QPoint &p) const;
+    void moveTo(int ax, int ay);
+    void moveTo(const QPoint &p);
+    void moveLeft(int pos);
+    void moveTop(int pos);
+    void moveRight(int pos);
+    void moveBottom(int pos);
+    void moveTopLeft(const QPoint &p);
+    void moveBottomRight(const QPoint &p);
+    void moveTopRight(const QPoint &p);
+    void moveBottomLeft(const QPoint &p);
+    void getRect(int *ax, int *ay, int *aw, int *ah) const;
+    void setRect(int ax, int ay, int aw, int ah);
+    void getCoords(int *xp1, int *yp1, int *xp2, int *yp2) const;
+    void setCoords(int xp1, int yp1, int xp2, int yp2);
+    QRect adjusted(int xp1, int yp1, int xp2, int yp2) const;
+    void adjust(int dx1, int dy1, int dx2, int dy2);
+    void setWidth(int w);
+    void setHeight(int h);
+    void setSize(const QSize &s);
+    bool contains(int ax, int ay, bool aproper) const;
+    bool contains(int ax, int ay) const;
+    QRect &operator|=(const QRect &r);
+    QRect &operator&=(const QRect &r);
+    QRect intersected(const QRect &other) const;
+    QRect united(const QRect &r) const;
+%If (Qt_5_1_0 -)
+    QRect marginsAdded(const QMargins &margins) const;
+%End
+%If (Qt_5_1_0 -)
+    QRect marginsRemoved(const QMargins &margins) const;
+%End
+%If (Qt_5_1_0 -)
+    QRect &operator+=(const QMargins &margins);
+%End
+%If (Qt_5_1_0 -)
+    QRect &operator-=(const QMargins &margins);
+%End
+};
+
+QDataStream &operator<<(QDataStream &, const QRect & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QRect & /Constrained/) /ReleaseGIL/;
+bool operator==(const QRect &r1, const QRect &r2);
+bool operator!=(const QRect &r1, const QRect &r2);
+
+class QRectF
+{
+%TypeHeaderCode
+#include <qrect.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"dddd", sipCpp->x(), sipCpp->y(), sipCpp->width(), sipCpp->height());
+%End
+
+public:
+    QRectF();
+    QRectF(const QPointF &atopLeft, const QSizeF &asize);
+    QRectF(const QPointF &atopLeft, const QPointF &abottomRight);
+    QRectF(qreal aleft, qreal atop, qreal awidth, qreal aheight);
+    QRectF(const QRect &r);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QRectF()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QRectF()");
+        #endif
+        }
+        else
+        {
+            PyObject *l = PyFloat_FromDouble(sipCpp->left());
+            PyObject *t = PyFloat_FromDouble(sipCpp->top());
+            PyObject *w = PyFloat_FromDouble(sipCpp->width());
+            PyObject *h = PyFloat_FromDouble(sipCpp->height());
+        
+            if (l && t && w && h)
+            {
+        #if PY_MAJOR_VERSION >= 3
+                sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QRectF(%R, %R, %R, %R)", l,
+                        t, w, h);
+        #else
+                sipRes = PyString_FromString("PyQt5.QtCore.QRectF(");
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(l));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(t));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(w));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(h));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+            }
+        
+            Py_XDECREF(l);
+            Py_XDECREF(t);
+            Py_XDECREF(w);
+            Py_XDECREF(h);
+        }
+%End
+
+    QRectF normalized() const;
+    qreal left() const;
+    qreal top() const;
+    qreal right() const;
+    qreal bottom() const;
+    void setX(qreal pos);
+    void setY(qreal pos);
+    QPointF topLeft() const;
+    QPointF bottomRight() const;
+    QPointF topRight() const;
+    QPointF bottomLeft() const;
+    QRectF operator|(const QRectF &r) const;
+    QRectF operator&(const QRectF &r) const;
+    bool contains(const QPointF &p) const;
+    int __contains__(const QPointF &p) const;
+%MethodCode
+        sipRes = sipCpp->contains(*a0);
+%End
+
+    bool contains(const QRectF &r) const;
+    int __contains__(const QRectF &r) const;
+%MethodCode
+        sipRes = sipCpp->contains(*a0);
+%End
+
+    bool intersects(const QRectF &r) const;
+    bool isNull() const;
+    bool isEmpty() const;
+    bool isValid() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = sipCpp->isValid();
+%End
+
+    qreal x() const;
+    qreal y() const;
+    void setLeft(qreal pos);
+    void setRight(qreal pos);
+    void setTop(qreal pos);
+    void setBottom(qreal pos);
+    void setTopLeft(const QPointF &p);
+    void setTopRight(const QPointF &p);
+    void setBottomLeft(const QPointF &p);
+    void setBottomRight(const QPointF &p);
+    QPointF center() const;
+    void moveLeft(qreal pos);
+    void moveTop(qreal pos);
+    void moveRight(qreal pos);
+    void moveBottom(qreal pos);
+    void moveTopLeft(const QPointF &p);
+    void moveTopRight(const QPointF &p);
+    void moveBottomLeft(const QPointF &p);
+    void moveBottomRight(const QPointF &p);
+    void moveCenter(const QPointF &p);
+    qreal width() const;
+    qreal height() const;
+    QSizeF size() const;
+    void translate(qreal dx, qreal dy);
+    void translate(const QPointF &p);
+    void moveTo(qreal ax, qreal ay);
+    void moveTo(const QPointF &p);
+    QRectF translated(qreal dx, qreal dy) const;
+    QRectF translated(const QPointF &p) const;
+    void getRect(qreal *ax, qreal *ay, qreal *aaw, qreal *aah) const;
+    void setRect(qreal ax, qreal ay, qreal aaw, qreal aah);
+    void getCoords(qreal *xp1, qreal *yp1, qreal *xp2, qreal *yp2) const;
+    void setCoords(qreal xp1, qreal yp1, qreal xp2, qreal yp2);
+    void adjust(qreal xp1, qreal yp1, qreal xp2, qreal yp2);
+    QRectF adjusted(qreal xp1, qreal yp1, qreal xp2, qreal yp2) const;
+    void setWidth(qreal aw);
+    void setHeight(qreal ah);
+    void setSize(const QSizeF &s);
+    bool contains(qreal ax, qreal ay) const;
+    QRectF &operator|=(const QRectF &r);
+    QRectF &operator&=(const QRectF &r);
+    QRectF intersected(const QRectF &r) const;
+    QRectF united(const QRectF &r) const;
+    QRect toAlignedRect() const;
+    QRect toRect() const;
+%If (Qt_5_3_0 -)
+    QRectF marginsAdded(const QMarginsF &margins) const;
+%End
+%If (Qt_5_3_0 -)
+    QRectF marginsRemoved(const QMarginsF &margins) const;
+%End
+%If (Qt_5_3_0 -)
+    QRectF &operator+=(const QMarginsF &margins);
+%End
+%If (Qt_5_3_0 -)
+    QRectF &operator-=(const QMarginsF &margins);
+%End
+};
+
+QDataStream &operator<<(QDataStream &, const QRectF & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QRectF & /Constrained/) /ReleaseGIL/;
+bool operator==(const QRectF &r1, const QRectF &r2);
+bool operator!=(const QRectF &r1, const QRectF &r2);
+%If (Qt_5_3_0 -)
+QRect operator+(const QRect &rectangle, const QMargins &margins);
+%End
+%If (Qt_5_3_0 -)
+QRect operator+(const QMargins &margins, const QRect &rectangle);
+%End
+%If (Qt_5_3_0 -)
+QRect operator-(const QRect &lhs, const QMargins &rhs);
+%End
+%If (Qt_5_3_0 -)
+QRectF operator+(const QRectF &lhs, const QMarginsF &rhs);
+%End
+%If (Qt_5_3_0 -)
+QRectF operator+(const QMarginsF &lhs, const QRectF &rhs);
+%End
+%If (Qt_5_3_0 -)
+QRectF operator-(const QRectF &lhs, const QMarginsF &rhs);
+%End
diff --git a/sip/QtCore/qregexp.sip b/sip/QtCore/qregexp.sip
new file mode 100644
index 0000000..8f34e12
--- /dev/null
+++ b/sip/QtCore/qregexp.sip
@@ -0,0 +1,134 @@
+// qregexp.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qregexp.h>
+%End
+
+class QRegExp
+{
+%TypeHeaderCode
+#include <qregexp.h>
+%End
+
+public:
+    enum PatternSyntax
+    {
+        RegExp,
+        RegExp2,
+        Wildcard,
+        FixedString,
+        WildcardUnix,
+        W3CXmlSchema11,
+    };
+
+    enum CaretMode
+    {
+        CaretAtZero,
+        CaretAtOffset,
+        CaretWontMatch,
+    };
+
+    QRegExp();
+    QRegExp(const QString &pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive, QRegExp::PatternSyntax syntax = QRegExp::RegExp);
+    QRegExp(const QRegExp &rx);
+    ~QRegExp();
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        PyObject *uni = qpycore_PyObject_FromQString(sipCpp->pattern());
+        
+        if (uni)
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QRegExp(%R", uni);
+        
+            if (sipCpp->caseSensitivity() != Qt::CaseSensitive ||
+                sipCpp->patternSyntax() != QRegExp::RegExp)
+            {
+                qpycore_Unicode_ConcatAndDel(&sipRes,
+                        PyUnicode_FromFormat(", PyQt5.QtCore.Qt.CaseSensitivity(%i)",
+                                (int)sipCpp->caseSensitivity()));
+        
+                if (sipCpp->patternSyntax() != QRegExp::RegExp)
+                    qpycore_Unicode_ConcatAndDel(&sipRes,
+                            PyUnicode_FromFormat(
+                                    ", PyQt5.QtCore.QRegExp.PatternSyntax(%i)",
+                                    (int)sipCpp->patternSyntax()));
+            }
+        
+            qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")"));
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QRegExp(");
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(uni));
+        
+            if (sipCpp->caseSensitivity() != Qt::CaseSensitive ||
+                sipCpp->patternSyntax() != QRegExp::RegExp)
+            {
+                PyString_ConcatAndDel(&sipRes,
+                        PyString_FromFormat(", PyQt5.QtCore.Qt.CaseSensitivity(%i)",
+                                (int)sipCpp->caseSensitivity()));
+        
+                if (sipCpp->patternSyntax() != QRegExp::RegExp)
+                    PyString_ConcatAndDel(&sipRes,
+                            PyString_FromFormat(
+                                    ", PyQt5.QtCore.QRegExp.PatternSyntax(%i)",
+                                    (int)sipCpp->patternSyntax()));
+            }
+        
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        
+            Py_DECREF(uni);
+        }
+        else
+        {
+            sipRes = 0;
+        }
+%End
+
+    bool operator==(const QRegExp &rx) const;
+    bool operator!=(const QRegExp &rx) const;
+    bool isEmpty() const;
+    bool isValid() const;
+    QString pattern() const;
+    void setPattern(const QString &pattern);
+    Qt::CaseSensitivity caseSensitivity() const;
+    void setCaseSensitivity(Qt::CaseSensitivity cs);
+    QRegExp::PatternSyntax patternSyntax() const;
+    void setPatternSyntax(QRegExp::PatternSyntax syntax);
+    bool isMinimal() const;
+    void setMinimal(bool minimal);
+    bool exactMatch(const QString &str) const;
+    int indexIn(const QString &str, int offset = 0, QRegExp::CaretMode caretMode = QRegExp::CaretAtZero) const;
+    int lastIndexIn(const QString &str, int offset = -1, QRegExp::CaretMode caretMode = QRegExp::CaretAtZero) const;
+    int matchedLength() const;
+    QStringList capturedTexts();
+    QString cap(int nth = 0);
+    int pos(int nth = 0);
+    QString errorString();
+    static QString escape(const QString &str);
+    int captureCount() const;
+    void swap(QRegExp &other);
+};
+
+QDataStream &operator<<(QDataStream &out, const QRegExp &regExp /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &in, QRegExp &regExp /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtCore/qregularexpression.sip b/sip/QtCore/qregularexpression.sip
new file mode 100644
index 0000000..daa353b
--- /dev/null
+++ b/sip/QtCore/qregularexpression.sip
@@ -0,0 +1,185 @@
+// qregularexpression.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qregularexpression.h>
+%End
+
+class QRegularExpression
+{
+%TypeHeaderCode
+#include <qregularexpression.h>
+%End
+
+public:
+    enum PatternOption
+    {
+        NoPatternOption,
+        CaseInsensitiveOption,
+        DotMatchesEverythingOption,
+        MultilineOption,
+        ExtendedPatternSyntaxOption,
+        InvertedGreedinessOption,
+        DontCaptureOption,
+        UseUnicodePropertiesOption,
+    };
+
+    typedef QFlags<QRegularExpression::PatternOption> PatternOptions;
+    QFlags<QRegularExpression::PatternOption> patternOptions() const;
+    void setPatternOptions(QFlags<QRegularExpression::PatternOption> options);
+    QRegularExpression();
+    QRegularExpression(const QString &pattern, QFlags<QRegularExpression::PatternOption> options = QRegularExpression::NoPatternOption);
+    QRegularExpression(const QRegularExpression &re);
+    ~QRegularExpression();
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        PyObject *uni = qpycore_PyObject_FromQString(sipCpp->pattern());
+        
+        if (uni)
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QRegularExpression(%R", uni);
+        
+            if (sipCpp->patternOptions() != QRegularExpression::NoPatternOption)
+            {
+                qpycore_Unicode_ConcatAndDel(&sipRes,
+                        PyUnicode_FromFormat(
+                                ", PyQt5.QtCore.QRegularExpression.PatternOptions(%i)",
+                                (int)sipCpp->patternOptions()));
+            }
+        
+            qpycore_Unicode_ConcatAndDel(&sipRes, PyUnicode_FromString(")"));
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QRegularExpression(");
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(uni));
+        
+            if (sipCpp->patternOptions() != QRegularExpression::NoPatternOption)
+            {
+                PyString_ConcatAndDel(&sipRes,
+                        PyString_FromFormat(
+                                ", PyQt5.QtCore.QRegularExpression.PatternOptions(%i)",
+                                (int)sipCpp->patternOptions()));
+            }
+        
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        
+            Py_DECREF(uni);
+        }
+        else
+        {
+            sipRes = 0;
+        }
+%End
+
+    void swap(QRegularExpression &re);
+    QString pattern() const;
+    void setPattern(const QString &pattern);
+    bool isValid() const;
+    int patternErrorOffset() const;
+    QString errorString() const;
+    int captureCount() const;
+
+    enum MatchType
+    {
+        NormalMatch,
+        PartialPreferCompleteMatch,
+        PartialPreferFirstMatch,
+%If (Qt_5_1_0 -)
+        NoMatch,
+%End
+    };
+
+    enum MatchOption
+    {
+        NoMatchOption,
+        AnchoredMatchOption,
+    };
+
+    typedef QFlags<QRegularExpression::MatchOption> MatchOptions;
+    QRegularExpressionMatch match(const QString &subject, int offset = 0, QRegularExpression::MatchType matchType = QRegularExpression::NormalMatch, QFlags<QRegularExpression::MatchOption> matchOptions = QRegularExpression::NoMatchOption) const;
+    QRegularExpressionMatchIterator globalMatch(const QString &subject, int offset = 0, QRegularExpression::MatchType matchType = QRegularExpression::NormalMatch, QFlags<QRegularExpression::MatchOption> matchOptions = QRegularExpression::NoMatchOption) const;
+    static QString escape(const QString &str);
+%If (Qt_5_1_0 -)
+    QStringList namedCaptureGroups() const;
+%End
+    bool operator==(const QRegularExpression &re) const;
+    bool operator!=(const QRegularExpression &re) const;
+};
+
+QFlags<QRegularExpression::PatternOption> operator|(QRegularExpression::PatternOption f1, QFlags<QRegularExpression::PatternOption> f2);
+QFlags<QRegularExpression::MatchOption> operator|(QRegularExpression::MatchOption f1, QFlags<QRegularExpression::MatchOption> f2);
+QDataStream &operator<<(QDataStream &out, const QRegularExpression &re /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &in, QRegularExpression &re /Constrained/) /ReleaseGIL/;
+
+class QRegularExpressionMatch
+{
+%TypeHeaderCode
+#include <qregularexpression.h>
+%End
+
+public:
+%If (Qt_5_1_0 -)
+    QRegularExpressionMatch();
+%End
+    ~QRegularExpressionMatch();
+    QRegularExpressionMatch(const QRegularExpressionMatch &match);
+    void swap(QRegularExpressionMatch &match);
+    QRegularExpression regularExpression() const;
+    QRegularExpression::MatchType matchType() const;
+    QFlags<QRegularExpression::MatchOption> matchOptions() const;
+    bool hasMatch() const;
+    bool hasPartialMatch() const;
+    bool isValid() const;
+    int lastCapturedIndex() const;
+    QString captured(int nth = 0) const;
+    QString captured(const QString &name) const;
+    QStringList capturedTexts() const;
+    int capturedStart(int nth = 0) const;
+    int capturedLength(int nth = 0) const;
+    int capturedEnd(int nth = 0) const;
+    int capturedStart(const QString &name) const;
+    int capturedLength(const QString &name) const;
+    int capturedEnd(const QString &name) const;
+};
+
+class QRegularExpressionMatchIterator
+{
+%TypeHeaderCode
+#include <qregularexpression.h>
+%End
+
+public:
+%If (Qt_5_1_0 -)
+    QRegularExpressionMatchIterator();
+%End
+    ~QRegularExpressionMatchIterator();
+    QRegularExpressionMatchIterator(const QRegularExpressionMatchIterator &iterator);
+    void swap(QRegularExpressionMatchIterator &iterator);
+    bool isValid() const;
+    bool hasNext() const;
+    QRegularExpressionMatch next();
+    QRegularExpressionMatch peekNext() const;
+    QRegularExpression regularExpression() const;
+    QRegularExpression::MatchType matchType() const;
+    QFlags<QRegularExpression::MatchOption> matchOptions() const;
+};
diff --git a/sip/QtCore/qresource.sip b/sip/QtCore/qresource.sip
new file mode 100644
index 0000000..34c3d0a
--- /dev/null
+++ b/sip/QtCore/qresource.sip
@@ -0,0 +1,68 @@
+// qresource.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QResource
+{
+%TypeHeaderCode
+#include <qresource.h>
+%End
+
+public:
+    QResource(const QString &fileName /DocValue="''"/ = QString(), const QLocale &locale = QLocale());
+    ~QResource();
+    QString absoluteFilePath() const;
+    SIP_PYOBJECT data() const /DocType="Py_v3:bytes;str"/;
+%MethodCode
+        // The data may contain embedded '\0's so set the size explicitly.
+        
+        if (sipCpp->data())
+        {
+            if ((sipRes = SIPBytes_FromStringAndSize((char *)sipCpp->data(), sipCpp->size())) == NULL)
+                sipIsErr = 1;
+        }
+        else
+        {
+            Py_INCREF(Py_None);
+            sipRes = Py_None;
+        }
+%End
+
+    QString fileName() const;
+    bool isCompressed() const;
+    bool isValid() const;
+    QLocale locale() const;
+    void setFileName(const QString &file);
+    void setLocale(const QLocale &locale);
+    qint64 size() const;
+    static bool registerResource(const QString &rccFileName, const QString &mapRoot /DocValue="''"/ = QString());
+    static bool registerResource(const uchar *rccData, const QString &mapRoot /DocValue="''"/ = QString()) /PyName=registerResourceData/;
+    static bool unregisterResource(const QString &rccFileName, const QString &mapRoot /DocValue="''"/ = QString());
+    static bool unregisterResource(const uchar *rccData, const QString &mapRoot /DocValue="''"/ = QString()) /PyName=unregisterResourceData/;
+
+protected:
+    QStringList children() const;
+    bool isDir() const;
+    bool isFile() const;
+
+private:
+    QResource(const QResource &);
+};
diff --git a/sip/QtCore/qrunnable.sip b/sip/QtCore/qrunnable.sip
new file mode 100644
index 0000000..92c9769
--- /dev/null
+++ b/sip/QtCore/qrunnable.sip
@@ -0,0 +1,35 @@
+// qrunnable.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QRunnable /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qrunnable.h>
+%End
+
+public:
+    QRunnable();
+    virtual ~QRunnable();
+    virtual void run() = 0;
+    bool autoDelete() const;
+    void setAutoDelete(bool _autoDelete);
+};
diff --git a/sip/QtCore/qsavefile.sip b/sip/QtCore/qsavefile.sip
new file mode 100644
index 0000000..98c5e93
--- /dev/null
+++ b/sip/QtCore/qsavefile.sip
@@ -0,0 +1,52 @@
+// qsavefile.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QSaveFile : QFileDevice
+{
+%TypeHeaderCode
+#include <qsavefile.h>
+%End
+
+public:
+    explicit QSaveFile(const QString &name);
+    explicit QSaveFile(QObject *parent /TransferThis/ = 0);
+    QSaveFile(const QString &name, QObject *parent /TransferThis/);
+    virtual ~QSaveFile();
+    virtual QString fileName() const;
+    void setFileName(const QString &name);
+    virtual bool open(QFlags<QIODevice::OpenModeFlag> mode) /ReleaseGIL/;
+    bool commit();
+    void cancelWriting();
+    void setDirectWriteFallback(bool enabled);
+    bool directWriteFallback() const;
+
+protected:
+    virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/;
+
+private:
+    virtual void close();
+    QSaveFile(const QSaveFile &);
+};
+
+%End
diff --git a/sip/QtCore/qsemaphore.sip b/sip/QtCore/qsemaphore.sip
new file mode 100644
index 0000000..996473a
--- /dev/null
+++ b/sip/QtCore/qsemaphore.sip
@@ -0,0 +1,40 @@
+// qsemaphore.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSemaphore
+{
+%TypeHeaderCode
+#include <qsemaphore.h>
+%End
+
+public:
+    explicit QSemaphore(int n = 0);
+    ~QSemaphore();
+    void acquire(int n = 1) /ReleaseGIL/;
+    bool tryAcquire(int n = 1);
+    bool tryAcquire(int n, int timeout) /ReleaseGIL/;
+    void release(int n = 1);
+    int available() const;
+
+private:
+    QSemaphore(const QSemaphore &);
+};
diff --git a/sip/QtCore/qsequentialanimationgroup.sip b/sip/QtCore/qsequentialanimationgroup.sip
new file mode 100644
index 0000000..870506f
--- /dev/null
+++ b/sip/QtCore/qsequentialanimationgroup.sip
@@ -0,0 +1,48 @@
+// qsequentialanimationgroup.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSequentialAnimationGroup : QAnimationGroup
+{
+%TypeHeaderCode
+#include <qsequentialanimationgroup.h>
+%End
+
+public:
+    QSequentialAnimationGroup(QObject *parent /TransferThis/ = 0);
+    virtual ~QSequentialAnimationGroup();
+    QPauseAnimation *addPause(int msecs);
+    QPauseAnimation *insertPause(int index, int msecs);
+    QAbstractAnimation *currentAnimation() const;
+    virtual int duration() const;
+
+signals:
+    void currentAnimationChanged(QAbstractAnimation *current);
+
+protected:
+    virtual bool event(QEvent *event);
+    virtual void updateCurrentTime(int);
+    virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
+    virtual void updateDirection(QAbstractAnimation::Direction direction);
+
+private:
+    QSequentialAnimationGroup(const QSequentialAnimationGroup &);
+};
diff --git a/sip/QtCore/qsettings.sip b/sip/QtCore/qsettings.sip
new file mode 100644
index 0000000..7bfdca7
--- /dev/null
+++ b/sip/QtCore/qsettings.sip
@@ -0,0 +1,107 @@
+// qsettings.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSettings : QObject
+{
+%TypeHeaderCode
+#include <qsettings.h>
+%End
+
+public:
+    enum Status
+    {
+        NoError,
+        AccessError,
+        FormatError,
+    };
+
+    enum Format
+    {
+        NativeFormat,
+        IniFormat,
+        InvalidFormat,
+    };
+
+    enum Scope
+    {
+        UserScope,
+        SystemScope,
+    };
+
+    QSettings(const QString &organization, const QString &application /DocValue="''"/ = QString(), QObject *parent /TransferThis/ = 0);
+    QSettings(QSettings::Scope scope, const QString &organization, const QString &application /DocValue="''"/ = QString(), QObject *parent /TransferThis/ = 0);
+    QSettings(QSettings::Format format, QSettings::Scope scope, const QString &organization, const QString &application /DocValue="''"/ = QString(), QObject *parent /TransferThis/ = 0);
+    QSettings(const QString &fileName, QSettings::Format format, QObject *parent /TransferThis/ = 0);
+    explicit QSettings(QObject *parent /TransferThis/ = 0);
+    virtual ~QSettings();
+    void clear();
+    void sync();
+    QSettings::Status status() const;
+    void beginGroup(const QString &prefix);
+    void endGroup();
+    QString group() const;
+    int beginReadArray(const QString &prefix);
+    void beginWriteArray(const QString &prefix, int size = -1);
+    void endArray();
+    void setArrayIndex(int i);
+    QStringList allKeys() const;
+    QStringList childKeys() const;
+    QStringList childGroups() const;
+    bool isWritable() const;
+    void setValue(const QString &key, const QVariant &value);
+    SIP_PYOBJECT value(const QString &key, const QVariant &defaultValue /DocValue="None"/ = QVariant(), SIP_PYOBJECT type /DocValue="None"/ = 0) const /ReleaseGIL/;
+%MethodCode
+        QVariant value;
+        
+        // QSettings has an internal mutex so release the GIL to avoid the possibility
+        // of deadlocks.
+        Py_BEGIN_ALLOW_THREADS
+        value = sipCpp->value(*a0, *a1);
+        Py_END_ALLOW_THREADS
+        
+        sipRes = pyqt5_from_qvariant_by_type(value, a2);
+        
+        sipIsErr = !sipRes;
+%End
+
+    void remove(const QString &key);
+    bool contains(const QString &key) const;
+    void setFallbacksEnabled(bool b);
+    bool fallbacksEnabled() const;
+    QString fileName() const;
+    static void setPath(QSettings::Format format, QSettings::Scope scope, const QString &path);
+    QSettings::Format format() const;
+    QSettings::Scope scope() const;
+    QString organizationName() const;
+    QString applicationName() const;
+    static void setDefaultFormat(QSettings::Format format);
+    static QSettings::Format defaultFormat();
+    void setIniCodec(QTextCodec *codec /KeepReference/);
+    void setIniCodec(const char *codecName);
+    QTextCodec *iniCodec() const;
+
+protected:
+    virtual bool event(QEvent *event);
+
+private:
+    QSettings(const QSettings &);
+};
diff --git a/sip/QtCore/qsharedmemory.sip b/sip/QtCore/qsharedmemory.sip
new file mode 100644
index 0000000..4a14036
--- /dev/null
+++ b/sip/QtCore/qsharedmemory.sip
@@ -0,0 +1,78 @@
+// qsharedmemory.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSharedMemory : QObject
+{
+%TypeHeaderCode
+#include <qsharedmemory.h>
+%End
+
+public:
+    enum AccessMode
+    {
+        ReadOnly,
+        ReadWrite,
+    };
+
+    enum SharedMemoryError
+    {
+        NoError,
+        PermissionDenied,
+        InvalidSize,
+        KeyError,
+        AlreadyExists,
+        NotFound,
+        LockError,
+        OutOfResources,
+        UnknownError,
+    };
+
+    QSharedMemory(QObject *parent /TransferThis/ = 0);
+    QSharedMemory(const QString &key, QObject *parent /TransferThis/ = 0);
+    virtual ~QSharedMemory();
+    void setKey(const QString &key);
+    QString key() const;
+    bool create(int size, QSharedMemory::AccessMode mode = QSharedMemory::ReadWrite);
+    int size() const;
+    bool attach(QSharedMemory::AccessMode mode = QSharedMemory::ReadWrite);
+    bool isAttached() const;
+    bool detach();
+    SIP_PYOBJECT data() /DocType="sip.voidptr"/;
+%MethodCode
+        sipRes = sipConvertFromVoidPtrAndSize(sipCpp->data(), sipCpp->size());
+%End
+
+    SIP_PYOBJECT constData() const /DocType="sip.voidptr"/;
+%MethodCode
+        sipRes = sipConvertFromConstVoidPtrAndSize(sipCpp->constData(), sipCpp->size());
+%End
+
+    bool lock();
+    bool unlock();
+    QSharedMemory::SharedMemoryError error() const;
+    QString errorString() const;
+    void setNativeKey(const QString &key);
+    QString nativeKey() const;
+
+private:
+    QSharedMemory(const QSharedMemory &);
+};
diff --git a/sip/QtCore/qsignalmapper.sip b/sip/QtCore/qsignalmapper.sip
new file mode 100644
index 0000000..eb8edd5
--- /dev/null
+++ b/sip/QtCore/qsignalmapper.sip
@@ -0,0 +1,56 @@
+// qsignalmapper.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWidget /External/;
+
+class QSignalMapper : QObject
+{
+%TypeHeaderCode
+#include <qsignalmapper.h>
+%End
+
+public:
+    explicit QSignalMapper(QObject *parent /TransferThis/ = 0);
+    virtual ~QSignalMapper();
+    void setMapping(QObject *sender, int id);
+    void setMapping(QObject *sender, const QString &text);
+    void setMapping(QObject *sender, QWidget *widget);
+    void setMapping(QObject *sender, QObject *object);
+    void removeMappings(QObject *sender);
+    QObject *mapping(int id) const;
+    QObject *mapping(const QString &text) const;
+    QObject *mapping(QWidget *widget) const;
+    QObject *mapping(QObject *object) const;
+
+signals:
+    void mapped(int);
+    void mapped(const QString &);
+    void mapped(QWidget *);
+    void mapped(QObject *);
+
+public slots:
+    void map();
+    void map(QObject *sender);
+
+private:
+    QSignalMapper(const QSignalMapper &);
+};
diff --git a/sip/QtCore/qsignaltransition.sip b/sip/QtCore/qsignaltransition.sip
new file mode 100644
index 0000000..f845cbe
--- /dev/null
+++ b/sip/QtCore/qsignaltransition.sip
@@ -0,0 +1,61 @@
+// qsignaltransition.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSignalTransition : QAbstractTransition
+{
+%TypeHeaderCode
+#include <qsignaltransition.h>
+%End
+
+public:
+    QSignalTransition(QState *sourceState /TransferThis/ = 0);
+    QSignalTransition(SIP_PYOBJECT signal /DocType="signal"/, QState *sourceState /TransferThis/ = 0) /NoDerived/;
+%MethodCode
+        QObject *sender;
+        QByteArray signal_signature;
+        
+        if ((sipError = pyqt5_get_pyqtsignal_parts(a0, &sender, signal_signature)) == sipErrorNone)
+        {
+            sipCpp = new sipQSignalTransition(a1);
+            sipCpp->setSenderObject(sender);
+            sipCpp->setSignal(signal_signature);
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    virtual ~QSignalTransition();
+    QObject *senderObject() const;
+    void setSenderObject(const QObject *sender);
+    QByteArray signal() const;
+    void setSignal(const QByteArray &signal);
+
+protected:
+    virtual bool eventTest(QEvent *event);
+    virtual void onTransition(QEvent *event);
+    virtual bool event(QEvent *e);
+
+private:
+    QSignalTransition(const QSignalTransition &);
+};
diff --git a/sip/QtCore/qsize.sip b/sip/QtCore/qsize.sip
new file mode 100644
index 0000000..c22bdc9
--- /dev/null
+++ b/sip/QtCore/qsize.sip
@@ -0,0 +1,180 @@
+// qsize.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qsize.h>
+%End
+
+class QSize
+{
+%TypeHeaderCode
+#include <qsize.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"ii", sipCpp->width(), sipCpp->height());
+%End
+
+public:
+    void transpose();
+    void scale(const QSize &s, Qt::AspectRatioMode mode);
+    QSize();
+    QSize(int w, int h);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QSize()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QSize()");
+        #endif
+        }
+        else
+        {
+            sipRes =
+        #if PY_MAJOR_VERSION >= 3
+                PyUnicode_FromFormat
+        #else
+                PyString_FromFormat
+        #endif
+                    ("PyQt5.QtCore.QSize(%i, %i)", sipCpp->width(), sipCpp->height());
+        }
+%End
+
+    bool isNull() const;
+    bool isEmpty() const;
+    bool isValid() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = sipCpp->isValid();
+%End
+
+    int width() const;
+    int height() const;
+    void setWidth(int w);
+    void setHeight(int h);
+    void scale(int w, int h, Qt::AspectRatioMode mode);
+    QSize &operator+=(const QSize &s);
+    QSize &operator-=(const QSize &s);
+    QSize &operator*=(qreal c);
+    QSize &operator/=(qreal c);
+    QSize expandedTo(const QSize &otherSize) const;
+    QSize boundedTo(const QSize &otherSize) const;
+    QSize scaled(const QSize &s, Qt::AspectRatioMode mode) const;
+    QSize scaled(int w, int h, Qt::AspectRatioMode mode) const;
+    QSize transposed() const;
+};
+
+QDataStream &operator<<(QDataStream &, const QSize & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QSize & /Constrained/) /ReleaseGIL/;
+bool operator==(const QSize &s1, const QSize &s2);
+bool operator!=(const QSize &s1, const QSize &s2);
+const QSize operator+(const QSize &s1, const QSize &s2);
+const QSize operator-(const QSize &s1, const QSize &s2);
+const QSize operator*(const QSize &s, qreal c);
+const QSize operator*(qreal c, const QSize &s);
+const QSize operator/(const QSize &s, qreal c);
+
+class QSizeF
+{
+%TypeHeaderCode
+#include <qsize.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"dd", sipCpp->width(), sipCpp->height());
+%End
+
+public:
+    void transpose();
+    void scale(const QSizeF &s, Qt::AspectRatioMode mode);
+    QSizeF();
+    QSizeF(const QSize &sz);
+    QSizeF(qreal w, qreal h);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        if (sipCpp->isNull())
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromString("PyQt5.QtCore.QSizeF()");
+        #else
+            sipRes = PyString_FromString("PyQt5.QtCore.QSizeF()");
+        #endif
+        }
+        else
+        {
+            PyObject *w = PyFloat_FromDouble(sipCpp->width());
+            PyObject *h = PyFloat_FromDouble(sipCpp->height());
+        
+            if (w && h)
+            {
+        #if PY_MAJOR_VERSION >= 3
+                sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QSizeF(%R, %R)", w, h);
+        #else
+                sipRes = PyString_FromString("PyQt5.QtCore.QSizeF(");
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(w));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(h));
+                PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+            }
+        
+            Py_XDECREF(w);
+            Py_XDECREF(h);
+        }
+%End
+
+    bool isNull() const;
+    bool isEmpty() const;
+    bool isValid() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = sipCpp->isValid();
+%End
+
+    qreal width() const;
+    qreal height() const;
+    void setWidth(qreal w);
+    void setHeight(qreal h);
+    void scale(qreal w, qreal h, Qt::AspectRatioMode mode);
+    QSizeF &operator+=(const QSizeF &s);
+    QSizeF &operator-=(const QSizeF &s);
+    QSizeF &operator*=(qreal c);
+    QSizeF &operator/=(qreal c);
+    QSizeF expandedTo(const QSizeF &otherSize) const;
+    QSizeF boundedTo(const QSizeF &otherSize) const;
+    QSize toSize() const;
+    QSizeF scaled(const QSizeF &s, Qt::AspectRatioMode mode) const;
+    QSizeF scaled(qreal w, qreal h, Qt::AspectRatioMode mode) const;
+    QSizeF transposed() const;
+};
+
+QDataStream &operator<<(QDataStream &, const QSizeF & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QSizeF & /Constrained/) /ReleaseGIL/;
+bool operator==(const QSizeF &s1, const QSizeF &s2);
+bool operator!=(const QSizeF &s1, const QSizeF &s2);
+const QSizeF operator+(const QSizeF &s1, const QSizeF &s2);
+const QSizeF operator-(const QSizeF &s1, const QSizeF &s2);
+const QSizeF operator*(const QSizeF &s, qreal c);
+const QSizeF operator*(qreal c, const QSizeF &s);
+const QSizeF operator/(const QSizeF &s, qreal c);
diff --git a/sip/QtCore/qsocketnotifier.sip b/sip/QtCore/qsocketnotifier.sip
new file mode 100644
index 0000000..3a8fb84
--- /dev/null
+++ b/sip/QtCore/qsocketnotifier.sip
@@ -0,0 +1,54 @@
+// qsocketnotifier.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSocketNotifier : QObject
+{
+%TypeHeaderCode
+#include <qsocketnotifier.h>
+%End
+
+public:
+    enum Type
+    {
+        Read,
+        Write,
+        Exception,
+    };
+
+    QSocketNotifier(qintptr socket, QSocketNotifier::Type, QObject *parent /TransferThis/ = 0);
+    virtual ~QSocketNotifier();
+    qintptr socket() const;
+    QSocketNotifier::Type type() const;
+    bool isEnabled() const;
+
+public slots:
+    void setEnabled(bool);
+
+signals:
+    void activated(int socket);
+
+protected:
+    virtual bool event(QEvent *);
+
+private:
+    QSocketNotifier(const QSocketNotifier &);
+};
diff --git a/sip/QtCore/qsortfilterproxymodel.sip b/sip/QtCore/qsortfilterproxymodel.sip
new file mode 100644
index 0000000..e9850f4
--- /dev/null
+++ b/sip/QtCore/qsortfilterproxymodel.sip
@@ -0,0 +1,102 @@
+// qsortfilterproxymodel.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSortFilterProxyModel : QAbstractProxyModel
+{
+%TypeHeaderCode
+#include <qsortfilterproxymodel.h>
+%End
+
+public:
+    explicit QSortFilterProxyModel(QObject *parent /TransferThis/ = 0);
+    virtual ~QSortFilterProxyModel();
+    virtual void setSourceModel(QAbstractItemModel *sourceModel /KeepReference/);
+    virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
+    virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;
+    virtual QItemSelection mapSelectionToSource(const QItemSelection &proxySelection) const;
+    virtual QItemSelection mapSelectionFromSource(const QItemSelection &sourceSelection) const;
+    QRegExp filterRegExp() const;
+    void setFilterRegExp(const QRegExp &regExp);
+    int filterKeyColumn() const;
+    void setFilterKeyColumn(int column);
+    Qt::CaseSensitivity filterCaseSensitivity() const;
+    void setFilterCaseSensitivity(Qt::CaseSensitivity cs);
+
+public slots:
+    void setFilterRegExp(const QString &pattern);
+    void setFilterWildcard(const QString &pattern);
+    void setFilterFixedString(const QString &pattern);
+
+protected:
+    virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
+    virtual bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const;
+    virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
+
+public:
+    virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+    virtual QModelIndex parent(const QModelIndex &child) const;
+    QObject *parent() const;
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
+    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+    virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+    virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::EditRole) const;
+    virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole);
+    virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/;
+    virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+    virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    virtual void fetchMore(const QModelIndex &parent);
+    virtual bool canFetchMore(const QModelIndex &parent) const;
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+    virtual QModelIndex buddy(const QModelIndex &index) const;
+    virtual QSize span(const QModelIndex &index) const;
+    virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchStartsWith|Qt::MatchWrap) const;
+    virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+    Qt::CaseSensitivity sortCaseSensitivity() const;
+    void setSortCaseSensitivity(Qt::CaseSensitivity cs);
+    bool dynamicSortFilter() const;
+    void setDynamicSortFilter(bool enable);
+    int sortRole() const;
+    void setSortRole(int role);
+    int sortColumn() const;
+    Qt::SortOrder sortOrder() const;
+    int filterRole() const;
+    void setFilterRole(int role);
+    virtual QStringList mimeTypes() const;
+    virtual Qt::DropActions supportedDropActions() const;
+    bool isSortLocaleAware() const;
+    void setSortLocaleAware(bool on);
+    virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
+
+public slots:
+    void invalidate();
+
+protected:
+    void invalidateFilter();
+
+private:
+    QSortFilterProxyModel(const QSortFilterProxyModel &);
+};
diff --git a/sip/QtCore/qstandardpaths.sip b/sip/QtCore/qstandardpaths.sip
new file mode 100644
index 0000000..4a0631c
--- /dev/null
+++ b/sip/QtCore/qstandardpaths.sip
@@ -0,0 +1,77 @@
+// qstandardpaths.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStandardPaths
+{
+%TypeHeaderCode
+#include <qstandardpaths.h>
+%End
+
+public:
+    enum StandardLocation
+    {
+        DesktopLocation,
+        DocumentsLocation,
+        FontsLocation,
+        ApplicationsLocation,
+        MusicLocation,
+        MoviesLocation,
+        PicturesLocation,
+        TempLocation,
+        HomeLocation,
+        DataLocation,
+        CacheLocation,
+        GenericDataLocation,
+        RuntimeLocation,
+        ConfigLocation,
+        DownloadLocation,
+        GenericCacheLocation,
+%If (Qt_5_2_0 -)
+        GenericConfigLocation,
+%End
+    };
+
+    static QString writableLocation(QStandardPaths::StandardLocation type);
+    static QStringList standardLocations(QStandardPaths::StandardLocation type);
+
+    enum LocateOption
+    {
+        LocateFile,
+        LocateDirectory,
+    };
+
+    typedef QFlags<QStandardPaths::LocateOption> LocateOptions;
+    static QString locate(QStandardPaths::StandardLocation type, const QString &fileName, QFlags<QStandardPaths::LocateOption> options = QStandardPaths::LocateFile);
+    static QStringList locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QFlags<QStandardPaths::LocateOption> options = QStandardPaths::LocateFile);
+%If (PyQt_NotBootstrapped)
+    static QString displayName(QStandardPaths::StandardLocation type);
+%End
+    static QString findExecutable(const QString &executableName, const QStringList &paths = QStringList());
+    static void enableTestMode(bool testMode);
+%If (Qt_5_2_0 -)
+    static void setTestModeEnabled(bool testMode);
+%End
+
+private:
+    QStandardPaths();
+    ~QStandardPaths();
+};
diff --git a/sip/QtCore/qstate.sip b/sip/QtCore/qstate.sip
new file mode 100644
index 0000000..480a54b
--- /dev/null
+++ b/sip/QtCore/qstate.sip
@@ -0,0 +1,83 @@
+// qstate.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QState : QAbstractState
+{
+%TypeHeaderCode
+#include <qstate.h>
+%End
+
+public:
+    enum ChildMode
+    {
+        ExclusiveStates,
+        ParallelStates,
+    };
+
+    enum RestorePolicy
+    {
+        DontRestoreProperties,
+        RestoreProperties,
+    };
+
+    QState(QState *parent /TransferThis/ = 0);
+    QState(QState::ChildMode childMode, QState *parent /TransferThis/ = 0);
+    virtual ~QState();
+    QAbstractState *errorState() const;
+    void setErrorState(QAbstractState *state /KeepReference/);
+    void addTransition(QAbstractTransition *transition /Transfer/);
+    QSignalTransition *addTransition(SIP_PYOBJECT signal /DocType="signal"/, QAbstractState *target);
+%MethodCode
+        QObject *sender;
+        QByteArray signal_signature;
+        
+        if ((sipError = pyqt5_get_pyqtsignal_parts(a0, &sender, signal_signature)) == sipErrorNone)
+        {
+            sipRes = sipCpp->addTransition(sender, signal_signature.constData(), a1);
+        }
+        else
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    QAbstractTransition *addTransition(QAbstractState *target /Transfer/);
+    void removeTransition(QAbstractTransition *transition /TransferBack/);
+    QList<QAbstractTransition*> transitions() const;
+    QAbstractState *initialState() const;
+    void setInitialState(QAbstractState *state /KeepReference/);
+    QState::ChildMode childMode() const;
+    void setChildMode(QState::ChildMode mode);
+    void assignProperty(QObject *object, const char *name, const QVariant &value);
+
+signals:
+    void finished();
+    void propertiesAssigned();
+
+protected:
+    virtual void onEntry(QEvent *event);
+    virtual void onExit(QEvent *event);
+    virtual bool event(QEvent *e);
+
+private:
+    QState(const QState &);
+};
diff --git a/sip/QtCore/qstatemachine.sip b/sip/QtCore/qstatemachine.sip
new file mode 100644
index 0000000..64013df
--- /dev/null
+++ b/sip/QtCore/qstatemachine.sip
@@ -0,0 +1,141 @@
+// qstatemachine.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStateMachine : QState
+{
+%TypeHeaderCode
+#include <qstatemachine.h>
+%End
+
+public:
+    class SignalEvent : QEvent /NoDefaultCtors/
+    {
+%TypeHeaderCode
+#include <qstatemachine.h>
+%End
+
+    public:
+        virtual ~SignalEvent();
+        QObject *sender() const;
+        int signalIndex() const;
+        QList<QVariant> arguments() const;
+    };
+
+    class WrappedEvent : QEvent /NoDefaultCtors/
+    {
+%TypeHeaderCode
+#include <qstatemachine.h>
+%End
+
+    public:
+        virtual ~WrappedEvent();
+        QObject *object() const;
+        QEvent *event() const;
+    };
+
+    enum EventPriority
+    {
+        NormalPriority,
+        HighPriority,
+    };
+
+    enum Error
+    {
+        NoError,
+        NoInitialStateError,
+        NoDefaultStateInHistoryStateError,
+        NoCommonAncestorForTransitionError,
+    };
+
+    explicit QStateMachine(QObject *parent /TransferThis/ = 0);
+    QStateMachine(QState::ChildMode childMode, QObject *parent /TransferThis/ = 0);
+    virtual ~QStateMachine();
+    void addState(QAbstractState *state /Transfer/);
+    void removeState(QAbstractState *state /TransferBack/);
+    QStateMachine::Error error() const;
+    QString errorString() const;
+    void clearError();
+    bool isRunning() const;
+    bool isAnimated() const;
+    void setAnimated(bool enabled);
+    void addDefaultAnimation(QAbstractAnimation *animation /GetWrapper/);
+%MethodCode
+        // We want to keep a reference to the animation but this is in addition to the
+        // existing ones and does not replace them - so we can't use /KeepReference/.
+        sipCpp->addDefaultAnimation(a0);
+        
+        // Use the user object as a list of the references.
+        PyObject *user = ((sipSimpleWrapper *)sipSelf)->user;
+        
+        if (!user)
+            user = ((sipSimpleWrapper *)sipSelf)->user = PyList_New(0);
+        
+        if (user)
+            PyList_Append(user, a0Wrapper);
+%End
+
+    QList<QAbstractAnimation*> defaultAnimations() const;
+    void removeDefaultAnimation(QAbstractAnimation *animation /GetWrapper/);
+%MethodCode
+        // Discard the extra animation reference that we took in addDefaultAnimation().
+        sipCpp->removeDefaultAnimation(a0);
+        
+        // Use the user object as a list of the references.
+        PyObject *user = ((sipSimpleWrapper *)sipSelf)->user;
+        
+        if (user)
+        {
+            Py_ssize_t i = 0;
+            
+            // Note that we deal with an object appearing in the list more than once.
+            while (i < PyList_GET_SIZE(user))
+                if (PyList_GET_ITEM(user, i) == a0Wrapper)
+                    PyList_SetSlice(user, i, i + 1, NULL);
+                else
+                    ++i;
+        }
+%End
+
+    QState::RestorePolicy globalRestorePolicy() const;
+    void setGlobalRestorePolicy(QState::RestorePolicy restorePolicy);
+    void postEvent(QEvent *event /Transfer/, QStateMachine::EventPriority priority = QStateMachine::NormalPriority);
+    int postDelayedEvent(QEvent *event /Transfer/, int delay);
+    bool cancelDelayedEvent(int id);
+    QSet<QAbstractState*> configuration() const;
+    virtual bool eventFilter(QObject *watched, QEvent *event);
+
+public slots:
+    void start();
+    void stop();
+
+signals:
+    void started();
+    void stopped();
+
+protected:
+    virtual void onEntry(QEvent *event);
+    virtual void onExit(QEvent *event);
+    virtual bool event(QEvent *e);
+
+private:
+    QStateMachine(const QStateMachine &);
+};
diff --git a/sip/QtCore/qstring.sip b/sip/QtCore/qstring.sip
new file mode 100644
index 0000000..3a63a9c
--- /dev/null
+++ b/sip/QtCore/qstring.sip
@@ -0,0 +1,79 @@
+// qstring.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+// QString mapped type.
+%MappedType QString /AllowNone,DocType="str"/
+{
+%TypeHeaderCode
+#include <qstring.h>
+%End
+
+%ConvertToTypeCode
+if (sipIsErr == NULL)
+#if PY_MAJOR_VERSION < 3
+    return (sipPy == Py_None || PyString_Check(sipPy) || PyUnicode_Check(sipPy));
+#else
+    return (sipPy == Py_None || PyUnicode_Check(sipPy));
+#endif
+
+if (sipPy == Py_None)
+{
+    // None is the only way to create a null (as opposed to empty) QString.
+    *sipCppPtr = new QString();
+
+    return sipGetState(sipTransferObj);
+}
+
+#if PY_MAJOR_VERSION < 3
+if (PyString_Check(sipPy))
+{
+    *sipCppPtr = new QString(PyString_AS_STRING(sipPy));
+
+    return sipGetState(sipTransferObj);
+}
+#endif
+
+*sipCppPtr = new QString(qpycore_PyObject_AsQString(sipPy));
+
+return sipGetState(sipTransferObj);
+%End
+
+%ConvertFromTypeCode
+    return qpycore_PyObject_FromQString(*sipCpp);
+%End
+};
+// QStringRef mapped type.
+%MappedType QStringRef
+{
+%TypeHeaderCode
+#include <qstring.h>
+%End
+
+%ConvertToTypeCode
+    // Qt only ever returns a QStringRef so this conversion isn't needed.
+    return 0;
+%End
+
+%ConvertFromTypeCode
+    return qpycore_PyObject_FromQString(sipCpp->toString());
+%End
+};
diff --git a/sip/QtCore/qstringlist.sip b/sip/QtCore/qstringlist.sip
new file mode 100644
index 0000000..90b0aa6
--- /dev/null
+++ b/sip/QtCore/qstringlist.sip
@@ -0,0 +1,135 @@
+// This is the SIP interface definition for the QStringList mapped type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+// Note that when we test the type of an object to see if it can be converted
+// to a collection we only check if it is iterable.  We do not check the
+// types of the contents - we assume we will be able to convert them when
+// requested.  This allows us to raise exceptions specific to an individual
+// object.  This approach doesn't work if there are overloads that can only be
+// distinguished by the types of the template arguments.  Currently there are
+// no such cases in PyQt5.  Note also that we don't consider strings to be
+// iterables.
+
+
+%MappedType QStringList /DocType="list-of-str"/
+{
+%TypeHeaderCode
+#include <qstringlist.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        QString *t = new QString(sipCpp->at(i));
+        PyObject *tobj = sipConvertFromNewType(t, sipType_QString,
+                sipTransferObj);
+
+        if (!tobj)
+        {
+            delete t;
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, tobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QStringList *ql = new QStringList;
+ 
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        int state;
+        QString *t = reinterpret_cast<QString *>(
+                sipForceConvertToType(itm, sipType_QString, sipTransferObj,
+                        SIP_NOT_NONE, &state, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'str' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        ql->append(*t);
+
+        sipReleaseType(t, sipType_QString, state);
+        Py_DECREF(itm);
+    }
+ 
+    Py_DECREF(iter);
+
+    *sipCppPtr = ql;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtCore/qstringlistmodel.sip b/sip/QtCore/qstringlistmodel.sip
new file mode 100644
index 0000000..78735fe
--- /dev/null
+++ b/sip/QtCore/qstringlistmodel.sip
@@ -0,0 +1,46 @@
+// qstringlistmodel.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStringListModel : QAbstractListModel
+{
+%TypeHeaderCode
+#include <qstringlistmodel.h>
+%End
+
+public:
+    explicit QStringListModel(QObject *parent /TransferThis/ = 0);
+    QStringListModel(const QStringList &strings, QObject *parent /TransferThis/ = 0);
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual QVariant data(const QModelIndex &index, int role) const;
+    virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+    virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    QStringList stringList() const;
+    void setStringList(const QStringList &strings);
+    virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+    virtual Qt::DropActions supportedDropActions() const;
+    virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
+
+private:
+    QStringListModel(const QStringListModel &);
+};
diff --git a/sip/QtCore/qsysinfo.sip b/sip/QtCore/qsysinfo.sip
new file mode 100644
index 0000000..0b20f36
--- /dev/null
+++ b/sip/QtCore/qsysinfo.sip
@@ -0,0 +1,127 @@
+// This is the SIP specification of the QSysInfo class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSysInfo
+{
+%TypeHeaderCode
+#include <qsysinfo.h>
+%End
+
+public:
+    enum Sizes
+    {
+        WordSize,
+    };
+
+    enum Endian
+    {
+        BigEndian,
+        LittleEndian,
+        ByteOrder,
+    };
+
+%If (WS_MACX)
+    enum MacVersion
+    {
+        MV_Unknown,
+        MV_9,
+        MV_10_0,
+        MV_10_1,
+        MV_10_2,
+        MV_10_3,
+        MV_10_4,
+        MV_10_5,
+        MV_10_6,
+        MV_10_7,
+        MV_10_8,
+%If (Qt_5_1_0 -)
+        MV_10_9,
+%End
+        MV_CHEETAH,
+        MV_PUMA,
+        MV_JAGUAR,
+        MV_PANTHER,
+        MV_TIGER,
+        MV_LEOPARD,
+        MV_SNOWLEOPARD,
+        MV_LION,
+        MV_MOUNTAINLION,
+%If (Qt_5_1_0 -)
+        MV_MAVERICKS,
+%End
+
+%If (Qt_5_2_0 -)
+        MV_IOS,
+        MV_IOS_4_3,
+        MV_IOS_5_0,
+        MV_IOS_5_1,
+        MV_IOS_6_0,
+        MV_IOS_6_1,
+        MV_IOS_7_0,
+        MV_IOS_7_1,
+%End
+    };
+
+    static const QSysInfo::MacVersion MacintoshVersion;
+    static QSysInfo::MacVersion macVersion();
+%End
+
+%If (WS_WIN)
+    enum WinVersion {
+        WV_32s,
+        WV_95,
+        WV_98,
+        WV_Me,
+        WV_DOS_based,
+
+        WV_NT,
+        WV_2000,
+        WV_XP,
+        WV_2003,
+        WV_VISTA,
+        WV_WINDOWS7,
+        WV_WINDOWS8,
+%If (Qt_5_2_0 -)
+        WV_WINDOWS8_1,
+%End
+        WV_NT_based,
+
+        WV_4_0,
+        WV_5_0,
+        WV_5_1,
+        WV_5_2,
+        WV_6_0,
+        WV_6_1,
+        WV_6_2,
+%If (Qt_5_2_0 -)
+        WV_6_3,
+%End
+
+        WV_CE,
+        WV_CENET,
+        WV_CE_5,
+        WV_CE_6,
+        WV_CE_based
+    };
+
+    static const QSysInfo::WinVersion WindowsVersion;
+    static QSysInfo::WinVersion windowsVersion();
+%End
+};
diff --git a/sip/QtCore/qsystemsemaphore.sip b/sip/QtCore/qsystemsemaphore.sip
new file mode 100644
index 0000000..f5fd8e8
--- /dev/null
+++ b/sip/QtCore/qsystemsemaphore.sip
@@ -0,0 +1,58 @@
+// qsystemsemaphore.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSystemSemaphore
+{
+%TypeHeaderCode
+#include <qsystemsemaphore.h>
+%End
+
+public:
+    enum AccessMode
+    {
+        Open,
+        Create,
+    };
+
+    enum SystemSemaphoreError
+    {
+        NoError,
+        PermissionDenied,
+        KeyError,
+        AlreadyExists,
+        NotFound,
+        OutOfResources,
+        UnknownError,
+    };
+
+    QSystemSemaphore(const QString &key, int initialValue = 0, QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open);
+    ~QSystemSemaphore();
+    void setKey(const QString &key, int initialValue = 0, QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open);
+    QString key() const;
+    bool acquire();
+    bool release(int n = 1);
+    QSystemSemaphore::SystemSemaphoreError error() const;
+    QString errorString() const;
+
+private:
+    QSystemSemaphore(const QSystemSemaphore &);
+};
diff --git a/sip/QtCore/qtemporarydir.sip b/sip/QtCore/qtemporarydir.sip
new file mode 100644
index 0000000..012ef7e
--- /dev/null
+++ b/sip/QtCore/qtemporarydir.sip
@@ -0,0 +1,41 @@
+// qtemporarydir.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTemporaryDir
+{
+%TypeHeaderCode
+#include <qtemporarydir.h>
+%End
+
+public:
+    QTemporaryDir();
+    explicit QTemporaryDir(const QString &templateName);
+    ~QTemporaryDir();
+    bool isValid() const;
+    bool autoRemove() const;
+    void setAutoRemove(bool b);
+    bool remove();
+    QString path() const;
+
+private:
+    QTemporaryDir(const QTemporaryDir &);
+};
diff --git a/sip/QtCore/qtemporaryfile.sip b/sip/QtCore/qtemporaryfile.sip
new file mode 100644
index 0000000..fd5e04a
--- /dev/null
+++ b/sip/QtCore/qtemporaryfile.sip
@@ -0,0 +1,49 @@
+// qtemporaryfile.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTemporaryFile : QFile
+{
+%TypeHeaderCode
+#include <qtemporaryfile.h>
+%End
+
+public:
+    QTemporaryFile();
+    explicit QTemporaryFile(const QString &templateName);
+    explicit QTemporaryFile(QObject *parent /TransferThis/);
+    QTemporaryFile(const QString &templateName, QObject *parent /TransferThis/);
+    virtual ~QTemporaryFile();
+    bool autoRemove() const;
+    void setAutoRemove(bool b);
+    bool open() /ReleaseGIL/;
+    virtual QString fileName() const;
+    QString fileTemplate() const;
+    void setFileTemplate(const QString &name);
+    static QTemporaryFile *createNativeFile(const QString &fileName) /Factory,ReleaseGIL/;
+    static QTemporaryFile *createNativeFile(QFile &file) /Factory,ReleaseGIL/;
+
+protected:
+    virtual bool open(QFlags<QIODevice::OpenModeFlag> mode) /ReleaseGIL/;
+
+private:
+    QTemporaryFile(const QTemporaryFile &);
+};
diff --git a/sip/QtCore/qtextboundaryfinder.sip b/sip/QtCore/qtextboundaryfinder.sip
new file mode 100644
index 0000000..70b0b32
--- /dev/null
+++ b/sip/QtCore/qtextboundaryfinder.sip
@@ -0,0 +1,71 @@
+// qtextboundaryfinder.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtextboundaryfinder.h>
+%End
+
+class QTextBoundaryFinder
+{
+%TypeHeaderCode
+#include <qtextboundaryfinder.h>
+%End
+
+public:
+    enum BoundaryReason
+    {
+        NotAtBoundary,
+        SoftHyphen,
+        BreakOpportunity,
+        StartOfItem,
+        EndOfItem,
+        MandatoryBreak,
+    };
+
+    typedef QFlags<QTextBoundaryFinder::BoundaryReason> BoundaryReasons;
+
+    enum BoundaryType
+    {
+        Grapheme,
+        Word,
+        Line,
+        Sentence,
+    };
+
+    QTextBoundaryFinder();
+    QTextBoundaryFinder(const QTextBoundaryFinder &other);
+    QTextBoundaryFinder(QTextBoundaryFinder::BoundaryType type, const QString &string);
+    ~QTextBoundaryFinder();
+    bool isValid() const;
+    QTextBoundaryFinder::BoundaryType type() const;
+    QString string() const;
+    void toStart();
+    void toEnd();
+    int position() const;
+    void setPosition(int position);
+    int toNextBoundary();
+    int toPreviousBoundary();
+    bool isAtBoundary() const;
+    QFlags<QTextBoundaryFinder::BoundaryReason> boundaryReasons() const;
+};
+
+QFlags<QTextBoundaryFinder::BoundaryReason> operator|(QTextBoundaryFinder::BoundaryReason f1, QFlags<QTextBoundaryFinder::BoundaryReason> f2);
diff --git a/sip/QtCore/qtextcodec.sip b/sip/QtCore/qtextcodec.sip
new file mode 100644
index 0000000..9d0eb2a
--- /dev/null
+++ b/sip/QtCore/qtextcodec.sip
@@ -0,0 +1,121 @@
+// qtextcodec.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtextcodec.h>
+%End
+
+class QTextCodec /Abstract,Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qtextcodec.h>
+%End
+
+public:
+    static QTextCodec *codecForName(const QByteArray &name);
+    static QTextCodec *codecForName(const char *name);
+    static QTextCodec *codecForMib(int mib);
+    static QTextCodec *codecForHtml(const QByteArray &ba);
+    static QTextCodec *codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec);
+    static QTextCodec *codecForUtfText(const QByteArray &ba);
+    static QTextCodec *codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec);
+    static QList<QByteArray> availableCodecs();
+    static QList<int> availableMibs();
+    static QTextCodec *codecForLocale();
+    static void setCodecForLocale(QTextCodec *c /KeepReference/);
+    QTextDecoder *makeDecoder(QFlags<QTextCodec::ConversionFlag> flags = QTextCodec::DefaultConversion) const /Factory/;
+    QTextEncoder *makeEncoder(QFlags<QTextCodec::ConversionFlag> flags = QTextCodec::DefaultConversion) const /Factory/;
+    bool canEncode(const QString &) const;
+    QString toUnicode(const QByteArray &) const;
+    QString toUnicode(const char *chars /Encoding="None"/) const;
+    QByteArray fromUnicode(const QString &uc) const;
+
+    enum ConversionFlag
+    {
+        DefaultConversion,
+        ConvertInvalidToNull,
+        IgnoreHeader,
+    };
+
+    typedef QFlags<QTextCodec::ConversionFlag> ConversionFlags;
+
+    struct ConverterState
+    {
+%TypeHeaderCode
+#include <qtextcodec.h>
+%End
+
+        ConverterState(QFlags<QTextCodec::ConversionFlag> flags = QTextCodec::DefaultConversion);
+        ~ConverterState();
+
+    private:
+        ConverterState(const QTextCodec::ConverterState &);
+    };
+
+    QString toUnicode(const char *in /Array/, int length /ArraySize/, QTextCodec::ConverterState *state = 0) const;
+    virtual QByteArray name() const = 0;
+    virtual QList<QByteArray> aliases() const;
+    virtual int mibEnum() const = 0;
+
+protected:
+    virtual QString convertToUnicode(const char *in /Array/, int length /ArraySize/, QTextCodec::ConverterState *state) const = 0;
+    QTextCodec() /Transfer/;
+    virtual ~QTextCodec();
+
+private:
+    QTextCodec(const QTextCodec &);
+};
+
+QFlags<QTextCodec::ConversionFlag> operator|(QTextCodec::ConversionFlag f1, QFlags<QTextCodec::ConversionFlag> f2);
+
+class QTextEncoder /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qtextcodec.h>
+%End
+
+public:
+    explicit QTextEncoder(const QTextCodec *codec);
+    QTextEncoder(const QTextCodec *codec, QFlags<QTextCodec::ConversionFlag> flags);
+    ~QTextEncoder();
+    QByteArray fromUnicode(const QString &str);
+
+private:
+    QTextEncoder(const QTextEncoder &);
+};
+
+class QTextDecoder /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qtextcodec.h>
+%End
+
+public:
+    explicit QTextDecoder(const QTextCodec *codec);
+    QTextDecoder(const QTextCodec *codec, QFlags<QTextCodec::ConversionFlag> flags);
+    ~QTextDecoder();
+    QString toUnicode(const char *chars /Array/, int len /ArraySize/);
+    QString toUnicode(const QByteArray &ba);
+
+private:
+    QTextDecoder(const QTextDecoder &);
+};
diff --git a/sip/QtCore/qtextstream.sip b/sip/QtCore/qtextstream.sip
new file mode 100644
index 0000000..4521787
--- /dev/null
+++ b/sip/QtCore/qtextstream.sip
@@ -0,0 +1,149 @@
+// qtextstream.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtextstream.h>
+%End
+
+class QTextStream
+{
+%TypeHeaderCode
+#include <qtextstream.h>
+%End
+
+public:
+    enum RealNumberNotation
+    {
+        SmartNotation,
+        FixedNotation,
+        ScientificNotation,
+    };
+
+    enum FieldAlignment
+    {
+        AlignLeft,
+        AlignRight,
+        AlignCenter,
+        AlignAccountingStyle,
+    };
+
+    enum NumberFlag
+    {
+        ShowBase,
+        ForcePoint,
+        ForceSign,
+        UppercaseBase,
+        UppercaseDigits,
+    };
+
+    enum Status
+    {
+        Ok,
+        ReadPastEnd,
+        ReadCorruptData,
+        WriteFailed,
+    };
+
+    typedef QFlags<QTextStream::NumberFlag> NumberFlags;
+    QTextStream();
+    explicit QTextStream(QIODevice *device);
+    QTextStream(QByteArray *array /Constrained/, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite);
+    virtual ~QTextStream();
+    void setCodec(QTextCodec *codec /KeepReference/);
+    void setCodec(const char *codecName);
+    QTextCodec *codec() const;
+    void setAutoDetectUnicode(bool enabled);
+    bool autoDetectUnicode() const;
+    void setGenerateByteOrderMark(bool generate);
+    bool generateByteOrderMark() const;
+    void setDevice(QIODevice *device);
+    QIODevice *device() const;
+    bool atEnd() const;
+    void reset();
+    void flush() /ReleaseGIL/;
+    bool seek(qint64 pos);
+    void skipWhiteSpace();
+    QString read(qint64 maxlen) /ReleaseGIL/;
+    QString readLine(qint64 maxLength = 0) /ReleaseGIL/;
+    QString readAll() /ReleaseGIL/;
+    void setFieldAlignment(QTextStream::FieldAlignment alignment);
+    QTextStream::FieldAlignment fieldAlignment() const;
+    void setPadChar(QChar ch);
+    QChar padChar() const;
+    void setFieldWidth(int width);
+    int fieldWidth() const;
+    void setNumberFlags(QFlags<QTextStream::NumberFlag> flags);
+    QFlags<QTextStream::NumberFlag> numberFlags() const;
+    void setIntegerBase(int base);
+    int integerBase() const;
+    void setRealNumberNotation(QTextStream::RealNumberNotation notation);
+    QTextStream::RealNumberNotation realNumberNotation() const;
+    void setRealNumberPrecision(int precision);
+    int realNumberPrecision() const;
+    QTextStream::Status status() const;
+    void setStatus(QTextStream::Status status);
+    void resetStatus();
+    qint64 pos() const;
+    QTextStream &operator>>(QByteArray &array /Constrained/);
+    QTextStream &operator<<(double f /Constrained/);
+    QTextStream &operator<<(int i /Constrained/);
+    QTextStream &operator<<(qlonglong i);
+    QTextStream &operator<<(qulonglong i);
+    QTextStream &operator<<(const QString &s);
+    QTextStream &operator<<(const QByteArray &array);
+    void setLocale(const QLocale &locale);
+    QLocale locale() const;
+
+private:
+    QTextStream(const QTextStream &);
+};
+
+QFlags<QTextStream::NumberFlag> operator|(QTextStream::NumberFlag f1, QFlags<QTextStream::NumberFlag> f2);
+class QTextStreamManipulator;
+QTextStream &operator<<(QTextStream &s, QTextStreamManipulator m);
+QTextStream &bin(QTextStream &s) /PyName=bin_/;
+QTextStream &oct(QTextStream &s) /PyName=oct_/;
+QTextStream &dec(QTextStream &s);
+QTextStream &hex(QTextStream &s) /PyName=hex_/;
+QTextStream &showbase(QTextStream &s);
+QTextStream &forcesign(QTextStream &s);
+QTextStream &forcepoint(QTextStream &s);
+QTextStream &noshowbase(QTextStream &s);
+QTextStream &noforcesign(QTextStream &s);
+QTextStream &noforcepoint(QTextStream &s);
+QTextStream &uppercasebase(QTextStream &s);
+QTextStream &uppercasedigits(QTextStream &s);
+QTextStream &lowercasebase(QTextStream &s);
+QTextStream &lowercasedigits(QTextStream &s);
+QTextStream &fixed(QTextStream &s);
+QTextStream &scientific(QTextStream &s);
+QTextStream &left(QTextStream &s);
+QTextStream &right(QTextStream &s);
+QTextStream &center(QTextStream &s);
+QTextStream &endl(QTextStream &s);
+QTextStream &flush(QTextStream &s);
+QTextStream &reset(QTextStream &s);
+QTextStream &bom(QTextStream &s);
+QTextStream &ws(QTextStream &s);
+QTextStreamManipulator qSetFieldWidth(int width);
+QTextStreamManipulator qSetPadChar(QChar ch);
+QTextStreamManipulator qSetRealNumberPrecision(int precision);
diff --git a/sip/QtCore/qthread.sip b/sip/QtCore/qthread.sip
new file mode 100644
index 0000000..69a3da4
--- /dev/null
+++ b/sip/QtCore/qthread.sip
@@ -0,0 +1,90 @@
+// qthread.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QThread : QObject
+{
+%TypeHeaderCode
+#include <qthread.h>
+%End
+
+public:
+    static QThread *currentThread();
+    static Qt::HANDLE currentThreadId();
+    static int idealThreadCount();
+    static void yieldCurrentThread() /ReleaseGIL/;
+    explicit QThread(QObject *parent /TransferThis/ = 0);
+    virtual ~QThread();
+
+    enum Priority
+    {
+        IdlePriority,
+        LowestPriority,
+        LowPriority,
+        NormalPriority,
+        HighPriority,
+        HighestPriority,
+        TimeCriticalPriority,
+        InheritPriority,
+    };
+
+    bool isFinished() const;
+    bool isRunning() const;
+    void setPriority(QThread::Priority priority);
+    QThread::Priority priority() const;
+    void setStackSize(uint stackSize);
+    uint stackSize() const;
+    void exit(int returnCode = 0) /ReleaseGIL/;
+
+public slots:
+    void start(QThread::Priority priority = QThread::InheritPriority) /ReleaseGIL/;
+    void terminate();
+    void quit();
+
+public:
+    bool wait(unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
+
+signals:
+    void started();
+    void finished();
+
+protected:
+    virtual void run() /NewThread/;
+    int exec() /PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    int exec() /ReleaseGIL/;
+%End
+    static void setTerminationEnabled(bool enabled = true);
+
+public:
+    virtual bool event(QEvent *event);
+    static void sleep(unsigned long) /ReleaseGIL/;
+    static void msleep(unsigned long) /ReleaseGIL/;
+    static void usleep(unsigned long) /ReleaseGIL/;
+    QAbstractEventDispatcher *eventDispatcher() const;
+    void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher /Transfer/);
+%If (Qt_5_2_0 -)
+    void requestInterruption();
+%End
+%If (Qt_5_2_0 -)
+    bool isInterruptionRequested() const;
+%End
+};
diff --git a/sip/QtCore/qthreadpool.sip b/sip/QtCore/qthreadpool.sip
new file mode 100644
index 0000000..743c83b
--- /dev/null
+++ b/sip/QtCore/qthreadpool.sip
@@ -0,0 +1,66 @@
+// qthreadpool.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QThreadPool : QObject
+{
+%TypeHeaderCode
+#include <qthreadpool.h>
+%End
+
+public:
+    QThreadPool(QObject *parent /TransferThis/ = 0);
+    virtual ~QThreadPool();
+    static QThreadPool *globalInstance() /KeepReference/;
+    void start(QRunnable *runnable /GetWrapper/, int priority = 0) /ReleaseGIL/;
+%MethodCode
+        // We have to handle the object ownership manually.
+        if (a0->autoDelete())
+            sipTransferTo(a0Wrapper, sipSelf);
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->start(a0, a1);
+        Py_END_ALLOW_THREADS
+%End
+
+    bool tryStart(QRunnable *runnable /GetWrapper/) /ReleaseGIL/;
+%MethodCode
+        // We have to handle the object ownership manually.
+        if (a0->autoDelete())
+            sipTransferTo(a0Wrapper, sipSelf);
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipRes = sipCpp->tryStart(a0);
+        Py_END_ALLOW_THREADS
+%End
+
+    int expiryTimeout() const;
+    void setExpiryTimeout(int expiryTimeout);
+    int maxThreadCount() const;
+    void setMaxThreadCount(int maxThreadCount);
+    int activeThreadCount() const;
+    void reserveThread();
+    void releaseThread();
+    bool waitForDone(int msecs = -1) /ReleaseGIL/;
+%If (Qt_5_2_0 -)
+    void clear();
+%End
+};
diff --git a/sip/QtCore/qtimeline.sip b/sip/QtCore/qtimeline.sip
new file mode 100644
index 0000000..fa00f71
--- /dev/null
+++ b/sip/QtCore/qtimeline.sip
@@ -0,0 +1,100 @@
+// qtimeline.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTimeLine : QObject
+{
+%TypeHeaderCode
+#include <qtimeline.h>
+%End
+
+public:
+    enum CurveShape
+    {
+        EaseInCurve,
+        EaseOutCurve,
+        EaseInOutCurve,
+        LinearCurve,
+        SineCurve,
+        CosineCurve,
+    };
+
+    enum Direction
+    {
+        Forward,
+        Backward,
+    };
+
+    enum State
+    {
+        NotRunning,
+        Paused,
+        Running,
+    };
+
+    QTimeLine(int duration = 1000, QObject *parent /TransferThis/ = 0);
+    virtual ~QTimeLine();
+    QTimeLine::State state() const;
+    int loopCount() const;
+    void setLoopCount(int count);
+    QTimeLine::Direction direction() const;
+    void setDirection(QTimeLine::Direction direction);
+    int duration() const;
+    void setDuration(int duration);
+    int startFrame() const;
+    void setStartFrame(int frame);
+    int endFrame() const;
+    void setEndFrame(int frame);
+    void setFrameRange(int startFrame, int endFrame);
+    int updateInterval() const;
+    void setUpdateInterval(int interval);
+    QTimeLine::CurveShape curveShape() const;
+    void setCurveShape(QTimeLine::CurveShape shape);
+    int currentTime() const;
+    int currentFrame() const;
+    qreal currentValue() const;
+    int frameForTime(int msec) const;
+    virtual qreal valueForTime(int msec) const;
+
+public slots:
+    void resume();
+    void setCurrentTime(int msec);
+    void setPaused(bool paused);
+    void start();
+    void stop();
+    void toggleDirection();
+
+signals:
+    void finished();
+    void frameChanged(int);
+    void stateChanged(QTimeLine::State newState);
+    void valueChanged(qreal x);
+
+protected:
+    virtual void timerEvent(QTimerEvent *event);
+
+public:
+    QEasingCurve easingCurve() const;
+    void setEasingCurve(const QEasingCurve &curve);
+
+private:
+    QTimeLine(const QTimeLine &);
+};
diff --git a/sip/QtCore/qtimer.sip b/sip/QtCore/qtimer.sip
new file mode 100644
index 0000000..2c0f135
--- /dev/null
+++ b/sip/QtCore/qtimer.sip
@@ -0,0 +1,86 @@
+// qtimer.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTimer : QObject
+{
+%TypeHeaderCode
+#include <qtimer.h>
+%End
+
+public:
+    explicit QTimer(QObject *parent /TransferThis/ = 0);
+    virtual ~QTimer();
+    bool isActive() const;
+    int timerId() const;
+    void setInterval(int msec);
+    int interval() const;
+    bool isSingleShot() const;
+    void setSingleShot(bool asingleShot);
+    static void singleShot(int msec, SIP_PYOBJECT slot /DocType="callable-or-signal"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_get_connection_parts(a1, 0, "()", true, &receiver, slot_signature)) == sipErrorNone)
+        {
+            QTimer::singleShot(a0, receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(1, a1);
+        }
+%End
+
+    static void singleShot(int msec, Qt::TimerType timerType, SIP_PYOBJECT slot /DocType="callable-or-signal"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_get_connection_parts(a2, 0, "()", true, &receiver, slot_signature)) == sipErrorNone)
+        {
+            QTimer::singleShot(a0, a1, receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(2, a2);
+        }
+%End
+
+public slots:
+    void start(int msec);
+    void start();
+    void stop();
+
+signals:
+    void timeout();
+
+protected:
+    virtual void timerEvent(QTimerEvent *);
+
+public:
+    void setTimerType(Qt::TimerType atype);
+    Qt::TimerType timerType() const;
+    int remainingTime() const;
+
+private:
+    QTimer(const QTimer &);
+};
diff --git a/sip/QtCore/qtimezone.sip b/sip/QtCore/qtimezone.sip
new file mode 100644
index 0000000..bf73cc5
--- /dev/null
+++ b/sip/QtCore/qtimezone.sip
@@ -0,0 +1,111 @@
+// qtimezone.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+%ModuleCode
+#include <qtimezone.h>
+%End
+%End
+
+%If (Qt_5_2_0 -)
+
+class QTimeZone
+{
+%TypeHeaderCode
+#include <qtimezone.h>
+%End
+
+public:
+    enum TimeType
+    {
+        StandardTime,
+        DaylightTime,
+        GenericTime,
+    };
+
+    enum NameType
+    {
+        DefaultName,
+        LongName,
+        ShortName,
+        OffsetName,
+    };
+
+    struct OffsetData
+    {
+%TypeHeaderCode
+#include <qtimezone.h>
+%End
+
+        QString abbreviation;
+        QDateTime atUtc;
+        int offsetFromUtc;
+        int standardTimeOffset;
+        int daylightTimeOffset;
+    };
+
+    typedef QVector<QTimeZone::OffsetData> OffsetDataList;
+    QTimeZone();
+    explicit QTimeZone(const QByteArray &ianaId);
+    explicit QTimeZone(int offsetSeconds);
+    QTimeZone(const QByteArray &zoneId, int offsetSeconds, const QString &name, const QString &abbreviation, QLocale::Country country = QLocale::AnyCountry, const QString &comment = QString());
+    QTimeZone(const QTimeZone &other);
+    ~QTimeZone();
+    void swap(QTimeZone &other);
+    bool operator==(const QTimeZone &other) const;
+    bool operator!=(const QTimeZone &other) const;
+    bool isValid() const;
+    QByteArray id() const;
+    QLocale::Country country() const;
+    QString comment() const;
+    QString displayName(const QDateTime &atDateTime, QTimeZone::NameType nameType = QTimeZone::DefaultName, const QLocale &locale = QLocale()) const;
+    QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType = QTimeZone::DefaultName, const QLocale &locale = QLocale()) const;
+    QString abbreviation(const QDateTime &atDateTime) const;
+    int offsetFromUtc(const QDateTime &atDateTime) const;
+    int standardTimeOffset(const QDateTime &atDateTime) const;
+    int daylightTimeOffset(const QDateTime &atDateTime) const;
+    bool hasDaylightTime() const;
+    bool isDaylightTime(const QDateTime &atDateTime) const;
+    QTimeZone::OffsetData offsetData(const QDateTime &forDateTime) const;
+    bool hasTransitions() const;
+    QTimeZone::OffsetData nextTransition(const QDateTime &afterDateTime) const;
+    QTimeZone::OffsetData previousTransition(const QDateTime &beforeDateTime) const;
+    QVector<QTimeZone::OffsetData> transitions(const QDateTime &fromDateTime, const QDateTime &toDateTime) const;
+    static QByteArray systemTimeZoneId();
+    static bool isTimeZoneIdAvailable(const QByteArray &ianaId);
+    static QList<QByteArray> availableTimeZoneIds();
+    static QList<QByteArray> availableTimeZoneIds(QLocale::Country country /Constrained/);
+    static QList<QByteArray> availableTimeZoneIds(int offsetSeconds);
+    static QByteArray ianaIdToWindowsId(const QByteArray &ianaId);
+    static QByteArray windowsIdToDefaultIanaId(const QByteArray &windowsId);
+    static QByteArray windowsIdToDefaultIanaId(const QByteArray &windowsId, QLocale::Country country);
+    static QList<QByteArray> windowsIdToIanaIds(const QByteArray &windowsId);
+    static QList<QByteArray> windowsIdToIanaIds(const QByteArray &windowsId, QLocale::Country country);
+};
+
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator<<(QDataStream &ds, const QTimeZone &tz /Constrained/) /ReleaseGIL/;
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator>>(QDataStream &ds, QTimeZone &tz /Constrained/) /ReleaseGIL/;
+%End
diff --git a/sip/QtCore/qtranslator.sip b/sip/QtCore/qtranslator.sip
new file mode 100644
index 0000000..b4c467c
--- /dev/null
+++ b/sip/QtCore/qtranslator.sip
@@ -0,0 +1,40 @@
+// qtranslator.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTranslator : QObject
+{
+%TypeHeaderCode
+#include <qtranslator.h>
+%End
+
+public:
+    explicit QTranslator(QObject *parent /TransferThis/ = 0);
+    virtual ~QTranslator();
+    virtual QString translate(const char *context, const char *sourceText, const char *disambiguation = 0, int n = -1) const;
+    virtual bool isEmpty() const;
+    bool load(const QString &fileName, const QString &directory /DocValue="''"/ = QString(), const QString &searchDelimiters /DocValue="''"/ = QString(), const QString &suffix /DocValue="''"/ = QString()) /ReleaseGIL/;
+    bool load(const QLocale &locale, const QString &fileName, const QString &prefix /DocValue="''"/ = QString(), const QString &directory /DocValue="''"/ = QString(), const QString &suffix /DocValue="''"/ = QString()) /ReleaseGIL/;
+    bool load(const uchar *data /Array/, int len /ArraySize/, const QString &directory = QString()) /PyName=loadFromData,ReleaseGIL/;
+
+private:
+    QTranslator(const QTranslator &);
+};
diff --git a/sip/QtCore/qurl.sip b/sip/QtCore/qurl.sip
new file mode 100644
index 0000000..b1e9c64
--- /dev/null
+++ b/sip/QtCore/qurl.sip
@@ -0,0 +1,297 @@
+// qurl.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qurl.h>
+%End
+
+// Template definition for QUrlTwoFlags.
+template<E1, E2>
+class QUrlTwoFlags /PyQtFlags=0x1/
+{
+    // These are handled by the %ConvertToTypeCode.
+    //QUrlTwoFlags(E1);
+    //QUrlTwoFlags(E2);
+    QUrlTwoFlags();
+
+    QUrlTwoFlags &operator&=(int mask);
+    //QUrlTwoFlags &operator&=(uint mask);
+    QUrlTwoFlags &operator|=(QUrlTwoFlags f);
+    //QUrlTwoFlags &operator|=(E1 f);
+    //QUrlTwoFlags &operator|=(E2 f);
+    QUrlTwoFlags &operator^=(QUrlTwoFlags f);
+    //QUrlTwoFlags &operator^=(E1 f);
+    //QUrlTwoFlags &operator^=(E2 f);
+
+    operator int() const;
+
+    QUrlTwoFlags operator|(QUrlTwoFlags f) const;
+    //QUrlTwoFlags operator|(E1 f) const;
+    //QUrlTwoFlags operator|(E2 f) const;
+    QUrlTwoFlags operator^(QUrlTwoFlags f) const;
+    //QUrlTwoFlags operator^(E1 f) const;
+    //QUrlTwoFlags operator^(E2 f) const;
+    QUrlTwoFlags operator&(int mask) const;
+    //QUrlTwoFlags operator&(uint mask) const;
+    //QUrlTwoFlags operator&(E1 f) const;
+    //QUrlTwoFlags operator&(E2 f) const;
+    QUrlTwoFlags operator~() const;
+    
+    // These are necessary to prevent Python comparing object IDs.
+    bool operator==(const QUrlTwoFlags &f) const;
+%MethodCode
+        sipRes = (sipCpp->operator int() == a0->operator int());
+%End
+
+    bool operator!=(const QUrlTwoFlags &f) const;
+%MethodCode
+        sipRes = (sipCpp->operator int() != a0->operator int());
+%End
+
+    int __bool__() const;
+%MethodCode
+        sipRes = (sipCpp->operator int() != 0);
+%End
+
+%ConvertToTypeCode
+// Allow an instance of the base enums whenever a QUrlTwoFlags is expected.
+
+if (sipIsErr == NULL)
+    return (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_E1)) ||
+            PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_E2)) ||
+            sipCanConvertToType(sipPy, sipType_QUrlTwoFlags, SIP_NO_CONVERTORS));
+
+if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_E1)) ||
+     PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_E2)))
+{
+    *sipCppPtr = new QUrlTwoFlags(int(SIPLong_AsLong(sipPy)));
+
+    return sipGetState(sipTransferObj);
+}
+
+*sipCppPtr = reinterpret_cast<QUrlTwoFlags *>(sipConvertToType(sipPy, sipType_QUrlTwoFlags, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+return 0;
+%End
+};
+
+class QUrl
+{
+%TypeHeaderCode
+#include <qurl.h>
+%End
+
+%TypeCode
+#include <QHash>
+%End
+
+public:
+    enum ParsingMode
+    {
+        TolerantMode,
+        StrictMode,
+        DecodedMode,
+    };
+
+    QUrl();
+    QUrl(const QString &url, QUrl::ParsingMode mode = QUrl::TolerantMode);
+    QUrl(const QUrl &copy);
+    ~QUrl();
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        PyObject *uni = qpycore_PyObject_FromQString(sipCpp->toString());
+        
+        if (uni)
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QUrl(%R)", uni);
+        #else
+            sipRes = PyString_FromFormat("PyQt5.QtCore.QUrl(");
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(uni));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        
+            Py_DECREF(uni);
+        }
+%End
+
+    enum UrlFormattingOption
+    {
+        None,
+        RemoveScheme,
+        RemovePassword,
+        RemoveUserInfo,
+        RemovePort,
+        RemoveAuthority,
+        RemovePath,
+        RemoveQuery,
+        RemoveFragment,
+        PreferLocalFile,
+        StripTrailingSlash,
+%If (Qt_5_2_0 -)
+        RemoveFilename,
+%End
+%If (Qt_5_2_0 -)
+        NormalizePathSegments,
+%End
+    };
+
+    typedef QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> FormattingOptions;
+
+    enum ComponentFormattingOption
+    {
+        PrettyDecoded,
+        EncodeSpaces,
+        EncodeUnicode,
+        EncodeDelimiters,
+        EncodeReserved,
+        DecodeReserved,
+        FullyEncoded,
+        FullyDecoded,
+    };
+
+    typedef QFlags<QUrl::ComponentFormattingOption> ComponentFormattingOptions;
+    QString url(QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+    void setUrl(const QString &url, QUrl::ParsingMode mode = QUrl::TolerantMode);
+    bool isValid() const;
+    bool isEmpty() const;
+    void clear();
+    void setScheme(const QString &scheme);
+    QString scheme() const;
+    void setAuthority(const QString &authority, QUrl::ParsingMode mode = QUrl::TolerantMode);
+    QString authority(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+    void setUserInfo(const QString &userInfo, QUrl::ParsingMode mode = QUrl::TolerantMode);
+    QString userInfo(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+%If (Qt_5_2_0 -)
+    void setUserName(const QString &userName, QUrl::ParsingMode mode = QUrl::DecodedMode);
+%End
+%If (- Qt_5_2_0)
+    void setUserName(const QString &userName, QUrl::ParsingMode mode = QUrl::TolerantMode);
+%End
+%If (Qt_5_2_0 -)
+    QString userName(QFlags<QUrl::ComponentFormattingOption> options = QUrl::FullyDecoded) const;
+%End
+%If (- Qt_5_2_0)
+    QString userName(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+%End
+%If (Qt_5_2_0 -)
+    void setPassword(const QString &password, QUrl::ParsingMode mode = QUrl::DecodedMode);
+%End
+%If (- Qt_5_2_0)
+    void setPassword(const QString &password, QUrl::ParsingMode mode = QUrl::TolerantMode);
+%End
+%If (Qt_5_2_0 -)
+    QString password(QFlags<QUrl::ComponentFormattingOption> options = QUrl::FullyDecoded) const;
+%End
+%If (- Qt_5_2_0)
+    QString password(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+%End
+%If (Qt_5_2_0 -)
+    void setHost(const QString &host, QUrl::ParsingMode mode = QUrl::DecodedMode);
+%End
+%If (- Qt_5_2_0)
+    void setHost(const QString &host, QUrl::ParsingMode mode = QUrl::TolerantMode);
+%End
+%If (Qt_5_2_0 -)
+    QString host(QFlags<QUrl::ComponentFormattingOption> options = QUrl::FullyDecoded) const;
+%End
+%If (- Qt_5_2_0)
+    QString host(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+%End
+    void setPort(int port);
+    int port(int defaultPort = -1) const;
+%If (Qt_5_2_0 -)
+    void setPath(const QString &path, QUrl::ParsingMode mode = QUrl::DecodedMode);
+%End
+%If (- Qt_5_2_0)
+    void setPath(const QString &path, QUrl::ParsingMode mode = QUrl::TolerantMode);
+%End
+%If (Qt_5_2_0 -)
+    QString path(QFlags<QUrl::ComponentFormattingOption> options = QUrl::FullyDecoded) const;
+%End
+%If (- Qt_5_2_0)
+    QString path(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+%End
+    void setFragment(const QString &fragment, QUrl::ParsingMode mode = QUrl::TolerantMode);
+    QString fragment(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+    QUrl resolved(const QUrl &relative) const;
+    bool isRelative() const;
+    bool isParentOf(const QUrl &url) const;
+    static QUrl fromLocalFile(const QString &localfile);
+    QString toLocalFile() const;
+    QString toString(QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+    QByteArray toEncoded(QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> options = QUrl::FullyEncoded) const;
+    static QUrl fromEncoded(const QByteArray &u, QUrl::ParsingMode mode = QUrl::TolerantMode);
+    void detach();
+    bool isDetached() const;
+    bool operator<(const QUrl &url) const;
+    bool operator==(const QUrl &url) const;
+    bool operator!=(const QUrl &url) const;
+    static QString fromPercentEncoding(const QByteArray &);
+    static QByteArray toPercentEncoding(const QString &input, const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray());
+    bool hasQuery() const;
+    bool hasFragment() const;
+    QString errorString() const;
+    static QString fromAce(const QByteArray &);
+    static QByteArray toAce(const QString &);
+    static QStringList idnWhitelist();
+    static void setIdnWhitelist(const QStringList &);
+    static QUrl fromUserInput(const QString &userInput);
+    void swap(QUrl &other);
+%If (Qt_5_2_0 -)
+    QString topLevelDomain(QFlags<QUrl::ComponentFormattingOption> options = QUrl::FullyDecoded) const;
+%End
+%If (- Qt_5_2_0)
+    QString topLevelDomain(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+%End
+    bool isLocalFile() const;
+    QString toDisplayString(QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+    void setQuery(const QString &query, QUrl::ParsingMode mode = QUrl::TolerantMode);
+    void setQuery(const QUrlQuery &query);
+    QString query(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+%If (Qt_5_1_0 -)
+    static QStringList toStringList(const QList<QUrl> &uris, QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded);
+%End
+%If (Qt_5_1_0 -)
+    static QList<QUrl> fromStringList(const QStringList &uris, QUrl::ParsingMode mode = QUrl::TolerantMode);
+%End
+%If (Qt_5_2_0 -)
+    QUrl adjusted(QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> options) const;
+%End
+%If (Qt_5_2_0 -)
+    QString fileName(QFlags<QUrl::ComponentFormattingOption> options = QUrl::FullyDecoded) const;
+%End
+%If (Qt_5_2_0 -)
+    bool matches(const QUrl &url, QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> options) const;
+%End
+};
+
+QFlags<QUrl::ComponentFormattingOption> operator|(QUrl::ComponentFormattingOption f1, QFlags<QUrl::ComponentFormattingOption> f2);
+QDataStream &operator<<(QDataStream &, const QUrl & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QUrl & /Constrained/) /ReleaseGIL/;
+QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> operator|(QUrl::UrlFormattingOption f1, QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> f2);
+QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> operator|(QUrl::ComponentFormattingOption f, QUrlTwoFlags<QUrl::UrlFormattingOption, QUrl::ComponentFormattingOption> i);
diff --git a/sip/QtCore/qurlquery.sip b/sip/QtCore/qurlquery.sip
new file mode 100644
index 0000000..ec624db
--- /dev/null
+++ b/sip/QtCore/qurlquery.sip
@@ -0,0 +1,57 @@
+// qurlquery.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QUrlQuery
+{
+%TypeHeaderCode
+#include <qurlquery.h>
+%End
+
+public:
+    QUrlQuery();
+    explicit QUrlQuery(const QUrl &url);
+    explicit QUrlQuery(const QString &queryString);
+    QUrlQuery(const QUrlQuery &other);
+    ~QUrlQuery();
+    bool operator==(const QUrlQuery &other) const;
+    bool operator!=(const QUrlQuery &other) const;
+    void swap(QUrlQuery &other);
+    bool isEmpty() const;
+    bool isDetached() const;
+    void clear();
+    QString query(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+    void setQuery(const QString &queryString);
+    QString toString(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+    void setQueryDelimiters(QChar valueDelimiter, QChar pairDelimiter);
+    QChar queryValueDelimiter() const;
+    QChar queryPairDelimiter() const;
+    void setQueryItems(const QList<QPair<QString, QString>> &query);
+    QList<QPair<QString, QString>> queryItems(QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+    bool hasQueryItem(const QString &key) const;
+    void addQueryItem(const QString &key, const QString &value);
+    void removeQueryItem(const QString &key);
+    QString queryItemValue(const QString &key, QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+    QStringList allQueryItemValues(const QString &key, QFlags<QUrl::ComponentFormattingOption> options = QUrl::PrettyDecoded) const;
+    void removeAllQueryItems(const QString &key);
+    static QChar defaultQueryValueDelimiter();
+    static QChar defaultQueryPairDelimiter();
+};
diff --git a/sip/QtCore/quuid.sip b/sip/QtCore/quuid.sip
new file mode 100644
index 0000000..25cdaf5
--- /dev/null
+++ b/sip/QtCore/quuid.sip
@@ -0,0 +1,100 @@
+// quuid.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <quuid.h>
+%End
+
+class QUuid
+{
+%TypeHeaderCode
+#include <quuid.h>
+%End
+
+public:
+    enum Variant
+    {
+        VarUnknown,
+        NCS,
+        DCE,
+        Microsoft,
+        Reserved,
+    };
+
+    enum Version
+    {
+        VerUnknown,
+        Time,
+        EmbeddedPOSIX,
+        Md5,
+        Name,
+        Random,
+        Sha1,
+    };
+
+    QUuid();
+    QUuid(uint l, ushort w1, ushort w2, uchar b1 /PyInt/, uchar b2 /PyInt/, uchar b3 /PyInt/, uchar b4 /PyInt/, uchar b5 /PyInt/, uchar b6 /PyInt/, uchar b7 /PyInt/, uchar b8 /PyInt/);
+    QUuid(const QString &);
+    QUuid(const QByteArray &);
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        PyObject *uni = qpycore_PyObject_FromQString(sipCpp->toString());
+        
+        if (uni)
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtCore.QUuid(%R)", uni);
+        #else
+            sipRes = PyString_FromFormat("PyQt5.QtCore.QUuid(");
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(uni));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        
+            Py_DECREF(uni);
+        }
+%End
+
+    QString toString() const;
+    bool isNull() const;
+    bool operator==(const QUuid &orig) const;
+    bool operator!=(const QUuid &orig) const;
+    bool operator<(const QUuid &other) const;
+    bool operator>(const QUuid &other) const;
+    static QUuid createUuid();
+    static QUuid createUuidV3(const QUuid &ns, const QByteArray &baseData);
+    static QUuid createUuidV5(const QUuid &ns, const QByteArray &baseData);
+    static QUuid createUuidV3(const QUuid &ns, const QString &baseData);
+    static QUuid createUuidV5(const QUuid &ns, const QString &baseData);
+    QUuid::Variant variant() const;
+    QUuid::Version version() const;
+    QByteArray toByteArray() const;
+    QByteArray toRfc4122() const;
+    static QUuid fromRfc4122(const QByteArray &);
+};
+
+QDataStream &operator<<(QDataStream &, const QUuid & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QUuid & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtCore/qvariant.sip b/sip/QtCore/qvariant.sip
new file mode 100644
index 0000000..b8384c0
--- /dev/null
+++ b/sip/QtCore/qvariant.sip
@@ -0,0 +1,180 @@
+// qvariant.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qvariant.h>
+%End
+
+class QVariant /AllowNone/
+{
+%TypeHeaderCode
+#include <qvariant.h>
+%End
+
+%ConvertToTypeCode
+if (sipIsErr == NULL)
+    // We can convert everything to a QVariant.
+    return 1;
+
+// If it is already a QVariant then just return it.
+if (Py_TYPE(sipPy) == sipTypeAsPyTypeObject(sipType_QVariant))
+{
+    *sipCppPtr = reinterpret_cast<QVariant *>(sipConvertToType(sipPy,
+            sipType_QVariant, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+    return 0;
+}
+
+// Convert it to a QVariant.
+QVariant var = qpycore_PyObject_AsQVariant(sipPy, sipIsErr);
+
+if (*sipIsErr)
+    return 0;
+
+*sipCppPtr = new QVariant(var);
+
+return sipGetState(sipTransferObj);
+%End
+
+%ConvertFromTypeCode
+return qpycore_PyObject_FromQVariant(*sipCpp);
+%End
+
+public:
+    enum Type
+    {
+        Invalid,
+        Bool,
+        Int,
+        UInt,
+        LongLong,
+        ULongLong,
+        Double,
+        Char,
+        Map,
+        List,
+        String,
+        StringList,
+        ByteArray,
+        BitArray,
+        Date,
+        Time,
+        DateTime,
+        Url,
+        Locale,
+        Rect,
+        RectF,
+        Size,
+        SizeF,
+        Line,
+        LineF,
+        Point,
+        PointF,
+        RegExp,
+        Font,
+        Pixmap,
+        Brush,
+        Color,
+        Palette,
+        Icon,
+        Image,
+        Polygon,
+        Region,
+        Bitmap,
+        Cursor,
+        SizePolicy,
+        KeySequence,
+        Pen,
+        TextLength,
+        TextFormat,
+        Matrix,
+        Transform,
+        Hash,
+        Matrix4x4,
+        Vector2D,
+        Vector3D,
+        Vector4D,
+        Quaternion,
+        EasingCurve,
+        Uuid,
+        ModelIndex,
+        PolygonF,
+        RegularExpression,
+        UserType,
+    };
+
+    QVariant();
+    QVariant(QVariant::Type type /Constrained/);
+    QVariant(SIP_PYOBJECT);
+%MethodCode
+        int is_err = 0;
+        QVariant var = qpycore_PyObject_AsQVariant(a0, &is_err);
+        
+        if (is_err)
+            sipCpp = 0;
+        else
+            sipCpp = new QVariant(var);
+%End
+
+    QVariant(const QVariant &other);
+    ~QVariant();
+    SIP_PYOBJECT value() const;
+%MethodCode
+        sipRes = qpycore_PyObject_FromQVariant(*sipCpp);
+%End
+
+    QVariant::Type type() const;
+    int userType() const;
+    const char *typeName() const;
+    bool canConvert(int targetTypeId) const;
+    bool convert(int targetTypeId);
+    bool isValid() const;
+    bool isNull() const;
+    void clear();
+    void load(QDataStream &ds) /ReleaseGIL/;
+    void save(QDataStream &ds) const /ReleaseGIL/;
+    static const char *typeToName(int typeId);
+    static QVariant::Type nameToType(const char *name);
+    bool operator==(const QVariant &v) const;
+    bool operator!=(const QVariant &v) const;
+    void swap(QVariant &other);
+%If (Qt_5_2_0 -)
+    bool operator<(const QVariant &v) const;
+%End
+%If (Qt_5_2_0 -)
+    bool operator<=(const QVariant &v) const;
+%End
+%If (Qt_5_2_0 -)
+    bool operator>(const QVariant &v) const;
+%End
+%If (Qt_5_2_0 -)
+    bool operator>=(const QVariant &v) const;
+%End
+};
+
+typedef QList<QVariant> QVariantList /DocType="list-of-object"/;
+typedef QHash<QString, QVariant> QVariantHash /DocType="dict-of-str-object"/;
+typedef QMap<QString, QVariant> QVariantMap /DocType="dict-of-str-object"/;
+QDataStream &operator>>(QDataStream &s, QVariant &p /Constrained/) /ReleaseGIL/;
+QDataStream &operator<<(QDataStream &s, const QVariant &p /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &s, QVariant::Type &p /Constrained,In/) /ReleaseGIL/;
+QDataStream &operator<<(QDataStream &s, const QVariant::Type p /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtCore/qvariantanimation.sip b/sip/QtCore/qvariantanimation.sip
new file mode 100644
index 0000000..4c865c5
--- /dev/null
+++ b/sip/QtCore/qvariantanimation.sip
@@ -0,0 +1,60 @@
+// qvariantanimation.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QVariantAnimation : QAbstractAnimation
+{
+%TypeHeaderCode
+#include <qvariantanimation.h>
+%End
+
+    typedef QVector<QPair<qreal, QVariant>> KeyValues;
+
+public:
+    QVariantAnimation(QObject *parent /TransferThis/ = 0);
+    virtual ~QVariantAnimation();
+    QVariant startValue() const;
+    void setStartValue(const QVariant &value);
+    QVariant endValue() const;
+    void setEndValue(const QVariant &value);
+    QVariant keyValueAt(qreal step) const;
+    void setKeyValueAt(qreal step, const QVariant &value);
+    KeyValues keyValues() const;
+    void setKeyValues(const KeyValues &values);
+    QVariant currentValue() const;
+    virtual int duration() const;
+    void setDuration(int msecs);
+    QEasingCurve easingCurve() const;
+    void setEasingCurve(const QEasingCurve &easing);
+
+signals:
+    void valueChanged(const QVariant &value);
+
+protected:
+    virtual bool event(QEvent *event);
+    virtual void updateCurrentTime(int);
+    virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
+    virtual void updateCurrentValue(const QVariant &value);
+    virtual QVariant interpolated(const QVariant &from, const QVariant &to, qreal progress) const;
+
+private:
+    QVariantAnimation(const QVariantAnimation &);
+};
diff --git a/sip/QtCore/qwaitcondition.sip b/sip/QtCore/qwaitcondition.sip
new file mode 100644
index 0000000..2a4c981
--- /dev/null
+++ b/sip/QtCore/qwaitcondition.sip
@@ -0,0 +1,39 @@
+// qwaitcondition.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWaitCondition
+{
+%TypeHeaderCode
+#include <qwaitcondition.h>
+%End
+
+public:
+    QWaitCondition();
+    ~QWaitCondition();
+    bool wait(QMutex *mutex, unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
+    bool wait(QReadWriteLock *readWriteLock, unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
+    void wakeOne();
+    void wakeAll();
+
+private:
+    QWaitCondition(const QWaitCondition &);
+};
diff --git a/sip/QtCore/qwineventnotifier.sip b/sip/QtCore/qwineventnotifier.sip
new file mode 100644
index 0000000..c18008a
--- /dev/null
+++ b/sip/QtCore/qwineventnotifier.sip
@@ -0,0 +1,51 @@
+// This is the SIP specification of the QWinEventNotifier class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (WS_WIN)
+
+class QWinEventNotifier: QObject
+{
+%TypeHeaderCode
+#include <qwineventnotifier.h>
+%End
+
+public:
+    explicit QWinEventNotifier(QObject *parent /TransferThis/ = 0);
+    explicit QWinEventNotifier(Qt::HANDLE hEvent, QObject *parent /TransferThis/ = 0);
+    ~QWinEventNotifier();
+
+    Qt::HANDLE handle() const;
+    bool isEnabled() const;
+    void setHandle(Qt::HANDLE hEvent);
+
+public slots:
+    void setEnabled(bool enable);
+
+signals:
+    void activated(Qt::HANDLE hEvent);
+
+protected:
+    bool event(QEvent *e);
+
+private:
+    QWinEventNotifier(const QWinEventNotifier &);
+};
+
+%End
diff --git a/sip/QtCore/qxmlstream.sip b/sip/QtCore/qxmlstream.sip
new file mode 100644
index 0000000..f123641
--- /dev/null
+++ b/sip/QtCore/qxmlstream.sip
@@ -0,0 +1,456 @@
+// qxmlstream.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtCore Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QXmlStreamAttribute
+{
+%TypeHeaderCode
+#include <qxmlstream.h>
+%End
+
+public:
+    QXmlStreamAttribute();
+    QXmlStreamAttribute(const QString &qualifiedName, const QString &value);
+    QXmlStreamAttribute(const QString &namespaceUri, const QString &name, const QString &value);
+    QXmlStreamAttribute(const QXmlStreamAttribute &);
+    ~QXmlStreamAttribute();
+    QStringRef namespaceUri() const;
+    QStringRef name() const;
+    QStringRef qualifiedName() const;
+    QStringRef prefix() const;
+    QStringRef value() const;
+    bool isDefault() const;
+    bool operator==(const QXmlStreamAttribute &other) const;
+    bool operator!=(const QXmlStreamAttribute &other) const;
+};
+
+class QXmlStreamAttributes
+{
+%TypeHeaderCode
+#include <qxmlstream.h>
+%End
+
+public:
+    QXmlStreamAttributes();
+    QStringRef value(const QString &namespaceUri, const QString &name) const;
+    QStringRef value(const QString &qualifiedName) const;
+    void append(const QString &namespaceUri, const QString &name, const QString &value);
+    void append(const QString &qualifiedName, const QString &value);
+    void append(const QXmlStreamAttribute &attribute);
+    bool hasAttribute(const QString &qualifiedName) const;
+    bool hasAttribute(const QString &namespaceUri, const QString &name) const;
+// Methods inherited from QVector<QXmlStreamAttribute> and Python special methods.
+// Keep in sync with QPolygon and QPolygonF.
+
+// This is picked up with "using" by QXmlStreamAttributes.
+//void append(const QXmlStreamAttribute &value);
+
+const QXmlStreamAttribute &at(int i) const;
+void clear();
+bool contains(const QXmlStreamAttribute &value) const;
+int count(const QXmlStreamAttribute &value) const;
+int count() const /__len__/;
+void *data();
+
+// Note the Qt return value is discarded as it would require handwritten code
+// and seems pretty useless.
+void fill(const QXmlStreamAttribute &value, int size = -1);
+
+QXmlStreamAttribute &first();
+int indexOf(const QXmlStreamAttribute &value, int from = 0) const;
+void insert(int i, const QXmlStreamAttribute &value);
+bool isEmpty() const;
+QXmlStreamAttribute &last();
+int lastIndexOf(const QXmlStreamAttribute &value, int from = -1) const;
+
+// Note the Qt return type is QVector<QXmlStreamAttribute>.  We can't do the
+// usual trick because there is no QXmlStreamAttributes ctor that takes a
+// QVector<QXmlStreamAttribute> argument.  We could use handwritten code but we
+// don't bother.
+//QXmlStreamAttributes mid(int pos, int length = -1) const;
+
+void prepend(const QXmlStreamAttribute &value);
+void remove(int i);
+void remove(int i, int count);
+void replace(int i, const QXmlStreamAttribute &value);
+int size() const;
+
+// These are hidden by other implementations in QXmlStreamAttributes.
+//QXmlStreamAttribute value(int i) const;
+//QXmlStreamAttribute value(int i, const QXmlStreamAttribute &defaultValue) const;
+
+bool operator!=(const QXmlStreamAttributes &other) const;
+
+// Note the Qt return type is QVector<QXmlStreamAttribute>.  We can't do the
+// usual trick because there is no QXmlStreamAttributes ctor that takes a
+// QVector<QXmlStreamAttribute> argument.  We could use handwritten code but we
+// don't bother.
+//QXmlStreamAttributes operator+(const QXmlStreamAttributes &other) const;
+
+QXmlStreamAttributes &operator+=(const QXmlStreamAttributes &other);
+QXmlStreamAttributes &operator+=(const QXmlStreamAttribute &value);
+
+bool operator==(const QXmlStreamAttributes &other) const;
+
+QXmlStreamAttribute &operator[](int i);
+%MethodCode
+SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
+
+if (idx < 0)
+    sipIsErr = 1;
+else
+    sipRes = new QXmlStreamAttribute(sipCpp->operator[]((int)idx));
+%End
+
+// Some additional Python special methods.
+
+void __setitem__(int i, const QXmlStreamAttribute &value);
+%MethodCode
+int len;
+
+len = sipCpp->count();
+
+if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0)
+    sipIsErr = 1;
+else
+    (*sipCpp)[a0] = *a1;
+%End
+
+void __setitem__(SIP_PYSLICE slice, const QXmlStreamAttributes &list);
+%MethodCode
+SIP_SSIZE_T len, start, stop, step, slicelength, i;
+
+len = sipCpp->count();
+
+#if PY_VERSION_HEX >= 0x03020000
+if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+#else
+if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+#endif
+    sipIsErr = 1;
+else
+{
+    int vlen = a1->count();
+
+    if (vlen != slicelength)
+    {
+        sipBadLengthForSlice(vlen, slicelength);
+        sipIsErr = 1;
+    }
+    else
+    {
+        QVector<QXmlStreamAttribute>::const_iterator it = a1->begin();
+
+        for (i = 0; i < slicelength; ++i)
+        {
+            (*sipCpp)[start] = *it;
+            start += step;
+            ++it;
+        }
+    }
+}
+%End
+
+void __delitem__(int i);
+%MethodCode
+int len;
+
+len = sipCpp->count();
+
+if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0)
+    sipIsErr = 1;
+else
+    sipCpp->remove(a0);
+%End
+
+void __delitem__(SIP_PYSLICE slice);
+%MethodCode
+SIP_SSIZE_T len, start, stop, step, slicelength, i;
+
+len = sipCpp->count();
+
+#if PY_VERSION_HEX >= 0x03020000
+if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+#else
+if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+#endif
+    sipIsErr = 1;
+else
+    for (i = 0; i < slicelength; ++i)
+    {
+        sipCpp->remove(start);
+        start += step - 1;
+    }
+%End
+
+QXmlStreamAttributes &operator[](SIP_PYSLICE slice);
+%MethodCode
+SIP_SSIZE_T len, start, stop, step, slicelength, i;
+
+len = sipCpp->count();
+
+#if PY_VERSION_HEX >= 0x03020000
+if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+#else
+if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+#endif
+    sipIsErr = 1;
+else
+{
+    sipRes = new QXmlStreamAttributes();
+
+    for (i = 0; i < slicelength; ++i)
+    {
+        (*sipRes) += (*sipCpp)[start];
+        start += step;
+    }
+}
+%End
+
+int __contains__(const QXmlStreamAttribute &value);
+%MethodCode
+// It looks like you can't assign QBool to int.
+sipRes = bool(sipCpp->contains(*a0));
+%End
+};
+
+class QXmlStreamNamespaceDeclaration
+{
+%TypeHeaderCode
+#include <qxmlstream.h>
+%End
+
+public:
+    QXmlStreamNamespaceDeclaration();
+    QXmlStreamNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &);
+    QXmlStreamNamespaceDeclaration(const QString &prefix, const QString &namespaceUri);
+    ~QXmlStreamNamespaceDeclaration();
+    QStringRef prefix() const;
+    QStringRef namespaceUri() const;
+    bool operator==(const QXmlStreamNamespaceDeclaration &other) const;
+    bool operator!=(const QXmlStreamNamespaceDeclaration &other) const;
+};
+
+typedef QVector<QXmlStreamNamespaceDeclaration> QXmlStreamNamespaceDeclarations;
+
+class QXmlStreamNotationDeclaration
+{
+%TypeHeaderCode
+#include <qxmlstream.h>
+%End
+
+public:
+    QXmlStreamNotationDeclaration();
+    QXmlStreamNotationDeclaration(const QXmlStreamNotationDeclaration &);
+    ~QXmlStreamNotationDeclaration();
+    QStringRef name() const;
+    QStringRef systemId() const;
+    QStringRef publicId() const;
+    bool operator==(const QXmlStreamNotationDeclaration &other) const;
+    bool operator!=(const QXmlStreamNotationDeclaration &other) const;
+};
+
+typedef QVector<QXmlStreamNotationDeclaration> QXmlStreamNotationDeclarations;
+
+class QXmlStreamEntityDeclaration
+{
+%TypeHeaderCode
+#include <qxmlstream.h>
+%End
+
+public:
+    QXmlStreamEntityDeclaration();
+    QXmlStreamEntityDeclaration(const QXmlStreamEntityDeclaration &);
+    ~QXmlStreamEntityDeclaration();
+    QStringRef name() const;
+    QStringRef notationName() const;
+    QStringRef systemId() const;
+    QStringRef publicId() const;
+    QStringRef value() const;
+    bool operator==(const QXmlStreamEntityDeclaration &other) const;
+    bool operator!=(const QXmlStreamEntityDeclaration &other) const;
+};
+
+typedef QVector<QXmlStreamEntityDeclaration> QXmlStreamEntityDeclarations;
+
+class QXmlStreamEntityResolver
+{
+%TypeHeaderCode
+#include <qxmlstream.h>
+%End
+
+public:
+    virtual ~QXmlStreamEntityResolver();
+    virtual QString resolveUndeclaredEntity(const QString &name);
+};
+
+class QXmlStreamReader
+{
+%TypeHeaderCode
+#include <qxmlstream.h>
+%End
+
+public:
+    enum TokenType
+    {
+        NoToken,
+        Invalid,
+        StartDocument,
+        EndDocument,
+        StartElement,
+        EndElement,
+        Characters,
+        Comment,
+        DTD,
+        EntityReference,
+        ProcessingInstruction,
+    };
+
+    QXmlStreamReader();
+    explicit QXmlStreamReader(QIODevice *device);
+    explicit QXmlStreamReader(const QByteArray &data);
+    explicit QXmlStreamReader(const QString &data);
+    ~QXmlStreamReader();
+    void setDevice(QIODevice *device);
+    QIODevice *device() const;
+    void addData(const QByteArray &data);
+    void addData(const QString &data);
+    void clear();
+    bool atEnd() const;
+    QXmlStreamReader::TokenType readNext();
+    QXmlStreamReader::TokenType tokenType() const;
+    QString tokenString() const;
+    void setNamespaceProcessing(bool);
+    bool namespaceProcessing() const;
+    bool isStartDocument() const;
+    bool isEndDocument() const;
+    bool isStartElement() const;
+    bool isEndElement() const;
+    bool isCharacters() const;
+    bool isWhitespace() const;
+    bool isCDATA() const;
+    bool isComment() const;
+    bool isDTD() const;
+    bool isEntityReference() const;
+    bool isProcessingInstruction() const;
+    bool isStandaloneDocument() const;
+    QStringRef documentVersion() const;
+    QStringRef documentEncoding() const;
+    qint64 lineNumber() const;
+    qint64 columnNumber() const;
+    qint64 characterOffset() const;
+    QXmlStreamAttributes attributes() const;
+
+    enum ReadElementTextBehaviour
+    {
+        ErrorOnUnexpectedElement,
+        IncludeChildElements,
+        SkipChildElements,
+    };
+
+    QString readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour = QXmlStreamReader::ErrorOnUnexpectedElement);
+    QStringRef name() const;
+    QStringRef namespaceUri() const;
+    QStringRef qualifiedName() const;
+    QStringRef prefix() const;
+    QStringRef processingInstructionTarget() const;
+    QStringRef processingInstructionData() const;
+    QStringRef text() const;
+    QXmlStreamNamespaceDeclarations namespaceDeclarations() const;
+    void addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaraction);
+    void addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclaractions);
+    QXmlStreamNotationDeclarations notationDeclarations() const;
+    QXmlStreamEntityDeclarations entityDeclarations() const;
+    QStringRef dtdName() const;
+    QStringRef dtdPublicId() const;
+    QStringRef dtdSystemId() const;
+
+    enum Error
+    {
+        NoError,
+        UnexpectedElementError,
+        CustomError,
+        NotWellFormedError,
+        PrematureEndOfDocumentError,
+    };
+
+    void raiseError(const QString &message /DocValue="''"/ = QString());
+    QString errorString() const;
+    QXmlStreamReader::Error error() const;
+    bool hasError() const;
+    void setEntityResolver(QXmlStreamEntityResolver *resolver /KeepReference/);
+    QXmlStreamEntityResolver *entityResolver() const;
+    bool readNextStartElement();
+    void skipCurrentElement();
+
+private:
+    QXmlStreamReader(const QXmlStreamReader &);
+};
+
+class QXmlStreamWriter
+{
+%TypeHeaderCode
+#include <qxmlstream.h>
+%End
+
+public:
+    QXmlStreamWriter();
+    explicit QXmlStreamWriter(QIODevice *device);
+    explicit QXmlStreamWriter(QByteArray *array);
+    ~QXmlStreamWriter();
+    void setDevice(QIODevice *device);
+    QIODevice *device() const;
+    void setCodec(QTextCodec *codec /KeepReference/);
+    void setCodec(const char *codecName);
+    QTextCodec *codec() const;
+    void setAutoFormatting(bool);
+    bool autoFormatting() const;
+    void setAutoFormattingIndent(int spaces);
+    int autoFormattingIndent() const;
+    void writeAttribute(const QString &qualifiedName, const QString &value);
+    void writeAttribute(const QString &namespaceUri, const QString &name, const QString &value);
+    void writeAttribute(const QXmlStreamAttribute &attribute);
+    void writeAttributes(const QXmlStreamAttributes &attributes);
+    void writeCDATA(const QString &text);
+    void writeCharacters(const QString &text);
+    void writeComment(const QString &text);
+    void writeDTD(const QString &dtd);
+    void writeEmptyElement(const QString &qualifiedName);
+    void writeEmptyElement(const QString &namespaceUri, const QString &name);
+    void writeTextElement(const QString &qualifiedName, const QString &text);
+    void writeTextElement(const QString &namespaceUri, const QString &name, const QString &text);
+    void writeEndDocument();
+    void writeEndElement();
+    void writeEntityReference(const QString &name);
+    void writeNamespace(const QString &namespaceUri, const QString &prefix /DocValue="''"/ = QString());
+    void writeDefaultNamespace(const QString &namespaceUri);
+    void writeProcessingInstruction(const QString &target, const QString &data /DocValue="''"/ = QString());
+    void writeStartDocument();
+    void writeStartDocument(const QString &version);
+    void writeStartDocument(const QString &version, bool standalone);
+    void writeStartElement(const QString &qualifiedName);
+    void writeStartElement(const QString &namespaceUri, const QString &name);
+    void writeCurrentToken(const QXmlStreamReader &reader);
+    bool hasError() const;
+
+private:
+    QXmlStreamWriter(const QXmlStreamWriter &);
+};
diff --git a/sip/QtDBus/QtDBusmod.sip b/sip/QtDBus/QtDBusmod.sip
new file mode 100644
index 0000000..c02e10f
--- /dev/null
+++ b/sip/QtDBus/QtDBusmod.sip
@@ -0,0 +1,61 @@
+// QtDBusmod.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtDBus, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qdbusabstractadaptor.sip
+%Include qdbusabstractinterface.sip
+%Include qdbusargument.sip
+%Include qdbusconnection.sip
+%Include qdbusconnectioninterface.sip
+%Include qdbuserror.sip
+%Include qdbusextratypes.sip
+%Include qdbusinterface.sip
+%Include qdbusmessage.sip
+%Include qdbuspendingcall.sip
+%Include qdbusservicewatcher.sip
+%Include qdbusunixfiledescriptor.sip
+%Include qpydbuspendingreply.sip
+%Include qpydbusreply.sip
diff --git a/sip/QtDBus/qdbusabstractadaptor.sip b/sip/QtDBus/qdbusabstractadaptor.sip
new file mode 100644
index 0000000..14fb61d
--- /dev/null
+++ b/sip/QtDBus/qdbusabstractadaptor.sip
@@ -0,0 +1,38 @@
+// qdbusabstractadaptor.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDBusAbstractAdaptor : QObject
+{
+%TypeHeaderCode
+#include <qdbusabstractadaptor.h>
+%End
+
+protected:
+    explicit QDBusAbstractAdaptor(QObject *parent /TransferThis/);
+
+public:
+    virtual ~QDBusAbstractAdaptor();
+
+protected:
+    void setAutoRelaySignals(bool enable);
+    bool autoRelaySignals() const;
+};
diff --git a/sip/QtDBus/qdbusabstractinterface.sip b/sip/QtDBus/qdbusabstractinterface.sip
new file mode 100644
index 0000000..c6a56a7
--- /dev/null
+++ b/sip/QtDBus/qdbusabstractinterface.sip
@@ -0,0 +1,156 @@
+// qdbusabstractinterface.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDBusAbstractInterface : QObject
+{
+%TypeHeaderCode
+#include <qdbusabstractinterface.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QDBusPendingCallWatcher, &sipType_QDBusPendingCallWatcher, -1, 1},
+        {sipName_QDBusAbstractAdaptor, &sipType_QDBusAbstractAdaptor, -1, 2},
+        {sipName_QDBusAbstractInterface, &sipType_QDBusAbstractInterface, 4, 3},
+        {sipName_QDBusServiceWatcher, &sipType_QDBusServiceWatcher, -1, -1},
+        {sipName_QDBusConnectionInterface, &sipType_QDBusConnectionInterface, -1, 5},
+        {sipName_QDBusInterface, &sipType_QDBusInterface, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    virtual ~QDBusAbstractInterface();
+    bool isValid() const;
+    QDBusConnection connection() const;
+    QString service() const;
+    QString path() const;
+    QString interface() const;
+    QDBusError lastError() const;
+    void setTimeout(int timeout);
+    int timeout() const;
+    QDBusMessage call(const QString &method, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(), const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(), const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant()) /ReleaseGIL/;
+    QDBusMessage call(QDBus::CallMode mode, const QString &method, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(), const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(), const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant()) /ReleaseGIL/;
+    QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList<QVariant> &args) /ReleaseGIL/;
+    bool callWithCallback(const QString &method, const QList<QVariant> &args, SIP_PYOBJECT returnMethod /DocType="slot"/, SIP_PYOBJECT errorMethod /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray return_slot;
+        
+        if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a2, &receiver, return_slot)) == sipErrorNone)
+        {
+            QObject *error_receiver;
+            QByteArray error_slot;
+        
+            if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a3, &error_receiver, error_slot)) == sipErrorNone)
+            {
+                if (receiver == error_receiver)
+                {
+                    sipRes = sipCpp->callWithCallback(*a0, *a1, receiver, return_slot.constData(), error_slot.constData());
+                }
+                else
+                {
+                    PyErr_SetString(PyExc_ValueError,
+                            "the return and error methods must be bound to the same QObject instance");
+                    sipError = sipErrorFail;
+                }
+            }
+            else if (sipError == sipErrorContinue)
+            {
+                sipError = sipBadCallableArg(3, a3);
+            }
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(2, a2);
+        }
+%End
+
+    bool callWithCallback(const QString &method, QList<QVariant> &args, SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot;
+        
+        if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a2, &receiver, slot)) == sipErrorNone)
+        {
+            sipRes = sipCpp->callWithCallback(*a0, *a1, receiver, slot.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(2, a2);
+        }
+%End
+
+    QDBusPendingCall asyncCall(const QString &method, const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(), const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(), const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(), const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant());
+    QDBusPendingCall asyncCallWithArgumentList(const QString &method, const QList<QVariant> &args);
+
+protected:
+    QDBusAbstractInterface(const QString &service, const QString &path, const char *interface, const QDBusConnection &connection, QObject *parent /TransferThis/);
+    virtual void connectNotify(const QMetaMethod &signal);
+    virtual void disconnectNotify(const QMetaMethod &signal);
+};
+
+%ModuleHeaderCode
+#include "qpydbus_api.h"
+
+// Imports from QtCore.
+typedef PyObject *(*pyqt5_qtdbus_from_qvariant_by_type_t)(QVariant &, PyObject *);
+extern pyqt5_qtdbus_from_qvariant_by_type_t pyqt5_qtdbus_from_qvariant_by_type;
+
+typedef sipErrorState (*pyqt5_qtdbus_get_pyqtslot_parts_t)(PyObject *, QObject **, QByteArray &);
+extern pyqt5_qtdbus_get_pyqtslot_parts_t pyqt5_qtdbus_get_pyqtslot_parts;
+%End
+
+%ModuleCode
+// Imports from QtCore.
+pyqt5_qtdbus_from_qvariant_by_type_t pyqt5_qtdbus_from_qvariant_by_type;
+pyqt5_qtdbus_get_pyqtslot_parts_t pyqt5_qtdbus_get_pyqtslot_parts;
+%End
+
+%PostInitialisationCode
+qpydbus_post_init();
+
+// Imports from QtCore.
+pyqt5_qtdbus_from_qvariant_by_type = (pyqt5_qtdbus_from_qvariant_by_type_t)sipImportSymbol("pyqt5_from_qvariant_by_type");
+pyqt5_qtdbus_get_pyqtslot_parts = (pyqt5_qtdbus_get_pyqtslot_parts_t)sipImportSymbol("pyqt5_get_pyqtslot_parts");
+%End
diff --git a/sip/QtDBus/qdbusargument.sip b/sip/QtDBus/qdbusargument.sip
new file mode 100644
index 0000000..e13b023
--- /dev/null
+++ b/sip/QtDBus/qdbusargument.sip
@@ -0,0 +1,184 @@
+// qdbusargument.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDBusArgument
+{
+%TypeHeaderCode
+#include <qdbusargument.h>
+%End
+
+%TypeCode
+#include <QStringList>
+
+
+static PyObject *qdbusargument_add(QDBusArgument *arg, PyObject *obj, int mtype)
+{
+    int iserr = 0;
+
+    if (PyLong_CheckExact(obj)
+#if PY_MAJOR_VERSION < 3
+            || PyInt_CheckExact(obj)
+#endif
+            )
+    {
+        if (mtype == QMetaType::UChar || mtype == QMetaType::UShort || mtype == QMetaType::UInt || mtype == QMetaType::ULongLong)
+        {
+            // Handle the unsigned values.
+#if defined(HAVE_LONG_LONG)
+            unsigned PY_LONG_LONG v = PyLong_AsUnsignedLongLongMask(obj);
+#else
+            unsigned long v = PyLong_AsUnsignedLongMask(obj);
+#endif
+
+            switch (mtype)
+            {
+            case QMetaType::UChar:
+                *arg << (uchar)v;
+                break;
+
+            case QMetaType::UShort:
+                *arg << (ushort)v;
+                break;
+
+            case QMetaType::UInt:
+                *arg << (uint)v;
+                break;
+
+            case QMetaType::ULongLong:
+                *arg << (qulonglong)v;
+                break;
+            }
+        }
+        else if (mtype == QMetaType::Short || mtype == QMetaType::Int || mtype == QMetaType::LongLong)
+        {
+            // Handle the signed values.
+#if defined(HAVE_LONG_LONG)
+            PY_LONG_LONG v = PyLong_AsLongLong(obj);
+#else
+            long v = PyLong_AsLong(obj);
+#endif
+
+            switch (mtype)
+            {
+            case QMetaType::Short:
+                *arg << (short)v;
+                break;
+
+            case QMetaType::Int:
+                *arg << (int)v;
+                break;
+
+            case QMetaType::LongLong:
+                *arg << (qlonglong)v;
+                break;
+            }
+        }
+        else
+        {
+            PyErr_Format(PyExc_ValueError,
+                    "%d is an invalid QMetaType::Type for an interger object",
+                    mtype);
+            iserr = 1;
+        }
+    }
+    else if (mtype == QMetaType::QStringList)
+    {
+        // A QStringList has to be handled explicitly to prevent it being seen
+        // as a vialiant list.
+
+        int value_state;
+
+        QStringList *qsl = reinterpret_cast<QStringList *>(
+                sipForceConvertToType(obj, sipType_QStringList, 0,
+                        SIP_NOT_NONE, &value_state, &iserr));
+
+        if (!iserr)
+        {
+            arg->beginArray(QMetaType::QString);
+
+            for (int i = 0; i < qsl->count(); ++i)
+                *arg << qsl->at(i);
+
+            arg->endArray();
+
+            sipReleaseType(qsl, sipType_QStringList, value_state);
+        }
+    }
+    else
+    {
+        int value_state;
+
+        QVariant *qv = reinterpret_cast<QVariant *>(
+                sipForceConvertToType(obj, sipType_QVariant, 0, SIP_NOT_NONE,
+                        &value_state, &iserr));
+
+        if (!iserr)
+        {
+            // This is an internal method. If it proves to be a problem then we
+            // will have to handle each type explicitly.
+            arg->appendVariant(*qv);
+            sipReleaseType(qv, sipType_QVariant, value_state);
+        }
+    }
+
+    if (iserr)
+        return 0;
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+%End
+
+public:
+    QDBusArgument();
+    QDBusArgument(const QDBusArgument &other);
+    QDBusArgument(SIP_PYOBJECT arg, int id = QMetaType::Int);
+%MethodCode
+        sipCpp = new QDBusArgument();
+        PyObject *res = qdbusargument_add(sipCpp, a0, a1);
+        
+        if (res)
+        {
+            Py_DECREF(res);
+        }
+        else
+        {
+            delete sipCpp;
+            sipCpp = 0;
+        }
+%End
+
+    ~QDBusArgument();
+    SIP_PYOBJECT add(SIP_PYOBJECT arg, int id = QMetaType::Int) /DocType=""/;
+%MethodCode
+        sipRes = qdbusargument_add(sipCpp, a0, a1);
+%End
+
+    void beginStructure();
+    void endStructure();
+    void beginArray(int id);
+    void endArray();
+    void beginMap(int kid, int vid);
+    void endMap();
+    void beginMapEntry();
+    void endMapEntry();
+};
diff --git a/sip/QtDBus/qdbusconnection.sip b/sip/QtDBus/qdbusconnection.sip
new file mode 100644
index 0000000..7045df7
--- /dev/null
+++ b/sip/QtDBus/qdbusconnection.sip
@@ -0,0 +1,245 @@
+// qdbusconnection.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qdbusconnection.h>
+%End
+
+namespace QDBus
+{
+%TypeHeaderCode
+#include <qdbusconnection.h>
+%End
+
+    enum CallMode
+    {
+        NoBlock,
+        Block,
+        BlockWithGui,
+        AutoDetect,
+    };
+};
+
+class QDBusConnection
+{
+%TypeHeaderCode
+#include <qdbusconnection.h>
+%End
+
+public:
+    enum BusType
+    {
+        SessionBus,
+        SystemBus,
+        ActivationBus,
+    };
+
+    enum RegisterOption
+    {
+        ExportAdaptors,
+        ExportScriptableSlots,
+        ExportScriptableSignals,
+        ExportScriptableProperties,
+        ExportScriptableInvokables,
+        ExportScriptableContents,
+        ExportNonScriptableSlots,
+        ExportNonScriptableSignals,
+        ExportNonScriptableProperties,
+        ExportNonScriptableInvokables,
+        ExportNonScriptableContents,
+        ExportAllSlots,
+        ExportAllSignals,
+        ExportAllProperties,
+        ExportAllInvokables,
+        ExportAllContents,
+        ExportAllSignal,
+        ExportChildObjects,
+    };
+
+    enum UnregisterMode
+    {
+        UnregisterNode,
+        UnregisterTree,
+    };
+
+    typedef QFlags<QDBusConnection::RegisterOption> RegisterOptions;
+
+    enum ConnectionCapability
+    {
+        UnixFileDescriptorPassing,
+    };
+
+    typedef QFlags<QDBusConnection::ConnectionCapability> ConnectionCapabilities;
+    explicit QDBusConnection(const QString &name);
+    QDBusConnection(const QDBusConnection &other);
+    ~QDBusConnection();
+    bool isConnected() const;
+    QString baseService() const;
+    QDBusError lastError() const;
+    QString name() const;
+    QFlags<QDBusConnection::ConnectionCapability> connectionCapabilities() const;
+    bool send(const QDBusMessage &message) const;
+    bool callWithCallback(const QDBusMessage &message, SIP_PYOBJECT returnMethod /DocType="slot"/, SIP_PYOBJECT errorMethod /DocType="slot"/, int timeout = -1) const;
+%MethodCode
+        QObject *receiver;
+        QByteArray return_slot;
+        
+        if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a1, &receiver, return_slot)) == sipErrorNone)
+        {
+            QObject *error_receiver;
+            QByteArray error_slot;
+        
+            if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a2, &error_receiver, error_slot)) == sipErrorNone)
+            {
+                if (receiver == error_receiver)
+                {
+                    sipRes = sipCpp->callWithCallback(*a0, receiver, return_slot.constData(), error_slot.constData(), a3);
+                }
+                else
+                {
+                    PyErr_SetString(PyExc_ValueError,
+                            "the return and error methods must be bound to the same QObject instance");
+                    sipError = sipErrorFail;
+                }
+            }
+            else if (sipError == sipErrorContinue)
+            {
+                sipError = sipBadCallableArg(2, a2);
+            }
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(1, a1);
+        }
+%End
+
+    QDBusMessage call(const QDBusMessage &message, QDBus::CallMode mode = QDBus::Block, int timeout = -1) const /ReleaseGIL/;
+    QDBusPendingCall asyncCall(const QDBusMessage &message, int timeout = -1) const;
+    bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot;
+        
+        if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a4, &receiver, slot)) == sipErrorNone)
+        {
+            sipRes = sipCpp->connect(*a0, *a1, *a2, *a3, receiver, slot.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(4, a4);
+        }
+%End
+
+    bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot;
+        
+        if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a5, &receiver, slot)) == sipErrorNone)
+        {
+            sipRes = sipCpp->connect(*a0, *a1, *a2, *a3, *a4, receiver, slot.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(5, a5);
+        }
+%End
+
+    bool connect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot;
+        
+        if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a6, &receiver, slot)) == sipErrorNone)
+        {
+            sipRes = sipCpp->connect(*a0, *a1, *a2, *a3, *a4, *a5, receiver, slot.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(6, a6);
+        }
+%End
+
+    bool disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot;
+        
+        if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a4, &receiver, slot)) == sipErrorNone)
+        {
+            sipRes = sipCpp->disconnect(*a0, *a1, *a2, *a3, receiver, slot.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(4, a4);
+        }
+%End
+
+    bool disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QString &signature, SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot;
+        
+        if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a5, &receiver, slot)) == sipErrorNone)
+        {
+            sipRes = sipCpp->disconnect(*a0, *a1, *a2, *a3, *a4, receiver, slot.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(5, a5);
+        }
+%End
+
+    bool disconnect(const QString &service, const QString &path, const QString &interface, const QString &name, const QStringList &argumentMatch, const QString &signature, SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot;
+        
+        if ((sipError = pyqt5_qtdbus_get_pyqtslot_parts(a6, &receiver, slot)) == sipErrorNone)
+        {
+            sipRes = sipCpp->disconnect(*a0, *a1, *a2, *a3, *a4, *a5, receiver, slot.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(6, a6);
+        }
+%End
+
+    bool registerObject(const QString &path, QObject *object, QDBusConnection::RegisterOptions options = QDBusConnection::ExportAdaptors);
+    void unregisterObject(const QString &path, QDBusConnection::UnregisterMode mode = QDBusConnection::UnregisterNode);
+    QObject *objectRegisteredAt(const QString &path) const;
+    bool registerService(const QString &serviceName);
+    bool unregisterService(const QString &serviceName);
+    QDBusConnectionInterface *interface() const;
+    static QDBusConnection connectToBus(QDBusConnection::BusType type, const QString &name) /ReleaseGIL/;
+    static QDBusConnection connectToBus(const QString &address, const QString &name) /ReleaseGIL/;
+    static QDBusConnection connectToPeer(const QString &address, const QString &name) /ReleaseGIL/;
+    static void disconnectFromBus(const QString &name) /ReleaseGIL/;
+    static void disconnectFromPeer(const QString &name) /ReleaseGIL/;
+    static QByteArray localMachineId();
+    static QDBusConnection sessionBus();
+    static QDBusConnection systemBus();
+    static QDBusConnection sender();
+};
+
+QFlags<QDBusConnection::RegisterOption> operator|(QDBusConnection::RegisterOption f1, QFlags<QDBusConnection::RegisterOption> f2);
+QFlags<QDBusConnection::RegisterOption> operator|(QDBusConnection::RegisterOption f1, QDBusConnection::RegisterOption f2);
diff --git a/sip/QtDBus/qdbusconnectioninterface.sip b/sip/QtDBus/qdbusconnectioninterface.sip
new file mode 100644
index 0000000..e4c0a3f
--- /dev/null
+++ b/sip/QtDBus/qdbusconnectioninterface.sip
@@ -0,0 +1,70 @@
+// qdbusconnectioninterface.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDBusConnectionInterface : QDBusAbstractInterface
+{
+%TypeHeaderCode
+#include <qdbusconnectioninterface.h>
+%End
+
+    QDBusConnectionInterface(const QDBusConnection &connection, QObject *parent /TransferThis/);
+    virtual ~QDBusConnectionInterface();
+
+public:
+    enum ServiceQueueOptions
+    {
+        DontQueueService,
+        QueueService,
+        ReplaceExistingService,
+    };
+
+    enum ServiceReplacementOptions
+    {
+        DontAllowReplacement,
+        AllowReplacement,
+    };
+
+    enum RegisterServiceReply
+    {
+        ServiceNotRegistered,
+        ServiceRegistered,
+        ServiceQueued,
+    };
+
+    QDBusReply<QStringList> registeredServiceNames() const /ReleaseGIL/;
+    QDBusReply<bool> isServiceRegistered(const QString &serviceName) const /ReleaseGIL/;
+    QDBusReply<QString> serviceOwner(const QString &name) const /ReleaseGIL/;
+    QDBusReply<bool> unregisterService(const QString &serviceName) /ReleaseGIL/;
+    QDBusReply<QDBusConnectionInterface::RegisterServiceReply> registerService(const QString &serviceName, QDBusConnectionInterface::ServiceQueueOptions qoption = QDBusConnectionInterface::DontQueueService, QDBusConnectionInterface::ServiceReplacementOptions roption = QDBusConnectionInterface::DontAllowReplacement) /ReleaseGIL/;
+    QDBusReply<unsigned int> servicePid(const QString &serviceName) const /ReleaseGIL/;
+    QDBusReply<unsigned int> serviceUid(const QString &serviceName) const /ReleaseGIL/;
+    QDBusReply<void> startService(const QString &name) /ReleaseGIL/;
+
+signals:
+    void serviceRegistered(const QString &service);
+    void serviceUnregistered(const QString &service);
+    void callWithCallbackFailed(const QDBusError &error, const QDBusMessage &call);
+
+protected:
+    virtual void connectNotify(const QMetaMethod &);
+    virtual void disconnectNotify(const QMetaMethod &);
+};
diff --git a/sip/QtDBus/qdbuserror.sip b/sip/QtDBus/qdbuserror.sip
new file mode 100644
index 0000000..c1bc808
--- /dev/null
+++ b/sip/QtDBus/qdbuserror.sip
@@ -0,0 +1,68 @@
+// qdbuserror.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDBusError
+{
+%TypeHeaderCode
+#include <qdbuserror.h>
+%End
+
+public:
+    enum ErrorType
+    {
+        NoError,
+        Other,
+        Failed,
+        NoMemory,
+        ServiceUnknown,
+        NoReply,
+        BadAddress,
+        NotSupported,
+        LimitsExceeded,
+        AccessDenied,
+        NoServer,
+        Timeout,
+        NoNetwork,
+        AddressInUse,
+        Disconnected,
+        InvalidArgs,
+        UnknownMethod,
+        TimedOut,
+        InvalidSignature,
+        UnknownInterface,
+        InternalError,
+        UnknownObject,
+        InvalidService,
+        InvalidObjectPath,
+        InvalidInterface,
+        InvalidMember,
+        UnknownProperty,
+        PropertyReadOnly,
+    };
+
+    QDBusError(const QDBusError &other);
+    QDBusError::ErrorType type() const;
+    QString name() const;
+    QString message() const;
+    bool isValid() const;
+    static QString errorString(QDBusError::ErrorType error);
+};
diff --git a/sip/QtDBus/qdbusextratypes.sip b/sip/QtDBus/qdbusextratypes.sip
new file mode 100644
index 0000000..5914c20
--- /dev/null
+++ b/sip/QtDBus/qdbusextratypes.sip
@@ -0,0 +1,82 @@
+// qdbusextratypes.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qdbusextratypes.h>
+%End
+
+class QDBusObjectPath
+{
+%TypeHeaderCode
+#include <qdbusextratypes.h>
+%End
+
+public:
+    QDBusObjectPath();
+    explicit QDBusObjectPath(const QString &objectPath);
+    QString path() const;
+    void setPath(const QString &objectPath);
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp, 0);
+%End
+};
+
+bool operator==(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs);
+bool operator!=(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs);
+bool operator<(const QDBusObjectPath &lhs, const QDBusObjectPath &rhs);
+
+class QDBusSignature
+{
+%TypeHeaderCode
+#include <qdbusextratypes.h>
+%End
+
+public:
+    QDBusSignature();
+    explicit QDBusSignature(const QString &dBusSignature);
+    QString signature() const;
+    void setSignature(const QString &dBusSignature);
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp, 0);
+%End
+};
+
+bool operator==(const QDBusSignature &lhs, const QDBusSignature &rhs);
+bool operator!=(const QDBusSignature &lhs, const QDBusSignature &rhs);
+bool operator<(const QDBusSignature &lhs, const QDBusSignature &rhs);
+
+class QDBusVariant
+{
+%TypeHeaderCode
+#include <qdbusextratypes.h>
+%End
+
+public:
+    QDBusVariant();
+    explicit QDBusVariant(const QVariant &dBusVariant);
+    QVariant variant() const;
+    void setVariant(const QVariant &dBusVariant);
+};
+
+bool operator==(const QDBusVariant &v1, const QDBusVariant &v2);
diff --git a/sip/QtDBus/qdbusinterface.sip b/sip/QtDBus/qdbusinterface.sip
new file mode 100644
index 0000000..11e2bb8
--- /dev/null
+++ b/sip/QtDBus/qdbusinterface.sip
@@ -0,0 +1,32 @@
+// qdbusinterface.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDBusInterface : QDBusAbstractInterface
+{
+%TypeHeaderCode
+#include <qdbusinterface.h>
+%End
+
+public:
+    QDBusInterface(const QString &service, const QString &path, const QString &interface = QString(), const QDBusConnection &connection = QDBusConnection::sessionBus(), QObject *parent = 0);
+    virtual ~QDBusInterface();
+};
diff --git a/sip/QtDBus/qdbusmessage.sip b/sip/QtDBus/qdbusmessage.sip
new file mode 100644
index 0000000..f10b448
--- /dev/null
+++ b/sip/QtDBus/qdbusmessage.sip
@@ -0,0 +1,68 @@
+// qdbusmessage.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDBusMessage
+{
+%TypeHeaderCode
+#include <qdbusmessage.h>
+%End
+
+public:
+    enum MessageType
+    {
+        InvalidMessage,
+        MethodCallMessage,
+        ReplyMessage,
+        ErrorMessage,
+        SignalMessage,
+    };
+
+    QDBusMessage();
+    QDBusMessage(const QDBusMessage &other);
+    ~QDBusMessage();
+    static QDBusMessage createSignal(const QString &path, const QString &interface, const QString &name);
+    static QDBusMessage createMethodCall(const QString &service, const QString &path, const QString &interface, const QString &method);
+    static QDBusMessage createError(const QString &name, const QString &msg);
+    static QDBusMessage createError(const QDBusError &error);
+    static QDBusMessage createError(QDBusError::ErrorType type, const QString &msg);
+    QDBusMessage createReply(const QList<QVariant> &arguments = QList<QVariant>()) const;
+    QDBusMessage createReply(const QVariant &argument) const;
+    QDBusMessage createErrorReply(const QString name, const QString &msg) const;
+    QDBusMessage createErrorReply(const QDBusError &error) const;
+    QDBusMessage createErrorReply(QDBusError::ErrorType type, const QString &msg) const;
+    QString service() const;
+    QString path() const;
+    QString interface() const;
+    QString member() const;
+    QString errorName() const;
+    QString errorMessage() const;
+    QDBusMessage::MessageType type() const;
+    QString signature() const;
+    bool isReplyRequired() const;
+    void setDelayedReply(bool enable) const;
+    bool isDelayedReply() const;
+    void setAutoStartService(bool enable);
+    bool autoStartService() const;
+    void setArguments(const QList<QVariant> &arguments);
+    QList<QVariant> arguments() const;
+    QDBusMessage &operator<<(const QVariant &arg);
+};
diff --git a/sip/QtDBus/qdbuspendingcall.sip b/sip/QtDBus/qdbuspendingcall.sip
new file mode 100644
index 0000000..a6b1979
--- /dev/null
+++ b/sip/QtDBus/qdbuspendingcall.sip
@@ -0,0 +1,54 @@
+// qdbuspendingcall.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDBusPendingCall
+{
+%TypeHeaderCode
+#include <qdbuspendingcall.h>
+%End
+
+public:
+    QDBusPendingCall(const QDBusPendingCall &other);
+    ~QDBusPendingCall();
+    static QDBusPendingCall fromError(const QDBusError &error);
+    static QDBusPendingCall fromCompletedCall(const QDBusMessage &message);
+    void swap(QDBusPendingCall &other);
+
+private:
+    QDBusPendingCall();
+};
+
+class QDBusPendingCallWatcher : QObject, QDBusPendingCall
+{
+%TypeHeaderCode
+#include <qdbuspendingcall.h>
+%End
+
+public:
+    QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent /TransferThis/ = 0);
+    virtual ~QDBusPendingCallWatcher();
+    bool isFinished() const;
+    void waitForFinished() /ReleaseGIL/;
+
+signals:
+    void finished(QDBusPendingCallWatcher *self);
+};
diff --git a/sip/QtDBus/qdbusservicewatcher.sip b/sip/QtDBus/qdbusservicewatcher.sip
new file mode 100644
index 0000000..84cef9e
--- /dev/null
+++ b/sip/QtDBus/qdbusservicewatcher.sip
@@ -0,0 +1,64 @@
+// qdbusservicewatcher.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qdbusservicewatcher.h>
+%End
+
+class QDBusServiceWatcher : QObject
+{
+%TypeHeaderCode
+#include <qdbusservicewatcher.h>
+%End
+
+public:
+    enum WatchModeFlag
+    {
+        WatchForRegistration,
+        WatchForUnregistration,
+        WatchForOwnerChange,
+    };
+
+    typedef QFlags<QDBusServiceWatcher::WatchModeFlag> WatchMode;
+    explicit QDBusServiceWatcher(QObject *parent /TransferThis/ = 0);
+    QDBusServiceWatcher(const QString &service, const QDBusConnection &connection, QDBusServiceWatcher::WatchMode watchMode = QDBusServiceWatcher::WatchForOwnerChange, QObject *parent /TransferThis/ = 0);
+    virtual ~QDBusServiceWatcher();
+    QStringList watchedServices() const;
+    void setWatchedServices(const QStringList &services);
+    void addWatchedService(const QString &newService);
+    bool removeWatchedService(const QString &service);
+    QFlags<QDBusServiceWatcher::WatchModeFlag> watchMode() const;
+    void setWatchMode(QFlags<QDBusServiceWatcher::WatchModeFlag> mode);
+    QDBusConnection connection() const;
+    void setConnection(const QDBusConnection &connection);
+
+signals:
+    void serviceRegistered(const QString &service);
+    void serviceUnregistered(const QString &service);
+    void serviceOwnerChanged(const QString &service, const QString &oldOwner, const QString &newOwner);
+
+private:
+    QDBusServiceWatcher(const QDBusServiceWatcher &);
+};
+
+QFlags<QDBusServiceWatcher::WatchModeFlag> operator|(QDBusServiceWatcher::WatchModeFlag f1, QFlags<QDBusServiceWatcher::WatchModeFlag> f2);
+QFlags<QDBusServiceWatcher::WatchModeFlag> operator|(QDBusServiceWatcher::WatchModeFlag f1, QDBusServiceWatcher::WatchModeFlag f2);
diff --git a/sip/QtDBus/qdbusunixfiledescriptor.sip b/sip/QtDBus/qdbusunixfiledescriptor.sip
new file mode 100644
index 0000000..e908ff6
--- /dev/null
+++ b/sip/QtDBus/qdbusunixfiledescriptor.sip
@@ -0,0 +1,39 @@
+// qdbusunixfiledescriptor.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtDBus Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDBusUnixFileDescriptor
+{
+%TypeHeaderCode
+#include <qdbusunixfiledescriptor.h>
+%End
+
+public:
+    QDBusUnixFileDescriptor();
+    explicit QDBusUnixFileDescriptor(int fileDescriptor);
+    QDBusUnixFileDescriptor(const QDBusUnixFileDescriptor &other);
+    ~QDBusUnixFileDescriptor();
+    bool isValid() const;
+    int fileDescriptor() const;
+    void setFileDescriptor(int fileDescriptor);
+    static bool isSupported();
+    void swap(QDBusUnixFileDescriptor &other);
+};
diff --git a/sip/QtDBus/qpydbuspendingreply.sip b/sip/QtDBus/qpydbuspendingreply.sip
new file mode 100644
index 0000000..8ed4d44
--- /dev/null
+++ b/sip/QtDBus/qpydbuspendingreply.sip
@@ -0,0 +1,44 @@
+// This is the SIP specification of the QPyDBusPendingReply class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPyDBusPendingReply : QDBusPendingCall /PyName=QDBusPendingReply/
+{
+%TypeHeaderCode
+#include <qpydbuspendingreply.h>
+%End
+
+public:
+    QPyDBusPendingReply();
+    QPyDBusPendingReply(const QPyDBusPendingReply &other);
+    QPyDBusPendingReply(const QDBusPendingCall &call);
+    QPyDBusPendingReply(const QDBusMessage &reply);
+
+    // The /ReleaseGIL/ annotation is needed because QDBusPendingCall has an
+    // internal mutex.
+    QVariant argumentAt(int index) const /ReleaseGIL/;
+    QDBusError error() const /ReleaseGIL/;
+    bool isError() const /ReleaseGIL/;
+    bool isFinished() const /ReleaseGIL/;
+    bool isValid() const /ReleaseGIL/;
+    QDBusMessage reply() const /ReleaseGIL/;
+    void waitForFinished() /ReleaseGIL/;
+
+    SIP_PYOBJECT value(SIP_PYOBJECT type /DocValue="None"/ = 0) const /HoldGIL/;
+};
diff --git a/sip/QtDBus/qpydbusreply.sip b/sip/QtDBus/qpydbusreply.sip
new file mode 100644
index 0000000..c6eaa61
--- /dev/null
+++ b/sip/QtDBus/qpydbusreply.sip
@@ -0,0 +1,238 @@
+// This is the SIP specification of the QPyDBusReply class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPyDBusReply /PyName=QDBusReply/
+{
+%TypeHeaderCode
+#include <qpydbusreply.h>
+%End
+
+public:
+    QPyDBusReply(const QDBusMessage &reply) /HoldGIL/;
+    QPyDBusReply(const QDBusPendingCall &call) /HoldGIL/;
+    QPyDBusReply(const QDBusError &error);
+    QPyDBusReply(const QPyDBusReply &other) /HoldGIL/;
+    ~QPyDBusReply() /HoldGIL/;
+
+    const QDBusError &error() const /HoldGIL/;
+    bool isValid() const /HoldGIL/;
+    SIP_PYOBJECT value(SIP_PYOBJECT type /DocValue="None"/ = 0) const /HoldGIL/;
+};
+
+
+template<TYPE>
+%MappedType QDBusReply<TYPE> /DocType="QDBusReply"/
+{
+%TypeHeaderCode
+#include <qdbusreply.h>
+#include <qpydbusreply.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *value_obj;
+
+    if (sipCpp->isValid())
+    {
+        // Convert the value to a Python object.
+        TYPE *value = new TYPE(sipCpp->value());
+
+        if ((value_obj = sipConvertFromNewType(value, sipType_TYPE, NULL)) == NULL)
+        {
+            delete value;
+            return NULL;
+        }
+    }
+    else
+    {
+        value_obj = 0;
+    }
+
+    QPyDBusReply *reply = new QPyDBusReply(value_obj,
+            sipCpp->isValid(), sipCpp->error());
+
+    PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj);
+
+    if (reply_obj == NULL)
+    {
+        delete reply;
+        return NULL;
+    }
+
+    return reply_obj;
+%End
+
+%ConvertToTypeCode
+    // We never create a QDBusReply from Python.
+    return 0;
+%End
+};
+
+
+%MappedType QDBusReply<void> /DocType="QDBusReply"/
+{
+%TypeHeaderCode
+#include <qdbusreply.h>
+#include <qpydbusreply.h>
+%End
+
+%ConvertFromTypeCode
+    Py_INCREF(Py_None);
+    QPyDBusReply *reply = new QPyDBusReply(Py_None,
+            sipCpp->isValid(), sipCpp->error());
+
+    PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj);
+
+    if (reply_obj == NULL)
+    {
+        delete reply;
+        return NULL;
+    }
+
+    return reply_obj;
+%End
+
+%ConvertToTypeCode
+    // We never create a QDBusReply from Python.
+    return 0;
+%End
+};
+
+
+%MappedType QDBusReply<bool> /DocType="QDBusReply"/
+{
+%TypeHeaderCode
+#include <qdbusreply.h>
+#include <qpydbusreply.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *value_obj;
+
+    if (sipCpp->isValid())
+    {
+        if ((value_obj = PyBool_FromLong(sipCpp->value())) == NULL)
+            return NULL;
+    }
+    else
+    {
+        value_obj = 0;
+    }
+
+    QPyDBusReply *reply = new QPyDBusReply(value_obj,
+            sipCpp->isValid(), sipCpp->error());
+
+    PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj);
+
+    if (reply_obj == NULL)
+    {
+        delete reply;
+        return NULL;
+    }
+
+    return reply_obj;
+%End
+
+%ConvertToTypeCode
+    // We never create a QDBusReply from Python.
+    return 0;
+%End
+};
+
+
+%MappedType QDBusReply<unsigned> /DocType="QDBusReply"/
+{
+%TypeHeaderCode
+#include <qdbusreply.h>
+#include <qpydbusreply.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *value_obj;
+
+    if (sipCpp->isValid())
+    {
+        if ((value_obj = PyLong_FromUnsignedLong(sipCpp->value())) == NULL)
+            return NULL;
+    }
+    else
+    {
+        value_obj = 0;
+    }
+
+    QPyDBusReply *reply = new QPyDBusReply(value_obj,
+            sipCpp->isValid(), sipCpp->error());
+
+    PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj);
+
+    if (reply_obj == NULL)
+    {
+        delete reply;
+        return NULL;
+    }
+
+    return reply_obj;
+%End
+
+%ConvertToTypeCode
+    // We never create a QDBusReply from Python.
+    return 0;
+%End
+};
+
+
+%MappedType QDBusReply<QDBusConnectionInterface::RegisterServiceReply> /DocType="QDBusReply"/
+{
+%TypeHeaderCode
+#include <qdbusreply.h>
+#include <qpydbusreply.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *value_obj;
+
+    if (sipCpp->isValid())
+    {
+        if ((value_obj = sipConvertFromEnum(sipCpp->value(), sipType_QDBusConnectionInterface_RegisterServiceReply)) == NULL)
+            return NULL;
+    }
+    else
+    {
+        value_obj = 0;
+    }
+
+    QPyDBusReply *reply = new QPyDBusReply(value_obj,
+            sipCpp->isValid(), sipCpp->error());
+
+    PyObject *reply_obj = sipConvertFromNewType(reply, sipType_QPyDBusReply, sipTransferObj);
+
+    if (reply_obj == NULL)
+    {
+        delete reply;
+        return NULL;
+    }
+
+    return reply_obj;
+%End
+
+%ConvertToTypeCode
+    // We never create a QDBusReply from Python.
+    return 0;
+%End
+};
diff --git a/sip/QtDesigner/QtDesignermod.sip b/sip/QtDesigner/QtDesignermod.sip
new file mode 100644
index 0000000..594616b
--- /dev/null
+++ b/sip/QtDesigner/QtDesignermod.sip
@@ -0,0 +1,72 @@
+// QtDesignermod.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtDesigner, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include abstractactioneditor.sip
+%Include abstractformbuilder.sip
+%Include abstractformeditor.sip
+%Include abstractformwindow.sip
+%Include abstractformwindowcursor.sip
+%Include abstractformwindowmanager.sip
+%Include abstractobjectinspector.sip
+%Include abstractpropertyeditor.sip
+%Include abstractwidgetbox.sip
+%Include container.sip
+%Include customwidget.sip
+%Include default_extensionfactory.sip
+%Include extension.sip
+%Include formbuilder.sip
+%Include membersheet.sip
+%Include propertysheet.sip
+%Include qextensionmanager.sip
+%Include taskmenu.sip
+%Include qpydesignercontainerextension.sip
+%Include qpydesignercustomwidgetcollectionplugin.sip
+%Include qpydesignercustomwidgetplugin.sip
+%Include qpydesignermembersheetextension.sip
+%Include qpydesignerpropertysheetextension.sip
+%Include qpydesignertaskmenuextension.sip
diff --git a/sip/QtDesigner/abstractactioneditor.sip b/sip/QtDesigner/abstractactioneditor.sip
new file mode 100644
index 0000000..ad3112e
--- /dev/null
+++ b/sip/QtDesigner/abstractactioneditor.sip
@@ -0,0 +1,38 @@
+// abstractactioneditor.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerActionEditorInterface : QWidget
+{
+%TypeHeaderCode
+#include <abstractactioneditor.h>
+%End
+
+public:
+    QDesignerActionEditorInterface(QWidget *parent /TransferThis/, Qt::WindowFlags flags = 0);
+    virtual ~QDesignerActionEditorInterface();
+    virtual QDesignerFormEditorInterface *core() const;
+    virtual void manageAction(QAction *action) = 0;
+    virtual void unmanageAction(QAction *action) = 0;
+
+public slots:
+    virtual void setFormWindow(QDesignerFormWindowInterface *formWindow /KeepReference/) = 0;
+};
diff --git a/sip/QtDesigner/abstractformbuilder.sip b/sip/QtDesigner/abstractformbuilder.sip
new file mode 100644
index 0000000..7ec9689
--- /dev/null
+++ b/sip/QtDesigner/abstractformbuilder.sip
@@ -0,0 +1,40 @@
+// abstractformbuilder.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractFormBuilder
+{
+%TypeHeaderCode
+#include <abstractformbuilder.h>
+%End
+
+public:
+    QAbstractFormBuilder();
+    virtual ~QAbstractFormBuilder();
+    virtual QWidget *load(QIODevice *device, QWidget *parent /TransferThis/ = 0) /Factory/;
+    virtual void save(QIODevice *dev, QWidget *widget);
+    void setWorkingDirectory(const QDir &directory);
+    QDir workingDirectory() const;
+    QString errorString() const;
+
+private:
+    QAbstractFormBuilder(const QAbstractFormBuilder &other);
+};
diff --git a/sip/QtDesigner/abstractformeditor.sip b/sip/QtDesigner/abstractformeditor.sip
new file mode 100644
index 0000000..2d156d6
--- /dev/null
+++ b/sip/QtDesigner/abstractformeditor.sip
@@ -0,0 +1,46 @@
+// abstractformeditor.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerFormEditorInterface : QObject
+{
+%TypeHeaderCode
+#include <abstractformeditor.h>
+%End
+
+public:
+    QDesignerFormEditorInterface(QObject *parent /TransferThis/ = 0);
+    virtual ~QDesignerFormEditorInterface();
+    QExtensionManager *extensionManager() const;
+    QWidget *topLevel() const;
+    QDesignerWidgetBoxInterface *widgetBox() const;
+    QDesignerPropertyEditorInterface *propertyEditor() const;
+    QDesignerObjectInspectorInterface *objectInspector() const;
+    QDesignerFormWindowManagerInterface *formWindowManager() const;
+    QDesignerActionEditorInterface *actionEditor() const;
+    void setWidgetBox(QDesignerWidgetBoxInterface *widgetBox /KeepReference/);
+    void setPropertyEditor(QDesignerPropertyEditorInterface *propertyEditor /KeepReference/);
+    void setObjectInspector(QDesignerObjectInspectorInterface *objectInspector /KeepReference/);
+    void setActionEditor(QDesignerActionEditorInterface *actionEditor /KeepReference/);
+
+private:
+    QDesignerFormEditorInterface(const QDesignerFormEditorInterface &other);
+};
diff --git a/sip/QtDesigner/abstractformwindow.sip b/sip/QtDesigner/abstractformwindow.sip
new file mode 100644
index 0000000..41a1956
--- /dev/null
+++ b/sip/QtDesigner/abstractformwindow.sip
@@ -0,0 +1,106 @@
+// abstractformwindow.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerFormWindowInterface : QWidget /Abstract/
+{
+%TypeHeaderCode
+#include <abstractformwindow.h>
+%End
+
+public:
+    enum FeatureFlag
+    {
+        EditFeature,
+        GridFeature,
+        TabOrderFeature,
+        DefaultFeature,
+    };
+
+    typedef QFlags<QDesignerFormWindowInterface::FeatureFlag> Feature;
+    QDesignerFormWindowInterface(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QDesignerFormWindowInterface();
+    virtual QString fileName() const = 0;
+    virtual QDir absoluteDir() const = 0;
+    virtual QString contents() const = 0;
+    virtual bool setContents(QIODevice *dev, QString *errorMessage = 0) = 0;
+    virtual QFlags<QDesignerFormWindowInterface::FeatureFlag> features() const = 0;
+    virtual bool hasFeature(QFlags<QDesignerFormWindowInterface::FeatureFlag> f) const = 0;
+    virtual QString author() const = 0;
+    virtual void setAuthor(const QString &author) = 0;
+    virtual QString comment() const = 0;
+    virtual void setComment(const QString &comment) = 0;
+    virtual void layoutDefault(int *margin, int *spacing) = 0;
+    virtual void setLayoutDefault(int margin, int spacing) = 0;
+    virtual void layoutFunction(QString *margin /Out/, QString *spacing /Out/) = 0;
+    virtual void setLayoutFunction(const QString &margin, const QString &spacing) = 0;
+    virtual QString pixmapFunction() const = 0;
+    virtual void setPixmapFunction(const QString &pixmapFunction) = 0;
+    virtual QString exportMacro() const = 0;
+    virtual void setExportMacro(const QString &exportMacro) = 0;
+    virtual QStringList includeHints() const = 0;
+    virtual void setIncludeHints(const QStringList &includeHints) = 0;
+    virtual QDesignerFormEditorInterface *core() const;
+    virtual QDesignerFormWindowCursorInterface *cursor() const = 0;
+    virtual QPoint grid() const = 0;
+    virtual QWidget *mainContainer() const = 0;
+    virtual void setMainContainer(QWidget *mainContainer /KeepReference/) = 0;
+    virtual bool isManaged(QWidget *widget) const = 0;
+    virtual bool isDirty() const = 0;
+    static QDesignerFormWindowInterface *findFormWindow(QWidget *w);
+    static QDesignerFormWindowInterface *findFormWindow(QObject *obj);
+    virtual void emitSelectionChanged() = 0;
+    virtual QStringList resourceFiles() const = 0;
+    virtual void addResourceFile(const QString &path) = 0;
+    virtual void removeResourceFile(const QString &path) = 0;
+
+public slots:
+    virtual void manageWidget(QWidget *widget) = 0;
+    virtual void unmanageWidget(QWidget *widget) = 0;
+    virtual void setFeatures(QFlags<QDesignerFormWindowInterface::FeatureFlag> f) = 0;
+    virtual void setDirty(bool dirty) = 0;
+    virtual void clearSelection(bool update = true) = 0;
+    virtual void selectWidget(QWidget *widget, bool select = true) = 0;
+    virtual void setGrid(const QPoint &grid) = 0;
+    virtual void setFileName(const QString &fileName) = 0;
+    virtual bool setContents(const QString &contents) = 0;
+
+signals:
+    void mainContainerChanged(QWidget *mainContainer);
+    void fileNameChanged(const QString &fileName);
+    void featureChanged(QFlags<QDesignerFormWindowInterface::FeatureFlag> f);
+    void selectionChanged();
+    void geometryChanged();
+    void resourceFilesChanged();
+    void widgetManaged(QWidget *widget);
+    void widgetUnmanaged(QWidget *widget);
+    void aboutToUnmanageWidget(QWidget *widget);
+    void activated(QWidget *widget);
+    void changed();
+    void widgetRemoved(QWidget *w);
+    void objectRemoved(QObject *o);
+
+public:
+    virtual QStringList checkContents() const = 0;
+    QStringList activeResourceFilePaths() const;
+    virtual QWidget *formContainer() const = 0;
+    void activateResourceFilePaths(const QStringList &paths, int *errorCount = 0, QString *errorMessages /Out/ = 0);
+};
diff --git a/sip/QtDesigner/abstractformwindowcursor.sip b/sip/QtDesigner/abstractformwindowcursor.sip
new file mode 100644
index 0000000..642d1c1
--- /dev/null
+++ b/sip/QtDesigner/abstractformwindowcursor.sip
@@ -0,0 +1,64 @@
+// abstractformwindowcursor.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerFormWindowCursorInterface
+{
+%TypeHeaderCode
+#include <abstractformwindowcursor.h>
+%End
+
+public:
+    enum MoveOperation
+    {
+        NoMove,
+        Start,
+        End,
+        Next,
+        Prev,
+        Left,
+        Right,
+        Up,
+        Down,
+    };
+
+    enum MoveMode
+    {
+        MoveAnchor,
+        KeepAnchor,
+    };
+
+    virtual ~QDesignerFormWindowCursorInterface();
+    virtual QDesignerFormWindowInterface *formWindow() const = 0;
+    virtual bool movePosition(QDesignerFormWindowCursorInterface::MoveOperation op, QDesignerFormWindowCursorInterface::MoveMode mode = QDesignerFormWindowCursorInterface::MoveAnchor) = 0;
+    virtual int position() const = 0;
+    virtual void setPosition(int pos, QDesignerFormWindowCursorInterface::MoveMode mode = QDesignerFormWindowCursorInterface::MoveAnchor) = 0;
+    virtual QWidget *current() const = 0;
+    virtual int widgetCount() const = 0;
+    virtual QWidget *widget(int index) const = 0;
+    virtual bool hasSelection() const = 0;
+    virtual int selectedWidgetCount() const = 0;
+    virtual QWidget *selectedWidget(int index) const = 0;
+    virtual void setProperty(const QString &name, const QVariant &value) = 0;
+    virtual void setWidgetProperty(QWidget *widget, const QString &name, const QVariant &value) = 0;
+    virtual void resetWidgetProperty(QWidget *widget, const QString &name) = 0;
+    bool isWidgetSelected(QWidget *widget) const;
+};
diff --git a/sip/QtDesigner/abstractformwindowmanager.sip b/sip/QtDesigner/abstractformwindowmanager.sip
new file mode 100644
index 0000000..5b81069
--- /dev/null
+++ b/sip/QtDesigner/abstractformwindowmanager.sip
@@ -0,0 +1,88 @@
+// abstractformwindowmanager.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerFormWindowManagerInterface : QObject /Abstract/
+{
+%TypeHeaderCode
+#include <abstractformwindowmanager.h>
+%End
+
+public:
+    explicit QDesignerFormWindowManagerInterface(QObject *parent /TransferThis/ = 0);
+    virtual ~QDesignerFormWindowManagerInterface();
+    QAction *actionFormLayout() const /Transfer/;
+    QAction *actionSimplifyLayout() const /Transfer/;
+    virtual QDesignerFormWindowInterface *activeFormWindow() const = 0;
+    virtual int formWindowCount() const = 0;
+    virtual QDesignerFormWindowInterface *formWindow(int index) const = 0 /Transfer/;
+    virtual QDesignerFormWindowInterface *createFormWindow(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0) = 0;
+    virtual QDesignerFormEditorInterface *core() const = 0;
+
+signals:
+    void formWindowAdded(QDesignerFormWindowInterface *formWindow);
+    void formWindowRemoved(QDesignerFormWindowInterface *formWindow);
+    void activeFormWindowChanged(QDesignerFormWindowInterface *formWindow);
+    void formWindowSettingsChanged(QDesignerFormWindowInterface *fw);
+
+public slots:
+    virtual void addFormWindow(QDesignerFormWindowInterface *formWindow) = 0;
+    virtual void removeFormWindow(QDesignerFormWindowInterface *formWindow) = 0;
+    virtual void setActiveFormWindow(QDesignerFormWindowInterface *formWindow) = 0;
+
+public:
+    enum Action
+    {
+        CutAction,
+        CopyAction,
+        PasteAction,
+        DeleteAction,
+        SelectAllAction,
+        LowerAction,
+        RaiseAction,
+        UndoAction,
+        RedoAction,
+        HorizontalLayoutAction,
+        VerticalLayoutAction,
+        SplitHorizontalAction,
+        SplitVerticalAction,
+        GridLayoutAction,
+        FormLayoutAction,
+        BreakLayoutAction,
+        AdjustSizeAction,
+        SimplifyLayoutAction,
+        DefaultPreviewAction,
+        FormWindowSettingsDialogAction,
+    };
+
+    enum ActionGroup
+    {
+        StyledPreviewActionGroup,
+    };
+
+    virtual QAction *action(QDesignerFormWindowManagerInterface::Action action) const = 0 /Transfer/;
+    virtual QActionGroup *actionGroup(QDesignerFormWindowManagerInterface::ActionGroup actionGroup) const = 0 /Transfer/;
+
+public slots:
+    virtual void showPreview() = 0;
+    virtual void closeAllPreviews() = 0;
+    virtual void showPluginDialog() = 0;
+};
diff --git a/sip/QtDesigner/abstractobjectinspector.sip b/sip/QtDesigner/abstractobjectinspector.sip
new file mode 100644
index 0000000..167aa92
--- /dev/null
+++ b/sip/QtDesigner/abstractobjectinspector.sip
@@ -0,0 +1,36 @@
+// abstractobjectinspector.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerObjectInspectorInterface : QWidget
+{
+%TypeHeaderCode
+#include <abstractobjectinspector.h>
+%End
+
+public:
+    QDesignerObjectInspectorInterface(QWidget *parent /TransferThis/, Qt::WindowFlags flags = 0);
+    virtual ~QDesignerObjectInspectorInterface();
+    virtual QDesignerFormEditorInterface *core() const;
+
+public slots:
+    virtual void setFormWindow(QDesignerFormWindowInterface *formWindow /KeepReference/) = 0;
+};
diff --git a/sip/QtDesigner/abstractpropertyeditor.sip b/sip/QtDesigner/abstractpropertyeditor.sip
new file mode 100644
index 0000000..2d532d1
--- /dev/null
+++ b/sip/QtDesigner/abstractpropertyeditor.sip
@@ -0,0 +1,44 @@
+// abstractpropertyeditor.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerPropertyEditorInterface : QWidget
+{
+%TypeHeaderCode
+#include <abstractpropertyeditor.h>
+%End
+
+public:
+    QDesignerPropertyEditorInterface(QWidget *parent /TransferThis/, Qt::WindowFlags flags = 0);
+    virtual ~QDesignerPropertyEditorInterface();
+    virtual QDesignerFormEditorInterface *core() const;
+    virtual bool isReadOnly() const = 0;
+    virtual QObject *object() const = 0;
+    virtual QString currentPropertyName() const = 0;
+
+signals:
+    void propertyChanged(const QString &name, const QVariant &value);
+
+public slots:
+    virtual void setObject(QObject *object /KeepReference/) = 0;
+    virtual void setPropertyValue(const QString &name, const QVariant &value, bool changed = true) = 0;
+    virtual void setReadOnly(bool readOnly) = 0;
+};
diff --git a/sip/QtDesigner/abstractwidgetbox.sip b/sip/QtDesigner/abstractwidgetbox.sip
new file mode 100644
index 0000000..ba48fff
--- /dev/null
+++ b/sip/QtDesigner/abstractwidgetbox.sip
@@ -0,0 +1,36 @@
+// abstractwidgetbox.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerWidgetBoxInterface : QWidget /Abstract/
+{
+%TypeHeaderCode
+#include <abstractwidgetbox.h>
+%End
+
+public:
+    QDesignerWidgetBoxInterface(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QDesignerWidgetBoxInterface();
+    virtual void setFileName(const QString &file_name) = 0;
+    virtual QString fileName() const = 0;
+    virtual bool load() = 0;
+    virtual bool save() = 0;
+};
diff --git a/sip/QtDesigner/container.sip b/sip/QtDesigner/container.sip
new file mode 100644
index 0000000..9dc2957
--- /dev/null
+++ b/sip/QtDesigner/container.sip
@@ -0,0 +1,40 @@
+// container.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerContainerExtension
+{
+%TypeHeaderCode
+#include <container.h>
+%End
+
+public:
+    virtual ~QDesignerContainerExtension();
+    virtual int count() const = 0 /__len__/;
+    virtual QWidget *widget(int index) const = 0;
+    virtual int currentIndex() const = 0;
+    virtual void setCurrentIndex(int index) = 0;
+    virtual void addWidget(QWidget *widget) = 0;
+    virtual void insertWidget(int index, QWidget *widget) = 0;
+    virtual void remove(int index) = 0;
+    virtual bool canAddWidget() const;
+    virtual bool canRemove(int index) const;
+};
diff --git a/sip/QtDesigner/customwidget.sip b/sip/QtDesigner/customwidget.sip
new file mode 100644
index 0000000..390268f
--- /dev/null
+++ b/sip/QtDesigner/customwidget.sip
@@ -0,0 +1,54 @@
+// customwidget.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerCustomWidgetInterface
+{
+%TypeHeaderCode
+#include <customwidget.h>
+%End
+
+public:
+    virtual ~QDesignerCustomWidgetInterface();
+    virtual QString name() const = 0;
+    virtual QString group() const = 0;
+    virtual QString toolTip() const = 0;
+    virtual QString whatsThis() const = 0;
+    virtual QString includeFile() const = 0;
+    virtual QIcon icon() const = 0;
+    virtual bool isContainer() const = 0;
+    virtual QWidget *createWidget(QWidget *parent /TransferThis/) = 0 /Factory/;
+    virtual bool isInitialized() const;
+    virtual void initialize(QDesignerFormEditorInterface *core);
+    virtual QString domXml() const;
+    virtual QString codeTemplate() const;
+};
+
+class QDesignerCustomWidgetCollectionInterface
+{
+%TypeHeaderCode
+#include <customwidget.h>
+%End
+
+public:
+    virtual ~QDesignerCustomWidgetCollectionInterface();
+    virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const = 0;
+};
diff --git a/sip/QtDesigner/default_extensionfactory.sip b/sip/QtDesigner/default_extensionfactory.sip
new file mode 100644
index 0000000..6349b9f
--- /dev/null
+++ b/sip/QtDesigner/default_extensionfactory.sip
@@ -0,0 +1,36 @@
+// default_extensionfactory.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QExtensionFactory : QObject, QAbstractExtensionFactory
+{
+%TypeHeaderCode
+#include <default_extensionfactory.h>
+%End
+
+public:
+    QExtensionFactory(QExtensionManager *parent /TransferThis/ = 0);
+    virtual QObject *extension(QObject *object, const QString &iid) const;
+    QExtensionManager *extensionManager() const;
+
+protected:
+    virtual QObject *createExtension(QObject *object, const QString &iid, QObject *parent /TransferThis/) const /Factory/;
+};
diff --git a/sip/QtDesigner/extension.sip b/sip/QtDesigner/extension.sip
new file mode 100644
index 0000000..5cd03af
--- /dev/null
+++ b/sip/QtDesigner/extension.sip
@@ -0,0 +1,45 @@
+// extension.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractExtensionFactory
+{
+%TypeHeaderCode
+#include <extension.h>
+%End
+
+public:
+    virtual ~QAbstractExtensionFactory();
+    virtual QObject *extension(QObject *object, const QString &iid) const = 0;
+};
+
+class QAbstractExtensionManager
+{
+%TypeHeaderCode
+#include <extension.h>
+%End
+
+public:
+    virtual ~QAbstractExtensionManager();
+    virtual void registerExtensions(QAbstractExtensionFactory *factory, const QString &iid) = 0;
+    virtual void unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid) = 0;
+    virtual QObject *extension(QObject *object, const QString &iid) const = 0;
+};
diff --git a/sip/QtDesigner/formbuilder.sip b/sip/QtDesigner/formbuilder.sip
new file mode 100644
index 0000000..e4a4396
--- /dev/null
+++ b/sip/QtDesigner/formbuilder.sip
@@ -0,0 +1,37 @@
+// formbuilder.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFormBuilder : QAbstractFormBuilder
+{
+%TypeHeaderCode
+#include <formbuilder.h>
+%End
+
+public:
+    QFormBuilder();
+    virtual ~QFormBuilder();
+    QStringList pluginPaths() const;
+    void clearPluginPaths();
+    void addPluginPath(const QString &pluginPath);
+    void setPluginPath(const QStringList &pluginPaths);
+    QList<QDesignerCustomWidgetInterface*> customWidgets() const;
+};
diff --git a/sip/QtDesigner/membersheet.sip b/sip/QtDesigner/membersheet.sip
new file mode 100644
index 0000000..6502bbd
--- /dev/null
+++ b/sip/QtDesigner/membersheet.sip
@@ -0,0 +1,45 @@
+// membersheet.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerMemberSheetExtension
+{
+%TypeHeaderCode
+#include <membersheet.h>
+%End
+
+public:
+    virtual ~QDesignerMemberSheetExtension();
+    virtual int count() const = 0 /__len__/;
+    virtual int indexOf(const QString &name) const = 0;
+    virtual QString memberName(int index) const = 0;
+    virtual QString memberGroup(int index) const = 0;
+    virtual void setMemberGroup(int index, const QString &group) = 0;
+    virtual bool isVisible(int index) const = 0;
+    virtual void setVisible(int index, bool b) = 0;
+    virtual bool isSignal(int index) const = 0;
+    virtual bool isSlot(int index) const = 0;
+    virtual bool inheritedFromWidget(int index) const = 0;
+    virtual QString declaredInClass(int index) const = 0;
+    virtual QString signature(int index) const = 0;
+    virtual QList<QByteArray> parameterTypes(int index) const = 0;
+    virtual QList<QByteArray> parameterNames(int index) const = 0;
+};
diff --git a/sip/QtDesigner/propertysheet.sip b/sip/QtDesigner/propertysheet.sip
new file mode 100644
index 0000000..5ac40ff
--- /dev/null
+++ b/sip/QtDesigner/propertysheet.sip
@@ -0,0 +1,47 @@
+// propertysheet.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerPropertySheetExtension
+{
+%TypeHeaderCode
+#include <propertysheet.h>
+%End
+
+public:
+    virtual ~QDesignerPropertySheetExtension();
+    virtual int count() const = 0 /__len__/;
+    virtual int indexOf(const QString &name) const = 0;
+    virtual QString propertyName(int index) const = 0;
+    virtual QString propertyGroup(int index) const = 0;
+    virtual void setPropertyGroup(int index, const QString &group) = 0;
+    virtual bool hasReset(int index) const = 0;
+    virtual bool reset(int index) = 0;
+    virtual bool isVisible(int index) const = 0;
+    virtual void setVisible(int index, bool b) = 0;
+    virtual bool isAttribute(int index) const = 0;
+    virtual void setAttribute(int index, bool b) = 0;
+    virtual QVariant property(int index) const = 0;
+    virtual void setProperty(int index, const QVariant &value) = 0;
+    virtual bool isChanged(int index) const = 0;
+    virtual void setChanged(int index, bool changed) = 0;
+    virtual bool isEnabled(int index) const;
+};
diff --git a/sip/QtDesigner/qextensionmanager.sip b/sip/QtDesigner/qextensionmanager.sip
new file mode 100644
index 0000000..2e7750d
--- /dev/null
+++ b/sip/QtDesigner/qextensionmanager.sip
@@ -0,0 +1,77 @@
+// qextensionmanager.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QExtensionManager : QObject, QAbstractExtensionManager
+{
+%TypeHeaderCode
+#include <qextensionmanager.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QPyDesignerCustomWidgetPlugin, &sipType_QPyDesignerCustomWidgetPlugin, -1, 1},
+        {sipName_QExtensionFactory, &sipType_QExtensionFactory, -1, 2},
+        {sipName_QPyDesignerMemberSheetExtension, &sipType_QPyDesignerMemberSheetExtension, -1, 3},
+        {sipName_QDesignerFormEditorInterface, &sipType_QDesignerFormEditorInterface, -1, 4},
+        {sipName_QDesignerWidgetBoxInterface, &sipType_QDesignerWidgetBoxInterface, -1, 5},
+        {sipName_QDesignerFormWindowInterface, &sipType_QDesignerFormWindowInterface, -1, 6},
+        {sipName_QDesignerActionEditorInterface, &sipType_QDesignerActionEditorInterface, -1, 7},
+        {sipName_QPyDesignerContainerExtension, &sipType_QPyDesignerContainerExtension, -1, 8},
+        {sipName_QDesignerPropertyEditorInterface, &sipType_QDesignerPropertyEditorInterface, -1, 9},
+        {sipName_QDesignerFormWindowManagerInterface, &sipType_QDesignerFormWindowManagerInterface, -1, 10},
+        {sipName_QPyDesignerTaskMenuExtension, &sipType_QPyDesignerTaskMenuExtension, -1, 11},
+        {sipName_QPyDesignerPropertySheetExtension, &sipType_QPyDesignerPropertySheetExtension, -1, 12},
+        {sipName_QDesignerObjectInspectorInterface, &sipType_QDesignerObjectInspectorInterface, -1, 13},
+        {sipName_QPyDesignerCustomWidgetCollectionPlugin, &sipType_QPyDesignerCustomWidgetCollectionPlugin, -1, 14},
+        {sipName_QExtensionManager, &sipType_QExtensionManager, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    QExtensionManager(QObject *parent /TransferThis/ = 0);
+    virtual ~QExtensionManager();
+    virtual void registerExtensions(QAbstractExtensionFactory *factory, const QString &iid /DocValue="''"/ = QString());
+    virtual void unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid /DocValue="''"/ = QString());
+    virtual QObject *extension(QObject *object, const QString &iid) const;
+};
diff --git a/sip/QtDesigner/qpydesignercontainerextension.sip b/sip/QtDesigner/qpydesignercontainerextension.sip
new file mode 100644
index 0000000..9099a86
--- /dev/null
+++ b/sip/QtDesigner/qpydesignercontainerextension.sip
@@ -0,0 +1,32 @@
+// This is the SIP specification of the QPyDesignerContainerExtension class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPyDesignerContainerExtension : QObject, QDesignerContainerExtension
+{
+%TypeHeaderCode
+#include <qpydesignercontainerextension.h>
+%End
+
+public:
+    QPyDesignerContainerExtension(QObject *parent /TransferThis/);
+
+private:
+    QPyDesignerContainerExtension(const QPyDesignerContainerExtension &);
+};
diff --git a/sip/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip b/sip/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip
new file mode 100644
index 0000000..cac0c44
--- /dev/null
+++ b/sip/QtDesigner/qpydesignercustomwidgetcollectionplugin.sip
@@ -0,0 +1,33 @@
+// This is the SIP specification of the QPyDesignerCustomWidgetCollectionPlugin
+// class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPyDesignerCustomWidgetCollectionPlugin : QObject, QDesignerCustomWidgetCollectionInterface
+{
+%TypeHeaderCode
+#include <qpydesignercustomwidgetcollectionplugin.h>
+%End
+
+public:
+    QPyDesignerCustomWidgetCollectionPlugin(QObject *parent /TransferThis/ = 0);
+
+private:
+    QPyDesignerCustomWidgetCollectionPlugin(const QPyDesignerCustomWidgetCollectionPlugin &);
+};
diff --git a/sip/QtDesigner/qpydesignercustomwidgetplugin.sip b/sip/QtDesigner/qpydesignercustomwidgetplugin.sip
new file mode 100644
index 0000000..c096849
--- /dev/null
+++ b/sip/QtDesigner/qpydesignercustomwidgetplugin.sip
@@ -0,0 +1,32 @@
+// This is the SIP specification of the QPyDesignerCustomWidgetPlugin class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPyDesignerCustomWidgetPlugin : QObject, QDesignerCustomWidgetInterface
+{
+%TypeHeaderCode
+#include <qpydesignercustomwidgetplugin.h>
+%End
+
+public:
+    QPyDesignerCustomWidgetPlugin(QObject *parent /TransferThis/ = 0);
+
+private:
+    QPyDesignerCustomWidgetPlugin(const QPyDesignerCustomWidgetPlugin &);
+};
diff --git a/sip/QtDesigner/qpydesignermembersheetextension.sip b/sip/QtDesigner/qpydesignermembersheetextension.sip
new file mode 100644
index 0000000..98c529d
--- /dev/null
+++ b/sip/QtDesigner/qpydesignermembersheetextension.sip
@@ -0,0 +1,32 @@
+// This is the SIP specification of the QPyDesignerMemberSheetExtension class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPyDesignerMemberSheetExtension : QObject, QDesignerMemberSheetExtension
+{
+%TypeHeaderCode
+#include <qpydesignermembersheetextension.h>
+%End
+
+public:
+    QPyDesignerMemberSheetExtension(QObject *parent /TransferThis/);
+
+private:
+    QPyDesignerMemberSheetExtension(const QPyDesignerMemberSheetExtension &);
+};
diff --git a/sip/QtDesigner/qpydesignerpropertysheetextension.sip b/sip/QtDesigner/qpydesignerpropertysheetextension.sip
new file mode 100644
index 0000000..7d3a06d
--- /dev/null
+++ b/sip/QtDesigner/qpydesignerpropertysheetextension.sip
@@ -0,0 +1,33 @@
+// This is the SIP specification of the QPyDesignerPropertySheetExtension
+// class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPyDesignerPropertySheetExtension : QObject, QDesignerPropertySheetExtension
+{
+%TypeHeaderCode
+#include <qpydesignerpropertysheetextension.h>
+%End
+
+public:
+    QPyDesignerPropertySheetExtension(QObject *parent /TransferThis/);
+
+private:
+    QPyDesignerPropertySheetExtension(const QPyDesignerPropertySheetExtension &);
+};
diff --git a/sip/QtDesigner/qpydesignertaskmenuextension.sip b/sip/QtDesigner/qpydesignertaskmenuextension.sip
new file mode 100644
index 0000000..16a2384
--- /dev/null
+++ b/sip/QtDesigner/qpydesignertaskmenuextension.sip
@@ -0,0 +1,32 @@
+// This is the SIP specification of the QPyDesignerTaskMenuExtension class.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPyDesignerTaskMenuExtension : QObject, QDesignerTaskMenuExtension
+{
+%TypeHeaderCode
+#include <qpydesignertaskmenuextension.h>
+%End
+
+public:
+    QPyDesignerTaskMenuExtension(QObject *parent /TransferThis/);
+
+private:
+    QPyDesignerTaskMenuExtension(const QPyDesignerTaskMenuExtension &);
+};
diff --git a/sip/QtDesigner/taskmenu.sip b/sip/QtDesigner/taskmenu.sip
new file mode 100644
index 0000000..1fefb20
--- /dev/null
+++ b/sip/QtDesigner/taskmenu.sip
@@ -0,0 +1,33 @@
+// taskmenu.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtDesigner Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesignerTaskMenuExtension
+{
+%TypeHeaderCode
+#include <taskmenu.h>
+%End
+
+public:
+    virtual ~QDesignerTaskMenuExtension();
+    virtual QList<QAction*> taskActions() const = 0;
+    virtual QAction *preferredEditAction() const;
+};
diff --git a/sip/QtGui/QtGuimod.sip b/sip/QtGui/QtGuimod.sip
new file mode 100644
index 0000000..b1aee08
--- /dev/null
+++ b/sip/QtGui/QtGuimod.sip
@@ -0,0 +1,136 @@
+// QtGuimod.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtGui, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include opengl_types.sip
+
+%Include qabstracttextdocumentlayout.sip
+%Include qbackingstore.sip
+%Include qbitmap.sip
+%Include qcolor.sip
+%Include qbrush.sip
+%Include qclipboard.sip
+%Include qcursor.sip
+%Include qdesktopservices.sip
+%Include qdrag.sip
+%Include qevent.sip
+%Include qfont.sip
+%Include qfontdatabase.sip
+%Include qfontinfo.sip
+%Include qfontmetrics.sip
+%Include qgenericmatrix.sip
+%Include qglyphrun.sip
+%Include qguiapplication.sip
+%Include qicon.sip
+%Include qiconengine.sip
+%Include qimage.sip
+%Include qimageiohandler.sip
+%Include qimagereader.sip
+%Include qimagewriter.sip
+%Include qinputmethod.sip
+%Include qkeysequence.sip
+%Include qmatrix4x4.sip
+%Include qmovie.sip
+%Include qoffscreensurface.sip
+%Include qopenglbuffer.sip
+%Include qopenglcontext.sip
+%Include qopengldebug.sip
+%Include qopenglframebufferobject.sip
+%Include qopenglpaintdevice.sip
+%Include qopenglpixeltransferoptions.sip
+%Include qopenglshaderprogram.sip
+%Include qopengltexture.sip
+%Include qopengltimerquery.sip
+%Include qopenglversionfunctions.sip
+%Include qopenglvertexarrayobject.sip
+%Include qpagedpaintdevice.sip
+%Include qpagelayout.sip
+%Include qpagesize.sip
+%Include qpainter.sip
+%Include qpaintdevice.sip
+%Include qpaintengine.sip
+%Include qpainterpath.sip
+%Include qpalette.sip
+%Include qpdfwriter.sip
+%Include qpen.sip
+%Include qpicture.sip
+%Include qpixmap.sip
+%Include qpixmapcache.sip
+%Include qpolygon.sip
+%Include qquaternion.sip
+%Include qrawfont.sip
+%Include qregion.sip
+%Include qrgb.sip
+%Include qscreen.sip
+%Include qsessionmanager.sip
+%Include qstandarditemmodel.sip
+%Include qstatictext.sip
+%Include qstylehints.sip
+%Include qsurface.sip
+%Include qsurfaceformat.sip
+%Include qsyntaxhighlighter.sip
+%Include qtextcursor.sip
+%Include qtextdocument.sip
+%Include qtextdocumentfragment.sip
+%Include qtextdocumentwriter.sip
+%Include qtextformat.sip
+%Include qtextlayout.sip
+%Include qtextlist.sip
+%Include qtextobject.sip
+%Include qtextoption.sip
+%Include qtexttable.sip
+%Include qtouchdevice.sip
+%Include qtransform.sip
+%Include qvalidator.sip
+%Include qvector2d.sip
+%Include qvector3d.sip
+%Include qvector4d.sip
+%Include qwindow.sip
+%Include qwindowdefs.sip
+%Include opengl_types.sip
+%Include qpygui_qlist.sip
+%Include qpygui_qpair.sip
+%Include qpygui_qvector.sip
diff --git a/sip/QtGui/opengl_types.sip b/sip/QtGui/opengl_types.sip
new file mode 100644
index 0000000..b30a202
--- /dev/null
+++ b/sip/QtGui/opengl_types.sip
@@ -0,0 +1,43 @@
+// This implements the typedefs for the OpenGL data types.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_OpenGL)
+
+typedef char GLchar;
+typedef qint8 GLbyte;
+typedef quint8 GLubyte;
+typedef quint8 GLboolean;
+typedef qint16 GLshort;
+typedef quint16 GLushort;
+typedef qint32 GLint;
+typedef qint32 GLsizei;
+typedef quint32 GLuint;
+typedef quint32 GLenum;
+typedef quint32 GLbitfield;
+%If (PyQt_Desktop_OpenGL)
+typedef quint64 GLuint64;       // This is in OpenGL ES v3.
+typedef double GLdouble;
+%End
+typedef float GLfloat;
+typedef float GLclampf;
+typedef long GLintptr;
+typedef long GLsizeiptr;
+
+%End
diff --git a/sip/QtGui/qabstracttextdocumentlayout.sip b/sip/QtGui/qabstracttextdocumentlayout.sip
new file mode 100644
index 0000000..4ca1a44
--- /dev/null
+++ b/sip/QtGui/qabstracttextdocumentlayout.sip
@@ -0,0 +1,96 @@
+// qabstracttextdocumentlayout.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractTextDocumentLayout : QObject
+{
+%TypeHeaderCode
+#include <qabstracttextdocumentlayout.h>
+%End
+
+public:
+    explicit QAbstractTextDocumentLayout(QTextDocument *doc);
+    virtual ~QAbstractTextDocumentLayout();
+
+    struct Selection
+    {
+%TypeHeaderCode
+#include <qabstracttextdocumentlayout.h>
+%End
+
+        QTextCursor cursor;
+        QTextCharFormat format;
+    };
+
+    struct PaintContext
+    {
+%TypeHeaderCode
+#include <qabstracttextdocumentlayout.h>
+%End
+
+        PaintContext();
+        int cursorPosition;
+        QPalette palette;
+        QRectF clip;
+        QVector<QAbstractTextDocumentLayout::Selection> selections;
+    };
+
+    virtual void draw(QPainter *painter, const QAbstractTextDocumentLayout::PaintContext &context) = 0;
+    virtual int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const = 0;
+    QString anchorAt(const QPointF &pos) const;
+    virtual int pageCount() const = 0;
+    virtual QSizeF documentSize() const = 0;
+    virtual QRectF frameBoundingRect(QTextFrame *frame) const = 0;
+    virtual QRectF blockBoundingRect(const QTextBlock &block) const = 0;
+    void setPaintDevice(QPaintDevice *device);
+    QPaintDevice *paintDevice() const;
+    QTextDocument *document() const;
+    void registerHandler(int objectType, QObject *component);
+%If (Qt_5_2_0 -)
+    void unregisterHandler(int objectType, QObject *component = 0);
+%End
+    QTextObjectInterface *handlerForObject(int objectType) const;
+
+signals:
+    void update(const QRectF &rect = QRectF(0.0, 0.0, 1.0e+9, 1.0e+9));
+    void documentSizeChanged(const QSizeF &newSize);
+    void pageCountChanged(int newPages);
+    void updateBlock(const QTextBlock &block);
+
+protected:
+    virtual void documentChanged(int from, int charsRemoved, int charsAdded) = 0;
+    virtual void resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format);
+    virtual void positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format);
+    virtual void drawInlineObject(QPainter *painter, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextFormat &format);
+    QTextCharFormat format(int pos);
+};
+
+class QTextObjectInterface /Mixin,PyQtInterface="org.qt-project.Qt.QTextObjectInterface"/
+{
+%TypeHeaderCode
+#include <qabstracttextdocumentlayout.h>
+%End
+
+public:
+    virtual ~QTextObjectInterface();
+    virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0;
+    virtual void drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0;
+};
diff --git a/sip/QtGui/qbackingstore.sip b/sip/QtGui/qbackingstore.sip
new file mode 100644
index 0000000..57af28f
--- /dev/null
+++ b/sip/QtGui/qbackingstore.sip
@@ -0,0 +1,43 @@
+// qbackingstore.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QBackingStore /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qbackingstore.h>
+%End
+
+public:
+    explicit QBackingStore(QWindow *window);
+    ~QBackingStore();
+    QWindow *window() const;
+    QPaintDevice *paintDevice();
+    void flush(const QRegion &region, QWindow *window = 0, const QPoint &offset = QPoint());
+    void resize(const QSize &size);
+    QSize size() const;
+    bool scroll(const QRegion &area, int dx, int dy);
+    void beginPaint(const QRegion &);
+    void endPaint();
+    void setStaticContents(const QRegion &region);
+    QRegion staticContents() const;
+    bool hasStaticContents() const;
+};
diff --git a/sip/QtGui/qbitmap.sip b/sip/QtGui/qbitmap.sip
new file mode 100644
index 0000000..7fd772d
--- /dev/null
+++ b/sip/QtGui/qbitmap.sip
@@ -0,0 +1,46 @@
+// qbitmap.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QBitmap : QPixmap
+{
+%TypeHeaderCode
+#include <qbitmap.h>
+%End
+
+public:
+    QBitmap();
+    QBitmap(const QPixmap &);
+    QBitmap(int w, int h);
+    explicit QBitmap(const QSize &);
+    QBitmap(const QString &fileName, const char *format = 0);
+    QBitmap(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new sipQBitmap(a0->value<QBitmap>());
+%End
+
+    virtual ~QBitmap();
+    void clear();
+    static QBitmap fromImage(const QImage &image, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    static QBitmap fromData(const QSize &size, const uchar *bits, QImage::Format format = QImage::Format_MonoLSB);
+    QBitmap transformed(const QTransform &matrix) const;
+    void swap(QBitmap &other);
+};
diff --git a/sip/QtGui/qbrush.sip b/sip/QtGui/qbrush.sip
new file mode 100644
index 0000000..6ceeedd
--- /dev/null
+++ b/sip/QtGui/qbrush.sip
@@ -0,0 +1,227 @@
+// qbrush.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qbrush.h>
+%End
+
+class QBrush
+{
+%TypeHeaderCode
+#include <qbrush.h>
+%End
+
+%ConvertToTypeCode
+// SIP doesn't support automatic type convertors so we explicitly allow a
+// QColor or a QGradient to be used whenever a QBrush is expected.  Note that
+// SIP must process QColor before QBrush so that the former's QVariant cast
+// operator is applied before the latter's.
+
+if (sipIsErr == NULL)
+    return (sipCanConvertToType(sipPy, sipType_QBrush, SIP_NO_CONVERTORS) ||
+            sipCanConvertToType(sipPy, sipType_QColor, 0) ||
+            sipCanConvertToType(sipPy, sipType_QGradient, 0));
+
+if (sipCanConvertToType(sipPy, sipType_QBrush, SIP_NO_CONVERTORS))
+{
+    *sipCppPtr = reinterpret_cast<QBrush *>(sipConvertToType(sipPy, sipType_QBrush, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+    return 0;
+}
+
+int state;
+
+if (sipCanConvertToType(sipPy, sipType_QColor, 0))
+{
+    QColor *c = reinterpret_cast<QColor *>(sipConvertToType(sipPy, sipType_QColor, 0, 0, &state, sipIsErr));
+
+    if (*sipIsErr)
+    {
+        sipReleaseType(c, sipType_QColor, state);
+        return 0;
+    }
+
+    *sipCppPtr = new QBrush(*c);
+
+    sipReleaseType(c, sipType_QColor, state);
+
+    return sipGetState(sipTransferObj);
+}
+
+QGradient *g = reinterpret_cast<QGradient *>(sipConvertToType(sipPy, sipType_QGradient, 0, 0, &state, sipIsErr));
+
+if (*sipIsErr)
+{
+    sipReleaseType(g, sipType_QGradient, state);
+    return 0;
+}
+
+*sipCppPtr = new QBrush(*g);
+
+sipReleaseType(g, sipType_QGradient, state);
+
+return sipGetState(sipTransferObj);
+%End
+
+public:
+    QBrush();
+    QBrush(Qt::BrushStyle bs);
+    QBrush(const QColor &color, Qt::BrushStyle style = Qt::SolidPattern);
+    QBrush(Qt::GlobalColor color, Qt::BrushStyle style = Qt::SolidPattern);
+    QBrush(const QColor &color, const QPixmap &pixmap);
+    QBrush(Qt::GlobalColor color, const QPixmap &pixmap);
+    QBrush(const QPixmap &pixmap);
+    QBrush(const QImage &image);
+    QBrush(const QGradient &gradient);
+    QBrush(const QBrush &brush);
+    QBrush(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QBrush(a0->value<QBrush>());
+%End
+
+    ~QBrush();
+    void setStyle(Qt::BrushStyle);
+    QPixmap texture() const;
+    void setTexture(const QPixmap &pixmap);
+    void setColor(const QColor &color);
+    const QGradient *gradient() const;
+    bool isOpaque() const;
+    bool operator==(const QBrush &b) const;
+    bool operator!=(const QBrush &b) const;
+    void setColor(Qt::GlobalColor acolor);
+    Qt::BrushStyle style() const;
+    const QColor &color() const;
+    void setTextureImage(const QImage &image);
+    QImage textureImage() const;
+    void setTransform(const QTransform &);
+    QTransform transform() const;
+    void swap(QBrush &other);
+};
+
+QDataStream &operator>>(QDataStream &, QBrush & /Constrained/) /ReleaseGIL/;
+QDataStream &operator<<(QDataStream &, const QBrush & /Constrained/) /ReleaseGIL/;
+typedef QVector<QPair<qreal, QColor>> QGradientStops;
+
+class QGradient
+{
+%TypeHeaderCode
+#include <qbrush.h>
+%End
+
+public:
+    enum CoordinateMode
+    {
+        LogicalMode,
+        StretchToDeviceMode,
+        ObjectBoundingMode,
+    };
+
+    enum Type
+    {
+        LinearGradient,
+        RadialGradient,
+        ConicalGradient,
+        NoGradient,
+    };
+
+    enum Spread
+    {
+        PadSpread,
+        ReflectSpread,
+        RepeatSpread,
+    };
+
+    QGradient();
+    QGradient::Type type() const;
+    QGradient::Spread spread() const;
+    void setColorAt(qreal pos, const QColor &color);
+    void setStops(const QGradientStops &stops);
+    QGradientStops stops() const;
+    bool operator==(const QGradient &gradient) const;
+    bool operator!=(const QGradient &other) const;
+    void setSpread(QGradient::Spread aspread);
+    QGradient::CoordinateMode coordinateMode() const;
+    void setCoordinateMode(QGradient::CoordinateMode mode);
+};
+
+class QLinearGradient : QGradient
+{
+%TypeHeaderCode
+#include <qbrush.h>
+%End
+
+public:
+    QLinearGradient();
+    QLinearGradient(const QPointF &start, const QPointF &finalStop);
+    QLinearGradient(qreal xStart, qreal yStart, qreal xFinalStop, qreal yFinalStop);
+    QPointF start() const;
+    QPointF finalStop() const;
+    void setStart(const QPointF &start);
+    void setStart(qreal x, qreal y);
+    void setFinalStop(const QPointF &stop);
+    void setFinalStop(qreal x, qreal y);
+};
+
+class QRadialGradient : QGradient
+{
+%TypeHeaderCode
+#include <qbrush.h>
+%End
+
+public:
+    QRadialGradient();
+    QRadialGradient(const QPointF &center, qreal radius, const QPointF &focalPoint);
+    QRadialGradient(const QPointF &center, qreal centerRadius, const QPointF &focalPoint, qreal focalRadius);
+    QRadialGradient(const QPointF &center, qreal radius);
+    QRadialGradient(qreal cx, qreal cy, qreal radius, qreal fx, qreal fy);
+    QRadialGradient(qreal cx, qreal cy, qreal centerRadius, qreal fx, qreal fy, qreal focalRadius);
+    QRadialGradient(qreal cx, qreal cy, qreal radius);
+    QPointF center() const;
+    QPointF focalPoint() const;
+    qreal radius() const;
+    void setCenter(const QPointF &center);
+    void setCenter(qreal x, qreal y);
+    void setFocalPoint(const QPointF &focalPoint);
+    void setFocalPoint(qreal x, qreal y);
+    void setRadius(qreal radius);
+    qreal centerRadius() const;
+    void setCenterRadius(qreal radius);
+    qreal focalRadius() const;
+    void setFocalRadius(qreal radius);
+};
+
+class QConicalGradient : QGradient
+{
+%TypeHeaderCode
+#include <qbrush.h>
+%End
+
+public:
+    QConicalGradient();
+    QConicalGradient(const QPointF &center, qreal startAngle);
+    QConicalGradient(qreal cx, qreal cy, qreal startAngle);
+    QPointF center() const;
+    qreal angle() const;
+    void setCenter(const QPointF &center);
+    void setCenter(qreal x, qreal y);
+    void setAngle(qreal angle);
+};
diff --git a/sip/QtGui/qclipboard.sip b/sip/QtGui/qclipboard.sip
new file mode 100644
index 0000000..5d25388
--- /dev/null
+++ b/sip/QtGui/qclipboard.sip
@@ -0,0 +1,95 @@
+// qclipboard.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QClipboard : QObject
+{
+%TypeHeaderCode
+#include <qclipboard.h>
+%End
+
+    explicit QClipboard(QObject *parent /TransferThis/);
+    virtual ~QClipboard();
+
+public:
+    enum Mode
+    {
+        Clipboard,
+        Selection,
+        FindBuffer,
+    };
+
+    void clear(QClipboard::Mode mode = QClipboard::Clipboard);
+    bool supportsFindBuffer() const;
+    bool supportsSelection() const;
+    bool ownsClipboard() const;
+    bool ownsFindBuffer() const;
+    bool ownsSelection() const;
+    QString text(QClipboard::Mode mode = QClipboard::Clipboard) const;
+    SIP_PYTUPLE text(const QString &subtype, QClipboard::Mode mode = QClipboard::Clipboard) const /DocType="(str, str)"/;
+%MethodCode
+        QString *text;
+        QString *subtype = new QString(*a0);
+        
+        Py_BEGIN_ALLOW_THREADS
+        text = new QString(sipCpp->text(*subtype, a1));
+        Py_END_ALLOW_THREADS
+        
+        PyObject *text_obj = sipConvertFromNewType(text, sipType_QString, NULL);
+        PyObject *subtype_obj = sipConvertFromNewType(subtype, sipType_QString, NULL);
+        
+        if (text_obj && subtype_obj)
+            sipRes = PyTuple_Pack(2, text_obj, subtype_obj);
+        
+        Py_XDECREF(text_obj);
+        Py_XDECREF(subtype_obj);
+%End
+
+    void setText(const QString &, QClipboard::Mode mode = QClipboard::Clipboard);
+    const QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) const;
+    void setMimeData(QMimeData *data /GetWrapper/, QClipboard::Mode mode = QClipboard::Clipboard);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->setMimeData(a0, a1);
+        Py_END_ALLOW_THREADS
+        
+        // Transfer ownership to C++ and make sure the Python object stays alive by
+        // giving it a reference to itself.  The cycle will be broken by QMimeData's
+        // virtual dtor.  The reason we don't do the obvious and just use /Transfer/ is
+        // that the QClipboard Python object we would transfer ownership to is likely
+        // to be garbage collected immediately afterwards.
+        sipTransferTo(a0Wrapper, a0Wrapper);
+%End
+
+    QImage image(QClipboard::Mode mode = QClipboard::Clipboard) const;
+    QPixmap pixmap(QClipboard::Mode mode = QClipboard::Clipboard) const;
+    void setImage(const QImage &, QClipboard::Mode mode = QClipboard::Clipboard);
+    void setPixmap(const QPixmap &, QClipboard::Mode mode = QClipboard::Clipboard);
+
+signals:
+    void changed(QClipboard::Mode mode);
+    void dataChanged();
+    void findBufferChanged();
+    void selectionChanged();
+
+private:
+    QClipboard(const QClipboard &);
+};
diff --git a/sip/QtGui/qcolor.sip b/sip/QtGui/qcolor.sip
new file mode 100644
index 0000000..67f3ade
--- /dev/null
+++ b/sip/QtGui/qcolor.sip
@@ -0,0 +1,180 @@
+// qcolor.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qcolor.h>
+%End
+
+class QColor
+{
+%TypeHeaderCode
+#include <qcolor.h>
+%End
+
+%ConvertToTypeCode
+// SIP doesn't support automatic type convertors so we explicitly allow a
+// Qt::GlobalColor to be used whenever a QColor is expected.  Note that SIP
+// must process QColor before QBrush so that the former's QVariant cast
+// operator is applied before the latter's.
+
+if (sipIsErr == NULL)
+    return (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_Qt_GlobalColor)) ||
+            sipCanConvertToType(sipPy, sipType_QColor, SIP_NO_CONVERTORS));
+
+if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_Qt_GlobalColor)))
+{
+    *sipCppPtr = new QColor((Qt::GlobalColor)SIPLong_AsLong(sipPy));
+
+    return sipGetState(sipTransferObj);
+}
+
+*sipCppPtr = reinterpret_cast<QColor *>(sipConvertToType(sipPy, sipType_QColor, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+return 0;
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"iiii", sipCpp->red(), sipCpp->green(), sipCpp->blue(), sipCpp->alpha());
+%End
+
+public:
+    enum Spec
+    {
+        Invalid,
+        Rgb,
+        Hsv,
+        Cmyk,
+        Hsl,
+    };
+
+    QColor(Qt::GlobalColor color /Constrained/);
+    QColor(QRgb rgb);
+    QColor(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QColor(a0->value<QColor>());
+%End
+
+    QString name() const;
+    void setNamedColor(const QString &name);
+    static QStringList colorNames();
+    QColor::Spec spec() const;
+    int alpha() const;
+    void setAlpha(int alpha);
+    qreal alphaF() const;
+    void setAlphaF(qreal alpha);
+    int red() const;
+    int green() const;
+    int blue() const;
+    void setRed(int red);
+    void setGreen(int green);
+    void setBlue(int blue);
+    qreal redF() const;
+    qreal greenF() const;
+    qreal blueF() const;
+    void setRedF(qreal red);
+    void setGreenF(qreal green);
+    void setBlueF(qreal blue);
+    void getRgb(int *r, int *g, int *b, int *alpha = 0) const;
+    void setRgb(int r, int g, int b, int alpha = 255);
+    void getRgbF(qreal *r, qreal *g, qreal *b, qreal *alpha = 0) const;
+    void setRgbF(qreal r, qreal g, qreal b, qreal alpha = 1.0e+0);
+    QRgb rgba() const;
+    void setRgba(QRgb rgba);
+    QRgb rgb() const;
+    void setRgb(QRgb rgb);
+    int hue() const;
+    int saturation() const;
+    int value() const;
+    qreal hueF() const;
+    qreal saturationF() const;
+    qreal valueF() const;
+    void getHsv(int *h, int *s, int *v, int *alpha = 0) const;
+    void setHsv(int h, int s, int v, int alpha = 255);
+    void getHsvF(qreal *h, qreal *s, qreal *v, qreal *alpha = 0) const;
+    void setHsvF(qreal h, qreal s, qreal v, qreal alpha = 1.0e+0);
+    int cyan() const;
+    int magenta() const;
+    int yellow() const;
+    int black() const;
+    qreal cyanF() const;
+    qreal magentaF() const;
+    qreal yellowF() const;
+    qreal blackF() const;
+    void getCmyk(int *c, int *m, int *y, int *k, int *alpha = 0);
+    void setCmyk(int c, int m, int y, int k, int alpha = 255);
+    void getCmykF(qreal *c, qreal *m, qreal *y, qreal *k, qreal *alpha = 0);
+    void setCmykF(qreal c, qreal m, qreal y, qreal k, qreal alpha = 1.0e+0);
+    QColor toRgb() const;
+    QColor toHsv() const;
+    QColor toCmyk() const;
+    QColor convertTo(QColor::Spec colorSpec) const;
+    static QColor fromRgb(QRgb rgb);
+    static QColor fromRgba(QRgb rgba);
+    static QColor fromRgb(int r, int g, int b, int alpha = 255);
+    static QColor fromRgbF(qreal r, qreal g, qreal b, qreal alpha = 1.0e+0);
+    static QColor fromHsv(int h, int s, int v, int alpha = 255);
+    static QColor fromHsvF(qreal h, qreal s, qreal v, qreal alpha = 1.0e+0);
+    static QColor fromCmyk(int c, int m, int y, int k, int alpha = 255);
+    static QColor fromCmykF(qreal c, qreal m, qreal y, qreal k, qreal alpha = 1.0e+0);
+    bool operator==(const QColor &c) const;
+    bool operator!=(const QColor &c) const;
+    QColor();
+    QColor(int r, int g, int b, int alpha = 255);
+    QColor(const QString &aname);
+    QColor(const QColor &acolor);
+    bool isValid() const;
+    QColor lighter(int factor = 150) const;
+    QColor darker(int factor = 200) const;
+    int hsvHue() const;
+    int hsvSaturation() const;
+    qreal hsvHueF() const;
+    qreal hsvSaturationF() const;
+    int hslHue() const;
+    int hslSaturation() const;
+    int lightness() const;
+    qreal hslHueF() const;
+    qreal hslSaturationF() const;
+    qreal lightnessF() const;
+    void getHsl(int *h, int *s, int *l, int *alpha = 0) const;
+    void setHsl(int h, int s, int l, int alpha = 255);
+    void getHslF(qreal *h, qreal *s, qreal *l, qreal *alpha = 0) const;
+    void setHslF(qreal h, qreal s, qreal l, qreal alpha = 1.0e+0);
+    QColor toHsl() const;
+    static QColor fromHsl(int h, int s, int l, int alpha = 255);
+    static QColor fromHslF(qreal h, qreal s, qreal l, qreal alpha = 1.0e+0);
+    static bool isValidColor(const QString &name);
+%If (Qt_5_2_0 -)
+
+    enum NameFormat
+    {
+        HexRgb,
+        HexArgb,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+    QString name(QColor::NameFormat format) const;
+%End
+};
+
+QDataStream &operator<<(QDataStream &, const QColor & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QColor & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qcursor.sip b/sip/QtGui/qcursor.sip
new file mode 100644
index 0000000..fbc6fad
--- /dev/null
+++ b/sip/QtGui/qcursor.sip
@@ -0,0 +1,77 @@
+// qcursor.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qcursor.h>
+%End
+
+class QCursor
+{
+%TypeHeaderCode
+#include <qcursor.h>
+%End
+
+%ConvertToTypeCode
+// SIP doesn't support automatic type convertors so we explicitly allow a
+// Qt::CursorShape to be used whenever a QCursor is expected.
+
+if (sipIsErr == NULL)
+    return (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_Qt_CursorShape)) ||
+            sipCanConvertToType(sipPy, sipType_QCursor, SIP_NO_CONVERTORS));
+
+if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_Qt_CursorShape)))
+{
+    *sipCppPtr = new QCursor((Qt::CursorShape)SIPLong_AsLong(sipPy));
+
+    return sipGetState(sipTransferObj);
+}
+
+*sipCppPtr = reinterpret_cast<QCursor *>(sipConvertToType(sipPy, sipType_QCursor, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+return 0;
+%End
+
+public:
+    QCursor();
+    QCursor(Qt::CursorShape shape);
+    QCursor(const QBitmap &bitmap, const QBitmap &mask, int hotX = -1, int hotY = -1);
+    QCursor(const QPixmap &pixmap, int hotX = -1, int hotY = -1);
+    QCursor(const QCursor &cursor);
+    QCursor(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QCursor(a0->value<QCursor>());
+%End
+
+    ~QCursor();
+    Qt::CursorShape shape() const;
+    void setShape(Qt::CursorShape newShape);
+    const QBitmap *bitmap() const;
+    const QBitmap *mask() const;
+    QPixmap pixmap() const;
+    QPoint hotSpot() const;
+    static QPoint pos();
+    static void setPos(int x, int y);
+    static void setPos(const QPoint &p);
+};
+
+QDataStream &operator<<(QDataStream &outS, const QCursor &cursor /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &inS, QCursor &cursor /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qdesktopservices.sip b/sip/QtGui/qdesktopservices.sip
new file mode 100644
index 0000000..6a152d9
--- /dev/null
+++ b/sip/QtGui/qdesktopservices.sip
@@ -0,0 +1,61 @@
+// qdesktopservices.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesktopServices
+{
+%TypeHeaderCode
+#include <qdesktopservices.h>
+%End
+
+public:
+    static bool openUrl(const QUrl &url) /ReleaseGIL/;
+    static void setUrlHandler(const QString &scheme, QObject *receiver, const char *method);
+    static void setUrlHandler(const QString &scheme, SIP_PYCALLABLE method);
+%MethodCode
+        // Allow a callable that must be a slot of a QObject, although we never tell
+        // the user if it isn't.
+        if (PyMethod_Check(a1))
+        {
+            PyObject *self = PyMethod_GET_SELF(a1);
+            PyObject *func = PyMethod_GET_FUNCTION(a1);
+        
+            int iserr = 0;
+            QObject *receiver = reinterpret_cast<QObject *>(sipForceConvertToType(
+                    self, sipType_QObject, NULL, SIP_NOT_NONE, NULL, &iserr));
+        
+            if (!iserr && PyFunction_Check(func))
+            {
+                PyObject *ascii_obj = ((PyFunctionObject *)func)->func_name;
+                const char *ascii = sipString_AsASCIIString(&ascii_obj);
+        
+                if (ascii)
+                {
+                    QDesktopServices::setUrlHandler(*a0, receiver, ascii);
+        
+                    Py_DECREF(ascii_obj);
+                }
+            }
+        }
+%End
+
+    static void unsetUrlHandler(const QString &scheme);
+};
diff --git a/sip/QtGui/qdrag.sip b/sip/QtGui/qdrag.sip
new file mode 100644
index 0000000..9745790
--- /dev/null
+++ b/sip/QtGui/qdrag.sip
@@ -0,0 +1,59 @@
+// qdrag.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDrag : QObject
+{
+%TypeHeaderCode
+#include <qdrag.h>
+%End
+
+public:
+    explicit QDrag(QObject *dragSource /TransferThis/);
+    virtual ~QDrag();
+    Qt::DropAction exec(Qt::DropActions supportedActions = Qt::MoveAction) /PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    Qt::DropAction exec(Qt::DropActions supportedActions = Qt::MoveAction) /ReleaseGIL/;
+%End
+    Qt::DropAction exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction) /PyName=exec_,ReleaseGIL/;
+    Qt::DropAction exec(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction) /ReleaseGIL/;
+    void setMimeData(QMimeData *data /Transfer/);
+    QMimeData *mimeData() const;
+    void setPixmap(const QPixmap &);
+    QPixmap pixmap() const;
+    void setHotSpot(const QPoint &hotspot);
+    QPoint hotSpot() const;
+    QObject *source() const;
+    QObject *target() const;
+    void setDragCursor(const QPixmap &cursor, Qt::DropAction action);
+
+signals:
+    void actionChanged(Qt::DropAction action);
+    void targetChanged(QObject *newTarget);
+
+public:
+    QPixmap dragCursor(Qt::DropAction action) const;
+    Qt::DropActions supportedActions() const;
+    Qt::DropAction defaultAction() const;
+
+private:
+    QDrag(const QDrag &);
+};
diff --git a/sip/QtGui/qevent.sip b/sip/QtGui/qevent.sip
new file mode 100644
index 0000000..429b1bc
--- /dev/null
+++ b/sip/QtGui/qevent.sip
@@ -0,0 +1,825 @@
+// qevent.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qevent.h>
+%End
+
+class QInputEvent : QEvent /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+%ConvertToSubClassCode
+    switch (sipCpp->type())
+    {
+    case QEvent::ActionAdded:
+    case QEvent::ActionChanged:
+    case QEvent::ActionRemoved:
+        sipType = sipType_QActionEvent;
+        break;
+    
+    case QEvent::Close:
+        sipType = sipType_QCloseEvent;
+        break;
+    
+    case QEvent::ContextMenu:
+        sipType = sipType_QContextMenuEvent;
+        break;
+    
+    case QEvent::DragEnter:
+        sipType = sipType_QDragEnterEvent;
+        break;
+    
+    case QEvent::DragLeave:
+        sipType = sipType_QDragLeaveEvent;
+        break;
+    
+    case QEvent::DragMove:
+        sipType = sipType_QDragMoveEvent;
+        break;
+    
+    case QEvent::Drop:
+        sipType = sipType_QDropEvent;
+        break;
+    
+    case QEvent::Enter:
+        sipType = sipType_QEnterEvent;
+        break;
+    
+    case QEvent::FileOpen:
+        sipType = sipType_QFileOpenEvent;
+        break;
+    
+    case QEvent::FocusIn:
+    case QEvent::FocusOut:
+        sipType = sipType_QFocusEvent;
+        break;
+    
+    case QEvent::Hide:
+        sipType = sipType_QHideEvent;
+        break;
+    
+    case QEvent::HoverEnter:
+    case QEvent::HoverLeave:
+    case QEvent::HoverMove:
+        sipType = sipType_QHoverEvent;
+        break;
+    
+    case QEvent::IconDrag:
+        sipType = sipType_QIconDragEvent;
+        break;
+    
+    case QEvent::InputMethod:
+        sipType = sipType_QInputMethodEvent;
+        break;
+    
+    case QEvent::KeyPress:
+    case QEvent::KeyRelease:
+    case QEvent::ShortcutOverride:
+        sipType = sipType_QKeyEvent;
+        break;
+    
+    case QEvent::MouseButtonDblClick:
+    case QEvent::MouseButtonPress:
+    case QEvent::MouseButtonRelease:
+    case QEvent::MouseMove:
+        sipType = sipType_QMouseEvent;
+        break;
+    
+    case QEvent::Move:
+        sipType = sipType_QMoveEvent;
+        break;
+    
+    case QEvent::Paint:
+        sipType = sipType_QPaintEvent;
+        break;
+    
+    case QEvent::Resize:
+        sipType = sipType_QResizeEvent;
+        break;
+    
+    case QEvent::Shortcut:
+        sipType = sipType_QShortcutEvent;
+        break;
+    
+    case QEvent::Show:
+        sipType = sipType_QShowEvent;
+        break;
+    
+    case QEvent::StatusTip:
+        sipType = sipType_QStatusTipEvent;
+        break;
+    
+    case QEvent::TabletMove:
+    case QEvent::TabletPress:
+    case QEvent::TabletRelease:
+    case QEvent::TabletEnterProximity:
+    case QEvent::TabletLeaveProximity:
+        sipType = sipType_QTabletEvent;
+        break;
+    
+    case QEvent::ToolTip:
+    case QEvent::WhatsThis:
+        sipType = sipType_QHelpEvent;
+        break;
+    
+    case QEvent::WhatsThisClicked:
+        sipType = sipType_QWhatsThisClickedEvent;
+        break;
+    
+    case QEvent::Wheel:
+        sipType = sipType_QWheelEvent;
+        break;
+    
+    case QEvent::WindowStateChange:
+        sipType = sipType_QWindowStateChangeEvent;
+        break;
+    
+    case QEvent::TouchBegin:
+    case QEvent::TouchUpdate:
+    case QEvent::TouchEnd:
+        sipType = sipType_QTouchEvent;
+        break;
+    
+    case QEvent::InputMethodQuery:
+        sipType = sipType_QInputMethodQueryEvent;
+        break;
+    
+    case QEvent::Expose:
+        sipType = sipType_QExposeEvent;
+        break;
+    
+    case QEvent::ScrollPrepare:
+        sipType = sipType_QScrollPrepareEvent;
+        break;
+    
+    case QEvent::Scroll:
+        sipType = sipType_QScrollEvent;
+        break;
+    
+    #if QT_VERSION >= 0x050200
+    case QEvent::NativeGesture:
+        sipType = sipType_QNativeGestureEvent;
+        break;
+    #endif
+    
+    default:
+        sipType = 0;
+    }
+%End
+
+public:
+    virtual ~QInputEvent();
+    Qt::KeyboardModifiers modifiers() const;
+    ulong timestamp() const;
+    void setTimestamp(ulong atimestamp);
+};
+
+class QMouseEvent : QInputEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QMouseEvent(QEvent::Type type, const QPointF &pos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers);
+    QMouseEvent(QEvent::Type type, const QPointF &pos, const QPointF &globalPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers);
+    QMouseEvent(QEvent::Type type, const QPointF &pos, const QPointF &windowPos, const QPointF &globalPos, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers);
+    virtual ~QMouseEvent();
+    QPoint pos() const;
+    QPoint globalPos() const;
+    int x() const;
+    int y() const;
+    int globalX() const;
+    int globalY() const;
+    Qt::MouseButton button() const;
+    Qt::MouseButtons buttons() const;
+    const QPointF &localPos() const;
+    const QPointF &windowPos() const;
+    const QPointF &screenPos() const;
+%If (Qt_5_3_0 -)
+    Qt::MouseEventSource source() const;
+%End
+%If (Qt_5_3_0 -)
+    Qt::MouseEventFlags flags() const;
+%End
+};
+
+class QHoverEvent : QInputEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QHoverEvent(QEvent::Type type, const QPointF &pos, const QPointF &oldPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier);
+    virtual ~QHoverEvent();
+    QPoint pos() const;
+    QPoint oldPos() const;
+    const QPointF &posF() const;
+    const QPointF &oldPosF() const;
+};
+
+class QWheelEvent : QInputEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers);
+%If (Qt_5_2_0 -)
+    QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase);
+%End
+    virtual ~QWheelEvent();
+    QPoint pos() const;
+    QPoint globalPos() const;
+    int x() const;
+    int y() const;
+    int globalX() const;
+    int globalY() const;
+    Qt::MouseButtons buttons() const;
+    QPoint pixelDelta() const;
+    QPoint angleDelta() const;
+    const QPointF &posF() const;
+    const QPointF &globalPosF() const;
+%If (Qt_5_2_0 -)
+    Qt::ScrollPhase phase() const;
+%End
+};
+
+class QTabletEvent : QInputEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    enum TabletDevice
+    {
+        NoDevice,
+        Puck,
+        Stylus,
+        Airbrush,
+        FourDMouse,
+        XFreeEraser,
+        RotationStylus,
+    };
+
+    enum PointerType
+    {
+        UnknownPointer,
+        Pen,
+        Cursor,
+        Eraser,
+    };
+
+    QTabletEvent(QEvent::Type t, const QPointF &pos, const QPointF &globalPos, int device, int pointerType, qreal pressure, int xTilt, int yTilt, qreal tangentialPressure, qreal rotation, int z, Qt::KeyboardModifiers keyState, qint64 uniqueID);
+    virtual ~QTabletEvent();
+    QPoint pos() const;
+    QPoint globalPos() const;
+    int x() const;
+    int y() const;
+    int globalX() const;
+    int globalY() const;
+    qreal hiResGlobalX() const;
+    qreal hiResGlobalY() const;
+    QTabletEvent::TabletDevice device() const;
+    QTabletEvent::PointerType pointerType() const;
+    qint64 uniqueId() const;
+    qreal pressure() const;
+    int z() const;
+    qreal tangentialPressure() const;
+    qreal rotation() const;
+    int xTilt() const;
+    int yTilt() const;
+    const QPointF &posF() const;
+    const QPointF &globalPosF() const;
+};
+
+class QKeyEvent : QInputEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, quint32 nativeScanCode, quint32 nativeVirtualKey, quint32 nativeModifiers, const QString &text = QString(), bool autorep = false, ushort count = 1);
+    QKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, const QString &text /DocValue="''"/ = QString(), bool autorep = false, ushort count = 1);
+    virtual ~QKeyEvent();
+    int key() const;
+    Qt::KeyboardModifiers modifiers() const;
+    QString text() const;
+    bool isAutoRepeat() const;
+    int count() const /__len__/;
+    bool matches(QKeySequence::StandardKey key) const;
+    quint32 nativeModifiers() const;
+    quint32 nativeScanCode() const;
+    quint32 nativeVirtualKey() const;
+};
+
+class QFocusEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QFocusEvent(QEvent::Type type, Qt::FocusReason reason = Qt::OtherFocusReason);
+    virtual ~QFocusEvent();
+    bool gotFocus() const;
+    bool lostFocus() const;
+    Qt::FocusReason reason() const;
+};
+
+class QPaintEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    explicit QPaintEvent(const QRegion &paintRegion);
+    explicit QPaintEvent(const QRect &paintRect);
+    virtual ~QPaintEvent();
+    const QRect &rect() const;
+    const QRegion &region() const;
+};
+
+class QMoveEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QMoveEvent(const QPoint &pos, const QPoint &oldPos);
+    virtual ~QMoveEvent();
+    const QPoint &pos() const;
+    const QPoint &oldPos() const;
+};
+
+class QResizeEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QResizeEvent(const QSize &size, const QSize &oldSize);
+    virtual ~QResizeEvent();
+    const QSize &size() const;
+    const QSize &oldSize() const;
+};
+
+class QCloseEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QCloseEvent();
+    virtual ~QCloseEvent();
+};
+
+class QIconDragEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QIconDragEvent();
+    virtual ~QIconDragEvent();
+};
+
+class QShowEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QShowEvent();
+    virtual ~QShowEvent();
+};
+
+class QHideEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QHideEvent();
+    virtual ~QHideEvent();
+};
+
+class QContextMenuEvent : QInputEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    enum Reason
+    {
+        Mouse,
+        Keyboard,
+        Other,
+    };
+
+    QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos, const QPoint &globalPos, Qt::KeyboardModifiers modifiers);
+    QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos, const QPoint &globalPos);
+    QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos);
+    virtual ~QContextMenuEvent();
+    int x() const;
+    int y() const;
+    int globalX() const;
+    int globalY() const;
+    const QPoint &pos() const;
+    const QPoint &globalPos() const;
+    QContextMenuEvent::Reason reason() const;
+};
+
+class QInputMethodEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    enum AttributeType
+    {
+        TextFormat,
+        Cursor,
+        Language,
+        Ruby,
+        Selection,
+    };
+
+    class Attribute
+    {
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+    public:
+        Attribute(QInputMethodEvent::AttributeType t, int s, int l, QVariant val);
+        QInputMethodEvent::AttributeType type;
+        int start;
+        int length;
+        QVariant value;
+    };
+
+    QInputMethodEvent();
+    QInputMethodEvent(const QString &preeditText, const QList<QInputMethodEvent::Attribute> &attributes);
+    QInputMethodEvent(const QInputMethodEvent &other);
+    void setCommitString(const QString &commitString, int from = 0, int length = 0);
+    const QList<QInputMethodEvent::Attribute> &attributes() const;
+    const QString &preeditString() const;
+    const QString &commitString() const;
+    int replacementStart() const;
+    int replacementLength() const;
+};
+
+class QInputMethodQueryEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    explicit QInputMethodQueryEvent(Qt::InputMethodQueries queries);
+    virtual ~QInputMethodQueryEvent();
+    Qt::InputMethodQueries queries() const;
+    void setValue(Qt::InputMethodQuery query, const QVariant &value);
+    QVariant value(Qt::InputMethodQuery query) const;
+};
+
+class QDropEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QDropEvent(const QPointF &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QEvent::Type type = QEvent::Drop);
+    virtual ~QDropEvent();
+    QPoint pos() const;
+    const QPointF &posF() const;
+    Qt::MouseButtons mouseButtons() const;
+    Qt::KeyboardModifiers keyboardModifiers() const;
+    Qt::DropActions possibleActions() const;
+    Qt::DropAction proposedAction() const;
+    void acceptProposedAction();
+    Qt::DropAction dropAction() const;
+    void setDropAction(Qt::DropAction action);
+    QObject *source() const;
+    const QMimeData *mimeData() const;
+};
+
+class QDragMoveEvent : QDropEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QDragMoveEvent(const QPoint &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, QEvent::Type type = QEvent::DragMove);
+    virtual ~QDragMoveEvent();
+    QRect answerRect() const;
+    void accept();
+    void ignore();
+    void accept(const QRect &r);
+    void ignore(const QRect &r);
+};
+
+class QDragEnterEvent : QDragMoveEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QDragEnterEvent(const QPoint &pos, Qt::DropActions actions, const QMimeData *data, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers);
+    virtual ~QDragEnterEvent();
+};
+
+class QDragLeaveEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QDragLeaveEvent();
+    virtual ~QDragLeaveEvent();
+};
+
+class QHelpEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QHelpEvent(QEvent::Type type, const QPoint &pos, const QPoint &globalPos);
+    virtual ~QHelpEvent();
+    int x() const;
+    int y() const;
+    int globalX() const;
+    int globalY() const;
+    const QPoint &pos() const;
+    const QPoint &globalPos() const;
+};
+
+class QStatusTipEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    explicit QStatusTipEvent(const QString &tip);
+    virtual ~QStatusTipEvent();
+    QString tip() const;
+};
+
+class QWhatsThisClickedEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    explicit QWhatsThisClickedEvent(const QString &href);
+    virtual ~QWhatsThisClickedEvent();
+    QString href() const;
+};
+
+class QActionEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QActionEvent(int type, QAction *action, QAction *before = 0);
+    virtual ~QActionEvent();
+    QAction *action() const;
+    QAction *before() const;
+};
+
+class QFileOpenEvent : QEvent /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    virtual ~QFileOpenEvent();
+    QString file() const;
+    QUrl url() const;
+    bool openFile(QFile &file, QFlags<QIODevice::OpenModeFlag> flags) const;
+};
+
+class QShortcutEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QShortcutEvent(const QKeySequence &key, int id, bool ambiguous = false);
+    virtual ~QShortcutEvent();
+    bool isAmbiguous() const;
+    const QKeySequence &key() const;
+    int shortcutId() const;
+};
+
+class QWindowStateChangeEvent : QEvent /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    virtual ~QWindowStateChangeEvent();
+    Qt::WindowStates oldState() const;
+};
+
+class QTouchEvent : QInputEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    class TouchPoint /NoDefaultCtors/
+    {
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+    public:
+        int id() const;
+        Qt::TouchPointState state() const;
+        QPointF pos() const;
+        QPointF startPos() const;
+        QPointF lastPos() const;
+        QPointF scenePos() const;
+        QPointF startScenePos() const;
+        QPointF lastScenePos() const;
+        QPointF screenPos() const;
+        QPointF startScreenPos() const;
+        QPointF lastScreenPos() const;
+        QPointF normalizedPos() const;
+        QPointF startNormalizedPos() const;
+        QPointF lastNormalizedPos() const;
+        QRectF rect() const;
+        QRectF sceneRect() const;
+        QRectF screenRect() const;
+        qreal pressure() const;
+
+        enum InfoFlag
+        {
+            Pen,
+        };
+
+        typedef QFlags<QTouchEvent::TouchPoint::InfoFlag> InfoFlags;
+        QVector2D velocity() const;
+        QFlags<QTouchEvent::TouchPoint::InfoFlag> flags() const;
+        QVector<QPointF> rawScreenPositions() const;
+    };
+
+    QTouchEvent(QEvent::Type eventType, QTouchDevice *device = 0, Qt::KeyboardModifiers modifiers = Qt::NoModifier, Qt::TouchPointStates touchPointStates = 0, const QList<QTouchEvent::TouchPoint> &touchPoints = QList<QTouchEvent::TouchPoint>());
+    virtual ~QTouchEvent();
+    QObject *target() const;
+    Qt::TouchPointStates touchPointStates() const;
+    const QList<QTouchEvent::TouchPoint> &touchPoints() const;
+    QWindow *window() const;
+    QTouchDevice *device() const;
+    void setDevice(QTouchDevice *adevice);
+};
+
+QFlags<QTouchEvent::TouchPoint::InfoFlag> operator|(QTouchEvent::TouchPoint::InfoFlag f1, QFlags<QTouchEvent::TouchPoint::InfoFlag> f2);
+QFlags<QTouchEvent::TouchPoint::InfoFlag> operator|(QTouchEvent::TouchPoint::InfoFlag f1, QTouchEvent::TouchPoint::InfoFlag f2);
+
+class QExposeEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    explicit QExposeEvent(const QRegion &rgn);
+    virtual ~QExposeEvent();
+    const QRegion &region() const;
+};
+
+class QScrollPrepareEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    explicit QScrollPrepareEvent(const QPointF &startPos);
+    virtual ~QScrollPrepareEvent();
+    QPointF startPos() const;
+    QSizeF viewportSize() const;
+    QRectF contentPosRange() const;
+    QPointF contentPos() const;
+    void setViewportSize(const QSizeF &size);
+    void setContentPosRange(const QRectF &rect);
+    void setContentPos(const QPointF &pos);
+};
+
+class QScrollEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    enum ScrollState
+    {
+        ScrollStarted,
+        ScrollUpdated,
+        ScrollFinished,
+    };
+
+    QScrollEvent(const QPointF &contentPos, const QPointF &overshoot, QScrollEvent::ScrollState scrollState);
+    virtual ~QScrollEvent();
+    QPointF contentPos() const;
+    QPointF overshootDistance() const;
+    QScrollEvent::ScrollState scrollState() const;
+};
+
+bool operator==(QKeyEvent *e, QKeySequence::StandardKey key);
+bool operator==(QKeySequence::StandardKey key, QKeyEvent *e);
+
+class QEnterEvent : QEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QEnterEvent(const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos);
+    virtual ~QEnterEvent();
+    QPoint pos() const;
+    QPoint globalPos() const;
+    int x() const;
+    int y() const;
+    int globalX() const;
+    int globalY() const;
+    const QPointF &localPos() const;
+    const QPointF &windowPos() const;
+    const QPointF &screenPos() const;
+};
+
+class QAction /External/;
+%If (Qt_5_2_0 -)
+
+class QNativeGestureEvent : QInputEvent
+{
+%TypeHeaderCode
+#include <qevent.h>
+%End
+
+public:
+    QNativeGestureEvent(Qt::NativeGestureType type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos, qreal value, ulong sequenceId, quint64 intArgument);
+    Qt::NativeGestureType gestureType() const;
+    qreal value() const;
+    const QPoint pos() const;
+    const QPoint globalPos() const;
+    const QPointF &localPos() const;
+    const QPointF &windowPos() const;
+    const QPointF &screenPos() const;
+};
+
+%End
diff --git a/sip/QtGui/qfont.sip b/sip/QtGui/qfont.sip
new file mode 100644
index 0000000..7edb8ab
--- /dev/null
+++ b/sip/QtGui/qfont.sip
@@ -0,0 +1,210 @@
+// qfont.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qfont.h>
+%End
+
+class QFont
+{
+%TypeHeaderCode
+#include <qfont.h>
+%End
+
+public:
+    enum StyleHint
+    {
+        Helvetica,
+        SansSerif,
+        Times,
+        Serif,
+        Courier,
+        TypeWriter,
+        OldEnglish,
+        Decorative,
+        System,
+        AnyStyle,
+        Cursive,
+        Monospace,
+        Fantasy,
+    };
+
+    enum StyleStrategy
+    {
+        PreferDefault,
+        PreferBitmap,
+        PreferDevice,
+        PreferOutline,
+        ForceOutline,
+        PreferMatch,
+        PreferQuality,
+        PreferAntialias,
+        NoAntialias,
+        OpenGLCompatible,
+        NoFontMerging,
+        ForceIntegerMetrics,
+    };
+
+    enum Weight
+    {
+        Light,
+        Normal,
+        DemiBold,
+        Bold,
+        Black,
+    };
+
+    enum Style
+    {
+        StyleNormal,
+        StyleItalic,
+        StyleOblique,
+    };
+
+    enum Stretch
+    {
+        UltraCondensed,
+        ExtraCondensed,
+        Condensed,
+        SemiCondensed,
+        Unstretched,
+        SemiExpanded,
+        Expanded,
+        ExtraExpanded,
+        UltraExpanded,
+    };
+
+    QFont();
+    QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false);
+    QFont(const QFont &, QPaintDevice *pd);
+    QFont(const QFont &);
+    QFont(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QFont(a0->value<QFont>());
+%End
+
+    ~QFont();
+    QString family() const;
+    void setFamily(const QString &);
+    int pointSize() const;
+    void setPointSize(int);
+    qreal pointSizeF() const;
+    void setPointSizeF(qreal);
+    int pixelSize() const;
+    void setPixelSize(int);
+    int weight() const;
+    void setWeight(int);
+    void setStyle(QFont::Style style);
+    QFont::Style style() const;
+    bool underline() const;
+    void setUnderline(bool);
+    bool overline() const;
+    void setOverline(bool);
+    bool strikeOut() const;
+    void setStrikeOut(bool);
+    bool fixedPitch() const;
+    void setFixedPitch(bool);
+    bool kerning() const;
+    void setKerning(bool);
+    QFont::StyleHint styleHint() const;
+    QFont::StyleStrategy styleStrategy() const;
+    void setStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy = QFont::PreferDefault);
+    void setStyleStrategy(QFont::StyleStrategy s);
+    int stretch() const;
+    void setStretch(int);
+    bool rawMode() const;
+    void setRawMode(bool);
+    bool exactMatch() const;
+    bool operator==(const QFont &) const;
+    bool operator!=(const QFont &) const;
+    bool operator<(const QFont &) const;
+    bool isCopyOf(const QFont &) const;
+    void setRawName(const QString &);
+    QString rawName() const;
+    QString key() const;
+    QString toString() const;
+    bool fromString(const QString &);
+    static QString substitute(const QString &);
+    static QStringList substitutes(const QString &);
+    static QStringList substitutions();
+    static void insertSubstitution(const QString &, const QString &);
+    static void insertSubstitutions(const QString &, const QStringList &);
+    static void removeSubstitutions(const QString &);
+    static void initialize();
+    static void cleanup();
+    static void cacheStatistics();
+    QString defaultFamily() const;
+    QString lastResortFamily() const;
+    QString lastResortFont() const;
+    QFont resolve(const QFont &) const;
+    bool bold() const;
+    void setBold(bool enable);
+    bool italic() const;
+    void setItalic(bool b);
+
+    enum Capitalization
+    {
+        MixedCase,
+        AllUppercase,
+        AllLowercase,
+        SmallCaps,
+        Capitalize,
+    };
+
+    enum SpacingType
+    {
+        PercentageSpacing,
+        AbsoluteSpacing,
+    };
+
+    qreal letterSpacing() const;
+    QFont::SpacingType letterSpacingType() const;
+    void setLetterSpacing(QFont::SpacingType type, qreal spacing);
+    qreal wordSpacing() const;
+    void setWordSpacing(qreal spacing);
+    void setCapitalization(QFont::Capitalization);
+    QFont::Capitalization capitalization() const;
+
+    enum HintingPreference
+    {
+        PreferDefaultHinting,
+        PreferNoHinting,
+        PreferVerticalHinting,
+        PreferFullHinting,
+    };
+
+    QString styleName() const;
+    void setStyleName(const QString &styleName);
+    void setHintingPreference(QFont::HintingPreference hintingPreference);
+    QFont::HintingPreference hintingPreference() const;
+    void swap(QFont &other);
+%If (Qt_5_3_0 -)
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+
+%End
+};
+
+QDataStream &operator<<(QDataStream &, const QFont & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QFont & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qfontdatabase.sip b/sip/QtGui/qfontdatabase.sip
new file mode 100644
index 0000000..0be22e4
--- /dev/null
+++ b/sip/QtGui/qfontdatabase.sip
@@ -0,0 +1,109 @@
+// qfontdatabase.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFontDatabase
+{
+%TypeHeaderCode
+#include <qfontdatabase.h>
+%End
+
+public:
+    enum WritingSystem
+    {
+        Any,
+        Latin,
+        Greek,
+        Cyrillic,
+        Armenian,
+        Hebrew,
+        Arabic,
+        Syriac,
+        Thaana,
+        Devanagari,
+        Bengali,
+        Gurmukhi,
+        Gujarati,
+        Oriya,
+        Tamil,
+        Telugu,
+        Kannada,
+        Malayalam,
+        Sinhala,
+        Thai,
+        Lao,
+        Tibetan,
+        Myanmar,
+        Georgian,
+        Khmer,
+        SimplifiedChinese,
+        TraditionalChinese,
+        Japanese,
+        Korean,
+        Vietnamese,
+        Other,
+        Symbol,
+        Ogham,
+        Runic,
+        Nko,
+    };
+
+    static QList<int> standardSizes();
+    QFontDatabase();
+    QList<QFontDatabase::WritingSystem> writingSystems() const;
+    QList<QFontDatabase::WritingSystem> writingSystems(const QString &family) const;
+    QStringList families(QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any) const;
+    QStringList styles(const QString &family) const;
+    QList<int> pointSizes(const QString &family, const QString &style /DocValue="''"/ = QString());
+    QList<int> smoothSizes(const QString &family, const QString &style);
+    QString styleString(const QFont &font);
+    QString styleString(const QFontInfo &fontInfo);
+    QFont font(const QString &family, const QString &style, int pointSize) const;
+    bool isBitmapScalable(const QString &family, const QString &style /DocValue="''"/ = QString()) const;
+    bool isSmoothlyScalable(const QString &family, const QString &style /DocValue="''"/ = QString()) const;
+    bool isScalable(const QString &family, const QString &style /DocValue="''"/ = QString()) const;
+    bool isFixedPitch(const QString &family, const QString &style /DocValue="''"/ = QString()) const;
+    bool italic(const QString &family, const QString &style) const;
+    bool bold(const QString &family, const QString &style) const;
+    int weight(const QString &family, const QString &style) const;
+    static QString writingSystemName(QFontDatabase::WritingSystem writingSystem);
+    static QString writingSystemSample(QFontDatabase::WritingSystem writingSystem);
+    static int addApplicationFont(const QString &fileName);
+    static int addApplicationFontFromData(const QByteArray &fontData);
+    static QStringList applicationFontFamilies(int id);
+    static bool removeApplicationFont(int id);
+    static bool removeAllApplicationFonts();
+    static bool supportsThreadedFontRendering();
+%If (Qt_5_2_0 -)
+
+    enum SystemFont
+    {
+        GeneralFont,
+        FixedFont,
+        TitleFont,
+        SmallestReadableFont,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+    static QFont systemFont(QFontDatabase::SystemFont type);
+%End
+};
diff --git a/sip/QtGui/qfontinfo.sip b/sip/QtGui/qfontinfo.sip
new file mode 100644
index 0000000..ae43845
--- /dev/null
+++ b/sip/QtGui/qfontinfo.sip
@@ -0,0 +1,47 @@
+// qfontinfo.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFontInfo
+{
+%TypeHeaderCode
+#include <qfontinfo.h>
+%End
+
+public:
+    QFontInfo(const QFont &);
+    QFontInfo(const QFontInfo &);
+    ~QFontInfo();
+    QString family() const;
+    int pixelSize() const;
+    int pointSize() const;
+    qreal pointSizeF() const;
+    bool italic() const;
+    QFont::Style style() const;
+    int weight() const;
+    bool bold() const;
+    bool fixedPitch() const;
+    QFont::StyleHint styleHint() const;
+    bool rawMode() const;
+    bool exactMatch() const;
+    QString styleName() const;
+    void swap(QFontInfo &other);
+};
diff --git a/sip/QtGui/qfontmetrics.sip b/sip/QtGui/qfontmetrics.sip
new file mode 100644
index 0000000..edaebcc
--- /dev/null
+++ b/sip/QtGui/qfontmetrics.sip
@@ -0,0 +1,177 @@
+// qfontmetrics.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFontMetrics
+{
+%TypeHeaderCode
+#include <qfontmetrics.h>
+%End
+
+public:
+    explicit QFontMetrics(const QFont &);
+    QFontMetrics(const QFont &, QPaintDevice *pd);
+    QFontMetrics(const QFontMetrics &);
+    ~QFontMetrics();
+    int ascent() const;
+    int descent() const;
+    int height() const;
+    int leading() const;
+    int lineSpacing() const;
+    int minLeftBearing() const;
+    int minRightBearing() const;
+    int maxWidth() const;
+    int xHeight() const;
+    bool inFont(QChar) const;
+    int leftBearing(QChar) const;
+    int rightBearing(QChar) const;
+    int width(QChar) const /PyName=widthChar/;
+    int width(const QString &text, int length = -1) const;
+    QRect boundingRect(QChar) const /PyName=boundingRectChar/;
+    QRect boundingRect(const QString &text) const;
+    QRect boundingRect(const QRect &rect, int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,DocType="list-of-int"/ = 0) const;
+%MethodCode
+        int *tabarray = qtgui_tabarray(a4);
+        
+        sipRes = new QRect(sipCpp->boundingRect(*a0, a1, *a2, a3, tabarray));
+        
+        if (!tabarray)
+            delete[] tabarray;
+%End
+
+    QRect boundingRect(int x, int y, int width, int height, int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,DocType="list-of-int"/ = 0) const;
+%MethodCode
+        int *tabarray = qtgui_tabarray(a7);
+        
+        sipRes = new QRect(sipCpp->boundingRect(a0, a1, a2, a3, a4, *a5, a6, tabarray));
+        
+        if (!tabarray)
+            delete[] tabarray;
+%End
+
+    QSize size(int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,DocType="list-of-int"/ = 0) const;
+%MethodCode
+        int *tabarray = qtgui_tabarray(a3);
+        
+        sipRes = new QSize(sipCpp->size(a0, *a1, a2, tabarray));
+        
+        if (!tabarray)
+            delete[] tabarray;
+%End
+
+    int underlinePos() const;
+    int overlinePos() const;
+    int strikeOutPos() const;
+    int lineWidth() const;
+    int averageCharWidth() const;
+    QString elidedText(const QString &text, Qt::TextElideMode mode, int width, int flags = 0) const;
+    bool operator==(const QFontMetrics &other) const;
+    bool operator!=(const QFontMetrics &other) const;
+    QRect tightBoundingRect(const QString &text) const;
+    bool inFontUcs4(uint character) const;
+    void swap(QFontMetrics &other);
+};
+
+class QFontMetricsF
+{
+%TypeHeaderCode
+#include <qfontmetrics.h>
+%End
+
+public:
+    explicit QFontMetricsF(const QFont &);
+    QFontMetricsF(const QFont &, QPaintDevice *pd);
+    QFontMetricsF(const QFontMetrics &);
+    QFontMetricsF(const QFontMetricsF &);
+    ~QFontMetricsF();
+    qreal ascent() const;
+    qreal descent() const;
+    qreal height() const;
+    qreal leading() const;
+    qreal lineSpacing() const;
+    qreal minLeftBearing() const;
+    qreal minRightBearing() const;
+    qreal maxWidth() const;
+    qreal xHeight() const;
+    bool inFont(QChar) const;
+    qreal leftBearing(QChar) const;
+    qreal rightBearing(QChar) const;
+    qreal width(QChar) const /PyName=widthChar/;
+    qreal width(const QString &string) const;
+    QRectF boundingRect(QChar) const /PyName=boundingRectChar/;
+    QRectF boundingRect(const QString &string) const;
+    QRectF boundingRect(const QRectF &rect, int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,DocType="list-of-int"/ = 0) const;
+%MethodCode
+        int *tabarray = qtgui_tabarray(a4);
+        
+        sipRes = new QRectF(sipCpp->boundingRect(*a0, a1, *a2, a3, tabarray));
+        
+        if (!tabarray)
+            delete[] tabarray;
+%End
+
+    QSizeF size(int flags, const QString &text, int tabStops = 0, SIP_PYLIST tabArray /AllowNone,DocType="list-of-int"/ = 0) const;
+%MethodCode
+        int *tabarray = qtgui_tabarray(a3);
+        
+        sipRes = new QSizeF(sipCpp->size(a0, *a1, a2, tabarray));
+        
+        if (!tabarray)
+            delete[] tabarray;
+%End
+
+    qreal underlinePos() const;
+    qreal overlinePos() const;
+    qreal strikeOutPos() const;
+    qreal lineWidth() const;
+    qreal averageCharWidth() const;
+    QString elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags = 0) const;
+    bool operator==(const QFontMetricsF &other) const;
+    bool operator!=(const QFontMetricsF &other) const;
+    QRectF tightBoundingRect(const QString &text) const;
+    bool inFontUcs4(uint character) const;
+    void swap(QFontMetricsF &other);
+};
+
+%ModuleHeaderCode
+// Used by QFontMetrics and QFontMetricsF.
+int *qtgui_tabarray(PyObject *l);
+%End
+
+%ModuleCode
+// Convert an optional Python list to a 0 terminated array of integers on the
+// heap.
+int *qtgui_tabarray(PyObject *l)
+{
+    if (!l || l == Py_None)
+        return 0;
+
+    int *arr = new int[PyList_GET_SIZE(l) + 1];
+    SIP_SSIZE_T i;
+
+    for (i = 0; i < PyList_GET_SIZE(l); ++i)
+        arr[i] = SIPLong_AsLong(PyList_GET_ITEM(l, i));
+
+    arr[i] = 0;
+
+    return arr;
+}
+%End
diff --git a/sip/QtGui/qgenericmatrix.sip b/sip/QtGui/qgenericmatrix.sip
new file mode 100644
index 0000000..7a0909f
--- /dev/null
+++ b/sip/QtGui/qgenericmatrix.sip
@@ -0,0 +1,1214 @@
+// qgenericmatrix.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+// The implementation of QMatrix4x3.
+class QMatrix4x3
+{
+%TypeHeaderCode
+#include <qgenericmatrix.h>
+%End
+
+%PickleCode
+        PYQT_FLOAT data[12];
+
+        // We want the data in row-major order.
+        sipCpp->copyDataTo(data);
+    
+        sipRes = Py_BuildValue((char *)"dddddddddddd",
+                (double)data[0], (double)data[1], (double)data[2],
+                (double)data[3], (double)data[4], (double)data[5],
+                (double)data[6], (double)data[7], (double)data[8],
+                (double)data[9], (double)data[10], (double)data[11]);
+%End
+
+public:
+    QMatrix4x3();
+    QMatrix4x3(const QMatrix4x3 &other);
+    explicit QMatrix4x3(SIP_PYOBJECT values /DocType="sequence-of-float"/);
+%MethodCode
+        PYQT_FLOAT values[12];
+
+        if ((sipError = qtgui_matrixDataFromSequence(a0, 12, values)) == sipErrorNone)
+            sipCpp = new QMatrix4x3(values);
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        bool bad = false;
+        int i;
+        PyObject *m[12];
+        PYQT_FLOAT data[12];
+
+        // The raw data is in column-major order but we want row-major order.
+        sipCpp->copyDataTo(data);
+
+        for (i = 0; i < 12; ++i)
+        {
+            m[i] = PyFloat_FromDouble(data[i]);
+
+            if (!m[i])
+                bad = true;
+        }
+
+        if (!bad)
+        {
+#if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix4x3("
+                    "%R, %R, %R, "
+                    "%R, %R, %R, "
+                    "%R, %R, %R, "
+                    "%R, %R, %R)",
+                    m[0], m[1], m[2],
+                    m[3], m[4], m[5],
+                    m[6], m[7], m[8],
+                    m[9], m[10], m[11]);
+#else
+            sipRes = PyString_FromString("PyQt5.QtGui.QMatrix4x3(");
+
+            for (i = 0; i < 12; ++i)
+            {
+                if (i != 0)
+                    PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i]));
+            }
+
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+#endif
+        }
+
+        for (i = 0; i < 12; ++i)
+            Py_XDECREF(m[i]);
+%End
+
+    SIP_PYLIST data() /DocType="list-of-float"/;
+%MethodCode
+        sipError = qtgui_matrixDataAsList(12, sipCpp->constData(), &sipRes);
+%End
+
+    SIP_PYLIST copyDataTo() const /DocType="list-of-float"/;
+%MethodCode
+        PYQT_FLOAT values[12];
+
+        sipCpp->copyDataTo(values);
+        sipError = qtgui_matrixDataAsList(12, values, &sipRes);
+%End
+
+    SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const;
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 4, 3, &row, &column)) == sipErrorNone)
+        {
+            sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column));
+
+            if (!sipRes)
+                sipError = sipErrorFail;
+        }
+%End
+
+%If (Qt_5_0_0 -)
+    void __setitem__(SIP_PYOBJECT, float);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 4, 3, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+%If (- Qt_5_0_0)
+    void __setitem__(SIP_PYOBJECT, qreal);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 4, 3, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+
+    bool isIdentity() const;
+    void setToIdentity();
+
+%If (Qt_5_0_0 -)
+    void fill(float value);
+%End
+%If (- Qt_5_0_0)
+    void fill(qreal value);
+%End
+
+    QMatrix3x4 transposed() const;
+
+    QMatrix4x3 &operator+=(const QMatrix4x3 &);
+    QMatrix4x3 &operator-=(const QMatrix4x3 &);
+
+%If (Qt_5_0_0 -)
+    QMatrix4x3 &operator*=(float);
+    QMatrix4x3 &operator/=(float);
+%End
+%If (- Qt_5_0_0)
+    QMatrix4x3 &operator*=(qreal);
+    QMatrix4x3 &operator/=(qreal);
+%End
+
+    bool operator==(const QMatrix4x3 &) const;
+    bool operator!=(const QMatrix4x3 &) const;
+};
+// The implementation of QMatrix4x2.
+class QMatrix4x2
+{
+%TypeHeaderCode
+#include <qgenericmatrix.h>
+%End
+
+%PickleCode
+        PYQT_FLOAT data[8];
+
+        // We want the data in row-major order.
+        sipCpp->copyDataTo(data);
+
+        sipRes = Py_BuildValue((char *)"dddddddd",
+                (double)data[0], (double)data[1],
+                (double)data[2], (double)data[3],
+                (double)data[4], (double)data[5],
+                (double)data[6], (double)data[7]);
+%End
+
+public:
+    QMatrix4x2();
+    QMatrix4x2(const QMatrix4x2 &other);
+    explicit QMatrix4x2(SIP_PYOBJECT values /DocType="sequence-of-float"/);
+%MethodCode
+        PYQT_FLOAT values[8];
+
+        if ((sipError = qtgui_matrixDataFromSequence(a0, 8, values)) == sipErrorNone)
+            sipCpp = new QMatrix4x2(values);
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        bool bad = false;
+        int i;
+        PyObject *m[8];
+        PYQT_FLOAT data[8];
+
+        // The raw data is in column-major order but we want row-major order.
+        sipCpp->copyDataTo(data);
+
+        for (i = 0; i < 8; ++i)
+        {
+            m[i] = PyFloat_FromDouble(data[i]);
+
+            if (!m[i])
+                bad = true;
+        }
+
+        if (!bad)
+        {
+#if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix4x2("
+                    "%R, %R, "
+                    "%R, %R, "
+                    "%R, %R, "
+                    "%R, %R)",
+                    m[0], m[1],
+                    m[2], m[3],
+                    m[4], m[5],
+                    m[6], m[7]);
+#else
+            sipRes = PyString_FromString("PyQt5.QtGui.QMatrix4x2(");
+
+            for (i = 0; i < 8; ++i)
+            {
+                if (i != 0)
+                    PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i]));
+            }
+
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+#endif
+        }
+
+        for (i = 0; i < 8; ++i)
+            Py_XDECREF(m[i]);
+%End
+
+    SIP_PYLIST data() /DocType="list-of-float"/;
+%MethodCode
+        sipError = qtgui_matrixDataAsList(8, sipCpp->constData(), &sipRes);
+%End
+
+    SIP_PYLIST copyDataTo() const /DocType="list-of-float"/;
+%MethodCode
+        PYQT_FLOAT values[8];
+
+        sipCpp->copyDataTo(values);
+        sipError = qtgui_matrixDataAsList(8, values, &sipRes);
+%End
+
+    SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const;
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 4, 2, &row, &column)) == sipErrorNone)
+        {
+            sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column));
+
+            if (!sipRes)
+                sipError = sipErrorFail;
+        }
+%End
+
+%If (Qt_5_0_0 -)
+    void __setitem__(SIP_PYOBJECT, float);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 4, 2, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+%If (- Qt_5_0_0)
+    void __setitem__(SIP_PYOBJECT, qreal);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 4, 2, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+
+    bool isIdentity() const;
+    void setToIdentity();
+
+%If (Qt_5_0_0 -)
+    void fill(float value);
+%End
+%If (- Qt_5_0_0)
+    void fill(qreal value);
+%End
+        
+    QMatrix2x4 transposed() const;
+
+    QMatrix4x2 &operator+=(const QMatrix4x2 &);
+    QMatrix4x2 &operator-=(const QMatrix4x2 &);
+
+%If (Qt_5_0_0 -)
+    QMatrix4x2 &operator*=(float);
+    QMatrix4x2 &operator/=(float);
+%End
+%If (- Qt_5_0_0)
+    QMatrix4x2 &operator*=(qreal);
+    QMatrix4x2 &operator/=(qreal);
+%End
+
+    bool operator==(const QMatrix4x2 &) const;
+    bool operator!=(const QMatrix4x2 &) const;
+};
+// The implementation of QMatrix3x4.
+class QMatrix3x4
+{
+%TypeHeaderCode
+#include <qgenericmatrix.h>
+%End
+
+%PickleCode
+        PYQT_FLOAT data[12];
+
+        // We want the data in row-major order.
+        sipCpp->copyDataTo(data);
+
+        sipRes = Py_BuildValue((char *)"dddddddddddd",
+                (double)data[0], (double)data[1], (double)data[2],
+                (double)data[3], (double)data[4], (double)data[5],
+                (double)data[6], (double)data[7], (double)data[8],
+                (double)data[9], (double)data[10], (double)data[11]);
+%End
+
+public:
+    QMatrix3x4();
+    QMatrix3x4(const QMatrix3x4 &other);
+    explicit QMatrix3x4(SIP_PYOBJECT values /DocType="sequence-of-float"/);
+%MethodCode
+        PYQT_FLOAT values[12];
+
+        if ((sipError = qtgui_matrixDataFromSequence(a0, 12, values)) == sipErrorNone)
+            sipCpp = new QMatrix3x4(values);
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        bool bad = false;
+        int i;
+        PyObject *m[12];
+        PYQT_FLOAT data[12];
+
+        // The raw data is in column-major order but we want row-major order.
+        sipCpp->copyDataTo(data);
+
+        for (i = 0; i < 12; ++i)
+        {
+            m[i] = PyFloat_FromDouble(data[i]);
+
+            if (!m[i])
+                bad = true;
+        }
+
+        if (!bad)
+        {
+#if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix3x4("
+                    "%R, %R, %R, "
+                    "%R, %R, %R, "
+                    "%R, %R, %R, "
+                    "%R, %R, %R)",
+                    m[0], m[1], m[2],
+                    m[3], m[4], m[5],
+                    m[6], m[7], m[8],
+                    m[9], m[10], m[11]);
+#else
+            sipRes = PyString_FromString("PyQt5.QtGui.QMatrix3x4(");
+
+            for (i = 0; i < 12; ++i)
+            {
+                if (i != 0)
+                    PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i]));
+            }
+
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+#endif
+        }
+
+        for (i = 0; i < 12; ++i)
+            Py_XDECREF(m[i]);
+%End
+
+    SIP_PYLIST data() /DocType="list-of-float"/;
+%MethodCode
+        sipError = qtgui_matrixDataAsList(12, sipCpp->constData(), &sipRes);
+%End
+
+    SIP_PYLIST copyDataTo() const /DocType="list-of-float"/;
+%MethodCode
+        PYQT_FLOAT values[12];
+
+        sipCpp->copyDataTo(values);
+        sipError = qtgui_matrixDataAsList(12, values, &sipRes);
+%End
+
+    SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const;
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 3, 4, &row, &column)) == sipErrorNone)
+        {
+            sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column));
+
+            if (!sipRes)
+                sipError = sipErrorFail;
+        }
+%End
+        
+%If (Qt_5_0_0 -)
+    void __setitem__(SIP_PYOBJECT, float);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 3, 4, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+%If (- Qt_5_0_0)
+    void __setitem__(SIP_PYOBJECT, qreal);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 3, 4, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+
+    bool isIdentity() const;
+    void setToIdentity();
+
+%If (Qt_5_0_0 -)
+    void fill(qreal value);
+%End
+%If (- Qt_5_0_0)
+    void fill(qreal value);
+%End
+        
+    QMatrix4x3 transposed() const;
+
+    QMatrix3x4 &operator+=(const QMatrix3x4 &);
+    QMatrix3x4 &operator-=(const QMatrix3x4 &);
+
+%If (Qt_5_0_0 -)
+    QMatrix3x4 &operator*=(float);
+    QMatrix3x4 &operator/=(float);
+%End
+%If (- Qt_5_0_0)
+    QMatrix3x4 &operator*=(qreal);
+    QMatrix3x4 &operator/=(qreal);
+%End
+    
+    bool operator==(const QMatrix3x4 &) const;
+    bool operator!=(const QMatrix3x4 &) const;
+};
+// The implementation of QMatrix3x3.
+class QMatrix3x3
+{
+%TypeHeaderCode
+#include <qgenericmatrix.h>
+%End
+
+%PickleCode
+        PYQT_FLOAT data[9];
+
+        // We want the data in row-major order.
+        sipCpp->copyDataTo(data);
+
+        sipRes = Py_BuildValue((char *)"ddddddddd",
+                (double)data[0], (double)data[1], (double)data[2],
+                (double)data[3], (double)data[4], (double)data[5],
+                (double)data[6], (double)data[7], (double)data[8]);
+%End
+
+public:
+    QMatrix3x3();
+    QMatrix3x3(const QMatrix3x3 &other);
+    explicit QMatrix3x3(SIP_PYOBJECT values /DocType="sequence-of-float"/);
+%MethodCode
+        PYQT_FLOAT values[9];
+
+        if ((sipError = qtgui_matrixDataFromSequence(a0, 9, values)) == sipErrorNone)
+            sipCpp = new QMatrix3x3(values);
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        bool bad = false;
+        int i;
+        PyObject *m[9];
+        PYQT_FLOAT data[9];
+
+        // The raw data is in column-major order but we want row-major order.
+        sipCpp->copyDataTo(data);
+
+        for (i = 0; i < 9; ++i)
+        {
+            m[i] = PyFloat_FromDouble(data[i]);
+
+            if (!m[i])
+                bad = true;
+        }
+
+        if (!bad)
+        {
+#if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix3x3("
+                    "%R, %R, %R, "
+                    "%R, %R, %R, "
+                    "%R, %R, %R)",
+                    m[0], m[1], m[2],
+                    m[3], m[4], m[5],
+                    m[6], m[7], m[8]);
+#else
+            sipRes = PyString_FromString("PyQt5.QtGui.QMatrix3x3(");
+
+            for (i = 0; i < 9; ++i)
+            {
+                if (i != 0)
+                    PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i]));
+            }
+
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+#endif
+        }
+
+        for (i = 0; i < 9; ++i)
+            Py_XDECREF(m[i]);
+%End
+
+    SIP_PYLIST data() /DocType="list-of-float"/;
+%MethodCode
+        sipError = qtgui_matrixDataAsList(9, sipCpp->constData(), &sipRes);
+%End
+
+    SIP_PYLIST copyDataTo() const /DocType="list-of-float"/;
+%MethodCode
+        PYQT_FLOAT values[9];
+
+        sipCpp->copyDataTo(values);
+        sipError = qtgui_matrixDataAsList(9, values, &sipRes);
+%End
+
+    SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const;
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 3, 3, &row, &column)) == sipErrorNone)
+        {
+            sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column));
+
+            if (!sipRes)
+                sipError = sipErrorFail;
+        }
+%End
+        
+%If (Qt_5_0_0 -)
+    void __setitem__(SIP_PYOBJECT, float);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 3, 3, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+%If (- Qt_5_0_0)
+    void __setitem__(SIP_PYOBJECT, qreal);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 3, 3, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+
+    bool isIdentity() const;
+    void setToIdentity();
+
+%If (Qt_5_0_0 -)
+    void fill(float value);
+%End
+%If (- Qt_5_0_0)
+    void fill(qreal value);
+%End
+
+    QMatrix3x3 transposed() const;
+
+    QMatrix3x3 &operator+=(const QMatrix3x3 &);
+    QMatrix3x3 &operator-=(const QMatrix3x3 &);
+
+%If (Qt_5_0_0 -)
+    QMatrix3x3 &operator*=(float);
+    QMatrix3x3 &operator/=(float);
+%End
+%If (- Qt_5_0_0)
+    QMatrix3x3 &operator*=(qreal);
+    QMatrix3x3 &operator/=(qreal);
+%End
+
+    bool operator==(const QMatrix3x3 &) const;
+    bool operator!=(const QMatrix3x3 &) const;
+};
+// The implementation of QMatrix3x2.
+class QMatrix3x2
+{
+%TypeHeaderCode
+#include <qgenericmatrix.h>
+%End
+
+%PickleCode
+        PYQT_FLOAT data[6];
+
+        // We want the data in row-major order.
+        sipCpp->copyDataTo(data);
+
+        sipRes = Py_BuildValue((char *)"dddddd",
+                (double)data[0], (double)data[1],
+                (double)data[2], (double)data[3],
+                (double)data[4], (double)data[5]);
+%End
+
+public:
+    QMatrix3x2();
+    QMatrix3x2(const QMatrix3x2 &other);
+    explicit QMatrix3x2(SIP_PYOBJECT values /DocType="sequence-of-float"/);
+%MethodCode
+        PYQT_FLOAT values[6];
+
+        if ((sipError = qtgui_matrixDataFromSequence(a0, 6, values)) == sipErrorNone)
+            sipCpp = new QMatrix3x2(values);
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        bool bad = false;
+        int i;
+        PyObject *m[6];
+        PYQT_FLOAT data[6];
+
+        // The raw data is in column-major order but we want row-major order.
+        sipCpp->copyDataTo(data);
+
+        for (i = 0; i < 6; ++i)
+        {
+            m[i] = PyFloat_FromDouble(data[i]);
+
+            if (!m[i])
+                bad = true;
+        }
+
+        if (!bad)
+        {
+#if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix3x2("
+                    "%R, %R, "
+                    "%R, %R, "
+                    "%R, %R)",
+                    m[0], m[1],
+                    m[2], m[3],
+                    m[4], m[5]);
+#else
+            sipRes = PyString_FromString("PyQt5.QtGui.QMatrix3x2(");
+
+            for (i = 0; i < 6; ++i)
+            {
+                if (i != 0)
+                    PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i]));
+            }
+
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+#endif
+        }
+
+        for (i = 0; i < 6; ++i)
+            Py_XDECREF(m[i]);
+%End
+
+    SIP_PYLIST data() /DocType="list-of-float"/;
+%MethodCode
+        sipError = qtgui_matrixDataAsList(6, sipCpp->constData(), &sipRes);
+%End
+
+    SIP_PYLIST copyDataTo() const /DocType="list-of-float"/;
+%MethodCode
+        PYQT_FLOAT values[6];
+
+        sipCpp->copyDataTo(values);
+        sipError = qtgui_matrixDataAsList(6, values, &sipRes);
+%End
+
+    SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const;
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 3, 2, &row, &column)) == sipErrorNone)
+        {
+            sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column));
+
+            if (!sipRes)
+                sipError = sipErrorFail;
+        }
+%End
+
+%If (Qt_5_0_0 -)
+    void __setitem__(SIP_PYOBJECT, float);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 3, 2, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+%If (- Qt_5_0_0)
+    void __setitem__(SIP_PYOBJECT, qreal);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 3, 2, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+
+    bool isIdentity() const;
+    void setToIdentity();
+
+%If (Qt_5_0_0 -)
+    void fill(float value);
+%End
+%If (- Qt_5_0_0)
+    void fill(qreal value);
+%End
+
+    QMatrix2x3 transposed() const;
+
+    QMatrix3x2 &operator+=(const QMatrix3x2 &);
+    QMatrix3x2 &operator-=(const QMatrix3x2 &);
+
+%If (Qt_5_0_0 -)
+    QMatrix3x2 &operator*=(float);
+    QMatrix3x2 &operator/=(float);
+%End
+%If (- Qt_5_0_0)
+    QMatrix3x2 &operator*=(qreal);
+    QMatrix3x2 &operator/=(qreal);
+%End
+
+    bool operator==(const QMatrix3x2 &) const;
+    bool operator!=(const QMatrix3x2 &) const;
+};
+// The implementation of QMatrix2x4.
+class QMatrix2x4
+{
+%TypeHeaderCode
+#include <qgenericmatrix.h>
+%End
+
+%PickleCode
+        PYQT_FLOAT data[8];
+
+        // We want the data in row-major order.
+        sipCpp->copyDataTo(data);
+
+        sipRes = Py_BuildValue((char *)"dddddddd",
+                (double)data[0], (double)data[1], (double)data[2], (double)data[3],
+                (double)data[4], (double)data[5], (double)data[6], (double)data[7]);
+%End
+
+public:
+    QMatrix2x4();
+    QMatrix2x4(const QMatrix2x4 &other);
+    explicit QMatrix2x4(SIP_PYOBJECT values /DocType="sequence-of-float"/);
+%MethodCode
+        PYQT_FLOAT values[8];
+
+        if ((sipError = qtgui_matrixDataFromSequence(a0, 8, values)) == sipErrorNone)
+            sipCpp = new QMatrix2x4(values);
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        bool bad = false;
+        int i;
+        PyObject *m[8];
+        PYQT_FLOAT data[8];
+
+        // The raw data is in column-major order but we want row-major order.
+        sipCpp->copyDataTo(data);
+
+        for (i = 0; i < 8; ++i)
+        {
+            m[i] = PyFloat_FromDouble(data[i]);
+
+            if (!m[i])
+                bad = true;
+        }
+
+        if (!bad)
+        {
+#if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix2x4("
+                    "%R, %R, %R, %R, "
+                    "%R, %R, %R, %R)",
+                    m[0], m[1], m[2], m[3],
+                    m[4], m[5], m[6], m[7]);
+#else
+            sipRes = PyString_FromString("PyQt5.QtGui.QMatrix2x4(");
+
+            for (i = 0; i < 8; ++i)
+            {
+                if (i != 0)
+                    PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i]));
+            }
+
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+#endif
+        }
+
+        for (i = 0; i < 8; ++i)
+            Py_XDECREF(m[i]);
+%End
+
+    SIP_PYLIST data() /DocType="list-of-float"/;
+%MethodCode
+        sipError = qtgui_matrixDataAsList(8, sipCpp->constData(), &sipRes);
+%End
+
+    SIP_PYLIST copyDataTo() const /DocType="list-of-float"/;
+%MethodCode
+        PYQT_FLOAT values[8];
+
+        sipCpp->copyDataTo(values);
+        sipError = qtgui_matrixDataAsList(8, values, &sipRes);
+%End
+
+    SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const;
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 2, 4, &row, &column)) == sipErrorNone)
+        {
+            sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column));
+
+            if (!sipRes)
+                sipError = sipErrorFail;
+        }
+%End
+        
+%If (Qt_5_0_0 -)
+    void __setitem__(SIP_PYOBJECT, float);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 2, 4, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+%If (- Qt_5_0_0)
+    void __setitem__(SIP_PYOBJECT, qreal);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 2, 4, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+
+    bool isIdentity() const;
+    void setToIdentity();
+
+%If (Qt_5_0_0 -)
+    void fill(float value);
+%End
+%If (- Qt_5_0_0)
+    void fill(qreal value);
+%End
+
+    QMatrix4x2 transposed() const;
+
+    QMatrix2x4 &operator+=(const QMatrix2x4 &);
+    QMatrix2x4 &operator-=(const QMatrix2x4 &);
+
+%If (Qt_5_0_0 -)
+    QMatrix2x4 &operator*=(float);
+    QMatrix2x4 &operator/=(float);
+%End
+%If (- Qt_5_0_0)
+    QMatrix2x4 &operator*=(qreal);
+    QMatrix2x4 &operator/=(qreal);
+%End
+
+    bool operator==(const QMatrix2x4 &) const;
+    bool operator!=(const QMatrix2x4 &) const;
+};
+// The implementation of QMatrix2x3.
+class QMatrix2x3
+{
+%TypeHeaderCode
+#include <qgenericmatrix.h>
+%End
+
+%PickleCode
+        PYQT_FLOAT data[6];
+
+        // We want the data in row-major order.
+        sipCpp->copyDataTo(data);
+
+        sipRes = Py_BuildValue((char *)"dddddd",
+                (double)data[0], (double)data[1], (double)data[2],
+                (double)data[3], (double)data[4], (double)data[5]);
+%End
+
+public:
+    QMatrix2x3();
+    QMatrix2x3(const QMatrix2x3 &other);
+    explicit QMatrix2x3(SIP_PYOBJECT values /DocType="sequence-of-float"/);
+%MethodCode
+        PYQT_FLOAT values[6];
+
+        if ((sipError = qtgui_matrixDataFromSequence(a0, 6, values)) == sipErrorNone)
+            sipCpp = new QMatrix2x3(values);
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        bool bad = false;
+        int i;
+        PyObject *m[6];
+        PYQT_FLOAT data[6];
+
+        // The raw data is in column-major order but we want row-major order.
+        sipCpp->copyDataTo(data);
+
+        for (i = 0; i < 6; ++i)
+        {
+            m[i] = PyFloat_FromDouble(data[i]);
+
+            if (!m[i])
+                bad = true;
+        }
+
+        if (!bad)
+        {
+#if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix2x3("
+                    "%R, %R, %R, "
+                    "%R, %R, %R)",
+                    m[0], m[1], m[2],
+                    m[3], m[4], m[5]);
+#else
+            sipRes = PyString_FromString("PyQt5.QtGui.QMatrix2x3(");
+
+            for (i = 0; i < 6; ++i)
+            {
+                if (i != 0)
+                    PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i]));
+            }
+
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+#endif
+        }
+
+        for (i = 0; i < 6; ++i)
+            Py_XDECREF(m[i]);
+%End
+
+    SIP_PYLIST data() /DocType="list-of-float"/;
+%MethodCode
+        sipError = qtgui_matrixDataAsList(6, sipCpp->constData(), &sipRes);
+%End
+
+    SIP_PYLIST copyDataTo() const /DocType="list-of-float"/;
+%MethodCode
+        PYQT_FLOAT values[6];
+
+        sipCpp->copyDataTo(values);
+        sipError = qtgui_matrixDataAsList(6, values, &sipRes);
+%End
+
+    SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const;
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 2, 3, &row, &column)) == sipErrorNone)
+        {
+            sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column));
+
+            if (!sipRes)
+                sipError = sipErrorFail;
+        }
+%End
+        
+%If (Qt_5_0_0 -)
+    void __setitem__(SIP_PYOBJECT, float);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 2, 3, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+%If (- Qt_5_0_0)
+    void __setitem__(SIP_PYOBJECT, qreal);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 2, 3, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+
+    bool isIdentity() const;
+    void setToIdentity();
+
+%If (Qt_5_0_0 -)
+    void fill(float value);
+%End
+%If (- Qt_5_0_0)
+    void fill(qreal value);
+%End
+
+    QMatrix3x2 transposed() const;
+
+    QMatrix2x3 &operator+=(const QMatrix2x3 &);
+    QMatrix2x3 &operator-=(const QMatrix2x3 &);
+
+%If (Qt_5_0_0 -)
+    QMatrix2x3 &operator*=(float);
+    QMatrix2x3 &operator/=(float);
+%End
+%If (- Qt_5_0_0)
+    QMatrix2x3 &operator*=(qreal);
+    QMatrix2x3 &operator/=(qreal);
+%End
+
+    bool operator==(const QMatrix2x3 &) const;
+    bool operator!=(const QMatrix2x3 &) const;
+};
+// The implementation of QMatrix2x2.
+class QMatrix2x2
+{
+%TypeHeaderCode
+#include <qgenericmatrix.h>
+%End
+
+%PickleCode
+        PYQT_FLOAT data[4];
+
+        // We want the data in row-major order.
+        sipCpp->copyDataTo(data);
+
+        sipRes = Py_BuildValue((char *)"dddd",
+                (double)data[0], (double)data[1],
+                (double)data[2], (double)data[3]);
+%End
+
+public:
+    QMatrix2x2();
+    QMatrix2x2(const QMatrix2x2 &other);
+    explicit QMatrix2x2(SIP_PYOBJECT values /DocType="sequence-of-float"/);
+%MethodCode
+        PYQT_FLOAT values[4];
+
+        if ((sipError = qtgui_matrixDataFromSequence(a0, 4, values)) == sipErrorNone)
+            sipCpp = new QMatrix2x2(values);
+%End
+
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        bool bad = false;
+        int i;
+        PyObject *m[4];
+        PYQT_FLOAT data[4];
+
+        // The raw data is in column-major order but we want row-major order.
+        sipCpp->copyDataTo(data);
+
+        for (i = 0; i < 4; ++i)
+        {
+            m[i] = PyFloat_FromDouble(data[i]);
+
+            if (!m[i])
+                bad = true;
+        }
+
+        if (!bad)
+        {
+#if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix2x2("
+                    "%R, %R, "
+                    "%R, %R)",
+                    m[0], m[1],
+                    m[2], m[3]);
+#else
+            sipRes = PyString_FromString("PyQt5.QtGui.QMatrix2x2(");
+
+            for (i = 0; i < 4; ++i)
+            {
+                if (i != 0)
+                    PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i]));
+            }
+
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+#endif
+        }
+
+        for (i = 0; i < 4; ++i)
+            Py_XDECREF(m[i]);
+%End
+
+    SIP_PYLIST data() /DocType="list-of-float"/;
+%MethodCode
+        sipError = qtgui_matrixDataAsList(4, sipCpp->constData(), &sipRes);
+%End
+
+    SIP_PYLIST copyDataTo() const /DocType="list-of-float"/;
+%MethodCode
+        PYQT_FLOAT values[4];
+
+        sipCpp->copyDataTo(values);
+        sipError = qtgui_matrixDataAsList(4, values, &sipRes);
+%End
+
+    SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const;
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 2, 2, &row, &column)) == sipErrorNone)
+        {
+            sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column));
+
+            if (!sipRes)
+                sipError = sipErrorFail;
+        }
+%End
+        
+%If (Qt_5_0_0 -)
+    void __setitem__(SIP_PYOBJECT, float);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 2, 2, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+%If (- Qt_5_0_0)
+    void __setitem__(SIP_PYOBJECT, qreal);
+%MethodCode
+        int row, column;
+
+        if ((sipError = qtgui_matrixParseIndex(a0, 2, 2, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+%End
+
+    bool isIdentity() const;
+    void setToIdentity();
+
+%If (Qt_5_0_0 -)
+    void fill(float value);
+%End
+%If (- Qt_5_0_0)
+    void fill(qreal value);
+%End
+
+    QMatrix2x2 transposed() const;
+
+    QMatrix2x2 &operator+=(const QMatrix2x2 &);
+    QMatrix2x2 &operator-=(const QMatrix2x2 &);
+
+%If (Qt_5_0_0 -)
+    QMatrix2x2 &operator*=(float);
+    QMatrix2x2 &operator/=(float);
+%End
+%If (- Qt_5_0_0)
+    QMatrix2x2 &operator*=(qreal);
+    QMatrix2x2 &operator/=(qreal);
+%End
+
+    bool operator==(const QMatrix2x2 &) const;
+    bool operator!=(const QMatrix2x2 &) const;
+};
diff --git a/sip/QtGui/qglyphrun.sip b/sip/QtGui/qglyphrun.sip
new file mode 100644
index 0000000..d2c46f3
--- /dev/null
+++ b/sip/QtGui/qglyphrun.sip
@@ -0,0 +1,72 @@
+// qglyphrun.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_RawFont)
+
+class QGlyphRun
+{
+%TypeHeaderCode
+#include <qglyphrun.h>
+%End
+
+public:
+    QGlyphRun();
+    QGlyphRun(const QGlyphRun &other);
+    ~QGlyphRun();
+    QRawFont rawFont() const;
+    void setRawFont(const QRawFont &rawFont);
+    QVector<unsigned int> glyphIndexes() const;
+    void setGlyphIndexes(const QVector<unsigned int> &glyphIndexes);
+    QVector<QPointF> positions() const;
+    void setPositions(const QVector<QPointF> &positions);
+    void clear();
+    bool operator==(const QGlyphRun &other) const;
+    bool operator!=(const QGlyphRun &other) const;
+    void setOverline(bool overline);
+    bool overline() const;
+    void setUnderline(bool underline);
+    bool underline() const;
+    void setStrikeOut(bool strikeOut);
+    bool strikeOut() const;
+
+    enum GlyphRunFlag
+    {
+        Overline,
+        Underline,
+        StrikeOut,
+        RightToLeft,
+        SplitLigature,
+    };
+
+    typedef QFlags<QGlyphRun::GlyphRunFlag> GlyphRunFlags;
+    void setRightToLeft(bool on);
+    bool isRightToLeft() const;
+    void setFlag(QGlyphRun::GlyphRunFlag flag, bool enabled = true);
+    void setFlags(QFlags<QGlyphRun::GlyphRunFlag> flags);
+    QFlags<QGlyphRun::GlyphRunFlag> flags() const;
+    void setBoundingRect(const QRectF &boundingRect);
+    QRectF boundingRect() const;
+    bool isEmpty() const;
+    void swap(QGlyphRun &other);
+};
+
+%End
diff --git a/sip/QtGui/qguiapplication.sip b/sip/QtGui/qguiapplication.sip
new file mode 100644
index 0000000..aeb36c8
--- /dev/null
+++ b/sip/QtGui/qguiapplication.sip
@@ -0,0 +1,271 @@
+// qguiapplication.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGuiApplication : QCoreApplication
+{
+%TypeHeaderCode
+#include <qguiapplication.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QStandardItemModel, &sipType_QStandardItemModel, -1, 1},
+    #if defined(SIP_FEATURE_PyQt_OpenGL)
+        {sipName_QOpenGLContext, &sipType_QOpenGLContext, -1, 2},
+    #else
+        {0, 0, -1, 2},
+    #endif
+        {sipName_QTextDocument, &sipType_QTextDocument, -1, 3},
+        {sipName_QGuiApplication, &sipType_QGuiApplication, -1, 4},
+        {sipName_QDrag, &sipType_QDrag, -1, 5},
+    #if QT_VERSION >= 0x050100 && defined(SIP_FEATURE_PyQt_OpenGL)
+        {sipName_QOpenGLVertexArrayObject, &sipType_QOpenGLVertexArrayObject, -1, 6},
+    #else
+        {0, 0, -1, 6},
+    #endif
+    #if QT_VERSION >= 0x050100
+        {sipName_QOffscreenSurface, &sipType_QOffscreenSurface, -1, 7},
+    #else
+        {0, 0, -1, 7},
+    #endif
+        {sipName_QInputMethod, &sipType_QInputMethod, -1, 8},
+        {sipName_QScreen, &sipType_QScreen, -1, 9},
+        {sipName_QClipboard, &sipType_QClipboard, -1, 10},
+        {sipName_QSyntaxHighlighter, &sipType_QSyntaxHighlighter, -1, 11},
+    #if defined(SIP_FEATURE_PyQt_OpenGL)
+        {sipName_QOpenGLShaderProgram, &sipType_QOpenGLShaderProgram, -1, 12},
+    #else
+        {0, 0, -1, 12},
+    #endif
+        {sipName_QTextObject, &sipType_QTextObject, 25, 13},
+    #if QT_VERSION >= 0x050100 && defined(SIP_FEATURE_PyQt_Desktop_OpenGL)
+        {sipName_QOpenGLTimerQuery, &sipType_QOpenGLTimerQuery, -1, 14},
+    #else
+        {0, 0, -1, 14},
+    #endif
+        {sipName_QValidator, &sipType_QValidator, 29, 15},
+    #if QT_VERSION >= 0x050100 && defined(SIP_FEATURE_PyQt_Desktop_OpenGL)
+        {sipName_QOpenGLTimeMonitor, &sipType_QOpenGLTimeMonitor, -1, 16},
+    #else
+        {0, 0, -1, 16},
+    #endif
+        {sipName_QAbstractTextDocumentLayout, &sipType_QAbstractTextDocumentLayout, -1, 17},
+        {sipName_QMovie, &sipType_QMovie, -1, 18},
+        {sipName_QPdfWriter, &sipType_QPdfWriter, -1, 19},
+        {sipName_QWindow, &sipType_QWindow, -1, 20},
+    #if defined(SIP_FEATURE_PyQt_OpenGL)
+        {sipName_QOpenGLContextGroup, &sipType_QOpenGLContextGroup, -1, 21},
+    #else
+        {0, 0, -1, 21},
+    #endif
+        {sipName_QStyleHints, &sipType_QStyleHints, -1, 22},
+    #if QT_VERSION >= 0x050100 && defined(SIP_FEATURE_PyQt_OpenGL)
+        {sipName_QOpenGLDebugLogger, &sipType_QOpenGLDebugLogger, -1, 23},
+    #else
+        {0, 0, -1, 23},
+    #endif
+    #if defined(SIP_FEATURE_PyQt_SessionManager)
+        {sipName_QSessionManager, &sipType_QSessionManager, -1, 24},
+    #else
+        {0, 0, -1, 24},
+    #endif
+    #if defined(SIP_FEATURE_PyQt_OpenGL)
+        {sipName_QOpenGLShader, &sipType_QOpenGLShader, -1, -1},
+    #else
+        {0, 0, -1, -1},
+    #endif
+        {sipName_QTextFrame, &sipType_QTextFrame, 27, 26},
+        {sipName_QTextBlockGroup, &sipType_QTextBlockGroup, 28, -1},
+        {sipName_QTextTable, &sipType_QTextTable, -1, -1},
+        {sipName_QTextList, &sipType_QTextList, -1, -1},
+        {sipName_QRegExpValidator, &sipType_QRegExpValidator, -1, 30},
+        {sipName_QIntValidator, &sipType_QIntValidator, -1, 31},
+    #if QT_VERSION >= 0x050100
+        {sipName_QRegularExpressionValidator, &sipType_QRegularExpressionValidator, -1, 32},
+    #else
+        {0, 0, -1, 32},
+    #endif
+        {sipName_QDoubleValidator, &sipType_QDoubleValidator, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    QGuiApplication(SIP_PYLIST argv /DocType="list-of-str"/) /PostHook=__pyQtQAppHook__/ [(int &argc, char **argv, int = ApplicationFlags)];
+%MethodCode
+        // The Python interface is a list of argument strings that is modified.
+        
+        int argc;
+        char **argv;
+        
+        // Convert the list.
+        if ((argv = pyqt5_qtgui_from_argv_list(a0, argc)) == NULL)
+            sipIsErr = 1;
+        else
+        {
+            // Create it now the arguments are right.
+            static int nargc;
+            nargc = argc;
+        
+            Py_BEGIN_ALLOW_THREADS
+            sipCpp = new sipQGuiApplication(nargc, argv, QCoreApplication::ApplicationFlags);
+            Py_END_ALLOW_THREADS
+        
+            // Now modify the original list.
+            pyqt5_qtgui_update_argv_list(a0, argc, argv);
+        }
+%End
+
+    virtual ~QGuiApplication();
+    static QWindowList allWindows();
+    static QWindowList topLevelWindows();
+    static QWindow *topLevelAt(const QPoint &pos);
+    static QString platformName();
+    static QWindow *focusWindow();
+    static QObject *focusObject();
+    static QScreen *primaryScreen();
+    static QList<QScreen*> screens();
+    static QCursor *overrideCursor();
+    static void setOverrideCursor(const QCursor &);
+    static void changeOverrideCursor(const QCursor &);
+    static void restoreOverrideCursor();
+    static QFont font();
+    static void setFont(const QFont &);
+    static QClipboard *clipboard();
+    static QPalette palette();
+    static void setPalette(const QPalette &pal);
+    static Qt::KeyboardModifiers keyboardModifiers();
+    static Qt::KeyboardModifiers queryKeyboardModifiers();
+    static Qt::MouseButtons mouseButtons();
+    static void setLayoutDirection(Qt::LayoutDirection direction);
+    static Qt::LayoutDirection layoutDirection();
+    static bool isRightToLeft();
+    static bool isLeftToRight();
+    static void setDesktopSettingsAware(bool on);
+    static bool desktopSettingsAware();
+    static void setQuitOnLastWindowClosed(bool quit);
+    static bool quitOnLastWindowClosed();
+    static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/;
+%End
+    virtual bool notify(QObject *, QEvent *);
+
+signals:
+    void fontDatabaseChanged();
+    void screenAdded(QScreen *screen);
+    void lastWindowClosed();
+    void focusObjectChanged(QObject *focusObject);
+%If (PyQt_SessionManager)
+    void commitDataRequest(QSessionManager &sessionManager);
+%End
+%If (PyQt_SessionManager)
+    void saveStateRequest(QSessionManager &sessionManager);
+%End
+    void focusWindowChanged(QWindow *focusWindow);
+%If (Qt_5_2_0 -)
+    void applicationStateChanged(Qt::ApplicationState state);
+%End
+
+public:
+    static void setApplicationDisplayName(const QString &name);
+    static QString applicationDisplayName();
+    static QWindow *modalWindow();
+    qreal devicePixelRatio() const;
+%If (PyQt_SessionManager)
+    bool isSessionRestored() const;
+%End
+%If (PyQt_SessionManager)
+    QString sessionId() const;
+%End
+%If (PyQt_SessionManager)
+    QString sessionKey() const;
+%End
+%If (PyQt_SessionManager)
+    bool isSavingSession() const;
+%End
+%If (Qt_5_2_0 -)
+    static Qt::ApplicationState applicationState();
+%End
+%If (Qt_5_2_0 -)
+    static void sync();
+%End
+%If (Qt_5_3_0 -)
+    static void setWindowIcon(const QIcon &icon);
+%End
+%If (Qt_5_3_0 -)
+    static QIcon windowIcon();
+%End
+
+protected:
+    virtual bool event(QEvent *);
+
+private:
+    QGuiApplication(const QGuiApplication &);
+};
+
+%ModuleHeaderCode
+// Imports from QtCore.
+typedef char **(*pyqt5_qtgui_from_argv_list_t)(PyObject *, int &);
+extern pyqt5_qtgui_from_argv_list_t pyqt5_qtgui_from_argv_list;
+
+typedef void (*pyqt5_qtgui_update_argv_list_t)(PyObject *, int, char **);
+extern pyqt5_qtgui_update_argv_list_t pyqt5_qtgui_update_argv_list;
+%End
+
+%ModuleCode
+// Imports from QtCore.
+pyqt5_qtgui_from_argv_list_t pyqt5_qtgui_from_argv_list;
+pyqt5_qtgui_update_argv_list_t pyqt5_qtgui_update_argv_list;
+%End
+
+%InitialisationCode
+// Export our own helpers.
+sipExportSymbol("qtgui_wrap_ancestors", (void *)qtgui_wrap_ancestors);
+%End
+
+%PostInitialisationCode
+// Imports from QtCore.
+pyqt5_qtgui_from_argv_list = (pyqt5_qtgui_from_argv_list_t)sipImportSymbol("pyqt5_from_argv_list");
+pyqt5_qtgui_update_argv_list = (pyqt5_qtgui_update_argv_list_t)sipImportSymbol("pyqt5_update_argv_list");
+%End
diff --git a/sip/QtGui/qicon.sip b/sip/QtGui/qicon.sip
new file mode 100644
index 0000000..9cded4f
--- /dev/null
+++ b/sip/QtGui/qicon.sip
@@ -0,0 +1,88 @@
+// qicon.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qicon.h>
+%End
+
+class QIcon /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qicon.h>
+%End
+
+public:
+    enum Mode
+    {
+        Normal,
+        Disabled,
+        Active,
+        Selected,
+    };
+
+    enum State
+    {
+        On,
+        Off,
+    };
+
+    QIcon();
+    QIcon(const QPixmap &pixmap);
+    QIcon(const QIcon &other);
+    explicit QIcon(const QString &fileName);
+    explicit QIcon(QIconEngine *engine /Transfer/);
+    QIcon(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QIcon(a0->value<QIcon>());
+%End
+
+    ~QIcon();
+    QPixmap pixmap(const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const;
+    QPixmap pixmap(int w, int h, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const;
+    QPixmap pixmap(int extent, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const;
+%If (Qt_5_1_0 -)
+    QPixmap pixmap(QWindow *window, const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const;
+%End
+    QSize actualSize(const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const;
+%If (Qt_5_1_0 -)
+    QSize actualSize(QWindow *window, const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const;
+%End
+    QList<QSize> availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const;
+    void paint(QPainter *painter, const QRect &rect, Qt::Alignment alignment = Qt::AlignCenter, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const;
+    void paint(QPainter *painter, int x, int y, int w, int h, Qt::Alignment alignment = Qt::AlignCenter, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const;
+    bool isNull() const;
+    bool isDetached() const;
+    void addPixmap(const QPixmap &pixmap, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off);
+    void addFile(const QString &fileName, const QSize &size = QSize(), QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off);
+    qint64 cacheKey() const;
+    static QIcon fromTheme(const QString &name, const QIcon &fallback = QIcon());
+    static bool hasThemeIcon(const QString &name);
+    static QStringList themeSearchPaths();
+    static void setThemeSearchPaths(const QStringList &searchpath);
+    static QString themeName();
+    static void setThemeName(const QString &path);
+    QString name() const;
+    void swap(QIcon &other);
+};
+
+QDataStream &operator<<(QDataStream &, const QIcon & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QIcon & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qiconengine.sip b/sip/QtGui/qiconengine.sip
new file mode 100644
index 0000000..65ccdf9
--- /dev/null
+++ b/sip/QtGui/qiconengine.sip
@@ -0,0 +1,60 @@
+// qiconengine.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QIconEngine /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qiconengine.h>
+%End
+
+public:
+    virtual ~QIconEngine();
+    virtual void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) = 0;
+    virtual QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state);
+    virtual QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state);
+    virtual void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state);
+    virtual void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state);
+    virtual QString key() const;
+    virtual QIconEngine *clone() const = 0 /Factory/;
+    virtual bool read(QDataStream &in);
+    virtual bool write(QDataStream &out) const;
+
+    enum IconEngineHook
+    {
+        AvailableSizesHook,
+        IconNameHook,
+    };
+
+    struct AvailableSizesArgument
+    {
+%TypeHeaderCode
+#include <qiconengine.h>
+%End
+
+        QIcon::Mode mode;
+        QIcon::State state;
+        QList<QSize> sizes;
+    };
+
+    virtual QList<QSize> availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const;
+    virtual QString iconName() const;
+};
diff --git a/sip/QtGui/qimage.sip b/sip/QtGui/qimage.sip
new file mode 100644
index 0000000..ecfb971
--- /dev/null
+++ b/sip/QtGui/qimage.sip
@@ -0,0 +1,235 @@
+// qimage.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qimage.h>
+%End
+
+class QImage : QPaintDevice
+{
+%TypeHeaderCode
+#include <qimage.h>
+%End
+
+public:
+    enum InvertMode
+    {
+        InvertRgb,
+        InvertRgba,
+    };
+
+    enum Format
+    {
+        Format_Invalid,
+        Format_Mono,
+        Format_MonoLSB,
+        Format_Indexed8,
+        Format_RGB32,
+        Format_ARGB32,
+        Format_ARGB32_Premultiplied,
+        Format_RGB16,
+        Format_ARGB8565_Premultiplied,
+        Format_RGB666,
+        Format_ARGB6666_Premultiplied,
+        Format_RGB555,
+        Format_ARGB8555_Premultiplied,
+        Format_RGB888,
+        Format_RGB444,
+        Format_ARGB4444_Premultiplied,
+%If (Qt_5_2_0 -)
+        Format_RGBX8888,
+%End
+%If (Qt_5_2_0 -)
+        Format_RGBA8888,
+%End
+%If (Qt_5_2_0 -)
+        Format_RGBA8888_Premultiplied,
+%End
+    };
+
+    QImage();
+    QImage(const QSize &size, QImage::Format format);
+    QImage(int width, int height, QImage::Format format);
+    QImage(const uchar *data /KeepReference/, int width, int height, QImage::Format format);
+    QImage(void *data, int width, int height, QImage::Format format) [(uchar *data, int width, int height, QImage::Format format)];
+    QImage(const uchar *data /KeepReference/, int width, int height, int bytesPerLine, QImage::Format format);
+    QImage(void *data, int width, int height, int bytesPerLine, QImage::Format format) [(uchar *data, int width, int height, int bytesPerLine, QImage::Format format)];
+    explicit QImage(SIP_PYLIST xpm /DocType="list-of-str"/) [(const char **xpm)];
+%MethodCode
+        // The Python interface is a list of strings that make up the image.
+        
+        const char **str = QtGui_ListToArray(a0);
+        
+        if (str)
+        {
+            sipCpp = new sipQImage(str);
+            QtGui_DeleteArray(str);
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    QImage(const QString &fileName, const char *format = 0);
+    QImage(const QImage &);
+    QImage(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new sipQImage(a0->value<QImage>());
+%End
+
+    virtual ~QImage();
+    bool isNull() const;
+    virtual int devType() const;
+    bool operator==(const QImage &) const;
+    bool operator!=(const QImage &) const;
+    void detach();
+    bool isDetached() const;
+    QImage copy(const QRect &rect = QRect()) const;
+    QImage copy(int x, int y, int w, int h) const;
+    QImage::Format format() const;
+    QImage convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags = Qt::AutoColor) const;
+    QImage convertToFormat(QImage::Format format, const QVector<unsigned int> &colorTable, Qt::ImageConversionFlags flags = Qt::AutoColor) const;
+    int width() const;
+    int height() const;
+    QSize size() const;
+    QRect rect() const;
+    int depth() const;
+    QRgb color(int i) const;
+    void setColor(int i, QRgb c);
+    bool allGray() const;
+    bool isGrayscale() const;
+    void *bits() [uchar * ()];
+    const void *constBits() const [const uchar * ()];
+    void *scanLine(int) [uchar * (int)];
+    const void *constScanLine(int) const [const uchar * (int)];
+    int bytesPerLine() const;
+    bool valid(const QPoint &pt) const;
+    bool valid(int x, int y) const;
+    int pixelIndex(const QPoint &pt) const;
+    int pixelIndex(int x, int y) const;
+    QRgb pixel(const QPoint &pt) const;
+    QRgb pixel(int x, int y) const;
+    void setPixel(const QPoint &pt, uint index_or_rgb);
+    void setPixel(int x, int y, uint index_or_rgb);
+    QVector<unsigned int> colorTable() const;
+    void setColorTable(const QVector<unsigned int> colors);
+    void fill(Qt::GlobalColor color /Constrained/);
+    void fill(const QColor &color);
+    void fill(uint pixel);
+    bool hasAlphaChannel() const;
+    QImage createAlphaMask(Qt::ImageConversionFlags flags = Qt::AutoColor) const;
+    QImage createHeuristicMask(bool clipTight = true) const;
+    QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const;
+    QImage scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const;
+    QImage scaledToWidth(int width, Qt::TransformationMode mode = Qt::FastTransformation) const;
+    QImage scaledToHeight(int height, Qt::TransformationMode mode = Qt::FastTransformation) const;
+    QImage mirrored(bool horizontal = false, bool vertical = true) const;
+    QImage rgbSwapped() const;
+    void invertPixels(QImage::InvertMode mode = QImage::InvertRgb);
+    bool load(QIODevice *device, const char *format);
+    bool load(const QString &fileName, const char *format = 0);
+    bool loadFromData(const uchar *data /Array/, int len /ArraySize/, const char *format = 0);
+    bool loadFromData(const QByteArray &data, const char *format = 0);
+    bool save(const QString &fileName, const char *format = 0, int quality = -1) const;
+    bool save(QIODevice *device, const char *format = 0, int quality = -1) const;
+    static QImage fromData(const uchar *data /Array/, int size /ArraySize/, const char *format = 0);
+    static QImage fromData(const QByteArray &data, const char *format = 0);
+    virtual QPaintEngine *paintEngine() const;
+    int dotsPerMeterX() const;
+    int dotsPerMeterY() const;
+    void setDotsPerMeterX(int);
+    void setDotsPerMeterY(int);
+    QPoint offset() const;
+    void setOffset(const QPoint &);
+    QStringList textKeys() const;
+    QString text(const QString &key /DocValue="''"/ = QString()) const;
+    void setText(const QString &key, const QString &value);
+
+protected:
+    virtual int metric(QPaintDevice::PaintDeviceMetric metric) const;
+
+public:
+    QImage createMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor) const;
+    QImage transformed(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const;
+    static QTransform trueMatrix(const QTransform &, int w, int h);
+    qint64 cacheKey() const;
+    int colorCount() const;
+    void setColorCount(int);
+    int byteCount() const;
+    int bitPlaneCount() const;
+    void swap(QImage &other);
+    qreal devicePixelRatio() const;
+    void setDevicePixelRatio(qreal scaleFactor);
+};
+
+QDataStream &operator<<(QDataStream &, const QImage & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QImage & /Constrained/) /ReleaseGIL/;
+
+%ModuleHeaderCode
+const char **QtGui_ListToArray(PyObject *lst);
+void QtGui_DeleteArray(const char **arr);
+%End
+
+%ModuleCode
+// Convert a list of strings to an array of ASCII strings on the heap.  Used by
+// QImage and QPixmap.
+const char **QtGui_ListToArray(PyObject *lst)
+{
+    SIP_SSIZE_T nstr = PyList_Size(lst);
+    const char **arr = new const char *[nstr + 1];
+
+    for (SIP_SSIZE_T i = 0; i < nstr; ++i)
+    {
+        PyObject *ascii_obj = PyList_GetItem(lst, i);
+        const char *ascii = sipString_AsASCIIString(&ascii_obj);
+
+        if (!ascii)
+        {
+            while (i-- > 0)
+                delete[] arr[i];
+
+            delete[] arr;
+
+            return 0;
+        }
+
+        // Copy the string.
+        arr[i] = qstrdup(ascii);
+
+        Py_DECREF(ascii_obj);
+    }
+
+    // The sentinal.
+    arr[nstr] = 0;
+
+    return arr;
+}
+
+
+// Return a string array created by QtGui_ListToArray() to the heap.
+void QtGui_DeleteArray(const char **arr)
+{
+    for (SIP_SSIZE_T i = 0; arr[i]; ++i)
+        delete[] arr[i];
+
+    delete[] arr;
+}
+%End
diff --git a/sip/QtGui/qimageiohandler.sip b/sip/QtGui/qimageiohandler.sip
new file mode 100644
index 0000000..b008db7
--- /dev/null
+++ b/sip/QtGui/qimageiohandler.sip
@@ -0,0 +1,70 @@
+// qimageiohandler.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QImageIOHandler
+{
+%TypeHeaderCode
+#include <qimageiohandler.h>
+%End
+
+public:
+    enum ImageOption
+    {
+        Size,
+        ClipRect,
+        Description,
+        ScaledClipRect,
+        ScaledSize,
+        CompressionRatio,
+        Gamma,
+        Quality,
+        Name,
+        SubType,
+        IncrementalReading,
+        Endianness,
+        Animation,
+        BackgroundColor,
+    };
+
+    QImageIOHandler();
+    virtual ~QImageIOHandler();
+    void setDevice(QIODevice *device);
+    QIODevice *device() const;
+    void setFormat(const QByteArray &format);
+    QByteArray format() const;
+    virtual bool canRead() const = 0;
+    virtual bool read(QImage *image) = 0;
+    virtual bool write(const QImage &image);
+    virtual QVariant option(QImageIOHandler::ImageOption option) const;
+    virtual void setOption(QImageIOHandler::ImageOption option, const QVariant &value);
+    virtual bool supportsOption(QImageIOHandler::ImageOption option) const;
+    virtual bool jumpToNextImage();
+    virtual bool jumpToImage(int imageNumber);
+    virtual int loopCount() const;
+    virtual int imageCount() const;
+    virtual int nextImageDelay() const;
+    virtual int currentImageNumber() const;
+    virtual QRect currentImageRect() const;
+
+private:
+    QImageIOHandler(const QImageIOHandler &);
+};
diff --git a/sip/QtGui/qimagereader.sip b/sip/QtGui/qimagereader.sip
new file mode 100644
index 0000000..6439d77
--- /dev/null
+++ b/sip/QtGui/qimagereader.sip
@@ -0,0 +1,90 @@
+// qimagereader.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QImageReader
+{
+%TypeHeaderCode
+#include <qimagereader.h>
+%End
+
+public:
+    enum ImageReaderError
+    {
+        UnknownError,
+        FileNotFoundError,
+        DeviceError,
+        UnsupportedFormatError,
+        InvalidDataError,
+    };
+
+    QImageReader();
+    QImageReader(QIODevice *device, const QByteArray &format = QByteArray());
+    QImageReader(const QString &fileName, const QByteArray &format = QByteArray());
+    ~QImageReader();
+    void setFormat(const QByteArray &format);
+    QByteArray format() const;
+    void setDevice(QIODevice *device);
+    QIODevice *device() const;
+    void setFileName(const QString &fileName);
+    QString fileName() const;
+    QSize size() const;
+    void setClipRect(const QRect &rect);
+    QRect clipRect() const;
+    void setScaledSize(const QSize &size);
+    QSize scaledSize() const;
+    void setScaledClipRect(const QRect &rect);
+    QRect scaledClipRect() const;
+    bool canRead() const;
+    QImage read() /ReleaseGIL/;
+    bool read(QImage *image) /ReleaseGIL/;
+    bool jumpToNextImage();
+    bool jumpToImage(int imageNumber);
+    int loopCount() const;
+    int imageCount() const;
+    int nextImageDelay() const;
+    int currentImageNumber() const;
+    QRect currentImageRect() const;
+    QImageReader::ImageReaderError error() const;
+    QString errorString() const;
+    static QByteArray imageFormat(const QString &fileName);
+    static QByteArray imageFormat(QIODevice *device);
+    static QList<QByteArray> supportedImageFormats();
+    QStringList textKeys() const;
+    QString text(const QString &key) const;
+    void setBackgroundColor(const QColor &color);
+    QColor backgroundColor() const;
+    bool supportsAnimation() const;
+    void setQuality(int quality);
+    int quality() const;
+    bool supportsOption(QImageIOHandler::ImageOption option) const;
+    void setAutoDetectImageFormat(bool enabled);
+    bool autoDetectImageFormat() const;
+    QImage::Format imageFormat() const;
+    void setDecideFormatFromContent(bool ignored);
+    bool decideFormatFromContent() const;
+%If (Qt_5_1_0 -)
+    static QList<QByteArray> supportedMimeTypes();
+%End
+
+private:
+    QImageReader(const QImageReader &);
+};
diff --git a/sip/QtGui/qimagewriter.sip b/sip/QtGui/qimagewriter.sip
new file mode 100644
index 0000000..0550314
--- /dev/null
+++ b/sip/QtGui/qimagewriter.sip
@@ -0,0 +1,66 @@
+// qimagewriter.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QImageWriter
+{
+%TypeHeaderCode
+#include <qimagewriter.h>
+%End
+
+public:
+    enum ImageWriterError
+    {
+        UnknownError,
+        DeviceError,
+        UnsupportedFormatError,
+    };
+
+    QImageWriter();
+    QImageWriter(QIODevice *device, const QByteArray &format);
+    QImageWriter(const QString &fileName, const QByteArray &format = QByteArray());
+    ~QImageWriter();
+    void setFormat(const QByteArray &format);
+    QByteArray format() const;
+    void setDevice(QIODevice *device);
+    QIODevice *device() const;
+    void setFileName(const QString &fileName);
+    QString fileName() const;
+    void setQuality(int quality);
+    int quality() const;
+    void setGamma(float gamma);
+    float gamma() const;
+    bool canWrite() const;
+    bool write(const QImage &image) /ReleaseGIL/;
+    QImageWriter::ImageWriterError error() const;
+    QString errorString() const;
+    static QList<QByteArray> supportedImageFormats();
+    void setText(const QString &key, const QString &text);
+    bool supportsOption(QImageIOHandler::ImageOption option) const;
+    void setCompression(int compression);
+    int compression() const;
+%If (Qt_5_1_0 -)
+    static QList<QByteArray> supportedMimeTypes();
+%End
+
+private:
+    QImageWriter(const QImageWriter &);
+};
diff --git a/sip/QtGui/qinputmethod.sip b/sip/QtGui/qinputmethod.sip
new file mode 100644
index 0000000..03d1337
--- /dev/null
+++ b/sip/QtGui/qinputmethod.sip
@@ -0,0 +1,75 @@
+// qinputmethod.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QInputMethod : QObject
+{
+%TypeHeaderCode
+#include <qinputmethod.h>
+%End
+
+public:
+    QTransform inputItemTransform() const;
+    void setInputItemTransform(const QTransform &transform);
+    QRectF cursorRectangle() const;
+    QRectF keyboardRectangle() const;
+
+    enum Action
+    {
+        Click,
+        ContextMenu,
+    };
+
+    bool isVisible() const;
+    void setVisible(bool visible);
+    bool isAnimating() const;
+    QLocale locale() const;
+    Qt::LayoutDirection inputDirection() const;
+%If (Qt_5_1_0 -)
+    QRectF inputItemRectangle() const;
+%End
+%If (Qt_5_1_0 -)
+    void setInputItemRectangle(const QRectF &rect);
+%End
+%If (Qt_5_3_0 -)
+    static QVariant queryFocusObject(Qt::InputMethodQuery query, QVariant argument);
+%End
+
+public slots:
+    void show();
+    void hide();
+    void update(Qt::InputMethodQueries queries);
+    void reset();
+    void commit();
+    void invokeAction(QInputMethod::Action a, int cursorPosition);
+
+signals:
+    void cursorRectangleChanged();
+    void keyboardRectangleChanged();
+    void visibleChanged();
+    void animatingChanged();
+    void localeChanged();
+    void inputDirectionChanged(Qt::LayoutDirection newDirection);
+
+private:
+    QInputMethod();
+    virtual ~QInputMethod();
+};
diff --git a/sip/QtGui/qkeysequence.sip b/sip/QtGui/qkeysequence.sip
new file mode 100644
index 0000000..1ad9d6b
--- /dev/null
+++ b/sip/QtGui/qkeysequence.sip
@@ -0,0 +1,233 @@
+// qkeysequence.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qkeysequence.h>
+%End
+
+class QKeySequence
+{
+%TypeHeaderCode
+#include <qkeysequence.h>
+%End
+
+%ConvertToTypeCode
+// Allow a StandardKey, QString or an integer whenever a QKeySequence is
+// expected.
+
+if (sipIsErr == NULL)
+{
+    if (sipCanConvertToType(sipPy, sipType_QKeySequence, SIP_NO_CONVERTORS))
+        return 1;
+
+    if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_QKeySequence_StandardKey)))
+        return 1;
+
+    if (sipCanConvertToType(sipPy, sipType_QString, 0))
+        return 1;
+
+    PyErr_Clear();
+
+    SIPLong_AsLong(sipPy);
+
+    return !PyErr_Occurred();
+}
+
+if (sipCanConvertToType(sipPy, sipType_QKeySequence, SIP_NO_CONVERTORS))
+{
+    *sipCppPtr = reinterpret_cast<QKeySequence *>(sipConvertToType(sipPy, sipType_QKeySequence, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+    return 0;
+}
+
+if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_QKeySequence_StandardKey)))
+{
+    *sipCppPtr = new QKeySequence((QKeySequence::StandardKey)SIPLong_AsLong(sipPy));
+
+    return sipGetState(sipTransferObj);
+}
+
+if (sipCanConvertToType(sipPy, sipType_QString, 0))
+{
+    int state;
+    QString *qs = reinterpret_cast<QString *>(sipConvertToType(sipPy, sipType_QString, 0, 0, &state, sipIsErr));
+
+    if (*sipIsErr)
+    {
+        sipReleaseType(qs, sipType_QString, state);
+        return 0;
+    }
+
+    *sipCppPtr = new QKeySequence(*qs);
+
+    sipReleaseType(qs, sipType_QString, state);
+
+    return sipGetState(sipTransferObj);
+}
+
+int key = SIPLong_AsLong(sipPy);
+
+*sipCppPtr = new QKeySequence(key);
+
+return sipGetState(sipTransferObj);
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"iiii", sipCpp->operator[](0), sipCpp->operator[](1), sipCpp->operator[](2), sipCpp->operator[](3));
+%End
+
+public:
+    enum SequenceFormat
+    {
+        NativeText,
+        PortableText,
+    };
+
+    enum SequenceMatch
+    {
+        NoMatch,
+        PartialMatch,
+        ExactMatch,
+    };
+
+    enum StandardKey
+    {
+        UnknownKey,
+        HelpContents,
+        WhatsThis,
+        Open,
+        Close,
+        Save,
+        New,
+        Delete,
+        Cut,
+        Copy,
+        Paste,
+        Undo,
+        Redo,
+        Back,
+        Forward,
+        Refresh,
+        ZoomIn,
+        ZoomOut,
+        Print,
+        AddTab,
+        NextChild,
+        PreviousChild,
+        Find,
+        FindNext,
+        FindPrevious,
+        Replace,
+        SelectAll,
+        Bold,
+        Italic,
+        Underline,
+        MoveToNextChar,
+        MoveToPreviousChar,
+        MoveToNextWord,
+        MoveToPreviousWord,
+        MoveToNextLine,
+        MoveToPreviousLine,
+        MoveToNextPage,
+        MoveToPreviousPage,
+        MoveToStartOfLine,
+        MoveToEndOfLine,
+        MoveToStartOfBlock,
+        MoveToEndOfBlock,
+        MoveToStartOfDocument,
+        MoveToEndOfDocument,
+        SelectNextChar,
+        SelectPreviousChar,
+        SelectNextWord,
+        SelectPreviousWord,
+        SelectNextLine,
+        SelectPreviousLine,
+        SelectNextPage,
+        SelectPreviousPage,
+        SelectStartOfLine,
+        SelectEndOfLine,
+        SelectStartOfBlock,
+        SelectEndOfBlock,
+        SelectStartOfDocument,
+        SelectEndOfDocument,
+        DeleteStartOfWord,
+        DeleteEndOfWord,
+        DeleteEndOfLine,
+        InsertParagraphSeparator,
+        InsertLineSeparator,
+        SaveAs,
+        Preferences,
+        Quit,
+        FullScreen,
+%If (Qt_5_1_0 -)
+        Deselect,
+%End
+%If (Qt_5_2_0 -)
+        DeleteCompleteLine,
+%End
+    };
+
+    QKeySequence();
+    QKeySequence(const QKeySequence &ks);
+    QKeySequence(const QString &key, QKeySequence::SequenceFormat format = QKeySequence::NativeText);
+    QKeySequence(int k1, int key2 = 0, int key3 = 0, int key4 = 0);
+    QKeySequence(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QKeySequence(a0->value<QKeySequence>());
+%End
+
+    ~QKeySequence();
+    int count() const /__len__/;
+    bool isEmpty() const;
+    QKeySequence::SequenceMatch matches(const QKeySequence &seq) const;
+    static QKeySequence mnemonic(const QString &text);
+    int operator[](int i) const;
+%MethodCode
+        SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
+        
+        if (idx < 0)
+            sipIsErr = 1;
+        else
+            sipRes = sipCpp->operator[]((uint)idx);
+%End
+
+    bool operator==(const QKeySequence &other) const;
+    bool operator!=(const QKeySequence &other) const;
+    bool operator<(const QKeySequence &ks) const;
+    bool operator>(const QKeySequence &other) const;
+    bool operator<=(const QKeySequence &other) const;
+    bool operator>=(const QKeySequence &other) const;
+    bool isDetached() const;
+    void swap(QKeySequence &other);
+    QString toString(QKeySequence::SequenceFormat format = QKeySequence::PortableText) const;
+    static QKeySequence fromString(const QString &str, QKeySequence::SequenceFormat format = QKeySequence::PortableText);
+    static QList<QKeySequence> keyBindings(QKeySequence::StandardKey key);
+%If (Qt_5_1_0 -)
+    static QList<QKeySequence> listFromString(const QString &str, QKeySequence::SequenceFormat format = QKeySequence::PortableText);
+%End
+%If (Qt_5_1_0 -)
+    static QString listToString(const QList<QKeySequence> &list, QKeySequence::SequenceFormat format = QKeySequence::PortableText);
+%End
+};
+
+QDataStream &operator<<(QDataStream &in, const QKeySequence &ks /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &out, QKeySequence &ks /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qmatrix4x4.sip b/sip/QtGui/qmatrix4x4.sip
new file mode 100644
index 0000000..6beb57e
--- /dev/null
+++ b/sip/QtGui/qmatrix4x4.sip
@@ -0,0 +1,311 @@
+// qmatrix4x4.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qmatrix4x4.h>
+%End
+
+class QMatrix4x4
+{
+%TypeHeaderCode
+#include <qmatrix4x4.h>
+%End
+
+%PickleCode
+    PYQT_FLOAT data[16];
+    
+    // We want the data in row-major order.
+    sipCpp->copyDataTo(data);
+    
+    sipRes = Py_BuildValue((char *)"dddddddddddddddd",
+            (double)data[0], (double)data[1], (double)data[2], (double)data[3],
+            (double)data[4], (double)data[5], (double)data[6], (double)data[7],
+            (double)data[8], (double)data[9], (double)data[10], (double)data[11],
+            (double)data[12], (double)data[13], (double)data[14], (double)data[15]);
+%End
+
+public:
+    QMatrix4x4();
+    explicit QMatrix4x4(SIP_PYOBJECT values /DocType="sequence-of-float"/) [(const float *values)];
+%MethodCode
+        float values[16];
+        
+        if ((sipError = qtgui_matrixDataFromSequence(a0, 16, values)) == sipErrorNone)
+            sipCpp = new QMatrix4x4(values);
+%End
+
+    QMatrix4x4(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44);
+    QMatrix4x4(const QTransform &transform);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        bool bad = false;
+        int i;
+        PyObject *m[16];
+        PYQT_FLOAT data[16];
+        
+        // The raw data is in column-major order but we want row-major order.
+        sipCpp->copyDataTo(data);
+        
+        for (i = 0; i < 16; ++i)
+        {
+            m[i] = PyFloat_FromDouble(data[i]);
+        
+            if (!m[i])
+                bad = true;
+        }
+        
+        if (!bad)
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QMatrix4x4("
+                    "%R, %R, %R, %R, "
+                    "%R, %R, %R, %R, "
+                    "%R, %R, %R, %R, "
+                    "%R, %R, %R, %R)",
+                    m[0], m[1], m[2], m[3],
+                    m[4], m[5], m[6], m[7],
+                    m[8], m[9], m[10], m[11],
+                    m[12], m[13], m[14], m[15]);
+        #else
+            sipRes = PyString_FromString("PyQt5.QtGui.QMatrix4x4(");
+        
+            for (i = 0; i < 16; ++i)
+            {
+                if (i != 0)
+                    PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+        
+                PyString_ConcatAndDel(&sipRes, PyObject_Repr(m[i]));
+            }
+        
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        }
+        
+        for (i = 0; i < 16; ++i)
+            Py_XDECREF(m[i]);
+%End
+
+    double determinant() const;
+    QMatrix4x4 inverted(bool *invertible = 0) const;
+    QMatrix4x4 transposed() const;
+    QMatrix3x3 normalMatrix() const;
+    void scale(const QVector3D &vector);
+    void scale(float x, float y);
+    void scale(float x, float y, float z);
+    void scale(float factor);
+    void translate(const QVector3D &vector);
+    void translate(float x, float y);
+    void translate(float x, float y, float z);
+    void rotate(float angle, const QVector3D &vector);
+    void rotate(float angle, float x, float y, float z = 0.0f);
+    void rotate(const QQuaternion &quaternion);
+    void ortho(const QRect &rect);
+    void ortho(const QRectF &rect);
+    void ortho(float left, float right, float bottom, float top, float nearPlane, float farPlane);
+    void frustum(float left, float right, float bottom, float top, float nearPlane, float farPlane);
+    void perspective(float angle, float aspect, float nearPlane, float farPlane);
+    void lookAt(const QVector3D &eye, const QVector3D &center, const QVector3D &up);
+    SIP_PYLIST copyDataTo() const /DocType="list-of-float"/;
+%MethodCode
+        float values[16];
+        
+        sipCpp->copyDataTo(values);
+        sipError = qtgui_matrixDataAsList(16, values, &sipRes);
+%End
+
+    QTransform toTransform() const;
+    QTransform toTransform(float distanceToPlane) const;
+    QRect mapRect(const QRect &rect) const;
+    QRectF mapRect(const QRectF &rect) const;
+    SIP_PYLIST data() /DocType="list-of-float"/;
+%MethodCode
+        sipError = qtgui_matrixDataAsList(16, sipCpp->constData(), &sipRes);
+%End
+
+    void optimize();
+    SIP_PYOBJECT __getitem__(SIP_PYOBJECT) const;
+%MethodCode
+        int row, column;
+        
+        if ((sipError = qtgui_matrixParseIndex(a0, 4, 4, &row, &column)) == sipErrorNone)
+        {
+            sipRes = PyFloat_FromDouble(sipCpp->operator()(row, column));
+        
+            if (!sipRes)
+                sipError = sipErrorFail;
+        }
+%End
+
+    void __setitem__(SIP_PYOBJECT, qreal);
+%MethodCode
+        int row, column;
+        
+        if ((sipError = qtgui_matrixParseIndex(a0, 4, 4, &row, &column)) == sipErrorNone)
+            sipCpp->operator()(row, column) = a1;
+%End
+
+    QVector4D column(int index) const;
+    void setColumn(int index, const QVector4D &value);
+    QVector4D row(int index) const;
+    void setRow(int index, const QVector4D &value);
+    bool isIdentity() const;
+    void setToIdentity();
+    void fill(float value);
+    QMatrix4x4 &operator+=(const QMatrix4x4 &other);
+    QMatrix4x4 &operator-=(const QMatrix4x4 &other);
+    QMatrix4x4 &operator*=(const QMatrix4x4 &other);
+    QMatrix4x4 &operator*=(float factor);
+    QMatrix4x4 &operator/=(float divisor);
+    bool operator==(const QMatrix4x4 &other) const;
+    bool operator!=(const QMatrix4x4 &other) const;
+    QPoint map(const QPoint &point) const;
+    QPointF map(const QPointF &point) const;
+    QVector3D map(const QVector3D &point) const;
+    QVector3D mapVector(const QVector3D &vector) const;
+    QVector4D map(const QVector4D &point) const;
+};
+
+QMatrix4x4 operator/(const QMatrix4x4 &matrix, float divisor);
+QMatrix4x4 operator+(const QMatrix4x4 &m1, const QMatrix4x4 &m2);
+QMatrix4x4 operator-(const QMatrix4x4 &m1, const QMatrix4x4 &m2);
+QMatrix4x4 operator*(const QMatrix4x4 &m1, const QMatrix4x4 &m2);
+QVector3D operator*(const QVector3D &vector, const QMatrix4x4 &matrix);
+QVector3D operator*(const QMatrix4x4 &matrix, const QVector3D &vector);
+QVector4D operator*(const QVector4D &vector, const QMatrix4x4 &matrix);
+QVector4D operator*(const QMatrix4x4 &matrix, const QVector4D &vector);
+QPoint operator*(const QPoint &point, const QMatrix4x4 &matrix);
+QPointF operator*(const QPointF &point, const QMatrix4x4 &matrix);
+QPoint operator*(const QMatrix4x4 &matrix, const QPoint &point);
+QPointF operator*(const QMatrix4x4 &matrix, const QPointF &point);
+QMatrix4x4 operator-(const QMatrix4x4 &matrix);
+QMatrix4x4 operator*(float factor, const QMatrix4x4 &matrix);
+QMatrix4x4 operator*(const QMatrix4x4 &matrix, float factor);
+bool qFuzzyCompare(const QMatrix4x4 &m1, const QMatrix4x4 &m2);
+QDataStream &operator<<(QDataStream &, const QMatrix4x4 & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QMatrix4x4 & /Constrained/) /ReleaseGIL/;
+
+%ModuleHeaderCode
+// Helpers for the matrix classes.
+typedef float PYQT_FLOAT;
+
+sipErrorState qtgui_matrixParseIndex(PyObject *tup, int nr_rows,
+        int nr_columns, int *row, int *column);
+sipErrorState qtgui_matrixDataFromSequence(PyObject *seq, int nr_values,
+        PYQT_FLOAT *values);
+sipErrorState qtgui_matrixDataAsList(int nr_values, const PYQT_FLOAT *values,
+        PyObject **list);
+%End
+
+%ModuleCode
+// Convert a Python object to a row and column.
+sipErrorState qtgui_matrixParseIndex(PyObject *tup, int nr_rows,
+        int nr_columns, int *row, int *column)
+{
+    sipErrorState es = sipErrorContinue;
+
+    if (PyTuple_Check(tup) && PyArg_ParseTuple(tup, "ii", row, column))
+        if (*row >= 0 && *row < nr_rows && *column >= 0 && *column < nr_columns)
+            es = sipErrorNone;
+
+    if (es == sipErrorContinue)
+        PyErr_Format(PyExc_IndexError, "an index must be a row in the range 0 to %d and a column in the range 0 to %d", nr_rows - 1, nr_columns - 1);
+
+    return es;
+}
+
+
+// Convert a Python object to an array of qreals.
+sipErrorState qtgui_matrixDataFromSequence(PyObject *seq, int nr_values,
+        PYQT_FLOAT *values)
+{
+    sipErrorState es;
+
+    if (PySequence_Size(seq) == nr_values)
+    {
+        es = sipErrorNone;
+
+        for (int i = 0; i < nr_values; ++i)
+        {
+            PyObject *value = PySequence_GetItem(seq, i);
+
+            if (!value)
+            {
+                es = sipErrorFail;
+                break;
+            }
+
+            PyErr_Clear();
+
+            double d = PyFloat_AsDouble(value);
+
+            if (PyErr_Occurred())
+            {
+                Py_DECREF(value);
+                es = sipErrorContinue;
+                break;
+            }
+
+            Py_DECREF(value);
+
+            *values++ = d;
+        }
+    }
+    else
+    {
+        es = sipErrorContinue;
+    }
+
+    if (es == sipErrorContinue)
+        PyErr_Format(PyExc_TypeError, "a sequence of %d floats is expected",
+                nr_values);
+
+    return es;
+}
+
+
+// Convert an array of qreals to a Python list.
+sipErrorState qtgui_matrixDataAsList(int nr_values, const PYQT_FLOAT *values,
+        PyObject **list)
+{
+    PyObject *l = PyList_New(nr_values);
+
+    if (!l)
+        return sipErrorFail;
+
+    for (int i = 0; i < nr_values; ++i)
+    {
+        PyObject *value = PyFloat_FromDouble(*values++);
+
+        if (!value)
+        {
+            Py_DECREF(l);
+            return sipErrorFail;
+        }
+
+        PyList_SET_ITEM(l, i, value);
+    }
+
+    *list = l;
+
+    return sipErrorNone;
+}
+%End
diff --git a/sip/QtGui/qmovie.sip b/sip/QtGui/qmovie.sip
new file mode 100644
index 0000000..c3c4865
--- /dev/null
+++ b/sip/QtGui/qmovie.sip
@@ -0,0 +1,90 @@
+// qmovie.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMovie : QObject
+{
+%TypeHeaderCode
+#include <qmovie.h>
+%End
+
+public:
+    enum MovieState
+    {
+        NotRunning,
+        Paused,
+        Running,
+    };
+
+    enum CacheMode
+    {
+        CacheNone,
+        CacheAll,
+    };
+
+    explicit QMovie(QObject *parent /TransferThis/ = 0);
+    QMovie(QIODevice *device, const QByteArray &format = QByteArray(), QObject *parent /TransferThis/ = 0);
+    QMovie(const QString &fileName, const QByteArray &format = QByteArray(), QObject *parent /TransferThis/ = 0);
+    virtual ~QMovie();
+    static QList<QByteArray> supportedFormats();
+    void setDevice(QIODevice *device);
+    QIODevice *device() const;
+    void setFileName(const QString &fileName);
+    QString fileName() const;
+    void setFormat(const QByteArray &format);
+    QByteArray format() const;
+    void setBackgroundColor(const QColor &color);
+    QColor backgroundColor() const;
+    QMovie::MovieState state() const;
+    QRect frameRect() const;
+    QImage currentImage() const;
+    QPixmap currentPixmap() const;
+    bool isValid() const;
+    bool jumpToFrame(int frameNumber);
+    int loopCount() const;
+    int frameCount() const;
+    int nextFrameDelay() const;
+    int currentFrameNumber() const;
+    void setSpeed(int percentSpeed);
+    int speed() const;
+    QSize scaledSize();
+    void setScaledSize(const QSize &size);
+    QMovie::CacheMode cacheMode() const;
+    void setCacheMode(QMovie::CacheMode mode);
+
+signals:
+    void started();
+    void resized(const QSize &size);
+    void updated(const QRect &rect);
+    void stateChanged(QMovie::MovieState state);
+    void error(QImageReader::ImageReaderError error);
+    void finished();
+    void frameChanged(int frameNumber);
+
+public slots:
+    void start();
+    bool jumpToNextFrame();
+    void setPaused(bool paused);
+    void stop();
+
+private:
+    QMovie(const QMovie &);
+};
diff --git a/sip/QtGui/qoffscreensurface.sip b/sip/QtGui/qoffscreensurface.sip
new file mode 100644
index 0000000..6486c94
--- /dev/null
+++ b/sip/QtGui/qoffscreensurface.sip
@@ -0,0 +1,52 @@
+// qoffscreensurface.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QOffscreenSurface : QObject, QSurface
+{
+%TypeHeaderCode
+#include <qoffscreensurface.h>
+%End
+
+public:
+    explicit QOffscreenSurface(QScreen *screen = 0);
+    virtual ~QOffscreenSurface();
+    virtual QSurface::SurfaceType surfaceType() const;
+    void create();
+    void destroy();
+    bool isValid() const;
+    void setFormat(const QSurfaceFormat &format);
+    virtual QSurfaceFormat format() const;
+    QSurfaceFormat requestedFormat() const;
+    virtual QSize size() const;
+    QScreen *screen() const;
+    void setScreen(QScreen *screen);
+
+signals:
+    void screenChanged(QScreen *screen);
+
+private:
+    QOffscreenSurface(const QOffscreenSurface &);
+};
+
+%End
diff --git a/sip/QtGui/qopenglbuffer.sip b/sip/QtGui/qopenglbuffer.sip
new file mode 100644
index 0000000..3891fc9
--- /dev/null
+++ b/sip/QtGui/qopenglbuffer.sip
@@ -0,0 +1,84 @@
+// qopenglbuffer.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_OpenGL)
+
+class QOpenGLBuffer
+{
+%TypeHeaderCode
+#include <qopenglbuffer.h>
+%End
+
+public:
+    enum Type
+    {
+        VertexBuffer,
+        IndexBuffer,
+        PixelPackBuffer,
+        PixelUnpackBuffer,
+    };
+
+    QOpenGLBuffer();
+    explicit QOpenGLBuffer(QOpenGLBuffer::Type type);
+    QOpenGLBuffer(const QOpenGLBuffer &other);
+    ~QOpenGLBuffer();
+
+    enum UsagePattern
+    {
+        StreamDraw,
+        StreamRead,
+        StreamCopy,
+        StaticDraw,
+        StaticRead,
+        StaticCopy,
+        DynamicDraw,
+        DynamicRead,
+        DynamicCopy,
+    };
+
+    enum Access
+    {
+        ReadOnly,
+        WriteOnly,
+        ReadWrite,
+    };
+
+    QOpenGLBuffer::Type type() const;
+    QOpenGLBuffer::UsagePattern usagePattern() const;
+    void setUsagePattern(QOpenGLBuffer::UsagePattern value);
+    bool create();
+    bool isCreated() const;
+    void destroy();
+    bool bind();
+    void release();
+    static void release(QOpenGLBuffer::Type type);
+    GLuint bufferId() const;
+    int size() const /__len__/;
+    bool read(int offset, void *data, int count);
+    void write(int offset, const void *data, int count);
+    void allocate(const void *data, int count);
+    void allocate(int count);
+    void *map(QOpenGLBuffer::Access access);
+    bool unmap();
+};
+
+%End
diff --git a/sip/QtGui/qopenglcontext.sip b/sip/QtGui/qopenglcontext.sip
new file mode 100644
index 0000000..c1910bc
--- /dev/null
+++ b/sip/QtGui/qopenglcontext.sip
@@ -0,0 +1,141 @@
+// qopenglcontext.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qopenglcontext.h>
+%End
+
+%If (PyQt_OpenGL)
+
+class QOpenGLContextGroup : QObject
+{
+%TypeHeaderCode
+#include <qopenglcontext.h>
+%End
+
+public:
+    virtual ~QOpenGLContextGroup();
+    QList<QOpenGLContext*> shares() const;
+    static QOpenGLContextGroup *currentContextGroup();
+
+private:
+    QOpenGLContextGroup();
+};
+
+%End
+%If (PyQt_OpenGL)
+
+class QOpenGLContext : QObject
+{
+%TypeHeaderCode
+#include <qopenglcontext.h>
+%End
+
+public:
+    explicit QOpenGLContext(QObject *parent /TransferThis/ = 0);
+    virtual ~QOpenGLContext();
+    void setFormat(const QSurfaceFormat &format);
+    void setShareContext(QOpenGLContext *shareContext);
+    void setScreen(QScreen *screen);
+    bool create();
+    bool isValid() const;
+    QSurfaceFormat format() const;
+    QOpenGLContext *shareContext() const;
+    QOpenGLContextGroup *shareGroup() const;
+    QScreen *screen() const;
+    GLuint defaultFramebufferObject() const;
+    bool makeCurrent(QSurface *surface);
+    void doneCurrent();
+    void swapBuffers(QSurface *surface);
+    QSurface *surface() const;
+    static QOpenGLContext *currentContext();
+    static bool areSharing(QOpenGLContext *first, QOpenGLContext *second);
+    QSet<QByteArray> extensions() const;
+    bool hasExtension(const QByteArray &extension) const;
+
+signals:
+    void aboutToBeDestroyed();
+
+public:
+%If (Qt_5_1_0 -)
+    SIP_PYOBJECT versionFunctions(const QOpenGLVersionProfile *versionProfile = 0) const;
+%MethodCode
+        sipRes = qpyopengl_version_functions(sipCpp, sipSelf, a0);
+%End
+
+%End
+%If (Qt_5_3_0 -)
+    static void *openGLModuleHandle();
+%End
+%If (Qt_5_3_0 -)
+
+    enum OpenGLModuleType
+    {
+        LibGL,
+        LibGLES,
+    };
+
+%End
+%If (Qt_5_3_0 -)
+    static QOpenGLContext::OpenGLModuleType openGLModuleType();
+%End
+%If (Qt_5_3_0 -)
+    bool isOpenGLES() const;
+%End
+};
+
+%End
+%If (Qt_5_1_0 -)
+%If (PyQt_OpenGL)
+
+class QOpenGLVersionProfile
+{
+%TypeHeaderCode
+#include <qopenglcontext.h>
+%End
+
+public:
+    QOpenGLVersionProfile();
+    explicit QOpenGLVersionProfile(const QSurfaceFormat &format);
+    QOpenGLVersionProfile(const QOpenGLVersionProfile &other);
+    ~QOpenGLVersionProfile();
+    QPair<int, int> version() const;
+    void setVersion(int majorVersion, int minorVersion);
+    QSurfaceFormat::OpenGLContextProfile profile() const;
+    void setProfile(QSurfaceFormat::OpenGLContextProfile profile);
+    bool hasProfiles() const;
+    bool isLegacyVersion() const;
+    bool isValid() const;
+};
+
+%End
+%End
+%If (Qt_5_1_0 -)
+%If (PyQt_OpenGL)
+bool operator==(const QOpenGLVersionProfile &lhs, const QOpenGLVersionProfile &rhs);
+%End
+%End
+%If (Qt_5_1_0 -)
+%If (PyQt_OpenGL)
+bool operator!=(const QOpenGLVersionProfile &lhs, const QOpenGLVersionProfile &rhs);
+%End
+%End
diff --git a/sip/QtGui/qopengldebug.sip b/sip/QtGui/qopengldebug.sip
new file mode 100644
index 0000000..caf1422
--- /dev/null
+++ b/sip/QtGui/qopengldebug.sip
@@ -0,0 +1,156 @@
+// qopengldebug.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+%ModuleCode
+#include <qopengldebug.h>
+%End
+%End
+
+%If (Qt_5_1_0 -)
+%If (PyQt_OpenGL)
+
+class QOpenGLDebugMessage
+{
+%TypeHeaderCode
+#include <qopengldebug.h>
+%End
+
+public:
+    enum Source
+    {
+        InvalidSource,
+        APISource,
+        WindowSystemSource,
+        ShaderCompilerSource,
+        ThirdPartySource,
+        ApplicationSource,
+        OtherSource,
+        AnySource,
+    };
+
+    typedef QFlags<QOpenGLDebugMessage::Source> Sources;
+
+    enum Type
+    {
+        InvalidType,
+        ErrorType,
+        DeprecatedBehaviorType,
+        UndefinedBehaviorType,
+        PortabilityType,
+        PerformanceType,
+        OtherType,
+        MarkerType,
+        GroupPushType,
+        GroupPopType,
+        AnyType,
+    };
+
+    typedef QFlags<QOpenGLDebugMessage::Type> Types;
+
+    enum Severity
+    {
+        InvalidSeverity,
+        HighSeverity,
+        MediumSeverity,
+        LowSeverity,
+        NotificationSeverity,
+        AnySeverity,
+    };
+
+    typedef QFlags<QOpenGLDebugMessage::Severity> Severities;
+    QOpenGLDebugMessage();
+    QOpenGLDebugMessage(const QOpenGLDebugMessage &debugMessage);
+    ~QOpenGLDebugMessage();
+    void swap(QOpenGLDebugMessage &debugMessage);
+    QOpenGLDebugMessage::Source source() const;
+    QOpenGLDebugMessage::Type type() const;
+    QOpenGLDebugMessage::Severity severity() const;
+    GLuint id() const;
+    QString message() const;
+    static QOpenGLDebugMessage createApplicationMessage(const QString &text, GLuint id = 0, QOpenGLDebugMessage::Severity severity = QOpenGLDebugMessage::NotificationSeverity, QOpenGLDebugMessage::Type type = QOpenGLDebugMessage::OtherType);
+    static QOpenGLDebugMessage createThirdPartyMessage(const QString &text, GLuint id = 0, QOpenGLDebugMessage::Severity severity = QOpenGLDebugMessage::NotificationSeverity, QOpenGLDebugMessage::Type type = QOpenGLDebugMessage::OtherType);
+    bool operator==(const QOpenGLDebugMessage &debugMessage) const;
+    bool operator!=(const QOpenGLDebugMessage &debugMessage) const;
+};
+
+%End
+%End
+%If (Qt_5_1_0 -)
+%If (PyQt_OpenGL)
+QFlags<QOpenGLDebugMessage::Source> operator|(QOpenGLDebugMessage::Source f1, QFlags<QOpenGLDebugMessage::Source> f2);
+%End
+%End
+%If (Qt_5_1_0 -)
+%If (PyQt_OpenGL)
+QFlags<QOpenGLDebugMessage::Type> operator|(QOpenGLDebugMessage::Type f1, QFlags<QOpenGLDebugMessage::Type> f2);
+%End
+%End
+%If (Qt_5_1_0 -)
+%If (PyQt_OpenGL)
+QFlags<QOpenGLDebugMessage::Severity> operator|(QOpenGLDebugMessage::Severity f1, QFlags<QOpenGLDebugMessage::Severity> f2);
+%End
+%End
+%If (Qt_5_1_0 -)
+%If (PyQt_OpenGL)
+
+class QOpenGLDebugLogger : QObject
+{
+%TypeHeaderCode
+#include <qopengldebug.h>
+%End
+
+public:
+    enum LoggingMode
+    {
+        AsynchronousLogging,
+        SynchronousLogging,
+    };
+
+    explicit QOpenGLDebugLogger(QObject *parent /TransferThis/ = 0);
+    virtual ~QOpenGLDebugLogger();
+    bool initialize();
+    bool isLogging() const;
+    QOpenGLDebugLogger::LoggingMode loggingMode() const;
+    qint64 maximumMessageLength() const;
+    void pushGroup(const QString &name, GLuint id = 0, QOpenGLDebugMessage::Source source = QOpenGLDebugMessage::ApplicationSource);
+    void popGroup();
+    void enableMessages(QFlags<QOpenGLDebugMessage::Source> sources = QOpenGLDebugMessage::AnySource, QFlags<QOpenGLDebugMessage::Type> types = QOpenGLDebugMessage::AnyType, QFlags<QOpenGLDebugMessage::Severity> severities = QOpenGLDebugMessage::AnySeverity);
+    void enableMessages(const QVector<unsigned int> &ids, QFlags<QOpenGLDebugMessage::Source> sources = QOpenGLDebugMessage::AnySource, QFlags<QOpenGLDebugMessage::Type> types = QOpenGLDebugMessage::AnyType);
+    void disableMessages(QFlags<QOpenGLDebugMessage::Source> sources = QOpenGLDebugMessage::AnySource, QFlags<QOpenGLDebugMessage::Type> types = QOpenGLDebugMessage::AnyType, QFlags<QOpenGLDebugMessage::Severity> severities = QOpenGLDebugMessage::AnySeverity);
+    void disableMessages(const QVector<unsigned int> &ids, QFlags<QOpenGLDebugMessage::Source> sources = QOpenGLDebugMessage::AnySource, QFlags<QOpenGLDebugMessage::Type> types = QOpenGLDebugMessage::AnyType);
+    QList<QOpenGLDebugMessage> loggedMessages() const;
+
+public slots:
+    void logMessage(const QOpenGLDebugMessage &debugMessage);
+    void startLogging(QOpenGLDebugLogger::LoggingMode loggingMode = QOpenGLDebugLogger::AsynchronousLogging);
+    void stopLogging();
+
+signals:
+    void messageLogged(const QOpenGLDebugMessage &debugMessage);
+
+private:
+    QOpenGLDebugLogger(const QOpenGLDebugLogger &);
+};
+
+%End
+%End
diff --git a/sip/QtGui/qopenglframebufferobject.sip b/sip/QtGui/qopenglframebufferobject.sip
new file mode 100644
index 0000000..a762d32
--- /dev/null
+++ b/sip/QtGui/qopenglframebufferobject.sip
@@ -0,0 +1,108 @@
+// qopenglframebufferobject.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_OpenGL)
+
+class QOpenGLFramebufferObject
+{
+%TypeHeaderCode
+#include <qopenglframebufferobject.h>
+%End
+
+%TypeCode
+// The defaults are different for desktop OpenGL and OpenGL/ES so pretend the
+// latter is the former.
+#if defined(QT_OPENGL_ES)
+#undef  GL_RGBA8
+#define GL_RGBA8        GL_RGBA
+#endif
+%End
+
+public:
+    enum Attachment
+    {
+        NoAttachment,
+        CombinedDepthStencil,
+        Depth,
+    };
+
+    QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D);
+    QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D);
+    QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internal_format = GL_RGBA8);
+    QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internal_format = GL_RGBA8);
+    QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format);
+    QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format);
+    virtual ~QOpenGLFramebufferObject();
+    QOpenGLFramebufferObjectFormat format() const;
+    bool isValid() const;
+    bool isBound() const;
+    bool bind();
+    bool release();
+    int width() const;
+    int height() const;
+    GLuint texture() const;
+    QSize size() const;
+    QImage toImage() const;
+    QOpenGLFramebufferObject::Attachment attachment() const;
+    void setAttachment(QOpenGLFramebufferObject::Attachment attachment);
+    GLuint handle() const;
+    static bool bindDefault();
+    static bool hasOpenGLFramebufferObjects();
+    static bool hasOpenGLFramebufferBlit();
+    static void blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST);
+    static void blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST);
+%If (Qt_5_3_0 -)
+    GLuint takeTexture();
+%End
+
+private:
+    QOpenGLFramebufferObject(const QOpenGLFramebufferObject &);
+};
+
+%End
+%If (PyQt_OpenGL)
+
+class QOpenGLFramebufferObjectFormat
+{
+%TypeHeaderCode
+#include <qopenglframebufferobject.h>
+%End
+
+public:
+    QOpenGLFramebufferObjectFormat();
+    QOpenGLFramebufferObjectFormat(const QOpenGLFramebufferObjectFormat &other);
+    ~QOpenGLFramebufferObjectFormat();
+    void setSamples(int samples);
+    int samples() const;
+    void setMipmap(bool enabled);
+    bool mipmap() const;
+    void setAttachment(QOpenGLFramebufferObject::Attachment attachment);
+    QOpenGLFramebufferObject::Attachment attachment() const;
+    void setTextureTarget(GLenum target);
+    GLenum textureTarget() const;
+    void setInternalTextureFormat(GLenum internalTextureFormat);
+    GLenum internalTextureFormat() const;
+    bool operator==(const QOpenGLFramebufferObjectFormat &other) const;
+    bool operator!=(const QOpenGLFramebufferObjectFormat &other) const;
+};
+
+%End
diff --git a/sip/QtGui/qopenglpaintdevice.sip b/sip/QtGui/qopenglpaintdevice.sip
new file mode 100644
index 0000000..5a70c2f
--- /dev/null
+++ b/sip/QtGui/qopenglpaintdevice.sip
@@ -0,0 +1,60 @@
+// qopenglpaintdevice.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_OpenGL)
+
+class QOpenGLPaintDevice : QPaintDevice
+{
+%TypeHeaderCode
+#include <qopenglpaintdevice.h>
+%End
+
+public:
+    QOpenGLPaintDevice();
+    explicit QOpenGLPaintDevice(const QSize &size);
+    QOpenGLPaintDevice(int width, int height);
+    virtual ~QOpenGLPaintDevice();
+    virtual QPaintEngine *paintEngine() const;
+    QOpenGLContext *context() const;
+    QSize size() const;
+    void setSize(const QSize &size);
+    qreal dotsPerMeterX() const;
+    qreal dotsPerMeterY() const;
+    void setDotsPerMeterX(qreal);
+    void setDotsPerMeterY(qreal);
+    void setPaintFlipped(bool flipped);
+    bool paintFlipped() const;
+    virtual void ensureActiveTarget();
+%If (Qt_5_1_0 -)
+    void setDevicePixelRatio(qreal devicePixelRatio);
+%End
+
+protected:
+    virtual int metric(QPaintDevice::PaintDeviceMetric metric) const;
+
+private:
+%If (- Qt_5_1_0)
+    QOpenGLPaintDevice(const QOpenGLPaintDevice &);
+%End
+};
+
+%End
diff --git a/sip/QtGui/qopenglpixeltransferoptions.sip b/sip/QtGui/qopenglpixeltransferoptions.sip
new file mode 100644
index 0000000..9d12ae4
--- /dev/null
+++ b/sip/QtGui/qopenglpixeltransferoptions.sip
@@ -0,0 +1,56 @@
+// qopenglpixeltransferoptions.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+%If (PyQt_OpenGL)
+
+class QOpenGLPixelTransferOptions
+{
+%TypeHeaderCode
+#include <qopenglpixeltransferoptions.h>
+%End
+
+public:
+    QOpenGLPixelTransferOptions();
+    QOpenGLPixelTransferOptions(const QOpenGLPixelTransferOptions &);
+    ~QOpenGLPixelTransferOptions();
+    void swap(QOpenGLPixelTransferOptions &other);
+    void setAlignment(int alignment);
+    int alignment() const;
+    void setSkipImages(int skipImages);
+    int skipImages() const;
+    void setSkipRows(int skipRows);
+    int skipRows() const;
+    void setSkipPixels(int skipPixels);
+    int skipPixels() const;
+    void setImageHeight(int imageHeight);
+    int imageHeight() const;
+    void setRowLength(int rowLength);
+    int rowLength() const;
+    void setLeastSignificantByteFirst(bool lsbFirst);
+    bool isLeastSignificantBitFirst() const;
+    void setSwapBytesEnabled(bool swapBytes);
+    bool isSwapBytesEnabled() const;
+};
+
+%End
+%End
diff --git a/sip/QtGui/qopenglshaderprogram.sip b/sip/QtGui/qopenglshaderprogram.sip
new file mode 100644
index 0000000..64d87d7
--- /dev/null
+++ b/sip/QtGui/qopenglshaderprogram.sip
@@ -0,0 +1,343 @@
+// qopenglshaderprogram.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qopenglshaderprogram.h>
+%End
+
+%If (PyQt_OpenGL)
+
+class QOpenGLShader : QObject
+{
+%TypeHeaderCode
+#include <qopenglshaderprogram.h>
+%End
+
+public:
+    enum ShaderTypeBit
+    {
+        Vertex,
+        Fragment,
+%If (Qt_5_1_0 -)
+        Geometry,
+%End
+%If (Qt_5_1_0 -)
+        TessellationControl,
+%End
+%If (Qt_5_1_0 -)
+        TessellationEvaluation,
+%End
+%If (Qt_5_1_0 -)
+        Compute,
+%End
+    };
+
+    typedef QFlags<QOpenGLShader::ShaderTypeBit> ShaderType;
+    QOpenGLShader(QFlags<QOpenGLShader::ShaderTypeBit> type, QObject *parent /TransferThis/ = 0);
+    virtual ~QOpenGLShader();
+    QFlags<QOpenGLShader::ShaderTypeBit> shaderType() const;
+    bool compileSourceCode(const QByteArray &source);
+    bool compileSourceCode(const QString &source);
+    bool compileSourceFile(const QString &fileName);
+    QByteArray sourceCode() const;
+    bool isCompiled() const;
+    QString log() const;
+    GLuint shaderId() const;
+    static bool hasOpenGLShaders(QFlags<QOpenGLShader::ShaderTypeBit> type, QOpenGLContext *context = 0);
+
+private:
+    QOpenGLShader(const QOpenGLShader &);
+};
+
+%End
+%If (PyQt_OpenGL)
+QFlags<QOpenGLShader::ShaderTypeBit> operator|(QOpenGLShader::ShaderTypeBit f1, QFlags<QOpenGLShader::ShaderTypeBit> f2);
+%End
+%If (PyQt_OpenGL)
+
+class QOpenGLShaderProgram : QObject
+{
+%TypeHeaderCode
+#include <qopenglshaderprogram.h>
+%End
+
+public:
+    explicit QOpenGLShaderProgram(QObject *parent /TransferThis/ = 0);
+    virtual ~QOpenGLShaderProgram();
+    bool addShader(QOpenGLShader *shader);
+    void removeShader(QOpenGLShader *shader);
+    QList<QOpenGLShader*> shaders() const;
+    bool addShaderFromSourceCode(QFlags<QOpenGLShader::ShaderTypeBit> type, const QByteArray &source);
+    bool addShaderFromSourceCode(QFlags<QOpenGLShader::ShaderTypeBit> type, const QString &source);
+    bool addShaderFromSourceFile(QFlags<QOpenGLShader::ShaderTypeBit> type, const QString &fileName);
+    void removeAllShaders();
+    virtual bool link();
+    bool isLinked() const;
+    QString log() const;
+    bool bind();
+    void release();
+    GLuint programId() const;
+    void bindAttributeLocation(const QByteArray &name, int location);
+    void bindAttributeLocation(const QString &name, int location);
+    int attributeLocation(const QByteArray &name) const;
+    int attributeLocation(const QString &name) const;
+    void setAttributeValue(int location, GLfloat value);
+    void setAttributeValue(int location, GLfloat x, GLfloat y);
+    void setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z);
+    void setAttributeValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+    void setAttributeValue(int location, const QVector2D &value);
+    void setAttributeValue(int location, const QVector3D &value);
+    void setAttributeValue(int location, const QVector4D &value);
+    void setAttributeValue(int location, const QColor &value);
+    void setAttributeValue(const char *name, GLfloat value);
+    void setAttributeValue(const char *name, GLfloat x, GLfloat y);
+    void setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z);
+    void setAttributeValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+    void setAttributeValue(const char *name, const QVector2D &value);
+    void setAttributeValue(const char *name, const QVector3D &value);
+    void setAttributeValue(const char *name, const QVector4D &value);
+    void setAttributeValue(const char *name, const QColor &value);
+    void setAttributeArray(int location, SIP_PYOBJECT values /DocType="sequence"/);
+%MethodCode
+        const GLfloat *values;
+        int tsize;
+        
+        values = qpyopengl_attribute_array(a1, sipSelf, SIPLong_FromLong(a0), &tsize,
+                &sipError);
+        
+        if (values)
+            sipCpp->setAttributeArray(a0, values, tsize);
+%End
+
+    void setAttributeArray(const char *name, SIP_PYOBJECT values /DocType="sequence"/);
+%MethodCode
+        const GLfloat *values;
+        int tsize;
+        
+        values = qpyopengl_attribute_array(a1, sipSelf, SIPBytes_FromString(a0),
+                &tsize, &sipError);
+        
+        if (values)
+            sipCpp->setAttributeArray(a0, values, tsize);
+%End
+
+    void setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride = 0);
+    void setAttributeBuffer(const char *name, GLenum type, int offset, int tupleSize, int stride = 0);
+    void enableAttributeArray(int location);
+    void enableAttributeArray(const char *name);
+    void disableAttributeArray(int location);
+    void disableAttributeArray(const char *name);
+    int uniformLocation(const QByteArray &name) const;
+    int uniformLocation(const QString &name) const;
+    void setUniformValue(int location, GLint value /Constrained/);
+    void setUniformValue(int location, GLfloat value /Constrained/);
+    void setUniformValue(int location, GLfloat x, GLfloat y);
+    void setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z);
+    void setUniformValue(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+    void setUniformValue(int location, const QVector2D &value);
+    void setUniformValue(int location, const QVector3D &value);
+    void setUniformValue(int location, const QVector4D &value);
+    void setUniformValue(int location, const QColor &color);
+    void setUniformValue(int location, const QPoint &point);
+    void setUniformValue(int location, const QPointF &point);
+    void setUniformValue(int location, const QSize &size);
+    void setUniformValue(int location, const QSizeF &size);
+    void setUniformValue(int location, const QMatrix2x2 &value);
+    void setUniformValue(int location, const QMatrix2x3 &value);
+    void setUniformValue(int location, const QMatrix2x4 &value);
+    void setUniformValue(int location, const QMatrix3x2 &value);
+    void setUniformValue(int location, const QMatrix3x3 &value);
+    void setUniformValue(int location, const QMatrix3x4 &value);
+    void setUniformValue(int location, const QMatrix4x2 &value);
+    void setUniformValue(int location, const QMatrix4x3 &value);
+    void setUniformValue(int location, const QMatrix4x4 &value);
+    void setUniformValue(int location, const QTransform &value);
+    void setUniformValue(const char *name, GLint value /Constrained/);
+    void setUniformValue(const char *name, GLfloat value /Constrained/);
+    void setUniformValue(const char *name, GLfloat x, GLfloat y);
+    void setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z);
+    void setUniformValue(const char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+    void setUniformValue(const char *name, const QVector2D &value);
+    void setUniformValue(const char *name, const QVector3D &value);
+    void setUniformValue(const char *name, const QVector4D &value);
+    void setUniformValue(const char *name, const QColor &color);
+    void setUniformValue(const char *name, const QPoint &point);
+    void setUniformValue(const char *name, const QPointF &point);
+    void setUniformValue(const char *name, const QSize &size);
+    void setUniformValue(const char *name, const QSizeF &size);
+    void setUniformValue(const char *name, const QMatrix2x2 &value);
+    void setUniformValue(const char *name, const QMatrix2x3 &value);
+    void setUniformValue(const char *name, const QMatrix2x4 &value);
+    void setUniformValue(const char *name, const QMatrix3x2 &value);
+    void setUniformValue(const char *name, const QMatrix3x3 &value);
+    void setUniformValue(const char *name, const QMatrix3x4 &value);
+    void setUniformValue(const char *name, const QMatrix4x2 &value);
+    void setUniformValue(const char *name, const QMatrix4x3 &value);
+    void setUniformValue(const char *name, const QMatrix4x4 &value);
+    void setUniformValue(const char *name, const QTransform &value);
+    void setUniformValueArray(int location, SIP_PYOBJECT values /DocType="sequence"/);
+%MethodCode
+        const void *values;
+        const sipTypeDef *array_type;
+        int array_len, tsize;
+        
+        values = qpyopengl_uniform_value_array(a1, sipSelf, SIPLong_FromLong(a0),
+                    &array_type, &array_len, &tsize, &sipError);
+        
+        if (values)
+        {
+            if (array_type == sipType_QVector2D)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QVector2D *>(values), array_len);
+            else if (array_type == sipType_QVector3D)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QVector3D *>(values), array_len);
+            else if (array_type == sipType_QVector4D)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QVector4D *>(values), array_len);
+            else if (array_type == sipType_QMatrix2x2)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix2x2 *>(values), array_len);
+            else if (array_type == sipType_QMatrix2x3)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix2x3 *>(values), array_len);
+            else if (array_type == sipType_QMatrix2x4)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix2x4 *>(values), array_len);
+            else if (array_type == sipType_QMatrix3x2)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix3x2 *>(values), array_len);
+            else if (array_type == sipType_QMatrix3x3)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix3x3 *>(values), array_len);
+            else if (array_type == sipType_QMatrix3x4)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix3x4 *>(values), array_len);
+            else if (array_type == sipType_QMatrix4x2)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix4x2 *>(values), array_len);
+            else if (array_type == sipType_QMatrix4x3)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix4x3 *>(values), array_len);
+            else if (array_type == sipType_QMatrix4x4)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix4x4 *>(values), array_len);
+            else
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const GLfloat *>(values), array_len, tsize);
+        }
+%End
+
+    void setUniformValueArray(const char *name, SIP_PYOBJECT values /DocType="sequence"/);
+%MethodCode
+        const void *values;
+        const sipTypeDef *array_type;
+        int array_len, tsize;
+        
+        values = qpyopengl_uniform_value_array(a1, sipSelf, SIPBytes_FromString(a0),
+                    &array_type, &array_len, &tsize, &sipError);
+        
+        if (values)
+        {
+            if (array_type == sipType_QVector2D)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QVector2D *>(values), array_len);
+            else if (array_type == sipType_QVector3D)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QVector3D *>(values), array_len);
+            else if (array_type == sipType_QVector4D)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QVector4D *>(values), array_len);
+            else if (array_type == sipType_QMatrix2x2)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix2x2 *>(values), array_len);
+            else if (array_type == sipType_QMatrix2x3)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix2x3 *>(values), array_len);
+            else if (array_type == sipType_QMatrix2x4)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix2x4 *>(values), array_len);
+            else if (array_type == sipType_QMatrix3x2)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix3x2 *>(values), array_len);
+            else if (array_type == sipType_QMatrix3x3)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix3x3 *>(values), array_len);
+            else if (array_type == sipType_QMatrix3x4)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix3x4 *>(values), array_len);
+            else if (array_type == sipType_QMatrix4x2)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix4x2 *>(values), array_len);
+            else if (array_type == sipType_QMatrix4x3)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix4x3 *>(values), array_len);
+            else if (array_type == sipType_QMatrix4x4)
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const QMatrix4x4 *>(values), array_len);
+            else
+                sipCpp->setUniformValueArray(a0,
+                        reinterpret_cast<const GLfloat *>(values), array_len, tsize);
+        }
+%End
+
+    static bool hasOpenGLShaderPrograms(QOpenGLContext *context = 0);
+%If (Qt_5_1_0 -)
+    int maxGeometryOutputVertices() const;
+%End
+%If (Qt_5_1_0 -)
+    void setPatchVertexCount(int count);
+%End
+%If (Qt_5_1_0 -)
+    int patchVertexCount() const;
+%End
+%If (Qt_5_1_0 -)
+    void setDefaultOuterTessellationLevels(const QVector<float> &levels);
+%End
+%If (Qt_5_1_0 -)
+    QVector<float> defaultOuterTessellationLevels() const;
+%End
+%If (Qt_5_1_0 -)
+    void setDefaultInnerTessellationLevels(const QVector<float> &levels);
+%End
+%If (Qt_5_1_0 -)
+    QVector<float> defaultInnerTessellationLevels() const;
+%End
+%If (Qt_5_3_0 -)
+    bool create();
+%End
+
+private:
+    QOpenGLShaderProgram(const QOpenGLShaderProgram &);
+};
+
+%End
+
+%ModuleHeaderCode
+#include "qpyopengl_api.h"
+%End
+
+%InitialisationCode
+#if defined(SIP_FEATURE_PyQt_OpenGL)
+qpyopengl_init();
+#endif
+%End
diff --git a/sip/QtGui/qopengltexture.sip b/sip/QtGui/qopengltexture.sip
new file mode 100644
index 0000000..12f6dc1
--- /dev/null
+++ b/sip/QtGui/qopengltexture.sip
@@ -0,0 +1,434 @@
+// qopengltexture.sip generated by MetaSIP on Fri Sep 12 22:59:00 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+%ModuleCode
+#include <qopengltexture.h>
+%End
+%End
+
+%If (Qt_5_2_0 -)
+%If (PyQt_OpenGL)
+
+class QOpenGLTexture
+{
+%TypeHeaderCode
+#include <qopengltexture.h>
+%End
+
+public:
+    enum Target
+    {
+        Target1D,
+        Target1DArray,
+        Target2D,
+        Target2DArray,
+        Target3D,
+        TargetCubeMap,
+        TargetCubeMapArray,
+        Target2DMultisample,
+        Target2DMultisampleArray,
+        TargetRectangle,
+        TargetBuffer,
+    };
+
+    enum BindingTarget
+    {
+        BindingTarget1D,
+        BindingTarget1DArray,
+        BindingTarget2D,
+        BindingTarget2DArray,
+        BindingTarget3D,
+        BindingTargetCubeMap,
+        BindingTargetCubeMapArray,
+        BindingTarget2DMultisample,
+        BindingTarget2DMultisampleArray,
+        BindingTargetRectangle,
+        BindingTargetBuffer,
+    };
+
+    enum MipMapGeneration
+    {
+        GenerateMipMaps,
+        DontGenerateMipMaps,
+    };
+
+    enum TextureUnitReset
+    {
+        ResetTextureUnit,
+        DontResetTextureUnit,
+    };
+
+    explicit QOpenGLTexture(QOpenGLTexture::Target target);
+    QOpenGLTexture(const QImage &image, QOpenGLTexture::MipMapGeneration genMipMaps = QOpenGLTexture::GenerateMipMaps);
+    ~QOpenGLTexture();
+    bool create();
+    void destroy();
+    bool isCreated() const;
+    GLuint textureId() const;
+    void bind();
+    void bind(uint unit, QOpenGLTexture::TextureUnitReset reset = QOpenGLTexture::DontResetTextureUnit);
+    void release();
+    void release(uint unit, QOpenGLTexture::TextureUnitReset reset = QOpenGLTexture::DontResetTextureUnit);
+    bool isBound() const;
+    bool isBound(uint unit);
+    static GLuint boundTextureId(QOpenGLTexture::BindingTarget target);
+    static GLuint boundTextureId(uint unit, QOpenGLTexture::BindingTarget target);
+
+    enum TextureFormat
+    {
+        NoFormat,
+        R8_UNorm,
+        RG8_UNorm,
+        RGB8_UNorm,
+        RGBA8_UNorm,
+        R16_UNorm,
+        RG16_UNorm,
+        RGB16_UNorm,
+        RGBA16_UNorm,
+        R8_SNorm,
+        RG8_SNorm,
+        RGB8_SNorm,
+        RGBA8_SNorm,
+        R16_SNorm,
+        RG16_SNorm,
+        RGB16_SNorm,
+        RGBA16_SNorm,
+        R8U,
+        RG8U,
+        RGB8U,
+        RGBA8U,
+        R16U,
+        RG16U,
+        RGB16U,
+        RGBA16U,
+        R32U,
+        RG32U,
+        RGB32U,
+        RGBA32U,
+        R8I,
+        RG8I,
+        RGB8I,
+        RGBA8I,
+        R16I,
+        RG16I,
+        RGB16I,
+        RGBA16I,
+        R32I,
+        RG32I,
+        RGB32I,
+        RGBA32I,
+        R16F,
+        RG16F,
+        RGB16F,
+        RGBA16F,
+        R32F,
+        RG32F,
+        RGB32F,
+        RGBA32F,
+        RGB9E5,
+        RG11B10F,
+        RG3B2,
+        R5G6B5,
+        RGB5A1,
+        RGBA4,
+        RGB10A2,
+        D16,
+        D24,
+        D24S8,
+        D32,
+        D32F,
+        D32FS8X24,
+        RGB_DXT1,
+        RGBA_DXT1,
+        RGBA_DXT3,
+        RGBA_DXT5,
+        R_ATI1N_UNorm,
+        R_ATI1N_SNorm,
+        RG_ATI2N_UNorm,
+        RG_ATI2N_SNorm,
+        RGB_BP_UNSIGNED_FLOAT,
+        RGB_BP_SIGNED_FLOAT,
+        RGB_BP_UNorm,
+        SRGB8,
+        SRGB8_Alpha8,
+        SRGB_DXT1,
+        SRGB_Alpha_DXT1,
+        SRGB_Alpha_DXT3,
+        SRGB_Alpha_DXT5,
+        SRGB_BP_UNorm,
+        DepthFormat,
+        AlphaFormat,
+        RGBFormat,
+        RGBAFormat,
+        LuminanceFormat,
+        LuminanceAlphaFormat,
+    };
+
+    void setFormat(QOpenGLTexture::TextureFormat format);
+    QOpenGLTexture::TextureFormat format() const;
+    void setSize(int width, int height = 1, int depth = 1);
+    int width() const;
+    int height() const;
+    int depth() const;
+    void setMipLevels(int levels);
+    int mipLevels() const;
+    int maximumMipLevels() const;
+    void setLayers(int layers);
+    int layers() const;
+    int faces() const;
+    void allocateStorage();
+    bool isStorageAllocated() const;
+    QOpenGLTexture *createTextureView(QOpenGLTexture::Target target, QOpenGLTexture::TextureFormat viewFormat, int minimumMipmapLevel, int maximumMipmapLevel, int minimumLayer, int maximumLayer) const /Factory/;
+    bool isTextureView() const;
+
+    enum CubeMapFace
+    {
+        CubeMapPositiveX,
+        CubeMapNegativeX,
+        CubeMapPositiveY,
+        CubeMapNegativeY,
+        CubeMapPositiveZ,
+        CubeMapNegativeZ,
+    };
+
+    enum PixelFormat
+    {
+        NoSourceFormat,
+        Red,
+        RG,
+        RGB,
+        BGR,
+        RGBA,
+        BGRA,
+        Red_Integer,
+        RG_Integer,
+        RGB_Integer,
+        BGR_Integer,
+        RGBA_Integer,
+        BGRA_Integer,
+        Depth,
+        DepthStencil,
+        Alpha,
+        Luminance,
+        LuminanceAlpha,
+    };
+
+    enum PixelType
+    {
+        NoPixelType,
+        Int8,
+        UInt8,
+        Int16,
+        UInt16,
+        Int32,
+        UInt32,
+        Float16,
+        Float16OES,
+        Float32,
+        UInt32_RGB9_E5,
+        UInt32_RG11B10F,
+        UInt8_RG3B2,
+        UInt8_RG3B2_Rev,
+        UInt16_RGB5A1,
+        UInt16_RGB5A1_Rev,
+        UInt16_R5G6B5,
+        UInt16_R5G6B5_Rev,
+        UInt16_RGBA4,
+        UInt16_RGBA4_Rev,
+        UInt32_RGB10A2,
+        UInt32_RGB10A2_Rev,
+    };
+
+%If (- Qt_5_3_0)
+    void setData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (- Qt_5_3_0)
+    void setData(int mipLevel, int layer, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (- Qt_5_3_0)
+    void setData(int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (- Qt_5_3_0)
+    void setData(QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (- Qt_5_3_0)
+    void setCompressedData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, int dataSize, void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (- Qt_5_3_0)
+    void setCompressedData(int mipLevel, int layer, int dataSize, void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (- Qt_5_3_0)
+    void setCompressedData(int mipLevel, int dataSize, void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (- Qt_5_3_0)
+    void setCompressedData(int dataSize, void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+    void setData(const QImage &image, QOpenGLTexture::MipMapGeneration genMipMaps = QOpenGLTexture::GenerateMipMaps);
+
+    enum Feature
+    {
+        ImmutableStorage,
+        ImmutableMultisampleStorage,
+        TextureRectangle,
+        TextureArrays,
+        Texture3D,
+        TextureMultisample,
+        TextureBuffer,
+        TextureCubeMapArrays,
+        Swizzle,
+        StencilTexturing,
+        AnisotropicFiltering,
+        NPOTTextures,
+        NPOTTextureRepeat,
+%If (Qt_5_3_0 -)
+        Texture1D,
+%End
+    };
+
+    typedef QFlags<QOpenGLTexture::Feature> Features;
+    static bool hasFeature(QOpenGLTexture::Feature feature);
+    void setMipBaseLevel(int baseLevel);
+    int mipBaseLevel() const;
+    void setMipMaxLevel(int maxLevel);
+    int mipMaxLevel() const;
+    void setMipLevelRange(int baseLevel, int maxLevel);
+    QPair<int, int> mipLevelRange() const;
+    void setAutoMipMapGenerationEnabled(bool enabled);
+    bool isAutoMipMapGenerationEnabled() const;
+    void generateMipMaps();
+    void generateMipMaps(int baseLevel, bool resetBaseLevel = true);
+
+    enum SwizzleComponent
+    {
+        SwizzleRed,
+        SwizzleGreen,
+        SwizzleBlue,
+        SwizzleAlpha,
+    };
+
+    enum SwizzleValue
+    {
+        RedValue,
+        GreenValue,
+        BlueValue,
+        AlphaValue,
+        ZeroValue,
+        OneValue,
+    };
+
+    void setSwizzleMask(QOpenGLTexture::SwizzleComponent component, QOpenGLTexture::SwizzleValue value);
+    void setSwizzleMask(QOpenGLTexture::SwizzleValue r, QOpenGLTexture::SwizzleValue g, QOpenGLTexture::SwizzleValue b, QOpenGLTexture::SwizzleValue a);
+    QOpenGLTexture::SwizzleValue swizzleMask(QOpenGLTexture::SwizzleComponent component) const;
+
+    enum DepthStencilMode
+    {
+        DepthMode,
+        StencilMode,
+    };
+
+    void setDepthStencilMode(QOpenGLTexture::DepthStencilMode mode);
+    QOpenGLTexture::DepthStencilMode depthStencilMode() const;
+
+    enum Filter
+    {
+        Nearest,
+        Linear,
+        NearestMipMapNearest,
+        NearestMipMapLinear,
+        LinearMipMapNearest,
+        LinearMipMapLinear,
+    };
+
+    void setMinificationFilter(QOpenGLTexture::Filter filter);
+    QOpenGLTexture::Filter minificationFilter() const;
+    void setMagnificationFilter(QOpenGLTexture::Filter filter);
+    QOpenGLTexture::Filter magnificationFilter() const;
+    void setMinMagFilters(QOpenGLTexture::Filter minificationFilter, QOpenGLTexture::Filter magnificationFilter);
+    QPair<QOpenGLTexture::Filter, QOpenGLTexture::Filter> minMagFilters() const;
+    void setMaximumAnisotropy(float anisotropy);
+    float maximumAnisotropy() const;
+
+    enum WrapMode
+    {
+        Repeat,
+        MirroredRepeat,
+        ClampToEdge,
+        ClampToBorder,
+    };
+
+    enum CoordinateDirection
+    {
+        DirectionS,
+        DirectionT,
+        DirectionR,
+    };
+
+    void setWrapMode(QOpenGLTexture::WrapMode mode);
+    void setWrapMode(QOpenGLTexture::CoordinateDirection direction, QOpenGLTexture::WrapMode mode);
+    QOpenGLTexture::WrapMode wrapMode(QOpenGLTexture::CoordinateDirection direction) const;
+    void setBorderColor(QColor color);
+    QColor borderColor() const;
+    void setMinimumLevelOfDetail(float value);
+    float minimumLevelOfDetail() const;
+    void setMaximumLevelOfDetail(float value);
+    float maximumLevelOfDetail() const;
+    void setLevelOfDetailRange(float min, float max);
+    QPair<float, float> levelOfDetailRange() const;
+    void setLevelofDetailBias(float bias);
+    float levelofDetailBias() const;
+%If (Qt_5_3_0 -)
+    void setData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (Qt_5_3_0 -)
+    void setData(int mipLevel, int layer, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (Qt_5_3_0 -)
+    void setData(int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (Qt_5_3_0 -)
+    void setData(QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (Qt_5_3_0 -)
+    void setCompressedData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (Qt_5_3_0 -)
+    void setCompressedData(int mipLevel, int layer, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (Qt_5_3_0 -)
+    void setCompressedData(int mipLevel, int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+%If (Qt_5_3_0 -)
+    void setCompressedData(int dataSize, const void *data, const QOpenGLPixelTransferOptions * const options = 0);
+%End
+
+private:
+    QOpenGLTexture(const QOpenGLTexture &);
+};
+
+%End
+%End
+%If (Qt_5_2_0 -)
+%If (PyQt_OpenGL)
+QFlags<QOpenGLTexture::Feature> operator|(QOpenGLTexture::Feature f1, QFlags<QOpenGLTexture::Feature> f2);
+%End
+%End
diff --git a/sip/QtGui/qopengltimerquery.sip b/sip/QtGui/qopengltimerquery.sip
new file mode 100644
index 0000000..c2803a9
--- /dev/null
+++ b/sip/QtGui/qopengltimerquery.sip
@@ -0,0 +1,81 @@
+// qopengltimerquery.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+%If (PyQt_Desktop_OpenGL)
+
+class QOpenGLTimerQuery : QObject
+{
+%TypeHeaderCode
+#include <qopengltimerquery.h>
+%End
+
+public:
+    explicit QOpenGLTimerQuery(QObject *parent /TransferThis/ = 0);
+    virtual ~QOpenGLTimerQuery();
+    bool create();
+    void destroy();
+    bool isCreated() const;
+    GLuint objectId() const;
+    void begin();
+    void end();
+    GLuint64 waitForTimestamp() const /ReleaseGIL/;
+    void recordTimestamp();
+    bool isResultAvailable() const;
+    GLuint64 waitForResult() const /ReleaseGIL/;
+
+private:
+    QOpenGLTimerQuery(const QOpenGLTimerQuery &);
+};
+
+%End
+%End
+%If (Qt_5_1_0 -)
+%If (PyQt_Desktop_OpenGL)
+
+class QOpenGLTimeMonitor : QObject
+{
+%TypeHeaderCode
+#include <qopengltimerquery.h>
+%End
+
+public:
+    explicit QOpenGLTimeMonitor(QObject *parent /TransferThis/ = 0);
+    virtual ~QOpenGLTimeMonitor();
+    void setSampleCount(int sampleCount);
+    int sampleCount() const;
+    bool create();
+    void destroy();
+    bool isCreated() const;
+    QVector<GLuint> objectIds() const;
+    int recordSample();
+    bool isResultAvailable() const;
+    QVector<GLuint64> waitForSamples() const /ReleaseGIL/;
+    QVector<GLuint64> waitForIntervals() const /ReleaseGIL/;
+    void reset();
+
+private:
+    QOpenGLTimeMonitor(const QOpenGLTimeMonitor &);
+};
+
+%End
+%End
diff --git a/sip/QtGui/qopenglversionfunctions.sip b/sip/QtGui/qopenglversionfunctions.sip
new file mode 100644
index 0000000..9ce3440
--- /dev/null
+++ b/sip/QtGui/qopenglversionfunctions.sip
@@ -0,0 +1,36 @@
+// qopenglversionfunctions.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+%If (PyQt_OpenGL)
+
+class QAbstractOpenGLFunctions /NoDefaultCtors,Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qopenglversionfunctions.h>
+%End
+
+    QAbstractOpenGLFunctions(const QAbstractOpenGLFunctions &);
+};
+
+%End
+%End
diff --git a/sip/QtGui/qopenglvertexarrayobject.sip b/sip/QtGui/qopenglvertexarrayobject.sip
new file mode 100644
index 0000000..97fa482
--- /dev/null
+++ b/sip/QtGui/qopenglvertexarrayobject.sip
@@ -0,0 +1,74 @@
+// qopenglvertexarrayobject.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+%If (PyQt_OpenGL)
+
+class QOpenGLVertexArrayObject : QObject
+{
+%TypeHeaderCode
+#include <qopenglvertexarrayobject.h>
+%End
+
+public:
+    explicit QOpenGLVertexArrayObject(QObject *parent /TransferThis/ = 0);
+    virtual ~QOpenGLVertexArrayObject();
+    bool create();
+    void destroy();
+    bool isCreated() const;
+    GLuint objectId() const;
+    void bind();
+    void release();
+
+    class Binder
+    {
+%TypeHeaderCode
+#include <qopenglvertexarrayobject.h>
+%End
+
+    public:
+        Binder(QOpenGLVertexArrayObject *v);
+        ~Binder();
+        void release();
+        void rebind();
+        SIP_PYOBJECT __enter__();
+%MethodCode
+            // Just return a reference to self.
+            sipRes = sipSelf;
+            Py_INCREF(sipRes);
+%End
+
+        void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback);
+%MethodCode
+            sipCpp->release();
+%End
+
+    private:
+        Binder(const QOpenGLVertexArrayObject::Binder &);
+    };
+
+private:
+    QOpenGLVertexArrayObject(const QOpenGLVertexArrayObject &);
+};
+
+%End
+%End
diff --git a/sip/QtGui/qpagedpaintdevice.sip b/sip/QtGui/qpagedpaintdevice.sip
new file mode 100644
index 0000000..f9c38d2
--- /dev/null
+++ b/sip/QtGui/qpagedpaintdevice.sip
@@ -0,0 +1,391 @@
+// qpagedpaintdevice.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPagedPaintDevice : QPaintDevice
+{
+%TypeHeaderCode
+#include <qpagedpaintdevice.h>
+%End
+
+public:
+    QPagedPaintDevice();
+    virtual ~QPagedPaintDevice();
+    virtual bool newPage() = 0;
+
+    enum PageSize
+    {
+        A4,
+        B5,
+        Letter,
+        Legal,
+        Executive,
+        A0,
+        A1,
+        A2,
+        A3,
+        A5,
+        A6,
+        A7,
+        A8,
+        A9,
+        B0,
+        B1,
+        B10,
+        B2,
+        B3,
+        B4,
+        B6,
+        B7,
+        B8,
+        B9,
+        C5E,
+        Comm10E,
+        DLE,
+        Folio,
+        Ledger,
+        Tabloid,
+        Custom,
+%If (Qt_5_3_0 -)
+        A10,
+%End
+%If (Qt_5_3_0 -)
+        A3Extra,
+%End
+%If (Qt_5_3_0 -)
+        A4Extra,
+%End
+%If (Qt_5_3_0 -)
+        A4Plus,
+%End
+%If (Qt_5_3_0 -)
+        A4Small,
+%End
+%If (Qt_5_3_0 -)
+        A5Extra,
+%End
+%If (Qt_5_3_0 -)
+        B5Extra,
+%End
+%If (Qt_5_3_0 -)
+        JisB0,
+%End
+%If (Qt_5_3_0 -)
+        JisB1,
+%End
+%If (Qt_5_3_0 -)
+        JisB2,
+%End
+%If (Qt_5_3_0 -)
+        JisB3,
+%End
+%If (Qt_5_3_0 -)
+        JisB4,
+%End
+%If (Qt_5_3_0 -)
+        JisB5,
+%End
+%If (Qt_5_3_0 -)
+        JisB6,
+%End
+%If (Qt_5_3_0 -)
+        JisB7,
+%End
+%If (Qt_5_3_0 -)
+        JisB8,
+%End
+%If (Qt_5_3_0 -)
+        JisB9,
+%End
+%If (Qt_5_3_0 -)
+        JisB10,
+%End
+%If (Qt_5_3_0 -)
+        AnsiC,
+%End
+%If (Qt_5_3_0 -)
+        AnsiD,
+%End
+%If (Qt_5_3_0 -)
+        AnsiE,
+%End
+%If (Qt_5_3_0 -)
+        LegalExtra,
+%End
+%If (Qt_5_3_0 -)
+        LetterExtra,
+%End
+%If (Qt_5_3_0 -)
+        LetterPlus,
+%End
+%If (Qt_5_3_0 -)
+        LetterSmall,
+%End
+%If (Qt_5_3_0 -)
+        TabloidExtra,
+%End
+%If (Qt_5_3_0 -)
+        ArchA,
+%End
+%If (Qt_5_3_0 -)
+        ArchB,
+%End
+%If (Qt_5_3_0 -)
+        ArchC,
+%End
+%If (Qt_5_3_0 -)
+        ArchD,
+%End
+%If (Qt_5_3_0 -)
+        ArchE,
+%End
+%If (Qt_5_3_0 -)
+        Imperial7x9,
+%End
+%If (Qt_5_3_0 -)
+        Imperial8x10,
+%End
+%If (Qt_5_3_0 -)
+        Imperial9x11,
+%End
+%If (Qt_5_3_0 -)
+        Imperial9x12,
+%End
+%If (Qt_5_3_0 -)
+        Imperial10x11,
+%End
+%If (Qt_5_3_0 -)
+        Imperial10x13,
+%End
+%If (Qt_5_3_0 -)
+        Imperial10x14,
+%End
+%If (Qt_5_3_0 -)
+        Imperial12x11,
+%End
+%If (Qt_5_3_0 -)
+        Imperial15x11,
+%End
+%If (Qt_5_3_0 -)
+        ExecutiveStandard,
+%End
+%If (Qt_5_3_0 -)
+        Note,
+%End
+%If (Qt_5_3_0 -)
+        Quarto,
+%End
+%If (Qt_5_3_0 -)
+        Statement,
+%End
+%If (Qt_5_3_0 -)
+        SuperA,
+%End
+%If (Qt_5_3_0 -)
+        SuperB,
+%End
+%If (Qt_5_3_0 -)
+        Postcard,
+%End
+%If (Qt_5_3_0 -)
+        DoublePostcard,
+%End
+%If (Qt_5_3_0 -)
+        Prc16K,
+%End
+%If (Qt_5_3_0 -)
+        Prc32K,
+%End
+%If (Qt_5_3_0 -)
+        Prc32KBig,
+%End
+%If (Qt_5_3_0 -)
+        FanFoldUS,
+%End
+%If (Qt_5_3_0 -)
+        FanFoldGerman,
+%End
+%If (Qt_5_3_0 -)
+        FanFoldGermanLegal,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeB4,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeB5,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeB6,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeC0,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeC1,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeC2,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeC3,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeC4,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeC6,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeC65,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeC7,
+%End
+%If (Qt_5_3_0 -)
+        Envelope9,
+%End
+%If (Qt_5_3_0 -)
+        Envelope11,
+%End
+%If (Qt_5_3_0 -)
+        Envelope12,
+%End
+%If (Qt_5_3_0 -)
+        Envelope14,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeMonarch,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePersonal,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeChou3,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeChou4,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeInvite,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeItalian,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeKaku2,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeKaku3,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePrc1,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePrc2,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePrc3,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePrc4,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePrc5,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePrc6,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePrc7,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePrc8,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePrc9,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopePrc10,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeYou4,
+%End
+%If (Qt_5_3_0 -)
+        NPaperSize,
+%End
+%If (Qt_5_3_0 -)
+        AnsiA,
+%End
+%If (Qt_5_3_0 -)
+        AnsiB,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeC5,
+%End
+%If (Qt_5_3_0 -)
+        EnvelopeDL,
+%End
+%If (Qt_5_3_0 -)
+        Envelope10,
+%End
+%If (Qt_5_3_0 -)
+        LastPageSize,
+%End
+    };
+
+    virtual void setPageSize(QPagedPaintDevice::PageSize size);
+    QPagedPaintDevice::PageSize pageSize() const;
+    virtual void setPageSizeMM(const QSizeF &size);
+    QSizeF pageSizeMM() const;
+
+    struct Margins
+    {
+%TypeHeaderCode
+#include <qpagedpaintdevice.h>
+%End
+
+        qreal left;
+        qreal right;
+        qreal top;
+        qreal bottom;
+    };
+
+    virtual void setMargins(const QPagedPaintDevice::Margins &margins);
+    QPagedPaintDevice::Margins margins() const;
+%If (Qt_5_3_0 -)
+    bool setPageLayout(const QPageLayout &pageLayout);
+%End
+%If (Qt_5_3_0 -)
+    bool setPageSize(const QPageSize &pageSize);
+%End
+%If (Qt_5_3_0 -)
+    bool setPageOrientation(QPageLayout::Orientation orientation);
+%End
+%If (Qt_5_3_0 -)
+    bool setPageMargins(const QMarginsF &margins);
+%End
+%If (Qt_5_3_0 -)
+    bool setPageMargins(const QMarginsF &margins, QPageLayout::Unit units);
+%End
+%If (Qt_5_3_0 -)
+    QPageLayout pageLayout() const;
+%End
+};
diff --git a/sip/QtGui/qpagelayout.sip b/sip/QtGui/qpagelayout.sip
new file mode 100644
index 0000000..8d80b8b
--- /dev/null
+++ b/sip/QtGui/qpagelayout.sip
@@ -0,0 +1,103 @@
+// qpagelayout.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+%ModuleCode
+#include <qpagelayout.h>
+%End
+%End
+
+%If (Qt_5_3_0 -)
+
+class QPageLayout
+{
+%TypeHeaderCode
+#include <qpagelayout.h>
+%End
+
+public:
+    enum Unit
+    {
+        Millimeter,
+        Point,
+        Inch,
+        Pica,
+        Didot,
+        Cicero,
+    };
+
+    enum Orientation
+    {
+        Portrait,
+        Landscape,
+    };
+
+    enum Mode
+    {
+        StandardMode,
+        FullPageMode,
+    };
+
+    QPageLayout();
+    QPageLayout(const QPageSize &pageSize, QPageLayout::Orientation orientation, const QMarginsF &margins, QPageLayout::Unit units = QPageLayout::Point, const QMarginsF &minMargins = QMarginsF(0.0, 0.0, 0.0, 0.0));
+    QPageLayout(const QPageLayout &other);
+    ~QPageLayout();
+    void swap(QPageLayout &other);
+    bool isEquivalentTo(const QPageLayout &other) const;
+    bool isValid() const;
+    void setMode(QPageLayout::Mode mode);
+    QPageLayout::Mode mode() const;
+    void setPageSize(const QPageSize &pageSize, const QMarginsF &minMargins = QMarginsF(0.0, 0.0, 0.0, 0.0));
+    QPageSize pageSize() const;
+    void setOrientation(QPageLayout::Orientation orientation);
+    QPageLayout::Orientation orientation() const;
+    void setUnits(QPageLayout::Unit units);
+    QPageLayout::Unit units() const;
+    bool setMargins(const QMarginsF &margins);
+    bool setLeftMargin(qreal leftMargin);
+    bool setRightMargin(qreal rightMargin);
+    bool setTopMargin(qreal topMargin);
+    bool setBottomMargin(qreal bottomMargin);
+    QMarginsF margins() const;
+    QMarginsF margins(QPageLayout::Unit units) const;
+    QMargins marginsPoints() const;
+    QMargins marginsPixels(int resolution) const;
+    void setMinimumMargins(const QMarginsF &minMargins);
+    QMarginsF minimumMargins() const;
+    QMarginsF maximumMargins() const;
+    QRectF fullRect() const;
+    QRectF fullRect(QPageLayout::Unit units) const;
+    QRect fullRectPoints() const;
+    QRect fullRectPixels(int resolution) const;
+    QRectF paintRect() const;
+    QRectF paintRect(QPageLayout::Unit units) const;
+    QRect paintRectPoints() const;
+    QRect paintRectPixels(int resolution) const;
+};
+
+%End
+%If (Qt_5_3_0 -)
+bool operator==(const QPageLayout &lhs, const QPageLayout &rhs);
+%End
+%If (Qt_5_3_0 -)
+bool operator!=(const QPageLayout &lhs, const QPageLayout &rhs);
+%End
diff --git a/sip/QtGui/qpagesize.sip b/sip/QtGui/qpagesize.sip
new file mode 100644
index 0000000..f0588fd
--- /dev/null
+++ b/sip/QtGui/qpagesize.sip
@@ -0,0 +1,226 @@
+// qpagesize.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+%ModuleCode
+#include <qpagesize.h>
+%End
+%End
+
+%If (Qt_5_3_0 -)
+
+class QPageSize
+{
+%TypeHeaderCode
+#include <qpagesize.h>
+%End
+
+public:
+    enum PageSizeId
+    {
+        A4,
+        B5,
+        Letter,
+        Legal,
+        Executive,
+        A0,
+        A1,
+        A2,
+        A3,
+        A5,
+        A6,
+        A7,
+        A8,
+        A9,
+        B0,
+        B1,
+        B10,
+        B2,
+        B3,
+        B4,
+        B6,
+        B7,
+        B8,
+        B9,
+        C5E,
+        Comm10E,
+        DLE,
+        Folio,
+        Ledger,
+        Tabloid,
+        Custom,
+        A10,
+        A3Extra,
+        A4Extra,
+        A4Plus,
+        A4Small,
+        A5Extra,
+        B5Extra,
+        JisB0,
+        JisB1,
+        JisB2,
+        JisB3,
+        JisB4,
+        JisB5,
+        JisB6,
+        JisB7,
+        JisB8,
+        JisB9,
+        JisB10,
+        AnsiC,
+        AnsiD,
+        AnsiE,
+        LegalExtra,
+        LetterExtra,
+        LetterPlus,
+        LetterSmall,
+        TabloidExtra,
+        ArchA,
+        ArchB,
+        ArchC,
+        ArchD,
+        ArchE,
+        Imperial7x9,
+        Imperial8x10,
+        Imperial9x11,
+        Imperial9x12,
+        Imperial10x11,
+        Imperial10x13,
+        Imperial10x14,
+        Imperial12x11,
+        Imperial15x11,
+        ExecutiveStandard,
+        Note,
+        Quarto,
+        Statement,
+        SuperA,
+        SuperB,
+        Postcard,
+        DoublePostcard,
+        Prc16K,
+        Prc32K,
+        Prc32KBig,
+        FanFoldUS,
+        FanFoldGerman,
+        FanFoldGermanLegal,
+        EnvelopeB4,
+        EnvelopeB5,
+        EnvelopeB6,
+        EnvelopeC0,
+        EnvelopeC1,
+        EnvelopeC2,
+        EnvelopeC3,
+        EnvelopeC4,
+        EnvelopeC6,
+        EnvelopeC65,
+        EnvelopeC7,
+        Envelope9,
+        Envelope11,
+        Envelope12,
+        Envelope14,
+        EnvelopeMonarch,
+        EnvelopePersonal,
+        EnvelopeChou3,
+        EnvelopeChou4,
+        EnvelopeInvite,
+        EnvelopeItalian,
+        EnvelopeKaku2,
+        EnvelopeKaku3,
+        EnvelopePrc1,
+        EnvelopePrc2,
+        EnvelopePrc3,
+        EnvelopePrc4,
+        EnvelopePrc5,
+        EnvelopePrc6,
+        EnvelopePrc7,
+        EnvelopePrc8,
+        EnvelopePrc9,
+        EnvelopePrc10,
+        EnvelopeYou4,
+        NPageSize,
+        NPaperSize,
+        AnsiA,
+        AnsiB,
+        EnvelopeC5,
+        EnvelopeDL,
+        Envelope10,
+        LastPageSize,
+    };
+
+    enum Unit
+    {
+        Millimeter,
+        Point,
+        Inch,
+        Pica,
+        Didot,
+        Cicero,
+    };
+
+    enum SizeMatchPolicy
+    {
+        FuzzyMatch,
+        FuzzyOrientationMatch,
+        ExactMatch,
+    };
+
+    QPageSize();
+    explicit QPageSize(QPageSize::PageSizeId pageSizeId);
+    QPageSize(const QSize &pointSize, const QString &name = QString(), QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch);
+    QPageSize(const QSizeF &size, QPageSize::Unit units, const QString &name = QString(), QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch);
+    QPageSize(const QPageSize &other);
+    ~QPageSize();
+    void swap(QPageSize &other);
+    bool isEquivalentTo(const QPageSize &other) const;
+    bool isValid() const;
+    QString key() const;
+    QString name() const;
+    QPageSize::PageSizeId id() const;
+    int windowsId() const;
+    QSizeF definitionSize() const;
+    QPageSize::Unit definitionUnits() const;
+    QSizeF size(QPageSize::Unit units) const;
+    QSize sizePoints() const;
+    QSize sizePixels(int resolution) const;
+    QRectF rect(QPageSize::Unit units) const;
+    QRect rectPoints() const;
+    QRect rectPixels(int resolution) const;
+    static QString key(QPageSize::PageSizeId pageSizeId);
+    static QString name(QPageSize::PageSizeId pageSizeId);
+    static QPageSize::PageSizeId id(const QSize &pointSize, QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch);
+    static QPageSize::PageSizeId id(const QSizeF &size, QPageSize::Unit units, QPageSize::SizeMatchPolicy matchPolicy = QPageSize::FuzzyMatch);
+    static QPageSize::PageSizeId id(int windowsId);
+    static int windowsId(QPageSize::PageSizeId pageSizeId);
+    static QSizeF definitionSize(QPageSize::PageSizeId pageSizeId);
+    static QPageSize::Unit definitionUnits(QPageSize::PageSizeId pageSizeId);
+    static QSizeF size(QPageSize::PageSizeId pageSizeId, QPageSize::Unit units);
+    static QSize sizePoints(QPageSize::PageSizeId pageSizeId);
+    static QSize sizePixels(QPageSize::PageSizeId pageSizeId, int resolution);
+};
+
+%End
+%If (Qt_5_3_0 -)
+bool operator==(const QPageSize &lhs, const QPageSize &rhs);
+%End
+%If (Qt_5_3_0 -)
+bool operator!=(const QPageSize &lhs, const QPageSize &rhs);
+%End
diff --git a/sip/QtGui/qpaintdevice.sip b/sip/QtGui/qpaintdevice.sip
new file mode 100644
index 0000000..ae5a4c2
--- /dev/null
+++ b/sip/QtGui/qpaintdevice.sip
@@ -0,0 +1,70 @@
+// qpaintdevice.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPaintDevice
+{
+%TypeHeaderCode
+#include <qpaintdevice.h>
+%End
+
+public:
+    enum PaintDeviceMetric
+    {
+        PdmWidth,
+        PdmHeight,
+        PdmWidthMM,
+        PdmHeightMM,
+        PdmNumColors,
+        PdmDepth,
+        PdmDpiX,
+        PdmDpiY,
+        PdmPhysicalDpiX,
+        PdmPhysicalDpiY,
+%If (Qt_5_1_0 -)
+        PdmDevicePixelRatio,
+%End
+    };
+
+    virtual ~QPaintDevice();
+    virtual QPaintEngine *paintEngine() const = 0;
+    int width() const;
+    int height() const;
+    int widthMM() const;
+    int heightMM() const;
+    int logicalDpiX() const;
+    int logicalDpiY() const;
+    int physicalDpiX() const;
+    int physicalDpiY() const;
+    int depth() const;
+    bool paintingActive() const;
+    int colorCount() const;
+%If (Qt_5_1_0 -)
+    int devicePixelRatio() const;
+%End
+
+protected:
+    QPaintDevice();
+    virtual int metric(QPaintDevice::PaintDeviceMetric metric) const;
+
+private:
+    QPaintDevice(const QPaintDevice &);
+};
diff --git a/sip/QtGui/qpaintengine.sip b/sip/QtGui/qpaintengine.sip
new file mode 100644
index 0000000..73b4c9e
--- /dev/null
+++ b/sip/QtGui/qpaintengine.sip
@@ -0,0 +1,200 @@
+// qpaintengine.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qpaintengine.h>
+%End
+
+class QTextItem
+{
+%TypeHeaderCode
+#include <qpaintengine.h>
+%End
+
+public:
+    enum RenderFlag
+    {
+        RightToLeft,
+        Overline,
+        Underline,
+        StrikeOut,
+    };
+
+    typedef QFlags<QTextItem::RenderFlag> RenderFlags;
+    qreal descent() const;
+    qreal ascent() const;
+    qreal width() const;
+    QFlags<QTextItem::RenderFlag> renderFlags() const;
+    QString text() const;
+    QFont font() const;
+};
+
+QFlags<QTextItem::RenderFlag> operator|(QTextItem::RenderFlag f1, QFlags<QTextItem::RenderFlag> f2);
+
+class QPaintEngine
+{
+%TypeHeaderCode
+#include <qpaintengine.h>
+%End
+
+public:
+    enum PaintEngineFeature
+    {
+        PrimitiveTransform,
+        PatternTransform,
+        PixmapTransform,
+        PatternBrush,
+        LinearGradientFill,
+        RadialGradientFill,
+        ConicalGradientFill,
+        AlphaBlend,
+        PorterDuff,
+        PainterPaths,
+        Antialiasing,
+        BrushStroke,
+        ConstantOpacity,
+        MaskedBrush,
+        PaintOutsidePaintEvent,
+        PerspectiveTransform,
+        BlendModes,
+        ObjectBoundingModeGradients,
+        RasterOpModes,
+        AllFeatures,
+    };
+
+    typedef QFlags<QPaintEngine::PaintEngineFeature> PaintEngineFeatures;
+
+    enum DirtyFlag
+    {
+        DirtyPen,
+        DirtyBrush,
+        DirtyBrushOrigin,
+        DirtyFont,
+        DirtyBackground,
+        DirtyBackgroundMode,
+        DirtyTransform,
+        DirtyClipRegion,
+        DirtyClipPath,
+        DirtyHints,
+        DirtyCompositionMode,
+        DirtyClipEnabled,
+        DirtyOpacity,
+        AllDirty,
+    };
+
+    typedef QFlags<QPaintEngine::DirtyFlag> DirtyFlags;
+
+    enum PolygonDrawMode
+    {
+        OddEvenMode,
+        WindingMode,
+        ConvexMode,
+        PolylineMode,
+    };
+
+    explicit QPaintEngine(QFlags<QPaintEngine::PaintEngineFeature> features = 0);
+    virtual ~QPaintEngine();
+    bool isActive() const;
+    void setActive(bool newState);
+    virtual bool begin(QPaintDevice *pdev) = 0;
+    virtual bool end() = 0;
+    virtual void updateState(const QPaintEngineState &state /NoCopy/) = 0;
+    virtual void drawRects(const QRect *rects /Array/, int rectCount /ArraySize/);
+    virtual void drawRects(const QRectF *rects /Array/, int rectCount /ArraySize/);
+    virtual void drawLines(const QLine *lines /Array/, int lineCount /ArraySize/);
+    virtual void drawLines(const QLineF *lines /Array/, int lineCount /ArraySize/);
+    virtual void drawEllipse(const QRectF &r);
+    virtual void drawEllipse(const QRect &r);
+    virtual void drawPath(const QPainterPath &path);
+    virtual void drawPoints(const QPointF *points /Array/, int pointCount /ArraySize/);
+    virtual void drawPoints(const QPoint *points /Array/, int pointCount /ArraySize/);
+    virtual void drawPolygon(const QPointF *points /Array/, int pointCount /ArraySize/, QPaintEngine::PolygonDrawMode mode);
+    virtual void drawPolygon(const QPoint *points /Array/, int pointCount /ArraySize/, QPaintEngine::PolygonDrawMode mode);
+    virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0;
+    virtual void drawTextItem(const QPointF &p, const QTextItem &textItem /NoCopy/);
+    virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s);
+    virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    void setPaintDevice(QPaintDevice *device);
+    QPaintDevice *paintDevice() const;
+
+    enum Type
+    {
+        X11,
+        Windows,
+        QuickDraw,
+        CoreGraphics,
+        MacPrinter,
+        QWindowSystem,
+        PostScript,
+        OpenGL,
+        Picture,
+        SVG,
+        Raster,
+        Direct3D,
+        Pdf,
+        OpenVG,
+        OpenGL2,
+        PaintBuffer,
+        Blitter,
+%If (Qt_5_3_0 -)
+        Direct2D,
+%End
+        User,
+        MaxUser,
+    };
+
+    virtual QPaintEngine::Type type() const = 0;
+    bool hasFeature(QFlags<QPaintEngine::PaintEngineFeature> feature) const;
+    QPainter *painter() const;
+
+private:
+    QPaintEngine(const QPaintEngine &);
+};
+
+QFlags<QPaintEngine::PaintEngineFeature> operator|(QPaintEngine::PaintEngineFeature f1, QFlags<QPaintEngine::PaintEngineFeature> f2);
+
+class QPaintEngineState
+{
+%TypeHeaderCode
+#include <qpaintengine.h>
+%End
+
+public:
+    QFlags<QPaintEngine::DirtyFlag> state() const;
+    QPen pen() const;
+    QBrush brush() const;
+    QPointF brushOrigin() const;
+    QBrush backgroundBrush() const;
+    Qt::BGMode backgroundMode() const;
+    QFont font() const;
+    qreal opacity() const;
+    Qt::ClipOperation clipOperation() const;
+    QRegion clipRegion() const;
+    QPainterPath clipPath() const;
+    bool isClipEnabled() const;
+    QFlags<QPainter::RenderHint> renderHints() const;
+    QPainter::CompositionMode compositionMode() const;
+    QPainter *painter() const;
+    QTransform transform() const;
+    bool brushNeedsResolving() const;
+    bool penNeedsResolving() const;
+};
diff --git a/sip/QtGui/qpainter.sip b/sip/QtGui/qpainter.sip
new file mode 100644
index 0000000..edc2e15
--- /dev/null
+++ b/sip/QtGui/qpainter.sip
@@ -0,0 +1,560 @@
+// qpainter.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qpainter.h>
+%End
+
+class QPainter
+{
+%TypeHeaderCode
+#include <qpainter.h>
+%End
+
+%TypeCode
+// Return an array on the heap of class instances extracted from a set of
+// Python arguments.
+template<class TYPE>
+static TYPE *qtgui_inst_array(const TYPE *first, PyObject *t, sipTypeDef *td)
+{
+    TYPE *arr = new TYPE[1 + PyTuple_GET_SIZE(t)];
+
+    arr[0] = *first;
+
+    for (SIP_SSIZE_T i = 0; i < PyTuple_GET_SIZE(t); ++i)
+    {
+        int iserr = 0, state;
+        TYPE *itm;
+
+        itm  = reinterpret_cast<TYPE *>(sipForceConvertToType(PyTuple_GET_ITEM(t, i), td, 0, SIP_NOT_NONE, &state, &iserr));
+
+        if (iserr)
+        {
+            sipReleaseType(itm, td, state);
+
+            PyErr_Format(PyExc_TypeError, "each argument must be an instance of %s", sipTypeAsPyTypeObject(td)->tp_name);
+
+            delete[] arr;
+            return 0;
+        }
+
+        arr[1 + i] = *itm;
+
+        sipReleaseType(itm, td, state);
+    }
+
+    return arr;
+}
+%End
+
+public:
+    enum RenderHint
+    {
+        Antialiasing,
+        TextAntialiasing,
+        SmoothPixmapTransform,
+        HighQualityAntialiasing,
+        NonCosmeticDefaultPen,
+        Qt4CompatiblePainting,
+    };
+
+    typedef QFlags<QPainter::RenderHint> RenderHints;
+    QPainter();
+    explicit QPainter(QPaintDevice *);
+    ~QPainter();
+    SIP_PYOBJECT __enter__();
+%MethodCode
+        // Check a device was passed.
+        if (sipCpp->isActive())
+        {
+            // Just return a reference to self.
+            sipRes = sipSelf;
+            Py_INCREF(sipRes);
+        }
+        else
+        {
+            PyErr_SetString(PyExc_ValueError, "QPainter must be created with a device");
+            sipRes = 0;
+        }
+%End
+
+    void __exit__(SIP_PYOBJECT type, SIP_PYOBJECT value, SIP_PYOBJECT traceback);
+%MethodCode
+        sipCpp->end();
+%End
+
+    QPaintDevice *device() const;
+    bool begin(QPaintDevice *);
+    bool end();
+    bool isActive() const;
+
+    enum CompositionMode
+    {
+        CompositionMode_SourceOver,
+        CompositionMode_DestinationOver,
+        CompositionMode_Clear,
+        CompositionMode_Source,
+        CompositionMode_Destination,
+        CompositionMode_SourceIn,
+        CompositionMode_DestinationIn,
+        CompositionMode_SourceOut,
+        CompositionMode_DestinationOut,
+        CompositionMode_SourceAtop,
+        CompositionMode_DestinationAtop,
+        CompositionMode_Xor,
+        CompositionMode_Plus,
+        CompositionMode_Multiply,
+        CompositionMode_Screen,
+        CompositionMode_Overlay,
+        CompositionMode_Darken,
+        CompositionMode_Lighten,
+        CompositionMode_ColorDodge,
+        CompositionMode_ColorBurn,
+        CompositionMode_HardLight,
+        CompositionMode_SoftLight,
+        CompositionMode_Difference,
+        CompositionMode_Exclusion,
+        RasterOp_SourceOrDestination,
+        RasterOp_SourceAndDestination,
+        RasterOp_SourceXorDestination,
+        RasterOp_NotSourceAndNotDestination,
+        RasterOp_NotSourceOrNotDestination,
+        RasterOp_NotSourceXorDestination,
+        RasterOp_NotSource,
+        RasterOp_NotSourceAndDestination,
+        RasterOp_SourceAndNotDestination,
+        RasterOp_NotSourceOrDestination,
+        RasterOp_SourceOrNotDestination,
+        RasterOp_ClearDestination,
+        RasterOp_SetDestination,
+        RasterOp_NotDestination,
+    };
+
+    void setCompositionMode(QPainter::CompositionMode mode);
+    QPainter::CompositionMode compositionMode() const;
+    const QFont &font() const;
+    void setFont(const QFont &f);
+    QFontMetrics fontMetrics() const;
+    QFontInfo fontInfo() const;
+    void setPen(const QColor &color);
+    void setPen(const QPen &pen);
+    void setPen(Qt::PenStyle style);
+    const QPen &pen() const;
+    void setBrush(const QBrush &brush);
+    void setBrush(Qt::BrushStyle style);
+    const QBrush &brush() const;
+    void setBackgroundMode(Qt::BGMode mode);
+    Qt::BGMode backgroundMode() const;
+    QPoint brushOrigin() const;
+    void setBrushOrigin(const QPointF &);
+    void setBackground(const QBrush &bg);
+    const QBrush &background() const;
+    QRegion clipRegion() const;
+    QPainterPath clipPath() const;
+    void setClipRect(const QRectF &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip);
+    void setClipRegion(const QRegion &region, Qt::ClipOperation operation = Qt::ReplaceClip);
+    void setClipPath(const QPainterPath &path, Qt::ClipOperation operation = Qt::ReplaceClip);
+    void setClipping(bool enable);
+    bool hasClipping() const;
+    void save();
+    void restore();
+    void scale(qreal sx, qreal sy);
+    void shear(qreal sh, qreal sv);
+    void rotate(qreal a);
+    void translate(const QPointF &offset);
+    QRect window() const;
+    void setWindow(const QRect &window);
+    QRect viewport() const;
+    void setViewport(const QRect &viewport);
+    void setViewTransformEnabled(bool enable);
+    bool viewTransformEnabled() const;
+    void strokePath(const QPainterPath &path, const QPen &pen);
+    void fillPath(const QPainterPath &path, const QBrush &brush);
+    void drawPath(const QPainterPath &path);
+    void drawPoints(const QPointF *point, ...);
+%MethodCode
+        QPointF *points = qtgui_inst_array<QPointF>(a0, a1, sipType_QPointF);
+        
+        if (points)
+        {
+            sipCpp->drawPoints(points, 1 + PyTuple_GET_SIZE(a1));
+            delete[] points;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawPoints(const QPolygonF &points);
+    void drawPoints(const QPoint *point, ...);
+%MethodCode
+        QPoint *points = qtgui_inst_array<QPoint>(a0, a1, sipType_QPoint);
+        
+        if (points)
+        {
+            sipCpp->drawPoints(points, 1 + PyTuple_GET_SIZE(a1));
+            delete[] points;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawPoints(const QPolygon &points);
+    void drawLines(const QLineF *line, ...);
+%MethodCode
+        QLineF *lines = qtgui_inst_array<QLineF>(a0, a1, sipType_QLineF);
+        
+        if (lines)
+        {
+            sipCpp->drawLines(lines, 1 + PyTuple_GET_SIZE(a1));
+            delete[] lines;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawLines(const QVector<QLineF> &lines);
+    void drawLines(const QPointF *pointPair, ...);
+%MethodCode
+        QPointF *pairs = qtgui_inst_array<QPointF>(a0, a1, sipType_QPointF);
+        
+        if (pairs)
+        {
+            sipCpp->drawLines(pairs, (1 + PyTuple_GET_SIZE(a1)) / 2);
+            delete[] pairs;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawLines(const QVector<QPointF> &pointPairs);
+    void drawLines(const QLine *line, ...);
+%MethodCode
+        QLine *lines = qtgui_inst_array<QLine>(a0, a1, sipType_QLine);
+        
+        if (lines)
+        {
+            sipCpp->drawLines(lines, 1 + PyTuple_GET_SIZE(a1));
+            delete[] lines;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawLines(const QVector<QLine> &lines);
+    void drawLines(const QPoint *pointPair, ...);
+%MethodCode
+        QPoint *pairs = qtgui_inst_array<QPoint>(a0, a1, sipType_QPoint);
+        
+        if (pairs)
+        {
+            sipCpp->drawLines(pairs, (1 + PyTuple_GET_SIZE(a1)) / 2);
+            delete[] pairs;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawLines(const QVector<QPoint> &pointPairs);
+    void drawRects(const QRectF *rect, ...);
+%MethodCode
+        QRectF *rects = qtgui_inst_array<QRectF>(a0, a1, sipType_QRectF);
+        
+        if (rects)
+        {
+            sipCpp->drawRects(rects, 1 + PyTuple_GET_SIZE(a1));
+            delete[] rects;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawRects(const QVector<QRectF> &rects);
+    void drawRects(const QRect *rect, ...);
+%MethodCode
+        QRect *rects = qtgui_inst_array<QRect>(a0, a1, sipType_QRect);
+        
+        if (rects)
+        {
+            sipCpp->drawRects(rects, 1 + PyTuple_GET_SIZE(a1));
+            delete[] rects;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawRects(const QVector<QRect> &rects);
+    void drawEllipse(const QRectF &r);
+    void drawEllipse(const QRect &r);
+    void drawPolyline(const QPointF *point, ...);
+%MethodCode
+        QPointF *points = qtgui_inst_array<QPointF>(a0, a1, sipType_QPointF);
+        
+        if (points)
+        {
+            sipCpp->drawPolyline(points, 1 + PyTuple_GET_SIZE(a1));
+            delete[] points;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawPolyline(const QPolygonF &polyline);
+    void drawPolyline(const QPoint *point, ...);
+%MethodCode
+        QPoint *points = qtgui_inst_array<QPoint>(a0, a1, sipType_QPoint);
+        
+        if (points)
+        {
+            sipCpp->drawPolyline(points, 1 + PyTuple_GET_SIZE(a1));
+            delete[] points;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawPolyline(const QPolygon &polyline);
+    void drawPolygon(const QPointF *point, ...);
+%MethodCode
+        QPointF *points = qtgui_inst_array<QPointF>(a0, a1, sipType_QPointF);
+        
+        if (points)
+        {
+            sipCpp->drawPolygon(points, 1 + PyTuple_GET_SIZE(a1));
+            delete[] points;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawPolygon(const QPolygonF &points, Qt::FillRule fillRule = Qt::OddEvenFill);
+    void drawPolygon(const QPoint *point, ...);
+%MethodCode
+        QPoint *points = qtgui_inst_array<QPoint>(a0, a1, sipType_QPoint);
+        
+        if (points)
+        {
+            sipCpp->drawPolygon(points, 1 + PyTuple_GET_SIZE(a1));
+            delete[] points;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill);
+    void drawConvexPolygon(const QPointF *point, ...);
+%MethodCode
+        QPointF *points = qtgui_inst_array<QPointF>(a0, a1, sipType_QPointF);
+        
+        if (points)
+        {
+            sipCpp->drawConvexPolygon(points, 1 + PyTuple_GET_SIZE(a1));
+            delete[] points;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawConvexPolygon(const QPolygonF &poly);
+    void drawConvexPolygon(const QPoint *point, ...);
+%MethodCode
+        QPoint *points = qtgui_inst_array<QPoint>(a0, a1, sipType_QPoint);
+        
+        if (points)
+        {
+            sipCpp->drawConvexPolygon(points, 1 + PyTuple_GET_SIZE(a1));
+            delete[] points;
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    void drawConvexPolygon(const QPolygon &poly);
+    void drawArc(const QRectF &rect, int a, int alen);
+    void drawPie(const QRectF &rect, int a, int alen);
+    void drawChord(const QRectF &rect, int a, int alen);
+    void drawTiledPixmap(const QRectF &rectangle, const QPixmap &pixmap, const QPointF &pos = QPointF());
+    void drawPicture(const QPointF &p, const QPicture &picture);
+    void drawPixmap(const QRectF &targetRect, const QPixmap &pixmap, const QRectF &sourceRect);
+    void setLayoutDirection(Qt::LayoutDirection direction);
+    Qt::LayoutDirection layoutDirection() const;
+    void drawText(const QPointF &p, const QString &s);
+    void drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect /Out/ = 0);
+    void drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect /Out/ = 0);
+    void drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption());
+    QRectF boundingRect(const QRectF &rect, int flags, const QString &text);
+    QRect boundingRect(const QRect &rect, int flags, const QString &text);
+    QRectF boundingRect(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption());
+    void fillRect(const QRectF &, const QBrush &);
+    void fillRect(const QRect &, const QBrush &);
+    void eraseRect(const QRectF &);
+    void setRenderHint(QPainter::RenderHint hint, bool on = true);
+    QFlags<QPainter::RenderHint> renderHints() const;
+    void setRenderHints(QFlags<QPainter::RenderHint> hints, bool on = true);
+    QPaintEngine *paintEngine() const;
+    void drawLine(const QLineF &l);
+    void drawLine(const QLine &line);
+    void drawLine(int x1, int y1, int x2, int y2);
+    void drawLine(const QPoint &p1, const QPoint &p2);
+    void drawLine(const QPointF &p1, const QPointF &p2);
+    void drawRect(const QRectF &rect);
+    void drawRect(int x, int y, int w, int h);
+    void drawRect(const QRect &r);
+    void drawPoint(const QPointF &p);
+    void drawPoint(int x, int y);
+    void drawPoint(const QPoint &p);
+    void drawEllipse(int x, int y, int w, int h);
+    void drawArc(const QRect &r, int a, int alen);
+    void drawArc(int x, int y, int w, int h, int a, int alen);
+    void drawPie(const QRect &rect, int a, int alen);
+    void drawPie(int x, int y, int w, int h, int a, int alen);
+    void drawChord(const QRect &rect, int a, int alen);
+    void drawChord(int x, int y, int w, int h, int a, int alen);
+    void setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation = Qt::ReplaceClip);
+    void setClipRect(const QRect &rectangle, Qt::ClipOperation operation = Qt::ReplaceClip);
+    void eraseRect(const QRect &rect);
+    void eraseRect(int x, int y, int w, int h);
+    void fillRect(int x, int y, int w, int h, const QBrush &b);
+    void setBrushOrigin(int x, int y);
+    void setBrushOrigin(const QPoint &p);
+    void drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap, const QPoint &pos = QPoint());
+    void drawTiledPixmap(int x, int y, int width, int height, const QPixmap &pixmap, int sx = 0, int sy = 0);
+    void drawPixmap(const QRect &targetRect, const QPixmap &pixmap, const QRect &sourceRect);
+    void drawPixmap(const QPointF &p, const QPixmap &pm);
+    void drawPixmap(const QPoint &p, const QPixmap &pm);
+    void drawPixmap(const QRect &r, const QPixmap &pm);
+    void drawPixmap(int x, int y, const QPixmap &pm);
+    void drawPixmap(int x, int y, int w, int h, const QPixmap &pm);
+    void drawPixmap(int x, int y, int w, int h, const QPixmap &pm, int sx, int sy, int sw, int sh);
+    void drawPixmap(int x, int y, const QPixmap &pm, int sx, int sy, int sw, int sh);
+    void drawPixmap(const QPointF &p, const QPixmap &pm, const QRectF &sr);
+    void drawPixmap(const QPoint &p, const QPixmap &pm, const QRect &sr);
+    void drawImage(const QRectF &targetRect, const QImage &image, const QRectF &sourceRect, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    void drawImage(const QRect &targetRect, const QImage &image, const QRect &sourceRect, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    void drawImage(const QPointF &p, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    void drawImage(const QPoint &p, const QImage &image, const QRect &sr, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    void drawImage(const QRectF &r, const QImage &image);
+    void drawImage(const QRect &r, const QImage &image);
+    void drawImage(const QPointF &p, const QImage &image);
+    void drawImage(const QPoint &p, const QImage &image);
+    void drawImage(int x, int y, const QImage &image, int sx = 0, int sy = 0, int sw = -1, int sh = -1, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    void drawText(const QPoint &p, const QString &s);
+    void drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect /Out/ = 0);
+    void drawText(int x, int y, const QString &s);
+    QRect boundingRect(int x, int y, int w, int h, int flags, const QString &text);
+    qreal opacity() const;
+    void setOpacity(qreal opacity);
+    void translate(qreal dx, qreal dy);
+    void translate(const QPoint &offset);
+    void setViewport(int x, int y, int w, int h);
+    void setWindow(int x, int y, int w, int h);
+    bool worldMatrixEnabled() const;
+    void setWorldMatrixEnabled(bool enabled);
+    void drawPicture(int x, int y, const QPicture &p);
+    void drawPicture(const QPoint &pt, const QPicture &p);
+    void setTransform(const QTransform &transform, bool combine = false);
+    const QTransform &transform() const;
+    const QTransform &deviceTransform() const;
+    void resetTransform();
+    void setWorldTransform(const QTransform &matrix, bool combine = false);
+    const QTransform &worldTransform() const;
+    QTransform combinedTransform() const;
+    bool testRenderHint(QPainter::RenderHint hint) const;
+    void drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize);
+    void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize);
+    void drawRoundedRect(const QRect &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize);
+    void drawEllipse(const QPointF &center, qreal rx, qreal ry);
+    void drawEllipse(const QPoint &center, int rx, int ry);
+    void fillRect(const QRectF &, const QColor &color);
+    void fillRect(const QRect &, const QColor &color);
+    void fillRect(int x, int y, int w, int h, const QColor &b);
+    void fillRect(int x, int y, int w, int h, Qt::GlobalColor c);
+    void fillRect(const QRect &r, Qt::GlobalColor c);
+    void fillRect(const QRectF &r, Qt::GlobalColor c);
+    void fillRect(int x, int y, int w, int h, Qt::BrushStyle style);
+    void fillRect(const QRect &r, Qt::BrushStyle style);
+    void fillRect(const QRectF &r, Qt::BrushStyle style);
+    void beginNativePainting();
+    void endNativePainting();
+
+    class PixmapFragment
+    {
+%TypeHeaderCode
+#include <qpainter.h>
+%End
+
+    public:
+        qreal x;
+        qreal y;
+        qreal sourceLeft;
+        qreal sourceTop;
+        qreal width;
+        qreal height;
+        qreal scaleX;
+        qreal scaleY;
+        qreal rotation;
+        qreal opacity;
+        static QPainter::PixmapFragment create(const QPointF &pos, const QRectF &sourceRect, qreal scaleX = 1, qreal scaleY = 1, qreal rotation = 0, qreal opacity = 1) /Factory/;
+    };
+
+    enum PixmapFragmentHint
+    {
+        OpaqueHint,
+    };
+
+    typedef QFlags<QPainter::PixmapFragmentHint> PixmapFragmentHints;
+    void drawPixmapFragments(SIP_PYLIST fragments /DocType="list-of-QPainter.PixmapFragment"/, const QPixmap &pixmap, QFlags<QPainter::PixmapFragmentHint> hints = 0);
+%MethodCode
+        // Allocate temporary storage for the C++ conversions.
+        SIP_SSIZE_T numFragments = PyList_GET_SIZE(a0);
+        QPainter::PixmapFragment *fragments = new QPainter::PixmapFragment[numFragments];
+        
+        // Convert the fragments.
+        for (SIP_SSIZE_T i = 0; i < numFragments; ++i)
+        {
+            void *cpp = sipForceConvertToType(PyList_GET_ITEM(a0, i), sipType_QPainter_PixmapFragment, NULL, SIP_NO_CONVERTORS, NULL, &sipIsErr);
+        
+            fragments[i] = *reinterpret_cast<QPainter::PixmapFragment *>(cpp);
+        }
+        
+        if (!sipIsErr)
+        {
+            Py_BEGIN_ALLOW_THREADS
+            sipCpp->drawPixmapFragments(fragments, numFragments, *a1, *a2);
+            Py_END_ALLOW_THREADS
+        }
+        
+        delete[] fragments;
+%End
+
+    void drawStaticText(const QPointF &topLeftPosition, const QStaticText &staticText);
+    void drawStaticText(const QPoint &p, const QStaticText &staticText);
+    void drawStaticText(int x, int y, const QStaticText &staticText);
+    QRectF clipBoundingRect() const;
+%If (PyQt_RawFont)
+    void drawGlyphRun(const QPointF &position, const QGlyphRun &glyphRun);
+%End
+
+private:
+    QPainter(const QPainter &);
+};
+
+QFlags<QPainter::RenderHint> operator|(QPainter::RenderHint f1, QFlags<QPainter::RenderHint> f2);
diff --git a/sip/QtGui/qpainterpath.sip b/sip/QtGui/qpainterpath.sip
new file mode 100644
index 0000000..5eab4dd
--- /dev/null
+++ b/sip/QtGui/qpainterpath.sip
@@ -0,0 +1,168 @@
+// qpainterpath.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qpainterpath.h>
+%End
+
+class QPainterPath
+{
+%TypeHeaderCode
+#include <qpainterpath.h>
+%End
+
+public:
+    enum ElementType
+    {
+        MoveToElement,
+        LineToElement,
+        CurveToElement,
+        CurveToDataElement,
+    };
+
+    class Element
+    {
+%TypeHeaderCode
+#include <qpainterpath.h>
+%End
+
+    public:
+        qreal x;
+        qreal y;
+        QPainterPath::ElementType type;
+        bool isMoveTo() const;
+        bool isLineTo() const;
+        bool isCurveTo() const;
+        bool operator==(const QPainterPath::Element &e) const;
+        bool operator!=(const QPainterPath::Element &e) const;
+        operator QPointF() const;
+    };
+
+    QPainterPath();
+    explicit QPainterPath(const QPointF &startPoint);
+    QPainterPath(const QPainterPath &other);
+    ~QPainterPath();
+    void closeSubpath();
+    void moveTo(const QPointF &p);
+    void lineTo(const QPointF &p);
+    void arcTo(const QRectF &rect, qreal startAngle, qreal arcLength);
+    void cubicTo(const QPointF &ctrlPt1, const QPointF &ctrlPt2, const QPointF &endPt);
+    void quadTo(const QPointF &ctrlPt, const QPointF &endPt);
+    QPointF currentPosition() const;
+    void addRect(const QRectF &rect);
+    void addEllipse(const QRectF &rect);
+    void addPolygon(const QPolygonF &polygon);
+    void addText(const QPointF &point, const QFont &f, const QString &text);
+    void addPath(const QPainterPath &path);
+    void addRegion(const QRegion &region);
+    void connectPath(const QPainterPath &path);
+    bool contains(const QPointF &pt) const;
+    bool contains(const QRectF &rect) const;
+    bool intersects(const QRectF &rect) const;
+    QRectF boundingRect() const;
+    QRectF controlPointRect() const;
+    Qt::FillRule fillRule() const;
+    void setFillRule(Qt::FillRule fillRule);
+    QPainterPath toReversed() const;
+    bool operator==(const QPainterPath &other) const;
+    bool operator!=(const QPainterPath &other) const;
+    void moveTo(qreal x, qreal y);
+    void arcMoveTo(const QRectF &rect, qreal angle);
+    void arcMoveTo(qreal x, qreal y, qreal w, qreal h, qreal angle);
+    void arcTo(qreal x, qreal y, qreal w, qreal h, qreal startAngle, qreal arcLenght);
+    void lineTo(qreal x, qreal y);
+    void cubicTo(qreal ctrlPt1x, qreal ctrlPt1y, qreal ctrlPt2x, qreal ctrlPt2y, qreal endPtx, qreal endPty);
+    void quadTo(qreal ctrlPtx, qreal ctrlPty, qreal endPtx, qreal endPty);
+    void addEllipse(qreal x, qreal y, qreal w, qreal h);
+    void addRect(qreal x, qreal y, qreal w, qreal h);
+    void addText(qreal x, qreal y, const QFont &f, const QString &text);
+    bool isEmpty() const;
+    int elementCount() const;
+    QPainterPath::Element elementAt(int i) const;
+    void setElementPositionAt(int i, qreal x, qreal y);
+    QList<QPolygonF> toSubpathPolygons(const QTransform &matrix) const;
+    QList<QPolygonF> toFillPolygons(const QTransform &matrix) const;
+    QPolygonF toFillPolygon(const QTransform &matrix) const;
+    qreal length() const;
+    qreal percentAtLength(qreal t) const;
+    QPointF pointAtPercent(qreal t) const;
+    qreal angleAtPercent(qreal t) const;
+    qreal slopeAtPercent(qreal t) const;
+    bool intersects(const QPainterPath &p) const;
+    bool contains(const QPainterPath &p) const;
+    QPainterPath united(const QPainterPath &r) const;
+    QPainterPath intersected(const QPainterPath &r) const;
+    QPainterPath subtracted(const QPainterPath &r) const;
+    void addRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize);
+    void addRoundedRect(qreal x, qreal y, qreal w, qreal h, qreal xRadius, qreal yRadius, Qt::SizeMode mode = Qt::AbsoluteSize);
+    void addEllipse(const QPointF &center, qreal rx, qreal ry);
+    QPainterPath simplified() const;
+    QPainterPath operator&(const QPainterPath &other) const;
+    QPainterPath operator|(const QPainterPath &other) const;
+    QPainterPath operator+(const QPainterPath &other) const;
+    QPainterPath operator-(const QPainterPath &other) const;
+    QPainterPath &operator&=(const QPainterPath &other);
+    QPainterPath &operator|=(const QPainterPath &other);
+    QPainterPath &operator+=(const QPainterPath &other);
+    QPainterPath &operator-=(const QPainterPath &other);
+    void translate(qreal dx, qreal dy);
+    QPainterPath translated(qreal dx, qreal dy) const;
+    void translate(const QPointF &offset);
+    QPainterPath translated(const QPointF &offset) const;
+    void swap(QPainterPath &other);
+};
+
+QDataStream &operator<<(QDataStream &, const QPainterPath & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QPainterPath & /Constrained/) /ReleaseGIL/;
+
+class QPainterPathStroker
+{
+%TypeHeaderCode
+#include <qpainterpath.h>
+%End
+
+public:
+    QPainterPathStroker();
+%If (Qt_5_3_0 -)
+    explicit QPainterPathStroker(const QPen &pen);
+%End
+    ~QPainterPathStroker();
+    void setWidth(qreal width);
+    qreal width() const;
+    void setCapStyle(Qt::PenCapStyle style);
+    Qt::PenCapStyle capStyle() const;
+    void setJoinStyle(Qt::PenJoinStyle style);
+    Qt::PenJoinStyle joinStyle() const;
+    void setMiterLimit(qreal length);
+    qreal miterLimit() const;
+    void setCurveThreshold(qreal threshold);
+    qreal curveThreshold() const;
+    void setDashPattern(Qt::PenStyle);
+    void setDashPattern(const QVector<qreal> &dashPattern);
+    QVector<qreal> dashPattern() const;
+    QPainterPath createStroke(const QPainterPath &path) const;
+    void setDashOffset(qreal offset);
+    qreal dashOffset() const;
+
+private:
+    QPainterPathStroker(const QPainterPathStroker &);
+};
diff --git a/sip/QtGui/qpalette.sip b/sip/QtGui/qpalette.sip
new file mode 100644
index 0000000..c8dd1f1
--- /dev/null
+++ b/sip/QtGui/qpalette.sip
@@ -0,0 +1,128 @@
+// qpalette.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qpalette.h>
+%End
+
+class QPalette
+{
+%TypeHeaderCode
+#include <qpalette.h>
+%End
+
+public:
+    QPalette();
+    QPalette(const QColor &button);
+    QPalette(Qt::GlobalColor button);
+    QPalette(const QColor &button, const QColor &background);
+    QPalette(const QBrush &foreground, const QBrush &button, const QBrush &light, const QBrush &dark, const QBrush &mid, const QBrush &text, const QBrush &bright_text, const QBrush &base, const QBrush &background);
+    QPalette(const QPalette &palette);
+    QPalette(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QPalette(a0->value<QPalette>());
+%End
+
+    ~QPalette();
+
+    enum ColorGroup
+    {
+        Active,
+        Disabled,
+        Inactive,
+        NColorGroups,
+        Current,
+        All,
+        Normal,
+    };
+
+    enum ColorRole
+    {
+        WindowText,
+        Foreground,
+        Button,
+        Light,
+        Midlight,
+        Dark,
+        Mid,
+        Text,
+        BrightText,
+        ButtonText,
+        Base,
+        Window,
+        Background,
+        Shadow,
+        Highlight,
+        HighlightedText,
+        Link,
+        LinkVisited,
+        AlternateBase,
+        ToolTipBase,
+        ToolTipText,
+        NColorRoles,
+        NoRole,
+    };
+
+    QPalette::ColorGroup currentColorGroup() const;
+    void setCurrentColorGroup(QPalette::ColorGroup cg);
+    const QColor &color(QPalette::ColorGroup cg, QPalette::ColorRole cr) const;
+    const QBrush &brush(QPalette::ColorGroup cg, QPalette::ColorRole cr) const;
+    void setBrush(QPalette::ColorGroup cg, QPalette::ColorRole cr, const QBrush &brush);
+    void setColorGroup(QPalette::ColorGroup cr, const QBrush &foreground, const QBrush &button, const QBrush &light, const QBrush &dark, const QBrush &mid, const QBrush &text, const QBrush &bright_text, const QBrush &base, const QBrush &background);
+    bool isEqual(QPalette::ColorGroup cr1, QPalette::ColorGroup cr2) const;
+    const QColor &color(QPalette::ColorRole cr) const;
+    const QBrush &brush(QPalette::ColorRole cr) const;
+    const QBrush &windowText() const;
+    const QBrush &button() const;
+    const QBrush &light() const;
+    const QBrush &dark() const;
+    const QBrush &mid() const;
+    const QBrush &text() const;
+    const QBrush &base() const;
+    const QBrush &alternateBase() const;
+    const QBrush &window() const;
+    const QBrush &midlight() const;
+    const QBrush &brightText() const;
+    const QBrush &buttonText() const;
+    const QBrush &shadow() const;
+    const QBrush &highlight() const;
+    const QBrush &highlightedText() const;
+    const QBrush &link() const;
+    const QBrush &linkVisited() const;
+    const QBrush &toolTipBase() const;
+    const QBrush &toolTipText() const;
+    bool operator==(const QPalette &p) const;
+    bool operator!=(const QPalette &p) const;
+    bool isCopyOf(const QPalette &p) const;
+    QPalette resolve(const QPalette &) const;
+    uint resolve() const;
+    void resolve(uint mask);
+    void setColor(QPalette::ColorGroup acg, QPalette::ColorRole acr, const QColor &acolor);
+    void setColor(QPalette::ColorRole acr, const QColor &acolor);
+    void setBrush(QPalette::ColorRole acr, const QBrush &abrush);
+    bool isBrushSet(QPalette::ColorGroup cg, QPalette::ColorRole cr) const;
+    qint64 cacheKey() const;
+    void swap(QPalette &other);
+};
+
+QDataStream &operator<<(QDataStream &s, const QPalette &p /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &ds, QPalette &p /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qpdfwriter.sip b/sip/QtGui/qpdfwriter.sip
new file mode 100644
index 0000000..74925f3
--- /dev/null
+++ b/sip/QtGui/qpdfwriter.sip
@@ -0,0 +1,56 @@
+// qpdfwriter.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPdfWriter : QObject, QPagedPaintDevice
+{
+%TypeHeaderCode
+#include <qpdfwriter.h>
+%End
+
+public:
+    explicit QPdfWriter(const QString &filename);
+    explicit QPdfWriter(QIODevice *device);
+    virtual ~QPdfWriter();
+    QString title() const;
+    void setTitle(const QString &title);
+    QString creator() const;
+    void setCreator(const QString &creator);
+    virtual bool newPage();
+    virtual void setPageSize(QPagedPaintDevice::PageSize size);
+    virtual void setPageSizeMM(const QSizeF &size);
+    virtual void setMargins(const QPagedPaintDevice::Margins &m);
+
+protected:
+    virtual QPaintEngine *paintEngine() const;
+    virtual int metric(QPaintDevice::PaintDeviceMetric id) const;
+
+public:
+%If (Qt_5_3_0 -)
+    void setResolution(int resolution);
+%End
+%If (Qt_5_3_0 -)
+    int resolution() const;
+%End
+
+private:
+    QPdfWriter(const QPdfWriter &);
+};
diff --git a/sip/QtGui/qpen.sip b/sip/QtGui/qpen.sip
new file mode 100644
index 0000000..628f677
--- /dev/null
+++ b/sip/QtGui/qpen.sip
@@ -0,0 +1,105 @@
+// qpen.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qpen.h>
+%End
+
+class QPen
+{
+%TypeHeaderCode
+#include <qpen.h>
+%End
+
+%ConvertToTypeCode
+// SIP doesn't support automatic type convertors so we explicitly allow a
+// QColor to be used whenever a QPen is expected.
+
+if (sipIsErr == NULL)
+    return (sipCanConvertToType(sipPy, sipType_QPen, SIP_NO_CONVERTORS) ||
+            sipCanConvertToType(sipPy, sipType_QColor, 0));
+
+if (sipCanConvertToType(sipPy, sipType_QPen, SIP_NO_CONVERTORS))
+{
+    *sipCppPtr = reinterpret_cast<QPen *>(sipConvertToType(sipPy, sipType_QPen, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+    return 0;
+}
+
+int state;
+QColor *c = reinterpret_cast<QColor *>(sipConvertToType(sipPy, sipType_QColor, 0, 0, &state, sipIsErr));
+
+if (*sipIsErr)
+{
+    sipReleaseType(c, sipType_QColor, state);
+    return 0;
+}
+
+*sipCppPtr = new QPen(*c);
+
+sipReleaseType(c, sipType_QColor, state);
+
+return sipGetState(sipTransferObj);
+%End
+
+public:
+    QPen();
+    QPen(Qt::PenStyle);
+    QPen(const QColor &color);
+    QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin);
+    QPen(const QPen &pen);
+    QPen(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QPen(a0->value<QPen>());
+%End
+
+    ~QPen();
+    Qt::PenStyle style() const;
+    void setStyle(Qt::PenStyle);
+    qreal widthF() const;
+    void setWidthF(qreal width);
+    int width() const;
+    void setWidth(int width);
+    QColor color() const;
+    void setColor(const QColor &color);
+    QBrush brush() const;
+    void setBrush(const QBrush &brush);
+    bool isSolid() const;
+    Qt::PenCapStyle capStyle() const;
+    void setCapStyle(Qt::PenCapStyle pcs);
+    Qt::PenJoinStyle joinStyle() const;
+    void setJoinStyle(Qt::PenJoinStyle pcs);
+    QVector<qreal> dashPattern() const;
+    void setDashPattern(const QVector<qreal> &pattern);
+    qreal miterLimit() const;
+    void setMiterLimit(qreal limit);
+    bool operator==(const QPen &p) const;
+    bool operator!=(const QPen &p) const;
+    qreal dashOffset() const;
+    void setDashOffset(qreal doffset);
+    bool isCosmetic() const;
+    void setCosmetic(bool cosmetic);
+    void swap(QPen &other);
+};
+
+QDataStream &operator<<(QDataStream &, const QPen & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QPen & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qpicture.sip b/sip/QtGui/qpicture.sip
new file mode 100644
index 0000000..3a3d803
--- /dev/null
+++ b/sip/QtGui/qpicture.sip
@@ -0,0 +1,191 @@
+// qpicture.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qpicture.h>
+%End
+
+class QPicture : QPaintDevice
+{
+%TypeHeaderCode
+#include <qpicture.h>
+%End
+
+public:
+    explicit QPicture(int formatVersion = -1);
+    QPicture(const QPicture &);
+    virtual ~QPicture();
+    bool isNull() const;
+    virtual int devType() const;
+    uint size() const;
+    const char *data() const /Encoding="None"/;
+    virtual void setData(const char *data /Array/, uint size /ArraySize/);
+    bool play(QPainter *p);
+    bool load(QIODevice *dev, const char *format = 0) /ReleaseGIL/;
+    bool load(const QString &fileName, const char *format = 0) /ReleaseGIL/;
+    bool save(QIODevice *dev, const char *format = 0) /ReleaseGIL/;
+    bool save(const QString &fileName, const char *format = 0) /ReleaseGIL/;
+    QRect boundingRect() const;
+    void setBoundingRect(const QRect &r);
+    void detach();
+    bool isDetached() const;
+    virtual QPaintEngine *paintEngine() const;
+
+protected:
+    virtual int metric(QPaintDevice::PaintDeviceMetric m) const;
+
+public:
+    void swap(QPicture &other);
+};
+
+class QPictureIO
+{
+%TypeHeaderCode
+#include <qpicture.h>
+%End
+
+%TypeCode
+// This defines the mapping between picture formats and the corresponding
+// Python i/o handler callables.
+struct qtgui_pio {
+    const char *format;     // The format.
+    PyObject *read;         // The read handler.
+    PyObject *write;        // The write handler.
+    qtgui_pio *next;        // The next in the list.
+};
+
+
+// The head of the list.
+static qtgui_pio *qtgui_pio_head = 0;
+
+
+// Find the entry for the given picture.
+static const qtgui_pio *qtgui_pio_find(QPictureIO *pio)
+{
+    for (const qtgui_pio *p = qtgui_pio_head; p; p = p->next)
+        if (qstrcmp(pio->format(), p->format) == 0)
+            return p;
+
+    return 0;
+}
+
+
+// This is the C++ read handler.
+static void qtgui_pio_read(QPictureIO *pio)
+{
+    const qtgui_pio *p = qtgui_pio_find(pio);
+
+    if (p && p->read)
+    {
+        Py_XDECREF(sipCallMethod(0, p->read, "D", pio, sipType_QPictureIO, NULL));
+    }
+}
+
+
+// This is the C++ write handler.
+static void qtgui_pio_write(QPictureIO *pio)
+{
+    const qtgui_pio *p = qtgui_pio_find(pio);
+
+    if (p && p->write)
+    {
+        Py_XDECREF(sipCallMethod(0, p->write, "D", pio, sipType_QPictureIO, NULL));
+    }
+}
+%End
+
+public:
+    QPictureIO();
+    QPictureIO(QIODevice *ioDevice, const char *format);
+    QPictureIO(const QString &fileName, const char *format);
+    ~QPictureIO();
+    const QPicture &picture() const;
+    int status() const;
+    const char *format() const;
+    QIODevice *ioDevice() const;
+    QString fileName() const;
+    int quality() const;
+    QString description() const;
+    const char *parameters() const;
+    float gamma() const;
+    void setPicture(const QPicture &);
+    void setStatus(int);
+    void setFormat(const char *);
+    void setIODevice(QIODevice *);
+    void setFileName(const QString &);
+    void setQuality(int);
+    void setDescription(const QString &);
+    void setParameters(const char *);
+    void setGamma(float);
+    bool read() /ReleaseGIL/;
+    bool write() /ReleaseGIL/;
+    static QByteArray pictureFormat(const QString &fileName);
+    static QByteArray pictureFormat(QIODevice *);
+    static QList<QByteArray> inputFormats();
+    static QList<QByteArray> outputFormats();
+    static void defineIOHandler(const char *format, const char *header, const char *flags, SIP_PYCALLABLE read_picture /AllowNone/, SIP_PYCALLABLE write_picture /AllowNone/);
+%MethodCode
+        // Convert None to NULL.
+        if (a3 == Py_None)
+            a3 = 0;
+        
+        if (a4 == Py_None)
+            a4 = 0;
+        
+        // See if we already know about the format.
+        qtgui_pio *p;
+        
+        for (p = qtgui_pio_head; p; p = p->next)
+            if (qstrcmp(a0, p->format) == 0)
+                break;
+        
+        if (!p)
+        {
+            // Handle the new format.
+            p = new qtgui_pio;
+            p->format = qstrdup(a0);
+            p->read = 0;
+            p->write = 0;
+            p->next = qtgui_pio_head;
+        
+            qtgui_pio_head = p;
+        }
+        
+        // Replace the old callables with the new ones.
+        Py_XDECREF(p->read);
+        p->read = a3;
+        Py_XINCREF(p->read);
+        
+        Py_XDECREF(p->write);
+        p->write = a4;
+        Py_XINCREF(p->write);
+        
+        // Install the generic handlers.
+        QPictureIO::defineIOHandler(a0, a1, a2, qtgui_pio_read, qtgui_pio_write);
+%End
+
+private:
+    QPictureIO(const QPictureIO &);
+};
+
+QDataStream &operator<<(QDataStream &in, const QPicture &p /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &in, QPicture &p /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qpixmap.sip b/sip/QtGui/qpixmap.sip
new file mode 100644
index 0000000..7969ca7
--- /dev/null
+++ b/sip/QtGui/qpixmap.sip
@@ -0,0 +1,109 @@
+// qpixmap.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qpixmap.h>
+%End
+
+class QPixmap : QPaintDevice
+{
+%TypeHeaderCode
+#include <qpixmap.h>
+%End
+
+public:
+    QPixmap();
+    QPixmap(int w, int h);
+    explicit QPixmap(const QSize &);
+    QPixmap(const QString &fileName, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    QPixmap(SIP_PYLIST xpm /DocType="list-of-str"/) [(const char **xpm)];
+%MethodCode
+        // The Python interface is a list of strings that make up the image.
+        
+        const char **str = QtGui_ListToArray(a0);
+        
+        if (str)
+        {
+            sipCpp = new sipQPixmap(str);
+            QtGui_DeleteArray(str);
+        }
+        else
+            sipIsErr = 1;
+%End
+
+    QPixmap(const QPixmap &);
+    QPixmap(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new sipQPixmap(a0->value<QPixmap>());
+%End
+
+    virtual ~QPixmap();
+    bool isNull() const;
+    virtual int devType() const;
+    int width() const;
+    int height() const;
+    QSize size() const;
+    QRect rect() const;
+    int depth() const;
+    static int defaultDepth();
+    void fill(const QColor &color = Qt::white);
+    QBitmap mask() const;
+    void setMask(const QBitmap &);
+    bool hasAlpha() const;
+    bool hasAlphaChannel() const;
+    QBitmap createHeuristicMask(bool clipTight = true) const;
+    QBitmap createMaskFromColor(const QColor &maskColor, Qt::MaskMode mode = Qt::MaskInColor) const;
+    QPixmap scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const;
+    QPixmap scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const;
+    QPixmap scaledToWidth(int width, Qt::TransformationMode mode = Qt::FastTransformation) const;
+    QPixmap scaledToHeight(int height, Qt::TransformationMode mode = Qt::FastTransformation) const;
+    QImage toImage() const;
+    static QPixmap fromImage(const QImage &image, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    static QPixmap fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    bool convertFromImage(const QImage &img, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    bool load(const QString &fileName, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    bool loadFromData(const uchar *buf /Array/, uint len /ArraySize/, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    bool loadFromData(const QByteArray &buf, const char *format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor);
+    bool save(const QString &fileName, const char *format = 0, int quality = -1) const;
+    bool save(QIODevice *device, const char *format = 0, int quality = -1) const;
+    QPixmap copy(const QRect &rect = QRect()) const;
+    void detach();
+    bool isQBitmap() const;
+    virtual QPaintEngine *paintEngine() const;
+
+protected:
+    virtual int metric(QPaintDevice::PaintDeviceMetric) const;
+
+public:
+    QPixmap copy(int ax, int ay, int awidth, int aheight) const;
+    QPixmap transformed(const QTransform &transform, Qt::TransformationMode mode = Qt::FastTransformation) const;
+    static QTransform trueMatrix(const QTransform &m, int w, int h);
+    qint64 cacheKey() const;
+    void scroll(int dx, int dy, const QRect &rect, QRegion *exposed /Out/ = 0);
+    void scroll(int dx, int dy, int x, int y, int width, int height, QRegion *exposed /Out/ = 0);
+    void swap(QPixmap &other);
+    qreal devicePixelRatio() const;
+    void setDevicePixelRatio(qreal scaleFactor);
+};
+
+QDataStream &operator<<(QDataStream &, const QPixmap & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QPixmap & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qpixmapcache.sip b/sip/QtGui/qpixmapcache.sip
new file mode 100644
index 0000000..73786cd
--- /dev/null
+++ b/sip/QtGui/qpixmapcache.sip
@@ -0,0 +1,74 @@
+// qpixmapcache.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPixmapCache
+{
+%TypeHeaderCode
+#include <qpixmapcache.h>
+%End
+
+public:
+    class Key
+    {
+%TypeHeaderCode
+#include <qpixmapcache.h>
+%End
+
+    public:
+        Key();
+        Key(const QPixmapCache::Key &other);
+        ~Key();
+        bool operator==(const QPixmapCache::Key &key) const;
+        bool operator!=(const QPixmapCache::Key &key) const;
+    };
+
+    static int cacheLimit();
+    static void clear();
+    static QPixmap find(const QString &key);
+%MethodCode
+        sipRes = new QPixmap;
+        
+        if (!QPixmapCache::find(*a0, sipRes))
+        {
+            delete sipRes;
+            sipRes = 0;
+        }
+%End
+
+    static QPixmap find(const QPixmapCache::Key &key);
+%MethodCode
+        sipRes = new QPixmap;
+        
+        if (!QPixmapCache::find(*a0, sipRes))
+        {
+            delete sipRes;
+            sipRes = 0;
+        }
+%End
+
+    static bool insert(const QString &key, const QPixmap &);
+    static QPixmapCache::Key insert(const QPixmap &pixmap);
+    static void remove(const QString &key);
+    static void remove(const QPixmapCache::Key &key);
+    static bool replace(const QPixmapCache::Key &key, const QPixmap &pixmap);
+    static void setCacheLimit(int);
+};
diff --git a/sip/QtGui/qpolygon.sip b/sip/QtGui/qpolygon.sip
new file mode 100644
index 0000000..ab0137a
--- /dev/null
+++ b/sip/QtGui/qpolygon.sip
@@ -0,0 +1,524 @@
+// qpolygon.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qpolygon.h>
+%End
+
+class QPolygon
+{
+%TypeHeaderCode
+#include <qpolygon.h>
+%End
+
+%TypeCode
+// Set the points of a polygon from a Python list.
+static bool setPointsFromList(QPolygon *poly, PyObject *l)
+{
+    int *coords = new int[PyList_GET_SIZE(l)];
+
+    for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(l); ++i)
+    {
+        coords[i] = SIPLong_AsLong(PyList_GET_ITEM(l, i));
+
+        if (PyErr_Occurred() != NULL)
+        {
+            delete[] coords;
+            return false;
+        }
+    }
+
+    poly->setPoints(PyList_GET_SIZE(l) >> 1, coords);
+
+    delete[] coords;
+    return true;
+}
+%End
+
+%PickleCode
+    PyObject *pl = PyList_New(sipCpp->count() * 2);
+    
+    for (int p = 0, i = 0; i < sipCpp->count(); ++i, p += 2)
+    {
+        int x, y;
+    
+        sipCpp->point(i, &x, &y);
+    
+        PyList_SET_ITEM(pl, p, SIPLong_FromLong(x));
+        PyList_SET_ITEM(pl, p + 1, SIPLong_FromLong(y));
+    }
+    
+    sipRes = Py_BuildValue((char *)"(N)", pl);
+%End
+
+public:
+    QPolygon();
+    ~QPolygon();
+    QPolygon(const QPolygon &a);
+    QPolygon(const QVector<QPoint> &v);
+    QPolygon(const QRect &rectangle, bool closed = false);
+    explicit QPolygon(int asize);
+    QPolygon(SIP_PYLIST points /DocType="list-of-int"/) /NoDerived/;
+%MethodCode
+        sipCpp = new QPolygon();
+        
+        if (!setPointsFromList(sipCpp, a0))
+        {
+            delete sipCpp;
+            sipCpp = 0;
+            sipIsErr = 1;
+        }
+%End
+
+    QPolygon(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QPolygon(a0->value<QPolygon>());
+%End
+
+    void translate(int dx, int dy);
+    QRect boundingRect() const;
+    QPoint point(int index) const;
+    void setPoints(SIP_PYLIST points /DocType="list-of-int"/);
+%MethodCode
+        if (!setPointsFromList(sipCpp, a0))
+            sipIsErr = 1;
+%End
+
+    void setPoints(int firstx, int firsty, ...);
+%MethodCode
+        // Accept at least one pair of integer coordinates.
+        int nPoints = 1 + ((PyTuple_GET_SIZE(a2) + 1) >> 1);
+        
+        int *points = new int[nPoints * 2];
+        
+        points[0] = a0;
+        points[1] = a1;
+        
+        for (SIP_SSIZE_T i = 0; i < PyTuple_GET_SIZE(a2); ++i)
+            points[2 + i] = SIPLong_AsLong(PyTuple_GET_ITEM(a2, i));
+        
+        sipCpp->setPoints(nPoints, points);
+        
+        delete[] points;
+%End
+
+    void putPoints(int index, int firstx, int firsty, ...);
+%MethodCode
+        // Accept at least one pair of integer coordinates.
+        int nPoints = 1 + ((PyTuple_GET_SIZE(a3) + 1) >> 1);
+        
+        int *points = new int[nPoints * 2];
+        
+        points[0] = a1;
+        points[1] = a2;
+        
+        for (SIP_SSIZE_T i = 0; i < PyTuple_GET_SIZE(a3); ++i)
+            points[2 + i] = SIPLong_AsLong(PyTuple_GET_ITEM(a3, i));
+        
+        sipCpp->putPoints(a0, nPoints, points);
+        
+        delete[] points;
+%End
+
+    void putPoints(int index, int nPoints, const QPolygon &fromPolygon, int from = 0);
+    void setPoint(int index, const QPoint &pt);
+    void setPoint(int index, int x, int y);
+    void translate(const QPoint &offset);
+    bool containsPoint(const QPoint &pt, Qt::FillRule fillRule) const;
+    QPolygon united(const QPolygon &r) const;
+    QPolygon intersected(const QPolygon &r) const;
+    QPolygon subtracted(const QPolygon &r) const;
+    QPolygon translated(int dx, int dy) const;
+    QPolygon translated(const QPoint &offset) const;
+// Methods inherited from QVector<QPoint> and Python special methods.
+// Keep in sync with QPolygonF and QXmlStreamAttributes.
+
+void append(const QPoint &value);
+const QPoint &at(int i) const;
+void clear();
+bool contains(const QPoint &value) const;
+int count(const QPoint &value) const;
+int count() const /__len__/;
+void *data();
+
+// Note the Qt return value is discarded as it would require handwritten code
+// and seems pretty useless.
+void fill(const QPoint &value, int size = -1);
+
+QPoint &first();
+int indexOf(const QPoint &value, int from = 0) const;
+void insert(int i, const QPoint &value);
+bool isEmpty() const;
+QPoint &last();
+int lastIndexOf(const QPoint &value, int from = -1) const;
+
+// Note the Qt return type is QVector<QPoint>.
+QPolygon mid(int pos, int length = -1) const;
+
+void prepend(const QPoint &value);
+void remove(int i);
+void remove(int i, int count);
+void replace(int i, const QPoint &value);
+int size() const;
+QPoint value(int i) const;
+QPoint value(int i, const QPoint &defaultValue) const;
+bool operator!=(const QPolygon &other) const;
+
+// Note the Qt return type is QVector<QPoint>.
+QPolygon operator+(const QPolygon &other) const;
+
+QPolygon &operator+=(const QPolygon &other);
+QPolygon &operator+=(const QPoint &value);
+bool operator==(const QPolygon &other) const;
+
+SIP_PYOBJECT operator<<(const QPoint &value);
+%MethodCode
+    *a0 << *a1;
+
+    sipRes = sipArg0;
+    Py_INCREF(sipRes);
+%End
+
+QPoint &operator[](int i);
+%MethodCode
+SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
+
+if (idx < 0)
+    sipIsErr = 1;
+else
+    sipRes = new QPoint(sipCpp->operator[]((int)idx));
+%End
+
+// Some additional Python special methods.
+
+void __setitem__(int i, const QPoint &value);
+%MethodCode
+int len;
+
+len = sipCpp->count();
+
+if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0)
+    sipIsErr = 1;
+else
+    (*sipCpp)[a0] = *a1;
+%End
+
+void __setitem__(SIP_PYSLICE slice, const QPolygon &list);
+%MethodCode
+SIP_SSIZE_T len, start, stop, step, slicelength, i;
+
+len = sipCpp->count();
+
+#if PY_VERSION_HEX >= 0x03020000
+if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+#else
+if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+#endif
+    sipIsErr = 1;
+else
+{
+    int vlen = a1->count();
+
+    if (vlen != slicelength)
+    {
+        sipBadLengthForSlice(vlen, slicelength);
+        sipIsErr = 1;
+    }
+    else
+    {
+        QVector<QPoint>::const_iterator it = a1->begin();
+
+        for (i = 0; i < slicelength; ++i)
+        {
+            (*sipCpp)[start] = *it;
+            start += step;
+            ++it;
+        }
+    }
+}
+%End
+
+void __delitem__(int i);
+%MethodCode
+int len;
+
+len = sipCpp->count();
+
+if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0)
+    sipIsErr = 1;
+else
+    sipCpp->remove(a0);
+%End
+
+void __delitem__(SIP_PYSLICE slice);
+%MethodCode
+SIP_SSIZE_T len, start, stop, step, slicelength, i;
+
+len = sipCpp->count();
+
+#if PY_VERSION_HEX >= 0x03020000
+if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+#else
+if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+#endif
+    sipIsErr = 1;
+else
+    for (i = 0; i < slicelength; ++i)
+    {
+        sipCpp->remove(start);
+        start += step - 1;
+    }
+%End
+
+QPolygon &operator[](SIP_PYSLICE slice);
+%MethodCode
+SIP_SSIZE_T len, start, stop, step, slicelength, i;
+
+len = sipCpp->count();
+
+#if PY_VERSION_HEX >= 0x03020000
+if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+#else
+if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+#endif
+    sipIsErr = 1;
+else
+{
+    sipRes = new QPolygon();
+
+    for (i = 0; i < slicelength; ++i)
+    {
+        (*sipRes) += (*sipCpp)[start];
+        start += step;
+    }
+}
+%End
+
+int __contains__(const QPoint &value);
+%MethodCode
+// It looks like you can't assign QBool to int.
+sipRes = bool(sipCpp->contains(*a0));
+%End
+    void swap(QPolygon &other);
+};
+
+class QPolygonF
+{
+%TypeHeaderCode
+#include <qpolygon.h>
+%End
+
+public:
+    QPolygonF();
+    ~QPolygonF();
+    QPolygonF(const QPolygonF &a);
+    QPolygonF(const QVector<QPointF> &v);
+    QPolygonF(const QRectF &r);
+    QPolygonF(const QPolygon &a);
+    explicit QPolygonF(int asize);
+    void translate(const QPointF &offset);
+    QPolygon toPolygon() const;
+    bool isClosed() const;
+    QRectF boundingRect() const;
+    void translate(qreal dx, qreal dy);
+    bool containsPoint(const QPointF &pt, Qt::FillRule fillRule) const;
+    QPolygonF united(const QPolygonF &r) const;
+    QPolygonF intersected(const QPolygonF &r) const;
+    QPolygonF subtracted(const QPolygonF &r) const;
+    QPolygonF translated(const QPointF &offset) const;
+    QPolygonF translated(qreal dx, qreal dy) const;
+// Methods inherited from QVector<QPointF> and Python special methods.
+// Keep in sync with QPolygon and QXmlStreamAttributes.
+
+void append(const QPointF &value);
+const QPointF &at(int i) const;
+void clear();
+bool contains(const QPointF &value) const;
+int count(const QPointF &value) const;
+int count() const /__len__/;
+void *data();
+
+// Note the Qt return value is discarded as it would require handwritten code
+// and seems pretty useless.
+void fill(const QPointF &value, int size = -1);
+
+QPointF &first();
+int indexOf(const QPointF &value, int from = 0) const;
+void insert(int i, const QPointF &value);
+bool isEmpty() const;
+QPointF &last();
+int lastIndexOf(const QPointF &value, int from = -1) const;
+
+// Note the Qt return type is QVector<QPointF>.
+QPolygonF mid(int pos, int length = -1) const;
+
+void prepend(const QPointF &value);
+void remove(int i);
+void remove(int i, int count);
+void replace(int i, const QPointF &value);
+int size() const;
+QPointF value(int i) const;
+QPointF value(int i, const QPointF &defaultValue) const;
+bool operator!=(const QPolygonF &other) const;
+
+// Note the Qt return type is QVector<QPointF>.
+QPolygonF operator+(const QPolygonF &other) const;
+
+QPolygonF &operator+=(const QPolygonF &other);
+QPolygonF &operator+=(const QPointF &value);
+bool operator==(const QPolygonF &other) const;
+
+SIP_PYOBJECT operator<<(const QPointF &value);
+%MethodCode
+    *a0 << *a1;
+
+    sipRes = sipArg0;
+    Py_INCREF(sipRes);
+%End
+
+QPointF &operator[](int i);
+%MethodCode
+SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
+
+if (idx < 0)
+    sipIsErr = 1;
+else
+    sipRes = new QPointF(sipCpp->operator[]((int)idx));
+%End
+
+// Some additional Python special methods.
+
+void __setitem__(int i, const QPointF &value);
+%MethodCode
+int len;
+
+len = sipCpp->count();
+
+if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0)
+    sipIsErr = 1;
+else
+    (*sipCpp)[a0] = *a1;
+%End
+
+void __setitem__(SIP_PYSLICE slice, const QPolygonF &list);
+%MethodCode
+SIP_SSIZE_T len, start, stop, step, slicelength, i;
+
+len = sipCpp->count();
+
+#if PY_VERSION_HEX >= 0x03020000
+if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+#else
+if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+#endif
+    sipIsErr = 1;
+else
+{
+    int vlen = a1->count();
+
+    if (vlen != slicelength)
+    {
+        sipBadLengthForSlice(vlen, slicelength);
+        sipIsErr = 1;
+    }
+    else
+    {
+        QVector<QPointF>::const_iterator it = a1->begin();
+
+        for (i = 0; i < slicelength; ++i)
+        {
+            (*sipCpp)[start] = *it;
+            start += step;
+            ++it;
+        }
+    }
+}
+%End
+
+void __delitem__(int i);
+%MethodCode
+int len;
+
+len = sipCpp->count();
+
+if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0)
+    sipIsErr = 1;
+else
+    sipCpp->remove(a0);
+%End
+
+void __delitem__(SIP_PYSLICE slice);
+%MethodCode
+SIP_SSIZE_T len, start, stop, step, slicelength, i;
+
+len = sipCpp->count();
+
+#if PY_VERSION_HEX >= 0x03020000
+if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+#else
+if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+#endif
+    sipIsErr = 1;
+else
+    for (i = 0; i < slicelength; ++i)
+    {
+        sipCpp->remove(start);
+        start += step - 1;
+    }
+%End
+
+QPolygonF &operator[](SIP_PYSLICE slice);
+%MethodCode
+SIP_SSIZE_T len, start, stop, step, slicelength, i;
+
+len = sipCpp->count();
+
+#if PY_VERSION_HEX >= 0x03020000
+if (PySlice_GetIndicesEx(a0, len, &start, &stop, &step, &slicelength) < 0)
+#else
+if (PySlice_GetIndicesEx((PySliceObject *)a0, len, &start, &stop, &step, &slicelength) < 0)
+#endif
+    sipIsErr = 1;
+else
+{
+    sipRes = new QPolygonF();
+
+    for (i = 0; i < slicelength; ++i)
+    {
+        (*sipRes) += (*sipCpp)[start];
+        start += step;
+    }
+}
+%End
+
+int __contains__(const QPointF &value);
+%MethodCode
+// It looks like you can't assign QBool to int.
+sipRes = bool(sipCpp->contains(*a0));
+%End
+    void swap(QPolygonF &other);
+};
+
+QDataStream &operator<<(QDataStream &stream, const QPolygonF &array /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &stream, QPolygonF &array /Constrained/) /ReleaseGIL/;
+QDataStream &operator<<(QDataStream &stream, const QPolygon &polygon /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &stream, QPolygon &polygon /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qpygui_qlist.sip b/sip/QtGui/qpygui_qlist.sip
new file mode 100644
index 0000000..836e3e0
--- /dev/null
+++ b/sip/QtGui/qpygui_qlist.sip
@@ -0,0 +1,104 @@
+// This is the SIP interface definition for the QList based mapped types
+// specific to the QtGui module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%MappedType QList<QFontDatabase::WritingSystem>
+        /DocType="list-of-QFontDatabase.WritingSystem"/
+{
+%TypeHeaderCode
+#include <qfontdatabase.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *eobj = sipConvertFromEnum(sipCpp->at(i),
+                sipType_QFontDatabase_WritingSystem);
+
+        if (!eobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, eobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return (PySequence_Check(sipPy)
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+
+    SIP_SSIZE_T len = PySequence_Size(sipPy);
+
+    if (len < 0)
+        return 0;
+
+    QList<QFontDatabase::WritingSystem> *ql = new QList<QFontDatabase::WritingSystem>;
+
+    for (SIP_SSIZE_T i = 0; i < len; ++i)
+    {
+        PyObject *itm = PySequence_ITEM(sipPy, i);
+
+        if (!itm)
+        {
+            delete ql;
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        if (!sipCanConvertToEnum(itm, sipType_QFontDatabase_WritingSystem))
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "element " SIP_SSIZE_T_FORMAT " has type '%s' but 'QFontDatabase.WritingSystem' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        ql->append(
+                static_cast<QFontDatabase::WritingSystem>(
+                        SIPLong_AsLong(itm)));
+
+        Py_DECREF(itm);
+    }
+
+    *sipCppPtr = ql;
+
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtGui/qpygui_qpair.sip b/sip/QtGui/qpygui_qpair.sip
new file mode 100644
index 0000000..4d9d45e
--- /dev/null
+++ b/sip/QtGui/qpygui_qpair.sip
@@ -0,0 +1,216 @@
+// This is the SIP interface definition for the QPair based mapped types
+// specific to the QtGui module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+%If (PyQt_OpenGL)
+
+%MappedType QPair<QOpenGLTexture::Filter, QOpenGLTexture::Filter>
+        /DocType="tuple-of-QOpenGLTexture.Filter-QOpenGLTexture.Filter"/
+{
+%TypeHeaderCode
+#include <QOpenGLTexture>
+%End
+
+%ConvertFromTypeCode
+    return sipBuildResult(NULL, "(FF)", sipCpp->first,
+            sipType_QOpenGLTexture_Filter, sipCpp->second,
+            sipType_QOpenGLTexture_Filter);
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return (PySequence_Check(sipPy)
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+
+    SIP_SSIZE_T len = PySequence_Size(sipPy);
+
+    if (len != 2)
+    {
+        // A negative length should only be an internal error so let the
+        // original exception stand.
+        if (len >= 0)
+            PyErr_Format(PyExc_TypeError,
+                    "sequence has " SIP_SSIZE_T_FORMAT " elements but 2 elements are expected",
+                    len);
+
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyObject *firstobj = PySequence_ITEM(sipPy, 0);
+
+    if (!firstobj)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    if (!sipCanConvertToEnum(firstobj, sipType_QOpenGLTexture_Filter))
+    {
+        PyErr_Format(PyExc_TypeError,
+                "the first element has type '%s' but 'QOpenGLTexture.Filter' is expected",
+                Py_TYPE(firstobj)->tp_name);
+
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyObject *secondobj = PySequence_ITEM(sipPy, 1);
+
+    if (!secondobj)
+    {
+        Py_DECREF(firstobj);
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    if (!sipCanConvertToEnum(secondobj, sipType_QOpenGLTexture_Filter))
+    {
+        PyErr_Format(PyExc_TypeError,
+                "the second element has type '%s' but 'QOpenGLTexture.Filter' is expected",
+                Py_TYPE(secondobj)->tp_name);
+
+        Py_DECREF(secondobj);
+        Py_DECREF(firstobj);
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    *sipCppPtr = new QPair<QOpenGLTexture::Filter, QOpenGLTexture::Filter>(
+            static_cast<QOpenGLTexture::Filter>(SIPLong_AsLong(firstobj)),
+            static_cast<QOpenGLTexture::Filter>(SIPLong_AsLong(secondobj)));
+
+    Py_DECREF(secondobj);
+    Py_DECREF(firstobj);
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+%End
+
+%End
+
+
+%If (Qt_5_2_0 -)
+
+%MappedType QPair<float, float> /DocType="tuple-of-float-float"/
+{
+%TypeHeaderCode
+#include <qpair.h>
+%End
+
+%ConvertFromTypeCode
+    return Py_BuildValue("(ff)", sipCpp->first, sipCpp->second);
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return (PySequence_Check(sipPy)
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+
+    SIP_SSIZE_T len = PySequence_Size(sipPy);
+
+    if (len != 2)
+    {
+        // A negative length should only be an internal error so let the
+        // original exception stand.
+        if (len >= 0)
+            PyErr_Format(PyExc_TypeError,
+                    "sequence has " SIP_SSIZE_T_FORMAT " elements but 2 elements are expected",
+                    len);
+
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyObject *firstobj = PySequence_ITEM(sipPy, 0);
+
+    if (!firstobj)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyErr_Clear();
+    double first = PyFloat_AsDouble(firstobj);
+
+    if (PyErr_Occurred())
+    {
+        PyErr_Format(PyExc_TypeError,
+                "the first element has type '%s' but 'float' is expected",
+                Py_TYPE(firstobj)->tp_name);
+
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyObject *secondobj = PySequence_ITEM(sipPy, 1);
+
+    if (!secondobj)
+    {
+        Py_DECREF(firstobj);
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    PyErr_Clear();
+    double second = PyFloat_AsDouble(secondobj);
+
+    if (PyErr_Occurred())
+    {
+        PyErr_Format(PyExc_TypeError,
+                "the second element has type '%s' but 'float' is expected",
+                Py_TYPE(secondobj)->tp_name);
+
+        Py_DECREF(secondobj);
+        Py_DECREF(firstobj);
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    *sipCppPtr = new QPair<float, float>(first, second);;
+
+    Py_DECREF(secondobj);
+    Py_DECREF(firstobj);
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+%End
diff --git a/sip/QtGui/qpygui_qvector.sip b/sip/QtGui/qpygui_qvector.sip
new file mode 100644
index 0000000..6d430e5
--- /dev/null
+++ b/sip/QtGui/qpygui_qvector.sip
@@ -0,0 +1,440 @@
+// This is the SIP interface definition for the QVector based mapped types
+// specific to the QtGui module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%MappedType QVector<unsigned> /DocType="list-of-int"/
+{
+%TypeHeaderCode
+#include <qvector.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        // Convert to a Python long to make sure it doesn't get interpreted as
+        // a signed value.
+        PyObject *pobj = PyLong_FromUnsignedLong(sipCpp->value(i));
+
+        if (!pobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QVector<unsigned> *qv = new QVector<unsigned>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qv;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        PyErr_Clear();
+        unsigned long val = PyLong_AsUnsignedLongMask(itm);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'int' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete qv;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        qv->append(val);
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = qv;
+
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+%MappedType QVector<float> /DocType="list-of-float"/
+{
+%TypeHeaderCode
+#include <qvector.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *pobj = PyFloat_FromDouble(sipCpp->value(i));
+
+        if (!pobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QVector<float> *qv = new QVector<float>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qv;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        PyErr_Clear();
+        double val = PyFloat_AsDouble(itm);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'int' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete qv;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        qv->append(val);
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = qv;
+
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+%If (PyQt_qreal_double)
+
+%MappedType QVector<qreal> /DocType="list-of-float"/
+{
+%TypeHeaderCode
+#include <qvector.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *pobj = PyFloat_FromDouble(sipCpp->value(i));
+
+        if (!pobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QVector<qreal> *qv = new QVector<qreal>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qv;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        PyErr_Clear();
+        double val = PyFloat_AsDouble(itm);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'int' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete qv;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        qv->append(val);
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = qv;
+
+    return sipGetState(sipTransferObj);
+%End
+};
+
+%End
+
+
+%If (PyQt_Desktop_OpenGL)
+
+%MappedType QVector<GLuint64> /DocType="list-of-int"/
+{
+%TypeHeaderCode
+#include <qvector.h>
+#include <qopengl.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        // Convert to a Python long to make sure it doesn't get interpreted as
+        // a signed value.
+        PyObject *pobj = PyLong_FromUnsignedLongLong(sipCpp->value(i));
+
+        if (!pobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, pobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QVector<GLuint64> *qv = new QVector<GLuint64>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qv;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        PyErr_Clear();
+        unsigned PY_LONG_LONG val = PyLong_AsUnsignedLongLongMask(itm);
+
+        if (PyErr_Occurred())
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'int' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete qv;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        qv->append(val);
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = qv;
+
+    return sipGetState(sipTransferObj);
+%End
+};
+
+%End
diff --git a/sip/QtGui/qquaternion.sip b/sip/QtGui/qquaternion.sip
new file mode 100644
index 0000000..099d295
--- /dev/null
+++ b/sip/QtGui/qquaternion.sip
@@ -0,0 +1,116 @@
+// qquaternion.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qquaternion.h>
+%End
+
+class QQuaternion
+{
+%TypeHeaderCode
+#include <qquaternion.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"dddd", (double)sipCpp->scalar(),
+            (double)sipCpp->x(), (double)sipCpp->y(), (double)sipCpp->z());
+%End
+
+public:
+    QQuaternion();
+    QQuaternion(float aScalar, float xpos, float ypos, float zpos);
+    QQuaternion(float aScalar, const QVector3D &aVector);
+    explicit QQuaternion(const QVector4D &aVector);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        PyObject *scalar = PyFloat_FromDouble(sipCpp->scalar());
+        PyObject *x = PyFloat_FromDouble(sipCpp->x());
+        PyObject *y = PyFloat_FromDouble(sipCpp->y());
+        PyObject *z = PyFloat_FromDouble(sipCpp->z());
+        
+        if (scalar && x && y && z)
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QQuaternion(%R, %R, %R, %R)",
+                    scalar, x, y, z);
+        #else
+            sipRes = PyString_FromString("PyQt5.QtGui.QQuaternion(");
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(scalar));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(x));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(y));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(z));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        }
+        
+        Py_XDECREF(scalar);
+        Py_XDECREF(x);
+        Py_XDECREF(y);
+        Py_XDECREF(z);
+%End
+
+    float length() const;
+    float lengthSquared() const;
+    QQuaternion normalized() const;
+    void normalize();
+    QVector3D rotatedVector(const QVector3D &vector) const;
+    static QQuaternion fromAxisAndAngle(const QVector3D &axis, float angle);
+    static QQuaternion fromAxisAndAngle(float x, float y, float z, float angle);
+    static QQuaternion slerp(const QQuaternion &q1, const QQuaternion &q2, float t);
+    static QQuaternion nlerp(const QQuaternion &q1, const QQuaternion &q2, float t);
+    bool isNull() const;
+    bool isIdentity() const;
+    float x() const;
+    float y() const;
+    float z() const;
+    float scalar() const;
+    void setX(float aX);
+    void setY(float aY);
+    void setZ(float aZ);
+    void setScalar(float aScalar);
+    QQuaternion conjugate() const;
+    QQuaternion &operator+=(const QQuaternion &quaternion);
+    QQuaternion &operator-=(const QQuaternion &quaternion);
+    QQuaternion &operator*=(float factor);
+    QQuaternion &operator*=(const QQuaternion &quaternion);
+    QQuaternion &operator/=(float divisor);
+    void setVector(const QVector3D &aVector);
+    QVector3D vector() const;
+    void setVector(float aX, float aY, float aZ);
+    QVector4D toVector4D() const;
+};
+
+const QQuaternion operator*(const QQuaternion &q1, const QQuaternion &q2);
+bool operator==(const QQuaternion &q1, const QQuaternion &q2);
+bool operator!=(const QQuaternion &q1, const QQuaternion &q2);
+const QQuaternion operator+(const QQuaternion &q1, const QQuaternion &q2);
+const QQuaternion operator-(const QQuaternion &q1, const QQuaternion &q2);
+const QQuaternion operator*(float factor, const QQuaternion &quaternion);
+const QQuaternion operator*(const QQuaternion &quaternion, float factor);
+const QQuaternion operator-(const QQuaternion &quaternion);
+const QQuaternion operator/(const QQuaternion &quaternion, float divisor);
+bool qFuzzyCompare(const QQuaternion &q1, const QQuaternion &q2);
+QDataStream &operator<<(QDataStream &, const QQuaternion & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QQuaternion & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qrawfont.sip b/sip/QtGui/qrawfont.sip
new file mode 100644
index 0000000..62a08bf
--- /dev/null
+++ b/sip/QtGui/qrawfont.sip
@@ -0,0 +1,100 @@
+// qrawfont.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qrawfont.h>
+%End
+
+%If (PyQt_RawFont)
+
+class QRawFont
+{
+%TypeHeaderCode
+#include <qrawfont.h>
+%End
+
+public:
+    enum AntialiasingType
+    {
+        PixelAntialiasing,
+        SubPixelAntialiasing,
+    };
+
+    QRawFont();
+    QRawFont(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting);
+    QRawFont(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting);
+    QRawFont(const QRawFont &other);
+    ~QRawFont();
+    bool isValid() const;
+    bool operator==(const QRawFont &other) const;
+    bool operator!=(const QRawFont &other) const;
+    QString familyName() const;
+    QString styleName() const;
+    QFont::Style style() const;
+    int weight() const;
+    QVector<unsigned int> glyphIndexesForString(const QString &text) const;
+    QVector<QPointF> advancesForGlyphIndexes(const QVector<unsigned int> &glyphIndexes) const;
+%If (Qt_5_1_0 -)
+    QVector<QPointF> advancesForGlyphIndexes(const QVector<unsigned int> &glyphIndexes, QFlags<QRawFont::LayoutFlag> layoutFlags) const;
+%End
+    QImage alphaMapForGlyph(quint32 glyphIndex, QRawFont::AntialiasingType antialiasingType = QRawFont::SubPixelAntialiasing, const QTransform &transform = QTransform()) const;
+    QPainterPath pathForGlyph(quint32 glyphIndex) const;
+    void setPixelSize(qreal pixelSize);
+    qreal pixelSize() const;
+    QFont::HintingPreference hintingPreference() const;
+    qreal ascent() const;
+    qreal descent() const;
+    qreal leading() const;
+    qreal xHeight() const;
+    qreal averageCharWidth() const;
+    qreal maxCharWidth() const;
+    qreal unitsPerEm() const;
+    void loadFromFile(const QString &fileName, qreal pixelSize, QFont::HintingPreference hintingPreference) /ReleaseGIL/;
+    void loadFromData(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) /ReleaseGIL/;
+    bool supportsCharacter(uint ucs4) const;
+    bool supportsCharacter(QChar character) const;
+    QList<QFontDatabase::WritingSystem> supportedWritingSystems() const;
+    QByteArray fontTable(const char *tagName) const;
+    static QRawFont fromFont(const QFont &font, QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any);
+    QRectF boundingRect(quint32 glyphIndex) const;
+    qreal lineThickness() const;
+    qreal underlinePosition() const;
+    void swap(QRawFont &other);
+%If (Qt_5_1_0 -)
+
+    enum LayoutFlag
+    {
+        SeparateAdvances,
+        KernedAdvances,
+        UseDesignMetrics,
+    };
+
+%End
+%If (Qt_5_1_0 -)
+    typedef QFlags<QRawFont::LayoutFlag> LayoutFlags;
+%End
+};
+
+%End
+%If (Qt_5_1_0 -)
+QFlags<QRawFont::LayoutFlag> operator|(QRawFont::LayoutFlag f1, QFlags<QRawFont::LayoutFlag> f2);
+%End
diff --git a/sip/QtGui/qregion.sip b/sip/QtGui/qregion.sip
new file mode 100644
index 0000000..f698902
--- /dev/null
+++ b/sip/QtGui/qregion.sip
@@ -0,0 +1,106 @@
+// qregion.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qregion.h>
+%End
+
+class QRegion
+{
+%TypeHeaderCode
+#include <qregion.h>
+%End
+
+public:
+    enum RegionType
+    {
+        Rectangle,
+        Ellipse,
+    };
+
+    QRegion();
+    QRegion(int x, int y, int w, int h, QRegion::RegionType type = QRegion::Rectangle);
+    QRegion(const QRect &r, QRegion::RegionType type = QRegion::Rectangle);
+    QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill);
+    QRegion(const QBitmap &bitmap);
+    QRegion(const QRegion &region);
+    QRegion(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QRegion(a0->value<QRegion>());
+%End
+
+    ~QRegion();
+    bool isEmpty() const;
+    int __bool__() const;
+%MethodCode
+        sipRes = !sipCpp->isEmpty();
+%End
+
+    bool contains(const QPoint &p) const;
+    int __contains__(const QPoint &p) const;
+%MethodCode
+        sipRes = sipCpp->contains(*a0);
+%End
+
+    bool contains(const QRect &r) const;
+    int __contains__(const QRect &r) const;
+%MethodCode
+        sipRes = sipCpp->contains(*a0);
+%End
+
+    void translate(int dx, int dy);
+    void translate(const QPoint &p);
+    QRegion translated(int dx, int dy) const;
+    QRegion translated(const QPoint &p) const;
+    QRegion united(const QRegion &r) const;
+    QRegion united(const QRect &r) const;
+    QRect boundingRect() const;
+    QVector<QRect> rects() const;
+    const QRegion operator|(const QRegion &r) const;
+    const QRegion operator+(const QRegion &r) const;
+    const QRegion operator+(const QRect &r) const;
+    const QRegion operator&(const QRegion &r) const;
+    const QRegion operator&(const QRect &r) const;
+    const QRegion operator-(const QRegion &r) const;
+    const QRegion operator^(const QRegion &r) const;
+    QRegion &operator|=(const QRegion &r);
+    QRegion &operator+=(const QRegion &r);
+    QRegion &operator+=(const QRect &r);
+    QRegion &operator&=(const QRegion &r);
+    QRegion &operator&=(const QRect &r);
+    QRegion &operator-=(const QRegion &r);
+    QRegion &operator^=(const QRegion &r);
+    bool operator==(const QRegion &r) const;
+    bool operator!=(const QRegion &r) const;
+    QRegion intersected(const QRegion &r) const;
+    QRegion intersected(const QRect &r) const;
+    QRegion subtracted(const QRegion &r) const;
+    QRegion xored(const QRegion &r) const;
+    bool intersects(const QRegion &r) const;
+    bool intersects(const QRect &r) const;
+    int rectCount() const;
+    void swap(QRegion &other);
+    bool isNull() const;
+};
+
+QDataStream &operator<<(QDataStream &, const QRegion & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QRegion & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qrgb.sip b/sip/QtGui/qrgb.sip
new file mode 100644
index 0000000..3d57820
--- /dev/null
+++ b/sip/QtGui/qrgb.sip
@@ -0,0 +1,42 @@
+// qrgb.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qrgb.h>
+%End
+
+typedef unsigned int QRgb;
+int qRed(QRgb rgb);
+int qGreen(QRgb rgb);
+int qBlue(QRgb rgb);
+int qAlpha(QRgb rgb);
+QRgb qRgb(int r, int g, int b);
+QRgb qRgba(int r, int g, int b, int a);
+int qGray(int r, int g, int b);
+int qGray(QRgb rgb);
+bool qIsGray(QRgb rgb);
+%If (Qt_5_3_0 -)
+QRgb qPremultiply(QRgb x);
+%End
+%If (Qt_5_3_0 -)
+QRgb qUnpremultiply(QRgb p);
+%End
diff --git a/sip/QtGui/qscreen.sip b/sip/QtGui/qscreen.sip
new file mode 100644
index 0000000..1251dba
--- /dev/null
+++ b/sip/QtGui/qscreen.sip
@@ -0,0 +1,76 @@
+// qscreen.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QScreen : QObject /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qscreen.h>
+%End
+
+public:
+    QString name() const;
+    int depth() const;
+    QSize size() const;
+    QRect geometry() const;
+    QSizeF physicalSize() const;
+    qreal physicalDotsPerInchX() const;
+    qreal physicalDotsPerInchY() const;
+    qreal physicalDotsPerInch() const;
+    qreal logicalDotsPerInchX() const;
+    qreal logicalDotsPerInchY() const;
+    qreal logicalDotsPerInch() const;
+    QSize availableSize() const;
+    QRect availableGeometry() const;
+    QList<QScreen*> virtualSiblings() const;
+    QSize virtualSize() const;
+    QRect virtualGeometry() const;
+    QSize availableVirtualSize() const;
+    QRect availableVirtualGeometry() const;
+%If (Qt_5_2_0 -)
+    Qt::ScreenOrientation nativeOrientation() const;
+%End
+    Qt::ScreenOrientation primaryOrientation() const;
+    Qt::ScreenOrientation orientation() const;
+    Qt::ScreenOrientations orientationUpdateMask() const;
+    void setOrientationUpdateMask(Qt::ScreenOrientations mask);
+    int angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b) const;
+    QTransform transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &target) const;
+    QRect mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &rect) const;
+    bool isPortrait(Qt::ScreenOrientation orientation) const;
+    bool isLandscape(Qt::ScreenOrientation orientation) const;
+    QPixmap grabWindow(WId window, int x = 0, int y = 0, int width = -1, int height = -1);
+    qreal refreshRate() const;
+    qreal devicePixelRatio() const;
+
+signals:
+    void geometryChanged(const QRect &geometry);
+    void physicalDotsPerInchChanged(qreal dpi);
+    void logicalDotsPerInchChanged(qreal dpi);
+    void primaryOrientationChanged(Qt::ScreenOrientation orientation);
+    void orientationChanged(Qt::ScreenOrientation orientation);
+    void refreshRateChanged(qreal refreshRate);
+    void physicalSizeChanged(const QSizeF &size);
+    void virtualGeometryChanged(const QRect &rect);
+
+private:
+    QScreen(const QScreen &);
+};
diff --git a/sip/QtGui/qsessionmanager.sip b/sip/QtGui/qsessionmanager.sip
new file mode 100644
index 0000000..f3b4e6c
--- /dev/null
+++ b/sip/QtGui/qsessionmanager.sip
@@ -0,0 +1,62 @@
+// qsessionmanager.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_SessionManager)
+
+class QSessionManager : QObject
+{
+%TypeHeaderCode
+#include <qsessionmanager.h>
+%End
+
+    QSessionManager(QGuiApplication *app /TransferThis/, QString &id, QString &key);
+    virtual ~QSessionManager();
+
+public:
+    QString sessionId() const;
+    QString sessionKey() const;
+    bool allowsInteraction();
+    bool allowsErrorInteraction();
+    void release();
+    void cancel();
+
+    enum RestartHint
+    {
+        RestartIfRunning,
+        RestartAnyway,
+        RestartImmediately,
+        RestartNever,
+    };
+
+    void setRestartHint(QSessionManager::RestartHint);
+    QSessionManager::RestartHint restartHint() const;
+    void setRestartCommand(const QStringList &);
+    QStringList restartCommand() const;
+    void setDiscardCommand(const QStringList &);
+    QStringList discardCommand() const;
+    void setManagerProperty(const QString &name, const QString &value);
+    void setManagerProperty(const QString &name, const QStringList &value);
+    bool isPhase2() const;
+    void requestPhase2();
+};
+
+%End
diff --git a/sip/QtGui/qstandarditemmodel.sip b/sip/QtGui/qstandarditemmodel.sip
new file mode 100644
index 0000000..6f48d08
--- /dev/null
+++ b/sip/QtGui/qstandarditemmodel.sip
@@ -0,0 +1,207 @@
+// qstandarditemmodel.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qstandarditemmodel.h>
+%End
+
+class QStandardItemModel : QAbstractItemModel
+{
+%TypeHeaderCode
+#include <qstandarditemmodel.h>
+%End
+
+public:
+    explicit QStandardItemModel(QObject *parent /TransferThis/ = 0);
+    QStandardItemModel(int rows, int columns, QObject *parent /TransferThis/ = 0);
+    virtual ~QStandardItemModel();
+    virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+    virtual QModelIndex parent(const QModelIndex &child) const;
+    QObject *parent() const;
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
+    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+    virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+    virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+    virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole);
+    virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+    void clear();
+    virtual Qt::DropActions supportedDropActions() const;
+    virtual QMap<int, QVariant> itemData(const QModelIndex &index) const;
+    virtual bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles);
+    virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+    QStandardItem *itemFromIndex(const QModelIndex &index) const;
+    QModelIndex indexFromItem(const QStandardItem *item) const;
+    QStandardItem *item(int row, int column = 0) const;
+    void setItem(int row, int column, QStandardItem *item /Transfer/);
+    void setItem(int arow, QStandardItem *aitem /Transfer/);
+    QStandardItem *invisibleRootItem() const /Transfer/;
+    QStandardItem *horizontalHeaderItem(int column) const;
+    void setHorizontalHeaderItem(int column, QStandardItem *item /Transfer/);
+    QStandardItem *verticalHeaderItem(int row) const;
+    void setVerticalHeaderItem(int row, QStandardItem *item /Transfer/);
+    void setHorizontalHeaderLabels(const QStringList &labels);
+    void setVerticalHeaderLabels(const QStringList &labels);
+    void setRowCount(int rows);
+    void setColumnCount(int columns);
+    void appendRow(const QList<QStandardItem*> &items /Transfer/);
+    void appendColumn(const QList<QStandardItem*> &items /Transfer/);
+    void insertRow(int row, const QList<QStandardItem*> &items /Transfer/);
+    void insertColumn(int column, const QList<QStandardItem*> &items /Transfer/);
+    QStandardItem *takeItem(int row, int column = 0) /TransferBack/;
+    QList<QStandardItem*> takeRow(int row) /TransferBack/;
+    QList<QStandardItem*> takeColumn(int column) /TransferBack/;
+    QStandardItem *takeHorizontalHeaderItem(int column) /TransferBack/;
+    QStandardItem *takeVerticalHeaderItem(int row) /TransferBack/;
+    const QStandardItem *itemPrototype() const;
+    void setItemPrototype(const QStandardItem *item /Transfer/);
+    QList<QStandardItem*> findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const;
+    int sortRole() const;
+    void setSortRole(int role);
+    void appendRow(QStandardItem *aitem /Transfer/);
+    void insertRow(int arow, QStandardItem *aitem /Transfer/);
+    bool insertRow(int row, const QModelIndex &parent = QModelIndex());
+    bool insertColumn(int column, const QModelIndex &parent = QModelIndex());
+    virtual QStringList mimeTypes() const;
+    virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/;
+    virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+    virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
+
+signals:
+    void itemChanged(QStandardItem *item);
+
+private:
+    QStandardItemModel(const QStandardItemModel &);
+};
+
+class QStandardItem /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qstandarditemmodel.h>
+%End
+
+public:
+    QStandardItem();
+    explicit QStandardItem(const QString &text);
+    QStandardItem(const QIcon &icon, const QString &text);
+    QStandardItem(int rows, int columns = 1);
+    virtual ~QStandardItem();
+    virtual QVariant data(int role = Qt::UserRole+1) const;
+    virtual void setData(const QVariant &value, int role = Qt::UserRole+1);
+    QString text() const;
+    QIcon icon() const;
+    QString toolTip() const;
+    QString statusTip() const;
+    QString whatsThis() const;
+    QSize sizeHint() const;
+    QFont font() const;
+    Qt::Alignment textAlignment() const;
+    QBrush background() const;
+    QBrush foreground() const;
+    Qt::CheckState checkState() const;
+    QString accessibleText() const;
+    QString accessibleDescription() const;
+    Qt::ItemFlags flags() const;
+    void setFlags(Qt::ItemFlags flags);
+    bool isEnabled() const;
+    void setEnabled(bool enabled);
+    bool isEditable() const;
+    void setEditable(bool editable);
+    bool isSelectable() const;
+    void setSelectable(bool selectable);
+    bool isCheckable() const;
+    void setCheckable(bool checkable);
+    bool isTristate() const;
+    void setTristate(bool tristate);
+    bool isDragEnabled() const;
+    void setDragEnabled(bool dragEnabled);
+    bool isDropEnabled() const;
+    void setDropEnabled(bool dropEnabled);
+    QStandardItem *parent() const;
+    int row() const;
+    int column() const;
+    QModelIndex index() const;
+    QStandardItemModel *model() const;
+    int rowCount() const;
+    void setRowCount(int rows);
+    int columnCount() const;
+    void setColumnCount(int columns);
+    bool hasChildren() const;
+    QStandardItem *child(int row, int column = 0) const;
+    void setChild(int row, int column, QStandardItem *item /Transfer/);
+    void setChild(int arow, QStandardItem *aitem /Transfer/);
+    void insertRow(int row, const QList<QStandardItem*> &items /Transfer/);
+    void insertRow(int arow, QStandardItem *aitem /Transfer/);
+    void insertRows(int row, int count);
+    void insertColumn(int column, const QList<QStandardItem*> &items /Transfer/);
+    void insertColumns(int column, int count);
+    void removeRow(int row);
+    void removeColumn(int column);
+    void removeRows(int row, int count);
+    void removeColumns(int column, int count);
+    QStandardItem *takeChild(int row, int column = 0) /TransferBack/;
+    QList<QStandardItem*> takeRow(int row) /TransferBack/;
+    QList<QStandardItem*> takeColumn(int column) /TransferBack/;
+    void sortChildren(int column, Qt::SortOrder order = Qt::AscendingOrder);
+    virtual QStandardItem *clone() const /Factory/;
+
+    enum ItemType
+    {
+        Type,
+        UserType,
+    };
+
+    virtual int type() const;
+    virtual void read(QDataStream &in);
+    virtual void write(QDataStream &out) const;
+    virtual bool operator<(const QStandardItem &other /NoCopy/) const;
+    void setText(const QString &atext);
+    void setIcon(const QIcon &aicon);
+    void setToolTip(const QString &atoolTip);
+    void setStatusTip(const QString &astatusTip);
+    void setWhatsThis(const QString &awhatsThis);
+    void setSizeHint(const QSize &asizeHint);
+    void setFont(const QFont &afont);
+    void setTextAlignment(Qt::Alignment atextAlignment);
+    void setBackground(const QBrush &abrush);
+    void setForeground(const QBrush &abrush);
+    void setCheckState(Qt::CheckState acheckState);
+    void setAccessibleText(const QString &aaccessibleText);
+    void setAccessibleDescription(const QString &aaccessibleDescription);
+    void appendRow(const QList<QStandardItem*> &aitems /Transfer/);
+    void appendRow(QStandardItem *aitem /Transfer/);
+    void appendColumn(const QList<QStandardItem*> &aitems /Transfer/);
+    void insertRows(int row, const QList<QStandardItem*> &items /Transfer/);
+    void appendRows(const QList<QStandardItem*> &aitems /Transfer/);
+
+protected:
+    QStandardItem(const QStandardItem &other);
+    void emitDataChanged();
+};
+
+QDataStream &operator>>(QDataStream &in, QStandardItem &item /Constrained/) /ReleaseGIL/;
+QDataStream &operator<<(QDataStream &out, const QStandardItem &item /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qstatictext.sip b/sip/QtGui/qstatictext.sip
new file mode 100644
index 0000000..65aa850
--- /dev/null
+++ b/sip/QtGui/qstatictext.sip
@@ -0,0 +1,55 @@
+// qstatictext.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStaticText
+{
+%TypeHeaderCode
+#include <qstatictext.h>
+%End
+
+public:
+    enum PerformanceHint
+    {
+        ModerateCaching,
+        AggressiveCaching,
+    };
+
+    QStaticText();
+    QStaticText(const QString &text);
+    QStaticText(const QStaticText &other);
+    ~QStaticText();
+    void setText(const QString &text);
+    QString text() const;
+    void setTextFormat(Qt::TextFormat textFormat);
+    Qt::TextFormat textFormat() const;
+    void setTextWidth(qreal textWidth);
+    qreal textWidth() const;
+    void setTextOption(const QTextOption &textOption);
+    QTextOption textOption() const;
+    QSizeF size() const;
+    void prepare(const QTransform &matrix = QTransform(), const QFont &font = QFont());
+    void setPerformanceHint(QStaticText::PerformanceHint performanceHint);
+    QStaticText::PerformanceHint performanceHint() const;
+    bool operator==(const QStaticText &) const;
+    bool operator!=(const QStaticText &) const;
+    void swap(QStaticText &other);
+};
diff --git a/sip/QtGui/qstylehints.sip b/sip/QtGui/qstylehints.sip
new file mode 100644
index 0000000..14b0483
--- /dev/null
+++ b/sip/QtGui/qstylehints.sip
@@ -0,0 +1,53 @@
+// qstylehints.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStyleHints : QObject
+{
+%TypeHeaderCode
+#include <qstylehints.h>
+%End
+
+public:
+    int mouseDoubleClickInterval() const;
+    int startDragDistance() const;
+    int startDragTime() const;
+    int startDragVelocity() const;
+    int keyboardInputInterval() const;
+    int keyboardAutoRepeatRate() const;
+    int cursorFlashTime() const;
+    bool showIsFullScreen() const;
+    int passwordMaskDelay() const;
+    qreal fontSmoothingGamma() const;
+    bool useRtlExtensions() const;
+%If (Qt_5_1_0 -)
+    QChar passwordMaskCharacter() const;
+%End
+%If (Qt_5_2_0 -)
+    bool setFocusOnTouchRelease() const;
+%End
+%If (Qt_5_3_0 -)
+    int mousePressAndHoldInterval() const;
+%End
+
+private:
+    QStyleHints();
+};
diff --git a/sip/QtGui/qsurface.sip b/sip/QtGui/qsurface.sip
new file mode 100644
index 0000000..38f6b37
--- /dev/null
+++ b/sip/QtGui/qsurface.sip
@@ -0,0 +1,58 @@
+// qsurface.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSurface /Abstract/
+{
+%TypeHeaderCode
+#include <qsurface.h>
+%End
+
+public:
+    enum SurfaceClass
+    {
+        Window,
+%If (Qt_5_1_0 -)
+        Offscreen,
+%End
+    };
+
+    enum SurfaceType
+    {
+        RasterSurface,
+        OpenGLSurface,
+%If (Qt_5_3_0 -)
+        RasterGLSurface,
+%End
+    };
+
+    virtual ~QSurface();
+    QSurface::SurfaceClass surfaceClass() const;
+    virtual QSurfaceFormat format() const = 0;
+    virtual QSurface::SurfaceType surfaceType() const = 0;
+    virtual QSize size() const = 0;
+%If (Qt_5_3_0 -)
+    bool supportsOpenGL() const;
+%End
+
+protected:
+    explicit QSurface(QSurface::SurfaceClass type);
+};
diff --git a/sip/QtGui/qsurfaceformat.sip b/sip/QtGui/qsurfaceformat.sip
new file mode 100644
index 0000000..f99b5eb
--- /dev/null
+++ b/sip/QtGui/qsurfaceformat.sip
@@ -0,0 +1,127 @@
+// qsurfaceformat.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qsurfaceformat.h>
+%End
+
+class QSurfaceFormat
+{
+%TypeHeaderCode
+#include <qsurfaceformat.h>
+%End
+
+public:
+    enum FormatOption
+    {
+        StereoBuffers,
+        DebugContext,
+        DeprecatedFunctions,
+    };
+
+    typedef QFlags<QSurfaceFormat::FormatOption> FormatOptions;
+
+    enum SwapBehavior
+    {
+        DefaultSwapBehavior,
+        SingleBuffer,
+        DoubleBuffer,
+        TripleBuffer,
+    };
+
+    enum RenderableType
+    {
+        DefaultRenderableType,
+        OpenGL,
+        OpenGLES,
+        OpenVG,
+    };
+
+    enum OpenGLContextProfile
+    {
+        NoProfile,
+        CoreProfile,
+        CompatibilityProfile,
+    };
+
+    QSurfaceFormat();
+    QSurfaceFormat(QFlags<QSurfaceFormat::FormatOption> options);
+    QSurfaceFormat(const QSurfaceFormat &other);
+    ~QSurfaceFormat();
+    void setDepthBufferSize(int size);
+    int depthBufferSize() const;
+    void setStencilBufferSize(int size);
+    int stencilBufferSize() const;
+    void setRedBufferSize(int size);
+    int redBufferSize() const;
+    void setGreenBufferSize(int size);
+    int greenBufferSize() const;
+    void setBlueBufferSize(int size);
+    int blueBufferSize() const;
+    void setAlphaBufferSize(int size);
+    int alphaBufferSize() const;
+    void setSamples(int numSamples);
+    int samples() const;
+    void setSwapBehavior(QSurfaceFormat::SwapBehavior behavior);
+    QSurfaceFormat::SwapBehavior swapBehavior() const;
+    bool hasAlpha() const;
+    void setProfile(QSurfaceFormat::OpenGLContextProfile profile);
+    QSurfaceFormat::OpenGLContextProfile profile() const;
+    void setRenderableType(QSurfaceFormat::RenderableType type);
+    QSurfaceFormat::RenderableType renderableType() const;
+    void setMajorVersion(int majorVersion);
+    int majorVersion() const;
+    void setMinorVersion(int minorVersion);
+    int minorVersion() const;
+    void setStereo(bool enable);
+    void setOption(QFlags<QSurfaceFormat::FormatOption> opt);
+    bool testOption(QFlags<QSurfaceFormat::FormatOption> opt) const;
+    bool stereo() const;
+%If (Qt_5_1_0 -)
+    QPair<int, int> version() const;
+%End
+%If (Qt_5_1_0 -)
+    void setVersion(int major, int minor);
+%End
+%If (Qt_5_3_0 -)
+    void setOptions(QFlags<QSurfaceFormat::FormatOption> options);
+%End
+%If (Qt_5_3_0 -)
+    void setOption(QSurfaceFormat::FormatOption option, bool on = true);
+%End
+%If (Qt_5_3_0 -)
+    bool testOption(QSurfaceFormat::FormatOption option) const;
+%End
+%If (Qt_5_3_0 -)
+    QFlags<QSurfaceFormat::FormatOption> options() const;
+%End
+%If (Qt_5_3_0 -)
+    int swapInterval() const;
+%End
+%If (Qt_5_3_0 -)
+    void setSwapInterval(int interval);
+%End
+};
+
+bool operator==(const QSurfaceFormat &, const QSurfaceFormat &);
+bool operator!=(const QSurfaceFormat &, const QSurfaceFormat &);
+QFlags<QSurfaceFormat::FormatOption> operator|(QSurfaceFormat::FormatOption f1, QFlags<QSurfaceFormat::FormatOption> f2);
diff --git a/sip/QtGui/qsyntaxhighlighter.sip b/sip/QtGui/qsyntaxhighlighter.sip
new file mode 100644
index 0000000..8d665a6
--- /dev/null
+++ b/sip/QtGui/qsyntaxhighlighter.sip
@@ -0,0 +1,89 @@
+// qsyntaxhighlighter.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSyntaxHighlighter : QObject
+{
+%TypeHeaderCode
+#include <qsyntaxhighlighter.h>
+%End
+
+public:
+    explicit QSyntaxHighlighter(QTextDocument *parent /TransferThis/);
+    explicit QSyntaxHighlighter(QObject *parent /TransferThis/);
+    virtual ~QSyntaxHighlighter();
+    void setDocument(QTextDocument *doc /KeepReference/);
+    QTextDocument *document() const;
+
+public slots:
+    void rehighlight();
+    void rehighlightBlock(const QTextBlock &block);
+
+protected:
+    virtual void highlightBlock(const QString &text) = 0;
+    void setFormat(int start, int count, const QTextCharFormat &format);
+    void setFormat(int start, int count, const QColor &color);
+    void setFormat(int start, int count, const QFont &font);
+    QTextCharFormat format(int pos) const;
+    int previousBlockState() const;
+    int currentBlockState() const;
+    void setCurrentBlockState(int newState);
+    void setCurrentBlockUserData(QTextBlockUserData *data /GetWrapper/);
+%MethodCode
+        // Ownership of the user data is with the document not the syntax highlighter.
+        
+        typedef PyObject *(*helper_func)(QObject *, const sipTypeDef *);
+        
+        static helper_func helper = 0;
+        
+        if (!helper)
+            helper = (helper_func)sipImportSymbol("qtgui_wrap_ancestors");
+        
+        QTextDocument *td = sipCpp->document();
+        
+        if (td)
+        {
+            PyObject *py_td = (helper ? helper(td, sipType_QTextDocument) : 0);
+        
+            if (!py_td)
+            {
+                sipIsErr = 1;
+            }
+            else
+            {
+                sipTransferTo(a0Wrapper, py_td);
+                Py_DECREF(py_td);
+            }
+        }
+        
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+        sipCpp->setCurrentBlockUserData(a0);
+        #else
+        sipCpp->sipProtect_setCurrentBlockUserData(a0);
+        #endif
+%End
+
+    QTextBlockUserData *currentBlockUserData() const;
+    QTextBlock currentBlock() const;
+
+private:
+    QSyntaxHighlighter(const QSyntaxHighlighter &);
+};
diff --git a/sip/QtGui/qtextcursor.sip b/sip/QtGui/qtextcursor.sip
new file mode 100644
index 0000000..d5dd611
--- /dev/null
+++ b/sip/QtGui/qtextcursor.sip
@@ -0,0 +1,155 @@
+// qtextcursor.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTextCursor
+{
+%TypeHeaderCode
+#include <qtextcursor.h>
+%End
+
+public:
+    QTextCursor();
+    explicit QTextCursor(QTextDocument *document);
+    explicit QTextCursor(QTextFrame *frame);
+    explicit QTextCursor(const QTextBlock &block);
+    QTextCursor(const QTextCursor &cursor);
+    ~QTextCursor();
+    bool isNull() const;
+
+    enum MoveMode
+    {
+        MoveAnchor,
+        KeepAnchor,
+    };
+
+    void setPosition(int pos, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor);
+    int position() const;
+    int anchor() const;
+    void insertText(const QString &text);
+    void insertText(const QString &text, const QTextCharFormat &format);
+
+    enum MoveOperation
+    {
+        NoMove,
+        Start,
+        Up,
+        StartOfLine,
+        StartOfBlock,
+        StartOfWord,
+        PreviousBlock,
+        PreviousCharacter,
+        PreviousWord,
+        Left,
+        WordLeft,
+        End,
+        Down,
+        EndOfLine,
+        EndOfWord,
+        EndOfBlock,
+        NextBlock,
+        NextCharacter,
+        NextWord,
+        Right,
+        WordRight,
+        NextCell,
+        PreviousCell,
+        NextRow,
+        PreviousRow,
+    };
+
+    bool movePosition(QTextCursor::MoveOperation op, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor, int n = 1);
+    void deleteChar();
+    void deletePreviousChar();
+
+    enum SelectionType
+    {
+        WordUnderCursor,
+        LineUnderCursor,
+        BlockUnderCursor,
+        Document,
+    };
+
+    void select(QTextCursor::SelectionType selection);
+    bool hasSelection() const;
+    bool hasComplexSelection() const;
+    void removeSelectedText();
+    void clearSelection();
+    int selectionStart() const;
+    int selectionEnd() const;
+    QString selectedText() const;
+    QTextDocumentFragment selection() const;
+    void selectedTableCells(int *firstRow, int *numRows, int *firstColumn, int *numColumns) const;
+    QTextBlock block() const;
+    QTextCharFormat charFormat() const;
+    void setCharFormat(const QTextCharFormat &format);
+    void mergeCharFormat(const QTextCharFormat &modifier);
+    QTextBlockFormat blockFormat() const;
+    void setBlockFormat(const QTextBlockFormat &format);
+    void mergeBlockFormat(const QTextBlockFormat &modifier);
+    QTextCharFormat blockCharFormat() const;
+    void setBlockCharFormat(const QTextCharFormat &format);
+    void mergeBlockCharFormat(const QTextCharFormat &modifier);
+    bool atBlockStart() const;
+    bool atBlockEnd() const;
+    bool atStart() const;
+    bool atEnd() const;
+    void insertBlock();
+    void insertBlock(const QTextBlockFormat &format);
+    void insertBlock(const QTextBlockFormat &format, const QTextCharFormat &charFormat);
+    QTextList *insertList(const QTextListFormat &format);
+    QTextList *insertList(QTextListFormat::Style style);
+    QTextList *createList(const QTextListFormat &format);
+    QTextList *createList(QTextListFormat::Style style);
+    QTextList *currentList() const;
+    QTextTable *insertTable(int rows, int cols, const QTextTableFormat &format);
+    QTextTable *insertTable(int rows, int cols);
+    QTextTable *currentTable() const;
+    QTextFrame *insertFrame(const QTextFrameFormat &format);
+    QTextFrame *currentFrame() const;
+    void insertFragment(const QTextDocumentFragment &fragment);
+    void insertHtml(const QString &html);
+    void insertImage(const QTextImageFormat &format);
+    void insertImage(const QTextImageFormat &format, QTextFrameFormat::Position alignment);
+    void insertImage(const QString &name);
+    void insertImage(const QImage &image, const QString &name /DocValue="''"/ = QString());
+    void beginEditBlock();
+    void joinPreviousEditBlock();
+    void endEditBlock();
+    int blockNumber() const;
+    int columnNumber() const;
+    bool operator!=(const QTextCursor &rhs) const;
+    bool operator<(const QTextCursor &rhs) const;
+    bool operator<=(const QTextCursor &rhs) const;
+    bool operator==(const QTextCursor &rhs) const;
+    bool operator>=(const QTextCursor &rhs) const;
+    bool operator>(const QTextCursor &rhs) const;
+    bool isCopyOf(const QTextCursor &other) const;
+    bool visualNavigation() const;
+    void setVisualNavigation(bool b);
+    QTextDocument *document() const;
+    int positionInBlock() const;
+    void setVerticalMovementX(int x);
+    int verticalMovementX() const;
+    void setKeepPositionOnInsert(bool b);
+    bool keepPositionOnInsert() const;
+    void swap(QTextCursor &other);
+};
diff --git a/sip/QtGui/qtextdocument.sip b/sip/QtGui/qtextdocument.sip
new file mode 100644
index 0000000..3e2f168
--- /dev/null
+++ b/sip/QtGui/qtextdocument.sip
@@ -0,0 +1,199 @@
+// qtextdocument.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtextdocument.h>
+%End
+
+namespace Qt
+{
+%TypeHeaderCode
+#include <qtextdocument.h>
+%End
+
+    bool mightBeRichText(const QString &);
+    QString convertFromPlainText(const QString &plain, Qt::WhiteSpaceMode mode = Qt::WhiteSpacePre);
+};
+
+class QTextDocument : QObject
+{
+%TypeHeaderCode
+#include <qtextdocument.h>
+%End
+
+public:
+    explicit QTextDocument(QObject *parent /TransferThis/ = 0);
+    QTextDocument(const QString &text, QObject *parent /TransferThis/ = 0);
+    virtual ~QTextDocument();
+    QTextDocument *clone(QObject *parent /TransferThis/ = 0) const /Factory/;
+    bool isEmpty() const;
+    virtual void clear();
+    void setUndoRedoEnabled(bool enable);
+    bool isUndoRedoEnabled() const;
+    bool isUndoAvailable() const;
+    bool isRedoAvailable() const;
+    void setDocumentLayout(QAbstractTextDocumentLayout *layout /Transfer/);
+    QAbstractTextDocumentLayout *documentLayout() const;
+
+    enum MetaInformation
+    {
+        DocumentTitle,
+        DocumentUrl,
+    };
+
+    void setMetaInformation(QTextDocument::MetaInformation info, const QString &);
+    QString metaInformation(QTextDocument::MetaInformation info) const;
+    QString toHtml(const QByteArray &encoding = QByteArray()) const;
+    void setHtml(const QString &html);
+    QString toPlainText() const;
+    void setPlainText(const QString &text);
+
+    enum FindFlag
+    {
+        FindBackward,
+        FindCaseSensitively,
+        FindWholeWords,
+    };
+
+    typedef QFlags<QTextDocument::FindFlag> FindFlags;
+    QTextCursor find(const QString &subString, int position = 0, QFlags<QTextDocument::FindFlag> options = 0) const;
+    QTextCursor find(const QRegExp &expr, int position = 0, QFlags<QTextDocument::FindFlag> options = 0) const;
+    QTextCursor find(const QString &subString, const QTextCursor &cursor, QFlags<QTextDocument::FindFlag> options = 0) const;
+    QTextCursor find(const QRegExp &expr, const QTextCursor &cursor, QFlags<QTextDocument::FindFlag> options = 0) const;
+    QTextFrame *rootFrame() const;
+    QTextObject *object(int objectIndex) const;
+    QTextObject *objectForFormat(const QTextFormat &) const;
+    QTextBlock findBlock(int pos) const;
+    QTextBlock begin() const;
+    QTextBlock end() const;
+    void setPageSize(const QSizeF &size);
+    QSizeF pageSize() const;
+    void setDefaultFont(const QFont &font);
+    QFont defaultFont() const;
+    int pageCount() const;
+    bool isModified() const;
+%If (PyQt_Printer)
+    void print(QPagedPaintDevice *printer) const /PyName=print_/;
+%End
+%If (Py_v3)
+%If (PyQt_Printer)
+    void print(QPagedPaintDevice *printer) const;
+%End
+%End
+
+    enum ResourceType
+    {
+        HtmlResource,
+        ImageResource,
+        StyleSheetResource,
+        UserResource,
+    };
+
+    QVariant resource(int type, const QUrl &name) const;
+    void addResource(int type, const QUrl &name, const QVariant &resource);
+    QVector<QTextFormat> allFormats() const;
+    void markContentsDirty(int from, int length);
+    void setUseDesignMetrics(bool b);
+    bool useDesignMetrics() const;
+
+signals:
+    void blockCountChanged(int newBlockCount);
+    void contentsChange(int from, int charsRemoves, int charsAdded);
+    void contentsChanged();
+    void cursorPositionChanged(const QTextCursor &cursor);
+    void modificationChanged(bool m);
+    void redoAvailable(bool);
+    void undoAvailable(bool);
+
+public slots:
+    void undo();
+    void redo();
+    void setModified(bool on = true);
+
+protected:
+    virtual QTextObject *createObject(const QTextFormat &f) /Factory/;
+    virtual QVariant loadResource(int type, const QUrl &name);
+
+public:
+    void drawContents(QPainter *p, const QRectF &rect = QRectF());
+    void setTextWidth(qreal width);
+    qreal textWidth() const;
+    qreal idealWidth() const;
+    void adjustSize();
+    QSizeF size() const;
+    int blockCount() const;
+    void setDefaultStyleSheet(const QString &sheet);
+    QString defaultStyleSheet() const;
+    void undo(QTextCursor *cursor);
+    void redo(QTextCursor *cursor);
+    int maximumBlockCount() const;
+    void setMaximumBlockCount(int maximum);
+    QTextOption defaultTextOption() const;
+    void setDefaultTextOption(const QTextOption &option);
+    int revision() const;
+    QTextBlock findBlockByNumber(int blockNumber) const;
+    QTextBlock findBlockByLineNumber(int blockNumber) const;
+    QTextBlock firstBlock() const;
+    QTextBlock lastBlock() const;
+    qreal indentWidth() const;
+    void setIndentWidth(qreal width);
+
+signals:
+    void undoCommandAdded();
+    void documentLayoutChanged();
+
+public:
+    QChar characterAt(int pos) const;
+    qreal documentMargin() const;
+    void setDocumentMargin(qreal margin);
+    int lineCount() const;
+    int characterCount() const;
+    int availableUndoSteps() const;
+    int availableRedoSteps() const;
+
+    enum Stacks
+    {
+        UndoStack,
+        RedoStack,
+        UndoAndRedoStacks,
+    };
+
+    void clearUndoRedoStacks(QTextDocument::Stacks stacks = QTextDocument::UndoAndRedoStacks);
+    Qt::CursorMoveStyle defaultCursorMoveStyle() const;
+    void setDefaultCursorMoveStyle(Qt::CursorMoveStyle style);
+%If (Qt_5_3_0 -)
+    QUrl baseUrl() const;
+%End
+%If (Qt_5_3_0 -)
+    void setBaseUrl(const QUrl &url);
+%End
+
+signals:
+%If (Qt_5_3_0 -)
+    void baseUrlChanged(const QUrl &url);
+%End
+
+private:
+    QTextDocument(const QTextDocument &);
+};
+
+QFlags<QTextDocument::FindFlag> operator|(QTextDocument::FindFlag f1, QFlags<QTextDocument::FindFlag> f2);
diff --git a/sip/QtGui/qtextdocumentfragment.sip b/sip/QtGui/qtextdocumentfragment.sip
new file mode 100644
index 0000000..5ae4a93
--- /dev/null
+++ b/sip/QtGui/qtextdocumentfragment.sip
@@ -0,0 +1,41 @@
+// qtextdocumentfragment.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTextDocumentFragment
+{
+%TypeHeaderCode
+#include <qtextdocumentfragment.h>
+%End
+
+public:
+    QTextDocumentFragment();
+    explicit QTextDocumentFragment(const QTextDocument *document);
+    explicit QTextDocumentFragment(const QTextCursor &range);
+    QTextDocumentFragment(const QTextDocumentFragment &rhs);
+    ~QTextDocumentFragment();
+    bool isEmpty() const;
+    QString toPlainText() const;
+    QString toHtml(const QByteArray &encoding = QByteArray()) const;
+    static QTextDocumentFragment fromPlainText(const QString &plainText);
+    static QTextDocumentFragment fromHtml(const QString &html);
+    static QTextDocumentFragment fromHtml(const QString &html, const QTextDocument *resourceProvider);
+};
diff --git a/sip/QtGui/qtextdocumentwriter.sip b/sip/QtGui/qtextdocumentwriter.sip
new file mode 100644
index 0000000..887df11
--- /dev/null
+++ b/sip/QtGui/qtextdocumentwriter.sip
@@ -0,0 +1,48 @@
+// qtextdocumentwriter.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTextDocumentWriter
+{
+%TypeHeaderCode
+#include <qtextdocumentwriter.h>
+%End
+
+public:
+    QTextDocumentWriter();
+    QTextDocumentWriter(QIODevice *device, const QByteArray &format);
+    QTextDocumentWriter(const QString &fileName, const QByteArray &format = QByteArray());
+    ~QTextDocumentWriter();
+    void setFormat(const QByteArray &format);
+    QByteArray format() const;
+    void setDevice(QIODevice *device);
+    QIODevice *device() const;
+    void setFileName(const QString &fileName);
+    QString fileName() const;
+    bool write(const QTextDocument *document);
+    bool write(const QTextDocumentFragment &fragment);
+    void setCodec(QTextCodec *codec /KeepReference/);
+    QTextCodec *codec() const;
+    static QList<QByteArray> supportedDocumentFormats();
+
+private:
+    QTextDocumentWriter(const QTextDocumentWriter &);
+};
diff --git a/sip/QtGui/qtextformat.sip b/sip/QtGui/qtextformat.sip
new file mode 100644
index 0000000..ff14447
--- /dev/null
+++ b/sip/QtGui/qtextformat.sip
@@ -0,0 +1,548 @@
+// qtextformat.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtextformat.h>
+%End
+
+class QTextLength
+{
+%TypeHeaderCode
+#include <qtextformat.h>
+%End
+
+public:
+    enum Type
+    {
+        VariableLength,
+        FixedLength,
+        PercentageLength,
+    };
+
+    QTextLength();
+    QTextLength::Type type() const;
+    QTextLength(QTextLength::Type atype, qreal avalue);
+    qreal value(qreal maximumLength) const;
+    qreal rawValue() const;
+    bool operator==(const QTextLength &other) const;
+    bool operator!=(const QTextLength &other) const;
+    QTextLength(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QTextLength(a0->value<QTextLength>());
+%End
+};
+
+QDataStream &operator<<(QDataStream &, const QTextLength & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QTextLength & /Constrained/) /ReleaseGIL/;
+
+class QTextFormat
+{
+%TypeHeaderCode
+#include <qtextformat.h>
+%End
+
+public:
+    enum FormatType
+    {
+        InvalidFormat,
+        BlockFormat,
+        CharFormat,
+        ListFormat,
+        TableFormat,
+        FrameFormat,
+        UserFormat,
+    };
+
+    enum ObjectTypes
+    {
+        NoObject,
+        ImageObject,
+        TableObject,
+        TableCellObject,
+        UserObject,
+    };
+
+    enum PageBreakFlag
+    {
+        PageBreak_Auto,
+        PageBreak_AlwaysBefore,
+        PageBreak_AlwaysAfter,
+    };
+
+    typedef QFlags<QTextFormat::PageBreakFlag> PageBreakFlags;
+
+    enum Property
+    {
+        ObjectIndex,
+        CssFloat,
+        LayoutDirection,
+        OutlinePen,
+        BackgroundBrush,
+        ForegroundBrush,
+        BlockAlignment,
+        BlockTopMargin,
+        BlockBottomMargin,
+        BlockLeftMargin,
+        BlockRightMargin,
+        TextIndent,
+        BlockIndent,
+        BlockNonBreakableLines,
+        BlockTrailingHorizontalRulerWidth,
+        FontFamily,
+        FontPointSize,
+        FontSizeAdjustment,
+        FontSizeIncrement,
+        FontWeight,
+        FontItalic,
+        FontUnderline,
+        FontOverline,
+        FontStrikeOut,
+        FontFixedPitch,
+        FontPixelSize,
+        TextUnderlineColor,
+        TextVerticalAlignment,
+        TextOutline,
+        IsAnchor,
+        AnchorHref,
+        AnchorName,
+        ObjectType,
+        ListStyle,
+        ListIndent,
+        FrameBorder,
+        FrameMargin,
+        FramePadding,
+        FrameWidth,
+        FrameHeight,
+        TableColumns,
+        TableColumnWidthConstraints,
+        TableCellSpacing,
+        TableCellPadding,
+        TableCellRowSpan,
+        TableCellColumnSpan,
+        ImageName,
+        ImageWidth,
+        ImageHeight,
+        TextUnderlineStyle,
+        TableHeaderRowCount,
+        FullWidthSelection,
+        PageBreakPolicy,
+        TextToolTip,
+        FrameTopMargin,
+        FrameBottomMargin,
+        FrameLeftMargin,
+        FrameRightMargin,
+        FrameBorderBrush,
+        FrameBorderStyle,
+        BackgroundImageUrl,
+        TabPositions,
+        FirstFontProperty,
+        FontCapitalization,
+        FontLetterSpacing,
+        FontWordSpacing,
+        LastFontProperty,
+        TableCellTopPadding,
+        TableCellBottomPadding,
+        TableCellLeftPadding,
+        TableCellRightPadding,
+        FontStyleHint,
+        FontStyleStrategy,
+        FontKerning,
+        LineHeight,
+        LineHeightType,
+        FontHintingPreference,
+        ListNumberPrefix,
+        ListNumberSuffix,
+        FontStretch,
+        FontLetterSpacingType,
+        UserProperty,
+    };
+
+    QTextFormat();
+    explicit QTextFormat(int type);
+    QTextFormat(const QTextFormat &rhs);
+    ~QTextFormat();
+    void merge(const QTextFormat &other);
+    bool isValid() const;
+    int type() const;
+    int objectIndex() const;
+    void setObjectIndex(int object);
+    QVariant property(int propertyId) const;
+    void setProperty(int propertyId, const QVariant &value);
+    void clearProperty(int propertyId);
+    bool hasProperty(int propertyId) const;
+    bool boolProperty(int propertyId) const;
+    int intProperty(int propertyId) const;
+    qreal doubleProperty(int propertyId) const;
+    QString stringProperty(int propertyId) const;
+    QColor colorProperty(int propertyId) const;
+    QPen penProperty(int propertyId) const;
+    QBrush brushProperty(int propertyId) const;
+    QTextLength lengthProperty(int propertyId) const;
+    QVector<QTextLength> lengthVectorProperty(int propertyId) const;
+    void setProperty(int propertyId, const QVector<QTextLength> &lengths);
+    QMap<int, QVariant> properties() const;
+    int objectType() const;
+    bool isCharFormat() const;
+    bool isBlockFormat() const;
+    bool isListFormat() const;
+    bool isFrameFormat() const;
+    bool isImageFormat() const;
+    bool isTableFormat() const;
+    QTextBlockFormat toBlockFormat() const;
+    QTextCharFormat toCharFormat() const;
+    QTextListFormat toListFormat() const;
+    QTextTableFormat toTableFormat() const;
+    QTextFrameFormat toFrameFormat() const;
+    QTextImageFormat toImageFormat() const;
+    bool operator==(const QTextFormat &rhs) const;
+    bool operator!=(const QTextFormat &rhs) const;
+    QTextFormat(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QTextFormat(a0->value<QTextFormat>());
+%End
+
+    void setLayoutDirection(Qt::LayoutDirection direction);
+    Qt::LayoutDirection layoutDirection() const;
+    void setBackground(const QBrush &brush);
+    QBrush background() const;
+    void clearBackground();
+    void setForeground(const QBrush &brush);
+    QBrush foreground() const;
+    void clearForeground();
+    void setObjectType(int atype);
+    int propertyCount() const;
+    bool isTableCellFormat() const;
+    QTextTableCellFormat toTableCellFormat() const;
+    void swap(QTextFormat &other);
+%If (Qt_5_3_0 -)
+    bool isEmpty() const;
+%End
+};
+
+QDataStream &operator<<(QDataStream &, const QTextFormat & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QTextFormat & /Constrained/) /ReleaseGIL/;
+
+class QTextCharFormat : QTextFormat
+{
+%TypeHeaderCode
+#include <qtextformat.h>
+%End
+
+public:
+    enum VerticalAlignment
+    {
+        AlignNormal,
+        AlignSuperScript,
+        AlignSubScript,
+        AlignMiddle,
+        AlignTop,
+        AlignBottom,
+        AlignBaseline,
+    };
+
+    QTextCharFormat();
+    bool isValid() const;
+    void setFont(const QFont &font);
+    QFont font() const;
+    void setFontFamily(const QString &family);
+    QString fontFamily() const;
+    void setFontPointSize(qreal size);
+    qreal fontPointSize() const;
+    void setFontWeight(int weight);
+    int fontWeight() const;
+    void setFontItalic(bool italic);
+    bool fontItalic() const;
+    void setFontUnderline(bool underline);
+    bool fontUnderline() const;
+    void setFontOverline(bool overline);
+    bool fontOverline() const;
+    void setFontStrikeOut(bool strikeOut);
+    bool fontStrikeOut() const;
+    void setUnderlineColor(const QColor &color);
+    QColor underlineColor() const;
+    void setFontFixedPitch(bool fixedPitch);
+    bool fontFixedPitch() const;
+    void setVerticalAlignment(QTextCharFormat::VerticalAlignment alignment);
+    QTextCharFormat::VerticalAlignment verticalAlignment() const;
+    void setAnchor(bool anchor);
+    bool isAnchor() const;
+    void setAnchorHref(const QString &value);
+    QString anchorHref() const;
+    int tableCellRowSpan() const;
+    int tableCellColumnSpan() const;
+    void setTableCellRowSpan(int atableCellRowSpan);
+    void setTableCellColumnSpan(int atableCellColumnSpan);
+    void setTextOutline(const QPen &pen);
+    QPen textOutline() const;
+
+    enum UnderlineStyle
+    {
+        NoUnderline,
+        SingleUnderline,
+        DashUnderline,
+        DotLine,
+        DashDotLine,
+        DashDotDotLine,
+        WaveUnderline,
+        SpellCheckUnderline,
+    };
+
+    void setUnderlineStyle(QTextCharFormat::UnderlineStyle style);
+    QTextCharFormat::UnderlineStyle underlineStyle() const;
+    void setToolTip(const QString &tip);
+    QString toolTip() const;
+    void setAnchorNames(const QStringList &names);
+    QStringList anchorNames() const;
+    void setFontCapitalization(QFont::Capitalization capitalization);
+    QFont::Capitalization fontCapitalization() const;
+    void setFontLetterSpacing(qreal spacing);
+    qreal fontLetterSpacing() const;
+    void setFontWordSpacing(qreal spacing);
+    qreal fontWordSpacing() const;
+    void setFontStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy = QFont::PreferDefault);
+    void setFontStyleStrategy(QFont::StyleStrategy strategy);
+    QFont::StyleHint fontStyleHint() const;
+    QFont::StyleStrategy fontStyleStrategy() const;
+    void setFontKerning(bool enable);
+    bool fontKerning() const;
+    void setFontHintingPreference(QFont::HintingPreference hintingPreference);
+    QFont::HintingPreference fontHintingPreference() const;
+    int fontStretch() const;
+    void setFontStretch(int factor);
+    void setFontLetterSpacingType(QFont::SpacingType letterSpacingType);
+    QFont::SpacingType fontLetterSpacingType() const;
+%If (Qt_5_3_0 -)
+
+    enum FontPropertiesInheritanceBehavior
+    {
+        FontPropertiesSpecifiedOnly,
+        FontPropertiesAll,
+    };
+
+%End
+%If (Qt_5_3_0 -)
+    void setFont(const QFont &font, QTextCharFormat::FontPropertiesInheritanceBehavior behavior);
+%End
+};
+
+class QTextBlockFormat : QTextFormat
+{
+%TypeHeaderCode
+#include <qtextformat.h>
+%End
+
+public:
+    QTextBlockFormat();
+    bool isValid() const;
+    Qt::Alignment alignment() const;
+    void setTopMargin(qreal margin);
+    qreal topMargin() const;
+    void setBottomMargin(qreal margin);
+    qreal bottomMargin() const;
+    void setLeftMargin(qreal margin);
+    qreal leftMargin() const;
+    void setRightMargin(qreal margin);
+    qreal rightMargin() const;
+    void setTextIndent(qreal margin);
+    qreal textIndent() const;
+    int indent() const;
+    void setNonBreakableLines(bool b);
+    bool nonBreakableLines() const;
+    void setAlignment(Qt::Alignment aalignment);
+    void setIndent(int aindent);
+    void setPageBreakPolicy(QFlags<QTextFormat::PageBreakFlag> flags);
+    QFlags<QTextFormat::PageBreakFlag> pageBreakPolicy() const;
+    void setTabPositions(const QList<QTextOption::Tab> &tabs);
+    QList<QTextOption::Tab> tabPositions() const;
+
+    enum LineHeightTypes
+    {
+        SingleHeight,
+        ProportionalHeight,
+        FixedHeight,
+        MinimumHeight,
+        LineDistanceHeight,
+    };
+
+    void setLineHeight(qreal height, int heightType);
+    qreal lineHeight(qreal scriptLineHeight, qreal scaling) const [qreal (qreal scriptLineHeight, qreal scaling = 1.0e+0)];
+    qreal lineHeight() const;
+    int lineHeightType() const;
+};
+
+class QTextListFormat : QTextFormat
+{
+%TypeHeaderCode
+#include <qtextformat.h>
+%End
+
+public:
+    QTextListFormat();
+    bool isValid() const;
+
+    enum Style
+    {
+        ListDisc,
+        ListCircle,
+        ListSquare,
+        ListDecimal,
+        ListLowerAlpha,
+        ListUpperAlpha,
+        ListLowerRoman,
+        ListUpperRoman,
+    };
+
+    QTextListFormat::Style style() const;
+    int indent() const;
+    void setStyle(QTextListFormat::Style astyle);
+    void setIndent(int aindent);
+    QString numberPrefix() const;
+    QString numberSuffix() const;
+    void setNumberPrefix(const QString &np);
+    void setNumberSuffix(const QString &ns);
+};
+
+class QTextImageFormat : QTextCharFormat
+{
+%TypeHeaderCode
+#include <qtextformat.h>
+%End
+
+public:
+    QTextImageFormat();
+    bool isValid() const;
+    QString name() const;
+    qreal width() const;
+    qreal height() const;
+    void setName(const QString &aname);
+    void setWidth(qreal awidth);
+    void setHeight(qreal aheight);
+};
+
+class QTextFrameFormat : QTextFormat
+{
+%TypeHeaderCode
+#include <qtextformat.h>
+%End
+
+public:
+    QTextFrameFormat();
+    bool isValid() const;
+
+    enum Position
+    {
+        InFlow,
+        FloatLeft,
+        FloatRight,
+    };
+
+    void setPosition(QTextFrameFormat::Position f);
+    QTextFrameFormat::Position position() const;
+    qreal border() const;
+    qreal margin() const;
+    qreal padding() const;
+    void setWidth(const QTextLength &length);
+    QTextLength width() const;
+    QTextLength height() const;
+    void setBorder(qreal aborder);
+    void setMargin(qreal amargin);
+    void setPadding(qreal apadding);
+    void setWidth(qreal awidth);
+    void setHeight(qreal aheight);
+    void setHeight(const QTextLength &aheight);
+    void setPageBreakPolicy(QFlags<QTextFormat::PageBreakFlag> flags);
+    QFlags<QTextFormat::PageBreakFlag> pageBreakPolicy() const;
+
+    enum BorderStyle
+    {
+        BorderStyle_None,
+        BorderStyle_Dotted,
+        BorderStyle_Dashed,
+        BorderStyle_Solid,
+        BorderStyle_Double,
+        BorderStyle_DotDash,
+        BorderStyle_DotDotDash,
+        BorderStyle_Groove,
+        BorderStyle_Ridge,
+        BorderStyle_Inset,
+        BorderStyle_Outset,
+    };
+
+    void setBorderBrush(const QBrush &brush);
+    QBrush borderBrush() const;
+    void setBorderStyle(QTextFrameFormat::BorderStyle style);
+    QTextFrameFormat::BorderStyle borderStyle() const;
+    qreal topMargin() const;
+    qreal bottomMargin() const;
+    qreal leftMargin() const;
+    qreal rightMargin() const;
+    void setTopMargin(qreal amargin);
+    void setBottomMargin(qreal amargin);
+    void setLeftMargin(qreal amargin);
+    void setRightMargin(qreal amargin);
+};
+
+class QTextTableFormat : QTextFrameFormat
+{
+%TypeHeaderCode
+#include <qtextformat.h>
+%End
+
+public:
+    QTextTableFormat();
+    bool isValid() const;
+    int columns() const;
+    void setColumnWidthConstraints(const QVector<QTextLength> &constraints);
+    QVector<QTextLength> columnWidthConstraints() const;
+    void clearColumnWidthConstraints();
+    qreal cellSpacing() const;
+    void setCellSpacing(qreal spacing);
+    qreal cellPadding() const;
+    Qt::Alignment alignment() const;
+    void setColumns(int acolumns);
+    void setCellPadding(qreal apadding);
+    void setAlignment(Qt::Alignment aalignment);
+    void setHeaderRowCount(int count);
+    int headerRowCount() const;
+};
+
+QFlags<QTextFormat::PageBreakFlag> operator|(QTextFormat::PageBreakFlag f1, QFlags<QTextFormat::PageBreakFlag> f2);
+
+class QTextTableCellFormat : QTextCharFormat
+{
+%TypeHeaderCode
+#include <qtextformat.h>
+%End
+
+public:
+    QTextTableCellFormat();
+    bool isValid() const;
+    void setTopPadding(qreal padding);
+    qreal topPadding() const;
+    void setBottomPadding(qreal padding);
+    qreal bottomPadding() const;
+    void setLeftPadding(qreal padding);
+    qreal leftPadding() const;
+    void setRightPadding(qreal padding);
+    qreal rightPadding() const;
+    void setPadding(qreal padding);
+};
diff --git a/sip/QtGui/qtextlayout.sip b/sip/QtGui/qtextlayout.sip
new file mode 100644
index 0000000..b4f0ffe
--- /dev/null
+++ b/sip/QtGui/qtextlayout.sip
@@ -0,0 +1,169 @@
+// qtextlayout.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTextInlineObject
+{
+%TypeHeaderCode
+#include <qtextlayout.h>
+%End
+
+public:
+    bool isValid() const;
+    QRectF rect() const;
+    qreal width() const;
+    qreal ascent() const;
+    qreal descent() const;
+    qreal height() const;
+    Qt::LayoutDirection textDirection() const;
+    void setWidth(qreal w);
+    void setAscent(qreal a);
+    void setDescent(qreal d);
+    int textPosition() const;
+    int formatIndex() const;
+    QTextFormat format() const;
+};
+
+class QTextLayout
+{
+%TypeHeaderCode
+#include <qtextlayout.h>
+%End
+
+public:
+    QTextLayout();
+    QTextLayout(const QString &text);
+    QTextLayout(const QString &text, const QFont &font, QPaintDevice *paintDevice = 0);
+    QTextLayout(const QTextBlock &b);
+    ~QTextLayout();
+    void setFont(const QFont &f);
+    QFont font() const;
+    void setText(const QString &string);
+    QString text() const;
+    void setTextOption(const QTextOption &option);
+    const QTextOption &textOption() const;
+    void setPreeditArea(int position, const QString &text);
+    int preeditAreaPosition() const;
+    QString preeditAreaText() const;
+
+    struct FormatRange
+    {
+%TypeHeaderCode
+#include <qtextlayout.h>
+%End
+
+        int start;
+        int length;
+        QTextCharFormat format;
+    };
+
+    void setAdditionalFormats(const QList<QTextLayout::FormatRange> &overrides);
+    QList<QTextLayout::FormatRange> additionalFormats() const;
+    void clearAdditionalFormats();
+    void setCacheEnabled(bool enable);
+    bool cacheEnabled() const;
+    void beginLayout();
+    void endLayout();
+    QTextLine createLine();
+    int lineCount() const;
+    QTextLine lineAt(int i) const;
+    QTextLine lineForTextPosition(int pos) const;
+
+    enum CursorMode
+    {
+        SkipCharacters,
+        SkipWords,
+    };
+
+    bool isValidCursorPosition(int pos) const;
+    int nextCursorPosition(int oldPos, QTextLayout::CursorMode mode = QTextLayout::SkipCharacters) const;
+    int previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = QTextLayout::SkipCharacters) const;
+    void draw(QPainter *p, const QPointF &pos, const QVector<QTextLayout::FormatRange> &selections /DocValue="list-of-QTextLayout.FormatRange"/ = QVector<QTextLayout::FormatRange>(), const QRectF &clip = QRectF()) const;
+    void drawCursor(QPainter *p, const QPointF &pos, int cursorPosition) const;
+    void drawCursor(QPainter *p, const QPointF &pos, int cursorPosition, int width) const;
+    QPointF position() const;
+    void setPosition(const QPointF &p);
+    QRectF boundingRect() const;
+    qreal minimumWidth() const;
+    qreal maximumWidth() const;
+    void clearLayout();
+    void setCursorMoveStyle(Qt::CursorMoveStyle style);
+    Qt::CursorMoveStyle cursorMoveStyle() const;
+    int leftCursorPosition(int oldPos) const;
+    int rightCursorPosition(int oldPos) const;
+%If (PyQt_RawFont)
+    QList<QGlyphRun> glyphRuns(int from = -1, int length = -1) const;
+%End
+
+private:
+    QTextLayout(const QTextLayout &);
+};
+
+class QTextLine
+{
+%TypeHeaderCode
+#include <qtextlayout.h>
+%End
+
+public:
+    QTextLine();
+    bool isValid() const;
+    QRectF rect() const;
+    qreal x() const;
+    qreal y() const;
+    qreal width() const;
+    qreal ascent() const;
+    qreal descent() const;
+    qreal height() const;
+    qreal naturalTextWidth() const;
+    QRectF naturalTextRect() const;
+
+    enum Edge
+    {
+        Leading,
+        Trailing,
+    };
+
+    enum CursorPosition
+    {
+        CursorBetweenCharacters,
+        CursorOnCharacter,
+    };
+
+    qreal cursorToX(int *cursorPos /In,Out/, QTextLine::Edge edge = QTextLine::Leading) const;
+    int xToCursor(qreal x, QTextLine::CursorPosition edge = QTextLine::CursorBetweenCharacters) const;
+    void setLineWidth(qreal width);
+    void setNumColumns(int columns);
+    void setNumColumns(int columns, qreal alignmentWidth);
+    void setPosition(const QPointF &pos);
+    int textStart() const;
+    int textLength() const;
+    int lineNumber() const;
+    void draw(QPainter *painter, const QPointF &position, const QTextLayout::FormatRange *selection = 0) const;
+    QPointF position() const;
+    qreal leading() const;
+    void setLeadingIncluded(bool included);
+    bool leadingIncluded() const;
+    qreal horizontalAdvance() const;
+%If (PyQt_RawFont)
+    QList<QGlyphRun> glyphRuns(int from = -1, int length = -1) const;
+%End
+};
diff --git a/sip/QtGui/qtextlist.sip b/sip/QtGui/qtextlist.sip
new file mode 100644
index 0000000..50430fb
--- /dev/null
+++ b/sip/QtGui/qtextlist.sip
@@ -0,0 +1,44 @@
+// qtextlist.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTextList : QTextBlockGroup
+{
+%TypeHeaderCode
+#include <qtextlist.h>
+%End
+
+public:
+    explicit QTextList(QTextDocument *doc);
+    virtual ~QTextList();
+    int count() const /__len__/;
+    QTextBlock item(int i) const;
+    int itemNumber(const QTextBlock &) const;
+    QString itemText(const QTextBlock &) const;
+    void removeItem(int i);
+    void remove(const QTextBlock &);
+    void add(const QTextBlock &block);
+    QTextListFormat format() const;
+    void setFormat(const QTextListFormat &aformat);
+
+private:
+    QTextList(const QTextList &);
+};
diff --git a/sip/QtGui/qtextobject.sip b/sip/QtGui/qtextobject.sip
new file mode 100644
index 0000000..6b57416
--- /dev/null
+++ b/sip/QtGui/qtextobject.sip
@@ -0,0 +1,307 @@
+// qtextobject.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTextObject : QObject
+{
+%TypeHeaderCode
+#include <qtextobject.h>
+%End
+
+protected:
+    explicit QTextObject(QTextDocument *doc);
+    virtual ~QTextObject();
+    void setFormat(const QTextFormat &format);
+
+public:
+    QTextFormat format() const;
+    int formatIndex() const;
+    QTextDocument *document() const;
+    int objectIndex() const;
+
+private:
+    QTextObject(const QTextObject &);
+};
+
+class QTextBlockGroup : QTextObject
+{
+%TypeHeaderCode
+#include <qtextobject.h>
+%End
+
+protected:
+    explicit QTextBlockGroup(QTextDocument *doc);
+    virtual ~QTextBlockGroup();
+    virtual void blockInserted(const QTextBlock &block);
+    virtual void blockRemoved(const QTextBlock &block);
+    virtual void blockFormatChanged(const QTextBlock &block);
+    QList<QTextBlock> blockList() const;
+
+private:
+    QTextBlockGroup(const QTextBlockGroup &);
+};
+
+class QTextFrame : QTextObject
+{
+%TypeHeaderCode
+#include <qtextobject.h>
+%End
+
+public:
+    explicit QTextFrame(QTextDocument *doc);
+    virtual ~QTextFrame();
+    QTextFrameFormat frameFormat() const;
+    QTextCursor firstCursorPosition() const;
+    QTextCursor lastCursorPosition() const;
+    int firstPosition() const;
+    int lastPosition() const;
+    QList<QTextFrame*> childFrames() const;
+    QTextFrame *parentFrame() const;
+
+    class iterator
+    {
+%TypeHeaderCode
+#include <qtextobject.h>
+%End
+
+    public:
+        iterator();
+        iterator(const QTextFrame::iterator &o);
+        QTextFrame *parentFrame() const;
+        QTextFrame *currentFrame() const;
+        QTextBlock currentBlock() const;
+        bool atEnd() const;
+        bool operator==(const QTextFrame::iterator &o) const;
+        bool operator!=(const QTextFrame::iterator &o) const;
+        QTextFrame::iterator &operator+=(int);
+%MethodCode
+            if (a0 > 0)
+                while (a0--)
+                    (*sipCpp)++;
+            else if (a0 < 0)
+                while (a0++)
+                    (*sipCpp)--;
+%End
+
+        QTextFrame::iterator &operator-=(int);
+%MethodCode
+            if (a0 > 0)
+                while (a0--)
+                    (*sipCpp)--;
+            else if (a0 < 0)
+                while (a0++)
+                    (*sipCpp)++;
+%End
+    };
+
+    typedef QTextFrame::iterator Iterator;
+    QTextFrame::iterator begin() const;
+    QTextFrame::iterator end() const;
+
+private:
+    QTextFrame(const QTextFrame &);
+
+public:
+    void setFrameFormat(const QTextFrameFormat &aformat);
+};
+
+class QTextBlock /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qtextobject.h>
+%End
+
+public:
+    QTextBlock();
+    QTextBlock(const QTextBlock &o);
+    bool isValid() const;
+    bool operator==(const QTextBlock &o) const;
+    bool operator!=(const QTextBlock &o) const;
+    bool operator<(const QTextBlock &o) const;
+    int position() const;
+    int length() const;
+    bool contains(int position) const;
+    QTextLayout *layout() const;
+    QTextBlockFormat blockFormat() const;
+    int blockFormatIndex() const;
+    QTextCharFormat charFormat() const;
+    int charFormatIndex() const;
+    QString text() const;
+    const QTextDocument *document() const;
+    QTextList *textList() const;
+
+    class iterator
+    {
+%TypeHeaderCode
+#include <qtextobject.h>
+%End
+
+    public:
+        iterator();
+        iterator(const QTextBlock::iterator &o);
+        QTextFragment fragment() const;
+        bool atEnd() const;
+        bool operator==(const QTextBlock::iterator &o) const;
+        bool operator!=(const QTextBlock::iterator &o) const;
+        QTextBlock::iterator &operator+=(int);
+%MethodCode
+            if (a0 > 0)
+                while (a0--)
+                    (*sipCpp)++;
+            else if (a0 < 0)
+                while (a0++)
+                    (*sipCpp)--;
+%End
+
+        QTextBlock::iterator &operator-=(int);
+%MethodCode
+            if (a0 > 0)
+                while (a0--)
+                    (*sipCpp)--;
+            else if (a0 < 0)
+                while (a0++)
+                    (*sipCpp)++;
+%End
+    };
+
+    typedef QTextBlock::iterator Iterator;
+    QTextBlock::iterator begin() const;
+    QTextBlock::iterator end() const;
+    QTextBlock next() const;
+    QTextBlock previous() const;
+    QTextBlockUserData *userData() const;
+    void setUserData(QTextBlockUserData *data /GetWrapper/);
+%MethodCode
+        // Ownership of the user data is with the document not the text block.
+        const QTextDocument *td = sipCpp->document();
+        
+        if (td)
+        {
+            PyObject *py_td = qtgui_wrap_ancestors(const_cast<QTextDocument *>(td),
+                    sipType_QTextDocument);
+        
+            if (!py_td)
+            {
+                sipIsErr = 1;
+            }
+            else
+            {
+                sipTransferTo(a0Wrapper, py_td);
+                Py_DECREF(py_td);
+            }
+        }
+        
+        sipCpp->setUserData(a0);
+%End
+
+    int userState() const;
+    void setUserState(int state);
+    void clearLayout();
+    int revision() const;
+    void setRevision(int rev);
+    bool isVisible() const;
+    void setVisible(bool visible);
+    int blockNumber() const;
+    int firstLineNumber() const;
+    void setLineCount(int count);
+    int lineCount() const;
+    Qt::LayoutDirection textDirection() const;
+%If (Qt_5_3_0 -)
+    QVector<QTextLayout::FormatRange> textFormats() const;
+%End
+};
+
+class QTextFragment
+{
+%TypeHeaderCode
+#include <qtextobject.h>
+%End
+
+public:
+    QTextFragment();
+    QTextFragment(const QTextFragment &o);
+    bool isValid() const;
+    bool operator==(const QTextFragment &o) const;
+    bool operator!=(const QTextFragment &o) const;
+    bool operator<(const QTextFragment &o) const;
+    int position() const;
+    int length() const;
+    bool contains(int position) const;
+    QTextCharFormat charFormat() const;
+    int charFormatIndex() const;
+    QString text() const;
+%If (PyQt_RawFont)
+    QList<QGlyphRun> glyphRuns(int from = -1, int length = -1) const;
+%End
+};
+
+class QTextBlockUserData /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qtextobject.h>
+%End
+
+public:
+    virtual ~QTextBlockUserData();
+};
+
+%ModuleHeaderCode
+PyObject *qtgui_wrap_ancestors(QObject *obj, const sipTypeDef *td);
+%End
+
+%ModuleCode
+// Wrap a QObject and ensure that it's ancestors are all wrapped with the
+// correct ownerships.
+static PyObject *qtgui_wrap_ancestors_worker(QObject *obj)
+{
+    if (!obj)
+    {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    PyObject *py_parent = qtgui_wrap_ancestors_worker(obj->parent());
+
+    if (!py_parent)
+        return 0;
+
+    PyObject *py_obj = sipConvertFromType(obj, sipType_QObject,
+            (py_parent != Py_None ? py_parent : 0));
+
+    Py_DECREF(py_parent);
+    return py_obj;
+}
+
+PyObject *qtgui_wrap_ancestors(QObject *obj, const sipTypeDef *td)
+{
+    PyObject *py_parent = qtgui_wrap_ancestors_worker(obj->parent());
+
+    if (!py_parent)
+        return 0;
+
+    PyObject *py_obj = sipConvertFromType(obj, td,
+            (py_parent != Py_None ? py_parent : 0));
+
+    Py_DECREF(py_parent);
+
+    return py_obj;
+}
+%End
diff --git a/sip/QtGui/qtextoption.sip b/sip/QtGui/qtextoption.sip
new file mode 100644
index 0000000..36a18ea
--- /dev/null
+++ b/sip/QtGui/qtextoption.sip
@@ -0,0 +1,101 @@
+// qtextoption.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtextoption.h>
+%End
+
+class QTextOption
+{
+%TypeHeaderCode
+#include <qtextoption.h>
+%End
+
+public:
+    QTextOption();
+    QTextOption(Qt::Alignment alignment);
+    ~QTextOption();
+    QTextOption(const QTextOption &o);
+    Qt::Alignment alignment() const;
+    void setTextDirection(Qt::LayoutDirection aDirection);
+    Qt::LayoutDirection textDirection() const;
+
+    enum WrapMode
+    {
+        NoWrap,
+        WordWrap,
+        ManualWrap,
+        WrapAnywhere,
+        WrapAtWordBoundaryOrAnywhere,
+    };
+
+    void setWrapMode(QTextOption::WrapMode wrap);
+    QTextOption::WrapMode wrapMode() const;
+
+    enum Flag
+    {
+        IncludeTrailingSpaces,
+        ShowTabsAndSpaces,
+        ShowLineAndParagraphSeparators,
+        AddSpaceForLineAndParagraphSeparators,
+        SuppressColors,
+    };
+
+    typedef QFlags<QTextOption::Flag> Flags;
+    QFlags<QTextOption::Flag> flags() const;
+    qreal tabStop() const;
+    void setTabArray(const QList<qreal> &tabStops);
+    QList<qreal> tabArray() const;
+    void setUseDesignMetrics(bool b);
+    bool useDesignMetrics() const;
+    void setAlignment(Qt::Alignment aalignment);
+    void setFlags(QFlags<QTextOption::Flag> aflags);
+    void setTabStop(qreal atabStop);
+
+    enum TabType
+    {
+        LeftTab,
+        RightTab,
+        CenterTab,
+        DelimiterTab,
+    };
+
+    struct Tab
+    {
+%TypeHeaderCode
+#include <qtextoption.h>
+%End
+
+        Tab();
+        Tab(qreal pos, QTextOption::TabType tabType, QChar delim = QChar());
+        bool operator==(const QTextOption::Tab &other) const;
+        bool operator!=(const QTextOption::Tab &other) const;
+        qreal position;
+        QTextOption::TabType type;
+        QChar delimiter;
+    };
+
+    void setTabs(const QList<QTextOption::Tab> &tabStops);
+    QList<QTextOption::Tab> tabs() const;
+};
+
+QFlags<QTextOption::Flag> operator|(QTextOption::Flag f1, QFlags<QTextOption::Flag> f2);
diff --git a/sip/QtGui/qtexttable.sip b/sip/QtGui/qtexttable.sip
new file mode 100644
index 0000000..cee14b8
--- /dev/null
+++ b/sip/QtGui/qtexttable.sip
@@ -0,0 +1,78 @@
+// qtexttable.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTextTableCell
+{
+%TypeHeaderCode
+#include <qtexttable.h>
+%End
+
+public:
+    QTextTableCell();
+    ~QTextTableCell();
+    QTextTableCell(const QTextTableCell &o);
+    QTextCharFormat format() const;
+    void setFormat(const QTextCharFormat &format);
+    int row() const;
+    int column() const;
+    int rowSpan() const;
+    int columnSpan() const;
+    bool isValid() const;
+    QTextCursor firstCursorPosition() const;
+    QTextCursor lastCursorPosition() const;
+    int tableCellFormatIndex() const;
+    bool operator==(const QTextTableCell &other) const;
+    bool operator!=(const QTextTableCell &other) const;
+};
+
+class QTextTable : QTextFrame
+{
+%TypeHeaderCode
+#include <qtexttable.h>
+%End
+
+public:
+    explicit QTextTable(QTextDocument *doc);
+    virtual ~QTextTable();
+    void resize(int rows, int cols);
+    void insertRows(int pos, int num);
+    void insertColumns(int pos, int num);
+    void removeRows(int pos, int num);
+    void removeColumns(int pos, int num);
+    void mergeCells(int row, int col, int numRows, int numCols);
+    void mergeCells(const QTextCursor &cursor);
+    void splitCell(int row, int col, int numRows, int numCols);
+    int rows() const;
+    int columns() const;
+    QTextTableCell cellAt(int row, int col) const;
+    QTextTableCell cellAt(int position) const;
+    QTextTableCell cellAt(const QTextCursor &c) const;
+    QTextCursor rowStart(const QTextCursor &c) const;
+    QTextCursor rowEnd(const QTextCursor &c) const;
+    QTextTableFormat format() const;
+    void setFormat(const QTextTableFormat &aformat);
+    void appendRows(int count);
+    void appendColumns(int count);
+
+private:
+    QTextTable(const QTextTable &);
+};
diff --git a/sip/QtGui/qtouchdevice.sip b/sip/QtGui/qtouchdevice.sip
new file mode 100644
index 0000000..99c522a
--- /dev/null
+++ b/sip/QtGui/qtouchdevice.sip
@@ -0,0 +1,68 @@
+// qtouchdevice.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtouchdevice.h>
+%End
+
+class QTouchDevice
+{
+%TypeHeaderCode
+#include <qtouchdevice.h>
+%End
+
+public:
+    enum DeviceType
+    {
+        TouchScreen,
+        TouchPad,
+    };
+
+    enum CapabilityFlag
+    {
+        Position,
+        Area,
+        Pressure,
+        Velocity,
+        RawPositions,
+        NormalizedPosition,
+    };
+
+    typedef QFlags<QTouchDevice::CapabilityFlag> Capabilities;
+    QTouchDevice();
+    ~QTouchDevice();
+    static QList<const QTouchDevice*> devices();
+    QString name() const;
+    QTouchDevice::DeviceType type() const;
+    QFlags<QTouchDevice::CapabilityFlag> capabilities() const;
+    void setName(const QString &name);
+    void setType(QTouchDevice::DeviceType devType);
+    void setCapabilities(QFlags<QTouchDevice::CapabilityFlag> caps);
+%If (Qt_5_2_0 -)
+    int maximumTouchPoints() const;
+%End
+%If (Qt_5_2_0 -)
+    void setMaximumTouchPoints(int max);
+%End
+};
+
+QFlags<QTouchDevice::CapabilityFlag> operator|(QTouchDevice::CapabilityFlag f1, QFlags<QTouchDevice::CapabilityFlag> f2);
diff --git a/sip/QtGui/qtransform.sip b/sip/QtGui/qtransform.sip
new file mode 100644
index 0000000..0a57062
--- /dev/null
+++ b/sip/QtGui/qtransform.sip
@@ -0,0 +1,122 @@
+// qtransform.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtransform.h>
+%End
+
+class QTransform
+{
+%TypeHeaderCode
+#include <qtransform.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"ddddddddd", sipCpp->m11(), sipCpp->m12(), sipCpp->m13(), sipCpp->m21(), sipCpp->m22(), sipCpp->m23(), sipCpp->m31(), sipCpp->m32(), sipCpp->m33());
+%End
+
+public:
+    enum TransformationType
+    {
+        TxNone,
+        TxTranslate,
+        TxScale,
+        TxRotate,
+        TxShear,
+        TxProject,
+    };
+
+    QTransform();
+    QTransform(qreal m11, qreal m12, qreal m13, qreal m21, qreal m22, qreal m23, qreal m31, qreal m32, qreal m33 = 1.0e+0);
+    QTransform(qreal h11, qreal h12, qreal h13, qreal h21, qreal h22, qreal h23);
+    QTransform::TransformationType type() const;
+    void setMatrix(qreal m11, qreal m12, qreal m13, qreal m21, qreal m22, qreal m23, qreal m31, qreal m32, qreal m33);
+    QTransform inverted(bool *invertible = 0) const;
+    QTransform adjoint() const;
+    QTransform transposed() const;
+    QTransform &translate(qreal dx, qreal dy);
+    QTransform &scale(qreal sx, qreal sy);
+    QTransform &shear(qreal sh, qreal sv);
+    QTransform &rotate(qreal angle, Qt::Axis axis = Qt::ZAxis);
+    QTransform &rotateRadians(qreal angle, Qt::Axis axis = Qt::ZAxis);
+    static bool squareToQuad(const QPolygonF &square, QTransform &result);
+    static bool quadToSquare(const QPolygonF &quad, QTransform &result);
+    static bool quadToQuad(const QPolygonF &one, const QPolygonF &two, QTransform &result);
+    bool operator==(const QTransform &) const;
+    bool operator!=(const QTransform &) const;
+    QTransform &operator*=(const QTransform &);
+    QTransform operator*(const QTransform &o) const;
+    void reset();
+    void map(int x /Constrained/, int y /Constrained/, int *tx, int *ty) const;
+    void map(qreal x, qreal y, qreal *tx, qreal *ty) const;
+    QPoint map(const QPoint &p) const;
+    QPointF map(const QPointF &p) const;
+    QLine map(const QLine &l) const;
+    QLineF map(const QLineF &l) const;
+    QPolygonF map(const QPolygonF &a) const;
+    QPolygon map(const QPolygon &a) const;
+    QRegion map(const QRegion &r) const;
+    QPainterPath map(const QPainterPath &p) const;
+    QPolygon mapToPolygon(const QRect &r) const;
+    QRect mapRect(const QRect &) const;
+    QRectF mapRect(const QRectF &) const;
+    bool isAffine() const;
+    bool isIdentity() const;
+    bool isInvertible() const;
+    bool isScaling() const;
+    bool isRotating() const;
+    bool isTranslating() const;
+    qreal determinant() const;
+    qreal m11() const;
+    qreal m12() const;
+    qreal m13() const;
+    qreal m21() const;
+    qreal m22() const;
+    qreal m23() const;
+    qreal m31() const;
+    qreal m32() const;
+    qreal m33() const;
+    qreal dx() const;
+    qreal dy() const;
+    static QTransform fromTranslate(qreal dx, qreal dy);
+    static QTransform fromScale(qreal dx, qreal dy);
+    QTransform &operator*=(qreal num);
+    QTransform &operator/=(qreal div);
+    QTransform &operator+=(qreal num);
+    QTransform &operator-=(qreal num);
+};
+
+QDataStream &operator<<(QDataStream &, const QTransform & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QTransform & /Constrained/) /ReleaseGIL/;
+QPoint operator*(const QPoint &p, const QTransform &m);
+QPointF operator*(const QPointF &p, const QTransform &m);
+QLineF operator*(const QLineF &l, const QTransform &m);
+QLine operator*(const QLine &l, const QTransform &m);
+QPolygon operator*(const QPolygon &a, const QTransform &m);
+QPolygonF operator*(const QPolygonF &a, const QTransform &m);
+QRegion operator*(const QRegion &r, const QTransform &m);
+QPainterPath operator*(const QPainterPath &p, const QTransform &m);
+QTransform operator*(const QTransform &a, qreal n);
+QTransform operator/(const QTransform &a, qreal n);
+QTransform operator+(const QTransform &a, qreal n);
+QTransform operator-(const QTransform &a, qreal n);
+bool qFuzzyCompare(const QTransform &t1, const QTransform &t2);
diff --git a/sip/QtGui/qvalidator.sip b/sip/QtGui/qvalidator.sip
new file mode 100644
index 0000000..d68150a
--- /dev/null
+++ b/sip/QtGui/qvalidator.sip
@@ -0,0 +1,144 @@
+// qvalidator.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QValidator : QObject
+{
+%TypeHeaderCode
+#include <qvalidator.h>
+%End
+
+public:
+    explicit QValidator(QObject *parent /TransferThis/ = 0);
+    virtual ~QValidator();
+
+    enum State
+    {
+        Invalid,
+        Intermediate,
+        Acceptable,
+    };
+
+    virtual QValidator::State validate(QString & /In,Out/, int & /In,Out/) const = 0;
+    virtual void fixup(QString & /In,Out/) const;
+    void setLocale(const QLocale &locale);
+    QLocale locale() const;
+
+signals:
+    void changed();
+
+private:
+    QValidator(const QValidator &);
+};
+
+class QIntValidator : QValidator
+{
+%TypeHeaderCode
+#include <qvalidator.h>
+%End
+
+public:
+    explicit QIntValidator(QObject *parent /TransferThis/ = 0);
+    QIntValidator(int bottom, int top, QObject *parent /TransferThis/ = 0);
+    virtual ~QIntValidator();
+    virtual QValidator::State validate(QString & /In,Out/, int & /In,Out/) const;
+    virtual void fixup(QString &input /In,Out/) const;
+    void setBottom(int);
+    void setTop(int);
+    virtual void setRange(int bottom, int top);
+    int bottom() const;
+    int top() const;
+
+private:
+    QIntValidator(const QIntValidator &);
+};
+
+class QDoubleValidator : QValidator
+{
+%TypeHeaderCode
+#include <qvalidator.h>
+%End
+
+public:
+    explicit QDoubleValidator(QObject *parent /TransferThis/ = 0);
+    QDoubleValidator(double bottom, double top, int decimals, QObject *parent /TransferThis/ = 0);
+    virtual ~QDoubleValidator();
+    virtual QValidator::State validate(QString & /In,Out/, int & /In,Out/) const;
+    virtual void setRange(double minimum, double maximum, int decimals = 0);
+    void setBottom(double);
+    void setTop(double);
+    void setDecimals(int);
+    double bottom() const;
+    double top() const;
+    int decimals() const;
+
+    enum Notation
+    {
+        StandardNotation,
+        ScientificNotation,
+    };
+
+    void setNotation(QDoubleValidator::Notation);
+    QDoubleValidator::Notation notation() const;
+
+private:
+    QDoubleValidator(const QDoubleValidator &);
+};
+
+class QRegExpValidator : QValidator
+{
+%TypeHeaderCode
+#include <qvalidator.h>
+%End
+
+public:
+    explicit QRegExpValidator(QObject *parent /TransferThis/ = 0);
+    QRegExpValidator(const QRegExp &rx, QObject *parent /TransferThis/ = 0);
+    virtual ~QRegExpValidator();
+    virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const;
+    void setRegExp(const QRegExp &rx);
+    const QRegExp &regExp() const;
+
+private:
+    QRegExpValidator(const QRegExpValidator &);
+};
+
+%If (Qt_5_1_0 -)
+
+class QRegularExpressionValidator : QValidator
+{
+%TypeHeaderCode
+#include <qvalidator.h>
+%End
+
+public:
+    explicit QRegularExpressionValidator(QObject *parent /TransferThis/ = 0);
+    QRegularExpressionValidator(const QRegularExpression &re, QObject *parent /TransferThis/ = 0);
+    virtual ~QRegularExpressionValidator();
+    virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const;
+    QRegularExpression regularExpression() const;
+    void setRegularExpression(const QRegularExpression &re);
+
+private:
+    QRegularExpressionValidator(const QRegularExpressionValidator &);
+};
+
+%End
diff --git a/sip/QtGui/qvector2d.sip b/sip/QtGui/qvector2d.sip
new file mode 100644
index 0000000..2733449
--- /dev/null
+++ b/sip/QtGui/qvector2d.sip
@@ -0,0 +1,107 @@
+// qvector2d.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qvector2d.h>
+%End
+
+class QVector2D
+{
+%TypeHeaderCode
+#include <qvector2d.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"dd", (double)sipCpp->x(), (double)sipCpp->y());
+%End
+
+public:
+    QVector2D();
+    QVector2D(float xpos, float ypos);
+    explicit QVector2D(const QPoint &point);
+    explicit QVector2D(const QPointF &point);
+    explicit QVector2D(const QVector3D &vector);
+    explicit QVector2D(const QVector4D &vector);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        PyObject *x = PyFloat_FromDouble(sipCpp->x());
+        PyObject *y = PyFloat_FromDouble(sipCpp->y());
+        
+        if (x && y)
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QVector2D(%R, %R)", x, y);
+        #else
+            sipRes = PyString_FromString("PyQt5.QtGui.QVector2D(");
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(x));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(y));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        }
+        
+        Py_XDECREF(x);
+        Py_XDECREF(y);
+%End
+
+    float length() const;
+    float lengthSquared() const;
+    QVector2D normalized() const;
+    void normalize();
+    static float dotProduct(const QVector2D &v1, const QVector2D &v2);
+    QVector3D toVector3D() const;
+    QVector4D toVector4D() const;
+    bool isNull() const;
+    float x() const;
+    float y() const;
+    void setX(float aX);
+    void setY(float aY);
+    QVector2D &operator+=(const QVector2D &vector);
+    QVector2D &operator-=(const QVector2D &vector);
+    QVector2D &operator*=(float factor);
+    QVector2D &operator*=(const QVector2D &vector);
+    QVector2D &operator/=(float divisor);
+    QPoint toPoint() const;
+    QPointF toPointF() const;
+%If (Qt_5_1_0 -)
+    float distanceToPoint(const QVector2D &point) const;
+%End
+%If (Qt_5_1_0 -)
+    float distanceToLine(const QVector2D &point, const QVector2D &direction) const;
+%End
+%If (Qt_5_2_0 -)
+    float operator[](int i) const;
+%End
+};
+
+bool operator==(const QVector2D &v1, const QVector2D &v2);
+bool operator!=(const QVector2D &v1, const QVector2D &v2);
+const QVector2D operator+(const QVector2D &v1, const QVector2D &v2);
+const QVector2D operator-(const QVector2D &v1, const QVector2D &v2);
+const QVector2D operator*(float factor, const QVector2D &vector);
+const QVector2D operator*(const QVector2D &vector, float factor);
+const QVector2D operator*(const QVector2D &v1, const QVector2D &v2);
+const QVector2D operator-(const QVector2D &vector);
+const QVector2D operator/(const QVector2D &vector, float divisor);
+bool qFuzzyCompare(const QVector2D &v1, const QVector2D &v2);
+QDataStream &operator<<(QDataStream &, const QVector2D & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QVector2D & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qvector3d.sip b/sip/QtGui/qvector3d.sip
new file mode 100644
index 0000000..1c30584
--- /dev/null
+++ b/sip/QtGui/qvector3d.sip
@@ -0,0 +1,119 @@
+// qvector3d.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qvector3d.h>
+%End
+
+class QVector3D
+{
+%TypeHeaderCode
+#include <qvector3d.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"ddd", (double)sipCpp->x(), (double)sipCpp->y(),
+            (double)sipCpp->z());
+%End
+
+public:
+    QVector3D();
+    QVector3D(float xpos, float ypos, float zpos);
+    explicit QVector3D(const QPoint &point);
+    explicit QVector3D(const QPointF &point);
+    QVector3D(const QVector2D &vector);
+    QVector3D(const QVector2D &vector, float zpos);
+    explicit QVector3D(const QVector4D &vector);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        PyObject *x = PyFloat_FromDouble(sipCpp->x());
+        PyObject *y = PyFloat_FromDouble(sipCpp->y());
+        PyObject *z = PyFloat_FromDouble(sipCpp->z());
+        
+        if (x && y && z)
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QVector3D(%R, %R, %R)", x, y,
+                    z);
+        #else
+            sipRes = PyString_FromString("PyQt5.QtGui.QVector3D(");
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(x));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(y));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(z));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        }
+        
+        Py_XDECREF(x);
+        Py_XDECREF(y);
+        Py_XDECREF(z);
+%End
+
+    float length() const;
+    float lengthSquared() const;
+    QVector3D normalized() const;
+    void normalize();
+    static float dotProduct(const QVector3D &v1, const QVector3D &v2);
+    static QVector3D crossProduct(const QVector3D &v1, const QVector3D &v2);
+    static QVector3D normal(const QVector3D &v1, const QVector3D &v2);
+    static QVector3D normal(const QVector3D &v1, const QVector3D &v2, const QVector3D &v3);
+    float distanceToPlane(const QVector3D &plane, const QVector3D &normal) const;
+    float distanceToPlane(const QVector3D &plane1, const QVector3D &plane2, const QVector3D &plane3) const;
+    float distanceToLine(const QVector3D &point, const QVector3D &direction) const;
+    QVector2D toVector2D() const;
+    QVector4D toVector4D() const;
+    bool isNull() const;
+    float x() const;
+    float y() const;
+    float z() const;
+    void setX(float aX);
+    void setY(float aY);
+    void setZ(float aZ);
+    QVector3D &operator+=(const QVector3D &vector);
+    QVector3D &operator-=(const QVector3D &vector);
+    QVector3D &operator*=(float factor);
+    QVector3D &operator*=(const QVector3D &vector);
+    QVector3D &operator/=(float divisor);
+    QPoint toPoint() const;
+    QPointF toPointF() const;
+%If (Qt_5_1_0 -)
+    float distanceToPoint(const QVector3D &point) const;
+%End
+%If (Qt_5_2_0 -)
+    float operator[](int i) const;
+%End
+};
+
+bool operator==(const QVector3D &v1, const QVector3D &v2);
+bool operator!=(const QVector3D &v1, const QVector3D &v2);
+const QVector3D operator+(const QVector3D &v1, const QVector3D &v2);
+const QVector3D operator-(const QVector3D &v1, const QVector3D &v2);
+const QVector3D operator*(float factor, const QVector3D &vector);
+const QVector3D operator*(const QVector3D &vector, float factor);
+const QVector3D operator*(const QVector3D &v1, const QVector3D &v2);
+const QVector3D operator-(const QVector3D &vector);
+const QVector3D operator/(const QVector3D &vector, float divisor);
+bool qFuzzyCompare(const QVector3D &v1, const QVector3D &v2);
+QDataStream &operator<<(QDataStream &, const QVector3D & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QVector3D & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qvector4d.sip b/sip/QtGui/qvector4d.sip
new file mode 100644
index 0000000..f9e42d5
--- /dev/null
+++ b/sip/QtGui/qvector4d.sip
@@ -0,0 +1,119 @@
+// qvector4d.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qvector4d.h>
+%End
+
+class QVector4D
+{
+%TypeHeaderCode
+#include <qvector4d.h>
+%End
+
+%PickleCode
+    sipRes = Py_BuildValue((char *)"dddd", (double)sipCpp->x(),
+            (double)sipCpp->y(), (double)sipCpp->z(), (double)sipCpp->w());
+%End
+
+public:
+    QVector4D();
+    QVector4D(float xpos, float ypos, float zpos, float wpos);
+    explicit QVector4D(const QPoint &point);
+    explicit QVector4D(const QPointF &point);
+    QVector4D(const QVector2D &vector);
+    QVector4D(const QVector2D &vector, float zpos, float wpos);
+    QVector4D(const QVector3D &vector);
+    QVector4D(const QVector3D &vector, float wpos);
+    SIP_PYOBJECT __repr__() const /DocType="str"/;
+%MethodCode
+        PyObject *x = PyFloat_FromDouble(sipCpp->x());
+        PyObject *y = PyFloat_FromDouble(sipCpp->y());
+        PyObject *z = PyFloat_FromDouble(sipCpp->z());
+        PyObject *w = PyFloat_FromDouble(sipCpp->w());
+        
+        if (x && y && z && w)
+        {
+        #if PY_MAJOR_VERSION >= 3
+            sipRes = PyUnicode_FromFormat("PyQt5.QtGui.QVector4D(%R, %R, %R, %R)", x,
+                    y, z, w);
+        #else
+            sipRes = PyString_FromString("PyQt5.QtGui.QVector4D(");
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(x));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(y));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(z));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(", "));
+            PyString_ConcatAndDel(&sipRes, PyObject_Repr(w));
+            PyString_ConcatAndDel(&sipRes, PyString_FromString(")"));
+        #endif
+        }
+        
+        Py_XDECREF(x);
+        Py_XDECREF(y);
+        Py_XDECREF(z);
+        Py_XDECREF(w);
+%End
+
+    float length() const;
+    float lengthSquared() const;
+    QVector4D normalized() const;
+    void normalize();
+    static float dotProduct(const QVector4D &v1, const QVector4D &v2);
+    QVector2D toVector2D() const;
+    QVector2D toVector2DAffine() const;
+    QVector3D toVector3D() const;
+    QVector3D toVector3DAffine() const;
+    bool isNull() const;
+    float x() const;
+    float y() const;
+    float z() const;
+    float w() const;
+    void setX(float aX);
+    void setY(float aY);
+    void setZ(float aZ);
+    void setW(float aW);
+    QVector4D &operator+=(const QVector4D &vector);
+    QVector4D &operator-=(const QVector4D &vector);
+    QVector4D &operator*=(float factor);
+    QVector4D &operator*=(const QVector4D &vector);
+    QVector4D &operator/=(float divisor);
+    QPoint toPoint() const;
+    QPointF toPointF() const;
+%If (Qt_5_2_0 -)
+    float operator[](int i) const;
+%End
+};
+
+bool operator==(const QVector4D &v1, const QVector4D &v2);
+bool operator!=(const QVector4D &v1, const QVector4D &v2);
+const QVector4D operator+(const QVector4D &v1, const QVector4D &v2);
+const QVector4D operator-(const QVector4D &v1, const QVector4D &v2);
+const QVector4D operator*(float factor, const QVector4D &vector);
+const QVector4D operator*(const QVector4D &vector, float factor);
+const QVector4D operator*(const QVector4D &v1, const QVector4D &v2);
+const QVector4D operator-(const QVector4D &vector);
+const QVector4D operator/(const QVector4D &vector, float divisor);
+bool qFuzzyCompare(const QVector4D &v1, const QVector4D &v2);
+QDataStream &operator<<(QDataStream &, const QVector4D & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QVector4D & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtGui/qwindow.sip b/sip/QtGui/qwindow.sip
new file mode 100644
index 0000000..320eb9c
--- /dev/null
+++ b/sip/QtGui/qwindow.sip
@@ -0,0 +1,225 @@
+// qwindow.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWindow : QObject, QSurface
+{
+%TypeHeaderCode
+#include <qwindow.h>
+%End
+
+public:
+    explicit QWindow(QScreen *screen = 0);
+    explicit QWindow(QWindow *parent /TransferThis/);
+    virtual ~QWindow();
+    void setSurfaceType(QSurface::SurfaceType surfaceType);
+    virtual QSurface::SurfaceType surfaceType() const;
+    bool isVisible() const;
+    void create();
+    WId winId() const;
+    QWindow *parent() const;
+    void setParent(QWindow *parent /Transfer/);
+    bool isTopLevel() const;
+    bool isModal() const;
+    Qt::WindowModality modality() const;
+    void setModality(Qt::WindowModality modality);
+    void setFormat(const QSurfaceFormat &format);
+    virtual QSurfaceFormat format() const;
+    QSurfaceFormat requestedFormat() const;
+    void setFlags(Qt::WindowFlags flags);
+    Qt::WindowFlags flags() const;
+    Qt::WindowType type() const;
+    QString title() const;
+    void setOpacity(qreal level);
+    void requestActivate();
+    bool isActive() const;
+    void reportContentOrientationChange(Qt::ScreenOrientation orientation);
+    Qt::ScreenOrientation contentOrientation() const;
+    qreal devicePixelRatio() const;
+    Qt::WindowState windowState() const;
+    void setWindowState(Qt::WindowState state);
+    void setTransientParent(QWindow *parent);
+    QWindow *transientParent() const;
+
+    enum AncestorMode
+    {
+        ExcludeTransients,
+        IncludeTransients,
+    };
+
+    bool isAncestorOf(const QWindow *child, QWindow::AncestorMode mode = QWindow::IncludeTransients) const;
+    bool isExposed() const;
+    int minimumWidth() const;
+    int minimumHeight() const;
+    int maximumWidth() const;
+    int maximumHeight() const;
+    QSize minimumSize() const;
+    QSize maximumSize() const;
+    QSize baseSize() const;
+    QSize sizeIncrement() const;
+    void setMinimumSize(const QSize &size);
+    void setMaximumSize(const QSize &size);
+    void setBaseSize(const QSize &size);
+    void setSizeIncrement(const QSize &size);
+    void setGeometry(int posx, int posy, int w, int h);
+    void setGeometry(const QRect &rect);
+    QRect geometry() const;
+    QMargins frameMargins() const;
+    QRect frameGeometry() const;
+    QPoint framePosition() const;
+    void setFramePosition(const QPoint &point);
+    int width() const;
+    int height() const;
+    int x() const;
+    int y() const;
+    virtual QSize size() const;
+    QPoint position() const;
+    void setPosition(const QPoint &pt);
+    void setPosition(int posx, int posy);
+    void resize(const QSize &newSize);
+    void resize(int w, int h);
+    void setFilePath(const QString &filePath);
+    QString filePath() const;
+    void setIcon(const QIcon &icon);
+    QIcon icon() const;
+    void destroy();
+    bool setKeyboardGrabEnabled(bool grab);
+    bool setMouseGrabEnabled(bool grab);
+    QScreen *screen() const;
+    void setScreen(QScreen *screen);
+    virtual QObject *focusObject() const;
+    QPoint mapToGlobal(const QPoint &pos) const;
+    QPoint mapFromGlobal(const QPoint &pos) const;
+    QCursor cursor() const;
+    void setCursor(const QCursor &);
+    void unsetCursor();
+
+public slots:
+    void setVisible(bool visible);
+    void show() /ReleaseGIL/;
+    void hide();
+    void showMinimized() /ReleaseGIL/;
+    void showMaximized() /ReleaseGIL/;
+    void showFullScreen() /ReleaseGIL/;
+    void showNormal() /ReleaseGIL/;
+    bool close();
+    void raise() /PyName=raise_/;
+    void lower();
+    void setTitle(const QString &);
+    void setX(int arg);
+    void setY(int arg);
+    void setWidth(int arg);
+    void setHeight(int arg);
+    void setMinimumWidth(int w);
+    void setMinimumHeight(int h);
+    void setMaximumWidth(int w);
+    void setMaximumHeight(int h);
+
+signals:
+    void screenChanged(QScreen *screen);
+    void modalityChanged(Qt::WindowModality modality);
+    void windowStateChanged(Qt::WindowState windowState);
+    void xChanged(int arg);
+    void yChanged(int arg);
+    void widthChanged(int arg);
+    void heightChanged(int arg);
+    void minimumWidthChanged(int arg);
+    void minimumHeightChanged(int arg);
+    void maximumWidthChanged(int arg);
+    void maximumHeightChanged(int arg);
+    void visibleChanged(bool arg);
+    void contentOrientationChanged(Qt::ScreenOrientation orientation);
+    void focusObjectChanged(QObject *object);
+%If (Qt_5_3_0 -)
+    void windowTitleChanged(const QString &title);
+%End
+
+protected:
+    virtual void exposeEvent(QExposeEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void moveEvent(QMoveEvent *);
+    virtual void focusInEvent(QFocusEvent *);
+    virtual void focusOutEvent(QFocusEvent *);
+    virtual void showEvent(QShowEvent *);
+    virtual void hideEvent(QHideEvent *);
+    virtual bool event(QEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void keyReleaseEvent(QKeyEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void mouseDoubleClickEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void wheelEvent(QWheelEvent *);
+    virtual void touchEvent(QTouchEvent *);
+    virtual void tabletEvent(QTabletEvent *);
+
+public:
+%If (Qt_5_1_0 -)
+
+    enum Visibility
+    {
+        Hidden,
+        AutomaticVisibility,
+        Windowed,
+        Minimized,
+        Maximized,
+        FullScreen,
+    };
+
+%End
+%If (Qt_5_1_0 -)
+    QWindow::Visibility visibility() const;
+%End
+%If (Qt_5_1_0 -)
+    void setVisibility(QWindow::Visibility v);
+%End
+%If (Qt_5_1_0 -)
+    qreal opacity() const;
+%End
+%If (Qt_5_1_0 -)
+    void setMask(const QRegion &region);
+%End
+%If (Qt_5_1_0 -)
+    QRegion mask() const;
+%End
+%If (Qt_5_1_0 -)
+    static QWindow *fromWinId(WId id);
+%End
+
+public slots:
+%If (Qt_5_1_0 -)
+    void alert(int msec);
+%End
+
+signals:
+%If (Qt_5_1_0 -)
+    void visibilityChanged(QWindow::Visibility visibility);
+%End
+%If (Qt_5_1_0 -)
+    void activeChanged();
+%End
+%If (Qt_5_1_0 -)
+    void opacityChanged(qreal opacity);
+%End
+
+private:
+    QWindow(const QWindow &);
+};
diff --git a/sip/QtGui/qwindowdefs.sip b/sip/QtGui/qwindowdefs.sip
new file mode 100644
index 0000000..a66631a
--- /dev/null
+++ b/sip/QtGui/qwindowdefs.sip
@@ -0,0 +1,24 @@
+// qwindowdefs.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtGui Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+typedef QList<QWindow*> QWindowList;
+typedef quintptr WId;
diff --git a/sip/QtHelp/QtHelpmod.sip b/sip/QtHelp/QtHelpmod.sip
new file mode 100644
index 0000000..0e59441
--- /dev/null
+++ b/sip/QtHelp/QtHelpmod.sip
@@ -0,0 +1,56 @@
+// QtHelpmod.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtHelp Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtHelp, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtGui/QtGuimod.sip
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qhelpcontentwidget.sip
+%Include qhelpengine.sip
+%Include qhelpenginecore.sip
+%Include qhelpindexwidget.sip
+%Include qhelpsearchengine.sip
+%Include qhelpsearchquerywidget.sip
+%Include qhelpsearchresultwidget.sip
diff --git a/sip/QtHelp/qhelpcontentwidget.sip b/sip/QtHelp/qhelpcontentwidget.sip
new file mode 100644
index 0000000..2b1f475
--- /dev/null
+++ b/sip/QtHelp/qhelpcontentwidget.sip
@@ -0,0 +1,76 @@
+// qhelpcontentwidget.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtHelp Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHelpContentItem /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qhelpcontentwidget.h>
+%End
+
+public:
+    ~QHelpContentItem();
+    QHelpContentItem *child(int row) const;
+    int childCount() const;
+    QString title() const;
+    QUrl url() const;
+    int row() const;
+    QHelpContentItem *parent() const;
+    int childPosition(QHelpContentItem *child) const;
+};
+
+class QHelpContentModel : QAbstractItemModel /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qhelpcontentwidget.h>
+%End
+
+public:
+    virtual ~QHelpContentModel();
+    void createContents(const QString &customFilterName);
+    QHelpContentItem *contentItemAt(const QModelIndex &index) const;
+    virtual QVariant data(const QModelIndex &index, int role) const;
+    virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+    virtual QModelIndex parent(const QModelIndex &index) const;
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
+    bool isCreatingContents() const;
+
+signals:
+    void contentsCreationStarted();
+    void contentsCreated();
+};
+
+class QHelpContentWidget : QTreeView
+{
+%TypeHeaderCode
+#include <qhelpcontentwidget.h>
+%End
+
+public:
+    QModelIndex indexOf(const QUrl &link);
+
+signals:
+    void linkActivated(const QUrl &link);
+
+private:
+    QHelpContentWidget();
+};
diff --git a/sip/QtHelp/qhelpengine.sip b/sip/QtHelp/qhelpengine.sip
new file mode 100644
index 0000000..ff8ec1c
--- /dev/null
+++ b/sip/QtHelp/qhelpengine.sip
@@ -0,0 +1,37 @@
+// qhelpengine.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtHelp Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHelpEngine : QHelpEngineCore
+{
+%TypeHeaderCode
+#include <qhelpengine.h>
+%End
+
+public:
+    QHelpEngine(const QString &collectionFile, QObject *parent /TransferThis/ = 0);
+    virtual ~QHelpEngine();
+    QHelpContentModel *contentModel() const;
+    QHelpIndexModel *indexModel() const;
+    QHelpContentWidget *contentWidget();
+    QHelpIndexWidget *indexWidget();
+    QHelpSearchEngine *searchEngine();
+};
diff --git a/sip/QtHelp/qhelpenginecore.sip b/sip/QtHelp/qhelpenginecore.sip
new file mode 100644
index 0000000..3984b60
--- /dev/null
+++ b/sip/QtHelp/qhelpenginecore.sip
@@ -0,0 +1,102 @@
+// qhelpenginecore.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtHelp Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHelpEngineCore : QObject
+{
+%TypeHeaderCode
+#include <qhelpenginecore.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QHelpIndexModel, &sipType_QHelpIndexModel, -1, 1},
+        {sipName_QHelpSearchEngine, &sipType_QHelpSearchEngine, -1, 2},
+        {sipName_QHelpContentWidget, &sipType_QHelpContentWidget, -1, 3},
+        {sipName_QHelpEngineCore, &sipType_QHelpEngineCore, 8, 4},
+        {sipName_QHelpIndexWidget, &sipType_QHelpIndexWidget, -1, 5},
+        {sipName_QHelpContentModel, &sipType_QHelpContentModel, -1, 6},
+        {sipName_QHelpSearchQueryWidget, &sipType_QHelpSearchQueryWidget, -1, 7},
+        {sipName_QHelpSearchResultWidget, &sipType_QHelpSearchResultWidget, -1, -1},
+        {sipName_QHelpEngine, &sipType_QHelpEngine, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    QHelpEngineCore(const QString &collectionFile, QObject *parent /TransferThis/ = 0);
+    virtual ~QHelpEngineCore();
+    bool setupData();
+    QString collectionFile() const;
+    void setCollectionFile(const QString &fileName);
+    bool copyCollectionFile(const QString &fileName);
+    static QString namespaceName(const QString &documentationFileName);
+    bool registerDocumentation(const QString &documentationFileName);
+    bool unregisterDocumentation(const QString &namespaceName);
+    QString documentationFileName(const QString &namespaceName);
+    QStringList customFilters() const;
+    bool removeCustomFilter(const QString &filterName);
+    bool addCustomFilter(const QString &filterName, const QStringList &attributes);
+    QStringList filterAttributes() const;
+    QStringList filterAttributes(const QString &filterName) const;
+    QString currentFilter() const;
+    void setCurrentFilter(const QString &filterName);
+    QStringList registeredDocumentations() const;
+    QList<QStringList> filterAttributeSets(const QString &namespaceName) const;
+    QList<QUrl> files(const QString namespaceName, const QStringList &filterAttributes, const QString &extensionFilter /DocValue="''"/ = QString());
+    QUrl findFile(const QUrl &url) const;
+    QByteArray fileData(const QUrl &url) const;
+    QMap<QString, QUrl> linksForIdentifier(const QString &id) const;
+    bool removeCustomValue(const QString &key);
+    QVariant customValue(const QString &key, const QVariant &defaultValue /DocValue="None"/ = QVariant()) const;
+    bool setCustomValue(const QString &key, const QVariant &value);
+    static QVariant metaData(const QString &documentationFileName, const QString &name);
+    QString error() const;
+    bool autoSaveFilter() const;
+    void setAutoSaveFilter(bool save);
+
+signals:
+    void setupStarted();
+    void setupFinished();
+    void currentFilterChanged(const QString &newFilter);
+    void warning(const QString &msg);
+};
diff --git a/sip/QtHelp/qhelpindexwidget.sip b/sip/QtHelp/qhelpindexwidget.sip
new file mode 100644
index 0000000..5030961
--- /dev/null
+++ b/sip/QtHelp/qhelpindexwidget.sip
@@ -0,0 +1,59 @@
+// qhelpindexwidget.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtHelp Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHelpIndexModel : QStringListModel /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qhelpindexwidget.h>
+%End
+
+public:
+    void createIndex(const QString &customFilterName);
+    QModelIndex filter(const QString &filter, const QString &wildcard /DocValue="''"/ = QString());
+    QMap<QString, QUrl> linksForKeyword(const QString &keyword) const;
+    bool isCreatingIndex() const;
+
+signals:
+    void indexCreationStarted();
+    void indexCreated();
+
+private:
+    virtual ~QHelpIndexModel();
+};
+
+class QHelpIndexWidget : QListView
+{
+%TypeHeaderCode
+#include <qhelpindexwidget.h>
+%End
+
+signals:
+    void linkActivated(const QUrl &link, const QString &keyword);
+    void linksActivated(const QMap<QString, QUrl> &links, const QString &keyword);
+
+public slots:
+    void filterIndices(const QString &filter, const QString &wildcard /DocValue="''"/ = QString());
+    void activateCurrentItem();
+
+private:
+    QHelpIndexWidget();
+};
diff --git a/sip/QtHelp/qhelpsearchengine.sip b/sip/QtHelp/qhelpsearchengine.sip
new file mode 100644
index 0000000..0db1a4d
--- /dev/null
+++ b/sip/QtHelp/qhelpsearchengine.sip
@@ -0,0 +1,70 @@
+// qhelpsearchengine.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtHelp Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHelpSearchQuery
+{
+%TypeHeaderCode
+#include <qhelpsearchengine.h>
+%End
+
+public:
+    enum FieldName
+    {
+        DEFAULT,
+        FUZZY,
+        WITHOUT,
+        PHRASE,
+        ALL,
+        ATLEAST,
+    };
+
+    QHelpSearchQuery();
+    QHelpSearchQuery(QHelpSearchQuery::FieldName field, const QStringList &wordList);
+};
+
+class QHelpSearchEngine : QObject
+{
+%TypeHeaderCode
+#include <qhelpsearchengine.h>
+%End
+
+public:
+    QHelpSearchEngine(QHelpEngineCore *helpEngine, QObject *parent /TransferThis/ = 0);
+    virtual ~QHelpSearchEngine();
+    QList<QHelpSearchQuery> query() const;
+    QHelpSearchQueryWidget *queryWidget();
+    QHelpSearchResultWidget *resultWidget();
+    int hitCount() const;
+    QList<QPair<QString, QString>> hits(int start, int end) const;
+
+public slots:
+    void reindexDocumentation();
+    void cancelIndexing();
+    void search(const QList<QHelpSearchQuery> &queryList);
+    void cancelSearching();
+
+signals:
+    void indexingStarted();
+    void indexingFinished();
+    void searchingStarted();
+    void searchingFinished(int hits);
+};
diff --git a/sip/QtHelp/qhelpsearchquerywidget.sip b/sip/QtHelp/qhelpsearchquerywidget.sip
new file mode 100644
index 0000000..b1a0b21
--- /dev/null
+++ b/sip/QtHelp/qhelpsearchquerywidget.sip
@@ -0,0 +1,51 @@
+// qhelpsearchquerywidget.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtHelp Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHelpSearchQueryWidget : QWidget
+{
+%TypeHeaderCode
+#include <qhelpsearchquerywidget.h>
+%End
+
+public:
+    QHelpSearchQueryWidget(QWidget *parent /TransferThis/ = 0);
+    virtual ~QHelpSearchQueryWidget();
+    QList<QHelpSearchQuery> query() const;
+    void setQuery(const QList<QHelpSearchQuery> &queryList);
+    void expandExtendedSearch();
+    void collapseExtendedSearch();
+
+signals:
+    void search();
+
+private:
+    virtual void focusInEvent(QFocusEvent *focusEvent);
+    virtual void changeEvent(QEvent *event);
+
+public:
+%If (Qt_5_3_0 -)
+    bool isCompactMode() const;
+%End
+%If (Qt_5_3_0 -)
+    void setCompactMode(bool on);
+%End
+};
diff --git a/sip/QtHelp/qhelpsearchresultwidget.sip b/sip/QtHelp/qhelpsearchresultwidget.sip
new file mode 100644
index 0000000..de75a41
--- /dev/null
+++ b/sip/QtHelp/qhelpsearchresultwidget.sip
@@ -0,0 +1,35 @@
+// qhelpsearchresultwidget.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtHelp Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHelpSearchResultWidget : QWidget /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qhelpsearchresultwidget.h>
+%End
+
+public:
+    virtual ~QHelpSearchResultWidget();
+    QUrl linkAt(const QPoint &point);
+
+signals:
+    void requestShowLink(const QUrl &url);
+};
diff --git a/sip/QtMacExtras/QtMacExtrasmod.sip b/sip/QtMacExtras/QtMacExtrasmod.sip
new file mode 100644
index 0000000..46f03f5
--- /dev/null
+++ b/sip/QtMacExtras/QtMacExtrasmod.sip
@@ -0,0 +1,46 @@
+// This is the SIP interface definition for the QtMacExtras module of PyQt v5.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtMacExtras, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qmacpasteboardmime.sip
diff --git a/sip/QtMacExtras/qmacpasteboardmime.sip b/sip/QtMacExtras/qmacpasteboardmime.sip
new file mode 100644
index 0000000..288b4d3
--- /dev/null
+++ b/sip/QtMacExtras/qmacpasteboardmime.sip
@@ -0,0 +1,60 @@
+// This is the SIP interface definition for QMacPasteboardMime.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QMacPasteboardMime
+{
+%TypeHeaderCode
+#include <qmacpasteboardmime.h>
+%End
+
+public:
+    enum QMacPasteboardMimeType
+    {
+        MIME_DND,
+        MIME_CLIP,
+        MIME_QT_CONVERTOR,
+        MIME_QT3_CONVERTOR,
+        MIME_ALL,
+    };
+
+    explicit QMacPasteboardMime(char t /PyInt/);
+    virtual ~QMacPasteboardMime();
+
+    virtual QString convertorName() = 0;
+    virtual bool canConvert(const QString &mime, QString flav) = 0;
+    virtual QString mimeFor(QString flav) = 0;
+    virtual QString flavorFor(const QString &mime) = 0;
+    virtual QVariant convertToMime(const QString &mime, QList<QByteArray> data,
+            QString flav) = 0;
+    virtual QList<QByteArray> convertFromMime(const QString &mime,
+            QVariant data, QString flav) = 0;
+    virtual int count(QMimeData *mimeData);
+};
+
+
+%ModuleHeaderCode
+#include <qmacpasteboardmime.h>
+%End
+
+void qRegisterDraggedTypes(const QStringList &types);
+
+%End
diff --git a/sip/QtMultimedia/QtMultimediamod.sip b/sip/QtMultimedia/QtMultimediamod.sip
new file mode 100644
index 0000000..7f8bf87
--- /dev/null
+++ b/sip/QtMultimedia/QtMultimediamod.sip
@@ -0,0 +1,87 @@
+// QtMultimediamod.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtMultimedia, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtGui/QtGuimod.sip
+%Import QtNetwork/QtNetworkmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qabstractvideobuffer.sip
+%Include qabstractvideosurface.sip
+%Include qaudio.sip
+%Include qaudiobuffer.sip
+%Include qaudiodecoder.sip
+%Include qaudiodeviceinfo.sip
+%Include qaudioformat.sip
+%Include qaudioinput.sip
+%Include qaudiooutput.sip
+%Include qaudioprobe.sip
+%Include qaudiorecorder.sip
+%Include qcamera.sip
+%Include qcameraexposure.sip
+%Include qcamerafocus.sip
+%Include qcameraimagecapture.sip
+%Include qcameraimageprocessing.sip
+%Include qcamerainfo.sip
+%Include qmediabindableinterface.sip
+%Include qmediacontent.sip
+%Include qmediacontrol.sip
+%Include qmediaencodersettings.sip
+%Include qmediametadata.sip
+%Include qmediaobject.sip
+%Include qmediaplayer.sip
+%Include qmediaplaylist.sip
+%Include qmediarecorder.sip
+%Include qmediaresource.sip
+%Include qmediaservice.sip
+%Include qmediatimerange.sip
+%Include qmultimedia.sip
+%Include qradiodata.sip
+%Include qradiotuner.sip
+%Include qsound.sip
+%Include qsoundeffect.sip
+%Include qvideoframe.sip
+%Include qvideoprobe.sip
+%Include qvideosurfaceformat.sip
+%Include qpymultimedia_qlist.sip
diff --git a/sip/QtMultimedia/qabstractvideobuffer.sip b/sip/QtMultimedia/qabstractvideobuffer.sip
new file mode 100644
index 0000000..77391a5
--- /dev/null
+++ b/sip/QtMultimedia/qabstractvideobuffer.sip
@@ -0,0 +1,80 @@
+// qabstractvideobuffer.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractVideoBuffer
+{
+%TypeHeaderCode
+#include <qabstractvideobuffer.h>
+%End
+
+public:
+    enum HandleType
+    {
+        NoHandle,
+        GLTextureHandle,
+        XvShmImageHandle,
+        CoreImageHandle,
+        QPixmapHandle,
+        UserHandle,
+    };
+
+    enum MapMode
+    {
+        NotMapped,
+        ReadOnly,
+        WriteOnly,
+        ReadWrite,
+    };
+
+    QAbstractVideoBuffer(QAbstractVideoBuffer::HandleType type);
+    virtual ~QAbstractVideoBuffer();
+    QAbstractVideoBuffer::HandleType handleType() const;
+    virtual QAbstractVideoBuffer::MapMode mapMode() const = 0;
+    virtual SIP_PYOBJECT map(QAbstractVideoBuffer::MapMode mode, int *numBytes, int *bytesPerLine) = 0 /DocType="sip.voidptr"/ [uchar * (QAbstractVideoBuffer::MapMode mode, int *numBytes, int *bytesPerLine)];
+%MethodCode
+        uchar *mem;
+        
+        Py_BEGIN_ALLOW_THREADS
+        mem = sipCpp->map(a0, &a1, &a2);
+        Py_END_ALLOW_THREADS
+        
+        if (mem)
+        {
+            if (a0 & QAbstractVideoBuffer::WriteOnly)
+                sipRes = sipConvertFromVoidPtrAndSize(mem, a1);
+            else
+                sipRes = sipConvertFromConstVoidPtrAndSize(mem, a1);
+        }
+        else
+        {
+            sipRes = Py_None;
+            Py_INCREF(sipRes);
+        }
+%End
+
+    virtual void unmap() = 0;
+    virtual QVariant handle() const;
+    virtual void release();
+
+private:
+    QAbstractVideoBuffer(const QAbstractVideoBuffer &);
+};
diff --git a/sip/QtMultimedia/qabstractvideosurface.sip b/sip/QtMultimedia/qabstractvideosurface.sip
new file mode 100644
index 0000000..98160b5
--- /dev/null
+++ b/sip/QtMultimedia/qabstractvideosurface.sip
@@ -0,0 +1,116 @@
+// qabstractvideosurface.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractVideoSurface : QObject
+{
+%TypeHeaderCode
+#include <qabstractvideosurface.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QRadioData, &sipType_QRadioData, -1, 1},
+        {sipName_QMediaPlaylist, &sipType_QMediaPlaylist, -1, 2},
+        {sipName_QMediaObject, &sipType_QMediaObject, 17, 3},
+        {sipName_QAudioInput, &sipType_QAudioInput, -1, 4},
+        {sipName_QAbstractVideoSurface, &sipType_QAbstractVideoSurface, -1, 5},
+        {sipName_QAudioOutput, &sipType_QAudioOutput, -1, 6},
+        {sipName_QSoundEffect, &sipType_QSoundEffect, -1, 7},
+        {sipName_QAudioProbe, &sipType_QAudioProbe, -1, 8},
+        {sipName_QCameraImageProcessing, &sipType_QCameraImageProcessing, -1, 9},
+        {sipName_QMediaService, &sipType_QMediaService, -1, 10},
+        {sipName_QVideoProbe, &sipType_QVideoProbe, -1, 11},
+        {sipName_QMediaRecorder, &sipType_QMediaRecorder, 21, 12},
+        {sipName_QCameraExposure, &sipType_QCameraExposure, -1, 13},
+        {sipName_QMediaControl, &sipType_QMediaControl, -1, 14},
+        {sipName_QCameraImageCapture, &sipType_QCameraImageCapture, -1, 15},
+        {sipName_QCameraFocus, &sipType_QCameraFocus, -1, 16},
+        {sipName_QSound, &sipType_QSound, -1, -1},
+        {sipName_QAudioDecoder, &sipType_QAudioDecoder, -1, 18},
+        {sipName_QCamera, &sipType_QCamera, -1, 19},
+        {sipName_QRadioTuner, &sipType_QRadioTuner, -1, 20},
+        {sipName_QMediaPlayer, &sipType_QMediaPlayer, -1, -1},
+        {sipName_QAudioRecorder, &sipType_QAudioRecorder, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    enum Error
+    {
+        NoError,
+        UnsupportedFormatError,
+        IncorrectFormatError,
+        StoppedError,
+        ResourceError,
+    };
+
+    explicit QAbstractVideoSurface(QObject *parent /TransferThis/ = 0);
+    virtual ~QAbstractVideoSurface();
+    virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType type = QAbstractVideoBuffer::NoHandle) const = 0;
+    virtual bool isFormatSupported(const QVideoSurfaceFormat &format) const;
+    virtual QVideoSurfaceFormat nearestFormat(const QVideoSurfaceFormat &format) const;
+    QVideoSurfaceFormat surfaceFormat() const;
+    virtual bool start(const QVideoSurfaceFormat &format);
+    virtual void stop();
+    bool isActive() const;
+    virtual bool present(const QVideoFrame &frame) = 0;
+    QAbstractVideoSurface::Error error() const;
+
+signals:
+    void activeChanged(bool active);
+    void surfaceFormatChanged(const QVideoSurfaceFormat &format);
+    void supportedFormatsChanged();
+
+protected:
+    void setError(QAbstractVideoSurface::Error error);
+
+public:
+    QSize nativeResolution() const;
+
+protected:
+    void setNativeResolution(const QSize &resolution);
+
+signals:
+    void nativeResolutionChanged(const QSize &);
+};
diff --git a/sip/QtMultimedia/qaudio.sip b/sip/QtMultimedia/qaudio.sip
new file mode 100644
index 0000000..c5c1ab4
--- /dev/null
+++ b/sip/QtMultimedia/qaudio.sip
@@ -0,0 +1,51 @@
+// qaudio.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+namespace QAudio
+{
+%TypeHeaderCode
+#include <qaudio.h>
+%End
+
+    enum Error
+    {
+        NoError,
+        OpenError,
+        IOError,
+        UnderrunError,
+        FatalError,
+    };
+
+    enum State
+    {
+        ActiveState,
+        SuspendedState,
+        StoppedState,
+        IdleState,
+    };
+
+    enum Mode
+    {
+        AudioInput,
+        AudioOutput,
+    };
+};
diff --git a/sip/QtMultimedia/qaudiobuffer.sip b/sip/QtMultimedia/qaudiobuffer.sip
new file mode 100644
index 0000000..5d53838
--- /dev/null
+++ b/sip/QtMultimedia/qaudiobuffer.sip
@@ -0,0 +1,44 @@
+// qaudiobuffer.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAudioBuffer
+{
+%TypeHeaderCode
+#include <qaudiobuffer.h>
+%End
+
+public:
+    QAudioBuffer();
+    QAudioBuffer(const QByteArray &data, const QAudioFormat &format, qint64 startTime = -1);
+    QAudioBuffer(int numFrames, const QAudioFormat &format, qint64 startTime = -1);
+    QAudioBuffer(const QAudioBuffer &other);
+    ~QAudioBuffer();
+    bool isValid() const;
+    QAudioFormat format() const;
+    int frameCount() const;
+    int sampleCount() const;
+    int byteCount() const;
+    qint64 duration() const;
+    qint64 startTime() const;
+    const void *constData() const;
+    void *data();
+};
diff --git a/sip/QtMultimedia/qaudiodecoder.sip b/sip/QtMultimedia/qaudiodecoder.sip
new file mode 100644
index 0000000..d57c4da
--- /dev/null
+++ b/sip/QtMultimedia/qaudiodecoder.sip
@@ -0,0 +1,83 @@
+// qaudiodecoder.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAudioDecoder : QMediaObject
+{
+%TypeHeaderCode
+#include <qaudiodecoder.h>
+%End
+
+public:
+    enum State
+    {
+        StoppedState,
+        DecodingState,
+    };
+
+    enum Error
+    {
+        NoError,
+        ResourceError,
+        FormatError,
+        AccessDeniedError,
+        ServiceMissingError,
+    };
+
+    QAudioDecoder(QObject *parent /TransferThis/ = 0);
+    virtual ~QAudioDecoder();
+    static QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList &codecs = QStringList());
+    QAudioDecoder::State state() const;
+    QString sourceFilename() const;
+    void setSourceFilename(const QString &fileName);
+    QIODevice *sourceDevice() const;
+    void setSourceDevice(QIODevice *device);
+    QAudioFormat audioFormat() const;
+    void setAudioFormat(const QAudioFormat &format);
+    QAudioDecoder::Error error() const;
+    QString errorString() const;
+    QAudioBuffer read() const;
+    bool bufferAvailable() const;
+    qint64 position() const;
+    qint64 duration() const;
+
+public slots:
+    void start();
+    void stop();
+
+signals:
+    void bufferAvailableChanged(bool);
+    void bufferReady();
+    void finished();
+    void stateChanged(QAudioDecoder::State newState);
+    void formatChanged(const QAudioFormat &format);
+    void error(QAudioDecoder::Error error);
+    void sourceChanged();
+    void positionChanged(qint64 position);
+    void durationChanged(qint64 duration);
+
+public:
+    virtual bool bind(QObject *);
+    virtual void unbind(QObject *);
+
+private:
+    QAudioDecoder(const QAudioDecoder &);
+};
diff --git a/sip/QtMultimedia/qaudiodeviceinfo.sip b/sip/QtMultimedia/qaudiodeviceinfo.sip
new file mode 100644
index 0000000..bd6d8f8
--- /dev/null
+++ b/sip/QtMultimedia/qaudiodeviceinfo.sip
@@ -0,0 +1,49 @@
+// qaudiodeviceinfo.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAudioDeviceInfo
+{
+%TypeHeaderCode
+#include <qaudiodeviceinfo.h>
+%End
+
+public:
+    QAudioDeviceInfo();
+    QAudioDeviceInfo(const QAudioDeviceInfo &other);
+    ~QAudioDeviceInfo();
+    bool isNull() const;
+    QString deviceName() const;
+    bool isFormatSupported(const QAudioFormat &format) const;
+    QAudioFormat preferredFormat() const;
+    QAudioFormat nearestFormat(const QAudioFormat &format) const;
+    QStringList supportedCodecs() const;
+    QList<int> supportedSampleSizes() const;
+    QList<QAudioFormat::Endian> supportedByteOrders() const;
+    QList<QAudioFormat::SampleType> supportedSampleTypes() const;
+    static QAudioDeviceInfo defaultInputDevice();
+    static QAudioDeviceInfo defaultOutputDevice();
+    static QList<QAudioDeviceInfo> availableDevices(QAudio::Mode mode);
+    QList<int> supportedSampleRates() const;
+    QList<int> supportedChannelCounts() const;
+    bool operator==(const QAudioDeviceInfo &other) const;
+    bool operator!=(const QAudioDeviceInfo &other) const;
+};
diff --git a/sip/QtMultimedia/qaudioformat.sip b/sip/QtMultimedia/qaudioformat.sip
new file mode 100644
index 0000000..454aefc
--- /dev/null
+++ b/sip/QtMultimedia/qaudioformat.sip
@@ -0,0 +1,69 @@
+// qaudioformat.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAudioFormat
+{
+%TypeHeaderCode
+#include <qaudioformat.h>
+%End
+
+public:
+    enum SampleType
+    {
+        Unknown,
+        SignedInt,
+        UnSignedInt,
+        Float,
+    };
+
+    enum Endian
+    {
+        BigEndian,
+        LittleEndian,
+    };
+
+    QAudioFormat();
+    QAudioFormat(const QAudioFormat &other);
+    ~QAudioFormat();
+    bool operator==(const QAudioFormat &other) const;
+    bool operator!=(const QAudioFormat &other) const;
+    bool isValid() const;
+    void setSampleSize(int sampleSize);
+    int sampleSize() const;
+    void setCodec(const QString &codec);
+    QString codec() const;
+    void setByteOrder(QAudioFormat::Endian byteOrder);
+    QAudioFormat::Endian byteOrder() const;
+    void setSampleType(QAudioFormat::SampleType sampleType);
+    QAudioFormat::SampleType sampleType() const;
+    void setSampleRate(int sampleRate);
+    int sampleRate() const;
+    void setChannelCount(int channelCount);
+    int channelCount() const;
+    qint32 bytesForDuration(qint64 duration) const;
+    qint64 durationForBytes(qint32 byteCount) const;
+    qint32 bytesForFrames(qint32 frameCount) const;
+    qint32 framesForBytes(qint32 byteCount) const;
+    qint32 framesForDuration(qint64 duration) const;
+    qint64 durationForFrames(qint32 frameCount) const;
+    int bytesPerFrame() const;
+};
diff --git a/sip/QtMultimedia/qaudioinput.sip b/sip/QtMultimedia/qaudioinput.sip
new file mode 100644
index 0000000..00ade9c
--- /dev/null
+++ b/sip/QtMultimedia/qaudioinput.sip
@@ -0,0 +1,61 @@
+// qaudioinput.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAudioInput : QObject
+{
+%TypeHeaderCode
+#include <qaudioinput.h>
+%End
+
+public:
+    QAudioInput(const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0);
+    QAudioInput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0);
+    virtual ~QAudioInput();
+    QAudioFormat format() const;
+    void start(QIODevice *device);
+    QIODevice *start();
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    void setBufferSize(int bytes);
+    int bufferSize() const;
+    int bytesReady() const;
+    int periodSize() const;
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+    QAudio::Error error() const;
+    QAudio::State state() const;
+
+signals:
+    void stateChanged(QAudio::State);
+    void notify();
+
+public:
+    void setVolume(qreal volume);
+    qreal volume() const;
+
+private:
+    QAudioInput(const QAudioInput &);
+};
diff --git a/sip/QtMultimedia/qaudiooutput.sip b/sip/QtMultimedia/qaudiooutput.sip
new file mode 100644
index 0000000..d822b17
--- /dev/null
+++ b/sip/QtMultimedia/qaudiooutput.sip
@@ -0,0 +1,63 @@
+// qaudiooutput.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAudioOutput : QObject
+{
+%TypeHeaderCode
+#include <qaudiooutput.h>
+%End
+
+public:
+    QAudioOutput(const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0);
+    QAudioOutput(const QAudioDeviceInfo &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent /TransferThis/ = 0);
+    virtual ~QAudioOutput();
+    QAudioFormat format() const;
+    void start(QIODevice *device);
+    QIODevice *start();
+    void stop();
+    void reset();
+    void suspend();
+    void resume();
+    void setBufferSize(int bytes);
+    int bufferSize() const;
+    int bytesFree() const;
+    int periodSize() const;
+    void setNotifyInterval(int milliSeconds);
+    int notifyInterval() const;
+    qint64 processedUSecs() const;
+    qint64 elapsedUSecs() const;
+    QAudio::Error error() const;
+    QAudio::State state() const;
+
+signals:
+    void stateChanged(QAudio::State);
+    void notify();
+
+public:
+    void setVolume(qreal);
+    qreal volume() const;
+    QString category() const;
+    void setCategory(const QString &category);
+
+private:
+    QAudioOutput(const QAudioOutput &);
+};
diff --git a/sip/QtMultimedia/qaudioprobe.sip b/sip/QtMultimedia/qaudioprobe.sip
new file mode 100644
index 0000000..a3b55e0
--- /dev/null
+++ b/sip/QtMultimedia/qaudioprobe.sip
@@ -0,0 +1,39 @@
+// qaudioprobe.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAudioProbe : QObject
+{
+%TypeHeaderCode
+#include <qaudioprobe.h>
+%End
+
+public:
+    explicit QAudioProbe(QObject *parent /TransferThis/ = 0);
+    virtual ~QAudioProbe();
+    bool setSource(QMediaObject *source);
+    bool setSource(QMediaRecorder *source);
+    bool isActive() const;
+
+signals:
+    void audioBufferProbed(const QAudioBuffer &audioBuffer);
+    void flush();
+};
diff --git a/sip/QtMultimedia/qaudiorecorder.sip b/sip/QtMultimedia/qaudiorecorder.sip
new file mode 100644
index 0000000..62ad68f
--- /dev/null
+++ b/sip/QtMultimedia/qaudiorecorder.sip
@@ -0,0 +1,46 @@
+// qaudiorecorder.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAudioRecorder : QMediaRecorder
+{
+%TypeHeaderCode
+#include <qaudiorecorder.h>
+%End
+
+public:
+    QAudioRecorder(QObject *parent /TransferThis/ = 0);
+    virtual ~QAudioRecorder();
+    QStringList audioInputs() const;
+    QString defaultAudioInput() const;
+    QString audioInputDescription(const QString &name) const;
+    QString audioInput() const;
+
+public slots:
+    void setAudioInput(const QString &name);
+
+signals:
+    void audioInputChanged(const QString &name);
+    void availableAudioInputsChanged();
+
+private:
+    QAudioRecorder(const QAudioRecorder &);
+};
diff --git a/sip/QtMultimedia/qcamera.sip b/sip/QtMultimedia/qcamera.sip
new file mode 100644
index 0000000..72c9b51
--- /dev/null
+++ b/sip/QtMultimedia/qcamera.sip
@@ -0,0 +1,161 @@
+// qcamera.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qcamera.h>
+%End
+
+class QCamera : QMediaObject
+{
+%TypeHeaderCode
+#include <qcamera.h>
+%End
+
+public:
+    enum Status
+    {
+        UnavailableStatus,
+        UnloadedStatus,
+        LoadingStatus,
+        UnloadingStatus,
+        LoadedStatus,
+        StandbyStatus,
+        StartingStatus,
+        StoppingStatus,
+        ActiveStatus,
+    };
+
+    enum State
+    {
+        UnloadedState,
+        LoadedState,
+        ActiveState,
+    };
+
+    enum CaptureMode
+    {
+        CaptureViewfinder,
+        CaptureStillImage,
+        CaptureVideo,
+    };
+
+    typedef QFlags<QCamera::CaptureMode> CaptureModes;
+
+    enum Error
+    {
+        NoError,
+        CameraError,
+        InvalidRequestError,
+        ServiceMissingError,
+        NotSupportedFeatureError,
+    };
+
+    enum LockStatus
+    {
+        Unlocked,
+        Searching,
+        Locked,
+    };
+
+    enum LockChangeReason
+    {
+        UserRequest,
+        LockAcquired,
+        LockFailed,
+        LockLost,
+        LockTemporaryLost,
+    };
+
+    enum LockType
+    {
+        NoLock,
+        LockExposure,
+        LockWhiteBalance,
+        LockFocus,
+    };
+
+    typedef QFlags<QCamera::LockType> LockTypes;
+%If (Qt_5_3_0 -)
+
+    enum Position
+    {
+        UnspecifiedPosition,
+        BackFace,
+        FrontFace,
+    };
+
+%End
+    QCamera(QObject *parent /TransferThis/ = 0);
+    QCamera(const QByteArray &device, QObject *parent /TransferThis/ = 0);
+%If (Qt_5_3_0 -)
+    QCamera(const QCameraInfo &cameraInfo, QObject *parent /TransferThis/ = 0);
+%End
+%If (Qt_5_3_0 -)
+    QCamera(QCamera::Position position, QObject *parent /TransferThis/ = 0);
+%End
+    virtual ~QCamera();
+    static QList<QByteArray> availableDevices();
+    static QString deviceDescription(const QByteArray &device);
+    virtual QMultimedia::AvailabilityStatus availability() const;
+    QCamera::State state() const;
+    QCamera::Status status() const;
+    QFlags<QCamera::CaptureMode> captureMode() const;
+    bool isCaptureModeSupported(QFlags<QCamera::CaptureMode> mode) const;
+    QCameraExposure *exposure() const;
+    QCameraFocus *focus() const;
+    QCameraImageProcessing *imageProcessing() const;
+    void setViewfinder(QVideoWidget *viewfinder);
+    void setViewfinder(QGraphicsVideoItem *viewfinder);
+    void setViewfinder(QAbstractVideoSurface *surface);
+    QCamera::Error error() const;
+    QString errorString() const;
+    QFlags<QCamera::LockType> supportedLocks() const;
+    QFlags<QCamera::LockType> requestedLocks() const;
+    QCamera::LockStatus lockStatus() const;
+    QCamera::LockStatus lockStatus(QCamera::LockType lock) const;
+
+public slots:
+    void setCaptureMode(QFlags<QCamera::CaptureMode> mode);
+    void load();
+    void unload();
+    void start();
+    void stop();
+    void searchAndLock();
+    void unlock();
+    void searchAndLock(QFlags<QCamera::LockType> locks);
+    void unlock(QFlags<QCamera::LockType> locks);
+
+signals:
+    void stateChanged(QCamera::State);
+    void captureModeChanged(QFlags<QCamera::CaptureMode>);
+    void statusChanged(QCamera::Status);
+    void locked();
+    void lockFailed();
+    void lockStatusChanged(QCamera::LockStatus, QCamera::LockChangeReason);
+    void lockStatusChanged(QCamera::LockType, QCamera::LockStatus, QCamera::LockChangeReason);
+    void error(QCamera::Error);
+
+private:
+    QCamera(const QCamera &);
+};
+
+QFlags<QCamera::LockType> operator|(QCamera::LockType f1, QFlags<QCamera::LockType> f2);
diff --git a/sip/QtMultimedia/qcameraexposure.sip b/sip/QtMultimedia/qcameraexposure.sip
new file mode 100644
index 0000000..39ffb25
--- /dev/null
+++ b/sip/QtMultimedia/qcameraexposure.sip
@@ -0,0 +1,121 @@
+// qcameraexposure.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qcameraexposure.h>
+%End
+
+class QCameraExposure : QObject
+{
+%TypeHeaderCode
+#include <qcameraexposure.h>
+%End
+
+public:
+    enum FlashMode
+    {
+        FlashAuto,
+        FlashOff,
+        FlashOn,
+        FlashRedEyeReduction,
+        FlashFill,
+        FlashTorch,
+        FlashVideoLight,
+        FlashSlowSyncFrontCurtain,
+        FlashSlowSyncRearCurtain,
+        FlashManual,
+    };
+
+    typedef QFlags<QCameraExposure::FlashMode> FlashModes;
+
+    enum ExposureMode
+    {
+        ExposureAuto,
+        ExposureManual,
+        ExposurePortrait,
+        ExposureNight,
+        ExposureBacklight,
+        ExposureSpotlight,
+        ExposureSports,
+        ExposureSnow,
+        ExposureBeach,
+        ExposureLargeAperture,
+        ExposureSmallAperture,
+        ExposureModeVendor,
+    };
+
+    enum MeteringMode
+    {
+        MeteringMatrix,
+        MeteringAverage,
+        MeteringSpot,
+    };
+
+    bool isAvailable() const;
+    QFlags<QCameraExposure::FlashMode> flashMode() const;
+    bool isFlashModeSupported(QFlags<QCameraExposure::FlashMode> mode) const;
+    bool isFlashReady() const;
+    QCameraExposure::ExposureMode exposureMode() const;
+    bool isExposureModeSupported(QCameraExposure::ExposureMode mode) const;
+    qreal exposureCompensation() const;
+    QCameraExposure::MeteringMode meteringMode() const;
+    bool isMeteringModeSupported(QCameraExposure::MeteringMode mode) const;
+    QPointF spotMeteringPoint() const;
+    void setSpotMeteringPoint(const QPointF &point);
+    int isoSensitivity() const;
+    qreal aperture() const;
+    qreal shutterSpeed() const;
+    int requestedIsoSensitivity() const;
+    qreal requestedAperture() const;
+    qreal requestedShutterSpeed() const;
+    QList<int> supportedIsoSensitivities(bool *continuous = 0) const;
+    QList<qreal> supportedApertures(bool *continuous = 0) const;
+    QList<qreal> supportedShutterSpeeds(bool *continuous = 0) const;
+
+public slots:
+    void setFlashMode(QFlags<QCameraExposure::FlashMode> mode);
+    void setExposureMode(QCameraExposure::ExposureMode mode);
+    void setMeteringMode(QCameraExposure::MeteringMode mode);
+    void setExposureCompensation(qreal ev);
+    void setManualIsoSensitivity(int iso);
+    void setAutoIsoSensitivity();
+    void setManualAperture(qreal aperture);
+    void setAutoAperture();
+    void setManualShutterSpeed(qreal seconds);
+    void setAutoShutterSpeed();
+
+signals:
+    void flashReady(bool);
+    void apertureChanged(qreal);
+    void apertureRangeChanged();
+    void shutterSpeedChanged(qreal);
+    void shutterSpeedRangeChanged();
+    void isoSensitivityChanged(int);
+    void exposureCompensationChanged(qreal);
+
+private:
+    explicit QCameraExposure(QCamera *parent /TransferThis/ = 0);
+    virtual ~QCameraExposure();
+    QCameraExposure(const QCameraExposure &);
+};
+
+QFlags<QCameraExposure::FlashMode> operator|(QCameraExposure::FlashMode f1, QFlags<QCameraExposure::FlashMode> f2);
diff --git a/sip/QtMultimedia/qcamerafocus.sip b/sip/QtMultimedia/qcamerafocus.sip
new file mode 100644
index 0000000..92a9134
--- /dev/null
+++ b/sip/QtMultimedia/qcamerafocus.sip
@@ -0,0 +1,109 @@
+// qcamerafocus.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qcamerafocus.h>
+%End
+
+class QCameraFocusZone
+{
+%TypeHeaderCode
+#include <qcamerafocus.h>
+%End
+
+public:
+    enum FocusZoneStatus
+    {
+        Invalid,
+        Unused,
+        Selected,
+        Focused,
+    };
+
+    QCameraFocusZone(const QCameraFocusZone &other);
+    bool operator==(const QCameraFocusZone &other) const;
+    bool operator!=(const QCameraFocusZone &other) const;
+    ~QCameraFocusZone();
+    bool isValid() const;
+    QRectF area() const;
+    QCameraFocusZone::FocusZoneStatus status() const;
+};
+
+typedef QList<QCameraFocusZone> QCameraFocusZoneList;
+
+class QCameraFocus : QObject
+{
+%TypeHeaderCode
+#include <qcamerafocus.h>
+%End
+
+public:
+    enum FocusMode
+    {
+        ManualFocus,
+        HyperfocalFocus,
+        InfinityFocus,
+        AutoFocus,
+        ContinuousFocus,
+        MacroFocus,
+    };
+
+    typedef QFlags<QCameraFocus::FocusMode> FocusModes;
+
+    enum FocusPointMode
+    {
+        FocusPointAuto,
+        FocusPointCenter,
+        FocusPointFaceDetection,
+        FocusPointCustom,
+    };
+
+    bool isAvailable() const;
+    QFlags<QCameraFocus::FocusMode> focusMode() const;
+    void setFocusMode(QFlags<QCameraFocus::FocusMode> mode);
+    bool isFocusModeSupported(QFlags<QCameraFocus::FocusMode> mode) const;
+    QCameraFocus::FocusPointMode focusPointMode() const;
+    void setFocusPointMode(QCameraFocus::FocusPointMode mode);
+    bool isFocusPointModeSupported(QCameraFocus::FocusPointMode) const;
+    QPointF customFocusPoint() const;
+    void setCustomFocusPoint(const QPointF &point);
+    QCameraFocusZoneList focusZones() const;
+    qreal maximumOpticalZoom() const;
+    qreal maximumDigitalZoom() const;
+    qreal opticalZoom() const;
+    qreal digitalZoom() const;
+    void zoomTo(qreal opticalZoom, qreal digitalZoom);
+
+signals:
+    void opticalZoomChanged(qreal);
+    void digitalZoomChanged(qreal);
+    void focusZonesChanged();
+    void maximumOpticalZoomChanged(qreal);
+    void maximumDigitalZoomChanged(qreal);
+
+private:
+    QCameraFocus(QCamera *camera);
+    virtual ~QCameraFocus();
+    QCameraFocus(const QCameraFocus &);
+};
+
+QFlags<QCameraFocus::FocusMode> operator|(QCameraFocus::FocusMode f1, QFlags<QCameraFocus::FocusMode> f2);
diff --git a/sip/QtMultimedia/qcameraimagecapture.sip b/sip/QtMultimedia/qcameraimagecapture.sip
new file mode 100644
index 0000000..40c8700
--- /dev/null
+++ b/sip/QtMultimedia/qcameraimagecapture.sip
@@ -0,0 +1,98 @@
+// qcameraimagecapture.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qcameraimagecapture.h>
+%End
+
+class QCameraImageCapture : QObject, QMediaBindableInterface
+{
+%TypeHeaderCode
+#include <qcameraimagecapture.h>
+%End
+
+public:
+    enum Error
+    {
+        NoError,
+        NotReadyError,
+        ResourceError,
+        OutOfSpaceError,
+        NotSupportedFeatureError,
+        FormatError,
+    };
+
+    enum DriveMode
+    {
+        SingleImageCapture,
+    };
+
+    enum CaptureDestination
+    {
+        CaptureToFile,
+        CaptureToBuffer,
+    };
+
+    typedef QFlags<QCameraImageCapture::CaptureDestination> CaptureDestinations;
+    QCameraImageCapture(QMediaObject *mediaObject, QObject *parent /TransferThis/ = 0);
+    virtual ~QCameraImageCapture();
+    bool isAvailable() const;
+    QMultimedia::AvailabilityStatus availability() const;
+    virtual QMediaObject *mediaObject() const;
+    QCameraImageCapture::Error error() const;
+    QString errorString() const;
+    bool isReadyForCapture() const;
+    QStringList supportedImageCodecs() const;
+    QString imageCodecDescription(const QString &codecName) const;
+    QList<QSize> supportedResolutions(const QImageEncoderSettings &settings = QImageEncoderSettings(), bool *continuous = 0) const;
+    QImageEncoderSettings encodingSettings() const;
+    void setEncodingSettings(const QImageEncoderSettings &settings);
+    QList<QVideoFrame::PixelFormat> supportedBufferFormats() const;
+    QVideoFrame::PixelFormat bufferFormat() const;
+    void setBufferFormat(const QVideoFrame::PixelFormat format);
+    bool isCaptureDestinationSupported(QFlags<QCameraImageCapture::CaptureDestination> destination) const;
+    QFlags<QCameraImageCapture::CaptureDestination> captureDestination() const;
+    void setCaptureDestination(QFlags<QCameraImageCapture::CaptureDestination> destination);
+
+public slots:
+    int capture(const QString &file = QString()) /ReleaseGIL/;
+    void cancelCapture();
+
+signals:
+    void error(int id, QCameraImageCapture::Error error, const QString &errorString);
+    void readyForCaptureChanged(bool);
+    void bufferFormatChanged(QVideoFrame::PixelFormat);
+    void captureDestinationChanged(QFlags<QCameraImageCapture::CaptureDestination>);
+    void imageExposed(int id);
+    void imageCaptured(int id, const QImage &preview);
+    void imageMetadataAvailable(int id, const QString &key, const QVariant &value);
+    void imageAvailable(int id, const QVideoFrame &image);
+    void imageSaved(int id, const QString &fileName);
+
+protected:
+    virtual bool setMediaObject(QMediaObject *);
+
+private:
+    QCameraImageCapture(const QCameraImageCapture &);
+};
+
+QFlags<QCameraImageCapture::CaptureDestination> operator|(QCameraImageCapture::CaptureDestination f1, QFlags<QCameraImageCapture::CaptureDestination> f2);
diff --git a/sip/QtMultimedia/qcameraimageprocessing.sip b/sip/QtMultimedia/qcameraimageprocessing.sip
new file mode 100644
index 0000000..d71ec52
--- /dev/null
+++ b/sip/QtMultimedia/qcameraimageprocessing.sip
@@ -0,0 +1,63 @@
+// qcameraimageprocessing.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCameraImageProcessing : QObject
+{
+%TypeHeaderCode
+#include <qcameraimageprocessing.h>
+%End
+
+public:
+    enum WhiteBalanceMode
+    {
+        WhiteBalanceAuto,
+        WhiteBalanceManual,
+        WhiteBalanceSunlight,
+        WhiteBalanceCloudy,
+        WhiteBalanceShade,
+        WhiteBalanceTungsten,
+        WhiteBalanceFluorescent,
+        WhiteBalanceFlash,
+        WhiteBalanceSunset,
+        WhiteBalanceVendor,
+    };
+
+    bool isAvailable() const;
+    QCameraImageProcessing::WhiteBalanceMode whiteBalanceMode() const;
+    void setWhiteBalanceMode(QCameraImageProcessing::WhiteBalanceMode mode);
+    bool isWhiteBalanceModeSupported(QCameraImageProcessing::WhiteBalanceMode mode) const;
+    qreal manualWhiteBalance() const;
+    void setManualWhiteBalance(qreal colorTemperature);
+    qreal contrast() const;
+    void setContrast(qreal value);
+    qreal saturation() const;
+    void setSaturation(qreal value);
+    qreal sharpeningLevel() const;
+    void setSharpeningLevel(qreal value);
+    qreal denoisingLevel() const;
+    void setDenoisingLevel(qreal value);
+
+private:
+    QCameraImageProcessing(QCamera *camera);
+    virtual ~QCameraImageProcessing();
+    QCameraImageProcessing(const QCameraImageProcessing &);
+};
diff --git a/sip/QtMultimedia/qcamerainfo.sip b/sip/QtMultimedia/qcamerainfo.sip
new file mode 100644
index 0000000..0fadb0a
--- /dev/null
+++ b/sip/QtMultimedia/qcamerainfo.sip
@@ -0,0 +1,47 @@
+// qcamerainfo.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class QCameraInfo
+{
+%TypeHeaderCode
+#include <qcamerainfo.h>
+%End
+
+public:
+    explicit QCameraInfo(const QByteArray &name = QByteArray());
+    explicit QCameraInfo(const QCamera &camera);
+    QCameraInfo(const QCameraInfo &other);
+    ~QCameraInfo();
+    bool isNull() const;
+    QString deviceName() const;
+    QString description() const;
+    QCamera::Position position() const;
+    int orientation() const;
+    static QCameraInfo defaultCamera();
+    static QList<QCameraInfo> availableCameras(QCamera::Position position = QCamera::UnspecifiedPosition);
+    bool operator==(const QCameraInfo &other) const;
+    bool operator!=(const QCameraInfo &other) const;
+};
+
+%End
diff --git a/sip/QtMultimedia/qmediabindableinterface.sip b/sip/QtMultimedia/qmediabindableinterface.sip
new file mode 100644
index 0000000..ec99211
--- /dev/null
+++ b/sip/QtMultimedia/qmediabindableinterface.sip
@@ -0,0 +1,35 @@
+// qmediabindableinterface.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMediaBindableInterface
+{
+%TypeHeaderCode
+#include <qmediabindableinterface.h>
+%End
+
+public:
+    virtual ~QMediaBindableInterface();
+    virtual QMediaObject *mediaObject() const = 0;
+
+protected:
+    virtual bool setMediaObject(QMediaObject *object) = 0;
+};
diff --git a/sip/QtMultimedia/qmediacontent.sip b/sip/QtMultimedia/qmediacontent.sip
new file mode 100644
index 0000000..f67a5d1
--- /dev/null
+++ b/sip/QtMultimedia/qmediacontent.sip
@@ -0,0 +1,46 @@
+// qmediacontent.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMediaContent
+{
+%TypeHeaderCode
+#include <qmediacontent.h>
+%End
+
+public:
+    QMediaContent();
+    QMediaContent(const QUrl &contentUrl);
+    QMediaContent(const QNetworkRequest &contentRequest);
+    QMediaContent(const QMediaResource &contentResource);
+    QMediaContent(const QMediaResourceList &resources);
+    QMediaContent(const QMediaContent &other);
+    QMediaContent(QMediaPlaylist *playlist, const QUrl &contentUrl = QUrl());
+    ~QMediaContent();
+    bool operator==(const QMediaContent &other) const;
+    bool operator!=(const QMediaContent &other) const;
+    bool isNull() const;
+    QUrl canonicalUrl() const;
+    QNetworkRequest canonicalRequest() const;
+    QMediaResource canonicalResource() const;
+    QMediaResourceList resources() const;
+    QMediaPlaylist *playlist() const;
+};
diff --git a/sip/QtMultimedia/qmediacontrol.sip b/sip/QtMultimedia/qmediacontrol.sip
new file mode 100644
index 0000000..7a47fdb
--- /dev/null
+++ b/sip/QtMultimedia/qmediacontrol.sip
@@ -0,0 +1,34 @@
+// qmediacontrol.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMediaControl : QObject
+{
+%TypeHeaderCode
+#include <qmediacontrol.h>
+%End
+
+public:
+    virtual ~QMediaControl();
+
+protected:
+    QMediaControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qmediaencodersettings.sip b/sip/QtMultimedia/qmediaencodersettings.sip
new file mode 100644
index 0000000..8a0b13c
--- /dev/null
+++ b/sip/QtMultimedia/qmediaencodersettings.sip
@@ -0,0 +1,110 @@
+// qmediaencodersettings.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAudioEncoderSettings
+{
+%TypeHeaderCode
+#include <qmediaencodersettings.h>
+%End
+
+public:
+    QAudioEncoderSettings();
+    QAudioEncoderSettings(const QAudioEncoderSettings &other);
+    ~QAudioEncoderSettings();
+    bool operator==(const QAudioEncoderSettings &other) const;
+    bool operator!=(const QAudioEncoderSettings &other) const;
+    bool isNull() const;
+    QMultimedia::EncodingMode encodingMode() const;
+    void setEncodingMode(QMultimedia::EncodingMode);
+    QString codec() const;
+    void setCodec(const QString &codec);
+    int bitRate() const;
+    void setBitRate(int bitrate);
+    int channelCount() const;
+    void setChannelCount(int channels);
+    int sampleRate() const;
+    void setSampleRate(int rate);
+    QMultimedia::EncodingQuality quality() const;
+    void setQuality(QMultimedia::EncodingQuality quality);
+    QVariant encodingOption(const QString &option) const;
+    QVariantMap encodingOptions() const;
+    void setEncodingOption(const QString &option, const QVariant &value);
+    void setEncodingOptions(const QVariantMap &options);
+};
+
+class QVideoEncoderSettings
+{
+%TypeHeaderCode
+#include <qmediaencodersettings.h>
+%End
+
+public:
+    QVideoEncoderSettings();
+    QVideoEncoderSettings(const QVideoEncoderSettings &other);
+    ~QVideoEncoderSettings();
+    bool operator==(const QVideoEncoderSettings &other) const;
+    bool operator!=(const QVideoEncoderSettings &other) const;
+    bool isNull() const;
+    QMultimedia::EncodingMode encodingMode() const;
+    void setEncodingMode(QMultimedia::EncodingMode);
+    QString codec() const;
+    void setCodec(const QString &);
+    QSize resolution() const;
+    void setResolution(const QSize &);
+    void setResolution(int width, int height);
+    qreal frameRate() const;
+    void setFrameRate(qreal rate);
+    int bitRate() const;
+    void setBitRate(int bitrate);
+    QMultimedia::EncodingQuality quality() const;
+    void setQuality(QMultimedia::EncodingQuality quality);
+    QVariant encodingOption(const QString &option) const;
+    QVariantMap encodingOptions() const;
+    void setEncodingOption(const QString &option, const QVariant &value);
+    void setEncodingOptions(const QVariantMap &options);
+};
+
+class QImageEncoderSettings
+{
+%TypeHeaderCode
+#include <qmediaencodersettings.h>
+%End
+
+public:
+    QImageEncoderSettings();
+    QImageEncoderSettings(const QImageEncoderSettings &other);
+    ~QImageEncoderSettings();
+    bool operator==(const QImageEncoderSettings &other) const;
+    bool operator!=(const QImageEncoderSettings &other) const;
+    bool isNull() const;
+    QString codec() const;
+    void setCodec(const QString &);
+    QSize resolution() const;
+    void setResolution(const QSize &);
+    void setResolution(int width, int height);
+    QMultimedia::EncodingQuality quality() const;
+    void setQuality(QMultimedia::EncodingQuality quality);
+    QVariant encodingOption(const QString &option) const;
+    QVariantMap encodingOptions() const;
+    void setEncodingOption(const QString &option, const QVariant &value);
+    void setEncodingOptions(const QVariantMap &options);
+};
diff --git a/sip/QtMultimedia/qmediametadata.sip b/sip/QtMultimedia/qmediametadata.sip
new file mode 100644
index 0000000..33adebd
--- /dev/null
+++ b/sip/QtMultimedia/qmediametadata.sip
@@ -0,0 +1,120 @@
+// qmediametadata.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+namespace QMediaMetaData
+{
+%TypeHeaderCode
+#include <qmediametadata.h>
+%End
+
+    const QString Title;
+    const QString SubTitle;
+    const QString Author;
+    const QString Comment;
+    const QString Description;
+    const QString Category;
+    const QString Genre;
+    const QString Year;
+    const QString Date;
+    const QString UserRating;
+    const QString Keywords;
+    const QString Language;
+    const QString Publisher;
+    const QString Copyright;
+    const QString ParentalRating;
+    const QString RatingOrganization;
+    const QString Size;
+    const QString MediaType;
+    const QString Duration;
+    const QString AudioBitRate;
+    const QString AudioCodec;
+    const QString AverageLevel;
+    const QString ChannelCount;
+    const QString PeakValue;
+    const QString SampleRate;
+    const QString AlbumTitle;
+    const QString AlbumArtist;
+    const QString ContributingArtist;
+    const QString Composer;
+    const QString Conductor;
+    const QString Lyrics;
+    const QString Mood;
+    const QString TrackNumber;
+    const QString TrackCount;
+    const QString CoverArtUrlSmall;
+    const QString CoverArtUrlLarge;
+    const QString Resolution;
+    const QString PixelAspectRatio;
+    const QString VideoFrameRate;
+    const QString VideoBitRate;
+    const QString VideoCodec;
+    const QString PosterUrl;
+    const QString ChapterNumber;
+    const QString Director;
+    const QString LeadPerformer;
+    const QString Writer;
+    const QString CameraManufacturer;
+    const QString CameraModel;
+    const QString Event;
+    const QString Subject;
+    const QString Orientation;
+    const QString ExposureTime;
+    const QString FNumber;
+    const QString ExposureProgram;
+    const QString ISOSpeedRatings;
+    const QString ExposureBiasValue;
+    const QString DateTimeOriginal;
+    const QString DateTimeDigitized;
+    const QString SubjectDistance;
+    const QString MeteringMode;
+    const QString LightSource;
+    const QString Flash;
+    const QString FocalLength;
+    const QString ExposureMode;
+    const QString WhiteBalance;
+    const QString DigitalZoomRatio;
+    const QString FocalLengthIn35mmFilm;
+    const QString SceneCaptureType;
+    const QString GainControl;
+    const QString Contrast;
+    const QString Saturation;
+    const QString Sharpness;
+    const QString DeviceSettingDescription;
+    const QString GPSLatitude;
+    const QString GPSLongitude;
+    const QString GPSAltitude;
+    const QString GPSTimeStamp;
+    const QString GPSSatellites;
+    const QString GPSStatus;
+    const QString GPSDOP;
+    const QString GPSSpeed;
+    const QString GPSTrack;
+    const QString GPSTrackRef;
+    const QString GPSImgDirection;
+    const QString GPSImgDirectionRef;
+    const QString GPSMapDatum;
+    const QString GPSProcessingMethod;
+    const QString GPSAreaInformation;
+    const QString PosterImage;
+    const QString CoverArtImage;
+    const QString ThumbnailImage;
+};
diff --git a/sip/QtMultimedia/qmediaobject.sip b/sip/QtMultimedia/qmediaobject.sip
new file mode 100644
index 0000000..be7536a
--- /dev/null
+++ b/sip/QtMultimedia/qmediaobject.sip
@@ -0,0 +1,53 @@
+// qmediaobject.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMediaObject : QObject
+{
+%TypeHeaderCode
+#include <qmediaobject.h>
+%End
+
+public:
+    virtual ~QMediaObject();
+    virtual bool isAvailable() const;
+    virtual QMultimedia::AvailabilityStatus availability() const;
+    virtual QMediaService *service() const;
+    int notifyInterval() const;
+    void setNotifyInterval(int milliSeconds);
+    virtual bool bind(QObject *);
+    virtual void unbind(QObject *);
+    bool isMetaDataAvailable() const;
+    QVariant metaData(const QString &key) const;
+    QStringList availableMetaData() const;
+
+signals:
+    void notifyIntervalChanged(int milliSeconds);
+    void metaDataAvailableChanged(bool available);
+    void metaDataChanged();
+    void metaDataChanged(const QString &key, const QVariant &value);
+    void availabilityChanged(QMultimedia::AvailabilityStatus availability);
+
+protected:
+    QMediaObject(QObject *parent /TransferThis/, QMediaService *service);
+    void addPropertyWatch(const QByteArray &name);
+    void removePropertyWatch(const QByteArray &name);
+};
diff --git a/sip/QtMultimedia/qmediaplayer.sip b/sip/QtMultimedia/qmediaplayer.sip
new file mode 100644
index 0000000..5046153
--- /dev/null
+++ b/sip/QtMultimedia/qmediaplayer.sip
@@ -0,0 +1,134 @@
+// qmediaplayer.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsVideoItem /External/;
+class QVideoWidget /External/;
+
+class QMediaPlayer : QMediaObject
+{
+%TypeHeaderCode
+#include <qmediaplayer.h>
+%End
+
+public:
+    enum State
+    {
+        StoppedState,
+        PlayingState,
+        PausedState,
+    };
+
+    enum MediaStatus
+    {
+        UnknownMediaStatus,
+        NoMedia,
+        LoadingMedia,
+        LoadedMedia,
+        StalledMedia,
+        BufferingMedia,
+        BufferedMedia,
+        EndOfMedia,
+        InvalidMedia,
+    };
+
+    enum Flag
+    {
+        LowLatency,
+        StreamPlayback,
+        VideoSurface,
+    };
+
+    typedef QFlags<QMediaPlayer::Flag> Flags;
+
+    enum Error
+    {
+        NoError,
+        ResourceError,
+        FormatError,
+        NetworkError,
+        AccessDeniedError,
+        ServiceMissingError,
+    };
+
+    QMediaPlayer(QObject *parent /TransferThis/ = 0, QFlags<QMediaPlayer::Flag> flags = 0);
+    virtual ~QMediaPlayer();
+    static QMultimedia::SupportEstimate hasSupport(const QString &mimeType, const QStringList &codecs = QStringList(), QFlags<QMediaPlayer::Flag> flags = 0);
+    static QStringList supportedMimeTypes(QFlags<QMediaPlayer::Flag> flags = 0);
+    void setVideoOutput(QVideoWidget *);
+    void setVideoOutput(QGraphicsVideoItem *);
+    void setVideoOutput(QAbstractVideoSurface *surface);
+    QMediaContent media() const;
+    const QIODevice *mediaStream() const;
+    QMediaPlaylist *playlist() const;
+    QMediaContent currentMedia() const;
+    QMediaPlayer::State state() const;
+    QMediaPlayer::MediaStatus mediaStatus() const;
+    qint64 duration() const;
+    qint64 position() const;
+    int volume() const;
+    bool isMuted() const;
+    bool isAudioAvailable() const;
+    bool isVideoAvailable() const;
+    int bufferStatus() const;
+    bool isSeekable() const;
+    qreal playbackRate() const;
+    QMediaPlayer::Error error() const;
+    QString errorString() const;
+    QNetworkConfiguration currentNetworkConfiguration() const;
+    virtual QMultimedia::AvailabilityStatus availability() const;
+
+public slots:
+    void play();
+    void pause();
+    void stop();
+    void setPosition(qint64 position);
+    void setVolume(int volume);
+    void setMuted(bool muted);
+    void setPlaybackRate(qreal rate);
+    void setMedia(const QMediaContent &media, QIODevice *stream = 0);
+    void setPlaylist(QMediaPlaylist *playlist);
+    void setNetworkConfigurations(const QList<QNetworkConfiguration> &configurations);
+
+signals:
+    void mediaChanged(const QMediaContent &media);
+    void currentMediaChanged(const QMediaContent &media);
+    void stateChanged(QMediaPlayer::State newState);
+    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
+    void durationChanged(qint64 duration);
+    void positionChanged(qint64 position);
+    void volumeChanged(int volume);
+    void mutedChanged(bool muted);
+    void audioAvailableChanged(bool available);
+    void videoAvailableChanged(bool videoAvailable);
+    void bufferStatusChanged(int percentFilled);
+    void seekableChanged(bool seekable);
+    void playbackRateChanged(qreal rate);
+    void error(QMediaPlayer::Error error);
+    void networkConfigurationChanged(const QNetworkConfiguration &configuration);
+
+public:
+    virtual bool bind(QObject *);
+    virtual void unbind(QObject *);
+
+private:
+    QMediaPlayer(const QMediaPlayer &);
+};
diff --git a/sip/QtMultimedia/qmediaplaylist.sip b/sip/QtMultimedia/qmediaplaylist.sip
new file mode 100644
index 0000000..f8a2449
--- /dev/null
+++ b/sip/QtMultimedia/qmediaplaylist.sip
@@ -0,0 +1,96 @@
+// qmediaplaylist.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMediaPlaylist : QObject, QMediaBindableInterface
+{
+%TypeHeaderCode
+#include <qmediaplaylist.h>
+%End
+
+public:
+    enum PlaybackMode
+    {
+        CurrentItemOnce,
+        CurrentItemInLoop,
+        Sequential,
+        Loop,
+        Random,
+    };
+
+    enum Error
+    {
+        NoError,
+        FormatError,
+        FormatNotSupportedError,
+        NetworkError,
+        AccessDeniedError,
+    };
+
+    QMediaPlaylist(QObject *parent /TransferThis/ = 0);
+    virtual ~QMediaPlaylist();
+    virtual QMediaObject *mediaObject() const;
+    QMediaPlaylist::PlaybackMode playbackMode() const;
+    void setPlaybackMode(QMediaPlaylist::PlaybackMode mode);
+    int currentIndex() const;
+    QMediaContent currentMedia() const;
+    int nextIndex(int steps = 1) const;
+    int previousIndex(int steps = 1) const;
+    QMediaContent media(int index) const;
+    int mediaCount() const;
+    bool isEmpty() const;
+    bool isReadOnly() const;
+    bool addMedia(const QMediaContent &content);
+    bool addMedia(const QList<QMediaContent> &items);
+    bool insertMedia(int index, const QMediaContent &content);
+    bool insertMedia(int index, const QList<QMediaContent> &items);
+    bool removeMedia(int pos);
+    bool removeMedia(int start, int end);
+    bool clear();
+    void load(const QNetworkRequest &request, const char *format = 0) /ReleaseGIL/;
+    void load(const QUrl &location, const char *format = 0) /ReleaseGIL/;
+    void load(QIODevice *device, const char *format = 0) /ReleaseGIL/;
+    bool save(const QUrl &location, const char *format = 0) /ReleaseGIL/;
+    bool save(QIODevice *device, const char *format) /ReleaseGIL/;
+    QMediaPlaylist::Error error() const;
+    QString errorString() const;
+
+public slots:
+    void shuffle();
+    void next();
+    void previous();
+    void setCurrentIndex(int index);
+
+signals:
+    void currentIndexChanged(int index);
+    void playbackModeChanged(QMediaPlaylist::PlaybackMode mode);
+    void currentMediaChanged(const QMediaContent &);
+    void mediaAboutToBeInserted(int start, int end);
+    void mediaInserted(int start, int end);
+    void mediaAboutToBeRemoved(int start, int end);
+    void mediaRemoved(int start, int end);
+    void mediaChanged(int start, int end);
+    void loaded();
+    void loadFailed();
+
+protected:
+    virtual bool setMediaObject(QMediaObject *object);
+};
diff --git a/sip/QtMultimedia/qmediarecorder.sip b/sip/QtMultimedia/qmediarecorder.sip
new file mode 100644
index 0000000..350d014
--- /dev/null
+++ b/sip/QtMultimedia/qmediarecorder.sip
@@ -0,0 +1,119 @@
+// qmediarecorder.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMediaRecorder : QObject, QMediaBindableInterface
+{
+%TypeHeaderCode
+#include <qmediarecorder.h>
+%End
+
+public:
+    enum State
+    {
+        StoppedState,
+        RecordingState,
+        PausedState,
+    };
+
+    enum Status
+    {
+        UnavailableStatus,
+        UnloadedStatus,
+        LoadingStatus,
+        LoadedStatus,
+        StartingStatus,
+        RecordingStatus,
+        PausedStatus,
+        FinalizingStatus,
+    };
+
+    enum Error
+    {
+        NoError,
+        ResourceError,
+        FormatError,
+        OutOfSpaceError,
+    };
+
+    QMediaRecorder(QMediaObject *mediaObject, QObject *parent /TransferThis/ = 0);
+    virtual ~QMediaRecorder();
+    virtual QMediaObject *mediaObject() const;
+    bool isAvailable() const;
+    QMultimedia::AvailabilityStatus availability() const;
+    QUrl outputLocation() const;
+    bool setOutputLocation(const QUrl &location);
+    QUrl actualLocation() const;
+    QMediaRecorder::State state() const;
+    QMediaRecorder::Status status() const;
+    QMediaRecorder::Error error() const;
+    QString errorString() const;
+    qint64 duration() const;
+    bool isMuted() const;
+    qreal volume() const;
+    QStringList supportedContainers() const;
+    QString containerDescription(const QString &format) const;
+    QStringList supportedAudioCodecs() const;
+    QString audioCodecDescription(const QString &codecName) const;
+    QList<int> supportedAudioSampleRates(const QAudioEncoderSettings &settings = QAudioEncoderSettings(), bool *continuous = 0) const;
+    QStringList supportedVideoCodecs() const;
+    QString videoCodecDescription(const QString &codecName) const;
+    QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings = QVideoEncoderSettings(), bool *continuous = 0) const;
+    QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings = QVideoEncoderSettings(), bool *continuous = 0) const;
+    QAudioEncoderSettings audioSettings() const;
+    QVideoEncoderSettings videoSettings() const;
+    QString containerFormat() const;
+    void setAudioSettings(const QAudioEncoderSettings &audioSettings);
+    void setVideoSettings(const QVideoEncoderSettings &videoSettings);
+    void setContainerFormat(const QString &container);
+    void setEncodingSettings(const QAudioEncoderSettings &audio, const QVideoEncoderSettings &video = QVideoEncoderSettings(), const QString &container = QString());
+    bool isMetaDataAvailable() const;
+    bool isMetaDataWritable() const;
+    QVariant metaData(const QString &key) const;
+    void setMetaData(const QString &key, const QVariant &value);
+    QStringList availableMetaData() const;
+
+public slots:
+    void record();
+    void pause();
+    void stop();
+    void setMuted(bool muted);
+    void setVolume(qreal volume);
+
+signals:
+    void stateChanged(QMediaRecorder::State state);
+    void statusChanged(QMediaRecorder::Status status);
+    void durationChanged(qint64 duration);
+    void mutedChanged(bool muted);
+    void volumeChanged(qreal volume);
+    void actualLocationChanged(const QUrl &location);
+    void error(QMediaRecorder::Error error);
+    void metaDataAvailableChanged(bool available);
+    void metaDataWritableChanged(bool writable);
+    void metaDataChanged(const QString &key, const QVariant &value);
+    void availabilityChanged(QMultimedia::AvailabilityStatus availability);
+
+protected:
+    virtual bool setMediaObject(QMediaObject *object);
+
+private:
+    QMediaRecorder(const QMediaRecorder &);
+};
diff --git a/sip/QtMultimedia/qmediaresource.sip b/sip/QtMultimedia/qmediaresource.sip
new file mode 100644
index 0000000..c692c0c
--- /dev/null
+++ b/sip/QtMultimedia/qmediaresource.sip
@@ -0,0 +1,62 @@
+// qmediaresource.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMediaResource
+{
+%TypeHeaderCode
+#include <qmediaresource.h>
+%End
+
+public:
+    QMediaResource();
+    QMediaResource(const QUrl &url, const QString &mimeType = QString());
+    QMediaResource(const QNetworkRequest &request, const QString &mimeType = QString());
+    QMediaResource(const QMediaResource &other);
+    ~QMediaResource();
+    bool isNull() const;
+    bool operator==(const QMediaResource &other) const;
+    bool operator!=(const QMediaResource &other) const;
+    QUrl url() const;
+    QNetworkRequest request() const;
+    QString mimeType() const;
+    QString language() const;
+    void setLanguage(const QString &language);
+    QString audioCodec() const;
+    void setAudioCodec(const QString &codec);
+    QString videoCodec() const;
+    void setVideoCodec(const QString &codec);
+    qint64 dataSize() const;
+    void setDataSize(const qint64 size);
+    int audioBitRate() const;
+    void setAudioBitRate(int rate);
+    int sampleRate() const;
+    void setSampleRate(int frequency);
+    int channelCount() const;
+    void setChannelCount(int channels);
+    int videoBitRate() const;
+    void setVideoBitRate(int rate);
+    QSize resolution() const;
+    void setResolution(const QSize &resolution);
+    void setResolution(int width, int height);
+};
+
+typedef QList<QMediaResource> QMediaResourceList;
diff --git a/sip/QtMultimedia/qmediaservice.sip b/sip/QtMultimedia/qmediaservice.sip
new file mode 100644
index 0000000..2346384
--- /dev/null
+++ b/sip/QtMultimedia/qmediaservice.sip
@@ -0,0 +1,36 @@
+// qmediaservice.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMediaService : QObject
+{
+%TypeHeaderCode
+#include <qmediaservice.h>
+%End
+
+public:
+    virtual ~QMediaService();
+    virtual QMediaControl *requestControl(const char *name) = 0;
+    virtual void releaseControl(QMediaControl *control) = 0;
+
+protected:
+    QMediaService(QObject *parent /TransferThis/);
+};
diff --git a/sip/QtMultimedia/qmediatimerange.sip b/sip/QtMultimedia/qmediatimerange.sip
new file mode 100644
index 0000000..3f48014
--- /dev/null
+++ b/sip/QtMultimedia/qmediatimerange.sip
@@ -0,0 +1,82 @@
+// qmediatimerange.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qmediatimerange.h>
+%End
+
+class QMediaTimeInterval
+{
+%TypeHeaderCode
+#include <qmediatimerange.h>
+%End
+
+public:
+    QMediaTimeInterval();
+    QMediaTimeInterval(qint64 start, qint64 end);
+    QMediaTimeInterval(const QMediaTimeInterval &);
+    qint64 start() const;
+    qint64 end() const;
+    bool contains(qint64 time) const;
+    bool isNormal() const;
+    QMediaTimeInterval normalized() const;
+    QMediaTimeInterval translated(qint64 offset) const;
+};
+
+bool operator==(const QMediaTimeInterval &, const QMediaTimeInterval &);
+bool operator!=(const QMediaTimeInterval &, const QMediaTimeInterval &);
+
+class QMediaTimeRange
+{
+%TypeHeaderCode
+#include <qmediatimerange.h>
+%End
+
+public:
+    QMediaTimeRange();
+    QMediaTimeRange(qint64 start, qint64 end);
+    QMediaTimeRange(const QMediaTimeInterval &);
+    QMediaTimeRange(const QMediaTimeRange &range);
+    ~QMediaTimeRange();
+    qint64 earliestTime() const;
+    qint64 latestTime() const;
+    QList<QMediaTimeInterval> intervals() const;
+    bool isEmpty() const;
+    bool isContinuous() const;
+    bool contains(qint64 time) const;
+    void addInterval(qint64 start, qint64 end);
+    void addInterval(const QMediaTimeInterval &interval);
+    void addTimeRange(const QMediaTimeRange &);
+    void removeInterval(qint64 start, qint64 end);
+    void removeInterval(const QMediaTimeInterval &interval);
+    void removeTimeRange(const QMediaTimeRange &);
+    QMediaTimeRange &operator+=(const QMediaTimeRange &);
+    QMediaTimeRange &operator+=(const QMediaTimeInterval &);
+    QMediaTimeRange &operator-=(const QMediaTimeRange &);
+    QMediaTimeRange &operator-=(const QMediaTimeInterval &);
+    void clear();
+};
+
+bool operator==(const QMediaTimeRange &, const QMediaTimeRange &);
+bool operator!=(const QMediaTimeRange &, const QMediaTimeRange &);
+QMediaTimeRange operator+(const QMediaTimeRange &, const QMediaTimeRange &);
+QMediaTimeRange operator-(const QMediaTimeRange &, const QMediaTimeRange &);
diff --git a/sip/QtMultimedia/qmultimedia.sip b/sip/QtMultimedia/qmultimedia.sip
new file mode 100644
index 0000000..074634b
--- /dev/null
+++ b/sip/QtMultimedia/qmultimedia.sip
@@ -0,0 +1,61 @@
+// qmultimedia.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+namespace QMultimedia
+{
+%TypeHeaderCode
+#include <qmultimedia.h>
+%End
+
+    enum SupportEstimate
+    {
+        NotSupported,
+        MaybeSupported,
+        ProbablySupported,
+        PreferredService,
+    };
+
+    enum EncodingQuality
+    {
+        VeryLowQuality,
+        LowQuality,
+        NormalQuality,
+        HighQuality,
+        VeryHighQuality,
+    };
+
+    enum EncodingMode
+    {
+        ConstantQualityEncoding,
+        ConstantBitRateEncoding,
+        AverageBitRateEncoding,
+        TwoPassEncoding,
+    };
+
+    enum AvailabilityStatus
+    {
+        Available,
+        ServiceMissing,
+        Busy,
+        ResourceError,
+    };
+};
diff --git a/sip/QtMultimedia/qpymultimedia_qlist.sip b/sip/QtMultimedia/qpymultimedia_qlist.sip
new file mode 100644
index 0000000..36bcfb7
--- /dev/null
+++ b/sip/QtMultimedia/qpymultimedia_qlist.sip
@@ -0,0 +1,321 @@
+// This is the SIP interface definition for the QList based mapped types
+// specific to the QtMultimedia module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%MappedType QList<QVideoFrame::PixelFormat>
+        /DocType="list-of-QVideoFrame.PixelFormat"/
+{
+%TypeHeaderCode
+#include <qvideoframe.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *eobj = sipConvertFromEnum(sipCpp->at(i),
+                sipType_QVideoFrame_PixelFormat);
+
+        if (!eobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, eobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<QVideoFrame::PixelFormat> *ql = new QList<QVideoFrame::PixelFormat>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        if (!sipCanConvertToEnum(itm, sipType_QVideoFrame_PixelFormat))
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'QVideoFrame.PixelFormat' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        ql->append(static_cast<QVideoFrame::PixelFormat>(SIPLong_AsLong(itm)));
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = ql;
+
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+%MappedType QList<QAudioFormat::Endian> /DocType="list-of-QAudioFormat.Endian"/
+{
+%TypeHeaderCode
+#include <qaudioformat.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *eobj = sipConvertFromEnum(sipCpp->at(i),
+                sipType_QAudioFormat_Endian);
+
+        if (!eobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, eobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<QAudioFormat::Endian> *ql = new QList<QAudioFormat::Endian>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        if (!sipCanConvertToEnum(itm, sipType_QAudioFormat_Endian))
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'QAudioFormat.Endian' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        ql->append(static_cast<QAudioFormat::Endian>(SIPLong_AsLong(itm)));
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = ql;
+
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
+%MappedType QList<QAudioFormat::SampleType>
+        /DocType="list-of-QAudioFormat.SampleType"/
+{
+%TypeHeaderCode
+#include <qaudioformat.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *eobj = sipConvertFromEnum(sipCpp->at(i),
+                sipType_QAudioFormat_SampleType);
+
+        if (!eobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, eobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<QAudioFormat::SampleType> *ql = new QList<QAudioFormat::SampleType>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        if (!sipCanConvertToEnum(itm, sipType_QAudioFormat_SampleType))
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'QAudioFormat.SampleType' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        ql->append(static_cast<QAudioFormat::SampleType>(SIPLong_AsLong(itm)));
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = ql;
+
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtMultimedia/qradiodata.sip b/sip/QtMultimedia/qradiodata.sip
new file mode 100644
index 0000000..9e14d5e
--- /dev/null
+++ b/sip/QtMultimedia/qradiodata.sip
@@ -0,0 +1,120 @@
+// qradiodata.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QRadioData : QObject, QMediaBindableInterface
+{
+%TypeHeaderCode
+#include <qradiodata.h>
+%End
+
+public:
+    enum Error
+    {
+        NoError,
+        ResourceError,
+        OpenError,
+        OutOfRangeError,
+    };
+
+    enum ProgramType
+    {
+        Undefined,
+        News,
+        CurrentAffairs,
+        Information,
+        Sport,
+        Education,
+        Drama,
+        Culture,
+        Science,
+        Varied,
+        PopMusic,
+        RockMusic,
+        EasyListening,
+        LightClassical,
+        SeriousClassical,
+        OtherMusic,
+        Weather,
+        Finance,
+        ChildrensProgrammes,
+        SocialAffairs,
+        Religion,
+        PhoneIn,
+        Travel,
+        Leisure,
+        JazzMusic,
+        CountryMusic,
+        NationalMusic,
+        OldiesMusic,
+        FolkMusic,
+        Documentary,
+        AlarmTest,
+        Alarm,
+        Talk,
+        ClassicRock,
+        AdultHits,
+        SoftRock,
+        Top40,
+        Soft,
+        Nostalgia,
+        Classical,
+        RhythmAndBlues,
+        SoftRhythmAndBlues,
+        Language,
+        ReligiousMusic,
+        ReligiousTalk,
+        Personality,
+        Public,
+        College,
+    };
+
+    QRadioData(QMediaObject *mediaObject, QObject *parent /TransferThis/ = 0);
+    virtual ~QRadioData();
+    virtual QMediaObject *mediaObject() const;
+    QMultimedia::AvailabilityStatus availability() const;
+    QString stationId() const;
+    QRadioData::ProgramType programType() const;
+    QString programTypeName() const;
+    QString stationName() const;
+    QString radioText() const;
+    bool isAlternativeFrequenciesEnabled() const;
+    QRadioData::Error error() const;
+    QString errorString() const;
+
+public slots:
+    void setAlternativeFrequenciesEnabled(bool enabled);
+
+signals:
+    void stationIdChanged(QString stationId);
+    void programTypeChanged(QRadioData::ProgramType programType);
+    void programTypeNameChanged(QString programTypeName);
+    void stationNameChanged(QString stationName);
+    void radioTextChanged(QString radioText);
+    void alternativeFrequenciesEnabledChanged(bool enabled);
+    void error(QRadioData::Error error);
+
+protected:
+    virtual bool setMediaObject(QMediaObject *);
+
+private:
+    QRadioData(const QRadioData &);
+};
diff --git a/sip/QtMultimedia/qradiotuner.sip b/sip/QtMultimedia/qradiotuner.sip
new file mode 100644
index 0000000..7a42c3a
--- /dev/null
+++ b/sip/QtMultimedia/qradiotuner.sip
@@ -0,0 +1,114 @@
+// qradiotuner.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QRadioTuner : QMediaObject
+{
+%TypeHeaderCode
+#include <qradiotuner.h>
+%End
+
+public:
+    enum State
+    {
+        ActiveState,
+        StoppedState,
+    };
+
+    enum Band
+    {
+        AM,
+        FM,
+        SW,
+        LW,
+        FM2,
+    };
+
+    enum Error
+    {
+        NoError,
+        ResourceError,
+        OpenError,
+        OutOfRangeError,
+    };
+
+    enum StereoMode
+    {
+        ForceStereo,
+        ForceMono,
+        Auto,
+    };
+
+    enum SearchMode
+    {
+        SearchFast,
+        SearchGetStationId,
+    };
+
+    QRadioTuner(QObject *parent /TransferThis/ = 0);
+    virtual ~QRadioTuner();
+    virtual QMultimedia::AvailabilityStatus availability() const;
+    QRadioTuner::State state() const;
+    QRadioTuner::Band band() const;
+    bool isBandSupported(QRadioTuner::Band b) const;
+    int frequency() const;
+    int frequencyStep(QRadioTuner::Band band) const;
+    QPair<int, int> frequencyRange(QRadioTuner::Band band) const;
+    bool isStereo() const;
+    void setStereoMode(QRadioTuner::StereoMode mode);
+    QRadioTuner::StereoMode stereoMode() const;
+    int signalStrength() const;
+    int volume() const;
+    bool isMuted() const;
+    bool isSearching() const;
+    bool isAntennaConnected() const;
+    QRadioTuner::Error error() const;
+    QString errorString() const;
+    QRadioData *radioData() const;
+
+public slots:
+    void searchForward();
+    void searchBackward();
+    void searchAllStations(QRadioTuner::SearchMode searchMode = QRadioTuner::SearchFast);
+    void cancelSearch();
+    void setBand(QRadioTuner::Band band);
+    void setFrequency(int frequency);
+    void setVolume(int volume);
+    void setMuted(bool muted);
+    void start();
+    void stop();
+
+signals:
+    void stateChanged(QRadioTuner::State state);
+    void bandChanged(QRadioTuner::Band band);
+    void frequencyChanged(int frequency);
+    void stereoStatusChanged(bool stereo);
+    void searchingChanged(bool searching);
+    void signalStrengthChanged(int signalStrength);
+    void volumeChanged(int volume);
+    void mutedChanged(bool muted);
+    void stationFound(int frequency, QString stationId);
+    void antennaConnectedChanged(bool connectionStatus);
+    void error(QRadioTuner::Error error);
+
+private:
+    QRadioTuner(const QRadioTuner &);
+};
diff --git a/sip/QtMultimedia/qsound.sip b/sip/QtMultimedia/qsound.sip
new file mode 100644
index 0000000..9c7c609
--- /dev/null
+++ b/sip/QtMultimedia/qsound.sip
@@ -0,0 +1,47 @@
+// qsound.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSound : QObject
+{
+%TypeHeaderCode
+#include <qsound.h>
+%End
+
+public:
+    enum Loop
+    {
+        Infinite,
+    };
+
+    QSound(const QString &filename, QObject *parent /TransferThis/ = 0);
+    virtual ~QSound();
+    static void play(const QString &filename);
+    int loops() const;
+    int loopsRemaining() const;
+    void setLoops(int);
+    QString fileName() const;
+    bool isFinished() const;
+
+public slots:
+    void play();
+    void stop();
+};
diff --git a/sip/QtMultimedia/qsoundeffect.sip b/sip/QtMultimedia/qsoundeffect.sip
new file mode 100644
index 0000000..05db63d
--- /dev/null
+++ b/sip/QtMultimedia/qsoundeffect.sip
@@ -0,0 +1,78 @@
+// qsoundeffect.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSoundEffect : QObject
+{
+%TypeHeaderCode
+#include <qsoundeffect.h>
+%End
+
+public:
+    enum Loop
+    {
+        Infinite,
+    };
+
+    enum Status
+    {
+        Null,
+        Loading,
+        Ready,
+        Error,
+    };
+
+    explicit QSoundEffect(QObject *parent /TransferThis/ = 0);
+    virtual ~QSoundEffect();
+    static QStringList supportedMimeTypes();
+    QUrl source() const;
+    void setSource(const QUrl &url);
+    int loopCount() const;
+    int loopsRemaining() const;
+    void setLoopCount(int loopCount);
+    qreal volume() const;
+    void setVolume(qreal volume);
+    bool isMuted() const;
+    void setMuted(bool muted);
+    bool isLoaded() const;
+    bool isPlaying() const;
+    QSoundEffect::Status status() const;
+    QString category() const;
+    void setCategory(const QString &category);
+
+signals:
+    void sourceChanged();
+    void loopCountChanged();
+    void loopsRemainingChanged();
+    void volumeChanged();
+    void mutedChanged();
+    void loadedChanged();
+    void playingChanged();
+    void statusChanged();
+    void categoryChanged();
+
+public slots:
+    void play();
+    void stop();
+
+private:
+    QSoundEffect(const QSoundEffect &);
+};
diff --git a/sip/QtMultimedia/qvideoframe.sip b/sip/QtMultimedia/qvideoframe.sip
new file mode 100644
index 0000000..f01f048
--- /dev/null
+++ b/sip/QtMultimedia/qvideoframe.sip
@@ -0,0 +1,127 @@
+// qvideoframe.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QVideoFrame
+{
+%TypeHeaderCode
+#include <qvideoframe.h>
+%End
+
+public:
+    enum FieldType
+    {
+        ProgressiveFrame,
+        TopField,
+        BottomField,
+        InterlacedFrame,
+    };
+
+    enum PixelFormat
+    {
+        Format_Invalid,
+        Format_ARGB32,
+        Format_ARGB32_Premultiplied,
+        Format_RGB32,
+        Format_RGB24,
+        Format_RGB565,
+        Format_RGB555,
+        Format_ARGB8565_Premultiplied,
+        Format_BGRA32,
+        Format_BGRA32_Premultiplied,
+        Format_BGR32,
+        Format_BGR24,
+        Format_BGR565,
+        Format_BGR555,
+        Format_BGRA5658_Premultiplied,
+        Format_AYUV444,
+        Format_AYUV444_Premultiplied,
+        Format_YUV444,
+        Format_YUV420P,
+        Format_YV12,
+        Format_UYVY,
+        Format_YUYV,
+        Format_NV12,
+        Format_NV21,
+        Format_IMC1,
+        Format_IMC2,
+        Format_IMC3,
+        Format_IMC4,
+        Format_Y8,
+        Format_Y16,
+        Format_Jpeg,
+        Format_CameraRaw,
+        Format_AdobeDng,
+        Format_User,
+    };
+
+    QVideoFrame();
+    QVideoFrame(QAbstractVideoBuffer *buffer, const QSize &size, QVideoFrame::PixelFormat format);
+    QVideoFrame(int bytes, const QSize &size, int bytesPerLine, QVideoFrame::PixelFormat format);
+    QVideoFrame(const QImage &image);
+    QVideoFrame(const QVideoFrame &other);
+    ~QVideoFrame();
+    bool isValid() const;
+    QVideoFrame::PixelFormat pixelFormat() const;
+    QAbstractVideoBuffer::HandleType handleType() const;
+    QSize size() const;
+    int width() const;
+    int height() const;
+    QVideoFrame::FieldType fieldType() const;
+    void setFieldType(QVideoFrame::FieldType);
+    bool isMapped() const;
+    bool isReadable() const;
+    bool isWritable() const;
+    QAbstractVideoBuffer::MapMode mapMode() const;
+    bool map(QAbstractVideoBuffer::MapMode mode);
+    void unmap();
+    int bytesPerLine() const;
+    SIP_PYOBJECT bits() /DocType="sip.voidptr"/;
+%MethodCode
+        uchar *mem;
+        
+        Py_BEGIN_ALLOW_THREADS
+        mem = sipCpp->bits();
+        Py_END_ALLOW_THREADS
+        
+        if (mem)
+        {
+            sipRes = sipConvertFromVoidPtrAndSize(mem, sipCpp->mappedBytes());
+        }
+        else
+        {
+            sipRes = Py_None;
+            Py_INCREF(sipRes);
+        }
+%End
+
+    int mappedBytes() const;
+    QVariant handle() const;
+    qint64 startTime() const;
+    void setStartTime(qint64 time);
+    qint64 endTime() const;
+    void setEndTime(qint64 time);
+    static QVideoFrame::PixelFormat pixelFormatFromImageFormat(QImage::Format format);
+    static QImage::Format imageFormatFromPixelFormat(QVideoFrame::PixelFormat format);
+    QVariantMap availableMetaData() const;
+    QVariant metaData(const QString &key) const;
+    void setMetaData(const QString &key, const QVariant &value);
+};
diff --git a/sip/QtMultimedia/qvideoprobe.sip b/sip/QtMultimedia/qvideoprobe.sip
new file mode 100644
index 0000000..90893bc
--- /dev/null
+++ b/sip/QtMultimedia/qvideoprobe.sip
@@ -0,0 +1,39 @@
+// qvideoprobe.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QVideoProbe : QObject
+{
+%TypeHeaderCode
+#include <qvideoprobe.h>
+%End
+
+public:
+    explicit QVideoProbe(QObject *parent /TransferThis/ = 0);
+    virtual ~QVideoProbe();
+    bool setSource(QMediaObject *source);
+    bool setSource(QMediaRecorder *source);
+    bool isActive() const;
+
+signals:
+    void videoFrameProbed(const QVideoFrame &videoFrame);
+    void flush();
+};
diff --git a/sip/QtMultimedia/qvideosurfaceformat.sip b/sip/QtMultimedia/qvideosurfaceformat.sip
new file mode 100644
index 0000000..191d99b
--- /dev/null
+++ b/sip/QtMultimedia/qvideosurfaceformat.sip
@@ -0,0 +1,75 @@
+// qvideosurfaceformat.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QVideoSurfaceFormat
+{
+%TypeHeaderCode
+#include <qvideosurfaceformat.h>
+%End
+
+public:
+    enum Direction
+    {
+        TopToBottom,
+        BottomToTop,
+    };
+
+    enum YCbCrColorSpace
+    {
+        YCbCr_Undefined,
+        YCbCr_BT601,
+        YCbCr_BT709,
+        YCbCr_xvYCC601,
+        YCbCr_xvYCC709,
+        YCbCr_JPEG,
+    };
+
+    QVideoSurfaceFormat();
+    QVideoSurfaceFormat(const QSize &size, QVideoFrame::PixelFormat format, QAbstractVideoBuffer::HandleType type = QAbstractVideoBuffer::NoHandle);
+    QVideoSurfaceFormat(const QVideoSurfaceFormat &format);
+    ~QVideoSurfaceFormat();
+    bool operator==(const QVideoSurfaceFormat &format) const;
+    bool operator!=(const QVideoSurfaceFormat &format) const;
+    bool isValid() const;
+    QVideoFrame::PixelFormat pixelFormat() const;
+    QAbstractVideoBuffer::HandleType handleType() const;
+    QSize frameSize() const;
+    void setFrameSize(const QSize &size);
+    void setFrameSize(int width, int height);
+    int frameWidth() const;
+    int frameHeight() const;
+    QRect viewport() const;
+    void setViewport(const QRect &viewport);
+    QVideoSurfaceFormat::Direction scanLineDirection() const;
+    void setScanLineDirection(QVideoSurfaceFormat::Direction direction);
+    qreal frameRate() const;
+    void setFrameRate(qreal rate);
+    QSize pixelAspectRatio() const;
+    void setPixelAspectRatio(const QSize &ratio);
+    void setPixelAspectRatio(int width, int height);
+    QVideoSurfaceFormat::YCbCrColorSpace yCbCrColorSpace() const;
+    void setYCbCrColorSpace(QVideoSurfaceFormat::YCbCrColorSpace colorSpace);
+    QSize sizeHint() const;
+    QList<QByteArray> propertyNames() const;
+    QVariant property(const char *name) const;
+    void setProperty(const char *name, const QVariant &value);
+};
diff --git a/sip/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip b/sip/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip
new file mode 100644
index 0000000..9dc71ee
--- /dev/null
+++ b/sip/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip
@@ -0,0 +1,52 @@
+// QtMultimediaWidgetsmod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtMultimediaWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtMultimediaWidgets, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtMultimedia/QtMultimediamod.sip
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qcameraviewfinder.sip
+%Include qgraphicsvideoitem.sip
+%Include qvideowidget.sip
diff --git a/sip/QtMultimediaWidgets/qcameraviewfinder.sip b/sip/QtMultimediaWidgets/qcameraviewfinder.sip
new file mode 100644
index 0000000..0aa662e
--- /dev/null
+++ b/sip/QtMultimediaWidgets/qcameraviewfinder.sip
@@ -0,0 +1,39 @@
+// qcameraviewfinder.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtMultimediaWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCameraViewfinder : QVideoWidget
+{
+%TypeHeaderCode
+#include <qcameraviewfinder.h>
+%End
+
+public:
+    QCameraViewfinder(QWidget *parent /TransferThis/ = 0);
+    virtual ~QCameraViewfinder();
+    virtual QMediaObject *mediaObject() const;
+
+protected:
+    virtual bool setMediaObject(QMediaObject *object);
+
+private:
+    QCameraViewfinder(const QCameraViewfinder &);
+};
diff --git a/sip/QtMultimediaWidgets/qgraphicsvideoitem.sip b/sip/QtMultimediaWidgets/qgraphicsvideoitem.sip
new file mode 100644
index 0000000..0821d34
--- /dev/null
+++ b/sip/QtMultimediaWidgets/qgraphicsvideoitem.sip
@@ -0,0 +1,70 @@
+// qgraphicsvideoitem.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtMultimediaWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsVideoItem : QGraphicsObject, QMediaBindableInterface
+{
+%TypeHeaderCode
+#include <qgraphicsvideoitem.h>
+%End
+
+%ConvertToSubClassCode
+    // QGraphicsVideoItem doesn't reimplement type() so we hope nothing collides
+    // with the default.
+    if (sipCpp->type() == QGraphicsItem::UserType)
+    {
+        // We need to explicitly cast because of the multiple inheritance.
+        *sipCppRet = static_cast<QGraphicsVideoItem *>(sipCpp);
+        sipType = sipType_QGraphicsVideoItem;
+    }
+    else
+    {
+        sipType = 0;
+    }
+%End
+
+public:
+    QGraphicsVideoItem(QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsVideoItem();
+    virtual QMediaObject *mediaObject() const;
+    Qt::AspectRatioMode aspectRatioMode() const;
+    void setAspectRatioMode(Qt::AspectRatioMode mode);
+    QPointF offset() const;
+    void setOffset(const QPointF &offset);
+    QSizeF size() const;
+    void setSize(const QSizeF &size);
+    QSizeF nativeSize() const;
+    virtual QRectF boundingRect() const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+
+signals:
+    void nativeSizeChanged(const QSizeF &size);
+
+protected:
+    virtual void timerEvent(QTimerEvent *event);
+    virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value);
+    virtual bool setMediaObject(QMediaObject *object);
+};
+
+%ModuleHeaderCode
+// This is needed by the %ConvertToSubClassCode.
+#include <QGraphicsVideoItem>
+%End
diff --git a/sip/QtMultimediaWidgets/qvideowidget.sip b/sip/QtMultimediaWidgets/qvideowidget.sip
new file mode 100644
index 0000000..43191a3
--- /dev/null
+++ b/sip/QtMultimediaWidgets/qvideowidget.sip
@@ -0,0 +1,93 @@
+// qvideowidget.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtMultimediaWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QVideoWidget : QWidget, QMediaBindableInterface
+{
+%TypeHeaderCode
+#include <qvideowidget.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QGraphicsVideoItem, &sipType_QGraphicsVideoItem, -1, 1},
+        {sipName_QVideoWidget, &sipType_QVideoWidget, 2, -1},
+        {sipName_QCameraViewfinder, &sipType_QCameraViewfinder, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    QVideoWidget(QWidget *parent /TransferThis/ = 0);
+    virtual ~QVideoWidget();
+    virtual QMediaObject *mediaObject() const;
+    Qt::AspectRatioMode aspectRatioMode() const;
+    int brightness() const;
+    int contrast() const;
+    int hue() const;
+    int saturation() const;
+    virtual QSize sizeHint() const;
+
+public slots:
+    void setFullScreen(bool fullScreen);
+    void setAspectRatioMode(Qt::AspectRatioMode mode);
+    void setBrightness(int brightness);
+    void setContrast(int contrast);
+    void setHue(int hue);
+    void setSaturation(int saturation);
+
+signals:
+    void fullScreenChanged(bool fullScreen);
+    void brightnessChanged(int brightness);
+    void contrastChanged(int contrast);
+    void hueChanged(int hue);
+    void saturationChanged(int saturation);
+
+protected:
+    virtual bool event(QEvent *event);
+    virtual void showEvent(QShowEvent *event);
+    virtual void hideEvent(QHideEvent *event);
+    virtual void resizeEvent(QResizeEvent *event);
+    virtual void moveEvent(QMoveEvent *event);
+    virtual void paintEvent(QPaintEvent *event);
+    virtual bool setMediaObject(QMediaObject *object);
+};
diff --git a/sip/QtNetwork/QtNetworkmod.sip b/sip/QtNetwork/QtNetworkmod.sip
new file mode 100644
index 0000000..bbdb601
--- /dev/null
+++ b/sip/QtNetwork/QtNetworkmod.sip
@@ -0,0 +1,80 @@
+// QtNetworkmod.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtNetwork, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qabstractnetworkcache.sip
+%Include qabstractsocket.sip
+%Include qauthenticator.sip
+%Include qdnslookup.sip
+%Include qhostaddress.sip
+%Include qhostinfo.sip
+%Include qhttpmultipart.sip
+%Include qlocalserver.sip
+%Include qlocalsocket.sip
+%Include qnetworkaccessmanager.sip
+%Include qnetworkconfigmanager.sip
+%Include qnetworkconfiguration.sip
+%Include qnetworkcookie.sip
+%Include qnetworkcookiejar.sip
+%Include qnetworkdiskcache.sip
+%Include qnetworkinterface.sip
+%Include qnetworkproxy.sip
+%Include qnetworkreply.sip
+%Include qnetworkrequest.sip
+%Include qnetworksession.sip
+%Include qssl.sip
+%Include qsslcertificate.sip
+%Include qsslcertificateextension.sip
+%Include qsslconfiguration.sip
+%Include qsslcipher.sip
+%Include qsslerror.sip
+%Include qsslkey.sip
+%Include qsslsocket.sip
+%Include qtcpserver.sip
+%Include qtcpsocket.sip
+%Include qudpsocket.sip
+%Include qpynetwork_qhash.sip
+%Include qpynetwork_qmap.sip
diff --git a/sip/QtNetwork/qabstractnetworkcache.sip b/sip/QtNetwork/qabstractnetworkcache.sip
new file mode 100644
index 0000000..776f501
--- /dev/null
+++ b/sip/QtNetwork/qabstractnetworkcache.sip
@@ -0,0 +1,85 @@
+// qabstractnetworkcache.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qabstractnetworkcache.h>
+%End
+
+class QNetworkCacheMetaData
+{
+%TypeHeaderCode
+#include <qabstractnetworkcache.h>
+%End
+
+    typedef QList<QPair<QByteArray, QByteArray>> RawHeaderList;
+    typedef QHash<QNetworkRequest::Attribute, QVariant> AttributesMap;
+
+public:
+    QNetworkCacheMetaData();
+    QNetworkCacheMetaData(const QNetworkCacheMetaData &other);
+    ~QNetworkCacheMetaData();
+    bool operator==(const QNetworkCacheMetaData &other) const;
+    bool operator!=(const QNetworkCacheMetaData &other) const;
+    bool isValid() const;
+    QUrl url() const;
+    void setUrl(const QUrl &url);
+    RawHeaderList rawHeaders() const;
+    void setRawHeaders(const RawHeaderList &headers);
+    QDateTime lastModified() const;
+    void setLastModified(const QDateTime &dateTime);
+    QDateTime expirationDate() const;
+    void setExpirationDate(const QDateTime &dateTime);
+    bool saveToDisk() const;
+    void setSaveToDisk(bool allow);
+    AttributesMap attributes() const;
+    void setAttributes(const AttributesMap &attributes);
+    void swap(QNetworkCacheMetaData &other);
+};
+
+QDataStream &operator<<(QDataStream &, const QNetworkCacheMetaData & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QNetworkCacheMetaData & /Constrained/) /ReleaseGIL/;
+
+class QAbstractNetworkCache : QObject
+{
+%TypeHeaderCode
+#include <qabstractnetworkcache.h>
+%End
+
+public:
+    virtual ~QAbstractNetworkCache();
+    virtual QNetworkCacheMetaData metaData(const QUrl &url) = 0;
+    virtual void updateMetaData(const QNetworkCacheMetaData &metaData) = 0;
+    virtual QIODevice *data(const QUrl &url) = 0 /Factory/;
+    virtual bool remove(const QUrl &url) = 0;
+    virtual qint64 cacheSize() const = 0;
+    virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData) = 0;
+    virtual void insert(QIODevice *device) = 0;
+
+public slots:
+    virtual void clear() = 0;
+
+protected:
+    explicit QAbstractNetworkCache(QObject *parent /TransferThis/ = 0);
+
+private:
+    QAbstractNetworkCache(const QAbstractNetworkCache &);
+};
diff --git a/sip/QtNetwork/qabstractsocket.sip b/sip/QtNetwork/qabstractsocket.sip
new file mode 100644
index 0000000..0075fd5
--- /dev/null
+++ b/sip/QtNetwork/qabstractsocket.sip
@@ -0,0 +1,309 @@
+// qabstractsocket.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qabstractsocket.h>
+%End
+
+class QAbstractSocket : QIODevice
+{
+%TypeHeaderCode
+#include <qabstractsocket.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QNetworkReply, &sipType_QNetworkReply, -1, 1},
+        {sipName_QHttpMultiPart, &sipType_QHttpMultiPart, -1, 2},
+        {sipName_QAbstractNetworkCache, &sipType_QAbstractNetworkCache, 12, 3},
+        {sipName_QNetworkConfigurationManager, &sipType_QNetworkConfigurationManager, -1, 4},
+        {sipName_QNetworkCookieJar, &sipType_QNetworkCookieJar, -1, 5},
+        {sipName_QAbstractSocket, &sipType_QAbstractSocket, 13, 6},
+        {sipName_QLocalSocket, &sipType_QLocalSocket, -1, 7},
+        {sipName_QDnsLookup, &sipType_QDnsLookup, -1, 8},
+        {sipName_QNetworkSession, &sipType_QNetworkSession, -1, 9},
+        {sipName_QTcpServer, &sipType_QTcpServer, -1, 10},
+        {sipName_QNetworkAccessManager, &sipType_QNetworkAccessManager, -1, 11},
+        {sipName_QLocalServer, &sipType_QLocalServer, -1, -1},
+        {sipName_QNetworkDiskCache, &sipType_QNetworkDiskCache, -1, -1},
+        {sipName_QUdpSocket, &sipType_QUdpSocket, -1, 14},
+        {sipName_QTcpSocket, &sipType_QTcpSocket, 15, -1},
+    #if defined(SIP_FEATURE_PyQt_SSL)
+        {sipName_QSslSocket, &sipType_QSslSocket, -1, -1},
+    #else
+        {0, 0, -1, -1},
+    #endif
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    enum SocketType
+    {
+        TcpSocket,
+        UdpSocket,
+        UnknownSocketType,
+    };
+
+    enum NetworkLayerProtocol
+    {
+        IPv4Protocol,
+        IPv6Protocol,
+        AnyIPProtocol,
+        UnknownNetworkLayerProtocol,
+    };
+
+    enum SocketError
+    {
+        ConnectionRefusedError,
+        RemoteHostClosedError,
+        HostNotFoundError,
+        SocketAccessError,
+        SocketResourceError,
+        SocketTimeoutError,
+        DatagramTooLargeError,
+        NetworkError,
+        AddressInUseError,
+        SocketAddressNotAvailableError,
+        UnsupportedSocketOperationError,
+        UnfinishedSocketOperationError,
+        ProxyAuthenticationRequiredError,
+        SslHandshakeFailedError,
+        ProxyConnectionRefusedError,
+        ProxyConnectionClosedError,
+        ProxyConnectionTimeoutError,
+        ProxyNotFoundError,
+        ProxyProtocolError,
+        OperationError,
+        SslInternalError,
+        SslInvalidUserDataError,
+        TemporaryError,
+        UnknownSocketError,
+    };
+
+    enum SocketState
+    {
+        UnconnectedState,
+        HostLookupState,
+        ConnectingState,
+        ConnectedState,
+        BoundState,
+        ListeningState,
+        ClosingState,
+    };
+
+    QAbstractSocket(QAbstractSocket::SocketType socketType, QObject *parent /TransferThis/);
+    virtual ~QAbstractSocket();
+    virtual void connectToHost(const QString &hostName, quint16 port, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/;
+    virtual void connectToHost(const QHostAddress &address, quint16 port, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite) /ReleaseGIL/;
+    virtual void disconnectFromHost() /ReleaseGIL/;
+    bool isValid() const;
+    virtual qint64 bytesAvailable() const;
+    virtual qint64 bytesToWrite() const;
+    virtual bool canReadLine() const;
+    quint16 localPort() const;
+    QHostAddress localAddress() const;
+    quint16 peerPort() const;
+    QHostAddress peerAddress() const;
+    QString peerName() const;
+    qint64 readBufferSize() const;
+    virtual void setReadBufferSize(qint64 size);
+    void abort();
+    virtual bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = QAbstractSocket::ConnectedState, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite);
+    virtual qintptr socketDescriptor() const;
+    QAbstractSocket::SocketType socketType() const;
+    QAbstractSocket::SocketState state() const;
+    QAbstractSocket::SocketError error() const;
+    virtual void close();
+    virtual bool isSequential() const;
+    virtual bool atEnd() const;
+    bool flush() /ReleaseGIL/;
+    virtual bool waitForConnected(int msecs = 30000) /ReleaseGIL/;
+    virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/;
+    virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/;
+    virtual bool waitForDisconnected(int msecs = 30000) /ReleaseGIL/;
+    void setProxy(const QNetworkProxy &networkProxy);
+    QNetworkProxy proxy() const;
+
+signals:
+    void hostFound();
+    void connected();
+    void disconnected();
+    void stateChanged(QAbstractSocket::SocketState);
+    void error(QAbstractSocket::SocketError);
+    void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
+
+protected:
+    virtual SIP_PYOBJECT readData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QAbstractSocket::readData(s, a0) : sipCpp->readData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual SIP_PYOBJECT readLineData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QAbstractSocket::readLineData(s, a0) : sipCpp->readLineData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/;
+    void setSocketState(QAbstractSocket::SocketState state);
+    void setSocketError(QAbstractSocket::SocketError socketError);
+    void setLocalPort(quint16 port);
+    void setLocalAddress(const QHostAddress &address);
+    void setPeerPort(quint16 port);
+    void setPeerAddress(const QHostAddress &address);
+    void setPeerName(const QString &name);
+
+public:
+    enum SocketOption
+    {
+        LowDelayOption,
+        KeepAliveOption,
+        MulticastTtlOption,
+        MulticastLoopbackOption,
+        TypeOfServiceOption,
+%If (Qt_5_3_0 -)
+        SendBufferSizeSocketOption,
+%End
+%If (Qt_5_3_0 -)
+        ReceiveBufferSizeSocketOption,
+%End
+    };
+
+    virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value);
+    virtual QVariant socketOption(QAbstractSocket::SocketOption option);
+
+    enum BindFlag
+    {
+        DefaultForPlatform,
+        ShareAddress,
+        DontShareAddress,
+        ReuseAddressHint,
+    };
+
+    typedef QFlags<QAbstractSocket::BindFlag> BindMode;
+
+    enum PauseMode
+    {
+        PauseNever,
+        PauseOnSslErrors,
+    };
+
+    typedef QFlags<QAbstractSocket::PauseMode> PauseModes;
+    virtual void resume() /ReleaseGIL/;
+    QFlags<QAbstractSocket::PauseMode> pauseMode() const;
+    void setPauseMode(QFlags<QAbstractSocket::PauseMode> pauseMode);
+    bool bind(const QHostAddress &address, quint16 port = 0, QFlags<QAbstractSocket::BindFlag> mode = QAbstractSocket::DefaultForPlatform);
+    bool bind(quint16 port = 0, QFlags<QAbstractSocket::BindFlag> mode = QAbstractSocket::DefaultForPlatform);
+
+private:
+    QAbstractSocket(const QAbstractSocket &);
+};
+
+QFlags<QAbstractSocket::BindFlag> operator|(QAbstractSocket::BindFlag f1, QFlags<QAbstractSocket::BindFlag> f2);
+QFlags<QAbstractSocket::PauseMode> operator|(QAbstractSocket::PauseMode f1, QFlags<QAbstractSocket::PauseMode> f2);
diff --git a/sip/QtNetwork/qauthenticator.sip b/sip/QtNetwork/qauthenticator.sip
new file mode 100644
index 0000000..8a2b599
--- /dev/null
+++ b/sip/QtNetwork/qauthenticator.sip
@@ -0,0 +1,44 @@
+// qauthenticator.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAuthenticator
+{
+%TypeHeaderCode
+#include <qauthenticator.h>
+%End
+
+public:
+    QAuthenticator();
+    QAuthenticator(const QAuthenticator &other);
+    ~QAuthenticator();
+    bool operator==(const QAuthenticator &other) const;
+    bool operator!=(const QAuthenticator &other) const;
+    QString user() const;
+    void setUser(const QString &user);
+    QString password() const;
+    void setPassword(const QString &password);
+    QString realm() const;
+    bool isNull() const;
+    QVariant option(const QString &opt) const;
+    QVariantHash options() const;
+    void setOption(const QString &opt, const QVariant &value);
+};
diff --git a/sip/QtNetwork/qdnslookup.sip b/sip/QtNetwork/qdnslookup.sip
new file mode 100644
index 0000000..b3c6811
--- /dev/null
+++ b/sip/QtNetwork/qdnslookup.sip
@@ -0,0 +1,178 @@
+// qdnslookup.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDnsDomainNameRecord
+{
+%TypeHeaderCode
+#include <qdnslookup.h>
+%End
+
+public:
+    QDnsDomainNameRecord();
+    QDnsDomainNameRecord(const QDnsDomainNameRecord &other);
+    ~QDnsDomainNameRecord();
+    void swap(QDnsDomainNameRecord &other);
+    QString name() const;
+    quint32 timeToLive() const;
+    QString value() const;
+};
+
+class QDnsHostAddressRecord
+{
+%TypeHeaderCode
+#include <qdnslookup.h>
+%End
+
+public:
+    QDnsHostAddressRecord();
+    QDnsHostAddressRecord(const QDnsHostAddressRecord &other);
+    ~QDnsHostAddressRecord();
+    void swap(QDnsHostAddressRecord &other);
+    QString name() const;
+    quint32 timeToLive() const;
+    QHostAddress value() const;
+};
+
+class QDnsMailExchangeRecord
+{
+%TypeHeaderCode
+#include <qdnslookup.h>
+%End
+
+public:
+    QDnsMailExchangeRecord();
+    QDnsMailExchangeRecord(const QDnsMailExchangeRecord &other);
+    ~QDnsMailExchangeRecord();
+    void swap(QDnsMailExchangeRecord &other);
+    QString exchange() const;
+    QString name() const;
+    quint16 preference() const;
+    quint32 timeToLive() const;
+};
+
+class QDnsServiceRecord
+{
+%TypeHeaderCode
+#include <qdnslookup.h>
+%End
+
+public:
+    QDnsServiceRecord();
+    QDnsServiceRecord(const QDnsServiceRecord &other);
+    ~QDnsServiceRecord();
+    void swap(QDnsServiceRecord &other);
+    QString name() const;
+    quint16 port() const;
+    quint16 priority() const;
+    QString target() const;
+    quint32 timeToLive() const;
+    quint16 weight() const;
+};
+
+class QDnsTextRecord
+{
+%TypeHeaderCode
+#include <qdnslookup.h>
+%End
+
+public:
+    QDnsTextRecord();
+    QDnsTextRecord(const QDnsTextRecord &other);
+    ~QDnsTextRecord();
+    void swap(QDnsTextRecord &other);
+    QString name() const;
+    quint32 timeToLive() const;
+    QList<QByteArray> values() const;
+};
+
+class QDnsLookup : QObject
+{
+%TypeHeaderCode
+#include <qdnslookup.h>
+%End
+
+public:
+    enum Error
+    {
+        NoError,
+        ResolverError,
+        OperationCancelledError,
+        InvalidRequestError,
+        InvalidReplyError,
+        ServerFailureError,
+        ServerRefusedError,
+        NotFoundError,
+    };
+
+    enum Type
+    {
+        A,
+        AAAA,
+        ANY,
+        CNAME,
+        MX,
+        NS,
+        PTR,
+        SRV,
+        TXT,
+    };
+
+    explicit QDnsLookup(QObject *parent /TransferThis/ = 0);
+    QDnsLookup(QDnsLookup::Type type, const QString &name, QObject *parent /TransferThis/ = 0);
+    virtual ~QDnsLookup();
+    QDnsLookup::Error error() const;
+    QString errorString() const;
+    bool isFinished() const;
+    QString name() const;
+    void setName(const QString &name);
+    QDnsLookup::Type type() const;
+    void setType(QDnsLookup::Type);
+    QList<QDnsDomainNameRecord> canonicalNameRecords() const;
+    QList<QDnsHostAddressRecord> hostAddressRecords() const;
+    QList<QDnsMailExchangeRecord> mailExchangeRecords() const;
+    QList<QDnsDomainNameRecord> nameServerRecords() const;
+    QList<QDnsDomainNameRecord> pointerRecords() const;
+    QList<QDnsServiceRecord> serviceRecords() const;
+    QList<QDnsTextRecord> textRecords() const;
+
+public slots:
+    void abort() /ReleaseGIL/;
+    void lookup() /ReleaseGIL/;
+
+signals:
+    void finished();
+    void nameChanged(const QString &name);
+    void typeChanged(QDnsLookup::Type type);
+
+public:
+%If (Qt_5_3_0 -)
+    QHostAddress nameserver() const;
+%End
+%If (Qt_5_3_0 -)
+    void setNameserver(const QHostAddress &nameserver);
+%End
+
+signals:
+%If (Qt_5_3_0 -)
+    void nameserverChanged(const QHostAddress &nameserver);
+%End
+};
diff --git a/sip/QtNetwork/qhostaddress.sip b/sip/QtNetwork/qhostaddress.sip
new file mode 100644
index 0000000..4e22ebf
--- /dev/null
+++ b/sip/QtNetwork/qhostaddress.sip
@@ -0,0 +1,161 @@
+// qhostaddress.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qhostaddress.h>
+%End
+
+class QHostAddress
+{
+%TypeHeaderCode
+#include <qhostaddress.h>
+%End
+
+%ConvertToTypeCode
+// SIP doesn't support automatic type convertors so we explicitly allow a
+// QHostAddress::SpecialAddress to be used whenever a QHostAddress is expected.
+
+if (sipIsErr == NULL)
+    return (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_QHostAddress_SpecialAddress)) ||
+            sipCanConvertToType(sipPy, sipType_QHostAddress, SIP_NO_CONVERTORS));
+
+if (PyObject_TypeCheck(sipPy, sipTypeAsPyTypeObject(sipType_QHostAddress_SpecialAddress)))
+{
+    *sipCppPtr = new QHostAddress((QHostAddress::SpecialAddress)SIPLong_AsLong(sipPy));
+
+    return sipGetState(sipTransferObj);
+}
+
+*sipCppPtr = reinterpret_cast<QHostAddress *>(sipConvertToType(sipPy, sipType_QHostAddress, sipTransferObj, SIP_NO_CONVERTORS, 0, sipIsErr));
+
+return 0;
+%End
+
+public:
+    enum SpecialAddress
+    {
+        Null,
+        Broadcast,
+        LocalHost,
+        LocalHostIPv6,
+        AnyIPv4,
+        AnyIPv6,
+        Any,
+    };
+
+    QHostAddress();
+    QHostAddress(QHostAddress::SpecialAddress address /Constrained/);
+    explicit QHostAddress(quint32 ip4Addr);
+    explicit QHostAddress(const QString &address);
+    explicit QHostAddress(const Q_IPV6ADDR &ip6Addr);
+    QHostAddress(const QHostAddress &copy);
+    ~QHostAddress();
+    void setAddress(quint32 ip4Addr);
+    bool setAddress(const QString &address);
+    void setAddress(const Q_IPV6ADDR &ip6Addr);
+    QAbstractSocket::NetworkLayerProtocol protocol() const;
+    quint32 toIPv4Address() const;
+    Q_IPV6ADDR toIPv6Address() const;
+    QString toString() const;
+    QString scopeId() const;
+    void setScopeId(const QString &id);
+    bool operator==(const QHostAddress &address) const;
+    bool operator==(QHostAddress::SpecialAddress address) const;
+    bool operator!=(const QHostAddress &address) const;
+    bool operator!=(QHostAddress::SpecialAddress address) const;
+    bool isNull() const;
+    void clear();
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+
+    bool isInSubnet(const QHostAddress &subnet, int netmask) const;
+    bool isInSubnet(const QPair<QHostAddress, int> &subnet) const;
+    bool isLoopback() const;
+    static QPair<QHostAddress, int> parseSubnet(const QString &subnet);
+};
+
+bool operator==(QHostAddress::SpecialAddress address1, const QHostAddress &address2);
+QDataStream &operator<<(QDataStream &, const QHostAddress &) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QHostAddress &) /ReleaseGIL/;
+// Q_IPV6ADDR is implemented as a Python 16-tuple of ints.
+%MappedType Q_IPV6ADDR /DocType="16-tuple-of-int"/
+{
+%TypeHeaderCode
+#include <qhostaddress.h>
+%End
+
+%ConvertFromTypeCode
+    // Create the tuple.
+    PyObject *t;
+
+    if ((t = PyTuple_New(16)) == NULL)
+        return NULL;
+
+    // Set the tuple elements.
+    for (int i = 0; i < 16; ++i)
+    {
+        PyObject *pobj;
+
+        if ((pobj = SIPLong_FromLong((*sipCpp)[i])) == NULL)
+        {
+            Py_DECREF(t);
+
+            return NULL;
+        }
+
+        PyTuple_SET_ITEM(t, i, pobj);
+    }
+
+    return t;
+%End
+
+%ConvertToTypeCode
+    // Check the type if that is all that is required.
+    if (sipIsErr == NULL)
+        return (PySequence_Check(sipPy) && PySequence_Size(sipPy) == 16);
+
+    Q_IPV6ADDR *qa = new Q_IPV6ADDR;
+ 
+    for (SIP_SSIZE_T i = 0; i < 16; ++i)
+    {
+        PyObject *itm = PySequence_ITEM(sipPy, i);
+
+        if (!itm)
+        {
+            delete qa;
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        (*qa)[i] = SIPLong_AsLong(itm);
+
+        Py_DECREF(itm);
+    }
+ 
+    *sipCppPtr = qa;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtNetwork/qhostinfo.sip b/sip/QtNetwork/qhostinfo.sip
new file mode 100644
index 0000000..3b6c6b1
--- /dev/null
+++ b/sip/QtNetwork/qhostinfo.sip
@@ -0,0 +1,85 @@
+// qhostinfo.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHostInfo
+{
+%TypeHeaderCode
+#include <qhostinfo.h>
+%End
+
+public:
+    enum HostInfoError
+    {
+        NoError,
+        HostNotFound,
+        UnknownError,
+    };
+
+    explicit QHostInfo(int id = -1);
+    QHostInfo(const QHostInfo &d);
+    ~QHostInfo();
+    QString hostName() const;
+    void setHostName(const QString &name);
+    QList<QHostAddress> addresses() const;
+    void setAddresses(const QList<QHostAddress> &addresses);
+    QHostInfo::HostInfoError error() const;
+    void setError(QHostInfo::HostInfoError error);
+    QString errorString() const;
+    void setErrorString(const QString &errorString);
+    void setLookupId(int id);
+    int lookupId() const;
+    static int lookupHost(const QString &name, SIP_PYOBJECT slot /DocType="callable-or-signal"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtnetwork_get_connection_parts(a1, 0, "(QHostInfo)", true, &receiver, slot_signature)) == sipErrorNone)
+        {
+            QHostInfo::lookupHost(*a0, receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(1, a1);
+        }
+%End
+
+    static void abortHostLookup(int lookupId);
+    static QHostInfo fromName(const QString &name);
+    static QString localHostName();
+    static QString localDomainName();
+};
+
+%ModuleHeaderCode
+// Imports from QtCore.
+typedef sipErrorState (*pyqt5_qtnetwork_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &);
+extern pyqt5_qtnetwork_get_connection_parts_t pyqt5_qtnetwork_get_connection_parts;
+%End
+
+%ModuleCode
+// Imports from QtCore.
+pyqt5_qtnetwork_get_connection_parts_t pyqt5_qtnetwork_get_connection_parts;
+%End
+
+%PostInitialisationCode
+// Imports from QtCore.
+pyqt5_qtnetwork_get_connection_parts = (pyqt5_qtnetwork_get_connection_parts_t)sipImportSymbol("pyqt5_get_connection_parts");
+%End
diff --git a/sip/QtNetwork/qhttpmultipart.sip b/sip/QtNetwork/qhttpmultipart.sip
new file mode 100644
index 0000000..6c9a8c1
--- /dev/null
+++ b/sip/QtNetwork/qhttpmultipart.sip
@@ -0,0 +1,67 @@
+// qhttpmultipart.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHttpPart
+{
+%TypeHeaderCode
+#include <qhttpmultipart.h>
+%End
+
+public:
+    QHttpPart();
+    QHttpPart(const QHttpPart &other);
+    ~QHttpPart();
+    bool operator==(const QHttpPart &other) const;
+    bool operator!=(const QHttpPart &other) const;
+    void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value);
+    void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue);
+    void setBody(const QByteArray &body);
+    void setBodyDevice(QIODevice *device);
+    void swap(QHttpPart &other);
+};
+
+class QHttpMultiPart : QObject
+{
+%TypeHeaderCode
+#include <qhttpmultipart.h>
+%End
+
+public:
+    enum ContentType
+    {
+        MixedType,
+        RelatedType,
+        FormDataType,
+        AlternativeType,
+    };
+
+    explicit QHttpMultiPart(QObject *parent /TransferThis/ = 0);
+    QHttpMultiPart(QHttpMultiPart::ContentType contentType, QObject *parent /TransferThis/ = 0);
+    virtual ~QHttpMultiPart();
+    void append(const QHttpPart &httpPart);
+    void setContentType(QHttpMultiPart::ContentType contentType);
+    QByteArray boundary() const;
+    void setBoundary(const QByteArray &boundary);
+
+private:
+    QHttpMultiPart(const QHttpMultiPart &);
+};
diff --git a/sip/QtNetwork/qlocalserver.sip b/sip/QtNetwork/qlocalserver.sip
new file mode 100644
index 0000000..7aea1cd
--- /dev/null
+++ b/sip/QtNetwork/qlocalserver.sip
@@ -0,0 +1,74 @@
+// qlocalserver.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qlocalserver.h>
+%End
+
+class QLocalServer : QObject
+{
+%TypeHeaderCode
+#include <qlocalserver.h>
+%End
+
+public:
+    explicit QLocalServer(QObject *parent /TransferThis/ = 0);
+    virtual ~QLocalServer();
+    void close();
+    QString errorString() const;
+    virtual bool hasPendingConnections() const;
+    bool isListening() const;
+    bool listen(const QString &name);
+    bool listen(qintptr socketDescriptor);
+    int maxPendingConnections() const;
+    virtual QLocalSocket *nextPendingConnection();
+    QString serverName() const;
+    QString fullServerName() const;
+    QAbstractSocket::SocketError serverError() const;
+    void setMaxPendingConnections(int numConnections);
+    bool waitForNewConnection(int msecs = 0, bool *timedOut = 0) /ReleaseGIL/;
+    static bool removeServer(const QString &name);
+
+signals:
+    void newConnection();
+
+protected:
+    virtual void incomingConnection(quintptr socketDescriptor);
+
+public:
+    enum SocketOption
+    {
+        UserAccessOption,
+        GroupAccessOption,
+        OtherAccessOption,
+        WorldAccessOption,
+    };
+
+    typedef QFlags<QLocalServer::SocketOption> SocketOptions;
+    void setSocketOptions(QFlags<QLocalServer::SocketOption> options);
+    QFlags<QLocalServer::SocketOption> socketOptions() const;
+
+private:
+    QLocalServer(const QLocalServer &);
+};
+
+QFlags<QLocalServer::SocketOption> operator|(QLocalServer::SocketOption f1, QFlags<QLocalServer::SocketOption> f2);
diff --git a/sip/QtNetwork/qlocalsocket.sip b/sip/QtNetwork/qlocalsocket.sip
new file mode 100644
index 0000000..8be4529
--- /dev/null
+++ b/sip/QtNetwork/qlocalsocket.sip
@@ -0,0 +1,136 @@
+// qlocalsocket.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QLocalSocket : QIODevice
+{
+%TypeHeaderCode
+#include <qlocalsocket.h>
+%End
+
+public:
+    enum LocalSocketError
+    {
+        ConnectionRefusedError,
+        PeerClosedError,
+        ServerNotFoundError,
+        SocketAccessError,
+        SocketResourceError,
+        SocketTimeoutError,
+        DatagramTooLargeError,
+        ConnectionError,
+        UnsupportedSocketOperationError,
+        OperationError,
+        UnknownSocketError,
+    };
+
+    enum LocalSocketState
+    {
+        UnconnectedState,
+        ConnectingState,
+        ConnectedState,
+        ClosingState,
+    };
+
+    QLocalSocket(QObject *parent /TransferThis/ = 0);
+    virtual ~QLocalSocket();
+    void connectToServer(const QString &name, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite) /ReleaseGIL/;
+%If (Qt_5_1_0 -)
+    void connectToServer(QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite);
+%End
+    void disconnectFromServer() /ReleaseGIL/;
+%If (Qt_5_1_0 -)
+    virtual bool open(QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite);
+%End
+    QString serverName() const;
+%If (Qt_5_1_0 -)
+    void setServerName(const QString &name);
+%End
+    QString fullServerName() const;
+    void abort();
+    virtual bool isSequential() const;
+    virtual qint64 bytesAvailable() const;
+    virtual qint64 bytesToWrite() const;
+    virtual bool canReadLine() const;
+    virtual void close();
+    QLocalSocket::LocalSocketError error() const;
+    bool flush();
+    bool isValid() const;
+    qint64 readBufferSize() const;
+    void setReadBufferSize(qint64 size);
+    bool setSocketDescriptor(qintptr socketDescriptor, QLocalSocket::LocalSocketState state = QLocalSocket::ConnectedState, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite);
+    qintptr socketDescriptor() const;
+    QLocalSocket::LocalSocketState state() const;
+    virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/;
+    bool waitForConnected(int msecs = 30000) /ReleaseGIL/;
+    bool waitForDisconnected(int msecs = 30000) /ReleaseGIL/;
+    virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/;
+
+signals:
+    void connected();
+    void disconnected();
+    void error(QLocalSocket::LocalSocketError socketError);
+    void stateChanged(QLocalSocket::LocalSocketState socketState);
+
+protected:
+    virtual SIP_PYOBJECT readData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *, qint64)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QLocalSocket::readData(s, a0) : sipCpp->readData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual qint64 writeData(const char * /Array/, qint64 /ArraySize/) /ReleaseGIL/;
+
+private:
+    QLocalSocket(const QLocalSocket &);
+};
diff --git a/sip/QtNetwork/qnetworkaccessmanager.sip b/sip/QtNetwork/qnetworkaccessmanager.sip
new file mode 100644
index 0000000..1a6724c
--- /dev/null
+++ b/sip/QtNetwork/qnetworkaccessmanager.sip
@@ -0,0 +1,107 @@
+// qnetworkaccessmanager.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QNetworkAccessManager : QObject
+{
+%TypeHeaderCode
+#include <qnetworkaccessmanager.h>
+%End
+
+public:
+    enum Operation
+    {
+        HeadOperation,
+        GetOperation,
+        PutOperation,
+        PostOperation,
+        DeleteOperation,
+        CustomOperation,
+    };
+
+    explicit QNetworkAccessManager(QObject *parent /TransferThis/ = 0);
+    virtual ~QNetworkAccessManager();
+    QNetworkProxy proxy() const;
+    void setProxy(const QNetworkProxy &proxy);
+    QNetworkCookieJar *cookieJar() const;
+    void setCookieJar(QNetworkCookieJar *cookieJar /Transfer/);
+    QNetworkReply *head(const QNetworkRequest &request);
+    QNetworkReply *get(const QNetworkRequest &request);
+    QNetworkReply *post(const QNetworkRequest &request, QIODevice *data);
+    QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data);
+    QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart);
+    QNetworkReply *put(const QNetworkRequest &request, QIODevice *data);
+    QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data);
+    QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart);
+
+signals:
+    void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
+    void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);
+    void finished(QNetworkReply *reply);
+%If (Qt_5_1_0 -)
+    void encrypted(QNetworkReply *reply);
+%End
+%If (PyQt_SSL)
+    void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
+%End
+    void networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility accessible);
+
+protected:
+    virtual QNetworkReply *createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *device = 0) /ReleaseGIL/;
+
+public:
+    QNetworkProxyFactory *proxyFactory() const;
+    void setProxyFactory(QNetworkProxyFactory *factory /Transfer/);
+    QAbstractNetworkCache *cache() const;
+    void setCache(QAbstractNetworkCache *cache /Transfer/);
+    QNetworkReply *deleteResource(const QNetworkRequest &request);
+
+    enum NetworkAccessibility
+    {
+        UnknownAccessibility,
+        NotAccessible,
+        Accessible,
+    };
+
+    QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = 0);
+    void setConfiguration(const QNetworkConfiguration &config);
+    QNetworkConfiguration configuration() const;
+    QNetworkConfiguration activeConfiguration() const;
+    void setNetworkAccessible(QNetworkAccessManager::NetworkAccessibility accessible);
+    QNetworkAccessManager::NetworkAccessibility networkAccessible() const;
+    void clearAccessCache();
+%If (Qt_5_2_0 -)
+    QStringList supportedSchemes() const;
+%End
+%If (Qt_5_2_0 -)
+%If (PyQt_SSL)
+    void connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration());
+%End
+%End
+%If (Qt_5_2_0 -)
+    void connectToHost(const QString &hostName, quint16 port = 80);
+%End
+
+protected slots:
+%If (Qt_5_2_0 -)
+    QStringList supportedSchemesImplementation() const;
+%End
+};
diff --git a/sip/QtNetwork/qnetworkconfigmanager.sip b/sip/QtNetwork/qnetworkconfigmanager.sip
new file mode 100644
index 0000000..bf97b1d
--- /dev/null
+++ b/sip/QtNetwork/qnetworkconfigmanager.sip
@@ -0,0 +1,67 @@
+// qnetworkconfigmanager.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qnetworkconfigmanager.h>
+%End
+
+class QNetworkConfigurationManager : QObject
+{
+%TypeHeaderCode
+#include <qnetworkconfigmanager.h>
+%End
+
+public:
+    enum Capability
+    {
+        CanStartAndStopInterfaces,
+        DirectConnectionRouting,
+        SystemSessionSupport,
+        ApplicationLevelRoaming,
+        ForcedRoaming,
+        DataStatistics,
+        NetworkSessionRequired,
+    };
+
+    typedef QFlags<QNetworkConfigurationManager::Capability> Capabilities;
+    explicit QNetworkConfigurationManager(QObject *parent /TransferThis/ = 0);
+    virtual ~QNetworkConfigurationManager();
+    QFlags<QNetworkConfigurationManager::Capability> capabilities() const;
+    QNetworkConfiguration defaultConfiguration() const;
+    QList<QNetworkConfiguration> allConfigurations(QFlags<QNetworkConfiguration::StateFlag> flags = 0) const;
+    QNetworkConfiguration configurationFromIdentifier(const QString &identifier) const;
+    void updateConfigurations();
+    bool isOnline() const;
+
+signals:
+    void configurationAdded(const QNetworkConfiguration &config);
+    void configurationRemoved(const QNetworkConfiguration &config);
+    void configurationChanged(const QNetworkConfiguration &config);
+    void onlineStateChanged(bool isOnline);
+    void updateCompleted();
+
+private:
+    QNetworkConfigurationManager(const QNetworkConfigurationManager &);
+};
+
+QFlags<QNetworkConfigurationManager::Capability> operator|(QNetworkConfigurationManager::Capability f1, QFlags<QNetworkConfigurationManager::Capability> f2);
+QFlags<QNetworkConfigurationManager::Capability> operator|(QNetworkConfigurationManager::Capability f1, QNetworkConfigurationManager::Capability f2);
diff --git a/sip/QtNetwork/qnetworkconfiguration.sip b/sip/QtNetwork/qnetworkconfiguration.sip
new file mode 100644
index 0000000..8803493
--- /dev/null
+++ b/sip/QtNetwork/qnetworkconfiguration.sip
@@ -0,0 +1,101 @@
+// qnetworkconfiguration.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QNetworkConfiguration
+{
+%TypeHeaderCode
+#include <qnetworkconfiguration.h>
+%End
+
+public:
+    QNetworkConfiguration();
+    QNetworkConfiguration(const QNetworkConfiguration &other);
+    ~QNetworkConfiguration();
+    bool operator==(const QNetworkConfiguration &cp) const;
+    bool operator!=(const QNetworkConfiguration &cp) const;
+
+    enum Type
+    {
+        InternetAccessPoint,
+        ServiceNetwork,
+        UserChoice,
+        Invalid,
+    };
+
+    enum Purpose
+    {
+        UnknownPurpose,
+        PublicPurpose,
+        PrivatePurpose,
+        ServiceSpecificPurpose,
+    };
+
+    enum StateFlag
+    {
+        Undefined,
+        Defined,
+        Discovered,
+        Active,
+    };
+
+    typedef QFlags<QNetworkConfiguration::StateFlag> StateFlags;
+
+    enum BearerType
+    {
+        BearerUnknown,
+        BearerEthernet,
+        BearerWLAN,
+        Bearer2G,
+        BearerCDMA2000,
+        BearerWCDMA,
+        BearerHSPA,
+        BearerBluetooth,
+        BearerWiMAX,
+%If (Qt_5_2_0 -)
+        BearerEVDO,
+%End
+%If (Qt_5_2_0 -)
+        BearerLTE,
+%End
+%If (Qt_5_2_0 -)
+        Bearer3G,
+%End
+%If (Qt_5_2_0 -)
+        Bearer4G,
+%End
+    };
+
+    QFlags<QNetworkConfiguration::StateFlag> state() const;
+    QNetworkConfiguration::Type type() const;
+    QNetworkConfiguration::Purpose purpose() const;
+    QNetworkConfiguration::BearerType bearerType() const;
+    QString bearerTypeName() const;
+%If (Qt_5_2_0 -)
+    QNetworkConfiguration::BearerType bearerTypeFamily() const;
+%End
+    QString identifier() const;
+    bool isRoamingAvailable() const;
+    QList<QNetworkConfiguration> children() const;
+    QString name() const;
+    bool isValid() const;
+    void swap(QNetworkConfiguration &other);
+};
diff --git a/sip/QtNetwork/qnetworkcookie.sip b/sip/QtNetwork/qnetworkcookie.sip
new file mode 100644
index 0000000..97bc52c
--- /dev/null
+++ b/sip/QtNetwork/qnetworkcookie.sip
@@ -0,0 +1,61 @@
+// qnetworkcookie.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QNetworkCookie
+{
+%TypeHeaderCode
+#include <qnetworkcookie.h>
+%End
+
+public:
+    enum RawForm
+    {
+        NameAndValueOnly,
+        Full,
+    };
+
+    QNetworkCookie(const QByteArray &name = QByteArray(), const QByteArray &value = QByteArray());
+    QNetworkCookie(const QNetworkCookie &other);
+    ~QNetworkCookie();
+    bool isSecure() const;
+    void setSecure(bool enable);
+    bool isSessionCookie() const;
+    QDateTime expirationDate() const;
+    void setExpirationDate(const QDateTime &date);
+    QString domain() const;
+    void setDomain(const QString &domain);
+    QString path() const;
+    void setPath(const QString &path);
+    QByteArray name() const;
+    void setName(const QByteArray &cookieName);
+    QByteArray value() const;
+    void setValue(const QByteArray &value);
+    QByteArray toRawForm(QNetworkCookie::RawForm form = QNetworkCookie::Full) const;
+    static QList<QNetworkCookie> parseCookies(const QByteArray &cookieString);
+    bool operator==(const QNetworkCookie &other) const;
+    bool operator!=(const QNetworkCookie &other) const;
+    bool isHttpOnly() const;
+    void setHttpOnly(bool enable);
+    void swap(QNetworkCookie &other);
+    bool hasSameIdentifier(const QNetworkCookie &other) const;
+    void normalize(const QUrl &url);
+};
diff --git a/sip/QtNetwork/qnetworkcookiejar.sip b/sip/QtNetwork/qnetworkcookiejar.sip
new file mode 100644
index 0000000..3b4948a
--- /dev/null
+++ b/sip/QtNetwork/qnetworkcookiejar.sip
@@ -0,0 +1,45 @@
+// qnetworkcookiejar.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QNetworkCookieJar : QObject
+{
+%TypeHeaderCode
+#include <qnetworkcookiejar.h>
+%End
+
+public:
+    explicit QNetworkCookieJar(QObject *parent /TransferThis/ = 0);
+    virtual ~QNetworkCookieJar();
+    virtual QList<QNetworkCookie> cookiesForUrl(const QUrl &url) const;
+    virtual bool setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url);
+    virtual bool insertCookie(const QNetworkCookie &cookie);
+    virtual bool updateCookie(const QNetworkCookie &cookie);
+    virtual bool deleteCookie(const QNetworkCookie &cookie);
+
+protected:
+    void setAllCookies(const QList<QNetworkCookie> &cookieList);
+    QList<QNetworkCookie> allCookies() const;
+    virtual bool validateCookie(const QNetworkCookie &cookie, const QUrl &url) const;
+
+private:
+    QNetworkCookieJar(const QNetworkCookieJar &);
+};
diff --git a/sip/QtNetwork/qnetworkdiskcache.sip b/sip/QtNetwork/qnetworkdiskcache.sip
new file mode 100644
index 0000000..cd5cab8
--- /dev/null
+++ b/sip/QtNetwork/qnetworkdiskcache.sip
@@ -0,0 +1,53 @@
+// qnetworkdiskcache.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QNetworkDiskCache : QAbstractNetworkCache
+{
+%TypeHeaderCode
+#include <qnetworkdiskcache.h>
+%End
+
+public:
+    explicit QNetworkDiskCache(QObject *parent /TransferThis/ = 0);
+    virtual ~QNetworkDiskCache();
+    QString cacheDirectory() const;
+    void setCacheDirectory(const QString &cacheDir);
+    qint64 maximumCacheSize() const;
+    void setMaximumCacheSize(qint64 size);
+    virtual qint64 cacheSize() const;
+    virtual QNetworkCacheMetaData metaData(const QUrl &url);
+    virtual void updateMetaData(const QNetworkCacheMetaData &metaData);
+    virtual QIODevice *data(const QUrl &url) /Factory/;
+    virtual bool remove(const QUrl &url);
+    virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData);
+    virtual void insert(QIODevice *device);
+    QNetworkCacheMetaData fileMetaData(const QString &fileName) const;
+
+public slots:
+    virtual void clear();
+
+protected:
+    virtual qint64 expire();
+
+private:
+    QNetworkDiskCache(const QNetworkDiskCache &);
+};
diff --git a/sip/QtNetwork/qnetworkinterface.sip b/sip/QtNetwork/qnetworkinterface.sip
new file mode 100644
index 0000000..078b4e1
--- /dev/null
+++ b/sip/QtNetwork/qnetworkinterface.sip
@@ -0,0 +1,85 @@
+// qnetworkinterface.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qnetworkinterface.h>
+%End
+
+class QNetworkAddressEntry
+{
+%TypeHeaderCode
+#include <qnetworkinterface.h>
+%End
+
+public:
+    QNetworkAddressEntry();
+    QNetworkAddressEntry(const QNetworkAddressEntry &other);
+    ~QNetworkAddressEntry();
+    QHostAddress ip() const;
+    void setIp(const QHostAddress &newIp);
+    QHostAddress netmask() const;
+    void setNetmask(const QHostAddress &newNetmask);
+    QHostAddress broadcast() const;
+    void setBroadcast(const QHostAddress &newBroadcast);
+    bool operator==(const QNetworkAddressEntry &other) const;
+    bool operator!=(const QNetworkAddressEntry &other) const;
+    int prefixLength() const;
+    void setPrefixLength(int length);
+    void swap(QNetworkAddressEntry &other);
+};
+
+class QNetworkInterface
+{
+%TypeHeaderCode
+#include <qnetworkinterface.h>
+%End
+
+public:
+    enum InterfaceFlag
+    {
+        IsUp,
+        IsRunning,
+        CanBroadcast,
+        IsLoopBack,
+        IsPointToPoint,
+        CanMulticast,
+    };
+
+    typedef QFlags<QNetworkInterface::InterfaceFlag> InterfaceFlags;
+    QNetworkInterface();
+    QNetworkInterface(const QNetworkInterface &other);
+    ~QNetworkInterface();
+    bool isValid() const;
+    QString name() const;
+    QFlags<QNetworkInterface::InterfaceFlag> flags() const;
+    QString hardwareAddress() const;
+    QList<QNetworkAddressEntry> addressEntries() const;
+    static QNetworkInterface interfaceFromName(const QString &name);
+    static QNetworkInterface interfaceFromIndex(int index);
+    static QList<QNetworkInterface> allInterfaces();
+    static QList<QHostAddress> allAddresses();
+    int index() const;
+    QString humanReadableName() const;
+    void swap(QNetworkInterface &other);
+};
+
+QFlags<QNetworkInterface::InterfaceFlag> operator|(QNetworkInterface::InterfaceFlag f1, QFlags<QNetworkInterface::InterfaceFlag> f2);
diff --git a/sip/QtNetwork/qnetworkproxy.sip b/sip/QtNetwork/qnetworkproxy.sip
new file mode 100644
index 0000000..f477649
--- /dev/null
+++ b/sip/QtNetwork/qnetworkproxy.sip
@@ -0,0 +1,139 @@
+// qnetworkproxy.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QNetworkProxy
+{
+%TypeHeaderCode
+#include <qnetworkproxy.h>
+%End
+
+public:
+    enum ProxyType
+    {
+        DefaultProxy,
+        Socks5Proxy,
+        NoProxy,
+        HttpProxy,
+        HttpCachingProxy,
+        FtpCachingProxy,
+    };
+
+    QNetworkProxy();
+    QNetworkProxy(QNetworkProxy::ProxyType type, const QString &hostName /DocValue="''"/ = QString(), quint16 port = 0, const QString &user /DocValue="''"/ = QString(), const QString &password /DocValue="''"/ = QString());
+    QNetworkProxy(const QNetworkProxy &other);
+    ~QNetworkProxy();
+    void setType(QNetworkProxy::ProxyType type);
+    QNetworkProxy::ProxyType type() const;
+    void setUser(const QString &userName);
+    QString user() const;
+    void setPassword(const QString &password);
+    QString password() const;
+    void setHostName(const QString &hostName);
+    QString hostName() const;
+    void setPort(quint16 port);
+    quint16 port() const;
+    static void setApplicationProxy(const QNetworkProxy &proxy);
+    static QNetworkProxy applicationProxy();
+    bool isCachingProxy() const;
+    bool isTransparentProxy() const;
+    bool operator==(const QNetworkProxy &other) const;
+    bool operator!=(const QNetworkProxy &other) const;
+
+    enum Capability
+    {
+        TunnelingCapability,
+        ListeningCapability,
+        UdpTunnelingCapability,
+        CachingCapability,
+        HostNameLookupCapability,
+    };
+
+    typedef QFlags<QNetworkProxy::Capability> Capabilities;
+    void setCapabilities(QFlags<QNetworkProxy::Capability> capab);
+    QFlags<QNetworkProxy::Capability> capabilities() const;
+    void swap(QNetworkProxy &other);
+    QVariant header(QNetworkRequest::KnownHeaders header) const;
+    void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value);
+    bool hasRawHeader(const QByteArray &headerName) const;
+    QList<QByteArray> rawHeaderList() const;
+    QByteArray rawHeader(const QByteArray &headerName) const;
+    void setRawHeader(const QByteArray &headerName, const QByteArray &value);
+};
+
+class QNetworkProxyQuery
+{
+%TypeHeaderCode
+#include <qnetworkproxy.h>
+%End
+
+public:
+    enum QueryType
+    {
+        TcpSocket,
+        UdpSocket,
+        TcpServer,
+        UrlRequest,
+    };
+
+    QNetworkProxyQuery();
+    QNetworkProxyQuery(const QUrl &requestUrl, QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::UrlRequest);
+    QNetworkProxyQuery(const QString &hostname, int port, const QString &protocolTag /DocValue="''"/ = QString(), QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::TcpSocket);
+    QNetworkProxyQuery(quint16 bindPort, const QString &protocolTag /DocValue="''"/ = QString(), QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::TcpServer);
+    QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, const QUrl &requestUrl, QNetworkProxyQuery::QueryType queryType = QNetworkProxyQuery::UrlRequest);
+    QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, const QString &hostname, int port, const QString &protocolTag /DocValue="''"/ = QString(), QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::TcpSocket);
+    QNetworkProxyQuery(const QNetworkConfiguration &networkConfiguration, quint16 bindPort, const QString &protocolTag /DocValue="''"/ = QString(), QNetworkProxyQuery::QueryType type = QNetworkProxyQuery::TcpServer);
+    QNetworkProxyQuery(const QNetworkProxyQuery &other);
+    ~QNetworkProxyQuery();
+    bool operator==(const QNetworkProxyQuery &other) const;
+    bool operator!=(const QNetworkProxyQuery &other) const;
+    QNetworkProxyQuery::QueryType queryType() const;
+    void setQueryType(QNetworkProxyQuery::QueryType type);
+    int peerPort() const;
+    void setPeerPort(int port);
+    QString peerHostName() const;
+    void setPeerHostName(const QString &hostname);
+    int localPort() const;
+    void setLocalPort(int port);
+    QString protocolTag() const;
+    void setProtocolTag(const QString &protocolTag);
+    QUrl url() const;
+    void setUrl(const QUrl &url);
+    QNetworkConfiguration networkConfiguration() const;
+    void setNetworkConfiguration(const QNetworkConfiguration &networkConfiguration);
+    void swap(QNetworkProxyQuery &other);
+};
+
+class QNetworkProxyFactory /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qnetworkproxy.h>
+%End
+
+public:
+    QNetworkProxyFactory();
+    virtual ~QNetworkProxyFactory();
+    virtual QList<QNetworkProxy> queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery()) = 0;
+    static void setApplicationProxyFactory(QNetworkProxyFactory *factory /Transfer/);
+    static QList<QNetworkProxy> proxyForQuery(const QNetworkProxyQuery &query);
+    static QList<QNetworkProxy> systemProxyForQuery(const QNetworkProxyQuery &query = QNetworkProxyQuery());
+    static void setUseSystemConfiguration(bool enable);
+};
diff --git a/sip/QtNetwork/qnetworkreply.sip b/sip/QtNetwork/qnetworkreply.sip
new file mode 100644
index 0000000..390418c
--- /dev/null
+++ b/sip/QtNetwork/qnetworkreply.sip
@@ -0,0 +1,147 @@
+// qnetworkreply.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QNetworkReply : QIODevice
+{
+%TypeHeaderCode
+#include <qnetworkreply.h>
+%End
+
+public:
+    enum NetworkError
+    {
+        NoError,
+        ConnectionRefusedError,
+        RemoteHostClosedError,
+        HostNotFoundError,
+        TimeoutError,
+        OperationCanceledError,
+        SslHandshakeFailedError,
+        UnknownNetworkError,
+        ProxyConnectionRefusedError,
+        ProxyConnectionClosedError,
+        ProxyNotFoundError,
+        ProxyTimeoutError,
+        ProxyAuthenticationRequiredError,
+        UnknownProxyError,
+        ContentAccessDenied,
+        ContentOperationNotPermittedError,
+        ContentNotFoundError,
+        AuthenticationRequiredError,
+        UnknownContentError,
+        ProtocolUnknownError,
+        ProtocolInvalidOperationError,
+        ProtocolFailure,
+        ContentReSendError,
+        TemporaryNetworkFailureError,
+        NetworkSessionFailedError,
+        BackgroundRequestNotAllowedError,
+%If (Qt_5_3_0 -)
+        ContentConflictError,
+%End
+%If (Qt_5_3_0 -)
+        ContentGoneError,
+%End
+%If (Qt_5_3_0 -)
+        InternalServerError,
+%End
+%If (Qt_5_3_0 -)
+        OperationNotImplementedError,
+%End
+%If (Qt_5_3_0 -)
+        ServiceUnavailableError,
+%End
+%If (Qt_5_3_0 -)
+        UnknownServerError,
+%End
+    };
+
+    virtual ~QNetworkReply();
+    virtual void abort() = 0;
+    virtual void close();
+    virtual bool isSequential() const;
+    qint64 readBufferSize() const;
+    virtual void setReadBufferSize(qint64 size);
+    QNetworkAccessManager *manager() const;
+    QNetworkAccessManager::Operation operation() const;
+    QNetworkRequest request() const;
+    QNetworkReply::NetworkError error() const;
+    QUrl url() const;
+    QVariant header(QNetworkRequest::KnownHeaders header) const;
+    bool hasRawHeader(const QByteArray &headerName) const;
+    QList<QByteArray> rawHeaderList() const;
+    QByteArray rawHeader(const QByteArray &headerName) const;
+    QVariant attribute(QNetworkRequest::Attribute code) const;
+%If (PyQt_SSL)
+    QSslConfiguration sslConfiguration() const;
+%End
+%If (PyQt_SSL)
+    void setSslConfiguration(const QSslConfiguration &configuration);
+%End
+
+public slots:
+    virtual void ignoreSslErrors();
+
+signals:
+    void metaDataChanged();
+    void finished();
+%If (Qt_5_1_0 -)
+    void encrypted();
+%End
+    void error(QNetworkReply::NetworkError);
+%If (PyQt_SSL)
+    void sslErrors(const QList<QSslError> &errors);
+%End
+    void uploadProgress(qint64 bytesSent, qint64 bytesTotal);
+    void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
+
+protected:
+    explicit QNetworkReply(QObject *parent /TransferThis/ = 0);
+    virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/;
+    void setOperation(QNetworkAccessManager::Operation operation);
+    void setRequest(const QNetworkRequest &request);
+    void setError(QNetworkReply::NetworkError errorCode, const QString &errorString);
+    void setUrl(const QUrl &url);
+    void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value);
+    void setRawHeader(const QByteArray &headerName, const QByteArray &value);
+    void setAttribute(QNetworkRequest::Attribute code, const QVariant &value);
+    void setFinished(bool finished);
+
+public:
+    bool isFinished() const;
+    bool isRunning() const;
+%If (PyQt_SSL)
+    void ignoreSslErrors(const QList<QSslError> &errors);
+%End
+    const QList<QPair<QByteArray, QByteArray>> &rawHeaderPairs() const;
+
+protected:
+%If (PyQt_SSL)
+    virtual void sslConfigurationImplementation(QSslConfiguration &) const;
+%End
+%If (PyQt_SSL)
+    virtual void setSslConfigurationImplementation(const QSslConfiguration &);
+%End
+%If (PyQt_SSL)
+    virtual void ignoreSslErrorsImplementation(const QList<QSslError> &);
+%End
+};
diff --git a/sip/QtNetwork/qnetworkrequest.sip b/sip/QtNetwork/qnetworkrequest.sip
new file mode 100644
index 0000000..4b7a6b2
--- /dev/null
+++ b/sip/QtNetwork/qnetworkrequest.sip
@@ -0,0 +1,117 @@
+// qnetworkrequest.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QNetworkRequest
+{
+%TypeHeaderCode
+#include <qnetworkrequest.h>
+%End
+
+public:
+    enum KnownHeaders
+    {
+        ContentTypeHeader,
+        ContentLengthHeader,
+        LocationHeader,
+        LastModifiedHeader,
+        CookieHeader,
+        SetCookieHeader,
+        ContentDispositionHeader,
+        UserAgentHeader,
+        ServerHeader,
+    };
+
+    enum Attribute
+    {
+        HttpStatusCodeAttribute,
+        HttpReasonPhraseAttribute,
+        RedirectionTargetAttribute,
+        ConnectionEncryptedAttribute,
+        CacheLoadControlAttribute,
+        CacheSaveControlAttribute,
+        SourceIsFromCacheAttribute,
+        DoNotBufferUploadDataAttribute,
+        HttpPipeliningAllowedAttribute,
+        HttpPipeliningWasUsedAttribute,
+        CustomVerbAttribute,
+        CookieLoadControlAttribute,
+        AuthenticationReuseAttribute,
+        CookieSaveControlAttribute,
+        BackgroundRequestAttribute,
+%If (Qt_5_3_0 -)
+        SpdyAllowedAttribute,
+%End
+%If (Qt_5_3_0 -)
+        SpdyWasUsedAttribute,
+%End
+        User,
+        UserMax,
+    };
+
+    enum CacheLoadControl
+    {
+        AlwaysNetwork,
+        PreferNetwork,
+        PreferCache,
+        AlwaysCache,
+    };
+
+    enum LoadControl
+    {
+        Automatic,
+        Manual,
+    };
+
+    enum Priority
+    {
+        HighPriority,
+        NormalPriority,
+        LowPriority,
+    };
+
+    explicit QNetworkRequest(const QUrl &url = QUrl());
+    QNetworkRequest(const QNetworkRequest &other);
+    ~QNetworkRequest();
+    QUrl url() const;
+    void setUrl(const QUrl &url);
+    QVariant header(QNetworkRequest::KnownHeaders header) const;
+    void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value);
+    bool hasRawHeader(const QByteArray &headerName) const;
+    QList<QByteArray> rawHeaderList() const;
+    QByteArray rawHeader(const QByteArray &headerName) const;
+    void setRawHeader(const QByteArray &headerName, const QByteArray &value);
+    QVariant attribute(QNetworkRequest::Attribute code, const QVariant &defaultValue /DocValue="None"/ = QVariant()) const;
+    void setAttribute(QNetworkRequest::Attribute code, const QVariant &value);
+%If (PyQt_SSL)
+    QSslConfiguration sslConfiguration() const;
+%End
+%If (PyQt_SSL)
+    void setSslConfiguration(const QSslConfiguration &configuration);
+%End
+    bool operator==(const QNetworkRequest &other) const;
+    bool operator!=(const QNetworkRequest &other) const;
+    void setOriginatingObject(QObject *object /KeepReference/);
+    QObject *originatingObject() const;
+    QNetworkRequest::Priority priority() const;
+    void setPriority(QNetworkRequest::Priority priority);
+    void swap(QNetworkRequest &other);
+};
diff --git a/sip/QtNetwork/qnetworksession.sip b/sip/QtNetwork/qnetworksession.sip
new file mode 100644
index 0000000..6a26e4f
--- /dev/null
+++ b/sip/QtNetwork/qnetworksession.sip
@@ -0,0 +1,101 @@
+// qnetworksession.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QNetworkSession : QObject
+{
+%TypeHeaderCode
+#include <qnetworksession.h>
+%End
+
+public:
+    enum State
+    {
+        Invalid,
+        NotAvailable,
+        Connecting,
+        Connected,
+        Closing,
+        Disconnected,
+        Roaming,
+    };
+
+    enum SessionError
+    {
+        UnknownSessionError,
+        SessionAbortedError,
+        RoamingError,
+        OperationNotSupportedError,
+        InvalidConfigurationError,
+    };
+
+    QNetworkSession(const QNetworkConfiguration &connConfig, QObject *parent /TransferThis/ = 0);
+    virtual ~QNetworkSession();
+    bool isOpen() const;
+    QNetworkConfiguration configuration() const;
+    QNetworkInterface interface() const;
+    QNetworkSession::State state() const;
+    QNetworkSession::SessionError error() const;
+    QString errorString() const;
+    QVariant sessionProperty(const QString &key) const;
+    void setSessionProperty(const QString &key, const QVariant &value);
+    quint64 bytesWritten() const;
+    quint64 bytesReceived() const;
+    quint64 activeTime() const;
+    bool waitForOpened(int msecs = 30000) /ReleaseGIL/;
+
+public slots:
+    void open();
+    void close();
+    void stop();
+    void migrate();
+    void ignore();
+    void accept();
+    void reject();
+
+signals:
+    void stateChanged(QNetworkSession::State);
+    void opened();
+    void closed();
+    void error(QNetworkSession::SessionError);
+    void preferredConfigurationChanged(const QNetworkConfiguration &config, bool isSeamless);
+    void newConfigurationActivated();
+
+protected:
+    virtual void connectNotify(const QMetaMethod &signal);
+    virtual void disconnectNotify(const QMetaMethod &signal);
+
+public:
+    enum UsagePolicy
+    {
+        NoPolicy,
+        NoBackgroundTrafficPolicy,
+    };
+
+    typedef QFlags<QNetworkSession::UsagePolicy> UsagePolicies;
+    QFlags<QNetworkSession::UsagePolicy> usagePolicies() const;
+
+signals:
+    void usagePoliciesChanged(QFlags<QNetworkSession::UsagePolicy>);
+
+private:
+    QNetworkSession(const QNetworkSession &);
+};
diff --git a/sip/QtNetwork/qpynetwork_qhash.sip b/sip/QtNetwork/qpynetwork_qhash.sip
new file mode 100644
index 0000000..ce95fc7
--- /dev/null
+++ b/sip/QtNetwork/qpynetwork_qhash.sip
@@ -0,0 +1,129 @@
+// This is the SIP interface definition for the QHash based mapped types
+// specific to the QtNetwork module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%MappedType QHash<QNetworkRequest::Attribute, QVariant>
+        /DocType="dict-of-QNetworkRequest.Attribute-object"/
+{
+%TypeHeaderCode
+#include <qhash.h>
+#include <qnetworkrequest.h>
+#include <qvariant.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *d = PyDict_New();
+
+    if (!d)
+        return 0;
+
+    QHash<QNetworkRequest::Attribute, QVariant>::const_iterator it = sipCpp->constBegin();
+    QHash<QNetworkRequest::Attribute, QVariant>::const_iterator end = sipCpp->constEnd();
+
+    while (it != end)
+    {
+        PyObject *kobj = sipConvertFromEnum(it.key(),
+                sipType_QNetworkRequest_Attribute);
+
+        if (!kobj)
+        {
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        QVariant *v = new QVariant(it.value());
+        PyObject *vobj = sipConvertFromNewType(v, sipType_QVariant,
+                sipTransferObj);
+
+        if (!vobj)
+        {
+            delete v;
+            Py_DECREF(kobj);
+            Py_DECREF(d);
+
+            return 0;
+        }
+
+        int rc = PyDict_SetItem(d, kobj, vobj);
+
+        Py_DECREF(vobj);
+        Py_DECREF(kobj);
+
+        if (rc < 0)
+        {
+            Py_DECREF(d);
+
+            return 0;
+        }
+    }
+
+    return d;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return PyDict_Check(sipPy);
+
+    QHash<QNetworkRequest::Attribute, QVariant> *qh = new QHash<QNetworkRequest::Attribute, QVariant>;
+
+    SIP_SSIZE_T pos = 0;
+    PyObject *kobj, *vobj;
+ 
+    while (PyDict_Next(sipPy, &pos, &kobj, &vobj))
+    {
+        if (!sipCanConvertToEnum(kobj, sipType_QNetworkRequest_Attribute))
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "a key has type '%s' but 'QNetworkRequest.Attribute' is expected",
+                    Py_TYPE(kobj)->tp_name);
+
+            delete qh;
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        int vstate;
+        QVariant *v = reinterpret_cast<QVariant *>(
+                sipForceConvertToType(vobj, sipType_QVariant, sipTransferObj,
+                        SIP_NOT_NONE, &vstate, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            // Any error must be internal, so leave the exception as it is.
+
+            delete qh;
+
+            return 0;
+        }
+
+        qh->insert(
+                static_cast<QNetworkRequest::Attribute>(SIPLong_AsLong(kobj)),
+                *v);
+
+        sipReleaseType(v, sipType_QVariant, vstate);
+    }
+ 
+    *sipCppPtr = qh;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtNetwork/qpynetwork_qmap.sip b/sip/QtNetwork/qpynetwork_qmap.sip
new file mode 100644
index 0000000..1023a4e
--- /dev/null
+++ b/sip/QtNetwork/qpynetwork_qmap.sip
@@ -0,0 +1,159 @@
+// This is the SIP interface definition for the QMap and QMultiMap based mapped
+// types specific to the QtNetwork module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_SSL)
+
+%MappedType QMultiMap<QSsl::AlternativeNameEntryType, QString>
+        /DocType="dict-of-QSsl.AlternativeNameEntryType-list-of-str"/
+{
+%TypeHeaderCode
+#include <qmap.h>
+#include <qssl.h>
+%End
+
+%ConvertFromTypeCode
+    // Get the enum objects that are the dictionary keys.
+    static PyObject *email_entry = 0;
+    static PyObject *dns_entry = 0;
+
+    if (!email_entry)
+    {
+        email_entry = PyObject_GetAttrString(
+                (PyObject *)sipTypeAsPyTypeObject(sipType_QSsl), "EmailEntry");
+
+        if (!email_entry)
+            return 0;
+    }
+
+    if (!dns_entry)
+    {
+        dns_entry = PyObject_GetAttrString(
+                (PyObject *)sipTypeAsPyTypeObject(sipType_QSsl), "DnsEntry");
+
+        if (!dns_entry)
+            return 0;
+    }
+
+    // Create the dictionary.
+    PyObject *d = PyDict_New();
+
+    if (!d)
+        return 0;
+
+    QList<QString> vl;
+
+    // Handle the Qssl::EmailEntry key.
+    vl = sipCpp->values(QSsl::EmailEntry);
+
+    if (!vl.isEmpty())
+    {
+        PyObject *vlobj = PyList_New(vl.count());
+
+        if (!vlobj)
+        {
+            Py_DECREF(d);
+            return 0;
+        }
+
+        int rc = PyDict_SetItem(d, email_entry, vlobj);
+
+        Py_DECREF(email_entry);
+        Py_DECREF(vlobj);
+
+        if (rc < 0)
+        {
+            Py_DECREF(d);
+            return 0;
+        }
+
+        for (int i = 0; i < vl.count(); ++i)
+        {
+            QString *s = new QString(vl.at(i));
+            PyObject *vobj = sipConvertFromNewType(s, sipType_QString,
+                    sipTransferObj);
+
+            if (!vobj)
+            {
+                delete s;
+                Py_DECREF(d);
+                return 0;
+            }
+
+            PyList_SET_ITEM(vlobj, i, vobj);
+        }
+    }
+
+    // Handle the Qssl::DnsEntry key.
+    vl = sipCpp->values(QSsl::DnsEntry);
+
+    if (!vl.isEmpty())
+    {
+        PyObject *vlobj = PyList_New(vl.count());
+
+        if (!vlobj)
+        {
+            Py_DECREF(d);
+            return 0;
+        }
+
+        int rc = PyDict_SetItem(d, dns_entry, vlobj);
+
+        Py_DECREF(dns_entry);
+        Py_DECREF(vlobj);
+
+        if (rc < 0)
+        {
+            Py_DECREF(d);
+            return 0;
+        }
+
+        for (int i = 0; i < vl.count(); ++i)
+        {
+            QString *s = new QString(vl.at(i));
+            PyObject *vobj = sipConvertFromNewType(s, sipType_QString,
+                    sipTransferObj);
+
+            if (!vobj)
+            {
+                delete s;
+                Py_DECREF(d);
+                return 0;
+            }
+
+            PyList_SET_ITEM(vlobj, i, vobj);
+        }
+    }
+
+    return d;
+%End
+
+%ConvertToTypeCode
+    if (!sipIsErr)
+        return PyDict_Check(sipPy);
+
+    PyErr_SetString(PyExc_NotImplementedError,
+            "converting to QMultiMap<QSsl::AlternativeNameEntryType, QString> is unsupported");
+
+    return 0;
+%End
+};
+
+%End
diff --git a/sip/QtNetwork/qssl.sip b/sip/QtNetwork/qssl.sip
new file mode 100644
index 0000000..baac74c
--- /dev/null
+++ b/sip/QtNetwork/qssl.sip
@@ -0,0 +1,94 @@
+// qssl.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qssl.h>
+%End
+
+%If (PyQt_SSL)
+
+namespace QSsl
+{
+%TypeHeaderCode
+#include <qssl.h>
+%End
+
+    enum KeyType
+    {
+        PrivateKey,
+        PublicKey,
+    };
+
+    enum EncodingFormat
+    {
+        Pem,
+        Der,
+    };
+
+    enum KeyAlgorithm
+    {
+        Opaque,
+        Rsa,
+        Dsa,
+    };
+
+    enum AlternativeNameEntryType
+    {
+        EmailEntry,
+        DnsEntry,
+    };
+
+    enum SslProtocol
+    {
+        UnknownProtocol,
+        SslV3,
+        SslV2,
+        TlsV1_0,
+        TlsV1_1,
+        TlsV1_2,
+        AnyProtocol,
+        TlsV1SslV3,
+        SecureProtocols,
+    };
+
+    enum SslOption
+    {
+        SslOptionDisableEmptyFragments,
+        SslOptionDisableSessionTickets,
+        SslOptionDisableCompression,
+        SslOptionDisableServerNameIndication,
+        SslOptionDisableLegacyRenegotiation,
+%If (Qt_5_2_0 -)
+        SslOptionDisableSessionSharing,
+%End
+%If (Qt_5_2_0 -)
+        SslOptionDisableSessionPersistence,
+%End
+    };
+
+    typedef QFlags<QSsl::SslOption> SslOptions;
+};
+
+%End
+%If (PyQt_SSL)
+QFlags<QSsl::SslOption> operator|(QSsl::SslOption f1, QFlags<QSsl::SslOption> f2);
+%End
diff --git a/sip/QtNetwork/qsslcertificate.sip b/sip/QtNetwork/qsslcertificate.sip
new file mode 100644
index 0000000..5fa7e5c
--- /dev/null
+++ b/sip/QtNetwork/qsslcertificate.sip
@@ -0,0 +1,79 @@
+// qsslcertificate.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_SSL)
+
+class QSslCertificate
+{
+%TypeHeaderCode
+#include <qsslcertificate.h>
+%End
+
+public:
+    enum SubjectInfo
+    {
+        Organization,
+        CommonName,
+        LocalityName,
+        OrganizationalUnitName,
+        CountryName,
+        StateOrProvinceName,
+        DistinguishedNameQualifier,
+        SerialNumber,
+        EmailAddress,
+    };
+
+    QSslCertificate(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem);
+    QSslCertificate(const QByteArray &data = QByteArray(), QSsl::EncodingFormat format = QSsl::Pem);
+    QSslCertificate(const QSslCertificate &other);
+    ~QSslCertificate();
+    bool operator==(const QSslCertificate &other) const;
+    bool operator!=(const QSslCertificate &other) const;
+    bool isNull() const;
+    void clear();
+    QByteArray version() const;
+    QByteArray serialNumber() const;
+    QByteArray digest(QCryptographicHash::Algorithm algorithm = QCryptographicHash::Md5) const;
+    QStringList issuerInfo(QSslCertificate::SubjectInfo info) const;
+    QStringList issuerInfo(const QByteArray &attribute) const;
+    QStringList subjectInfo(QSslCertificate::SubjectInfo info) const;
+    QStringList subjectInfo(const QByteArray &attribute) const;
+    QMultiMap<QSsl::AlternativeNameEntryType, QString> subjectAlternativeNames() const;
+    QDateTime effectiveDate() const;
+    QDateTime expiryDate() const;
+    QSslKey publicKey() const;
+    QByteArray toPem() const;
+    QByteArray toDer() const;
+    static QList<QSslCertificate> fromPath(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QRegExp::PatternSyntax syntax = QRegExp::FixedString);
+    static QList<QSslCertificate> fromDevice(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem);
+    static QList<QSslCertificate> fromData(const QByteArray &data, QSsl::EncodingFormat format = QSsl::Pem);
+    Qt::HANDLE handle() const;
+    void swap(QSslCertificate &other);
+    bool isBlacklisted() const;
+    QList<QByteArray> subjectInfoAttributes() const;
+    QList<QByteArray> issuerInfoAttributes() const;
+    QList<QSslCertificateExtension> extensions() const;
+    QString toText() const;
+    static QList<QSslError> verify(QList<QSslCertificate> certificateChain, const QString &hostName = QString());
+};
+
+%End
diff --git a/sip/QtNetwork/qsslcertificateextension.sip b/sip/QtNetwork/qsslcertificateextension.sip
new file mode 100644
index 0000000..544ce70
--- /dev/null
+++ b/sip/QtNetwork/qsslcertificateextension.sip
@@ -0,0 +1,43 @@
+// qsslcertificateextension.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_SSL)
+
+class QSslCertificateExtension
+{
+%TypeHeaderCode
+#include <qsslcertificateextension.h>
+%End
+
+public:
+    QSslCertificateExtension();
+    QSslCertificateExtension(const QSslCertificateExtension &other);
+    ~QSslCertificateExtension();
+    void swap(QSslCertificateExtension &other);
+    QString oid() const;
+    QString name() const;
+    QVariant value() const;
+    bool isCritical() const;
+    bool isSupported() const;
+};
+
+%End
diff --git a/sip/QtNetwork/qsslcipher.sip b/sip/QtNetwork/qsslcipher.sip
new file mode 100644
index 0000000..ecbcf24
--- /dev/null
+++ b/sip/QtNetwork/qsslcipher.sip
@@ -0,0 +1,53 @@
+// qsslcipher.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_SSL)
+
+class QSslCipher
+{
+%TypeHeaderCode
+#include <qsslcipher.h>
+%End
+
+public:
+    QSslCipher();
+%If (Qt_5_3_0 -)
+    explicit QSslCipher(const QString &name);
+%End
+    QSslCipher(const QString &name, QSsl::SslProtocol protocol);
+    QSslCipher(const QSslCipher &other);
+    ~QSslCipher();
+    bool operator==(const QSslCipher &other) const;
+    bool operator!=(const QSslCipher &other) const;
+    bool isNull() const;
+    QString name() const;
+    int supportedBits() const;
+    int usedBits() const;
+    QString keyExchangeMethod() const;
+    QString authenticationMethod() const;
+    QString encryptionMethod() const;
+    QString protocolString() const;
+    QSsl::SslProtocol protocol() const;
+    void swap(QSslCipher &other);
+};
+
+%End
diff --git a/sip/QtNetwork/qsslconfiguration.sip b/sip/QtNetwork/qsslconfiguration.sip
new file mode 100644
index 0000000..9023cc2
--- /dev/null
+++ b/sip/QtNetwork/qsslconfiguration.sip
@@ -0,0 +1,115 @@
+// qsslconfiguration.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_SSL)
+
+class QSslConfiguration
+{
+%TypeHeaderCode
+#include <qsslconfiguration.h>
+%End
+
+public:
+    QSslConfiguration();
+    QSslConfiguration(const QSslConfiguration &other);
+    ~QSslConfiguration();
+    bool isNull() const;
+    QSsl::SslProtocol protocol() const;
+    void setProtocol(QSsl::SslProtocol protocol);
+    QSslSocket::PeerVerifyMode peerVerifyMode() const;
+    void setPeerVerifyMode(QSslSocket::PeerVerifyMode mode);
+    int peerVerifyDepth() const;
+    void setPeerVerifyDepth(int depth);
+    QSslCertificate localCertificate() const;
+    void setLocalCertificate(const QSslCertificate &certificate);
+    QSslCertificate peerCertificate() const;
+    QList<QSslCertificate> peerCertificateChain() const;
+    QSslCipher sessionCipher() const;
+    QSslKey privateKey() const;
+    void setPrivateKey(const QSslKey &key);
+    QList<QSslCipher> ciphers() const;
+    void setCiphers(const QList<QSslCipher> &ciphers);
+    QList<QSslCertificate> caCertificates() const;
+    void setCaCertificates(const QList<QSslCertificate> &certificates);
+    static QSslConfiguration defaultConfiguration();
+    static void setDefaultConfiguration(const QSslConfiguration &configuration);
+    bool operator==(const QSslConfiguration &other) const;
+    bool operator!=(const QSslConfiguration &other) const;
+    void setSslOption(QSsl::SslOption option, bool on);
+    bool testSslOption(QSsl::SslOption option) const;
+    void swap(QSslConfiguration &other);
+%If (Qt_5_1_0 -)
+    QList<QSslCertificate> localCertificateChain() const;
+%End
+%If (Qt_5_1_0 -)
+    void setLocalCertificateChain(const QList<QSslCertificate> &localChain);
+%End
+%If (Qt_5_2_0 -)
+    QByteArray sessionTicket() const;
+%End
+%If (Qt_5_2_0 -)
+    void setSessionTicket(const QByteArray &sessionTicket);
+%End
+%If (Qt_5_2_0 -)
+    int sessionTicketLifeTimeHint() const;
+%End
+%If (Qt_5_3_0 -)
+
+    enum NextProtocolNegotiationStatus
+    {
+        NextProtocolNegotiationNone,
+        NextProtocolNegotiationNegotiated,
+        NextProtocolNegotiationUnsupported,
+    };
+
+%End
+%If (Qt_5_3_0 -)
+    void setAllowedNextProtocols(QList<QByteArray> protocols);
+%End
+%If (Qt_5_3_0 -)
+    QList<QByteArray> allowedNextProtocols() const;
+%End
+%If (Qt_5_3_0 -)
+    QByteArray nextNegotiatedProtocol() const;
+%End
+%If (Qt_5_3_0 -)
+    QSslConfiguration::NextProtocolNegotiationStatus nextProtocolNegotiationStatus() const;
+%End
+%If (Qt_5_3_0 -)
+    static char * const NextProtocolSpdy3_0 /Encoding="None",NoSetter/ {
+%GetCode
+        sipPy = SIPBytes_FromString(QSslConfiguration::NextProtocolSpdy3_0);
+%End
+
+    };
+%End
+%If (Qt_5_3_0 -)
+    static char * const NextProtocolHttp1_1 /Encoding="None",NoSetter/ {
+%GetCode
+        sipPy = SIPBytes_FromString(QSslConfiguration::NextProtocolHttp1_1);
+%End
+
+    };
+%End
+};
+
+%End
diff --git a/sip/QtNetwork/qsslerror.sip b/sip/QtNetwork/qsslerror.sip
new file mode 100644
index 0000000..8646acc
--- /dev/null
+++ b/sip/QtNetwork/qsslerror.sip
@@ -0,0 +1,75 @@
+// qsslerror.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_SSL)
+
+class QSslError
+{
+%TypeHeaderCode
+#include <qsslerror.h>
+%End
+
+public:
+    enum SslError
+    {
+        UnspecifiedError,
+        NoError,
+        UnableToGetIssuerCertificate,
+        UnableToDecryptCertificateSignature,
+        UnableToDecodeIssuerPublicKey,
+        CertificateSignatureFailed,
+        CertificateNotYetValid,
+        CertificateExpired,
+        InvalidNotBeforeField,
+        InvalidNotAfterField,
+        SelfSignedCertificate,
+        SelfSignedCertificateInChain,
+        UnableToGetLocalIssuerCertificate,
+        UnableToVerifyFirstCertificate,
+        CertificateRevoked,
+        InvalidCaCertificate,
+        PathLengthExceeded,
+        InvalidPurpose,
+        CertificateUntrusted,
+        CertificateRejected,
+        SubjectIssuerMismatch,
+        AuthorityIssuerSerialNumberMismatch,
+        NoPeerCertificate,
+        HostNameMismatch,
+        NoSslSupport,
+        CertificateBlacklisted,
+    };
+
+    QSslError();
+    QSslError(QSslError::SslError error);
+    QSslError(QSslError::SslError error, const QSslCertificate &certificate);
+    QSslError(const QSslError &other);
+    ~QSslError();
+    QSslError::SslError error() const;
+    QString errorString() const;
+    QSslCertificate certificate() const;
+    bool operator==(const QSslError &other) const;
+    bool operator!=(const QSslError &other) const;
+    void swap(QSslError &other);
+};
+
+%End
diff --git a/sip/QtNetwork/qsslkey.sip b/sip/QtNetwork/qsslkey.sip
new file mode 100644
index 0000000..2e9ebb7
--- /dev/null
+++ b/sip/QtNetwork/qsslkey.sip
@@ -0,0 +1,51 @@
+// qsslkey.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_SSL)
+
+class QSslKey
+{
+%TypeHeaderCode
+#include <qsslkey.h>
+%End
+
+public:
+    QSslKey();
+    QSslKey(const QByteArray &encoded, QSsl::KeyAlgorithm algorithm, QSsl::EncodingFormat encoding = QSsl::Pem, QSsl::KeyType type = QSsl::PrivateKey, const QByteArray &passPhrase = QByteArray());
+    QSslKey(QIODevice *device, QSsl::KeyAlgorithm algorithm, QSsl::EncodingFormat encoding = QSsl::Pem, QSsl::KeyType type = QSsl::PrivateKey, const QByteArray &passPhrase = QByteArray());
+    QSslKey(Qt::HANDLE handle, QSsl::KeyType type = QSsl::PrivateKey);
+    QSslKey(const QSslKey &other);
+    ~QSslKey();
+    bool isNull() const;
+    void clear();
+    int length() const;
+    QSsl::KeyType type() const;
+    QSsl::KeyAlgorithm algorithm() const;
+    QByteArray toPem(const QByteArray &passPhrase = QByteArray()) const;
+    QByteArray toDer(const QByteArray &passPhrase = QByteArray()) const;
+    Qt::HANDLE handle() const;
+    bool operator==(const QSslKey &key) const;
+    bool operator!=(const QSslKey &key) const;
+    void swap(QSslKey &other);
+};
+
+%End
diff --git a/sip/QtNetwork/qsslsocket.sip b/sip/QtNetwork/qsslsocket.sip
new file mode 100644
index 0000000..3359612
--- /dev/null
+++ b/sip/QtNetwork/qsslsocket.sip
@@ -0,0 +1,185 @@
+// qsslsocket.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_SSL)
+
+class QSslSocket : QTcpSocket
+{
+%TypeHeaderCode
+#include <qsslsocket.h>
+%End
+
+public:
+    enum SslMode
+    {
+        UnencryptedMode,
+        SslClientMode,
+        SslServerMode,
+    };
+
+    explicit QSslSocket(QObject *parent /TransferThis/ = 0);
+    virtual ~QSslSocket();
+    void connectToHostEncrypted(const QString &hostName, quint16 port, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/;
+    void connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/;
+    virtual bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState state = QAbstractSocket::ConnectedState, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite);
+    QSslSocket::SslMode mode() const;
+    bool isEncrypted() const;
+    QSsl::SslProtocol protocol() const;
+    void setProtocol(QSsl::SslProtocol protocol);
+    virtual qint64 bytesAvailable() const;
+    virtual qint64 bytesToWrite() const;
+    virtual bool canReadLine() const;
+    virtual void close();
+    virtual bool atEnd() const;
+    bool flush();
+    void abort();
+    void setLocalCertificate(const QSslCertificate &certificate);
+    void setLocalCertificate(const QString &path, QSsl::EncodingFormat format = QSsl::Pem);
+    QSslCertificate localCertificate() const;
+    QSslCertificate peerCertificate() const;
+    QList<QSslCertificate> peerCertificateChain() const;
+    QSslCipher sessionCipher() const;
+    void setPrivateKey(const QSslKey &key);
+    void setPrivateKey(const QString &fileName, QSsl::KeyAlgorithm algorithm = QSsl::Rsa, QSsl::EncodingFormat format = QSsl::Pem, const QByteArray &passPhrase = QByteArray());
+    QSslKey privateKey() const;
+    QList<QSslCipher> ciphers() const;
+    void setCiphers(const QList<QSslCipher> &ciphers);
+    void setCiphers(const QString &ciphers);
+    static void setDefaultCiphers(const QList<QSslCipher> &ciphers);
+    static QList<QSslCipher> defaultCiphers();
+    static QList<QSslCipher> supportedCiphers();
+    bool addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QRegExp::PatternSyntax syntax = QRegExp::FixedString);
+    void addCaCertificate(const QSslCertificate &certificate);
+    void addCaCertificates(const QList<QSslCertificate> &certificates);
+    void setCaCertificates(const QList<QSslCertificate> &certificates);
+    QList<QSslCertificate> caCertificates() const;
+    static bool addDefaultCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QRegExp::PatternSyntax syntax = QRegExp::FixedString);
+    static void addDefaultCaCertificate(const QSslCertificate &certificate);
+    static void addDefaultCaCertificates(const QList<QSslCertificate> &certificates);
+    static void setDefaultCaCertificates(const QList<QSslCertificate> &certificates);
+    static QList<QSslCertificate> defaultCaCertificates();
+    static QList<QSslCertificate> systemCaCertificates();
+    virtual bool waitForConnected(int msecs = 30000) /ReleaseGIL/;
+    bool waitForEncrypted(int msecs = 30000) /ReleaseGIL/;
+    virtual bool waitForReadyRead(int msecs = 30000) /ReleaseGIL/;
+    virtual bool waitForBytesWritten(int msecs = 30000) /ReleaseGIL/;
+    virtual bool waitForDisconnected(int msecs = 30000) /ReleaseGIL/;
+    QList<QSslError> sslErrors() const;
+    static bool supportsSsl();
+
+public slots:
+    void startClientEncryption();
+    void startServerEncryption();
+    void ignoreSslErrors();
+
+signals:
+    void encrypted();
+    void sslErrors(const QList<QSslError> &errors);
+    void modeChanged(QSslSocket::SslMode newMode);
+
+protected:
+    virtual SIP_PYOBJECT readData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxlen)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QSslSocket::readData(s, a0) : sipCpp->readData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual qint64 writeData(const char *data /Array/, qint64 len /ArraySize/) /ReleaseGIL/;
+
+public:
+    enum PeerVerifyMode
+    {
+        VerifyNone,
+        QueryPeer,
+        VerifyPeer,
+        AutoVerifyPeer,
+    };
+
+    QSslSocket::PeerVerifyMode peerVerifyMode() const;
+    void setPeerVerifyMode(QSslSocket::PeerVerifyMode mode);
+    int peerVerifyDepth() const;
+    void setPeerVerifyDepth(int depth);
+    virtual void setReadBufferSize(qint64 size);
+    qint64 encryptedBytesAvailable() const;
+    qint64 encryptedBytesToWrite() const;
+    QSslConfiguration sslConfiguration() const;
+    void setSslConfiguration(const QSslConfiguration &config);
+
+signals:
+    void peerVerifyError(const QSslError &error);
+    void encryptedBytesWritten(qint64 totalBytes);
+
+public:
+    virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value);
+    virtual QVariant socketOption(QAbstractSocket::SocketOption option);
+    void ignoreSslErrors(const QList<QSslError> &errors);
+    QString peerVerifyName() const;
+    void setPeerVerifyName(const QString &hostName);
+    virtual void resume() /ReleaseGIL/;
+    virtual void connectToHost(const QString &hostName, quint16 port, QFlags<QIODevice::OpenModeFlag> mode = QIODevice::ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::AnyIPProtocol) /ReleaseGIL/;
+    virtual void disconnectFromHost() /ReleaseGIL/;
+    static long sslLibraryVersionNumber();
+    static QString sslLibraryVersionString();
+%If (Qt_5_1_0 -)
+    void setLocalCertificateChain(const QList<QSslCertificate> &localChain);
+%End
+%If (Qt_5_1_0 -)
+    QList<QSslCertificate> localCertificateChain() const;
+%End
+
+private:
+    QSslSocket(const QSslSocket &);
+};
+
+%End
diff --git a/sip/QtNetwork/qtcpserver.sip b/sip/QtNetwork/qtcpserver.sip
new file mode 100644
index 0000000..e267e79
--- /dev/null
+++ b/sip/QtNetwork/qtcpserver.sip
@@ -0,0 +1,61 @@
+// qtcpserver.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTcpServer : QObject
+{
+%TypeHeaderCode
+#include <qtcpserver.h>
+%End
+
+public:
+    explicit QTcpServer(QObject *parent /TransferThis/ = 0);
+    virtual ~QTcpServer();
+    bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
+    void close();
+    bool isListening() const;
+    void setMaxPendingConnections(int numConnections);
+    int maxPendingConnections() const;
+    quint16 serverPort() const;
+    QHostAddress serverAddress() const;
+    qintptr socketDescriptor() const;
+    bool setSocketDescriptor(qintptr socketDescriptor);
+    bool waitForNewConnection(int msecs = 0, bool *timedOut = 0) /ReleaseGIL/;
+    virtual bool hasPendingConnections() const;
+    virtual QTcpSocket *nextPendingConnection();
+    QAbstractSocket::SocketError serverError() const;
+    QString errorString() const;
+    void setProxy(const QNetworkProxy &networkProxy);
+    QNetworkProxy proxy() const;
+    void pauseAccepting();
+    void resumeAccepting();
+
+protected:
+    virtual void incomingConnection(qintptr handle);
+    void addPendingConnection(QTcpSocket *socket);
+
+signals:
+    void newConnection();
+    void acceptError(QAbstractSocket::SocketError socketError);
+
+private:
+    QTcpServer(const QTcpServer &);
+};
diff --git a/sip/QtNetwork/qtcpsocket.sip b/sip/QtNetwork/qtcpsocket.sip
new file mode 100644
index 0000000..0168476
--- /dev/null
+++ b/sip/QtNetwork/qtcpsocket.sip
@@ -0,0 +1,35 @@
+// qtcpsocket.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTcpSocket : QAbstractSocket
+{
+%TypeHeaderCode
+#include <qtcpsocket.h>
+%End
+
+public:
+    explicit QTcpSocket(QObject *parent /TransferThis/ = 0);
+    virtual ~QTcpSocket();
+
+private:
+    QTcpSocket(const QTcpSocket &);
+};
diff --git a/sip/QtNetwork/qudpsocket.sip b/sip/QtNetwork/qudpsocket.sip
new file mode 100644
index 0000000..d5a4aeb
--- /dev/null
+++ b/sip/QtNetwork/qudpsocket.sip
@@ -0,0 +1,79 @@
+// qudpsocket.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtNetwork Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QUdpSocket : QAbstractSocket
+{
+%TypeHeaderCode
+#include <qudpsocket.h>
+%End
+
+public:
+    explicit QUdpSocket(QObject *parent /TransferThis/ = 0);
+    virtual ~QUdpSocket();
+    bool hasPendingDatagrams() const;
+    qint64 pendingDatagramSize() const;
+    SIP_PYOBJECT readDatagram(qint64 maxlen, QHostAddress *host /Out/ = 0, quint16 *port = 0) /DocType="Py_v3:bytes;str",ReleaseGIL/;
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+            len = sipCpp->readDatagram(s, a0, a1, &a2);
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    qint64 writeDatagram(const char *data /Array/, qint64 len /ArraySize/, const QHostAddress &host, quint16 port) /ReleaseGIL/;
+    qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port) /ReleaseGIL/;
+    bool joinMulticastGroup(const QHostAddress &groupAddress);
+    bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface);
+    bool leaveMulticastGroup(const QHostAddress &groupAddress);
+    bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface);
+    QNetworkInterface multicastInterface() const;
+    void setMulticastInterface(const QNetworkInterface &iface);
+
+private:
+    QUdpSocket(const QUdpSocket &);
+};
diff --git a/sip/QtOpenGL/QtOpenGLmod.sip b/sip/QtOpenGL/QtOpenGLmod.sip
new file mode 100644
index 0000000..f41ee11
--- /dev/null
+++ b/sip/QtOpenGL/QtOpenGLmod.sip
@@ -0,0 +1,50 @@
+// QtOpenGLmod.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtOpenGL Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtOpenGL, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtGui/QtGuimod.sip
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qgl.sip
diff --git a/sip/QtOpenGL/qgl.sip b/sip/QtOpenGL/qgl.sip
new file mode 100644
index 0000000..9e21a2f
--- /dev/null
+++ b/sip/QtOpenGL/qgl.sip
@@ -0,0 +1,343 @@
+// qgl.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtOpenGL Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qgl.h>
+%End
+
+%If (PyQt_OpenGL)
+
+namespace QGL
+{
+%TypeHeaderCode
+#include <qgl.h>
+%End
+
+    enum FormatOption
+    {
+        DoubleBuffer,
+        DepthBuffer,
+        Rgba,
+        AlphaChannel,
+        AccumBuffer,
+        StencilBuffer,
+        StereoBuffers,
+        DirectRendering,
+        HasOverlay,
+        SampleBuffers,
+        SingleBuffer,
+        NoDepthBuffer,
+        ColorIndex,
+        NoAlphaChannel,
+        NoAccumBuffer,
+        NoStencilBuffer,
+        NoStereoBuffers,
+        IndirectRendering,
+        NoOverlay,
+        NoSampleBuffers,
+        DeprecatedFunctions,
+        NoDeprecatedFunctions,
+    };
+
+    typedef QFlags<QGL::FormatOption> FormatOptions;
+};
+
+%End
+%If (PyQt_OpenGL)
+QFlags<QGL::FormatOption> operator|(QGL::FormatOption f1, QFlags<QGL::FormatOption> f2);
+%End
+%If (PyQt_OpenGL)
+
+class QGLFormat
+{
+%TypeHeaderCode
+#include <qgl.h>
+%End
+
+public:
+    enum OpenGLVersionFlag
+    {
+        OpenGL_Version_None,
+        OpenGL_Version_1_1,
+        OpenGL_Version_1_2,
+        OpenGL_Version_1_3,
+        OpenGL_Version_1_4,
+        OpenGL_Version_1_5,
+        OpenGL_Version_2_0,
+        OpenGL_Version_2_1,
+        OpenGL_Version_3_0,
+        OpenGL_Version_3_1,
+        OpenGL_Version_3_2,
+        OpenGL_Version_3_3,
+        OpenGL_Version_4_0,
+        OpenGL_Version_4_1,
+        OpenGL_Version_4_2,
+        OpenGL_Version_4_3,
+        OpenGL_ES_Common_Version_1_0,
+        OpenGL_ES_CommonLite_Version_1_0,
+        OpenGL_ES_Common_Version_1_1,
+        OpenGL_ES_CommonLite_Version_1_1,
+        OpenGL_ES_Version_2_0,
+    };
+
+    typedef QFlags<QGLFormat::OpenGLVersionFlag> OpenGLVersionFlags;
+    QGLFormat();
+    QGLFormat(QGL::FormatOptions options, int plane = 0);
+    QGLFormat(const QGLFormat &other);
+    ~QGLFormat();
+    void setDepthBufferSize(int size);
+    int depthBufferSize() const;
+    void setAccumBufferSize(int size);
+    int accumBufferSize() const;
+    void setAlphaBufferSize(int size);
+    int alphaBufferSize() const;
+    void setStencilBufferSize(int size);
+    int stencilBufferSize() const;
+    void setSampleBuffers(bool enable);
+    void setSamples(int numSamples);
+    int samples() const;
+    void setDoubleBuffer(bool enable);
+    void setDepth(bool enable);
+    void setRgba(bool enable);
+    void setAlpha(bool enable);
+    void setAccum(bool enable);
+    void setStencil(bool enable);
+    void setStereo(bool enable);
+    void setDirectRendering(bool enable);
+    void setOverlay(bool enable);
+    int plane() const;
+    void setPlane(int plane);
+    void setOption(QGL::FormatOptions opt);
+    bool testOption(QGL::FormatOptions opt) const;
+    static QGLFormat defaultFormat();
+    static void setDefaultFormat(const QGLFormat &f);
+    static QGLFormat defaultOverlayFormat();
+    static void setDefaultOverlayFormat(const QGLFormat &f);
+    static bool hasOpenGL();
+    static bool hasOpenGLOverlays();
+    bool doubleBuffer() const;
+    bool depth() const;
+    bool rgba() const;
+    bool alpha() const;
+    bool accum() const;
+    bool stencil() const;
+    bool stereo() const;
+    bool directRendering() const;
+    bool hasOverlay() const;
+    bool sampleBuffers() const;
+    void setRedBufferSize(int size);
+    int redBufferSize() const;
+    void setGreenBufferSize(int size);
+    int greenBufferSize() const;
+    void setBlueBufferSize(int size);
+    int blueBufferSize() const;
+    void setSwapInterval(int interval);
+    int swapInterval() const;
+    static QFlags<QGLFormat::OpenGLVersionFlag> openGLVersionFlags();
+    void setVersion(int major, int minor);
+    int majorVersion() const;
+    int minorVersion() const;
+
+    enum OpenGLContextProfile
+    {
+        NoProfile,
+        CoreProfile,
+        CompatibilityProfile,
+    };
+
+    void setProfile(QGLFormat::OpenGLContextProfile profile);
+    QGLFormat::OpenGLContextProfile profile() const;
+};
+
+%End
+%If (PyQt_OpenGL)
+bool operator==(const QGLFormat &, const QGLFormat &);
+%End
+%If (PyQt_OpenGL)
+bool operator!=(const QGLFormat &, const QGLFormat &);
+%End
+%If (PyQt_OpenGL)
+
+class QGLContext /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qgl.h>
+%End
+
+public:
+    QGLContext(const QGLFormat &format);
+    virtual ~QGLContext();
+    virtual bool create(const QGLContext *shareContext = 0);
+    bool isValid() const;
+    bool isSharing() const;
+    void reset();
+    QGLFormat format() const;
+    QGLFormat requestedFormat() const;
+    void setFormat(const QGLFormat &format);
+    virtual void makeCurrent();
+    virtual void doneCurrent();
+    virtual void swapBuffers() const;
+    GLuint bindTexture(const QImage &image, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA);
+    GLuint bindTexture(const QPixmap &pixmap, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA);
+    void drawTexture(const QRectF &target, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D);
+    void drawTexture(const QPointF &point, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D);
+    GLuint bindTexture(const QString &fileName);
+    void deleteTexture(GLuint tx_id);
+    static void setTextureCacheLimit(int size);
+    static int textureCacheLimit();
+    QFunctionPointer getProcAddress(const QString &proc) const;
+    QPaintDevice *device() const;
+    QColor overlayTransparentColor() const;
+    static const QGLContext *currentContext();
+
+protected:
+    virtual bool chooseContext(const QGLContext *shareContext = 0);
+    bool deviceIsPixmap() const;
+    bool windowCreated() const;
+    void setWindowCreated(bool on);
+    bool initialized() const;
+    void setInitialized(bool on);
+
+public:
+    static bool areSharing(const QGLContext *context1, const QGLContext *context2);
+
+    enum BindOption
+    {
+        NoBindOption,
+        InvertedYBindOption,
+        MipmapBindOption,
+        PremultipliedAlphaBindOption,
+        LinearFilteringBindOption,
+        DefaultBindOption,
+    };
+
+    typedef QFlags<QGLContext::BindOption> BindOptions;
+    GLuint bindTexture(const QImage &image, GLenum target, GLint format, QFlags<QGLContext::BindOption> options);
+    GLuint bindTexture(const QPixmap &pixmap, GLenum target, GLint format, QFlags<QGLContext::BindOption> options);
+    void moveToThread(QThread *thread);
+
+private:
+    QGLContext(const QGLContext &);
+};
+
+%End
+%If (PyQt_OpenGL)
+
+class QGLWidget : QWidget
+{
+%TypeHeaderCode
+#include <qgl.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QGLWidget, &sipType_QGLWidget, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    QGLWidget(QWidget *parent /TransferThis/ = 0, const QGLWidget *shareWidget = 0, Qt::WindowFlags flags = 0);
+    QGLWidget(QGLContext *context /Transfer/, QWidget *parent /TransferThis/ = 0, const QGLWidget *shareWidget = 0, Qt::WindowFlags flags = 0);
+    QGLWidget(const QGLFormat &format, QWidget *parent /TransferThis/ = 0, const QGLWidget *shareWidget = 0, Qt::WindowFlags flags = 0);
+    virtual ~QGLWidget();
+    void qglColor(const QColor &c) const;
+    void qglClearColor(const QColor &c) const;
+    bool isValid() const;
+    bool isSharing() const;
+    void makeCurrent();
+    void doneCurrent();
+    bool doubleBuffer() const;
+    void swapBuffers();
+    QGLFormat format() const;
+    QGLContext *context() const;
+    void setContext(QGLContext *context /Transfer/, const QGLContext *shareContext = 0, bool deleteOldContext = true);
+    QPixmap renderPixmap(int width = 0, int height = 0, bool useContext = false);
+    QImage grabFrameBuffer(bool withAlpha = false);
+    void makeOverlayCurrent();
+    const QGLContext *overlayContext() const;
+    static QImage convertToGLFormat(const QImage &img);
+    void renderText(int x, int y, const QString &str, const QFont &font = QFont());
+    void renderText(double x, double y, double z, const QString &str, const QFont &font = QFont());
+    virtual QPaintEngine *paintEngine() const;
+    GLuint bindTexture(const QImage &image, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA);
+    GLuint bindTexture(const QPixmap &pixmap, GLenum target = GL_TEXTURE_2D, GLint format = GL_RGBA);
+    GLuint bindTexture(const QString &fileName);
+    void drawTexture(const QRectF &target, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D);
+    void drawTexture(const QPointF &point, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D);
+    void deleteTexture(GLuint tx_id);
+
+public slots:
+    virtual void updateGL();
+    virtual void updateOverlayGL();
+
+protected:
+    virtual bool event(QEvent *);
+    virtual void initializeGL();
+    virtual void resizeGL(int w, int h);
+    virtual void paintGL();
+    virtual void initializeOverlayGL();
+    virtual void resizeOverlayGL(int w, int h);
+    virtual void paintOverlayGL();
+    void setAutoBufferSwap(bool on);
+    bool autoBufferSwap() const;
+    virtual void paintEvent(QPaintEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void glInit();
+    virtual void glDraw();
+
+public:
+    GLuint bindTexture(const QImage &image, GLenum target, GLint format, QFlags<QGLContext::BindOption> options);
+    GLuint bindTexture(const QPixmap &pixmap, GLenum target, GLint format, QFlags<QGLContext::BindOption> options);
+
+private:
+    QGLWidget(const QGLWidget &);
+};
+
+%End
+%If (PyQt_OpenGL)
+QFlags<QGLFormat::OpenGLVersionFlag> operator|(QGLFormat::OpenGLVersionFlag f1, QFlags<QGLFormat::OpenGLVersionFlag> f2);
+%End
+%If (PyQt_OpenGL)
+QFlags<QGLContext::BindOption> operator|(QGLContext::BindOption f1, QFlags<QGLContext::BindOption> f2);
+%End
diff --git a/sip/QtPositioning/QtPositioningmod.sip b/sip/QtPositioning/QtPositioningmod.sip
new file mode 100644
index 0000000..2fd4854
--- /dev/null
+++ b/sip/QtPositioning/QtPositioningmod.sip
@@ -0,0 +1,58 @@
+// QtPositioningmod.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtPositioning, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%Include qgeoaddress.sip
+%Include qgeoareamonitorinfo.sip
+%Include qgeoareamonitorsource.sip
+%Include qgeocircle.sip
+%Include qgeocoordinate.sip
+%Include qgeolocation.sip
+%Include qgeopositioninfo.sip
+%Include qgeopositioninfosource.sip
+%Include qgeorectangle.sip
+%Include qgeosatelliteinfo.sip
+%Include qgeosatelliteinfosource.sip
+%Include qgeoshape.sip
+%Include qnmeapositioninfosource.sip
diff --git a/sip/QtPositioning/qgeoaddress.sip b/sip/QtPositioning/qgeoaddress.sip
new file mode 100644
index 0000000..b6dbc89
--- /dev/null
+++ b/sip/QtPositioning/qgeoaddress.sip
@@ -0,0 +1,60 @@
+// qgeoaddress.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QGeoAddress
+{
+%TypeHeaderCode
+#include <qgeoaddress.h>
+%End
+
+public:
+    QGeoAddress();
+    QGeoAddress(const QGeoAddress &other);
+    ~QGeoAddress();
+    bool operator==(const QGeoAddress &other) const;
+    bool operator!=(const QGeoAddress &other) const;
+    QString text() const;
+    void setText(const QString &text);
+    QString country() const;
+    void setCountry(const QString &country);
+    QString countryCode() const;
+    void setCountryCode(const QString &countryCode);
+    QString state() const;
+    void setState(const QString &state);
+    QString county() const;
+    void setCounty(const QString &county);
+    QString city() const;
+    void setCity(const QString &city);
+    QString district() const;
+    void setDistrict(const QString &district);
+    QString postalCode() const;
+    void setPostalCode(const QString &postalCode);
+    QString street() const;
+    void setStreet(const QString &street);
+    bool isEmpty() const;
+    void clear();
+    bool isTextGenerated() const;
+};
+
+%End
diff --git a/sip/QtPositioning/qgeoareamonitorinfo.sip b/sip/QtPositioning/qgeoareamonitorinfo.sip
new file mode 100644
index 0000000..dabda8b
--- /dev/null
+++ b/sip/QtPositioning/qgeoareamonitorinfo.sip
@@ -0,0 +1,63 @@
+// qgeoareamonitorinfo.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+%ModuleCode
+#include <qgeoareamonitorinfo.h>
+%End
+%End
+
+%If (Qt_5_2_0 -)
+
+class QGeoAreaMonitorInfo
+{
+%TypeHeaderCode
+#include <qgeoareamonitorinfo.h>
+%End
+
+public:
+    explicit QGeoAreaMonitorInfo(const QString &name /DocValue="''"/ = QString());
+    QGeoAreaMonitorInfo(const QGeoAreaMonitorInfo &other);
+    ~QGeoAreaMonitorInfo();
+    bool operator==(const QGeoAreaMonitorInfo &other) const;
+    bool operator!=(const QGeoAreaMonitorInfo &other) const;
+    QString name() const;
+    void setName(const QString &name);
+    QString identifier() const;
+    bool isValid() const;
+    QGeoShape area() const;
+    void setArea(const QGeoShape &newShape);
+    QDateTime expiration() const;
+    void setExpiration(const QDateTime &expiry);
+    bool isPersistent() const;
+    void setPersistent(bool isPersistent);
+    QVariantMap notificationParameters() const;
+    void setNotificationParameters(const QVariantMap &parameters);
+};
+
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator<<(QDataStream &, const QGeoAreaMonitorInfo & /Constrained/);
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator>>(QDataStream &, QGeoAreaMonitorInfo & /Constrained/);
+%End
diff --git a/sip/QtPositioning/qgeoareamonitorsource.sip b/sip/QtPositioning/qgeoareamonitorsource.sip
new file mode 100644
index 0000000..7cac4bb
--- /dev/null
+++ b/sip/QtPositioning/qgeoareamonitorsource.sip
@@ -0,0 +1,73 @@
+// qgeoareamonitorsource.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QGeoAreaMonitorSource : QObject
+{
+%TypeHeaderCode
+#include <qgeoareamonitorsource.h>
+%End
+
+public:
+    enum Error
+    {
+        AccessError,
+        InsufficientPositionInfo,
+        UnknownSourceError,
+        NoError,
+    };
+
+    enum AreaMonitorFeature
+    {
+        PersistentAreaMonitorFeature,
+        AnyAreaMonitorFeature,
+    };
+
+    typedef QFlags<QGeoAreaMonitorSource::AreaMonitorFeature> AreaMonitorFeatures;
+    explicit QGeoAreaMonitorSource(QObject *parent /TransferThis/);
+    virtual ~QGeoAreaMonitorSource();
+    static QGeoAreaMonitorSource *createDefaultSource(QObject *parent /TransferThis/) /Factory/;
+    static QGeoAreaMonitorSource *createSource(const QString &sourceName, QObject *parent /TransferThis/) /Factory/;
+    static QStringList availableSources();
+    virtual void setPositionInfoSource(QGeoPositionInfoSource *source /Transfer/);
+    virtual QGeoPositionInfoSource *positionInfoSource() const;
+    QString sourceName() const;
+    virtual QGeoAreaMonitorSource::Error error() const = 0;
+    virtual QFlags<QGeoAreaMonitorSource::AreaMonitorFeature> supportedAreaMonitorFeatures() const = 0;
+    virtual bool startMonitoring(const QGeoAreaMonitorInfo &monitor) = 0;
+    virtual bool stopMonitoring(const QGeoAreaMonitorInfo &monitor) = 0;
+    virtual bool requestUpdate(const QGeoAreaMonitorInfo &monitor, const char *signal) = 0;
+    virtual QList<QGeoAreaMonitorInfo> activeMonitors() const = 0;
+    virtual QList<QGeoAreaMonitorInfo> activeMonitors(const QGeoShape &lookupArea) const = 0;
+
+signals:
+    void areaEntered(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update);
+    void areaExited(const QGeoAreaMonitorInfo &monitor, const QGeoPositionInfo &update);
+    void monitorExpired(const QGeoAreaMonitorInfo &monitor);
+    void error(QGeoAreaMonitorSource::Error error);
+
+private:
+    QGeoAreaMonitorSource(const QGeoAreaMonitorSource &);
+};
+
+%End
diff --git a/sip/QtPositioning/qgeocircle.sip b/sip/QtPositioning/qgeocircle.sip
new file mode 100644
index 0000000..9f22dad
--- /dev/null
+++ b/sip/QtPositioning/qgeocircle.sip
@@ -0,0 +1,49 @@
+// qgeocircle.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QGeoCircle : QGeoShape
+{
+%TypeHeaderCode
+#include <qgeocircle.h>
+%End
+
+public:
+    QGeoCircle();
+    QGeoCircle(const QGeoCoordinate &center, qreal radius = -1.0e+0);
+    QGeoCircle(const QGeoCircle &other);
+    QGeoCircle(const QGeoShape &other);
+    ~QGeoCircle();
+    bool operator==(const QGeoShape &other) const;
+    bool operator==(const QGeoCircle &other) const;
+    bool operator!=(const QGeoShape &other) const;
+    bool operator!=(const QGeoCircle &other) const;
+    void setCenter(const QGeoCoordinate &center);
+    QGeoCoordinate center() const;
+    void setRadius(qreal radius);
+    qreal radius() const;
+    void translate(double degreesLatitude, double degreesLongitude);
+    QGeoCircle translated(double degreesLatitude, double degreesLongitude) const;
+};
+
+%End
diff --git a/sip/QtPositioning/qgeocoordinate.sip b/sip/QtPositioning/qgeocoordinate.sip
new file mode 100644
index 0000000..a4ad864
--- /dev/null
+++ b/sip/QtPositioning/qgeocoordinate.sip
@@ -0,0 +1,82 @@
+// qgeocoordinate.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+%ModuleCode
+#include <qgeocoordinate.h>
+%End
+%End
+
+%If (Qt_5_2_0 -)
+
+class QGeoCoordinate
+{
+%TypeHeaderCode
+#include <qgeocoordinate.h>
+%End
+
+public:
+    enum CoordinateType
+    {
+        InvalidCoordinate,
+        Coordinate2D,
+        Coordinate3D,
+    };
+
+    enum CoordinateFormat
+    {
+        Degrees,
+        DegreesWithHemisphere,
+        DegreesMinutes,
+        DegreesMinutesWithHemisphere,
+        DegreesMinutesSeconds,
+        DegreesMinutesSecondsWithHemisphere,
+    };
+
+    QGeoCoordinate();
+    QGeoCoordinate(double latitude, double longitude);
+    QGeoCoordinate(double latitude, double longitude, double altitude);
+    QGeoCoordinate(const QGeoCoordinate &other);
+    ~QGeoCoordinate();
+    bool operator==(const QGeoCoordinate &other) const;
+    bool operator!=(const QGeoCoordinate &other) const;
+    bool isValid() const;
+    QGeoCoordinate::CoordinateType type() const;
+    void setLatitude(double latitude);
+    double latitude() const;
+    void setLongitude(double longitude);
+    double longitude() const;
+    void setAltitude(double altitude);
+    double altitude() const;
+    qreal distanceTo(const QGeoCoordinate &other) const;
+    qreal azimuthTo(const QGeoCoordinate &other) const;
+    QGeoCoordinate atDistanceAndAzimuth(qreal distance, qreal azimuth, qreal distanceUp = 0.0) const;
+    QString toString(QGeoCoordinate::CoordinateFormat format = QGeoCoordinate::DegreesMinutesSecondsWithHemisphere) const;
+};
+
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator<<(QDataStream &stream, const QGeoCoordinate &coordinate /Constrained/);
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator>>(QDataStream &stream, QGeoCoordinate &coordinate /Constrained/);
+%End
diff --git a/sip/QtPositioning/qgeolocation.sip b/sip/QtPositioning/qgeolocation.sip
new file mode 100644
index 0000000..3a718a6
--- /dev/null
+++ b/sip/QtPositioning/qgeolocation.sip
@@ -0,0 +1,46 @@
+// qgeolocation.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QGeoLocation
+{
+%TypeHeaderCode
+#include <qgeolocation.h>
+%End
+
+public:
+    QGeoLocation();
+    QGeoLocation(const QGeoLocation &other);
+    ~QGeoLocation();
+    bool operator==(const QGeoLocation &other) const;
+    bool operator!=(const QGeoLocation &other) const;
+    QGeoAddress address() const;
+    void setAddress(const QGeoAddress &address);
+    QGeoCoordinate coordinate() const;
+    void setCoordinate(const QGeoCoordinate &position);
+    QGeoRectangle boundingBox() const;
+    void setBoundingBox(const QGeoRectangle &box);
+    bool isEmpty() const;
+};
+
+%End
diff --git a/sip/QtPositioning/qgeopositioninfo.sip b/sip/QtPositioning/qgeopositioninfo.sip
new file mode 100644
index 0000000..1274456
--- /dev/null
+++ b/sip/QtPositioning/qgeopositioninfo.sip
@@ -0,0 +1,71 @@
+// qgeopositioninfo.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+%ModuleCode
+#include <qgeopositioninfo.h>
+%End
+%End
+
+%If (Qt_5_2_0 -)
+
+class QGeoPositionInfo
+{
+%TypeHeaderCode
+#include <qgeopositioninfo.h>
+%End
+
+public:
+    enum Attribute
+    {
+        Direction,
+        GroundSpeed,
+        VerticalSpeed,
+        MagneticVariation,
+        HorizontalAccuracy,
+        VerticalAccuracy,
+    };
+
+    QGeoPositionInfo();
+    QGeoPositionInfo(const QGeoCoordinate &coordinate, const QDateTime &updateTime);
+    QGeoPositionInfo(const QGeoPositionInfo &other);
+    ~QGeoPositionInfo();
+    bool operator==(const QGeoPositionInfo &other) const;
+    bool operator!=(const QGeoPositionInfo &other) const;
+    bool isValid() const;
+    void setTimestamp(const QDateTime &timestamp);
+    QDateTime timestamp() const;
+    void setCoordinate(const QGeoCoordinate &coordinate);
+    QGeoCoordinate coordinate() const;
+    void setAttribute(QGeoPositionInfo::Attribute attribute, qreal value);
+    qreal attribute(QGeoPositionInfo::Attribute attribute) const;
+    void removeAttribute(QGeoPositionInfo::Attribute attribute);
+    bool hasAttribute(QGeoPositionInfo::Attribute attribute) const;
+};
+
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator<<(QDataStream &stream, const QGeoPositionInfo &info /Constrained/);
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator>>(QDataStream &stream, QGeoPositionInfo &info /Constrained/);
+%End
diff --git a/sip/QtPositioning/qgeopositioninfosource.sip b/sip/QtPositioning/qgeopositioninfosource.sip
new file mode 100644
index 0000000..38bcbc3
--- /dev/null
+++ b/sip/QtPositioning/qgeopositioninfosource.sip
@@ -0,0 +1,118 @@
+// qgeopositioninfosource.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+%ModuleCode
+#include <qgeopositioninfosource.h>
+%End
+%End
+
+%If (Qt_5_2_0 -)
+
+class QGeoPositionInfoSource : QObject
+{
+%TypeHeaderCode
+#include <qgeopositioninfosource.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QGeoPositionInfoSource, &sipType_QGeoPositionInfoSource, 3, 1},
+        {sipName_QGeoSatelliteInfoSource, &sipType_QGeoSatelliteInfoSource, -1, 2},
+        {sipName_QGeoAreaMonitorSource, &sipType_QGeoAreaMonitorSource, -1, -1},
+        {sipName_QNmeaPositionInfoSource, &sipType_QNmeaPositionInfoSource, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    enum Error
+    {
+        AccessError,
+        ClosedError,
+        UnknownSourceError,
+        NoError,
+    };
+
+    enum PositioningMethod
+    {
+        NoPositioningMethods,
+        SatellitePositioningMethods,
+        NonSatellitePositioningMethods,
+        AllPositioningMethods,
+    };
+
+    typedef QFlags<QGeoPositionInfoSource::PositioningMethod> PositioningMethods;
+    explicit QGeoPositionInfoSource(QObject *parent /TransferThis/);
+    virtual ~QGeoPositionInfoSource();
+    virtual void setUpdateInterval(int msec);
+    int updateInterval() const;
+    virtual void setPreferredPositioningMethods(QFlags<QGeoPositionInfoSource::PositioningMethod> methods);
+    QFlags<QGeoPositionInfoSource::PositioningMethod> preferredPositioningMethods() const;
+    virtual QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const = 0;
+    virtual QFlags<QGeoPositionInfoSource::PositioningMethod> supportedPositioningMethods() const = 0;
+    virtual int minimumUpdateInterval() const = 0;
+    QString sourceName() const;
+    static QGeoPositionInfoSource *createDefaultSource(QObject *parent /TransferThis/) /Factory/;
+    static QGeoPositionInfoSource *createSource(const QString &sourceName, QObject *parent /TransferThis/) /Factory/;
+    static QStringList availableSources();
+    virtual QGeoPositionInfoSource::Error error() const = 0;
+
+public slots:
+    virtual void startUpdates() = 0;
+    virtual void stopUpdates() = 0;
+    virtual void requestUpdate(int timeout = 0) = 0;
+
+signals:
+    void positionUpdated(const QGeoPositionInfo &update);
+    void updateTimeout();
+    void error(QGeoPositionInfoSource::Error);
+
+private:
+    QGeoPositionInfoSource(const QGeoPositionInfoSource &);
+};
+
+%End
+%If (Qt_5_2_0 -)
+QFlags<QGeoPositionInfoSource::PositioningMethod> operator|(QGeoPositionInfoSource::PositioningMethod f1, QFlags<QGeoPositionInfoSource::PositioningMethod> f2);
+%End
diff --git a/sip/QtPositioning/qgeorectangle.sip b/sip/QtPositioning/qgeorectangle.sip
new file mode 100644
index 0000000..2749cf6
--- /dev/null
+++ b/sip/QtPositioning/qgeorectangle.sip
@@ -0,0 +1,69 @@
+// qgeorectangle.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QGeoRectangle : QGeoShape
+{
+%TypeHeaderCode
+#include <qgeorectangle.h>
+%End
+
+public:
+    QGeoRectangle();
+    QGeoRectangle(const QGeoCoordinate &center, double degreesWidth, double degreesHeight);
+    QGeoRectangle(const QGeoCoordinate &topLeft, const QGeoCoordinate &bottomRight);
+%If (Qt_5_3_0 -)
+    QGeoRectangle(const QList<QGeoCoordinate> &coordinates);
+%End
+    QGeoRectangle(const QGeoRectangle &other);
+    QGeoRectangle(const QGeoShape &other);
+    ~QGeoRectangle();
+    bool operator==(const QGeoShape &other) const;
+    bool operator==(const QGeoRectangle &other) const;
+    bool operator!=(const QGeoShape &other) const;
+    bool operator!=(const QGeoRectangle &other) const;
+    void setTopLeft(const QGeoCoordinate &topLeft);
+    QGeoCoordinate topLeft() const;
+    void setTopRight(const QGeoCoordinate &topRight);
+    QGeoCoordinate topRight() const;
+    void setBottomLeft(const QGeoCoordinate &bottomLeft);
+    QGeoCoordinate bottomLeft() const;
+    void setBottomRight(const QGeoCoordinate &bottomRight);
+    QGeoCoordinate bottomRight() const;
+    void setCenter(const QGeoCoordinate &center);
+    QGeoCoordinate center() const;
+    void setWidth(double degreesWidth);
+    double width() const;
+    void setHeight(double degreesHeight);
+    double height() const;
+    bool contains(const QGeoCoordinate &coordinate) const;
+    bool contains(const QGeoRectangle &rectangle) const;
+    bool intersects(const QGeoRectangle &rectangle) const;
+    void translate(double degreesLatitude, double degreesLongitude);
+    QGeoRectangle translated(double degreesLatitude, double degreesLongitude) const;
+    QGeoRectangle united(const QGeoRectangle &rectangle) const;
+    QGeoRectangle &operator|=(const QGeoRectangle &rectangle);
+    QGeoRectangle operator|(const QGeoRectangle &rectangle) const;
+};
+
+%End
diff --git a/sip/QtPositioning/qgeosatelliteinfo.sip b/sip/QtPositioning/qgeosatelliteinfo.sip
new file mode 100644
index 0000000..c6c292a
--- /dev/null
+++ b/sip/QtPositioning/qgeosatelliteinfo.sip
@@ -0,0 +1,74 @@
+// qgeosatelliteinfo.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+%ModuleCode
+#include <qgeosatelliteinfo.h>
+%End
+%End
+
+%If (Qt_5_2_0 -)
+
+class QGeoSatelliteInfo
+{
+%TypeHeaderCode
+#include <qgeosatelliteinfo.h>
+%End
+
+public:
+    enum Attribute
+    {
+        Elevation,
+        Azimuth,
+    };
+
+    enum SatelliteSystem
+    {
+        Undefined,
+        GPS,
+        GLONASS,
+    };
+
+    QGeoSatelliteInfo();
+    QGeoSatelliteInfo(const QGeoSatelliteInfo &other);
+    ~QGeoSatelliteInfo();
+    bool operator==(const QGeoSatelliteInfo &other) const;
+    bool operator!=(const QGeoSatelliteInfo &other) const;
+    void setSatelliteSystem(QGeoSatelliteInfo::SatelliteSystem system);
+    QGeoSatelliteInfo::SatelliteSystem satelliteSystem() const;
+    void setSatelliteIdentifier(int satId);
+    int satelliteIdentifier() const;
+    void setSignalStrength(int signalStrength);
+    int signalStrength() const;
+    void setAttribute(QGeoSatelliteInfo::Attribute attribute, qreal value);
+    qreal attribute(QGeoSatelliteInfo::Attribute attribute) const;
+    void removeAttribute(QGeoSatelliteInfo::Attribute attribute);
+    bool hasAttribute(QGeoSatelliteInfo::Attribute attribute) const;
+};
+
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator<<(QDataStream &stream, const QGeoSatelliteInfo &info /Constrained/);
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator>>(QDataStream &stream, QGeoSatelliteInfo &info /Constrained/);
+%End
diff --git a/sip/QtPositioning/qgeosatelliteinfosource.sip b/sip/QtPositioning/qgeosatelliteinfosource.sip
new file mode 100644
index 0000000..023e65f
--- /dev/null
+++ b/sip/QtPositioning/qgeosatelliteinfosource.sip
@@ -0,0 +1,66 @@
+// qgeosatelliteinfosource.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QGeoSatelliteInfoSource : QObject
+{
+%TypeHeaderCode
+#include <qgeosatelliteinfosource.h>
+%End
+
+public:
+    enum Error
+    {
+        AccessError,
+        ClosedError,
+        NoError,
+        UnknownSourceError,
+    };
+
+    explicit QGeoSatelliteInfoSource(QObject *parent /TransferThis/);
+    virtual ~QGeoSatelliteInfoSource();
+    static QGeoSatelliteInfoSource *createDefaultSource(QObject *parent /TransferThis/) /Factory/;
+    static QGeoSatelliteInfoSource *createSource(const QString &sourceName, QObject *parent /TransferThis/) /Factory/;
+    static QStringList availableSources();
+    QString sourceName() const;
+    virtual void setUpdateInterval(int msec);
+    int updateInterval() const;
+    virtual int minimumUpdateInterval() const = 0;
+    virtual QGeoSatelliteInfoSource::Error error() const = 0;
+
+public slots:
+    virtual void startUpdates() = 0;
+    virtual void stopUpdates() = 0;
+    virtual void requestUpdate(int timeout = 0) = 0;
+
+signals:
+    void satellitesInViewUpdated(const QList<QGeoSatelliteInfo> &satellites);
+    void satellitesInUseUpdated(const QList<QGeoSatelliteInfo> &satellites);
+    void requestTimeout();
+    void error(QGeoSatelliteInfoSource::Error);
+
+private:
+    QGeoSatelliteInfoSource(const QGeoSatelliteInfoSource &);
+};
+
+%End
diff --git a/sip/QtPositioning/qgeoshape.sip b/sip/QtPositioning/qgeoshape.sip
new file mode 100644
index 0000000..3e5c361
--- /dev/null
+++ b/sip/QtPositioning/qgeoshape.sip
@@ -0,0 +1,82 @@
+// qgeoshape.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+%ModuleCode
+#include <qgeoshape.h>
+%End
+%End
+
+%If (Qt_5_2_0 -)
+
+class QGeoShape
+{
+%TypeHeaderCode
+#include <qgeoshape.h>
+%End
+
+%ConvertToSubClassCode
+    switch (sipCpp->type())
+    {
+    case QGeoShape::CircleType:
+        sipType = sipType_QGeoCircle;
+        break;
+    
+    case QGeoShape::RectangleType:
+        sipType = sipType_QGeoRectangle;
+        break;
+    
+    default:
+        sipType = 0;
+    }
+%End
+
+public:
+    QGeoShape();
+    QGeoShape(const QGeoShape &other);
+    ~QGeoShape();
+
+    enum ShapeType
+    {
+        UnknownType,
+        RectangleType,
+        CircleType,
+    };
+
+    QGeoShape::ShapeType type() const;
+    bool isValid() const;
+    bool isEmpty() const;
+    bool contains(const QGeoCoordinate &coordinate) const;
+    bool operator==(const QGeoShape &other) const;
+    bool operator!=(const QGeoShape &other) const;
+%If (Qt_5_3_0 -)
+    void extendShape(const QGeoCoordinate &coordinate);
+%End
+};
+
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator<<(QDataStream &stream, const QGeoShape &shape /Constrained/);
+%End
+%If (Qt_5_2_0 -)
+QDataStream &operator>>(QDataStream &stream, QGeoShape &shape /Constrained/);
+%End
diff --git a/sip/QtPositioning/qnmeapositioninfosource.sip b/sip/QtPositioning/qnmeapositioninfosource.sip
new file mode 100644
index 0000000..fde573c
--- /dev/null
+++ b/sip/QtPositioning/qnmeapositioninfosource.sip
@@ -0,0 +1,69 @@
+// qnmeapositioninfosource.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtPositioning Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QNmeaPositionInfoSource : QGeoPositionInfoSource
+{
+%TypeHeaderCode
+#include <qnmeapositioninfosource.h>
+%End
+
+public:
+    enum UpdateMode
+    {
+        RealTimeMode,
+        SimulationMode,
+    };
+
+    QNmeaPositionInfoSource(QNmeaPositionInfoSource::UpdateMode updateMode, QObject *parent /TransferThis/ = 0);
+    virtual ~QNmeaPositionInfoSource();
+    QNmeaPositionInfoSource::UpdateMode updateMode() const;
+    void setDevice(QIODevice *source);
+    QIODevice *device() const;
+    virtual void setUpdateInterval(int msec);
+    virtual QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const;
+    virtual QFlags<QGeoPositionInfoSource::PositioningMethod> supportedPositioningMethods() const;
+    virtual int minimumUpdateInterval() const;
+    virtual QGeoPositionInfoSource::Error error() const;
+
+public slots:
+    virtual void startUpdates();
+    virtual void stopUpdates();
+    virtual void requestUpdate(int timeout = 0);
+
+protected:
+    virtual bool parsePosInfoFromNmeaData(const char *data /Encoding="None"/, int size, QGeoPositionInfo *posInfo, bool *hasFix);
+
+public:
+%If (Qt_5_3_0 -)
+    void setUserEquivalentRangeError(double uere);
+%End
+%If (Qt_5_3_0 -)
+    double userEquivalentRangeError() const;
+%End
+
+private:
+    QNmeaPositionInfoSource(const QNmeaPositionInfoSource &);
+};
+
+%End
diff --git a/sip/QtPrintSupport/QtPrintSupportmod.sip b/sip/QtPrintSupport/QtPrintSupportmod.sip
new file mode 100644
index 0000000..921803c
--- /dev/null
+++ b/sip/QtPrintSupport/QtPrintSupportmod.sip
@@ -0,0 +1,57 @@
+// QtPrintSupportmod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPrintSupport Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtPrintSupport, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qabstractprintdialog.sip
+%Include qpagesetupdialog.sip
+%Include qprintdialog.sip
+%Include qprintengine.sip
+%Include qprinter.sip
+%Include qprinterinfo.sip
+%Include qprintpreviewdialog.sip
+%Include qprintpreviewwidget.sip
+%Include qpyprintsupport_qlist.sip
diff --git a/sip/QtPrintSupport/qabstractprintdialog.sip b/sip/QtPrintSupport/qabstractprintdialog.sip
new file mode 100644
index 0000000..fa670c5
--- /dev/null
+++ b/sip/QtPrintSupport/qabstractprintdialog.sip
@@ -0,0 +1,171 @@
+// qabstractprintdialog.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPrintSupport Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qabstractprintdialog.h>
+%End
+
+%If (PyQt_Printer)
+
+class QAbstractPrintDialog : QDialog
+{
+%TypeHeaderCode
+#include <qabstractprintdialog.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+    #if defined(SIP_FEATURE_PyQt_PrintDialog)
+        {sipName_QPageSetupDialog, &sipType_QPageSetupDialog, -1, 1},
+    #else
+        {0, 0, -1, 1},
+    #endif
+    #if defined(SIP_FEATURE_PyQt_PrintPreviewWidget)
+        {sipName_QPrintPreviewWidget, &sipType_QPrintPreviewWidget, -1, 2},
+    #else
+        {0, 0, -1, 2},
+    #endif
+    #if defined(SIP_FEATURE_PyQt_PrintPreviewDialog)
+        {sipName_QPrintPreviewDialog, &sipType_QPrintPreviewDialog, -1, 3},
+    #else
+        {0, 0, -1, 3},
+    #endif
+    #if defined(SIP_FEATURE_PyQt_Printer)
+        {sipName_QAbstractPrintDialog, &sipType_QAbstractPrintDialog, 4, -1},
+    #else
+        {0, 0, 4, -1},
+    #endif
+    #if defined(SIP_FEATURE_PyQt_PrintDialog)
+        {sipName_QPrintDialog, &sipType_QPrintDialog, -1, -1},
+    #else
+        {0, 0, -1, -1},
+    #endif
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    enum PrintRange
+    {
+        AllPages,
+        Selection,
+        PageRange,
+        CurrentPage,
+    };
+
+%If (Py_v3)
+
+    enum PrintDialogOption
+    {
+        None /PyName=None_/,
+        PrintToFile,
+        PrintSelection,
+        PrintPageRange,
+        PrintCollateCopies,
+        PrintShowPageSize,
+        PrintCurrentPage,
+    };
+
+%End
+%If (!Py_v3)
+// Backward compatible PrintDialogOption for Python v2.
+// Note that we have to duplicate the whole enum because MetaSIP doesn't
+// support handwritten code in enum definitions.
+
+enum PrintDialogOption {
+    None,
+    None /PyName=None_/,
+    PrintToFile,
+    PrintSelection,
+    PrintPageRange,
+    PrintCollateCopies,
+    PrintShowPageSize,
+    PrintCurrentPage
+};
+%End
+    typedef QFlags<QAbstractPrintDialog::PrintDialogOption> PrintDialogOptions;
+%If (PyQt_PrintDialog)
+    QAbstractPrintDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0);
+    virtual ~QAbstractPrintDialog();
+    virtual int exec() = 0 /PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    virtual int exec() = 0 /ReleaseGIL/;
+%End
+    void setPrintRange(QAbstractPrintDialog::PrintRange range);
+    QAbstractPrintDialog::PrintRange printRange() const;
+    void setMinMax(int min, int max);
+    int minPage() const;
+    int maxPage() const;
+    void setFromTo(int fromPage, int toPage);
+    int fromPage() const;
+    int toPage() const;
+    QPrinter *printer() const;
+    void setOptionTabs(const QList<QWidget*> &tabs);
+
+private:
+    QAbstractPrintDialog(const QAbstractPrintDialog &);
+
+public:
+%End // PyQt_PrintDialog
+};
+
+%End
+%If (PyQt_Printer)
+QFlags<QAbstractPrintDialog::PrintDialogOption> operator|(QAbstractPrintDialog::PrintDialogOption f1, QFlags<QAbstractPrintDialog::PrintDialogOption> f2);
+%End
+
+%ModuleHeaderCode
+// Imports from QtCore.
+typedef sipErrorState (*pyqt5_qtprintsupport_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &);
+extern pyqt5_qtprintsupport_get_connection_parts_t pyqt5_qtprintsupport_get_connection_parts;
+%End
+
+%ModuleCode
+// Imports from QtCore.
+pyqt5_qtprintsupport_get_connection_parts_t pyqt5_qtprintsupport_get_connection_parts;
+%End
+
+%PostInitialisationCode
+// Imports from QtCore.
+pyqt5_qtprintsupport_get_connection_parts = (pyqt5_qtprintsupport_get_connection_parts_t)sipImportSymbol("pyqt5_get_connection_parts");
+%End
diff --git a/sip/QtPrintSupport/qpagesetupdialog.sip b/sip/QtPrintSupport/qpagesetupdialog.sip
new file mode 100644
index 0000000..ad4730e
--- /dev/null
+++ b/sip/QtPrintSupport/qpagesetupdialog.sip
@@ -0,0 +1,86 @@
+// qpagesetupdialog.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPrintSupport Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_PrintDialog)
+
+class QPageSetupDialog : QDialog
+{
+%TypeHeaderCode
+#include <qpagesetupdialog.h>
+%End
+
+public:
+    QPageSetupDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0);
+    explicit QPageSetupDialog(QWidget *parent /TransferThis/ = 0);
+    virtual ~QPageSetupDialog();
+    virtual void setVisible(bool visible);
+    virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/;
+%MethodCode
+        // Transfer ownership back to Python (a modal dialog will probably have the
+        // main window as it's parent).  This means the Qt dialog will be deleted when
+        // the Python wrapper is garbage collected.  Although this is a little
+        // inconsistent, it saves having to code it explicitly to avoid the memory
+        // leak.
+        sipTransferBack(sipSelf);
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipRes = sipSelfWasArg ? sipCpp->QPageSetupDialog::exec()
+                               : sipCpp->exec();
+        Py_END_ALLOW_THREADS
+%End
+
+    virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/;
+%MethodCode
+        // Transfer ownership back to Python (a modal dialog will probably have the
+        // main window as it's parent).  This means the Qt dialog will be deleted when
+        // the Python wrapper is garbage collected.  Although this is a little
+        // inconsistent, it saves having to code it explicitly to avoid the memory
+        // leak.
+        sipTransferBack(sipSelf);
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipRes = sipSelfWasArg ? sipCpp->QPageSetupDialog::exec()
+                               : sipCpp->exec();
+        Py_END_ALLOW_THREADS
+%End
+
+    virtual void open();
+    void open(SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtprintsupport_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipCpp->open(receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    virtual void done(int result);
+    QPrinter *printer();
+};
+
+%End
diff --git a/sip/QtPrintSupport/qprintdialog.sip b/sip/QtPrintSupport/qprintdialog.sip
new file mode 100644
index 0000000..bb606c3
--- /dev/null
+++ b/sip/QtPrintSupport/qprintdialog.sip
@@ -0,0 +1,98 @@
+// qprintdialog.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPrintSupport Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_PrintDialog)
+
+class QPrintDialog : QAbstractPrintDialog
+{
+%TypeHeaderCode
+#include <qprintdialog.h>
+%End
+
+public:
+    QPrintDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0);
+    explicit QPrintDialog(QWidget *parent /TransferThis/ = 0);
+    virtual ~QPrintDialog();
+    virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/;
+%MethodCode
+        // Transfer ownership back to Python (a modal dialog will probably have the
+        // main window as it's parent).  This means the Qt dialog will be deleted when
+        // the Python wrapper is garbage collected.  Although this is a little
+        // inconsistent, it saves having to code it explicitly to avoid the memory
+        // leak.
+        sipTransferBack(sipSelf);
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipRes = sipSelfWasArg ? sipCpp->QPrintDialog::exec()
+                               : sipCpp->exec();
+        Py_END_ALLOW_THREADS
+%End
+
+%If (Py_v3)
+    virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/;
+%MethodCode
+        // Transfer ownership back to Python (a modal dialog will probably have the
+        // main window as it's parent).  This means the Qt dialog will be deleted when
+        // the Python wrapper is garbage collected.  Although this is a little
+        // inconsistent, it saves having to code it explicitly to avoid the memory
+        // leak.
+        sipTransferBack(sipSelf);
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipRes = sipSelfWasArg ? sipCpp->QPrintDialog::exec()
+                               : sipCpp->exec();
+        Py_END_ALLOW_THREADS
+%End
+
+%End
+%If (WS_X11)
+    virtual void accept();
+%End
+    virtual void done(int result);
+    void setOption(QAbstractPrintDialog::PrintDialogOption option, bool on = true);
+    bool testOption(QAbstractPrintDialog::PrintDialogOption option) const;
+    void setOptions(QFlags<QAbstractPrintDialog::PrintDialogOption> options);
+    QFlags<QAbstractPrintDialog::PrintDialogOption> options() const;
+    virtual void setVisible(bool visible);
+    virtual void open();
+    void open(SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtprintsupport_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipCpp->open(receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    void accepted();
+
+signals:
+    void accepted(QPrinter *printer);
+};
+
+%End
diff --git a/sip/QtPrintSupport/qprintengine.sip b/sip/QtPrintSupport/qprintengine.sip
new file mode 100644
index 0000000..64d6f20
--- /dev/null
+++ b/sip/QtPrintSupport/qprintengine.sip
@@ -0,0 +1,86 @@
+// qprintengine.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPrintSupport Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_Printer)
+
+class QPrintEngine
+{
+%TypeHeaderCode
+#include <qprintengine.h>
+%End
+
+public:
+    virtual ~QPrintEngine();
+
+    enum PrintEnginePropertyKey
+    {
+        PPK_CollateCopies,
+        PPK_ColorMode,
+        PPK_Creator,
+        PPK_DocumentName,
+        PPK_FullPage,
+        PPK_NumberOfCopies,
+        PPK_Orientation,
+        PPK_OutputFileName,
+        PPK_PageOrder,
+        PPK_PageRect,
+        PPK_PageSize,
+        PPK_PaperRect,
+        PPK_PaperSource,
+        PPK_PrinterName,
+        PPK_PrinterProgram,
+        PPK_Resolution,
+        PPK_SelectionOption,
+        PPK_SupportedResolutions,
+        PPK_WindowsPageSize,
+        PPK_FontEmbedding,
+        PPK_Duplex,
+        PPK_PaperSources,
+        PPK_CustomPaperSize,
+        PPK_PageMargins,
+        PPK_PaperSize,
+        PPK_CopyCount,
+        PPK_SupportsMultipleCopies,
+%If (Qt_5_1_0 -)
+        PPK_PaperName,
+%End
+%If (Qt_5_3_0 -)
+        PPK_QPageSize,
+%End
+%If (Qt_5_3_0 -)
+        PPK_QPageMargins,
+%End
+%If (Qt_5_3_0 -)
+        PPK_QPageLayout,
+%End
+        PPK_CustomBase,
+    };
+
+    virtual void setProperty(QPrintEngine::PrintEnginePropertyKey key, const QVariant &value) = 0;
+    virtual QVariant property(QPrintEngine::PrintEnginePropertyKey key) const = 0;
+    virtual bool newPage() = 0;
+    virtual bool abort() = 0;
+    virtual int metric(QPaintDevice::PaintDeviceMetric) const = 0;
+    virtual QPrinter::PrinterState printerState() const = 0;
+};
+
+%End
diff --git a/sip/QtPrintSupport/qprinter.sip b/sip/QtPrintSupport/qprinter.sip
new file mode 100644
index 0000000..7f6c3d3
--- /dev/null
+++ b/sip/QtPrintSupport/qprinter.sip
@@ -0,0 +1,213 @@
+// qprinter.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPrintSupport Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_Printer)
+
+class QPrinter : QPagedPaintDevice
+{
+%TypeHeaderCode
+#include <qprinter.h>
+%End
+
+public:
+    enum PrinterMode
+    {
+        ScreenResolution,
+        PrinterResolution,
+        HighResolution,
+    };
+
+    explicit QPrinter(QPrinter::PrinterMode mode = QPrinter::ScreenResolution);
+    QPrinter(const QPrinterInfo &printer, QPrinter::PrinterMode mode = QPrinter::ScreenResolution);
+    virtual ~QPrinter();
+
+    enum Orientation
+    {
+        Portrait,
+        Landscape,
+    };
+
+    typedef QPagedPaintDevice::PageSize PaperSize;
+
+    enum PageOrder
+    {
+        FirstPageFirst,
+        LastPageFirst,
+    };
+
+    enum ColorMode
+    {
+        GrayScale,
+        Color,
+    };
+
+    enum PaperSource
+    {
+        OnlyOne,
+        Lower,
+        Middle,
+        Manual,
+        Envelope,
+        EnvelopeManual,
+        Auto,
+        Tractor,
+        SmallFormat,
+        LargeFormat,
+        LargeCapacity,
+        Cassette,
+        FormSource,
+        MaxPageSource,
+%If (Qt_5_3_0 -)
+        Upper,
+%End
+%If (Qt_5_3_0 -)
+        CustomSource,
+%End
+%If (Qt_5_3_0 -)
+        LastPaperSource,
+%End
+    };
+
+    enum PrinterState
+    {
+        Idle,
+        Active,
+        Aborted,
+        Error,
+    };
+
+    enum OutputFormat
+    {
+        NativeFormat,
+        PdfFormat,
+    };
+
+    enum PrintRange
+    {
+        AllPages,
+        Selection,
+        PageRange,
+        CurrentPage,
+    };
+
+    enum Unit
+    {
+        Millimeter,
+        Point,
+        Inch,
+        Pica,
+        Didot,
+        Cicero,
+        DevicePixel,
+    };
+
+    enum DuplexMode
+    {
+        DuplexNone,
+        DuplexAuto,
+        DuplexLongSide,
+        DuplexShortSide,
+    };
+
+    void setOutputFormat(QPrinter::OutputFormat format);
+    QPrinter::OutputFormat outputFormat() const;
+    void setPrinterName(const QString &);
+    QString printerName() const;
+    bool isValid() const;
+    void setOutputFileName(const QString &);
+    QString outputFileName() const;
+    void setPrintProgram(const QString &);
+    QString printProgram() const;
+    void setDocName(const QString &);
+    QString docName() const;
+    void setCreator(const QString &);
+    QString creator() const;
+    void setOrientation(QPrinter::Orientation);
+    QPrinter::Orientation orientation() const;
+    virtual void setPageSizeMM(const QSizeF &size);
+    void setPaperSize(QPagedPaintDevice::PageSize);
+    QPagedPaintDevice::PageSize paperSize() const;
+    void setPaperSize(const QSizeF &paperSize, QPrinter::Unit unit);
+    QSizeF paperSize(QPrinter::Unit unit) const;
+    void setPageOrder(QPrinter::PageOrder);
+    QPrinter::PageOrder pageOrder() const;
+    void setResolution(int);
+    int resolution() const;
+    void setColorMode(QPrinter::ColorMode);
+    QPrinter::ColorMode colorMode() const;
+    void setCollateCopies(bool collate);
+    bool collateCopies() const;
+    void setFullPage(bool);
+    bool fullPage() const;
+    void setCopyCount(int);
+    int copyCount() const;
+    bool supportsMultipleCopies() const;
+    void setPaperSource(QPrinter::PaperSource);
+    QPrinter::PaperSource paperSource() const;
+    void setDuplex(QPrinter::DuplexMode duplex);
+    QPrinter::DuplexMode duplex() const;
+    QList<int> supportedResolutions() const;
+    void setFontEmbeddingEnabled(bool enable);
+    bool fontEmbeddingEnabled() const;
+    void setDoubleSidedPrinting(bool enable);
+    bool doubleSidedPrinting() const;
+    QRect paperRect() const;
+    QRect pageRect() const;
+    QRectF paperRect(QPrinter::Unit) const;
+    QRectF pageRect(QPrinter::Unit) const;
+%If (WS_X11 || WS_MACX)
+    QString printerSelectionOption() const;
+%End
+%If (WS_X11 || WS_MACX)
+    void setPrinterSelectionOption(const QString &);
+%End
+    virtual bool newPage();
+    bool abort();
+    QPrinter::PrinterState printerState() const;
+    virtual QPaintEngine *paintEngine() const;
+    QPrintEngine *printEngine() const;
+    void setFromTo(int fromPage, int toPage);
+    int fromPage() const;
+    int toPage() const;
+    void setPrintRange(QPrinter::PrintRange range);
+    QPrinter::PrintRange printRange() const;
+    virtual void setMargins(const QPagedPaintDevice::Margins &m);
+    void setPageMargins(qreal left, qreal top, qreal right, qreal bottom, QPrinter::Unit unit);
+    void getPageMargins(qreal *left, qreal *top, qreal *right, qreal *bottom, QPrinter::Unit unit) const;
+
+protected:
+    virtual int metric(QPaintDevice::PaintDeviceMetric) const;
+    void setEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine);
+
+public:
+%If (Qt_5_1_0 -)
+    void setPaperName(const QString &paperName);
+%End
+%If (Qt_5_1_0 -)
+    QString paperName() const;
+%End
+
+private:
+    QPrinter(const QPrinter &);
+};
+
+%End
diff --git a/sip/QtPrintSupport/qprinterinfo.sip b/sip/QtPrintSupport/qprinterinfo.sip
new file mode 100644
index 0000000..b547e5a
--- /dev/null
+++ b/sip/QtPrintSupport/qprinterinfo.sip
@@ -0,0 +1,81 @@
+// qprinterinfo.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPrintSupport Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_Printer)
+
+class QPrinterInfo
+{
+%TypeHeaderCode
+#include <qprinterinfo.h>
+%End
+
+public:
+    QPrinterInfo();
+    QPrinterInfo(const QPrinterInfo &src);
+    explicit QPrinterInfo(const QPrinter &printer);
+    ~QPrinterInfo();
+    QString printerName() const;
+    bool isNull() const;
+    bool isDefault() const;
+    QList<QPagedPaintDevice::PageSize> supportedPaperSizes() const;
+%If (Qt_5_1_0 -)
+    QList<QPair<QString, QSizeF>> supportedSizesWithNames() const;
+%End
+    static QList<QPrinterInfo> availablePrinters();
+    static QPrinterInfo defaultPrinter();
+    QString description() const;
+    QString location() const;
+    QString makeAndModel() const;
+    static QPrinterInfo printerInfo(const QString &printerName);
+%If (Qt_5_3_0 -)
+    bool isRemote() const;
+%End
+%If (Qt_5_3_0 -)
+    QPrinter::PrinterState state() const;
+%End
+%If (Qt_5_3_0 -)
+    QList<QPageSize> supportedPageSizes() const;
+%End
+%If (Qt_5_3_0 -)
+    QPageSize defaultPageSize() const;
+%End
+%If (Qt_5_3_0 -)
+    bool supportsCustomPageSizes() const;
+%End
+%If (Qt_5_3_0 -)
+    QPageSize minimumPhysicalPageSize() const;
+%End
+%If (Qt_5_3_0 -)
+    QPageSize maximumPhysicalPageSize() const;
+%End
+%If (Qt_5_3_0 -)
+    QList<int> supportedResolutions() const;
+%End
+%If (Qt_5_3_0 -)
+    static QStringList availablePrinterNames();
+%End
+%If (Qt_5_3_0 -)
+    static QString defaultPrinterName();
+%End
+};
+
+%End
diff --git a/sip/QtPrintSupport/qprintpreviewdialog.sip b/sip/QtPrintSupport/qprintpreviewdialog.sip
new file mode 100644
index 0000000..ec513c2
--- /dev/null
+++ b/sip/QtPrintSupport/qprintpreviewdialog.sip
@@ -0,0 +1,59 @@
+// qprintpreviewdialog.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPrintSupport Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_PrintPreviewDialog)
+
+class QPrintPreviewDialog : QDialog
+{
+%TypeHeaderCode
+#include <qprintpreviewdialog.h>
+%End
+
+public:
+    QPrintPreviewDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    QPrintPreviewDialog(QPrinter *printer, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QPrintPreviewDialog();
+    virtual void setVisible(bool visible);
+    virtual void open();
+    void open(SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtprintsupport_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipCpp->open(receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    QPrinter *printer();
+    virtual void done(int result);
+
+signals:
+    void paintRequested(QPrinter *printer);
+};
+
+%End
diff --git a/sip/QtPrintSupport/qprintpreviewwidget.sip b/sip/QtPrintSupport/qprintpreviewwidget.sip
new file mode 100644
index 0000000..da583e9
--- /dev/null
+++ b/sip/QtPrintSupport/qprintpreviewwidget.sip
@@ -0,0 +1,85 @@
+// qprintpreviewwidget.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtPrintSupport Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (PyQt_PrintPreviewWidget)
+
+class QPrintPreviewWidget : QWidget
+{
+%TypeHeaderCode
+#include <qprintpreviewwidget.h>
+%End
+
+public:
+    enum ViewMode
+    {
+        SinglePageView,
+        FacingPagesView,
+        AllPagesView,
+    };
+
+    enum ZoomMode
+    {
+        CustomZoom,
+        FitToWidth,
+        FitInView,
+    };
+
+    QPrintPreviewWidget(QPrinter *printer, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    QPrintPreviewWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QPrintPreviewWidget();
+    qreal zoomFactor() const;
+    QPrinter::Orientation orientation() const;
+    QPrintPreviewWidget::ViewMode viewMode() const;
+    QPrintPreviewWidget::ZoomMode zoomMode() const;
+    int currentPage() const;
+
+public slots:
+    virtual void setVisible(bool visible);
+    void print() /PyName=print_/;
+%If (Py_v3)
+    void print();
+%End
+    void zoomIn(qreal factor = 1.1);
+    void zoomOut(qreal factor = 1.1);
+    void setZoomFactor(qreal zoomFactor);
+    void setOrientation(QPrinter::Orientation orientation);
+    void setViewMode(QPrintPreviewWidget::ViewMode viewMode);
+    void setZoomMode(QPrintPreviewWidget::ZoomMode zoomMode);
+    void setCurrentPage(int pageNumber);
+    void fitToWidth();
+    void fitInView();
+    void setLandscapeOrientation();
+    void setPortraitOrientation();
+    void setSinglePageViewMode();
+    void setFacingPagesViewMode();
+    void setAllPagesViewMode();
+    void updatePreview();
+
+signals:
+    void paintRequested(QPrinter *printer);
+    void previewChanged();
+
+public:
+    int pageCount() const;
+};
+
+%End
diff --git a/sip/QtPrintSupport/qpyprintsupport_qlist.sip b/sip/QtPrintSupport/qpyprintsupport_qlist.sip
new file mode 100644
index 0000000..4f18344
--- /dev/null
+++ b/sip/QtPrintSupport/qpyprintsupport_qlist.sip
@@ -0,0 +1,121 @@
+// This is the SIP interface definition for the QList based mapped types
+// specific to the QtPrintSupport module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%MappedType QList<QPagedPaintDevice::PageSize>
+        /DocType="list-of-QPagedPaintDevice.PageSize"/
+{
+%TypeHeaderCode
+#include <qprinterinfo.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *eobj = sipConvertFromEnum(sipCpp->at(i),
+                sipType_QPagedPaintDevice_PageSize);
+
+        if (!eobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, eobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<QPagedPaintDevice::PageSize> *ql = new QList<QPagedPaintDevice::PageSize>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        if (!sipCanConvertToEnum(itm, sipType_QPagedPaintDevice_PageSize))
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'QPagedPaintDevice.PageSize' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        ql->append(
+                static_cast<QPagedPaintDevice::PageSize>(SIPLong_AsLong(itm)));
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = ql;
+
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtQml/QtQmlmod.sip b/sip/QtQml/QtQmlmod.sip
new file mode 100644
index 0000000..9a9ffdf
--- /dev/null
+++ b/sip/QtQml/QtQmlmod.sip
@@ -0,0 +1,71 @@
+// QtQmlmod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtQml, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtNetwork/QtNetworkmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qjsengine.sip
+%Include qjsvalue.sip
+%Include qjsvalueiterator.sip
+%Include qqmlabstracturlinterceptor.sip
+%Include qqmlapplicationengine.sip
+%Include qqmlcomponent.sip
+%Include qqmlcontext.sip
+%Include qqmlengine.sip
+%Include qqmlerror.sip
+%Include qqmlexpression.sip
+%Include qqmlextensionplugin.sip
+%Include qqmlfileselector.sip
+%Include qqmlincubator.sip
+%Include qqmllist.sip
+%Include qqmlnetworkaccessmanagerfactory.sip
+%Include qqmlparserstatus.sip
+%Include qqmlproperty.sip
+%Include qqmlpropertymap.sip
+%Include qqmlpropertyvaluesource.sip
+%Include qqmlscriptstring.sip
+%Include qmlattachedpropertiesobject.sip
+%Include qmlregistertype.sip
+%Include qpyqmllistproperty.sip
diff --git a/sip/QtQml/qjsengine.sip b/sip/QtQml/qjsengine.sip
new file mode 100644
index 0000000..e87826b
--- /dev/null
+++ b/sip/QtQml/qjsengine.sip
@@ -0,0 +1,94 @@
+// qjsengine.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QJSEngine : QObject
+{
+%TypeHeaderCode
+#include <qjsengine.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QQmlExpression, &sipType_QQmlExpression, -1, 1},
+    #if QT_VERSION >= 0x050200
+        {sipName_QQmlFileSelector, &sipType_QQmlFileSelector, -1, 2},
+    #else
+        {0, 0, -1, 2},
+    #endif
+        {sipName_QQmlContext, &sipType_QQmlContext, -1, 3},
+        {sipName_QQmlPropertyMap, &sipType_QQmlPropertyMap, -1, 4},
+        {sipName_QQmlComponent, &sipType_QQmlComponent, -1, 5},
+        {sipName_QQmlExtensionPlugin, &sipType_QQmlExtensionPlugin, -1, 6},
+        {sipName_QJSEngine, &sipType_QJSEngine, 7, -1},
+        {sipName_QQmlEngine, &sipType_QQmlEngine, 8, -1},
+    #if QT_VERSION >= 0x050100
+        {sipName_QQmlApplicationEngine, &sipType_QQmlApplicationEngine, -1, -1},
+    #else
+        {0, 0, -1, -1},
+    #endif
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    QJSEngine();
+    explicit QJSEngine(QObject *parent /TransferThis/);
+    virtual ~QJSEngine();
+    QJSValue globalObject() const;
+    QJSValue evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1) /ReleaseGIL/;
+    QJSValue newObject();
+    QJSValue newArray(uint length = 0);
+    QJSValue newQObject(QObject *object /Transfer/);
+    void collectGarbage();
+
+private:
+    QJSEngine(const QJSEngine &);
+};
+
+%ModuleHeaderCode
+#include "qpyqml_api.h"
+%End
+
+%PostInitialisationCode
+qpyqml_post_init(sipModuleDict);
+%End
diff --git a/sip/QtQml/qjsvalue.sip b/sip/QtQml/qjsvalue.sip
new file mode 100644
index 0000000..1e7a104
--- /dev/null
+++ b/sip/QtQml/qjsvalue.sip
@@ -0,0 +1,83 @@
+// qjsvalue.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+typedef QList<QJSValue> QJSValueList;
+
+class QJSValue
+{
+%TypeHeaderCode
+#include <qjsvalue.h>
+%End
+
+%ConvertToTypeCode
+if (!sipIsErr)
+    return qpyqml_canConvertTo_QJSValue(sipPy);
+
+return qpyqml_convertTo_QJSValue(sipPy, sipTransferObj, sipCppPtr, sipIsErr);
+%End
+
+public:
+    enum SpecialValue
+    {
+        NullValue,
+        UndefinedValue,
+    };
+
+    QJSValue(QJSValue::SpecialValue value /Constrained/ = QJSValue::UndefinedValue);
+    QJSValue(const QJSValue &other);
+    ~QJSValue();
+    bool isBool() const;
+    bool isNumber() const;
+    bool isNull() const;
+    bool isString() const;
+    bool isUndefined() const;
+    bool isVariant() const;
+    bool isQObject() const;
+    bool isObject() const;
+    bool isDate() const;
+    bool isRegExp() const;
+    bool isArray() const;
+    bool isError() const;
+    QString toString() const;
+    double toNumber() const;
+    qint32 toInt() const;
+    quint32 toUInt() const;
+    bool toBool() const;
+    QVariant toVariant() const;
+    QObject *toQObject() const;
+    QDateTime toDateTime() const;
+    bool equals(const QJSValue &other) const;
+    bool strictlyEquals(const QJSValue &other) const;
+    QJSValue prototype() const;
+    void setPrototype(const QJSValue &prototype);
+    QJSValue property(const QString &name) const;
+    void setProperty(const QString &name, const QJSValue &value);
+    bool hasProperty(const QString &name) const;
+    bool hasOwnProperty(const QString &name) const;
+    QJSValue property(quint32 arrayIndex) const;
+    void setProperty(quint32 arrayIndex, const QJSValue &value);
+    bool deleteProperty(const QString &name);
+    bool isCallable() const;
+    QJSValue call(const QJSValueList &args = QList<QJSValue>());
+    QJSValue callWithInstance(const QJSValue &instance, const QJSValueList &args = QList<QJSValue>());
+    QJSValue callAsConstructor(const QJSValueList &args = QList<QJSValue>());
+};
diff --git a/sip/QtQml/qjsvalueiterator.sip b/sip/QtQml/qjsvalueiterator.sip
new file mode 100644
index 0000000..15531c2
--- /dev/null
+++ b/sip/QtQml/qjsvalueiterator.sip
@@ -0,0 +1,39 @@
+// qjsvalueiterator.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QJSValueIterator
+{
+%TypeHeaderCode
+#include <qjsvalueiterator.h>
+%End
+
+public:
+    QJSValueIterator(const QJSValue &value);
+    ~QJSValueIterator();
+    bool hasNext() const;
+    bool next();
+    QString name() const;
+    QJSValue value() const;
+
+private:
+    QJSValueIterator(const QJSValueIterator &);
+};
diff --git a/sip/QtQml/qmlattachedpropertiesobject.sip b/sip/QtQml/qmlattachedpropertiesobject.sip
new file mode 100644
index 0000000..895e87b
--- /dev/null
+++ b/sip/QtQml/qmlattachedpropertiesobject.sip
@@ -0,0 +1,46 @@
+// This is the SIP specification of the qmlAttachedPropertiesObject() function.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleHeaderCode
+#include <qqml.h>
+%End
+
+
+QObject *qmlAttachedPropertiesObject(SIP_PYTYPE, QObject *object,
+        bool create = true);
+%MethodCode
+    QObject *proxy = qpyqml_find_proxy_for(a1);
+
+    if (!proxy)
+    {
+        sipError = sipErrorFail;
+    }
+    else
+    {
+        static QHash<PyTypeObject *, int> cache;
+
+        int idx = cache.value((PyTypeObject *)a0, -1);
+        const QMetaObject *mo = pyqt5_qtqml_get_qmetaobject((PyTypeObject *)a0);
+
+        sipRes = qmlAttachedPropertiesObject(&idx, proxy, mo, a2);
+
+        cache.insert((PyTypeObject *)a0, idx);
+    }
+%End
diff --git a/sip/QtQml/qmlregistertype.sip b/sip/QtQml/qmlregistertype.sip
new file mode 100644
index 0000000..fa1968a
--- /dev/null
+++ b/sip/QtQml/qmlregistertype.sip
@@ -0,0 +1,91 @@
+// This is the SIP specification of the qmlRegisterType() function.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleHeaderCode
+#include <qpyqml_api.h>
+%End
+
+
+%ModuleCode
+// Imports from QtCore.
+pyqt5_qtqml_get_qmetaobject_t pyqt5_qtqml_get_qmetaobject;
+%End
+
+
+%PostInitialisationCode
+// Imports from QtCore.
+pyqt5_qtqml_get_qmetaobject = (pyqt5_qtqml_get_qmetaobject_t)sipImportSymbol(
+        "pyqt5_get_qmetaobject");
+%End
+
+
+int qmlRegisterRevision(SIP_PYTYPE, int revision, const char *uri, int major,
+        int minor, SIP_PYTYPE attachedProperties = 0);
+%MethodCode
+    if ((sipRes = qpyqml_register_library_type((PyTypeObject *)a0, a2, a3, a4, 0, a1, (PyTypeObject *)a5)) < 0)
+        sipError = sipErrorFail;
+%End
+
+
+int qmlRegisterSingletonType(SIP_PYTYPE, const char *uri, int major, int minor,
+        const char *typeName, SIP_PYCALLABLE factory);
+%MethodCode
+    if ((sipRes = qpyqml_register_singleton_type((PyTypeObject *)a0, a1, a2, a3, a4, a5)) < 0)
+        sipError = sipErrorFail;
+%End
+
+
+int qmlRegisterType(SIP_PYTYPE, SIP_PYTYPE attachedProperties = 0);
+%MethodCode
+    if ((sipRes = qpyqml_register_type((PyTypeObject *)a0, (PyTypeObject *)a1)) < 0)
+        sipError = sipErrorFail;
+%End
+
+
+int qmlRegisterType(SIP_PYTYPE, const char *uri, int major, int minor,
+        const char *qmlName, SIP_PYTYPE attachedProperties = 0);
+%MethodCode
+    if ((sipRes = qpyqml_register_library_type((PyTypeObject *)a0, a1, a2, a3, a4, -1, (PyTypeObject *)a5)) < 0)
+        sipError = sipErrorFail;
+%End
+
+
+int qmlRegisterType(SIP_PYTYPE, int revision, const char *uri, int major,
+        int minor, const char *qmlName, SIP_PYTYPE attachedProperties = 0);
+%MethodCode
+    if ((sipRes = qpyqml_register_library_type((PyTypeObject *)a0, a2, a3, a4, a5, a1, (PyTypeObject *)a6)) < 0)
+        sipError = sipErrorFail;
+%End
+
+
+int qmlRegisterUncreatableType(SIP_PYTYPE, const char *uri, int major,
+        int minor, const char *qmlName, const QString &reason);
+%MethodCode
+    if ((sipRes = qpyqml_register_uncreatable_type((PyTypeObject *)a0, a1, a2, a3, a4, *a5, -1)) < 0)
+        sipError = sipErrorFail;
+%End
+
+
+int qmlRegisterUncreatableType(SIP_PYTYPE, int revision, const char *uri,
+        int major, int minor, const char *qmlName, const QString &reason);
+%MethodCode
+    if ((sipRes = qpyqml_register_uncreatable_type((PyTypeObject *)a0, a2, a3, a4, a5, *a6, a1)) < 0)
+        sipError = sipErrorFail;
+%End
diff --git a/sip/QtQml/qpyqmllistproperty.sip b/sip/QtQml/qpyqmllistproperty.sip
new file mode 100644
index 0000000..928da3d
--- /dev/null
+++ b/sip/QtQml/qpyqmllistproperty.sip
@@ -0,0 +1,74 @@
+// This is the SIP specification of the QQmlListProperty mapped type.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%MappedType QQmlListProperty<QObject> /DocType="QQmlListProperty"/
+{
+%TypeHeaderCode
+#include <QQmlListProperty>
+%End
+
+%TypeCode
+#if defined(SIP_USE_PYCAPSULE)
+extern "C" {
+static void qpyqml_QQmlListProperty_delete(PyObject *capsule)
+{
+    delete reinterpret_cast<QQmlListProperty<QObject> *>(PyCapsule_GetPointer(capsule, 0));
+}
+}
+#else
+extern "C" {
+static void qpyqml_QQmlListProperty_delete(void *ptr)
+{
+    delete reinterpret_cast<QQmlListProperty<QObject> *>(ptr);
+}
+}
+#endif
+%End
+
+%ConvertFromTypeCode
+#if defined(SIP_USE_PYCAPSULE)
+    return PyCapsule_New(sipCpp, 0, qpyqml_QQmlListProperty_delete);
+#else
+    return PyCObject_FromVoidPtr(sipCpp, qpyqml_QQmlListProperty_delete);
+#endif
+%End
+
+%ConvertToTypeCode
+    if (sipIsErr == NULL)
+    {
+#if defined(SIP_USE_PYCAPSULE)
+        return PyCapsule_CheckExact(sipPy);
+#else
+        return PyCObject_Check(sipPy);
+#endif
+    }
+
+#if defined(SIP_USE_PYCAPSULE)
+    *sipCppPtr = reinterpret_cast<QQmlListProperty<QObject> *>(
+            PyCapsule_GetPointer(sipPy, 0));
+#else
+    *sipCppPtr = reinterpret_cast<QQmlListProperty<QObject> *>(
+            PyCObject_AsVoidPtr(sipPy));
+#endif
+
+    // It isn't a temporary copy.
+    return 0;
+%End
+};
diff --git a/sip/QtQml/qqmlabstracturlinterceptor.sip b/sip/QtQml/qqmlabstracturlinterceptor.sip
new file mode 100644
index 0000000..e9fb45a
--- /dev/null
+++ b/sip/QtQml/qqmlabstracturlinterceptor.sip
@@ -0,0 +1,45 @@
+// qqmlabstracturlinterceptor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QQmlAbstractUrlInterceptor
+{
+%TypeHeaderCode
+#include <qqmlabstracturlinterceptor.h>
+%End
+
+public:
+    enum DataType
+    {
+        QmlFile,
+        JavaScriptFile,
+        QmldirFile,
+        UrlString,
+    };
+
+    QQmlAbstractUrlInterceptor();
+    virtual ~QQmlAbstractUrlInterceptor();
+    virtual QUrl intercept(const QUrl &path, QQmlAbstractUrlInterceptor::DataType type) = 0;
+};
+
+%End
diff --git a/sip/QtQml/qqmlapplicationengine.sip b/sip/QtQml/qqmlapplicationengine.sip
new file mode 100644
index 0000000..f6f15c9
--- /dev/null
+++ b/sip/QtQml/qqmlapplicationengine.sip
@@ -0,0 +1,50 @@
+// qqmlapplicationengine.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QQmlApplicationEngine : QQmlEngine
+{
+%TypeHeaderCode
+#include <qqmlapplicationengine.h>
+%End
+
+public:
+    QQmlApplicationEngine(QObject *parent /TransferThis/ = 0);
+    QQmlApplicationEngine(const QUrl &url, QObject *parent /TransferThis/ = 0);
+    QQmlApplicationEngine(const QString &filePath, QObject *parent /TransferThis/ = 0);
+    virtual ~QQmlApplicationEngine();
+    QList<QObject*> rootObjects();
+
+public slots:
+    void load(const QUrl &url) /ReleaseGIL/;
+    void load(const QString &filePath) /ReleaseGIL/;
+    void loadData(const QByteArray &data, const QUrl &url = QUrl()) /ReleaseGIL/;
+
+signals:
+    void objectCreated(QObject *object, const QUrl &url);
+
+private:
+    QQmlApplicationEngine(const QQmlApplicationEngine &);
+};
+
+%End
diff --git a/sip/QtQml/qqmlcomponent.sip b/sip/QtQml/qqmlcomponent.sip
new file mode 100644
index 0000000..8d36de3
--- /dev/null
+++ b/sip/QtQml/qqmlcomponent.sip
@@ -0,0 +1,77 @@
+// qqmlcomponent.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlComponent : QObject
+{
+%TypeHeaderCode
+#include <qqmlcomponent.h>
+%End
+
+public:
+    enum CompilationMode
+    {
+        PreferSynchronous,
+        Asynchronous,
+    };
+
+    QQmlComponent(QQmlEngine *, QObject *parent /TransferThis/ = 0);
+    QQmlComponent(QQmlEngine *, const QString &fileName, QObject *parent /TransferThis/ = 0);
+    QQmlComponent(QQmlEngine *, const QString &fileName, QQmlComponent::CompilationMode mode, QObject *parent /TransferThis/ = 0);
+    QQmlComponent(QQmlEngine *, const QUrl &url, QObject *parent /TransferThis/ = 0);
+    QQmlComponent(QQmlEngine *, const QUrl &url, QQmlComponent::CompilationMode mode, QObject *parent /TransferThis/ = 0);
+    QQmlComponent(QObject *parent /TransferThis/ = 0);
+    virtual ~QQmlComponent();
+
+    enum Status
+    {
+        Null,
+        Ready,
+        Loading,
+        Error,
+    };
+
+    QQmlComponent::Status status() const;
+    bool isNull() const;
+    bool isReady() const;
+    bool isError() const;
+    bool isLoading() const;
+    QList<QQmlError> errors() const;
+    qreal progress() const;
+    QUrl url() const;
+    virtual QObject *create(QQmlContext *context = 0);
+    virtual QObject *beginCreate(QQmlContext *);
+    virtual void completeCreate();
+    void create(QQmlIncubator &, QQmlContext *context = 0, QQmlContext *forContext = 0);
+    QQmlContext *creationContext() const;
+
+public slots:
+    void loadUrl(const QUrl &url);
+    void loadUrl(const QUrl &url, QQmlComponent::CompilationMode mode);
+    void setData(const QByteArray &, const QUrl &baseUrl);
+
+signals:
+    void statusChanged(QQmlComponent::Status);
+    void progressChanged(qreal);
+
+private:
+    QQmlComponent(const QQmlComponent &);
+};
diff --git a/sip/QtQml/qqmlcontext.sip b/sip/QtQml/qqmlcontext.sip
new file mode 100644
index 0000000..988b724
--- /dev/null
+++ b/sip/QtQml/qqmlcontext.sip
@@ -0,0 +1,48 @@
+// qqmlcontext.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlContext : QObject
+{
+%TypeHeaderCode
+#include <qqmlcontext.h>
+%End
+
+public:
+    QQmlContext(QQmlEngine *engine, QObject *parent /TransferThis/ = 0);
+    QQmlContext(QQmlContext *parentContext, QObject *parent /TransferThis/ = 0);
+    virtual ~QQmlContext();
+    bool isValid() const;
+    QQmlEngine *engine() const;
+    QQmlContext *parentContext() const;
+    QObject *contextObject() const;
+    void setContextObject(QObject *);
+    QVariant contextProperty(const QString &) const;
+    void setContextProperty(const QString &, QObject *);
+    void setContextProperty(const QString &, const QVariant &);
+    QString nameForObject(QObject *) const;
+    QUrl resolvedUrl(const QUrl &);
+    void setBaseUrl(const QUrl &);
+    QUrl baseUrl() const;
+
+private:
+    QQmlContext(const QQmlContext &);
+};
diff --git a/sip/QtQml/qqmlengine.sip b/sip/QtQml/qqmlengine.sip
new file mode 100644
index 0000000..67c5962
--- /dev/null
+++ b/sip/QtQml/qqmlengine.sip
@@ -0,0 +1,157 @@
+// qqmlengine.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qqmlengine.h>
+%End
+
+class QQmlImageProviderBase /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qqmlengine.h>
+%End
+
+public:
+    enum ImageType
+    {
+        Image,
+        Pixmap,
+        Texture,
+    };
+
+    enum Flag
+    {
+        ForceAsynchronousImageLoading,
+    };
+
+    typedef QFlags<QQmlImageProviderBase::Flag> Flags;
+    virtual ~QQmlImageProviderBase();
+    virtual QQmlImageProviderBase::ImageType imageType() const = 0;
+    virtual QFlags<QQmlImageProviderBase::Flag> flags() const = 0;
+
+private:
+    QQmlImageProviderBase();
+};
+
+QFlags<QQmlImageProviderBase::Flag> operator|(QQmlImageProviderBase::Flag f1, QFlags<QQmlImageProviderBase::Flag> f2);
+
+class QQmlEngine : QJSEngine
+{
+%TypeHeaderCode
+#include <qqmlengine.h>
+%End
+
+public:
+    QQmlEngine(QObject *parent /TransferThis/ = 0);
+    virtual ~QQmlEngine();
+    QQmlContext *rootContext() const;
+    void clearComponentCache();
+    void trimComponentCache();
+    QStringList importPathList() const;
+    void setImportPathList(const QStringList &paths);
+    void addImportPath(const QString &dir);
+    QStringList pluginPathList() const;
+    void setPluginPathList(const QStringList &paths);
+    void addPluginPath(const QString &dir);
+    bool addNamedBundle(const QString &name, const QString &fileName);
+    bool importPlugin(const QString &filePath, const QString &uri, QList<QQmlError> *errors /GetWrapper/);
+%MethodCode
+        int orig_size = (a2 ? a2->size() : 0);
+        
+        sipRes = sipCpp->importPlugin(*a0, *a1, a2);
+        
+        if (a2)
+        {
+            for (int i = a2->size(); i > orig_size; --i)
+            {
+                QQmlError *new_error = new QQmlError(a2->at(i - orig_size - 1));
+                PyObject *new_error_obj = sipConvertFromNewType(new_error, sipType_QQmlError, 0);
+                
+                if (!new_error_obj)
+                {
+                    delete new_error;
+                    sipError = sipErrorFail;
+                    break;
+                }
+                
+                if (PyList_Insert(a2Wrapper, 0, new_error_obj) < 0)
+                {
+                    Py_DECREF(new_error_obj);
+                    sipError = sipErrorFail;
+                    break;
+                }
+                
+                Py_DECREF(new_error_obj);
+            }
+        }
+%End
+
+    void setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory * /KeepReference/);
+    QQmlNetworkAccessManagerFactory *networkAccessManagerFactory() const;
+    QNetworkAccessManager *networkAccessManager() const;
+    void addImageProvider(const QString &id, QQmlImageProviderBase * /Transfer/);
+    QQmlImageProviderBase *imageProvider(const QString &id) const;
+    void removeImageProvider(const QString &id);
+    void setIncubationController(QQmlIncubationController * /KeepReference/);
+    QQmlIncubationController *incubationController() const;
+    void setOfflineStoragePath(const QString &dir);
+    QString offlineStoragePath() const;
+    QUrl baseUrl() const;
+    void setBaseUrl(const QUrl &);
+    bool outputWarningsToStandardError() const;
+    void setOutputWarningsToStandardError(bool);
+    static QQmlContext *contextForObject(const QObject *);
+    static void setContextForObject(QObject *, QQmlContext *);
+
+    enum ObjectOwnership
+    {
+        CppOwnership,
+        JavaScriptOwnership,
+    };
+
+    static void setObjectOwnership(QObject * /GetWrapper/, QQmlEngine::ObjectOwnership);
+%MethodCode
+        QQmlEngine::ObjectOwnership old = QQmlEngine::objectOwnership(a0);
+        
+        QQmlEngine::setObjectOwnership(a0, a1);
+        
+        if (old != a1 && !a0->parent())
+        {
+            if (old == QQmlEngine::CppOwnership)
+                sipTransferTo(a0Wrapper, Py_None);
+            else
+                sipTransferBack(a0Wrapper);
+        }
+%End
+
+    static QQmlEngine::ObjectOwnership objectOwnership(QObject *);
+
+protected:
+    virtual bool event(QEvent *);
+
+signals:
+    void quit();
+    void warnings(const QList<QQmlError> &warnings);
+
+private:
+    QQmlEngine(const QQmlEngine &);
+};
diff --git a/sip/QtQml/qqmlerror.sip b/sip/QtQml/qqmlerror.sip
new file mode 100644
index 0000000..7aadace
--- /dev/null
+++ b/sip/QtQml/qqmlerror.sip
@@ -0,0 +1,49 @@
+// qqmlerror.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlError
+{
+%TypeHeaderCode
+#include <qqmlerror.h>
+%End
+
+public:
+    QQmlError();
+    QQmlError(const QQmlError &);
+    ~QQmlError();
+    bool isValid() const;
+    QUrl url() const;
+    void setUrl(const QUrl &);
+    QString description() const;
+    void setDescription(const QString &);
+    int line() const;
+    void setLine(int);
+    int column() const;
+    void setColumn(int);
+    QString toString() const;
+%If (Qt_5_2_0 -)
+    QObject *object() const;
+%End
+%If (Qt_5_2_0 -)
+    void setObject(QObject *);
+%End
+};
diff --git a/sip/QtQml/qqmlexpression.sip b/sip/QtQml/qqmlexpression.sip
new file mode 100644
index 0000000..b13a944
--- /dev/null
+++ b/sip/QtQml/qqmlexpression.sip
@@ -0,0 +1,55 @@
+// qqmlexpression.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlExpression : QObject
+{
+%TypeHeaderCode
+#include <qqmlexpression.h>
+%End
+
+public:
+    QQmlExpression();
+    QQmlExpression(QQmlContext *, QObject *, const QString &, QObject *parent /TransferThis/ = 0);
+    QQmlExpression(const QQmlScriptString &, QQmlContext *context = 0, QObject *scope = 0, QObject *parent /TransferThis/ = 0);
+    virtual ~QQmlExpression();
+    QQmlEngine *engine() const;
+    QQmlContext *context() const;
+    QString expression() const;
+    void setExpression(const QString &);
+    bool notifyOnValueChanged() const;
+    void setNotifyOnValueChanged(bool);
+    QString sourceFile() const;
+    int lineNumber() const;
+    int columnNumber() const;
+    void setSourceLocation(const QString &fileName, int line, int column = 0);
+    QObject *scopeObject() const;
+    bool hasError() const;
+    void clearError();
+    QQmlError error() const;
+    QVariant evaluate(bool *valueIsUndefined = 0) /ReleaseGIL/;
+
+signals:
+    void valueChanged();
+
+private:
+    QQmlExpression(const QQmlExpression &);
+};
diff --git a/sip/QtQml/qqmlextensionplugin.sip b/sip/QtQml/qqmlextensionplugin.sip
new file mode 100644
index 0000000..8549432
--- /dev/null
+++ b/sip/QtQml/qqmlextensionplugin.sip
@@ -0,0 +1,40 @@
+// qqmlextensionplugin.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlExtensionPlugin : QObject
+{
+%TypeHeaderCode
+#include <qqmlextensionplugin.h>
+%End
+
+public:
+    explicit QQmlExtensionPlugin(QObject *parent /TransferThis/ = 0);
+    virtual ~QQmlExtensionPlugin();
+    virtual void registerTypes(const char *uri) = 0;
+    virtual void initializeEngine(QQmlEngine *engine, const char *uri);
+%If (Qt_5_1_0 -)
+    QUrl baseUrl() const;
+%End
+
+private:
+    QQmlExtensionPlugin(const QQmlExtensionPlugin &);
+};
diff --git a/sip/QtQml/qqmlfileselector.sip b/sip/QtQml/qqmlfileselector.sip
new file mode 100644
index 0000000..0fec03a
--- /dev/null
+++ b/sip/QtQml/qqmlfileselector.sip
@@ -0,0 +1,42 @@
+// qqmlfileselector.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QQmlFileSelector : QObject
+{
+%TypeHeaderCode
+#include <qqmlfileselector.h>
+%End
+
+public:
+    QQmlFileSelector(QQmlEngine *engine, QObject *parent /TransferThis/ = 0);
+    virtual ~QQmlFileSelector();
+    void setSelector(QFileSelector *selector);
+    void setExtraSelectors(QStringList &strings);
+    static QQmlFileSelector *get(QQmlEngine *);
+
+private:
+    QQmlFileSelector(const QQmlFileSelector &);
+};
+
+%End
diff --git a/sip/QtQml/qqmlincubator.sip b/sip/QtQml/qqmlincubator.sip
new file mode 100644
index 0000000..c5d9272
--- /dev/null
+++ b/sip/QtQml/qqmlincubator.sip
@@ -0,0 +1,84 @@
+// qqmlincubator.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlIncubator
+{
+%TypeHeaderCode
+#include <qqmlincubator.h>
+%End
+
+public:
+    enum IncubationMode
+    {
+        Asynchronous,
+        AsynchronousIfNested,
+        Synchronous,
+    };
+
+    enum Status
+    {
+        Null,
+        Ready,
+        Loading,
+        Error,
+    };
+
+    QQmlIncubator(QQmlIncubator::IncubationMode mode = QQmlIncubator::Asynchronous);
+    virtual ~QQmlIncubator();
+    void clear();
+    void forceCompletion();
+    bool isNull() const;
+    bool isReady() const;
+    bool isError() const;
+    bool isLoading() const;
+    QList<QQmlError> errors() const;
+    QQmlIncubator::IncubationMode incubationMode() const;
+    QQmlIncubator::Status status() const;
+    QObject *object() const /Factory/;
+
+protected:
+    virtual void statusChanged(QQmlIncubator::Status);
+    virtual void setInitialState(QObject *);
+
+private:
+    QQmlIncubator(const QQmlIncubator &);
+};
+
+class QQmlIncubationController
+{
+%TypeHeaderCode
+#include <qqmlincubator.h>
+%End
+
+public:
+    QQmlIncubationController();
+    virtual ~QQmlIncubationController();
+    QQmlEngine *engine() const;
+    int incubatingObjectCount() const;
+    void incubateFor(int msecs) /ReleaseGIL/;
+
+protected:
+    virtual void incubatingObjectCountChanged(int);
+
+private:
+    QQmlIncubationController(const QQmlIncubationController &);
+};
diff --git a/sip/QtQml/qqmllist.sip b/sip/QtQml/qqmllist.sip
new file mode 100644
index 0000000..144e61c
--- /dev/null
+++ b/sip/QtQml/qqmllist.sip
@@ -0,0 +1,47 @@
+// qqmllist.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlListReference
+{
+%TypeHeaderCode
+#include <qqmllist.h>
+%End
+
+public:
+    QQmlListReference();
+    QQmlListReference(QObject *, const char *property, QQmlEngine *engine = 0);
+    QQmlListReference(const QQmlListReference &);
+    ~QQmlListReference();
+    bool isValid() const;
+    QObject *object() const;
+    const QMetaObject *listElementType() const;
+    bool canAppend() const;
+    bool canAt() const;
+    bool canClear() const;
+    bool canCount() const;
+    bool isManipulable() const;
+    bool isReadable() const;
+    bool append(QObject *) const;
+    QObject *at(int) const;
+    bool clear() const;
+    int count() const;
+};
diff --git a/sip/QtQml/qqmlnetworkaccessmanagerfactory.sip b/sip/QtQml/qqmlnetworkaccessmanagerfactory.sip
new file mode 100644
index 0000000..b06ad24
--- /dev/null
+++ b/sip/QtQml/qqmlnetworkaccessmanagerfactory.sip
@@ -0,0 +1,32 @@
+// qqmlnetworkaccessmanagerfactory.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlNetworkAccessManagerFactory
+{
+%TypeHeaderCode
+#include <qqmlnetworkaccessmanagerfactory.h>
+%End
+
+public:
+    virtual ~QQmlNetworkAccessManagerFactory();
+    virtual QNetworkAccessManager *create(QObject *parent) = 0 /Factory/;
+};
diff --git a/sip/QtQml/qqmlparserstatus.sip b/sip/QtQml/qqmlparserstatus.sip
new file mode 100644
index 0000000..b08e351
--- /dev/null
+++ b/sip/QtQml/qqmlparserstatus.sip
@@ -0,0 +1,34 @@
+// qqmlparserstatus.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlParserStatus /Mixin,PyQtInterface="org.qt-project.Qt.QQmlParserStatus"/
+{
+%TypeHeaderCode
+#include <qqmlparserstatus.h>
+%End
+
+public:
+    QQmlParserStatus();
+    virtual ~QQmlParserStatus();
+    virtual void classBegin() = 0;
+    virtual void componentComplete() = 0;
+};
diff --git a/sip/QtQml/qqmlproperty.sip b/sip/QtQml/qqmlproperty.sip
new file mode 100644
index 0000000..da149f1
--- /dev/null
+++ b/sip/QtQml/qqmlproperty.sip
@@ -0,0 +1,120 @@
+// qqmlproperty.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlProperty
+{
+%TypeHeaderCode
+#include <qqmlproperty.h>
+%End
+
+public:
+    enum PropertyTypeCategory
+    {
+        InvalidCategory,
+        List,
+        Object,
+        Normal,
+    };
+
+    enum Type
+    {
+        Invalid,
+        Property,
+        SignalProperty,
+    };
+
+    QQmlProperty();
+    QQmlProperty(QObject *);
+    QQmlProperty(QObject *, QQmlContext *);
+    QQmlProperty(QObject *, QQmlEngine *);
+    QQmlProperty(QObject *, const QString &);
+    QQmlProperty(QObject *, const QString &, QQmlContext *);
+    QQmlProperty(QObject *, const QString &, QQmlEngine *);
+    QQmlProperty(const QQmlProperty &);
+    ~QQmlProperty();
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+
+    bool operator==(const QQmlProperty &) const;
+    QQmlProperty::Type type() const;
+    bool isValid() const;
+    bool isProperty() const;
+    bool isSignalProperty() const;
+    int propertyType() const;
+    QQmlProperty::PropertyTypeCategory propertyTypeCategory() const;
+    const char *propertyTypeName() const;
+    QString name() const;
+    QVariant read() const;
+    static QVariant read(const QObject *, const QString &);
+    static QVariant read(const QObject *, const QString &, QQmlContext *);
+    static QVariant read(const QObject *, const QString &, QQmlEngine *);
+    bool write(const QVariant &) const;
+    static bool write(QObject *, const QString &, const QVariant &);
+    static bool write(QObject *, const QString &, const QVariant &, QQmlContext *);
+    static bool write(QObject *, const QString &, const QVariant &, QQmlEngine *);
+    bool reset() const;
+    bool hasNotifySignal() const;
+    bool needsNotifySignal() const;
+    bool connectNotifySignal(SIP_PYOBJECT slot /DocType="slot"/) const;
+%MethodCode
+        QObject *receiver;
+        QByteArray slot;
+        
+        if ((sipError = pyqt5_qtqml_get_pyqtslot_parts(a0, &receiver, slot)) == sipErrorNone)
+        {
+            sipRes = sipCpp->connectNotifySignal(receiver, slot.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    bool connectNotifySignal(QObject *dest, int method) const;
+    bool isWritable() const;
+    bool isDesignable() const;
+    bool isResettable() const;
+    QObject *object() const;
+    int index() const;
+    QMetaProperty property() const;
+    QMetaMethod method() const;
+};
+
+typedef QList<QQmlProperty> QQmlProperties;
+
+%ModuleHeaderCode
+// Imports from QtCore.
+typedef sipErrorState (*pyqt5_qtqml_get_pyqtslot_parts_t)(PyObject *, QObject **, QByteArray &);
+extern pyqt5_qtqml_get_pyqtslot_parts_t pyqt5_qtqml_get_pyqtslot_parts;
+%End
+
+%ModuleCode
+// Imports from QtCore.
+pyqt5_qtqml_get_pyqtslot_parts_t pyqt5_qtqml_get_pyqtslot_parts;
+%End
+
+%PostInitialisationCode
+// Imports from QtCore.
+pyqt5_qtqml_get_pyqtslot_parts = (pyqt5_qtqml_get_pyqtslot_parts_t)sipImportSymbol("pyqt5_get_pyqtslot_parts");
+%End
diff --git a/sip/QtQml/qqmlpropertymap.sip b/sip/QtQml/qqmlpropertymap.sip
new file mode 100644
index 0000000..e266a51
--- /dev/null
+++ b/sip/QtQml/qqmlpropertymap.sip
@@ -0,0 +1,50 @@
+// qqmlpropertymap.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlPropertyMap : QObject
+{
+%TypeHeaderCode
+#include <qqmlpropertymap.h>
+%End
+
+public:
+    explicit QQmlPropertyMap(QObject *parent /TransferThis/ = 0);
+    virtual ~QQmlPropertyMap();
+    QVariant value(const QString &key) const;
+    void insert(const QString &key, const QVariant &value);
+    void clear(const QString &key);
+    QStringList keys() const;
+    int count() const;
+    int size() const /__len__/;
+    bool isEmpty() const;
+    bool contains(const QString &key) const;
+    QVariant operator[](const QString &key) const;
+
+signals:
+    void valueChanged(const QString &key, const QVariant &value);
+
+protected:
+    virtual QVariant updateValue(const QString &key, const QVariant &input);
+
+private:
+    QQmlPropertyMap(const QQmlPropertyMap &);
+};
diff --git a/sip/QtQml/qqmlpropertyvaluesource.sip b/sip/QtQml/qqmlpropertyvaluesource.sip
new file mode 100644
index 0000000..1c60a20
--- /dev/null
+++ b/sip/QtQml/qqmlpropertyvaluesource.sip
@@ -0,0 +1,33 @@
+// qqmlpropertyvaluesource.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlPropertyValueSource /Mixin,PyQtInterface="org.qt-project.Qt.QQmlPropertyValueSource"/
+{
+%TypeHeaderCode
+#include <qqmlpropertyvaluesource.h>
+%End
+
+public:
+    QQmlPropertyValueSource();
+    virtual ~QQmlPropertyValueSource();
+    virtual void setTarget(const QQmlProperty &) = 0;
+};
diff --git a/sip/QtQml/qqmlscriptstring.sip b/sip/QtQml/qqmlscriptstring.sip
new file mode 100644
index 0000000..a2bf98c
--- /dev/null
+++ b/sip/QtQml/qqmlscriptstring.sip
@@ -0,0 +1,39 @@
+// qqmlscriptstring.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQml Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQmlScriptString
+{
+%TypeHeaderCode
+#include <qqmlscriptstring.h>
+%End
+
+public:
+    QQmlScriptString();
+    QQmlScriptString(const QQmlScriptString &);
+    ~QQmlScriptString();
+    bool isEmpty() const;
+    bool isUndefinedLiteral() const;
+    bool isNullLiteral() const;
+    QString stringLiteral() const;
+    qreal numberLiteral(bool *ok) const;
+    bool booleanLiteral(bool *ok) const;
+};
diff --git a/sip/QtQuick/QtQuickmod.sip b/sip/QtQuick/QtQuickmod.sip
new file mode 100644
index 0000000..9e7a108
--- /dev/null
+++ b/sip/QtQuick/QtQuickmod.sip
@@ -0,0 +1,66 @@
+// QtQuickmod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtQuick, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtGui/QtGuimod.sip
+%Import QtQml/QtQmlmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qquickimageprovider.sip
+%Include qquickitem.sip
+%Include qquickpainteditem.sip
+%Include qquicktextdocument.sip
+%Include qquickview.sip
+%Include qquickwindow.sip
+%Include qsgflatcolormaterial.sip
+%Include qquickframebufferobject.sip
+%Include qsggeometry.sip
+%Include qsgmaterial.sip
+%Include qsgnode.sip
+%Include qsgsimplerectnode.sip
+%Include qsgsimpletexturenode.sip
+%Include qsgtexture.sip
+%Include qsgtexturematerial.sip
+%Include qsgtextureprovider.sip
+%Include qsgvertexcolormaterial.sip
diff --git a/sip/QtQuick/qquickframebufferobject.sip b/sip/QtQuick/qquickframebufferobject.sip
new file mode 100644
index 0000000..eed50f6
--- /dev/null
+++ b/sip/QtQuick/qquickframebufferobject.sip
@@ -0,0 +1,62 @@
+// qquickframebufferobject.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QQuickFramebufferObject : QQuickItem
+{
+%TypeHeaderCode
+#include <qquickframebufferobject.h>
+%End
+
+public:
+    class Renderer
+    {
+%TypeHeaderCode
+#include <qquickframebufferobject.h>
+%End
+
+    protected:
+        Renderer();
+        virtual ~Renderer();
+        virtual void render() = 0;
+        virtual QOpenGLFramebufferObject *createFramebufferObject(const QSize &size);
+        virtual void synchronize(QQuickFramebufferObject *);
+        QOpenGLFramebufferObject *framebufferObject() const;
+        void update();
+        void invalidateFramebufferObject();
+    };
+
+    QQuickFramebufferObject(QQuickItem *parent /TransferThis/ = 0);
+    bool textureFollowsItemSize() const;
+    void setTextureFollowsItemSize(bool follows);
+    virtual QQuickFramebufferObject::Renderer *createRenderer() const = 0 /Factory/;
+
+protected:
+    virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
+    virtual QSGNode *updatePaintNode(QSGNode *, QQuickItem::UpdatePaintNodeData *);
+
+signals:
+    void textureFollowsItemSizeChanged(bool);
+};
+
+%End
diff --git a/sip/QtQuick/qquickimageprovider.sip b/sip/QtQuick/qquickimageprovider.sip
new file mode 100644
index 0000000..89de2ab
--- /dev/null
+++ b/sip/QtQuick/qquickimageprovider.sip
@@ -0,0 +1,52 @@
+// qquickimageprovider.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQuickTextureFactory : QObject
+{
+%TypeHeaderCode
+#include <qquickimageprovider.h>
+%End
+
+public:
+    QQuickTextureFactory();
+    virtual ~QQuickTextureFactory();
+    virtual QSGTexture *createTexture(QQuickWindow *window) const = 0 /Factory/;
+    virtual QSize textureSize() const = 0;
+    virtual int textureByteCount() const = 0;
+    virtual QImage image() const;
+};
+
+class QQuickImageProvider : QQmlImageProviderBase
+{
+%TypeHeaderCode
+#include <qquickimageprovider.h>
+%End
+
+public:
+    QQuickImageProvider(QQmlImageProviderBase::ImageType type, QFlags<QQmlImageProviderBase::Flag> flags = 0);
+    virtual ~QQuickImageProvider();
+    virtual QQmlImageProviderBase::ImageType imageType() const;
+    virtual QFlags<QQmlImageProviderBase::Flag> flags() const;
+    virtual QImage requestImage(const QString &id, QSize *size /Out/, const QSize &requestedSize);
+    virtual QPixmap requestPixmap(const QString &id, QSize *size /Out/, const QSize &requestedSize);
+    virtual QQuickTextureFactory *requestTexture(const QString &id, QSize *size /Out/, const QSize &requestedSize) /Factory/;
+};
diff --git a/sip/QtQuick/qquickitem.sip b/sip/QtQuick/qquickitem.sip
new file mode 100644
index 0000000..9ef8cdd
--- /dev/null
+++ b/sip/QtQuick/qquickitem.sip
@@ -0,0 +1,259 @@
+// qquickitem.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qquickitem.h>
+%End
+
+class QQuickItem : QObject, QQmlParserStatus /ExportDerived/
+{
+%TypeHeaderCode
+#include <qquickitem.h>
+%End
+
+public:
+    enum Flag
+    {
+        ItemClipsChildrenToShape,
+        ItemAcceptsInputMethod,
+        ItemIsFocusScope,
+        ItemHasContents,
+        ItemAcceptsDrops,
+    };
+
+    typedef QFlags<QQuickItem::Flag> Flags;
+
+    enum ItemChange
+    {
+        ItemChildAddedChange,
+        ItemChildRemovedChange,
+        ItemSceneChange,
+        ItemVisibleHasChanged,
+        ItemParentHasChanged,
+        ItemOpacityHasChanged,
+        ItemActiveFocusHasChanged,
+        ItemRotationHasChanged,
+%If (Qt_5_3_0 -)
+        ItemAntialiasingHasChanged,
+%End
+    };
+
+    struct ItemChangeData
+    {
+%TypeHeaderCode
+#include <qquickitem.h>
+%End
+
+        ItemChangeData(QQuickItem *v);
+        ItemChangeData(QQuickWindow *v);
+        ItemChangeData(qreal v /Constrained/);
+        ItemChangeData(bool v /Constrained/);
+        QQuickItem *item;
+        QQuickWindow *window;
+        qreal realValue;
+        bool boolValue;
+    };
+
+    enum TransformOrigin
+    {
+        TopLeft,
+        Top,
+        TopRight,
+        Left,
+        Center,
+        Right,
+        BottomLeft,
+        Bottom,
+        BottomRight,
+    };
+
+    QQuickItem(QQuickItem *parent /TransferThis/ = 0);
+    virtual ~QQuickItem();
+    QQuickWindow *window() const;
+    QQuickItem *parentItem() const;
+    void setParentItem(QQuickItem *parent);
+    void stackBefore(const QQuickItem *);
+    void stackAfter(const QQuickItem *);
+    QRectF childrenRect();
+    QList<QQuickItem*> childItems() const;
+    bool clip() const;
+    void setClip(bool);
+    QString state() const;
+    void setState(const QString &);
+    qreal baselineOffset() const;
+    void setBaselineOffset(qreal);
+    qreal x() const;
+    qreal y() const;
+    void setX(qreal);
+    void setY(qreal);
+    qreal width() const;
+    void setWidth(qreal);
+    void resetWidth();
+    void setImplicitWidth(qreal);
+    qreal implicitWidth() const;
+    qreal height() const;
+    void setHeight(qreal);
+    void resetHeight();
+    void setImplicitHeight(qreal);
+    qreal implicitHeight() const;
+    QQuickItem::TransformOrigin transformOrigin() const;
+    void setTransformOrigin(QQuickItem::TransformOrigin);
+    qreal z() const;
+    void setZ(qreal);
+    qreal rotation() const;
+    void setRotation(qreal);
+    qreal scale() const;
+    void setScale(qreal);
+    qreal opacity() const;
+    void setOpacity(qreal);
+    bool isVisible() const;
+    void setVisible(bool);
+    bool isEnabled() const;
+    void setEnabled(bool);
+    bool smooth() const;
+    void setSmooth(bool);
+    bool antialiasing() const;
+    void setAntialiasing(bool);
+    QFlags<QQuickItem::Flag> flags() const;
+    void setFlag(QQuickItem::Flag flag, bool enabled = true);
+    void setFlags(QFlags<QQuickItem::Flag> flags);
+    bool hasActiveFocus() const;
+    bool hasFocus() const;
+    void setFocus(bool);
+    bool isFocusScope() const;
+    QQuickItem *scopedFocusItem() const;
+    Qt::MouseButtons acceptedMouseButtons() const;
+    void setAcceptedMouseButtons(Qt::MouseButtons buttons);
+    bool acceptHoverEvents() const;
+    void setAcceptHoverEvents(bool enabled);
+    QCursor cursor() const;
+    void setCursor(const QCursor &cursor);
+    void unsetCursor();
+    void grabMouse();
+    void ungrabMouse();
+    bool keepMouseGrab() const;
+    void setKeepMouseGrab(bool);
+    bool filtersChildMouseEvents() const;
+    void setFiltersChildMouseEvents(bool filter);
+    void grabTouchPoints(const QVector<int> &ids);
+    void ungrabTouchPoints();
+    bool keepTouchGrab() const;
+    void setKeepTouchGrab(bool);
+    virtual bool contains(const QPointF &point) const;
+    QPointF mapToItem(const QQuickItem *item, const QPointF &point) const;
+    QPointF mapToScene(const QPointF &point) const;
+    QRectF mapRectToItem(const QQuickItem *item, const QRectF &rect) const;
+    QRectF mapRectToScene(const QRectF &rect) const;
+    QPointF mapFromItem(const QQuickItem *item, const QPointF &point) const;
+    QPointF mapFromScene(const QPointF &point) const;
+    QRectF mapRectFromItem(const QQuickItem *item, const QRectF &rect) const;
+    QRectF mapRectFromScene(const QRectF &rect) const;
+    void polish();
+    void forceActiveFocus();
+    QQuickItem *childAt(qreal x, qreal y) const;
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
+
+    struct UpdatePaintNodeData
+    {
+%TypeHeaderCode
+#include <qquickitem.h>
+%End
+
+        QSGTransformNode *transformNode;
+
+    private:
+        UpdatePaintNodeData();
+    };
+
+    virtual bool isTextureProvider() const;
+    virtual QSGTextureProvider *textureProvider() const;
+
+public slots:
+    void update() /ReleaseGIL/;
+
+protected:
+    virtual bool event(QEvent *);
+    bool isComponentComplete() const;
+    virtual void itemChange(QQuickItem::ItemChange, const QQuickItem::ItemChangeData &);
+    void updateInputMethod(Qt::InputMethodQueries queries = Qt::ImQueryInput);
+    bool widthValid() const;
+    bool heightValid() const;
+    virtual void classBegin();
+    virtual void componentComplete();
+    virtual void keyPressEvent(QKeyEvent *event);
+    virtual void keyReleaseEvent(QKeyEvent *event);
+    virtual void inputMethodEvent(QInputMethodEvent *);
+    virtual void focusInEvent(QFocusEvent *);
+    virtual void focusOutEvent(QFocusEvent *);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
+    virtual void mouseDoubleClickEvent(QMouseEvent *event);
+    virtual void mouseUngrabEvent();
+    virtual void touchUngrabEvent();
+    virtual void wheelEvent(QWheelEvent *event);
+    virtual void touchEvent(QTouchEvent *event);
+    virtual void hoverEnterEvent(QHoverEvent *event);
+    virtual void hoverMoveEvent(QHoverEvent *event);
+    virtual void hoverLeaveEvent(QHoverEvent *event);
+    virtual void dragEnterEvent(QDragEnterEvent *);
+    virtual void dragMoveEvent(QDragMoveEvent *);
+    virtual void dragLeaveEvent(QDragLeaveEvent *);
+    virtual void dropEvent(QDropEvent *);
+    virtual bool childMouseEventFilter(QQuickItem *, QEvent *);
+    virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
+    virtual QSGNode *updatePaintNode(QSGNode *, QQuickItem::UpdatePaintNodeData *);
+    virtual void releaseResources();
+    virtual void updatePolish();
+
+public:
+%If (Qt_5_1_0 -)
+    bool activeFocusOnTab() const;
+%End
+%If (Qt_5_1_0 -)
+    void setActiveFocusOnTab(bool);
+%End
+%If (Qt_5_1_0 -)
+    void setFocus(bool focus, Qt::FocusReason reason);
+%End
+%If (Qt_5_1_0 -)
+    void forceActiveFocus(Qt::FocusReason reason);
+%End
+%If (Qt_5_1_0 -)
+    QQuickItem *nextItemInFocusChain(bool forward = true);
+%End
+
+signals:
+%If (Qt_5_1_0 -)
+    void windowChanged(QQuickWindow *window);
+%End
+
+public:
+%If (Qt_5_3_0 -)
+    void resetAntialiasing();
+%End
+
+private:
+    QQuickItem(const QQuickItem &);
+};
+
+QFlags<QQuickItem::Flag> operator|(QQuickItem::Flag f1, QFlags<QQuickItem::Flag> f2);
diff --git a/sip/QtQuick/qquickpainteditem.sip b/sip/QtQuick/qquickpainteditem.sip
new file mode 100644
index 0000000..a2ce7f7
--- /dev/null
+++ b/sip/QtQuick/qquickpainteditem.sip
@@ -0,0 +1,85 @@
+// qquickpainteditem.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qquickpainteditem.h>
+%End
+
+class QQuickPaintedItem : QQuickItem /ExportDerived/
+{
+%TypeHeaderCode
+#include <qquickpainteditem.h>
+%End
+
+public:
+    QQuickPaintedItem(QQuickItem *parent /TransferThis/ = 0);
+    virtual ~QQuickPaintedItem();
+
+    enum RenderTarget
+    {
+        Image,
+        FramebufferObject,
+        InvertedYFramebufferObject,
+    };
+
+    enum PerformanceHint
+    {
+        FastFBOResizing,
+    };
+
+    typedef QFlags<QQuickPaintedItem::PerformanceHint> PerformanceHints;
+    void update(const QRect &rect = QRect());
+    bool opaquePainting() const;
+    void setOpaquePainting(bool opaque);
+    bool antialiasing() const;
+    void setAntialiasing(bool enable);
+    bool mipmap() const;
+    void setMipmap(bool enable);
+    QFlags<QQuickPaintedItem::PerformanceHint> performanceHints() const;
+    void setPerformanceHint(QQuickPaintedItem::PerformanceHint hint, bool enabled = true);
+    void setPerformanceHints(QFlags<QQuickPaintedItem::PerformanceHint> hints);
+    QRectF contentsBoundingRect() const;
+    QSize contentsSize() const;
+    void setContentsSize(const QSize &);
+    void resetContentsSize();
+    qreal contentsScale() const;
+    void setContentsScale(qreal);
+    QColor fillColor() const;
+    void setFillColor(const QColor &);
+    QQuickPaintedItem::RenderTarget renderTarget() const;
+    void setRenderTarget(QQuickPaintedItem::RenderTarget target);
+    virtual void paint(QPainter *painter) = 0;
+
+signals:
+    void fillColorChanged();
+    void contentsSizeChanged();
+    void contentsScaleChanged();
+    void renderTargetChanged();
+
+protected:
+    virtual QSGNode *updatePaintNode(QSGNode *, QQuickItem::UpdatePaintNodeData *);
+
+private:
+    QQuickPaintedItem(const QQuickPaintedItem &);
+};
+
+QFlags<QQuickPaintedItem::PerformanceHint> operator|(QQuickPaintedItem::PerformanceHint f1, QFlags<QQuickPaintedItem::PerformanceHint> f2);
diff --git a/sip/QtQuick/qquicktextdocument.sip b/sip/QtQuick/qquicktextdocument.sip
new file mode 100644
index 0000000..ebd2ac3
--- /dev/null
+++ b/sip/QtQuick/qquicktextdocument.sip
@@ -0,0 +1,39 @@
+// qquicktextdocument.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QQuickTextDocument : QObject
+{
+%TypeHeaderCode
+#include <qquicktextdocument.h>
+%End
+
+public:
+    QQuickTextDocument(QQuickItem *parent /TransferThis/);
+    QTextDocument *textDocument() const;
+
+private:
+    QQuickTextDocument(const QQuickTextDocument &);
+};
+
+%End
diff --git a/sip/QtQuick/qquickview.sip b/sip/QtQuick/qquickview.sip
new file mode 100644
index 0000000..ccb5d8f
--- /dev/null
+++ b/sip/QtQuick/qquickview.sip
@@ -0,0 +1,77 @@
+// qquickview.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQuickView : QQuickWindow
+{
+%TypeHeaderCode
+#include <qquickview.h>
+%End
+
+public:
+    explicit QQuickView(QWindow *parent /TransferThis/ = 0);
+    QQuickView(QQmlEngine *engine, QWindow *parent /TransferThis/);
+    QQuickView(const QUrl &source, QWindow *parent /TransferThis/ = 0);
+    virtual ~QQuickView();
+    QUrl source() const;
+    QQmlEngine *engine() const;
+    QQmlContext *rootContext() const;
+    QQuickItem *rootObject() const;
+
+    enum ResizeMode
+    {
+        SizeViewToRootObject,
+        SizeRootObjectToView,
+    };
+
+    QQuickView::ResizeMode resizeMode() const;
+    void setResizeMode(QQuickView::ResizeMode);
+
+    enum Status
+    {
+        Null,
+        Ready,
+        Loading,
+        Error,
+    };
+
+    QQuickView::Status status() const;
+    QList<QQmlError> errors() const;
+    QSize initialSize() const;
+
+public slots:
+    void setSource(const QUrl &) /ReleaseGIL/;
+
+signals:
+    void statusChanged(QQuickView::Status);
+
+protected:
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void timerEvent(QTimerEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void keyReleaseEvent(QKeyEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+
+private:
+    QQuickView(const QQuickView &);
+};
diff --git a/sip/QtQuick/qquickwindow.sip b/sip/QtQuick/qquickwindow.sip
new file mode 100644
index 0000000..75b05f9
--- /dev/null
+++ b/sip/QtQuick/qquickwindow.sip
@@ -0,0 +1,197 @@
+// qquickwindow.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QQuickWindow : QWindow
+{
+%TypeHeaderCode
+#include <qquickwindow.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+    #if QT_VERSION >= 0x050100
+        {sipName_QQuickTextDocument, &sipType_QQuickTextDocument, -1, 1},
+    #else
+        {0, 0, -1, 1},
+    #endif
+        {sipName_QQuickWindow, &sipType_QQuickWindow, 6, 2},
+        {sipName_QQuickItem, &sipType_QQuickItem, 7, 3},
+        {sipName_QQuickTextureFactory, &sipType_QQuickTextureFactory, -1, 4},
+        {sipName_QSGTextureProvider, &sipType_QSGTextureProvider, -1, 5},
+        {sipName_QSGTexture, &sipType_QSGTexture, 9, -1},
+        {sipName_QQuickView, &sipType_QQuickView, -1, -1},
+        {sipName_QQuickPaintedItem, &sipType_QQuickPaintedItem, -1, 8},
+    #if QT_VERSION >= 0x050200
+        {sipName_QQuickFramebufferObject, &sipType_QQuickFramebufferObject, -1, -1},
+    #else
+        {0, 0, -1, -1},
+    #endif
+        {sipName_QSGDynamicTexture, &sipType_QSGDynamicTexture, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    enum CreateTextureOption
+    {
+        TextureHasAlphaChannel,
+        TextureHasMipmaps,
+        TextureOwnsGLTexture,
+%If (Qt_5_2_0 -)
+        TextureCanUseAtlas,
+%End
+    };
+
+    typedef QFlags<QQuickWindow::CreateTextureOption> CreateTextureOptions;
+    QQuickWindow(QWindow *parent /TransferThis/ = 0);
+    virtual ~QQuickWindow();
+    QQuickItem *contentItem() const;
+    QQuickItem *activeFocusItem() const;
+    virtual QObject *focusObject() const;
+    QQuickItem *mouseGrabberItem() const;
+    bool sendEvent(QQuickItem *, QEvent *);
+    QImage grabWindow();
+    void setRenderTarget(QOpenGLFramebufferObject *fbo);
+    QOpenGLFramebufferObject *renderTarget() const;
+    void setRenderTarget(uint fboId, const QSize &size);
+    uint renderTargetId() const;
+    QSize renderTargetSize() const;
+    QQmlIncubationController *incubationController() const;
+    QSGTexture *createTextureFromImage(const QImage &image) const /Factory/;
+%If (Qt_5_2_0 -)
+    QSGTexture *createTextureFromImage(const QImage &image, QFlags<QQuickWindow::CreateTextureOption> options) const /Factory/;
+%End
+    QSGTexture *createTextureFromId(uint id, const QSize &size, QFlags<QQuickWindow::CreateTextureOption> options = (QQuickWindow::CreateTextureOption)0u) const /Factory/;
+    void setClearBeforeRendering(bool enabled);
+    bool clearBeforeRendering() const;
+    void setColor(const QColor &color);
+    QColor color() const;
+    void setPersistentOpenGLContext(bool persistent);
+    bool isPersistentOpenGLContext() const;
+    void setPersistentSceneGraph(bool persistent);
+    bool isPersistentSceneGraph() const;
+    QOpenGLContext *openglContext() const;
+
+signals:
+    void frameSwapped();
+    void sceneGraphInitialized();
+    void sceneGraphInvalidated();
+    void beforeSynchronizing();
+    void beforeRendering();
+    void afterRendering();
+    void colorChanged(const QColor &);
+
+public slots:
+    void update();
+    void releaseResources();
+
+protected:
+    virtual void exposeEvent(QExposeEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void showEvent(QShowEvent *);
+    virtual void hideEvent(QHideEvent *);
+    virtual void focusInEvent(QFocusEvent *);
+    virtual void focusOutEvent(QFocusEvent *);
+    virtual bool event(QEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void keyReleaseEvent(QKeyEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void mouseDoubleClickEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void wheelEvent(QWheelEvent *);
+
+public:
+%If (Qt_5_1_0 -)
+    static bool hasDefaultAlphaBuffer();
+%End
+%If (Qt_5_1_0 -)
+    static void setDefaultAlphaBuffer(bool useAlpha);
+%End
+
+signals:
+%If (Qt_5_1_0 -)
+    void activeFocusItemChanged();
+%End
+
+public:
+%If (Qt_5_2_0 -)
+    void resetOpenGLState();
+%End
+%If (Qt_5_3_0 -)
+
+    enum SceneGraphError
+    {
+        ContextNotAvailable,
+    };
+
+%End
+
+signals:
+%If (Qt_5_3_0 -)
+    void openglContextCreated(QOpenGLContext *context);
+%End
+%If (Qt_5_3_0 -)
+    void afterSynchronizing();
+%End
+%If (Qt_5_3_0 -)
+    void afterAnimating();
+%End
+%If (Qt_5_3_0 -)
+    void sceneGraphAboutToStop();
+%End
+%If (Qt_5_3_0 -)
+    void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message);
+%End
+
+private:
+    QQuickWindow(const QQuickWindow &);
+};
+
+%ModuleHeaderCode
+#include "qpyquick_api.h"
+%End
+
+%PostInitialisationCode
+qpyquick_post_init();
+%End
diff --git a/sip/QtQuick/qsgflatcolormaterial.sip b/sip/QtQuick/qsgflatcolormaterial.sip
new file mode 100644
index 0000000..5fb405e
--- /dev/null
+++ b/sip/QtQuick/qsgflatcolormaterial.sip
@@ -0,0 +1,36 @@
+// qsgflatcolormaterial.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSGFlatColorMaterial : QSGMaterial
+{
+%TypeHeaderCode
+#include <qsgflatcolormaterial.h>
+%End
+
+public:
+    QSGFlatColorMaterial();
+    virtual QSGMaterialType *type() const;
+    virtual QSGMaterialShader *createShader() const /Factory/;
+    void setColor(const QColor &color);
+    const QColor &color() const;
+    virtual int compare(const QSGMaterial *other) const;
+};
diff --git a/sip/QtQuick/qsggeometry.sip b/sip/QtQuick/qsggeometry.sip
new file mode 100644
index 0000000..55c04dd
--- /dev/null
+++ b/sip/QtQuick/qsggeometry.sip
@@ -0,0 +1,342 @@
+// qsggeometry.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSGGeometry /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qsggeometry.h>
+%End
+
+public:
+// Convenient primitives and drawing modes.
+enum /NoScope/
+{
+    GL_BYTE,
+%If (PyQt_Desktop_OpenGL)
+    GL_DOUBLE,
+%End
+    GL_FLOAT,
+    GL_INT
+};
+
+enum /NoScope/
+{
+    GL_POINTS,
+    GL_LINES,
+    GL_LINE_LOOP,
+    GL_LINE_STRIP,
+    GL_TRIANGLES,
+    GL_TRIANGLE_STRIP,
+    GL_TRIANGLE_FAN
+};
+
+    struct Attribute
+    {
+%TypeHeaderCode
+#include <qsggeometry.h>
+%End
+
+        int position;
+        int tupleSize;
+        int type;
+        uint isVertexCoordinate;
+        static QSGGeometry::Attribute create(int pos, int tupleSize, int primitiveType, bool isPosition = false) /Factory/;
+    };
+
+    struct AttributeSet /NoDefaultCtors/
+    {
+%TypeHeaderCode
+#include <qsggeometry.h>
+#include <QVector>
+%End
+
+        AttributeSet(SIP_PYOBJECT attributes /DocType="sequence-of-QSGGeometry.Attribute"/, int stride = 0);
+%MethodCode
+            PyObject *iter = PyObject_GetIter(a0);
+            
+            if (!iter
+            #if PY_MAJOR_VERSION < 3
+                || PyString_Check(a0)
+            #endif
+                || PyUnicode_Check(a0))
+            {
+                Py_XDECREF(iter);
+                PyErr_SetString(PyExc_TypeError, "iterable object expected");
+                sipError = sipErrorContinue;
+            }
+            else
+            {
+                QVector<QSGGeometry::Attribute> attrs;
+                int stride = 0;
+            
+                for (SIP_SSIZE_T i = 0; ; ++i)
+                {
+                    PyErr_Clear();
+                    PyObject *itm = PyIter_Next(iter);
+            
+                    if (!itm)
+                    {
+                        if (PyErr_Occurred())
+                            sipError = sipErrorFail;
+            
+                        break;
+                    }
+            
+                    int state, is_err = 0;
+                    QSGGeometry::Attribute *attr;
+            
+                    attr = reinterpret_cast<QSGGeometry::Attribute *>(
+                            sipForceConvertToType(itm, sipType_QSGGeometry_Attribute, 0,
+                            SIP_NOT_NONE, &state, &is_err));
+            
+                    if (is_err)
+                    {
+                        PyErr_Format(PyExc_TypeError,
+                                "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'QSGGeometry.Attribute' is expected",
+                                i, Py_TYPE(itm)->tp_name);
+            
+                        Py_DECREF(itm);
+                        sipError = sipErrorFail;
+            
+                        break;
+                    }
+            
+                    // Calculate the stride if there no explicit one.
+                    if (a1 <= 0)
+                    {
+                        int size;
+            
+                        switch (attr->type)
+                        {
+                        case GL_BYTE:
+                            size = sizeof (qint8);
+                            break;
+            
+            #if defined(SIPFeature_PyQt_Desktop_OpenGL)
+            #if GL_DOUBLE != GL_FLOAT
+                        case GL_DOUBLE:
+                            size = sizeof (double);
+                            break;
+            #endif
+            #endif
+            
+                        case GL_FLOAT:
+                            size = sizeof (float);
+                            break;
+            
+                        case GL_INT:
+                            size = sizeof (qint32);
+                            break;
+            
+                        default:
+                            size = 0;
+                        }
+            
+                        if (!size)
+                        {
+                            PyErr_Format(PyExc_TypeError,
+                                    "index " SIP_SSIZE_T_FORMAT " has an unsupported primitive type",
+                                    i);
+            
+                            sipReleaseType(attr, sipType_QSGGeometry_Attribute, state);
+                            Py_DECREF(itm);
+                            sipError = sipErrorFail;
+            
+                            break;
+                        }
+            
+                        stride += attr->tupleSize * size;
+                    }
+            
+                    attrs.append(*attr);
+            
+                    sipReleaseType(attr, sipType_QSGGeometry_Attribute, state);
+                    Py_DECREF(itm);
+                }
+            
+                Py_DECREF(iter);
+            
+                if (sipError == sipErrorNone)
+                {
+                    if (attrs.isEmpty())
+                    {
+                        PyErr_SetString(PyExc_TypeError, "no attributes defined");
+                        sipError = sipErrorFail;
+                    }
+                    else
+                    {
+                        PyObject *bytes = SIPBytes_FromStringAndSize(
+                                reinterpret_cast<char *>(attrs.data()),
+                                sizeof (QSGGeometry::Attribute) * attrs.size());
+            
+                        if (!bytes)
+                        {
+                            sipError = sipErrorFail;
+                        }
+                        else
+                        {
+                            sipCpp = new QSGGeometry::AttributeSet;
+            
+                            sipCpp->count = attrs.size();
+                            sipCpp->stride = (a1 > 0 ? a1 : stride);
+                            sipCpp->attributes = reinterpret_cast<QSGGeometry::Attribute *>(
+                                    SIPBytes_AS_STRING(bytes));
+            
+                            sipSelf->user = bytes;
+                        }
+                    }
+                }
+            }
+%End
+
+        int count;
+        int stride;
+        const QSGGeometry::Attribute *attributes /DocType="read-only-array-of-QSGGeometry.Attribute"/ {
+%GetCode
+            sipPy = sipConvertToTypedArray((void *)sipCpp->attributes,
+                    sipType_QSGGeometry_Attribute, "iiiI", sizeof (QSGGeometry::Attribute),
+                    sipCpp->count, SIP_READ_ONLY);
+%End
+
+%SetCode
+            sipErr = 1;
+            PyErr_SetString(PyExc_ValueError, "array is read-only");
+%End
+
+        };
+    };
+
+    struct Point2D
+    {
+%TypeHeaderCode
+#include <qsggeometry.h>
+%End
+
+        float x;
+        float y;
+        void set(float nx, float ny);
+    };
+
+    struct TexturedPoint2D
+    {
+%TypeHeaderCode
+#include <qsggeometry.h>
+%End
+
+        float x;
+        float y;
+        float tx;
+        float ty;
+        void set(float nx, float ny, float ntx, float nty);
+    };
+
+    struct ColoredPoint2D
+    {
+%TypeHeaderCode
+#include <qsggeometry.h>
+%End
+
+        float x;
+        float y;
+        unsigned char r /PyInt/;
+        unsigned char g /PyInt/;
+        unsigned char b /PyInt/;
+        unsigned char a /PyInt/;
+        void set(float nx, float ny, uchar nr /PyInt/, uchar ng /PyInt/, uchar nb /PyInt/, uchar na /PyInt/);
+    };
+
+    static const QSGGeometry::AttributeSet &defaultAttributes_Point2D() /NoCopy/;
+    static const QSGGeometry::AttributeSet &defaultAttributes_TexturedPoint2D() /NoCopy/;
+    static const QSGGeometry::AttributeSet &defaultAttributes_ColoredPoint2D() /NoCopy/;
+
+    enum DataPattern
+    {
+        AlwaysUploadPattern,
+        StreamPattern,
+        DynamicPattern,
+        StaticPattern,
+    };
+
+    QSGGeometry(const QSGGeometry::AttributeSet &attribs /KeepReference/, int vertexCount, int indexCount = 0, int indexType = GL_UNSIGNED_SHORT);
+    virtual ~QSGGeometry();
+    void setDrawingMode(GLenum mode);
+    GLenum drawingMode() const;
+    void allocate(int vertexCount, int indexCount = 0);
+    int vertexCount() const;
+    void *vertexData();
+    int indexType() const;
+    int indexCount() const;
+    void *indexData();
+    int attributeCount() const;
+    SIP_PYOBJECT attributes() const /DocType="read-only-array-of-QSGGeometry.Attribute"/;
+%MethodCode
+        sipRes = sipConvertToTypedArray((void *)sipCpp->attributes(),
+                sipType_QSGGeometry_Attribute, "iiiI", sizeof (QSGGeometry::Attribute),
+                sipCpp->attributeCount(), SIP_READ_ONLY);
+%End
+
+    int sizeOfVertex() const;
+    static void updateRectGeometry(QSGGeometry *g, const QRectF &rect);
+    static void updateTexturedRectGeometry(QSGGeometry *g, const QRectF &rect, const QRectF &sourceRect);
+    void setIndexDataPattern(QSGGeometry::DataPattern p);
+    QSGGeometry::DataPattern indexDataPattern() const;
+    void setVertexDataPattern(QSGGeometry::DataPattern p);
+    QSGGeometry::DataPattern vertexDataPattern() const;
+    void markIndexDataDirty();
+    void markVertexDataDirty();
+    float lineWidth() const;
+    void setLineWidth(float w);
+    SIP_PYOBJECT indexDataAsUInt() /DocType="array-of-unsigned-int"/;
+%MethodCode
+        sipRes = sipConvertToArray(sipCpp->indexDataAsUInt(), "I",
+                sipCpp->indexCount(), 0);
+%End
+
+    SIP_PYOBJECT indexDataAsUShort() /DocType="array-of-unsigned-short"/;
+%MethodCode
+        sipRes = sipConvertToArray(sipCpp->indexDataAsUShort(), "H",
+                sipCpp->indexCount(), 0);
+%End
+
+    SIP_PYOBJECT vertexDataAsPoint2D() /DocType="array-of-QSGGeometry.Point2D"/;
+%MethodCode
+        sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsPoint2D(),
+                sipType_QSGGeometry_Point2D, "ff", sizeof (QSGGeometry::Point2D),
+                sipCpp->vertexCount(), 0);
+%End
+
+    SIP_PYOBJECT vertexDataAsTexturedPoint2D() /DocType="array-of-QSGGeometry.TexturedPoint2D"/;
+%MethodCode
+        sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsTexturedPoint2D(),
+                sipType_QSGGeometry_TexturedPoint2D, "ffff",
+                sizeof (QSGGeometry::TexturedPoint2D), sipCpp->vertexCount(), 0);
+%End
+
+    SIP_PYOBJECT vertexDataAsColoredPoint2D() /DocType="array-of-QSGGeometry.ColoredPoint2D"/;
+%MethodCode
+        sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsColoredPoint2D(),
+                sipType_QSGGeometry_ColoredPoint2D, "ffbbbb",
+                sizeof (QSGGeometry::ColoredPoint2D), sipCpp->vertexCount(), 0);
+%End
+
+    int sizeOfIndex() const;
+};
diff --git a/sip/QtQuick/qsgmaterial.sip b/sip/QtQuick/qsgmaterial.sip
new file mode 100644
index 0000000..080b49e
--- /dev/null
+++ b/sip/QtQuick/qsgmaterial.sip
@@ -0,0 +1,228 @@
+// qsgmaterial.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qsgmaterial.h>
+%End
+
+class QSGMaterialShader
+{
+%TypeHeaderCode
+#include <qsgmaterial.h>
+%End
+
+public:
+    class RenderState
+    {
+%TypeHeaderCode
+#include <qsgmaterial.h>
+%End
+
+    public:
+        enum DirtyState
+        {
+            DirtyMatrix,
+            DirtyOpacity,
+        };
+
+        typedef QFlags<QSGMaterialShader::RenderState::DirtyState> DirtyStates;
+        QFlags<QSGMaterialShader::RenderState::DirtyState> dirtyStates() const;
+        bool isMatrixDirty() const;
+        bool isOpacityDirty() const;
+        float opacity() const;
+        QMatrix4x4 combinedMatrix() const;
+        QMatrix4x4 modelViewMatrix() const;
+        QRect viewportRect() const;
+        QRect deviceRect() const;
+        float determinant() const;
+        QOpenGLContext *context() const;
+%If (Qt_5_1_0 -)
+        QMatrix4x4 projectionMatrix() const;
+%End
+%If (Qt_5_1_0 -)
+        float devicePixelRatio() const;
+%End
+    };
+
+    QSGMaterialShader();
+    virtual ~QSGMaterialShader();
+    virtual void activate();
+    virtual void deactivate();
+    virtual void updateState(const QSGMaterialShader::RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial);
+    virtual SIP_PYOBJECT attributeNames() const = 0 /DocType="list-of-str"/ [const char * const * ()];
+%MethodCode
+        const char * const *names = sipCpp->attributeNames();
+        
+        SIP_SSIZE_T nr_names = 0;
+        
+        if (names)
+            while (names[nr_names])
+                ++nr_names;
+            
+        sipRes = PyList_New(nr_names);
+            
+        if (!sipRes)
+            sipIsErr = 1;
+        else
+            for (SIP_SSIZE_T i = 0; i < nr_names; ++i)
+            {
+                const char *name = names[i];
+                PyObject *el;
+        
+        #if PY_MAJOR_VERSION >= 3
+                el = PyUnicode_DecodeASCII(name, strlen(name), 0);
+        #else
+                el = PyString_FromString(name);
+        #endif
+                
+                if (!el)
+                {
+                    Py_DECREF(sipRes);
+                    sipIsErr = 1;
+                    break;
+                }
+        
+                PyList_SET_ITEM(sipRes, i, el);
+            }
+%End
+
+%VirtualCatcherCode
+        char **result = 0;
+        PyObject *names = sipCallMethod(&sipIsErr, sipMethod, "");
+        
+        if (names)
+        {
+            if (PyList_Check(names))
+            {
+                // Note that the converted value will leak.  This shouldn't matter
+                // because the data should be static anyway.
+                result = new char *[PyList_GET_SIZE(names) + 1];
+                result[PyList_GET_SIZE(names)] = 0;
+        
+                for (SIP_SSIZE_T i = 0; i < PyList_GET_SIZE(names); ++i)
+                {
+                    char *name;
+                    PyObject *el = PyList_GET_ITEM(names, i);
+                    
+        #if PY_MAJOR_VERSION >= 3
+                    PyObject *name_obj = PyUnicode_AsASCIIString(el);
+        
+                    name = (name_obj ? PyBytes_AS_STRING(name_obj) : 0);
+        #else
+                    name = PyString_AsString(el);
+        #endif
+        
+                    if (!name)
+                    {
+                        result[i] = 0;
+                        sipBadCatcherResult(sipMethod);
+                        sipIsErr = 1;
+                        break;
+                    }
+        
+                    char *name_copy = new char[strlen(name) + 1];
+                    strcpy(name_copy, name);
+                    result[i] = name_copy;
+        
+        #if PY_MAJOR_VERSION >= 3
+                    Py_DECREF(name_obj);
+        #endif
+                }
+            }
+            else
+            {
+                sipBadCatcherResult(sipMethod);
+                sipIsErr = 1;
+            }
+            
+            Py_DECREF(names);
+        }
+%End
+
+    QOpenGLShaderProgram *program();
+
+protected:
+    virtual void compile();
+    virtual void initialize();
+%If (Qt_5_2_0 -)
+    virtual const char *vertexShader() const;
+%End
+%If (- Qt_5_2_0)
+    virtual const char *vertexShader() const = 0;
+%End
+%If (Qt_5_2_0 -)
+    virtual const char *fragmentShader() const;
+%End
+%If (- Qt_5_2_0)
+    virtual const char *fragmentShader() const = 0;
+%End
+%If (Qt_5_2_0 -)
+    void setShaderSourceFile(QFlags<QOpenGLShader::ShaderTypeBit> type, const QString &sourceFile);
+%End
+%If (Qt_5_2_0 -)
+    void setShaderSourceFiles(QFlags<QOpenGLShader::ShaderTypeBit> type, const QStringList &sourceFiles);
+%End
+
+private:
+    QSGMaterialShader(const QSGMaterialShader &);
+};
+
+struct QSGMaterialType
+{
+%TypeHeaderCode
+#include <qsgmaterial.h>
+%End
+};
+
+class QSGMaterial /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qsgmaterial.h>
+%End
+
+public:
+    enum Flag
+    {
+        Blending,
+        RequiresDeterminant,
+        RequiresFullMatrixExceptTranslate,
+        RequiresFullMatrix,
+%If (Qt_5_2_0 -)
+        CustomCompileStep,
+%End
+    };
+
+    typedef QFlags<QSGMaterial::Flag> Flags;
+    QSGMaterial();
+    virtual ~QSGMaterial();
+    virtual QSGMaterialType *type() const = 0;
+    virtual QSGMaterialShader *createShader() const = 0 /Factory/;
+    virtual int compare(const QSGMaterial *other) const;
+    QFlags<QSGMaterial::Flag> flags() const;
+    void setFlag(QFlags<QSGMaterial::Flag> flags, bool enabled = true);
+
+private:
+    QSGMaterial(const QSGMaterial &);
+};
+
+QFlags<QSGMaterial::Flag> operator|(QSGMaterial::Flag f1, QFlags<QSGMaterial::Flag> f2);
+QFlags<QSGMaterialShader::RenderState::DirtyState> operator|(QSGMaterialShader::RenderState::DirtyState f1, QFlags<QSGMaterialShader::RenderState::DirtyState> f2);
diff --git a/sip/QtQuick/qsgnode.sip b/sip/QtQuick/qsgnode.sip
new file mode 100644
index 0000000..c7185f0
--- /dev/null
+++ b/sip/QtQuick/qsgnode.sip
@@ -0,0 +1,347 @@
+// qsgnode.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qsgnode.h>
+%End
+
+class QSGNode /NoDefaultCtors,Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qsgnode.h>
+%End
+
+%TypeCode
+static sipErrorState qsgnode_handle_flags(QSGNode *node, PyObject *self, QSGNode::Flags old_flags)
+{
+    QSGNode::Flags new_flags = node->flags();
+    
+    if (node->parent())
+    {
+        if ((old_flags & QSGNode::OwnedByParent) != (new_flags & QSGNode::OwnedByParent))
+        {
+            if (old_flags & QSGNode::OwnedByParent)
+            {
+                sipTransferBack(self);
+            }
+            else
+            {
+                PyObject *parent = sipConvertFromType(node->parent(), sipType_QSGNode, 0);
+
+                if (!parent)
+                    return sipErrorFail;
+
+                sipTransferTo(self, parent);
+                Py_DECREF(parent);
+            }
+        }
+    }
+    
+    QSGNode::NodeType ntype = node->type();
+        
+    if (ntype == QSGNode::BasicNodeType || ntype == QSGNode::GeometryNodeType || ntype == QSGNode::ClipNodeType)
+    {
+        QSGBasicGeometryNode *bg_node = (QSGBasicGeometryNode *)node;
+            
+        if (bg_node->geometry())
+        {
+            if ((old_flags & QSGNode::OwnsGeometry) != (new_flags & QSGNode::OwnsGeometry))
+            {
+                PyObject *geom = sipConvertFromType(bg_node->geometry(), sipType_QSGGeometry, 0);
+
+                if (!geom)
+                    return sipErrorFail;
+
+                if (old_flags & QSGNode::OwnsGeometry)
+                    sipTransferBack(geom);
+                else
+                    sipTransferTo(geom, self);
+
+                Py_DECREF(geom);
+            }
+        }
+    }
+    
+    if (ntype == QSGNode::GeometryNodeType)
+    {
+        QSGGeometryNode *g_node = (QSGGeometryNode *)node;
+            
+        if (g_node->material())
+        {
+            if ((old_flags & QSGNode::OwnsMaterial) != (new_flags & QSGNode::OwnsMaterial))
+            {
+                PyObject *mat = sipConvertFromType(g_node->material(), sipType_QSGMaterial, 0);
+
+                if (!mat)
+                    return sipErrorFail;
+
+                if (old_flags & QSGNode::OwnsMaterial)
+                    sipTransferBack(mat);
+                else
+                    sipTransferTo(mat, self);
+
+                Py_DECREF(mat);
+            }
+        }
+
+        if (g_node->opaqueMaterial())
+        {
+            if ((old_flags & QSGNode::OwnsOpaqueMaterial) != (new_flags & QSGNode::OwnsOpaqueMaterial))
+            {
+                PyObject *omat = sipConvertFromType(g_node->opaqueMaterial(), sipType_QSGMaterial, 0);
+
+                if (!omat)
+                    return sipErrorFail;
+
+                if (old_flags & QSGNode::OwnsOpaqueMaterial)
+                    sipTransferBack(omat);
+                else
+                    sipTransferTo(omat, self);
+
+                Py_DECREF(omat);
+            }
+        }
+    }
+
+    return sipErrorNone;
+}
+%End
+
+%ConvertToSubClassCode
+    switch (sipCpp->type())
+    {
+    case QSGNode::BasicNodeType:
+        sipType = sipType_QSGBasicGeometryNode;
+        break;
+    
+    case QSGNode::GeometryNodeType:
+        sipType = sipType_QSGGeometryNode;
+        break;
+    
+    case QSGNode::TransformNodeType:
+        sipType = sipType_QSGClipNode;
+        break;
+    
+    case QSGNode::ClipNodeType:
+        sipType = sipType_QSGTransformNode;
+        break;
+    
+    case QSGNode::OpacityNodeType:
+        sipType = sipType_QSGOpacityNode;
+        break;
+    
+    default:
+        sipType = 0;
+    }
+%End
+
+public:
+    enum NodeType
+    {
+        BasicNodeType,
+        GeometryNodeType,
+        TransformNodeType,
+        ClipNodeType,
+        OpacityNodeType,
+    };
+
+    enum Flag
+    {
+        OwnedByParent,
+        UsePreprocess,
+        OwnsGeometry,
+        OwnsMaterial,
+        OwnsOpaqueMaterial,
+    };
+
+    typedef QFlags<QSGNode::Flag> Flags;
+
+    enum DirtyStateBit
+    {
+        DirtyMatrix,
+        DirtyNodeAdded,
+        DirtyNodeRemoved,
+        DirtyGeometry,
+        DirtyMaterial,
+        DirtyOpacity,
+    };
+
+    typedef QFlags<QSGNode::DirtyStateBit> DirtyState;
+    QSGNode();
+    virtual ~QSGNode();
+    QSGNode *parent() const;
+    void removeChildNode(QSGNode *node);
+    void removeAllChildNodes();
+    void prependChildNode(QSGNode *node /GetWrapper/);
+%MethodCode
+        sipCpp->prependChildNode(a0);
+        
+        if (a0->flags() & QSGNode::OwnedByParent)
+            sipTransferTo(a0Wrapper, sipSelf);
+%End
+
+    void appendChildNode(QSGNode *node /GetWrapper/);
+%MethodCode
+        sipCpp->appendChildNode(a0);
+        
+        if (a0->flags() & QSGNode::OwnedByParent)
+            sipTransferTo(a0Wrapper, sipSelf);
+%End
+
+    void insertChildNodeBefore(QSGNode *node /GetWrapper/, QSGNode *before);
+%MethodCode
+        sipCpp->insertChildNodeBefore(a0, a1);
+        
+        if (a0->flags() & QSGNode::OwnedByParent)
+            sipTransferTo(a0Wrapper, sipSelf);
+%End
+
+    void insertChildNodeAfter(QSGNode *node /GetWrapper/, QSGNode *after);
+%MethodCode
+        sipCpp->insertChildNodeAfter(a0, a1);
+        
+        if (a0->flags() & QSGNode::OwnedByParent)
+            sipTransferTo(a0Wrapper, sipSelf);
+%End
+
+    int childCount() const /__len__/;
+    QSGNode *childAtIndex(int i) const;
+    QSGNode *firstChild() const;
+    QSGNode *lastChild() const;
+    QSGNode *nextSibling() const;
+    QSGNode *previousSibling() const;
+    QSGNode::NodeType type() const;
+    void markDirty(QFlags<QSGNode::DirtyStateBit> bits);
+    virtual bool isSubtreeBlocked() const;
+    QFlags<QSGNode::Flag> flags() const;
+    void setFlag(QSGNode::Flag, bool enabled = true);
+%MethodCode
+        QSGNode::Flags old_flags = sipCpp->flags();
+        
+        sipCpp->setFlag(a0, a1);
+        
+        sipError = qsgnode_handle_flags(sipCpp, sipSelf, old_flags);
+%End
+
+    void setFlags(QFlags<QSGNode::Flag>, bool enabled = true);
+%MethodCode
+        QSGNode::Flags old_flags = sipCpp->flags();
+        
+        sipCpp->setFlags(*a0, a1);
+        
+        sipError = qsgnode_handle_flags(sipCpp, sipSelf, old_flags);
+%End
+
+    virtual void preprocess();
+};
+
+class QSGBasicGeometryNode : QSGNode /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qsgnode.h>
+%End
+
+public:
+    virtual ~QSGBasicGeometryNode();
+    void setGeometry(QSGGeometry *geometry /GetWrapper/);
+%MethodCode
+        sipCpp->setGeometry(a0);
+        
+        if (sipCpp->flags() & QSGNode::OwnsGeometry)
+            sipTransferTo(a0Wrapper, sipSelf);
+%End
+
+    QSGGeometry *geometry();
+};
+
+class QSGGeometryNode : QSGBasicGeometryNode /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qsgnode.h>
+%End
+
+public:
+    QSGGeometryNode();
+    virtual ~QSGGeometryNode();
+    void setMaterial(QSGMaterial *material /GetWrapper/);
+%MethodCode
+        sipCpp->setMaterial(a0);
+        
+        if (sipCpp->flags() & QSGNode::OwnsMaterial)
+            sipTransferTo(a0Wrapper, sipSelf);
+%End
+
+    QSGMaterial *material() const;
+    void setOpaqueMaterial(QSGMaterial *material /GetWrapper/);
+%MethodCode
+        sipCpp->setOpaqueMaterial(a0);
+        
+        if (sipCpp->flags() & QSGNode::OwnsOpaqueMaterial)
+            sipTransferTo(a0Wrapper, sipSelf);
+%End
+
+    QSGMaterial *opaqueMaterial() const;
+};
+
+class QSGClipNode : QSGBasicGeometryNode /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qsgnode.h>
+%End
+
+public:
+    QSGClipNode();
+    virtual ~QSGClipNode();
+    void setIsRectangular(bool rectHint);
+    bool isRectangular() const;
+    void setClipRect(const QRectF &);
+    QRectF clipRect() const;
+};
+
+class QSGTransformNode : QSGNode /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qsgnode.h>
+%End
+
+public:
+    QSGTransformNode();
+    virtual ~QSGTransformNode();
+    void setMatrix(const QMatrix4x4 &matrix);
+    const QMatrix4x4 &matrix() const;
+};
+
+class QSGOpacityNode : QSGNode /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qsgnode.h>
+%End
+
+public:
+    QSGOpacityNode();
+    virtual ~QSGOpacityNode();
+    void setOpacity(qreal opacity);
+    qreal opacity() const;
+};
+
+QFlags<QSGNode::DirtyStateBit> operator|(QSGNode::DirtyStateBit f1, QFlags<QSGNode::DirtyStateBit> f2);
+QFlags<QSGNode::Flag> operator|(QSGNode::Flag f1, QFlags<QSGNode::Flag> f2);
diff --git a/sip/QtQuick/qsgsimplerectnode.sip b/sip/QtQuick/qsgsimplerectnode.sip
new file mode 100644
index 0000000..41f109a
--- /dev/null
+++ b/sip/QtQuick/qsgsimplerectnode.sip
@@ -0,0 +1,37 @@
+// qsgsimplerectnode.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSGSimpleRectNode : QSGGeometryNode /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qsgsimplerectnode.h>
+%End
+
+public:
+    QSGSimpleRectNode(const QRectF &rect, const QColor &color);
+    QSGSimpleRectNode();
+    void setRect(const QRectF &rect);
+    void setRect(qreal x, qreal y, qreal w, qreal h);
+    QRectF rect() const;
+    void setColor(const QColor &color);
+    QColor color() const;
+};
diff --git a/sip/QtQuick/qsgsimpletexturenode.sip b/sip/QtQuick/qsgsimpletexturenode.sip
new file mode 100644
index 0000000..24c17bb
--- /dev/null
+++ b/sip/QtQuick/qsgsimpletexturenode.sip
@@ -0,0 +1,65 @@
+// qsgsimpletexturenode.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qsgsimpletexturenode.h>
+%End
+
+class QSGSimpleTextureNode : QSGGeometryNode /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qsgsimpletexturenode.h>
+%End
+
+public:
+    QSGSimpleTextureNode();
+    void setRect(const QRectF &rect);
+    void setRect(qreal x, qreal y, qreal w, qreal h);
+    QRectF rect() const;
+    void setTexture(QSGTexture *texture);
+    QSGTexture *texture() const;
+    void setFiltering(QSGTexture::Filtering filtering);
+    QSGTexture::Filtering filtering() const;
+%If (Qt_5_2_0 -)
+
+    enum TextureCoordinatesTransformFlag
+    {
+        NoTransform,
+        MirrorHorizontally,
+        MirrorVertically,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+    typedef QFlags<QSGSimpleTextureNode::TextureCoordinatesTransformFlag> TextureCoordinatesTransformMode;
+%End
+%If (Qt_5_2_0 -)
+    void setTextureCoordinatesTransform(QFlags<QSGSimpleTextureNode::TextureCoordinatesTransformFlag> mode);
+%End
+%If (Qt_5_2_0 -)
+    QFlags<QSGSimpleTextureNode::TextureCoordinatesTransformFlag> textureCoordinatesTransform() const;
+%End
+};
+
+%If (Qt_5_2_0 -)
+QFlags<QSGSimpleTextureNode::TextureCoordinatesTransformFlag> operator|(QSGSimpleTextureNode::TextureCoordinatesTransformFlag f1, QFlags<QSGSimpleTextureNode::TextureCoordinatesTransformFlag> f2);
+%End
diff --git a/sip/QtQuick/qsgtexture.sip b/sip/QtQuick/qsgtexture.sip
new file mode 100644
index 0000000..088973e
--- /dev/null
+++ b/sip/QtQuick/qsgtexture.sip
@@ -0,0 +1,74 @@
+// qsgtexture.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSGTexture : QObject
+{
+%TypeHeaderCode
+#include <qsgtexture.h>
+%End
+
+public:
+    QSGTexture();
+    virtual ~QSGTexture();
+
+    enum WrapMode
+    {
+        Repeat,
+        ClampToEdge,
+    };
+
+    enum Filtering
+    {
+        None,
+        Nearest,
+        Linear,
+    };
+
+    virtual int textureId() const = 0;
+    virtual QSize textureSize() const = 0;
+    virtual bool hasAlphaChannel() const = 0;
+    virtual bool hasMipmaps() const = 0;
+    virtual QRectF normalizedTextureSubRect() const;
+    virtual bool isAtlasTexture() const;
+    virtual QSGTexture *removedFromAtlas() const;
+    virtual void bind() = 0;
+    void updateBindOptions(bool force = false);
+    void setMipmapFiltering(QSGTexture::Filtering filter);
+    QSGTexture::Filtering mipmapFiltering() const;
+    void setFiltering(QSGTexture::Filtering filter);
+    QSGTexture::Filtering filtering() const;
+    void setHorizontalWrapMode(QSGTexture::WrapMode hwrap);
+    QSGTexture::WrapMode horizontalWrapMode() const;
+    void setVerticalWrapMode(QSGTexture::WrapMode vwrap);
+    QSGTexture::WrapMode verticalWrapMode() const;
+    QRectF convertToNormalizedSourceRect(const QRectF &rect) const;
+};
+
+class QSGDynamicTexture : QSGTexture
+{
+%TypeHeaderCode
+#include <qsgtexture.h>
+%End
+
+public:
+    virtual bool updateTexture() = 0;
+};
diff --git a/sip/QtQuick/qsgtexturematerial.sip b/sip/QtQuick/qsgtexturematerial.sip
new file mode 100644
index 0000000..287e59c
--- /dev/null
+++ b/sip/QtQuick/qsgtexturematerial.sip
@@ -0,0 +1,55 @@
+// qsgtexturematerial.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSGOpaqueTextureMaterial : QSGMaterial
+{
+%TypeHeaderCode
+#include <qsgtexturematerial.h>
+%End
+
+public:
+    QSGOpaqueTextureMaterial();
+    virtual QSGMaterialType *type() const;
+    virtual QSGMaterialShader *createShader() const /Factory/;
+    virtual int compare(const QSGMaterial *other) const;
+    void setTexture(QSGTexture *texture);
+    QSGTexture *texture() const;
+    void setMipmapFiltering(QSGTexture::Filtering filtering);
+    QSGTexture::Filtering mipmapFiltering() const;
+    void setFiltering(QSGTexture::Filtering filtering);
+    QSGTexture::Filtering filtering() const;
+    void setHorizontalWrapMode(QSGTexture::WrapMode mode);
+    QSGTexture::WrapMode horizontalWrapMode() const;
+    void setVerticalWrapMode(QSGTexture::WrapMode mode);
+    QSGTexture::WrapMode verticalWrapMode() const;
+};
+
+class QSGTextureMaterial : QSGOpaqueTextureMaterial
+{
+%TypeHeaderCode
+#include <qsgtexturematerial.h>
+%End
+
+public:
+    virtual QSGMaterialType *type() const;
+    virtual QSGMaterialShader *createShader() const /Factory/;
+};
diff --git a/sip/QtQuick/qsgtextureprovider.sip b/sip/QtQuick/qsgtextureprovider.sip
new file mode 100644
index 0000000..4331326
--- /dev/null
+++ b/sip/QtQuick/qsgtextureprovider.sip
@@ -0,0 +1,34 @@
+// qsgtextureprovider.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSGTextureProvider : QObject
+{
+%TypeHeaderCode
+#include <qsgtextureprovider.h>
+%End
+
+public:
+    virtual QSGTexture *texture() const = 0 /Factory/;
+
+signals:
+    void textureChanged();
+};
diff --git a/sip/QtQuick/qsgvertexcolormaterial.sip b/sip/QtQuick/qsgvertexcolormaterial.sip
new file mode 100644
index 0000000..161e6e2
--- /dev/null
+++ b/sip/QtQuick/qsgvertexcolormaterial.sip
@@ -0,0 +1,36 @@
+// qsgvertexcolormaterial.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtQuick Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSGVertexColorMaterial : QSGMaterial
+{
+%TypeHeaderCode
+#include <qsgvertexcolormaterial.h>
+%End
+
+public:
+    QSGVertexColorMaterial();
+    virtual int compare(const QSGMaterial *other) const;
+
+protected:
+    virtual QSGMaterialType *type() const;
+    virtual QSGMaterialShader *createShader() const /Factory/;
+};
diff --git a/sip/QtQuickWidgets/QtQuickWidgetsmod.sip b/sip/QtQuickWidgets/QtQuickWidgetsmod.sip
new file mode 100644
index 0000000..b949351
--- /dev/null
+++ b/sip/QtQuickWidgets/QtQuickWidgetsmod.sip
@@ -0,0 +1,52 @@
+// QtQuickWidgetsmod.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtQuickWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtQuickWidgets, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtGui/QtGuimod.sip
+%Import QtQml/QtQmlmod.sip
+%Import QtQuick/QtQuickmod.sip
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qquickwidget.sip
diff --git a/sip/QtQuickWidgets/qquickwidget.sip b/sip/QtQuickWidgets/qquickwidget.sip
new file mode 100644
index 0000000..f7d4ffb
--- /dev/null
+++ b/sip/QtQuickWidgets/qquickwidget.sip
@@ -0,0 +1,100 @@
+// qquickwidget.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtQuickWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class QQuickWidget : QWidget
+{
+%TypeHeaderCode
+#include <qquickwidget.h>
+%End
+
+%ConvertToSubClassCode
+    sipType = (sipCpp->inherits(sipName_QQuickWidget) ? sipType_QQuickWidget : 0);
+%End
+
+public:
+    explicit QQuickWidget(QWidget *parent /TransferThis/ = 0);
+    QQuickWidget(QQmlEngine *engine, QWidget *parent /TransferThis/);
+    QQuickWidget(const QUrl &source, QWidget *parent /TransferThis/ = 0);
+    virtual ~QQuickWidget();
+    QUrl source() const;
+    QQmlEngine *engine() const;
+    QQmlContext *rootContext() const;
+    QQuickItem *rootObject() const;
+
+    enum ResizeMode
+    {
+        SizeViewToRootObject,
+        SizeRootObjectToView,
+    };
+
+    QQuickWidget::ResizeMode resizeMode() const;
+    void setResizeMode(QQuickWidget::ResizeMode);
+
+    enum Status
+    {
+        Null,
+        Ready,
+        Loading,
+        Error,
+    };
+
+    QQuickWidget::Status status() const;
+    QList<QQmlError> errors() const;
+    virtual QSize sizeHint() const;
+    QSize initialSize() const;
+    void setFormat(const QSurfaceFormat &format);
+    QSurfaceFormat format() const;
+
+public slots:
+    void setSource(const QUrl &);
+
+signals:
+    void statusChanged(QQuickWidget::Status);
+    void sceneGraphError(QQuickWindow::SceneGraphError error, const QString &message);
+
+protected:
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void timerEvent(QTimerEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void keyReleaseEvent(QKeyEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void mouseDoubleClickEvent(QMouseEvent *);
+    virtual void showEvent(QShowEvent *);
+    virtual void hideEvent(QHideEvent *);
+    virtual void wheelEvent(QWheelEvent *);
+    virtual bool event(QEvent *);
+%If (Qt_5_3_1 -)
+    virtual void focusInEvent(QFocusEvent *event);
+%End
+%If (Qt_5_3_1 -)
+    virtual void focusOutEvent(QFocusEvent *event);
+%End
+
+private:
+    QQuickWidget(const QQuickWidget &);
+};
+
+%End
diff --git a/sip/QtSensors/QtSensorsmod.sip b/sip/QtSensors/QtSensorsmod.sip
new file mode 100644
index 0000000..f704ecb
--- /dev/null
+++ b/sip/QtSensors/QtSensorsmod.sip
@@ -0,0 +1,64 @@
+// QtSensorsmod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtSensors, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qaccelerometer.sip
+%Include qaltimeter.sip
+%Include qambientlightsensor.sip
+%Include qambienttemperaturesensor.sip
+%Include qcompass.sip
+%Include qgyroscope.sip
+%Include qholstersensor.sip
+%Include qirproximitysensor.sip
+%Include qlightsensor.sip
+%Include qmagnetometer.sip
+%Include qorientationsensor.sip
+%Include qpressuresensor.sip
+%Include qproximitysensor.sip
+%Include qsensor.sip
+%Include qtapsensor.sip
+%Include qtiltsensor.sip
+%Include qrotationsensor.sip
diff --git a/sip/QtSensors/qaccelerometer.sip b/sip/QtSensors/qaccelerometer.sip
new file mode 100644
index 0000000..e48264a
--- /dev/null
+++ b/sip/QtSensors/qaccelerometer.sip
@@ -0,0 +1,84 @@
+// qaccelerometer.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QAccelerometerReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qaccelerometer.h>
+%End
+
+public:
+    qreal x() const;
+    void setX(qreal x);
+    qreal y() const;
+    void setY(qreal y);
+    qreal z() const;
+    void setZ(qreal z);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QAccelerometerFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qaccelerometer.h>
+%End
+
+public:
+    virtual bool filter(QAccelerometerReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QAccelerometer : QSensor
+{
+%TypeHeaderCode
+#include <qaccelerometer.h>
+%End
+
+public:
+    explicit QAccelerometer(QObject *parent /TransferThis/ = 0);
+    virtual ~QAccelerometer();
+
+    enum AccelerationMode
+    {
+        Combined,
+        Gravity,
+        User,
+    };
+
+    QAccelerometer::AccelerationMode accelerationMode() const;
+    void setAccelerationMode(QAccelerometer::AccelerationMode accelerationMode);
+    QAccelerometerReading *reading() const;
+
+signals:
+    void accelerationModeChanged(QAccelerometer::AccelerationMode accelerationMode);
+
+private:
+    QAccelerometer(const QAccelerometer &);
+};
+
+%End
diff --git a/sip/QtSensors/qaltimeter.sip b/sip/QtSensors/qaltimeter.sip
new file mode 100644
index 0000000..e4bb7f2
--- /dev/null
+++ b/sip/QtSensors/qaltimeter.sip
@@ -0,0 +1,67 @@
+// qaltimeter.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QAltimeterReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qaltimeter.h>
+%End
+
+public:
+    qreal altitude() const;
+    void setAltitude(qreal altitude);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QAltimeterFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qaltimeter.h>
+%End
+
+public:
+    virtual bool filter(QAltimeterReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QAltimeter : QSensor
+{
+%TypeHeaderCode
+#include <qaltimeter.h>
+%End
+
+public:
+    explicit QAltimeter(QObject *parent /TransferThis/ = 0);
+    virtual ~QAltimeter();
+    QAltimeterReading *reading() const;
+
+private:
+    QAltimeter(const QAltimeter &);
+};
+
+%End
diff --git a/sip/QtSensors/qambientlightsensor.sip b/sip/QtSensors/qambientlightsensor.sip
new file mode 100644
index 0000000..ac3c6f0
--- /dev/null
+++ b/sip/QtSensors/qambientlightsensor.sip
@@ -0,0 +1,77 @@
+// qambientlightsensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QAmbientLightReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qambientlightsensor.h>
+%End
+
+public:
+    enum LightLevel
+    {
+        Undefined,
+        Dark,
+        Twilight,
+        Light,
+        Bright,
+        Sunny,
+    };
+
+    QAmbientLightReading::LightLevel lightLevel() const;
+    void setLightLevel(QAmbientLightReading::LightLevel lightLevel);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QAmbientLightFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qambientlightsensor.h>
+%End
+
+public:
+    virtual bool filter(QAmbientLightReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QAmbientLightSensor : QSensor
+{
+%TypeHeaderCode
+#include <qambientlightsensor.h>
+%End
+
+public:
+    explicit QAmbientLightSensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QAmbientLightSensor();
+    QAmbientLightReading *reading() const;
+
+private:
+    QAmbientLightSensor(const QAmbientLightSensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qambienttemperaturesensor.sip b/sip/QtSensors/qambienttemperaturesensor.sip
new file mode 100644
index 0000000..6449ae4
--- /dev/null
+++ b/sip/QtSensors/qambienttemperaturesensor.sip
@@ -0,0 +1,67 @@
+// qambienttemperaturesensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QAmbientTemperatureReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qambienttemperaturesensor.h>
+%End
+
+public:
+    qreal temperature() const;
+    void setTemperature(qreal temperature);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QAmbientTemperatureFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qambienttemperaturesensor.h>
+%End
+
+public:
+    virtual bool filter(QAmbientTemperatureReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QAmbientTemperatureSensor : QSensor
+{
+%TypeHeaderCode
+#include <qambienttemperaturesensor.h>
+%End
+
+public:
+    explicit QAmbientTemperatureSensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QAmbientTemperatureSensor();
+    QAmbientTemperatureReading *reading() const;
+
+private:
+    QAmbientTemperatureSensor(const QAmbientTemperatureSensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qcompass.sip b/sip/QtSensors/qcompass.sip
new file mode 100644
index 0000000..b08f948
--- /dev/null
+++ b/sip/QtSensors/qcompass.sip
@@ -0,0 +1,69 @@
+// qcompass.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QCompassReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qcompass.h>
+%End
+
+public:
+    qreal azimuth() const;
+    void setAzimuth(qreal azimuth);
+    qreal calibrationLevel() const;
+    void setCalibrationLevel(qreal calibrationLevel);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QCompassFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qcompass.h>
+%End
+
+public:
+    virtual bool filter(QCompassReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QCompass : QSensor
+{
+%TypeHeaderCode
+#include <qcompass.h>
+%End
+
+public:
+    explicit QCompass(QObject *parent /TransferThis/ = 0);
+    virtual ~QCompass();
+    QCompassReading *reading() const;
+
+private:
+    QCompass(const QCompass &);
+};
+
+%End
diff --git a/sip/QtSensors/qgyroscope.sip b/sip/QtSensors/qgyroscope.sip
new file mode 100644
index 0000000..a6b1c22
--- /dev/null
+++ b/sip/QtSensors/qgyroscope.sip
@@ -0,0 +1,71 @@
+// qgyroscope.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QGyroscopeReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qgyroscope.h>
+%End
+
+public:
+    qreal x() const;
+    void setX(qreal x);
+    qreal y() const;
+    void setY(qreal y);
+    qreal z() const;
+    void setZ(qreal z);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QGyroscopeFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qgyroscope.h>
+%End
+
+public:
+    virtual bool filter(QGyroscopeReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QGyroscope : QSensor
+{
+%TypeHeaderCode
+#include <qgyroscope.h>
+%End
+
+public:
+    explicit QGyroscope(QObject *parent /TransferThis/ = 0);
+    virtual ~QGyroscope();
+    QGyroscopeReading *reading() const;
+
+private:
+    QGyroscope(const QGyroscope &);
+};
+
+%End
diff --git a/sip/QtSensors/qholstersensor.sip b/sip/QtSensors/qholstersensor.sip
new file mode 100644
index 0000000..805398f
--- /dev/null
+++ b/sip/QtSensors/qholstersensor.sip
@@ -0,0 +1,67 @@
+// qholstersensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QHolsterReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qholstersensor.h>
+%End
+
+public:
+    bool holstered() const;
+    void setHolstered(bool holstered);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QHolsterFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qholstersensor.h>
+%End
+
+public:
+    virtual bool filter(QHolsterReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QHolsterSensor : QSensor
+{
+%TypeHeaderCode
+#include <qholstersensor.h>
+%End
+
+public:
+    explicit QHolsterSensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QHolsterSensor();
+    QHolsterReading *reading() const;
+
+private:
+    QHolsterSensor(const QHolsterSensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qirproximitysensor.sip b/sip/QtSensors/qirproximitysensor.sip
new file mode 100644
index 0000000..51d0c22
--- /dev/null
+++ b/sip/QtSensors/qirproximitysensor.sip
@@ -0,0 +1,67 @@
+// qirproximitysensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QIRProximityReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qirproximitysensor.h>
+%End
+
+public:
+    qreal reflectance() const;
+    void setReflectance(qreal reflectance);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QIRProximityFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qirproximitysensor.h>
+%End
+
+public:
+    virtual bool filter(QIRProximityReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QIRProximitySensor : QSensor
+{
+%TypeHeaderCode
+#include <qirproximitysensor.h>
+%End
+
+public:
+    explicit QIRProximitySensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QIRProximitySensor();
+    QIRProximityReading *reading() const;
+
+private:
+    QIRProximitySensor(const QIRProximitySensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qlightsensor.sip b/sip/QtSensors/qlightsensor.sip
new file mode 100644
index 0000000..b0de7fa
--- /dev/null
+++ b/sip/QtSensors/qlightsensor.sip
@@ -0,0 +1,72 @@
+// qlightsensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QLightReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qlightsensor.h>
+%End
+
+public:
+    qreal lux() const;
+    void setLux(qreal lux);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QLightFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qlightsensor.h>
+%End
+
+public:
+    virtual bool filter(QLightReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QLightSensor : QSensor
+{
+%TypeHeaderCode
+#include <qlightsensor.h>
+%End
+
+public:
+    explicit QLightSensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QLightSensor();
+    QLightReading *reading() const;
+    qreal fieldOfView() const;
+    void setFieldOfView(qreal fieldOfView);
+
+signals:
+    void fieldOfViewChanged(qreal fieldOfView);
+
+private:
+    QLightSensor(const QLightSensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qmagnetometer.sip b/sip/QtSensors/qmagnetometer.sip
new file mode 100644
index 0000000..e06d5ad
--- /dev/null
+++ b/sip/QtSensors/qmagnetometer.sip
@@ -0,0 +1,78 @@
+// qmagnetometer.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QMagnetometerReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qmagnetometer.h>
+%End
+
+public:
+    qreal x() const;
+    void setX(qreal x);
+    qreal y() const;
+    void setY(qreal y);
+    qreal z() const;
+    void setZ(qreal z);
+    qreal calibrationLevel() const;
+    void setCalibrationLevel(qreal calibrationLevel);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QMagnetometerFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qmagnetometer.h>
+%End
+
+public:
+    virtual bool filter(QMagnetometerReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QMagnetometer : QSensor
+{
+%TypeHeaderCode
+#include <qmagnetometer.h>
+%End
+
+public:
+    explicit QMagnetometer(QObject *parent /TransferThis/ = 0);
+    virtual ~QMagnetometer();
+    QMagnetometerReading *reading() const;
+    bool returnGeoValues() const;
+    void setReturnGeoValues(bool returnGeoValues);
+
+signals:
+    void returnGeoValuesChanged(bool returnGeoValues);
+
+private:
+    QMagnetometer(const QMagnetometer &);
+};
+
+%End
diff --git a/sip/QtSensors/qorientationsensor.sip b/sip/QtSensors/qorientationsensor.sip
new file mode 100644
index 0000000..b9f11cd
--- /dev/null
+++ b/sip/QtSensors/qorientationsensor.sip
@@ -0,0 +1,78 @@
+// qorientationsensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QOrientationReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qorientationsensor.h>
+%End
+
+public:
+    enum Orientation
+    {
+        Undefined,
+        TopUp,
+        TopDown,
+        LeftUp,
+        RightUp,
+        FaceUp,
+        FaceDown,
+    };
+
+    QOrientationReading::Orientation orientation() const;
+    void setOrientation(QOrientationReading::Orientation orientation);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QOrientationFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qorientationsensor.h>
+%End
+
+public:
+    virtual bool filter(QOrientationReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QOrientationSensor : QSensor
+{
+%TypeHeaderCode
+#include <qorientationsensor.h>
+%End
+
+public:
+    explicit QOrientationSensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QOrientationSensor();
+    QOrientationReading *reading() const;
+
+private:
+    QOrientationSensor(const QOrientationSensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qpressuresensor.sip b/sip/QtSensors/qpressuresensor.sip
new file mode 100644
index 0000000..d6093d9
--- /dev/null
+++ b/sip/QtSensors/qpressuresensor.sip
@@ -0,0 +1,73 @@
+// qpressuresensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QPressureReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qpressuresensor.h>
+%End
+
+public:
+    qreal pressure() const;
+    void setPressure(qreal pressure);
+%If (Qt_5_2_0 -)
+    qreal temperature() const;
+%End
+%If (Qt_5_2_0 -)
+    void setTemperature(qreal temperature);
+%End
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QPressureFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qpressuresensor.h>
+%End
+
+public:
+    virtual bool filter(QPressureReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QPressureSensor : QSensor
+{
+%TypeHeaderCode
+#include <qpressuresensor.h>
+%End
+
+public:
+    explicit QPressureSensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QPressureSensor();
+    QPressureReading *reading() const;
+
+private:
+    QPressureSensor(const QPressureSensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qproximitysensor.sip b/sip/QtSensors/qproximitysensor.sip
new file mode 100644
index 0000000..2e0a2eb
--- /dev/null
+++ b/sip/QtSensors/qproximitysensor.sip
@@ -0,0 +1,67 @@
+// qproximitysensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QProximityReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qproximitysensor.h>
+%End
+
+public:
+    bool close() const;
+    void setClose(bool close);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QProximityFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qproximitysensor.h>
+%End
+
+public:
+    virtual bool filter(QProximityReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QProximitySensor : QSensor
+{
+%TypeHeaderCode
+#include <qproximitysensor.h>
+%End
+
+public:
+    explicit QProximitySensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QProximitySensor();
+    QProximityReading *reading() const;
+
+private:
+    QProximitySensor(const QProximitySensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qrotationsensor.sip b/sip/QtSensors/qrotationsensor.sip
new file mode 100644
index 0000000..dc05759
--- /dev/null
+++ b/sip/QtSensors/qrotationsensor.sip
@@ -0,0 +1,74 @@
+// qrotationsensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QRotationReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qrotationsensor.h>
+%End
+
+public:
+    qreal x() const;
+    qreal y() const;
+    qreal z() const;
+    void setFromEuler(qreal x, qreal y, qreal z);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QRotationFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qrotationsensor.h>
+%End
+
+public:
+    virtual bool filter(QRotationReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QRotationSensor : QSensor
+{
+%TypeHeaderCode
+#include <qrotationsensor.h>
+%End
+
+public:
+    explicit QRotationSensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QRotationSensor();
+    QRotationReading *reading() const;
+    bool hasZ() const;
+    void setHasZ(bool hasZ);
+
+signals:
+    void hasZChanged(bool hasZ);
+
+private:
+    QRotationSensor(const QRotationSensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qsensor.sip b/sip/QtSensors/qsensor.sip
new file mode 100644
index 0000000..d51fad3
--- /dev/null
+++ b/sip/QtSensors/qsensor.sip
@@ -0,0 +1,241 @@
+// qsensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+typedef quint64 qtimestamp;
+%End
+%If (Qt_5_1_0 -)
+typedef QList<QPair<int, int>> qrangelist;
+%End
+%If (Qt_5_1_0 -)
+
+struct qoutputrange
+{
+%TypeHeaderCode
+#include <qsensor.h>
+%End
+
+    qreal minimum;
+    qreal maximum;
+    qreal accuracy;
+};
+
+%End
+%If (Qt_5_1_0 -)
+typedef QList<qoutputrange> qoutputrangelist;
+%End
+%If (Qt_5_1_0 -)
+
+class QSensorReading : QObject /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qsensor.h>
+%End
+
+public:
+    virtual ~QSensorReading();
+    quint64 timestamp() const;
+    void setTimestamp(quint64 timestamp);
+    int valueCount() const;
+    QVariant value(int index) const;
+
+private:
+    QSensorReading(const QSensorReading &);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QSensorFilter
+{
+%TypeHeaderCode
+#include <qsensor.h>
+%End
+
+public:
+    virtual bool filter(QSensorReading *reading) = 0;
+
+protected:
+    QSensorFilter();
+    virtual ~QSensorFilter();
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QSensor : QObject
+{
+%TypeHeaderCode
+#include <qsensor.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QSensorReading, &sipType_QSensorReading, 2, 1},
+        {sipName_QSensor, &sipType_QSensor, 18, -1},
+        {sipName_QAltimeterReading, &sipType_QAltimeterReading, -1, 3},
+        {sipName_QLightReading, &sipType_QLightReading, -1, 4},
+        {sipName_QMagnetometerReading, &sipType_QMagnetometerReading, -1, 5},
+        {sipName_QTapReading, &sipType_QTapReading, -1, 6},
+        {sipName_QAmbientTemperatureReading, &sipType_QAmbientTemperatureReading, -1, 7},
+        {sipName_QProximityReading, &sipType_QProximityReading, -1, 8},
+        {sipName_QHolsterReading, &sipType_QHolsterReading, -1, 9},
+        {sipName_QOrientationReading, &sipType_QOrientationReading, -1, 10},
+        {sipName_QGyroscopeReading, &sipType_QGyroscopeReading, -1, 11},
+        {sipName_QTiltReading, &sipType_QTiltReading, -1, 12},
+        {sipName_QRotationReading, &sipType_QRotationReading, -1, 13},
+        {sipName_QIRProximityReading, &sipType_QIRProximityReading, -1, 14},
+        {sipName_QCompassReading, &sipType_QCompassReading, -1, 15},
+        {sipName_QAmbientLightReading, &sipType_QAmbientLightReading, -1, 16},
+        {sipName_QAccelerometerReading, &sipType_QAccelerometerReading, -1, 17},
+        {sipName_QPressureReading, &sipType_QPressureReading, -1, -1},
+        {sipName_QAmbientLightSensor, &sipType_QAmbientLightSensor, -1, 19},
+        {sipName_QHolsterSensor, &sipType_QHolsterSensor, -1, 20},
+        {sipName_QRotationSensor, &sipType_QRotationSensor, -1, 21},
+        {sipName_QPressureSensor, &sipType_QPressureSensor, -1, 22},
+        {sipName_QTiltSensor, &sipType_QTiltSensor, -1, 23},
+        {sipName_QMagnetometer, &sipType_QMagnetometer, -1, 24},
+        {sipName_QOrientationSensor, &sipType_QOrientationSensor, -1, 25},
+        {sipName_QAmbientTemperatureSensor, &sipType_QAmbientTemperatureSensor, -1, 26},
+        {sipName_QIRProximitySensor, &sipType_QIRProximitySensor, -1, 27},
+        {sipName_QCompass, &sipType_QCompass, -1, 28},
+        {sipName_QLightSensor, &sipType_QLightSensor, -1, 29},
+        {sipName_QAltimeter, &sipType_QAltimeter, -1, 30},
+        {sipName_QProximitySensor, &sipType_QProximitySensor, -1, 31},
+        {sipName_QAccelerometer, &sipType_QAccelerometer, -1, 32},
+        {sipName_QTapSensor, &sipType_QTapSensor, -1, 33},
+        {sipName_QGyroscope, &sipType_QGyroscope, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    enum Feature
+    {
+        Buffering,
+        AlwaysOn,
+        GeoValues,
+        FieldOfView,
+        AccelerationMode,
+        SkipDuplicates,
+        AxesOrientation,
+%If (Qt_5_2_0 -)
+        PressureSensorTemperature,
+%End
+    };
+
+    enum AxesOrientationMode
+    {
+        FixedOrientation,
+        AutomaticOrientation,
+        UserOrientation,
+    };
+
+    QSensor(const QByteArray &type, QObject *parent /TransferThis/ = 0);
+    virtual ~QSensor();
+    QByteArray identifier() const;
+    void setIdentifier(const QByteArray &identifier);
+    QByteArray type() const;
+    bool connectToBackend();
+    bool isConnectedToBackend() const;
+    bool isBusy() const;
+    void setActive(bool active);
+    bool isActive() const;
+    bool isAlwaysOn() const;
+    void setAlwaysOn(bool alwaysOn);
+    bool skipDuplicates() const;
+    void setSkipDuplicates(bool skipDuplicates);
+    qrangelist availableDataRates() const;
+    int dataRate() const;
+    void setDataRate(int rate);
+    qoutputrangelist outputRanges() const;
+    int outputRange() const;
+    void setOutputRange(int index);
+    QString description() const;
+    int error() const;
+    void addFilter(QSensorFilter *filter);
+    void removeFilter(QSensorFilter *filter);
+    QList<QSensorFilter*> filters() const;
+    QSensorReading *reading() const;
+    static QList<QByteArray> sensorTypes();
+    static QList<QByteArray> sensorsForType(const QByteArray &type);
+    static QByteArray defaultSensorForType(const QByteArray &type);
+    bool isFeatureSupported(QSensor::Feature feature) const;
+    QSensor::AxesOrientationMode axesOrientationMode() const;
+    void setAxesOrientationMode(QSensor::AxesOrientationMode axesOrientationMode);
+    int currentOrientation() const;
+    void setCurrentOrientation(int currentOrientation);
+    int userOrientation() const;
+    void setUserOrientation(int userOrientation);
+    int maxBufferSize() const;
+    void setMaxBufferSize(int maxBufferSize);
+    int efficientBufferSize() const;
+    void setEfficientBufferSize(int efficientBufferSize);
+    int bufferSize() const;
+    void setBufferSize(int bufferSize);
+
+public slots:
+    bool start();
+    void stop();
+
+signals:
+    void busyChanged();
+    void activeChanged();
+    void readingChanged();
+    void sensorError(int error);
+    void availableSensorsChanged();
+    void alwaysOnChanged();
+    void dataRateChanged();
+    void skipDuplicatesChanged(bool skipDuplicates);
+    void axesOrientationModeChanged(QSensor::AxesOrientationMode axesOrientationMode);
+    void currentOrientationChanged(int currentOrientation);
+    void userOrientationChanged(int userOrientation);
+    void maxBufferSizeChanged(int maxBufferSize);
+    void efficientBufferSizeChanged(int efficientBufferSize);
+    void bufferSizeChanged(int bufferSize);
+
+private:
+    QSensor(const QSensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qtapsensor.sip b/sip/QtSensors/qtapsensor.sip
new file mode 100644
index 0000000..30d6904
--- /dev/null
+++ b/sip/QtSensors/qtapsensor.sip
@@ -0,0 +1,91 @@
+// qtapsensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QTapReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qtapsensor.h>
+%End
+
+public:
+    enum TapDirection
+    {
+        Undefined,
+        X,
+        Y,
+        Z,
+        X_Pos,
+        Y_Pos,
+        Z_Pos,
+        X_Neg,
+        Y_Neg,
+        Z_Neg,
+        X_Both,
+        Y_Both,
+        Z_Both,
+    };
+
+    QTapReading::TapDirection tapDirection() const;
+    void setTapDirection(QTapReading::TapDirection tapDirection);
+    bool isDoubleTap() const;
+    void setDoubleTap(bool doubleTap);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QTapFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qtapsensor.h>
+%End
+
+public:
+    virtual bool filter(QTapReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QTapSensor : QSensor
+{
+%TypeHeaderCode
+#include <qtapsensor.h>
+%End
+
+public:
+    explicit QTapSensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QTapSensor();
+    QTapReading *reading() const;
+    bool returnDoubleTapEvents() const;
+    void setReturnDoubleTapEvents(bool returnDoubleTapEvents);
+
+signals:
+    void returnDoubleTapEventsChanged(bool returnDoubleTapEvents);
+
+private:
+    QTapSensor(const QTapSensor &);
+};
+
+%End
diff --git a/sip/QtSensors/qtiltsensor.sip b/sip/QtSensors/qtiltsensor.sip
new file mode 100644
index 0000000..d432015
--- /dev/null
+++ b/sip/QtSensors/qtiltsensor.sip
@@ -0,0 +1,70 @@
+// qtiltsensor.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSensors Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QTiltReading : QSensorReading /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qtiltsensor.h>
+%End
+
+public:
+    qreal yRotation() const;
+    void setYRotation(qreal y);
+    qreal xRotation() const;
+    void setXRotation(qreal x);
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QTiltFilter : QSensorFilter
+{
+%TypeHeaderCode
+#include <qtiltsensor.h>
+%End
+
+public:
+    virtual bool filter(QTiltReading *reading) = 0;
+};
+
+%End
+%If (Qt_5_1_0 -)
+
+class QTiltSensor : QSensor
+{
+%TypeHeaderCode
+#include <qtiltsensor.h>
+%End
+
+public:
+    explicit QTiltSensor(QObject *parent /TransferThis/ = 0);
+    virtual ~QTiltSensor();
+    QTiltReading *reading() const;
+    void calibrate();
+
+private:
+    QTiltSensor(const QTiltSensor &);
+};
+
+%End
diff --git a/sip/QtSerialPort/QtSerialPortmod.sip b/sip/QtSerialPort/QtSerialPortmod.sip
new file mode 100644
index 0000000..8dfb57e
--- /dev/null
+++ b/sip/QtSerialPort/QtSerialPortmod.sip
@@ -0,0 +1,49 @@
+// QtSerialPortmod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSerialPort Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtSerialPort, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qserialport.sip
+%Include qserialportinfo.sip
diff --git a/sip/QtSerialPort/qserialport.sip b/sip/QtSerialPort/qserialport.sip
new file mode 100644
index 0000000..0abeea1
--- /dev/null
+++ b/sip/QtSerialPort/qserialport.sip
@@ -0,0 +1,328 @@
+// qserialport.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSerialPort Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+%ModuleCode
+#include <qserialport.h>
+%End
+%End
+
+%If (Qt_5_1_0 -)
+
+class QSerialPort : QIODevice
+{
+%TypeHeaderCode
+#include <qserialport.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QSerialPort, &sipType_QSerialPort, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    enum Direction
+    {
+        Input,
+        Output,
+        AllDirections,
+    };
+
+    typedef QFlags<QSerialPort::Direction> Directions;
+
+    enum BaudRate
+    {
+        Baud1200,
+        Baud2400,
+        Baud4800,
+        Baud9600,
+        Baud19200,
+        Baud38400,
+        Baud57600,
+        Baud115200,
+        UnknownBaud,
+    };
+
+    enum DataBits
+    {
+        Data5,
+        Data6,
+        Data7,
+        Data8,
+        UnknownDataBits,
+    };
+
+    enum Parity
+    {
+        NoParity,
+        EvenParity,
+        OddParity,
+        SpaceParity,
+        MarkParity,
+        UnknownParity,
+    };
+
+    enum StopBits
+    {
+        OneStop,
+        OneAndHalfStop,
+        TwoStop,
+        UnknownStopBits,
+    };
+
+    enum FlowControl
+    {
+        NoFlowControl,
+        HardwareControl,
+        SoftwareControl,
+        UnknownFlowControl,
+    };
+
+    enum PinoutSignal
+    {
+        NoSignal,
+        TransmittedDataSignal,
+        ReceivedDataSignal,
+        DataTerminalReadySignal,
+        DataCarrierDetectSignal,
+        DataSetReadySignal,
+        RingIndicatorSignal,
+        RequestToSendSignal,
+        ClearToSendSignal,
+        SecondaryTransmittedDataSignal,
+        SecondaryReceivedDataSignal,
+    };
+
+    typedef QFlags<QSerialPort::PinoutSignal> PinoutSignals;
+
+    enum DataErrorPolicy
+    {
+        SkipPolicy,
+        PassZeroPolicy,
+        IgnorePolicy,
+        StopReceivingPolicy,
+        UnknownPolicy,
+    };
+
+    enum SerialPortError
+    {
+        NoError,
+        DeviceNotFoundError,
+        PermissionError,
+        OpenError,
+        ParityError,
+        FramingError,
+        BreakConditionError,
+        WriteError,
+        ReadError,
+        ResourceError,
+        UnsupportedOperationError,
+%If (Qt_5_2_0 -)
+        TimeoutError,
+%End
+%If (Qt_5_2_0 -)
+        NotOpenError,
+%End
+        UnknownError,
+    };
+
+    explicit QSerialPort(QObject *parent /TransferThis/ = 0);
+    QSerialPort(const QString &name, QObject *parent /TransferThis/ = 0);
+    QSerialPort(const QSerialPortInfo &info, QObject *parent /TransferThis/ = 0);
+    virtual ~QSerialPort();
+    void setPortName(const QString &name);
+    QString portName() const;
+    void setPort(const QSerialPortInfo &info);
+    virtual bool open(QFlags<QIODevice::OpenModeFlag> mode);
+    virtual void close() /ReleaseGIL/;
+    void setSettingsRestoredOnClose(bool restore);
+    bool settingsRestoredOnClose() const;
+    bool setBaudRate(qint32 baudRate, QFlags<QSerialPort::Direction> dir = QSerialPort::AllDirections);
+    qint32 baudRate(QFlags<QSerialPort::Direction> dir = QSerialPort::AllDirections) const;
+    bool setDataBits(QSerialPort::DataBits dataBits);
+    QSerialPort::DataBits dataBits() const;
+    bool setParity(QSerialPort::Parity parity);
+    QSerialPort::Parity parity() const;
+    bool setStopBits(QSerialPort::StopBits stopBits);
+    QSerialPort::StopBits stopBits() const;
+    bool setFlowControl(QSerialPort::FlowControl flow);
+    QSerialPort::FlowControl flowControl() const;
+    bool setDataTerminalReady(bool set);
+    bool isDataTerminalReady();
+    bool setRequestToSend(bool set);
+    bool isRequestToSend();
+    QFlags<QSerialPort::PinoutSignal> pinoutSignals();
+    bool flush() /ReleaseGIL/;
+    bool clear(QFlags<QSerialPort::Direction> dir = QSerialPort::AllDirections);
+    virtual bool atEnd() const;
+    bool setDataErrorPolicy(QSerialPort::DataErrorPolicy policy = QSerialPort::IgnorePolicy);
+    QSerialPort::DataErrorPolicy dataErrorPolicy() const;
+    QSerialPort::SerialPortError error() const;
+    void clearError();
+    qint64 readBufferSize() const;
+    void setReadBufferSize(qint64 size);
+    virtual bool isSequential() const;
+    virtual qint64 bytesAvailable() const;
+    virtual qint64 bytesToWrite() const;
+    virtual bool canReadLine() const;
+    virtual bool waitForReadyRead(int msecs) /ReleaseGIL/;
+    virtual bool waitForBytesWritten(int msecs) /ReleaseGIL/;
+    bool sendBreak(int duration = 0) /ReleaseGIL/;
+    bool setBreakEnabled(bool enabled = true);
+
+signals:
+    void baudRateChanged(qint32 baudRate, QFlags<QSerialPort::Direction> dir);
+    void dataBitsChanged(QSerialPort::DataBits dataBits);
+    void parityChanged(QSerialPort::Parity parity);
+    void stopBitsChanged(QSerialPort::StopBits stopBits);
+    void flowControlChanged(QSerialPort::FlowControl flow);
+    void dataErrorPolicyChanged(QSerialPort::DataErrorPolicy policy);
+    void dataTerminalReadyChanged(bool set);
+    void requestToSendChanged(bool set);
+    void error(QSerialPort::SerialPortError serialPortError);
+    void settingsRestoredOnCloseChanged(bool restore);
+
+protected:
+    virtual SIP_PYOBJECT readData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxSize)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QSerialPort::readData(s, a0) : sipCpp->readData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual SIP_PYOBJECT readLineData(qint64 maxlen) /DocType="Py_v3:bytes;str",ReleaseGIL/ [qint64 (char *data, qint64 maxSize)];
+%MethodCode
+        // Return the data read or None if there was an error.
+        if (a0 < 0)
+        {
+            PyErr_SetString(PyExc_ValueError, "maximum length of data to be read cannot be negative");
+            sipIsErr = 1;
+        }
+        else
+        {
+            char *s = new char[a0];
+            qint64 len;
+        
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            len = sipSelfWasArg ? sipCpp->QSerialPort::readLineData(s, a0) : sipCpp->readLineData(s, a0);
+        #else
+            len = sipCpp->sipProtectVirt_readLineData(sipSelfWasArg, s, a0);
+        #endif
+            Py_END_ALLOW_THREADS
+        
+            if (len < 0)
+            {
+                Py_INCREF(Py_None);
+                sipRes = Py_None;
+            }
+            else
+            {
+                sipRes = SIPBytes_FromStringAndSize(s, len);
+        
+                if (!sipRes)
+                    sipIsErr = 1;
+            }
+        
+            delete[] s;
+        }
+%End
+
+    virtual qint64 writeData(const char *data /Array/, qint64 maxSize /ArraySize/) /ReleaseGIL/;
+
+public:
+%If (Qt_5_2_0 -)
+%If (WS_X11 || WS_MACX)
+    int handle() const;
+%End
+%End
+%If (Qt_5_2_0 -)
+%If (WS_WIN)
+    void *handle() const;
+%End
+%End
+
+private:
+    QSerialPort(const QSerialPort &);
+};
+
+%End
+%If (Qt_5_1_0 -)
+QFlags<QSerialPort::Direction> operator|(QSerialPort::Direction f1, QFlags<QSerialPort::Direction> f2);
+%End
+%If (Qt_5_1_0 -)
+QFlags<QSerialPort::PinoutSignal> operator|(QSerialPort::PinoutSignal f1, QFlags<QSerialPort::PinoutSignal> f2);
+%End
diff --git a/sip/QtSerialPort/qserialportinfo.sip b/sip/QtSerialPort/qserialportinfo.sip
new file mode 100644
index 0000000..078ef12
--- /dev/null
+++ b/sip/QtSerialPort/qserialportinfo.sip
@@ -0,0 +1,56 @@
+// qserialportinfo.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtSerialPort Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QSerialPortInfo
+{
+%TypeHeaderCode
+#include <qserialportinfo.h>
+%End
+
+public:
+    QSerialPortInfo();
+    explicit QSerialPortInfo(const QSerialPort &port);
+    explicit QSerialPortInfo(const QString &name);
+    QSerialPortInfo(const QSerialPortInfo &other);
+    ~QSerialPortInfo();
+    void swap(QSerialPortInfo &other);
+    QString portName() const;
+    QString systemLocation() const;
+    QString description() const;
+    QString manufacturer() const;
+    quint16 vendorIdentifier() const;
+    quint16 productIdentifier() const;
+    bool hasVendorIdentifier() const;
+    bool hasProductIdentifier() const;
+    bool isBusy() const;
+    bool isValid() const;
+    static QList<int> standardBaudRates();
+    static QList<QSerialPortInfo> availablePorts();
+    bool isNull() const;
+%If (Qt_5_3_0 -)
+    QString serialNumber() const;
+%End
+};
+
+%End
diff --git a/sip/QtSql/QtSqlmod.sip b/sip/QtSql/QtSqlmod.sip
new file mode 100644
index 0000000..d8792a5
--- /dev/null
+++ b/sip/QtSql/QtSqlmod.sip
@@ -0,0 +1,61 @@
+// QtSqlmod.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtSql, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qsql.sip
+%Include qsqldatabase.sip
+%Include qsqldriver.sip
+%Include qsqlerror.sip
+%Include qsqlfield.sip
+%Include qsqlindex.sip
+%Include qsqlquery.sip
+%Include qsqlquerymodel.sip
+%Include qsqlrecord.sip
+%Include qsqlrelationaldelegate.sip
+%Include qsqlrelationaltablemodel.sip
+%Include qsqlresult.sip
+%Include qsqltablemodel.sip
diff --git a/sip/QtSql/qsql.sip b/sip/QtSql/qsql.sip
new file mode 100644
index 0000000..832b1c6
--- /dev/null
+++ b/sip/QtSql/qsql.sip
@@ -0,0 +1,66 @@
+// qsql.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qsql.h>
+%End
+
+namespace QSql
+{
+%TypeHeaderCode
+#include <qsql.h>
+%End
+
+    enum Location
+    {
+        BeforeFirstRow,
+        AfterLastRow,
+    };
+
+    enum ParamTypeFlag
+    {
+        In,
+        Out,
+        InOut,
+        Binary,
+    };
+
+    typedef QFlags<QSql::ParamTypeFlag> ParamType;
+
+    enum TableType
+    {
+        Tables,
+        SystemTables,
+        Views,
+        AllTables,
+    };
+
+    enum NumericalPrecisionPolicy
+    {
+        LowPrecisionInt32,
+        LowPrecisionInt64,
+        LowPrecisionDouble,
+        HighPrecision,
+    };
+};
+
+QFlags<QSql::ParamTypeFlag> operator|(QSql::ParamTypeFlag f1, QFlags<QSql::ParamTypeFlag> f2);
diff --git a/sip/QtSql/qsqldatabase.sip b/sip/QtSql/qsqldatabase.sip
new file mode 100644
index 0000000..d394aec
--- /dev/null
+++ b/sip/QtSql/qsqldatabase.sip
@@ -0,0 +1,94 @@
+// qsqldatabase.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlDriverCreatorBase /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qsqldatabase.h>
+%End
+
+public:
+    virtual ~QSqlDriverCreatorBase();
+    virtual QSqlDriver *createObject() const = 0 /Factory/;
+};
+
+class QSqlDatabase
+{
+%TypeHeaderCode
+#include <qsqldatabase.h>
+%End
+
+public:
+    QSqlDatabase();
+    QSqlDatabase(const QSqlDatabase &other);
+    ~QSqlDatabase();
+    bool open() /ReleaseGIL/;
+    bool open(const QString &user, const QString &password) /ReleaseGIL/;
+    void close();
+    bool isOpen() const;
+    bool isOpenError() const;
+    QStringList tables(QSql::TableType type = QSql::Tables) const;
+    QSqlIndex primaryIndex(const QString &tablename) const;
+    QSqlRecord record(const QString &tablename) const;
+    QSqlQuery exec(const QString &query /DocValue="''"/ = QString()) const /PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    QSqlQuery exec(const QString &query /DocValue="''"/ = QString()) const /ReleaseGIL/;
+%End
+    QSqlError lastError() const;
+    bool isValid() const;
+    bool transaction() /ReleaseGIL/;
+    bool commit() /ReleaseGIL/;
+    bool rollback() /ReleaseGIL/;
+    void setDatabaseName(const QString &name);
+    void setUserName(const QString &name);
+    void setPassword(const QString &password);
+    void setHostName(const QString &host);
+    void setPort(int p);
+    void setConnectOptions(const QString &options /DocValue="''"/ = QString());
+    QString databaseName() const;
+    QString userName() const;
+    QString password() const;
+    QString hostName() const;
+    QString driverName() const;
+    int port() const;
+    QString connectOptions() const;
+    QString connectionName() const;
+    QSqlDriver *driver() const;
+    static QSqlDatabase addDatabase(const QString &type, const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection));
+    static QSqlDatabase addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection));
+    static QSqlDatabase cloneDatabase(const QSqlDatabase &other, const QString &connectionName);
+    static QSqlDatabase database(const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection), bool open = true);
+    static void removeDatabase(const QString &connectionName);
+    static bool contains(const QString &connectionName = QLatin1String(QSqlDatabase::defaultConnection));
+    static QStringList drivers();
+    static QStringList connectionNames();
+    static void registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator /Transfer/);
+    static bool isDriverAvailable(const QString &name);
+
+protected:
+    explicit QSqlDatabase(const QString &type);
+    explicit QSqlDatabase(QSqlDriver *driver);
+
+public:
+    void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy);
+    QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const;
+};
diff --git a/sip/QtSql/qsqldriver.sip b/sip/QtSql/qsqldriver.sip
new file mode 100644
index 0000000..6ec6c28
--- /dev/null
+++ b/sip/QtSql/qsqldriver.sip
@@ -0,0 +1,144 @@
+// qsqldriver.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlDriver : QObject
+{
+%TypeHeaderCode
+#include <qsqldriver.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QSqlQueryModel, &sipType_QSqlQueryModel, 3, 1},
+        {sipName_QSqlRelationalDelegate, &sipType_QSqlRelationalDelegate, -1, 2},
+        {sipName_QSqlDriver, &sipType_QSqlDriver, -1, -1},
+        {sipName_QSqlTableModel, &sipType_QSqlTableModel, 4, -1},
+        {sipName_QSqlRelationalTableModel, &sipType_QSqlRelationalTableModel, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    enum DriverFeature
+    {
+        Transactions,
+        QuerySize,
+        BLOB,
+        Unicode,
+        PreparedQueries,
+        NamedPlaceholders,
+        PositionalPlaceholders,
+        LastInsertId,
+        BatchOperations,
+        SimpleLocking,
+        LowPrecisionNumbers,
+        EventNotifications,
+        FinishQuery,
+        MultipleResultSets,
+    };
+
+    enum StatementType
+    {
+        WhereStatement,
+        SelectStatement,
+        UpdateStatement,
+        InsertStatement,
+        DeleteStatement,
+    };
+
+    enum IdentifierType
+    {
+        FieldName,
+        TableName,
+    };
+
+    explicit QSqlDriver(QObject *parent /TransferThis/ = 0);
+    virtual ~QSqlDriver();
+    virtual bool isOpen() const;
+    bool isOpenError() const;
+    virtual bool beginTransaction() /ReleaseGIL/;
+    virtual bool commitTransaction() /ReleaseGIL/;
+    virtual bool rollbackTransaction() /ReleaseGIL/;
+    virtual QStringList tables(QSql::TableType tableType) const;
+    virtual QSqlIndex primaryIndex(const QString &tableName) const;
+    virtual QSqlRecord record(const QString &tableName) const;
+    virtual QString formatValue(const QSqlField &field, bool trimStrings = false) const;
+    virtual QString escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const;
+    virtual QString sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const;
+    QSqlError lastError() const;
+    virtual QVariant handle() const;
+    virtual bool hasFeature(QSqlDriver::DriverFeature f) const = 0;
+    virtual void close() = 0;
+    virtual QSqlResult *createResult() const = 0 /Factory/;
+    virtual bool open(const QString &db, const QString &user /DocValue="''"/ = QString(), const QString &password /DocValue="''"/ = QString(), const QString &host /DocValue="''"/ = QString(), int port = -1, const QString &options /DocValue="''"/ = QString()) = 0 /ReleaseGIL/;
+
+protected:
+    virtual void setOpen(bool o);
+    virtual void setOpenError(bool e);
+    virtual void setLastError(const QSqlError &e);
+
+public:
+    virtual bool subscribeToNotification(const QString &name);
+    virtual bool unsubscribeFromNotification(const QString &name);
+    virtual QStringList subscribedToNotifications() const;
+
+    enum NotificationSource
+    {
+        UnknownSource,
+        SelfSource,
+        OtherSource,
+    };
+
+signals:
+    void notification(const QString &name);
+    void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload);
+
+public:
+    virtual bool isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const;
+    virtual QString stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const;
+    void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy);
+    QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const;
+
+private:
+    QSqlDriver(const QSqlDriver &);
+};
diff --git a/sip/QtSql/qsqlerror.sip b/sip/QtSql/qsqlerror.sip
new file mode 100644
index 0000000..8451217
--- /dev/null
+++ b/sip/QtSql/qsqlerror.sip
@@ -0,0 +1,65 @@
+// qsqlerror.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlError
+{
+%TypeHeaderCode
+#include <qsqlerror.h>
+%End
+
+public:
+    enum ErrorType
+    {
+        NoError,
+        ConnectionError,
+        StatementError,
+        TransactionError,
+        UnknownError,
+    };
+
+%If (Qt_5_3_0 -)
+    QSqlError(const QString &driverText /DocValue="''"/ = QString(), const QString &databaseText /DocValue="''"/ = QString(), QSqlError::ErrorType type = QSqlError::NoError, const QString &errorCode = QString());
+%End
+%If (Qt_5_3_0 -)
+    QSqlError(const QString &driverText, const QString &databaseText, QSqlError::ErrorType type, int number);
+%End
+%If (- Qt_5_3_0)
+    QSqlError(const QString &driverText /DocValue="''"/ = QString(), const QString &databaseText /DocValue="''"/ = QString(), QSqlError::ErrorType type = QSqlError::NoError, int number = -1);
+%End
+    QSqlError(const QSqlError &other);
+    ~QSqlError();
+    QString driverText() const;
+    void setDriverText(const QString &driverText);
+    QString databaseText() const;
+    void setDatabaseText(const QString &databaseText);
+    QSqlError::ErrorType type() const;
+    void setType(QSqlError::ErrorType type);
+    int number() const;
+    void setNumber(int number);
+    QString text() const;
+    bool isValid() const;
+    bool operator==(const QSqlError &other) const;
+    bool operator!=(const QSqlError &other) const;
+%If (Qt_5_3_0 -)
+    QString nativeErrorCode() const;
+%End
+};
diff --git a/sip/QtSql/qsqlfield.sip b/sip/QtSql/qsqlfield.sip
new file mode 100644
index 0000000..22ff30b
--- /dev/null
+++ b/sip/QtSql/qsqlfield.sip
@@ -0,0 +1,68 @@
+// qsqlfield.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlField
+{
+%TypeHeaderCode
+#include <qsqlfield.h>
+%End
+
+public:
+    enum RequiredStatus
+    {
+        Unknown,
+        Optional,
+        Required,
+    };
+
+    QSqlField(const QString &fieldName /DocValue="''"/ = QString(), QVariant::Type type = QVariant::Invalid);
+    QSqlField(const QSqlField &other);
+    bool operator==(const QSqlField &other) const;
+    bool operator!=(const QSqlField &other) const;
+    ~QSqlField();
+    void setValue(const QVariant &value);
+    QVariant value() const;
+    void setName(const QString &name);
+    QString name() const;
+    bool isNull() const;
+    void setReadOnly(bool readOnly);
+    bool isReadOnly() const;
+    void clear();
+    QVariant::Type type() const;
+    bool isAutoValue() const;
+    void setType(QVariant::Type type);
+    void setRequiredStatus(QSqlField::RequiredStatus status);
+    void setRequired(bool required);
+    void setLength(int fieldLength);
+    void setPrecision(int precision);
+    void setDefaultValue(const QVariant &value);
+    void setSqlType(int type);
+    void setGenerated(bool gen);
+    void setAutoValue(bool autoVal);
+    QSqlField::RequiredStatus requiredStatus() const;
+    int length() const;
+    int precision() const;
+    QVariant defaultValue() const;
+    int typeID() const;
+    bool isGenerated() const;
+    bool isValid() const;
+};
diff --git a/sip/QtSql/qsqlindex.sip b/sip/QtSql/qsqlindex.sip
new file mode 100644
index 0000000..cd391bf
--- /dev/null
+++ b/sip/QtSql/qsqlindex.sip
@@ -0,0 +1,41 @@
+// qsqlindex.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlIndex : QSqlRecord
+{
+%TypeHeaderCode
+#include <qsqlindex.h>
+%End
+
+public:
+    QSqlIndex(const QString &cursorName /DocValue="''"/ = QString(), const QString &name /DocValue="''"/ = QString());
+    QSqlIndex(const QSqlIndex &other);
+    ~QSqlIndex();
+    void setCursorName(const QString &cursorName);
+    QString cursorName() const;
+    void setName(const QString &name);
+    QString name() const;
+    void append(const QSqlField &field);
+    void append(const QSqlField &field, bool desc);
+    bool isDescending(int i) const;
+    void setDescending(int i, bool desc);
+};
diff --git a/sip/QtSql/qsqlquery.sip b/sip/QtSql/qsqlquery.sip
new file mode 100644
index 0000000..79051c4
--- /dev/null
+++ b/sip/QtSql/qsqlquery.sip
@@ -0,0 +1,85 @@
+// qsqlquery.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlQuery
+{
+%TypeHeaderCode
+#include <qsqlquery.h>
+%End
+
+public:
+    enum BatchExecutionMode
+    {
+        ValuesAsRows,
+        ValuesAsColumns,
+    };
+
+    explicit QSqlQuery(QSqlResult *r);
+    QSqlQuery(const QString &query /DocValue="''"/ = QString(), QSqlDatabase db = QSqlDatabase()) /ReleaseGIL/;
+    explicit QSqlQuery(QSqlDatabase db);
+    QSqlQuery(const QSqlQuery &other);
+    ~QSqlQuery();
+    bool isValid() const;
+    bool isActive() const;
+    bool isNull(int field) const;
+%If (Qt_5_3_0 -)
+    bool isNull(const QString &name) const;
+%End
+    int at() const;
+    QString lastQuery() const;
+    int numRowsAffected() const;
+    QSqlError lastError() const;
+    bool isSelect() const;
+    int size() const;
+    const QSqlDriver *driver() const;
+    const QSqlResult *result() const;
+    bool isForwardOnly() const;
+    QSqlRecord record() const;
+    void setForwardOnly(bool forward);
+    bool exec(const QString &query) /PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    bool exec(const QString &query) /ReleaseGIL/;
+%End
+    QVariant value(int i) const;
+    QVariant value(const QString &name) const;
+    bool seek(int index, bool relative = false) /ReleaseGIL/;
+    bool next() /ReleaseGIL/;
+    bool previous() /ReleaseGIL/;
+    bool first() /ReleaseGIL/;
+    bool last() /ReleaseGIL/;
+    void clear() /ReleaseGIL/;
+    bool exec() /PyName=exec_,ReleaseGIL/;
+    bool execBatch(QSqlQuery::BatchExecutionMode mode = QSqlQuery::ValuesAsRows);
+    bool prepare(const QString &query) /ReleaseGIL/;
+    void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType type = QSql::In);
+    void bindValue(int pos, const QVariant &val, QSql::ParamType type = QSql::In);
+    void addBindValue(const QVariant &val, QSql::ParamType type = QSql::In);
+    QVariant boundValue(const QString &placeholder) const;
+    QVariant boundValue(int pos) const;
+    QMap<QString, QVariant> boundValues() const;
+    QString executedQuery() const;
+    QVariant lastInsertId() const;
+    void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy);
+    QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const;
+    void finish();
+    bool nextResult();
+};
diff --git a/sip/QtSql/qsqlquerymodel.sip b/sip/QtSql/qsqlquerymodel.sip
new file mode 100644
index 0000000..57b3e99
--- /dev/null
+++ b/sip/QtSql/qsqlquerymodel.sip
@@ -0,0 +1,63 @@
+// qsqlquerymodel.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlQueryModel : QAbstractTableModel
+{
+%TypeHeaderCode
+#include <qsqlquerymodel.h>
+%End
+
+public:
+    explicit QSqlQueryModel(QObject *parent /TransferThis/ = 0);
+    virtual ~QSqlQueryModel();
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
+    QSqlRecord record(int row) const;
+    QSqlRecord record() const;
+    virtual QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const;
+    virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+    virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole);
+    virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    void setQuery(const QSqlQuery &query);
+    void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase());
+    QSqlQuery query() const;
+    virtual void clear();
+    QSqlError lastError() const;
+    virtual void fetchMore(const QModelIndex &parent = QModelIndex());
+    virtual bool canFetchMore(const QModelIndex &parent = QModelIndex()) const;
+
+protected:
+    virtual void queryChange();
+    virtual QModelIndex indexInQuery(const QModelIndex &item) const;
+    void setLastError(const QSqlError &error);
+    void beginResetModel();
+    void endResetModel();
+    void beginInsertRows(const QModelIndex &parent, int first, int last);
+    void endInsertRows();
+    void beginRemoveRows(const QModelIndex &parent, int first, int last);
+    void endRemoveRows();
+    void beginInsertColumns(const QModelIndex &parent, int first, int last);
+    void endInsertColumns();
+    void beginRemoveColumns(const QModelIndex &parent, int first, int last);
+    void endRemoveColumns();
+};
diff --git a/sip/QtSql/qsqlrecord.sip b/sip/QtSql/qsqlrecord.sip
new file mode 100644
index 0000000..9f1f53b
--- /dev/null
+++ b/sip/QtSql/qsqlrecord.sip
@@ -0,0 +1,63 @@
+// qsqlrecord.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlRecord
+{
+%TypeHeaderCode
+#include <qsqlrecord.h>
+%End
+
+public:
+    QSqlRecord();
+    QSqlRecord(const QSqlRecord &other);
+    ~QSqlRecord();
+    bool operator==(const QSqlRecord &other) const;
+    bool operator!=(const QSqlRecord &other) const;
+    QVariant value(int i) const;
+    QVariant value(const QString &name) const;
+    void setValue(int i, const QVariant &val);
+    void setValue(const QString &name, const QVariant &val);
+    void setNull(int i);
+    void setNull(const QString &name);
+    bool isNull(int i) const;
+    bool isNull(const QString &name) const;
+    int indexOf(const QString &name) const;
+    QString fieldName(int i) const;
+    QSqlField field(int i) const;
+    QSqlField field(const QString &name) const;
+    bool isGenerated(int i) const;
+    bool isGenerated(const QString &name) const;
+    void setGenerated(const QString &name, bool generated);
+    void setGenerated(int i, bool generated);
+    void append(const QSqlField &field);
+    void replace(int pos, const QSqlField &field);
+    void insert(int pos, const QSqlField &field);
+    void remove(int pos);
+    bool isEmpty() const;
+    bool contains(const QString &name) const;
+    void clear();
+    void clearValues();
+    int count() const /__len__/;
+%If (Qt_5_1_0 -)
+    QSqlRecord keyValues(const QSqlRecord &keyFields) const;
+%End
+};
diff --git a/sip/QtSql/qsqlrelationaldelegate.sip b/sip/QtSql/qsqlrelationaldelegate.sip
new file mode 100644
index 0000000..65b9997
--- /dev/null
+++ b/sip/QtSql/qsqlrelationaldelegate.sip
@@ -0,0 +1,34 @@
+// qsqlrelationaldelegate.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlRelationalDelegate : QItemDelegate
+{
+%TypeHeaderCode
+#include <qsqlrelationaldelegate.h>
+%End
+
+public:
+    explicit QSqlRelationalDelegate(QObject *parent /TransferThis/ = 0);
+    virtual ~QSqlRelationalDelegate();
+    virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/;
+    virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const;
+};
diff --git a/sip/QtSql/qsqlrelationaltablemodel.sip b/sip/QtSql/qsqlrelationaltablemodel.sip
new file mode 100644
index 0000000..677314b
--- /dev/null
+++ b/sip/QtSql/qsqlrelationaltablemodel.sip
@@ -0,0 +1,72 @@
+// qsqlrelationaltablemodel.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlRelation
+{
+%TypeHeaderCode
+#include <qsqlrelationaltablemodel.h>
+%End
+
+public:
+    QSqlRelation();
+    QSqlRelation(const QString &aTableName, const QString &indexCol, const QString &displayCol);
+    QString tableName() const;
+    QString indexColumn() const;
+    QString displayColumn() const;
+    bool isValid() const;
+};
+
+class QSqlRelationalTableModel : QSqlTableModel
+{
+%TypeHeaderCode
+#include <qsqlrelationaltablemodel.h>
+%End
+
+public:
+    QSqlRelationalTableModel(QObject *parent /TransferThis/ = 0, QSqlDatabase db = QSqlDatabase());
+    virtual ~QSqlRelationalTableModel();
+    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+    virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+    virtual void clear();
+    virtual bool select();
+    virtual void setTable(const QString &tableName);
+    virtual void setRelation(int column, const QSqlRelation &relation);
+    QSqlRelation relation(int column) const;
+    virtual QSqlTableModel *relationModel(int column) const;
+    virtual void revertRow(int row);
+    virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+
+protected:
+    virtual QString selectStatement() const;
+    virtual bool updateRowInTable(int row, const QSqlRecord &values);
+    virtual QString orderByClause() const;
+    virtual bool insertRowIntoTable(const QSqlRecord &values);
+
+public:
+    enum JoinMode
+    {
+        InnerJoin,
+        LeftJoin,
+    };
+
+    void setJoinMode(QSqlRelationalTableModel::JoinMode joinMode);
+};
diff --git a/sip/QtSql/qsqlresult.sip b/sip/QtSql/qsqlresult.sip
new file mode 100644
index 0000000..c76c082
--- /dev/null
+++ b/sip/QtSql/qsqlresult.sip
@@ -0,0 +1,90 @@
+// qsqlresult.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlResult /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qsqlresult.h>
+%End
+
+public:
+    virtual ~QSqlResult();
+    virtual QVariant handle() const;
+
+protected:
+    enum BindingSyntax
+    {
+        PositionalBinding,
+        NamedBinding,
+    };
+
+    explicit QSqlResult(const QSqlDriver *db);
+    int at() const;
+    QString lastQuery() const;
+    QSqlError lastError() const;
+    bool isValid() const;
+    bool isActive() const;
+    bool isSelect() const;
+    bool isForwardOnly() const;
+    const QSqlDriver *driver() const;
+    virtual void setAt(int at);
+    virtual void setActive(bool a);
+    virtual void setLastError(const QSqlError &e);
+    virtual void setQuery(const QString &query);
+    virtual void setSelect(bool s);
+    virtual void setForwardOnly(bool forward);
+    virtual bool exec() /PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    virtual bool exec() /ReleaseGIL/;
+%End
+    virtual bool prepare(const QString &query) /ReleaseGIL/;
+    virtual bool savePrepare(const QString &sqlquery);
+    virtual void bindValue(int pos, const QVariant &val, QSql::ParamType type);
+    virtual void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType type);
+    void addBindValue(const QVariant &val, QSql::ParamType type);
+    QVariant boundValue(const QString &placeholder) const;
+    QVariant boundValue(int pos) const;
+    QSql::ParamType bindValueType(const QString &placeholder) const;
+    QSql::ParamType bindValueType(int pos) const;
+    int boundValueCount() const;
+    QVector<QVariant> &boundValues() const;
+    QString executedQuery() const;
+    QString boundValueName(int pos) const;
+    void clear();
+    bool hasOutValues() const;
+    QSqlResult::BindingSyntax bindingSyntax() const;
+    virtual QVariant data(int i) = 0;
+    virtual bool isNull(int i) = 0;
+    virtual bool reset(const QString &sqlquery) = 0;
+    virtual bool fetch(int i) = 0 /ReleaseGIL/;
+    virtual bool fetchNext() /ReleaseGIL/;
+    virtual bool fetchPrevious() /ReleaseGIL/;
+    virtual bool fetchFirst() = 0 /ReleaseGIL/;
+    virtual bool fetchLast() = 0 /ReleaseGIL/;
+    virtual int size() = 0;
+    virtual int numRowsAffected() = 0;
+    virtual QSqlRecord record() const;
+    virtual QVariant lastInsertId() const;
+
+private:
+    QSqlResult(const QSqlResult &);
+};
diff --git a/sip/QtSql/qsqltablemodel.sip b/sip/QtSql/qsqltablemodel.sip
new file mode 100644
index 0000000..9a34faa
--- /dev/null
+++ b/sip/QtSql/qsqltablemodel.sip
@@ -0,0 +1,97 @@
+// qsqltablemodel.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSql Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSqlTableModel : QSqlQueryModel
+{
+%TypeHeaderCode
+#include <qsqltablemodel.h>
+%End
+
+public:
+    enum EditStrategy
+    {
+        OnFieldChange,
+        OnRowChange,
+        OnManualSubmit,
+    };
+
+    QSqlTableModel(QObject *parent /TransferThis/ = 0, QSqlDatabase db = QSqlDatabase());
+    virtual ~QSqlTableModel();
+    virtual bool select();
+    virtual void setTable(const QString &tableName);
+    QString tableName() const;
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+    virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+    virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+    bool isDirty(const QModelIndex &index) const;
+    bool isDirty() const;
+    virtual void clear();
+    virtual void setEditStrategy(QSqlTableModel::EditStrategy strategy);
+    QSqlTableModel::EditStrategy editStrategy() const;
+    QSqlIndex primaryKey() const;
+    QSqlDatabase database() const;
+    int fieldIndex(const QString &fieldName) const;
+    virtual void sort(int column, Qt::SortOrder order);
+    virtual void setSort(int column, Qt::SortOrder order);
+    QString filter() const;
+    virtual void setFilter(const QString &filter);
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
+    bool insertRecord(int row, const QSqlRecord &record);
+    bool setRecord(int row, const QSqlRecord &record);
+    virtual void revertRow(int row);
+
+public slots:
+    virtual bool submit();
+    virtual void revert();
+    bool submitAll();
+    void revertAll();
+
+signals:
+    void primeInsert(int row, QSqlRecord &record);
+    void beforeInsert(QSqlRecord &record);
+    void beforeUpdate(int row, QSqlRecord &record);
+    void beforeDelete(int row);
+
+protected:
+    virtual bool updateRowInTable(int row, const QSqlRecord &values);
+    virtual bool insertRowIntoTable(const QSqlRecord &values);
+    virtual bool deleteRowFromTable(int row);
+    virtual QString orderByClause() const;
+    virtual QString selectStatement() const;
+    void setPrimaryKey(const QSqlIndex &key);
+    void setQuery(const QSqlQuery &query);
+    virtual QModelIndex indexInQuery(const QModelIndex &item) const;
+
+public:
+    virtual bool selectRow(int row);
+    QSqlRecord record() const;
+    QSqlRecord record(int row) const;
+
+protected:
+%If (Qt_5_1_0 -)
+    QSqlRecord primaryValues(int row) const;
+%End
+};
diff --git a/sip/QtSvg/QtSvgmod.sip b/sip/QtSvg/QtSvgmod.sip
new file mode 100644
index 0000000..b608f3d
--- /dev/null
+++ b/sip/QtSvg/QtSvgmod.sip
@@ -0,0 +1,53 @@
+// QtSvgmod.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSvg Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtSvg, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtGui/QtGuimod.sip
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qgraphicssvgitem.sip
+%Include qsvggenerator.sip
+%Include qsvgrenderer.sip
+%Include qsvgwidget.sip
diff --git a/sip/QtSvg/qgraphicssvgitem.sip b/sip/QtSvg/qgraphicssvgitem.sip
new file mode 100644
index 0000000..6417f81
--- /dev/null
+++ b/sip/QtSvg/qgraphicssvgitem.sip
@@ -0,0 +1,60 @@
+// qgraphicssvgitem.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSvg Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsSvgItem : QGraphicsObject
+{
+%TypeHeaderCode
+#include <qgraphicssvgitem.h>
+%End
+
+%ConvertToSubClassCode
+    if (sipCpp->type() == 13)
+    {
+        // We need to explicitly cast because of the multiple inheritance.
+        *sipCppRet = static_cast<QGraphicsSvgItem *>(sipCpp);
+        sipType = sipType_QGraphicsSvgItem;
+    }
+    else
+        sipType = 0;
+%End
+
+public:
+    QGraphicsSvgItem(QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsSvgItem(const QString &fileName, QGraphicsItem *parent /TransferThis/ = 0);
+    void setSharedRenderer(QSvgRenderer *renderer /KeepReference/);
+    QSvgRenderer *renderer() const;
+    void setElementId(const QString &id);
+    QString elementId() const;
+    void setMaximumCacheSize(const QSize &size);
+    QSize maximumCacheSize() const;
+    virtual QRectF boundingRect() const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual int type() const;
+
+private:
+    QGraphicsSvgItem(const QGraphicsSvgItem &);
+};
+
+%ModuleHeaderCode
+// This is needed by the %ConvertToSubClassCode.
+#include <qgraphicssvgitem.h>
+%End
diff --git a/sip/QtSvg/qsvggenerator.sip b/sip/QtSvg/qsvggenerator.sip
new file mode 100644
index 0000000..722a91e
--- /dev/null
+++ b/sip/QtSvg/qsvggenerator.sip
@@ -0,0 +1,52 @@
+// qsvggenerator.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSvg Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSvgGenerator : QPaintDevice
+{
+%TypeHeaderCode
+#include <qsvggenerator.h>
+%End
+
+public:
+    QSvgGenerator();
+    virtual ~QSvgGenerator();
+    QSize size() const;
+    void setSize(const QSize &size);
+    QString fileName() const;
+    void setFileName(const QString &fileName);
+    QIODevice *outputDevice() const;
+    void setOutputDevice(QIODevice *outputDevice);
+    int resolution() const;
+    void setResolution(int resolution);
+    QString title() const;
+    void setTitle(const QString &title);
+    QString description() const;
+    void setDescription(const QString &description);
+    QRect viewBox() const;
+    QRectF viewBoxF() const;
+    void setViewBox(const QRect &viewBox);
+    void setViewBox(const QRectF &viewBox);
+
+protected:
+    virtual QPaintEngine *paintEngine() const;
+    virtual int metric(QPaintDevice::PaintDeviceMetric metric) const;
+};
diff --git a/sip/QtSvg/qsvgrenderer.sip b/sip/QtSvg/qsvgrenderer.sip
new file mode 100644
index 0000000..74fc4da
--- /dev/null
+++ b/sip/QtSvg/qsvgrenderer.sip
@@ -0,0 +1,90 @@
+// qsvgrenderer.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSvg Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSvgRenderer : QObject
+{
+%TypeHeaderCode
+#include <qsvgrenderer.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QSvgRenderer, &sipType_QSvgRenderer, -1, 1},
+        {sipName_QSvgWidget, &sipType_QSvgWidget, -1, 2},
+        {sipName_QGraphicsSvgItem, &sipType_QGraphicsSvgItem, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    QSvgRenderer(QObject *parent /TransferThis/ = 0);
+    QSvgRenderer(const QString &filename, QObject *parent /TransferThis/ = 0);
+    QSvgRenderer(const QByteArray &contents, QObject *parent /TransferThis/ = 0);
+    QSvgRenderer(QXmlStreamReader *contents, QObject *parent /TransferThis/ = 0);
+    virtual ~QSvgRenderer();
+    bool isValid() const;
+    QSize defaultSize() const;
+    bool elementExists(const QString &id) const;
+    QRect viewBox() const;
+    QRectF viewBoxF() const;
+    void setViewBox(const QRect &viewbox);
+    void setViewBox(const QRectF &viewbox);
+    bool animated() const;
+    QRectF boundsOnElement(const QString &id) const;
+    int framesPerSecond() const;
+    void setFramesPerSecond(int num);
+    int currentFrame() const;
+    void setCurrentFrame(int);
+    int animationDuration() const;
+
+public slots:
+    bool load(const QString &filename);
+    bool load(const QByteArray &contents);
+    bool load(QXmlStreamReader *contents);
+    void render(QPainter *p);
+    void render(QPainter *p, const QRectF &bounds);
+    void render(QPainter *painter, const QString &elementId, const QRectF &bounds = QRectF());
+
+signals:
+    void repaintNeeded();
+};
diff --git a/sip/QtSvg/qsvgwidget.sip b/sip/QtSvg/qsvgwidget.sip
new file mode 100644
index 0000000..5eca932
--- /dev/null
+++ b/sip/QtSvg/qsvgwidget.sip
@@ -0,0 +1,45 @@
+// qsvgwidget.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtSvg Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSvgWidget : QWidget
+{
+%TypeHeaderCode
+#include <qsvgwidget.h>
+%End
+
+public:
+    QSvgWidget(QWidget *parent /TransferThis/ = 0);
+    QSvgWidget(const QString &file, QWidget *parent /TransferThis/ = 0);
+    virtual ~QSvgWidget();
+    QSvgRenderer *renderer() const;
+    virtual QSize sizeHint() const;
+
+public slots:
+    void load(const QString &file);
+    void load(const QByteArray &contents);
+
+protected:
+    virtual void paintEvent(QPaintEvent *event);
+
+private:
+    QSvgWidget(const QSvgWidget &);
+};
diff --git a/sip/QtTest/QtTestmod.sip b/sip/QtTest/QtTestmod.sip
new file mode 100644
index 0000000..75ac90d
--- /dev/null
+++ b/sip/QtTest/QtTestmod.sip
@@ -0,0 +1,54 @@
+// QtTestmod.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtTest Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtTest, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qsignalspy.sip
+%Include qtestcase.sip
+%Include qtestkeyboard.sip
+%Include qtestmouse.sip
+%Include qtestsystem.sip
+%Include qtesttouch.sip
diff --git a/sip/QtTest/qsignalspy.sip b/sip/QtTest/qsignalspy.sip
new file mode 100644
index 0000000..6ed55a1
--- /dev/null
+++ b/sip/QtTest/qsignalspy.sip
@@ -0,0 +1,100 @@
+// qsignalspy.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtTest Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSignalSpy : QObject
+{
+%TypeHeaderCode
+#include <qsignalspy.h>
+%End
+
+%ConvertToSubClassCode
+    sipType = (sipCpp->inherits("QSignalSpy") ? sipType_QSignalSpy : 0);
+%End
+
+public:
+    QSignalSpy(SIP_PYOBJECT signal /DocType="signal"/) [(const QObject *obj, const char *aSignal)];
+%MethodCode
+        QObject *sender;
+        QByteArray signal_signature;
+        
+        if ((sipError = pyqt5_qttest_get_pyqtsignal_parts(a0, &sender, signal_signature)) == sipErrorNone)
+            sipCpp = new sipQSignalSpy(sender, signal_signature.constData());
+        else if (sipError == sipErrorContinue)
+            sipError = sipBadCallableArg(0, a0);
+%End
+
+    bool isValid() const;
+    QByteArray signal() const;
+    bool wait(int timeout = 5000) /ReleaseGIL/;
+    int __len__() const;
+%MethodCode
+        sipRes = sipCpp->count();
+%End
+
+    QList<QVariant> __getitem__(int i) const;
+%MethodCode
+        SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
+        
+        if (idx < 0)
+            sipIsErr = 1;
+        else
+            sipRes = new QList<QVariant>(sipCpp->at((int)idx));
+%End
+
+    void __setitem__(int i, const QList<QVariant> &value);
+%MethodCode
+        int len = sipCpp->count();
+        
+        if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0)
+            sipIsErr = 1;
+        else
+            (*sipCpp)[a0] = *a1;
+%End
+
+    void __delitem__(int i);
+%MethodCode
+        int len;
+        
+        len = sipCpp->count();
+        
+        if ((a0 = (int)sipConvertFromSequenceIndex(a0, len)) < 0)
+            sipIsErr = 1;
+        else
+            sipCpp->removeAt(a0);
+%End
+};
+
+%ModuleHeaderCode
+// Imports from QtCore.
+typedef sipErrorState (*pyqt5_qttest_get_pyqtsignal_parts_t)(PyObject *, QObject **, QByteArray &);
+extern pyqt5_qttest_get_pyqtsignal_parts_t pyqt5_qttest_get_pyqtsignal_parts;
+%End
+
+%ModuleCode
+// Imports from QtCore.
+pyqt5_qttest_get_pyqtsignal_parts_t pyqt5_qttest_get_pyqtsignal_parts;
+%End
+
+%PostInitialisationCode
+// Imports from QtCore.
+pyqt5_qttest_get_pyqtsignal_parts = (pyqt5_qttest_get_pyqtsignal_parts_t)sipImportSymbol("pyqt5_get_pyqtsignal_parts");
+%End
diff --git a/sip/QtTest/qtestcase.sip b/sip/QtTest/qtestcase.sip
new file mode 100644
index 0000000..b4ea2ac
--- /dev/null
+++ b/sip/QtTest/qtestcase.sip
@@ -0,0 +1,30 @@
+// qtestcase.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtTest Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+namespace QTest
+{
+%TypeHeaderCode
+#include <qtestcase.h>
+%End
+
+    void qSleep(int ms) /ReleaseGIL/;
+};
diff --git a/sip/QtTest/qtestkeyboard.sip b/sip/QtTest/qtestkeyboard.sip
new file mode 100644
index 0000000..21fe802
--- /dev/null
+++ b/sip/QtTest/qtestkeyboard.sip
@@ -0,0 +1,53 @@
+// qtestkeyboard.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtTest Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+namespace QTest
+{
+%TypeHeaderCode
+#include <qtestkeyboard.h>
+%End
+
+    enum KeyAction
+    {
+        Press,
+        Release,
+        Click,
+    };
+
+    void keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyClicks(QWidget *widget, const QString &sequence, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyEvent(QTest::KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyEvent(QTest::KeyAction action, QWindow *window, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyEvent(QTest::KeyAction action, QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyClick(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyClick(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyRelease(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyRelease(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyPress(QWindow *window, char key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+    void keyPress(QWindow *window, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay = -1);
+};
diff --git a/sip/QtTest/qtestmouse.sip b/sip/QtTest/qtestmouse.sip
new file mode 100644
index 0000000..bb1bc59
--- /dev/null
+++ b/sip/QtTest/qtestmouse.sip
@@ -0,0 +1,51 @@
+// qtestmouse.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtTest Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+namespace QTest
+{
+%TypeHeaderCode
+#include <qtestmouse.h>
+%End
+
+    enum MouseAction
+    {
+        MousePress,
+        MouseRelease,
+        MouseClick,
+        MouseDClick,
+        MouseMove,
+    };
+
+    void mouseClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1);
+    void mouseDClick(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1);
+    void mouseMove(QWidget *widget, QPoint pos = QPoint(), int delay = -1);
+    void mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1);
+    void mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1);
+    void mouseEvent(QTest::MouseAction action, QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier, QPoint pos, int delay = -1);
+    void waitForEvents() /ReleaseGIL/;
+    void mouseEvent(QTest::MouseAction action, QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier, QPoint pos, int delay = -1);
+    void mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1);
+    void mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1);
+    void mouseClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1);
+    void mouseDClick(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1);
+    void mouseMove(QWindow *window, QPoint pos = QPoint(), int delay = -1);
+};
diff --git a/sip/QtTest/qtestsystem.sip b/sip/QtTest/qtestsystem.sip
new file mode 100644
index 0000000..d1431e9
--- /dev/null
+++ b/sip/QtTest/qtestsystem.sip
@@ -0,0 +1,44 @@
+// qtestsystem.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtTest Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+namespace QTest
+{
+%TypeHeaderCode
+#include <qtestsystem.h>
+%End
+
+    void qWait(int ms) /ReleaseGIL/;
+%If (Qt_5_1_0 -)
+    bool qWaitForWindowActive(QWindow *window, int timeout = 5000) /ReleaseGIL/;
+%End
+%If (- Qt_5_1_0)
+    bool qWaitForWindowActive(QWindow *window, int timeout = 1000) /ReleaseGIL/;
+%End
+%If (Qt_5_1_0 -)
+    bool qWaitForWindowExposed(QWindow *window, int timeout = 5000) /ReleaseGIL/;
+%End
+%If (- Qt_5_1_0)
+    bool qWaitForWindowExposed(QWindow *window, int timeout = 1000) /ReleaseGIL/;
+%End
+    bool qWaitForWindowActive(QWidget *widget, int timeout = 1000) /ReleaseGIL/;
+    bool qWaitForWindowExposed(QWidget *widget, int timeout = 1000) /ReleaseGIL/;
+};
diff --git a/sip/QtTest/qtesttouch.sip b/sip/QtTest/qtesttouch.sip
new file mode 100644
index 0000000..165b522
--- /dev/null
+++ b/sip/QtTest/qtesttouch.sip
@@ -0,0 +1,62 @@
+// qtesttouch.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtTest Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+namespace QTest
+{
+%TypeHeaderCode
+#include <qtesttouch.h>
+%End
+
+    class QTouchEventSequence
+    {
+%TypeHeaderCode
+#include <qtesttouch.h>
+%End
+
+    public:
+        ~QTouchEventSequence();
+        QTest::QTouchEventSequence &press(int touchId, const QPoint &pt, QWindow *window = 0);
+        QTest::QTouchEventSequence &move(int touchId, const QPoint &pt, QWindow *window = 0);
+        QTest::QTouchEventSequence &release(int touchId, const QPoint &pt, QWindow *window = 0);
+        QTest::QTouchEventSequence &stationary(int touchId);
+        QTest::QTouchEventSequence &press(int touchId, const QPoint &pt, QWidget *widget) [QTest::QTouchEventSequence & (int touchId, const QPoint &pt, QWidget *widget = 0)];
+        QTest::QTouchEventSequence &move(int touchId, const QPoint &pt, QWidget *widget) [QTest::QTouchEventSequence & (int touchId, const QPoint &pt, QWidget *widget = 0)];
+        QTest::QTouchEventSequence &release(int touchId, const QPoint &pt, QWidget *widget) [QTest::QTouchEventSequence & (int touchId, const QPoint &pt, QWidget *widget = 0)];
+        void commit(bool processEvents = true) /ReleaseGIL/;
+
+    private:
+        QTouchEventSequence(QWidget *widget, QTouchDevice *aDevice, bool autoCommit);
+        QTouchEventSequence(QWindow *window, QTouchDevice *aDevice, bool autoCommit);
+    };
+
+    QTest::QTouchEventSequence touchEvent(QWidget *widget, QTouchDevice *device);
+%MethodCode
+        // Disable auto-committing so that we can copy the instance around.
+        sipRes = new QTest::QTouchEventSequence(QTest::touchEvent(a0, a1, false));
+%End
+
+    QTest::QTouchEventSequence touchEvent(QWindow *window, QTouchDevice *device);
+%MethodCode
+        // Disable auto-committing so that we can copy the instance around.
+        sipRes = new QTest::QTouchEventSequence(QTest::touchEvent(a0, a1, false));
+%End
+};
diff --git a/sip/QtWebKit/QtWebKitmod.sip b/sip/QtWebKit/QtWebKitmod.sip
new file mode 100644
index 0000000..377c303
--- /dev/null
+++ b/sip/QtWebKit/QtWebKitmod.sip
@@ -0,0 +1,57 @@
+// QtWebKitmod.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtWebKit Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtWebKit, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtGui/QtGuimod.sip
+%Import QtNetwork/QtNetworkmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qwebdatabase.sip
+%Include qwebelement.sip
+%Include qwebkitglobal.sip
+%Include qwebhistory.sip
+%Include qwebhistoryinterface.sip
+%Include qwebpluginfactory.sip
+%Include qwebsecurityorigin.sip
+%Include qwebsettings.sip
diff --git a/sip/QtWebKit/qwebdatabase.sip b/sip/QtWebKit/qwebdatabase.sip
new file mode 100644
index 0000000..07f5d5b
--- /dev/null
+++ b/sip/QtWebKit/qwebdatabase.sip
@@ -0,0 +1,40 @@
+// qwebdatabase.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtWebKit Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWebDatabase
+{
+%TypeHeaderCode
+#include <qwebdatabase.h>
+%End
+
+public:
+    QWebDatabase(const QWebDatabase &other);
+    ~QWebDatabase();
+    QString name() const;
+    QString displayName() const;
+    qint64 expectedSize() const;
+    qint64 size() const;
+    QString fileName() const;
+    QWebSecurityOrigin origin() const;
+    static void removeDatabase(const QWebDatabase &db);
+    static void removeAllDatabases();
+};
diff --git a/sip/QtWebKit/qwebelement.sip b/sip/QtWebKit/qwebelement.sip
new file mode 100644
index 0000000..c68c689
--- /dev/null
+++ b/sip/QtWebKit/qwebelement.sip
@@ -0,0 +1,137 @@
+// qwebelement.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtWebKit Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWebFrame /External/;
+
+class QWebElement
+{
+%TypeHeaderCode
+#include <qwebelement.h>
+%End
+
+public:
+    QWebElement();
+    QWebElement(const QWebElement &);
+    ~QWebElement();
+    bool operator==(const QWebElement &o) const;
+    bool operator!=(const QWebElement &o) const;
+    bool isNull() const;
+    QWebElementCollection findAll(const QString &selectorQuery) const;
+    QWebElement findFirst(const QString &selectorQuery) const;
+    void setPlainText(const QString &text);
+    QString toPlainText() const;
+    void setOuterXml(const QString &markup);
+    QString toOuterXml() const;
+    void setInnerXml(const QString &markup);
+    QString toInnerXml() const;
+    void setAttribute(const QString &name, const QString &value);
+    void setAttributeNS(const QString &namespaceUri, const QString &name, const QString &value);
+    QString attribute(const QString &name, const QString &defaultValue = QString()) const;
+    QString attributeNS(const QString &namespaceUri, const QString &name, const QString &defaultValue = QString()) const;
+    bool hasAttribute(const QString &name) const;
+    bool hasAttributeNS(const QString &namespaceUri, const QString &name) const;
+    void removeAttribute(const QString &name);
+    void removeAttributeNS(const QString &namespaceUri, const QString &name);
+    bool hasAttributes() const;
+    QStringList attributeNames(const QString &namespaceUri = QString()) const;
+    QStringList classes() const;
+    bool hasClass(const QString &name) const;
+    void addClass(const QString &name);
+    void removeClass(const QString &name);
+    void toggleClass(const QString &name);
+    bool hasFocus() const;
+    void setFocus();
+    QRect geometry() const;
+    QString tagName() const;
+    QString prefix() const;
+    QString localName() const;
+    QString namespaceUri() const;
+    QWebElement parent() const;
+    QWebElement firstChild() const;
+    QWebElement lastChild() const;
+    QWebElement nextSibling() const;
+    QWebElement previousSibling() const;
+    QWebElement document() const;
+    QWebFrame *webFrame() const;
+    void appendInside(const QString &markup);
+    void appendInside(const QWebElement &element);
+    void prependInside(const QString &markup);
+    void prependInside(const QWebElement &element);
+    void appendOutside(const QString &markup);
+    void appendOutside(const QWebElement &element);
+    void prependOutside(const QString &markup);
+    void prependOutside(const QWebElement &element);
+    void encloseContentsWith(const QWebElement &element);
+    void encloseContentsWith(const QString &markup);
+    void encloseWith(const QString &markup);
+    void encloseWith(const QWebElement &element);
+    void replace(const QString &markup);
+    void replace(const QWebElement &element);
+    QWebElement clone() const;
+    QWebElement &takeFromDocument();
+    void removeFromDocument();
+    void removeAllChildren();
+    QVariant evaluateJavaScript(const QString &scriptSource);
+
+    enum StyleResolveStrategy
+    {
+        InlineStyle,
+        CascadedStyle,
+        ComputedStyle,
+    };
+
+    QString styleProperty(const QString &name, QWebElement::StyleResolveStrategy strategy) const;
+    void setStyleProperty(const QString &name, const QString &value);
+    void render(QPainter *painter);
+    void render(QPainter *painter, const QRect &clip);
+};
+
+class QWebElementCollection
+{
+%TypeHeaderCode
+#include <qwebelement.h>
+%End
+
+public:
+    QWebElementCollection();
+    QWebElementCollection(const QWebElement &contextElement, const QString &query);
+    QWebElementCollection(const QWebElementCollection &);
+    ~QWebElementCollection();
+    QWebElementCollection operator+(const QWebElementCollection &other) const;
+    QWebElementCollection &operator+=(const QWebElementCollection &other);
+    void append(const QWebElementCollection &collection);
+    int count() const /__len__/;
+    QWebElement at(int i) const;
+    QWebElement operator[](int i) const;
+%MethodCode
+        SIP_SSIZE_T idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
+        
+        if (idx < 0)
+            sipIsErr = 1;
+        else
+            sipRes = new QWebElement(sipCpp->operator[]((int)idx));
+%End
+
+    QWebElement first() const;
+    QWebElement last() const;
+    QList<QWebElement> toList() const;
+};
diff --git a/sip/QtWebKit/qwebhistory.sip b/sip/QtWebKit/qwebhistory.sip
new file mode 100644
index 0000000..75e5cf4
--- /dev/null
+++ b/sip/QtWebKit/qwebhistory.sip
@@ -0,0 +1,80 @@
+// qwebhistory.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtWebKit Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qwebhistory.h>
+%End
+
+class QWebHistoryItem
+{
+%TypeHeaderCode
+#include <qwebhistory.h>
+%End
+
+public:
+    QWebHistoryItem(const QWebHistoryItem &other);
+    ~QWebHistoryItem();
+    QUrl originalUrl() const;
+    QUrl url() const;
+    QString title() const;
+    QDateTime lastVisited() const;
+    QIcon icon() const;
+    QVariant userData() const;
+    void setUserData(const QVariant &userData);
+    bool isValid() const;
+};
+
+class QWebHistory
+{
+%TypeHeaderCode
+#include <qwebhistory.h>
+%End
+
+public:
+    void clear();
+    QList<QWebHistoryItem> items() const;
+    QList<QWebHistoryItem> backItems(int maxItems) const;
+    QList<QWebHistoryItem> forwardItems(int maxItems) const;
+    bool canGoBack() const;
+    bool canGoForward() const;
+    void back();
+    void forward();
+    void goToItem(const QWebHistoryItem &item);
+    QWebHistoryItem backItem() const;
+    QWebHistoryItem currentItem() const;
+    QWebHistoryItem forwardItem() const;
+    QWebHistoryItem itemAt(int i) const;
+    int count() const /__len__/;
+
+private:
+    QWebHistory();
+    QWebHistory(const QWebHistory &);
+    ~QWebHistory();
+
+public:
+    int currentItemIndex() const;
+    int maximumItemCount() const;
+    void setMaximumItemCount(int count);
+};
+
+QDataStream &operator<<(QDataStream &, const QWebHistory & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QWebHistory & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtWebKit/qwebhistoryinterface.sip b/sip/QtWebKit/qwebhistoryinterface.sip
new file mode 100644
index 0000000..35d3c02
--- /dev/null
+++ b/sip/QtWebKit/qwebhistoryinterface.sip
@@ -0,0 +1,36 @@
+// qwebhistoryinterface.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtWebKit Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWebHistoryInterface : QObject
+{
+%TypeHeaderCode
+#include <qwebhistoryinterface.h>
+%End
+
+public:
+    QWebHistoryInterface(QObject *parent /TransferThis/ = 0);
+    virtual ~QWebHistoryInterface();
+    static void setDefaultInterface(QWebHistoryInterface *defaultInterface /KeepReference/);
+    static QWebHistoryInterface *defaultInterface();
+    virtual bool historyContains(const QString &url) const = 0;
+    virtual void addHistoryEntry(const QString &url) = 0;
+};
diff --git a/sip/QtWebKit/qwebkitglobal.sip b/sip/QtWebKit/qwebkitglobal.sip
new file mode 100644
index 0000000..3b814c3
--- /dev/null
+++ b/sip/QtWebKit/qwebkitglobal.sip
@@ -0,0 +1,29 @@
+// qwebkitglobal.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtWebKit Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qwebkitglobal.h>
+%End
+
+QString qWebKitVersion();
+int qWebKitMajorVersion();
+int qWebKitMinorVersion();
diff --git a/sip/QtWebKit/qwebpluginfactory.sip b/sip/QtWebKit/qwebpluginfactory.sip
new file mode 100644
index 0000000..2b6578b
--- /dev/null
+++ b/sip/QtWebKit/qwebpluginfactory.sip
@@ -0,0 +1,109 @@
+// qwebpluginfactory.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtWebKit Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWebPluginFactory : QObject
+{
+%TypeHeaderCode
+#include <qwebpluginfactory.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QWebHistoryInterface, &sipType_QWebHistoryInterface, -1, 1},
+        {sipName_QWebPluginFactory, &sipType_QWebPluginFactory, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    struct MimeType
+    {
+%TypeHeaderCode
+#include <qwebpluginfactory.h>
+%End
+
+        QString name;
+        QString description;
+        QStringList fileExtensions;
+        bool operator==(const QWebPluginFactory::MimeType &other) const;
+        bool operator!=(const QWebPluginFactory::MimeType &other) const;
+    };
+
+    struct Plugin
+    {
+%TypeHeaderCode
+#include <qwebpluginfactory.h>
+%End
+
+        QString name;
+        QString description;
+        QList<QWebPluginFactory::MimeType> mimeTypes;
+    };
+
+    explicit QWebPluginFactory(QObject *parent /TransferThis/ = 0);
+    virtual ~QWebPluginFactory();
+    virtual QList<QWebPluginFactory::Plugin> plugins() const = 0;
+    virtual void refreshPlugins();
+    virtual QObject *create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const = 0 /Factory/;
+
+    enum Extension
+    {
+    };
+
+    class ExtensionOption
+    {
+%TypeHeaderCode
+#include <qwebpluginfactory.h>
+%End
+    };
+
+    class ExtensionReturn
+    {
+%TypeHeaderCode
+#include <qwebpluginfactory.h>
+%End
+    };
+
+    virtual bool extension(QWebPluginFactory::Extension extension, const QWebPluginFactory::ExtensionOption *option = 0, QWebPluginFactory::ExtensionReturn *output = 0);
+    virtual bool supportsExtension(QWebPluginFactory::Extension extension) const;
+};
diff --git a/sip/QtWebKit/qwebsecurityorigin.sip b/sip/QtWebKit/qwebsecurityorigin.sip
new file mode 100644
index 0000000..f706d29
--- /dev/null
+++ b/sip/QtWebKit/qwebsecurityorigin.sip
@@ -0,0 +1,62 @@
+// qwebsecurityorigin.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtWebKit Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWebSecurityOrigin
+{
+%TypeHeaderCode
+#include <qwebsecurityorigin.h>
+%End
+
+public:
+%If (Qt_5_2_0 -)
+    explicit QWebSecurityOrigin(const QUrl &url);
+%End
+    QWebSecurityOrigin(const QWebSecurityOrigin &other);
+    ~QWebSecurityOrigin();
+    static QList<QWebSecurityOrigin> allOrigins();
+    QString scheme() const;
+    QString host() const;
+    int port() const;
+    qint64 databaseUsage() const;
+    qint64 databaseQuota() const;
+    void setDatabaseQuota(qint64 quota);
+    QList<QWebDatabase> databases() const;
+    static void addLocalScheme(const QString &scheme);
+    static void removeLocalScheme(const QString &scheme);
+    static QStringList localSchemes();
+    void setApplicationCacheQuota(qint64 quota);
+%If (Qt_5_2_0 -)
+
+    enum SubdomainSetting
+    {
+        AllowSubdomains,
+        DisallowSubdomains,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+    void addAccessWhitelistEntry(const QString &scheme, const QString &host, QWebSecurityOrigin::SubdomainSetting subdomainSetting);
+%End
+%If (Qt_5_2_0 -)
+    void removeAccessWhitelistEntry(const QString &scheme, const QString &host, QWebSecurityOrigin::SubdomainSetting subdomainSetting);
+%End
+};
diff --git a/sip/QtWebKit/qwebsettings.sip b/sip/QtWebKit/qwebsettings.sip
new file mode 100644
index 0000000..35d9a49
--- /dev/null
+++ b/sip/QtWebKit/qwebsettings.sip
@@ -0,0 +1,156 @@
+// qwebsettings.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtWebKit Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWebSettings
+{
+%TypeHeaderCode
+#include <qwebsettings.h>
+%End
+
+public:
+    enum FontFamily
+    {
+        StandardFont,
+        FixedFont,
+        SerifFont,
+        SansSerifFont,
+        CursiveFont,
+        FantasyFont,
+    };
+
+    enum WebAttribute
+    {
+        AutoLoadImages,
+        JavascriptEnabled,
+        JavaEnabled,
+        PluginsEnabled,
+        PrivateBrowsingEnabled,
+        JavascriptCanOpenWindows,
+        JavascriptCanCloseWindows,
+        JavascriptCanAccessClipboard,
+        DeveloperExtrasEnabled,
+        LinksIncludedInFocusChain,
+        ZoomTextOnly,
+        PrintElementBackgrounds,
+        OfflineStorageDatabaseEnabled,
+        OfflineWebApplicationCacheEnabled,
+        LocalStorageDatabaseEnabled,
+        LocalStorageEnabled,
+        LocalContentCanAccessRemoteUrls,
+        DnsPrefetchEnabled,
+        XSSAuditingEnabled,
+        AcceleratedCompositingEnabled,
+        SpatialNavigationEnabled,
+        LocalContentCanAccessFileUrls,
+        TiledBackingStoreEnabled,
+        FrameFlatteningEnabled,
+        SiteSpecificQuirksEnabled,
+        WebGLEnabled,
+        HyperlinkAuditingEnabled,
+        CSSRegionsEnabled,
+        CSSGridLayoutEnabled,
+        ScrollAnimatorEnabled,
+        CaretBrowsingEnabled,
+        NotificationsEnabled,
+%If (Qt_5_2_0 -)
+        WebAudioEnabled,
+%End
+    };
+
+    enum WebGraphic
+    {
+        MissingImageGraphic,
+        MissingPluginGraphic,
+        DefaultFrameIconGraphic,
+        TextAreaSizeGripCornerGraphic,
+        InputSpeechButtonGraphic,
+        SearchCancelButtonGraphic,
+        SearchCancelButtonPressedGraphic,
+    };
+
+    enum FontSize
+    {
+        MinimumFontSize,
+        MinimumLogicalFontSize,
+        DefaultFontSize,
+        DefaultFixedFontSize,
+    };
+
+    static QWebSettings *globalSettings();
+    void setFontFamily(QWebSettings::FontFamily which, const QString &family);
+    QString fontFamily(QWebSettings::FontFamily which) const;
+    void resetFontFamily(QWebSettings::FontFamily which);
+    void setFontSize(QWebSettings::FontSize type, int size);
+    int fontSize(QWebSettings::FontSize type) const;
+    void resetFontSize(QWebSettings::FontSize type);
+    void setAttribute(QWebSettings::WebAttribute attr, bool on);
+    bool testAttribute(QWebSettings::WebAttribute attr) const;
+    void resetAttribute(QWebSettings::WebAttribute attr);
+    void setUserStyleSheetUrl(const QUrl &location);
+    QUrl userStyleSheetUrl() const;
+    static void setIconDatabasePath(const QString &location);
+    static QString iconDatabasePath();
+    static void clearIconDatabase();
+    static QIcon iconForUrl(const QUrl &url);
+    static void setWebGraphic(QWebSettings::WebGraphic type, const QPixmap &graphic);
+    static QPixmap webGraphic(QWebSettings::WebGraphic type);
+    static void setMaximumPagesInCache(int pages);
+    static int maximumPagesInCache();
+    static void setObjectCacheCapacities(int cacheMinDeadCapacity, int cacheMaxDead, int totalCapacity);
+
+private:
+    QWebSettings();
+    QWebSettings(const QWebSettings &);
+    ~QWebSettings();
+
+public:
+    static void setOfflineStoragePath(const QString &path);
+    static QString offlineStoragePath();
+    static void setOfflineStorageDefaultQuota(qint64 maximumSize);
+    static qint64 offlineStorageDefaultQuota();
+    void setDefaultTextEncoding(const QString &encoding);
+    QString defaultTextEncoding() const;
+    static void setOfflineWebApplicationCachePath(const QString &path);
+    static QString offlineWebApplicationCachePath();
+    static void setOfflineWebApplicationCacheQuota(qint64 maximumSize);
+    static qint64 offlineWebApplicationCacheQuota();
+    void setLocalStoragePath(const QString &path);
+    QString localStoragePath() const;
+    static void clearMemoryCaches();
+    static void enablePersistentStorage(const QString &path = QString());
+
+    enum ThirdPartyCookiePolicy
+    {
+        AlwaysAllowThirdPartyCookies,
+        AlwaysBlockThirdPartyCookies,
+        AllowThirdPartyWithExistingCookies,
+    };
+
+    void setThirdPartyCookiePolicy(QWebSettings::ThirdPartyCookiePolicy);
+    QWebSettings::ThirdPartyCookiePolicy thirdPartyCookiePolicy() const;
+%If (Qt_5_1_0 -)
+    void setCSSMediaType(const QString &);
+%End
+%If (Qt_5_1_0 -)
+    QString cssMediaType() const;
+%End
+};
diff --git a/sip/QtWebKitWidgets/QtWebKitWidgetsmod.sip b/sip/QtWebKitWidgets/QtWebKitWidgetsmod.sip
new file mode 100644
index 0000000..704e232
--- /dev/null
+++ b/sip/QtWebKitWidgets/QtWebKitWidgetsmod.sip
@@ -0,0 +1,55 @@
+// QtWebKitWidgetsmod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWebKitWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtWebKitWidgets, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtPrintSupport/QtPrintSupportmod.sip
+%Import QtWebKit/QtWebKitmod.sip
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qgraphicswebview.sip
+%Include qwebframe.sip
+%Include qwebinspector.sip
+%Include qwebpage.sip
+%Include qwebview.sip
diff --git a/sip/QtWebKitWidgets/qgraphicswebview.sip b/sip/QtWebKitWidgets/qgraphicswebview.sip
new file mode 100644
index 0000000..8ac6707
--- /dev/null
+++ b/sip/QtWebKitWidgets/qgraphicswebview.sip
@@ -0,0 +1,130 @@
+// qgraphicswebview.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWebKitWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsWebView : QGraphicsWidget
+{
+%TypeHeaderCode
+#include <qgraphicswebview.h>
+%End
+
+%ConvertToSubClassCode
+    sipType = 0;
+    
+    // For some reason Qt doesn't allocate a new type for this so we have to test
+    // the numeric and QObject types.
+    if (sipCpp->type() == 11)
+    {
+        QGraphicsWidget *gw = static_cast<QGraphicsWidget *>(sipCpp);
+    
+        if (gw->inherits("QGraphicsWebView"))
+        {
+            *sipCppRet = static_cast<QGraphicsWebView *>(gw);
+            sipType = sipType_QGraphicsWebView;
+        }
+    }
+%End
+
+public:
+    explicit QGraphicsWebView(QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsWebView();
+    QWebPage *page() const;
+    void setPage(QWebPage * /KeepReference/);
+    QUrl url() const;
+    void setUrl(const QUrl &);
+    QString title() const;
+    QIcon icon() const;
+    qreal zoomFactor() const;
+    void setZoomFactor(qreal);
+    bool isModified() const;
+    void load(const QUrl &url) /ReleaseGIL/;
+    void load(const QNetworkRequest &request, QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation, const QByteArray &body = QByteArray()) /ReleaseGIL/;
+    void setHtml(const QString &html, const QUrl &baseUrl = QUrl());
+    void setContent(const QByteArray &data, const QString &mimeType = QString(), const QUrl &baseUrl = QUrl());
+    QWebHistory *history() const;
+    QWebSettings *settings() const;
+    QAction *pageAction(QWebPage::WebAction action) const;
+    void triggerPageAction(QWebPage::WebAction action, bool checked = false);
+    bool findText(const QString &subString, QFlags<QWebPage::FindFlag> options = 0);
+    virtual void setGeometry(const QRectF &rect);
+    virtual void updateGeometry();
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value);
+    virtual bool event(QEvent *);
+    virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const;
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
+
+public slots:
+    void stop();
+    void back();
+    void forward();
+    void reload();
+
+signals:
+    void loadStarted();
+    void loadFinished(bool);
+    void loadProgress(int progress);
+    void urlChanged(const QUrl &);
+    void titleChanged(const QString &);
+    void iconChanged();
+    void statusBarMessage(const QString &message);
+    void linkClicked(const QUrl &);
+
+protected:
+    virtual void mousePressEvent(QGraphicsSceneMouseEvent *);
+    virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *);
+    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
+    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *);
+    virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *);
+    virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *);
+    virtual void wheelEvent(QGraphicsSceneWheelEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void keyReleaseEvent(QKeyEvent *);
+    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *);
+    virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *);
+    virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *);
+    virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *);
+    virtual void dropEvent(QGraphicsSceneDragDropEvent *);
+    virtual void focusInEvent(QFocusEvent *);
+    virtual void focusOutEvent(QFocusEvent *);
+    virtual void inputMethodEvent(QInputMethodEvent *);
+    virtual bool focusNextPrevChild(bool next);
+    virtual bool sceneEvent(QEvent *);
+
+public:
+    bool resizesToContents() const;
+    void setResizesToContents(bool enabled);
+    bool isTiledBackingStoreFrozen() const;
+    void setTiledBackingStoreFrozen(bool frozen);
+    QFlags<QPainter::RenderHint> renderHints() const;
+    void setRenderHints(QFlags<QPainter::RenderHint> hints);
+    void setRenderHint(QPainter::RenderHint hint, bool enabled = true);
+};
+
+%ModuleHeaderCode
+// This is needed by the %ConvertSubClassCode.
+#include <QGraphicsWebView>
+
+// This is needed for Qt v5.0.0.
+#if defined(B0)
+#undef B0
+#endif
+%End
diff --git a/sip/QtWebKitWidgets/qwebframe.sip b/sip/QtWebKitWidgets/qwebframe.sip
new file mode 100644
index 0000000..33cdab1
--- /dev/null
+++ b/sip/QtWebKitWidgets/qwebframe.sip
@@ -0,0 +1,160 @@
+// qwebframe.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWebKitWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qwebframe.h>
+%End
+
+class QWebHitTestResult
+{
+%TypeHeaderCode
+#include <qwebframe.h>
+%End
+
+public:
+    QWebHitTestResult();
+    QWebHitTestResult(const QWebHitTestResult &other);
+    ~QWebHitTestResult();
+    bool isNull() const;
+    QPoint pos() const;
+    QString title() const;
+    QString linkText() const;
+    QUrl linkUrl() const;
+    QUrl linkTitle() const;
+    QWebFrame *linkTargetFrame() const;
+    QString alternateText() const;
+    QUrl imageUrl() const;
+    QPixmap pixmap() const;
+    bool isContentEditable() const;
+    bool isContentSelected() const;
+    QWebFrame *frame() const;
+    QRect boundingRect() const;
+    QWebElement enclosingBlockElement() const;
+    QWebElement linkElement() const;
+    QWebElement element() const;
+%If (Qt_5_2_0 -)
+    QUrl mediaUrl() const;
+%End
+};
+
+class QWebFrame : QObject /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qwebframe.h>
+%End
+
+    virtual ~QWebFrame();
+
+public:
+    QWebPage *page() const;
+    void load(const QUrl &url);
+    void load(const QNetworkRequest &request, QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation, const QByteArray &body = QByteArray());
+    void setHtml(const QString &html, const QUrl &baseUrl = QUrl());
+    void setContent(const QByteArray &data, const QString &mimeType /DocValue="''"/ = QString(), const QUrl &baseUrl = QUrl());
+
+    enum ValueOwnership
+    {
+        QtOwnership,
+        ScriptOwnership,
+        AutoOwnership,
+    };
+
+    void addToJavaScriptWindowObject(const QString &name, QObject *object, QWebFrame::ValueOwnership ownership = QWebFrame::QtOwnership);
+    QString toHtml() const;
+    QString toPlainText() const;
+    QString title() const;
+    void setUrl(const QUrl &url);
+    QUrl url() const;
+    QIcon icon() const;
+    QString frameName() const;
+    QWebFrame *parentFrame() const;
+    QList<QWebFrame*> childFrames() const;
+    Qt::ScrollBarPolicy scrollBarPolicy(Qt::Orientation orientation) const;
+    void setScrollBarPolicy(Qt::Orientation orientation, Qt::ScrollBarPolicy policy);
+    void setScrollBarValue(Qt::Orientation orientation, int value);
+    int scrollBarValue(Qt::Orientation orientation) const;
+    int scrollBarMinimum(Qt::Orientation orientation) const;
+    int scrollBarMaximum(Qt::Orientation orientation) const;
+    QPoint pos() const;
+    QRect geometry() const;
+    QSize contentsSize() const;
+    QWebHitTestResult hitTestContent(const QPoint &pos) const;
+    virtual bool event(QEvent *);
+
+public slots:
+    QVariant evaluateJavaScript(const QString &scriptSource);
+%If (PyQt_Printer)
+    void print(QPrinter *printer) const /PyName=print_/;
+%End
+%If (Py_v3)
+%If (PyQt_Printer)
+    void print(QPrinter *printer) const;
+%End
+%End
+
+signals:
+    void javaScriptWindowObjectCleared();
+    void titleChanged(const QString &title);
+    void urlChanged(const QUrl &url);
+    void initialLayoutCompleted();
+    void iconChanged();
+
+public:
+    QMultiMap<QString, QString> metaData() const;
+    void scroll(int, int);
+    QPoint scrollPosition() const;
+    void setScrollPosition(const QPoint &pos);
+    qreal zoomFactor() const;
+    void setZoomFactor(qreal factor);
+    QWebSecurityOrigin securityOrigin() const;
+    QUrl requestedUrl() const;
+    QUrl baseUrl() const;
+    QRect scrollBarGeometry(Qt::Orientation orientation) const;
+
+    enum RenderLayer
+    {
+        ContentsLayer,
+        ScrollBarLayer,
+        PanIconLayer,
+        AllLayers,
+    };
+
+    typedef QFlags<QWebFrame::RenderLayer> RenderLayers;
+    void render(QPainter *, const QRegion &clip = QRegion());
+    void render(QPainter *, QFlags<QWebFrame::RenderLayer> layer, const QRegion &clip = QRegion());
+    bool hasFocus() const;
+    void setFocus();
+    QWebElement documentElement() const;
+    QWebElementCollection findAllElements(const QString &selectorQuery) const;
+    QWebElement findFirstElement(const QString &selectorQuery) const;
+
+signals:
+    void contentsSizeChanged(const QSize &size);
+    void loadStarted();
+    void loadFinished(bool ok);
+    void pageChanged();
+
+public:
+    void scrollToAnchor(const QString &anchor);
+};
+
+QFlags<QWebFrame::RenderLayer> operator|(QWebFrame::RenderLayer f1, QFlags<QWebFrame::RenderLayer> f2);
diff --git a/sip/QtWebKitWidgets/qwebinspector.sip b/sip/QtWebKitWidgets/qwebinspector.sip
new file mode 100644
index 0000000..722430f
--- /dev/null
+++ b/sip/QtWebKitWidgets/qwebinspector.sip
@@ -0,0 +1,42 @@
+// qwebinspector.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWebKitWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWebInspector : QWidget
+{
+%TypeHeaderCode
+#include <qwebinspector.h>
+%End
+
+public:
+    QWebInspector(QWidget *parent /TransferThis/ = 0);
+    virtual ~QWebInspector();
+    void setPage(QWebPage *page /KeepReference/);
+    QWebPage *page() const;
+    virtual QSize sizeHint() const;
+    virtual bool event(QEvent *);
+
+protected:
+    virtual void resizeEvent(QResizeEvent *event);
+    virtual void showEvent(QShowEvent *event);
+    virtual void hideEvent(QHideEvent *event);
+    virtual void closeEvent(QCloseEvent *event);
+};
diff --git a/sip/QtWebKitWidgets/qwebpage.sip b/sip/QtWebKitWidgets/qwebpage.sip
new file mode 100644
index 0000000..755e5a6
--- /dev/null
+++ b/sip/QtWebKitWidgets/qwebpage.sip
@@ -0,0 +1,432 @@
+// qwebpage.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWebKitWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qwebpage.h>
+%End
+
+class QWebPage : QObject
+{
+%TypeHeaderCode
+#include <qwebpage.h>
+%End
+
+public:
+    enum NavigationType
+    {
+        NavigationTypeLinkClicked,
+        NavigationTypeFormSubmitted,
+        NavigationTypeBackOrForward,
+        NavigationTypeReload,
+        NavigationTypeFormResubmitted,
+        NavigationTypeOther,
+    };
+
+    enum WebAction
+    {
+        NoWebAction,
+        OpenLink,
+        OpenLinkInNewWindow,
+        OpenFrameInNewWindow,
+        DownloadLinkToDisk,
+        CopyLinkToClipboard,
+        OpenImageInNewWindow,
+        DownloadImageToDisk,
+        CopyImageToClipboard,
+        Back,
+        Forward,
+        Stop,
+        Reload,
+        Cut,
+        Copy,
+        Paste,
+        Undo,
+        Redo,
+        MoveToNextChar,
+        MoveToPreviousChar,
+        MoveToNextWord,
+        MoveToPreviousWord,
+        MoveToNextLine,
+        MoveToPreviousLine,
+        MoveToStartOfLine,
+        MoveToEndOfLine,
+        MoveToStartOfBlock,
+        MoveToEndOfBlock,
+        MoveToStartOfDocument,
+        MoveToEndOfDocument,
+        SelectNextChar,
+        SelectPreviousChar,
+        SelectNextWord,
+        SelectPreviousWord,
+        SelectNextLine,
+        SelectPreviousLine,
+        SelectStartOfLine,
+        SelectEndOfLine,
+        SelectStartOfBlock,
+        SelectEndOfBlock,
+        SelectStartOfDocument,
+        SelectEndOfDocument,
+        DeleteStartOfWord,
+        DeleteEndOfWord,
+        SetTextDirectionDefault,
+        SetTextDirectionLeftToRight,
+        SetTextDirectionRightToLeft,
+        ToggleBold,
+        ToggleItalic,
+        ToggleUnderline,
+        InspectElement,
+        InsertParagraphSeparator,
+        InsertLineSeparator,
+        SelectAll,
+        ReloadAndBypassCache,
+        PasteAndMatchStyle,
+        RemoveFormat,
+        ToggleStrikethrough,
+        ToggleSubscript,
+        ToggleSuperscript,
+        InsertUnorderedList,
+        InsertOrderedList,
+        Indent,
+        Outdent,
+        AlignCenter,
+        AlignJustified,
+        AlignLeft,
+        AlignRight,
+        StopScheduledPageRefresh,
+        CopyImageUrlToClipboard,
+        OpenLinkInThisWindow,
+%If (Qt_5_2_0 -)
+        DownloadMediaToDisk,
+%End
+%If (Qt_5_2_0 -)
+        CopyMediaUrlToClipboard,
+%End
+%If (Qt_5_2_0 -)
+        ToggleMediaControls,
+%End
+%If (Qt_5_2_0 -)
+        ToggleMediaLoop,
+%End
+%If (Qt_5_2_0 -)
+        ToggleMediaPlayPause,
+%End
+%If (Qt_5_2_0 -)
+        ToggleMediaMute,
+%End
+%If (Qt_5_2_0 -)
+        ToggleVideoFullscreen,
+%End
+    };
+
+    enum FindFlag
+    {
+        FindBackward,
+        FindCaseSensitively,
+        FindWrapsAroundDocument,
+        HighlightAllOccurrences,
+%If (Qt_5_2_0 -)
+        FindAtWordBeginningsOnly,
+%End
+%If (Qt_5_2_0 -)
+        TreatMedialCapitalAsWordBeginning,
+%End
+%If (Qt_5_2_0 -)
+        FindBeginsInSelection,
+%End
+    };
+
+    typedef QFlags<QWebPage::FindFlag> FindFlags;
+
+    enum LinkDelegationPolicy
+    {
+        DontDelegateLinks,
+        DelegateExternalLinks,
+        DelegateAllLinks,
+    };
+
+    enum WebWindowType
+    {
+        WebBrowserWindow,
+        WebModalDialog,
+    };
+
+    explicit QWebPage(QObject *parent /TransferThis/ = 0);
+    virtual ~QWebPage();
+    QWebFrame *mainFrame() const;
+    QWebFrame *currentFrame() const;
+    QWebHistory *history() const;
+    QWebSettings *settings() const;
+    void setView(QWidget *view /KeepReference/);
+    QWidget *view() const;
+    bool isModified() const;
+    QUndoStack *undoStack() const;
+    void setNetworkAccessManager(QNetworkAccessManager *manager /KeepReference/);
+    QNetworkAccessManager *networkAccessManager() const;
+    void setPluginFactory(QWebPluginFactory *factory /KeepReference/);
+    QWebPluginFactory *pluginFactory() const;
+    quint64 totalBytes() const;
+    quint64 bytesReceived() const;
+    QString selectedText() const;
+    QAction *action(QWebPage::WebAction action) const;
+    virtual void triggerAction(QWebPage::WebAction action, bool checked = false);
+    QSize viewportSize() const;
+    void setViewportSize(const QSize &size) const;
+    virtual bool event(QEvent *);
+    bool focusNextPrevChild(bool next);
+    QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
+    bool findText(const QString &subString, QFlags<QWebPage::FindFlag> options = 0);
+    void setForwardUnsupportedContent(bool forward);
+    bool forwardUnsupportedContent() const;
+    void setLinkDelegationPolicy(QWebPage::LinkDelegationPolicy policy);
+    QWebPage::LinkDelegationPolicy linkDelegationPolicy() const;
+    void setPalette(const QPalette &palette);
+    QPalette palette() const;
+    bool swallowContextMenuEvent(QContextMenuEvent *event);
+    void updatePositionDependentActions(const QPoint &pos);
+
+    enum Extension
+    {
+        ChooseMultipleFilesExtension,
+        ErrorPageExtension,
+    };
+
+    class ExtensionOption
+    {
+%TypeHeaderCode
+#include <qwebpage.h>
+%End
+    };
+
+    class ExtensionReturn
+    {
+%TypeHeaderCode
+#include <qwebpage.h>
+%End
+    };
+
+    virtual bool extension(QWebPage::Extension extension, const QWebPage::ExtensionOption *option = 0, QWebPage::ExtensionReturn *output = 0);
+%VirtualCatcherCode
+        const sipTypeDef *option_type = sipType_QWebPage_ExtensionOption;
+        const sipTypeDef *return_type = sipType_QWebPage_ExtensionReturn;
+        
+        if (a0 == QWebPage::ChooseMultipleFilesExtension)
+        {
+            option_type = sipType_QWebPage_ChooseMultipleFilesExtensionOption;
+            return_type = sipType_QWebPage_ChooseMultipleFilesExtensionReturn;
+        }
+        else if (a0 == QWebPage::ErrorPageExtension)
+        {
+            option_type = sipType_QWebPage_ErrorPageExtensionOption;
+            return_type = sipType_QWebPage_ErrorPageExtensionReturn;
+        }
+        
+        PyObject *res_obj = sipCallMethod(&sipIsErr, sipMethod, "FDD",
+                a0, sipType_QWebPage_Extension,
+                a1, option_type, NULL,
+                a2, return_type, NULL);
+        
+        if (res_obj)
+        {
+            sipParseResult(&sipIsErr, sipMethod, res_obj, "b", &sipRes);
+            Py_DECREF(res_obj);
+        }
+        else
+        {
+            sipIsErr = 1;
+        }
+%End
+
+    virtual bool supportsExtension(QWebPage::Extension extension) const;
+
+signals:
+    void loadFinished(bool ok);
+    void loadProgress(int progress);
+    void loadStarted();
+    void linkHovered(const QString &link, const QString &title, const QString &textContent);
+    void statusBarMessage(const QString &text);
+    void selectionChanged();
+    void frameCreated(QWebFrame *frame);
+    void geometryChangeRequested(const QRect &geom);
+    void repaintRequested(const QRect &dirtyRect);
+    void scrollRequested(int dx, int dy, const QRect &scrollViewRect);
+    void windowCloseRequested();
+    void printRequested(QWebFrame *frame);
+    void linkClicked(const QUrl &url);
+    void toolBarVisibilityChangeRequested(bool visible);
+    void statusBarVisibilityChangeRequested(bool visible);
+    void menuBarVisibilityChangeRequested(bool visible);
+    void unsupportedContent(QNetworkReply *reply);
+    void downloadRequested(const QNetworkRequest &request);
+    void microFocusChanged();
+
+protected:
+    virtual QWebPage *createWindow(QWebPage::WebWindowType type);
+    virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues);
+    virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type);
+    virtual QString chooseFile(QWebFrame *originatingFrame, const QString &oldFile);
+    virtual void javaScriptAlert(QWebFrame *originatingFrame, const QString &msg);
+    virtual bool javaScriptConfirm(QWebFrame *originatingFrame, const QString &msg);
+    virtual bool javaScriptPrompt(QWebFrame *originatingFrame, const QString &msg, const QString &defaultValue, QString *result /Out/);
+    virtual void javaScriptConsoleMessage(const QString &message, int lineNumber, const QString &sourceID);
+    virtual QString userAgentForUrl(const QUrl &url) const;
+
+public:
+    void setContentEditable(bool editable);
+    bool isContentEditable() const;
+    QMenu *createStandardContextMenu() /Factory/;
+
+    class ChooseMultipleFilesExtensionOption : QWebPage::ExtensionOption
+    {
+%TypeHeaderCode
+#include <qwebpage.h>
+%End
+
+    public:
+        QWebFrame *parentFrame;
+        QStringList suggestedFileNames;
+    };
+
+    class ChooseMultipleFilesExtensionReturn : QWebPage::ExtensionReturn
+    {
+%TypeHeaderCode
+#include <qwebpage.h>
+%End
+
+    public:
+        QStringList fileNames;
+    };
+
+signals:
+    void contentsChanged();
+    void databaseQuotaExceeded(QWebFrame *frame, QString databaseName);
+    void saveFrameStateRequested(QWebFrame *frame, QWebHistoryItem *item);
+    void restoreFrameStateRequested(QWebFrame *frame);
+
+public:
+    QWebFrame *frameAt(const QPoint &pos) const;
+    QSize preferredContentsSize() const;
+    void setPreferredContentsSize(const QSize &size) const;
+
+    enum ErrorDomain
+    {
+        QtNetwork,
+        Http,
+        WebKit,
+    };
+
+    class ErrorPageExtensionOption : QWebPage::ExtensionOption
+    {
+%TypeHeaderCode
+#include <qwebpage.h>
+%End
+
+    public:
+        QUrl url;
+        QWebFrame *frame;
+        QWebPage::ErrorDomain domain;
+        int error;
+        QString errorString;
+    };
+
+    class ErrorPageExtensionReturn : QWebPage::ExtensionReturn
+    {
+%TypeHeaderCode
+#include <qwebpage.h>
+%End
+
+    public:
+        ErrorPageExtensionReturn();
+        QString contentType;
+        QString encoding;
+        QUrl baseUrl;
+        QByteArray content;
+    };
+
+    virtual bool shouldInterruptJavaScript();
+
+    enum PermissionPolicy
+    {
+        PermissionUnknown,
+        PermissionGrantedByUser,
+        PermissionDeniedByUser,
+    };
+
+    enum Feature
+    {
+        Notifications,
+        Geolocation,
+    };
+
+    class ViewportAttributes
+    {
+%TypeHeaderCode
+#include <qwebpage.h>
+%End
+
+    public:
+        ViewportAttributes();
+        ViewportAttributes(const QWebPage::ViewportAttributes &other);
+        ~ViewportAttributes();
+        qreal initialScaleFactor() const;
+        qreal minimumScaleFactor() const;
+        qreal maximumScaleFactor() const;
+        qreal devicePixelRatio() const;
+        bool isUserScalable() const;
+        bool isValid() const;
+        QSizeF size() const;
+    };
+
+    bool hasSelection() const;
+    QString selectedHtml() const;
+    QWebPage::ViewportAttributes viewportAttributesForSize(const QSize &availableSize) const;
+    void setActualVisibleContentRect(const QRect &rect) const;
+    void setFeaturePermission(QWebFrame *frame, QWebPage::Feature feature, QWebPage::PermissionPolicy policy);
+    QStringList supportedContentTypes() const;
+    bool supportsContentType(const QString &mimeType) const;
+
+signals:
+    void applicationCacheQuotaExceeded(QWebSecurityOrigin *origin, quint64 defaultOriginQuota, quint64 totalSpaceNeeded);
+    void viewportChangeRequested();
+    void featurePermissionRequested(QWebFrame *frame, QWebPage::Feature feature);
+    void featurePermissionRequestCanceled(QWebFrame *frame, QWebPage::Feature feature);
+
+public:
+%If (Qt_5_2_0 -)
+
+    enum VisibilityState
+    {
+        VisibilityStateVisible,
+        VisibilityStateHidden,
+        VisibilityStatePrerender,
+        VisibilityStateUnloaded,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+    QWebPage::VisibilityState visibilityState() const;
+%End
+%If (Qt_5_2_0 -)
+    void setVisibilityState(QWebPage::VisibilityState);
+%End
+};
+
+QFlags<QWebPage::FindFlag> operator|(QWebPage::FindFlag f1, QFlags<QWebPage::FindFlag> f2);
diff --git a/sip/QtWebKitWidgets/qwebview.sip b/sip/QtWebKitWidgets/qwebview.sip
new file mode 100644
index 0000000..8e21287
--- /dev/null
+++ b/sip/QtWebKitWidgets/qwebview.sip
@@ -0,0 +1,140 @@
+// qwebview.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWebKitWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWebView : QWidget
+{
+%TypeHeaderCode
+#include <qwebview.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QWebInspector, &sipType_QWebInspector, -1, 1},
+        {sipName_QWebPage, &sipType_QWebPage, -1, 2},
+        {sipName_QWebFrame, &sipType_QWebFrame, -1, 3},
+        {sipName_QGraphicsWebView, &sipType_QGraphicsWebView, -1, 4},
+        {sipName_QWebView, &sipType_QWebView, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    explicit QWebView(QWidget *parent /TransferThis/ = 0);
+    virtual ~QWebView();
+    QWebPage *page() const;
+    void setPage(QWebPage *page /KeepReference/);
+    void load(const QUrl &url) /ReleaseGIL/;
+    void load(const QNetworkRequest &request, QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation, const QByteArray &body = QByteArray()) /ReleaseGIL/;
+    void setHtml(const QString &html, const QUrl &baseUrl = QUrl());
+    void setContent(const QByteArray &data, const QString &mimeType /DocValue="''"/ = QString(), const QUrl &baseUrl = QUrl());
+    QWebHistory *history() const;
+    QWebSettings *settings() const;
+    QString title() const;
+    void setUrl(const QUrl &url);
+    QUrl url() const;
+    QIcon icon() const;
+    QString selectedText() const;
+    QAction *pageAction(QWebPage::WebAction action) const;
+    void triggerPageAction(QWebPage::WebAction action, bool checked = false);
+    bool isModified() const;
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
+    virtual QSize sizeHint() const;
+    bool findText(const QString &subString, QFlags<QWebPage::FindFlag> options = 0);
+    virtual bool event(QEvent *);
+
+public slots:
+    void stop();
+    void back();
+    void forward();
+    void reload();
+%If (PyQt_Printer)
+    void print(QPrinter *printer) const /PyName=print_/;
+%End
+%If (Py_v3)
+%If (PyQt_Printer)
+    void print(QPrinter *printer) const;
+%End
+%End
+
+signals:
+    void loadStarted();
+    void loadProgress(int progress);
+    void loadFinished(bool);
+    void titleChanged(const QString &title);
+    void statusBarMessage(const QString &text);
+    void linkClicked(const QUrl &url);
+    void selectionChanged();
+    void iconChanged();
+    void urlChanged(const QUrl &url);
+
+protected:
+    virtual QWebView *createWindow(QWebPage::WebWindowType type);
+    virtual void resizeEvent(QResizeEvent *e);
+    virtual void paintEvent(QPaintEvent *ev);
+    virtual void changeEvent(QEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseDoubleClickEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void contextMenuEvent(QContextMenuEvent *);
+    virtual void wheelEvent(QWheelEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void keyReleaseEvent(QKeyEvent *);
+    virtual void dragEnterEvent(QDragEnterEvent *);
+    virtual void dragLeaveEvent(QDragLeaveEvent *);
+    virtual void dragMoveEvent(QDragMoveEvent *);
+    virtual void dropEvent(QDropEvent *);
+    virtual void focusInEvent(QFocusEvent *);
+    virtual void focusOutEvent(QFocusEvent *);
+    virtual void inputMethodEvent(QInputMethodEvent *);
+    virtual bool focusNextPrevChild(bool next);
+
+public:
+    qreal zoomFactor() const;
+    void setZoomFactor(qreal factor);
+    QFlags<QPainter::RenderHint> renderHints() const;
+    void setRenderHints(QFlags<QPainter::RenderHint> hints);
+    void setRenderHint(QPainter::RenderHint hint, bool enabled = true);
+    bool hasSelection() const;
+    QString selectedHtml() const;
+};
diff --git a/sip/QtWebSockets/QtWebSocketsmod.sip b/sip/QtWebSockets/QtWebSocketsmod.sip
new file mode 100644
index 0000000..5433faf
--- /dev/null
+++ b/sip/QtWebSockets/QtWebSocketsmod.sip
@@ -0,0 +1,53 @@
+// QtWebSocketsmod.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtWebSockets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtWebSockets, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtNetwork/QtNetworkmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qmaskgenerator.sip
+%Include qwebsocket.sip
+%Include qwebsocketcorsauthenticator.sip
+%Include qwebsocketprotocol.sip
+%Include qwebsocketserver.sip
diff --git a/sip/QtWebSockets/qmaskgenerator.sip b/sip/QtWebSockets/qmaskgenerator.sip
new file mode 100644
index 0000000..4485765
--- /dev/null
+++ b/sip/QtWebSockets/qmaskgenerator.sip
@@ -0,0 +1,41 @@
+// qmaskgenerator.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtWebSockets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class QMaskGenerator : QObject
+{
+%TypeHeaderCode
+#include <qmaskgenerator.h>
+%End
+
+public:
+    explicit QMaskGenerator(QObject *parent /TransferThis/ = 0);
+    virtual ~QMaskGenerator();
+    virtual bool seed() = 0;
+    virtual quint32 nextMask() = 0;
+
+private:
+    QMaskGenerator(const QMaskGenerator &);
+};
+
+%End
diff --git a/sip/QtWebSockets/qwebsocket.sip b/sip/QtWebSockets/qwebsocket.sip
new file mode 100644
index 0000000..e419cd6
--- /dev/null
+++ b/sip/QtWebSockets/qwebsocket.sip
@@ -0,0 +1,132 @@
+// qwebsocket.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtWebSockets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class QWebSocket : QObject
+{
+%TypeHeaderCode
+#include <qwebsocket.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QWebSocket, &sipType_QWebSocket, -1, 1},
+        {sipName_QWebSocketServer, &sipType_QWebSocketServer, -1, 2},
+        {sipName_QMaskGenerator, &sipType_QMaskGenerator, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    QWebSocket(const QString &origin /DocValue="''"/ = QString(), QWebSocketProtocol::Version version = QWebSocketProtocol::Version13, QObject *parent /TransferThis/ = 0);
+    virtual ~QWebSocket();
+    void abort();
+    QAbstractSocket::SocketError error() const;
+    QString errorString() const;
+    bool flush() /ReleaseGIL/;
+    bool isValid() const;
+    QHostAddress localAddress() const;
+    quint16 localPort() const;
+    QFlags<QAbstractSocket::PauseMode> pauseMode() const;
+    QHostAddress peerAddress() const;
+    QString peerName() const;
+    quint16 peerPort() const;
+    QNetworkProxy proxy() const;
+    void setProxy(const QNetworkProxy &networkProxy);
+    void setMaskGenerator(const QMaskGenerator *maskGenerator /KeepReference/);
+    const QMaskGenerator *maskGenerator() const;
+    qint64 readBufferSize() const;
+    void setReadBufferSize(qint64 size);
+    void resume() /ReleaseGIL/;
+    void setPauseMode(QFlags<QAbstractSocket::PauseMode> pauseMode);
+    QAbstractSocket::SocketState state() const;
+    QWebSocketProtocol::Version version() const;
+    QString resourceName() const;
+    QUrl requestUrl() const;
+    QString origin() const;
+    QWebSocketProtocol::CloseCode closeCode() const;
+    QString closeReason() const;
+    qint64 sendTextMessage(const QString &message) /ReleaseGIL/;
+    qint64 sendBinaryMessage(const QByteArray &data) /ReleaseGIL/;
+%If (PyQt_SSL)
+    void ignoreSslErrors(const QList<QSslError> &errors);
+%End
+%If (PyQt_SSL)
+    void setSslConfiguration(const QSslConfiguration &sslConfiguration);
+%End
+%If (PyQt_SSL)
+    QSslConfiguration sslConfiguration() const;
+%End
+
+public slots:
+    void close(QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CloseCodeNormal, const QString &reason = QString()) /ReleaseGIL/;
+    void open(const QUrl &url) /ReleaseGIL/;
+    void ping(const QByteArray &payload = QByteArray()) /ReleaseGIL/;
+%If (PyQt_SSL)
+    void ignoreSslErrors();
+%End
+
+signals:
+    void aboutToClose();
+    void connected();
+    void disconnected();
+    void stateChanged(QAbstractSocket::SocketState state);
+    void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *pAuthenticator);
+    void readChannelFinished();
+    void textFrameReceived(const QString &frame, bool isLastFrame);
+    void binaryFrameReceived(const QByteArray &frame, bool isLastFrame);
+    void textMessageReceived(const QString &message);
+    void binaryMessageReceived(const QByteArray &message);
+    void error(QAbstractSocket::SocketError error);
+    void pong(quint64 elapsedTime, const QByteArray &payload);
+    void bytesWritten(qint64 bytes);
+%If (PyQt_SSL)
+    void sslErrors(const QList<QSslError> &errors);
+%End
+
+private:
+    QWebSocket(const QWebSocket &);
+};
+
+%End
diff --git a/sip/QtWebSockets/qwebsocketcorsauthenticator.sip b/sip/QtWebSockets/qwebsocketcorsauthenticator.sip
new file mode 100644
index 0000000..64570dd
--- /dev/null
+++ b/sip/QtWebSockets/qwebsocketcorsauthenticator.sip
@@ -0,0 +1,41 @@
+// qwebsocketcorsauthenticator.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtWebSockets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class QWebSocketCorsAuthenticator
+{
+%TypeHeaderCode
+#include <qwebsocketcorsauthenticator.h>
+%End
+
+public:
+    explicit QWebSocketCorsAuthenticator(const QString &origin);
+    explicit QWebSocketCorsAuthenticator(const QWebSocketCorsAuthenticator &other);
+    ~QWebSocketCorsAuthenticator();
+    void swap(QWebSocketCorsAuthenticator &other);
+    QString origin() const;
+    void setAllowed(bool allowed);
+    bool allowed() const;
+};
+
+%End
diff --git a/sip/QtWebSockets/qwebsocketprotocol.sip b/sip/QtWebSockets/qwebsocketprotocol.sip
new file mode 100644
index 0000000..44f9893
--- /dev/null
+++ b/sip/QtWebSockets/qwebsocketprotocol.sip
@@ -0,0 +1,62 @@
+// qwebsocketprotocol.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtWebSockets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+namespace QWebSocketProtocol
+{
+%TypeHeaderCode
+#include <qwebsocketprotocol.h>
+%End
+
+    enum Version
+    {
+        VersionUnknown,
+        Version0,
+        Version4,
+        Version5,
+        Version6,
+        Version7,
+        Version8,
+        Version13,
+        VersionLatest,
+    };
+
+    enum CloseCode
+    {
+        CloseCodeNormal,
+        CloseCodeGoingAway,
+        CloseCodeProtocolError,
+        CloseCodeDatatypeNotSupported,
+        CloseCodeReserved1004,
+        CloseCodeMissingStatusCode,
+        CloseCodeAbnormalDisconnection,
+        CloseCodeWrongDatatype,
+        CloseCodePolicyViolated,
+        CloseCodeTooMuchData,
+        CloseCodeMissingExtension,
+        CloseCodeBadOperation,
+        CloseCodeTlsHandshakeFailed,
+    };
+};
+
+%End
diff --git a/sip/QtWebSockets/qwebsocketserver.sip b/sip/QtWebSockets/qwebsocketserver.sip
new file mode 100644
index 0000000..22954ff
--- /dev/null
+++ b/sip/QtWebSockets/qwebsocketserver.sip
@@ -0,0 +1,87 @@
+// qwebsocketserver.sip generated by MetaSIP on Fri Sep 12 22:59:04 2014
+//
+// This file is part of the QtWebSockets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_3_0 -)
+
+class QWebSocketServer : QObject
+{
+%TypeHeaderCode
+#include <qwebsocketserver.h>
+%End
+
+public:
+    enum SslMode
+    {
+%If (PyQt_SSL)
+        SecureMode,
+%End
+        NonSecureMode,
+    };
+
+    QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent /TransferThis/ = 0);
+    virtual ~QWebSocketServer();
+    bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
+    void close();
+    bool isListening() const;
+    void setMaxPendingConnections(int numConnections);
+    int maxPendingConnections() const;
+    quint16 serverPort() const;
+    QHostAddress serverAddress() const;
+    QWebSocketServer::SslMode secureMode() const;
+    bool setSocketDescriptor(int socketDescriptor);
+    int socketDescriptor() const;
+    bool hasPendingConnections() const;
+    virtual QWebSocket *nextPendingConnection() /Factory/;
+    QWebSocketProtocol::CloseCode error() const;
+    QString errorString() const;
+    void pauseAccepting();
+    void resumeAccepting();
+    void setServerName(const QString &serverName);
+    QString serverName() const;
+    void setProxy(const QNetworkProxy &networkProxy);
+    QNetworkProxy proxy() const;
+%If (PyQt_SSL)
+    void setSslConfiguration(const QSslConfiguration &sslConfiguration);
+%End
+%If (PyQt_SSL)
+    QSslConfiguration sslConfiguration() const;
+%End
+    QList<QWebSocketProtocol::Version> supportedVersions() const;
+
+signals:
+    void acceptError(QAbstractSocket::SocketError socketError);
+    void serverError(QWebSocketProtocol::CloseCode closeCode);
+    void originAuthenticationRequired(QWebSocketCorsAuthenticator *pAuthenticator);
+    void newConnection();
+%If (PyQt_SSL)
+    void peerVerifyError(const QSslError &error);
+%End
+%If (PyQt_SSL)
+    void sslErrors(const QList<QSslError> &errors);
+%End
+    void closed();
+
+private:
+    QWebSocketServer(const QWebSocketServer &);
+};
+
+%End
diff --git a/sip/QtWidgets/QtWidgetsmod.sip b/sip/QtWidgets/QtWidgetsmod.sip
new file mode 100644
index 0000000..b61af60
--- /dev/null
+++ b/sip/QtWidgets/QtWidgetsmod.sip
@@ -0,0 +1,169 @@
+// QtWidgetsmod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtWidgets, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtGui/QtGuimod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qabstractbutton.sip
+%Include qabstractitemdelegate.sip
+%Include qabstractitemview.sip
+%Include qabstractscrollarea.sip
+%Include qabstractslider.sip
+%Include qabstractspinbox.sip
+%Include qaction.sip
+%Include qactiongroup.sip
+%Include qapplication.sip
+%Include qboxlayout.sip
+%Include qbuttongroup.sip
+%Include qcalendarwidget.sip
+%Include qcheckbox.sip
+%Include qcolordialog.sip
+%Include qcolumnview.sip
+%Include qcombobox.sip
+%Include qcommandlinkbutton.sip
+%Include qcommonstyle.sip
+%Include qcompleter.sip
+%Include qdatawidgetmapper.sip
+%Include qdatetimeedit.sip
+%Include qdesktopwidget.sip
+%Include qdial.sip
+%Include qdialog.sip
+%Include qdialogbuttonbox.sip
+%Include qdirmodel.sip
+%Include qdockwidget.sip
+%Include qdrawutil.sip
+%Include qerrormessage.sip
+%Include qfiledialog.sip
+%Include qfileiconprovider.sip
+%Include qfilesystemmodel.sip
+%Include qfocusframe.sip
+%Include qfontcombobox.sip
+%Include qfontdialog.sip
+%Include qformlayout.sip
+%Include qframe.sip
+%Include qgesture.sip
+%Include qgesturerecognizer.sip
+%Include qgraphicsanchorlayout.sip
+%Include qgraphicseffect.sip
+%Include qgraphicsgridlayout.sip
+%Include qgraphicsitem.sip
+%Include qgraphicslayout.sip
+%Include qgraphicslayoutitem.sip
+%Include qgraphicslinearlayout.sip
+%Include qgraphicsproxywidget.sip
+%Include qgraphicsscene.sip
+%Include qgraphicssceneevent.sip
+%Include qgraphicstransform.sip
+%Include qgraphicsview.sip
+%Include qgraphicswidget.sip
+%Include qgridlayout.sip
+%Include qgroupbox.sip
+%Include qheaderview.sip
+%Include qinputdialog.sip
+%Include qitemdelegate.sip
+%Include qitemeditorfactory.sip
+%Include qkeyeventtransition.sip
+%Include qkeysequenceedit.sip
+%Include qlabel.sip
+%Include qlayout.sip
+%Include qlayoutitem.sip
+%Include qlcdnumber.sip
+%Include qlineedit.sip
+%Include qlistview.sip
+%Include qlistwidget.sip
+%Include qmainwindow.sip
+%Include qmdiarea.sip
+%Include qmdisubwindow.sip
+%Include qmenu.sip
+%Include qmenubar.sip
+%Include qmessagebox.sip
+%Include qmouseeventtransition.sip
+%Include qplaintextedit.sip
+%Include qprogressbar.sip
+%Include qprogressdialog.sip
+%Include qpushbutton.sip
+%Include qradiobutton.sip
+%Include qrubberband.sip
+%Include qscrollarea.sip
+%Include qscrollbar.sip
+%Include qscroller.sip
+%Include qscrollerproperties.sip
+%Include qshortcut.sip
+%Include qsizegrip.sip
+%Include qsizepolicy.sip
+%Include qslider.sip
+%Include qspinbox.sip
+%Include qsplashscreen.sip
+%Include qsplitter.sip
+%Include qstackedlayout.sip
+%Include qstackedwidget.sip
+%Include qstatusbar.sip
+%Include qstyle.sip
+%Include qstyleditemdelegate.sip
+%Include qstylefactory.sip
+%Include qstyleoption.sip
+%Include qstylepainter.sip
+%Include qsystemtrayicon.sip
+%Include qtabbar.sip
+%Include qtableview.sip
+%Include qtablewidget.sip
+%Include qtabwidget.sip
+%Include qtextbrowser.sip
+%Include qtextedit.sip
+%Include qtoolbar.sip
+%Include qtoolbox.sip
+%Include qtoolbutton.sip
+%Include qtooltip.sip
+%Include qtreeview.sip
+%Include qtreewidget.sip
+%Include qtreewidgetitemiterator.sip
+%Include qundogroup.sip
+%Include qundostack.sip
+%Include qundoview.sip
+%Include qwhatsthis.sip
+%Include qwidget.sip
+%Include qwidgetaction.sip
+%Include qwizard.sip
+%Include qpywidgets_qlist.sip
diff --git a/sip/QtWidgets/qabstractbutton.sip b/sip/QtWidgets/qabstractbutton.sip
new file mode 100644
index 0000000..231231c
--- /dev/null
+++ b/sip/QtWidgets/qabstractbutton.sip
@@ -0,0 +1,82 @@
+// qabstractbutton.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractButton : QWidget
+{
+%TypeHeaderCode
+#include <qabstractbutton.h>
+%End
+
+public:
+    explicit QAbstractButton(QWidget *parent /TransferThis/ = 0);
+    virtual ~QAbstractButton();
+    void setAutoRepeatDelay(int);
+    int autoRepeatDelay() const;
+    void setAutoRepeatInterval(int);
+    int autoRepeatInterval() const;
+    void setText(const QString &text);
+    QString text() const;
+    void setIcon(const QIcon &icon);
+    QIcon icon() const;
+    QSize iconSize() const;
+    void setShortcut(const QKeySequence &key);
+    QKeySequence shortcut() const;
+    void setCheckable(bool);
+    bool isCheckable() const;
+    bool isChecked() const;
+    void setDown(bool);
+    bool isDown() const;
+    void setAutoRepeat(bool);
+    bool autoRepeat() const;
+    void setAutoExclusive(bool);
+    bool autoExclusive() const;
+    QButtonGroup *group() const;
+
+public slots:
+    void setIconSize(const QSize &size);
+    void animateClick(int msecs = 100);
+    void click();
+    void toggle();
+    void setChecked(bool);
+
+signals:
+    void pressed();
+    void released();
+    void clicked(bool checked = false);
+    void toggled(bool checked);
+
+protected:
+    virtual void paintEvent(QPaintEvent *e) = 0;
+    virtual bool hitButton(const QPoint &pos) const;
+    virtual void checkStateSet();
+    virtual void nextCheckState();
+    virtual bool event(QEvent *e);
+    virtual void keyPressEvent(QKeyEvent *e);
+    virtual void keyReleaseEvent(QKeyEvent *e);
+    virtual void mousePressEvent(QMouseEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *e);
+    virtual void mouseMoveEvent(QMouseEvent *e);
+    virtual void focusInEvent(QFocusEvent *e);
+    virtual void focusOutEvent(QFocusEvent *e);
+    virtual void changeEvent(QEvent *e);
+    virtual void timerEvent(QTimerEvent *e);
+};
diff --git a/sip/QtWidgets/qabstractitemdelegate.sip b/sip/QtWidgets/qabstractitemdelegate.sip
new file mode 100644
index 0000000..326122e
--- /dev/null
+++ b/sip/QtWidgets/qabstractitemdelegate.sip
@@ -0,0 +1,58 @@
+// qabstractitemdelegate.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractItemDelegate : QObject
+{
+%TypeHeaderCode
+#include <qabstractitemdelegate.h>
+%End
+
+public:
+    enum EndEditHint
+    {
+        NoHint,
+        EditNextItem,
+        EditPreviousItem,
+        SubmitModelCache,
+        RevertModelCache,
+    };
+
+    explicit QAbstractItemDelegate(QObject *parent /TransferThis/ = 0);
+    virtual ~QAbstractItemDelegate();
+    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const = 0;
+    virtual QSize sizeHint(const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const = 0;
+    virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/;
+    virtual void setEditorData(QWidget *editor, const QModelIndex &index) const;
+    virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const;
+    virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const;
+    virtual void destroyEditor(QWidget *editor, const QModelIndex &index) const;
+    virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index);
+    virtual bool helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index);
+
+signals:
+    void commitData(QWidget *editor);
+    void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = QAbstractItemDelegate::NoHint);
+    void sizeHintChanged(const QModelIndex &);
+
+private:
+    QAbstractItemDelegate(const QAbstractItemDelegate &);
+};
diff --git a/sip/QtWidgets/qabstractitemview.sip b/sip/QtWidgets/qabstractitemview.sip
new file mode 100644
index 0000000..3c9c932
--- /dev/null
+++ b/sip/QtWidgets/qabstractitemview.sip
@@ -0,0 +1,286 @@
+// qabstractitemview.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qabstractitemview.h>
+%End
+
+class QAbstractItemView : QAbstractScrollArea
+{
+%TypeHeaderCode
+#include <qabstractitemview.h>
+%End
+
+public:
+    enum DragDropMode
+    {
+        NoDragDrop,
+        DragOnly,
+        DropOnly,
+        DragDrop,
+        InternalMove,
+    };
+
+    enum EditTrigger
+    {
+        NoEditTriggers,
+        CurrentChanged,
+        DoubleClicked,
+        SelectedClicked,
+        EditKeyPressed,
+        AnyKeyPressed,
+        AllEditTriggers,
+    };
+
+    typedef QFlags<QAbstractItemView::EditTrigger> EditTriggers;
+
+    enum ScrollHint
+    {
+        EnsureVisible,
+        PositionAtTop,
+        PositionAtBottom,
+        PositionAtCenter,
+    };
+
+    enum ScrollMode
+    {
+        ScrollPerItem,
+        ScrollPerPixel,
+    };
+
+    enum SelectionBehavior
+    {
+        SelectItems,
+        SelectRows,
+        SelectColumns,
+    };
+
+    enum SelectionMode
+    {
+        NoSelection,
+        SingleSelection,
+        MultiSelection,
+        ExtendedSelection,
+        ContiguousSelection,
+    };
+
+    explicit QAbstractItemView(QWidget *parent /TransferThis/ = 0);
+    virtual ~QAbstractItemView();
+    virtual void setModel(QAbstractItemModel *model /KeepReference/);
+    QAbstractItemModel *model() const;
+    virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/);
+    QItemSelectionModel *selectionModel() const;
+    void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/);
+    QAbstractItemDelegate *itemDelegate() const;
+    void setSelectionMode(QAbstractItemView::SelectionMode mode);
+    QAbstractItemView::SelectionMode selectionMode() const;
+    void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior);
+    QAbstractItemView::SelectionBehavior selectionBehavior() const;
+    QModelIndex currentIndex() const;
+    QModelIndex rootIndex() const;
+    void setEditTriggers(QFlags<QAbstractItemView::EditTrigger> triggers);
+    QFlags<QAbstractItemView::EditTrigger> editTriggers() const;
+    void setAutoScroll(bool enable);
+    bool hasAutoScroll() const;
+    void setTabKeyNavigation(bool enable);
+    bool tabKeyNavigation() const;
+    void setDropIndicatorShown(bool enable);
+    bool showDropIndicator() const;
+    void setDragEnabled(bool enable);
+    bool dragEnabled() const;
+    void setAlternatingRowColors(bool enable);
+    bool alternatingRowColors() const;
+    void setIconSize(const QSize &size);
+    QSize iconSize() const;
+    void setTextElideMode(Qt::TextElideMode mode);
+    Qt::TextElideMode textElideMode() const;
+    virtual void keyboardSearch(const QString &search);
+    virtual QRect visualRect(const QModelIndex &index) const = 0;
+    virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible) = 0;
+    virtual QModelIndex indexAt(const QPoint &p) const = 0;
+    QSize sizeHintForIndex(const QModelIndex &index) const;
+    virtual int sizeHintForRow(int row) const;
+    virtual int sizeHintForColumn(int column) const;
+    void openPersistentEditor(const QModelIndex &index);
+    void closePersistentEditor(const QModelIndex &index);
+    void setIndexWidget(const QModelIndex &index, QWidget *widget /Transfer/);
+%MethodCode
+        // We have to break the association with any existing widget.
+        QWidget *w = sipCpp->indexWidget(*a0);
+        
+        if (w)
+        {
+            PyObject *wo = sipGetPyObject(w, sipType_QWidget);
+        
+            if (wo)
+                sipTransferTo(wo, 0);
+        }
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->setIndexWidget(*a0, a1);
+        Py_END_ALLOW_THREADS
+%End
+
+    QWidget *indexWidget(const QModelIndex &index) const;
+
+public slots:
+    virtual void reset();
+    virtual void setRootIndex(const QModelIndex &index);
+    virtual void selectAll();
+    void edit(const QModelIndex &index);
+    void clearSelection();
+    void setCurrentIndex(const QModelIndex &index);
+    void scrollToTop();
+    void scrollToBottom();
+    void update();
+    void update(const QModelIndex &index);
+
+protected slots:
+    virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles /DocValue="[]"/ = QVector<int>());
+    virtual void rowsInserted(const QModelIndex &parent, int start, int end);
+    virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
+    virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+    virtual void currentChanged(const QModelIndex &current, const QModelIndex &previous);
+    virtual void updateEditorData();
+    virtual void updateEditorGeometries();
+    virtual void updateGeometries();
+    virtual void verticalScrollbarAction(int action);
+    virtual void horizontalScrollbarAction(int action);
+    virtual void verticalScrollbarValueChanged(int value);
+    virtual void horizontalScrollbarValueChanged(int value);
+    virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint);
+    virtual void commitData(QWidget *editor);
+    virtual void editorDestroyed(QObject *editor);
+
+signals:
+    void pressed(const QModelIndex &index);
+    void clicked(const QModelIndex &index);
+    void doubleClicked(const QModelIndex &index);
+    void activated(const QModelIndex &index);
+    void entered(const QModelIndex &index);
+    void viewportEntered();
+
+protected:
+    enum CursorAction
+    {
+        MoveUp,
+        MoveDown,
+        MoveLeft,
+        MoveRight,
+        MoveHome,
+        MoveEnd,
+        MovePageUp,
+        MovePageDown,
+        MoveNext,
+        MovePrevious,
+    };
+
+    virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) = 0;
+    virtual int horizontalOffset() const = 0;
+    virtual int verticalOffset() const = 0;
+    virtual bool isIndexHidden(const QModelIndex &index) const = 0;
+    virtual void setSelection(const QRect &rect, QFlags<QItemSelectionModel::SelectionFlag> command) = 0;
+    virtual QRegion visualRegionForSelection(const QItemSelection &selection) const = 0;
+    virtual QModelIndexList selectedIndexes() const;
+    virtual bool edit(const QModelIndex &index, QAbstractItemView::EditTrigger trigger, QEvent *event);
+    virtual QFlags<QItemSelectionModel::SelectionFlag> selectionCommand(const QModelIndex &index, const QEvent *event = 0) const;
+    virtual void startDrag(Qt::DropActions supportedActions);
+    virtual QStyleOptionViewItem viewOptions() const;
+
+    enum State
+    {
+        NoState,
+        DraggingState,
+        DragSelectingState,
+        EditingState,
+        ExpandingState,
+        CollapsingState,
+        AnimatingState,
+    };
+
+    QAbstractItemView::State state() const;
+    void setState(QAbstractItemView::State state);
+    void scheduleDelayedItemsLayout();
+    void executeDelayedItemsLayout();
+    void scrollDirtyRegion(int dx, int dy);
+    void setDirtyRegion(const QRegion &region);
+    QPoint dirtyRegionOffset() const;
+    virtual bool event(QEvent *event);
+    virtual bool viewportEvent(QEvent *e);
+    virtual void mousePressEvent(QMouseEvent *e);
+    virtual void mouseMoveEvent(QMouseEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *e);
+    virtual void mouseDoubleClickEvent(QMouseEvent *e);
+    virtual void dragEnterEvent(QDragEnterEvent *e);
+    virtual void dragMoveEvent(QDragMoveEvent *e);
+    virtual void dragLeaveEvent(QDragLeaveEvent *e);
+    virtual void dropEvent(QDropEvent *e);
+    virtual void focusInEvent(QFocusEvent *e);
+    virtual void focusOutEvent(QFocusEvent *e);
+    virtual void keyPressEvent(QKeyEvent *e);
+    virtual void resizeEvent(QResizeEvent *e);
+    virtual void timerEvent(QTimerEvent *e);
+
+    enum DropIndicatorPosition
+    {
+        OnItem,
+        AboveItem,
+        BelowItem,
+        OnViewport,
+    };
+
+    QAbstractItemView::DropIndicatorPosition dropIndicatorPosition() const;
+
+public:
+    void setVerticalScrollMode(QAbstractItemView::ScrollMode mode);
+    QAbstractItemView::ScrollMode verticalScrollMode() const;
+    void setHorizontalScrollMode(QAbstractItemView::ScrollMode mode);
+    QAbstractItemView::ScrollMode horizontalScrollMode() const;
+    void setDragDropOverwriteMode(bool overwrite);
+    bool dragDropOverwriteMode() const;
+    void setDragDropMode(QAbstractItemView::DragDropMode behavior);
+    QAbstractItemView::DragDropMode dragDropMode() const;
+    void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate /KeepReference/);
+    QAbstractItemDelegate *itemDelegateForRow(int row) const;
+    void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate /KeepReference/);
+    QAbstractItemDelegate *itemDelegateForColumn(int column) const;
+    QAbstractItemDelegate *itemDelegate(const QModelIndex &index) const;
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
+    void setAutoScrollMargin(int margin);
+    int autoScrollMargin() const;
+
+protected:
+    virtual bool focusNextPrevChild(bool next);
+    virtual void inputMethodEvent(QInputMethodEvent *event);
+%If (Qt_5_2_0 -)
+    virtual QSize viewportSizeHint() const;
+%End
+
+public:
+    void setDefaultDropAction(Qt::DropAction dropAction);
+    Qt::DropAction defaultDropAction() const;
+
+private:
+    QAbstractItemView(const QAbstractItemView &);
+};
+
+QFlags<QAbstractItemView::EditTrigger> operator|(QAbstractItemView::EditTrigger f1, QFlags<QAbstractItemView::EditTrigger> f2);
diff --git a/sip/QtWidgets/qabstractscrollarea.sip b/sip/QtWidgets/qabstractscrollarea.sip
new file mode 100644
index 0000000..ba2a4f5
--- /dev/null
+++ b/sip/QtWidgets/qabstractscrollarea.sip
@@ -0,0 +1,96 @@
+// qabstractscrollarea.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractScrollArea : QFrame
+{
+%TypeHeaderCode
+#include <qabstractscrollarea.h>
+%End
+
+public:
+    explicit QAbstractScrollArea(QWidget *parent /TransferThis/ = 0);
+    virtual ~QAbstractScrollArea();
+    Qt::ScrollBarPolicy verticalScrollBarPolicy() const;
+    void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy);
+    QScrollBar *verticalScrollBar() const /Transfer/;
+    Qt::ScrollBarPolicy horizontalScrollBarPolicy() const;
+    void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy);
+    QScrollBar *horizontalScrollBar() const /Transfer/;
+    QWidget *viewport() const /Transfer/;
+    QSize maximumViewportSize() const;
+    virtual QSize minimumSizeHint() const;
+    virtual QSize sizeHint() const;
+
+protected:
+    void setViewportMargins(int left, int top, int right, int bottom);
+    virtual bool event(QEvent *);
+    virtual bool viewportEvent(QEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void mouseDoubleClickEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void wheelEvent(QWheelEvent *);
+    virtual void contextMenuEvent(QContextMenuEvent *);
+    virtual void dragEnterEvent(QDragEnterEvent *);
+    virtual void dragMoveEvent(QDragMoveEvent *);
+    virtual void dragLeaveEvent(QDragLeaveEvent *);
+    virtual void dropEvent(QDropEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual bool eventFilter(QObject *, QEvent *);
+    virtual void scrollContentsBy(int dx, int dy);
+
+public:
+    void setVerticalScrollBar(QScrollBar *scrollbar /Transfer/);
+    void setHorizontalScrollBar(QScrollBar *scrollbar /Transfer/);
+    QWidget *cornerWidget() const;
+    void setCornerWidget(QWidget *widget /Transfer/);
+    void addScrollBarWidget(QWidget *widget /Transfer/, Qt::Alignment alignment);
+    QWidgetList scrollBarWidgets(Qt::Alignment alignment) /Transfer/;
+    void setViewport(QWidget *widget /Transfer/);
+    virtual void setupViewport(QWidget *viewport);
+
+protected:
+    void setViewportMargins(const QMargins &margins);
+
+public:
+%If (Qt_5_2_0 -)
+
+    enum SizeAdjustPolicy
+    {
+        AdjustIgnored,
+        AdjustToContentsOnFirstShow,
+        AdjustToContents,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+    QAbstractScrollArea::SizeAdjustPolicy sizeAdjustPolicy() const;
+%End
+%If (Qt_5_2_0 -)
+    void setSizeAdjustPolicy(QAbstractScrollArea::SizeAdjustPolicy policy);
+%End
+
+private:
+    QAbstractScrollArea(const QAbstractScrollArea &);
+};
diff --git a/sip/QtWidgets/qabstractslider.sip b/sip/QtWidgets/qabstractslider.sip
new file mode 100644
index 0000000..22cdbd2
--- /dev/null
+++ b/sip/QtWidgets/qabstractslider.sip
@@ -0,0 +1,101 @@
+// qabstractslider.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractSlider : QWidget
+{
+%TypeHeaderCode
+#include <qabstractslider.h>
+%End
+
+public:
+    explicit QAbstractSlider(QWidget *parent /TransferThis/ = 0);
+    virtual ~QAbstractSlider();
+    Qt::Orientation orientation() const;
+    void setMinimum(int);
+    int minimum() const;
+    void setMaximum(int);
+    int maximum() const;
+    void setRange(int min, int max);
+    void setSingleStep(int);
+    int singleStep() const;
+    void setPageStep(int);
+    int pageStep() const;
+    void setTracking(bool enable);
+    bool hasTracking() const;
+    void setSliderDown(bool);
+    bool isSliderDown() const;
+    void setSliderPosition(int);
+    int sliderPosition() const;
+    void setInvertedAppearance(bool);
+    bool invertedAppearance() const;
+    void setInvertedControls(bool);
+    bool invertedControls() const;
+
+    enum SliderAction
+    {
+        SliderNoAction,
+        SliderSingleStepAdd,
+        SliderSingleStepSub,
+        SliderPageStepAdd,
+        SliderPageStepSub,
+        SliderToMinimum,
+        SliderToMaximum,
+        SliderMove,
+    };
+
+    int value() const;
+    void triggerAction(QAbstractSlider::SliderAction action);
+
+public slots:
+    void setValue(int);
+    void setOrientation(Qt::Orientation);
+
+signals:
+    void valueChanged(int value);
+    void sliderPressed();
+    void sliderMoved(int position);
+    void sliderReleased();
+    void rangeChanged(int min, int max);
+    void actionTriggered(int action);
+
+protected:
+    void setRepeatAction(QAbstractSlider::SliderAction action, int thresholdTime = 500, int repeatTime = 50);
+    QAbstractSlider::SliderAction repeatAction() const;
+
+    enum SliderChange
+    {
+        SliderRangeChange,
+        SliderOrientationChange,
+        SliderStepsChange,
+        SliderValueChange,
+    };
+
+    virtual void sliderChange(QAbstractSlider::SliderChange change);
+    virtual bool event(QEvent *e);
+    virtual void keyPressEvent(QKeyEvent *ev);
+    virtual void timerEvent(QTimerEvent *);
+    virtual void wheelEvent(QWheelEvent *e);
+    virtual void changeEvent(QEvent *e);
+
+private:
+    QAbstractSlider(const QAbstractSlider &);
+};
diff --git a/sip/QtWidgets/qabstractspinbox.sip b/sip/QtWidgets/qabstractspinbox.sip
new file mode 100644
index 0000000..7ad40d5
--- /dev/null
+++ b/sip/QtWidgets/qabstractspinbox.sip
@@ -0,0 +1,131 @@
+// qabstractspinbox.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qabstractspinbox.h>
+%End
+
+class QAbstractSpinBox : QWidget
+{
+%TypeHeaderCode
+#include <qabstractspinbox.h>
+%End
+
+public:
+    explicit QAbstractSpinBox(QWidget *parent /TransferThis/ = 0);
+    virtual ~QAbstractSpinBox();
+
+    enum StepEnabledFlag
+    {
+        StepNone,
+        StepUpEnabled,
+        StepDownEnabled,
+    };
+
+    typedef QFlags<QAbstractSpinBox::StepEnabledFlag> StepEnabled;
+
+    enum ButtonSymbols
+    {
+        UpDownArrows,
+        PlusMinus,
+        NoButtons,
+    };
+
+    QAbstractSpinBox::ButtonSymbols buttonSymbols() const;
+    void setButtonSymbols(QAbstractSpinBox::ButtonSymbols bs);
+    QString text() const;
+    QString specialValueText() const;
+    void setSpecialValueText(const QString &s);
+    bool wrapping() const;
+    void setWrapping(bool w);
+    void setReadOnly(bool r);
+    bool isReadOnly() const;
+    void setAlignment(Qt::Alignment flag);
+    Qt::Alignment alignment() const;
+    void setFrame(bool);
+    bool hasFrame() const;
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    void interpretText();
+    virtual bool event(QEvent *event);
+    virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const;
+    virtual void fixup(QString &input /In,Out/) const;
+    virtual void stepBy(int steps);
+
+public slots:
+    void stepUp();
+    void stepDown();
+    void selectAll();
+    virtual void clear();
+
+signals:
+    void editingFinished();
+
+protected:
+    virtual void resizeEvent(QResizeEvent *e);
+    virtual void keyPressEvent(QKeyEvent *e);
+    virtual void keyReleaseEvent(QKeyEvent *e);
+    virtual void wheelEvent(QWheelEvent *e);
+    virtual void focusInEvent(QFocusEvent *e);
+    virtual void focusOutEvent(QFocusEvent *e);
+    virtual void contextMenuEvent(QContextMenuEvent *e);
+    virtual void changeEvent(QEvent *e);
+    virtual void closeEvent(QCloseEvent *e);
+    virtual void hideEvent(QHideEvent *e);
+    virtual void mousePressEvent(QMouseEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *e);
+    virtual void mouseMoveEvent(QMouseEvent *e);
+    virtual void timerEvent(QTimerEvent *e);
+    virtual void paintEvent(QPaintEvent *e);
+    virtual void showEvent(QShowEvent *e);
+    QLineEdit *lineEdit() const;
+    void setLineEdit(QLineEdit *e /Transfer/);
+    virtual QFlags<QAbstractSpinBox::StepEnabledFlag> stepEnabled() const;
+    void initStyleOption(QStyleOptionSpinBox *option) const;
+
+public:
+    enum CorrectionMode
+    {
+        CorrectToPreviousValue,
+        CorrectToNearestValue,
+    };
+
+    void setCorrectionMode(QAbstractSpinBox::CorrectionMode cm);
+    QAbstractSpinBox::CorrectionMode correctionMode() const;
+    bool hasAcceptableInput() const;
+    void setAccelerated(bool on);
+    bool isAccelerated() const;
+    void setKeyboardTracking(bool kt);
+    bool keyboardTracking() const;
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const;
+%If (Qt_5_3_0 -)
+    void setGroupSeparatorShown(bool shown);
+%End
+%If (Qt_5_3_0 -)
+    bool isGroupSeparatorShown() const;
+%End
+
+private:
+    QAbstractSpinBox(const QAbstractSpinBox &);
+};
+
+QFlags<QAbstractSpinBox::StepEnabledFlag> operator|(QAbstractSpinBox::StepEnabledFlag f1, QFlags<QAbstractSpinBox::StepEnabledFlag> f2);
diff --git a/sip/QtWidgets/qaction.sip b/sip/QtWidgets/qaction.sip
new file mode 100644
index 0000000..9372d2e
--- /dev/null
+++ b/sip/QtWidgets/qaction.sip
@@ -0,0 +1,130 @@
+// qaction.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAction : QObject
+{
+%TypeHeaderCode
+#include <qaction.h>
+%End
+
+public:
+    explicit QAction(QObject *parent /TransferThis/);
+    QAction(const QString &text, QObject *parent /TransferThis/);
+    QAction(const QIcon &icon, const QString &text, QObject *parent /TransferThis/);
+    virtual ~QAction();
+    void setActionGroup(QActionGroup *group /KeepReference/);
+    QActionGroup *actionGroup() const;
+    void setIcon(const QIcon &icon);
+    QIcon icon() const;
+    void setText(const QString &text);
+    QString text() const;
+    void setIconText(const QString &text);
+    QString iconText() const;
+    void setToolTip(const QString &tip);
+    QString toolTip() const;
+    void setStatusTip(const QString &statusTip);
+    QString statusTip() const;
+    void setWhatsThis(const QString &what);
+    QString whatsThis() const;
+    QMenu *menu() const;
+    void setMenu(QMenu *menu /KeepReference/);
+    void setSeparator(bool b);
+    bool isSeparator() const;
+    void setShortcut(const QKeySequence &shortcut);
+    QKeySequence shortcut() const;
+    void setShortcutContext(Qt::ShortcutContext context);
+    Qt::ShortcutContext shortcutContext() const;
+    void setFont(const QFont &font);
+    QFont font() const;
+    void setCheckable(bool);
+    bool isCheckable() const;
+    QVariant data() const;
+    void setData(const QVariant &var);
+    bool isChecked() const;
+    bool isEnabled() const;
+    bool isVisible() const;
+
+    enum ActionEvent
+    {
+        Trigger,
+        Hover,
+    };
+
+    void activate(QAction::ActionEvent event);
+    bool showStatusText(QWidget *widget = 0);
+    QWidget *parentWidget() const;
+
+protected:
+    virtual bool event(QEvent *);
+
+public slots:
+    void trigger();
+    void hover();
+    void setChecked(bool);
+    void toggle();
+    void setEnabled(bool);
+    void setDisabled(bool b);
+    void setVisible(bool);
+
+signals:
+    void changed();
+    void triggered(bool checked = false);
+    void hovered();
+    void toggled(bool);
+
+public:
+    enum MenuRole
+    {
+        NoRole,
+        TextHeuristicRole,
+        ApplicationSpecificRole,
+        AboutQtRole,
+        AboutRole,
+        PreferencesRole,
+        QuitRole,
+    };
+
+    void setShortcuts(const QList<QKeySequence> &shortcuts);
+    void setShortcuts(QKeySequence::StandardKey);
+    QList<QKeySequence> shortcuts() const;
+    void setAutoRepeat(bool);
+    bool autoRepeat() const;
+    void setMenuRole(QAction::MenuRole menuRole);
+    QAction::MenuRole menuRole() const;
+    QList<QWidget*> associatedWidgets() const;
+    QList<QGraphicsWidget*> associatedGraphicsWidgets() const;
+    void setIconVisibleInMenu(bool visible);
+    bool isIconVisibleInMenu() const;
+
+    enum Priority
+    {
+        LowPriority,
+        NormalPriority,
+        HighPriority,
+    };
+
+    void setPriority(QAction::Priority priority);
+    QAction::Priority priority() const;
+
+private:
+    QAction(const QAction &);
+};
diff --git a/sip/QtWidgets/qactiongroup.sip b/sip/QtWidgets/qactiongroup.sip
new file mode 100644
index 0000000..acff8c8
--- /dev/null
+++ b/sip/QtWidgets/qactiongroup.sip
@@ -0,0 +1,54 @@
+// qactiongroup.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QActionGroup : QObject
+{
+%TypeHeaderCode
+#include <qactiongroup.h>
+%End
+
+public:
+    explicit QActionGroup(QObject *parent /TransferThis/);
+    virtual ~QActionGroup();
+    QAction *addAction(QAction *a /Transfer/);
+    QAction *addAction(const QString &text) /Transfer/;
+    QAction *addAction(const QIcon &icon, const QString &text) /Transfer/;
+    void removeAction(QAction *a /TransferBack/);
+    QList<QAction*> actions() const;
+    QAction *checkedAction() const;
+    bool isExclusive() const;
+    bool isEnabled() const;
+    bool isVisible() const;
+
+public slots:
+    void setEnabled(bool);
+    void setDisabled(bool b);
+    void setVisible(bool);
+    void setExclusive(bool);
+
+signals:
+    void triggered(QAction *);
+    void hovered(QAction *);
+
+private:
+    QActionGroup(const QActionGroup &);
+};
diff --git a/sip/QtWidgets/qapplication.sip b/sip/QtWidgets/qapplication.sip
new file mode 100644
index 0000000..fbef83a
--- /dev/null
+++ b/sip/QtWidgets/qapplication.sip
@@ -0,0 +1,345 @@
+// qapplication.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+// QApplication *qApp
+QApplication *qApp {
+%AccessCode
+    // Qt implements this has a #define to a function call so we have to handle
+    // it like this.
+    return qApp;
+%End
+};
+typedef QList<QWidget *> QWidgetList;
+
+class QApplication : QGuiApplication
+{
+%TypeHeaderCode
+#include <qapplication.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QScroller, &sipType_QScroller, -1, 1},
+        {sipName_QGraphicsTransform, &sipType_QGraphicsTransform, 26, 2},
+        {sipName_QGraphicsAnchor, &sipType_QGraphicsAnchor, -1, 3},
+        {sipName_QGesture, &sipType_QGesture, 28, 4},
+        {sipName_QKeyEventTransition, &sipType_QKeyEventTransition, -1, 5},
+        {sipName_QGraphicsScene, &sipType_QGraphicsScene, -1, 6},
+        {sipName_QUndoGroup, &sipType_QUndoGroup, -1, 7},
+        {sipName_QDirModel, &sipType_QDirModel, -1, 8},
+        {sipName_QPlainTextDocumentLayout, &sipType_QPlainTextDocumentLayout, -1, 9},
+        {sipName_QGraphicsObject, &sipType_QGraphicsObject, 33, 10},
+        {sipName_QSystemTrayIcon, &sipType_QSystemTrayIcon, -1, 11},
+        {sipName_QFileSystemModel, &sipType_QFileSystemModel, -1, 12},
+        {sipName_QStyle, &sipType_QStyle, 36, 13},
+        {sipName_QWidget, &sipType_QWidget, 37, 14},
+        {sipName_QButtonGroup, &sipType_QButtonGroup, -1, 15},
+        {sipName_QUndoStack, &sipType_QUndoStack, -1, 16},
+        {sipName_QActionGroup, &sipType_QActionGroup, -1, 17},
+        {sipName_QDataWidgetMapper, &sipType_QDataWidgetMapper, -1, 18},
+        {sipName_QGraphicsEffect, &sipType_QGraphicsEffect, 109, 19},
+        {sipName_QApplication, &sipType_QApplication, -1, 20},
+        {sipName_QShortcut, &sipType_QShortcut, -1, 21},
+        {sipName_QLayout, &sipType_QLayout, 113, 22},
+        {sipName_QCompleter, &sipType_QCompleter, -1, 23},
+        {sipName_QAbstractItemDelegate, &sipType_QAbstractItemDelegate, 119, 24},
+        {sipName_QMouseEventTransition, &sipType_QMouseEventTransition, -1, 25},
+        {sipName_QAction, &sipType_QAction, 121, -1},
+        {sipName_QGraphicsRotation, &sipType_QGraphicsRotation, -1, 27},
+        {sipName_QGraphicsScale, &sipType_QGraphicsScale, -1, -1},
+        {sipName_QPinchGesture, &sipType_QPinchGesture, -1, 29},
+        {sipName_QSwipeGesture, &sipType_QSwipeGesture, -1, 30},
+        {sipName_QTapAndHoldGesture, &sipType_QTapAndHoldGesture, -1, 31},
+        {sipName_QTapGesture, &sipType_QTapGesture, -1, 32},
+        {sipName_QPanGesture, &sipType_QPanGesture, -1, -1},
+        {sipName_QGraphicsWidget, &sipType_QGraphicsWidget, 35, 34},
+        {sipName_QGraphicsTextItem, &sipType_QGraphicsTextItem, -1, -1},
+        {sipName_QGraphicsProxyWidget, &sipType_QGraphicsProxyWidget, -1, -1},
+        {sipName_QCommonStyle, &sipType_QCommonStyle, -1, -1},
+        {sipName_QWizardPage, &sipType_QWizardPage, -1, 38},
+        {sipName_QFocusFrame, &sipType_QFocusFrame, -1, 39},
+        {sipName_QGroupBox, &sipType_QGroupBox, -1, 40},
+        {sipName_QComboBox, &sipType_QComboBox, 65, 41},
+        {sipName_QAbstractSlider, &sipType_QAbstractSlider, 66, 42},
+        {sipName_QRubberBand, &sipType_QRubberBand, -1, 43},
+        {sipName_QLineEdit, &sipType_QLineEdit, -1, 44},
+        {sipName_QTabBar, &sipType_QTabBar, -1, 45},
+        {sipName_QDialog, &sipType_QDialog, 69, 46},
+        {sipName_QMdiSubWindow, &sipType_QMdiSubWindow, -1, 47},
+        {sipName_QToolBar, &sipType_QToolBar, -1, 48},
+        {sipName_QDockWidget, &sipType_QDockWidget, -1, 49},
+        {sipName_QSizeGrip, &sipType_QSizeGrip, -1, 50},
+        {sipName_QMenuBar, &sipType_QMenuBar, -1, 51},
+        {sipName_QDialogButtonBox, &sipType_QDialogButtonBox, -1, 52},
+        {sipName_QTabWidget, &sipType_QTabWidget, -1, 53},
+        {sipName_QMenu, &sipType_QMenu, -1, 54},
+        {sipName_QMainWindow, &sipType_QMainWindow, -1, 55},
+        {sipName_QCalendarWidget, &sipType_QCalendarWidget, -1, 56},
+        {sipName_QStatusBar, &sipType_QStatusBar, -1, 57},
+    #if QT_VERSION >= 0x050200
+        {sipName_QKeySequenceEdit, &sipType_QKeySequenceEdit, -1, 58},
+    #else
+        {0, 0, -1, 58},
+    #endif
+        {sipName_QAbstractSpinBox, &sipType_QAbstractSpinBox, 77, 59},
+        {sipName_QSplitterHandle, &sipType_QSplitterHandle, -1, 60},
+        {sipName_QSplashScreen, &sipType_QSplashScreen, -1, 61},
+        {sipName_QFrame, &sipType_QFrame, 82, 62},
+        {sipName_QDesktopWidget, &sipType_QDesktopWidget, -1, 63},
+        {sipName_QProgressBar, &sipType_QProgressBar, -1, 64},
+        {sipName_QAbstractButton, &sipType_QAbstractButton, 104, -1},
+        {sipName_QFontComboBox, &sipType_QFontComboBox, -1, -1},
+        {sipName_QDial, &sipType_QDial, -1, 67},
+        {sipName_QScrollBar, &sipType_QScrollBar, -1, 68},
+        {sipName_QSlider, &sipType_QSlider, -1, -1},
+        {sipName_QErrorMessage, &sipType_QErrorMessage, -1, 70},
+        {sipName_QFontDialog, &sipType_QFontDialog, -1, 71},
+        {sipName_QWizard, &sipType_QWizard, -1, 72},
+        {sipName_QFileDialog, &sipType_QFileDialog, -1, 73},
+        {sipName_QInputDialog, &sipType_QInputDialog, -1, 74},
+        {sipName_QProgressDialog, &sipType_QProgressDialog, -1, 75},
+        {sipName_QColorDialog, &sipType_QColorDialog, -1, 76},
+        {sipName_QMessageBox, &sipType_QMessageBox, -1, -1},
+        {sipName_QSpinBox, &sipType_QSpinBox, -1, 78},
+        {sipName_QDoubleSpinBox, &sipType_QDoubleSpinBox, -1, 79},
+        {sipName_QDateTimeEdit, &sipType_QDateTimeEdit, 80, -1},
+        {sipName_QTimeEdit, &sipType_QTimeEdit, -1, 81},
+        {sipName_QDateEdit, &sipType_QDateEdit, -1, -1},
+        {sipName_QLabel, &sipType_QLabel, -1, 83},
+        {sipName_QSplitter, &sipType_QSplitter, -1, 84},
+        {sipName_QToolBox, &sipType_QToolBox, -1, 85},
+        {sipName_QLCDNumber, &sipType_QLCDNumber, -1, 86},
+        {sipName_QAbstractScrollArea, &sipType_QAbstractScrollArea, 88, 87},
+        {sipName_QStackedWidget, &sipType_QStackedWidget, -1, -1},
+        {sipName_QMdiArea, &sipType_QMdiArea, -1, 89},
+        {sipName_QTextEdit, &sipType_QTextEdit, 94, 90},
+        {sipName_QPlainTextEdit, &sipType_QPlainTextEdit, -1, 91},
+        {sipName_QScrollArea, &sipType_QScrollArea, -1, 92},
+        {sipName_QGraphicsView, &sipType_QGraphicsView, -1, 93},
+        {sipName_QAbstractItemView, &sipType_QAbstractItemView, 95, -1},
+        {sipName_QTextBrowser, &sipType_QTextBrowser, -1, -1},
+        {sipName_QTableView, &sipType_QTableView, 100, 96},
+        {sipName_QListView, &sipType_QListView, 101, 97},
+        {sipName_QHeaderView, &sipType_QHeaderView, -1, 98},
+        {sipName_QTreeView, &sipType_QTreeView, 103, 99},
+        {sipName_QColumnView, &sipType_QColumnView, -1, -1},
+        {sipName_QTableWidget, &sipType_QTableWidget, -1, -1},
+        {sipName_QListWidget, &sipType_QListWidget, -1, 102},
+        {sipName_QUndoView, &sipType_QUndoView, -1, -1},
+        {sipName_QTreeWidget, &sipType_QTreeWidget, -1, -1},
+        {sipName_QToolButton, &sipType_QToolButton, -1, 105},
+        {sipName_QPushButton, &sipType_QPushButton, 108, 106},
+        {sipName_QCheckBox, &sipType_QCheckBox, -1, 107},
+        {sipName_QRadioButton, &sipType_QRadioButton, -1, -1},
+        {sipName_QCommandLinkButton, &sipType_QCommandLinkButton, -1, -1},
+        {sipName_QGraphicsOpacityEffect, &sipType_QGraphicsOpacityEffect, -1, 110},
+        {sipName_QGraphicsBlurEffect, &sipType_QGraphicsBlurEffect, -1, 111},
+        {sipName_QGraphicsColorizeEffect, &sipType_QGraphicsColorizeEffect, -1, 112},
+        {sipName_QGraphicsDropShadowEffect, &sipType_QGraphicsDropShadowEffect, -1, -1},
+        {sipName_QGridLayout, &sipType_QGridLayout, -1, 114},
+        {sipName_QBoxLayout, &sipType_QBoxLayout, 117, 115},
+        {sipName_QFormLayout, &sipType_QFormLayout, -1, 116},
+        {sipName_QStackedLayout, &sipType_QStackedLayout, -1, -1},
+        {sipName_QHBoxLayout, &sipType_QHBoxLayout, -1, 118},
+        {sipName_QVBoxLayout, &sipType_QVBoxLayout, -1, -1},
+        {sipName_QItemDelegate, &sipType_QItemDelegate, -1, 120},
+        {sipName_QStyledItemDelegate, &sipType_QStyledItemDelegate, -1, -1},
+        {sipName_QWidgetAction, &sipType_QWidgetAction, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    QApplication(SIP_PYLIST argv /DocType="list-of-str"/) /PostHook=__pyQtQAppHook__/ [(int &argc, char **argv, int = ApplicationFlags)];
+%MethodCode
+        // The Python interface is a list of argument strings that is modified.
+        
+        int argc;
+        char **argv;
+        
+        // Convert the list.
+        if ((argv = pyqt5_qtwidgets_from_argv_list(a0, argc)) == NULL)
+            sipIsErr = 1;
+        else
+        {
+            // Create it now the arguments are right.
+            static int nargc;
+            nargc = argc;
+        
+            Py_BEGIN_ALLOW_THREADS
+            sipCpp = new sipQApplication(nargc, argv, QCoreApplication::ApplicationFlags);
+            Py_END_ALLOW_THREADS
+        
+            // Now modify the original list.
+            pyqt5_qtwidgets_update_argv_list(a0, argc, argv);
+        }
+%End
+
+    virtual ~QApplication();
+%MethodCode
+        // Make sure all top level widgets are not owned by Python and so won't be
+        // destroyed by the garbage collector after QApplication is destroyed.
+        QWidgetList tlw = QApplication::topLevelWidgets();
+        
+        for (int i = 0; i < tlw.count(); ++i)
+        {
+            PyObject *sw = sipGetPyObject(tlw.at(i), sipType_QWidget);
+        
+            if (sw)
+                sipTransferTo(sw, 0);
+        }
+%End
+
+    static QStyle *style();
+    static void setStyle(QStyle * /Transfer/);
+    static QStyle *setStyle(const QString &);
+
+    enum ColorSpec
+    {
+        NormalColor,
+        CustomColor,
+        ManyColor,
+    };
+
+    static int colorSpec();
+    static void setColorSpec(int);
+    static QPalette palette();
+    static QPalette palette(const QWidget *);
+    static QPalette palette(const char *className);
+    static void setPalette(const QPalette &, const char *className = 0);
+    static QFont font();
+    static QFont font(const QWidget *);
+    static QFont font(const char *className);
+    static void setFont(const QFont &, const char *className = 0);
+    static QFontMetrics fontMetrics();
+    static void setWindowIcon(const QIcon &icon);
+    static QIcon windowIcon();
+    static QWidgetList allWidgets();
+    static QWidgetList topLevelWidgets();
+    static QDesktopWidget *desktop();
+    static QWidget *activePopupWidget();
+    static QWidget *activeModalWidget();
+    static QWidget *focusWidget();
+    static QWidget *activeWindow();
+    static void setActiveWindow(QWidget *act);
+    static QWidget *widgetAt(const QPoint &p);
+    static QWidget *widgetAt(int x, int y);
+    static QWidget *topLevelAt(const QPoint &p);
+    static QWidget *topLevelAt(int x, int y);
+    static void beep();
+    static void alert(QWidget *widget, int msecs = 0) /ReleaseGIL/;
+    static void setCursorFlashTime(int);
+    static int cursorFlashTime();
+    static void setDoubleClickInterval(int);
+    static int doubleClickInterval();
+    static void setKeyboardInputInterval(int);
+    static int keyboardInputInterval();
+    static void setWheelScrollLines(int);
+    static int wheelScrollLines();
+    static void setGlobalStrut(const QSize &);
+    static QSize globalStrut();
+    static void setStartDragTime(int ms);
+    static int startDragTime();
+    static void setStartDragDistance(int l);
+    static int startDragDistance();
+    static bool isEffectEnabled(Qt::UIEffect);
+    static void setEffectEnabled(Qt::UIEffect, bool enabled = true);
+    static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    static int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/;
+%End
+    virtual bool notify(QObject *, QEvent *) /ReleaseGIL/;
+    bool autoSipEnabled() const;
+    QString styleSheet() const;
+
+signals:
+    void focusChanged(QWidget *old, QWidget *now);
+
+public slots:
+    static void aboutQt();
+    static void closeAllWindows();
+    void setAutoSipEnabled(const bool enabled);
+    void setStyleSheet(const QString &sheet);
+
+protected:
+    virtual bool event(QEvent *);
+
+private:
+    QApplication(const QApplication &);
+};
+
+%ModuleHeaderCode
+// Imports from QtCore.
+typedef char **(*pyqt5_qtwidgets_from_argv_list_t)(PyObject *, int &);
+extern pyqt5_qtwidgets_from_argv_list_t pyqt5_qtwidgets_from_argv_list;
+
+typedef sipErrorState (*pyqt5_qtwidgets_get_connection_parts_t)(PyObject *, QObject *, const char *, bool, QObject **, QByteArray &);
+extern pyqt5_qtwidgets_get_connection_parts_t pyqt5_qtwidgets_get_connection_parts;
+
+typedef sipErrorState (*pyqt5_qtwidgets_get_pyqtsignal_parts_t)(PyObject *, QObject **, QByteArray &);
+extern pyqt5_qtwidgets_get_pyqtsignal_parts_t pyqt5_qtwidgets_get_pyqtsignal_parts;
+
+typedef void (*pyqt5_qtwidgets_update_argv_list_t)(PyObject *, int, char **);
+extern pyqt5_qtwidgets_update_argv_list_t pyqt5_qtwidgets_update_argv_list;
+
+// This is needed for Qt v5.0.0.
+#if defined(B0)
+#undef B0
+#endif
+%End
+
+%ModuleCode
+// Imports from QtCore.
+pyqt5_qtwidgets_from_argv_list_t pyqt5_qtwidgets_from_argv_list;
+pyqt5_qtwidgets_get_connection_parts_t pyqt5_qtwidgets_get_connection_parts;
+pyqt5_qtwidgets_get_pyqtsignal_parts_t pyqt5_qtwidgets_get_pyqtsignal_parts;
+pyqt5_qtwidgets_update_argv_list_t pyqt5_qtwidgets_update_argv_list;
+%End
+
+%PostInitialisationCode
+// Imports from QtCore.
+pyqt5_qtwidgets_from_argv_list = (pyqt5_qtwidgets_from_argv_list_t)sipImportSymbol("pyqt5_from_argv_list");
+pyqt5_qtwidgets_get_connection_parts = (pyqt5_qtwidgets_get_connection_parts_t)sipImportSymbol("pyqt5_get_connection_parts");
+pyqt5_qtwidgets_get_pyqtsignal_parts = (pyqt5_qtwidgets_get_pyqtsignal_parts_t)sipImportSymbol("pyqt5_get_pyqtsignal_parts");
+pyqt5_qtwidgets_update_argv_list = (pyqt5_qtwidgets_update_argv_list_t)sipImportSymbol("pyqt5_update_argv_list");
+%End
diff --git a/sip/QtWidgets/qboxlayout.sip b/sip/QtWidgets/qboxlayout.sip
new file mode 100644
index 0000000..c584b39
--- /dev/null
+++ b/sip/QtWidgets/qboxlayout.sip
@@ -0,0 +1,154 @@
+// qboxlayout.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QBoxLayout : QLayout
+{
+%TypeHeaderCode
+#include <qboxlayout.h>
+%End
+
+public:
+    enum Direction
+    {
+        LeftToRight,
+        RightToLeft,
+        TopToBottom,
+        BottomToTop,
+        Down,
+        Up,
+    };
+
+    QBoxLayout(QBoxLayout::Direction direction, QWidget *parent /TransferThis/ = 0);
+    virtual ~QBoxLayout();
+    QBoxLayout::Direction direction() const;
+    void setDirection(QBoxLayout::Direction);
+    void addSpacing(int size);
+    void addStretch(int stretch = 0);
+    void addWidget(QWidget * /GetWrapper/, int stretch = 0, Qt::Alignment alignment = 0);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->addWidget(a0, a1, *a2);
+        Py_END_ALLOW_THREADS
+        
+        // The layout's parent widget (if there is one) will now have ownership.
+        QWidget *parent = sipCpp->parentWidget();
+        
+        if (parent)
+        {
+            PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget);
+        
+            if (py_parent)
+                sipTransferTo(a0Wrapper, py_parent);
+        }
+        else
+        {
+            // For now give the Python ownership to the layout.  This maintains
+            // compatibility with previous versions and allows addWidget(QWidget()).
+            sipTransferTo(a0Wrapper, sipSelf);
+        }
+%End
+
+    void addLayout(QLayout *layout /Transfer/, int stretch = 0);
+    void addStrut(int);
+    virtual void addItem(QLayoutItem * /Transfer/);
+    void insertSpacing(int index, int size);
+    void insertStretch(int index, int stretch = 0);
+    void insertWidget(int index, QWidget *widget /GetWrapper/, int stretch = 0, Qt::Alignment alignment = 0);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->insertWidget(a0, a1, a2, *a3);
+        Py_END_ALLOW_THREADS
+        
+        // The layout's parent widget (if there is one) will now have ownership.
+        QWidget *parent = sipCpp->parentWidget();
+        
+        if (parent)
+        {
+            PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget);
+        
+            if (py_parent)
+                sipTransferTo(a1Wrapper, py_parent);
+        }
+        else
+        {
+            // For now give the Python ownership to the layout.  This maintains
+            // compatibility with previous versions and allows insertWidget(QWidget()).
+            sipTransferTo(a1Wrapper, sipSelf);
+        }
+%End
+
+    void insertLayout(int index, QLayout *layout /Transfer/, int stretch = 0);
+    bool setStretchFactor(QWidget *w, int stretch);
+    bool setStretchFactor(QLayout *l, int stretch);
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSize() const;
+    virtual QSize maximumSize() const;
+    virtual bool hasHeightForWidth() const;
+    virtual int heightForWidth(int) const;
+    virtual int minimumHeightForWidth(int) const;
+    virtual Qt::Orientations expandingDirections() const;
+    virtual void invalidate();
+    virtual QLayoutItem *itemAt(int) const;
+    virtual QLayoutItem *takeAt(int) /TransferBack/;
+    virtual int count() const;
+    virtual void setGeometry(const QRect &);
+    int spacing() const;
+    void setSpacing(int spacing);
+    void addSpacerItem(QSpacerItem *spacerItem /Transfer/);
+    void insertSpacerItem(int index, QSpacerItem *spacerItem /Transfer/);
+    void setStretch(int index, int stretch);
+    int stretch(int index) const;
+    void insertItem(int index, QLayoutItem * /TransferThis/);
+
+private:
+    QBoxLayout(const QBoxLayout &);
+};
+
+class QHBoxLayout : QBoxLayout
+{
+%TypeHeaderCode
+#include <qboxlayout.h>
+%End
+
+public:
+    QHBoxLayout();
+    explicit QHBoxLayout(QWidget *parent /TransferThis/);
+    virtual ~QHBoxLayout();
+
+private:
+    QHBoxLayout(const QHBoxLayout &);
+};
+
+class QVBoxLayout : QBoxLayout
+{
+%TypeHeaderCode
+#include <qboxlayout.h>
+%End
+
+public:
+    QVBoxLayout();
+    explicit QVBoxLayout(QWidget *parent /TransferThis/);
+    virtual ~QVBoxLayout();
+
+private:
+    QVBoxLayout(const QVBoxLayout &);
+};
diff --git a/sip/QtWidgets/qbuttongroup.sip b/sip/QtWidgets/qbuttongroup.sip
new file mode 100644
index 0000000..4776e40
--- /dev/null
+++ b/sip/QtWidgets/qbuttongroup.sip
@@ -0,0 +1,59 @@
+// qbuttongroup.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QButtonGroup : QObject
+{
+%TypeHeaderCode
+#include <qbuttongroup.h>
+%End
+
+public:
+    explicit QButtonGroup(QObject *parent /TransferThis/ = 0);
+    virtual ~QButtonGroup();
+    void setExclusive(bool);
+    bool exclusive() const;
+    void addButton(QAbstractButton *, int id = -1);
+    void removeButton(QAbstractButton *);
+    QList<QAbstractButton*> buttons() const;
+    QAbstractButton *button(int id) const;
+    QAbstractButton *checkedButton() const;
+    void setId(QAbstractButton *button, int id);
+    int id(QAbstractButton *button) const;
+    int checkedId() const;
+
+signals:
+    void buttonClicked(QAbstractButton *);
+    void buttonClicked(int);
+    void buttonPressed(QAbstractButton *);
+    void buttonPressed(int);
+    void buttonReleased(QAbstractButton *);
+    void buttonReleased(int);
+%If (Qt_5_2_0 -)
+    void buttonToggled(QAbstractButton *, bool);
+%End
+%If (Qt_5_2_0 -)
+    void buttonToggled(int, bool);
+%End
+
+private:
+    QButtonGroup(const QButtonGroup &);
+};
diff --git a/sip/QtWidgets/qcalendarwidget.sip b/sip/QtWidgets/qcalendarwidget.sip
new file mode 100644
index 0000000..ea7a001
--- /dev/null
+++ b/sip/QtWidgets/qcalendarwidget.sip
@@ -0,0 +1,118 @@
+// qcalendarwidget.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCalendarWidget : QWidget
+{
+%TypeHeaderCode
+#include <qcalendarwidget.h>
+%End
+
+public:
+    enum HorizontalHeaderFormat
+    {
+        NoHorizontalHeader,
+        SingleLetterDayNames,
+        ShortDayNames,
+        LongDayNames,
+    };
+
+    enum VerticalHeaderFormat
+    {
+        NoVerticalHeader,
+        ISOWeekNumbers,
+    };
+
+    enum SelectionMode
+    {
+        NoSelection,
+        SingleSelection,
+    };
+
+    explicit QCalendarWidget(QWidget *parent /TransferThis/ = 0);
+    virtual ~QCalendarWidget();
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    QDate selectedDate() const;
+    int yearShown() const;
+    int monthShown() const;
+    QDate minimumDate() const;
+    void setMinimumDate(const QDate &date);
+    QDate maximumDate() const;
+    void setMaximumDate(const QDate &date);
+    Qt::DayOfWeek firstDayOfWeek() const;
+    void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek);
+    bool isGridVisible() const;
+    void setGridVisible(bool show);
+    QCalendarWidget::SelectionMode selectionMode() const;
+    void setSelectionMode(QCalendarWidget::SelectionMode mode);
+    QCalendarWidget::HorizontalHeaderFormat horizontalHeaderFormat() const;
+    void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format);
+    QCalendarWidget::VerticalHeaderFormat verticalHeaderFormat() const;
+    void setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format);
+    QTextCharFormat headerTextFormat() const;
+    void setHeaderTextFormat(const QTextCharFormat &format);
+    QTextCharFormat weekdayTextFormat(Qt::DayOfWeek dayOfWeek) const;
+    void setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, const QTextCharFormat &format);
+    QMap<QDate, QTextCharFormat> dateTextFormat() const;
+    QTextCharFormat dateTextFormat(const QDate &date) const;
+    void setDateTextFormat(const QDate &date, const QTextCharFormat &color);
+
+protected:
+    void updateCell(const QDate &date);
+    void updateCells();
+    virtual bool event(QEvent *event);
+    virtual bool eventFilter(QObject *watched, QEvent *event);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void resizeEvent(QResizeEvent *event);
+    virtual void keyPressEvent(QKeyEvent *event);
+    virtual void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const;
+
+public slots:
+    void setCurrentPage(int year, int month);
+    void setDateRange(const QDate &min, const QDate &max);
+    void setSelectedDate(const QDate &date);
+    void showNextMonth();
+    void showNextYear();
+    void showPreviousMonth();
+    void showPreviousYear();
+    void showSelectedDate();
+    void showToday();
+
+signals:
+    void activated(const QDate &date);
+    void clicked(const QDate &date);
+    void currentPageChanged(int year, int month);
+    void selectionChanged();
+
+public:
+    bool isNavigationBarVisible() const;
+    bool isDateEditEnabled() const;
+    void setDateEditEnabled(bool enable);
+    int dateEditAcceptDelay() const;
+    void setDateEditAcceptDelay(int delay);
+
+public slots:
+    void setNavigationBarVisible(bool visible);
+
+private:
+    QCalendarWidget(const QCalendarWidget &);
+};
diff --git a/sip/QtWidgets/qcheckbox.sip b/sip/QtWidgets/qcheckbox.sip
new file mode 100644
index 0000000..b083188
--- /dev/null
+++ b/sip/QtWidgets/qcheckbox.sip
@@ -0,0 +1,54 @@
+// qcheckbox.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCheckBox : QAbstractButton
+{
+%TypeHeaderCode
+#include <qcheckbox.h>
+%End
+
+public:
+    explicit QCheckBox(QWidget *parent /TransferThis/ = 0);
+    QCheckBox(const QString &text, QWidget *parent /TransferThis/ = 0);
+    virtual ~QCheckBox();
+    virtual QSize sizeHint() const;
+    void setTristate(bool on = true);
+    bool isTristate() const;
+    Qt::CheckState checkState() const;
+    void setCheckState(Qt::CheckState state);
+    virtual QSize minimumSizeHint() const;
+
+signals:
+    void stateChanged(int);
+
+protected:
+    virtual bool hitButton(const QPoint &pos) const;
+    virtual void checkStateSet();
+    virtual void nextCheckState();
+    virtual bool event(QEvent *e);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    void initStyleOption(QStyleOptionButton *option) const;
+
+private:
+    QCheckBox(const QCheckBox &);
+};
diff --git a/sip/QtWidgets/qcolordialog.sip b/sip/QtWidgets/qcolordialog.sip
new file mode 100644
index 0000000..004dbc3
--- /dev/null
+++ b/sip/QtWidgets/qcolordialog.sip
@@ -0,0 +1,90 @@
+// qcolordialog.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qcolordialog.h>
+%End
+
+class QColorDialog : QDialog
+{
+%TypeHeaderCode
+#include <qcolordialog.h>
+%End
+
+public:
+    enum ColorDialogOption
+    {
+        ShowAlphaChannel,
+        NoButtons,
+        DontUseNativeDialog,
+    };
+
+    typedef QFlags<QColorDialog::ColorDialogOption> ColorDialogOptions;
+    explicit QColorDialog(QWidget *parent /TransferThis/ = 0);
+    QColorDialog(const QColor &initial, QWidget *parent /TransferThis/ = 0);
+    virtual ~QColorDialog();
+    static QColor getColor(const QColor &initial = Qt::white, QWidget *parent = 0, const QString &title = QString(), QFlags<QColorDialog::ColorDialogOption> options = 0) /ReleaseGIL/;
+    static int customCount();
+    static QColor customColor(int index);
+    static void setCustomColor(int index, QColor color);
+    static QColor standardColor(int index);
+    static void setStandardColor(int index, QColor color);
+
+signals:
+    void colorSelected(const QColor &color);
+    void currentColorChanged(const QColor &color);
+
+protected:
+    virtual void changeEvent(QEvent *e);
+    virtual void done(int result);
+
+private:
+    QColorDialog(const QColorDialog &);
+
+public:
+    void setCurrentColor(const QColor &color);
+    QColor currentColor() const;
+    QColor selectedColor() const;
+    void setOption(QColorDialog::ColorDialogOption option, bool on = true);
+    bool testOption(QColorDialog::ColorDialogOption option) const;
+    void setOptions(QFlags<QColorDialog::ColorDialogOption> options);
+    QFlags<QColorDialog::ColorDialogOption> options() const;
+    virtual void open();
+    void open(SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipCpp->open(receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    virtual void setVisible(bool visible);
+};
+
+QFlags<QColorDialog::ColorDialogOption> operator|(QColorDialog::ColorDialogOption f1, QFlags<QColorDialog::ColorDialogOption> f2);
diff --git a/sip/QtWidgets/qcolumnview.sip b/sip/QtWidgets/qcolumnview.sip
new file mode 100644
index 0000000..1368eb7
--- /dev/null
+++ b/sip/QtWidgets/qcolumnview.sip
@@ -0,0 +1,68 @@
+// qcolumnview.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QColumnView : QAbstractItemView
+{
+%TypeHeaderCode
+#include <qcolumnview.h>
+%End
+
+public:
+    explicit QColumnView(QWidget *parent /TransferThis/ = 0);
+    virtual ~QColumnView();
+    QList<int> columnWidths() const;
+    QWidget *previewWidget() const;
+    bool resizeGripsVisible() const;
+    void setColumnWidths(const QList<int> &list);
+    void setPreviewWidget(QWidget *widget /Transfer/);
+    void setResizeGripsVisible(bool visible);
+    virtual QModelIndex indexAt(const QPoint &point) const;
+    virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible);
+    virtual QSize sizeHint() const;
+    virtual QRect visualRect(const QModelIndex &index) const;
+    virtual void setModel(QAbstractItemModel *model /KeepReference/);
+    virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/);
+    virtual void setRootIndex(const QModelIndex &index);
+    virtual void selectAll();
+
+signals:
+    void updatePreviewWidget(const QModelIndex &index);
+
+protected:
+    virtual QAbstractItemView *createColumn(const QModelIndex &rootIndex);
+    void initializeColumn(QAbstractItemView *column) const;
+    virtual bool isIndexHidden(const QModelIndex &index) const;
+    virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
+    virtual void resizeEvent(QResizeEvent *event);
+    virtual void setSelection(const QRect &rect, QFlags<QItemSelectionModel::SelectionFlag> command);
+    virtual QRegion visualRegionForSelection(const QItemSelection &selection) const;
+    virtual int horizontalOffset() const;
+    virtual int verticalOffset() const;
+    virtual void scrollContentsBy(int dx, int dy);
+    virtual void rowsInserted(const QModelIndex &parent, int start, int end);
+
+protected slots:
+    virtual void currentChanged(const QModelIndex &current, const QModelIndex &previous);
+
+private:
+    QColumnView(const QColumnView &);
+};
diff --git a/sip/QtWidgets/qcombobox.sip b/sip/QtWidgets/qcombobox.sip
new file mode 100644
index 0000000..8f35f00
--- /dev/null
+++ b/sip/QtWidgets/qcombobox.sip
@@ -0,0 +1,154 @@
+// qcombobox.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QComboBox : QWidget
+{
+%TypeHeaderCode
+#include <qcombobox.h>
+%End
+
+public:
+    explicit QComboBox(QWidget *parent /TransferThis/ = 0);
+    virtual ~QComboBox();
+    int maxVisibleItems() const;
+    void setMaxVisibleItems(int maxItems);
+    int count() const /__len__/;
+    void setMaxCount(int max);
+    int maxCount() const;
+    bool duplicatesEnabled() const;
+    void setDuplicatesEnabled(bool enable);
+    void setFrame(bool);
+    bool hasFrame() const;
+    int findText(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive) const;
+    int findData(const QVariant &data, int role = Qt::UserRole, Qt::MatchFlags flags = Qt::MatchExactly|Qt::MatchCaseSensitive) const;
+
+    enum InsertPolicy
+    {
+        NoInsert,
+        InsertAtTop,
+        InsertAtCurrent,
+        InsertAtBottom,
+        InsertAfterCurrent,
+        InsertBeforeCurrent,
+        InsertAlphabetically,
+    };
+
+    QComboBox::InsertPolicy insertPolicy() const;
+    void setInsertPolicy(QComboBox::InsertPolicy policy);
+
+    enum SizeAdjustPolicy
+    {
+        AdjustToContents,
+        AdjustToContentsOnFirstShow,
+        AdjustToMinimumContentsLength,
+        AdjustToMinimumContentsLengthWithIcon,
+    };
+
+    QComboBox::SizeAdjustPolicy sizeAdjustPolicy() const;
+    void setSizeAdjustPolicy(QComboBox::SizeAdjustPolicy policy);
+    int minimumContentsLength() const;
+    void setMinimumContentsLength(int characters);
+    QSize iconSize() const;
+    void setIconSize(const QSize &size);
+    bool isEditable() const;
+    void setEditable(bool editable);
+    void setLineEdit(QLineEdit *edit /Transfer/);
+    QLineEdit *lineEdit() const;
+    void setValidator(const QValidator *v /KeepReference/);
+    const QValidator *validator() const;
+    QAbstractItemDelegate *itemDelegate() const;
+    void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/);
+    QAbstractItemModel *model() const;
+    void setModel(QAbstractItemModel *model /KeepReference/);
+    QModelIndex rootModelIndex() const;
+    void setRootModelIndex(const QModelIndex &index);
+    int modelColumn() const;
+    void setModelColumn(int visibleColumn);
+    int currentIndex() const;
+    void setCurrentIndex(int index);
+    QString currentText() const;
+    QString itemText(int index) const;
+    QIcon itemIcon(int index) const;
+    QVariant itemData(int index, int role = Qt::UserRole) const;
+    void addItems(const QStringList &texts);
+    void addItem(const QString &text, const QVariant &userData /DocValue="None"/ = QVariant());
+    void addItem(const QIcon &icon, const QString &text, const QVariant &userData /DocValue="None"/ = QVariant());
+    void insertItem(int index, const QString &text, const QVariant &userData /DocValue="None"/ = QVariant());
+    void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData /DocValue="None"/ = QVariant());
+    void insertItems(int index, const QStringList &texts);
+    void removeItem(int index);
+    void setItemText(int index, const QString &text);
+    void setItemIcon(int index, const QIcon &icon);
+    void setItemData(int index, const QVariant &value, int role = Qt::UserRole);
+    QAbstractItemView *view() const;
+    void setView(QAbstractItemView *itemView /Transfer/);
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    virtual void showPopup();
+    virtual void hidePopup();
+    virtual bool event(QEvent *event);
+    void setCompleter(QCompleter *c /KeepReference/);
+    QCompleter *completer() const;
+    void insertSeparator(int index);
+
+public slots:
+    void clear();
+    void clearEditText();
+    void setEditText(const QString &text);
+    void setCurrentText(const QString &text);
+
+signals:
+    void editTextChanged(const QString &);
+    void activated(int index);
+    void activated(const QString &);
+    void currentIndexChanged(int index);
+    void currentIndexChanged(const QString &);
+    void currentTextChanged(const QString &);
+    void highlighted(int index);
+    void highlighted(const QString &);
+
+protected:
+    void initStyleOption(QStyleOptionComboBox *option) const;
+    virtual void focusInEvent(QFocusEvent *e);
+    virtual void focusOutEvent(QFocusEvent *e);
+    virtual void changeEvent(QEvent *e);
+    virtual void resizeEvent(QResizeEvent *e);
+    virtual void paintEvent(QPaintEvent *e);
+    virtual void showEvent(QShowEvent *e);
+    virtual void hideEvent(QHideEvent *e);
+    virtual void mousePressEvent(QMouseEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *e);
+    virtual void keyPressEvent(QKeyEvent *e);
+    virtual void keyReleaseEvent(QKeyEvent *e);
+    virtual void wheelEvent(QWheelEvent *e);
+    virtual void contextMenuEvent(QContextMenuEvent *e);
+    virtual void inputMethodEvent(QInputMethodEvent *);
+
+public:
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const;
+%If (Qt_5_2_0 -)
+    QVariant currentData(int role = Qt::UserRole) const;
+%End
+
+private:
+    QComboBox(const QComboBox &);
+};
diff --git a/sip/QtWidgets/qcommandlinkbutton.sip b/sip/QtWidgets/qcommandlinkbutton.sip
new file mode 100644
index 0000000..9b85baf
--- /dev/null
+++ b/sip/QtWidgets/qcommandlinkbutton.sip
@@ -0,0 +1,46 @@
+// qcommandlinkbutton.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCommandLinkButton : QPushButton
+{
+%TypeHeaderCode
+#include <qcommandlinkbutton.h>
+%End
+
+public:
+    explicit QCommandLinkButton(QWidget *parent /TransferThis/ = 0);
+    QCommandLinkButton(const QString &text, QWidget *parent /TransferThis/ = 0);
+    QCommandLinkButton(const QString &text, const QString &description, QWidget *parent /TransferThis/ = 0);
+    virtual ~QCommandLinkButton();
+    QString description() const;
+    void setDescription(const QString &description);
+
+protected:
+    virtual QSize sizeHint() const;
+    virtual int heightForWidth(int) const;
+    virtual QSize minimumSizeHint() const;
+    virtual bool event(QEvent *e);
+    virtual void paintEvent(QPaintEvent *);
+
+private:
+    QCommandLinkButton(const QCommandLinkButton &);
+};
diff --git a/sip/QtWidgets/qcommonstyle.sip b/sip/QtWidgets/qcommonstyle.sip
new file mode 100644
index 0000000..eeb8d71
--- /dev/null
+++ b/sip/QtWidgets/qcommonstyle.sip
@@ -0,0 +1,53 @@
+// qcommonstyle.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCommonStyle : QStyle
+{
+%TypeHeaderCode
+#include <qcommonstyle.h>
+%End
+
+public:
+    QCommonStyle();
+    virtual ~QCommonStyle();
+    virtual void polish(QWidget *widget);
+    virtual void unpolish(QWidget *widget);
+    virtual void polish(QApplication *app);
+    virtual void unpolish(QApplication *application);
+    virtual void polish(QPalette & /In,Out/);
+    virtual void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const;
+    virtual void drawControl(QStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const;
+    virtual QRect subElementRect(QStyle::SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const;
+    virtual void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget = 0) const;
+    virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget = 0) const;
+    virtual QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget = 0) const;
+    virtual QSize sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = 0) const;
+    virtual int pixelMetric(QStyle::PixelMetric m, const QStyleOption *option = 0, const QWidget *widget = 0) const;
+    virtual int styleHint(QStyle::StyleHint sh, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const;
+    virtual QPixmap standardPixmap(QStyle::StandardPixmap sp, const QStyleOption *option = 0, const QWidget *widget = 0) const;
+    virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const;
+    virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const;
+    virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const;
+
+private:
+    QCommonStyle(const QCommonStyle &);
+};
diff --git a/sip/QtWidgets/qcompleter.sip b/sip/QtWidgets/qcompleter.sip
new file mode 100644
index 0000000..9c0f13c
--- /dev/null
+++ b/sip/QtWidgets/qcompleter.sip
@@ -0,0 +1,99 @@
+// qcompleter.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCompleter : QObject
+{
+%TypeHeaderCode
+#include <qcompleter.h>
+%End
+
+public:
+    enum CompletionMode
+    {
+        PopupCompletion,
+        UnfilteredPopupCompletion,
+        InlineCompletion,
+    };
+
+    enum ModelSorting
+    {
+        UnsortedModel,
+        CaseSensitivelySortedModel,
+        CaseInsensitivelySortedModel,
+    };
+
+    QCompleter(QObject *parent /TransferBack/ = 0);
+    QCompleter(QAbstractItemModel *model, QObject *parent /TransferThis/ = 0);
+    QCompleter(const QStringList &list, QObject *parent /TransferThis/ = 0);
+    virtual ~QCompleter();
+    void setWidget(QWidget *widget /Transfer/);
+    QWidget *widget() const;
+    void setModel(QAbstractItemModel *c /KeepReference/);
+    QAbstractItemModel *model() const;
+    void setCompletionMode(QCompleter::CompletionMode mode);
+    QCompleter::CompletionMode completionMode() const;
+    QAbstractItemView *popup() const;
+    void setPopup(QAbstractItemView *popup /Transfer/);
+    void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity);
+    Qt::CaseSensitivity caseSensitivity() const;
+    void setModelSorting(QCompleter::ModelSorting sorting);
+    QCompleter::ModelSorting modelSorting() const;
+    void setCompletionColumn(int column);
+    int completionColumn() const;
+    void setCompletionRole(int role);
+    int completionRole() const;
+    int completionCount() const;
+    bool setCurrentRow(int row);
+    int currentRow() const;
+    QModelIndex currentIndex() const;
+    QString currentCompletion() const;
+    QAbstractItemModel *completionModel() const;
+    QString completionPrefix() const;
+    virtual QString pathFromIndex(const QModelIndex &index) const;
+    virtual QStringList splitPath(const QString &path) const;
+    bool wrapAround() const;
+
+public slots:
+    void complete(const QRect &rect = QRect());
+    void setCompletionPrefix(const QString &prefix);
+    void setWrapAround(bool wrap);
+
+protected:
+    virtual bool eventFilter(QObject *o, QEvent *e);
+    virtual bool event(QEvent *);
+
+signals:
+    void activated(const QString &text);
+    void activated(const QModelIndex &index);
+    void highlighted(const QString &text);
+    void highlighted(const QModelIndex &index);
+
+public:
+    int maxVisibleItems() const;
+    void setMaxVisibleItems(int maxItems);
+%If (Qt_5_2_0 -)
+    void setFilterMode(Qt::MatchFlags filterMode);
+%End
+%If (Qt_5_2_0 -)
+    Qt::MatchFlags filterMode() const;
+%End
+};
diff --git a/sip/QtWidgets/qdatawidgetmapper.sip b/sip/QtWidgets/qdatawidgetmapper.sip
new file mode 100644
index 0000000..b13d96e
--- /dev/null
+++ b/sip/QtWidgets/qdatawidgetmapper.sip
@@ -0,0 +1,72 @@
+// qdatawidgetmapper.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDataWidgetMapper : QObject
+{
+%TypeHeaderCode
+#include <qdatawidgetmapper.h>
+%End
+
+public:
+    enum SubmitPolicy
+    {
+        AutoSubmit,
+        ManualSubmit,
+    };
+
+    explicit QDataWidgetMapper(QObject *parent /TransferThis/ = 0);
+    virtual ~QDataWidgetMapper();
+    void setModel(QAbstractItemModel *model /KeepReference/);
+    QAbstractItemModel *model() const;
+    void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/);
+    QAbstractItemDelegate *itemDelegate() const;
+    void setRootIndex(const QModelIndex &index);
+    QModelIndex rootIndex() const;
+    void setOrientation(Qt::Orientation aOrientation);
+    Qt::Orientation orientation() const;
+    void setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy);
+    QDataWidgetMapper::SubmitPolicy submitPolicy() const;
+    void addMapping(QWidget *widget, int section);
+    void addMapping(QWidget *widget, int section, const QByteArray &propertyName);
+    void removeMapping(QWidget *widget);
+    QByteArray mappedPropertyName(QWidget *widget) const;
+    int mappedSection(QWidget *widget) const;
+    QWidget *mappedWidgetAt(int section) const;
+    void clearMapping();
+    int currentIndex() const;
+
+public slots:
+    void revert();
+    virtual void setCurrentIndex(int index);
+    void setCurrentModelIndex(const QModelIndex &index);
+    bool submit();
+    void toFirst();
+    void toLast();
+    void toNext();
+    void toPrevious();
+
+signals:
+    void currentIndexChanged(int index);
+
+private:
+    QDataWidgetMapper(const QDataWidgetMapper &);
+};
diff --git a/sip/QtWidgets/qdatetimeedit.sip b/sip/QtWidgets/qdatetimeedit.sip
new file mode 100644
index 0000000..253bb48
--- /dev/null
+++ b/sip/QtWidgets/qdatetimeedit.sip
@@ -0,0 +1,155 @@
+// qdatetimeedit.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qdatetimeedit.h>
+%End
+
+class QDateTimeEdit : QAbstractSpinBox
+{
+%TypeHeaderCode
+#include <qdatetimeedit.h>
+%End
+
+public:
+    enum Section
+    {
+        NoSection,
+        AmPmSection,
+        MSecSection,
+        SecondSection,
+        MinuteSection,
+        HourSection,
+        DaySection,
+        MonthSection,
+        YearSection,
+        TimeSections_Mask,
+        DateSections_Mask,
+    };
+
+    typedef QFlags<QDateTimeEdit::Section> Sections;
+    explicit QDateTimeEdit(QWidget *parent /TransferThis/ = 0);
+    QDateTimeEdit(const QDateTime &datetime, QWidget *parent /TransferThis/ = 0);
+    QDateTimeEdit(const QDate &date, QWidget *parent /TransferThis/ = 0);
+    QDateTimeEdit(const QTime &time, QWidget *parent /TransferThis/ = 0);
+    virtual ~QDateTimeEdit();
+    QDateTime dateTime() const;
+    QDate date() const;
+    QTime time() const;
+    QDate minimumDate() const;
+    void setMinimumDate(const QDate &min);
+    void clearMinimumDate();
+    QDate maximumDate() const;
+    void setMaximumDate(const QDate &max);
+    void clearMaximumDate();
+    void setDateRange(const QDate &min, const QDate &max);
+    QTime minimumTime() const;
+    void setMinimumTime(const QTime &min);
+    void clearMinimumTime();
+    QTime maximumTime() const;
+    void setMaximumTime(const QTime &max);
+    void clearMaximumTime();
+    void setTimeRange(const QTime &min, const QTime &max);
+    QFlags<QDateTimeEdit::Section> displayedSections() const;
+    QDateTimeEdit::Section currentSection() const;
+    void setCurrentSection(QDateTimeEdit::Section section);
+    QString sectionText(QDateTimeEdit::Section s) const;
+    QString displayFormat() const;
+    void setDisplayFormat(const QString &format);
+    bool calendarPopup() const;
+    void setCalendarPopup(bool enable);
+    void setSelectedSection(QDateTimeEdit::Section section);
+    virtual QSize sizeHint() const;
+    virtual void clear();
+    virtual void stepBy(int steps);
+    virtual bool event(QEvent *e);
+    QDateTimeEdit::Section sectionAt(int index) const;
+    int currentSectionIndex() const;
+    void setCurrentSectionIndex(int index);
+    int sectionCount() const;
+
+signals:
+    void dateTimeChanged(const QDateTime &date);
+    void timeChanged(const QTime &date);
+    void dateChanged(const QDate &date);
+
+public slots:
+    void setDateTime(const QDateTime &dateTime);
+    void setDate(const QDate &date);
+    void setTime(const QTime &time);
+
+protected:
+    void initStyleOption(QStyleOptionSpinBox *option) const;
+    virtual void keyPressEvent(QKeyEvent *e);
+    virtual void wheelEvent(QWheelEvent *e);
+    virtual void focusInEvent(QFocusEvent *e);
+    virtual bool focusNextPrevChild(bool next);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void paintEvent(QPaintEvent *event);
+    virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const;
+    virtual void fixup(QString &input /In,Out/) const;
+    virtual QDateTime dateTimeFromText(const QString &text) const;
+    virtual QString textFromDateTime(const QDateTime &dt) const;
+    virtual QFlags<QAbstractSpinBox::StepEnabledFlag> stepEnabled() const;
+
+public:
+    QDateTime minimumDateTime() const;
+    void clearMinimumDateTime();
+    void setMinimumDateTime(const QDateTime &dt);
+    QDateTime maximumDateTime() const;
+    void clearMaximumDateTime();
+    void setMaximumDateTime(const QDateTime &dt);
+    void setDateTimeRange(const QDateTime &min, const QDateTime &max);
+    QCalendarWidget *calendarWidget() const;
+    void setCalendarWidget(QCalendarWidget *calendarWidget /Transfer/);
+    Qt::TimeSpec timeSpec() const;
+    void setTimeSpec(Qt::TimeSpec spec);
+
+private:
+    QDateTimeEdit(const QDateTimeEdit &);
+};
+
+class QTimeEdit : QDateTimeEdit
+{
+%TypeHeaderCode
+#include <qdatetimeedit.h>
+%End
+
+public:
+    explicit QTimeEdit(QWidget *parent /TransferThis/ = 0);
+    QTimeEdit(const QTime &time, QWidget *parent /TransferThis/ = 0);
+    virtual ~QTimeEdit();
+};
+
+class QDateEdit : QDateTimeEdit
+{
+%TypeHeaderCode
+#include <qdatetimeedit.h>
+%End
+
+public:
+    explicit QDateEdit(QWidget *parent /TransferThis/ = 0);
+    QDateEdit(const QDate &date, QWidget *parent /TransferThis/ = 0);
+    virtual ~QDateEdit();
+};
+
+QFlags<QDateTimeEdit::Section> operator|(QDateTimeEdit::Section f1, QFlags<QDateTimeEdit::Section> f2);
diff --git a/sip/QtWidgets/qdesktopwidget.sip b/sip/QtWidgets/qdesktopwidget.sip
new file mode 100644
index 0000000..c5920f7
--- /dev/null
+++ b/sip/QtWidgets/qdesktopwidget.sip
@@ -0,0 +1,55 @@
+// qdesktopwidget.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDesktopWidget : QWidget
+{
+%TypeHeaderCode
+#include <qdesktopwidget.h>
+%End
+
+public:
+    QDesktopWidget();
+    virtual ~QDesktopWidget();
+    bool isVirtualDesktop() const;
+    int primaryScreen() const;
+    int screenNumber(const QWidget *widget = 0) const;
+    int screenNumber(const QPoint &) const;
+    QWidget *screen(int screen = -1);
+    int screenCount() const;
+    const QRect screenGeometry(int screen = -1) const;
+    const QRect screenGeometry(const QWidget *widget) const;
+    const QRect screenGeometry(const QPoint &point) const;
+    const QRect availableGeometry(int screen = -1) const;
+    const QRect availableGeometry(const QWidget *widget) const;
+    const QRect availableGeometry(const QPoint &point) const;
+
+signals:
+    void resized(int);
+    void workAreaResized(int);
+    void screenCountChanged(int);
+
+protected:
+    virtual void resizeEvent(QResizeEvent *e);
+
+private:
+    QDesktopWidget(const QDesktopWidget &);
+};
diff --git a/sip/QtWidgets/qdial.sip b/sip/QtWidgets/qdial.sip
new file mode 100644
index 0000000..80e758f
--- /dev/null
+++ b/sip/QtWidgets/qdial.sip
@@ -0,0 +1,56 @@
+// qdial.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDial : QAbstractSlider
+{
+%TypeHeaderCode
+#include <qdial.h>
+%End
+
+public:
+    explicit QDial(QWidget *parent /TransferThis/ = 0);
+    virtual ~QDial();
+    bool wrapping() const;
+    int notchSize() const;
+    void setNotchTarget(double target);
+    qreal notchTarget() const;
+    bool notchesVisible() const;
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+
+public slots:
+    void setNotchesVisible(bool visible);
+    void setWrapping(bool on);
+
+protected:
+    void initStyleOption(QStyleOptionSlider *option) const;
+    virtual bool event(QEvent *e);
+    virtual void resizeEvent(QResizeEvent *re);
+    virtual void paintEvent(QPaintEvent *pe);
+    virtual void mousePressEvent(QMouseEvent *me);
+    virtual void mouseReleaseEvent(QMouseEvent *me);
+    virtual void mouseMoveEvent(QMouseEvent *me);
+    virtual void sliderChange(QAbstractSlider::SliderChange change);
+
+private:
+    QDial(const QDial &);
+};
diff --git a/sip/QtWidgets/qdialog.sip b/sip/QtWidgets/qdialog.sip
new file mode 100644
index 0000000..6d812de
--- /dev/null
+++ b/sip/QtWidgets/qdialog.sip
@@ -0,0 +1,101 @@
+// qdialog.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDialog : QWidget
+{
+%TypeHeaderCode
+#include <qdialog.h>
+%End
+
+public:
+    QDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QDialog();
+
+    enum DialogCode
+    {
+        Rejected,
+        Accepted,
+    };
+
+    int result() const;
+    virtual void setVisible(bool visible);
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    void setSizeGripEnabled(bool);
+    bool isSizeGripEnabled() const;
+    void setModal(bool modal);
+    void setResult(int r);
+    virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/;
+%MethodCode
+        // Transfer ownership back to Python (a modal dialog will probably have the
+        // main window as it's parent).  This means the Qt dialog will be deleted when
+        // the Python wrapper is garbage collected.  Although this is a little
+        // inconsistent, it saves having to code it explicitly to avoid the memory
+        // leak.
+        sipTransferBack(sipSelf);
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipRes = sipSelfWasArg ? sipCpp->QDialog::exec()
+                               : sipCpp->exec();
+        Py_END_ALLOW_THREADS
+%End
+
+%If (Py_v3)
+    virtual int exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/;
+%MethodCode
+        // Transfer ownership back to Python (a modal dialog will probably have the
+        // main window as it's parent).  This means the Qt dialog will be deleted when
+        // the Python wrapper is garbage collected.  Although this is a little
+        // inconsistent, it saves having to code it explicitly to avoid the memory
+        // leak.
+        sipTransferBack(sipSelf);
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipRes = sipSelfWasArg ? sipCpp->QDialog::exec()
+                               : sipCpp->exec();
+        Py_END_ALLOW_THREADS
+%End
+
+%End
+
+public slots:
+    virtual void done(int);
+    virtual void accept();
+    virtual void reject();
+    virtual void open();
+
+signals:
+    void accepted();
+    void finished(int result);
+    void rejected();
+
+protected:
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void closeEvent(QCloseEvent *);
+    virtual void showEvent(QShowEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void contextMenuEvent(QContextMenuEvent *);
+    virtual bool eventFilter(QObject *, QEvent *);
+
+private:
+    QDialog(const QDialog &);
+};
diff --git a/sip/QtWidgets/qdialogbuttonbox.sip b/sip/QtWidgets/qdialogbuttonbox.sip
new file mode 100644
index 0000000..4d5f30a
--- /dev/null
+++ b/sip/QtWidgets/qdialogbuttonbox.sip
@@ -0,0 +1,122 @@
+// qdialogbuttonbox.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qdialogbuttonbox.h>
+%End
+
+class QDialogButtonBox : QWidget
+{
+%TypeHeaderCode
+#include <qdialogbuttonbox.h>
+%End
+
+public:
+    enum ButtonLayout
+    {
+        WinLayout,
+        MacLayout,
+        KdeLayout,
+        GnomeLayout,
+    };
+
+    enum ButtonRole
+    {
+        InvalidRole,
+        AcceptRole,
+        RejectRole,
+        DestructiveRole,
+        ActionRole,
+        HelpRole,
+        YesRole,
+        NoRole,
+        ResetRole,
+        ApplyRole,
+    };
+
+    enum StandardButton
+    {
+        NoButton,
+        Ok,
+        Save,
+        SaveAll,
+        Open,
+        Yes,
+        YesToAll,
+        No,
+        NoToAll,
+        Abort,
+        Retry,
+        Ignore,
+        Close,
+        Cancel,
+        Discard,
+        Help,
+        Apply,
+        Reset,
+        RestoreDefaults,
+    };
+
+    typedef QFlags<QDialogButtonBox::StandardButton> StandardButtons;
+    QDialogButtonBox(QWidget *parent /TransferThis/ = 0);
+    QDialogButtonBox(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0);
+%If (Qt_5_2_0 -)
+    QDialogButtonBox(QFlags<QDialogButtonBox::StandardButton> buttons, QWidget *parent /TransferThis/ = 0);
+%End
+%If (Qt_5_2_0 -)
+    QDialogButtonBox(QFlags<QDialogButtonBox::StandardButton> buttons, Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0);
+%End
+%If (- Qt_5_2_0)
+    QDialogButtonBox(QFlags<QDialogButtonBox::StandardButton> buttons, Qt::Orientation orientation = Qt::Horizontal, QWidget *parent /TransferThis/ = 0);
+%End
+    virtual ~QDialogButtonBox();
+    void setOrientation(Qt::Orientation orientation);
+    Qt::Orientation orientation() const;
+    void addButton(QAbstractButton *button /Transfer/, QDialogButtonBox::ButtonRole role);
+    QPushButton *addButton(const QString &text, QDialogButtonBox::ButtonRole role) /Transfer/;
+    QPushButton *addButton(QDialogButtonBox::StandardButton button) /Transfer/;
+    void removeButton(QAbstractButton *button /TransferBack/);
+    void clear();
+    QList<QAbstractButton*> buttons() const;
+    QDialogButtonBox::ButtonRole buttonRole(QAbstractButton *button) const;
+    void setStandardButtons(QFlags<QDialogButtonBox::StandardButton> buttons);
+    QFlags<QDialogButtonBox::StandardButton> standardButtons() const;
+    QDialogButtonBox::StandardButton standardButton(QAbstractButton *button) const;
+    QPushButton *button(QDialogButtonBox::StandardButton which) const;
+    void setCenterButtons(bool center);
+    bool centerButtons() const;
+
+signals:
+    void accepted();
+    void clicked(QAbstractButton *button);
+    void helpRequested();
+    void rejected();
+
+protected:
+    virtual void changeEvent(QEvent *event);
+    virtual bool event(QEvent *event);
+
+private:
+    QDialogButtonBox(const QDialogButtonBox &);
+};
+
+QFlags<QDialogButtonBox::StandardButton> operator|(QDialogButtonBox::StandardButton f1, QFlags<QDialogButtonBox::StandardButton> f2);
diff --git a/sip/QtWidgets/qdirmodel.sip b/sip/QtWidgets/qdirmodel.sip
new file mode 100644
index 0000000..9310b5e
--- /dev/null
+++ b/sip/QtWidgets/qdirmodel.sip
@@ -0,0 +1,82 @@
+// qdirmodel.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QDirModel : QAbstractItemModel
+{
+%TypeHeaderCode
+#include <qdirmodel.h>
+%End
+
+public:
+    enum Roles
+    {
+        FileIconRole,
+        FilePathRole,
+        FileNameRole,
+    };
+
+    QDirModel(const QStringList &nameFilters, QFlags<QDir::Filter> filters, QFlags<QDir::SortFlag> sort, QObject *parent /TransferThis/ = 0);
+    explicit QDirModel(QObject *parent /TransferThis/ = 0);
+    virtual ~QDirModel();
+    virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+    virtual QModelIndex parent(const QModelIndex &child) const;
+    QObject *parent() const;
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+    virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+    virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+    virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+    virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+    virtual QStringList mimeTypes() const;
+    virtual QMimeData *mimeData(const QModelIndexList &indexes) const /TransferBack/;
+    virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+    virtual Qt::DropActions supportedDropActions() const;
+    void setIconProvider(QFileIconProvider *provider /KeepReference/);
+    QFileIconProvider *iconProvider() const;
+    void setNameFilters(const QStringList &filters);
+    QStringList nameFilters() const;
+    void setFilter(QFlags<QDir::Filter> filters);
+    QFlags<QDir::Filter> filter() const;
+    void setSorting(QFlags<QDir::SortFlag> sort);
+    QFlags<QDir::SortFlag> sorting() const;
+    void setResolveSymlinks(bool enable);
+    bool resolveSymlinks() const;
+    void setReadOnly(bool enable);
+    bool isReadOnly() const;
+    void setLazyChildCount(bool enable);
+    bool lazyChildCount() const;
+    void refresh(const QModelIndex &parent = QModelIndex());
+    QModelIndex index(const QString &path, int column = 0) const;
+    bool isDir(const QModelIndex &index) const;
+    QModelIndex mkdir(const QModelIndex &parent, const QString &name);
+    bool rmdir(const QModelIndex &index);
+    bool remove(const QModelIndex &index);
+    QString filePath(const QModelIndex &index) const;
+    QString fileName(const QModelIndex &index) const;
+    QIcon fileIcon(const QModelIndex &index) const;
+    QFileInfo fileInfo(const QModelIndex &index) const;
+
+private:
+    QDirModel(const QDirModel &);
+};
diff --git a/sip/QtWidgets/qdockwidget.sip b/sip/QtWidgets/qdockwidget.sip
new file mode 100644
index 0000000..31b8ccc
--- /dev/null
+++ b/sip/QtWidgets/qdockwidget.sip
@@ -0,0 +1,80 @@
+// qdockwidget.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qdockwidget.h>
+%End
+
+class QDockWidget : QWidget
+{
+%TypeHeaderCode
+#include <qdockwidget.h>
+%End
+
+public:
+    QDockWidget(const QString &title, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    QDockWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QDockWidget();
+    QWidget *widget() const;
+    void setWidget(QWidget *widget /Transfer/);
+
+    enum DockWidgetFeature
+    {
+        DockWidgetClosable,
+        DockWidgetMovable,
+        DockWidgetFloatable,
+        DockWidgetVerticalTitleBar,
+        AllDockWidgetFeatures,
+        NoDockWidgetFeatures,
+    };
+
+    typedef QFlags<QDockWidget::DockWidgetFeature> DockWidgetFeatures;
+    void setFeatures(QFlags<QDockWidget::DockWidgetFeature> features);
+    QFlags<QDockWidget::DockWidgetFeature> features() const;
+    void setFloating(bool floating);
+    bool isFloating() const;
+    void setAllowedAreas(Qt::DockWidgetAreas areas);
+    Qt::DockWidgetAreas allowedAreas() const;
+    bool isAreaAllowed(Qt::DockWidgetArea area) const;
+    QAction *toggleViewAction() const /Transfer/;
+    void setTitleBarWidget(QWidget *widget /Transfer/);
+    QWidget *titleBarWidget() const;
+
+signals:
+    void featuresChanged(QFlags<QDockWidget::DockWidgetFeature> features);
+    void topLevelChanged(bool topLevel);
+    void allowedAreasChanged(Qt::DockWidgetAreas allowedAreas);
+    void dockLocationChanged(Qt::DockWidgetArea area);
+    void visibilityChanged(bool visible);
+
+protected:
+    void initStyleOption(QStyleOptionDockWidget *option) const;
+    virtual void changeEvent(QEvent *event);
+    virtual void closeEvent(QCloseEvent *event);
+    virtual void paintEvent(QPaintEvent *event);
+    virtual bool event(QEvent *event);
+
+private:
+    QDockWidget(const QDockWidget &);
+};
+
+QFlags<QDockWidget::DockWidgetFeature> operator|(QDockWidget::DockWidgetFeature f1, QFlags<QDockWidget::DockWidgetFeature> f2);
diff --git a/sip/QtWidgets/qdrawutil.sip b/sip/QtWidgets/qdrawutil.sip
new file mode 100644
index 0000000..a7cd718
--- /dev/null
+++ b/sip/QtWidgets/qdrawutil.sip
@@ -0,0 +1,39 @@
+// qdrawutil.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qdrawutil.h>
+%End
+
+void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2, const QPalette &pal, bool sunken = true, int lineWidth = 1, int midLineWidth = 0);
+void qDrawShadeLine(QPainter *p, const QPoint &p1, const QPoint &p2, const QPalette &pal, bool sunken = true, int lineWidth = 1, int midLineWidth = 0);
+void qDrawShadeRect(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, int lineWidth = 1, int midLineWidth = 0, const QBrush *fill = 0);
+void qDrawShadeRect(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, int lineWidth = 1, int midLineWidth = 0, const QBrush *fill = 0);
+void qDrawShadePanel(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, int lineWidth = 1, const QBrush *fill = 0);
+void qDrawShadePanel(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, int lineWidth = 1, const QBrush *fill = 0);
+void qDrawWinButton(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, const QBrush *fill = 0);
+void qDrawWinButton(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, const QBrush *fill = 0);
+void qDrawWinPanel(QPainter *p, int x, int y, int w, int h, const QPalette &pal, bool sunken = false, const QBrush *fill = 0);
+void qDrawWinPanel(QPainter *p, const QRect &r, const QPalette &pal, bool sunken = false, const QBrush *fill = 0);
+void qDrawPlainRect(QPainter *p, int x, int y, int w, int h, const QColor &, int lineWidth = 1, const QBrush *fill = 0);
+void qDrawPlainRect(QPainter *p, const QRect &r, const QColor &, int lineWidth = 1, const QBrush *fill = 0);
+void qDrawBorderPixmap(QPainter *painter, const QRect &target, const QMargins &margins, const QPixmap &pixmap);
diff --git a/sip/QtWidgets/qerrormessage.sip b/sip/QtWidgets/qerrormessage.sip
new file mode 100644
index 0000000..61be444
--- /dev/null
+++ b/sip/QtWidgets/qerrormessage.sip
@@ -0,0 +1,44 @@
+// qerrormessage.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QErrorMessage : QDialog
+{
+%TypeHeaderCode
+#include <qerrormessage.h>
+%End
+
+public:
+    explicit QErrorMessage(QWidget *parent /TransferThis/ = 0);
+    virtual ~QErrorMessage();
+    static QErrorMessage *qtHandler();
+
+public slots:
+    void showMessage(const QString &message);
+    void showMessage(const QString &message, const QString &type);
+
+protected:
+    virtual void changeEvent(QEvent *e);
+    virtual void done(int);
+
+private:
+    QErrorMessage(const QErrorMessage &);
+};
diff --git a/sip/QtWidgets/qfiledialog.sip b/sip/QtWidgets/qfiledialog.sip
new file mode 100644
index 0000000..26274b5
--- /dev/null
+++ b/sip/QtWidgets/qfiledialog.sip
@@ -0,0 +1,350 @@
+// qfiledialog.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qfiledialog.h>
+%End
+
+class QFileDialog : QDialog
+{
+%TypeHeaderCode
+#include <qfiledialog.h>
+%End
+
+public:
+    enum ViewMode
+    {
+        Detail,
+        List,
+    };
+
+    enum FileMode
+    {
+        AnyFile,
+        ExistingFile,
+        Directory,
+        ExistingFiles,
+        DirectoryOnly,
+    };
+
+    enum AcceptMode
+    {
+        AcceptOpen,
+        AcceptSave,
+    };
+
+    enum DialogLabel
+    {
+        LookIn,
+        FileName,
+        FileType,
+        Accept,
+        Reject,
+    };
+
+    enum Option
+    {
+        ShowDirsOnly,
+        DontResolveSymlinks,
+        DontConfirmOverwrite,
+        DontUseSheet,
+        DontUseNativeDialog,
+        ReadOnly,
+        HideNameFilterDetails,
+%If (Qt_5_2_0 -)
+        DontUseCustomDirectoryIcons,
+%End
+    };
+
+    typedef QFlags<QFileDialog::Option> Options;
+    QFileDialog(QWidget *parent /TransferThis/, Qt::WindowFlags f);
+    QFileDialog(QWidget *parent /TransferThis/ = 0, const QString &caption /DocValue="''"/ = QString(), const QString &directory /DocValue="''"/ = QString(), const QString &filter /DocValue="''"/ = QString());
+    virtual ~QFileDialog();
+    void setDirectory(const QString &directory);
+    void setDirectory(const QDir &adirectory);
+    QDir directory() const;
+    void selectFile(const QString &filename);
+    QStringList selectedFiles() const;
+    void setViewMode(QFileDialog::ViewMode mode);
+    QFileDialog::ViewMode viewMode() const;
+    void setFileMode(QFileDialog::FileMode mode);
+    QFileDialog::FileMode fileMode() const;
+    void setAcceptMode(QFileDialog::AcceptMode mode);
+    QFileDialog::AcceptMode acceptMode() const;
+    void setDefaultSuffix(const QString &suffix);
+    QString defaultSuffix() const;
+    void setHistory(const QStringList &paths);
+    QStringList history() const;
+    void setItemDelegate(QAbstractItemDelegate *delegate /KeepReference/);
+    QAbstractItemDelegate *itemDelegate() const;
+    void setIconProvider(QFileIconProvider *provider /KeepReference/);
+    QFileIconProvider *iconProvider() const;
+    void setLabelText(QFileDialog::DialogLabel label, const QString &text);
+    QString labelText(QFileDialog::DialogLabel label) const;
+
+signals:
+    void currentChanged(const QString &path);
+    void directoryEntered(const QString &directory);
+    void filesSelected(const QStringList &files);
+    void filterSelected(const QString &filter);
+    void fileSelected(const QString &file);
+
+public:
+    static QString getExistingDirectory(QWidget *parent = 0, const QString &caption /DocValue="''"/ = QString(), const QString &directory /DocValue="''"/ = QString(), QFlags<QFileDialog::Option> options = QFileDialog::ShowDirsOnly) /ReleaseGIL/;
+    static SIP_PYTUPLE getOpenFileName(QWidget *parent = 0, const QString &caption /DocValue="''"/ = QString(), const QString &directory /DocValue="''"/ = QString(), const QString &filter /DocValue="''"/ = QString(), const QString &initialFilter /DocValue="''"/ = QString(), Options options = 0) /DocType="(str, str)", ReleaseGIL/;
+%MethodCode
+        QString *name;
+        QString *filter = new QString(*a4);
+        
+        Py_BEGIN_ALLOW_THREADS
+        
+        name = new QString(QFileDialog::getOpenFileName(a0, *a1, *a2, *a3, filter, *a5));
+        
+        Py_END_ALLOW_THREADS
+        
+        PyObject *name_obj = sipConvertFromNewType(name, sipType_QString, NULL);
+        PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL);
+        
+        if (name_obj && filter_obj)
+            sipRes = PyTuple_Pack(2, name_obj, filter_obj);
+        
+        Py_XDECREF(name_obj);
+        Py_XDECREF(filter_obj);
+%End
+
+    static SIP_PYTUPLE getOpenFileNames(QWidget *parent = 0, const QString &caption /DocValue="''"/ = QString(), const QString &directory /DocValue="''"/ = QString(), const QString &filter /DocValue="''"/ = QString(), const QString &initialFilter /DocValue="''"/ = QString(), Options options = 0) /DocType="(list-of-str, str)", ReleaseGIL/;
+%MethodCode
+        QStringList *names;
+        QString *filter = new QString(*a4);
+        
+        Py_BEGIN_ALLOW_THREADS
+        
+        names = new QStringList(QFileDialog::getOpenFileNames(a0, *a1, *a2, *a3, filter, *a5));
+        
+        Py_END_ALLOW_THREADS
+        
+        PyObject *names_obj = sipConvertFromNewType(names, sipType_QStringList, NULL);
+        PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL);
+        
+        if (names_obj && filter_obj)
+            sipRes = PyTuple_Pack(2, names_obj, filter_obj);
+        
+        Py_XDECREF(names_obj);
+        Py_XDECREF(filter_obj);
+%End
+
+    static SIP_PYTUPLE getSaveFileName(QWidget *parent = 0, const QString &caption /DocValue="''"/ = QString(), const QString &directory /DocValue="''"/ = QString(), const QString &filter /DocValue="''"/ = QString(), const QString &initialFilter /DocValue="''"/ = QString(), Options options = 0) /DocType="(str, str)", ReleaseGIL/;
+%MethodCode
+        QString *name;
+        QString *filter = new QString(*a4);
+        
+        Py_BEGIN_ALLOW_THREADS
+        
+        name = new QString(QFileDialog::getSaveFileName(a0, *a1, *a2, *a3, filter, *a5));
+        
+        Py_END_ALLOW_THREADS
+        
+        PyObject *name_obj = sipConvertFromNewType(name, sipType_QString, NULL);
+        PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL);
+        
+        if (name_obj && filter_obj)
+            sipRes = PyTuple_Pack(2, name_obj, filter_obj);
+        
+        Py_XDECREF(name_obj);
+        Py_XDECREF(filter_obj);
+%End
+
+protected:
+    virtual void done(int result);
+    virtual void accept();
+    virtual void changeEvent(QEvent *e);
+
+public:
+    void setSidebarUrls(const QList<QUrl> &urls);
+    QList<QUrl> sidebarUrls() const;
+    QByteArray saveState() const;
+    bool restoreState(const QByteArray &state);
+    void setProxyModel(QAbstractProxyModel *model /Transfer/);
+    QAbstractProxyModel *proxyModel() const;
+    void setNameFilter(const QString &filter);
+    void setNameFilters(const QStringList &filters);
+    QStringList nameFilters() const;
+    void selectNameFilter(const QString &filter);
+    QString selectedNameFilter() const;
+    QFlags<QDir::Filter> filter() const;
+    void setFilter(QFlags<QDir::Filter> filters);
+    void setOption(QFileDialog::Option option, bool on = true);
+    bool testOption(QFileDialog::Option option) const;
+    void setOptions(QFlags<QFileDialog::Option> options);
+    QFlags<QFileDialog::Option> options() const;
+    virtual void open();
+    void open(SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipCpp->open(receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    virtual void setVisible(bool visible);
+%If (Qt_5_2_0 -)
+    void setDirectoryUrl(const QUrl &directory);
+%End
+%If (Qt_5_2_0 -)
+    QUrl directoryUrl() const;
+%End
+%If (Qt_5_2_0 -)
+    void selectUrl(const QUrl &url);
+%End
+%If (Qt_5_2_0 -)
+    QList<QUrl> selectedUrls() const;
+%End
+%If (Qt_5_2_0 -)
+    void setMimeTypeFilters(const QStringList &filters);
+%End
+%If (Qt_5_2_0 -)
+    QStringList mimeTypeFilters() const;
+%End
+%If (Qt_5_2_0 -)
+    void selectMimeTypeFilter(const QString &filter);
+%End
+
+signals:
+%If (Qt_5_2_0 -)
+    void urlSelected(const QUrl &url);
+%End
+%If (Qt_5_2_0 -)
+    void urlsSelected(const QList<QUrl> &urls);
+%End
+%If (Qt_5_2_0 -)
+    void currentUrlChanged(const QUrl &url);
+%End
+%If (Qt_5_2_0 -)
+    void directoryUrlEntered(const QUrl &directory);
+%End
+
+public:
+%If (Qt_5_2_0 -)
+    static QUrl getExistingDirectoryUrl(QWidget *parent = 0, const QString &caption /DocValue="''"/ = QString(), const QUrl &directory = QUrl(), QFlags<QFileDialog::Option> options = QFileDialog::ShowDirsOnly, const QStringList &supportedSchemes /DocValue="[]"/ = QStringList()) /ReleaseGIL/;
+%End
+%If (Qt_5_2_0 -)
+    static SIP_PYTUPLE getOpenFileUrl(QWidget *parent = 0, const QString &caption /DocValue="''"/ = QString(), const QString &directory /DocValue="''"/ = QString(), const QString &filter /DocValue="''"/ = QString(), const QString &initialFilter /DocValue="''"/ = QString(), Options options = 0, const QStringList &supportedSchemes /DocValue="[]"/ = QStringList()) /DocType="(QUrl, str)", ReleaseGIL/;
+%MethodCode
+        QUrl *url;
+        QString *filter = new QString(*a4);
+        
+        Py_BEGIN_ALLOW_THREADS
+        
+        url = new QUrl(QFileDialog::getOpenFileUrl(a0, *a1, *a2, *a3, filter, *a5, *a6));
+        
+        Py_END_ALLOW_THREADS
+        
+        PyObject *url_obj = sipConvertFromNewType(url, sipType_QUrl, NULL);
+        PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL);
+        
+        if (url_obj && filter_obj)
+            sipRes = PyTuple_Pack(2, url_obj, filter_obj);
+        
+        Py_XDECREF(url_obj);
+        Py_XDECREF(filter_obj);
+%End
+
+%End
+%If (Qt_5_2_0 -)
+    static SIP_PYTUPLE getOpenFileUrls(QWidget *parent = 0, const QString &caption /DocValue="''"/ = QString(), const QString &directory /DocValue="''"/ = QString(), const QString &filter /DocValue="''"/ = QString(), const QString &initialFilter /DocValue="''"/ = QString(), Options options = 0, const QStringList &supportedSchemes /DocValue="[]"/ = QStringList()) /DocType="(list-of-QUrl, str)", ReleaseGIL/;
+%MethodCode
+        QList<QUrl> url_list;
+        QString *filter = new QString(*a4);
+        
+        Py_BEGIN_ALLOW_THREADS
+        
+        url_list = QFileDialog::getOpenFileUrls(a0, *a1, *a2, *a3, filter, *a5, *a6);
+        
+        Py_END_ALLOW_THREADS
+        
+        PyObject *url_list_obj = PyList_New(url_list.size());
+        
+        if (url_list_obj)
+        {
+            for (int i = 0; i < url_list.size(); ++i)
+            {
+                QUrl *url = new QUrl(url_list.at(i));
+                PyObject *url_obj = sipConvertFromNewType(url, sipType_QUrl, NULL);
+                
+                if (!url_obj)
+                {
+                    delete url;
+                    Py_DECREF(url_list_obj);
+                    url_list_obj = 0;
+                    break;
+                }
+                
+                PyList_SET_ITEM(url_list_obj, i, url_obj);
+            }
+        }
+        
+        PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL);
+        
+        if (url_list_obj && filter_obj)
+            sipRes = PyTuple_Pack(2, url_list_obj, filter_obj);
+        
+        Py_XDECREF(url_list_obj);
+        Py_XDECREF(filter_obj);
+%End
+
+%End
+%If (Qt_5_2_0 -)
+    static SIP_PYTUPLE getSaveFileUrl(QWidget *parent = 0, const QString &caption /DocValue="''"/ = QString(), const QString &directory /DocValue="''"/ = QString(), const QString &filter /DocValue="''"/ = QString(), const QString &initialFilter /DocValue="''"/ = QString(), Options options = 0, const QStringList &supportedSchemes /DocValue="[]"/ = QStringList()) /DocType="(QUrl, str)", ReleaseGIL/;
+%MethodCode
+        QUrl *url;
+        QString *filter = new QString(*a4);
+        
+        Py_BEGIN_ALLOW_THREADS
+        
+        url = new QUrl(QFileDialog::getSaveFileUrl(a0, *a1, *a2, *a3, filter, *a5, *a6));
+        
+        Py_END_ALLOW_THREADS
+        
+        PyObject *url_obj = sipConvertFromNewType(url, sipType_QUrl, NULL);
+        PyObject *filter_obj = sipConvertFromNewType(filter, sipType_QString, NULL);
+        
+        if (url_obj && filter_obj)
+            sipRes = PyTuple_Pack(2, url_obj, filter_obj);
+        
+        Py_XDECREF(url_obj);
+        Py_XDECREF(filter_obj);
+%End
+
+%End
+
+private:
+    QFileDialog(const QFileDialog &);
+};
+
+QFlags<QFileDialog::Option> operator|(QFileDialog::Option f1, QFlags<QFileDialog::Option> f2);
diff --git a/sip/QtWidgets/qfileiconprovider.sip b/sip/QtWidgets/qfileiconprovider.sip
new file mode 100644
index 0000000..3b83b2e
--- /dev/null
+++ b/sip/QtWidgets/qfileiconprovider.sip
@@ -0,0 +1,75 @@
+// qfileiconprovider.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qfileiconprovider.h>
+%End
+
+class QFileIconProvider
+{
+%TypeHeaderCode
+#include <qfileiconprovider.h>
+%End
+
+public:
+    QFileIconProvider();
+    virtual ~QFileIconProvider();
+
+    enum IconType
+    {
+        Computer,
+        Desktop,
+        Trashcan,
+        Network,
+        Drive,
+        Folder,
+        File,
+    };
+
+    virtual QIcon icon(QFileIconProvider::IconType type) const;
+    virtual QIcon icon(const QFileInfo &info) const;
+    virtual QString type(const QFileInfo &info) const;
+%If (Qt_5_2_0 -)
+
+    enum Option
+    {
+        DontUseCustomDirectoryIcons,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+    typedef QFlags<QFileIconProvider::Option> Options;
+%End
+%If (Qt_5_2_0 -)
+    void setOptions(QFlags<QFileIconProvider::Option> options);
+%End
+%If (Qt_5_2_0 -)
+    QFlags<QFileIconProvider::Option> options() const;
+%End
+
+private:
+    QFileIconProvider(const QFileIconProvider &);
+};
+
+%If (Qt_5_2_0 -)
+QFlags<QFileIconProvider::Option> operator|(QFileIconProvider::Option f1, QFlags<QFileIconProvider::Option> f2);
+%End
diff --git a/sip/QtWidgets/qfilesystemmodel.sip b/sip/QtWidgets/qfilesystemmodel.sip
new file mode 100644
index 0000000..4313943
--- /dev/null
+++ b/sip/QtWidgets/qfilesystemmodel.sip
@@ -0,0 +1,97 @@
+// qfilesystemmodel.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFileSystemModel : QAbstractItemModel
+{
+%TypeHeaderCode
+#include <qfilesystemmodel.h>
+%End
+
+public:
+    enum Roles
+    {
+        FileIconRole,
+        FilePathRole,
+        FileNameRole,
+        FilePermissions,
+    };
+
+    explicit QFileSystemModel(QObject *parent /TransferThis/ = 0);
+    virtual ~QFileSystemModel();
+    virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+    QModelIndex index(const QString &path, int column = 0) const;
+    virtual QModelIndex parent(const QModelIndex &child) const;
+    virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
+    virtual bool canFetchMore(const QModelIndex &parent) const;
+    virtual void fetchMore(const QModelIndex &parent);
+    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
+    QVariant myComputer(int role = Qt::DisplayRole) const;
+    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+    virtual bool setData(const QModelIndex &idx, const QVariant &value, int role = Qt::EditRole);
+    virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+    virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+    virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+    virtual QStringList mimeTypes() const;
+    virtual QMimeData *mimeData(const QModelIndexList &indexes) const;
+    virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+    virtual Qt::DropActions supportedDropActions() const;
+    QModelIndex setRootPath(const QString &path);
+    QString rootPath() const;
+    QDir rootDirectory() const;
+    void setIconProvider(QFileIconProvider *provider /KeepReference/);
+    QFileIconProvider *iconProvider() const;
+    void setFilter(QFlags<QDir::Filter> filters);
+    QFlags<QDir::Filter> filter() const;
+    void setResolveSymlinks(bool enable);
+    bool resolveSymlinks() const;
+    void setReadOnly(bool enable);
+    bool isReadOnly() const;
+    void setNameFilterDisables(bool enable);
+    bool nameFilterDisables() const;
+    void setNameFilters(const QStringList &filters);
+    QStringList nameFilters() const;
+    QString filePath(const QModelIndex &index) const;
+    bool isDir(const QModelIndex &index) const;
+    qint64 size(const QModelIndex &index) const;
+    QString type(const QModelIndex &index) const;
+    QDateTime lastModified(const QModelIndex &index) const;
+    QModelIndex mkdir(const QModelIndex &parent, const QString &name);
+    QFlags<QFileDevice::Permission> permissions(const QModelIndex &index) const;
+    bool rmdir(const QModelIndex &index);
+    QString fileName(const QModelIndex &aindex) const;
+    QIcon fileIcon(const QModelIndex &aindex) const;
+    QFileInfo fileInfo(const QModelIndex &aindex) const;
+    bool remove(const QModelIndex &index);
+
+signals:
+    void fileRenamed(const QString &path, const QString &oldName, const QString &newName);
+    void rootPathChanged(const QString &newPath);
+    void directoryLoaded(const QString &path);
+
+protected:
+    virtual bool event(QEvent *event);
+    virtual void timerEvent(QTimerEvent *event);
+
+private:
+    QFileSystemModel(const QFileSystemModel &);
+};
diff --git a/sip/QtWidgets/qfocusframe.sip b/sip/QtWidgets/qfocusframe.sip
new file mode 100644
index 0000000..d9798a8
--- /dev/null
+++ b/sip/QtWidgets/qfocusframe.sip
@@ -0,0 +1,43 @@
+// qfocusframe.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFocusFrame : QWidget
+{
+%TypeHeaderCode
+#include <qfocusframe.h>
+%End
+
+public:
+    QFocusFrame(QWidget *parent /TransferThis/ = 0);
+    virtual ~QFocusFrame();
+    void setWidget(QWidget *widget);
+    QWidget *widget() const;
+
+protected:
+    void initStyleOption(QStyleOption *option) const;
+    virtual bool eventFilter(QObject *, QEvent *);
+    virtual bool event(QEvent *e);
+    virtual void paintEvent(QPaintEvent *);
+
+private:
+    QFocusFrame(const QFocusFrame &);
+};
diff --git a/sip/QtWidgets/qfontcombobox.sip b/sip/QtWidgets/qfontcombobox.sip
new file mode 100644
index 0000000..80b1d47
--- /dev/null
+++ b/sip/QtWidgets/qfontcombobox.sip
@@ -0,0 +1,66 @@
+// qfontcombobox.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qfontcombobox.h>
+%End
+
+class QFontComboBox : QComboBox
+{
+%TypeHeaderCode
+#include <qfontcombobox.h>
+%End
+
+public:
+    enum FontFilter
+    {
+        AllFonts,
+        ScalableFonts,
+        NonScalableFonts,
+        MonospacedFonts,
+        ProportionalFonts,
+    };
+
+    QFlags<QFontComboBox::FontFilter> fontFilters() const;
+    explicit QFontComboBox(QWidget *parent /TransferThis/ = 0);
+    virtual ~QFontComboBox();
+    void setWritingSystem(QFontDatabase::WritingSystem);
+    QFontDatabase::WritingSystem writingSystem() const;
+    typedef QFlags<QFontComboBox::FontFilter> FontFilters;
+    void setFontFilters(QFlags<QFontComboBox::FontFilter> filters);
+    QFont currentFont() const;
+    virtual QSize sizeHint() const;
+
+public slots:
+    void setCurrentFont(const QFont &f);
+
+signals:
+    void currentFontChanged(const QFont &f);
+
+protected:
+    virtual bool event(QEvent *e);
+
+private:
+    QFontComboBox(const QFontComboBox &);
+};
+
+QFlags<QFontComboBox::FontFilter> operator|(QFontComboBox::FontFilter f1, QFlags<QFontComboBox::FontFilter> f2);
diff --git a/sip/QtWidgets/qfontdialog.sip b/sip/QtWidgets/qfontdialog.sip
new file mode 100644
index 0000000..6ebeb07
--- /dev/null
+++ b/sip/QtWidgets/qfontdialog.sip
@@ -0,0 +1,98 @@
+// qfontdialog.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qfontdialog.h>
+%End
+
+class QFontDialog : QDialog
+{
+%TypeHeaderCode
+#include <qfontdialog.h>
+%End
+
+public:
+    enum FontDialogOption
+    {
+        NoButtons,
+        DontUseNativeDialog,
+%If (Qt_5_2_0 -)
+        ScalableFonts,
+%End
+%If (Qt_5_2_0 -)
+        NonScalableFonts,
+%End
+%If (Qt_5_2_0 -)
+        MonospacedFonts,
+%End
+%If (Qt_5_2_0 -)
+        ProportionalFonts,
+%End
+    };
+
+    typedef QFlags<QFontDialog::FontDialogOption> FontDialogOptions;
+    explicit QFontDialog(QWidget *parent /TransferThis/ = 0);
+    QFontDialog(const QFont &initial, QWidget *parent /TransferThis/ = 0);
+    virtual ~QFontDialog();
+    static QFont getFont(bool *ok, const QFont &initial, QWidget *parent = 0, const QString &caption = QString(), QFlags<QFontDialog::FontDialogOption> options = 0) /ReleaseGIL/;
+    static QFont getFont(bool *ok, QWidget *parent = 0) /ReleaseGIL/;
+
+protected:
+    virtual void changeEvent(QEvent *e);
+    virtual void done(int result);
+    virtual bool eventFilter(QObject *object, QEvent *event);
+
+private:
+    QFontDialog(const QFontDialog &);
+
+public:
+    void setCurrentFont(const QFont &font);
+    QFont currentFont() const;
+    QFont selectedFont() const;
+    void setOption(QFontDialog::FontDialogOption option, bool on = true);
+    bool testOption(QFontDialog::FontDialogOption option) const;
+    void setOptions(QFlags<QFontDialog::FontDialogOption> options);
+    QFlags<QFontDialog::FontDialogOption> options() const;
+    virtual void open();
+    void open(SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipCpp->open(receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    virtual void setVisible(bool visible);
+
+signals:
+    void currentFontChanged(const QFont &font);
+    void fontSelected(const QFont &font);
+};
+
+QFlags<QFontDialog::FontDialogOption> operator|(QFontDialog::FontDialogOption f1, QFlags<QFontDialog::FontDialogOption> f2);
diff --git a/sip/QtWidgets/qformlayout.sip b/sip/QtWidgets/qformlayout.sip
new file mode 100644
index 0000000..1c5a4a6
--- /dev/null
+++ b/sip/QtWidgets/qformlayout.sip
@@ -0,0 +1,100 @@
+// qformlayout.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFormLayout : QLayout
+{
+%TypeHeaderCode
+#include <qformlayout.h>
+%End
+
+public:
+    enum FieldGrowthPolicy
+    {
+        FieldsStayAtSizeHint,
+        ExpandingFieldsGrow,
+        AllNonFixedFieldsGrow,
+    };
+
+    enum RowWrapPolicy
+    {
+        DontWrapRows,
+        WrapLongRows,
+        WrapAllRows,
+    };
+
+    enum ItemRole
+    {
+        LabelRole,
+        FieldRole,
+        SpanningRole,
+    };
+
+    explicit QFormLayout(QWidget *parent /TransferThis/ = 0);
+    virtual ~QFormLayout();
+    void setFieldGrowthPolicy(QFormLayout::FieldGrowthPolicy policy);
+    QFormLayout::FieldGrowthPolicy fieldGrowthPolicy() const;
+    void setRowWrapPolicy(QFormLayout::RowWrapPolicy policy);
+    QFormLayout::RowWrapPolicy rowWrapPolicy() const;
+    void setLabelAlignment(Qt::Alignment alignment);
+    Qt::Alignment labelAlignment() const;
+    void setFormAlignment(Qt::Alignment alignment);
+    Qt::Alignment formAlignment() const;
+    void setHorizontalSpacing(int spacing);
+    int horizontalSpacing() const;
+    void setVerticalSpacing(int spacing);
+    int verticalSpacing() const;
+    int spacing() const;
+    void setSpacing(int);
+    void addRow(QWidget *label /Transfer/, QWidget *field /Transfer/);
+    void addRow(QWidget *label /Transfer/, QLayout *field /Transfer/);
+    void addRow(const QString &labelText, QWidget *field /Transfer/);
+    void addRow(const QString &labelText, QLayout *field /Transfer/);
+    void addRow(QWidget *widget /Transfer/);
+    void addRow(QLayout *layout /Transfer/);
+    void insertRow(int row, QWidget *label /Transfer/, QWidget *field /Transfer/);
+    void insertRow(int row, QWidget *label /Transfer/, QLayout *field /Transfer/);
+    void insertRow(int row, const QString &labelText, QWidget *field /Transfer/);
+    void insertRow(int row, const QString &labelText, QLayout *field /Transfer/);
+    void insertRow(int row, QWidget *widget /Transfer/);
+    void insertRow(int row, QLayout *layout /Transfer/);
+    void setItem(int row, QFormLayout::ItemRole role, QLayoutItem *item /Transfer/);
+    void setWidget(int row, QFormLayout::ItemRole role, QWidget *widget /Transfer/);
+    void setLayout(int row, QFormLayout::ItemRole role, QLayout *layout /Transfer/);
+    QLayoutItem *itemAt(int row, QFormLayout::ItemRole role) const;
+    void getItemPosition(int index, int *rowPtr, QFormLayout::ItemRole *rolePtr) const;
+    void getWidgetPosition(QWidget *widget, int *rowPtr, QFormLayout::ItemRole *rolePtr) const;
+    void getLayoutPosition(QLayout *layout, int *rowPtr, QFormLayout::ItemRole *rolePtr) const;
+    QWidget *labelForField(QWidget *field) const;
+    QWidget *labelForField(QLayout *field) const;
+    virtual void addItem(QLayoutItem *item /Transfer/);
+    virtual QLayoutItem *itemAt(int index) const;
+    virtual QLayoutItem *takeAt(int index) /TransferBack/;
+    virtual void setGeometry(const QRect &rect);
+    virtual QSize minimumSize() const;
+    virtual QSize sizeHint() const;
+    virtual void invalidate();
+    virtual bool hasHeightForWidth() const;
+    virtual int heightForWidth(int width) const;
+    virtual Qt::Orientations expandingDirections() const;
+    virtual int count() const;
+    int rowCount() const;
+};
diff --git a/sip/QtWidgets/qframe.sip b/sip/QtWidgets/qframe.sip
new file mode 100644
index 0000000..94f40b8
--- /dev/null
+++ b/sip/QtWidgets/qframe.sip
@@ -0,0 +1,79 @@
+// qframe.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QFrame : QWidget
+{
+%TypeHeaderCode
+#include <qframe.h>
+%End
+
+public:
+    enum Shadow
+    {
+        Plain,
+        Raised,
+        Sunken,
+    };
+
+    enum Shape
+    {
+        NoFrame,
+        Box,
+        Panel,
+        WinPanel,
+        HLine,
+        VLine,
+        StyledPanel,
+    };
+
+    enum StyleMask
+    {
+        Shadow_Mask,
+        Shape_Mask,
+    };
+
+    QFrame(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QFrame();
+    int frameStyle() const;
+    void setFrameStyle(int);
+    int frameWidth() const;
+    virtual QSize sizeHint() const;
+    QFrame::Shape frameShape() const;
+    void setFrameShape(QFrame::Shape);
+    QFrame::Shadow frameShadow() const;
+    void setFrameShadow(QFrame::Shadow);
+    int lineWidth() const;
+    void setLineWidth(int);
+    int midLineWidth() const;
+    void setMidLineWidth(int);
+    QRect frameRect() const;
+    void setFrameRect(const QRect &);
+
+protected:
+    virtual bool event(QEvent *e);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void changeEvent(QEvent *);
+    void drawFrame(QPainter *);
+
+private:
+    QFrame(const QFrame &);
+};
diff --git a/sip/QtWidgets/qgesture.sip b/sip/QtWidgets/qgesture.sip
new file mode 100644
index 0000000..abee863
--- /dev/null
+++ b/sip/QtWidgets/qgesture.sip
@@ -0,0 +1,191 @@
+// qgesture.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGesture : QObject
+{
+%TypeHeaderCode
+#include <qgesture.h>
+%End
+
+public:
+    explicit QGesture(QObject *parent /TransferThis/ = 0);
+    virtual ~QGesture();
+    Qt::GestureType gestureType() const;
+    Qt::GestureState state() const;
+    QPointF hotSpot() const;
+    void setHotSpot(const QPointF &value);
+    bool hasHotSpot() const;
+    void unsetHotSpot();
+
+    enum GestureCancelPolicy
+    {
+        CancelNone,
+        CancelAllInContext,
+    };
+
+    void setGestureCancelPolicy(QGesture::GestureCancelPolicy policy);
+    QGesture::GestureCancelPolicy gestureCancelPolicy() const;
+};
+
+class QPanGesture : QGesture
+{
+%TypeHeaderCode
+#include <qgesture.h>
+%End
+
+public:
+    explicit QPanGesture(QObject *parent /TransferThis/ = 0);
+    virtual ~QPanGesture();
+    QPointF lastOffset() const;
+    QPointF offset() const;
+    QPointF delta() const;
+    qreal acceleration() const;
+    void setLastOffset(const QPointF &value);
+    void setOffset(const QPointF &value);
+    void setAcceleration(qreal value);
+};
+
+class QPinchGesture : QGesture
+{
+%TypeHeaderCode
+#include <qgesture.h>
+%End
+
+public:
+    enum ChangeFlag
+    {
+        ScaleFactorChanged,
+        RotationAngleChanged,
+        CenterPointChanged,
+    };
+
+    typedef QFlags<QPinchGesture::ChangeFlag> ChangeFlags;
+    explicit QPinchGesture(QObject *parent /TransferThis/ = 0);
+    virtual ~QPinchGesture();
+    QFlags<QPinchGesture::ChangeFlag> totalChangeFlags() const;
+    void setTotalChangeFlags(QFlags<QPinchGesture::ChangeFlag> value);
+    QFlags<QPinchGesture::ChangeFlag> changeFlags() const;
+    void setChangeFlags(QFlags<QPinchGesture::ChangeFlag> value);
+    QPointF startCenterPoint() const;
+    QPointF lastCenterPoint() const;
+    QPointF centerPoint() const;
+    void setStartCenterPoint(const QPointF &value);
+    void setLastCenterPoint(const QPointF &value);
+    void setCenterPoint(const QPointF &value);
+    qreal totalScaleFactor() const;
+    qreal lastScaleFactor() const;
+    qreal scaleFactor() const;
+    void setTotalScaleFactor(qreal value);
+    void setLastScaleFactor(qreal value);
+    void setScaleFactor(qreal value);
+    qreal totalRotationAngle() const;
+    qreal lastRotationAngle() const;
+    qreal rotationAngle() const;
+    void setTotalRotationAngle(qreal value);
+    void setLastRotationAngle(qreal value);
+    void setRotationAngle(qreal value);
+};
+
+class QSwipeGesture : QGesture
+{
+%TypeHeaderCode
+#include <qgesture.h>
+%End
+
+public:
+    enum SwipeDirection
+    {
+        NoDirection,
+        Left,
+        Right,
+        Up,
+        Down,
+    };
+
+    explicit QSwipeGesture(QObject *parent /TransferThis/ = 0);
+    virtual ~QSwipeGesture();
+    QSwipeGesture::SwipeDirection horizontalDirection() const;
+    QSwipeGesture::SwipeDirection verticalDirection() const;
+    qreal swipeAngle() const;
+    void setSwipeAngle(qreal value);
+};
+
+class QTapGesture : QGesture
+{
+%TypeHeaderCode
+#include <qgesture.h>
+%End
+
+public:
+    explicit QTapGesture(QObject *parent /TransferThis/ = 0);
+    virtual ~QTapGesture();
+    QPointF position() const;
+    void setPosition(const QPointF &pos);
+};
+
+class QTapAndHoldGesture : QGesture
+{
+%TypeHeaderCode
+#include <qgesture.h>
+%End
+
+public:
+    explicit QTapAndHoldGesture(QObject *parent /TransferThis/ = 0);
+    virtual ~QTapAndHoldGesture();
+    QPointF position() const;
+    void setPosition(const QPointF &pos);
+    static void setTimeout(int msecs);
+    static int timeout();
+};
+
+class QGestureEvent : QEvent
+{
+%TypeHeaderCode
+#include <qgesture.h>
+%End
+
+%ConvertToSubClassCode
+    sipType = ((sipCpp->type() == QEvent::Gesture) ? sipType_QGestureEvent : 0);
+%End
+
+public:
+    explicit QGestureEvent(const QList<QGesture*> &gestures);
+    virtual ~QGestureEvent();
+    QList<QGesture*> gestures() const;
+    QGesture *gesture(Qt::GestureType type) const;
+    QList<QGesture*> activeGestures() const;
+    QList<QGesture*> canceledGestures() const;
+    void setAccepted(bool accepted);
+    bool isAccepted() const;
+    void accept();
+    void ignore();
+    void setAccepted(QGesture *, bool);
+    void accept(QGesture *);
+    void ignore(QGesture *);
+    bool isAccepted(QGesture *) const;
+    void setAccepted(Qt::GestureType, bool);
+    void accept(Qt::GestureType);
+    void ignore(Qt::GestureType);
+    bool isAccepted(Qt::GestureType) const;
+    QWidget *widget() const;
+    QPointF mapToGraphicsScene(const QPointF &gesturePoint) const;
+};
diff --git a/sip/QtWidgets/qgesturerecognizer.sip b/sip/QtWidgets/qgesturerecognizer.sip
new file mode 100644
index 0000000..04f8e69
--- /dev/null
+++ b/sip/QtWidgets/qgesturerecognizer.sip
@@ -0,0 +1,54 @@
+// qgesturerecognizer.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qgesturerecognizer.h>
+%End
+
+class QGestureRecognizer /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qgesturerecognizer.h>
+%End
+
+public:
+    enum ResultFlag
+    {
+        Ignore,
+        MayBeGesture,
+        TriggerGesture,
+        FinishGesture,
+        CancelGesture,
+        ConsumeEventHint,
+    };
+
+    typedef QFlags<QGestureRecognizer::ResultFlag> Result;
+    QGestureRecognizer();
+    virtual ~QGestureRecognizer();
+    virtual QGesture *create(QObject *target) /Factory/;
+    virtual QFlags<QGestureRecognizer::ResultFlag> recognize(QGesture *state, QObject *watched, QEvent *event) = 0;
+    virtual void reset(QGesture *state);
+    static Qt::GestureType registerRecognizer(QGestureRecognizer *recognizer /Transfer/);
+    static void unregisterRecognizer(Qt::GestureType type);
+};
+
+QFlags<QGestureRecognizer::ResultFlag> operator|(QGestureRecognizer::ResultFlag f1, QFlags<QGestureRecognizer::ResultFlag> f2);
diff --git a/sip/QtWidgets/qgraphicsanchorlayout.sip b/sip/QtWidgets/qgraphicsanchorlayout.sip
new file mode 100644
index 0000000..a5fe7a5
--- /dev/null
+++ b/sip/QtWidgets/qgraphicsanchorlayout.sip
@@ -0,0 +1,70 @@
+// qgraphicsanchorlayout.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsAnchor : QObject
+{
+%TypeHeaderCode
+#include <qgraphicsanchorlayout.h>
+%End
+
+public:
+    virtual ~QGraphicsAnchor();
+    void setSpacing(qreal spacing);
+    void unsetSpacing();
+    qreal spacing() const;
+    void setSizePolicy(QSizePolicy::Policy policy);
+    QSizePolicy::Policy sizePolicy() const;
+
+private:
+    QGraphicsAnchor(QGraphicsAnchorLayout *parent);
+};
+
+class QGraphicsAnchorLayout : QGraphicsLayout
+{
+%TypeHeaderCode
+#include <qgraphicsanchorlayout.h>
+%End
+
+public:
+    QGraphicsAnchorLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsAnchorLayout();
+    QGraphicsAnchor *addAnchor(QGraphicsLayoutItem *firstItem /Transfer/, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem /Transfer/, Qt::AnchorPoint secondEdge);
+    QGraphicsAnchor *anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge);
+    void addCornerAnchors(QGraphicsLayoutItem *firstItem /Transfer/, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem /Transfer/, Qt::Corner secondCorner);
+    void addAnchors(QGraphicsLayoutItem *firstItem /Transfer/, QGraphicsLayoutItem *secondItem /Transfer/, Qt::Orientations orientations = Qt::Horizontal|Qt::Vertical);
+    void setHorizontalSpacing(qreal spacing);
+    void setVerticalSpacing(qreal spacing);
+    void setSpacing(qreal spacing);
+    qreal horizontalSpacing() const;
+    qreal verticalSpacing() const;
+    virtual void removeAt(int index);
+    virtual void setGeometry(const QRectF &rect);
+    virtual int count() const;
+    virtual QGraphicsLayoutItem *itemAt(int index) const;
+    virtual void invalidate();
+
+protected:
+    virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+
+private:
+    QGraphicsAnchorLayout(const QGraphicsAnchorLayout &);
+};
diff --git a/sip/QtWidgets/qgraphicseffect.sip b/sip/QtWidgets/qgraphicseffect.sip
new file mode 100644
index 0000000..adddb55
--- /dev/null
+++ b/sip/QtWidgets/qgraphicseffect.sip
@@ -0,0 +1,206 @@
+// qgraphicseffect.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qgraphicseffect.h>
+%End
+
+class QGraphicsEffect : QObject
+{
+%TypeHeaderCode
+#include <qgraphicseffect.h>
+%End
+
+public:
+    enum ChangeFlag
+    {
+        SourceAttached,
+        SourceDetached,
+        SourceBoundingRectChanged,
+        SourceInvalidated,
+    };
+
+    typedef QFlags<QGraphicsEffect::ChangeFlag> ChangeFlags;
+
+    enum PixmapPadMode
+    {
+        NoPad,
+        PadToTransparentBorder,
+        PadToEffectiveBoundingRect,
+    };
+
+    QGraphicsEffect(QObject *parent /TransferThis/ = 0);
+    virtual ~QGraphicsEffect();
+    virtual QRectF boundingRectFor(const QRectF &sourceRect) const;
+    QRectF boundingRect() const;
+    bool isEnabled() const;
+
+public slots:
+    void setEnabled(bool enable);
+    void update();
+
+signals:
+    void enabledChanged(bool enabled);
+
+protected:
+    virtual void draw(QPainter *painter) = 0;
+    virtual void sourceChanged(QFlags<QGraphicsEffect::ChangeFlag> flags);
+    void updateBoundingRect();
+    bool sourceIsPixmap() const;
+    QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const;
+    void drawSource(QPainter *painter);
+    QPixmap sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset /Out/ = 0, QGraphicsEffect::PixmapPadMode mode = QGraphicsEffect::PadToEffectiveBoundingRect) const;
+
+private:
+    QGraphicsEffect(const QGraphicsEffect &);
+};
+
+QFlags<QGraphicsEffect::ChangeFlag> operator|(QGraphicsEffect::ChangeFlag f1, QFlags<QGraphicsEffect::ChangeFlag> f2);
+
+class QGraphicsColorizeEffect : QGraphicsEffect
+{
+%TypeHeaderCode
+#include <qgraphicseffect.h>
+%End
+
+public:
+    QGraphicsColorizeEffect(QObject *parent /TransferThis/ = 0);
+    virtual ~QGraphicsColorizeEffect();
+    QColor color() const;
+    qreal strength() const;
+
+public slots:
+    void setColor(const QColor &c);
+    void setStrength(qreal strength);
+
+signals:
+    void colorChanged(const QColor &color);
+    void strengthChanged(qreal strength);
+
+protected:
+    virtual void draw(QPainter *painter);
+
+private:
+    QGraphicsColorizeEffect(const QGraphicsColorizeEffect &);
+};
+
+class QGraphicsBlurEffect : QGraphicsEffect
+{
+%TypeHeaderCode
+#include <qgraphicseffect.h>
+%End
+
+public:
+    enum BlurHint
+    {
+        PerformanceHint,
+        QualityHint,
+        AnimationHint,
+    };
+
+    typedef QFlags<QGraphicsBlurEffect::BlurHint> BlurHints;
+    QGraphicsBlurEffect(QObject *parent /TransferThis/ = 0);
+    virtual ~QGraphicsBlurEffect();
+    virtual QRectF boundingRectFor(const QRectF &rect) const;
+    qreal blurRadius() const;
+    QFlags<QGraphicsBlurEffect::BlurHint> blurHints() const;
+
+public slots:
+    void setBlurRadius(qreal blurRadius);
+    void setBlurHints(QFlags<QGraphicsBlurEffect::BlurHint> hints);
+
+signals:
+    void blurRadiusChanged(qreal blurRadius);
+    void blurHintsChanged(QFlags<QGraphicsBlurEffect::BlurHint> hints);
+
+protected:
+    virtual void draw(QPainter *painter);
+
+private:
+    QGraphicsBlurEffect(const QGraphicsBlurEffect &);
+};
+
+QFlags<QGraphicsBlurEffect::BlurHint> operator|(QGraphicsBlurEffect::BlurHint f1, QFlags<QGraphicsBlurEffect::BlurHint> f2);
+
+class QGraphicsDropShadowEffect : QGraphicsEffect
+{
+%TypeHeaderCode
+#include <qgraphicseffect.h>
+%End
+
+public:
+    QGraphicsDropShadowEffect(QObject *parent /TransferThis/ = 0);
+    virtual ~QGraphicsDropShadowEffect();
+    virtual QRectF boundingRectFor(const QRectF &rect) const;
+    QPointF offset() const;
+    qreal xOffset() const;
+    qreal yOffset() const;
+    qreal blurRadius() const;
+    QColor color() const;
+
+public slots:
+    void setOffset(const QPointF &ofs);
+    void setOffset(qreal dx, qreal dy);
+    void setOffset(qreal d);
+    void setXOffset(qreal dx);
+    void setYOffset(qreal dy);
+    void setBlurRadius(qreal blurRadius);
+    void setColor(const QColor &color);
+
+signals:
+    void offsetChanged(const QPointF &offset);
+    void blurRadiusChanged(qreal blurRadius);
+    void colorChanged(const QColor &color);
+
+protected:
+    virtual void draw(QPainter *painter);
+
+private:
+    QGraphicsDropShadowEffect(const QGraphicsDropShadowEffect &);
+};
+
+class QGraphicsOpacityEffect : QGraphicsEffect
+{
+%TypeHeaderCode
+#include <qgraphicseffect.h>
+%End
+
+public:
+    QGraphicsOpacityEffect(QObject *parent /TransferThis/ = 0);
+    virtual ~QGraphicsOpacityEffect();
+    qreal opacity() const;
+    QBrush opacityMask() const;
+
+public slots:
+    void setOpacity(qreal opacity);
+    void setOpacityMask(const QBrush &mask);
+
+signals:
+    void opacityChanged(qreal opacity);
+    void opacityMaskChanged(const QBrush &mask);
+
+protected:
+    virtual void draw(QPainter *painter);
+
+private:
+    QGraphicsOpacityEffect(const QGraphicsOpacityEffect &);
+};
diff --git a/sip/QtWidgets/qgraphicsgridlayout.sip b/sip/QtWidgets/qgraphicsgridlayout.sip
new file mode 100644
index 0000000..1e7e5ca
--- /dev/null
+++ b/sip/QtWidgets/qgraphicsgridlayout.sip
@@ -0,0 +1,103 @@
+// qgraphicsgridlayout.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsGridLayout : QGraphicsLayout
+{
+%TypeHeaderCode
+#include <qgraphicsgridlayout.h>
+%End
+
+public:
+    QGraphicsGridLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsGridLayout();
+    void addItem(QGraphicsLayoutItem *item /Transfer/, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = 0);
+    void addItem(QGraphicsLayoutItem *aitem /TransferThis/, int arow, int acolumn, Qt::Alignment alignment = 0);
+    void setHorizontalSpacing(qreal spacing);
+    qreal horizontalSpacing() const;
+    void setVerticalSpacing(qreal spacing);
+    qreal verticalSpacing() const;
+    void setSpacing(qreal spacing);
+    void setRowSpacing(int row, qreal spacing);
+    qreal rowSpacing(int row) const;
+    void setColumnSpacing(int column, qreal spacing);
+    qreal columnSpacing(int column) const;
+    void setRowStretchFactor(int row, int stretch);
+    int rowStretchFactor(int row) const;
+    void setColumnStretchFactor(int column, int stretch);
+    int columnStretchFactor(int column) const;
+    void setRowMinimumHeight(int row, qreal height);
+    qreal rowMinimumHeight(int row) const;
+    void setRowPreferredHeight(int row, qreal height);
+    qreal rowPreferredHeight(int row) const;
+    void setRowMaximumHeight(int row, qreal height);
+    qreal rowMaximumHeight(int row) const;
+    void setRowFixedHeight(int row, qreal height);
+    void setColumnMinimumWidth(int column, qreal width);
+    qreal columnMinimumWidth(int column) const;
+    void setColumnPreferredWidth(int column, qreal width);
+    qreal columnPreferredWidth(int column) const;
+    void setColumnMaximumWidth(int column, qreal width);
+    qreal columnMaximumWidth(int column) const;
+    void setColumnFixedWidth(int column, qreal width);
+    void setRowAlignment(int row, Qt::Alignment alignment);
+    Qt::Alignment rowAlignment(int row) const;
+    void setColumnAlignment(int column, Qt::Alignment alignment);
+    Qt::Alignment columnAlignment(int column) const;
+    void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment);
+    Qt::Alignment alignment(QGraphicsLayoutItem *item) const;
+    int rowCount() const;
+    int columnCount() const;
+    QGraphicsLayoutItem *itemAt(int row, int column) const;
+    virtual int count() const;
+    virtual QGraphicsLayoutItem *itemAt(int index) const;
+    virtual void removeAt(int index);
+%MethodCode
+        // The ownership of any existing item must be passed back to Python.
+        QGraphicsLayoutItem *itm;
+        
+        if (a0 < sipCpp->count())
+            itm = sipCpp->itemAt(a0);
+        else
+            itm = 0;
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipSelfWasArg ? sipCpp->QGraphicsGridLayout::removeAt(a0)
+                      : sipCpp->removeAt(a0);
+        Py_END_ALLOW_THREADS
+        
+        if (itm)
+        {
+            PyObject *itmo = sipGetPyObject(itm, sipType_QGraphicsLayoutItem);
+        
+            if (itmo)
+                sipTransferBack(itmo);
+        }
+%End
+
+    virtual void invalidate();
+    virtual void setGeometry(const QRectF &rect);
+    virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+    void removeItem(QGraphicsLayoutItem *item /TransferBack/);
+
+private:
+    QGraphicsGridLayout(const QGraphicsGridLayout &);
+};
diff --git a/sip/QtWidgets/qgraphicsitem.sip b/sip/QtWidgets/qgraphicsitem.sip
new file mode 100644
index 0000000..b0689c1
--- /dev/null
+++ b/sip/QtWidgets/qgraphicsitem.sip
@@ -0,0 +1,734 @@
+// qgraphicsitem.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qgraphicsitem.h>
+%End
+
+class QGraphicsItem /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+%ConvertToSubClassCode
+    switch (sipCpp->type())
+    {
+    case 2:
+        sipType = sipType_QGraphicsPathItem;
+        break;
+    
+    case 3:
+        sipType = sipType_QGraphicsRectItem;
+        break;
+    
+    case 4:
+        sipType = sipType_QGraphicsEllipseItem;
+        break;
+    
+    case 5:
+        sipType = sipType_QGraphicsPolygonItem;
+        break;
+    
+    case 6:
+        sipType = sipType_QGraphicsLineItem;
+        break;
+    
+    case 7:
+        sipType = sipType_QGraphicsPixmapItem;
+        break;
+    
+    case 8:
+        // We need to explicitly cast because of the multiple inheritance.
+        *sipCppRet = static_cast<QGraphicsTextItem *>(sipCpp);
+        sipType = sipType_QGraphicsTextItem;
+        break;
+    
+    case 9:
+        sipType = sipType_QGraphicsSimpleTextItem;
+        break;
+    
+    case 10:
+        sipType = sipType_QGraphicsItemGroup;
+        break;
+    
+    case 11:
+        // We need to explicitly cast because of the multiple inheritance.
+        *sipCppRet = static_cast<QGraphicsWidget *>(sipCpp);
+        sipType = sipType_QGraphicsWidget;
+        break;
+    
+    case 12:
+        // We need to explicitly cast because of the multiple inheritance.
+        *sipCppRet = static_cast<QGraphicsProxyWidget *>(sipCpp);
+        sipType = sipType_QGraphicsProxyWidget;
+        break;
+    
+    default:
+        sipType = 0;
+    }
+%End
+
+public:
+    enum CacheMode
+    {
+        NoCache,
+        ItemCoordinateCache,
+        DeviceCoordinateCache,
+    };
+
+    enum GraphicsItemChange
+    {
+        ItemPositionChange,
+        ItemMatrixChange,
+        ItemVisibleChange,
+        ItemEnabledChange,
+        ItemSelectedChange,
+        ItemParentChange,
+        ItemChildAddedChange,
+        ItemChildRemovedChange,
+        ItemTransformChange,
+        ItemPositionHasChanged,
+        ItemTransformHasChanged,
+        ItemSceneChange,
+        ItemVisibleHasChanged,
+        ItemEnabledHasChanged,
+        ItemSelectedHasChanged,
+        ItemParentHasChanged,
+        ItemSceneHasChanged,
+        ItemCursorChange,
+        ItemCursorHasChanged,
+        ItemToolTipChange,
+        ItemToolTipHasChanged,
+        ItemFlagsChange,
+        ItemFlagsHaveChanged,
+        ItemZValueChange,
+        ItemZValueHasChanged,
+        ItemOpacityChange,
+        ItemOpacityHasChanged,
+        ItemScenePositionHasChanged,
+        ItemRotationChange,
+        ItemRotationHasChanged,
+        ItemScaleChange,
+        ItemScaleHasChanged,
+        ItemTransformOriginPointChange,
+        ItemTransformOriginPointHasChanged,
+    };
+
+    enum GraphicsItemFlag
+    {
+        ItemIsMovable,
+        ItemIsSelectable,
+        ItemIsFocusable,
+        ItemClipsToShape,
+        ItemClipsChildrenToShape,
+        ItemIgnoresTransformations,
+        ItemIgnoresParentOpacity,
+        ItemDoesntPropagateOpacityToChildren,
+        ItemStacksBehindParent,
+        ItemUsesExtendedStyleOption,
+        ItemHasNoContents,
+        ItemSendsGeometryChanges,
+        ItemAcceptsInputMethod,
+        ItemNegativeZStacksBehindParent,
+        ItemIsPanel,
+        ItemSendsScenePositionChanges,
+    };
+
+    typedef QFlags<QGraphicsItem::GraphicsItemFlag> GraphicsItemFlags;
+    static const int Type;
+    static const int UserType;
+    explicit QGraphicsItem(QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsItem();
+    QGraphicsScene *scene() const;
+    QGraphicsItem *parentItem() const;
+    QGraphicsItem *topLevelItem() const;
+    void setParentItem(QGraphicsItem *parent /TransferThis/);
+    QGraphicsItemGroup *group() const;
+    void setGroup(QGraphicsItemGroup *group /KeepReference/);
+    QFlags<QGraphicsItem::GraphicsItemFlag> flags() const;
+    void setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true);
+    void setFlags(QFlags<QGraphicsItem::GraphicsItemFlag> flags);
+    QString toolTip() const;
+    void setToolTip(const QString &toolTip);
+    QCursor cursor() const;
+    void setCursor(const QCursor &cursor);
+    bool hasCursor() const;
+    void unsetCursor();
+    bool isVisible() const;
+    void setVisible(bool visible);
+    void hide();
+    void show();
+    bool isEnabled() const;
+    void setEnabled(bool enabled);
+    bool isSelected() const;
+    void setSelected(bool selected);
+    bool acceptDrops() const;
+    void setAcceptDrops(bool on);
+    Qt::MouseButtons acceptedMouseButtons() const;
+    void setAcceptedMouseButtons(Qt::MouseButtons buttons);
+    bool hasFocus() const;
+    void setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason);
+    void clearFocus();
+    QPointF pos() const;
+    qreal x() const;
+    qreal y() const;
+    QPointF scenePos() const;
+    void setPos(const QPointF &pos);
+    void moveBy(qreal dx, qreal dy);
+    void ensureVisible(const QRectF &rect = QRectF(), int xMargin = 50, int yMargin = 50);
+    virtual void advance(int phase);
+    qreal zValue() const;
+    void setZValue(qreal z);
+    virtual QRectF boundingRect() const = 0;
+    QRectF childrenBoundingRect() const;
+    QRectF sceneBoundingRect() const;
+    virtual QPainterPath shape() const;
+    virtual bool contains(const QPointF &point) const;
+    virtual bool collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
+    virtual bool collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
+    QList<QGraphicsItem*> collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) = 0;
+    void update(const QRectF &rect = QRectF());
+    QPointF mapToItem(const QGraphicsItem *item, const QPointF &point) const;
+    QPointF mapToParent(const QPointF &point) const;
+    QPointF mapToScene(const QPointF &point) const;
+    QPolygonF mapToItem(const QGraphicsItem *item, const QRectF &rect) const;
+    QPolygonF mapToParent(const QRectF &rect) const;
+    QPolygonF mapToScene(const QRectF &rect) const;
+    QPolygonF mapToItem(const QGraphicsItem *item, const QPolygonF &polygon) const;
+    QPolygonF mapToParent(const QPolygonF &polygon) const;
+    QPolygonF mapToScene(const QPolygonF &polygon) const;
+    QPainterPath mapToItem(const QGraphicsItem *item, const QPainterPath &path) const;
+    QPainterPath mapToParent(const QPainterPath &path) const;
+    QPainterPath mapToScene(const QPainterPath &path) const;
+    QPointF mapFromItem(const QGraphicsItem *item, const QPointF &point) const;
+    QPointF mapFromParent(const QPointF &point) const;
+    QPointF mapFromScene(const QPointF &point) const;
+    QPolygonF mapFromItem(const QGraphicsItem *item, const QRectF &rect) const;
+    QPolygonF mapFromParent(const QRectF &rect) const;
+    QPolygonF mapFromScene(const QRectF &rect) const;
+    QPolygonF mapFromItem(const QGraphicsItem *item, const QPolygonF &polygon) const;
+    QPolygonF mapFromParent(const QPolygonF &polygon) const;
+    QPolygonF mapFromScene(const QPolygonF &polygon) const;
+    QPainterPath mapFromItem(const QGraphicsItem *item, const QPainterPath &path) const;
+    QPainterPath mapFromParent(const QPainterPath &path) const;
+    QPainterPath mapFromScene(const QPainterPath &path) const;
+    bool isAncestorOf(const QGraphicsItem *child) const;
+    QVariant data(int key) const;
+    void setData(int key, const QVariant &value);
+    virtual int type() const;
+    void installSceneEventFilter(QGraphicsItem *filterItem);
+    void removeSceneEventFilter(QGraphicsItem *filterItem);
+
+protected:
+    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
+    virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dropEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void focusInEvent(QFocusEvent *event);
+    virtual void focusOutEvent(QFocusEvent *event);
+    virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
+    virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+    virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
+    virtual void inputMethodEvent(QInputMethodEvent *event);
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
+    virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value);
+    virtual void keyPressEvent(QKeyEvent *event);
+    virtual void keyReleaseEvent(QKeyEvent *event);
+    virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+    void prepareGeometryChange();
+    virtual bool sceneEvent(QEvent *event);
+    virtual bool sceneEventFilter(QGraphicsItem *watched, QEvent *event);
+    virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
+
+public:
+    void setPos(qreal ax, qreal ay);
+    void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xMargin = 50, int yMargin = 50);
+    void update(qreal ax, qreal ay, qreal width, qreal height);
+    QPointF mapToItem(const QGraphicsItem *item, qreal ax, qreal ay) const;
+    QPointF mapToParent(qreal ax, qreal ay) const;
+    QPointF mapToScene(qreal ax, qreal ay) const;
+    QPointF mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay) const;
+    QPointF mapFromParent(qreal ax, qreal ay) const;
+    QPointF mapFromScene(qreal ax, qreal ay) const;
+    QTransform transform() const;
+    QTransform sceneTransform() const;
+    QTransform deviceTransform(const QTransform &viewportTransform) const;
+    void setTransform(const QTransform &matrix, bool combine = false);
+    void resetTransform();
+    bool isObscured(const QRectF &rect = QRectF()) const;
+    bool isObscured(qreal ax, qreal ay, qreal w, qreal h) const;
+    QPolygonF mapToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const;
+    QPolygonF mapToParent(qreal ax, qreal ay, qreal w, qreal h) const;
+    QPolygonF mapToScene(qreal ax, qreal ay, qreal w, qreal h) const;
+    QPolygonF mapFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const;
+    QPolygonF mapFromParent(qreal ax, qreal ay, qreal w, qreal h) const;
+    QPolygonF mapFromScene(qreal ax, qreal ay, qreal w, qreal h) const;
+    QGraphicsWidget *parentWidget() const;
+    QGraphicsWidget *topLevelWidget() const;
+    QGraphicsWidget *window() const;
+    QList<QGraphicsItem*> childItems() const;
+    bool isWidget() const;
+    bool isWindow() const;
+    QGraphicsItem::CacheMode cacheMode() const;
+    void setCacheMode(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize = QSize());
+    bool isVisibleTo(const QGraphicsItem *parent) const;
+    bool acceptHoverEvents() const;
+    void setAcceptHoverEvents(bool enabled);
+    void grabMouse();
+    void ungrabMouse();
+    void grabKeyboard();
+    void ungrabKeyboard();
+    QRegion boundingRegion(const QTransform &itemToDeviceTransform) const;
+    qreal boundingRegionGranularity() const;
+    void setBoundingRegionGranularity(qreal granularity);
+    void scroll(qreal dx, qreal dy, const QRectF &rect = QRectF());
+    QGraphicsItem *commonAncestorItem(const QGraphicsItem *other) const;
+    bool isUnderMouse() const;
+    qreal opacity() const;
+    qreal effectiveOpacity() const;
+    void setOpacity(qreal opacity);
+    QTransform itemTransform(const QGraphicsItem *other, bool *ok = 0) const;
+    bool isClipped() const;
+    QPainterPath clipPath() const;
+    QRectF mapRectToItem(const QGraphicsItem *item, const QRectF &rect) const;
+    QRectF mapRectToParent(const QRectF &rect) const;
+    QRectF mapRectToScene(const QRectF &rect) const;
+    QRectF mapRectFromItem(const QGraphicsItem *item, const QRectF &rect) const;
+    QRectF mapRectFromParent(const QRectF &rect) const;
+    QRectF mapRectFromScene(const QRectF &rect) const;
+    QRectF mapRectToItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const;
+    QRectF mapRectToParent(qreal ax, qreal ay, qreal w, qreal h) const;
+    QRectF mapRectToScene(qreal ax, qreal ay, qreal w, qreal h) const;
+    QRectF mapRectFromItem(const QGraphicsItem *item, qreal ax, qreal ay, qreal w, qreal h) const;
+    QRectF mapRectFromParent(qreal ax, qreal ay, qreal w, qreal h) const;
+    QRectF mapRectFromScene(qreal ax, qreal ay, qreal w, qreal h) const;
+
+    enum PanelModality
+    {
+        NonModal,
+        PanelModal,
+        SceneModal,
+    };
+
+    QGraphicsObject *parentObject() const;
+    QGraphicsItem *panel() const;
+    bool isPanel() const;
+    QGraphicsObject *toGraphicsObject();
+    QGraphicsItem::PanelModality panelModality() const;
+    void setPanelModality(QGraphicsItem::PanelModality panelModality);
+    bool isBlockedByModalPanel(QGraphicsItem **blockingPanel /Out/ = 0) const;
+    QGraphicsEffect *graphicsEffect() const;
+    void setGraphicsEffect(QGraphicsEffect *effect /Transfer/);
+    bool acceptTouchEvents() const;
+    void setAcceptTouchEvents(bool enabled);
+    bool filtersChildEvents() const;
+    void setFiltersChildEvents(bool enabled);
+    bool isActive() const;
+    void setActive(bool active);
+    QGraphicsItem *focusProxy() const;
+    void setFocusProxy(QGraphicsItem *item /KeepReference/);
+    QGraphicsItem *focusItem() const;
+    void setX(qreal x);
+    void setY(qreal y);
+    void setRotation(qreal angle);
+    qreal rotation() const;
+    void setScale(qreal scale);
+    qreal scale() const;
+    QList<QGraphicsTransform*> transformations() const;
+    void setTransformations(const QList<QGraphicsTransform*> &transformations /KeepReference/);
+    QPointF transformOriginPoint() const;
+    void setTransformOriginPoint(const QPointF &origin);
+    void setTransformOriginPoint(qreal ax, qreal ay);
+    void stackBefore(const QGraphicsItem *sibling);
+    Qt::InputMethodHints inputMethodHints() const;
+    void setInputMethodHints(Qt::InputMethodHints hints);
+
+protected:
+    void updateMicroFocus();
+
+private:
+    QGraphicsItem(const QGraphicsItem &);
+};
+
+QFlags<QGraphicsItem::GraphicsItemFlag> operator|(QGraphicsItem::GraphicsItemFlag f1, QFlags<QGraphicsItem::GraphicsItemFlag> f2);
+
+class QAbstractGraphicsShapeItem : QGraphicsItem
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    explicit QAbstractGraphicsShapeItem(QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QAbstractGraphicsShapeItem();
+    QPen pen() const;
+    void setPen(const QPen &pen);
+    QBrush brush() const;
+    void setBrush(const QBrush &brush);
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+
+private:
+    QAbstractGraphicsShapeItem(const QAbstractGraphicsShapeItem &);
+};
+
+class QGraphicsPathItem : QAbstractGraphicsShapeItem
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    explicit QGraphicsPathItem(QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsPathItem(const QPainterPath &path, QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsPathItem();
+    QPainterPath path() const;
+    void setPath(const QPainterPath &path);
+    virtual QRectF boundingRect() const;
+    virtual QPainterPath shape() const;
+    virtual bool contains(const QPointF &point) const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+    virtual int type() const;
+
+private:
+    QGraphicsPathItem(const QGraphicsPathItem &);
+};
+
+class QGraphicsRectItem : QAbstractGraphicsShapeItem
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    explicit QGraphicsRectItem(QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsRectItem(const QRectF &rect, QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsRectItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsRectItem();
+    QRectF rect() const;
+    void setRect(const QRectF &rect);
+    void setRect(qreal ax, qreal ay, qreal w, qreal h);
+    virtual QRectF boundingRect() const;
+    virtual QPainterPath shape() const;
+    virtual bool contains(const QPointF &point) const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+    virtual int type() const;
+
+private:
+    QGraphicsRectItem(const QGraphicsRectItem &);
+};
+
+class QGraphicsEllipseItem : QAbstractGraphicsShapeItem
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    explicit QGraphicsEllipseItem(QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsEllipseItem(const QRectF &rect, QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsEllipseItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsEllipseItem();
+    QRectF rect() const;
+    void setRect(const QRectF &rect);
+    void setRect(qreal ax, qreal ay, qreal w, qreal h);
+    int startAngle() const;
+    void setStartAngle(int angle);
+    int spanAngle() const;
+    void setSpanAngle(int angle);
+    virtual QRectF boundingRect() const;
+    virtual QPainterPath shape() const;
+    virtual bool contains(const QPointF &point) const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+    virtual int type() const;
+
+private:
+    QGraphicsEllipseItem(const QGraphicsEllipseItem &);
+};
+
+class QGraphicsPolygonItem : QAbstractGraphicsShapeItem
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    explicit QGraphicsPolygonItem(QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsPolygonItem(const QPolygonF &polygon, QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsPolygonItem();
+    QPolygonF polygon() const;
+    void setPolygon(const QPolygonF &polygon);
+    Qt::FillRule fillRule() const;
+    void setFillRule(Qt::FillRule rule);
+    virtual QRectF boundingRect() const;
+    virtual QPainterPath shape() const;
+    virtual bool contains(const QPointF &point) const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+    virtual int type() const;
+
+private:
+    QGraphicsPolygonItem(const QGraphicsPolygonItem &);
+};
+
+class QGraphicsLineItem : QGraphicsItem
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    explicit QGraphicsLineItem(QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsLineItem(const QLineF &line, QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsLineItem(qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsLineItem();
+    QPen pen() const;
+    void setPen(const QPen &pen);
+    QLineF line() const;
+    void setLine(const QLineF &line);
+    void setLine(qreal x1, qreal y1, qreal x2, qreal y2);
+    virtual QRectF boundingRect() const;
+    virtual QPainterPath shape() const;
+    virtual bool contains(const QPointF &point) const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+    virtual int type() const;
+
+private:
+    QGraphicsLineItem(const QGraphicsLineItem &);
+};
+
+class QGraphicsPixmapItem : QGraphicsItem
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    enum ShapeMode
+    {
+        MaskShape,
+        BoundingRectShape,
+        HeuristicMaskShape,
+    };
+
+    explicit QGraphicsPixmapItem(QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsPixmapItem();
+    QPixmap pixmap() const;
+    void setPixmap(const QPixmap &pixmap);
+    Qt::TransformationMode transformationMode() const;
+    void setTransformationMode(Qt::TransformationMode mode);
+    QPointF offset() const;
+    void setOffset(const QPointF &offset);
+    void setOffset(qreal ax, qreal ay);
+    virtual QRectF boundingRect() const;
+    virtual QPainterPath shape() const;
+    virtual bool contains(const QPointF &point) const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+    virtual int type() const;
+    QGraphicsPixmapItem::ShapeMode shapeMode() const;
+    void setShapeMode(QGraphicsPixmapItem::ShapeMode mode);
+
+private:
+    QGraphicsPixmapItem(const QGraphicsPixmapItem &);
+};
+
+class QGraphicsSimpleTextItem : QAbstractGraphicsShapeItem
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    explicit QGraphicsSimpleTextItem(QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsSimpleTextItem(const QString &text, QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsSimpleTextItem();
+    void setText(const QString &text);
+    QString text() const;
+    void setFont(const QFont &font);
+    QFont font() const;
+    virtual QRectF boundingRect() const;
+    virtual QPainterPath shape() const;
+    virtual bool contains(const QPointF &point) const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+    virtual int type() const;
+
+private:
+    QGraphicsSimpleTextItem(const QGraphicsSimpleTextItem &);
+};
+
+class QGraphicsItemGroup : QGraphicsItem
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    explicit QGraphicsItemGroup(QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsItemGroup();
+    void addToGroup(QGraphicsItem *item /Transfer/);
+    void removeFromGroup(QGraphicsItem *item /GetWrapper/);
+%MethodCode
+        sipCpp->removeFromGroup(a0);
+        
+        // The item will be passed to the group's parent if there is one.  If not,
+        // transfer ownership back to Python.
+        if (sipCpp->parentItem())
+            sipTransferTo(a0Wrapper, sipGetPyObject(sipCpp->parentItem(), sipType_QGraphicsItem));
+        else
+            sipTransferBack(a0Wrapper);
+%End
+
+    virtual QRectF boundingRect() const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+    virtual int type() const;
+
+private:
+    QGraphicsItemGroup(const QGraphicsItemGroup &);
+};
+
+class QGraphicsObject : QObject, QGraphicsItem
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    explicit QGraphicsObject(QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsObject();
+    void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags(0));
+    void ungrabGesture(Qt::GestureType type);
+
+signals:
+    void parentChanged();
+    void opacityChanged();
+    void visibleChanged();
+    void enabledChanged();
+    void xChanged();
+    void yChanged();
+    void zChanged();
+    void rotationChanged();
+    void scaleChanged();
+
+protected slots:
+    void updateMicroFocus();
+
+protected:
+    virtual bool event(QEvent *ev);
+};
+
+class QGraphicsTextItem : QGraphicsObject
+{
+%TypeHeaderCode
+#include <qgraphicsitem.h>
+%End
+
+public:
+    explicit QGraphicsTextItem(QGraphicsItem *parent /TransferThis/ = 0);
+    QGraphicsTextItem(const QString &text, QGraphicsItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsTextItem();
+    QString toHtml() const;
+    void setHtml(const QString &html);
+    QString toPlainText() const;
+    void setPlainText(const QString &text);
+    QFont font() const;
+    void setFont(const QFont &font);
+    void setDefaultTextColor(const QColor &c);
+    QColor defaultTextColor() const;
+    virtual QRectF boundingRect() const;
+    virtual QPainterPath shape() const;
+    virtual bool contains(const QPointF &point) const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+    virtual bool isObscuredBy(const QGraphicsItem *item) const;
+    virtual QPainterPath opaqueArea() const;
+    virtual int type() const;
+    void setTextWidth(qreal width);
+    qreal textWidth() const;
+    void adjustSize();
+    void setDocument(QTextDocument *document /KeepReference/);
+    QTextDocument *document() const;
+    void setTextInteractionFlags(Qt::TextInteractionFlags flags);
+    Qt::TextInteractionFlags textInteractionFlags() const;
+    void setTabChangesFocus(bool b);
+    bool tabChangesFocus() const;
+    void setOpenExternalLinks(bool open);
+    bool openExternalLinks() const;
+    void setTextCursor(const QTextCursor &cursor);
+    QTextCursor textCursor() const;
+
+signals:
+    void linkActivated(const QString &);
+    void linkHovered(const QString &);
+
+protected:
+    virtual bool sceneEvent(QEvent *event);
+    virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
+    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
+    virtual void keyPressEvent(QKeyEvent *event);
+    virtual void keyReleaseEvent(QKeyEvent *event);
+    virtual void focusInEvent(QFocusEvent *event);
+    virtual void focusOutEvent(QFocusEvent *event);
+    virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dropEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void inputMethodEvent(QInputMethodEvent *event);
+    virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
+    virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
+    virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
+
+private:
+    QGraphicsTextItem(const QGraphicsTextItem &);
+};
+
+%ModuleCode
+// These are needed by the %ConvertToSubClassCode.
+#include <qgraphicsproxywidget.h>
+#include <qgraphicswidget.h>
+%End
diff --git a/sip/QtWidgets/qgraphicslayout.sip b/sip/QtWidgets/qgraphicslayout.sip
new file mode 100644
index 0000000..d0af7bb
--- /dev/null
+++ b/sip/QtWidgets/qgraphicslayout.sip
@@ -0,0 +1,48 @@
+// qgraphicslayout.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsLayout : QGraphicsLayoutItem
+{
+%TypeHeaderCode
+#include <qgraphicslayout.h>
+%End
+
+public:
+    QGraphicsLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsLayout();
+    void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom);
+    virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const;
+    void activate();
+    bool isActivated() const;
+    virtual void invalidate();
+    virtual void widgetEvent(QEvent *e);
+    virtual int count() const = 0 /__len__/;
+    virtual QGraphicsLayoutItem *itemAt(int i) const = 0;
+    virtual void removeAt(int index) = 0;
+    virtual void updateGeometry();
+
+protected:
+    void addChildLayoutItem(QGraphicsLayoutItem *layoutItem /Transfer/);
+
+private:
+    QGraphicsLayout(const QGraphicsLayout &);
+};
diff --git a/sip/QtWidgets/qgraphicslayoutitem.sip b/sip/QtWidgets/qgraphicslayoutitem.sip
new file mode 100644
index 0000000..72acac2
--- /dev/null
+++ b/sip/QtWidgets/qgraphicslayoutitem.sip
@@ -0,0 +1,75 @@
+// qgraphicslayoutitem.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsLayoutItem /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qgraphicslayoutitem.h>
+%End
+
+public:
+    QGraphicsLayoutItem(QGraphicsLayoutItem *parent /TransferThis/ = 0, bool isLayout = false);
+    virtual ~QGraphicsLayoutItem();
+    void setSizePolicy(const QSizePolicy &policy);
+    void setSizePolicy(QSizePolicy::Policy hPolicy, QSizePolicy::Policy vPolicy, QSizePolicy::ControlType controlType = QSizePolicy::DefaultType);
+    QSizePolicy sizePolicy() const;
+    void setMinimumSize(const QSizeF &size);
+    QSizeF minimumSize() const;
+    void setMinimumWidth(qreal width);
+    void setMinimumHeight(qreal height);
+    void setPreferredSize(const QSizeF &size);
+    QSizeF preferredSize() const;
+    void setPreferredWidth(qreal width);
+    void setPreferredHeight(qreal height);
+    void setMaximumSize(const QSizeF &size);
+    QSizeF maximumSize() const;
+    void setMaximumWidth(qreal width);
+    void setMaximumHeight(qreal height);
+    virtual void setGeometry(const QRectF &rect);
+    QRectF geometry() const;
+    virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const;
+    QRectF contentsRect() const;
+    QSizeF effectiveSizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+    virtual void updateGeometry();
+    QGraphicsLayoutItem *parentLayoutItem() const;
+    void setParentLayoutItem(QGraphicsLayoutItem *parent /TransferThis/);
+    bool isLayout() const;
+    void setMinimumSize(qreal aw, qreal ah);
+    void setPreferredSize(qreal aw, qreal ah);
+    void setMaximumSize(qreal aw, qreal ah);
+    qreal minimumWidth() const;
+    qreal minimumHeight() const;
+    qreal preferredWidth() const;
+    qreal preferredHeight() const;
+    qreal maximumWidth() const;
+    qreal maximumHeight() const;
+    QGraphicsItem *graphicsItem() const;
+    bool ownedByLayout() const;
+
+protected:
+    virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const = 0;
+    void setGraphicsItem(QGraphicsItem *item);
+    void setOwnedByLayout(bool ownedByLayout);
+
+private:
+    QGraphicsLayoutItem(const QGraphicsLayoutItem &);
+};
diff --git a/sip/QtWidgets/qgraphicslinearlayout.sip b/sip/QtWidgets/qgraphicslinearlayout.sip
new file mode 100644
index 0000000..193b320
--- /dev/null
+++ b/sip/QtWidgets/qgraphicslinearlayout.sip
@@ -0,0 +1,82 @@
+// qgraphicslinearlayout.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsLinearLayout : QGraphicsLayout
+{
+%TypeHeaderCode
+#include <qgraphicslinearlayout.h>
+%End
+
+public:
+    QGraphicsLinearLayout(QGraphicsLayoutItem *parent /TransferThis/ = 0);
+    QGraphicsLinearLayout(Qt::Orientation orientation, QGraphicsLayoutItem *parent /TransferThis/ = 0);
+    virtual ~QGraphicsLinearLayout();
+    void setOrientation(Qt::Orientation orientation);
+    Qt::Orientation orientation() const;
+    void addItem(QGraphicsLayoutItem *item /Transfer/);
+    void addStretch(int stretch = 1);
+    void insertItem(int index, QGraphicsLayoutItem *item /Transfer/);
+    void insertStretch(int index, int stretch = 1);
+    void removeItem(QGraphicsLayoutItem *item /TransferBack/);
+    virtual void removeAt(int index);
+%MethodCode
+        // The ownership of any existing item must be passed back to Python.
+        QGraphicsLayoutItem *itm;
+        
+        if (a0 < sipCpp->count())
+            itm = sipCpp->itemAt(a0);
+        else
+            itm = 0;
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipSelfWasArg ? sipCpp->QGraphicsLinearLayout::removeAt(a0)
+                      : sipCpp->removeAt(a0);
+        Py_END_ALLOW_THREADS
+        
+        // The Qt documentation isn't quite correct as ownership isn't always passed
+        // back to the caller.
+        if (itm && !itm->parentLayoutItem())
+        {
+            PyObject *itmo = sipGetPyObject(itm, sipType_QGraphicsLayoutItem);
+        
+            if (itmo)
+                sipTransferBack(itmo);
+        }
+%End
+
+    void setSpacing(qreal spacing);
+    qreal spacing() const;
+    void setItemSpacing(int index, qreal spacing);
+    qreal itemSpacing(int index) const;
+    void setStretchFactor(QGraphicsLayoutItem *item, int stretch);
+    int stretchFactor(QGraphicsLayoutItem *item) const;
+    void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment);
+    Qt::Alignment alignment(QGraphicsLayoutItem *item) const;
+    virtual void setGeometry(const QRectF &rect);
+    virtual int count() const;
+    virtual QGraphicsLayoutItem *itemAt(int index) const;
+    virtual void invalidate();
+    virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+
+private:
+    QGraphicsLinearLayout(const QGraphicsLinearLayout &);
+};
diff --git a/sip/QtWidgets/qgraphicsproxywidget.sip b/sip/QtWidgets/qgraphicsproxywidget.sip
new file mode 100644
index 0000000..bee0415
--- /dev/null
+++ b/sip/QtWidgets/qgraphicsproxywidget.sip
@@ -0,0 +1,91 @@
+// qgraphicsproxywidget.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsProxyWidget : QGraphicsWidget
+{
+%TypeHeaderCode
+#include <qgraphicsproxywidget.h>
+%End
+
+public:
+    QGraphicsProxyWidget(QGraphicsItem *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QGraphicsProxyWidget();
+    void setWidget(QWidget *widget /Transfer/);
+%MethodCode
+        // The ownership of any existing widget must be passed back to Python.
+        QWidget *w = sipCpp->widget();
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->setWidget(a0);
+        Py_END_ALLOW_THREADS
+        
+        if (w)
+        {
+            PyObject *wo = sipGetPyObject(w, sipType_QWidget);
+        
+            if (wo)
+                sipTransferBack(wo);
+        }
+%End
+
+    QWidget *widget() const;
+    QRectF subWidgetRect(const QWidget *widget) const;
+    virtual void setGeometry(const QRectF &rect);
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+    virtual int type() const;
+    QGraphicsProxyWidget *createProxyForChildWidget(QWidget *child) /Factory/;
+
+protected:
+    virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value);
+    virtual bool event(QEvent *event);
+    virtual bool eventFilter(QObject *object, QEvent *event);
+    virtual void showEvent(QShowEvent *event);
+    virtual void hideEvent(QHideEvent *event);
+    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
+    virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
+    virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+    virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
+    virtual void grabMouseEvent(QEvent *event);
+    virtual void ungrabMouseEvent(QEvent *event);
+    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
+    virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
+    virtual void keyPressEvent(QKeyEvent *event);
+    virtual void keyReleaseEvent(QKeyEvent *event);
+    virtual void focusInEvent(QFocusEvent *event);
+    virtual void focusOutEvent(QFocusEvent *event);
+    virtual bool focusNextPrevChild(bool next);
+    virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+    virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
+    virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dropEvent(QGraphicsSceneDragDropEvent *event);
+    QGraphicsProxyWidget *newProxyWidget(const QWidget *) /Factory/;
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
+    virtual void inputMethodEvent(QInputMethodEvent *event);
+
+private:
+    QGraphicsProxyWidget(const QGraphicsProxyWidget &);
+};
diff --git a/sip/QtWidgets/qgraphicsscene.sip b/sip/QtWidgets/qgraphicsscene.sip
new file mode 100644
index 0000000..d604a4d
--- /dev/null
+++ b/sip/QtWidgets/qgraphicsscene.sip
@@ -0,0 +1,172 @@
+// qgraphicsscene.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qgraphicsscene.h>
+%End
+
+class QGraphicsScene : QObject
+{
+%TypeHeaderCode
+#include <qgraphicsscene.h>
+%End
+
+public:
+    enum ItemIndexMethod
+    {
+        BspTreeIndex,
+        NoIndex,
+    };
+
+    QGraphicsScene(QObject *parent /TransferThis/ = 0);
+    QGraphicsScene(const QRectF &sceneRect, QObject *parent /TransferThis/ = 0);
+    QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent /TransferThis/ = 0);
+    virtual ~QGraphicsScene();
+    QRectF sceneRect() const;
+    qreal width() const;
+    qreal height() const;
+    void setSceneRect(const QRectF &rect);
+    void setSceneRect(qreal x, qreal y, qreal w, qreal h);
+    void render(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF(), Qt::AspectRatioMode mode = Qt::KeepAspectRatio);
+    QGraphicsScene::ItemIndexMethod itemIndexMethod() const;
+    void setItemIndexMethod(QGraphicsScene::ItemIndexMethod method);
+    QRectF itemsBoundingRect() const;
+    QList<QGraphicsItem*> items(Qt::SortOrder order = Qt::DescendingOrder) const;
+    QList<QGraphicsItem*> items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const;
+    QList<QGraphicsItem*> items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const;
+    QList<QGraphicsItem*> items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const;
+    QList<QGraphicsItem*> items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const;
+    QList<QGraphicsItem*> items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const;
+    QList<QGraphicsItem*> collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
+    QList<QGraphicsItem*> selectedItems() const;
+    void setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform);
+    void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform());
+    void clearSelection();
+    QGraphicsItemGroup *createItemGroup(const QList<QGraphicsItem*> &items /Transfer/);
+    void destroyItemGroup(QGraphicsItemGroup *group /Transfer/);
+    void addItem(QGraphicsItem *item /Transfer/);
+    QGraphicsEllipseItem *addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush());
+    QGraphicsEllipseItem *addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush());
+    QGraphicsLineItem *addLine(const QLineF &line, const QPen &pen = QPen());
+    QGraphicsLineItem *addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen());
+    QGraphicsPathItem *addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush());
+    QGraphicsPixmapItem *addPixmap(const QPixmap &pixmap);
+    QGraphicsPolygonItem *addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush());
+    QGraphicsRectItem *addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush());
+    QGraphicsRectItem *addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush());
+    QGraphicsSimpleTextItem *addSimpleText(const QString &text, const QFont &font = QFont());
+    QGraphicsTextItem *addText(const QString &text, const QFont &font = QFont());
+    void removeItem(QGraphicsItem *item /TransferBack/);
+    QGraphicsItem *focusItem() const;
+    void setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason);
+    bool hasFocus() const;
+    void setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason);
+    void clearFocus();
+    QGraphicsItem *mouseGrabberItem() const;
+    QBrush backgroundBrush() const;
+    void setBackgroundBrush(const QBrush &brush);
+    QBrush foregroundBrush() const;
+    void setForegroundBrush(const QBrush &brush);
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
+    QList<QGraphicsView*> views() const;
+
+public slots:
+    void advance();
+    void update(const QRectF &rect = QRectF());
+    void invalidate(const QRectF &rect = QRectF(), QFlags<QGraphicsScene::SceneLayer> layers = QGraphicsScene::AllLayers);
+    void clear();
+
+signals:
+    void changed(const QList<QRectF> &region);
+    void sceneRectChanged(const QRectF &rect);
+    void selectionChanged();
+
+protected:
+    virtual bool event(QEvent *event);
+    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
+    virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void dropEvent(QGraphicsSceneDragDropEvent *event);
+    virtual void focusInEvent(QFocusEvent *event);
+    virtual void focusOutEvent(QFocusEvent *event);
+    virtual void helpEvent(QGraphicsSceneHelpEvent *event);
+    virtual void keyPressEvent(QKeyEvent *event);
+    virtual void keyReleaseEvent(QKeyEvent *event);
+    virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+    virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
+    virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
+    virtual void inputMethodEvent(QInputMethodEvent *event);
+    virtual void drawBackground(QPainter *painter, const QRectF &rect);
+    virtual void drawForeground(QPainter *painter, const QRectF &rect);
+
+public:
+    enum SceneLayer
+    {
+        ItemLayer,
+        BackgroundLayer,
+        ForegroundLayer,
+        AllLayers,
+    };
+
+    typedef QFlags<QGraphicsScene::SceneLayer> SceneLayers;
+    int bspTreeDepth() const;
+    void setBspTreeDepth(int depth);
+    QPainterPath selectionArea() const;
+    void update(qreal x, qreal y, qreal w, qreal h);
+    QGraphicsProxyWidget *addWidget(QWidget *widget /Transfer/, Qt::WindowFlags flags = 0);
+    QStyle *style() const;
+    void setStyle(QStyle *style /Transfer/);
+    QFont font() const;
+    void setFont(const QFont &font);
+    QPalette palette() const;
+    void setPalette(const QPalette &palette);
+    QGraphicsWidget *activeWindow() const;
+    void setActiveWindow(QGraphicsWidget *widget);
+
+protected:
+    virtual bool eventFilter(QObject *watched, QEvent *event);
+    bool focusNextPrevChild(bool next);
+
+public:
+    void setStickyFocus(bool enabled);
+    bool stickyFocus() const;
+    QGraphicsItem *itemAt(const QPointF &pos, const QTransform &deviceTransform) const;
+    QGraphicsItem *itemAt(qreal x, qreal y, const QTransform &deviceTransform) const;
+    bool isActive() const;
+    QGraphicsItem *activePanel() const;
+    void setActivePanel(QGraphicsItem *item);
+    bool sendEvent(QGraphicsItem *item, QEvent *event);
+    void invalidate(qreal x, qreal y, qreal w, qreal h, QFlags<QGraphicsScene::SceneLayer> layers = QGraphicsScene::AllLayers);
+
+signals:
+%If (Qt_5_1_0 -)
+    void focusItemChanged(QGraphicsItem *newFocus, QGraphicsItem *oldFocus, Qt::FocusReason reason);
+%End
+
+private:
+    QGraphicsScene(const QGraphicsScene &);
+};
+
+QFlags<QGraphicsScene::SceneLayer> operator|(QGraphicsScene::SceneLayer f1, QFlags<QGraphicsScene::SceneLayer> f2);
diff --git a/sip/QtWidgets/qgraphicssceneevent.sip b/sip/QtWidgets/qgraphicssceneevent.sip
new file mode 100644
index 0000000..8c04b72
--- /dev/null
+++ b/sip/QtWidgets/qgraphicssceneevent.sip
@@ -0,0 +1,246 @@
+// qgraphicssceneevent.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsSceneEvent : QEvent /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qgraphicssceneevent.h>
+%End
+
+%ConvertToSubClassCode
+    switch (sipCpp->type())
+    {
+    case QEvent::GraphicsSceneContextMenu:
+        sipType = sipType_QGraphicsSceneContextMenuEvent;
+        break;
+       
+    case QEvent::GraphicsSceneDragEnter:
+    case QEvent::GraphicsSceneDragLeave:
+    case QEvent::GraphicsSceneDragMove:
+    case QEvent::GraphicsSceneDrop:
+        sipType = sipType_QGraphicsSceneDragDropEvent;
+        break;
+       
+    case QEvent::GraphicsSceneHelp:
+        sipType = sipType_QGraphicsSceneHelpEvent;
+        break;
+       
+    case QEvent::GraphicsSceneHoverEnter:
+    case QEvent::GraphicsSceneHoverLeave:
+    case QEvent::GraphicsSceneHoverMove:
+        sipType = sipType_QGraphicsSceneHoverEvent;
+        break;
+       
+    case QEvent::GraphicsSceneMouseDoubleClick:
+    case QEvent::GraphicsSceneMouseMove:
+    case QEvent::GraphicsSceneMousePress:
+    case QEvent::GraphicsSceneMouseRelease:
+        sipType = sipType_QGraphicsSceneMouseEvent;
+        break;
+       
+    case QEvent::GraphicsSceneWheel:
+        sipType = sipType_QGraphicsSceneWheelEvent;
+        break;
+       
+    case QEvent::GraphicsSceneMove:
+        sipType = sipType_QGraphicsSceneMoveEvent;
+        break;
+    
+    case QEvent::GraphicsSceneResize:
+        sipType = sipType_QGraphicsSceneResizeEvent;
+        break;
+    
+    default:
+        sipType = 0;
+    }
+%End
+
+public:
+    virtual ~QGraphicsSceneEvent();
+    QWidget *widget() const;
+    void setWidget(QWidget *widget);
+
+private:
+    QGraphicsSceneEvent(const QGraphicsSceneEvent &);
+};
+
+class QGraphicsSceneMouseEvent : QGraphicsSceneEvent /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qgraphicssceneevent.h>
+%End
+
+public:
+    virtual ~QGraphicsSceneMouseEvent();
+    QPointF pos() const;
+    QPointF scenePos() const;
+    QPoint screenPos() const;
+    QPointF buttonDownPos(Qt::MouseButton button) const;
+    QPointF buttonDownScenePos(Qt::MouseButton button) const;
+    QPoint buttonDownScreenPos(Qt::MouseButton button) const;
+    QPointF lastPos() const;
+    QPointF lastScenePos() const;
+    QPoint lastScreenPos() const;
+    Qt::MouseButtons buttons() const;
+    Qt::MouseButton button() const;
+    Qt::KeyboardModifiers modifiers() const;
+
+private:
+    QGraphicsSceneMouseEvent(const QGraphicsSceneMouseEvent &);
+};
+
+class QGraphicsSceneWheelEvent : QGraphicsSceneEvent /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qgraphicssceneevent.h>
+%End
+
+public:
+    virtual ~QGraphicsSceneWheelEvent();
+    QPointF pos() const;
+    QPointF scenePos() const;
+    QPoint screenPos() const;
+    Qt::MouseButtons buttons() const;
+    Qt::KeyboardModifiers modifiers() const;
+    int delta() const;
+    Qt::Orientation orientation() const;
+
+private:
+    QGraphicsSceneWheelEvent(const QGraphicsSceneWheelEvent &);
+};
+
+class QGraphicsSceneContextMenuEvent : QGraphicsSceneEvent /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qgraphicssceneevent.h>
+%End
+
+public:
+    enum Reason
+    {
+        Mouse,
+        Keyboard,
+        Other,
+    };
+
+    virtual ~QGraphicsSceneContextMenuEvent();
+    QPointF pos() const;
+    QPointF scenePos() const;
+    QPoint screenPos() const;
+    Qt::KeyboardModifiers modifiers() const;
+    QGraphicsSceneContextMenuEvent::Reason reason() const;
+
+private:
+    QGraphicsSceneContextMenuEvent(const QGraphicsSceneContextMenuEvent &);
+};
+
+class QGraphicsSceneHoverEvent : QGraphicsSceneEvent /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qgraphicssceneevent.h>
+%End
+
+public:
+    virtual ~QGraphicsSceneHoverEvent();
+    QPointF pos() const;
+    QPointF scenePos() const;
+    QPoint screenPos() const;
+    QPointF lastPos() const;
+    QPointF lastScenePos() const;
+    QPoint lastScreenPos() const;
+    Qt::KeyboardModifiers modifiers() const;
+
+private:
+    QGraphicsSceneHoverEvent(const QGraphicsSceneHoverEvent &);
+};
+
+class QGraphicsSceneHelpEvent : QGraphicsSceneEvent /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qgraphicssceneevent.h>
+%End
+
+public:
+    virtual ~QGraphicsSceneHelpEvent();
+    QPointF scenePos() const;
+    QPoint screenPos() const;
+
+private:
+    QGraphicsSceneHelpEvent(const QGraphicsSceneHelpEvent &);
+};
+
+class QGraphicsSceneDragDropEvent : QGraphicsSceneEvent /NoDefaultCtors/
+{
+%TypeHeaderCode
+#include <qgraphicssceneevent.h>
+%End
+
+public:
+    virtual ~QGraphicsSceneDragDropEvent();
+    QPointF pos() const;
+    QPointF scenePos() const;
+    QPoint screenPos() const;
+    Qt::MouseButtons buttons() const;
+    Qt::KeyboardModifiers modifiers() const;
+    Qt::DropActions possibleActions() const;
+    Qt::DropAction proposedAction() const;
+    void acceptProposedAction();
+    Qt::DropAction dropAction() const;
+    void setDropAction(Qt::DropAction action);
+    QWidget *source() const;
+    const QMimeData *mimeData() const;
+
+private:
+    QGraphicsSceneDragDropEvent(const QGraphicsSceneDragDropEvent &);
+};
+
+class QGraphicsSceneResizeEvent : QGraphicsSceneEvent
+{
+%TypeHeaderCode
+#include <qgraphicssceneevent.h>
+%End
+
+public:
+    QGraphicsSceneResizeEvent();
+    virtual ~QGraphicsSceneResizeEvent();
+    QSizeF oldSize() const;
+    QSizeF newSize() const;
+
+private:
+    QGraphicsSceneResizeEvent(const QGraphicsSceneResizeEvent &);
+};
+
+class QGraphicsSceneMoveEvent : QGraphicsSceneEvent
+{
+%TypeHeaderCode
+#include <qgraphicssceneevent.h>
+%End
+
+public:
+    QGraphicsSceneMoveEvent();
+    virtual ~QGraphicsSceneMoveEvent();
+    QPointF oldPos() const;
+    QPointF newPos() const;
+
+private:
+    QGraphicsSceneMoveEvent(const QGraphicsSceneMoveEvent &);
+};
diff --git a/sip/QtWidgets/qgraphicstransform.sip b/sip/QtWidgets/qgraphicstransform.sip
new file mode 100644
index 0000000..16b6116
--- /dev/null
+++ b/sip/QtWidgets/qgraphicstransform.sip
@@ -0,0 +1,87 @@
+// qgraphicstransform.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsTransform : QObject
+{
+%TypeHeaderCode
+#include <qgraphicstransform.h>
+%End
+
+public:
+    QGraphicsTransform(QObject *parent /TransferThis/ = 0);
+    virtual ~QGraphicsTransform();
+    virtual void applyTo(QMatrix4x4 *matrix) const = 0;
+
+protected slots:
+    void update();
+};
+
+class QGraphicsScale : QGraphicsTransform
+{
+%TypeHeaderCode
+#include <qgraphicstransform.h>
+%End
+
+public:
+    QGraphicsScale(QObject *parent /TransferThis/ = 0);
+    virtual ~QGraphicsScale();
+    QVector3D origin() const;
+    void setOrigin(const QVector3D &point);
+    qreal xScale() const;
+    void setXScale(qreal);
+    qreal yScale() const;
+    void setYScale(qreal);
+    qreal zScale() const;
+    void setZScale(qreal);
+    virtual void applyTo(QMatrix4x4 *matrix) const;
+
+signals:
+    void originChanged();
+    void scaleChanged();
+    void xScaleChanged();
+    void yScaleChanged();
+    void zScaleChanged();
+};
+
+class QGraphicsRotation : QGraphicsTransform
+{
+%TypeHeaderCode
+#include <qgraphicstransform.h>
+%End
+
+public:
+    QGraphicsRotation(QObject *parent /TransferThis/ = 0);
+    virtual ~QGraphicsRotation();
+    QVector3D origin() const;
+    void setOrigin(const QVector3D &point);
+    qreal angle() const;
+    void setAngle(qreal);
+    QVector3D axis() const;
+    void setAxis(const QVector3D &axis);
+    void setAxis(Qt::Axis axis);
+    virtual void applyTo(QMatrix4x4 *matrix) const;
+
+signals:
+    void originChanged();
+    void angleChanged();
+    void axisChanged();
+};
diff --git a/sip/QtWidgets/qgraphicsview.sip b/sip/QtWidgets/qgraphicsview.sip
new file mode 100644
index 0000000..7b6bef6
--- /dev/null
+++ b/sip/QtWidgets/qgraphicsview.sip
@@ -0,0 +1,201 @@
+// qgraphicsview.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qgraphicsview.h>
+%End
+
+class QGraphicsView : QAbstractScrollArea
+{
+%TypeHeaderCode
+#include <qgraphicsview.h>
+%End
+
+public:
+    enum CacheModeFlag
+    {
+        CacheNone,
+        CacheBackground,
+    };
+
+    typedef QFlags<QGraphicsView::CacheModeFlag> CacheMode;
+
+    enum DragMode
+    {
+        NoDrag,
+        ScrollHandDrag,
+        RubberBandDrag,
+    };
+
+    enum ViewportAnchor
+    {
+        NoAnchor,
+        AnchorViewCenter,
+        AnchorUnderMouse,
+    };
+
+    QGraphicsView(QWidget *parent /TransferThis/ = 0);
+    QGraphicsView(QGraphicsScene *scene /KeepReference/, QWidget *parent /TransferThis/ = 0);
+    virtual ~QGraphicsView();
+    virtual QSize sizeHint() const;
+    QFlags<QPainter::RenderHint> renderHints() const;
+    void setRenderHint(QPainter::RenderHint hint, bool on = true);
+    void setRenderHints(QFlags<QPainter::RenderHint> hints);
+    Qt::Alignment alignment() const;
+    void setAlignment(Qt::Alignment alignment);
+    QGraphicsView::ViewportAnchor transformationAnchor() const;
+    void setTransformationAnchor(QGraphicsView::ViewportAnchor anchor);
+    QGraphicsView::ViewportAnchor resizeAnchor() const;
+    void setResizeAnchor(QGraphicsView::ViewportAnchor anchor);
+    QGraphicsView::DragMode dragMode() const;
+    void setDragMode(QGraphicsView::DragMode mode);
+    QFlags<QGraphicsView::CacheModeFlag> cacheMode() const;
+    void setCacheMode(QFlags<QGraphicsView::CacheModeFlag> mode);
+    void resetCachedContent();
+    bool isInteractive() const;
+    void setInteractive(bool allowed);
+    QGraphicsScene *scene() const;
+    void setScene(QGraphicsScene *scene /KeepReference/);
+    QRectF sceneRect() const;
+    void setSceneRect(const QRectF &rect);
+    void rotate(qreal angle);
+    void scale(qreal sx, qreal sy);
+    void shear(qreal sh, qreal sv);
+    void translate(qreal dx, qreal dy);
+    void centerOn(const QPointF &pos);
+    void centerOn(const QGraphicsItem *item);
+    void ensureVisible(const QRectF &rect, int xMargin = 50, int yMargin = 50);
+    void ensureVisible(const QGraphicsItem *item, int xMargin = 50, int yMargin = 50);
+    void fitInView(const QRectF &rect, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio);
+    void fitInView(const QGraphicsItem *item, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio);
+    void render(QPainter *painter, const QRectF &target = QRectF(), const QRect &source = QRect(), Qt::AspectRatioMode mode = Qt::KeepAspectRatio);
+    QList<QGraphicsItem*> items() const;
+    QList<QGraphicsItem*> items(const QPoint &pos) const;
+    QList<QGraphicsItem*> items(int ax, int ay) const;
+    QList<QGraphicsItem*> items(int x, int y, int w, int h, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
+    QList<QGraphicsItem*> items(const QRect &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
+    QList<QGraphicsItem*> items(const QPolygon &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
+    QList<QGraphicsItem*> items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
+    QGraphicsItem *itemAt(const QPoint &pos) const;
+    QPointF mapToScene(const QPoint &point) const;
+    QPolygonF mapToScene(const QRect &rect) const;
+    QPolygonF mapToScene(const QPolygon &polygon) const;
+    QPainterPath mapToScene(const QPainterPath &path) const;
+    QPoint mapFromScene(const QPointF &point) const;
+    QPolygon mapFromScene(const QRectF &rect) const;
+    QPolygon mapFromScene(const QPolygonF &polygon) const;
+    QPainterPath mapFromScene(const QPainterPath &path) const;
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
+    QBrush backgroundBrush() const;
+    void setBackgroundBrush(const QBrush &brush);
+    QBrush foregroundBrush() const;
+    void setForegroundBrush(const QBrush &brush);
+
+public slots:
+    void invalidateScene(const QRectF &rect = QRectF(), QFlags<QGraphicsScene::SceneLayer> layers = QGraphicsScene::AllLayers);
+    void updateScene(const QList<QRectF> &rects);
+    void updateSceneRect(const QRectF &rect);
+
+protected slots:
+    virtual void setupViewport(QWidget *widget);
+
+protected:
+    virtual bool event(QEvent *event);
+    virtual bool viewportEvent(QEvent *event);
+    virtual void contextMenuEvent(QContextMenuEvent *event);
+    virtual void dragEnterEvent(QDragEnterEvent *event);
+    virtual void dragLeaveEvent(QDragLeaveEvent *event);
+    virtual void dragMoveEvent(QDragMoveEvent *event);
+    virtual void dropEvent(QDropEvent *event);
+    virtual void focusInEvent(QFocusEvent *event);
+    virtual void focusOutEvent(QFocusEvent *event);
+    virtual bool focusNextPrevChild(bool next);
+    virtual void keyPressEvent(QKeyEvent *event);
+    virtual void keyReleaseEvent(QKeyEvent *event);
+    virtual void mouseDoubleClickEvent(QMouseEvent *event);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
+    virtual void wheelEvent(QWheelEvent *event);
+    virtual void paintEvent(QPaintEvent *event);
+    virtual void resizeEvent(QResizeEvent *event);
+    virtual void scrollContentsBy(int dx, int dy);
+    virtual void showEvent(QShowEvent *event);
+    virtual void inputMethodEvent(QInputMethodEvent *event);
+    virtual void drawBackground(QPainter *painter, const QRectF &rect);
+    virtual void drawForeground(QPainter *painter, const QRectF &rect);
+
+public:
+    void setSceneRect(qreal ax, qreal ay, qreal aw, qreal ah);
+    void centerOn(qreal ax, qreal ay);
+    void ensureVisible(qreal x, qreal y, qreal w, qreal h, int xMargin = 50, int yMargin = 50);
+    void fitInView(qreal x, qreal y, qreal w, qreal h, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio);
+    QGraphicsItem *itemAt(int ax, int ay) const;
+    QPointF mapToScene(int ax, int ay) const;
+    QPolygonF mapToScene(int ax, int ay, int w, int h) const;
+    QPoint mapFromScene(qreal ax, qreal ay) const;
+    QPolygon mapFromScene(qreal ax, qreal ay, qreal w, qreal h) const;
+
+    enum ViewportUpdateMode
+    {
+        FullViewportUpdate,
+        MinimalViewportUpdate,
+        SmartViewportUpdate,
+        BoundingRectViewportUpdate,
+        NoViewportUpdate,
+    };
+
+    enum OptimizationFlag
+    {
+        DontClipPainter,
+        DontSavePainterState,
+        DontAdjustForAntialiasing,
+    };
+
+    typedef QFlags<QGraphicsView::OptimizationFlag> OptimizationFlags;
+    QGraphicsView::ViewportUpdateMode viewportUpdateMode() const;
+    void setViewportUpdateMode(QGraphicsView::ViewportUpdateMode mode);
+    QFlags<QGraphicsView::OptimizationFlag> optimizationFlags() const;
+    void setOptimizationFlag(QGraphicsView::OptimizationFlag flag, bool enabled = true);
+    void setOptimizationFlags(QFlags<QGraphicsView::OptimizationFlag> flags);
+    Qt::ItemSelectionMode rubberBandSelectionMode() const;
+    void setRubberBandSelectionMode(Qt::ItemSelectionMode mode);
+    QTransform transform() const;
+    QTransform viewportTransform() const;
+    void setTransform(const QTransform &matrix, bool combine = false);
+    void resetTransform();
+    bool isTransformed() const;
+%If (Qt_5_1_0 -)
+    QRect rubberBandRect() const;
+%End
+
+signals:
+%If (Qt_5_1_0 -)
+    void rubberBandChanged(QRect viewportRect, QPointF fromScenePoint, QPointF toScenePoint);
+%End
+
+private:
+    QGraphicsView(const QGraphicsView &);
+};
+
+QFlags<QGraphicsView::CacheModeFlag> operator|(QGraphicsView::CacheModeFlag f1, QFlags<QGraphicsView::CacheModeFlag> f2);
+QFlags<QGraphicsView::OptimizationFlag> operator|(QGraphicsView::OptimizationFlag f1, QFlags<QGraphicsView::OptimizationFlag> f2);
diff --git a/sip/QtWidgets/qgraphicswidget.sip b/sip/QtWidgets/qgraphicswidget.sip
new file mode 100644
index 0000000..bd01d17
--- /dev/null
+++ b/sip/QtWidgets/qgraphicswidget.sip
@@ -0,0 +1,123 @@
+// qgraphicswidget.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGraphicsWidget : QGraphicsObject, QGraphicsLayoutItem
+{
+%TypeHeaderCode
+#include <qgraphicswidget.h>
+%End
+
+public:
+    QGraphicsWidget(QGraphicsItem *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QGraphicsWidget();
+    QGraphicsLayout *layout() const;
+    void setLayout(QGraphicsLayout *layout /Transfer/);
+    void adjustSize();
+    Qt::LayoutDirection layoutDirection() const;
+    void setLayoutDirection(Qt::LayoutDirection direction);
+    void unsetLayoutDirection();
+    QStyle *style() const;
+    void setStyle(QStyle *style /KeepReference/);
+    QFont font() const;
+    void setFont(const QFont &font);
+    QPalette palette() const;
+    void setPalette(const QPalette &palette);
+    void resize(const QSizeF &size);
+    void resize(qreal w, qreal h);
+    QSizeF size() const;
+    virtual void setGeometry(const QRectF &rect);
+    QRectF rect() const;
+    void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom);
+    virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const;
+    void setWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom);
+    void getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const;
+    void unsetWindowFrameMargins();
+    QRectF windowFrameGeometry() const;
+    QRectF windowFrameRect() const;
+    Qt::WindowFlags windowFlags() const;
+    Qt::WindowType windowType() const;
+    void setWindowFlags(Qt::WindowFlags wFlags);
+    bool isActiveWindow() const;
+    void setWindowTitle(const QString &title);
+    QString windowTitle() const;
+    Qt::FocusPolicy focusPolicy() const;
+    void setFocusPolicy(Qt::FocusPolicy policy);
+    static void setTabOrder(QGraphicsWidget *first, QGraphicsWidget *second);
+    QGraphicsWidget *focusWidget() const;
+    int grabShortcut(const QKeySequence &sequence, Qt::ShortcutContext context = Qt::WindowShortcut);
+    void releaseShortcut(int id);
+    void setShortcutEnabled(int id, bool enabled = true);
+    void setShortcutAutoRepeat(int id, bool enabled = true);
+    void addAction(QAction *action);
+    void addActions(QList<QAction*> actions);
+    void insertAction(QAction *before, QAction *action);
+    void insertActions(QAction *before, QList<QAction*> actions);
+    void removeAction(QAction *action);
+    QList<QAction*> actions() const;
+    void setAttribute(Qt::WidgetAttribute attribute, bool on = true);
+    bool testAttribute(Qt::WidgetAttribute attribute) const;
+    virtual int type() const;
+    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual void paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+    virtual QRectF boundingRect() const;
+    virtual QPainterPath shape() const;
+    void setGeometry(qreal ax, qreal ay, qreal aw, qreal ah);
+
+public slots:
+    bool close();
+
+protected:
+    virtual void initStyleOption(QStyleOption *option) const;
+    virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+    virtual void updateGeometry();
+    virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value);
+    virtual bool sceneEvent(QEvent *event);
+    virtual bool windowFrameEvent(QEvent *e);
+    virtual Qt::WindowFrameSection windowFrameSectionAt(const QPointF &pos) const;
+    virtual bool event(QEvent *event);
+    virtual void changeEvent(QEvent *event);
+    virtual void closeEvent(QCloseEvent *event);
+    virtual void focusInEvent(QFocusEvent *event);
+    virtual bool focusNextPrevChild(bool next);
+    virtual void focusOutEvent(QFocusEvent *event);
+    virtual void hideEvent(QHideEvent *event);
+    virtual void moveEvent(QGraphicsSceneMoveEvent *event);
+    virtual void polishEvent();
+    virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
+    virtual void showEvent(QShowEvent *event);
+    virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
+    virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+    virtual void grabMouseEvent(QEvent *event);
+    virtual void ungrabMouseEvent(QEvent *event);
+    virtual void grabKeyboardEvent(QEvent *event);
+    virtual void ungrabKeyboardEvent(QEvent *event);
+
+public:
+    bool autoFillBackground() const;
+    void setAutoFillBackground(bool enabled);
+
+signals:
+    void geometryChanged();
+
+private:
+    QGraphicsWidget(const QGraphicsWidget &);
+};
diff --git a/sip/QtWidgets/qgridlayout.sip b/sip/QtWidgets/qgridlayout.sip
new file mode 100644
index 0000000..1d16bc0
--- /dev/null
+++ b/sip/QtWidgets/qgridlayout.sip
@@ -0,0 +1,148 @@
+// qgridlayout.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGridLayout : QLayout
+{
+%TypeHeaderCode
+#include <qgridlayout.h>
+%End
+
+public:
+    explicit QGridLayout(QWidget *parent /TransferThis/);
+    QGridLayout();
+    virtual ~QGridLayout();
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSize() const;
+    virtual QSize maximumSize() const;
+    void setRowStretch(int row, int stretch);
+    void setColumnStretch(int column, int stretch);
+    int rowStretch(int row) const;
+    int columnStretch(int column) const;
+    void setRowMinimumHeight(int row, int minSize);
+    void setColumnMinimumWidth(int column, int minSize);
+    int rowMinimumHeight(int row) const;
+    int columnMinimumWidth(int column) const;
+    int columnCount() const;
+    int rowCount() const;
+    QRect cellRect(int row, int column) const;
+    virtual bool hasHeightForWidth() const;
+    virtual int heightForWidth(int) const;
+    virtual int minimumHeightForWidth(int) const;
+    virtual Qt::Orientations expandingDirections() const;
+    virtual void invalidate();
+    void addWidget(QWidget *w /GetWrapper/);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->addWidget(a0);
+        Py_END_ALLOW_THREADS
+        
+        // The layout's parent widget (if there is one) will now have ownership.
+        QWidget *parent = sipCpp->parentWidget();
+        
+        if (parent)
+        {
+            PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget);
+        
+            if (py_parent)
+                sipTransferTo(a0Wrapper, py_parent);
+        }
+        else
+        {
+            // For now give the Python ownership to the layout.  This maintains
+            // compatibility with previous versions and allows addWidget(QWidget()).
+            sipTransferTo(a0Wrapper, sipSelf);
+        }
+%End
+
+    void addWidget(QWidget * /GetWrapper/, int row, int column, Qt::Alignment alignment = 0);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->addWidget(a0, a1, a2, *a3);
+        Py_END_ALLOW_THREADS
+        
+        // The layout's parent widget (if there is one) will now have ownership.
+        QWidget *parent = sipCpp->parentWidget();
+        
+        if (parent)
+        {
+            PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget);
+        
+            if (py_parent)
+                sipTransferTo(a0Wrapper, py_parent);
+        }
+        else
+        {
+            // For now give the Python ownership to the layout.  This maintains
+            // compatibility with previous versions and allows addWidget(QWidget()).
+            sipTransferTo(a0Wrapper, sipSelf);
+        }
+%End
+
+    void addWidget(QWidget * /GetWrapper/, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = 0);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->addWidget(a0, a1, a2, a3, a4, *a5);
+        Py_END_ALLOW_THREADS
+        
+        // The layout's parent widget (if there is one) will now have ownership.
+        QWidget *parent = sipCpp->parentWidget();
+        
+        if (parent)
+        {
+            PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget);
+        
+            if (py_parent)
+                sipTransferTo(a0Wrapper, py_parent);
+        }
+        else
+        {
+            // For now give the Python ownership to the layout.  This maintains
+            // compatibility with previous versions and allows addWidget(QWidget()).
+            sipTransferTo(a0Wrapper, sipSelf);
+        }
+%End
+
+    void addLayout(QLayout * /Transfer/, int row, int column, Qt::Alignment alignment = 0);
+    void addLayout(QLayout * /Transfer/, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = 0);
+    void setOriginCorner(Qt::Corner);
+    Qt::Corner originCorner() const;
+    virtual QLayoutItem *itemAt(int) const;
+    virtual QLayoutItem *takeAt(int) /TransferBack/;
+    virtual int count() const;
+    virtual void setGeometry(const QRect &);
+    void addItem(QLayoutItem *item /Transfer/, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = 0);
+    void setDefaultPositioning(int n, Qt::Orientation orient);
+    void getItemPosition(int idx, int *row, int *column, int *rowSpan, int *columnSpan) const;
+    void setHorizontalSpacing(int spacing);
+    int horizontalSpacing() const;
+    void setVerticalSpacing(int spacing);
+    int verticalSpacing() const;
+    void setSpacing(int spacing);
+    int spacing() const;
+    QLayoutItem *itemAtPosition(int row, int column) const;
+
+protected:
+    virtual void addItem(QLayoutItem * /Transfer/);
+
+private:
+    QGridLayout(const QGridLayout &);
+};
diff --git a/sip/QtWidgets/qgroupbox.sip b/sip/QtWidgets/qgroupbox.sip
new file mode 100644
index 0000000..373c4bb
--- /dev/null
+++ b/sip/QtWidgets/qgroupbox.sip
@@ -0,0 +1,65 @@
+// qgroupbox.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QGroupBox : QWidget
+{
+%TypeHeaderCode
+#include <qgroupbox.h>
+%End
+
+public:
+    explicit QGroupBox(QWidget *parent /TransferThis/ = 0);
+    QGroupBox(const QString &title, QWidget *parent /TransferThis/ = 0);
+    virtual ~QGroupBox();
+    QString title() const;
+    void setTitle(const QString &);
+    Qt::Alignment alignment() const;
+    void setAlignment(int);
+    virtual QSize minimumSizeHint() const;
+    bool isFlat() const;
+    void setFlat(bool b);
+    bool isCheckable() const;
+    void setCheckable(bool b);
+    bool isChecked() const;
+
+public slots:
+    void setChecked(bool b);
+
+signals:
+    void clicked(bool checked = false);
+    void toggled(bool);
+
+protected:
+    void initStyleOption(QStyleOptionGroupBox *option) const;
+    virtual bool event(QEvent *);
+    virtual void childEvent(QChildEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void focusInEvent(QFocusEvent *);
+    virtual void changeEvent(QEvent *);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
+
+private:
+    QGroupBox(const QGroupBox &);
+};
diff --git a/sip/QtWidgets/qheaderview.sip b/sip/QtWidgets/qheaderview.sip
new file mode 100644
index 0000000..46a6e37
--- /dev/null
+++ b/sip/QtWidgets/qheaderview.sip
@@ -0,0 +1,177 @@
+// qheaderview.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QHeaderView : QAbstractItemView
+{
+%TypeHeaderCode
+#include <qheaderview.h>
+%End
+
+public:
+    enum ResizeMode
+    {
+        Interactive,
+        Fixed,
+        Stretch,
+        ResizeToContents,
+        Custom,
+    };
+
+    QHeaderView(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0);
+    virtual ~QHeaderView();
+    virtual void setModel(QAbstractItemModel *model /KeepReference/);
+    Qt::Orientation orientation() const;
+    int offset() const;
+    int length() const;
+    virtual QSize sizeHint() const;
+    int sectionSizeHint(int logicalIndex) const;
+    int visualIndexAt(int position) const;
+    int logicalIndexAt(int position) const;
+    int sectionSize(int logicalIndex) const;
+    int sectionPosition(int logicalIndex) const;
+    int sectionViewportPosition(int logicalIndex) const;
+    void moveSection(int from, int to);
+    void resizeSection(int logicalIndex, int size);
+    bool isSectionHidden(int logicalIndex) const;
+    void setSectionHidden(int logicalIndex, bool hide);
+    int count() const /__len__/;
+    int visualIndex(int logicalIndex) const;
+    int logicalIndex(int visualIndex) const;
+    void setHighlightSections(bool highlight);
+    bool highlightSections() const;
+    int stretchSectionCount() const;
+    void setSortIndicatorShown(bool show);
+    bool isSortIndicatorShown() const;
+    void setSortIndicator(int logicalIndex, Qt::SortOrder order);
+    int sortIndicatorSection() const;
+    Qt::SortOrder sortIndicatorOrder() const;
+    bool stretchLastSection() const;
+    void setStretchLastSection(bool stretch);
+    bool sectionsMoved() const;
+
+public slots:
+    void setOffset(int offset);
+    void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast);
+    void setOffsetToSectionPosition(int visualIndex);
+
+signals:
+    void geometriesChanged();
+    void sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex);
+    void sectionResized(int logicalIndex, int oldSize, int newSize);
+    void sectionPressed(int logicalIndex);
+    void sectionClicked(int logicalIndex);
+    void sectionDoubleClicked(int logicalIndex);
+    void sectionCountChanged(int oldCount, int newCount);
+    void sectionHandleDoubleClicked(int logicalIndex);
+
+protected slots:
+    void updateSection(int logicalIndex);
+    void resizeSections();
+    void sectionsInserted(const QModelIndex &parent, int logicalFirst, int logicalLast);
+    void sectionsAboutToBeRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast);
+
+protected:
+    void initialize();
+    void initializeSections();
+    void initializeSections(int start, int end);
+    virtual void currentChanged(const QModelIndex &current, const QModelIndex &old);
+    virtual bool event(QEvent *e);
+    virtual bool viewportEvent(QEvent *e);
+    virtual void paintEvent(QPaintEvent *e);
+    virtual void mousePressEvent(QMouseEvent *e);
+    virtual void mouseMoveEvent(QMouseEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *e);
+    virtual void mouseDoubleClickEvent(QMouseEvent *e);
+    virtual void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const;
+    virtual QSize sectionSizeFromContents(int logicalIndex) const;
+    virtual int horizontalOffset() const;
+    virtual int verticalOffset() const;
+    virtual void updateGeometries();
+    virtual void scrollContentsBy(int dx, int dy);
+    virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles /DocValue="[]"/ = QVector<int>());
+    virtual void rowsInserted(const QModelIndex &parent, int start, int end);
+    virtual QRect visualRect(const QModelIndex &index) const;
+    virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint);
+    virtual QModelIndex indexAt(const QPoint &p) const;
+    virtual bool isIndexHidden(const QModelIndex &index) const;
+    virtual QModelIndex moveCursor(QAbstractItemView::CursorAction, Qt::KeyboardModifiers);
+    virtual void setSelection(const QRect &, QFlags<QItemSelectionModel::SelectionFlag>);
+    virtual QRegion visualRegionForSelection(const QItemSelection &selection) const;
+
+public:
+    int logicalIndexAt(int ax, int ay) const;
+    int logicalIndexAt(const QPoint &apos) const;
+    void hideSection(int alogicalIndex);
+    void showSection(int alogicalIndex);
+    void resizeSections(QHeaderView::ResizeMode mode);
+    int hiddenSectionCount() const;
+    int defaultSectionSize() const;
+    void setDefaultSectionSize(int size);
+    Qt::Alignment defaultAlignment() const;
+    void setDefaultAlignment(Qt::Alignment alignment);
+    bool sectionsHidden() const;
+    void swapSections(int first, int second);
+    bool cascadingSectionResizes() const;
+    void setCascadingSectionResizes(bool enable);
+    int minimumSectionSize() const;
+    void setMinimumSectionSize(int size);
+    QByteArray saveState() const;
+    bool restoreState(const QByteArray &state);
+    virtual void reset();
+
+public slots:
+    void setOffsetToLastSection();
+
+signals:
+    void sectionEntered(int logicalIndex);
+    void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order);
+
+protected:
+    void initStyleOption(QStyleOptionHeader *option) const;
+
+public:
+    void setSectionsMovable(bool movable);
+    bool sectionsMovable() const;
+    void setSectionsClickable(bool clickable);
+    bool sectionsClickable() const;
+    QHeaderView::ResizeMode sectionResizeMode(int logicalIndex) const;
+    void setSectionResizeMode(int logicalIndex, QHeaderView::ResizeMode mode);
+    void setSectionResizeMode(QHeaderView::ResizeMode mode);
+%If (Qt_5_2_0 -)
+    virtual void setVisible(bool v);
+%End
+%If (Qt_5_2_0 -)
+    void setResizeContentsPrecision(int precision);
+%End
+%If (Qt_5_2_0 -)
+    int resizeContentsPrecision() const;
+%End
+%If (Qt_5_2_0 -)
+    int maximumSectionSize() const;
+%End
+%If (Qt_5_2_0 -)
+    void setMaximumSectionSize(int size);
+%End
+
+private:
+    QHeaderView(const QHeaderView &);
+};
diff --git a/sip/QtWidgets/qinputdialog.sip b/sip/QtWidgets/qinputdialog.sip
new file mode 100644
index 0000000..098a941
--- /dev/null
+++ b/sip/QtWidgets/qinputdialog.sip
@@ -0,0 +1,134 @@
+// qinputdialog.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qinputdialog.h>
+%End
+
+class QInputDialog : QDialog
+{
+%TypeHeaderCode
+#include <qinputdialog.h>
+%End
+
+public:
+    enum InputDialogOption
+    {
+        NoButtons,
+        UseListViewForComboBoxItems,
+%If (Qt_5_2_0 -)
+        UsePlainTextEditForTextInput,
+%End
+    };
+
+    typedef QFlags<QInputDialog::InputDialogOption> InputDialogOptions;
+
+    enum InputMode
+    {
+        TextInput,
+        IntInput,
+        DoubleInput,
+    };
+
+    static QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode echo = QLineEdit::Normal, const QString &text = QString(), bool *ok = 0, Qt::WindowFlags flags = 0, Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
+    static int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = 0, Qt::WindowFlags flags = 0);
+    static double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = 0, Qt::WindowFlags flags = 0) /ReleaseGIL/;
+    static QString getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = 0, Qt::WindowFlags flags = 0, Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
+%If (Qt_5_2_0 -)
+    static QString getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text /DocValue="''"/ = QString(), bool *ok = 0, Qt::WindowFlags flags = 0, Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
+%End
+    QInputDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+
+private:
+    QInputDialog(const QInputDialog &);
+
+public:
+    virtual ~QInputDialog();
+    void setInputMode(QInputDialog::InputMode mode);
+    QInputDialog::InputMode inputMode() const;
+    void setLabelText(const QString &text);
+    QString labelText() const;
+    void setOption(QInputDialog::InputDialogOption option, bool on = true);
+    bool testOption(QInputDialog::InputDialogOption option) const;
+    void setOptions(QFlags<QInputDialog::InputDialogOption> options);
+    QFlags<QInputDialog::InputDialogOption> options() const;
+    void setTextValue(const QString &text);
+    QString textValue() const;
+    void setTextEchoMode(QLineEdit::EchoMode mode);
+    QLineEdit::EchoMode textEchoMode() const;
+    void setComboBoxEditable(bool editable);
+    bool isComboBoxEditable() const;
+    void setComboBoxItems(const QStringList &items);
+    QStringList comboBoxItems() const;
+    void setIntValue(int value);
+    int intValue() const;
+    void setIntMinimum(int min);
+    int intMinimum() const;
+    void setIntMaximum(int max);
+    int intMaximum() const;
+    void setIntRange(int min, int max);
+    void setIntStep(int step);
+    int intStep() const;
+    void setDoubleValue(double value);
+    double doubleValue() const;
+    void setDoubleMinimum(double min);
+    double doubleMinimum() const;
+    void setDoubleMaximum(double max);
+    double doubleMaximum() const;
+    void setDoubleRange(double min, double max);
+    void setDoubleDecimals(int decimals);
+    int doubleDecimals() const;
+    void setOkButtonText(const QString &text);
+    QString okButtonText() const;
+    void setCancelButtonText(const QString &text);
+    QString cancelButtonText() const;
+    virtual void open();
+    void open(SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipCpp->open(receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    virtual QSize minimumSizeHint() const;
+    virtual QSize sizeHint() const;
+    virtual void setVisible(bool visible);
+    virtual void done(int result);
+
+signals:
+    void textValueChanged(const QString &text);
+    void textValueSelected(const QString &text);
+    void intValueChanged(int value);
+    void intValueSelected(int value);
+    void doubleValueChanged(double value);
+    void doubleValueSelected(double value);
+};
+
+QFlags<QInputDialog::InputDialogOption> operator|(QInputDialog::InputDialogOption f1, QFlags<QInputDialog::InputDialogOption> f2);
diff --git a/sip/QtWidgets/qitemdelegate.sip b/sip/QtWidgets/qitemdelegate.sip
new file mode 100644
index 0000000..2cf0f99
--- /dev/null
+++ b/sip/QtWidgets/qitemdelegate.sip
@@ -0,0 +1,54 @@
+// qitemdelegate.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QItemDelegate : QAbstractItemDelegate
+{
+%TypeHeaderCode
+#include <qitemdelegate.h>
+%End
+
+public:
+    explicit QItemDelegate(QObject *parent /TransferThis/ = 0);
+    virtual ~QItemDelegate();
+    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const;
+    virtual QSize sizeHint(const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const;
+    virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/;
+    virtual void setEditorData(QWidget *editor, const QModelIndex &index) const;
+    virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const;
+    virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const;
+    QItemEditorFactory *itemEditorFactory() const;
+    void setItemEditorFactory(QItemEditorFactory *factory /KeepReference/);
+    bool hasClipping() const;
+    void setClipping(bool clip);
+
+protected:
+    void drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+    virtual void drawCheck(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect, Qt::CheckState state) const;
+    virtual void drawDecoration(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect, const QPixmap &pixmap) const;
+    virtual void drawDisplay(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect, const QString &text) const;
+    virtual void drawFocus(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QRect &rect) const;
+    virtual bool eventFilter(QObject *object, QEvent *event);
+    virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index);
+
+private:
+    QItemDelegate(const QItemDelegate &);
+};
diff --git a/sip/QtWidgets/qitemeditorfactory.sip b/sip/QtWidgets/qitemeditorfactory.sip
new file mode 100644
index 0000000..682d6c5
--- /dev/null
+++ b/sip/QtWidgets/qitemeditorfactory.sip
@@ -0,0 +1,49 @@
+// qitemeditorfactory.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QItemEditorCreatorBase /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qitemeditorfactory.h>
+%End
+
+public:
+    virtual ~QItemEditorCreatorBase();
+    virtual QWidget *createWidget(QWidget *parent /TransferThis/) const = 0 /Factory/;
+    virtual QByteArray valuePropertyName() const = 0;
+};
+
+class QItemEditorFactory /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qitemeditorfactory.h>
+%End
+
+public:
+    QItemEditorFactory();
+    virtual ~QItemEditorFactory();
+    virtual QWidget *createEditor(int userType, QWidget *parent /TransferThis/) const;
+    virtual QByteArray valuePropertyName(int userType) const;
+    void registerEditor(int userType, QItemEditorCreatorBase *creator /Transfer/);
+    static const QItemEditorFactory *defaultFactory();
+    static void setDefaultFactory(QItemEditorFactory *factory /Transfer/);
+};
diff --git a/sip/QtWidgets/qkeyeventtransition.sip b/sip/QtWidgets/qkeyeventtransition.sip
new file mode 100644
index 0000000..b825139
--- /dev/null
+++ b/sip/QtWidgets/qkeyeventtransition.sip
@@ -0,0 +1,44 @@
+// qkeyeventtransition.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QKeyEventTransition : QEventTransition
+{
+%TypeHeaderCode
+#include <qkeyeventtransition.h>
+%End
+
+public:
+    QKeyEventTransition(QState *sourceState /TransferThis/ = 0);
+    QKeyEventTransition(QObject *object /KeepReference=10/, QEvent::Type type, int key, QState *sourceState /TransferThis/ = 0);
+    virtual ~QKeyEventTransition();
+    int key() const;
+    void setKey(int key);
+    Qt::KeyboardModifiers modifierMask() const;
+    void setModifierMask(Qt::KeyboardModifiers modifiers);
+
+protected:
+    virtual void onTransition(QEvent *event);
+    virtual bool eventTest(QEvent *event);
+
+private:
+    QKeyEventTransition(const QKeyEventTransition &);
+};
diff --git a/sip/QtWidgets/qkeysequenceedit.sip b/sip/QtWidgets/qkeysequenceedit.sip
new file mode 100644
index 0000000..08b3441
--- /dev/null
+++ b/sip/QtWidgets/qkeysequenceedit.sip
@@ -0,0 +1,55 @@
+// qkeysequenceedit.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QKeySequenceEdit : QWidget
+{
+%TypeHeaderCode
+#include <qkeysequenceedit.h>
+%End
+
+public:
+    explicit QKeySequenceEdit(QWidget *parent /TransferThis/ = 0);
+    QKeySequenceEdit(const QKeySequence &keySequence, QWidget *parent /TransferThis/ = 0);
+    virtual ~QKeySequenceEdit();
+    QKeySequence keySequence() const;
+
+public slots:
+    void setKeySequence(const QKeySequence &keySequence);
+    void clear();
+
+signals:
+    void editingFinished();
+    void keySequenceChanged(const QKeySequence &keySequence);
+
+protected:
+    virtual bool event(QEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void keyReleaseEvent(QKeyEvent *);
+    virtual void timerEvent(QTimerEvent *);
+
+private:
+    QKeySequenceEdit(const QKeySequenceEdit &);
+};
+
+%End
diff --git a/sip/QtWidgets/qlabel.sip b/sip/QtWidgets/qlabel.sip
new file mode 100644
index 0000000..8dda1ca
--- /dev/null
+++ b/sip/QtWidgets/qlabel.sip
@@ -0,0 +1,93 @@
+// qlabel.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QLabel : QFrame
+{
+%TypeHeaderCode
+#include <qlabel.h>
+%End
+
+public:
+    QLabel(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    QLabel(const QString &text, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QLabel();
+    QString text() const;
+    const QPixmap *pixmap() const;
+    const QPicture *picture() const;
+    QMovie *movie() const;
+    Qt::TextFormat textFormat() const;
+    void setTextFormat(Qt::TextFormat);
+    Qt::Alignment alignment() const;
+    void setAlignment(Qt::Alignment);
+    void setWordWrap(bool on);
+    bool wordWrap() const;
+    int indent() const;
+    void setIndent(int);
+    int margin() const;
+    void setMargin(int);
+    bool hasScaledContents() const;
+    void setScaledContents(bool);
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    void setBuddy(QWidget * /KeepReference/);
+    QWidget *buddy() const;
+    virtual int heightForWidth(int) const;
+    bool openExternalLinks() const;
+    void setTextInteractionFlags(Qt::TextInteractionFlags flags);
+    Qt::TextInteractionFlags textInteractionFlags() const;
+    void setOpenExternalLinks(bool open);
+
+public slots:
+    void clear();
+    void setMovie(QMovie *movie /KeepReference/);
+    void setNum(double /Constrained/);
+    void setNum(int);
+    void setPicture(const QPicture &);
+    void setPixmap(const QPixmap &);
+    void setText(const QString &);
+
+signals:
+    void linkActivated(const QString &link);
+    void linkHovered(const QString &link);
+
+protected:
+    virtual bool event(QEvent *e);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void changeEvent(QEvent *);
+    virtual void keyPressEvent(QKeyEvent *ev);
+    virtual void mousePressEvent(QMouseEvent *ev);
+    virtual void mouseMoveEvent(QMouseEvent *ev);
+    virtual void mouseReleaseEvent(QMouseEvent *ev);
+    virtual void contextMenuEvent(QContextMenuEvent *ev);
+    virtual void focusInEvent(QFocusEvent *ev);
+    virtual void focusOutEvent(QFocusEvent *ev);
+    virtual bool focusNextPrevChild(bool next);
+
+public:
+    void setSelection(int, int);
+    bool hasSelectedText() const;
+    QString selectedText() const;
+    int selectionStart() const;
+
+private:
+    QLabel(const QLabel &);
+};
diff --git a/sip/QtWidgets/qlayout.sip b/sip/QtWidgets/qlayout.sip
new file mode 100644
index 0000000..667920f
--- /dev/null
+++ b/sip/QtWidgets/qlayout.sip
@@ -0,0 +1,173 @@
+// qlayout.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QLayout : QObject, QLayoutItem
+{
+%TypeHeaderCode
+#include <qlayout.h>
+%End
+
+public:
+    enum SizeConstraint
+    {
+        SetDefaultConstraint,
+        SetNoConstraint,
+        SetMinimumSize,
+        SetFixedSize,
+        SetMaximumSize,
+        SetMinAndMaxSize,
+    };
+
+    QLayout(QWidget *parent /TransferThis/);
+    QLayout();
+    virtual ~QLayout();
+    int spacing() const;
+    void setSpacing(int);
+    bool setAlignment(QWidget *w, Qt::Alignment alignment);
+    bool setAlignment(QLayout *l, Qt::Alignment alignment);
+    void setAlignment(Qt::Alignment alignment);
+    void setSizeConstraint(QLayout::SizeConstraint);
+    QLayout::SizeConstraint sizeConstraint() const;
+    void setMenuBar(QWidget *w /GetWrapper/);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->setMenuBar(a0);
+        Py_END_ALLOW_THREADS
+        
+        // The layout's parent widget (if there is one) will now have ownership.
+        QWidget *parent = sipCpp->parentWidget();
+        
+        if (a0 && parent)
+        {
+            PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget);
+        
+            if (py_parent)
+                sipTransferTo(a0Wrapper, py_parent);
+        }
+        else
+        {
+            // For now give the Python ownership to the layout.  This maintains
+            // compatibility with previous versions and allows setMenuBar(QWidget()).
+            sipTransferTo(a0Wrapper, sipSelf);
+        }
+%End
+
+    QWidget *menuBar() const;
+    QWidget *parentWidget() const;
+    virtual void invalidate();
+    virtual QRect geometry() const;
+    bool activate();
+    void update();
+    void addWidget(QWidget *w /GetWrapper/);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->addWidget(a0);
+        Py_END_ALLOW_THREADS
+        
+        // The layout's parent widget (if there is one) will now have ownership.
+        QWidget *parent = sipCpp->parentWidget();
+        
+        if (parent)
+        {
+            PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget);
+        
+            if (py_parent)
+                sipTransferTo(a0Wrapper, py_parent);
+        }
+        else
+        {
+            // For now give the Python ownership to the layout.  This maintains
+            // compatibility with previous versions and allows addWidget(QWidget()).
+            sipTransferTo(a0Wrapper, sipSelf);
+        }
+%End
+
+    virtual void addItem(QLayoutItem * /Transfer/) = 0;
+    void removeWidget(QWidget *w);
+    void removeItem(QLayoutItem * /TransferBack/);
+    virtual Qt::Orientations expandingDirections() const;
+    virtual QSize minimumSize() const;
+    virtual QSize maximumSize() const;
+    virtual void setGeometry(const QRect &);
+    virtual QLayoutItem *itemAt(int index) const = 0;
+    virtual QLayoutItem *takeAt(int index) = 0 /TransferBack/;
+    virtual int indexOf(QWidget *) const;
+    virtual int count() const = 0 /__len__/;
+    virtual bool isEmpty() const;
+    int totalHeightForWidth(int w) const;
+    QSize totalMinimumSize() const;
+    QSize totalMaximumSize() const;
+    QSize totalSizeHint() const;
+    virtual QLayout *layout();
+    void setEnabled(bool);
+    bool isEnabled() const;
+    static QSize closestAcceptableSize(const QWidget *w, const QSize &s);
+
+protected:
+    void widgetEvent(QEvent *);
+    virtual void childEvent(QChildEvent *e);
+    void addChildLayout(QLayout *l /Transfer/);
+    void addChildWidget(QWidget *w /GetWrapper/);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+        sipCpp->addChildWidget(a0);
+        #else
+        sipCpp->sipProtect_addChildWidget(a0);
+        #endif
+        Py_END_ALLOW_THREADS
+        
+        // The layout's parent widget (if there is one) will now have ownership.
+        QWidget *parent = sipCpp->parentWidget();
+        
+        if (parent)
+        {
+            PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget);
+        
+            if (py_parent)
+                sipTransferTo(a0Wrapper, py_parent);
+        }
+        else
+        {
+            // For now give the Python ownership to the layout.  This maintains
+            // compatibility with previous versions and allows
+            // addChildWidget(QWidget()).
+            sipTransferTo(a0Wrapper, sipSelf);
+        }
+%End
+
+    QRect alignmentRect(const QRect &) const;
+
+public:
+    void setContentsMargins(int left, int top, int right, int bottom);
+    void getContentsMargins(int *left, int *top, int *right, int *bottom) const;
+    QRect contentsRect() const;
+    void setContentsMargins(const QMargins &margins);
+    QMargins contentsMargins() const;
+    virtual QFlags<QSizePolicy::ControlType> controlTypes() const;
+%If (Qt_5_2_0 -)
+    QLayoutItem *replaceWidget(QWidget *from, QWidget *to /Transfer/, Qt::FindChildOptions options = Qt::FindChildrenRecursively) /TransferBack/;
+%End
+
+private:
+    QLayout(const QLayout &);
+};
diff --git a/sip/QtWidgets/qlayoutitem.sip b/sip/QtWidgets/qlayoutitem.sip
new file mode 100644
index 0000000..db9c70e
--- /dev/null
+++ b/sip/QtWidgets/qlayoutitem.sip
@@ -0,0 +1,111 @@
+// qlayoutitem.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QLayoutItem /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qlayoutitem.h>
+%End
+
+%ConvertToSubClassCode
+    if (sipCpp->widget())
+    {
+        sipType = sipType_QWidgetItem;
+    }
+    else if (sipCpp->spacerItem())
+    {
+        sipType = sipType_QSpacerItem;
+    }
+    else
+    {
+        // Cause a restart looking for a QLayout.
+        *sipCppRet = sipCpp->layout();
+        sipType = sipType_QLayout;
+    }
+%End
+
+public:
+    explicit QLayoutItem(Qt::Alignment alignment = 0);
+    virtual ~QLayoutItem();
+    virtual QSize sizeHint() const = 0;
+    virtual QSize minimumSize() const = 0;
+    virtual QSize maximumSize() const = 0;
+    virtual Qt::Orientations expandingDirections() const = 0;
+    virtual void setGeometry(const QRect &) = 0;
+    virtual QRect geometry() const = 0;
+    virtual bool isEmpty() const = 0;
+    virtual bool hasHeightForWidth() const;
+    virtual int heightForWidth(int) const;
+    virtual int minimumHeightForWidth(int) const;
+    virtual void invalidate();
+    virtual QWidget *widget();
+    virtual QLayout *layout();
+    virtual QSpacerItem *spacerItem();
+    Qt::Alignment alignment() const;
+    void setAlignment(Qt::Alignment a);
+    virtual QFlags<QSizePolicy::ControlType> controlTypes() const;
+};
+
+class QSpacerItem : QLayoutItem
+{
+%TypeHeaderCode
+#include <qlayoutitem.h>
+%End
+
+public:
+    QSpacerItem(int w, int h, QSizePolicy::Policy hPolicy = QSizePolicy::Minimum, QSizePolicy::Policy vPolicy = QSizePolicy::Minimum);
+    virtual ~QSpacerItem();
+    void changeSize(int w, int h, QSizePolicy::Policy hPolicy = QSizePolicy::Minimum, QSizePolicy::Policy vPolicy = QSizePolicy::Minimum);
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSize() const;
+    virtual QSize maximumSize() const;
+    virtual Qt::Orientations expandingDirections() const;
+    virtual bool isEmpty() const;
+    virtual void setGeometry(const QRect &);
+    virtual QRect geometry() const;
+    virtual QSpacerItem *spacerItem();
+};
+
+class QWidgetItem : QLayoutItem
+{
+%TypeHeaderCode
+#include <qlayoutitem.h>
+%End
+
+public:
+    explicit QWidgetItem(QWidget *w);
+    virtual ~QWidgetItem();
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSize() const;
+    virtual QSize maximumSize() const;
+    virtual Qt::Orientations expandingDirections() const;
+    virtual bool isEmpty() const;
+    virtual void setGeometry(const QRect &);
+    virtual QRect geometry() const;
+    virtual QWidget *widget();
+    virtual bool hasHeightForWidth() const;
+    virtual int heightForWidth(int) const;
+    virtual QFlags<QSizePolicy::ControlType> controlTypes() const;
+
+private:
+    QWidgetItem(const QWidgetItem &);
+};
diff --git a/sip/QtWidgets/qlcdnumber.sip b/sip/QtWidgets/qlcdnumber.sip
new file mode 100644
index 0000000..4c9c504
--- /dev/null
+++ b/sip/QtWidgets/qlcdnumber.sip
@@ -0,0 +1,85 @@
+// qlcdnumber.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QLCDNumber : QFrame
+{
+%TypeHeaderCode
+#include <qlcdnumber.h>
+%End
+
+public:
+    explicit QLCDNumber(QWidget *parent /TransferThis/ = 0);
+    QLCDNumber(uint numDigits, QWidget *parent /TransferThis/ = 0);
+    virtual ~QLCDNumber();
+
+    enum Mode
+    {
+        Hex,
+        Dec,
+        Oct,
+        Bin,
+    };
+
+    enum SegmentStyle
+    {
+        Outline,
+        Filled,
+        Flat,
+    };
+
+    bool smallDecimalPoint() const;
+    int digitCount() const;
+    void setDigitCount(int nDigits);
+    void setNumDigits(int nDigits);
+%MethodCode
+        // This is implemented for Qt v5 so that .ui files created with Designer for Qt v4 will continue to work.
+        sipCpp->setDigitCount(a0);
+%End
+
+    bool checkOverflow(double num /Constrained/) const;
+    bool checkOverflow(int num) const;
+    QLCDNumber::Mode mode() const;
+    void setMode(QLCDNumber::Mode);
+    QLCDNumber::SegmentStyle segmentStyle() const;
+    void setSegmentStyle(QLCDNumber::SegmentStyle);
+    double value() const;
+    int intValue() const;
+    virtual QSize sizeHint() const;
+    void display(const QString &str);
+    void display(double num /Constrained/);
+    void display(int num);
+    void setHexMode();
+    void setDecMode();
+    void setOctMode();
+    void setBinMode();
+    void setSmallDecimalPoint(bool);
+
+signals:
+    void overflow();
+
+protected:
+    virtual bool event(QEvent *e);
+    virtual void paintEvent(QPaintEvent *);
+
+private:
+    QLCDNumber(const QLCDNumber &);
+};
diff --git a/sip/QtWidgets/qlineedit.sip b/sip/QtWidgets/qlineedit.sip
new file mode 100644
index 0000000..f866492
--- /dev/null
+++ b/sip/QtWidgets/qlineedit.sip
@@ -0,0 +1,161 @@
+// qlineedit.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QLineEdit : QWidget
+{
+%TypeHeaderCode
+#include <qlineedit.h>
+%End
+
+public:
+    explicit QLineEdit(QWidget *parent /TransferThis/ = 0);
+    QLineEdit(const QString &contents, QWidget *parent /TransferThis/ = 0);
+    virtual ~QLineEdit();
+    QString text() const;
+    QString displayText() const;
+    int maxLength() const;
+    void setMaxLength(int);
+    void setFrame(bool);
+    bool hasFrame() const;
+
+    enum EchoMode
+    {
+        Normal,
+        NoEcho,
+        Password,
+        PasswordEchoOnEdit,
+    };
+
+    QLineEdit::EchoMode echoMode() const;
+    void setEchoMode(QLineEdit::EchoMode);
+    bool isReadOnly() const;
+    void setReadOnly(bool);
+    void setValidator(const QValidator * /KeepReference/);
+    const QValidator *validator() const;
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    int cursorPosition() const;
+    void setCursorPosition(int);
+    int cursorPositionAt(const QPoint &pos);
+    void setAlignment(Qt::Alignment flag);
+    Qt::Alignment alignment() const;
+    void cursorForward(bool mark, int steps = 1);
+    void cursorBackward(bool mark, int steps = 1);
+    void cursorWordForward(bool mark);
+    void cursorWordBackward(bool mark);
+    void backspace();
+    void del() /PyName=del_/;
+    void home(bool mark);
+    void end(bool mark);
+    bool isModified() const;
+    void setModified(bool);
+    void setSelection(int, int);
+    bool hasSelectedText() const;
+    QString selectedText() const;
+    int selectionStart() const;
+    bool isUndoAvailable() const;
+    bool isRedoAvailable() const;
+    void setDragEnabled(bool b);
+    bool dragEnabled() const;
+    QString inputMask() const;
+    void setInputMask(const QString &inputMask);
+    bool hasAcceptableInput() const;
+    void setText(const QString &);
+    void clear();
+    void selectAll();
+    void undo();
+    void redo();
+    void cut();
+    void copy() const;
+    void paste();
+    void deselect();
+    void insert(const QString &);
+    QMenu *createStandardContextMenu() /Factory/;
+
+signals:
+    void textChanged(const QString &);
+    void textEdited(const QString &);
+    void cursorPositionChanged(int, int);
+    void returnPressed();
+    void editingFinished();
+    void selectionChanged();
+
+protected:
+    void initStyleOption(QStyleOptionFrame *option) const;
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void mouseDoubleClickEvent(QMouseEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void focusInEvent(QFocusEvent *);
+    virtual void focusOutEvent(QFocusEvent *);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void dragEnterEvent(QDragEnterEvent *);
+    virtual void dragMoveEvent(QDragMoveEvent *e);
+    virtual void dragLeaveEvent(QDragLeaveEvent *e);
+    virtual void dropEvent(QDropEvent *);
+    virtual void changeEvent(QEvent *);
+    virtual void contextMenuEvent(QContextMenuEvent *);
+    virtual void inputMethodEvent(QInputMethodEvent *);
+    QRect cursorRect() const;
+
+public:
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const;
+    virtual bool event(QEvent *);
+    void setCompleter(QCompleter *completer /KeepReference/);
+    QCompleter *completer() const;
+    void setTextMargins(int left, int top, int right, int bottom);
+    void getTextMargins(int *left, int *top, int *right, int *bottom) const;
+    void setTextMargins(const QMargins &margins);
+    QMargins textMargins() const;
+    QString placeholderText() const;
+    void setPlaceholderText(const QString &);
+    void setCursorMoveStyle(Qt::CursorMoveStyle style);
+    Qt::CursorMoveStyle cursorMoveStyle() const;
+%If (Qt_5_2_0 -)
+
+    enum ActionPosition
+    {
+        LeadingPosition,
+        TrailingPosition,
+    };
+
+%End
+%If (Qt_5_2_0 -)
+    void setClearButtonEnabled(bool enable);
+%End
+%If (Qt_5_2_0 -)
+    bool isClearButtonEnabled() const;
+%End
+%If (Qt_5_2_0 -)
+    void addAction(QAction *action);
+%End
+%If (Qt_5_2_0 -)
+    void addAction(QAction *action, QLineEdit::ActionPosition position);
+%End
+%If (Qt_5_2_0 -)
+    QAction *addAction(const QIcon &icon, QLineEdit::ActionPosition position) /Transfer/;
+%End
+
+private:
+    QLineEdit(const QLineEdit &);
+};
diff --git a/sip/QtWidgets/qlistview.sip b/sip/QtWidgets/qlistview.sip
new file mode 100644
index 0000000..a87f84b
--- /dev/null
+++ b/sip/QtWidgets/qlistview.sip
@@ -0,0 +1,139 @@
+// qlistview.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QListView : QAbstractItemView
+{
+%TypeHeaderCode
+#include <qlistview.h>
+%End
+
+public:
+    enum Movement
+    {
+        Static,
+        Free,
+        Snap,
+    };
+
+    enum Flow
+    {
+        LeftToRight,
+        TopToBottom,
+    };
+
+    enum ResizeMode
+    {
+        Fixed,
+        Adjust,
+    };
+
+    enum LayoutMode
+    {
+        SinglePass,
+        Batched,
+    };
+
+    enum ViewMode
+    {
+        ListMode,
+        IconMode,
+    };
+
+    explicit QListView(QWidget *parent /TransferThis/ = 0);
+    virtual ~QListView();
+    void setMovement(QListView::Movement movement);
+    QListView::Movement movement() const;
+    void setFlow(QListView::Flow flow);
+    QListView::Flow flow() const;
+    void setWrapping(bool enable);
+    bool isWrapping() const;
+    void setResizeMode(QListView::ResizeMode mode);
+    QListView::ResizeMode resizeMode() const;
+    void setLayoutMode(QListView::LayoutMode mode);
+    QListView::LayoutMode layoutMode() const;
+    void setSpacing(int space);
+    int spacing() const;
+    void setGridSize(const QSize &size);
+    QSize gridSize() const;
+    void setViewMode(QListView::ViewMode mode);
+    QListView::ViewMode viewMode() const;
+    void clearPropertyFlags();
+    bool isRowHidden(int row) const;
+    void setRowHidden(int row, bool hide);
+    void setModelColumn(int column);
+    int modelColumn() const;
+    void setUniformItemSizes(bool enable);
+    bool uniformItemSizes() const;
+    virtual QRect visualRect(const QModelIndex &index) const;
+    virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible);
+    virtual QModelIndex indexAt(const QPoint &p) const;
+    virtual void reset();
+    virtual void setRootIndex(const QModelIndex &index);
+
+signals:
+    void indexesMoved(const QModelIndexList &indexes);
+
+protected:
+    virtual void scrollContentsBy(int dx, int dy);
+    virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles /DocValue="[]"/ = QVector<int>());
+    virtual void rowsInserted(const QModelIndex &parent, int start, int end);
+    virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
+    virtual bool event(QEvent *e);
+    virtual void mouseMoveEvent(QMouseEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *e);
+    virtual void timerEvent(QTimerEvent *e);
+    virtual void resizeEvent(QResizeEvent *e);
+    virtual void dragMoveEvent(QDragMoveEvent *e);
+    virtual void dragLeaveEvent(QDragLeaveEvent *e);
+    virtual void dropEvent(QDropEvent *e);
+    virtual void startDrag(Qt::DropActions supportedActions);
+    virtual QStyleOptionViewItem viewOptions() const;
+    virtual void paintEvent(QPaintEvent *e);
+    virtual int horizontalOffset() const;
+    virtual int verticalOffset() const;
+    virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
+    QRect rectForIndex(const QModelIndex &index) const;
+    void setPositionForIndex(const QPoint &position, const QModelIndex &index);
+    virtual void setSelection(const QRect &rect, QFlags<QItemSelectionModel::SelectionFlag> command);
+    virtual QRegion visualRegionForSelection(const QItemSelection &selection) const;
+    virtual QModelIndexList selectedIndexes() const;
+    virtual void updateGeometries();
+    virtual bool isIndexHidden(const QModelIndex &index) const;
+%If (Qt_5_2_0 -)
+    virtual QSize viewportSizeHint() const;
+%End
+
+public:
+    void setBatchSize(int batchSize);
+    int batchSize() const;
+    void setWordWrap(bool on);
+    bool wordWrap() const;
+    void setSelectionRectVisible(bool show);
+    bool isSelectionRectVisible() const;
+
+protected:
+    virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+    virtual void currentChanged(const QModelIndex &current, const QModelIndex &previous);
+
+private:
+    QListView(const QListView &);
+};
diff --git a/sip/QtWidgets/qlistwidget.sip b/sip/QtWidgets/qlistwidget.sip
new file mode 100644
index 0000000..0ae1530
--- /dev/null
+++ b/sip/QtWidgets/qlistwidget.sip
@@ -0,0 +1,194 @@
+// qlistwidget.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qlistwidget.h>
+%End
+
+class QListWidgetItem /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qlistwidget.h>
+%End
+
+public:
+    enum ItemType
+    {
+        Type,
+        UserType,
+    };
+
+    QListWidgetItem(QListWidget *parent /TransferThis/ = 0, int type = Type);
+    QListWidgetItem(const QString &text, QListWidget *parent /TransferThis/ = 0, int type = Type);
+    QListWidgetItem(const QIcon &icon, const QString &text, QListWidget *parent /TransferThis/ = 0, int type = Type);
+    QListWidgetItem(const QListWidgetItem &other);
+    virtual ~QListWidgetItem();
+    virtual QListWidgetItem *clone() const /Factory/;
+    QListWidget *listWidget() const;
+    Qt::ItemFlags flags() const;
+    QString text() const;
+    QIcon icon() const;
+    QString statusTip() const;
+    QString toolTip() const;
+    QString whatsThis() const;
+    QFont font() const;
+    int textAlignment() const;
+    void setTextAlignment(int alignment);
+    Qt::CheckState checkState() const;
+    void setCheckState(Qt::CheckState state);
+    QSize sizeHint() const;
+    void setSizeHint(const QSize &size);
+    virtual QVariant data(int role) const;
+    virtual void setData(int role, const QVariant &value);
+    virtual bool operator<(const QListWidgetItem &other /NoCopy/) const;
+    virtual void read(QDataStream &in) /ReleaseGIL/;
+    virtual void write(QDataStream &out) const /ReleaseGIL/;
+    int type() const;
+    void setFlags(Qt::ItemFlags aflags);
+    void setText(const QString &atext);
+    void setIcon(const QIcon &aicon);
+    void setStatusTip(const QString &astatusTip);
+    void setToolTip(const QString &atoolTip);
+    void setWhatsThis(const QString &awhatsThis);
+    void setFont(const QFont &afont);
+    QBrush background() const;
+    void setBackground(const QBrush &brush);
+    QBrush foreground() const;
+    void setForeground(const QBrush &brush);
+    void setSelected(bool aselect);
+    bool isSelected() const;
+    void setHidden(bool ahide);
+    bool isHidden() const;
+
+private:
+    QListWidgetItem &operator=(const QListWidgetItem &);
+};
+
+QDataStream &operator<<(QDataStream &out, const QListWidgetItem &item /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &in, QListWidgetItem &item /Constrained/) /ReleaseGIL/;
+
+class QListWidget : QListView
+{
+%TypeHeaderCode
+#include <qlistwidget.h>
+%End
+
+public:
+    explicit QListWidget(QWidget *parent /TransferThis/ = 0);
+    virtual ~QListWidget();
+    QListWidgetItem *item(int row) const;
+    int row(const QListWidgetItem *item) const;
+    void insertItem(int row, QListWidgetItem *item /Transfer/);
+    void insertItem(int row, const QString &label);
+    void insertItems(int row, const QStringList &labels);
+    void addItem(QListWidgetItem *aitem /Transfer/);
+    void addItem(const QString &label);
+    void addItems(const QStringList &labels);
+    QListWidgetItem *takeItem(int row) /TransferBack/;
+    int count() const /__len__/;
+    QListWidgetItem *currentItem() const;
+    void setCurrentItem(QListWidgetItem *item);
+    void setCurrentItem(QListWidgetItem *item, QFlags<QItemSelectionModel::SelectionFlag> command);
+    int currentRow() const;
+    void setCurrentRow(int row);
+    void setCurrentRow(int row, QFlags<QItemSelectionModel::SelectionFlag> command);
+    QListWidgetItem *itemAt(const QPoint &p) const;
+    QListWidgetItem *itemAt(int ax, int ay) const;
+    QWidget *itemWidget(QListWidgetItem *item) const;
+    void setItemWidget(QListWidgetItem *item, QWidget *widget /Transfer/);
+%MethodCode
+        // We have to break the association with any existing widget.
+        QWidget *w = sipCpp->itemWidget(a0);
+        
+        if (w)
+        {
+            PyObject *wo = sipGetPyObject(w, sipType_QWidget);
+        
+            if (wo)
+                sipTransferTo(wo, 0);
+        }
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->setItemWidget(a0, a1);
+        Py_END_ALLOW_THREADS
+%End
+
+    QRect visualItemRect(const QListWidgetItem *item) const;
+    void sortItems(Qt::SortOrder order = Qt::AscendingOrder);
+    void editItem(QListWidgetItem *item);
+    void openPersistentEditor(QListWidgetItem *item);
+    void closePersistentEditor(QListWidgetItem *item);
+    QList<QListWidgetItem*> selectedItems() const;
+    QList<QListWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags) const;
+
+public slots:
+    void clear();
+    void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible);
+
+signals:
+    void itemPressed(QListWidgetItem *item);
+    void itemClicked(QListWidgetItem *item);
+    void itemDoubleClicked(QListWidgetItem *item);
+    void itemActivated(QListWidgetItem *item);
+    void itemEntered(QListWidgetItem *item);
+    void itemChanged(QListWidgetItem *item);
+    void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
+    void currentTextChanged(const QString &currentText);
+    void currentRowChanged(int currentRow);
+    void itemSelectionChanged();
+
+protected:
+    virtual QStringList mimeTypes() const;
+    virtual QMimeData *mimeData(const QList<QListWidgetItem*> items) const /TransferBack/;
+    virtual bool dropMimeData(int index, const QMimeData *data, Qt::DropAction action);
+    virtual Qt::DropActions supportedDropActions() const;
+    QList<QListWidgetItem*> items(const QMimeData *data) const;
+    QModelIndex indexFromItem(QListWidgetItem *item) const;
+    QListWidgetItem *itemFromIndex(const QModelIndex &index) const;
+    virtual bool event(QEvent *e);
+
+public:
+    void setSortingEnabled(bool enable);
+    bool isSortingEnabled() const;
+    virtual void dropEvent(QDropEvent *event);
+    void removeItemWidget(QListWidgetItem *aItem);
+%MethodCode
+        // We have to break the association with any existing widget.
+        QWidget *w = sipCpp->itemWidget(a0);
+        
+        if (w)
+        {
+            PyObject *wo = sipGetPyObject(w, sipType_QWidget);
+        
+            if (wo)
+                sipTransferTo(wo, 0);
+        }
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->removeItemWidget(a0);
+        Py_END_ALLOW_THREADS
+%End
+
+private:
+    virtual void setModel(QAbstractItemModel *model /KeepReference/);
+    QListWidget(const QListWidget &);
+};
diff --git a/sip/QtWidgets/qmainwindow.sip b/sip/QtWidgets/qmainwindow.sip
new file mode 100644
index 0000000..7f1d49d
--- /dev/null
+++ b/sip/QtWidgets/qmainwindow.sip
@@ -0,0 +1,121 @@
+// qmainwindow.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qmainwindow.h>
+%End
+
+class QMainWindow : QWidget
+{
+%TypeHeaderCode
+#include <qmainwindow.h>
+%End
+
+public:
+    QMainWindow(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QMainWindow();
+    QSize iconSize() const;
+    void setIconSize(const QSize &iconSize);
+    Qt::ToolButtonStyle toolButtonStyle() const;
+    void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle);
+    QMenuBar *menuBar() const /Transfer/;
+    void setMenuBar(QMenuBar *menubar /Transfer/);
+    QStatusBar *statusBar() const /Transfer/;
+    void setStatusBar(QStatusBar *statusbar /Transfer/);
+    QWidget *centralWidget() const;
+    void setCentralWidget(QWidget *widget /Transfer/);
+    void setCorner(Qt::Corner corner, Qt::DockWidgetArea area);
+    Qt::DockWidgetArea corner(Qt::Corner corner) const;
+    void addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea);
+    void insertToolBarBreak(QToolBar *before);
+    void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar /Transfer/);
+    void addToolBar(QToolBar *toolbar /Transfer/);
+    QToolBar *addToolBar(const QString &title) /Transfer/;
+    void insertToolBar(QToolBar *before, QToolBar *toolbar /Transfer/);
+    void removeToolBar(QToolBar *toolbar);
+    Qt::ToolBarArea toolBarArea(QToolBar *toolbar) const;
+    void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget /Transfer/);
+    void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget /Transfer/, Qt::Orientation orientation);
+    void splitDockWidget(QDockWidget *after, QDockWidget *dockwidget /Transfer/, Qt::Orientation orientation);
+    void removeDockWidget(QDockWidget *dockwidget /TransferBack/);
+    Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget) const;
+    QByteArray saveState(int version = 0) const;
+    bool restoreState(const QByteArray &state, int version = 0);
+    virtual QMenu *createPopupMenu();
+
+public slots:
+    void setAnimated(bool enabled);
+    void setDockNestingEnabled(bool enabled);
+
+signals:
+    void iconSizeChanged(const QSize &iconSize);
+    void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle);
+
+protected:
+    virtual void contextMenuEvent(QContextMenuEvent *event);
+    virtual bool event(QEvent *event);
+
+public:
+    bool isAnimated() const;
+    bool isDockNestingEnabled() const;
+    bool isSeparator(const QPoint &pos) const;
+    QWidget *menuWidget() const;
+    void setMenuWidget(QWidget *menubar /Transfer/);
+    void tabifyDockWidget(QDockWidget *first, QDockWidget *second);
+
+    enum DockOption
+    {
+        AnimatedDocks,
+        AllowNestedDocks,
+        AllowTabbedDocks,
+        ForceTabbedDocks,
+        VerticalTabs,
+    };
+
+    typedef QFlags<QMainWindow::DockOption> DockOptions;
+    void setDockOptions(QFlags<QMainWindow::DockOption> options);
+    QFlags<QMainWindow::DockOption> dockOptions() const;
+    void removeToolBarBreak(QToolBar *before);
+    bool toolBarBreak(QToolBar *toolbar) const;
+%If (Qt_5_2_0 -)
+    void setUnifiedTitleAndToolBarOnMac(bool set);
+%End
+%If (Qt_5_2_0 -)
+    bool unifiedTitleAndToolBarOnMac() const;
+%End
+    bool restoreDockWidget(QDockWidget *dockwidget);
+    bool documentMode() const;
+    void setDocumentMode(bool enabled);
+    QTabWidget::TabShape tabShape() const;
+    void setTabShape(QTabWidget::TabShape tabShape);
+    QTabWidget::TabPosition tabPosition(Qt::DockWidgetArea area) const;
+    void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition);
+    QList<QDockWidget*> tabifiedDockWidgets(QDockWidget *dockwidget) const;
+%If (Qt_5_2_0 -)
+    QWidget *takeCentralWidget() /TransferBack/;
+%End
+
+private:
+    QMainWindow(const QMainWindow &);
+};
+
+QFlags<QMainWindow::DockOption> operator|(QMainWindow::DockOption f1, QFlags<QMainWindow::DockOption> f2);
diff --git a/sip/QtWidgets/qmdiarea.sip b/sip/QtWidgets/qmdiarea.sip
new file mode 100644
index 0000000..4027df9
--- /dev/null
+++ b/sip/QtWidgets/qmdiarea.sip
@@ -0,0 +1,134 @@
+// qmdiarea.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qmdiarea.h>
+%End
+
+class QMdiArea : QAbstractScrollArea
+{
+%TypeHeaderCode
+#include <qmdiarea.h>
+%End
+
+public:
+    enum AreaOption
+    {
+        DontMaximizeSubWindowOnActivation,
+    };
+
+    typedef QFlags<QMdiArea::AreaOption> AreaOptions;
+
+    enum ViewMode
+    {
+        SubWindowView,
+        TabbedView,
+    };
+
+    enum WindowOrder
+    {
+        CreationOrder,
+        StackingOrder,
+        ActivationHistoryOrder,
+    };
+
+    QMdiArea(QWidget *parent /TransferThis/ = 0);
+    virtual ~QMdiArea();
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    QMdiSubWindow *activeSubWindow() const;
+    QMdiSubWindow *addSubWindow(QWidget *widget /Transfer/, Qt::WindowFlags flags = 0);
+    QList<QMdiSubWindow*> subWindowList(QMdiArea::WindowOrder order = QMdiArea::CreationOrder) const;
+    QMdiSubWindow *currentSubWindow() const;
+    void removeSubWindow(QWidget *widget /GetWrapper/);
+%MethodCode
+        // We need to implement /TransferBack/ on the argument, but it might be the
+        // QMdiSubWindow that wraps the widget we are really after.
+        QMdiSubWindow *swin = qobject_cast<QMdiSubWindow *>(a0);
+        
+        if (swin)
+        {
+            QWidget *w = swin->widget();
+        
+            a0Wrapper = (w ? sipGetPyObject(w, sipType_QWidget) : 0);
+        }
+        else
+            a0Wrapper = 0;
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->removeSubWindow(a0);
+        Py_END_ALLOW_THREADS
+        
+        if (a0Wrapper)
+            sipTransferBack(a0Wrapper);
+%End
+
+    QBrush background() const;
+    void setBackground(const QBrush &background);
+    void setOption(QMdiArea::AreaOption option, bool on = true);
+    bool testOption(QMdiArea::AreaOption opton) const;
+
+signals:
+    void subWindowActivated(QMdiSubWindow *);
+
+public slots:
+    void setActiveSubWindow(QMdiSubWindow *window);
+    void tileSubWindows();
+    void cascadeSubWindows();
+    void closeActiveSubWindow();
+    void closeAllSubWindows();
+    void activateNextSubWindow();
+    void activatePreviousSubWindow();
+
+protected:
+    virtual void setupViewport(QWidget *viewport);
+    virtual bool event(QEvent *event);
+    virtual bool eventFilter(QObject *object, QEvent *event);
+    virtual void paintEvent(QPaintEvent *paintEvent);
+    virtual void childEvent(QChildEvent *childEvent);
+    virtual void resizeEvent(QResizeEvent *resizeEvent);
+    virtual void timerEvent(QTimerEvent *timerEvent);
+    virtual void showEvent(QShowEvent *showEvent);
+    virtual bool viewportEvent(QEvent *event);
+    virtual void scrollContentsBy(int dx, int dy);
+
+public:
+    QMdiArea::WindowOrder activationOrder() const;
+    void setActivationOrder(QMdiArea::WindowOrder order);
+    void setViewMode(QMdiArea::ViewMode mode);
+    QMdiArea::ViewMode viewMode() const;
+    void setTabShape(QTabWidget::TabShape shape);
+    QTabWidget::TabShape tabShape() const;
+    void setTabPosition(QTabWidget::TabPosition position);
+    QTabWidget::TabPosition tabPosition() const;
+    bool documentMode() const;
+    void setDocumentMode(bool enabled);
+    void setTabsClosable(bool closable);
+    bool tabsClosable() const;
+    void setTabsMovable(bool movable);
+    bool tabsMovable() const;
+
+private:
+    QMdiArea(const QMdiArea &);
+};
+
+QFlags<QMdiArea::AreaOption> operator|(QMdiArea::AreaOption f1, QFlags<QMdiArea::AreaOption> f2);
diff --git a/sip/QtWidgets/qmdisubwindow.sip b/sip/QtWidgets/qmdisubwindow.sip
new file mode 100644
index 0000000..cf8c8d9
--- /dev/null
+++ b/sip/QtWidgets/qmdisubwindow.sip
@@ -0,0 +1,126 @@
+// qmdisubwindow.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qmdisubwindow.h>
+%End
+
+class QMdiSubWindow : QWidget
+{
+%TypeHeaderCode
+#include <qmdisubwindow.h>
+%End
+
+public:
+    enum SubWindowOption
+    {
+        RubberBandResize,
+        RubberBandMove,
+    };
+
+    typedef QFlags<QMdiSubWindow::SubWindowOption> SubWindowOptions;
+    QMdiSubWindow(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QMdiSubWindow();
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    void setWidget(QWidget *widget /Transfer/);
+%MethodCode
+        // We have to implement /TransferBack/ on any existing widget.
+        QWidget *w = sipCpp->widget();
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->setWidget(a0);
+        Py_END_ALLOW_THREADS
+        
+        if (w)
+        {
+            PyObject *wo = sipGetPyObject(w, sipType_QWidget);
+        
+            if (wo)
+                sipTransferBack(wo);
+        }
+%End
+
+    QWidget *widget() const;
+    bool isShaded() const;
+    void setOption(QMdiSubWindow::SubWindowOption option, bool on = true);
+    bool testOption(QMdiSubWindow::SubWindowOption) const;
+    void setKeyboardSingleStep(int step);
+    int keyboardSingleStep() const;
+    void setKeyboardPageStep(int step);
+    int keyboardPageStep() const;
+    void setSystemMenu(QMenu *systemMenu /Transfer/);
+%MethodCode
+        // We have to break the parent association on any existing menu.
+        QMenu *w = sipCpp->systemMenu();
+        
+        if (w)
+        {
+            PyObject *wo = sipGetPyObject(w, sipType_QMenu);
+        
+            if (wo)
+                sipTransferTo(wo, 0);
+        }
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->setSystemMenu(a0);
+        Py_END_ALLOW_THREADS
+%End
+
+    QMenu *systemMenu() const;
+    QMdiArea *mdiArea() const;
+
+signals:
+    void windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState);
+    void aboutToActivate();
+
+public slots:
+    void showSystemMenu();
+    void showShaded();
+
+protected:
+    virtual bool eventFilter(QObject *object, QEvent *event);
+    virtual bool event(QEvent *event);
+    virtual void showEvent(QShowEvent *showEvent);
+    virtual void hideEvent(QHideEvent *hideEvent);
+    virtual void changeEvent(QEvent *changeEvent);
+    virtual void closeEvent(QCloseEvent *closeEvent);
+    virtual void leaveEvent(QEvent *leaveEvent);
+    virtual void resizeEvent(QResizeEvent *resizeEvent);
+    virtual void timerEvent(QTimerEvent *timerEvent);
+    virtual void moveEvent(QMoveEvent *moveEvent);
+    virtual void paintEvent(QPaintEvent *paintEvent);
+    virtual void mousePressEvent(QMouseEvent *mouseEvent);
+    virtual void mouseDoubleClickEvent(QMouseEvent *mouseEvent);
+    virtual void mouseReleaseEvent(QMouseEvent *mouseEvent);
+    virtual void mouseMoveEvent(QMouseEvent *mouseEvent);
+    virtual void keyPressEvent(QKeyEvent *keyEvent);
+    virtual void contextMenuEvent(QContextMenuEvent *contextMenuEvent);
+    virtual void focusInEvent(QFocusEvent *focusInEvent);
+    virtual void focusOutEvent(QFocusEvent *focusOutEvent);
+    virtual void childEvent(QChildEvent *childEvent);
+
+private:
+    QMdiSubWindow(const QMdiSubWindow &);
+};
+
+QFlags<QMdiSubWindow::SubWindowOption> operator|(QMdiSubWindow::SubWindowOption f1, QFlags<QMdiSubWindow::SubWindowOption> f2);
diff --git a/sip/QtWidgets/qmenu.sip b/sip/QtWidgets/qmenu.sip
new file mode 100644
index 0000000..28fd905
--- /dev/null
+++ b/sip/QtWidgets/qmenu.sip
@@ -0,0 +1,153 @@
+// qmenu.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMenu : QWidget
+{
+%TypeHeaderCode
+#include <qmenu.h>
+%End
+
+public:
+    explicit QMenu(QWidget *parent /TransferThis/ = 0);
+    QMenu(const QString &title, QWidget *parent /TransferThis/ = 0);
+    virtual ~QMenu();
+    void addAction(QAction *action);
+    QAction *addAction(const QString &text) /Transfer/;
+    QAction *addAction(const QIcon &icon, const QString &text) /Transfer/;
+    QAction *addAction(const QString &text, SIP_PYOBJECT slot /DocType="slot"/, const QKeySequence &shortcut = 0) /Transfer/;
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a1, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipRes = sipCpp->addAction(*a0, receiver, slot_signature.constData(), *a2);
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(1, a1);
+        }
+%End
+
+    QAction *addAction(const QIcon &icon, const QString &text, SIP_PYOBJECT slot /DocType="slot"/, const QKeySequence &shortcut = 0) /Transfer/;
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a2, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipRes = sipCpp->addAction(*a0, *a1, receiver, slot_signature.constData(), *a3);
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(2, a2);
+        }
+%End
+
+    QAction *addMenu(QMenu *menu);
+    QMenu *addMenu(const QString &title) /Transfer/;
+    QMenu *addMenu(const QIcon &icon, const QString &title) /Transfer/;
+    QAction *addSeparator() /Transfer/;
+    QAction *insertMenu(QAction *before, QMenu *menu);
+    QAction *insertSeparator(QAction *before) /Transfer/;
+    void clear();
+    void setTearOffEnabled(bool);
+    bool isTearOffEnabled() const;
+    bool isTearOffMenuVisible() const;
+    void hideTearOffMenu();
+    void setDefaultAction(QAction * /KeepReference/);
+    QAction *defaultAction() const;
+    void setActiveAction(QAction *act);
+    QAction *activeAction() const;
+    void popup(const QPoint &p, QAction *action = 0);
+    QAction *exec() /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    QAction *exec() /ReleaseGIL/;
+%End
+    QAction *exec(const QPoint &p, QAction *action = 0) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    QAction *exec(const QPoint &pos, QAction *action = 0) /ReleaseGIL/;
+%End
+    static QAction *exec(QList<QAction*> actions, const QPoint &pos, QAction *at = 0, QWidget *parent = 0) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,PyName=exec_,ReleaseGIL/;
+%If (Py_v3)
+    static QAction *exec(QList<QAction*> actions, const QPoint &pos, QAction *at = 0, QWidget *parent = 0) /PostHook=__pyQtPostEventLoopHook__,PreHook=__pyQtPreEventLoopHook__,ReleaseGIL/;
+%End
+    virtual QSize sizeHint() const;
+    QRect actionGeometry(QAction *) const;
+    QAction *actionAt(const QPoint &) const;
+    QAction *menuAction() const;
+    QString title() const;
+    void setTitle(const QString &title);
+    QIcon icon() const;
+    void setIcon(const QIcon &icon);
+    void setNoReplayFor(QWidget *widget);
+
+signals:
+    void aboutToHide();
+    void aboutToShow();
+    void hovered(QAction *action);
+    void triggered(QAction *action);
+
+protected:
+    int columnCount() const;
+    void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const;
+    virtual void changeEvent(QEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void wheelEvent(QWheelEvent *);
+    virtual void enterEvent(QEvent *);
+    virtual void leaveEvent(QEvent *);
+    virtual void hideEvent(QHideEvent *);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void actionEvent(QActionEvent *);
+    virtual void timerEvent(QTimerEvent *);
+    virtual bool event(QEvent *);
+    virtual bool focusNextPrevChild(bool next);
+
+public:
+    bool isEmpty() const;
+    bool separatorsCollapsible() const;
+    void setSeparatorsCollapsible(bool collapse);
+%If (Qt_5_1_0 -)
+    QAction *addSection(const QString &text) /Transfer/;
+%End
+%If (Qt_5_1_0 -)
+    QAction *addSection(const QIcon &icon, const QString &text) /Transfer/;
+%End
+%If (Qt_5_1_0 -)
+    QAction *insertSection(QAction *before, const QString &text) /Transfer/;
+%End
+%If (Qt_5_1_0 -)
+    QAction *insertSection(QAction *before, const QIcon &icon, const QString &text) /Transfer/;
+%End
+%If (Qt_5_1_0 -)
+    bool toolTipsVisible() const;
+%End
+%If (Qt_5_1_0 -)
+    void setToolTipsVisible(bool visible);
+%End
+
+private:
+    QMenu(const QMenu &);
+};
diff --git a/sip/QtWidgets/qmenubar.sip b/sip/QtWidgets/qmenubar.sip
new file mode 100644
index 0000000..fc3226d
--- /dev/null
+++ b/sip/QtWidgets/qmenubar.sip
@@ -0,0 +1,96 @@
+// qmenubar.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMenuBar : QWidget
+{
+%TypeHeaderCode
+#include <qmenubar.h>
+%End
+
+public:
+    explicit QMenuBar(QWidget *parent /TransferThis/ = 0);
+    virtual ~QMenuBar();
+    void addAction(QAction *action);
+    QAction *addAction(const QString &text) /Transfer/;
+    QAction *addAction(const QString &text, SIP_PYOBJECT slot /DocType="slot"/) /Transfer/;
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a1, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipRes = sipCpp->addAction(*a0, receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(1, a1);
+        }
+%End
+
+    QAction *addMenu(QMenu *menu);
+    QMenu *addMenu(const QString &title) /Transfer/;
+    QMenu *addMenu(const QIcon &icon, const QString &title) /Transfer/;
+    QAction *addSeparator() /Transfer/;
+    QAction *insertMenu(QAction *before, QMenu *menu);
+    QAction *insertSeparator(QAction *before) /Transfer/;
+    void clear();
+    QAction *activeAction() const;
+    void setActiveAction(QAction *action);
+    void setDefaultUp(bool);
+    bool isDefaultUp() const;
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    virtual int heightForWidth(int) const;
+    QRect actionGeometry(QAction *) const;
+    QAction *actionAt(const QPoint &) const;
+    void setCornerWidget(QWidget *widget /Transfer/, Qt::Corner corner = Qt::TopRightCorner);
+    QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const;
+    virtual void setVisible(bool visible);
+
+signals:
+    void triggered(QAction *action);
+    void hovered(QAction *action);
+
+protected:
+    void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const;
+    virtual void changeEvent(QEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void leaveEvent(QEvent *);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void actionEvent(QActionEvent *);
+    virtual void focusOutEvent(QFocusEvent *);
+    virtual void focusInEvent(QFocusEvent *);
+    virtual bool eventFilter(QObject *, QEvent *);
+    virtual bool event(QEvent *);
+    virtual void timerEvent(QTimerEvent *);
+
+public:
+    bool isNativeMenuBar() const;
+    void setNativeMenuBar(bool nativeMenuBar);
+
+private:
+    QMenuBar(const QMenuBar &);
+};
diff --git a/sip/QtWidgets/qmessagebox.sip b/sip/QtWidgets/qmessagebox.sip
new file mode 100644
index 0000000..9fd7146
--- /dev/null
+++ b/sip/QtWidgets/qmessagebox.sip
@@ -0,0 +1,179 @@
+// qmessagebox.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qmessagebox.h>
+%End
+
+class QMessageBox : QDialog
+{
+%TypeHeaderCode
+#include <qmessagebox.h>
+%End
+
+public:
+    enum ButtonRole
+    {
+        InvalidRole,
+        AcceptRole,
+        RejectRole,
+        DestructiveRole,
+        ActionRole,
+        HelpRole,
+        YesRole,
+        NoRole,
+        ResetRole,
+        ApplyRole,
+    };
+
+    enum Icon
+    {
+        NoIcon,
+        Information,
+        Warning,
+        Critical,
+        Question,
+    };
+
+    enum StandardButton
+    {
+        NoButton,
+        Ok,
+        Save,
+        SaveAll,
+        Open,
+        Yes,
+        YesToAll,
+        No,
+        NoToAll,
+        Abort,
+        Retry,
+        Ignore,
+        Close,
+        Cancel,
+        Discard,
+        Help,
+        Apply,
+        Reset,
+        RestoreDefaults,
+        FirstButton,
+        LastButton,
+        YesAll,
+        NoAll,
+        Default,
+        Escape,
+        FlagMask,
+        ButtonMask,
+    };
+
+    typedef QFlags<QMessageBox::StandardButton> StandardButtons;
+    typedef QMessageBox::StandardButton Button;
+    explicit QMessageBox(QWidget *parent /TransferThis/ = 0);
+    QMessageBox(QMessageBox::Icon icon, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = QMessageBox::NoButton, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = Qt::Dialog|Qt::MSWindowsFixedSizeDialogHint);
+    virtual ~QMessageBox();
+    QString text() const;
+    void setText(const QString &);
+    QMessageBox::Icon icon() const;
+    void setIcon(QMessageBox::Icon);
+    QPixmap iconPixmap() const;
+    void setIconPixmap(const QPixmap &);
+    Qt::TextFormat textFormat() const;
+    void setTextFormat(Qt::TextFormat);
+    static QMessageBox::StandardButton information(QWidget *parent, const QString &title, const QString &text, QFlags<QMessageBox::StandardButton> buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/;
+    static QMessageBox::StandardButton question(QWidget *parent, const QString &title, const QString &text, QFlags<QMessageBox::StandardButton> buttons = QFlags<QMessageBox::StandardButton>(QFlag(81920)), QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/;
+    static QMessageBox::StandardButton warning(QWidget *parent, const QString &title, const QString &text, QFlags<QMessageBox::StandardButton> buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/;
+    static QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &text, QFlags<QMessageBox::StandardButton> buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton) /ReleaseGIL/;
+    static void about(QWidget *parent, const QString &caption, const QString &text) /ReleaseGIL/;
+    static void aboutQt(QWidget *parent, const QString &title /DocValue="''"/ = QString()) /ReleaseGIL/;
+    static QPixmap standardIcon(QMessageBox::Icon icon);
+
+protected:
+    virtual bool event(QEvent *e);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void showEvent(QShowEvent *);
+    virtual void closeEvent(QCloseEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void changeEvent(QEvent *);
+
+public:
+    void addButton(QAbstractButton *button /Transfer/, QMessageBox::ButtonRole role);
+    QPushButton *addButton(const QString &text, QMessageBox::ButtonRole role) /Transfer/;
+    QPushButton *addButton(QMessageBox::StandardButton button) /Transfer/;
+    void removeButton(QAbstractButton *button /TransferBack/);
+    void setStandardButtons(QFlags<QMessageBox::StandardButton> buttons);
+    QFlags<QMessageBox::StandardButton> standardButtons() const;
+    QMessageBox::StandardButton standardButton(QAbstractButton *button) const;
+    QAbstractButton *button(QMessageBox::StandardButton which) const;
+    QPushButton *defaultButton() const;
+    void setDefaultButton(QPushButton *button /KeepReference/);
+    void setDefaultButton(QMessageBox::StandardButton button);
+    QAbstractButton *escapeButton() const;
+    void setEscapeButton(QAbstractButton *button /KeepReference/);
+    void setEscapeButton(QMessageBox::StandardButton button);
+    QAbstractButton *clickedButton() const;
+    QString informativeText() const;
+    void setInformativeText(const QString &text);
+    QString detailedText() const;
+    void setDetailedText(const QString &text);
+    void setWindowTitle(const QString &title);
+    void setWindowModality(Qt::WindowModality windowModality);
+    virtual void open();
+    void open(SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipCpp->open(receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+    QList<QAbstractButton*> buttons() const;
+    QMessageBox::ButtonRole buttonRole(QAbstractButton *button) const;
+
+signals:
+    void buttonClicked(QAbstractButton *button);
+
+public:
+%If (Qt_5_1_0 -)
+    void setTextInteractionFlags(Qt::TextInteractionFlags flags);
+%End
+%If (Qt_5_1_0 -)
+    Qt::TextInteractionFlags textInteractionFlags() const;
+%End
+%If (Qt_5_2_0 -)
+    void setCheckBox(QCheckBox *cb);
+%End
+%If (Qt_5_2_0 -)
+    QCheckBox *checkBox() const;
+%End
+
+private:
+    QMessageBox(const QMessageBox &);
+};
+
+QFlags<QMessageBox::StandardButton> operator|(QMessageBox::StandardButton f1, QFlags<QMessageBox::StandardButton> f2);
diff --git a/sip/QtWidgets/qmouseeventtransition.sip b/sip/QtWidgets/qmouseeventtransition.sip
new file mode 100644
index 0000000..7bbd181
--- /dev/null
+++ b/sip/QtWidgets/qmouseeventtransition.sip
@@ -0,0 +1,46 @@
+// qmouseeventtransition.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMouseEventTransition : QEventTransition
+{
+%TypeHeaderCode
+#include <qmouseeventtransition.h>
+%End
+
+public:
+    QMouseEventTransition(QState *sourceState /TransferThis/ = 0);
+    QMouseEventTransition(QObject *object /KeepReference=10/, QEvent::Type type, Qt::MouseButton button, QState *sourceState /TransferThis/ = 0);
+    virtual ~QMouseEventTransition();
+    Qt::MouseButton button() const;
+    void setButton(Qt::MouseButton button);
+    Qt::KeyboardModifiers modifierMask() const;
+    void setModifierMask(Qt::KeyboardModifiers modifiers);
+    QPainterPath hitTestPath() const;
+    void setHitTestPath(const QPainterPath &path);
+
+protected:
+    virtual void onTransition(QEvent *event);
+    virtual bool eventTest(QEvent *event);
+
+private:
+    QMouseEventTransition(const QMouseEventTransition &);
+};
diff --git a/sip/QtWidgets/qplaintextedit.sip b/sip/QtWidgets/qplaintextedit.sip
new file mode 100644
index 0000000..af2481a
--- /dev/null
+++ b/sip/QtWidgets/qplaintextedit.sip
@@ -0,0 +1,208 @@
+// qplaintextedit.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPlainTextEdit : QAbstractScrollArea
+{
+%TypeHeaderCode
+#include <qplaintextedit.h>
+%End
+
+public:
+    enum LineWrapMode
+    {
+        NoWrap,
+        WidgetWidth,
+    };
+
+    explicit QPlainTextEdit(QWidget *parent /TransferThis/ = 0);
+    QPlainTextEdit(const QString &text, QWidget *parent /TransferThis/ = 0);
+    virtual ~QPlainTextEdit();
+    void setDocument(QTextDocument *document /KeepReference/);
+    QTextDocument *document() const;
+    void setTextCursor(const QTextCursor &cursor);
+    QTextCursor textCursor() const;
+    bool isReadOnly() const;
+    void setReadOnly(bool ro);
+    void setTextInteractionFlags(Qt::TextInteractionFlags flags);
+    Qt::TextInteractionFlags textInteractionFlags() const;
+    void mergeCurrentCharFormat(const QTextCharFormat &modifier);
+    void setCurrentCharFormat(const QTextCharFormat &format);
+    QTextCharFormat currentCharFormat() const;
+    bool tabChangesFocus() const;
+    void setTabChangesFocus(bool b);
+    void setDocumentTitle(const QString &title);
+    QString documentTitle() const;
+    bool isUndoRedoEnabled() const;
+    void setUndoRedoEnabled(bool enable);
+    void setMaximumBlockCount(int maximum);
+    int maximumBlockCount() const;
+    QPlainTextEdit::LineWrapMode lineWrapMode() const;
+    void setLineWrapMode(QPlainTextEdit::LineWrapMode mode);
+    QTextOption::WrapMode wordWrapMode() const;
+    void setWordWrapMode(QTextOption::WrapMode policy);
+    void setBackgroundVisible(bool visible);
+    bool backgroundVisible() const;
+    void setCenterOnScroll(bool enabled);
+    bool centerOnScroll() const;
+    bool find(const QString &exp, QFlags<QTextDocument::FindFlag> options = 0);
+    QString toPlainText() const;
+    void ensureCursorVisible();
+    virtual QVariant loadResource(int type, const QUrl &name);
+    QMenu *createStandardContextMenu() /Factory/;
+    QTextCursor cursorForPosition(const QPoint &pos) const;
+    QRect cursorRect(const QTextCursor &cursor) const;
+    QRect cursorRect() const;
+    bool overwriteMode() const;
+    void setOverwriteMode(bool overwrite);
+    int tabStopWidth() const;
+    void setTabStopWidth(int width);
+    int cursorWidth() const;
+    void setCursorWidth(int width);
+    void setExtraSelections(const QList<QTextEdit::ExtraSelection> &selections);
+    QList<QTextEdit::ExtraSelection> extraSelections() const;
+    void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor);
+    bool canPaste() const;
+%If (PyQt_Printer)
+    void print(QPagedPaintDevice *printer) const /PyName=print_/;
+%End
+%If (Py_v3)
+%If (PyQt_Printer)
+    void print(QPagedPaintDevice *printer) const;
+%End
+%End
+    int blockCount() const;
+
+public slots:
+    void setPlainText(const QString &text);
+    void cut();
+    void copy();
+    void paste();
+    void undo();
+    void redo();
+    void clear();
+    void selectAll();
+    void insertPlainText(const QString &text);
+    void appendPlainText(const QString &text);
+    void appendHtml(const QString &html);
+    void centerCursor();
+
+signals:
+    void textChanged();
+    void undoAvailable(bool b);
+    void redoAvailable(bool b);
+    void copyAvailable(bool b);
+    void selectionChanged();
+    void cursorPositionChanged();
+    void updateRequest(const QRect &rect, int dy);
+    void blockCountChanged(int newBlockCount);
+    void modificationChanged(bool);
+
+protected:
+    virtual bool event(QEvent *e);
+    virtual void timerEvent(QTimerEvent *e);
+    virtual void keyPressEvent(QKeyEvent *e);
+    virtual void keyReleaseEvent(QKeyEvent *e);
+    virtual void resizeEvent(QResizeEvent *e);
+    virtual void paintEvent(QPaintEvent *e);
+    virtual void mousePressEvent(QMouseEvent *e);
+    virtual void mouseMoveEvent(QMouseEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *e);
+    virtual void mouseDoubleClickEvent(QMouseEvent *e);
+    virtual bool focusNextPrevChild(bool next);
+    virtual void contextMenuEvent(QContextMenuEvent *e);
+    virtual void dragEnterEvent(QDragEnterEvent *e);
+    virtual void dragLeaveEvent(QDragLeaveEvent *e);
+    virtual void dragMoveEvent(QDragMoveEvent *e);
+    virtual void dropEvent(QDropEvent *e);
+    virtual void focusInEvent(QFocusEvent *e);
+    virtual void focusOutEvent(QFocusEvent *e);
+    virtual void showEvent(QShowEvent *);
+    virtual void changeEvent(QEvent *e);
+    virtual void wheelEvent(QWheelEvent *e);
+    virtual void inputMethodEvent(QInputMethodEvent *);
+
+public:
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
+
+protected:
+    virtual QMimeData *createMimeDataFromSelection() const /Factory/;
+    virtual bool canInsertFromMimeData(const QMimeData *source) const;
+    virtual void insertFromMimeData(const QMimeData *source);
+    virtual void scrollContentsBy(int dx, int dy);
+    QTextBlock firstVisibleBlock() const;
+    QPointF contentOffset() const;
+    QRectF blockBoundingRect(const QTextBlock &block) const;
+    QRectF blockBoundingGeometry(const QTextBlock &block) const;
+    QAbstractTextDocumentLayout::PaintContext getPaintContext() const;
+
+public:
+    QString anchorAt(const QPoint &pos) const;
+
+public slots:
+%If (Qt_5_1_0 -)
+    void zoomIn(int range = 1);
+%End
+%If (Qt_5_1_0 -)
+    void zoomOut(int range = 1);
+%End
+
+public:
+%If (Qt_5_3_0 -)
+    void setPlaceholderText(const QString &placeholderText);
+%End
+%If (Qt_5_3_0 -)
+    QString placeholderText() const;
+%End
+%If (Qt_5_3_0 -)
+    bool find(const QRegExp &exp, QFlags<QTextDocument::FindFlag> options = 0);
+%End
+%If (Qt_5_3_0 -)
+    QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const;
+%End
+
+private:
+    QPlainTextEdit(const QPlainTextEdit &);
+};
+
+class QPlainTextDocumentLayout : QAbstractTextDocumentLayout
+{
+%TypeHeaderCode
+#include <qplaintextedit.h>
+%End
+
+public:
+    QPlainTextDocumentLayout(QTextDocument *document);
+    virtual ~QPlainTextDocumentLayout();
+    virtual void draw(QPainter *, const QAbstractTextDocumentLayout::PaintContext &);
+    virtual int hitTest(const QPointF &, Qt::HitTestAccuracy) const;
+    virtual int pageCount() const;
+    virtual QSizeF documentSize() const;
+    virtual QRectF frameBoundingRect(QTextFrame *) const;
+    virtual QRectF blockBoundingRect(const QTextBlock &block) const;
+    void ensureBlockLayout(const QTextBlock &block) const;
+    void setCursorWidth(int width);
+    int cursorWidth() const;
+    void requestUpdate();
+
+protected:
+    virtual void documentChanged(int from, int, int charsAdded);
+};
diff --git a/sip/QtWidgets/qprogressbar.sip b/sip/QtWidgets/qprogressbar.sip
new file mode 100644
index 0000000..9f17f2d
--- /dev/null
+++ b/sip/QtWidgets/qprogressbar.sip
@@ -0,0 +1,75 @@
+// qprogressbar.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QProgressBar : QWidget
+{
+%TypeHeaderCode
+#include <qprogressbar.h>
+%End
+
+public:
+    enum Direction
+    {
+        TopToBottom,
+        BottomToTop,
+    };
+
+    explicit QProgressBar(QWidget *parent /TransferThis/ = 0);
+    virtual ~QProgressBar();
+    int minimum() const;
+    int maximum() const;
+    void setRange(int minimum, int maximum);
+    int value() const;
+    virtual QString text() const;
+    void setTextVisible(bool visible);
+    bool isTextVisible() const;
+    Qt::Alignment alignment() const;
+    void setAlignment(Qt::Alignment alignment);
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    Qt::Orientation orientation() const;
+    void setInvertedAppearance(bool invert);
+    void setTextDirection(QProgressBar::Direction textDirection);
+    void setFormat(const QString &format);
+    QString format() const;
+%If (Qt_5_1_0 -)
+    void resetFormat();
+%End
+
+public slots:
+    void reset();
+    void setMinimum(int minimum);
+    void setMaximum(int maximum);
+    void setValue(int value);
+    void setOrientation(Qt::Orientation);
+
+signals:
+    void valueChanged(int value);
+
+protected:
+    void initStyleOption(QStyleOptionProgressBar *option) const;
+    virtual bool event(QEvent *e);
+    virtual void paintEvent(QPaintEvent *);
+
+private:
+    QProgressBar(const QProgressBar &);
+};
diff --git a/sip/QtWidgets/qprogressdialog.sip b/sip/QtWidgets/qprogressdialog.sip
new file mode 100644
index 0000000..f1a1ddf
--- /dev/null
+++ b/sip/QtWidgets/qprogressdialog.sip
@@ -0,0 +1,88 @@
+// qprogressdialog.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QProgressDialog : QDialog
+{
+%TypeHeaderCode
+#include <qprogressdialog.h>
+%End
+
+public:
+    QProgressDialog(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QProgressDialog();
+    void setLabel(QLabel *label /Transfer/);
+    void setCancelButton(QPushButton *button /Transfer/);
+    void setBar(QProgressBar *bar /Transfer/);
+    bool wasCanceled() const;
+    int minimum() const;
+    int maximum() const;
+    void setRange(int minimum, int maximum);
+    int value() const;
+    virtual QSize sizeHint() const;
+    QString labelText() const;
+    int minimumDuration() const;
+    void setAutoReset(bool b);
+    bool autoReset() const;
+    void setAutoClose(bool b);
+    bool autoClose() const;
+
+public slots:
+    void cancel();
+    void reset();
+    void setMaximum(int maximum);
+    void setMinimum(int minimum);
+    void setValue(int progress);
+    void setLabelText(const QString &);
+    void setCancelButtonText(const QString &);
+    void setMinimumDuration(int ms);
+
+signals:
+    void canceled();
+
+protected:
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void closeEvent(QCloseEvent *);
+    virtual void changeEvent(QEvent *);
+    virtual void showEvent(QShowEvent *e);
+    void forceShow();
+
+public:
+    void open();
+    void open(SIP_PYOBJECT slot /DocType="slot"/);
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a0, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipCpp->open(receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(0, a0);
+        }
+%End
+
+private:
+    QProgressDialog(const QProgressDialog &);
+};
diff --git a/sip/QtWidgets/qpushbutton.sip b/sip/QtWidgets/qpushbutton.sip
new file mode 100644
index 0000000..1663f44
--- /dev/null
+++ b/sip/QtWidgets/qpushbutton.sip
@@ -0,0 +1,62 @@
+// qpushbutton.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QPushButton : QAbstractButton
+{
+%TypeHeaderCode
+#include <qpushbutton.h>
+%End
+
+public:
+    explicit QPushButton(QWidget *parent /TransferThis/ = 0);
+    QPushButton(const QString &text, QWidget *parent /TransferThis/ = 0);
+    QPushButton(const QIcon &icon, const QString &text, QWidget *parent /TransferThis/ = 0);
+    virtual ~QPushButton();
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    bool autoDefault() const;
+    void setAutoDefault(bool);
+    bool isDefault() const;
+    void setDefault(bool);
+    void setMenu(QMenu *menu /KeepReference/);
+    QMenu *menu() const;
+    void setFlat(bool);
+    bool isFlat() const;
+
+public slots:
+    void showMenu();
+
+protected:
+    void initStyleOption(QStyleOptionButton *option) const;
+    virtual bool event(QEvent *e);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void focusInEvent(QFocusEvent *);
+    virtual void focusOutEvent(QFocusEvent *);
+// Protected platform specific methods.
+%If (WS_MACX)
+bool hitButton(const QPoint &pos) const;
+%End
+
+private:
+    QPushButton(const QPushButton &);
+};
diff --git a/sip/QtWidgets/qpywidgets_qlist.sip b/sip/QtWidgets/qpywidgets_qlist.sip
new file mode 100644
index 0000000..68bded5
--- /dev/null
+++ b/sip/QtWidgets/qpywidgets_qlist.sip
@@ -0,0 +1,120 @@
+// This is the SIP interface definition for the QList based mapped types
+// specific to the QtWidgets module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%MappedType QList<QWizard::WizardButton>
+        /DocType="list-of-QWizard.WizardButton"/
+{
+%TypeHeaderCode
+#include <qwizard.h>
+%End
+
+%ConvertFromTypeCode
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (!l)
+        return 0;
+
+    for (int i = 0; i < sipCpp->size(); ++i)
+    {
+        PyObject *eobj = sipConvertFromEnum(sipCpp->at(i),
+                sipType_QWizard_WizardButton);
+
+        if (!eobj)
+        {
+            Py_DECREF(l);
+
+            return 0;
+        }
+
+        PyList_SET_ITEM(l, i, eobj);
+    }
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QList<QWizard::WizardButton> *ql = new QList<QWizard::WizardButton>;
+
+    for (SIP_SSIZE_T i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete ql;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        if (!sipCanConvertToEnum(itm, sipType_QWizard_WizardButton))
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index " SIP_SSIZE_T_FORMAT " has type '%s' but 'QWizard.WizardButton' is expected",
+                    i, Py_TYPE(itm)->tp_name);
+
+            Py_DECREF(itm);
+            delete ql;
+            Py_DECREF(iter);
+            *sipIsErr = 1;
+
+            return 0;
+        }
+
+        ql->append(static_cast<QWizard::WizardButton>(SIPLong_AsLong(itm)));
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+
+    *sipCppPtr = ql;
+
+    return sipGetState(sipTransferObj);
+%End
+};
diff --git a/sip/QtWidgets/qradiobutton.sip b/sip/QtWidgets/qradiobutton.sip
new file mode 100644
index 0000000..dab4dd1
--- /dev/null
+++ b/sip/QtWidgets/qradiobutton.sip
@@ -0,0 +1,45 @@
+// qradiobutton.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QRadioButton : QAbstractButton
+{
+%TypeHeaderCode
+#include <qradiobutton.h>
+%End
+
+public:
+    explicit QRadioButton(QWidget *parent /TransferThis/ = 0);
+    QRadioButton(const QString &text, QWidget *parent /TransferThis/ = 0);
+    virtual ~QRadioButton();
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+
+protected:
+    void initStyleOption(QStyleOptionButton *button) const;
+    virtual bool hitButton(const QPoint &) const;
+    virtual bool event(QEvent *e);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+
+private:
+    QRadioButton(const QRadioButton &);
+};
diff --git a/sip/QtWidgets/qrubberband.sip b/sip/QtWidgets/qrubberband.sip
new file mode 100644
index 0000000..fb14827
--- /dev/null
+++ b/sip/QtWidgets/qrubberband.sip
@@ -0,0 +1,54 @@
+// qrubberband.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QRubberBand : QWidget
+{
+%TypeHeaderCode
+#include <qrubberband.h>
+%End
+
+public:
+    enum Shape
+    {
+        Line,
+        Rectangle,
+    };
+
+    QRubberBand(QRubberBand::Shape, QWidget *parent /TransferThis/ = 0);
+    virtual ~QRubberBand();
+    QRubberBand::Shape shape() const;
+    void setGeometry(const QRect &r);
+    void setGeometry(int ax, int ay, int aw, int ah);
+    void move(const QPoint &p);
+    void move(int ax, int ay);
+    void resize(int w, int h);
+    void resize(const QSize &s);
+
+protected:
+    void initStyleOption(QStyleOptionRubberBand *option) const;
+    virtual bool event(QEvent *e);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void changeEvent(QEvent *);
+    virtual void showEvent(QShowEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void moveEvent(QMoveEvent *);
+};
diff --git a/sip/QtWidgets/qscrollarea.sip b/sip/QtWidgets/qscrollarea.sip
new file mode 100644
index 0000000..d7c3efd
--- /dev/null
+++ b/sip/QtWidgets/qscrollarea.sip
@@ -0,0 +1,55 @@
+// qscrollarea.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QScrollArea : QAbstractScrollArea
+{
+%TypeHeaderCode
+#include <qscrollarea.h>
+%End
+
+public:
+    explicit QScrollArea(QWidget *parent /TransferThis/ = 0);
+    virtual ~QScrollArea();
+    QWidget *widget() const;
+    void setWidget(QWidget *w /Transfer/);
+    QWidget *takeWidget() /TransferBack/;
+    bool widgetResizable() const;
+    void setWidgetResizable(bool resizable);
+    Qt::Alignment alignment() const;
+    void setAlignment(Qt::Alignment);
+    virtual QSize sizeHint() const;
+    virtual bool focusNextPrevChild(bool next);
+    void ensureVisible(int x, int y, int xMargin = 50, int yMargin = 50);
+    void ensureWidgetVisible(QWidget *childWidget, int xMargin = 50, int yMargin = 50);
+
+protected:
+    virtual bool event(QEvent *);
+    virtual bool eventFilter(QObject *, QEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void scrollContentsBy(int dx, int dy);
+%If (Qt_5_2_0 -)
+    virtual QSize viewportSizeHint() const;
+%End
+
+private:
+    QScrollArea(const QScrollArea &);
+};
diff --git a/sip/QtWidgets/qscrollbar.sip b/sip/QtWidgets/qscrollbar.sip
new file mode 100644
index 0000000..29b9e03
--- /dev/null
+++ b/sip/QtWidgets/qscrollbar.sip
@@ -0,0 +1,49 @@
+// qscrollbar.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QScrollBar : QAbstractSlider
+{
+%TypeHeaderCode
+#include <qscrollbar.h>
+%End
+
+public:
+    explicit QScrollBar(QWidget *parent /TransferThis/ = 0);
+    QScrollBar(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0);
+    virtual ~QScrollBar();
+    virtual QSize sizeHint() const;
+    virtual bool event(QEvent *event);
+
+protected:
+    void initStyleOption(QStyleOptionSlider *option) const;
+    virtual void paintEvent(QPaintEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void hideEvent(QHideEvent *);
+    virtual void contextMenuEvent(QContextMenuEvent *);
+    virtual void wheelEvent(QWheelEvent *);
+    virtual void sliderChange(QAbstractSlider::SliderChange change);
+
+private:
+    QScrollBar(const QScrollBar &);
+};
diff --git a/sip/QtWidgets/qscroller.sip b/sip/QtWidgets/qscroller.sip
new file mode 100644
index 0000000..f439121
--- /dev/null
+++ b/sip/QtWidgets/qscroller.sip
@@ -0,0 +1,88 @@
+// qscroller.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QScroller : QObject
+{
+%TypeHeaderCode
+#include <qscroller.h>
+%End
+
+public:
+    enum State
+    {
+        Inactive,
+        Pressed,
+        Dragging,
+        Scrolling,
+    };
+
+    enum ScrollerGestureType
+    {
+        TouchGesture,
+        LeftMouseButtonGesture,
+        RightMouseButtonGesture,
+        MiddleMouseButtonGesture,
+    };
+
+    enum Input
+    {
+        InputPress,
+        InputMove,
+        InputRelease,
+    };
+
+    static bool hasScroller(QObject *target);
+    static QScroller *scroller(QObject *target);
+    static Qt::GestureType grabGesture(QObject *target, QScroller::ScrollerGestureType scrollGestureType = QScroller::TouchGesture);
+    static Qt::GestureType grabbedGesture(QObject *target);
+    static void ungrabGesture(QObject *target);
+    static QList<QScroller*> activeScrollers();
+    QObject *target() const;
+    QScroller::State state() const;
+    bool handleInput(QScroller::Input input, const QPointF &position, qint64 timestamp = 0);
+    void stop();
+    QPointF velocity() const;
+    QPointF finalPosition() const;
+    QPointF pixelPerMeter() const;
+    QScrollerProperties scrollerProperties() const;
+    void setSnapPositionsX(const QList<qreal> &positions);
+    void setSnapPositionsX(qreal first, qreal interval);
+    void setSnapPositionsY(const QList<qreal> &positions);
+    void setSnapPositionsY(qreal first, qreal interval);
+
+public slots:
+    void setScrollerProperties(const QScrollerProperties &prop);
+    void scrollTo(const QPointF &pos);
+    void scrollTo(const QPointF &pos, int scrollTime);
+    void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin);
+    void ensureVisible(const QRectF &rect, qreal xmargin, qreal ymargin, int scrollTime);
+    void resendPrepareEvent();
+
+signals:
+    void stateChanged(QScroller::State newstate);
+    void scrollerPropertiesChanged(const QScrollerProperties &);
+
+private:
+    QScroller(QObject *target);
+    virtual ~QScroller();
+    QScroller(const QScroller &);
+};
diff --git a/sip/QtWidgets/qscrollerproperties.sip b/sip/QtWidgets/qscrollerproperties.sip
new file mode 100644
index 0000000..799901e
--- /dev/null
+++ b/sip/QtWidgets/qscrollerproperties.sip
@@ -0,0 +1,80 @@
+// qscrollerproperties.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QScrollerProperties
+{
+%TypeHeaderCode
+#include <qscrollerproperties.h>
+%End
+
+public:
+    QScrollerProperties();
+    QScrollerProperties(const QScrollerProperties &sp);
+    virtual ~QScrollerProperties();
+    bool operator==(const QScrollerProperties &sp) const;
+    bool operator!=(const QScrollerProperties &sp) const;
+    static void setDefaultScrollerProperties(const QScrollerProperties &sp);
+    static void unsetDefaultScrollerProperties();
+
+    enum OvershootPolicy
+    {
+        OvershootWhenScrollable,
+        OvershootAlwaysOff,
+        OvershootAlwaysOn,
+    };
+
+    enum FrameRates
+    {
+        Standard,
+        Fps60,
+        Fps30,
+        Fps20,
+    };
+
+    enum ScrollMetric
+    {
+        MousePressEventDelay,
+        DragStartDistance,
+        DragVelocitySmoothingFactor,
+        AxisLockThreshold,
+        ScrollingCurve,
+        DecelerationFactor,
+        MinimumVelocity,
+        MaximumVelocity,
+        MaximumClickThroughVelocity,
+        AcceleratingFlickMaximumTime,
+        AcceleratingFlickSpeedupFactor,
+        SnapPositionRatio,
+        SnapTime,
+        OvershootDragResistanceFactor,
+        OvershootDragDistanceFactor,
+        OvershootScrollDistanceFactor,
+        OvershootScrollTime,
+        HorizontalOvershootPolicy,
+        VerticalOvershootPolicy,
+        FrameRate,
+        ScrollMetricCount,
+    };
+
+    QVariant scrollMetric(QScrollerProperties::ScrollMetric metric) const;
+    void setScrollMetric(QScrollerProperties::ScrollMetric metric, const QVariant &value);
+};
diff --git a/sip/QtWidgets/qshortcut.sip b/sip/QtWidgets/qshortcut.sip
new file mode 100644
index 0000000..ed5a174
--- /dev/null
+++ b/sip/QtWidgets/qshortcut.sip
@@ -0,0 +1,101 @@
+// qshortcut.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QShortcut : QObject
+{
+%TypeHeaderCode
+#include <qshortcut.h>
+%End
+
+public:
+    explicit QShortcut(QWidget *parent /TransferThis/);
+    QShortcut(const QKeySequence &key, QWidget *parent /TransferThis/, SIP_PYOBJECT member /DocType="slot"/ = 0, SIP_PYOBJECT ambiguousMember /DocType="slot"/ = 0, Qt::ShortcutContext context = Qt::WindowShortcut) [(const QKeySequence &key, QWidget *parent, const char *member = 0, const char *ambiguousMember = 0, Qt::ShortcutContext context = Qt::WindowShortcut)];
+%MethodCode
+        // Construct the shortcut without any connections.
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp = new sipQShortcut(*a0, a1, 0, 0, a4);
+        Py_END_ALLOW_THREADS
+        
+        if (a2)
+        {
+            QObject *rx2;
+            QByteArray member2;
+        
+            if ((sipError = pyqt5_qtwidgets_get_connection_parts(a2, sipCpp, "()", false, &rx2, member2)) == sipErrorNone)
+            {
+                Py_BEGIN_ALLOW_THREADS
+                QObject::connect(sipCpp, SIGNAL(activated()), rx2,
+                        member2.constData());
+                Py_END_ALLOW_THREADS
+            }
+            else
+            {
+                delete sipCpp;
+                
+                if (sipError == sipErrorContinue)
+                    sipError = sipBadCallableArg(2, a2);
+            }
+        }
+        
+        if (a3)
+        {
+            QObject *rx3;
+            QByteArray member3;
+        
+            if ((sipError = pyqt5_qtwidgets_get_connection_parts(a3, sipCpp, "()", false, &rx3, member3)) == sipErrorNone)
+            {
+                Py_BEGIN_ALLOW_THREADS
+                QObject::connect(sipCpp, SIGNAL(activatedAmbiguously()), rx3,
+                        member3.constData());
+                Py_END_ALLOW_THREADS
+            }
+            else
+            {
+                delete sipCpp;
+                
+                if (sipError == sipErrorContinue)
+                    sipError = sipBadCallableArg(3, a3);
+            }
+        }
+%End
+
+    virtual ~QShortcut();
+    void setKey(const QKeySequence &key);
+    QKeySequence key() const;
+    void setEnabled(bool enable);
+    bool isEnabled() const;
+    void setContext(Qt::ShortcutContext context);
+    Qt::ShortcutContext context() const;
+    void setWhatsThis(const QString &text);
+    QString whatsThis() const;
+    int id() const;
+    QWidget *parentWidget() const;
+    void setAutoRepeat(bool on);
+    bool autoRepeat() const;
+
+signals:
+    void activated();
+    void activatedAmbiguously();
+
+protected:
+    virtual bool event(QEvent *e);
+};
diff --git a/sip/QtWidgets/qsizegrip.sip b/sip/QtWidgets/qsizegrip.sip
new file mode 100644
index 0000000..a9e0f49
--- /dev/null
+++ b/sip/QtWidgets/qsizegrip.sip
@@ -0,0 +1,48 @@
+// qsizegrip.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSizeGrip : QWidget
+{
+%TypeHeaderCode
+#include <qsizegrip.h>
+%End
+
+public:
+    explicit QSizeGrip(QWidget *parent /TransferThis/);
+    virtual ~QSizeGrip();
+    virtual QSize sizeHint() const;
+    virtual void setVisible(bool);
+
+protected:
+    virtual void paintEvent(QPaintEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *mouseEvent);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual bool eventFilter(QObject *, QEvent *);
+    virtual bool event(QEvent *);
+    virtual void moveEvent(QMoveEvent *moveEvent);
+    virtual void showEvent(QShowEvent *showEvent);
+    virtual void hideEvent(QHideEvent *hideEvent);
+
+private:
+    QSizeGrip(const QSizeGrip &);
+};
diff --git a/sip/QtWidgets/qsizepolicy.sip b/sip/QtWidgets/qsizepolicy.sip
new file mode 100644
index 0000000..519297a
--- /dev/null
+++ b/sip/QtWidgets/qsizepolicy.sip
@@ -0,0 +1,109 @@
+// qsizepolicy.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qsizepolicy.h>
+%End
+
+class QSizePolicy
+{
+%TypeHeaderCode
+#include <qsizepolicy.h>
+%End
+
+public:
+    enum PolicyFlag
+    {
+        GrowFlag,
+        ExpandFlag,
+        ShrinkFlag,
+        IgnoreFlag,
+    };
+
+    enum Policy
+    {
+        Fixed,
+        Minimum,
+        Maximum,
+        Preferred,
+        MinimumExpanding,
+        Expanding,
+        Ignored,
+    };
+
+    QSizePolicy();
+    QSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical, QSizePolicy::ControlType type = QSizePolicy::DefaultType);
+    QSizePolicy(const QVariant &variant) /NoDerived/;
+%MethodCode
+        sipCpp = new QSizePolicy(a0->value<QSizePolicy>());
+%End
+
+    QSizePolicy::Policy horizontalPolicy() const;
+    QSizePolicy::Policy verticalPolicy() const;
+    void setHorizontalPolicy(QSizePolicy::Policy d);
+    void setVerticalPolicy(QSizePolicy::Policy d);
+    Qt::Orientations expandingDirections() const;
+    void setHeightForWidth(bool b);
+    bool hasHeightForWidth() const;
+    bool operator==(const QSizePolicy &s) const;
+    bool operator!=(const QSizePolicy &s) const;
+    int horizontalStretch() const;
+    int verticalStretch() const;
+    void setHorizontalStretch(int stretchFactor);
+    void setVerticalStretch(int stretchFactor);
+    void transpose();
+
+    enum ControlType
+    {
+        DefaultType,
+        ButtonBox,
+        CheckBox,
+        ComboBox,
+        Frame,
+        GroupBox,
+        Label,
+        Line,
+        LineEdit,
+        PushButton,
+        RadioButton,
+        Slider,
+        SpinBox,
+        TabWidget,
+        ToolButton,
+    };
+
+    typedef QFlags<QSizePolicy::ControlType> ControlTypes;
+    QSizePolicy::ControlType controlType() const;
+    void setControlType(QSizePolicy::ControlType type);
+    void setWidthForHeight(bool b);
+    bool hasWidthForHeight() const;
+%If (Qt_5_2_0 -)
+    bool retainSizeWhenHidden() const;
+%End
+%If (Qt_5_2_0 -)
+    void setRetainSizeWhenHidden(bool retainSize);
+%End
+};
+
+QDataStream &operator<<(QDataStream &, const QSizePolicy & /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &, QSizePolicy & /Constrained/) /ReleaseGIL/;
+QFlags<QSizePolicy::ControlType> operator|(QSizePolicy::ControlType f1, QFlags<QSizePolicy::ControlType> f2);
diff --git a/sip/QtWidgets/qslider.sip b/sip/QtWidgets/qslider.sip
new file mode 100644
index 0000000..13aeeab
--- /dev/null
+++ b/sip/QtWidgets/qslider.sip
@@ -0,0 +1,60 @@
+// qslider.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSlider : QAbstractSlider
+{
+%TypeHeaderCode
+#include <qslider.h>
+%End
+
+public:
+    enum TickPosition
+    {
+        NoTicks,
+        TicksAbove,
+        TicksLeft,
+        TicksBelow,
+        TicksRight,
+        TicksBothSides,
+    };
+
+    explicit QSlider(QWidget *parent /TransferThis/ = 0);
+    QSlider(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0);
+    virtual ~QSlider();
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    void setTickPosition(QSlider::TickPosition position);
+    QSlider::TickPosition tickPosition() const;
+    void setTickInterval(int ti);
+    int tickInterval() const;
+    virtual bool event(QEvent *event);
+
+protected:
+    void initStyleOption(QStyleOptionSlider *option) const;
+    virtual void paintEvent(QPaintEvent *ev);
+    virtual void mousePressEvent(QMouseEvent *ev);
+    virtual void mouseReleaseEvent(QMouseEvent *ev);
+    virtual void mouseMoveEvent(QMouseEvent *ev);
+
+private:
+    QSlider(const QSlider &);
+};
diff --git a/sip/QtWidgets/qspinbox.sip b/sip/QtWidgets/qspinbox.sip
new file mode 100644
index 0000000..c7ca846
--- /dev/null
+++ b/sip/QtWidgets/qspinbox.sip
@@ -0,0 +1,110 @@
+// qspinbox.sip generated by MetaSIP on Fri Sep 12 22:59:02 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSpinBox : QAbstractSpinBox
+{
+%TypeHeaderCode
+#include <qspinbox.h>
+%End
+
+public:
+    explicit QSpinBox(QWidget *parent /TransferThis/ = 0);
+    virtual ~QSpinBox();
+    int value() const;
+    QString prefix() const;
+    void setPrefix(const QString &p);
+    QString suffix() const;
+    void setSuffix(const QString &s);
+    QString cleanText() const;
+    int singleStep() const;
+    void setSingleStep(int val);
+    int minimum() const;
+    void setMinimum(int min);
+    int maximum() const;
+    void setMaximum(int max);
+    void setRange(int min, int max);
+
+protected:
+    virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const;
+    virtual int valueFromText(const QString &text) const;
+    virtual QString textFromValue(int v) const;
+    virtual void fixup(QString &str /In,Out/) const;
+    virtual bool event(QEvent *e);
+
+public slots:
+    void setValue(int val);
+
+signals:
+    void valueChanged(int);
+    void valueChanged(const QString &);
+
+public:
+%If (Qt_5_2_0 -)
+    int displayIntegerBase() const;
+%End
+%If (Qt_5_2_0 -)
+    void setDisplayIntegerBase(int base);
+%End
+
+private:
+    QSpinBox(const QSpinBox &);
+};
+
+class QDoubleSpinBox : QAbstractSpinBox
+{
+%TypeHeaderCode
+#include <qspinbox.h>
+%End
+
+public:
+    explicit QDoubleSpinBox(QWidget *parent /TransferThis/ = 0);
+    virtual ~QDoubleSpinBox();
+    double value() const;
+    QString prefix() const;
+    void setPrefix(const QString &p);
+    QString suffix() const;
+    void setSuffix(const QString &s);
+    QString cleanText() const;
+    double singleStep() const;
+    void setSingleStep(double val);
+    double minimum() const;
+    void setMinimum(double min);
+    double maximum() const;
+    void setMaximum(double max);
+    void setRange(double min, double max);
+    int decimals() const;
+    void setDecimals(int prec);
+    virtual QValidator::State validate(QString &input /In,Out/, int &pos /In,Out/) const;
+    virtual double valueFromText(const QString &text) const;
+    virtual QString textFromValue(double v) const;
+    virtual void fixup(QString &str /In,Out/) const;
+
+public slots:
+    void setValue(double val);
+
+signals:
+    void valueChanged(double);
+    void valueChanged(const QString &);
+
+private:
+    QDoubleSpinBox(const QDoubleSpinBox &);
+};
diff --git a/sip/QtWidgets/qsplashscreen.sip b/sip/QtWidgets/qsplashscreen.sip
new file mode 100644
index 0000000..14eb5e4
--- /dev/null
+++ b/sip/QtWidgets/qsplashscreen.sip
@@ -0,0 +1,55 @@
+// qsplashscreen.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSplashScreen : QWidget
+{
+%TypeHeaderCode
+#include <qsplashscreen.h>
+%End
+
+public:
+    QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags flags = 0);
+    QSplashScreen(QWidget *parent /TransferThis/, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags flags = 0);
+    virtual ~QSplashScreen();
+    void setPixmap(const QPixmap &pixmap);
+    const QPixmap pixmap() const;
+    void finish(QWidget *w);
+    void repaint();
+%If (Qt_5_2_0 -)
+    QString message() const;
+%End
+
+public slots:
+    void showMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black);
+    void clearMessage();
+
+signals:
+    void messageChanged(const QString &message);
+
+protected:
+    virtual void drawContents(QPainter *painter);
+    virtual bool event(QEvent *e);
+    virtual void mousePressEvent(QMouseEvent *);
+
+private:
+    QSplashScreen(const QSplashScreen &);
+};
diff --git a/sip/QtWidgets/qsplitter.sip b/sip/QtWidgets/qsplitter.sip
new file mode 100644
index 0000000..4cea453
--- /dev/null
+++ b/sip/QtWidgets/qsplitter.sip
@@ -0,0 +1,103 @@
+// qsplitter.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSplitter : QFrame
+{
+%TypeHeaderCode
+#include <qsplitter.h>
+%End
+
+public:
+    explicit QSplitter(QWidget *parent /TransferThis/ = 0);
+    QSplitter(Qt::Orientation orientation, QWidget *parent /TransferThis/ = 0);
+    virtual ~QSplitter();
+    void addWidget(QWidget *widget /Transfer/);
+    void insertWidget(int index, QWidget *widget /Transfer/);
+    void setOrientation(Qt::Orientation);
+    Qt::Orientation orientation() const;
+    void setChildrenCollapsible(bool);
+    bool childrenCollapsible() const;
+    void setCollapsible(int index, bool);
+    bool isCollapsible(int index) const;
+    void setOpaqueResize(bool opaque = true);
+    bool opaqueResize() const;
+    void refresh();
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    QList<int> sizes() const;
+    void setSizes(const QList<int> &list);
+    QByteArray saveState() const;
+    bool restoreState(const QByteArray &state);
+    int handleWidth() const;
+    void setHandleWidth(int);
+    int indexOf(QWidget *w) const;
+    QWidget *widget(int index) const;
+    int count() const /__len__/;
+    void getRange(int index, int *, int *) const;
+    QSplitterHandle *handle(int index) const /Transfer/;
+    void setStretchFactor(int index, int stretch);
+
+signals:
+    void splitterMoved(int pos, int index);
+
+protected:
+    virtual QSplitterHandle *createHandle() /Transfer/;
+    virtual void childEvent(QChildEvent *);
+    virtual bool event(QEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void changeEvent(QEvent *);
+    void moveSplitter(int pos, int index);
+    void setRubberBand(int position);
+    int closestLegalPosition(int, int);
+
+private:
+    QSplitter(const QSplitter &);
+};
+
+class QSplitterHandle : QWidget
+{
+%TypeHeaderCode
+#include <qsplitter.h>
+%End
+
+public:
+    QSplitterHandle(Qt::Orientation o, QSplitter *parent /TransferThis/);
+    virtual ~QSplitterHandle();
+    void setOrientation(Qt::Orientation o);
+    Qt::Orientation orientation() const;
+    bool opaqueResize() const;
+    QSplitter *splitter() const;
+    virtual QSize sizeHint() const;
+
+protected:
+    virtual void paintEvent(QPaintEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual bool event(QEvent *);
+    void moveSplitter(int p);
+    int closestLegalPosition(int p);
+    virtual void resizeEvent(QResizeEvent *);
+
+private:
+    QSplitterHandle(const QSplitterHandle &);
+};
diff --git a/sip/QtWidgets/qstackedlayout.sip b/sip/QtWidgets/qstackedlayout.sip
new file mode 100644
index 0000000..dba78e4
--- /dev/null
+++ b/sip/QtWidgets/qstackedlayout.sip
@@ -0,0 +1,116 @@
+// qstackedlayout.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStackedLayout : QLayout
+{
+%TypeHeaderCode
+#include <qstackedlayout.h>
+%End
+
+public:
+    enum StackingMode
+    {
+        StackOne,
+        StackAll,
+    };
+
+    QStackedLayout();
+    explicit QStackedLayout(QWidget *parent /TransferThis/);
+    explicit QStackedLayout(QLayout *parentLayout /TransferThis/);
+    virtual ~QStackedLayout();
+    int addWidget(QWidget *w /GetWrapper/);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->addWidget(a0);
+        Py_END_ALLOW_THREADS
+        
+        // The layout's parent widget (if there is one) will now have ownership.
+        QWidget *parent = sipCpp->parentWidget();
+        
+        if (parent)
+        {
+            PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget);
+        
+            if (py_parent)
+                sipTransferTo(a0Wrapper, py_parent);
+        }
+        else
+        {
+            // For now give the Python ownership to the layout.  This maintains
+            // compatibility with previous versions and allows addWidget(QWidget()).
+            sipTransferTo(a0Wrapper, sipSelf);
+        }
+%End
+
+    int insertWidget(int index, QWidget *w /GetWrapper/);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->insertWidget(a0, a1);
+        Py_END_ALLOW_THREADS
+        
+        // The layout's parent widget (if there is one) will now have ownership.
+        QWidget *parent = sipCpp->parentWidget();
+        
+        if (parent)
+        {
+            PyObject *py_parent = sipGetPyObject(parent, sipType_QWidget);
+        
+            if (py_parent)
+                sipTransferTo(a1Wrapper, py_parent);
+        }
+        else
+        {
+            // For now give the Python ownership to the layout.  This maintains
+            // compatibility with previous versions and allows insertWidget(QWidget()).
+            sipTransferTo(a1Wrapper, sipSelf);
+        }
+%End
+
+    QWidget *currentWidget() const;
+    int currentIndex() const;
+    QWidget *widget(int) const;
+    virtual QWidget *widget();
+    virtual int count() const;
+    virtual void addItem(QLayoutItem *item /Transfer/);
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSize() const;
+    virtual QLayoutItem *itemAt(int) const;
+    virtual QLayoutItem *takeAt(int) /TransferBack/;
+    virtual void setGeometry(const QRect &rect);
+
+signals:
+    void widgetRemoved(int index);
+    void currentChanged(int index);
+
+public slots:
+    void setCurrentIndex(int index);
+    void setCurrentWidget(QWidget *w);
+
+public:
+    QStackedLayout::StackingMode stackingMode() const;
+    void setStackingMode(QStackedLayout::StackingMode stackingMode);
+    virtual bool hasHeightForWidth() const;
+    virtual int heightForWidth(int width) const;
+
+private:
+    QStackedLayout(const QStackedLayout &);
+};
diff --git a/sip/QtWidgets/qstackedwidget.sip b/sip/QtWidgets/qstackedwidget.sip
new file mode 100644
index 0000000..0579da2
--- /dev/null
+++ b/sip/QtWidgets/qstackedwidget.sip
@@ -0,0 +1,54 @@
+// qstackedwidget.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStackedWidget : QFrame
+{
+%TypeHeaderCode
+#include <qstackedwidget.h>
+%End
+
+public:
+    explicit QStackedWidget(QWidget *parent /TransferThis/ = 0);
+    virtual ~QStackedWidget();
+    int addWidget(QWidget *w /Transfer/);
+    int insertWidget(int index, QWidget *w /Transfer/);
+    void removeWidget(QWidget *w);
+    QWidget *currentWidget() const;
+    int currentIndex() const;
+    int indexOf(QWidget *) const;
+    QWidget *widget(int) const;
+    int count() const /__len__/;
+
+public slots:
+    void setCurrentIndex(int index);
+    void setCurrentWidget(QWidget *w);
+
+signals:
+    void currentChanged(int);
+    void widgetRemoved(int index);
+
+protected:
+    virtual bool event(QEvent *e);
+
+private:
+    QStackedWidget(const QStackedWidget &);
+};
diff --git a/sip/QtWidgets/qstatusbar.sip b/sip/QtWidgets/qstatusbar.sip
new file mode 100644
index 0000000..2cc6356
--- /dev/null
+++ b/sip/QtWidgets/qstatusbar.sip
@@ -0,0 +1,58 @@
+// qstatusbar.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStatusBar : QWidget
+{
+%TypeHeaderCode
+#include <qstatusbar.h>
+%End
+
+public:
+    explicit QStatusBar(QWidget *parent /TransferThis/ = 0);
+    virtual ~QStatusBar();
+    void addWidget(QWidget *widget /Transfer/, int stretch = 0);
+    void addPermanentWidget(QWidget *widget /Transfer/, int stretch = 0);
+    void removeWidget(QWidget *widget);
+    void setSizeGripEnabled(bool);
+    bool isSizeGripEnabled() const;
+    QString currentMessage() const;
+    int insertWidget(int index, QWidget *widget /Transfer/, int stretch = 0);
+    int insertPermanentWidget(int index, QWidget *widget /Transfer/, int stretch = 0);
+
+public slots:
+    void showMessage(const QString &message, int msecs = 0);
+    void clearMessage();
+
+signals:
+    void messageChanged(const QString &text);
+
+protected:
+    virtual void paintEvent(QPaintEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    void reformat();
+    void hideOrShow();
+    virtual bool event(QEvent *);
+    virtual void showEvent(QShowEvent *);
+
+private:
+    QStatusBar(const QStatusBar &);
+};
diff --git a/sip/QtWidgets/qstyle.sip b/sip/QtWidgets/qstyle.sip
new file mode 100644
index 0000000..4a2f442
--- /dev/null
+++ b/sip/QtWidgets/qstyle.sip
@@ -0,0 +1,675 @@
+// qstyle.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qstyle.h>
+%End
+
+class QStyle : QObject
+{
+%TypeHeaderCode
+#include <qstyle.h>
+%End
+
+public:
+    QStyle();
+    virtual ~QStyle();
+    virtual void polish(QWidget *);
+    virtual void unpolish(QWidget *);
+    virtual void polish(QApplication *);
+    virtual void unpolish(QApplication *);
+    virtual void polish(QPalette & /In,Out/);
+    virtual QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const;
+    virtual QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const;
+    virtual void drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const;
+    virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const;
+    virtual QPalette standardPalette() const;
+
+    enum StateFlag
+    {
+        State_None,
+        State_Enabled,
+        State_Raised,
+        State_Sunken,
+        State_Off,
+        State_NoChange,
+        State_On,
+        State_DownArrow,
+        State_Horizontal,
+        State_HasFocus,
+        State_Top,
+        State_Bottom,
+        State_FocusAtBorder,
+        State_AutoRaise,
+        State_MouseOver,
+        State_UpArrow,
+        State_Selected,
+        State_Active,
+        State_Open,
+        State_Children,
+        State_Item,
+        State_Sibling,
+        State_Editing,
+        State_KeyboardFocusChange,
+        State_ReadOnly,
+        State_Window,
+        State_Small,
+        State_Mini,
+    };
+
+    typedef QFlags<QStyle::StateFlag> State;
+
+    enum PrimitiveElement
+    {
+        PE_Frame,
+        PE_FrameDefaultButton,
+        PE_FrameDockWidget,
+        PE_FrameFocusRect,
+        PE_FrameGroupBox,
+        PE_FrameLineEdit,
+        PE_FrameMenu,
+        PE_FrameStatusBar,
+        PE_FrameTabWidget,
+        PE_FrameWindow,
+        PE_FrameButtonBevel,
+        PE_FrameButtonTool,
+        PE_FrameTabBarBase,
+        PE_PanelButtonCommand,
+        PE_PanelButtonBevel,
+        PE_PanelButtonTool,
+        PE_PanelMenuBar,
+        PE_PanelToolBar,
+        PE_PanelLineEdit,
+        PE_IndicatorArrowDown,
+        PE_IndicatorArrowLeft,
+        PE_IndicatorArrowRight,
+        PE_IndicatorArrowUp,
+        PE_IndicatorBranch,
+        PE_IndicatorButtonDropDown,
+        PE_IndicatorViewItemCheck,
+        PE_IndicatorCheckBox,
+        PE_IndicatorDockWidgetResizeHandle,
+        PE_IndicatorHeaderArrow,
+        PE_IndicatorMenuCheckMark,
+        PE_IndicatorProgressChunk,
+        PE_IndicatorRadioButton,
+        PE_IndicatorSpinDown,
+        PE_IndicatorSpinMinus,
+        PE_IndicatorSpinPlus,
+        PE_IndicatorSpinUp,
+        PE_IndicatorToolBarHandle,
+        PE_IndicatorToolBarSeparator,
+        PE_PanelTipLabel,
+        PE_IndicatorTabTear,
+        PE_PanelScrollAreaCorner,
+        PE_Widget,
+        PE_IndicatorColumnViewArrow,
+        PE_FrameStatusBarItem,
+        PE_IndicatorItemViewItemCheck,
+        PE_IndicatorItemViewItemDrop,
+        PE_PanelItemViewItem,
+        PE_PanelItemViewRow,
+        PE_PanelStatusBar,
+        PE_IndicatorTabClose,
+        PE_PanelMenu,
+        PE_CustomBase,
+    };
+
+    virtual void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const = 0;
+
+    enum ControlElement
+    {
+        CE_PushButton,
+        CE_PushButtonBevel,
+        CE_PushButtonLabel,
+        CE_CheckBox,
+        CE_CheckBoxLabel,
+        CE_RadioButton,
+        CE_RadioButtonLabel,
+        CE_TabBarTab,
+        CE_TabBarTabShape,
+        CE_TabBarTabLabel,
+        CE_ProgressBar,
+        CE_ProgressBarGroove,
+        CE_ProgressBarContents,
+        CE_ProgressBarLabel,
+        CE_MenuItem,
+        CE_MenuScroller,
+        CE_MenuVMargin,
+        CE_MenuHMargin,
+        CE_MenuTearoff,
+        CE_MenuEmptyArea,
+        CE_MenuBarItem,
+        CE_MenuBarEmptyArea,
+        CE_ToolButtonLabel,
+        CE_Header,
+        CE_HeaderSection,
+        CE_HeaderLabel,
+        CE_ToolBoxTab,
+        CE_SizeGrip,
+        CE_Splitter,
+        CE_RubberBand,
+        CE_DockWidgetTitle,
+        CE_ScrollBarAddLine,
+        CE_ScrollBarSubLine,
+        CE_ScrollBarAddPage,
+        CE_ScrollBarSubPage,
+        CE_ScrollBarSlider,
+        CE_ScrollBarFirst,
+        CE_ScrollBarLast,
+        CE_FocusFrame,
+        CE_ComboBoxLabel,
+        CE_ToolBar,
+        CE_ToolBoxTabShape,
+        CE_ToolBoxTabLabel,
+        CE_HeaderEmptyArea,
+        CE_ColumnViewGrip,
+        CE_ItemViewItem,
+        CE_ShapedFrame,
+        CE_CustomBase,
+    };
+
+    virtual void drawControl(QStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *widget = 0) const = 0;
+
+    enum SubElement
+    {
+        SE_PushButtonContents,
+        SE_PushButtonFocusRect,
+        SE_CheckBoxIndicator,
+        SE_CheckBoxContents,
+        SE_CheckBoxFocusRect,
+        SE_CheckBoxClickRect,
+        SE_RadioButtonIndicator,
+        SE_RadioButtonContents,
+        SE_RadioButtonFocusRect,
+        SE_RadioButtonClickRect,
+        SE_ComboBoxFocusRect,
+        SE_SliderFocusRect,
+        SE_ProgressBarGroove,
+        SE_ProgressBarContents,
+        SE_ProgressBarLabel,
+        SE_ToolBoxTabContents,
+        SE_HeaderLabel,
+        SE_HeaderArrow,
+        SE_TabWidgetTabBar,
+        SE_TabWidgetTabPane,
+        SE_TabWidgetTabContents,
+        SE_TabWidgetLeftCorner,
+        SE_TabWidgetRightCorner,
+        SE_ViewItemCheckIndicator,
+        SE_TabBarTearIndicator,
+        SE_TreeViewDisclosureItem,
+        SE_LineEditContents,
+        SE_FrameContents,
+        SE_DockWidgetCloseButton,
+        SE_DockWidgetFloatButton,
+        SE_DockWidgetTitleBarText,
+        SE_DockWidgetIcon,
+        SE_CheckBoxLayoutItem,
+        SE_ComboBoxLayoutItem,
+        SE_DateTimeEditLayoutItem,
+        SE_DialogButtonBoxLayoutItem,
+        SE_LabelLayoutItem,
+        SE_ProgressBarLayoutItem,
+        SE_PushButtonLayoutItem,
+        SE_RadioButtonLayoutItem,
+        SE_SliderLayoutItem,
+        SE_SpinBoxLayoutItem,
+        SE_ToolButtonLayoutItem,
+        SE_FrameLayoutItem,
+        SE_GroupBoxLayoutItem,
+        SE_TabWidgetLayoutItem,
+        SE_ItemViewItemCheckIndicator,
+        SE_ItemViewItemDecoration,
+        SE_ItemViewItemText,
+        SE_ItemViewItemFocusRect,
+        SE_TabBarTabLeftButton,
+        SE_TabBarTabRightButton,
+        SE_TabBarTabText,
+        SE_ShapedFrameContents,
+        SE_ToolBarHandle,
+        SE_CustomBase,
+    };
+
+    virtual QRect subElementRect(QStyle::SubElement subElement, const QStyleOption *option, const QWidget *widget = 0) const = 0;
+
+    enum ComplexControl
+    {
+        CC_SpinBox,
+        CC_ComboBox,
+        CC_ScrollBar,
+        CC_Slider,
+        CC_ToolButton,
+        CC_TitleBar,
+        CC_Dial,
+        CC_GroupBox,
+        CC_MdiControls,
+        CC_CustomBase,
+    };
+
+    enum SubControl
+    {
+        SC_None,
+        SC_ScrollBarAddLine,
+        SC_ScrollBarSubLine,
+        SC_ScrollBarAddPage,
+        SC_ScrollBarSubPage,
+        SC_ScrollBarFirst,
+        SC_ScrollBarLast,
+        SC_ScrollBarSlider,
+        SC_ScrollBarGroove,
+        SC_SpinBoxUp,
+        SC_SpinBoxDown,
+        SC_SpinBoxFrame,
+        SC_SpinBoxEditField,
+        SC_ComboBoxFrame,
+        SC_ComboBoxEditField,
+        SC_ComboBoxArrow,
+        SC_ComboBoxListBoxPopup,
+        SC_SliderGroove,
+        SC_SliderHandle,
+        SC_SliderTickmarks,
+        SC_ToolButton,
+        SC_ToolButtonMenu,
+        SC_TitleBarSysMenu,
+        SC_TitleBarMinButton,
+        SC_TitleBarMaxButton,
+        SC_TitleBarCloseButton,
+        SC_TitleBarNormalButton,
+        SC_TitleBarShadeButton,
+        SC_TitleBarUnshadeButton,
+        SC_TitleBarContextHelpButton,
+        SC_TitleBarLabel,
+        SC_DialGroove,
+        SC_DialHandle,
+        SC_DialTickmarks,
+        SC_GroupBoxCheckBox,
+        SC_GroupBoxLabel,
+        SC_GroupBoxContents,
+        SC_GroupBoxFrame,
+        SC_MdiMinButton,
+        SC_MdiNormalButton,
+        SC_MdiCloseButton,
+        SC_CustomBase,
+        SC_All,
+    };
+
+    typedef QFlags<QStyle::SubControl> SubControls;
+    virtual void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget = 0) const = 0;
+    virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget = 0) const = 0;
+    virtual QRect subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget = 0) const = 0;
+
+    enum PixelMetric
+    {
+        PM_ButtonMargin,
+        PM_ButtonDefaultIndicator,
+        PM_MenuButtonIndicator,
+        PM_ButtonShiftHorizontal,
+        PM_ButtonShiftVertical,
+        PM_DefaultFrameWidth,
+        PM_SpinBoxFrameWidth,
+        PM_ComboBoxFrameWidth,
+        PM_MaximumDragDistance,
+        PM_ScrollBarExtent,
+        PM_ScrollBarSliderMin,
+        PM_SliderThickness,
+        PM_SliderControlThickness,
+        PM_SliderLength,
+        PM_SliderTickmarkOffset,
+        PM_SliderSpaceAvailable,
+        PM_DockWidgetSeparatorExtent,
+        PM_DockWidgetHandleExtent,
+        PM_DockWidgetFrameWidth,
+        PM_TabBarTabOverlap,
+        PM_TabBarTabHSpace,
+        PM_TabBarTabVSpace,
+        PM_TabBarBaseHeight,
+        PM_TabBarBaseOverlap,
+        PM_ProgressBarChunkWidth,
+        PM_SplitterWidth,
+        PM_TitleBarHeight,
+        PM_MenuScrollerHeight,
+        PM_MenuHMargin,
+        PM_MenuVMargin,
+        PM_MenuPanelWidth,
+        PM_MenuTearoffHeight,
+        PM_MenuDesktopFrameWidth,
+        PM_MenuBarPanelWidth,
+        PM_MenuBarItemSpacing,
+        PM_MenuBarVMargin,
+        PM_MenuBarHMargin,
+        PM_IndicatorWidth,
+        PM_IndicatorHeight,
+        PM_ExclusiveIndicatorWidth,
+        PM_ExclusiveIndicatorHeight,
+        PM_DialogButtonsSeparator,
+        PM_DialogButtonsButtonWidth,
+        PM_DialogButtonsButtonHeight,
+        PM_MdiSubWindowFrameWidth,
+        PM_MDIFrameWidth,
+        PM_MdiSubWindowMinimizedWidth,
+        PM_MDIMinimizedWidth,
+        PM_HeaderMargin,
+        PM_HeaderMarkSize,
+        PM_HeaderGripMargin,
+        PM_TabBarTabShiftHorizontal,
+        PM_TabBarTabShiftVertical,
+        PM_TabBarScrollButtonWidth,
+        PM_ToolBarFrameWidth,
+        PM_ToolBarHandleExtent,
+        PM_ToolBarItemSpacing,
+        PM_ToolBarItemMargin,
+        PM_ToolBarSeparatorExtent,
+        PM_ToolBarExtensionExtent,
+        PM_SpinBoxSliderHeight,
+        PM_DefaultTopLevelMargin,
+        PM_DefaultChildMargin,
+        PM_DefaultLayoutSpacing,
+        PM_ToolBarIconSize,
+        PM_ListViewIconSize,
+        PM_IconViewIconSize,
+        PM_SmallIconSize,
+        PM_LargeIconSize,
+        PM_FocusFrameVMargin,
+        PM_FocusFrameHMargin,
+        PM_ToolTipLabelFrameWidth,
+        PM_CheckBoxLabelSpacing,
+        PM_TabBarIconSize,
+        PM_SizeGripSize,
+        PM_DockWidgetTitleMargin,
+        PM_MessageBoxIconSize,
+        PM_ButtonIconSize,
+        PM_DockWidgetTitleBarButtonMargin,
+        PM_RadioButtonLabelSpacing,
+        PM_LayoutLeftMargin,
+        PM_LayoutTopMargin,
+        PM_LayoutRightMargin,
+        PM_LayoutBottomMargin,
+        PM_LayoutHorizontalSpacing,
+        PM_LayoutVerticalSpacing,
+        PM_TabBar_ScrollButtonOverlap,
+        PM_TextCursorWidth,
+        PM_TabCloseIndicatorWidth,
+        PM_TabCloseIndicatorHeight,
+        PM_ScrollView_ScrollBarSpacing,
+        PM_SubMenuOverlap,
+        PM_ScrollView_ScrollBarOverlap,
+        PM_CustomBase,
+    };
+
+    virtual int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0;
+
+    enum ContentsType
+    {
+        CT_PushButton,
+        CT_CheckBox,
+        CT_RadioButton,
+        CT_ToolButton,
+        CT_ComboBox,
+        CT_Splitter,
+        CT_ProgressBar,
+        CT_MenuItem,
+        CT_MenuBarItem,
+        CT_MenuBar,
+        CT_Menu,
+        CT_TabBarTab,
+        CT_Slider,
+        CT_ScrollBar,
+        CT_LineEdit,
+        CT_SpinBox,
+        CT_SizeGrip,
+        CT_TabWidget,
+        CT_DialogButtons,
+        CT_HeaderSection,
+        CT_GroupBox,
+        CT_MdiControls,
+        CT_ItemViewItem,
+        CT_CustomBase,
+    };
+
+    virtual QSize sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *widget = 0) const = 0;
+
+    enum StyleHint
+    {
+        SH_EtchDisabledText,
+        SH_DitherDisabledText,
+        SH_ScrollBar_MiddleClickAbsolutePosition,
+        SH_ScrollBar_ScrollWhenPointerLeavesControl,
+        SH_TabBar_SelectMouseType,
+        SH_TabBar_Alignment,
+        SH_Header_ArrowAlignment,
+        SH_Slider_SnapToValue,
+        SH_Slider_SloppyKeyEvents,
+        SH_ProgressDialog_CenterCancelButton,
+        SH_ProgressDialog_TextLabelAlignment,
+        SH_PrintDialog_RightAlignButtons,
+        SH_MainWindow_SpaceBelowMenuBar,
+        SH_FontDialog_SelectAssociatedText,
+        SH_Menu_AllowActiveAndDisabled,
+        SH_Menu_SpaceActivatesItem,
+        SH_Menu_SubMenuPopupDelay,
+        SH_ScrollView_FrameOnlyAroundContents,
+        SH_MenuBar_AltKeyNavigation,
+        SH_ComboBox_ListMouseTracking,
+        SH_Menu_MouseTracking,
+        SH_MenuBar_MouseTracking,
+        SH_ItemView_ChangeHighlightOnFocus,
+        SH_Widget_ShareActivation,
+        SH_Workspace_FillSpaceOnMaximize,
+        SH_ComboBox_Popup,
+        SH_TitleBar_NoBorder,
+        SH_ScrollBar_StopMouseOverSlider,
+        SH_BlinkCursorWhenTextSelected,
+        SH_RichText_FullWidthSelection,
+        SH_Menu_Scrollable,
+        SH_GroupBox_TextLabelVerticalAlignment,
+        SH_GroupBox_TextLabelColor,
+        SH_Menu_SloppySubMenus,
+        SH_Table_GridLineColor,
+        SH_LineEdit_PasswordCharacter,
+        SH_DialogButtons_DefaultButton,
+        SH_ToolBox_SelectedPageTitleBold,
+        SH_TabBar_PreferNoArrows,
+        SH_ScrollBar_LeftClickAbsolutePosition,
+        SH_UnderlineShortcut,
+        SH_SpinBox_AnimateButton,
+        SH_SpinBox_KeyPressAutoRepeatRate,
+        SH_SpinBox_ClickAutoRepeatRate,
+        SH_Menu_FillScreenWithScroll,
+        SH_ToolTipLabel_Opacity,
+        SH_DrawMenuBarSeparator,
+        SH_TitleBar_ModifyNotification,
+        SH_Button_FocusPolicy,
+        SH_MessageBox_UseBorderForButtonSpacing,
+        SH_TitleBar_AutoRaise,
+        SH_ToolButton_PopupDelay,
+        SH_FocusFrame_Mask,
+        SH_RubberBand_Mask,
+        SH_WindowFrame_Mask,
+        SH_SpinControls_DisableOnBounds,
+        SH_Dial_BackgroundRole,
+        SH_ComboBox_LayoutDirection,
+        SH_ItemView_EllipsisLocation,
+        SH_ItemView_ShowDecorationSelected,
+        SH_ItemView_ActivateItemOnSingleClick,
+        SH_ScrollBar_ContextMenu,
+        SH_ScrollBar_RollBetweenButtons,
+        SH_Slider_StopMouseOverSlider,
+        SH_Slider_AbsoluteSetButtons,
+        SH_Slider_PageSetButtons,
+        SH_Menu_KeyboardSearch,
+        SH_TabBar_ElideMode,
+        SH_DialogButtonLayout,
+        SH_ComboBox_PopupFrameStyle,
+        SH_MessageBox_TextInteractionFlags,
+        SH_DialogButtonBox_ButtonsHaveIcons,
+        SH_SpellCheckUnderlineStyle,
+        SH_MessageBox_CenterButtons,
+        SH_Menu_SelectionWrap,
+        SH_ItemView_MovementWithoutUpdatingSelection,
+        SH_ToolTip_Mask,
+        SH_FocusFrame_AboveWidget,
+        SH_TextControl_FocusIndicatorTextCharFormat,
+        SH_WizardStyle,
+        SH_ItemView_ArrowKeysNavigateIntoChildren,
+        SH_Menu_Mask,
+        SH_Menu_FlashTriggeredItem,
+        SH_Menu_FadeOutOnHide,
+        SH_SpinBox_ClickAutoRepeatThreshold,
+        SH_ItemView_PaintAlternatingRowColorsForEmptyArea,
+        SH_FormLayoutWrapPolicy,
+        SH_TabWidget_DefaultTabPosition,
+        SH_ToolBar_Movable,
+        SH_FormLayoutFieldGrowthPolicy,
+        SH_FormLayoutFormAlignment,
+        SH_FormLayoutLabelAlignment,
+        SH_ItemView_DrawDelegateFrame,
+        SH_TabBar_CloseButtonPosition,
+        SH_DockWidget_ButtonsHaveFrame,
+        SH_ToolButtonStyle,
+        SH_RequestSoftwareInputPanel,
+        SH_ListViewExpand_SelectMouseType,
+        SH_ScrollBar_Transient,
+%If (Qt_5_1_0 -)
+        SH_Menu_SupportsSections,
+%End
+%If (Qt_5_2_0 -)
+        SH_ToolTip_WakeUpDelay,
+%End
+%If (Qt_5_2_0 -)
+        SH_ToolTip_FallAsleepDelay,
+%End
+%If (Qt_5_2_0 -)
+        SH_Widget_Animate,
+%End
+%If (Qt_5_2_0 -)
+        SH_Splitter_OpaqueResize,
+%End
+        SH_CustomBase,
+    };
+
+    virtual int styleHint(QStyle::StyleHint stylehint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const = 0;
+
+    enum StandardPixmap
+    {
+        SP_TitleBarMenuButton,
+        SP_TitleBarMinButton,
+        SP_TitleBarMaxButton,
+        SP_TitleBarCloseButton,
+        SP_TitleBarNormalButton,
+        SP_TitleBarShadeButton,
+        SP_TitleBarUnshadeButton,
+        SP_TitleBarContextHelpButton,
+        SP_DockWidgetCloseButton,
+        SP_MessageBoxInformation,
+        SP_MessageBoxWarning,
+        SP_MessageBoxCritical,
+        SP_MessageBoxQuestion,
+        SP_DesktopIcon,
+        SP_TrashIcon,
+        SP_ComputerIcon,
+        SP_DriveFDIcon,
+        SP_DriveHDIcon,
+        SP_DriveCDIcon,
+        SP_DriveDVDIcon,
+        SP_DriveNetIcon,
+        SP_DirOpenIcon,
+        SP_DirClosedIcon,
+        SP_DirLinkIcon,
+        SP_FileIcon,
+        SP_FileLinkIcon,
+        SP_ToolBarHorizontalExtensionButton,
+        SP_ToolBarVerticalExtensionButton,
+        SP_FileDialogStart,
+        SP_FileDialogEnd,
+        SP_FileDialogToParent,
+        SP_FileDialogNewFolder,
+        SP_FileDialogDetailedView,
+        SP_FileDialogInfoView,
+        SP_FileDialogContentsView,
+        SP_FileDialogListView,
+        SP_FileDialogBack,
+        SP_DirIcon,
+        SP_DialogOkButton,
+        SP_DialogCancelButton,
+        SP_DialogHelpButton,
+        SP_DialogOpenButton,
+        SP_DialogSaveButton,
+        SP_DialogCloseButton,
+        SP_DialogApplyButton,
+        SP_DialogResetButton,
+        SP_DialogDiscardButton,
+        SP_DialogYesButton,
+        SP_DialogNoButton,
+        SP_ArrowUp,
+        SP_ArrowDown,
+        SP_ArrowLeft,
+        SP_ArrowRight,
+        SP_ArrowBack,
+        SP_ArrowForward,
+        SP_DirHomeIcon,
+        SP_CommandLink,
+        SP_VistaShield,
+        SP_BrowserReload,
+        SP_BrowserStop,
+        SP_MediaPlay,
+        SP_MediaStop,
+        SP_MediaPause,
+        SP_MediaSkipForward,
+        SP_MediaSkipBackward,
+        SP_MediaSeekForward,
+        SP_MediaSeekBackward,
+        SP_MediaVolume,
+        SP_MediaVolumeMuted,
+        SP_DirLinkOpenIcon,
+%If (Qt_5_2_0 -)
+        SP_LineEditClearButton,
+%End
+        SP_CustomBase,
+    };
+
+    virtual QPixmap standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0;
+    virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0;
+    virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const = 0;
+    static QRect visualRect(Qt::LayoutDirection direction, const QRect &boundingRect, const QRect &logicalRect);
+    static QPoint visualPos(Qt::LayoutDirection direction, const QRect &boundingRect, const QPoint &logicalPos);
+    static int sliderPositionFromValue(int min, int max, int logicalValue, int span, bool upsideDown = false);
+    static int sliderValueFromPosition(int min, int max, int position, int span, bool upsideDown = false);
+    static Qt::Alignment visualAlignment(Qt::LayoutDirection direction, Qt::Alignment alignment);
+    static QRect alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle);
+    virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const = 0;
+    int combinedLayoutSpacing(QFlags<QSizePolicy::ControlType> controls1, QFlags<QSizePolicy::ControlType> controls2, Qt::Orientation orientation, QStyleOption *option = 0, QWidget *widget = 0) const;
+
+    enum RequestSoftwareInputPanel
+    {
+        RSIP_OnMouseClickAndAlreadyFocused,
+        RSIP_OnMouseClick,
+    };
+
+    const QStyle *proxy() const;
+
+private:
+    QStyle(const QStyle &);
+};
+
+QFlags<QStyle::StateFlag> operator|(QStyle::StateFlag f1, QFlags<QStyle::StateFlag> f2);
+QFlags<QStyle::SubControl> operator|(QStyle::SubControl f1, QFlags<QStyle::SubControl> f2);
diff --git a/sip/QtWidgets/qstyleditemdelegate.sip b/sip/QtWidgets/qstyleditemdelegate.sip
new file mode 100644
index 0000000..52ca3ef
--- /dev/null
+++ b/sip/QtWidgets/qstyleditemdelegate.sip
@@ -0,0 +1,49 @@
+// qstyleditemdelegate.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStyledItemDelegate : QAbstractItemDelegate
+{
+%TypeHeaderCode
+#include <qstyleditemdelegate.h>
+%End
+
+public:
+    explicit QStyledItemDelegate(QObject *parent /TransferThis/ = 0);
+    virtual ~QStyledItemDelegate();
+    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const;
+    virtual QSize sizeHint(const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const;
+    virtual QWidget *createEditor(QWidget *parent /TransferThis/, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const /Factory/;
+    virtual void setEditorData(QWidget *editor, const QModelIndex &index) const;
+    virtual void setModelData(QWidget *editor, QAbstractItemModel *model /KeepReference/, const QModelIndex &index) const;
+    virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index) const;
+    QItemEditorFactory *itemEditorFactory() const;
+    void setItemEditorFactory(QItemEditorFactory *factory /KeepReference/);
+    virtual QString displayText(const QVariant &value, const QLocale &locale) const;
+
+protected:
+    virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const;
+    virtual bool eventFilter(QObject *object, QEvent *event);
+    virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option /NoCopy/, const QModelIndex &index);
+
+private:
+    QStyledItemDelegate(const QStyledItemDelegate &);
+};
diff --git a/sip/QtWidgets/qstylefactory.sip b/sip/QtWidgets/qstylefactory.sip
new file mode 100644
index 0000000..f77368c
--- /dev/null
+++ b/sip/QtWidgets/qstylefactory.sip
@@ -0,0 +1,32 @@
+// qstylefactory.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStyleFactory
+{
+%TypeHeaderCode
+#include <qstylefactory.h>
+%End
+
+public:
+    static QStringList keys();
+    static QStyle *create(const QString &) /Factory/;
+};
diff --git a/sip/QtWidgets/qstyleoption.sip b/sip/QtWidgets/qstyleoption.sip
new file mode 100644
index 0000000..3588943
--- /dev/null
+++ b/sip/QtWidgets/qstyleoption.sip
@@ -0,0 +1,1056 @@
+// qstyleoption.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qstyleoption.h>
+%End
+
+class QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+%ConvertToSubClassCode
+    switch (sipCpp->type)
+    {
+    case QStyleOption::SO_Button:
+        sipType = sipType_QStyleOptionButton;
+        break;
+    
+    case QStyleOption::SO_ComboBox:
+        sipType = sipType_QStyleOptionComboBox;
+        break;
+    
+    case QStyleOption::SO_DockWidget:
+        sipType = sipType_QStyleOptionDockWidget;
+        break;
+    
+    case QStyleOption::SO_FocusRect:
+        sipType = sipType_QStyleOptionFocusRect;
+        break;
+    
+    case QStyleOption::SO_Frame:
+        sipType = sipType_QStyleOptionFrame;
+        break;
+    
+    case QStyleOption::SO_GraphicsItem:
+        sipType = sipType_QStyleOptionGraphicsItem;
+        break;
+    
+    case QStyleOption::SO_GroupBox:
+        sipType = sipType_QStyleOptionGroupBox;
+        break;
+    
+    case QStyleOption::SO_Header:
+        sipType = sipType_QStyleOptionHeader;
+        break;
+    
+    case QStyleOption::SO_MenuItem:
+        sipType = sipType_QStyleOptionMenuItem;
+        break;
+    
+    case QStyleOption::SO_ProgressBar:
+        sipType = sipType_QStyleOptionProgressBar;
+        break;
+    
+    case QStyleOption::SO_RubberBand:
+        sipType = sipType_QStyleOptionRubberBand;
+        break;
+    
+    case QStyleOption::SO_SizeGrip:
+        sipType = sipType_QStyleOptionSizeGrip;
+        break;
+    
+    case QStyleOption::SO_Slider:
+        sipType = sipType_QStyleOptionSlider;
+        break;
+    
+    case QStyleOption::SO_SpinBox:
+        sipType = sipType_QStyleOptionSpinBox;
+        break;
+    
+    case QStyleOption::SO_Tab:
+        sipType = sipType_QStyleOptionTab;
+        break;
+    
+    case QStyleOption::SO_TabBarBase:
+        sipType = sipType_QStyleOptionTabBarBase;
+        break;
+    
+    case QStyleOption::SO_TabWidgetFrame:
+        sipType = sipType_QStyleOptionTabWidgetFrame;
+        break;
+    
+    case QStyleOption::SO_TitleBar:
+        sipType = sipType_QStyleOptionTitleBar;
+        break;
+    
+    case QStyleOption::SO_ToolBar:
+        sipType = sipType_QStyleOptionToolBar;
+        break;
+    
+    case QStyleOption::SO_ToolBox:
+        sipType = sipType_QStyleOptionToolBox;
+        break;
+    
+    case QStyleOption::SO_ToolButton:
+        sipType = sipType_QStyleOptionToolButton;
+        break;
+    
+    case QStyleOption::SO_ViewItem:
+        sipType = sipType_QStyleOptionViewItem;
+        break;
+    
+    default:
+        if ((sipCpp->type & QStyleOption::SO_ComplexCustomBase) == QStyleOption::SO_ComplexCustomBase)
+            sipType = sipType_QStyleOptionComplex;
+        else
+            sipType = 0;
+    }
+%End
+
+public:
+    enum OptionType
+    {
+        SO_Default,
+        SO_FocusRect,
+        SO_Button,
+        SO_Tab,
+        SO_MenuItem,
+        SO_Frame,
+        SO_ProgressBar,
+        SO_ToolBox,
+        SO_Header,
+        SO_DockWidget,
+        SO_ViewItem,
+        SO_TabWidgetFrame,
+        SO_TabBarBase,
+        SO_RubberBand,
+        SO_ToolBar,
+        SO_Complex,
+        SO_Slider,
+        SO_SpinBox,
+        SO_ToolButton,
+        SO_ComboBox,
+        SO_TitleBar,
+        SO_GroupBox,
+        SO_ComplexCustomBase,
+        SO_GraphicsItem,
+        SO_SizeGrip,
+        SO_CustomBase,
+    };
+
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    int version;
+    int type;
+    QFlags<QStyle::StateFlag> state;
+    Qt::LayoutDirection direction;
+    QRect rect;
+    QFontMetrics fontMetrics;
+    QPalette palette;
+    QObject *styleObject;
+    QStyleOption(int version = QStyleOption::Version, int type = SO_Default);
+    QStyleOption(const QStyleOption &other);
+    ~QStyleOption();
+    void initFrom(const QWidget *w);
+};
+
+class QStyleOptionFocusRect : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QColor backgroundColor;
+    QStyleOptionFocusRect();
+    QStyleOptionFocusRect(const QStyleOptionFocusRect &other);
+};
+
+class QStyleOptionFrame : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    enum FrameFeature
+    {
+        None,
+        Flat,
+        Rounded,
+    };
+
+    typedef QFlags<QStyleOptionFrame::FrameFeature> FrameFeatures;
+    QFlags<QStyleOptionFrame::FrameFeature> features;
+    QFrame::Shape frameShape;
+    int lineWidth;
+    int midLineWidth;
+    QStyleOptionFrame();
+    QStyleOptionFrame(const QStyleOptionFrame &other);
+};
+
+QFlags<QStyleOptionFrame::FrameFeature> operator|(QStyleOptionFrame::FrameFeature f1, QFlags<QStyleOptionFrame::FrameFeature> f2);
+
+class QStyleOptionTabWidgetFrame : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    int lineWidth;
+    int midLineWidth;
+    QTabBar::Shape shape;
+    QSize tabBarSize;
+    QSize rightCornerWidgetSize;
+    QSize leftCornerWidgetSize;
+    QRect tabBarRect;
+    QRect selectedTabRect;
+    QStyleOptionTabWidgetFrame();
+    QStyleOptionTabWidgetFrame(const QStyleOptionTabWidgetFrame &other);
+};
+
+class QStyleOptionTabBarBase : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QTabBar::Shape shape;
+    QRect tabBarRect;
+    QRect selectedTabRect;
+    bool documentMode;
+    QStyleOptionTabBarBase();
+    QStyleOptionTabBarBase(const QStyleOptionTabBarBase &other);
+};
+
+class QStyleOptionHeader : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    enum SectionPosition
+    {
+        Beginning,
+        Middle,
+        End,
+        OnlyOneSection,
+    };
+
+    enum SelectedPosition
+    {
+        NotAdjacent,
+        NextIsSelected,
+        PreviousIsSelected,
+        NextAndPreviousAreSelected,
+    };
+
+    enum SortIndicator
+    {
+        None,
+        SortUp,
+        SortDown,
+    };
+
+    int section;
+    QString text;
+    Qt::Alignment textAlignment;
+    QIcon icon;
+    Qt::Alignment iconAlignment;
+    QStyleOptionHeader::SectionPosition position;
+    QStyleOptionHeader::SelectedPosition selectedPosition;
+    QStyleOptionHeader::SortIndicator sortIndicator;
+    Qt::Orientation orientation;
+    QStyleOptionHeader();
+    QStyleOptionHeader(const QStyleOptionHeader &other);
+};
+
+class QStyleOptionButton : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    enum ButtonFeature
+    {
+        None,
+        Flat,
+        HasMenu,
+        DefaultButton,
+        AutoDefaultButton,
+        CommandLinkButton,
+    };
+
+    typedef QFlags<QStyleOptionButton::ButtonFeature> ButtonFeatures;
+    QFlags<QStyleOptionButton::ButtonFeature> features;
+    QString text;
+    QIcon icon;
+    QSize iconSize;
+    QStyleOptionButton();
+    QStyleOptionButton(const QStyleOptionButton &other);
+};
+
+QFlags<QStyleOptionButton::ButtonFeature> operator|(QStyleOptionButton::ButtonFeature f1, QFlags<QStyleOptionButton::ButtonFeature> f2);
+
+class QStyleOptionTab : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    enum TabPosition
+    {
+        Beginning,
+        Middle,
+        End,
+        OnlyOneTab,
+    };
+
+    enum SelectedPosition
+    {
+        NotAdjacent,
+        NextIsSelected,
+        PreviousIsSelected,
+    };
+
+    enum CornerWidget
+    {
+        NoCornerWidgets,
+        LeftCornerWidget,
+        RightCornerWidget,
+    };
+
+    typedef QFlags<QStyleOptionTab::CornerWidget> CornerWidgets;
+    QTabBar::Shape shape;
+    QString text;
+    QIcon icon;
+    int row;
+    QStyleOptionTab::TabPosition position;
+    QStyleOptionTab::SelectedPosition selectedPosition;
+    QFlags<QStyleOptionTab::CornerWidget> cornerWidgets;
+    QSize iconSize;
+    bool documentMode;
+    QSize leftButtonSize;
+    QSize rightButtonSize;
+
+    enum TabFeature
+    {
+        None,
+        HasFrame,
+    };
+
+    typedef QFlags<QStyleOptionTab::TabFeature> TabFeatures;
+    QFlags<QStyleOptionTab::TabFeature> features;
+    QStyleOptionTab();
+    QStyleOptionTab(const QStyleOptionTab &other);
+};
+
+QFlags<QStyleOptionTab::CornerWidget> operator|(QStyleOptionTab::CornerWidget f1, QFlags<QStyleOptionTab::CornerWidget> f2);
+
+class QStyleOptionProgressBar : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    int minimum;
+    int maximum;
+    int progress;
+    QString text;
+    Qt::Alignment textAlignment;
+    bool textVisible;
+    Qt::Orientation orientation;
+    bool invertedAppearance;
+    bool bottomToTop;
+    QStyleOptionProgressBar();
+    QStyleOptionProgressBar(const QStyleOptionProgressBar &other);
+};
+
+class QStyleOptionMenuItem : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    enum MenuItemType
+    {
+        Normal,
+        DefaultItem,
+        Separator,
+        SubMenu,
+        Scroller,
+        TearOff,
+        Margin,
+        EmptyArea,
+    };
+
+    enum CheckType
+    {
+        NotCheckable,
+        Exclusive,
+        NonExclusive,
+    };
+
+    QStyleOptionMenuItem::MenuItemType menuItemType;
+    QStyleOptionMenuItem::CheckType checkType;
+    bool checked;
+    bool menuHasCheckableItems;
+    QRect menuRect;
+    QString text;
+    QIcon icon;
+    int maxIconWidth;
+    int tabWidth;
+    QFont font;
+    QStyleOptionMenuItem();
+    QStyleOptionMenuItem(const QStyleOptionMenuItem &other);
+};
+
+class QStyleOptionDockWidget : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QString title;
+    bool closable;
+    bool movable;
+    bool floatable;
+    bool verticalTitleBar;
+    QStyleOptionDockWidget();
+    QStyleOptionDockWidget(const QStyleOptionDockWidget &other);
+};
+
+class QStyleOptionViewItem : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    enum Position
+    {
+        Left,
+        Right,
+        Top,
+        Bottom,
+    };
+
+    Qt::Alignment displayAlignment;
+    Qt::Alignment decorationAlignment;
+    Qt::TextElideMode textElideMode;
+    QStyleOptionViewItem::Position decorationPosition;
+    QSize decorationSize;
+    QFont font;
+    bool showDecorationSelected;
+
+    enum ViewItemFeature
+    {
+        None,
+        WrapText,
+        Alternate,
+        HasCheckIndicator,
+        HasDisplay,
+        HasDecoration,
+    };
+
+    typedef QFlags<QStyleOptionViewItem::ViewItemFeature> ViewItemFeatures;
+    QFlags<QStyleOptionViewItem::ViewItemFeature> features;
+    QLocale locale;
+    const QWidget *widget;
+
+    enum ViewItemPosition
+    {
+        Invalid,
+        Beginning,
+        Middle,
+        End,
+        OnlyOne,
+    };
+
+    QModelIndex index;
+    Qt::CheckState checkState;
+    QIcon icon;
+    QString text;
+    QStyleOptionViewItem::ViewItemPosition viewItemPosition;
+    QBrush backgroundBrush;
+    QStyleOptionViewItem();
+    QStyleOptionViewItem(const QStyleOptionViewItem &other);
+};
+
+QFlags<QStyleOptionViewItem::ViewItemFeature> operator|(QStyleOptionViewItem::ViewItemFeature f1, QFlags<QStyleOptionViewItem::ViewItemFeature> f2);
+
+class QStyleOptionToolBox : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QString text;
+    QIcon icon;
+
+    enum TabPosition
+    {
+        Beginning,
+        Middle,
+        End,
+        OnlyOneTab,
+    };
+
+    enum SelectedPosition
+    {
+        NotAdjacent,
+        NextIsSelected,
+        PreviousIsSelected,
+    };
+
+    QStyleOptionToolBox::TabPosition position;
+    QStyleOptionToolBox::SelectedPosition selectedPosition;
+    QStyleOptionToolBox();
+    QStyleOptionToolBox(const QStyleOptionToolBox &other);
+};
+
+class QStyleOptionRubberBand : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QRubberBand::Shape shape;
+    bool opaque;
+    QStyleOptionRubberBand();
+    QStyleOptionRubberBand(const QStyleOptionRubberBand &other);
+};
+
+class QStyleOptionComplex : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QFlags<QStyle::SubControl> subControls;
+    QFlags<QStyle::SubControl> activeSubControls;
+    QStyleOptionComplex(int version = QStyleOptionComplex::Version, int type = SO_Complex);
+    QStyleOptionComplex(const QStyleOptionComplex &other);
+};
+
+class QStyleOptionSlider : QStyleOptionComplex
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    Qt::Orientation orientation;
+    int minimum;
+    int maximum;
+    QSlider::TickPosition tickPosition;
+    int tickInterval;
+    bool upsideDown;
+    int sliderPosition;
+    int sliderValue;
+    int singleStep;
+    int pageStep;
+    qreal notchTarget;
+    bool dialWrapping;
+    QStyleOptionSlider();
+    QStyleOptionSlider(const QStyleOptionSlider &other);
+};
+
+class QStyleOptionSpinBox : QStyleOptionComplex
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QAbstractSpinBox::ButtonSymbols buttonSymbols;
+    QFlags<QAbstractSpinBox::StepEnabledFlag> stepEnabled;
+    bool frame;
+    QStyleOptionSpinBox();
+    QStyleOptionSpinBox(const QStyleOptionSpinBox &other);
+};
+
+class QStyleOptionToolButton : QStyleOptionComplex
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    enum ToolButtonFeature
+    {
+        None,
+        Arrow,
+        Menu,
+        PopupDelay,
+        MenuButtonPopup,
+        HasMenu,
+    };
+
+    typedef QFlags<QStyleOptionToolButton::ToolButtonFeature> ToolButtonFeatures;
+    QFlags<QStyleOptionToolButton::ToolButtonFeature> features;
+    QIcon icon;
+    QSize iconSize;
+    QString text;
+    Qt::ArrowType arrowType;
+    Qt::ToolButtonStyle toolButtonStyle;
+    QPoint pos;
+    QFont font;
+    QStyleOptionToolButton();
+    QStyleOptionToolButton(const QStyleOptionToolButton &other);
+};
+
+QFlags<QStyleOptionToolButton::ToolButtonFeature> operator|(QStyleOptionToolButton::ToolButtonFeature f1, QFlags<QStyleOptionToolButton::ToolButtonFeature> f2);
+
+class QStyleOptionComboBox : QStyleOptionComplex
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    bool editable;
+    QRect popupRect;
+    bool frame;
+    QString currentText;
+    QIcon currentIcon;
+    QSize iconSize;
+    QStyleOptionComboBox();
+    QStyleOptionComboBox(const QStyleOptionComboBox &other);
+};
+
+class QStyleOptionTitleBar : QStyleOptionComplex
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QString text;
+    QIcon icon;
+    int titleBarState;
+    Qt::WindowFlags titleBarFlags;
+    QStyleOptionTitleBar();
+    QStyleOptionTitleBar(const QStyleOptionTitleBar &other);
+};
+
+class QStyleHintReturn
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum HintReturnType
+    {
+        SH_Default,
+        SH_Mask,
+        SH_Variant,
+    };
+
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QStyleHintReturn(int version = QStyleOption::Version, int type = SH_Default);
+    ~QStyleHintReturn();
+    int version;
+    int type;
+};
+
+class QStyleHintReturnMask : QStyleHintReturn
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QStyleHintReturnMask();
+    ~QStyleHintReturnMask();
+    QRegion region;
+};
+
+class QStyleOptionToolBar : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    enum ToolBarPosition
+    {
+        Beginning,
+        Middle,
+        End,
+        OnlyOne,
+    };
+
+    enum ToolBarFeature
+    {
+        None,
+        Movable,
+    };
+
+    typedef QFlags<QStyleOptionToolBar::ToolBarFeature> ToolBarFeatures;
+    QStyleOptionToolBar::ToolBarPosition positionOfLine;
+    QStyleOptionToolBar::ToolBarPosition positionWithinLine;
+    Qt::ToolBarArea toolBarArea;
+    QFlags<QStyleOptionToolBar::ToolBarFeature> features;
+    int lineWidth;
+    int midLineWidth;
+    QStyleOptionToolBar();
+    QStyleOptionToolBar(const QStyleOptionToolBar &other);
+};
+
+QFlags<QStyleOptionToolBar::ToolBarFeature> operator|(QStyleOptionToolBar::ToolBarFeature f1, QFlags<QStyleOptionToolBar::ToolBarFeature> f2);
+
+class QStyleOptionGroupBox : QStyleOptionComplex
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QFlags<QStyleOptionFrame::FrameFeature> features;
+    QString text;
+    Qt::Alignment textAlignment;
+    QColor textColor;
+    int lineWidth;
+    int midLineWidth;
+    QStyleOptionGroupBox();
+    QStyleOptionGroupBox(const QStyleOptionGroupBox &other);
+};
+
+class QStyleOptionSizeGrip : QStyleOptionComplex
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    Qt::Corner corner;
+    QStyleOptionSizeGrip();
+    QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other);
+};
+
+class QStyleOptionGraphicsItem : QStyleOption
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QRectF exposedRect;
+    static qreal levelOfDetailFromTransform(const QTransform &worldTransform);
+    QStyleOptionGraphicsItem();
+    QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other);
+};
+
+class QStyleHintReturnVariant : QStyleHintReturn
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionType
+    {
+        Type,
+    };
+
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QStyleHintReturnVariant();
+    ~QStyleHintReturnVariant();
+    QVariant variant;
+};
diff --git a/sip/QtWidgets/qstylepainter.sip b/sip/QtWidgets/qstylepainter.sip
new file mode 100644
index 0000000..e4cd1be
--- /dev/null
+++ b/sip/QtWidgets/qstylepainter.sip
@@ -0,0 +1,44 @@
+// qstylepainter.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QStylePainter : QPainter
+{
+%TypeHeaderCode
+#include <qstylepainter.h>
+%End
+
+public:
+    QStylePainter();
+    explicit QStylePainter(QWidget *w);
+    QStylePainter(QPaintDevice *pd, QWidget *w);
+    bool begin(QWidget *w);
+    bool begin(QPaintDevice *pd, QWidget *w);
+    QStyle *style() const;
+    void drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption &opt);
+    void drawControl(QStyle::ControlElement ce, const QStyleOption &opt);
+    void drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex &opt);
+    void drawItemText(const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole);
+    void drawItemPixmap(const QRect &r, int flags, const QPixmap &pixmap);
+
+private:
+    QStylePainter(const QStylePainter &);
+};
diff --git a/sip/QtWidgets/qsystemtrayicon.sip b/sip/QtWidgets/qsystemtrayicon.sip
new file mode 100644
index 0000000..d2cd22e
--- /dev/null
+++ b/sip/QtWidgets/qsystemtrayicon.sip
@@ -0,0 +1,76 @@
+// qsystemtrayicon.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSystemTrayIcon : QObject
+{
+%TypeHeaderCode
+#include <qsystemtrayicon.h>
+%End
+
+public:
+    enum ActivationReason
+    {
+        Unknown,
+        Context,
+        DoubleClick,
+        Trigger,
+        MiddleClick,
+    };
+
+    enum MessageIcon
+    {
+        NoIcon,
+        Information,
+        Warning,
+        Critical,
+    };
+
+    QSystemTrayIcon(QObject *parent /TransferThis/ = 0);
+    QSystemTrayIcon(const QIcon &icon, QObject *parent /TransferThis/ = 0);
+    virtual ~QSystemTrayIcon();
+    void setContextMenu(QMenu *menu /KeepReference/);
+    QMenu *contextMenu() const;
+    QRect geometry() const;
+    QIcon icon() const;
+    void setIcon(const QIcon &icon);
+    QString toolTip() const;
+    void setToolTip(const QString &tip);
+    static bool isSystemTrayAvailable();
+    static bool supportsMessages();
+    void showMessage(const QString &title, const QString &msg, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int msecs = 10000);
+    bool isVisible() const;
+
+public slots:
+    void hide();
+    void setVisible(bool visible);
+    void show();
+
+signals:
+    void activated(QSystemTrayIcon::ActivationReason reason);
+    void messageClicked();
+
+protected:
+    virtual bool event(QEvent *event);
+
+private:
+    QSystemTrayIcon(const QSystemTrayIcon &);
+};
diff --git a/sip/QtWidgets/qtabbar.sip b/sip/QtWidgets/qtabbar.sip
new file mode 100644
index 0000000..3db2de1
--- /dev/null
+++ b/sip/QtWidgets/qtabbar.sip
@@ -0,0 +1,150 @@
+// qtabbar.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTabBar : QWidget
+{
+%TypeHeaderCode
+#include <qtabbar.h>
+%End
+
+public:
+    explicit QTabBar(QWidget *parent /TransferThis/ = 0);
+    virtual ~QTabBar();
+
+    enum Shape
+    {
+        RoundedNorth,
+        RoundedSouth,
+        RoundedWest,
+        RoundedEast,
+        TriangularNorth,
+        TriangularSouth,
+        TriangularWest,
+        TriangularEast,
+    };
+
+    QTabBar::Shape shape() const;
+    void setShape(QTabBar::Shape shape);
+    int addTab(const QString &text);
+    int addTab(const QIcon &icon, const QString &text);
+    int insertTab(int index, const QString &text);
+    int insertTab(int index, const QIcon &icon, const QString &text);
+    void removeTab(int index);
+    bool isTabEnabled(int index) const;
+    void setTabEnabled(int index, bool);
+    QString tabText(int index) const;
+    void setTabText(int index, const QString &text);
+    QColor tabTextColor(int index) const;
+    void setTabTextColor(int index, const QColor &color);
+    QIcon tabIcon(int index) const;
+    void setTabIcon(int index, const QIcon &icon);
+    void setTabToolTip(int index, const QString &tip);
+    QString tabToolTip(int index) const;
+    void setTabWhatsThis(int index, const QString &text);
+    QString tabWhatsThis(int index) const;
+    void setTabData(int index, const QVariant &data);
+    QVariant tabData(int index) const;
+    int tabAt(const QPoint &pos) const;
+    QRect tabRect(int index) const;
+    int currentIndex() const;
+    int count() const /__len__/;
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    void setDrawBase(bool drawTheBase);
+    bool drawBase() const;
+    QSize iconSize() const;
+    void setIconSize(const QSize &size);
+    Qt::TextElideMode elideMode() const;
+    void setElideMode(Qt::TextElideMode);
+    void setUsesScrollButtons(bool useButtons);
+    bool usesScrollButtons() const;
+
+public slots:
+    void setCurrentIndex(int index);
+
+signals:
+    void currentChanged(int index);
+
+protected:
+    void initStyleOption(QStyleOptionTab *option, int tabIndex) const;
+    virtual QSize tabSizeHint(int index) const;
+    virtual void tabInserted(int index);
+    virtual void tabRemoved(int index);
+    virtual void tabLayoutChange();
+    virtual bool event(QEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void showEvent(QShowEvent *);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void changeEvent(QEvent *);
+
+public:
+    enum ButtonPosition
+    {
+        LeftSide,
+        RightSide,
+    };
+
+    enum SelectionBehavior
+    {
+        SelectLeftTab,
+        SelectRightTab,
+        SelectPreviousTab,
+    };
+
+    void moveTab(int from, int to);
+    bool tabsClosable() const;
+    void setTabsClosable(bool closable);
+    void setTabButton(int index, QTabBar::ButtonPosition position, QWidget *widget /Transfer/);
+    QWidget *tabButton(int index, QTabBar::ButtonPosition position) const;
+    QTabBar::SelectionBehavior selectionBehaviorOnRemove() const;
+    void setSelectionBehaviorOnRemove(QTabBar::SelectionBehavior behavior);
+    bool expanding() const;
+    void setExpanding(bool enabled);
+    bool isMovable() const;
+    void setMovable(bool movable);
+    bool documentMode() const;
+    void setDocumentMode(bool set);
+
+signals:
+    void tabCloseRequested(int index);
+    void tabMoved(int from, int to);
+
+protected:
+    virtual void hideEvent(QHideEvent *);
+    virtual void wheelEvent(QWheelEvent *event);
+    virtual QSize minimumTabSizeHint(int index) const;
+
+signals:
+%If (Qt_5_2_0 -)
+    void tabBarClicked(int index);
+%End
+%If (Qt_5_2_0 -)
+    void tabBarDoubleClicked(int index);
+%End
+
+private:
+    QTabBar(const QTabBar &);
+};
diff --git a/sip/QtWidgets/qtableview.sip b/sip/QtWidgets/qtableview.sip
new file mode 100644
index 0000000..d0bfd9d
--- /dev/null
+++ b/sip/QtWidgets/qtableview.sip
@@ -0,0 +1,119 @@
+// qtableview.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTableView : QAbstractItemView
+{
+%TypeHeaderCode
+#include <qtableview.h>
+%End
+
+public:
+    explicit QTableView(QWidget *parent /TransferThis/ = 0);
+    virtual ~QTableView();
+    virtual void setModel(QAbstractItemModel *model /KeepReference/);
+    virtual void setRootIndex(const QModelIndex &index);
+    virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/);
+    QHeaderView *horizontalHeader() const;
+    QHeaderView *verticalHeader() const;
+    void setHorizontalHeader(QHeaderView *header /Transfer/);
+    void setVerticalHeader(QHeaderView *header /Transfer/);
+    int rowViewportPosition(int row) const;
+    void setRowHeight(int row, int height);
+    int rowHeight(int row) const;
+    int rowAt(int y) const;
+    int columnViewportPosition(int column) const;
+    void setColumnWidth(int column, int width);
+    int columnWidth(int column) const;
+    int columnAt(int x) const;
+    bool isRowHidden(int row) const;
+    void setRowHidden(int row, bool hide);
+    bool isColumnHidden(int column) const;
+    void setColumnHidden(int column, bool hide);
+    bool showGrid() const;
+    void setShowGrid(bool show);
+    Qt::PenStyle gridStyle() const;
+    void setGridStyle(Qt::PenStyle style);
+    virtual QRect visualRect(const QModelIndex &index) const;
+    virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible);
+    virtual QModelIndex indexAt(const QPoint &p) const;
+
+public slots:
+    void selectRow(int row);
+    void selectColumn(int column);
+    void hideRow(int row);
+    void hideColumn(int column);
+    void showRow(int row);
+    void showColumn(int column);
+    void resizeRowToContents(int row);
+    void resizeRowsToContents();
+    void resizeColumnToContents(int column);
+    void resizeColumnsToContents();
+
+protected slots:
+    void rowMoved(int row, int oldIndex, int newIndex);
+    void columnMoved(int column, int oldIndex, int newIndex);
+    void rowResized(int row, int oldHeight, int newHeight);
+    void columnResized(int column, int oldWidth, int newWidth);
+    void rowCountChanged(int oldCount, int newCount);
+    void columnCountChanged(int oldCount, int newCount);
+
+protected:
+    virtual void scrollContentsBy(int dx, int dy);
+    virtual QStyleOptionViewItem viewOptions() const;
+    virtual void paintEvent(QPaintEvent *e);
+    virtual void timerEvent(QTimerEvent *event);
+    virtual int horizontalOffset() const;
+    virtual int verticalOffset() const;
+    virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
+    virtual void setSelection(const QRect &rect, QFlags<QItemSelectionModel::SelectionFlag> command);
+    virtual QRegion visualRegionForSelection(const QItemSelection &selection) const;
+    virtual QModelIndexList selectedIndexes() const;
+    virtual void updateGeometries();
+    virtual int sizeHintForRow(int row) const;
+    virtual int sizeHintForColumn(int column) const;
+    virtual void verticalScrollbarAction(int action);
+    virtual void horizontalScrollbarAction(int action);
+    virtual bool isIndexHidden(const QModelIndex &index) const;
+%If (Qt_5_2_0 -)
+    virtual QSize viewportSizeHint() const;
+%End
+
+public:
+    void setSortingEnabled(bool enable);
+    bool isSortingEnabled() const;
+    void setSpan(int row, int column, int rowSpan, int columnSpan);
+    int rowSpan(int row, int column) const;
+    int columnSpan(int row, int column) const;
+    void sortByColumn(int column, Qt::SortOrder order);
+    void setWordWrap(bool on);
+    bool wordWrap() const;
+    void setCornerButtonEnabled(bool enable);
+    bool isCornerButtonEnabled() const;
+    void clearSpans();
+
+protected:
+    virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+    virtual void currentChanged(const QModelIndex &current, const QModelIndex &previous);
+
+private:
+    QTableView(const QTableView &);
+};
diff --git a/sip/QtWidgets/qtablewidget.sip b/sip/QtWidgets/qtablewidget.sip
new file mode 100644
index 0000000..32bd6f7
--- /dev/null
+++ b/sip/QtWidgets/qtablewidget.sip
@@ -0,0 +1,237 @@
+// qtablewidget.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtablewidget.h>
+%End
+
+class QTableWidgetSelectionRange
+{
+%TypeHeaderCode
+#include <qtablewidget.h>
+%End
+
+public:
+    QTableWidgetSelectionRange();
+    QTableWidgetSelectionRange(int top, int left, int bottom, int right);
+    QTableWidgetSelectionRange(const QTableWidgetSelectionRange &other);
+    ~QTableWidgetSelectionRange();
+    int topRow() const;
+    int bottomRow() const;
+    int leftColumn() const;
+    int rightColumn() const;
+    int rowCount() const;
+    int columnCount() const;
+};
+
+class QTableWidgetItem /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qtablewidget.h>
+%End
+
+public:
+    enum ItemType
+    {
+        Type,
+        UserType,
+    };
+
+    explicit QTableWidgetItem(int type = Type);
+    QTableWidgetItem(const QString &text, int type = Type);
+    QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type);
+    QTableWidgetItem(const QTableWidgetItem &other);
+    virtual ~QTableWidgetItem();
+    virtual QTableWidgetItem *clone() const /Factory/;
+    QTableWidget *tableWidget() const;
+    Qt::ItemFlags flags() const;
+    QString text() const;
+    QIcon icon() const;
+    QString statusTip() const;
+    QString toolTip() const;
+    QString whatsThis() const;
+    QFont font() const;
+    int textAlignment() const;
+    void setTextAlignment(int alignment);
+    Qt::CheckState checkState() const;
+    void setCheckState(Qt::CheckState state);
+    virtual QVariant data(int role) const;
+    virtual void setData(int role, const QVariant &value);
+    virtual bool operator<(const QTableWidgetItem &other /NoCopy/) const;
+    virtual void read(QDataStream &in) /ReleaseGIL/;
+    virtual void write(QDataStream &out) const /ReleaseGIL/;
+    int type() const;
+    void setFlags(Qt::ItemFlags aflags);
+    void setText(const QString &atext);
+    void setIcon(const QIcon &aicon);
+    void setStatusTip(const QString &astatusTip);
+    void setToolTip(const QString &atoolTip);
+    void setWhatsThis(const QString &awhatsThis);
+    void setFont(const QFont &afont);
+    QSize sizeHint() const;
+    void setSizeHint(const QSize &size);
+    QBrush background() const;
+    void setBackground(const QBrush &brush);
+    QBrush foreground() const;
+    void setForeground(const QBrush &brush);
+    int row() const;
+    int column() const;
+    void setSelected(bool aselect);
+    bool isSelected() const;
+
+private:
+    QTableWidgetItem &operator=(const QTableWidgetItem &);
+};
+
+QDataStream &operator>>(QDataStream &in, QTableWidgetItem &item /Constrained/) /ReleaseGIL/;
+QDataStream &operator<<(QDataStream &out, const QTableWidgetItem &item /Constrained/) /ReleaseGIL/;
+
+class QTableWidget : QTableView
+{
+%TypeHeaderCode
+#include <qtablewidget.h>
+%End
+
+public:
+    explicit QTableWidget(QWidget *parent /TransferThis/ = 0);
+    QTableWidget(int rows, int columns, QWidget *parent /TransferThis/ = 0);
+    virtual ~QTableWidget();
+    void setRowCount(int rows);
+    int rowCount() const;
+    void setColumnCount(int columns);
+    int columnCount() const;
+    int row(const QTableWidgetItem *item) const;
+    int column(const QTableWidgetItem *item) const;
+    QTableWidgetItem *item(int row, int column) const;
+    void setItem(int row, int column, QTableWidgetItem *item /Transfer/);
+    QTableWidgetItem *takeItem(int row, int column) /TransferBack/;
+    QTableWidgetItem *verticalHeaderItem(int row) const;
+    void setVerticalHeaderItem(int row, QTableWidgetItem *item /Transfer/);
+    QTableWidgetItem *takeVerticalHeaderItem(int row) /TransferBack/;
+    QTableWidgetItem *horizontalHeaderItem(int column) const;
+    void setHorizontalHeaderItem(int column, QTableWidgetItem *item /Transfer/);
+    QTableWidgetItem *takeHorizontalHeaderItem(int column) /TransferBack/;
+    void setVerticalHeaderLabels(const QStringList &labels);
+    void setHorizontalHeaderLabels(const QStringList &labels);
+    int currentRow() const;
+    int currentColumn() const;
+    QTableWidgetItem *currentItem() const;
+    void setCurrentItem(QTableWidgetItem *item);
+    void setCurrentItem(QTableWidgetItem *item, QFlags<QItemSelectionModel::SelectionFlag> command);
+    void setCurrentCell(int row, int column);
+    void setCurrentCell(int row, int column, QFlags<QItemSelectionModel::SelectionFlag> command);
+    void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder);
+    void setSortingEnabled(bool enable);
+    bool isSortingEnabled() const;
+    void editItem(QTableWidgetItem *item);
+    void openPersistentEditor(QTableWidgetItem *item);
+    void closePersistentEditor(QTableWidgetItem *item);
+    QWidget *cellWidget(int row, int column) const;
+    void setCellWidget(int row, int column, QWidget *widget /Transfer/);
+%MethodCode
+        // We have to break the association with any existing widget.
+        QWidget *w = sipCpp->cellWidget(a0, a1);
+        
+        if (w)
+        {
+            PyObject *wo = sipGetPyObject(w, sipType_QWidget);
+        
+            if (wo)
+                sipTransferTo(wo, 0);
+        }
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->setCellWidget(a0, a1, a2);
+        Py_END_ALLOW_THREADS
+%End
+
+    void removeCellWidget(int arow, int acolumn);
+%MethodCode
+        // We have to break the association with any existing widget.
+        QWidget *w = sipCpp->cellWidget(a0, a1);
+        
+        if (w)
+        {
+            PyObject *wo = sipGetPyObject(w, sipType_QWidget);
+        
+            if (wo)
+                sipTransferTo(wo, 0);
+        }
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->removeCellWidget(a0, a1);
+        Py_END_ALLOW_THREADS
+%End
+
+    void setRangeSelected(const QTableWidgetSelectionRange &range, bool select);
+    QList<QTableWidgetSelectionRange> selectedRanges() const;
+    QList<QTableWidgetItem*> selectedItems() const;
+    QList<QTableWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags) const;
+    int visualRow(int logicalRow) const;
+    int visualColumn(int logicalColumn) const;
+    QTableWidgetItem *itemAt(const QPoint &p) const;
+    QTableWidgetItem *itemAt(int ax, int ay) const;
+    QRect visualItemRect(const QTableWidgetItem *item) const;
+    const QTableWidgetItem *itemPrototype() const;
+    void setItemPrototype(const QTableWidgetItem *item /Transfer/);
+
+public slots:
+    void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible);
+    void insertRow(int row);
+    void insertColumn(int column);
+    void removeRow(int row);
+    void removeColumn(int column);
+    void clear();
+    void clearContents();
+
+signals:
+    void itemPressed(QTableWidgetItem *item);
+    void itemClicked(QTableWidgetItem *item);
+    void itemDoubleClicked(QTableWidgetItem *item);
+    void itemActivated(QTableWidgetItem *item);
+    void itemEntered(QTableWidgetItem *item);
+    void itemChanged(QTableWidgetItem *item);
+    void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous);
+    void itemSelectionChanged();
+    void cellPressed(int row, int column);
+    void cellClicked(int row, int column);
+    void cellDoubleClicked(int row, int column);
+    void cellActivated(int row, int column);
+    void cellEntered(int row, int column);
+    void cellChanged(int row, int column);
+    void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);
+
+protected:
+    virtual QStringList mimeTypes() const;
+    virtual QMimeData *mimeData(const QList<QTableWidgetItem*> items) const /TransferBack/;
+    virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action);
+    virtual Qt::DropActions supportedDropActions() const;
+    QList<QTableWidgetItem*> items(const QMimeData *data) const;
+    QModelIndex indexFromItem(QTableWidgetItem *item) const;
+    QTableWidgetItem *itemFromIndex(const QModelIndex &index) const;
+    virtual bool event(QEvent *e);
+    virtual void dropEvent(QDropEvent *event);
+
+private:
+    virtual void setModel(QAbstractItemModel *model /KeepReference/);
+    QTableWidget(const QTableWidget &);
+};
diff --git a/sip/QtWidgets/qtabwidget.sip b/sip/QtWidgets/qtabwidget.sip
new file mode 100644
index 0000000..22461fc
--- /dev/null
+++ b/sip/QtWidgets/qtabwidget.sip
@@ -0,0 +1,133 @@
+// qtabwidget.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTabWidget : QWidget
+{
+%TypeHeaderCode
+#include <qtabwidget.h>
+%End
+
+public:
+    explicit QTabWidget(QWidget *parent /TransferThis/ = 0);
+    virtual ~QTabWidget();
+    void clear();
+    int addTab(QWidget *widget /Transfer/, const QString &);
+    int addTab(QWidget *widget /Transfer/, const QIcon &icon, const QString &label);
+    int insertTab(int index, QWidget *widget /Transfer/, const QString &);
+    int insertTab(int index, QWidget *widget /Transfer/, const QIcon &icon, const QString &label);
+    void removeTab(int index);
+    bool isTabEnabled(int index) const;
+    void setTabEnabled(int index, bool);
+    QString tabText(int index) const;
+    void setTabText(int index, const QString &);
+    QIcon tabIcon(int index) const;
+    void setTabIcon(int index, const QIcon &icon);
+    void setTabToolTip(int index, const QString &tip);
+    QString tabToolTip(int index) const;
+    void setTabWhatsThis(int index, const QString &text);
+    QString tabWhatsThis(int index) const;
+    int currentIndex() const;
+    QWidget *currentWidget() const;
+    QWidget *widget(int index) const;
+    int indexOf(QWidget *widget) const;
+    int count() const /__len__/;
+
+    enum TabPosition
+    {
+        North,
+        South,
+        West,
+        East,
+    };
+
+    QTabWidget::TabPosition tabPosition() const;
+    void setTabPosition(QTabWidget::TabPosition);
+
+    enum TabShape
+    {
+        Rounded,
+        Triangular,
+    };
+
+    QTabWidget::TabShape tabShape() const;
+    void setTabShape(QTabWidget::TabShape s);
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    void setCornerWidget(QWidget *widget /Transfer/, Qt::Corner corner = Qt::TopRightCorner);
+    QWidget *cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const;
+
+public slots:
+    void setCurrentIndex(int index);
+    void setCurrentWidget(QWidget *widget);
+
+signals:
+    void currentChanged(int index);
+
+protected:
+    void initStyleOption(QStyleOptionTabWidgetFrame *option) const;
+    virtual void tabInserted(int index);
+    virtual void tabRemoved(int index);
+    virtual bool event(QEvent *);
+    virtual void showEvent(QShowEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void paintEvent(QPaintEvent *);
+    void setTabBar(QTabBar * /Transfer/);
+
+public:
+    QTabBar *tabBar() const;
+
+protected:
+    virtual void changeEvent(QEvent *);
+
+public:
+    Qt::TextElideMode elideMode() const;
+    void setElideMode(Qt::TextElideMode);
+    QSize iconSize() const;
+    void setIconSize(const QSize &size);
+    bool usesScrollButtons() const;
+    void setUsesScrollButtons(bool useButtons);
+    bool tabsClosable() const;
+    void setTabsClosable(bool closeable);
+    bool isMovable() const;
+    void setMovable(bool movable);
+    bool documentMode() const;
+    void setDocumentMode(bool set);
+
+signals:
+    void tabCloseRequested(int index);
+
+public:
+    virtual int heightForWidth(int width) const;
+    virtual bool hasHeightForWidth() const;
+
+signals:
+%If (Qt_5_2_0 -)
+    void tabBarClicked(int index);
+%End
+%If (Qt_5_2_0 -)
+    void tabBarDoubleClicked(int index);
+%End
+
+private:
+    QTabWidget(const QTabWidget &);
+};
diff --git a/sip/QtWidgets/qtextbrowser.sip b/sip/QtWidgets/qtextbrowser.sip
new file mode 100644
index 0000000..0c7f563
--- /dev/null
+++ b/sip/QtWidgets/qtextbrowser.sip
@@ -0,0 +1,80 @@
+// qtextbrowser.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTextBrowser : QTextEdit
+{
+%TypeHeaderCode
+#include <qtextbrowser.h>
+%End
+
+public:
+    explicit QTextBrowser(QWidget *parent /TransferThis/ = 0);
+    virtual ~QTextBrowser();
+    QUrl source() const;
+    QStringList searchPaths() const;
+    void setSearchPaths(const QStringList &paths);
+    virtual QVariant loadResource(int type, const QUrl &name);
+
+public slots:
+    virtual void setSource(const QUrl &name);
+    virtual void backward();
+    virtual void forward();
+    virtual void home();
+    virtual void reload();
+
+signals:
+    void backwardAvailable(bool);
+    void forwardAvailable(bool);
+    void sourceChanged(const QUrl &);
+    void highlighted(const QUrl &);
+    void highlighted(const QString &);
+    void anchorClicked(const QUrl &);
+
+protected:
+    virtual bool event(QEvent *e);
+    virtual void keyPressEvent(QKeyEvent *ev);
+    virtual void mouseMoveEvent(QMouseEvent *ev);
+    virtual void mousePressEvent(QMouseEvent *ev);
+    virtual void mouseReleaseEvent(QMouseEvent *ev);
+    virtual void focusOutEvent(QFocusEvent *ev);
+    virtual bool focusNextPrevChild(bool next);
+    virtual void paintEvent(QPaintEvent *e);
+
+public:
+    bool isBackwardAvailable() const;
+    bool isForwardAvailable() const;
+    void clearHistory();
+    bool openExternalLinks() const;
+    void setOpenExternalLinks(bool open);
+    bool openLinks() const;
+    void setOpenLinks(bool open);
+    QString historyTitle(int) const;
+    QUrl historyUrl(int) const;
+    int backwardHistoryCount() const;
+    int forwardHistoryCount() const;
+
+signals:
+    void historyChanged();
+
+private:
+    QTextBrowser(const QTextBrowser &);
+};
diff --git a/sip/QtWidgets/qtextedit.sip b/sip/QtWidgets/qtextedit.sip
new file mode 100644
index 0000000..f200b52
--- /dev/null
+++ b/sip/QtWidgets/qtextedit.sip
@@ -0,0 +1,220 @@
+// qtextedit.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtextedit.h>
+%End
+
+class QTextEdit : QAbstractScrollArea
+{
+%TypeHeaderCode
+#include <qtextedit.h>
+%End
+
+public:
+    struct ExtraSelection
+    {
+%TypeHeaderCode
+#include <qtextedit.h>
+%End
+
+        QTextCursor cursor;
+        QTextCharFormat format;
+    };
+
+    enum LineWrapMode
+    {
+        NoWrap,
+        WidgetWidth,
+        FixedPixelWidth,
+        FixedColumnWidth,
+    };
+
+    enum AutoFormattingFlag
+    {
+        AutoNone,
+        AutoBulletList,
+        AutoAll,
+    };
+
+    typedef QFlags<QTextEdit::AutoFormattingFlag> AutoFormatting;
+    explicit QTextEdit(QWidget *parent /TransferThis/ = 0);
+    QTextEdit(const QString &text, QWidget *parent /TransferThis/ = 0);
+    virtual ~QTextEdit();
+    void setDocument(QTextDocument *document /KeepReference/);
+    QTextDocument *document() const;
+    void setTextCursor(const QTextCursor &cursor);
+    QTextCursor textCursor() const;
+    bool isReadOnly() const;
+    void setReadOnly(bool ro);
+    qreal fontPointSize() const;
+    QString fontFamily() const;
+    int fontWeight() const;
+    bool fontUnderline() const;
+    bool fontItalic() const;
+    QColor textColor() const;
+    QFont currentFont() const;
+    Qt::Alignment alignment() const;
+    void mergeCurrentCharFormat(const QTextCharFormat &modifier);
+    void setCurrentCharFormat(const QTextCharFormat &format);
+    QTextCharFormat currentCharFormat() const;
+    QFlags<QTextEdit::AutoFormattingFlag> autoFormatting() const;
+    void setAutoFormatting(QFlags<QTextEdit::AutoFormattingFlag> features);
+    bool tabChangesFocus() const;
+    void setTabChangesFocus(bool b);
+    void setDocumentTitle(const QString &title);
+    QString documentTitle() const;
+    bool isUndoRedoEnabled() const;
+    void setUndoRedoEnabled(bool enable);
+    QTextEdit::LineWrapMode lineWrapMode() const;
+    void setLineWrapMode(QTextEdit::LineWrapMode mode);
+    int lineWrapColumnOrWidth() const;
+    void setLineWrapColumnOrWidth(int w);
+    QTextOption::WrapMode wordWrapMode() const;
+    void setWordWrapMode(QTextOption::WrapMode policy);
+    bool find(const QString &exp, QFlags<QTextDocument::FindFlag> options = 0);
+    QString toPlainText() const;
+    QString toHtml() const;
+    void append(const QString &text);
+    void ensureCursorVisible();
+    virtual QVariant loadResource(int type, const QUrl &name);
+    QMenu *createStandardContextMenu() /Factory/;
+    QMenu *createStandardContextMenu(const QPoint &position) /Factory/;
+    QTextCursor cursorForPosition(const QPoint &pos) const;
+    QRect cursorRect(const QTextCursor &cursor) const;
+    QRect cursorRect() const;
+    QString anchorAt(const QPoint &pos) const;
+    bool overwriteMode() const;
+    void setOverwriteMode(bool overwrite);
+    int tabStopWidth() const;
+    void setTabStopWidth(int width);
+    bool acceptRichText() const;
+    void setAcceptRichText(bool accept);
+    void setTextInteractionFlags(Qt::TextInteractionFlags flags);
+    Qt::TextInteractionFlags textInteractionFlags() const;
+    void setCursorWidth(int width);
+    int cursorWidth() const;
+    void setExtraSelections(const QList<QTextEdit::ExtraSelection> &selections);
+    QList<QTextEdit::ExtraSelection> extraSelections() const;
+    bool canPaste() const;
+    void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor);
+%If (PyQt_Printer)
+    void print(QPagedPaintDevice *printer) const /PyName=print_/;
+%End
+%If (Py_v3)
+%If (PyQt_Printer)
+    void print(QPagedPaintDevice *printer) const;
+%End
+%End
+
+public slots:
+    void setFontPointSize(qreal s);
+    void setFontFamily(const QString &fontFamily);
+    void setFontWeight(int w);
+    void setFontUnderline(bool b);
+    void setFontItalic(bool b);
+    void setText(const QString &text);
+    void setTextColor(const QColor &c);
+    void setCurrentFont(const QFont &f);
+    void setAlignment(Qt::Alignment a);
+    void setPlainText(const QString &text);
+    void setHtml(const QString &text);
+    void cut();
+    void copy();
+    void paste();
+    void clear();
+    void selectAll();
+    void insertPlainText(const QString &text);
+    void insertHtml(const QString &text);
+    void scrollToAnchor(const QString &name);
+    void redo();
+    void undo();
+    void zoomIn(int range = 1);
+    void zoomOut(int range = 1);
+
+signals:
+    void textChanged();
+    void undoAvailable(bool b);
+    void redoAvailable(bool b);
+    void currentCharFormatChanged(const QTextCharFormat &format);
+    void copyAvailable(bool b);
+    void selectionChanged();
+    void cursorPositionChanged();
+
+protected:
+    virtual bool event(QEvent *e);
+    virtual void timerEvent(QTimerEvent *e);
+    virtual void keyPressEvent(QKeyEvent *e);
+    virtual void keyReleaseEvent(QKeyEvent *e);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void paintEvent(QPaintEvent *e);
+    virtual void mousePressEvent(QMouseEvent *e);
+    virtual void mouseMoveEvent(QMouseEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *e);
+    virtual void mouseDoubleClickEvent(QMouseEvent *e);
+    virtual bool focusNextPrevChild(bool next);
+    virtual void contextMenuEvent(QContextMenuEvent *e);
+    virtual void dragEnterEvent(QDragEnterEvent *e);
+    virtual void dragLeaveEvent(QDragLeaveEvent *e);
+    virtual void dragMoveEvent(QDragMoveEvent *e);
+    virtual void dropEvent(QDropEvent *e);
+    virtual void focusInEvent(QFocusEvent *e);
+    virtual void focusOutEvent(QFocusEvent *e);
+    virtual void showEvent(QShowEvent *);
+    virtual void changeEvent(QEvent *e);
+    virtual void wheelEvent(QWheelEvent *e);
+    virtual QMimeData *createMimeDataFromSelection() const /Factory/;
+    virtual bool canInsertFromMimeData(const QMimeData *source) const;
+    virtual void insertFromMimeData(const QMimeData *source);
+    virtual void inputMethodEvent(QInputMethodEvent *);
+
+public:
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
+
+protected:
+    virtual void scrollContentsBy(int dx, int dy);
+
+public:
+    QColor textBackgroundColor() const;
+
+public slots:
+    void setTextBackgroundColor(const QColor &c);
+
+public:
+%If (Qt_5_2_0 -)
+    void setPlaceholderText(const QString &placeholderText);
+%End
+%If (Qt_5_2_0 -)
+    QString placeholderText() const;
+%End
+%If (Qt_5_3_0 -)
+    bool find(const QRegExp &exp, QFlags<QTextDocument::FindFlag> options = 0);
+%End
+%If (Qt_5_3_0 -)
+    QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const;
+%End
+
+private:
+    QTextEdit(const QTextEdit &);
+};
+
+QFlags<QTextEdit::AutoFormattingFlag> operator|(QTextEdit::AutoFormattingFlag f1, QFlags<QTextEdit::AutoFormattingFlag> f2);
diff --git a/sip/QtWidgets/qtoolbar.sip b/sip/QtWidgets/qtoolbar.sip
new file mode 100644
index 0000000..927f39c
--- /dev/null
+++ b/sip/QtWidgets/qtoolbar.sip
@@ -0,0 +1,114 @@
+// qtoolbar.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QToolBar : QWidget
+{
+%TypeHeaderCode
+#include <qtoolbar.h>
+%End
+
+public:
+    QToolBar(const QString &title, QWidget *parent /TransferThis/ = 0);
+    explicit QToolBar(QWidget *parent /TransferThis/ = 0);
+    virtual ~QToolBar();
+    void setMovable(bool movable);
+    bool isMovable() const;
+    void setAllowedAreas(Qt::ToolBarAreas areas);
+    Qt::ToolBarAreas allowedAreas() const;
+    bool isAreaAllowed(Qt::ToolBarArea area) const;
+    void setOrientation(Qt::Orientation orientation);
+    Qt::Orientation orientation() const;
+    void clear();
+    void addAction(QAction *action);
+    QAction *addAction(const QString &text) /Transfer/;
+    QAction *addAction(const QIcon &icon, const QString &text) /Transfer/;
+    QAction *addAction(const QString &text, SIP_PYOBJECT slot /DocType="slot"/) /Transfer/;
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a1, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipRes = sipCpp->addAction(*a0, receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(1, a1);
+        }
+%End
+
+    QAction *addAction(const QIcon &icon, const QString &text, SIP_PYOBJECT slot /DocType="slot"/) /Transfer/;
+%MethodCode
+        QObject *receiver;
+        QByteArray slot_signature;
+        
+        if ((sipError = pyqt5_qtwidgets_get_connection_parts(a2, sipCpp, "()", false, &receiver, slot_signature)) == sipErrorNone)
+        {
+            sipRes = sipCpp->addAction(*a0, *a1, receiver, slot_signature.constData());
+        }
+        else if (sipError == sipErrorContinue)
+        {
+            sipError = sipBadCallableArg(2, a2);
+        }
+%End
+
+    QAction *addSeparator() /Transfer/;
+    QAction *insertSeparator(QAction *before) /Transfer/;
+    QAction *addWidget(QWidget *widget /Transfer/) /Transfer/;
+    QAction *insertWidget(QAction *before, QWidget *widget /Transfer/) /Transfer/;
+    QRect actionGeometry(QAction *action) const;
+    QAction *actionAt(const QPoint &p) const;
+    QAction *actionAt(int ax, int ay) const;
+    QAction *toggleViewAction() const;
+    QSize iconSize() const;
+    Qt::ToolButtonStyle toolButtonStyle() const;
+    QWidget *widgetForAction(QAction *action) const;
+
+public slots:
+    void setIconSize(const QSize &iconSize);
+    void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle);
+
+signals:
+    void actionTriggered(QAction *action);
+    void movableChanged(bool movable);
+    void allowedAreasChanged(Qt::ToolBarAreas allowedAreas);
+    void orientationChanged(Qt::Orientation orientation);
+    void iconSizeChanged(const QSize &iconSize);
+    void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle);
+    void topLevelChanged(bool topLevel);
+    void visibilityChanged(bool visible);
+
+protected:
+    void initStyleOption(QStyleOptionToolBar *option) const;
+    virtual void actionEvent(QActionEvent *event);
+    virtual void changeEvent(QEvent *event);
+    virtual void paintEvent(QPaintEvent *event);
+    virtual bool event(QEvent *event);
+
+public:
+    bool isFloatable() const;
+    void setFloatable(bool floatable);
+    bool isFloating() const;
+
+private:
+    QToolBar(const QToolBar &);
+};
diff --git a/sip/QtWidgets/qtoolbox.sip b/sip/QtWidgets/qtoolbox.sip
new file mode 100644
index 0000000..ccca664
--- /dev/null
+++ b/sip/QtWidgets/qtoolbox.sip
@@ -0,0 +1,67 @@
+// qtoolbox.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QToolBox : QFrame
+{
+%TypeHeaderCode
+#include <qtoolbox.h>
+%End
+
+public:
+    QToolBox(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QToolBox();
+    int addItem(QWidget *item /Transfer/, const QString &text);
+    int addItem(QWidget *item /Transfer/, const QIcon &iconSet, const QString &text);
+    int insertItem(int index, QWidget *item /Transfer/, const QString &text);
+    int insertItem(int index, QWidget *widget /Transfer/, const QIcon &icon, const QString &text);
+    void removeItem(int index);
+    void setItemEnabled(int index, bool enabled);
+    bool isItemEnabled(int index) const;
+    void setItemText(int index, const QString &text);
+    QString itemText(int index) const;
+    void setItemIcon(int index, const QIcon &icon);
+    QIcon itemIcon(int index) const;
+    void setItemToolTip(int index, const QString &toolTip);
+    QString itemToolTip(int index) const;
+    int currentIndex() const;
+    QWidget *currentWidget() const;
+    QWidget *widget(int index) const;
+    int indexOf(QWidget *widget) const;
+    int count() const /__len__/;
+
+public slots:
+    void setCurrentIndex(int index);
+    void setCurrentWidget(QWidget *widget);
+
+signals:
+    void currentChanged(int index);
+
+protected:
+    virtual void itemInserted(int index);
+    virtual void itemRemoved(int index);
+    virtual bool event(QEvent *e);
+    virtual void showEvent(QShowEvent *e);
+    virtual void changeEvent(QEvent *);
+
+private:
+    QToolBox(const QToolBox &);
+};
diff --git a/sip/QtWidgets/qtoolbutton.sip b/sip/QtWidgets/qtoolbutton.sip
new file mode 100644
index 0000000..cf30e98
--- /dev/null
+++ b/sip/QtWidgets/qtoolbutton.sip
@@ -0,0 +1,76 @@
+// qtoolbutton.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QToolButton : QAbstractButton
+{
+%TypeHeaderCode
+#include <qtoolbutton.h>
+%End
+
+public:
+    enum ToolButtonPopupMode
+    {
+        DelayedPopup,
+        MenuButtonPopup,
+        InstantPopup,
+    };
+
+    explicit QToolButton(QWidget *parent /TransferThis/ = 0);
+    virtual ~QToolButton();
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    Qt::ToolButtonStyle toolButtonStyle() const;
+    Qt::ArrowType arrowType() const;
+    void setArrowType(Qt::ArrowType type);
+    void setMenu(QMenu *menu /KeepReference/);
+    QMenu *menu() const;
+    void setPopupMode(QToolButton::ToolButtonPopupMode mode);
+    QToolButton::ToolButtonPopupMode popupMode() const;
+    QAction *defaultAction() const;
+    void setAutoRaise(bool enable);
+    bool autoRaise() const;
+
+public slots:
+    void showMenu();
+    void setToolButtonStyle(Qt::ToolButtonStyle style);
+    void setDefaultAction(QAction * /KeepReference/);
+
+signals:
+    void triggered(QAction *);
+
+protected:
+    void initStyleOption(QStyleOptionToolButton *option) const;
+    virtual bool event(QEvent *e);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void actionEvent(QActionEvent *);
+    virtual void enterEvent(QEvent *);
+    virtual void leaveEvent(QEvent *);
+    virtual void timerEvent(QTimerEvent *);
+    virtual void changeEvent(QEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void nextCheckState();
+    virtual bool hitButton(const QPoint &pos) const;
+
+private:
+    QToolButton(const QToolButton &);
+};
diff --git a/sip/QtWidgets/qtooltip.sip b/sip/QtWidgets/qtooltip.sip
new file mode 100644
index 0000000..199c466
--- /dev/null
+++ b/sip/QtWidgets/qtooltip.sip
@@ -0,0 +1,44 @@
+// qtooltip.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QToolTip
+{
+%TypeHeaderCode
+#include <qtooltip.h>
+%End
+
+    QToolTip();
+
+public:
+    static void showText(const QPoint &pos, const QString &text, QWidget *widget = 0);
+    static void showText(const QPoint &pos, const QString &text, QWidget *w, const QRect &rect);
+%If (Qt_5_2_0 -)
+    static void showText(const QPoint &pos, const QString &text, QWidget *w, const QRect &rect, int msecShowTime);
+%End
+    static QPalette palette();
+    static void hideText();
+    static void setPalette(const QPalette &);
+    static QFont font();
+    static void setFont(const QFont &);
+    static bool isVisible();
+    static QString text();
+};
diff --git a/sip/QtWidgets/qtreeview.sip b/sip/QtWidgets/qtreeview.sip
new file mode 100644
index 0000000..f28d93b
--- /dev/null
+++ b/sip/QtWidgets/qtreeview.sip
@@ -0,0 +1,157 @@
+// qtreeview.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QTreeView : QAbstractItemView
+{
+%TypeHeaderCode
+#include <qtreeview.h>
+%End
+
+public:
+    explicit QTreeView(QWidget *parent /TransferThis/ = 0);
+    virtual ~QTreeView();
+    virtual void setModel(QAbstractItemModel *model /KeepReference/);
+    virtual void setRootIndex(const QModelIndex &index);
+    virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/);
+    QHeaderView *header() const;
+    void setHeader(QHeaderView *header /Transfer/);
+    int indentation() const;
+    void setIndentation(int i);
+    bool rootIsDecorated() const;
+    void setRootIsDecorated(bool show);
+    bool uniformRowHeights() const;
+    void setUniformRowHeights(bool uniform);
+    bool itemsExpandable() const;
+    void setItemsExpandable(bool enable);
+    int columnViewportPosition(int column) const;
+    int columnWidth(int column) const;
+    int columnAt(int x) const;
+    bool isColumnHidden(int column) const;
+    void setColumnHidden(int column, bool hide);
+    bool isRowHidden(int row, const QModelIndex &parent) const;
+    void setRowHidden(int row, const QModelIndex &parent, bool hide);
+    bool isExpanded(const QModelIndex &index) const;
+    void setExpanded(const QModelIndex &index, bool expand);
+    virtual void keyboardSearch(const QString &search);
+    virtual QRect visualRect(const QModelIndex &index) const;
+    virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible);
+    virtual QModelIndex indexAt(const QPoint &p) const;
+    QModelIndex indexAbove(const QModelIndex &index) const;
+    QModelIndex indexBelow(const QModelIndex &index) const;
+    virtual void reset();
+
+signals:
+    void expanded(const QModelIndex &index);
+    void collapsed(const QModelIndex &index);
+
+public:
+    virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles /DocValue="[]"/ = QVector<int>());
+
+public slots:
+    void hideColumn(int column);
+    void showColumn(int column);
+    void expand(const QModelIndex &index);
+    void expandAll();
+    void collapse(const QModelIndex &index);
+    void collapseAll();
+    void resizeColumnToContents(int column);
+    virtual void selectAll();
+
+protected slots:
+    void columnResized(int column, int oldSize, int newSize);
+    void columnCountChanged(int oldCount, int newCount);
+    void columnMoved();
+    void reexpand();
+    void rowsRemoved(const QModelIndex &parent, int first, int last);
+
+protected:
+    virtual void scrollContentsBy(int dx, int dy);
+    virtual void rowsInserted(const QModelIndex &parent, int start, int end);
+    virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
+    virtual QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
+    virtual int horizontalOffset() const;
+    virtual int verticalOffset() const;
+    virtual void setSelection(const QRect &rect, QFlags<QItemSelectionModel::SelectionFlag> command);
+    virtual QRegion visualRegionForSelection(const QItemSelection &selection) const;
+    virtual QModelIndexList selectedIndexes() const;
+    virtual void paintEvent(QPaintEvent *e);
+    virtual void timerEvent(QTimerEvent *event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
+    virtual void drawRow(QPainter *painter, const QStyleOptionViewItem &options /NoCopy/, const QModelIndex &index) const;
+    virtual void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const;
+    void drawTree(QPainter *painter, const QRegion &region) const;
+    virtual void mousePressEvent(QMouseEvent *e);
+    virtual void mouseMoveEvent(QMouseEvent *event);
+    virtual void mouseDoubleClickEvent(QMouseEvent *e);
+    virtual void keyPressEvent(QKeyEvent *event);
+    virtual void updateGeometries();
+    virtual int sizeHintForColumn(int column) const;
+    int indexRowSizeHint(const QModelIndex &index) const;
+    virtual void horizontalScrollbarAction(int action);
+    virtual bool isIndexHidden(const QModelIndex &index) const;
+
+public:
+    void setColumnWidth(int column, int width);
+    void setSortingEnabled(bool enable);
+    bool isSortingEnabled() const;
+    void setAnimated(bool enable);
+    bool isAnimated() const;
+    void setAllColumnsShowFocus(bool enable);
+    bool allColumnsShowFocus() const;
+    void sortByColumn(int column, Qt::SortOrder order);
+    int autoExpandDelay() const;
+    void setAutoExpandDelay(int delay);
+    bool isFirstColumnSpanned(int row, const QModelIndex &parent) const;
+    void setFirstColumnSpanned(int row, const QModelIndex &parent, bool span);
+    void setWordWrap(bool on);
+    bool wordWrap() const;
+
+public slots:
+    void expandToDepth(int depth);
+
+protected:
+    virtual void dragMoveEvent(QDragMoveEvent *event);
+    virtual bool viewportEvent(QEvent *event);
+    int rowHeight(const QModelIndex &index) const;
+    virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+    virtual void currentChanged(const QModelIndex &current, const QModelIndex &previous);
+
+public:
+    bool expandsOnDoubleClick() const;
+    void setExpandsOnDoubleClick(bool enable);
+    bool isHeaderHidden() const;
+    void setHeaderHidden(bool hide);
+%If (Qt_5_2_0 -)
+    void setTreePosition(int logicalIndex);
+%End
+%If (Qt_5_2_0 -)
+    int treePosition() const;
+%End
+
+protected:
+%If (Qt_5_2_0 -)
+    virtual QSize viewportSizeHint() const;
+%End
+
+private:
+    QTreeView(const QTreeView &);
+};
diff --git a/sip/QtWidgets/qtreewidget.sip b/sip/QtWidgets/qtreewidget.sip
new file mode 100644
index 0000000..067d73b
--- /dev/null
+++ b/sip/QtWidgets/qtreewidget.sip
@@ -0,0 +1,245 @@
+// qtreewidget.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtreewidget.h>
+%End
+
+class QTreeWidgetItem /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qtreewidget.h>
+%End
+
+public:
+    enum ItemType
+    {
+        Type,
+        UserType,
+    };
+
+    explicit QTreeWidgetItem(int type = Type);
+    QTreeWidgetItem(const QStringList &strings, int type = Type);
+    QTreeWidgetItem(QTreeWidget *parent /TransferThis/, int type = Type);
+    QTreeWidgetItem(QTreeWidget *parent /TransferThis/, const QStringList &strings, int type = Type);
+    QTreeWidgetItem(QTreeWidget *parent /TransferThis/, QTreeWidgetItem *preceding, int type = Type);
+    QTreeWidgetItem(QTreeWidgetItem *parent /TransferThis/, int type = Type);
+    QTreeWidgetItem(QTreeWidgetItem *parent /TransferThis/, const QStringList &strings, int type = Type);
+    QTreeWidgetItem(QTreeWidgetItem *parent /TransferThis/, QTreeWidgetItem *preceding, int type = Type);
+    QTreeWidgetItem(const QTreeWidgetItem &other);
+    virtual ~QTreeWidgetItem();
+    virtual QTreeWidgetItem *clone() const /Factory/;
+    QTreeWidget *treeWidget() const;
+    Qt::ItemFlags flags() const;
+    QString text(int column) const;
+    QIcon icon(int column) const;
+    QString statusTip(int column) const;
+    QString toolTip(int column) const;
+    QString whatsThis(int column) const;
+    QFont font(int column) const;
+    int textAlignment(int column) const;
+    void setTextAlignment(int column, int alignment);
+    Qt::CheckState checkState(int column) const;
+    void setCheckState(int column, Qt::CheckState state);
+    virtual QVariant data(int column, int role) const;
+    virtual void setData(int column, int role, const QVariant &value);
+    virtual bool operator<(const QTreeWidgetItem &other /NoCopy/) const;
+    virtual void read(QDataStream &in) /ReleaseGIL/;
+    virtual void write(QDataStream &out) const /ReleaseGIL/;
+    QTreeWidgetItem *parent() const;
+    QTreeWidgetItem *child(int index) const;
+    int childCount() const;
+    int columnCount() const;
+    void addChild(QTreeWidgetItem *child /Transfer/);
+    void insertChild(int index, QTreeWidgetItem *child /Transfer/);
+    QTreeWidgetItem *takeChild(int index) /TransferBack/;
+    int type() const;
+    void setFlags(Qt::ItemFlags aflags);
+    void setText(int column, const QString &atext);
+    void setIcon(int column, const QIcon &aicon);
+    void setStatusTip(int column, const QString &astatusTip);
+    void setToolTip(int column, const QString &atoolTip);
+    void setWhatsThis(int column, const QString &awhatsThis);
+    void setFont(int column, const QFont &afont);
+    int indexOfChild(QTreeWidgetItem *achild) const;
+    QSize sizeHint(int column) const;
+    void setSizeHint(int column, const QSize &size);
+    void addChildren(const QList<QTreeWidgetItem*> &children /Transfer/);
+    void insertChildren(int index, const QList<QTreeWidgetItem*> &children /Transfer/);
+    QList<QTreeWidgetItem*> takeChildren() /TransferBack/;
+    QBrush background(int column) const;
+    void setBackground(int column, const QBrush &brush);
+    QBrush foreground(int column) const;
+    void setForeground(int column, const QBrush &brush);
+    void sortChildren(int column, Qt::SortOrder order);
+    void setSelected(bool aselect);
+    bool isSelected() const;
+    void setHidden(bool ahide);
+    bool isHidden() const;
+    void setExpanded(bool aexpand);
+    bool isExpanded() const;
+
+    enum ChildIndicatorPolicy
+    {
+        ShowIndicator,
+        DontShowIndicator,
+        DontShowIndicatorWhenChildless,
+    };
+
+    void setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPolicy policy);
+    QTreeWidgetItem::ChildIndicatorPolicy childIndicatorPolicy() const;
+    void removeChild(QTreeWidgetItem *child /TransferBack/);
+    void setFirstColumnSpanned(bool aspan);
+    bool isFirstColumnSpanned() const;
+    void setDisabled(bool disabled);
+    bool isDisabled() const;
+
+protected:
+    void emitDataChanged();
+
+private:
+    QTreeWidgetItem &operator=(const QTreeWidgetItem &);
+};
+
+QDataStream &operator<<(QDataStream &out, const QTreeWidgetItem &item /Constrained/) /ReleaseGIL/;
+QDataStream &operator>>(QDataStream &in, QTreeWidgetItem &item /Constrained/) /ReleaseGIL/;
+
+class QTreeWidget : QTreeView
+{
+%TypeHeaderCode
+#include <qtreewidget.h>
+%End
+
+public:
+    explicit QTreeWidget(QWidget *parent /TransferThis/ = 0);
+    virtual ~QTreeWidget();
+    int columnCount() const;
+    void setColumnCount(int columns);
+    QTreeWidgetItem *topLevelItem(int index) const;
+    int topLevelItemCount() const;
+    void insertTopLevelItem(int index, QTreeWidgetItem *item /Transfer/);
+    void addTopLevelItem(QTreeWidgetItem *item /Transfer/);
+    QTreeWidgetItem *takeTopLevelItem(int index) /TransferBack/;
+    int indexOfTopLevelItem(QTreeWidgetItem *item) const;
+    void insertTopLevelItems(int index, const QList<QTreeWidgetItem*> &items /Transfer/);
+    void addTopLevelItems(const QList<QTreeWidgetItem*> &items /Transfer/);
+    QTreeWidgetItem *headerItem() const;
+    void setHeaderItem(QTreeWidgetItem *item /Transfer/);
+    void setHeaderLabels(const QStringList &labels);
+    QTreeWidgetItem *currentItem() const;
+    int currentColumn() const;
+    void setCurrentItem(QTreeWidgetItem *item);
+    void setCurrentItem(QTreeWidgetItem *item, int column);
+    void setCurrentItem(QTreeWidgetItem *item, int column, QFlags<QItemSelectionModel::SelectionFlag> command);
+    QTreeWidgetItem *itemAt(const QPoint &p) const;
+    QTreeWidgetItem *itemAt(int ax, int ay) const;
+    QRect visualItemRect(const QTreeWidgetItem *item) const;
+    int sortColumn() const;
+    void sortItems(int column, Qt::SortOrder order);
+    void editItem(QTreeWidgetItem *item, int column = 0);
+    void openPersistentEditor(QTreeWidgetItem *item, int column = 0);
+    void closePersistentEditor(QTreeWidgetItem *item, int column = 0);
+    QWidget *itemWidget(QTreeWidgetItem *item, int column) const;
+    void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget /Transfer/);
+%MethodCode
+        // We have to break the association with any existing widget.  Note that I'm
+        // not sure this is really necessary as it should get tidied up when Qt
+        // destroys any current widget, except (possibly) when the widget wasn't
+        // created from PyQt.  See also removeItemWidget(), QListWidget and
+        // QTableWidget.
+        QWidget *w = sipCpp->itemWidget(a0, a1);
+        
+        if (w)
+        {
+            PyObject *wo = sipGetPyObject(w, sipType_QWidget);
+        
+            if (wo)
+                sipTransferTo(wo, 0);
+        }
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->setItemWidget(a0, a1, a2);
+        Py_END_ALLOW_THREADS
+%End
+
+    QList<QTreeWidgetItem*> selectedItems() const;
+    QList<QTreeWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const;
+
+public slots:
+    void scrollToItem(const QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint = QAbstractItemView::EnsureVisible);
+    void expandItem(const QTreeWidgetItem *item);
+    void collapseItem(const QTreeWidgetItem *item);
+    void clear();
+
+signals:
+    void itemPressed(QTreeWidgetItem *item, int column);
+    void itemClicked(QTreeWidgetItem *item, int column);
+    void itemDoubleClicked(QTreeWidgetItem *item, int column);
+    void itemActivated(QTreeWidgetItem *item, int column);
+    void itemEntered(QTreeWidgetItem *item, int column);
+    void itemChanged(QTreeWidgetItem *item, int column);
+    void itemExpanded(QTreeWidgetItem *item);
+    void itemCollapsed(QTreeWidgetItem *item);
+    void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
+    void itemSelectionChanged();
+
+protected:
+    virtual QStringList mimeTypes() const;
+    virtual QMimeData *mimeData(const QList<QTreeWidgetItem*> items) const /TransferBack/;
+    virtual bool dropMimeData(QTreeWidgetItem *parent, int index, const QMimeData *data, Qt::DropAction action);
+    virtual Qt::DropActions supportedDropActions() const;
+    QModelIndex indexFromItem(QTreeWidgetItem *item, int column = 0) const;
+    QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const;
+    virtual bool event(QEvent *e);
+    virtual void dropEvent(QDropEvent *event);
+
+public:
+    QTreeWidgetItem *invisibleRootItem() const /Transfer/;
+    void setHeaderLabel(const QString &alabel);
+    bool isFirstItemColumnSpanned(const QTreeWidgetItem *item) const;
+    void setFirstItemColumnSpanned(const QTreeWidgetItem *item, bool span);
+    QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const;
+    QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const;
+    void removeItemWidget(QTreeWidgetItem *item, int column);
+%MethodCode
+        // We have to break the association with any existing widget.
+        QWidget *w = sipCpp->itemWidget(a0, a1);
+        
+        if (w)
+        {
+            PyObject *wo = sipGetPyObject(w, sipType_QWidget);
+        
+            if (wo)
+                sipTransferTo(wo, 0);
+        }
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->removeItemWidget(a0, a1);
+        Py_END_ALLOW_THREADS
+%End
+
+    virtual void setSelectionModel(QItemSelectionModel *selectionModel /KeepReference/);
+
+private:
+    virtual void setModel(QAbstractItemModel *model /KeepReference/);
+    QTreeWidget(const QTreeWidget &);
+};
diff --git a/sip/QtWidgets/qtreewidgetitemiterator.sip b/sip/QtWidgets/qtreewidgetitemiterator.sip
new file mode 100644
index 0000000..a686ee6
--- /dev/null
+++ b/sip/QtWidgets/qtreewidgetitemiterator.sip
@@ -0,0 +1,73 @@
+// qtreewidgetitemiterator.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qtreewidgetitemiterator.h>
+%End
+
+class QTreeWidgetItemIterator
+{
+%TypeHeaderCode
+#include <qtreewidgetitemiterator.h>
+%End
+
+public:
+    enum IteratorFlag
+    {
+        All,
+        Hidden,
+        NotHidden,
+        Selected,
+        Unselected,
+        Selectable,
+        NotSelectable,
+        DragEnabled,
+        DragDisabled,
+        DropEnabled,
+        DropDisabled,
+        HasChildren,
+        NoChildren,
+        Checked,
+        NotChecked,
+        Enabled,
+        Disabled,
+        Editable,
+        NotEditable,
+        UserFlag,
+    };
+
+    typedef QFlags<QTreeWidgetItemIterator::IteratorFlag> IteratorFlags;
+    QTreeWidgetItemIterator(const QTreeWidgetItemIterator &it);
+    QTreeWidgetItemIterator(QTreeWidget *widget, QFlags<QTreeWidgetItemIterator::IteratorFlag> flags = All);
+    QTreeWidgetItemIterator(QTreeWidgetItem *item, QFlags<QTreeWidgetItemIterator::IteratorFlag> flags = All);
+    ~QTreeWidgetItemIterator();
+    QTreeWidgetItem *value() const;
+%MethodCode
+        // SIP doesn't support operator* so this is a thin wrapper around it.
+        sipRes = sipCpp->operator*();
+%End
+
+    QTreeWidgetItemIterator &operator+=(int n);
+    QTreeWidgetItemIterator &operator-=(int n);
+};
+
+QFlags<QTreeWidgetItemIterator::IteratorFlag> operator|(QTreeWidgetItemIterator::IteratorFlag f1, QFlags<QTreeWidgetItemIterator::IteratorFlag> f2);
diff --git a/sip/QtWidgets/qundogroup.sip b/sip/QtWidgets/qundogroup.sip
new file mode 100644
index 0000000..53341ba
--- /dev/null
+++ b/sip/QtWidgets/qundogroup.sip
@@ -0,0 +1,60 @@
+// qundogroup.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QUndoGroup : QObject
+{
+%TypeHeaderCode
+#include <qundogroup.h>
+%End
+
+public:
+    explicit QUndoGroup(QObject *parent /TransferThis/ = 0);
+    virtual ~QUndoGroup();
+    void addStack(QUndoStack *stack);
+    void removeStack(QUndoStack *stack);
+    QList<QUndoStack*> stacks() const;
+    QUndoStack *activeStack() const;
+    QAction *createRedoAction(QObject *parent /TransferThis/, const QString &prefix /DocValue="''"/ = QString()) const /Factory/;
+    QAction *createUndoAction(QObject *parent /TransferThis/, const QString &prefix /DocValue="''"/ = QString()) const /Factory/;
+    bool canUndo() const;
+    bool canRedo() const;
+    QString undoText() const;
+    QString redoText() const;
+    bool isClean() const;
+
+public slots:
+    void redo();
+    void setActiveStack(QUndoStack *stack);
+    void undo();
+
+signals:
+    void activeStackChanged(QUndoStack *stack);
+    void canRedoChanged(bool canRedo);
+    void canUndoChanged(bool canUndo);
+    void cleanChanged(bool clean);
+    void indexChanged(int idx);
+    void redoTextChanged(const QString &redoText);
+    void undoTextChanged(const QString &undoText);
+
+private:
+    QUndoGroup(const QUndoGroup &);
+};
diff --git a/sip/QtWidgets/qundostack.sip b/sip/QtWidgets/qundostack.sip
new file mode 100644
index 0000000..c64d45b
--- /dev/null
+++ b/sip/QtWidgets/qundostack.sip
@@ -0,0 +1,95 @@
+// qundostack.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QUndoCommand /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qundostack.h>
+%End
+
+public:
+    explicit QUndoCommand(QUndoCommand *parent /TransferThis/ = 0);
+    QUndoCommand(const QString &text, QUndoCommand *parent /TransferThis/ = 0);
+    virtual ~QUndoCommand();
+    virtual int id() const;
+    virtual bool mergeWith(const QUndoCommand *other);
+    virtual void redo();
+    void setText(const QString &text);
+    QString text() const;
+    virtual void undo();
+    int childCount() const;
+    const QUndoCommand *child(int index) const;
+    QString actionText() const;
+
+private:
+    QUndoCommand(const QUndoCommand &);
+};
+
+class QUndoStack : QObject
+{
+%TypeHeaderCode
+#include <qundostack.h>
+%End
+
+public:
+    explicit QUndoStack(QObject *parent /TransferThis/ = 0);
+    virtual ~QUndoStack();
+    void clear();
+    void push(QUndoCommand *cmd /Transfer/);
+    bool canUndo() const;
+    bool canRedo() const;
+    QString undoText() const;
+    QString redoText() const;
+    int count() const /__len__/;
+    int index() const;
+    QString text(int idx) const;
+    QAction *createUndoAction(QObject *parent /TransferThis/, const QString &prefix /DocValue="''"/ = QString()) const /Factory/;
+    QAction *createRedoAction(QObject *parent /TransferThis/, const QString &prefix /DocValue="''"/ = QString()) const /Factory/;
+    bool isActive() const;
+    bool isClean() const;
+    int cleanIndex() const;
+    void beginMacro(const QString &text);
+    void endMacro();
+
+public slots:
+    void redo();
+    void setActive(bool active = true);
+    void setClean();
+    void setIndex(int idx);
+    void undo();
+
+signals:
+    void canRedoChanged(bool canRedo);
+    void canUndoChanged(bool canUndo);
+    void cleanChanged(bool clean);
+    void indexChanged(int idx);
+    void redoTextChanged(const QString &redoText);
+    void undoTextChanged(const QString &undoText);
+
+public:
+    void setUndoLimit(int limit);
+    int undoLimit() const;
+    const QUndoCommand *command(int index) const;
+
+private:
+    QUndoStack(const QUndoStack &);
+};
diff --git a/sip/QtWidgets/qundoview.sip b/sip/QtWidgets/qundoview.sip
new file mode 100644
index 0000000..a3d0719
--- /dev/null
+++ b/sip/QtWidgets/qundoview.sip
@@ -0,0 +1,44 @@
+// qundoview.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QUndoView : QListView
+{
+%TypeHeaderCode
+#include <qundoview.h>
+%End
+
+public:
+    explicit QUndoView(QWidget *parent /TransferThis/ = 0);
+    QUndoView(QUndoStack *stack, QWidget *parent /TransferThis/ = 0);
+    QUndoView(QUndoGroup *group, QWidget *parent /TransferThis/ = 0);
+    virtual ~QUndoView();
+    QUndoStack *stack() const;
+    QUndoGroup *group() const;
+    void setEmptyLabel(const QString &label);
+    QString emptyLabel() const;
+    void setCleanIcon(const QIcon &icon);
+    QIcon cleanIcon() const;
+
+public slots:
+    void setStack(QUndoStack *stack /KeepReference/);
+    void setGroup(QUndoGroup *group /KeepReference/);
+};
diff --git a/sip/QtWidgets/qwhatsthis.sip b/sip/QtWidgets/qwhatsthis.sip
new file mode 100644
index 0000000..5760c6e
--- /dev/null
+++ b/sip/QtWidgets/qwhatsthis.sip
@@ -0,0 +1,38 @@
+// qwhatsthis.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWhatsThis
+{
+%TypeHeaderCode
+#include <qwhatsthis.h>
+%End
+
+    QWhatsThis();
+
+public:
+    static void enterWhatsThisMode();
+    static bool inWhatsThisMode();
+    static void leaveWhatsThisMode();
+    static void showText(const QPoint &pos, const QString &text, QWidget *widget = 0);
+    static void hideText();
+    static QAction *createAction(QObject *parent /TransferThis/ = 0) /Factory/;
+};
diff --git a/sip/QtWidgets/qwidget.sip b/sip/QtWidgets/qwidget.sip
new file mode 100644
index 0000000..7e84a30
--- /dev/null
+++ b/sip/QtWidgets/qwidget.sip
@@ -0,0 +1,443 @@
+// qwidget.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qwidget.h>
+%End
+
+class QWidget : QObject, QPaintDevice
+{
+%TypeHeaderCode
+#include <qwidget.h>
+%End
+
+%TypeCode
+// Transfer the ownership of a single widget to a parent.
+static void qtgui_TransferWidget(QWidget *w, PyObject *py_parent)
+{
+    PyObject *py_w = sipGetPyObject(w, sipType_QWidget);
+
+    if (py_w)
+        sipTransferTo(py_w, py_parent);
+}
+
+
+// Transfer ownership of all widgets in a layout to their new parent.
+static void qtwidgets_TransferLayoutWidgets(QLayout *lay, PyObject *pw)
+{
+    int n = lay->count();
+
+    for (int i = 0; i < n; ++i)
+    {
+        QLayoutItem *item = lay->itemAt(i);
+        QWidget *w = item->widget();
+
+        if (w)
+        {
+            qtgui_TransferWidget(w, pw);
+        }
+        else
+        {
+            QLayout *l = item->layout();
+
+            if (l)
+                qtwidgets_TransferLayoutWidgets(l, pw);
+        }
+    }
+    
+    QWidget *mb = lay->menuBar();
+
+    if (mb)
+        qtgui_TransferWidget(mb, pw);
+}
+%End
+
+public:
+    QWidget(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QWidget();
+    virtual int devType() const;
+    QStyle *style() const;
+    void setStyle(QStyle * /KeepReference/);
+    bool isEnabledTo(const QWidget *) const;
+
+public slots:
+    void setEnabled(bool);
+    void setDisabled(bool);
+    void setWindowModified(bool);
+
+public:
+    QRect frameGeometry() const;
+    QRect normalGeometry() const;
+    int x() const;
+    int y() const;
+    QPoint pos() const;
+    QSize frameSize() const;
+    QRect childrenRect() const;
+    QRegion childrenRegion() const;
+    QSize minimumSize() const;
+    QSize maximumSize() const;
+    void setMinimumSize(int minw, int minh);
+    void setMaximumSize(int maxw, int maxh);
+    void setMinimumWidth(int minw);
+    void setMinimumHeight(int minh);
+    void setMaximumWidth(int maxw);
+    void setMaximumHeight(int maxh);
+    QSize sizeIncrement() const;
+    void setSizeIncrement(int w, int h);
+    QSize baseSize() const;
+    void setBaseSize(int basew, int baseh);
+    void setFixedSize(const QSize &);
+    void setFixedSize(int w, int h);
+    void setFixedWidth(int w);
+    void setFixedHeight(int h);
+    QPoint mapToGlobal(const QPoint &) const;
+    QPoint mapFromGlobal(const QPoint &) const;
+    QPoint mapToParent(const QPoint &) const;
+    QPoint mapFromParent(const QPoint &) const;
+    QPoint mapTo(const QWidget *, const QPoint &) const;
+    QPoint mapFrom(const QWidget *, const QPoint &) const;
+    QWidget *window() const;
+    const QPalette &palette() const;
+    void setPalette(const QPalette &);
+    void setBackgroundRole(QPalette::ColorRole);
+    QPalette::ColorRole backgroundRole() const;
+    void setForegroundRole(QPalette::ColorRole);
+    QPalette::ColorRole foregroundRole() const;
+    void setFont(const QFont &);
+    QCursor cursor() const;
+    void setCursor(const QCursor &);
+    void unsetCursor();
+    void setMask(const QBitmap &);
+    void setMask(const QRegion &);
+    QRegion mask() const;
+    void clearMask();
+    void setWindowTitle(const QString &);
+    QString windowTitle() const;
+    void setWindowIcon(const QIcon &icon);
+    QIcon windowIcon() const;
+    void setWindowIconText(const QString &);
+    QString windowIconText() const;
+    void setWindowRole(const QString &);
+    QString windowRole() const;
+    void setWindowOpacity(qreal level);
+    qreal windowOpacity() const;
+    bool isWindowModified() const;
+    void setToolTip(const QString &);
+    QString toolTip() const;
+    void setStatusTip(const QString &);
+    QString statusTip() const;
+    void setWhatsThis(const QString &);
+    QString whatsThis() const;
+%If (PyQt_Accessibility)
+    QString accessibleName() const;
+%End
+%If (PyQt_Accessibility)
+    void setAccessibleName(const QString &name);
+%End
+%If (PyQt_Accessibility)
+    QString accessibleDescription() const;
+%End
+%If (PyQt_Accessibility)
+    void setAccessibleDescription(const QString &description);
+%End
+    void setLayoutDirection(Qt::LayoutDirection direction);
+    Qt::LayoutDirection layoutDirection() const;
+    void unsetLayoutDirection();
+    bool isRightToLeft() const;
+    bool isLeftToRight() const;
+
+public slots:
+    void setFocus();
+
+public:
+    bool isActiveWindow() const;
+    void activateWindow();
+    void clearFocus();
+    void setFocus(Qt::FocusReason reason);
+    Qt::FocusPolicy focusPolicy() const;
+    void setFocusPolicy(Qt::FocusPolicy policy);
+    bool hasFocus() const;
+    static void setTabOrder(QWidget *, QWidget *);
+    void setFocusProxy(QWidget * /KeepReference/);
+    QWidget *focusProxy() const;
+    Qt::ContextMenuPolicy contextMenuPolicy() const;
+    void setContextMenuPolicy(Qt::ContextMenuPolicy policy);
+    void grabMouse();
+    void grabMouse(const QCursor &);
+    void releaseMouse();
+    void grabKeyboard();
+    void releaseKeyboard();
+    int grabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut);
+    void releaseShortcut(int id);
+    void setShortcutEnabled(int id, bool enabled = true);
+    static QWidget *mouseGrabber();
+    static QWidget *keyboardGrabber();
+    void setUpdatesEnabled(bool enable);
+
+public slots:
+    void update();
+    void repaint();
+
+public:
+    void update(const QRect &);
+    void update(const QRegion &);
+    void repaint(int x, int y, int w, int h);
+    void repaint(const QRect &);
+    void repaint(const QRegion &);
+
+public slots:
+    virtual void setVisible(bool visible);
+    void setHidden(bool hidden);
+    void show();
+    void hide();
+    void showMinimized();
+    void showMaximized();
+    void showFullScreen();
+    void showNormal();
+    bool close();
+    void raise() /PyName=raise_/;
+    void lower();
+
+public:
+    void stackUnder(QWidget *);
+    void move(const QPoint &);
+    void resize(const QSize &);
+    void setGeometry(const QRect &);
+    void adjustSize();
+    bool isVisibleTo(const QWidget *) const;
+    bool isMinimized() const;
+    bool isMaximized() const;
+    bool isFullScreen() const;
+    Qt::WindowStates windowState() const;
+    void setWindowState(Qt::WindowStates state);
+    void overrideWindowState(Qt::WindowStates state);
+    virtual QSize sizeHint() const;
+    virtual QSize minimumSizeHint() const;
+    QSizePolicy sizePolicy() const;
+    void setSizePolicy(QSizePolicy);
+    virtual int heightForWidth(int) const;
+    QRegion visibleRegion() const;
+    void setContentsMargins(int left, int top, int right, int bottom);
+    void getContentsMargins(int *left, int *top, int *right, int *bottom) const;
+    QRect contentsRect() const;
+    QLayout *layout() const;
+    void setLayout(QLayout * /Transfer/);
+%MethodCode
+        Py_BEGIN_ALLOW_THREADS
+        sipCpp->setLayout(a0);
+        Py_END_ALLOW_THREADS
+        
+        // Internally Qt has reparented all of the widgets in the layout, so we need
+        // to update the ownership hierachy.
+        qtwidgets_TransferLayoutWidgets(a0, sipSelf);
+%End
+
+    void updateGeometry();
+    void setParent(QWidget *parent /TransferThis/);
+    void setParent(QWidget *parent /TransferThis/, Qt::WindowFlags f);
+    void scroll(int dx, int dy);
+    void scroll(int dx, int dy, const QRect &);
+    QWidget *focusWidget() const;
+    QWidget *nextInFocusChain() const;
+    bool acceptDrops() const;
+    void setAcceptDrops(bool on);
+    void addAction(QAction *action);
+    void addActions(QList<QAction*> actions);
+    void insertAction(QAction *before, QAction *action);
+    void insertActions(QAction *before, QList<QAction*> actions);
+    void removeAction(QAction *action);
+    QList<QAction*> actions() const;
+    void setWindowFlags(Qt::WindowFlags type);
+    void overrideWindowFlags(Qt::WindowFlags type);
+    static QWidget *find(WId);
+    QWidget *childAt(const QPoint &p) const;
+    void setAttribute(Qt::WidgetAttribute attribute, bool on = true);
+    virtual QPaintEngine *paintEngine() const;
+    void ensurePolished() const;
+    bool isAncestorOf(const QWidget *child) const;
+
+signals:
+    void customContextMenuRequested(const QPoint &pos);
+
+protected:
+    virtual bool event(QEvent *);
+    virtual void mousePressEvent(QMouseEvent *);
+    virtual void mouseReleaseEvent(QMouseEvent *);
+    virtual void mouseDoubleClickEvent(QMouseEvent *);
+    virtual void mouseMoveEvent(QMouseEvent *);
+    virtual void wheelEvent(QWheelEvent *);
+    virtual void keyPressEvent(QKeyEvent *);
+    virtual void keyReleaseEvent(QKeyEvent *);
+    virtual void focusInEvent(QFocusEvent *);
+    virtual void focusOutEvent(QFocusEvent *);
+    virtual void enterEvent(QEvent *);
+    virtual void leaveEvent(QEvent *);
+    virtual void paintEvent(QPaintEvent *);
+    virtual void moveEvent(QMoveEvent *);
+    virtual void resizeEvent(QResizeEvent *);
+    virtual void closeEvent(QCloseEvent *);
+    virtual void contextMenuEvent(QContextMenuEvent *);
+    virtual void tabletEvent(QTabletEvent *);
+    virtual void actionEvent(QActionEvent *);
+    virtual void dragEnterEvent(QDragEnterEvent *);
+    virtual void dragMoveEvent(QDragMoveEvent *);
+    virtual void dragLeaveEvent(QDragLeaveEvent *);
+    virtual void dropEvent(QDropEvent *);
+    virtual void showEvent(QShowEvent *);
+    virtual void hideEvent(QHideEvent *);
+    virtual void changeEvent(QEvent *);
+    virtual int metric(QPaintDevice::PaintDeviceMetric) const;
+    virtual void inputMethodEvent(QInputMethodEvent *);
+
+public:
+    virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const;
+
+protected:
+    void updateMicroFocus();
+    void create(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true);
+    void destroy(bool destroyWindow = true, bool destroySubWindows = true);
+    virtual bool focusNextPrevChild(bool next);
+    bool focusNextChild();
+    bool focusPreviousChild();
+
+public:
+    QWidget *childAt(int ax, int ay) const;
+    Qt::WindowType windowType() const;
+    Qt::WindowFlags windowFlags() const;
+    WId winId() const;
+    bool isWindow() const;
+    bool isEnabled() const;
+    bool isModal() const;
+    int minimumWidth() const;
+    int minimumHeight() const;
+    int maximumWidth() const;
+    int maximumHeight() const;
+    void setMinimumSize(const QSize &s);
+    void setMaximumSize(const QSize &s);
+    void setSizeIncrement(const QSize &s);
+    void setBaseSize(const QSize &s);
+    const QFont &font() const;
+    QFontMetrics fontMetrics() const;
+    QFontInfo fontInfo() const;
+    void setMouseTracking(bool enable);
+    bool hasMouseTracking() const;
+    bool underMouse() const;
+    bool updatesEnabled() const;
+    void update(int ax, int ay, int aw, int ah);
+    bool isVisible() const;
+    bool isHidden() const;
+    void move(int ax, int ay);
+    void resize(int w, int h);
+    void setGeometry(int ax, int ay, int aw, int ah);
+    QRect rect() const;
+    const QRect &geometry() const;
+    QSize size() const;
+    int width() const;
+    int height() const;
+    QWidget *parentWidget() const;
+    void setSizePolicy(QSizePolicy::Policy hor, QSizePolicy::Policy ver);
+    bool testAttribute(Qt::WidgetAttribute attribute) const;
+    Qt::WindowModality windowModality() const;
+    void setWindowModality(Qt::WindowModality windowModality);
+    bool autoFillBackground() const;
+    void setAutoFillBackground(bool enabled);
+    void setStyleSheet(const QString &styleSheet);
+    QString styleSheet() const;
+    void setShortcutAutoRepeat(int id, bool enabled = true);
+    QByteArray saveGeometry() const;
+    bool restoreGeometry(const QByteArray &geometry);
+
+    enum RenderFlag
+    {
+        DrawWindowBackground,
+        DrawChildren,
+        IgnoreMask,
+    };
+
+    typedef QFlags<QWidget::RenderFlag> RenderFlags;
+    void render(QPaintDevice *target, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QFlags<QWidget::RenderFlag> flags = QWidget::DrawWindowBackground|QWidget::DrawChildren);
+    void render(QPainter *painter, const QPoint &targetOffset = QPoint(), const QRegion &sourceRegion = QRegion(), QFlags<QWidget::RenderFlag> flags = QWidget::DrawWindowBackground|QWidget::DrawChildren);
+    void setLocale(const QLocale &locale);
+    QLocale locale() const;
+    void unsetLocale();
+    WId effectiveWinId() const;
+    QWidget *nativeParentWidget() const;
+    void setWindowFilePath(const QString &filePath);
+    QString windowFilePath() const;
+    QGraphicsProxyWidget *graphicsProxyWidget() const;
+    QGraphicsEffect *graphicsEffect() const;
+    void setGraphicsEffect(QGraphicsEffect *effect /Transfer/);
+    void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags(0));
+    void ungrabGesture(Qt::GestureType type);
+    void setContentsMargins(const QMargins &margins);
+    QMargins contentsMargins() const;
+    QWidget *previousInFocusChain() const;
+    Qt::InputMethodHints inputMethodHints() const;
+    void setInputMethodHints(Qt::InputMethodHints hints);
+    virtual bool hasHeightForWidth() const;
+    QPixmap grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1)));
+%If (Qt_5_1_0 -)
+    static SIP_PYOBJECT createWindowContainer(QWindow *window /GetWrapper/, QWidget *parent /GetWrapper/ = 0, Qt::WindowFlags flags = 0) /DocType="QWidget",Factory/;
+%MethodCode
+        // Ownersip issues are complicated so we handle them explicitly.
+        
+        QWidget *w = QWidget::createWindowContainer(a0, a1, *a2);
+        
+        sipRes = sipConvertFromNewType(w, sipType_QWidget, a1Wrapper);
+        
+        if (sipRes)
+            sipTransferTo(a0Wrapper, sipRes);
+%End
+
+%End
+    QWindow *windowHandle() const;
+
+protected:
+    virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result);
+    virtual QPaintDevice *redirected(QPoint *offset) const;
+    virtual QPainter *sharedPainter() const;
+    virtual void initPainter(QPainter *painter) const;
+
+public:
+%If (Qt_5_2_0 -)
+    void setToolTipDuration(int msec);
+%End
+%If (Qt_5_2_0 -)
+    int toolTipDuration() const;
+%End
+
+signals:
+%If (Qt_5_2_0 -)
+    void windowTitleChanged(const QString &title);
+%End
+%If (Qt_5_2_0 -)
+    void windowIconChanged(const QIcon &icon);
+%End
+%If (Qt_5_2_0 -)
+    void windowIconTextChanged(const QString &iconText);
+%End
+
+private:
+    QWidget(const QWidget &);
+};
+
+QFlags<QWidget::RenderFlag> operator|(QWidget::RenderFlag f1, QFlags<QWidget::RenderFlag> f2);
diff --git a/sip/QtWidgets/qwidgetaction.sip b/sip/QtWidgets/qwidgetaction.sip
new file mode 100644
index 0000000..9a0fa38
--- /dev/null
+++ b/sip/QtWidgets/qwidgetaction.sip
@@ -0,0 +1,46 @@
+// qwidgetaction.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QWidgetAction : QAction
+{
+%TypeHeaderCode
+#include <qwidgetaction.h>
+%End
+
+public:
+    explicit QWidgetAction(QObject *parent /TransferThis/);
+    virtual ~QWidgetAction();
+    void setDefaultWidget(QWidget *w /Transfer/);
+    QWidget *defaultWidget() const;
+    QWidget *requestWidget(QWidget *parent /TransferThis/) /Factory/;
+    void releaseWidget(QWidget *widget /TransferBack/);
+
+protected:
+    virtual bool event(QEvent *);
+    virtual bool eventFilter(QObject *, QEvent *);
+    virtual QWidget *createWidget(QWidget *parent /TransferThis/) /Factory/;
+    virtual void deleteWidget(QWidget *widget /Transfer/);
+    QList<QWidget*> createdWidgets() const;
+
+private:
+    QWidgetAction(const QWidgetAction &);
+};
diff --git a/sip/QtWidgets/qwizard.sip b/sip/QtWidgets/qwizard.sip
new file mode 100644
index 0000000..eb2c36f
--- /dev/null
+++ b/sip/QtWidgets/qwizard.sip
@@ -0,0 +1,249 @@
+// qwizard.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the QtWidgets Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%ModuleCode
+#include <qwizard.h>
+%End
+
+class QWizard : QDialog
+{
+%TypeHeaderCode
+#include <qwizard.h>
+%End
+
+public:
+    enum WizardButton
+    {
+        BackButton,
+        NextButton,
+        CommitButton,
+        FinishButton,
+        CancelButton,
+        HelpButton,
+        CustomButton1,
+        CustomButton2,
+        CustomButton3,
+        Stretch,
+    };
+
+    enum WizardPixmap
+    {
+        WatermarkPixmap,
+        LogoPixmap,
+        BannerPixmap,
+        BackgroundPixmap,
+    };
+
+    enum WizardStyle
+    {
+        ClassicStyle,
+        ModernStyle,
+        MacStyle,
+        AeroStyle,
+    };
+
+    enum WizardOption
+    {
+        IndependentPages,
+        IgnoreSubTitles,
+        ExtendedWatermarkPixmap,
+        NoDefaultButton,
+        NoBackButtonOnStartPage,
+        NoBackButtonOnLastPage,
+        DisabledBackButtonOnLastPage,
+        HaveNextButtonOnLastPage,
+        HaveFinishButtonOnEarlyPages,
+        NoCancelButton,
+        CancelButtonOnLeft,
+        HaveHelpButton,
+        HelpButtonOnRight,
+        HaveCustomButton1,
+        HaveCustomButton2,
+        HaveCustomButton3,
+%If (Qt_5_3_0 -)
+        NoCancelButtonOnLastPage,
+%End
+    };
+
+    typedef QFlags<QWizard::WizardOption> WizardOptions;
+    QWizard(QWidget *parent /TransferThis/ = 0, Qt::WindowFlags flags = 0);
+    virtual ~QWizard();
+    int addPage(QWizardPage *page /Transfer/);
+    void setPage(int id, QWizardPage *page /Transfer/);
+    QWizardPage *page(int id) const;
+    bool hasVisitedPage(int id) const;
+    QList<int> visitedPages() const;
+    void setStartId(int id);
+    int startId() const;
+    QWizardPage *currentPage() const;
+    int currentId() const;
+    virtual bool validateCurrentPage();
+    virtual int nextId() const;
+    void setField(const QString &name, const QVariant &value);
+    QVariant field(const QString &name) const;
+    void setWizardStyle(QWizard::WizardStyle style);
+    QWizard::WizardStyle wizardStyle() const;
+    void setOption(QWizard::WizardOption option, bool on = true);
+    bool testOption(QWizard::WizardOption option) const;
+    void setOptions(QFlags<QWizard::WizardOption> options);
+    QFlags<QWizard::WizardOption> options() const;
+    void setButtonText(QWizard::WizardButton which, const QString &text);
+    QString buttonText(QWizard::WizardButton which) const;
+    void setButtonLayout(const QList<QWizard::WizardButton> &layout);
+    void setButton(QWizard::WizardButton which, QAbstractButton *button /Transfer/);
+    QAbstractButton *button(QWizard::WizardButton which) const /Transfer/;
+    void setTitleFormat(Qt::TextFormat format);
+    Qt::TextFormat titleFormat() const;
+    void setSubTitleFormat(Qt::TextFormat format);
+    Qt::TextFormat subTitleFormat() const;
+    void setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap);
+    QPixmap pixmap(QWizard::WizardPixmap which) const;
+    void setDefaultProperty(const char *className, const char *property, const char *changedSignal);
+    virtual void setVisible(bool visible);
+    virtual QSize sizeHint() const;
+
+signals:
+    void currentIdChanged(int id);
+    void helpRequested();
+    void customButtonClicked(int which);
+
+public slots:
+    void back();
+    void next();
+    void restart();
+
+protected:
+    virtual bool event(QEvent *event);
+    virtual void resizeEvent(QResizeEvent *event);
+    virtual void paintEvent(QPaintEvent *event);
+    virtual void done(int result);
+    virtual void initializePage(int id);
+    virtual void cleanupPage(int id);
+
+public:
+    void removePage(int id);
+    QList<int> pageIds() const;
+    void setSideWidget(QWidget *widget /Transfer/);
+    QWidget *sideWidget() const;
+
+signals:
+    void pageAdded(int id);
+    void pageRemoved(int id);
+
+private:
+    QWizard(const QWizard &);
+};
+
+QFlags<QWizard::WizardOption> operator|(QWizard::WizardOption f1, QFlags<QWizard::WizardOption> f2);
+
+class QWizardPage : QWidget
+{
+%TypeHeaderCode
+#include <qwizard.h>
+%End
+
+public:
+    explicit QWizardPage(QWidget *parent /TransferThis/ = 0);
+    virtual ~QWizardPage();
+    void setTitle(const QString &title);
+    QString title() const;
+    void setSubTitle(const QString &subTitle);
+    QString subTitle() const;
+    void setPixmap(QWizard::WizardPixmap which, const QPixmap &pixmap);
+    QPixmap pixmap(QWizard::WizardPixmap which) const;
+    void setFinalPage(bool finalPage);
+    bool isFinalPage() const;
+    void setCommitPage(bool commitPage);
+    bool isCommitPage() const;
+    void setButtonText(QWizard::WizardButton which, const QString &text);
+    QString buttonText(QWizard::WizardButton which) const;
+    virtual void initializePage();
+    virtual void cleanupPage();
+    virtual bool validatePage();
+    virtual bool isComplete() const;
+    virtual int nextId() const;
+
+signals:
+    void completeChanged();
+
+protected:
+    void setField(const QString &name, const QVariant &value);
+    QVariant field(const QString &name) const;
+
+public:
+    void registerField(const QString &name, QWidget *widget, const char *property = 0, SIP_PYOBJECT changedSignal /DocType="signal"/ = 0);
+%MethodCode
+        QObject *receiver;
+        QByteArray signal_signature;
+        const char *signal;
+        
+        if (a3 && a3 != Py_None)
+        {
+            if ((sipError = pyqt5_qtwidgets_get_pyqtsignal_parts(a3, &receiver, signal_signature)) == sipErrorNone)
+            {
+                if (receiver != a1)
+                {
+                    PyErr_SetString(PyExc_ValueError,
+                            "the signal must be bound to the same QWidget instance");
+                    sipError = sipErrorFail;
+                }
+                else
+                {
+                    signal = signal_signature.constData();
+                }
+            }
+            else
+            {
+                // We don't set sipError to sipErrorContinue because we don't want to
+                // go on to the next (ie. the real) registerField() overload.  That is
+                // there only so that SIP generates the required public wrapper method
+                // that we need to call below.  We don't want the user to call it.
+                sipBadCallableArg(3, a3);
+                sipError = sipErrorFail;
+            }
+        }
+        else
+        {
+            signal = 0;
+        }
+        
+        if (sipError == sipErrorNone)
+        {
+            Py_BEGIN_ALLOW_THREADS
+        #if defined(SIP_PROTECTED_IS_PUBLIC)
+            sipCpp->registerField(*a0, a1, a2, signal);
+        #else
+            // We should really change SIP to implement /NoDerived/ for protected
+            // methods rather than do this (possibly unsafe) cast.
+            static_cast<sipQWizardPage *>(sipCpp)->sipProtect_registerField(*a0, a1, a2, signal);
+        #endif
+            Py_END_ALLOW_THREADS
+        }
+%End
+
+protected:
+    void registerField(const QString &name, QWidget *widget, const char *property = 0, const char *changedSignal = 0);
+    QWizard *wizard() const;
+
+private:
+    QWizardPage(const QWizardPage &);
+};
diff --git a/sip/QtWinExtras/QtWinExtrasmod.sip b/sip/QtWinExtras/QtWinExtrasmod.sip
new file mode 100644
index 0000000..80c5800
--- /dev/null
+++ b/sip/QtWinExtras/QtWinExtrasmod.sip
@@ -0,0 +1,53 @@
+// This is the SIP interface definition for the QtWinExtras module of PyQt v5.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtWinExtras, keyword_arguments="Optional")
+
+%Import QtWidgets/QtWidgetsmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qwinfunctions.sip
+%Include qwinjumplist.sip
+%Include qwinjumplistcategory.sip
+%Include qwinjumplistitem.sip
+%Include qwintaskbarbutton.sip
+%Include qwintaskbarprogress.sip
+%Include qwinthumbnailtoolbar.sip
+%Include qwinthumbnailtoolbutton.sip
diff --git a/sip/QtWinExtras/qwinfunctions.sip b/sip/QtWinExtras/qwinfunctions.sip
new file mode 100644
index 0000000..fc0d703
--- /dev/null
+++ b/sip/QtWinExtras/qwinfunctions.sip
@@ -0,0 +1,122 @@
+// This is the SIP interface definition for QtWin.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+typedef struct HBITMAP__ *HBITMAP;
+typedef struct HDC__ *HDC;
+typedef struct HICON__ *HICON;
+typedef long HRESULT;
+typedef struct HRGN__ *HRGN;
+
+
+namespace QtWin
+{
+%TypeHeaderCode
+#include <qwinfunctions.h>
+%End
+
+    enum HBitmapFormat
+    {
+        HBitmapNoAlpha,
+        HBitmapPremultipliedAlpha,
+        HBitmapAlpha
+    };
+
+    enum WindowFlip3DPolicy
+    {
+        FlipDefault,
+        FlipExcludeBelow,
+        FlipExcludeAbove
+    };
+
+    HBITMAP createMask(const QBitmap &bitmap);
+    HBITMAP toHBITMAP(const QPixmap &p,
+            QtWin::HBitmapFormat format = QtWin::HBitmapNoAlpha);
+    QPixmap fromHBITMAP(HBITMAP bitmap,
+            QtWin::HBitmapFormat format = QtWin::HBitmapNoAlpha);
+    HICON toHICON(const QPixmap &p);
+    QImage imageFromHBITMAP(HDC hdc, HBITMAP bitmap, int width, int height);
+    QPixmap fromHICON(HICON icon);
+    HRGN toHRGN(const QRegion &region);
+    QRegion fromHRGN(HRGN hrgn);
+
+    QString stringFromHresult(HRESULT hresult);
+    QString errorStringFromHresult(HRESULT hresult);
+
+    QColor colorizationColor(bool *opaqueBlend = 0);
+    QColor realColorizationColor();
+
+    void setWindowExcludedFromPeek(QWindow *window, bool exclude);
+    bool isWindowExcludedFromPeek(QWindow *window);
+    void setWindowDisallowPeek(QWindow *window, bool disallow);
+    bool isWindowPeekDisallowed(QWindow *window);
+    void setWindowFlip3DPolicy(QWindow *window,
+            QtWin::WindowFlip3DPolicy policy);
+    QtWin::WindowFlip3DPolicy windowFlip3DPolicy(QWindow *);
+
+    void extendFrameIntoClientArea(QWindow *window, int left, int top,
+            int right, int bottom);
+    void extendFrameIntoClientArea(QWindow *window, const QMargins &margins);
+    void resetExtendedFrame(QWindow *window);
+
+    void enableBlurBehindWindow(QWindow *window, const QRegion &region);
+    void enableBlurBehindWindow(QWindow *window);
+    void disableBlurBehindWindow(QWindow *window);
+
+    bool isCompositionEnabled();
+    void setCompositionEnabled(bool enabled);
+    bool isCompositionOpaque();
+
+    void setCurrentProcessExplicitAppUserModelID(const QString &id);
+
+    void markFullscreenWindow(QWindow *, bool fullscreen = true);
+
+    void taskbarActivateTab(QWindow *);
+    void taskbarActivateTabAlt(QWindow *);
+    void taskbarAddTab(QWindow *);
+    void taskbarDeleteTab(QWindow *);
+
+    void setWindowExcludedFromPeek(QWidget *window, bool exclude);
+    bool isWindowExcludedFromPeek(QWidget *window);
+    void setWindowDisallowPeek(QWidget *window, bool disallow);
+    bool isWindowPeekDisallowed(QWidget *window);
+    void setWindowFlip3DPolicy(QWidget *window,
+            QtWin::WindowFlip3DPolicy policy);
+    QtWin::WindowFlip3DPolicy windowFlip3DPolicy(QWidget *window);
+
+    void extendFrameIntoClientArea(QWidget *window, const QMargins &margins);
+    void extendFrameIntoClientArea(QWidget *window, int left, int top,
+            int right, int bottom);
+    void resetExtendedFrame(QWidget *window);
+
+    void enableBlurBehindWindow(QWidget *window, const QRegion &region);
+    void enableBlurBehindWindow(QWidget *window);
+    void disableBlurBehindWindow(QWidget *window);
+
+    void markFullscreenWindow(QWidget *window, bool fullscreen = true);
+
+    void taskbarActivateTab(QWidget *window);
+    void taskbarActivateTabAlt(QWidget *window);
+    void taskbarAddTab(QWidget *window);
+    void taskbarDeleteTab(QWidget *window);
+};
+
+%End
diff --git a/sip/QtWinExtras/qwinjumplist.sip b/sip/QtWinExtras/qwinjumplist.sip
new file mode 100644
index 0000000..d037669
--- /dev/null
+++ b/sip/QtWinExtras/qwinjumplist.sip
@@ -0,0 +1,84 @@
+// This is the SIP interface definition for QWinJumpList.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QWinJumpList : public QObject
+{
+%TypeHeaderCode
+#include <qwinjumplist.h>
+%End
+
+%ConvertToSubClassCode
+static struct class_graph {
+    const char *name;
+    sipTypeDef **type;
+    int yes, no;
+} graph[] = {
+    {sipName_QWinThumbnailToolBar, &sipType_QWinThumbnailToolBar, -1, 1},
+    {sipName_QWinJumpList, &sipType_QWinJumpList, -1, 2},
+    {sipName_QWinTaskbarButton, &sipType_QWinTaskbarButton, -1, 3},
+    {sipName_QWinThumbnailToolButton, &sipType_QWinThumbnailToolButton, -1, 4},
+    {sipName_QWinTaskbarProgress, &sipType_QWinTaskbarProgress, -1, -1},
+};
+
+int i = 0;
+
+sipType = NULL;
+
+do
+{
+    struct class_graph *cg = &graph[i];
+
+    if (cg->name != NULL && sipCpp->inherits(cg->name))
+    {
+        sipType = *cg->type;
+        i = cg->yes;
+    }
+    else
+        i = cg->no;
+}
+while (i >= 0);
+%End
+
+public:
+    explicit QWinJumpList(QObject *parent /TransferThis/ = 0);
+    ~QWinJumpList();
+
+    QString identifier() const;
+    void setIdentifier(const QString &identifier);
+
+    QWinJumpListCategory *recent() const;
+    QWinJumpListCategory *frequent() const;
+    QWinJumpListCategory *tasks() const;
+
+    QList<QWinJumpListCategory *> categories() const;
+    void addCategory(QWinJumpListCategory *category /Transfer/);
+    QWinJumpListCategory *addCategory(const QString &title,
+            const QList<QWinJumpListItem *> items /Transfer/ = QList<QWinJumpListItem *>());
+
+public slots:
+    void clear();
+
+private:
+    QWinJumpList(const QWinJumpList &);
+};
+
+%End
diff --git a/sip/QtWinExtras/qwinjumplistcategory.sip b/sip/QtWinExtras/qwinjumplistcategory.sip
new file mode 100644
index 0000000..9438841
--- /dev/null
+++ b/sip/QtWinExtras/qwinjumplistcategory.sip
@@ -0,0 +1,69 @@
+// This is the SIP interface definition for QWinJumpListCategory.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QWinJumpListCategory /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qwinjumplistcategory.h>
+%End
+
+public:
+    enum Type
+    {
+        Custom,
+        Recent,
+        Frequent,
+        Tasks
+    };
+
+    explicit QWinJumpListCategory(const QString &title = QString());
+    ~QWinJumpListCategory();
+
+    Type type() const;
+
+    bool isVisible() const;
+    void setVisible(bool visible);
+
+    QString title() const;
+    void setTitle(const QString &title);
+
+    int count() const;
+    bool isEmpty() const;
+    QList<QWinJumpListItem *> items() const;
+
+    void addItem(QWinJumpListItem *item /Transfer/);
+    QWinJumpListItem *addDestination(const QString &filePath);
+    QWinJumpListItem *addLink(const QString &title,
+            const QString &executablePath,
+            const QStringList &arguments = QStringList());
+    QWinJumpListItem *addLink(const QIcon &icon, const QString &title,
+            const QString &executablePath,
+            const QStringList &arguments = QStringList());
+    QWinJumpListItem *addSeparator();
+
+    void clear();
+
+private:
+    QWinJumpListCategory(const QWinJumpListCategory &);
+};
+
+%End
diff --git a/sip/QtWinExtras/qwinjumplistitem.sip b/sip/QtWinExtras/qwinjumplistitem.sip
new file mode 100644
index 0000000..19d1eb7
--- /dev/null
+++ b/sip/QtWinExtras/qwinjumplistitem.sip
@@ -0,0 +1,59 @@
+// This is the SIP interface definition for QWinJumpListItem.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QWinJumpListItem /Supertype=sip.wrapper/
+{
+%TypeHeaderCode
+#include <qwinjumplistitem.h>
+%End
+
+public:
+    enum Type
+    {
+        Destination,
+        Link,
+        Separator
+    };
+
+    explicit QWinJumpListItem(Type type);
+    ~QWinJumpListItem();
+
+    void setType(Type type);
+    Type type() const;
+    void setFilePath(const QString &filePath);
+    QString filePath() const;
+    void setWorkingDirectory(const QString &workingDirectory);
+    QString workingDirectory() const;
+    void setIcon(const QIcon &icon);
+    QIcon icon() const;
+    void setTitle(const QString &title);
+    QString title() const;
+    void setDescription(const QString &description);
+    QString description() const;
+    void setArguments(const QStringList &arguments);
+    QStringList arguments() const;
+
+private:
+    QWinJumpListItem(const QWinJumpListItem &);
+};
+
+%End
diff --git a/sip/QtWinExtras/qwintaskbarbutton.sip b/sip/QtWinExtras/qwintaskbarbutton.sip
new file mode 100644
index 0000000..d0a4f5f
--- /dev/null
+++ b/sip/QtWinExtras/qwintaskbarbutton.sip
@@ -0,0 +1,53 @@
+// This is the SIP interface definition for QWinTaskbarButton.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QWinTaskbarButton : public QObject
+{
+%TypeHeaderCode
+#include <qwintaskbarbutton.h>
+%End
+
+public:
+    explicit QWinTaskbarButton(QObject *parent /TransferThis/ = 0);
+    ~QWinTaskbarButton();
+
+    void setWindow(QWindow *window);
+    QWindow *window() const;
+
+    QIcon overlayIcon() const;
+    QString overlayAccessibleDescription() const;
+
+    QWinTaskbarProgress *progress() const;
+
+    bool eventFilter(QObject *, QEvent *);
+
+public slots:
+    void setOverlayIcon(const QIcon &icon);
+    void setOverlayAccessibleDescription(const QString &description);
+
+    void clearOverlayIcon();
+
+private:
+    QWinTaskbarButton(const QWinTaskbarButton &);
+};
+
+%End
diff --git a/sip/QtWinExtras/qwintaskbarprogress.sip b/sip/QtWinExtras/qwintaskbarprogress.sip
new file mode 100644
index 0000000..e08001d
--- /dev/null
+++ b/sip/QtWinExtras/qwintaskbarprogress.sip
@@ -0,0 +1,64 @@
+// This is the SIP interface definition for QWinTaskbarProgress.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QWinTaskbarProgress : public QObject
+{
+%TypeHeaderCode
+#include <qwintaskbarprogress.h>
+%End
+
+public:
+    explicit QWinTaskbarProgress(QObject *parent /TransferThis/= 0);
+    ~QWinTaskbarProgress();
+
+    int value() const;
+    int minimum() const;
+    int maximum() const;
+    bool isVisible() const;
+    bool isPaused() const;
+    bool isStopped() const;
+
+public slots:
+    void setValue(int value);
+    void setMinimum(int minimum);
+    void setMaximum(int maximum);
+    void setRange(int minimum, int maximum);
+    void reset();
+    void show();
+    void hide();
+    void setVisible(bool visible);
+    void pause();
+    void resume();
+    void setPaused(bool paused);
+    void stop();
+
+signals:
+    void valueChanged(int value);
+    void minimumChanged(int minimum);
+    void maximumChanged(int maximum);
+    void visibilityChanged(bool visible);
+
+private:
+    QWinTaskbarProgress(const QWinTaskbarProgress &);
+};
+
+%End
diff --git a/sip/QtWinExtras/qwinthumbnailtoolbar.sip b/sip/QtWinExtras/qwinthumbnailtoolbar.sip
new file mode 100644
index 0000000..d100e86
--- /dev/null
+++ b/sip/QtWinExtras/qwinthumbnailtoolbar.sip
@@ -0,0 +1,49 @@
+// This is the SIP interface definition for QWinThumbnailToolBar.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QWinThumbnailToolBar : public QObject
+{
+%TypeHeaderCode
+#include <qwinthumbnailtoolbar.h>
+%End
+
+public:
+    explicit QWinThumbnailToolBar(QObject *parent /TransferThis/ = 0);
+    ~QWinThumbnailToolBar();
+
+    void setWindow(QWindow *window);
+    QWindow *window() const;
+
+    void addButton(QWinThumbnailToolButton *button);
+    void removeButton(QWinThumbnailToolButton *button);
+    void setButtons(const QList<QWinThumbnailToolButton *> &buttons);
+    QList<QWinThumbnailToolButton *> buttons() const;
+    int count() const;
+
+public slots:
+    void clear();
+
+private:
+    QWinThumbnailToolBar(const QWinThumbnailToolBar &);
+};
+
+%End
diff --git a/sip/QtWinExtras/qwinthumbnailtoolbutton.sip b/sip/QtWinExtras/qwinthumbnailtoolbutton.sip
new file mode 100644
index 0000000..2e3a977
--- /dev/null
+++ b/sip/QtWinExtras/qwinthumbnailtoolbutton.sip
@@ -0,0 +1,58 @@
+// This is the SIP interface definition for QWinThumbnailToolButton.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_2_0 -)
+
+class QWinThumbnailToolButton : public QObject
+{
+%TypeHeaderCode
+#include <qwinthumbnailtoolbutton.h>
+%End
+
+public:
+    explicit QWinThumbnailToolButton(QObject *parent /TransferThis/ = 0);
+    ~QWinThumbnailToolButton();
+
+    void setToolTip(const QString &toolTip);
+    QString toolTip() const;
+    void setIcon(const QIcon &icon);
+    QIcon icon() const;
+    void setEnabled(bool enabled);
+    bool isEnabled() const;
+    void setInteractive(bool interactive);
+    bool isInteractive() const;
+    void setVisible(bool visible);
+    bool isVisible() const;
+    void setDismissOnClick(bool dismiss);
+    bool dismissOnClick() const;
+    void setFlat(bool flat);
+    bool isFlat() const;
+
+public slots:
+    void click();
+
+signals:
+    void clicked();
+
+private:
+    QWinThumbnailToolButton(const QWinThumbnailToolButton &);
+};
+
+%End
diff --git a/sip/QtX11Extras/QtX11Extrasmod.sip b/sip/QtX11Extras/QtX11Extrasmod.sip
new file mode 100644
index 0000000..94a228e
--- /dev/null
+++ b/sip/QtX11Extras/QtX11Extrasmod.sip
@@ -0,0 +1,46 @@
+// This is the SIP interface definition for the QtX11Extras module of PyQt v5.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtX11Extras, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qx11info_x11.sip
diff --git a/sip/QtX11Extras/qx11info_x11.sip b/sip/QtX11Extras/qx11info_x11.sip
new file mode 100644
index 0000000..3768391
--- /dev/null
+++ b/sip/QtX11Extras/qx11info_x11.sip
@@ -0,0 +1,61 @@
+// This is the SIP interface definition for QX11Info.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class Display;
+class xcb_connection_t;
+
+
+class QX11Info
+{
+%TypeHeaderCode
+#include <qx11info_x11.h>
+%End
+
+public:
+%If (Qt_5_2_0 -)
+    static bool isPlatformX11();
+%End
+
+    static int appDpiX(int screen = -1);
+    static int appDpiY(int screen = -1);
+
+    static unsigned long appRootWindow(int screen = -1);
+    static int appScreen();
+
+    static unsigned long appTime();
+    static unsigned long appUserTime();
+
+    static void setAppTime(unsigned long time);
+    static void setAppUserTime(unsigned long time);
+
+%If (Qt_5_2_0 -)
+    static unsigned long getTimestamp();
+%End
+
+    static Display *display();
+    static xcb_connection_t *connection();
+
+private:
+    QX11Info();
+};
+
+%End
diff --git a/sip/QtXmlPatterns/QtXmlPatternsmod.sip b/sip/QtXmlPatterns/QtXmlPatternsmod.sip
new file mode 100644
index 0000000..26934fe
--- /dev/null
+++ b/sip/QtXmlPatterns/QtXmlPatternsmod.sip
@@ -0,0 +1,62 @@
+// QtXmlPatternsmod.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5.QtXmlPatterns, keyword_arguments="Optional")
+
+%Import QtCore/QtCoremod.sip
+%Import QtNetwork/QtNetworkmod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%DefaultSupertype sip.simplewrapper
+
+%Include qabstractmessagehandler.sip
+%Include qabstracturiresolver.sip
+%Include qabstractxmlnodemodel.sip
+%Include qabstractxmlreceiver.sip
+%Include qsimplexmlnodemodel.sip
+%Include qsourcelocation.sip
+%Include qxmlformatter.sip
+%Include qxmlname.sip
+%Include qxmlnamepool.sip
+%Include qxmlquery.sip
+%Include qxmlresultitems.sip
+%Include qxmlschema.sip
+%Include qxmlschemavalidator.sip
+%Include qxmlserializer.sip
diff --git a/sip/QtXmlPatterns/qabstractmessagehandler.sip b/sip/QtXmlPatterns/qabstractmessagehandler.sip
new file mode 100644
index 0000000..cccee97
--- /dev/null
+++ b/sip/QtXmlPatterns/qabstractmessagehandler.sip
@@ -0,0 +1,68 @@
+// qabstractmessagehandler.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractMessageHandler : QObject
+{
+%TypeHeaderCode
+#include <qabstractmessagehandler.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QAbstractUriResolver, &sipType_QAbstractUriResolver, -1, 1},
+        {sipName_QAbstractMessageHandler, &sipType_QAbstractMessageHandler, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    QAbstractMessageHandler(QObject *parent /TransferThis/ = 0);
+    virtual ~QAbstractMessageHandler();
+    void message(QtMsgType type, const QString &description, const QUrl &identifier = QUrl(), const QSourceLocation &sourceLocation = QSourceLocation());
+
+protected:
+    virtual void handleMessage(QtMsgType type, const QString &description, const QUrl &identifier, const QSourceLocation &sourceLocation) = 0;
+
+private:
+    QAbstractMessageHandler(const QAbstractMessageHandler &);
+};
diff --git a/sip/QtXmlPatterns/qabstracturiresolver.sip b/sip/QtXmlPatterns/qabstracturiresolver.sip
new file mode 100644
index 0000000..2e29a08
--- /dev/null
+++ b/sip/QtXmlPatterns/qabstracturiresolver.sip
@@ -0,0 +1,36 @@
+// qabstracturiresolver.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractUriResolver : QObject
+{
+%TypeHeaderCode
+#include <qabstracturiresolver.h>
+%End
+
+public:
+    QAbstractUriResolver(QObject *parent /TransferThis/ = 0);
+    virtual ~QAbstractUriResolver();
+    virtual QUrl resolve(const QUrl &relative, const QUrl &baseURI) const = 0;
+
+private:
+    QAbstractUriResolver(const QAbstractUriResolver &);
+};
diff --git a/sip/QtXmlPatterns/qabstractxmlnodemodel.sip b/sip/QtXmlPatterns/qabstractxmlnodemodel.sip
new file mode 100644
index 0000000..8e315fe
--- /dev/null
+++ b/sip/QtXmlPatterns/qabstractxmlnodemodel.sip
@@ -0,0 +1,131 @@
+// qabstractxmlnodemodel.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QXmlNodeModelIndex
+{
+%TypeHeaderCode
+#include <qabstractxmlnodemodel.h>
+%End
+
+public:
+    QXmlNodeModelIndex();
+    QXmlNodeModelIndex(const QXmlNodeModelIndex &other);
+    bool operator==(const QXmlNodeModelIndex &other) const;
+    bool operator!=(const QXmlNodeModelIndex &other) const;
+
+    enum NodeKind
+    {
+        Attribute,
+        Comment,
+        Document,
+        Element,
+        Namespace,
+        ProcessingInstruction,
+        Text,
+    };
+
+    enum DocumentOrder
+    {
+        Precedes,
+        Is,
+        Follows,
+    };
+
+    qint64 data() const;
+    SIP_PYOBJECT internalPointer() const;
+%MethodCode
+        sipRes = reinterpret_cast<PyObject *>(sipCpp->internalPointer());
+        
+        if (!sipRes)
+            sipRes = Py_None;
+        
+        Py_INCREF(sipRes);
+%End
+
+    const QAbstractXmlNodeModel *model() const;
+    qint64 additionalData() const;
+    bool isNull() const;
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+};
+
+class QAbstractXmlNodeModel
+{
+%TypeHeaderCode
+#include <qabstractxmlnodemodel.h>
+%End
+
+public:
+    enum SimpleAxis
+    {
+        Parent,
+        FirstChild,
+        PreviousSibling,
+        NextSibling,
+    };
+
+    QAbstractXmlNodeModel();
+    virtual ~QAbstractXmlNodeModel();
+    virtual QUrl baseUri(const QXmlNodeModelIndex &ni) const = 0;
+    virtual QUrl documentUri(const QXmlNodeModelIndex &ni) const = 0;
+    virtual QXmlNodeModelIndex::NodeKind kind(const QXmlNodeModelIndex &ni) const = 0;
+    virtual QXmlNodeModelIndex::DocumentOrder compareOrder(const QXmlNodeModelIndex &ni1, const QXmlNodeModelIndex &ni2) const = 0;
+    virtual QXmlNodeModelIndex root(const QXmlNodeModelIndex &n) const = 0;
+    virtual QXmlName name(const QXmlNodeModelIndex &ni) const = 0;
+    virtual QString stringValue(const QXmlNodeModelIndex &n) const = 0;
+    virtual QVariant typedValue(const QXmlNodeModelIndex &n) const = 0;
+    virtual QVector<QXmlName> namespaceBindings(const QXmlNodeModelIndex &n) const = 0;
+    virtual QXmlNodeModelIndex elementById(const QXmlName &NCName) const = 0;
+    virtual QVector<QXmlNodeModelIndex> nodesByIdref(const QXmlName &NCName) const = 0;
+    QSourceLocation sourceLocation(const QXmlNodeModelIndex &index) const;
+
+protected:
+    virtual QXmlNodeModelIndex nextFromSimpleAxis(QAbstractXmlNodeModel::SimpleAxis axis, const QXmlNodeModelIndex &origin) const = 0;
+    virtual QVector<QXmlNodeModelIndex> attributes(const QXmlNodeModelIndex &element) const = 0;
+    QXmlNodeModelIndex createIndex(qint64 data) const;
+    QXmlNodeModelIndex createIndex(qint64 data, qint64 additionalData) const;
+    QXmlNodeModelIndex createIndex(SIP_PYOBJECT pointer, qint64 additionalData = 0) const [QXmlNodeModelIndex (void *pointer, qint64 additionalData = 0)];
+
+private:
+    QAbstractXmlNodeModel(const QAbstractXmlNodeModel &);
+};
+
+class QXmlItem
+{
+%TypeHeaderCode
+#include <qabstractxmlnodemodel.h>
+%End
+
+public:
+    QXmlItem();
+    QXmlItem(const QXmlItem &other);
+    QXmlItem(const QXmlNodeModelIndex &node);
+    QXmlItem(const QVariant &atomicValue);
+    ~QXmlItem();
+    bool isNull() const;
+    bool isNode() const;
+    bool isAtomicValue() const;
+    QVariant toAtomicValue() const;
+    QXmlNodeModelIndex toNodeModelIndex() const;
+};
diff --git a/sip/QtXmlPatterns/qabstractxmlreceiver.sip b/sip/QtXmlPatterns/qabstractxmlreceiver.sip
new file mode 100644
index 0000000..c052cd0
--- /dev/null
+++ b/sip/QtXmlPatterns/qabstractxmlreceiver.sip
@@ -0,0 +1,47 @@
+// qabstractxmlreceiver.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAbstractXmlReceiver
+{
+%TypeHeaderCode
+#include <qabstractxmlreceiver.h>
+%End
+
+public:
+    QAbstractXmlReceiver();
+    virtual ~QAbstractXmlReceiver();
+    virtual void startElement(const QXmlName &name) = 0;
+    virtual void endElement() = 0;
+    virtual void attribute(const QXmlName &name, const QStringRef &value) = 0;
+    virtual void comment(const QString &value) = 0;
+    virtual void characters(const QStringRef &value) = 0;
+    virtual void startDocument() = 0;
+    virtual void endDocument() = 0;
+    virtual void processingInstruction(const QXmlName &target, const QString &value) = 0;
+    virtual void atomicValue(const QVariant &value) = 0;
+    virtual void namespaceBinding(const QXmlName &name) = 0;
+    virtual void startOfSequence() = 0;
+    virtual void endOfSequence() = 0;
+
+private:
+    QAbstractXmlReceiver(const QAbstractXmlReceiver &);
+};
diff --git a/sip/QtXmlPatterns/qsimplexmlnodemodel.sip b/sip/QtXmlPatterns/qsimplexmlnodemodel.sip
new file mode 100644
index 0000000..f4b39e4
--- /dev/null
+++ b/sip/QtXmlPatterns/qsimplexmlnodemodel.sip
@@ -0,0 +1,38 @@
+// qsimplexmlnodemodel.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSimpleXmlNodeModel : QAbstractXmlNodeModel
+{
+%TypeHeaderCode
+#include <qsimplexmlnodemodel.h>
+%End
+
+public:
+    QSimpleXmlNodeModel(const QXmlNamePool &namePool);
+    virtual ~QSimpleXmlNodeModel();
+    virtual QUrl baseUri(const QXmlNodeModelIndex &node) const;
+    QXmlNamePool &namePool() const;
+    virtual QVector<QXmlName> namespaceBindings(const QXmlNodeModelIndex &) const;
+    virtual QString stringValue(const QXmlNodeModelIndex &node) const;
+    virtual QXmlNodeModelIndex elementById(const QXmlName &id) const;
+    virtual QVector<QXmlNodeModelIndex> nodesByIdref(const QXmlName &idref) const;
+};
diff --git a/sip/QtXmlPatterns/qsourcelocation.sip b/sip/QtXmlPatterns/qsourcelocation.sip
new file mode 100644
index 0000000..97a8a51
--- /dev/null
+++ b/sip/QtXmlPatterns/qsourcelocation.sip
@@ -0,0 +1,47 @@
+// qsourcelocation.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QSourceLocation
+{
+%TypeHeaderCode
+#include <qsourcelocation.h>
+%End
+
+public:
+    QSourceLocation();
+    QSourceLocation(const QSourceLocation &other);
+    QSourceLocation(const QUrl &u, int line = -1, int column = -1);
+    ~QSourceLocation();
+    bool operator==(const QSourceLocation &other) const;
+    bool operator!=(const QSourceLocation &other) const;
+    qint64 column() const;
+    void setColumn(qint64 newColumn);
+    qint64 line() const;
+    void setLine(qint64 newLine);
+    QUrl uri() const;
+    void setUri(const QUrl &newUri);
+    bool isNull() const;
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+};
diff --git a/sip/QtXmlPatterns/qxmlformatter.sip b/sip/QtXmlPatterns/qxmlformatter.sip
new file mode 100644
index 0000000..2f27ee1
--- /dev/null
+++ b/sip/QtXmlPatterns/qxmlformatter.sip
@@ -0,0 +1,44 @@
+// qxmlformatter.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QXmlFormatter : QXmlSerializer
+{
+%TypeHeaderCode
+#include <qxmlformatter.h>
+%End
+
+public:
+    QXmlFormatter(const QXmlQuery &query, QIODevice *outputDevice);
+    virtual void characters(const QStringRef &value);
+    virtual void comment(const QString &value);
+    virtual void startElement(const QXmlName &name);
+    virtual void endElement();
+    virtual void attribute(const QXmlName &name, const QStringRef &value);
+    virtual void processingInstruction(const QXmlName &name, const QString &value);
+    virtual void atomicValue(const QVariant &value);
+    virtual void startDocument();
+    virtual void endDocument();
+    virtual void startOfSequence();
+    virtual void endOfSequence();
+    int indentationDepth() const;
+    void setIndentationDepth(int depth);
+};
diff --git a/sip/QtXmlPatterns/qxmlname.sip b/sip/QtXmlPatterns/qxmlname.sip
new file mode 100644
index 0000000..22a6ac1
--- /dev/null
+++ b/sip/QtXmlPatterns/qxmlname.sip
@@ -0,0 +1,45 @@
+// qxmlname.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QXmlName
+{
+%TypeHeaderCode
+#include <qxmlname.h>
+%End
+
+public:
+    QXmlName();
+    QXmlName(QXmlNamePool &namePool, const QString &localName, const QString &namespaceUri /DocValue="''"/ = QString(), const QString &prefix /DocValue="''"/ = QString());
+    QString namespaceUri(const QXmlNamePool &query) const;
+    QString prefix(const QXmlNamePool &query) const;
+    QString localName(const QXmlNamePool &query) const;
+    QString toClarkName(const QXmlNamePool &query) const;
+    bool operator==(const QXmlName &other) const;
+    bool operator!=(const QXmlName &other) const;
+    bool isNull() const;
+    static bool isNCName(const QString &candidate);
+    static QXmlName fromClarkName(const QString &clarkName, const QXmlNamePool &namePool);
+    long __hash__() const;
+%MethodCode
+        sipRes = qHash(*sipCpp);
+%End
+};
diff --git a/sip/QtXmlPatterns/qxmlnamepool.sip b/sip/QtXmlPatterns/qxmlnamepool.sip
new file mode 100644
index 0000000..8898052
--- /dev/null
+++ b/sip/QtXmlPatterns/qxmlnamepool.sip
@@ -0,0 +1,33 @@
+// qxmlnamepool.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QXmlNamePool
+{
+%TypeHeaderCode
+#include <qxmlnamepool.h>
+%End
+
+public:
+    QXmlNamePool();
+    QXmlNamePool(const QXmlNamePool &other);
+    ~QXmlNamePool();
+};
diff --git a/sip/QtXmlPatterns/qxmlquery.sip b/sip/QtXmlPatterns/qxmlquery.sip
new file mode 100644
index 0000000..9d74a6d
--- /dev/null
+++ b/sip/QtXmlPatterns/qxmlquery.sip
@@ -0,0 +1,116 @@
+// qxmlquery.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QXmlQuery
+{
+%TypeHeaderCode
+#include <qxmlquery.h>
+%End
+
+%TypeCode
+// Needed by the evaluateToStringList() %MethodCode.
+#include <qstringlist.h>
+%End
+
+public:
+    enum QueryLanguage
+    {
+        XQuery10,
+        XSLT20,
+    };
+
+    QXmlQuery();
+    QXmlQuery(const QXmlQuery &other);
+    QXmlQuery(const QXmlNamePool &np);
+    QXmlQuery(QXmlQuery::QueryLanguage queryLanguage, const QXmlNamePool &pool = QXmlNamePool());
+    ~QXmlQuery();
+    void setMessageHandler(QAbstractMessageHandler *messageHandler /KeepReference/);
+    QAbstractMessageHandler *messageHandler() const;
+    void setQuery(const QString &sourceCode, const QUrl &documentUri = QUrl());
+    void setQuery(QIODevice *sourceCode, const QUrl &documentUri = QUrl());
+    void setQuery(const QUrl &queryURI, const QUrl &baseUri = QUrl());
+    QXmlNamePool namePool() const;
+    void bindVariable(const QXmlName &name, const QXmlItem &value);
+    void bindVariable(const QXmlName &name, QIODevice *);
+    void bindVariable(const QXmlName &name, const QXmlQuery &query);
+    void bindVariable(const QString &localName, const QXmlItem &value);
+    void bindVariable(const QString &localName, QIODevice *);
+    void bindVariable(const QString &localName, const QXmlQuery &query);
+    bool isValid() const;
+    void evaluateTo(QXmlResultItems *result) const;
+    bool evaluateTo(QAbstractXmlReceiver *callback) const;
+    SIP_PYOBJECT evaluateToStringList() const /DocType="list-of-str"/;
+%MethodCode
+        bool ok;
+        QStringList *result = new QStringList;
+        
+        Py_BEGIN_ALLOW_THREADS
+        ok = sipCpp->evaluateTo(result);
+        Py_END_ALLOW_THREADS
+        
+        if (ok)
+        {
+            sipRes = sipConvertFromNewType(result, sipType_QStringList, NULL);
+        }
+        else
+        {
+            delete result;
+            sipRes = Py_None;
+            Py_INCREF(Py_None);
+        }
+%End
+
+    bool evaluateTo(QIODevice *target) const;
+    SIP_PYOBJECT evaluateToString() const /DocType="str"/;
+%MethodCode
+        bool ok;
+        QString *result = new QString;
+        
+        Py_BEGIN_ALLOW_THREADS
+        ok = sipCpp->evaluateTo(result);
+        Py_END_ALLOW_THREADS
+        
+        if (ok)
+        {
+            sipRes = sipConvertFromNewType(result, sipType_QString, NULL);
+        }
+        else
+        {
+            delete result;
+            sipRes = Py_None;
+            Py_INCREF(Py_None);
+        }
+%End
+
+    void setUriResolver(const QAbstractUriResolver *resolver /KeepReference/);
+    const QAbstractUriResolver *uriResolver() const;
+    void setFocus(const QXmlItem &item);
+    bool setFocus(const QUrl &documentURI);
+    bool setFocus(QIODevice *document);
+    bool setFocus(const QString &focus);
+    void setInitialTemplateName(const QXmlName &name);
+    void setInitialTemplateName(const QString &name);
+    QXmlName initialTemplateName() const;
+    void setNetworkAccessManager(QNetworkAccessManager *newManager /KeepReference/);
+    QNetworkAccessManager *networkAccessManager() const;
+    QXmlQuery::QueryLanguage queryLanguage() const;
+};
diff --git a/sip/QtXmlPatterns/qxmlresultitems.sip b/sip/QtXmlPatterns/qxmlresultitems.sip
new file mode 100644
index 0000000..330609f
--- /dev/null
+++ b/sip/QtXmlPatterns/qxmlresultitems.sip
@@ -0,0 +1,38 @@
+// qxmlresultitems.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QXmlResultItems
+{
+%TypeHeaderCode
+#include <qxmlresultitems.h>
+%End
+
+public:
+    QXmlResultItems();
+    virtual ~QXmlResultItems();
+    bool hasError() const;
+    QXmlItem next();
+    QXmlItem current() const;
+
+private:
+    QXmlResultItems(const QXmlResultItems &);
+};
diff --git a/sip/QtXmlPatterns/qxmlschema.sip b/sip/QtXmlPatterns/qxmlschema.sip
new file mode 100644
index 0000000..ec8b570
--- /dev/null
+++ b/sip/QtXmlPatterns/qxmlschema.sip
@@ -0,0 +1,50 @@
+// qxmlschema.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QXmlSchema
+{
+%TypeHeaderCode
+#include <qxmlschema.h>
+%End
+
+public:
+    QXmlSchema();
+    QXmlSchema(const QXmlSchema &other);
+
+private:
+    QXmlSchema &operator=(const QXmlSchema &);
+
+public:
+    ~QXmlSchema();
+    bool load(const QUrl &source) /ReleaseGIL/;
+    bool load(QIODevice *source, const QUrl &documentUri = QUrl()) /ReleaseGIL/;
+    bool load(const QByteArray &data, const QUrl &documentUri = QUrl());
+    bool isValid() const;
+    QXmlNamePool namePool() const;
+    QUrl documentUri() const;
+    void setMessageHandler(QAbstractMessageHandler *handler /KeepReference/);
+    QAbstractMessageHandler *messageHandler() const;
+    void setUriResolver(const QAbstractUriResolver *resolver /KeepReference/);
+    const QAbstractUriResolver *uriResolver() const;
+    void setNetworkAccessManager(QNetworkAccessManager *networkmanager /KeepReference/);
+    QNetworkAccessManager *networkAccessManager() const;
+};
diff --git a/sip/QtXmlPatterns/qxmlschemavalidator.sip b/sip/QtXmlPatterns/qxmlschemavalidator.sip
new file mode 100644
index 0000000..f3f0dfc
--- /dev/null
+++ b/sip/QtXmlPatterns/qxmlschemavalidator.sip
@@ -0,0 +1,59 @@
+// qxmlschemavalidator.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QXmlSchemaValidator
+{
+%TypeHeaderCode
+#include <qxmlschemavalidator.h>
+%End
+
+public:
+    QXmlSchemaValidator();
+    QXmlSchemaValidator(const QXmlSchema &schema);
+    ~QXmlSchemaValidator();
+    void setSchema(const QXmlSchema &schema);
+    bool validate(const QUrl &source) const /ReleaseGIL/;
+    bool validate(QIODevice *source, const QUrl &documentUri = QUrl()) const /ReleaseGIL/;
+    bool validate(const QByteArray &data, const QUrl &documentUri = QUrl()) const;
+    QXmlNamePool namePool() const;
+    QXmlSchema schema() const;
+%MethodCode
+        // For reasons we don't quite understand QXmlSchema's copy ctor has to be
+        // private as far as sip is concerned - otherwise we get compiler errors.
+        // However that means that sip generates the wrong code here, because it
+        // doesn't realise it can take a copy of the result.
+        
+        Py_BEGIN_ALLOW_THREADS
+        sipRes = new QXmlSchema(sipCpp->schema());
+        Py_END_ALLOW_THREADS
+%End
+
+    void setMessageHandler(QAbstractMessageHandler *handler /KeepReference/);
+    QAbstractMessageHandler *messageHandler() const;
+    void setUriResolver(const QAbstractUriResolver *resolver /KeepReference/);
+    const QAbstractUriResolver *uriResolver() const;
+    void setNetworkAccessManager(QNetworkAccessManager *networkmanager /KeepReference/);
+    QNetworkAccessManager *networkAccessManager() const;
+
+private:
+    QXmlSchemaValidator(const QXmlSchemaValidator &);
+};
diff --git a/sip/QtXmlPatterns/qxmlserializer.sip b/sip/QtXmlPatterns/qxmlserializer.sip
new file mode 100644
index 0000000..0dae3e0
--- /dev/null
+++ b/sip/QtXmlPatterns/qxmlserializer.sip
@@ -0,0 +1,46 @@
+// qxmlserializer.sip generated by MetaSIP on Fri Sep 12 22:59:01 2014
+//
+// This file is part of the QtXmlPatterns Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QXmlSerializer : QAbstractXmlReceiver
+{
+%TypeHeaderCode
+#include <qxmlserializer.h>
+%End
+
+public:
+    QXmlSerializer(const QXmlQuery &query, QIODevice *outputDevice);
+    virtual void namespaceBinding(const QXmlName &nb);
+    virtual void characters(const QStringRef &value);
+    virtual void comment(const QString &value);
+    virtual void startElement(const QXmlName &name);
+    virtual void endElement();
+    virtual void attribute(const QXmlName &name, const QStringRef &value);
+    virtual void processingInstruction(const QXmlName &name, const QString &value);
+    virtual void atomicValue(const QVariant &value);
+    virtual void startDocument();
+    virtual void endDocument();
+    virtual void startOfSequence();
+    virtual void endOfSequence();
+    QIODevice *outputDevice() const;
+    void setCodec(const QTextCodec *codec /KeepReference/);
+    const QTextCodec *codec() const;
+};
diff --git a/sip/_QOpenGLFunctions_2_0/_QOpenGLFunctions_2_0mod.sip b/sip/_QOpenGLFunctions_2_0/_QOpenGLFunctions_2_0mod.sip
new file mode 100644
index 0000000..a6f3f35
--- /dev/null
+++ b/sip/_QOpenGLFunctions_2_0/_QOpenGLFunctions_2_0mod.sip
@@ -0,0 +1,46 @@
+// _QOpenGLFunctions_2_0mod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the _QOpenGLFunctions_2_0 Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5._QOpenGLFunctions_2_0, keyword_arguments="Optional")
+
+%Import QtGui/QtGuimod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%Include qopenglfunctions_2_0.sip
diff --git a/sip/_QOpenGLFunctions_2_0/qopenglfunctions_2_0.sip b/sip/_QOpenGLFunctions_2_0/qopenglfunctions_2_0.sip
new file mode 100644
index 0000000..22ccaca
--- /dev/null
+++ b/sip/_QOpenGLFunctions_2_0/qopenglfunctions_2_0.sip
@@ -0,0 +1,3043 @@
+// qopenglfunctions_2_0.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the _QOpenGLFunctions_2_0 Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QOpenGLFunctions_2_0 : QAbstractOpenGLFunctions
+{
+%TypeHeaderCode
+#include <qopenglfunctions_2_0.h>
+%End
+
+public:
+    QOpenGLFunctions_2_0();
+    bool initializeOpenGLFunctions();
+    void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
+    void glDepthRange(GLdouble nearVal, GLdouble farVal);
+    GLboolean glIsEnabled(GLenum cap);
+    void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[1];
+            
+        sipCpp->glGetTexLevelParameteriv(a0, a1, a2, params);
+        
+        a3 = qpyopengl_from_GLint(&sipIsErr, params, 1);
+%End
+
+    void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[1];
+            
+        sipCpp->glGetTexLevelParameterfv(a0, a1, a2, params);
+        
+        a3 = qpyopengl_from_GLfloat(&sipIsErr, params, 1);
+%End
+
+    void glGetTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_SWIZZLE_RGBA)
+        #if defined(GL_TEXTURE_SWIZZLE_RGBA)
+        case GL_TEXTURE_SWIZZLE_RGBA:
+        #endif
+        #if defined(GL_TEXTURE_BORDER_COLOR)
+        case GL_TEXTURE_BORDER_COLOR:
+        #endif
+            nr_params = 4;
+            break;
+        #endif
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetTexParameteriv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    void glGetTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_SWIZZLE_RGBA)
+        #if defined(GL_TEXTURE_SWIZZLE_RGBA)
+        case GL_TEXTURE_SWIZZLE_RGBA:
+        #endif
+        #if defined(GL_TEXTURE_BORDER_COLOR)
+        case GL_TEXTURE_BORDER_COLOR:
+        #endif
+            nr_params = 4;
+            break;
+        #endif
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetTexParameterfv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+%End
+
+    const char *glGetString(GLenum name);
+%MethodCode
+        sipRes = reinterpret_cast<const char *>(sipCpp->glGetString(a0));
+%End
+
+    void glGetIntegerv(GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint fixed_params[4], *params;
+        GLint nr_params = 0;
+        GLenum query;
+        
+        switch (a0)
+        {
+        case GL_COMPRESSED_TEXTURE_FORMATS:
+            query = GL_NUM_COMPRESSED_TEXTURE_FORMATS;
+            break;
+        
+        #if defined(GL_PROGRAM_BINARY_FORMATS)
+        case GL_PROGRAM_BINARY_FORMATS:
+            query = GL_NUM_PROGRAM_BINARY_FORMATS;
+            break;
+        #endif
+        
+        #if defined(GL_SHADER_BINARY_FORMATS)
+        case GL_SHADER_BINARY_FORMATS:
+            query = GL_NUM_SHADER_BINARY_FORMATS;
+            break;
+        #endif
+        
+        case GL_BLEND_COLOR:
+        case GL_COLOR_CLEAR_VALUE:
+        case GL_COLOR_WRITEMASK:
+        case GL_SCISSOR_BOX:
+        case GL_VIEWPORT:
+            nr_params = 4;
+            break;
+        
+        case GL_ALIASED_LINE_WIDTH_RANGE:
+        case GL_ALIASED_POINT_SIZE_RANGE:
+        case GL_DEPTH_RANGE:
+        #if defined(GL_LINE_WIDTH_RANGE)
+        case GL_LINE_WIDTH_RANGE:
+        #endif
+        case GL_MAX_VIEWPORT_DIMS:
+        #if defined(GL_POINT_SIZE_RANGE)
+        case GL_POINT_SIZE_RANGE:
+        #endif
+        #if defined(GL_VIEWPORT_BOUNDS_RANGE)
+        case GL_VIEWPORT_BOUNDS_RANGE:
+        #endif
+            nr_params = 2;
+            break;
+            
+        default:
+            nr_params = 1;
+        }
+        
+        if (nr_params == 0)
+        {
+            sipCpp->glGetIntegerv(query, &nr_params);
+            params = new GLint[nr_params];
+        }
+        else
+        {
+            params = fixed_params;
+        }
+        
+        sipCpp->glGetIntegerv(a0, params);
+        a1 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+            
+        if (params != fixed_params)
+            delete[] params;
+%End
+
+    void glGetFloatv(GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat fixed_params[4], *params;
+        GLint nr_params = 0;
+        GLenum query;
+        
+        switch (a0)
+        {
+        case GL_COMPRESSED_TEXTURE_FORMATS:
+            query = GL_NUM_COMPRESSED_TEXTURE_FORMATS;
+            break;
+        
+        #if defined(GL_PROGRAM_BINARY_FORMATS)
+        case GL_PROGRAM_BINARY_FORMATS:
+            query = GL_NUM_PROGRAM_BINARY_FORMATS;
+            break;
+        #endif
+        
+        #if defined(GL_SHADER_BINARY_FORMATS)
+        case GL_SHADER_BINARY_FORMATS:
+            query = GL_NUM_SHADER_BINARY_FORMATS;
+            break;
+        #endif
+        
+        case GL_BLEND_COLOR:
+        case GL_COLOR_CLEAR_VALUE:
+        case GL_COLOR_WRITEMASK:
+        case GL_SCISSOR_BOX:
+        case GL_VIEWPORT:
+            nr_params = 4;
+            break;
+        
+        case GL_ALIASED_LINE_WIDTH_RANGE:
+        case GL_ALIASED_POINT_SIZE_RANGE:
+        case GL_DEPTH_RANGE:
+        #if defined(GL_LINE_WIDTH_RANGE)
+        case GL_LINE_WIDTH_RANGE:
+        #endif
+        case GL_MAX_VIEWPORT_DIMS:
+        #if defined(GL_POINT_SIZE_RANGE)
+        case GL_POINT_SIZE_RANGE:
+        #endif
+        #if defined(GL_VIEWPORT_BOUNDS_RANGE)
+        case GL_VIEWPORT_BOUNDS_RANGE:
+        #endif
+            nr_params = 2;
+            break;
+            
+        default:
+            nr_params = 1;
+        }
+        
+        if (nr_params == 0)
+        {
+            sipCpp->glGetIntegerv(query, &nr_params);
+            params = new GLfloat[nr_params];
+        }
+        else
+        {
+            params = fixed_params;
+        }
+        
+        sipCpp->glGetFloatv(a0, params);
+        a1 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+            
+        if (params != fixed_params)
+            delete[] params;
+%End
+
+    GLenum glGetError();
+    void glGetDoublev(GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLdouble fixed_params[4], *params;
+        GLint nr_params = 0;
+        GLenum query;
+        
+        switch (a0)
+        {
+        case GL_COMPRESSED_TEXTURE_FORMATS:
+            query = GL_NUM_COMPRESSED_TEXTURE_FORMATS;
+            break;
+        
+        #if defined(GL_PROGRAM_BINARY_FORMATS)
+        case GL_PROGRAM_BINARY_FORMATS:
+            query = GL_NUM_PROGRAM_BINARY_FORMATS;
+            break;
+        #endif
+        
+        #if defined(GL_SHADER_BINARY_FORMATS)
+        case GL_SHADER_BINARY_FORMATS:
+            query = GL_NUM_SHADER_BINARY_FORMATS;
+            break;
+        #endif
+        
+        case GL_BLEND_COLOR:
+        case GL_COLOR_CLEAR_VALUE:
+        case GL_COLOR_WRITEMASK:
+        case GL_SCISSOR_BOX:
+        case GL_VIEWPORT:
+            nr_params = 4;
+            break;
+        
+        case GL_ALIASED_LINE_WIDTH_RANGE:
+        case GL_ALIASED_POINT_SIZE_RANGE:
+        case GL_DEPTH_RANGE:
+        #if defined(GL_LINE_WIDTH_RANGE)
+        case GL_LINE_WIDTH_RANGE:
+        #endif
+        case GL_MAX_VIEWPORT_DIMS:
+        #if defined(GL_POINT_SIZE_RANGE)
+        case GL_POINT_SIZE_RANGE:
+        #endif
+        #if defined(GL_VIEWPORT_BOUNDS_RANGE)
+        case GL_VIEWPORT_BOUNDS_RANGE:
+        #endif
+            nr_params = 2;
+            break;
+            
+        default:
+            nr_params = 1;
+        }
+        
+        if (nr_params == 0)
+        {
+            sipCpp->glGetIntegerv(query, &nr_params);
+            params = new GLdouble[nr_params];
+        }
+        else
+        {
+            params = fixed_params;
+        }
+        
+        sipCpp->glGetDoublev(a0, params);
+        a1 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params);
+            
+        if (params != fixed_params)
+            delete[] params;
+%End
+
+    void glGetBooleanv(GLenum pname, SIP_PYOBJECT *params /DocType="bool-or-tuple"/);
+%MethodCode
+        GLboolean fixed_params[4], *params;
+        GLint nr_params = 0;
+        GLenum query;
+        
+        switch (a0)
+        {
+        case GL_COMPRESSED_TEXTURE_FORMATS:
+            query = GL_NUM_COMPRESSED_TEXTURE_FORMATS;
+            break;
+        
+        #if defined(GL_PROGRAM_BINARY_FORMATS)
+        case GL_PROGRAM_BINARY_FORMATS:
+            query = GL_NUM_PROGRAM_BINARY_FORMATS;
+            break;
+        #endif
+        
+        #if defined(GL_SHADER_BINARY_FORMATS)
+        case GL_SHADER_BINARY_FORMATS:
+            query = GL_NUM_SHADER_BINARY_FORMATS;
+            break;
+        #endif
+        
+        case GL_BLEND_COLOR:
+        case GL_COLOR_CLEAR_VALUE:
+        case GL_COLOR_WRITEMASK:
+        case GL_SCISSOR_BOX:
+        case GL_VIEWPORT:
+            nr_params = 4;
+            break;
+        
+        case GL_ALIASED_LINE_WIDTH_RANGE:
+        case GL_ALIASED_POINT_SIZE_RANGE:
+        case GL_DEPTH_RANGE:
+        #if defined(GL_LINE_WIDTH_RANGE)
+        case GL_LINE_WIDTH_RANGE:
+        #endif
+        case GL_MAX_VIEWPORT_DIMS:
+        #if defined(GL_POINT_SIZE_RANGE)
+        case GL_POINT_SIZE_RANGE:
+        #endif
+        #if defined(GL_VIEWPORT_BOUNDS_RANGE)
+        case GL_VIEWPORT_BOUNDS_RANGE:
+        #endif
+            nr_params = 2;
+            break;
+            
+        default:
+            nr_params = 1;
+        }
+        
+        if (nr_params == 0)
+        {
+            sipCpp->glGetIntegerv(query, &nr_params);
+            params = new GLboolean[nr_params];
+        }
+        else
+        {
+            params = fixed_params;
+        }
+        
+        sipCpp->glGetBooleanv(a0, params);
+        a1 = qpyopengl_from_GLboolean(&sipIsErr, params, nr_params);
+            
+        if (params != fixed_params)
+            delete[] params;
+%End
+
+    void glReadBuffer(GLenum mode);
+    void glPixelStorei(GLenum pname, GLint param);
+    void glPixelStoref(GLenum pname, GLfloat param);
+    void glDepthFunc(GLenum func);
+    void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass);
+    void glStencilFunc(GLenum func, GLint ref, GLuint mask);
+    void glLogicOp(GLenum opcode);
+    void glBlendFunc(GLenum sfactor, GLenum dfactor);
+    void glFlush();
+    void glFinish();
+    void glEnable(GLenum cap);
+    void glDisable(GLenum cap);
+    void glDepthMask(GLboolean flag);
+    void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+    void glStencilMask(GLuint mask);
+    void glClearDepth(GLdouble depth);
+    void glClearStencil(GLint s);
+    void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+    void glClear(GLbitfield mask);
+    void glDrawBuffer(GLenum mode);
+    void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array);
+%End
+
+    void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a7, a6, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexImage1D(a0, a1, a2, a3, a4, a5, a6, array);
+%End
+
+    void glTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexParameteriv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glTexParameteri(GLenum target, GLenum pname, GLint param);
+    void glTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexParameterfv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glTexParameterf(GLenum target, GLenum pname, GLfloat param);
+    void glScissor(GLint x, GLint y, GLsizei width, GLsizei height);
+    void glPolygonMode(GLenum face, GLenum mode);
+    void glPointSize(GLfloat size);
+    void glLineWidth(GLfloat width);
+    void glHint(GLenum target, GLenum mode);
+    void glFrontFace(GLenum mode);
+    void glCullFace(GLenum mode);
+    void glIndexubv(SIP_PYOBJECT c /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glIndexubv(reinterpret_cast<const GLubyte *>(array));
+%End
+
+    void glIndexub(GLubyte c);
+    GLboolean glIsTexture(GLuint texture);
+    void glGenTextures(GLsizei n, SIP_PYOBJECT *textures /DocType="int-or-tuple"/);
+%MethodCode
+        GLuint *params = new GLuint[a0];
+            
+        sipCpp->glGenTextures(a0, params);
+        
+        a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0);
+        
+        delete[] params;
+%End
+
+    void glDeleteTextures(GLsizei n, SIP_PYOBJECT textures /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDeleteTextures(a0, reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glBindTexture(GLenum target, GLuint texture);
+    void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT pixels /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array);
+%End
+
+    void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, SIP_PYOBJECT pixels /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a6, a5, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexSubImage1D(a0, a1, a2, a3, a4, a5, array);
+%End
+
+    void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+    void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+    void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+    void glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+    void glPolygonOffset(GLfloat factor, GLfloat units);
+    void glDrawElements(GLenum mode, GLsizei count, GLenum type, SIP_PYOBJECT indices /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a3, a2, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDrawElements(a0, a1, a2, array);
+%End
+
+    void glDrawArrays(GLenum mode, GLint first, GLsizei count);
+    void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+    void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, SIP_PYOBJECT pixels /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a10, a9, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexSubImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, array);
+%End
+
+    void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a9, a8, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, array);
+%End
+
+    void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, SIP_PYOBJECT indices /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDrawRangeElements(a0, a1, a2, a3, a4, array);
+%End
+
+    void glBlendEquation(GLenum mode);
+    void glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+    void glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glCompressedTexSubImage1D(a0, a1, a2, a3, a4, a5, array);
+%End
+
+    void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a8, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glCompressedTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array);
+%End
+
+    void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a10, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glCompressedTexSubImage3D(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9,
+                array);
+%End
+
+    void glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glCompressedTexImage1D(a0, a1, a2, a3, a4, a5, array);
+%End
+
+    void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a7, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glCompressedTexImage2D(a0, a1, a2, a3, a4, a5, a6, array);
+%End
+
+    void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a8, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glCompressedTexImage3D(a0, a1, a2, a3, a4, a5, a6, a7, array);
+%End
+
+    void glSampleCoverage(GLfloat value, GLboolean invert);
+    void glActiveTexture(GLenum texture);
+    void glPointParameteriv(GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glPointParameteriv(a0, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glPointParameteri(GLenum pname, GLint param);
+    void glPointParameterfv(GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glPointParameterfv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glPointParameterf(GLenum pname, GLfloat param);
+    void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+    void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params);
+    GLboolean glUnmapBuffer(GLenum target);
+    void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array;
+        
+        if (a3 == Py_None)
+            array = 0;
+        else
+            array = qpyopengl_value_array(&sipError, a3, GL_UNSIGNED_BYTE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glBufferSubData(a0, a1, a2, array);
+%End
+
+    void glBufferData(GLenum target, GLsizeiptr size, SIP_PYOBJECT data /DocType="sequence-or-buffer"/, GLenum usage);
+%MethodCode
+        const GLvoid *array;
+        
+        if (a2 == Py_None)
+            array = 0;
+        else
+            array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_BYTE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glBufferData(a0, a1, array, a3);
+%End
+
+    GLboolean glIsBuffer(GLuint buffer);
+    void glGenBuffers(GLsizei n, SIP_PYOBJECT *buffers /DocType="int-or-tuple"/);
+%MethodCode
+        GLuint *params = new GLuint[a0];
+            
+        sipCpp->glGenBuffers(a0, params);
+        
+        a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0);
+        
+        delete[] params;
+%End
+
+    void glDeleteBuffers(GLsizei n, SIP_PYOBJECT buffers /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDeleteBuffers(a0, reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glBindBuffer(GLenum target, GLuint buffer);
+    void glGetQueryiv(GLenum target, GLenum pname, GLint *params);
+    void glEndQuery(GLenum target);
+    void glBeginQuery(GLenum target, GLuint id);
+    GLboolean glIsQuery(GLuint id);
+    void glDeleteQueries(GLsizei n, SIP_PYOBJECT ids /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDeleteQueries(a0, reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glGenQueries(GLsizei n, SIP_PYOBJECT *ids /DocType="int-or-tuple"/);
+%MethodCode
+        GLuint *params = new GLuint[a0];
+            
+        sipCpp->glGenQueries(a0, params);
+        
+        a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0);
+        
+        delete[] params;
+%End
+
+    void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, SIP_PYOBJECT pointer /DocType="sequence-or-buffer-or-offset"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array_cached(&sipError, a5, a2, sipSelf,
+                "VertexAttribPointer", a0);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttribPointer(a0, a1, a2, a3, a4, array);
+%End
+
+    void glValidateProgram(GLuint program);
+    void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniformMatrix4fv(a0, a1, a2,
+                    reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniformMatrix3fv(a0, a1, a2,
+                    reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniformMatrix2fv(a0, a1, a2,
+                    reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniform4iv(GLint location, GLsizei count, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform4iv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glUniform3iv(GLint location, GLsizei count, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform3iv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glUniform2iv(GLint location, GLsizei count, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform2iv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glUniform1iv(GLint location, GLsizei count, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform1iv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glUniform4fv(GLint location, GLsizei count, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform4fv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniform3fv(GLint location, GLsizei count, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform3fv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniform2fv(GLint location, GLsizei count, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform2fv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniform1fv(GLint location, GLsizei count, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform1fv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+    void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2);
+    void glUniform2i(GLint location, GLint v0, GLint v1);
+    void glUniform1i(GLint location, GLint v0);
+    void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+    void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+    void glUniform2f(GLint location, GLfloat v0, GLfloat v1);
+    void glUniform1f(GLint location, GLfloat v0);
+    void glUseProgram(GLuint program);
+    void glLinkProgram(GLuint program);
+    GLboolean glIsShader(GLuint shader);
+    GLboolean glIsProgram(GLuint program);
+    void glGetVertexAttribiv(GLuint index, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_CURRENT_VERTEX_ATTRIB:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetVertexAttribiv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    void glGetVertexAttribfv(GLuint index, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_CURRENT_VERTEX_ATTRIB:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetVertexAttribfv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+%End
+
+    void glGetVertexAttribdv(GLuint index, GLenum pname, SIP_PYOBJECT *params /DocType="double-or-tuple"/);
+%MethodCode
+        GLdouble params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_CURRENT_VERTEX_ATTRIB:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetVertexAttribdv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params);
+%End
+
+    GLint glGetUniformLocation(GLuint program, const GLchar *name);
+    SIP_PYOBJECT glGetShaderSource(GLuint shader) /DocType="Py_v3:bytes;str"/;
+%MethodCode
+        GLint bufsize;
+        
+        sipCpp->glGetShaderiv(a0, GL_SHADER_SOURCE_LENGTH, &bufsize);
+        
+        if (bufsize > 0)
+        {
+            GLchar *source = new GLchar[bufsize];
+        
+            sipCpp->glGetShaderSource(a0, bufsize, 0, source);
+            sipRes = SIPBytes_FromString(source);
+        
+            delete[] source;
+        }
+        else
+        {
+            sipRes = SIPBytes_FromString("");
+        }
+%End
+
+    SIP_PYOBJECT glGetShaderInfoLog(GLuint shader) /DocType="Py_v3:bytes;str"/;
+%MethodCode
+        GLint bufsize;
+        
+        sipCpp->glGetShaderiv(a0, GL_INFO_LOG_LENGTH, &bufsize);
+        
+        if (bufsize > 0)
+        {
+            GLchar *log = new GLchar[bufsize];
+        
+            sipCpp->glGetShaderInfoLog(a0, bufsize, 0, log);
+            sipRes = SIPBytes_FromString(log);
+        
+            delete[] log;
+        }
+        else
+        {
+            sipRes = SIPBytes_FromString("");
+        }
+%End
+
+    void glGetShaderiv(GLuint shader, GLenum pname, GLint *params);
+    SIP_PYOBJECT glGetProgramInfoLog(GLuint program) /DocType="Py_v3:bytes;str"/;
+%MethodCode
+        GLint bufsize;
+        
+        sipCpp->glGetProgramiv(a0, GL_INFO_LOG_LENGTH, &bufsize);
+        
+        if (bufsize > 0)
+        {
+            GLchar *log = new GLchar[bufsize];
+        
+            sipCpp->glGetProgramInfoLog(a0, bufsize, 0, log);
+            sipRes = SIPBytes_FromString(log);
+        
+            delete[] log;
+        }
+        else
+        {
+            sipRes = SIPBytes_FromString("");
+        }
+%End
+
+    void glGetProgramiv(GLuint program, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[3];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        #if defined(GL_COMPUTE_LOCAL_WORK_SIZE)
+        case GL_COMPUTE_LOCAL_WORK_SIZE:
+            nr_params = 3;
+            break;
+        #endif
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetProgramiv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    GLint glGetAttribLocation(GLuint program, const GLchar *name);
+    SIP_PYOBJECT glGetAttachedShaders(GLuint program) /DocType="tuple-of-int"/;
+%MethodCode
+        GLint nr_shaders;
+        
+        sipCpp->glGetProgramiv(a0, GL_ATTACHED_SHADERS, &nr_shaders);
+        
+        if (nr_shaders < 1)
+        {
+            sipRes = PyTuple_New(0);
+        }
+        else
+        {
+            GLuint *shaders = new GLuint[nr_shaders];
+        
+            sipCpp->glGetAttachedShaders(a0, nr_shaders, 0, shaders);
+        
+            sipRes = PyTuple_New(nr_shaders);
+        
+            if (sipRes)
+            {
+                for (GLint i = 0; i < nr_shaders; ++i)
+                {
+                    PyObject *itm = SIPLong_FromLong(shaders[i]);
+                    
+                    if (!itm)
+                    {
+                        Py_DECREF(sipRes);
+                        sipRes = 0;
+                        break;
+                    }
+                    
+                    PyTuple_SET_ITEM(sipRes, i, itm);
+                }
+            }
+        
+            delete[] shaders;
+        }
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    SIP_PYOBJECT glGetActiveUniform(GLuint program, GLuint index) /DocType="str, int, int"/;
+%MethodCode
+        GLint bufsize;
+        
+        sipCpp->glGetProgramiv(a0, GL_ACTIVE_UNIFORM_MAX_LENGTH, &bufsize);
+        
+        GLchar *name = new GLchar[bufsize];
+        GLint size;
+        GLenum type;
+        
+        sipCpp->glGetActiveUniform(a0, a1, bufsize, 0, &size, &type, name);
+        
+        sipRes = Py_BuildValue("siI", name, size, type);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+        
+        delete[] name;
+%End
+
+    SIP_PYOBJECT glGetActiveAttrib(GLuint program, GLuint index) /DocType="str, int, int"/;
+%MethodCode
+        GLint bufsize;
+        
+        sipCpp->glGetProgramiv(a0, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &bufsize);
+        
+        GLchar *name = new GLchar[bufsize];
+        GLint size;
+        GLenum type;
+        
+        sipCpp->glGetActiveAttrib(a0, a1, bufsize, 0, &size, &type, name);
+        
+        sipRes = Py_BuildValue("siI", name, size, type);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+        
+        delete[] name;
+%End
+
+    void glEnableVertexAttribArray(GLuint index);
+    void glDisableVertexAttribArray(GLuint index);
+    void glDetachShader(GLuint program, GLuint shader);
+    void glDeleteShader(GLuint shader);
+    void glDeleteProgram(GLuint program);
+    GLuint glCreateShader(GLenum type);
+    GLuint glCreateProgram();
+    void glCompileShader(GLuint shader);
+    void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name);
+    void glAttachShader(GLuint program, GLuint shader);
+    void glStencilMaskSeparate(GLenum face, GLuint mask);
+    void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
+    void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+    void glDrawBuffers(GLsizei n, SIP_PYOBJECT bufs /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDrawBuffers(a0, reinterpret_cast<const GLenum *>(array));
+%End
+
+    void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
+    void glTranslatef(GLfloat x, GLfloat y, GLfloat z);
+    void glTranslated(GLdouble x, GLdouble y, GLdouble z);
+    void glScalef(GLfloat x, GLfloat y, GLfloat z);
+    void glScaled(GLdouble x, GLdouble y, GLdouble z);
+    void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+    void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+    void glPushMatrix();
+    void glPopMatrix();
+    void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+    void glMultMatrixd(SIP_PYOBJECT m /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultMatrixd(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glMultMatrixf(SIP_PYOBJECT m /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultMatrixf(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glMatrixMode(GLenum mode);
+    void glLoadMatrixd(SIP_PYOBJECT m /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glLoadMatrixd(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glLoadMatrixf(SIP_PYOBJECT m /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glLoadMatrixf(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glLoadIdentity();
+    void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+    GLboolean glIsList(GLuint list);
+    void glGetTexGeniv(GLenum coord, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_OBJECT_PLANE:
+        case GL_EYE_PLANE:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetTexGeniv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    void glGetTexGenfv(GLenum coord, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_OBJECT_PLANE:
+        case GL_EYE_PLANE:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetTexGenfv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+%End
+
+    void glGetTexGendv(GLenum coord, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLdouble params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_OBJECT_PLANE:
+        case GL_EYE_PLANE:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetTexGendv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLdouble(&sipIsErr, params, nr_params);
+%End
+
+    void glGetTexEnviv(GLenum target, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_TEXTURE_ENV_COLOR:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetTexEnviv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    void glGetTexEnvfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_TEXTURE_ENV_COLOR:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetTexEnvfv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+%End
+
+    void glGetMaterialiv(GLenum face, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_SHININESS:
+            nr_params = 1;
+            break;
+        
+        case GL_COLOR_INDEXES:
+            nr_params = 3;
+            break;
+        
+        default:
+            nr_params = 4;
+        }
+        
+        sipCpp->glGetMaterialiv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    void glGetMaterialfv(GLenum face, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_SHININESS:
+            nr_params = 1;
+            break;
+        
+        case GL_COLOR_INDEXES:
+            nr_params = 3;
+            break;
+        
+        default:
+            nr_params = 4;
+        }
+        
+        sipCpp->glGetMaterialfv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+%End
+
+    void glGetLightiv(GLenum light, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_AMBIENT:
+        case GL_DIFFUSE:
+        case GL_SPECULAR:
+        case GL_POSITION:
+            nr_params = 4;
+            break;
+        
+        case GL_SPOT_DIRECTION:
+            nr_params = 3;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetLightiv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    void glGetLightfv(GLenum light, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_AMBIENT:
+        case GL_DIFFUSE:
+        case GL_SPECULAR:
+        case GL_POSITION:
+            nr_params = 4;
+            break;
+        
+        case GL_SPOT_DIRECTION:
+            nr_params = 3;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetLightfv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+%End
+
+    void glGetClipPlane(GLenum plane, SIP_PYOBJECT *equation /DocType="tuple"/);
+%MethodCode
+        GLdouble params[4];
+        
+        sipCpp->glGetClipPlane(a0, params);
+        
+        a1 = qpyopengl_from_GLdouble(&sipIsErr, params, 4);
+%End
+
+    void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT pixels /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a4, a3, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDrawPixels(a0, a1, a2, a3, array);
+%End
+
+    void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
+    void glPixelMapusv(GLenum map, GLint mapsize, SIP_PYOBJECT values /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_SHORT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glPixelMapusv(a0, a1, reinterpret_cast<const GLushort *>(array));
+%End
+
+    void glPixelMapuiv(GLenum map, GLint mapsize, SIP_PYOBJECT values /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glPixelMapuiv(a0, a1, reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glPixelMapfv(GLenum map, GLint mapsize, SIP_PYOBJECT values /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glPixelMapfv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glPixelTransferi(GLenum pname, GLint param);
+    void glPixelTransferf(GLenum pname, GLfloat param);
+    void glPixelZoom(GLfloat xfactor, GLfloat yfactor);
+    void glAlphaFunc(GLenum func, GLfloat ref);
+    void glEvalPoint2(GLint i, GLint j);
+    void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
+    void glEvalPoint1(GLint i);
+    void glEvalMesh1(GLenum mode, GLint i1, GLint i2);
+    void glEvalCoord2fv(SIP_PYOBJECT u /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glEvalCoord2fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glEvalCoord2f(GLfloat u, GLfloat v);
+    void glEvalCoord2dv(SIP_PYOBJECT u /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glEvalCoord2dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glEvalCoord2d(GLdouble u, GLdouble v);
+    void glEvalCoord1fv(SIP_PYOBJECT u /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glEvalCoord1fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glEvalCoord1f(GLfloat u);
+    void glEvalCoord1dv(SIP_PYOBJECT u /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glEvalCoord1dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glEvalCoord1d(GLdouble u);
+    void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
+    void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
+    void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2);
+    void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2);
+    void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, SIP_PYOBJECT points /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a9, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMap2f(a0, a1, a2, a3, a4, a5, a6, a7, a8,
+                    reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, SIP_PYOBJECT points /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a9, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMap2d(a0, a1, a2, a3, a4, a5, a6, a7, a8,
+                    reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, SIP_PYOBJECT points /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a5, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMap1f(a0, a1, a2, a3, a4,
+                    reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, SIP_PYOBJECT points /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a5, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMap1d(a0, a1, a2, a3, a4,
+                    reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glPushAttrib(GLbitfield mask);
+    void glPopAttrib();
+    void glAccum(GLenum op, GLfloat value);
+    void glIndexMask(GLuint mask);
+    void glClearIndex(GLfloat c);
+    void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+    void glPushName(GLuint name);
+    void glPopName();
+    void glPassThrough(GLfloat token);
+    void glLoadName(GLuint name);
+    void glInitNames();
+    GLint glRenderMode(GLenum mode);
+    void glTexGeniv(GLenum coord, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexGeniv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glTexGeni(GLenum coord, GLenum pname, GLint param);
+    void glTexGenfv(GLenum coord, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexGenfv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glTexGenf(GLenum coord, GLenum pname, GLfloat param);
+    void glTexGendv(GLenum coord, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexGendv(a0, a1, reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glTexGend(GLenum coord, GLenum pname, GLdouble param);
+    void glTexEnviv(GLenum target, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexEnviv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glTexEnvi(GLenum target, GLenum pname, GLint param);
+    void glTexEnvfv(GLenum target, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexEnvfv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glTexEnvf(GLenum target, GLenum pname, GLfloat param);
+    void glShadeModel(GLenum mode);
+    void glPolygonStipple(SIP_PYOBJECT mask /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glPolygonStipple(reinterpret_cast<const GLubyte *>(array));
+%End
+
+    void glMaterialiv(GLenum face, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMaterialiv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glMateriali(GLenum face, GLenum pname, GLint param);
+    void glMaterialfv(GLenum face, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMaterialfv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glMaterialf(GLenum face, GLenum pname, GLfloat param);
+    void glLineStipple(GLint factor, GLushort pattern);
+    void glLightModeliv(GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glLightModeliv(a0, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glLightModeli(GLenum pname, GLint param);
+    void glLightModelfv(GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glLightModelfv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glLightModelf(GLenum pname, GLfloat param);
+    void glLightiv(GLenum light, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glLightiv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glLighti(GLenum light, GLenum pname, GLint param);
+    void glLightfv(GLenum light, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glLightfv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glLightf(GLenum light, GLenum pname, GLfloat param);
+    void glFogiv(GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glFogiv(a0, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glFogi(GLenum pname, GLint param);
+    void glFogfv(GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glFogfv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glFogf(GLenum pname, GLfloat param);
+    void glColorMaterial(GLenum face, GLenum mode);
+    void glClipPlane(GLenum plane, SIP_PYOBJECT equation /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glClipPlane(a0, reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glVertex4sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex4sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w);
+    void glVertex4iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex4iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glVertex4i(GLint x, GLint y, GLint z, GLint w);
+    void glVertex4fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex4fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+    void glVertex4dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex4dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+    void glVertex3sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex3sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glVertex3s(GLshort x, GLshort y, GLshort z);
+    void glVertex3iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex3iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glVertex3i(GLint x, GLint y, GLint z);
+    void glVertex3fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex3fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertex3f(GLfloat x, GLfloat y, GLfloat z);
+    void glVertex3dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex3dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glVertex3d(GLdouble x, GLdouble y, GLdouble z);
+    void glVertex2sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex2sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glVertex2s(GLshort x, GLshort y);
+    void glVertex2iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex2iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glVertex2i(GLint x, GLint y);
+    void glVertex2fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex2fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertex2f(GLfloat x, GLfloat y);
+    void glVertex2dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertex2dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glVertex2d(GLdouble x, GLdouble y);
+    void glTexCoord4sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord4sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q);
+    void glTexCoord4iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord4iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glTexCoord4i(GLint s, GLint t, GLint r, GLint q);
+    void glTexCoord4fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord4fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+    void glTexCoord4dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord4dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+    void glTexCoord3sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord3sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glTexCoord3s(GLshort s, GLshort t, GLshort r);
+    void glTexCoord3iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord3iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glTexCoord3i(GLint s, GLint t, GLint r);
+    void glTexCoord3fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord3fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r);
+    void glTexCoord3dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord3dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r);
+    void glTexCoord2sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord2sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glTexCoord2s(GLshort s, GLshort t);
+    void glTexCoord2iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord2iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glTexCoord2i(GLint s, GLint t);
+    void glTexCoord2fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord2fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glTexCoord2f(GLfloat s, GLfloat t);
+    void glTexCoord2dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord2dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glTexCoord2d(GLdouble s, GLdouble t);
+    void glTexCoord1sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord1sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glTexCoord1s(GLshort s);
+    void glTexCoord1iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord1iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glTexCoord1i(GLint s);
+    void glTexCoord1fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord1fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glTexCoord1f(GLfloat s);
+    void glTexCoord1dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoord1dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glTexCoord1d(GLdouble s);
+    void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2);
+    void glRecti(GLint x1, GLint y1, GLint x2, GLint y2);
+    void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
+    void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
+    void glRasterPos4sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos4sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w);
+    void glRasterPos4iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos4iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glRasterPos4i(GLint x, GLint y, GLint z, GLint w);
+    void glRasterPos4fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos4fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+    void glRasterPos4dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos4dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+    void glRasterPos3sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos3sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glRasterPos3s(GLshort x, GLshort y, GLshort z);
+    void glRasterPos3iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos3iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glRasterPos3i(GLint x, GLint y, GLint z);
+    void glRasterPos3fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos3fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z);
+    void glRasterPos3dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos3dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z);
+    void glRasterPos2sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos2sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glRasterPos2s(GLshort x, GLshort y);
+    void glRasterPos2iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos2iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glRasterPos2i(GLint x, GLint y);
+    void glRasterPos2fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos2fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glRasterPos2f(GLfloat x, GLfloat y);
+    void glRasterPos2dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glRasterPos2dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glRasterPos2d(GLdouble x, GLdouble y);
+    void glNormal3sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glNormal3sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glNormal3s(GLshort nx, GLshort ny, GLshort nz);
+    void glNormal3iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glNormal3iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glNormal3i(GLint nx, GLint ny, GLint nz);
+    void glNormal3fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glNormal3fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz);
+    void glNormal3dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glNormal3dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz);
+    void glNormal3bv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glNormal3bv(reinterpret_cast<const GLbyte *>(array));
+%End
+
+    void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz);
+    void glIndexsv(SIP_PYOBJECT c /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glIndexsv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glIndexs(GLshort c);
+    void glIndexiv(SIP_PYOBJECT c /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glIndexiv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glIndexi(GLint c);
+    void glIndexfv(SIP_PYOBJECT c /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glIndexfv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glIndexf(GLfloat c);
+    void glIndexdv(SIP_PYOBJECT c /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glIndexdv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glIndexd(GLdouble c);
+    void glEnd();
+    void glEdgeFlagv(SIP_PYOBJECT flag /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glEdgeFlagv(reinterpret_cast<const GLboolean *>(array));
+%End
+
+    void glEdgeFlag(GLboolean flag);
+    void glColor4usv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_SHORT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor4usv(reinterpret_cast<const GLushort *>(array));
+%End
+
+    void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha);
+    void glColor4uiv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor4uiv(reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha);
+    void glColor4ubv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor4ubv(reinterpret_cast<const GLubyte *>(array));
+%End
+
+    void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
+    void glColor4sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor4sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha);
+    void glColor4iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor4iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glColor4i(GLint red, GLint green, GLint blue, GLint alpha);
+    void glColor4fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor4fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+    void glColor4dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor4dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
+    void glColor4bv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor4bv(reinterpret_cast<const GLbyte *>(array));
+%End
+
+    void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
+    void glColor3usv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_SHORT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor3usv(reinterpret_cast<const GLushort *>(array));
+%End
+
+    void glColor3us(GLushort red, GLushort green, GLushort blue);
+    void glColor3uiv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor3uiv(reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glColor3ui(GLuint red, GLuint green, GLuint blue);
+    void glColor3ubv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor3ubv(reinterpret_cast<const GLubyte *>(array));
+%End
+
+    void glColor3ub(GLubyte red, GLubyte green, GLubyte blue);
+    void glColor3sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor3sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glColor3s(GLshort red, GLshort green, GLshort blue);
+    void glColor3iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor3iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glColor3i(GLint red, GLint green, GLint blue);
+    void glColor3fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor3fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
+    void glColor3dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor3dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glColor3d(GLdouble red, GLdouble green, GLdouble blue);
+    void glColor3bv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColor3bv(reinterpret_cast<const GLbyte *>(array));
+%End
+
+    void glColor3b(GLbyte red, GLbyte green, GLbyte blue);
+    void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, SIP_PYOBJECT bitmap /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a6, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glBitmap(a0, a1, a2, a3, a4, a5,
+                    reinterpret_cast<const GLubyte *>(array));
+%End
+
+    void glBegin(GLenum mode);
+    void glListBase(GLuint base);
+    GLuint glGenLists(GLsizei range);
+    void glDeleteLists(GLuint list, GLsizei range);
+    void glCallList(GLuint list);
+    void glEndList();
+    void glNewList(GLuint list, GLenum mode);
+    void glPushClientAttrib(GLbitfield mask);
+    void glPopClientAttrib();
+    void glVertexPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /DocType="sequence-or-buffer-or-offset"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array_cached(&sipError, a3, a1, sipSelf,
+                "VertexPointer", 0);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexPointer(a0, a1, a2, array);
+%End
+
+    void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /DocType="sequence-or-buffer-or-offset"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array_cached(&sipError, a3, a1, sipSelf,
+                "TexCoordPointer", 0);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexCoordPointer(a0, a1, a2, array);
+%End
+
+    void glNormalPointer(GLenum type, GLsizei stride, SIP_PYOBJECT pointer /DocType="sequence-or-buffer-or-offset"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array_cached(&sipError, a2, a0, sipSelf,
+                "NormalPointer", 0);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glNormalPointer(a0, a1, array);
+%End
+
+    void glIndexPointer(GLenum type, GLsizei stride, SIP_PYOBJECT pointer /DocType="sequence-or-buffer-or-offset"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array_cached(&sipError, a2, a0, sipSelf,
+                "IndexPointer", 0);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glIndexPointer(a0, a1, array);
+%End
+
+    void glEnableClientState(GLenum array);
+    void glEdgeFlagPointer(GLsizei stride, SIP_PYOBJECT pointer /DocType="sequence-or-buffer-or-offset"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array_cached(&sipError, a1,
+                GL_UNSIGNED_BYTE, sipSelf, "EdgeFlagPointer", 0);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glEdgeFlagPointer(a0, array);
+%End
+
+    void glDisableClientState(GLenum array);
+    void glColorPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /DocType="sequence-or-buffer-or-offset"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array_cached(&sipError, a3, a1, sipSelf,
+                "ColorPointer", 0);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColorPointer(a0, a1, a2, array);
+%End
+
+    void glArrayElement(GLint i);
+    void glResetMinmax(GLenum target);
+    void glResetHistogram(GLenum target);
+    void glMinmax(GLenum target, GLenum internalformat, GLboolean sink);
+    void glHistogram(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+    void glGetConvolutionParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_CONVOLUTION_BORDER_COLOR:
+        case GL_CONVOLUTION_FILTER_SCALE:
+        case GL_CONVOLUTION_FILTER_BIAS:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetConvolutionParameteriv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    void glGetConvolutionParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_CONVOLUTION_BORDER_COLOR:
+        case GL_CONVOLUTION_FILTER_SCALE:
+        case GL_CONVOLUTION_FILTER_BIAS:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetConvolutionParameterfv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+%End
+
+    void glCopyConvolutionFilter2D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+    void glCopyConvolutionFilter1D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+    void glConvolutionParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glConvolutionParameteriv(a0, a1,
+                    reinterpret_cast<const GLint *>(array));
+%End
+
+    void glConvolutionParameteri(GLenum target, GLenum pname, GLint params);
+    void glConvolutionParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glConvolutionParameterfv(a0, a1,
+                    reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glConvolutionParameterf(GLenum target, GLenum pname, GLfloat params);
+    void glConvolutionFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT image /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a6, a5, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glConvolutionFilter2D(a0, a1, a2, a3, a4, a5, array);
+%End
+
+    void glConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, SIP_PYOBJECT image /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glConvolutionFilter1D(a0, a1, a2, a3, a4, array);
+%End
+
+    void glCopyColorSubTable(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+    void glColorSubTable(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColorSubTable(a0, a1, a2, a3, a4, array);
+%End
+
+    void glGetColorTableParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_COLOR_TABLE:
+        case GL_POST_CONVOLUTION_COLOR_TABLE:
+        case GL_POST_COLOR_MATRIX_COLOR_TABLE:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetColorTableParameteriv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    void glGetColorTableParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_COLOR_TABLE:
+        case GL_POST_CONVOLUTION_COLOR_TABLE:
+        case GL_POST_COLOR_MATRIX_COLOR_TABLE:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetColorTableParameterfv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+%End
+
+    void glCopyColorTable(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+    void glColorTableParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColorTableParameteriv(a0, a1,
+                    reinterpret_cast<const GLint *>(array));
+%End
+
+    void glColorTableParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColorTableParameterfv(a0, a1,
+                    reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glColorTable(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, SIP_PYOBJECT table /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a5, a4, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glColorTable(a0, a1, a2, a3, a4, array);
+%End
+
+    void glMultTransposeMatrixd(SIP_PYOBJECT m /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultTransposeMatrixd(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glMultTransposeMatrixf(SIP_PYOBJECT m /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultTransposeMatrixf(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glLoadTransposeMatrixd(SIP_PYOBJECT m /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glLoadTransposeMatrixd(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glLoadTransposeMatrixf(SIP_PYOBJECT m /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glLoadTransposeMatrixf(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glMultiTexCoord4sv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord4sv(a0, reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glMultiTexCoord4s(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+    void glMultiTexCoord4iv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord4iv(a0, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glMultiTexCoord4i(GLenum target, GLint s, GLint t, GLint r, GLint q);
+    void glMultiTexCoord4fv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord4fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+    void glMultiTexCoord4dv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord4dv(a0, reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glMultiTexCoord4d(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+    void glMultiTexCoord3sv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord3sv(a0, reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glMultiTexCoord3s(GLenum target, GLshort s, GLshort t, GLshort r);
+    void glMultiTexCoord3iv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord3iv(a0, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glMultiTexCoord3i(GLenum target, GLint s, GLint t, GLint r);
+    void glMultiTexCoord3fv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord3fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLfloat r);
+    void glMultiTexCoord3dv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord3dv(a0, reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glMultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, GLdouble r);
+    void glMultiTexCoord2sv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord2sv(a0, reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glMultiTexCoord2s(GLenum target, GLshort s, GLshort t);
+    void glMultiTexCoord2iv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord2iv(a0, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glMultiTexCoord2i(GLenum target, GLint s, GLint t);
+    void glMultiTexCoord2fv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord2fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glMultiTexCoord2f(GLenum target, GLfloat s, GLfloat t);
+    void glMultiTexCoord2dv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord2dv(a0, reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glMultiTexCoord2d(GLenum target, GLdouble s, GLdouble t);
+    void glMultiTexCoord1sv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord1sv(a0, reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glMultiTexCoord1s(GLenum target, GLshort s);
+    void glMultiTexCoord1iv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord1iv(a0, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glMultiTexCoord1i(GLenum target, GLint s);
+    void glMultiTexCoord1fv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord1fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glMultiTexCoord1f(GLenum target, GLfloat s);
+    void glMultiTexCoord1dv(GLenum target, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glMultiTexCoord1dv(a0, reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glMultiTexCoord1d(GLenum target, GLdouble s);
+    void glClientActiveTexture(GLenum texture);
+    void glWindowPos3sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glWindowPos3sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glWindowPos3s(GLshort x, GLshort y, GLshort z);
+    void glWindowPos3iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glWindowPos3iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glWindowPos3i(GLint x, GLint y, GLint z);
+    void glWindowPos3fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glWindowPos3fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glWindowPos3f(GLfloat x, GLfloat y, GLfloat z);
+    void glWindowPos3dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glWindowPos3dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glWindowPos3d(GLdouble x, GLdouble y, GLdouble z);
+    void glWindowPos2sv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glWindowPos2sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glWindowPos2s(GLshort x, GLshort y);
+    void glWindowPos2iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glWindowPos2iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glWindowPos2i(GLint x, GLint y);
+    void glWindowPos2fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glWindowPos2fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glWindowPos2f(GLfloat x, GLfloat y);
+    void glWindowPos2dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glWindowPos2dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glWindowPos2d(GLdouble x, GLdouble y);
+    void glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride, SIP_PYOBJECT pointer /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a3, a1, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glSecondaryColorPointer(a0, a1, a2, array);
+%End
+
+    void glSecondaryColor3usv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_SHORT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glSecondaryColor3usv(reinterpret_cast<const GLushort *>(array));
+%End
+
+    void glSecondaryColor3us(GLushort red, GLushort green, GLushort blue);
+    void glSecondaryColor3uiv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glSecondaryColor3uiv(reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glSecondaryColor3ui(GLuint red, GLuint green, GLuint blue);
+    void glSecondaryColor3ubv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glSecondaryColor3ubv(reinterpret_cast<const GLubyte *>(array));
+%End
+
+    void glSecondaryColor3ub(GLubyte red, GLubyte green, GLubyte blue);
+    void glSecondaryColor3sv(SIP_PYBUFFER v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glSecondaryColor3sv(reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glSecondaryColor3s(GLshort red, GLshort green, GLshort blue);
+    void glSecondaryColor3iv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glSecondaryColor3iv(reinterpret_cast<const GLint *>(array));
+%End
+
+    void glSecondaryColor3i(GLint red, GLint green, GLint blue);
+    void glSecondaryColor3fv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glSecondaryColor3fv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glSecondaryColor3f(GLfloat red, GLfloat green, GLfloat blue);
+    void glSecondaryColor3dv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glSecondaryColor3dv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glSecondaryColor3d(GLdouble red, GLdouble green, GLdouble blue);
+    void glSecondaryColor3bv(SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_BYTE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glSecondaryColor3bv(reinterpret_cast<const GLbyte *>(array));
+%End
+
+    void glSecondaryColor3b(GLbyte red, GLbyte green, GLbyte blue);
+    void glFogCoordPointer(GLenum type, GLsizei stride, SIP_PYOBJECT pointer /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, a0, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glFogCoordPointer(a0, a1, array);
+%End
+
+    void glFogCoorddv(SIP_PYOBJECT coord /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glFogCoorddv(reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glFogCoordd(GLdouble coord);
+    void glFogCoordfv(SIP_PYOBJECT coord /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a0, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glFogCoordfv(reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glFogCoordf(GLfloat coord);
+    void glVertexAttrib4usv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_SHORT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4usv(a0, reinterpret_cast<const GLushort *>(array));
+%End
+
+    void glVertexAttrib4uiv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4uiv(a0, reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glVertexAttrib4ubv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4ubv(a0, reinterpret_cast<const GLubyte *>(array));
+%End
+
+    void glVertexAttrib4sv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4sv(a0, reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+    void glVertexAttrib4iv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4iv(a0, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glVertexAttrib4fv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+    void glVertexAttrib4dv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4dv(a0, reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+    void glVertexAttrib4bv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_BYTE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4bv(a0, reinterpret_cast<const GLbyte *>(array));
+%End
+
+    void glVertexAttrib4Nusv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_SHORT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4Nusv(a0, reinterpret_cast<const GLushort *>(array));
+%End
+
+    void glVertexAttrib4Nuiv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4Nuiv(a0, reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glVertexAttrib4Nubv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4Nubv(a0, reinterpret_cast<const GLubyte *>(array));
+%End
+
+    void glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+    void glVertexAttrib4Nsv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4Nsv(a0, reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glVertexAttrib4Niv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4Niv(a0, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glVertexAttrib4Nbv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_BYTE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4Nbv(a0, reinterpret_cast<const GLbyte *>(array));
+%End
+
+    void glVertexAttrib3sv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib3sv(a0, reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z);
+    void glVertexAttrib3fv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib3fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+    void glVertexAttrib3dv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib3dv(a0, reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+    void glVertexAttrib2sv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib2sv(a0, reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glVertexAttrib2s(GLuint index, GLshort x, GLshort y);
+    void glVertexAttrib2fv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib2fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
+    void glVertexAttrib2dv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib2dv(a0, reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y);
+    void glVertexAttrib1sv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_SHORT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib1sv(a0, reinterpret_cast<const GLshort *>(array));
+%End
+
+    void glVertexAttrib1s(GLuint index, GLshort x);
+    void glVertexAttrib1fv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib1fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertexAttrib1f(GLuint index, GLfloat x);
+    void glVertexAttrib1dv(GLuint index, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_DOUBLE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib1dv(a0, reinterpret_cast<const GLdouble *>(array));
+%End
+
+    void glVertexAttrib1d(GLuint index, GLdouble x);
+};
+
+%End
+
+%ModuleHeaderCode
+#include <qopengl.h>
+
+// Imports from QtGui.
+typedef const GLvoid *(*qpyopengl_value_array_t)(sipErrorState *, PyObject *, GLenum, PyObject *);
+extern qpyopengl_value_array_t qpyopengl_value_array;
+
+typedef const GLvoid *(*qpyopengl_value_array_cached_t)(sipErrorState *, PyObject *, GLenum, PyObject *, const char *, GLuint);
+extern qpyopengl_value_array_cached_t qpyopengl_value_array_cached;
+
+typedef PyObject *(*qpyopengl_from_GLint_t)(int *, const GLint *, SIP_SSIZE_T);
+extern qpyopengl_from_GLint_t qpyopengl_from_GLint;
+
+typedef PyObject *(*qpyopengl_from_GLuint_t)(int *, const GLuint *, SIP_SSIZE_T);
+extern qpyopengl_from_GLuint_t qpyopengl_from_GLuint;
+
+typedef PyObject *(*qpyopengl_from_GLboolean_t)(int *, const GLboolean *, SIP_SSIZE_T);
+extern qpyopengl_from_GLboolean_t qpyopengl_from_GLboolean;
+
+typedef PyObject *(*qpyopengl_from_GLfloat_t)(int *, const GLfloat *, SIP_SSIZE_T);
+extern qpyopengl_from_GLfloat_t qpyopengl_from_GLfloat;
+
+typedef PyObject *(*qpyopengl_from_GLdouble_t)(int *, const GLdouble *, SIP_SSIZE_T);
+extern qpyopengl_from_GLdouble_t qpyopengl_from_GLdouble;
+%End
+
+%ModuleCode
+// Imports from QtGui.
+qpyopengl_value_array_t qpyopengl_value_array;
+qpyopengl_value_array_cached_t qpyopengl_value_array_cached;
+qpyopengl_from_GLint_t qpyopengl_from_GLint;
+qpyopengl_from_GLuint_t qpyopengl_from_GLuint;
+qpyopengl_from_GLboolean_t qpyopengl_from_GLboolean;
+qpyopengl_from_GLfloat_t qpyopengl_from_GLfloat;
+qpyopengl_from_GLdouble_t qpyopengl_from_GLdouble;
+%End
+
+%PostInitialisationCode
+// Imports from QtGui.
+qpyopengl_value_array = (qpyopengl_value_array_t)sipImportSymbol("qpyopengl_value_array");
+qpyopengl_value_array_cached = (qpyopengl_value_array_cached_t)sipImportSymbol("qpyopengl_value_array_cached");
+qpyopengl_from_GLint = (qpyopengl_from_GLint_t)sipImportSymbol("qpyopengl_from_GLint");
+qpyopengl_from_GLuint = (qpyopengl_from_GLuint_t)sipImportSymbol("qpyopengl_from_GLuint");
+qpyopengl_from_GLboolean = (qpyopengl_from_GLboolean_t)sipImportSymbol("qpyopengl_from_GLboolean");
+qpyopengl_from_GLfloat = (qpyopengl_from_GLfloat_t)sipImportSymbol("qpyopengl_from_GLfloat");
+qpyopengl_from_GLdouble = (qpyopengl_from_GLdouble_t)sipImportSymbol("qpyopengl_from_GLdouble");
+%End
diff --git a/sip/_QOpenGLFunctions_ES2/_QOpenGLFunctions_ES2mod.sip b/sip/_QOpenGLFunctions_ES2/_QOpenGLFunctions_ES2mod.sip
new file mode 100644
index 0000000..62fe3c0
--- /dev/null
+++ b/sip/_QOpenGLFunctions_ES2/_QOpenGLFunctions_ES2mod.sip
@@ -0,0 +1,46 @@
+// _QOpenGLFunctions_ES2mod.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the _QOpenGLFunctions_ES2 Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%Module(name=PyQt5._QOpenGLFunctions_ES2, keyword_arguments="Optional")
+
+%Import QtGui/QtGuimod.sip
+
+%Copying
+Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+
+This file is part of PyQt5.
+
+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 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.
+
+If you do not wish to use this file under the terms of the GPL version 3.0
+then you may purchase a commercial license.  For more information contact
+info at riverbankcomputing.com.
+
+This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+%End
+
+%Include qopenglfunctions_es2.sip
diff --git a/sip/_QOpenGLFunctions_ES2/qopenglfunctions_es2.sip b/sip/_QOpenGLFunctions_ES2/qopenglfunctions_es2.sip
new file mode 100644
index 0000000..618e9fb
--- /dev/null
+++ b/sip/_QOpenGLFunctions_ES2/qopenglfunctions_es2.sip
@@ -0,0 +1,947 @@
+// qopenglfunctions_es2.sip generated by MetaSIP on Fri Sep 12 22:59:03 2014
+//
+// This file is part of the _QOpenGLFunctions_ES2 Python extension module.
+//
+// Copyright (c) 2014 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// 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 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.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_1_0 -)
+
+class QOpenGLFunctions_ES2 : QAbstractOpenGLFunctions
+{
+%TypeHeaderCode
+#include <qopenglfunctions_es2.h>
+%End
+
+public:
+    QOpenGLFunctions_ES2();
+    bool initializeOpenGLFunctions();
+    void glActiveTexture(GLenum texture);
+    void glAttachShader(GLuint program, GLuint shader);
+    void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name);
+    void glBindBuffer(GLenum target, GLuint buffer);
+    void glBindFramebuffer(GLenum target, GLuint framebuffer);
+    void glBindRenderbuffer(GLenum target, GLuint renderbuffer);
+    void glBindTexture(GLenum target, GLuint texture);
+    void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+    void glBlendEquation(GLenum mode);
+    void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
+    void glBlendFunc(GLenum sfactor, GLenum dfactor);
+    void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+    void glBufferData(GLenum target, GLsizeiptr size, SIP_PYOBJECT data /DocType="sequence-or-buffer"/, GLenum usage);
+%MethodCode
+        const GLvoid *array;
+        
+        if (a2 == Py_None)
+            array = 0;
+        else
+            array = qpyopengl_value_array(&sipError, a2, GL_UNSIGNED_BYTE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glBufferData(a0, a1, array, a3);
+%End
+
+    void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array;
+        
+        if (a3 == Py_None)
+            array = 0;
+        else
+            array = qpyopengl_value_array(&sipError, a3, GL_UNSIGNED_BYTE, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glBufferSubData(a0, a1, a2, array);
+%End
+
+    GLenum glCheckFramebufferStatus(GLenum target);
+    void glClear(GLbitfield mask);
+    void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+    void glClearDepthf(GLclampf depth);
+    void glClearStencil(GLint s);
+    void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+    void glCompileShader(GLuint shader);
+    void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a7, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glCompressedTexImage2D(a0, a1, a2, a3, a4, a5, a6, array);
+%End
+
+    void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, SIP_PYOBJECT data /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a8, GL_UNSIGNED_BYTE,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glCompressedTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array);
+%End
+
+    void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+    void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+    GLuint glCreateProgram();
+    GLuint glCreateShader(GLenum type);
+    void glCullFace(GLenum mode);
+    void glDeleteBuffers(GLsizei n, SIP_PYOBJECT buffers /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDeleteBuffers(a0, reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glDeleteFramebuffers(GLsizei n, SIP_PYOBJECT framebuffers);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDeleteFramebuffers(a0, reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glDeleteProgram(GLuint program);
+    void glDeleteRenderbuffers(GLsizei n, SIP_PYOBJECT renderbuffers);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDeleteRenderbuffers(a0, reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glDeleteShader(GLuint shader);
+    void glDeleteTextures(GLsizei n, SIP_PYOBJECT textures /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_UNSIGNED_INT,
+                sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDeleteTextures(a0, reinterpret_cast<const GLuint *>(array));
+%End
+
+    void glDepthFunc(GLenum func);
+    void glDepthMask(GLboolean flag);
+    void glDepthRangef(GLclampf zNear, GLclampf zFar);
+    void glDetachShader(GLuint program, GLuint shader);
+    void glDisable(GLenum cap);
+    void glDisableVertexAttribArray(GLuint index);
+    void glDrawArrays(GLenum mode, GLint first, GLsizei count);
+    void glDrawElements(GLenum mode, GLsizei count, GLenum type, SIP_PYOBJECT indices /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a3, a2, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glDrawElements(a0, a1, a2, array);
+%End
+
+    void glEnable(GLenum cap);
+    void glEnableVertexAttribArray(GLuint index);
+    void glFinish();
+    void glFlush();
+    void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+    void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+    void glFrontFace(GLenum mode);
+    void glGenBuffers(GLsizei n, SIP_PYOBJECT *buffers /DocType="int-or-tuple"/);
+%MethodCode
+        GLuint *params = new GLuint[a0];
+            
+        sipCpp->glGenBuffers(a0, params);
+        
+        a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0);
+        
+        delete[] params;
+%End
+
+    void glGenerateMipmap(GLenum target);
+    void glGenFramebuffers(GLsizei n, SIP_PYOBJECT framebuffers /DocType="int-or-tuple"/);
+%MethodCode
+        GLuint *params = new GLuint[a0];
+            
+        sipCpp->glGenFramebuffers(a0, params);
+        
+        a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0);
+        
+        delete[] params;
+%End
+
+    void glGenRenderbuffers(GLsizei n, SIP_PYOBJECT *renderbuffers /DocType="int-ot-tuple"/);
+%MethodCode
+        GLuint *params = new GLuint[a0];
+            
+        sipCpp->glGenRenderbuffers(a0, params);
+        
+        a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0);
+        
+        delete[] params;
+%End
+
+    void glGenTextures(GLsizei n, SIP_PYOBJECT textures /DocType="int-or-tuple"/);
+%MethodCode
+        GLuint *params = new GLuint[a0];
+            
+        sipCpp->glGenTextures(a0, params);
+        
+        a1 = qpyopengl_from_GLuint(&sipIsErr, params, a0);
+        
+        delete[] params;
+%End
+
+    SIP_PYOBJECT glGetActiveAttrib(GLuint program, GLuint index) /DocType="str, int, int"/;
+%MethodCode
+        GLint bufsize;
+        
+        sipCpp->glGetProgramiv(a0, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &bufsize);
+        
+        GLchar *name = new GLchar[bufsize];
+        GLint size;
+        GLenum type;
+        
+        sipCpp->glGetActiveAttrib(a0, a1, bufsize, 0, &size, &type, name);
+        
+        sipRes = Py_BuildValue("siI", name, size, type);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+        
+        delete[] name;
+%End
+
+    SIP_PYOBJECT glGetActiveUniform(GLuint program, GLuint index) /DocType="str, int, int"/;
+%MethodCode
+        GLint bufsize;
+        
+        sipCpp->glGetProgramiv(a0, GL_ACTIVE_UNIFORM_MAX_LENGTH, &bufsize);
+        
+        GLchar *name = new GLchar[bufsize];
+        GLint size;
+        GLenum type;
+        
+        sipCpp->glGetActiveUniform(a0, a1, bufsize, 0, &size, &type, name);
+        
+        sipRes = Py_BuildValue("siI", name, size, type);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+        
+        delete[] name;
+%End
+
+    SIP_PYOBJECT glGetAttachedShaders(GLuint program) /DocType="tuple-of-int"/;
+%MethodCode
+        GLint nr_shaders;
+        
+        sipCpp->glGetProgramiv(a0, GL_ATTACHED_SHADERS, &nr_shaders);
+        
+        if (nr_shaders < 1)
+        {
+            sipRes = PyTuple_New(0);
+        }
+        else
+        {
+            GLuint *shaders = new GLuint[nr_shaders];
+        
+            sipCpp->glGetAttachedShaders(a0, nr_shaders, 0, shaders);
+        
+            sipRes = PyTuple_New(nr_shaders);
+        
+            if (sipRes)
+            {
+                for (GLint i = 0; i < nr_shaders; ++i)
+                {
+                    PyObject *itm = SIPLong_FromLong(shaders[i]);
+                    
+                    if (!itm)
+                    {
+                        Py_DECREF(sipRes);
+                        sipRes = 0;
+                        break;
+                    }
+                    
+                    PyTuple_SET_ITEM(sipRes, i, itm);
+                }
+            }
+        
+            delete[] shaders;
+        }
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    int glGetAttribLocation(GLuint program, const GLchar *name);
+    void glGetBooleanv(GLenum pname, SIP_PYOBJECT *params /DocType="bool-or-tuple"/);
+%MethodCode
+        GLboolean fixed_params[4], *params;
+        GLint nr_params = 0;
+        GLenum query;
+        
+        switch (a0)
+        {
+        case GL_COMPRESSED_TEXTURE_FORMATS:
+            query = GL_NUM_COMPRESSED_TEXTURE_FORMATS;
+            break;
+        
+        #if defined(GL_PROGRAM_BINARY_FORMATS)
+        case GL_PROGRAM_BINARY_FORMATS:
+            query = GL_NUM_PROGRAM_BINARY_FORMATS;
+            break;
+        #endif
+        
+        #if defined(GL_SHADER_BINARY_FORMATS)
+        case GL_SHADER_BINARY_FORMATS:
+            query = GL_NUM_SHADER_BINARY_FORMATS;
+            break;
+        #endif
+        
+        case GL_BLEND_COLOR:
+        case GL_COLOR_CLEAR_VALUE:
+        case GL_COLOR_WRITEMASK:
+        case GL_SCISSOR_BOX:
+        case GL_VIEWPORT:
+            nr_params = 4;
+            break;
+        
+        case GL_ALIASED_LINE_WIDTH_RANGE:
+        case GL_ALIASED_POINT_SIZE_RANGE:
+        case GL_DEPTH_RANGE:
+        #if defined(GL_LINE_WIDTH_RANGE)
+        case GL_LINE_WIDTH_RANGE:
+        #endif
+        case GL_MAX_VIEWPORT_DIMS:
+        #if defined(GL_POINT_SIZE_RANGE)
+        case GL_POINT_SIZE_RANGE:
+        #endif
+        #if defined(GL_VIEWPORT_BOUNDS_RANGE)
+        case GL_VIEWPORT_BOUNDS_RANGE:
+        #endif
+            nr_params = 2;
+            break;
+            
+        default:
+            nr_params = 1;
+        }
+        
+        if (nr_params == 0)
+        {
+            sipCpp->glGetIntegerv(query, &nr_params);
+            params = new GLboolean[nr_params];
+        }
+        else
+        {
+            params = fixed_params;
+        }
+        
+        sipCpp->glGetBooleanv(a0, params);
+        a1 = qpyopengl_from_GLboolean(&sipIsErr, params, nr_params);
+            
+        if (params != fixed_params)
+            delete[] params;
+%End
+
+    void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params);
+    GLenum glGetError();
+    void glGetFloatv(GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat fixed_params[4], *params;
+        GLint nr_params = 0;
+        GLenum query;
+        
+        switch (a0)
+        {
+        case GL_COMPRESSED_TEXTURE_FORMATS:
+            query = GL_NUM_COMPRESSED_TEXTURE_FORMATS;
+            break;
+        
+        #if defined(GL_PROGRAM_BINARY_FORMATS)
+        case GL_PROGRAM_BINARY_FORMATS:
+            query = GL_NUM_PROGRAM_BINARY_FORMATS;
+            break;
+        #endif
+        
+        #if defined(GL_SHADER_BINARY_FORMATS)
+        case GL_SHADER_BINARY_FORMATS:
+            query = GL_NUM_SHADER_BINARY_FORMATS;
+            break;
+        #endif
+        
+        case GL_BLEND_COLOR:
+        case GL_COLOR_CLEAR_VALUE:
+        case GL_COLOR_WRITEMASK:
+        case GL_SCISSOR_BOX:
+        case GL_VIEWPORT:
+            nr_params = 4;
+            break;
+        
+        case GL_ALIASED_LINE_WIDTH_RANGE:
+        case GL_ALIASED_POINT_SIZE_RANGE:
+        case GL_DEPTH_RANGE:
+        #if defined(GL_LINE_WIDTH_RANGE)
+        case GL_LINE_WIDTH_RANGE:
+        #endif
+        case GL_MAX_VIEWPORT_DIMS:
+        #if defined(GL_POINT_SIZE_RANGE)
+        case GL_POINT_SIZE_RANGE:
+        #endif
+        #if defined(GL_VIEWPORT_BOUNDS_RANGE)
+        case GL_VIEWPORT_BOUNDS_RANGE:
+        #endif
+            nr_params = 2;
+            break;
+            
+        default:
+            nr_params = 1;
+        }
+        
+        if (nr_params == 0)
+        {
+            sipCpp->glGetIntegerv(query, &nr_params);
+            params = new GLfloat[nr_params];
+        }
+        else
+        {
+            params = fixed_params;
+        }
+        
+        sipCpp->glGetFloatv(a0, params);
+        a1 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+            
+        if (params != fixed_params)
+            delete[] params;
+%End
+
+    void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params);
+    void glGetIntegerv(GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint fixed_params[4], *params;
+        GLint nr_params = 0;
+        GLenum query;
+        
+        switch (a0)
+        {
+        case GL_COMPRESSED_TEXTURE_FORMATS:
+            query = GL_NUM_COMPRESSED_TEXTURE_FORMATS;
+            break;
+        
+        #if defined(GL_PROGRAM_BINARY_FORMATS)
+        case GL_PROGRAM_BINARY_FORMATS:
+            query = GL_NUM_PROGRAM_BINARY_FORMATS;
+            break;
+        #endif
+        
+        #if defined(GL_SHADER_BINARY_FORMATS)
+        case GL_SHADER_BINARY_FORMATS:
+            query = GL_NUM_SHADER_BINARY_FORMATS;
+            break;
+        #endif
+        
+        case GL_BLEND_COLOR:
+        case GL_COLOR_CLEAR_VALUE:
+        case GL_COLOR_WRITEMASK:
+        case GL_SCISSOR_BOX:
+        case GL_VIEWPORT:
+            nr_params = 4;
+            break;
+        
+        case GL_ALIASED_LINE_WIDTH_RANGE:
+        case GL_ALIASED_POINT_SIZE_RANGE:
+        case GL_DEPTH_RANGE:
+        #if defined(GL_LINE_WIDTH_RANGE)
+        case GL_LINE_WIDTH_RANGE:
+        #endif
+        case GL_MAX_VIEWPORT_DIMS:
+        #if defined(GL_POINT_SIZE_RANGE)
+        case GL_POINT_SIZE_RANGE:
+        #endif
+        #if defined(GL_VIEWPORT_BOUNDS_RANGE)
+        case GL_VIEWPORT_BOUNDS_RANGE:
+        #endif
+            nr_params = 2;
+            break;
+            
+        default:
+            nr_params = 1;
+        }
+        
+        if (nr_params == 0)
+        {
+            sipCpp->glGetIntegerv(query, &nr_params);
+            params = new GLint[nr_params];
+        }
+        else
+        {
+            params = fixed_params;
+        }
+        
+        sipCpp->glGetIntegerv(a0, params);
+        a1 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+            
+        if (params != fixed_params)
+            delete[] params;
+%End
+
+    void glGetProgramiv(GLuint program, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[3];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        #if defined(GL_COMPUTE_LOCAL_WORK_SIZE)
+        case GL_COMPUTE_LOCAL_WORK_SIZE:
+            nr_params = 3;
+            break;
+        #endif
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetProgramiv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    SIP_PYOBJECT glGetProgramInfoLog(GLuint program) /DocType="Py_v3:bytes;str"/;
+%MethodCode
+        GLint bufsize;
+        
+        sipCpp->glGetProgramiv(a0, GL_INFO_LOG_LENGTH, &bufsize);
+        
+        if (bufsize > 0)
+        {
+            GLchar *log = new GLchar[bufsize];
+        
+            sipCpp->glGetProgramInfoLog(a0, bufsize, 0, log);
+            sipRes = SIPBytes_FromString(log);
+        
+            delete[] log;
+        }
+        else
+        {
+            sipRes = SIPBytes_FromString("");
+        }
+%End
+
+    void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params);
+    void glGetShaderiv(GLuint shader, GLenum pname, GLint *params);
+    SIP_PYOBJECT glGetShaderInfoLog(GLuint shader) /DocType="Py_v3:bytes;str"/;
+%MethodCode
+        GLint bufsize;
+        
+        sipCpp->glGetShaderiv(a0, GL_INFO_LOG_LENGTH, &bufsize);
+        
+        if (bufsize > 0)
+        {
+            GLchar *log = new GLchar[bufsize];
+        
+            sipCpp->glGetShaderInfoLog(a0, bufsize, 0, log);
+            sipRes = SIPBytes_FromString(log);
+        
+            delete[] log;
+        }
+        else
+        {
+            sipRes = SIPBytes_FromString("");
+        }
+%End
+
+    SIP_PYOBJECT glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype) /DocType="(int, int), int"/;
+%MethodCode
+        GLint range[2], precision;
+        
+        sipCpp->glGetShaderPrecisionFormat(a0, a1, range, &precision);
+        
+        sipRes = Py_BuildValue("(ii)i", (int)range[0], (int)range[1], (int)precision);
+        
+        if (!sipRes)
+            sipIsErr = 1;
+%End
+
+    SIP_PYOBJECT glGetShaderSource(GLuint shader) /DocType="Py_v3:bytes;str"/;
+%MethodCode
+        GLint bufsize;
+        
+        sipCpp->glGetShaderiv(a0, GL_SHADER_SOURCE_LENGTH, &bufsize);
+        
+        if (bufsize > 0)
+        {
+            GLchar *source = new GLchar[bufsize];
+        
+            sipCpp->glGetShaderSource(a0, bufsize, 0, source);
+            sipRes = SIPBytes_FromString(source);
+        
+            delete[] source;
+        }
+        else
+        {
+            sipRes = SIPBytes_FromString("");
+        }
+%End
+
+    const char *glGetString(GLenum name);
+%MethodCode
+        sipRes = reinterpret_cast<const char *>(sipCpp->glGetString(a0));
+%End
+
+    void glGetTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_SWIZZLE_RGBA)
+        #if defined(GL_TEXTURE_SWIZZLE_RGBA)
+        case GL_TEXTURE_SWIZZLE_RGBA:
+        #endif
+        #if defined(GL_TEXTURE_BORDER_COLOR)
+        case GL_TEXTURE_BORDER_COLOR:
+        #endif
+            nr_params = 4;
+            break;
+        #endif
+            
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetTexParameterfv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+%End
+
+    void glGetTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        #if defined(GL_TEXTURE_SWIZZLE_RGBA) || defined(GL_TEXTURE_SWIZZLE_RGBA)
+        #if defined(GL_TEXTURE_SWIZZLE_RGBA)
+        case GL_TEXTURE_SWIZZLE_RGBA:
+        #endif
+        #if defined(GL_TEXTURE_BORDER_COLOR)
+        case GL_TEXTURE_BORDER_COLOR:
+        #endif
+            nr_params = 4;
+            break;
+        #endif
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetTexParameteriv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    int glGetUniformLocation(GLuint program, const GLchar *name);
+    void glGetVertexAttribfv(GLuint index, GLenum pname, SIP_PYOBJECT *params /DocType="float-or-tuple"/);
+%MethodCode
+        GLfloat params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_CURRENT_VERTEX_ATTRIB:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetVertexAttribfv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLfloat(&sipIsErr, params, nr_params);
+%End
+
+    void glGetVertexAttribiv(GLuint index, GLenum pname, SIP_PYOBJECT *params /DocType="int-or-tuple"/);
+%MethodCode
+        GLint params[4];
+        SIP_SSIZE_T nr_params;
+        
+        switch (a1)
+        {
+        case GL_CURRENT_VERTEX_ATTRIB:
+            nr_params = 4;
+            break;
+        
+        default:
+            nr_params = 1;
+        }
+        
+        sipCpp->glGetVertexAttribiv(a0, a1, params);
+        
+        a2 = qpyopengl_from_GLint(&sipIsErr, params, nr_params);
+%End
+
+    void glHint(GLenum target, GLenum mode);
+    GLboolean glIsBuffer(GLuint buffer);
+    GLboolean glIsEnabled(GLenum cap);
+    GLboolean glIsFramebuffer(GLuint framebuffer);
+    GLboolean glIsProgram(GLuint program);
+    GLboolean glIsRenderbuffer(GLuint renderbuffer);
+    GLboolean glIsShader(GLuint shader);
+    GLboolean glIsTexture(GLuint texture);
+    void glLineWidth(GLfloat width);
+    void glLinkProgram(GLuint program);
+    void glPixelStorei(GLenum pname, GLint param);
+    void glPolygonOffset(GLfloat factor, GLfloat units);
+    void glReleaseShaderCompiler();
+    void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+    void glSampleCoverage(GLclampf value, GLboolean invert);
+    void glScissor(GLint x, GLint y, GLsizei width, GLsizei height);
+    void glStencilFunc(GLenum func, GLint ref, GLuint mask);
+    void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
+    void glStencilMask(GLuint mask);
+    void glStencilMaskSeparate(GLenum face, GLuint mask);
+    void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass);
+    void glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
+    void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, SIP_PYOBJECT pixels /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array);
+%End
+
+    void glTexParameterf(GLenum target, GLenum pname, GLfloat param);
+    void glTexParameterfv(GLenum target, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexParameterfv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glTexParameteri(GLenum target, GLenum pname, GLint param);
+    void glTexParameteriv(GLenum target, GLenum pname, SIP_PYOBJECT params /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexParameteriv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, SIP_PYOBJECT pixels /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a8, a7, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, array);
+%End
+
+    void glUniform1f(GLint location, GLfloat x);
+    void glUniform1fv(GLint location, GLsizei count, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform1fv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniform1i(GLint location, GLint x);
+    void glUniform1iv(GLint location, GLsizei count, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform1iv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glUniform2f(GLint location, GLfloat x, GLfloat y);
+    void glUniform2fv(GLint location, GLsizei count, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform2fv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniform2i(GLint location, GLint x, GLint y);
+    void glUniform2iv(GLint location, GLsizei count, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform2iv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z);
+    void glUniform3fv(GLint location, GLsizei count, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform3fv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniform3i(GLint location, GLint x, GLint y, GLint z);
+    void glUniform3iv(GLint location, GLsizei count, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform3iv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+    void glUniform4fv(GLint location, GLsizei count, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform4fv(a0, a1, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w);
+    void glUniform4iv(GLint location, GLsizei count, SIP_PYOBJECT v /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a2, GL_INT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniform4iv(a0, a1, reinterpret_cast<const GLint *>(array));
+%End
+
+    void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniformMatrix2fv(a0, a1, a2,
+                    reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniformMatrix3fv(a0, a1, a2,
+                    reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, SIP_PYOBJECT value /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a3, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glUniformMatrix4fv(a0, a1, a2,
+                    reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glUseProgram(GLuint program);
+    void glValidateProgram(GLuint program);
+    void glVertexAttrib1f(GLuint indx, GLfloat x);
+    void glVertexAttrib1fv(GLuint indx, SIP_PYOBJECT values /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib1fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y);
+    void glVertexAttrib2fv(GLuint indx, SIP_PYOBJECT values /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib2fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z);
+    void glVertexAttrib3fv(GLuint indx, SIP_PYOBJECT values /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib3fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+    void glVertexAttrib4fv(GLuint indx, SIP_PYOBJECT values /DocType="sequence-or-buffer"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array(&sipError, a1, GL_FLOAT, sipSelf);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttrib4fv(a0, reinterpret_cast<const GLfloat *>(array));
+%End
+
+    void glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, SIP_PYOBJECT ptr /DocType="sequence-or-buffer-or-offset"/);
+%MethodCode
+        const GLvoid *array = qpyopengl_value_array_cached(&sipError, a5, a2, sipSelf,
+                "VertexAttribPointer", a0);
+        
+        if (sipError == sipErrorNone)
+            sipCpp->glVertexAttribPointer(a0, a1, a2, a3, a4, array);
+%End
+
+    void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
+};
+
+%End
+
+%ModuleHeaderCode
+#include <qopengl.h>
+
+// Imports from QtGui.
+typedef const GLvoid *(*qpyopengl_value_array_t)(sipErrorState *, PyObject *, GLenum, PyObject *);
+extern qpyopengl_value_array_t qpyopengl_value_array;
+
+typedef const GLvoid *(*qpyopengl_value_array_cached_t)(sipErrorState *, PyObject *, GLenum, PyObject *, const char *, GLuint);
+extern qpyopengl_value_array_cached_t qpyopengl_value_array_cached;
+
+typedef PyObject *(*qpyopengl_from_GLint_t)(int *, const GLint *, SIP_SSIZE_T);
+extern qpyopengl_from_GLint_t qpyopengl_from_GLint;
+
+typedef PyObject *(*qpyopengl_from_GLuint_t)(int *, const GLuint *, SIP_SSIZE_T);
+extern qpyopengl_from_GLuint_t qpyopengl_from_GLuint;
+
+typedef PyObject *(*qpyopengl_from_GLboolean_t)(int *, const GLboolean *, SIP_SSIZE_T);
+extern qpyopengl_from_GLboolean_t qpyopengl_from_GLboolean;
+
+typedef PyObject *(*qpyopengl_from_GLfloat_t)(int *, const GLfloat *, SIP_SSIZE_T);
+extern qpyopengl_from_GLfloat_t qpyopengl_from_GLfloat;
+%End
+
+%ModuleCode
+// Imports from QtGui.
+qpyopengl_value_array_t qpyopengl_value_array;
+qpyopengl_value_array_cached_t qpyopengl_value_array_cached;
+qpyopengl_from_GLint_t qpyopengl_from_GLint;
+qpyopengl_from_GLuint_t qpyopengl_from_GLuint;
+qpyopengl_from_GLboolean_t qpyopengl_from_GLboolean;
+qpyopengl_from_GLfloat_t qpyopengl_from_GLfloat;
+%End
+
+%PostInitialisationCode
+// Imports from QtGui.
+qpyopengl_value_array = (qpyopengl_value_array_t)sipImportSymbol("qpyopengl_value_array");
+qpyopengl_value_array_cached = (qpyopengl_value_array_cached_t)sipImportSymbol("qpyopengl_value_array_cached");
+qpyopengl_from_GLint = (qpyopengl_from_GLint_t)sipImportSymbol("qpyopengl_from_GLint");
+qpyopengl_from_GLuint = (qpyopengl_from_GLuint_t)sipImportSymbol("qpyopengl_from_GLuint");
+qpyopengl_from_GLboolean = (qpyopengl_from_GLboolean_t)sipImportSymbol("qpyopengl_from_GLboolean");
+qpyopengl_from_GLfloat = (qpyopengl_from_GLfloat_t)sipImportSymbol("qpyopengl_from_GLfloat");
+%End
diff --git a/sip/pyqt-gpl.sip b/sip/pyqt-gpl.sip
new file mode 100644
index 0000000..bec8f9e
--- /dev/null
+++ b/sip/pyqt-gpl.sip
@@ -0,0 +1 @@
+%License /Type="gpl"/

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/pyqt5.git



More information about the Reproducible-commits mailing list